libstruts1.2-java-1.2.9/0000755000175000017500000000000010423140514015456 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/conf/0000755000175000017500000000000010404045172016406 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/conf/qa/0000755000175000017500000000000010423130300016774 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/conf/qa/CheckStyle.xml0000644000175000017500000001074710404045246021602 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/conf/share/0000755000175000017500000000000010423130300017475 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/conf/share/MANIFEST.MF0000644000175000017500000000077210404045172021150 0ustar arnaudarnaud00000000000000Manifest-Version: 1.0 Extension-Name: Struts Framework Specification-Title: Struts Framework Specification-Vendor: The Apache Software Foundation Specification-Version: @version@ Implementation-Title: Struts Framework Implementation-Vendor: The Apache Software Foundation Implementation-Vendor-Id: org.apache Implementation-Version: @version@ Class-Path: commons-beanutils.jar commons-digester.jar commons-fileupload.jar commons-logging.jar commons-validator.jar jakarta-oro.jarlibstruts1.2-java-1.2.9/conf/share/struts-config_1_0.dtd0000644000175000017500000004447010404045244023464 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/conf/share/struts-config_1_1.dtd0000644000175000017500000010530310404045226023456 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/conf/share/struts-config_1_2.dtd0000644000175000017500000010413010404045212023447 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/conf/share/tiles-config_1_1.dtd0000644000175000017500000003014310404045232023226 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/conf/share/validator-rules.xml0000644000175000017500000003270710404045212023353 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/conf/share/web-app_2_2.dtd0000644000175000017500000003717210404045222022210 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/conf/share/web-app_2_3.dtd0000644000175000017500000010152310404045206022203 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/conf/test/0000755000175000017500000000000010423130300017352 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/conf/test/tomcat32/0000755000175000017500000000000010423130300021006 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/conf/test/tomcat32/server.xml0000644000175000017500000000357610404045230023057 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/conf/test/tomcat33/0000755000175000017500000000000010423130300021007 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/conf/test/tomcat33/apps-test.xml0000644000175000017500000000066610404045212023467 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/conf/test/tomcat33/modules.xml0000644000175000017500000001026710404045222023216 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/conf/test/tomcat33/server.xml0000644000175000017500000001327010404045232023052 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/conf/test/tomcat40/0000755000175000017500000000000010423130300021005 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/conf/test/tomcat40/server.xml0000644000175000017500000000141010404045236023045 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/conf/test/tomcat41/0000755000175000017500000000000010423130300021006 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/conf/test/tomcat41/server.xml0000644000175000017500000000351010404045240023044 0ustar arnaudarnaud00000000000000 factory org.apache.catalina.users.MemoryUserDatabaseFactory pathname conf/tomcat-users.xml libstruts1.2-java-1.2.9/conf/test/tomcat50/0000755000175000017500000000000010423130300021006 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/conf/test/tomcat50/server.xml0000644000175000017500000000344010404045234023051 0ustar arnaudarnaud00000000000000 factory org.apache.catalina.users.MemoryUserDatabaseFactory pathname conf/tomcat-users.xml libstruts1.2-java-1.2.9/conf/test/cactus.properties0000644000175000017500000000047510404045232022770 0ustar arnaudarnaud00000000000000# Configuration file for Cactus Testing for Struts 1.1 # cactusURL is set in the top level build file. cactus.contextURL = @cactus.contextURL@ cactus.enableLogging = true cactus.filterRedirectorName = FilterRedirector cactus.jspRedirectorName = JspRedirector cactus.servletRedirectorName = ServletRedirector libstruts1.2-java-1.2.9/conf/test/log_client.properties0000644000175000017500000000076110404045222023622 0ustar arnaudarnaud00000000000000# Configuration file for Cactus Logging for Struts 1.1 (Client Side) log4j.appender.cactus = org.apache.log4j.FileAppender log4j.appender.cactus.File = cactus_client.log log4j.appender.cactus.Append = false log4j.appender.cactus.layout = org.apache.log4j.PatternLayout log4j.appender.cactus.layout.ConversionPattern = %d(ABSOLUTE) [%t] %-5p %-30.30c(2) %x - %m %n log4j.rootCategory=DEBUG, cactus log4j.category.org.apache.cactus = WARN, cactus log4j.additivity.org.apache.cactus=false libstruts1.2-java-1.2.9/conf/test/log_server.properties0000644000175000017500000000076110404045246023660 0ustar arnaudarnaud00000000000000# Configuration file for Cactus Logging for Struts 1.1 (Server Side) log4j.appender.cactus = org.apache.log4j.FileAppender log4j.appender.cactus.File = cactus_server.log log4j.appender.cactus.Append = false log4j.appender.cactus.layout = org.apache.log4j.PatternLayout log4j.appender.cactus.layout.ConversionPattern = %d(ABSOLUTE) [%t] %-5p %-30.30c(2) %x - %m %n log4j.rootCategory=DEBUG, cactus log4j.category.org.apache.cactus = WARN, cactus log4j.additivity.org.apache.cactus=false libstruts1.2-java-1.2.9/conf/test/maven-web.xml0000644000175000017500000000332710404045240021771 0ustar arnaudarnaud00000000000000 action org.apache.struts.action.ActionServlet config /WEB-INF/struts-config.xml 1 action *.do libstruts1.2-java-1.2.9/conf/test/struts-config.xml0000644000175000017500000000467410404045222022725 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/conf/test/web.xml0000644000175000017500000000332710404045212020664 0ustar arnaudarnaud00000000000000 action org.apache.struts.action.ActionServlet config /WEB-INF/struts-config.xml 1 ServletRedirector org.apache.cactus.server.ServletTestRedirector JspRedirector /jspRedirector.jsp ServletRedirector /ServletRedirector JspRedirector /JspRedirector action *.do libstruts1.2-java-1.2.9/contrib/0000755000175000017500000000000010404045172017121 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/0000755000175000017500000000000010423130300021532 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/0000755000175000017500000000000010404045204022330 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/conf/0000755000175000017500000000000010423130300023246 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/conf/MANIFEST.MF0000644000175000017500000000030710404045232024710 0ustar arnaudarnaud00000000000000Extension-Name: @package@ Specification-Vendor: The Apache Software Foundation Specification-Version: 1.0 Implementation-Vendor: The Apache Software Foundation Implementation-Version: @version@ libstruts1.2-java-1.2.9/contrib/struts-chain/src/conf/chain-config.xml0000644000175000017500000002155710404045222026336 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/contrib/struts-chain/src/example/0000755000175000017500000000000010423130300023754 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/example/overview.html0000644000175000017500000000000010404045224026507 0ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/0000755000175000017500000000000010404045204023251 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/0000755000175000017500000000000010404045204024040 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/0000755000175000017500000000000010404045204025261 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/0000755000175000017500000000000010404045204026625 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/0000755000175000017500000000000010423130300027700 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/legacy/0000755000175000017500000000000010423130300031144 5ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000016410423140531011316 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/legacy/CatalogConfiguratorPlugIn.javalibstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/legacy/CatalogConfigur0000644000175000017500000001124410404045210034144 0ustar arnaudarnaud00000000000000/* * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain.legacy; import java.net.URL; import javax.servlet.ServletException; import org.apache.struts.action.ActionServlet; import org.apache.struts.action.PlugIn; import org.apache.struts.chain.Constants; import org.apache.struts.config.ModuleConfig; import org.apache.commons.chain.Catalog; import org.apache.commons.chain.CatalogFactory; import org.apache.commons.chain.config.ConfigParser; import org.apache.commons.chain.impl.CatalogBase; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** *

CatalogConfiguratorPlugIn parses the configuration * resource specified by the path or resource * property to configure the default {@link Catalog} registered with the * {@link CatalogFactory} for this application.

*
    *
  • path - Context-relative path to a web application * resource that contains chain definitions.
  • *
  • resource - Absolute resource path to a class loader * resource that should be in a JAR file under /WEB-INF/lib, * or a separate file under /WEB-INF/classes.
  • *
* */ public class CatalogConfiguratorPlugIn implements PlugIn { // ------------------------------------------------------ Instance Variables private static Log log = LogFactory.getLog(CatalogConfiguratorPlugIn.class); private String path = null; private String resource = null; // -------------------------------------------------------------- Properties /** *

Return the context-relative resource path to load from. */ public String getPath() { return (this.path); } /** *

Set the context-relative resource path to load from. * * @param path The new context relative resource path */ public void setPath(String path) { this.path = path; } /** *

Return the classloader resource path to load from. */ public String getResource() { return (this.resource); } /** *

Set the classloader resource path to load from. * * @param resource The new classloader resource path */ public void setResource(String resource) { this.resource = resource; } // ---------------------------------------------------------- PlugIn Methods /** *

Clean up at web application shutdown.

*/ public void destroy() { CatalogFactory.clear(); } /** *

Parse the configuration documents specified by the path * or resource property to configure the default * {@link Catalog} that is registered in the {@link CatalogFactory} * instance for this application.

*/ public void init(ActionServlet servlet, ModuleConfig config) throws ServletException { // Parse the configuration file specified by path or resource try { ConfigParser parser = new ConfigParser(); URL configResource = null; if (path != null) { log.info("Loading context relative resources from '" + path + "'"); configResource = servlet.getServletContext().getResource(path); } else if (resource != null) { log.info("Loading classloader resources from '" + resource + "'"); ClassLoader loader = Thread.currentThread().getContextClassLoader(); if (loader == null) { loader = this.getClass().getClassLoader(); } configResource = loader.getResource(resource); } parser.parse(configResource); } catch (Exception e) { log.error("Exception loading resources", e); throw new ServletException(e); } } } ././@LongLink0000644000175000017500000000014610423140531011316 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/legacy/ChainAction.javalibstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/legacy/ChainAction.jav0000644000175000017500000001233610404045212034041 0ustar arnaudarnaud00000000000000/* * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain.legacy; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.chain.Catalog; import org.apache.commons.chain.CatalogFactory; import org.apache.commons.chain.Command; import org.apache.commons.chain.Context; import org.apache.commons.chain.web.servlet.ServletWebContext; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; /** *

An Action implementation that delegates to a * configured Chain (or Command) for performing the actual business * logic related to a request. The name of the chain to be executed * is specified by setting the parameter attribute of * the <action> element configuring this action. * For example:

* *
 *   <action path="/myaction"
 *           type="org.apache.struts.chain.legacy.ChainAction"
 *           name="myform"
 *          scope="request"
 *          input="/mypage.jsp"
 *      parameter="name-of-chain-to-execute"
 * 
* *

Prior to calling the specified chain (or command), this action * sets up a Context object containing the relevant * properties, along with the following additional attributes:

*
    *
  • mapping - The ActionMapping passed * to our execute() method
  • *
  • form - The ActionForm passed to * our execute() method
  • *
* *

After execution of the specified command or chain is completed, * the following context attributes are examined (in this order) to * determine how to proceed.

*
    *
  • exception - If a java.lang.Exception * is found here, it will be rethrown as the outcome of this action.
  • *
  • forward - If an * org.apache.struts.action.ActionForward is found here, * it will be returned as the outcome of this action. Otherwise, * null will be returned.
  • *
*/ public class ChainAction extends Action { // ------------------------------------------------------- Instance Varibles /** *

The Catalog that will be consulted to look up * the Command to be executed.

*/ private Catalog catalog = null; // ---------------------------------------------------------- Public Methods /** *

Delegate to the command chain specified in our configuration.

* * @param mapping ActionMapping configuring this action * @param form ActionForm for this request (if any) * @param request HttpServletRequest we are processing * @param response HttpServletResponse we are creating */ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // Set up a context for this request Context context = new ServletWebContext (getServlet().getServletContext(), request, response); context.put("mapping", mapping); context.put("form", form); // Delegate to the specified command Command command = getCatalog().getCommand(mapping.getParameter()); command.execute(context); // Ignore return state // Return results as appropriate Exception exception = null; try { exception = (Exception) context.get("exception"); if (exception != null) { throw exception; } } catch (ClassCastException e) { ; // It is not an Exception } ActionForward forward = null; try { forward = (ActionForward) context.get("forward"); } catch (ClassCastException e) { forward = null; // It is not an ActionForward } return forward; } // ------------------------------------------------------- Protected Methods /** *

Return the Catalog we will use to acquire the * Command to be executed. NOTE: Any race condition * calling this method is harmless, so do not bother to synchronize.

*/ protected Catalog getCatalog() { if (catalog == null) { catalog = CatalogFactory.getInstance().getCatalog(); } return catalog; } } ././@LongLink0000644000175000017500000000016510423140531011317 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/legacy/ComposableRequestProcessor.javalibstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/legacy/ComposableReque0000644000175000017500000001662010404045226034175 0ustar arnaudarnaud00000000000000/* * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain.legacy; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.chain.Catalog; import org.apache.commons.chain.CatalogFactory; import org.apache.commons.chain.Command; import org.apache.commons.chain.web.servlet.ServletWebContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.action.ActionServlet; import org.apache.struts.action.RequestProcessor; import org.apache.struts.chain.Constants; import org.apache.struts.config.ModuleConfig; import org.apache.struts.upload.MultipartRequestWrapper; /** *

ComposableRequestProcessor uses the Chain Of * Resposibility design pattern (as implemented by the commons-chain * package in Jakarta Commons) to support external configuration of command * chains to be used. It is configured via the following context initialization * parameters:

*
    *
  • org.apache.struts.chain.CATALOG_NAME - Name of the * Catalog in which we will look up the Command * to be executed for each request. If not specified, the default value * is struts.
  • *
  • org.apache.struts.chain.COMMAND_NAME - Name of the * Command which we will execute for each request, to be * looked up in the specified Catalog. If not specified, * the default value is servlet-standard.
  • *
* * @version $Rev: 55324 $ $Date: 2004-10-22 19:55:27 +0100 (Fri, 22 Oct 2004) $ * @since Struts 1.1 */ public class ComposableRequestProcessor extends RequestProcessor { // ------------------------------------------------------ Manifest Constants /** *

Name of the context initialization parameter containing the * name of the Catalog we will use.

*/ private static final String CATALOG_NAME = "org.apache.struts.chain.CATALOG_NAME"; /** *

Name of the Command to be executed for each request.

*/ private static final String COMMAND_NAME = "org.apache.struts.chain.COMMAND_NAME"; // ------------------------------------------------------ Instance Variables /** *

The {@link Catalog} containing all of the available command chains * for this module. */ protected Catalog catalog = null; /** *

The {@link Command} to be executed for each request.

*/ protected Command command = null; /** *

The Log instance for this class.

*/ protected static final Log log = LogFactory.getLog(ComposableRequestProcessor.class); // ---------------------------------------------------------- Public Methods /** * Clean up in preparation for a shutdown of this application. */ public void destroy() { super.destroy(); catalog = null; command = null; } /** *

Initialize this request processor instance.

* * @param servlet The ActionServlet we are associated with * @param moduleConfig The ModuleConfig we are associated with. * * @throws ServletException If an error occurs during initialization */ public void init(ActionServlet servlet, ModuleConfig moduleConfig) throws ServletException { log.info("Initializing composable request processor for module prefix '" + moduleConfig.getPrefix() + "'"); super.init(servlet, moduleConfig); String catalogName = servlet.getServletContext().getInitParameter(CATALOG_NAME); if (catalogName == null) { catalogName = "struts"; } catalog = CatalogFactory.getInstance().getCatalog(catalogName); if (catalog == null) { throw new ServletException("Cannot find catalog '" + catalogName + "'"); } String commandName = servlet.getServletContext().getInitParameter(COMMAND_NAME); if (commandName == null) { commandName = "servlet-standard"; } command = catalog.getCommand(commandName); if (command == null) { throw new ServletException("Cannot find command '" + commandName + "'"); } } /** *

Process an HttpServletRequest and create the * corresponding HttpServletResponse.

* * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a processing exception occurs */ public void process(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // Wrap the request in the case of a multipart request request = processMultipart(request); // Create and populate a Context for this request ServletWebContext context = new ServletWebContext(); context.initialize(getServletContext(), request, response); context.put(Constants.ACTION_SERVLET_KEY, this.servlet); context.put(Constants.MODULE_CONFIG_KEY, this.moduleConfig); // Create and execute the command. try { if (log.isDebugEnabled()) { log.debug("Using processing chain for this request"); } command.execute(context); } catch (Exception e) { // Execute the exception processing chain?? throw new ServletException(e); } // Release the context. context.release(); } /** * If this is a multipart request, wrap it with a special wrapper. * Otherwise, return the request unchanged. * * @param request The HttpServletRequest we are processing */ protected HttpServletRequest processMultipart(HttpServletRequest request) { if (!"POST".equalsIgnoreCase(request.getMethod())) { return (request); } String contentType = request.getContentType(); if ((contentType != null) && contentType.startsWith("multipart/form-data")) { return (new MultipartRequestWrapper(request)); } else { return (request); } } } ././@LongLink0000644000175000017500000000015110423140531011312 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/legacy/DispatchAction.javalibstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/legacy/DispatchAction.0000644000175000017500000001232110404045206034052 0ustar arnaudarnaud00000000000000/* * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain.legacy; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.chain.Catalog; import org.apache.commons.chain.CatalogFactory; import org.apache.commons.chain.Command; import org.apache.commons.chain.Context; import org.apache.commons.chain.web.servlet.ServletWebContext; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; /** *

An Action implementation that delegates to a * Chain (or Command) that is specified by a request parameter * whose name is configured in the parameter attribute * of the <action> element configuring this action. * For example:

* *
 *   <action path="/myaction"
 *           type="org.apache.struts.chain.legacy.DispatchAction"
 *           name="myform"
 *          scope="request"
 *          input="/mypage.jsp"
 *      parameter="name-of-request-parameter"
 * 
* *

Prior to calling the specified chain (or command), this action * sets up a Context object containing the relevant * properties, along with the following additional attributes:

*
    *
  • mapping - The ActionMapping passed * to our execute() method
  • *
  • form - The ActionForm passed to * our execute() method
  • *
* *

After execution of the specified command or chain is completed, * the following context attributes are examined (in this order) to * determine how to proceed.

*
    *
  • exception - If a java.lang.Exception * is found here, it will be rethrown as the outcome of this action.
  • *
  • forward - If an * org.apache.struts.action.ActionForward is found here, * it will be returned as the outcome of this action. Otherwise, * null will be returned.
  • *
*/ public class DispatchAction extends Action { // ------------------------------------------------------- Instance Varibles /** *

The Catalog that will be consulted to look up * the Command to be executed.

*/ private Catalog catalog = null; // ---------------------------------------------------------- Public Methods /** *

Delegate to the command chain specified in our configuration.

* * @param mapping ActionMapping configuring this action * @param form ActionForm for this request (if any) * @param request HttpServletRequest we are processing * @param response HttpServletResponse we are creating */ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // Set up a context for this request Context context = new ServletWebContext (getServlet().getServletContext(), request, response); context.put("mapping", mapping); context.put("form", form); // Delegate to the specified command String name = mapping.getParameter(); Command command = getCatalog().getCommand(request.getParameter(name)); command.execute(context); // Ignore return state // Return results as appropriate Exception exception = null; try { exception = (Exception) context.get("exception"); if (exception != null) { throw exception; } } catch (ClassCastException e) { ; // It is not an Exception } ActionForward forward = null; try { forward = (ActionForward) context.get("forward"); } catch (ClassCastException e) { forward = null; // It is not an ActionForward } return forward; } // ------------------------------------------------------- Protected Methods /** *

Return the Catalog we will use to acquire the * Command to be executed. NOTE: Any race condition * calling this method is harmless, so do not bother to synchronize.

*/ protected Catalog getCatalog() { if (catalog == null) { catalog = CatalogFactory.getInstance().getCatalog(); } return catalog; } } ././@LongLink0000644000175000017500000000014610423140531011316 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/legacy/TilesPlugin.javalibstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/legacy/TilesPlugin.jav0000644000175000017500000000262610404045210034117 0ustar arnaudarnaud00000000000000/* * \$Header\$ * \$Revision\$ * \$Date\$ * * Copyright 2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain.legacy; /** * Permissive version of TilesPlugin which doesn't mess with processor class. * Completely extends TilesPlugIn except for overriding protected method * initRequestProcessorClass(ModuleConfig) to a no-op. * Note class name capitalization consistent with org.apache.struts.tiles.TilesPlugin * rather than most other Struts plug-ins to avoid snagging folks who quickly * edit their struts-config. */ public class TilesPlugin extends org.apache.struts.tiles.TilesPlugin { protected void initRequestProcessorClass(org.apache.struts.config.ModuleConfig config) { log.debug("Chain version of TilesPlugIn doesn't care what RequestProcessor you use!"); } }libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/servlet/0000755000175000017500000000000010423130300031364 5ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000015310423140531011314 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/servlet/AuthorizeAction.javalibstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/servlet/AuthorizeActio0000644000175000017500000000360410404045224034255 0ustar arnaudarnaud00000000000000/* * Copyright 2003,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain.servlet; import javax.servlet.http.HttpServletRequest; import org.apache.commons.chain.Context; import org.apache.commons.chain.web.servlet.ServletWebContext; import org.apache.struts.chain.AbstractAuthorizeAction; import org.apache.struts.config.ActionConfig; /** *

Determine if the action is authorized for the given roles.

* * @version $Rev: 54933 $ $Date: 2004-10-16 18:04:52 +0100 (Sat, 16 Oct 2004) $ */ public class AuthorizeAction extends AbstractAuthorizeAction { // ------------------------------------------------------- Protected Methods protected boolean isAuthorized(Context context, String[] roles, ActionConfig mapping) throws Exception { // Identify the HTTP request object ServletWebContext swcontext = (ServletWebContext) context; HttpServletRequest request = swcontext.getRequest(); // Check the current user against the list of required roles for (int i = 0; i < roles.length; i++) { if (request.isUserInRole(roles[i])) { return (true); } } // Default to unauthorized return (false); } } ././@LongLink0000644000175000017500000000015410423140531011315 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/servlet/ExceptionHandler.javalibstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/servlet/ExceptionHandl0000644000175000017500000000746510404045240034237 0ustar arnaudarnaud00000000000000/* * Copyright 2003,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain.servlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.chain.Context; import org.apache.commons.chain.web.servlet.ServletWebContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.chain.AbstractExceptionHandler; import org.apache.struts.chain.Constants; import org.apache.struts.chain.util.ClassUtils; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; import org.apache.struts.config.ActionConfig; import org.apache.struts.config.ExceptionConfig; import org.apache.struts.config.ForwardConfig; import org.apache.struts.config.ModuleConfig; /** *

Handle the specified exception.

* * @version $Rev: 54933 $ $Date: 2004-10-16 18:04:52 +0100 (Sat, 16 Oct 2004) $ */ public class ExceptionHandler extends AbstractExceptionHandler { // ------------------------------------------------------ Instance Variables private String actionFormKey = Constants.ACTION_FORM_KEY; private static final Log log = LogFactory.getLog(ExceptionHandler.class); // -------------------------------------------------------------- Properties /** *

Return the context attribute key under which the * ActionForm for the currently selected application * action is stored.

*/ public String getActionFormKey() { return (this.actionFormKey); } /** *

Set the context attribute key under which the * ActionForm for the currently selected application * action is stored.

* * @param actionFormKey The new context attribute key */ public void setActionFormKey(String actionFormKey) { this.actionFormKey = actionFormKey; } // ------------------------------------------------------- Protected Methods protected ForwardConfig handle(Context context, Exception exception, ExceptionConfig exceptionConfig, ActionConfig actionConfig, ModuleConfig moduleConfig) throws Exception { // Look up the remaining properties needed for this handler ServletWebContext swcontext = (ServletWebContext) context; ActionForm actionForm = (ActionForm) swcontext.get(getActionFormKey()); HttpServletRequest request = swcontext.getRequest(); HttpServletResponse response = swcontext.getResponse(); // Handle this exception org.apache.struts.action.ExceptionHandler handler = (org.apache.struts.action.ExceptionHandler) ClassUtils.getApplicationInstance(exceptionConfig.getHandler()); return (handler.execute(exception, exceptionConfig, (ActionMapping) actionConfig, actionForm, request, response)); } } ././@LongLink0000644000175000017500000000015110423140531011312 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/servlet/ExecuteAction.javalibstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/servlet/ExecuteAction.0000644000175000017500000000474410404045226034151 0ustar arnaudarnaud00000000000000/* * Copyright 2003,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain.servlet; import org.apache.commons.chain.Context; import org.apache.commons.chain.web.servlet.ServletWebContext; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; import org.apache.struts.chain.AbstractExecuteAction; import org.apache.struts.config.ActionConfig; import org.apache.struts.config.ForwardConfig; /** *

Invoke the appropriate Action for this request, and cache * the returned ActionForward.

* * @version $Rev: 54933 $ $Date: 2004-10-16 18:04:52 +0100 (Sat, 16 Oct 2004) $ */ public class ExecuteAction extends AbstractExecuteAction { // ------------------------------------------------------- Protected Methods /** *

Execute the specified Action, and return the resulting * ActionForward.

* * @param context The Context for this request * @param action The Action to be executed * @param actionConfig The ActionConfig defining this action * @param actionForm The ActionForm (if any) for * this action * * @exception Exception if thrown by the Action */ protected ForwardConfig execute(Context context, Action action, ActionConfig actionConfig, ActionForm actionForm) throws Exception { ServletWebContext swcontext = (ServletWebContext) context; return (action.execute((ActionMapping) actionConfig, actionForm, swcontext.getRequest(), swcontext.getResponse())); } } ././@LongLink0000644000175000017500000000015210423140531011313 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/servlet/PerformForward.javalibstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/servlet/PerformForward0000644000175000017500000000621210404045214034257 0ustar arnaudarnaud00000000000000/* * Copyright 2003,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain.servlet; import javax.servlet.RequestDispatcher; import javax.servlet.http.HttpServletRequest; import org.apache.commons.chain.Context; import org.apache.commons.chain.web.servlet.ServletWebContext; import org.apache.struts.chain.AbstractPerformForward; import org.apache.struts.config.ForwardConfig; import org.apache.struts.config.ModuleConfig; import org.apache.struts.upload.MultipartRequestWrapper; import org.apache.struts.util.RequestUtils; /** *

Perform forwarding or redirection based on the specified * ForwardConfig (if any).

* * @version $Rev: 54933 $ $Date: 2004-10-16 18:04:52 +0100 (Sat, 16 Oct 2004) $ */ public class PerformForward extends AbstractPerformForward { // ------------------------------------------------------- Protected Methods /** *

Perform the appropriate processing on the specified * ForwardConfig.

* * @param context The context for this request * @param forwardConfig The forward to be performed */ protected void perform(Context context,ForwardConfig forwardConfig) throws Exception { ServletWebContext swcontext = (ServletWebContext) context; String forwardPath = forwardConfig.getPath(); String uri = null; ModuleConfig moduleConfig = (ModuleConfig) context.get(getModuleConfigKey()); // Resolve module-relative paths if (forwardPath.startsWith("/")) { uri = RequestUtils.forwardURL(swcontext.getRequest(), forwardConfig, moduleConfig); } else { uri = forwardPath; } // Get the underlying request in the case of a multipart wrapper HttpServletRequest request = swcontext.getRequest(); if (request instanceof MultipartRequestWrapper) { request = ((MultipartRequestWrapper) request).getRequest(); } // Perform redirect or forward if (forwardConfig.getRedirect()) { if (uri.startsWith("/")) { uri = request.getContextPath() + uri; } swcontext.getResponse().sendRedirect (swcontext.getResponse().encodeRedirectURL(uri)); } else { RequestDispatcher rd = swcontext.getContext().getRequestDispatcher(uri); rd.forward(request, swcontext.getResponse()); } } } ././@LongLink0000644000175000017500000000015210423140531011313 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/servlet/PerformInclude.javalibstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/servlet/PerformInclude0000644000175000017500000000417410404045234034245 0ustar arnaudarnaud00000000000000/* * Copyright 2003,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain.servlet; import javax.servlet.RequestDispatcher; import javax.servlet.http.HttpServletRequest; import org.apache.commons.chain.Context; import org.apache.commons.chain.web.servlet.ServletWebContext; import org.apache.struts.chain.AbstractPerformInclude; import org.apache.struts.upload.MultipartRequestWrapper; /** *

Perform forwarding or redirection based on the specified * include uri (if any).

* * @version $Rev: 54933 $ $Date: 2004-10-16 18:04:52 +0100 (Sat, 16 Oct 2004) $ */ public class PerformInclude extends AbstractPerformInclude { // ------------------------------------------------------- Protected Methods /** *

Perform the appropriate processing on the specified * include uri.

* * @param context The context for this request * @param uri The uri to be included */ protected void perform(Context context, String uri) throws Exception { ServletWebContext swcontext = (ServletWebContext) context; // Get the underlying request in the case of a multipart wrapper HttpServletRequest request = swcontext.getRequest(); if (request instanceof MultipartRequestWrapper) { request = ((MultipartRequestWrapper) request).getRequest(); } RequestDispatcher rd = swcontext.getContext().getRequestDispatcher(uri); rd.forward(request, swcontext.getResponse()); } } ././@LongLink0000644000175000017500000000015610423140531011317 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/servlet/PopulateActionForm.javalibstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/servlet/PopulateAction0000644000175000017500000000501110404045234034245 0ustar arnaudarnaud00000000000000/* * Copyright 2003,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain.servlet; import org.apache.commons.chain.Context; import org.apache.commons.chain.web.servlet.ServletWebContext; import org.apache.struts.Globals; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; import org.apache.struts.chain.AbstractPopulateActionForm; import org.apache.struts.config.ActionConfig; import org.apache.struts.util.RequestUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** *

Populate the form bean (if any) for this request. Sets the multipart * class from the action config in the request attributes.

* * @version $Rev: 54933 $ $Date: 2004-10-16 18:04:52 +0100 (Sat, 16 Oct 2004) $ */ public class PopulateActionForm extends AbstractPopulateActionForm { private static final Log log = LogFactory.getLog(PopulateActionForm.class); // ------------------------------------------------------- Protected Methods protected void populate(Context context, ActionConfig actionConfig, ActionForm actionForm) throws Exception { ServletWebContext swcontext = (ServletWebContext) context; RequestUtils.populate(actionForm, actionConfig.getPrefix(), actionConfig.getSuffix(), swcontext.getRequest()); } protected void reset(Context context, ActionConfig actionConfig, ActionForm actionForm) { ServletWebContext swcontext = (ServletWebContext) context; actionForm.reset((ActionMapping) actionConfig, swcontext.getRequest()); // Set the multipart class if (actionConfig.getMultipartClass() != null) { swcontext.getRequestScope().put(Globals.MULTIPART_KEY, actionConfig.getMultipartClass()); } } } ././@LongLink0000644000175000017500000000015210423140531011313 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/servlet/RequestNoCache.javalibstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/servlet/RequestNoCache0000644000175000017500000000320710404045240034171 0ustar arnaudarnaud00000000000000/* * Copyright 2003,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain.servlet; import javax.servlet.http.HttpServletResponse; import org.apache.commons.chain.Context; import org.apache.commons.chain.web.servlet.ServletWebContext; import org.apache.struts.chain.AbstractRequestNoCache; /** *

Check to see if the controller is configured to prevent caching, * and if so, set the no cache HTTP response headers.

* * @version $Rev: 54933 $ $Date: 2004-10-16 18:04:52 +0100 (Sat, 16 Oct 2004) $ */ public class RequestNoCache extends AbstractRequestNoCache { // ------------------------------------------------------- Protected Methods protected void requestNoCache(Context context) { ServletWebContext swcontext = (ServletWebContext) context; HttpServletResponse response = swcontext.getResponse(); response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache,no-store,max-age=0"); response.setDateHeader("Expires", 1); } } ././@LongLink0000644000175000017500000000015010423140531011311 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/servlet/SelectAction.javalibstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/servlet/SelectAction.j0000644000175000017500000000575410404045232034137 0ustar arnaudarnaud00000000000000/* * Copyright 2003,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain.servlet; import javax.servlet.http.HttpServletRequest; import org.apache.commons.chain.Context; import org.apache.commons.chain.web.servlet.ServletWebContext; import org.apache.struts.chain.AbstractSelectAction; import org.apache.struts.chain.Constants; import org.apache.struts.config.ModuleConfig; /** *

Cache the ActionConfig instance for the * action to be used for processing this request.

* * @version $Rev: 54933 $ $Date: 2004-10-16 18:04:52 +0100 (Sat, 16 Oct 2004) $ */ public class SelectAction extends AbstractSelectAction { // ------------------------------------------------------- Protected Methods protected String getPath(Context context) { ServletWebContext swcontext = (ServletWebContext) context; HttpServletRequest request = swcontext.getRequest(); String path = null; boolean extension = false; // For prefix matching, match on the path info path = (String) request.getAttribute(Constants.INCLUDE_PATH_INFO); if (path == null) { path = request.getPathInfo(); } // For extension matching, match on the servlet path if (path == null) { path = (String) request.getAttribute(Constants.INCLUDE_SERVLET_PATH); if (path == null) { path = request.getServletPath(); } if (path == null) { throw new IllegalArgumentException ("No path information in request"); } extension = true; } // Strip the module prefix and extension (if any) ModuleConfig moduleConfig = (ModuleConfig) swcontext.get(getModuleConfigKey()); String prefix = moduleConfig.getPrefix(); if (!path.startsWith(prefix)) { throw new IllegalArgumentException("Path does not start with '" + prefix + "'"); } path = path.substring(prefix.length()); if (extension) { int slash = path.lastIndexOf("/"); int period = path.lastIndexOf("."); if ((period >= 0) && (period > slash)) { path = path.substring(0, period); } } return (path); } } ././@LongLink0000644000175000017500000000015110423140531011312 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/servlet/SelectForward.javalibstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/servlet/SelectForward.0000644000175000017500000000363610404045214034151 0ustar arnaudarnaud00000000000000/* * Copyright 2003,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain.servlet; import org.apache.commons.chain.Context; import org.apache.struts.action.ActionForward; import org.apache.struts.chain.AbstractSelectForward; import org.apache.struts.config.ForwardConfig; import org.apache.struts.config.ModuleConfig; /** *

Create and return a ForwardConfig representing the * specified module-relative destination.

* * @version $Rev: 54933 $ $Date: 2004-10-16 18:04:52 +0100 (Sat, 16 Oct 2004) $ */ public class SelectForward extends AbstractSelectForward { // ------------------------------------------------------- Protected Methods /** *

Create and return a ForwardConfig representing the * specified module-relative destination.

* * @param context The context for this request * @param moduleConfig The ModuleConfig for this request * @param uri The module-relative URI to be the destination */ protected ForwardConfig forward(Context context, ModuleConfig moduleConfig, String uri) { return (new ActionForward(null, moduleConfig.getPrefix() + uri, false, true)); } } ././@LongLink0000644000175000017500000000014710423140531011317 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/servlet/SelectInput.javalibstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/servlet/SelectInput.ja0000644000175000017500000000373310404045236034161 0ustar arnaudarnaud00000000000000/* * Copyright 2003,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain.servlet; import org.apache.commons.chain.Context; import org.apache.struts.action.ActionForward; import org.apache.struts.chain.AbstractSelectInput; import org.apache.struts.config.ForwardConfig; import org.apache.struts.config.ModuleConfig; /** *

Validate the properties of the form bean for this request. If there are * any validation errors, execute the child commands in our chain; otherwise, * proceed normally.

* * @version $Rev: 54933 $ $Date: 2004-10-16 18:04:52 +0100 (Sat, 16 Oct 2004) $ */ public class SelectInput extends AbstractSelectInput { // ------------------------------------------------------- Protected Methods /** *

Create and return a ForwardConfig representing the * specified module-relative destination.

* * @param context The context for this request * @param moduleConfig The ModuleConfig for this request * @param uri The module-relative URI to be the destination */ protected ForwardConfig forward(Context context, ModuleConfig moduleConfig, String uri) { return (new ActionForward(null, moduleConfig.getPrefix() + uri, false, true)); } } ././@LongLink0000644000175000017500000000015010423140531011311 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/servlet/SelectLocale.javalibstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/servlet/SelectLocale.j0000644000175000017500000000410210404045216034105 0ustar arnaudarnaud00000000000000/* * Copyright 2003,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain.servlet; import java.util.Locale; import javax.servlet.http.HttpSession; import org.apache.commons.chain.Context; import org.apache.commons.chain.web.servlet.ServletWebContext; import org.apache.struts.Globals; import org.apache.struts.chain.AbstractSelectLocale; /** *

Select the Locale to be used for this request.

* * @version $Rev: 54933 $ $Date: 2004-10-16 18:04:52 +0100 (Sat, 16 Oct 2004) $ */ public class SelectLocale extends AbstractSelectLocale { // ------------------------------------------------------- Protected Methods /** *

Return the Locale to be used for this request.

* * @param context The Context for this request */ protected Locale getLocale(Context context) { ServletWebContext swcontext = (ServletWebContext) context; // Has a Locale already been selected? HttpSession session = swcontext.getRequest().getSession(); Locale locale = (Locale) session.getAttribute(Globals.LOCALE_KEY); if (locale != null) { return (locale); } // Select and cache the Locale to be used locale = swcontext.getRequest().getLocale(); if (locale == null) { locale = Locale.getDefault(); } session.setAttribute(Globals.LOCALE_KEY, locale); return (locale); } } ././@LongLink0000644000175000017500000000015010423140531011311 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/servlet/SelectModule.javalibstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/servlet/SelectModule.j0000644000175000017500000000517110404045220034135 0ustar arnaudarnaud00000000000000/* * Copyright 2003,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain.servlet; import javax.servlet.http.HttpServletRequest; import org.apache.commons.chain.Context; import org.apache.commons.chain.web.servlet.ServletWebContext; import org.apache.struts.Globals; import org.apache.struts.chain.AbstractSelectModule; import org.apache.struts.chain.Constants; /** *

Cache the ModuleConfig and MessageResources * instances for the sub-application module to be used for processing * this request.

* * @author Craig R. McClanahan * @version $Rev: 54933 $ $Date: 2004-10-16 18:04:52 +0100 (Sat, 16 Oct 2004) $ */ public class SelectModule extends AbstractSelectModule { // ------------------------------------------------------- Protected Methods protected String getPrefix(Context context) { // Identify the URI from which we will match a module prefix ServletWebContext swcontext = (ServletWebContext) context; HttpServletRequest request = swcontext.getRequest(); String uri = (String) request.getAttribute(Constants.INCLUDE_SERVLET_PATH); if (uri == null) { uri = request.getServletPath(); } if (uri == null) { throw new IllegalArgumentException ("No path information in request"); } // Identify the module prefix for the current module String prefix = ""; // Initialize to default prefix String prefixes[] = (String[]) swcontext.getApplicationScope().get(Globals.MODULE_PREFIXES_KEY); int lastSlash = 0; while (prefix.equals("") && ((lastSlash = uri.lastIndexOf("/")) > 0)) { uri = uri.substring(0, lastSlash); for (int i = 0; i < prefixes.length; i++) { if (uri.equals(prefixes[i])) { prefix = prefixes[i]; break; } } } return (prefix); } } ././@LongLink0000644000175000017500000000015210423140531011313 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/servlet/SetContentType.javalibstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/servlet/SetContentType0000644000175000017500000000301310404045232034244 0ustar arnaudarnaud00000000000000/* * Copyright 2003,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain.servlet; import javax.servlet.http.HttpServletResponse; import org.apache.commons.chain.Context; import org.apache.commons.chain.web.servlet.ServletWebContext; import org.apache.struts.chain.AbstractSetContentType; /** *

Check to see if the content type is set, and if so, set it for this * response.

* * @author Don Brown * @version $Rev: 54933 $ $Date: 2004-10-16 18:04:52 +0100 (Sat, 16 Oct 2004) $ */ public class SetContentType extends AbstractSetContentType { // ------------------------------------------------------- Protected Methods protected void setContentType(Context context, String contentType) { ServletWebContext swcontext = (ServletWebContext) context; HttpServletResponse response = swcontext.getResponse(); response.setContentType(contentType); } } ././@LongLink0000644000175000017500000000015510423140531011316 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/servlet/TilesPreProcessor.javalibstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/servlet/TilesPreProces0000644000175000017500000002703010404045216034226 0ustar arnaudarnaud00000000000000/* * \$Header\$ * \$Revision\$ * \$Date\$ * * Copyright 2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain.servlet; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.chain.Command; import org.apache.commons.chain.Context; import org.apache.commons.chain.web.servlet.ServletWebContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.chain.Constants; import org.apache.struts.config.ForwardConfig; import org.apache.struts.tiles.ComponentContext; import org.apache.struts.tiles.ComponentDefinition; import org.apache.struts.tiles.Controller; import org.apache.struts.tiles.FactoryNotFoundException; import org.apache.struts.tiles.DefinitionsUtil; import org.apache.struts.tiles.TilesUtil; import org.apache.struts.upload.MultipartRequestWrapper; /** *

Command class intended to perform responsibilities of the * TilesRequestProcessor in Struts 1.1. Does not actually dispatch requests, * but simply prepares the chain context for a later forward as * appropriate. Should be added to a chain before something which * would handle a conventional ForwardConfig.

* *

This class will never have any effect on the chain unless a * TilesDefinitionFactory can be found; however it does not * consider the absence of a definition factory to be a fatal error; the * command simply returns false and lets the chain continue.

* *

To initialize the TilesDefinitionFactory, use * org.apache.struts.chain.legacy.TilesPlugin. This class * is a simple extension to org.apache.struts.tiles.TilesPlugin * which simply does not interfere with your choice of RequestProcessor * implementation. *

* * */ public class TilesPreProcessor implements Command { // ------------------------------------------------------ Instance Variables private static final Log log = LogFactory.getLog(TilesPreProcessor.class); private String forwardConfigKey = Constants.FORWARD_CONFIG_KEY; private String includeKey = Constants.INCLUDE_KEY; private String moduleConfigKey = Constants.MODULE_CONFIG_KEY; // -------------------------------------------------------------- Properties /** *

Return the context attribute key under which the * ForwardConfig for the currently selected application * action is stored.

*/ public String getForwardConfigKey() { return (this.forwardConfigKey); } /** *

Set the context attribute key under which the * ForwardConfig for the currently selected application * action is stored.

* * @param forwardConfigKey The new context attribute key */ public void setForwardConfigKey(String forwardConfigKey) { this.forwardConfigKey = forwardConfigKey; } /** *

Return the context attribute key under which the * include uri for the currently selected application * action is stored.

*/ public String getIncludeKey() { return (this.includeKey); } /** *

Set the context attribute key under which the * include uri for the currently selected application * action is stored.

* * @param includeKey The new context attribute key */ public void setIncludeKey(String includeKey) { this.includeKey = includeKey; } // ---------------------------------------------------------- Public Methods /** *

If the current ForwardConfig is using "tiles", * perform necessary pre-processing to set up the TilesContext * and substitute a new ForwardConfig which is understandable * to a RequestDispatcher.

* *

Note that if the command finds a previously existing * ComponentContext in the request, then it * infers that it has been called from within another tile, * so instead of changing the ForwardConfig in the chain * Context, the command uses RequestDispatcher * to include the tile, and returns true, indicating that the processing * chain is complete.

* * @param context The Context for the current request * * @return false in most cases, but true if we determine * that we're processing in "include" mode. */ public boolean execute(Context context) throws Exception { // Is there a Tiles Definition to be processed? ForwardConfig forwardConfig = (ForwardConfig) context.get(getForwardConfigKey()); if (forwardConfig == null || forwardConfig.getPath() == null) { log.debug("No forwardConfig or no path, so pass to next command."); return (false); } ServletWebContext swcontext = (ServletWebContext) context; ComponentDefinition definition = null; try { definition = TilesUtil.getDefinition(forwardConfig.getPath(), swcontext.getRequest(), swcontext.getContext()); } catch (FactoryNotFoundException ex) { // this is not a serious error, so log at low priority log.debug("Tiles DefinitionFactory not found, so pass to next command."); return false; } // Do we do a forward (original behavior) or an include ? boolean doInclude = false; ComponentContext tileContext = null; // Get current tile context if any. // If context exists, we will do an include tileContext = ComponentContext.getContext(swcontext.getRequest()); doInclude = (tileContext != null); // Controller associated to a definition, if any Controller controller = null; // Computed uri to include String uri = null; if (definition != null) { // We have a "forward config" definition. // We use it to complete missing attribute in context. // We also get uri, controller. uri = definition.getPath(); controller = definition.getOrCreateController(); if (tileContext == null) { tileContext = new ComponentContext(definition.getAttributes()); ComponentContext.setContext(tileContext, swcontext.getRequest()); } else { tileContext.addMissing(definition.getAttributes()); } } // Process definition set in Action, if any. This may override the // values for uri or controller found using the ForwardConfig, and // may augment the tileContext with additional attributes. // :FIXME: the class DefinitionsUtil is deprecated, but I can't find // the intended alternative to use. definition = DefinitionsUtil.getActionDefinition(swcontext.getRequest()); if (definition != null) { // We have a definition. // We use it to complete missing attribute in context. // We also overload uri and controller if set in definition. if (definition.getPath() != null) { log.debug("Override forward uri " + uri + " with action uri " + definition.getPath()); uri = definition.getPath(); } if (definition.getOrCreateController() != null) { log.debug("Override forward controller with action controller"); controller = definition.getOrCreateController(); } if (tileContext == null) { tileContext = new ComponentContext(definition.getAttributes()); ComponentContext.setContext(tileContext, swcontext.getRequest()); } else { tileContext.addMissing(definition.getAttributes()); } } if (uri == null) { log.debug("no uri computed, so pass to next command"); return false; } // Execute controller associated to definition, if any. if (controller != null) { log.trace("Execute controller: " + controller); controller.execute( tileContext, swcontext.getRequest(), swcontext.getResponse(), swcontext.getContext()); } // If request comes from a previous Tile, do an include. // This allows to insert an action in a Tile. if (doInclude) { log.info("Tiles process complete; doInclude with " + uri); doInclude(swcontext, uri); return (true); } else { // create an "instant" forward config which can be used // by an AbstractPerformForward later as if our ForwardConfig // were the one actually returned by an executing Action log.info("Tiles process complete; forward to " + uri); // :FIXME: How do we need to coordinate the "context-relative" value // with other places it might be set. For now, hardcode to true. context.put(getForwardConfigKey(), new ForwardConfig("tiles-chain", uri, false, true)); return (false); } } // ------------------------------------------------------- Protected Methods /** *

Do an include of specified URI using a RequestDispatcher.

* * @param swcontext a chain servlet/web context * @param uri Context-relative URI to include */ protected void doInclude( ServletWebContext swcontext, String uri) throws IOException, ServletException { HttpServletRequest request = swcontext.getRequest(); // Unwrap the multipart request, if there is one. if (request instanceof MultipartRequestWrapper) { request = ((MultipartRequestWrapper) request).getRequest(); } HttpServletResponse response = swcontext.getResponse(); RequestDispatcher rd = swcontext.getContext().getRequestDispatcher(uri); if (rd == null) { response.sendError( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Error getting RequestDispatcher for " + uri); return; } rd.include(request, response); } }././@LongLink0000644000175000017500000000015610423140531011317 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/servlet/ValidateActionForm.javalibstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/servlet/ValidateAction0000644000175000017500000000671110404045214034213 0ustar arnaudarnaud00000000000000/* * Copyright 2003,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain.servlet; import org.apache.commons.chain.Context; import org.apache.commons.chain.web.servlet.ServletWebContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; import org.apache.struts.chain.AbstractValidateActionForm; import org.apache.struts.config.ActionConfig; import org.apache.struts.Globals; /** *

Validate the properties of the form bean for this request. If there are * any validation errors, execute the child commands in our chain; otherwise, * proceed normally. Also, if any errors are found and the request is a * multipart request, rollback the MultipartRequestHandler.

* * @author Craig R. McClanahan * @author Don Brown * @version $Rev: 54933 $ $Date: 2004-10-16 18:04:52 +0100 (Sat, 16 Oct 2004) $ */ public class ValidateActionForm extends AbstractValidateActionForm { // ------------------------------------------------------ Instance Variables private static final Log log = LogFactory.getLog(ValidateActionForm.class); // ------------------------------------------------------- Protected Methods /** *

Call the validate() method of the specified form bean, * and return the resulting ActionErrors object.

* * @param context The context for this request * @param actionForm The form bean for this request */ protected ActionErrors validate(Context context, ActionConfig actionConfig, ActionForm actionForm) { ServletWebContext swcontext = (ServletWebContext) context; ActionErrors errors = (actionForm.validate((ActionMapping) actionConfig, swcontext.getRequest())); // Special handling for multipart request if (errors != null && !errors.isEmpty()) { if (actionForm.getMultipartRequestHandler() != null) { if (log.isTraceEnabled()) { log.trace(" Rolling back multipart request"); } actionForm.getMultipartRequestHandler().rollback(); } } // Saving the errors is not part of the contract for this method, // but the idea of the HttpServletRequest is not present in the // abstract parent of this class. Put this in now so that it // at least gets done -- and then see if other developers have // opinions about whether this is good, bad, or at least acceptable. swcontext.getRequest().setAttribute(Globals.ERROR_KEY, errors); return errors; } } libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/util/0000755000175000017500000000000010423130300030655 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/util/ClassUtils.java0000644000175000017500000000511110404045242033615 0ustar arnaudarnaud00000000000000/* * Copyright 2003,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain.util; /** *

Utility methods to load application classes and create instances.

* * @author Craig R. McClanahan * @version $Rev: 54933 $ $Date: 2004-10-16 18:04:52 +0100 (Sat, 16 Oct 2004) $ */ public final class ClassUtils { // ---------------------------------------------------------- Static Methods /** *

Return the Class object for the specified fully * qualified class name, from this web application's class loader. * * @param className Fully qualified class name * * @exception ClassNotFoundException if the specified class cannot * be loaded */ public static Class getApplicationClass(String className) throws ClassNotFoundException { if (className == null) { throw new NullPointerException("getApplicationClass called with null className"); } ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); if (classLoader == null) { classLoader = ClassUtils.class.getClassLoader(); } return (classLoader.loadClass(className)); } /** *

Return a new instance of the specified fully qualified class name, * after loading the class (if necessary) from this web application's * class loader.

* * @param className Fully qualified class name * * @exception ClassNotFoundException if the specified class cannot * be loaded * @exception IllegalAccessException if this class is not concrete * @exception InstantiationException if this class has no zero-arguments * constructor */ public static Object getApplicationInstance(String className) throws ClassNotFoundException, IllegalAccessException, InstantiationException { return (getApplicationClass(className).newInstance()); } } ././@LongLink0000644000175000017500000000015310423140531011314 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/AbstractAuthorizeAction.javalibstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/AbstractAuthorizeActio0000644000175000017500000001305410404045216034256 0ustar arnaudarnaud00000000000000/* * Copyright 2003,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain; import org.apache.commons.chain.Command; import org.apache.commons.chain.Context; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.action.ActionServlet; import org.apache.struts.config.ActionConfig; import org.apache.struts.util.MessageResources; /** *

Determine whether the requested action is authorized for the current * user. If not, abort chain processing and perferably, return an error * message of some kind.

* * @author Don Brown * @version $Rev: 54933 $ $Date: 2004-10-16 18:04:52 +0100 (Sat, 16 Oct 2004) $ */ public abstract class AbstractAuthorizeAction implements Command { // ------------------------------------------------------ Instance Variables private String actionConfigKey = Constants.ACTION_CONFIG_KEY; private String actionServletKey = Constants.ACTION_SERVLET_KEY; private static final Log log = LogFactory.getLog(AbstractAuthorizeAction.class); // -------------------------------------------------------------- Properties /** *

Return the context attribute key under which the * ActionConfig for the currently selected application * action is stored.

*/ public String getActionConfigKey() { return (this.actionConfigKey); } /** *

Set the context attribute key under which the * ActionConfig for the currently selected application * action is stored.

* * @param actionConfigKey The new context attribute key */ public void setActionConfigKey(String actionConfigKey) { this.actionConfigKey = actionConfigKey; } /** *

Return the context attribute key under which the * ActionServlet for the currently selected application * action is stored.

*/ public String getActionServletKey() { return (this.actionServletKey); } /** *

Set the context attribute key under which the * ActionServlet for the currently selected application * action is stored.

* * @param actionServletKey The new context attribute key */ public void setActionServletKey(String actionServletKey) { this.actionServletKey = actionServletKey; } // ---------------------------------------------------------- Public Methods /** *

Determine whether the requested action is authorized for the current * user. If not, abort chain processing and perferably, return an error * message of some kind.

* * @param context The Context for the current request * * @return false if the user is authorized for the selected * action, else true to abort processing. */ public boolean execute(Context context) throws Exception { // Retrieve ActionConfig ActionConfig actionConfig = (ActionConfig) context.get(getActionConfigKey()); // Is this action protected by role requirements? String roles[] = actionConfig.getRoleNames(); if ((roles == null) || (roles.length < 1)) { return (false); } boolean throwEx = false; try { throwEx = !(isAuthorized(context, roles, actionConfig)); } catch (Exception ex) { throwEx = true; log.error("Unable to complete authorization process", ex); } if (throwEx) { // Retrieve internal message resources ActionServlet servlet = (ActionServlet) context.get(actionServletKey); MessageResources resources = servlet.getInternal(); // The current user is not authorized for this action throw new UnauthorizedActionException( resources.getMessage("notAuthorized", actionConfig.getPath())); } else { return (false); } } // ------------------------------------------------------- Protected Methods /** *

Determine if the action is authorized for the given roles.

* * @param context The Context for the current request * @param roles An array of valid roles for this request * @param actionConfig The current action mapping * * @return true if the request is authorized, else * false * @exception Exception If the action cannot be tested for authorization */ protected abstract boolean isAuthorized(Context context, String[] roles, ActionConfig actionConfig) throws Exception; } ././@LongLink0000644000175000017500000000015410423140531011315 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/AbstractExceptionHandler.javalibstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/AbstractExceptionHandl0000644000175000017500000001661210404045236034236 0ustar arnaudarnaud00000000000000/* * Copyright 2003,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain; import org.apache.commons.chain.Command; import org.apache.commons.chain.Context; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.chain.Constants; import org.apache.struts.config.ActionConfig; import org.apache.struts.config.ExceptionConfig; import org.apache.struts.config.ForwardConfig; import org.apache.struts.config.ModuleConfig; /** *

Invoke the local or global exception handler configured for the * exception class that occurred.

* * @author Craig R. McClanahan * @version $Rev: 54933 $ $Date: 2004-10-16 18:04:52 +0100 (Sat, 16 Oct 2004) $ */ public abstract class AbstractExceptionHandler implements Command { // ------------------------------------------------------ Instance Variables private String actionConfigKey = Constants.ACTION_CONFIG_KEY; private String exceptionKey = Constants.EXCEPTION_KEY; private String forwardConfigKey = Constants.FORWARD_CONFIG_KEY; private String moduleConfigKey = Constants.MODULE_CONFIG_KEY; private static final Log log = LogFactory.getLog(AbstractExceptionHandler.class); // -------------------------------------------------------------- Properties /** *

Return the context attribute key under which the * ActionConfig for the currently selected application * action is stored.

*/ public String getActionConfigKey() { return (this.actionConfigKey); } /** *

Set the context attribute key under which the * ActionConfig for the currently selected application * action is stored.

* * @param actionConfigKey The new context attribute key */ public void setActionConfigKey(String actionConfigKey) { this.actionConfigKey = actionConfigKey; } /** *

Return the context attribute key under which any * thrown exception will be stored.

*/ public String getExceptionKey() { return (this.exceptionKey); } /** *

Set the context attribute key under which any * thrown exception will be stored.

* * @param exceptionKey The new context attribute key */ public void setExceptionKey(String exceptionKey) { this.exceptionKey = exceptionKey; } /** *

Return the context attribute key under which the * ForwardConfig for the currently selected application * action is stored.

*/ public String getForwardConfigKey() { return (this.forwardConfigKey); } /** *

Set the context attribute key under which the * ForwardConfig for the currently selected application * action is stored.

* * @param forwardConfigKey The new context attribute key */ public void setForwardConfigKey(String forwardConfigKey) { this.forwardConfigKey = forwardConfigKey; } /** *

Return the context attribute key under which the * ModuleConfig for the currently selected application * action is stored.

*/ public String getModuleConfigKey() { return (this.moduleConfigKey); } /** *

Set the context attribute key under which the * ModuleConfig for the currently selected application * action is stored.

* * @param moduleConfigKey The new context attribute key */ public void setModuleConfigKey(String moduleConfigKey) { this.moduleConfigKey = moduleConfigKey; } // ---------------------------------------------------------- Public Methods /** *

Invoke the appropriate Action for this request, and cache * the returned ActionForward.

* * @param context The Context for the current request * * @exception InvalidPathException if no valid * action can be identified for this request * * @return false if a ForwardConfig is returned, * else true to complete processing */ public boolean execute(Context context) throws Exception { // Look up the exception that was thrown Exception exception = (Exception) context.get(getExceptionKey()); if (exception == null) { log.warn("No Exception found under key '" + getExceptionKey() + "'"); return (true); } // Look up the local or global exception handler configuration ExceptionConfig exceptionConfig = null; ActionConfig actionConfig = (ActionConfig) context.get(getActionConfigKey()); ModuleConfig moduleConfig = (ModuleConfig) context.get(getModuleConfigKey()); if (actionConfig != null) { log.debug("See if actionConfig " + actionConfig + " has an exceptionConfig for " + exception.getClass().getName()); exceptionConfig = actionConfig.findException(exception.getClass()); } // Handle the exception in the configured manner if (exceptionConfig == null) { log.warn("Unhandled exception", exception); throw exception; } ForwardConfig forwardConfig = handle(context, exception, exceptionConfig, actionConfig, moduleConfig); if (forwardConfig != null) { context.put(getForwardConfigKey(), forwardConfig); return (false); } else { return (true); } } // ------------------------------------------------------- Protected Methods /** *

Perform the required handling of the specified exception.

* * @param context The Context for this request * @param exception The exception being handled * @param exceptionConfig The corresponding {@link ExceptionConfig} * @param actionConfig The {@link ActionConfig} for this request * @param moduleConfig The {@link ModuleConfig} for this request * * @return the ForwardConfig to be processed next (if any), * or null if processing has been completed */ protected abstract ForwardConfig handle(Context context, Exception exception, ExceptionConfig exceptionConfig, ActionConfig actionConfig, ModuleConfig moduleConfig) throws Exception; } ././@LongLink0000644000175000017500000000015110423140531011312 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/AbstractExecuteAction.javalibstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/AbstractExecuteAction.0000644000175000017500000001607510404045204034145 0ustar arnaudarnaud00000000000000/* * Copyright 2003,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain; import org.apache.commons.chain.Command; import org.apache.commons.chain.Context; import org.apache.struts.chain.Constants; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.config.ActionConfig; import org.apache.struts.config.ForwardConfig; /** *

Invoke the appropriate Action for this request, and cache * the returned ActionForward.

* * @author Craig R. McClanahan * @version $Rev: 54933 $ $Date: 2004-10-16 18:04:52 +0100 (Sat, 16 Oct 2004) $ */ public abstract class AbstractExecuteAction implements Command { // ------------------------------------------------------ Instance Variables private String actionKey = Constants.ACTION_KEY; private String actionConfigKey = Constants.ACTION_CONFIG_KEY; private String actionFormKey = Constants.ACTION_FORM_KEY; private String forwardConfigKey = Constants.FORWARD_CONFIG_KEY; private String validKey = Constants.VALID_KEY; // -------------------------------------------------------------- Properties /** *

Return the context attribute key under which the * Action for the currently selected application * action is stored.

*/ public String getActionKey() { return (this.actionKey); } /** *

Set the context attribute key under which the * Action for the currently selected application * action is stored.

* * @param actionKey The new context attribute key */ public void setActionKey(String actionKey) { this.actionKey = actionKey; } /** *

Return the context attribute key under which the * ActionConfig for the currently selected application * action is stored.

*/ public String getActionConfigKey() { return (this.actionConfigKey); } /** *

Set the context attribute key under which the * ActionConfig for the currently selected application * action is stored.

* * @param actionConfigKey The new context attribute key */ public void setActionConfigKey(String actionConfigKey) { this.actionConfigKey = actionConfigKey; } /** *

Return the context attribute key under which the * ActionForm for the currently selected application * action is stored.

*/ public String getActionFormKey() { return (this.actionFormKey); } /** *

Set the context attribute key under which the * ActionForm for the currently selected application * action is stored.

* * @param actionFormKey The new context attribute key */ public void setActionFormKey(String actionFormKey) { this.actionFormKey = actionFormKey; } /** *

Return the context attribute key under which the * ForwardConfig for the currently selected application * action is stored.

*/ public String getForwardConfigKey() { return (this.forwardConfigKey); } /** *

Set the context attribute key under which the * ForwardConfig for the currently selected application * action is stored.

* * @param forwardConfigKey The new context attribute key */ public void setForwardConfigKey(String forwardConfigKey) { this.forwardConfigKey = forwardConfigKey; } /** *

Return the context attribute key under which the * validity flag for this request is stored.

*/ public String getValidKey() { return (this.validKey); } /** *

Set the context attribute key under which the * validity flag for this request is stored.

* * @param validKey The new context attribute key */ public void setValidKey(String validKey) { this.validKey = validKey; } // ---------------------------------------------------------- Public Methods /** *

Invoke the appropriate Action for this request, and cache * the returned ActionForward.

* * @param context The Context for the current request * * @exception InvalidPathException if no valid * action can be identified for this request * * @return false so that processing continues */ public boolean execute(Context context) throws Exception { // Skip processing if the current request is not valid Boolean valid = (Boolean) context.get(getValidKey()); if ((valid == null) || !valid.booleanValue()) { return (false); } // Acquire the resources we will need to send to the Action Action action = (Action) context.get(getActionKey()); if (action == null) { return (false); } ActionConfig actionConfig = (ActionConfig) context.get(getActionConfigKey()); ActionForm actionForm = (ActionForm) context.get(getActionFormKey()); // Execute the Action for this request, caching returned ActionForward ForwardConfig forwardConfig = execute(context, action, actionConfig, actionForm); context.put(getForwardConfigKey(), forwardConfig); return (false); } // ------------------------------------------------------- Protected Methods /** *

Execute the specified Action, and return the resulting * ForwardConfig.

* * @param context The Context for this request * @param action The Action to be executed * @param actionConfig The ActionConfig defining this action * @param actionForm The ActionForm (if any) for * this action * * @exception Exception if thrown by the Action */ protected abstract ForwardConfig execute(Context context, Action action, ActionConfig actionConfig, ActionForm actionForm) throws Exception; } ././@LongLink0000644000175000017500000000015210423140531011313 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/AbstractPerformForward.javalibstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/AbstractPerformForward0000644000175000017500000000773310404045214034270 0ustar arnaudarnaud00000000000000/* * Copyright 2003,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain; import org.apache.commons.chain.Command; import org.apache.commons.chain.Context; import org.apache.struts.config.ForwardConfig; /** *

Perform forwarding or redirection based on the specified * ForwardConfig (if any).

* * @author Craig R. McClanahan * @version $Rev: 54933 $ $Date: 2004-10-16 18:04:52 +0100 (Sat, 16 Oct 2004) $ */ public abstract class AbstractPerformForward implements Command { // ------------------------------------------------------ Instance Variables private String forwardConfigKey = Constants.FORWARD_CONFIG_KEY; private String moduleConfigKey = Constants.MODULE_CONFIG_KEY; // -------------------------------------------------------------- Properties /** *

Return the context attribute key under which the * ForwardConfig for the currently selected application * action is stored.

*/ public String getForwardConfigKey() { return (this.forwardConfigKey); } /** *

Set the context attribute key under which the * ForwardConfig for the currently selected application * action is stored.

* * @param forwardConfigKey The new context attribute key */ public void setForwardConfigKey(String forwardConfigKey) { this.forwardConfigKey = forwardConfigKey; } /** *

Return the context attribute key under which the * ModuleConfig for the currently selected application * module will be stored.

*/ public String getModuleConfigKey() { return (this.moduleConfigKey); } /** *

Set the context attribute key under which the * ModuleConfig for the currently selected application * module will be stored.

* * @param moduleConfigKey The new context attribute key */ public void setModuleConfigKey(String moduleConfigKey) { this.moduleConfigKey = moduleConfigKey; } // ---------------------------------------------------------- Public Methods /** *

Perform forwarding or redirection based on the specified * ActionForward (if any).

* * @param context The Context for the current request * * @return true so that processing completes */ public boolean execute(Context context) throws Exception { // Is there a ForwardConfig to be performed? ForwardConfig forwardConfig = (ForwardConfig) context.get(getForwardConfigKey()); if (forwardConfig == null) { return (false); } // Perform the appropriate processing on this ActionForward perform(context, forwardConfig); return (true); } // ------------------------------------------------------- Protected Methods /** *

Perform the appropriate processing on the specified * ForwardConfig.

* * @param context The context for this request * @param forwardConfig The forward to be performed */ protected abstract void perform(Context context, ForwardConfig forwardConfig) throws Exception; } ././@LongLink0000644000175000017500000000015210423140531011313 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/AbstractPerformInclude.javalibstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/AbstractPerformInclude0000644000175000017500000001014610404045236034243 0ustar arnaudarnaud00000000000000/* * Copyright 2003,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain; import org.apache.commons.chain.Command; import org.apache.commons.chain.Context; import org.apache.commons.chain.web.WebContext; import org.apache.struts.config.ModuleConfig; /** *

Perform forwarding or redirection based on the specified * String (if any).

* * @author Don Brown * @version $Rev: 54933 $ $Date: 2004-10-16 18:04:52 +0100 (Sat, 16 Oct 2004) $ */ public abstract class AbstractPerformInclude implements Command { // ------------------------------------------------------ Instance Variables private String includeKey = Constants.INCLUDE_KEY; private String moduleConfigKey = Constants.MODULE_CONFIG_KEY; // -------------------------------------------------------------- Properties /** *

Return the context attribute key under which the * include uri for the currently selected application * action is stored.

*/ public String getIncludeKey() { return (this.includeKey); } /** *

Set the context attribute key under which the * include uri for the currently selected application * action is stored.

* * @param includeKey The new context attribute key */ public void setIncludeKey(String includeKey) { this.includeKey = includeKey; } /** *

Return the context attribute key under which the * ModuleConfig for the currently selected application * module is stored.

*/ public String getModuleConfigKey() { return (this.moduleConfigKey); } /** *

Set the context attribute key under which the * ModuleConfig for the currently selected application * module is stored.

* * @param moduleConfigKey The new context attribute key */ public void setModuleConfigKey(String moduleConfigKey) { this.moduleConfigKey = moduleConfigKey; } // ---------------------------------------------------------- Public Methods /** *

Perform an include based on the specified * include uri (if any).

* * @param context The Context for the current request * * @return true so that processing completes */ public boolean execute(Context context) throws Exception { // Retrieve module config instance WebContext wcontext = (WebContext) context; ModuleConfig moduleConfig = (ModuleConfig) wcontext.get(getModuleConfigKey()); // Is there an include to be performed? String include = (String) context.get(getIncludeKey()); if (include == null) { return (false); } // Determine the currect uri String uri = moduleConfig.getPrefix() + include; // Perform the appropriate processing on this include uri perform(context, uri); return (true); } // ------------------------------------------------------- Protected Methods /** *

Perform the appropriate processing on the specified * include uri.

* * @param context The context for this request * @param include The forward to be performed */ protected abstract void perform(Context context, String include) throws Exception; } ././@LongLink0000644000175000017500000000015610423140531011317 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/AbstractPopulateActionForm.javalibstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/AbstractPopulateAction0000644000175000017500000001674310404045242034262 0ustar arnaudarnaud00000000000000/* * Copyright 2003,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.chain.Command; import org.apache.commons.chain.Context; import org.apache.commons.chain.web.WebContext; import org.apache.struts.Globals; import org.apache.struts.action.ActionForm; import org.apache.struts.config.ActionConfig; /** *

Populate the form bean (if any) for this request.

* * @author Craig R. McClanahan * @version $Rev: 55324 $ $Date: 2004-10-22 19:55:27 +0100 (Fri, 22 Oct 2004) $ */ public abstract class AbstractPopulateActionForm implements Command { // ------------------------------------------------------ Instance Variables private String actionConfigKey = Constants.ACTION_CONFIG_KEY; private String actionFormKey = Constants.ACTION_FORM_KEY; private String cancelKey = Constants.CANCEL_KEY; // -------------------------------------------------------------- Properties /** *

Return the context attribute key under which the * ActionConfig for the currently selected application * action is stored.

*/ public String getActionConfigKey() { return (this.actionConfigKey); } /** *

Set the context attribute key under which the * ActionConfig for the currently selected application * action is stored.

* * @param actionConfigKey The new context attribute key */ public void setActionConfigKey(String actionConfigKey) { this.actionConfigKey = actionConfigKey; } /** *

Return the context attribute key under which the * ActionForm for the currently selected application * action is stored.

*/ public String getActionFormKey() { return (this.actionFormKey); } /** *

Set the context attribute key under which the * ActionForm for the currently selected application * action is stored.

* * @param actionFormKey The new context attribute key */ public void setActionFormKey(String actionFormKey) { this.actionFormKey = actionFormKey; } /** *

Return the context attribute key under which the * cancellation flag for this request is stored.

*/ public String getCancelKey() { return (this.cancelKey); } /** *

Set the context attribute key under which the * cancellation flag for this request is stored.

* * @param cancelKey The new context attribute key */ public void setCancelKey(String cancelKey) { this.cancelKey = cancelKey; } // ---------------------------------------------------------- Public Methods /** *

Populate the form bean (if any) for this request.

* * @param context The Context for the current request * * @return false so that processing continues */ public boolean execute(Context context) throws Exception { // Is there a form bean for this request? ActionForm actionForm = (ActionForm) context.get(getActionFormKey()); if (actionForm == null) { return (false); } // Reset the form bean property values ActionConfig actionConfig = (ActionConfig) context.get(getActionConfigKey()); reset(context, actionConfig, actionForm); populate(context, actionConfig, actionForm); handleCancel(context, actionConfig, actionForm); return (false); } // ------------------------------------------------------- Protected Methods /** *

Call the reset() method on the specified form bean.

* * @param context The context for this reqest * @param actionConfig The actionConfig for this request * @param actionForm The form bean for this request */ protected abstract void reset(Context context, ActionConfig actionConfig, ActionForm actionForm); /** *

Base implementation assumes that the Context * can be cast to WebContext and copies the parameter * values from the context to the ActionForm.

* *

Note that this implementation does not handle "file uploads" * because as far as I know there is no API for handling that without * committing to servlets -- in a servlet environment, use * org.apache.struts.chain.servlet.PopulateActionForm.

* * @param context * @param actionConfig * @param actionForm * @throws Exception */ protected void populate(Context context, ActionConfig actionConfig, ActionForm actionForm) throws Exception { WebContext wcontext = (WebContext) context; Map paramValues = wcontext.getParamValues(); Map parameters = new HashMap(); String prefix = actionConfig.getPrefix(); String suffix = actionConfig.getSuffix(); Iterator keys = paramValues.keySet().iterator(); while (keys.hasNext()) { String name = (String) keys.next(); String stripped = name; if (prefix != null) { if (!stripped.startsWith(prefix)) { continue; } stripped = stripped.substring(prefix.length()); } if (suffix != null) { if (!stripped.endsWith(suffix)) { continue; } stripped = stripped.substring(0, stripped.length() - suffix.length()); } parameters.put(stripped, paramValues.get(name)); } BeanUtils.populate(actionForm, parameters); } protected void handleCancel(Context context, ActionConfig actionConfig, ActionForm actionForm) throws Exception { WebContext wcontext = (WebContext) context; Map paramValues = wcontext.getParamValues(); // Set the cancellation attribute if appropriate if ((paramValues.get(org.apache.struts.taglib.html.Constants.CANCEL_PROPERTY) != null) || (paramValues.get(org.apache.struts.taglib.html.Constants.CANCEL_PROPERTY_X) != null)) { context.put(getCancelKey(), Boolean.TRUE); wcontext.getRequestScope().put(Globals.CANCEL_KEY, Boolean.TRUE); } else { context.put(getCancelKey(), Boolean.FALSE); } } } ././@LongLink0000644000175000017500000000015210423140531011313 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/AbstractRequestNoCache.javalibstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/AbstractRequestNoCache0000644000175000017500000000630110404045226034173 0ustar arnaudarnaud00000000000000/* * Copyright 2003,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain; import org.apache.commons.chain.Command; import org.apache.commons.chain.Context; import org.apache.commons.chain.web.WebContext; import org.apache.struts.config.ModuleConfig; /** *

Check to see if the controller is configured to prevent caching, * and if so, request no cache flags to be set.

* * @author Don Brown * @version $Rev: 54933 $ $Date: 2004-10-16 18:04:52 +0100 (Sat, 16 Oct 2004) $ */ public abstract class AbstractRequestNoCache implements Command { // ------------------------------------------------------ Instance Variables private String moduleConfigKey = Constants.MODULE_CONFIG_KEY; // -------------------------------------------------------------- Properties /** *

Return the context attribute key under which the * ModuleConfig for the currently selected application * module is stored.

*/ public String getModuleConfigKey() { return (this.moduleConfigKey); } /** *

Set the context attribute key under which the * ModuleConfig for the currently selected application * module is stored.

* * @param moduleConfigKey The new context attribute key */ public void setModuleConfigKey(String moduleConfigKey) { this.moduleConfigKey = moduleConfigKey; } // ---------------------------------------------------------- Public Methods /** *

Check to see if the controller is configured to prevent caching, * and if so, request no cache flags to be set.

* * @param context The Context for the current request * * @return false so that processing continues */ public boolean execute(Context context) throws Exception { // Retrieve the ModuleConfig instance WebContext wcontext = (WebContext) context; ModuleConfig moduleConfig = (ModuleConfig) wcontext.get(getModuleConfigKey()); // If the module is configured for no caching, request no caching if (moduleConfig.getControllerConfig().getNocache()) { requestNoCache(context); } return (false); } // ------------------------------------------------------- Protected Methods /** *

Request no cache flags are set.

* * @param context The Context for this request */ protected abstract void requestNoCache(Context context); } ././@LongLink0000644000175000017500000000015010423140531011311 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/AbstractSelectAction.javalibstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/AbstractSelectAction.j0000644000175000017500000001173010404045236034132 0ustar arnaudarnaud00000000000000/* * Copyright 2003,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain; import org.apache.commons.chain.Command; import org.apache.commons.chain.Context; import org.apache.commons.chain.web.WebContext; import org.apache.struts.Globals; import org.apache.struts.chain.Constants; import org.apache.struts.config.ActionConfig; import org.apache.struts.config.ModuleConfig; /** *

Cache the ActionConfig instance for the * action to be used for processing this request.

* * @author Craig R. McClanahan * @version $Rev: 54933 $ $Date: 2004-10-16 18:04:52 +0100 (Sat, 16 Oct 2004) $ */ public abstract class AbstractSelectAction implements Command { // ------------------------------------------------------ Instance Variables private String actionConfigKey = Constants.ACTION_CONFIG_KEY; private String moduleConfigKey = Constants.MODULE_CONFIG_KEY; // -------------------------------------------------------------- Properties /** *

Return the context attribute key under which the * ActionConfig for the currently selected application * action is stored.

*/ public String getActionConfigKey() { return (this.actionConfigKey); } /** *

Set the context attribute key under which the * ActionConfig for the currently selected application * action is stored.

* * @param actionConfigKey The new context attribute key */ public void setActionConfigKey(String actionConfigKey) { this.actionConfigKey = actionConfigKey; } /** *

Return the context attribute key under which the * ModuleConfig for the currently selected application * module is stored.

*/ public String getModuleConfigKey() { return (this.moduleConfigKey); } /** *

Set the context attribute key under which the * ModuleConfig for the currently selected application * module is stored.

* * @param moduleConfigKey The new context attribute key */ public void setModuleConfigKey(String moduleConfigKey) { this.moduleConfigKey = moduleConfigKey; } // ---------------------------------------------------------- Public Methods /** *

Cache the ActionConfig instance for the * action to be used for processing this request.

* * @param context The Context for the current request * * @exception IllegalArgumentException if no valid * action can be identified for this request * * @return false so that processing continues */ public boolean execute(Context context) throws Exception { // Identify the matching path for this request String path = getPath(context); // Cache the corresponding ActonConfig instance WebContext wcontext = (WebContext) context; ModuleConfig moduleConfig = (ModuleConfig) wcontext.get(getModuleConfigKey()); ActionConfig actionConfig = moduleConfig.findActionConfig(path); if (actionConfig == null) { // Locate the mapping for unknown paths (if any) ActionConfig configs[] = moduleConfig.findActionConfigs(); for (int i = 0; i < configs.length; i++) { if (configs[i].getUnknown()) { actionConfig = configs[i]; break; } } } if (actionConfig == null) { throw new IllegalArgumentException("No action config for '" + path + "'"); } wcontext.put(getActionConfigKey(), actionConfig); wcontext.getRequestScope().put(Globals.MAPPING_KEY, actionConfig); return (false); } // ------------------------------------------------------- Protected Methods /** *

Return the path to be used to select the ActionConfig * for this request.

* * @param context The Context for this request * * @exception IllegalArgumentException if no valid * action can be identified for this request */ protected abstract String getPath(Context context); } ././@LongLink0000644000175000017500000000015110423140531011312 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/AbstractSelectForward.javalibstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/AbstractSelectForward.0000644000175000017500000001266210404045240034147 0ustar arnaudarnaud00000000000000/* * Copyright 2003,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain; import org.apache.commons.chain.Command; import org.apache.commons.chain.Context; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.config.ActionConfig; import org.apache.struts.config.ForwardConfig; import org.apache.struts.config.ModuleConfig; /** *

Select and cache the ActionForward for this * ActionConfig if specified.

* * @author Don Brown * @version $Rev: 54933 $ $Date: 2004-10-16 18:04:52 +0100 (Sat, 16 Oct 2004) $ */ public abstract class AbstractSelectForward implements Command { // ------------------------------------------------------ Instance Variables private String actionConfigKey = Constants.ACTION_CONFIG_KEY; private String forwardConfigKey = Constants.FORWARD_CONFIG_KEY; private String validKey = Constants.VALID_KEY; private static final Log log = LogFactory.getLog(AbstractSelectForward.class); // -------------------------------------------------------------- Properties /** *

Return the context attribute key under which the * ActionConfig for the currently selected application * action is stored.

*/ public String getActionConfigKey() { return (this.actionConfigKey); } /** *

Set the context attribute key under which the * ActionConfig for the currently selected application * action is stored.

* * @param actionConfigKey The new context attribute key */ public void setActionConfigKey(String actionConfigKey) { this.actionConfigKey = actionConfigKey; } /** *

Return the context attribute key under which the * ForwardConfig for the currently selected application * action is stored.

*/ public String getForwardConfigKey() { return (this.forwardConfigKey); } /** *

Set the context attribute key under which the * ForwardConfig for the currently selected application * action is stored.

* * @param forwardConfigKey The new context attribute key */ public void setForwardConfigKey(String forwardConfigKey) { this.forwardConfigKey = forwardConfigKey; } /** *

Return the context attribute key under which the * validity flag for this request is stored.

*/ public String getValidKey() { return (this.validKey); } /** *

Set the context attribute key under which the * validity flag for this request is stored.

* * @param validKey The new context attribute key */ public void setValidKey(String validKey) { this.validKey = validKey; } // ---------------------------------------------------------- Public Methods /** *

Select and cache the ActionForward for this * ActionConfig if specified.

* * @param context The Context for the current request * * @return false so that processing continues */ public boolean execute(Context context) throws Exception { // Skip processing if the current request is not valid Boolean valid = (Boolean) context.get(getValidKey()); if ((valid == null) || !valid.booleanValue()) { return (false); } // Acquire configuration objects that we need ActionConfig actionConfig = (ActionConfig) context.get(getActionConfigKey()); ModuleConfig moduleConfig = actionConfig.getModuleConfig(); ForwardConfig forwardConfig = null; String forward = actionConfig.getForward(); if (forward != null) { forwardConfig = forward(context, moduleConfig, forward); if (log.isDebugEnabled()) { log.debug("Forwarding to " + forwardConfig); } context.put(getForwardConfigKey(), forwardConfig); } return (false); } // ------------------------------------------------------- Protected Methods /** *

Create and return a ForwardConfig representing the * specified module-relative destination.

* * @param context The context for this request * @param moduleConfig The ModuleConfig for this request * @param uri The module-relative URI to be the destination */ protected abstract ForwardConfig forward(Context context, ModuleConfig moduleConfig, String uri); } ././@LongLink0000644000175000017500000000014710423140531011317 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/AbstractSelectInput.javalibstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/AbstractSelectInput.ja0000644000175000017500000001376210404045216034162 0ustar arnaudarnaud00000000000000/* * Copyright 2003,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain; import org.apache.commons.chain.Command; import org.apache.commons.chain.Context; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.chain.Constants; import org.apache.struts.config.ActionConfig; import org.apache.struts.config.ForwardConfig; import org.apache.struts.config.ModuleConfig; /** *

Select and cache a ForwardConfig that returns us to the * input page for the current action, if any.

* * @author Craig R. McClanahan * @version $Rev: 54933 $ $Date: 2004-10-16 18:04:52 +0100 (Sat, 16 Oct 2004) $ */ public abstract class AbstractSelectInput implements Command { // ------------------------------------------------------ Instance Variables private String actionConfigKey = Constants.ACTION_CONFIG_KEY; private String forwardConfigKey = Constants.FORWARD_CONFIG_KEY; private String validKey = Constants.VALID_KEY; private static final Log log = LogFactory.getLog(AbstractSelectInput.class); // -------------------------------------------------------------- Properties /** *

Return the context attribute key under which the * ActionConfig for the currently selected application * action is stored.

*/ public String getActionConfigKey() { return (this.actionConfigKey); } /** *

Set the context attribute key under which the * ActionConfig for the currently selected application * action is stored.

* * @param actionConfigKey The new context attribute key */ public void setActionConfigKey(String actionConfigKey) { this.actionConfigKey = actionConfigKey; } /** *

Return the context attribute key under which the * ForwardConfig for the currently selected application * action is stored.

*/ public String getForwardConfigKey() { return (this.forwardConfigKey); } /** *

Set the context attribute key under which the * ForwardConfig for the currently selected application * action is stored.

* * @param forwardConfigKey The new context attribute key */ public void setForwardConfigKey(String forwardConfigKey) { this.forwardConfigKey = forwardConfigKey; } /** *

Return the context attribute key under which the * validity flag for this request is stored.

*/ public String getValidKey() { return (this.validKey); } /** *

Set the context attribute key under which the * validity flag for this request is stored.

* * @param validKey The new context attribute key */ public void setValidKey(String validKey) { this.validKey = validKey; } // ---------------------------------------------------------- Public Methods /** *

Select and cache a ForwardConfig for the input page * for the current request.

* * @param context The Context for the current request * * @return false so that processing continues */ public boolean execute(Context context) throws Exception { // Skip processing if the current request is valid Boolean valid = (Boolean) context.get(getValidKey()); if ((valid != null) && valid.booleanValue()) { return (false); } // Acquire configuration objects that we need ActionConfig actionConfig = (ActionConfig) context.get(getActionConfigKey()); ModuleConfig moduleConfig = actionConfig.getModuleConfig(); // Cache an ForwardConfig back to our input page ForwardConfig forwardConfig = null; String input = actionConfig.getInput(); if (moduleConfig.getControllerConfig().getInputForward()) { if (log.isTraceEnabled()) { log.trace("Finding ForwardConfig for '" + input + "'"); } forwardConfig = actionConfig.findForwardConfig(input); if (forwardConfig == null) { forwardConfig = moduleConfig.findForwardConfig(input); } } else { if (log.isTraceEnabled()) { log.trace("Delegating to forward() for '" + input + "'"); } forwardConfig = forward(context, moduleConfig, input); } if (log.isDebugEnabled()) { log.debug("Forwarding back to " + forwardConfig); } context.put(getForwardConfigKey(), forwardConfig); return (false); } // ------------------------------------------------------- Protected Methods /** *

Create and return a ForwardConfig representing the * specified module-relative destination.

* * @param context The context for this request * @param moduleConfig The ModuleConfig for this request * @param uri The module-relative URI to be the destination */ protected abstract ForwardConfig forward(Context context, ModuleConfig moduleConfig, String uri); } ././@LongLink0000644000175000017500000000015010423140531011311 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/AbstractSelectLocale.javalibstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/AbstractSelectLocale.j0000644000175000017500000000736410404045232034120 0ustar arnaudarnaud00000000000000/* * Copyright 2003,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain; import java.util.Locale; import org.apache.commons.chain.Command; import org.apache.commons.chain.Context; import org.apache.struts.chain.Constants; import org.apache.struts.config.ModuleConfig; /** *

Select the Locale to be used for this request.

* * @author Craig R. McClanahan * @version $Rev: 54933 $ $Date: 2004-10-16 18:04:52 +0100 (Sat, 16 Oct 2004) $ */ public abstract class AbstractSelectLocale implements Command { // ------------------------------------------------------ Instance Variables private String localeKey = Constants.LOCALE_KEY; private String moduleConfigKey = Constants.MODULE_CONFIG_KEY; // -------------------------------------------------------------- Properties /** *

Return the context attribute key under which the * Locale for the current request is stored.

*/ public String getLocaleKey() { return (this.localeKey); } /** *

Set the context attribute key under which the * Locale for the current request is stored.

* * @param localeKey The new context attribute key */ public void setLocaleKey(String localeKey) { this.localeKey = localeKey; } /** *

Return the context attribute key under which the * ModuleConfig for the currently selected application * module will be stored.

*/ public String getModuleConfigKey() { return (this.moduleConfigKey); } /** *

Set the context attribute key under which the * ModuleConfig for the currently selected application * module will be stored.

* * @param moduleConfigKey The new context attribute key */ public void setModuleConfigKey(String moduleConfigKey) { this.moduleConfigKey = moduleConfigKey; } // ---------------------------------------------------------- Public Methods /** *

Select the Locale to be used for this request.

* * @param context The Context for the current request * * @return false so that processing continues */ public boolean execute(Context context) throws Exception { // Are we configured to select Locale automatically? ModuleConfig moduleConfig = (ModuleConfig) context.get(getModuleConfigKey()); if (!moduleConfig.getControllerConfig().getLocale()) { return (false); } // Retrieve and cache appropriate Locale for this request Locale locale = getLocale(context); context.put(getLocaleKey(), locale); return (false); } // ------------------------------------------------------- Protected Methods /** *

Return the Locale to be used for this request.

* * @param context The Context for this request */ protected abstract Locale getLocale(Context context); } ././@LongLink0000644000175000017500000000015010423140531011311 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/AbstractSelectModule.javalibstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/AbstractSelectModule.j0000644000175000017500000001236610404045236034150 0ustar arnaudarnaud00000000000000/* * Copyright 2003,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain; import org.apache.commons.chain.Command; import org.apache.commons.chain.Context; import org.apache.commons.chain.web.WebContext; import org.apache.struts.Globals; import org.apache.struts.chain.Constants; import org.apache.struts.config.ModuleConfig; import org.apache.struts.util.MessageResources; /** *

Cache the ModuleConfig and MessageResources * instances for the sub-application module to be used for processing * this request.

* * @author Craig R. McClanahan * @version $Rev: 54933 $ $Date: 2004-10-16 18:04:52 +0100 (Sat, 16 Oct 2004) $ */ public abstract class AbstractSelectModule implements Command { // ------------------------------------------------------ Instance Variables private String messageResourcesKey = Constants.MESSAGE_RESOURCES_KEY; private String moduleConfigKey = Constants.MODULE_CONFIG_KEY; // -------------------------------------------------------------- Properties /** *

Return the context attribute key under which the default * MessageResources for the currently selected application * module will be stored.

*/ public String getMessageResourcesKey() { return (this.messageResourcesKey); } /** *

Set the context attribute key under which the default * MessageResources for the currently selected application * module will be stored.

* * @param messageResourcesKey The new context attribute key */ public void setMessageResourcesKey(String messageResourcesKey) { this.messageResourcesKey = messageResourcesKey; } /** *

Return the context attribute key under which the * ModuleConfig for the currently selected application * module will be stored.

*/ public String getModuleConfigKey() { return (this.moduleConfigKey); } /** *

Set the context attribute key under which the * ModuleConfig for the currently selected application * module will be stored.

* * @param moduleConfigKey The new context attribute key */ public void setModuleConfigKey(String moduleConfigKey) { this.moduleConfigKey = moduleConfigKey; } // ---------------------------------------------------------- Public Methods /** *

Cache the ModuleConfig and MessageResources * instances for the sub-application module to be used for processing * this request.

* * @param context The Context for the current request * * @exception IllegalArgumentException if no valid * ModuleConfig or MessageResources can be identified for this request * * @return false so that processing continues */ public boolean execute(Context context) throws Exception { // Identify the module prefix for the current module String prefix = getPrefix(context); // Cache the corresponding ModuleConfig and MessageResources instances WebContext wcontext = (WebContext) context; ModuleConfig moduleConfig = (ModuleConfig) wcontext.getApplicationScope().get(Globals.MODULE_KEY + prefix); if (moduleConfig == null) { throw new IllegalArgumentException("No module config for prefix '" + prefix + "'"); } wcontext.put(getModuleConfigKey(), moduleConfig); wcontext.getRequestScope().put(Globals.MODULE_KEY, moduleConfig); MessageResources messageResources = (MessageResources) wcontext.getApplicationScope().get(Globals.MESSAGES_KEY + prefix); if (messageResources != null) { wcontext.put(getMessageResourcesKey(), messageResources); wcontext.getRequestScope().put(Globals.MESSAGES_KEY, messageResources); } return (false); } // ------------------------------------------------------- Protected Methods /** *

Calculate and return the module prefix for the module to be * selected for this request.

* * @param context The Context for this request * * @exception IllegalArgumentException if no valid * ModuleConfig or MessageResources can be identified for this request */ protected abstract String getPrefix(Context context); } ././@LongLink0000644000175000017500000000015210423140531011313 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/AbstractSetContentType.javalibstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/AbstractSetContentType0000644000175000017500000000643310404045234034257 0ustar arnaudarnaud00000000000000/* * Copyright 2003,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain; import org.apache.commons.chain.Command; import org.apache.commons.chain.Context; import org.apache.commons.chain.web.WebContext; import org.apache.struts.config.ModuleConfig; /** *

Check to see if the content type is set, and if so, set it for this * response.

* * @author Don Brown * @version $Rev: 54933 $ $Date: 2004-10-16 18:04:52 +0100 (Sat, 16 Oct 2004) $ */ public abstract class AbstractSetContentType implements Command { // ------------------------------------------------------ Instance Variables private String moduleConfigKey = Constants.MODULE_CONFIG_KEY; // -------------------------------------------------------------- Properties /** *

Return the context attribute key under which the * ModuleConfig for the currently selected application * module is stored.

*/ public String getModuleConfigKey() { return (this.moduleConfigKey); } /** *

Set the context attribute key under which the * ModuleConfig for the currently selected application * module is stored.

* * @param moduleConfigKey The new context attribute key */ public void setModuleConfigKey(String moduleConfigKey) { this.moduleConfigKey = moduleConfigKey; } // ---------------------------------------------------------- Public Methods /** *

Check to see if the content type is set, and if so, set it for this * response.

* * @param context The Context for the current request * * @return false so that processing continues */ public boolean execute(Context context) throws Exception { // Retrieve the ModuleConfig instance WebContext wcontext = (WebContext) context; ModuleConfig moduleConfig = (ModuleConfig) wcontext.get(getModuleConfigKey()); // If the content type is configured, set it for the response String contentType = moduleConfig.getControllerConfig().getContentType(); if (contentType != null) { setContentType(context, contentType); } return (false); } // ------------------------------------------------------- Protected Methods /** *

Request no cache flags are set.

* * @param context The Context for this request * @param contentType The content type for the response */ protected abstract void setContentType(Context context, String contentType); } ././@LongLink0000644000175000017500000000015610423140531011317 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/AbstractValidateActionForm.javalibstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/AbstractValidateAction0000644000175000017500000001515610404045210034212 0ustar arnaudarnaud00000000000000/* * Copyright 2003,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain; import org.apache.commons.chain.Command; import org.apache.commons.chain.Context; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.config.ActionConfig; /** *

Validate the properties of the form bean for this request. If there are * any validation errors, execute the specified command; otherwise, * proceed normally.

* * @author Craig R. McClanahan * @version $Rev: 55324 $ $Date: 2004-10-22 19:55:27 +0100 (Fri, 22 Oct 2004) $ */ public abstract class AbstractValidateActionForm implements Command { // ------------------------------------------------------ Instance Variables private String actionConfigKey = Constants.ACTION_CONFIG_KEY; private String actionFormKey = Constants.ACTION_FORM_KEY; private String cancelKey = Constants.CANCEL_KEY; private String validKey = Constants.VALID_KEY; private static final Log log = LogFactory.getLog(AbstractValidateActionForm.class); // -------------------------------------------------------------- Properties /** *

Return the context attribute key under which the * ActionConfig for the currently selected application * action is stored.

*/ public String getActionConfigKey() { return (this.actionConfigKey); } /** *

Set the context attribute key under which the * ActionConfig for the currently selected application * action is stored.

* * @param actionConfigKey The new context attribute key */ public void setActionConfigKey(String actionConfigKey) { this.actionConfigKey = actionConfigKey; } /** *

Return the context attribute key under which the * ActionForm for the currently selected application * action is stored.

*/ public String getActionFormKey() { return (this.actionFormKey); } /** *

Set the context attribute key under which the * ActionForm for the currently selected application * action is stored.

* * @param actionFormKey The new context attribute key */ public void setActionFormKey(String actionFormKey) { this.actionFormKey = actionFormKey; } /** *

Return the context attribute key under which the * cancellation flag for this request is stored.

*/ public String getCancelKey() { return (this.cancelKey); } /** *

Set the context attribute key under which the * cancellation flag for this request is stored.

* * @param cancelKey The new context attribute key */ public void setCancelKey(String cancelKey) { this.cancelKey = cancelKey; } /** *

Return the context attribute key under which the * validity flag for this request is stored.

*/ public String getValidKey() { return (this.validKey); } /** *

Set the context attribute key under which the * validity flag for this request is stored.

* * @param validKey The new context attribute key */ public void setValidKey(String validKey) { this.validKey = validKey; } // ---------------------------------------------------------- Public Methods /** *

Validate the properties of the form bean for this request. If * there are any validation errors, execute the child commands in our * chain; otherwise, proceed normally.

* * @param context The Context for the current request * * @return false so that processing continues, if there are * no validation errors; otherwise true */ public boolean execute(Context context) throws Exception { // Is there a form bean for this request? ActionForm actionForm = (ActionForm) context.get(getActionFormKey()); if (actionForm == null) { context.put(getValidKey(), Boolean.TRUE); return (false); } // Was this request cancelled? Boolean cancel = (Boolean) context.get(getCancelKey()); if ((cancel != null) && cancel.booleanValue()) { context.put(getValidKey(), Boolean.TRUE); return (false); } // Is validation disabled on this request? ActionConfig actionConfig = (ActionConfig) context.get(getActionConfigKey()); if (!actionConfig.getValidate()) { context.put(getValidKey(), Boolean.TRUE); return (false); } // Call the validate() method of this form bean ActionErrors errors = validate(context, actionConfig, actionForm); // If there were no errors, proceed normally if ((errors == null) || (errors.isEmpty())) { context.put(getValidKey(), Boolean.TRUE); return (false); } // Flag the validation failure and proceed context.put(getValidKey(), Boolean.FALSE); return (false); } // ------------------------------------------------------- Protected Methods /** *

Call the validate() method of the specified form bean, * and return the resulting ActionErrors object.

* * @param context The context for this request * @param actionConfig The ActionConfig for this request * @param actionForm The form bean for this request */ protected abstract ActionErrors validate(Context context, ActionConfig actionConfig, ActionForm actionForm); } libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/Constants.java0000644000175000017500000001150410404045246032535 0ustar arnaudarnaud00000000000000/* * Copyright 2003,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain; /** *

Global constants for the Chain of Responsibility Library.

*/ public final class Constants { // -------------------------------------------------- Context Attribute Keys /** *

The default context attribute under which the * Action for the current request * will be stored.

*/ public static final String ACTION_KEY = "action"; /** *

The default context attribute under which the * ActionConfig for the current request * will be stored.

*/ public static final String ACTION_CONFIG_KEY = "actionConfig"; /** *

The default context attribute under which the * ActionForm for the current request * will be stored.

*/ public static final String ACTION_FORM_KEY = "actionForm"; /** *

The default context attribute under which the * ActionServet for the current application * will be stored.

*/ public static final String ACTION_SERVLET_KEY = "actionServlet"; /** *

The default context attribute under which a * boolean flag indicating whether this request has been * cancelled will be stored.

*/ public static final String CANCEL_KEY = "cancel"; /** *

The default context attribute under which an * Exception will be stored before passing * it to an exception handler chain.

*/ public static final String EXCEPTION_KEY = "exception"; /** *

The default context attribute under which the * ForwardConfig for the current request * will be stored.

*/ public static final String FORWARD_CONFIG_KEY = "forwardConfig"; /** *

The default context attribute under which the * include path for the current request * will be stored.

*/ public static final String INCLUDE_KEY = "include"; /** *

The default context attribute under which the * Locale for the current request will be stored.

*/ public static final String LOCALE_KEY = "locale"; /** *

The default context attribute under which the * MessageResources for the current request * will be stored.

*/ public static final String MESSAGE_RESOURCES_KEY = "messageResources"; /** *

The default context attribute under which the * ModuleConfig for the current request * will be stored.

*/ public static final String MODULE_CONFIG_KEY = "moduleConfig"; /** *

The default context attribute key under which a Boolean * is stored, indicating the valid state of the current request. If not * present, a value of Boolean.FALSE should be assumed. */ public static final String VALID_KEY = "valid"; // --------------------------------------------------------- Other Constants /** *

The base part of the context attribute under which a Map containing * the Action instances associated with this module are * stored. This value must be suffixed with the module prefix in order * to create a unique key per module.

*/ public static final String ACTIONS_KEY = "actions"; /** *

The context attribute under which the Catalog containing * our defined command chains has been stored.

*/ public static final String CATALOG_ATTR = "org.apache.struts.chain.CATALOG"; /** *

The request attribute under which the path information is stored for * processing during a RequestDispatcher.include() call.

*/ public static final String INCLUDE_PATH_INFO = "javax.servlet.include.path_info"; /** *

The request attribute under which the servlet path is stored for * processing during a RequestDispatcher.include() call.

*/ public static final String INCLUDE_SERVLET_PATH = "javax.servlet.include.servlet_path"; } libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/CreateAction.java0000644000175000017500000001605710404045220033122 0ustar arnaudarnaud00000000000000/* * Copyright 2003,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain; import java.util.HashMap; import java.util.Map; import org.apache.commons.chain.Command; import org.apache.commons.chain.Context; import org.apache.commons.chain.web.WebContext; import org.apache.struts.action.Action; import org.apache.struts.action.ActionServlet; import org.apache.struts.chain.Constants; import org.apache.struts.chain.util.ClassUtils; import org.apache.struts.config.ActionConfig; import org.apache.struts.config.ModuleConfig; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** *

Create (if necessary) and cache an Action for this request. *

* * @author Craig R. McClanahan * @version $Rev: 54933 $ $Date: 2004-10-16 18:04:52 +0100 (Sat, 16 Oct 2004) $ */ public class CreateAction implements Command { // ------------------------------------------------------ Instance Variables private static final Log log = LogFactory.getLog(CreateAction.class); private String actionKey = Constants.ACTION_KEY; private String actionConfigKey = Constants.ACTION_CONFIG_KEY; private String actionServletKey = Constants.ACTION_SERVLET_KEY; private String validKey = Constants.VALID_KEY; // -------------------------------------------------------------- Properties /** *

Return the context attribute key under which the * Action for the currently selected application * action is stored.

*/ public String getActionKey() { return (this.actionKey); } /** *

Set the context attribute key under which the * Action for the currently selected application * action is stored.

* * @param actionKey The new context attribute key */ public void setActionKey(String actionKey) { this.actionKey = actionKey; } /** *

Return the context attribute key under which the * ActionConfig for the currently selected application * action is stored.

*/ public String getActionConfigKey() { return (this.actionConfigKey); } /** *

Set the context attribute key under which the * ActionConfig for the currently selected application * action is stored.

* * @param actionConfigKey The new context attribute key */ public void setActionConfigKey(String actionConfigKey) { this.actionConfigKey = actionConfigKey; } /** *

Return the context attribute key under which the * ActionServlet for the current web application * is stored.

*/ public String getActionServletKey() { return (this.actionServletKey); } /** *

Set the context attribute key under which the * ActionServlet for the current web application * is stored.

* * @param actionServletKey The new context attribute key */ public void setActionServletKey(String actionServletKey) { this.actionServletKey = actionServletKey; } /** *

Return the context attribute key under which the * validity flag for this request is stored.

*/ public String getValidKey() { return (this.validKey); } /** *

Set the context attribute key under which the * validity flag for this request is stored.

* * @param validKey The new context attribute key */ public void setValidKey(String validKey) { this.validKey = validKey; } // ---------------------------------------------------------- Public Methods /** *

Create (if necessary) and cache an Action for this * request.

* * @param context The Context for the current request * * @return false so that processing continues */ public boolean execute(Context context) throws Exception { // Skip processing if the current request is not valid Boolean valid = (Boolean) context.get(getValidKey()); if ((valid == null) || !valid.booleanValue()) { return (false); } // Check to see if an action has already been created if (context.get(getActionKey()) != null) { return (false); } // Look up the class name for the desired Action ActionConfig actionConfig = (ActionConfig) context.get(getActionConfigKey()); String type = actionConfig.getType(); if (type == null) { return (false); } // Create (if necessary) and cache an Action instance Action action = null; Map actions = getActions(context, actionConfig.getModuleConfig()); synchronized (actions) { action = (Action) actions.get(type); if (action == null) { log.info("Initialize action of type: " + type + " for actionConfig " + actionConfig); action = (Action) ClassUtils.getApplicationInstance(type); ActionServlet actionServlet = (ActionServlet) context.get(getActionServletKey()); action.setServlet(actionServlet); actions.put(type, action); } } context.put(getActionKey(), action); return (false); } // ------------------------------------------------------- Protected Methods /** *

Create (if necessary) and return a Map containing the * Action instances for the current application module.

* * @param context The context for this request * @param moduleConfig The ModuleConfig for the current * application module */ protected synchronized Map getActions(Context context, ModuleConfig moduleConfig) { WebContext wcontext = (WebContext) context; String actionsKey = Constants.ACTIONS_KEY + moduleConfig.getPrefix(); Map actions = (Map) wcontext.getApplicationScope().get(actionsKey); if (actions == null) { actions = new HashMap(); wcontext.getApplicationScope().put(actionKey, actions); } return (actions); } } libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/CreateActionForm.java0000644000175000017500000002273710404045214033753 0ustar arnaudarnaud00000000000000/* * Copyright 2003,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain; import org.apache.commons.beanutils.DynaBean; import org.apache.commons.chain.Command; import org.apache.commons.chain.Context; import org.apache.commons.chain.web.WebContext; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionServlet; import org.apache.struts.action.DynaActionForm; import org.apache.struts.action.DynaActionFormClass; import org.apache.struts.chain.Constants; import org.apache.struts.chain.util.ClassUtils; import org.apache.struts.config.ActionConfig; import org.apache.struts.config.FormBeanConfig; import org.apache.struts.config.ModuleConfig; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** *

Create (if necessary) and cache a form bean for this request.

* * @author Craig R. McClanahan * @version $Rev: 54933 $ $Date: 2004-10-16 18:04:52 +0100 (Sat, 16 Oct 2004) $ */ public class CreateActionForm implements Command { // ------------------------------------------------------ Instance Variables private String actionConfigKey = Constants.ACTION_CONFIG_KEY; private String actionFormKey = Constants.ACTION_FORM_KEY; private String actionServletKey = Constants.ACTION_SERVLET_KEY; private String moduleConfigKey = Constants.MODULE_CONFIG_KEY; private static final Log log = LogFactory.getLog(CreateActionForm.class); // -------------------------------------------------------------- Properties /** *

Return the context attribute key under which the * ActionConfig for the currently selected application * action is stored.

*/ public String getActionConfigKey() { return (this.actionConfigKey); } /** *

Set the context attribute key under which the * ActionConfig for the currently selected application * action is stored.

* * @param actionConfigKey The new context attribute key */ public void setActionConfigKey(String actionConfigKey) { this.actionConfigKey = actionConfigKey; } /** *

Return the context attribute key under which the * ActionForm for the currently selected application * action is stored.

*/ public String getActionFormKey() { return (this.actionFormKey); } /** *

Set the context attribute key under which the * ActionForm for the currently selected application * action is stored.

* * @param actionFormKey The new context attribute key */ public void setActionFormKey(String actionFormKey) { this.actionFormKey = actionFormKey; } /** *

Return the context attribute key under which the * ActionServlet for the currently selected application * action is stored.

*/ public String getActionServletKey() { return (this.actionServletKey); } /** *

Set the context attribute key under which the * ActionServlet for the currently selected application * action is stored.

* * @param actionServletKey The new context attribute key */ public void setActionServletKey(String actionServletKey) { this.actionServletKey = actionServletKey; } /** *

Return the context attribute key under which the * ModuleConfig for the currently selected application * module is stored.

*/ public String getModuleConfigKey() { return (this.moduleConfigKey); } /** *

Set the context attribute key under which the * ModuleConfig for the currently selected application * module is stored.

* * @param moduleConfigKey The new context attribute key */ public void setModuleConfigKey(String moduleConfigKey) { this.moduleConfigKey = moduleConfigKey; } // ---------------------------------------------------------- Public Methods /** *

Create (if necessary) and cache a form bean for this request.

* * @param context The Context for the current request * * @return false so that processing continues */ public boolean execute(Context context) throws Exception { // Is there a form bean associated with this ActionConfig? ActionConfig actionConfig = (ActionConfig) context.get(getActionConfigKey()); String name = actionConfig.getName(); if (name == null) { context.remove(getActionFormKey()); return (false); } log.trace("Look up form-bean " + name); // Look up the corresponding FormBeanConfig (if any) FormBeanConfig formBeanConfig = actionConfig.getModuleConfig().findFormBeanConfig(name); if (formBeanConfig == null) { log.warn("No FormBeanConfig found in module " + actionConfig.getModuleConfig().getPrefix() + " under name " + name); context.remove(getActionFormKey()); return (false); } // Look up the session scope ActionForm instance (if any) WebContext wcontext = (WebContext) context; ActionForm instance = null; if ("session".equals(actionConfig.getScope())) { instance = (ActionForm) wcontext.getSessionScope().get(actionConfig.getAttribute()); } // Can we recycle the existing instance (if any)? if (instance != null) { log.trace("Found an instance in the session; test for reusability"); if (formBeanConfig.getDynamic()) { String className = ((DynaBean) instance).getDynaClass().getName(); if (className.equals(formBeanConfig.getName())) { wcontext.put (getActionFormKey(), instance); /* It should already be in session scope if ("session".equals(actionConfig.getScope())) { wcontext.getSessionScope().put (actionConfig.getAttribute(), instance); } */ log.debug("Using existing instance (dynamic)"); return (false); } } else { try { Class configClass = ClassUtils.getApplicationClass (formBeanConfig.getType()); if (configClass.isAssignableFrom(instance.getClass())) { wcontext.put (getActionFormKey(), instance); /* It should already be in session scope if ("session".equals(actionConfig.getScope())) { wcontext.getSessionScope().put (actionConfig.getAttribute(), instance); } */ log.debug("Using existing instance (non-dynamic)"); return (false); } } catch (Exception e) { log.debug("Error testing existing instance for reusability; just create a new instance", e); } } } log.trace("Make a new instance of: " + formBeanConfig); // Create a new form bean instance if (formBeanConfig.getDynamic()) { ModuleConfig moduleConfig = (ModuleConfig) wcontext.get(getModuleConfigKey()); DynaActionFormClass dynaClass = DynaActionFormClass.createDynaActionFormClass(formBeanConfig); instance = (ActionForm) dynaClass.newInstance(); ((DynaActionForm) instance).initialize ((ActionMapping) actionConfig); } else { instance = (ActionForm) ClassUtils.getApplicationInstance(formBeanConfig.getType()); } // Configure and cache the new instance ActionServlet servlet = (ActionServlet) wcontext.get(getActionServletKey()); instance.setServlet(servlet); wcontext.put(getActionFormKey(), instance); if ("session".equals(actionConfig.getScope())) { wcontext.getSessionScope().put (actionConfig.getAttribute(), instance); } else if ("request".equals(actionConfig.getScope())) { wcontext.getRequestScope().put (actionConfig.getAttribute(), instance); } return (false); } } libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/ExceptionCatcher.java0000644000175000017500000001553710404045232034016 0ustar arnaudarnaud00000000000000/* * Copyright 2003,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain; import org.apache.commons.chain.Catalog; import org.apache.commons.chain.CatalogFactory; import org.apache.commons.chain.Command; import org.apache.commons.chain.Context; import org.apache.commons.chain.Filter; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.chain.Constants; /** *

Intercept any exception thrown by a subsequent Command * in this processing chain, and fire the configured exception handler chain * after storing the exception that has occurred into the Context. *

* * @author Craig R. McClanahan * @version $Rev: 55324 $ $Date: 2004-10-22 19:55:27 +0100 (Fri, 22 Oct 2004) $ */ public class ExceptionCatcher implements Filter { // ------------------------------------------------------ Instance Variables private String catalogName = null; private String exceptionCommand = null; private String exceptionKey = Constants.EXCEPTION_KEY; private static final Log log = LogFactory.getLog(ExceptionCatcher.class); // -------------------------------------------------------------- Properties /** *

Return the name of the Catalog in which to perform * lookups, or null for the default Catalog.

*/ public String getCatalogName() { return (this.catalogName); } /** *

Set the name of the Catalog in which to perform * lookups, or null for the default Catalog.

* * @param catalogName The new catalog name or null */ public void setCatalogName(String catalogName) { this.catalogName = catalogName; } /** *

Return the name of the command to be executed * if an exception occurs.

*/ public String getExceptionCommand() { return (this.exceptionCommand); } /** *

Set the name of the command to be executed * if an exception occurs.

* * @param exceptionCommand The name of the chain to be executed */ public void setExceptionCommand(String exceptionCommand) { this.exceptionCommand = exceptionCommand; } /** *

Return the context attribute key under which any * thrown exception will be stored.

*/ public String getExceptionKey() { return (this.exceptionKey); } /** *

Set the context attribute key under which any * thrown exception will be stored.

* * @param exceptionKey The new context attribute key */ public void setExceptionKey(String exceptionKey) { this.exceptionKey = exceptionKey; } // ---------------------------------------------------------- Public Methods /** *

Clear any existing stored exception and pass the context * on to the remainder of the current chain.

* * @param context The Context for the current request * * @return false so that processing continues */ public boolean execute(Context context) throws Exception { context.remove(getExceptionKey()); return (false); } /** *

If an exception was thrown by a subsequent Command, * pass it on to the specified exception handling chain. Otherwise, * do nothing.

* * @param context The {@link Context} to be processed by this * {@link Filter} * @param exception The Exception (if any) that was thrown * by the last {@link Command} that was executed; otherwise * null */ public boolean postprocess(Context context, Exception exception) { // Do nothing if there was no exception thrown if (exception == null) { return (false); } // Stash the exception in the specified context attribute if (log.isDebugEnabled()) { log.debug("Attempting to handle a thrown exception"); } context.put(getExceptionKey(), exception); // Execute the specified command try { String catalogName = getCatalogName(); Catalog catalog = null; if (catalogName == null) { catalog = CatalogFactory.getInstance().getCatalog(); if (catalog == null) { log.error("Cannot find default catalog"); throw new IllegalArgumentException ("Cannot find default catalog"); } } else { catalog = CatalogFactory.getInstance().getCatalog(catalogName); if (catalog == null) { log.error("Cannot find catalog '" + catalogName + "'"); throw new IllegalArgumentException ("Cannot find catalog '" + catalogName + "'"); } } String exceptionCommand = getExceptionCommand(); if (exceptionCommand == null) { log.error("No exceptionCommand property specified"); throw new IllegalStateException ("No exceptionCommand property specfied"); } Command command = catalog.getCommand(exceptionCommand); if (command == null) { log.error("Cannot find exceptionCommand '" + exceptionCommand + "'"); throw new IllegalStateException ("Cannot find exceptionCommand '" + exceptionCommand + "'"); } if (log.isTraceEnabled()) { log.trace("Calling exceptionCommand '" + exceptionCommand + "'"); } command.execute(context); } catch (Exception e) { log.warn("Exception from exceptionCommand '" + exceptionCommand + "'", e); throw new IllegalStateException("Exception chain threw exception"); } return (true); } } libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/SelectInclude.java0000644000175000017500000000705010404045210033274 0ustar arnaudarnaud00000000000000/* * Copyright 2003,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain; import org.apache.commons.chain.Command; import org.apache.commons.chain.Context; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.config.ActionConfig; /** *

Select and cache the include for this * ActionConfig if specified.

* * @author Don Brown * @version $Rev: 54933 $ $Date: 2004-10-16 18:04:52 +0100 (Sat, 16 Oct 2004) $ */ public class SelectInclude implements Command { // ------------------------------------------------------ Instance Variables private String actionConfigKey = Constants.ACTION_CONFIG_KEY; private String includeKey = Constants.INCLUDE_KEY; private static final Log log = LogFactory.getLog(SelectInclude.class); // -------------------------------------------------------------- Properties /** *

Return the context attribute key under which the * ActionConfig for the currently selected application * action is stored.

*/ public String getActionConfigKey() { return (this.actionConfigKey); } /** *

Set the context attribute key under which the * ActionConfig for the currently selected application * action is stored.

* * @param actionConfigKey The new context attribute key */ public void setActionConfigKey(String actionConfigKey) { this.actionConfigKey = actionConfigKey; } /** *

Return the context attribute key under which the * include uri is stored.

*/ public String getIncludeKey() { return (this.includeKey); } /** *

Set the context attribute key under which the * include uri is stored.

* * @param includeKey The new context attribute key */ public void setIncludeKey(String includeKey) { this.includeKey = includeKey; } // ---------------------------------------------------------- Public Methods /** *

Select and cache the include uri for this * ActionConfig if specified.

* * @param context The Context for the current request * * @return false so that processing continues */ public boolean execute(Context context) throws Exception { // Acquire configuration objects that we need ActionConfig actionConfig = (ActionConfig) context.get(getActionConfigKey()); // Cache an include uri if found String include = actionConfig.getInclude(); if (include != null) { if (log.isDebugEnabled()) { log.debug("Including " + include); } context.put(getIncludeKey(), include); } return (false); } } ././@LongLink0000644000175000017500000000015710423140531011320 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/UnauthorizedActionException.javalibstruts1.2-java-1.2.9/contrib/struts-chain/src/java/org/apache/struts/chain/UnauthorizedActionExce0000644000175000017500000000236210404045216034264 0ustar arnaudarnaud00000000000000/* * Copyright 2003,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.chain; /** *

Exception thrown when the chosen action mapping is not authorized * for the current request.

* *@author Don Brown *@version $Rev: 54933 $ $Date: 2004-10-16 18:04:52 +0100 (Sat, 16 Oct 2004) $ */ public class UnauthorizedActionException extends Exception { /** Constructor */ public UnauthorizedActionException() { super(); } /** * Constructor. * *@param message The error or warning message. */ public UnauthorizedActionException(String message) { super(message); } } libstruts1.2-java-1.2.9/contrib/struts-chain/web/0000755000175000017500000000000010404045234022321 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/web/example/0000755000175000017500000000000010404045234023754 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/web/example/WEB-INF/0000755000175000017500000000000010423130300024771 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-chain/web/example/WEB-INF/struts-config.xml0000644000175000017500000001547710404045234030352 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/contrib/struts-chain/LICENSE.txt0000644000175000017500000002645010404045224023375 0ustar arnaudarnaud00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. libstruts1.2-java-1.2.9/contrib/struts-chain/NOTICE.txt0000644000175000017500000000014710404045222023265 0ustar arnaudarnaud00000000000000This product includes software developed by The Apache Software Foundation (http://www.apache.org/). libstruts1.2-java-1.2.9/contrib/struts-chain/README.txt0000644000175000017500000001156410404045216023251 0ustar arnaudarnaud00000000000000The Chain Of Responsibility Adapter README File $Id: README.txt 51188 2003-11-27 23:01:22Z martinc $ INTRODUCTION: ============ FIXME CONTENTS OF THIS RELEASE: ======================== Top Level Directory: ------------------- LICENSE.txt -- The Apache Software License, under which all software included in this bundle is licensed. README.txt -- This README file. build.xml -- Ant build script (only required for building from source). build.properties.sample -- Sample "build.properties" file that may be customized (only required for building from source). Directory "docs": ---------------- api/ -- Javadocs for the classes included in the Struts Chain of Responsibility library (org.apache.struts.chain.*). Directory "lib": --------------- struts-chain.jar -- The compiled classes for the Chain Of Responsibility adapter library. Directory "src": --------------- conf/ -- Source files for the JAR file's manifest. example/ -- Source files for the demonstration web application. java/ -- Source files for the Chain of Responsibility library classes (only required for building from source). The base package is "org.apache.struts.chain". Directory "web": --------------- example/ -- JSP and web application configuration files for the demonstration web application. Directory "webapps": ------------------- struts-chain.war -- Executable version of the demonstration web application. RUNNING THE EXAMPLE APPLICATION: =============================== The following steps are required to deploy and run the example application (struts-chain.war) included in this distribution: Install A Java Development Kit: ------------------------------ The Struts Chain Of Responsibility library requires a Java Development Kit (not the Java Runtime Environment), version 1.3 or later. It was tested against Sun's JDK 1.4.2 release, available at: http://java.sun.com/j2se/ Install A Servlet/JSP Container: ------------------------------- The Struts Chain Of Responsibility library requires a container that supports Servlet 2.3 (or later) and JSP 1.2 (or later). Any J2EE 1.3 (or later) application server should also work. You must acquire and install such a container in order to execute the example application, following that container's standard installation instructions. Install A Struts 1.2 Nightly Release: ------------------------------------ The Struts Chain of Responsibility library requires a recent nightly build of the head branch of the Struts CVS repository (i.e. the code being used for the Struts 1.2 development track). http://jakarta.apache.org/site/binindex.cgi You will want to become familiar with the operation of the standard example web application (struts-example.war), if you are not already. Deploy And Execute The Sample Application: ----------------------------------------- Follow the standard procedures for your container to deploy a web application that is packaged as a WAR file. For example, you can deploy on Tomcat by simply copying the struts-chain.war file into the "webapps" subdirectory of your Tomcat installation, and restarting Tomcat. To execute the sample application, access it with a web browser under URL to which it was installed. This will usually be something like: http://localhost:8080/struts-chain/ USING THE CHAIN OF RESPONSIBILITY LIBRARY IN YOUR OWN APPLICATIONS: ================================================================== FIXME BUILDING FROM SOURCE: ==================== If you wish, you can build the Struts Chain Of Responsibility library, and the sample application, from the source code included in this distribution. Follow these steps: Install An Ant Distribution: --------------------------- The provided build.xml script requires Ant, version 1.5.2 or later. You can get it from: http://ant.apache.org/ Install this environment as described in the Ant documentation, and ensure that Ant's "bin" directory is on your PATH. Configure Your Build Properties: ------------------------------- Copy the "build.properties.sample" file in the top level directory to a file named "build.properties", and customize the paths that are specified there. Build The Sources: ----------------- The simplest way to build is to execute: ant clean dist to recreate the entire distribution in the "dist" subdirectory. Use the "ant -projecthelp" command to see what other targets are available. KNOWN LIMITATIONS: ================= FIXME libstruts1.2-java-1.2.9/contrib/struts-chain/build.properties.sample0000644000175000017500000000330010404045230026231 0ustar arnaudarnaud00000000000000# build.properties.sample # ----------------------- # # ============================================================================== # Copyright 2002,2004 The Apache Software Foundation. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # ============================================================================== # # This file contains example property settings that you would use to customzie # your build environment to build the Chain of Responsibility Library from # source code. To use this file, make a copy of it in "build.properties" and # customize the values as required. # # $Id: build.properties.sample 76263 2004-11-18 18:04:23Z craigmcc $ # # In order to build with Tomcat integration you must have the catalina-ant.jar # in your CLASSPATH. This file is located under the jakarta-tomcat/server/lib # directory. # The absolute or relative pathname to the Commons Chain Distribution chain.home=/usr/local/commons-chain-1.0 # The absolute or relative pathname to the directory containing Servlet API servlet.home=/usr/local/jakarta-tomcat-4.1.29/commons/lib # The absolute or relative pathname to the Struts distribution struts.home=/usr/local/jakarta-struts-1.2.4 libstruts1.2-java-1.2.9/contrib/struts-chain/build.xml0000644000175000017500000002360610404045214023372 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/contrib/struts-chain/project.xml0000644000175000017500000001062010404045220023726 0ustar arnaudarnaud00000000000000 3 ../../project.xml struts-chain struts-chain struts 0.5-dev 2003 org.apache.struts.chain Adaptation layer to use commons-chain as the base of a "ComposableRequestProcessor". Adaptation layer to use commons-chain as the base of a "ComposableRequestProcessor". http://jakarta.apache.org/ scm:cvs:pserver:anoncvs@cvs.apache.org:/home/cvspublic:jakarta-struts/contrib/struts-chain scm:cvs:pserver:${cvs.developer.id}@${cvs.developer.host}:/home/cvs:jakarta-struts/contrib/struts-chain http://cvs.apache.org/viewcvs/jakarta-struts/contrib/struts-chain/ commons-chain commons-chain SNAPSHOT struts struts SNAPSHOT struts-dev@jakarta.apache.org src/java maven-jdepend-plugin maven-checkstyle-plugin maven-changes-plugin maven-changelog-plugin maven-file-activity-plugin maven-developer-activity-plugin maven-javadoc-plugin maven-jxr-plugin maven-junit-report-plugin maven-tasklist-plugin maven-pmd-plugin maven-simian-plugin libstruts1.2-java-1.2.9/contrib/struts-el/0000755000175000017500000000000010423130300021050 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/conf/0000755000175000017500000000000010404045252022007 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/conf/qa/0000755000175000017500000000000010423130300022376 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/conf/qa/CheckStyle.xml0000644000175000017500000001054510404045254025177 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/contrib/struts-el/conf/share/0000755000175000017500000000000010423130300023077 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/conf/share/MANIFEST.MF0000644000175000017500000000060710404045252024546 0ustar arnaudarnaud00000000000000Manifest-Version: 1.0 Extension-Name: Struts Framework EL Extension Specification-Title: Struts Framework EL Extension Specification-Vendor: The Apache Software Foundation Specification-Version: @version@ Implementation-Title: Struts Framework EL Extension Implementation-Vendor: The Apache Software Foundation Implementation-Vendor-Id: org.apache Implementation-Version: @version@ libstruts1.2-java-1.2.9/contrib/struts-el/conf/test/0000755000175000017500000000000010423130300022754 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/conf/test/tomcat40/0000755000175000017500000000000010423130300024407 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/conf/test/tomcat40/server.xml0000644000175000017500000000136510404045252026456 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/contrib/struts-el/conf/test/tomcat41/0000755000175000017500000000000010423130300024410 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/conf/test/tomcat41/server.xml0000644000175000017500000000346510404045254026464 0ustar arnaudarnaud00000000000000 factory org.apache.catalina.users.MemoryUserDatabaseFactory pathname conf/tomcat-users.xml libstruts1.2-java-1.2.9/contrib/struts-el/conf/test/cactus.properties0000644000175000017500000000042310404045252026365 0ustar arnaudarnaud00000000000000# Configuration file for Cactus Testing for Struts 1.1 cactus.contextURL = http://localhost:9090/test cactus.enableLogging = true cactus.filterRedirectorName = FilterRedirector cactus.jspRedirectorName = JspRedirector cactus.servletRedirectorName = ServletRedirector libstruts1.2-java-1.2.9/contrib/struts-el/conf/test/log_server.properties0000644000175000017500000000076110404045252027257 0ustar arnaudarnaud00000000000000# Configuration file for Cactus Logging for Struts 1.1 (Server Side) log4j.appender.cactus = org.apache.log4j.FileAppender log4j.appender.cactus.File = cactus_server.log log4j.appender.cactus.Append = false log4j.appender.cactus.layout = org.apache.log4j.PatternLayout log4j.appender.cactus.layout.ConversionPattern = %d(ABSOLUTE) [%t] %-5p %-30.30c(2) %x - %m %n log4j.rootCategory=DEBUG, cactus log4j.category.org.apache.cactus = WARN, cactus log4j.additivity.org.apache.cactus=false libstruts1.2-java-1.2.9/contrib/struts-el/conf/test/struts-config.xml0000644000175000017500000000545510404045252026330 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/contrib/struts-el/conf/test/web.xml0000644000175000017500000000231410404045254024267 0ustar arnaudarnaud00000000000000 ServletRedirector org.apache.cactus.server.ServletTestRedirector JspRedirector /jspRedirector.jsp ServletRedirector /ServletRedirector JspRedirector /JspRedirector libstruts1.2-java-1.2.9/contrib/struts-el/doc/0000755000175000017500000000000010423130300021615 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/doc/images/0000755000175000017500000000000010423130300023062 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/doc/images/jakarta-logo.gif0000644000175000017500000001750610404045254026151 0ustar arnaudarnaud00000000000000GIF89a^dæÿÿÿÿ!!!111999BBBcccsss{{{ŒŒŒÞÞÞïï籠„Þ„„Îï÷JB„”Öÿï!çÎÆµZ9÷RÿB÷k1ÞBÎ{Rç„RÞk1ÎRÖœ{ï{9çµ”ÿsÿc÷­{¥B½{JÎkÞcœ”Œ÷çÖskc÷¥RÎÆ½¥Zν¥ÖÆ­­”kcZJïÖ¥­{Ö­Bïµ)ç΄¥„sZ÷Ö)έέµœÞ½çÖcÿç½½µ{{s„„{„„sBcÖŒµÿ9ÿ9­c)ÎB!Z9ŒkÿkÞœÿ”)Æs­”ÞcŒJkcŒµÿ”½ÎŒÞ{”ÖÿÖ掠”Œÿï{kÖ1½”{ÞµµŒÿµœc΄ï{½ç„ÿŒµZçJ”ï!„{9”9ÞRÿR¥Rk­1Î!{÷1ïÿ­Ö,^d@ÿ€‚ƒ„…†… ‡‹ŒŽ‘’“”•–—˜™š›œ— ‰C¤CBŸ„‰BDB33*BE *||s|xwu·x}&##-"¡84©ÐÑÒÓÔÕÖ×Пڡ‰´ B¤â¤DQIHJHLRQSRTT^V_Wa`cùakinþmoÎøs3çMƒÀö< ð@‚„ *˜à B„l3jÜȱ££o.T$`Á† C`$P €Í˜3bòyy'ÅŠvMÎÇÓˆ‘#H– I²d $MØM‰"Þ-[¶xÁ7MÌ|hÞø«#G«?:}îìÙC¡ì„9tæ™°!‰ÿL@Ð@× xóêÝ«é"n `HáŸ>xøÔáµXë4ùÆ\ÍwÆË—/` n¹â%ª•&9ŸðÝó§%GÔ!š´iN&준Žo³å/‘Å\É'ÆJdÉhÞâó O=„e0ÑÀs/òN½zµmÜuS nMLÈ@A|Ùâ†äÙs°OZ7wÚ¸yó>¾?5tüÍq“&~iŒ‘Æ=c€áÅ”‰Ûbàs™=‘}áÅTHÅ[L‘EWpaE^xA‡|õÁÿCH°PD˜`@!ƒ €ÐÂŽ¼×o&ÛŠdå´,PÀÃAæp†4X%2a@P¸°+H¯&\ DÓ©?áè ŠQ”œH V°B<® …ìQ¦3`øB¼`:7¨Á JÃÔ †­À§~86 ?P}h4°¿Üïˆ~ËÎ’D0‚˜`9ã©€øÚÞƒØg>oèÏcú#†0Œ õðB>®@Í„á2V®iá p,WDZ“Ÿ$! FH‚:–€Ž›À£&M€‡g´ ½Ë`Æ /èÁ|àƒÉ( Bv@$ZÒT©(’7åË)@ÿÊBÞr d@&( *)0@¤!ÁðC Ó‡<øá‹ù^Ú0=„kàî0:Ì¡¹Ãúc†60³Èä¥Vú¡Èèã7ò$Pƒå F6ÊÁzàEú Ú¸¤:y—IU Ü€g‘4©oÔ³õ´ç X¢yúóŸ˜2â:Z©}©JhùYAI©Ž 2„B÷PÆE4e -D¿–ö³Ná åæ$×0Œò$hiHº+“6g]„ FJš°MŽU8€ в‡É ’û¨£„ÖÑI¥êa£ ZLíwÑ»!”a-—I“RŠ-ÊeèÿZ\Jˆc5,«¤ÙªS—ªQF½lŽkÙ ªÔ?¼T,å Û`êVULu4ÚRÀ]IñÑ"kwxDR 1ØM(à§8,!t ‰ÀV¢°‡r,^0¶R:#K›­01X€³ÅVŒ8¹@d]Em±¡‚ÀT8X+wÁvµýlg ‚Ú&ඃ(-mm[ѱ·ÄUE«°Û¹ámÇr×Ú¢Ý?¸öj…pÁ‰ ÙËB"žPáªêÝòš×# `_U@‹F, O. fÐ ðZÀ$xAÂ#ÙiÀv+ðyLàIdR‰0 )Ø› @ÿ*Âÿ,‡]ª! kÈ¢~V׺6ñay†rÔw‚Ü@Gà-°ŠÏ;$n¸`ð:éN 0–8á)RШ—BÞ(P -\4o±‡îAäó¦;¬‰ÁE\PЂÜ€p†”÷¬7©àÏC˜Añ]„•(  ¬Ð”°%\pRvô2lŽÀ&,T˜Bg¾°…2_Æ@¼ñ œ‚iÅ4±2s¸eY*àõmà$øÁ ÌWb€ Å|ÎuFóçÂ!½,aCÞ 2àÃQi †>ÿ#0¡‚>Êj]”¡@O!LöTN™5¨Á™Å|C÷d(úÂy8¦ZpXNÄó[A{uMoOü“ ¸@YÜó¦ýøc üx èRX3r \ÀB<–²”'ìµ4GÈcQöÈ„$²)€ŒM¬°CzÚv>Ò †¤w&|¼‚ÌÔ…‰"à‘@ëMsG(‘%"  ÌS 0D|{ÀøÞ0MþÀ0@ÒÇè:³¾#›ÉB&HA´Z—G8‚µI'!6®¹ø¥áAB/FÃj( ši~„›F= gv4óšï™HKl0Z«g!|º›æPÅÿï!S—† dk¢!éW"5] \à´‡ÀÐ!,„P Y˜ âhu á >Ñ£:@3p~S’AðA7Ã)NØ8È”ÝuÝâP$É8 @0p€Ã0A[N  àðyÀCÐ}Åà!1u@Ì/åð7´!íXq¦_ºI@/1öÂpÆõébHú Ä…xÓ‘=x| ¸H:@@:P[9Àñ´{ (Oô´OJbÐ àPâ'@|Ä` éc³CÑ|àfÃv·t½@„§w°¸ÔaLïñsІ± AôÿKÁi`5à5"k9@{ìc‚b9…²€JèN‡ð ½wo¾ç€RèIRø{RxSR3“èV¨øW@–xPy8ÒøŠ“2Wcõÿâ+ã@5ÄøT¥ÂŒäàŒ*ÃŽ¤ ZtÅVŸ˜‡eRŘ+ÒxÔ1¥ +†àªÈUÜXWˆŠeáÆ0$°¹£¤hºkòä?3šI–y°À+±v`EinãS‘a ¦È g9š¦ˆjsã¢D˜(5æb,0Ep5¦eP¢¤Öfjgªd) sƒaÀ!Pgš¨¬ ½ç`8ù-BÐ[°9S[ pVp—q ÝV:‘qCãcÐ&íÖ°@# º×ªÒ‡F–™",`9NLpqM `ÿ«2/ñmnp('¬Vg¸ð¯cª àd«:­Ò:OIN:?Q|4±‘Ò³«QWa:hZdr.çK‡·0%p>pkÑJ¯hª Èó À*ÖEî¢ù:©1ë÷{ dH]”Ý£*ÇK«s°|Å |€-Ð P±+¢„,¶9,ð À¦TÐ7¦<¦¯yÔu_‡q5Áðm·«ú0ÛrMx½ð qѬ&àJ˧sP2@ð'D¯­?Koïee!1UŠ9DÐ ,QâïðeGq¢GB¡AײñÿAZÀqçgï—dð²iðЄnǤ‡a¶n‘(qö­&ª&V¦‡:·S…'ae PežÄó±2!dí =MpGMK>a]·G|Má5‘y˜=&:ý¡1¡EÁ!kbr¼dƒ«V¶baà€!-ºª«;Ø û£´Ð»m ‚b¤²)ä!I¸9U·(ѶGèÐh'' r™Á«*$F#·Kê·~dç:ÿ±s@x¬³&Ê笃ñ&Ð-6¯ãK¾ó„„¾×à·Ðòám‹ gpFâ Ôt=økÿu\׿EÑA²¡qÖÓqaÐBŒ\@yd výaLÂqÂ^z0z L¾‹zo 0âÓ:æFùAl”t-!\`[À:&S@èWz>Á¿’ÖŒQдÁ´F›–=’{Àn ©=ˆ°Ð‹C²SCä·1`¤S¬8ét`¾'6ÀÅ"æ° ½@YÔhÀƒÚ3:WyGFWÇJðTçÆ¦‡«qGüºrL¼Mc;a0ájšÑ«ãVLw@èŠ `› t¸CEÔÈ{ƒwŸdk+¦ÊwJ ïÁÉçê}Ó”i š:ÿpšÇqV€¼a B 4ÎY ÊWztdGO0²FÑ¿°A•æɆ+dBg`ºñ3ÔM‹I㔲ÌÌl47‡$4à>€& s&@|pØ—®Atÿ0Mm`M’1®ægM•§»ñVàEõ@HS0O G«ÌÎâ`G§P °ai v5q5µG{ÛI>`Ê,¾íäÌ¿g±‡ÃÀ½çÁ®×Ç‚æÌÿpagàÖß§EÖÔÇÄ«W€& ôF—$œGBuŒ¿êìpW ;1,Bß#90„áN´ç;°¹gÔG½-¶$. ÿ!àD(@ÅðÐ|ÆA8h}›ÜK¹¤ƒÈDƒÿö=þÐf€ _r°Ü^ÀÑ #Ö%Tp”gvë7›ýÇ,¢¾‰"*-Â"ŠDN6@Ø…ÍœÐHâ‚P|¨:Ë ¨ý@6¸&@èv‚Æxba}F†®ÆT@YÍÀ`\ÁÔ3>¬òç2$â· 4:fP#¯÷H’ä×7²Hýç":0ÜÄ]ÜÖáO›T…h.ÐÜpXlªP m! Ñ|è¶Å»€Þ'z xàoÐÃjLUûÑÍÔ¼kE)85„ts@N|}ÿ#öI±—6ã4Ð?>+ན)mˆOZø{'" ŽJ9˜}²@$øµ'Xd×}Â"ævCTò²bcqVíkpäÉýg À€¤wØ@ 0| ÐÀ À Àv  `d.vÀ¶s¤Hr;,àTH…KÂ…=Nçö3sCrçP˜çz¾ê«î{ýäOpHê=€Ÿ@â„¿%Dä¾þë\লiw_HĉpìúNÏð(rè8 ð Ð Õ0GÙi 岡Ø@ÿíÖÞ8ÌΊ ìœ°ÀrP©äŽ07űSðÎðȉ2Ðð­‰9HU’„ `5æ/ Yœ@ñŸ)TY¢!/^ @òÀH’éñ!9Ðòºñu§ó¾’,st˜Šð9)ŽÈŠ'E^Œ ˆÜÕ)Ô‰P¤ØYM?)»Õ‰¥5±º*ƒ0õ‹¢òùQ)©.VORIE¤5»˜Œ‚R¦HõD•ŠsŒÐ®,¡Âí*¨•’B¿ô?É^…p’ )·ˆËˆ6€_ÿ¢' /šð•iøíÂbˆOGŠ/^E9G‰PxÏZ¬ 2æ9 À9DrÒØ‰®÷|_“hùñ"9Ñ ÚxïäNB™"Žˆ26ƒ7Ð2ú‚€ú†°ú³èúYïCŸïÀO“7Ó¥·‰ß8ø9Ž¿?¸X“…4Ò?)ÏúË?I-¿üs½8éýÉTD¿0-*Ø‚e~¸85žVÕüPE L ûCRª ƒBB„ˆˆ‹ ‘’‚„†ˆŠ„••‹’”’„•„ ‘£˜B±²³.©ƒ§¡­º½¾¿ÀÁ½Ÿ¼–‹„ Âÿ¥ƒˆ¯ƒ«“„‡›ƒ¬„.Ôƒ*»Ø‘ÛŒäÑ¡Æ×ƒÙšÈ¾ÄòÞ•—ƒµ.ƭʃ̾îýy·®ž³ƒÒ«VÌ`#‘ -+@q™®s‹5C4c‘!!2æk÷GÚ±eÍ:Â)2]ÉP[ªô1䢑.|YÉß  XtÀ“C1ÿ (1À³E$0ðjÜÓŒøjÝlž¨£'¹EZ4cºÜ2‹6’@B3îÍpiÑZ¼.ÝPj±þÁvQ_¾;­éb‡ˆ¬à?gª[öS[ ™»va® C‹Mº´éÓ¨µ2Nͺµë×°cËžýu2ÿíÛ¯àæH°ÑŒwŠþÒ½{6ñâ´õ9¹óÒèŠImÀª¤ê £oÕþ|]÷ëv¯°äp¢¦‹7UÒ€\’‚v’Ÿ^Ÿ!ð0`@’‹fø‰Ò+•ü—H~ +ì hßñõ·€u“$pžSZâà|3,°@\Jr@  £€Ð,%y,wÜéçÉ.À€Ô‰3꣒((Ö˜CÁ˜ãX@Š•V‘BÊØÈHÖ7dŒP Cà”TÆØâ•ÛÑ 3n©Üe“Ò^$ïI¢‚ˆœé]#Ü'df8 P‹ IzÙ%"r@§{ùå¹'+bn€ŸÜPÔ}UÚHc€‡½•‰H~(^Œ þ‰å¥ÎY Øqcqê$¦ò€ê¢¨¤Òæi/mv’j|@a©•œ «6©ä9ë­¸æªë®¼öêë¯À’;klˆ›b#cú,{ÕE„¦Ø¦mB-¯ˆ@æ®'@@*ìª,¢Ù‚k$—‘| @¸ß@Ëh9æfb$dÞŠdpˆšˆî!†"ªh°“1Âî±l0©¥,#¬ ¿ú!±B|ðÄãØp(Úz’q- ¤‡kXæêVlòÉ(§¬òÊ,·ìòË0Ç,ó!;E•W† a©Õv[n1jàpÃw\C7[оWÜ‚b!$–¡y'r€X`³u×- Þ7Ð@6ºUxáÐÔíw]Ì ÝÏHàâ‹`w£s ìX³ y]8;àcÏPfxe–ù ·€†T6°€5’ù³›Aæ„w…snyh¢3Ú9æ‰pàšÿÀ€—n:€ÿ8¢¦Á]h†F÷é—b„ €º×®³›¡¥ˆØbxXÜÐöÚižèh…²&Xéܶ,¸ëN¨4Æ[ïÃû%!©Á¥Új‡"Ç»d‰çþÇð¢;÷"¾Ò\f4€sвþG¡“5g!•K7áÖçf\ö;\Åçæ€Ú~Ý¡ÐP@ÜÀ]wq(i÷‡FÈaÒMG÷~©ï÷÷Ï»÷>ó¸Oh\ʘA`ÉBÿÌ:>\Ô%R}!"fwÑ“~@õö·?¡Ú9rã €õ?¡Õo!”ÈèÀe€Ì€ x[ñTG,•­¯ïWݰÿ¾\Ɔøø÷=v®xãKšBP3Ü%o!YÖjöêå\€^†ç²plÄkáD‚º¹aK‡ÿxœ!n»p•Ë]EŒ!Ch¨¼'Љ)äâçVÅ!º°fës Eæ×3Õõk‰â’âBö7º)†‘!9{£æø²;Ê1!ë«¡ß–ˆ.2±w5œc»xH–}Ñ„ ya¸ö®¼5@’“œdü"2‘qîŒhäõvD0þƒ‡âê_'ÿ‘·éÝPh73%*J"‚‹´b¸¤§è‰eë‹$%)Y7èÝò!BCd1©¥H™™€á @ SWD> ñ¯ƒeÇÎGÊPÿRS•†Œã—¨MGFD‘´d$Ý2™¡¬vÍŒˆ)†D=SžÇÄc!ã©ÌK“øâèþçDH6€ØÛ\7ÑeÊÓÔ“ç„–Fø@¡§(A-¹ÄY´!Á@ÆgOo"$T»› º YëD;8O˜â ™ÜÄ'5÷¯‡<z;#–)£ØÉ6.—á:€Åúe Jó„–Ù)QâSp!5Šâ¬' ^ #ÄÄÆÃ»b+ÄÉ3’,“ /ÅÎ….Ù ÝXÈo-pNk™#ûWWE+Þ“‡üäy&¹!‚c•]x-ÇæJÊ¥ší?: e0‡YÌc&s™Í|f4#2 ;libstruts1.2-java-1.2.9/contrib/struts-el/doc/images/struts-power.gif0000644000175000017500000000340610404045254026266 0ustar arnaudarnaud00000000000000GIF89a_%çÿÿÿÿÿÌÿÿ™ÿÿfÿÿ3ÿÿÿÌÿÿÌÌÿÌ™ÿÌfÿÌ3ÿÌÿ™ÿÿ™Ìÿ™™ÿ™fÿ™3ÿ™ÿfÿÿfÌÿf™ÿffÿf3ÿfÿ3ÿÿ3Ìÿ3™ÿ3fÿ33ÿ3ÿÿÿÌÿ™ÿfÿ3ÿÌÿÿÌÿÌÌÿ™ÌÿfÌÿ3ÌÿÌÌÿÌÌÌÌÌ™ÌÌfÌÌ3ÌÌÌ™ÿÌ™ÌÌ™™Ì™fÌ™3Ì™ÌfÿÌfÌÌf™ÌffÌf3ÌfÌ3ÿÌ3ÌÌ3™Ì3fÌ33Ì3ÌÿÌÌÌ™ÌfÌ3Ì™ÿÿ™ÿÌ™ÿ™™ÿf™ÿ3™ÿ™Ìÿ™Ì̙̙™Ìf™Ì3™Ì™™ÿ™™Ì™™™™™f™™3™™™fÿ™fÌ™f™™ff™f3™f™3ÿ™3Ì™3™™3f™33™3™ÿ™Ì™™™f™3™fÿÿfÿÌfÿ™fÿffÿ3fÿfÌÿfÌÌfÌ™fÌffÌ3fÌf™ÿf™Ìf™™f™ff™3f™ffÿffÌff™fffff3fff3ÿf3Ìf3™f3ff33f3fÿfÌf™fff3f3ÿÿ3ÿÌ3ÿ™3ÿf3ÿ33ÿ3Ìÿ3ÌÌ3Ì™3Ìf3Ì33Ì3™ÿ3™Ì3™™3™f3™33™3fÿ3fÌ3f™3ff3f33f33ÿ33Ì33™33f333333ÿ3Ì3™3f333ÿÿÿÌÿ™ÿfÿ3ÿÌÿÌÌÌ™ÌfÌ3Ì™ÿ™Ì™™™f™3™fÿfÌf™fff3f3ÿ3Ì3™3f333ÿÌ™f3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!þMade with GIMP,_%þH° Áƒ*\Ȱ¡Ã‡#"|hÅÁzªH\ñ¤ GCn|Fò‰ÁU$I¬BŠ$©–«LŠœÉðIɃ)CÚ|fIš@V!ç3=!cÜÜiÒ€ž–Ï*¨¢ U!ÍzÀ ŸQI¤øì‰žõ $%3-J’eÊ“lÕVOVUV•:p'V’sî´xö™Àd$ÅâõšØæ*+ ¾ ü¬J ”ä× ÉU`+°’X h‚JË^~FŠñ³[ª\Ø\q}ªÔ,zgŸv ôÙz'l¦F[óVNrk2ƒ;?ëQì@뼫X±•¶i¸pUþr6i24øê?¤.ê9êðôgW •õM‚…Æ_ŠíΪ•â^A´@~%rí)ç“|ØVÙ3@G€}‡Tpp}×YaV´Â_h‰˜l* µ“x÷”S Í $àQ}ÕœX=HÖc儞a‘ð\HXßpA8ämÉ=Òn&–HWVYDàoz´%UV~udpVô•V] „‘Vm‘PÕ cêaeŽy¹iÐKAÕiçCô ù¦B=ñ„w ÑN -TÅ’p‘2 Œ&$à†•I¥X5£”fvÔhCÕ9$„=’ô¥ nª ¥ÒÄY†9¶ø^zþ¦"ZP—ÙjgQÂ+†©Î¦>ÃBžéo!PBUy¤f™•Õ‘ÅöJ`VŠ¢i{àíii¿‚·K‰ Â&Uq)”SMªÜháŠ+¤ñº:_¸¤xj½Ý…[Et€…»[òzX¯J¤&ù¯Z¢n¼ÉÄѯ#úÉ& µš “øUÆÅ0Oÿ>aQ­°…ªå«ñÆÄ­®}Wé¥Ê i°1ôëËÏ:JúÂË/»¼Y+Pj.å#Ò¬I Þ»Ûº/IÉÔ÷[Ð^i ž–;[ž~€$ 0»«8µÔiÅ+'Cn):Ë«5œ«ÙQôðܯ¥àÈPÙºv]PÙDD8Ac»(7'éw°+»Ö«àN}Pâ†Û÷àVª°wÒ™ã=5¨Eü¥æ•Sšºè”O…·#:A€wó¯)Ë^îA€·0Ô¥c*œâ½"=§ãq‡çsÌD"ÀÛ–¢þ+»ÆEk»îQùIÕ¥ÎPP­òÚ˜dG¹ËXï’1½ ~xH_Õѧ"ú«o)&ñ;ì@€ŸïÈfc\ðÀëä~ÊËU¾ô-«diyÿÑG8R?q$^áG,æ0þIbfQàwEBA;libstruts1.2-java-1.2.9/contrib/struts-el/doc/images/struts.gif0000644000175000017500000001116010404045252025126 0ustar arnaudarnaud00000000000000GIF89aôVÕÿÿÿüüý÷÷øßßàÆÆÇ¬¬­×ØÚÌÎÑJZl2d6f ;k +K$MxSqy¨–§¸¾ÈÒ·¾Åëïó÷ùûÏÐѹº»%>Vúûûžž‚úúøþþýôôôíííååå‘‘‘ÿÿÿ!ù",ôV@ÿÀŽpH,ȤrÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿Fʃ¡(›Ïè´º)@ŸÀxˆDÇÙø|%8Éõã_Š.à.²Qä\K$¨ @sØr¦ü ?¤Œã y"•2²#Tœs s`rV8 ®dE{ÉG::€†ZÉ á`±ÍŒ,£Ø‘%*Ñ ˆÄ?l] ™uq"3,‹ EC&º‡RN(´¸98t ~ðÆŽœ8’+¢ëpŒ£çHÇ:ÚÿñŽxÌ£㔋Äß Éú´ÇBÒ â |… @ˆn'ñú×#É…x @’”|EÔ8¨ ¬ÇnˆëÀðÀ0¾Ž’YÀ(Ké¶IK•é‰:\òà01‰ŒÒ²Ç¤á)€@Ó*­_“:¤£ Œ6T‚5ÙTµœ1vЍò¥€lA»f S„މÄ÷¸éo‚˾\À…€“»xàà®lD¼‰<ÑrlRPQ¶2¦ñs ì¸æyFDžRY@=÷c1€`ZÌ Còô¶'Pd|6ºaˆâFÛd€“hHkþðfF0 ÿjÄЉVã¼PràŸkQPz•"£Aéw²Æ$š8„f$GHºXdŒ[™E¢˜‰­¬Ñy~ˆ€?|e Té>@ MÎÑ»x`mS³›Q J ©z€ª\"ÅUé™!}l —x9€*ICè8`ºOܾIS%eªpd0P©ö3žUxÀ®f?²‰Nxâ ,inb.³¢U/* …A›Pð€ü¥øR0Q&„ ” öé (’´ f3ÈË¢‰—®”¸M¦ÂùŽQ°Nuá fG‹ÃŸŒN*œ`ÌDz¦Ï-¾ä˜sÕ]øL× ‹|ÿ€Àc)KºR Áî'¤h~$k:ÁhÑDÂ[R¬h|X¾IùÊ[þò˜Ï¼æ7ÏùÎ{þóÅàûãAOú8R@÷y5^¶“‡îœ9t¥ý¬$ j_p•²J_BdŸÊÊ‹a¡<Dú}1”i¬;â?o ãCùœZ¾±ÊSDp‚s>’À?ùpÐŽòžÚ—α/ýZyh«*{5…‹w­œHd•Å#GQeçî‰Cþ—£@ @P–Lt~µ 2åï—@`ß×`§¶€P†G Zÿõ¤.áBÑvSÐQLV9›ŽÅÓsšÄIýgJù7ág3KCÙ8Ð:ÂKu5.ÌCJ´@xce†Z;…‹ùfŠ4£`7ýØ33#þ€KE¦ˆxÍ2’#9 ЇvpI£@hxH +´nJCV ` I5$¹“&‰’ÞE,É $Zš€FwòVX #TS‹ï13“iip3¹åHM"\Z”zUKk4D$a°¶)ÿg ÿàf+5V†ã&×uYìC5Žæ 5Ä•ØB<'ù˜èE[ñ—ÕU÷S. 8Xk•O ±ÌÐ}Ç13MgXÅ  v Y€S à9äBwç6ÄqIâABQdiÕ@A’ S§¨™.he"s½EƒOä~]—<4$pb"ärB'ÐZ©‰!œ¡'“«pg÷`û&s’ÅQãÁgcØo™“ì?1œaœu²)ý’ õ|¿1r*•‘t!ÑÂjS#Êb[h!…ƒ7p /&VáÑ^ð i¢)gT7<Á_ˆMØ¥(°6 #Ñ/ÿqÓwkstH çA•  ^ùpbH< JgË•vñbíG¢–ö–(ºŽË… ä„“¬Æ‹ô+¦’•t ކDz%_“\sNpaho‚`g'Ú$j“ne/ú¤&x¤snnál !&‹PŽX~U_§cB(Òc2E¢£u‘”¥€P¥‹<ÔI<drJküå¦I § €è6A•À¥òÕ:Ö éc¤qÉnIðÀc¥ì¥m¹.©1v¥*„È¡r­S{_ócêY¨tBCveyæ95£Ÿ—š© Sz©¯Ê$ŒJ¬jaÿÁ gZ Ø"¦ïCfHzJªšVœŠ¶ãØÆ²j©ajï0hàµH •ÁU¦eá ç‘TÄ`^ʰ"ñ¤·º8sV‹Ì)5ØÚ$Ÿ9 p§Ýz¶®,¶­ïåuGaB!—÷³9^` Ê¢å0i}º¬ÀP˜M¶}¯G@©±P>äš8S«+;*Šxy2adXÆ5°)X6°@JKµ£|âT¹Bª•‹k„é Ãiþù@ïZ¨£±*à† ô© õš¯`³j€³ ;럓prØ)€ç˜¼‰g(Ö§' ¤ô )ék2’+ÿÔЂÔQú,#mv•«°¶§Ö;©Ä9.:(¨‡õ é}Ëe­§Ö¶=U(Š .9êI¸'å`\Ëòoª{ j5 ƒîd<¨0…w¤&¸6´’Ú-FÃNƒ* ¹hà Struts Framework libstruts1.2-java-1.2.9/contrib/struts-el/doc/proposals/release-plan-1.0.1.xml0000644000175000017500000000537310404045254027410 0ustar arnaudarnaud00000000000000 Martin F N Cooper Struts Release Plan (Version 1.0.1)

$Id: release-plan-1.0.1.xml 54933 2004-10-16 17:04:52Z germuska $

The objective of the Struts 1.0.1 release is to provide an official release of all the bug fixes and documentation updates that have been made to the STRUTS_1_0_BRANCH branch since the release of Struts 1.0.

Since the release of Struts 1.0, a number of important bugs have been fixed, and some notable improvements have been made to the documentation. Currently, these updates are available only to those people who are willing to obtain the source code from CVS and build their own version of Struts. This release will make these updates available in an official distribution, thus making them available to a wider audience.

Therefore, the following release plan is proposed for Struts 1.0.1:

  • Code Freeze / Tag Date - Wednesday, November 21, 2001
  • Release Manager - Martin Cooper
  • Release Announcement - To the following mailing lists and web sites:
    • announcements@jakarta.apache.org
    • struts-dev@jakarta.apache.org
    • struts-user@jakarta.apache.org
    • jsp-interest@java.sun.com
    • servlet-interest@java.sun.com
    • http://www.freshmeat.net

Prior to the release of Struts 1.0.1, the following action items must be completed:

  • The Struts 1.0.1 Release Notes document shall be updated to describe substantial changes and improvements since the Struts 1.0 release, along with associated updates to the main Struts Documentation Application pages describing the new release.
  • All of the Struts example applications that are included with the release shall operate successfully in the following servlet containers:
  • A release vote shall take place on the struts-dev mailing list to approve this plan. The release vote MUST pass by "Majority Approval" of Struts committers.
libstruts1.2-java-1.2.9/contrib/struts-el/doc/proposals/release-plan-1.0b1.xml0000644000175000017500000000672410404045252027473 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Struts Release Plan (Version 1.0-beta-1)

$Id: release-plan-1.0b1.xml 54933 2004-10-16 17:04:52Z germuska $

The objective of the Struts 1.0-beta-1 release is to create a milestone release against which a final series of bug fixes and documentation updates can occur before a Struts 1.0 Final release is created.

The code base for Struts has been in an informal "feature freeze" for several weeks, while development focus has been on bug fixes and the completion of required documentation. Both of these goals have been substantially achieved, so it is time for a formal beta release - with the goal of moving quickly to a final Struts 1.0 release shortly thereafter, if no disabling defects are found.

Therefore, the following release plan is proposed for Struts 1.0-beta-1:

  • Code Freeze / Tag Date - Wednesday, February 21, 2001
  • Release Manager - Craig McClanahan
  • Release Announcement - To the following mailing lists and web sites:
    • ANNOUNCEMENTS@JAKARTA.APACHE.ORG
    • GENERAL@JAKARTA.APACHE.ORG
    • STRUTS-DEV@JAKARTA.APACHE.ORG
    • STRUTS-USER@JAKARTA.APACHE.ORG
    • JSP-INTEREST@JAVA.SUN.COM
    • SERVLET-INTEREST@JAVA.SUN.COM
    • http://www.freshmeat.net

Prior to the release of Struts 1.0-beta-1, the following action items must be completed:

  • All Bugzilla bug reports against Struts 1.0 nightly builds MUST be marked as "Resolved", with any of the legal Bugzilla resolutions (FIXED, INVALID, WONTFIX, LATER, REMIND, WORKSFORME).
  • Bug reports that are resolved as LATER or REMIND will include comments as to whether those specific issues will be dealt with in a subsequent 1.0 beta or final release, or whether they will be scheduled for consideration in a subsequent release time frame.
  • Any remaining items on the Struts 1.0 TODO list shall be completed.
  • The Struts 1.0 Release Notes document shall be updated to describe substantial changes and improvements since the Struts 0.5 release, along with associated updates to the main Struts Documentation Application pages describing the new release.
  • All of the Struts example applications that are included with the release shall operate successfully in the following servlet containers:
  • A release vote shall take place on the STRUTS-DEV mailing list to approve this plan. The release vote MUST pass by "Majority Approval" of Struts committers.
libstruts1.2-java-1.2.9/contrib/struts-el/doc/proposals/release-plan-1.1b1.xml0000644000175000017500000000652310404045252027471 0ustar arnaudarnaud00000000000000 Martin F N Cooper Struts Release Plan (Version 1.1b1)

$Id: release-plan-1.1b1.xml 54933 2004-10-16 17:04:52Z germuska $

The objective of the Struts 1.1 Beta 1 release is to create a milestone release against which a final series of bug fixes and documentation updates can occur before a Struts 1.1 Final release is created.

Many new features have been added to the nightly builds since the release of Struts 1.0, and many bugs have been fixed. Several of the new features are in high demand by current Struts users, and so it is time to start the process of making this new code base available as a formal release. The first step in this process is an initial beta release, with the goal of moving towards a release candidate and then a final Struts 1.1 release as soon as is practicable.

Therefore, the following release plan is proposed for Struts 1.1 Beta 1:

  • Code Freeze / Tag Date - Monday, March 18, 2002
  • Release Manager - Martin Cooper
  • Release Announcement - To the following mailing lists:
    • announcements@jakarta.apache.org
    • struts-dev@jakarta.apache.org
    • struts-user@jakarta.apache.org

Prior to the release of Struts 1.1 Beta 1, the following action items must be completed:

  • The Struts 1.1 Release Notes document shall be updated to describe substantial changes and improvements since the Struts 1.0.2 release, along with associated updates to the main Struts Documentation Application pages describing the new release.
  • All of the Struts example applications that are included with the release shall operate successfully in the following servlet containers:
  • A release vote shall take place on the STRUTS-DEV mailing list to approve this plan. The release vote MUST pass by "Majority Approval" of Struts committers.

Prior to the release of a subsequent Struts 1.1 release candidate, the following action items must be completed:

  • All Bugzilla bug reports against Struts 1.1 nightly builds MUST be marked as "Resolved", with any of the legal Bugzilla resolutions (FIXED, INVALID, WONTFIX, LATER, REMIND, WORKSFORME).
  • Bug reports that are resolved as LATER or REMIND will include comments as to whether those specific issues will be dealt with in a subsequent release candidate, or final release, or whether they will be scheduled for consideration in a subsequent release time frame.
libstruts1.2-java-1.2.9/contrib/struts-el/doc/proposals/todo-1.0.xml0000644000175000017500000000675210404045254025650 0ustar arnaudarnaud00000000000000 Craig R. McClanahan The Struts Project TODO List for Version 1.0

Application frameworks, like the applications we build with them, never seem to be completed. The following are the remaining work items before Version 1.0 of Struts can be released.

The TODO list tasks are divided into functional areas that correspond to the major components of the Struts Framework. References in square brackets are the Java package containing the corresponding source code.

Omnibus task list for items related to the Struts Documentation, which do not have direct relationships with code bases.

An example web application utilizing the Struts framework and custom tag library.

This is the core controller servlet, with support for the developer's action and form bean classes, plus the supporting data structures.

Review framework-wide use of features that have now been deprecated.

The Digester package supports scripted firing of "rules" based on matching a particular pattern of nested XML tags. Among the predefined rules that can be utilized are rules to create new objects, set bean properties from the contents of attributes, or call arbitrary methods with arguments based on the XML content being parsed. A common use for this technology (illustrated in the Struts ActionServlet), is parsing configuration files and building corresponding object trees.

This tag library contains basic tags useful in manipulating JavaBeans and their properties. It includes support for getting and setting bean properties using simple, nested, and subscripted accessor expressions.

This tag library contains tags useful in preparing web applications that use HTML forms as their primary mechanism for user data entry, as well as support for internationalized and localized applications.

This package contains a variety of utility classes useful within Struts as well as in stand-alone applications.

Update the filtering supported by BeanUtils.filter().

[STRUTS-DEV, Matthias Kerkhoff, 11/13/2000]
libstruts1.2-java-1.2.9/contrib/struts-el/doc/proposals/todo-1.1.xml0000644000175000017500000004731310404045252025645 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Features We'd Like To See - The Struts Project Wish List

Application frameworks, like the applications we build with them, never seem to be completed. The following major areas of improvement are being considered for implementation in a future version of Struts.

Which features are implemented first depends greatly on individual developers becoming involved in the process. Many key features in Struts grew out of code first distributed on the mailing list. If there is a feature here that you need, or already have, please start a thread and show us the code!

So, when is the next release coming out?

An external development that is likely to affect the development of Struts 1.1 will be the emerging Standard Tag Library, being produced under the Java Community Process. A very early release is now available at Jakarta Taglibs.

The existing Struts tags were used as input to the standardization process, but in the case where standard tags with similar functionality are adopted, we should migrate Struts tags to maintain maximum compatibility with the new standard library.

See also the Tiles, Validator, and Service Manager packages in the contrib folder.

The wish list tasks are divided into functional areas that correspond to the major components of the Struts Framework. References in square brackets are the Java package containing the corresponding source code. Listing a task here is not a guarantee that it will be present in the next release. Again, whether a wish becomes a feature depends on whether there are volunteers who choose to work on the task.

Omnibus task list for items related to the Struts Documentation, which do not have direct relationships with code bases.

Incorporate the Taglib documentation and Developer Guides into the User Guide, by including the source of these from their present locations. Revise TODO stylesheet to add Status and Source elements, and to support mailto links for volunteers in Assigned element. All elements should support hypertext links. Add support for "since" element for tracking changes to tags between versions. Area to post articles about contributions from Struts developers. Area to post a "choice" FAQ of truly common questions.

An example web application utilizing the Struts framework and custom tag library.

Use a "real" database of some sort (while still making Struts easy to install.

Ted Husted

Add support for switching Locales on the fly to the Struts example application.

Ted Husted

This is the core controller servlet, with support for the developer's action and form bean classes, plus the supporting data structures.

Create a mechanism by which business logic (now encoded in Action classes) can be subdivided into individual work Tasks that are combined according to configuration information (including flow control and iteration support) in the struts-config.xml file. Support for workflow processing would be provided by a set of standard Actions, and will offer an alternative mechanism (not a replacement of Actions) to organizing your business logic.

A Workflow Proposal is pending.

Craig Tataryn, Nic Hobbs

Add support for JavaBeans that include a PropertyEditor class for conversion to and from the string representation used in an HTML input field. This support should operate in a manner consistent with the way that standard JSP tags do in JSP 1.2.

Retrofit the Struts controller framework with supports for event generation (and the corresponding registration of listeners) for all interesting events created by the framework. The list of interesting events will undoubtedly be influenced by changes related to other work items on this list (such as workflow processing and standard validations), so work on this should be coordinated with those changes.

[STRUTS-DEV, Robert Leland, 10/10/2000] [STRUTS-DEV, David Geary, 12/20/2000] [STRUTS-USER, Ted Husted, 12/23/2000]

Begin adding design patterns and support for easy integration with Enterprise JavaBeans (EJBs) for encapsulation of business logic and application data.

Mike Schachter

Improve the current Struts support for generating no-cache headers to provide finer-grained, configurable control on a per-page basis.

[STRUTS-DEV, Hou Yunfeng, 10/07/2000] [STRUTS-DEV, Matthias Kerkhoff, 11/18/2000]

This tag library contains basic tags useful in manipulating JavaBeans and their properties. It includes support for getting and setting bean properties using simple, nested, and subscripted accessor expressions.

Update all of the relevant tags to include property accessor support using the syntax specified by the XPath standard (www.w3c.org).

Dave Bettin

Update all of the relevant tags to get and set attributes from a Java object that implements the XML Document Object Model, as well as from the current tree of JavaBean objects. How the underlying data object is stored should be transparent to page writers using these tags.

Dave Bettin

Update all of the relevant tags to get and set attributes from a JDBC RowSet (or ResultSet) object, as well as from XML DOM objects and the current tree of JavaBean objects. How the underlying data object is stored should be transparent to page writers using these tags.

Dave Bettin

Add the ability to use formatting patterns (suitably localized) for presenting numbers, dates, times, timestamps, and so on via formatted patterns.

[STRUTS-DEV, Oleg Alexeev, 10/27/2000] [STRUTS-USER, Ned Seagoon, 12/11/2000] [STRUTS-DEV, Ned Seagoon, 12/13/2000] [STRUTS-USER, Ned Seagoon, 01/04/2001]

Dave Bettin

This tag library contains tags useful in preparing web applications that use HTML forms as their primary mechanism for user data entry, as well as support for internationalized and localized applications.

Add a new tag that supports generation of groups of radio buttons.

[STRUTS-DEV, Wellington Silva, 08/28/2000]

Improve the mechanism by which you define values and corresponding labels for <html:options>.

[STRUTS-DEV, David Winterfeldt, 07/27/2000] [STRUTS-DEV, David Winterfeldt, 08/02/2000] [STRUTS-DEV, Andy Boyko, 11/15/2000] [STRUTS-DEV, Andy Boyko, 12/07/2000]

Support additional HTML 4.0.1 attributes (such as "disabled", "readonly", "wrap" on textarea) where appropriate.

[STRUTS-USER, , 08/23/2000]

Improve the ability to use the <logic:iterate> tag over a collection, and generate a set of input fields for each member of the collection (perhaps auto-generating a subscript?). A significant use case is master-detail relationships (say, a customer and their current orders) where you allow editing of any and all fields.

[STRUTS-USER, Lars, 12/06/2000] [STRUTS-USER, Chandan Kulkarni, 12/26/2000]

Create design patterns and improved internal support for forms that span multiple pages.

Nic Hobbs

This tag library provides mechanisms to conditionally process nested body content based on a variety of logical conditions.

Add "else" and "else if" constructs to the existing conditional tags, in some reasonable format.

Add conditional tags that emulate the "case" or "switch" capability of many programming languages.

NOTE: Pending the outcome of the JSPTL, this functionality will not be added to the Struts-Logic tags. However, a contributor taglib is available.

Niall Pemberton

Enhance <logic:iterate>, or provide a new tag, to iterate over multiple collections in parallel.

[STRUTS-DEV, Jeff R., 08/03/2000]

This tag library will contain tags useful in preparing web applications similar to those supported by the HTML tag library, but render output that is well-formed XML in accordance with WML specifications.

This potential new tag library provides access to facilities in the emerging XForms standards.

Consider how to support more generalized definitions of forms and their fields, perhaps based on emerging XForms standards.

This tag library will contain tags useful in preparing web applications similar to those supported by the HTML tag library, but render output that is well-formed XML in accordance with the XHTML 1.0 specification.

This package contains code generators and other tools that facilitate the creation of Struts-based applications. Further subdivision into specialized packages should be performed as appropriate.

Create a tool that takes an XML-based description of the properties of the form bean, and automatically generates the corresponding Java class.

A contributor extension is now available.

[STRUTS-DEV, Mark Wutka, 06/01/2000 and 06/16/2000]

Martin Cooper Ravindran Ramaiah

This package contains a variety of utility classes useful within Struts as well as in stand-alone applications.

Implementation of MessageResources and MessageResourcesFactory that loads message keys and strings from one or more XML resources or files.

[STRUTS-DEV, Scott Sayles, 01/07/2000]

Improve support in BeanUtils, ConvertUtils, and PropertyUtils for property values that implement Collection, List, or Set, treating them in a manner similar to the way that indexed or array-valued properties are handled.

[Bugzilla #640]

Unit test components compatible with the JUnit and Cactus testing frameworks, to test and validate internal APIs of the Struts framework. Volunteers will typically agree to develop tests for an entire package within the Java source code of Struts.

Unit tests for the org.apache.struts.action package.

Rob Leland

Unit tests for the org.apache.struts.actions package.

Unit tests for the org.apache.struts.taglib.bean package.

Unit tests for the org.apache.struts.taglib.html package.

Unit tests for the org.apache.struts.taglib.logic package.

Unit tests for the org.apache.struts.taglib.template package.

Unit tests for the org.apache.struts.taglib.upload package.

Unit tests for the org.apache.struts.util package.

This section is a catch-all for additional areas of functionality to be investigated for inclusion into Struts.

[STRUTS-DEV, Cedric Dumoulin, 10/03/2000] [STRUTS-DEV, Eric, 11/07/2000] [STRUTS-DEV, Phil Grimm, 11/22/2000] Ted Husted [STRUTS-DEV, David D'Orto, 12/11/2000]

A portion of the Struts web site, and file system, where individually contributed add-ons for Struts can be hosted and downloaded.

Detailed proposal with implementation plan.

[STRUTS-USER, Ned Seagoon, 12/22/2000]

Ted Husted
libstruts1.2-java-1.2.9/contrib/struts-el/doc/proposals/workflow.xml0000644000175000017500000004337510404045252026261 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Proposal - Workflow Management System

Struts 1.0 has become an increasingly popular platform for constructing web applications based on a Model-View-Controller type design pattern (also known as the Front Controller pattern. It has achieved this popularity for many reasons, but key among them have been:

  • The simplicity of the basic organizational principles (once you understand them)
  • The principle of logical naming to assist in isolating the view layer and the model layer, so that changes in one do not have to impact the other
  • A rich set of tools to assist in creating pages with dynamic content exposed by the model layer through JavaBeans

One consequence of the original Struts design, however, is that the framework does not provide much assistance in organizing business transactions that require more than one interaction with the user (i.e. they span more than one JSP page and/or Action). Applications are left to manage navigation issues, as well as deal with ActionForms whose logical contents crosses page boundaries.

The original Struts design materially assists page designers in creating dynamic pages, while protecting them from having to be very concerned with the business logic -- other than the names of the JavaBeans used to communicate model layer data to the presentation layer. However, Struts 1.0 still requires a Java developer to be involved on the business logic side (even if all of the functional logic is already available in Java classes) in order to create the Action classes.

The purpose of this Workflow Management System proposal is to address some of these consequences. In particular, it intends to address the following set of goals:

  • Create a means where multiple-user-interaction business processes can be configured (scripted), including support for conditional processing and branching.
  • Support scripting elements that lets business application experts, who are not necessarily Java developers, can integrate pre-existing business functionality that is available as public methods on arbitrary Java classes.
  • Assist page designers in creating the user interface elements that correspond to navigation links within, or between, work flows.

To give a flavor of what scripted workflow activities might look like, it is useful to consider some possible use case scenarios. The syntax that is shown for the examples should be considered as illustrative of what should be possible, rather than normative. No rigorous attempt has been made to guarantee consistency between (or even within) these examples.

The example application included with Struts (like many other web applications) uses application-managed security, including a logon form. Consider that a business logic bean might be available (in some scope under key authenticator) that knows how to authenticate users given a username and password. It could be utilized to script application logon like this:

<activity id="Application Logon">

  <-- Display the logon form (web framework independent) -->
  <web:forward id="display" page="/logon.jsp"/>

  <-- Authenticate the username and password, returning a Principal
      if accepted, or null if not -->
  <web:set  name="username" value="$parameter:username"/>
  <web:set  name="password" value="$parameter:password"/>
  <core:invoke bean="authenticator" method="authenticate">
    <core:param type="java.lang.String" value="$username"/>
    <core:param type="java.lang.String" value="$password"/>
    <core:return name="principal"/>
  </core:invoke>

  <-- If no Principal was returned, branch back to the logon form -->
  <core:if expr="$principal == null">
    <web:set name="error" value="$messages.lookup('invalid.logon')"/>
    <core:branch idref="display"/>
  </core:if>

  <-- Exit to the "Main Menu" workflow -->
  <core:goto name="Main Menu"/>

</activity>

Many complex data entry operations can be simplified (from the user's point of view) by dividing them up into a series of simple dialog pages that ask a few (often one) question that leads ultimately to a completed set of information required to process a request. In many cases, each page of the interaction will have navigation controls so that the user can short cut to immediate execution, or cancel the entire interaction. Such an interaction might be modelled like this:

<activity id="Simple Wizard Application">

  <!-- Display the first page of the interation -->
  <!-- (Using Struts-specific logical-to-physical mapping) -->
  <struts:forward id="page1" name="Simple Wizard Page 1">

  <!-- Process navigation input from the first page -->
  <!-- (Can do something much like this framework-independently too) -->
  <struts:navigate>
    <struts:branch control="CANCEL" idref="cancel"/>
    <struts:branch control="FINISH" idref="finish"/>
    <struts:branch control="NEXT"   idref="page2"/>
  </struts:navigate>

  <!-- Display the second page of the interation -->
  <struts:forward id="page2" name="Simple Wizard Page 2">

  <!-- Process navigation input from the second page -->
  <struts:navigate>
    <struts:branch control="CANCEL" idref="cancel"/>
    <struts:branch control="FINISH" idref="finish"/>
    <struts:branch control="NEXT"   idref="page3"/>
    <struts:branch control="PREV"   idref="page1"/>
  </struts:navigate>

  <!-- Display the third page of the interation -->
  <struts:forward id="page3" name="Simple Wizard Page 3">

  <!-- Process navigation input from the third page -->
  <struts:navigate>
    <struts:branch control="CANCEL" idref="cancel"/>
    <struts:branch control="FINISH" idref="finish"/>
    <struts:branch control="PREV"   idref="page2"/>
  </struts:navigate>

  <!-- Process the FINISH navigation control as appropriate -->
  <xxx:yyy id="finish" .../>
  <core:goto name="Main Menu"/>

  <!-- Process the CANCEL navigation control as appropriate -->
  <xxx:yyy id="cancel" .../>
  <core:goto name="Main Menu"/>

</activity>

Not illustrated above, but also interesting to explore, would be the situation where choices on one page affect whether some pages in the overall flow might be skipped.

Workflow system capabilities will be exposed to applications through Java APIs that represent both the static description of particular activities and the dynamic current state of a computation. Object factory and pluggable implementation patterns shall be used where appropriate to maximize the generality and flexibility of the system.

The following classes represent the primary components of the workflow management system:

Registry - Collection into which multiple Process and Activity static descriptions can be stored and retrieved by String-valued keys.

Process - The static description of a tree of business activities that are executed in a nested fashion, often by separate individuals (or application systems).

Activity - The static description of a sequence of Steps that are generally executed by a single individual (or application system), within a reasonably short period of time.

Step - The static description of an individual task to be performed as a discrete, indivisible, unit. Steps can also be nested inside other steps, to provide for looping and conditional processing. A rich set of built-in Step implementations shall be provided (including powerful capabilities such as the execution of an abitrary method on an arbitrary Java object), and mechanisms to extend the set of supported Step implementations allows arbitrary extensibility.

Context - The dynamic state of a computation through an Activity (or a set of nested Activities), including provision of storage space for JavaBeans produced and consumed by other Steps. Contexts keep track of the current Step being executed, so that activity processing can be suspended and resumed later.

Scope - A Map into which arbitrary Java objects can stored and retrieved by String-valued keys. Context support a number of individual Scopes, each of which can be plugged in from application logic, to provide integration into existing application functionality. For example, in a web application imlementation, Scopes will generally be mapped directly to request attributes, session attributes, and servlet context attributes as provided by the Servlet API.

A rich variety of built-in Step implementations (and corresponding XML elements in specified namespaces) will be provided as part of the basic workflow engine, and as part of the associated Struts integration of this engine.

Bean Interaction - The ability to get and set JavaBeans in arbitrary Scopes (mapped via the Context to real collections of objects).

Control Flow - Conditionals and looping, where control flow Steps can contain nested sets of Steps to an arbitrary degree.

Method Execution - Execute arbitrary public methods of beans stored in some Scope, passing specified arguments (expressions or bean references) and returning the method's result (if any) to a named bean in some Scope. To maximize usefulness of the workflow system in composing applications, no restrictions should be placed on the object types these Steps can interact with.

Activity Management - GOTO a named Activity (exiting the current one), CALL a named Activity (resuming the current one when the called Activity returns, RETURN from a called Activity, EXIT the Activity system.

User Interaction - Suspend workflow execution to interact with the user in some application specific way. For example, a web application would display a page and wait for input to be submitted before resuming the workflow.

Specialized Processing - Prebuilt Steps for common processing functions such as XSLT transformations, performing arbitrary SQL queries, sending mail, and so on.

The implementation of this proposal will be divided into three major development layers:

  • Core workflow management system capabilities and built in Step implementations that are independent of application environment. [Code in jakarta-commons]
  • Specialized implementation of workflow management system components that integrate with the Servlet API in a manner that is independent of any specific application framework. [Code in jakarta-commons]
  • Specialized implementation of workflow management system components that is tightly integrated with Struts's internal architecture and custom tag libraries. [Code in jakarta-struts]

The workflow management system will support the general concept of Scopes in which beans can be stashed, with pluggable implementations for integration into different working environments. None of the APIs in the workflow engine itself will have any reference to the web layer (i.e. no imports of javax.servlet.*).

Suitable object factory and pluggability APIs will be included to guarantee extensibility of the basic framework.

Scripting of business transactions will be codified in XML documents that conform to an appropriate DTD and/or schema. The XML technology that is used will facilitate extensible definitions of Steps and other components, in both the XML description of these components and in the set of Java objects that implements them.

When designing the detailed syntax of the XML representation of Steps, consider whether it is feasible for advanced development tools to "compile" activities into individual classes to optimize overall performance.

When designing the detailed syntax of the XML representation of Steps, consideration should be given to emulating the syntax of other XML applications that are similar in spirit or detail to the concepts of scripting a business transaction. Useful models to consider include:

  • XSL Transformations (XSLT) - Includes control flow mechanisms that are becoming widely known and understood, which could be mimiced.
  • JSP Standard Tag Library (Early Access) - The design goals for many of the JSP custom tags in this library (produced by the JSR-052 expert group under the Java Community Process) are similar enough to provide a useful model for conditionals, looping, and interaction with objects in arbitrary scopes.

To maximize the usefulness of built-in actions, an expression language that knows how to manipulate objects in the Scopes associated with the current Context will need to be supported. Useful models to consider include:

  • XML Path Language (XPath) - Will be familar to XML-oriented application developers because it is used throughout the suite of XML specifications.
  • JavaScript like expression languages - Will be familiar to page developers (as well as Struts developers familiar with the nested and indexed property accessor syntax of many Struts tags).

From the workflow script developer's point of view, XML namespaces will be used to introduce extended sets of Step implementations. There will need to be mechanisms to map a particular namespace to a set of legal XML elements (within that namespace) and corresponding Java classes that provide the functionality for those Steps.

The web layer integration will include a mechanism to map scopes (from the workflow perspective) into the standard request, session, and application scopes of the web layer. Thus, workflow scripts will be able to place beans in appropriate scopes such that JSP pages can directly pull that data into the presentation, much as Struts Actions (and the business logic classes that are called by those Actions) can place beans there in a Struts 1.0 based application. Utilizing these capabilities, application developers will be able to "script" the business logic requirements of many applications, by combining functional logic already available as methods on business logic beans, without having to involve Java programmers to create new Actions (or otherwise synthesize business logic out of the constituent pieces).

Components in the web layer integration may import APIs from the Servlet and JSP specifications, but not from any application specific framework. Framework-specific integration will occur on top of the generic web layer integration.

In addition, the Struts integration will include a small custom tag library will be included, so that page developers can easily create navigational links and controls. Examples of such controls include links to the "next", "previous", and "finish" pages of a wizard dialog, a "cancel" button to exit a workflow early, or an "invoke" button to invoke a new workflow as a subroutine, and then return to the current step of the original workflow. Utilizing these capabilities, page developers can create the individual visible pieces of a work flow dialog, without having to be involved in navigational complexities.

libstruts1.2-java-1.2.9/contrib/struts-el/doc/stylesheets/0000755000175000017500000000000010423130300024171 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/doc/stylesheets/proposals.xsl0000644000175000017500000002255610404045252026767 0ustar arnaudarnaud00000000000000 <xsl:value-of select="properties/title"/> <xsl:value-of select="body/title"/> <xsl:value-of select="$project/title"/>


Struts Nightly Build
Copyright (c) 2000-2004, The Apache Software Foundation
Tag Name Description
-
Attribute Name Description
[Required] [RT Expr]


Description Volunteer
.
libstruts1.2-java-1.2.9/contrib/struts-el/doc/stylesheets/struts.xsl0000644000175000017500000002352710404045252026310 0ustar arnaudarnaud00000000000000 <xsl:value-of select="properties/title"/> <xsl:value-of select="body/title"/> <xsl:value-of select="$project/title"/>


Copyright (c) 2000-2004, The Apache Software Foundation
Tag Name Description
-
Attribute Name Description
[Required] [RT Expr]


Description Volunteer
.
libstruts1.2-java-1.2.9/contrib/struts-el/doc/stylesheets/tld.xsl0000644000175000017500000000443610404045252025525 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/contrib/struts-el/doc/stylesheets/userGuide.xsl0000644000175000017500000002017010404045254026671 0ustar arnaudarnaud00000000000000 <xsl:value-of select="properties/title"/> <xsl:value-of select="body/title"/> <xsl:value-of select="$project/title"/>


Copyright (c) 2000-2004, The Apache Software Foundation
Tag Name Description
-
Attribute Name Description
[Required] [RT Expr]
libstruts1.2-java-1.2.9/contrib/struts-el/doc/userGuide/0000755000175000017500000000000010423130300023551 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/doc/userGuide/struts-bean-el.xml0000644000175000017500000004525410404045252027164 0ustar arnaudarnaud00000000000000 Craig R. McClanahan David M. Karr The Struts Framework Project - JSTL Integration - Bean Tags 1.2 1.1 bean Struts Bean Tags http://struts.apache.org/tags-bean-el

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.

Many of the tags in this tag library will throw a JspException 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 <%@ page %> 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 org.apache.struts.action.EXCEPTION.

If you are viewing this page from within the Struts Documentation Application (or online at http://jakarta.apache.org/struts), you can learn more about using these tags in the Bean Tags Developer's Guide.

include Load the response from a dynamic application request and make it available as a bean. org.apache.strutsel.taglib.bean.ELIncludeTag org.apache.struts.taglib.bean.IncludeTei empty

Perform an internal dispatch to the specified application component (or external URL) and make the response data from that request available as a scoped variable of type String. This tag has a function similar to that of the standard <jsp:include> 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).

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):

  • forward - Use the value of this attribute as the name of a global ActionForward to be looked up, and use the module-relative or context-relative URI found there.
  • href - Use the value of this attribute unchanged (since this might link to a resource external to the application, the session identifier is not included.
  • page - Use the value of this attribute as an module-relative URI to the desired resource.

WARNING - Accessing resources protected by security constraints, or resources under the /WEB-INF subdirectory, with this tag is not supported. Consider using the <jsp:include ... flush="false"> tag on a JSP 1.2 or later container, or the <c:import> tag from the JSP Standard Tag Library to accomplish this.

anchor false true

Optional anchor tag ("#xxx") to be added to the generated hyperlink. Specify this value without any "#" character.

forward false true

Logical name of a global ActionForward that contains the actual content-relative URI of the resource to be included.

href false true

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 not be included in the request.

id true false

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.

name false true

Module-relative name (starting with a '/') of the web application resource to be dispatched, and whose response data is to be made available as a bean.

Use the "page" attribute instead.
page false true

Module-relative URI (starting with a '/') of the web application resource to be included.

transaction false true

Set to true if you want the current transaction control token included in the generated URL for this include.

message Render an internationalized message string to the response. org.apache.strutsel.taglib.bean.ELMessageTag empty

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.

The message key may be specified directly, using the key attribute, or indirectly, using the name and property attributes to obtain it from a bean.

JSTL: The equivalent JSTL tag is <fmt:message>. For example,
<fmt:message key="my.msg.key"> <fmt:param value="replacement text"/> </fmt:message>

arg0 false true

First parametric replacement value, if any.

arg1 false true

Second parametric replacement value, if any.

arg2 false true

Third parametric replacement value, if any.

arg3 false true

Fourth parametric replacement value, if any.

arg4 false true

Fifth parametric replacement value, if any.

bundle false true

The name of the application scope bean under which the MessageResources object containing our messages is stored.

Globals.MESSAGES_KEY
key false true

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 name and property attributes.

locale false true

The name of the session scope bean under which our currently selected Locale object is stored.

Globals.LOCALE_KEY
name false true

Specifies the attribute name of the bean whose property is accessed to retrieve the value specified by property (if specified). If property is not specified, the value of this bean itself will be used as the message resource key.

property false true

Specifies the name of the property to be accessed on the bean specified by name. This value may be a simple, indexed, or nested property reference expression. If not specified, the value of the bean identified by name will itself be used as the message resource key.

scope false true

Specifies the variable scope searched to retrieve the bean specified by name. If not specified, the default rules applied by PageContext.findAttribute() are applied.

page Expose a specified item from the page context as a bean. org.apache.strutsel.taglib.bean.ELPageTag empty

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.

If a problem occurs while retrieving the specified configuration object, a request time exception will be thrown.

id true false

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.

property true true

Name of the property from our page context to be retrieved and exposed. Must be one of application, config, request, response, or session.

resource Load a web application resource and make it available as a bean. org.apache.strutsel.taglib.bean.ELResourceTag org.apache.struts.taglib.bean.ResourceTei empty

Retrieve the value of the specified web application resource, and make it available as either a InputStream or a String, depending on the value of the input attribute.

If a problem occurs while retrieving the specified resource, a request time exception will be thrown.

id true false

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.

input false true

If any arbitrary value for this attribute is specified, the resource will be made available as an InputStream. If this attribute is not specified, the resource will be made available as a String.

name true true

Module-relative name (starting with a '/') of the web application resource to be loaded and made available.

size Define a bean containing the number of elements in a Collection or Map. org.apache.strutsel.taglib.bean.ELSizeTag org.apache.struts.taglib.bean.SizeTei empty

Given a reference to an array, Collection or Map, creates a new bean, of type java.lang.Integer, 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:

  • As a runtime expression specified as the value of the collection attribute.
  • As a JSP bean specified by the name attribute.
  • As the property, specified by the property attribute, of the JSP bean specified by the name attribute.
collection false true

A runtime expression that evaluates to an array, a Collection, or a Map.

id true false

The name of a page scope JSP bean, of type java.lang.Integer, that will be created to contain the size of the underlying collection being counted.

name false true

The name of the JSP bean (optionally constrained to the scope specified by the scope attribute) that contains the collection to be counted (if property is not specified), or whose property getter is called to return the collection to be counted (if property is specified.

property false true

The name of the property, of the bean specified by the name attribute, whose getter method will return the collection to be counted.

scope false true

The bean scope within which to search for the JSP bean specified by the name attribute. If not specified, the available scopes are searched in ascending sequence.

struts Expose a named Struts internal configuration object as a bean. org.apache.strutsel.taglib.bean.ELStrutsTag org.apache.struts.taglib.bean.StrutsTei empty

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 formBean, forward, and mapping attributes to select the configuration object to be exposed.

If a problem occurs while retrieving the specified configuration object, a request time exception will be thrown.

id true false

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.

formBean false true

Specifies the name of the Struts ActionFormBean definition object to be exposed.

forward false true

Specifies the name of the global Struts ActionForward definition object to be exposed.

mapping false true

Specifies the matching path of the Struts ActionMapping definition object to be exposed.

libstruts1.2-java-1.2.9/contrib/struts-el/doc/userGuide/struts-html-el.xml0000644000175000017500000113006510404045252027217 0ustar arnaudarnaud00000000000000 Mike Schachter David M. Karr The Struts Framework Project - JSTL Integration - HTML Tags 1.2 1.1 html Page Construction Tags http://struts.apache.org/tags-html-el

This taglib contains tags used to create struts input forms, as well as other tags generally useful in the creation of HTML-based user interfaces.

Many of the tags in this tag library will throw a JspException 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 <%@ page %> 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 org.apache.struts.action.EXCEPTION.

base Render an HTML <base> Element org.apache.strutsel.taglib.html.ELBaseTag empty

Renders an HTML <base> element with an href attribute pointing to the absolute location of the enclosing JSP page. This tag is valid only when nested inside an HTML <head> element.

This tag is useful because it allows you to use relative URL references in the page that are calculated based on the URL of the page itself, rather than the URL to which the most recent submit took place (which is where the browser would normally resolve relative references against).

target false true

The window target for this base reference.

server false true

The server name to use instead of request.getServerName().

button Render A Button Input Field org.apache.strutsel.taglib.html.ELButtonTag

Renders an HTML <input> element of type button, populated from the specified value or the content of this tag body. This tag is only valid when nested inside a form tag body.

If a graphical button is needed (a button with an image), then the image tag is more appropriate.

accesskey false true The keyboard character used to move focus immediately to this element. alt false true

The alternate text for this element.

altKey false true

The message resources key of the alternate text for this element.

bundle false true The servlet context attributes key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. Struts 1.2.5 disabled false true Set to true if this input field should be disabled. indexed false true Valid only inside of logic-el:iterate or c:forEach tags. If true then name of the html tag will be rendered as "id[34].propertyName". Number in brackets will be generated for every iteration and taken from ancestor iteration tag. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. property true true Name of the request parameter that will be included with this submission, set to the specified value. style false true CSS styles to be applied to this HTML element. styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). tabindex false true The tab order (ascending positive integers) for this element. title false true

The advisory title for this element.

titleKey false true

The message resources key for the advisory title for this element.

value false true Value of the label to be placed on this button. This value will also be submitted as the value of the specified request parameter. [Body of this tag (if any), or "Click"]
cancel Render a Cancel Button org.apache.strutsel.taglib.html.ELCancelTag

Renders an HTML <input> element of type submit. This tag is only valid when nested inside a form tag body. Pressing of this submit button causes the action servlet to bypass calling the associated form bean validate() method. The action is called normally.

accesskey false true The keyboard character used to move focus immediately to this element. alt false true

The alternate text for this element.

altKey false true

The message resources key of the alternate text for this element.

bundle false true The servlet context attributes key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. Struts 1.2.5 disabled false true Set to true if this input field should be disabled. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. property false true Name of the request parameter that will be included with this submission, set to the specified value. WARNING - If you set this attribute to a value other than the default, this will NOT be recognized as the cancel key by the Struts controller servlet or the Action.isCancelled() method. You will need to do your own cancel detection. style false true CSS styles to be applied to this HTML element. styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). tabindex false true The tab order (ascending positive integers) for this element. title false true

The advisory title for this element.

titleKey false true

The message resources key for the advisory title for this element.

value false true Value of the label to be placed on this button. This value will also be submitted as the value of the specified request parameter. [Body of this tag (if any), or "Cancel"]
checkbox Render A Checkbox Input Field org.apache.strutsel.taglib.html.ELCheckboxTag

Renders an HTML <input> element of type checkbox, populated from the specified value or the specified property of the bean associated with our current form. This tag is only valid when nested inside a form tag body.

NOTE: The underlying property value associated with this field should be of type boolean, and any value you specify should correspond to one of the Strings that indicate a true value ("true", "yes", or "on"). If you wish to utilize a set of related String values, consider using the multibox tag.

WARNING: In order to correctly recognize unchecked checkboxes, the ActionForm bean associated with this form must include a statement setting the corresponding boolean property to false in the reset() method.

accesskey false true The keyboard character used to move focus immediately to this element. alt false true

The alternate text for this element.

altKey false true

The message resources key of the alternate text for this element.

bundle false true The servlet context attributes key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. Struts 1.2.5 disabled false true Set to true if this input field should be disabled. errorKey false true

Name of the request scope bean under which our error messages have been stored. If not present, the name specified by the Globals.ERROR_KEY constant string will be used.

N.B. This is used in conjunction with the errorStyle, errorStyleClass and errorStyleId attributes and should be set to the same value as the name attribute on the <html:errors/> tag.

Struts 1.2.5
errorStyle false true

CSS styles to be applied to this HTML element if an error exists for it.

N.B. If present, this overrides the style attribute in the event of an error.

Struts 1.2.5
errorStyleClass false true

CSS stylesheet class to be applied to this HTML element if an error exists for it (renders a "class" attribute).

N.B. If present, this overrides the styleClass attribute in the event of an error.

Struts 1.2.5
errorStyleId false true

Identifier to be assigned to this HTML element if an error exists for it (renders an "id" attribute).

N.B. If present, this overrides the styleId attribute in the event of an error.

Struts 1.2.5
indexed false true Valid only inside of logic:iterate tag. If true then name of the html tag will be rendered as "id[34].propertyName". Number in brackets will be generated for every iteration and taken from ancestor logic:iterate tag. name false true The attribute name of the bean whose properties are consulted when rendering the current value of this input field. If not specified, the bean associated with the form tag we are nested within is utilized. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. property true true Name of the request parameter that will be included with this submission, set to the specified value. style false true

CSS styles to be applied to this HTML element.

N.B. If present, the errorStyle overrides this attribute in the event of an error for the element.

styleClass false true

CSS stylesheet class to be applied to this HTML element (renders a "class" attribute).

N.B. If present, the errorStyleClass overrides this attribute in the event of an error for the element.

styleId false true

Identifier to be assigned to this HTML element (renders an "id" attribute).

N.B. If present, the errorStyleId overrides this attribute in the event of an error for the element.

tabindex false true The tab order (ascending positive integers) for this element. title false true

The advisory title for this element.

titleKey false true

The message resources key for the advisory title for this element.

value false true The value to be transmitted if this checkbox is checked when the form is submitted. If not specified, the value "on" will be returned.
errors Conditionally display a set of accumulated error messages. org.apache.strutsel.taglib.html.ELErrorsTag empty

Displays a set of error messages prepared by a business logic component and stored as an ActionErrors object, a String, or a String array in request scope. If such a bean is not found, nothing will be rendered.

In order to use this tag successfully, you must have defined an application scope MessageResources bean under the default attribute name, with optional definitions of message keys specified in the following attributes:

  • header - Text that will be rendered before the error messages list. Typically, this message text will end with <ul> to start the error messages list (default "errors.header").
  • footer - Text that will be rendered after the error messages list. Typically, this message text will begin with </ul> to end the error messages list (default "errors.footer").
  • prefix - Text that will be rendered before each individual error in the list (default "errors.prefix").
  • suffix - Text that will be rendered after each individual error in the list (default "errors.suffix").
bundle false true The servlet context attribute key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. footer false true This value is an optional message resource key that will be printed after the iteration of error messages has finished. Defaults to "errors.footer" if not specified. Struts 1.2.5 header false true This value is an optional message resource key that will be printed before the iteration of error messages begins. Defaults to "errors.header" if not specified. Struts 1.2.5 locale false true The session attribute key for the Locale used to select messages to be displayed. If not specified, defaults to the Struts standard value. name false true Name of the request scope bean under which our error messages have been stored. If not present, the name specified by the Globals.ERROR_KEY constant string will be used. prefix false true This value is an optional message resource key that will be printed before an error message. Defaults to "errors.prefix" if not specified. Struts 1.2.5 property false true Name of the property for which error messages should be displayed. If not specified, all error messages (regardless of property) are displayed. suffix false true This value is an optional message resource key that will be printed after an error message. Defaults to "errors.suffix" if not specified. Struts 1.2.5
file Render A File Select Input Field org.apache.strutsel.taglib.html.ELFileTag

Renders an HTML <input> element of type file, defaulting to the specified value or the specified property of the bean associated with our current form. This tag is only valid when nested inside a form tag body.

As with the corresponding HTML <input> element, the enclosing form element must specify "POST" for the method attribute, and "multipart/form-data" for the enctype attribute. For example:

    <html:form method="POST" enctype="multipart/form-data">
        <html:file property="theFile" />
    </html:form>

WARNING: In order to correctly recognize uploaded files, the ActionForm bean associated with this form must include a statement setting the corresponding org.apache.struts.upload.FormFile property to null in the reset() method.

accesskey false true The keyboard character used to move focus immediately to this element. accept false true Comma-delimited set of content types that the server you submit to knows how to process. This list can be used by the client browser to limit the set of file options that is made available for selection. If not specified, no content type list will be sent. alt false true

The alternate text for this element.

altKey false true

The message resources key of the alternate text for this element.

bundle false true The servlet context attributes key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. Struts 1.2.5 disabled false true Set to true if this input field should be disabled. errorKey false true

Name of the request scope bean under which our error messages have been stored. If not present, the name specified by the Globals.ERROR_KEY constant string will be used.

N.B. This is used in conjunction with the errorStyle, errorStyleClass and errorStyleId attributes and should be set to the same value as the name attribute on the <html:errors/> tag.

Struts 1.2.5
errorStyle false true

CSS styles to be applied to this HTML element if an error exists for it.

N.B. If present, this overrides the style attribute in the event of an error.

Struts 1.2.5
errorStyleClass false true

CSS stylesheet class to be applied to this HTML element if an error exists for it (renders a "class" attribute).

N.B. If present, this overrides the styleClass attribute in the event of an error.

Struts 1.2.5
errorStyleId false true

Identifier to be assigned to this HTML element if an error exists for it (renders an "id" attribute).

N.B. If present, this overrides the styleId attribute in the event of an error.

Struts 1.2.5
indexed false true Valid only inside of logic-el:iterate or c:forEach tags. If true then name of the html tag will be rendered as "id[34].propertyName". Number in brackets will be generated for every iteration and taken from ancestor iteration tag. maxlength false true Maximum number of input characters to accept. This is ignored by most browsers. [No limit] name false true The attribute name of the bean whose properties are consulted when rendering the current value of this input field. If not specified, the bean associated with the form tag we are nested within is utilized. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. property true true Name of the request parameter that will be included with this submission, set to the specified value. size false true Size of the file selection box to be displayed. style false true

CSS styles to be applied to this HTML element.

N.B. If present, the errorStyle overrides this attribute in the event of an error for the element.

styleClass false true

CSS stylesheet class to be applied to this HTML element (renders a "class" attribute).

N.B. If present, the errorStyleClass overrides this attribute in the event of an error for the element.

styleId false true

Identifier to be assigned to this HTML element (renders an "id" attribute).

N.B. If present, the errorStyleId overrides this attribute in the event of an error for the element.

tabindex false true The tab order (ascending positive integers) for this element. title false true

The advisory title for this element.

titleKey false true

The message resources key for the advisory title for this element.

value false true

NOTE: When setting this to some value, whether intentional or as the result (for example) of validation errors forcing the user back to the original jsp, this value is ignored by most browsers (for security reasons). This means that your users will have to re-select any previously selected files when submitting the form. Opera web browser will prompt the user so they have a chance to abort the submit.

Value to which this field should be initialized. [Use the corresponding bean property value or body content (if any) if property is not specified]
form Define An Input Form org.apache.strutsel.taglib.html.ELFormTag JSP

Renders an HTML <form> element whose contents are described by the body content of this tag. The form implicitly interacts with the specified request scope or session scope bean to populate the input fields with the current property values from the bean.

The form bean is located, and created if necessary, based on the form bean specification for the associated ActionMapping.

action true true

The URL to which this form will be submitted. This value is also used to select the ActionMapping we are assumed to be processing, from which we can identify the appropriate form bean and scope.

If you are using extension mapping for selecting the controller servlet, this value should be equal to the path attribute of the corresponding <action> element, optionally followed by the correct extension suffix.

If you are using path mapping to select the controller servlet, this value should be exactly equal to the path attribute of the corresponding <action> element.

acceptCharset false true The list of character encodings for input data that the server should accept. Struts 1.2.2 disabled false true Set to true if the Form's input fields should be disabled. Struts 1.2.7 enctype false true The content encoding to be used to submit this form, if the method is POST. This must be set to "multipart/form-data" if you are using the file tag to enable file upload. If not specified, the browser default (normally "application/x-www-form-urlencoded") is used. focus false true The field name (among the fields on this form) to which initial focus will be assigned with a JavaScript function. If not specified, no special JavaScript for this purpose will be rendered. focusIndex false true If the focus field is a field array, such as a radio button group, you can specify the index in the array to receive focus. Struts 1.1 method false true The HTTP method that will be used to submit this request (GET, POST). [POST] onreset false true JavaScript event handler executed if the form is reset. onsubmit false true JavaScript event handler executed if the form is submitted. readonly false true Set to true if the Form's input fields should be read only. Struts 1.2.7 scriptLanguage false true The form's focus <script> element will not contain a language attribute when this is set to false. The default is true but this property is ignored in XHMTL mode. Struts 1.2 style false true CSS styles to be applied to this HTML element. styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). target false true Window target to which this form is submitted, such as for use in framed presentations.
frame Render an HTML frame element org.apache.strutsel.taglib.html.ELFrameTag

Renders an HTML <frame> element with processing for the src attribute that is identical to that performed by the <html:link> tag for the href attribute. URL rewriting will be applied automatically, to maintain session state in the absence of cookies.

The base URL for this frame is calculated based on which of the following attributes you specify (you must specify exactly one of them):

  • forward - Use the value of this attribute as the name of a global ActionForward to be looked up, and use the module-relative or context-relative URI found there.
  • href - Use the value of this attribute unchanged.
  • page - Use the value of this attribute as a module-relative URI, and generate a server-relative URI by including the context path and application prefix.
  • action - Use the value of this attribute as the logical name of a global Action that contains the actual content-relative URI of the destination of this transfer.

Normally, the hyperlink 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 paramId attribute (and its associated attributes to select the value), or specify the name (and optional property) attributes to select a java.util.Map bean that contains one or more parameter ids and corresponding values.

To specify a single parameter, use the paramId attribute to define the name of the request parameter to be submitted. To specify the corresponding value, use one of the following approaches:

  • Specify only the paramName attribute - The named JSP bean (optionally scoped by the value of the paramScope attribute) must identify a value that can be converted to a String.
  • Specify both the paramName and paramProperty attributes - The specified property getter method will be called on the JSP bean identified by the paramName (and optional paramScope) attributes, in order to select a value that can be converted to a String.

If you prefer to specify a java.util.Map that contains all of the request parameters to be added to the hyperlink, use one of the following techniques:

  • Specify only the name attribute - The named JSP bean (optionally scoped by the value of the scope attribute) must identify a java.util.Map containing the parameters.
  • Specify both name and property attributes - The specified property getter method will be called on the bean identified by the name (and optional scope) attributes, in order to return the java.util.Map containing the parameters.

As the Map 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), or an object whose toString() method will be called. If a String array is specified, more than one value for the same query parameter name will be created.

Additionally, you can request that the current transaction control token, if any, be included in the generated hyperlink by setting the transaction attribute to true. You can also request that an anchor ("#xxx") be added to the end of the URL that is created by any of the above mechanisms, by using the anchor attribute.

bundle false true The servlet context attributes key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. Struts 1.2.5 action false true

Logical name of a global Action 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 must specify exactly one of the action attribute, the forward attribute, the href attribute, or the page attribute.

Additionally, you can specify a module prefix for linking to other modules.

module false true

Prefix name of a Module that contains the action mapping for the Action that is specified by the action attribute. You must specify an action attribute for this to have an effect.

Note: Use "" to map to the default module.

anchor false true

Optional anchor tag ("#xxx") to be added to the generated hyperlink. Specify this value without any "#" character.

forward false true

Logical name of a global ActionForward 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 must specify exactly one of the action attribute, the forward attribute, the href attribute, or the page attribute.

frameborder false true

Should a frame border be generated around this frame (1) or not (0)?

frameName false true

Value for the name attribute of the rendered <frame> element.

href false true

The URL 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 must specify exactly one of the action attribute, the forward attribute, the href attribute, or the page attribute.

longdesc false true

URI of a long description of the frame. This description should supplement the short description provided by the title attribute, and may be particularly useful for non-visual user agents.

marginheight false true

The amount of space (in pixels) to be left between the frame's contents and its top and bottom margins.

marginwidth false true

The amount of space (in pixels) to be left between the frame's contents and its left and right margins.

name false true

The name of a JSP bean that contains a Map representing the query parameters (if property is not specified), or a JSP bean whose property getter is called to return a Map (if property is specified).

noresize false true

Should users be disallowed from resizing the frame? (true, false).

page false true

The module-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 must specify exactly one of the action attribute, the forward attribute, the href attribute, or the page attribute.

paramId false true

The name of the request parameter that will be dynamically added to the generated hyperlink. The corresponding value is defined by the paramName and (optional) paramProperty attributes, optionally scoped by the paramScope attribute

paramName false true

The name of a JSP bean that is a String containing the value for the request parameter named by paramId (if paramProperty is not specified), or a JSP bean whose property getter is called to return a String (if paramProperty is specified). The JSP bean is constrained to the bean scope specified by the paramScope property, if it is specified.

paramProperty false true

The name of a property of the bean specified by the paramName attribute, whose return value must be a String containing the value of the request parameter (named by the paramId attribute) that will be dynamically added to this hyperlink.

paramScope false true

The scope within which to search for the bean specified by the paramName attribute. If not specified, all scopes are searched.

property false true

The name of a property of the bean specified by the name attribute, whose return value must be a java.util.Map containing the query parameters to be added to the hyperlink. You must specify the name attribute if you specify this attribute.

scope false true

The scope within which to search for the bean specified by the name attribute. If not specified, all scopes are searched.

scrolling false true

Should scroll bars be created unconditionally (yes), never (no), or only when needed (auto)?

style false true

CSS styles to be applied to this element.

styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). title false true

The advisory title for this element.

titleKey false true

The message resources key for the advisory title for this element.

transaction false true

If set to true, any current transaction control token will be included in the generated hyperlink, so that it will pass an isTokenValid() test in the receiving Action.

hidden Render A Hidden Field org.apache.strutsel.taglib.html.ELHiddenTag empty

Renders an HTML <input> element of type hidden, populated from the specified value or the specified property of the bean associated with our current form. This tag is only valid when nested inside a form tag body.

accesskey false true The keyboard character used to move focus immediately to this element. alt false true

The alternate text for this element.

altKey false true

The message resources key of the alternate text for this element.

bundle false true The servlet context attributes key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. Struts 1.2.5 disabled false true Set to true if this input field should be disabled. indexed false true Valid only inside of logic-el:iterate or c:forEach tags. If true then name of the html tag will be rendered as "id[34].propertyName". Number in brackets will be generated for every iteration and taken from ancestor iteration tag. name false true The attribute name of the bean whose properties are consulted when rendering the current value of this input field. If not specified, the bean associated with the form tag we are nested within is utilized. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. property true true Name of this input field, and the name of the corresponding bean property if value is not specified. The corresponding bean property (if any) must be of type String. style false true CSS styles to be applied to this HTML element. styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). title false true

The advisory title for this element.

titleKey false true

The message resources key for the advisory title for this element.

value false true Value to which this field should be initialized. [Use the corresponding bean property value] write false true Should the value of this field also be rendered to the response page to make it visible, in addition to creating an HTML type="hidden" element? By default, only the hidden element is created.
html Render an HTML <html> Element org.apache.strutsel.taglib.html.ELHtmlTag JSP

Renders an HTML <html> element with language attributes extracted from the user's current Locale object, if there is one.

lang false true Renders a lang attribute with the locale stored in the user's session. If not found in the session, the language from the Accept-Language HTTP header is used. If still not found, the default language for the server is used. Struts 1.2 locale false true

Set to true in order to store a Locale in the session based on the current request's Accept-Language header (if any) if none has currently been set. This attribute will create a session if one does not already exist. The lang attribute is rendered with the appropriate language code.

Creating a session is undesirable for apps that don't support them. Use the lang attribute to achieve the same functionality without creating a session.
xhtml false true

Set to true in order to render xml:lang and xmlns attributes on the generated html element. This also causes all other html tags to render as XHTML 1.0 (the <html:xhtml/> tag has a similar purpose).

Struts 1.1
image Render an input tag of type "image" org.apache.strutsel.taglib.html.ELImageTag

Renders an HTML <input> tag of type "image". The base URL for this image is calculated directly based on the value specified in the src or page attributes, or indirectly by looking up a message resource string based on the srcKey or pageKey attributes. You must specify exactly one of these attributes.

If you would like to obtain the coordinates of the mouse click that submitted this request, see the information below on the property attribute.

This tag is only valid when nested inside a form tag body.

accesskey false true

The keyboard character used to move focus immediately to this element.

align false true

The alignment option for this image.

The align attribute is deprecated in HTML 4.x. The suggested alternative is to use CSS. Please see http://www.w3.org/TR/REC-html40/struct/objects.html#h-13.7.4 for more details.
alt false true

The alternate text for this image.

altKey false true

The message resources key of the alternate text for this image.

border false true

The width (in pixels) of the border around this image.

bundle false true

The servlet context attribute key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet.

disabled false true Set to true if this input field should be disabled. indexed false true Valid only inside of logic-el:iterate or c:forEach tags. If true then name of the html tag will be rendered as "id[34].propertyName". Number in brackets will be generated for every iteration and taken from ancestor iteration tag. locale false true

The session attribute key for the Locale used to select internationalized messages. If not specified, defaults to the Struts standard value.

onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. page false true

The module-relative path of the image for this input tag.

pageKey false true

The key of the message resources string specifying the module-relative path of the image for this input tag.

property false true

The property name of this image tag. The parameter names for the request will appear as "property.x" and "property.y", the x and y representing the coordinates of the mouse click for the image. A way of retrieving these values through a form bean is to define getX(), getY(), setX(), and setY() methods, and specify your property as a blank string (property="").

src false true

The source URL of the image for this input tag.

srcKey false true

The key of the message resources string specifying the source URL of the image for this input tag.

style false true CSS styles to be applied to this HTML element. styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). tabindex false true The tab order (ascending positive integers) for this element. title false true

The advisory title for this element.

titleKey false true

The message resources key for the advisory title for this element.

value false true

The value that will be submitted if this image button is pressed.

img Render an HTML img tag org.apache.strutsel.taglib.html.ELImgTag empty

Renders an HTML <img> element with the image at the specified URL. Like the link tag, URL rewriting will be applied automatically to the value specified in src, page, or action to maintain session state in the absence of cookies. This will allow dynamic generation of an image where the content displayed for this image will be taken from the attributes of this tag.

The base URL for this image is calculated directly based on the value specified in src, page, or action or page, or indirectly by looking up a message resource string based on the srcKey or pageKey attributes. You must specify exactly one of these attributes.

Normally, the src, page, or action that you specify 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 src URL -- specify a single parameter with the paramId attribute (at its associated attributes to select the value), or specify the name (and optional property) attributes to select a java.util.Map bean that contains one or more parameter ids and corresponding values.

To specify a single parameter, use the paramId attribute to define the name of the request parameter to be submitted. To specify the corresponding value, use one of the following approaches:

  • Specify only the paramName attribute - The named JSP bean (optionally scoped by the value of the paramScope attribute) must identify a value that can be converted to a String.
  • Specify both the paramName and paramProperty attributes - The specified property getter will be called on the JSP bean identified by the paramName (and optional paramScope) attributes, in order to select a value that can be converted to a String.

If you prefer to specify a java.util.Map that contains all of the request parameters to be added to the hyperlink, use one of the following techniques:

  • Specify only the name attribute - The named JSP bean (optionally scoped by the value of the scope attribute) must identify a java.util.Map containing the parameters.
  • Specify both name and property attributes - The specified property getter method will be called on the bean identified by the name (and optional scope) attributes, in order to return the java.util.Map containing the parameters.

As the Map is processed, the keys are assumed to be the names of query parameters to be appended to the src URL. The value associated with each key must be either a String or a String array representing the parameter value(s), or an object whose toString() method will be called. If a String array is specified, more than one value for the same query parameter name will be created.

You can specify the alternate text for this image (which most browsers display as pop-up text block when the user hovers the mouse over this image) either directly, through the alt attribute, or indirectly from a message resources bundle, using the bundle and altKey attributes.

align false true

Where the image is aligned to. Can be one of the following attributes:

  • left - left justify, wrapping text on right
  • right -right justify, wrapping test on left
  • top - aligns the image with the top of the text on the same row
  • middle - aligns the image's vertical center with the text base line
  • bottom - aligns the image with the bottom of the text's base line
  • texttop - aligns the image's top with that of the text font on the same line
  • absmiddle - aligns the image's vertical center with the absolute center of the text
  • absbottom - aligns the image with the absolute bottom of the text font on the same row
alt false true

And alternative text to be displayed in browsers that don't support graphics. Also used often as type of context help over images.

altKey false true

The message resources key of the alternate text for this element.

border false true

The width of the border surrounding the image.

bundle false true

The servlet context attribute key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet.

contextRelative false true Use module attribute instead; will be removed in a release afer 1.2.0.

If set to "true", this "anchors" the image src at the application context rather than the module context when the 'page' attribute is used to specify an image path.

height false true

The height of the image being displayed. This parameter is very nice to specify (along with width) to help the browser render the page faster.

hspace false true

The amount of horizontal spacing between the icon and the text. The text may be in the same paragraph, or be wrapped around the image.

imageName false true

The scriptable name to be defined within this page, so that you can reference it with intra-page scripts. In other words, the value specified here will render a "name" element in the generated image tag.

ismap false true

The name of the server-side map that this image belongs to.

locale false true

The name of the request or session Locale attribute used to look up internationalized messages.

lowsrc false true

An image for people with low resolution graphics cards.

This attribute is not defined in the HTML 4.01 spec and will be removed in a future version of Struts.
name false true

The name of a JSP bean that contains a Map representing the query parameters (if property is not specified), or a JSP bean whose property getter is called to return a Map (if property is specified).

onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onkeydown false true

JavaScript event handler that is executed when this element receives a key down event.

onkeypress false true

JavaScript event handler that is executed when this element receives a key press event.

onkeyup false true

JavaScript event handler that is executed when this element receives a key up event.

onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. paramId false true

The name of the request parameter that will be dynamically added to the generated src URL. The corresponding value is defined by the paramName and (optional) paramProperty attributes, optionally scoped by the paramScope attribute

page false true

The module-relative path, starting with a slash, of the image to be displayed by this tag. The rendered URL for this image will automatically prepend the context path of this web application (in the same manner as the page attribute on the link tag works), in addition to any necessary URL rewriting. You must specify either the page attribute or the src attribute.

pageKey false true

The message key, in the message resources bundle named by the bundle attribute, of the String to be used as the module-relative path for this image.

action false true

The action, starting with a slash, that will render the image to be displayed by this tag. The rendered URL for this image will automatically prepend the context path of this web application (in the same manner as the action attribute on the link tag works), in addition to any necessary URL rewriting. You must specify the action, page attribute or the src attribute.

Additionally, you can specify a module prefix for linking to other modules.

module false true

Prefix name of a Module that contains the action mapping for the Action that is specified by the action attribute. You must specify an action attribute for this to have an effect.

Note: Use "" to map to the default module.

paramName false true

The name of a JSP bean that is a String containing the value for the request parameter named by paramId (if paramProperty is not specified), or a JSP bean whose property getter is called to return a String (if paramProperty is specified). The JSP bean is constrained to the bean scope specified by the paramScope property, if it is specified.

paramProperty false true

The name of a property of the bean specified by the paramName attribute, whose return value must be a String containing the value of the request parameter (named by the paramId attribute) that will be dynamically added to this src URL.

paramScope false true

The scope within which to search for the bean specified by the paramName attribute. If not specified, all scopes are searched.

property false true

The name of a property of the bean specified by the name attribute, whose return value must be a java.util.Map containing the query parameters to be added to the src URL. You must specify the name attribute if you specify this attribute.

scope false true

The scope within which to search for the bean specified by the name attribute. If not specified, all scopes are searched.

src false true

The URL to which this image will be transferred from This image may be dynamically modified by the inclusion of query parameters, as described in the tag description. This value will be used unmodified (other than potential URL rewriting) as the value of the "src" attribute in the rendered tag. You must specify either the page attribute or the src attribute.

srcKey false true

The message key, in the message resources bundle named by the bundle attribute, of the String to be used as the URL of this image.

style false true

CSS styles to be applied to this element.

styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). title false true

The advisory title for this element.

titleKey false true

The message resources key for the advisory title for this element.

useLocalEncoding false true

If set to true, 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.

usemap false true

The name of the map as defined within this page for mapping hot-spot areas of this image.

vspace false true

The amount of vertical spacing between the icon and the text, above and below.

width false true

The width of the image being displayed. This parameter is very nice to specify (along with height) to help the browser render the page faster.

javascript Render JavaScript validation based on the validation rules loaded by the ValidatorPlugIn. org.apache.strutsel.taglib.html.ELJavascriptValidatorTag empty

Render JavaScript validation based on the validation rules loaded by the ValidatorPlugIn. The set of validation rules that should be generated is based on the formName attribute passed in, which should match the name attribute of the form element in the xml file.

The dynamicJavascript and staticJavascript attributes default to true, but if dynamicJavascript is set to true and staticJavascript is set to false then only the dynamic JavaScript will be rendered. If dynamicJavascript is set to false and staticJavascript is set to true then only the static JavaScript will be rendered which can then be put in separate JSP page so the browser can cache the static JavaScript.

cdata false true

If set to "true" and XHTML has been enabled, the JavaScript will be wrapped in a CDATA section to prevent XML parsing. The default is "true" to comply with the W3C's recommendation.

Struts 1.1
dynamicJavascript false false

Whether or not to render the dynamic JavaScript. Defaults to true.

formName false true

The key (form name) to retrieve a specific set of validation rules. If "dynamicJavascript" is set to true and formName is missing or is not recognized by the ValidatorPlugIn, a JspException will be thrown.

method false true

The alternate JavaScript method name to be used instead of the of the default. The default is 'validate' concatenated in front of the key (form name) passed in (ex: validateRegistrationForm).

page false true

The current page of a set of validation rules if the page attribute for the field element in the xml file is in use.

scriptLanguage false true The <script> element will not contain a language attribute when this is set to false. The default is true but this property is ignored in XHTML mode. Struts 1.2 src false true

The src attribute's value when defining the html script element.

staticJavascript false false

Whether or not to render the static JavaScript. Defaults to true.

htmlComment false true

Whether or not to enclose the javascript with HTML comments. This attribute is ignored in XHTML mode because the script would be deleted by the XML parser. See the cdata attribute for details on hiding scripts from XML parsers. Defaults to true.

bundle false true The servlet context attributes key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. Struts 1.2.7
link Render an HTML anchor or hyperlink org.apache.strutsel.taglib.html.ELLinkTag

Renders an HTML <a> element as an anchor definition (if "linkName" is specified) or as a hyperlink to the specified URL. URL rewriting will be applied automatically, to maintain session state in the absence of cookies. The content displayed for this hyperlink will be taken from the body of this tag.

The base URL for this hyperlink is calculated based on which of the following attributes you specify (you must specify exactly one of them):

  • forward - Use the value of this attribute as the name of a global ActionForward to be looked up, and use the module-relative or context-relative URI found there. If the forward is module-relative then it must point to an action and NOT to a page.
  • action - Use the value of this attribute as the name of a Action to be looked up, and use the module-relative or context-relative URI found there.
  • href - Use the value of this attribute unchanged.
  • page - Use the value of this attribute as a module-relative URI, and generate a server-relative URI by including the context path and module prefix.

Normally, the hyperlink 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 paramId attribute (and its associated attributes to select the value), or specify the name (and optional property) attributes to select a java.util.Map bean that contains one or more parameter ids and corresponding values.

To specify a single parameter, use the paramId attribute to define the name of the request parameter to be submitted. To specify the corresponding value, use one of the following approaches:

  • Specify only the paramName attribute - The named JSP bean (optionally scoped by the value of the paramScope attribute) must identify a value that can be converted to a String.
  • Specify both the paramName and paramProperty attributes - The specified property getter method will be called on the JSP bean identified by the paramName (and optional paramScope) attributes, in order to select a value that can be converted to a String.

If you prefer to specify a java.util.Map that contains all of the request parameters to be added to the hyperlink, use one of the following techniques:

  • Specify only the name attribute - The named JSP bean (optionally scoped by the value of the scope attribute) must identify a java.util.Map containing the parameters.
  • Specify both name and property attributes - The specified property getter method will be called on the bean identified by the name (and optional scope) attributes, in order to return the java.util.Map containing the parameters.

As the Map 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), or an object whose toString() method will be called. If a String array is specified, more than one value for the same query parameter name will be created.

Additionally, you can request that the current transaction control token, if any, be included in the generated hyperlink by setting the transaction attribute to true. You can also request that an anchor ("#xxx") be added to the end of the URL that is created by any of the above mechanisms, by using the anchor attribute.

accesskey false true

The keyboard character used to move focus immediately to this element.

action false true

Logical name of a Action 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 must specify exactly one of the action attribute, the forward attribute, the href attribute, the linkName attribute, or the page attribute.

Additionally, you can specify a module prefix for linking to other modules.

module false true

Prefix name of a Module that contains the action mapping for the Action that is specified by the action attribute. You must specify an action attribute for this to have an effect.

Note: Use "" to map to the default module.

anchor false true

Optional anchor tag ("#xxx") to be added to the generated hyperlink. Specify this value without any "#" character.

forward false true

Logical name of a global ActionForward 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 must specify exactly one of the action attribute, the forward attribute, the href attribute, the linkName attribute, or the page attribute.

href false true

The URL 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 must specify exactly one of the action attribute, the forward attribute, the href attribute, the linkName attribute, or the page attribute.

indexed false true Valid only inside of logic-el:iterate or c:forEach tags. If true then name of the html tag will be rendered as "id[34].propertyName". Number in brackets will be generated for every iteration and taken from ancestor iteration tag. indexId false true By this attribute different name for the indexed parameter can be specified. Take a look to the "indexed" attribute for details. bundle false true The servlet context attributes key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. Struts 1.2.5 linkName false true

The anchor name to be defined within this page, so that you can reference it with intra-page hyperlinks. In other words, the value specified here will render a "name" element in the generated anchor tag.

name false true

The name of a JSP bean that contains a Map representing the query parameters (if property is not specified), or a JSP bean whose property getter is called to return a Map (if property is specified).

onblur false true

JavaScript event handler that is executed when this element loses input focus.

onclick false true

JavaScript event handler that is executed when this element receives a mouse click.

ondblclick false true

JavaScript event handler that is executed when this element receives a mouse double click.

onfocus false true

JavaScript event handler that is executed when this element receives input focus.

onkeydown false true

JavaScript event handler that is executed when this element receives a key down event.

onkeypress false true

JavaScript event handler that is executed when this element receives a key press event.

onkeyup false true

JavaScript event handler that is executed when this element receives a key up event.

onmousedown false true

JavaScript event handler that is executed when this element receives a mouse down event.

onmousemove false true

JavaScript event handler that is executed when this element receives a mouse move event.

onmouseout false true

JavaScript event handler that is executed when this element receives a mouse out event.

onmouseover false true

JavaScript event handler that is executed when this element receives a mouse over event.

onmouseup false true

JavaScript event handler that is executed when this element receives a mouse up event.

page false true

The module-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 must specify exactly one of the action attribute, forward attribute, the href attribute, the linkName attribute, or the page attribute.

paramId false true

The name of the request parameter that will be dynamically added to the generated hyperlink. The corresponding value is defined by the paramName and (optional) paramProperty attributes, optionally scoped by the paramScope attribute

paramName false true

The name of a JSP bean that is a String containing the value for the request parameter named by paramId (if paramProperty is not specified), or a JSP bean whose property getter is called to return a String (if paramProperty is specified). The JSP bean is constrained to the bean scope specified by the paramScope property, if it is specified.

paramProperty false true

The name of a property of the bean specified by the paramName attribute, whose return value must be a String containing the value of the request parameter (named by the paramId attribute) that will be dynamically added to this hyperlink.

paramScope false true

The scope within which to search for the bean specified by the paramName attribute. If not specified, all scopes are searched.

property false true

The name of a property of the bean specified by the name attribute, whose return value must be a java.util.Map containing the query parameters to be added to the hyperlink. You must specify the name attribute if you specify this attribute.

scope false true

The scope within which to search for the bean specified by the name attribute. If not specified, all scopes are searched.

style false true

CSS styles to be applied to this element.

styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). tabindex false true

The tab order (ascending positive integers) for this element.

target false true

The window target in which the resource requested by this hyperlink will be displayed, for example in a framed presentation.

title false true

The advisory title for this hyperlink.

titleKey false true

The message resources key for the advisory title for this element.

transaction false true

If set to true, any current transaction control token will be included in the generated hyperlink, so that it will pass an isTokenValid() test in the receiving Action.

useLocalEncoding false true

If set to true, 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.

messages Conditionally display a set of accumulated messages. org.apache.strutsel.taglib.html.ELMessagesTag org.apache.struts.taglib.html.MessagesTei JSP

Displays a set of messages prepared by a business logic component and stored as an ActionMessages object, ActionErrors object, a String, or a String array in any scope. If such a bean is not found, nothing will be rendered.

In order to use this tag successfully, you must have defined an application scope MessageResources bean under the default attribute name.

id true false The name of a page scope JSP bean that will contain the current element of the collection of messages on each iteration, if it is not null. bundle false true The servlet context attribute key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. locale false true The session attribute key for the Locale used to select messages to be displayed. If not specified, defaults to the Struts standard value. name false true Name of the bean in any scope under which our messages have been stored. If not present, the name specified by the Globals.ERROR_KEY constant string will be used. property false true Name of the property for which messages should be displayed. If not specified, all messages (regardless of property) are displayed. header false true This value is an optional message resource key that will be printed before the iteration of messages begins. footer false true This value is an optional message resource key that will be printed after the iteration of messages has finished. message false true By default the tag will retrieve the bean it will iterate over from the Globals.ERROR_KEY constant string, but if this attribute is set to 'true' the bean will be retrieved from the Globals.MESSAGE_KEY constant string. Also if this is set to 'true', any value assigned to the name attribute will be ignored.
multibox Render A Checkbox Input Field org.apache.strutsel.taglib.html.ELMultiboxTag

Renders an HTML <input> element of type checkbox, whose "checked" status is initialized based on whether the specified value matches one of the elements of the underlying property's array of current values. This element is useful when you have large numbers of checkboxes, and prefer to combine the values into a single array-valued property instead of multiple boolean properties. This tag is only valid when nested inside a form tag body.

WARNING: In order to correctly recognize cases where none of the associated checkboxes are selected, the ActionForm bean associated with this form must include a statement setting the corresponding array to zero length in the reset() method.

The value to be returned to the server, if this checkbox is selected, must be defined by one of the following methods:

  • Specify a value attribute, whose contents will be used literally as the value to be returned.
  • Specify no value attribute, and the nested body content of this tag will be used as the value to be returned.
accesskey false true The keyboard character used to move focus immediately to this element. alt false true

The alternate text for this element.

altKey false true

The message resources key of the alternate text for this element.

bundle false true The servlet context attributes key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. Struts 1.2.5 disabled false true Set to true if this input field should be disabled. errorKey false true

Name of the request scope bean under which our error messages have been stored. If not present, the name specified by the Globals.ERROR_KEY constant string will be used.

N.B. This is used in conjunction with the errorStyle, errorStyleClass and errorStyleId attributes and should be set to the same value as the name attribute on the <html:errors/> tag.

Struts 1.2.5
errorStyle false true

CSS styles to be applied to this HTML element if an error exists for it.

N.B. If present, this overrides the style attribute in the event of an error.

Struts 1.2.5
errorStyleClass false true

CSS stylesheet class to be applied to this HTML element if an error exists for it (renders a "class" attribute).

N.B. If present, this overrides the styleClass attribute in the event of an error.

Struts 1.2.5
errorStyleId false true

Identifier to be assigned to this HTML element if an error exists for it (renders an "id" attribute).

N.B. If present, this overrides the styleId attribute in the event of an error.

Struts 1.2.5
name false true The attribute name of the bean whose properties are consulted when rendering the current value of this input field. If not specified, the bean associated with the form tag we are nested within is utilized. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. property true true Name of the request parameter that will be included with this submission, set to the specified value. style false true

CSS styles to be applied to this HTML element.

N.B. If present, the errorStyle overrides this attribute in the event of an error for the element.

styleClass false true

CSS stylesheet class to be applied to this HTML element (renders a "class" attribute).

N.B. If present, the errorStyleClass overrides this attribute in the event of an error for the element.

styleId false true

Identifier to be assigned to this HTML element (renders an "id" attribute).

N.B. If present, the errorStyleId overrides this attribute in the event of an error for the element.

tabindex false true The tab order (ascending positive integers) for this element. title false true

The advisory title for this element.

titleKey false true

The message resources key for the advisory title for this element.

value false true The value to be transmitted if this checkbox is checked when the form is submitted.
option Render A Select Option org.apache.strutsel.taglib.html.ELOptionTag

Render an HTML <option> element, representing one of the choices for an enclosing <select> element. The text displayed to the user comes from either the body of this tag, or from a message string looked up based on the bundle, locale, and key attributes.

If the value of the corresponding bean property matches the specified value, this option will be marked selected. This tag is only valid when nested inside a <html:select> tag body.

bundle false true The servlet context attributes key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. disabled false true Set to true if this option should be disabled. key false true If specified, defines the message key to be looked up in the resource bundle specified by bundle for the text displayed to the user for this option. If not specified, the text to be displayed is taken from the body content of this tag. locale false true The session attributes key for the Locale instance to use for looking up the message specified by the key attribute. If not specified, uses the standard Struts session attribute name. style false true CSS styles to be applied to this HTML element. styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). value true true Value to be submitted for this field if this option is selected by the user.
options Render a Collection of Select Options org.apache.strutsel.taglib.html.ELOptionsTag empty

Renders a set of HTML <option> elements, representing possible choices for a <select> element. This tag can be used multiple times within a single <html:select> element, either in conjunction with or instead of one or more <html:option> or <html:optionsCollection> elements.

This tag operates in one of two major modes, depending on whether or not the collection attribute is specified. If the collection attribute is included, the following rules apply:

  • The collection attribute is interpreted as the name of a JSP bean, in some scope, that itself represents a collection of individual beans, one per option value to be rendered.
  • The property attribute is interpreted as the name of a property of the individual beans included in the collection, and is used to retrieve the value that will be returned to the server if this option is selected.
  • The labelProperty attribute is interpreted as the name of a property of the individual beans included in the collection, and is used to retrieve the label that will be displayed to the user for this option. If the labelProperty attribute is not specified, the property named by the property attribute will be used to select both the value returned to the server and the label displayed to the user for this option.

If the collection attribute is not specified, the rules described in the remainder of this section apply.

The collection of values actually selected depends on the presence or absence of the name and property attributes. The following combinations are allowed:

  • Only name is specified - The value of this attribute is the name of a JSP bean in some scope that is the collection.
  • Only property is specified - The value of this attribute is the name of a property of the ActionForm bean associated with our form, which will return the collection.
  • Both name and property are specified - The value of the name attribute identifies a JSP bean in some scope. The value of the property attribute is the name of some property of that bean which will return the collection.

The collection of labels displayed to the user can be the same as the option values themselves, or can be different, depending on the presence or absence of the labelName and labelProperty attributes. If this feature is used, the collection of labels must contain the same number of elements as the corresponding collection of values. The following combinations are allowed:

  • Neither labelName nor labelProperty is specified - The labels will be the same as the option values themselves.
  • Only labelName is specified - The value of this attribute is the name of a JSP bean in some scope that is the collection.
  • Only labelProperty is specified - The value of this attribute is the name of a property of the ActionForm bean associated with our form, which will return the collection.
  • Both labelName and labelProperty are specified - The value of the labelName attribute identifies a JSP bean in some scope. The value of the labelProperty attribute is the name of some property of that bean which will return the collection.

Note that this tag does not support a styleId attribute, as it would have to apply the value to all the option elements created by this element, which would mean that more than one id element might have the same value, which the HTML specification says is illegal.

collection false true Name of the JSP bean (in some scope) which is itself a Collection of other beans, each of which has properties named by the "property" and "labelProperty" attributes that are used to retrieve the value and label for each option, respectively. filter false true Set to false if you do NOT want the option labels filtered for sensitive characters in HTML. By default, such values are filtered. labelName false true Name of the JSP bean (in some scope) containing the collection of labels to be displayed to the user for these options. labelProperty false true Property of the form bean, or the bean specified by the labelName attribute, that will return the collection of labels to be displayed to the user for these options. name false true Name of the JSP bean (in some scope) containing the collection of values to be returned to the server for these options. If not specified, the form bean associated with our form is assumed. property false true Property of the form bean, or the bean specified by the name attribute, that will return the collection of values to returned to the server for these options. style false true CSS styles to be applied to this HTML element. styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute).
optionsCollection Render a Collection of Select Options org.apache.strutsel.taglib.html.ELOptionsCollectionTag empty

Renders a set of HTML <option> elements, representing possible choices for a <select> element. This tag can be used multiple times within a single <html:select> element, either in conjunction with or instead of one or more <html:option> or <html:options> elements.

This tag operates on a collection of beans, where each bean has a label property and a value property. The actual names of these properties can be configured using the label and value attributes of this tag.

This tag differs from the <html:options> tag in that it makes more consistent use of the name and property attributes, and allows the collection to be more easily obtained from the enclosing form bean.

Note that this tag does not support a styleId attribute, as it would have to apply the value to all the option elements created by this element, which would mean that more than one id element might have the same value, which the HTML specification says is illegal.

filter false true Set to false if you do NOT want the option labels filtered for sensitive characters in HTML. By default, such values are filtered. label false true The property of the bean within the collection which represents the label to be rendered for each option. Defaults to "label". name false true The attribute name of the bean whose properties are consulted when rendering the current value of this input field. If not specified, the bean associated with the form tag we are nested within is utilized. property false true The property of the form bean, or the bean specified by the name attribute, that will return the collection of objects to be rendered for these options. style false true CSS styles to be applied to this HTML element. styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). value false true The property of the bean within the collection which represents the value to be rendered for each option. Defaults to "value".
password Render A Password Input Field org.apache.strutsel.taglib.html.ELPasswordTag Renders an HTML <input> element of type password, populated from the specified value or the specified property of the bean associated with our current form. This tag is only valid when nested inside a form tag body. accesskey false true The keyboard character used to move focus immediately to this element. alt false true

The alternate text for this element.

altKey false true

The message resources key of the alternate text for this element.

bundle false true The servlet context attributes key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. Struts 1.2.5 disabled false true Set to true if this input field should be disabled. errorKey false true

Name of the request scope bean under which our error messages have been stored. If not present, the name specified by the Globals.ERROR_KEY constant string will be used.

N.B. This is used in conjunction with the errorStyle, errorStyleClass and errorStyleId attributes and should be set to the same value as the name attribute on the <html:errors/> tag.

Struts 1.2.5
errorStyle false true

CSS styles to be applied to this HTML element if an error exists for it.

N.B. If present, this overrides the style attribute in the event of an error.

Struts 1.2.5
errorStyleClass false true

CSS stylesheet class to be applied to this HTML element if an error exists for it (renders a "class" attribute).

N.B. If present, this overrides the styleClass attribute in the event of an error.

Struts 1.2.5
errorStyleId false true

Identifier to be assigned to this HTML element if an error exists for it (renders an "id" attribute).

N.B. If present, this overrides the styleId attribute in the event of an error.

Struts 1.2.5
indexed false true Valid only inside of logic-el:iterate or c:forEach tags. If true then name of the html tag will be rendered as "id[34].propertyName". Number in brackets will be generated for every iteration and taken from ancestor iteration tag. maxlength false true Maximum number of input characters to accept. [No limit] name false true The attribute name of the bean whose properties are consulted when rendering the current value of this input field. If not specified, the bean associated with the form tag we are nested within is utilized. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. property true true Name of the request parameter that will be included with this submission, set to the specified value. readonly false true Set to true if this input field should be read only. redisplay false true Boolean flag indicating whether or not existing values will be redisplayed if they exist. Even though the redisplayed value will be shown as asterisks on the visible HTML page, the cleartext of the actual password value will be visible though the "Show Page Source" menu option of the client browser. You may wish to set this value to false on login pages. Defaults to true for consistency with all other form tags that redisplay their contents. style false true

CSS styles to be applied to this HTML element.

N.B. If present, the errorStyle overrides this attribute in the event of an error for the element.

styleClass false true

CSS stylesheet class to be applied to this HTML element (renders a "class" attribute).

N.B. If present, the errorStyleClass overrides this attribute in the event of an error for the element.

styleId false true

Identifier to be assigned to this HTML element (renders an "id" attribute).

N.B. If present, the errorStyleId overrides this attribute in the event of an error for the element.

size false true Number of character positions to allocate. [Browser default] tabindex false true The tab order (ascending positive integers) for this element. title false true

The advisory title for this element.

titleKey false true

The message resources key for the advisory title for this element.

value false true Value of the label to be placed on this button. This value will also be submitted as the value of the specified request parameter. [Body of this tag (if any)]
radio Render A Radio Button Input Field org.apache.strutsel.taglib.html.ELRadioTag

Renders an HTML <input> element of type radio, populated from the specified property of the bean associated with our current form. This tag is only valid when nested inside a form tag body.

If an iterator is used to render a series of radio tags, the idName attribute may be used to specify the name of the bean exposed by the iterator. In this case, the value attribute is used as the name of a property on the idName bean that returns the value of the radio tag in this iteration.

accesskey false true The keyboard character used to move focus immediately to this element. alt false true

The alternate text for this element.

altKey false true

The message resources key of the alternate text for this element.

bundle false true The servlet context attributes key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. Struts 1.2.5 disabled false true Set to true if this input field should be disabled. errorKey false true

Name of the request scope bean under which our error messages have been stored. If not present, the name specified by the Globals.ERROR_KEY constant string will be used.

N.B. This is used in conjunction with the errorStyle, errorStyleClass and errorStyleId attributes and should be set to the same value as the name attribute on the <html:errors/> tag.

Struts 1.2.5
errorStyle false true

CSS styles to be applied to this HTML element if an error exists for it.

N.B. If present, this overrides the style attribute in the event of an error.

Struts 1.2.5
errorStyleClass false true

CSS stylesheet class to be applied to this HTML element if an error exists for it (renders a "class" attribute).

N.B. If present, this overrides the styleClass attribute in the event of an error.

Struts 1.2.5
errorStyleId false true

Identifier to be assigned to this HTML element if an error exists for it (renders an "id" attribute).

N.B. If present, this overrides the styleId attribute in the event of an error.

Struts 1.2.5
indexed false true Valid only inside of logic-el:iterate or c:forEach tags. If true then name of the html tag will be rendered as "id[34].propertyName". Number in brackets will be generated for every iteration and taken from ancestor iteration tag. name false true The attribute name of the bean whose properties are consulted when rendering the current value of this input field. If not specified, the bean associated with the form tag we are nested within is utilized. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. property true true The corresponding bean property for this radio tag. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. style false true

CSS styles to be applied to this HTML element.

N.B. If present, the errorStyle overrides this attribute in the event of an error for the element.

styleClass false true

CSS stylesheet class to be applied to this HTML element (renders a "class" attribute).

N.B. If present, the errorStyleClass overrides this attribute in the event of an error for the element.

styleId false true

Identifier to be assigned to this HTML element (renders an "id" attribute).

N.B. If present, the errorStyleId overrides this attribute in the event of an error for the element.

tabindex false true The tab order (ascending positive integers) for this element. title false true

The advisory title for this element.

titleKey false true

The message resources key for the advisory title for this element.

value true true The value of the radio tag. idName false true

Name of the bean (in some scope) that will return the value of the radio tag. Usually exposed by an iterator. When the idName attribute is present, the value attribute is used as the name of the property on the idName bean that will return the value of the radio tag for this iteration.

Struts 1.1
reset Render A Reset Button Input Field org.apache.strutsel.taglib.html.ELResetTag Renders an HTML <input> element of type reset. accesskey false true The keyboard character used to move focus immediately to this element. alt false true

The alternate text for this element.

altKey false true

The message resources key of the alternate text for this element.

bundle false true The servlet context attributes key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. Struts 1.2.5 disabled false true Set to true if this input field should be disabled. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. property false true Name of the input field that will be generated. style false true CSS styles to be applied to this HTML element. styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). tabindex false true The tab order (ascending positive integers) for this element. title false true

The advisory title for this element.

titleKey false true

The message resources key for the advisory title for this element.

value false true Value of the label to be placed on this button. [Body of this tag (if any), or "Reset"]
rewrite Render an URI org.apache.strutsel.taglib.html.ELRewriteTag empty

Renders a request URI based on exactly the same rules as the link tag does, but without creating the <a> hyperlink. This value is useful when you want to generate a string constant for use by a JavaScript procedure.

action false true

Logical name of a Action 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 must specify exactly one of the action attribute, the forward attribute, the href attribute, or the page attribute.

Additionally, you can specify a module prefix for linking to other modules.

Struts 1.2.0
module false true

Prefix name of a Module that contains the action mapping for the Action that is specified by the action attribute. You must specify an action attribute for this to have an effect.

Note: Use "" to map to the default module.

anchor false true

Optional anchor tag ("#xxx") to be added to the generated hyperlink. Specify this value without any "#" character.

forward false true

Logical name of a global ActionForward 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 must specify exactly one of the action attribute, the forward attribute, the href attribute, or the page attribute.

href false true

The URL 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 must specify exactly one of the action attribute, the forward attribute, the href attribute, or the page attribute.

name false true

The name of a JSP bean that contains a Map representing the query parameters (if property is not specified), or a JSP bean whose property getter is called to return a Map (if property is specified).

page false true

The module-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 must specify exactly one of the action attribute, the forward attribute, the href attribute, or the page attribute.

paramId false true

The name of the request parameter that will be dynamically added to the generated hyperlink. The corresponding value is defined by the paramName and (optional) paramProperty attributes, optionally scoped by the paramScope attribute

paramName false true

The name of a JSP bean that is a String containing the value for the request parameter named by paramId (if paramProperty is not specified), or a JSP bean whose property getter is called to return a String (if paramProperty is specified). The JSP bean is constrained to the bean scope specified by the paramScope property, if it is specified.

paramProperty false true

The name of a property of the bean specified by the paramName attribute, whose return value must be a String containing the value of the request parameter (named by the paramId attribute) that will be dynamically added to this hyperlink.

paramScope false true

The scope within which to search for the bean specified by the paramName attribute. If not specified, all scopes are searched.

property false true

The name of a property of the bean specified by the name attribute, whose return value must be a java.util.Map containing the query parameters to be added to the hyperlink. You must specify the name attribute if you specify this attribute.

scope false true

The scope within which to search for the bean specified by the name attribute. If not specified, all scopes are searched.

transaction false true

If set to true, any current transaction control token will be included in the generated hyperlink, so that it will pass an isTokenValid() test in the receiving Action.

useLocalEncoding false true

If set to true, 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.

select Render A Select Element org.apache.strutsel.taglib.html.ELSelectTag JSP

Renders an HTML <select> element, associated with a bean property specified by our attributes. This tag is only valid when nested inside a form tag body.

This tag operates in two modes, depending upon the state of the multiple attribute, which affects the data type of the associated property you should use:

  • multiple="true" IS NOT selected - The corresponding property should be a scalar value of any supported data type.
  • multiple="true" IS selected - The corresponding property should be an array of any supported data type.

WARNING: In order to correctly recognize cases where no selection at all is made, the ActionForm bean associated with this form must include a statement resetting the scalar property to a default value (if multiple is not set), or the array property to zero length (if multiple is set) in the reset() method.

alt false true

The alternate text for this element.

altKey false true

The message resources key of the alternate text for this element.

bundle false true The servlet context attributes key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. Struts 1.2.5 disabled false true Set to true if this input field should be disabled. errorKey false true

Name of the request scope bean under which our error messages have been stored. If not present, the name specified by the Globals.ERROR_KEY constant string will be used.

N.B. This is used in conjunction with the errorStyle, errorStyleClass and errorStyleId attributes and should be set to the same value as the name attribute on the <html:errors/> tag.

Struts 1.2.5
errorStyle false true

CSS styles to be applied to this HTML element if an error exists for it.

N.B. If present, this overrides the style attribute in the event of an error.

Struts 1.2.5
errorStyleClass false true

CSS stylesheet class to be applied to this HTML element if an error exists for it (renders a "class" attribute).

N.B. If present, this overrides the styleClass attribute in the event of an error.

Struts 1.2.5
errorStyleId false true

Identifier to be assigned to this HTML element if an error exists for it (renders an "id" attribute).

N.B. If present, this overrides the styleId attribute in the event of an error.

Struts 1.2.5
indexed false true Valid only inside of logic-el:iterate or c:forEach tags. If true then name of the html tag will be rendered as "id[34].propertyName". Number in brackets will be generated for every iteration and taken from ancestor iteration tag. multiple false true If set to any arbitrary value, the rendered select element will support multiple selections. name false true The attribute name of the bean whose properties are consulted to determine which option should be pre-selected when rendering this input field. If not specified, the bean associated with the enclosing <html:form> tag is utilized. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. property true true Name of the request parameter that will be included with this submission, set to the specified value. style false true

CSS styles to be applied to this HTML element.

N.B. If present, the errorStyle overrides this attribute in the event of an error for the element.

styleClass false true

CSS stylesheet class to be applied to this HTML element (renders a "class" attribute).

N.B. If present, the errorStyleClass overrides this attribute in the event of an error for the element.

styleId false true

Identifier to be assigned to this HTML element (renders an "id" attribute).

N.B. If present, the errorStyleId overrides this attribute in the event of an error for the element.

tabindex false true The tab order (ascending positive integers) for this element. size false true The number of available options displayed at one time. title false true

The advisory title for this element.

titleKey false true

The message resources key for the advisory title for this element.

value false true The value to compare with for marking an option selected.
submit Render A Submit Button org.apache.strutsel.taglib.html.ELSubmitTag Renders an HTML <input> element of type submit.

If a graphical button is needed (a button with an image), then the image tag is more appropriate.

accesskey false true The keyboard character used to move focus immediately to this element. alt false true

The alternate text for this element.

altKey false true

The message resources key of the alternate text for this element.

bundle false true The servlet context attributes key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. Struts 1.2.5 disabled false true Set to true if this input field should be disabled. indexed false true Valid only inside of logic-el:iterate or c:forEach tags. If true then name of the html tag will be rendered as "id[34].propertyName". Number in brackets will be generated for every iteration and taken from ancestor iteration tag. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. property false true Name of the request parameter that will be included with this submission, set to the specified value. style false true CSS styles to be applied to this HTML element. styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). tabindex false true The tab order (ascending positive integers) for this element. title false true

The advisory title for this element.

titleKey false true

The message resources key for the advisory title for this element.

value false true The value of the button label.
text Render An Input Field of Type text org.apache.strutsel.taglib.html.ELTextTag Render an input button of type text. This tag is only valid when nested inside a form tag body. accesskey false true The keyboard character used to move focus immediately to this element. alt false true

The alternate text for this element.

altKey false true

The message resources key of the alternate text for this element.

bundle false true The servlet context attributes key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. Struts 1.2.5 disabled false true Set to true if this input field should be disabled. errorKey false true

Name of the request scope bean under which our error messages have been stored. If not present, the name specified by the Globals.ERROR_KEY constant string will be used.

N.B. This is used in conjunction with the errorStyle, errorStyleClass and errorStyleId attributes and should be set to the same value as the name attribute on the <html:errors/> tag.

Struts 1.2.5
errorStyle false true

CSS styles to be applied to this HTML element if an error exists for it.

N.B. If present, this overrides the style attribute in the event of an error.

Struts 1.2.5
errorStyleClass false true

CSS stylesheet class to be applied to this HTML element if an error exists for it (renders a "class" attribute).

N.B. If present, this overrides the styleClass attribute in the event of an error.

Struts 1.2.5
errorStyleId false true

Identifier to be assigned to this HTML element if an error exists for it (renders an "id" attribute).

N.B. If present, this overrides the styleId attribute in the event of an error.

Struts 1.2.5
indexed false true Valid only inside of logic-el:iterate or c:forEach tags. If true then name of the html tag will be rendered as "id[34].propertyName". Number in brackets will be generated for every iteration and taken from ancestor iteration tag. maxlength false true Maximum number of input characters to accept. [No limit] name false true The attribute name of the bean whose properties are consulted when rendering the current value of this input field. If not specified, the bean associated with the form tag we are nested within is utilized. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. property true true Name of this input field, and the name of the corresponding bean property if value is not specified. The corresponding bean property (if any) must be of type String. readonly false true Set to true if this input field should be read only. size false true Number of character positions to allocate. [Browser default] style false true

CSS styles to be applied to this HTML element.

N.B. If present, the errorStyle overrides this attribute in the event of an error for the element.

styleClass false true

CSS stylesheet class to be applied to this HTML element (renders a "class" attribute).

N.B. If present, the errorStyleClass overrides this attribute in the event of an error for the element.

styleId false true

Identifier to be assigned to this HTML element (renders an "id" attribute).

N.B. If present, the errorStyleId overrides this attribute in the event of an error for the element.

tabindex false true The tab order (ascending positive integers) for this element. title false true

The advisory title for this element.

titleKey false true

The message resources key for the advisory title for this element.

value false true Value to which this field should be initialized. [Use the corresponding bean property value]
textarea Render A Textarea org.apache.strutsel.taglib.html.ELTextareaTag Render a textarea element. This tag is only valid when nested inside a form tag body. accesskey false true The keyboard character used to move focus immediately to this element. alt false true

The alternate text for this element.

altKey false true

The message resources key of the alternate text for this element.

bundle false true The servlet context attributes key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. Struts 1.2.5 cols false true The number of columns to display. disabled false true Set to true if this input field should be disabled. errorKey false true

Name of the request scope bean under which our error messages have been stored. If not present, the name specified by the Globals.ERROR_KEY constant string will be used.

N.B. This is used in conjunction with the errorStyle, errorStyleClass and errorStyleId attributes and should be set to the same value as the name attribute on the <html:errors/> tag.

Struts 1.2.5
errorStyle false true

CSS styles to be applied to this HTML element if an error exists for it.

N.B. If present, this overrides the style attribute in the event of an error.

Struts 1.2.5
errorStyleClass false true

CSS stylesheet class to be applied to this HTML element if an error exists for it (renders a "class" attribute).

N.B. If present, this overrides the styleClass attribute in the event of an error.

Struts 1.2.5
errorStyleId false true

Identifier to be assigned to this HTML element if an error exists for it (renders an "id" attribute).

N.B. If present, this overrides the styleId attribute in the event of an error.

Struts 1.2.5
indexed false true Valid only inside of logic-el:iterate or c:forEach tags. If true then name of the html tag will be rendered as "id[34].propertyName". Number in brackets will be generated for every iteration and taken from ancestor iteration tag. name false true The attribute name of the bean whose properties are consulted when rendering the current value of this input field. If not specified, the bean associated with the form tag we are nested within is utilized. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. property true true Name of this input field, and the name of the corresponding bean property if value is not specified. The corresponding bean property (if any) must be of type String. readonly false true Set to true if this input field should be read only. rows false true The number of rows to display. style false true

CSS styles to be applied to this HTML element.

N.B. If present, the errorStyle overrides this attribute in the event of an error for the element.

styleClass false true

CSS stylesheet class to be applied to this HTML element (renders a "class" attribute).

N.B. If present, the errorStyleClass overrides this attribute in the event of an error for the element.

styleId false true

Identifier to be assigned to this HTML element (renders an "id" attribute).

N.B. If present, the errorStyleId overrides this attribute in the event of an error for the element.

tabindex false true The tab order (ascending positive integers) for this element. title false true

The advisory title for this element.

titleKey false true

The message resources key for the advisory title for this element.

value false true Value to which this field should be initialized. [Use the corresponding bean property value]
xhtml Render HTML tags as XHTML org.apache.struts.taglib.html.XhtmlTag empty

Using this tag in a page tells all other html taglib tags to render themselves as XHTML 1.0. This is useful when composing pages with JSP includes or Tiles. <html:html xhtml="true"> has a similar effect. This tag has no attributes; you use it like this: <html:xhtml/>.

Note: Included pages do not inherit the rendering style of the including page. Each JSP fragment or Tile must use this tag to render as XHTML.

libstruts1.2-java-1.2.9/contrib/struts-el/doc/userGuide/struts-logic-el.xml0000644000175000017500000012624010404045252027347 0ustar arnaudarnaud00000000000000 Craig R. McClanahan David M. Karr The Struts Framework Project - JSTL Integration - Logic Tags 1.2 1.1 logic Struts Logic Tags http://struts.apache.org/tags-logic-el

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.

For tags that do value comparisons (equal, greaterEqual, greaterThan, lessEqual, lessThan, notEqual), the following rules apply:

  • The specified value is examined. If it can be converted successfully to a double or a long, it is assumed that the ultimate comparison will be numeric (either floating point or integer). Otherwise, a String comparison will be performed.
  • The variable to be compared to is retrieved, based on the selector attribute(s) (cookie, header, name, parameter, property) present on this tag. It will be converted to the appropriate type for the comparison, as determined above.
  • If the specified variable or property returns null, it will be coerced to a zero-length string before the comparison occurs.
  • 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 true result.

For tags that do substring matching (match, notMatch), the following rules apply:

  • The specified variable is retrieved, based on the selector attribute(s) (cookie, header, name, parameter, property) present on this tag. The variable is converted to a String, if necessary.
  • A request time exception will be thrown if the specified variable cannot be retrieved, or has a null value.
  • The specified value is checked for existence as a substring of the variable, in the position specified by the location attribute, as follows: at the beginning (if location is set to start), at the end (if location is set to end), or anywhere (if location is not specified).

Many of the tags in this tag library will throw a JspException 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 <%@ page %> 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 org.apache.struts.action.EXCEPTION.

Struts-logic tags NOT implemented

This library, a derivation of the normal "struts-logic" library, provides the functionality of the Struts logic tags, but assumes the presence of the JavaServer Pages Standard Library (JSTL), and uses the JSTL expression engine (hereafter abbreviated in many places as just "el") to evaluate attribute values instead of using JSP runtime expressions (sometimes called "rtexprvalues").

Because it is assumed this library will be used with the JSTL and the new EL engine, there are some tags in the struts-logic library which provide functionality which is entirely subsumed by the JSTL. This section lists each struts-logic tag which is NOT implemented in the struts-logic-el library, and describes the JSTL tag which can be used instead of the Struts tag.

Struts-Logic Tag JSTL Tag
<logic:empty> This functionality is subsumed by the JSTL <c:if>, <c:when> tags and the empty function in the JSTL EL.

Example: <c:if test="${empty var}">CONTENT</if>

forward Forward control to the page specified by the specified ActionForward entry. org.apache.strutsel.taglib.logic.ELForwardTag empty

Performs a PageContext.forward() or HttpServletResponse.sendRedirect() call for the global ActionForward entry for the specified name. URL rewriting will occur automatically if a redirect is performed.

name true true

The logical name of the global ActionForward entry that identifies the destination, and forwarding approach, to be used. Note: forwarding to Tiles definitions is not supported from this tag. You should forward to them from an Action subclass.

iterate Repeat the nested body content of this tag over a specified collection. org.apache.strutsel.taglib.logic.ELIterateTag org.apache.struts.taglib.logic.IterateTei JSP

Repeats the nested body content of this tag once for every element of the specified collection, which must be an Iterator, a Collection, a Map (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:

  • As a runtime expression specified as the value of the collection attribute.
  • As a JSP bean specified by the name attribute.
  • As the property, specified by the property, of the JSP bean specified by the name attribute.

The collection to be iterated over MUST conform to one of the following requirements in order for iteration to be successful:

  • An array of Java objects or primitives.
  • An implementation of java.util.Collection, including ArrayList and Vector.
  • An implementation of java.util.Enumeration.
  • An implementation of java.util.Iterator.
  • An implementation of java.util.Map, including HashMap, Hashtable, and TreeMap. NOTE - See below for additional information about accessing Maps.

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 Map, the exposed object is of type Map.Entry that has two properties:

  • key - The key under which this item is stored in the underlying Map.
  • value - The value that corresponds to this key.

So, if you wish to iterate over the values of a Hashtable, you would implement code like the following:

<logic-el:iterate id="element" name="myhashtable">
Next element is <bean:write name="element" property="value"/>
</logic-el:iterate>

If the collection you are iterating over can contain null values, the loop will still be performed but no page scope attribute (named by the id attribute) will be created for that loop iteration. You can use the <logic-el:present> and <logic-el:notPresent> tags to test for this case.

collection false true

A runtime expression that evaluates to a collection (conforming to the requirements listed above) to be iterated over.

id true false

The name of a page scope JSP bean that will contain the current element of the collection on each iteration, if it is not null.

indexId false false

The name of a page scope JSP bean that will contain the current index of the collection on each iteration.

length false true

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 java.lang.Integer that defines the desired value. If not present, there will be no limit on the number of iterations performed.

name false true

The name of the JSP bean containing the collection to be iterated (if property is not specified), or the JSP bean whose property getter returns the collection to be iterated (if property is specified).

offset false true

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 java.lang.Integer that defines the desired value. If not present, zero is assumed (meaning that the collection will be iterated from the beginning.

property false true

Name of the property, of the JSP bean specified by name, whose getter returns the collection to be iterated.

scope false true

The bean scope within which to search for the bean named by the name property, or "any scope" if not specified.

type false true

Fully qualified Java class name of the element to be exposed through the JSP bean named from the id 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.

match Evaluate the nested body content of this tag if the specified value is an appropriate substring of the requested variable. org.apache.strutsel.taglib.logic.ELMatchTag JSP

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 location attribute), the nested body content of this tag is evaluated.

cookie false true

The variable to be matched is the value of the cookie whose name is specified by this attribute.

expr false true

A specific value to be compared with, either a static value, or an EL value.

header false true

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.

location false true

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 start or end) of the variable string.

name false true

The variable to be matched is the JSP bean specified by this attribute, if property is not specified, or the value of the specified property of this bean, if property is specified.

parameter false true

The variable to be matched is the first, or only, value of the request parameter specified by this attribute.

property false true

The variable to be matched is the property (of the bean specified by the name attribute) specified by this attribute. The property reference can be simple, nested, and/or indexed.

scope false true

The bean scope within which to search for the bean named by the name property, or "any scope" if not specified.

value true true

The constant value which is checked for existence as a substring of the specified variable.

messagesNotPresent Generate the nested body content of this tag if the specified message is not present in this request. org.apache.strutsel.taglib.logic.ELMessagesNotPresentTag JSP Struts 1.1

Evaluates the nested body content of this tag if an ActionMessages object, ActionErrors object, a String, or a String array is not in request scope. If such a bean is not found, nothing will be rendered.

name false true

The parameter key to retrieve the message from request scope.

property false true

Name of the property for which messages should be retrieved. If not specified, all messages (regardless of property) are retrieved.

message false true

By default the tag will retrieve the request scope bean it will iterate over from the Action.ERROR_KEY constant string, but if this attribute is set to 'true' the request scope bean will be retrieved from the Action.MESSAGE_KEY constant string. Also if this is set to 'true', any value assigned to the name attribute will be ignored.

messagesPresent Generate the nested body content of this tag if the specified message is present in this request. org.apache.strutsel.taglib.logic.ELMessagesPresentTag JSP Struts 1.1

Evaluates the nested body content of this tag if an ActionMessages object, ActionErrors object, a String, or a String array is in request scope. If such a bean is not found, nothing will be rendered.

name false true

The parameter key to retrieve the message from request scope.

property false true

Name of the property for which messages should be retrieved. If not specified, all messages (regardless of property) are retrieved.

message false true

By default the tag will retrieve the request scope bean it will iterate over from the Action.ERROR_KEY constant string, but if this attribute is set to 'true' the request scope bean will be retrieved from the Action.MESSAGE_KEY constant string. Also if this is set to 'true', any value assigned to the name attribute will be ignored.

notMatch Evaluate the nested body content of this tag if the specified value is not an appropriate substring of the requested variable. org.apache.strutsel.taglib.logic.ELNotMatchTag JSP

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 location attribute), the nested body content of this tag is evaluated.

cookie false true

The variable to be matched is the value of the cookie whose name is specified by this attribute.

expr false true

A specific value to be compared with, either a static value, or an EL value.

header false true

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.

location false true

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 start or end) of the variable string.

name false true

The variable to be matched is the JSP bean specified by this attribute, if property is not specified, or the value of the specified property of this bean, if property is specified.

parameter false true

The variable to be matched is the first, or only, value of the request parameter specified by this attribute.

property false true

The variable to be matched is the property (of the bean specified by the name attribute) specified by this attribute. The property reference can be simple, nested, and/or indexed.

scope false true

The bean scope within which to search for the bean named by the name property, or "any scope" if not specified.

value true true

The constant value which is checked for existence as a substring of the specified variable.

notPresent Generate the nested body content of this tag if the specified value is not present in this request. org.apache.strutsel.taglib.logic.ELNotPresentTag JSP

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 is not present. Only one of the attributes may be used in one occurrence of this tag, unless you use the property attribute, in which case the name attribute is also required.

cookie false true

Checks for the existence of a cookie with the specified name.

header false true

Checks for the existence of an HTTP header with the specified name. The name match is performed in a case insensitive manner.

name false true

Checks for the existence of a JSP bean, in any scope, with the specified name. If property is also specified, checks for a non-null property value for the specified property.

parameter false true

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.

property false true

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 name attribute. Property references can be simple, nested, and/or indexed.

role false true

Checks whether the currently authenticated user (if any) has been associated with the specified security role.

scope false true

The bean scope within which to search for the bean named by the name property, or "any scope" if not specified.

user false true

Checks whether the currently authenticated user principal has the specified name.

present Generate the nested body content of this tag if the specified value is present in this request. org.apache.strutsel.taglib.logic.ELPresentTag JSP

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 is present. Only one of the attributes may be used in one occurrence of this tag, unless you use the property attribute, in which case the name attribute is also required.

cookie false true

Checks for the existence of a cookie with the specified name.

header false true

Checks for the existence of an HTTP header with the specified name. The name match is performed in a case insensitive manner.

name false true

Checks for the existence of a JSP bean, in any scope, with the specified name. If property is also specified, checks for a non-null property value for the specified property.

parameter false true

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.

property false true

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 name attribute. Property references can be simple, nested, and/or indexed.

role false true

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: <logic-el:present role="role1,role2,role3"> code..... </logic-el:present>

scope false true

The bean scope within which to search for the bean named by the name property, or "any scope" if not specified.

user false true

Checks whether the currently authenticated user principal has the specified name.

redirect Render an HTTP Redirect org.apache.strutsel.taglib.logic.ELRedirectTag empty

Performs an HttpServletResponse.sendRedirect() 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.

The base URL for this redirect is calculated based on which of the following attributes you specify (you must specify exactly one of them):

  • forward - Use the value of this attribute as the name of a global ActionForward to be looked up, and use the module-relative or context-relative URI found there.
  • href - Use the value of this attribute unchanged.
  • page - Use the value of this attribute as an module-relative URI, and generate a server-relative URI by including the context path.

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 paramId attribute (and its associated attributes to select the value), or specify the name (and optional property) attributes to select a java.util.Map bean that contains one or more parameter ids and corresponding values.

To specify a single parameter, use the paramId attribute to define the name of the request parameter to be submitted. To specify the corresponding value, use one of the following approaches:

  • Specify only the paramName attribute - The named JSP bean (optionally scoped by the value of the paramScope attribute) must identify a value that can be converted to a String.
  • Specify both the paramName and paramProperty attributes - The specified property getter method will be called on the JSP bean identified by the paramName (and optional paramScope) attributes, in order to select a value that can be converted to a String.

If you prefer to specify a java.util.Map that contains all of the request parameters to be added to the hyperlink, use one of the following techniques:

  • Specify only the name attribute - The named JSP bean (optionally scoped by the value of the scope attribute) must identify a java.util.Map containing the parameters.
  • Specify both name and property attributes - The specified property getter method will be called on the bean identified by the name (and optional scope) attributes, in order to return the java.util.Map containing the parameters.

As the Map 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.

action false true

Logical name of a global Action 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 must specify exactly one of the action attribute, the forward attribute, the href attribute, or the page attribute.

anchor false true

Optional anchor tag ("#xxx") to be added to the generated hyperlink. Specify this value without any "#" character.

forward false true

Logical name of a global ActionForward 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 must specify exactly one of the forward attribute, the href attribute, the linkName attribute, or the page attribute.

href false true

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 must specify exactly one of the forward attribute, the href attribute, the linkName attribute, or the page attribute.

name false true

The name of a JSP bean that contains a Map representing the query parameters (if property is not specified), or a JSP bean whose property getter is called to return a Map (if property is specified).

page false true

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 must specify exactly one of the forward attribute, the href attribute, the linkName attribute, or the page attribute.

paramId false true

The name of the request parameter that will be dynamically added to the generated hyperlink. The corresponding value is defined by the paramName and (optional) paramProperty attributes, optionally scoped by the paramScope attribute

paramName false true

The name of a JSP bean that is a String containing the value for the request parameter named by paramId (if paramProperty is not specified), or a JSP bean whose property getter is called to return a String (if paramProperty is specified). The JSP bean is constrained to the bean scope specified by the paramScope property, if it is specified.

paramProperty false true

The name of a property of the bean specified by the paramName attribute, whose return value must be a String containing the value of the request parameter (named by the paramId attribute) that will be dynamically added to this hyperlink.

paramScope false true

The scope within which to search for the bean specified by the paramName attribute. If not specified, all scopes are searched.

property false true

The name of a property of the bean specified by the name attribute, whose return value must be a java.util.Map containing the query parameters to be added to the hyperlink. You must specify the name attribute if you specify this attribute.

scope false true

The scope within which to search for the bean specified by the name attribute. If not specified, all scopes are searched.

transaction false true

Set to true if you want the current transaction control token included in the generated URL for this redirect.

useLocalEncoding false true

If set to true, 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.

libstruts1.2-java-1.2.9/contrib/struts-el/doc/userGuide/struts-tiles-el.xml0000644000175000017500000006707710404045254027410 0ustar arnaudarnaud00000000000000 Cedric Dumoulin David M. Karr Tiles-EL Tag Library 1.2 1.1 tiles Tiles Tag Library http://struts.apache.org/tags-tiles-el

This tag library provides tiles tags.

Tiles were previously called Components. For historical reasons, names, pages, components and templates are used indifferently to design a tile. Also, a lot of tags and attribute names are left for backward compatibility.

To know more about tags defined in this library, check the associated documentation: tiles-doc.

insert Insert a tiles/component/template.

Insert a tiles/component/template with the possibility to pass parameters (called attribute). A tile can be seen as a procedure that can take parameters or attributes. <tiles:insert> allows to define these attributes and pass them to the inserted jsp page, called template. Attributes are defined using nested tag <tiles:put> or <tiles:putList>.

You must specify one of this tag attribute :

  • template, for inserting a tiles/component/template page,
  • component, for inserting a tiles/component/template page, (same as template)
  • page for inserting a JSP page, (same as template)
  • definition, for inserting a definition from definitions factory
  • attribute, surrounding tiles's attribute name whose value is used.
    If attribute is associated to 'direct' flag (see put), and flag is true, write attribute value (no insertion).
  • name, to let 'insert' determine the type of entities to insert. In this later case, search is done in this order : definitions, tiles/components/templates, pages.

In fact, Page, component and template, are equivalent as a tile, component or template are jsp page.

Example :


          <tiles:insert page="/basic/myLayout.jsp" flush="true">
            <tiles:put name="title"  value="My first page" />
            <tiles:put name="header" value="/common/header.jsp" />
            <tiles:put name="footer" value="/common/footer.jsp" />
            <tiles:put name="menu"   value="/basic/menu.jsp" />
            <tiles:put name="body"   value="/basic/helloBody.jsp" />
          </tiles:insert>
org.apache.strutsel.taglib.tiles.ELInsertTag JSP template false true

A string representing the URI of a tile or template (a JSP page).

'page', 'component' and 'template' are synonyms : they have exactly the same behavior.

component false true

Path (relative or absolute to webapps) of the component to insert.

'page', 'component' and 'template' are synonyms : they have exactly the same behavior.

page false true

Path (relative or absolute to webapps) of the page to insert.

'page', 'component' and 'template' are synonyms : they have exactly the same behavior.

definition false true Name of the definition to insert. Definition are defined in a centralized file. For now, only definition from factory can be inserted with this attribute. To insert a definition defined with tag <tiles:definition>, use beanName="". attribute false false Name of an attribute in current tile/component context. Value of this attribute is passed to 'name' (see attribute 'name'). name false true Name of an entity to insert. Search is done in this order : definition, attribute, [tile/component/template/page]. beanName false true

Name of the bean used as value. Bean is retrieved from specified context, if any. Otherwise, method pageContext.findAttribute is used. If beanProperty is also specified, retrieve value from the corresponding bean property.

If found bean (or property value) is instance of one of Attribute class (Direct, Instance, ...), insertion is done according to the class type. Otherwise, the toString method is called on the bean, and returned String is used as name to insert (see 'name' attribute).

beanProperty false true Bean property name. If specified, value is retrieve from this property. Support nested/indexed properties. beanScope false false Scope into which bean is searched. If not specified, method pageContext.findAttribute is used. Scope can be any JSP scope, 'component', or 'template'. In these two later cases, bean is search in tile/component/template context. flush false false True or false. If true, current page out stream is flushed before insertion. ignore false true If this attribute is set to true, and the attribute specified by the name does not exist, simply return without writing anything. The default value is false, which will cause a runtime exception to be thrown. role false true If the user is in the specified role, the tag is taken into account; otherwise, the tag is ignored (skipped). controllerUrl false true

Url of a controller called immediately before page is inserted.

Url usually denote a Struts action. Controller (action) is used to prepare data to be render by inserted Tile.

See also controlerClass. Only one of controllerUrl or controllerClass should be used.

controllerClass false true

Class type of a controller called immediately before page is inserted.

Controller is used to prepare data to be render by inserted Tile.

See also controlerUrl

Class must implements or extends one of the following :

  • org.apache.struts.tiles.Controller
  • org.apache.struts.tiles.ControllerSupport
  • org.apache.struts.action.Action (wrapper org.apache.struts.action.ActionController is used)

See also controllerUrl. Only one of controllerUrl or controllerClass should be used.

definition Create a tile /component / template definition bean. Create a tile/component/template definition as a bean. Newly created bean will be saved under specified "id", in the requested "scope". Definition tag has same syntax as insert tag. The new definition can extends a definition described in factory (XML file), and overload any previously defined parameters. org.apache.strutsel.taglib.tiles.ELDefinitionTag JSP id true false Specifies the name under which the newly created definition bean will be saved. scope false false Specifies the variable scope into which the newly defined bean will be created. If not specified, the bean will be created in page scope. template false true A string representing the URI of a tile/component/template (a JSP page). page false true URL of the template / component to insert. Same as "template". role false true Role to check before inserting this definition. If role is not defined for current user, definition is not inserted. Checking is done at insert time, not during definition process. extends false true Name of a parent definition that is used to initialize this new definition. Parent definition is searched in definitions factory. put Put an attribute into tile/component/template context. Define an attribute to pass to tile/component/template. This tag can only be used inside 'insert' or 'definition' tag. Value (or content) is specified using attribute 'value' (or 'content'), or using the tag body. It is also possible to specify the type of the value :
  • string : Content is written directly.
  • page | template : Content is included from specified URL. Name is used as an URL.
  • definition : Content come from specified definition (from factory). Name is used as definition name.
If type is specified, it is taken into account by 'get' or 'insert' inside the inserted tile.

If 'type' attribute is not specified, content is 'untyped', unless it comes from a typed bean.

Note that using 'direct="true"' is equivalent to 'type="string"'.

org.apache.strutsel.taglib.tiles.ELPutTag JSP name false false Name of the attribute. value false true Attribute value. Could be a String or an Object. Value can come from a direct assignment (value="aValue") or from a bean. One of 'value' 'content' or 'beanName' must be present. content false true Content that's put into tile scope. Synonym to value. Attribute added for compatibility with JSP Template. direct false false Determines how content is handled: true means content is printed directly; false, the default, means content is included. This is another way to specify content type. If 'direct=true' content is 'string', if 'direct=false', content is 'page'. Attribute added for compatibility with JSP Template. type false false Specify content type: string, page, template or definition.
  • String : Content is printed directly.
  • page | template : Content is included from specified URL. Name is used as an URL.
  • definition : Value is the name of a definition defined in factory (xml file). Definition will be searched in the inserted tile, in a <tiles:insert attribute="attributeName"> tag, where 'attributeName' is the name used for this tag.
If 'type' attribute is not specified, content is 'untyped', unless it comes from a typed bean.
beanName false true Name of the bean used as value. Bean is retrieved from specified context, if any. Otherwise, method pageContext.findAttribute is used. If beanProperty is specified, retrieve value from the corresponding bean property. beanProperty false true Bean property name. If specified, value is retrieve from this property. Support nested/indexed properties. beanScope false false Scope into which bean is searched. If not specified, method pageContext.findAttribute is used. Scope can be any JSP scope, 'tile', 'component', or 'template'. In these three later cases, bean is search in tile/component/template context. role false true If the user is in the specified role, the tag is taken into account; otherwise, the tag is ignored (skipped).
putList Declare a list that will be pass as attribute to tile. Declare a list that will be pass as attribute to tile. List elements are added using the tag 'add'. This tag can only be used inside 'insert' or 'definition' tag. org.apache.strutsel.taglib.tiles.ELPutListTag JSP name true false Name of the list. add Add an element to the surrounding list. Equivalent to 'put', but for list element. Add an element to the surrounding list. This tag can only be used inside putList tag. Value can come from a direct assignment (value="aValue") or from a bean. One of 'value' or 'beanName' must be present. org.apache.strutsel.taglib.tiles.ELAddTag JSP value false false Element value. Can be a String or Object. content false true Element value. Can be a String or Object. Synonym to value. Attribute added for compatibility with JSP Template. direct false false Determines how content is handled: true means content is printed directly; false, the default, means content is included. This is another way to specify content type. If 'direct=true' content is 'string', if 'direct=false', content is 'page'. Attribute added for compatibility with JSP Template. type false false Specify content type: string, page, template or instance.
  • String : Content is printed directly.
  • page | template : Content is included from specified URL. Name is used as an URL.
  • definition : Value denote a definition defined in factory (xml file). Definition will be searched in the inserted tile, in a <insert attribute="attributeName"> tag, where 'attributeName' is the name used for this tag.
If 'type' attribute is not specified, content is 'untyped', unless it comes from a typed bean.
beanName false true Name of the bean used as value. Bean is retrieved from specified context, if any. Otherwise, method pageContext.findAttribute is used. If beanProperty is specified, retrieve value from the corresponding bean property. beanProperty false true Bean property name. If specified, value is retrieve from this property. Support nested/indexed properties. beanScope false false Scope into which bean is searched. If not specified, method pageContext.findAttribute is used. Scope can be any JSP scope, 'component', or 'template'. In these two later cases, bean is search in tile/component/template context. role false true

If the user is in the specified role, the tag is taken into account; otherwise, the tag is ignored (skipped).

The role isn't taken into account if <add> tag is used in a definition.

get Gets the content from request scope that was put there by a put tag. org.apache.strutsel.taglib.tiles.ELGetTag empty

Retrieve content from tile context and include it.

Take into account the 'type' attribute.

name true true The name of the content to get from tile/component scope. ignore false true If this attribute is set to true, and the attribute specified by the name does not exist, simply return without writing anything. The default value is false, which will cause a runtime exception to be thrown. flush false false True or false. If true, current page out stream is flushed before insertion. role false true If the user is in the specified role, the tag is taken into account; otherwise, the tag is ignored (skipped).
getAsString Render the value of the specified tile/component/template attribute to the current JspWriter Retrieve the value of the specified tile/component/template attribute property, and render it to the current JspWriter as a String. The usual toString() conversions is applied on found value.

Throw a JSPException if named value is not found.

org.apache.strutsel.taglib.tiles.ELGetAttributeTag empty name true true Attribute name. ignore false true If this attribute is set to true, and the attribute specified by the name does not exist, simply return without writing anything. The default value is false, which will cause a runtime exception to be thrown. role false true If the user is in the specified role, the tag is taken into account; otherwise, the tag is ignored (skipped).
useAttribute Use attribute value inside page.

Declare a Java variable, and an attribute in the specified scope, using tile attribute value.

Java variable and attribute will have the name specified by 'id', or the original name if not specified.

org.apache.strutsel.taglib.tiles.ELUseAttributeTag empty id false false Declared attribute and variable name. classname false false Class of the declared variable. scope false false Scope of the declared attribute. Default to 'page'. name true true Tile's attribute name. ignore false true If this attribute is set to true, and the attribute specified by the name does not exist, simply return without error. The default value is false, which will cause a runtime exception to be thrown.
importAttribute Import Tile's attribute in specified context. Import attribute from tile to requested scope. Attribute name and scope are optional. If not specified, all tile attributes are imported in page scope. Once imported, an attribute can be used as any other beans from jsp contexts. org.apache.strutsel.taglib.tiles.ELImportAttributeTag empty name false true Tile's attribute name. If not specified, all attributes are imported. scope false false Scope into which attribute is imported. Default to page. ignore false true If this attribute is set to true, and the attribute specified by the name does not exist, simply return without error. The default value is false, which will cause a runtime exception to be thrown. initComponentDefinitions Initialize Tile/Component definitions factory.

Initialize Tile/Components definitions factory.

In order to use Tile/Component definitions factory, you need to initialize the factory. This is generally done in a initializing servlet. In particular, it is done in "ComponentActionServlet" if you use it. If you don't initialize factory in a servlet, you can initialize it using this tag. You need to provide the description file name, and optionally the factory classname. Initialization is done only once, at the first call of this tag. Subsequent calls are ignored (tag checks existence of the factory.

org.apache.strutsel.taglib.tiles.ELInitDefinitionsTag empty file true false Definition file name. classname false false If specified, classname of the factory to create and initialized.
libstruts1.2-java-1.2.9/contrib/struts-el/doc/project.xml0000644000175000017500000000437710404045252024032 0ustar arnaudarnaud00000000000000 Struts Framework libstruts1.2-java-1.2.9/contrib/struts-el/lib/0000755000175000017500000000000010404045254021632 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/0000755000175000017500000000000010404045252021651 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/doc/0000755000175000017500000000000010404045254022420 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/doc/stylesheets/0000755000175000017500000000000010404045254024774 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/doc/userGuide/0000755000175000017500000000000010404045254024354 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/exercise-taglib/0000755000175000017500000000000010404045252024720 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/exercise-taglib/org/0000755000175000017500000000000010404045252025507 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/exercise-taglib/org/apache/0000755000175000017500000000000010404045252026730 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/exercise-taglib/org/apache/struts/0000755000175000017500000000000010404045252030274 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/exercise-taglib/org/apache/struts/webapp/0000755000175000017500000000000010404045252031552 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/exercise-taglib/org/apache/struts/webapp/exercise/0000755000175000017500000000000010423130300033347 5ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000020010423140531011305 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/exercise-taglib/org/apache/struts/webapp/exercise/ApplicationResources.propertieslibstruts1.2-java-1.2.9/contrib/struts-el/src/exercise-taglib/org/apache/struts/webapp/exercise/Appl0000644000175000017500000000000010404045254034170 0ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000015310423140531011314 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/exercise-taglib/org/apache/struts/webapp/exercise/Coord.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/exercise-taglib/org/apache/struts/webapp/exercise/Coor0000644000175000017500000000244010404045252034206 0ustar arnaudarnaud00000000000000/* * $Id: Coord.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.exercise; /** * Simple bean to use for testing indexed tags. */ public class Coord implements java.io.Serializable { private int x; private int y; public Coord() {} public Coord(int x, int y) { this.x = x; this.y = y; } public int getX() { return (x); } public int getY() { return (y); } public void setX(int x) { this.x = x; } public void setY(int y) { this.y = y; } public String toString() { return ("Coord[" + "x=" + x + ";y=" + y + "]"); } } ././@LongLink0000644000175000017500000000016310423140531011315 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/exercise-taglib/org/apache/struts/webapp/exercise/DynaSetAction.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/exercise-taglib/org/apache/struts/webapp/exercise/Dyna0000644000175000017500000000311510404045252034177 0ustar arnaudarnaud00000000000000/* * $Id: DynaSetAction.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.exercise; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.DynaActionForm; public class DynaSetAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { DynaActionForm dynaActionForm = (DynaActionForm) form; dynaActionForm.set("foo", "alpha"); dynaActionForm.set("bar", "beta"); return (mapping.findForward("success")); } } ././@LongLink0000644000175000017500000000016710423140531011321 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/exercise-taglib/org/apache/struts/webapp/exercise/HtmlSettersAction.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/exercise-taglib/org/apache/struts/webapp/exercise/Html0000644000175000017500000000444310404045252034215 0ustar arnaudarnaud00000000000000/* * $Id: HtmlSettersAction.java 123585 2004-12-29 00:43:33Z martinc $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.exercise; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; /** * Do-nothing action that accepts the changes made automatically in our form * bean, and then returns control to the input form (if "Save" was pressed) * or the main menu (if "Cancel" was pressed). * * @author Craig R. McClanahan * @version $Rev: 123585 $ $Date: 2004-12-29 00:43:33 +0000 (Wed, 29 Dec 2004) $ */ public class HtmlSettersAction extends Action { /** * Forward to the input form if "Save" was pressed or the main menu * if "Cancel" was pressed. * * @param mapping The ActionMapping used to select this instance * @param actionForm The optional ActionForm bean for this request * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception Exception if business logic throws an exception */ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { if (isCancelled(request)) return (mapping.findForward("index")); else return (mapping.findForward("input")); } } ././@LongLink0000644000175000017500000000015610423140531011317 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/exercise-taglib/org/apache/struts/webapp/exercise/TestBean.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/exercise-taglib/org/apache/struts/webapp/exercise/Test0000644000175000017500000002562210404045252034232 0ustar arnaudarnaud00000000000000/* * $Id: TestBean.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.exercise; import java.util.Collection; import java.util.Vector; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; import org.apache.struts.util.LabelValueBean; /** * General purpose test bean for Struts custom tag tests. * * @author Craig R. McClanahan * @author Martin F N Cooper * @version $Rev: 54933 $ $Date: 2004-10-16 18:04:52 +0100 (Sat, 16 Oct 2004) $ */ public class TestBean extends ActionForm { // ------------------------------------------------------------- Properties /** * A collection property where the elements of the collection are * of type LabelValueBean. */ private Collection beanCollection = null; public Collection getBeanCollection() { if (beanCollection == null) { Vector entries = new Vector(10); entries.add(new LabelValueBean("Label 0", "Value 0")); entries.add(new LabelValueBean("Label 1", "Value 1")); entries.add(new LabelValueBean("Label 2", "Value 2")); entries.add(new LabelValueBean("Label 3", "Value 3")); entries.add(new LabelValueBean("Label 4", "Value 4")); entries.add(new LabelValueBean("Label 5", "Value 5")); entries.add(new LabelValueBean("Label 6", "Value 6")); entries.add(new LabelValueBean("Label 7", "Value 7")); entries.add(new LabelValueBean("Label 8", "Value 8")); entries.add(new LabelValueBean("Label 9", "Value 9")); beanCollection = entries; } return (beanCollection); } public void setBeanCollection(Collection beanCollection) { this.beanCollection = beanCollection; } /** * A multiple-String SELECT element using a bean collection. */ private String[] beanCollectionSelect = { "Value 1", "Value 3", "Value 5" }; public String[] getBeanCollectionSelect() { return (this.beanCollectionSelect); } public void setBeanCollectionSelect(String beanCollectionSelect[]) { this.beanCollectionSelect = beanCollectionSelect; } /** * A boolean property whose initial value is true. */ private boolean booleanProperty = true; public boolean getBooleanProperty() { return (booleanProperty); } public void setBooleanProperty(boolean booleanProperty) { this.booleanProperty = booleanProperty; } /** * A multiple-String SELECT element using a collection. */ private String[] collectionSelect = { "Value 2", "Value 4", "Value 6" }; public String[] getCollectionSelect() { return (this.collectionSelect); } public void setCollectionSelect(String collectionSelect[]) { this.collectionSelect = collectionSelect; } /** * A double property. */ private double doubleProperty = 321.0; public double getDoubleProperty() { return (this.doubleProperty); } public void setDoubleProperty(double doubleProperty) { this.doubleProperty = doubleProperty; } /** * A boolean property whose initial value is false */ private boolean falseProperty = false; public boolean getFalseProperty() { return (falseProperty); } public void setFalseProperty(boolean falseProperty) { this.falseProperty = falseProperty; } /** * A float property. */ private float floatProperty = (float) 123.0; public float getFloatProperty() { return (this.floatProperty); } public void setFloatProperty(float floatProperty) { this.floatProperty = floatProperty; } /** * Integer arrays that are accessed as an array as well as indexed. */ private int intArray[] = { 0, 10, 20, 30, 40 }; public int[] getIntArray() { return (this.intArray); } public void setIntArray(int intArray[]) { this.intArray = intArray; } private int intIndexed[] = { 0, 10, 20, 30, 40 }; public int getIntIndexed(int index) { return (intIndexed[index]); } public void setIntIndexed(int index, int value) { intIndexed[index] = value; } private int intMultibox[] = new int[0]; public int[] getIntMultibox() { return (this.intMultibox); } public void setIntMultibox(int intMultibox[]) { this.intMultibox = intMultibox; } /** * An integer property. */ private int intProperty = 123; public int getIntProperty() { return (this.intProperty); } public void setIntProperty(int intProperty) { this.intProperty = intProperty; } /** * A long property. */ private long longProperty = 321; public long getLongProperty() { return (this.longProperty); } public void setLongProperty(long longProperty) { this.longProperty = longProperty; } /** * A multiple-String SELECT element. */ private String[] multipleSelect = { "Multiple 3", "Multiple 5", "Multiple 7" }; public String[] getMultipleSelect() { return (this.multipleSelect); } public void setMultipleSelect(String multipleSelect[]) { this.multipleSelect = multipleSelect; } /** * A nested reference to another test bean (populated as needed). */ private TestBean nested = null; public TestBean getNested() { if (nested == null) nested = new TestBean(); return (nested); } /** * A String property with an initial value of null. */ private String nullProperty = null; public String getNullProperty() { return (this.nullProperty); } public void setNullProperty(String nullProperty) { this.nullProperty = nullProperty; } /** * A short property. */ private short shortProperty = (short) 987; public short getShortProperty() { return (this.shortProperty); } public void setShortProperty(short shortProperty) { this.shortProperty = shortProperty; } /** * A single-String value for a SELECT element. */ private String singleSelect = "Single 5"; public String getSingleSelect() { return (this.singleSelect); } public void setSingleSelect(String singleSelect) { this.singleSelect = singleSelect; } /** * String arrays that are accessed as an array as well as indexed. */ private String stringArray[] = { "String 0", "String 1", "String 2", "String 3", "String 4" }; public String[] getStringArray() { return (this.stringArray); } public void setStringArray(String stringArray[]) { this.stringArray = stringArray; } private String stringIndexed[] = { "String 0", "String 1", "String 2", "String 3", "String 4" }; public String getStringIndexed(int index) { return (stringIndexed[index]); } public void setStringIndexed(int index, String value) { stringIndexed[index] = value; } private String indexedStrings[] = { "alpha", "beta", "gamma", "delta", "epsilon" }; public String[] getIndexedStrings() { return (indexedStrings); } private String stringMultibox[] = new String[0]; public String[] getStringMultibox() { return (this.stringMultibox); } public void setStringMultibox(String stringMultibox[]) { this.stringMultibox = stringMultibox; } /** * A String property. */ private String stringProperty = "This is a string"; public String getStringProperty() { return (this.stringProperty); } public void setStringProperty(String stringProperty) { this.stringProperty = stringProperty; } /** * An empty String property. */ private String emptyStringProperty = ""; public String getEmptyStringProperty() { return (this.emptyStringProperty); } public void setEmptyStringProperty(String emptyStringProperty) { this.emptyStringProperty = emptyStringProperty; } /** * A list of coordinate objects. */ private Coord[] coords = { new Coord(0, 0), new Coord(0, 1), new Coord(1, 1), new Coord(2, 0), new Coord(2, 1) }; public Coord[] getCoords() { return (coords); } public Coord getCoord(int index) { return (coords[index]); } public void setCoord(int index, Coord coord) { coords[index] = coord; } /** * A list of images. */ public String images[] = {"T1.gif", "T2.gif"}; public String[] getImages() { return (images); } private Coord[] imageCoords = { new Coord(0, 0), new Coord(0, 0) }; public Coord[] getImageCoords() { return (imageCoords); } public Coord getImageCoord(int index) { return (imageCoords[index]); } public void setImageCoord(int index, Coord coord) { imageCoords[index] = coord; } /** * A property that allows a null value but is still used in a SELECT. */ private String withNulls = null; public String getWithNulls() { return (this.withNulls); } public void setWithNulls(String withNulls) { this.withNulls = withNulls; } // --------------------------------------------------------- Public Methods /** * Reset the properties that will be received as input. */ public void reset(ActionMapping mapping, HttpServletRequest request) { booleanProperty = false; collectionSelect = new String[0]; intMultibox = new int[0]; multipleSelect = new String[0]; stringMultibox = new String[0]; if (nested != null) nested.reset(mapping, request); } } libstruts1.2-java-1.2.9/contrib/struts-el/src/share/0000755000175000017500000000000010404045252022753 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/0000755000175000017500000000000010404045252023542 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/0000755000175000017500000000000010404045252024763 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/0000755000175000017500000000000010423130300026636 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/0000755000175000017500000000000010404045252030112 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/bean/0000755000175000017500000000000010423130300031005 5ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000014610423140531011316 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/bean/ELIncludeTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/bean/ELIncludeTag.jav0000644000175000017500000001626610404045254033776 0ustar arnaudarnaud00000000000000/* * $Id: ELIncludeTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.bean; import org.apache.struts.taglib.bean.IncludeTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Generate a URL-encoded include to the specified URI. *

* This class is a subclass of the class * org.apache.struts.taglib.bean.IncludeTag which * provides most of the described functionality. This subclass allows all * attribute values to be specified as expressions utilizing the JavaServer * Pages Standard Library expression language. * * @version $Rev: 54933 $ */ public class ELIncludeTag extends IncludeTag { /** * Instance variable mapped to "anchor" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String anchorExpr; /** * Instance variable mapped to "forward" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String forwardExpr; /** * Instance variable mapped to "href" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String hrefExpr; /** * Instance variable mapped to "id" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String idExpr; /** * Instance variable mapped to "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String nameExpr; /** * Instance variable mapped to "page" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String pageExpr; /** * Instance variable mapped to "transaction" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String transactionExpr; /** * Getter method for "anchor" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAnchorExpr() { return (anchorExpr); } /** * Getter method for "forward" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getForwardExpr() { return (forwardExpr); } /** * Getter method for "href" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getHrefExpr() { return (hrefExpr); } /** * Getter method for "id" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getIdExpr() { return (idExpr); } /** * Getter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getNameExpr() { return (nameExpr); } /** * Getter method for "page" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPageExpr() { return (pageExpr); } /** * Getter method for "transaction" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTransactionExpr() { return (transactionExpr); } /** * Setter method for "anchor" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAnchorExpr(String anchorExpr) { this.anchorExpr = anchorExpr; } /** * Setter method for "forward" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setForwardExpr(String forwardExpr) { this.forwardExpr = forwardExpr; } /** * Setter method for "href" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setHrefExpr(String hrefExpr) { this.hrefExpr = hrefExpr; } /** * Setter method for "id" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setIdExpr(String idExpr) { this.idExpr = idExpr; } /** * Setter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setNameExpr(String nameExpr) { this.nameExpr = nameExpr; } /** * Setter method for "page" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPageExpr(String pageExpr) { this.pageExpr = pageExpr; } /** * Setter method for "transaction" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTransactionExpr(String transactionExpr) { this.transactionExpr = transactionExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setAnchorExpr(null); setForwardExpr(null); setHrefExpr(null); setIdExpr(null); setNameExpr(null); setPageExpr(null); setTransactionExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return (super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; Boolean bool = null; if ((string = EvalHelper.evalString("anchor", getAnchorExpr(), this, pageContext)) != null) setAnchor(string); if ((string = EvalHelper.evalString("forward", getForwardExpr(), this, pageContext)) != null) setForward(string); if ((string = EvalHelper.evalString("href", getHrefExpr(), this, pageContext)) != null) setHref(string); if ((string = EvalHelper.evalString("id", getIdExpr(), this, pageContext)) != null) setId(string); if ((string = EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) setName(string); if ((string = EvalHelper.evalString("page", getPageExpr(), this, pageContext)) != null) setPage(string); if ((bool = EvalHelper.evalBoolean("transaction", getTransactionExpr(), this, pageContext)) != null) setTransaction(bool.booleanValue()); } } ././@LongLink0000644000175000017500000000015610423140531011317 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/bean/ELIncludeTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/bean/ELIncludeTagBean0000644000175000017500000000666410404045254034006 0ustar arnaudarnaud00000000000000/* * $Id: ELIncludeTagBeanInfo.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.bean; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.beans.SimpleBeanInfo; import java.util.ArrayList; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.bean.ELIncludeTag class. It is * needed to override the default mapping of custom tag attribute names to * class attribute names. *

* This is because the value of the unevaluated EL expression has to be kept * separately from the evaluated value, which is stored in the base class. This * is related to the fact that the JSP compiler can choose to reuse different * tag instances if they received the same original attribute values, and the * JSP compiler can choose to not re-call the setter methods, because it can * assume the same values are already set. */ public class ELIncludeTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("anchor", ELIncludeTag.class, null, "setAnchorExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("forward", ELIncludeTag.class, null, "setForwardExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("href", ELIncludeTag.class, null, "setHrefExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("id", ELIncludeTag.class, null, "setIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("name", ELIncludeTag.class, null, "setNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("page", ELIncludeTag.class, null, "setPageExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("transaction", ELIncludeTag.class, null, "setTransactionExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } ././@LongLink0000644000175000017500000000014610423140531011316 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/bean/ELMessageTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/bean/ELMessageTag.jav0000644000175000017500000002423310404045254033770 0ustar arnaudarnaud00000000000000/* * $Id: ELMessageTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.bean; import javax.servlet.jsp.JspException; import org.apache.struts.taglib.bean.MessageTag; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Custom tag that retrieves an internationalized messages string (with * optional parametric replacement) from the ActionResources * object stored as a context attribute by our associated * ActionServlet implementation. *

* This class is a subclass of the class * org.apache.struts.taglib.bean.MessageTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 54933 $ */ public class ELMessageTag extends MessageTag { /** * Instance variable mapped to "arg0" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String arg0Expr; /** * Instance variable mapped to "arg1" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String arg1Expr; /** * Instance variable mapped to "arg2" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String arg2Expr; /** * Instance variable mapped to "arg3" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String arg3Expr; /** * Instance variable mapped to "arg4" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String arg4Expr; /** * Instance variable mapped to "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String bundleExpr; /** * Instance variable mapped to "key" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String keyExpr; /** * Instance variable mapped to "locale" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String localeExpr; /** * Instance variable mapped to "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String nameExpr; /** * Instance variable mapped to "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String propertyExpr; /** * Instance variable mapped to "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String scopeExpr; /** * Getter method for "arg0" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getArg0Expr() { return (arg0Expr); } /** * Getter method for "arg1" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getArg1Expr() { return (arg1Expr); } /** * Getter method for "arg2" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getArg2Expr() { return (arg2Expr); } /** * Getter method for "arg3" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getArg3Expr() { return (arg3Expr); } /** * Getter method for "arg4" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getArg4Expr() { return (arg4Expr); } /** * Getter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getBundleExpr() { return (bundleExpr); } /** * Getter method for "key" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getKeyExpr() { return (keyExpr); } /** * Getter method for "locale" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getLocaleExpr() { return (localeExpr); } /** * Getter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getNameExpr() { return (nameExpr); } /** * Getter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPropertyExpr() { return (propertyExpr); } /** * Getter method for "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getScopeExpr() { return (scopeExpr); } /** * Setter method for "arg0" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setArg0Expr(String arg0Expr) { this.arg0Expr = arg0Expr; } /** * Setter method for "arg1" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setArg1Expr(String arg1Expr) { this.arg1Expr = arg1Expr; } /** * Setter method for "arg2" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setArg2Expr(String arg2Expr) { this.arg2Expr = arg2Expr; } /** * Setter method for "arg3" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setArg3Expr(String arg3Expr) { this.arg3Expr = arg3Expr; } /** * Setter method for "arg4" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setArg4Expr(String arg4Expr) { this.arg4Expr = arg4Expr; } /** * Setter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setBundleExpr(String bundleExpr) { this.bundleExpr = bundleExpr; } /** * Setter method for "key" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setKeyExpr(String keyExpr) { this.keyExpr = keyExpr; } /** * Setter method for "locale" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setLocaleExpr(String localeExpr) { this.localeExpr = localeExpr; } /** * Setter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setNameExpr(String nameExpr) { this.nameExpr = nameExpr; } /** * Setter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPropertyExpr(String propertyExpr) { this.propertyExpr = propertyExpr; } /** * Setter method for "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setScopeExpr(String scopeExpr) { this.scopeExpr = scopeExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setArg0Expr(null); setArg1Expr(null); setArg2Expr(null); setArg3Expr(null); setArg4Expr(null); setBundleExpr(null); setKeyExpr(null); setLocaleExpr(null); setNameExpr(null); setPropertyExpr(null); setScopeExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return (super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; if ((string = EvalHelper.evalString("arg0", getArg0Expr(), this, pageContext)) != null) setArg0(string); if ((string = EvalHelper.evalString("arg1", getArg1Expr(), this, pageContext)) != null) setArg1(string); if ((string = EvalHelper.evalString("arg2", getArg2Expr(), this, pageContext)) != null) setArg2(string); if ((string = EvalHelper.evalString("arg3", getArg3Expr(), this, pageContext)) != null) setArg3(string); if ((string = EvalHelper.evalString("arg4", getArg4Expr(), this, pageContext)) != null) setArg4(string); if ((string = EvalHelper.evalString("bundle", getBundleExpr(), this, pageContext)) != null) setBundle(string); if ((string = EvalHelper.evalString("key", getKeyExpr(), this, pageContext)) != null) setKey(string); if ((string = EvalHelper.evalString("locale", getLocaleExpr(), this, pageContext)) != null) setLocale(string); if ((string = EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) setName(string); if ((string = EvalHelper.evalString("property", getPropertyExpr(), this, pageContext)) != null) setProperty(string); if ((string = EvalHelper.evalString("scope", getScopeExpr(), this, pageContext)) != null) setScope(string); } } ././@LongLink0000644000175000017500000000015610423140531011317 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/bean/ELMessageTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/bean/ELMessageTagBean0000644000175000017500000000742510404045252034001 0ustar arnaudarnaud00000000000000/* * $Id: ELMessageTagBeanInfo.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.bean; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.bean.ELMessageTag class. It is * needed to override the default mapping of custom tag attribute names to * class attribute names. */ public class ELMessageTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("arg0", ELMessageTag.class, null, "setArg0Expr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("arg1", ELMessageTag.class, null, "setArg1Expr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("arg2", ELMessageTag.class, null, "setArg2Expr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("arg3", ELMessageTag.class, null, "setArg3Expr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("arg4", ELMessageTag.class, null, "setArg4Expr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("bundle", ELMessageTag.class, null, "setBundleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("key", ELMessageTag.class, null, "setKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("locale", ELMessageTag.class, null, "setLocaleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("name", ELMessageTag.class, null, "setNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("property", ELMessageTag.class, null, "setPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("scope", ELMessageTag.class, null, "setScopeExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/bean/ELPageTag.java0000644000175000017500000000704010404045252033414 0ustar arnaudarnaud00000000000000/* * $Id: ELPageTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.bean; import org.apache.struts.taglib.bean.PageTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Define a scripting variable that exposes the requested page context * item as a scripting variable and a page scope bean. *

* This class is a subclass of the class * org.apache.struts.taglib.bean.PageTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 54933 $ */ public class ELPageTag extends PageTag { /** * Instance variable mapped to "id" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String idExpr; /** * Instance variable mapped to "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String propertyExpr; /** * Getter method for "id" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getIdExpr() { return (idExpr); } /** * Getter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPropertyExpr() { return (propertyExpr); } /** * Setter method for "id" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setIdExpr(String idExpr) { this.idExpr = idExpr; } /** * Setter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPropertyExpr(String propertyExpr) { this.propertyExpr = propertyExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setIdExpr(null); setPropertyExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return (super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; if ((string = EvalHelper.evalString("id", getIdExpr(), this, pageContext)) != null) setId(string); if ((string = EvalHelper.evalString("property", getPropertyExpr(), this, pageContext)) != null) setProperty(string); } } ././@LongLink0000644000175000017500000000015310423140531011314 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/bean/ELPageTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/bean/ELPageTagBeanInf0000644000175000017500000000360610404045254033725 0ustar arnaudarnaud00000000000000/* * $Id: ELPageTagBeanInfo.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.bean; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.bean.ELPageTag class. It is * needed to override the default mapping of custom tag attribute names to * class attribute names. */ public class ELPageTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("id", ELPageTag.class, null, "setIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("property", ELPageTag.class, null, "setPropertyExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } ././@LongLink0000644000175000017500000000014710423140531011317 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/bean/ELResourceTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/bean/ELResourceTag.ja0000644000175000017500000001030510404045254034000 0ustar arnaudarnaud00000000000000/* * $Id: ELResourceTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.bean; import org.apache.struts.taglib.bean.ResourceTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Define a scripting variable based on the contents of the specified * web application resource. *

* This class is a subclass of the class * org.apache.struts.taglib.bean.ResourceTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 54933 $ */ public class ELResourceTag extends ResourceTag { /** * Instance variable mapped to "id" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String idExpr; /** * Instance variable mapped to "input" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String inputExpr; /** * Instance variable mapped to "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String nameExpr; /** * Getter method for "id" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getIdExpr() { return (idExpr); } /** * Getter method for "input" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getInputExpr() { return (inputExpr); } /** * Getter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getNameExpr() { return (nameExpr); } /** * Setter method for "id" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setIdExpr(String idExpr) { this.idExpr = idExpr; } /** * Setter method for "input" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setInputExpr(String inputExpr) { this.inputExpr = inputExpr; } /** * Setter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setNameExpr(String nameExpr) { this.nameExpr = nameExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setIdExpr(null); setInputExpr(null); setNameExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return (super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; if ((string = EvalHelper.evalString("id", getIdExpr(), this, pageContext)) != null) setId(string); if ((string = EvalHelper.evalString("input", getInputExpr(), this, pageContext)) != null) setInput(string); if ((string = EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) setName(string); } } ././@LongLink0000644000175000017500000000015710423140531011320 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/bean/ELResourceTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/bean/ELResourceTagBea0000644000175000017500000000415110404045254034021 0ustar arnaudarnaud00000000000000/* * $Id: ELResourceTagBeanInfo.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.bean; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.bean.ELResourceTag class. It is * needed to override the default mapping of custom tag attribute names to * class attribute names. */ public class ELResourceTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("id", ELResourceTag.class, null, "setIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("input", ELResourceTag.class, null, "setInputExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("name", ELResourceTag.class, null, "setNameExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/bean/ELSizeTag.java0000644000175000017500000001346010404045254033457 0ustar arnaudarnaud00000000000000/* * $Id: ELSizeTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.bean; import org.apache.struts.taglib.bean.SizeTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Define a scripting variable that will contain the number of elements * found in a specified array, Collection, or Map. *

* This class is a subclass of the class * org.apache.struts.taglib.bean.SizeTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 54933 $ */ public class ELSizeTag extends SizeTag { /** * Instance variable mapped to "collection" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String collectionExpr; /** * Instance variable mapped to "id" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String idExpr; /** * Instance variable mapped to "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String nameExpr; /** * Instance variable mapped to "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String propertyExpr; /** * Instance variable mapped to "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String scopeExpr; /** * Getter method for "collection" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getCollectionExpr() { return (collectionExpr); } /** * Getter method for "id" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getIdExpr() { return (idExpr); } /** * Getter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getNameExpr() { return (nameExpr); } /** * Getter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPropertyExpr() { return (propertyExpr); } /** * Getter method for "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getScopeExpr() { return (scopeExpr); } /** * Setter method for "collection" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setCollectionExpr(String collectionExpr) { this.collectionExpr = collectionExpr; } /** * Setter method for "id" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setIdExpr(String idExpr) { this.idExpr = idExpr; } /** * Setter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setNameExpr(String nameExpr) { this.nameExpr = nameExpr; } /** * Setter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPropertyExpr(String propertyExpr) { this.propertyExpr = propertyExpr; } /** * Setter method for "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setScopeExpr(String scopeExpr) { this.scopeExpr = scopeExpr; } /** * Releases state of custom tag so this instance can be reused. */ public void release() { super.release(); setCollectionExpr(null); setIdExpr(null); setNameExpr(null); setPropertyExpr(null); setScopeExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return (super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; Object object = null; if ((object = EvalHelper.eval("collection", getCollectionExpr(), this, pageContext)) != null) setCollection(object); if ((string = EvalHelper.evalString("id", getIdExpr(), this, pageContext)) != null) setId(string); if ((string = EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) setName(string); if ((string = EvalHelper.evalString("property", getPropertyExpr(), this, pageContext)) != null) setProperty(string); if ((string = EvalHelper.evalString("scope", getScopeExpr(), this, pageContext)) != null) setScope(string); } } ././@LongLink0000644000175000017500000000015310423140531011314 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/bean/ELSizeTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/bean/ELSizeTagBeanInf0000644000175000017500000000570510404045254033765 0ustar arnaudarnaud00000000000000/* * $Id: ELSizeTagBeanInfo.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.bean; import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; import java.beans.SimpleBeanInfo; import java.util.ArrayList; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.bean.ELSizeTag class. It is needed * to override the default mapping of custom tag attribute names to class * attribute names. *

* This is because the value of the unevaluated EL expression has to be kept * separately from the evaluated value, which is stored in the base class. This * is related to the fact that the JSP compiler can choose to reuse different * tag instances if they received the same original attribute values, and the * JSP compiler can choose to not re-call the setter methods, because it can * assume the same values are already set. */ public class ELSizeTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("collection", ELSizeTag.class, null, "setCollectionExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("id", ELSizeTag.class, null, "setIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("name", ELSizeTag.class, null, "setNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("property", ELSizeTag.class, null, "setPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("scope", ELSizeTag.class, null, "setScopeExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } ././@LongLink0000644000175000017500000000014510423140531011315 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/bean/ELStrutsTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/bean/ELStrutsTag.java0000644000175000017500000001202010404045254034040 0ustar arnaudarnaud00000000000000/* * $Id: ELStrutsTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.bean; import org.apache.struts.taglib.bean.StrutsTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Define a scripting variable that exposes the requested Struts * internal configuraton object. *

* This class is a subclass of the class * org.apache.struts.taglib.bean.StrutsTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 54933 $ */ public class ELStrutsTag extends StrutsTag { /** * Instance variable mapped to "id" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String idExpr; /** * Instance variable mapped to "formBean" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String formBeanExpr; /** * Instance variable mapped to "forward" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String forwardExpr; /** * Instance variable mapped to "mapping" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String mappingExpr; /** * Getter method for "id" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getIdExpr() { return (idExpr); } /** * Getter method for "formBean" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getFormBeanExpr() { return (formBeanExpr); } /** * Getter method for "forward" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getForwardExpr() { return (forwardExpr); } /** * Getter method for "mapping" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getMappingExpr() { return (mappingExpr); } /** * Setter method for "id" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setIdExpr(String idExpr) { this.idExpr = idExpr; } /** * Setter method for "formBean" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setFormBeanExpr(String formBeanExpr) { this.formBeanExpr = formBeanExpr; } /** * Setter method for "forward" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setForwardExpr(String forwardExpr) { this.forwardExpr = forwardExpr; } /** * Setter method for "mapping" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setMappingExpr(String mappingExpr) { this.mappingExpr = mappingExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setIdExpr(null); setFormBeanExpr(null); setForwardExpr(null); setMappingExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return (super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; if ((string = EvalHelper.evalString("id", getIdExpr(), this, pageContext)) != null) setId(string); if ((string = EvalHelper.evalString("formBean", getFormBeanExpr(), this, pageContext)) != null) setFormBean(string); if ((string = EvalHelper.evalString("forward", getForwardExpr(), this, pageContext)) != null) setForward(string); if ((string = EvalHelper.evalString("mapping", getMappingExpr(), this, pageContext)) != null) setMapping(string); } } ././@LongLink0000644000175000017500000000015510423140531011316 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/bean/ELStrutsTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/bean/ELStrutsTagBeanI0000644000175000017500000000450210404045252034023 0ustar arnaudarnaud00000000000000/* * $Id: ELStrutsTagBeanInfo.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.bean; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.bean.ELStrutsTag class. It is * needed to override the default mapping of custom tag attribute names to * class attribute names. */ public class ELStrutsTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("id", ELStrutsTag.class, null, "setIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("formBean", ELStrutsTag.class, null, "setFormBeanExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("forward", ELStrutsTag.class, null, "setForwardExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("mapping", ELStrutsTag.class, null, "setMappingExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/bean/package.html0000644000175000017500000000503110404045254033301 0ustar arnaudarnaud00000000000000 Package Documentation for org.apache.strutsel.taglib.bean Package

The "struts-bean-el" tag library contains JSP custom tags useful in defining new beans (in any desired scope) from a variety of possible sources, as well as a tag to render a particular bean (or bean property) to the output response.



Introduction

The functionality of this tag library is entirely provided by the base "struts-bean" tag library in the Struts distribution. This derived tag library, "struts-bean-el", only provides a different way to evaluate attribute values, which is using the JavaServer Pages Standard Tag Library expression language engine, or the "JSTL EL" for short.

In general, the tags provided in the "struts-bean-el" library are a direct mapping from the "struts-bean" tag library. However, there are several tags in the base Struts tag library which were not "ported" to the "struts-bean-el" tag library, as it was determined that all of their functionality was provided by the JSTL. Information about these "non-ported" tags is provided in the information for the "org.apache.strutsel" package.

Bean-EL Functionality

The functionality of the "bean-el" tags can be almost entirely understood from the documentation of the "struts-bean" base tag library.

Bean-EL Examples

The following are discrete examples of uses of the "bean-el" tags, in no paticular order, but emphasizing the use of JSTL EL values as attribute values.

Example:

   <bean-el:message key="${messKey}" arg0="${arg}"/>

Example:

   <bean-el:resource id="var" name="${filename}" />

Example:

   <%-- Size of pagescope hash table --%>
   <bean-el:size id="pageScopeSize" collection="${pageScope}" />

Example:

   <bean-el:struts id="mapping" mapping="${actionName}" />
libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/0000755000175000017500000000000010423130300031044 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELBaseTag.java0000644000175000017500000000747410404045252033464 0ustar arnaudarnaud00000000000000/* * $Id: ELBaseTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import org.apache.struts.taglib.html.BaseTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Renders an HTML element with an href * attribute pointing to the absolute location of the enclosing JSP page. This * tag is only valid when nested inside a head tag body. The presence * of this tag allows the browser to resolve relative URL's to images, * CSS stylesheets and other resources in a manner independent of the URL * used to call the ActionServlet. *

* This class is a subclass of the class * org.apache.struts.taglib.html.BaseTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 54933 $ */ public class ELBaseTag extends BaseTag { /** * Instance variable mapped to "target" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String targetExpr; /** * Instance variable mapped to "server" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String serverExpr; /** * Getter method for "target" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTargetExpr() { return (targetExpr); } /** * Getter method for "server" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getServerExpr() { return (serverExpr); } /** * Setter method for "target" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTargetExpr(String targetExpr) { this.targetExpr = targetExpr; } /** * Setter method for "server" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setServerExpr(String serverExpr) { this.serverExpr = serverExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setTargetExpr(null); setServerExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return (super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; if ((string = EvalHelper.evalString("target", getTargetExpr(), this, pageContext)) != null) setTarget(string); if ((string = EvalHelper.evalString("server", getServerExpr(), this, pageContext)) != null) setServer(string); } } ././@LongLink0000644000175000017500000000015310423140531011314 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELBaseTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELBaseTagBeanInf0000644000175000017500000000361210404045252033755 0ustar arnaudarnaud00000000000000/* * $Id: ELBaseTagBeanInfo.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.html.ELBaseTag class. It is * needed to override the default mapping of custom tag attribute names to * class attribute names. */ public class ELBaseTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("target", ELBaseTag.class, null, "setTargetExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("server", ELBaseTag.class, null, "setServerExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } ././@LongLink0000644000175000017500000000014510423140531011315 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELButtonTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELButtonTag.java0000644000175000017500000005526610404045254034071 0ustar arnaudarnaud00000000000000/* * $Id: ELButtonTag.java 123585 2004-12-29 00:43:33Z martinc $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import org.apache.struts.taglib.html.ButtonTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Renders an HTML BUTTON tag within the Struts framework. *

* This class is a subclass of the class * org.apache.struts.taglib.html.ButtonTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 123585 $ */ public class ELButtonTag extends ButtonTag { /** * Instance variable mapped to "accessKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String accessKeyExpr; /** * Instance variable mapped to "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String altExpr; /** * Instance variable mapped to "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String altKeyExpr; /** * Instance variable mapped to "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String bundleExpr; /** * Instance variable mapped to "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String disabledExpr; /** * Instance variable mapped to "indexed" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String indexedExpr; /** * Instance variable mapped to "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onblurExpr; /** * Instance variable mapped to "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onchangeExpr; /** * Instance variable mapped to "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onclickExpr; /** * Instance variable mapped to "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String ondblclickExpr; /** * Instance variable mapped to "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onfocusExpr; /** * Instance variable mapped to "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeydownExpr; /** * Instance variable mapped to "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeypressExpr; /** * Instance variable mapped to "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeyupExpr; /** * Instance variable mapped to "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmousedownExpr; /** * Instance variable mapped to "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmousemoveExpr; /** * Instance variable mapped to "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseoutExpr; /** * Instance variable mapped to "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseoverExpr; /** * Instance variable mapped to "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseupExpr; /** * Instance variable mapped to "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String propertyExpr; /** * Instance variable mapped to "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleExpr; /** * Instance variable mapped to "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleClassExpr; /** * Instance variable mapped to "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleIdExpr; /** * Instance variable mapped to "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String tabindexExpr; /** * Instance variable mapped to "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String titleExpr; /** * Instance variable mapped to "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String titleKeyExpr; /** * Instance variable mapped to "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String valueExpr; /** * Getter method for "accessKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAccesskeyExpr() { return (accessKeyExpr); } /** * Getter method for "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAltExpr() { return (altExpr); } /** * Getter method for "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAltKeyExpr() { return (altKeyExpr); } /** * Getter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getBundleExpr() { return (bundleExpr); } /** * Getter method for "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getDisabledExpr() { return (disabledExpr); } /** * Getter method for "indexed" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getIndexedExpr() { return (indexedExpr); } /** * Getter method for "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnblurExpr() { return (onblurExpr); } /** * Getter method for "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnchangeExpr() { return (onchangeExpr); } /** * Getter method for "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnclickExpr() { return (onclickExpr); } /** * Getter method for "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOndblclickExpr() { return (ondblclickExpr); } /** * Getter method for "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnfocusExpr() { return (onfocusExpr); } /** * Getter method for "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeydownExpr() { return (onkeydownExpr); } /** * Getter method for "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeypressExpr() { return (onkeypressExpr); } /** * Getter method for "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeyupExpr() { return (onkeyupExpr); } /** * Getter method for "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmousedownExpr() { return (onmousedownExpr); } /** * Getter method for "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmousemoveExpr() { return (onmousemoveExpr); } /** * Getter method for "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseoutExpr() { return (onmouseoutExpr); } /** * Getter method for "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseoverExpr() { return (onmouseoverExpr); } /** * Getter method for "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseupExpr() { return (onmouseupExpr); } /** * Getter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPropertyExpr() { return (propertyExpr); } /** * Getter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleExpr() { return (styleExpr); } /** * Getter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleClassExpr() { return (styleClassExpr); } /** * Getter method for "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleIdExpr() { return (styleIdExpr); } /** * Getter method for "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTabindexExpr() { return (tabindexExpr); } /** * Getter method for "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTitleExpr() { return (titleExpr); } /** * Getter method for "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTitleKeyExpr() { return (titleKeyExpr); } /** * Getter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getValueExpr() { return (valueExpr); } /** * Setter method for "accessKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAccesskeyExpr(String accessKeyExpr) { this.accessKeyExpr = accessKeyExpr; } /** * Setter method for "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAltExpr(String altExpr) { this.altExpr = altExpr; } /** * Setter method for "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAltKeyExpr(String altKeyExpr) { this.altKeyExpr = altKeyExpr; } /** * Setter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setBundleExpr(String bundleExpr) { this.bundleExpr = bundleExpr; } /** * Setter method for "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setDisabledExpr(String disabledExpr) { this.disabledExpr = disabledExpr; } /** * Setter method for "indexed" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setIndexedExpr(String indexedExpr) { this.indexedExpr = indexedExpr; } /** * Setter method for "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnblurExpr(String onblurExpr) { this.onblurExpr = onblurExpr; } /** * Setter method for "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnchangeExpr(String onchangeExpr) { this.onchangeExpr = onchangeExpr; } /** * Setter method for "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnclickExpr(String onclickExpr) { this.onclickExpr = onclickExpr; } /** * Setter method for "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOndblclickExpr(String ondblclickExpr) { this.ondblclickExpr = ondblclickExpr; } /** * Setter method for "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnfocusExpr(String onfocusExpr) { this.onfocusExpr = onfocusExpr; } /** * Setter method for "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeydownExpr(String onkeydownExpr) { this.onkeydownExpr = onkeydownExpr; } /** * Setter method for "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeypressExpr(String onkeypressExpr) { this.onkeypressExpr = onkeypressExpr; } /** * Setter method for "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeyupExpr(String onkeyupExpr) { this.onkeyupExpr = onkeyupExpr; } /** * Setter method for "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmousedownExpr(String onmousedownExpr) { this.onmousedownExpr = onmousedownExpr; } /** * Setter method for "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmousemoveExpr(String onmousemoveExpr) { this.onmousemoveExpr = onmousemoveExpr; } /** * Setter method for "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseoutExpr(String onmouseoutExpr) { this.onmouseoutExpr = onmouseoutExpr; } /** * Setter method for "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseoverExpr(String onmouseoverExpr) { this.onmouseoverExpr = onmouseoverExpr; } /** * Setter method for "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseupExpr(String onmouseupExpr) { this.onmouseupExpr = onmouseupExpr; } /** * Setter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPropertyExpr(String propertyExpr) { this.propertyExpr = propertyExpr; } /** * Setter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleExpr(String styleExpr) { this.styleExpr = styleExpr; } /** * Setter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleClassExpr(String styleClassExpr) { this.styleClassExpr = styleClassExpr; } /** * Setter method for "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleIdExpr(String styleIdExpr) { this.styleIdExpr = styleIdExpr; } /** * Setter method for "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTabindexExpr(String tabindexExpr) { this.tabindexExpr = tabindexExpr; } /** * Setter method for "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTitleExpr(String titleExpr) { this.titleExpr = titleExpr; } /** * Setter method for "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTitleKeyExpr(String titleKeyExpr) { this.titleKeyExpr = titleKeyExpr; } /** * Setter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setValueExpr(String valueExpr) { this.valueExpr = valueExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setAccesskeyExpr(null); setAltExpr(null); setAltKeyExpr(null); setBundleExpr(null); setDisabledExpr(null); setIndexedExpr(null); setOnblurExpr(null); setOnchangeExpr(null); setOnclickExpr(null); setOndblclickExpr(null); setOnfocusExpr(null); setOnkeydownExpr(null); setOnkeypressExpr(null); setOnkeyupExpr(null); setOnmousedownExpr(null); setOnmousemoveExpr(null); setOnmouseoutExpr(null); setOnmouseoverExpr(null); setOnmouseupExpr(null); setPropertyExpr(null); setStyleExpr(null); setStyleClassExpr(null); setStyleIdExpr(null); setTabindexExpr(null); setTitleExpr(null); setTitleKeyExpr(null); setValueExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return (super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; Boolean bool = null; if ((string = EvalHelper.evalString("accessKey", getAccesskeyExpr(), this, pageContext)) != null) setAccesskey(string); if ((string = EvalHelper.evalString("alt", getAltExpr(), this, pageContext)) != null) setAlt(string); if ((string = EvalHelper.evalString("altKey", getAltKeyExpr(), this, pageContext)) != null) setAltKey(string); if ((string = EvalHelper.evalString("bundle", getBundleExpr(), this, pageContext)) != null) setBundle(string); if ((bool = EvalHelper.evalBoolean("disabled", getDisabledExpr(), this, pageContext)) != null) setDisabled(bool.booleanValue()); if ((bool = EvalHelper.evalBoolean("indexed", getIndexedExpr(), this, pageContext)) != null) setIndexed(bool.booleanValue()); if ((string = EvalHelper.evalString("onblur", getOnblurExpr(), this, pageContext)) != null) setOnblur(string); if ((string = EvalHelper.evalString("onchange", getOnchangeExpr(), this, pageContext)) != null) setOnchange(string); if ((string = EvalHelper.evalString("onclick", getOnclickExpr(), this, pageContext)) != null) setOnclick(string); if ((string = EvalHelper.evalString("ondblclick", getOndblclickExpr(), this, pageContext)) != null) setOndblclick(string); if ((string = EvalHelper.evalString("onfocus", getOnfocusExpr(), this, pageContext)) != null) setOnfocus(string); if ((string = EvalHelper.evalString("onkeydown", getOnkeydownExpr(), this, pageContext)) != null) setOnkeydown(string); if ((string = EvalHelper.evalString("onkeypress", getOnkeypressExpr(), this, pageContext)) != null) setOnkeypress(string); if ((string = EvalHelper.evalString("onkeyup", getOnkeyupExpr(), this, pageContext)) != null) setOnkeyup(string); if ((string = EvalHelper.evalString("onmousedown", getOnmousedownExpr(), this, pageContext)) != null) setOnmousedown(string); if ((string = EvalHelper.evalString("onmousemove", getOnmousemoveExpr(), this, pageContext)) != null) setOnmousemove(string); if ((string = EvalHelper.evalString("onmouseout", getOnmouseoutExpr(), this, pageContext)) != null) setOnmouseout(string); if ((string = EvalHelper.evalString("onmouseover", getOnmouseoverExpr(), this, pageContext)) != null) setOnmouseover(string); if ((string = EvalHelper.evalString("onmouseup", getOnmouseupExpr(), this, pageContext)) != null) setOnmouseup(string); if ((string = EvalHelper.evalString("property", getPropertyExpr(), this, pageContext)) != null) setProperty(string); if ((string = EvalHelper.evalString("style", getStyleExpr(), this, pageContext)) != null) setStyle(string); if ((string = EvalHelper.evalString("styleClass", getStyleClassExpr(), this, pageContext)) != null) setStyleClass(string); if ((string = EvalHelper.evalString("styleId", getStyleIdExpr(), this, pageContext)) != null) setStyleId(string); if ((string = EvalHelper.evalString("tabindex", getTabindexExpr(), this, pageContext)) != null) setTabindex(string); if ((string = EvalHelper.evalString("title", getTitleExpr(), this, pageContext)) != null) setTitle(string); if ((string = EvalHelper.evalString("titleKey", getTitleKeyExpr(), this, pageContext)) != null) setTitleKey(string); if ((string = EvalHelper.evalString("value", getValueExpr(), this, pageContext)) != null) setValue(string); } } ././@LongLink0000644000175000017500000000015510423140531011316 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELButtonTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELButtonTagBeanI0000644000175000017500000001726310404045254034043 0ustar arnaudarnaud00000000000000/* * $Id: ELButtonTagBeanInfo.java 123585 2004-12-29 00:43:33Z martinc $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.html.ELButtonTag class. It is needed * to override the default mapping of custom tag attribute names to class * attribute names. *

* This is because the value of the unevaluated EL expression has to be kept * separately from the evaluated value, which is stored in the base class. This * is related to the fact that the JSP compiler can choose to reuse different * tag instances if they received the same original attribute values, and the * JSP compiler can choose to not re-call the setter methods, because it can * assume the same values are already set. */ public class ELButtonTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("accesskey", ELButtonTag.class, null, "setAccesskeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("alt", ELButtonTag.class, null, "setAltExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("altKey", ELButtonTag.class, null, "setAltKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("bundle", ELButtonTag.class, null, "setBundleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("disabled", ELButtonTag.class, null, "setDisabledExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("indexed", ELButtonTag.class, null, "setIndexedExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onblur", ELButtonTag.class, null, "setOnblurExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onchange", ELButtonTag.class, null, "setOnchangeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onclick", ELButtonTag.class, null, "setOnclickExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("ondblclick", ELButtonTag.class, null, "setOndblclickExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onfocus", ELButtonTag.class, null, "setOnfocusExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeydown", ELButtonTag.class, null, "setOnkeydownExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeypress", ELButtonTag.class, null, "setOnkeypressExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeyup", ELButtonTag.class, null, "setOnkeyupExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmousedown", ELButtonTag.class, null, "setOnmousedownExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmousemove", ELButtonTag.class, null, "setOnmousemoveExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseout", ELButtonTag.class, null, "setOnmouseoutExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseover", ELButtonTag.class, null, "setOnmouseoverExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseup", ELButtonTag.class, null, "setOnmouseupExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("property", ELButtonTag.class, null, "setPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("style", ELButtonTag.class, null, "setStyleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleClass", ELButtonTag.class, null, "setStyleClassExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleId", ELButtonTag.class, null, "setStyleIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("tabindex", ELButtonTag.class, null, "setTabindexExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("title", ELButtonTag.class, null, "setTitleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("titleKey", ELButtonTag.class, null, "setTitleKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("value", ELButtonTag.class, null, "setValueExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } ././@LongLink0000644000175000017500000000014510423140531011315 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELCancelTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELCancelTag.java0000644000175000017500000005363010404045254033774 0ustar arnaudarnaud00000000000000/* * $Id: ELCancelTag.java 123585 2004-12-29 00:43:33Z martinc $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import org.apache.struts.taglib.html.CancelTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Tag for input fields of type "cancel". *

* This class is a subclass of the class * org.apache.struts.taglib.html.CancelTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 123585 $ */ public class ELCancelTag extends CancelTag { /** * Instance variable mapped to "accesskey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String accesskeyExpr; /** * Instance variable mapped to "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String altExpr; /** * Instance variable mapped to "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String altKeyExpr; /** * Instance variable mapped to "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String bundleExpr; /** * Instance variable mapped to "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String disabledExpr; /** * Instance variable mapped to "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onblurExpr; /** * Instance variable mapped to "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onchangeExpr; /** * Instance variable mapped to "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onclickExpr; /** * Instance variable mapped to "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String ondblclickExpr; /** * Instance variable mapped to "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onfocusExpr; /** * Instance variable mapped to "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeydownExpr; /** * Instance variable mapped to "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeypressExpr; /** * Instance variable mapped to "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeyupExpr; /** * Instance variable mapped to "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmousedownExpr; /** * Instance variable mapped to "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmousemoveExpr; /** * Instance variable mapped to "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseoutExpr; /** * Instance variable mapped to "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseoverExpr; /** * Instance variable mapped to "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseupExpr; /** * Instance variable mapped to "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String propertyExpr; /** * Instance variable mapped to "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleExpr; /** * Instance variable mapped to "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleClassExpr; /** * Instance variable mapped to "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleIdExpr; /** * Instance variable mapped to "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String tabindexExpr; /** * Instance variable mapped to "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String titleExpr; /** * Instance variable mapped to "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String titleKeyExpr; /** * Instance variable mapped to "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String valueExpr; /** * Getter method for "accesskey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAccesskeyExpr() { return (accesskeyExpr); } /** * Getter method for "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAltExpr() { return (altExpr); } /** * Getter method for "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAltKeyExpr() { return (altKeyExpr); } /** * Getter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getBundleExpr() { return (bundleExpr); } /** * Getter method for "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getDisabledExpr() { return (disabledExpr); } /** * Getter method for "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnblurExpr() { return (onblurExpr); } /** * Getter method for "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnchangeExpr() { return (onchangeExpr); } /** * Getter method for "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnclickExpr() { return (onclickExpr); } /** * Getter method for "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOndblclickExpr() { return (ondblclickExpr); } /** * Getter method for "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnfocusExpr() { return (onfocusExpr); } /** * Getter method for "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeydownExpr() { return (onkeydownExpr); } /** * Getter method for "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeypressExpr() { return (onkeypressExpr); } /** * Getter method for "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeyupExpr() { return (onkeyupExpr); } /** * Getter method for "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmousedownExpr() { return (onmousedownExpr); } /** * Getter method for "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmousemoveExpr() { return (onmousemoveExpr); } /** * Getter method for "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseoutExpr() { return (onmouseoutExpr); } /** * Getter method for "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseoverExpr() { return (onmouseoverExpr); } /** * Getter method for "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseupExpr() { return (onmouseupExpr); } /** * Getter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPropertyExpr() { return (propertyExpr); } /** * Getter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleExpr() { return (styleExpr); } /** * Getter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleClassExpr() { return (styleClassExpr); } /** * Getter method for "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleIdExpr() { return (styleIdExpr); } /** * Getter method for "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTabindexExpr() { return (tabindexExpr); } /** * Getter method for "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTitleExpr() { return (titleExpr); } /** * Getter method for "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTitleKeyExpr() { return (titleKeyExpr); } /** * Getter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getValueExpr() { return (valueExpr); } /** * Setter method for "accesskey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAccesskeyExpr(String accesskeyExpr) { this.accesskeyExpr = accesskeyExpr; } /** * Setter method for "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAltExpr(String altExpr) { this.altExpr = altExpr; } /** * Setter method for "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAltKeyExpr(String altKeyExpr) { this.altKeyExpr = altKeyExpr; } /** * Setter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setBundleExpr(String bundleExpr) { this.bundleExpr = bundleExpr; } /** * Setter method for "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setDisabledExpr(String disabledExpr) { this.disabledExpr = disabledExpr; } /** * Setter method for "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnblurExpr(String onblurExpr) { this.onblurExpr = onblurExpr; } /** * Setter method for "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnchangeExpr(String onchangeExpr) { this.onchangeExpr = onchangeExpr; } /** * Setter method for "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnclickExpr(String onclickExpr) { this.onclickExpr = onclickExpr; } /** * Setter method for "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOndblclickExpr(String ondblclickExpr) { this.ondblclickExpr = ondblclickExpr; } /** * Setter method for "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnfocusExpr(String onfocusExpr) { this.onfocusExpr = onfocusExpr; } /** * Setter method for "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeydownExpr(String onkeydownExpr) { this.onkeydownExpr = onkeydownExpr; } /** * Setter method for "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeypressExpr(String onkeypressExpr) { this.onkeypressExpr = onkeypressExpr; } /** * Setter method for "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeyupExpr(String onkeyupExpr) { this.onkeyupExpr = onkeyupExpr; } /** * Setter method for "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmousedownExpr(String onmousedownExpr) { this.onmousedownExpr = onmousedownExpr; } /** * Setter method for "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmousemoveExpr(String onmousemoveExpr) { this.onmousemoveExpr = onmousemoveExpr; } /** * Setter method for "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseoutExpr(String onmouseoutExpr) { this.onmouseoutExpr = onmouseoutExpr; } /** * Setter method for "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseoverExpr(String onmouseoverExpr) { this.onmouseoverExpr = onmouseoverExpr; } /** * Setter method for "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseupExpr(String onmouseupExpr) { this.onmouseupExpr = onmouseupExpr; } /** * Setter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPropertyExpr(String propertyExpr) { this.propertyExpr = propertyExpr; } /** * Setter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleExpr(String styleExpr) { this.styleExpr = styleExpr; } /** * Setter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleClassExpr(String styleClassExpr) { this.styleClassExpr = styleClassExpr; } /** * Setter method for "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleIdExpr(String styleIdExpr) { this.styleIdExpr = styleIdExpr; } /** * Setter method for "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTabindexExpr(String tabindexExpr) { this.tabindexExpr = tabindexExpr; } /** * Setter method for "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTitleExpr(String titleExpr) { this.titleExpr = titleExpr; } /** * Setter method for "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTitleKeyExpr(String titleKeyExpr) { this.titleKeyExpr = titleKeyExpr; } /** * Setter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setValueExpr(String valueExpr) { this.valueExpr = valueExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setAccesskeyExpr(null); setAltExpr(null); setAltKeyExpr(null); setBundleExpr(null); setDisabledExpr(null); setOnblurExpr(null); setOnchangeExpr(null); setOnclickExpr(null); setOndblclickExpr(null); setOnfocusExpr(null); setOnkeydownExpr(null); setOnkeypressExpr(null); setOnkeyupExpr(null); setOnmousedownExpr(null); setOnmousemoveExpr(null); setOnmouseoutExpr(null); setOnmouseoverExpr(null); setOnmouseupExpr(null); setPropertyExpr(null); setStyleExpr(null); setStyleClassExpr(null); setStyleIdExpr(null); setTabindexExpr(null); setTitleExpr(null); setTitleKeyExpr(null); setValueExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return (super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; Boolean bool = null; if ((string = EvalHelper.evalString("accesskey", getAccesskeyExpr(), this, pageContext)) != null) setAccesskey(string); if ((string = EvalHelper.evalString("alt", getAltExpr(), this, pageContext)) != null) setAlt(string); if ((string = EvalHelper.evalString("altKey", getAltKeyExpr(), this, pageContext)) != null) setAltKey(string); if ((string = EvalHelper.evalString("bundle", getBundleExpr(), this, pageContext)) != null) setBundle(string); if ((bool = EvalHelper.evalBoolean("disabled", getDisabledExpr(), this, pageContext)) != null) setDisabled(bool.booleanValue()); if ((string = EvalHelper.evalString("onblur", getOnblurExpr(), this, pageContext)) != null) setOnblur(string); if ((string = EvalHelper.evalString("onchange", getOnchangeExpr(), this, pageContext)) != null) setOnchange(string); if ((string = EvalHelper.evalString("onclick", getOnclickExpr(), this, pageContext)) != null) setOnclick(string); if ((string = EvalHelper.evalString("ondblclick", getOndblclickExpr(), this, pageContext)) != null) setOndblclick(string); if ((string = EvalHelper.evalString("onfocus", getOnfocusExpr(), this, pageContext)) != null) setOnfocus(string); if ((string = EvalHelper.evalString("onkeydown", getOnkeydownExpr(), this, pageContext)) != null) setOnkeydown(string); if ((string = EvalHelper.evalString("onkeypress", getOnkeypressExpr(), this, pageContext)) != null) setOnkeypress(string); if ((string = EvalHelper.evalString("onkeyup", getOnkeyupExpr(), this, pageContext)) != null) setOnkeyup(string); if ((string = EvalHelper.evalString("onmousedown", getOnmousedownExpr(), this, pageContext)) != null) setOnmousedown(string); if ((string = EvalHelper.evalString("onmousemove", getOnmousemoveExpr(), this, pageContext)) != null) setOnmousemove(string); if ((string = EvalHelper.evalString("onmouseout", getOnmouseoutExpr(), this, pageContext)) != null) setOnmouseout(string); if ((string = EvalHelper.evalString("onmouseover", getOnmouseoverExpr(), this, pageContext)) != null) setOnmouseover(string); if ((string = EvalHelper.evalString("onmouseup", getOnmouseupExpr(), this, pageContext)) != null) setOnmouseup(string); if ((string = EvalHelper.evalString("property", getPropertyExpr(), this, pageContext)) != null) setProperty(string); if ((string = EvalHelper.evalString("style", getStyleExpr(), this, pageContext)) != null) setStyle(string); if ((string = EvalHelper.evalString("styleClass", getStyleClassExpr(), this, pageContext)) != null) setStyleClass(string); if ((string = EvalHelper.evalString("styleId", getStyleIdExpr(), this, pageContext)) != null) setStyleId(string); if ((string = EvalHelper.evalString("tabindex", getTabindexExpr(), this, pageContext)) != null) setTabindex(string); if ((string = EvalHelper.evalString("title", getTitleExpr(), this, pageContext)) != null) setTitle(string); if ((string = EvalHelper.evalString("titleKey", getTitleKeyExpr(), this, pageContext)) != null) setTitleKey(string); if ((string = EvalHelper.evalString("value", getValueExpr(), this, pageContext)) != null) setValue(string); } } ././@LongLink0000644000175000017500000000015510423140531011316 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELCancelTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELCancelTagBeanI0000644000175000017500000001717210404045254033754 0ustar arnaudarnaud00000000000000/* * $Id: ELCancelTagBeanInfo.java 123585 2004-12-29 00:43:33Z martinc $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.html.ELCancelTag class. It is needed * to override the default mapping of custom tag attribute names to class * attribute names. *

* In particular, it provides for the mapping of the custom tag attribute * disabled to the instance variable disabledExpr. *

* This is because the value of the unevaluated EL expression has to be kept * separately from the evaluated value, which is stored in the base class. This * is related to the fact that the JSP compiler can choose to reuse different * tag instances if they received the same original attribute values, and the * JSP compiler can choose to not re-call the setter methods, because it can * assume the same values are already set. */ public class ELCancelTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("accesskey", ELCancelTag.class, null, "setAccesskeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("alt", ELCancelTag.class, null, "setAltExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("altKey", ELCancelTag.class, null, "setAltKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("bundle", ELCancelTag.class, null, "setBundleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("disabled", ELCancelTag.class, null, "setDisabledExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onblur", ELCancelTag.class, null, "setOnblurExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onchange", ELCancelTag.class, null, "setOnchangeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onclick", ELCancelTag.class, null, "setOnclickExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("ondblclick", ELCancelTag.class, null, "setOndblclickExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onfocus", ELCancelTag.class, null, "setOnfocusExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeydown", ELCancelTag.class, null, "setOnkeydownExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeypress", ELCancelTag.class, null, "setOnkeypressExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeyup", ELCancelTag.class, null, "setOnkeyupExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmousedown", ELCancelTag.class, null, "setOnmousedownExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmousemove", ELCancelTag.class, null, "setOnmousemoveExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseout", ELCancelTag.class, null, "setOnmouseoutExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseover", ELCancelTag.class, null, "setOnmouseoverExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseup", ELCancelTag.class, null, "setOnmouseupExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("property", ELCancelTag.class, null, "setPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("style", ELCancelTag.class, null, "setStyleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleClass", ELCancelTag.class, null, "setStyleClassExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleId", ELCancelTag.class, null, "setStyleIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("tabindex", ELCancelTag.class, null, "setTabindexExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("title", ELCancelTag.class, null, "setTitleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("titleKey", ELCancelTag.class, null, "setTitleKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("value", ELCancelTag.class, null, "setValueExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } ././@LongLink0000644000175000017500000000014710423140531011317 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELCheckboxTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELCheckboxTag.ja0000644000175000017500000006517610404045254034016 0ustar arnaudarnaud00000000000000/* * $Id: ELCheckboxTag.java 373801 2006-01-31 12:18:48Z niallp $ * * Copyright 1999-2006 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import org.apache.struts.taglib.html.CheckboxTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Tag for input fields of type "checkbox". *

* This class is a subclass of the class * org.apache.struts.taglib.html.CheckboxTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 373801 $ */ public class ELCheckboxTag extends CheckboxTag { /** * Instance variable mapped to "accesskey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String accesskeyExpr; /** * Instance variable mapped to "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String altExpr; /** * Instance variable mapped to "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String altKeyExpr; /** * Instance variable mapped to "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String bundleExpr; /** * Instance variable mapped to "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String disabledExpr; /** * Instance variable mapped to "errorKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String errorKeyExpr; /** * Instance variable mapped to "errorStyle" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String errorStyleExpr; /** * Instance variable mapped to "errorStyleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String errorStyleClassExpr; /** * Instance variable mapped to "errorStyleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String errorStyleIdExpr; /** * Instance variable mapped to "indexed" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String indexedExpr; /** * Instance variable mapped to "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String nameExpr; /** * Instance variable mapped to "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onblurExpr; /** * Instance variable mapped to "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onchangeExpr; /** * Instance variable mapped to "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onclickExpr; /** * Instance variable mapped to "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String ondblclickExpr; /** * Instance variable mapped to "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onfocusExpr; /** * Instance variable mapped to "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeydownExpr; /** * Instance variable mapped to "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeypressExpr; /** * Instance variable mapped to "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeyupExpr; /** * Instance variable mapped to "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmousedownExpr; /** * Instance variable mapped to "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmousemoveExpr; /** * Instance variable mapped to "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseoutExpr; /** * Instance variable mapped to "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseoverExpr; /** * Instance variable mapped to "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseupExpr; /** * Instance variable mapped to "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String propertyExpr; /** * Instance variable mapped to "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleExpr; /** * Instance variable mapped to "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleClassExpr; /** * Instance variable mapped to "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleIdExpr; /** * Instance variable mapped to "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String tabindexExpr; /** * Instance variable mapped to "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String titleExpr; /** * Instance variable mapped to "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String titleKeyExpr; /** * Instance variable mapped to "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String valueExpr; /** * Getter method for "accesskey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAccesskeyExpr() { return (accesskeyExpr); } /** * Getter method for "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAltExpr() { return (altExpr); } /** * Getter method for "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAltKeyExpr() { return (altKeyExpr); } /** * Getter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getBundleExpr() { return (bundleExpr); } /** * Getter method for "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getDisabledExpr() { return (disabledExpr); } /** * Getter method for "errorKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getErrorKeyExpr() { return (errorKeyExpr); } /** * Getter method for "errorStyle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getErrorStyleExpr() { return (errorStyleExpr); } /** * Getter method for "errorStyleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getErrorStyleClassExpr() { return (errorStyleClassExpr); } /** * Getter method for "errorStyleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getErrorStyleIdExpr() { return (errorStyleIdExpr); } /** * Getter method for "indexed" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getIndexedExpr() { return (indexedExpr); } /** * Getter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getNameExpr() { return (nameExpr); } /** * Getter method for "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnblurExpr() { return (onblurExpr); } /** * Getter method for "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnchangeExpr() { return (onchangeExpr); } /** * Getter method for "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnclickExpr() { return (onclickExpr); } /** * Getter method for "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOndblclickExpr() { return (ondblclickExpr); } /** * Getter method for "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnfocusExpr() { return (onfocusExpr); } /** * Getter method for "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeydownExpr() { return (onkeydownExpr); } /** * Getter method for "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeypressExpr() { return (onkeypressExpr); } /** * Getter method for "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeyupExpr() { return (onkeyupExpr); } /** * Getter method for "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmousedownExpr() { return (onmousedownExpr); } /** * Getter method for "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmousemoveExpr() { return (onmousemoveExpr); } /** * Getter method for "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseoutExpr() { return (onmouseoutExpr); } /** * Getter method for "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseoverExpr() { return (onmouseoverExpr); } /** * Getter method for "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseupExpr() { return (onmouseupExpr); } /** * Getter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPropertyExpr() { return (propertyExpr); } /** * Getter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleExpr() { return (styleExpr); } /** * Getter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleClassExpr() { return (styleClassExpr); } /** * Getter method for "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleIdExpr() { return (styleIdExpr); } /** * Getter method for "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTabindexExpr() { return (tabindexExpr); } /** * Getter method for "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTitleExpr() { return (titleExpr); } /** * Getter method for "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTitleKeyExpr() { return (titleKeyExpr); } /** * Getter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getValueExpr() { return (valueExpr); } /** * Setter method for "accesskey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAccesskeyExpr(String accesskeyExpr) { this.accesskeyExpr = accesskeyExpr; } /** * Setter method for "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAltExpr(String altExpr) { this.altExpr = altExpr; } /** * Setter method for "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAltKeyExpr(String altKeyExpr) { this.altKeyExpr = altKeyExpr; } /** * Setter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setBundleExpr(String bundleExpr) { this.bundleExpr = bundleExpr; } /** * Setter method for "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setDisabledExpr(String disabledExpr) { this.disabledExpr = disabledExpr; } /** * Setter method for "errorKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setErrorKeyExpr(String errorKeyExpr) { this.errorKeyExpr = errorKeyExpr; } /** * Setter method for "errorStyle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setErrorStyleExpr(String errorStyleExpr) { this.errorStyleExpr = errorStyleExpr; } /** * Setter method for "errorStyleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setErrorStyleClassExpr(String errorStyleClassExpr) { this.errorStyleClassExpr = errorStyleClassExpr; } /** * Setter method for "errorStyleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setErrorStyleIdExpr(String errorStyleIdExpr) { this.errorStyleIdExpr = errorStyleIdExpr; } /** * Setter method for "indexed" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setIndexedExpr(String indexedExpr) { this.indexedExpr = indexedExpr; } /** * Setter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setNameExpr(String nameExpr) { this.nameExpr = nameExpr; } /** * Setter method for "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnblurExpr(String onblurExpr) { this.onblurExpr = onblurExpr; } /** * Setter method for "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnchangeExpr(String onchangeExpr) { this.onchangeExpr = onchangeExpr; } /** * Setter method for "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnclickExpr(String onclickExpr) { this.onclickExpr = onclickExpr; } /** * Setter method for "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOndblclickExpr(String ondblclickExpr) { this.ondblclickExpr = ondblclickExpr; } /** * Setter method for "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnfocusExpr(String onfocusExpr) { this.onfocusExpr = onfocusExpr; } /** * Setter method for "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeydownExpr(String onkeydownExpr) { this.onkeydownExpr = onkeydownExpr; } /** * Setter method for "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeypressExpr(String onkeypressExpr) { this.onkeypressExpr = onkeypressExpr; } /** * Setter method for "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeyupExpr(String onkeyupExpr) { this.onkeyupExpr = onkeyupExpr; } /** * Setter method for "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmousedownExpr(String onmousedownExpr) { this.onmousedownExpr = onmousedownExpr; } /** * Setter method for "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmousemoveExpr(String onmousemoveExpr) { this.onmousemoveExpr = onmousemoveExpr; } /** * Setter method for "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseoutExpr(String onmouseoutExpr) { this.onmouseoutExpr = onmouseoutExpr; } /** * Setter method for "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseoverExpr(String onmouseoverExpr) { this.onmouseoverExpr = onmouseoverExpr; } /** * Setter method for "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseupExpr(String onmouseupExpr) { this.onmouseupExpr = onmouseupExpr; } /** * Setter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPropertyExpr(String propertyExpr) { this.propertyExpr = propertyExpr; } /** * Setter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleExpr(String styleExpr) { this.styleExpr = styleExpr; } /** * Setter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleClassExpr(String styleClassExpr) { this.styleClassExpr = styleClassExpr; } /** * Setter method for "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleIdExpr(String styleIdExpr) { this.styleIdExpr = styleIdExpr; } /** * Setter method for "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTabindexExpr(String tabindexExpr) { this.tabindexExpr = tabindexExpr; } /** * Setter method for "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTitleExpr(String titleExpr) { this.titleExpr = titleExpr; } /** * Setter method for "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTitleKeyExpr(String titleKeyExpr) { this.titleKeyExpr = titleKeyExpr; } /** * Setter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setValueExpr(String valueExpr) { this.valueExpr = valueExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setAccesskeyExpr(null); setAltExpr(null); setAltKeyExpr(null); setBundleExpr(null); setDisabledExpr(null); setErrorKeyExpr(null); setErrorStyleExpr(null); setErrorStyleClassExpr(null); setErrorStyleIdExpr(null); setIndexedExpr(null); setNameExpr(null); setOnblurExpr(null); setOnchangeExpr(null); setOnclickExpr(null); setOndblclickExpr(null); setOnfocusExpr(null); setOnkeydownExpr(null); setOnkeypressExpr(null); setOnkeyupExpr(null); setOnmousedownExpr(null); setOnmousemoveExpr(null); setOnmouseoutExpr(null); setOnmouseoverExpr(null); setOnmouseupExpr(null); setPropertyExpr(null); setStyleExpr(null); setStyleClassExpr(null); setStyleIdExpr(null); setTabindexExpr(null); setTitleExpr(null); setTitleKeyExpr(null); setValueExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return (super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; Boolean bool = null; if ((string = EvalHelper.evalString("accesskey", getAccesskeyExpr(), this, pageContext)) != null) setAccesskey(string); if ((string = EvalHelper.evalString("alt", getAltExpr(), this, pageContext)) != null) setAlt(string); if ((string = EvalHelper.evalString("altKey", getAltKeyExpr(), this, pageContext)) != null) setAltKey(string); if ((string = EvalHelper.evalString("bundle", getBundleExpr(), this, pageContext)) != null) setBundle(string); if ((bool = EvalHelper.evalBoolean("disabled", getDisabledExpr(), this, pageContext)) != null) setDisabled(bool.booleanValue()); if ((string = EvalHelper.evalString("errorKey", getErrorKeyExpr(), this, pageContext)) != null) setErrorKey(string); if ((string = EvalHelper.evalString("errorStyle", getErrorStyleExpr(), this, pageContext)) != null) setErrorStyle(string); if ((string = EvalHelper.evalString("errorStyleClass", getErrorStyleClassExpr(), this, pageContext)) != null) setErrorStyleClass(string); if ((string = EvalHelper.evalString("errorStyleId", getErrorStyleIdExpr(), this, pageContext)) != null) setErrorStyleId(string); if ((bool = EvalHelper.evalBoolean("indexed", getIndexedExpr(), this, pageContext)) != null) setIndexed(bool.booleanValue()); if ((string = EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) setName(string); if ((string = EvalHelper.evalString("onblur", getOnblurExpr(), this, pageContext)) != null) setOnblur(string); if ((string = EvalHelper.evalString("onchange", getOnchangeExpr(), this, pageContext)) != null) setOnchange(string); if ((string = EvalHelper.evalString("onclick", getOnclickExpr(), this, pageContext)) != null) setOnclick(string); if ((string = EvalHelper.evalString("ondblclick", getOndblclickExpr(), this, pageContext)) != null) setOndblclick(string); if ((string = EvalHelper.evalString("onfocus", getOnfocusExpr(), this, pageContext)) != null) setOnfocus(string); if ((string = EvalHelper.evalString("onkeydown", getOnkeydownExpr(), this, pageContext)) != null) setOnkeydown(string); if ((string = EvalHelper.evalString("onkeypress", getOnkeypressExpr(), this, pageContext)) != null) setOnkeypress(string); if ((string = EvalHelper.evalString("onkeyup", getOnkeyupExpr(), this, pageContext)) != null) setOnkeyup(string); if ((string = EvalHelper.evalString("onmousedown", getOnmousedownExpr(), this, pageContext)) != null) setOnmousedown(string); if ((string = EvalHelper.evalString("onmousemove", getOnmousemoveExpr(), this, pageContext)) != null) setOnmousemove(string); if ((string = EvalHelper.evalString("onmouseout", getOnmouseoutExpr(), this, pageContext)) != null) setOnmouseout(string); if ((string = EvalHelper.evalString("onmouseover", getOnmouseoverExpr(), this, pageContext)) != null) setOnmouseover(string); if ((string = EvalHelper.evalString("onmouseup", getOnmouseupExpr(), this, pageContext)) != null) setOnmouseup(string); if ((string = EvalHelper.evalString("property", getPropertyExpr(), this, pageContext)) != null) setProperty(string); if ((string = EvalHelper.evalString("style", getStyleExpr(), this, pageContext)) != null) setStyle(string); if ((string = EvalHelper.evalString("styleClass", getStyleClassExpr(), this, pageContext)) != null) setStyleClass(string); if ((string = EvalHelper.evalString("styleId", getStyleIdExpr(), this, pageContext)) != null) setStyleId(string); if ((string = EvalHelper.evalString("tabindex", getTabindexExpr(), this, pageContext)) != null) setTabindex(string); if ((string = EvalHelper.evalString("title", getTitleExpr(), this, pageContext)) != null) setTitle(string); if ((string = EvalHelper.evalString("titleKey", getTitleKeyExpr(), this, pageContext)) != null) setTitleKey(string); if ((string = EvalHelper.evalString("value", getValueExpr(), this, pageContext)) != null) setValue(string); } } ././@LongLink0000644000175000017500000000015710423140531011320 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELCheckboxTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELCheckboxTagBea0000644000175000017500000002152210404045254034020 0ustar arnaudarnaud00000000000000/* * $Id: ELCheckboxTagBeanInfo.java 123585 2004-12-29 00:43:33Z martinc $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.html.ELCheckboxTag class. It is needed * to override the default mapping of custom tag attribute names to class * attribute names. *

* This is because the value of the unevaluated EL expression has to be kept * separately from the evaluated value, which is stored in the base class. This * is related to the fact that the JSP compiler can choose to reuse different * tag instances if they received the same original attribute values, and the * JSP compiler can choose to not re-call the setter methods, because it can * assume the same values are already set. */ public class ELCheckboxTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("accesskey", ELCheckboxTag.class, null, "setAccesskeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("alt", ELCheckboxTag.class, null, "setAltExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("altKey", ELCheckboxTag.class, null, "setAltKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("bundle", ELCheckboxTag.class, null, "setBundleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("disabled", ELCheckboxTag.class, null, "setDisabledExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("errorKey", ELCheckboxTag.class, null, "setErrorKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("errorStyle", ELCheckboxTag.class, null, "setErrorStyleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("errorStyleClass", ELCheckboxTag.class, null, "setErrorStyleClassExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("errorStyleId", ELCheckboxTag.class, null, "setErrorStyleIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("indexed", ELCheckboxTag.class, null, "setIndexedExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("name", ELCheckboxTag.class, null, "setNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onblur", ELCheckboxTag.class, null, "setOnblurExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onchange", ELCheckboxTag.class, null, "setOnchangeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onclick", ELCheckboxTag.class, null, "setOnclickExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("ondblclick", ELCheckboxTag.class, null, "setOndblclickExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onfocus", ELCheckboxTag.class, null, "setOnfocusExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeydown", ELCheckboxTag.class, null, "setOnkeydownExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeypress", ELCheckboxTag.class, null, "setOnkeypressExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeyup", ELCheckboxTag.class, null, "setOnkeyupExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmousedown", ELCheckboxTag.class, null, "setOnmousedownExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmousemove", ELCheckboxTag.class, null, "setOnmousemoveExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseout", ELCheckboxTag.class, null, "setOnmouseoutExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseover", ELCheckboxTag.class, null, "setOnmouseoverExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseup", ELCheckboxTag.class, null, "setOnmouseupExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("property", ELCheckboxTag.class, null, "setPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("style", ELCheckboxTag.class, null, "setStyleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleClass", ELCheckboxTag.class, null, "setStyleClassExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleId", ELCheckboxTag.class, null, "setStyleIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("tabindex", ELCheckboxTag.class, null, "setTabindexExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("title", ELCheckboxTag.class, null, "setTitleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("titleKey", ELCheckboxTag.class, null, "setTitleKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("value", ELCheckboxTag.class, null, "setValueExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } ././@LongLink0000644000175000017500000000014510423140531011315 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELErrorsTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELErrorsTag.java0000644000175000017500000002171310404045252034056 0ustar arnaudarnaud00000000000000/* * $Id: ELErrorsTag.java 123585 2004-12-29 00:43:33Z martinc $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import org.apache.struts.taglib.html.ErrorsTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Custom tag that renders error messages if an appropriate request attribute * has been created. The tag looks for a request attribute with a reserved * key, and assumes that it is either a String, a String array, containing * message keys to be looked up in the module's MessageResources, or * an object of type org.apache.struts.action.ActionErrors. *

* The following optional message keys will be utilized if corresponding * messages exist for them in the application resources: *

    *
  • errors.header - If present, the corresponding message will be * rendered prior to the individual list of error messages.
  • *
  • errors.footer - If present, the corresponding message will be * rendered following the individual list of error messages.
  • *
  • errors.prefix - If present, the corresponding message will be * rendered before each individual error message.
  • *
  • errors.suffix - If present, the corresponding message will be * rendered after each individual error message.
  • *
*

* This class is a subclass of the class * org.apache.struts.taglib.html.ErrorsTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 123585 $ */ public class ELErrorsTag extends ErrorsTag { /** * Instance variable mapped to "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String bundleExpr; /** * Instance variable mapped to "footer" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String footerExpr; /** * Instance variable mapped to "header" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String headerExpr; /** * Instance variable mapped to "locale" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String localeExpr; /** * Instance variable mapped to "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String nameExpr; /** * Instance variable mapped to "prefix" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String prefixExpr; /** * Instance variable mapped to "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String propertyExpr; /** * Instance variable mapped to "suffix" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String suffixExpr; /** * Getter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getBundleExpr() { return (bundleExpr); } /** * Getter method for "footer" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getFooterExpr() { return (footerExpr); } /** * Getter method for "header" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getHeaderExpr() { return (headerExpr); } /** * Getter method for "locale" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getLocaleExpr() { return (localeExpr); } /** * Getter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getNameExpr() { return (nameExpr); } /** * Getter method for "prefix" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPrefixExpr() { return (prefixExpr); } /** * Getter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPropertyExpr() { return (propertyExpr); } /** * Getter method for "suffix" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getSuffixExpr() { return (suffixExpr); } /** * Setter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setBundleExpr(String bundleExpr) { this.bundleExpr = bundleExpr; } /** * Setter method for "footer" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setFooterExpr(String footerExpr) { this.footerExpr = footerExpr; } /** * Setter method for "header" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setHeaderExpr(String headerExpr) { this.headerExpr = headerExpr; } /** * Setter method for "locale" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setLocaleExpr(String localeExpr) { this.localeExpr = localeExpr; } /** * Setter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setNameExpr(String nameExpr) { this.nameExpr = nameExpr; } /** * Setter method for "prefix" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPrefixExpr(String prefixExpr) { this.prefixExpr = prefixExpr; } /** * Setter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPropertyExpr(String propertyExpr) { this.propertyExpr = propertyExpr; } /** * Setter method for "suffix" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setSuffixExpr(String suffixExpr) { this.suffixExpr = suffixExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setBundleExpr(null); setFooterExpr(null); setHeaderExpr(null); setLocaleExpr(null); setNameExpr(null); setPrefixExpr(null); setPropertyExpr(null); setSuffixExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return(super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; if ((string = EvalHelper.evalString("bundle", getBundleExpr(), this, pageContext)) != null) setBundle(string); if ((string = EvalHelper.evalString("footer", getFooterExpr(), this, pageContext)) != null) setFooter(string); if ((string = EvalHelper.evalString("header", getHeaderExpr(), this, pageContext)) != null) setHeader(string); if ((string = EvalHelper.evalString("locale", getLocaleExpr(), this, pageContext)) != null) setLocale(string); if ((string = EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) setName(string); if ((string = EvalHelper.evalString("prefix", getPrefixExpr(), this, pageContext)) != null) setPrefix(string); if ((string = EvalHelper.evalString("property", getPropertyExpr(), this, pageContext)) != null) setProperty(string); if ((string = EvalHelper.evalString("suffix", getSuffixExpr(), this, pageContext)) != null) setSuffix(string); } } ././@LongLink0000644000175000017500000000015510423140531011316 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELErrorsTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELErrorsTagBeanI0000644000175000017500000000623610404045252034040 0ustar arnaudarnaud00000000000000/* * $Id: ELErrorsTagBeanInfo.java 123585 2004-12-29 00:43:33Z martinc $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.html.ELErrorsTag class. It is * needed to override the default mapping of custom tag attribute names to * class attribute names. */ public class ELErrorsTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("bundle", ELErrorsTag.class, null, "setBundleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("footer", ELErrorsTag.class, null, "setFooterExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("header", ELErrorsTag.class, null, "setHeaderExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("locale", ELErrorsTag.class, null, "setLocaleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("name", ELErrorsTag.class, null, "setNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("prefix", ELErrorsTag.class, null, "setPrefixExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("property", ELErrorsTag.class, null, "setPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("suffix", ELErrorsTag.class, null, "setSuffixExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELFileTag.java0000644000175000017500000007152710404045254033473 0ustar arnaudarnaud00000000000000/* * $Id: ELFileTag.java 373801 2006-01-31 12:18:48Z niallp $ * * Copyright 1999-2006 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import org.apache.struts.taglib.html.FileTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Custom tag for input fields of type "file". *

* This class is a subclass of the class * org.apache.struts.taglib.html.FileTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 373801 $ */ public class ELFileTag extends FileTag { /** * Instance variable mapped to "accesskey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String accesskeyExpr; /** * Instance variable mapped to "accept" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String acceptExpr; /** * Instance variable mapped to "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String altExpr; /** * Instance variable mapped to "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String altKeyExpr; /** * Instance variable mapped to "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String bundleExpr; /** * Instance variable mapped to "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String disabledExpr; /** * Instance variable mapped to "errorKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String errorKeyExpr; /** * Instance variable mapped to "errorStyle" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String errorStyleExpr; /** * Instance variable mapped to "errorStyleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String errorStyleClassExpr; /** * Instance variable mapped to "errorStyleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String errorStyleIdExpr; /** * Instance variable mapped to "indexed" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String indexedExpr; /** * Instance variable mapped to "maxlength" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String maxlengthExpr; /** * Instance variable mapped to "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String nameExpr; /** * Instance variable mapped to "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onblurExpr; /** * Instance variable mapped to "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onchangeExpr; /** * Instance variable mapped to "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onclickExpr; /** * Instance variable mapped to "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String ondblclickExpr; /** * Instance variable mapped to "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onfocusExpr; /** * Instance variable mapped to "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeydownExpr; /** * Instance variable mapped to "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeypressExpr; /** * Instance variable mapped to "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeyupExpr; /** * Instance variable mapped to "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmousedownExpr; /** * Instance variable mapped to "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmousemoveExpr; /** * Instance variable mapped to "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseoutExpr; /** * Instance variable mapped to "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseoverExpr; /** * Instance variable mapped to "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseupExpr; /** * Instance variable mapped to "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String propertyExpr; /** * Instance variable mapped to "size" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String sizeExpr; /** * Instance variable mapped to "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleExpr; /** * Instance variable mapped to "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleClassExpr; /** * Instance variable mapped to "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleIdExpr; /** * Instance variable mapped to "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String tabindexExpr; /** * Instance variable mapped to "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String titleExpr; /** * Instance variable mapped to "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String titleKeyExpr; /** * Instance variable mapped to "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String valueExpr; /** * Getter method for "accesskey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAccesskeyExpr() { return (accesskeyExpr); } /** * Getter method for "accept" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAcceptExpr() { return (acceptExpr); } /** * Getter method for "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAltExpr() { return (altExpr); } /** * Getter method for "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAltKeyExpr() { return (altKeyExpr); } /** * Getter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getBundleExpr() { return (bundleExpr); } /** * Getter method for "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getDisabledExpr() { return (disabledExpr); } /** * Getter method for "errorKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getErrorKeyExpr() { return (errorKeyExpr); } /** * Getter method for "errorStyle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getErrorStyleExpr() { return (errorStyleExpr); } /** * Getter method for "errorStyleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getErrorStyleClassExpr() { return (errorStyleClassExpr); } /** * Getter method for "errorStyleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getErrorStyleIdExpr() { return (errorStyleIdExpr); } /** * Getter method for "indexed" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getIndexedExpr() { return (indexedExpr); } /** * Getter method for "maxlength" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getMaxlengthExpr() { return (maxlengthExpr); } /** * Getter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getNameExpr() { return (nameExpr); } /** * Getter method for "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnblurExpr() { return (onblurExpr); } /** * Getter method for "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnchangeExpr() { return (onchangeExpr); } /** * Getter method for "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnclickExpr() { return (onclickExpr); } /** * Getter method for "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOndblclickExpr() { return (ondblclickExpr); } /** * Getter method for "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnfocusExpr() { return (onfocusExpr); } /** * Getter method for "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeydownExpr() { return (onkeydownExpr); } /** * Getter method for "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeypressExpr() { return (onkeypressExpr); } /** * Getter method for "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeyupExpr() { return (onkeyupExpr); } /** * Getter method for "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmousedownExpr() { return (onmousedownExpr); } /** * Getter method for "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmousemoveExpr() { return (onmousemoveExpr); } /** * Getter method for "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseoutExpr() { return (onmouseoutExpr); } /** * Getter method for "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseoverExpr() { return (onmouseoverExpr); } /** * Getter method for "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseupExpr() { return (onmouseupExpr); } /** * Getter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPropertyExpr() { return (propertyExpr); } /** * Getter method for "size" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getSizeExpr() { return (sizeExpr); } /** * Getter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleExpr() { return (styleExpr); } /** * Getter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleClassExpr() { return (styleClassExpr); } /** * Getter method for "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleIdExpr() { return (styleIdExpr); } /** * Getter method for "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTabindexExpr() { return (tabindexExpr); } /** * Getter method for "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTitleExpr() { return (titleExpr); } /** * Getter method for "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTitleKeyExpr() { return (titleKeyExpr); } /** * Getter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getValueExpr() { return (valueExpr); } /** * Setter method for "accesskey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAccesskeyExpr(String accesskeyExpr) { this.accesskeyExpr = accesskeyExpr; } /** * Setter method for "accept" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAcceptExpr(String acceptExpr) { this.acceptExpr = acceptExpr; } /** * Setter method for "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAltExpr(String altExpr) { this.altExpr = altExpr; } /** * Setter method for "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAltKeyExpr(String altKeyExpr) { this.altKeyExpr = altKeyExpr; } /** * Setter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setBundleExpr(String bundleExpr) { this.bundleExpr = bundleExpr; } /** * Setter method for "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setDisabledExpr(String disabledExpr) { this.disabledExpr = disabledExpr; } /** * Setter method for "errorKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setErrorKeyExpr(String errorKeyExpr) { this.errorKeyExpr = errorKeyExpr; } /** * Setter method for "errorStyle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setErrorStyleExpr(String errorStyleExpr) { this.errorStyleExpr = errorStyleExpr; } /** * Setter method for "errorStyleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setErrorStyleClassExpr(String errorStyleClassExpr) { this.errorStyleClassExpr = errorStyleClassExpr; } /** * Setter method for "errorStyleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setErrorStyleIdExpr(String errorStyleIdExpr) { this.errorStyleIdExpr = errorStyleIdExpr; } /** * Setter method for "indexed" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setIndexedExpr(String indexedExpr) { this.indexedExpr = indexedExpr; } /** * Setter method for "maxlength" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setMaxlengthExpr(String maxlengthExpr) { this.maxlengthExpr = maxlengthExpr; } /** * Setter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setNameExpr(String nameExpr) { this.nameExpr = nameExpr; } /** * Setter method for "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnblurExpr(String onblurExpr) { this.onblurExpr = onblurExpr; } /** * Setter method for "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnchangeExpr(String onchangeExpr) { this.onchangeExpr = onchangeExpr; } /** * Setter method for "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnclickExpr(String onclickExpr) { this.onclickExpr = onclickExpr; } /** * Setter method for "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOndblclickExpr(String ondblclickExpr) { this.ondblclickExpr = ondblclickExpr; } /** * Setter method for "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnfocusExpr(String onfocusExpr) { this.onfocusExpr = onfocusExpr; } /** * Setter method for "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeydownExpr(String onkeydownExpr) { this.onkeydownExpr = onkeydownExpr; } /** * Setter method for "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeypressExpr(String onkeypressExpr) { this.onkeypressExpr = onkeypressExpr; } /** * Setter method for "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeyupExpr(String onkeyupExpr) { this.onkeyupExpr = onkeyupExpr; } /** * Setter method for "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmousedownExpr(String onmousedownExpr) { this.onmousedownExpr = onmousedownExpr; } /** * Setter method for "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmousemoveExpr(String onmousemoveExpr) { this.onmousemoveExpr = onmousemoveExpr; } /** * Setter method for "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseoutExpr(String onmouseoutExpr) { this.onmouseoutExpr = onmouseoutExpr; } /** * Setter method for "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseoverExpr(String onmouseoverExpr) { this.onmouseoverExpr = onmouseoverExpr; } /** * Setter method for "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseupExpr(String onmouseupExpr) { this.onmouseupExpr = onmouseupExpr; } /** * Setter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPropertyExpr(String propertyExpr) { this.propertyExpr = propertyExpr; } /** * Setter method for "size" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setSizeExpr(String sizeExpr) { this.sizeExpr = sizeExpr; } /** * Setter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleExpr(String styleExpr) { this.styleExpr = styleExpr; } /** * Setter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleClassExpr(String styleClassExpr) { this.styleClassExpr = styleClassExpr; } /** * Setter method for "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleIdExpr(String styleIdExpr) { this.styleIdExpr = styleIdExpr; } /** * Setter method for "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTabindexExpr(String tabindexExpr) { this.tabindexExpr = tabindexExpr; } /** * Setter method for "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTitleExpr(String titleExpr) { this.titleExpr = titleExpr; } /** * Setter method for "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTitleKeyExpr(String titleKeyExpr) { this.titleKeyExpr = titleKeyExpr; } /** * Setter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setValueExpr(String valueExpr) { this.valueExpr = valueExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setAccesskeyExpr(null); setAcceptExpr(null); setAltExpr(null); setAltKeyExpr(null); setBundleExpr(null); setDisabledExpr(null); setErrorKeyExpr(null); setErrorStyleExpr(null); setErrorStyleClassExpr(null); setErrorStyleIdExpr(null); setIndexedExpr(null); setMaxlengthExpr(null); setNameExpr(null); setOnblurExpr(null); setOnchangeExpr(null); setOnclickExpr(null); setOndblclickExpr(null); setOnfocusExpr(null); setOnkeydownExpr(null); setOnkeypressExpr(null); setOnkeyupExpr(null); setOnmousedownExpr(null); setOnmousemoveExpr(null); setOnmouseoutExpr(null); setOnmouseoverExpr(null); setOnmouseupExpr(null); setPropertyExpr(null); setSizeExpr(null); setStyleExpr(null); setStyleClassExpr(null); setStyleIdExpr(null); setTabindexExpr(null); setTitleExpr(null); setTitleKeyExpr(null); setValueExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return (super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; Boolean bool = null; if ((string = EvalHelper.evalString("accesskey", getAccesskeyExpr(), this, pageContext)) != null) setAccesskey(string); if ((string = EvalHelper.evalString("accept", getAcceptExpr(), this, pageContext)) != null) setAccept(string); if ((string = EvalHelper.evalString("alt", getAltExpr(), this, pageContext)) != null) setAlt(string); if ((string = EvalHelper.evalString("altKey", getAltKeyExpr(), this, pageContext)) != null) setAltKey(string); if ((string = EvalHelper.evalString("bundle", getBundleExpr(), this, pageContext)) != null) setBundle(string); if ((bool = EvalHelper.evalBoolean("disabled", getDisabledExpr(), this, pageContext)) != null) setDisabled(bool.booleanValue()); if ((string = EvalHelper.evalString("errorKey", getErrorKeyExpr(), this, pageContext)) != null) setErrorKey(string); if ((string = EvalHelper.evalString("errorStyle", getErrorStyleExpr(), this, pageContext)) != null) setErrorStyle(string); if ((string = EvalHelper.evalString("errorStyleClass", getErrorStyleClassExpr(), this, pageContext)) != null) setErrorStyleClass(string); if ((string = EvalHelper.evalString("errorStyleId", getErrorStyleIdExpr(), this, pageContext)) != null) setErrorStyleId(string); if ((bool = EvalHelper.evalBoolean("indexed", getIndexedExpr(), this, pageContext)) != null) setIndexed(bool.booleanValue()); if ((string = EvalHelper.evalString("maxlength", getMaxlengthExpr(), this, pageContext)) != null) setMaxlength(string); if ((string = EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) setName(string); if ((string = EvalHelper.evalString("onblur", getOnblurExpr(), this, pageContext)) != null) setOnblur(string); if ((string = EvalHelper.evalString("onchange", getOnchangeExpr(), this, pageContext)) != null) setOnchange(string); if ((string = EvalHelper.evalString("onclick", getOnclickExpr(), this, pageContext)) != null) setOnclick(string); if ((string = EvalHelper.evalString("ondblclick", getOndblclickExpr(), this, pageContext)) != null) setOndblclick(string); if ((string = EvalHelper.evalString("onfocus", getOnfocusExpr(), this, pageContext)) != null) setOnfocus(string); if ((string = EvalHelper.evalString("onkeydown", getOnkeydownExpr(), this, pageContext)) != null) setOnkeydown(string); if ((string = EvalHelper.evalString("onkeypress", getOnkeypressExpr(), this, pageContext)) != null) setOnkeypress(string); if ((string = EvalHelper.evalString("onkeyup", getOnkeyupExpr(), this, pageContext)) != null) setOnkeyup(string); if ((string = EvalHelper.evalString("onmousedown", getOnmousedownExpr(), this, pageContext)) != null) setOnmousedown(string); if ((string = EvalHelper.evalString("onmousemove", getOnmousemoveExpr(), this, pageContext)) != null) setOnmousemove(string); if ((string = EvalHelper.evalString("onmouseout", getOnmouseoutExpr(), this, pageContext)) != null) setOnmouseout(string); if ((string = EvalHelper.evalString("onmouseover", getOnmouseoverExpr(), this, pageContext)) != null) setOnmouseover(string); if ((string = EvalHelper.evalString("onmouseup", getOnmouseupExpr(), this, pageContext)) != null) setOnmouseup(string); if ((string = EvalHelper.evalString("property", getPropertyExpr(), this, pageContext)) != null) setProperty(string); if ((string = EvalHelper.evalString("size", getSizeExpr(), this, pageContext)) != null) setSize(string); if ((string = EvalHelper.evalString("style", getStyleExpr(), this, pageContext)) != null) setStyle(string); if ((string = EvalHelper.evalString("styleClass", getStyleClassExpr(), this, pageContext)) != null) setStyleClass(string); if ((string = EvalHelper.evalString("styleId", getStyleIdExpr(), this, pageContext)) != null) setStyleId(string); if ((string = EvalHelper.evalString("tabindex", getTabindexExpr(), this, pageContext)) != null) setTabindex(string); if ((string = EvalHelper.evalString("title", getTitleExpr(), this, pageContext)) != null) setTitle(string); if ((string = EvalHelper.evalString("titleKey", getTitleKeyExpr(), this, pageContext)) != null) setTitleKey(string); if ((string = EvalHelper.evalString("value", getValueExpr(), this, pageContext)) != null) setValue(string); } } ././@LongLink0000644000175000017500000000015310423140531011314 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELFileTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELFileTagBeanInf0000644000175000017500000002250710404045252033766 0ustar arnaudarnaud00000000000000/* * $Id: ELFileTagBeanInfo.java 123585 2004-12-29 00:43:33Z martinc $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.html.ELFileTag class. It is needed * to override the default mapping of custom tag attribute names to class * attribute names. *

* This is because the value of the unevaluated EL expression has to be kept * separately from the evaluated value, which is stored in the base class. This * is related to the fact that the JSP compiler can choose to reuse different * tag instances if they received the same original attribute values, and the * JSP compiler can choose to not re-call the setter methods, because it can * assume the same values are already set. */ public class ELFileTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("accesskey", ELFileTag.class, null, "setAccesskeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("accept", ELFileTag.class, null, "setAcceptExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("alt", ELFileTag.class, null, "setAltExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("altKey", ELFileTag.class, null, "setAltKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("bundle", ELFileTag.class, null, "setBundleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("disabled", ELFileTag.class, null, "setDisabledExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("errorKey", ELFileTag.class, null, "setErrorKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("errorStyle", ELFileTag.class, null, "setErrorStyleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("errorStyleClass", ELFileTag.class, null, "setErrorStyleClassExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("errorStyleId", ELFileTag.class, null, "setErrorStyleIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("indexed", ELFileTag.class, null, "setIndexedExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("maxlength", ELFileTag.class, null, "setMaxlengthExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("name", ELFileTag.class, null, "setNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onblur", ELFileTag.class, null, "setOnblurExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onchange", ELFileTag.class, null, "setOnchangeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onclick", ELFileTag.class, null, "setOnclickExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("ondblclick", ELFileTag.class, null, "setOndblclickExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onfocus", ELFileTag.class, null, "setOnfocusExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeydown", ELFileTag.class, null, "setOnkeydownExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeypress", ELFileTag.class, null, "setOnkeypressExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeyup", ELFileTag.class, null, "setOnkeyupExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmousedown", ELFileTag.class, null, "setOnmousedownExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmousemove", ELFileTag.class, null, "setOnmousemoveExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseout", ELFileTag.class, null, "setOnmouseoutExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseover", ELFileTag.class, null, "setOnmouseoverExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseup", ELFileTag.class, null, "setOnmouseupExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("property", ELFileTag.class, null, "setPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("size", ELFileTag.class, null, "setSizeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("style", ELFileTag.class, null, "setStyleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleClass", ELFileTag.class, null, "setStyleClassExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleId", ELFileTag.class, null, "setStyleIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("tabindex", ELFileTag.class, null, "setTabindexExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("title", ELFileTag.class, null, "setTitleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("titleKey", ELFileTag.class, null, "setTitleKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("value", ELFileTag.class, null, "setValueExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELFormTag.java0000644000175000017500000003321210404045252033502 0ustar arnaudarnaud00000000000000/* * $Id: ELFormTag.java 160263 2005-04-06 07:44:55Z niallp $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import org.apache.struts.taglib.html.FormTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Custom tag that represents an input form, associated with a bean whose * properties correspond to the various fields of the form. *

* This class is a subclass of the class * org.apache.struts.taglib.html.FormTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 160263 $ */ public class ELFormTag extends FormTag { /** * Instance variable mapped to "action" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String actionExpr; /** * Instance variable mapped to "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String disabledExpr; /** * Instance variable mapped to "enctype" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String enctypeExpr; /** * Instance variable mapped to "focus" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String focusExpr; /** * Instance variable mapped to "focusIndex" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String focusIndexExpr; /** * Instance variable mapped to "method" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String methodExpr; /** * Instance variable mapped to "onreset" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onresetExpr; /** * Instance variable mapped to "onsubmit" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onsubmitExpr; /** * Instance variable mapped to "readonly" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String readonlyExpr; /** * Instance variable mapped to "scriptLanguage" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String scriptLanguageExpr; /** * Instance variable mapped to "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleExpr; /** * Instance variable mapped to "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleClassExpr; /** * Instance variable mapped to "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleIdExpr; /** * Instance variable mapped to "target" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String targetExpr; /** * Instance variable mapped to "acceptCharset" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String acceptCharsetExpr; /** * Getter method for "action" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getActionExpr() { return (actionExpr); } /** * Getter method for "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getDisabledExpr() { return (disabledExpr); } /** * Getter method for "enctype" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getEnctypeExpr() { return (enctypeExpr); } /** * Getter method for "focus" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getFocusExpr() { return (focusExpr); } /** * Getter method for "focusIndex" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getFocusIndexExpr() { return (focusIndexExpr); } /** * Getter method for "method" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getMethodExpr() { return (methodExpr); } /** * Getter method for "onreset" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnresetExpr() { return (onresetExpr); } /** * Getter method for "onsubmit" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnsubmitExpr() { return (onsubmitExpr); } /** * Getter method for "readonly" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getReadonlyExpr() { return (readonlyExpr); } /** * Getter method for "scriptLanguage" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getScriptLanguageExpr() { return (scriptLanguageExpr); } /** * Getter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleExpr() { return (styleExpr); } /** * Getter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleClassExpr() { return (styleClassExpr); } /** * Getter method for "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleIdExpr() { return (styleIdExpr); } /** * Getter method for "target" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTargetExpr() { return (targetExpr); } /** * Getter method for "acceptCharset" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAcceptCharsetExpr() { return (acceptCharsetExpr); } /** * Setter method for "action" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setActionExpr(String actionExpr) { this.actionExpr = actionExpr; } /** * Setter method for "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setDisabledExpr(String disabledExpr) { this.disabledExpr = disabledExpr; } /** * Setter method for "enctype" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setEnctypeExpr(String enctypeExpr) { this.enctypeExpr = enctypeExpr; } /** * Setter method for "focus" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setFocusExpr(String focusExpr) { this.focusExpr = focusExpr; } /** * Setter method for "focusIndex" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setFocusIndexExpr(String focusIndexExpr) { this.focusIndexExpr = focusIndexExpr; } /** * Setter method for "method" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setMethodExpr(String methodExpr) { this.methodExpr = methodExpr; } /** * Setter method for "onreset" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnresetExpr(String onresetExpr) { this.onresetExpr = onresetExpr; } /** * Setter method for "onsubmit" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnsubmitExpr(String onsubmitExpr) { this.onsubmitExpr = onsubmitExpr; } /** * Setter method for "readonly" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setReadonlyExpr(String readonlyExpr) { this.readonlyExpr = readonlyExpr; } /** * Setter method for "scriptLanguage" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setScriptLanguageExpr(String scriptLanguageExpr) { this.scriptLanguageExpr = scriptLanguageExpr; } /** * Setter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleExpr(String styleExpr) { this.styleExpr = styleExpr; } /** * Setter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleClassExpr(String styleClassExpr) { this.styleClassExpr = styleClassExpr; } /** * Setter method for "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleIdExpr(String styleIdExpr) { this.styleIdExpr = styleIdExpr; } /** * Setter method for "target" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTargetExpr(String targetExpr) { this.targetExpr = targetExpr; } /** * Setter method for "acceptCharset" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAcceptCharsetExpr(String acceptCharsetExpr) { this.acceptCharsetExpr = acceptCharsetExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setActionExpr(null); setDisabledExpr(null); setEnctypeExpr(null); setFocusExpr(null); setFocusIndexExpr(null); setMethodExpr(null); setOnresetExpr(null); setOnsubmitExpr(null); setReadonlyExpr(null); setScriptLanguageExpr(null); setStyleExpr(null); setStyleClassExpr(null); setStyleIdExpr(null); setTargetExpr(null); setAcceptCharsetExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return(super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; Boolean bool = null; if ((string = EvalHelper.evalString("action", getActionExpr(), this, pageContext)) != null) setAction(string); if ((bool = EvalHelper.evalBoolean("disabled", getDisabledExpr(), this, pageContext)) != null) setDisabled(bool.booleanValue()); if ((string = EvalHelper.evalString("enctype", getEnctypeExpr(), this, pageContext)) != null) setEnctype(string); if ((string = EvalHelper.evalString("focus", getFocusExpr(), this, pageContext)) != null) setFocus(string); if ((string = EvalHelper.evalString("focusIndex", getFocusIndexExpr(), this, pageContext)) != null) setFocusIndex(string); if ((string = EvalHelper.evalString("method", getMethodExpr(), this, pageContext)) != null) setMethod(string); if ((string = EvalHelper.evalString("onreset", getOnresetExpr(), this, pageContext)) != null) setOnreset(string); if ((string = EvalHelper.evalString("onsubmit", getOnsubmitExpr(), this, pageContext)) != null) setOnsubmit(string); if ((bool = EvalHelper.evalBoolean("readonly", getReadonlyExpr(), this, pageContext)) != null) setReadonly(bool.booleanValue()); if ((bool = EvalHelper.evalBoolean("scriptLanguage", getScriptLanguageExpr(), this, pageContext)) != null) setScriptLanguage(bool.booleanValue()); if ((string = EvalHelper.evalString("style", getStyleExpr(), this, pageContext)) != null) setStyle(string); if ((string = EvalHelper.evalString("styleClass", getStyleClassExpr(), this, pageContext)) != null) setStyleClass(string); if ((string = EvalHelper.evalString("styleId", getStyleIdExpr(), this, pageContext)) != null) setStyleId(string); if ((string = EvalHelper.evalString("target", getTargetExpr(), this, pageContext)) != null) setTarget(string); if ((string = EvalHelper.evalString("acceptCharset", getAcceptCharsetExpr(), this, pageContext)) != null) setAcceptCharset(string); } } ././@LongLink0000644000175000017500000000015310423140531011314 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELFormTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELFormTagBeanInf0000644000175000017500000001241310404045254034007 0ustar arnaudarnaud00000000000000/* * $Id: ELFormTagBeanInfo.java 160263 2005-04-06 07:44:55Z niallp $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.html.ELFormTag class. It is * needed to override the default mapping of custom tag attribute names to * class attribute names. */ public class ELFormTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("action", ELFormTag.class, null, "setActionExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("disabled", ELTextTag.class, null, "setDisabledExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("enctype", ELFormTag.class, null, "setEnctypeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("focus", ELFormTag.class, null, "setFocusExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("focusIndex", ELFormTag.class, null, "setFocusIndexExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("method", ELFormTag.class, null, "setMethodExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("name", ELFormTag.class, null, "setNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onreset", ELFormTag.class, null, "setOnresetExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onsubmit", ELFormTag.class, null, "setOnsubmitExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("readonly", ELTextTag.class, null, "setReadonlyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("scope", ELFormTag.class, null, "setScopeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("scriptLanguage", ELFormTag.class, null, "setScriptLanguageExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("style", ELFormTag.class, null, "setStyleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleClass", ELFormTag.class, null, "setStyleClassExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleId", ELFormTag.class, null, "setStyleIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("target", ELFormTag.class, null, "setTargetExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("type", ELFormTag.class, null, "setTypeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("acceptCharset", ELFormTag.class, null, "setAcceptCharsetExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELFrameTag.java0000644000175000017500000005676710404045252033655 0ustar arnaudarnaud00000000000000/* * $Id: ELFrameTag.java 123585 2004-12-29 00:43:33Z martinc $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import org.apache.struts.taglib.html.FrameTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Generate an HTML <frame> tag with similar capabilities as * those the <html:link> tag provides for hyperlink * elements. The src element is rendered using the same technique * that {@link org.apache.struts.taglib.html.LinkTag LinkTag} uses to render * the href attribute of a hyperlink. Additionally, the HTML 4.0 * frame tag attributes noresize, scrolling, * marginheight, marginwidth, * frameborder, and longdesc are supported. The * frame name attribute is rendered based on the * frameName property. *

* Note that the value of longdesc is intended to be a URI, but * currently no rewriting is supported. The attribute is set directly from * the property value. *

* This class is a subclass of the class * org.apache.struts.taglib.html.FrameTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 123585 $ */ public class ELFrameTag extends FrameTag { /** * Instance variable mapped to "action" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String actionExpr; /** * Instance variable mapped to "module" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String moduleExpr; /** * Instance variable mapped to "anchor" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String anchorExpr; /** * Instance variable mapped to "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String bundleExpr; /** * Instance variable mapped to "forward" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String forwardExpr; /** * Instance variable mapped to "frameborder" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String frameborderExpr; /** * Instance variable mapped to "frameName" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String frameNameExpr; /** * Instance variable mapped to "href" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String hrefExpr; /** * Instance variable mapped to "longdesc" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String longdescExpr; /** * Instance variable mapped to "marginheight" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String marginheightExpr; /** * Instance variable mapped to "marginwidth" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String marginwidthExpr; /** * Instance variable mapped to "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String nameExpr; /** * Instance variable mapped to "noresize" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String noresizeExpr; /** * Instance variable mapped to "page" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String pageExpr; /** * Instance variable mapped to "paramId" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String paramIdExpr; /** * Instance variable mapped to "paramName" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String paramNameExpr; /** * Instance variable mapped to "paramProperty" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String paramPropertyExpr; /** * Instance variable mapped to "paramScope" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String paramScopeExpr; /** * Instance variable mapped to "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String propertyExpr; /** * Instance variable mapped to "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String scopeExpr; /** * Instance variable mapped to "scrolling" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String scrollingExpr; /** * Instance variable mapped to "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleExpr; /** * Instance variable mapped to "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleClassExpr; /** * Instance variable mapped to "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleIdExpr; /** * Instance variable mapped to "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String titleExpr; /** * Instance variable mapped to "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String titleKeyExpr; /** * Instance variable mapped to "transaction" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String transactionExpr; /** * Getter method for "action" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getActionExpr() { return (actionExpr); } /** * Getter method for "module" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getModuleExpr() { return (moduleExpr); } /** * Getter method for "anchor" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAnchorExpr() { return (anchorExpr); } /** * Getter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getBundleExpr() { return (bundleExpr); } /** * Getter method for "forward" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getForwardExpr() { return (forwardExpr); } /** * Getter method for "frameborder" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getFrameborderExpr() { return (frameborderExpr); } /** * Getter method for "frameName" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getFrameNameExpr() { return (frameNameExpr); } /** * Getter method for "href" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getHrefExpr() { return (hrefExpr); } /** * Getter method for "longdesc" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getLongdescExpr() { return (longdescExpr); } /** * Getter method for "marginheight" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getMarginheightExpr() { return (marginheightExpr); } /** * Getter method for "marginwidth" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getMarginwidthExpr() { return (marginwidthExpr); } /** * Getter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getNameExpr() { return (nameExpr); } /** * Getter method for "noresize" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getNoresizeExpr() { return (noresizeExpr); } /** * Getter method for "page" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPageExpr() { return (pageExpr); } /** * Getter method for "paramId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getParamIdExpr() { return (paramIdExpr); } /** * Getter method for "paramName" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getParamNameExpr() { return (paramNameExpr); } /** * Getter method for "paramProperty" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getParamPropertyExpr() { return (paramPropertyExpr); } /** * Getter method for "paramScope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getParamScopeExpr() { return (paramScopeExpr); } /** * Getter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPropertyExpr() { return (propertyExpr); } /** * Getter method for "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getScopeExpr() { return (scopeExpr); } /** * Getter method for "scrolling" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getScrollingExpr() { return (scrollingExpr); } /** * Getter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleExpr() { return (styleExpr); } /** * Getter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleClassExpr() { return (styleClassExpr); } /** * Getter method for "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleIdExpr() { return (styleIdExpr); } /** * Getter method for "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTitleExpr() { return (titleExpr); } /** * Getter method for "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTitleKeyExpr() { return (titleKeyExpr); } /** * Getter method for "transaction" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTransactionExpr() { return (transactionExpr); } /** * Setter method for "action" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setActionExpr(String actionExpr) { this.actionExpr = actionExpr; } /** * Setter method for "module" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setModuleExpr(String moduleExpr) { this.moduleExpr = moduleExpr; } /** * Setter method for "anchor" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAnchorExpr(String anchorExpr) { this.anchorExpr = anchorExpr; } /** * Setter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setBundleExpr(String bundleExpr) { this.bundleExpr = bundleExpr; } /** * Setter method for "forward" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setForwardExpr(String forwardExpr) { this.forwardExpr = forwardExpr; } /** * Setter method for "frameborder" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setFrameborderExpr(String frameborderExpr) { this.frameborderExpr = frameborderExpr; } /** * Setter method for "frameName" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setFrameNameExpr(String frameNameExpr) { this.frameNameExpr = frameNameExpr; } /** * Setter method for "href" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setHrefExpr(String hrefExpr) { this.hrefExpr = hrefExpr; } /** * Setter method for "longdesc" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setLongdescExpr(String longdescExpr) { this.longdescExpr = longdescExpr; } /** * Setter method for "marginheight" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setMarginheightExpr(String marginheightExpr) { this.marginheightExpr = marginheightExpr; } /** * Setter method for "marginwidth" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setMarginwidthExpr(String marginwidthExpr) { this.marginwidthExpr = marginwidthExpr; } /** * Setter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setNameExpr(String nameExpr) { this.nameExpr = nameExpr; } /** * Setter method for "noresize" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setNoresizeExpr(String noresizeExpr) { this.noresizeExpr = noresizeExpr; } /** * Setter method for "page" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPageExpr(String pageExpr) { this.pageExpr = pageExpr; } /** * Setter method for "paramId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setParamIdExpr(String paramIdExpr) { this.paramIdExpr = paramIdExpr; } /** * Setter method for "paramName" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setParamNameExpr(String paramNameExpr) { this.paramNameExpr = paramNameExpr; } /** * Setter method for "paramProperty" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setParamPropertyExpr(String paramPropertyExpr) { this.paramPropertyExpr = paramPropertyExpr; } /** * Setter method for "paramScope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setParamScopeExpr(String paramScopeExpr) { this.paramScopeExpr = paramScopeExpr; } /** * Setter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPropertyExpr(String propertyExpr) { this.propertyExpr = propertyExpr; } /** * Setter method for "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setScopeExpr(String scopeExpr) { this.scopeExpr = scopeExpr; } /** * Setter method for "scrolling" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setScrollingExpr(String scrollingExpr) { this.scrollingExpr = scrollingExpr; } /** * Setter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleExpr(String styleExpr) { this.styleExpr = styleExpr; } /** * Setter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleClassExpr(String styleClassExpr) { this.styleClassExpr = styleClassExpr; } /** * Setter method for "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleIdExpr(String styleIdExpr) { this.styleIdExpr = styleIdExpr; } /** * Setter method for "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTitleExpr(String titleExpr) { this.titleExpr = titleExpr; } /** * Setter method for "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTitleKeyExpr(String titleKeyExpr) { this.titleKeyExpr = titleKeyExpr; } /** * Setter method for "transaction" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTransactionExpr(String transactionExpr) { this.transactionExpr = transactionExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setActionExpr(null); setModuleExpr(null); setAnchorExpr(null); setBundleExpr(null); setForwardExpr(null); setFrameborderExpr(null); setFrameNameExpr(null); setHrefExpr(null); setLongdescExpr(null); setMarginheightExpr(null); setMarginwidthExpr(null); setNameExpr(null); setNoresizeExpr(null); setPageExpr(null); setParamIdExpr(null); setParamNameExpr(null); setParamPropertyExpr(null); setParamScopeExpr(null); setPropertyExpr(null); setScopeExpr(null); setScrollingExpr(null); setStyleExpr(null); setStyleClassExpr(null); setStyleIdExpr(null); setTitleExpr(null); setTitleKeyExpr(null); setTransactionExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return (super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; Integer integer = null; Boolean bool = null; if ((string = EvalHelper.evalString("action", getActionExpr(), this, pageContext)) != null) setAction(string); if ((string = EvalHelper.evalString("module", getModuleExpr(), this, pageContext)) != null) setModule(string); if ((string = EvalHelper.evalString("anchor", getAnchorExpr(), this, pageContext)) != null) setAnchor(string); if ((string = EvalHelper.evalString("bundle", getBundleExpr(), this, pageContext)) != null) setBundle(string); if ((string = EvalHelper.evalString("forward", getForwardExpr(), this, pageContext)) != null) setForward(string); if ((string = EvalHelper.evalString("frameborder", getFrameborderExpr(), this, pageContext)) != null) setFrameborder(string); if ((string = EvalHelper.evalString("frameName", getFrameNameExpr(), this, pageContext)) != null) setFrameName(string); if ((string = EvalHelper.evalString("href", getHrefExpr(), this, pageContext)) != null) setHref(string); if ((string = EvalHelper.evalString("longdesc", getLongdescExpr(), this, pageContext)) != null) setLongdesc(string); if ((integer = EvalHelper.evalInteger("marginheight", getMarginheightExpr(), this, pageContext)) != null) setMarginheight(integer); if ((integer = EvalHelper.evalInteger("marginwidth", getMarginwidthExpr(), this, pageContext)) != null) setMarginwidth(integer); if ((string = EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) setName(string); if ((bool = EvalHelper.evalBoolean("noresize", getNoresizeExpr(), this, pageContext)) != null) setNoresize(bool.booleanValue()); if ((string = EvalHelper.evalString("page", getPageExpr(), this, pageContext)) != null) setPage(string); if ((string = EvalHelper.evalString("paramId", getParamIdExpr(), this, pageContext)) != null) setParamId(string); if ((string = EvalHelper.evalString("paramName", getParamNameExpr(), this, pageContext)) != null) setParamName(string); if ((string = EvalHelper.evalString("paramProperty", getParamPropertyExpr(), this, pageContext)) != null) setParamProperty(string); if ((string = EvalHelper.evalString("paramScope", getParamScopeExpr(), this, pageContext)) != null) setParamScope(string); if ((string = EvalHelper.evalString("property", getPropertyExpr(), this, pageContext)) != null) setProperty(string); if ((string = EvalHelper.evalString("scope", getScopeExpr(), this, pageContext)) != null) setScope(string); if ((string = EvalHelper.evalString("scrolling", getScrollingExpr(), this, pageContext)) != null) setScrolling(string); if ((string = EvalHelper.evalString("style", getStyleExpr(), this, pageContext)) != null) setStyle(string); if ((string = EvalHelper.evalString("styleClass", getStyleClassExpr(), this, pageContext)) != null) setStyleClass(string); if ((string = EvalHelper.evalString("styleId", getStyleIdExpr(), this, pageContext)) != null) setStyleId(string); if ((string = EvalHelper.evalString("title", getTitleExpr(), this, pageContext)) != null) setTitle(string); if ((string = EvalHelper.evalString("titleKey", getTitleKeyExpr(), this, pageContext)) != null) setTitleKey(string); if ((bool = EvalHelper.evalBoolean("transaction", getTransactionExpr(), this, pageContext)) != null) setTransaction(bool.booleanValue()); } } ././@LongLink0000644000175000017500000000015410423140531011315 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELFrameTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELFrameTagBeanIn0000644000175000017500000001722110404045254033772 0ustar arnaudarnaud00000000000000/* * $Id: ELFrameTagBeanInfo.java 123585 2004-12-29 00:43:33Z martinc $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.html.ELFrameTag class. It is needed * to override the default mapping of custom tag attribute names to class * attribute names. *

* This is because the value of the unevaluated EL expression has to be kept * separately from the evaluated value, which is stored in the base class. This * is related to the fact that the JSP compiler can choose to reuse different * tag instances if they received the same original attribute values, and the * JSP compiler can choose to not re-call the setter methods, because it can * assume the same values are already set. */ public class ELFrameTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("action", ELFrameTag.class, null, "setActionExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("module", ELFrameTag.class, null, "setModuleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("anchor", ELFrameTag.class, null, "setAnchorExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("bundle", ELFrameTag.class, null, "setBundleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("forward", ELFrameTag.class, null, "setForwardExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("frameborder", ELFrameTag.class, null, "setFrameborderExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("frameName", ELFrameTag.class, null, "setFrameNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("href", ELFrameTag.class, null, "setHrefExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("longdesc", ELFrameTag.class, null, "setLongdescExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("marginheight", ELFrameTag.class, null, "setMarginheightExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("marginwidth", ELFrameTag.class, null, "setMarginwidthExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("name", ELFrameTag.class, null, "setNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("noresize", ELFrameTag.class, null, "setNoresizeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("page", ELFrameTag.class, null, "setPageExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("paramId", ELFrameTag.class, null, "setParamIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("paramName", ELFrameTag.class, null, "setParamNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("paramProperty", ELFrameTag.class, null, "setParamPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("paramScope", ELFrameTag.class, null, "setParamScopeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("property", ELFrameTag.class, null, "setPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("scope", ELFrameTag.class, null, "setScopeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("scrolling", ELFrameTag.class, null, "setScrollingExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("style", ELFrameTag.class, null, "setStyleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleClass", ELFrameTag.class, null, "setStyleClassExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleId", ELFrameTag.class, null, "setStyleIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("title", ELFrameTag.class, null, "setTitleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("titleKey", ELFrameTag.class, null, "setTitleKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("transaction", ELFrameTag.class, null, "setTransactionExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } ././@LongLink0000644000175000017500000000014510423140531011315 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELHiddenTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELHiddenTag.java0000644000175000017500000005654510404045252034010 0ustar arnaudarnaud00000000000000/* * $Id: ELHiddenTag.java 123585 2004-12-29 00:43:33Z martinc $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import org.apache.struts.taglib.html.HiddenTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Custom tag for input fields of type "hidden". *

* This class is a subclass of the class * org.apache.struts.taglib.html.HiddenTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 123585 $ */ public class ELHiddenTag extends HiddenTag { /** * Instance variable mapped to "accesskey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String accesskeyExpr; /** * Instance variable mapped to "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String altExpr; /** * Instance variable mapped to "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String altKeyExpr; /** * Instance variable mapped to "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String bundleExpr; /** * Instance variable mapped to "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String disabledExpr; /** * Instance variable mapped to "indexed" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String indexedExpr; /** * Instance variable mapped to "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String nameExpr; /** * Instance variable mapped to "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onblurExpr; /** * Instance variable mapped to "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onchangeExpr; /** * Instance variable mapped to "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onclickExpr; /** * Instance variable mapped to "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String ondblclickExpr; /** * Instance variable mapped to "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onfocusExpr; /** * Instance variable mapped to "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeydownExpr; /** * Instance variable mapped to "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeypressExpr; /** * Instance variable mapped to "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeyupExpr; /** * Instance variable mapped to "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmousedownExpr; /** * Instance variable mapped to "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmousemoveExpr; /** * Instance variable mapped to "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseoutExpr; /** * Instance variable mapped to "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseoverExpr; /** * Instance variable mapped to "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseupExpr; /** * Instance variable mapped to "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String propertyExpr; /** * Instance variable mapped to "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleExpr; /** * Instance variable mapped to "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleClassExpr; /** * Instance variable mapped to "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleIdExpr; /** * Instance variable mapped to "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String titleExpr; /** * Instance variable mapped to "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String titleKeyExpr; /** * Instance variable mapped to "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String valueExpr; /** * Instance variable mapped to "write" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String writeExpr; /** * Getter method for "accesskey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAccesskeyExpr() { return (accesskeyExpr); } /** * Getter method for "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAltExpr() { return (altExpr); } /** * Getter method for "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAltKeyExpr() { return (altKeyExpr); } /** * Getter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getBundleExpr() { return (bundleExpr); } /** * Getter method for "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getDisabledExpr() { return (disabledExpr); } /** * Getter method for "indexed" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getIndexedExpr() { return (indexedExpr); } /** * Getter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getNameExpr() { return (nameExpr); } /** * Getter method for "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnblurExpr() { return (onblurExpr); } /** * Getter method for "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnchangeExpr() { return (onchangeExpr); } /** * Getter method for "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnclickExpr() { return (onclickExpr); } /** * Getter method for "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOndblclickExpr() { return (ondblclickExpr); } /** * Getter method for "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnfocusExpr() { return (onfocusExpr); } /** * Getter method for "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeydownExpr() { return (onkeydownExpr); } /** * Getter method for "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeypressExpr() { return (onkeypressExpr); } /** * Getter method for "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeyupExpr() { return (onkeyupExpr); } /** * Getter method for "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmousedownExpr() { return (onmousedownExpr); } /** * Getter method for "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmousemoveExpr() { return (onmousemoveExpr); } /** * Getter method for "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseoutExpr() { return (onmouseoutExpr); } /** * Getter method for "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseoverExpr() { return (onmouseoverExpr); } /** * Getter method for "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseupExpr() { return (onmouseupExpr); } /** * Getter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPropertyExpr() { return (propertyExpr); } /** * Getter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleExpr() { return (styleExpr); } /** * Getter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleClassExpr() { return (styleClassExpr); } /** * Getter method for "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleIdExpr() { return (styleIdExpr); } /** * Getter method for "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTitleExpr() { return (titleExpr); } /** * Getter method for "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTitleKeyExpr() { return (titleKeyExpr); } /** * Getter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getValueExpr() { return (valueExpr); } /** * Getter method for "write" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getWriteExpr() { return (writeExpr); } /** * Setter method for "accesskey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAccesskeyExpr(String accesskeyExpr) { this.accesskeyExpr = accesskeyExpr; } /** * Setter method for "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAltExpr(String altExpr) { this.altExpr = altExpr; } /** * Setter method for "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAltKeyExpr(String altKeyExpr) { this.altKeyExpr = altKeyExpr; } /** * Setter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setBundleExpr(String bundleExpr) { this.bundleExpr = bundleExpr; } /** * Setter method for "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setDisabledExpr(String disabledExpr) { this.disabledExpr = disabledExpr; } /** * Setter method for "indexed" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setIndexedExpr(String indexedExpr) { this.indexedExpr = indexedExpr; } /** * Setter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setNameExpr(String nameExpr) { this.nameExpr = nameExpr; } /** * Setter method for "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnblurExpr(String onblurExpr) { this.onblurExpr = onblurExpr; } /** * Setter method for "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnchangeExpr(String onchangeExpr) { this.onchangeExpr = onchangeExpr; } /** * Setter method for "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnclickExpr(String onclickExpr) { this.onclickExpr = onclickExpr; } /** * Setter method for "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOndblclickExpr(String ondblclickExpr) { this.ondblclickExpr = ondblclickExpr; } /** * Setter method for "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnfocusExpr(String onfocusExpr) { this.onfocusExpr = onfocusExpr; } /** * Setter method for "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeydownExpr(String onkeydownExpr) { this.onkeydownExpr = onkeydownExpr; } /** * Setter method for "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeypressExpr(String onkeypressExpr) { this.onkeypressExpr = onkeypressExpr; } /** * Setter method for "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeyupExpr(String onkeyupExpr) { this.onkeyupExpr = onkeyupExpr; } /** * Setter method for "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmousedownExpr(String onmousedownExpr) { this.onmousedownExpr = onmousedownExpr; } /** * Setter method for "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmousemoveExpr(String onmousemoveExpr) { this.onmousemoveExpr = onmousemoveExpr; } /** * Setter method for "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseoutExpr(String onmouseoutExpr) { this.onmouseoutExpr = onmouseoutExpr; } /** * Setter method for "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseoverExpr(String onmouseoverExpr) { this.onmouseoverExpr = onmouseoverExpr; } /** * Setter method for "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseupExpr(String onmouseupExpr) { this.onmouseupExpr = onmouseupExpr; } /** * Setter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPropertyExpr(String propertyExpr) { this.propertyExpr = propertyExpr; } /** * Setter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleExpr(String styleExpr) { this.styleExpr = styleExpr; } /** * Setter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleClassExpr(String styleClassExpr) { this.styleClassExpr = styleClassExpr; } /** * Setter method for "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleIdExpr(String styleIdExpr) { this.styleIdExpr = styleIdExpr; } /** * Setter method for "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTitleExpr(String titleExpr) { this.titleExpr = titleExpr; } /** * Setter method for "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTitleKeyExpr(String titleKeyExpr) { this.titleKeyExpr = titleKeyExpr; } /** * Setter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setValueExpr(String valueExpr) { this.valueExpr = valueExpr; } /** * Setter method for "write" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setWriteExpr(String writeExpr) { this.writeExpr = writeExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setAccesskeyExpr(null); setAltExpr(null); setAltKeyExpr(null); setBundleExpr(null); setDisabledExpr(null); setIndexedExpr(null); setNameExpr(null); setOnblurExpr(null); setOnchangeExpr(null); setOnclickExpr(null); setOndblclickExpr(null); setOnfocusExpr(null); setOnkeydownExpr(null); setOnkeypressExpr(null); setOnkeyupExpr(null); setOnmousedownExpr(null); setOnmousemoveExpr(null); setOnmouseoutExpr(null); setOnmouseoverExpr(null); setOnmouseupExpr(null); setPropertyExpr(null); setStyleExpr(null); setStyleClassExpr(null); setStyleIdExpr(null); setTitleExpr(null); setTitleKeyExpr(null); setValueExpr(null); setWriteExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return (super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; Boolean bool = null; if ((string = EvalHelper.evalString("accesskey", getAccesskeyExpr(), this, pageContext)) != null) setAccesskey(string); if ((string = EvalHelper.evalString("alt", getAltExpr(), this, pageContext)) != null) setAlt(string); if ((string = EvalHelper.evalString("altKey", getAltKeyExpr(), this, pageContext)) != null) setAltKey(string); if ((string = EvalHelper.evalString("bundle", getBundleExpr(), this, pageContext)) != null) setBundle(string); if ((bool = EvalHelper.evalBoolean("disabled", getDisabledExpr(), this, pageContext)) != null) setDisabled(bool.booleanValue()); if ((bool = EvalHelper.evalBoolean("indexed", getIndexedExpr(), this, pageContext)) != null) setIndexed(bool.booleanValue()); if ((string = EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) setName(string); if ((string = EvalHelper.evalString("onblur", getOnblurExpr(), this, pageContext)) != null) setOnblur(string); if ((string = EvalHelper.evalString("onchange", getOnchangeExpr(), this, pageContext)) != null) setOnchange(string); if ((string = EvalHelper.evalString("onclick", getOnclickExpr(), this, pageContext)) != null) setOnclick(string); if ((string = EvalHelper.evalString("ondblclick", getOndblclickExpr(), this, pageContext)) != null) setOndblclick(string); if ((string = EvalHelper.evalString("onfocus", getOnfocusExpr(), this, pageContext)) != null) setOnfocus(string); if ((string = EvalHelper.evalString("onkeydown", getOnkeydownExpr(), this, pageContext)) != null) setOnkeydown(string); if ((string = EvalHelper.evalString("onkeypress", getOnkeypressExpr(), this, pageContext)) != null) setOnkeypress(string); if ((string = EvalHelper.evalString("onkeyup", getOnkeyupExpr(), this, pageContext)) != null) setOnkeyup(string); if ((string = EvalHelper.evalString("onmousedown", getOnmousedownExpr(), this, pageContext)) != null) setOnmousedown(string); if ((string = EvalHelper.evalString("onmousemove", getOnmousemoveExpr(), this, pageContext)) != null) setOnmousemove(string); if ((string = EvalHelper.evalString("onmouseout", getOnmouseoutExpr(), this, pageContext)) != null) setOnmouseout(string); if ((string = EvalHelper.evalString("onmouseover", getOnmouseoverExpr(), this, pageContext)) != null) setOnmouseover(string); if ((string = EvalHelper.evalString("onmouseup", getOnmouseupExpr(), this, pageContext)) != null) setOnmouseup(string); if ((string = EvalHelper.evalString("property", getPropertyExpr(), this, pageContext)) != null) setProperty(string); if ((string = EvalHelper.evalString("style", getStyleExpr(), this, pageContext)) != null) setStyle(string); if ((string = EvalHelper.evalString("styleClass", getStyleClassExpr(), this, pageContext)) != null) setStyleClass(string); if ((string = EvalHelper.evalString("styleId", getStyleIdExpr(), this, pageContext)) != null) setStyleId(string); if ((string = EvalHelper.evalString("title", getTitleExpr(), this, pageContext)) != null) setTitle(string); if ((string = EvalHelper.evalString("titleKey", getTitleKeyExpr(), this, pageContext)) != null) setTitleKey(string); if ((string = EvalHelper.evalString("value", getValueExpr(), this, pageContext)) != null) setValue(string); if ((bool = EvalHelper.evalBoolean("write", getWriteExpr(), this, pageContext)) != null) setWrite(bool.booleanValue()); } } ././@LongLink0000644000175000017500000000015510423140531011316 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELHiddenTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELHiddenTagBeanI0000644000175000017500000001760010404045254033756 0ustar arnaudarnaud00000000000000/* * $Id: ELHiddenTagBeanInfo.java 123585 2004-12-29 00:43:33Z martinc $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.html.ELHiddenTag class. It is needed * to override the default mapping of custom tag attribute names to class * attribute names. *

* This is because the value of the unevaluated EL expression has to be kept * separately from the evaluated value, which is stored in the base class. This * is related to the fact that the JSP compiler can choose to reuse different * tag instances if they received the same original attribute values, and the * JSP compiler can choose to not re-call the setter methods, because it can * assume the same values are already set. */ public class ELHiddenTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("accesskey", ELHiddenTag.class, null, "setAccesskeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("alt", ELHiddenTag.class, null, "setAltExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("altKey", ELHiddenTag.class, null, "setAltKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("bundle", ELHiddenTag.class, null, "setBundleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("disabled", ELHiddenTag.class, null, "setDisabledExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("indexed", ELHiddenTag.class, null, "setIndexedExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("name", ELHiddenTag.class, null, "setNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onblur", ELHiddenTag.class, null, "setOnblurExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onchange", ELHiddenTag.class, null, "setOnchangeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onclick", ELHiddenTag.class, null, "setOnclickExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("ondblclick", ELHiddenTag.class, null, "setOndblclickExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onfocus", ELHiddenTag.class, null, "setOnfocusExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeydown", ELHiddenTag.class, null, "setOnkeydownExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeypress", ELHiddenTag.class, null, "setOnkeypressExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeyup", ELHiddenTag.class, null, "setOnkeyupExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmousedown", ELHiddenTag.class, null, "setOnmousedownExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmousemove", ELHiddenTag.class, null, "setOnmousemoveExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseout", ELHiddenTag.class, null, "setOnmouseoutExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseover", ELHiddenTag.class, null, "setOnmouseoverExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseup", ELHiddenTag.class, null, "setOnmouseupExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("property", ELHiddenTag.class, null, "setPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("style", ELHiddenTag.class, null, "setStyleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleClass", ELHiddenTag.class, null, "setStyleClassExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleId", ELHiddenTag.class, null, "setStyleIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("title", ELHiddenTag.class, null, "setTitleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("titleKey", ELHiddenTag.class, null, "setTitleKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("value", ELHiddenTag.class, null, "setValueExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("write", ELHiddenTag.class, null, "setWriteExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELHtmlTag.java0000644000175000017500000001052010404045254033502 0ustar arnaudarnaud00000000000000/* * $Id: ELHtmlTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import org.apache.struts.taglib.html.HtmlTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Renders an HTML element with appropriate language attributes if * there is a current Locale available in the user's session. *

* This class is a subclass of the class * org.apache.struts.taglib.html.HtmlTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 54933 $ */ public class ELHtmlTag extends HtmlTag { /** * Instance variable mapped to "lang" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String langExpr; /** * Instance variable mapped to "locale" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String localeExpr; /** * Instance variable mapped to "xhtml" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String xhtmlExpr; /** * Getter method for "lang" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getLangExpr() { return (langExpr); } /** * Getter method for "locale" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getLocaleExpr() { return (localeExpr); } /** * Getter method for "xhtml" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getXhtmlExpr() { return (xhtmlExpr); } /** * Setter method for "lang" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setLangExpr(String langExpr) { this.langExpr = langExpr; } /** * Setter method for "locale" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setLocaleExpr(String localeExpr) { this.localeExpr = localeExpr; } /** * Setter method for "xhtml" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setXhtmlExpr(String xhtmlExpr) { this.xhtmlExpr = xhtmlExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setLangExpr(null); setLocaleExpr(null); setXhtmlExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return (super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { Boolean bool = null; String string = null; if ((bool = EvalHelper.evalBoolean("lang", getLangExpr(), this, pageContext)) != null) setLang(bool.booleanValue()); if ((bool = EvalHelper.evalBoolean("locale", getLocaleExpr(), this, pageContext)) != null) setLocale(bool.booleanValue()); if ((bool = EvalHelper.evalBoolean("xhtml", getXhtmlExpr(), this, pageContext)) != null) setXhtml(bool.booleanValue()); } } ././@LongLink0000644000175000017500000000015310423140531011314 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELHtmlTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELHtmlTagBeanInf0000644000175000017500000000502710404045254034013 0ustar arnaudarnaud00000000000000/* * $Id: ELHtmlTagBeanInfo.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.html.ELHtmlTag class. It is needed * to override the default mapping of custom tag attribute names to class * attribute names. *

* This is because the value of the unevaluated EL expression has to be kept * separately from the evaluated value, which is stored in the base class. This * is related to the fact that the JSP compiler can choose to reuse different * tag instances if they received the same original attribute values, and the * JSP compiler can choose to not re-call the setter methods, because it can * assume the same values are already set. */ public class ELHtmlTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("xhtml", ELHtmlTag.class, null, "setXhtmlExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("lang", ELHtmlTag.class, null, "setLangExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("locale", ELHtmlTag.class, null, "setLocaleExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELImageTag.java0000644000175000017500000006761610404045254033642 0ustar arnaudarnaud00000000000000/* * $Id: ELImageTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import org.apache.struts.taglib.html.ImageTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Tag for input fields of type "image". *

* This class is a subclass of the class * org.apache.struts.taglib.html.ImageTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 54933 $ */ public class ELImageTag extends ImageTag { /** * Instance variable mapped to "accessKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String accessKeyExpr; /** * Instance variable mapped to "align" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String alignExpr; /** * Instance variable mapped to "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String altExpr; /** * Instance variable mapped to "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String altKeyExpr; /** * Instance variable mapped to "border" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String borderExpr; /** * Instance variable mapped to "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String bundleExpr; /** * Instance variable mapped to "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String disabledExpr; /** * Instance variable mapped to "indexed" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String indexedExpr; /** * Instance variable mapped to "locale" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String localeExpr; /** * Instance variable mapped to "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onblurExpr; /** * Instance variable mapped to "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onchangeExpr; /** * Instance variable mapped to "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onclickExpr; /** * Instance variable mapped to "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String ondblclickExpr; /** * Instance variable mapped to "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onfocusExpr; /** * Instance variable mapped to "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeydownExpr; /** * Instance variable mapped to "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeypressExpr; /** * Instance variable mapped to "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeyupExpr; /** * Instance variable mapped to "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmousedownExpr; /** * Instance variable mapped to "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmousemoveExpr; /** * Instance variable mapped to "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseoutExpr; /** * Instance variable mapped to "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseoverExpr; /** * Instance variable mapped to "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseupExpr; /** * Instance variable mapped to "page" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String pageExpr; /** * Instance variable mapped to "pageKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String pageKeyExpr; /** * Instance variable mapped to "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String propertyExpr; /** * Instance variable mapped to "src" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String srcExpr; /** * Instance variable mapped to "srcKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String srcKeyExpr; /** * Instance variable mapped to "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleExpr; /** * Instance variable mapped to "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleClassExpr; /** * Instance variable mapped to "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleIdExpr; /** * Instance variable mapped to "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String tabindexExpr; /** * Instance variable mapped to "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String titleExpr; /** * Instance variable mapped to "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String titleKeyExpr; /** * Instance variable mapped to "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String valueExpr; /** * Getter method for "accessKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAccesskeyExpr() { return (accessKeyExpr); } /** * Getter method for "align" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAlignExpr() { return (alignExpr); } /** * Getter method for "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAltExpr() { return (altExpr); } /** * Getter method for "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAltKeyExpr() { return (altKeyExpr); } /** * Getter method for "border" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getBorderExpr() { return (borderExpr); } /** * Getter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getBundleExpr() { return (bundleExpr); } /** * Getter method for "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getDisabledExpr() { return (disabledExpr); } /** * Getter method for "indexed" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getIndexedExpr() { return (indexedExpr); } /** * Getter method for "locale" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getLocaleExpr() { return (localeExpr); } /** * Getter method for "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnblurExpr() { return (onblurExpr); } /** * Getter method for "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnchangeExpr() { return (onchangeExpr); } /** * Getter method for "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnclickExpr() { return (onclickExpr); } /** * Getter method for "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOndblclickExpr() { return (ondblclickExpr); } /** * Getter method for "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnfocusExpr() { return (onfocusExpr); } /** * Getter method for "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeydownExpr() { return (onkeydownExpr); } /** * Getter method for "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeypressExpr() { return (onkeypressExpr); } /** * Getter method for "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeyupExpr() { return (onkeyupExpr); } /** * Getter method for "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmousedownExpr() { return (onmousedownExpr); } /** * Getter method for "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmousemoveExpr() { return (onmousemoveExpr); } /** * Getter method for "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseoutExpr() { return (onmouseoutExpr); } /** * Getter method for "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseoverExpr() { return (onmouseoverExpr); } /** * Getter method for "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseupExpr() { return (onmouseupExpr); } /** * Getter method for "page" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPageExpr() { return (pageExpr); } /** * Getter method for "pageKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPageKeyExpr() { return (pageKeyExpr); } /** * Getter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPropertyExpr() { return (propertyExpr); } /** * Getter method for "src" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getSrcExpr() { return (srcExpr); } /** * Getter method for "srcKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getSrcKeyExpr() { return (srcKeyExpr); } /** * Getter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleExpr() { return (styleExpr); } /** * Getter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleClassExpr() { return (styleClassExpr); } /** * Getter method for "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleIdExpr() { return (styleIdExpr); } /** * Getter method for "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTabindexExpr() { return (tabindexExpr); } /** * Getter method for "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTitleExpr() { return (titleExpr); } /** * Getter method for "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTitleKeyExpr() { return (titleKeyExpr); } /** * Getter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getValueExpr() { return (valueExpr); } /** * Setter method for "accessKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAccesskeyExpr(String accessKeyExpr) { this.accessKeyExpr = accessKeyExpr; } /** * Setter method for "align" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAlignExpr(String alignExpr) { this.alignExpr = alignExpr; } /** * Setter method for "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAltExpr(String altExpr) { this.altExpr = altExpr; } /** * Setter method for "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAltKeyExpr(String altKeyExpr) { this.altKeyExpr = altKeyExpr; } /** * Setter method for "border" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setBorderExpr(String borderExpr) { this.borderExpr = borderExpr; } /** * Setter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setBundleExpr(String bundleExpr) { this.bundleExpr = bundleExpr; } /** * Setter method for "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setDisabledExpr(String disabledExpr) { this.disabledExpr = disabledExpr; } /** * Setter method for "indexed" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setIndexedExpr(String indexedExpr) { this.indexedExpr = indexedExpr; } /** * Setter method for "locale" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setLocaleExpr(String localeExpr) { this.localeExpr = localeExpr; } /** * Setter method for "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnblurExpr(String onblurExpr) { this.onblurExpr = onblurExpr; } /** * Setter method for "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnchangeExpr(String onchangeExpr) { this.onchangeExpr = onchangeExpr; } /** * Setter method for "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnclickExpr(String onclickExpr) { this.onclickExpr = onclickExpr; } /** * Setter method for "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOndblclickExpr(String ondblclickExpr) { this.ondblclickExpr = ondblclickExpr; } /** * Setter method for "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnfocusExpr(String onfocusExpr) { this.onfocusExpr = onfocusExpr; } /** * Setter method for "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeydownExpr(String onkeydownExpr) { this.onkeydownExpr = onkeydownExpr; } /** * Setter method for "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeypressExpr(String onkeypressExpr) { this.onkeypressExpr = onkeypressExpr; } /** * Setter method for "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeyupExpr(String onkeyupExpr) { this.onkeyupExpr = onkeyupExpr; } /** * Setter method for "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmousedownExpr(String onmousedownExpr) { this.onmousedownExpr = onmousedownExpr; } /** * Setter method for "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmousemoveExpr(String onmousemoveExpr) { this.onmousemoveExpr = onmousemoveExpr; } /** * Setter method for "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseoutExpr(String onmouseoutExpr) { this.onmouseoutExpr = onmouseoutExpr; } /** * Setter method for "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseoverExpr(String onmouseoverExpr) { this.onmouseoverExpr = onmouseoverExpr; } /** * Setter method for "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseupExpr(String onmouseupExpr) { this.onmouseupExpr = onmouseupExpr; } /** * Setter method for "page" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPageExpr(String pageExpr) { this.pageExpr = pageExpr; } /** * Setter method for "pageKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPageKeyExpr(String pageKeyExpr) { this.pageKeyExpr = pageKeyExpr; } /** * Setter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPropertyExpr(String propertyExpr) { this.propertyExpr = propertyExpr; } /** * Setter method for "src" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setSrcExpr(String srcExpr) { this.srcExpr = srcExpr; } /** * Setter method for "srcKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setSrcKeyExpr(String srcKeyExpr) { this.srcKeyExpr = srcKeyExpr; } /** * Setter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleExpr(String styleExpr) { this.styleExpr = styleExpr; } /** * Setter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleClassExpr(String styleClassExpr) { this.styleClassExpr = styleClassExpr; } /** * Setter method for "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleIdExpr(String styleIdExpr) { this.styleIdExpr = styleIdExpr; } /** * Setter method for "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTabindexExpr(String tabindexExpr) { this.tabindexExpr = tabindexExpr; } /** * Setter method for "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTitleExpr(String titleExpr) { this.titleExpr = titleExpr; } /** * Setter method for "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTitleKeyExpr(String titleKeyExpr) { this.titleKeyExpr = titleKeyExpr; } /** * Setter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setValueExpr(String valueExpr) { this.valueExpr = valueExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setAccesskeyExpr(null); setAlignExpr(null); setAltExpr(null); setAltKeyExpr(null); setBorderExpr(null); setBundleExpr(null); setDisabledExpr(null); setIndexedExpr(null); setLocaleExpr(null); setOnblurExpr(null); setOnchangeExpr(null); setOnclickExpr(null); setOndblclickExpr(null); setOnfocusExpr(null); setOnkeydownExpr(null); setOnkeypressExpr(null); setOnkeyupExpr(null); setOnmousedownExpr(null); setOnmousemoveExpr(null); setOnmouseoutExpr(null); setOnmouseoverExpr(null); setOnmouseupExpr(null); setPageExpr(null); setPageKeyExpr(null); setPropertyExpr(null); setSrcExpr(null); setSrcKeyExpr(null); setStyleExpr(null); setStyleClassExpr(null); setStyleIdExpr(null); setTabindexExpr(null); setTitleExpr(null); setTitleKeyExpr(null); setValueExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return (super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; Boolean bool = null; if ((string = EvalHelper.evalString("accessKey", getAccesskeyExpr(), this, pageContext)) != null) setAccesskey(string); // The "align" attribute is deprecated. This needs to be removed when // the "align" attribute is finally removed. if ((string = EvalHelper.evalString("align", getAlignExpr(), this, pageContext)) != null) setAlign(string); if ((string = EvalHelper.evalString("alt", getAltExpr(), this, pageContext)) != null) setAlt(string); if ((string = EvalHelper.evalString("altKey", getAltKeyExpr(), this, pageContext)) != null) setAltKey(string); if ((string = EvalHelper.evalString("border", getBorderExpr(), this, pageContext)) != null) setBorder(string); if ((string = EvalHelper.evalString("bundle", getBundleExpr(), this, pageContext)) != null) setBundle(string); if ((bool = EvalHelper.evalBoolean("disabled", getDisabledExpr(), this, pageContext)) != null) setDisabled(bool.booleanValue()); if ((bool = EvalHelper.evalBoolean("indexed", getIndexedExpr(), this, pageContext)) != null) setIndexed(bool.booleanValue()); if ((string = EvalHelper.evalString("locale", getLocaleExpr(), this, pageContext)) != null) setLocale(string); if ((string = EvalHelper.evalString("onblur", getOnblurExpr(), this, pageContext)) != null) setOnblur(string); if ((string = EvalHelper.evalString("onchange", getOnchangeExpr(), this, pageContext)) != null) setOnchange(string); if ((string = EvalHelper.evalString("onclick", getOnclickExpr(), this, pageContext)) != null) setOnclick(string); if ((string = EvalHelper.evalString("ondblclick", getOndblclickExpr(), this, pageContext)) != null) setOndblclick(string); if ((string = EvalHelper.evalString("onfocus", getOnfocusExpr(), this, pageContext)) != null) setOnfocus(string); if ((string = EvalHelper.evalString("onkeydown", getOnkeydownExpr(), this, pageContext)) != null) setOnkeydown(string); if ((string = EvalHelper.evalString("onkeypress", getOnkeypressExpr(), this, pageContext)) != null) setOnkeypress(string); if ((string = EvalHelper.evalString("onkeyup", getOnkeyupExpr(), this, pageContext)) != null) setOnkeyup(string); if ((string = EvalHelper.evalString("onmousedown", getOnmousedownExpr(), this, pageContext)) != null) setOnmousedown(string); if ((string = EvalHelper.evalString("onmousemove", getOnmousemoveExpr(), this, pageContext)) != null) setOnmousemove(string); if ((string = EvalHelper.evalString("onmouseout", getOnmouseoutExpr(), this, pageContext)) != null) setOnmouseout(string); if ((string = EvalHelper.evalString("onmouseover", getOnmouseoverExpr(), this, pageContext)) != null) setOnmouseover(string); if ((string = EvalHelper.evalString("onmouseup", getOnmouseupExpr(), this, pageContext)) != null) setOnmouseup(string); if ((string = EvalHelper.evalString("page", getPageExpr(), this, pageContext)) != null) setPage(string); if ((string = EvalHelper.evalString("pageKey", getPageKeyExpr(), this, pageContext)) != null) setPageKey(string); if ((string = EvalHelper.evalString("property", getPropertyExpr(), this, pageContext)) != null) setProperty(string); if ((string = EvalHelper.evalString("src", getSrcExpr(), this, pageContext)) != null) setSrc(string); if ((string = EvalHelper.evalString("srcKey", getSrcKeyExpr(), this, pageContext)) != null) setSrcKey(string); if ((string = EvalHelper.evalString("style", getStyleExpr(), this, pageContext)) != null) setStyle(string); if ((string = EvalHelper.evalString("styleClass", getStyleClassExpr(), this, pageContext)) != null) setStyleClass(string); if ((string = EvalHelper.evalString("styleId", getStyleIdExpr(), this, pageContext)) != null) setStyleId(string); if ((string = EvalHelper.evalString("tabindex", getTabindexExpr(), this, pageContext)) != null) setTabindex(string); if ((string = EvalHelper.evalString("title", getTitleExpr(), this, pageContext)) != null) setTitle(string); if ((string = EvalHelper.evalString("titleKey", getTitleKeyExpr(), this, pageContext)) != null) setTitleKey(string); if ((string = EvalHelper.evalString("value", getValueExpr(), this, pageContext)) != null) setValue(string); } } ././@LongLink0000644000175000017500000000015410423140531011315 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELImageTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELImageTagBeanIn0000644000175000017500000002214510404045252033761 0ustar arnaudarnaud00000000000000/* * $Id: ELImageTagBeanInfo.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.html.ELImageTag class. It is needed * to override the default mapping of custom tag attribute names to class * attribute names. *

* This is because the value of the unevaluated EL expression has to be kept * separately from the evaluated value, which is stored in the base class. This * is related to the fact that the JSP compiler can choose to reuse different * tag instances if they received the same original attribute values, and the * JSP compiler can choose to not re-call the setter methods, because it can * assume the same values are already set. */ public class ELImageTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("accesskey", ELImageTag.class, null, "setAccesskeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("align", ELImageTag.class, null, "setAlignExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("alt", ELImageTag.class, null, "setAltExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("altKey", ELImageTag.class, null, "setAltKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("border", ELImageTag.class, null, "setBorderExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("bundle", ELImageTag.class, null, "setBundleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("disabled", ELImageTag.class, null, "setDisabledExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("indexed", ELImageTag.class, null, "setIndexedExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("locale", ELImageTag.class, null, "setLocaleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onblur", ELImageTag.class, null, "setOnblurExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onchange", ELImageTag.class, null, "setOnchangeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onclick", ELImageTag.class, null, "setOnclickExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("ondblclick", ELImageTag.class, null, "setOndblclickExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onfocus", ELImageTag.class, null, "setOnfocusExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeydown", ELImageTag.class, null, "setOnkeydownExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeypress", ELImageTag.class, null, "setOnkeypressExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeyup", ELImageTag.class, null, "setOnkeyupExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmousedown", ELImageTag.class, null, "setOnmousedownExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmousemove", ELImageTag.class, null, "setOnmousemoveExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseout", ELImageTag.class, null, "setOnmouseoutExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseover", ELImageTag.class, null, "setOnmouseoverExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseup", ELImageTag.class, null, "setOnmouseupExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("page", ELImageTag.class, null, "setPageExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("pageKey", ELImageTag.class, null, "setPageKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("property", ELImageTag.class, null, "setPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("src", ELImageTag.class, null, "setSrcExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("srcKey", ELImageTag.class, null, "setSrcKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("style", ELImageTag.class, null, "setStyleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleClass", ELImageTag.class, null, "setStyleClassExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleId", ELImageTag.class, null, "setStyleIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("tabindex", ELImageTag.class, null, "setTabindexExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("title", ELImageTag.class, null, "setTitleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("titleKey", ELImageTag.class, null, "setTitleKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("value", ELImageTag.class, null, "setValueExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELImgTag.java0000644000175000017500000010775210404045254033330 0ustar arnaudarnaud00000000000000/* * $Id: ELImgTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import org.apache.struts.taglib.html.ImgTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Generate an IMG tag to the specified image URI. *

* TODO: *

    *
  • make the alt, src, and * lowsrc settable from properties (for i18n)
  • *
  • handle onLoad, onAbort, and * onError events (my JavaScript book is very old, * there may be more unsupported events in the past couple of IE * versions) *
*

* This class is a subclass of the class * org.apache.struts.taglib.html.ImgTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 54933 $ */ public class ELImgTag extends ImgTag { /** * Instance variable mapped to "action" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String actionExpr; /** * Instance variable mapped to "module" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String moduleExpr; /** * Instance variable mapped to "align" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String alignExpr; /** * Instance variable mapped to "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String altExpr; /** * Instance variable mapped to "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String altKeyExpr; /** * Instance variable mapped to "border" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String borderExpr; /** * Instance variable mapped to "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String bundleExpr; /** * Instance variable mapped to "contextRelative" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String contextRelativeExpr; /** * Instance variable mapped to "height" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String heightExpr; /** * Instance variable mapped to "hspace" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String hspaceExpr; /** * Instance variable mapped to "imageName" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String imageNameExpr; /** * Instance variable mapped to "ismap" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String ismapExpr; /** * Instance variable mapped to "locale" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String localeExpr; /** * Instance variable mapped to "lowsrc" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String lowsrcExpr; /** * Instance variable mapped to "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String nameExpr; /** * Instance variable mapped to "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onclickExpr; /** * Instance variable mapped to "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String ondblclickExpr; /** * Instance variable mapped to "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeydownExpr; /** * Instance variable mapped to "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeypressExpr; /** * Instance variable mapped to "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeyupExpr; /** * Instance variable mapped to "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmousedownExpr; /** * Instance variable mapped to "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmousemoveExpr; /** * Instance variable mapped to "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseoutExpr; /** * Instance variable mapped to "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseoverExpr; /** * Instance variable mapped to "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseupExpr; /** * Instance variable mapped to "paramId" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String paramIdExpr; /** * Instance variable mapped to "page" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String pageExpr; /** * Instance variable mapped to "pageKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String pageKeyExpr; /** * Instance variable mapped to "paramName" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String paramNameExpr; /** * Instance variable mapped to "paramProperty" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String paramPropertyExpr; /** * Instance variable mapped to "paramScope" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String paramScopeExpr; /** * Instance variable mapped to "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String propertyExpr; /** * Instance variable mapped to "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String scopeExpr; /** * Instance variable mapped to "src" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String srcExpr; /** * Instance variable mapped to "srcKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String srcKeyExpr; /** * Instance variable mapped to "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleExpr; /** * Instance variable mapped to "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleClassExpr; /** * Instance variable mapped to "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleIdExpr; /** * Instance variable mapped to "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String titleExpr; /** * Instance variable mapped to "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String titleKeyExpr; /** * Instance variable mapped to "useLocalEncoding" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String useLocalEncodingExpr; /** * Instance variable mapped to "usemap" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String usemapExpr; /** * Instance variable mapped to "vspace" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String vspaceExpr; /** * Instance variable mapped to "width" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String widthExpr; /** * Getter method for "action" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getActionExpr() { return (actionExpr); } /** * Getter method for "module" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getModuleExpr() { return (moduleExpr); } /** * Getter method for "align" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAlignExpr() { return (alignExpr); } /** * Getter method for "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAltExpr() { return (altExpr); } /** * Getter method for "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAltKeyExpr() { return (altKeyExpr); } /** * Getter method for "border" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getBorderExpr() { return (borderExpr); } /** * Getter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getBundleExpr() { return (bundleExpr); } /** * Getter method for "contextRelative" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getContextRelativeExpr() { return (contextRelativeExpr); } /** * Getter method for "height" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getHeightExpr() { return (heightExpr); } /** * Getter method for "hspace" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getHspaceExpr() { return (hspaceExpr); } /** * Getter method for "imageName" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getImageNameExpr() { return (imageNameExpr); } /** * Getter method for "ismap" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getIsmapExpr() { return (ismapExpr); } /** * Getter method for "locale" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getLocaleExpr() { return (localeExpr); } /** * Getter method for "lowsrc" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getLowsrcExpr() { return (lowsrcExpr); } /** * Getter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getNameExpr() { return (nameExpr); } /** * Getter method for "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnclickExpr() { return (onclickExpr); } /** * Getter method for "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOndblclickExpr() { return (ondblclickExpr); } /** * Getter method for "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeydownExpr() { return (onkeydownExpr); } /** * Getter method for "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeypressExpr() { return (onkeypressExpr); } /** * Getter method for "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeyupExpr() { return (onkeyupExpr); } /** * Getter method for "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmousedownExpr() { return (onmousedownExpr); } /** * Getter method for "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmousemoveExpr() { return (onmousemoveExpr); } /** * Getter method for "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseoutExpr() { return (onmouseoutExpr); } /** * Getter method for "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseoverExpr() { return (onmouseoverExpr); } /** * Getter method for "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseupExpr() { return (onmouseupExpr); } /** * Getter method for "paramId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getParamIdExpr() { return (paramIdExpr); } /** * Getter method for "page" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPageExpr() { return (pageExpr); } /** * Getter method for "pageKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPageKeyExpr() { return (pageKeyExpr); } /** * Getter method for "paramName" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getParamNameExpr() { return (paramNameExpr); } /** * Getter method for "paramProperty" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getParamPropertyExpr() { return (paramPropertyExpr); } /** * Getter method for "paramScope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getParamScopeExpr() { return (paramScopeExpr); } /** * Getter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPropertyExpr() { return (propertyExpr); } /** * Getter method for "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getScopeExpr() { return (scopeExpr); } /** * Getter method for "src" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getSrcExpr() { return (srcExpr); } /** * Getter method for "srcKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getSrcKeyExpr() { return (srcKeyExpr); } /** * Getter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleExpr() { return (styleExpr); } /** * Getter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleClassExpr() { return (styleClassExpr); } /** * Getter method for "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleIdExpr() { return (styleIdExpr); } /** * Getter method for "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTitleExpr() { return (titleExpr); } /** * Getter method for "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTitleKeyExpr() { return (titleKeyExpr); } /** * Getter method for "useLocalEncoding" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getUseLocalEncodingExpr() { return (useLocalEncodingExpr); } /** * Getter method for "usemap" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getUsemapExpr() { return (usemapExpr); } /** * Getter method for "vspace" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getVspaceExpr() { return (vspaceExpr); } /** * Getter method for "width" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getWidthExpr() { return (widthExpr); } /** * Setter method for "action" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setActionExpr(String actionExpr) { this.actionExpr = actionExpr; } /** * Setter method for "module" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setModuleExpr(String moduleExpr) { this.moduleExpr = moduleExpr; } /** * Setter method for "align" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAlignExpr(String alignExpr) { this.alignExpr = alignExpr; } /** * Setter method for "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAltExpr(String altExpr) { this.altExpr = altExpr; } /** * Setter method for "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAltKeyExpr(String altKeyExpr) { this.altKeyExpr = altKeyExpr; } /** * Setter method for "border" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setBorderExpr(String borderExpr) { this.borderExpr = borderExpr; } /** * Setter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setBundleExpr(String bundleExpr) { this.bundleExpr = bundleExpr; } /** * Setter method for "contextRelative" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setContextRelativeExpr(String contextRelativeExpr) { this.contextRelativeExpr = contextRelativeExpr; } /** * Setter method for "height" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setHeightExpr(String heightExpr) { this.heightExpr = heightExpr; } /** * Setter method for "hspace" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setHspaceExpr(String hspaceExpr) { this.hspaceExpr = hspaceExpr; } /** * Setter method for "imageName" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setImageNameExpr(String imageNameExpr) { this.imageNameExpr = imageNameExpr; } /** * Setter method for "ismap" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setIsmapExpr(String ismapExpr) { this.ismapExpr = ismapExpr; } /** * Setter method for "locale" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setLocaleExpr(String localeExpr) { this.localeExpr = localeExpr; } /** * Setter method for "lowsrc" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setLowsrcExpr(String lowsrcExpr) { this.lowsrcExpr = lowsrcExpr; } /** * Setter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setNameExpr(String nameExpr) { this.nameExpr = nameExpr; } /** * Setter method for "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnclickExpr(String onclickExpr) { this.onclickExpr = onclickExpr; } /** * Setter method for "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOndblclickExpr(String ondblclickExpr) { this.ondblclickExpr = ondblclickExpr; } /** * Setter method for "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeydownExpr(String onkeydownExpr) { this.onkeydownExpr = onkeydownExpr; } /** * Setter method for "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeypressExpr(String onkeypressExpr) { this.onkeypressExpr = onkeypressExpr; } /** * Setter method for "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeyupExpr(String onkeyupExpr) { this.onkeyupExpr = onkeyupExpr; } /** * Setter method for "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmousedownExpr(String onmousedownExpr) { this.onmousedownExpr = onmousedownExpr; } /** * Setter method for "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmousemoveExpr(String onmousemoveExpr) { this.onmousemoveExpr = onmousemoveExpr; } /** * Setter method for "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseoutExpr(String onmouseoutExpr) { this.onmouseoutExpr = onmouseoutExpr; } /** * Setter method for "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseoverExpr(String onmouseoverExpr) { this.onmouseoverExpr = onmouseoverExpr; } /** * Setter method for "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseupExpr(String onmouseupExpr) { this.onmouseupExpr = onmouseupExpr; } /** * Setter method for "paramId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setParamIdExpr(String paramIdExpr) { this.paramIdExpr = paramIdExpr; } /** * Setter method for "page" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPageExpr(String pageExpr) { this.pageExpr = pageExpr; } /** * Setter method for "pageKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPageKeyExpr(String pageKeyExpr) { this.pageKeyExpr = pageKeyExpr; } /** * Setter method for "paramName" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setParamNameExpr(String paramNameExpr) { this.paramNameExpr = paramNameExpr; } /** * Setter method for "paramProperty" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setParamPropertyExpr(String paramPropertyExpr) { this.paramPropertyExpr = paramPropertyExpr; } /** * Setter method for "paramScope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setParamScopeExpr(String paramScopeExpr) { this.paramScopeExpr = paramScopeExpr; } /** * Setter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPropertyExpr(String propertyExpr) { this.propertyExpr = propertyExpr; } /** * Setter method for "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setScopeExpr(String scopeExpr) { this.scopeExpr = scopeExpr; } /** * Setter method for "src" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setSrcExpr(String srcExpr) { this.srcExpr = srcExpr; } /** * Setter method for "srcKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setSrcKeyExpr(String srcKeyExpr) { this.srcKeyExpr = srcKeyExpr; } /** * Setter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleExpr(String styleExpr) { this.styleExpr = styleExpr; } /** * Setter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleClassExpr(String styleClassExpr) { this.styleClassExpr = styleClassExpr; } /** * Setter method for "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleIdExpr(String styleIdExpr) { this.styleIdExpr = styleIdExpr; } /** * Setter method for "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTitleExpr(String titleExpr) { this.titleExpr = titleExpr; } /** * Setter method for "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTitleKeyExpr(String titleKeyExpr) { this.titleKeyExpr = titleKeyExpr; } /** * Setter method for "useLocalEncoding" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setUseLocalEncodingExpr(String useLocalEncodingExpr) { this.useLocalEncodingExpr = useLocalEncodingExpr; } /** * Setter method for "usemap" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setUsemapExpr(String usemapExpr) { this.usemapExpr = usemapExpr; } /** * Setter method for "vspace" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setVspaceExpr(String vspaceExpr) { this.vspaceExpr = vspaceExpr; } /** * Setter method for "width" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setWidthExpr(String widthExpr) { this.widthExpr = widthExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setActionExpr(null); setModuleExpr(null); setAlignExpr(null); setAltExpr(null); setAltKeyExpr(null); setBorderExpr(null); setBundleExpr(null); setContextRelativeExpr(null); setHeightExpr(null); setHspaceExpr(null); setImageNameExpr(null); setIsmapExpr(null); setLocaleExpr(null); setLowsrcExpr(null); setNameExpr(null); setOnclickExpr(null); setOndblclickExpr(null); setOnkeydownExpr(null); setOnkeypressExpr(null); setOnkeyupExpr(null); setOnmousedownExpr(null); setOnmousemoveExpr(null); setOnmouseoutExpr(null); setOnmouseoverExpr(null); setOnmouseupExpr(null); setPageExpr(null); setPageKeyExpr(null); setParamIdExpr(null); setParamNameExpr(null); setParamPropertyExpr(null); setParamScopeExpr(null); setPropertyExpr(null); setScopeExpr(null); setSrcExpr(null); setSrcKeyExpr(null); setStyleExpr(null); setStyleClassExpr(null); setStyleIdExpr(null); setTitleExpr(null); setTitleKeyExpr(null); setUseLocalEncodingExpr(null); setUsemapExpr(null); setVspaceExpr(null); setWidthExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return (super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; Boolean bool = null; if ((string = EvalHelper.evalString("action", getActionExpr(), this, pageContext)) != null) setAction(string); if ((string = EvalHelper.evalString("module", getModuleExpr(), this, pageContext)) != null) setModule(string); if ((string = EvalHelper.evalString("align", getAlignExpr(), this, pageContext)) != null) setAlign(string); if ((string = EvalHelper.evalString("alt", getAltExpr(), this, pageContext)) != null) setAlt(string); if ((string = EvalHelper.evalString("altKey", getAltKeyExpr(), this, pageContext)) != null) setAltKey(string); if ((string = EvalHelper.evalString("border", getBorderExpr(), this, pageContext)) != null) setBorder(string); if ((string = EvalHelper.evalString("bundle", getBundleExpr(), this, pageContext)) != null) setBundle(string); if ((string = EvalHelper.evalString("contextRelative", getContextRelativeExpr(), this, pageContext)) != null) setContextRelative(string); if ((string = EvalHelper.evalString("height", getHeightExpr(), this, pageContext)) != null) setHeight(string); if ((string = EvalHelper.evalString("hspace", getHspaceExpr(), this, pageContext)) != null) setHspace(string); if ((string = EvalHelper.evalString("imageName", getImageNameExpr(), this, pageContext)) != null) setImageName(string); if ((string = EvalHelper.evalString("ismap", getIsmapExpr(), this, pageContext)) != null) setIsmap(string); if ((string = EvalHelper.evalString("locale", getLocaleExpr(), this, pageContext)) != null) setLocale(string); // The "lowsrc" attribute is deprecated. This needs to be removed // when the "lowsrc" attribute is finally removed. if ((string = EvalHelper.evalString("lowsrc", getLowsrcExpr(), this, pageContext)) != null) setLowsrc(string); if ((string = EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) setName(string); if ((string = EvalHelper.evalString("onclick", getOnclickExpr(), this, pageContext)) != null) setOnclick(string); if ((string = EvalHelper.evalString("ondblclick", getOndblclickExpr(), this, pageContext)) != null) setOndblclick(string); if ((string = EvalHelper.evalString("onkeydown", getOnkeydownExpr(), this, pageContext)) != null) setOnkeydown(string); if ((string = EvalHelper.evalString("onkeypress", getOnkeypressExpr(), this, pageContext)) != null) setOnkeypress(string); if ((string = EvalHelper.evalString("onkeyup", getOnkeyupExpr(), this, pageContext)) != null) setOnkeyup(string); if ((string = EvalHelper.evalString("onmousedown", getOnmousedownExpr(), this, pageContext)) != null) setOnmousedown(string); if ((string = EvalHelper.evalString("onmousemove", getOnmousemoveExpr(), this, pageContext)) != null) setOnmousemove(string); if ((string = EvalHelper.evalString("onmouseout", getOnmouseoutExpr(), this, pageContext)) != null) setOnmouseout(string); if ((string = EvalHelper.evalString("onmouseover", getOnmouseoverExpr(), this, pageContext)) != null) setOnmouseover(string); if ((string = EvalHelper.evalString("onmouseup", getOnmouseupExpr(), this, pageContext)) != null) setOnmouseup(string); if ((string = EvalHelper.evalString("paramId", getParamIdExpr(), this, pageContext)) != null) setParamId(string); if ((string = EvalHelper.evalString("page", getPageExpr(), this, pageContext)) != null) setPage(string); if ((string = EvalHelper.evalString("pageKey", getPageKeyExpr(), this, pageContext)) != null) setPageKey(string); if ((string = EvalHelper.evalString("paramName", getParamNameExpr(), this, pageContext)) != null) setParamName(string); if ((string = EvalHelper.evalString("paramProperty", getParamPropertyExpr(), this, pageContext)) != null) setParamProperty(string); if ((string = EvalHelper.evalString("paramScope", getParamScopeExpr(), this, pageContext)) != null) setParamScope(string); if ((string = EvalHelper.evalString("property", getPropertyExpr(), this, pageContext)) != null) setProperty(string); if ((string = EvalHelper.evalString("scope", getScopeExpr(), this, pageContext)) != null) setScope(string); if ((string = EvalHelper.evalString("src", getSrcExpr(), this, pageContext)) != null) setSrc(string); if ((string = EvalHelper.evalString("srcKey", getSrcKeyExpr(), this, pageContext)) != null) setSrcKey(string); if ((string = EvalHelper.evalString("style", getStyleExpr(), this, pageContext)) != null) setStyle(string); if ((string = EvalHelper.evalString("styleClass", getStyleClassExpr(), this, pageContext)) != null) setStyleClass(string); if ((string = EvalHelper.evalString("styleId", getStyleIdExpr(), this, pageContext)) != null) setStyleId(string); if ((string = EvalHelper.evalString("title", getTitleExpr(), this, pageContext)) != null) setTitle(string); if ((string = EvalHelper.evalString("titleKey", getTitleKeyExpr(), this, pageContext)) != null) setTitleKey(string); if ((bool = EvalHelper.evalBoolean("useLocalEncoding", getUseLocalEncodingExpr(), this, pageContext)) != null) setUseLocalEncoding(bool.booleanValue()); if ((string = EvalHelper.evalString("usemap", getUsemapExpr(), this, pageContext)) != null) setUsemap(string); if ((string = EvalHelper.evalString("vspace", getVspaceExpr(), this, pageContext)) != null) setVspace(string); if ((string = EvalHelper.evalString("width", getWidthExpr(), this, pageContext)) != null) setWidth(string); } } ././@LongLink0000644000175000017500000000015210423140531011313 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELImgTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELImgTagBeanInfo0000644000175000017500000002532110404045252033777 0ustar arnaudarnaud00000000000000/* * $Id: ELImgTagBeanInfo.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.html.ELImgTag class. It is * needed to override the default mapping of custom tag attribute names to * class attribute names. */ public class ELImgTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("action", ELImgTag.class, null, "setActionExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("module", ELImgTag.class, null, "setModuleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("align", ELImgTag.class, null, "setAlignExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("alt", ELImgTag.class, null, "setAltExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("altKey", ELImgTag.class, null, "setAltKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("border", ELImgTag.class, null, "setBorderExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("bundle", ELImgTag.class, null, "setBundleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("contextRelative", ELImgTag.class, null, "setContextRelativeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("height", ELImgTag.class, null, "setHeightExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("hspace", ELImgTag.class, null, "setHspaceExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("imageName", ELImgTag.class, null, "setImageNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("ismap", ELImgTag.class, null, "setIsmapExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("locale", ELImgTag.class, null, "setLocaleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("lowsrc", ELImgTag.class, null, "setLowsrcExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("name", ELImgTag.class, null, "setNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onclick", ELImgTag.class, null, "setOnclickExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("ondblclick", ELImgTag.class, null, "setOndblclickExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeydown", ELImgTag.class, null, "setOnkeydownExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeypress", ELImgTag.class, null, "setOnkeypressExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeyup", ELImgTag.class, null, "setOnkeyupExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmousedown", ELImgTag.class, null, "setOnmousedownExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmousemove", ELImgTag.class, null, "setOnmousemoveExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseout", ELImgTag.class, null, "setOnmouseoutExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseover", ELImgTag.class, null, "setOnmouseoverExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseup", ELImgTag.class, null, "setOnmouseupExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("paramId", ELImgTag.class, null, "setParamIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("page", ELImgTag.class, null, "setPageExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("pageKey", ELImgTag.class, null, "setPageKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("paramName", ELImgTag.class, null, "setParamNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("paramProperty", ELImgTag.class, null, "setParamPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("paramScope", ELImgTag.class, null, "setParamScopeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("property", ELImgTag.class, null, "setPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("scope", ELImgTag.class, null, "setScopeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("src", ELImgTag.class, null, "setSrcExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("srcKey", ELImgTag.class, null, "setSrcKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("style", ELImgTag.class, null, "setStyleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleClass", ELImgTag.class, null, "setStyleClassExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleId", ELImgTag.class, null, "setStyleIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("title", ELImgTag.class, null, "setTitleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("titleKey", ELImgTag.class, null, "setTitleKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("useLocalEncoding", ELImgTag.class, null, "setUseLocalEncodingExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("usemap", ELImgTag.class, null, "setUsemapExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("vspace", ELImgTag.class, null, "setVspaceExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("width", ELImgTag.class, null, "setWidthExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } ././@LongLink0000644000175000017500000000016210423140531011314 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELJavascriptValidatorTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELJavascriptVali0000644000175000017500000002414210404045252034147 0ustar arnaudarnaud00000000000000/* * $Id: ELJavascriptValidatorTag.java 160033 2005-04-04 12:06:45Z niallp $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import org.apache.struts.taglib.html.JavascriptValidatorTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Custom tag that generates JavaScript for client side validation based * on the validation rules loaded by the ValidatorPlugIn * defined in the struts-config.xml file. *

* This class is a subclass of the class * org.apache.struts.taglib.html.JavascriptValidatorTag which * provides most of the described functionality. This subclass allows all * attribute values to be specified as expressions utilizing the JavaServer * Pages Standard Library expression language. * * @version $Rev: 160033 $ */ public class ELJavascriptValidatorTag extends JavascriptValidatorTag { /** * Instance variable mapped to "cdata" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String cdataExpr; /** * Instance variable mapped to "dynamicJavascript" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String dynamicJavascriptExpr; /** * Instance variable mapped to "formName" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String formNameExpr; /** * Instance variable mapped to "method" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String methodExpr; /** * Instance variable mapped to "page" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String pageExpr; /** * Instance variable mapped to "scriptLanguage" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String scriptLanguageExpr; /** * Instance variable mapped to "src" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String srcExpr; /** * Instance variable mapped to "staticJavascript" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String staticJavascriptExpr; /** * Instance variable mapped to "htmlComment" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String htmlCommentExpr; /** * Instance variable mapped to "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String bundleExpr; /** * Getter method for "cdata" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getCdataExpr() { return (cdataExpr); } /** * Getter method for "dynamicJavascript" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getDynamicJavascriptExpr() { return (dynamicJavascriptExpr); } /** * Getter method for "formName" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getFormNameExpr() { return (formNameExpr); } /** * Getter method for "method" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getMethodExpr() { return (methodExpr); } /** * Getter method for "page" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPageExpr() { return (pageExpr); } /** * Getter method for "scriptLanguage" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getScriptLanguageExpr() { return (scriptLanguageExpr); } /** * Getter method for "src" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getSrcExpr() { return (srcExpr); } /** * Getter method for "staticJavascript" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStaticJavascriptExpr() { return (staticJavascriptExpr); } /** * Getter method for "htmlComment" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getHtmlCommentExpr() { return (htmlCommentExpr); } /** * Getter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getBundleExpr() { return (bundleExpr); } /** * Setter method for "cdata" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setCdataExpr(String cdataExpr) { this.cdataExpr = cdataExpr; } /** * Setter method for "dynamicJavascript" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setDynamicJavascriptExpr(String dynamicJavascriptExpr) { this.dynamicJavascriptExpr = dynamicJavascriptExpr; } /** * Setter method for "formName" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setFormNameExpr(String formNameExpr) { this.formNameExpr = formNameExpr; } /** * Setter method for "method" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setMethodExpr(String methodExpr) { this.methodExpr = methodExpr; } /** * Setter method for "page" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPageExpr(String pageExpr) { this.pageExpr = pageExpr; } /** * Setter method for "scriptLanguage" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setScriptLanguageExpr(String scriptLanguageExpr) { this.scriptLanguageExpr = scriptLanguageExpr; } /** * Setter method for "src" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setSrcExpr(String srcExpr) { this.srcExpr = srcExpr; } /** * Setter method for "staticJavascript" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStaticJavascriptExpr(String staticJavascriptExpr) { this.staticJavascriptExpr = staticJavascriptExpr; } /** * Setter method for "htmlComment" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setHtmlCommentExpr(String htmlCommentExpr) { this.htmlCommentExpr = htmlCommentExpr; } /** * Setter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setBundleExpr(String bundleExpr) { this.bundleExpr = bundleExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setCdataExpr(null); setDynamicJavascriptExpr(null); setFormNameExpr(null); setMethodExpr(null); setPageExpr(null); setScriptLanguageExpr(null); setSrcExpr(null); setStaticJavascriptExpr(null); setHtmlCommentExpr(null); setBundleExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return (super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; Integer integer = null; Boolean bool = null; if ((string = EvalHelper.evalString("cdata", getCdataExpr(), this, pageContext)) != null) setCdata(string); if ((string = EvalHelper.evalString("dynamicJavascript", getDynamicJavascriptExpr(), this, pageContext)) != null) setDynamicJavascript(string); if ((string = EvalHelper.evalString("formName", getFormNameExpr(), this, pageContext)) != null) setFormName(string); if ((string = EvalHelper.evalString("method", getMethodExpr(), this, pageContext)) != null) setMethod(string); if ((integer = EvalHelper.evalInteger("page", getPageExpr(), this, pageContext)) != null) setPage(integer.intValue()); if ((bool = EvalHelper.evalBoolean("scriptLanguage", getScriptLanguageExpr(), this, pageContext)) != null) setScriptLanguage(bool.booleanValue()); if ((string = EvalHelper.evalString("src", getSrcExpr(), this, pageContext)) != null) setSrc(string); if ((string = EvalHelper.evalString("staticJavascript", getStaticJavascriptExpr(), this, pageContext)) != null) setStaticJavascript(string); if ((string = EvalHelper.evalString("htmlComment", getHtmlCommentExpr(), this, pageContext)) != null) setHtmlComment(string); if ((string = EvalHelper.evalString("bundle", getBundleExpr(), this, pageContext)) != null) setBundle(string); } } ././@LongLink0000644000175000017500000000017210423140531011315 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELJavascriptValidatorTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELJavascriptVali0000644000175000017500000001035510404045252034150 0ustar arnaudarnaud00000000000000/* * $Id: ELJavascriptValidatorTagBeanInfo.java 160033 2005-04-04 12:06:45Z niallp $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.html.ELJavascriptValidatorTag class. * It is needed to override the default mapping of custom tag attribute names * to class attribute names. *

* This is because the value of the unevaluated EL expression has to be kept * separately from the evaluated value, which is stored in the base class. This * is related to the fact that the JSP compiler can choose to reuse different * tag instances if they received the same original attribute values, and the * JSP compiler can choose to not re-call the setter methods, because it can * assume the same values are already set. */ public class ELJavascriptValidatorTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("cdata", ELJavascriptValidatorTag.class, null, "setCdataExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("dynamicJavascript", ELJavascriptValidatorTag.class, null, "setDynamicJavascriptExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("formName", ELJavascriptValidatorTag.class, null, "setFormNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("method", ELJavascriptValidatorTag.class, null, "setMethodExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("page", ELJavascriptValidatorTag.class, null, "setPageExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("scriptLanguage", ELJavascriptValidatorTag.class, null, "setScriptLanguageExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("src", ELJavascriptValidatorTag.class, null, "setSrcExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("staticJavascript", ELJavascriptValidatorTag.class, null, "setStaticJavascriptExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("htmlComment", ELJavascriptValidatorTag.class, null, "setHtmlCommentExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("bundle", ELJavascriptValidatorTag.class, null, "setBundleExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELLinkTag.java0000644000175000017500000007764010404045252033511 0ustar arnaudarnaud00000000000000/* * $Id: ELLinkTag.java 123585 2004-12-29 00:43:33Z martinc $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import org.apache.struts.taglib.html.LinkTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Generate a URL-encoded hyperlink to the specified URI. *

* This class is a subclass of the class * org.apache.struts.taglib.html.LinkTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 123585 $ */ public class ELLinkTag extends LinkTag { /** * Instance variable mapped to "accessKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String accessKeyExpr; /** * Instance variable mapped to "action" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String actionExpr; /** * Instance variable mapped to "module" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String moduleExpr; /** * Instance variable mapped to "anchor" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String anchorExpr; /** * Instance variable mapped to "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String bundleExpr; /** * Instance variable mapped to "forward" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String forwardExpr; /** * Instance variable mapped to "href" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String hrefExpr; /** * Instance variable mapped to "indexed" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String indexedExpr; /** * Instance variable mapped to "indexId" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String indexIdExpr; /** * Instance variable mapped to "linkName" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String linkNameExpr; /** * Instance variable mapped to "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String nameExpr; /** * Instance variable mapped to "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onblurExpr; /** * Instance variable mapped to "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onclickExpr; /** * Instance variable mapped to "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String ondblclickExpr; /** * Instance variable mapped to "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onfocusExpr; /** * Instance variable mapped to "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeydownExpr; /** * Instance variable mapped to "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeypressExpr; /** * Instance variable mapped to "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeyupExpr; /** * Instance variable mapped to "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmousedownExpr; /** * Instance variable mapped to "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmousemoveExpr; /** * Instance variable mapped to "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseoutExpr; /** * Instance variable mapped to "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseoverExpr; /** * Instance variable mapped to "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseupExpr; /** * Instance variable mapped to "page" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String pageExpr; /** * Instance variable mapped to "paramId" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String paramIdExpr; /** * Instance variable mapped to "paramName" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String paramNameExpr; /** * Instance variable mapped to "paramProperty" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String paramPropertyExpr; /** * Instance variable mapped to "paramScope" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String paramScopeExpr; /** * Instance variable mapped to "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String propertyExpr; /** * Instance variable mapped to "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String scopeExpr; /** * Instance variable mapped to "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleExpr; /** * Instance variable mapped to "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleClassExpr; /** * Instance variable mapped to "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleIdExpr; /** * Instance variable mapped to "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String tabindexExpr; /** * Instance variable mapped to "target" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String targetExpr; /** * Instance variable mapped to "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String titleExpr; /** * Instance variable mapped to "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String titleKeyExpr; /** * Instance variable mapped to "transaction" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String transactionExpr; /** * Instance variable mapped to "useLocalEncoding" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String useLocalEncodingExpr; /** * Getter method for "accessKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAccesskeyExpr() { return (accessKeyExpr); } /** * Getter method for "action" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getActionExpr() { return (actionExpr); } /** * Getter method for "module" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getModuleExpr() { return (moduleExpr); } /** * Getter method for "anchor" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAnchorExpr() { return (anchorExpr); } /** * Getter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getBundleExpr() { return (bundleExpr); } /** * Getter method for "forward" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getForwardExpr() { return (forwardExpr); } /** * Getter method for "href" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getHrefExpr() { return (hrefExpr); } /** * Getter method for "indexed" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getIndexedExpr() { return (indexedExpr); } /** * Getter method for "indexId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getIndexIdExpr() { return (indexIdExpr); } /** * Getter method for "linkName" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getLinkNameExpr() { return (linkNameExpr); } /** * Getter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getNameExpr() { return (nameExpr); } /** * Getter method for "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnblurExpr() { return (onblurExpr); } /** * Getter method for "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnclickExpr() { return (onclickExpr); } /** * Getter method for "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOndblclickExpr() { return (ondblclickExpr); } /** * Getter method for "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnfocusExpr() { return (onfocusExpr); } /** * Getter method for "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeydownExpr() { return (onkeydownExpr); } /** * Getter method for "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeypressExpr() { return (onkeypressExpr); } /** * Getter method for "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeyupExpr() { return (onkeyupExpr); } /** * Getter method for "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmousedownExpr() { return (onmousedownExpr); } /** * Getter method for "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmousemoveExpr() { return (onmousemoveExpr); } /** * Getter method for "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseoutExpr() { return (onmouseoutExpr); } /** * Getter method for "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseoverExpr() { return (onmouseoverExpr); } /** * Getter method for "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseupExpr() { return (onmouseupExpr); } /** * Getter method for "page" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPageExpr() { return (pageExpr); } /** * Getter method for "paramId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getParamIdExpr() { return (paramIdExpr); } /** * Getter method for "paramName" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getParamNameExpr() { return (paramNameExpr); } /** * Getter method for "paramProperty" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getParamPropertyExpr() { return (paramPropertyExpr); } /** * Getter method for "paramScope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getParamScopeExpr() { return (paramScopeExpr); } /** * Getter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPropertyExpr() { return (propertyExpr); } /** * Getter method for "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getScopeExpr() { return (scopeExpr); } /** * Getter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleExpr() { return (styleExpr); } /** * Getter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleClassExpr() { return (styleClassExpr); } /** * Getter method for "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleIdExpr() { return (styleIdExpr); } /** * Getter method for "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTabindexExpr() { return (tabindexExpr); } /** * Getter method for "target" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTargetExpr() { return (targetExpr); } /** * Getter method for "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTitleExpr() { return (titleExpr); } /** * Getter method for "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTitleKeyExpr() { return (titleKeyExpr); } /** * Getter method for "transaction" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTransactionExpr() { return (transactionExpr); } /** * Getter method for "useLocalEncoding" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getUseLocalEncodingExpr() { return (useLocalEncodingExpr); } /** * Setter method for "accessKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAccesskeyExpr(String accessKeyExpr) { this.accessKeyExpr = accessKeyExpr; } /** * Setter method for "action" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setActionExpr(String actionExpr) { this.actionExpr = actionExpr; } /** * Setter method for "module" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setModuleExpr(String moduleExpr) { this.moduleExpr = moduleExpr; } /** * Setter method for "anchor" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAnchorExpr(String anchorExpr) { this.anchorExpr = anchorExpr; } /** * Setter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setBundleExpr(String bundleExpr) { this.bundleExpr = bundleExpr; } /** * Setter method for "forward" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setForwardExpr(String forwardExpr) { this.forwardExpr = forwardExpr; } /** * Setter method for "href" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setHrefExpr(String hrefExpr) { this.hrefExpr = hrefExpr; } /** * Setter method for "indexed" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setIndexedExpr(String indexedExpr) { this.indexedExpr = indexedExpr; } /** * Setter method for "indexId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setIndexIdExpr(String indexIdExpr) { this.indexIdExpr = indexIdExpr; } /** * Setter method for "linkName" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setLinkNameExpr(String linkNameExpr) { this.linkNameExpr = linkNameExpr; } /** * Setter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setNameExpr(String nameExpr) { this.nameExpr = nameExpr; } /** * Setter method for "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnblurExpr(String onblurExpr) { this.onblurExpr = onblurExpr; } /** * Setter method for "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnclickExpr(String onclickExpr) { this.onclickExpr = onclickExpr; } /** * Setter method for "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOndblclickExpr(String ondblclickExpr) { this.ondblclickExpr = ondblclickExpr; } /** * Setter method for "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnfocusExpr(String onfocusExpr) { this.onfocusExpr = onfocusExpr; } /** * Setter method for "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeydownExpr(String onkeydownExpr) { this.onkeydownExpr = onkeydownExpr; } /** * Setter method for "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeypressExpr(String onkeypressExpr) { this.onkeypressExpr = onkeypressExpr; } /** * Setter method for "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeyupExpr(String onkeyupExpr) { this.onkeyupExpr = onkeyupExpr; } /** * Setter method for "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmousedownExpr(String onmousedownExpr) { this.onmousedownExpr = onmousedownExpr; } /** * Setter method for "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmousemoveExpr(String onmousemoveExpr) { this.onmousemoveExpr = onmousemoveExpr; } /** * Setter method for "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseoutExpr(String onmouseoutExpr) { this.onmouseoutExpr = onmouseoutExpr; } /** * Setter method for "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseoverExpr(String onmouseoverExpr) { this.onmouseoverExpr = onmouseoverExpr; } /** * Setter method for "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseupExpr(String onmouseupExpr) { this.onmouseupExpr = onmouseupExpr; } /** * Setter method for "page" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPageExpr(String pageExpr) { this.pageExpr = pageExpr; } /** * Setter method for "paramId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setParamIdExpr(String paramIdExpr) { this.paramIdExpr = paramIdExpr; } /** * Setter method for "paramName" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setParamNameExpr(String paramNameExpr) { this.paramNameExpr = paramNameExpr; } /** * Setter method for "paramProperty" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setParamPropertyExpr(String paramPropertyExpr) { this.paramPropertyExpr = paramPropertyExpr; } /** * Setter method for "paramScope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setParamScopeExpr(String paramScopeExpr) { this.paramScopeExpr = paramScopeExpr; } /** * Setter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPropertyExpr(String propertyExpr) { this.propertyExpr = propertyExpr; } /** * Setter method for "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setScopeExpr(String scopeExpr) { this.scopeExpr = scopeExpr; } /** * Setter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleExpr(String styleExpr) { this.styleExpr = styleExpr; } /** * Setter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleClassExpr(String styleClassExpr) { this.styleClassExpr = styleClassExpr; } /** * Setter method for "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleIdExpr(String styleIdExpr) { this.styleIdExpr = styleIdExpr; } /** * Setter method for "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTabindexExpr(String tabindexExpr) { this.tabindexExpr = tabindexExpr; } /** * Setter method for "target" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTargetExpr(String targetExpr) { this.targetExpr = targetExpr; } /** * Setter method for "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTitleExpr(String titleExpr) { this.titleExpr = titleExpr; } /** * Setter method for "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTitleKeyExpr(String titleKeyExpr) { this.titleKeyExpr = titleKeyExpr; } /** * Setter method for "transaction" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTransactionExpr(String transactionExpr) { this.transactionExpr = transactionExpr; } /** * Setter method for "useLocalEncoding" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setUseLocalEncodingExpr(String useLocalEncodingExpr) { this.useLocalEncodingExpr = useLocalEncodingExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setAccesskeyExpr(null); setActionExpr(null); setModuleExpr(null); setAnchorExpr(null); setBundleExpr(null); setForwardExpr(null); setHrefExpr(null); setIndexedExpr(null); setIndexIdExpr(null); setLinkNameExpr(null); setNameExpr(null); setOnblurExpr(null); setOnclickExpr(null); setOndblclickExpr(null); setOnfocusExpr(null); setOnkeydownExpr(null); setOnkeypressExpr(null); setOnkeyupExpr(null); setOnmousedownExpr(null); setOnmousemoveExpr(null); setOnmouseoutExpr(null); setOnmouseoverExpr(null); setOnmouseupExpr(null); setPageExpr(null); setParamIdExpr(null); setParamNameExpr(null); setParamPropertyExpr(null); setParamScopeExpr(null); setPropertyExpr(null); setScopeExpr(null); setStyleExpr(null); setStyleClassExpr(null); setStyleIdExpr(null); setTabindexExpr(null); setTargetExpr(null); setTitleExpr(null); setTitleKeyExpr(null); setTransactionExpr(null); setUseLocalEncodingExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return (super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; Boolean bool = null; if ((string = EvalHelper.evalString("accessKey", getAccesskeyExpr(), this, pageContext)) != null) setAccesskey(string); if ((string = EvalHelper.evalString("action", getActionExpr(), this, pageContext)) != null) setAction(string); if ((string = EvalHelper.evalString("module", getModuleExpr(), this, pageContext)) != null) setModule(string); if ((string = EvalHelper.evalString("anchor", getAnchorExpr(), this, pageContext)) != null) setAnchor(string); if ((string = EvalHelper.evalString("bundle", getBundleExpr(), this, pageContext)) != null) setBundle(string); if ((string = EvalHelper.evalString("forward", getForwardExpr(), this, pageContext)) != null) setForward(string); if ((string = EvalHelper.evalString("href", getHrefExpr(), this, pageContext)) != null) setHref(string); if ((bool = EvalHelper.evalBoolean("indexed", getIndexedExpr(), this, pageContext)) != null) setIndexed(bool.booleanValue()); if ((string = EvalHelper.evalString("indexId", getIndexIdExpr(), this, pageContext)) != null) setIndexId(string); if ((string = EvalHelper.evalString("linkName", getLinkNameExpr(), this, pageContext)) != null) setLinkName(string); if ((string = EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) setName(string); if ((string = EvalHelper.evalString("onblur", getOnblurExpr(), this, pageContext)) != null) setOnblur(string); if ((string = EvalHelper.evalString("onclick", getOnclickExpr(), this, pageContext)) != null) setOnclick(string); if ((string = EvalHelper.evalString("ondblclick", getOndblclickExpr(), this, pageContext)) != null) setOndblclick(string); if ((string = EvalHelper.evalString("onfocus", getOnfocusExpr(), this, pageContext)) != null) setOnfocus(string); if ((string = EvalHelper.evalString("onkeydown", getOnkeydownExpr(), this, pageContext)) != null) setOnkeydown(string); if ((string = EvalHelper.evalString("onkeypress", getOnkeypressExpr(), this, pageContext)) != null) setOnkeypress(string); if ((string = EvalHelper.evalString("onkeyup", getOnkeyupExpr(), this, pageContext)) != null) setOnkeyup(string); if ((string = EvalHelper.evalString("onmousedown", getOnmousedownExpr(), this, pageContext)) != null) setOnmousedown(string); if ((string = EvalHelper.evalString("onmousemove", getOnmousemoveExpr(), this, pageContext)) != null) setOnmousemove(string); if ((string = EvalHelper.evalString("onmouseout", getOnmouseoutExpr(), this, pageContext)) != null) setOnmouseout(string); if ((string = EvalHelper.evalString("onmouseover", getOnmouseoverExpr(), this, pageContext)) != null) setOnmouseover(string); if ((string = EvalHelper.evalString("onmouseup", getOnmouseupExpr(), this, pageContext)) != null) setOnmouseup(string); if ((string = EvalHelper.evalString("page", getPageExpr(), this, pageContext)) != null) setPage(string); if ((string = EvalHelper.evalString("paramId", getParamIdExpr(), this, pageContext)) != null) setParamId(string); if ((string = EvalHelper.evalString("paramName", getParamNameExpr(), this, pageContext)) != null) setParamName(string); if ((string = EvalHelper.evalString("paramProperty", getParamPropertyExpr(), this, pageContext)) != null) setParamProperty(string); if ((string = EvalHelper.evalString("paramScope", getParamScopeExpr(), this, pageContext)) != null) setParamScope(string); if ((string = EvalHelper.evalString("property", getPropertyExpr(), this, pageContext)) != null) setProperty(string); if ((string = EvalHelper.evalString("scope", getScopeExpr(), this, pageContext)) != null) setScope(string); if ((string = EvalHelper.evalString("style", getStyleExpr(), this, pageContext)) != null) setStyle(string); if ((string = EvalHelper.evalString("styleClass", getStyleClassExpr(), this, pageContext)) != null) setStyleClass(string); if ((string = EvalHelper.evalString("styleId", getStyleIdExpr(), this, pageContext)) != null) setStyleId(string); if ((string = EvalHelper.evalString("tabindex", getTabindexExpr(), this, pageContext)) != null) setTabindex(string); if ((string = EvalHelper.evalString("target", getTargetExpr(), this, pageContext)) != null) setTarget(string); if ((string = EvalHelper.evalString("title", getTitleExpr(), this, pageContext)) != null) setTitle(string); if ((string = EvalHelper.evalString("titleKey", getTitleKeyExpr(), this, pageContext)) != null) setTitleKey(string); if ((bool = EvalHelper.evalBoolean("transaction", getTransactionExpr(), this, pageContext)) != null) setTransaction(bool.booleanValue()); if ((bool = EvalHelper.evalBoolean("useLocalEncoding", getUseLocalEncodingExpr(), this, pageContext)) != null) setUseLocalEncoding(bool.booleanValue()); } } ././@LongLink0000644000175000017500000000015310423140531011314 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELLinkTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELLinkTagBeanInf0000644000175000017500000002425110404045252034002 0ustar arnaudarnaud00000000000000/* * $Id: ELLinkTagBeanInfo.java 123585 2004-12-29 00:43:33Z martinc $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.html.ELLinkTag class. It is needed * to override the default mapping of custom tag attribute names to class * attribute names. *

* This is because the value of the unevaluated EL expression has to be kept * separately from the evaluated value, which is stored in the base class. This * is related to the fact that the JSP compiler can choose to reuse different * tag instances if they received the same original attribute values, and the * JSP compiler can choose to not re-call the setter methods, because it can * assume the same values are already set. */ public class ELLinkTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("accesskey", ELLinkTag.class, null, "setAccesskeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("action", ELLinkTag.class, null, "setActionExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("module", ELLinkTag.class, null, "setModuleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("anchor", ELLinkTag.class, null, "setAnchorExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("bundle", ELLinkTag.class, null, "setBundleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("forward", ELLinkTag.class, null, "setForwardExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("href", ELLinkTag.class, null, "setHrefExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("indexed", ELLinkTag.class, null, "setIndexedExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("indexId", ELLinkTag.class, null, "setIndexIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("linkName", ELLinkTag.class, null, "setLinkNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("name", ELLinkTag.class, null, "setNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onblur", ELLinkTag.class, null, "setOnblurExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onclick", ELLinkTag.class, null, "setOnclickExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("ondblclick", ELLinkTag.class, null, "setOndblclickExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onfocus", ELLinkTag.class, null, "setOnfocusExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeydown", ELLinkTag.class, null, "setOnkeydownExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeypress", ELLinkTag.class, null, "setOnkeypressExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeyup", ELLinkTag.class, null, "setOnkeyupExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmousedown", ELLinkTag.class, null, "setOnmousedownExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmousemove", ELLinkTag.class, null, "setOnmousemoveExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseout", ELLinkTag.class, null, "setOnmouseoutExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseover", ELLinkTag.class, null, "setOnmouseoverExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseup", ELLinkTag.class, null, "setOnmouseupExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("page", ELLinkTag.class, null, "setPageExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("paramId", ELLinkTag.class, null, "setParamIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("paramName", ELLinkTag.class, null, "setParamNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("paramProperty", ELLinkTag.class, null, "setParamPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("paramScope", ELLinkTag.class, null, "setParamScopeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("property", ELLinkTag.class, null, "setPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("scope", ELLinkTag.class, null, "setScopeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("style", ELLinkTag.class, null, "setStyleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleClass", ELLinkTag.class, null, "setStyleClassExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleId", ELLinkTag.class, null, "setStyleIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("tabindex", ELLinkTag.class, null, "setTabindexExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("target", ELLinkTag.class, null, "setTargetExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("title", ELLinkTag.class, null, "setTitleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("titleKey", ELLinkTag.class, null, "setTitleKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("transaction", ELLinkTag.class, null, "setTransactionExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("useLocalEncoding", ELLinkTag.class, null, "setUseLocalEncodingExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } ././@LongLink0000644000175000017500000000014710423140531011317 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELMessagesTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELMessagesTag.ja0000644000175000017500000002025510404045254034024 0ustar arnaudarnaud00000000000000/* * $Id: ELMessagesTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import org.apache.struts.taglib.html.MessagesTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Custom tag that iterates the elements of a message collection. * It defaults to retrieving the messages from Action.ERROR_KEY, * but if the message attribute is set to true then the messages will be * retrieved from Action.MESSAGE_KEY. This is an alternative * to the default ErrorsTag. *

* This class is a subclass of the class * org.apache.struts.taglib.html.MessagesTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 54933 $ */ public class ELMessagesTag extends MessagesTag { /** * Instance variable mapped to "id" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String idExpr; /** * Instance variable mapped to "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String bundleExpr; /** * Instance variable mapped to "locale" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String localeExpr; /** * Instance variable mapped to "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String nameExpr; /** * Instance variable mapped to "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String propertyExpr; /** * Instance variable mapped to "header" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String headerExpr; /** * Instance variable mapped to "footer" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String footerExpr; /** * Instance variable mapped to "message" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String messageExpr; /** * Getter method for "id" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getIdExpr() { return (idExpr); } /** * Getter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getBundleExpr() { return (bundleExpr); } /** * Getter method for "locale" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getLocaleExpr() { return (localeExpr); } /** * Getter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getNameExpr() { return (nameExpr); } /** * Getter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPropertyExpr() { return (propertyExpr); } /** * Getter method for "header" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getHeaderExpr() { return (headerExpr); } /** * Getter method for "footer" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getFooterExpr() { return (footerExpr); } /** * Getter method for "message" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getMessageExpr() { return (messageExpr); } /** * Setter method for "id" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setIdExpr(String idExpr) { this.idExpr = idExpr; } /** * Setter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setBundleExpr(String bundleExpr) { this.bundleExpr = bundleExpr; } /** * Setter method for "locale" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setLocaleExpr(String localeExpr) { this.localeExpr = localeExpr; } /** * Setter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setNameExpr(String nameExpr) { this.nameExpr = nameExpr; } /** * Setter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPropertyExpr(String propertyExpr) { this.propertyExpr = propertyExpr; } /** * Setter method for "header" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setHeaderExpr(String headerExpr) { this.headerExpr = headerExpr; } /** * Setter method for "footer" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setFooterExpr(String footerExpr) { this.footerExpr = footerExpr; } /** * Setter method for "message" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setMessageExpr(String messageExpr) { this.messageExpr = messageExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setIdExpr(null); setBundleExpr(null); setLocaleExpr(null); setNameExpr(null); setPropertyExpr(null); setHeaderExpr(null); setFooterExpr(null); setMessageExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return(super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; if ((string = EvalHelper.evalString("id", getIdExpr(), this, pageContext)) != null) setId(string); if ((string = EvalHelper.evalString("bundle", getBundleExpr(), this, pageContext)) != null) setBundle(string); if ((string = EvalHelper.evalString("locale", getLocaleExpr(), this, pageContext)) != null) setLocale(string); if ((string = EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) setName(string); if ((string = EvalHelper.evalString("property", getPropertyExpr(), this, pageContext)) != null) setProperty(string); if ((string = EvalHelper.evalString("header", getHeaderExpr(), this, pageContext)) != null) setHeader(string); if ((string = EvalHelper.evalString("footer", getFooterExpr(), this, pageContext)) != null) setFooter(string); if ((string = EvalHelper.evalString("message", getMessageExpr(), this, pageContext)) != null) setMessage(string); } } ././@LongLink0000644000175000017500000000015710423140531011320 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELMessagesTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELMessagesTagBea0000644000175000017500000000625610404045254034050 0ustar arnaudarnaud00000000000000/* * $Id: ELMessagesTagBeanInfo.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.html.ELMessagesTag class. It is * needed to override the default mapping of custom tag attribute names to * class attribute names. */ public class ELMessagesTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("id", ELMessagesTag.class, null, "setIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("bundle", ELMessagesTag.class, null, "setBundleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("locale", ELMessagesTag.class, null, "setLocaleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("name", ELMessagesTag.class, null, "setNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("property", ELMessagesTag.class, null, "setPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("header", ELMessagesTag.class, null, "setHeaderExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("footer", ELMessagesTag.class, null, "setFooterExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("message", ELMessagesTag.class, null, "setMessageExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } ././@LongLink0000644000175000017500000000014710423140531011317 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELMultiboxTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELMultiboxTag.ja0000644000175000017500000006424510404045254034067 0ustar arnaudarnaud00000000000000/* * $Id: ELMultiboxTag.java 373801 2006-01-31 12:18:48Z niallp $ * * Copyright 1999-2006 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import org.apache.struts.taglib.html.MultiboxTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Tag for input fields of type "checkbox". This differs from CheckboxTag * because it assumes that the underlying property is an array getter (of any * supported primitive type, or String), and the checkbox is initialized to * "checked" if the value listed for the "value" attribute is present in the * values returned by the property getter. *

* This class is a subclass of the class * org.apache.struts.taglib.html.MultiboxTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 373801 $ */ public class ELMultiboxTag extends MultiboxTag { /** * Instance variable mapped to "accessKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String accessKeyExpr; /** * Instance variable mapped to "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String altExpr; /** * Instance variable mapped to "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String altKeyExpr; /** * Instance variable mapped to "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String bundleExpr; /** * Instance variable mapped to "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String disabledExpr; /** * Instance variable mapped to "errorKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String errorKeyExpr; /** * Instance variable mapped to "errorStyle" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String errorStyleExpr; /** * Instance variable mapped to "errorStyleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String errorStyleClassExpr; /** * Instance variable mapped to "errorStyleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String errorStyleIdExpr; /** * Instance variable mapped to "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String nameExpr; /** * Instance variable mapped to "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onblurExpr; /** * Instance variable mapped to "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onchangeExpr; /** * Instance variable mapped to "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onclickExpr; /** * Instance variable mapped to "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String ondblclickExpr; /** * Instance variable mapped to "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onfocusExpr; /** * Instance variable mapped to "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeydownExpr; /** * Instance variable mapped to "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeypressExpr; /** * Instance variable mapped to "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeyupExpr; /** * Instance variable mapped to "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmousedownExpr; /** * Instance variable mapped to "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmousemoveExpr; /** * Instance variable mapped to "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseoutExpr; /** * Instance variable mapped to "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseoverExpr; /** * Instance variable mapped to "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseupExpr; /** * Instance variable mapped to "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String propertyExpr; /** * Instance variable mapped to "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleExpr; /** * Instance variable mapped to "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleClassExpr; /** * Instance variable mapped to "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleIdExpr; /** * Instance variable mapped to "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String tabindexExpr; /** * Instance variable mapped to "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String titleExpr; /** * Instance variable mapped to "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String titleKeyExpr; /** * Instance variable mapped to "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String valueExpr; /** * Getter method for "accessKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAccesskeyExpr() { return (accessKeyExpr); } /** * Getter method for "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAltExpr() { return (altExpr); } /** * Getter method for "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAltKeyExpr() { return (altKeyExpr); } /** * Getter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getBundleExpr() { return (bundleExpr); } /** * Getter method for "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getDisabledExpr() { return (disabledExpr); } /** * Getter method for "errorKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getErrorKeyExpr() { return (errorKeyExpr); } /** * Getter method for "errorStyle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getErrorStyleExpr() { return (errorStyleExpr); } /** * Getter method for "errorStyleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getErrorStyleClassExpr() { return (errorStyleClassExpr); } /** * Getter method for "errorStyleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getErrorStyleIdExpr() { return (errorStyleIdExpr); } /** * Getter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getNameExpr() { return (nameExpr); } /** * Getter method for "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnblurExpr() { return (onblurExpr); } /** * Getter method for "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnchangeExpr() { return (onchangeExpr); } /** * Getter method for "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnclickExpr() { return (onclickExpr); } /** * Getter method for "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOndblclickExpr() { return (ondblclickExpr); } /** * Getter method for "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnfocusExpr() { return (onfocusExpr); } /** * Getter method for "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeydownExpr() { return (onkeydownExpr); } /** * Getter method for "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeypressExpr() { return (onkeypressExpr); } /** * Getter method for "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeyupExpr() { return (onkeyupExpr); } /** * Getter method for "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmousedownExpr() { return (onmousedownExpr); } /** * Getter method for "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmousemoveExpr() { return (onmousemoveExpr); } /** * Getter method for "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseoutExpr() { return (onmouseoutExpr); } /** * Getter method for "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseoverExpr() { return (onmouseoverExpr); } /** * Getter method for "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseupExpr() { return (onmouseupExpr); } /** * Getter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPropertyExpr() { return (propertyExpr); } /** * Getter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleExpr() { return (styleExpr); } /** * Getter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleClassExpr() { return (styleClassExpr); } /** * Getter method for "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleIdExpr() { return (styleIdExpr); } /** * Getter method for "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTabindexExpr() { return (tabindexExpr); } /** * Getter method for "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTitleExpr() { return (titleExpr); } /** * Getter method for "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTitleKeyExpr() { return (titleKeyExpr); } /** * Getter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getValueExpr() { return (valueExpr); } /** * Setter method for "accessKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAccesskeyExpr(String accessKeyExpr) { this.accessKeyExpr = accessKeyExpr; } /** * Setter method for "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAltExpr(String altExpr) { this.altExpr = altExpr; } /** * Setter method for "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAltKeyExpr(String altKeyExpr) { this.altKeyExpr = altKeyExpr; } /** * Setter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setBundleExpr(String bundleExpr) { this.bundleExpr = bundleExpr; } /** * Setter method for "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setDisabledExpr(String disabledExpr) { this.disabledExpr = disabledExpr; } /** * Setter method for "errorKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setErrorKeyExpr(String errorKeyExpr) { this.errorKeyExpr = errorKeyExpr; } /** * Setter method for "errorStyle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setErrorStyleExpr(String errorStyleExpr) { this.errorStyleExpr = errorStyleExpr; } /** * Setter method for "errorStyleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setErrorStyleClassExpr(String errorStyleClassExpr) { this.errorStyleClassExpr = errorStyleClassExpr; } /** * Setter method for "errorStyleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setErrorStyleIdExpr(String errorStyleIdExpr) { this.errorStyleIdExpr = errorStyleIdExpr; } /** * Setter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setNameExpr(String nameExpr) { this.nameExpr = nameExpr; } /** * Setter method for "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnblurExpr(String onblurExpr) { this.onblurExpr = onblurExpr; } /** * Setter method for "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnchangeExpr(String onchangeExpr) { this.onchangeExpr = onchangeExpr; } /** * Setter method for "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnclickExpr(String onclickExpr) { this.onclickExpr = onclickExpr; } /** * Setter method for "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOndblclickExpr(String ondblclickExpr) { this.ondblclickExpr = ondblclickExpr; } /** * Setter method for "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnfocusExpr(String onfocusExpr) { this.onfocusExpr = onfocusExpr; } /** * Setter method for "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeydownExpr(String onkeydownExpr) { this.onkeydownExpr = onkeydownExpr; } /** * Setter method for "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeypressExpr(String onkeypressExpr) { this.onkeypressExpr = onkeypressExpr; } /** * Setter method for "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeyupExpr(String onkeyupExpr) { this.onkeyupExpr = onkeyupExpr; } /** * Setter method for "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmousedownExpr(String onmousedownExpr) { this.onmousedownExpr = onmousedownExpr; } /** * Setter method for "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmousemoveExpr(String onmousemoveExpr) { this.onmousemoveExpr = onmousemoveExpr; } /** * Setter method for "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseoutExpr(String onmouseoutExpr) { this.onmouseoutExpr = onmouseoutExpr; } /** * Setter method for "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseoverExpr(String onmouseoverExpr) { this.onmouseoverExpr = onmouseoverExpr; } /** * Setter method for "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseupExpr(String onmouseupExpr) { this.onmouseupExpr = onmouseupExpr; } /** * Setter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPropertyExpr(String propertyExpr) { this.propertyExpr = propertyExpr; } /** * Setter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleExpr(String styleExpr) { this.styleExpr = styleExpr; } /** * Setter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleClassExpr(String styleClassExpr) { this.styleClassExpr = styleClassExpr; } /** * Setter method for "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleIdExpr(String styleIdExpr) { this.styleIdExpr = styleIdExpr; } /** * Setter method for "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTabindexExpr(String tabindexExpr) { this.tabindexExpr = tabindexExpr; } /** * Setter method for "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTitleExpr(String titleExpr) { this.titleExpr = titleExpr; } /** * Setter method for "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTitleKeyExpr(String titleKeyExpr) { this.titleKeyExpr = titleKeyExpr; } /** * Setter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setValueExpr(String valueExpr) { this.valueExpr = valueExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setAccesskeyExpr(null); setAltExpr(null); setAltKeyExpr(null); setBundleExpr(null); setDisabledExpr(null); setErrorKeyExpr(null); setErrorStyleExpr(null); setErrorStyleClassExpr(null); setErrorStyleIdExpr(null); setNameExpr(null); setOnblurExpr(null); setOnchangeExpr(null); setOnclickExpr(null); setOndblclickExpr(null); setOnfocusExpr(null); setOnkeydownExpr(null); setOnkeypressExpr(null); setOnkeyupExpr(null); setOnmousedownExpr(null); setOnmousemoveExpr(null); setOnmouseoutExpr(null); setOnmouseoverExpr(null); setOnmouseupExpr(null); setPropertyExpr(null); setStyleExpr(null); setStyleClassExpr(null); setStyleIdExpr(null); setTabindexExpr(null); setTitleExpr(null); setTitleKeyExpr(null); setValueExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return(super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; Boolean bool = null; if ((string = EvalHelper.evalString("accessKey", getAccesskeyExpr(), this, pageContext)) != null) setAccesskey(string); if ((string = EvalHelper.evalString("alt", getAltExpr(), this, pageContext)) != null) setAlt(string); if ((string = EvalHelper.evalString("altKey", getAltKeyExpr(), this, pageContext)) != null) setAltKey(string); if ((string = EvalHelper.evalString("bundle", getBundleExpr(), this, pageContext)) != null) setBundle(string); if ((bool = EvalHelper.evalBoolean("disabled", getDisabledExpr(), this, pageContext)) != null) setDisabled(bool.booleanValue()); if ((string = EvalHelper.evalString("errorKey", getErrorKeyExpr(), this, pageContext)) != null) setErrorKey(string); if ((string = EvalHelper.evalString("errorStyle", getErrorStyleExpr(), this, pageContext)) != null) setErrorStyle(string); if ((string = EvalHelper.evalString("errorStyleClass", getErrorStyleClassExpr(), this, pageContext)) != null) setErrorStyleClass(string); if ((string = EvalHelper.evalString("errorStyleId", getErrorStyleIdExpr(), this, pageContext)) != null) setErrorStyleId(string); if ((string = EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) setName(string); if ((string = EvalHelper.evalString("onblur", getOnblurExpr(), this, pageContext)) != null) setOnblur(string); if ((string = EvalHelper.evalString("onchange", getOnchangeExpr(), this, pageContext)) != null) setOnchange(string); if ((string = EvalHelper.evalString("onclick", getOnclickExpr(), this, pageContext)) != null) setOnclick(string); if ((string = EvalHelper.evalString("ondblclick", getOndblclickExpr(), this, pageContext)) != null) setOndblclick(string); if ((string = EvalHelper.evalString("onfocus", getOnfocusExpr(), this, pageContext)) != null) setOnfocus(string); if ((string = EvalHelper.evalString("onkeydown", getOnkeydownExpr(), this, pageContext)) != null) setOnkeydown(string); if ((string = EvalHelper.evalString("onkeypress", getOnkeypressExpr(), this, pageContext)) != null) setOnkeypress(string); if ((string = EvalHelper.evalString("onkeyup", getOnkeyupExpr(), this, pageContext)) != null) setOnkeyup(string); if ((string = EvalHelper.evalString("onmousedown", getOnmousedownExpr(), this, pageContext)) != null) setOnmousedown(string); if ((string = EvalHelper.evalString("onmousemove", getOnmousemoveExpr(), this, pageContext)) != null) setOnmousemove(string); if ((string = EvalHelper.evalString("onmouseout", getOnmouseoutExpr(), this, pageContext)) != null) setOnmouseout(string); if ((string = EvalHelper.evalString("onmouseover", getOnmouseoverExpr(), this, pageContext)) != null) setOnmouseover(string); if ((string = EvalHelper.evalString("onmouseup", getOnmouseupExpr(), this, pageContext)) != null) setOnmouseup(string); if ((string = EvalHelper.evalString("property", getPropertyExpr(), this, pageContext)) != null) setProperty(string); if ((string = EvalHelper.evalString("style", getStyleExpr(), this, pageContext)) != null) setStyle(string); if ((string = EvalHelper.evalString("styleClass", getStyleClassExpr(), this, pageContext)) != null) setStyleClass(string); if ((string = EvalHelper.evalString("styleId", getStyleIdExpr(), this, pageContext)) != null) setStyleId(string); if ((string = EvalHelper.evalString("tabindex", getTabindexExpr(), this, pageContext)) != null) setTabindex(string); if ((string = EvalHelper.evalString("title", getTitleExpr(), this, pageContext)) != null) setTitle(string); if ((string = EvalHelper.evalString("titleKey", getTitleKeyExpr(), this, pageContext)) != null) setTitleKey(string); if ((string = EvalHelper.evalString("value", getValueExpr(), this, pageContext)) != null) setValue(string); } } ././@LongLink0000644000175000017500000000015710423140531011320 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELMultiboxTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELMultiboxTagBea0000644000175000017500000002142710404045254034101 0ustar arnaudarnaud00000000000000/* * $Id: ELMultiboxTagBeanInfo.java 123585 2004-12-29 00:43:33Z martinc $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.html.ELMultiboxTag class. It is needed * to override the default mapping of custom tag attribute names to class * attribute names. *

* In particular, it provides for the mapping of the custom tag attribute * disabled to the instance variable disabledExpr. *

* This is because the value of the unevaluated EL expression has to be kept * separately from the evaluated value, which is stored in the base class. This * is related to the fact that the JSP compiler can choose to reuse different * tag instances if they received the same original attribute values, and the * JSP compiler can choose to not re-call the setter methods, because it can * assume the same values are already set. */ public class ELMultiboxTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("accesskey", ELMultiboxTag.class, null, "setAccesskeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("alt", ELMultiboxTag.class, null, "setAltExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("altKey", ELMultiboxTag.class, null, "setAltKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("bundle", ELMultiboxTag.class, null, "setBundleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("disabled", ELMultiboxTag.class, null, "setDisabledExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("errorKey", ELMultiboxTag.class, null, "setErrorKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("errorStyle", ELMultiboxTag.class, null, "setErrorStyleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("errorStyleClass", ELMultiboxTag.class, null, "setErrorStyleClassExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("errorStyleId", ELMultiboxTag.class, null, "setErrorStyleIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("name", ELMultiboxTag.class, null, "setNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onblur", ELMultiboxTag.class, null, "setOnblurExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onchange", ELMultiboxTag.class, null, "setOnchangeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onclick", ELMultiboxTag.class, null, "setOnclickExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("ondblclick", ELMultiboxTag.class, null, "setOndblclickExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onfocus", ELMultiboxTag.class, null, "setOnfocusExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeydown", ELMultiboxTag.class, null, "setOnkeydownExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeypress", ELMultiboxTag.class, null, "setOnkeypressExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeyup", ELMultiboxTag.class, null, "setOnkeyupExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmousedown", ELMultiboxTag.class, null, "setOnmousedownExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmousemove", ELMultiboxTag.class, null, "setOnmousemoveExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseout", ELMultiboxTag.class, null, "setOnmouseoutExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseover", ELMultiboxTag.class, null, "setOnmouseoverExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseup", ELMultiboxTag.class, null, "setOnmouseupExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("property", ELMultiboxTag.class, null, "setPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("style", ELMultiboxTag.class, null, "setStyleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleClass", ELMultiboxTag.class, null, "setStyleClassExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleId", ELMultiboxTag.class, null, "setStyleIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("tabindex", ELMultiboxTag.class, null, "setTabindexExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("title", ELMultiboxTag.class, null, "setTitleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("titleKey", ELMultiboxTag.class, null, "setTitleKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("value", ELMultiboxTag.class, null, "setValueExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } ././@LongLink0000644000175000017500000000014510423140531011315 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELOptionTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELOptionTag.java0000644000175000017500000002020010404045252034040 0ustar arnaudarnaud00000000000000/* * $Id: ELOptionTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import org.apache.struts.taglib.html.OptionTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Tag for select options. The body of this tag is presented to the user * in the option list, while the value attribute is the value returned to * the server if this option is selected. *

* This class is a subclass of the class * org.apache.struts.taglib.html.OptionTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 54933 $ */ public class ELOptionTag extends OptionTag { /** * Instance variable mapped to "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String bundleExpr; /** * Instance variable mapped to "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String disabledExpr; /** * Instance variable mapped to "key" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String keyExpr; /** * Instance variable mapped to "locale" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String localeExpr; /** * Instance variable mapped to "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleExpr; /** * Instance variable mapped to "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleClassExpr; /** * Instance variable mapped to "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleIdExpr; /** * Instance variable mapped to "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String valueExpr; /** * Getter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getBundleExpr() { return (bundleExpr); } /** * Getter method for "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getDisabledExpr() { return (disabledExpr); } /** * Getter method for "key" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getKeyExpr() { return (keyExpr); } /** * Getter method for "locale" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getLocaleExpr() { return (localeExpr); } /** * Getter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleExpr() { return (styleExpr); } /** * Getter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleClassExpr() { return (styleClassExpr); } /** * Getter method for "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleIdExpr() { return (styleIdExpr); } /** * Getter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getValueExpr() { return (valueExpr); } /** * Setter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setBundleExpr(String bundleExpr) { this.bundleExpr = bundleExpr; } /** * Setter method for "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setDisabledExpr(String disabledExpr) { this.disabledExpr = disabledExpr; } /** * Setter method for "key" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setKeyExpr(String keyExpr) { this.keyExpr = keyExpr; } /** * Setter method for "locale" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setLocaleExpr(String localeExpr) { this.localeExpr = localeExpr; } /** * Setter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleExpr(String styleExpr) { this.styleExpr = styleExpr; } /** * Setter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleClassExpr(String styleClassExpr) { this.styleClassExpr = styleClassExpr; } /** * Setter method for "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleIdExpr(String styleIdExpr) { this.styleIdExpr = styleIdExpr; } /** * Setter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setValueExpr(String valueExpr) { this.valueExpr = valueExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setBundleExpr(null); setDisabledExpr(null); setKeyExpr(null); setLocaleExpr(null); setStyleExpr(null); setStyleClassExpr(null); setStyleIdExpr(null); setValueExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return(super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; Boolean bool = null; if ((string = EvalHelper.evalString("bundle", getBundleExpr(), this, pageContext)) != null) setBundle(string); if ((bool = EvalHelper.evalBoolean("disabled", getDisabledExpr(), this, pageContext)) != null) setDisabled(bool.booleanValue()); if ((string = EvalHelper.evalString("key", getKeyExpr(), this, pageContext)) != null) setKey(string); if ((string = EvalHelper.evalString("locale", getLocaleExpr(), this, pageContext)) != null) setLocale(string); if ((string = EvalHelper.evalString("style", getStyleExpr(), this, pageContext)) != null) setStyle(string); if ((string = EvalHelper.evalString("styleClass", getStyleClassExpr(), this, pageContext)) != null) setStyleClass(string); if ((string = EvalHelper.evalString("styleId", getStyleIdExpr(), this, pageContext)) != null) setStyleId(string); if ((string = EvalHelper.evalString("value", getValueExpr(), this, pageContext)) != null) setValue(string); } } ././@LongLink0000644000175000017500000000015510423140531011316 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELOptionTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELOptionTagBeanI0000644000175000017500000000714010404045254034031 0ustar arnaudarnaud00000000000000/* * $Id: ELOptionTagBeanInfo.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.html.ELOptionTag class. It is needed * to override the default mapping of custom tag attribute names to class * attribute names. *

* This is because the value of the unevaluated EL expression has to be kept * separately from the evaluated value, which is stored in the base class. This * is related to the fact that the JSP compiler can choose to reuse different * tag instances if they received the same original attribute values, and the * JSP compiler can choose to not re-call the setter methods, because it can * assume the same values are already set. */ public class ELOptionTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("bundle", ELOptionTag.class, null, "setBundleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("disabled", ELOptionTag.class, null, "setDisabledExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("key", ELOptionTag.class, null, "setKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("locale", ELOptionTag.class, null, "setLocaleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("style", ELOptionTag.class, null, "setStyleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleClass", ELOptionTag.class, null, "setStyleClassExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleId", ELOptionTag.class, null, "setStyleIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("value", ELOptionTag.class, null, "setValueExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } ././@LongLink0000644000175000017500000000016010423140531011312 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELOptionsCollectionTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELOptionsCollect0000644000175000017500000002024310404045252034164 0ustar arnaudarnaud00000000000000/* * $Id: ELOptionsCollectionTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import org.apache.struts.taglib.html.OptionsCollectionTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Tag for creating multiple <select> options from a collection. The * collection may be part of the enclosing form, or may be independent of * the form. Each element of the collection must expose a 'label' and a * 'value', the property names of which are configurable by attributes of * this tag. *

* The collection may be an array of objects, a Collection, an Enumeration, * an Iterator, or a Map. *

* NOTE - This tag requires a Java2 (JDK 1.2 or later) platform. *

* This class is a subclass of the class * org.apache.struts.taglib.html.OptionsCollectionTag which * provides most of the described functionality. This subclass allows all * attribute values to be specified as expressions utilizing the JavaServer * Pages Standard Library expression language. * * @version $Rev: 54933 $ */ public class ELOptionsCollectionTag extends OptionsCollectionTag { /** * Instance variable mapped to "filter" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String filterExpr; /** * Instance variable mapped to "label" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String labelExpr; /** * Instance variable mapped to "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String nameExpr; /** * Instance variable mapped to "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String propertyExpr; /** * Instance variable mapped to "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleExpr; /** * Instance variable mapped to "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleClassExpr; /** * Instance variable mapped to "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String valueExpr; /** * Getter method for "filter" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getFilterExpr() { return (filterExpr); } /** * Getter method for "label" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getLabelExpr() { return (labelExpr); } /** * Getter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getNameExpr() { return (nameExpr); } /** * Getter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPropertyExpr() { return (propertyExpr); } /** * Getter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleExpr() { return (styleExpr); } /** * Getter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleClassExpr() { return (styleClassExpr); } /** * Getter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getValueExpr() { return (valueExpr); } /** * Setter method for "filter" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setFilterExpr(String filterExpr) { this.filterExpr = filterExpr; } /** * Setter method for "label" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setLabelExpr(String labelExpr) { this.labelExpr = labelExpr; } /** * Setter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setNameExpr(String nameExpr) { this.nameExpr = nameExpr; } /** * Setter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPropertyExpr(String propertyExpr) { this.propertyExpr = propertyExpr; } /** * Setter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleExpr(String styleExpr) { this.styleExpr = styleExpr; } /** * Setter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleClassExpr(String styleClassExpr) { this.styleClassExpr = styleClassExpr; } /** * Setter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setValueExpr(String valueExpr) { this.valueExpr = valueExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setFilterExpr(null); setLabelExpr(null); setNameExpr(null); setPropertyExpr(null); setStyleExpr(null); setStyleClassExpr(null); setValueExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return (super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; Boolean bool = null; if ((bool = EvalHelper.evalBoolean("filter", getFilterExpr(), this, pageContext)) != null) setFilter(bool.booleanValue()); if ((string = EvalHelper.evalString("label", getLabelExpr(), this, pageContext)) != null) setLabel(string); if ((string = EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) setName(string); if ((string = EvalHelper.evalString("property", getPropertyExpr(), this, pageContext)) != null) setProperty(string); if ((string = EvalHelper.evalString("style", getStyleExpr(), this, pageContext)) != null) setStyle(string); if ((string = EvalHelper.evalString("styleClass", getStyleClassExpr(), this, pageContext)) != null) setStyleClass(string); // Note that in contrast to other elements which have "style" and // "styleClass" attributes, this tag does not have a "styleId" // attribute. This is because this produces the "id" attribute, which // has to be unique document-wide, but this tag can generate more than // one "option" element. Thus, the base tag, "OptionsCollectionTag" // does not support this attribute. if ((string = EvalHelper.evalString("value", getValueExpr(), this, pageContext)) != null) setValue(string); } } ././@LongLink0000644000175000017500000000017010423140531011313 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELOptionsCollectionTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELOptionsCollect0000644000175000017500000000676410404045252034200 0ustar arnaudarnaud00000000000000/* * $Id: ELOptionsCollectionTagBeanInfo.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.html.ELOptionsCollectionTag class. * It is needed to override the default mapping of custom tag attribute names * to class attribute names. *

* This is because the value of the unevaluated EL expression has to be kept * separately from the evaluated value, which is stored in the base class. This * is related to the fact that the JSP compiler can choose to reuse different * tag instances if they received the same original attribute values, and the * JSP compiler can choose to not re-call the setter methods, because it can * assume the same values are already set. */ public class ELOptionsCollectionTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("filter", ELOptionsCollectionTag.class, null, "setFilterExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("label", ELOptionsCollectionTag.class, null, "setLabelExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("name", ELOptionsCollectionTag.class, null, "setNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("property", ELOptionsCollectionTag.class, null, "setPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("style", ELOptionsCollectionTag.class, null, "setStyleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleClass", ELOptionsCollectionTag.class, null, "setStyleClassExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("value", ELOptionsCollectionTag.class, null, "setValueExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } ././@LongLink0000644000175000017500000000014610423140531011316 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELOptionsTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELOptionsTag.jav0000644000175000017500000002171310404045252034074 0ustar arnaudarnaud00000000000000/* * $Id: ELOptionsTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import org.apache.struts.taglib.html.OptionsTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Tag for creating multiple <select> options from a collection. The * associated values displayed to the user may optionally be specified by a * second collection, or will be the same as the values themselves. Each * collection may be an array of objects, a Collection, an Enumeration, * an Iterator, or a Map. * NOTE - This tag requires a Java2 (JDK 1.2 or later) platform. *

* This class is a subclass of the class * org.apache.struts.taglib.html.OptionsTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 54933 $ */ public class ELOptionsTag extends OptionsTag { /** * Instance variable mapped to "collection" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String collectionExpr; /** * Instance variable mapped to "filter" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String filterExpr; /** * Instance variable mapped to "labelName" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String labelNameExpr; /** * Instance variable mapped to "labelProperty" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String labelPropertyExpr; /** * Instance variable mapped to "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String nameExpr; /** * Instance variable mapped to "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String propertyExpr; /** * Instance variable mapped to "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleExpr; /** * Instance variable mapped to "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleClassExpr; /** * Getter method for "collection" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getCollectionExpr() { return (collectionExpr); } /** * Getter method for "filter" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getFilterExpr() { return (filterExpr); } /** * Getter method for "labelName" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getLabelNameExpr() { return (labelNameExpr); } /** * Getter method for "labelProperty" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getLabelPropertyExpr() { return (labelPropertyExpr); } /** * Getter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getNameExpr() { return (nameExpr); } /** * Getter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPropertyExpr() { return (propertyExpr); } /** * Getter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleExpr() { return (styleExpr); } /** * Getter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleClassExpr() { return (styleClassExpr); } /** * Setter method for "collection" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setCollectionExpr(String collectionExpr) { this.collectionExpr = collectionExpr; } /** * Setter method for "filter" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setFilterExpr(String filterExpr) { this.filterExpr = filterExpr; } /** * Setter method for "labelName" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setLabelNameExpr(String labelNameExpr) { this.labelNameExpr = labelNameExpr; } /** * Setter method for "labelProperty" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setLabelPropertyExpr(String labelPropertyExpr) { this.labelPropertyExpr = labelPropertyExpr; } /** * Setter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setNameExpr(String nameExpr) { this.nameExpr = nameExpr; } /** * Setter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPropertyExpr(String propertyExpr) { this.propertyExpr = propertyExpr; } /** * Setter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleExpr(String styleExpr) { this.styleExpr = styleExpr; } /** * Setter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleClassExpr(String styleClassExpr) { this.styleClassExpr = styleClassExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setCollectionExpr(null); setFilterExpr(null); setLabelNameExpr(null); setLabelPropertyExpr(null); setNameExpr(null); setPropertyExpr(null); setStyleExpr(null); setStyleClassExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return(super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; Boolean bool = null; if ((string = EvalHelper.evalString("collection", getCollectionExpr(), this, pageContext)) != null) setCollection(string); if ((bool = EvalHelper.evalBoolean("filter", getFilterExpr(), this, pageContext)) != null) setFilter(bool.booleanValue()); if ((string = EvalHelper.evalString("labelName", getLabelNameExpr(), this, pageContext)) != null) setLabelName(string); if ((string = EvalHelper.evalString("labelProperty", getLabelPropertyExpr(), this, pageContext)) != null) setLabelProperty(string); if ((string = EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) setName(string); if ((string = EvalHelper.evalString("property", getPropertyExpr(), this, pageContext)) != null) setProperty(string); if ((string = EvalHelper.evalString("style", getStyleExpr(), this, pageContext)) != null) setStyle(string); if ((string = EvalHelper.evalString("styleClass", getStyleClassExpr(), this, pageContext)) != null) setStyleClass(string); // Note that in contrast to other elements which have "style" and // "styleClass" attributes, this tag does not have a "styleId" // attribute. This is because this produces the "id" attribute, which // has to be unique document-wide, but this tag can generate more than // one "option" element. Thus, the base tag, "Options" does not // support this attribute. } } ././@LongLink0000644000175000017500000000015610423140531011317 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELOptionsTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELOptionsTagBean0000644000175000017500000000721010404045252034077 0ustar arnaudarnaud00000000000000/* * $Id: ELOptionsTagBeanInfo.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.html.ELOptionsTag class. * It is needed to override the default mapping of custom tag attribute names * to class attribute names. *

* This is because the value of the unevaluated EL expression has to be kept * separately from the evaluated value, which is stored in the base class. This * is related to the fact that the JSP compiler can choose to reuse different * tag instances if they received the same original attribute values, and the * JSP compiler can choose to not re-call the setter methods, because it can * assume the same values are already set. */ public class ELOptionsTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("collection", ELOptionsTag.class, null, "setCollectionExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("filter", ELOptionsTag.class, null, "setFilterExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("labelName", ELOptionsTag.class, null, "setLabelNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("labelProperty", ELOptionsTag.class, null, "setLabelPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("name", ELOptionsTag.class, null, "setNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("property", ELOptionsTag.class, null, "setPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("style", ELOptionsTag.class, null, "setStyleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleClass", ELOptionsTag.class, null, "setStyleClassExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } ././@LongLink0000644000175000017500000000014710423140531011317 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELPasswordTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELPasswordTag.ja0000644000175000017500000007330210404045252034056 0ustar arnaudarnaud00000000000000/* * $Id: ELPasswordTag.java 373801 2006-01-31 12:18:48Z niallp $ * * Copyright 1999-2006 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import org.apache.struts.taglib.html.PasswordTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Custom tag for input fields of type "password". *

* This class is a subclass of the class * org.apache.struts.taglib.html.PasswordTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 373801 $ */ public class ELPasswordTag extends PasswordTag { /** * Instance variable mapped to "accessKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String accessKeyExpr; /** * Instance variable mapped to "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String altExpr; /** * Instance variable mapped to "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String altKeyExpr; /** * Instance variable mapped to "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String bundleExpr; /** * Instance variable mapped to "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String disabledExpr; /** * Instance variable mapped to "errorKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String errorKeyExpr; /** * Instance variable mapped to "errorStyle" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String errorStyleExpr; /** * Instance variable mapped to "errorStyleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String errorStyleClassExpr; /** * Instance variable mapped to "errorStyleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String errorStyleIdExpr; /** * Instance variable mapped to "indexed" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String indexedExpr; /** * Instance variable mapped to "maxlength" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String maxlengthExpr; /** * Instance variable mapped to "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String nameExpr; /** * Instance variable mapped to "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onblurExpr; /** * Instance variable mapped to "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onchangeExpr; /** * Instance variable mapped to "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onclickExpr; /** * Instance variable mapped to "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String ondblclickExpr; /** * Instance variable mapped to "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onfocusExpr; /** * Instance variable mapped to "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeydownExpr; /** * Instance variable mapped to "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeypressExpr; /** * Instance variable mapped to "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeyupExpr; /** * Instance variable mapped to "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmousedownExpr; /** * Instance variable mapped to "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmousemoveExpr; /** * Instance variable mapped to "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseoutExpr; /** * Instance variable mapped to "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseoverExpr; /** * Instance variable mapped to "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseupExpr; /** * Instance variable mapped to "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String propertyExpr; /** * Instance variable mapped to "readonly" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String readonlyExpr; /** * Instance variable mapped to "redisplay" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String redisplayExpr; /** * Instance variable mapped to "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleExpr; /** * Instance variable mapped to "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleClassExpr; /** * Instance variable mapped to "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleIdExpr; /** * Instance variable mapped to "size" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String sizeExpr; /** * Instance variable mapped to "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String tabindexExpr; /** * Instance variable mapped to "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String titleExpr; /** * Instance variable mapped to "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String titleKeyExpr; /** * Instance variable mapped to "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String valueExpr; /** * Getter method for "accessKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAccesskeyExpr() { return (accessKeyExpr); } /** * Getter method for "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAltExpr() { return (altExpr); } /** * Getter method for "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAltKeyExpr() { return (altKeyExpr); } /** * Getter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getBundleExpr() { return (bundleExpr); } /** * Getter method for "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getDisabledExpr() { return (disabledExpr); } /** * Getter method for "errorKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getErrorKeyExpr() { return (errorKeyExpr); } /** * Getter method for "errorStyle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getErrorStyleExpr() { return (errorStyleExpr); } /** * Getter method for "errorStyleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getErrorStyleClassExpr() { return (errorStyleClassExpr); } /** * Getter method for "errorStyleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getErrorStyleIdExpr() { return (errorStyleIdExpr); } /** * Getter method for "indexed" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getIndexedExpr() { return (indexedExpr); } /** * Getter method for "maxlength" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getMaxlengthExpr() { return (maxlengthExpr); } /** * Getter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getNameExpr() { return (nameExpr); } /** * Getter method for "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnblurExpr() { return (onblurExpr); } /** * Getter method for "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnchangeExpr() { return (onchangeExpr); } /** * Getter method for "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnclickExpr() { return (onclickExpr); } /** * Getter method for "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOndblclickExpr() { return (ondblclickExpr); } /** * Getter method for "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnfocusExpr() { return (onfocusExpr); } /** * Getter method for "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeydownExpr() { return (onkeydownExpr); } /** * Getter method for "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeypressExpr() { return (onkeypressExpr); } /** * Getter method for "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeyupExpr() { return (onkeyupExpr); } /** * Getter method for "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmousedownExpr() { return (onmousedownExpr); } /** * Getter method for "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmousemoveExpr() { return (onmousemoveExpr); } /** * Getter method for "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseoutExpr() { return (onmouseoutExpr); } /** * Getter method for "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseoverExpr() { return (onmouseoverExpr); } /** * Getter method for "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseupExpr() { return (onmouseupExpr); } /** * Getter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPropertyExpr() { return (propertyExpr); } /** * Getter method for "readonly" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getReadonlyExpr() { return (readonlyExpr); } /** * Getter method for "redisplay" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getRedisplayExpr() { return (redisplayExpr); } /** * Getter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleExpr() { return (styleExpr); } /** * Getter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleClassExpr() { return (styleClassExpr); } /** * Getter method for "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleIdExpr() { return (styleIdExpr); } /** * Getter method for "size" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getSizeExpr() { return (sizeExpr); } /** * Getter method for "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTabindexExpr() { return (tabindexExpr); } /** * Getter method for "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTitleExpr() { return (titleExpr); } /** * Getter method for "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTitleKeyExpr() { return (titleKeyExpr); } /** * Getter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getValueExpr() { return (valueExpr); } /** * Setter method for "accessKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAccesskeyExpr(String accessKeyExpr) { this.accessKeyExpr = accessKeyExpr; } /** * Setter method for "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAltExpr(String altExpr) { this.altExpr = altExpr; } /** * Setter method for "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAltKeyExpr(String altKeyExpr) { this.altKeyExpr = altKeyExpr; } /** * Setter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setBundleExpr(String bundleExpr) { this.bundleExpr = bundleExpr; } /** * Setter method for "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setDisabledExpr(String disabledExpr) { this.disabledExpr = disabledExpr; } /** * Setter method for "errorKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setErrorKeyExpr(String errorKeyExpr) { this.errorKeyExpr = errorKeyExpr; } /** * Setter method for "errorStyle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setErrorStyleExpr(String errorStyleExpr) { this.errorStyleExpr = errorStyleExpr; } /** * Setter method for "errorStyleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setErrorStyleClassExpr(String errorStyleClassExpr) { this.errorStyleClassExpr = errorStyleClassExpr; } /** * Setter method for "errorStyleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setErrorStyleIdExpr(String errorStyleIdExpr) { this.errorStyleIdExpr = errorStyleIdExpr; } /** * Setter method for "indexed" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setIndexedExpr(String indexedExpr) { this.indexedExpr = indexedExpr; } /** * Setter method for "maxlength" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setMaxlengthExpr(String maxlengthExpr) { this.maxlengthExpr = maxlengthExpr; } /** * Setter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setNameExpr(String nameExpr) { this.nameExpr = nameExpr; } /** * Setter method for "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnblurExpr(String onblurExpr) { this.onblurExpr = onblurExpr; } /** * Setter method for "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnchangeExpr(String onchangeExpr) { this.onchangeExpr = onchangeExpr; } /** * Setter method for "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnclickExpr(String onclickExpr) { this.onclickExpr = onclickExpr; } /** * Setter method for "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOndblclickExpr(String ondblclickExpr) { this.ondblclickExpr = ondblclickExpr; } /** * Setter method for "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnfocusExpr(String onfocusExpr) { this.onfocusExpr = onfocusExpr; } /** * Setter method for "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeydownExpr(String onkeydownExpr) { this.onkeydownExpr = onkeydownExpr; } /** * Setter method for "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeypressExpr(String onkeypressExpr) { this.onkeypressExpr = onkeypressExpr; } /** * Setter method for "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeyupExpr(String onkeyupExpr) { this.onkeyupExpr = onkeyupExpr; } /** * Setter method for "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmousedownExpr(String onmousedownExpr) { this.onmousedownExpr = onmousedownExpr; } /** * Setter method for "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmousemoveExpr(String onmousemoveExpr) { this.onmousemoveExpr = onmousemoveExpr; } /** * Setter method for "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseoutExpr(String onmouseoutExpr) { this.onmouseoutExpr = onmouseoutExpr; } /** * Setter method for "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseoverExpr(String onmouseoverExpr) { this.onmouseoverExpr = onmouseoverExpr; } /** * Setter method for "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseupExpr(String onmouseupExpr) { this.onmouseupExpr = onmouseupExpr; } /** * Setter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPropertyExpr(String propertyExpr) { this.propertyExpr = propertyExpr; } /** * Setter method for "readonly" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setReadonlyExpr(String readonlyExpr) { this.readonlyExpr = readonlyExpr; } /** * Setter method for "redisplay" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setRedisplayExpr(String redisplayExpr) { this.redisplayExpr = redisplayExpr; } /** * Setter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleExpr(String styleExpr) { this.styleExpr = styleExpr; } /** * Setter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleClassExpr(String styleClassExpr) { this.styleClassExpr = styleClassExpr; } /** * Setter method for "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleIdExpr(String styleIdExpr) { this.styleIdExpr = styleIdExpr; } /** * Setter method for "size" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setSizeExpr(String sizeExpr) { this.sizeExpr = sizeExpr; } /** * Setter method for "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTabindexExpr(String tabindexExpr) { this.tabindexExpr = tabindexExpr; } /** * Setter method for "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTitleExpr(String titleExpr) { this.titleExpr = titleExpr; } /** * Setter method for "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTitleKeyExpr(String titleKeyExpr) { this.titleKeyExpr = titleKeyExpr; } /** * Setter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setValueExpr(String valueExpr) { this.valueExpr = valueExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setAccesskeyExpr(null); setAltExpr(null); setAltKeyExpr(null); setBundleExpr(null); setDisabledExpr(null); setErrorKeyExpr(null); setErrorStyleExpr(null); setErrorStyleClassExpr(null); setErrorStyleIdExpr(null); setIndexedExpr(null); setMaxlengthExpr(null); setNameExpr(null); setOnblurExpr(null); setOnchangeExpr(null); setOnclickExpr(null); setOndblclickExpr(null); setOnfocusExpr(null); setOnkeydownExpr(null); setOnkeypressExpr(null); setOnkeyupExpr(null); setOnmousedownExpr(null); setOnmousemoveExpr(null); setOnmouseoutExpr(null); setOnmouseoverExpr(null); setOnmouseupExpr(null); setPropertyExpr(null); setReadonlyExpr(null); setRedisplayExpr(null); setStyleExpr(null); setStyleClassExpr(null); setStyleIdExpr(null); setSizeExpr(null); setTabindexExpr(null); setTitleExpr(null); setTitleKeyExpr(null); setValueExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return(super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; Boolean bool = null; if ((string = EvalHelper.evalString("accessKey", getAccesskeyExpr(), this, pageContext)) != null) setAccesskey(string); if ((string = EvalHelper.evalString("alt", getAltExpr(), this, pageContext)) != null) setAlt(string); if ((string = EvalHelper.evalString("altKey", getAltKeyExpr(), this, pageContext)) != null) setAltKey(string); if ((string = EvalHelper.evalString("bundle", getBundleExpr(), this, pageContext)) != null) setBundle(string); if ((bool = EvalHelper.evalBoolean("disabled", getDisabledExpr(), this, pageContext)) != null) setDisabled(bool.booleanValue()); if ((string = EvalHelper.evalString("errorKey", getErrorKeyExpr(), this, pageContext)) != null) setErrorKey(string); if ((string = EvalHelper.evalString("errorStyle", getErrorStyleExpr(), this, pageContext)) != null) setErrorStyle(string); if ((string = EvalHelper.evalString("errorStyleClass", getErrorStyleClassExpr(), this, pageContext)) != null) setErrorStyleClass(string); if ((string = EvalHelper.evalString("errorStyleId", getErrorStyleIdExpr(), this, pageContext)) != null) setErrorStyleId(string); if ((bool = EvalHelper.evalBoolean("indexed", getIndexedExpr(), this, pageContext)) != null) setIndexed(bool.booleanValue()); if ((string = EvalHelper.evalString("maxlength", getMaxlengthExpr(), this, pageContext)) != null) setMaxlength(string); if ((string = EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) setName(string); if ((string = EvalHelper.evalString("onblur", getOnblurExpr(), this, pageContext)) != null) setOnblur(string); if ((string = EvalHelper.evalString("onchange", getOnchangeExpr(), this, pageContext)) != null) setOnchange(string); if ((string = EvalHelper.evalString("onclick", getOnclickExpr(), this, pageContext)) != null) setOnclick(string); if ((string = EvalHelper.evalString("ondblclick", getOndblclickExpr(), this, pageContext)) != null) setOndblclick(string); if ((string = EvalHelper.evalString("onfocus", getOnfocusExpr(), this, pageContext)) != null) setOnfocus(string); if ((string = EvalHelper.evalString("onkeydown", getOnkeydownExpr(), this, pageContext)) != null) setOnkeydown(string); if ((string = EvalHelper.evalString("onkeypress", getOnkeypressExpr(), this, pageContext)) != null) setOnkeypress(string); if ((string = EvalHelper.evalString("onkeyup", getOnkeyupExpr(), this, pageContext)) != null) setOnkeyup(string); if ((string = EvalHelper.evalString("onmousedown", getOnmousedownExpr(), this, pageContext)) != null) setOnmousedown(string); if ((string = EvalHelper.evalString("onmousemove", getOnmousemoveExpr(), this, pageContext)) != null) setOnmousemove(string); if ((string = EvalHelper.evalString("onmouseout", getOnmouseoutExpr(), this, pageContext)) != null) setOnmouseout(string); if ((string = EvalHelper.evalString("onmouseover", getOnmouseoverExpr(), this, pageContext)) != null) setOnmouseover(string); if ((string = EvalHelper.evalString("onmouseup", getOnmouseupExpr(), this, pageContext)) != null) setOnmouseup(string); if ((string = EvalHelper.evalString("property", getPropertyExpr(), this, pageContext)) != null) setProperty(string); if ((bool = EvalHelper.evalBoolean("readonly", getReadonlyExpr(), this, pageContext)) != null) setReadonly(bool.booleanValue()); if ((bool = EvalHelper.evalBoolean("redisplay", getRedisplayExpr(), this, pageContext)) != null) setRedisplay(bool.booleanValue()); if ((string = EvalHelper.evalString("style", getStyleExpr(), this, pageContext)) != null) setStyle(string); if ((string = EvalHelper.evalString("styleClass", getStyleClassExpr(), this, pageContext)) != null) setStyleClass(string); if ((string = EvalHelper.evalString("styleId", getStyleIdExpr(), this, pageContext)) != null) setStyleId(string); if ((string = EvalHelper.evalString("size", getSizeExpr(), this, pageContext)) != null) setSize(string); if ((string = EvalHelper.evalString("tabindex", getTabindexExpr(), this, pageContext)) != null) setTabindex(string); if ((string = EvalHelper.evalString("title", getTitleExpr(), this, pageContext)) != null) setTitle(string); if ((string = EvalHelper.evalString("titleKey", getTitleKeyExpr(), this, pageContext)) != null) setTitleKey(string); if ((string = EvalHelper.evalString("value", getValueExpr(), this, pageContext)) != null) setValue(string); } } ././@LongLink0000644000175000017500000000015710423140531011320 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELPasswordTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELPasswordTagBea0000644000175000017500000002330210404045252034070 0ustar arnaudarnaud00000000000000/* * $Id: ELPasswordTagBeanInfo.java 123585 2004-12-29 00:43:33Z martinc $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.html.ELPasswordTag class. It is needed * to override the default mapping of custom tag attribute names to class * attribute names. *

* This is because the value of the unevaluated EL expression has to be kept * separately from the evaluated value, which is stored in the base class. This * is related to the fact that the JSP compiler can choose to reuse different * tag instances if they received the same original attribute values, and the * JSP compiler can choose to not re-call the setter methods, because it can * assume the same values are already set. */ public class ELPasswordTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("accesskey", ELPasswordTag.class, null, "setAccesskeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("alt", ELPasswordTag.class, null, "setAltExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("altKey", ELPasswordTag.class, null, "setAltKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("bundle", ELPasswordTag.class, null, "setBundleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("disabled", ELPasswordTag.class, null, "setDisabledExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("errorKey", ELPasswordTag.class, null, "setErrorKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("errorStyle", ELPasswordTag.class, null, "setErrorStyleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("errorStyleClass", ELPasswordTag.class, null, "setErrorStyleClassExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("errorStyleId", ELPasswordTag.class, null, "setErrorStyleIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("indexed", ELPasswordTag.class, null, "setIndexedExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("maxlength", ELPasswordTag.class, null, "setMaxlengthExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("name", ELPasswordTag.class, null, "setNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onblur", ELPasswordTag.class, null, "setOnblurExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onchange", ELPasswordTag.class, null, "setOnchangeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onclick", ELPasswordTag.class, null, "setOnclickExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("ondblclick", ELPasswordTag.class, null, "setOndblclickExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onfocus", ELPasswordTag.class, null, "setOnfocusExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeydown", ELPasswordTag.class, null, "setOnkeydownExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeypress", ELPasswordTag.class, null, "setOnkeypressExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeyup", ELPasswordTag.class, null, "setOnkeyupExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmousedown", ELPasswordTag.class, null, "setOnmousedownExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmousemove", ELPasswordTag.class, null, "setOnmousemoveExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseout", ELPasswordTag.class, null, "setOnmouseoutExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseover", ELPasswordTag.class, null, "setOnmouseoverExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseup", ELPasswordTag.class, null, "setOnmouseupExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("property", ELPasswordTag.class, null, "setPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("readonly", ELPasswordTag.class, null, "setReadonlyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("redisplay", ELPasswordTag.class, null, "setRedisplayExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("style", ELPasswordTag.class, null, "setStyleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleClass", ELPasswordTag.class, null, "setStyleClassExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleId", ELPasswordTag.class, null, "setStyleIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("size", ELPasswordTag.class, null, "setSizeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("tabindex", ELPasswordTag.class, null, "setTabindexExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("title", ELPasswordTag.class, null, "setTitleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("titleKey", ELPasswordTag.class, null, "setTitleKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("value", ELPasswordTag.class, null, "setValueExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELRadioTag.java0000644000175000017500000006654310404045252033652 0ustar arnaudarnaud00000000000000/* * $Id: ELRadioTag.java 373801 2006-01-31 12:18:48Z niallp $ * * Copyright 1999-2006 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import org.apache.struts.taglib.html.RadioTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Tag for input fields of type "radio". *

* This class is a subclass of the class * org.apache.struts.taglib.html.RadioTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 373801 $ */ public class ELRadioTag extends RadioTag { /** * Instance variable mapped to "accessKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String accessKeyExpr; /** * Instance variable mapped to "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String altExpr; /** * Instance variable mapped to "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String altKeyExpr; /** * Instance variable mapped to "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String bundleExpr; /** * Instance variable mapped to "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String disabledExpr; /** * Instance variable mapped to "errorKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String errorKeyExpr; /** * Instance variable mapped to "errorStyle" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String errorStyleExpr; /** * Instance variable mapped to "errorStyleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String errorStyleClassExpr; /** * Instance variable mapped to "errorStyleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String errorStyleIdExpr; /** * Instance variable mapped to "idName" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String idNameExpr; /** * Instance variable mapped to "indexed" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String indexedExpr; /** * Instance variable mapped to "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String nameExpr; /** * Instance variable mapped to "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onblurExpr; /** * Instance variable mapped to "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onchangeExpr; /** * Instance variable mapped to "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onclickExpr; /** * Instance variable mapped to "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String ondblclickExpr; /** * Instance variable mapped to "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onfocusExpr; /** * Instance variable mapped to "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeydownExpr; /** * Instance variable mapped to "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeypressExpr; /** * Instance variable mapped to "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeyupExpr; /** * Instance variable mapped to "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmousedownExpr; /** * Instance variable mapped to "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmousemoveExpr; /** * Instance variable mapped to "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseoutExpr; /** * Instance variable mapped to "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseoverExpr; /** * Instance variable mapped to "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseupExpr; /** * Instance variable mapped to "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String propertyExpr; /** * Instance variable mapped to "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleExpr; /** * Instance variable mapped to "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleClassExpr; /** * Instance variable mapped to "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleIdExpr; /** * Instance variable mapped to "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String tabindexExpr; /** * Instance variable mapped to "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String titleExpr; /** * Instance variable mapped to "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String titleKeyExpr; /** * Instance variable mapped to "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String valueExpr; /** * Getter method for "accessKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAccesskeyExpr() { return (accessKeyExpr); } /** * Getter method for "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAltExpr() { return (altExpr); } /** * Getter method for "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAltKeyExpr() { return (altKeyExpr); } /** * Getter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getBundleExpr() { return (bundleExpr); } /** * Getter method for "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getDisabledExpr() { return (disabledExpr); } /** * Getter method for "errorKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getErrorKeyExpr() { return (errorKeyExpr); } /** * Getter method for "errorStyle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getErrorStyleExpr() { return (errorStyleExpr); } /** * Getter method for "errorStyleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getErrorStyleClassExpr() { return (errorStyleClassExpr); } /** * Getter method for "errorStyleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getErrorStyleIdExpr() { return (errorStyleIdExpr); } /** * Getter method for "idName" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getIdNameExpr() { return (idNameExpr); } /** * Getter method for "indexed" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getIndexedExpr() { return (indexedExpr); } /** * Getter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getNameExpr() { return (nameExpr); } /** * Getter method for "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnblurExpr() { return (onblurExpr); } /** * Getter method for "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnchangeExpr() { return (onchangeExpr); } /** * Getter method for "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnclickExpr() { return (onclickExpr); } /** * Getter method for "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOndblclickExpr() { return (ondblclickExpr); } /** * Getter method for "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnfocusExpr() { return (onfocusExpr); } /** * Getter method for "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeydownExpr() { return (onkeydownExpr); } /** * Getter method for "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeypressExpr() { return (onkeypressExpr); } /** * Getter method for "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeyupExpr() { return (onkeyupExpr); } /** * Getter method for "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmousedownExpr() { return (onmousedownExpr); } /** * Getter method for "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmousemoveExpr() { return (onmousemoveExpr); } /** * Getter method for "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseoutExpr() { return (onmouseoutExpr); } /** * Getter method for "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseoverExpr() { return (onmouseoverExpr); } /** * Getter method for "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseupExpr() { return (onmouseupExpr); } /** * Getter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPropertyExpr() { return (propertyExpr); } /** * Getter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleExpr() { return (styleExpr); } /** * Getter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleClassExpr() { return (styleClassExpr); } /** * Getter method for "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleIdExpr() { return (styleIdExpr); } /** * Getter method for "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTabindexExpr() { return (tabindexExpr); } /** * Getter method for "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTitleExpr() { return (titleExpr); } /** * Getter method for "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTitleKeyExpr() { return (titleKeyExpr); } /** * Getter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getValueExpr() { return (valueExpr); } /** * Setter method for "accessKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAccesskeyExpr(String accessKeyExpr) { this.accessKeyExpr = accessKeyExpr; } /** * Setter method for "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAltExpr(String altExpr) { this.altExpr = altExpr; } /** * Setter method for "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAltKeyExpr(String altKeyExpr) { this.altKeyExpr = altKeyExpr; } /** * Setter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setBundleExpr(String bundleExpr) { this.bundleExpr = bundleExpr; } /** * Setter method for "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setDisabledExpr(String disabledExpr) { this.disabledExpr = disabledExpr; } /** * Setter method for "errorKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setErrorKeyExpr(String errorKeyExpr) { this.errorKeyExpr = errorKeyExpr; } /** * Setter method for "errorStyle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setErrorStyleExpr(String errorStyleExpr) { this.errorStyleExpr = errorStyleExpr; } /** * Setter method for "errorStyleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setErrorStyleClassExpr(String errorStyleClassExpr) { this.errorStyleClassExpr = errorStyleClassExpr; } /** * Setter method for "errorStyleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setErrorStyleIdExpr(String errorStyleIdExpr) { this.errorStyleIdExpr = errorStyleIdExpr; } /** * Setter method for "idName" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setIdNameExpr(String idNameExpr) { this.idNameExpr = idNameExpr; } /** * Setter method for "indexed" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setIndexedExpr(String indexedExpr) { this.indexedExpr = indexedExpr; } /** * Setter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setNameExpr(String nameExpr) { this.nameExpr = nameExpr; } /** * Setter method for "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnblurExpr(String onblurExpr) { this.onblurExpr = onblurExpr; } /** * Setter method for "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnchangeExpr(String onchangeExpr) { this.onchangeExpr = onchangeExpr; } /** * Setter method for "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnclickExpr(String onclickExpr) { this.onclickExpr = onclickExpr; } /** * Setter method for "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOndblclickExpr(String ondblclickExpr) { this.ondblclickExpr = ondblclickExpr; } /** * Setter method for "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnfocusExpr(String onfocusExpr) { this.onfocusExpr = onfocusExpr; } /** * Setter method for "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeydownExpr(String onkeydownExpr) { this.onkeydownExpr = onkeydownExpr; } /** * Setter method for "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeypressExpr(String onkeypressExpr) { this.onkeypressExpr = onkeypressExpr; } /** * Setter method for "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeyupExpr(String onkeyupExpr) { this.onkeyupExpr = onkeyupExpr; } /** * Setter method for "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmousedownExpr(String onmousedownExpr) { this.onmousedownExpr = onmousedownExpr; } /** * Setter method for "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmousemoveExpr(String onmousemoveExpr) { this.onmousemoveExpr = onmousemoveExpr; } /** * Setter method for "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseoutExpr(String onmouseoutExpr) { this.onmouseoutExpr = onmouseoutExpr; } /** * Setter method for "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseoverExpr(String onmouseoverExpr) { this.onmouseoverExpr = onmouseoverExpr; } /** * Setter method for "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseupExpr(String onmouseupExpr) { this.onmouseupExpr = onmouseupExpr; } /** * Setter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPropertyExpr(String propertyExpr) { this.propertyExpr = propertyExpr; } /** * Setter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleExpr(String styleExpr) { this.styleExpr = styleExpr; } /** * Setter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleClassExpr(String styleClassExpr) { this.styleClassExpr = styleClassExpr; } /** * Setter method for "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleIdExpr(String styleIdExpr) { this.styleIdExpr = styleIdExpr; } /** * Setter method for "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTabindexExpr(String tabindexExpr) { this.tabindexExpr = tabindexExpr; } /** * Setter method for "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTitleExpr(String titleExpr) { this.titleExpr = titleExpr; } /** * Setter method for "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTitleKeyExpr(String titleKeyExpr) { this.titleKeyExpr = titleKeyExpr; } /** * Setter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setValueExpr(String valueExpr) { this.valueExpr = valueExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setAccesskeyExpr(null); setAltExpr(null); setAltKeyExpr(null); setBundleExpr(null); setDisabledExpr(null); setErrorKeyExpr(null); setErrorStyleExpr(null); setErrorStyleClassExpr(null); setErrorStyleIdExpr(null); setIdNameExpr(null); setIndexedExpr(null); setNameExpr(null); setOnblurExpr(null); setOnchangeExpr(null); setOnclickExpr(null); setOndblclickExpr(null); setOnfocusExpr(null); setOnkeydownExpr(null); setOnkeypressExpr(null); setOnkeyupExpr(null); setOnmousedownExpr(null); setOnmousemoveExpr(null); setOnmouseoutExpr(null); setOnmouseoverExpr(null); setOnmouseupExpr(null); setPropertyExpr(null); setStyleExpr(null); setStyleClassExpr(null); setStyleIdExpr(null); setTabindexExpr(null); setTitleExpr(null); setTitleKeyExpr(null); setValueExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return(super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; Boolean bool = null; if ((string = EvalHelper.evalString("accessKey", getAccesskeyExpr(), this, pageContext)) != null) setAccesskey(string); if ((string = EvalHelper.evalString("alt", getAltExpr(), this, pageContext)) != null) setAlt(string); if ((string = EvalHelper.evalString("altKey", getAltKeyExpr(), this, pageContext)) != null) setAltKey(string); if ((string = EvalHelper.evalString("bundle", getBundleExpr(), this, pageContext)) != null) setBundle(string); if ((bool = EvalHelper.evalBoolean("disabled", getDisabledExpr(), this, pageContext)) != null) setDisabled(bool.booleanValue()); if ((string = EvalHelper.evalString("errorKey", getErrorKeyExpr(), this, pageContext)) != null) setErrorKey(string); if ((string = EvalHelper.evalString("errorStyle", getErrorStyleExpr(), this, pageContext)) != null) setErrorStyle(string); if ((string = EvalHelper.evalString("errorStyleClass", getErrorStyleClassExpr(), this, pageContext)) != null) setErrorStyleClass(string); if ((string = EvalHelper.evalString("errorStyleId", getErrorStyleIdExpr(), this, pageContext)) != null) setErrorStyleId(string); if ((string = EvalHelper.evalString("idName", getIdNameExpr(), this, pageContext)) != null) setIdName(string); if ((bool = EvalHelper.evalBoolean("indexed", getIndexedExpr(), this, pageContext)) != null) setIndexed(bool.booleanValue()); if ((string = EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) setName(string); if ((string = EvalHelper.evalString("onblur", getOnblurExpr(), this, pageContext)) != null) setOnblur(string); if ((string = EvalHelper.evalString("onchange", getOnchangeExpr(), this, pageContext)) != null) setOnchange(string); if ((string = EvalHelper.evalString("onclick", getOnclickExpr(), this, pageContext)) != null) setOnclick(string); if ((string = EvalHelper.evalString("ondblclick", getOndblclickExpr(), this, pageContext)) != null) setOndblclick(string); if ((string = EvalHelper.evalString("onfocus", getOnfocusExpr(), this, pageContext)) != null) setOnfocus(string); if ((string = EvalHelper.evalString("onkeydown", getOnkeydownExpr(), this, pageContext)) != null) setOnkeydown(string); if ((string = EvalHelper.evalString("onkeypress", getOnkeypressExpr(), this, pageContext)) != null) setOnkeypress(string); if ((string = EvalHelper.evalString("onkeyup", getOnkeyupExpr(), this, pageContext)) != null) setOnkeyup(string); if ((string = EvalHelper.evalString("onmousedown", getOnmousedownExpr(), this, pageContext)) != null) setOnmousedown(string); if ((string = EvalHelper.evalString("onmousemove", getOnmousemoveExpr(), this, pageContext)) != null) setOnmousemove(string); if ((string = EvalHelper.evalString("onmouseout", getOnmouseoutExpr(), this, pageContext)) != null) setOnmouseout(string); if ((string = EvalHelper.evalString("onmouseover", getOnmouseoverExpr(), this, pageContext)) != null) setOnmouseover(string); if ((string = EvalHelper.evalString("onmouseup", getOnmouseupExpr(), this, pageContext)) != null) setOnmouseup(string); if ((string = EvalHelper.evalString("property", getPropertyExpr(), this, pageContext)) != null) setProperty(string); if ((string = EvalHelper.evalString("style", getStyleExpr(), this, pageContext)) != null) setStyle(string); if ((string = EvalHelper.evalString("styleClass", getStyleClassExpr(), this, pageContext)) != null) setStyleClass(string); if ((string = EvalHelper.evalString("styleId", getStyleIdExpr(), this, pageContext)) != null) setStyleId(string); if ((string = EvalHelper.evalString("tabindex", getTabindexExpr(), this, pageContext)) != null) setTabindex(string); if ((string = EvalHelper.evalString("title", getTitleExpr(), this, pageContext)) != null) setTitle(string); if ((string = EvalHelper.evalString("titleKey", getTitleKeyExpr(), this, pageContext)) != null) setTitleKey(string); if ((string = EvalHelper.evalString("value", getValueExpr(), this, pageContext)) != null) setValue(string); } } ././@LongLink0000644000175000017500000000015410423140531011315 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELRadioTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELRadioTagBeanIn0000644000175000017500000002167710404045252034006 0ustar arnaudarnaud00000000000000/* * $Id: ELRadioTagBeanInfo.java 123585 2004-12-29 00:43:33Z martinc $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.html.ELRadioTag class. It is needed * to override the default mapping of custom tag attribute names to class * attribute names. *

* This is because the value of the unevaluated EL expression has to be kept * separately from the evaluated value, which is stored in the base class. This * is related to the fact that the JSP compiler can choose to reuse different * tag instances if they received the same original attribute values, and the * JSP compiler can choose to not re-call the setter methods, because it can * assume the same values are already set. */ public class ELRadioTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("accesskey", ELRadioTag.class, null, "setAccesskeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("alt", ELRadioTag.class, null, "setAltExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("altKey", ELRadioTag.class, null, "setAltKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("bundle", ELRadioTag.class, null, "setBundleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("disabled", ELRadioTag.class, null, "setDisabledExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("errorKey", ELRadioTag.class, null, "setErrorKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("errorStyle", ELRadioTag.class, null, "setErrorStyleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("errorStyleClass", ELRadioTag.class, null, "setErrorStyleClassExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("errorStyleId", ELRadioTag.class, null, "setErrorStyleIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("indexed", ELRadioTag.class, null, "setIndexedExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("name", ELRadioTag.class, null, "setNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onblur", ELRadioTag.class, null, "setOnblurExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onchange", ELRadioTag.class, null, "setOnchangeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onclick", ELRadioTag.class, null, "setOnclickExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("ondblclick", ELRadioTag.class, null, "setOndblclickExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onfocus", ELRadioTag.class, null, "setOnfocusExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeydown", ELRadioTag.class, null, "setOnkeydownExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeypress", ELRadioTag.class, null, "setOnkeypressExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeyup", ELRadioTag.class, null, "setOnkeyupExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmousedown", ELRadioTag.class, null, "setOnmousedownExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmousemove", ELRadioTag.class, null, "setOnmousemoveExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseout", ELRadioTag.class, null, "setOnmouseoutExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseover", ELRadioTag.class, null, "setOnmouseoverExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseup", ELRadioTag.class, null, "setOnmouseupExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("property", ELRadioTag.class, null, "setPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("style", ELRadioTag.class, null, "setStyleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleClass", ELRadioTag.class, null, "setStyleClassExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleId", ELRadioTag.class, null, "setStyleIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("tabindex", ELRadioTag.class, null, "setTabindexExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("title", ELRadioTag.class, null, "setTitleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("titleKey", ELRadioTag.class, null, "setTitleKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("value", ELRadioTag.class, null, "setValueExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("idName", ELRadioTag.class, null, "setIdNameExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELResetTag.java0000644000175000017500000005362510404045252033673 0ustar arnaudarnaud00000000000000/* * $Id: ELResetTag.java 123585 2004-12-29 00:43:33Z martinc $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import org.apache.struts.taglib.html.ResetTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Tag for input fields of type "reset". *

* This class is a subclass of the class * org.apache.struts.taglib.html.ResetTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 123585 $ */ public class ELResetTag extends ResetTag { /** * Instance variable mapped to "accessKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String accessKeyExpr; /** * Instance variable mapped to "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String altExpr; /** * Instance variable mapped to "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String altKeyExpr; /** * Instance variable mapped to "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String bundleExpr; /** * Instance variable mapped to "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String disabledExpr; /** * Instance variable mapped to "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onblurExpr; /** * Instance variable mapped to "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onchangeExpr; /** * Instance variable mapped to "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onclickExpr; /** * Instance variable mapped to "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String ondblclickExpr; /** * Instance variable mapped to "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onfocusExpr; /** * Instance variable mapped to "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeydownExpr; /** * Instance variable mapped to "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeypressExpr; /** * Instance variable mapped to "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeyupExpr; /** * Instance variable mapped to "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmousedownExpr; /** * Instance variable mapped to "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmousemoveExpr; /** * Instance variable mapped to "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseoutExpr; /** * Instance variable mapped to "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseoverExpr; /** * Instance variable mapped to "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseupExpr; /** * Instance variable mapped to "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String propertyExpr; /** * Instance variable mapped to "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleExpr; /** * Instance variable mapped to "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleClassExpr; /** * Instance variable mapped to "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleIdExpr; /** * Instance variable mapped to "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String tabindexExpr; /** * Instance variable mapped to "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String titleExpr; /** * Instance variable mapped to "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String titleKeyExpr; /** * Instance variable mapped to "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String valueExpr; /** * Getter method for "accessKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAccesskeyExpr() { return (accessKeyExpr); } /** * Getter method for "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAltExpr() { return (altExpr); } /** * Getter method for "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAltKeyExpr() { return (altKeyExpr); } /** * Getter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getBundleExpr() { return (bundleExpr); } /** * Getter method for "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getDisabledExpr() { return (disabledExpr); } /** * Getter method for "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnblurExpr() { return (onblurExpr); } /** * Getter method for "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnchangeExpr() { return (onchangeExpr); } /** * Getter method for "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnclickExpr() { return (onclickExpr); } /** * Getter method for "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOndblclickExpr() { return (ondblclickExpr); } /** * Getter method for "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnfocusExpr() { return (onfocusExpr); } /** * Getter method for "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeydownExpr() { return (onkeydownExpr); } /** * Getter method for "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeypressExpr() { return (onkeypressExpr); } /** * Getter method for "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeyupExpr() { return (onkeyupExpr); } /** * Getter method for "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmousedownExpr() { return (onmousedownExpr); } /** * Getter method for "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmousemoveExpr() { return (onmousemoveExpr); } /** * Getter method for "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseoutExpr() { return (onmouseoutExpr); } /** * Getter method for "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseoverExpr() { return (onmouseoverExpr); } /** * Getter method for "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseupExpr() { return (onmouseupExpr); } /** * Getter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPropertyExpr() { return (propertyExpr); } /** * Getter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleExpr() { return (styleExpr); } /** * Getter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleClassExpr() { return (styleClassExpr); } /** * Getter method for "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleIdExpr() { return (styleIdExpr); } /** * Getter method for "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTabindexExpr() { return (tabindexExpr); } /** * Getter method for "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTitleExpr() { return (titleExpr); } /** * Getter method for "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTitleKeyExpr() { return (titleKeyExpr); } /** * Getter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getValueExpr() { return (valueExpr); } /** * Setter method for "accessKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAccesskeyExpr(String accessKeyExpr) { this.accessKeyExpr = accessKeyExpr; } /** * Setter method for "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAltExpr(String altExpr) { this.altExpr = altExpr; } /** * Setter method for "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAltKeyExpr(String altKeyExpr) { this.altKeyExpr = altKeyExpr; } /** * Setter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setBundleExpr(String bundleExpr) { this.bundleExpr = bundleExpr; } /** * Setter method for "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setDisabledExpr(String disabledExpr) { this.disabledExpr = disabledExpr; } /** * Setter method for "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnblurExpr(String onblurExpr) { this.onblurExpr = onblurExpr; } /** * Setter method for "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnchangeExpr(String onchangeExpr) { this.onchangeExpr = onchangeExpr; } /** * Setter method for "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnclickExpr(String onclickExpr) { this.onclickExpr = onclickExpr; } /** * Setter method for "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOndblclickExpr(String ondblclickExpr) { this.ondblclickExpr = ondblclickExpr; } /** * Setter method for "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnfocusExpr(String onfocusExpr) { this.onfocusExpr = onfocusExpr; } /** * Setter method for "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeydownExpr(String onkeydownExpr) { this.onkeydownExpr = onkeydownExpr; } /** * Setter method for "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeypressExpr(String onkeypressExpr) { this.onkeypressExpr = onkeypressExpr; } /** * Setter method for "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeyupExpr(String onkeyupExpr) { this.onkeyupExpr = onkeyupExpr; } /** * Setter method for "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmousedownExpr(String onmousedownExpr) { this.onmousedownExpr = onmousedownExpr; } /** * Setter method for "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmousemoveExpr(String onmousemoveExpr) { this.onmousemoveExpr = onmousemoveExpr; } /** * Setter method for "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseoutExpr(String onmouseoutExpr) { this.onmouseoutExpr = onmouseoutExpr; } /** * Setter method for "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseoverExpr(String onmouseoverExpr) { this.onmouseoverExpr = onmouseoverExpr; } /** * Setter method for "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseupExpr(String onmouseupExpr) { this.onmouseupExpr = onmouseupExpr; } /** * Setter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPropertyExpr(String propertyExpr) { this.propertyExpr = propertyExpr; } /** * Setter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleExpr(String styleExpr) { this.styleExpr = styleExpr; } /** * Setter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleClassExpr(String styleClassExpr) { this.styleClassExpr = styleClassExpr; } /** * Setter method for "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleIdExpr(String styleIdExpr) { this.styleIdExpr = styleIdExpr; } /** * Setter method for "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTabindexExpr(String tabindexExpr) { this.tabindexExpr = tabindexExpr; } /** * Setter method for "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTitleExpr(String titleExpr) { this.titleExpr = titleExpr; } /** * Setter method for "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTitleKeyExpr(String titleKeyExpr) { this.titleKeyExpr = titleKeyExpr; } /** * Setter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setValueExpr(String valueExpr) { this.valueExpr = valueExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setAccesskeyExpr(null); setAltExpr(null); setAltKeyExpr(null); setBundleExpr(null); setDisabledExpr(null); setOnblurExpr(null); setOnchangeExpr(null); setOnclickExpr(null); setOndblclickExpr(null); setOnfocusExpr(null); setOnkeydownExpr(null); setOnkeypressExpr(null); setOnkeyupExpr(null); setOnmousedownExpr(null); setOnmousemoveExpr(null); setOnmouseoutExpr(null); setOnmouseoverExpr(null); setOnmouseupExpr(null); setPropertyExpr(null); setStyleExpr(null); setStyleClassExpr(null); setStyleIdExpr(null); setTabindexExpr(null); setTitleExpr(null); setTitleKeyExpr(null); setValueExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return(super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; Boolean bool = null; if ((string = EvalHelper.evalString("accessKey", getAccesskeyExpr(), this, pageContext)) != null) setAccesskey(string); if ((string = EvalHelper.evalString("alt", getAltExpr(), this, pageContext)) != null) setAlt(string); if ((string = EvalHelper.evalString("altKey", getAltKeyExpr(), this, pageContext)) != null) setAltKey(string); if ((string = EvalHelper.evalString("bundle", getBundleExpr(), this, pageContext)) != null) setBundle(string); if ((bool = EvalHelper.evalBoolean("disabled", getDisabledExpr(), this, pageContext)) != null) setDisabled(bool.booleanValue()); if ((string = EvalHelper.evalString("onblur", getOnblurExpr(), this, pageContext)) != null) setOnblur(string); if ((string = EvalHelper.evalString("onchange", getOnchangeExpr(), this, pageContext)) != null) setOnchange(string); if ((string = EvalHelper.evalString("onclick", getOnclickExpr(), this, pageContext)) != null) setOnclick(string); if ((string = EvalHelper.evalString("ondblclick", getOndblclickExpr(), this, pageContext)) != null) setOndblclick(string); if ((string = EvalHelper.evalString("onfocus", getOnfocusExpr(), this, pageContext)) != null) setOnfocus(string); if ((string = EvalHelper.evalString("onkeydown", getOnkeydownExpr(), this, pageContext)) != null) setOnkeydown(string); if ((string = EvalHelper.evalString("onkeypress", getOnkeypressExpr(), this, pageContext)) != null) setOnkeypress(string); if ((string = EvalHelper.evalString("onkeyup", getOnkeyupExpr(), this, pageContext)) != null) setOnkeyup(string); if ((string = EvalHelper.evalString("onmousedown", getOnmousedownExpr(), this, pageContext)) != null) setOnmousedown(string); if ((string = EvalHelper.evalString("onmousemove", getOnmousemoveExpr(), this, pageContext)) != null) setOnmousemove(string); if ((string = EvalHelper.evalString("onmouseout", getOnmouseoutExpr(), this, pageContext)) != null) setOnmouseout(string); if ((string = EvalHelper.evalString("onmouseover", getOnmouseoverExpr(), this, pageContext)) != null) setOnmouseover(string); if ((string = EvalHelper.evalString("onmouseup", getOnmouseupExpr(), this, pageContext)) != null) setOnmouseup(string); if ((string = EvalHelper.evalString("property", getPropertyExpr(), this, pageContext)) != null) setProperty(string); if ((string = EvalHelper.evalString("style", getStyleExpr(), this, pageContext)) != null) setStyle(string); if ((string = EvalHelper.evalString("styleClass", getStyleClassExpr(), this, pageContext)) != null) setStyleClass(string); if ((string = EvalHelper.evalString("styleId", getStyleIdExpr(), this, pageContext)) != null) setStyleId(string); if ((string = EvalHelper.evalString("tabindex", getTabindexExpr(), this, pageContext)) != null) setTabindex(string); if ((string = EvalHelper.evalString("title", getTitleExpr(), this, pageContext)) != null) setTitle(string); if ((string = EvalHelper.evalString("titleKey", getTitleKeyExpr(), this, pageContext)) != null) setTitleKey(string); if ((string = EvalHelper.evalString("value", getValueExpr(), this, pageContext)) != null) setValue(string); } } ././@LongLink0000644000175000017500000000015410423140531011315 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELResetTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELResetTagBeanIn0000644000175000017500000001713510404045252034024 0ustar arnaudarnaud00000000000000/* * $Id: ELResetTagBeanInfo.java 123585 2004-12-29 00:43:33Z martinc $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.html.ELResetTag class. It is needed * to override the default mapping of custom tag attribute names to class * attribute names. *

* In particular, it provides for the mapping of the custom tag attribute * disabled to the instance variable disabledExpr. *

* This is because the value of the unevaluated EL expression has to be kept * separately from the evaluated value, which is stored in the base class. This * is related to the fact that the JSP compiler can choose to reuse different * tag instances if they received the same original attribute values, and the * JSP compiler can choose to not re-call the setter methods, because it can * assume the same values are already set. */ public class ELResetTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("accesskey", ELResetTag.class, null, "setAccesskeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("alt", ELResetTag.class, null, "setAltExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("altKey", ELResetTag.class, null, "setAltKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("bundle", ELResetTag.class, null, "setBundleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("disabled", ELResetTag.class, null, "setDisabledExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onblur", ELResetTag.class, null, "setOnblurExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onchange", ELResetTag.class, null, "setOnchangeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onclick", ELResetTag.class, null, "setOnclickExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("ondblclick", ELResetTag.class, null, "setOndblclickExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onfocus", ELResetTag.class, null, "setOnfocusExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeydown", ELResetTag.class, null, "setOnkeydownExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeypress", ELResetTag.class, null, "setOnkeypressExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeyup", ELResetTag.class, null, "setOnkeyupExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmousedown", ELResetTag.class, null, "setOnmousedownExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmousemove", ELResetTag.class, null, "setOnmousemoveExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseout", ELResetTag.class, null, "setOnmouseoutExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseover", ELResetTag.class, null, "setOnmouseoverExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseup", ELResetTag.class, null, "setOnmouseupExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("property", ELResetTag.class, null, "setPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("style", ELResetTag.class, null, "setStyleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleClass", ELResetTag.class, null, "setStyleClassExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleId", ELResetTag.class, null, "setStyleIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("tabindex", ELResetTag.class, null, "setTabindexExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("title", ELResetTag.class, null, "setTitleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("titleKey", ELResetTag.class, null, "setTitleKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("value", ELResetTag.class, null, "setValueExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } ././@LongLink0000644000175000017500000000014610423140531011316 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELRewriteTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELRewriteTag.jav0000644000175000017500000003276710404045254034077 0ustar arnaudarnaud00000000000000/* * $Id: ELRewriteTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import org.apache.struts.taglib.html.RewriteTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Generate a URL-encoded URI as a string. *

* This class is a subclass of the class * org.apache.struts.taglib.html.RewriteTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 54933 $ */ public class ELRewriteTag extends RewriteTag { /** * Instance variable mapped to "action" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String actionExpr; /** * Instance variable mapped to "module" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String moduleExpr; /** * Instance variable mapped to "anchor" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String anchorExpr; /** * Instance variable mapped to "forward" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String forwardExpr; /** * Instance variable mapped to "href" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String hrefExpr; /** * Instance variable mapped to "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String nameExpr; /** * Instance variable mapped to "page" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String pageExpr; /** * Instance variable mapped to "paramId" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String paramIdExpr; /** * Instance variable mapped to "paramName" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String paramNameExpr; /** * Instance variable mapped to "paramProperty" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String paramPropertyExpr; /** * Instance variable mapped to "paramScope" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String paramScopeExpr; /** * Instance variable mapped to "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String propertyExpr; /** * Instance variable mapped to "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String scopeExpr; /** * Instance variable mapped to "transaction" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String transactionExpr; /** * Instance variable mapped to "useLocalEncoding" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String useLocalEncodingExpr; /** * Getter method for "action" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getActionExpr() { return (actionExpr); } /** * Getter method for "module" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getModuleExpr() { return (moduleExpr); } /** * Getter method for "anchor" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAnchorExpr() { return (anchorExpr); } /** * Getter method for "forward" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getForwardExpr() { return (forwardExpr); } /** * Getter method for "href" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getHrefExpr() { return (hrefExpr); } /** * Getter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getNameExpr() { return (nameExpr); } /** * Getter method for "page" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPageExpr() { return (pageExpr); } /** * Getter method for "paramId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getParamIdExpr() { return (paramIdExpr); } /** * Getter method for "paramName" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getParamNameExpr() { return (paramNameExpr); } /** * Getter method for "paramProperty" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getParamPropertyExpr() { return (paramPropertyExpr); } /** * Getter method for "paramScope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getParamScopeExpr() { return (paramScopeExpr); } /** * Getter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPropertyExpr() { return (propertyExpr); } /** * Getter method for "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getScopeExpr() { return (scopeExpr); } /** * Getter method for "transaction" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTransactionExpr() { return (transactionExpr); } /** * Getter method for "useLocalEncoding" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getUseLocalEncodingExpr() { return (useLocalEncodingExpr); } /** * Setter method for "action" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setActionExpr(String actionExpr) { this.actionExpr = actionExpr; } /** * Setter method for "module" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setModuleExpr(String moduleExpr) { this.moduleExpr = moduleExpr; } /** * Setter method for "anchor" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAnchorExpr(String anchorExpr) { this.anchorExpr = anchorExpr; } /** * Setter method for "forward" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setForwardExpr(String forwardExpr) { this.forwardExpr = forwardExpr; } /** * Setter method for "href" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setHrefExpr(String hrefExpr) { this.hrefExpr = hrefExpr; } /** * Setter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setNameExpr(String nameExpr) { this.nameExpr = nameExpr; } /** * Setter method for "page" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPageExpr(String pageExpr) { this.pageExpr = pageExpr; } /** * Setter method for "paramId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setParamIdExpr(String paramIdExpr) { this.paramIdExpr = paramIdExpr; } /** * Setter method for "paramName" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setParamNameExpr(String paramNameExpr) { this.paramNameExpr = paramNameExpr; } /** * Setter method for "paramProperty" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setParamPropertyExpr(String paramPropertyExpr) { this.paramPropertyExpr = paramPropertyExpr; } /** * Setter method for "paramScope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setParamScopeExpr(String paramScopeExpr) { this.paramScopeExpr = paramScopeExpr; } /** * Setter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPropertyExpr(String propertyExpr) { this.propertyExpr = propertyExpr; } /** * Setter method for "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setScopeExpr(String scopeExpr) { this.scopeExpr = scopeExpr; } /** * Setter method for "transaction" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTransactionExpr(String transactionExpr) { this.transactionExpr = transactionExpr; } /** * Setter method for "useLocalEncoding" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setUseLocalEncodingExpr(String useLocalEncodingExpr) { this.useLocalEncodingExpr = useLocalEncodingExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setActionExpr(null); setModuleExpr(null); setAnchorExpr(null); setForwardExpr(null); setHrefExpr(null); setNameExpr(null); setPageExpr(null); setParamIdExpr(null); setParamNameExpr(null); setParamPropertyExpr(null); setParamScopeExpr(null); setPropertyExpr(null); setScopeExpr(null); setTransactionExpr(null); setUseLocalEncodingExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return(super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; Boolean bool = null; if ((string = EvalHelper.evalString("action", getActionExpr(), this, pageContext)) != null) setAction(string); if ((string = EvalHelper.evalString("module", getModuleExpr(), this, pageContext)) != null) setModule(string); if ((string = EvalHelper.evalString("anchor", getAnchorExpr(), this, pageContext)) != null) setAnchor(string); if ((string = EvalHelper.evalString("forward", getForwardExpr(), this, pageContext)) != null) setForward(string); if ((string = EvalHelper.evalString("href", getHrefExpr(), this, pageContext)) != null) setHref(string); if ((string = EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) setName(string); if ((string = EvalHelper.evalString("page", getPageExpr(), this, pageContext)) != null) setPage(string); if ((string = EvalHelper.evalString("paramId", getParamIdExpr(), this, pageContext)) != null) setParamId(string); if ((string = EvalHelper.evalString("paramName", getParamNameExpr(), this, pageContext)) != null) setParamName(string); if ((string = EvalHelper.evalString("paramProperty", getParamPropertyExpr(), this, pageContext)) != null) setParamProperty(string); if ((string = EvalHelper.evalString("paramScope", getParamScopeExpr(), this, pageContext)) != null) setParamScope(string); if ((string = EvalHelper.evalString("property", getPropertyExpr(), this, pageContext)) != null) setProperty(string); if ((string = EvalHelper.evalString("scope", getScopeExpr(), this, pageContext)) != null) setScope(string); if ((bool = EvalHelper.evalBoolean("transaction", getTransactionExpr(), this, pageContext)) != null) setTransaction(bool.booleanValue()); if ((bool = EvalHelper.evalBoolean("useLocalEncoding", getUseLocalEncodingExpr(), this, pageContext)) != null) setUseLocalEncoding(bool.booleanValue()); } } ././@LongLink0000644000175000017500000000015610423140531011317 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELRewriteTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELRewriteTagBean0000644000175000017500000001220310404045254034065 0ustar arnaudarnaud00000000000000/* * $Id: ELRewriteTagBeanInfo.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.html.ELRewriteTag class. It is * needed to override the default mapping of custom tag attribute names to * class attribute names. *

* This is because the value of the unevaluated EL expression has to be kept * separately from the evaluated value, which is stored in the base class. This * is related to the fact that the JSP compiler can choose to reuse different * tag instances if they received the same original attribute values, and the * JSP compiler can choose to not re-call the setter methods, because it can * assume the same values are already set. */ public class ELRewriteTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("action", ELRewriteTag.class, null, "setActionExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("module", ELRewriteTag.class, null, "setModuleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("anchor", ELRewriteTag.class, null, "setAnchorExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("forward", ELRewriteTag.class, null, "setForwardExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("href", ELRewriteTag.class, null, "setHrefExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("name", ELRewriteTag.class, null, "setNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("page", ELRewriteTag.class, null, "setPageExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("paramId", ELRewriteTag.class, null, "setParamIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("paramName", ELRewriteTag.class, null, "setParamNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("paramProperty", ELRewriteTag.class, null, "setParamPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("paramScope", ELRewriteTag.class, null, "setParamScopeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("property", ELRewriteTag.class, null, "setPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("scope", ELRewriteTag.class, null, "setScopeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("transaction", ELRewriteTag.class, null, "setTransactionExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("useLocalEncoding", ELRewriteTag.class, null, "setUseLocalEncodingExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } ././@LongLink0000644000175000017500000000014510423140531011315 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELSelectTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELSelectTag.java0000644000175000017500000006667410404045254034042 0ustar arnaudarnaud00000000000000/* * $Id: ELSelectTag.java 373801 2006-01-31 12:18:48Z niallp $ * * Copyright 1999-2006 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import org.apache.struts.taglib.html.SelectTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Custom tag that represents an HTML select element, associated with a * bean property specified by our attributes. This tag must be nested * inside a form tag. *

* This class is a subclass of the class * org.apache.struts.taglib.html.SelectTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 373801 $ */ public class ELSelectTag extends SelectTag { /** * Instance variable mapped to "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String altExpr; /** * Instance variable mapped to "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String altKeyExpr; /** * Instance variable mapped to "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String bundleExpr; /** * Instance variable mapped to "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String disabledExpr; /** * Instance variable mapped to "errorKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String errorKeyExpr; /** * Instance variable mapped to "errorStyle" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String errorStyleExpr; /** * Instance variable mapped to "errorStyleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String errorStyleClassExpr; /** * Instance variable mapped to "errorStyleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String errorStyleIdExpr; /** * Instance variable mapped to "indexed" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String indexedExpr; /** * Instance variable mapped to "multiple" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String multipleExpr; /** * Instance variable mapped to "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String nameExpr; /** * Instance variable mapped to "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onblurExpr; /** * Instance variable mapped to "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onchangeExpr; /** * Instance variable mapped to "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onclickExpr; /** * Instance variable mapped to "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String ondblclickExpr; /** * Instance variable mapped to "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onfocusExpr; /** * Instance variable mapped to "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeydownExpr; /** * Instance variable mapped to "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeypressExpr; /** * Instance variable mapped to "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeyupExpr; /** * Instance variable mapped to "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmousedownExpr; /** * Instance variable mapped to "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmousemoveExpr; /** * Instance variable mapped to "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseoutExpr; /** * Instance variable mapped to "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseoverExpr; /** * Instance variable mapped to "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseupExpr; /** * Instance variable mapped to "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String propertyExpr; /** * Instance variable mapped to "size" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String sizeExpr; /** * Instance variable mapped to "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleExpr; /** * Instance variable mapped to "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleClassExpr; /** * Instance variable mapped to "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleIdExpr; /** * Instance variable mapped to "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String tabindexExpr; /** * Instance variable mapped to "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String titleExpr; /** * Instance variable mapped to "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String titleKeyExpr; /** * Instance variable mapped to "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String valueExpr; /** * Getter method for "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAltExpr() { return (altExpr); } /** * Getter method for "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAltKeyExpr() { return (altKeyExpr); } /** * Getter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getBundleExpr() { return (bundleExpr); } /** * Getter method for "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getDisabledExpr() { return (disabledExpr); } /** * Getter method for "errorKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getErrorKeyExpr() { return (errorKeyExpr); } /** * Getter method for "errorStyle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getErrorStyleExpr() { return (errorStyleExpr); } /** * Getter method for "errorStyleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getErrorStyleClassExpr() { return (errorStyleClassExpr); } /** * Getter method for "errorStyleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getErrorStyleIdExpr() { return (errorStyleIdExpr); } /** * Getter method for "indexed" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getIndexedExpr() { return (indexedExpr); } /** * Getter method for "multiple" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getMultipleExpr() { return (multipleExpr); } /** * Getter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getNameExpr() { return (nameExpr); } /** * Getter method for "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnblurExpr() { return (onblurExpr); } /** * Getter method for "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnchangeExpr() { return (onchangeExpr); } /** * Getter method for "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnclickExpr() { return (onclickExpr); } /** * Getter method for "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOndblclickExpr() { return (ondblclickExpr); } /** * Getter method for "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnfocusExpr() { return (onfocusExpr); } /** * Getter method for "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeydownExpr() { return (onkeydownExpr); } /** * Getter method for "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeypressExpr() { return (onkeypressExpr); } /** * Getter method for "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeyupExpr() { return (onkeyupExpr); } /** * Getter method for "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmousedownExpr() { return (onmousedownExpr); } /** * Getter method for "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmousemoveExpr() { return (onmousemoveExpr); } /** * Getter method for "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseoutExpr() { return (onmouseoutExpr); } /** * Getter method for "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseoverExpr() { return (onmouseoverExpr); } /** * Getter method for "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseupExpr() { return (onmouseupExpr); } /** * Getter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPropertyExpr() { return (propertyExpr); } /** * Getter method for "size" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getSizeExpr() { return (sizeExpr); } /** * Getter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleExpr() { return (styleExpr); } /** * Getter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleClassExpr() { return (styleClassExpr); } /** * Getter method for "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleIdExpr() { return (styleIdExpr); } /** * Getter method for "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTabindexExpr() { return (tabindexExpr); } /** * Getter method for "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTitleExpr() { return (titleExpr); } /** * Getter method for "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTitleKeyExpr() { return (titleKeyExpr); } /** * Getter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getValueExpr() { return (valueExpr); } /** * Setter method for "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAltExpr(String altExpr) { this.altExpr = altExpr; } /** * Setter method for "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAltKeyExpr(String altKeyExpr) { this.altKeyExpr = altKeyExpr; } /** * Setter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setBundleExpr(String bundleExpr) { this.bundleExpr = bundleExpr; } /** * Setter method for "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setDisabledExpr(String disabledExpr) { this.disabledExpr = disabledExpr; } /** * Setter method for "errorKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setErrorKeyExpr(String errorKeyExpr) { this.errorKeyExpr = errorKeyExpr; } /** * Setter method for "errorStyle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setErrorStyleExpr(String errorStyleExpr) { this.errorStyleExpr = errorStyleExpr; } /** * Setter method for "errorStyleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setErrorStyleClassExpr(String errorStyleClassExpr) { this.errorStyleClassExpr = errorStyleClassExpr; } /** * Setter method for "errorStyleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setErrorStyleIdExpr(String errorStyleIdExpr) { this.errorStyleIdExpr = errorStyleIdExpr; } /** * Setter method for "indexed" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setIndexedExpr(String indexedExpr) { this.indexedExpr = indexedExpr; } /** * Setter method for "multiple" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setMultipleExpr(String multipleExpr) { this.multipleExpr = multipleExpr; } /** * Setter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setNameExpr(String nameExpr) { this.nameExpr = nameExpr; } /** * Setter method for "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnblurExpr(String onblurExpr) { this.onblurExpr = onblurExpr; } /** * Setter method for "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnchangeExpr(String onchangeExpr) { this.onchangeExpr = onchangeExpr; } /** * Setter method for "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnclickExpr(String onclickExpr) { this.onclickExpr = onclickExpr; } /** * Setter method for "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOndblclickExpr(String ondblclickExpr) { this.ondblclickExpr = ondblclickExpr; } /** * Setter method for "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnfocusExpr(String onfocusExpr) { this.onfocusExpr = onfocusExpr; } /** * Setter method for "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeydownExpr(String onkeydownExpr) { this.onkeydownExpr = onkeydownExpr; } /** * Setter method for "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeypressExpr(String onkeypressExpr) { this.onkeypressExpr = onkeypressExpr; } /** * Setter method for "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeyupExpr(String onkeyupExpr) { this.onkeyupExpr = onkeyupExpr; } /** * Setter method for "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmousedownExpr(String onmousedownExpr) { this.onmousedownExpr = onmousedownExpr; } /** * Setter method for "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmousemoveExpr(String onmousemoveExpr) { this.onmousemoveExpr = onmousemoveExpr; } /** * Setter method for "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseoutExpr(String onmouseoutExpr) { this.onmouseoutExpr = onmouseoutExpr; } /** * Setter method for "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseoverExpr(String onmouseoverExpr) { this.onmouseoverExpr = onmouseoverExpr; } /** * Setter method for "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseupExpr(String onmouseupExpr) { this.onmouseupExpr = onmouseupExpr; } /** * Setter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPropertyExpr(String propertyExpr) { this.propertyExpr = propertyExpr; } /** * Setter method for "size" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setSizeExpr(String sizeExpr) { this.sizeExpr = sizeExpr; } /** * Setter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleExpr(String styleExpr) { this.styleExpr = styleExpr; } /** * Setter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleClassExpr(String styleClassExpr) { this.styleClassExpr = styleClassExpr; } /** * Setter method for "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleIdExpr(String styleIdExpr) { this.styleIdExpr = styleIdExpr; } /** * Setter method for "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTabindexExpr(String tabindexExpr) { this.tabindexExpr = tabindexExpr; } /** * Setter method for "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTitleExpr(String titleExpr) { this.titleExpr = titleExpr; } /** * Setter method for "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTitleKeyExpr(String titleKeyExpr) { this.titleKeyExpr = titleKeyExpr; } /** * Setter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setValueExpr(String valueExpr) { this.valueExpr = valueExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setAltExpr(null); setAltKeyExpr(null); setBundleExpr(null); setDisabledExpr(null); setErrorKeyExpr(null); setErrorStyleExpr(null); setErrorStyleClassExpr(null); setErrorStyleIdExpr(null); setIndexedExpr(null); setMultipleExpr(null); setNameExpr(null); setOnblurExpr(null); setOnchangeExpr(null); setOnclickExpr(null); setOndblclickExpr(null); setOnfocusExpr(null); setOnkeydownExpr(null); setOnkeypressExpr(null); setOnkeyupExpr(null); setOnmousedownExpr(null); setOnmousemoveExpr(null); setOnmouseoutExpr(null); setOnmouseoverExpr(null); setOnmouseupExpr(null); setPropertyExpr(null); setSizeExpr(null); setStyleExpr(null); setStyleClassExpr(null); setStyleIdExpr(null); setTabindexExpr(null); setTitleExpr(null); setTitleKeyExpr(null); setValueExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return(super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; Boolean bool = null; if ((string = EvalHelper.evalString("alt", getAltExpr(), this, pageContext)) != null) setAlt(string); if ((string = EvalHelper.evalString("altKey", getAltKeyExpr(), this, pageContext)) != null) setAltKey(string); if ((string = EvalHelper.evalString("bundle", getBundleExpr(), this, pageContext)) != null) setBundle(string); if ((bool = EvalHelper.evalBoolean("disabled", getDisabledExpr(), this, pageContext)) != null) setDisabled(bool.booleanValue()); if ((string = EvalHelper.evalString("errorKey", getErrorKeyExpr(), this, pageContext)) != null) setErrorKey(string); if ((string = EvalHelper.evalString("errorStyle", getErrorStyleExpr(), this, pageContext)) != null) setErrorStyle(string); if ((string = EvalHelper.evalString("errorStyleClass", getErrorStyleClassExpr(), this, pageContext)) != null) setErrorStyleClass(string); if ((string = EvalHelper.evalString("errorStyleId", getErrorStyleIdExpr(), this, pageContext)) != null) setErrorStyleId(string); if ((bool = EvalHelper.evalBoolean("indexed", getIndexedExpr(), this, pageContext)) != null) setIndexed(bool.booleanValue()); if ((string = EvalHelper.evalString("multiple", getMultipleExpr(), this, pageContext)) != null) setMultiple(string); if ((string = EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) setName(string); if ((string = EvalHelper.evalString("onblur", getOnblurExpr(), this, pageContext)) != null) setOnblur(string); if ((string = EvalHelper.evalString("onchange", getOnchangeExpr(), this, pageContext)) != null) setOnchange(string); if ((string = EvalHelper.evalString("onclick", getOnclickExpr(), this, pageContext)) != null) setOnclick(string); if ((string = EvalHelper.evalString("ondblclick", getOndblclickExpr(), this, pageContext)) != null) setOndblclick(string); if ((string = EvalHelper.evalString("onfocus", getOnfocusExpr(), this, pageContext)) != null) setOnfocus(string); if ((string = EvalHelper.evalString("onkeydown", getOnkeydownExpr(), this, pageContext)) != null) setOnkeydown(string); if ((string = EvalHelper.evalString("onkeypress", getOnkeypressExpr(), this, pageContext)) != null) setOnkeypress(string); if ((string = EvalHelper.evalString("onkeyup", getOnkeyupExpr(), this, pageContext)) != null) setOnkeyup(string); if ((string = EvalHelper.evalString("onmousedown", getOnmousedownExpr(), this, pageContext)) != null) setOnmousedown(string); if ((string = EvalHelper.evalString("onmousemove", getOnmousemoveExpr(), this, pageContext)) != null) setOnmousemove(string); if ((string = EvalHelper.evalString("onmouseout", getOnmouseoutExpr(), this, pageContext)) != null) setOnmouseout(string); if ((string = EvalHelper.evalString("onmouseover", getOnmouseoverExpr(), this, pageContext)) != null) setOnmouseover(string); if ((string = EvalHelper.evalString("onmouseup", getOnmouseupExpr(), this, pageContext)) != null) setOnmouseup(string); if ((string = EvalHelper.evalString("property", getPropertyExpr(), this, pageContext)) != null) setProperty(string); if ((string = EvalHelper.evalString("size", getSizeExpr(), this, pageContext)) != null) setSize(string); if ((string = EvalHelper.evalString("style", getStyleExpr(), this, pageContext)) != null) setStyle(string); if ((string = EvalHelper.evalString("styleClass", getStyleClassExpr(), this, pageContext)) != null) setStyleClass(string); if ((string = EvalHelper.evalString("styleId", getStyleIdExpr(), this, pageContext)) != null) setStyleId(string); if ((string = EvalHelper.evalString("tabindex", getTabindexExpr(), this, pageContext)) != null) setTabindex(string); if ((string = EvalHelper.evalString("title", getTitleExpr(), this, pageContext)) != null) setTitle(string); if ((string = EvalHelper.evalString("titleKey", getTitleKeyExpr(), this, pageContext)) != null) setTitleKey(string); if ((string = EvalHelper.evalString("value", getValueExpr(), this, pageContext)) != null) setValue(string); } } ././@LongLink0000644000175000017500000000015510423140531011316 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELSelectTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELSelectTagBeanI0000644000175000017500000002173510404045254034006 0ustar arnaudarnaud00000000000000/* * $Id: ELSelectTagBeanInfo.java 123585 2004-12-29 00:43:33Z martinc $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.html.ELSelectTag class. It is needed * to override the default mapping of custom tag attribute names to class * attribute names. *

* This is because the value of the unevaluated EL expression has to be kept * separately from the evaluated value, which is stored in the base class. This * is related to the fact that the JSP compiler can choose to reuse different * tag instances if they received the same original attribute values, and the * JSP compiler can choose to not re-call the setter methods, because it can * assume the same values are already set. */ public class ELSelectTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("alt", ELSelectTag.class, null, "setAltExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("altKey", ELSelectTag.class, null, "setAltKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("bundle", ELSelectTag.class, null, "setBundleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("disabled", ELSelectTag.class, null, "setDisabledExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("errorKey", ELSelectTag.class, null, "setErrorKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("errorStyle", ELSelectTag.class, null, "setErrorStyleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("errorStyleClass", ELSelectTag.class, null, "setErrorStyleClassExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("errorStyleId", ELSelectTag.class, null, "setErrorStyleIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("indexed", ELSelectTag.class, null, "setIndexedExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("multiple", ELSelectTag.class, null, "setMultipleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("name", ELSelectTag.class, null, "setNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onblur", ELSelectTag.class, null, "setOnblurExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onchange", ELSelectTag.class, null, "setOnchangeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onclick", ELSelectTag.class, null, "setOnclickExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("ondblclick", ELSelectTag.class, null, "setOndblclickExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onfocus", ELSelectTag.class, null, "setOnfocusExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeydown", ELSelectTag.class, null, "setOnkeydownExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeypress", ELSelectTag.class, null, "setOnkeypressExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeyup", ELSelectTag.class, null, "setOnkeyupExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmousedown", ELSelectTag.class, null, "setOnmousedownExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmousemove", ELSelectTag.class, null, "setOnmousemoveExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseout", ELSelectTag.class, null, "setOnmouseoutExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseover", ELSelectTag.class, null, "setOnmouseoverExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseup", ELSelectTag.class, null, "setOnmouseupExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("property", ELSelectTag.class, null, "setPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("size", ELSelectTag.class, null, "setSizeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("style", ELSelectTag.class, null, "setStyleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleClass", ELSelectTag.class, null, "setStyleClassExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleId", ELSelectTag.class, null, "setStyleIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("tabindex", ELSelectTag.class, null, "setTabindexExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("title", ELSelectTag.class, null, "setTitleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("titleKey", ELSelectTag.class, null, "setTitleKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("value", ELSelectTag.class, null, "setValueExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } ././@LongLink0000644000175000017500000000014510423140531011315 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELSubmitTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELSubmitTag.java0000644000175000017500000005524510404045254034056 0ustar arnaudarnaud00000000000000/* * $Id: ELSubmitTag.java 123585 2004-12-29 00:43:33Z martinc $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import org.apache.struts.taglib.html.SubmitTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Tag for input fields of type "submit". *

* This class is a subclass of the class * org.apache.struts.taglib.html.SubmitTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 123585 $ */ public class ELSubmitTag extends SubmitTag { /** * Instance variable mapped to "accessKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String accessKeyExpr; /** * Instance variable mapped to "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String altExpr; /** * Instance variable mapped to "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String altKeyExpr; /** * Instance variable mapped to "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String bundleExpr; /** * Instance variable mapped to "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String disabledExpr; /** * Instance variable mapped to "indexed" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String indexedExpr; /** * Instance variable mapped to "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onblurExpr; /** * Instance variable mapped to "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onchangeExpr; /** * Instance variable mapped to "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onclickExpr; /** * Instance variable mapped to "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String ondblclickExpr; /** * Instance variable mapped to "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onfocusExpr; /** * Instance variable mapped to "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeydownExpr; /** * Instance variable mapped to "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeypressExpr; /** * Instance variable mapped to "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeyupExpr; /** * Instance variable mapped to "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmousedownExpr; /** * Instance variable mapped to "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmousemoveExpr; /** * Instance variable mapped to "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseoutExpr; /** * Instance variable mapped to "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseoverExpr; /** * Instance variable mapped to "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseupExpr; /** * Instance variable mapped to "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String propertyExpr; /** * Instance variable mapped to "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleExpr; /** * Instance variable mapped to "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleClassExpr; /** * Instance variable mapped to "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleIdExpr; /** * Instance variable mapped to "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String tabindexExpr; /** * Instance variable mapped to "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String titleExpr; /** * Instance variable mapped to "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String titleKeyExpr; /** * Instance variable mapped to "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String valueExpr; /** * Getter method for "accessKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAccesskeyExpr() { return (accessKeyExpr); } /** * Getter method for "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAltExpr() { return (altExpr); } /** * Getter method for "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAltKeyExpr() { return (altKeyExpr); } /** * Getter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getBundleExpr() { return (bundleExpr); } /** * Getter method for "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getDisabledExpr() { return (disabledExpr); } /** * Getter method for "indexed" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getIndexedExpr() { return (indexedExpr); } /** * Getter method for "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnblurExpr() { return (onblurExpr); } /** * Getter method for "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnchangeExpr() { return (onchangeExpr); } /** * Getter method for "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnclickExpr() { return (onclickExpr); } /** * Getter method for "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOndblclickExpr() { return (ondblclickExpr); } /** * Getter method for "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnfocusExpr() { return (onfocusExpr); } /** * Getter method for "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeydownExpr() { return (onkeydownExpr); } /** * Getter method for "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeypressExpr() { return (onkeypressExpr); } /** * Getter method for "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeyupExpr() { return (onkeyupExpr); } /** * Getter method for "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmousedownExpr() { return (onmousedownExpr); } /** * Getter method for "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmousemoveExpr() { return (onmousemoveExpr); } /** * Getter method for "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseoutExpr() { return (onmouseoutExpr); } /** * Getter method for "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseoverExpr() { return (onmouseoverExpr); } /** * Getter method for "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseupExpr() { return (onmouseupExpr); } /** * Getter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPropertyExpr() { return (propertyExpr); } /** * Getter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleExpr() { return (styleExpr); } /** * Getter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleClassExpr() { return (styleClassExpr); } /** * Getter method for "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleIdExpr() { return (styleIdExpr); } /** * Getter method for "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTabindexExpr() { return (tabindexExpr); } /** * Getter method for "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTitleExpr() { return (titleExpr); } /** * Getter method for "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTitleKeyExpr() { return (titleKeyExpr); } /** * Getter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getValueExpr() { return (valueExpr); } /** * Setter method for "accessKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAccesskeyExpr(String accessKeyExpr) { this.accessKeyExpr = accessKeyExpr; } /** * Setter method for "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAltExpr(String altExpr) { this.altExpr = altExpr; } /** * Setter method for "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAltKeyExpr(String altKeyExpr) { this.altKeyExpr = altKeyExpr; } /** * Setter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setBundleExpr(String bundleExpr) { this.bundleExpr = bundleExpr; } /** * Setter method for "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setDisabledExpr(String disabledExpr) { this.disabledExpr = disabledExpr; } /** * Setter method for "indexed" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setIndexedExpr(String indexedExpr) { this.indexedExpr = indexedExpr; } /** * Setter method for "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnblurExpr(String onblurExpr) { this.onblurExpr = onblurExpr; } /** * Setter method for "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnchangeExpr(String onchangeExpr) { this.onchangeExpr = onchangeExpr; } /** * Setter method for "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnclickExpr(String onclickExpr) { this.onclickExpr = onclickExpr; } /** * Setter method for "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOndblclickExpr(String ondblclickExpr) { this.ondblclickExpr = ondblclickExpr; } /** * Setter method for "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnfocusExpr(String onfocusExpr) { this.onfocusExpr = onfocusExpr; } /** * Setter method for "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeydownExpr(String onkeydownExpr) { this.onkeydownExpr = onkeydownExpr; } /** * Setter method for "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeypressExpr(String onkeypressExpr) { this.onkeypressExpr = onkeypressExpr; } /** * Setter method for "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeyupExpr(String onkeyupExpr) { this.onkeyupExpr = onkeyupExpr; } /** * Setter method for "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmousedownExpr(String onmousedownExpr) { this.onmousedownExpr = onmousedownExpr; } /** * Setter method for "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmousemoveExpr(String onmousemoveExpr) { this.onmousemoveExpr = onmousemoveExpr; } /** * Setter method for "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseoutExpr(String onmouseoutExpr) { this.onmouseoutExpr = onmouseoutExpr; } /** * Setter method for "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseoverExpr(String onmouseoverExpr) { this.onmouseoverExpr = onmouseoverExpr; } /** * Setter method for "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseupExpr(String onmouseupExpr) { this.onmouseupExpr = onmouseupExpr; } /** * Setter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPropertyExpr(String propertyExpr) { this.propertyExpr = propertyExpr; } /** * Setter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleExpr(String styleExpr) { this.styleExpr = styleExpr; } /** * Setter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleClassExpr(String styleClassExpr) { this.styleClassExpr = styleClassExpr; } /** * Setter method for "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleIdExpr(String styleIdExpr) { this.styleIdExpr = styleIdExpr; } /** * Setter method for "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTabindexExpr(String tabindexExpr) { this.tabindexExpr = tabindexExpr; } /** * Setter method for "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTitleExpr(String titleExpr) { this.titleExpr = titleExpr; } /** * Setter method for "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTitleKeyExpr(String titleKeyExpr) { this.titleKeyExpr = titleKeyExpr; } /** * Setter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setValueExpr(String valueExpr) { this.valueExpr = valueExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setAccesskeyExpr(null); setAltExpr(null); setAltKeyExpr(null); setBundleExpr(null); setDisabledExpr(null); setIndexedExpr(null); setOnblurExpr(null); setOnchangeExpr(null); setOnclickExpr(null); setOndblclickExpr(null); setOnfocusExpr(null); setOnkeydownExpr(null); setOnkeypressExpr(null); setOnkeyupExpr(null); setOnmousedownExpr(null); setOnmousemoveExpr(null); setOnmouseoutExpr(null); setOnmouseoverExpr(null); setOnmouseupExpr(null); setPropertyExpr(null); setStyleExpr(null); setStyleClassExpr(null); setStyleIdExpr(null); setTabindexExpr(null); setTitleExpr(null); setTitleKeyExpr(null); setValueExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return (super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; Boolean bool = null; if ((string = EvalHelper.evalString("accessKey", getAccesskeyExpr(), this, pageContext)) != null) setAccesskey(string); if ((string = EvalHelper.evalString("alt", getAltExpr(), this, pageContext)) != null) setAlt(string); if ((string = EvalHelper.evalString("altKey", getAltKeyExpr(), this, pageContext)) != null) setAltKey(string); if ((string = EvalHelper.evalString("bundle", getBundleExpr(), this, pageContext)) != null) setBundle(string); if ((bool = EvalHelper.evalBoolean("disabled", getDisabledExpr(), this, pageContext)) != null) setDisabled(bool.booleanValue()); if ((bool = EvalHelper.evalBoolean("indexed", getIndexedExpr(), this, pageContext)) != null) setIndexed(bool.booleanValue()); if ((string = EvalHelper.evalString("onblur", getOnblurExpr(), this, pageContext)) != null) setOnblur(string); if ((string = EvalHelper.evalString("onchange", getOnchangeExpr(), this, pageContext)) != null) setOnchange(string); if ((string = EvalHelper.evalString("onclick", getOnclickExpr(), this, pageContext)) != null) setOnclick(string); if ((string = EvalHelper.evalString("ondblclick", getOndblclickExpr(), this, pageContext)) != null) setOndblclick(string); if ((string = EvalHelper.evalString("onfocus", getOnfocusExpr(), this, pageContext)) != null) setOnfocus(string); if ((string = EvalHelper.evalString("onkeydown", getOnkeydownExpr(), this, pageContext)) != null) setOnkeydown(string); if ((string = EvalHelper.evalString("onkeypress", getOnkeypressExpr(), this, pageContext)) != null) setOnkeypress(string); if ((string = EvalHelper.evalString("onkeyup", getOnkeyupExpr(), this, pageContext)) != null) setOnkeyup(string); if ((string = EvalHelper.evalString("onmousedown", getOnmousedownExpr(), this, pageContext)) != null) setOnmousedown(string); if ((string = EvalHelper.evalString("onmousemove", getOnmousemoveExpr(), this, pageContext)) != null) setOnmousemove(string); if ((string = EvalHelper.evalString("onmouseout", getOnmouseoutExpr(), this, pageContext)) != null) setOnmouseout(string); if ((string = EvalHelper.evalString("onmouseover", getOnmouseoverExpr(), this, pageContext)) != null) setOnmouseover(string); if ((string = EvalHelper.evalString("onmouseup", getOnmouseupExpr(), this, pageContext)) != null) setOnmouseup(string); if ((string = EvalHelper.evalString("property", getPropertyExpr(), this, pageContext)) != null) setProperty(string); if ((string = EvalHelper.evalString("style", getStyleExpr(), this, pageContext)) != null) setStyle(string); if ((string = EvalHelper.evalString("styleClass", getStyleClassExpr(), this, pageContext)) != null) setStyleClass(string); if ((string = EvalHelper.evalString("styleId", getStyleIdExpr(), this, pageContext)) != null) setStyleId(string); if ((string = EvalHelper.evalString("tabindex", getTabindexExpr(), this, pageContext)) != null) setTabindex(string); if ((string = EvalHelper.evalString("title", getTitleExpr(), this, pageContext)) != null) setTitle(string); if ((string = EvalHelper.evalString("titleKey", getTitleKeyExpr(), this, pageContext)) != null) setTitleKey(string); if ((string = EvalHelper.evalString("value", getValueExpr(), this, pageContext)) != null) setValue(string); } } ././@LongLink0000644000175000017500000000015510423140531011316 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELSubmitTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELSubmitTagBeanI0000644000175000017500000001726310404045252034031 0ustar arnaudarnaud00000000000000/* * $Id: ELSubmitTagBeanInfo.java 123585 2004-12-29 00:43:33Z martinc $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.html.ELSubmitTag class. It is needed * to override the default mapping of custom tag attribute names to class * attribute names. *

* This is because the value of the unevaluated EL expression has to be kept * separately from the evaluated value, which is stored in the base class. This * is related to the fact that the JSP compiler can choose to reuse different * tag instances if they received the same original attribute values, and the * JSP compiler can choose to not re-call the setter methods, because it can * assume the same values are already set. */ public class ELSubmitTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("accesskey", ELSubmitTag.class, null, "setAccesskeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("alt", ELSubmitTag.class, null, "setAltExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("altKey", ELSubmitTag.class, null, "setAltKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("bundle", ELSubmitTag.class, null, "setBundleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("disabled", ELSubmitTag.class, null, "setDisabledExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("indexed", ELSubmitTag.class, null, "setIndexedExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onblur", ELSubmitTag.class, null, "setOnblurExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onchange", ELSubmitTag.class, null, "setOnchangeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onclick", ELSubmitTag.class, null, "setOnclickExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("ondblclick", ELSubmitTag.class, null, "setOndblclickExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onfocus", ELSubmitTag.class, null, "setOnfocusExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeydown", ELSubmitTag.class, null, "setOnkeydownExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeypress", ELSubmitTag.class, null, "setOnkeypressExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeyup", ELSubmitTag.class, null, "setOnkeyupExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmousedown", ELSubmitTag.class, null, "setOnmousedownExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmousemove", ELSubmitTag.class, null, "setOnmousemoveExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseout", ELSubmitTag.class, null, "setOnmouseoutExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseover", ELSubmitTag.class, null, "setOnmouseoverExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseup", ELSubmitTag.class, null, "setOnmouseupExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("property", ELSubmitTag.class, null, "setPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("style", ELSubmitTag.class, null, "setStyleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleClass", ELSubmitTag.class, null, "setStyleClassExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleId", ELSubmitTag.class, null, "setStyleIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("tabindex", ELSubmitTag.class, null, "setTabindexExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("title", ELSubmitTag.class, null, "setTitleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("titleKey", ELSubmitTag.class, null, "setTitleKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("value", ELSubmitTag.class, null, "setValueExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELTextTag.java0000644000175000017500000007160110404045252033527 0ustar arnaudarnaud00000000000000/* * $Id: ELTextTag.java 373801 2006-01-31 12:18:48Z niallp $ * * Copyright 1999-2006 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import org.apache.struts.taglib.html.TextTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Custom tag for input fields of type "text". *

* This class is a subclass of the class * org.apache.struts.taglib.html.TextTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 373801 $ */ public class ELTextTag extends TextTag { /** * Instance variable mapped to "accesskey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String accesskeyExpr; /** * Instance variable mapped to "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String altExpr; /** * Instance variable mapped to "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String altKeyExpr; /** * Instance variable mapped to "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String bundleExpr; /** * Instance variable mapped to "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String disabledExpr; /** * Instance variable mapped to "errorKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String errorKeyExpr; /** * Instance variable mapped to "errorStyle" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String errorStyleExpr; /** * Instance variable mapped to "errorStyleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String errorStyleClassExpr; /** * Instance variable mapped to "errorStyleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String errorStyleIdExpr; /** * Instance variable mapped to "indexed" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String indexedExpr; /** * Instance variable mapped to "maxlength" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String maxlengthExpr; /** * Instance variable mapped to "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String nameExpr; /** * Instance variable mapped to "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onblurExpr; /** * Instance variable mapped to "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onchangeExpr; /** * Instance variable mapped to "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onclickExpr; /** * Instance variable mapped to "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String ondblclickExpr; /** * Instance variable mapped to "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onfocusExpr; /** * Instance variable mapped to "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeydownExpr; /** * Instance variable mapped to "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeypressExpr; /** * Instance variable mapped to "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeyupExpr; /** * Instance variable mapped to "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmousedownExpr; /** * Instance variable mapped to "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmousemoveExpr; /** * Instance variable mapped to "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseoutExpr; /** * Instance variable mapped to "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseoverExpr; /** * Instance variable mapped to "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseupExpr; /** * Instance variable mapped to "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String propertyExpr; /** * Instance variable mapped to "readonly" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String readonlyExpr; /** * Instance variable mapped to "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleExpr; /** * Instance variable mapped to "size" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String sizeExpr; /** * Instance variable mapped to "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleClassExpr; /** * Instance variable mapped to "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleIdExpr; /** * Instance variable mapped to "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String tabindexExpr; /** * Instance variable mapped to "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String titleExpr; /** * Instance variable mapped to "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String titleKeyExpr; /** * Instance variable mapped to "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String valueExpr; /** * Getter method for "accesskey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAccesskeyExpr() { return (accesskeyExpr); } /** * Getter method for "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAltExpr() { return (altExpr); } /** * Getter method for "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAltKeyExpr() { return (altKeyExpr); } /** * Getter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getBundleExpr() { return (bundleExpr); } /** * Getter method for "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getDisabledExpr() { return (disabledExpr); } /** * Getter method for "errorKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getErrorKeyExpr() { return (errorKeyExpr); } /** * Getter method for "errorStyle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getErrorStyleExpr() { return (errorStyleExpr); } /** * Getter method for "errorStyleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getErrorStyleClassExpr() { return (errorStyleClassExpr); } /** * Getter method for "errorStyleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getErrorStyleIdExpr() { return (errorStyleIdExpr); } /** * Getter method for "indexed" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getIndexedExpr() { return (indexedExpr); } /** * Getter method for "maxlength" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getMaxlengthExpr() { return (maxlengthExpr); } /** * Getter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getNameExpr() { return (nameExpr); } /** * Getter method for "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnblurExpr() { return (onblurExpr); } /** * Getter method for "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnchangeExpr() { return (onchangeExpr); } /** * Getter method for "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnclickExpr() { return (onclickExpr); } /** * Getter method for "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOndblclickExpr() { return (ondblclickExpr); } /** * Getter method for "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnfocusExpr() { return (onfocusExpr); } /** * Getter method for "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeydownExpr() { return (onkeydownExpr); } /** * Getter method for "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeypressExpr() { return (onkeypressExpr); } /** * Getter method for "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeyupExpr() { return (onkeyupExpr); } /** * Getter method for "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmousedownExpr() { return (onmousedownExpr); } /** * Getter method for "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmousemoveExpr() { return (onmousemoveExpr); } /** * Getter method for "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseoutExpr() { return (onmouseoutExpr); } /** * Getter method for "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseoverExpr() { return (onmouseoverExpr); } /** * Getter method for "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseupExpr() { return (onmouseupExpr); } /** * Getter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPropertyExpr() { return (propertyExpr); } /** * Getter method for "readonly" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getReadonlyExpr() { return (readonlyExpr); } /** * Getter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleExpr() { return (styleExpr); } /** * Getter method for "size" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getSizeExpr() { return (sizeExpr); } /** * Getter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleClassExpr() { return (styleClassExpr); } /** * Getter method for "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleIdExpr() { return (styleIdExpr); } /** * Getter method for "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTabindexExpr() { return (tabindexExpr); } /** * Getter method for "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTitleExpr() { return (titleExpr); } /** * Getter method for "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTitleKeyExpr() { return (titleKeyExpr); } /** * Getter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getValueExpr() { return (valueExpr); } /** * Setter method for "accesskey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAccesskeyExpr(String accesskeyExpr) { this.accesskeyExpr = accesskeyExpr; } /** * Setter method for "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAltExpr(String altExpr) { this.altExpr = altExpr; } /** * Setter method for "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAltKeyExpr(String altKeyExpr) { this.altKeyExpr = altKeyExpr; } /** * Setter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setBundleExpr(String bundleExpr) { this.bundleExpr = bundleExpr; } /** * Setter method for "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setDisabledExpr(String disabledExpr) { this.disabledExpr = disabledExpr; } /** * Setter method for "errorKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setErrorKeyExpr(String errorKeyExpr) { this.errorKeyExpr = errorKeyExpr; } /** * Setter method for "errorStyle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setErrorStyleExpr(String errorStyleExpr) { this.errorStyleExpr = errorStyleExpr; } /** * Setter method for "errorStyleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setErrorStyleClassExpr(String errorStyleClassExpr) { this.errorStyleClassExpr = errorStyleClassExpr; } /** * Setter method for "errorStyleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setErrorStyleIdExpr(String errorStyleIdExpr) { this.errorStyleIdExpr = errorStyleIdExpr; } /** * Setter method for "indexed" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setIndexedExpr(String indexedExpr) { this.indexedExpr = indexedExpr; } /** * Setter method for "maxlength" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setMaxlengthExpr(String maxlengthExpr) { this.maxlengthExpr = maxlengthExpr; } /** * Setter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setNameExpr(String nameExpr) { this.nameExpr = nameExpr; } /** * Setter method for "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnblurExpr(String onblurExpr) { this.onblurExpr = onblurExpr; } /** * Setter method for "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnchangeExpr(String onchangeExpr) { this.onchangeExpr = onchangeExpr; } /** * Setter method for "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnclickExpr(String onclickExpr) { this.onclickExpr = onclickExpr; } /** * Setter method for "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOndblclickExpr(String ondblclickExpr) { this.ondblclickExpr = ondblclickExpr; } /** * Setter method for "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnfocusExpr(String onfocusExpr) { this.onfocusExpr = onfocusExpr; } /** * Setter method for "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeydownExpr(String onkeydownExpr) { this.onkeydownExpr = onkeydownExpr; } /** * Setter method for "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeypressExpr(String onkeypressExpr) { this.onkeypressExpr = onkeypressExpr; } /** * Setter method for "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeyupExpr(String onkeyupExpr) { this.onkeyupExpr = onkeyupExpr; } /** * Setter method for "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmousedownExpr(String onmousedownExpr) { this.onmousedownExpr = onmousedownExpr; } /** * Setter method for "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmousemoveExpr(String onmousemoveExpr) { this.onmousemoveExpr = onmousemoveExpr; } /** * Setter method for "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseoutExpr(String onmouseoutExpr) { this.onmouseoutExpr = onmouseoutExpr; } /** * Setter method for "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseoverExpr(String onmouseoverExpr) { this.onmouseoverExpr = onmouseoverExpr; } /** * Setter method for "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseupExpr(String onmouseupExpr) { this.onmouseupExpr = onmouseupExpr; } /** * Setter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPropertyExpr(String propertyExpr) { this.propertyExpr = propertyExpr; } /** * Setter method for "readonly" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setReadonlyExpr(String readonlyExpr) { this.readonlyExpr = readonlyExpr; } /** * Setter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleExpr(String styleExpr) { this.styleExpr = styleExpr; } /** * Setter method for "size" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setSizeExpr(String sizeExpr) { this.sizeExpr = sizeExpr; } /** * Setter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleClassExpr(String styleClassExpr) { this.styleClassExpr = styleClassExpr; } /** * Setter method for "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleIdExpr(String styleIdExpr) { this.styleIdExpr = styleIdExpr; } /** * Setter method for "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTabindexExpr(String tabindexExpr) { this.tabindexExpr = tabindexExpr; } /** * Setter method for "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTitleExpr(String titleExpr) { this.titleExpr = titleExpr; } /** * Setter method for "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTitleKeyExpr(String titleKeyExpr) { this.titleKeyExpr = titleKeyExpr; } /** * Setter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setValueExpr(String valueExpr) { this.valueExpr = valueExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setAccesskeyExpr(null); setAltExpr(null); setAltKeyExpr(null); setBundleExpr(null); setDisabledExpr(null); setErrorKeyExpr(null); setErrorStyleExpr(null); setErrorStyleClassExpr(null); setErrorStyleIdExpr(null); setIndexedExpr(null); setMaxlengthExpr(null); setNameExpr(null); setOnblurExpr(null); setOnchangeExpr(null); setOnclickExpr(null); setOndblclickExpr(null); setOnfocusExpr(null); setOnkeydownExpr(null); setOnkeypressExpr(null); setOnkeyupExpr(null); setOnmousedownExpr(null); setOnmousemoveExpr(null); setOnmouseoutExpr(null); setOnmouseoverExpr(null); setOnmouseupExpr(null); setPropertyExpr(null); setReadonlyExpr(null); setStyleExpr(null); setSizeExpr(null); setStyleClassExpr(null); setStyleIdExpr(null); setTabindexExpr(null); setTitleExpr(null); setTitleKeyExpr(null); setValueExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return(super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; Boolean bool = null; if ((string = EvalHelper.evalString("accesskey", getAccesskeyExpr(), this, pageContext)) != null) setAccesskey(string); if ((string = EvalHelper.evalString("alt", getAltExpr(), this, pageContext)) != null) setAlt(string); if ((string = EvalHelper.evalString("altKey", getAltKeyExpr(), this, pageContext)) != null) setAltKey(string); if ((string = EvalHelper.evalString("bundle", getBundleExpr(), this, pageContext)) != null) setBundle(string); if ((bool = EvalHelper.evalBoolean("disabled", getDisabledExpr(), this, pageContext)) != null) setDisabled(bool.booleanValue()); if ((string = EvalHelper.evalString("errorKey", getErrorKeyExpr(), this, pageContext)) != null) setErrorKey(string); if ((string = EvalHelper.evalString("errorStyle", getErrorStyleExpr(), this, pageContext)) != null) setErrorStyle(string); if ((string = EvalHelper.evalString("errorStyleClass", getErrorStyleClassExpr(), this, pageContext)) != null) setErrorStyleClass(string); if ((string = EvalHelper.evalString("errorStyleId", getErrorStyleIdExpr(), this, pageContext)) != null) setErrorStyleId(string); if ((bool = EvalHelper.evalBoolean("indexed", getIndexedExpr(), this, pageContext)) != null) setIndexed(bool.booleanValue()); if ((string = EvalHelper.evalString("maxlength", getMaxlengthExpr(), this, pageContext)) != null) setMaxlength(string); if ((string = EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) setName(string); if ((string = EvalHelper.evalString("onblur", getOnblurExpr(), this, pageContext)) != null) setOnblur(string); if ((string = EvalHelper.evalString("onchange", getOnchangeExpr(), this, pageContext)) != null) setOnchange(string); if ((string = EvalHelper.evalString("onclick", getOnclickExpr(), this, pageContext)) != null) setOnclick(string); if ((string = EvalHelper.evalString("ondblclick", getOndblclickExpr(), this, pageContext)) != null) setOndblclick(string); if ((string = EvalHelper.evalString("onfocus", getOnfocusExpr(), this, pageContext)) != null) setOnfocus(string); if ((string = EvalHelper.evalString("onkeydown", getOnkeydownExpr(), this, pageContext)) != null) setOnkeydown(string); if ((string = EvalHelper.evalString("onkeypress", getOnkeypressExpr(), this, pageContext)) != null) setOnkeypress(string); if ((string = EvalHelper.evalString("onkeyup", getOnkeyupExpr(), this, pageContext)) != null) setOnkeyup(string); if ((string = EvalHelper.evalString("onmousedown", getOnmousedownExpr(), this, pageContext)) != null) setOnmousedown(string); if ((string = EvalHelper.evalString("onmousemove", getOnmousemoveExpr(), this, pageContext)) != null) setOnmousemove(string); if ((string = EvalHelper.evalString("onmouseout", getOnmouseoutExpr(), this, pageContext)) != null) setOnmouseout(string); if ((string = EvalHelper.evalString("onmouseover", getOnmouseoverExpr(), this, pageContext)) != null) setOnmouseover(string); if ((string = EvalHelper.evalString("onmouseup", getOnmouseupExpr(), this, pageContext)) != null) setOnmouseup(string); if ((string = EvalHelper.evalString("property", getPropertyExpr(), this, pageContext)) != null) setProperty(string); if ((bool = EvalHelper.evalBoolean("readonly", getReadonlyExpr(), this, pageContext)) != null) setReadonly(bool.booleanValue()); if ((string = EvalHelper.evalString("style", getStyleExpr(), this, pageContext)) != null) setStyle(string); if ((string = EvalHelper.evalString("size", getSizeExpr(), this, pageContext)) != null) setSize(string); if ((string = EvalHelper.evalString("styleClass", getStyleClassExpr(), this, pageContext)) != null) setStyleClass(string); if ((string = EvalHelper.evalString("styleId", getStyleIdExpr(), this, pageContext)) != null) setStyleId(string); if ((string = EvalHelper.evalString("tabindex", getTabindexExpr(), this, pageContext)) != null) setTabindex(string); if ((string = EvalHelper.evalString("title", getTitleExpr(), this, pageContext)) != null) setTitle(string); if ((string = EvalHelper.evalString("titleKey", getTitleKeyExpr(), this, pageContext)) != null) setTitleKey(string); if ((string = EvalHelper.evalString("value", getValueExpr(), this, pageContext)) != null) setValue(string); } } ././@LongLink0000644000175000017500000000015310423140531011314 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELTextTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELTextTagBeanInf0000644000175000017500000002251310404045254034032 0ustar arnaudarnaud00000000000000/* * $Id: ELTextTagBeanInfo.java 123585 2004-12-29 00:43:33Z martinc $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.html.ELTextTag class. It is * needed to override the default mapping of custom tag attribute names to * class attribute names. *

* This is because the value of the unevaluated EL expression has to be kept * separately from the evaluated value, which is stored in the base class. This * is related to the fact that the JSP compiler can choose to reuse different * tag instances if they received the same original attribute values, and the * JSP compiler can choose to not re-call the setter methods, because it can * assume the same values are already set. */ public class ELTextTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("accesskey", ELTextTag.class, null, "setAccesskeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("alt", ELTextTag.class, null, "setAltExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("altKey", ELTextTag.class, null, "setAltKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("bundle", ELTextTag.class, null, "setBundleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("disabled", ELTextTag.class, null, "setDisabledExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("errorKey", ELTextTag.class, null, "setErrorKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("errorStyle", ELTextTag.class, null, "setErrorStyleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("errorStyleClass", ELTextTag.class, null, "setErrorStyleClassExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("errorStyleId", ELTextTag.class, null, "setErrorStyleIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("indexed", ELTextTag.class, null, "setIndexedExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("maxlength", ELTextTag.class, null, "setMaxlengthExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("name", ELTextTag.class, null, "setNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onblur", ELTextTag.class, null, "setOnblurExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onchange", ELTextTag.class, null, "setOnchangeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onclick", ELTextTag.class, null, "setOnclickExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("ondblclick", ELTextTag.class, null, "setOndblclickExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onfocus", ELTextTag.class, null, "setOnfocusExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeydown", ELTextTag.class, null, "setOnkeydownExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeypress", ELTextTag.class, null, "setOnkeypressExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeyup", ELTextTag.class, null, "setOnkeyupExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmousedown", ELTextTag.class, null, "setOnmousedownExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmousemove", ELTextTag.class, null, "setOnmousemoveExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseout", ELTextTag.class, null, "setOnmouseoutExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseover", ELTextTag.class, null, "setOnmouseoverExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseup", ELTextTag.class, null, "setOnmouseupExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("property", ELTextTag.class, null, "setPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("readonly", ELTextTag.class, null, "setReadonlyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("size", ELTextTag.class, null, "setSizeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("style", ELTextTag.class, null, "setStyleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleClass", ELTextTag.class, null, "setStyleClassExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleId", ELTextTag.class, null, "setStyleIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("tabindex", ELTextTag.class, null, "setTabindexExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("title", ELTextTag.class, null, "setTitleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("titleKey", ELTextTag.class, null, "setTitleKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("value", ELTextTag.class, null, "setValueExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } ././@LongLink0000644000175000017500000000014710423140531011317 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELTextareaTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELTextareaTag.ja0000644000175000017500000007305710404045252034040 0ustar arnaudarnaud00000000000000/* * $Id: ELTextareaTag.java 373801 2006-01-31 12:18:48Z niallp $ * * Copyright 1999-2006 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import org.apache.struts.taglib.html.TextareaTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Custom tag for input fields of type "textarea". * *

* This class is a subclass of the class * org.apache.struts.taglib.html.TextareaTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 373801 $ */ public class ELTextareaTag extends TextareaTag { /** * Instance variable mapped to "accessKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String accessKeyExpr; /** * Instance variable mapped to "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String altExpr; /** * Instance variable mapped to "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String altKeyExpr; /** * Instance variable mapped to "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String bundleExpr; /** * Instance variable mapped to "cols" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String colsExpr; /** * Instance variable mapped to "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String disabledExpr; /** * Instance variable mapped to "errorKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String errorKeyExpr; /** * Instance variable mapped to "errorStyle" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String errorStyleExpr; /** * Instance variable mapped to "errorStyleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String errorStyleClassExpr; /** * Instance variable mapped to "errorStyleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String errorStyleIdExpr; /** * Instance variable mapped to "indexed" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String indexedExpr; /** * Instance variable mapped to "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String nameExpr; /** * Instance variable mapped to "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onblurExpr; /** * Instance variable mapped to "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onchangeExpr; /** * Instance variable mapped to "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onclickExpr; /** * Instance variable mapped to "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String ondblclickExpr; /** * Instance variable mapped to "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onfocusExpr; /** * Instance variable mapped to "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeydownExpr; /** * Instance variable mapped to "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeypressExpr; /** * Instance variable mapped to "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onkeyupExpr; /** * Instance variable mapped to "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmousedownExpr; /** * Instance variable mapped to "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmousemoveExpr; /** * Instance variable mapped to "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseoutExpr; /** * Instance variable mapped to "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseoverExpr; /** * Instance variable mapped to "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String onmouseupExpr; /** * Instance variable mapped to "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String propertyExpr; /** * Instance variable mapped to "readonly" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String readonlyExpr; /** * Instance variable mapped to "rows" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String rowsExpr; /** * Instance variable mapped to "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleExpr; /** * Instance variable mapped to "size" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String sizeExpr; /** * Instance variable mapped to "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleClassExpr; /** * Instance variable mapped to "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String styleIdExpr; /** * Instance variable mapped to "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String tabindexExpr; /** * Instance variable mapped to "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String titleExpr; /** * Instance variable mapped to "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String titleKeyExpr; /** * Instance variable mapped to "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String valueExpr; /** * Getter method for "accessKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAccesskeyExpr() { return (accessKeyExpr); } /** * Getter method for "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAltExpr() { return (altExpr); } /** * Getter method for "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAltKeyExpr() { return (altKeyExpr); } /** * Getter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getBundleExpr() { return (bundleExpr); } /** * Getter method for "cols" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getColsExpr() { return (colsExpr); } /** * Getter method for "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getDisabledExpr() { return (disabledExpr); } /** * Getter method for "errorKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getErrorKeyExpr() { return (errorKeyExpr); } /** * Getter method for "errorStyle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getErrorStyleExpr() { return (errorStyleExpr); } /** * Getter method for "errorStyleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getErrorStyleClassExpr() { return (errorStyleClassExpr); } /** * Getter method for "errorStyleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getErrorStyleIdExpr() { return (errorStyleIdExpr); } /** * Getter method for "indexed" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getIndexedExpr() { return (indexedExpr); } /** * Getter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getNameExpr() { return (nameExpr); } /** * Getter method for "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnblurExpr() { return (onblurExpr); } /** * Getter method for "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnchangeExpr() { return (onchangeExpr); } /** * Getter method for "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnclickExpr() { return (onclickExpr); } /** * Getter method for "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOndblclickExpr() { return (ondblclickExpr); } /** * Getter method for "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnfocusExpr() { return (onfocusExpr); } /** * Getter method for "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeydownExpr() { return (onkeydownExpr); } /** * Getter method for "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeypressExpr() { return (onkeypressExpr); } /** * Getter method for "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnkeyupExpr() { return (onkeyupExpr); } /** * Getter method for "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmousedownExpr() { return (onmousedownExpr); } /** * Getter method for "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmousemoveExpr() { return (onmousemoveExpr); } /** * Getter method for "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseoutExpr() { return (onmouseoutExpr); } /** * Getter method for "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseoverExpr() { return (onmouseoverExpr); } /** * Getter method for "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOnmouseupExpr() { return (onmouseupExpr); } /** * Getter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPropertyExpr() { return (propertyExpr); } /** * Getter method for "readonly" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getReadonlyExpr() { return (readonlyExpr); } /** * Getter method for "rows" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getRowsExpr() { return (rowsExpr); } /** * Getter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleExpr() { return (styleExpr); } /** * Getter method for "size" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getSizeExpr() { return (sizeExpr); } /** * Getter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleClassExpr() { return (styleClassExpr); } /** * Getter method for "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getStyleIdExpr() { return (styleIdExpr); } /** * Getter method for "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTabindexExpr() { return (tabindexExpr); } /** * Getter method for "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTitleExpr() { return (titleExpr); } /** * Getter method for "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTitleKeyExpr() { return (titleKeyExpr); } /** * Getter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getValueExpr() { return (valueExpr); } /** * Setter method for "accessKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAccesskeyExpr(String accessKeyExpr) { this.accessKeyExpr = accessKeyExpr; } /** * Setter method for "alt" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAltExpr(String altExpr) { this.altExpr = altExpr; } /** * Setter method for "altKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAltKeyExpr(String altKeyExpr) { this.altKeyExpr = altKeyExpr; } /** * Setter method for "bundle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setBundleExpr(String bundleExpr) { this.bundleExpr = bundleExpr; } /** * Setter method for "cols" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setColsExpr(String colsExpr) { this.colsExpr = colsExpr; } /** * Setter method for "disabled" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setDisabledExpr(String disabledExpr) { this.disabledExpr = disabledExpr; } /** * Setter method for "errorKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setErrorKeyExpr(String errorKeyExpr) { this.errorKeyExpr = errorKeyExpr; } /** * Setter method for "errorStyle" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setErrorStyleExpr(String errorStyleExpr) { this.errorStyleExpr = errorStyleExpr; } /** * Setter method for "errorStyleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setErrorStyleClassExpr(String errorStyleClassExpr) { this.errorStyleClassExpr = errorStyleClassExpr; } /** * Setter method for "errorStyleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setErrorStyleIdExpr(String errorStyleIdExpr) { this.errorStyleIdExpr = errorStyleIdExpr; } /** * Setter method for "indexed" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setIndexedExpr(String indexedExpr) { this.indexedExpr = indexedExpr; } /** * Setter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setNameExpr(String nameExpr) { this.nameExpr = nameExpr; } /** * Setter method for "onblur" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnblurExpr(String onblurExpr) { this.onblurExpr = onblurExpr; } /** * Setter method for "onchange" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnchangeExpr(String onchangeExpr) { this.onchangeExpr = onchangeExpr; } /** * Setter method for "onclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnclickExpr(String onclickExpr) { this.onclickExpr = onclickExpr; } /** * Setter method for "ondblclick" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOndblclickExpr(String ondblclickExpr) { this.ondblclickExpr = ondblclickExpr; } /** * Setter method for "onfocus" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnfocusExpr(String onfocusExpr) { this.onfocusExpr = onfocusExpr; } /** * Setter method for "onkeydown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeydownExpr(String onkeydownExpr) { this.onkeydownExpr = onkeydownExpr; } /** * Setter method for "onkeypress" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeypressExpr(String onkeypressExpr) { this.onkeypressExpr = onkeypressExpr; } /** * Setter method for "onkeyup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnkeyupExpr(String onkeyupExpr) { this.onkeyupExpr = onkeyupExpr; } /** * Setter method for "onmousedown" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmousedownExpr(String onmousedownExpr) { this.onmousedownExpr = onmousedownExpr; } /** * Setter method for "onmousemove" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmousemoveExpr(String onmousemoveExpr) { this.onmousemoveExpr = onmousemoveExpr; } /** * Setter method for "onmouseout" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseoutExpr(String onmouseoutExpr) { this.onmouseoutExpr = onmouseoutExpr; } /** * Setter method for "onmouseover" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseoverExpr(String onmouseoverExpr) { this.onmouseoverExpr = onmouseoverExpr; } /** * Setter method for "onmouseup" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOnmouseupExpr(String onmouseupExpr) { this.onmouseupExpr = onmouseupExpr; } /** * Setter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPropertyExpr(String propertyExpr) { this.propertyExpr = propertyExpr; } /** * Setter method for "readonly" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setReadonlyExpr(String readonlyExpr) { this.readonlyExpr = readonlyExpr; } /** * Setter method for "rows" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setRowsExpr(String rowsExpr) { this.rowsExpr = rowsExpr; } /** * Setter method for "style" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleExpr(String styleExpr) { this.styleExpr = styleExpr; } /** * Setter method for "size" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setSizeExpr(String sizeExpr) { this.sizeExpr = sizeExpr; } /** * Setter method for "styleClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleClassExpr(String styleClassExpr) { this.styleClassExpr = styleClassExpr; } /** * Setter method for "styleId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setStyleIdExpr(String styleIdExpr) { this.styleIdExpr = styleIdExpr; } /** * Setter method for "tabindex" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTabindexExpr(String tabindexExpr) { this.tabindexExpr = tabindexExpr; } /** * Setter method for "title" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTitleExpr(String titleExpr) { this.titleExpr = titleExpr; } /** * Setter method for "titleKey" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTitleKeyExpr(String titleKeyExpr) { this.titleKeyExpr = titleKeyExpr; } /** * Setter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setValueExpr(String valueExpr) { this.valueExpr = valueExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setAccesskeyExpr(null); setAltExpr(null); setAltKeyExpr(null); setBundleExpr(null); setColsExpr(null); setDisabledExpr(null); setErrorKeyExpr(null); setErrorStyleExpr(null); setErrorStyleClassExpr(null); setErrorStyleIdExpr(null); setIndexedExpr(null); setNameExpr(null); setOnblurExpr(null); setOnchangeExpr(null); setOnclickExpr(null); setOndblclickExpr(null); setOnfocusExpr(null); setOnkeydownExpr(null); setOnkeypressExpr(null); setOnkeyupExpr(null); setOnmousedownExpr(null); setOnmousemoveExpr(null); setOnmouseoutExpr(null); setOnmouseoverExpr(null); setOnmouseupExpr(null); setPropertyExpr(null); setReadonlyExpr(null); setRowsExpr(null); setStyleExpr(null); setSizeExpr(null); setStyleClassExpr(null); setStyleIdExpr(null); setTabindexExpr(null); setTitleExpr(null); setTitleKeyExpr(null); setValueExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return(super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; Boolean bool = null; if ((string = EvalHelper.evalString("accessKey", getAccesskeyExpr(), this, pageContext)) != null) setAccesskey(string); if ((string = EvalHelper.evalString("alt", getAltExpr(), this, pageContext)) != null) setAlt(string); if ((string = EvalHelper.evalString("altKey", getAltKeyExpr(), this, pageContext)) != null) setAltKey(string); if ((string = EvalHelper.evalString("bundle", getBundleExpr(), this, pageContext)) != null) setBundle(string); if ((string = EvalHelper.evalString("cols", getColsExpr(), this, pageContext)) != null) setCols(string); if ((bool = EvalHelper.evalBoolean("disabled", getDisabledExpr(), this, pageContext)) != null) setDisabled(bool.booleanValue()); if ((string = EvalHelper.evalString("errorKey", getErrorKeyExpr(), this, pageContext)) != null) setErrorKey(string); if ((string = EvalHelper.evalString("errorStyle", getErrorStyleExpr(), this, pageContext)) != null) setErrorStyle(string); if ((string = EvalHelper.evalString("errorStyleClass", getErrorStyleClassExpr(), this, pageContext)) != null) setErrorStyleClass(string); if ((string = EvalHelper.evalString("errorStyleId", getErrorStyleIdExpr(), this, pageContext)) != null) setErrorStyleId(string); if ((bool = EvalHelper.evalBoolean("indexed", getIndexedExpr(), this, pageContext)) != null) setIndexed(bool.booleanValue()); if ((string = EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) setName(string); if ((string = EvalHelper.evalString("onblur", getOnblurExpr(), this, pageContext)) != null) setOnblur(string); if ((string = EvalHelper.evalString("onchange", getOnchangeExpr(), this, pageContext)) != null) setOnchange(string); if ((string = EvalHelper.evalString("onclick", getOnclickExpr(), this, pageContext)) != null) setOnclick(string); if ((string = EvalHelper.evalString("ondblclick", getOndblclickExpr(), this, pageContext)) != null) setOndblclick(string); if ((string = EvalHelper.evalString("onfocus", getOnfocusExpr(), this, pageContext)) != null) setOnfocus(string); if ((string = EvalHelper.evalString("onkeydown", getOnkeydownExpr(), this, pageContext)) != null) setOnkeydown(string); if ((string = EvalHelper.evalString("onkeypress", getOnkeypressExpr(), this, pageContext)) != null) setOnkeypress(string); if ((string = EvalHelper.evalString("onkeyup", getOnkeyupExpr(), this, pageContext)) != null) setOnkeyup(string); if ((string = EvalHelper.evalString("onmousedown", getOnmousedownExpr(), this, pageContext)) != null) setOnmousedown(string); if ((string = EvalHelper.evalString("onmousemove", getOnmousemoveExpr(), this, pageContext)) != null) setOnmousemove(string); if ((string = EvalHelper.evalString("onmouseout", getOnmouseoutExpr(), this, pageContext)) != null) setOnmouseout(string); if ((string = EvalHelper.evalString("onmouseover", getOnmouseoverExpr(), this, pageContext)) != null) setOnmouseover(string); if ((string = EvalHelper.evalString("onmouseup", getOnmouseupExpr(), this, pageContext)) != null) setOnmouseup(string); if ((string = EvalHelper.evalString("property", getPropertyExpr(), this, pageContext)) != null) setProperty(string); if ((bool = EvalHelper.evalBoolean("readonly", getReadonlyExpr(), this, pageContext)) != null) setReadonly(bool.booleanValue()); if ((string = EvalHelper.evalString("rows", getRowsExpr(), this, pageContext)) != null) setRows(string); if ((string = EvalHelper.evalString("style", getStyleExpr(), this, pageContext)) != null) setStyle(string); if ((string = EvalHelper.evalString("size", getSizeExpr(), this, pageContext)) != null) setSize(string); if ((string = EvalHelper.evalString("styleClass", getStyleClassExpr(), this, pageContext)) != null) setStyleClass(string); if ((string = EvalHelper.evalString("styleId", getStyleIdExpr(), this, pageContext)) != null) setStyleId(string); if ((string = EvalHelper.evalString("tabindex", getTabindexExpr(), this, pageContext)) != null) setTabindex(string); if ((string = EvalHelper.evalString("title", getTitleExpr(), this, pageContext)) != null) setTitle(string); if ((string = EvalHelper.evalString("titleKey", getTitleKeyExpr(), this, pageContext)) != null) setTitleKey(string); if ((string = EvalHelper.evalString("value", getValueExpr(), this, pageContext)) != null) setValue(string); } } ././@LongLink0000644000175000017500000000015710423140531011320 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELTextareaTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/ELTextareaTagBea0000644000175000017500000002273110404045254034052 0ustar arnaudarnaud00000000000000/* * $Id: ELTextareaTagBeanInfo.java 123585 2004-12-29 00:43:33Z martinc $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.html.ELTextareaTag class. It is * needed to override the default mapping of custom tag attribute names to * class attribute names. *

* This is because the value of the unevaluated EL expression has to be kept * separately from the evaluated value, which is stored in the base class. This * is related to the fact that the JSP compiler can choose to reuse different * tag instances if they received the same original attribute values, and the * JSP compiler can choose to not re-call the setter methods, because it can * assume the same values are already set. */ public class ELTextareaTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("accesskey", ELTextareaTag.class, null, "setAccesskeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("alt", ELTextareaTag.class, null, "setAltExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("altKey", ELTextareaTag.class, null, "setAltKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("bundle", ELTextareaTag.class, null, "setBundleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("cols", ELTextareaTag.class, null, "setColsExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("disabled", ELTextareaTag.class, null, "setDisabledExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("errorKey", ELTextareaTag.class, null, "setErrorKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("errorStyle", ELTextareaTag.class, null, "setErrorStyleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("errorStyleClass", ELTextareaTag.class, null, "setErrorStyleClassExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("errorStyleId", ELTextareaTag.class, null, "setErrorStyleIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("indexed", ELTextareaTag.class, null, "setIndexedExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("name", ELTextareaTag.class, null, "setNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onblur", ELTextareaTag.class, null, "setOnblurExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onchange", ELTextareaTag.class, null, "setOnchangeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onclick", ELTextareaTag.class, null, "setOnclickExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("ondblclick", ELTextareaTag.class, null, "setOndblclickExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onfocus", ELTextareaTag.class, null, "setOnfocusExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeydown", ELTextareaTag.class, null, "setOnkeydownExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeypress", ELTextareaTag.class, null, "setOnkeypressExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onkeyup", ELTextareaTag.class, null, "setOnkeyupExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmousedown", ELTextareaTag.class, null, "setOnmousedownExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmousemove", ELTextareaTag.class, null, "setOnmousemoveExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseout", ELTextareaTag.class, null, "setOnmouseoutExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseover", ELTextareaTag.class, null, "setOnmouseoverExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("onmouseup", ELTextareaTag.class, null, "setOnmouseupExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("property", ELTextareaTag.class, null, "setPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("readonly", ELTextareaTag.class, null, "setReadonlyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("rows", ELTextareaTag.class, null, "setRowsExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("style", ELTextareaTag.class, null, "setStyleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleClass", ELTextareaTag.class, null, "setStyleClassExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("styleId", ELTextareaTag.class, null, "setStyleIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("tabindex", ELTextareaTag.class, null, "setTabindexExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("title", ELTextareaTag.class, null, "setTitleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("titleKey", ELTextareaTag.class, null, "setTitleKeyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("value", ELTextareaTag.class, null, "setValueExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/html/package.html0000644000175000017500000000432010404045254033340 0ustar arnaudarnaud00000000000000 Package Documentation for org.apache.strutsel.taglib.html Package

The "struts-html-el" tag library contains JSP custom tags useful in creating dynamic HTML user interfaces, including input forms.



Introduction

The functionality of this tag library is entirely provided by the base "struts-html" tag library in the Struts distribution. This derived tag library, "struts-html-el", only provides a different way to evaluate attribute values, which is using the JavaServer Pages Standard Tag Library expression language engine, or the "JSTL EL" for short.

Html-EL Functionality

The functionality of the "html-el" tags can be almost entirely understood from the documentation of the "struts-html" base tag library.

Html-EL Examples

The following are discrete examples of uses of the "html-el" tags, in no paticular order, but emphasizing the use of JSTL EL values as attribute values.

Example:

   <html-el:button onblur="handler('${arg}')"
                   styleClass='${styleClass["button"]'
                   titleKey='${titleKey["button"]}'
                   value='${buttonValue["button"]}' />

Example:

   <html-el:checkbox property="button" value="${flagValue}"/>

Example:

   <html-el:link page="/doit.do" accesskey='${linkkey["doit"]}' >
    A link
   </html-el:link>

Example:

   <html-el:link page="/doit.do" onclick="openModal('/editSalary.do?id=${employee.id}')" >
    A link
   </html-el:link>
libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/0000755000175000017500000000000010423130300031175 5ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000014710423140531011317 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELForwardTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELForwardTag.ja0000644000175000017500000000547710404045252034021 0ustar arnaudarnaud00000000000000/* * $Id: ELForwardTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.logic; import org.apache.struts.taglib.logic.ForwardTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Perform a forward or redirect to a page that is looked up in the * configuration information associated with our application. *

* This class is a subclass of the class * org.apache.struts.taglib.logix.ForwardTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 54933 $ */ public class ELForwardTag extends ForwardTag { /** * Instance variable mapped to "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String nameExpr; /** * Getter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getNameExpr() { return (nameExpr); } /** * Setter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setNameExpr(String nameExpr) { this.nameExpr = nameExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setNameExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return(super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; if ((string = EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) setName(string); } } ././@LongLink0000644000175000017500000000015710423140531011320 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELForwardTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELForwardTagBea0000644000175000017500000000417510404045252034032 0ustar arnaudarnaud00000000000000/* * $Id: ELForwardTagBeanInfo.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.logic; import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; import java.beans.SimpleBeanInfo; import java.util.ArrayList; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.logic.ELForwardTag class. It is * needed to override the default mapping of custom tag attribute names to * class attribute names. *

* This is because the value of the unevaluated EL expression has to be kept * separately from the evaluated value, which is stored in the base class. This * is related to the fact that the JSP compiler can choose to reuse different * tag instances if they received the same original attribute values, and the * JSP compiler can choose to not re-call the setter methods, because it can * assume the same values are already set. */ public class ELForwardTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("name", ELForwardTag.class, null, "setNameExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } ././@LongLink0000644000175000017500000000014710423140531011317 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELIterateTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELIterateTag.ja0000644000175000017500000002176110404045254034006 0ustar arnaudarnaud00000000000000/* * $Id: ELIterateTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.logic; import org.apache.struts.taglib.logic.IterateTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Custom tag that iterates the elements of a collection, which can be * either an attribute or the property of an attribute. The collection * can be any of the following: an array of objects, an Enumeration, * an Iterator, a Collection (which includes Lists, Sets and Vectors), * or a Map (which includes Hashtables) whose elements will be iterated over. *

* This class is a subclass of the class * org.apache.struts.taglib.logic.IterateTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 54933 $ */ public class ELIterateTag extends IterateTag { /** * Instance variable mapped to "collection" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String collectionExpr; /** * Instance variable mapped to "id" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String idExpr; /** * Instance variable mapped to "indexId" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String indexIdExpr; /** * Instance variable mapped to "length" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String lengthExpr; /** * Instance variable mapped to "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String nameExpr; /** * Instance variable mapped to "offset" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String offsetExpr; /** * Instance variable mapped to "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String propertyExpr; /** * Instance variable mapped to "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String scopeExpr; /** * Instance variable mapped to "type" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String typeExpr; /** * Getter method for "collection" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getCollectionExpr() { return (collectionExpr); } /** * Getter method for "id" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getIdExpr() { return (idExpr); } /** * Getter method for "indexId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getIndexIdExpr() { return (indexIdExpr); } /** * Getter method for "length" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getLengthExpr() { return (lengthExpr); } /** * Getter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getNameExpr() { return (nameExpr); } /** * Getter method for "offset" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getOffsetExpr() { return (offsetExpr); } /** * Getter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPropertyExpr() { return (propertyExpr); } /** * Getter method for "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getScopeExpr() { return (scopeExpr); } /** * Getter method for "type" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTypeExpr() { return (typeExpr); } /** * Setter method for "collection" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setCollectionExpr(String collectionExpr) { this.collectionExpr = collectionExpr; } /** * Setter method for "id" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setIdExpr(String idExpr) { this.idExpr = idExpr; } /** * Setter method for "indexId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setIndexIdExpr(String indexIdExpr) { this.indexIdExpr = indexIdExpr; } /** * Setter method for "length" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setLengthExpr(String lengthExpr) { this.lengthExpr = lengthExpr; } /** * Setter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setNameExpr(String nameExpr) { this.nameExpr = nameExpr; } /** * Setter method for "offset" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setOffsetExpr(String offsetExpr) { this.offsetExpr = offsetExpr; } /** * Setter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPropertyExpr(String propertyExpr) { this.propertyExpr = propertyExpr; } /** * Setter method for "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setScopeExpr(String scopeExpr) { this.scopeExpr = scopeExpr; } /** * Setter method for "type" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTypeExpr(String typeExpr) { this.typeExpr = typeExpr; } /** * Releases state of custom tag so this instance can be reused. */ public void release() { super.release(); setCollectionExpr(null); setIdExpr(null); setIndexIdExpr(null); setLengthExpr(null); setNameExpr(null); setOffsetExpr(null); setPropertyExpr(null); setScopeExpr(null); setTypeExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return(super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; Object object = null; if ((object = EvalHelper.eval("collection", getCollectionExpr(), this, pageContext)) != null) setCollection(object); if ((string = EvalHelper.evalString("id", getIdExpr(), this, pageContext)) != null) setId(string); if ((string = EvalHelper.evalString("indexId", getIndexIdExpr(), this, pageContext)) != null) setIndexId(string); if ((string = EvalHelper.evalString("length", getLengthExpr(), this, pageContext)) != null) setLength(string); if ((string = EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) setName(string); if ((string = EvalHelper.evalString("offset", getOffsetExpr(), this, pageContext)) != null) setOffset(string); if ((string = EvalHelper.evalString("property", getPropertyExpr(), this, pageContext)) != null) setProperty(string); if ((string = EvalHelper.evalString("scope", getScopeExpr(), this, pageContext)) != null) setScope(string); if ((string = EvalHelper.evalString("type", getTypeExpr(), this, pageContext)) != null) setType(string); } } ././@LongLink0000644000175000017500000000015710423140531011320 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELIterateTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELIterateTagBea0000644000175000017500000000747410404045252034030 0ustar arnaudarnaud00000000000000/* * $Id: ELIterateTagBeanInfo.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.logic; import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; import java.beans.SimpleBeanInfo; import java.util.ArrayList; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.bean.ELIterateTag class. It is * needed to override the default mapping of custom tag attribute names to * class attribute names. *

* This is because the value of the unevaluated EL expression has to be kept * separately from the evaluated value, which is stored in the base class. This * is related to the fact that the JSP compiler can choose to reuse different * tag instances if they received the same original attribute values, and the * JSP compiler can choose to not re-call the setter methods, because it can * assume the same values are already set. */ public class ELIterateTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("collection", ELIterateTag.class, null, "setCollectionExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("id", ELIterateTag.class, null, "setIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("indexId", ELIterateTag.class, null, "setIndexIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("length", ELIterateTag.class, null, "setLengthExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("name", ELIterateTag.class, null, "setNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("offset", ELIterateTag.class, null, "setOffsetExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("property", ELIterateTag.class, null, "setPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("scope", ELIterateTag.class, null, "setScopeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("type", ELIterateTag.class, null, "setTypeExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } ././@LongLink0000644000175000017500000000015110423140531011312 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELMatchSupport.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELMatchSupport.0000644000175000017500000000660310404045252034067 0ustar arnaudarnaud00000000000000/* * $Id: ELMatchSupport.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.logic; import org.apache.struts.util.MessageResources; import javax.servlet.jsp.JspException; import javax.servlet.jsp.PageContext; import org.apache.struts.taglib.TagUtils; /** * This class is used as a helper class for both the * org.apache.strutsel.taglib.logic.ELMatchTag and * org.apache.strutsel.taglib.logic.ELNotMatchTag classes. It's * condition method encapsulates the common logic needed to * examine the location attribute to determine how to do the * comparison. */ class ELMatchSupport { /** * Performs a comparison of an expression and a value, with an optional * location specifier in the expression (start or end). * * @param desired Indication of whether the "truth" value of the comparison * is whether the expression and value are equal, or not equal. * @param expr Expression to test against a value. * @param value Value to test against an expression. * @param location if set, is "start" or "end" to indicate to look at the * start or end of the expression for the value. If null, look anywhere in * the expression. * @param messages MessageResources object to reference for * error message text. * @param pageContext used to save exception information, if needed. * @return true if comparison result equals desired value, false * otherwise. */ public static boolean condition(boolean desired, String expr, String value, String location, MessageResources messages, PageContext pageContext) throws JspException { boolean result = false; if (expr != null) { // Perform the comparison requested by the location attribute boolean matched = false; if (location == null) { matched = (expr.indexOf(value) >= 0); } else if (location.equals("start")) { matched = expr.startsWith(value); } else if (location.equals("end")) { matched = expr.endsWith(value); } else { JspException e = new JspException (messages.getMessage("logic.location", location)); TagUtils.getInstance().saveException(pageContext, e); throw e; } result = (matched == desired); } return (result); } } ././@LongLink0000644000175000017500000000014510423140531011315 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELMatchTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELMatchTag.java0000644000175000017500000002371310404045252033771 0ustar arnaudarnaud00000000000000/* * $Id: ELMatchTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.logic; import org.apache.struts.taglib.logic.MatchTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Evalute the nested body content of this tag if the specified value * is a substring of the specified variable. *

* This class is a subclass of the class * org.apache.struts.taglib.logic.MatchTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 54933 $ */ public class ELMatchTag extends MatchTag { /** * Instance variable mapped to "cookie" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String cookieExpr; /** * Instance variable mapped to "header" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String headerExpr; /** * Instance variable mapped to "location" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String locationExpr; /** * Instance variable mapped to "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String nameExpr; /** * Instance variable mapped to "parameter" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String parameterExpr; /** * Instance variable mapped to "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String propertyExpr; /** * Instance variable mapped to "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String scopeExpr; /** * Instance variable mapped to "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String valueExpr; /** * Getter method for "cookie" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getCookieExpr() { return (cookieExpr); } /** * Getter method for "header" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getHeaderExpr() { return (headerExpr); } /** * Getter method for "location" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getLocationExpr() { return (locationExpr); } /** * Getter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getNameExpr() { return (nameExpr); } /** * Getter method for "parameter" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getParameterExpr() { return (parameterExpr); } /** * Getter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPropertyExpr() { return (propertyExpr); } /** * Getter method for "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getScopeExpr() { return (scopeExpr); } /** * Getter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getValueExpr() { return (valueExpr); } /** * Setter method for "cookie" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setCookieExpr(String cookieExpr) { this.cookieExpr = cookieExpr; } /** * Setter method for "header" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setHeaderExpr(String headerExpr) { this.headerExpr = headerExpr; } /** * Setter method for "location" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setLocationExpr(String locationExpr) { this.locationExpr = locationExpr; } /** * Setter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setNameExpr(String nameExpr) { this.nameExpr = nameExpr; } /** * Setter method for "parameter" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setParameterExpr(String parameterExpr) { this.parameterExpr = parameterExpr; } /** * Setter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPropertyExpr(String propertyExpr) { this.propertyExpr = propertyExpr; } /** * Setter method for "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setScopeExpr(String scopeExpr) { this.scopeExpr = scopeExpr; } /** * Setter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setValueExpr(String valueExpr) { this.valueExpr = valueExpr; } /** * String value of expression to be evaluated. */ private String expr; /** * Returns the string value of the expression. This value will be * evaluated by the JSTL EL engine. */ public String getExpr() { return (expr); } /** * Sets the string value of the expression. This expression will be * evaluated by the JSTL EL engine. */ public void setExpr(String expr) { this.expr = expr; } /** * Evaluated value of expression. */ private String exprValue; /** * Returns the evaluated expression. */ public String getExprValue() { return (exprValue); } /** * Sets the evaluated expression. */ public void setExprValue(String exprValue) { this.exprValue = exprValue; } /** * Releases state of custom tag so this instance can be reused. */ public void release() { super.release(); setCookieExpr(null); setHeaderExpr(null); setLocationExpr(null); setNameExpr(null); setParameterExpr(null); setPropertyExpr(null); setScopeExpr(null); setValueExpr(null); setExpr(null); setExprValue(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return (super.doStartTag()); } /** * Evaluates the condition that is being tested by this particular tag, * and returns true if the nested body content of this tag * should be evaluated, or false if it should be skipped. * * @param desired Desired value for a true result * @exception JspException if a JSP exception occurs */ protected boolean condition(boolean desired) throws JspException { boolean result = false; if (getExprValue() != null) { result = ELMatchSupport.condition(desired, getExprValue(), value, location, messages, pageContext); } else { result = super.condition(desired); } return (result); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; if ((string = EvalHelper.evalString("cookie", getCookieExpr(), this, pageContext)) != null) setCookie(string); if ((string = EvalHelper.evalString("expr", getExpr(), this, pageContext)) != null) setExprValue(string); if ((string = EvalHelper.evalString("header", getHeaderExpr(), this, pageContext)) != null) setHeader(string); if ((string = EvalHelper.evalString("location", getLocationExpr(), this, pageContext)) != null) setLocation(string); if ((string = EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) setName(string); if ((string = EvalHelper.evalString("parameter", getParameterExpr(), this, pageContext)) != null) setParameter(string); if ((string = EvalHelper.evalString("property", getPropertyExpr(), this, pageContext)) != null) setProperty(string); if ((string = EvalHelper.evalString("scope", getScopeExpr(), this, pageContext)) != null) setScope(string); if ((string = EvalHelper.evalString("value", getValueExpr(), this, pageContext)) != null) setValue(string); } } ././@LongLink0000644000175000017500000000015510423140531011316 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELMatchTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELMatchTagBeanI0000644000175000017500000000744710404045252033756 0ustar arnaudarnaud00000000000000/* * $Id: ELMatchTagBeanInfo.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.logic; import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; import java.beans.SimpleBeanInfo; import java.util.ArrayList; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.logic.ELMatchTag class. It is * needed to override the default mapping of custom tag attribute names to * class attribute names. *

* This is because the value of the unevaluated EL expression has to be kept * separately from the evaluated value, which is stored in the base class. This * is related to the fact that the JSP compiler can choose to reuse different * tag instances if they received the same original attribute values, and the * JSP compiler can choose to not re-call the setter methods, because it can * assume the same values are already set. */ public class ELMatchTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("cookie", ELMatchTag.class, null, "setCookieExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("header", ELMatchTag.class, null, "setHeaderExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("location", ELMatchTag.class, null, "setLocationExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("name", ELMatchTag.class, null, "setNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("parameter", ELMatchTag.class, null, "setParameterExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("property", ELMatchTag.class, null, "setPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("scope", ELMatchTag.class, null, "setScopeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("value", ELMatchTag.class, null, "setValueExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("expr", ELMatchTag.class, null, "setExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } ././@LongLink0000644000175000017500000000016210423140531011314 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELMessagesNotPresentTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELMessagesNotPr0000644000175000017500000001107010404045254034106 0ustar arnaudarnaud00000000000000/* * $Id: ELMessagesNotPresentTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.logic; import org.apache.struts.taglib.logic.MessagesNotPresentTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Evalute to false if an ActionMessages class or a * class that can be converted to an ActionMessages class is in * request scope under the specified key and there is at least one message in * the class or for the property specified. *

* This class is a subclass of the class * org.apache.struts.taglib.logic.MessagesNotPresentTag which * provides most of the described functionality. This subclass allows all * attribute values to be specified as expressions utilizing the JavaServer * Pages Standard Library expression language. * * @version $Rev: 54933 $ */ public class ELMessagesNotPresentTag extends MessagesNotPresentTag { /** * Instance variable mapped to "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String nameExpr; /** * Instance variable mapped to "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String propertyExpr; /** * Instance variable mapped to "message" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String messageExpr; /** * Getter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getNameExpr() { return (nameExpr); } /** * Getter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPropertyExpr() { return (propertyExpr); } /** * Getter method for "message" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getMessageExpr() { return (messageExpr); } /** * Setter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setNameExpr(String nameExpr) { this.nameExpr = nameExpr; } /** * Setter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPropertyExpr(String propertyExpr) { this.propertyExpr = propertyExpr; } /** * Setter method for "message" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setMessageExpr(String messageExpr) { this.messageExpr = messageExpr; } /** * Releases state of custom tag so this instance can be reused. */ public void release() { super.release(); setNameExpr(null); setPropertyExpr(null); setMessageExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return (super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; if ((string = EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) setName(string); if ((string = EvalHelper.evalString("property", getPropertyExpr(), this, pageContext)) != null) setProperty(string); if ((string = EvalHelper.evalString("message", getMessageExpr(), this, pageContext)) != null) setMessage(string); } } ././@LongLink0000644000175000017500000000017210423140531011315 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELMessagesNotPresentTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELMessagesNotPr0000644000175000017500000000516510404045254034116 0ustar arnaudarnaud00000000000000/* * $Id: ELMessagesNotPresentTagBeanInfo.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.logic; import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; import java.beans.SimpleBeanInfo; import java.util.ArrayList; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.logic.ELMessagesNotPresentTag class. It is * needed to override the default mapping of custom tag attribute names to * class attribute names. *

* This is because the value of the unevaluated EL expression has to be kept * separately from the evaluated value, which is stored in the base class. This * is related to the fact that the JSP compiler can choose to reuse different * tag instances if they received the same original attribute values, and the * JSP compiler can choose to not re-call the setter methods, because it can * assume the same values are already set. */ public class ELMessagesNotPresentTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("name", ELMessagesNotPresentTag.class, null, "setNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("property", ELMessagesNotPresentTag.class, null, "setPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("message", ELMessagesNotPresentTag.class, null, "setMessageExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } ././@LongLink0000644000175000017500000000015710423140531011320 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELMessagesPresentTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELMessagesPrese0000644000175000017500000001105010404045254034120 0ustar arnaudarnaud00000000000000/* * $Id: ELMessagesPresentTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.logic; import org.apache.struts.taglib.logic.MessagesPresentTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Evalute to true if an ActionMessages class or a * class that can be converted to an ActionMessages class is in * request scope under the specified key and there is at least one message in * the class or for the property specified. *

* This class is a subclass of the class * org.apache.struts.taglib.logic.MessagesPresentTag which * provides most of the described functionality. This subclass allows all * attribute values to be specified as expressions utilizing the JavaServer * Pages Standard Library expression language. * * @version $Rev: 54933 $ */ public class ELMessagesPresentTag extends MessagesPresentTag { /** * Instance variable mapped to "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String nameExpr; /** * Instance variable mapped to "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String propertyExpr; /** * Instance variable mapped to "message" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String messageExpr; /** * Getter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getNameExpr() { return (nameExpr); } /** * Getter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPropertyExpr() { return (propertyExpr); } /** * Getter method for "message" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getMessageExpr() { return (messageExpr); } /** * Setter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setNameExpr(String nameExpr) { this.nameExpr = nameExpr; } /** * Setter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPropertyExpr(String propertyExpr) { this.propertyExpr = propertyExpr; } /** * Setter method for "message" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setMessageExpr(String messageExpr) { this.messageExpr = messageExpr; } /** * Releases state of custom tag so this instance can be reused. */ public void release() { super.release(); setNameExpr(null); setPropertyExpr(null); setMessageExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return (super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; if ((string = EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) setName(string); if ((string = EvalHelper.evalString("property", getPropertyExpr(), this, pageContext)) != null) setProperty(string); if ((string = EvalHelper.evalString("message", getMessageExpr(), this, pageContext)) != null) setMessage(string); } } ././@LongLink0000644000175000017500000000016710423140531011321 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELMessagesPresentTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELMessagesPrese0000644000175000017500000000514310404045252034124 0ustar arnaudarnaud00000000000000/* * $Id: ELMessagesPresentTagBeanInfo.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.logic; import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; import java.beans.SimpleBeanInfo; import java.util.ArrayList; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.logic.ELMessagesPresentTag class. It is * needed to override the default mapping of custom tag attribute names to * class attribute names. *

* This is because the value of the unevaluated EL expression has to be kept * separately from the evaluated value, which is stored in the base class. This * is related to the fact that the JSP compiler can choose to reuse different * tag instances if they received the same original attribute values, and the * JSP compiler can choose to not re-call the setter methods, because it can * assume the same values are already set. */ public class ELMessagesPresentTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("name", ELMessagesPresentTag.class, null, "setNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("property", ELMessagesPresentTag.class, null, "setPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("message", ELMessagesPresentTag.class, null, "setMessageExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } ././@LongLink0000644000175000017500000000015010423140531011311 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELNotMatchTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELNotMatchTag.j0000644000175000017500000002372210404045252033762 0ustar arnaudarnaud00000000000000/* * $Id: ELNotMatchTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.logic; import org.apache.struts.taglib.logic.NotMatchTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Evalute the nested body content of this tag if the specified value * is a substring of the specified variable. *

* This class is a subclass of the class * org.apache.struts.taglib.logic.NotMatchTag which provides most * of the described functionality. This subclass allows all attribute values * to be specified as expressions utilizing the JavaServer Pages Standard * Library expression language. * * @version $Rev: 54933 $ */ public class ELNotMatchTag extends NotMatchTag { /** * Instance variable mapped to "cookie" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String cookieExpr; /** * Instance variable mapped to "header" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String headerExpr; /** * Instance variable mapped to "location" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String locationExpr; /** * Instance variable mapped to "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String nameExpr; /** * Instance variable mapped to "parameter" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String parameterExpr; /** * Instance variable mapped to "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String propertyExpr; /** * Instance variable mapped to "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String scopeExpr; /** * Instance variable mapped to "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String valueExpr; /** * Getter method for "cookie" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getCookieExpr() { return (cookieExpr); } /** * Getter method for "header" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getHeaderExpr() { return (headerExpr); } /** * Getter method for "location" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getLocationExpr() { return (locationExpr); } /** * Getter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getNameExpr() { return (nameExpr); } /** * Getter method for "parameter" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getParameterExpr() { return (parameterExpr); } /** * Getter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPropertyExpr() { return (propertyExpr); } /** * Getter method for "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getScopeExpr() { return (scopeExpr); } /** * Getter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getValueExpr() { return (valueExpr); } /** * Setter method for "cookie" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setCookieExpr(String cookieExpr) { this.cookieExpr = cookieExpr; } /** * Setter method for "header" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setHeaderExpr(String headerExpr) { this.headerExpr = headerExpr; } /** * Setter method for "location" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setLocationExpr(String locationExpr) { this.locationExpr = locationExpr; } /** * Setter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setNameExpr(String nameExpr) { this.nameExpr = nameExpr; } /** * Setter method for "parameter" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setParameterExpr(String parameterExpr) { this.parameterExpr = parameterExpr; } /** * Setter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPropertyExpr(String propertyExpr) { this.propertyExpr = propertyExpr; } /** * Setter method for "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setScopeExpr(String scopeExpr) { this.scopeExpr = scopeExpr; } /** * Setter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setValueExpr(String valueExpr) { this.valueExpr = valueExpr; } /** * String value of expression to be evaluated. */ private String expr; /** * Returns the string value of the expression. This value will be * evaluated by the JSTL EL engine. */ public String getExpr() { return (expr); } /** * Sets the string value of the expression. This expression will be * evaluated by the JSTL EL engine. */ public void setExpr(String expr) { this.expr = expr; } /** * Evaluated value of expression. */ private String exprValue; /** * Returns the evaluated expression. */ public String getExprValue() { return (exprValue); } /** * Sets the evaluated expression. */ public void setExprValue(String exprValue) { this.exprValue = exprValue; } /** * Releases state of custom tag so this instance can be reused. */ public void release() { super.release(); setCookieExpr(null); setHeaderExpr(null); setLocationExpr(null); setNameExpr(null); setParameterExpr(null); setPropertyExpr(null); setScopeExpr(null); setValueExpr(null); setExpr(null); setExprValue(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return (super.doStartTag()); } /** * Evaluates the condition that is being tested by this particular tag, * and returns true if the nested body content of this tag * should be evaluated, or false if it should be skipped. * * @param desired Desired value for a true result * @exception JspException if a JSP exception occurs */ protected boolean condition(boolean desired) throws JspException { boolean result = false; if (getExprValue() != null) { result = ELMatchSupport.condition(desired, getExprValue(), value, location, messages, pageContext); } else { result = super.condition(desired); } return (result); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; if ((string = EvalHelper.evalString("cookie", getCookieExpr(), this, pageContext)) != null) setCookie(string); if ((string = EvalHelper.evalString("expr", getExpr(), this, pageContext)) != null) setExprValue(string); if ((string = EvalHelper.evalString("header", getHeaderExpr(), this, pageContext)) != null) setHeader(string); if ((string = EvalHelper.evalString("location", getLocationExpr(), this, pageContext)) != null) setLocation(string); if ((string = EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) setName(string); if ((string = EvalHelper.evalString("parameter", getParameterExpr(), this, pageContext)) != null) setParameter(string); if ((string = EvalHelper.evalString("property", getPropertyExpr(), this, pageContext)) != null) setProperty(string); if ((string = EvalHelper.evalString("scope", getScopeExpr(), this, pageContext)) != null) setScope(string); if ((string = EvalHelper.evalString("value", getValueExpr(), this, pageContext)) != null) setValue(string); } } ././@LongLink0000644000175000017500000000016010423140531011312 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELNotMatchTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELNotMatchTagBe0000644000175000017500000000751310404045254034003 0ustar arnaudarnaud00000000000000/* * $Id: ELNotMatchTagBeanInfo.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.logic; import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; import java.beans.SimpleBeanInfo; import java.util.ArrayList; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.logic.ELNotMatchTag class. It is * needed to override the default mapping of custom tag attribute names to * class attribute names. *

* This is because the value of the unevaluated EL expression has to be kept * separately from the evaluated value, which is stored in the base class. This * is related to the fact that the JSP compiler can choose to reuse different * tag instances if they received the same original attribute values, and the * JSP compiler can choose to not re-call the setter methods, because it can * assume the same values are already set. */ public class ELNotMatchTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("cookie", ELNotMatchTag.class, null, "setCookieExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("header", ELNotMatchTag.class, null, "setHeaderExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("location", ELNotMatchTag.class, null, "setLocationExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("name", ELNotMatchTag.class, null, "setNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("parameter", ELNotMatchTag.class, null, "setParameterExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("property", ELNotMatchTag.class, null, "setPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("scope", ELNotMatchTag.class, null, "setScopeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("value", ELNotMatchTag.class, null, "setValueExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("expr", ELNotMatchTag.class, null, "setExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } ././@LongLink0000644000175000017500000000015210423140531011313 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELNotPresentTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELNotPresentTag0000644000175000017500000001774510404045254034130 0ustar arnaudarnaud00000000000000/* * $Id: ELNotPresentTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.logic; import org.apache.struts.taglib.logic.NotPresentTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Evaluates the nested body content of this tag if the specified value is * not present for this request. *

* This class is a subclass of the class * org.apache.struts.taglib.logic.NotPresentTag which * provides most of the described functionality. This subclass allows all * attribute values to be specified as expressions utilizing the JavaServer * Pages Standard Library expression language. * * @version $Rev: 54933 $ */ public class ELNotPresentTag extends NotPresentTag { /** * Instance variable mapped to "cookie" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String cookieExpr; /** * Instance variable mapped to "header" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String headerExpr; /** * Instance variable mapped to "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String nameExpr; /** * Instance variable mapped to "parameter" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String parameterExpr; /** * Instance variable mapped to "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String propertyExpr; /** * Instance variable mapped to "role" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String roleExpr; /** * Instance variable mapped to "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String scopeExpr; /** * Instance variable mapped to "user" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String userExpr; /** * Getter method for "cookie" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getCookieExpr() { return (cookieExpr); } /** * Getter method for "header" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getHeaderExpr() { return (headerExpr); } /** * Getter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getNameExpr() { return (nameExpr); } /** * Getter method for "parameter" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getParameterExpr() { return (parameterExpr); } /** * Getter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPropertyExpr() { return (propertyExpr); } /** * Getter method for "role" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getRoleExpr() { return (roleExpr); } /** * Getter method for "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getScopeExpr() { return (scopeExpr); } /** * Getter method for "user" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getUserExpr() { return (userExpr); } /** * Setter method for "cookie" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setCookieExpr(String cookieExpr) { this.cookieExpr = cookieExpr; } /** * Setter method for "header" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setHeaderExpr(String headerExpr) { this.headerExpr = headerExpr; } /** * Setter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setNameExpr(String nameExpr) { this.nameExpr = nameExpr; } /** * Setter method for "parameter" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setParameterExpr(String parameterExpr) { this.parameterExpr = parameterExpr; } /** * Setter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPropertyExpr(String propertyExpr) { this.propertyExpr = propertyExpr; } /** * Setter method for "role" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setRoleExpr(String roleExpr) { this.roleExpr = roleExpr; } /** * Setter method for "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setScopeExpr(String scopeExpr) { this.scopeExpr = scopeExpr; } /** * Setter method for "user" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setUserExpr(String userExpr) { this.userExpr = userExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setCookieExpr(null); setHeaderExpr(null); setNameExpr(null); setParameterExpr(null); setPropertyExpr(null); setRoleExpr(null); setScopeExpr(null); setUserExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return (super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; if ((string = EvalHelper.evalString("cookie", getCookieExpr(), this, pageContext)) != null) setCookie(string); if ((string = EvalHelper.evalString("header", getHeaderExpr(), this, pageContext)) != null) setHeader(string); if ((string = EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) setName(string); if ((string = EvalHelper.evalString("parameter", getParameterExpr(), this, pageContext)) != null) setParameter(string); if ((string = EvalHelper.evalString("property", getPropertyExpr(), this, pageContext)) != null) setProperty(string); if ((string = EvalHelper.evalString("role", getRoleExpr(), this, pageContext)) != null) setRole(string); if ((string = EvalHelper.evalString("scope", getScopeExpr(), this, pageContext)) != null) setScope(string); if ((string = EvalHelper.evalString("user", getUserExpr(), this, pageContext)) != null) setUser(string); } } ././@LongLink0000644000175000017500000000016210423140531011314 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELNotPresentTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELNotPresentTag0000644000175000017500000000720610404045252034115 0ustar arnaudarnaud00000000000000/* * $Id: ELNotPresentTagBeanInfo.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.logic; import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; import java.beans.SimpleBeanInfo; import java.util.ArrayList; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.logic.ELNotPresentTag class. It is * needed to override the default mapping of custom tag attribute names to * class attribute names. *

* This is because the value of the unevaluated EL expression has to be kept * separately from the evaluated value, which is stored in the base class. This * is related to the fact that the JSP compiler can choose to reuse different * tag instances if they received the same original attribute values, and the * JSP compiler can choose to not re-call the setter methods, because it can * assume the same values are already set. */ public class ELNotPresentTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("cookie", ELNotPresentTag.class, null, "setCookieExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("header", ELNotPresentTag.class, null, "setHeaderExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("name", ELNotPresentTag.class, null, "setNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("parameter", ELNotPresentTag.class, null, "setParameterExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("property", ELNotPresentTag.class, null, "setPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("role", ELNotPresentTag.class, null, "setRoleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("scope", ELNotPresentTag.class, null, "setScopeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("user", ELNotPresentTag.class, null, "setUserExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } ././@LongLink0000644000175000017500000000014710423140531011317 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELPresentTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELPresentTag.ja0000644000175000017500000001772210404045252034031 0ustar arnaudarnaud00000000000000/* * $Id: ELPresentTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.logic; import org.apache.struts.taglib.logic.PresentTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Evaluates the nested body content of this tag if the specified value is * present for this request. *

* This class is a subclass of the class * org.apache.struts.taglib.logic.PresentTag which * provides most of the described functionality. This subclass allows all * attribute values to be specified as expressions utilizing the JavaServer * Pages Standard Library expression language. * * @version $Rev: 54933 $ */ public class ELPresentTag extends PresentTag { /** * Instance variable mapped to "cookie" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String cookieExpr; /** * Instance variable mapped to "header" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String headerExpr; /** * Instance variable mapped to "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String nameExpr; /** * Instance variable mapped to "parameter" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String parameterExpr; /** * Instance variable mapped to "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String propertyExpr; /** * Instance variable mapped to "role" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String roleExpr; /** * Instance variable mapped to "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String scopeExpr; /** * Instance variable mapped to "user" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String userExpr; /** * Getter method for "cookie" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getCookieExpr() { return (cookieExpr); } /** * Getter method for "header" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getHeaderExpr() { return (headerExpr); } /** * Getter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getNameExpr() { return (nameExpr); } /** * Getter method for "parameter" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getParameterExpr() { return (parameterExpr); } /** * Getter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPropertyExpr() { return (propertyExpr); } /** * Getter method for "role" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getRoleExpr() { return (roleExpr); } /** * Getter method for "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getScopeExpr() { return (scopeExpr); } /** * Getter method for "user" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getUserExpr() { return (userExpr); } /** * Setter method for "cookie" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setCookieExpr(String cookieExpr) { this.cookieExpr = cookieExpr; } /** * Setter method for "header" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setHeaderExpr(String headerExpr) { this.headerExpr = headerExpr; } /** * Setter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setNameExpr(String nameExpr) { this.nameExpr = nameExpr; } /** * Setter method for "parameter" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setParameterExpr(String parameterExpr) { this.parameterExpr = parameterExpr; } /** * Setter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPropertyExpr(String propertyExpr) { this.propertyExpr = propertyExpr; } /** * Setter method for "role" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setRoleExpr(String roleExpr) { this.roleExpr = roleExpr; } /** * Setter method for "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setScopeExpr(String scopeExpr) { this.scopeExpr = scopeExpr; } /** * Setter method for "user" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setUserExpr(String userExpr) { this.userExpr = userExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setCookieExpr(null); setHeaderExpr(null); setNameExpr(null); setParameterExpr(null); setPropertyExpr(null); setRoleExpr(null); setScopeExpr(null); setUserExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return (super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; if ((string = EvalHelper.evalString("cookie", getCookieExpr(), this, pageContext)) != null) setCookie(string); if ((string = EvalHelper.evalString("header", getHeaderExpr(), this, pageContext)) != null) setHeader(string); if ((string = EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) setName(string); if ((string = EvalHelper.evalString("parameter", getParameterExpr(), this, pageContext)) != null) setParameter(string); if ((string = EvalHelper.evalString("property", getPropertyExpr(), this, pageContext)) != null) setProperty(string); if ((string = EvalHelper.evalString("role", getRoleExpr(), this, pageContext)) != null) setRole(string); if ((string = EvalHelper.evalString("scope", getScopeExpr(), this, pageContext)) != null) setScope(string); if ((string = EvalHelper.evalString("user", getUserExpr(), this, pageContext)) != null) setUser(string); } } ././@LongLink0000644000175000017500000000015710423140531011320 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELPresentTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELPresentTagBea0000644000175000017500000000714510404045254034050 0ustar arnaudarnaud00000000000000/* * $Id: ELPresentTagBeanInfo.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.logic; import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; import java.beans.SimpleBeanInfo; import java.util.ArrayList; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.logic.ELPresentTag class. It is * needed to override the default mapping of custom tag attribute names to * class attribute names. *

* This is because the value of the unevaluated EL expression has to be kept * separately from the evaluated value, which is stored in the base class. This * is related to the fact that the JSP compiler can choose to reuse different * tag instances if they received the same original attribute values, and the * JSP compiler can choose to not re-call the setter methods, because it can * assume the same values are already set. */ public class ELPresentTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("cookie", ELPresentTag.class, null, "setCookieExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("header", ELPresentTag.class, null, "setHeaderExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("name", ELPresentTag.class, null, "setNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("parameter", ELPresentTag.class, null, "setParameterExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("property", ELPresentTag.class, null, "setPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("role", ELPresentTag.class, null, "setRoleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("scope", ELPresentTag.class, null, "setScopeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("user", ELPresentTag.class, null, "setUserExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } ././@LongLink0000644000175000017500000000015010423140531011311 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELRedirectTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELRedirectTag.j0000644000175000017500000003143210404045254034005 0ustar arnaudarnaud00000000000000/* * $Id: ELRedirectTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.logic; import org.apache.struts.taglib.logic.RedirectTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Generate a URL-encoded redirect to the specified URI. *

* This class is a subclass of the class * org.apache.struts.taglib.logic.RedirectTag which * provides most of the described functionality. This subclass allows all * attribute values to be specified as expressions utilizing the JavaServer * Pages Standard Library expression language. * * @version $Rev: 54933 $ */ public class ELRedirectTag extends RedirectTag { /** * Instance variable mapped to "action" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String actionExpr; /** * Instance variable mapped to "anchor" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String anchorExpr; /** * Instance variable mapped to "forward" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String forwardExpr; /** * Instance variable mapped to "href" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String hrefExpr; /** * Instance variable mapped to "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String nameExpr; /** * Instance variable mapped to "page" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String pageExpr; /** * Instance variable mapped to "paramId" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String paramIdExpr; /** * Instance variable mapped to "paramName" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String paramNameExpr; /** * Instance variable mapped to "paramProperty" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String paramPropertyExpr; /** * Instance variable mapped to "paramScope" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String paramScopeExpr; /** * Instance variable mapped to "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String propertyExpr; /** * Instance variable mapped to "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String scopeExpr; /** * Instance variable mapped to "transaction" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String transactionExpr; /** * Instance variable mapped to "useLocalEncoding" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String useLocalEncodingExpr; /** * Getter method for "action" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getActionExpr() { return (actionExpr); } /** * Getter method for "anchor" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAnchorExpr() { return (anchorExpr); } /** * Getter method for "forward" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getForwardExpr() { return (forwardExpr); } /** * Getter method for "href" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getHrefExpr() { return (hrefExpr); } /** * Getter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getNameExpr() { return (nameExpr); } /** * Getter method for "page" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPageExpr() { return (pageExpr); } /** * Getter method for "paramId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getParamIdExpr() { return (paramIdExpr); } /** * Getter method for "paramName" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getParamNameExpr() { return (paramNameExpr); } /** * Getter method for "paramProperty" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getParamPropertyExpr() { return (paramPropertyExpr); } /** * Getter method for "paramScope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getParamScopeExpr() { return (paramScopeExpr); } /** * Getter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPropertyExpr() { return (propertyExpr); } /** * Getter method for "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getScopeExpr() { return (scopeExpr); } /** * Getter method for "transaction" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTransactionExpr() { return (transactionExpr); } /** * Getter method for "useLocalEncoding" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getUseLocalEncodingExpr() { return (useLocalEncodingExpr); } /** * Setter method for "action" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setActionExpr(String actionExpr) { this.actionExpr = actionExpr; } /** * Setter method for "anchor" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAnchorExpr(String anchorExpr) { this.anchorExpr = anchorExpr; } /** * Setter method for "forward" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setForwardExpr(String forwardExpr) { this.forwardExpr = forwardExpr; } /** * Setter method for "href" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setHrefExpr(String hrefExpr) { this.hrefExpr = hrefExpr; } /** * Setter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setNameExpr(String nameExpr) { this.nameExpr = nameExpr; } /** * Setter method for "page" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPageExpr(String pageExpr) { this.pageExpr = pageExpr; } /** * Setter method for "paramId" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setParamIdExpr(String paramIdExpr) { this.paramIdExpr = paramIdExpr; } /** * Setter method for "paramName" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setParamNameExpr(String paramNameExpr) { this.paramNameExpr = paramNameExpr; } /** * Setter method for "paramProperty" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setParamPropertyExpr(String paramPropertyExpr) { this.paramPropertyExpr = paramPropertyExpr; } /** * Setter method for "paramScope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setParamScopeExpr(String paramScopeExpr) { this.paramScopeExpr = paramScopeExpr; } /** * Setter method for "property" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPropertyExpr(String propertyExpr) { this.propertyExpr = propertyExpr; } /** * Setter method for "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setScopeExpr(String scopeExpr) { this.scopeExpr = scopeExpr; } /** * Setter method for "transaction" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTransactionExpr(String transactionExpr) { this.transactionExpr = transactionExpr; } /** * Setter method for "useLocalEncoding" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setUseLocalEncodingExpr(String useLocalEncodingExpr) { this.useLocalEncodingExpr = useLocalEncodingExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setActionExpr(null); setAnchorExpr(null); setForwardExpr(null); setHrefExpr(null); setNameExpr(null); setPageExpr(null); setParamIdExpr(null); setParamNameExpr(null); setParamPropertyExpr(null); setParamScopeExpr(null); setPropertyExpr(null); setScopeExpr(null); setTransactionExpr(null); setUseLocalEncodingExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return (super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; Boolean bool = null; if ((string = EvalHelper.evalString("action", getActionExpr(), this, pageContext)) != null) setAction(string); if ((string = EvalHelper.evalString("anchor", getAnchorExpr(), this, pageContext)) != null) setAnchor(string); if ((string = EvalHelper.evalString("forward", getForwardExpr(), this, pageContext)) != null) setForward(string); if ((string = EvalHelper.evalString("href", getHrefExpr(), this, pageContext)) != null) setHref(string); if ((string = EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) setName(string); if ((string = EvalHelper.evalString("page", getPageExpr(), this, pageContext)) != null) setPage(string); if ((string = EvalHelper.evalString("paramId", getParamIdExpr(), this, pageContext)) != null) setParamId(string); if ((string = EvalHelper.evalString("paramName", getParamNameExpr(), this, pageContext)) != null) setParamName(string); if ((string = EvalHelper.evalString("paramProperty", getParamPropertyExpr(), this, pageContext)) != null) setParamProperty(string); if ((string = EvalHelper.evalString("paramScope", getParamScopeExpr(), this, pageContext)) != null) setParamScope(string); if ((string = EvalHelper.evalString("property", getPropertyExpr(), this, pageContext)) != null) setProperty(string); if ((string = EvalHelper.evalString("scope", getScopeExpr(), this, pageContext)) != null) setScope(string); if ((bool = EvalHelper.evalBoolean("transaction", getTransactionExpr(), this, pageContext)) != null) setTransaction(bool.booleanValue()); if ((bool = EvalHelper.evalBoolean("useLocalEncoding", getUseLocalEncodingExpr(), this, pageContext)) != null) setUseLocalEncoding(bool.booleanValue()); } } ././@LongLink0000644000175000017500000000016010423140531011312 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELRedirectTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/ELRedirectTagBe0000644000175000017500000001167610404045254034034 0ustar arnaudarnaud00000000000000/* * $Id: ELRedirectTagBeanInfo.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.logic; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.logic.ELRedirectTag class. It is * needed to override the default mapping of custom tag attribute names to * class attribute names. *

* This is because the value of the unevaluated EL expression has to be kept * separately from the evaluated value, which is stored in the base class. This * is related to the fact that the JSP compiler can choose to reuse different * tag instances if they received the same original attribute values, and the * JSP compiler can choose to not re-call the setter methods, because it can * assume the same values are already set. */ public class ELRedirectTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("action", ELRedirectTag.class, null, "setActionExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("anchor", ELRedirectTag.class, null, "setAnchorExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("forward", ELRedirectTag.class, null, "setForwardExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("href", ELRedirectTag.class, null, "setHrefExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("name", ELRedirectTag.class, null, "setNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("page", ELRedirectTag.class, null, "setPageExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("paramId", ELRedirectTag.class, null, "setParamIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("paramName", ELRedirectTag.class, null, "setParamNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("paramProperty", ELRedirectTag.class, null, "setParamPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("paramScope", ELRedirectTag.class, null, "setParamScopeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("property", ELRedirectTag.class, null, "setPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("scope", ELRedirectTag.class, null, "setScopeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("transaction", ELRedirectTag.class, null, "setTransactionExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("useLocalEncoding", ELRedirectTag.class, null, "setUseLocalEncodingExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/logic/package.html0000644000175000017500000001020610404045254033471 0ustar arnaudarnaud00000000000000 Package Documentation for org.apache.strutsel.taglib.logic Package

The "struts-logic-el" 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.



Introduction

The functionality of this tag library is entirely provided by the base "struts-logic" tag library in the Struts distribution. This derived tag library, "struts-logic-el", only provides a different way to evaluate attribute values, which is using the JavaServer Pages Standard Tag Library expression language engine, or the "JSTL EL" for short.

In general, the tags provided in the "struts-logic-el" library are a direct mapping from the "struts-logic" tag library. However, there are several tags in the base Struts tag library which were not "ported" to the "struts-logic-el" tag library, as it was determined that all of their functionality was provided by the JSTL. Information about these "non-ported" tags is provided in the information for the "org.apache.strutsel" package.

In addition, specific to the "struts-logic-el" library, two tags in this library have one additional attribute over their counterpart in the base Struts tag library. These tags are the match and notMatch tags, and the additional attribute is named expr, which is a value intended to be evaluated by the JSTL EL engine. More details about these tags and their attributes is provided in more detailed documentation about the package and its tags.

Logic-EL Functionality

The functionality of the "logic-el" tags can be almost entirely understood from the documentation of the "struts-logic" base tag library. The only exception is the new attribute added to the match and notMatch tags, being the expr attribute.

The match and notMatch tags provide the ability to check to see whether a specific value is (or is not) a substring of a value obtained from either a cookie, request header, request parameter, or bean property. The addition of the expr attribute allows the obtained value to come from an arbitrary expression language value.

Logic-EL Examples

The following are discrete examples of uses of the "logic-el" tags, in no paticular order, but emphasizing the use of JSTL EL values as attribute values.

Example:

   <logic-el:forward name="${forwardName}"/>

Example:

   <%-- Iterates through all HTTP headers. --%>
   <logic-el:iterate id="item" collection="${header}">
    <tr>
     <td><c:out value="${item}.key"/></td>
     <td><c:out value="${item}.value"/></td>
    </tr>
   </logic-el:iterate>

Example:

   <logic-el:match cookie="${cookieName}" value="${cookieValue}">
    Match succeeded.
   </logic-el:match>

Example:

   <logic-el:match expr='${hash["foo"]}' value="${matchValue}">
    Match succeeded.
   </logic-el:match>

Example:

   <logic-el:messagesPresent property="${messageKey}">
    Message found.
   </logic-el:messagesPresent>

Example:

   <logic-el:redirect href="http://localhost:${portnum}/factory" />
 

libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/tiles/0000755000175000017500000000000010423130300031220 5ustar  arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/tiles/ELAddTag.java0000644000175000017500000002004710404045252033445 0ustar  arnaudarnaud00000000000000/*
 * $Id: ELAddTag.java 54933 2004-10-16 17:04:52Z germuska $ 
 *
 * Copyright 1999-2004 The Apache Software Foundation.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.apache.strutsel.taglib.tiles;

import org.apache.struts.taglib.tiles.AddTag;
import javax.servlet.jsp.JspException;
import org.apache.strutsel.taglib.utils.EvalHelper;

/**
 * Adds an element to the surrounding list tag.  Same syntax as
 * <put>.
 *

* This class is a subclass of the class * org.apache.struts.taglib.tiles.AddTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 54933 $ */ public class ELAddTag extends AddTag { /** * Instance variable mapped to "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String valueExpr; /** * Instance variable mapped to "content" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String contentExpr; /** * Instance variable mapped to "direct" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String directExpr; /** * Instance variable mapped to "type" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String typeExpr; /** * Instance variable mapped to "beanName" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String beanNameExpr; /** * Instance variable mapped to "beanProperty" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String beanPropertyExpr; /** * Instance variable mapped to "beanScope" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String beanScopeExpr; /** * Instance variable mapped to "role" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String roleExpr; /** * Getter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getValueExpr() { return (valueExpr); } /** * Getter method for "content" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getContentExpr() { return (contentExpr); } /** * Getter method for "direct" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getDirectExpr() { return (directExpr); } /** * Getter method for "type" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTypeExpr() { return (typeExpr); } /** * Getter method for "beanName" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getBeanNameExpr() { return (beanNameExpr); } /** * Getter method for "beanProperty" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getBeanPropertyExpr() { return (beanPropertyExpr); } /** * Getter method for "beanScope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getBeanScopeExpr() { return (beanScopeExpr); } /** * Getter method for "role" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getRoleExpr() { return (roleExpr); } /** * Setter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setValueExpr(String valueExpr) { this.valueExpr = valueExpr; } /** * Setter method for "content" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setContentExpr(String contentExpr) { this.contentExpr = contentExpr; } /** * Setter method for "direct" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setDirectExpr(String directExpr) { this.directExpr = directExpr; } /** * Setter method for "type" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTypeExpr(String typeExpr) { this.typeExpr = typeExpr; } /** * Setter method for "beanName" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setBeanNameExpr(String beanNameExpr) { this.beanNameExpr = beanNameExpr; } /** * Setter method for "beanProperty" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setBeanPropertyExpr(String beanPropertyExpr) { this.beanPropertyExpr = beanPropertyExpr; } /** * Setter method for "beanScope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setBeanScopeExpr(String beanScopeExpr) { this.beanScopeExpr = beanScopeExpr; } /** * Setter method for "role" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setRoleExpr(String roleExpr) { this.roleExpr = roleExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setValueExpr(null); setContentExpr(null); setDirectExpr(null); setTypeExpr(null); setBeanNameExpr(null); setBeanPropertyExpr(null); setBeanScopeExpr(null); setRoleExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return (super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; if ((string = EvalHelper.evalString("value", getValueExpr(), this, pageContext)) != null) setValue(string); if ((string = EvalHelper.evalString("content", getContentExpr(), this, pageContext)) != null) setContent(string); if ((string = EvalHelper.evalString("direct", getDirectExpr(), this, pageContext)) != null) setDirect(string); if ((string = EvalHelper.evalString("type", getTypeExpr(), this, pageContext)) != null) setType(string); if ((string = EvalHelper.evalString("beanName", getBeanNameExpr(), this, pageContext)) != null) setBeanName(string); if ((string = EvalHelper.evalString("beanProperty", getBeanPropertyExpr(), this, pageContext)) != null) setBeanProperty(string); if ((string = EvalHelper.evalString("beanScope", getBeanScopeExpr(), this, pageContext)) != null) setBeanScope(string); if ((string = EvalHelper.evalString("role", getRoleExpr(), this, pageContext)) != null) setRole(string); } } ././@LongLink0000644000175000017500000000015310423140531011314 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/tiles/ELAddTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/tiles/ELAddTagBeanInf0000644000175000017500000000621510404045254033753 0ustar arnaudarnaud00000000000000/* * $Id: ELAddTagBeanInfo.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.tiles; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.tiles.ELAddTag class. It is * needed to override the default mapping of custom tag attribute names to * class attribute names. */ public class ELAddTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("value", ELAddTag.class, null, "setValueExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("content", ELAddTag.class, null, "setContentExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("direct", ELAddTag.class, null, "setDirectExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("type", ELAddTag.class, null, "setTypeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("beanName", ELAddTag.class, null, "setBeanNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("beanProperty", ELAddTag.class, null, "setBeanPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("beanScope", ELAddTag.class, null, "setBeanScopeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("role", ELAddTag.class, null, "setRoleExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } ././@LongLink0000644000175000017500000000015210423140531011313 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/tiles/ELDefinitionTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/tiles/ELDefinitionTag0000644000175000017500000001502310404045254034125 0ustar arnaudarnaud00000000000000/* * $Id: ELDefinitionTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.tiles; import org.apache.struts.taglib.tiles.DefinitionTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * This is the tag handler for <tiles:definition>, which defines * a tiles (or template / component). Definition is put in requested context and can be * used in <tiles:insert>. *

* This class is a subclass of the class * org.apache.struts.taglib.tiles.DefinitionTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 54933 $ */ public class ELDefinitionTag extends DefinitionTag { /** * Instance variable mapped to "id" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String idExpr; /** * Instance variable mapped to "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String scopeExpr; /** * Instance variable mapped to "template" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String templateExpr; /** * Instance variable mapped to "page" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String pageExpr; /** * Instance variable mapped to "role" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String roleExpr; /** * Instance variable mapped to "extends" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String extendsExpr; /** * Getter method for "id" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getIdExpr() { return (idExpr); } /** * Getter method for "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getScopeExpr() { return (scopeExpr); } /** * Getter method for "template" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTemplateExpr() { return (templateExpr); } /** * Getter method for "page" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPageExpr() { return (pageExpr); } /** * Getter method for "role" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getRoleExpr() { return (roleExpr); } /** * Getter method for "extends" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getExtendsExpr() { return (extendsExpr); } /** * Setter method for "id" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setIdExpr(String idExpr) { this.idExpr = idExpr; } /** * Setter method for "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setScopeExpr(String scopeExpr) { this.scopeExpr = scopeExpr; } /** * Setter method for "template" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTemplateExpr(String templateExpr) { this.templateExpr = templateExpr; } /** * Setter method for "page" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPageExpr(String pageExpr) { this.pageExpr = pageExpr; } /** * Setter method for "role" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setRoleExpr(String roleExpr) { this.roleExpr = roleExpr; } /** * Setter method for "extends" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setExtendsExpr(String extendsExpr) { this.extendsExpr = extendsExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setIdExpr(null); setScopeExpr(null); setTemplateExpr(null); setPageExpr(null); setRoleExpr(null); setExtendsExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return (super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; if ((string = EvalHelper.evalString("id", getIdExpr(), this, pageContext)) != null) setId(string); if ((string = EvalHelper.evalString("scope", getScopeExpr(), this, pageContext)) != null) setScope(string); if ((string = EvalHelper.evalString("template", getTemplateExpr(), this, pageContext)) != null) setTemplate(string); if ((string = EvalHelper.evalString("page", getPageExpr(), this, pageContext)) != null) setPage(string); if ((string = EvalHelper.evalString("role", getRoleExpr(), this, pageContext)) != null) setRole(string); if ((string = EvalHelper.evalString("extends", getExtendsExpr(), this, pageContext)) != null) setExtends(string); } } ././@LongLink0000644000175000017500000000016210423140531011314 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/tiles/ELDefinitionTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/tiles/ELDefinitionTag0000644000175000017500000000541210404045252034124 0ustar arnaudarnaud00000000000000/* * $Id: ELDefinitionTagBeanInfo.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.tiles; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.tiles.ELDefinitionTag class. It is * needed to override the default mapping of custom tag attribute names to * class attribute names. */ public class ELDefinitionTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("id", ELDefinitionTag.class, null, "setIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("scope", ELDefinitionTag.class, null, "setScopeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("template", ELDefinitionTag.class, null, "setTemplateExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("page", ELDefinitionTag.class, null, "setPageExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("role", ELDefinitionTag.class, null, "setRoleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("extends", ELDefinitionTag.class, null, "setExtendsExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } ././@LongLink0000644000175000017500000000015410423140531011315 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/tiles/ELGetAttributeTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/tiles/ELGetAttributeT0000644000175000017500000001136110404045252034127 0ustar arnaudarnaud00000000000000/* * $Id: ELGetAttributeTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.tiles; import org.apache.struts.taglib.tiles.GetAttributeTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * This is the tag handler for <tiles-el:get>, which gets * content from the request scope and either includes the content or prints * it, depending upon the value of the content's direct attribute. *

* This tag is intended to be compatible with the same tag from Templates * (David Geary). Implementation extends InsertTag for facility (no so well). * The only difference is the default value of attribute 'ignore', which is * true for this tag (default behavior of David Geary's * templates). *

* This class is a subclass of the class * org.apache.struts.taglib.tiles.GetAttributeTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 54933 $ */ public class ELGetAttributeTag extends GetAttributeTag { /** * Instance variable mapped to "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String nameExpr; /** * Instance variable mapped to "ignore" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String ignoreExpr; /** * Instance variable mapped to "role" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String roleExpr; /** * Getter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getNameExpr() { return (nameExpr); } /** * Getter method for "ignore" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getIgnoreExpr() { return (ignoreExpr); } /** * Getter method for "role" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getRoleExpr() { return (roleExpr); } /** * Setter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setNameExpr(String nameExpr) { this.nameExpr = nameExpr; } /** * Setter method for "ignore" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setIgnoreExpr(String ignoreExpr) { this.ignoreExpr = ignoreExpr; } /** * Setter method for "role" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setRoleExpr(String roleExpr) { this.roleExpr = roleExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setNameExpr(null); setIgnoreExpr(null); setRoleExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return (super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; Boolean bool = null; if ((string = EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) setName(string); if ((bool = EvalHelper.evalBoolean("ignore", getIgnoreExpr(), this, pageContext)) != null) setIgnore(bool.booleanValue()); if ((string = EvalHelper.evalString("role", getRoleExpr(), this, pageContext)) != null) setRole(string); } } ././@LongLink0000644000175000017500000000016410423140531011316 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/tiles/ELGetAttributeTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/tiles/ELGetAttributeT0000644000175000017500000000421110404045254034125 0ustar arnaudarnaud00000000000000/* * $Id: ELGetAttributeTagBeanInfo.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.tiles; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.tiles.ELGetAttributeTag class. It is * needed to override the default mapping of custom tag attribute names to * class attribute names. */ public class ELGetAttributeTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("name", ELGetAttributeTag.class, null, "setNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("ignore", ELGetAttributeTag.class, null, "setIgnoreExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("role", ELGetAttributeTag.class, null, "setRoleExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/tiles/ELGetTag.java0000644000175000017500000001265010404045254033477 0ustar arnaudarnaud00000000000000/* * $Id: ELGetTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.tiles; import org.apache.struts.taglib.tiles.GetTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * This is the tag handler for <tiles-el:get>, which gets * content from the request scope and either includes the content or prints * it, depending upon the value of the content's direct attribute. *

* This tag is intended to be compatible with the same tag from Templates * (David Geary). Implementation extends InsertTag for facility (no so well). * The only difference is the default value of attribute 'ignore', which is * true for this tag (default behavior of David Geary's * templates). *

* This class is a subclass of the class * org.apache.struts.taglib.tiles.GetTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 54933 $ */ public class ELGetTag extends GetTag { /** * Instance variable mapped to "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String nameExpr; /** * Instance variable mapped to "ignore" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String ignoreExpr; /** * Instance variable mapped to "flush" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String flushExpr; /** * Instance variable mapped to "role" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String roleExpr; /** * Getter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getNameExpr() { return (nameExpr); } /** * Getter method for "ignore" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getIgnoreExpr() { return (ignoreExpr); } /** * Getter method for "flush" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getFlushExpr() { return (flushExpr); } /** * Getter method for "role" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getRoleExpr() { return (roleExpr); } /** * Setter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setNameExpr(String nameExpr) { this.nameExpr = nameExpr; } /** * Setter method for "ignore" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setIgnoreExpr(String ignoreExpr) { this.ignoreExpr = ignoreExpr; } /** * Setter method for "flush" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setFlushExpr(String flushExpr) { this.flushExpr = flushExpr; } /** * Setter method for "role" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setRoleExpr(String roleExpr) { this.roleExpr = roleExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setNameExpr(null); setIgnoreExpr(null); setFlushExpr(null); setRoleExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return (super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; Boolean bool = null; if ((string = EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) setName(string); if ((bool = EvalHelper.evalBoolean("ignore", getIgnoreExpr(), this, pageContext)) != null) setIgnore(bool.booleanValue()); if ((string = EvalHelper.evalString("flush", getFlushExpr(), this, pageContext)) != null) setFlush(string); if ((string = EvalHelper.evalString("role", getRoleExpr(), this, pageContext)) != null) setRole(string); } } ././@LongLink0000644000175000017500000000015310423140531011314 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/tiles/ELGetTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/tiles/ELGetTagBeanInf0000644000175000017500000000444510404045254034005 0ustar arnaudarnaud00000000000000/* * $Id: ELGetTagBeanInfo.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.tiles; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.tiles.ELGetTag class. It is * needed to override the default mapping of custom tag attribute names to * class attribute names. */ public class ELGetTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("name", ELGetTag.class, null, "setNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("ignore", ELGetTag.class, null, "setIgnoreExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("flush", ELGetTag.class, null, "setFlushExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("role", ELGetTag.class, null, "setRoleExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } ././@LongLink0000644000175000017500000000015710423140531011320 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/tiles/ELImportAttributeTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/tiles/ELImportAttribu0000644000175000017500000001063610404045252034211 0ustar arnaudarnaud00000000000000/* * $Id: ELImportAttributeTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.tiles; import org.apache.struts.taglib.tiles.ImportAttributeTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Import attribute from component to requested scope. * Attribute name and scope are optional. If not specified, all component * attributes are imported in page scope. *

* This class is a subclass of the class * org.apache.struts.taglib.tiles.ImportAttributeTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 54933 $ */ public class ELImportAttributeTag extends ImportAttributeTag { /** * Instance variable mapped to "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String scopeExpr; /** * Instance variable mapped to "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String nameExpr; /** * Instance variable mapped to "ignore" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String ignoreExpr; /** * Getter method for "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getScopeExpr() { return (scopeExpr); } /** * Getter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getNameExpr() { return (nameExpr); } /** * Getter method for "ignore" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getIgnoreExpr() { return (ignoreExpr); } /** * Setter method for "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setScopeExpr(String scopeExpr) { this.scopeExpr = scopeExpr; } /** * Setter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setNameExpr(String nameExpr) { this.nameExpr = nameExpr; } /** * Setter method for "ignore" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setIgnoreExpr(String ignoreExpr) { this.ignoreExpr = ignoreExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setScopeExpr(null); setNameExpr(null); setIgnoreExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return (super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; Boolean bool = null; if ((string = EvalHelper.evalString("scope", getScopeExpr(), this, pageContext)) != null) setScope(string); if ((string = EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) setName(string); if ((bool = EvalHelper.evalBoolean("ignore", getIgnoreExpr(), this, pageContext)) != null) setIgnore(bool.booleanValue()); } } ././@LongLink0000644000175000017500000000016710423140531011321 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/tiles/ELImportAttributeTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/tiles/ELImportAttribu0000644000175000017500000000423510404045254034211 0ustar arnaudarnaud00000000000000/* * $Id: ELImportAttributeTagBeanInfo.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.tiles; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.tiles.ELImportAttributeTag class. It is * needed to override the default mapping of custom tag attribute names to * class attribute names. */ public class ELImportAttributeTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("scope", ELImportAttributeTag.class, null, "setScopeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("name", ELImportAttributeTag.class, null, "setNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("ignore", ELImportAttributeTag.class, null, "setIgnoreExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } ././@LongLink0000644000175000017500000000015710423140531011320 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/tiles/ELInitDefinitionsTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/tiles/ELInitDefinitio0000644000175000017500000000704210404045252034137 0ustar arnaudarnaud00000000000000/* * $Id: ELInitDefinitionsTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.tiles; import org.apache.struts.taglib.tiles.InitDefinitionsTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Init definitions factory. *

* This class is a subclass of the class * org.apache.struts.taglib.tiles.InitDefinitionsTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 54933 $ */ public class ELInitDefinitionsTag extends InitDefinitionsTag { /** * Instance variable mapped to "file" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String fileExpr; /** * Instance variable mapped to "classname" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String classnameExpr; /** * Getter method for "file" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getFileExpr() { return (fileExpr); } /** * Getter method for "classname" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getClassnameExpr() { return (classnameExpr); } /** * Setter method for "file" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setFileExpr(String fileExpr) { this.fileExpr = fileExpr; } /** * Setter method for "classname" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setClassnameExpr(String classnameExpr) { this.classnameExpr = classnameExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setFileExpr(null); setClassnameExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return (super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; if ((string = EvalHelper.evalString("file", getFileExpr(), this, pageContext)) != null) setFile(string); if ((string = EvalHelper.evalString("classname", getClassnameExpr(), this, pageContext)) != null) setClassname(string); } } ././@LongLink0000644000175000017500000000016710423140531011321 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/tiles/ELInitDefinitionsTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/tiles/ELInitDefinitio0000644000175000017500000000370510404045252034141 0ustar arnaudarnaud00000000000000/* * $Id: ELInitDefinitionsTagBeanInfo.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.tiles; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.tiles.ELInitDefinitionsTag class. It is * needed to override the default mapping of custom tag attribute names to * class attribute names. */ public class ELInitDefinitionsTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("file", ELInitDefinitionsTag.class, null, "setFileExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("classname", ELInitDefinitionsTag.class, null, "setClassnameExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } ././@LongLink0000644000175000017500000000014610423140531011316 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/tiles/ELInsertTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/tiles/ELInsertTag.jav0000644000175000017500000003173210404045252034063 0ustar arnaudarnaud00000000000000/* * $Id: ELInsertTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.tiles; import org.apache.struts.taglib.tiles.InsertTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * This is the tag handler for <tiles:insert>, which includes * a template. The tag's body content consists of <tiles:put> * tags, which are accessed by <tiles:get> in the template. *

* This class is a subclass of the class * org.apache.struts.taglib.tiles.InsertTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 54933 $ */ public class ELInsertTag extends InsertTag { /** * Instance variable mapped to "template" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String templateExpr; /** * Instance variable mapped to "component" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String componentExpr; /** * Instance variable mapped to "page" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String pageExpr; /** * Instance variable mapped to "definition" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String definitionExpr; /** * Instance variable mapped to "attribute" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String attributeExpr; /** * Instance variable mapped to "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String nameExpr; /** * Instance variable mapped to "beanName" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String beanNameExpr; /** * Instance variable mapped to "beanProperty" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String beanPropertyExpr; /** * Instance variable mapped to "beanScope" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String beanScopeExpr; /** * Instance variable mapped to "flush" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String flushExpr; /** * (Mapping set in associated BeanInfo class.) * Instance variable mapped to "ignore" tag attribute. */ private String ignoreExpr; /** * Instance variable mapped to "role" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String roleExpr; /** * Instance variable mapped to "controllerUrl" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String controllerUrlExpr; /** * Instance variable mapped to "controllerClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String controllerClassExpr; /** * Getter method for "template" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTemplateExpr() { return (templateExpr); } /** * Getter method for "component" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getComponentExpr() { return (componentExpr); } /** * Getter method for "page" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getPageExpr() { return (pageExpr); } /** * Getter method for "definition" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getDefinitionExpr() { return (definitionExpr); } /** * Getter method for "attribute" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getAttributeExpr() { return (attributeExpr); } /** * Getter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getNameExpr() { return (nameExpr); } /** * Getter method for "beanName" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getBeanNameExpr() { return (beanNameExpr); } /** * Getter method for "beanProperty" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getBeanPropertyExpr() { return (beanPropertyExpr); } /** * Getter method for "beanScope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getBeanScopeExpr() { return (beanScopeExpr); } /** * Getter method for "flush" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getFlushExpr() { return (flushExpr); } /** * Getter method for "ignore" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getIgnoreExpr() { return (ignoreExpr); } /** * Getter method for "role" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getRoleExpr() { return (roleExpr); } /** * Getter method for "controllerUrl" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getControllerUrlExpr() { return (controllerUrlExpr); } /** * Getter method for "controllerClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getControllerClassExpr() { return (controllerClassExpr); } /** * Setter method for "template" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTemplateExpr(String templateExpr) { this.templateExpr = templateExpr; } /** * Setter method for "component" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setComponentExpr(String componentExpr) { this.componentExpr = componentExpr; } /** * Setter method for "page" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setPageExpr(String pageExpr) { this.pageExpr = pageExpr; } /** * Setter method for "definition" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setDefinitionExpr(String definitionExpr) { this.definitionExpr = definitionExpr; } /** * Setter method for "attribute" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setAttributeExpr(String attributeExpr) { this.attributeExpr = attributeExpr; } /** * Setter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setNameExpr(String nameExpr) { this.nameExpr = nameExpr; } /** * Setter method for "beanName" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setBeanNameExpr(String beanNameExpr) { this.beanNameExpr = beanNameExpr; } /** * Setter method for "beanProperty" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setBeanPropertyExpr(String beanPropertyExpr) { this.beanPropertyExpr = beanPropertyExpr; } /** * Setter method for "beanScope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setBeanScopeExpr(String beanScopeExpr) { this.beanScopeExpr = beanScopeExpr; } /** * Setter method for "flush" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setFlushExpr(String flushExpr) { this.flushExpr = flushExpr; } /** * Setter method for "ignore" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setIgnoreExpr(String ignoreExpr) { this.ignoreExpr = ignoreExpr; } /** * Setter method for "role" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setRoleExpr(String roleExpr) { this.roleExpr = roleExpr; } /** * Setter method for "controllerUrl" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setControllerUrlExpr(String controllerUrlExpr) { this.controllerUrlExpr = controllerUrlExpr; } /** * Setter method for "controllerClass" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setControllerClassExpr(String controllerClassExpr) { this.controllerClassExpr = controllerClassExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setTemplateExpr(null); setComponentExpr(null); setPageExpr(null); setDefinitionExpr(null); setAttributeExpr(null); setNameExpr(null); setBeanNameExpr(null); setBeanPropertyExpr(null); setBeanScopeExpr(null); setFlushExpr(null); setIgnoreExpr(null); setRoleExpr(null); setControllerUrlExpr(null); setControllerClassExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return (super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; Boolean bool = null; if ((string = EvalHelper.evalString("template", getTemplateExpr(), this, pageContext)) != null) setTemplate(string); if ((string = EvalHelper.evalString("component", getComponentExpr(), this, pageContext)) != null) setComponent(string); if ((string = EvalHelper.evalString("page", getPageExpr(), this, pageContext)) != null) setPage(string); if ((string = EvalHelper.evalString("definition", getDefinitionExpr(), this, pageContext)) != null) setDefinition(string); if ((string = EvalHelper.evalString("attribute", getAttributeExpr(), this, pageContext)) != null) setAttribute(string); if ((string = EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) setName(string); if ((string = EvalHelper.evalString("beanName", getBeanNameExpr(), this, pageContext)) != null) setBeanName(string); if ((string = EvalHelper.evalString("beanProperty", getBeanPropertyExpr(), this, pageContext)) != null) setBeanProperty(string); if ((string = EvalHelper.evalString("beanScope", getBeanScopeExpr(), this, pageContext)) != null) setBeanScope(string); if ((string = EvalHelper.evalString("flush", getFlushExpr(), this, pageContext)) != null) setFlush(string); if ((bool = EvalHelper.evalBoolean("ignore", getIgnoreExpr(), this, pageContext)) != null) setIgnore(bool.booleanValue()); if ((string = EvalHelper.evalString("role", getRoleExpr(), this, pageContext)) != null) setRole(string); if ((string = EvalHelper.evalString("controllerUrl", getControllerUrlExpr(), this, pageContext)) != null) setControllerUrl(string); if ((string = EvalHelper.evalString("controllerClass", getControllerClassExpr(), this, pageContext)) != null) setControllerClass(string); } } ././@LongLink0000644000175000017500000000015610423140531011317 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/tiles/ELInsertTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/tiles/ELInsertTagBean0000644000175000017500000001073710404045252034074 0ustar arnaudarnaud00000000000000/* * $Id: ELInsertTagBeanInfo.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.tiles; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.tiles.ELAddTag class. It is * needed to override the default mapping of custom tag attribute names to * class attribute names. */ public class ELInsertTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("template", ELInsertTag.class, null, "setTemplateExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("component", ELInsertTag.class, null, "setComponentExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("page", ELInsertTag.class, null, "setPageExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("definition", ELInsertTag.class, null, "setDefinitionExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("attribute", ELInsertTag.class, null, "setAttributeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("name", ELInsertTag.class, null, "setNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("beanName", ELInsertTag.class, null, "setBeanNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("beanProperty", ELInsertTag.class, null, "setBeanPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("beanScope", ELInsertTag.class, null, "setBeanScopeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("flush", ELInsertTag.class, null, "setFlushExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("ignore", ELInsertTag.class, null, "setIgnoreExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("role", ELInsertTag.class, null, "setRoleExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("controllerUrl", ELInsertTag.class, null, "setControllerUrlExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("controllerClass", ELInsertTag.class, null, "setControllerClassExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } ././@LongLink0000644000175000017500000000014710423140531011317 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/tiles/ELPutListTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/tiles/ELPutListTag.ja0000644000175000017500000000534010404045252034031 0ustar arnaudarnaud00000000000000/* * $Id: ELPutListTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.tiles; import org.apache.struts.taglib.tiles.PutListTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * PutList tag implementation. *

* This class is a subclass of the class * org.apache.struts.taglib.tiles.PutListTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 54933 $ */ public class ELPutListTag extends PutListTag { /** * Instance variable mapped to "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String nameExpr; /** * Getter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getNameExpr() { return (nameExpr); } /** * Setter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setNameExpr(String nameExpr) { this.nameExpr = nameExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setNameExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return (super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; if ((string = EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) setName(string); } } ././@LongLink0000644000175000017500000000015710423140531011320 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/tiles/ELPutListTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/tiles/ELPutListTagBea0000644000175000017500000000327710404045254034061 0ustar arnaudarnaud00000000000000/* * $Id: ELPutListTagBeanInfo.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.tiles; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.tiles.ELPutListTag class. It is * needed to override the default mapping of custom tag attribute names to * class attribute names. */ public class ELPutListTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("name", ELPutListTag.class, null, "setNameExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/tiles/ELPutTag.java0000644000175000017500000002443710404045252033534 0ustar arnaudarnaud00000000000000/* * $Id: ELPutTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.tiles; import org.apache.struts.taglib.tiles.PutTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Put an attribute in enclosing attribute container tag. * Enclosing attribute container tag can be : <insert> or <definition>. * Exception is thrown if no appropriate tag can be found. * Put tag can have following atributes : *

  • *
      name : Name of the attribute
    *
      value | content : value to put as attribute
    *
      type : value type. Only valid if value is a String and is set by * value="something" or by a bean. * Possible type are : string (value is used as direct string), * page | template (value is used as a page url to insert), * definition (value is used as a definition name to insert)
    *
      direct : Specify if value is to be used as a direct string or as a * page url to insert. This is another way to specify the type. It only apply * if value is set as a string, and type is not present.
    *
      beanName : Name of a bean used for setting value. Only valid if value is not set. * If property is specified, value come from bean's property. Otherwise, bean * itself is used for value.
    *
      beanProperty : Name of the property used for retrieving value.
    *
      beanScope : Scope containing bean.
    *
      role : Role to check when 'insert' will be called. If enclosing tag is * <insert>, role is checked immediately. If enclosing tag is * <definition>, role will be checked when this definition will be * inserted.
    *
  • * Value can also come from tag body. Tag body is taken into account only if * value is not set by one of the tag attributes. In this case Attribute type is * "string", unless tag body define another type. *

    * This class is a subclass of the class * org.apache.struts.taglib.tiles.PutTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 54933 $ */ public class ELPutTag extends PutTag { /** * Instance variable mapped to "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String nameExpr; /** * Instance variable mapped to "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String valueExpr; /** * Instance variable mapped to "content" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String contentExpr; /** * Instance variable mapped to "direct" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String directExpr; /** * Instance variable mapped to "type" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String typeExpr; /** * Instance variable mapped to "beanName" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String beanNameExpr; /** * Instance variable mapped to "beanProperty" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String beanPropertyExpr; /** * Instance variable mapped to "beanScope" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String beanScopeExpr; /** * Instance variable mapped to "role" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String roleExpr; /** * Getter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getNameExpr() { return (nameExpr); } /** * Getter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getValueExpr() { return (valueExpr); } /** * Getter method for "content" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getContentExpr() { return (contentExpr); } /** * Getter method for "direct" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getDirectExpr() { return (directExpr); } /** * Getter method for "type" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getTypeExpr() { return (typeExpr); } /** * Getter method for "beanName" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getBeanNameExpr() { return (beanNameExpr); } /** * Getter method for "beanProperty" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getBeanPropertyExpr() { return (beanPropertyExpr); } /** * Getter method for "beanScope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getBeanScopeExpr() { return (beanScopeExpr); } /** * Getter method for "role" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getRoleExpr() { return (roleExpr); } /** * Setter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setNameExpr(String nameExpr) { this.nameExpr = nameExpr; } /** * Setter method for "value" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setValueExpr(String valueExpr) { this.valueExpr = valueExpr; } /** * Setter method for "content" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setContentExpr(String contentExpr) { this.contentExpr = contentExpr; } /** * Setter method for "direct" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setDirectExpr(String directExpr) { this.directExpr = directExpr; } /** * Setter method for "type" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setTypeExpr(String typeExpr) { this.typeExpr = typeExpr; } /** * Setter method for "beanName" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setBeanNameExpr(String beanNameExpr) { this.beanNameExpr = beanNameExpr; } /** * Setter method for "beanProperty" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setBeanPropertyExpr(String beanPropertyExpr) { this.beanPropertyExpr = beanPropertyExpr; } /** * Setter method for "beanScope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setBeanScopeExpr(String beanScopeExpr) { this.beanScopeExpr = beanScopeExpr; } /** * Setter method for "role" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setRoleExpr(String roleExpr) { this.roleExpr = roleExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setNameExpr(null); setValueExpr(null); setContentExpr(null); setDirectExpr(null); setTypeExpr(null); setBeanNameExpr(null); setBeanPropertyExpr(null); setBeanScopeExpr(null); setRoleExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return (super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; if ((string = EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) setName(string); if ((string = EvalHelper.evalString("value", getValueExpr(), this, pageContext)) != null) setValue(string); if ((string = EvalHelper.evalString("content", getContentExpr(), this, pageContext)) != null) setContent(string); if ((string = EvalHelper.evalString("direct", getDirectExpr(), this, pageContext)) != null) setDirect(string); if ((string = EvalHelper.evalString("type", getTypeExpr(), this, pageContext)) != null) setType(string); if ((string = EvalHelper.evalString("beanName", getBeanNameExpr(), this, pageContext)) != null) setBeanName(string); if ((string = EvalHelper.evalString("beanProperty", getBeanPropertyExpr(), this, pageContext)) != null) setBeanProperty(string); if ((string = EvalHelper.evalString("beanScope", getBeanScopeExpr(), this, pageContext)) != null) setBeanScope(string); if ((string = EvalHelper.evalString("role", getRoleExpr(), this, pageContext)) != null) setRole(string); } } ././@LongLink0000644000175000017500000000015310423140531011314 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/tiles/ELPutTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/tiles/ELPutTagBeanInf0000644000175000017500000000653510404045252034036 0ustar arnaudarnaud00000000000000/* * $Id: ELPutTagBeanInfo.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.tiles; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.tiles.ELPutTag class. It is * needed to override the default mapping of custom tag attribute names to * class attribute names. */ public class ELPutTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("name", ELPutTag.class, null, "setNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("value", ELPutTag.class, null, "setValueExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("content", ELPutTag.class, null, "setContentExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("direct", ELPutTag.class, null, "setDirectExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("type", ELPutTag.class, null, "setTypeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("beanName", ELPutTag.class, null, "setBeanNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("beanProperty", ELPutTag.class, null, "setBeanPropertyExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("beanScope", ELPutTag.class, null, "setBeanScopeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("role", ELPutTag.class, null, "setRoleExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } ././@LongLink0000644000175000017500000000015410423140531011315 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/tiles/ELUseAttributeTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/tiles/ELUseAttributeT0000644000175000017500000001335010404045252034144 0ustar arnaudarnaud00000000000000/* * $Id: ELUseAttributeTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.tiles; import org.apache.struts.taglib.tiles.UseAttributeTag; import javax.servlet.jsp.JspException; import org.apache.strutsel.taglib.utils.EvalHelper; /** * Custom tag exposing a component attribute to page. *

    * This class is a subclass of the class * org.apache.struts.taglib.tiles.UseAttributeTag which provides most of * the described functionality. This subclass allows all attribute values to * be specified as expressions utilizing the JavaServer Pages Standard Library * expression language. * * @version $Rev: 54933 $ */ public class ELUseAttributeTag extends UseAttributeTag { /** * Instance variable mapped to "id" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String idExpr; /** * Instance variable mapped to "classname" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String classnameExpr; /** * Instance variable mapped to "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String scopeExpr; /** * Instance variable mapped to "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String nameExpr; /** * Instance variable mapped to "ignore" tag attribute. * (Mapping set in associated BeanInfo class.) */ private String ignoreExpr; /** * Getter method for "id" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getIdExpr() { return (idExpr); } /** * Getter method for "classname" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getClassnameExpr() { return (classnameExpr); } /** * Getter method for "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getScopeExpr() { return (scopeExpr); } /** * Getter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getNameExpr() { return (nameExpr); } /** * Getter method for "ignore" tag attribute. * (Mapping set in associated BeanInfo class.) */ public String getIgnoreExpr() { return (ignoreExpr); } /** * Setter method for "id" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setIdExpr(String idExpr) { this.idExpr = idExpr; } /** * Setter method for "classname" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setClassnameExpr(String classnameExpr) { this.classnameExpr = classnameExpr; } /** * Setter method for "scope" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setScopeExpr(String scopeExpr) { this.scopeExpr = scopeExpr; } /** * Setter method for "name" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setNameExpr(String nameExpr) { this.nameExpr = nameExpr; } /** * Setter method for "ignore" tag attribute. * (Mapping set in associated BeanInfo class.) */ public void setIgnoreExpr(String ignoreExpr) { this.ignoreExpr = ignoreExpr; } /** * Resets attribute values for tag reuse. */ public void release() { super.release(); setIdExpr(null); setClassnameExpr(null); setScopeExpr(null); setNameExpr(null); setIgnoreExpr(null); } /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { evaluateExpressions(); return (super.doStartTag()); } /** * Processes all attribute values which use the JSTL expression evaluation * engine to determine their values. * * @exception JspException if a JSP exception has occurred */ private void evaluateExpressions() throws JspException { String string = null; Boolean bool = null; if ((string = EvalHelper.evalString("id", getIdExpr(), this, pageContext)) != null) setId(string); if ((string = EvalHelper.evalString("classname", getClassnameExpr(), this, pageContext)) != null) setClassname(string); if ((string = EvalHelper.evalString("scope", getScopeExpr(), this, pageContext)) != null) setScope(string); if ((string = EvalHelper.evalString("name", getNameExpr(), this, pageContext)) != null) setName(string); if ((bool = EvalHelper.evalBoolean("ignore", getIgnoreExpr(), this, pageContext)) != null) setIgnore(bool.booleanValue()); } } ././@LongLink0000644000175000017500000000016410423140531011316 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/tiles/ELUseAttributeTagBeanInfo.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/tiles/ELUseAttributeT0000644000175000017500000000510310404045252034141 0ustar arnaudarnaud00000000000000/* * $Id: ELUseAttributeTagBeanInfo.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.tiles; import java.beans.PropertyDescriptor; import java.beans.IntrospectionException; import java.util.ArrayList; import java.beans.SimpleBeanInfo; /** * This is the BeanInfo descriptor for the * org.apache.strutsel.taglib.tiles.ELUseAttributeTag class. It is * needed to override the default mapping of custom tag attribute names to * class attribute names. */ public class ELUseAttributeTagBeanInfo extends SimpleBeanInfo { public PropertyDescriptor[] getPropertyDescriptors() { ArrayList proplist = new ArrayList(); try { proplist.add(new PropertyDescriptor("id", ELUseAttributeTag.class, null, "setIdExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("classname", ELUseAttributeTag.class, null, "setClassnameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("scope", ELUseAttributeTag.class, null, "setScopeExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("name", ELUseAttributeTag.class, null, "setNameExpr")); } catch (IntrospectionException ex) {} try { proplist.add(new PropertyDescriptor("ignore", ELUseAttributeTag.class, null, "setIgnoreExpr")); } catch (IntrospectionException ex) {} PropertyDescriptor[] result = new PropertyDescriptor[proplist.size()]; return ((PropertyDescriptor[]) proplist.toArray(result)); } } libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/utils/0000755000175000017500000000000010423130300031240 5ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000014510423140531011315 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/utils/EvalHelper.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/taglib/utils/EvalHelper.java0000644000175000017500000001076510404045252034155 0ustar arnaudarnaud00000000000000/* * $Id: EvalHelper.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.utils; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.Tag; import org.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager; /** * This class is used in the evaluateExpressions method of each * Tag class. It is used to process the original attribute value through the * JSTL EL engine to produce an evaluated value. It provides functions to * evaluate the expression assuming it is an Object, String, Integer, or * Boolean result. */ public final class EvalHelper { private EvalHelper() {} /** * Evaluates the attribute value in the JSTL EL engine, returning the raw * Object value of the evaluated expression. If the original expression is * null, or the resulting value is null, it will return null. */ public static Object eval(String attrName, String attrValue, Tag tagObject, PageContext pageContext) throws JspException { Object result = null; if (attrValue != null) { result = ExpressionEvaluatorManager. evaluate(attrName, attrValue, Object.class, tagObject, pageContext); } return (result); } /** * Evaluates the attribute value in the JSTL EL engine, assuming the * resulting value is a String object. If the original expression is null, * or the resulting value is null, it will return null. */ public static String evalString(String attrName, String attrValue, Tag tagObject, PageContext pageContext) throws JspException { Object result = null; if (attrValue != null) { result = ExpressionEvaluatorManager. evaluate(attrName, attrValue, String.class, tagObject, pageContext); } return ((String) result); } /** * Evaluates the attribute value in the JSTL EL engine, assuming the * resulting value is an Integer object. If the original expression is * null, or the resulting value is null, it will return null. */ public static Integer evalInteger(String attrName, String attrValue, Tag tagObject, PageContext pageContext) throws JspException { Object result = null; if (attrValue != null) { result = ExpressionEvaluatorManager. evaluate(attrName, attrValue, Integer.class, tagObject, pageContext); } return ((Integer) result); } /** * Evaluates the attribute value in the JSTL EL engine, assuming the * resulting value is an Boolean object. If the original expression is * null, or the resulting value is null, it will return null. */ public static Boolean evalBoolean(String attrName, String attrValue, Tag tagObject, PageContext pageContext) throws JspException { Object result = null; if (attrValue != null) { result = ExpressionEvaluatorManager. evaluate(attrName, attrValue, Boolean.class, tagObject, pageContext); } return ((Boolean) result); } } libstruts1.2-java-1.2.9/contrib/struts-el/src/share/org/apache/strutsel/package.html0000644000175000017500000002122310404045252031131 0ustar arnaudarnaud00000000000000 Package Documentation for org.apache.strutsel Package

    The "Struts-EL" library contains a set of tag libraries, all of whose classes are derived from classes in the Struts tag libraries. The Struts-EL tags all implement the same attributes as their counterparts in the base Struts tag libraries. The difference provided by Struts-EL is that the tag attribute values are not evaluated as run-time scriptlets (sometimes called "rtexprvalue"s), but are instead evaluated by the expression language engine in the JavaServer Pages Standard Tag Library (often called the JSTL).


    Introduction

    The Struts-EL library is intended to be used alongside the Struts library, and with the JSTL. In the development of the Struts-EL library, each tag in the Struts tag libraries was examined to see if all of its functionality is covered in an existing tag in the JSTL. If this was the case, then it was decided to not include a version of this tag in the Struts-EL library. The tags that were "ported" to Struts-EL were deemed to have functionality which the JSTL could not directly cover.

    The rest of this package description will briefly review the Struts tags which were not ported to the Struts-EL library (or which were "on the bubble", and why. The detailed package descriptions for each section of the library (html-el, logic-el, and bean-el) will demonstrate in detail the usage of the Struts-EL tags, focusing on attribute value evaluation issues. Details of the operation of these tags in the Struts framework can be learned from the package descriptions and documentation for the base Struts library.


    HTML-EL tag library

    This is a short section. The JSTL does not include any functionality for generating HTML elements, thus every tag in the "struts-html" tag library was ported to the "struts-html-el" tag library.

    Logic-EL tag library

    The following table lists the "struts-logic" tags which were not ported to the "struts-logic-el" tag library, including which JSTL elements or features will provide that functionality. Examples after the table will demonstrate these.

    Struts-Logic tag JSTL tags or feature
    empty c:if, c:when, EL
    equal c:if, c:when, EL
    greaterEqual c:if, c:when, EL
    greaterThan c:if, c:when, EL
    lessEqual c:if, c:when, EL
    lessThan c:if, c:when, EL
    notEmpty c:if, c:when, EL
    notEqual c:if, c:when, EL

    The following are some examples of "Before" and "After", where the first example is pure Struts usage, and the second example will be pure JSTL usage, not involving Struts-EL at all.

    Struts Example:

       <logic:empty name="foo" property="stuff">
        Some stuff
       </logic:empty>

    JSTL Version:

       <c:if test="${empty foo.stuff}">
        Some stuff
       </c:if>

    Struts Example:

       <logic:notEmpty name="foo" property="stuff">
        Some stuff
       </logic:notEmpty>

    JSTL Version:

       <c:if test="${!empty foo.stuff}">
        Some stuff
       </c:if>

    Struts Example:

       <logic:equal name="foo" property="stuff" value="<%=thing.getStuff()%>">
        Some stuff
       </logic:equal>

    JSTL Version:

       <%-- Assumes "thing" is a scoped variable --%>
       <c:if test="${foo.stuff eq thing.stuff}">
        Some stuff
       </c:if>

    Struts Example:

       <logic:greaterThan name="foo" property="stuff" value="<%=thing.getStuff()%>">
        Some stuff
       </logic:empty>

    JSTL Version:

       <%-- Assumes "thing" is a scoped variable --%>
       <c:if test="${foo.stuff ge thing.stuff}">
        Some stuff
       </c:if>

    Struts Example:

       <logic:present cookie="shoppingCart">
        Some stuff
       </logic:present>

    JSTL Version:

       <c:if test='${!empty cookie["shoppingCart"]}">
        Some stuff
       </c:if>

    Struts Example:

       <logic:present header="User-Agent">
        Some stuff
       </logic:present>

    JSTL Version:

       <c:if test='${!empty header["User-Agent"]}">
        Some stuff
       </c:if>

    Bean-EL tag library

    The following table lists the "struts-bean" tags which were not ported to the "struts-bean-el" tag library, including which JSTL elements or features will provide that functionality. Examples after the table will demonstrate these.

    Struts-Bean tag JSTL tags or feature
    cookie c:set, EL
    define c:set, EL
    header c:set, EL
    include c:import
    parameter c:set, EL
    write c:out

    Note that the "bean:resource" Struts tag is similar, at least superficially, to the functionality of the "c:import" tag, but "bean:resource" was ported to the Struts-EL library. This is because resources requested through the "c:import" tag may be processed through a mapped servlet, preventing direct access to the resource. The "bean:resource" tag allows direct access to the resource, without an intervening servlet. For instance, if it is desired to obtain the raw text of a JSP page, using "c:import" will not work, because the JSP page will be processed by the JSP servlet. However, using "bean:resource" will retrieve just the text of the JSP page, if that is desired.

    Also note that some functionality of the "bean:include" tag, which was not ported to the Struts-EL library, is not available in the JSTL. This includes the ability to specify the name of a Struts forward, and the ability to include the current transaction control token. These features will be addressed in a future minor release of Struts-EL.

    The following are some examples of "Before" and "After", where the first example is pure Struts usage, and the second example will be pure JSTL usage, not involving Struts-EL at all.

    Struts Example:

       <bean:cookie id="cookieVal" name="stuff"/>

    JSTL Version:

       <c:set var="cookieVal" value='${cookie["stuff"]}'/>

    Struts Example:

       <bean:define id="thing" name="foo" property="stuff"/>

    JSTL Version:

       <c:set var="thing" value="${foo.stuff}"/>

    Struts Example:

       <bean:header id="headerVal" name="stuff"/>

    JSTL Version:

       <c:set var="headerVal" value='${header["stuff"]}'/>

    Struts Example:

       <bean:include id="stuffOut" href="http://somewhere.com/stuff.jsp"/>

    JSTL Version:

       <c:import var="stuffOut" value="http://somewhere.com/stuff.jsp"/>

    Struts Example:

       <bean:parameter id="parameterVal" name="stuff"/>

    JSTL Version:

       <c:set var="parameterVal" value='${param["stuff"]}'/>
    libstruts1.2-java-1.2.9/contrib/struts-el/src/test/0000755000175000017500000000000010404045252022630 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/0000755000175000017500000000000010404045252023417 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/0000755000175000017500000000000010404045252024640 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/0000755000175000017500000000000010404045252026525 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/0000755000175000017500000000000010404045252027767 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/bean/0000755000175000017500000000000010423130300030662 5ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000014610423140531011316 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/bean/TestELSizeTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/bean/TestELSizeTag.jav0000644000175000017500000000716610404045254034041 0ustar arnaudarnaud00000000000000/* * $Id: TestELSizeTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.bean; import junit.framework.Test; import junit.framework.TestSuite; import javax.servlet.ServletException; import javax.servlet.jsp.JspException; import org.apache.cactus.JspTestCase; import org.apache.strutsel.taglib.utils.TestFormBean; public class TestELSizeTag extends JspTestCase { protected ELSizeTag elSizeTag = null; public TestELSizeTag(String theName) { super(theName); } public static void main(String[] args) { junit.awtui.TestRunner.main( new String[] { TestELSizeTag.class.getName() }); } public static Test suite() { return new TestSuite(TestELSizeTag.class); } public void setUp() { elSizeTag = new ELSizeTag(); elSizeTag.setPageContext(pageContext); } public void tearDown() { elSizeTag = null; } public void testPlain() throws ServletException, JspException { TestFormBean formBean = new TestFormBean(); formBean.setArrayProperty(new String[] {"abc", "def", "ghi"}); pageContext.setAttribute("testFormBean", formBean); elSizeTag.setIdExpr("sizeVar"); elSizeTag.setNameExpr("testFormBean"); elSizeTag.setPropertyExpr("arrayProperty"); int startTagReturn = elSizeTag.doStartTag(); Object object = pageContext.getAttribute("sizeVar"); if (object != null) { if (object instanceof Integer) { if (((Integer) object).intValue() != 3) { fail("Size variable \"sizeVar\" is not equal to 3."); } } else { fail("Size variable \"sizeVar\" is not an Integer object."); } } else { fail("Size variable \"sizeVar\" not in page context."); } } public void testCollectionProperty() throws ServletException, JspException { TestFormBean formBean = new TestFormBean(); formBean.setArrayProperty(new String[] {"abc", "def", "ghi"}); pageContext.setAttribute("testFormBean", formBean); elSizeTag.setIdExpr("sizeVar"); elSizeTag.setCollectionExpr("${" + "testFormBean.arrayProperty" + "}"); int startTagReturn = elSizeTag.doStartTag(); System.out.println("collection[" + elSizeTag.getCollection() + "]"); Object object = pageContext.getAttribute("sizeVar"); if (object != null) { if (object instanceof Integer) { if (((Integer) object).intValue() != 3) { fail("Size variable \"sizeVar\" is not equal to 3."); } } else { fail("Size variable \"sizeVar\" is not an Integer object."); } } else { fail("Size variable \"sizeVar\" not in page context."); } } } libstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/html/0000755000175000017500000000000010423130300030721 5ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000014610423140531011316 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/html/TestELBaseTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/html/TestELBaseTag.jav0000644000175000017500000002012110404045252034020 0ustar arnaudarnaud00000000000000/* * $Id: TestELBaseTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import java.util.HashMap; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.JspException; import junit.framework.Test; import junit.framework.TestSuite; import org.apache.strutsel.taglib.utils.DOMHelper; import org.apache.strutsel.taglib.utils.JspTagTestCase; import org.apache.strutsel.taglib.utils.TestHelper; import org.w3c.dom.Element; public class TestELBaseTag extends JspTagTestCase { protected static final String REQUIRED_HREF_VALUE_KEY = "RequiredHRefValue"; protected static final String REQUIRED_TARGET_VALUE_KEY = "RequiredTargetValue"; protected ELBaseTag elBaseTag = null; public TestELBaseTag(String theName) { super(theName); } public static void main(String[] args) { junit.awtui.TestRunner.main( new String[] { TestELBaseTag.class.getName() }); } public static Test suite() { return new TestSuite(TestELBaseTag.class); } public void setUp() { elBaseTag = new ELBaseTag(); elBaseTag.setPageContext(pageContext); } public void tearDown() { elBaseTag = null; } /** * Method to get the required value of the "href" attribute, based on * values in the request. This is taken directly from * "BaseTag.doStartTag()", which is exactly what we're testing, so they had * better match. */ private String getRequiredHrefValue(HttpServletRequest request) { // This sequence of assignments is taken from // "BaseTag.doStartTag(), so it'd better match. StringBuffer sb = new StringBuffer(); sb.append(request.getScheme()); sb.append("://"); sb.append(request.getServerName()); if ((request.getScheme().equals("http") && (request.getServerPort() != 80)) || (request.getScheme().equals("https") && (request.getServerPort() != 443))) { sb.append(":"); sb.append(request.getServerPort()); } sb.append(request.getRequestURI()); String requiredHrefValue = sb.toString(); return (requiredHrefValue); } /** * Tests the value of the "href" attribute, based on the values in the * request. */ public void testHref() throws ServletException, JspException { HttpServletResponse response = (HttpServletResponse)pageContext.getResponse(); String requiredHrefValue = getRequiredHrefValue(request); System.out.println("requiredHrefValue[" + requiredHrefValue + "]"); response.addHeader(REQUIRED_HREF_VALUE_KEY, requiredHrefValue); response.addHeader("abc", "def"); response.addHeader("ghi", "jkl"); response.addHeader("mno", "pqr"); // response.addHeader("stuvwx", requiredHrefValue); response.addHeader("stuvwx", "abc"); int startTagReturn = elBaseTag.doStartTag(); } public void endHref(com.meterware.httpunit.WebResponse testResponse) { try { TestHelper.printResponse(testResponse); Element docElement = testResponse.getDOM().getDocumentElement(); DOMHelper.printNode(docElement); HashMap attrMap = new HashMap(); DOMHelper.recordFoundAttributes(testResponse.getDOM(), "/html/head/base", attrMap); DOMHelper.verifyAttributesPresent(attrMap, new String[] { "href" }, false); String header = testResponse.getHeaderField(REQUIRED_HREF_VALUE_KEY); System.out.println("[header[" + header + "]]"); checkAttrValue(attrMap, testResponse, REQUIRED_HREF_VALUE_KEY, "base", "href"); } catch (Exception ex) { ex.printStackTrace(); fail(); } } /** * Tests the "target" attribute, based on a particular value set into the * target property, using the EL engine to evalute the property value. */ public void testTarget() throws ServletException, JspException { HttpServletResponse response = (HttpServletResponse)pageContext.getResponse(); String requiredTargetValue = "flork"; response.addHeader(REQUIRED_TARGET_VALUE_KEY, requiredTargetValue); String varName = "targetVar"; pageContext.setAttribute(varName, requiredTargetValue); elBaseTag.setTargetExpr("${" + varName + "}"); int startTagReturn = elBaseTag.doStartTag(); } public void endTarget(com.meterware.httpunit.WebResponse testResponse) { try { TestHelper.printResponse(testResponse); Element docElement = testResponse.getDOM().getDocumentElement(); DOMHelper.printNode(docElement); HashMap attrMap = new HashMap(); DOMHelper.recordFoundAttributes(testResponse.getDOM(), "/html/head/base", attrMap); DOMHelper.verifyAttributesPresent(attrMap, new String[] { "href", "target" }, false); checkAttrValue(attrMap, testResponse, REQUIRED_TARGET_VALUE_KEY, "base", "target"); } catch (Exception ex) { ex.printStackTrace(); fail(); } } /** * Tests the "target" attribute, like in "testTarget", but specifies a * variable name in the EL expression which doesn't exist, which should * result in an empty "target" attribute in the output. */ public void testNonexistentVariable() throws ServletException, JspException { HttpServletResponse response = (HttpServletResponse)pageContext.getResponse(); String requiredTargetValue = ""; response.addHeader(REQUIRED_TARGET_VALUE_KEY, requiredTargetValue); String varName = "targetVar"; pageContext.setAttribute(varName, "flork"); elBaseTag.setTargetExpr("${" + varName + "x" + "}"); int startTagReturn = elBaseTag.doStartTag(); } public void endNonexistentVariable(com.meterware.httpunit.WebResponse testResponse) { try { TestHelper.printResponse(testResponse); Element docElement = testResponse.getDOM().getDocumentElement(); DOMHelper.printNode(docElement); HashMap attrMap = new HashMap(); DOMHelper.recordFoundAttributes(testResponse.getDOM(), "/html/head/base", attrMap); DOMHelper.verifyAttributesPresent(attrMap, new String[] { "href", "target" }, false); checkAttrValue(attrMap, testResponse, REQUIRED_TARGET_VALUE_KEY, "base", "target"); } catch (Exception ex) { ex.printStackTrace(); fail(); } } } ././@LongLink0000644000175000017500000000015010423140531011311 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/html/TestELButtonTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/html/TestELButtonTag.j0000644000175000017500000001662110404045252034104 0ustar arnaudarnaud00000000000000/* * $Id: TestELButtonTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import java.util.HashMap; import javax.servlet.ServletException; import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.JspException; import junit.framework.Test; import junit.framework.TestSuite; import org.apache.struts.util.LabelValueBean; import org.apache.strutsel.taglib.utils.DOMHelper; import org.apache.strutsel.taglib.utils.JspTagTestCase; import org.apache.strutsel.taglib.utils.TestHelper; public class TestELButtonTag extends JspTagTestCase { protected static final String REQUIRED_DISABLED_VALUE_KEY = "RequiredDisabledValue"; protected static final String REQUIRED_TYPE_VALUE_KEY = "RequiredTypeValue"; protected static final String REQUIRED_VALUE_VALUE_KEY = "RequiredValueValue"; protected ELButtonTag elButtonTag = null; protected static String[] eventHandlers = { "onblur", "onchange", "onclick", "ondblclick", "onfocus", "onkeydown", "onkeypress", "onkeyup", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup" }; public TestELButtonTag(String theName) { super(theName); } public static void main(String[] args) { junit.awtui.TestRunner.main( new String[] { TestELButtonTag.class.getName() }); } public static Test suite() { return new TestSuite(TestELButtonTag.class); } public void setUp() { elButtonTag = new ELButtonTag(); elButtonTag.setPageContext(pageContext); } public void tearDown() { elButtonTag = null; } /** * Tests a plain "button" tag, with all default attribute values. */ public void testPlain() throws ServletException, JspException { HttpServletResponse response = (HttpServletResponse)pageContext.getResponse(); String requiredTypeValue = "button"; response.addHeader(REQUIRED_TYPE_VALUE_KEY, requiredTypeValue); String requiredValueValue = "Click"; response.addHeader(REQUIRED_VALUE_VALUE_KEY, requiredValueValue); int startTagReturn = elButtonTag.doStartTag(); int afterBodyReturn = elButtonTag.doAfterBody(); int endTagReturn = elButtonTag.doEndTag(); } public void endPlain(com.meterware.httpunit.WebResponse testResponse) { try { TestHelper.printResponse(testResponse); org.w3c.dom.Document document = testResponse.getDOM(); DOMHelper.printNode(document.getDocumentElement()); HashMap attrMap = new HashMap(); DOMHelper.recordFoundAttributes(testResponse.getDOM(), "/html/body/input", attrMap); DOMHelper.verifyAttributesPresent(attrMap, new String[] { "type", "value" }, false); checkAttrValue(attrMap, testResponse, REQUIRED_TYPE_VALUE_KEY, "button", "type"); checkAttrValue(attrMap, testResponse, REQUIRED_VALUE_VALUE_KEY, "button", "value"); } catch (Exception ex) { ex.printStackTrace(); fail(); } } /** * Tests the "disabled" attribute. */ public void testDisabled() throws ServletException, JspException { elButtonTag.setDisabledExpr("true"); String requiredDisabledValue = "disabled"; response.addHeader(REQUIRED_DISABLED_VALUE_KEY, requiredDisabledValue); int startTagReturn = elButtonTag.doStartTag(); int afterBodyReturn = elButtonTag.doAfterBody(); int endTagReturn = elButtonTag.doEndTag(); } public void endDisabled(com.meterware.httpunit.WebResponse testResponse) { try { TestHelper.printResponse(testResponse); org.w3c.dom.Document document = testResponse.getDOM(); DOMHelper.printNode(document.getDocumentElement()); HashMap attrMap = new HashMap(); DOMHelper.recordFoundAttributes(testResponse.getDOM(), "/html/body/input", attrMap); DOMHelper.verifyAttributesPresent(attrMap, new String[] { "disabled" }, true); checkAttrValue(attrMap, testResponse, REQUIRED_DISABLED_VALUE_KEY, "button", "disabled"); } catch (Exception ex) { ex.printStackTrace(); fail(); } } public void testEventHandlers() throws ServletException, JspException { LabelValueBean bean = new LabelValueBean("junk", "stuff"); pageContext.setAttribute("testFormBean", bean); String expr = "${" + "testFormBean.value" + "}"; elButtonTag.setOnblurExpr(expr); elButtonTag.setOnchangeExpr(expr); elButtonTag.setOnclickExpr(expr); elButtonTag.setOndblclickExpr(expr); elButtonTag.setOnfocusExpr(expr); elButtonTag.setOnkeydownExpr(expr); elButtonTag.setOnkeypressExpr(expr); elButtonTag.setOnkeyupExpr(expr); elButtonTag.setOnmousedownExpr(expr); elButtonTag.setOnmousemoveExpr(expr); elButtonTag.setOnmouseoutExpr(expr); elButtonTag.setOnmouseoverExpr(expr); elButtonTag.setOnmouseupExpr(expr); int startTagReturn = elButtonTag.doStartTag(); int afterBodyReturn = elButtonTag.doAfterBody(); int endTagReturn = elButtonTag.doEndTag(); } public void endEventHandlers(com.meterware.httpunit.WebResponse testResponse) { try { TestHelper.printResponse(testResponse); org.w3c.dom.Document document = testResponse.getDOM(); DOMHelper.printNode(document.getDocumentElement()); HashMap attrMap = new HashMap(); DOMHelper.recordFoundAttributes(testResponse.getDOM(), "/html/body/input", attrMap); DOMHelper.verifyAttributesPresent(attrMap, eventHandlers, true); for (int ctr = 0; ctr < eventHandlers.length; ++ ctr) { if (!((String) attrMap.get(eventHandlers[ctr])). equals("stuff")) { fail(); } } } catch (Exception ex) { ex.printStackTrace(); fail(); } } } ././@LongLink0000644000175000017500000000015010423140531011311 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/html/TestELCancelTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/html/TestELCancelTag.j0000644000175000017500000001326210404045252034014 0ustar arnaudarnaud00000000000000/* * $Id: TestELCancelTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import java.util.HashMap; import javax.servlet.ServletException; import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.JspException; import junit.framework.Test; import junit.framework.TestSuite; import org.apache.strutsel.taglib.utils.DOMHelper; import org.apache.strutsel.taglib.utils.JspTagTestCase; import org.apache.strutsel.taglib.utils.TestHelper; public class TestELCancelTag extends JspTagTestCase { protected static final String PROPERTY_ATTR_VALUE = "stuff"; protected static final String REQUIRED_DISABLED_VALUE_KEY = "RequiredDisabledValue"; protected static final String REQUIRED_TYPE_VALUE_KEY = "RequiredTypeValue"; protected static final String REQUIRED_VALUE_VALUE_KEY = "RequiredValueValue"; protected static final String REQUIRED_NAME_VALUE_KEY = "RequiredNameValue"; protected ELCancelTag elCancelTag = null; public TestELCancelTag(String theName) { super(theName); } public static void main(String[] args) { junit.awtui.TestRunner.main( new String[] { TestELCancelTag.class.getName() }); } public static Test suite() { return new TestSuite(TestELCancelTag.class); } public void setUp() { elCancelTag = new ELCancelTag(); elCancelTag.setPageContext(pageContext); elCancelTag.setPropertyExpr(PROPERTY_ATTR_VALUE); } public void tearDown() { elCancelTag = null; } /** * Tests a plain "cancel" tag, with all default attribute values. */ public void testPlain() throws ServletException, JspException { HttpServletResponse response = (HttpServletResponse)pageContext.getResponse(); String requiredNameValue = PROPERTY_ATTR_VALUE; response.addHeader(REQUIRED_NAME_VALUE_KEY, requiredNameValue); String requiredTypeValue = "submit"; response.addHeader(REQUIRED_TYPE_VALUE_KEY, requiredTypeValue); String requiredValueValue = "Cancel"; response.addHeader(REQUIRED_VALUE_VALUE_KEY, requiredValueValue); int startTagReturn = elCancelTag.doStartTag(); int afterBodyReturn = elCancelTag.doAfterBody(); int endTagReturn = elCancelTag.doEndTag(); } public void endPlain(com.meterware.httpunit.WebResponse testResponse) { try { TestHelper.printResponse(testResponse); org.w3c.dom.Document document = testResponse.getDOM(); DOMHelper.printNode(document.getDocumentElement()); HashMap attrMap = new HashMap(); DOMHelper.recordFoundAttributes(testResponse.getDOM(), "/html/body/input", attrMap); DOMHelper.verifyAttributesPresent(attrMap, new String[] { "name", "type", "value", "onclick" }, false); checkAttrValue(attrMap, testResponse, REQUIRED_NAME_VALUE_KEY, "cancel", "name"); checkAttrValue(attrMap, testResponse, REQUIRED_TYPE_VALUE_KEY, "cancel", "type"); checkAttrValue(attrMap, testResponse, REQUIRED_VALUE_VALUE_KEY, "cancel", "value"); } catch (Exception ex) { ex.printStackTrace(); fail(); } } /** * Tests the "disabled" attribute. */ public void testDisabled() throws ServletException, JspException { elCancelTag.setDisabledExpr("true"); String requiredDisabledValue = "disabled"; response.addHeader(REQUIRED_DISABLED_VALUE_KEY, requiredDisabledValue); int startTagReturn = elCancelTag.doStartTag(); int afterBodyReturn = elCancelTag.doAfterBody(); int endTagReturn = elCancelTag.doEndTag(); } public void endDisabled(com.meterware.httpunit.WebResponse testResponse) { try { TestHelper.printResponse(testResponse); org.w3c.dom.Document document = testResponse.getDOM(); DOMHelper.printNode(document.getDocumentElement()); HashMap attrMap = new HashMap(); DOMHelper.recordFoundAttributes(testResponse.getDOM(), "/html/body/input", attrMap); DOMHelper.verifyAttributesPresent(attrMap, new String[] { "disabled" }, true); checkAttrValue(attrMap, testResponse, REQUIRED_DISABLED_VALUE_KEY, "cancel", "disabled"); } catch (Exception ex) { ex.printStackTrace(); fail(); } } } ././@LongLink0000644000175000017500000000015210423140531011313 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/html/TestELCheckboxTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/html/TestELCheckboxTag0000644000175000017500000003367510404045254034141 0ustar arnaudarnaud00000000000000/* * $Id: TestELCheckboxTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import java.util.HashMap; import javax.servlet.ServletException; import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.JspException; import junit.framework.Test; import junit.framework.TestSuite; import org.apache.strutsel.taglib.utils.DOMHelper; import org.apache.strutsel.taglib.utils.JspTagTestCase; import org.apache.strutsel.taglib.utils.TestFormBean; import org.apache.strutsel.taglib.utils.TestHelper; public class TestELCheckboxTag extends JspTagTestCase { protected static final String PROPERTY_ATTR_VALUE = "stringProperty"; protected static final String REQUIRED_CHECKED_VALUE_KEY = "RequiredCheckedValue"; protected static final String REQUIRED_DISABLED_VALUE_KEY = "RequiredDisabledValue"; protected static final String REQUIRED_NAME_VALUE_KEY = "RequiredNameValue"; protected static final String REQUIRED_TYPE_VALUE_KEY = "RequiredTypeValue"; protected static final String REQUIRED_VALUE_VALUE_KEY = "RequiredValueValue"; protected ELCheckboxTag elCheckboxTag = null; public TestELCheckboxTag(String theName) { super(theName); } public static void main(String[] args) { junit.awtui.TestRunner.main( new String[] { TestELCheckboxTag.class.getName() }); } public static Test suite() { return new TestSuite(TestELCheckboxTag.class); } public void setUp() { elCheckboxTag = new ELCheckboxTag(); elCheckboxTag.setPageContext(pageContext); elCheckboxTag.setPropertyExpr(PROPERTY_ATTR_VALUE); } public void tearDown() { elCheckboxTag = null; } /** * Tests a plain "checkbox" tag, with the "property" attribute set to a * plain value. */ public void testPlain() throws ServletException, JspException { HttpServletResponse response = (HttpServletResponse)pageContext.getResponse(); String requiredNameValue = PROPERTY_ATTR_VALUE; response.addHeader(REQUIRED_NAME_VALUE_KEY, requiredNameValue); String requiredTypeValue = "checkbox"; response.addHeader(REQUIRED_TYPE_VALUE_KEY, requiredTypeValue); String requiredValueValue = "on"; response.addHeader(REQUIRED_VALUE_VALUE_KEY, requiredValueValue); TestFormBean formBean = new TestFormBean(); pageContext.setAttribute("testFormBean", formBean); elCheckboxTag.setNameExpr("testFormBean"); int startTagReturn = elCheckboxTag.doStartTag(); int afterBodyReturn = elCheckboxTag.doAfterBody(); int endTagReturn = elCheckboxTag.doEndTag(); } public void endPlain(com.meterware.httpunit.WebResponse testResponse) { try { TestHelper.printResponse(testResponse); DOMHelper.printNode(testResponse.getDOM().getDocumentElement()); HashMap attrMap = new HashMap(); DOMHelper.recordFoundAttributes(testResponse.getDOM(), "/html/body/input", attrMap); DOMHelper.verifyAttributesPresent(attrMap, new String[] { "name", "type", "value" }, false); checkAttrValue(attrMap, testResponse, REQUIRED_NAME_VALUE_KEY, "checkbox", "name"); checkAttrValue(attrMap, testResponse, REQUIRED_TYPE_VALUE_KEY, "checkbox", "type"); checkAttrValue(attrMap, testResponse, REQUIRED_VALUE_VALUE_KEY, "checkbox", "value"); } catch (Exception ex) { ex.printStackTrace(); fail(); } } // /** // * Tests the "property" attribute referencing an indexed value, verifying // * it emits the "checked" attribute. // */ // public void testCollectionProperty() // throws ServletException, JspException { // HttpServletResponse response = (HttpServletResponse)pageContext.getResponse(); // elCheckboxTag.setName(PROPERTY_ATTR_VALUE + "[1]"); // String requiredNameValue = PROPERTY_ATTR_VALUE + "[1]"; // response.addHeader(REQUIRED_NAME_VALUE_KEY, requiredNameValue); // String requiredTypeValue = "checkbox"; // response.addHeader(REQUIRED_TYPE_VALUE_KEY, requiredTypeValue); // String requiredValueValue = "on"; // response.addHeader(REQUIRED_VALUE_VALUE_KEY, requiredValueValue); // String requiredCheckedValue = "checked"; // response.addHeader(REQUIRED_CHECKED_VALUE_KEY, requiredCheckedValue); // ArrayList list = new ArrayList(); // list.add("off"); // list.add("on"); // pageContext.setAttribute(PROPERTY_ATTR_VALUE, list, // PageContext.PAGE_SCOPE); // int startTagReturn = elCheckboxTag.doStartTag(); // int afterBodyReturn = elCheckboxTag.doAfterBody(); // int endTagReturn = elCheckboxTag.doEndTag(); // } // public void endCollectionProperty(com.meterware.httpunit.WebResponse testResponse) { // try { // TestHelper.printResponse(testResponse); // Element docElement = testResponse.getDOM().getDocumentElement(); // DOMHelper.printNode(docElement); // HashMap attrMap = new HashMap(); // DOMHelper.recordFoundAttributes(testResponse.getDOM(), // "/html/body/input", attrMap); // DOMHelper.verifyAttributesPresent(attrMap, // new String[] { // "name", "type", "value", "checked" // }, false); // checkAttrValue(attrMap, testResponse, REQUIRED_NAME_VALUE_KEY, // "checkbox", "name"); // checkAttrValue(attrMap, testResponse, REQUIRED_TYPE_VALUE_KEY, // "checkbox", "type"); // checkAttrValue(attrMap, testResponse, REQUIRED_VALUE_VALUE_KEY, // "checkbox", "value"); // checkAttrValue(attrMap, testResponse, REQUIRED_CHECKED_VALUE_KEY, // "checkbox", "checked"); // } catch (Exception ex) { // ex.printStackTrace(); // fail(); // } // } // /** // * Tests the "property" attribute referencing an indexed value, verifying // * it does not emit the "checked" attribute. // */ // public void testCollectionPropertyNotChecked() // throws ServletException, // JspException { // HttpServletResponse response = (HttpServletResponse)pageContext.getResponse(); // elCheckboxTag.setName(PROPERTY_ATTR_VALUE + "[0]"); // String requiredNameValue = PROPERTY_ATTR_VALUE + "[0]"; // response.addHeader(REQUIRED_NAME_VALUE_KEY, requiredNameValue); // String requiredTypeValue = "checkbox"; // response.addHeader(REQUIRED_TYPE_VALUE_KEY, requiredTypeValue); // String requiredValueValue = "on"; // response.addHeader(REQUIRED_VALUE_VALUE_KEY, requiredValueValue); // ArrayList list = new ArrayList(); // list.add("off"); // list.add("on"); // pageContext.setAttribute(PROPERTY_ATTR_VALUE, list, // PageContext.PAGE_SCOPE); // int startTagReturn = elCheckboxTag.doStartTag(); // int afterBodyReturn = elCheckboxTag.doAfterBody(); // int endTagReturn = elCheckboxTag.doEndTag(); // } // public void endCollectionPropertyNotChecked(com.meterware.httpunit.WebResponse testResponse) { // try { // TestHelper.printResponse(testResponse); // Element docElement = testResponse.getDOM().getDocumentElement(); // DOMHelper.printNode(docElement); // HashMap attrMap = new HashMap(); // DOMHelper.recordFoundAttributes(testResponse.getDOM(), // "/html/body/input", attrMap); // DOMHelper.verifyAttributesPresent(attrMap, // new String[] { // "name", "type", "value" // }, false); // DOMHelper.verifyAttributesNotPresent(attrMap, // new String[] { "checked" }); // checkAttrValue(attrMap, testResponse, REQUIRED_NAME_VALUE_KEY, // "checkbox", "name"); // checkAttrValue(attrMap, testResponse, REQUIRED_TYPE_VALUE_KEY, // "checkbox", "type"); // checkAttrValue(attrMap, testResponse, REQUIRED_VALUE_VALUE_KEY, // "checkbox", "value"); // } catch (Exception ex) { // ex.printStackTrace(); // fail(); // } // } // /** // * Tests the "disabled" attribute. // */ // public void testDisabled() // throws ServletException, JspException { // elCheckboxTag.setDisabled(true); // String requiredDisabledValue = "disabled"; // response.addHeader(REQUIRED_DISABLED_VALUE_KEY, requiredDisabledValue); // elCheckboxTag.setName("flork"); // int startTagReturn = elCheckboxTag.doStartTag(); // int afterBodyReturn = elCheckboxTag.doAfterBody(); // int endTagReturn = elCheckboxTag.doEndTag(); // } // public void endDisabled(com.meterware.httpunit.WebResponse testResponse) { // try { // TestHelper.printResponse(testResponse); // Element docElement = testResponse.getDOM().getDocumentElement(); // DOMHelper.printNode(docElement); // HashMap attrMap = new HashMap(); // DOMHelper.recordFoundAttributes(testResponse.getDOM(), // "/html/body/input", attrMap); // DOMHelper.verifyAttributesPresent(attrMap, // new String[] { "disabled" }, // true); // checkAttrValue(attrMap, testResponse, REQUIRED_DISABLED_VALUE_KEY, // "checkbox", "disabled"); // } catch (Exception ex) { // ex.printStackTrace(); // fail(); // } // } // /** // * Tests the "property" and "checked" attributes, using a simple value in // * page scope. // */ // public void testProperty() // throws ServletException, JspException { // HttpServletResponse response = (HttpServletResponse)pageContext.getResponse(); // String requiredNameValue = PROPERTY_ATTR_VALUE; // response.addHeader(REQUIRED_NAME_VALUE_KEY, requiredNameValue); // String requiredTypeValue = "checkbox"; // response.addHeader(REQUIRED_TYPE_VALUE_KEY, requiredTypeValue); // String requiredValueValue = "on"; // response.addHeader(REQUIRED_VALUE_VALUE_KEY, requiredValueValue); // String requiredCheckedValue = "checked"; // response.addHeader(REQUIRED_CHECKED_VALUE_KEY, requiredCheckedValue); // pageContext.setAttribute(PROPERTY_ATTR_VALUE, "on", // PageContext.PAGE_SCOPE); // int startTagReturn = elCheckboxTag.doStartTag(); // int afterBodyReturn = elCheckboxTag.doAfterBody(); // int endTagReturn = elCheckboxTag.doEndTag(); // } // public void endProperty(com.meterware.httpunit.WebResponse testResponse) { // try { // TestHelper.printResponse(testResponse); // Element docElement = testResponse.getDOM().getDocumentElement(); // DOMHelper.printNode(docElement); // HashMap attrMap = new HashMap(); // DOMHelper.recordFoundAttributes(testResponse.getDOM(), // "/html/body/input", attrMap); // DOMHelper.verifyAttributesPresent(attrMap, // new String[] { // "name", "type", "value", "checked" // }, false); // checkAttrValue(attrMap, testResponse, REQUIRED_NAME_VALUE_KEY, // "checkbox", "name"); // checkAttrValue(attrMap, testResponse, REQUIRED_TYPE_VALUE_KEY, // "checkbox", "type"); // checkAttrValue(attrMap, testResponse, REQUIRED_VALUE_VALUE_KEY, // "checkbox", "value"); // checkAttrValue(attrMap, testResponse, REQUIRED_CHECKED_VALUE_KEY, // "checkbox", "checked"); // } catch (Exception ex) { // ex.printStackTrace(); // fail(); // } // } } ././@LongLink0000644000175000017500000000015010423140531011311 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/html/TestELErrorsTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/html/TestELErrorsTag.j0000644000175000017500000005242110404045254034105 0ustar arnaudarnaud00000000000000/* * $Id: TestELErrorsTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import junit.framework.Test; import junit.framework.TestSuite; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.strutsel.taglib.utils.JspTagTestCase; public class TestELErrorsTag extends JspTagTestCase { protected static final String FOOTER_VALUE = "zzz"; protected static final String HEADER_VALUE = "aaa"; protected static final String PREFIX_VALUE = "[[["; protected static final String PROPERTY_KEY = "property"; protected static final String REQUIRED_TEXT_VALUE_KEY = "RequiredTextValue"; protected static final String SUFFIX_VALUE = "]]]"; protected static final String XXX_VALUE = "xxx"; protected static final String YYY_VALUE = "yyy"; protected ELErrorsTag elErrorsTag = null; private static Log log = LogFactory.getLog(TestELErrorsTag.class); public TestELErrorsTag(String theName) { super(theName); } public static void main(String[] args) { junit.awtui.TestRunner.main( new String[] { TestELErrorsTag.class.getName() }); } public static Test suite() { return new TestSuite(TestELErrorsTag.class); } public void setUp() { elErrorsTag = new ELErrorsTag(); elErrorsTag.setPageContext(pageContext); } public void testDummy() { } // /** // * Tests simple global error with all tag attributes set to default, and no // * header, footer, prefix or suffix. // */ // public void testPlain() // throws ServletException, JspException { // HashMapMessageResources messageResources = new HashMapMessageResources( // null, null, true); // messageResources.addMessage("error.misc", XXX_VALUE); // String bundle = elErrorsTag.getBundle(); // if (bundle == null) // bundle = Action.MESSAGES_KEY; // pageContext.setAttribute(bundle, messageResources, // PageContext.APPLICATION_SCOPE); // ActionErrors errors = new ActionErrors(); // ActionError error = new ActionError("error.misc"); // errors.add(ActionErrors.GLOBAL_ERROR, error); // pageContext.setAttribute(elErrorsTag.getName(), errors, // PageContext.REQUEST_SCOPE); // HttpServletResponse response = (HttpServletResponse)pageContext.getResponse(); // String requiredText = XXX_VALUE; // response.addHeader(REQUIRED_TEXT_VALUE_KEY, requiredText); // System.out.println("pageContext[" + pageContext + "]"); // System.out.println("name[" + elErrorsTag.getName() + "]"); // System.out.println("request[" + pageContext.getRequest() + "]"); // System.out.println("session[" + pageContext.getSession() + "]"); // int startTagReturn = elErrorsTag.doStartTag(); // int afterBodyReturn = elErrorsTag.doAfterBody(); // int endTagReturn = elErrorsTag.doEndTag(); // } // public void endPlain(com.meterware.httpunit.WebResponse testResponse) { // try { // TestHelper.printResponse(testResponse); // org.w3c.dom.Document document = testResponse.getDOM(); // DOMHelper.printNode(document.getDocumentElement()); // String nodeText = DOMHelper.getNodeText(document, "/html/body"); // log.debug("nodeText[" + nodeText + "]"); // String requiredTextValue = (String)testResponse.getHeaderField( // REQUIRED_TEXT_VALUE_KEY); // if (!nodeText.equals(requiredTextValue)) { // fail("The tag instance should have resulted " + // "in the text " + "\"" + requiredTextValue + // "\", but instead had the value \"" + nodeText + "\"."); // } // } catch (Exception ex) { // ex.printStackTrace(); // fail(); // } // } // /** // * Tests multiple errors put in errors list, with two different property // * names, but referring to the same error, but still using the default // * value of "property", which will cause both errors to be retrieved. // */ // public void testMultiProperties() // throws ServletException, JspException { // HashMapMessageResources messageResources = new HashMapMessageResources( // null, null, true); // messageResources.addMessage("error.misc", XXX_VALUE); // String bundle = elErrorsTag.getBundle(); // if (bundle == null) // bundle = Action.MESSAGES_KEY; // pageContext.setAttribute(bundle, messageResources, // PageContext.APPLICATION_SCOPE); // ActionErrors errors = new ActionErrors(); // ActionError error = new ActionError("error.misc"); // errors.add(PROPERTY_KEY + "1", error); // errors.add(PROPERTY_KEY + "2", error); // pageContext.setAttribute(elErrorsTag.getName(), errors, // PageContext.REQUEST_SCOPE); // HttpServletResponse response = (HttpServletResponse)pageContext.getResponse(); // String requiredText = XXX_VALUE + " " + XXX_VALUE; // response.addHeader(REQUIRED_TEXT_VALUE_KEY, requiredText); // int startTagReturn = elErrorsTag.doStartTag(); // int afterBodyReturn = elErrorsTag.doAfterBody(); // int endTagReturn = elErrorsTag.doEndTag(); // } // public void endMultiProperties(com.meterware.httpunit.WebResponse testResponse) { // try { // TestHelper.printResponse(testResponse); // org.w3c.dom.Document document = testResponse.getDOM(); // DOMHelper.printNode(document.getDocumentElement()); // String nodeText = DOMHelper.getNodeText(document, "/html/body"); // log.debug("nodeText[" + nodeText + "]"); // String requiredTextValue = (String)testResponse.getHeaderField( // REQUIRED_TEXT_VALUE_KEY); // if (!nodeText.equals(requiredTextValue)) { // fail("The tag instance should have resulted " + // "in the text " + "\"" + requiredTextValue + // "\", but instead had the value \"" + nodeText + "\"."); // } // } catch (Exception ex) { // ex.printStackTrace(); // fail(); // } // } // /** // * Tests putting in two errors in errors list, with two different property // * names, and referring to two different error keys, and the "property" // * attribute set to only one of them. // */ // public void testOnlyWantOneProperty() // throws ServletException, JspException { // elErrorsTag.setPropertyExpr(PROPERTY_KEY + "2"); // HashMapMessageResources messageResources = new HashMapMessageResources( // null, null, true); // messageResources.addMessage("error1.misc", XXX_VALUE); // messageResources.addMessage("error2.misc", YYY_VALUE); // String bundle = elErrorsTag.getBundle(); // if (bundle == null) // bundle = Action.MESSAGES_KEY; // pageContext.setAttribute(bundle, messageResources, // PageContext.APPLICATION_SCOPE); // ActionErrors errors = new ActionErrors(); // errors.add(PROPERTY_KEY + "1", new ActionError("error1.misc")); // errors.add(PROPERTY_KEY + "2", new ActionError("error2.misc")); // pageContext.setAttribute(elErrorsTag.getName(), errors, // PageContext.REQUEST_SCOPE); // HttpServletResponse response = (HttpServletResponse)pageContext.getResponse(); // String requiredText = YYY_VALUE; // response.addHeader(REQUIRED_TEXT_VALUE_KEY, requiredText); // int startTagReturn = elErrorsTag.doStartTag(); // int afterBodyReturn = elErrorsTag.doAfterBody(); // int endTagReturn = elErrorsTag.doEndTag(); // } // public void endOnlyWantOneProperty(com.meterware.httpunit.WebResponse testResponse) { // try { // TestHelper.printResponse(testResponse); // org.w3c.dom.Document document = testResponse.getDOM(); // DOMHelper.printNode(document.getDocumentElement()); // String nodeText = DOMHelper.getNodeText(document, "/html/body"); // log.debug("nodeText[" + nodeText + "]"); // String requiredTextValue = (String)testResponse.getHeaderField( // REQUIRED_TEXT_VALUE_KEY); // if (!nodeText.equals(requiredTextValue)) { // fail("The tag instance should have resulted " + // "in the text " + "\"" + requiredTextValue + // "\", but instead had the value \"" + nodeText + "\"."); // } // } catch (Exception ex) { // ex.printStackTrace(); // fail(); // } // } // /** // * Tests one error on a specific property, with "property" attribute set to // * default. // */ // public void testProperty() // throws ServletException, JspException { // HashMapMessageResources messageResources = new HashMapMessageResources( // null, null, true); // messageResources.addMessage("error.misc", XXX_VALUE); // String bundle = elErrorsTag.getBundle(); // if (bundle == null) // bundle = Action.MESSAGES_KEY; // pageContext.setAttribute(bundle, messageResources, // PageContext.APPLICATION_SCOPE); // ActionErrors errors = new ActionErrors(); // ActionError error = new ActionError("error.misc"); // errors.add(PROPERTY_KEY, error); // pageContext.setAttribute(elErrorsTag.getName(), errors, // PageContext.REQUEST_SCOPE); // HttpServletResponse response = (HttpServletResponse)pageContext.getResponse(); // String requiredText = XXX_VALUE; // response.addHeader(REQUIRED_TEXT_VALUE_KEY, requiredText); // int startTagReturn = elErrorsTag.doStartTag(); // int afterBodyReturn = elErrorsTag.doAfterBody(); // int endTagReturn = elErrorsTag.doEndTag(); // } // public void endProperty(com.meterware.httpunit.WebResponse testResponse) { // try { // TestHelper.printResponse(testResponse); // org.w3c.dom.Document document = testResponse.getDOM(); // DOMHelper.printNode(document.getDocumentElement()); // String nodeText = DOMHelper.getNodeText(document, "/html/body"); // log.debug("nodeText[" + nodeText + "]"); // String requiredTextValue = (String)testResponse.getHeaderField( // REQUIRED_TEXT_VALUE_KEY); // if (!nodeText.equals(requiredTextValue)) { // fail("The tag instance should have resulted " + // "in the text " + "\"" + requiredTextValue + // "\", but instead had the value \"" + nodeText + "\"."); // } // } catch (Exception ex) { // ex.printStackTrace(); // fail(); // } // } // /** // * Just like "testPropertySpecified", but the "property" value is an EL // * expression, evaluating to the same value as in the other test. // */ // public void testPropertySpecifiedEL() // throws ServletException, JspException { // String varName = "targetVar"; // pageContext.setAttribute(varName, PROPERTY_KEY); // elErrorsTag.setPropertyExpr("${" + varName + "}"); // testPropertySpecified(); // } // public void endPropertySpecifiedEL(com.meterware.httpunit.WebResponse testResponse) { // endPropertySpecified(testResponse); // } // /** // * Tests one error in errors list, set to a property, and the "property" // * attribute set to that property key. // */ // public void testPropertySpecified() // throws ServletException, JspException { // elErrorsTag.setPropertyExpr(PROPERTY_KEY); // HashMapMessageResources messageResources = new HashMapMessageResources( // null, null, true); // messageResources.addMessage("error.misc", XXX_VALUE); // String bundle = elErrorsTag.getBundle(); // if (bundle == null) // bundle = Action.MESSAGES_KEY; // pageContext.setAttribute(bundle, messageResources, // PageContext.APPLICATION_SCOPE); // ActionErrors errors = new ActionErrors(); // ActionError error = new ActionError("error.misc"); // errors.add(PROPERTY_KEY, error); // pageContext.setAttribute(elErrorsTag.getName(), errors, // PageContext.REQUEST_SCOPE); // HttpServletResponse response = (HttpServletResponse)pageContext.getResponse(); // String requiredText = XXX_VALUE; // response.addHeader(REQUIRED_TEXT_VALUE_KEY, requiredText); // int startTagReturn = elErrorsTag.doStartTag(); // int afterBodyReturn = elErrorsTag.doAfterBody(); // int endTagReturn = elErrorsTag.doEndTag(); // } // public void endPropertySpecified(com.meterware.httpunit.WebResponse testResponse) { // try { // TestHelper.printResponse(testResponse); // org.w3c.dom.Document document = testResponse.getDOM(); // DOMHelper.printNode(document.getDocumentElement()); // String nodeText = DOMHelper.getNodeText(document, "/html/body"); // log.debug("nodeText[" + nodeText + "]"); // String requiredTextValue = (String)testResponse.getHeaderField( // REQUIRED_TEXT_VALUE_KEY); // if (!nodeText.equals(requiredTextValue)) { // fail("The tag instance should have resulted " + // "in the text " + "\"" + requiredTextValue + // "\", but instead had the value \"" + nodeText + "\"."); // } // } catch (Exception ex) { // ex.printStackTrace(); // fail(); // } // } // /** // * Tests one error in the errors list, set to a property, and the // * "property" attribute set to a different property key. // */ // public void testPropertySpecifiedWrong() // throws ServletException, JspException { // elErrorsTag.setPropertyExpr(PROPERTY_KEY + "x"); // HashMapMessageResources messageResources = new HashMapMessageResources( // null, null, true); // messageResources.addMessage("error.misc", XXX_VALUE); // String bundle = elErrorsTag.getBundle(); // if (bundle == null) // bundle = Action.MESSAGES_KEY; // pageContext.setAttribute(bundle, messageResources, // PageContext.APPLICATION_SCOPE); // ActionErrors errors = new ActionErrors(); // ActionError error = new ActionError("error.misc"); // errors.add(PROPERTY_KEY, error); // pageContext.setAttribute(elErrorsTag.getName(), errors, // PageContext.REQUEST_SCOPE); // HttpServletResponse response = (HttpServletResponse)pageContext.getResponse(); // String requiredText = ""; // response.addHeader(REQUIRED_TEXT_VALUE_KEY, requiredText); // int startTagReturn = elErrorsTag.doStartTag(); // int afterBodyReturn = elErrorsTag.doAfterBody(); // int endTagReturn = elErrorsTag.doEndTag(); // } // public void endPropertySpecifiedWrong(com.meterware.httpunit.WebResponse testResponse) { // try { // TestHelper.printResponse(testResponse); // org.w3c.dom.Document document = testResponse.getDOM(); // DOMHelper.printNode(document.getDocumentElement()); // String nodeText = DOMHelper.getNodeText(document, "/html/body"); // log.debug("nodeText[" + nodeText + "]"); // String requiredTextValue = (String)testResponse.getHeaderField( // REQUIRED_TEXT_VALUE_KEY); // if (!nodeText.equals(requiredTextValue)) { // fail("The tag instance should have resulted " + // "in the text " + "\"" + requiredTextValue + // "\", but instead had the value \"" + nodeText + "\"."); // } // } catch (Exception ex) { // ex.printStackTrace(); // fail(); // } // } // public void tearDown() { // elErrorsTag = null; // } // /** // * Tests a single error in errors list, with the "header" and "footer" // * resource set to non-empty strings. // */ // public void testHeaderFooter() // throws ServletException, JspException { // HashMapMessageResources messageResources = new HashMapMessageResources( // null, null, true); // messageResources.addMessage("error.misc", XXX_VALUE); // messageResources.addMessage("errors.header", HEADER_VALUE); // messageResources.addMessage("errors.footer", FOOTER_VALUE); // String bundle = elErrorsTag.getBundle(); // if (bundle == null) // bundle = Action.MESSAGES_KEY; // pageContext.setAttribute(bundle, messageResources, // PageContext.APPLICATION_SCOPE); // ActionErrors errors = new ActionErrors(); // ActionError error = new ActionError("error.misc"); // errors.add(ActionErrors.GLOBAL_ERROR, error); // pageContext.setAttribute(elErrorsTag.getName(), errors, // PageContext.REQUEST_SCOPE); // HttpServletResponse response = (HttpServletResponse)pageContext.getResponse(); // String requiredText = HEADER_VALUE + " " + XXX_VALUE + // " " + FOOTER_VALUE; // response.addHeader(REQUIRED_TEXT_VALUE_KEY, requiredText); // int startTagReturn = elErrorsTag.doStartTag(); // int afterBodyReturn = elErrorsTag.doAfterBody(); // int endTagReturn = elErrorsTag.doEndTag(); // } // public void endHeaderFooter(com.meterware.httpunit.WebResponse testResponse) { // try { // TestHelper.printResponse(testResponse); // org.w3c.dom.Document document = testResponse.getDOM(); // DOMHelper.printNode(document.getDocumentElement()); // String nodeText = DOMHelper.getNodeText(document, "/html/body"); // log.debug("nodeText[" + nodeText + "]"); // String requiredTextValue = (String)testResponse.getHeaderField( // REQUIRED_TEXT_VALUE_KEY); // if (!nodeText.equals(requiredTextValue)) { // fail("The tag instance should have resulted " + // "in the text " + "\"" + requiredTextValue + // "\", but instead had the value \"" + nodeText + "\"."); // } // } catch (Exception ex) { // ex.printStackTrace(); // fail(); // } // } } ././@LongLink0000644000175000017500000000014610423140531011316 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/html/TestELFileTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/html/TestELFileTag.jav0000644000175000017500000001374410404045252034042 0ustar arnaudarnaud00000000000000/* * $Id: TestELFileTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import java.util.HashMap; import javax.servlet.ServletException; import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.JspException; import junit.framework.Test; import junit.framework.TestSuite; import org.apache.strutsel.taglib.utils.DOMHelper; import org.apache.strutsel.taglib.utils.JspTagTestCase; import org.apache.strutsel.taglib.utils.TestFormBean; import org.apache.strutsel.taglib.utils.TestHelper; public class TestELFileTag extends JspTagTestCase { protected static final String PROPERTY_ATTR_VALUE = "stringProperty"; protected static final String REQUIRED_DISABLED_VALUE_KEY = "RequiredDisabledValue"; protected static final String REQUIRED_TYPE_VALUE_KEY = "RequiredTypeValue"; protected static final String REQUIRED_VALUE_VALUE_KEY = "RequiredValueValue"; protected static final String REQUIRED_NAME_VALUE_KEY = "RequiredNameValue"; protected ELFileTag elFileTag = null; public TestELFileTag(String theName) { super(theName); } public static void main(String[] args) { junit.awtui.TestRunner.main( new String[] { TestELFileTag.class.getName() }); } public static Test suite() { return new TestSuite(TestELFileTag.class); } public void setUp() { elFileTag = new ELFileTag(); elFileTag.setPageContext(pageContext); elFileTag.setPropertyExpr(PROPERTY_ATTR_VALUE); } public void tearDown() { elFileTag = null; } /** * Tests a plain "file" tag, with all default attribute values. */ public void testPlain() throws ServletException, JspException { HttpServletResponse response = (HttpServletResponse)pageContext.getResponse(); TestFormBean formBean = new TestFormBean(); pageContext.setAttribute("testFormBean", formBean); elFileTag.setNameExpr("testFormBean"); String requiredNameValue = PROPERTY_ATTR_VALUE; response.addHeader(REQUIRED_NAME_VALUE_KEY, requiredNameValue); String requiredTypeValue = "file"; response.addHeader(REQUIRED_TYPE_VALUE_KEY, requiredTypeValue); String requiredValueValue = ""; response.addHeader(REQUIRED_VALUE_VALUE_KEY, requiredValueValue); int startTagReturn = elFileTag.doStartTag(); int afterBodyReturn = elFileTag.doAfterBody(); int endTagReturn = elFileTag.doEndTag(); } public void endPlain(com.meterware.httpunit.WebResponse testResponse) { try { TestHelper.printResponse(testResponse); org.w3c.dom.Document document = testResponse.getDOM(); DOMHelper.printNode(document.getDocumentElement()); HashMap attrMap = new HashMap(); DOMHelper.recordFoundAttributes(testResponse.getDOM(), "/html/body/input", attrMap); DOMHelper.verifyAttributesPresent(attrMap, new String[] { "name", "type", "value" }, false); checkAttrValue(attrMap, testResponse, REQUIRED_NAME_VALUE_KEY, "file", "name"); checkAttrValue(attrMap, testResponse, REQUIRED_TYPE_VALUE_KEY, "file", "type"); checkAttrValue(attrMap, testResponse, REQUIRED_VALUE_VALUE_KEY, "file", "value"); } catch (Exception ex) { ex.printStackTrace(); fail(); } } /** * Tests the "disabled" attribute. */ public void testDisabled() throws ServletException, JspException { TestFormBean formBean = new TestFormBean(); pageContext.setAttribute("testFormBean", formBean); elFileTag.setNameExpr("testFormBean"); elFileTag.setDisabledExpr("true"); String requiredDisabledValue = "disabled"; response.addHeader(REQUIRED_DISABLED_VALUE_KEY, requiredDisabledValue); int startTagReturn = elFileTag.doStartTag(); int afterBodyReturn = elFileTag.doAfterBody(); int endTagReturn = elFileTag.doEndTag(); } public void endDisabled(com.meterware.httpunit.WebResponse testResponse) { try { TestHelper.printResponse(testResponse); org.w3c.dom.Document document = testResponse.getDOM(); DOMHelper.printNode(document.getDocumentElement()); HashMap attrMap = new HashMap(); DOMHelper.recordFoundAttributes(testResponse.getDOM(), "/html/body/input", attrMap); DOMHelper.verifyAttributesPresent(attrMap, new String[] { "disabled" }, true); checkAttrValue(attrMap, testResponse, REQUIRED_DISABLED_VALUE_KEY, "file", "disabled"); } catch (Exception ex) { ex.printStackTrace(); fail(); } } } ././@LongLink0000644000175000017500000000014610423140531011316 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/html/TestELFormTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/html/TestELFormTag.jav0000644000175000017500000002661510404045254034071 0ustar arnaudarnaud00000000000000/* * $Id: TestELFormTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import junit.framework.Test; import junit.framework.TestSuite; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.strutsel.taglib.utils.JspTagTestCase; public class TestELFormTag extends JspTagTestCase { protected static final String ACTION_NAME = "stuff"; protected static final String FORM_BEAN_CLASS = "org.apache.strutsel.taglib.utils.TestFormBean"; protected static final String REQUIRED_NAME_VALUE_KEY = "RequiredNameValue"; protected static final String REQUIRED_METHOD_VALUE_KEY = "RequiredMethodValue"; protected static final String REQUIRED_ACTION_VALUE_KEY = "RequiredActionValue"; protected ELFormTag elFormTag = null; private static Log log = LogFactory.getLog(TestELFormTag.class); public TestELFormTag(String theName) { super(theName); } public static void main(String[] args) { junit.awtui.TestRunner.main( new String[] { TestELFormTag.class.getName() }); } public static Test suite() { return new TestSuite(TestELFormTag.class); } public void setUp() { elFormTag = new ELFormTag(); elFormTag.setPageContext(pageContext); } /** * Converts an action name into the path associated with it. The basic * contents of this function was copied from * "FormTag.getActionMappingName()". */ protected String convertActionNameToPath(String actionName) { String value = actionName; int questionLoc = actionName.indexOf("?"); if (questionLoc >= 0) value = value.substring(0, questionLoc); int slashLoc = value.lastIndexOf("/"); int periodLoc = value.lastIndexOf("."); if ((periodLoc >= 0) && (periodLoc > slashLoc)) value = value.substring(0, periodLoc); if (!value.startsWith("/")) value = "/" + value; return (value); } // /** // * Return the form action converted into a server-relative URL. // *

    // * This is copied from FormTag, with the small change of passing the action // * name as a parameter, and calling // * convertActionNameToPath(actionName) instead of the // * original's getActionMappingName(). // */ // protected String getActionMappingURL(String actionName) { // HttpServletRequest request = // (HttpServletRequest) pageContext.getRequest(); // StringBuffer value = new StringBuffer(request.getContextPath()); // ApplicationConfig config = (ApplicationConfig) // pageContext.getRequest().getAttribute(Action.APPLICATION_KEY); // if (config != null) { // value.append(config.getPrefix()); // } // // Use our servlet mapping, if one is specified // String servletMapping = (String) // pageContext.getAttribute(Action.SERVLET_KEY, // PageContext.APPLICATION_SCOPE); // if (servletMapping != null) { // String queryString = null; // int question = actionName.indexOf("?"); // if (question >= 0) { // queryString = actionName.substring(question); // } // String actionMapping = convertActionNameToPath(actionName); // if (servletMapping.startsWith("*.")) { // value.append(actionMapping); // value.append(servletMapping.substring(1)); // } else if (servletMapping.endsWith("/*")) { // value.append(servletMapping.substring // (0, servletMapping.length() - 2)); // value.append(actionMapping); // } else if (servletMapping.equals("/")) { // value.append(actionMapping); // } // if (queryString != null) { // value.append(queryString); // } // } // // Otherwise, assume extension mapping is in use and extension is // // already included in the action property // else { // if (!actionName.startsWith("/")) { // value.append("/"); // } // value.append(actionName); // } // // Return the completed value // return (value.toString()); // } // protected void setupServletEnvironment() // throws ServletException // { // ActionServlet actionServlet = new ActionServlet(); // actionServlet.init(pageContext.getServletConfig()); // actionServlet.init(); // ApplicationConfig appConfig = new ApplicationConfig(""); // pageContext.setAttribute(Action.APPLICATION_KEY, appConfig, // PageContext.APPLICATION_SCOPE); // } public void testDummy() { } // public void testPlain() // throws ServletException, JspException // { // ActionServlet actionServlet = new ActionServlet(); // actionServlet.init(pageContext.getServletConfig()); // actionServlet.init(); // // ApplicationConfig appConfig = new ApplicationConfig(""); // // pageContext.setAttribute(Action.APPLICATION_KEY, appConfig, // // PageContext.APPLICATION_SCOPE); // ActionMapping mapping = new ActionMapping(); // mapping.setName(ACTION_NAME); // mapping.setPath(convertActionNameToPath(mapping.getName())); // ActionFormBean formBean = // new ActionFormBean(mapping.getName(), FORM_BEAN_CLASS); // appConfig.addActionConfig(mapping); // appConfig.addFormBeanConfig(formBean); // HttpServletResponse response = // (HttpServletResponse)pageContext.getResponse(); // String encodedURL = // response.encodeURL(RequestUtils. // getActionMappingURL(mapping.getName(), // pageContext)); // response.addHeader(REQUIRED_NAME_VALUE_KEY, ACTION_NAME); // response.addHeader(REQUIRED_METHOD_VALUE_KEY, "post"); // response.addHeader(REQUIRED_ACTION_VALUE_KEY, encodedURL); // elFormTag.setActionExpr(ACTION_NAME); // int startTagReturn = elFormTag.doStartTag(); // int endTagReturn = elFormTag.doEndTag(); // } // public void endPlain(com.meterware.httpunit.WebResponse testResponse) { // try { // TestHelper.printResponse(testResponse); // Element docElement = testResponse.getDOM().getDocumentElement(); // DOMHelper.printNode(docElement); // HashMap attrMap = new HashMap(); // DOMHelper.recordFoundAttributes(testResponse.getDOM(), // "/html/body/form", attrMap); // DOMHelper.verifyAttributesPresent(attrMap, // new String[] { "name", "method", // "action" }, // false); // checkAttrValue(attrMap, testResponse, REQUIRED_NAME_VALUE_KEY, // "form", "name"); // checkAttrValue(attrMap, testResponse, REQUIRED_METHOD_VALUE_KEY, // "form", "method"); // checkAttrValue(attrMap, testResponse, REQUIRED_ACTION_VALUE_KEY, // "form", "action"); // } catch (Exception ex) { // ex.printStackTrace(); // fail(); // } // } // public void testMethod() // throws ServletException, JspException // { // ActionServlet actionServlet = new ActionServlet(); // actionServlet.init(pageContext.getServletConfig()); // actionServlet.init(); // ApplicationConfig appConfig = new ApplicationConfig(""); // pageContext.setAttribute(Action.APPLICATION_KEY, appConfig, // PageContext.APPLICATION_SCOPE); // ActionMapping mapping = new ActionMapping(); // mapping.setName(ACTION_NAME); // mapping.setPath(convertActionNameToPath(mapping.getName())); // ActionFormBean formBean = // new ActionFormBean(mapping.getName(), FORM_BEAN_CLASS); // appConfig.addActionConfig(mapping); // appConfig.addFormBeanConfig(formBean); // HttpServletResponse response = // (HttpServletResponse)pageContext.getResponse(); // String encodedURL = // response.encodeURL(RequestUtils. // getActionMappingURL(mapping.getName(), // pageContext)); // response.addHeader(REQUIRED_NAME_VALUE_KEY, ACTION_NAME); // response.addHeader(REQUIRED_METHOD_VALUE_KEY, "GET"); // response.addHeader(REQUIRED_ACTION_VALUE_KEY, encodedURL); // elFormTag.setActionExpr(ACTION_NAME); // elFormTag.setMethodExpr("GET"); // int startTagReturn = elFormTag.doStartTag(); // int endTagReturn = elFormTag.doEndTag(); // } // public void endMethod(com.meterware.httpunit.WebResponse testResponse) { // try { // TestHelper.printResponse(testResponse); // Element docElement = testResponse.getDOM().getDocumentElement(); // DOMHelper.printNode(docElement); // HashMap attrMap = new HashMap(); // DOMHelper.recordFoundAttributes(testResponse.getDOM(), // "/html/body/form", attrMap); // DOMHelper.verifyAttributesPresent(attrMap, // new String[] { "name", "method", // "action" }, // false); // checkAttrValue(attrMap, testResponse, REQUIRED_NAME_VALUE_KEY, // "form", "name"); // checkAttrValue(attrMap, testResponse, REQUIRED_METHOD_VALUE_KEY, // "form", "method"); // checkAttrValue(attrMap, testResponse, REQUIRED_ACTION_VALUE_KEY, // "form", "action"); // } catch (Exception ex) { // ex.printStackTrace(); // fail(); // } // } } ././@LongLink0000644000175000017500000000014710423140531011317 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/html/TestELFrameTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/html/TestELFrameTag.ja0000644000175000017500000000773010404045252034025 0ustar arnaudarnaud00000000000000/* * $Id: TestELFrameTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import javax.servlet.ServletException; import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.JspException; import junit.framework.Test; import junit.framework.TestSuite; import org.apache.strutsel.taglib.utils.JspTagTestCase; public class TestELFrameTag extends JspTagTestCase { private static final String FORWARD_VALUE = "stuff"; private static final String PATH_VALUE = "/stuff"; protected ELFrameTag elFrameTag = null; public TestELFrameTag(String theName) { super(theName); } public static void main(String[] args) { junit.awtui.TestRunner. main(new String[] { TestELFrameTag.class.getName() }); } public static Test suite() { return new TestSuite(TestELFrameTag.class); } public void setUp() { elFrameTag = new ELFrameTag(); elFrameTag.setPageContext(pageContext); } public void tearDown() { elFrameTag = null; } /** * Tests all attributes unset, which is illegal. At least one of * "forward", "href", or "page" needs to be set. */ public void testPlain() throws ServletException, JspException { HttpServletResponse response = (HttpServletResponse)pageContext.getResponse(); boolean gotCorrectException = false; try { int startTagReturn = elFrameTag.doStartTag(); } catch (JspException ex) { // This is supposed to happen. gotCorrectException = true; } catch (Exception ex) { fail(); } if (!gotCorrectException) fail(); } // /** // * Tests setting "forward" attribute to a Forward with a null Path. // */ // public void testForward() // throws ServletException, JspException { // ActionServlet actionServlet = new ActionServlet(); // actionServlet.init(pageContext.getServletConfig()); // actionServlet.init(); // ApplicationConfig appConfig = new ApplicationConfig(""); // pageContext.setAttribute(Action.APPLICATION_KEY, appConfig, // PageContext.APPLICATION_SCOPE); // ActionForward actionForward = new ActionForward(); // actionForward.setName(FORWARD_VALUE); // actionForward.setPath(PATH_VALUE); // appConfig.addForwardConfig(actionForward); // elFrameTag.setForwardExpr(FORWARD_VALUE); // HttpServletResponse response = // (HttpServletResponse)pageContext.getResponse(); // int startTagReturn = elFrameTag.doStartTag(); // int afterBodyReturn = elFrameTag.doAfterBody(); // int endTagReturn = elFrameTag.doEndTag(); // } // public void endForward(com.meterware.httpunit.WebResponse testResponse) { // try { // TestHelper.printResponse(testResponse); // org.w3c.dom.Document document = testResponse.getDOM(); // DOMHelper.printNode(document.getDocumentElement()); // } catch (Exception ex) { // ex.printStackTrace(); // fail(); // } // } } ././@LongLink0000644000175000017500000000015010423140531011311 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/html/TestELHiddenTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/html/TestELHiddenTag.j0000644000175000017500000000606110404045254034023 0ustar arnaudarnaud00000000000000/* * $Id: TestELHiddenTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import java.util.HashMap; import javax.servlet.ServletException; import javax.servlet.jsp.JspException; import junit.framework.Test; import junit.framework.TestSuite; import org.apache.struts.util.LabelValueBean; import org.apache.strutsel.taglib.utils.JspTagTestCase; import org.apache.strutsel.taglib.utils.TestHelper; import org.apache.strutsel.taglib.utils.DOMHelper; public class TestELHiddenTag extends JspTagTestCase { protected ELHiddenTag elHiddenTag = null; public TestELHiddenTag(String theName) { super(theName); } public static void main(String[] args) { junit.awtui.TestRunner. main(new String[] { TestELHiddenTag.class.getName() }); } public static Test suite() { return new TestSuite(TestELHiddenTag.class); } public void setUp() { elHiddenTag = new ELHiddenTag(); elHiddenTag.setPageContext(pageContext); } public void tearDown() { elHiddenTag = null; } public void testPlain() throws ServletException, JspException { LabelValueBean bean = new LabelValueBean("junk", "stuff"); pageContext.setAttribute("testFormBean", bean); elHiddenTag.setNameExpr("testFormBean"); elHiddenTag.setPropertyExpr("value"); int startTagReturn = elHiddenTag.doStartTag(); int afterBodyReturn = elHiddenTag.doAfterBody(); int endTagReturn = elHiddenTag.doEndTag(); } public void endPlain(com.meterware.httpunit.WebResponse testResponse) { try { TestHelper.printResponse(testResponse); org.w3c.dom.Document document = testResponse.getDOM(); DOMHelper.printNode(document.getDocumentElement()); HashMap attrMap = new HashMap(); DOMHelper.recordFoundAttributes(testResponse.getDOM(), "/html/body/input", attrMap); DOMHelper. verifyAttributesPresent(attrMap, new String[] { "type", "name", "value" }, false); } catch (Exception ex) { ex.printStackTrace(); fail(); } } } ././@LongLink0000644000175000017500000000014610423140531011316 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/html/TestELHtmlTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/html/TestELHtmlTag.jav0000644000175000017500000000574710404045252034073 0ustar arnaudarnaud00000000000000/* * $Id: TestELHtmlTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.html; import java.util.HashMap; import javax.servlet.ServletException; import javax.servlet.jsp.JspException; import junit.framework.Test; import junit.framework.TestSuite; import org.apache.strutsel.taglib.utils.DOMHelper; import org.apache.strutsel.taglib.utils.JspTagTestCase; import org.apache.strutsel.taglib.utils.TestHelper; public class TestELHtmlTag extends JspTagTestCase { protected ELHtmlTag elHtmlTag = null; public TestELHtmlTag(String theName) { super(theName); } public static void main(String[] args) { junit.awtui.TestRunner. main(new String[] { TestELHtmlTag.class.getName() }); } public static Test suite() { return new TestSuite(TestELHtmlTag.class); } public void setUp() { elHtmlTag = new ELHtmlTag(); elHtmlTag.setPageContext(pageContext); } public void tearDown() { elHtmlTag = null; } public void testPlain() throws ServletException, JspException { Boolean bool = new Boolean(true); pageContext.setAttribute("localeFlag", bool); // elHtmlTag.setLocale("${localeFlag}"); elHtmlTag.setLocaleExpr("true"); elHtmlTag.setXhtmlExpr("true"); int startTagReturn = elHtmlTag.doStartTag(); int afterBodyReturn = elHtmlTag.doAfterBody(); int endTagReturn = elHtmlTag.doEndTag(); } public void endPlain(com.meterware.httpunit.WebResponse testResponse) { try { TestHelper.printResponse(testResponse); org.w3c.dom.Document document = testResponse.getDOM(); DOMHelper.printNode(document.getDocumentElement()); HashMap attrMap = new HashMap(); DOMHelper.recordFoundAttributes(testResponse.getDOM(), "/html", attrMap); DOMHelper. verifyAttributesPresent(attrMap, new String[] { "lang", "xml:lang", "xmlns" }, false); } catch (Exception ex) { ex.printStackTrace(); fail(); } } } libstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/logic/0000755000175000017500000000000010423130300031052 5ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000015010423140531011311 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/logic/TestELMatchTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/logic/TestELMatchTag.j0000644000175000017500000000745310404045252034021 0ustar arnaudarnaud00000000000000/* * $Id: TestELMatchTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.logic; import javax.servlet.ServletException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.Tag; import junit.framework.Test; import junit.framework.TestSuite; import org.apache.cactus.JspTestCase; import org.apache.cactus.WebRequest; import org.apache.strutsel.taglib.utils.TestFormBean; public class TestELMatchTag extends JspTestCase { protected final static String PROP_KEY = "stringProperty"; protected final static String VAR_KEY = "stringVar"; protected final static String VALUE_KEY = "abcde"; protected final static String PREFIX_VALUE_KEY = "abc"; protected final static String BAD_VALUE_KEY = "abx"; protected ELMatchTag elMatchTag = null; public TestELMatchTag(String theName) { super(theName); } public static void main(String[] args) { junit.awtui.TestRunner.main( new String[] { TestELMatchTag.class.getName() }); } public static Test suite() { return new TestSuite(TestELMatchTag.class); } public void setUp() { elMatchTag = new ELMatchTag(); elMatchTag.setPageContext(pageContext); } public void tearDown() { elMatchTag = null; } public void beginMatchStringMatches(WebRequest testRequest) { } public void testMatchStringMatches() throws ServletException, JspException { TestFormBean formBean = new TestFormBean(); formBean.setStringProperty(VALUE_KEY); pageContext.setAttribute("testFormBean", formBean); pageContext.setAttribute(VAR_KEY, VALUE_KEY); elMatchTag.setNameExpr("testFormBean"); elMatchTag.setPropertyExpr(PROP_KEY); elMatchTag.setValueExpr(VALUE_KEY); int startTagReturn = elMatchTag.doStartTag(); assertEquals("Match string matches comparison", true, startTagReturn == Tag.EVAL_BODY_INCLUDE); } // public void testPrefixMatchStringMatches() // throws ServletException, JspException { // pageContext.setAttribute(PROP_KEY, PREFIX_VALUE_KEY); // pageContext.setAttribute(VAR_KEY, VALUE_KEY); // elMatchTag.setVar(VAR_KEY); // elMatchTag.setValue("${" + PROP_KEY + "}"); // int startTagReturn = elMatchTag.doStartTag(); // assertEquals("Match prefix string matches comparison", true, // startTagReturn == Tag.EVAL_BODY_INCLUDE); // } // public void testMatchStringNotMatches() // throws ServletException, JspException { // pageContext.setAttribute(PROP_KEY, BAD_VALUE_KEY); // pageContext.setAttribute(VAR_KEY, VALUE_KEY); // elMatchTag.setVar(VAR_KEY); // elMatchTag.setValue("${" + PROP_KEY + "}"); // int startTagReturn = elMatchTag.doStartTag(); // assertEquals("unMatched string not matches comparison", false, // startTagReturn == Tag.EVAL_BODY_INCLUDE); // } } ././@LongLink0000644000175000017500000000015310423140531011314 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/logic/TestELNotMatchTag.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/logic/TestELNotMatchTa0000644000175000017500000000755310404045252034104 0ustar arnaudarnaud00000000000000/* * $Id: TestELNotMatchTag.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.logic; import javax.servlet.ServletException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.Tag; import junit.framework.Test; import junit.framework.TestSuite; import org.apache.cactus.JspTestCase; import org.apache.cactus.WebRequest; import org.apache.strutsel.taglib.utils.TestFormBean; public class TestELNotMatchTag extends JspTestCase { protected final static String PROP_KEY = "stringProperty"; protected final static String VAR_KEY = "stringVar"; protected final static String VALUE_KEY = "abcde"; protected final static String PREFIX_VALUE_KEY = "abc"; protected final static String BAD_VALUE_KEY = "abx"; protected ELNotMatchTag elNotMatchTag = null; public TestELNotMatchTag(String theName) { super(theName); } public static void main(String[] args) { junit.awtui.TestRunner.main( new String[] { TestELNotMatchTag.class.getName() }); } public static Test suite() { return new TestSuite(TestELNotMatchTag.class); } public void setUp() { elNotMatchTag = new ELNotMatchTag(); elNotMatchTag.setPageContext(pageContext); } public void tearDown() { elNotMatchTag = null; } public void beginMatchStringMatches(WebRequest testRequest) { } public void testMatchStringMatches() throws ServletException, JspException { TestFormBean formBean = new TestFormBean(); formBean.setStringProperty(VALUE_KEY); pageContext.setAttribute("testFormBean", formBean); pageContext.setAttribute(VAR_KEY, VALUE_KEY); elNotMatchTag.setNameExpr("testFormBean"); elNotMatchTag.setPropertyExpr(PROP_KEY); elNotMatchTag.setValueExpr(VALUE_KEY); int startTagReturn = elNotMatchTag.doStartTag(); assertEquals("Match string matches comparison", false, startTagReturn == Tag.EVAL_BODY_INCLUDE); } // public void testPrefixMatchStringMatches() // throws ServletException, JspException { // pageContext.setAttribute(PROP_KEY, PREFIX_VALUE_KEY); // pageContext.setAttribute(VAR_KEY, VALUE_KEY); // elNotMatchTag.setVar(VAR_KEY); // elNotMatchTag.setValue("${" + PROP_KEY + "}"); // int startTagReturn = elNotMatchTag.doStartTag(); // assertEquals("Match prefix string matches comparison", false, // startTagReturn == Tag.EVAL_BODY_INCLUDE); // } // public void testMatchStringNotMatches() // throws ServletException, JspException { // pageContext.setAttribute(PROP_KEY, BAD_VALUE_KEY); // pageContext.setAttribute(VAR_KEY, VALUE_KEY); // elNotMatchTag.setVar(VAR_KEY); // elNotMatchTag.setValue("${" + PROP_KEY + "}"); // int startTagReturn = elNotMatchTag.doStartTag(); // assertEquals("unMatched string not matches comparison", true, // startTagReturn == Tag.EVAL_BODY_INCLUDE); // } } libstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/utils/0000755000175000017500000000000010423130300031115 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/utils/DOMHelper.java0000644000175000017500000001574610404045254033570 0ustar arnaudarnaud00000000000000/* * $Id: DOMHelper.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.utils; import java.util.Iterator; import java.util.Map; import javax.xml.transform.TransformerException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.xpath.CachedXPathAPI; import org.w3c.dom.Attr; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.Text; public class DOMHelper { protected static final String spaces = " "; private static Log log = LogFactory.getLog(DOMHelper.class); public static String getNodeText(org.w3c.dom.Document document, String xpath) throws TransformerException { String result = null; if (!xpath.endsWith("text()")) { if (!xpath.endsWith("/")) xpath += "/"; xpath += "text()"; } CachedXPathAPI xpathAPI = new CachedXPathAPI(); Node foundNode = xpathAPI.selectSingleNode(document, xpath); if (foundNode == null) result = ""; else if (foundNode.getNodeType() == Node.TEXT_NODE) result = ((Text)foundNode).getData(); return (result); } public static void recordFoundAttributes(org.w3c.dom.Document document, String xpath, Map map) throws TransformerException { CachedXPathAPI xpathAPI = new CachedXPathAPI(); Node foundNode = xpathAPI.selectSingleNode(document.getDocumentElement(), xpath); if (foundNode != null) { NamedNodeMap attrMap = foundNode.getAttributes(); for (int ctr = 0; ctr < attrMap.getLength(); ++ctr) { Attr attrNode = (Attr)attrMap.item(ctr); map.put(attrNode.getName(), attrNode.getValue()); } } } public static boolean verifyAttributesPresent(Map attrMap, String[] attrNames, boolean allowOthers) throws Exception { boolean result = true; if (attrNames != null) { // First see if all of the expected attributes were actually found. for (int ctr = 0; ctr < attrNames.length; ++ctr) { if (attrMap.get(attrNames[ctr]) == null) { result = false; throw new Exception("Expected attribute \"" + attrNames[ctr] + "\" was not found in the generated tag."); } } // Now, if no "extra" attributes are allowed, verify that all the // attributes that were found were expected. if (!allowOthers) { for (Iterator iter = attrMap.keySet().iterator(); iter.hasNext();) { String key = (String)iter.next(); boolean found = false; for (int ctr = 0; ctr < attrNames.length; ++ctr) { if (key.equals(attrNames[ctr])) { found = true; break; } } if (!found) { throw new Exception("Attribute \"" + key + "\" was not " + "an expected attribute in the " + "generated tag."); } } } } return (result); } public static boolean verifyAttributesNotPresent(Map attrMap, String[] attrNames) throws Exception { boolean result = true; if (attrNames != null) { for (int ctr = 0; ctr < attrNames.length; ++ctr) { if (attrMap.get(attrNames[ctr]) != null) { result = false; break; } } } return (result); } public static void printNode(Node node) { if (log.isDebugEnabled()) { System.out.println("Node tree:"); printNode(node, 0); } } public static void printNode(Node node, int level) { if (node == null) return; String nodeName = node.getNodeName(); NodeList children = node.getChildNodes(); if (children != null) { short nodeType = node.getNodeType(); if (nodeType == Node.TEXT_NODE) { String text = ((Text)node).getData(); System.out.print(text); } else { System.out.print(spaces.substring(0, level) + "<" + nodeName); NamedNodeMap nodeMap = node.getAttributes(); if (nodeMap.getLength() > 0) { StringBuffer sb = new StringBuffer(); for (int ctr = 0; ctr < nodeMap.getLength(); ++ ctr) { Attr attrnode = (Attr) nodeMap.item(ctr); String name = attrnode.getName(); String value = attrnode.getValue(); sb.append(" " + name + "=\"" + value + "\""); } System.out.print(sb.toString()); } System.out.println(">"); } for (int ctr = 0; ctr < children.getLength(); ++ctr) { Node child = children.item(ctr); printNode(child, level + 1); } if (nodeType != Node.TEXT_NODE) System.out.println( spaces.substring(0, level) + ""); } else System.out.println( spaces.substring(0, level) + "<" + nodeName + "/>"); } } ././@LongLink0000644000175000017500000000016110423140531011313 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/utils/HashMapMessageResources.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/utils/HashMapMessageRe0000644000175000017500000001157110404045254034176 0ustar arnaudarnaud00000000000000/* * $Id: HashMapMessageResources.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.utils; import java.util.HashMap; import java.util.Locale; import org.apache.struts.util.MessageResources; import org.apache.struts.util.MessageResourcesFactory; /** * This is a simple derived class of MessageResources which is * just used for testing custom tags which use the * MessageResources class. */ public class HashMapMessageResources extends MessageResources { private HashMap messages = new HashMap(); public HashMapMessageResources(MessageResourcesFactory factory, String config) { super(factory, config); } public HashMapMessageResources(MessageResourcesFactory factory, String config, boolean returnNull) { super(factory, config, returnNull); } public void addMessage(String key, String value) { addMessage("", key, value); } public void addMessage(String locale, String key, String value) { messages.put(locale + "." + key, value); } /** * Returns a text message for the specified key, for the specified locale. * If no result is found for the given locale, the locale is "trimmed" off * the end of more specific locale modifiers to check for a match. If no * match is found with the trimmed locale, the current "default" locale is * checked, if it is different from the given locale. If still no match is * found, an empty locale specifier is used. * * This method is copied directly from the * PropertyMessageResources class. */ public String getMessage(Locale locale, String key) { // Initialize variables we will require String localeKey = localeKey(locale); String originalKey = messageKey(localeKey, key); String messageKey = null; String message = null; int underscore = 0; boolean addIt = false; // Add if not found under the original key // Loop from specific to general Locales looking for this message while (true) { // Load this Locale's messages if we have not done so yet loadLocale(localeKey); // Check if we have this key for the current locale key messageKey = messageKey(localeKey, key); synchronized (messages) { message = (String)messages.get(messageKey); if (message != null) { if (addIt) messages.put(originalKey, message); return (message); } } // Strip trailing modifiers to try a more general locale key addIt = true; underscore = localeKey.lastIndexOf("_"); if (underscore < 0) break; localeKey = localeKey.substring(0, underscore); } // Try the default locale if the current locale is different if (!defaultLocale.equals(locale)) { localeKey = localeKey(defaultLocale); messageKey = messageKey(localeKey, key); loadLocale(localeKey); synchronized (messages) { message = (String)messages.get(messageKey); if (message != null) { if (addIt) messages.put(originalKey, message); return (message); } } } // As a last resort, try the default Locale localeKey = ""; messageKey = messageKey(localeKey, key); loadLocale(localeKey); synchronized (messages) { message = (String)messages.get(messageKey); if (message != null) { if (addIt) messages.put(originalKey, message); return (message); } } // Return an appropriate error indication if (returnNull) return (null); else return ("???" + messageKey(locale, key) + "???"); } protected void loadLocale(String localeKey) { } } ././@LongLink0000644000175000017500000000015010423140531011311 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/utils/JspTagTestCase.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/utils/JspTagTestCase.j0000644000175000017500000000327110404045252034131 0ustar arnaudarnaud00000000000000/* * $Id: JspTagTestCase.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.utils; import java.util.HashMap; import org.apache.cactus.JspTestCase; public class JspTagTestCase extends JspTestCase { public JspTagTestCase(String theName) { super(theName); } protected void checkAttrValue(HashMap attrMap, com.meterware.httpunit.WebResponse testResponse, String headerKey, String tagName, String attrName) { String attrValue = (String)attrMap.get(attrName); String requiredAttrValue = (String)testResponse.getHeaderField(headerKey); if (!attrValue.equals(requiredAttrValue)) { fail(TestHelper.getAttrErrMess(tagName, attrName, requiredAttrValue, attrValue)); } } } ././@LongLink0000644000175000017500000000014610423140531011316 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/utils/TestFormBean.javalibstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/utils/TestFormBean.jav0000644000175000017500000000241010404045252034157 0ustar arnaudarnaud00000000000000/* * $Id: TestFormBean.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.utils; import org.apache.struts.action.ActionForm; public class TestFormBean extends ActionForm { private String stringProperty; private Object[] arrayProperty; public String getStringProperty() { return (stringProperty); } public void setStringProperty(String stringProperty) { this.stringProperty = stringProperty; } public Object[] getArrayProperty() { return (arrayProperty); } public void setArrayProperty(Object[] arrayProperty) { this.arrayProperty = arrayProperty; } } libstruts1.2-java-1.2.9/contrib/struts-el/src/test/org/apache/strutsel/taglib/utils/TestHelper.java0000644000175000017500000000320210404045252034046 0ustar arnaudarnaud00000000000000/* * $Id: TestHelper.java 54933 2004-10-16 17:04:52Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.strutsel.taglib.utils; import java.io.IOException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class TestHelper { private static Log log = LogFactory.getLog(TestHelper.class); public static void printResponse(com.meterware.httpunit.WebResponse testResponse) throws IOException { log.debug("response text[" + testResponse.getText() + "]"); } public static String getAttrErrMess(String tagName, String attrName, String requiredValue, String actualValue) { return ("The <" + tagName + "> \"" + attrName + "\" attribute " + "should have had value \"" + requiredValue + "\", but it " + "instead had value \"" + actualValue + "\"."); } } libstruts1.2-java-1.2.9/contrib/struts-el/web/0000755000175000017500000000000010404045252021637 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/web/exercise-taglib/0000755000175000017500000000000010423130300024674 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/web/exercise-taglib/WEB-INF/0000755000175000017500000000000010423130300025723 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/web/exercise-taglib/WEB-INF/struts-config.xml0000644000175000017500000001007510404045254031273 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/contrib/struts-el/web/exercise-taglib/WEB-INF/web.xml0000644000175000017500000000413310404045252027235 0ustar arnaudarnaud00000000000000 Struts-EL Taglib Exerciser action org.apache.struts.action.ActionServlet application org.apache.struts.webapp.exercise.ApplicationResources config /WEB-INF/struts-config.xml debug 2 detail 2 2 action *.do index.jsp index.html /WEB-INF/struts-bean-el.tld /WEB-INF/struts-bean-el.tld /WEB-INF/struts-html-el.tld /WEB-INF/struts-html-el.tld /WEB-INF/struts-logic-el.tld /WEB-INF/struts-logic-el.tld /WEB-INF/c.tld /WEB-INF/c.tld /WEB-INF/struts-bean.tld /WEB-INF/struts-bean.tld libstruts1.2-java-1.2.9/contrib/struts-el/web/exercise-taglib/T1.gif0000644000175000017500000000764410404045254025676 0ustar arnaudarnaud00000000000000GIF87a@@÷ÿÿÿççç½½½çÞÞÖÎÎÎÆÆÆ½½½¥¥çÆÆÎ­­½œœÎ¥¥½””Ö¥¥µ„„­{{µ{{Þ””ÆssÖ{{ÎssÆkk½ccÞŒ„猄ބ{Ö{s­ZRµcZçµ­Þ­¥Îœ”Æ”ŒÞ¥œ½Œ„ÆŒ„µ{s­skç½µµ„{Î¥œçœŒÆ{kµkZ祔ޜŒÆ„s½{kµ{kÞ­œç½­Þœ„Δ{Þ¥Œµ)Î)Ö!ÎÆ½Î)½)Ö!µ1½1Ö1ÞcJÎ9Î1Î)µ{cÖR1ÎR)çB!½B!ÆJ!çsRçZ9ÆZ9ÎZ1çJ!Î9­1¥œŒÎ{cÆcBÆZ9½R)ÆJ!ÆB½9­œ„Þ”{ÖŒs΄kÆ{c½ŒkçsRÆkJÆk9çZ1ÆR)½B­”{Μ{çsR½J½{Z½kJ­kB½JµB¥Œs½k1ÖR!­¥ŒÎ”{½¥„Þ{BÞR!¥½­Öµ¥Î­œÆsJµc9¥œsÖœkÞ”cÖZ)œJœÆ­ç­”Μ{Æk9­ÞÖç½µÆs9µc1œµ¥Æ{J­Îµç¥Œ½RŒsBœZ”œ{µ­{Ö{Rœk)œc!”ֽ絜ƭ”½s1œ”k­{R”½ŒÖ{J”ŒZ¥c!„s9ŒÞÆçÆœÖk)„ZsÆ­ÎÆ”Ö½„΄9”{1ŒµŒ½”kœ¥Rµ­{µ¥s­ŒZ”„RŒk)sçÞçÞÖÞÖÎÖÎÆÎ½µ½Æ½ÆÎ½Î­Œ­¥„¥µ„µ¥s¥s1sk!cµs­„9{s1kÎ”ÆÆ„½¥kœ„B{œk”­Zœ”J„µ”­ŒB{„9s„Bsµ{¥Œ9s¥s”œkŒ„9kœc„œR{νÆÖÆÎ½­µ„Bc”JkŒBcµ{”Ö”­­k„œZss1JÆ„œ½¥­Æ”¥”Jc„9R{1JçÎÖε½­s„¥Rk”BZÆ¥­¥ZkœRc”JZŒBR½k{­ZkÖ{ŒÎs„çµ½½Œ”µ{„Æ„ŒÖŒ”Æs{½ksµckœRZ­ZcœJR,@@ÿÍ™C€€ž‰ƒ&:(ì ã ½‚¨Ýr§AsÌš`c&MDiœ5r£IŽ(;ª À×@‚*lØA¦ ƒ7é­jÂDÎ$z2 ЈL;‡2’Ê´©ÐY¸ À,hBÆÂš5"¤GoØ!PþŒª5‹ÇCi@4€%-–±”.\¹¢ 0G€ L… ff˜à Œ†^“0¹cç’Ù´x†¡Õ¶mÊM´5û¶-.×nM}@¢´éNœ(Q Ö¥O@£ô¦+™B×Ñ$Î-· 0`—ñãÈ“¾Å¦ Ò§Q«vp‚ÄŠëØ]Û;fè IÌãÿÁ’‰xÔóÄ‹G´¨½û={¾¨™?•êÓ'8ØO½‡ rpÝ èôòŠ2׉¾€ˆƒÅÝ‚|u|ñEc8án¸D9ô@UçØgjÓÄâ $,²¨I(¡"#)Áôó‚ °N8×`"™Xx¡V`‘@Üâ 7Ñd“D(aÆq BÈ$~¢¥–pl±…?Øæ?ôðÃ;i3¬ðBŽá¬³q‹ˆDxæ@D‘EOTaa^ŽdÂP(fãÚ`ÄgTZég¼ñœF";þðÃRØF‚·òÄHX1† qÿ‚I{¦œc\¶äZ€À À¨wD‚Z*â '°D£l4Ð4 M1ÐtÃÎ8 ¾óŽ?è ÃåpË"˜ÌªÜ9œ³NTƒK¸ØÜp¨³ 7Þ°VÂ@puˆàï~ €À€¿pÀÏ;ä¼s†¶:ì’`z‹¨·npÍ.TP ëPÌœp„œv×Á@Ât"ì'0 8B¿'¼À7œH¡m:ÄÂÁ ®"†…˜’..êVsάO;üì£B8ÌÝ’ÂÔ5ئ€×ü¯Û°B #Ÿ8à P²ÃÍ ë ˆ¨¼²„DŒñ&ƱK«CNÂälÿ ‚ŽÕþˆõ 0 ÃŠ!Zà©,/¼Ãiâ¬C<ôáŽ;é¤2!f‘H1÷¸ ‚ýôãÎÞ{—SÎ7ïL0Ïøcûí…oÀA;ËXòeoÌa:‘÷°-,È׌3ÎÝôÓŽ6̨R  *Q‰1ãPëÎ;Øì­Žë®O>ó\‹»íãøÉ?)Þ¤Ù°hÛ;üøãÎ8}ÜlˆT6|a‰3Á6x…4Ʊ·w¨Ãà+ù&pÂÝN `ŸûH¡ ¦µCwè_,6·½ÍñD8#ØwH#µñAð@ l¨ã† <æ‘€ á`À ÿœGŠ)A ø” ùÁ4~ô$Ä?Ø‘-=Á€@Ý>–6@aA†xð6˜Fð̓|Á5ÖxL€á […7¬Æ:ò@ü0ĤÈÄÔYzâÁ'ú±Â}àMŭ*ððÅ%(ÂÙˆ`>Ä— 0`Žƒ€À†EÔ#r䀲X0@¢`ýØ:С1è)ŒÀ[<,°Å¥µpìè‡4H1‡&e¥ø…ëÆ7\ëq¸ŸÀð±[\CcSÁ Ng{@÷‚åÌ@º`îÜb?âáu`gèÁ˜ùÿ®ô\ T@ÐðA[°‰ø€<Ø-ãAN‰ª®ŸeÇQãqTŽwHÂ`á€Ò+°À VœÚÿ€[(8‡n×±€¸¼mÀ° §b°5DmÇgíJ-¢ŠÖú¸?î°˜Q(ã 8vY&Œ@æ)Ž­zÀ†9À X –Àe¤·G=î‘}lQ¢pÍo:Ø‘Ž¡’VŠþ¨®9Âq€ÑÖ[k”Sz¢¢Š@½ ðf&ΑÞ|€9èÅq§õÙì Õ­eG¨ê˜†FPˆ¡ñVzlk€kœÃ縈ÖUu„5Â<Ø…Q€‚€à¯ @ôßý5©Ý/9Bå¤päW λŒ#±ÇøÆC„- 0Ùœ£< D¹ÀcqðÀBFª[ bÿZ+ÿTpÀ5€£âðÚö8º½AŽÙ…/ŸÃ›^(—c ¸ÂiÞb:ä‡Üvd#ÄñX2¨4—áÔç9ºÊµ.=íaËä*À",k…$ &8Çά ©¤mCÌŽkMZ(+…Pm3½®‰ < BÅpEË.ÁÔçØr Ýê!•Ѐê çÆãÍîØÌ,¦¬‰ÝêÛ¸ÐÓre ØÂ >ðÁÊE€vû@º˜\}T ÐNð€‡}áAZ¼cÒ˜AÕ‚cvWˆÈ)®rE€%X– ç @-`ŠtëBˆ~µ& í|è#ßù†Àæô—ÊgÁêÿ1øÄt…ˆ„*ÁÜí¶Å Ò-æv×¢évǧ  ÐnÀ÷Qá¡|ØOQñɱjp[¬+W ÏÁÈM=¤;zøÄƒnpÌ;èö¦ÇÇ—|u,I(Sg¬š§é[¶EÔ§ó*¤ÛÕ˜x-rñn|€vbŸ@2@»yŸì#Þ¥·U*çžF¸žèn‹ZÌ\†Ö˜8-‘î \`ã …è0ƒ±“ìuÜ?Ê¢Kkµ¶Õ€qÅtµ0 涸{ôN€U¼› €(@Ñß´#»Gó Å‡—ÊZµUª1ìbûà0'ÀÝÑP‹‰'`B?ÿ ( dÆ7>?ÁÄã……Å…­bpݪÚ9¸A¹Ë½ývŸ#™ 8@@go503@o!z³@5@;ŚѻæmóG1F£[Äu}ÖPnÖpw^` &€3À ï&@73Ð5p 8$+À6xšñ ™¦r“ å’g3íf ç°}çÐÈ áG€ù,@‚“€~v±ë dCiyQX*·eåB1–n»7„é&h-@3àá'ó p€Qè‚D”Ì °Ðxìy`H}ÕàM>€•'q\ç]4@ÿðmxPr(…ós0–v AÐw+ìw^x¦`Y>@í&qeص`!€…І-Ð1À-0C‡²£‚æÀÂñ8˜ÅqpO‡+CnÖÇY×}µàA ]@ µ z] €B!!À1à1¹x,`x¨b$qÊÑt Çp¶@w— ©X ‰HÒ(zTІÝÙØÑ ¡Ñsæ-Ñ‡ÃØkÇhŒT禨u݇áÆÇ)´€Ð&€BAvqŽÃ¡…àÆŽ¢¸ðˆ•ÇŒ\'öX‘m˜~AN’p!ÃÿÁz[øm ¹p¸§ƒÂÈ*ö©P &dc-°ìØ…]7›€í¦M°EdyèÝP\qìÝE|úè#Ÿ XÐð@5dSÛ€·]w]Þq'x+íÀàenöYjLh #PÀ°Ï9çT¸ ‚F%Ó( ˆ‹-P 0Á¦ƒB94Ú‹ŸÉÈDTÞ€„ ú ƒŽ6踂dœMT‡Ý–ÝbÙL¡@cl*™ñEP¨å`zBñ¢ŒTf Høs6ó ã£h0Ó_l„%vfcÑÐ` '„¡’eIŃœCt…§Q@±Åzj£ŸTʈQPCËh˜ÿq·ÈPƒ V¤‘¼J` &ÈcŽ9øñ€e 1DMÌ7_*Dqš]1ªÖ' @`³|ù%qÀF(ñ¤;¹¶ë=„‚°[j£Í8*h -¸Ð‚³óÕÃh`ÜÇgŸ`ÁÅ;Þ&,î¸Þœ# Wô€ Ø@ƒ aœ€>æx#¯¼ä¨³Í<#ˆ`ò (£¼Ï *$ÇB0 q_j8à€ˆš‹2ºÌ+âN#Ï=8Êc (˜€°æÄÓp¼Úx3Î8älCÏÕðºB–:î#ß>ùô+ó¶\(C†ÖèO–Ýlbg„"ƒÒùœƒNÃÞxñܳ?þÀ° ºèc·7ZÆó6Ð ­ôÐçpþñ9Ë›w7S~µ M\ðÀÜÆ|^ïsO…9ªù9¥ Ñ1ŽçÄcŽ<®œw2G#O=Ûõ°yçmàƒOá-0!4 ”5LPÈ3 ùÜ£~>þ¤y<‘«/>2L´¸àƒ üãSŽ<¥óÆñœ–7Ô±NT+ÜÕ`Pð9<ÑÈ€¶ ƒ ÎMþ0ƒ+R‚çMc\@€Q(mЋê¨×0‡ ‹jSÃ=б‚„O2ÑÌ`¤Qƒ›=! !DÂ;ÿž@ Ô²*3Äá9œÁI³Çóþw½n˜£UD]=°˜ŽÖm¯p‹“Á"£CFåj 4¨žÀ…0à@gˆ# •ç7L'  êÁ´n NLV=¶XŽy¤ã&Á ÑQ!ÜÀ5²ùÏ`0Ô€²BZñ40b@ノp„<š€Ãò£‡UŽzÀõX‡–´Ô‚„À²Ð> ÁP'6Ñ`‡$¾d†IHƒJ€øÐƒUœAp`„1Ž@èa±Š¼" ^9HFj‰ÌjÂhã,Á—ŠŠ!Še<@xÀ¦À8L¡™pƒÆ`ÿ‹W®£xóF7Êa{€`š«P²SÑ H0€%&1 @1Ø!¨H`ž€€C6”0O>ä³{Ü¢°VWºnÈ£åXG=ìQ¡ÇQaR€Àì*0žbÀO5ÐÀ¤ ˜ÙX̪1:œáS é ØÁ q”–×èê®ø s|cÅóWð¾¤K*¯ÉÆ;uµ€hÀÁFF4Hª„&¢žJ˜ ¬‡\p›Ý,LSùräÈk™]tU#0QÀÛ3vpÔ gøD”ÀŽÌ@ ràEíÑU­ZñšÃ*ì<Ô¶¥dCÒ)㇊”+eÿž!Hº§À9hB˜ç ª1^”ઃ ìËñ å´PúJt¦ó!Þ hPÜ>јyJ MìÄ3$@×cŒFíYY®Z±°å˜¥>–"øÇ6CÚfQ‘€¶:àŸÈg @^ D ç5B ¶ Ëz€€ XG*½Zmpí)ø/3¢¸º¿}F„‘MèSÀ°†7ìBÁy=èq‚œ Â0…i= …Žs\$2Õ½aØ„8Œ#N@Ð }âH4À†7 ·' GAIP²,ƒà  –ïEü²á!™;”å3 `@ÿ½M„– ŒX¼AW¾ñŒEƒЃôèÇ;è1èÆUä(õ%bvÓ#í&Ÿ…`30 †|ÊáÏ€00Š;/㸠¦q úìgôƒÐWë±>î!t„ºÖ2¯ Àa¤tH@&m 9ôö @°«üg¼ Ô$ˆAFàç,úÔô`œ 0ìšhD2@C.€¶iÏ\Oš‹ÃÜ h@ÓnxÃ>ƒ+Ï£î3?®Fï«­íÓ¶ˆ`%"©°‰; F·' ¤Û l0÷¹ƒ¡î6¡#àÁp8Ù~®w´å£§ÐÆ:„!ªcŒ4âOŒÁ kÿhs›Óý†AШÅÞÐ'€€pÄ@ãôðÚ|8d‰W‡y†&òé´é–C$ sÈü}x8 JPìü"Ip¼¯¦»¡'…6ùU‘# PÈ¡Ž*'À¸ß `@#>8ÆÌÛ ?Ç  Dø‚Î1Ò"„`ÎbAR~1[óª1ˆFø n7(PŸ¹@)8ohCF‚8Up‚ |pdÁ|)ˆÂW@¤˜3g'à­#&°<àŠ wš7M ÂZ8! KIŠ4 …¥à×0Øy¼ðŒÃD}Àüÿ3î0óQðÀ Eø‚,Þ€‡>Î UøŠPËŒÀéˆ Ìþ¢Ù÷oÙÅ}ÏÐDR·dæFl‘0E`_Ð jpëöwDà-P·txü0^’!€¸õxÚ& ϰ}±ðv¾…y 8@TÐim€@>@D°ƒú"ØGÁx'r" V""Fbvroð ›VpêFw7qœ í×>T°…YM`x.-@^p¿`_®‚"r$Ü¡mº6i‰ ‚˜Gu@lyP… ì‡> '_˜"¡ Aá’Á†#(k´–dlÿ–zPyWp@~T8q XØð €hØÐzaá¿PŠn"ŠˆÝAk(i 0‡ã¦ †`‰€‰x°‹`‡ a¥ŒD8F(kŽÑŠ”FpŸðvo Á6•H~y˜s{¸‰H!ŒÁhƒaFˆ¸Uk¬¸fq'â6ˆ0´ˆ3÷Š@q­§‰¼˜¤Ân21Ý!k犓†š°zlÂ6‹0nz(Ðeà‘ €i(_Q&‡±ŠÚ¶fnFp”ˆÏX…@q·s¢(Š_ÑI‘Á  °熺vyKæt›ÿF#IuzH’ ©‹×Á8‘Éx/ÉM"´ö†$&Ow“ׂÏH‹$™s’òHŠù -)±ÑÙÑhkÆfˆyQør=‰‰ ‰•`QŠZÉ•\I”n’ˆOQ{FR‚5‰yN§“ÂVÐP…<§slùOQ”CYŠ]é•'’)±94]‘Q”)⃙°VõÅ™á1—±–©™Ã š9]’i_ö'š>°™C:t"ŸyŠ ‰Š¤©š˜‰,jèЙ®AFŽyŠ°Ñ ³óÁI›/9si›õ%»œ±) pœ˜yœj¨†Éš“ù€n{>Æù’ž9ƒ;libstruts1.2-java-1.2.9/contrib/struts-el/web/exercise-taglib/bean-cookie.jsp0000644000175000017500000000465310404045254027612 0ustar arnaudarnaud00000000000000 <%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-html-el.tld" prefix="html-el" %> <%@ taglib uri="/WEB-INF/struts-bean-el.tld" prefix="bean-el" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/c.tld" prefix="c" %> Test Replacements for struts-bean:cookie Tag

    Test Replacements for struts-bean:cookie Tag

    Display the properties of our current session ID cookie (if there is one):

    Property Name Value
    comment
    domain
    maxAge
    name
    path
    secure
    value
    version


    Display the properties of an undefined cookie that was given the default value UNKNOWN_VALUE:

    Property Name Value
    comment
    domain
    maxAge
    name
    path
    secure
    value
    version
    libstruts1.2-java-1.2.9/contrib/struts-el/web/exercise-taglib/bean-define.jsp0000644000175000017500000000720310404045252027563 0ustar arnaudarnaud00000000000000 <%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-html-el.tld" prefix="html-el" %> <%@ taglib uri="/WEB-INF/struts-bean-el.tld" prefix="bean-el" %> <%@ taglib uri="/WEB-INF/c.tld" prefix="c" %> Test Replacements for struts-bean:define Tag

    Test Replacements for struts-bean:define Tag

    Test 1 -- Direct Scalar Variable Defines

    Data Type Value
    boolean
    double
    float
    int
    long
    short
    string
    value

    Test 2 -- Nested Scalar Variable Defines

    Data Type Value
    boolean
    double
    float
    int
    long
    short
    string
    libstruts1.2-java-1.2.9/contrib/struts-el/web/exercise-taglib/bean-dyna.jsp0000644000175000017500000000273010404045252027264 0ustar arnaudarnaud00000000000000 <%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-html-el.tld" prefix="html-el" %> <%@ taglib uri="/WEB-INF/struts-bean-el.tld" prefix="bean-el" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/c.tld" prefix="c" %> Testing access of DynaActionForms through JSTL/Struts-EL

    Test access of DynaActionForms through JSTL/Struts-EL

    <%-- This will just return an empty string --%>
    Property bean:write reference c:out reference
    foo
    bar
    thing <%-- This will throw an exception, as the "thing" property is not defined. --%> <exception>
    libstruts1.2-java-1.2.9/contrib/struts-el/web/exercise-taglib/bean-header.jsp0000644000175000017500000000207410404045252027562 0ustar arnaudarnaud00000000000000 <%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-html-el.tld" prefix="html-el" %> <%@ taglib uri="/WEB-INF/struts-bean-el.tld" prefix="bean-el" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/c.tld" prefix="c" %> Test Replacements for struts-bean:header Tag

    Test Replacements for struts-bean:header Tag

    Display the values of the headers included in this request.

    Header Name Header Value
    UNKNOWN HEADER
    libstruts1.2-java-1.2.9/contrib/struts-el/web/exercise-taglib/bean-include.jsp0000644000175000017500000000262110404045254027755 0ustar arnaudarnaud00000000000000 <%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-html-el.tld" prefix="html-el" %> <%@ taglib uri="/WEB-INF/struts-bean-el.tld" prefix="bean-el" %> <%@ taglib uri="/WEB-INF/c.tld" prefix="c" %> Test bean-el:include Tag and Replacements

    Test bean-el:include Tag and Replacements

    Display the contents returned by invoking /index.jsp using <c:import>, with no filtering.


    
    

    Display the contents returned by invoking /index.jsp using <c:import>, with filtering.


    
    

    Display the contents returned by invoking /index.jsp using <bean-el:include>, with no filtering.


    
    

    Display the contents returned by invoking /index.jsp using <bean-el:include>, with filtering.


    
    

    libstruts1.2-java-1.2.9/contrib/struts-el/web/exercise-taglib/bean-parameter.jsp0000644000175000017500000000265210404045252030314 0ustar arnaudarnaud00000000000000 <%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-html-el.tld" prefix="html-el" %> <%@ taglib uri="/WEB-INF/struts-bean-el.tld" prefix="bean-el" %> <%@ taglib uri="/WEB-INF/c.tld" prefix="c" %> Test Replacements for struts-bean:parameter Tag

    Test Replacements for struts-bean:parameter Tag

    If called from the index.jsp page, two request parameters will be included and their values displayed below. If you call this page without including the appropriate request parameters, you will receive a JSP runtime error instead.

    Parameter Name Correct Value Test Result
    param1 value1
    param2 value2
    param3 UNKNOWN VALUE
    libstruts1.2-java-1.2.9/contrib/struts-el/web/exercise-taglib/bean-resource.jsp0000644000175000017500000000164410404045252030163 0ustar arnaudarnaud00000000000000 <%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-html-el.tld" prefix="html-el" %> <%@ taglib uri="/WEB-INF/struts-bean-el.tld" prefix="bean-el" %> <%@ taglib uri="/WEB-INF/c.tld" prefix="c" %> Test struts bean-el Resource Tag

    Test struts bean-el Resource Tag

    Display the contents of the /WEB-INF/web.xml resource for this web application, with no filtering.


    
    

    Display the contents of the /WEB-INF/web.xml resource for this web application, with filtering.


    
    

    libstruts1.2-java-1.2.9/contrib/struts-el/web/exercise-taglib/bean-size.jsp0000644000175000017500000000530310404045252027302 0ustar arnaudarnaud00000000000000 <%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-bean-el.tld" prefix="bean-el" %> <%@ taglib uri="/WEB-INF/c.tld" prefix="c" %> Test struts bean-el Size Tag <% java.util.ArrayList data = new java.util.ArrayList(); data.add("First"); data.add("Second"); data.add("Third"); data.add("Fourth"); data.add("Fifth"); pageContext.setAttribute("list", data, PageContext.PAGE_SCOPE); java.util.HashMap temp = new java.util.HashMap(); temp.put("First", "0"); temp.put("Second", "1"); temp.put("Third", "2"); temp.put("Fourth", "3"); temp.put("Fifth", "4"); pageContext.setAttribute("map", temp, PageContext.PAGE_SCOPE); %> <%-- Change "${list}" to "${data}" to demonstrate NPE, and need for better exception in "Sizetag.doStartTag()". --%>

    Test struts bean-el Size Tag

    Collection Type Correct Value Test Result
    Bean (List) <%= list.size() %>
    Bean (Map) <%= map.size() %>
    Collection (List) <%= data.size() %>
    Collection (Map) <%= temp.size() %>
    Property (int[]) <% int intValues[] = bean.getIntArray(); out.print(intValues.length); %>
    Property (String[]) <% String stringValues[] = bean.getStringArray(); out.print(stringValues.length); %>
    libstruts1.2-java-1.2.9/contrib/struts-el/web/exercise-taglib/bean-write.jsp0000644000175000017500000001272210404045254027467 0ustar arnaudarnaud00000000000000 <%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-html-el.tld" prefix="html-el" %> <%@ taglib uri="/WEB-INF/struts-bean-el.tld" prefix="bean-el" %> <%@ taglib uri="/WEB-INF/c.tld" prefix="c" %> Test Replacements for struts bean:write Tag

    Test Replacements for struts bean:write Tag

    Test 1 -- Scalar Variable Lookups

    <% pageContext.setAttribute("test1.boolean", new Boolean(true)); pageContext.setAttribute("test1.double", new Double(321.0)); pageContext.setAttribute("test1.float", new Float((float) 123.0)); pageContext.setAttribute("test1.int", new Integer(123)); pageContext.setAttribute("test1.long", new Long(321)); pageContext.setAttribute("test1.short", new Short((short) 987)); pageContext.setAttribute("test1.string", "This is a string"); %> <%-- Notice that the "value" attribute is not "${test1.boolean}". This would be interpreted as the "boolean" attribute of the "test1" scoped variable, whereas this scoped variable is really named "test1.boolean". --%>
    Data Type Value
    boolean
    double
    float
    int
    long
    short
    String

    Test 2 -- Scalar Property Lookups

    Data Type Value
    boolean
    double
    float
    int
    long
    short
    String

    Test 3 - Integer Array And Indexed Lookups

    Correct Value Array Result Indexed Result
    <%-- Simulated "indexed" arrays, ala Struts, is not available in the EL. --%> N/A

    Test 4 - String Array And Indexed Lookups

    Correct Value Array Result Indexed Result
    <%-- Simulated "indexed" arrays, ala Struts, is not available in the EL. --%> N/A

    Test 5 -- Nested Scalar Property Lookups

    Data Type Value
    boolean
    double
    float
    int
    long
    short
    String

    Test 6 - Nested Integer Array And Indexed Lookups

    Correct Value Array Result Indexed Result
    <%-- Simulated "indexed" arrays, ala Struts, is not available in the EL. --%> N/A
    libstruts1.2-java-1.2.9/contrib/struts-el/web/exercise-taglib/html-button.jsp0000644000175000017500000000402110404045252027676 0ustar arnaudarnaud00000000000000 <%@ page language="java"%> <%@ taglib uri="/WEB-INF/struts-bean-el.tld" prefix="bean-el" %> <%@ taglib uri="/WEB-INF/struts-html-el.tld" prefix="html-el" %> <%@ taglib uri="/WEB-INF/struts-logic-el.tld" prefix="logic-el" %> <%@ taglib uri="/WEB-INF/c.tld" prefix="c" %> Test html-el:button Tag

    Test struts html-el:button Tag

    libstruts1.2-java-1.2.9/contrib/struts-el/web/exercise-taglib/html-file.jsp0000644000175000017500000000222110404045252027302 0ustar arnaudarnaud00000000000000 <%@ page language="java"%> <%@ taglib uri="/WEB-INF/struts-bean-el.tld" prefix="bean-el" %> <%@ taglib uri="/WEB-INF/struts-html-el.tld" prefix="html-el" %> <%@ taglib uri="/WEB-INF/struts-logic-el.tld" prefix="logic-el" %> <%@ taglib uri="/WEB-INF/c.tld" prefix="c" %> Test html-el:file Tag

    Test struts html-el:file Tag

    libstruts1.2-java-1.2.9/contrib/struts-el/web/exercise-taglib/html-frame.jsp0000644000175000017500000000237510404045252027467 0ustar arnaudarnaud00000000000000 <%@ page language="java"%> <%@ taglib uri="/WEB-INF/struts-bean-el.tld" prefix="bean-el" %> <%@ taglib uri="/WEB-INF/struts-html-el.tld" prefix="html-el" %> <%@ taglib uri="/WEB-INF/struts-logic-el.tld" prefix="logic-el" %> <%@ taglib uri="/WEB-INF/c.tld" prefix="c" %> <% Integer border = new Integer(0); pageContext.setAttribute("border", border); String thing = "thisFrame"; pageContext.setAttribute("thing", thing); String scrolling = "yes"; pageContext.setAttribute("scrolling", scrolling); %> libstruts1.2-java-1.2.9/contrib/struts-el/web/exercise-taglib/html-frame1.jsp0000644000175000017500000000064510404045254027550 0ustar arnaudarnaud00000000000000 <%@ page language="java"%> <%@ taglib uri="/WEB-INF/struts-bean-el.tld" prefix="bean-el" %> <%@ taglib uri="/WEB-INF/struts-html-el.tld" prefix="html-el" %> <%@ taglib uri="/WEB-INF/struts-logic-el.tld" prefix="logic-el" %> <%@ taglib uri="/WEB-INF/c.tld" prefix="c" %> Frame1 libstruts1.2-java-1.2.9/contrib/struts-el/web/exercise-taglib/html-indexed.jsp0000644000175000017500000000342010404045254030007 0ustar arnaudarnaud00000000000000 <%@ page language="java"%> <%@ taglib uri="/WEB-INF/struts-bean-el.tld" prefix="bean-el" %> <%@ taglib uri="/WEB-INF/struts-html-el.tld" prefix="html-el" %> <%@ taglib uri="/WEB-INF/struts-logic-el.tld" prefix="logic-el" %> <%@ taglib uri="/WEB-INF/c.tld" prefix="c" %> Test indexed HTML tags

    Test indexed HTML tags

    X: Y:
    Submit Changes
    ( [,] )
    (,)
    libstruts1.2-java-1.2.9/contrib/struts-el/web/exercise-taglib/html-input.jsp0000644000175000017500000000530510404045252027530 0ustar arnaudarnaud00000000000000 <%@ page language="java"%> <%@ taglib uri="/WEB-INF/struts-bean-el.tld" prefix="bean-el" %> <%@ taglib uri="/WEB-INF/struts-html-el.tld" prefix="html-el" %> <%@ taglib uri="/WEB-INF/struts-logic-el.tld" prefix="logic-el" %> <%@ taglib uri="/WEB-INF/c.tld" prefix="c" %> <% String thing = "thing"; pageContext.setAttribute("thing", thing); %> Test html-el input tags

    Test struts html-el input tags

      Save Save Reset Cancel  
    libstruts1.2-java-1.2.9/contrib/struts-el/web/exercise-taglib/html-link.jsp0000644000175000017500000002004210404045252027321 0ustar arnaudarnaud00000000000000 <%@ page language="java"%> <%@ taglib uri="/WEB-INF/struts-bean-el.tld" prefix="bean-el" %> <%@ taglib uri="/WEB-INF/struts-html-el.tld" prefix="html-el" %> <%@ taglib uri="/WEB-INF/struts-logic-el.tld" prefix="logic-el" %> <%@ taglib uri="/WEB-INF/c.tld" prefix="c" %> Test html-el:link Tag <% String newValue = "New string value"; pageContext.setAttribute("newValue", newValue); java.util.HashMap newValues = new java.util.HashMap(); newValues.put("floatProperty", new Float(444.0)); newValues.put("intProperty", new Integer(555)); newValues.put("stringArray", new String[] { "Value 1", "Value 2", "Value 3" }); pageContext.setAttribute("newValues", newValues); %>

    Test struts-html Link Tag

    The following links should hyperlink back to this page, with various combinations of request parameters used to modify the previous values of the associated form bean. Press the "Cancel" button to return to the main menu.
    Current Values
    booleanProperty intProperty
    doubleProperty longProperty
    floatProperty stringProperty
    stringArray
    Hyperlinks To Be Tested
    No modifications at all
    Double and long via hard coded changes
    String via paramId and paramName
    Boolean via paramId, paramName, and paramValue
    Float, int, and stringArray via name (Map)
    No modifications at all
    Double and long via hard coded changes
    String via paramId and paramName
    Boolean via paramId, paramName, and paramValue
    Float, int, and stringArray via name (Map)
    Reset and Cancel Buttons
    Reset Cancel
    libstruts1.2-java-1.2.9/contrib/struts-el/web/exercise-taglib/html-messages.jsp0000644000175000017500000001047210404045252030201 0ustar arnaudarnaud00000000000000 <%@ page language="java" import="org.apache.struts.action.*" %> <%@ taglib uri="/WEB-INF/struts-html-el.tld" prefix="html-el" %> <%@ taglib uri="/WEB-INF/c.tld" prefix="c" %> Test Error and Message Tags <% ActionErrors errors = new ActionErrors(); errors.add("property1", new ActionError("property1error1")); errors.add("property2", new ActionError("property2error1")); errors.add("property2", new ActionError("property2error2")); errors.add("property2", new ActionError("property2error3")); errors.add("property3", new ActionError("property3error1")); errors.add("property3", new ActionError("property3error2")); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("globalError")); request.setAttribute(Action.ERROR_KEY, errors); ActionMessages messages = new ActionMessages(); messages.add("property1", new ActionMessage("property1message1")); messages.add("property2", new ActionMessage("property2message1")); messages.add("property2", new ActionMessage("property2message2")); messages.add("property2", new ActionMessage("property2message3")); messages.add("property3", new ActionMessage("property3message1")); messages.add("property3", new ActionMessage("property3message2")); messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("globalMessage")); request.setAttribute(Action.MESSAGE_KEY, messages); %>

    Test Error and Message Tags

    ERRORS Tag

    Test Type Correct Value Test Result
    Errors for Property 1
    Property 1, Error 1
    Errors for Property 2
    Property 2, Error 1
    Property 2, Error 2
    Property 2, Error 3
    All Errors
    Property 1, Error 1
    Property 2, Error 1
    Property 2, Error 2
    Property 2, Error 3
    Property 3, Error 1
    Property 3, Error 2
    Global Error

    MESSAGES Tag

    Test Type Correct Value Test Result
    Messages for Property 1
    Property 1, Message 1
    Messages for Property 2
    Property 2, Message 1
    Property 2, Message 2
    Property 2, Message 3
    All Messages
    Property 1, Message 1
    Property 2, Message 1
    Property 2, Message 2
    Property 2, Message 3
    Property 3, Message 1
    Property 3, Message 2
    Global Message
    libstruts1.2-java-1.2.9/contrib/struts-el/web/exercise-taglib/html-multibox.jsp0000644000175000017500000001153510404045252030236 0ustar arnaudarnaud00000000000000 <%@ page language="java"%> <%@ taglib uri="/WEB-INF/struts-bean-el.tld" prefix="bean-el" %> <%@ taglib uri="/WEB-INF/struts-html-el.tld" prefix="html-el" %> <%@ taglib uri="/WEB-INF/struts-logic-el.tld" prefix="logic-el" %> <%@ taglib uri="/WEB-INF/c.tld" prefix="c" %> Test html-el:multibox Tag

    Test struts html-el:multibox Tag

    Whatever changes you make to properties should be reflected when the page is redisplayed. When first started, all of the listed checkboxes should be selected. Press "Save" to update, or "Cancel" to return to the main menu.
    String Array Values
    String 0 String 0 (nested) String 0
    String 1 String 1 (nested) String 1
    String 2 String 2 (nested) String 2
    String 3 String 3 (nested) String 3
    String 4 String 4 (nested) String 4
    Integer Array Values
    0 (nested) 0 0
    10 (nested) 10 10
    20 (nested) 20 20
    30 (nested) 30 30
    40 (nested) 40 40
    50 (nested) 50 50
      Save Reset Cancel  
    libstruts1.2-java-1.2.9/contrib/struts-el/web/exercise-taglib/html-radio.jsp0000644000175000017500000000420210404045252027462 0ustar arnaudarnaud00000000000000 <%@ page language="java"%> <%@ taglib uri="/WEB-INF/struts-bean-el.tld" prefix="bean-el" %> <%@ taglib uri="/WEB-INF/struts-html-el.tld" prefix="html-el" %> <%@ taglib uri="/WEB-INF/struts-logic-el.tld" prefix="logic-el" %> <%@ taglib uri="/WEB-INF/c.tld" prefix="c" %> Test html-el:radio Tag

    Test struts html-el:radio Tag

    flag one
    flag two
    flag three
    Save
    libstruts1.2-java-1.2.9/contrib/struts-el/web/exercise-taglib/html-select.jsp0000644000175000017500000001254610404045252027655 0ustar arnaudarnaud00000000000000 <%@ page language="java" import="java.util.*, org.apache.struts.util.*"%> <%@ taglib uri="/WEB-INF/struts-bean-el.tld" prefix="bean-el" %> <%@ taglib uri="/WEB-INF/struts-html-el.tld" prefix="html-el" %> <%@ taglib uri="/WEB-INF/struts-logic-el.tld" prefix="logic-el" %> <%@ taglib uri="/WEB-INF/c.tld" prefix="c" %> Test html-el:select Tag <% String multipleValues[] = { "Multiple 0", "Multiple 1", "Multiple 2", "Multiple 3", "Multiple 4", "Multiple 5", "Multiple 6", "Multiple 7", "Multiple 8", "Multiple 9" }; pageContext.setAttribute("multipleValues", multipleValues); Vector options = new Vector(); options.add(new LabelValueBean("Label 0", "Value 0")); options.add(new LabelValueBean("Label 1", "Value 1")); options.add(new LabelValueBean("Label 2", "Value 2")); options.add(new LabelValueBean("Label 3", "Value 3")); options.add(new LabelValueBean("Label 4", "Value 4")); options.add(new LabelValueBean("Label 5", "Value 5")); options.add(new LabelValueBean("Label 6", "Value 6")); options.add(new LabelValueBean("Label 7", "Value 7")); options.add(new LabelValueBean("Label 8", "Value 8")); options.add(new LabelValueBean("Label 9", "Value 9")); pageContext.setAttribute("options", options); String withNulls[] = { "String 0", null, "String 2" }; pageContext.setAttribute("withNulls", withNulls); %>

    Test struts-html-el Select Tag

    Whatever changes you make to properties should be reflected when the page is redisplayed. Press "Save" to update, or "Cancel" to return to the main menu. <%-- Ensure that the form bean exists before the form tag is processed. This is a simple (if not entirely clean) way of ensuring that the initial values assigned during bean instantiation will be available within the form, since reset() will not be called when the form bean already exists. The right way to fix this is to modify this webapp so that it does not refer directly to JSP pages, but goes through Action classes, and to either modify the TestBean class, adding an initialize() method, or to have an Action class set the initial values. --%>
    Single Select Allowed: Single 0 Single 1 Single 2 Single 3 Single 4 Single 5 Single 6 Single 7 Single 8 Single 9
    Multiple Select Allowed:
    Multiple Select From A Collection (Using <html-el:options>):
    Multiple Select From A Collection (Using <html-el:optionsCollection>):
    Collection with null labels and values:
    Disabled select
    Save Reset Cancel
    libstruts1.2-java-1.2.9/contrib/struts-el/web/exercise-taglib/html-setters.jsp0000644000175000017500000001165010404045254030064 0ustar arnaudarnaud00000000000000 <%@ page language="java"%> <%@ taglib uri="/WEB-INF/struts-bean-el.tld" prefix="bean-el" %> <%@ taglib uri="/WEB-INF/struts-html-el.tld" prefix="html-el" %> <%@ taglib uri="/WEB-INF/struts-logic-el.tld" prefix="logic-el" %> <%@ taglib uri="/WEB-INF/c.tld" prefix="c" %> Test struts-html-el Property Setters

    Test struts-html-el Property Setters

    Whatever changes you make to properties should be reflected when the page is redisplayed. Press "Save" to update, or "Cancel" to return to the main menu.
    Scalar Properties
    booleanProperty nested.booleanProperty
    doubleProperty nested.doubleProperty
    floatProperty nested.floatProperty
    intProperty nested.intProperty
    longProperty nested.longProperty
    stringProperty nested.stringProperty
    Indexed Properties
    intIndexed[0] nested.intIndexed[0]
    intIndexed[1] nested.intIndexed[1]
    stringIndexed[0] nested.stringIndexed[0]
    stringIndexed[1] nested.stringIndexed[1]
    stringIndexed[1] nested.stringIndexed[1]
    stringIndexed[1] nested.stringIndexed[1]
      Save Reset Cancel  
    libstruts1.2-java-1.2.9/contrib/struts-el/web/exercise-taglib/index.jsp0000644000175000017500000000713310404045252026537 0ustar arnaudarnaud00000000000000 <%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-html-el.tld" prefix="html-el" %> Struts-EL Test Application

    Struts-EL Test Pages

    BEAN Tags

    HTML Tags

    LOGIC Tags

    Replacements for Struts tags not ported to Struts-EL

    BEAN Tags

    LOGIC Tags

    Other Testable Features

    • DynaActionForm References in EL[Source]
    libstruts1.2-java-1.2.9/contrib/struts-el/web/exercise-taglib/logic-compare.jsp0000644000175000017500000004070110404045254030151 0ustar arnaudarnaud00000000000000 <%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-html-el.tld" prefix="html-el" %> <%@ taglib uri="/WEB-INF/struts-bean-el.tld" prefix="bean-el" %> <%@ taglib uri="/WEB-INF/c.tld" prefix="c" %> Test Replacements for struts comparison tags

    Test Replacements for struts comparison tags

    <% String bool1 = "true"; String bool2 = "false"; String doub1 = "321.0"; String doub2 = "111.0"; String doub3 = "333.0"; String long1 = "321"; String long2 = "111"; String long3 = "333"; String short1 = "987"; String short2 = "654"; String short3 = "999"; String str1 = "This is a string"; String str2 = "Less than"; String str3 = "XYZ greater than"; pageContext.setAttribute("bool1", bool1); pageContext.setAttribute("bool2", bool2); pageContext.setAttribute("doub1", doub1); pageContext.setAttribute("doub2", doub2); pageContext.setAttribute("doub3", doub3); pageContext.setAttribute("long1", long1); pageContext.setAttribute("long2", long2); pageContext.setAttribute("long3", long3); pageContext.setAttribute("short1", short1); pageContext.setAttribute("short2", short2); pageContext.setAttribute("short3", short3); pageContext.setAttribute("str1", str1); pageContext.setAttribute("str2", str2); pageContext.setAttribute("str3", str3); %>
    Test Type Variable Content Value Content Correct Value Test Result
    boolean / EQ equal equal notEqual
    boolean / EQ equal equal notEqual
    boolean / NE notEqual equal notEqual
    boolean / NE notEqual equal notEqual
    double / EQ equal greaterEqual lessEqual equal greaterEqual greaterThan lessEqual lessThan notEqual
    double / GT greaterEqual greaterThan notEqual equal greaterEqual greaterThan lessEqual lessThan notEqual
    double / LT lessEqual lessThan notEqual equal greaterEqual greaterThan lessEqual lessThan notEqual
    float / EQ lessEqual lessThan notEqual equal greaterEqual greaterThan lessEqual lessThan notEqual
    float / GT greaterEqual greaterThan notEqual equal greaterEqual greaterThan lessEqual lessThan notEqual
    float / LT lessEqual lessThan notEqual equal greaterEqual greaterThan lessEqual lessThan notEqual
    int / EQ lessEqual lessThan notEqual equal greaterEqual greaterThan lessEqual lessThan notEqual
    int / GT greaterEqual greaterThan notEqual equal greaterEqual greaterThan lessEqual lessThan notEqual
    int / LT lessEqual lessThan notEqual equal greaterEqual greaterThan lessEqual lessThan notEqual
    long / EQ equal greaterEqual lessEqual equal greaterEqual greaterThan lessEqual lessThan notEqual
    long / GT greaterEqual greaterThan notEqual equal greaterEqual greaterThan lessEqual lessThan notEqual
    long / LT lessEqual lessThan notEqual equal greaterEqual greaterThan lessEqual lessThan notEqual
    short / EQ equal greaterEqual lessEqual equal greaterEqual greaterThan lessEqual lessThan notEqual
    short / GT greaterEqual greaterThan notEqual equal greaterEqual greaterThan lessEqual lessThan notEqual
    short / LT lessEqual lessThan notEqual equal greaterEqual greaterThan lessEqual lessThan notEqual
    string / EQ equal greaterEqual lessEqual equal greaterEqual greaterThan lessEqual lessThan notEqual
    string / GT greaterEqual greaterThan notEqual equal greaterEqual greaterThan lessEqual lessThan notEqual
    string / LT lessEqual lessThan notEqual equal greaterEqual greaterThan lessEqual lessThan notEqual
    string / NULL   equal greaterEqual lessEqual equal greaterEqual greaterThan lessEqual lessThan notEqual
    libstruts1.2-java-1.2.9/contrib/struts-el/web/exercise-taglib/logic-empty.jsp0000644000175000017500000000343110404045252027656 0ustar arnaudarnaud00000000000000 <%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-html-el.tld" prefix="html-el" %> <%@ taglib uri="/WEB-INF/struts-bean-el.tld" prefix="bean-el" %> <%@ taglib uri="/WEB-INF/c.tld" prefix="c" %> Test Replacements for struts emptiness tags

    Test Replacements for struts emptiness tags

    Test Type Correct Value Test Result
    null empty empty notEmpty
    empty string empty empty notEmpty
    non-empty string notEmpty empty notEmpty
    non-string object notEmpty empty notEmpty
    libstruts1.2-java-1.2.9/contrib/struts-el/web/exercise-taglib/logic-iterate.jsp0000644000175000017500000000767210404045252030170 0ustar arnaudarnaud00000000000000 <%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-html-el.tld" prefix="html-el" %> <%@ taglib uri="/WEB-INF/struts-bean-el.tld" prefix="bean-el" %> <%@ taglib uri="/WEB-INF/struts-logic-el.tld" prefix="logic-el" %> <%@ taglib uri="/WEB-INF/c.tld" prefix="c" %> Test struts logic-el Iterate Tag <% { java.util.ArrayList list = new java.util.ArrayList(); list.add("First"); list.add("Second"); list.add("Third"); list.add("Fourth"); list.add("Fifth"); pageContext.setAttribute("list", list, PageContext.PAGE_SCOPE); int intArray[] = new int[] { 0, 10, 20, 30, 40 }; pageContext.setAttribute("intArray", intArray, PageContext.PAGE_SCOPE); } %>

    Test struts logic-el Iterate Tag

    Test 1 - Iterate Over A String Array [0..4]

    1.  []

    Test 2 - Iterate Over A String Array [0..2]

    1.  []

    Test 3 - Iterate Over A String Array [3..4]

    1.  []

    Test 4 - Iterate Over A String Array [1..3]

    1.  []

    Test 5 - Iterate Over an Array List

    1.  []

    Test 6 - Iterate Over an Array List [0..2]

    1.  []

    Test 7 - Iterate Over an Array List [2..4]

    1.  []

    Test 8 - Iterate Over an int array

    1.  []

    Test 9 - Iterate Over an int array [0..2]

    1.  []

    Test 10 - Iterate Over an int array [2..4]

    1.  []

    Test 11 - Iterate Over HTTP Headers

    libstruts1.2-java-1.2.9/contrib/struts-el/web/exercise-taglib/logic-match.jsp0000644000175000017500000002066710404045254027630 0ustar arnaudarnaud00000000000000 <%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-html-el.tld" prefix="html-el" %> <%@ taglib uri="/WEB-INF/struts-bean-el.tld" prefix="bean-el" %> <%@ taglib uri="/WEB-INF/struts-logic-el.tld" prefix="logic-el" %> <%@ taglib uri="/WEB-INF/c.tld" prefix="c" %> Test struts logic-el Match Tags

    Test struts logic-el Match Tags

    <% pageContext.setAttribute("string", "String test value"); %>
    Key Value
    <%-- This isn't an exact parallel. With "bean:cookie", you can specify a default value. That would take another step with this. --%>
    Test Type Variable Content Value Content Correct Value Test Test Result
    Cookie / Any 0 contains <%-- The functionality of "logic:match" will eventually be available through a string function in the EL expression. --%> match notMatch missing
    Cookie / End 0 ends with match notMatch missing
    Cookie / Start 0 starts with match notMatch missing
    Header / Any Mozilla contains match notMatch missing
    Header / End Mozilla ends with match notMatch missing
    Header / Start Mozilla starts with match notMatch missing
    Name / Any value contains match notMatch
    Name / End value ends with match notMatch
    Name / Start value starts with match notMatch
    Parameter / Any value1 contains match notMatch missing
    Parameter / End value1 ends with match notMatch missing
    Parameter / Start value1 starts with match notMatch missing
    Property / Any FOO contains match notMatch
    Property / End FOO ends with match notMatch
    Property / Start FOO starts with match notMatch
    libstruts1.2-java-1.2.9/contrib/struts-el/web/exercise-taglib/logic-present.jsp0000644000175000017500000000760610404045254030212 0ustar arnaudarnaud00000000000000 <%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-html-el.tld" prefix="html-el" %> <%@ taglib uri="/WEB-INF/struts-bean-el.tld" prefix="bean-el" %> <%@ taglib uri="/WEB-INF/struts-logic-el.tld" prefix="logic-el" %> <%@ taglib uri="/WEB-INF/c.tld" prefix="c" %> Test Struts presence tags and Replacements

    Test Struts presence tags and Replacements

    Test Type Correct Value Test Result
    Role notPresent present notPresent
    Bean present present notPresent
    Bean notPresent present notPresent
    Cookie present notPresent present notPresent
    Cookie notPresent present notPresent
    Header present present notPresent
    Header notPresent present notPresent
    Parameter present present notPresent
    Parameter notPresent present notPresent
    Property present present notPresent
    Property notPresent present notPresent
    libstruts1.2-java-1.2.9/contrib/struts-el/web/exercise-taglib/logic-redirect.jsp0000644000175000017500000000264310404045252030325 0ustar arnaudarnaud00000000000000 <%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-html-el.tld" prefix="html-el" %> <%@ taglib uri="/WEB-INF/struts-bean-el.tld" prefix="bean-el" %> <%@ taglib uri="/WEB-INF/struts-logic-el.tld" prefix="logic-el" %> <%@ taglib uri="/WEB-INF/c.tld" prefix="c" %> Test Struts <logic:redirect> tag

    Test Struts <logic:redirect> tag

    Redirect with Forward
    Redirect with Href
    Redirect with Page
    libstruts1.2-java-1.2.9/contrib/struts-el/web/exercise-taglib/showSource.jsp0000644000175000017500000000132510404045252027566 0ustar arnaudarnaud00000000000000 <%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-html-el.tld" prefix="html-el" %> <%@ taglib uri="/WEB-INF/struts-bean-el.tld" prefix="bean-el" %> <%@ taglib uri="/WEB-INF/c.tld" prefix="c" %> Source for page: <c:out value="${param.path}"/>

    Source for page:



    libstruts1.2-java-1.2.9/contrib/struts-el/web/test/0000755000175000017500000000000010423130300022604 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/web/test/test/0000755000175000017500000000000010404045254023577 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-el/web/test/jspRedirector.jsp0000644000175000017500000000264510404045254026164 0ustar arnaudarnaud00000000000000<%@page import="org.apache.cactus.server.*, org.apache.cactus.util.log.LogService" session="true" %><% /** * * Note: * It is very important not to put any character between the end * of the page tag and the beginning of the java code expression, otherwise, * the generated servlet containss a 'out.println("\r\n");' and this breaks * our mechanism ! */ /** * This JSP is used as a proxy to call your server-side unit tests. We use * a JSP rather than a servlet because for testing custom JSP tags for * example we need access to JSP implicit objects (PageContext and * JspWriter). */ /** * Initialise logging if not already initialised */ if (!LogService.getInstance().isInitialized()) { LogService.getInstance().init("/log_server.properties"); } JspImplicitObjects objects = new JspImplicitObjects(); objects.setHttpServletRequest(request); objects.setHttpServletResponse(response); objects.setServletConfig(config); objects.setServletContext(application); objects.setJspWriter(out); objects.setPageContext(pageContext); JspTestRedirector redirector = new JspTestRedirector(); redirector.doGet(objects); %> libstruts1.2-java-1.2.9/contrib/struts-el/LICENSE.CheckStyle0000644000175000017500000000136110404045252024125 0ustar arnaudarnaud00000000000000/\*\s* \*\s*\$Header.*\$ \*\s*\$Revision.*\$ \*\s*\$Date.*\$ \*\s* \*\s*Copyright \d{4}(-\d{4}|,\d{4})* The Apache Software Foundation\. \*\s* \*\s*Licensed under the Apache License, Version 2\.0 \(the "License"\); \*\s*you may not use this file except in compliance with the License\. \*\s*You may obtain a copy of the License at \*\s* \*\s*http://www\.apache\.org/licenses/LICENSE\-2\.0 \*\s* \*\s*Unless required by applicable law or agreed to in writing, software \*\s*distributed under the License is distributed on an "AS IS" BASIS, \*\s*WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied\. \*\s*See the License for the specific language governing permissions and \*\s*limitations under the License\. \*/\s* libstruts1.2-java-1.2.9/contrib/struts-el/LICENSE.txt0000644000175000017500000002363510404045252022716 0ustar arnaudarnaud00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. libstruts1.2-java-1.2.9/contrib/struts-el/README.txt0000644000175000017500000000761010404045252022564 0ustar arnaudarnaud00000000000000 Struts-EL extension =================== Introduction ------------ This subproject is an extension of the Struts tag library. Each JSP custom tag in this library is a subclass of an associated tag in the Struts tag library. One difference is that this tag library does not use "rtexprvalues", it uses the expression evaluation engine in the Jakarta Taglibs implementation of the JSP Standard Tag Library (version 1.0) to evaluate attribute values. In addition, some of the Struts tags were not ported to this library, as it was determined that their functionality was entirely supplied by the JSTL. These particular Struts tags, and the reason for their non-porting will be described in the documentation for this library. In order to fully understand the correct utilization of this library, you must understand the use and operation of the Struts tag library, and the use and operation of the JavaServer Pages Standard Tag Library (hereafter called the "JSTL"), along with the expression language (sometimes called the "EL") used for evaluating attribute values. Tag Mapping ----------- In implementing the Struts-EL library, every Struts tag that provides a feature that is not covered by the JSTL (1.0) library is mapped into the Struts-EL library. This section reviews which Struts tags are NOT implemented in the Struts-EL library, and which JSTL tags provide that feature. Many of the non-porting decisions were based on the fact that the JSTL expression language itself provides the same functionality. In those cases, in addition to a possible JSTL tag name, the symbol "EL" will be listed. Bean Tag Library Tags NOT Implemented in Struts-EL -------------------------------------------------- Struts Tag JSTL Tag ---------- -------- cookie c:set, EL define c:set, EL header c:set, EL include c:import parameter c:set, EL write c:out Logic Tag Library Tags NOT Implemented in Struts-EL -------------------------------------------------- Struts Tag JSTL Tag ---------- -------- empty c:if, c:when, EL equal c:if, c:when, EL greaterEqual c:if, c:when, EL greaterThan c:if, c:when, EL lessEqual c:if, c:when, EL lessThan c:if, c:when, EL notEmpty c:if, c:when, EL notEqual c:if, c:when, EL (Note that the "iterate" tag was originally ported, even with the presence of the "c:forEach" tag, as the "indexed tag" functionality was not supported when using "c:forEach" instead of "logic:iterate". This has since been rectified, such that the "indexed tag" functionality checks for being contained in a "c:forEach" tag, in addition to the "logic:iterate" tag. However, the ported "iterate" tag has not been removed from Struts-EL, for backward compatibility.) Html Tag Library Tags NOT Implemented in Struts-EL -------------------------------------------------- None (all of them were ported). Attribute Mapping ----------------- At this point of the implementation, there is only one change (to two similar tags) to the set of attributes between the Struts tags, and the Struts-EL tags. The "logic:match" and "logic:notMatch" tags have an additional attribute named "expr", which can take any value, and will be used as the value to compare against, in addition to the choices of "cookie", "header", "name"/"property", and "parameter". Usage Requirements ------------------ The Struts-EL tag library requires the use of the Struts tag library, and the Java Server Pages Standard Tag Library. It is not necessary for JSP pages using the Struts-EL tag library to also use the Struts tags or the JSTL tags, but the Struts and JSTL tag libraries need to be part of the application utilizing the Struts-EL tag library. This is because the Struts-EL tag classes are all subclasses of Struts tag classes, and their implementation uses classes provided by the JSTL. libstruts1.2-java-1.2.9/contrib/struts-el/build-tests.xml0000644000175000017500000004170610404045252024053 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/contrib/struts-el/build-webapp.xml0000644000175000017500000003414410404045252024165 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/contrib/struts-el/build-webapps.xml0000644000175000017500000002355510404045252024354 0ustar arnaudarnaud00000000000000 composite ${attr.value}
    |
    Search ${pom.name}
    Google

    ${rowMode} ${attr.value}

    Goals

    GoalDescription
    ${rowMode} ${_goalName}
    DateAuthorFiles/Message
    ${rowMode}
    ${pom.repository.url} ${url}?&content-type=text/vnd.viewcvs-markup - v
    libstruts1.2-java-1.2.9/contrib/struts-faces/0000755000175000017500000000000010423130300021531 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/0000755000175000017500000000000010423130300024123 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/0000755000175000017500000000000010404045172024725 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/conf/0000755000175000017500000000000010423130300025637 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/conf/MANIFEST.MF0000644000175000017500000000030710404045244027304 0ustar arnaudarnaud00000000000000Extension-Name: @package@ Specification-Vendor: The Apache Software Foundation Specification-Version: 1.0 Implementation-Vendor: The Apache Software Foundation Implementation-Version: @version@ libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/conf/faces-config.xml0000644000175000017500000004746710404045242030740 0ustar arnaudarnaud00000000000000 org.apache.struts.faces.application.ActionListenerImpl org.apache.struts.faces.application.PropertyResolverImpl org.apache.struts.faces.application.ViewHandlerImpl org.apache.struts.faces.Base org.apache.struts.faces.component.BaseComponent Target frame for this base reference. Target Frame target java.lang.String org.apache.struts.faces.CommandLink org.apache.struts.faces.component.CommandLinkComponent Access key that, when pressed, transfers focus to this element. Access Key accesskey java.lang.String Character encoding of the resource identified by this hyperlink. Character Set charset java.lang.String Direction indication for text ("LTR" or "RTL"). Direction dir java.lang.String Language code of the resource identified by this hyperlink. Resource Language Code hreflang java.lang.String Language code used for the generated markup of this element. Language Code lang java.lang.String Scripting code executed when this element loses focus. Focus Off Script onblur java.lang.String Scripting code executed when a pointer button is clicked over this element. Button Click Script onclick java.lang.String Scripting code executed when a pointer button is double clicked over this element. Double Click Script ondblclick java.lang.String Scripting code executed when this element receives focus. Focus On Script onfocus java.lang.String Scripting code executed when a key is pressed and released over this element. Key Down Script onkeydown java.lang.String Scripting code executed when a key is pressed and released over this element. Key Press Script onkeypress java.lang.String Scripting code executed when a key is pressed and released over this element. Key Up Script onkeyup java.lang.String Scripting code executed when a pointer button is pressed down over this element. Mouse Down Script onmousedown java.lang.String Scripting code executed when a pointer button is moved over this element. Mouse Move Script onmousemove java.lang.String Scripting code executed when a pointer button is moved off of this element. Mouse Out Script onmouseout java.lang.String Scripting code executed when a pointer button is moved onto this element. Mouse Over Script onmouseover java.lang.String Scripting code executed when a pointer button is released over this element. Mouse Up Script onmouseup java.lang.String Relationship from the current document to the resource specified by this hyperlink. Relationship rel java.lang.String Relationship from the resource identified by this hyperlink to the current document. Reverse Relationship rev java.lang.String CSS style(s) to be applied when this component is rendered. CSS Styles style java.lang.String Space-separated list of CSS style class(es) to be applied when this element is rendered. CSS Style Classes styleClass java.lang.String Position of this element in the tabbing order for the current document. Tab Index tabindex java.lang.String Name of the frame where the resource identified by this hyperlink should be displayed. Target Frame target java.lang.String Advisory title information about markup elements generated for this component. Advisory Title title java.lang.String Content type of the resource identified by this hyperlink. Content Type type java.lang.String org.apache.struts.faces.Errors org.apache.struts.faces.component.ErrorsComponent Application scope attribute key for the MessageResources instance to use for lookup. If not specified, the default MessageResources for the current module will be used. MessageResources Key bundle java.lang.String org.apache.struts.faces.Form org.apache.struts.faces.component.FormComponent Struts action to be executed. Struts Action action java.lang.String Encoding type for form submit. Encoding Type enctype java.lang.String Name of focus component identifier. Focus Component Name focusIndex java.lang.String Index of focus component identifier. Focus Component Index focusIndex java.lang.String JavaScript to execute on form reset. Form Reset Script onreset java.lang.String JavaScript to execute on form submit. Form Submit Script onsubmit java.lang.String CSS style(s) to render for this component. CSS Style(s) style java.lang.String CSS style class(es) to render for this component. CSS Style Class(es) styleClass java.lang.String Target frame for the response to this form submit. Target Frame target java.lang.String org.apache.struts.faces.Html org.apache.struts.faces.component.HtmlComponent Flag indicating whether a Locale should be stored in the user's session, based on the Accept-Language header, if one is not already present. Locale Flag locale boolean Flag indicating whether XHTML-compatible output should be rendered. XHTML Flag xhtml boolean org.apache.struts.faces.Message org.apache.struts.faces.component.MessageComponent Application scope attribute key for the MessageResources instance to use for lookup. If not specified, the default MessageResources for the current module will be used. MessageResources Key bundle java.lang.String Message key to use for message lookup Message Key key java.lang.String CSS style(s) to render for this component. CSS Style(s) style java.lang.String CSS style class(es) to render for this component. CSS Style Class(es) styleClass java.lang.String org.apache.struts.faces.Stylesheet org.apache.struts.faces.component.StylesheetComponent Context-relative path (starting with a "/" character) of the stylesheet to which this link should point. Stylesheet Path path java.lang.String org.apache.struts.faces.Write org.apache.struts.faces.component.WriteComponent Flag indicating that the rendered output should be filtered for characters that are sensitive in HTML. Default value is "true". Filtered Flag filter boolean CSS style(s) to render for this component. CSS Style(s) style java.lang.String CSS style class(es) to render for this component. CSS Style Class(es) styleClass java.lang.String struts org.apache.struts.faces.util.StrutsContext request org.apache.struts.faces.Base org.apache.struts.faces.Base org.apache.struts.faces.renderer.BaseRenderer org.apache.struts.faces.CommandLink org.apache.struts.faces.CommandLink org.apache.struts.faces.renderer.CommandLinkRenderer org.apache.struts.faces.Errors org.apache.struts.faces.Errors org.apache.struts.faces.renderer.ErrorsRenderer org.apache.struts.faces.Form org.apache.struts.faces.Form org.apache.struts.faces.renderer.FormRenderer org.apache.struts.faces.Html org.apache.struts.faces.Html org.apache.struts.faces.renderer.HtmlRenderer org.apache.struts.faces.Message org.apache.struts.faces.Message org.apache.struts.faces.renderer.MessageRenderer org.apache.struts.faces.Stylesheet org.apache.struts.faces.Stylesheet org.apache.struts.faces.renderer.StylesheetRenderer org.apache.struts.faces.Write org.apache.struts.faces.Write org.apache.struts.faces.renderer.WriteRenderer libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/conf/struts-doc.xsl0000644000175000017500000001152210404045212030505 0ustar arnaudarnaud00000000000000 <xsl:value-of select="properties/title"/>
    Copyright (c) 2003-2004, The Apache Software Foundation
    Tag Name Description
    -
    Attribute Name Description
    [Required] [RT Expr]
    libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/conf/struts-faces.xml0000644000175000017500000007716410404045242031034 0ustar arnaudarnaud00000000000000 Craig R. McClanahan JavaServer Faces Tag Library for the Struts Framework 0.1 1.2 Struts-Faces http://struts.apache.org/tags-faces Struts-Faces Integration Tag Library

    This tag library provides custom action functionality that is similar to that provided by the Struts 1.1 tag libraries, but is built on top of the JavaServer Faces rendering architecture.

    This tag library includes the following tags:

    base Render an HTML <base> element org.apache.struts.faces.taglib.BaseTag

    Renders an HTML <base> element with an href attribute pointing to the absolute location of the enclosing JSP page. This tag is valid only when nested inside an HTML <head> element. This tag is useful because it allows you to use relative URL references that are based on the URL of the page itself, rather than the URL to which the most recent submit took place.

    binding false false

    Value binding expression to bind this component to a backing bean property.

    id false false Component id of this component. rendered false false Boolean attribute indicating whether this component should be rendered or not. target false false Target frame for this base reference.
    commandLink Render an HTML hyperlink that submits the current form org.apache.struts.faces.taglib.CommandLinkTag

    Renders an HTML <a> element defining a hyperlink that submits the current form. This component is required because the JSF 1.0 and 1.1 specifications require interoperability between the renderers for the form element and the command link element, without providing a portable mechanism to allow intermixed libraries.

    action false false actionListener false false id false false immediate false false rendered false false value false false accesskey false false charset false false dir false false hreflang false false lang false false onblur false false onclick false false ondblclick false false onfocus false false onkeydown false false onkeypress false false onkeyup false false onmousedown false false onmousemove false false onmouseout false false onmouseover false false onmouseup false false rel false false rev false false style false false styleClass false false tabindex false false target false false title false false type false false
    errors Conditionally display a set of accumulated error messages org.apache.struts.faces.taglib.ErrorsTag

    Displays a list of error messages prepared by form bean or business logic validation processing.

    In order to use this component successfully, you must have defined an application scope MessageResources bean under the specified attribute name, with optinal definitions for the following message keys:

    • errors.header - Text that will be rendered before the error messages list.
    • errors.footer - Text that will be rendered after the error messages list.
    • errors.prefix - Text that will be rendered before each individual error in the list.
    • errors.suffix - Text that will be rendered after each individual error in the list.
    binding false false

    Value binding expression to bind this component to a backing bean property.

    bundle false false

    Name of the servlet context attribute under which the desired MessageResources bundle is stored. If not specified, the default bundle for this sub-application will be used.

    id false false Component id of this component. property false false Component of the component for which to render errors. If not specified, all messages (regardless of property) are displayed. rendered false false Boolean attribute indicating whether this component should be rendered or not.
    form Render a form suitable for submission to a Struts Action org.apache.struts.faces.taglib.FormTag

    Render an HTML form element containing the nested components to present the appropriate label and input field elements. This tag is distinguished from the tag in the standard HTML RenderKit because it accepts a Struts <action> path as a parameter, and triggers the creation of a Struts form bean if needed.

    action true false

    Struts Action to which this form should be submitted. This value must exactly match the path attribute of the corresponding <action> element in the struts-config.xml configuration file for this application module.

    binding false false

    Value binding expression to bind this component to a backing bean property.

    enctype false false

    The content encoding to be used to submit this form, if the method is POST. This must be set to "multipart/form-data" if your form includes file upload field(s). If not specified, the browser default ("application/x-www-form-urlencoded") is used.

    focus false false

    The identifier of the form field that should receive focus when this form is rendered.

    focusIndex false false

    If the focus field is an array, such as a radio button group, you can specify the index of the array element to receive focus.

    id false false Component id of this component. onreset false false

    JavaScript event handler executed if this form is reset.

    onsubmit false false

    JavaScript event handler executed if this form is submitted.

    rendered false false Boolean attribute indicating whether this component should be rendered or not. style false false

    CSS styles to be applied to this HTML element.

    styleClass false false CSS style class to use when rendering this component. target false false

    Window target to which this form is submitted, such as for use in framed presentations.

    html Render an HTML <html> element org.apache.struts.faces.taglib.HtmlTag JSP

    Renders an HTML <html> element with language attributes extracted from the user's current Locale object, if there is one.

    binding false false

    Value binding expression to bind this component to a backing bean property.

    id false false Component id of this component. locale false false

    Set to true in order to record a Locale based on the current request's Accept-Language header (if any), if none has currently been set.

    rendered false false Boolean attribute indicating whether this component should be rendered or not. xhtml false false

    Set to true to render an xml:lang element on the generated html element. It also causes nested Struts HTML tags (although not JavaServer Faces component tags) to render themselves as xhtml.

    javascript Render JavaScript validation based on the validation rules loaded by the ValidatorPlugIn. org.apache.struts.faces.taglib.JavascriptValidatorTag empty

    IMPLEMENTATION NOTE - Unlike other tags in this tag library, this does not correspond to a JavaServer Faces user interface component. It is based on the tag implementation class used in the struts-html tag library.

    Render JavaScript validation based on the validation rules loaded by the ValidatorPlugIn. The set of validation rules that should be generated is based on the formName attribute passed in, which should match the name attribute of the form element in the xml file.

    The dynamicJavascript and staticJavascript attributes default to true, but if dynamicJavascript is set to true and staticJavascript is set to false then only the dynamic JavaScript will be rendered. If dynamicJavascript is set to false and staticJavascript is set to true then only the static JavaScript will be rendered which can then be put in separate JSP page so the browser can cache the static JavaScript.

    cdata false true

    If set to "true" and XHTML has been enabled, the JavaScript will be wrapped in a CDATA section to prevent XML parsing. The default is "true" to comply with the W3C's recommendation.

    Struts 1.1
    dynamicJavascript false false

    Whether or not to render the dynamic JavaScript. Defaults to true.

    formName false true

    The key (form name) to retrieve a specific set of validation rules.

    htmlComment false true

    Whether or not to enclose the javascript with HTML comments. This attribute is ignored in XHTML mode because the script would be deleted by the XML parser. See the cdata attribute for details on hiding scripts from XML parsers. Defaults to true.

    method false true

    The alternate JavaScript method name to be used instead of the of the default. The default is 'validate' concatenated in front of the key (form name) passed in (ex: validateRegistrationForm).

    page false true

    The current page of a set of validation rules if the page attribute for the field element in the xml file is in use.

    src false true

    The src attribute's value when defining the html script element.

    staticJavascript false false

    Whether or not to render the static JavaScript. Defaults to true.

    loadMessages Expose a MessageResources instance as a Map org.apache.struts.faces.taglib.LoadMessagesTag empty

    Create a Map wrapping the specified MessageResources instance, which will return localized messages based on the Locale stored in the view root component of the current view.

    messages false false

    Application scope key containing the MessageResources instance to be exposed. If not specified, the default MessageResources instance for the current application module is exposed.

    var true false

    Request scope key under which the Map will be stored.

    message Render a localized message looked up from a message resources bundle org.apache.struts.faces.taglib.MessageTag JSP

    Render the message text looked up from a message resources bundle, based on our current locale. The message key must be specified by exactly one of the following attributes:

    • key - Message key is specified directly.
    • value - Retrieve the value of the specified value reference, convert it to a String, and use that as the requested message key.

    The MessageResources bundle to be used is specified by the bundle attribute, as follows:

    • If bundle is present, it is the name of the servlet context attribute under which our MessageResources bundle should be retrieved.
    • If bundle is not present, use the default MessageResources bundle for the current subapp.

    Substitution parameters for the message may be nested inside this tag by using the parameter tag from the standard HTML RenderKit tag library.

    Additional control over the rendering process is specified by the following optional attributes, with default values as indicated:

    • filter - Set to true to filter the rendered text for characters that are sensitive in HTML, or false to skip filtering. By default, rendered text is filtered.
    binding false false

    Value binding expression to bind this component to a backing bean property.

    bundle false false

    Name of the servlet context attribute under which the desired MessageResources bundle is stored. If not specified, the default bundle for this sub-application will be used.

    filter false false

    Should we filter the output for characters that are sensitive in HTML? The default value is true.

    id false false

    Component identifier of the component corresponding to this tag.

    key false false

    Literal value of the message key to look up. Exactly one of key and value must be specified.

    rendered false false Boolean attribute indicating whether this component should be rendered or not. style false false

    CSS styles used to render this component.

    styleClass false false

    Name of the CSS style class used to render this component.

    value false false

    Value reference expression used to retrieve a dynamic value for the message key to look up. Exactly one of key and value must be specified.

    stylesheet Render an HTML <link> relative reference to a stylesheet org.apache.struts.faces.taglib.StylesheetTag

    Renders an HTML <link> element with a relative reference to a text/css stylesheet at the specified context-relative path.

    binding false false

    Value binding expression to bind this component to a backing bean property.

    id false false Component id of this component. path true false Context-relative path to the resource for this relative link. rendered false false Boolean attribute indicating whether this component should be rendered or not.
    write Render the value of the specified model object or text string org.apache.struts.faces.taglib.WriteTag empty

    Render the text associated with the specified model object or text string, optionally performing filtering and formatting tasks described by the optional attributes described below. The text to be rendered is specified in exactly one of the following attributes:

    • value - The literal text value to be rendered or a value reference expression to retrieve the text to be rendered.

    Additional control over the rendering process is specified by the following optional attributes, with default values as indicated:

    • filter - Set to true to filter the rendered text for characters that are sensitive in HTML, or false to skip filtering. By default, rendered text is filtered.
    binding false false

    Value binding expression to bind this component to a backing bean property.

    filter false false

    Should we filter the output for characters that are sensitive in HTML? The default value is true.

    id false false

    Component identifier of the component corresponding to this tag.

    rendered false false Boolean attribute indicating whether this component should be rendered or not. style false false

    CSS styles used to render this component.

    styleClass false false

    Name of the CSS style class used to render this component.

    value false false

    Literal text to be rendered, or value reference expression to retrieve the text to be rendered.

    libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/conf/struts-tld.xsl0000644000175000017500000000567010404045210030530 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/0000755000175000017500000000000010404045172025646 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/0000755000175000017500000000000010404045172026435 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/0000755000175000017500000000000010404045172027656 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/0000755000175000017500000000000010404045172031222 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/0000755000175000017500000000000010423130300032270 5ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000015010423140531011311 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/application/libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/applicati0000755000175000017500000000000010423130300034157 5ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000017710423140531011322 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/application/ActionListenerImpl.javalibstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/applicati0000644000175000017500000002101310404045252034170 0ustar arnaudarnaud00000000000000/* * Copyright 2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.faces.application; import javax.faces.component.ActionSource; import javax.faces.component.UIComponent; import javax.faces.component.UIForm; import javax.faces.context.FacesContext; import javax.faces.event.AbortProcessingException; import javax.faces.event.ActionEvent; import javax.faces.event.ActionListener; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.Globals; import org.apache.struts.action.ActionServlet; import org.apache.struts.action.RequestProcessor; import org.apache.struts.config.ModuleConfig; import org.apache.struts.faces.Constants; import org.apache.struts.faces.component.FormComponent; import org.apache.struts.util.RequestUtils; /** *

    Concrete implementation of ActionListener that replaces * the default provided implementation. It converts application-level events * into execution of the corresponding Struts request processing lifecycle. *

    * * @version $Rev: 54934 $ $Date: 2004-10-16 18:07:50 +0100 (Sat, 16 Oct 2004) $ */ public final class ActionListenerImpl implements ActionListener { // ------------------------------------------------------------ Constructors /** *

    Construct a new default ActionListener instance, * passing it the previously configured one.

    * * @param original Original default ActionListener * * @exception NullPointerException if original * is null */ public ActionListenerImpl(ActionListener original) { if (original == null) { throw new NullPointerException(); } this.original = original; if (log.isInfoEnabled()) { log.info("Create ActionListener wrapping instance of type '" + original.getClass().getName() + "'"); } } // ------------------------------------------------------ Instance Variables /** *

    The logger for this instance.

    */ private static final Log log = LogFactory.getLog(ActionListenerImpl.class); /** *

    The previously configured ActionListener instance.

    */ private ActionListener original; // ---------------------------------------------------------- Public Methods /** *

    Process the specified ActionEvent.

    * * @param event The ActionEvent to be processed * * @exception AbortProcessingException to signal that no further * event processing should be performed */ public void processAction(ActionEvent event) throws AbortProcessingException { // If this is an immediate action, or we are NOT nested in a // Struts form, perform the standard processing UIComponent component = event.getComponent(); ActionSource source = (ActionSource) component; boolean standard = source.isImmediate(); if (!standard) { UIComponent parent = component.getParent(); while (parent != null) { if (parent instanceof UIForm) { if (!(parent instanceof FormComponent)) { standard = true; } break; } parent = parent.getParent(); } } if (standard) { if (log.isDebugEnabled()) { log.debug("Performing standard handling for event " + "from source component '" + component.getId() + "'"); } original.processAction(event); return; } // Acquire Servlet API Object References FacesContext context = FacesContext.getCurrentInstance(); ServletContext servletContext = (ServletContext) context.getExternalContext().getContext(); HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest(); HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse(); // Log this event if requested if (log.isDebugEnabled()) { log.debug("Performing Struts form submit for event " + " from source component '" + component.getId() + "'"); } // Invoke the appropriate request processor for this request try { request.setAttribute(Constants.ACTION_EVENT_KEY, event); RequestUtils.selectModule(request, servletContext); ModuleConfig moduleConfig = (ModuleConfig) request.getAttribute(Globals.MODULE_KEY); if (log.isTraceEnabled()) { log.trace("Assigned to module with prefix '" + moduleConfig.getPrefix() + "'"); } RequestProcessor processor = getRequestProcessor(moduleConfig, servletContext); if (log.isTraceEnabled()) { log.trace("Invoking request processor instance " + processor); } processor.process(request, response); context.responseComplete(); } catch (Exception e) { log.error("Exception processing action event " + event, e); } finally { request.removeAttribute(Constants.ACTION_EVENT_KEY); } } // ------------------------------------------------------ Protected Methods /** *

    Look up and return the RequestProcessor responsible for * the specified module, creating a new one if necessary. This method is * based on the corresponding code in ActionServlet, which * cannot be used directly because it is a protected method.

    * * @param config The module configuration for which to * acquire and return a RequestProcessor * @param context The ServletContext instance * for this web application * * @exception IllegalStateException if we cannot instantiate a * RequestProcessor instance */ protected RequestProcessor getRequestProcessor(ModuleConfig config, ServletContext context) { String key = Globals.REQUEST_PROCESSOR_KEY + config.getPrefix(); RequestProcessor processor = (RequestProcessor) context.getAttribute(key); if (processor == null) { try { if (log.isDebugEnabled()) { log.debug("Instantiating RequestProcessor of class " + config.getControllerConfig().getProcessorClass()); } ActionServlet servlet = (ActionServlet) context.getAttribute(Globals.ACTION_SERVLET_KEY); processor = (RequestProcessor) RequestUtils.applicationInstance( config.getControllerConfig().getProcessorClass()); processor.init(servlet, config); context.setAttribute(key, processor); } catch (Exception e) { log.error("Cannot instantiate RequestProcessor of class " + config.getControllerConfig().getProcessorClass(), e); throw new IllegalStateException( "Cannot initialize RequestProcessor of class " + config.getControllerConfig().getProcessorClass() + ": " + e); } } return (processor); } } ././@LongLink0000644000175000017500000000020210423140531011307 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/application/FacesRequestProcessor.javalibstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/applicati0000644000175000017500000004223210404045230034172 0ustar arnaudarnaud00000000000000/* * Copyright 2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.faces.application; import java.io.IOException; import javax.faces.FactoryFinder; import javax.faces.application.ViewHandler; import javax.faces.component.UICommand; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.context.FacesContextFactory; import javax.faces.event.ActionEvent; import javax.faces.lifecycle.Lifecycle; import javax.faces.lifecycle.LifecycleFactory; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.Globals; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.RequestProcessor; import org.apache.struts.config.FormBeanConfig; import org.apache.struts.config.ForwardConfig; import org.apache.struts.faces.Constants; import org.apache.struts.faces.component.FormComponent; import org.apache.struts.faces.util.HttpServletRequestWrapper; /** *

    Concrete implementation of RequestProcessor that * implements the standard Struts request processing lifecycle on a * request that was received as an ActionEvent by our * associated ActionListener. It replaces the request processor * instance normally configured by Struts, so it must support non-Faces * requests as well.

    * * @version $Rev: 56770 $ $Date: 2004-11-06 18:15:35 +0000 (Sat, 06 Nov 2004) $ */ public class FacesRequestProcessor extends RequestProcessor { // ------------------------------------------------------ Instance Variables /** *

    The log instance for this class.

    */ protected static Log log = LogFactory.getLog(FacesRequestProcessor.class); // ------------------------------------------------------- Protected Methods /** *

    Set up a Faces Request if we are not already processing one. Next, * create a new view if the specified uri is different from * the current view identifier. Finally, cause the new view to be * rendered, and call FacesContext.responseComplete() to * indicate that this has already been done.

    * * @param uri Context-relative path to forward to * @param request Current page request * @param response Current page response * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet error occurs */ protected void doForward(String uri, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { if (log.isDebugEnabled()) { log.debug("doForward(" + uri + ")"); } // Remove the current ActionEvent (if any) request.removeAttribute(Constants.ACTION_EVENT_KEY); // Process a Struts controller request normally if (isStrutsRequest(uri)) { if (response.isCommitted()) { if (log.isTraceEnabled()) { log.trace(" super.doInclude(" + uri + ")"); } super.doInclude(uri, request, response); } else { if (log.isTraceEnabled()) { log.trace(" super.doForward(" + uri + ")"); } super.doForward(uri, request, response); } return; } // Create a FacesContext for this request if necessary LifecycleFactory lf = (LifecycleFactory) FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY); Lifecycle lifecycle = // FIXME - alternative lifecycle ids lf.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE); boolean created = false; FacesContext context = FacesContext.getCurrentInstance(); if (context == null) { if (log.isTraceEnabled()) { log.trace(" Creating new FacesContext for '" + uri + "'"); } created = true; FacesContextFactory fcf = (FacesContextFactory) FactoryFinder.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY); // HttpServletRequestWrapper wrapper = new HttpServletRequestWrapper(request, uri); // context = fcf.getFacesContext(servlet.getServletContext(), wrapper, // response, lifecycle); // Comment out the previous three lines and uncomment // the following two lines to test eliminating the wrapper context = fcf.getFacesContext(servlet.getServletContext(), request, response, lifecycle); } // Create a new view root ViewHandler vh = context.getApplication().getViewHandler(); if (log.isTraceEnabled()) { log.trace(" Creating new view for '" + uri + "'"); } context.setViewRoot(vh.createView(context, uri)); // Cause the view to be rendered if (log.isTraceEnabled()) { log.trace(" Rendering view for '" + uri + "'"); } lifecycle.render(context); if (created) { if (log.isTraceEnabled()) { log.trace(" Releasing context for '" + uri + "'"); } context.release(); } else { if (log.isTraceEnabled()) { log.trace(" Rendering completed"); } } } // Override default processing to provide logging protected Action processActionCreate(HttpServletRequest request, HttpServletResponse response, ActionMapping mapping) throws IOException { if (log.isTraceEnabled()) { log.trace("Performing standard action create"); } Action result = super.processActionCreate(request, response, mapping); if (log.isDebugEnabled()) { log.debug("Standard action create returned " + result.getClass().getName() + " instance"); } return (result); } // Override default processing to provide logging protected ActionForm processActionForm(HttpServletRequest request, HttpServletResponse response, ActionMapping mapping) { if (log.isTraceEnabled()) { log.trace("Performing standard action form processing"); String attribute = mapping.getAttribute(); if (attribute != null) { String name = mapping.getName(); FormBeanConfig fbc = moduleConfig.findFormBeanConfig(name); if (fbc != null) { if ("request".equals(mapping.getScope())) { log.trace(" Bean in request scope = " + request.getAttribute(attribute)); } else { log.trace(" Bean in session scope = " + request.getSession().getAttribute(attribute)); } } else { log.trace(" No FormBeanConfig for '" + name + "'"); } } else { log.trace(" No form bean for this action"); } } ActionForm result = super.processActionForm(request, response, mapping); if (log.isDebugEnabled()) { log.debug("Standard action form returned " + result); } return (result); } // Override default processing to provide logging protected ActionForward processActionPerform(HttpServletRequest request, HttpServletResponse response, Action action, ActionForm form, ActionMapping mapping) throws IOException, ServletException { if (log.isTraceEnabled()) { log.trace("Performing standard action perform"); } ActionForward result = super.processActionPerform(request, response, action, form, mapping); if (log.isDebugEnabled()) { log.debug("Standard action perform returned " + result.getPath() + " forward path"); } return (result); } // Override default processing to provide logging protected boolean processForward(HttpServletRequest request, HttpServletResponse response, ActionMapping mapping) throws IOException, ServletException { if (log.isTraceEnabled()) { log.trace("Performing standard forward handling"); } boolean result = super.processForward (request, response, mapping); if (log.isDebugEnabled()) { log.debug("Standard forward handling returned " + result); } return (result); } // Override default processing to provide logging protected void processForwardConfig(HttpServletRequest request, HttpServletResponse response, ForwardConfig forward) throws IOException, ServletException { if (log.isTraceEnabled()) { log.trace("Performing standard forward config handling"); } super.processForwardConfig(request, response, forward); if (log.isDebugEnabled()) { log.debug("Standard forward config handling completed"); } } // Override default processing to provide logging protected boolean processInclude(HttpServletRequest request, HttpServletResponse response, ActionMapping mapping) throws IOException, ServletException { if (log.isTraceEnabled()) { log.trace("Performing standard include handling"); } boolean result = super.processInclude (request, response, mapping); if (log.isDebugEnabled()) { log.debug("Standard include handling returned " + result); } return (result); } /** *

    Identify and return the path component (from the request URI for a * non-Faces request, or from the form event for a Faces request) * that we will use to select an ActionMapping to dispatch with. * If no such path can be identified, create an error response and return * null.

    * * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception IOException if an input/output error occurs */ protected String processPath(HttpServletRequest request, HttpServletResponse response) throws IOException { // Are we processing a Faces request? ActionEvent event = (ActionEvent) request.getAttribute(Constants.ACTION_EVENT_KEY); // Handle non-Faces requests in the usual way if (event == null) { if (log.isTraceEnabled()) { log.trace("Performing standard processPath() processing"); } return (super.processPath(request, response)); } // Calculate the path from the form name UIComponent component = event.getComponent(); if (log.isTraceEnabled()) { log.trace("Locating form parent for command component " + event.getComponent()); } while (!(component instanceof FormComponent)) { component = component.getParent(); if (component == null) { log.warn("Command component was not nested in a Struts form!"); return (null); } } if (log.isDebugEnabled()) { log.debug("Returning selected path of '" + ((FormComponent) component).getAction() + "'"); } return (((FormComponent) component).getAction()); } /** *

    Populate the properties of the specified ActionForm * instance from the request parameters included with this request, * IF this is a non-Faces request. For a Faces request, * this will have already been done by the Update Model Values * phase of the request processing lifecycle, so all we have to do is * recognize whether the request was cancelled or not.

    * * @param request The servlet request we are processing * @param response The servlet response we are creating * @param form The ActionForm instance we are populating * @param mapping The ActionMapping we are using * * @exception ServletException if thrown by RequestUtils.populate() */ protected void processPopulate(HttpServletRequest request, HttpServletResponse response, ActionForm form, ActionMapping mapping) throws ServletException { // Are we processing a Faces request? ActionEvent event = (ActionEvent) request.getAttribute(Constants.ACTION_EVENT_KEY); // Handle non-Faces requests in the usual way if (event == null) { if (log.isTraceEnabled()) { log.trace("Performing standard processPopulate() processing"); } super.processPopulate(request, response, form, mapping); return; } // Faces Requests require no processing for form bean population // so we need only check for the cancellation command name if (log.isTraceEnabled()) { log.trace("Faces request, so no processPopulate() processing"); } UIComponent source = event.getComponent(); if (source instanceof UICommand) { UICommand command = (UICommand) source; if ("cancel".equals(((UICommand) source).getId())) { if (log.isTraceEnabled()) { log.trace("Faces request with cancel button pressed"); } request.setAttribute(Globals.CANCEL_KEY, Boolean.TRUE); } } } // Override default processing to provide logging protected boolean processValidate(HttpServletRequest request, HttpServletResponse response, ActionForm form, ActionMapping mapping) throws IOException, ServletException { if (log.isTraceEnabled()) { log.trace("Performing standard validation"); } boolean result = super.processValidate (request, response, form, mapping); if (log.isDebugEnabled()) { log.debug("Standard validation processing returned " + result); } return (result); } // --------------------------------------------------------- Private Methods /** *

    Return true if the specified context-relative URI * specifies a request to be processed by the Struts controller servlet.

    * * @param uri URI to be checked */ private boolean isStrutsRequest(String uri) { int question = uri.indexOf("?"); if (question >= 0) { uri = uri.substring(0, question); } String mapping = (String) servlet.getServletContext().getAttribute(Globals.SERVLET_KEY); if (mapping == null) { return (false); } else if (mapping.startsWith("*.")) { return (uri.endsWith(mapping.substring(1))); } else if (mapping.endsWith("/*")) { return (uri.startsWith(mapping.substring(0, mapping.length() - 2))); } else { return (false); } } } ././@LongLink0000644000175000017500000000020710423140531011314 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/application/FacesTilesRequestProcessor.javalibstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/applicati0000644000175000017500000004321510404045234034200 0ustar arnaudarnaud00000000000000/* * Copyright 2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.faces.application; import java.io.IOException; import javax.faces.FactoryFinder; import javax.faces.application.ViewHandler; import javax.faces.component.UICommand; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.context.FacesContextFactory; import javax.faces.event.ActionEvent; import javax.faces.lifecycle.Lifecycle; import javax.faces.lifecycle.LifecycleFactory; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.Globals; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.config.FormBeanConfig; import org.apache.struts.config.ForwardConfig; import org.apache.struts.faces.Constants; import org.apache.struts.faces.component.FormComponent; import org.apache.struts.faces.util.HttpServletRequestWrapper; import org.apache.struts.tiles.TilesRequestProcessor; /** *

    Concrete implementation of RequestProcessor that * implements the standard Struts request processing lifecycle on a * request that was received as an ActionEvent by our * associated ActionListener. It replaces the request processor * instance normally configured by Struts+Tiles, so it must support non-Faces * requests as well.

    * * @version $Rev: 56770 $ $Date: 2004-11-06 18:15:35 +0000 (Sat, 06 Nov 2004) $ */ public class FacesTilesRequestProcessor extends TilesRequestProcessor { // ------------------------------------------------------ Instance Variables /** *

    The log instance for this class.

    */ protected static Log log = LogFactory.getLog(FacesTilesRequestProcessor.class); // ------------------------------------------------------- Protected Methods /** *

    Set up a Faces Request if we are not already processing one. Next, * create a new view if the specified uri is different from * the current view identifier. Finally, cause the new view to be * rendered, and call FacesContext.responseComplete() to * indicate that this has already been done.

    * * @param uri Context-relative path to forward to * @param request Current page request * @param response Current page response * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet error occurs */ protected void doForward(String uri, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { if (log.isDebugEnabled()) { log.debug("doForward(" + uri + ")"); } // Remove the current ActionEvent (if any) request.removeAttribute(Constants.ACTION_EVENT_KEY); // Process a Struts controller request normally if (isStrutsRequest(uri)) { if (response.isCommitted()) { if (log.isTraceEnabled()) { log.trace(" super.doInclude(" + uri + ")"); } super.doInclude(uri, request, response); } else { if (log.isTraceEnabled()) { log.trace(" super.doForward(" + uri + ")"); } super.doForward(uri, request, response); } return; } // Create a FacesContext for this request if necessary LifecycleFactory lf = (LifecycleFactory) FactoryFinder.getFactory(FactoryFinder.LIFECYCLE_FACTORY); Lifecycle lifecycle = // FIXME - alternative lifecycle ids lf.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE); boolean created = false; FacesContext context = FacesContext.getCurrentInstance(); if (context == null) { if (log.isTraceEnabled()) { log.trace(" Creating new FacesContext for '" + uri + "'"); } created = true; FacesContextFactory fcf = (FacesContextFactory) FactoryFinder.getFactory(FactoryFinder.FACES_CONTEXT_FACTORY); HttpServletRequestWrapper wrapper = new HttpServletRequestWrapper(request, uri); context = fcf.getFacesContext(servlet.getServletContext(), wrapper, response, lifecycle); // Comment out the previous three lines and uncomment // the following two lines to test eliminating the wrapper // context = fcf.getFacesContext(servlet.getServletContext(), // request, response, lifecycle); } // Create a new view root ViewHandler vh = context.getApplication().getViewHandler(); if (log.isTraceEnabled()) { log.trace(" Creating new view for '" + uri + "'"); } context.setViewRoot(vh.createView(context, uri)); // Cause the view to be rendered if (log.isTraceEnabled()) { log.trace(" Rendering view for '" + uri + "'"); } lifecycle.render(context); if (created) { if (log.isTraceEnabled()) { log.trace(" Releasing context for '" + uri + "'"); } context.release(); } else { if (log.isTraceEnabled()) { log.trace(" Rendering completed"); } } } // Override default processing to provide logging protected void internalModuleRelativeForward (String uri, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { if (log.isTraceEnabled()) { log.trace("Performing internal module relative forward to '" + uri + "'"); } super.internalModuleRelativeForward(uri, request, response); } // Override default processing to provide logging protected Action processActionCreate(HttpServletRequest request, HttpServletResponse response, ActionMapping mapping) throws IOException { if (log.isTraceEnabled()) { log.trace("Performing standard action create"); } Action result = super.processActionCreate(request, response, mapping); if (log.isDebugEnabled()) { log.debug("Standard action create returned " + result.getClass().getName() + " instance"); } return (result); } // Override default processing to provide logging protected ActionForm processActionForm(HttpServletRequest request, HttpServletResponse response, ActionMapping mapping) { if (log.isTraceEnabled()) { log.trace("Performing standard action form processing"); String attribute = mapping.getAttribute(); if (attribute != null) { String name = mapping.getName(); FormBeanConfig fbc = moduleConfig.findFormBeanConfig(name); if (fbc != null) { if ("request".equals(mapping.getScope())) { log.trace(" Bean in request scope = " + request.getAttribute(attribute)); } else { log.trace(" Bean in session scope = " + request.getSession().getAttribute(attribute)); } } else { log.trace(" No FormBeanConfig for '" + name + "'"); } } else { log.trace(" No form bean for this action"); } } ActionForm result = super.processActionForm(request, response, mapping); if (log.isDebugEnabled()) { log.debug("Standard action form returned " + result); } return (result); } // Override default processing to provide logging protected ActionForward processActionPerform(HttpServletRequest request, HttpServletResponse response, Action action, ActionForm form, ActionMapping mapping) throws IOException, ServletException { if (log.isTraceEnabled()) { log.trace("Performing standard action perform"); } ActionForward result = super.processActionPerform(request, response, action, form, mapping); if (log.isDebugEnabled()) { log.debug("Standard action perform returned " + result.getPath() + " forward path"); } return (result); } // Override default processing to provide logging protected boolean processForward(HttpServletRequest request, HttpServletResponse response, ActionMapping mapping) throws IOException, ServletException { if (log.isTraceEnabled()) { log.trace("Performing standard forward handling"); } boolean result = super.processForward (request, response, mapping); if (log.isDebugEnabled()) { log.debug("Standard forward handling returned " + result); } return (result); } // Override default processing to provide logging protected void processForwardConfig(HttpServletRequest request, HttpServletResponse response, ForwardConfig forward) throws IOException, ServletException { if (log.isTraceEnabled()) { log.trace("Performing standard forward config handling"); } super.processForwardConfig(request, response, forward); if (log.isDebugEnabled()) { log.debug("Standard forward config handling completed"); } } // Override default processing to provide logging protected boolean processInclude(HttpServletRequest request, HttpServletResponse response, ActionMapping mapping) throws IOException, ServletException { if (log.isTraceEnabled()) { log.trace("Performing standard include handling"); } boolean result = super.processInclude (request, response, mapping); if (log.isDebugEnabled()) { log.debug("Standard include handling returned " + result); } return (result); } /** *

    Identify and return the path component (from the request URI for a * non-Faces request, or from the form event for a Faces request) * that we will use to select an ActionMapping to dispatch with. * If no such path can be identified, create an error response and return * null.

    * * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception IOException if an input/output error occurs */ protected String processPath(HttpServletRequest request, HttpServletResponse response) throws IOException { // Are we processing a Faces request? ActionEvent event = (ActionEvent) request.getAttribute(Constants.ACTION_EVENT_KEY); // Handle non-Faces requests in the usual way if (event == null) { if (log.isTraceEnabled()) { log.trace("Performing standard processPath() processing"); } return (super.processPath(request, response)); } // Calculate the path from the form name UIComponent component = event.getComponent(); if (log.isTraceEnabled()) { log.trace("Locating form parent for command component " + event.getComponent()); } while (!(component instanceof FormComponent)) { component = component.getParent(); if (component == null) { log.warn("Command component was not nested in a Struts form!"); return (null); } } if (log.isTraceEnabled()) { log.trace("Returning selected path of " + ((FormComponent) component).getAction()); } return (((FormComponent) component).getAction()); } /** *

    Populate the properties of the specified ActionForm * instance from the request parameters included with this request, * IF this is a non-Faces request. For a Faces request, * this will have already been done by the Update Model Values * phase of the request processing lifecycle, so all we have to do is * recognize whether the request was cancelled or not.

    * * @param request The servlet request we are processing * @param response The servlet response we are creating * @param form The ActionForm instance we are populating * @param mapping The ActionMapping we are using * * @exception ServletException if thrown by RequestUtils.populate() */ protected void processPopulate(HttpServletRequest request, HttpServletResponse response, ActionForm form, ActionMapping mapping) throws ServletException { // Are we processing a Faces request? ActionEvent event = (ActionEvent) request.getAttribute(Constants.ACTION_EVENT_KEY); // Handle non-Faces requests in the usual way if (event == null) { if (log.isTraceEnabled()) { log.trace("Performing standard processPopulate() processing"); } super.processPopulate(request, response, form, mapping); return; } // Faces Requests require no processing for form bean population // so we need only check for the cancellation command name if (log.isTraceEnabled()) { log.trace("Faces request, so no processPopulate() processing"); } UIComponent source = event.getComponent(); if (source instanceof UICommand) { UICommand command = (UICommand) source; if ("cancel".equals(((UICommand) source).getId())) { if (log.isTraceEnabled()) { log.trace("Faces request with cancel button pressed"); } request.setAttribute(Globals.CANCEL_KEY, Boolean.TRUE); } } } // Override default processing to provide logging protected boolean processValidate(HttpServletRequest request, HttpServletResponse response, ActionForm form, ActionMapping mapping) throws IOException, ServletException { if (log.isTraceEnabled()) { log.trace("Performing standard validation"); } boolean result = super.processValidate (request, response, form, mapping); if (log.isDebugEnabled()) { log.debug("Standard validation processing returned " + result); } return (result); } // --------------------------------------------------------- Private Methods /** *

    Return true if the specified context-relative URI * specifies a request to be processed by the Struts controller servlet.

    * * @param uri URI to be checked */ private boolean isStrutsRequest(String uri) { int question = uri.indexOf("?"); if (question >= 0) { uri = uri.substring(0, question); } String mapping = (String) servlet.getServletContext().getAttribute(Globals.SERVLET_KEY); if (mapping == null) { return (false); } else if (mapping.startsWith("*.")) { return (uri.endsWith(mapping.substring(1))); } else if (mapping.endsWith("/*")) { return (uri.startsWith(mapping.substring(0, mapping.length() - 2))); } else { return (false); } } } ././@LongLink0000644000175000017500000000020110423140531011306 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/application/PropertyResolverImpl.javalibstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/applicati0000644000175000017500000003527310404045210034177 0ustar arnaudarnaud00000000000000/* * Copyright 2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.faces.application; import java.util.Map; import javax.faces.el.PropertyNotFoundException; import javax.faces.el.PropertyResolver; import org.apache.commons.beanutils.DynaBean; import org.apache.commons.beanutils.DynaProperty; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.action.DynaActionForm; /** *

    Custom PropertyResolver implementation that adds support * for DynaBean property access to the facilities of the default * PropertyResolver provided by JavaServer Faces.

    * *

    This class implements the following specific rules:

    *
      *
    • Indexed variants of each call are directly passed through to the * PropertyResolver instance that we are wrapping.
    • *
    • If the specified base object is an instance of * DynaActionForm, and the requested property name is * map, maintain compatibility with the way that JSP and * JSTL expressions can access this property: *
        *
      • getValue() will return the result of calling * getMap() on the base object.
      • *
      • setValue() will throw an exception, because the * map of property values is a read-only property of the * DynaActionForm class.
      • *
      • isReadOnly() returns true.
      • *
      • getType() returns the Class object * for java.util.Map.
      • *
    • *
    • If the specified base object is an instance of * DynaBean, provide access to its named properties * as follows: *
        *
      • getValue() will return the result of calling * get() on the base object.
      • *
      • setValue() will call set() * on the base object.
      • *
      • isReadOnly() returns false (because * the DynaBean APIs provide no mechanism to make this determination, * but most implementations will provide mutable properties).
      • *
      • getType() returns the Class object * for the underlying dynamic property.
      • *
    • *
    • Named variant calls with any other type of base object are * passed through to the PropertyResolver that we * are wrapping.
    • *
    * * @version $Rev: 54934 $ $Date: 2004-10-16 18:07:50 +0100 (Sat, 16 Oct 2004) $ */ public class PropertyResolverImpl extends PropertyResolver { // ------------------------------------------------------------ Constructor /** *

    Construct a new PropertyResolver instance, wrapping the * specified instance using the Decorator pattern such that this class need * implement only the new functionality it supports, and not need to * re-implement the basic facilities. * * @param resolver The original resolver to be wrapped * * @exception NullPointerException if resolver * is null */ public PropertyResolverImpl(PropertyResolver resolver) { if (resolver == null) { throw new NullPointerException(); } if (log.isDebugEnabled()) { log.debug("Creating new instance, wrapping resolver " + resolver); } this.resolver = resolver; } // ----------------------------------------------------- Instance Variables /** *

    The Log instance for this class.

    */ private static final Log log = LogFactory.getLog(PropertyResolverImpl.class); /** *

    The PropertyResolver instance that we are wrapping, * which will be used to perform operations on beans that are not * recognized by this class.

    */ private PropertyResolver resolver = null; // ----------------------------------------------- PropertyResolver Methods /** *

    Return the value of the property with the specified name from * the specified base object.

    * * @param base The base object whose property value is to be returned * @param name Name of the property to be returned * * @exception NullPointerException if base or * name is null * @exception PropertyNotFoundException if the specified property name * does not exist, or is not readable */ public Object getValue(Object base, Object name) throws PropertyNotFoundException { if ((base == null) || (name == null)) { throw new NullPointerException(); } else if ((base instanceof DynaActionForm) && ("map".equals(name))) { if (log.isTraceEnabled()) { log.trace("Returning property map for DynaActionForm " + base + "'"); } return (((DynaActionForm) base).getMap()); } else if (base instanceof DynaBean) { if (getDynaProperty((DynaBean) base, name.toString()) == null) { throw new PropertyNotFoundException(name.toString()); } Object value = ((DynaBean) base).get(name.toString()); if (log.isTraceEnabled()) { log.trace("Returning dynamic property '" + name + "' for DynaBean '" + base + "' value '" + value + "'"); } return (value); } else { Object value = resolver.getValue(base, name); if (log.isTraceEnabled()) { log.trace("Delegating get of property '" + name + "' for bean '" + base + "' value '" + value + "'"); } return (value); } } /** *

    Return the value at the specified index of the specified * base object.

    * * @param base The base object whose property value is to be returned * @param index Index of the value to return * * @exception IndexOutOfBoundsException if thrown by the underlying * access to the base object * @exception NullPointerException if base * is null * @exception PropertyNotFoundException if some other exception occurs */ public Object getValue(Object base, int index) throws PropertyNotFoundException { return (resolver.getValue(base, index)); } /** *

    Set the specified value of the property with the specified name on * the specified base object.

    * * @param base The base object whose property value is to be set * @param name Name of the property to be set * @param value Value of the property to be set * * @exception NullPointerException if base or * name is null * @exception PropertyNotFoundException if the specified property name * does not exist, or is not writeable */ public void setValue(Object base, Object name, Object value) throws PropertyNotFoundException { if ((base == null) || (name == null)) { throw new NullPointerException(); } else if ((base instanceof DynaActionForm) && ("map".equals(name))) { throw new PropertyNotFoundException(name.toString()); } else if (base instanceof DynaBean) { if (log.isTraceEnabled()) { log.trace("setting dynamic property '" + name + "' for DynaBean '" + base + "' to '" + value + "'"); } if (getDynaProperty((DynaBean) base, name.toString()) == null) { throw new PropertyNotFoundException(name.toString()); } ((DynaBean) base).set(name.toString(), value); } else { if (log.isTraceEnabled()) { log.trace("Delegating set of property '" + name + "' for bean '" + base + "' to value '" + value + "'"); } resolver.setValue(base, name, value); } } /** *

    Set the value at the specified index of the specified * base object.

    * * @param base The base object whose property value is to be set * @param index Index of the value to set * @param value Value to be set * * @exception IndexOutOfBoundsException if thrown by the underlying * access to the base object * @exception NullPointerException if base * is null * @exception PropertyNotFoundException if some other exception occurs */ public void setValue(Object base, int index, Object value) throws PropertyNotFoundException { resolver.setValue(base, index, value); } /** *

    Return true if the specified property of the specified * base object is known to be immutable; otherwise, return * false.

    * * @param base The base object whose property is to analyzed * @param name Name of the property to be analyzed * * @exception NullPointerException if base or * name is null * @exception PropertyNotFoundException if the specified property name * does not exist */ public boolean isReadOnly(Object base, Object name) throws PropertyNotFoundException { if ((base == null) || (name == null)) { throw new NullPointerException(); } else if ((base instanceof DynaActionForm) && ("map".equals(name))) { return (true); } else if (base instanceof DynaBean) { if (getDynaProperty((DynaBean) base, name.toString()) == null) { throw new PropertyNotFoundException(name.toString()); } return (false); } else { return (resolver.isReadOnly(base, name.toString())); } } /** *

    Return true if the value at the specified index of * the specified base object is known to be immutable; otherwise, * return false.

    * * @param base The base object whose property is to analyzed * @param index Index of the value whose type is to be returned * * @exception IndexOutOfBoundsException if thrown by the underlying * accessed to the indexed property * @exception NullPointerException if base * is null * @exception PropertyNotFoundException if some other exception occurs */ public boolean isReadOnly(Object base, int index) throws PropertyNotFoundException { return (resolver.isReadOnly(base, index)); } /** *

    Return the java.lang.Class representing the type of * the specified property of the specified base object, if it can be * determined; otherwise return null.

    * * @param base The base object whose property is to analyzed * @param name Name of the property to be analyzed * * @exception NullPointerException if base or * name is null * @exception PropertyNotFoundException if the specified property name * does not exist */ public Class getType(Object base, Object name) throws PropertyNotFoundException { if ((base == null) || (name == null)) { throw new NullPointerException(); } else if ((base instanceof DynaActionForm) && ("map".equals(name))) { return (Map.class); } else if (base instanceof DynaBean) { DynaProperty dynaProperty = getDynaProperty((DynaBean) base, name.toString()); if (dynaProperty != null) { return (dynaProperty.getType()); } else { throw new PropertyNotFoundException(name.toString()); } } else { return (resolver.getType(base, name)); } } /** *

    Return the java.lang.Class representing the type of * value at the specified index of the specified base object, or * null if this value is null.

    * * @param base The base object whose property is to analyzed * @param index Index of the value whose type is to be returned * * @exception IndexOutOfBoundsException if thrown by the underlying * accessed to the indexed property * @exception NullPointerException if base * is null * @exception PropertyNotFoundException if some other exception occurs */ public Class getType(Object base, int index) throws PropertyNotFoundException { return (resolver.getType(base, index)); } // -------------------------------------------------------- Private Methods /** *

    Return the DynaProperty describing the specified * property of the specified DynaBean, or null * if there is no such property defined on the underlying * DynaClass.

    * * @param bean DynaBean to be checked * @param name Name of the property to be checked */ private DynaProperty getDynaProperty(DynaBean bean, String name) throws PropertyNotFoundException { DynaProperty dynaProperty = null; try { dynaProperty = bean.getDynaClass().getDynaProperty(name); } catch (IllegalArgumentException e) { ; } return (dynaProperty); } } ././@LongLink0000644000175000017500000000017410423140531011317 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/application/ViewHandlerImpl.javalibstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/applicati0000644000175000017500000001216410404045230034173 0ustar arnaudarnaud00000000000000/* * Copyright 2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.faces.application; import java.io.IOException; import java.util.Locale; import javax.faces.FacesException; import javax.faces.application.ViewHandler; import javax.faces.component.UIViewRoot; import javax.faces.context.ExternalContext; import javax.faces.context.FacesContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.Globals; /** *

    Custom ViewHandler implementation that adds features * specific to the Struts-Faces Integration Library. It leverages the * "decorator pattern" customization strategy that JSF supports, by * delegating most processing to the ViewHandler instance * handed to our constructor.

    */ public class ViewHandlerImpl extends ViewHandler { // ------------------------------------------------------------ Constructors /** *

    Construct a ViewHandlerImpl decorating the * specified ViewHandler instance.

    * * @param handler ViewHandler to be decorated */ public ViewHandlerImpl(ViewHandler handler) { if (log.isDebugEnabled()) { log.debug("Creating ViewHandler instance, wrapping handler " + handler); } this.handler = handler; } // ------------------------------------------------------ Instance Variables /** *

    The ViewHandler instance that we are decorating.

    */ private ViewHandler handler = null; // -------------------------------------------------------- Static Variables /** *

    The Log instance for this class.

    */ private static final Log log = LogFactory.getLog(ViewHandlerImpl.class); // -------------------------------------------------------------- Properties /** *

    Return the ViewHandler instance we are decorating.

    */ public ViewHandler getHandler() { return this.handler; } /** *

    Set the ViewHandler instance we are decorating.

    * * @param handler ViewHandler instance to decorate */ public void setHandler(ViewHandler handler) { this.handler = handler; } // ----------------------------------------------------- Specialized Methods /** *

    If the Struts application has set a Locale, pass it * on to JSF prior to delegating the actual rendering.

    * * @param context FacesContext for the current request * @param view UIViewRoot to be rendered */ public void renderView(FacesContext context, UIViewRoot view) throws IOException, FacesException { if (log.isDebugEnabled()) { log.debug("renderView(" + view.getViewId() + ")"); } ExternalContext econtext = context.getExternalContext(); if (econtext.getSession(false) != null) { Locale locale = (Locale) econtext.getSessionMap().get(Globals.LOCALE_KEY); if (locale != null) { if (log.isTraceEnabled()) { log.trace("Setting view locale to " + locale); } view.setLocale(locale); } } handler.renderView(context, view); } // ------------------------------------------------------- Delegated Methods // See ViewHandler JavaDocs for method descriptions public Locale calculateLocale(FacesContext context) { return handler.calculateLocale(context); } public String calculateRenderKitId(FacesContext context) { return handler.calculateRenderKitId(context); } public UIViewRoot createView(FacesContext context, String viewId) { return handler.createView(context, viewId); } public String getActionURL(FacesContext context, String viewId) { return handler.getActionURL(context, viewId); } public String getResourceURL(FacesContext context, String viewId) { return handler.getResourceURL(context, viewId); } public UIViewRoot restoreView(FacesContext context, String viewId) { return handler.restoreView(context, viewId); } public void writeState(FacesContext context) throws IOException { handler.writeState(context); } } ././@LongLink0000644000175000017500000000014610423140531011316 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/component/libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/component0000755000175000017500000000000010423130300034213 5ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000017010423140531011313 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/component/BaseComponent.javalibstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/component0000644000175000017500000000612310404045234034231 0ustar arnaudarnaud00000000000000/* * Copyright 2002-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.faces.component; import java.io.IOException; import java.util.Iterator; import javax.faces.component.UIOutput; import javax.faces.context.FacesContext; import javax.faces.el.ValueBinding; /** *

    Custom component that replaces the Struts * <html:base> tag.

    */ public class BaseComponent extends UIOutput { // ------------------------------------------------------------ Constructors /** *

    Create a new {@link BaseComponent} with default properties.

    */ public BaseComponent() { super(); setRendererType("org.apache.struts.faces.Base"); } // ------------------------------------------------------ Instance Variables /** *

    Target frame.

    */ private String target = null; // ---------------------------------------------------- Component Properties /** *

    Return the component family to which this component belongs.

    */ public String getFamily() { return "org.apache.struts.faces.Base"; } /** *

    Return the target frame.

    */ public String getTarget() { ValueBinding vb = getValueBinding("target"); if (vb != null) { return (String) vb.getValue(getFacesContext()); } else { return target; } } /** *

    Set the target frame.

    * * @param target The new target frame */ public void setTarget(String target) { this.target = target; } // ---------------------------------------------------- StateManager Methods /** *

    Restore the state of this component.

    * * @param context FacesContext for the current request * @param state State object from which to restore our state */ public void restoreState(FacesContext context, Object state) { Object values[] = (Object[]) state; super.restoreState(context, values[0]); target = (String) values[1]; } /** *

    Save the state of this component.

    * * @param context FacesContext for the current request */ public Object saveState(FacesContext context) { Object values[] = new Object[2]; values[0] = super.saveState(context); values[1] = target; return values; } } ././@LongLink0000644000175000017500000000017710423140531011322 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/component/CommandLinkComponent.javalibstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/component0000644000175000017500000003277510404045212034241 0ustar arnaudarnaud00000000000000/* * Copyright 2002-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.faces.component; import java.io.IOException; import java.util.Iterator; import javax.faces.component.UICommand; import javax.faces.context.FacesContext; import javax.faces.el.ValueBinding; /** *

    Custom component that emulates the JSF standard component class * javax.faces.component.html.HtmlCommandLink (and its * corresponding renderer) but is not tied to a particular implementation of * renderer for javax.faces.component.UIForm.

    */ public class CommandLinkComponent extends UICommand { // ------------------------------------------------------------ Constructors /** *

    Create a new {@link CommandLinkComponent} with default properties.

    */ public CommandLinkComponent() { super(); setRendererType("org.apache.struts.faces.CommandLink"); } // ------------------------------------------------------ Instance Variables private String accesskey = null; private String charset = null; private String dir = null; private String hreflang = null; private String lang = null; private String onblur = null; private String onclick = null; private String ondblclick = null; private String onfocus = null; private String onkeydown = null; private String onkeypress = null; private String onkeyup = null; private String onmousedown = null; private String onmousemove = null; private String onmouseout = null; private String onmouseover = null; private String onmouseup = null; private String rel = null; private String rev = null; private String style = null; private String styleClass = null; private String tabindex = null; private String target = null; private String title = null; private String type = null; // ---------------------------------------------------- Component Properties public String getAccesskey() { ValueBinding vb = getValueBinding("accesskey"); if (vb != null) { return (String) vb.getValue(getFacesContext()); } else { return accesskey; } } public void setAccesskey(String accesskey) { this.accesskey = accesskey; } public String getCharset() { ValueBinding vb = getValueBinding("charset"); if (vb != null) { return (String) vb.getValue(getFacesContext()); } else { return charset; } } public void setCharset(String charset) { this.charset = charset; } public String getDir() { ValueBinding vb = getValueBinding("dir"); if (vb != null) { return (String) vb.getValue(getFacesContext()); } else { return dir; } } public void setDir(String dir) { this.dir = dir; } /** *

    Return the component family to which this component belongs.

    */ public String getFamily() { return "org.apache.struts.faces.CommandLink"; } public String getHreflang() { ValueBinding vb = getValueBinding("hreflang"); if (vb != null) { return (String) vb.getValue(getFacesContext()); } else { return hreflang; } } public void setHreflang(String hreflang) { this.hreflang = hreflang; } public String getLang() { ValueBinding vb = getValueBinding("lang"); if (vb != null) { return (String) vb.getValue(getFacesContext()); } else { return lang; } } public void setLang(String lang) { this.lang = lang; } public String getOnblur() { ValueBinding vb = getValueBinding("onblur"); if (vb != null) { return (String) vb.getValue(getFacesContext()); } else { return onblur; } } public void setOnblur(String onblur) { this.onblur = onblur; } public String getOnclick() { ValueBinding vb = getValueBinding("onclick"); if (vb != null) { return (String) vb.getValue(getFacesContext()); } else { return onclick; } } public void setOnclick(String onclick) { this.onclick = onclick; } public String getOndblclick() { ValueBinding vb = getValueBinding("ondblclick"); if (vb != null) { return (String) vb.getValue(getFacesContext()); } else { return ondblclick; } } public void setOndblclick(String ondblclick) { this.ondblclick = ondblclick; } public String getOnfocus() { ValueBinding vb = getValueBinding("onfocus"); if (vb != null) { return (String) vb.getValue(getFacesContext()); } else { return onfocus; } } public void setOnfocus(String onfocus) { this.onfocus = onfocus; } public String getOnkeydown() { ValueBinding vb = getValueBinding("onkeydown"); if (vb != null) { return (String) vb.getValue(getFacesContext()); } else { return onkeydown; } } public void setOnkeydown(String onkeydown) { this.onkeydown = onkeydown; } public String getOnkeypress() { ValueBinding vb = getValueBinding("onkeypress"); if (vb != null) { return (String) vb.getValue(getFacesContext()); } else { return onkeypress; } } public void setOnkeypress(String onkeypress) { this.onkeypress = onkeypress; } public String getOnkeyup() { ValueBinding vb = getValueBinding("onkeyup"); if (vb != null) { return (String) vb.getValue(getFacesContext()); } else { return onkeyup; } } public void setOnkeyup(String onkeyup) { this.onkeyup = onkeyup; } public String getOnmousedown() { ValueBinding vb = getValueBinding("onmousedown"); if (vb != null) { return (String) vb.getValue(getFacesContext()); } else { return onmousedown; } } public void setOnmousedown(String onmousedown) { this.onmousedown = onmousedown; } public String getOnmousemove() { ValueBinding vb = getValueBinding("onmousemove"); if (vb != null) { return (String) vb.getValue(getFacesContext()); } else { return onmousemove; } } public void setOnmousemove(String onmousemove) { this.onmousemove = onmousemove; } public String getOnmouseout() { ValueBinding vb = getValueBinding("onmouseout"); if (vb != null) { return (String) vb.getValue(getFacesContext()); } else { return onmouseout; } } public void setOnmouseout(String onmouseout) { this.onmouseout = onmouseout; } public String getOnmouseover() { ValueBinding vb = getValueBinding("onmouseover"); if (vb != null) { return (String) vb.getValue(getFacesContext()); } else { return onmouseover; } } public void setOnmouseover(String onmouseover) { this.onmouseover = onmouseover; } public String getOnmouseup() { ValueBinding vb = getValueBinding("onmouseup"); if (vb != null) { return (String) vb.getValue(getFacesContext()); } else { return onmouseup; } } public void setOnmouseup(String onmouseup) { this.onmouseup = onmouseup; } public String getRel() { ValueBinding vb = getValueBinding("rel"); if (vb != null) { return (String) vb.getValue(getFacesContext()); } else { return rel; } } public void setRel(String rel) { this.rel = rel; } public String getRev() { ValueBinding vb = getValueBinding("rev"); if (vb != null) { return (String) vb.getValue(getFacesContext()); } else { return rev; } } public void setRev(String rev) { this.rev = rev; } public String getStyle() { ValueBinding vb = getValueBinding("style"); if (vb != null) { return (String) vb.getValue(getFacesContext()); } else { return style; } } public void setStyle(String style) { this.style = style; } public String getStyleClass() { ValueBinding vb = getValueBinding("styleClass"); if (vb != null) { return (String) vb.getValue(getFacesContext()); } else { return styleClass; } } public void setStyleClass(String styleClass) { this.styleClass = styleClass; } public String getTabindex() { ValueBinding vb = getValueBinding("tabindex"); if (vb != null) { return (String) vb.getValue(getFacesContext()); } else { return tabindex; } } public void setTabindex(String tabindex) { this.tabindex = tabindex; } public String getTarget() { ValueBinding vb = getValueBinding("target"); if (vb != null) { return (String) vb.getValue(getFacesContext()); } else { return target; } } public void setTarget(String target) { this.target = target; } public String getTitle() { ValueBinding vb = getValueBinding("title"); if (vb != null) { return (String) vb.getValue(getFacesContext()); } else { return title; } } public void setTitle(String title) { this.title = title; } public String getType() { ValueBinding vb = getValueBinding("type"); if (vb != null) { return (String) vb.getValue(getFacesContext()); } else { return type; } } public void setType(String type) { this.type = type; } // ---------------------------------------------------- StateManager Methods /** *

    Restore the state of this component.

    * * @param context FacesContext for the current request * @param state State object from which to restore our state */ public void restoreState(FacesContext context, Object state) { Object values[] = (Object[]) state; super.restoreState(context, values[0]); accesskey = (String) values[1]; charset = (String) values[2]; dir = (String) values[3]; hreflang = (String) values[4]; lang = (String) values[5]; onblur = (String) values[6]; onclick = (String) values[7]; ondblclick = (String) values[8]; onfocus = (String) values[9]; onkeydown = (String) values[10]; onkeypress = (String) values[11]; onkeyup = (String) values[12]; onmousedown = (String) values[13]; onmousemove = (String) values[14]; onmouseout = (String) values[15]; onmouseover = (String) values[16]; onmouseup = (String) values[17]; rel = (String) values[18]; rev = (String) values[19]; style = (String) values[20]; styleClass = (String) values[21]; tabindex = (String) values[22]; target = (String) values[23]; title = (String) values[24]; type = (String) values[25]; } /** *

    Save the state of this component.

    * * @param context FacesContext for the current request */ public Object saveState(FacesContext context) { Object values[] = new Object[26]; values[0] = super.saveState(context); values[1] = accesskey; values[2] = charset; values[3] = dir; values[4] = hreflang; values[5] = lang; values[6] = onblur; values[7] = onclick; values[8] = ondblclick; values[9] = onfocus; values[10] = onkeydown; values[11] = onkeypress; values[12] = onkeyup; values[13] = onmousedown; values[14] = onmousemove; values[15] = onmouseout; values[16] = onmouseover; values[17] = onmouseup; values[18] = rel; values[19] = rev; values[20] = style; values[21] = styleClass; values[22] = tabindex; values[23] = target; values[24] = title; values[25] = type; return values; } } ././@LongLink0000644000175000017500000000017210423140531011315 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/component/ErrorsComponent.javalibstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/component0000644000175000017500000000762510404045222034236 0ustar arnaudarnaud00000000000000/* * Copyright 2002-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.faces.component; import java.io.IOException; import java.util.Iterator; import javax.faces.component.UIOutput; import javax.faces.context.FacesContext; import javax.faces.el.ValueBinding; /** *

    Custom component that replaces the Struts * <html:errors> tag.

    */ public class ErrorsComponent extends UIOutput { // ------------------------------------------------------------ Constructors /** *

    Create a new {@link ErrorsComponent} with default properties.

    */ public ErrorsComponent() { super(); setRendererType("org.apache.struts.faces.Errors"); } // ------------------------------------------------------ Instance Variables /** *

    MessageResources attribute key to use for message lookup.

    */ private String bundle = null; /** *

    Property name of the property to report errors for.

    */ private String property = null; // ---------------------------------------------------- Component Properties /** *

    Return the MessageResources key.

    */ public String getBundle() { ValueBinding vb = getValueBinding("bundle"); if (vb != null) { return (String) vb.getValue(getFacesContext()); } else { return bundle; } } /** *

    Set the MessageResources key.

    * * @param bundle The new key */ public void setBundle(String bundle) { this.bundle = bundle; } /** *

    Return the component family to which this component belongs.

    */ public String getFamily() { return "org.apache.struts.faces.Errors"; } /** *

    Return the property name for which to report errors.

    */ public String getProperty() { ValueBinding vb = getValueBinding("property"); if (vb != null) { return (String) vb.getValue(getFacesContext()); } else { return property; } } /** *

    Set the property name for which to report errors.

    * * @param property The new property name */ public void setProperty(String property) { this.property = property; } // ---------------------------------------------------- StateManager Methods /** *

    Restore the state of this component.

    * * @param context FacesContext for the current request * @param state State object from which to restore our state */ public void restoreState(FacesContext context, Object state) { Object values[] = (Object[]) state; super.restoreState(context, values[0]); bundle = (String) values[1]; property = (String) values[2]; } /** *

    Save the state of this component.

    * * @param context FacesContext for the current request */ public Object saveState(FacesContext context) { Object values[] = new Object[3]; values[0] = super.saveState(context); values[1] = bundle; values[2] = property; return values; } } ././@LongLink0000644000175000017500000000017010423140531011313 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/component/FormComponent.javalibstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/component0000644000175000017500000004153110404045230034227 0ustar arnaudarnaud00000000000000/* * Copyright 2002-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.faces.component; import java.util.Map; import javax.faces.component.UIForm; import javax.faces.context.FacesContext; import javax.faces.el.ValueBinding; import javax.servlet.http.HttpSession; import org.apache.commons.beanutils.DynaBean; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.Globals; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionServlet; import org.apache.struts.action.DynaActionFormClass; import org.apache.struts.config.ActionConfig; import org.apache.struts.config.FormBeanConfig; import org.apache.struts.config.ModuleConfig; import org.apache.struts.util.RequestUtils; /** *

    FormComponent is a specialized subclass of * javax.faces.component.UIForm that supports automatic * creation of form beans in request or session scope.

    * * @version $Rev: 54943 $ $Date: 2004-10-17 00:57:37 +0100 (Sun, 17 Oct 2004) $ */ public class FormComponent extends UIForm { // -------------------------------------------------------- Static Variables /** *

    The Log instance for this class.

    */ protected static Log log = LogFactory.getLog(FormComponent.class); // ------------------------------------------------------ Instance Variables private String action = null; private String enctype = null; private String focus = null; private String focusIndex = null; private String onreset = null; private String onsubmit = null; private String style = null; private String styleClass = null; private String target = null; // ---------------------------------------------------- Component Properties /** *

    Return the Struts action path to which this form should be submitted. *

    */ public String getAction() { if (this.action != null) { return (this.action); } ValueBinding vb = getValueBinding("action"); if (vb != null) { return ((String) vb.getValue(getFacesContext())); } else { return (null); } } /** *

    Set the Struts action to which this form should be submitted.

    * * @param action The new action path */ public void setAction(String action) { this.action = action; } /** *

    Return the encoding type for this form submit.

    */ public String getEnctype() { if (this.enctype != null) { return (this.enctype); } ValueBinding vb = getValueBinding("enctype"); if (vb != null) { return ((String) vb.getValue(getFacesContext())); } else { return (null); } } /** *

    Set the encoding type for this form submit.

    * * @param enctype The new enctype path */ public void setEnctype(String enctype) { this.enctype = enctype; } /** *

    Return the component family to which this component belongs.

    */ public String getFamily() { return "org.apache.struts.faces.Form"; } /** *

    Return the focus element name.

    */ public String getFocus() { if (this.focus != null) { return (this.focus); } ValueBinding vb = getValueBinding("focus"); if (vb != null) { return ((String) vb.getValue(getFacesContext())); } else { return (null); } } /** *

    Set the focus element name.

    * * @param focus The new focus path */ public void setFocus(String focus) { this.focus = focus; } /** *

    Return the focus element index.

    */ public String getFocusIndex() { if (this.focusIndex != null) { return (this.focusIndex); } ValueBinding vb = getValueBinding("focusIndex"); if (vb != null) { return ((String) vb.getValue(getFacesContext())); } else { return (null); } } /** *

    Set the focus element index.

    * * @param focusIndex The new focusIndex path */ public void setFocusIndex(String focusIndex) { this.focusIndex = focusIndex; } /** *

    Return the JavaScript to execute on form reset.

    */ public String getOnreset() { if (this.onreset != null) { return (this.onreset); } ValueBinding vb = getValueBinding("onreset"); if (vb != null) { return ((String) vb.getValue(getFacesContext())); } else { return (null); } } /** *

    Set the JavaScript to execute on form reset.

    * * @param onreset The new onreset path */ public void setOnreset(String onreset) { this.onreset = onreset; } /** *

    Return the JavaScript to execute on form submit.

    */ public String getOnsubmit() { if (this.onsubmit != null) { return (this.onsubmit); } ValueBinding vb = getValueBinding("onsubmit"); if (vb != null) { return ((String) vb.getValue(getFacesContext())); } else { return (null); } } /** *

    Set the JavaScript to execute on form submit.

    * * @param onsubmit The new onsubmit path */ public void setOnsubmit(String onsubmit) { this.onsubmit = onsubmit; } /** *

    Return the CSS style(s) to be rendered for this component.

    */ public String getStyle() { ValueBinding vb = getValueBinding("style"); if (vb != null) { return (String) vb.getValue(getFacesContext()); } else { return style; } } /** *

    Set the CSS style(s) to be rendered for this component.

    * * @param style The new CSS style(s) */ public void setStyle(String style) { this.style = style; } /** *

    Return the CSS style class(es) to be rendered for this component.

    */ public String getStyleClass() { ValueBinding vb = getValueBinding("styleClass"); if (vb != null) { return (String) vb.getValue(getFacesContext()); } else { return styleClass; } } /** *

    Set the CSS style class(es) to be rendered for this component.

    * * @param styleClass The new CSS style class(es) */ public void setStyleClass(String styleClass) { this.styleClass = styleClass; } /** *

    Return the target frame for the response to this form submit.

    */ public String getTarget() { ValueBinding vb = getValueBinding("target"); if (vb != null) { return (String) vb.getValue(getFacesContext()); } else { return target; } } /** *

    Set the target frame for the response to this form submit.

    * * @param target The new CSS target(s) */ public void setTarget(String target) { this.target = target; } // ---------------------------------------------------------- UIForm Methods /** *

    Create an instance of the form bean (if necessary) before * delegating to the standard decoding process.

    * * @param context FacesContext for the request we are processing */ public void processDecodes(FacesContext context) { if (context == null) { throw new NullPointerException(); } if (log.isDebugEnabled()) { log.debug("processDecodes(" + getClientId(context) + ")"); } // Create the form bean (if necessary) Map params = context.getExternalContext().getRequestParameterMap(); if (params.containsKey(getClientId(context))) { createActionForm(context); } // Perform the standard decode processing super.processDecodes(context); } /** *

    Restore our state from the specified object.

    * * @param context FacesContext for the current request * @param state Object containing our saved state */ public void restoreState(FacesContext context, Object state) { Object values[] = (Object[]) state; super.restoreState(context, values[0]); action = (String) values[1]; enctype = (String) values[2]; focus = (String) values[3]; focusIndex = (String) values[4]; onreset = (String) values[5]; onsubmit = (String) values[6]; style = (String) values[7]; styleClass = (String) values[8]; target = (String) values[9]; } /** *

    Create and return an object representing our state to be saved.

    * * @param context FacesContext for the current request */ public Object saveState(FacesContext context) { Object values[] = new Object[10]; values[0] = super.saveState(context); values[1] = action; values[2] = enctype; values[3] = focus; values[4] = focusIndex; values[5] = onreset; values[6] = onsubmit; values[7] = style; values[8] = styleClass; values[9] = target; return (values); } // ---------------------------------------------------------- Public Methods /** *

    Create an appropriate form bean in the appropriate scope, if one * does not already exist.

    * * @param context FacesContext for the current request * * @exception IllegalArgumentException if no ActionConfig for the * specified action attribute can be located * @exception IllegalArgumentException if no FormBeanConfig for the * specified form bean can be located * @exception IllegalArgumentException if no ModuleConfig can be * located for this application module */ public void createActionForm(FacesContext context) { // Look up the application module configuration information we need ModuleConfig moduleConfig = lookupModuleConfig(context); // Look up the ActionConfig we are processing String action = getAction(); ActionConfig actionConfig = moduleConfig.findActionConfig(action); if (actionConfig == null) { throw new IllegalArgumentException("Cannot find action '" + action + "' configuration"); } // Does this ActionConfig specify a form bean? String name = actionConfig.getName(); if (name == null) { return; } // Look up the FormBeanConfig we are processing FormBeanConfig fbConfig = moduleConfig.findFormBeanConfig(name); if (fbConfig == null) { throw new IllegalArgumentException("Cannot find form bean '" + name + "' configuration"); } // Does a usable form bean attribute already exist? String attribute = actionConfig.getAttribute(); String scope = actionConfig.getScope(); ActionForm instance = null; if ("request".equals(scope)) { instance = (ActionForm) context.getExternalContext().getRequestMap().get(attribute); } else if ("session".equals(scope)) { HttpSession session = (HttpSession) context.getExternalContext().getSession(true); instance = (ActionForm) context.getExternalContext().getSessionMap().get(attribute); } if (instance != null) { if (fbConfig.getDynamic()) { String className = ((DynaBean) instance).getDynaClass().getName(); if (className.equals(fbConfig.getName())) { if (log.isDebugEnabled()) { log.debug (" Recycling existing DynaActionForm instance " + "of type '" + className + "'"); } return; } } else { try { Class configClass = RequestUtils.applicationClass(fbConfig.getType()); if (configClass.isAssignableFrom(instance.getClass())) { if (log.isDebugEnabled()) { log.debug (" Recycling existing ActionForm instance " + "of class '" + instance.getClass().getName() + "'"); } return; } } catch (Throwable t) { throw new IllegalArgumentException ("Cannot load form bean class '" + fbConfig.getType() + "'"); } } } // Create a new form bean instance if (fbConfig.getDynamic()) { try { DynaActionFormClass dynaClass = DynaActionFormClass.createDynaActionFormClass(fbConfig); instance = (ActionForm) dynaClass.newInstance(); if (log.isDebugEnabled()) { log.debug (" Creating new DynaActionForm instance " + "of type '" + fbConfig.getType() + "'"); log.trace(" --> " + instance); } } catch (Throwable t) { throw new IllegalArgumentException ("Cannot create form bean of type '" + fbConfig.getType() + "'"); } } else { try { instance = (ActionForm) RequestUtils.applicationInstance(fbConfig.getType()); if (log.isDebugEnabled()) { log.debug (" Creating new ActionForm instance " + "of type '" + fbConfig.getType() + "'"); log.trace(" --> " + instance); } } catch (Throwable t) { throw new IllegalArgumentException ("Cannot create form bean of class '" + fbConfig.getType() + "'"); } } // Configure and cache the form bean instance in the correct scope ActionServlet servlet = (ActionServlet) context.getExternalContext().getApplicationMap().get (Globals.ACTION_SERVLET_KEY); instance.setServlet(servlet); if ("request".equals(scope)) { context.getExternalContext().getRequestMap().put (attribute, instance); } else if ("session".equals(scope)) { context.getExternalContext().getSessionMap().put (attribute, instance); } } /** *

    Return the ModuleConfig for the application module * this form is being processed for.

    * * @param context The FacesContext for the current request * * @exception IllegalArgumentException if no ModuleConfig * can be found */ public ModuleConfig lookupModuleConfig(FacesContext context) { // Look up the application module configuration information we need ModuleConfig modConfig = (ModuleConfig) context.getExternalContext().getRequestMap().get (Globals.MODULE_KEY); if (modConfig == null) { modConfig = (ModuleConfig) context.getExternalContext().getApplicationMap().get (Globals.MODULE_KEY); } if (modConfig == null) { throw new IllegalArgumentException ("Cannot find module configuration"); } return (modConfig); } } ././@LongLink0000644000175000017500000000017010423140531011313 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/component/HtmlComponent.javalibstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/component0000644000175000017500000001140210404045224034224 0ustar arnaudarnaud00000000000000/* * Copyright 2002-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.faces.component; import java.io.IOException; import java.util.Iterator; import javax.faces.component.UIOutput; import javax.faces.context.FacesContext; import javax.faces.el.ValueBinding; /** *

    Custom component that replaces the Struts * <html:html> tag.

    */ public class HtmlComponent extends UIOutput { // ------------------------------------------------------------ Constructors /** *

    Create a new {@link HtmlComponent} with default properties.

    */ public HtmlComponent() { super(); setRendererType("org.apache.struts.faces.Html"); } // ------------------------------------------------------ Instance Variables /** *

    Flag indicating we should create a locale.

    */ private boolean locale = true; private boolean localeSet = false; /** *

    Flag indicating we should render XHTML output.

    */ private boolean xhtml = false; private boolean xhtmlSet = false; // ---------------------------------------------------- Component Properties /** *

    Return the component family to which this component belongs.

    */ public String getFamily() { return "org.apache.struts.faces.Html"; } /** *

    Return a flag indicating whether a locale should be created.

    */ public boolean isLocale() { if (localeSet) { return locale; } ValueBinding vb = getValueBinding("locale"); if (vb != null) { Boolean value = (Boolean) vb.getValue(getFacesContext()); if (null == value) { return locale; } return value.booleanValue(); } else { return locale; } } /** *

    Set the flag indicating whether a locale should be created.

    * * @param locale The new flag */ public void setLocale(boolean locale) { this.locale = locale; this.localeSet = true; } /** *

    Return a flag indicating whether xhtml should be created.

    */ public boolean isXhtml() { if (xhtmlSet) { return xhtml; } ValueBinding vb = getValueBinding("xhtml"); if (vb != null) { Boolean value = (Boolean) vb.getValue(getFacesContext()); if (null == value) { return xhtml; } return value.booleanValue(); } else { return xhtml; } } /** *

    Set the flag indicating whether xhtml should be created.

    * * @param xhtml The new flag */ public void setXhtml(boolean xhtml) { this.xhtml = xhtml; this.xhtmlSet = true; } // ---------------------------------------------------- StateManager Methods /** *

    Restore the state of this component.

    * * @param context FacesContext for the current request * @param state State object from which to restore our state */ public void restoreState(FacesContext context, Object state) { Object values[] = (Object[]) state; super.restoreState(context, values[0]); locale = ((Boolean) values[1]).booleanValue(); localeSet = ((Boolean) values[2]).booleanValue(); xhtml = ((Boolean) values[3]).booleanValue(); xhtmlSet = ((Boolean) values[4]).booleanValue(); } /** *

    Save the state of this component.

    * * @param context FacesContext for the current request */ public Object saveState(FacesContext context) { Object values[] = new Object[5]; values[0] = super.saveState(context); values[1] = locale ? Boolean.TRUE : Boolean.FALSE; values[2] = localeSet ? Boolean.TRUE : Boolean.FALSE; values[3] = xhtml ? Boolean.TRUE : Boolean.FALSE; values[4] = xhtmlSet ? Boolean.TRUE : Boolean.FALSE; return values; } } ././@LongLink0000644000175000017500000000017310423140531011316 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/component/MessageComponent.javalibstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/component0000644000175000017500000001476610404045172034246 0ustar arnaudarnaud00000000000000/* * Copyright 2002-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.faces.component; import java.io.IOException; import java.util.Iterator; import javax.faces.component.UIOutput; import javax.faces.context.FacesContext; import javax.faces.el.ValueBinding; /** *

    Custom component that replaces the Struts * <html:message> tag.

    */ public class MessageComponent extends UIOutput { // ------------------------------------------------------------ Constructors /** *

    Create a new {@link MessageComponent} with default properties.

    */ public MessageComponent() { super(); setRendererType("org.apache.struts.faces.Message"); } // ------------------------------------------------------ Instance Variables /** *

    MessageResources attribute key to use for message lookup.

    */ private String bundle = null; /** *

    Flag indicating whether output should be filtered.

    */ private boolean filter = true; private boolean filterSet = false; /** *

    Message key to use for message lookup.

    */ private String key = null; /** *

    CSS style(s) to be rendered for this component.

    */ private String style = null; /** *

    CSS style class(es) to be rendered for this component.

    */ private String styleClass = null; // ---------------------------------------------------- Component Properties /** *

    Return the MessageResources key.

    */ public String getBundle() { ValueBinding vb = getValueBinding("bundle"); if (vb != null) { return (String) vb.getValue(getFacesContext()); } else { return bundle; } } /** *

    Set the MessageResources key.

    * * @param bundle The new key */ public void setBundle(String bundle) { this.bundle = bundle; } /** *

    Return the component family to which this component belongs.

    */ public String getFamily() { return "org.apache.struts.faces.Message"; } /** *

    Return a flag indicating whether filtering should take place.

    */ public boolean isFilter() { if (filterSet) { return filter; } ValueBinding vb = getValueBinding("filter"); if (vb != null) { Boolean value = (Boolean) vb.getValue(getFacesContext()); if (null == value) { return filter; } return value.booleanValue(); } else { return filter; } } /** *

    Set the flag indicating that the output value should be filtered.

    * * @param filter The new filter flag */ public void setFilter(boolean filter) { this.filter = filter; this.filterSet = true; } /** *

    Return the message key.

    */ public String getKey() { ValueBinding vb = getValueBinding("key"); if (vb != null) { return (String) vb.getValue(getFacesContext()); } else { return key; } } /** *

    Set the message key.

    * * @param key The new key */ public void setKey(String key) { this.key = key; } /** *

    Return the CSS style(s) to be rendered for this component.

    */ public String getStyle() { ValueBinding vb = getValueBinding("style"); if (vb != null) { return (String) vb.getValue(getFacesContext()); } else { return style; } } /** *

    Set the CSS style(s) to be rendered for this component.

    * * @param style The new CSS style(s) */ public void setStyle(String style) { this.style = style; } /** *

    Return the CSS style class(es) to be rendered for this component.

    */ public String getStyleClass() { ValueBinding vb = getValueBinding("styleClass"); if (vb != null) { return (String) vb.getValue(getFacesContext()); } else { return styleClass; } } /** *

    Set the CSS style class(es) to be rendered for this component.

    * * @param styleClass The new CSS style class(es) */ public void setStyleClass(String styleClass) { this.styleClass = styleClass; } // ---------------------------------------------------- StateManager Methods /** *

    Restore the state of this component.

    * * @param context FacesContext for the current request * @param state State object from which to restore our state */ public void restoreState(FacesContext context, Object state) { Object values[] = (Object[]) state; super.restoreState(context, values[0]); bundle = (String) values[1]; filter = ((Boolean) values[2]).booleanValue(); filterSet = ((Boolean) values[3]).booleanValue(); key = (String) values[4]; style = (String) values[5]; styleClass = (String) values[6]; } /** *

    Save the state of this component.

    * * @param context FacesContext for the current request */ public Object saveState(FacesContext context) { Object values[] = new Object[7]; values[0] = super.saveState(context); values[1] = bundle; values[2] = filter ? Boolean.TRUE : Boolean.FALSE; values[3] = filterSet ? Boolean.TRUE : Boolean.FALSE; values[4] = key; values[5] = style; values[6] = styleClass; return values; } } ././@LongLink0000644000175000017500000000017610423140531011321 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/component/StylesheetComponent.javalibstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/component0000644000175000017500000000624510404045240034233 0ustar arnaudarnaud00000000000000/* * Copyright 2002-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.faces.component; import java.io.IOException; import java.util.Iterator; import javax.faces.component.UIOutput; import javax.faces.context.FacesContext; import javax.faces.el.ValueBinding; /** *

    Custom component that replaces the Struts * <html:stylesheet> tag.

    */ public class StylesheetComponent extends UIOutput { // ------------------------------------------------------------ Constructors /** *

    Create a new {@link StylesheetComponent} with default properties.

    */ public StylesheetComponent() { super(); setRendererType("org.apache.struts.faces.Stylesheet"); } // ------------------------------------------------------ Instance Variables /** *

    Context-relative path of the stylesheet resource.

    */ private String path = null; // ---------------------------------------------------- Component Properties /** *

    Return the component family to which this component belongs.

    */ public String getFamily() { return "org.apache.struts.faces.Stylesheet"; } /** *

    Return the context-relative stylesheet path.

    */ public String getPath() { ValueBinding vb = getValueBinding("path"); if (vb != null) { return (String) vb.getValue(getFacesContext()); } else { return path; } } /** *

    Set the context-relative stylesheet path.

    * * @param path The new path */ public void setPath(String path) { this.path = path; } // ---------------------------------------------------- StateManager Methods /** *

    Restore the state of this component.

    * * @param context FacesContext for the current request * @param state State object from which to restore our state */ public void restoreState(FacesContext context, Object state) { Object values[] = (Object[]) state; super.restoreState(context, values[0]); path = (String) values[1]; } /** *

    Save the state of this component.

    * * @param context FacesContext for the current request */ public Object saveState(FacesContext context) { Object values[] = new Object[2]; values[0] = super.saveState(context); values[1] = path; return values; } } ././@LongLink0000644000175000017500000000017110423140531011314 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/component/WriteComponent.javalibstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/component0000644000175000017500000001225610404045230034231 0ustar arnaudarnaud00000000000000/* * Copyright 2002-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.faces.component; import java.io.IOException; import java.util.Iterator; import javax.faces.component.UIOutput; import javax.faces.context.FacesContext; import javax.faces.el.ValueBinding; /** *

    Custom component that replaces the Struts * <html:write> tag.

    */ public class WriteComponent extends UIOutput { // ------------------------------------------------------------ Constructors /** *

    Create a new {@link WriteComponent} with default properties.

    */ public WriteComponent() { super(); setRendererType("org.apache.struts.faces.Write"); } // ------------------------------------------------------ Instance Variables /** *

    Flag indicating whether output should be filtered.

    */ private boolean filter = true; private boolean filterSet = false; /** *

    CSS style(s) to be rendered for this component.

    */ private String style = null; /** *

    CSS style class(es) to be rendered for this component.

    */ private String styleClass = null; // ---------------------------------------------------- Component Properties /** *

    Return the component family to which this component belongs.

    */ public String getFamily() { return "org.apache.struts.faces.Write"; } /** *

    Return a flag indicating whether filtering should take place.

    */ public boolean isFilter() { if (filterSet) { return filter; } ValueBinding vb = getValueBinding("filter"); if (vb != null) { Boolean value = (Boolean) vb.getValue(getFacesContext()); if (null == value) { return filter; } return value.booleanValue(); } else { return filter; } } /** *

    Set the flag indicating that the output value should be filtered.

    * * @param filter The new filter flag */ public void setFilter(boolean filter) { this.filter = filter; this.filterSet = true; } /** *

    Return the CSS style(s) to be rendered for this component.

    */ public String getStyle() { ValueBinding vb = getValueBinding("style"); if (vb != null) { return (String) vb.getValue(getFacesContext()); } else { return style; } } /** *

    Set the CSS style(s) to be rendered for this component.

    * * @param style The new CSS style(s) */ public void setStyle(String style) { this.style = style; } /** *

    Return the CSS style class(es) to be rendered for this component.

    */ public String getStyleClass() { ValueBinding vb = getValueBinding("styleClass"); if (vb != null) { return (String) vb.getValue(getFacesContext()); } else { return styleClass; } } /** *

    Set the CSS style class(es) to be rendered for this component.

    * * @param styleClass The new CSS style class(es) */ public void setStyleClass(String styleClass) { this.styleClass = styleClass; } // ---------------------------------------------------- StateManager Methods /** *

    Restore the state of this component.

    * * @param context FacesContext for the current request * @param state State object from which to restore our state */ public void restoreState(FacesContext context, Object state) { Object values[] = (Object[]) state; super.restoreState(context, values[0]); filter = ((Boolean) values[1]).booleanValue(); filterSet = ((Boolean) values[2]).booleanValue(); style = (String) values[3]; styleClass = (String) values[4]; } /** *

    Save the state of this component.

    * * @param context FacesContext for the current request */ public Object saveState(FacesContext context) { Object values[] = new Object[5]; values[0] = super.saveState(context); values[1] = filter ? Boolean.TRUE : Boolean.FALSE; values[2] = filterSet ? Boolean.TRUE : Boolean.FALSE; values[3] = style; values[4] = styleClass; return values; } } ././@LongLink0000644000175000017500000000014510423140531011315 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/renderer/libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/renderer/0000755000175000017500000000000010423130300034076 5ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000017210423140531011315 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/renderer/AbstractRenderer.javalibstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/renderer/0000644000175000017500000005757210404045250034130 0ustar arnaudarnaud00000000000000/* * Copyright 2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.faces.renderer; import java.io.IOException; import java.util.Iterator; import java.util.Map; import javax.faces.application.FacesMessage; import javax.faces.component.EditableValueHolder; import javax.faces.component.UIComponent; import javax.faces.component.ValueHolder; import javax.faces.context.FacesContext; import javax.faces.context.ResponseWriter; import javax.faces.convert.Converter; import javax.faces.convert.ConverterException; import javax.faces.el.ValueBinding; import javax.faces.render.Renderer; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** *

    Abstract base class for concrete implementations of * javax.faces.render.Renderer for the * Struts-Faces Integration Library.

    * * @version $Rev: 54934 $ $Date: 2004-10-16 18:07:50 +0100 (Sat, 16 Oct 2004) $ */ public abstract class AbstractRenderer extends Renderer { // -------------------------------------------------------- Static Variables private static final Log log = LogFactory.getLog(AbstractRenderer.class); // -------------------------------------------------------- Renderer Methods /** *

    Decode any new state of the specified UIComponent * from the request contained in the specified FacesContext, * and store that state on the UIComponent.

    * *

    The default implementation calls setSubmittedValue() * unless this component has a boolean disabled or * readonly attribute that is set to true.

    * * @param context FacesContext for the current request * @param component UIComponent to be decoded * * @exception NullPointerException if context or * component is null */ public void decode(FacesContext context, UIComponent component) { // Enforce NPE requirements in the Javadocs if ((context == null) || (component == null)) { throw new NullPointerException(); } // Disabled or readonly components are not decoded if (isDisabled(component) || isReadOnly(component)) { return; } // Save submitted value on EditableValueHolder components if (component instanceof EditableValueHolder) { setSubmittedValue(context, component); } } /** *

    Render the beginning of the specified UIComponent * to the output stream or writer associated with the response we are * creating.

    * *

    The default implementation calls renderStart() and * renderAttributes().

    * * @param context FacesContext for the current request * @param component UIComponent to be decoded * * @exception NullPointerException if context or * component is null * * @exception IOException if an input/output error occurs */ public void encodeBegin(FacesContext context, UIComponent component) throws IOException { // Enforce NPE requirements in the Javadocs if ((context == null) || (component == null)) { throw new NullPointerException(); } if (log.isTraceEnabled()) { log.trace("encodeBegin(id=" + component.getId() + ", family=" + component.getFamily() + ", rendererType=" + component.getRendererType() + ")"); } // Render the element and attributes for this component ResponseWriter writer = context.getResponseWriter(); renderStart(context, component, writer); renderAttributes(context, component, writer); } /** *

    Render the children of the specified UIComponent * to the output stream or writer associated with the response we are * creating.

    * *

    The default implementation iterates through the children of * this component and renders them.

    * * @param context FacesContext for the current request * @param component UIComponent to be decoded * * @exception NullPointerException if context or * component is null * * @exception IOException if an input/output error occurs */ public void encodeChildren(FacesContext context, UIComponent component) throws IOException { if (context == null || component == null) { throw new NullPointerException(); } if (log.isTraceEnabled()) { log.trace("encodeChildren(id=" + component.getId() + ", family=" + component.getFamily() + ", rendererType=" + component.getRendererType() + ")"); } Iterator kids = component.getChildren().iterator(); while (kids.hasNext()) { UIComponent kid = (UIComponent) kids.next(); kid.encodeBegin(context); if (kid.getRendersChildren()) { kid.encodeChildren(context); } kid.encodeEnd(context); } if (log.isTraceEnabled()) { log.trace("encodeChildren(id=" + component.getId() + ") end"); } } /** *

    Render the ending of the specified UIComponent * to the output stream or writer associated with the response we are * creating.

    * *

    The default implementation calls renderEnd().

    * * @param context FacesContext for the current request * @param component UIComponent to be decoded * * @exception NullPointerException if context or * component is null * * @exception IOException if an input/output error occurs */ public void encodeEnd(FacesContext context, UIComponent component) throws IOException { // Enforce NPE requirements in the Javadocs if ((context == null) || (component == null)) { throw new NullPointerException(); } if (log.isTraceEnabled()) { log.trace("encodeEnd(id=" + component.getId() + ", family=" + component.getFamily() + ", rendererType=" + component.getRendererType() + ")"); } // Render the element closing for this component ResponseWriter writer = context.getResponseWriter(); renderEnd(context, component, writer); } // --------------------------------------------------------- Package Methods // ------------------------------------------------------- Protected Methods /** *

    Render nested child components by invoking the encode methods * on those components, but only when the rendered * property is true.

    */ protected void encodeRecursive(FacesContext context, UIComponent component) throws IOException { // suppress rendering if "rendered" property on the component is // false. if (!component.isRendered()) { return; } // Render this component and its children recursively if (log.isTraceEnabled()) { log.trace("encodeRecursive(id=" + component.getId() + ", family=" + component.getFamily() + ", rendererType=" + component.getRendererType() + ") encodeBegin"); } component.encodeBegin(context); if (component.getRendersChildren()) { if (log.isTraceEnabled()) { log.trace("encodeRecursive(id=" + component.getId() + ") delegating"); } component.encodeChildren(context); } else { if (log.isTraceEnabled()) { log.trace("encodeRecursive(id=" + component.getId() + ") recursing"); } Iterator kids = component.getChildren().iterator(); while (kids.hasNext()) { UIComponent kid = (UIComponent) kids.next(); encodeRecursive(context, kid); } } if (log.isTraceEnabled()) { log.trace("encodeRecursive(id=" + component.getId() + ") encodeEnd"); } component.encodeEnd(context); } /** *

    Return true if the specified component is disabled.

    * * @param component UIComponent to be checked */ protected boolean isDisabled(UIComponent component) { Object disabled = component.getAttributes().get("disabled"); if (disabled == null) { return (false); } if (disabled instanceof String) { return (Boolean.valueOf((String) disabled).booleanValue()); } else { return (disabled.equals(Boolean.TRUE)); } } /** *

    Return true if the specified component is read only.

    * * @param component UIComponent to be checked */ protected boolean isReadOnly(UIComponent component) { Object readonly = component.getAttributes().get("readonly"); if (readonly == null) { return (false); } if (readonly instanceof String) { return (Boolean.valueOf((String) readonly).booleanValue()); } else { return (readonly.equals(Boolean.TRUE)); } } /** *

    Render the element attributes for the generated markup related to this * component. Simple renderers that create a single markup element * for this component should override this method and include calls to * to writeAttribute() and writeURIAttribute * on the specified ResponseWriter.

    * *

    The default implementation does nothing.

    * * @param context FacesContext for the current request * @param component EditableValueHolder component whose * submitted value is to be stored * @param writer ResponseWriter to which the element * start should be rendered * * @exception IOException if an input/output error occurs */ protected void renderAttributes(FacesContext context, UIComponent component, ResponseWriter writer) throws IOException { } /** *

    Render the element end for the generated markup related to this * component. Simple renderers that create a single markup element * for this component should override this method and include a call * to endElement() on the specified * ResponseWriter.

    * *

    The default implementation does nothing.

    * * @param context FacesContext for the current request * @param component EditableValueHolder component whose * submitted value is to be stored * @param writer ResponseWriter to which the element * start should be rendered * * @exception IOException if an input/output error occurs */ protected void renderEnd(FacesContext context, UIComponent component, ResponseWriter writer) throws IOException { } /** *

    Render any boolean attributes on the specified list that have * true values on the corresponding attribute of the * specified UIComponent.

    * * @param context FacesContext for the current request * @param component EditableValueHolder component whose * submitted value is to be stored * @param writer ResponseWriter to which the element * start should be rendered * @param names List of attribute names to be passed through * * @exception IOException if an input/output error occurs */ protected void renderBoolean(FacesContext context, UIComponent component, ResponseWriter writer, String names[]) throws IOException { if (names == null) { return; } Map attributes = component.getAttributes(); boolean flag; Object value; for (int i = 0; i < names.length; i++) { value = attributes.get(names[i]); if (value != null) { if (value instanceof String) { flag = Boolean.valueOf((String) value).booleanValue(); } else { flag = Boolean.valueOf(value.toString()).booleanValue(); } if (flag) { writer.writeAttribute(names[i], names[i], names[i]); flag = false; } } } } /** *

    Render any attributes on the specified list directly to the * specified ResponseWriter for which the specified * UIComponent has a non-null attribute value. * This method may be used to "pass through" commonly used attribute * name/value pairs with a minimum of code.

    * * @param context FacesContext for the current request * @param component EditableValueHolder component whose * submitted value is to be stored * @param writer ResponseWriter to which the element * start should be rendered * @param names List of attribute names to be passed through * * @exception IOException if an input/output error occurs */ protected void renderPassThrough(FacesContext context, UIComponent component, ResponseWriter writer, String names[]) throws IOException { if (names == null) { return; } Map attributes = component.getAttributes(); Object value; for (int i = 0; i < names.length; i++) { value = attributes.get(names[i]); if (value != null) { if (value instanceof String) { writer.writeAttribute(names[i], (String) value, names[i]); } else { writer.writeAttribute(names[i], value.toString(), names[i]); } } } } /** *

    Render the element start for the generated markup related to this * component. Simple renderers that create a single markup element * for this component should override this method and include a call * to startElement() on the specified * ResponseWriter.

    * *

    The default implementation does nothing.

    * * @param context FacesContext for the current request * @param component EditableValueHolder component whose * submitted value is to be stored * @param writer ResponseWriter to which the element * start should be rendered * * @exception IOException if an input/output error occurs */ protected void renderStart(FacesContext context, UIComponent component, ResponseWriter writer) throws IOException { } /** *

    If a submitted value was included on this request, store it in the * component as appropriate.

    * *

    The default implementation determines whether this component * implements EditableValueHolder. If so, it checks for a * request parameter with the same name as the clientId * of this UIComponent. If there is such a parameter, its * value is passed (as a String) to the setSubmittedValue() * method on the EditableValueHolder component.

    * * @param context FacesContext for the current request * @param component EditableValueHolder component whose * submitted value is to be stored */ protected void setSubmittedValue (FacesContext context, UIComponent component) { if (!(component instanceof EditableValueHolder)) { return; } String clientId = component.getClientId(context); Map parameters = context.getExternalContext().getRequestParameterMap(); if (parameters.containsKey(clientId)) { if (log.isTraceEnabled()) { log.trace("setSubmittedValue(" + clientId + "," + (String) parameters.get(clientId)); } component.getAttributes().put("submittedValue", (String) parameters.get(clientId)); } } // --------------------------------------------------------- Private Methods /** *

    Decode the current state of the specified UIComponent from the * request contained in the specified FacesContext, and * attempt to convert this state information into an object of the * type equired for this component.

    * * @param context FacesContext for the request we are processing * @param component UIComponent to be decoded * * @exception NullPointerException if context or component is null */ /* public void decode(FacesContext context, UIComponent component) { // Enforce NPE requirements in the Javadocs if ((context == null) || (component == null)) { throw new NullPointerException(); } // Only input components need to be decoded if (!(component instanceof UIInput)) { return; } UIInput input = (UIInput) component; // Save the old value for use in generating ValueChangedEvents Object oldValue = input.getValue(); if (oldValue instanceof String) { try { oldValue = getAsObject(context, component, (String) oldValue); } catch (ConverterException e) { ; } } input.setPrevious(oldValue); // Decode and convert (if needed) the new value String clientId = component.getClientId(context); Map map = context.getExternalContext().getRequestParameterMap(); String newString = (String) map.get(clientId); Object newValue = null; try { newValue = getAsObject(context, component, newString); input.setValue(newValue); input.setValid(true); } catch (ConverterException e) { input.setValue(newValue); input.setValid(false); addConverterMessage(context, component, e.getMessage()); } } */ // --------------------------------------------------------- Package Methods // ------------------------------------------------------- Protected Methods /** *

    Add an error message denoting a conversion failure.

    * * @param context The FacesContext for this request * @param component The UIComponent that experienced * the conversion failure * @param text The text of the error message */ /* protected void addConverterMessage(FacesContext context, UIComponent component, String text) { String clientId = component.getClientId(context); FacesMessage message = new FacesMessage (text, "Conversion error on component '" + clientId + "'"); context.addMessage(clientId, message); } */ /** *

    Convert the String representation of this component's value * to the corresponding Object representation. The default * implementation utilizes the getAsObject() method of any * associated Converter.

    * * @param context The FacesContext for this request * @param component The UIComponent whose value is * being converted * @param value The String representation to be converted * * @exception ConverterException if conversion fails */ /* protected Object getAsObject(FacesContext context, UIComponent component, String value) throws ConverterException { // Identify any Converter associated with this component value ValueBinding vb = component.getValueBinding("value"); Converter converter = null; if (component instanceof ValueHolder) { // Acquire explicitly assigned Converter (if any) converter = ((ValueHolder) component).getConverter(); } if ((converter == null) && (vb != null)) { Class type = vb.getType(context); if ((type == null) || (type == String.class)) { return (value); // No conversion required for Strings } // Acquire implicit by-type Converter (if any) converter = context.getApplication().createConverter(type); } // Convert the result if we identified a Converter if (converter != null) { return (converter.getAsObject(context, component, value)); } else { return (value); } } */ /** *

    Convert the Object representation of this component's value * to the corresponding String representation. The default implementation * utilizes the getAsString() method of any associated * Converter.

    * * @param context The FacesContext for this request * @param component The UIComponent whose value is * being converted * @param value The Object representation to be converted * * @exception ConverterException if conversion fails */ protected String getAsString(FacesContext context, UIComponent component, Object value) throws ConverterException { // Identify any Converter associated with this component value ValueBinding vb = component.getValueBinding("value"); Converter converter = null; if (component instanceof ValueHolder) { // Acquire explicitly assigned Converter (if any) converter = ((ValueHolder) component).getConverter(); } if ((converter == null) && (vb != null)) { // Acquire implicit by-type Converter (if any) Class type = vb.getType(context); if (type != null) { converter = context.getApplication().createConverter(type); } } // Convert the result if we identified a Converter if (converter != null) { return (converter.getAsString(context, component, value)); } else if (value == null) { return (""); } else if (value instanceof String) { return ((String) value); } else { return (value.toString()); } } } ././@LongLink0000644000175000017500000000016610423140531011320 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/renderer/BaseRenderer.javalibstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/renderer/0000644000175000017500000001675010404045174034126 0ustar arnaudarnaud00000000000000/* * Copyright 2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.faces.renderer; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import javax.faces.FacesException; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.context.ResponseWriter; import javax.servlet.http.HttpServletRequest; import org.apache.commons.beanutils.MethodUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** *

    Renderer implementation for the base tag * from the Struts-Faces Integration Library.

    * * @version $Rev: 54934 $ $Date: 2004-10-16 18:07:50 +0100 (Sat, 16 Oct 2004) $ */ public class BaseRenderer extends AbstractRenderer { // -------------------------------------------------------- Static Variables /** *

    The Log instance for this class.

    */ private static Log log = LogFactory.getLog(BaseRenderer.class); // ---------------------------------------------------------- Public Methods /** *

    Render an HTML base element.

    * * @param context FacesContext for the request we are processing * @param component UIComponent to be rendered * * @exception IOException if an input/output error occurs while rendering * @exception NullPointerException if context * or component is null */ public void encodeEnd(FacesContext context, UIComponent component) throws IOException { if ((context == null) || (component == null)) { throw new NullPointerException(); } if (log.isTraceEnabled()) { log.trace("viewId='" + context.getViewRoot().getViewId() + "' --> uri='" + uri(context) + "'"); } ResponseWriter writer = context.getResponseWriter(); writer.startElement("base", component); writer.writeURIAttribute("href", uri(context), null); String target = (String) component.getAttributes().get("target"); if (target != null) { writer.writeAttribute("target", target, "target"); } writer.endElement("base"); writer.writeText("\n", null); } // ------------------------------------------------------- Protected Methods /** *

    Return true if this is a portlet request instance. * NOTE: Implementation must not require portlet API classes to be * present.

    * * @param context FacesContext for the current request */ protected boolean isPortletRequest(FacesContext context) { Object request = context.getExternalContext().getRequest(); Class clazz = request.getClass(); while (clazz != null) { // Does this class implement PortletRequest? Class interfaces[] = clazz.getInterfaces(); if (interfaces == null) { interfaces = new Class[0]; } for (int i = 0; i < interfaces.length; i++) { if ("javax.portlet.PortletRequest".equals (interfaces[i].getName())) { return (true); } } // Try our superclass (if any) clazz = clazz.getSuperclass(); } return (false); } /** *

    Return true if this is a servlet request instance.

    * * @param context FacesContext for the current request */ protected boolean isServletRequest(FacesContext context) { Object request = context.getExternalContext().getRequest(); return (request instanceof HttpServletRequest); } /** *

    Return an absolute URI for the current page suitable for use * in a portlet environment. NOTE: Implementation must not require * portlet API classes to be present, so use reflection as needed.

    * * @param context FacesContext for the current request */ protected String portletUri(FacesContext context) { Object request = context.getExternalContext().getRequest(); try { String scheme = (String) MethodUtils.invokeMethod(request, "getScheme", null); StringBuffer sb = new StringBuffer(scheme); sb.append("://"); sb.append(MethodUtils.invokeMethod(request, "getServerName", null)); Integer port = (Integer) MethodUtils.invokeMethod(request, "getServerPort", null); if ("http".equals(scheme) && (port.intValue() == 80)) { ; } else if ("https".equals(scheme) && (port.intValue() == 443)) { ; } else { sb.append(":" + port); } sb.append (MethodUtils.invokeMethod(request, "getContextPath", null)); sb.append(context.getViewRoot().getViewId()); return (sb.toString()); } catch (InvocationTargetException e) { throw new FacesException(e.getTargetException()); } catch (Exception e) { throw new FacesException(e); } } /** *

    Return an absolute URI for the current page suitable for use * in a servlet environment.

    * * @param context FacesContext for the current request */ protected String servletUri(FacesContext context) { HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest(); StringBuffer sb = new StringBuffer(request.getScheme()); sb.append("://"); sb.append(request.getServerName()); if ("http".equals(request.getScheme()) && (80 == request.getServerPort())) { ; } else if ("https".equals(request.getScheme()) && (443 == request.getServerPort())) { ; } else { sb.append(":" + request.getServerPort()); } sb.append(request.getContextPath()); sb.append(context.getViewRoot().getViewId()); return (sb.toString()); } /** *

    Return the absolute URI to be rendered as the value of the * href attribute.

    * * @param context FacesContext for the current request */ protected String uri(FacesContext context) { if (isServletRequest(context)) { return (servletUri(context)); } else if (isPortletRequest(context)) { return (portletUri(context)); } else { throw new IllegalArgumentException ("Request is neither HttpServletRequest nor PortletRequest"); } } } ././@LongLink0000644000175000017500000000017510423140531011320 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/renderer/CommandLinkRenderer.javalibstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/renderer/0000644000175000017500000002530210404045204034111 0ustar arnaudarnaud00000000000000/* * Copyright 2002-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.faces.renderer; import java.io.IOException; import java.util.Iterator; import javax.faces.component.NamingContainer; import javax.faces.component.UICommand; import javax.faces.component.UIComponent; import javax.faces.component.UIForm; import javax.faces.component.UIParameter; import javax.faces.context.FacesContext; import javax.faces.context.ResponseWriter; import javax.faces.event.ActionEvent; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.Globals; import org.apache.struts.config.ActionConfig; import org.apache.struts.config.ModuleConfig; /** *

    Renderer implementation for the commandLink * tag from the Struts-Faces Integration Library.

    * * @version $Rev: 54934 $ $Date: 2004-10-16 18:07:50 +0100 (Sat, 16 Oct 2004) $ */ public class CommandLinkRenderer extends AbstractRenderer { // -------------------------------------------------------- Static Variables /** *

    Token for private names.

    */ private static final String TOKEN = "org_apache_struts_faces_renderer_CommandLinkRenderer"; /** *

    The Log instance for this class.

    */ private static Log log = LogFactory.getLog(CommandLinkRenderer.class); // ---------------------------------------------------------- Public Methods /** *

    Perform setup processing that will be required for decoding the * incoming request.

    * * @param context FacesContext for the request we are processing * @param component UIComponent to be processed * * @exception NullPointerException if context * or component is null */ public void decode(FacesContext context, UIComponent component) { // Implement spec requirements on NullPointerException if ((context == null) || (component == null)) { throw new NullPointerException(); } // Skip this component if it is not relevant if (!component.isRendered() || isDisabled(component) || isReadOnly(component)) { return; } // Set up variables we will need UIForm form = null; UIComponent parent = component.getParent(); while (parent != null) { if (parent instanceof UIForm) { form = (UIForm) parent; break; } parent = parent.getParent(); } if (form == null) { log.warn("CommandLinkComponent not nested inside UIForm, ignored"); return; } String formClientId = form.getClientId(context); // Was this the component that submitted this form? String paramId = TOKEN; String value = (String) context.getExternalContext().getRequestParameterMap().get(paramId); if ((value == null) || !value.equals(component.getClientId(context))) { if (log.isTraceEnabled()) { log.trace("decode(" + component.getId() + ") --> not active"); } return; } // Queue an ActionEvent from this component if (log.isTraceEnabled()) { log.trace("decode(" + component.getId() + ") --> queueEvent()"); } component.queueEvent(new ActionEvent(component)); } private static String passThrough[] = { "accesskey", "charset", "dir", "hreflang", "lang", "onblur", /* "onclick", */ "ondblclick", "onfocus", "onkeydown", "onkeypress", "onkeyup", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "rel", "rev", "style", "tabindex", "target", "title", "type" }; /** *

    Render the beginning of a hyperlink to submit this form.

    * * @param context FacesContext for the request we are processing * @param component UIComponent to be rendered * @param writer ResponseWriter we are rendering to * * @exception IOException if an input/output error occurs while rendering * @exception NullPointerException if context * or component is null */ public void renderStart(FacesContext context, UIComponent component, ResponseWriter writer) throws IOException { // Skip this component if it is not relevant if (!component.isRendered() || isDisabled(component) || isReadOnly(component)) { return; } // Set up variables we will need UIForm form = null; UIComponent parent = component.getParent(); while (parent != null) { if (parent instanceof UIForm) { form = (UIForm) parent; break; } parent = parent.getParent(); } if (form == null) { log.warn("CommandLinkComponent not nested inside UIForm, ignored"); return; } String formClientId = form.getClientId(context); // If this is the first nested command link inside this form, // render a hidden variable to identify which link did the submit String key = formClientId + NamingContainer.SEPARATOR_CHAR + TOKEN; if (context.getExternalContext().getRequestMap().get(key) == null) { writer.startElement("input", null); writer.writeAttribute("name", TOKEN, null); writer.writeAttribute("type", "hidden", null); writer.writeAttribute("value", "", null); writer.endElement("input"); context.getExternalContext().getRequestMap().put (key, Boolean.TRUE); } // Render the beginning of this hyperlink writer.startElement("a", component); } /** *

    Render the attributes of a hyperlink to submit this form.

    * * @param context FacesContext for the request we are processing * @param component UIComponent to be rendered * @param writer ResponseWriter we are rendering to * * @exception IOException if an input/output error occurs while rendering * @exception NullPointerException if context * or component is null */ public void renderAttributes(FacesContext context, UIComponent component, ResponseWriter writer) throws IOException { // Skip this component if it is not relevant if (!component.isRendered() || isDisabled(component) || isReadOnly(component)) { return; } // Set up variables we will need UIForm form = null; UIComponent parent = component.getParent(); while (parent != null) { if (parent instanceof UIForm) { form = (UIForm) parent; break; } parent = parent.getParent(); } if (form == null) { log.warn("CommandLinkComponent not nested inside UIForm, ignored"); return; } String formClientId = form.getClientId(context); // Render the attributes of this hyperlink if (component.getId() != null) { writer.writeAttribute("id", component.getClientId(context), "id"); } writer.writeAttribute("href", "#", null); String styleClass = (String) component.getAttributes().get("styleClass"); if (styleClass != null) { writer.writeAttribute("class", styleClass, "styleClass"); } renderPassThrough(context, component, writer, passThrough); // Render the JavaScript content of the "onclick" element StringBuffer sb = new StringBuffer(); sb.append("document.forms['"); sb.append(formClientId); sb.append("']['"); sb.append(TOKEN); sb.append("'].value='"); sb.append(component.getClientId(context)); sb.append("';"); Iterator kids = component.getChildren().iterator(); while (kids.hasNext()) { UIComponent kid = (UIComponent) kids.next(); if (!(kid instanceof UIParameter)) { continue; } sb.append("document.forms['"); sb.append(formClientId); sb.append("']['"); sb.append((String) kid.getAttributes().get("name")); sb.append("'].value='"); sb.append((String) kid.getAttributes().get("value")); sb.append("';"); } sb.append("document.forms['"); sb.append(formClientId); sb.append("'].submit(); return false;"); writer.writeAttribute("onclick", sb.toString(), null); // Render the component value as the hyperlink text Object value = component.getAttributes().get("value"); if (value != null) { if (value instanceof String) { writer.write((String) value); } else { writer.write(value.toString()); } } } /** *

    Render the end of a hyperlink to submit this form.

    * * @param context FacesContext for the request we are processing * @param component UIComponent to be rendered * @param writer ResponseWriter we are rendering to * * @exception IOException if an input/output error occurs while rendering * @exception NullPointerException if context * or component is null */ public void renderEnd(FacesContext context, UIComponent component, ResponseWriter writer) throws IOException { // Skip this component if it is not relevant if (!component.isRendered() || isDisabled(component) || isReadOnly(component)) { return; } // Render the beginning of this hyperlink writer.endElement("a"); } } ././@LongLink0000644000175000017500000000016510423140531011317 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/renderer/Dummy.propertieslibstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/renderer/0000644000175000017500000000020010404045210034074 0ustar arnaudarnaud00000000000000# This is a dummy properties file that may be used at design # time when a runtime MessageResources instance is not available ././@LongLink0000644000175000017500000000017010423140531011313 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/renderer/ErrorsRenderer.javalibstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/renderer/0000644000175000017500000001746210404045214034122 0ustar arnaudarnaud00000000000000/* * Copyright 2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.faces.renderer; import java.beans.Beans; import java.io.IOException; import java.util.Iterator; import java.util.Locale; import javax.faces.application.FacesMessage; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.context.ResponseWriter; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.Globals; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionMessage; import org.apache.struts.util.MessageResources; /** *

    Renderer implementation for the errors tag * from the Struts-Faces Integration Library.

    * * @version $Rev: 55303 $ $Date: 2004-10-22 03:56:53 +0100 (Fri, 22 Oct 2004) $ */ public class ErrorsRenderer extends AbstractRenderer { // -------------------------------------------------------- Static Variables /** *

    The Log instance for this class.

    */ private static Log log = LogFactory.getLog(ErrorsRenderer.class); /** * The dummy message resources for this package. */ protected static MessageResources dummy = MessageResources.getMessageResources ("org.apache.struts.faces.renderer.Dummy"); // ---------------------------------------------------------- Public Methods /** *

    Render a combination of error messages from JavaServer Faces * Validators, and Struts messages from form bean * validate() methods and corresponding business logic * error checks.

    * * @param context FacesContext for the request we are processing * @param component UIComponent to be rendered * * @exception IOException if an input/output error occurs while rendering * @exception NullPointerException if context * or component is null */ public void encodeEnd(FacesContext context, UIComponent component) throws IOException { if ((context == null) || (component == null)) { throw new NullPointerException(); } if (log.isDebugEnabled()) { log.debug("encodeEnd() started"); } // Look up availability of our predefined resource keys MessageResources resources = resources(context, component); if (Beans.isDesignTime() && (resources == null)) { resources = dummy; } Locale locale = context.getViewRoot().getLocale(); boolean headerPresent = resources.isPresent(locale, "errors.header"); boolean footerPresent = resources.isPresent(locale, "errors.footer"); boolean prefixPresent = resources.isPresent(locale, "errors.prefix"); boolean suffixPresent = resources.isPresent(locale, "errors.suffix"); // Set up to render the error messages appropriately boolean headerDone = false; ResponseWriter writer = context.getResponseWriter(); String id = component.getId(); String property = (String) component.getAttributes().get("property"); if (id != null) { writer.startElement("span", component); if (id != null) { writer.writeAttribute("id", component.getClientId(context), "id"); } } // Render any JavaServer Faces messages Iterator messages = context.getMessages(property); while (messages.hasNext()) { FacesMessage message = (FacesMessage) messages.next(); if (log.isTraceEnabled()) { log.trace("Processing FacesMessage: " + message.getSummary()); } if (!headerDone) { if (headerPresent) { writer.write (resources.getMessage(locale, "errors.header")); } headerDone = true; } if (prefixPresent) { writer.write(resources.getMessage(locale, "errors.prefix")); } writer.write(message.getSummary()); if (suffixPresent) { writer.write(resources.getMessage(locale, "errors.suffix")); } } // Render any Struts messages ActionErrors errors = (ActionErrors) context.getExternalContext().getRequestMap().get (Globals.ERROR_KEY); if (errors != null) { if (log.isTraceEnabled()) { log.trace("Processing Struts messages for property '" + property + "'"); } Iterator reports = null; if (property == null) { reports = errors.get(); } else { reports = errors.get(property); } while (reports.hasNext()) { ActionMessage report = (ActionMessage) reports.next(); if (log.isTraceEnabled()) { log.trace("Processing Struts message key='" + report.getKey() + "'"); } if (!headerDone) { writer = context.getResponseWriter(); if (headerPresent) { writer.write (resources.getMessage(locale, "errors.header")); } headerDone = true; } if (prefixPresent) { writer.write (resources.getMessage(locale, "errors.prefix")); } writer.write(resources.getMessage(locale, report.getKey(), report.getValues())); if (suffixPresent) { writer.write (resources.getMessage(locale, "errors.suffix")); } } } // Append the list footer if needed if (headerDone && footerPresent) { writer.write(resources.getMessage(locale, "errors.footer")); } if (id != null) { writer.endElement("span"); } if (log.isDebugEnabled()) { log.debug("encodeEnd() finished"); } } // ------------------------------------------------------ Protected Methods /** *

    Return the MessageResources bundle from which * we should return any Struts based error messages. If no such * bundle can be located, return null.

    * * @param context FacesContext for the request we are processing * @param component UIComponent to be rendered */ protected MessageResources resources(FacesContext context, UIComponent component) { String bundle = (String) component.getAttributes().get("bundle"); if (bundle == null) { bundle = Globals.MESSAGES_KEY; } return ((MessageResources) context.getExternalContext().getApplicationMap().get(bundle)); } } ././@LongLink0000644000175000017500000000016610423140531011320 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/renderer/FormRenderer.javalibstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/renderer/0000644000175000017500000002526310404045250034120 0ustar arnaudarnaud00000000000000/* * Copyright 2002-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.faces.renderer; import java.io.IOException; import java.util.Map; import javax.faces.component.NamingContainer; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.context.ResponseWriter; import javax.servlet.http.HttpSession; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.Globals; import org.apache.struts.config.ActionConfig; import org.apache.struts.config.ModuleConfig; import org.apache.struts.faces.component.FormComponent; /** *

    Renderer implementation for the form tag * from the Struts-Faces Integration Library.

    * * @version $Rev: 55303 $ $Date: 2004-10-22 03:56:53 +0100 (Fri, 22 Oct 2004) $ */ public class FormRenderer extends AbstractRenderer { // -------------------------------------------------------- Static Variables /** *

    The Log instance for this class.

    */ private static Log log = LogFactory.getLog(FormRenderer.class); // ---------------------------------------------------------- Public Methods /** *

    Perform setup processing that will be required for decoding the * incoming request.

    * * @param context FacesContext for the request we are processing * @param component UIComponent to be processed * * @exception NullPointerException if context * or component is null */ public void decode(FacesContext context, UIComponent component) { if ((context == null) || (component == null)) { throw new NullPointerException(); } String clientId = component.getClientId(context); Map map = context.getExternalContext().getRequestParameterMap(); if (log.isDebugEnabled()) { log.debug("decode(" + clientId + ") --> " + map.containsKey(clientId)); } component.getAttributes().put ("submitted", map.containsKey(clientId) ? Boolean.TRUE : Boolean.FALSE); } private static String passThrough[] = { "enctype", "method", "onreset", "onsubmit", "style", "target", }; /** *

    Render the beginning of an HTML <form> * control.

    * * @param context FacesContext for the request we are processing * @param component UIComponent to be rendered * * @exception IOException if an input/output error occurs while rendering * @exception NullPointerException if context * or component is null */ public void encodeBegin(FacesContext context, UIComponent component) throws IOException { if ((context == null) || (component == null)) { throw new NullPointerException(); } // Calculate and cache the form name FormComponent form = (FormComponent) component; String action = form.getAction(); ModuleConfig moduleConfig = form.lookupModuleConfig(context); ActionConfig actionConfig = moduleConfig.findActionConfig(action); String beanName = actionConfig.getAttribute(); if (beanName != null) { form.getAttributes().put("beanName", beanName); } // Look up attribute values we need String clientId = component.getClientId(context); if (log.isDebugEnabled()) { log.debug("encodeBegin(" + clientId + ")"); } String styleClass = (String) component.getAttributes().get("styleClass"); // Render the beginning of this form ResponseWriter writer = context.getResponseWriter(); writer.startElement("form", form); writer.writeAttribute("id", clientId, "clientId"); if (beanName != null) { writer.writeAttribute("name", beanName, null); } writer.writeAttribute("action", action(context, component), "action"); if (styleClass != null) { writer.writeAttribute("class", styleClass, "styleClass"); } if (component.getAttributes().get("method") == null) { writer.writeAttribute("method", "post", null); } renderPassThrough(context, component, writer, passThrough); writer.writeText("\n", null); // Add a marker used by our decode() method to note this form is submitted writer.startElement("input", form); writer.writeAttribute("type", "hidden", null); writer.writeAttribute("name", clientId, null); writer.writeAttribute("value", clientId, null); writer.endElement("input"); writer.writeText("\n", null); // Add a transaction token if necessary HttpSession session = (HttpSession) context.getExternalContext().getSession(false); if (session != null) { String token = (String) session.getAttribute(Globals.TRANSACTION_TOKEN_KEY); if (token != null) { writer.startElement("input", form); writer.writeAttribute("type", "hidden", null); writer.writeAttribute ("name", "org.apache.struts.taglib.html.TOKEN", null); writer.writeAttribute("value", token, null); writer.endElement("input"); writer.writeText("\n", null); } } // Create an instance of the form bean if necessary if (component instanceof FormComponent) { ((FormComponent) component).createActionForm(context); } } /** *

    Render the ending of an HTML <form> * control.

    * * @param context FacesContext for the request we are processing * @param component UIComponent to be rendered * * @exception IOException if an input/output error occurs while rendering * @exception NullPointerException if context * or component is null */ public void encodeEnd(FacesContext context, UIComponent component) throws IOException { if ((context == null) || (component == null)) { throw new NullPointerException(); } String clientId = component.getClientId(context); if (log.isDebugEnabled()) { log.debug("encodeEnd(" + clientId + ")"); } ResponseWriter writer = context.getResponseWriter(); // Render the hidden variable our decode() method uses to detect submits writer.startElement("input", component); writer.writeAttribute("type", "hidden", null); writer.writeAttribute("name", component.getClientId(context), null); writer.writeAttribute("value", component.getClientId(context), null); writer.endElement("input"); writer.write("\n"); // Write our state information (if necessary) context.getApplication().getViewHandler().writeState(context); // Render the ending of this form writer.endElement("form"); writer.writeText("\n", null); // Render focus JavaScript if requested if (!(component instanceof FormComponent)) { return; } String focus = (String) component.getAttributes().get("focus"); if (focus == null) { return; } String focusIndex = (String) component.getAttributes().get("focusIndex"); writer.writeText("\n", null); FormComponent form = (FormComponent) component; writer.startElement("script", form); writer.writeAttribute("type", "text/javascript", null); if (!isXhtml(component)) { writer.writeAttribute("language", "JavaScript", null); } writer.writeText("\n", null); if (!isXhtml(component)) { writer.write("\n"); } writer.endElement("script"); writer.writeText("\n", null); } // ------------------------------------------------------- Protected Methods /** *

    Calculate and return the value to be specifed for the * action attribute on the <form> * element to be rendered.

    * * @param context FacesContext for the current request * @param component Component being processed */ protected String action(FacesContext context, UIComponent component) { String actionURL = context.getApplication().getViewHandler(). getActionURL(context, context.getViewRoot().getViewId()); if (log.isTraceEnabled()) { log.trace("getActionURL(" + context.getViewRoot().getViewId() + ") --> " + actionURL); } return (context.getExternalContext().encodeActionURL(actionURL)); } /** *

    Return true if we should render as XHTML.

    * * @param component The component we are rendering */ protected boolean isXhtml(UIComponent component) { return (false); // FIXME -- check up the hierarchy } } ././@LongLink0000644000175000017500000000016610423140531011320 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/renderer/HtmlRenderer.javalibstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/renderer/0000644000175000017500000001340610404045232034114 0ustar arnaudarnaud00000000000000/* * Copyright 2002-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.faces.renderer; import java.io.IOException; import java.util.Locale; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.context.ResponseWriter; import javax.servlet.http.HttpSession; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.Globals; /** *

    Renderer implementation for the html tag * from the Struts-Faces Integration Library.

    * * @version $Rev: 54934 $ $Date: 2004-10-16 18:07:50 +0100 (Sat, 16 Oct 2004) $ */ public class HtmlRenderer extends AbstractRenderer { // -------------------------------------------------------- Static Variables /** *

    The Log instance for this class.

    */ private static Log log = LogFactory.getLog(HtmlRenderer.class); // ---------------------------------------------------------- Public Methods /** *

    Render the beginning html tag.

    * * @param context FacesContext for the current request * @param component UIComponent to be rendered * * @exception IOException if an input/output error occurs while rendering * @exception NullPointerException if context * or component is null */ public void encodeBegin(FacesContext context, UIComponent component) throws IOException { if ((context == null) || (component == null)) { throw new NullPointerException(); } Locale currentLocale = getCurrentLocale(context, component); String lang = currentLocale.getLanguage(); boolean validLanguage = ((lang != null) && (lang.length() > 0)); ResponseWriter writer = context.getResponseWriter(); writer.startElement("html", component); if (isXhtml(component)) { // FIXME -- page scope attribute Globals.XHTML_KEY to "true"? writer.writeAttribute("xmlns", "http://www.w3.org/1999/xhtml", null); } if ((isLocale(component) || isXhtml(component)) && validLanguage) { writer.writeAttribute("lang", lang, null); } if (isXhtml(component) && validLanguage) { writer.writeAttribute("xml:lang", lang, null); } writer.writeText("\n", null); } /** *

    Render the end of the html element.

    * * @param context FacesContext for the request we are processing * @param component UIComponent to be rendered * * @exception IOException if an input/output error occurs while rendering * @exception NullPointerException if context * or component is null */ public void encodeEnd(FacesContext context, UIComponent component) throws IOException { if ((context == null) || (component == null)) { throw new NullPointerException(); } ResponseWriter writer = context.getResponseWriter(); writer.endElement("html"); } // ------------------------------------------------------ Protected Methods /** *

    Return the current Locale for this request, creating a * new one if necessary.

    * * @param context FacesContext for this request * @param component UIComponent we are rendering */ protected Locale getCurrentLocale (FacesContext context, UIComponent component) { // If locale support not requested, just extract one from the request if (!isLocale(component)) { return (context.getExternalContext().getRequestLocale()); } // Create a new session if necessary HttpSession session = (HttpSession) context.getExternalContext().getSession(true); // Return current locale or a new one that is created Locale current = (Locale) session.getAttribute(Globals.LOCALE_KEY); if (current != null) { return (current); } current = context.getExternalContext().getRequestLocale(); session.setAttribute(Globals.LOCALE_KEY, current); return (current); } /** *

    Return the state of the locale attribute.

    * * @param component Component to process */ protected boolean isLocale(UIComponent component) { Boolean locale = (Boolean) component.getAttributes().get("locale"); if (locale != null) { return locale.booleanValue(); } else { return (false); } } /** *

    Return the state of the xhtml attribute.

    * * @param component Component to process */ protected boolean isXhtml(UIComponent component) { Boolean xhtml = (Boolean) component.getAttributes().get("xhtml"); if (xhtml != null) { return xhtml.booleanValue(); } else { return (false); } } } ././@LongLink0000644000175000017500000000017110423140531011314 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/renderer/MessageRenderer.javalibstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/renderer/0000644000175000017500000001045310404045206034114 0ustar arnaudarnaud00000000000000/* * Copyright 2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.faces.renderer; import java.util.ArrayList; import java.util.Iterator; import javax.faces.component.UIComponent; import javax.faces.component.UIParameter; import javax.faces.component.ValueHolder; import javax.faces.context.FacesContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.Globals; import org.apache.struts.util.MessageResources; import org.apache.struts.util.ResponseUtils; /** *

    Renderer implementation for the message tag * from the Struts-Faces Integration Library.

    * * @version $Rev: 54934 $ $Date: 2004-10-16 18:07:50 +0100 (Sat, 16 Oct 2004) $ */ public class MessageRenderer extends WriteRenderer { // -------------------------------------------------------- Static Variables /** *

    The Log instance for this class.

    */ private static Log log = LogFactory.getLog(MessageRenderer.class); // ---------------------------------------------------------- Public Methods // ------------------------------------------------------- Protected Methods /** *

    Return the message format String to be processed for this message. *

    * * @param context FacesContext for the response we are creating * @param component Component to be rendered * * @exception IllegalArgumentException if no MessageResources bundle * can be found * @exception IllegalArgumentException if no message key can be found */ protected String getText(FacesContext context, UIComponent component) { // Look up the MessageResources bundle to be used String bundle = (String) component.getAttributes().get("bundle"); if (bundle == null) { bundle = Globals.MESSAGES_KEY; } MessageResources resources = (MessageResources) context.getExternalContext().getApplicationMap().get(bundle); if (resources == null) { // FIXME - i18n throw new IllegalArgumentException("MessageResources bundle " + bundle + " not found"); } // Look up the message key to be used Object value = component.getAttributes().get("key"); if (value == null) { value = ((ValueHolder) component).getValue(); } if (value == null) { // FIXME - i18n throw new NullPointerException("Component '" + component.getClientId(context) + "' has no current value"); } String key = value.toString(); // Build the substitution arguments list ArrayList list = new ArrayList(); Iterator kids = component.getChildren().iterator(); while (kids.hasNext()) { UIComponent kid = (UIComponent) kids.next(); if (!(kid instanceof UIParameter)) { continue; } list.add(((UIParameter) kid).getValue()); } Object args[] = (Object[]) list.toArray(new Object[list.size()]); // Look up the requested message String text = resources.getMessage(context.getViewRoot().getLocale(), key, args); Boolean filter = (Boolean) component.getAttributes().get("filter"); if (filter == null) { filter = Boolean.FALSE; } if (filter.booleanValue()) { return (ResponseUtils.filter(text)); } else { return (text); } } } ././@LongLink0000644000175000017500000000017410423140531011317 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/renderer/StylesheetRenderer.javalibstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/renderer/0000644000175000017500000000554610404045210034116 0ustar arnaudarnaud00000000000000/* * Copyright 2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.faces.renderer; import java.io.IOException; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.context.ResponseWriter; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** *

    Renderer implementation for the stylesheet tag * from the Struts-Faces Integration Library.

    * * @version $Rev: 54934 $ $Date: 2004-10-16 18:07:50 +0100 (Sat, 16 Oct 2004) $ */ public class StylesheetRenderer extends AbstractRenderer { // -------------------------------------------------------- Static Variables /** *

    The Log instance for this class.

    */ private static Log log = LogFactory.getLog(StylesheetRenderer.class); // ---------------------------------------------------------- Public Methods /** *

    Render a relative HTML <link> element for a * text/css stylesheet at the specified context-relative * path.

    * * @param context FacesContext for the request we are processing * @param component UIComponent to be rendered * * @exception IOException if an input/output error occurs while rendering * @exception NullPointerException if context * or component is null */ public void encodeEnd(FacesContext context, UIComponent component) throws IOException { if ((context == null) || (component == null)) { throw new NullPointerException(); } ResponseWriter writer = context.getResponseWriter(); writer.startElement("link", component); writer.writeAttribute("rel", "stylesheet", null); writer.writeAttribute("type", "text/css", null); writer.writeURIAttribute ("href", context.getExternalContext().getRequestContextPath() + (String) component.getAttributes().get("path"), "path"); writer.endElement("link"); writer.writeText("\n", null); } // ------------------------------------------------------- Protected Methods } ././@LongLink0000644000175000017500000000016710423140531011321 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/renderer/WriteRenderer.javalibstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/renderer/0000644000175000017500000001112610404045234034113 0ustar arnaudarnaud00000000000000/* * Copyright 2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.faces.renderer; import java.io.IOException; import javax.faces.component.UIComponent; import javax.faces.component.UIViewRoot; import javax.faces.component.ValueHolder; import javax.faces.context.FacesContext; import javax.faces.context.ResponseWriter; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.util.ResponseUtils; /** *

    Renderer implementation for the write tag * from the Struts-Faces Integration Library.

    * * @version $Rev: 55303 $ $Date: 2004-10-22 03:56:53 +0100 (Fri, 22 Oct 2004) $ */ public class WriteRenderer extends AbstractRenderer { // -------------------------------------------------------- Static Variables /** *

    The Log instance for this class.

    */ private static Log log = LogFactory.getLog(WriteRenderer.class); // ---------------------------------------------------------- Public Methods /** *

    Encode the specified text to our response.

    * * @param context FacesContext for the response we are creating * @param component Component to be rendered * * @exception IOException if an input/output error occurs * @exception NullPointerException if context * or component is null */ public void encodeEnd(FacesContext context, UIComponent component) throws IOException { if ((context == null) || (component == null)) { throw new NullPointerException(); } ResponseWriter writer = context.getResponseWriter(); String id = component.getId(); if ((id != null) && id.startsWith(UIViewRoot.UNIQUE_ID_PREFIX)) { id = null; } String style = (String) component.getAttributes().get("style"); String styleClass = (String) component.getAttributes().get("styleClass"); if (log.isTraceEnabled()) { log.trace("id='" + id + "', style='" + style + "', styleClass='" + styleClass + "'"); } if ((id != null) || (style != null) || (styleClass != null)) { writer.startElement("span", component); if (id != null) { writer.writeAttribute("id", component.getClientId(context), "id"); } if (style != null) { writer.writeAttribute("style", style, "style"); } if (styleClass != null) { writer.writeAttribute("class", styleClass, "styleClass"); } writer.writeText("", null); } String text = getText(context, component); if (log.isTraceEnabled()) { log.trace("encodeEnd(" + component.getClientId(context) + "," + text + ")"); } writer.write(text); if ((id != null) || (style != null) || (styleClass != null)) { writer.endElement("span"); } } // ------------------------------------------------------- Protected Methods /** *

    Return the text to be rendered for this component, optionally * filtered if requested.

    * * @param context FacesContext for the response we are creating * @param component Component to be rendered */ protected String getText(FacesContext context, UIComponent component) { String text = getAsString(context, component, ((ValueHolder) component).getValue()); Boolean filter = (Boolean) component.getAttributes().get("filter"); if (filter == null) { filter = Boolean.FALSE; } if (filter.booleanValue()) { return (ResponseUtils.filter(text)); } else { return (text); } } } libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/taglib/0000755000175000017500000000000010423130300033532 5ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000017010423140531011313 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/taglib/AbstractFacesTag.javalibstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/taglib/Ab0000644000175000017500000001517510404045212034016 0ustar arnaudarnaud00000000000000/* * Copyright 2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.faces.taglib; import javax.faces.component.UIComponent; import javax.faces.el.ValueBinding; import javax.faces.webapp.UIComponentTag; /** *

    Abstract base class for custom component tags for the * Struts-Faces Integration Library.

    * * * @version $Rev: 54934 $ $Date: 2004-10-16 18:07:50 +0100 (Sat, 16 Oct 2004) $ */ public abstract class AbstractFacesTag extends UIComponentTag { // ---------------------------------------------------------- Tag Attributes /** *

    The servlet context attribute under which our * MessageResources bundle is stored.

    */ protected String bundle = null; public void setBundle(String bundle) { this.bundle = bundle; } /** *

    The CSS style(s) used to render this component.

    */ protected String style = null; public void setStyle(String style) { this.style = style; } /** *

    The CSS style class(es) used to render this component.

    */ protected String styleClass = null; public void setStyleClass(String styleClass) { this.styleClass = styleClass; } /** *

    The literal value to be rendered.

    */ protected String value = null; public void setValue(String value) { this.value = value; } // ---------------------------------------------------------- Public Methods /** *

    Return the component type of the component to be created for * this tag.

    */ public abstract String getComponentType(); /** *

    Return the rendererType to be used for rendering * our component.

    */ public abstract String getRendererType(); /** *

    Release any variables allocated during use of this tag instance.

    */ public void release() { super.release(); this.bundle = null; this.style = null; this.styleClass = null; this.value = null; } // -------------------------------------------------- UIComponentTag Methods /** *

    Override attributes set on this tag instance.

    * * @param component Component whose attributes should be overridden */ protected void setProperties(UIComponent component) { super.setProperties(component); setStringAttribute(component, "bundle", bundle); setStringAttribute(component, "style", style); setStringAttribute(component, "styleClass", styleClass); setStringAttribute(component, "value", value); } // ------------------------------------------------------- Protected Methods /** *

    If the specified attribute value is not null * use it to either store a value binding expression for the * specified attribute name, or store it as the literal value * of the attribute.

    * * @param component UIComponent whose attribute * is to be set * @param name Attribute name * @param value Attribute value (or null) * * @exception NumberFormatException if the value does not * contain a parsable integer * @exception ReferenceSyntaxException if the expression has * invalid syntax */ protected void setBooleanAttribute(UIComponent component, String name, String value) { if (value == null) { return; } if (isValueReference(value)) { ValueBinding vb = getFacesContext().getApplication().createValueBinding(value); component.setValueBinding(name, vb); } else { component.getAttributes().put(name, Boolean.valueOf(value)); } } /** *

    If the specified attribute value is not null * use it to either store a value binding expression for the * specified attribute name, or store it as the literal value * of the attribute.

    * * @param component UIComponent whose attribute * is to be set * @param name Attribute name * @param value Attribute value (or null) * * @exception NumberFormatException if the value does not * contain a parsable integer * @exception ReferenceSyntaxException if the expression has * invalid syntax */ protected void setIntegerAttribute(UIComponent component, String name, String value) { if (value == null) { return; } if (isValueReference(value)) { ValueBinding vb = getFacesContext().getApplication().createValueBinding(value); component.setValueBinding(name, vb); } else { component.getAttributes().put(name, Integer.valueOf(value)); } } /** *

    If the specified attribute value is not null * use it to either store a value binding expression for the * specified attribute name, or store it as the literal value * of the attribute.

    * * @param component UIComponent whose attribute * is to be set * @param name Attribute name * @param value Attribute value (or null) * * @exception ReferenceSyntaxException if the expression has * invalid syntax */ protected void setStringAttribute(UIComponent component, String name, String value) { if (value == null) { return; } if (isValueReference(value)) { ValueBinding vb = getFacesContext().getApplication().createValueBinding(value); component.setValueBinding(name, vb); } else { component.getAttributes().put(name, value); } } } ././@LongLink0000644000175000017500000000015710423140531011320 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/taglib/BaseTag.javalibstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/taglib/Ba0000644000175000017500000000453510404045216034020 0ustar arnaudarnaud00000000000000/* * Copyright 2002-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.faces.taglib; import javax.faces.component.UIComponent; /** *

    Render an HTML <base> element for * the Struts-Faces Integration Library.

    * * * @version $Rev: 54934 $ $Date: 2004-10-16 18:07:50 +0100 (Sat, 16 Oct 2004) $ */ public class BaseTag extends AbstractFacesTag { // ---------------------------------------------------------- Tag Attributes /** *

    The target frame for this base URL reference.

    */ private String target = null; public void setTarget(String target) { this.target = target; } // ---------------------------------------------------------- Public Methods /** *

    Return the type of component to be created for this tag.

    */ public String getComponentType() { return ("org.apache.struts.faces.Base"); } /** *

    Return the rendererType to be used for rendering * our component.

    */ public String getRendererType() { return ("org.apache.struts.faces.Base"); } /** *

    Release resources allocated to this tag instance.

    */ public void release() { super.release(); this.target = null; } // ------------------------------------------------------- Protected Methods /** *

    Override attributes set on this tag instance.

    * * @param component Component whose attributes should be overridden */ protected void setProperties(UIComponent component) { super.setProperties(component); setStringAttribute(component, "target", target); } } ././@LongLink0000644000175000017500000000016610423140531011320 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/taglib/CommandLinkTag.javalibstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/taglib/Co0000644000175000017500000002157410404045214034037 0ustar arnaudarnaud00000000000000/* * Copyright 2002-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.faces.taglib; import javax.faces.component.ActionSource; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.el.MethodBinding; /** *

    Render a CommandLinkComponent inside a * Struts-Faces FormComponent.

    * * @version $Rev: 54934 $ $Date: 2004-10-16 18:07:50 +0100 (Sat, 16 Oct 2004) $ */ public class CommandLinkTag extends AbstractFacesTag { // ------------------------------------------------------ Instance Variables private String accesskey = null; private String action = null; private String charset = null; private String dir = null; private String hreflang = null; private String immediate = null; private String lang = null; private String onblur = null; private String onclick = null; private String ondblclick = null; private String onfocus = null; private String onkeydown = null; private String onkeypress = null; private String onkeyup = null; private String onmousedown = null; private String onmousemove = null; private String onmouseout = null; private String onmouseover = null; private String onmouseup = null; private String rel = null; private String rev = null; private String style = null; private String styleClass = null; private String tabindex = null; private String target = null; private String title = null; private String type = null; // ---------------------------------------------------------- Tag Attributes public void setAccesskey(String accesskey) { this.accesskey = accesskey; } public void setAction(String action) { this.action = action; } public void setCharset(String charset) { this.charset = charset; } public void setDir(String dir) { this.dir = dir; } public void setHreflang(String hreflang) { this.hreflang = hreflang; } public void setImmediate(String immediate) { this.immediate = immediate; } public void setLang(String lang) { this.lang = lang; } public void setOnblur(String onblur) { this.onblur = onblur; } public void setOnclick(String onclick) { this.onclick = onclick; } public void setOndblclick(String ondblclick) { this.ondblclick = ondblclick; } public void setOnfocus(String onfocus) { this.onfocus = onfocus; } public void setOnkeydown(String onkeydown) { this.onkeydown = onkeydown; } public void setOnkeypress(String onkeypress) { this.onkeypress = onkeypress; } public void setOnkeyup(String onkeyup) { this.onkeyup = onkeyup; } public void setOnmousedown(String onmousedown) { this.onmousedown = onmousedown; } public void setOnmousemove(String onmousemove) { this.onmousemove = onmousemove; } public void setOnmouseout(String onmouseout) { this.onmouseout = onmouseout; } public void setOnmouseover(String onmouseover) { this.onmouseover = onmouseover; } public void setOnmouseup(String onmouseup) { this.onmouseup = onmouseup; } public void setRel(String rel) { this.rel = rel; } public void setRev(String rev) { this.rev = rev; } public void setStyle(String style) { this.style = style; } public void setStyleClass(String styleClass) { this.styleClass = styleClass; } public void setTabindex(String tabindex) { this.tabindex = tabindex; } public void setTarget(String target) { this.target = target; } public void setTitle(String title) { this.title = title; } public void setType(String type) { this.type = type; } // ------------------------------------------------------------- Tag Methods /** *

    Release any allocated resources.

    */ public void release() { super.release(); accesskey = null; action = null; charset = null; dir = null; hreflang = null; immediate = null; lang = null; onblur = null; onclick = null; ondblclick = null; onfocus = null; onkeydown = null; onkeypress = null; onkeyup = null; onmousedown = null; onmousemove = null; onmouseout = null; onmouseover = null; onmouseup = null; rel = null; rev = null; style = null; styleClass = null; tabindex = null; target = null; title = null; type = null; } // ---------------------------------------------------------- Public Methods /** *

    Return the type of component to be created for this tag.

    */ public String getComponentType() { return ("org.apache.struts.faces.CommandLink"); } /** *

    Return the rendererType to be used for rendering * our component.

    */ public String getRendererType() { return ("org.apache.struts.faces.CommandLink"); } // ------------------------------------------------------- Protected Methods /** *

    Override attributes set on this tag instance.

    * * @param component Component whose attributes should be overridden */ protected void setProperties(UIComponent component) { super.setProperties(component); if (action != null) { if (isValueReference(action)) { MethodBinding mb = FacesContext.getCurrentInstance(). getApplication().createMethodBinding(action, null); ((ActionSource) component).setAction(mb); } else { final String outcome = action; MethodBinding mb = new ConstantMethodBinding(outcome); ((ActionSource) component).setAction(mb); } } setStringAttribute(component, "accesskey", accesskey); setStringAttribute(component, "charset", charset); setStringAttribute(component, "dir", dir); setStringAttribute(component, "hreflang", hreflang); setBooleanAttribute(component, "immediate", immediate); setStringAttribute(component, "lang", lang); setStringAttribute(component, "onblur", onblur); setStringAttribute(component, "onclick", onclick); setStringAttribute(component, "ondblclick", ondblclick); setStringAttribute(component, "onfocus", onfocus); setStringAttribute(component, "onkeydown", onkeydown); setStringAttribute(component, "onkeypress", onkeypress); setStringAttribute(component, "onkeyup", onkeyup); setStringAttribute(component, "onmousedown", onmousedown); setStringAttribute(component, "onmousemove", onmousemove); setStringAttribute(component, "onmouseout", onmouseout); setStringAttribute(component, "onmouseover", onmouseover); setStringAttribute(component, "onmouseup", onmouseup); setStringAttribute(component, "rel", rel); setStringAttribute(component, "rev", rev); setStringAttribute(component, "style", style); setStringAttribute(component, "styleClass", styleClass); setStringAttribute(component, "tabindex", tabindex); setStringAttribute(component, "target", target); setStringAttribute(component, "title", title); setStringAttribute(component, "type", type); } } // Private MethodBinding Implementation To Return A Constant Value class ConstantMethodBinding extends MethodBinding { public ConstantMethodBinding(String outcome) { this.outcome = outcome; } private String outcome = null; public Object invoke(FacesContext context, Object params[]) { return (this.outcome); } public Class getType(FacesContext context) { return (String.class); } } ././@LongLink0000644000175000017500000000016110423140531011313 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/taglib/ErrorsTag.javalibstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/taglib/Er0000644000175000017500000000474610404045224034047 0ustar arnaudarnaud00000000000000/* * Copyright 2002-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.faces.taglib; import javax.faces.component.UIComponent; /** *

    Render a set of validation or business logic error messages, for * the Struts-Faces Integration Library.

    * * * @version $Rev: 54934 $ $Date: 2004-10-16 18:07:50 +0100 (Sat, 16 Oct 2004) $ */ public class ErrorsTag extends AbstractFacesTag { // ---------------------------------------------------------- Tag Attributes /** *

    The property name for which to report errors.

    */ protected String property = null; public void setProperty(String property) { this.property = property; } // ---------------------------------------------------------- Public Methods /** *

    Return the type of component to be created for this tag.

    */ public String getComponentType() { return ("org.apache.struts.faces.Errors"); } /** *

    Return the rendererType to be used for rendering * our component.

    */ public String getRendererType() { return ("org.apache.struts.faces.Errors"); } /** *

    Release any variables allocated during use of this tag instance.

    */ public void release() { super.release(); this.property = null; } // -------------------------------------------------- UIComponentTag Methods /** *

    Override attributes set on this tag instance.

    * * @param component Component whose attributes should be overridden */ protected void setProperties(UIComponent component) { super.setProperties(component); setStringAttribute(component, "property", property); } // ------------------------------------------------------- Protected Methods } ././@LongLink0000644000175000017500000000015710423140531011320 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/taglib/FormTag.javalibstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/taglib/Fo0000644000175000017500000001054510404045246034043 0ustar arnaudarnaud00000000000000/* * Copyright 2002-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.faces.taglib; import javax.faces.component.UIComponent; /** *

    Render an input form that is submitted to a Struts Action, * for the Struts-Faces Integration Library.

    * * @version $Rev: 54934 $ $Date: 2004-10-16 18:07:50 +0100 (Sat, 16 Oct 2004) $ */ public class FormTag extends AbstractFacesTag { // ---------------------------------------------------------- Tag Attributes /** *

    The path of the Struts Action to which * this form should be submitted. This property is analogous to the * formName property on the form tag in the standard * HTML RenderKit.

    */ protected String action = null; public void setAction(String action) { this.action = action; } /** *

    The content encoding type to use.

    */ protected String enctype = null; public void setEnctype(String enctype) { this.enctype = enctype; } /** *

    The name of the field to which focus should be set when this * form is displayed.

    */ protected String focus = null; public void setFocus(String focus) { this.focus = focus; } /** *

    The subscript of the focus field array to receive focus.

    */ protected String focusIndex = null; public void setFocusIndex(String focusIndex) { this.focusIndex = focusIndex; } /** *

    The JavaScript reset event handler.

    */ protected String onreset = null; public void setOnreset(String onreset) { this.onreset = onreset; } /** *

    The JavaScript submit event handler.

    */ protected String onsubmit = null; public void setOnsubmit(String onsubmit) { this.onsubmit = onsubmit; } /** *

    The window target for this submit.

    */ protected String target = null; public void setTarget(String target) { this.target = target; } // ------------------------------------------------------------- Tag Methods /** *

    Release any allocated resources.

    */ public void release() { super.release(); action = null; enctype = null; focus = null; focusIndex = null; onreset = null; onsubmit = null; target = null; } // ---------------------------------------------------------- Public Methods /** *

    Return the type of component to be created for this tag.

    */ public String getComponentType() { return ("org.apache.struts.faces.Form"); } /** *

    Return the rendererType to be used for rendering * our component.

    */ public String getRendererType() { return ("org.apache.struts.faces.Form"); } // ------------------------------------------------------- Protected Methods /** *

    Override attributes set on this tag instance.

    * * @param component Component whose attributes should be overridden */ protected void setProperties(UIComponent component) { super.setProperties(component); setStringAttribute(component, "action", action); setStringAttribute(component, "enctype", enctype); setStringAttribute(component, "focus", focus); setStringAttribute(component, "focusIndex", focusIndex); setStringAttribute(component, "onreset", onreset); setStringAttribute(component, "onsubmit", onsubmit); setStringAttribute(component, "target", target); } } ././@LongLink0000644000175000017500000000015710423140531011320 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/taglib/HtmlTag.javalibstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/taglib/Ht0000644000175000017500000000623510404045212034044 0ustar arnaudarnaud00000000000000/* * Copyright 2002-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.faces.taglib; import javax.faces.component.UIComponent; import javax.servlet.jsp.JspException; import javax.servlet.jsp.PageContext; import org.apache.struts.Globals; /** *

    Render an HTML <html> element for * the Struts-Faces Integration Library.

    * * @version $Rev: 54934 $ $Date: 2004-10-16 18:07:50 +0100 (Sat, 16 Oct 2004) $ */ public class HtmlTag extends AbstractFacesTag { // ---------------------------------------------------------- Tag Attributes /** *

    Set a locale if not set yet.

    */ private String locale = null; public void setLocale(String locale) { this.locale = locale; } /** *

    Render Struts HTML tags as xhtml.

    */ private String xhtml = null; public void setXhtml(String xhtml) { this.xhtml = xhtml; } // ---------------------------------------------------------- Public Methods /** *

    Return the type of component to be created for this tag.

    */ public String getComponentType() { return ("org.apache.struts.faces.Html"); } /** *

    Override doStartTag() method to also set a page * context attribute if xhtml is >true.

    */ public int doStartTag() throws JspException { int result = super.doStartTag(); if (xhtml != null) { pageContext.setAttribute(Globals.XHTML_KEY, "true", PageContext.PAGE_SCOPE); } return (result); } /** *

    Return the rendererType to be used for rendering * our component.

    */ public String getRendererType() { return ("org.apache.struts.faces.Html"); } /** *

    Release resources allocated to this tag instance.

    */ public void release() { super.release(); this.locale = null; this.xhtml = null; } // ------------------------------------------------------- Protected Methods /** *

    Override attributes set on this tag instance.

    * * @param component Component whose attributes should be overridden */ protected void setProperties(UIComponent component) { super.setProperties(component); setBooleanAttribute(component, "locale", locale); setBooleanAttribute(component, "xhtml", xhtml); } } ././@LongLink0000644000175000017500000000017610423140531011321 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/taglib/JavascriptValidatorTag.javalibstruts1.2-java-1.2.9/contrib/struts-faces/core-library/src/java/org/apache/struts/faces/taglib/Ja0000644000175000017500000006771710404045214034041 0ustar arnaudarnaud00000000000000/* * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.faces.taglib; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.webapp.UIComponentTag; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.tagext.BodyTagSupport; import javax.servlet.jsp.tagext.Tag; import org.apache.commons.validator.Field; import org.apache.commons.validator.Form; import org.apache.commons.validator.ValidatorAction; import org.apache.commons.validator.ValidatorResources; import org.apache.commons.validator.ValidatorUtil; import org.apache.commons.validator.Var; import org.apache.struts.Globals; import org.apache.struts.config.ModuleConfig; import org.apache.struts.faces.component.FormComponent; import org.apache.struts.util.MessageResources; import org.apache.struts.util.RequestUtils; import org.apache.struts.validator.Resources; import org.apache.struts.validator.ValidatorPlugIn; /** * Custom tag that generates JavaScript for client side validation based * on the validation rules loaded by the ValidatorPlugIn * defined in the struts-config.xml file. This is based on the code in * the corresponding class of the Struts HTML tag library, modified as needed * to reflect differences in the way JavaServer Faces renders field * identifiers. * * @version $Rev: 55305 $ $Date: 2004-10-22 04:46:28 +0100 (Fri, 22 Oct 2004) $ */ public class JavascriptValidatorTag extends BodyTagSupport { // ----------------------------------------------------------- Properties /** * The servlet context attribute key for our resources. */ protected String bundle = Globals.MESSAGES_KEY; /** * The default locale on our server. * @deprecated This variable is no longer used. */ protected static Locale defaultLocale = Locale.getDefault(); /** * The name of the form that corresponds with the action name * in struts-config.xml. Specifying a form name places a * <script> </script> around the javascript. */ protected String formName = null; /** * The line ending string. */ protected static String lineEnd = System.getProperty("line.separator"); /** * The current page number of a multi-part form. * Only valid when the formName attribute is set. */ protected int page = 0; /** * This will be used as is for the JavaScript validation method name if it has a value. This is * the method name of the main JavaScript method that the form calls to perform validations. */ protected String methodName = null; /** * The static JavaScript methods will only be printed if this is set to "true". */ protected String staticJavascript = "true"; /** * The dynamic JavaScript objects will only be generated if this is set to "true". */ protected String dynamicJavascript = "true"; /** * The src attribute for html script element (used to include an external script * resource). The src attribute is only recognized * when the formName attribute is specified. */ protected String src = null; /** * The JavaScript methods will enclosed with html comments if this is set to "true". */ protected String htmlComment = "true"; /** * Hide JavaScript methods in a CDATA section for XHTML when "true". */ protected String cdata = "true"; private String htmlBeginComment = "\n \n"; /** * Gets the key (form name) that will be used * to retrieve a set of validation rules to be * performed on the bean passed in for validation. */ public String getFormName() { return formName; } /** * Sets the key (form name) that will be used * to retrieve a set of validation rules to be * performed on the bean passed in for validation. * Specifying a form name places a * <script> </script> tag around the javascript. */ public void setFormName(String formName) { this.formName = formName; } /** * Gets the current page number of a multi-part form. * Only field validations with a matching page numer * will be generated that match the current page number. * Only valid when the formName attribute is set. */ public int getPage() { return page; } /** * Sets the current page number of a multi-part form. * Only field validations with a matching page numer * will be generated that match the current page number. * Only valid when the formName attribute is set. */ public void setPage(int page) { this.page = page; } /** * Gets the method name that will be used for the Javascript * validation method name if it has a value. This overrides * the auto-generated method name based on the key (form name) * passed in. */ public String getMethod() { return methodName; } /** * Sets the method name that will be used for the Javascript * validation method name if it has a value. This overrides * the auto-generated method name based on the key (form name) * passed in. */ public void setMethod(String methodName) { this.methodName = methodName; } /** * Gets whether or not to generate the static * JavaScript. If this is set to 'true', which * is the default, the static JavaScript will be generated. */ public String getStaticJavascript() { return staticJavascript; } /** * Sets whether or not to generate the static * JavaScript. If this is set to 'true', which * is the default, the static JavaScript will be generated. */ public void setStaticJavascript(String staticJavascript) { this.staticJavascript = staticJavascript; } /** * Gets whether or not to generate the dynamic * JavaScript. If this is set to 'true', which * is the default, the dynamic JavaScript will be generated. */ public String getDynamicJavascript() { return dynamicJavascript; } /** * Sets whether or not to generate the dynamic * JavaScript. If this is set to 'true', which * is the default, the dynamic JavaScript will be generated. */ public void setDynamicJavascript(String dynamicJavascript) { this.dynamicJavascript = dynamicJavascript; } /** * Gets whether or not to delimit the * JavaScript with html comments. If this is set to 'true', which * is the default, the htmlComment will be surround the JavaScript. */ public String getHtmlComment() { return htmlComment; } /** * Sets whether or not to delimit the * JavaScript with html comments. If this is set to 'true', which * is the default, the htmlComment will be surround the JavaScript. */ public void setHtmlComment(String htmlComment) { this.htmlComment = htmlComment; } /** * Gets the src attribute's value when defining * the html script element. */ public String getSrc() { return src; } /** * Sets the src attribute's value when defining * the html script element. The src attribute is only recognized * when the formName attribute is specified. */ public void setSrc(String src) { this.src = src; } /** * Render the JavaScript for to perform validations based on the form name. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { StringBuffer results = new StringBuffer(); ModuleConfig config = RequestUtils.getModuleConfig(pageContext); ValidatorResources resources = (ValidatorResources) pageContext.getAttribute( ValidatorPlugIn.VALIDATOR_KEY + config.getPrefix(), PageContext.APPLICATION_SCOPE); Locale locale = RequestUtils.retrieveUserLocale(this.pageContext, null); Form form = resources.get(locale, formName); if (form != null) { if ("true".equalsIgnoreCase(dynamicJavascript)) { MessageResources messages = (MessageResources) pageContext.getAttribute( bundle + config.getPrefix(), PageContext.APPLICATION_SCOPE); List lActions = new ArrayList(); List lActionMethods = new ArrayList(); // Get List of actions for this Form for (Iterator i = form.getFields().iterator(); i.hasNext();) { Field field = (Field) i.next(); for (Iterator x = field.getDependencies().iterator(); x.hasNext();) { Object o = x.next(); if (o != null && !lActionMethods.contains(o)) { lActionMethods.add(o); } } } // Create list of ValidatorActions based on lActionMethods for (Iterator i = lActionMethods.iterator(); i.hasNext();) { String depends = (String) i.next(); ValidatorAction va = resources.getValidatorAction(depends); // throw nicer NPE for easier debugging if (va == null) { throw new NullPointerException( "Depends string \"" + depends + "\" was not found in validator-rules.xml."); } String javascript = va.getJavascript(); if (javascript != null && javascript.length() > 0) { lActions.add(va); } else { i.remove(); } } Collections.sort(lActions, new Comparator() { public int compare(Object o1, Object o2) { ValidatorAction va1 = (ValidatorAction) o1; ValidatorAction va2 = (ValidatorAction) o2; if ((va1.getDepends() == null || va1.getDepends().length() == 0) && (va2.getDepends() == null || va2.getDepends().length() == 0)) { return 0; } else if ( (va1.getDepends() != null && va1.getDepends().length() > 0) && (va2.getDepends() == null || va2.getDepends().length() == 0)) { return 1; } else if ( (va1.getDepends() == null || va1.getDepends().length() == 0) && (va2.getDepends() != null && va2.getDepends().length() > 0)) { return -1; } else { return va1.getDependencies().size() - va2.getDependencies().size(); } } }); String methods = null; for (Iterator i = lActions.iterator(); i.hasNext();) { ValidatorAction va = (ValidatorAction) i.next(); if (methods == null) { methods = va.getMethod() + "(form)"; } else { methods += " && " + va.getMethod() + "(form)"; } } results.append(getJavascriptBegin(methods)); for (Iterator i = lActions.iterator(); i.hasNext();) { ValidatorAction va = (ValidatorAction) i.next(); String jscriptVar = null; String functionName = null; if (va.getJsFunctionName() != null && va.getJsFunctionName().length() > 0) { functionName = va.getJsFunctionName(); } else { functionName = va.getName(); } if (isStruts11()) { results.append(" function " + functionName + " () { \n"); } else { results.append(" function " + formName + "_" + functionName + " () { \n"); } for (Iterator x = form.getFields().iterator(); x.hasNext();) { Field field = (Field) x.next(); // Skip indexed fields for now until there is a good way to handle // error messages (and the length of the list (could retrieve from scope?)) if (field.isIndexed() || field.getPage() != page || !field.isDependency(va.getName())) { continue; } String message = Resources.getMessage(messages, locale, va, field); message = (message != null) ? message : ""; jscriptVar = this.getNextVar(jscriptVar); results.append( " this." + jscriptVar + " = new Array(\"" + getFormClientId() + ":" + field.getKey() + "\", \"" + message + "\", "); results.append("new Function (\"varName\", \""); Map vars = field.getVars(); // Loop through the field's variables. Iterator varsIterator = vars.keySet().iterator(); while (varsIterator.hasNext()) { String varName = (String) varsIterator.next(); Var var = (Var) vars.get(varName); String varValue = var.getValue(); String jsType = var.getJsType(); // skip requiredif variables field, fieldIndexed, fieldTest, fieldValue if (varName.startsWith("field")) { continue; } if (Var.JSTYPE_INT.equalsIgnoreCase(jsType)) { results.append( "this." + varName + "=" + ValidatorUtil.replace( varValue, "\\", "\\\\") + "; "); } else if (Var.JSTYPE_REGEXP.equalsIgnoreCase(jsType)) { results.append( "this." + varName + "=/" + ValidatorUtil.replace( varValue, "\\", "\\\\") + "/; "); } else if (Var.JSTYPE_STRING.equalsIgnoreCase(jsType)) { results.append( "this." + varName + "='" + ValidatorUtil.replace( varValue, "\\", "\\\\") + "'; "); // So everyone using the latest format doesn't need to change their xml files immediately. } else if ("mask".equalsIgnoreCase(varName)) { results.append( "this." + varName + "=/" + ValidatorUtil.replace( varValue, "\\", "\\\\") + "/; "); } else { results.append( "this." + varName + "='" + ValidatorUtil.replace( varValue, "\\", "\\\\") + "'; "); } } results.append(" return this[varName];\"));\n"); } results.append(" } \n\n"); } } else if ("true".equalsIgnoreCase(staticJavascript)) { results.append(this.getStartElement()); if ("true".equalsIgnoreCase(htmlComment)) { results.append(htmlBeginComment); } } } if ("true".equalsIgnoreCase(staticJavascript)) { results.append(getJavascriptStaticMethods(resources)); } if (form != null && ("true".equalsIgnoreCase(dynamicJavascript) || "true".equalsIgnoreCase(staticJavascript))) { results.append(getJavascriptEnd()); } JspWriter writer = pageContext.getOut(); try { writer.print(results.toString()); } catch (IOException e) { throw new JspException(e.getMessage()); } return (EVAL_BODY_TAG); } /** * Release any acquired resources. */ public void release() { super.release(); bundle = Globals.MESSAGES_KEY; formName = null; page = 0; methodName = null; staticJavascript = "true"; dynamicJavascript = "true"; htmlComment = "true"; cdata = "true"; src = null; formClientId = null; } /** * Returns the opening script element and some initial javascript. */ protected String getJavascriptBegin(String methods) { StringBuffer sb = new StringBuffer(); String name = formName.substring(0, 1).toUpperCase() + formName.substring(1, formName.length()); sb.append(this.getStartElement()); if (this.isXhtml() && "true".equalsIgnoreCase(this.cdata)) { sb.append(" 0) { sb.append(javascript + "\n"); } } } return sb.toString(); } /** * Returns the closing script element. */ protected String getJavascriptEnd() { StringBuffer sb = new StringBuffer(); sb.append("\n"); if (!this.isXhtml() && "true".equals(htmlComment)){ sb.append(htmlEndComment); } if (this.isXhtml() && "true".equalsIgnoreCase(this.cdata)) { sb.append("]]>\r\n"); } sb.append("\n\n"); return sb.toString(); } /** * The value null will be returned at the end of the sequence. *     ex: "zz" will return null */ private String getNextVar(String input) { if (input == null) { return "aa"; } input = input.toLowerCase(); for (int i = input.length(); i > 0; i--) { int pos = i - 1; char c = input.charAt(pos); c++; if (c <= 'z') { if (i == 0) { return c + input.substring(pos, input.length()); } else if (i == input.length()) { return input.substring(0, pos) + c; } else { return input.substring(0, pos) + c + input.substring(pos, input.length() - 1); } } else { input = replaceChar(input, pos, 'a'); } } return null; } /** * Replaces a single character in a String */ private String replaceChar(String input, int pos, char c) { if (pos == 0) { return c + input.substring(pos, input.length()); } else if (pos == input.length()) { return input.substring(0, pos) + c; } else { return input.substring(0, pos) + c + input.substring(pos, input.length() - 1); } } /** * Constructs the beginning <script> element depending on xhtml status. */ private String getStartElement() { StringBuffer start = new StringBuffer(" libstruts1.2-java-1.2.9/contrib/struts-faces/example1-webapp/src/web/mainMenu.jsp0000644000175000017500000000417610404045234030376 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %> <%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %> <%@ taglib prefix="s" uri="http://struts.apache.org/tags-faces" %> <s:message key="mainMenu.title"/> libstruts1.2-java-1.2.9/contrib/struts-faces/example1-webapp/src/web/registration.jsp0000644000175000017500000002275110404045230031332 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %> <%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %> <%@ taglib prefix="s" uri="http://struts.apache.org/tags-faces" %> <c:choose> <c:when test="${registrationForm.action == 'Create'}"> <s:message key="registration.title.create"/> </c:when> <c:when test="${registrationForm.action == 'Edit'}"> <s:message key="registration.title.edit"/> </c:when> <c:otherwise> UNKNOWN ACTION </c:otherwise> </c:choose> <%-- Grid header element --%> <%-- Grid data elements --%> <%-- --%> libstruts1.2-java-1.2.9/contrib/struts-faces/example1-webapp/src/web/staticJavascript.jsp0000644000175000017500000000165410404045244032142 0ustar arnaudarnaud00000000000000<%@ page language="java" %> <%-- set document type to Javascript (addresses a bug in Netscape according to a web resource --%> <%@ page contentType="application/x-javascript" %> <%@ taglib prefix="s" uri="http://struts.apache.org/tags-faces" %> <%-- Copyright 2002,2004 The Apache Software Foundation. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --%> libstruts1.2-java-1.2.9/contrib/struts-faces/example1-webapp/src/web/struts-power.gif0000644000175000017500000000340610404045234031267 0ustar arnaudarnaud00000000000000GIF89a_%çÿÿÿÿÿÌÿÿ™ÿÿfÿÿ3ÿÿÿÌÿÿÌÌÿÌ™ÿÌfÿÌ3ÿÌÿ™ÿÿ™Ìÿ™™ÿ™fÿ™3ÿ™ÿfÿÿfÌÿf™ÿffÿf3ÿfÿ3ÿÿ3Ìÿ3™ÿ3fÿ33ÿ3ÿÿÿÌÿ™ÿfÿ3ÿÌÿÿÌÿÌÌÿ™ÌÿfÌÿ3ÌÿÌÌÿÌÌÌÌÌ™ÌÌfÌÌ3ÌÌÌ™ÿÌ™ÌÌ™™Ì™fÌ™3Ì™ÌfÿÌfÌÌf™ÌffÌf3ÌfÌ3ÿÌ3ÌÌ3™Ì3fÌ33Ì3ÌÿÌÌÌ™ÌfÌ3Ì™ÿÿ™ÿÌ™ÿ™™ÿf™ÿ3™ÿ™Ìÿ™Ì̙̙™Ìf™Ì3™Ì™™ÿ™™Ì™™™™™f™™3™™™fÿ™fÌ™f™™ff™f3™f™3ÿ™3Ì™3™™3f™33™3™ÿ™Ì™™™f™3™fÿÿfÿÌfÿ™fÿffÿ3fÿfÌÿfÌÌfÌ™fÌffÌ3fÌf™ÿf™Ìf™™f™ff™3f™ffÿffÌff™fffff3fff3ÿf3Ìf3™f3ff33f3fÿfÌf™fff3f3ÿÿ3ÿÌ3ÿ™3ÿf3ÿ33ÿ3Ìÿ3ÌÌ3Ì™3Ìf3Ì33Ì3™ÿ3™Ì3™™3™f3™33™3fÿ3fÌ3f™3ff3f33f33ÿ33Ì33™33f333333ÿ3Ì3™3f333ÿÿÿÌÿ™ÿfÿ3ÿÌÿÌÌÌ™ÌfÌ3Ì™ÿ™Ì™™™f™3™fÿfÌf™fff3f3ÿ3Ì3™3f333ÿÌ™f3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!þMade with GIMP,_%þH° Áƒ*\Ȱ¡Ã‡#"|hÅÁzªH\ñ¤ GCn|Fò‰ÁU$I¬BŠ$©–«LŠœÉðIɃ)CÚ|fIš@V!ç3=!cÜÜiÒ€ž–Ï*¨¢ U!ÍzÀ ŸQI¤øì‰žõ $%3-J’eÊ“lÕVOVUV•:p'V’sî´xö™Àd$ÅâõšØæ*+ ¾ ü¬J ”ä× ÉU`+°’X h‚JË^~FŠñ³[ª\Ø\q}ªÔ,zgŸv ôÙz'l¦F[óVNrk2ƒ;?ëQì@뼫X±•¶i¸pUþr6i24øê?¤.ê9êðôgW •õM‚…Æ_ŠíΪ•â^A´@~%rí)ç“|ØVÙ3@G€}‡Tpp}×YaV´Â_h‰˜l* µ“x÷”S Í $àQ}ÕœX=HÖc儞a‘ð\HXßpA8ämÉ=Òn&–HWVYDàoz´%UV~udpVô•V] „‘Vm‘PÕ cêaeŽy¹iÐKAÕiçCô ù¦B=ñ„w ÑN -TÅ’p‘2 Œ&$à†•I¥X5£”fvÔhCÕ9$„=’ô¥ nª ¥ÒÄY†9¶ø^zþ¦"ZP—ÙjgQÂ+†©Î¦>ÃBžéo!PBUy¤f™•Õ‘ÅöJ`VŠ¢i{àíii¿‚·K‰ Â&Uq)”SMªÜháŠ+¤ñº:_¸¤xj½Ý…[Et€…»[òzX¯J¤&ù¯Z¢n¼ÉÄѯ#úÉ& µš “øUÆÅ0Oÿ>aQ­°…ªå«ñÆÄ­®}Wé¥Ê i°1ôëËÏ:JúÂË/»¼Y+Pj.å#Ò¬I Þ»Ûº/IÉÔ÷[Ð^i ž–;[ž~€$ 0»«8µÔiÅ+'Cn):Ë«5œ«ÙQôðܯ¥àÈPÙºv]PÙDD8Ac»(7'éw°+»Ö«àN}Pâ†Û÷àVª°wÒ™ã=5¨Eü¥æ•Sšºè”O…·#:A€wó¯)Ë^îA€·0Ô¥c*œâ½"=§ãq‡çsÌD"ÀÛ–¢þ+»ÆEk»îQùIÕ¥ÎPP­òÚ˜dG¹ËXï’1½ ~xH_Õѧ"ú«o)&ñ;ì@€ŸïÈfc\ðÀëä~ÊËU¾ô-«diyÿÑG8R?q$^áG,æ0þIbfQàwEBA;libstruts1.2-java-1.2.9/contrib/struts-faces/example1-webapp/src/web/stylesheet.css0000644000175000017500000001006310404045204030777 0ustar arnaudarnaud00000000000000/* * * Copyright 2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* ========== Global Styles ================================================= */ * { color: #000000; font-family: Arial, Helvetica, sans-serif; font-size: 16px; margin: 0px; padding: 0px; text-align: left; } /* ========== Simple Styles ================================================= */ .cancel { background-color: #0000ff; border: 1px solid #ffffff; color: #ffffff; font-weight: bold; margin: 2px; padding: 2px; text-align: center; } .center { text-align: center; } .field { background-color: #9999ff; border: 1px solid #000000; color: #000000; font-weight: normal; margin: 2px; padding: 2px; } .form { } .label { } .left { text-align: left; } .link { } .message { color: red; font-style: italic; } .password { background-color: #9999ff; border: 1px solid #000000; color: #000000; font-weight: normal; margin: 2px; padding: 2px; } .reset { background-color: #0000ff; border: 1px solid #ffffff; color: #ffffff; font-weight: bold; margin: 2px; padding: 2px; text-align: center; } .right { text-align: right; } .submit { background-color: #0000ff; border: 1px solid #ffffff; color: #ffffff; font-weight: bold; margin: 2px; padding: 2px; text-align: center; } .value { } .wide { width: 100%; } /* ========== Grid Styles =================================================== */ .grid { background-color: #ccccff; color: #0000ff; text-align: center; } .grid.column0 { text-align: right; } .grid.column1 { text-align: left; } .grid.column2 { text-align: left; } .grid.footer { background-color: #6666ff; color: #000000; font-size: 12px; text-align: center; } .grid.header { background-color: #6666ff; color: #000000; font-weight: bold; text-align: center; } .grid.row.even { } .grid.row.odd { } /* ========== List Styles =================================================== */ .list { background-color: #ccccff; color: #0000ff; text-align: center; } .list.column { border-collapse: collapse; border-left: 1px solid black; border-right: 1px solid black; } .list.footer { background-color: #6666ff; color: #000000; font-size: 12px; text-align: center; } .list.header { background-color: #6666ff; color: #000000; font-weight: bold; text-align: center; } .list.row.even { background-color: #eeeeff; } .list.row.odd { } libstruts1.2-java-1.2.9/contrib/struts-faces/example1-webapp/src/web/subscription.jsp0000644000175000017500000001501710404045214031343 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="a" uri="/WEB-INF/app.tld" %> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %> <%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %> <%@ taglib prefix="s" uri="http://struts.apache.org/tags-faces" %> <%-- FIXME --%> <c:choose> <c:when test="${subscriptionForm.action == 'Create'}"> <s:message id="titleCreate" key="subscription.title.create"/> </c:when> <c:when test="${subscriptionForm.action == 'Delete'}"> <s:message id="titleDelete" key="subscription.title.delete"/> </c:when> <c:when test="${subscriptionForm.action == 'Edit'}"> <s:message id="titleEdit" key="subscription.title.edit"/> </c:when> <c:otherwise> UNKNOWN ACTION </c:otherwise> </c:choose> <%-- Grid header element --%> <%-- Grid data elements --%> libstruts1.2-java-1.2.9/contrib/struts-faces/example1-webapp/src/web/tour.htm0000644000175000017500000013110210404045234027600 0ustar arnaudarnaud00000000000000 A Walking Tour of the Struts Example Application

    A Walking Tour of the Struts Example Application

    This article is meant to introduce a new user to Struts by "walking through" the example application. See the Struts Users Guide and Strut's API for more documentation.  

    This article is based on the working 1.0 builds of Struts.  It is assumed that the reader has already installed a developer's copy of Struts and the example application (following the instructions in the Struts readme), and is ready to explore the example on their own development workstation (e.g. localhost). 

    This article also assumes the reader has a basic understanding of the Java language, JavaBeans, Web applications and JavaServer Pages. For background on these topics, see the various Sun Javasoft product sites.



    The standard Struts package comes with four applications: struts-test, struts-documentation, struts-template, and struts-example. Regarding struts-example, the readme tells us that:

    "This example is the beginnings of a portal application that would allow users to register themselves, and maintain a set of subscriptions they own to mail servers elsewhere on the Internet. When completed, this application will provide the ability to read mail from various mail servers, through the application."

    The example is still incomplete, but still a very useful introduction to Struts. For more about installing Struts and the example application, see the Struts readme.

    index.jsp

    Once installed, the example application is entered through a standard welcome page, index.jsp. This page offers two links, one to register with the application and one to login in (if you have already registered).

    Behind the scenes, index.jsp also checks for the existence of a database servlet and message resource. Both of these objects are referenced in the application's web.xml, and should be loaded before the index.jsp displays. If they are absent for any reason, index.jsp displays an error message.

    Note that the error messages are hardcoded into the welcome page; this way they can be displayed even if the message resource is missing. In other pages, a message resource is used to lookup and display messages, based on the user's locale. 

    web.xml and ApplicationResources.properties

    If you check the application's web.xml, you will see how these objects are loaded. The message resource is loaded by the application parameter to the ActionServlet. When the ActionServlet initializes, it parses the ApplicationResources.properties in the package folder into the default message resource. If you change a message in the resource, and then reload the application, it will appear throughout the application.

    You can even reload the configuration and message resources without restarting the container. See the end of the web.xml file for details. 

    DatabaseServlet.java

    The database object has it's own initialization block. The database servlet stores the database contents as a XML file, which is parsed by the Struts digester and loaded as a set of nested hashtables. The outer table is the list of user objects, each of which has its own inner hashtable of subscriptions. When you register, a user object is stored in this hashtable ... and when you login, the user object is stored within the session context.

    If you want to follow along (and you should!), the package source can be found under the src/example folder in your jakarta-struts folder.

    In the Example application, the database is seeded with a sample user. If you check the database.xml file, you'll see the sample user described as:

    <user username="user" password="pass" fullName="John Q. User" fromAddress="John.User@somewhere.com">
     <subscription autoConnect="false" host="mail.hotmail.com" type="pop3" username="user1234" password="bar" /> 
    </user>

    This creates a registration record  for "John Q. User", with the detail for his hotmail subscription.

    In the source to the database servlet, you should notice that the attribute name for the servlet is read from the package's constant file. This is a good way to be sure a name or other string value is uniform between source files. 

    index.jsp 2

    Back in the index.jsp, we can find several good uses of Struts custom tags. Two worth noting now are the base and the link tags. The base tag returns the current URL to the page, to be sure other relative hyperlinks on the page work properly. The link tag renders another important service. Besides being a quick way to write a hyperlink, it will also URL encode the hyperlink to maintain the client's session -- if the current client can't store the session as a cookie.

    If you turn cookies off in your browser, and then reload your browser and this page, you will see the links with the session id information attached. (If you are using Internet Explorer and try this, be sure you reset cookies for the appropriate security zone, and that you disallow "per-session" cookies.) 

    In just a simple welcome page, Struts has done quite a bit already:

    • Confirmed that required objects were created during initialization. 
    • Written all the page headings and labels from an internationalized message resource. 
    • Automatically rendered a current base tag for the page. 
    • Automatically URL-encoded hyperlinks as needed.

    At the top of the index.jsp page, you may also note several directives that load the tag libraries. These are just the usual red tape that goes with any Java source file.

    logon.jsp

    Next, if you choose the log on link, the container loads the logon.jsp file. You can use the default username and password (user:pass) to login. (Note that both the username and password are case sensitive.) Better yet, try omitting or misspelling the login in various combinations and see how the application reacts.

    If you do this, Struts will return you to the same JSP, but with three major differences:

    1. The page address is now logon.do rather than login.jsp. 
    2. Struts will display a validation-error above the logon form. 
    3. Whatever username you entered before is defaulted on the form.

    Pretty cool, but how does it work?

    struts-config.xml and LogonForm.java

    First, the logon.jsp makes use of the custom-tag "form". This tag can scan the application's properties for a form bean related to the path /logon.jsp (from the link on the welcome page). In this case, Struts finds one, and then checks  for an instance of this particular form bean. Not finding one, Struts creates a new form bean. When the form is submitted, Struts grabs the form fields from the HTTP request, and updates the waiting bean.

    To enable all this, you can simply

    1. define a class for the form bean in your package (the form fields with setters and getters), 
    2. add the bean class to your application's configuration resource, and 
    3. link the bean class to your action mapping by their name properties (name="logonForm").

    In addition to parameters representing standard HTML options, The form tag can also take several handy parameters to add JavaScript features to a form. These include focus, onsubmit, and onreset. There are even parameters for specifying cascading stylesheets.

    Struts has tidy mechanisms for validating forms and printing error messages. An action object can add as many messages as needed to a standard Struts collection. The JSP can then print all the messages, and clear the queue, using a single custom tag, <html:errors/>. There can be as many messages as your validation routine cares to post.

    Struts labels this mechanism as an error message handler, though your application could use it for other  messages too. For example, to post a message than a record was added or deleted. 

    To get the most out of your form beans, Struts provides a special class, ActionForm, with built-in support for validation and message handling that you can use as the base for your own form beans. Each of your JSP forms will probably have a unique set of fields, and would have their own specific form bean.

    LogonAction.java

    The initial JSP submits its form to logon.do. If you check the servlet mappings in the example's web.xml you will see that requests for *.do files are directed to the Struts "action" servlet (an instance of ActionServlet). In the example, the ActionServlet refers to struts-config.xml for its own mappings (among other things), which is where we find the reference to logon.do:

    <!-- Process a user logon --> 
    <action
     path="/logon"
     type="org.apache.struts.webapp.example.LogonAction"
     name="logonForm"
     scope="request"
     input="/logon.jsp"
     > 
    </action>

    and a form bean to go with the "logonForm" action:

    <!-- Logon form bean --> 
    <form-bean
     name="logonForm"
     type="org.apache.struts.webapp.example.LogonForm" 
     />

    In the action mapping, the path property tells the ActionServlet to forward a request for logon.do to the LogonAction object. The input property tells the LogonAction object where it can pass control to get information from the user.

    Before passing the request to LogonAction, the ActionServlet looks for the LogonForm bean. If it finds it, the ActionServlet updates the bean by matching properties named in the HTTP request with properties named in the form bean. If it doesn't find the bean, ActionServlet creates it, so LogonAction can assume that it already exists.

    When called by the ActionServlet, LogonAction retrieves the username and password from the LogonForm bean. (If just created, the bean will return default values.)

    In the example, LogonAction then checks with the DatabaseServlet to see if the logon matches a registered user. If the logon doesn't match, LogonAction adds a message key to an error list. At the end of the routine, if the error list is not empty, LogonAction adds a User bean to the session context, and forwards control to its input form (login.jsp).

    Note that direct access to the DatabaseServlet should really be handled by a business-logic bean, and NOT by LogonAction. To quote the example's author "This should be considered a bug in the example." 

    If there are no errors, LogonAction places a user bean into the session context (replacing any prior user bean), and forwards control to the "success" action. Where that control actually goes is determined by the mappings in struts-config.xml.

    Before returning from a successful login, LogonAction also disposes of the LogonForm bean. This way, if the user returns to the index.jsp form later, it will be a clean form without the (old) login already entered. Note that LogonAction first checks to see if the scope has been set to "request", and then removes the bean from the request context, or otherwise from the default session context.

    The Struts best practice is to use request scope for single-page forms that contain all of your relevant properties, because there is no need to maintain such form beans across requests.

    Note that the example removes the LogonForm bean regardless of scope. This is for backward compatibility with earlier configurations. In your application, you should follow the advice of the configuration, and remove it only if the scope is set to "request". This way, the behavior can be changed just by editing struts-config.xml and reloading the application. 

    Go ahead and login successfully now, using the default username and password (user and pass). 

    struts-config.xml 2

    As mentioned, on a successful login, LogonAction forwards control to the "success" action, and where control actually goes is determined by the mappings in struts-config.xml. But if you check the mappings for LogonAction, you'll find this block

    <!-- Process a user logon -->
    <action 
     path="/logon"
     type="com.husted.struts.example2.LogonAction"
     name="logonForm"
     scope="request"
     input="/logon.jsp">
    </action>

    Huh!? Where's the success mapping? If you dig around, you'll also find

    <!-- Global Forward Definitions -->
    <global-forwards>
     <forward 
       name="logon" 
       path="/logon.jsp"
     />
     <forward 
       name="success" 
       path="/mainMenu.jsp"
     />
    </global-forwards>

    Which says, if somebody says forward to "success", and doesn't have a local forward for "success", then forward using the path "/mainMenu.jsp". (Ditto for forward to "logon", but forward to "/logon.jsp".)

    And which is why you should be now be staring at the result of the mainMenu.jsp now, offering the choices

    • Edit your user registration profile 
    • Log off MailReader Demonstration Application 

    If you check the page path shown by your browser, you will see that it shows "logon.do" not "mainMenu.jsp". This is because the page was loaded as the ultimate result of the logon.do request, so for all the browser knows, that's where you are. This is why the base custom tag is important. If your page included relative links to images, your browser would be trying to make them based on the path to "logon.do".  So the Struts base tag saves the day by telling the browser to resolve relative links based on the path to the file Struts returned, rather than on the "file" the browser requested.

    If you have a sharp eye, you also may have noticed that logon.do is not followed by any parameters from the login form (logon.do?username=user). The default method for a from created with the Struts form tag is POST, which does not append  form parameters to the request path, as GET does. This is the opposite of the HTML form tag, which uses GET by default.

    mainMenu.jsp

    If you check the source for mainMenu.jsp, you will find some interesting new tags. The first is app:checkLogon. This is not a standard Struts custom tag, but one designed for the Example application. The directive at the top of the file tells us that the app tags are defined in app.tld. Tracing through app.tld, we find that source for this tag is (surprise!) CheckLogonTag.

    CheckLoginTag.java

    This is an excellent example of using custom tags to encapsulate application logic. CheckLoginTag.java looks to see if the user is logged in by checking for an object named "User" in the session context. If not, control is forwarded to "/login.jsp". So, whenever you want to be sure someone is logged in before they access a page, just put "<app:checkLogon/>" at the top of the JSP.

    If you take a good look at the CheckLoginTag source, you will probably see a quick and easy way the code could be made easier to maintain.

    Hint: 'Consistency is Key'.

    You may not have noticed, but the heading on the mainMenu page is customized for the current user. If I were to create a new login for myself and come back to the mainMenu page, instead of saying "Main Menu Options for user" it would say "Main Menu Options for thusted". In doing this, the mainMenu.jsp demonstrates using regular jsp:bean tags alongside Struts custom tags. (No worries mate!) It simply uses a standard jsp:useBean jsp:getProperty tags to snag your username from the User bean and display it in the HTML heading.

    Unfortunately, some of the application's model is exposed by this page view. Struts goes a long way toward minimizing this sort of thing, but in some cases it is unavoidable. 

    The other links we've seen have either gone directly to a JSP file, or to a Struts action path, like login.do. The "Edit your user registration profile" link is a little different, since it also uses a parameter, as in editRegistration.do?action=Edit. When the Struts ActionServlet processes this link, it will ignore the parameter for the purpose of matching the request, but still pass the parameter along to action's object. 

    This means that in Struts, an action object must be able to handle every valid parameter for it's base path. (In the Example, editRegistration must handle both Edit and Create.) 

    You may want to check for invalid parameters too. (And be careful of  differences in case if your comparisons are not case insensitive!)

    If you check the struts-config.xml, you'll see that the editRegistration action is mapped to the (surprise again!), the EditRegistrationAction; it uses a registrationForm bean, and registration.jsp for input.

    <!-- Registration form bean -->
    <form-bean name="registrationForm"
    type="org.apache.struts.webapp.example.RegistrationForm"/>

    <!-- Edit user registration -->
    <action path="/editRegistration"
    type="org.apache.struts.webapp.example.EditRegistrationAction"
    name="registrationForm"
    scope="request"
    validate="false"
    input="/registration.jsp">
    <forward name="success" path="/registration.jsp"/>
    </action>

    Hint: Consistent naming conventions, like the ones used throughout the Example, make applications much easier to write and understand. Save your creativity for the things that matter, and follow an established standard for source code formatting, like the Elements of Java Style.

    EditRegistrationAction.java

    Many objects in an application may do double-duty. For example, EditRegistrationAction not only lets you update a registration, but is also used to create a new one. Which task the object performs is determined by the action passed to it. In the case of EditRegistrationAction, it can either edit or create a registration, the default being create if  a task is not specified. To select between tasks, simply add ?create or ?edit to the hyperlink or form action.

    Like most classes in the example application, editRegistration makes good use of the log to track it's progress. Note that ActionServlet has had a new log method added since the Example was written. You can now specify both the message and a minimum logging (or debug) level. For more, see the Javadoc in your struts-documentation application.

    registration.jsp and RegistrationForm.java

    If you follow the "Edit your user registration profile" link from the mainMenu, we will finally reach the heart of the Example application, the registration page. This page displays everything the Example application knows about you (or at least your login), while demonstrating several interesting techniques. 

    You'll remember that mainMenu.jsp wanted to be sure that everyone was logged in, and used the CheckLogin tag to enforce that. The registration.jsp is a little different. First it uses a Struts logic tag to see if the task at hand is to register a new User. If not (e.g. action != "Create"), the logic tag exposes a CheckLoginTag to be sure we have a user (and therefore a registration) to edit. 

    <logic:equal 
     name="registrationForm" 
     property="action"
     scope="request" 
     value="Edit"
    >
      <app:checkLogon/>
    </logic:equal>

    Note that the Struts html:form tag will refer to properties set by struts-config.xml and automatically create a registrationForm bean if one is not present. However, that does not happen until the form tag is processed within the page. Since this block appears before the html:form tag, a runtime error is exposed if you try to access registration.jsp directly (rather then going through the editRegistration.do action).

    registation.jsp continues to use logic tags throughout the page so that a single JSP can be used to perform more than one task. For example, if you are editing the form (action == "Edit"), the page inserts your username from the registrationForm bean. If you are new user (action == "Create"), the page creates an empty field, so you can pick your username. 

    The Struts logic tags are a very convenient way to express  application logic within your pages. This prevents user error and reduces the number of JSPs your application needs to maintain, among other benefits.

    The page also uses logic tags to display a list of subscriptions for the given user. If the user enters this page with an edit action in the request context, the lower part of the page listing the subscriptions is exposed by this logic tag:

    <logic:equal 
     name="registrationForm" 
     property="action"
     scope="request" 
     value="Edit"
    >

    Otherwise, the page just contains the top portion -- a blank data-entry form for creating the user's registration.

    logic:iterate

    Beside making the usual conditional tests, you can also use logic tags to forward control to other actions, to redirect control to another path, and to iterate over collections. The registration page includes a good example of using the logic:iterate tag to display the user's subscriptions. 

    The subscriptions are stored in a hashtable object, which is in turn stored in the user object. So to display each subscription, we have to reach into the user object, and loop through the members of the subscription collection. Using the iterate tag, this couldn't be easier. 

    <logic:iterate name="user" property="subscriptions" id="subscription">
    <!-- block to repeat -->
    </logic:iterate>

    The three parameters to the iterate tag ( name, property, and id) tell it to

    1. Check this context for an attribute (e.g. object) named "user",
    2. Snag the property of user named "subscriptions", 
    3. In the block to iterate, use "subscription" (singular) as the name for each member of the collection. 

    So, to list the host for each subscription in a HTML unordered list, we could write:

    <ul>
      <logic:iterate name="user" property="subscriptions" id="subscription">
        <li>
          <bean:write name="subscription" property="host" filter="true" />
        </li>
      </logic:iterate>
    </ul>

    This is another good example of how Struts works with the standard JSP tags, like bean. The filter option says  to use convert HTML commands to their character entity. So a < would be output in the HTML as &lt;.

    In registration.jsp, iterate is used to create a menu of subscriptions, each linked with an edit and delete action.

    <logic:iterate id="subscription" name="user" property="subscriptions">
    <tr>
    <td align="left">
    <bean:write name="subscription" property="host" filter="true"/>
    </td>
    <td align="left">
    <bean:write name="subscription" property="username" filter="true"/>
    </td>
    <td align="center">
    <bean:write name="subscription" property="type" filter="true"/>
    </td>
    <td align="center">
    <bean:write name="subscription" property="autoConnect"/>
    </td>
    <td align="center">
    <app:linkSubscription page="/editSubscription.do?action=Delete">
    <bean:message key="registration.deleteSubscription"/>
    </app:linkSubscription>
    <app:linkSubscription page="/editSubscription.do?action=Edit">
    <bean:message key="registration.editSubscription"/>
    </app:linkSubscription>
    </td>
    </tr>
    </logic:iterate>

    The collection in an iterate tag can be any of the following: an array of objects, an Iterator, a Collection (which includes Lists, Sets and Vectors), or a Map (which includes Hashtables) whose elements will be iterated over. 

    You'll note that the hyperlinks to the edit and delete action for each subscription are written with another custom tag, app:linkSubscription. Writing a hyperlink to an action is not difficult, but it can be ugly, and makes an excellent case for encapsulation. If you trace through the app.tld, you will find that the source code for the linkSubscription tag lives in (come on, take a guess) LinkSubscriptionTag.java.

    LinkSubscriptionTag.java

    The Example application uses a subscription's host name (e.g. yahoo.com) as a primary key, which means you can only have one subscription for each host. It also means that to edit a subscription, all you need to know is the user and host. In fact, the editSubscription action is designed to create, edit, or delete a subscription if provided a user and host names in the request. The goal of LinkSubscriptionTag is then to output a block like:

    <A    HREF=[path]editSubscription.do?action=[action]&username=[user]&host=[host]">[action]
    </A>

    based on input block like:

    <app:linkSubscription 
      page="/editSubscription.do?action=Delete">Delete
    </app:linkSubscription>

    To reduce overhead, LinkSubscriptionTag uses "subscription" as the default name (which the iterator refers to as "ID"), so that can be omitted from the tag properties. The "action" portion of  the will differ, and so that is given as the page property to the tag

    Here are a few annotated highlights from LinkSubscriptionTag.java:

    1. Create a string buffer, and ask the request for the relative path to the application 
      StringBuffer url = new StringBuffer(request.getContextPath());
    2. Snag a reference to the subscription bean (for this iteration)
      subscription = (Subscription) pageContext.findAttribute(name);
    3. Append the username and host from the bean to the path request.
      url.append("&username="); url.append(BeanUtils.filter(subscription.getUser().getUsername()));
      url.append("&host="); 
      url.append(BeanUtils.filter(subscription.getHost()));

    These are the essentials, but be sure to see the full source in LinkSubscriptionTag.java for the rest of the error and logic checking that a working application needs to succeed. 

    Meanwhile, back on registration.jsp, there is one more link on the page. This uses yet another custom tag, the app:linkUser tag.

    <app:linkUser page="/editSubscription.do?action=Create">
      <bean:message key="registration.addSubscription"/>
    </app:linkUser>

    By this time, you must be ready to flip directly to LinkUserTag.java with nary a glance at the configuration file ...

    LinkUserTag.java

    Since they solve the same general problem, LinkUserTag and LinkSubscriptionTag are quite a bit a like, except that LinkUserTag grabs the user bean from the session context, instead of a subscription bean from the iteration. Like the LinkSubscriptionTag, the name for the user bean (e.g. "user") is defaulted, and can be omitted from the tag; all that's needed is the page property -- the rest is automatic!

    <app:linkUser page="/editSubscription.do?action=Create">
      <bean:message key="registration.addSubscription"/>
    </app:linkUser>

    When rendered, this displays a HTML hypertext link like:

    <a href="/struts-example/editSubscription.do?action=Create&amp;username=user">
      Add
    </a>

    Note that anchor links with ampersands should use the character entity &amp; as the LinkUserTag has done here (http://www.w3.org/TR/html401/appendix/notes.html#h-B.2.2). 

    Let's follow that "Add"  link now and see what's up with the editSubcription action anyway. 

    EditSubscriptionAction.java

    Predictably, we find a some now-familiar mappings in struts-config.xml 

    <!-- Subscription form bean -->
    <form-bean 
      name="subscriptionForm"
      type="org.apache.struts.webapp.example.SubscriptionForm"
    />

    <!-- Edit mail subscription -->
    <action path="/editSubscription"
      type="org.apache.struts.webapp.example.EditSubscriptionAction"
      name="subscriptionForm"
      scope="request"
      validate="false"
     >
      <forward name="failure" path="/mainMenu.jsp"/>
      <forward name="success" path="/subscription.jsp"/>
    </action>

    When we've introduced these type of mappings before, and mentioned that the struts-config.xml was parsed when the ActionServlet was initialized. But we should  make it clear that when the Struts digester parsed this file, it actually created standard Java objects, linked as properties to the controller. This means you don't have to edit Java source files just to add a bunch of "new" statements. (How cool is that?)

    Following what was specified by struts-config.xml, the controller makes sure that a subscriptionForm bean exists, along with the SubscriptionAction object, and then calls the action object's perform method. The perform method first checks to see that the user is logged-in. If not, control is forwarded to the login action. EditSubscriptionAction.perform then either creates a new subscription object (if the task is Create), or searches the user's subscription hashtable for a matching hostname (if  the task is Edit). 

    Finally, EditSubscriptionAction conforms the ActionForm bean with the database bean. There may be several subscriptions in the database, but in EditSubscriptionAction we expose the one selected (or just created) for this request to use. Once the Action form (called "subform" in the code)  is created and populated from the database, the bean's action is set to either Create or Edit, and control is forwarded to our "success" form, subscription.jsp . 

    Note that the servlet only creates one object for each action. Each request is handled as a separate thread, and passed to the single action object instance. This means your action objects must be multi-thread safe.

    But before turning to our final JSP, a word about our database model ...

    User.java and Subscription.java

    If you're used to working with relational databases, the links between the user and subscription objects may be confusing. A conventional relational database would create two distinct tables, one for the users and another for the subscriptions, and link them together with a user ID. The Example application implements a different model, a hierarchical database. Here a "table" of subscriptions is stored within each user object, something like the way a filing system stores documents within folders. 

    In addition to the usual getters and setters, the user object also has two methods for working with subscription objects. findSubscription takes a hostname and returns the subscription object for that host. getSubscriptions returns an array of all the subscriptions for the user (ready-made for the iterate tag!). Besides the fields needed to manage the SubscriptionForm data, the object also maintains a runtime link to its user object.

    To create a new subscription, EditSubscriptionAction.java simply creates a new subscription object, and sets its user to the object found in the request, and then forwards control to its input form, subscription.jsp. 

    subscription.jsp

    Saving the best for last, subscription.jsp demonstrates use of some interesting Struts custom form tags,  html:options and html:checkbox. 

    In registration.jsp, the Struts iteration tag was used to write a list of subscriptions. Another place where iterations and collections are handy is the option list for a HTML select tag. Since this is such a common situation, Struts offers a html:options (plural) tag can take an array of objects as a parameter. The tag then iterates over the members of the array (beans) to place each one inside an standard option tag. So given a block like

    <html:select property="type">
    <html:options
     collection="serverTypes"
     property="value"
     labelProperty="label"
    />
    </html:select>

    Struts outputs a block like

    <select name="type">
    <option value="imap" selected>IMAP Protocol</option>
    <option value="pop3">POP3 Protocol</option>
    </select>

    Here, one collection contained both the labels and the values, from properties of the same name. Options can also use a second array  for the labels, if they do not match the values. Options can use a Collection, Iterator, or Map for the source of the list.

    For demonstrations purposes, the serverTypes array is created at the top of this page. Usually, the html:options tag would be used to list valid items from a database maintained elsewhere. For example, if the application needed you to select a default subscription, a form might list the subscriptions in an options tag. 

    The LabelValueBean used to create the demonstration array is also a good example of simple but useful bean object.

    A particularly tricky HTML control is the checkbox. A problem with a checkbox is that it is only sent in the request if it is checked. If it is not checked, it is not sent (i.e. null). This can be problematic when trying to validate the form's data after it has been translated to a bean. The autoconnect property for a subscription demonstrates how to handle validation of a checkbox.

    SubscriptionForm.java 

    Struts validation is handled by the reset and validate methods of the ActionForm bean. When creating your own form beans, you should subclass ActionForm, add your own fields and their getters/setters, and implement the reset and validate methods. 

    Struts calls reset before populating the form, and calls validate after populating it but before the perform method of the action. Reset should assign default values to each of your form fields, usually null. But in the case of checkboxes, the default value should usually be false instead of null. 

    For more examples of validating forms, take another look at LoginForm.java and RegistrationForm.java.

    Back in subscription.jsp, we have one more block to cover. Although the same basic form can be used to created, edit, or delete a subscription, people might expect the buttons to be labeled differently in each case. subscription.jsp accommodates by using a logic tag to output a different set of buttons for each case. This doesn't really change the way subscription.jsp works, but it does make things less confusing for the user.

    <logic:equal 
     name="subscriptionForm"
     property="action"
     scope="request"
     value="Create">
     <html:submit>
       <bean:message key="button.save"/>
     </html:submit>
    </logic:equal>

    In the case of a request to delete a subscription, the submit button is labeled "Confirm", since this view is meant to give the user a last chance to cancel, before sending that task along to SaveSubscriptionAction.java.

    The actual action property is placed into the form as a hidden field, and SaveSubscriptionAction checks that property to execute the appropriate task.

    SaveSubscriptionAction.java

    Our final stop has the job of finishing what EditSubscriptionAction.java and subscription.jsp started. After the usual logic and error checking, SaveSubscriptionAction either deletes or updates the subscription object being handled by this request, and cleans up the bean, just to be tidy. By now, you should be very comfortable reading through the source on your own, to pickup the finer points.

    This concludes our tour. To review, you may wish to trace the path a new user takes when they register with the application for the first time You should also read over each of the .java and JSP files carefully, since we only covered the high points here.

    Summary

    • Struts uses a single controller servlet to route HTTP requests. 
    • The requests are routed to action objects according to path (or URI). 
    • Each request is handled as a separate thread
    • There is only one object for each action (URI), so your action objects must be multi-thread safe.
    • The configuration of action objects are loaded from a XML resource file, rather than hardcoded.
    • Action objects can respond to the request, or ask the controller to forward the request to another object or to another page, such as an input form. 
    • A library of custom tags works with the rest of the framework to enhance use of JavaServer Pages.
    • The Struts form tag can work closely with an action objects via a Struts ActionFormBean to retain the state of a data-entry form, and validate the data entered.
    • ActionForm beans can be automatically created by the JSP form or controller servlet. 
    • Struts supports a message resource for loading constants strings. Alternate message resources can be provided to internationalize an application.

    -- Ted Husted, 25 December 2000 < support@husted.com >.


    libstruts1.2-java-1.2.9/contrib/struts-faces/example1-webapp/src/web/welcome.jsp0000644000175000017500000000004310404045212030241 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/contrib/struts-faces/example1-webapp/build.xml0000644000175000017500000003311510404045204026354 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/0000755000175000017500000000000010423130300024522 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/0000755000175000017500000000000010404045202025316 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/0000755000175000017500000000000010404045202026237 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/0000755000175000017500000000000010404045202027026 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/0000755000175000017500000000000010404045202030247 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/0000755000175000017500000000000010404045202031613 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/0000755000175000017500000000000010404045202033071 5ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000015110423140531011312 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/example2/libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/examp0000755000175000017500000000000010423130300034117 5ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000016010423140531011312 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/example2/memory/libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/examp0000755000175000017500000000000010423130300034117 5ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000021110423140531011307 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/example2/memory/MemoryDatabasePlugIn.javalibstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/examp0000644000175000017500000001742210404045202034134 0ustar arnaudarnaud00000000000000/* * Copyright 1999-2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example2.memory; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.util.ArrayList; import javax.servlet.ServletException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.action.ActionServlet; import org.apache.struts.action.PlugIn; import org.apache.struts.config.ModuleConfig; import org.apache.struts.util.LabelValueBean; import org.apache.struts.webapp.example2.Constants; /** *

    MemoryDatabasePlugIn initializes and finalizes the * persistent storage of User and Subscription information for the Struts * Demonstration Application, using an in-memory database backed by an * XML file.

    * *

    IMPLEMENTATION WARNING - If this web application is run * from a WAR file, or in another environment where reading and writing of the * web application resource is impossible, the initial contents will be copied * to a file in the web application temporary directory provided by the * container. This is for demonstration purposes only - you should * NOT assume that files written here will survive a restart * of your servlet container.

    * * @author Craig R. McClanahan * @version $Rev: 54934 $ $Date: 2004-10-16 18:07:50 +0100 (Sat, 16 Oct 2004) $ */ public final class MemoryDatabasePlugIn implements PlugIn { // ----------------------------------------------------- Instance Variables /** * The application configuration for our owning module. */ private ModuleConfig config = null; /** * The {@link MemoryUserDatabase} object we construct and make available. */ private MemoryUserDatabase database = null; /** * Logging output for this plug in instance. */ private Log log = LogFactory.getLog(this.getClass()); /** * The {@link ActionServlet} owning this application. */ private ActionServlet servlet = null; // ------------------------------------------------------------- Properties /** * The web application resource path of our persistent database * storage file. */ private String pathname = "/WEB-INF/database.xml"; public String getPathname() { return (this.pathname); } public void setPathname(String pathname) { this.pathname = pathname; } // --------------------------------------------------------- PlugIn Methods /** * Gracefully shut down this database, releasing any resources * that were allocated at initialization. */ public void destroy() { log.info("Finalizing memory database plug in"); if (database != null) { try { database.close(); } catch (Exception e) { log.error("Closing memory database", e); } } servlet.getServletContext().removeAttribute(Constants.DATABASE_KEY); database = null; servlet = null; database = null; config = null; } /** * Initialize and load our initial database from persistent storage. * * @param servlet The ActionServlet for this web application * @param config The ApplicationConfig for our owning module * * @exception ServletException if we cannot configure ourselves correctly */ public void init(ActionServlet servlet, ModuleConfig config) throws ServletException { log.info("Initializing memory database plug in from '" + pathname + "'"); // Remember our associated configuration and servlet this.config = config; this.servlet = servlet; // Construct a new database and make it available database = new MemoryUserDatabase(); try { String path = calculatePath(); if (log.isDebugEnabled()) { log.debug(" Loading database from '" + path + "'"); } database.setPathname(path); database.open(); } catch (Exception e) { log.error("Opening memory database", e); throw new ServletException("Cannot load database from '" + pathname + "'", e); } // Make the initialized database available servlet.getServletContext().setAttribute(Constants.DATABASE_KEY, database); // Setup and cache other required data setupCache(servlet, config); } // --------------------------------------------------------- Public Methods // ------------------------------------------------------ Protected Methods /** *

    Cache commonly required data as servlet context attributes.

    * * @param servlet The ActionServlet instance running * this webapp * @param config The ModuleConfig for this application module */ protected void setupCache(ActionServlet servlet, ModuleConfig config) { // Set up list of server types under "serverTypes" ArrayList serverTypes = new ArrayList(); serverTypes.add(new LabelValueBean("IMAP Protocol", "imap")); serverTypes.add(new LabelValueBean("POP3 Protocol", "pop3")); servlet.getServletContext().setAttribute("serverTypes", serverTypes); } // -------------------------------------------------------- Private Methods /** * Calculate and return an absolute pathname to the XML file to contain * our persistent storage information. * * @exception Exception if an input/output error occurs */ private String calculatePath() throws Exception { // Can we access the database via file I/O? String path = servlet.getServletContext().getRealPath(pathname); if (path != null) { return (path); } // Does a copy of this file already exist in our temporary directory File dir = (File) servlet.getServletContext().getAttribute ("javax.servlet.context.tempdir"); File file = new File(dir, "struts-example-database.xml"); if (file.exists()) { return (file.getAbsolutePath()); } // Copy the static resource to a temporary file and return its path InputStream is = servlet.getServletContext().getResourceAsStream(pathname); BufferedInputStream bis = new BufferedInputStream(is, 1024); FileOutputStream os = new FileOutputStream(file); BufferedOutputStream bos = new BufferedOutputStream(os, 1024); byte buffer[] = new byte[1024]; while (true) { int n = bis.read(buffer); if (n <= 0) { break; } bos.write(buffer, 0, n); } bos.close(); bis.close(); return (file.getAbsolutePath()); } } ././@LongLink0000644000175000017500000000020710423140531011314 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/example2/memory/MemorySubscription.javalibstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/examp0000644000175000017500000001025610404045216034137 0ustar arnaudarnaud00000000000000/* * Copyright 1999-2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example2.memory; import org.apache.struts.webapp.example2.Subscription; import org.apache.struts.webapp.example2.User; /** *

    Concrete implementation of {@link Subscription} for an in-memory * database backed by an XML data file.

    * * @author Craig R. McClanahan * @version $Rev: 54934 $ $Date: 2004-10-16 18:07:50 +0100 (Sat, 16 Oct 2004) $ * @since Struts 1.1 */ public final class MemorySubscription implements Subscription { // ----------------------------------------------------------- Constructors /** *

    Construct a new Subscription associated with the specified * {@link User}. * * @param user The user with which we are associated * @param host The mail host for this subscription */ public MemorySubscription(MemoryUser user, String host) { super(); this.user = user; this.host = host; } // ----------------------------------------------------- Instance Variables /** * The mail host for this subscription. */ private String host = null; /** * The {@link User} with which we are associated. */ private MemoryUser user = null; // ------------------------------------------------------------- Properties /** * Should we auto-connect at startup time? */ private boolean autoConnect = false; public boolean getAutoConnect() { return (this.autoConnect); } public void setAutoConnect(boolean autoConnect) { this.autoConnect = autoConnect; } /** * The mail host for this subscription. */ public String getHost() { return (this.host); } /** * The password (in clear text) for this subscription. */ private String password = null; public String getPassword() { return (this.password); } public void setPassword(String password) { this.password = password; } /** * The subscription type ("imap" or "pop3"). */ private String type = "imap"; public String getType() { return (this.type); } public void setType(String type) { this.type = type; } /** * The User owning this Subscription. */ public User getUser() { return (this.user); } /** * The username for this subscription. */ private String username = null; public String getUsername() { return (this.username); } public void setUsername(String username) { this.username = username; } // --------------------------------------------------------- Public Methods /** * Return a String representation of this object. */ public String toString() { StringBuffer sb = new StringBuffer(""); return (sb.toString()); } } ././@LongLink0000644000175000017500000000017710423140531011322 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/example2/memory/MemoryUser.javalibstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/examp0000644000175000017500000001604410404045224034137 0ustar arnaudarnaud00000000000000/* * Copyright 1999-2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example2.memory; import java.util.HashMap; import org.apache.struts.webapp.example2.Subscription; import org.apache.struts.webapp.example2.User; import org.apache.struts.webapp.example2.UserDatabase; /** *

    Concrete implementation of {@link User} for an in-memory * database backed by an XML data file.

    * * @author Craig R. McClanahan * @version $Rev: 54934 $ $Date: 2004-10-16 18:07:50 +0100 (Sat, 16 Oct 2004) $ * @since Struts 1.1 */ public final class MemoryUser implements User { // ----------------------------------------------------------- Constructors /** *

    Construct a new User associated with the specified * {@link UserDatabase}. * * @param database The user database with which we are associated * @param username The username of this user */ public MemoryUser(MemoryUserDatabase database, String username) { super(); this.database = database; this.username = username; } // ----------------------------------------------------- Instance Variables /** * The {@link UserDatabase} with which we are associated. */ private MemoryUserDatabase database = null; /** * The {@link Subscription}s for this User, keyed by hostname. */ private HashMap subscriptions = new HashMap(); /** * The username for this user. */ private String username = null; // ------------------------------------------------------------- Properties /** * The {@link UserDatabase} with which we are associated. */ public UserDatabase getDatabase() { return (this.database); } /** * The email address from which messages are sent. */ private String fromAddress = null; public String getFromAddress() { return (this.fromAddress); } public void setFromAddress(String fromAddress) { this.fromAddress = fromAddress; } /** * The full name of this user, included in from addresses. */ private String fullName = null; public String getFullName() { return (this.fullName); } public void setFullName(String fullName) { this.fullName = fullName; } /** * The password (in clear text). */ private String password = null; public String getPassword() { return (this.password); } public void setPassword(String password) { this.password = password; } /** * The EMAIL address to which replies should be sent. */ private String replyToAddress = null; public String getReplyToAddress() { return (this.replyToAddress); } public void setReplyToAddress(String replyToAddress) { this.replyToAddress = replyToAddress; } /** * Find and return all {@link Subscription}s associated with this user. * If there are none, a zero-length array is returned. */ public Subscription[] getSubscriptions() { synchronized (subscriptions) { Subscription results[] = new Subscription[subscriptions.size()]; return ((Subscription[]) subscriptions.values().toArray(results)); } } /** * The username (must be unique). */ public String getUsername() { return (this.username); } // --------------------------------------------------------- Public Methods /** * Create and return a new {@link Subscription} associated with this * User, for the specified host name. * * @param host Host name for which to create a subscription * * @exception IllegalArgumentException if the host name is not unique * for this user */ public Subscription createSubscription(String host) { synchronized (subscriptions) { if (subscriptions.get(host) != null) { throw new IllegalArgumentException("Duplicate host '" + host + "' for user '" + username + "'"); } MemorySubscription subscription = new MemorySubscription(this, host); synchronized (subscriptions) { subscriptions.put(host, subscription); } return (subscription); } } /** * Find and return the {@link Subscription} associated with the specified * host. If none is found, return null. * * @param host Host name to look up */ public Subscription findSubscription(String host) { synchronized (subscriptions) { return ((Subscription) subscriptions.get(host)); } } /** * Remove the specified {@link Subscription} from being associated * with this User. * * @param subscription Subscription to be removed * * @exception IllegalArgumentException if the specified subscription is not * associated with this User */ public void removeSubscription(Subscription subscription) { if (!(this == subscription.getUser())) { throw new IllegalArgumentException ("Subscription not associated with this user"); } synchronized (subscriptions) { subscriptions.remove(subscription.getHost()); } } /** * Return a String representation of this object. */ public String toString() { StringBuffer sb = new StringBuffer(""); return (sb.toString()); } } ././@LongLink0000644000175000017500000000020710423140531011314 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/example2/memory/MemoryUserDatabase.javalibstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/examp0000644000175000017500000002757010404045214034144 0ustar arnaudarnaud00000000000000/* * Copyright 1999-2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example2.memory; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.util.HashMap; import org.apache.commons.digester.Digester; import org.apache.commons.digester.ObjectCreationFactory; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.webapp.example2.Subscription; import org.apache.struts.webapp.example2.User; import org.apache.struts.webapp.example2.UserDatabase; import org.xml.sax.Attributes; /** *

    Concrete implementation of {@link UserDatabase} for an in-memory * database backed by an XML data file.

    * * @author Craig R. McClanahan * @version $Rev: 54934 $ $Date: 2004-10-16 18:07:50 +0100 (Sat, 16 Oct 2004) $ * @since Struts 1.1 */ public final class MemoryUserDatabase implements UserDatabase { // ----------------------------------------------------------- Constructors // ----------------------------------------------------- Instance Variables /** * Logging output for this user database instance. */ private Log log = LogFactory.getLog(this.getClass()); /** * The {@link User}s associated with this UserDatabase, keyed by username. */ private HashMap users = new HashMap(); // ------------------------------------------------------------- Properties /** * Absolute pathname to the persistent file we use for loading and storing * persistent data. */ private String pathname = null; private String pathnameOld = null; private String pathnameNew = null; public String getPathname() { return (this.pathname); } public void setPathname(String pathname) { this.pathname = pathname; pathnameOld = pathname + ".old"; pathnameNew = pathname + ".new"; } // --------------------------------------------------------- Public Methods /** *

    Finalize access to the underlying persistence layer.

    * * @exception Exception if a database access error occurs */ public void close() throws Exception { save(); } /** *

    Create and return a new {@link User} defined in this user database. *

    * * @param username Username of the new user * * @exception IllegalArgumentExceptionif the specified username * is not unique */ public User createUser(String username) { synchronized (users) { if (users.get(username) != null) { throw new IllegalArgumentException("Duplicate user '" + username + "'"); } if (log.isTraceEnabled()) { log.trace("Creating user '" + username + "'"); } MemoryUser user = new MemoryUser(this, username); synchronized (users) { users.put(username, user); } return (user); } } /** *

    Return the existing {@link User} with the specified username, * if any; otherwise return null.

    * * @param username Username of the user to retrieve */ public User findUser(String username) { synchronized (users) { return ((User) users.get(username)); } } /** *

    Return the set of {@link User}s defined in this user database.

    */ public User[] findUsers() { synchronized (users) { User results[] = new User[users.size()]; return ((User[]) users.values().toArray(results)); } } /** *

    Initiate access to the underlying persistence layer.

    * * @exception Exception if a database access error occurs */ public void open() throws Exception { FileInputStream fis = null; BufferedInputStream bis = null; try { // Acquire an input stream to our database file if (log.isDebugEnabled()) { log.debug("Loading database from '" + pathname + "'"); } fis = new FileInputStream(pathname); bis = new BufferedInputStream(fis); // Construct a digester to use for parsing Digester digester = new Digester(); digester.push(this); digester.setValidating(false); digester.addFactoryCreate ("database/user", new MemoryUserCreationFactory(this)); digester.addFactoryCreate ("database/user/subscription", new MemorySubscriptionCreationFactory(this)); // Parse the input stream to initialize our database digester.parse(bis); bis.close(); bis = null; fis = null; } catch (Exception e) { log.error("Loading database from '" + pathname + "':", e); throw e; } finally { if (bis != null) { try { bis.close(); } catch (Throwable t) { ; } bis = null; fis = null; } } } /** * Remove the specified {@link User} from this database. * * @param user User to be removed * * @exception IllegalArgumentException if the specified user is not * associated with this database */ public void removeUser(User user) { if (!(this == user.getDatabase())) { throw new IllegalArgumentException ("User not associated with this database"); } if (log.isTraceEnabled()) { log.trace("Removing user '" + user.getUsername() + "'"); } synchronized (users) { users.remove(user.getUsername()); } } /** *

    Save any pending changes to the underlying persistence layer.

    * * @exception Exception if a database access error occurs */ public void save() throws Exception { if (log.isDebugEnabled()) { log.debug("Saving database to '" + pathname + "'"); } File fileNew = new File(pathnameNew); PrintWriter writer = null; try { // Configure our PrintWriter FileOutputStream fos = new FileOutputStream(fileNew); OutputStreamWriter osw = new OutputStreamWriter(fos); writer = new PrintWriter(osw); // Print the file prolog writer.println(""); writer.println(""); // Print entries for each defined user and associated subscriptions User users[] = findUsers(); for (int i = 0; i < users.length; i++) { writer.print(" "); writer.println(users[i]); Subscription subscriptions[] = users[i].getSubscriptions(); for (int j = 0; j < subscriptions.length; j++) { writer.print(" "); writer.println(subscriptions[j]); writer.print(" "); writer.println(""); } writer.print(" "); writer.println(""); } // Print the file epilog writer.println(""); // Check for errors that occurred while printing if (writer.checkError()) { writer.close(); fileNew.delete(); throw new IOException ("Saving database to '" + pathname + "'"); } writer.close(); writer = null; } catch (IOException e) { if (writer != null) { writer.close(); } fileNew.delete(); throw e; } // Perform the required renames to permanently save this file File fileOrig = new File(pathname); File fileOld = new File(pathnameOld); if (fileOrig.exists()) { fileOld.delete(); if (!fileOrig.renameTo(fileOld)) { throw new IOException ("Renaming '" + pathname + "' to '" + pathnameOld + "'"); } } if (!fileNew.renameTo(fileOrig)) { if (fileOld.exists()) { fileOld.renameTo(fileOrig); } throw new IOException ("Renaming '" + pathnameNew + "' to '" + pathname + "'"); } fileOld.delete(); } } /** * Digester object creation factory for subscription instances. */ class MemorySubscriptionCreationFactory implements ObjectCreationFactory { public MemorySubscriptionCreationFactory(MemoryUserDatabase database) { this.database = database; } private MemoryUserDatabase database = null; private Digester digester = null; public Digester getDigester() { return (this.digester); } public void setDigester(Digester digester) { this.digester = digester; } public Object createObject(Attributes attributes) { String host = attributes.getValue("host"); User user = (User) digester.peek(); Subscription subscription = user.createSubscription(host); String autoConnect = attributes.getValue("autoConnect"); if (autoConnect == null) { autoConnect = "false"; } if ("true".equalsIgnoreCase(autoConnect) || "yes".equalsIgnoreCase(autoConnect)) { subscription.setAutoConnect(true); } else { subscription.setAutoConnect(false); } subscription.setPassword(attributes.getValue("password")); subscription.setType(attributes.getValue("type")); subscription.setUsername(attributes.getValue("username")); return (subscription); } } /** * Digester object creation factory for user instances. */ class MemoryUserCreationFactory implements ObjectCreationFactory { public MemoryUserCreationFactory(MemoryUserDatabase database) { this.database = database; } private MemoryUserDatabase database = null; private Digester digester = null; public Digester getDigester() { return (this.digester); } public void setDigester(Digester digester) { this.digester = digester; } public Object createObject(Attributes attributes) { String username = attributes.getValue("username"); User user = database.createUser(username); user.setFromAddress(attributes.getValue("fromAddress")); user.setFullName(attributes.getValue("fullName")); user.setPassword(attributes.getValue("password")); user.setReplyToAddress(attributes.getValue("replyToAddress")); return (user); } } ././@LongLink0000644000175000017500000000020010423140531011305 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/example2/ApplicationMapping.javalibstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/examp0000644000175000017500000000476010404045220034135 0ustar arnaudarnaud00000000000000/* * Copyright 1999-2001,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example2; import org.apache.struts.action.ActionMapping; /** * Implementation of ActionMapping for the Struts * example application. It defines the following custom properties: *
      *
    • failure - The context-relative URI to which this request * should be forwarded if a validation error occurs on the input * information (typically goes back to the input form). *
    • success - The context-relative URI to which this request * should be forwarded if the requested action is successfully * completed. *
    * * @author Craig R. McClanahan * @version $Rev: 54934 $ $Date: 2004-10-16 18:07:50 +0100 (Sat, 16 Oct 2004) $ */ public final class ApplicationMapping extends ActionMapping { // --------------------------------------------------- Instance Variables /** * The failure URI for this mapping. */ private String failure = null; /** * The success URI for this mapping. */ private String success = null; // ----------------------------------------------------------- Properties /** * Return the failure URI for this mapping. */ public String getFailure() { return (this.failure); } /** * Set the failure URI for this mapping. * * @param failure The failure URI for this mapping */ public void setFailure(String failure) { this.failure = failure; } /** * Return the success URI for this mapping. */ public String getSuccess() { return (this.success); } /** * Set the success URI for this mapping. * * @param success The success URI for this mapping */ public void setSuccess(String success) { this.success = success; } } ././@LongLink0000644000175000017500000000021010423140531011306 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/example2/ApplicationResources.propertieslibstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/examp0000644000175000017500000001246110404045246034142 0ustar arnaudarnaud00000000000000# ============================================================================== # Copyright 2002,2004 The Apache Software Foundation. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # ============================================================================== # button.cancel=Cancel button.confirm=Confirm button.reset=Reset button.save=Save change.message=Your password has expired. Please ask the system administrator to change it. change.try=Try Again change.title=Password Has Expired database.load=Cannot load database from {0} error.database.missing=
  • User database is missing, cannot validate logon credentials
  • error.fromAddress.format=
  • Invalid format for From Address
  • error.fromAddress.required=
  • From Address is required
  • error.fullName.required=
  • Full Name is required
  • error.host.required=
  • Mail Server is required
  • error.noSubscription=
  • No Subscription bean in user session
  • error.password.expired=Your password has expired for username {0} error.password.required=
  • Password is required
  • error.password2.required=
  • Confirmation password is required
  • error.password.match=
  • Password and confirmation password must match
  • error.password.mismatch=
  • Invalid username and/or password, please try again
  • error.replyToAddress.format=
  • Invalid format for Reply To Address
  • error.transaction.token=
  • Cannot submit this form out of order
  • error.type.invalid=
  • Server Type must be 'imap' or 'pop3'
  • error.type.required=
  • Server Type is required
  • error.username.required=
  • Username is required
  • error.username.unique=
  • That username is already in use - please select another
  • errors.footer=
    errors.header=

    Validation Error

    You must correct the following error(s) before proceeding:
      errors.ioException=I/O exception rendering error messages: {0} expired.password=User Password has expired for {0} footer.value=Copyright (C) 1999-2004, The Apache Software Foundation header.value=Struts + Faces + Tiles heading.autoConnect=Auto heading.subscriptions=Current Subscriptions heading.host=Host Name heading.user=User Name heading.type=Server Type heading.action=Action index.heading=MailReader Demonstration Application Options index.logon=Log on to the MailReader Demonstration Application index.registration=Register with the MailReader Demonstration Application index.title=MailReader Demonstration Application (Struts 1.1-dev) index.tour=A Walking Tour of the Example Application layout.title=Struts+Tiles+Faces Example Application linkSubscription.io=I/O Error: {0} linkSubscription.noSubscription=No subscription under attribute {0} linkUser.io=I/O Error: {0} linkUser.noUser=No user under attribute {0} loggedoff.register=Register loggedoff.logon=Log On loggedon.logoff=Log Off logon.footer=Enter your username and password, and press the Log On button logon.header=Logon Form logon.title=MailReader Demonstration Application - Logon mainMenu.heading=Main Menu Options for mainMenu.logoff=Log off MailReader Demonstration Application mainMenu.registration=Edit your user registration profile mainMenu.title=MailReader Demonstration Application - Main Menu option.imap=IMAP Protocol option.pop3=POP3 Protocol prompt.autoConnect=Auto Connect prompt.fromAddress=From Address prompt.fullName=Full Name prompt.mailHostname=Mail Server prompt.mailPassword=Mail Password prompt.mailServerType=Server Type prompt.mailUsername=Mail Username prompt.password=Password prompt.password2=(Repeat) Password prompt.replyToAddress=Reply To Address prompt.username=Username registration.addSubscription=Add registration.deleteSubscription=Delete registration.editSubscription=Edit registration.header.create=Enter Registration Information registration.header.edit=Edit Your Registration Information registration.title.create=Register for the MailReader Demostration Application registration.title.edit=Edit Registration for the MailReader Demonstration Application subscription.title.create=Create New Mail Subscription subscription.title.delete=Delete Existing Mail Subscription subscription.title.edit=Edit Existing Mail Subscription # Standard error messages for validator framework checks errors.required={0} is required. errors.minlength={0} cannot be less than {1} characters. errors.maxlength={0} cannot be greater than {1} characters. errors.invalid={0} is invalid. errors.byte={0} must be an byte. errors.short={0} must be an short. errors.integer={0} must be an integer. errors.long={0} must be an long. errors.float={0} must be an float. errors.double={0} must be an double. errors.date={0} is not a date. errors.range={0} is not in the range {1} through {2}. errors.creditcard={0} is not a valid credit card number. errors.email={0} is an invalid e-mail address. ././@LongLink0000644000175000017500000000021310423140531011311 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/example2/ApplicationResources_ja.propertieslibstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/examp0000644000175000017500000002272110404045246034142 0ustar arnaudarnaud00000000000000# ============================================================================== # Copyright 2002,2004 The Apache Software Foundation. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # ============================================================================== # button.cancel=\u30ad\u30e3\u30f3\u30bb\u30eb button.confirm=\u78ba\u8a8d button.reset=\u30ea\u30bb\u30c3\u30c8 button.save=\u4fdd\u5b58 change.message=\u30D1\u30B9\u30EF\u30FC\u30C9\u306E\u6709\u52B9\u671F\u9650\u304C\u904E\u304E\u307E\u3057\u305F\u3002\u30B7\u30B9\u30C6\u30E0\u7BA1\u7406\u8005\u306B\u304A\u554F\u3044\u5408\u308F\u305B\u4E0B\u3055\u3044 change.try=\u518D\u8A66\u884C change.title=\u30d1\u30b9\u30ef\u30fc\u30c9\u671f\u9650\u5207\u308c database.load= {0} \u304B\u3089\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u3092\u30ED\u30FC\u30C9\u3067\u304D\u307E\u305B\u3093 error.database.missing=
    • \u30E6\u30FC\u30B6\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002\u30ED\u30B0\u30AA\u30F3\u306E\u8A8D\u8A3C\u304C\u51FA\u6765\u307E\u305B\u3093
    • error.fromAddress.format=
    • From\u30A2\u30C9\u30EC\u30B9\u306E\u66F8\u5F0F\u304C\u6B63\u3057\u304F\u3042\u308A\u307E\u305B\u3093
    • error.fromAddress.required=
    • From\u30A2\u30C9\u30EC\u30B9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044
    • error.fullName.required=
    • \u30D5\u30EB\u30CD\u30FC\u30E0\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044
    • error.host.required=
    • \u30E1\u30FC\u30EB\u30B5\u30FC\u30D0\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044
    • error.noSubscription=
    • Subscription bean \u304c\u30bb\u30c3\u30b7\u30e7\u30f3\u306e\u4e2d\u306b\u3042\u308a\u307e\u305b\u3093
    • error.password.expired=\u30E6\u30FC\u30B6 {0} \u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u306E\u6709\u52B9\u671F\u9650\u304C\u904E\u304E\u307E\u3057\u305F error.password.required=
    • \u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u5FC5\u8981\u3067\u3059
    • error.password2.required=
    • \u30D1\u30B9\u30EF\u30FC\u30C9(\u78BA\u8A8D\u7528)\u304C\u5FC5\u8981\u3067\u3059
    • error.password.match=
    • \u30D1\u30B9\u30EF\u30FC\u30C9\u3068\u78BA\u8A8D\u7528\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u4E00\u81F4\u3057\u3066\u3044\u307E\u305B\u3093
    • error.password.mismatch=
    • \u30E6\u30FC\u30B6\u540D\u307E\u305F\u306F\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u4E0D\u6B63\u3067\u3059\u3002\u518D\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044
    • error.replyToAddress.format=
    • \u8FD4\u4FE1\u30A2\u30C9\u30EC\u30B9\u306E\u66F8\u5F0F\u304C\u6B63\u3057\u304F\u3042\u308A\u307E\u305B\u3093
    • error.transaction.token=
    • \u3053\u306E\u30D5\u30A9\u30FC\u30E0\u306E\u5185\u5BB9\u304C\u6B63\u3057\u304F\u306A\u3044\u305F\u3081\u9001\u4FE1\u3059\u308B\u3053\u3068\u304C\u51FA\u6765\u307E\u305B\u3093
    • error.type.invalid=
    • \u30B5\u30FC\u30D0\u30BF\u30A4\u30D7\u306F 'imap' \u304B 'pop3'\u306E\u3069\u3061\u3089\u304B\u3067\u306A\u3051\u308C\u3070\u306A\u308A\u307E\u305B\u3093
    • error.type.required=
    • \u30B5\u30FC\u30D0\u30BF\u30A4\u30D7\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044
    • error.username.required=
    • \u30E6\u30FC\u30B6\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044
    • error.username.unique=
    • \u305D\u306E\u30E6\u30FC\u30B6\u540D\u306F\u65E2\u306B\u4F7F\u7528\u3055\u308C\u3066\u3044\u307E\u3059\u3002 \u5225\u306E\u30E6\u30FC\u30B6\u540D\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044
    • errors.footer=

    errors.header=

    \u5165\u529b\u30c1\u30a7\u30c3\u30af\u30a8\u30e9\u30fc

    \u4ee5\u4e0b\u306e\u30a8\u30e9\u30fc\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044:
      errors.ioException=I/O\u4f8b\u5916\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {0} expired.password=\u30E6\u30FC\u30B6 {0} \u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u306E\u6709\u52B9\u671F\u9650\u304C\u904E\u304E\u307E\u3057\u305F heading.autoConnect=\u81ea\u52d5\u63a5\u7d9a heading.subscriptions=\u73fe\u5728\u306e\u8cfc\u8aad\u60c5\u5831 heading.host=\u30db\u30b9\u30c8\u540d heading.user=\u30e6\u30fc\u30b6\u540d heading.type=\u30b5\u30fc\u30d0\u30bf\u30a4\u30d7 heading.action=\u64cd\u4f5c index.heading=MailReader\u30c7\u30e2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3 \u30aa\u30d7\u30b7\u30e7\u30f3 index.logon=MailReader\u30c7\u30e2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3 - \u30ed\u30b0\u30aa\u30f3 index.registration=MailReader\u30c7\u30e2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3 - \u30e6\u30fc\u30b6\u767b\u9332 index.title=MailReader\u30c7\u30e2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3(Struts 1.1-dev) index.tour=\u30b5\u30f3\u30d7\u30eb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u6563\u7b56\u3059\u308b linkSubscription.io=I/O\u30a8\u30e9\u30fc: {0} linkSubscription.noSubscription=\u5c5e\u6027 {0} \u306b\u8cfc\u8aad\u60c5\u5831\u304c\u5b58\u5728\u3057\u307e\u305b\u3093 linkUser.io=I/O\u30a8\u30e9\u30fc: {0} linkUser.noUser=\u5c5e\u6027 {0} \u306b\u30e6\u30fc\u30b6\u60c5\u5831\u304c\u5b58\u5728\u3057\u307e\u305b\u3093 logon.title=MailReader\u30c7\u30e2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3 - \u30ed\u30b0\u30aa\u30f3 mainMenu.heading=\u30e1\u30a4\u30f3\u30e1\u30cb\u30e5\u30fc mainMenu.logoff=MailReader \u30c7\u30e2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30ed\u30b0\u30aa\u30d5 mainMenu.registration=\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u306e\u7de8\u96c6 mainMenu.title=MailReader\u30c7\u30e2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3 - \u30e1\u30a4\u30f3\u30e1\u30cb\u30e5\u30fc option.imap=IMAP \u30d7\u30ed\u30c8\u30b3\u30eb option.pop3=POP3 \u30d7\u30ed\u30c8\u30b3\u30eb prompt.autoConnect=\u81ea\u52d5\u63a5\u7d9a prompt.fromAddress=From\u30a2\u30c9\u30ec\u30b9 prompt.fullName=\u30d5\u30eb\u30cd\u30fc\u30e0 prompt.mailHostname=\u30e1\u30fc\u30eb\u30b5\u30fc\u30d0 prompt.mailPassword=\u30e1\u30fc\u30eb\u30d1\u30b9\u30ef\u30fc\u30c9 prompt.mailServerType=\u30b5\u30fc\u30d0\u30bf\u30a4\u30d7 prompt.mailUsername=\u30e1\u30fc\u30eb\u30e6\u30fc\u30b6\u540d prompt.password=\u30d1\u30b9\u30ef\u30fc\u30c9 prompt.password2=\u30d1\u30b9\u30ef\u30fc\u30c9(\u78ba\u8a8d\u7528) prompt.replyToAddress=\u8fd4\u4fe1\u30a2\u30c9\u30ec\u30b9 prompt.username=\u30e6\u30fc\u30b6\u540d registration.addSubscription=\u65b0\u898f\u4f5c\u6210 registration.deleteSubscription=\u524a\u9664 registration.editSubscription=\u7de8\u96c6 registration.title.create=MailReader\u30c7\u30e2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3 - \u30e6\u30fc\u30b6\u767b\u9332 registration.title.edit=MailReader\u30c7\u30e2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3 - \u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u7de8\u96c6 subscription.title.create=\u30e1\u30fc\u30eb\u8cfc\u8aad\u60c5\u5831\u306e\u65b0\u898f\u4f5c\u6210 subscription.title.delete=\u30e1\u30fc\u30eb\u8cfc\u8aad\u60c5\u5831\u306e\u524a\u9664 subscription.title.edit=\u30e1\u30fc\u30eb\u8cfc\u8aad\u60c5\u5831\u306e\u7de8\u96c6 # Standard error messages for validator framework checks errors.required={0} \u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 errors.minlength={0} \u306f {1} \u6587\u5b57\u4ee5\u4e0a\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 errors.maxlength={0} \u306f {2} \u6587\u5b57\u4ee5\u4e0b\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 errors.invalid={0} \u306f\u6b63\u3057\u304f\u3042\u308a\u307e\u305b\u3093\u3002 errors.byte={0} \u306fbyte\u578b\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 errors.short={0} \u306fshort\u578b\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 errors.integer={0} \u306finteger\u578b\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 errors.long={0} \u306flong\u578b\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 errors.float={0} \u306ffloat\u578b\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 errors.double={0} \u306fdouble\u578b\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 errors.date={0} \u306f\u65e5\u4ed8\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 errors.range={0} \u306f {1} \u304b\u3089 {2} \u306e\u9593\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 errors.creditcard={0} \u306f\u6b63\u3057\u3044\u30af\u30ec\u30b8\u30c3\u30c8\u30ab\u30fc\u30c9\u756a\u53f7\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 errors.email={0} \u306f\u6b63\u3057\u3044\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 registration.header.edit=\u767B\u9332\u60C5\u5831\u7DE8\u96C6 registration.header.create=\u767B\u9332\u60C5\u5831\u5165\u529B layout.title=Struts+Tiles+Faces\u30B5\u30F3\u30D7\u30EB\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3 loggedoff.register=\u767B\u9332 loggedoff.logon=\u30ED\u30B0\u30AA\u30F3 loggedon.logoff=\u30ED\u30B0\u30AA\u30D5 logon.footer=\u30E6\u30FC\u30B6\u540D\u3068\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5165\u529B\u3057\u3066\u30ED\u30B0\u30AA\u30F3\u30DC\u30BF\u30F3\u3092\u62BC\u3057\u3066\u304F\u3060\u3055\u3044 logon.header=\u30ED\u30B0\u30AA\u30F3\u30D5\u30A9\u30FC\u30E0 ././@LongLink0000644000175000017500000000021310423140531011311 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/example2/ApplicationResources_ru.propertieslibstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/examp0000644000175000017500000003117610404045250034141 0ustar arnaudarnaud00000000000000# ============================================================================== # Copyright 2002,2004 The Apache Software Foundation. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # ============================================================================== # button.cancel=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c button.confirm=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c button.reset=\u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c button.save=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c database.load=\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u0430 \u0438\u0437 {0} error.database.missing=
    • \u041d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f - \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e.
    • error.fromAddress.format=
    • \u0412 \u043f\u043e\u043b\u0435 '\u0410\u0434\u0440\u0435\u0441 \u041e\u0442:' \u0443\u043a\u0430\u0437\u0430\u043d \u0430\u0434\u0440\u0435\u0441 \u0432 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435.
    • error.fromAddress.required=
    • \u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u0432 \u043f\u043e\u043b\u0435 '\u0410\u0434\u0440\u0435\u0441 \u041e\u0442:'.
    • error.fullName.required=
    • \u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0435 \u0438\u043c\u044f.
    • error.host.required=
    • \u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u0447\u0442\u043e\u0432\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440.
    • error.noSubscription=
    • \u041f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430 \u0432 \u0441\u0435\u0441\u0441\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f
    • error.password.required=
    • \u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c.
    • error.password2.required=
    • \u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u043e\u043b\u044f.
    • error.password.match=
    • \u041f\u0430\u0440\u043e\u043b\u044c \u0438 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u043e\u043b\u044f \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442.
    • error.password.mismatch=
    • \u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0438\u043c\u044f \u0438/\u0438\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u044c - \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0441\u043d\u043e\u0432\u0430.
    • error.replyToAddress.format=
    • \u0412 \u043f\u043e\u043b\u0435 '\u0410\u0434\u0440\u0435\u0441 \u041e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043d\u0430:' \u0443\u043a\u0430\u0437\u0430\u043d \u0430\u0434\u0440\u0435\u0441 \u0432 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435.
    • error.transaction.token=
    • \u042d\u0442\u0430 \u0444\u043e\u0440\u043c\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u0430 - \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0437\u0430\u043d\u0435\u0441\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445.
    • error.type.invalid=
    • \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0438\u043f\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u043b\u0438\u0448\u044c 'imap' \u0438\u043b\u0438 'pop3'
    • error.type.required=
    • \u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0438\u043f \u0441\u0435\u0440\u0432\u0435\u0440\u0430
    • error.username.required=
    • \u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f
    • error.username.unique=
    • \u0423\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f - \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0434\u0440\u0443\u0433\u043e\u0435 \u0438\u043c\u044f.
    • errors.footer=

    errors.header=

    \u041e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u0438 \u0437\u0430\u043d\u0435\u0441\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445

    \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u043d\u0438\u0436\u0435 \u043e\u0448\u0438\u0431\u043a\u0438:
      errors.ioException=\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0432\u043e\u0434\u0430/\u0432\u044b\u0432\u043e\u0434\u0430 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445: {0} heading.autoConnect=\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 heading.subscriptions=\u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438 heading.host=\u0421\u0435\u0440\u0432\u0435\u0440 heading.user=\u0418\u043c\u044f heading.type=\u0422\u0438\u043f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 heading.action=\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 index.heading=\u0414\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 '\u0427\u0442\u0435\u043d\u0438\u0435 \u043f\u043e\u0447\u0442\u044b' index.logon=\u0412\u043e\u0439\u0442\u0438 \u043a\u0430\u043a \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c index.registration=\u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f index.title=\u0414\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 '\u0427\u0442\u0435\u043d\u0438\u0435 \u043f\u043e\u0447\u0442\u044b' (Struts 1.1-dev) index.tour=\u041e\u0431\u0437\u043e\u0440 \u0414\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f '\u0427\u0442\u0435\u043d\u0438\u0435 \u043f\u043e\u0447\u0442\u044b' linkSubscription.io=\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0432\u043e\u0434\u0430/\u0432\u044b\u0432\u043e\u0434\u0430 (\u0434\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438): {0} linkSubscription.noSubscription=\u0410\u0442\u0440\u0438\u0431\u0443\u0442 {0} \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0435 \u0438\u043b\u0438 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. linkUser.io=\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0432\u043e\u0434\u0430/\u0432\u044b\u0432\u043e\u0434\u0430 (\u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f): {0} linkUser.noUser=\u0410\u0442\u0440\u0438\u0431\u0443\u0442 {0} \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435 \u0438\u043b\u0438 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. logon.title=\u0414\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0427\u0442\u0435\u043d\u0438\u0435 \u043f\u043e\u0447\u0442\u044b - \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0438\u043c\u0435\u043d\u0438 \u0438 \u043f\u0430\u0440\u043e\u043b\u044f. mainMenu.heading=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044e \u0434\u043b\u044f mainMenu.logoff=\u0412\u044b\u0439\u0442\u0438 mainMenu.registration=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 mainMenu.title=\u0414\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 '\u0427\u0442\u0435\u043d\u0438\u0435 \u043f\u043e\u0447\u0442\u044b' - \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u043c\u0435\u043d\u044e option.imap=\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b IMAP option.pop3=\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b POP3 prompt.autoConnect=\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435: prompt.fromAddress=\u0410\u0434\u0440\u0435\u0441 \u041e\u0442: prompt.fullName=\u041f\u043e\u043b\u043d\u043e\u0435 \u0438\u043c\u044f: prompt.mailHostname=\u041f\u043e\u0447\u0442\u043e\u0432\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440: prompt.mailPassword=\u041f\u0430\u0440\u043e\u043b\u044c \u0434\u043b\u044f \u043f\u043e\u0447\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430: prompt.mailServerType=\u0422\u0438\u043f \u0441\u0435\u0440\u0432\u0435\u0440\u0430: prompt.mailUsername=\u0418\u043c\u044f \u0434\u043b\u044f \u043f\u043e\u0447\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430: prompt.password=\u041f\u0430\u0440\u043e\u043b\u044c: prompt.password2=(\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435) \u041f\u0430\u0440\u043e\u043b\u044c: prompt.replyToAddress=\u0410\u0434\u0440\u0435\u0441 \u041e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043d\u0430: prompt.username=\u0418\u043c\u044f: registration.addSubscription=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c registration.deleteSubscription=\u0423\u0434\u0430\u043b\u0438\u0442\u044c registration.editSubscription=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c registration.title.create=\u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f registration.title.edit=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0441\u0432\u043e\u0435\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 subscription.title.create=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0443 subscription.title.delete=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0443 subscription.title.edit=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0443 ././@LongLink0000644000175000017500000000017310423140531011316 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/example2/CheckLogonTag.javalibstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/examp0000644000175000017500000000666510404045204034145 0ustar arnaudarnaud00000000000000/* * Copyright 1999-2001,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example2; import javax.servlet.http.HttpSession; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.TagSupport; /** * Check for a valid User logged on in the current session. If there is no * such user, forward control to the logon page. * * @author Craig R. McClanahan * @author Marius Barduta * @version $Rev: 54934 $ $Date: 2004-10-16 18:07:50 +0100 (Sat, 16 Oct 2004) $ */ public final class CheckLogonTag extends TagSupport { // --------------------------------------------------- Instance Variables /** * The key of the session-scope bean we look for. */ private String name = Constants.USER_KEY; /** * The page to which we should forward for the user to log on. */ private String page = "/logon.jsp"; // ----------------------------------------------------------- Properties /** * Return the bean name. */ public String getName() { return (this.name); } /** * Set the bean name. * * @param name The new bean name */ public void setName(String name) { this.name = name; } /** * Return the forward page. */ public String getPage() { return (this.page); } /** * Set the forward page. * * @param page The new forward page */ public void setPage(String page) { this.page = page; } // ------------------------------------------------------- Public Methods /** * Defer our checking until the end of this tag is encountered. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { return (SKIP_BODY); } /** * Perform our logged-in user check by looking for the existence of * a session scope bean under the specified name. If this bean is not * present, control is forwarded to the specified logon page. * * @exception JspException if a JSP exception has occurred */ public int doEndTag() throws JspException { // Is there a valid user logged on? boolean valid = false; HttpSession session = pageContext.getSession(); if ((session != null) && (session.getAttribute(name) != null)) valid = true; // Forward control based on the results if (valid) return (EVAL_PAGE); else { try { pageContext.forward(page); } catch (Exception e) { throw new JspException(e.toString()); } return (SKIP_PAGE); } } /** * Release any acquired resources. */ public void release() { super.release(); this.name = Constants.USER_KEY; this.page = "/logon.jsp"; } } ././@LongLink0000644000175000017500000000016710423140531011321 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/example2/Constants.javalibstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/examp0000644000175000017500000000315310404045214034133 0ustar arnaudarnaud00000000000000/* * Copyright 1999-2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example2; /** * Manifest constants for the example application. * * @author Craig R. McClanahan * @version $Rev: 54934 $ $Date: 2004-10-16 18:07:50 +0100 (Sat, 16 Oct 2004) $ */ public final class Constants { /** * The package name for this application. */ public static final String Package = "org.apache.struts.webapp.example"; /** * The application scope attribute under which our user database * is stored. */ public static final String DATABASE_KEY = "database"; /** * The session scope attribute under which the Subscription object * currently selected by our logged-in User is stored. */ public static final String SUBSCRIPTION_KEY = "subscription"; /** * The session scope attribute under which the User object * for the currently logged in user is stored. */ public static final String USER_KEY = "user"; } ././@LongLink0000644000175000017500000000020410423140531011311 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/example2/EditRegistrationAction.javalibstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/examp0000644000175000017500000001320410404045212034127 0ustar arnaudarnaud00000000000000/* * Copyright 1999-2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example2; import java.lang.reflect.InvocationTargetException; import java.util.Locale; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.util.MessageResources; /** * Implementation of Action that populates an instance of * RegistrationForm from the profile of the currently logged on * User (if any). * * @author Craig R. McClanahan * @version $Rev: 54936 $ $Date: 2004-10-16 18:57:09 +0100 (Sat, 16 Oct 2004) $ */ public final class EditRegistrationAction extends Action { // ----------------------------------------------------- Instance Variables /** * The Log instance for this application. */ private Log log = LogFactory.getLog("org.apache.struts.webapp.Example"); // --------------------------------------------------------- Public Methods /** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it). * Return an ActionForward instance describing where and how * control should be forwarded, or null if the response has * already been completed. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception Exception if the application business logic throws * an exception */ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // Extract attributes we will need Locale locale = getLocale(request); MessageResources messages = getResources(request); HttpSession session = request.getSession(); String action = request.getParameter("action"); if (action == null) action = "Create"; if (log.isDebugEnabled()) { log.debug("EditRegistrationAction: Processing " + action + " action"); } // Is there a currently logged on user? User user = null; if (!"Create".equals(action)) { user = (User) session.getAttribute(Constants.USER_KEY); if (user == null) { if (log.isDebugEnabled()) { log.debug(" User is not logged on in session " + session.getId()); } return (mapping.findForward("logon")); } } // Populate the user registration form if (form == null) { if (log.isTraceEnabled()) { log.trace(" Creating new RegistrationForm bean under key " + mapping.getAttribute()); } form = new RegistrationForm(); if ("request".equals(mapping.getScope())) request.setAttribute(mapping.getAttribute(), form); else session.setAttribute(mapping.getAttribute(), form); } RegistrationForm regform = (RegistrationForm) form; if (user != null) { if (log.isTraceEnabled()) { log.trace(" Populating form from " + user); } try { PropertyUtils.copyProperties(regform, user); regform.setAction(action); regform.setPassword(null); regform.setPassword2(null); } catch (InvocationTargetException e) { Throwable t = e.getTargetException(); if (t == null) t = e; log.error("RegistrationForm.populate", t); throw new ServletException("RegistrationForm.populate", t); } catch (Throwable t) { log.error("RegistrationForm.populate", t); throw new ServletException("RegistrationForm.populate", t); } } // Set a transactional control token to prevent double posting if (log.isTraceEnabled()) { log.trace(" Setting transactional control token"); } saveToken(request); // Forward control to the edit user registration page if (log.isTraceEnabled()) { log.trace(" Forwarding to 'success' page"); } if ("Create".equals(action)) { return (mapping.findForward("register")); } else { return (mapping.findForward("success")); } } } ././@LongLink0000644000175000017500000000020410423140531011311 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/example2/EditSubscriptionAction.javalibstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/examp0000644000175000017500000001344410404045244034142 0ustar arnaudarnaud00000000000000/* * Copyright 1999-2001,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example2; import java.lang.reflect.InvocationTargetException; import java.util.Locale; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.util.MessageResources; /** * Implementation of Action that populates an instance of * SubscriptionForm from the currently specified subscription. * * @author Craig R. McClanahan * @version $Rev: 54936 $ $Date: 2004-10-16 18:57:09 +0100 (Sat, 16 Oct 2004) $ */ public final class EditSubscriptionAction extends Action { // ----------------------------------------------------- Instance Variables /** * The Log instance for this application. */ private Log log = LogFactory.getLog("org.apache.struts.webapp.Example"); // --------------------------------------------------------- Public Methods /** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it). * Return an ActionForward instance describing where and how * control should be forwarded, or null if the response has * already been completed. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception Exception if the application business logic throws * an exception */ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // Extract attributes we will need Locale locale = getLocale(request); MessageResources messages = getResources(request); HttpSession session = request.getSession(); String action = request.getParameter("action"); if (action == null) { action = "Create"; } String host = request.getParameter("host"); if (log.isDebugEnabled()) { log.debug("EditSubscriptionAction: Processing " + action + " action"); } // Is there a currently logged on user? User user = (User) session.getAttribute(Constants.USER_KEY); if (user == null) { if (log.isTraceEnabled()) { log.trace(" User is not logged on in session " + session.getId()); } return (mapping.findForward("logon")); } // Identify the relevant subscription Subscription subscription = user.findSubscription(request.getParameter("host")); if ((subscription == null) && !action.equals("Create")) { if (log.isTraceEnabled()) { log.trace(" No subscription for user " + user.getUsername() + " and host " + host); } return (mapping.findForward("failure")); } if (subscription != null) { session.setAttribute(Constants.SUBSCRIPTION_KEY, subscription); } // Populate the subscription form if (form == null) { if (log.isTraceEnabled()) { log.trace(" Creating new SubscriptionForm bean under key " + mapping.getAttribute()); } form = new SubscriptionForm(); if ("request".equals(mapping.getScope())) { request.setAttribute(mapping.getAttribute(), form); } else { session.setAttribute(mapping.getAttribute(), form); } } SubscriptionForm subform = (SubscriptionForm) form; subform.setAction(action); if (!action.equals("Create")) { if (log.isTraceEnabled()) { log.trace(" Populating form from " + subscription); } try { PropertyUtils.copyProperties(subform, subscription); subform.setAction(action); } catch (InvocationTargetException e) { Throwable t = e.getTargetException(); if (t == null) t = e; log.error("SubscriptionForm.populate", t); throw new ServletException("SubscriptionForm.populate", t); } catch (Throwable t) { log.error("SubscriptionForm.populate", t); throw new ServletException("SubscriptionForm.populate", t); } } // Forward control to the edit subscription page if (log.isTraceEnabled()) { log.trace(" Forwarding to 'success' page"); } return (mapping.findForward("success")); } } ././@LongLink0000644000175000017500000000020610423140531011313 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/example2/ExpiredPasswordException.javalibstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/examp0000644000175000017500000000227010404045226034135 0ustar arnaudarnaud00000000000000/* * Copyright 1999-2001,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example2; import org.apache.struts.util.ModuleException; /** * Example of an application-specific exception for which a handler * can be configured. */ public class ExpiredPasswordException extends ModuleException { /** * Construct a new instance of this exception for the specified username. * * @param username Username whose password has expired */ public ExpiredPasswordException(String username) { super("error.password.expired", username); } } ././@LongLink0000644000175000017500000000020110423140531011306 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/example2/LinkSubscriptionTag.javalibstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/examp0000644000175000017500000000631010404045216034133 0ustar arnaudarnaud00000000000000/* * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example2; import javax.faces.component.UIComponent; import javax.faces.el.ValueBinding; import javax.faces.webapp.UIComponentTag; /** * Generate a URL-encoded hyperlink to the specified URI, with * associated query parameters selecting a specified Subscription. * * @author Craig R. McClanahan * @version $Rev: 54934 $ $Date: 2004-10-16 18:07:50 +0100 (Sat, 16 Oct 2004) $ */ public class LinkSubscriptionTag extends UIComponentTag { // -------------------------------------------------------------- Attributes /** * The attribute name. */ protected String name = "subscription"; public void setName(String name) { this.name = name; } /** * The context-relative URI. */ protected String page = null; public void setPage(String page) { this.page = page; } // ---------------------------------------------------------- Public Methods /** * Return the component type for this tag.

      */ public String getComponentType() { return ("Output"); } /** *

      Return the renderer type associated with this tag.

      */ public String getRendererType() { return ("LinkSubscription"); } /** *

      Release resources allocated to this tag instance.

      */ public void release() { super.release(); this.name = "subscription"; this.page = null; } // ------------------------------------------------------- Protected Methods /** *

      Override attributes set on this tag instance.

      * * @param component Component whose attributes should be overridden */ protected void setProperties(UIComponent component) { super.setProperties(component); if (name != null) { if (isValueReference(name)) { ValueBinding vb = getFacesContext().getApplication().createValueBinding(name); component.setValueBinding("name", vb); } else { component.getAttributes().put("name", name); } } if (page != null) { if (isValueReference(page)) { ValueBinding vb = getFacesContext().getApplication().createValueBinding(page); component.setValueBinding("page", vb); } else { component.getAttributes().put("page", page); } } } } ././@LongLink0000644000175000017500000000017110423140531011314 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/example2/LinkUserTag.javalibstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/examp0000644000175000017500000001111110404045206034125 0ustar arnaudarnaud00000000000000/* * Copyright 1999-2001,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example2; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.TagSupport; import org.apache.struts.util.MessageResources; import org.apache.struts.util.ResponseUtils; /** * Generate a URL-encoded hyperlink to the specified URI, with * associated query parameters selecting a specified User. * * @author Craig R. McClanahan * @version $Rev: 54934 $ $Date: 2004-10-16 18:07:50 +0100 (Sat, 16 Oct 2004) $ */ public class LinkUserTag extends TagSupport { // ------------------------------------------------------ Instance Variables /** * The hyperlink URI. */ protected String page = null; /** * The message resources for this package. */ protected static MessageResources messages = MessageResources.getMessageResources ("org.apache.struts.webapp.example.ApplicationResources"); /** * The attribute name. */ private String name = "user"; // ------------------------------------------------------------- Properties /** * Return the hyperlink URI. */ public String getPage() { return (this.page); } /** * Set the hyperlink URI. * * @param page Set the hyperlink URI */ public void setPage(String page) { this.page = page; } /** * Return the attribute name. */ public String getName() { return (this.name); } /** * Set the attribute name. * * @param name The new attribute name */ public void setName(String name) { this.name = name; } // --------------------------------------------------------- Public Methods /** * Render the beginning of the hyperlink. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { // Generate the URL to be encoded HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); StringBuffer url = new StringBuffer(request.getContextPath()); url.append(page); User user = null; try { user = (User) pageContext.findAttribute(name); } catch (ClassCastException e) { user = null; } if (user == null) throw new JspException (messages.getMessage("linkUser.noUser", name)); if (page.indexOf("?") < 0) url.append("?"); else url.append("&"); url.append("username="); url.append(ResponseUtils.filter(user.getUsername())); // Generate the hyperlink start element HttpServletResponse response = (HttpServletResponse) pageContext.getResponse(); StringBuffer results = new StringBuffer(""); // Print this element to our output writer JspWriter writer = pageContext.getOut(); try { writer.print(results.toString()); } catch (IOException e) { throw new JspException (messages.getMessage("linkUser.io", e.toString())); } // Evaluate the body of this tag return (EVAL_BODY_INCLUDE); } /** * Render the end of the hyperlink. * * @exception JspException if a JSP exception has occurred */ public int doEndTag() throws JspException { // Print the ending element to our output writer JspWriter writer = pageContext.getOut(); try { writer.print(""); } catch (IOException e) { throw new JspException (messages.getMessage("link.io", e.toString())); } return (EVAL_PAGE); } /** * Release any acquired resources. */ public void release() { super.release(); this.page = null; this.name = "user"; } } ././@LongLink0000644000175000017500000000016710423140531011321 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/example2/LoggedOff.javalibstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/examp0000644000175000017500000000516610404045222034140 0ustar arnaudarnaud00000000000000/* * Copyright 1999-2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example2; import java.io.IOException; import javax.faces.FacesException; import javax.faces.context.FacesContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** *

      Backing bean for the loggedoff.jsp page.

      */ public class LoggedOff { // ------------------------------------------------------ Instance Variables private static final Log log = LogFactory.getLog(LoggedOff.class); // ----------------------------------------------------------------- Actions /** *

      Begin the process of registering a new user.

      */ public String register() { FacesContext context = FacesContext.getCurrentInstance(); if (log.isDebugEnabled()) { log.debug("register(" + context + ")"); } forward(context, "/editRegistration.do?action=Create"); return (null); } /** *

      Begin the process of logging on.

      */ public String logon() { FacesContext context = FacesContext.getCurrentInstance(); if (log.isDebugEnabled()) { log.debug("logon(" + context + ")"); } forward(context, "/editLogon.do"); return (null); } // --------------------------------------------------------- Private Methods /** *

      Forward to the specified URL and mark this response as having * been completed.

      * * @param context FacesContext for the current request * @param url Context-relative URL to forward to * * @exception FacesException if any error occurs */ private void forward(FacesContext context, String url) { try { context.getExternalContext().dispatch(url); } catch (IOException e) { throw new FacesException(e); } finally { context.responseComplete(); } } } ././@LongLink0000644000175000017500000000016610423140531011320 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/example2/LoggedOn.javalibstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/examp0000644000175000017500000000436510404045216034143 0ustar arnaudarnaud00000000000000/* * Copyright 1999-2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example2; import java.io.IOException; import javax.faces.FacesException; import javax.faces.context.FacesContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** *

      Backing bean for the loggedon.jsp page.

      */ public class LoggedOn { // ------------------------------------------------------ Instance Variables private static final Log log = LogFactory.getLog(LoggedOn.class); // ----------------------------------------------------------------- Actions /** *

      Begin the process of logging off.

      */ public String logoff() { FacesContext context = FacesContext.getCurrentInstance(); if (log.isDebugEnabled()) { log.debug("logoff(" + context + ")"); } forward(context, "/logoff.do"); return (null); } // --------------------------------------------------------- Private Methods /** *

      Forward to the specified URL and mark this response as having * been completed.

      * * @param context FacesContext for the current request * @param url Context-relative URL to forward to * * @exception FacesException if any error occurs */ private void forward(FacesContext context, String url) { try { context.getExternalContext().dispatch(url); } catch (IOException e) { throw new FacesException(e); } finally { context.responseComplete(); } } } ././@LongLink0000644000175000017500000000017210423140531011315 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/example2/LogoffAction.javalibstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/examp0000644000175000017500000000677210404045230034143 0ustar arnaudarnaud00000000000000/* * Copyright 1999-2001,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example2; import java.util.Locale; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.util.MessageResources; /** * Implementation of Action that processes a * user logoff. * * @author Craig R. McClanahan * @version $Rev: 54936 $ $Date: 2004-10-16 18:57:09 +0100 (Sat, 16 Oct 2004) $ */ public final class LogoffAction extends Action { // ----------------------------------------------------- Instance Variables /** * The Log instance for this application. */ private Log log = LogFactory.getLog("org.apache.struts.webapp.Example"); // --------------------------------------------------------- Public Methods /** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it). * Return an ActionForward instance describing where and how * control should be forwarded, or null if the response has * already been completed. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception Exception if business logic throws an exception */ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // Extract attributes we will need Locale locale = getLocale(request); MessageResources messages = getResources(request); HttpSession session = request.getSession(); User user = (User) session.getAttribute(Constants.USER_KEY); // Process this user logoff if (user != null) { if (log.isDebugEnabled()) { log.debug("LogoffAction: User '" + user.getUsername() + "' logged off in session " + session.getId()); } } else { if (log.isDebugEnabled()) { log.debug("LogoffActon: User logged off in session " + session.getId()); } } session.removeAttribute(Constants.SUBSCRIPTION_KEY); session.removeAttribute(Constants.USER_KEY); session.invalidate(); // Forward control to the specified success URI return (mapping.findForward("success")); } } ././@LongLink0000644000175000017500000000017110423140531011314 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/example2/LogonAction.javalibstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/examp0000644000175000017500000001317110404045212034132 0ustar arnaudarnaud00000000000000/* * Copyright 1999-2001,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example2; import java.util.Locale; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.action.Action; import org.apache.struts.action.ActionError; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.util.MessageResources; import org.apache.struts.util.ModuleException; /** * Implementation of Action that validates a user logon. * * @author Craig R. McClanahan * @version $Rev: 54936 $ $Date: 2004-10-16 18:57:09 +0100 (Sat, 16 Oct 2004) $ */ public final class LogonAction extends Action { // ----------------------------------------------------- Instance Variables /** * The Log instance for this application. */ private Log log = LogFactory.getLog("org.apache.struts.webapp.Example"); // --------------------------------------------------------- Public Methods /** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it). * Return an ActionForward instance describing where and how * control should be forwarded, or null if the response has * already been completed. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception Exception if business logic throws an exception */ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // Extract attributes we will need Locale locale = getLocale(request); MessageResources messages = getResources(request); User user = null; // Validate the request parameters specified by the user ActionErrors errors = new ActionErrors(); String username = (String) PropertyUtils.getSimpleProperty(form, "username"); String password = (String) PropertyUtils.getSimpleProperty(form, "password"); UserDatabase database = (UserDatabase) servlet.getServletContext().getAttribute(Constants.DATABASE_KEY); if (database == null) errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("error.database.missing")); else { user = getUser(database, username); if ((user != null) && !user.getPassword().equals(password)) user = null; if (user == null) errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("error.password.mismatch")); } // Report any errors we have discovered back to the original form if (!errors.isEmpty()) { saveErrors(request, errors); return (mapping.getInputForward()); } // Save our logged-in user in the session HttpSession session = request.getSession(); session.setAttribute(Constants.USER_KEY, user); if (log.isDebugEnabled()) { log.debug("LogonAction: User '" + user.getUsername() + "' logged on in session " + session.getId()); } // Remove the obsolete form bean if (mapping.getAttribute() != null) { if ("request".equals(mapping.getScope())) request.removeAttribute(mapping.getAttribute()); else session.removeAttribute(mapping.getAttribute()); } // Forward control to the specified success URI return (mapping.findForward("success")); } // ------------------------------------------------------ Protected Methods /** * Look up the user, throwing an exception to simulate business logic * rule exceptions. * * @param database Database in which to look up the user * @param username Username specified on the logon form * * @exception AppException if a business logic rule is violated */ public User getUser(UserDatabase database, String username) throws ModuleException { // Force an ArithmeticException which can be handled explicitly if ("arithmetic".equals(username)) { throw new ArithmeticException(); } // Force an application-specific exception which can be handled if ("expired".equals(username)) { throw new ExpiredPasswordException(username); } // Look up and return the specified user return ((User) database.findUser(username)); } } ././@LongLink0000644000175000017500000000016710423140531011321 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/example2/LogonForm.javalibstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/examp0000644000175000017500000000723610404045244034144 0ustar arnaudarnaud00000000000000/* * Copyright 1999-2001,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example2; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionError; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; /** * Form bean for the user profile page. This form has the following fields, * with default values in square brackets: *
        *
      • password - Entered password value *
      • username - Entered username value *
      * * @author Craig R. McClanahan * @version $Rev: 54934 $ $Date: 2004-10-16 18:07:50 +0100 (Sat, 16 Oct 2004) $ */ public final class LogonForm extends ActionForm { // --------------------------------------------------- Instance Variables /** * The password. */ private String password = null; /** * The username. */ private String username = null; // ----------------------------------------------------------- Properties /** * Return the password. */ public String getPassword() { return (this.password); } /** * Set the password. * * @param password The new password */ public void setPassword(String password) { this.password = password; } /** * Return the username. */ public String getUsername() { return (this.username); } /** * Set the username. * * @param username The new username */ public void setUsername(String username) { this.username = username; } // --------------------------------------------------------- Public Methods /** * Reset all properties to their default values. * * @param mapping The mapping used to select this instance * @param request The servlet request we are processing */ public void reset(ActionMapping mapping, HttpServletRequest request) { this.password = null; this.username = null; } /** * Validate the properties that have been set from this HTTP request, * and return an ActionErrors object that encapsulates any * validation errors that have been found. If no errors are found, return * null or an ActionErrors object with no * recorded error messages. * * @param mapping The mapping used to select this instance * @param request The servlet request we are processing */ public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { ActionErrors errors = new ActionErrors(); if ((username == null) || (username.length() < 1)) errors.add("username", new ActionError("error.username.required")); if ((password == null) || (password.length() < 1)) errors.add("password", new ActionError("error.password.required")); return errors; } } ././@LongLink0000644000175000017500000000020110423140531011306 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/example2/RegistrationBacking.javalibstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/examp0000644000175000017500000001046410404045232034136 0ustar arnaudarnaud00000000000000/* * Copyright 1999-2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example2; import java.io.IOException; import javax.faces.FacesException; import javax.faces.context.FacesContext; /** *

      Backing bean for the registration.jsp page.

      */ public class RegistrationBacking { // -------------------------------------------------------------- Properties // These methods exist to work around a bug in the PFD version of the // rendering for that disallows constant values on // per-row command and output components public String getDeleteLabel() { return ("Delete"); } public String getEditLabel() { return ("Edit"); } // ----------------------------------------------------------------- Actions /** *

      Create a new subscription.

      */ public String create() { FacesContext context = FacesContext.getCurrentInstance(); StringBuffer url = base(context); url.append("?action=Create"); url.append("&username="); User user = (User) context.getExternalContext().getSessionMap().get("user"); url.append(user.getUsername()); forward(context, url.toString()); return (null); } /** *

      Delete an existing subscription.

      */ public String delete() { FacesContext context = FacesContext.getCurrentInstance(); StringBuffer url = base(context); url.append("?action=Delete"); url.append("&username="); User user = (User) context.getExternalContext().getSessionMap().get("user"); url.append(user.getUsername()); url.append("&host="); Subscription subscription = (Subscription) context.getExternalContext().getRequestMap().get("subscription"); url.append(subscription.getHost()); forward(context, url.toString()); return (null); } /** *

      Edit an existing subscription.

      */ public String edit() { FacesContext context = FacesContext.getCurrentInstance(); StringBuffer url = base(context); url.append("?action=Edit"); url.append("&username="); User user = (User) context.getExternalContext().getSessionMap().get("user"); url.append(user.getUsername()); url.append("&host="); Subscription subscription = (Subscription) context.getExternalContext().getRequestMap().get("subscription"); url.append(subscription.getHost()); forward(context, url.toString()); return (null); } // --------------------------------------------------------- Private Methods /** *

      Return the context relative base URL for the "edit subscriptions" * action.

      * * @param context FacesContext for the current request */ private StringBuffer base(FacesContext context) { // FIXME - assumes extension mapping for Struts return (new StringBuffer("/editSubscription.do")); } /** *

      Forward to the specified URL and mark this response as having * been completed.

      * * @param context FacesContext for the current request * @param url Context-relative URL to forward to * * @exception FacesException if any error occurs */ private void forward(FacesContext context, String url) { try { context.getExternalContext().dispatch(url); } catch (IOException e) { throw new FacesException(e); } finally { context.responseComplete(); } } } ././@LongLink0000644000175000017500000000017610423140531011321 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/example2/RegistrationForm.javalibstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/examp0000644000175000017500000001545210404045204034137 0ustar arnaudarnaud00000000000000/* * Copyright 1999-2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example2; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionError; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionMapping; import org.apache.struts.validator.ValidatorForm; /** * Form bean for the user registration page. This form has the following * fields, with default values in square brackets: *
        *
      • action - The maintenance action we are performing (Create, * Delete, or Edit). *
      • fromAddress - The EMAIL address of the sender, to be included * on sent messages. [REQUIRED] *
      • fullName - The full name of the sender, to be included on * sent messages. [REQUIRED] *
      • password - The password used by this user to log on. *
      • password2 - The confirmation password, which must match * the password when changing or setting. *
      • replyToAddress - The "Reply-To" address to be included on * sent messages. [Same as from address] *
      • username - The registered username, which must be unique. * [REQUIRED] *
      * * @author Craig R. McClanahan * @version $Rev: 54936 $ $Date: 2004-10-16 18:57:09 +0100 (Sat, 16 Oct 2004) $ */ public final class RegistrationForm extends ValidatorForm { // ----------------------------------------------------- Instance Variables /** * The maintenance action we are performing (Create or Edit). */ private String action = "Create"; /** * The from address. */ private String fromAddress = null; /** * The full name. */ private String fullName = null; /** * The password. */ private String password = null; /** * The confirmation password. */ private String password2 = null; /** * The reply to address. */ private String replyToAddress = null; /** * The username. */ private String username = null; // ----------------------------------------------------------- Properties /** * Return the maintenance action. */ public String getAction() { return (this.action); } /** * Set the maintenance action. * * @param action The new maintenance action. */ public void setAction(String action) { this.action = action; } /** * Return the from address. */ public String getFromAddress() { return (this.fromAddress); } /** * Set the from address. * * @param fromAddress The new from address */ public void setFromAddress(String fromAddress) { this.fromAddress = fromAddress; } /** * Return the full name. */ public String getFullName() { return (this.fullName); } /** * Set the full name. * * @param fullName The new full name */ public void setFullName(String fullName) { this.fullName = fullName; } /** * Return the password. */ public String getPassword() { return (this.password); } /** * Set the password. * * @param password The new password */ public void setPassword(String password) { this.password = password; } /** * Return the confirmation password. */ public String getPassword2() { return (this.password2); } /** * Set the confirmation password. * * @param password2 The new confirmation password */ public void setPassword2(String password2) { this.password2 = password2; } /** * Return the reply to address. */ public String getReplyToAddress() { return (this.replyToAddress); } /** * Set the reply to address. * * @param replyToAddress The new reply to address */ public void setReplyToAddress(String replyToAddress) { this.replyToAddress = replyToAddress; } /** * Return the username. */ public String getUsername() { return (this.username); } /** * Set the username. * * @param username The new username */ public void setUsername(String username) { this.username = username; } // --------------------------------------------------------- Public Methods /** * Reset all properties to their default values. * * @param mapping The mapping used to select this instance * @param request The servlet request we are processing */ public void reset(ActionMapping mapping, HttpServletRequest request) { this.action = "Create"; this.fromAddress = null; this.fullName = null; this.password = null; this.password2 = null; this.replyToAddress = null; this.username = null; } /** * Validate the properties that have been set from this HTTP request, * and return an ActionErrors object that encapsulates any * validation errors that have been found. If no errors are found, return * null or an ActionErrors object with no * recorded error messages. * * @param mapping The mapping used to select this instance * @param request The servlet request we are processing */ public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { // Perform validator framework validations ActionErrors errors = super.validate(mapping, request); // Only need crossfield validations here if (((password == null) && (password2 != null)) || ((password != null) && (password2 == null)) || ((password != null) && (password2 != null) && !password.equals(password2))) { errors.add("password2", new ActionError("error.password.match")); } return errors; } } ././@LongLink0000644000175000017500000000020410423140531011311 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/example2/SaveRegistrationAction.javalibstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/examp0000644000175000017500000001736010404045216034142 0ustar arnaudarnaud00000000000000/* * Copyright 1999-2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example2; import java.lang.reflect.InvocationTargetException; import java.util.Locale; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.action.Action; import org.apache.struts.action.ActionError; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.util.MessageResources; /** * Implementation of Action that validates and creates or * updates the user registration information entered by the user. If a new * registration is created, the user is also implicitly logged on. * * @author Craig R. McClanahan * @version $Rev: 55303 $ $Date: 2004-10-22 03:56:53 +0100 (Fri, 22 Oct 2004) $ */ public final class SaveRegistrationAction extends Action { // ----------------------------------------------------- Instance Variables /** * The Log instance for this application. */ private Log log = LogFactory.getLog("org.apache.struts.webapp.Example"); // --------------------------------------------------------- Public Methods /** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it). * Return an ActionForward instance describing where and how * control should be forwarded, or null if the response has * already been completed. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception Exception if the application business logic throws * an exception */ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // Extract attributes and parameters we will need Locale locale = getLocale(request); MessageResources messages = getResources(request); HttpSession session = request.getSession(); RegistrationForm regform = (RegistrationForm) form; String action = regform.getAction(); if (action == null) { action = "Create"; } UserDatabase database = (UserDatabase) servlet.getServletContext().getAttribute(Constants.DATABASE_KEY); if (log.isDebugEnabled()) { log.debug("SaveRegistrationAction: Processing " + action + " action"); } // Is there a currently logged on user (unless creating)? User user = (User) session.getAttribute(Constants.USER_KEY); if (!"Create".equals(action) && (user == null)) { if (log.isTraceEnabled()) { log.trace(" User is not logged on in session " + session.getId()); } return (mapping.findForward("logon")); } // Was this transaction cancelled? if (isCancelled(request)) { if (log.isTraceEnabled()) { log.trace(" Transaction '" + action + "' was cancelled"); } session.removeAttribute(Constants.SUBSCRIPTION_KEY); return (mapping.findForward("failure")); } // Validate the transactional control token ActionErrors errors = new ActionErrors(); if (log.isTraceEnabled()) { log.trace(" Checking transactional control token"); } if (!isTokenValid(request)) { errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("error.transaction.token")); } resetToken(request); // Validate the request parameters specified by the user if (log.isTraceEnabled()) { log.trace(" Performing extra validations"); } String value = null; value = regform.getUsername(); if (("Create".equals(action)) && (database.findUser(value) != null)) { errors.add("username", new ActionError("error.username.unique", regform.getUsername())); } if ("Create".equals(action)) { value = regform.getPassword(); if ((value == null) || (value.length() <1)) { errors.add("password", new ActionError("error.password.required")); } value = regform.getPassword2(); if ((value == null) || (value.length() < 1)) { errors.add("password2", new ActionError("error.password2.required")); } } // Report any errors we have discovered back to the original form if (!errors.isEmpty()) { saveErrors(request, errors); saveToken(request); return (mapping.getInputForward()); } // Update the user's persistent profile information try { if ("Create".equals(action)) { user = database.createUser(regform.getUsername()); } String oldPassword = user.getPassword(); PropertyUtils.copyProperties(user, regform); if ((regform.getPassword() == null) || (regform.getPassword().length() < 1)) { user.setPassword(oldPassword); } } catch (InvocationTargetException e) { Throwable t = e.getTargetException(); if (t == null) { t = e; } log.error("Registration.populate", t); throw new ServletException("Registration.populate", t); } catch (Throwable t) { log.error("Registration.populate", t); throw new ServletException("Subscription.populate", t); } try { database.save(); } catch (Exception e) { log.error("Database save", e); } // Log the user in if appropriate if ("Create".equals(action)) { session.setAttribute(Constants.USER_KEY, user); if (log.isTraceEnabled()) { log.trace(" User '" + user.getUsername() + "' logged on in session " + session.getId()); } } // Remove the obsolete form bean if (mapping.getAttribute() != null) { if ("request".equals(mapping.getScope())) request.removeAttribute(mapping.getAttribute()); else session.removeAttribute(mapping.getAttribute()); } // Forward control to the specified success URI if (log.isTraceEnabled()) { log.trace(" Forwarding to success page"); } return (mapping.findForward("success")); } } ././@LongLink0000644000175000017500000000020410423140531011311 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/example2/SaveSubscriptionAction.javalibstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/examp0000644000175000017500000001622010404045250034132 0ustar arnaudarnaud00000000000000/* * Copyright 1999-2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example2; import java.lang.reflect.InvocationTargetException; import java.util.Locale; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.util.MessageResources; /** * Implementation of Action that validates and creates or * updates the mail subscription entered by the user. * * @author Craig R. McClanahan * @version $Rev: 54936 $ $Date: 2004-10-16 18:57:09 +0100 (Sat, 16 Oct 2004) $ */ public final class SaveSubscriptionAction extends Action { // ----------------------------------------------------- Instance Variables /** * The Log instance for this application. */ private Log log = LogFactory.getLog("org.apache.struts.webapp.Example"); // --------------------------------------------------------- Public Methods /** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it). * Return an ActionForward instance describing where and how * control should be forwarded, or null if the response has * already been completed. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception Exception if the application business logic throws * an exception */ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // Extract attributes and parameters we will need Locale locale = getLocale(request); MessageResources messages = getResources(request); HttpSession session = request.getSession(); SubscriptionForm subform = (SubscriptionForm) form; String action = subform.getAction(); if (action == null) { action = "?"; } if (log.isDebugEnabled()) { log.debug("SaveSubscriptionAction: Processing " + action + " action"); } // Is there a currently logged on user? User user = (User) session.getAttribute(Constants.USER_KEY); if (user == null) { if (log.isTraceEnabled()) { log.trace(" User is not logged on in session " + session.getId()); } return (mapping.findForward("logon")); } // Was this transaction cancelled? if (isCancelled(request)) { if (log.isTraceEnabled()) { log.trace(" Transaction '" + action + "' was cancelled"); } session.removeAttribute(Constants.SUBSCRIPTION_KEY); return (mapping.findForward("success")); } // Is there a related Subscription object? Subscription subscription = (Subscription) session.getAttribute(Constants.SUBSCRIPTION_KEY); if ("Create".equals(action)) { if (log.isTraceEnabled()) { log.trace(" Creating subscription for mail server '" + subform.getHost() + "'"); } subscription = user.createSubscription(subform.getHost()); } if (subscription == null) { if (log.isTraceEnabled()) { log.trace(" Missing subscription for user '" + user.getUsername() + "'"); } response.sendError(HttpServletResponse.SC_BAD_REQUEST, messages.getMessage("error.noSubscription")); return (null); } // Was this transaction a Delete? if (action.equals("Delete")) { if (log.isTraceEnabled()) { log.trace(" Deleting mail server '" + subscription.getHost() + "' for user '" + user.getUsername() + "'"); } user.removeSubscription(subscription); session.removeAttribute(Constants.SUBSCRIPTION_KEY); try { UserDatabase database = (UserDatabase) servlet.getServletContext(). getAttribute(Constants.DATABASE_KEY); database.save(); } catch (Exception e) { log.error("Database save", e); } return (mapping.findForward("success")); } // All required validations were done by the form itself // Update the persistent subscription information if (log.isTraceEnabled()) { log.trace(" Populating database from form bean"); } try { PropertyUtils.copyProperties(subscription, subform); } catch (InvocationTargetException e) { Throwable t = e.getTargetException(); if (t == null) t = e; log.error("Subscription.populate", t); throw new ServletException("Subscription.populate", t); } catch (Throwable t) { log.error("Subscription.populate", t); throw new ServletException("Subscription.populate", t); } try { UserDatabase database = (UserDatabase) servlet.getServletContext(). getAttribute(Constants.DATABASE_KEY); database.save(); } catch (Exception e) { log.error("Database save", e); } // Remove the obsolete form bean and current subscription if (mapping.getAttribute() != null) { if ("request".equals(mapping.getScope())) request.removeAttribute(mapping.getAttribute()); else session.removeAttribute(mapping.getAttribute()); } session.removeAttribute(Constants.SUBSCRIPTION_KEY); // Forward control to the specified success URI if (log.isTraceEnabled()) { log.trace(" Forwarding to success page"); } return (mapping.findForward("success")); } } ././@LongLink0000644000175000017500000000017210423140531011315 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/example2/Subscription.javalibstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/examp0000644000175000017500000000427710404045214034143 0ustar arnaudarnaud00000000000000/* * Copyright 1999-2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example2; /** *

      A Subscription which is stored, along with the * associated {@link User}, in a {@link UserDatabase}.

      * * @author Craig R. McClanahan * @version $Rev: 54934 $ $Date: 2004-10-16 18:07:50 +0100 (Sat, 16 Oct 2004) $ */ public interface Subscription { // ------------------------------------------------------------- Properties /** * Return the auto-connect flag. */ public boolean getAutoConnect(); /** * Set the auto-connect flag. * * @param autoConnect The new auto-connect flag */ public void setAutoConnect(boolean autoConnect); /** * Return the host name. */ public String getHost(); /** * Return the password. */ public String getPassword(); /** * Set the password. * * @param password The new password */ public void setPassword(String password); /** * Return the subscription type. */ public String getType(); /** * Set the subscription type. * * @param type The new subscription type */ public void setType(String type); /** * Return the {@link User} owning this Subscription. */ public User getUser(); /** * Return the username. */ public String getUsername(); /** * Set the username. * * @param username The new username */ public void setUsername(String username); } ././@LongLink0000644000175000017500000000017610423140531011321 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/example2/SubscriptionForm.javalibstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/examp0000644000175000017500000001433510404045234034141 0ustar arnaudarnaud00000000000000/* * Copyright 1999-2001,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example2; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionError; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; /** * Form bean for the user profile page. This form has the following fields, * with default values in square brackets: *
        *
      • action - The maintenance action we are performing (Create, Delete, * or Edit). *
      • host - The mail host for this subscription. [REQUIRED] *
      • password - The password for this subscription. [REQUIRED] *
      • type - The subscription type (imap,pop3) for this subscription. [REQUIRED] *
      • username - The username of this subscription. [REQUIRED] *
      * * @author Craig R. McClanahan * @version $Rev: 54934 $ $Date: 2004-10-16 18:07:50 +0100 (Sat, 16 Oct 2004) $ */ public final class SubscriptionForm extends ActionForm { // --------------------------------------------------- Instance Variables /** * The maintenance action we are performing (Create or Edit). */ private String action = "Create"; /** * Should we auto-connect at startup time? */ private boolean autoConnect = false; /** * The host name. */ private String host = null; /** * The password. */ private String password = null; /** * The subscription type. */ private String type = null; /** * The username. */ private String username = null; // ----------------------------------------------------------- Properties /** * Return the maintenance action. */ public String getAction() { return (this.action); } /** * Set the maintenance action. * * @param action The new maintenance action. */ public void setAction(String action) { this.action = action; } /** * Return the auto-connect flag. */ public boolean getAutoConnect() { return (this.autoConnect); } /** * Set the auto-connect flag. * * @param autoConnect The new auto-connect flag */ public void setAutoConnect(boolean autoConnect) { this.autoConnect = autoConnect; } /** * Return the host name. */ public String getHost() { return (this.host); } /** * Set the host name. * * @param host The host name */ public void setHost(String host) { this.host = host; } /** * Return the password. */ public String getPassword() { return (this.password); } /** * Set the password. * * @param password The new password */ public void setPassword(String password) { this.password = password; } /** * Return the subscription type. */ public String getType() { return (this.type); } /** * Set the subscription type. * * @param type The subscription type */ public void setType(String type) { this.type = type; } /** * Return the username. */ public String getUsername() { return (this.username); } /** * Set the username. * * @param username The new username */ public void setUsername(String username) { this.username = username; } // --------------------------------------------------------- Public Methods /** * Reset all properties to their default values. * * @param mapping The mapping used to select this instance * @param request The servlet request we are processing */ public void reset(ActionMapping mapping, HttpServletRequest request) { this.action = "Create"; this.autoConnect = false; this.host = null; this.password = null; this.type = null; this.username = null; } /** * Validate the properties that have been set from this HTTP request, * and return an ActionErrors object that encapsulates any * validation errors that have been found. If no errors are found, return * null or an ActionErrors object with no * recorded error messages. * * @param mapping The mapping used to select this instance * @param request The servlet request we are processing */ public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { ActionErrors errors = new ActionErrors(); if ((host == null) || (host.length() < 1)) errors.add("host", new ActionError("error.host.required")); if ((username == null) || (username.length() < 1)) errors.add("username", new ActionError("error.username.required")); if ((password == null) || (password.length() < 1)) errors.add("password", new ActionError("error.password.required")); if ((type == null) || (type.length() < 1)) errors.add("type", new ActionError("error.type.required")); else if (!"imap".equals(type) && !"pop3".equals(type)) errors.add("type", new ActionError("error.type.invalid", type)); return (errors); } } ././@LongLink0000644000175000017500000000016210423140531011314 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/example2/User.javalibstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/examp0000644000175000017500000000703410404045244034140 0ustar arnaudarnaud00000000000000/* * Copyright 1999-2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example2; /** *

      A User which is stored, along with his or her * associated {@link Subscription}s, in a {@link UserDatabase}.

      * * @author Craig R. McClanahan * @version $Rev: 54934 $ $Date: 2004-10-16 18:07:50 +0100 (Sat, 16 Oct 2004) $ * @since Struts 1.1 */ public interface User { // ------------------------------------------------------------- Properties /** * Return the {@link UserDatabase} with which we are associated. */ public UserDatabase getDatabase(); /** * Return the from address. */ public String getFromAddress(); /** * Set the from address. * * @param fromAddress The new from address */ public void setFromAddress(String fromAddress); /** * Return the full name. */ public String getFullName(); /** * Set the full name. * * @param fullName The new full name */ public void setFullName(String fullName); /** * Return the password. */ public String getPassword(); /** * Set the password. * * @param password The new password */ public void setPassword(String password); /** * Return the reply-to address. */ public String getReplyToAddress(); /** * Set the reply-to address. * * @param replyToAddress The new reply-to address */ public void setReplyToAddress(String replyToAddress); /** * Find and return all {@link Subscription}s associated with this user. * If there are none, a zero-length array is returned. */ public Subscription[] getSubscriptions(); /** * Return the username. */ public String getUsername(); // --------------------------------------------------------- Public Methods /** * Create and return a new {@link Subscription} associated with this * User, for the specified host name. * * @param host Host name for which to create a subscription * * @exception IllegalArgumentException if the host name is not unique * for this user */ public Subscription createSubscription(String host); /** * Find and return the {@link Subscription} associated with the specified * host. If none is found, return null. * * @param host Host name to look up */ public Subscription findSubscription(String host); /** * Remove the specified {@link Subscription} from being associated * with this User. * * @param subscription Subscription to be removed * * @exception IllegalArgumentException if the specified subscription is not * associated with this User */ public void removeSubscription(Subscription subscription); } ././@LongLink0000644000175000017500000000017210423140531011315 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/example2/UserDatabase.javalibstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/java/org/apache/struts/webapp/examp0000644000175000017500000000561310404045212034134 0ustar arnaudarnaud00000000000000/* * Copyright 1999-2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example2; /** *

      A Data Access Object (DAO) interface describing * the available operations for retrieving and storing {@link User}s * (and their associated {@link Subscription}s) in some persistence layer * whose characteristics are not specified here. One or more implementations * will be created to perform the actual I/O that is required.

      * * @author Craig R. McClanahan * @version $Rev: 54934 $ $Date: 2004-10-16 18:07:50 +0100 (Sat, 16 Oct 2004) $ * @since Struts 1.1 */ public interface UserDatabase { // --------------------------------------------------------- Public Methods /** *

      Create and return a new {@link User} defined in this user database. *

      * * @param username Username of the new user * * @exception IllegalArgumentExceptionif the specified username * is not unique */ public User createUser(String username); /** *

      Finalize access to the underlying persistence layer.

      * * @exception Exception if a database access error occurs */ public void close() throws Exception; /** *

      Return the existing {@link User} with the specified username, * if any; otherwise return null.

      * * @param username Username of the user to retrieve */ public User findUser(String username); /** *

      Return the set of {@link User}s defined in this user database.

      */ public User[] findUsers(); /** *

      Initiate access to the underlying persistence layer.

      * * @exception Exception if a database access error occurs */ public void open() throws Exception; /** * Remove the specified {@link User} from this database. * * @param user User to be removed * * @exception IllegalArgumentException if the specified user is not * associated with this database */ public void removeUser(User user); /** *

      Save any pending changes to the underlying persistence layer.

      * * @exception Exception if a database access error occurs */ public void save() throws Exception; } libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/web/0000755000175000017500000000000010423130300026066 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/web/WEB-INF/0000755000175000017500000000000010423130300027115 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/web/WEB-INF/action.xml0000644000175000017500000000625310404045242031133 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/web/WEB-INF/app.tld0000644000175000017500000000603310404045204030413 0ustar arnaudarnaud00000000000000 1.0 1.1 Application Tag Library http://jakarta.apache.org/taglibs/struts-example-1.0 This tag library contains functionality specific to the Struts Example Application. checkLogon org.apache.struts.webapp.example.CheckLogonTag empty Validate that there is a currently logged on user, by checking for the existence of a session-scope bean under the specified name. If there is no such bean, forward control to the specified page, which will typically be a logon form. name - Name of the session-scope bean to check for [user] page - Context-relative path to the logon page [/logon.jsp] name false true page false true linkSubscription org.apache.struts.webapp.example.LinkSubscriptionTag Generate a URL-encoded hyperlink to the a URL made up of the specified base value, plus optional query parameters that select the specified Subscription object. name - Name of the attribute containing the specified Subscription. [subscription] page - Context-relative URL of the generated link name false true page true true linkUser org.apache.struts.webapp.example.LinkUserTag Generate a URL-encoded hyperlink to the a URL made up of the specified base value, plus optional query parameters that select the specified User object. name - Name of the attribute containing the specified user. [user] href - Context-relative URL of the generated link name false true page true true libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/web/WEB-INF/database.xml0000644000175000017500000000200510404045210031404 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/web/WEB-INF/faces-config.xml0000644000175000017500000000332210404045230032171 0ustar arnaudarnaud00000000000000 loggedOff org.apache.struts.webapp.example2.LoggedOff request loggedOn org.apache.struts.webapp.example2.LoggedOn request registrationBacking org.apache.struts.webapp.example2.RegistrationBacking request libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/web/WEB-INF/struts-config.xml0000644000175000017500000001625710404045246032476 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/web/WEB-INF/tiles-defs.xml0000644000175000017500000000452110404045210031704 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/web/WEB-INF/validation.xml0000644000175000017500000000627210404045222032007 0ustar arnaudarnaud00000000000000
      maxlength 16 minlength 3 maxlength 16 minlength 3
      libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/web/WEB-INF/web.xml0000644000175000017500000000615710404045216030437 0ustar arnaudarnaud00000000000000 Struts-Faces Integration Library Example MYFACES_BEGIN net.sourceforge.myfaces.webapp.StartupServletContextListener MYFACES_END faces javax.faces.webapp.FacesServlet 1 action org.apache.struts.action.ActionServlet config /WEB-INF/struts-config.xml debug 3 detail 3 2 faces *.faces action *.do index.jsp /WEB-INF/app.tld /WEB-INF/app.tld /WEB-INF/struts-tiles.tld /WEB-INF/struts-tiles.tld /WEB-INF/struts-bean.tld /WEB-INF/struts-bean.tld /WEB-INF/struts-html.tld /WEB-INF/struts-html.tld /WEB-INF/struts-logic.tld /WEB-INF/struts-logic.tld libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/web/blank.jsp0000644000175000017500000000117310404045216027707 0ustar arnaudarnaud00000000000000   libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/web/changePassword.jsp0000644000175000017500000000210310404045246031565 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <bean:message key="change.title"/> libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/web/footer.jsp0000644000175000017500000000133210404045234030113 0ustar arnaudarnaud00000000000000<%@ taglib prefix="s" uri="http://struts.apache.org/tags-faces" %> libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/web/header.jsp0000644000175000017500000000133010404045220030036 0ustar arnaudarnaud00000000000000<%@ taglib prefix="s" uri="http://struts.apache.org/tags-faces" %> libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/web/index.jsp0000644000175000017500000000133010404045222027717 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/web/layout.jsp0000644000175000017500000000413610404045234030137 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %> <%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %> <%@ taglib prefix="s" uri="http://struts.apache.org/tags-faces" %> <%@ taglib prefix="t" uri="/WEB-INF/struts-tiles.tld" %> <s:message key="layout.title"/>
      libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/web/layout1.jsp0000644000175000017500000000333310404045222030213 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %> <%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %> <%@ taglib prefix="s" uri="http://struts.apache.org/tags-faces" %> <%@ taglib prefix="t" uri="/WEB-INF/struts-tiles.tld" %> <s:message key="layout.title"/>
      libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/web/loggedoff.jsp0000644000175000017500000000261510404045210030550 0ustar arnaudarnaud00000000000000<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %> <%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %> <%@ taglib prefix="s" uri="http://struts.apache.org/tags-faces" %> <%@ taglib prefix="t" uri="/WEB-INF/struts-tiles.tld" %> libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/web/loggedon.jsp0000644000175000017500000000231110404045246030414 0ustar arnaudarnaud00000000000000<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %> <%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %> <%@ taglib prefix="s" uri="http://struts.apache.org/tags-faces" %> <%@ taglib prefix="t" uri="/WEB-INF/struts-tiles.tld" %> libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/web/logon.jsp0000644000175000017500000000474210404045222027740 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %> <%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %> <%@ taglib prefix="s" uri="http://struts.apache.org/tags-faces" %> <%-- Grid header element --%> <%-- Grid data elements --%> <%-- Grid footer element --%> libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/web/mainMenu.jsp0000644000175000017500000000267310404045204030374 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %> <%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %> <%@ taglib prefix="s" uri="http://struts.apache.org/tags-faces" %> libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/web/menu.jsp0000644000175000017500000000120710404045216027562 0ustar arnaudarnaud00000000000000 This will be the menu. libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/web/registration.jsp0000644000175000017500000002030310404045220031321 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %> <%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %> <%@ taglib prefix="s" uri="http://struts.apache.org/tags-faces" %> <%-- <c:choose> <c:when test="${registrationForm.action == 'Create'}"> <s:message key="registration.title.create"/> </c:when> <c:when test="${registrationForm.action == 'Edit'}"> <s:message key="registration.title.edit"/> </c:when> <c:otherwise> UNKNOWN ACTION </c:otherwise> </c:choose> --%> <%-- Grid header element --%> <%-- Grid data elements --%> <%-- FIXME - i18n --%> <%-- FIXME - i18n --%> <%-- FIXME - i18n --%> <%-- --%> libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/web/staticJavascript.jsp0000644000175000017500000000165310404045216032141 0ustar arnaudarnaud00000000000000<%@ page language="java" %> <%-- set document type to Javascript (addresses a bug in Netscape according to a web resource --%> <%@ page contentType="application/x-javascript" %> <%-- Copyright 2002,2004 The Apache Software Foundation. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --%> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/web/struts-power.gif0000644000175000017500000000340610404045224031267 0ustar arnaudarnaud00000000000000GIF89a_%çÿÿÿÿÿÌÿÿ™ÿÿfÿÿ3ÿÿÿÌÿÿÌÌÿÌ™ÿÌfÿÌ3ÿÌÿ™ÿÿ™Ìÿ™™ÿ™fÿ™3ÿ™ÿfÿÿfÌÿf™ÿffÿf3ÿfÿ3ÿÿ3Ìÿ3™ÿ3fÿ33ÿ3ÿÿÿÌÿ™ÿfÿ3ÿÌÿÿÌÿÌÌÿ™ÌÿfÌÿ3ÌÿÌÌÿÌÌÌÌÌ™ÌÌfÌÌ3ÌÌÌ™ÿÌ™ÌÌ™™Ì™fÌ™3Ì™ÌfÿÌfÌÌf™ÌffÌf3ÌfÌ3ÿÌ3ÌÌ3™Ì3fÌ33Ì3ÌÿÌÌÌ™ÌfÌ3Ì™ÿÿ™ÿÌ™ÿ™™ÿf™ÿ3™ÿ™Ìÿ™Ì̙̙™Ìf™Ì3™Ì™™ÿ™™Ì™™™™™f™™3™™™fÿ™fÌ™f™™ff™f3™f™3ÿ™3Ì™3™™3f™33™3™ÿ™Ì™™™f™3™fÿÿfÿÌfÿ™fÿffÿ3fÿfÌÿfÌÌfÌ™fÌffÌ3fÌf™ÿf™Ìf™™f™ff™3f™ffÿffÌff™fffff3fff3ÿf3Ìf3™f3ff33f3fÿfÌf™fff3f3ÿÿ3ÿÌ3ÿ™3ÿf3ÿ33ÿ3Ìÿ3ÌÌ3Ì™3Ìf3Ì33Ì3™ÿ3™Ì3™™3™f3™33™3fÿ3fÌ3f™3ff3f33f33ÿ33Ì33™33f333333ÿ3Ì3™3f333ÿÿÿÌÿ™ÿfÿ3ÿÌÿÌÌÌ™ÌfÌ3Ì™ÿ™Ì™™™f™3™fÿfÌf™fff3f3ÿ3Ì3™3f333ÿÌ™f3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!þMade with GIMP,_%þH° Áƒ*\Ȱ¡Ã‡#"|hÅÁzªH\ñ¤ GCn|Fò‰ÁU$I¬BŠ$©–«LŠœÉðIɃ)CÚ|fIš@V!ç3=!cÜÜiÒ€ž–Ï*¨¢ U!ÍzÀ ŸQI¤øì‰žõ $%3-J’eÊ“lÕVOVUV•:p'V’sî´xö™Àd$ÅâõšØæ*+ ¾ ü¬J ”ä× ÉU`+°’X h‚JË^~FŠñ³[ª\Ø\q}ªÔ,zgŸv ôÙz'l¦F[óVNrk2ƒ;?ëQì@뼫X±•¶i¸pUþr6i24øê?¤.ê9êðôgW •õM‚…Æ_ŠíΪ•â^A´@~%rí)ç“|ØVÙ3@G€}‡Tpp}×YaV´Â_h‰˜l* µ“x÷”S Í $àQ}ÕœX=HÖc儞a‘ð\HXßpA8ämÉ=Òn&–HWVYDàoz´%UV~udpVô•V] „‘Vm‘PÕ cêaeŽy¹iÐKAÕiçCô ù¦B=ñ„w ÑN -TÅ’p‘2 Œ&$à†•I¥X5£”fvÔhCÕ9$„=’ô¥ nª ¥ÒÄY†9¶ø^zþ¦"ZP—ÙjgQÂ+†©Î¦>ÃBžéo!PBUy¤f™•Õ‘ÅöJ`VŠ¢i{àíii¿‚·K‰ Â&Uq)”SMªÜháŠ+¤ñº:_¸¤xj½Ý…[Et€…»[òzX¯J¤&ù¯Z¢n¼ÉÄѯ#úÉ& µš “øUÆÅ0Oÿ>aQ­°…ªå«ñÆÄ­®}Wé¥Ê i°1ôëËÏ:JúÂË/»¼Y+Pj.å#Ò¬I Þ»Ûº/IÉÔ÷[Ð^i ž–;[ž~€$ 0»«8µÔiÅ+'Cn):Ë«5œ«ÙQôðܯ¥àÈPÙºv]PÙDD8Ac»(7'éw°+»Ö«àN}Pâ†Û÷àVª°wÒ™ã=5¨Eü¥æ•Sšºè”O…·#:A€wó¯)Ë^îA€·0Ô¥c*œâ½"=§ãq‡çsÌD"ÀÛ–¢þ+»ÆEk»îQùIÕ¥ÎPP­òÚ˜dG¹ËXï’1½ ~xH_Õѧ"ú«o)&ñ;ì@€ŸïÈfc\ðÀëä~ÊËU¾ô-«diyÿÑG8R?q$^áG,æ0þIbfQàwEBA;libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/web/stylesheet.css0000644000175000017500000000452010404045220030777 0ustar arnaudarnaud00000000000000/* * * Copyright 2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ .command-multiple { margin: 3px 9px 3px 3px; } .command-single { margin: 3px 3px 3px 3px; } .form-background { background-color: #7171A5; border: 5px outset #71A5A5; border-collapse: collapse; font-family: sans-serif; font-size: 14pt; margin-left: auto; margin-right: auto; } .form-footer { color: #FFFFFF; font-size: 75%; padding: 3px; text-align: center; } .form-header { background-color: #A5A5A5; color: #FFFFFF; font-weight: bold; padding: 3px; text-align: center; } .form-prompt { color: #FFFFFF; padding: 3px 3px 3px 9px; text-align: right; } .form-field { padding: 3px 9px 3px 3px; text-align: left; } .form-row-even { } .form-row-odd { background-color: #717171; } .list-background { background-color: #7171A5; border: 5px outset #71A5A5; border-collapse: collapse; font-family: sans-serif; font-size: 14pt; padding: 10px; width: 100%; } .list-column-host { border-right: 2px solid black; padding: 3px; text-align: left; width: 30%; } .list-column-user { border-right: 2px solid black; padding: 3px; text-align: left; width: 30% } .list-column-type { border-right: 2px solid black; padding: 3px; text-align: center; width: 10% } .list-column-auto { border-right: 2px solid black; padding: 3px; text-align: center; width: 10% } .list-column-action { padding: 3px; text-align: center; width: 20% } .list-header { background-color: #A5A5A5; color: #FFFFFF; font-weight: bold; padding: 3px; text-align: center; } .list-row-even { } .list-row-odd { background-color: #717171; } libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/web/subscription.jsp0000644000175000017500000001403710404045204031344 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="a" uri="/WEB-INF/app.tld" %> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %> <%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %> <%@ taglib prefix="s" uri="http://struts.apache.org/tags-faces" %> <%-- FIXME --%> <%-- <c:choose> <c:when test="${subscriptionForm.action == 'Create'}"> <s:message id="titleCreate" key="subscription.title.create"/> </c:when> <c:when test="${subscriptionForm.action == 'Delete'}"> <s:message id="titleDelete" key="subscription.title.delete"/> </c:when> <c:when test="${subscriptionForm.action == 'Edit'}"> <s:message id="titleEdit" key="subscription.title.edit"/> </c:when> <c:otherwise> UNKNOWN ACTION </c:otherwise> </c:choose> --%> <%-- Grid header element --%> <%-- Grid data elements --%> <%-- FIXME - i18n --%> <%-- FIXME - i18n --%> <%-- FIXME - i18n --%> <%-- FIXME - i18n --%> <%-- --%> libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/web/tour.htm0000644000175000017500000013110210404045250027577 0ustar arnaudarnaud00000000000000 A Walking Tour of the Struts Example Application

      A Walking Tour of the Struts Example Application

      This article is meant to introduce a new user to Struts by "walking through" the example application. See the Struts Users Guide and Strut's API for more documentation.  

      This article is based on the working 1.0 builds of Struts.  It is assumed that the reader has already installed a developer's copy of Struts and the example application (following the instructions in the Struts readme), and is ready to explore the example on their own development workstation (e.g. localhost). 

      This article also assumes the reader has a basic understanding of the Java language, JavaBeans, Web applications and JavaServer Pages. For background on these topics, see the various Sun Javasoft product sites.



      The standard Struts package comes with four applications: struts-test, struts-documentation, struts-template, and struts-example. Regarding struts-example, the readme tells us that:

      "This example is the beginnings of a portal application that would allow users to register themselves, and maintain a set of subscriptions they own to mail servers elsewhere on the Internet. When completed, this application will provide the ability to read mail from various mail servers, through the application."

      The example is still incomplete, but still a very useful introduction to Struts. For more about installing Struts and the example application, see the Struts readme.

      index.jsp

      Once installed, the example application is entered through a standard welcome page, index.jsp. This page offers two links, one to register with the application and one to login in (if you have already registered).

      Behind the scenes, index.jsp also checks for the existence of a database servlet and message resource. Both of these objects are referenced in the application's web.xml, and should be loaded before the index.jsp displays. If they are absent for any reason, index.jsp displays an error message.

      Note that the error messages are hardcoded into the welcome page; this way they can be displayed even if the message resource is missing. In other pages, a message resource is used to lookup and display messages, based on the user's locale. 

      web.xml and ApplicationResources.properties

      If you check the application's web.xml, you will see how these objects are loaded. The message resource is loaded by the application parameter to the ActionServlet. When the ActionServlet initializes, it parses the ApplicationResources.properties in the package folder into the default message resource. If you change a message in the resource, and then reload the application, it will appear throughout the application.

      You can even reload the configuration and message resources without restarting the container. See the end of the web.xml file for details. 

      DatabaseServlet.java

      The database object has it's own initialization block. The database servlet stores the database contents as a XML file, which is parsed by the Struts digester and loaded as a set of nested hashtables. The outer table is the list of user objects, each of which has its own inner hashtable of subscriptions. When you register, a user object is stored in this hashtable ... and when you login, the user object is stored within the session context.

      If you want to follow along (and you should!), the package source can be found under the src/example folder in your jakarta-struts folder.

      In the Example application, the database is seeded with a sample user. If you check the database.xml file, you'll see the sample user described as:

      <user username="user" password="pass" fullName="John Q. User" fromAddress="John.User@somewhere.com">
       <subscription autoConnect="false" host="mail.hotmail.com" type="pop3" username="user1234" password="bar" /> 
      </user>

      This creates a registration record  for "John Q. User", with the detail for his hotmail subscription.

      In the source to the database servlet, you should notice that the attribute name for the servlet is read from the package's constant file. This is a good way to be sure a name or other string value is uniform between source files. 

      index.jsp 2

      Back in the index.jsp, we can find several good uses of Struts custom tags. Two worth noting now are the base and the link tags. The base tag returns the current URL to the page, to be sure other relative hyperlinks on the page work properly. The link tag renders another important service. Besides being a quick way to write a hyperlink, it will also URL encode the hyperlink to maintain the client's session -- if the current client can't store the session as a cookie.

      If you turn cookies off in your browser, and then reload your browser and this page, you will see the links with the session id information attached. (If you are using Internet Explorer and try this, be sure you reset cookies for the appropriate security zone, and that you disallow "per-session" cookies.) 

      In just a simple welcome page, Struts has done quite a bit already:

      • Confirmed that required objects were created during initialization. 
      • Written all the page headings and labels from an internationalized message resource. 
      • Automatically rendered a current base tag for the page. 
      • Automatically URL-encoded hyperlinks as needed.

      At the top of the index.jsp page, you may also note several directives that load the tag libraries. These are just the usual red tape that goes with any Java source file.

      logon.jsp

      Next, if you choose the log on link, the container loads the logon.jsp file. You can use the default username and password (user:pass) to login. (Note that both the username and password are case sensitive.) Better yet, try omitting or misspelling the login in various combinations and see how the application reacts.

      If you do this, Struts will return you to the same JSP, but with three major differences:

      1. The page address is now logon.do rather than login.jsp. 
      2. Struts will display a validation-error above the logon form. 
      3. Whatever username you entered before is defaulted on the form.

      Pretty cool, but how does it work?

      struts-config.xml and LogonForm.java

      First, the logon.jsp makes use of the custom-tag "form". This tag can scan the application's properties for a form bean related to the path /logon.jsp (from the link on the welcome page). In this case, Struts finds one, and then checks  for an instance of this particular form bean. Not finding one, Struts creates a new form bean. When the form is submitted, Struts grabs the form fields from the HTTP request, and updates the waiting bean.

      To enable all this, you can simply

      1. define a class for the form bean in your package (the form fields with setters and getters), 
      2. add the bean class to your application's configuration resource, and 
      3. link the bean class to your action mapping by their name properties (name="logonForm").

      In addition to parameters representing standard HTML options, The form tag can also take several handy parameters to add JavaScript features to a form. These include focus, onsubmit, and onreset. There are even parameters for specifying cascading stylesheets.

      Struts has tidy mechanisms for validating forms and printing error messages. An action object can add as many messages as needed to a standard Struts collection. The JSP can then print all the messages, and clear the queue, using a single custom tag, <html:errors/>. There can be as many messages as your validation routine cares to post.

      Struts labels this mechanism as an error message handler, though your application could use it for other  messages too. For example, to post a message than a record was added or deleted. 

      To get the most out of your form beans, Struts provides a special class, ActionForm, with built-in support for validation and message handling that you can use as the base for your own form beans. Each of your JSP forms will probably have a unique set of fields, and would have their own specific form bean.

      LogonAction.java

      The initial JSP submits its form to logon.do. If you check the servlet mappings in the example's web.xml you will see that requests for *.do files are directed to the Struts "action" servlet (an instance of ActionServlet). In the example, the ActionServlet refers to struts-config.xml for its own mappings (among other things), which is where we find the reference to logon.do:

      <!-- Process a user logon --> 
      <action
       path="/logon"
       type="org.apache.struts.webapp.example.LogonAction"
       name="logonForm"
       scope="request"
       input="/logon.jsp"
       > 
      </action>

      and a form bean to go with the "logonForm" action:

      <!-- Logon form bean --> 
      <form-bean
       name="logonForm"
       type="org.apache.struts.webapp.example.LogonForm" 
       />

      In the action mapping, the path property tells the ActionServlet to forward a request for logon.do to the LogonAction object. The input property tells the LogonAction object where it can pass control to get information from the user.

      Before passing the request to LogonAction, the ActionServlet looks for the LogonForm bean. If it finds it, the ActionServlet updates the bean by matching properties named in the HTTP request with properties named in the form bean. If it doesn't find the bean, ActionServlet creates it, so LogonAction can assume that it already exists.

      When called by the ActionServlet, LogonAction retrieves the username and password from the LogonForm bean. (If just created, the bean will return default values.)

      In the example, LogonAction then checks with the DatabaseServlet to see if the logon matches a registered user. If the logon doesn't match, LogonAction adds a message key to an error list. At the end of the routine, if the error list is not empty, LogonAction adds a User bean to the session context, and forwards control to its input form (login.jsp).

      Note that direct access to the DatabaseServlet should really be handled by a business-logic bean, and NOT by LogonAction. To quote the example's author "This should be considered a bug in the example." 

      If there are no errors, LogonAction places a user bean into the session context (replacing any prior user bean), and forwards control to the "success" action. Where that control actually goes is determined by the mappings in struts-config.xml.

      Before returning from a successful login, LogonAction also disposes of the LogonForm bean. This way, if the user returns to the index.jsp form later, it will be a clean form without the (old) login already entered. Note that LogonAction first checks to see if the scope has been set to "request", and then removes the bean from the request context, or otherwise from the default session context.

      The Struts best practice is to use request scope for single-page forms that contain all of your relevant properties, because there is no need to maintain such form beans across requests.

      Note that the example removes the LogonForm bean regardless of scope. This is for backward compatibility with earlier configurations. In your application, you should follow the advice of the configuration, and remove it only if the scope is set to "request". This way, the behavior can be changed just by editing struts-config.xml and reloading the application. 

      Go ahead and login successfully now, using the default username and password (user and pass). 

      struts-config.xml 2

      As mentioned, on a successful login, LogonAction forwards control to the "success" action, and where control actually goes is determined by the mappings in struts-config.xml. But if you check the mappings for LogonAction, you'll find this block

      <!-- Process a user logon -->
      <action 
       path="/logon"
       type="com.husted.struts.example2.LogonAction"
       name="logonForm"
       scope="request"
       input="/logon.jsp">
      </action>

      Huh!? Where's the success mapping? If you dig around, you'll also find

      <!-- Global Forward Definitions -->
      <global-forwards>
       <forward 
         name="logon" 
         path="/logon.jsp"
       />
       <forward 
         name="success" 
         path="/mainMenu.jsp"
       />
      </global-forwards>

      Which says, if somebody says forward to "success", and doesn't have a local forward for "success", then forward using the path "/mainMenu.jsp". (Ditto for forward to "logon", but forward to "/logon.jsp".)

      And which is why you should be now be staring at the result of the mainMenu.jsp now, offering the choices

      • Edit your user registration profile 
      • Log off MailReader Demonstration Application 

      If you check the page path shown by your browser, you will see that it shows "logon.do" not "mainMenu.jsp". This is because the page was loaded as the ultimate result of the logon.do request, so for all the browser knows, that's where you are. This is why the base custom tag is important. If your page included relative links to images, your browser would be trying to make them based on the path to "logon.do".  So the Struts base tag saves the day by telling the browser to resolve relative links based on the path to the file Struts returned, rather than on the "file" the browser requested.

      If you have a sharp eye, you also may have noticed that logon.do is not followed by any parameters from the login form (logon.do?username=user). The default method for a from created with the Struts form tag is POST, which does not append  form parameters to the request path, as GET does. This is the opposite of the HTML form tag, which uses GET by default.

      mainMenu.jsp

      If you check the source for mainMenu.jsp, you will find some interesting new tags. The first is app:checkLogon. This is not a standard Struts custom tag, but one designed for the Example application. The directive at the top of the file tells us that the app tags are defined in app.tld. Tracing through app.tld, we find that source for this tag is (surprise!) CheckLogonTag.

      CheckLoginTag.java

      This is an excellent example of using custom tags to encapsulate application logic. CheckLoginTag.java looks to see if the user is logged in by checking for an object named "User" in the session context. If not, control is forwarded to "/login.jsp". So, whenever you want to be sure someone is logged in before they access a page, just put "<app:checkLogon/>" at the top of the JSP.

      If you take a good look at the CheckLoginTag source, you will probably see a quick and easy way the code could be made easier to maintain.

      Hint: 'Consistency is Key'.

      You may not have noticed, but the heading on the mainMenu page is customized for the current user. If I were to create a new login for myself and come back to the mainMenu page, instead of saying "Main Menu Options for user" it would say "Main Menu Options for thusted". In doing this, the mainMenu.jsp demonstrates using regular jsp:bean tags alongside Struts custom tags. (No worries mate!) It simply uses a standard jsp:useBean jsp:getProperty tags to snag your username from the User bean and display it in the HTML heading.

      Unfortunately, some of the application's model is exposed by this page view. Struts goes a long way toward minimizing this sort of thing, but in some cases it is unavoidable. 

      The other links we've seen have either gone directly to a JSP file, or to a Struts action path, like login.do. The "Edit your user registration profile" link is a little different, since it also uses a parameter, as in editRegistration.do?action=Edit. When the Struts ActionServlet processes this link, it will ignore the parameter for the purpose of matching the request, but still pass the parameter along to action's object. 

      This means that in Struts, an action object must be able to handle every valid parameter for it's base path. (In the Example, editRegistration must handle both Edit and Create.) 

      You may want to check for invalid parameters too. (And be careful of  differences in case if your comparisons are not case insensitive!)

      If you check the struts-config.xml, you'll see that the editRegistration action is mapped to the (surprise again!), the EditRegistrationAction; it uses a registrationForm bean, and registration.jsp for input.

      <!-- Registration form bean -->
      <form-bean name="registrationForm"
      type="org.apache.struts.webapp.example.RegistrationForm"/>

      <!-- Edit user registration -->
      <action path="/editRegistration"
      type="org.apache.struts.webapp.example.EditRegistrationAction"
      name="registrationForm"
      scope="request"
      validate="false"
      input="/registration.jsp">
      <forward name="success" path="/registration.jsp"/>
      </action>

      Hint: Consistent naming conventions, like the ones used throughout the Example, make applications much easier to write and understand. Save your creativity for the things that matter, and follow an established standard for source code formatting, like the Elements of Java Style.

      EditRegistrationAction.java

      Many objects in an application may do double-duty. For example, EditRegistrationAction not only lets you update a registration, but is also used to create a new one. Which task the object performs is determined by the action passed to it. In the case of EditRegistrationAction, it can either edit or create a registration, the default being create if  a task is not specified. To select between tasks, simply add ?create or ?edit to the hyperlink or form action.

      Like most classes in the example application, editRegistration makes good use of the log to track it's progress. Note that ActionServlet has had a new log method added since the Example was written. You can now specify both the message and a minimum logging (or debug) level. For more, see the Javadoc in your struts-documentation application.

      registration.jsp and RegistrationForm.java

      If you follow the "Edit your user registration profile" link from the mainMenu, we will finally reach the heart of the Example application, the registration page. This page displays everything the Example application knows about you (or at least your login), while demonstrating several interesting techniques. 

      You'll remember that mainMenu.jsp wanted to be sure that everyone was logged in, and used the CheckLogin tag to enforce that. The registration.jsp is a little different. First it uses a Struts logic tag to see if the task at hand is to register a new User. If not (e.g. action != "Create"), the logic tag exposes a CheckLoginTag to be sure we have a user (and therefore a registration) to edit. 

      <logic:equal 
       name="registrationForm" 
       property="action"
       scope="request" 
       value="Edit"
      >
        <app:checkLogon/>
      </logic:equal>

      Note that the Struts html:form tag will refer to properties set by struts-config.xml and automatically create a registrationForm bean if one is not present. However, that does not happen until the form tag is processed within the page. Since this block appears before the html:form tag, a runtime error is exposed if you try to access registration.jsp directly (rather then going through the editRegistration.do action).

      registation.jsp continues to use logic tags throughout the page so that a single JSP can be used to perform more than one task. For example, if you are editing the form (action == "Edit"), the page inserts your username from the registrationForm bean. If you are new user (action == "Create"), the page creates an empty field, so you can pick your username. 

      The Struts logic tags are a very convenient way to express  application logic within your pages. This prevents user error and reduces the number of JSPs your application needs to maintain, among other benefits.

      The page also uses logic tags to display a list of subscriptions for the given user. If the user enters this page with an edit action in the request context, the lower part of the page listing the subscriptions is exposed by this logic tag:

      <logic:equal 
       name="registrationForm" 
       property="action"
       scope="request" 
       value="Edit"
      >

      Otherwise, the page just contains the top portion -- a blank data-entry form for creating the user's registration.

      logic:iterate

      Beside making the usual conditional tests, you can also use logic tags to forward control to other actions, to redirect control to another path, and to iterate over collections. The registration page includes a good example of using the logic:iterate tag to display the user's subscriptions. 

      The subscriptions are stored in a hashtable object, which is in turn stored in the user object. So to display each subscription, we have to reach into the user object, and loop through the members of the subscription collection. Using the iterate tag, this couldn't be easier. 

      <logic:iterate name="user" property="subscriptions" id="subscription">
      <!-- block to repeat -->
      </logic:iterate>

      The three parameters to the iterate tag ( name, property, and id) tell it to

      1. Check this context for an attribute (e.g. object) named "user",
      2. Snag the property of user named "subscriptions", 
      3. In the block to iterate, use "subscription" (singular) as the name for each member of the collection. 

      So, to list the host for each subscription in a HTML unordered list, we could write:

      <ul>
        <logic:iterate name="user" property="subscriptions" id="subscription">
          <li>
            <bean:write name="subscription" property="host" filter="true" />
          </li>
        </logic:iterate>
      </ul>

      This is another good example of how Struts works with the standard JSP tags, like bean. The filter option says  to use convert HTML commands to their character entity. So a < would be output in the HTML as &lt;.

      In registration.jsp, iterate is used to create a menu of subscriptions, each linked with an edit and delete action.

      <logic:iterate id="subscription" name="user" property="subscriptions">
      <tr>
      <td align="left">
      <bean:write name="subscription" property="host" filter="true"/>
      </td>
      <td align="left">
      <bean:write name="subscription" property="username" filter="true"/>
      </td>
      <td align="center">
      <bean:write name="subscription" property="type" filter="true"/>
      </td>
      <td align="center">
      <bean:write name="subscription" property="autoConnect"/>
      </td>
      <td align="center">
      <app:linkSubscription page="/editSubscription.do?action=Delete">
      <bean:message key="registration.deleteSubscription"/>
      </app:linkSubscription>
      <app:linkSubscription page="/editSubscription.do?action=Edit">
      <bean:message key="registration.editSubscription"/>
      </app:linkSubscription>
      </td>
      </tr>
      </logic:iterate>

      The collection in an iterate tag can be any of the following: an array of objects, an Iterator, a Collection (which includes Lists, Sets and Vectors), or a Map (which includes Hashtables) whose elements will be iterated over. 

      You'll note that the hyperlinks to the edit and delete action for each subscription are written with another custom tag, app:linkSubscription. Writing a hyperlink to an action is not difficult, but it can be ugly, and makes an excellent case for encapsulation. If you trace through the app.tld, you will find that the source code for the linkSubscription tag lives in (come on, take a guess) LinkSubscriptionTag.java.

      LinkSubscriptionTag.java

      The Example application uses a subscription's host name (e.g. yahoo.com) as a primary key, which means you can only have one subscription for each host. It also means that to edit a subscription, all you need to know is the user and host. In fact, the editSubscription action is designed to create, edit, or delete a subscription if provided a user and host names in the request. The goal of LinkSubscriptionTag is then to output a block like:

      <A    HREF=[path]editSubscription.do?action=[action]&username=[user]&host=[host]">[action]
      </A>

      based on input block like:

      <app:linkSubscription 
        page="/editSubscription.do?action=Delete">Delete
      </app:linkSubscription>

      To reduce overhead, LinkSubscriptionTag uses "subscription" as the default name (which the iterator refers to as "ID"), so that can be omitted from the tag properties. The "action" portion of  the will differ, and so that is given as the page property to the tag

      Here are a few annotated highlights from LinkSubscriptionTag.java:

      1. Create a string buffer, and ask the request for the relative path to the application 
        StringBuffer url = new StringBuffer(request.getContextPath());
      2. Snag a reference to the subscription bean (for this iteration)
        subscription = (Subscription) pageContext.findAttribute(name);
      3. Append the username and host from the bean to the path request.
        url.append("&username="); url.append(BeanUtils.filter(subscription.getUser().getUsername()));
        url.append("&host="); 
        url.append(BeanUtils.filter(subscription.getHost()));

      These are the essentials, but be sure to see the full source in LinkSubscriptionTag.java for the rest of the error and logic checking that a working application needs to succeed. 

      Meanwhile, back on registration.jsp, there is one more link on the page. This uses yet another custom tag, the app:linkUser tag.

      <app:linkUser page="/editSubscription.do?action=Create">
        <bean:message key="registration.addSubscription"/>
      </app:linkUser>

      By this time, you must be ready to flip directly to LinkUserTag.java with nary a glance at the configuration file ...

      LinkUserTag.java

      Since they solve the same general problem, LinkUserTag and LinkSubscriptionTag are quite a bit a like, except that LinkUserTag grabs the user bean from the session context, instead of a subscription bean from the iteration. Like the LinkSubscriptionTag, the name for the user bean (e.g. "user") is defaulted, and can be omitted from the tag; all that's needed is the page property -- the rest is automatic!

      <app:linkUser page="/editSubscription.do?action=Create">
        <bean:message key="registration.addSubscription"/>
      </app:linkUser>

      When rendered, this displays a HTML hypertext link like:

      <a href="/struts-example/editSubscription.do?action=Create&amp;username=user">
        Add
      </a>

      Note that anchor links with ampersands should use the character entity &amp; as the LinkUserTag has done here (http://www.w3.org/TR/html401/appendix/notes.html#h-B.2.2). 

      Let's follow that "Add"  link now and see what's up with the editSubcription action anyway. 

      EditSubscriptionAction.java

      Predictably, we find a some now-familiar mappings in struts-config.xml 

      <!-- Subscription form bean -->
      <form-bean 
        name="subscriptionForm"
        type="org.apache.struts.webapp.example.SubscriptionForm"
      />

      <!-- Edit mail subscription -->
      <action path="/editSubscription"
        type="org.apache.struts.webapp.example.EditSubscriptionAction"
        name="subscriptionForm"
        scope="request"
        validate="false"
       >
        <forward name="failure" path="/mainMenu.jsp"/>
        <forward name="success" path="/subscription.jsp"/>
      </action>

      When we've introduced these type of mappings before, and mentioned that the struts-config.xml was parsed when the ActionServlet was initialized. But we should  make it clear that when the Struts digester parsed this file, it actually created standard Java objects, linked as properties to the controller. This means you don't have to edit Java source files just to add a bunch of "new" statements. (How cool is that?)

      Following what was specified by struts-config.xml, the controller makes sure that a subscriptionForm bean exists, along with the SubscriptionAction object, and then calls the action object's perform method. The perform method first checks to see that the user is logged-in. If not, control is forwarded to the login action. EditSubscriptionAction.perform then either creates a new subscription object (if the task is Create), or searches the user's subscription hashtable for a matching hostname (if  the task is Edit). 

      Finally, EditSubscriptionAction conforms the ActionForm bean with the database bean. There may be several subscriptions in the database, but in EditSubscriptionAction we expose the one selected (or just created) for this request to use. Once the Action form (called "subform" in the code)  is created and populated from the database, the bean's action is set to either Create or Edit, and control is forwarded to our "success" form, subscription.jsp . 

      Note that the servlet only creates one object for each action. Each request is handled as a separate thread, and passed to the single action object instance. This means your action objects must be multi-thread safe.

      But before turning to our final JSP, a word about our database model ...

      User.java and Subscription.java

      If you're used to working with relational databases, the links between the user and subscription objects may be confusing. A conventional relational database would create two distinct tables, one for the users and another for the subscriptions, and link them together with a user ID. The Example application implements a different model, a hierarchical database. Here a "table" of subscriptions is stored within each user object, something like the way a filing system stores documents within folders. 

      In addition to the usual getters and setters, the user object also has two methods for working with subscription objects. findSubscription takes a hostname and returns the subscription object for that host. getSubscriptions returns an array of all the subscriptions for the user (ready-made for the iterate tag!). Besides the fields needed to manage the SubscriptionForm data, the object also maintains a runtime link to its user object.

      To create a new subscription, EditSubscriptionAction.java simply creates a new subscription object, and sets its user to the object found in the request, and then forwards control to its input form, subscription.jsp. 

      subscription.jsp

      Saving the best for last, subscription.jsp demonstrates use of some interesting Struts custom form tags,  html:options and html:checkbox. 

      In registration.jsp, the Struts iteration tag was used to write a list of subscriptions. Another place where iterations and collections are handy is the option list for a HTML select tag. Since this is such a common situation, Struts offers a html:options (plural) tag can take an array of objects as a parameter. The tag then iterates over the members of the array (beans) to place each one inside an standard option tag. So given a block like

      <html:select property="type">
      <html:options
       collection="serverTypes"
       property="value"
       labelProperty="label"
      />
      </html:select>

      Struts outputs a block like

      <select name="type">
      <option value="imap" selected>IMAP Protocol</option>
      <option value="pop3">POP3 Protocol</option>
      </select>

      Here, one collection contained both the labels and the values, from properties of the same name. Options can also use a second array  for the labels, if they do not match the values. Options can use a Collection, Iterator, or Map for the source of the list.

      For demonstrations purposes, the serverTypes array is created at the top of this page. Usually, the html:options tag would be used to list valid items from a database maintained elsewhere. For example, if the application needed you to select a default subscription, a form might list the subscriptions in an options tag. 

      The LabelValueBean used to create the demonstration array is also a good example of simple but useful bean object.

      A particularly tricky HTML control is the checkbox. A problem with a checkbox is that it is only sent in the request if it is checked. If it is not checked, it is not sent (i.e. null). This can be problematic when trying to validate the form's data after it has been translated to a bean. The autoconnect property for a subscription demonstrates how to handle validation of a checkbox.

      SubscriptionForm.java 

      Struts validation is handled by the reset and validate methods of the ActionForm bean. When creating your own form beans, you should subclass ActionForm, add your own fields and their getters/setters, and implement the reset and validate methods. 

      Struts calls reset before populating the form, and calls validate after populating it but before the perform method of the action. Reset should assign default values to each of your form fields, usually null. But in the case of checkboxes, the default value should usually be false instead of null. 

      For more examples of validating forms, take another look at LoginForm.java and RegistrationForm.java.

      Back in subscription.jsp, we have one more block to cover. Although the same basic form can be used to created, edit, or delete a subscription, people might expect the buttons to be labeled differently in each case. subscription.jsp accommodates by using a logic tag to output a different set of buttons for each case. This doesn't really change the way subscription.jsp works, but it does make things less confusing for the user.

      <logic:equal 
       name="subscriptionForm"
       property="action"
       scope="request"
       value="Create">
       <html:submit>
         <bean:message key="button.save"/>
       </html:submit>
      </logic:equal>

      In the case of a request to delete a subscription, the submit button is labeled "Confirm", since this view is meant to give the user a last chance to cancel, before sending that task along to SaveSubscriptionAction.java.

      The actual action property is placed into the form as a hidden field, and SaveSubscriptionAction checks that property to execute the appropriate task.

      SaveSubscriptionAction.java

      Our final stop has the job of finishing what EditSubscriptionAction.java and subscription.jsp started. After the usual logic and error checking, SaveSubscriptionAction either deletes or updates the subscription object being handled by this request, and cleans up the bean, just to be tidy. By now, you should be very comfortable reading through the source on your own, to pickup the finer points.

      This concludes our tour. To review, you may wish to trace the path a new user takes when they register with the application for the first time You should also read over each of the .java and JSP files carefully, since we only covered the high points here.

      Summary

      • Struts uses a single controller servlet to route HTTP requests. 
      • The requests are routed to action objects according to path (or URI). 
      • Each request is handled as a separate thread
      • There is only one object for each action (URI), so your action objects must be multi-thread safe.
      • The configuration of action objects are loaded from a XML resource file, rather than hardcoded.
      • Action objects can respond to the request, or ask the controller to forward the request to another object or to another page, such as an input form. 
      • A library of custom tags works with the rest of the framework to enhance use of JavaServer Pages.
      • The Struts form tag can work closely with an action objects via a Struts ActionFormBean to retain the state of a data-entry form, and validate the data entered.
      • ActionForm beans can be automatically created by the JSP form or controller servlet. 
      • Struts supports a message resource for loading constants strings. Alternate message resources can be provided to internationalize an application.

      -- Ted Husted, 25 December 2000 < support@husted.com >.


      libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/src/web/welcome.jsp0000644000175000017500000000216610404045250030254 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>

      libstruts1.2-java-1.2.9/contrib/struts-faces/example2-webapp/build.xml0000644000175000017500000003311510404045210026352 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/contrib/struts-faces/sysclient-app/0000755000175000017500000000000010423130300024324 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/sysclient-app/src/0000755000175000017500000000000010404045210025117 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/sysclient-app/src/java/0000755000175000017500000000000010404045210026040 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/sysclient-app/src/java/org/0000755000175000017500000000000010404045210026627 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/sysclient-app/src/java/org/apache/0000755000175000017500000000000010404045210030050 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/sysclient-app/src/java/org/apache/struts/0000755000175000017500000000000010404045210031414 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/sysclient-app/src/java/org/apache/struts/faces/0000755000175000017500000000000010404045210032475 5ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000014710423140531011317 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/sysclient-app/src/java/org/apache/struts/faces/sysclient/libstruts1.2-java-1.2.9/contrib/struts-faces/sysclient-app/src/java/org/apache/struts/faces/sysclien0000755000175000017500000000000010423130300034243 5ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000017410423140531011317 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/sysclient-app/src/java/org/apache/struts/faces/sysclient/AbstractTestCase.javalibstruts1.2-java-1.2.9/contrib/struts-faces/sysclient-app/src/java/org/apache/struts/faces/sysclien0000644000175000017500000002116610404045240034262 0ustar arnaudarnaud00000000000000/* * Copyright 2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.faces.sysclient; import com.gargoylesoftware.htmlunit.ElementNotFoundException; import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.HtmlAnchor; import com.gargoylesoftware.htmlunit.html.HtmlBody; import com.gargoylesoftware.htmlunit.html.HtmlElement; import com.gargoylesoftware.htmlunit.html.HtmlForm; import com.gargoylesoftware.htmlunit.html.HtmlHead; import com.gargoylesoftware.htmlunit.html.HtmlPage; import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput; import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; import org.apache.commons.httpclient.Cookie; import org.apache.commons.httpclient.HttpState; /** *

      Abstract base class for system integration tests based on HtmlUnit.

      * * @version $Rev: 54934 $ $Date: 2004-10-16 18:07:50 +0100 (Sat, 16 Oct 2004) $ */ public abstract class AbstractTestCase extends TestCase { // ------------------------------------------------------------ Constructors /** *

      Construct a new instance of this test case.

      * * @param name Name of the new test case */ public AbstractTestCase(String name) { super(name); } // ------------------------------------------------------ Instance Variables /** *

      The HTTP state information for this test case.

      */ protected HttpState httpState = null; /** *

      The most recently retrieved page from the server.

      */ protected HtmlPage page = null; /** *

      The calculated URL for the installed "systest" web application. * This value is based on a system property named systest, * which must be defined as part of the command line that executes * each test case.

      */ protected URL url = null; /** *

      The web client for this test case.

      */ protected WebClient webClient = null; // ------------------------------------------------------ Test Setup Methods /** *

      Set up the instance variables required for this test case.

      */ public void setUp() throws Exception { // Calculate the URL for the installed "systest" web application String systest = System.getProperty("systest"); url = new URL(systest + "/"); // Initialize HtmlUnit constructs for this test case webClient = new WebClient(); httpState = webClient.getWebConnection().getStateForUrl(url("/")); } /** *

      Return the set of tests included in this test suite.

      */ public static Test suite() { return (new TestSuite(AbstractTestCase.class)); } /** *

      Tear down instance variables required by this test case.

      */ public void tearDown() { httpState = null; page = null; // sessionId = null; url = null; webClient = null; } // ------------------------------------------------------- Protected Methods /** *

      Return the body element for the most recently retrieved page. * If there is no such element, return null.

      */ protected HtmlBody body() throws Exception { Iterator elements = page.getChildElements().iterator(); while (elements.hasNext()) { HtmlElement element = (HtmlElement) elements.next(); if (element instanceof HtmlBody) { return ((HtmlBody) element); } } return (null); } /** *

      Return the HTML element with the specified id from the * most recently retrieved page. If there is no such element, return * null.

      * * @param id Identifier of the requested element. */ protected HtmlElement element(String id) throws Exception { try { return (page.getHtmlElementById(id)); } catch (ElementNotFoundException e) { return (null); } } /** *

      Return the form with the specified id from the most * recently retrieved page. If there is no such form, return * null.

      * * @param id Identifier of the requested form. */ protected HtmlForm form(String id) throws Exception { Iterator forms = page.getAllForms().iterator(); while (forms.hasNext()) { HtmlForm form = (HtmlForm) forms.next(); if (id.equals(form.getAttributeValue("id"))) { return (form); } } return (null); } /** *

      Return the head element for the most recently retrieved page. * If there is no such element, return null.

      */ protected HtmlHead head() throws Exception { Iterator elements = page.getChildElements().iterator(); while (elements.hasNext()) { HtmlElement element = (HtmlElement) elements.next(); if (element instanceof HtmlHead) { return ((HtmlHead) element); } } return (null); } /** *

      Click the specified hyperlink, and retrieve the subsequent page, * saving a reference so that other utility methods may be used to * retrieve information from it.

      * * @param anchor Anchor component to click * * @exception IOException if an input/output error occurs */ protected HtmlPage link(HtmlAnchor anchor) throws IOException { HtmlPage page = (HtmlPage) anchor.click(); this.page = page; return page; } /** *

      Retrieve and return the page at the specified context relative path. * Save a reference to this page so that other utility methods may be used * to retrieve information from it.

      * * @param path Context relative path * * @exception IllegalArgumentException if the context relative path * does not begin with a '/' character */ protected HtmlPage page(String path) throws Exception { HtmlPage page = (HtmlPage) webClient.getPage(url(path)); /* if (sessionId == null) { saveSessionId(page); } */ this.page = page; return (page); } /** *

      Submit the current page, using the specified component, and retrieve * the subsequent page, saving a reference so that other utility methods * may be used to retrieve information from it.

      * * @param submit Submit button component to click * * @exception IOException if an input/output error occurs */ protected HtmlPage submit(HtmlSubmitInput submit) throws IOException { HtmlPage page = (HtmlPage) submit.click(); this.page = page; return page; } /** *

      Return the page title from the most recently retrieved page. * Any leading and trailing whitespace will be trimmed.

      */ protected String title() throws Exception { return (page.getTitleText().trim()); } /** *

      Calculate and return an absolute URL for the specified context * relative path, which must begin with a '/' character.

      * * @param path Context relative path * * @exception IllegalArgumentException if the context relative path * does not begin with a '/' character */ protected URL url(String path) throws Exception { if (path.charAt(0) != '/') { throw new IllegalArgumentException("Context path '" + path + "' does not start with '/'"); } return new URL(url, path.substring(1)); } } ././@LongLink0000644000175000017500000000017310423140531011316 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/sysclient-app/src/java/org/apache/struts/faces/sysclient/ContextTestCase.javalibstruts1.2-java-1.2.9/contrib/struts-faces/sysclient-app/src/java/org/apache/struts/faces/sysclien0000644000175000017500000002052310404045232034257 0ustar arnaudarnaud00000000000000/* * Copyright 2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.faces.sysclient; import com.gargoylesoftware.htmlunit.ElementNotFoundException; import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.HtmlAnchor; import com.gargoylesoftware.htmlunit.html.HtmlBase; import com.gargoylesoftware.htmlunit.html.HtmlBody; import com.gargoylesoftware.htmlunit.html.HtmlElement; import com.gargoylesoftware.htmlunit.html.HtmlForm; import com.gargoylesoftware.htmlunit.html.HtmlHead; import com.gargoylesoftware.htmlunit.html.HtmlHiddenInput; import com.gargoylesoftware.htmlunit.html.HtmlLink; import com.gargoylesoftware.htmlunit.html.HtmlPage; import com.gargoylesoftware.htmlunit.html.HtmlPasswordInput; import com.gargoylesoftware.htmlunit.html.HtmlResetInput; import com.gargoylesoftware.htmlunit.html.HtmlSpan; import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput; import com.gargoylesoftware.htmlunit.html.HtmlTextInput; import java.net.URL; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; /** *

      Test case for verifying FacesContext information against * what is visible in the Struts Action method that is invoked.

      * * @version $Rev: 54934 $ $Date: 2004-10-16 18:07:50 +0100 (Sat, 16 Oct 2004) $ */ public class ContextTestCase extends AbstractTestCase { // ------------------------------------------------------------ Constructors /** *

      Construct a new instance of this test case.

      * * @param name Name of the new test case */ public ContextTestCase(String name) { super(name); } // ------------------------------------------------------ Instance Variables // ------------------------------------------------------ Test Setup Methods /** *

      Set up the instance variables required for this test case.

      */ public void setUp() throws Exception { super.setUp(); page("/context.faces"); } /** *

      Return the set of tests included in this test suite.

      */ public static Test suite() { return (new TestSuite(ContextTestCase.class)); } /** *

      Tear down instance variables required by this test case.

      */ public void tearDown() { super.tearDown(); } // ------------------------------------------------- Individual Test Methods /** *

      Verify the content of a pristine page returned when executing this * view for the first time.

      */ public void testPristine() throws Exception { HtmlSpan span = null; assertEquals("context", title()); // Validate FacesContext Values span = (HtmlSpan) element("form:renderKitIdFC"); assertEquals("HTML_BASIC", span.asText()); span = (HtmlSpan) element("form:viewIdFC"); assertEquals("/context.jsp", span.asText()); // Validate ExternalContext Values span = (HtmlSpan) element("form:authTypeEC"); assertEquals("", span.asText()); span = (HtmlSpan) element("form:remoteUserEC"); assertEquals("", span.asText()); span = (HtmlSpan) element("form:requestContextPathEC"); assertEquals("/struts-faces-systest1", span.asText()); // FIXME - Ant property? span = (HtmlSpan) element("form:requestLocaleEC"); String formRequestLocaleEC = span.asText(); // FIXME - validate this span = (HtmlSpan) element("form:requestPathInfoEC"); assertEquals("", span.asText()); span = (HtmlSpan) element("form:requestServletPathEC"); assertEquals("/context.jsp", span.asText()); // Validate HttpServletRequest Values span = (HtmlSpan) element("form:authTypeRQ"); assertEquals("", span.asText()); span = (HtmlSpan) element("form:contextPathRQ"); assertEquals("/struts-faces-systest1", span.asText()); // FIXME - Ant property? span = (HtmlSpan) element("form:localeRQ"); assertEquals(formRequestLocaleEC, span.asText()); span = (HtmlSpan) element("form:pathInfoRQ"); assertEquals("", span.asText()); span = (HtmlSpan) element("form:remoteUserRQ"); assertEquals("", span.asText()); span = (HtmlSpan) element("form:servletPathRQ"); assertEquals("/context.jsp", span.asText()); // Validate ServletContext Values span = (HtmlSpan) element("form:majorVersionSC"); assertEquals("2", span.asText()); span = (HtmlSpan) element("form:minorVersionSC"); assertTrue("3".equals(span.asText()) || "4".equals(span.asText())); } /** *

      Submit the initial form and validate the resulting values.

      */ public void testSubmit() throws Exception { HtmlSpan span = null; HtmlSpan spanCA = null; HtmlSubmitInput submit = (HtmlSubmitInput) element("form:submit"); submit(submit); assertEquals("context1", title()); // Validate FacesContext Values span = (HtmlSpan) element("form:renderKitIdFC"); assertEquals("HTML_BASIC", span.asText()); span = (HtmlSpan) element("form:viewIdFC"); assertEquals("/context1.jsp", span.asText()); // Validate ExternalContext Values span = (HtmlSpan) element("form:authTypeEC"); assertEquals("", span.asText()); span = (HtmlSpan) element("form:remoteUserEC"); assertEquals("", span.asText()); span = (HtmlSpan) element("form:requestContextPathEC"); assertEquals("/struts-faces-systest1", span.asText()); // FIXME - Ant property? span = (HtmlSpan) element("form:requestLocaleEC"); String formRequestLocaleEC = span.asText(); // FIXME - validate this span = (HtmlSpan) element("form:requestPathInfoEC"); assertEquals("", span.asText()); span = (HtmlSpan) element("form:requestServletPathEC"); assertEquals("/context1.jsp", span.asText()); // Validate HttpServletRequest Values span = (HtmlSpan) element("form:authTypeRQ"); assertEquals("", span.asText()); span = (HtmlSpan) element("form:contextPathRQ"); assertEquals("/struts-faces-systest1", span.asText()); // FIXME - Ant property? spanCA = (HtmlSpan) element("form:contextPathCA"); assertEquals(span.asText(), spanCA.asText()); span = (HtmlSpan) element("form:localeRQ"); assertEquals(formRequestLocaleEC, span.asText()); spanCA = (HtmlSpan) element("form:localeCA"); assertEquals(span.asText(), spanCA.asText()); span = (HtmlSpan) element("form:pathInfoRQ"); assertEquals("", span.asText()); spanCA = (HtmlSpan) element("form:pathInfoCA"); assertEquals(span.asText(), spanCA.asText()); span = (HtmlSpan) element("form:remoteUserRQ"); assertEquals("", span.asText()); spanCA = (HtmlSpan) element("form:remoteUserCA"); assertEquals(span.asText(), spanCA.asText()); span = (HtmlSpan) element("form:servletPathRQ"); assertEquals("/context1.jsp", span.asText()); spanCA = (HtmlSpan) element("form:servletPathCA"); assertEquals("/context.faces", spanCA.asText()); // Validate ServletContext Values span = (HtmlSpan) element("form:majorVersionSC"); assertEquals("2", span.asText()); span = (HtmlSpan) element("form:minorVersionSC"); assertTrue("3".equals(span.asText()) || "4".equals(span.asText())); } } ././@LongLink0000644000175000017500000000017110423140531011314 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/sysclient-app/src/java/org/apache/struts/faces/sysclient/LogonTestCase.javalibstruts1.2-java-1.2.9/contrib/struts-faces/sysclient-app/src/java/org/apache/struts/faces/sysclien0000644000175000017500000003716410404045216034272 0ustar arnaudarnaud00000000000000/* * Copyright 2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.faces.sysclient; import com.gargoylesoftware.htmlunit.ElementNotFoundException; import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.HtmlAnchor; import com.gargoylesoftware.htmlunit.html.HtmlBase; import com.gargoylesoftware.htmlunit.html.HtmlBody; import com.gargoylesoftware.htmlunit.html.HtmlElement; import com.gargoylesoftware.htmlunit.html.HtmlForm; import com.gargoylesoftware.htmlunit.html.HtmlHead; import com.gargoylesoftware.htmlunit.html.HtmlHiddenInput; import com.gargoylesoftware.htmlunit.html.HtmlLink; import com.gargoylesoftware.htmlunit.html.HtmlPage; import com.gargoylesoftware.htmlunit.html.HtmlPasswordInput; import com.gargoylesoftware.htmlunit.html.HtmlResetInput; import com.gargoylesoftware.htmlunit.html.HtmlSpan; import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput; import com.gargoylesoftware.htmlunit.html.HtmlTextInput; import java.net.URL; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; /** *

      Test case for a logon form that accepts a username and password.

      * *

      FIXME - The JavaScript execution support in * HtmlUnit 1.2.3 is not sufficient to test clicking the hyperlink * generated by a Command Link component, so it is not tested automatically.

      * * @version $Rev: 55303 $ $Date: 2004-10-22 03:56:53 +0100 (Fri, 22 Oct 2004) $ */ public class LogonTestCase extends AbstractTestCase { // ------------------------------------------------------------ Constructors /** *

      Construct a new instance of this test case.

      * * @param name Name of the new test case */ public LogonTestCase(String name) { super(name); } // ------------------------------------------------------ Instance Variables // ------------------------------------------------------ Test Setup Methods /** *

      Set up the instance variables required for this test case.

      */ public void setUp() throws Exception { super.setUp(); page("/logon.faces"); } /** *

      Return the set of tests included in this test suite.

      */ public static Test suite() { return (new TestSuite(LogonTestCase.class)); } /** *

      Tear down instance variables required by this test case.

      */ public void tearDown() { super.tearDown(); } // ------------------------------------------------- Individual Test Methods /** *

      Submit incorrect input fields and verify the correct response.

      */ public void testIncorrect() throws Exception { HtmlSpan span = null; HtmlTextInput username = (HtmlTextInput) element("form:username"); HtmlPasswordInput password = (HtmlPasswordInput) element("form:password"); HtmlSubmitInput submit = (HtmlSubmitInput) element("form:submit"); username.setValueAttribute("bb"); password.setValueAttribute(""); submit(submit); assertEquals("logon", title()); span = (HtmlSpan) element("globalErrors"); assertNotNull(span); assertEquals("[EH][EP] can not be less than 3 characters.[ES]" + "[EP] is required.[ES][EF]", span.asText()); username = (HtmlTextInput) element("form:username"); assertNotNull(username); assertEquals("bb", username.getValueAttribute()); span = (HtmlSpan) element("form:usernameErrors"); assertNotNull(span); // FIXME: response string should really include "Username:" assertEquals("[EH][EP] can not be less than 3 characters.[ES][EF]", span.asText()); password = (HtmlPasswordInput) element("form:password"); assertNotNull(password); assertEquals("", password.getValueAttribute()); span = (HtmlSpan) element("form:passwordErrors"); assertNotNull(span); // FIXME: response string should really include "Password:" assertEquals("[EH][EP] is required.[ES][EF]", span.asText()); } /** *

      Verify the content of a pristine page returned when executing this * view for the first time.

      */ public void testPristine() throws Exception { HtmlSpan span = null; HtmlElement html = (HtmlElement) page; assertEquals("html", html.getTagName()); assertEquals("http://www.w3.org/1999/xhtml", html.getAttributeValue("xmlns")); assertEquals("logon", title()); HtmlForm form = (HtmlForm) element("form"); assertNotNull(form); assertEquals("", form.getAcceptAttribute()); assertEquals("", form.getAcceptCharsetAttribute()); String url = this.url.toString(); url = url.substring(0, url.length() - 1); url = url.substring(url.lastIndexOf('/')); String action = form.getActionAttribute(); int semicolon = action.indexOf(';'); if (semicolon >= 0) { action = action.substring(0, semicolon); } assertEquals(url + "/logon.faces", action); assertEquals("", form.getEnctypeAttribute()); assertEquals("post", form.getMethodAttribute()); assertEquals("logonForm", form.getNameAttribute()); assertEquals("", form.getOnResetAttribute()); assertEquals("", form.getOnSubmitAttribute()); assertEquals("", form.getTargetAttribute()); span = (HtmlSpan) element("form:usernamePrompt"); assertNotNull(span); assertEquals("Username:", span.asText()); HtmlTextInput username = (HtmlTextInput) element("form:username"); assertNotNull(username); assertEquals("", username.getLangAttribute()); assertEquals("form:username", username.getNameAttribute()); assertEquals("", username.getOnClickAttribute()); assertEquals("", username.getOnDblClickAttribute()); assertEquals("", username.getOnKeyDownAttribute()); assertEquals("", username.getOnKeyPressAttribute()); assertEquals("", username.getOnKeyUpAttribute()); assertEquals("", username.getOnMouseDownAttribute()); assertEquals("", username.getOnMouseMoveAttribute()); assertEquals("", username.getOnMouseOutAttribute()); assertEquals("", username.getOnMouseOverAttribute()); assertEquals("", username.getOnMouseUpAttribute()); assertEquals("text", username.getTypeAttribute()); assertEquals("", username.getValueAttribute()); span = (HtmlSpan) element("form:passwordPrompt"); assertNotNull(span); assertEquals("Password:", span.asText()); HtmlPasswordInput password = (HtmlPasswordInput) element("form:password"); assertNotNull(password); assertEquals("", password.getLangAttribute()); assertEquals("form:password", password.getNameAttribute()); assertEquals("", password.getOnClickAttribute()); assertEquals("", password.getOnDblClickAttribute()); assertEquals("", password.getOnKeyDownAttribute()); assertEquals("", password.getOnKeyPressAttribute()); assertEquals("", password.getOnKeyUpAttribute()); assertEquals("", password.getOnMouseDownAttribute()); assertEquals("", password.getOnMouseMoveAttribute()); assertEquals("", password.getOnMouseOutAttribute()); assertEquals("", password.getOnMouseOverAttribute()); assertEquals("", password.getOnMouseUpAttribute()); assertEquals("password", password.getTypeAttribute()); assertEquals("", password.getValueAttribute()); HtmlSubmitInput submit = (HtmlSubmitInput) element("form:submit"); assertNotNull(submit); assertEquals("", submit.getLangAttribute()); assertEquals("form:submit", submit.getNameAttribute()); assertEquals("", submit.getOnClickAttribute()); assertEquals("", submit.getOnDblClickAttribute()); assertEquals("", submit.getOnKeyDownAttribute()); assertEquals("", submit.getOnKeyPressAttribute()); assertEquals("", submit.getOnKeyUpAttribute()); assertEquals("", submit.getOnMouseDownAttribute()); assertEquals("", submit.getOnMouseMoveAttribute()); assertEquals("", submit.getOnMouseOutAttribute()); assertEquals("", submit.getOnMouseOverAttribute()); assertEquals("", submit.getOnMouseUpAttribute()); assertEquals("submit", submit.getTypeAttribute()); assertEquals("Logon", submit.getValueAttribute()); HtmlResetInput reset = (HtmlResetInput) element("form:reset"); assertNotNull(reset); assertEquals("", reset.getLangAttribute()); assertEquals("form:reset", reset.getNameAttribute()); assertEquals("", reset.getOnClickAttribute()); assertEquals("", reset.getOnDblClickAttribute()); assertEquals("", reset.getOnKeyDownAttribute()); assertEquals("", reset.getOnKeyPressAttribute()); assertEquals("", reset.getOnKeyUpAttribute()); assertEquals("", reset.getOnMouseDownAttribute()); assertEquals("", reset.getOnMouseMoveAttribute()); assertEquals("", reset.getOnMouseOutAttribute()); assertEquals("", reset.getOnMouseOverAttribute()); assertEquals("", reset.getOnMouseUpAttribute()); assertEquals("reset", reset.getTypeAttribute()); assertEquals("Reset", reset.getValueAttribute()); HtmlSubmitInput cancel = (HtmlSubmitInput) element("form:cancel"); assertNotNull(cancel); assertEquals("", cancel.getLangAttribute()); assertEquals("form:cancel", cancel.getNameAttribute()); assertEquals("", cancel.getOnClickAttribute()); assertEquals("", cancel.getOnDblClickAttribute()); assertEquals("", cancel.getOnKeyDownAttribute()); assertEquals("", cancel.getOnKeyPressAttribute()); assertEquals("", cancel.getOnKeyUpAttribute()); assertEquals("", cancel.getOnMouseDownAttribute()); assertEquals("", cancel.getOnMouseMoveAttribute()); assertEquals("", cancel.getOnMouseOutAttribute()); assertEquals("", cancel.getOnMouseOverAttribute()); assertEquals("", cancel.getOnMouseUpAttribute()); assertEquals("submit", cancel.getTypeAttribute()); assertEquals("Cancel", cancel.getValueAttribute()); HtmlAnchor anchor = (HtmlAnchor) element("form:submit2"); assertNotNull(anchor); assertEquals("", anchor.getAccessKeyAttribute()); assertEquals("", anchor.getCharsetAttribute()); assertEquals("", anchor.getClassAttribute()); assertEquals("", anchor.getCoordsAttribute()); assertEquals("#", anchor.getHrefAttribute()); assertEquals("form:submit2", anchor.getIdAttribute()); assertEquals("", anchor.getLangAttribute()); assertEquals("", anchor.getHrefLangAttribute()); assertEquals("", anchor.getOnBlurAttribute()); assertTrue (anchor.getOnClickAttribute().startsWith ("document.forms['form']" + "['org_apache_struts_faces_renderer_CommandLinkRenderer']" + ".value='form:submit2';")); assertEquals("", anchor.getOnDblClickAttribute()); assertEquals("", anchor.getOnKeyDownAttribute()); assertEquals("", anchor.getOnKeyPressAttribute()); assertEquals("", anchor.getOnKeyUpAttribute()); assertEquals("", anchor.getOnMouseDownAttribute()); assertEquals("", anchor.getOnMouseMoveAttribute()); assertEquals("", anchor.getOnMouseOutAttribute()); assertEquals("", anchor.getOnMouseOverAttribute()); assertEquals("", anchor.getOnMouseUpAttribute()); assertEquals("", anchor.getTextDirectionAttribute()); assertEquals("", anchor.getXmlLangAttribute()); assertEquals("", anchor.getOnFocusAttribute()); assertEquals("", anchor.getRelAttribute()); assertEquals("", anchor.getRevAttribute()); assertEquals("", anchor.getShapeAttribute()); assertEquals("", anchor.getStyleAttribute()); assertEquals("", anchor.getTabIndexAttribute()); assertEquals("a", anchor.getTagName()); assertEquals("", anchor.getTargetAttribute()); assertEquals("", anchor.getTitleAttribute()); assertEquals("", anchor.getTypeAttribute()); assertEquals("Logon", anchor.asText()); List list = form.getHtmlElementsByAttribute ("input", "name", "org_apache_struts_faces_renderer_CommandLinkRenderer"); assertNotNull(list); assertEquals(1, list.size()); HtmlHiddenInput hidden = (HtmlHiddenInput) list.get(0); assertEquals("hidden", hidden.getTypeAttribute()); assertEquals("", hidden.getValueAttribute()); } /** *

      Submit known-bad mismatch and verify the correct response.

      */ public void testMismatch() throws Exception { HtmlSpan span = null; HtmlTextInput username = (HtmlTextInput) element("form:username"); HtmlPasswordInput password = (HtmlPasswordInput) element("form:password"); HtmlSubmitInput submit = (HtmlSubmitInput) element("form:submit"); username.setValueAttribute("baduser"); password.setValueAttribute("badpass"); submit(submit); assertEquals("logon", title()); span = (HtmlSpan) element("globalErrors"); assertNotNull(span); assertEquals("[EH][EP]Invalid username/password combination[ES][EF]", span.asText()); username = (HtmlTextInput) element("form:username"); assertNotNull(username); assertEquals("baduser", username.getValueAttribute()); span = (HtmlSpan) element("form:usernameErrors"); assertNotNull(span); assertEquals("", span.asText()); password = (HtmlPasswordInput) element("form:password"); assertNotNull(password); assertEquals("", password.getValueAttribute()); span = (HtmlSpan) element("form:passwordErrors"); assertNotNull(span); assertEquals("", span.asText()); } /** *

      Submit known-good username and password values, and * verify the correct response.

      */ public void testSuccessful() throws Exception { HtmlTextInput username = (HtmlTextInput) element("form:username"); HtmlPasswordInput password = (HtmlPasswordInput) element("form:password"); HtmlSubmitInput submit = (HtmlSubmitInput) element("form:submit"); username.setValueAttribute("gooduser"); password.setValueAttribute("goodpass"); submit(submit); assertEquals("logon1", title()); } } ././@LongLink0000644000175000017500000000017210423140531011315 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/sysclient-app/src/java/org/apache/struts/faces/sysclient/SimpleTestCase.javalibstruts1.2-java-1.2.9/contrib/struts-faces/sysclient-app/src/java/org/apache/struts/faces/sysclien0000644000175000017500000002065410404045210034260 0ustar arnaudarnaud00000000000000/* * Copyright 2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.faces.sysclient; import com.gargoylesoftware.htmlunit.ElementNotFoundException; import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.HtmlBase; import com.gargoylesoftware.htmlunit.html.HtmlBody; import com.gargoylesoftware.htmlunit.html.HtmlElement; import com.gargoylesoftware.htmlunit.html.HtmlForm; import com.gargoylesoftware.htmlunit.html.HtmlHead; import com.gargoylesoftware.htmlunit.html.HtmlLink; import com.gargoylesoftware.htmlunit.html.HtmlPage; import com.gargoylesoftware.htmlunit.html.HtmlSpan; import java.net.URL; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; /** *

      Test case for a simple Struts-Faces page that is statically examined * to ensure that all of the expected elements have been rendered correctly.

      * * @version $Rev: 54934 $ $Date: 2004-10-16 18:07:50 +0100 (Sat, 16 Oct 2004) $ */ public class SimpleTestCase extends AbstractTestCase { // ------------------------------------------------------------ Constructors /** *

      Construct a new instance of this test case.

      * * @param name Name of the new test case */ public SimpleTestCase(String name) { super(name); } // ------------------------------------------------------ Instance Variables // ------------------------------------------------------ Test Setup Methods /** *

      Set up the instance variables required for this test case.

      */ public void setUp() throws Exception { super.setUp(); page("/simple.faces"); } /** *

      Return the set of tests included in this test suite.

      */ public static Test suite() { return (new TestSuite(SimpleTestCase.class)); } /** *

      Tear down instance variables required by this test case.

      */ public void tearDown() { super.tearDown(); } // ------------------------------------------------- Individual Test Methods /** *

      Verify the presence and contents of a base element.

      */ public void testBase() throws Exception { HtmlBase base = null; Iterator kids = head().getChildElements().iterator(); while (kids.hasNext()) { HtmlElement kid = (HtmlElement) kids.next(); if (kid instanceof HtmlBase) { assertNull("Only one base element present", base); base = (HtmlBase) kid; } } assertNotNull("Exactly one base element present", base); assertEquals("base", base.getTagName()); assertEquals(url("/simple.jsp").toString(), base.getHrefAttribute()); assertEquals("", base.getTargetAttribute()); } /** *

      Verify the presence and contents of an html element.

      */ public void testHtml() throws Exception { HtmlElement html = (HtmlElement) page; assertEquals("html", html.getTagName()); assertEquals("http://www.w3.org/1999/xhtml", html.getAttributeValue("xmlns")); // TODO: verify the "lang" attribute // TODO: verify the "xml:lang" attribute } /** *

      Verify that the loadMessages tag properly exposes a Struts * MessageResources instance as a Map.

      */ public void testLoadMessages() throws Exception { HtmlSpan span = null; span = (HtmlSpan) element("lookup-simple"); assertNotNull(span); assertEquals("Resource Simple Text", span.asText()); span = (HtmlSpan) element("lookup-filtered"); assertNotNull(span); assertEquals("Resource Filtered Text", span.asText()); span = (HtmlSpan) element("lookup-unfiltered"); assertNotNull(span); assertEquals("Resource Unfiltered Text", span.asText()); } /** *

      Verify the presence and contents of several message components.

      */ public void testMessage() throws Exception { HtmlSpan span = null; span = (HtmlSpan) element("message-direct"); assertNotNull(span); assertEquals("Resource Simple Text", span.asText()); span = (HtmlSpan) element("message-indirect"); assertNotNull(span); assertEquals("Resource Simple Text", span.asText()); span = (HtmlSpan) element("message-filtered"); assertNotNull(span); assertEquals("Resource Filtered Text", span.asText()); span = (HtmlSpan) element("message-unfiltered"); assertNotNull(span); assertEquals("Resource Unfiltered Text", span.asText()); span = (HtmlSpan) element("message-substitute"); assertNotNull(span); assertEquals("From Here to Eternity", span.asText()); } /** *

      Verify the presence and contents of a stylesheet element.

      */ public void testStylesheet() throws Exception { HtmlLink link = null; Iterator kids = head().getChildElements().iterator(); while (kids.hasNext()) { HtmlElement kid = (HtmlElement) kids.next(); if (kid instanceof HtmlLink) { assertNull("Only one stylesheet element present", link); link = (HtmlLink) kid; } } assertNotNull("Exactly one stylesheet element present", link); assertEquals("link", link.getTagName()); assertEquals("", link.getCharsetAttribute()); String url = this.url.toString(); url = url.substring(0, url.length() - 1); url = url.substring(url.lastIndexOf('/')); assertEquals(url + "/stylesheet.css", link.getHrefAttribute()); assertEquals("", link.getHrefLangAttribute()); assertEquals("", link.getMediaAttribute()); assertEquals("stylesheet", link.getRelAttribute()); assertEquals("", link.getRevAttribute()); assertEquals("", link.getTargetAttribute()); assertEquals("text/css", link.getTypeAttribute()); } /** *

      Verify the proper operation of clientId in a subview.Verify the title of the returned page.

      */ public void testTitle() throws Exception { assertEquals("simple", title()); } /** *

      Verify the presence and contents of several write components.

      */ public void testWrite() throws Exception { HtmlSpan span = null; span = (HtmlSpan) element("write-literal"); assertNotNull(span); assertEquals("Literal Write Content", span.asText()); span = (HtmlSpan) element("write-filtered"); assertNotNull(span); assertEquals("Literal Filtered Content", span.asText()); span = (HtmlSpan) element("write-unfiltered"); assertNotNull(span); assertEquals("Literal Unfiltered Content", span.asText()); span = (HtmlSpan) element("retrieved-literal"); assertNotNull(span); assertEquals("Retrieved Simple Content", span.asText()); span = (HtmlSpan) element("retrieved-filtered"); assertNotNull(span); assertEquals("Retrieved Filtered Content", span.asText()); span = (HtmlSpan) element("retrieved-unfiltered"); assertNotNull(span); assertEquals("Retrieved Unfiltered Content", span.asText()); } } libstruts1.2-java-1.2.9/contrib/struts-faces/sysclient-app/build.xml0000644000175000017500000001645210404045230026163 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/contrib/struts-faces/systest1-webapp/0000755000175000017500000000000010423130300024604 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/systest1-webapp/src/0000755000175000017500000000000010404045172025406 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/systest1-webapp/src/java/0000755000175000017500000000000010404045210026320 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/systest1-webapp/src/java/org/0000755000175000017500000000000010404045210027107 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/systest1-webapp/src/java/org/apache/0000755000175000017500000000000010404045210030330 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/systest1-webapp/src/java/org/apache/struts/0000755000175000017500000000000010404045210031674 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/systest1-webapp/src/java/org/apache/struts/faces/0000755000175000017500000000000010404045210032755 5ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000015010423140531011311 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/systest1-webapp/src/java/org/apache/struts/faces/systest1/libstruts1.2-java-1.2.9/contrib/struts-faces/systest1-webapp/src/java/org/apache/struts/faces/systes0000755000175000017500000000000010423130300034224 5ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000020710423140531011314 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/systest1-webapp/src/java/org/apache/struts/faces/systest1/ApplicationResources.propertieslibstruts1.2-java-1.2.9/contrib/struts-faces/systest1-webapp/src/java/org/apache/struts/faces/systes0000644000175000017500000000337610404045244034252 0ustar arnaudarnaud00000000000000# Copyright 2002,2004 The Apache Software Foundation. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # $Id: ApplicationResources.properties 54202 2004-10-10 02:30:58Z craigmcc $ button.cancel=Cancel button.logon=Logon button.reset=Reset errors.header=[EH] errors.footer=[EF] errors.prefix=[EP] errors.suffix=[ES] errors.required={0} is required. errors.minlength={0} can not be less than {1} characters. errors.maxlength={0} can not be more than {1} characters. errors.invalid={0} is invalid. errors.byte={0} must be a byte. errors.short={0} must be a short. errors.integer={0} must be an integer. errors.long={0} must be a long. errors.float={0} must be a float. errors.double={0} must be a double. errors.date={0} is not a date. errors.range={0} is not in the range {1} through {2}. errors.creditcard={0} is an invalid credit card number. errors.email={0} is an invalid e-mail address. logon.username=Username is required logon.password=Password is required logon.mismatch=Invalid username/password combination prompt.username=Username: prompt.password=Password: resource.simple=Resource Simple Text resource.filtered=Resource Filtered Text resource.unfiltered=Resource Unfiltered Text resource.substitute=From {0} to {1} ././@LongLink0000644000175000017500000000017010423140531011313 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/systest1-webapp/src/java/org/apache/struts/faces/systest1/BindingBean.javalibstruts1.2-java-1.2.9/contrib/struts-faces/systest1-webapp/src/java/org/apache/struts/faces/systes0000644000175000017500000000240510404045250034237 0ustar arnaudarnaud00000000000000/* * Copyright 2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * $Id: BindingBean.java 54934 2004-10-16 17:07:50Z germuska $ */ package org.apache.struts.faces.systest1; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; /** *

      Bean used to test the binding attribute for * selected components.

      */ public class BindingBean { private UIComponent write1 = null; public UIComponent getWrite1() { return this.write1; } public void setWrite1(UIComponent write1) { this.write1 = write1; } public String getWrite1ClientId() { return write1.getClientId(FacesContext.getCurrentInstance()); } } ././@LongLink0000644000175000017500000000017210423140531011315 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/systest1-webapp/src/java/org/apache/struts/faces/systest1/ContextAction.javalibstruts1.2-java-1.2.9/contrib/struts-faces/systest1-webapp/src/java/org/apache/struts/faces/systes0000644000175000017500000000547510404045214034251 0ustar arnaudarnaud00000000000000/* * Copyright 2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * $Id: ContextAction.java 54934 2004-10-16 17:07:50Z germuska $ */ package org.apache.struts.faces.systest1; import java.util.Locale; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionError; import org.apache.struts.action.ActionErrors; /** *

      Action to render properties from ExternalContext and the corresponding * request and application context objects.

      */ public class ContextAction extends Action { private static final Log log = LogFactory.getLog(ContextAction.class); private String authType = null; private String contextPath = null; private Locale locale = null; private String pathInfo = null; private String remoteUser = null; private String servletPath = null; public String getAuthType() { return (this.authType); } public String getContextPath() { return (this.contextPath); } public Locale getLocale() { return (this.locale); } public String getPathInfo() { return (this.pathInfo); } public String getRemoteUser() { return (this.remoteUser); } public String getServletPath() { return (this.servletPath); } /** *

      Process an attempted logon.

      */ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { this.authType = request.getAuthType(); this.contextPath = request.getContextPath(); this.locale = request.getLocale(); this.pathInfo = request.getPathInfo(); this.remoteUser = request.getRemoteUser(); this.servletPath = request.getServletPath(); request.setAttribute("contextAction", this); return (mapping.findForward("context1")); } } ././@LongLink0000644000175000017500000000017010423140531011313 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/systest1-webapp/src/java/org/apache/struts/faces/systest1/LogonAction.javalibstruts1.2-java-1.2.9/contrib/struts-faces/systest1-webapp/src/java/org/apache/struts/faces/systes0000644000175000017500000000652210404045210034237 0ustar arnaudarnaud00000000000000/* * Copyright 2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * $Id: LogonAction.java 54934 2004-10-16 17:07:50Z germuska $ */ package org.apache.struts.faces.systest1; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionError; import org.apache.struts.action.ActionErrors; /** *

      Action to process logon attempts. It accepts only the combination * "gooduser" and "goodpass", while rejecting all others. Successful * login requests a logical forward "login1", while unsuccessful login * returns to the input form.

      */ public class LogonAction extends Action { private static final Log log = LogFactory.getLog(LogonAction.class); /** *

      Process an attempted logon.

      */ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { ActionErrors errors = new ActionErrors(); String username = (String) PropertyUtils.getSimpleProperty(form, "username"); if ((username == null) || ("".equals(username))) { errors.add("username", new ActionError("logon.username")); } String password = (String) PropertyUtils.getSimpleProperty(form, "password"); if ((password == null) || ("".equals(password))) { errors.add("password", new ActionError("logon.password")); } if (log.isTraceEnabled()) { log.trace("username=" + username + ",password=" + password); } if (errors.isEmpty() && (!"gooduser".equals(username) || !"goodpass".equals(password))) { errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("logon.mismatch")); } if (errors.isEmpty()) { if (log.isDebugEnabled()) { log.debug("Successful logon, forwarding to logon1"); } return (mapping.findForward("logon1")); } else { if (log.isDebugEnabled()) { log.debug("Unsuccessful logon, returning to input"); } saveErrors(request, errors); return (mapping.getInputForward()); } } } ././@LongLink0000644000175000017500000000016710423140531011321 Lustar 00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/systest1-webapp/src/java/org/apache/struts/faces/systest1/SimpleBean.javalibstruts1.2-java-1.2.9/contrib/struts-faces/systest1-webapp/src/java/org/apache/struts/faces/systes0000644000175000017500000000250110404045212034232 0ustar arnaudarnaud00000000000000/* * Copyright 2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * $Id: SimpleBean.java 54934 2004-10-16 17:07:50Z germuska $ */ package org.apache.struts.faces.systest1; /** *

      Simple JavaBean for use in managed bean and value binding tests.

      */ public class SimpleBean { public String getEternity() { return "Eternity"; } public String getSimpleResource() { return "resource.simple"; } public String getSimpleContent() { return "Retrieved Simple Content"; } public String getFilteredContent() { return "Retrieved Filtered Content"; } public String getUnfilteredContent() { return "Retrieved Unfiltered Content"; } } libstruts1.2-java-1.2.9/contrib/struts-faces/systest1-webapp/src/web/0000755000175000017500000000000010423130300026150 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/systest1-webapp/src/web/WEB-INF/0000755000175000017500000000000010423130300027177 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/contrib/struts-faces/systest1-webapp/src/web/WEB-INF/faces-config.xml0000644000175000017500000000257410404045204032264 0ustar arnaudarnaud00000000000000 binding org.apache.struts.faces.systest1.BindingBean request simple org.apache.struts.faces.systest1.SimpleBean request libstruts1.2-java-1.2.9/contrib/struts-faces/systest1-webapp/src/web/WEB-INF/struts-config.xml0000644000175000017500000000661410404045212032545 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/contrib/struts-faces/systest1-webapp/src/web/WEB-INF/validation.xml0000644000175000017500000000561610404045212032071 0ustar arnaudarnaud00000000000000
      maxlength 16 minlength 3 maxlength 16 minlength 3
      libstruts1.2-java-1.2.9/contrib/struts-faces/systest1-webapp/src/web/WEB-INF/web.xml0000644000175000017500000000445310404045224030515 0ustar arnaudarnaud00000000000000 Struts-Faces System Integration Test Webapp javax.faces.STATE_SAVING_METHOD @state@ MYFACES_BEGIN net.sourceforge.myfaces.webapp.StartupServletContextListener MYFACES_END faces javax.faces.webapp.FacesServlet 1 action org.apache.struts.action.ActionServlet config /WEB-INF/struts-config.xml 2 faces *.faces action *.do index.jsp libstruts1.2-java-1.2.9/contrib/struts-faces/systest1-webapp/src/web/context.jsp0000644000175000017500000001243110404045172030366 0ustar arnaudarnaud00000000000000 <%@ page contentType="text/html;charset=UTF-8" %> <%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %> <%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %> <%@ taglib prefix="s" uri="http://struts.apache.org/tags-faces" %> context <%-- ViewRoot Values --%> <%-- ExternalContext Values --%> <%-- Request Values --%> <%-- ServletContext Values --%> <%-- Submit Buttons --%> libstruts1.2-java-1.2.9/contrib/struts-faces/systest1-webapp/src/web/context1.jsp0000644000175000017500000001443410404045236030455 0ustar arnaudarnaud00000000000000 <%@ page contentType="text/html;charset=UTF-8" %> <%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %> <%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %> <%@ taglib prefix="s" uri="http://struts.apache.org/tags-faces" %> context1 <%-- ViewRoot Values --%> <%-- ExternalContext Values --%> <%-- Request Values --%> <%-- ServletContext Values --%> libstruts1.2-java-1.2.9/contrib/struts-faces/systest1-webapp/src/web/logon.jsp0000644000175000017500000000511610404045246030024 0ustar arnaudarnaud00000000000000 <%@ page contentType="text/html;charset=UTF-8" %> <%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %> <%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %> <%@ taglib prefix="s" uri="http://struts.apache.org/tags-faces" %> logon libstruts1.2-java-1.2.9/contrib/struts-faces/systest1-webapp/src/web/logon1.jsp0000644000175000017500000000216010404045222030073 0ustar arnaudarnaud00000000000000 <%@ page contentType="text/html;charset=UTF-8" %> <%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %> <%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %> <%@ taglib prefix="s" uri="http://struts.apache.org/tags-faces" %> logon1 libstruts1.2-java-1.2.9/contrib/struts-faces/systest1-webapp/src/web/simple.jsp0000644000175000017500000000601110404045204030164 0ustar arnaudarnaud00000000000000 <%@ page contentType="text/html;charset=UTF-8" %> <%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %> <%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %> <%@ taglib prefix="s" uri="http://struts.apache.org/tags-faces" %> simple libstruts1.2-java-1.2.9/contrib/struts-faces/systest1-webapp/build.xml0000644000175000017500000003313710404045212026442 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/contrib/struts-faces/LICENSE-JSF.txt0000644000175000017500000002321110404045234024005 0ustar arnaudarnaud00000000000000Sun Microsystems, Inc. Binary Code License Agreement READ THE TERMS OF THIS AGREEMENT AND ANY PROVIDED SUPPLEMENTAL LICENSE TERMS (COLLECTIVELY "AGREEMENT") CAREFULLY BEFORE OPENING THE SOFTWARE MEDIA PACKAGE.  BY OPENING THE SOFTWARE MEDIA PACKAGE, YOU AGREE TO THE TERMS OF THIS AGREEMENT.  IF YOU ARE ACCESSING THE SOFTWARE ELECTRONICALLY, INDICATE YOUR ACCEPTANCE OF THESE TERMS BY SELECTING THE "ACCEPT" BUTTON AT THE END OF THIS AGREEMENT.  IF YOU DO NOT AGREE TO ALL THESE TERMS, PROMPTLY RETURN THE UNUSED SOFTWARE TO YOUR PLACE OF PURCHASE FOR A REFUND OR, IF THE SOFTWARE IS ACCESSED ELECTRONICALLY, SELECT THE "DECLINE" BUTTON AT THE END OF THIS AGREEMENT. 1.  LICENSE TO USE.  Sun grants you a non-exclusive and non-transferable license for the internal use only of the accompanying software and documentation and any error corrections provided by Sun (collectively "Software"), by the number of users and the class of computer hardware for which the corresponding fee has been paid. 2.  RESTRICTIONS.  Software is confidential and copyrighted. Title to Software and all associated intellectual property rights is retained by Sun and/or its licensors.  Except as specifically authorized in any Supplemental License Terms, you may not make copies of Software, other than a single copy of Software for archival purposes.  Unless enforcement is prohibited by applicable law, you may not modify, decompile, or reverse engineer Software.  Licensee acknowledges that Licensed Software is not designed or intended for use in the design, construction, operation or maintenance of any nuclear facility. Sun Microsystems, Inc. disclaims any express or implied warranty of fitness for such uses.   No right, title or interest in or to any trademark, service mark, logo or trade name of Sun or its licensors is granted under this Agreement. 3. LIMITED WARRANTY.  Sun warrants to you that for a period of ninety (90) days from the date of purchase, as evidenced by a copy of the receipt, the media on which Software is furnished (if any) will be free of defects in materials and workmanship under normal use.  Except for the foregoing, Software is provided "AS IS".  Your exclusive remedy and Sun's entire liability under this limited warranty will be at Sun's option to replace Software media or refund the fee paid for Software. 4.  DISCLAIMER OF WARRANTY.  UNLESS SPECIFIED IN THIS AGREEMENT, ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT ARE DISCLAIMED, EXCEPT TO THE EXTENT THAT THESE DISCLAIMERS ARE HELD TO BE LEGALLY INVALID. 5.  LIMITATION OF LIABILITY.  TO THE EXTENT NOT PROHIBITED BY LAW, IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR SPECIAL, INDIRECT, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF OR RELATED TO THE USE OF OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.  In no event will Sun's liability to you, whether in contract, tort (including negligence), or otherwise, exceed the amount paid by you for Software under this Agreement.  The foregoing limitations will apply even if the above stated warranty fails of its essential purpose. 6.  Termination.  This Agreement is effective until terminated.  You may terminate this Agreement at any time by destroying all copies of Software.  This Agreement will terminate immediately without notice from Sun if you fail to comply with any provision of this Agreement.  Upon Termination, you must destroy all copies of Software. 7. Export Regulations. All Software and technical data delivered under this Agreement are subject to US export control laws and may be subject to export or import regulations in other countries.  You agree to comply strictly with all such laws and regulations and acknowledge that you have the responsibility to obtain such licenses to export, re-export, or import as may be required after delivery to you. 8.  U.S. Government Restricted Rights.  If Software is being acquired by or on behalf of the U.S. Government or by a U.S. Government prime contractor or subcontractor (at any tier), then the Government's rights in Software and accompanying documentation will be only as set forth in this Agreement; this is in accordance with 48 CFR 227.7201 through 227.7202-4 (for Department of Defense (DOD) acquisitions) and with 48 CFR 2.101 and 12.212 (for non-DOD acquisitions). 9.  Governing Law.  Any action related to this Agreement will be governed by California law and controlling U.S. federal law.  No choice of law rules of any jurisdiction will apply. 10. Severability. If any provision of this Agreement is held to be unenforceable, this Agreement will remain in effect with the provision omitted, unless omission would frustrate the intent of the parties, in which case this Agreement will immediately terminate. 11. Integration.  This Agreement is the entire agreement between you and Sun relating to its subject matter.  It supersedes all prior or contemporaneous oral or written communications, proposals, representations and warranties and prevails over any conflicting or additional terms of any quote, order, acknowledgment, or other communication between the parties relating to its subject matter during the term of this Agreement.  No modification of this Agreement will be binding, unless in writing and signed by an authorized representative of each party. JAVASERVER(TM) FACES 1.1, REFERENCE IMPLEMENTATION SUPPLEMENTAL LICENSE TERMS These supplemental license terms ("Supplemental Terms") add to or modify the terms of the Binary Code License Agreement (collectively, the "Agreement"). Capitalized terms not defined in these Supplemental Terms shall have the same meanings ascribed to them in the Agreement. These Supplemental Terms shall supersede any inconsistent or conflicting terms in the Agreement, or in any license contained within the Software. 1. Software Internal Use and Development License Grant. Subject to the terms and conditions of this Agreement, including, but not limited to Section 3 (Java(TM) Technology Restrictions) of these Supplemental Terms, Sun grants you a non-exclusive, non-transferable, limited license to reproduce internally and use internally the binary form of the Software, complete and unmodified, for the sole purpose of designing, developing and testing your Java applets and applications ("Programs"). 2. License to Distribute Software.  In addition to the license granted in Section 1 (Software Internal Use and Development License Grant) of these Supplemental Terms, subject to the terms and conditions of this Agreement, including but not limited to Section 3 (Java Technology Restrictions), Sun grants you a non-exclusive, non-transferable, limited license to reproduce and distribute the Software in binary form only, provided that you (i) distribute the Software complete and unmodified and only bundled as part of your Programs, (ii) do not distribute additional software intended to replace any component(s) of the Software, (iii) do not remove or alter any proprietary legends or notices contained in the Software, (iv) only distribute the Software subject to a license agreement that protects Sun's interests consistent with the terms contained in this Agreement, and (v) agree to defend and indemnify Sun and its licensors from and against any damages, costs, liabilities, settlement amounts and/or expenses (including attorneys' fees) incurred in connection with any claim, lawsuit or action by any third party that arises or results from the use or distribution of any and all Programs and/or Software. 3. Java Technology Restrictions. You may not modify the Java Platform Interface ("JPI", identified as classes contained within the "java" package or any subpackages of the "java" package), by creating additional classes within the JPI or otherwise causing the addition to or modification of the classes in the JPI.  In the event that you create an additional class and associated API(s) which (i) extends the functionality of the Java Platform, and (ii) is exposed to third party software developers for the purpose of developing additional software which invokes such additional API, you must promptly publish broadly an accurate specification for such API for free use by all developers. You may not create, or authorize your licensees to create additional classes, interfaces, or subpackages that are in any way identified as "java", "javax", "sun" or similar convention as specified by Sun in any naming convention designation. 4. Trademarks and Logos. You acknowledge and agree as between you and Sun that Sun owns the SUN, SOLARIS, JAVA, JINI, FORTE, and iPLANET trademarks and all SUN, SOLARIS, JAVA, JINI, FORTE, and iPLANET-related trademarks, service marks, logos and other brand designations ("Sun Marks"), and you agree to comply with the Sun Trademark and Logo Usage Requirements currently located at http://www.sun.com/policies/trademarks. Any use you make of the Sun Marks inures to Sun's benefit. 5. Source Code. Software may contain source code that is provided solely for reference purposes pursuant to the terms of this Agreement.  Source code may not be redistributed unless expressly provided for in this Agreement. 6. Termination for Infringement.  Either party may terminate this Agreement immediately should any Software become, or in either party's opinion be likely to become, the subject of a claim of infringement of any intellectual property right. For inquiries please contact: Sun Microsystems, Inc. 4150 Network Circle, Santa Clara, California 95054. (LFI#140459/Form ID#011801) libstruts1.2-java-1.2.9/contrib/struts-faces/LICENSE.txt0000644000175000017500000002645010404045224023374 0ustar arnaudarnaud00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. libstruts1.2-java-1.2.9/contrib/struts-faces/NOTICE.txt0000644000175000017500000000051410404045210023257 0ustar arnaudarnaud00000000000000This product includes software developed by The Apache Software Foundation (http://www.apache.org/). This product includes the JavaServer Faces reference implementation, developed by Sun Microsystems (http://java.sun.com/j2ee/javaserverfaces/) and redistributed in accordance with license terms found in LICENSE-JSF.txt. libstruts1.2-java-1.2.9/contrib/struts-faces/README.txt0000644000175000017500000005703510404045204023250 0ustar arnaudarnaud00000000000000The Struts-Faces Integration Library (Version 1.0) README File $Id: README.txt 54187 2004-10-09 22:27:12Z craigmcc $ ============ INTRODUCTION: ============ This package contains an add-on library that supports the use of JavaServer Faces (JSF) user interface technology in a Struts based web application, in place of the Struts custom tag libraries. As a proof of concept, it also includes the canonical "struts-example" example web application, converted to use JSF tags, as well as tags from the JSP Standard Tag Library (JSTL), version 1.0 or later. It also includes a very basic Tiles based application, modified in a similar manner. The Struts-Faces Integration Library should work with any implementation of JavaServer Faces, version 1.0 or later. It has primarily been tested against version 1.1 of the JavaServer Faces reference implementation, available at: http://java.sun.com/j2ee/javaserverfaces/ ======================== NEW AND REVISED FEATURES: ======================== Struts-Faces Integration Library (Version 1.0): ---------------------------------------------- This release of the Struts-Faces Integration Library (Version 1.0) has the following new features relative to the previous (0.4) release: * As of the nightly build 20040902, the URI for the struts-faces tag library has changed. You should now be using: <%@ taglib prefix="s" uri="http://struts.apache.org/tags-faces" %> instead of: <%@ taglib prefix="s" uri="http://jakarta.apache.org/struts/tags-faces" %> * It is now possible to mix pure JavaServer Faces pages, and those using the struts-faces integration library, in the same webapp. Previously, it was required to use only Struts-based handlers for form submits. * All attributes of the component tags in the Struts-Faces integration library have been "value binding enabled", meaning you can use value binding expressions ("#{...}") to calculate attribute values dynamically. * It is now possible to use the Struts-Faces Integration Library in conjunction with application modules using Tiles. * You many now use a managed bean named "struts" at the beginning of any value binding expression in order to gain access to request, session, and application scope objects provided by Struts. See the Javadocs for the implementation class (org.apache.struts.faces.util.StrutsContext) for more information about what objects are available. * You may now use either prefix mapping (/faces/*) or extension mapping (*.faces) for the JavaServer Faces controller servlet. * In addition to the tag that operates as a direct replacement for , you may also consider using the new tag that exposes a MessageResources instance as a request attribute containing a Map. This makes the messages included in the instance available via value binding expressions (or JSP 2.0 EL expressions). For example, the logon.jsp page of the example application includes: ... ... ... to create the header text for the logon form. You may either specify the application scope key for the MessageResources bunde you want, or omit the "messages" attribute to load the default MessageResources for the current application module. * You can leverage advanced JavaServer Faces features in a Struts based web application. For example, the converted "Mail Reader" example includes using the for multi-row input as well as output. * If your Struts application stores a Locale in the session attribute named Globals.LOCALE_KEY (i.e. using the usual Struts technique for establishing a user specific locale), this setting will be copied to the UIViewRoot of the corresponding JSF view, which will therefore cause it to change the Locale used by JSF components and renderers also. * New command link component (and associated tag that mirrors the functionality of the standard component, but works when inside a Struts component. This release of the Struts-Faces Integration Library (Version 1.0) has the following revised features relative to the previous (0.4) release: * The "focus" attribute on the tag should work properly in all cases now. * Integration with the Validator Framework should work properly in all cases now. ======================== CONTENTS OF THIS RELEASE: ======================== Top Level Directory: ------------------- build.xml -- Ant build script (only required for building from source). build.properties.sample -- Sample "build.properties" file that may be customized (only required for building from source). LICENSE.txt -- The Apache Software License, under which all software included in this bundle is licensed. LICENSE-JSF.txt -- The license for the JavaServer Faces reference impementation, which applies to the included jsf-api.jar and jsf-impl.jar files. NOTICE.txt -- Attribution notices for software included in this distribution. README.txt -- This README file. Directory "conf": ---------------- struts-faces.tld -- The JSP tag library descriptor file for the Struts-Faces integration tag library. Directory "docs": ---------------- struts-faces.html -- Reference documentation for the Struts-Faces integration tag library. api/ -- Javadocs for the classes included in the Struts-Faces integration library (org.apache.struts.faces.*). Directory "lib": --------------- struts-faces.jar -- The compiled classes (and embedded tag library descriptor) for the Struts-Faces integration library. Directory "src": --------------- conf/ -- Source files for the generated TLD and tag library documentation (only required for building from source), as well as the faces-config.xml file used to register custom components and renderers. example/ -- Source files for the "struts-example" application that has been converted to use JavaServer Faces components. You can compare this to the corresponding sources in a standard Struts release to see what had to be changed. example2/ -- Source files for a Tiles-based example application that has been converted to use JavaServer Faces components. java/ -- Source files for the Struts-Faces integration library classes (only required for building from source). The following packages (under org.apache.struts.faces) contain the necessary code: application -- Integrate with ActionListener, custom PropertyResolver, custom RequestProcessors component -- Custom JavaServer Faces component implementations (only Form for now) renderer -- Custom JavaServer Faces renderer implementations taglib -- Custom JavaServer Faces component tag implementations util -- Miscellaneous utility classes Directory "web": --------------- example/ -- JSP and web application configuration files for the "struts-example" application that has been converted to use JavaServer Faces components. You can compare this to the corresponding sources in a standard Struts release to see what had to be changed. example2/ -- JSP and web application configuration files for a Tiles-based example application. Directory "webapps": ------------------- struts-faces.war -- The converted example application, ready to be deployed on a Servlet 2.3 / JSP 1.2 container. struts-faces2.war -- The Tiles-based example application, ready to be deployed on a Servlet 2.3 / JSP 1.2 container. ================================ RUNNING THE EXAMPLE APPLICATIONS: ================================ The following steps are required to deploy and run the example application (struts-faces.war) included in this distribution. A similar process is necessary to run the second (struts-faces2.war) example as well. Install A Java Development Kit: ------------------------------ The Struts-Faces integration library requires a Java Development Kit (not the Java Runtime Environment), version 1.3 or later. It was tested against Sun's JDK 1.4.2 release, available at: http://java.sun.com/j2se/ Install a Servlet Container: --------------------------- The Struts-Faces integration library has been tested against Tomcat 4.1.29 and 5.0.25, but should run in any container that supports the Servlet 2.3 (or later) and JSP 1.2 (or later) specifications. Note that these version levels are higher than what Struts requires for itself -- they correspond to the minimum requirements specified by JSF 1.0. If you attempt to run the example programs in a servlet container that has an early access or beta version of JavaServer Faces installed already (such as the Java Web Services Developer Pack, version 1.2 or 1.3), you must take one of the following two actions before you can successfully use the new Struts-Faces Integration Library and the corresponding final release of JavaServer Faces. Either: * Replace any existing version of JavaServer Faces in your container, following the container's specific instructions for this process (and leave the JavaServer Faces JARs out of your web application); or * Remove any existing version of JavaServer Faces in your container, following the container's specific instructions for this process, and plan on including the JavaServer Faces JARs with your webapp. If you plan to build the example application from scratch, be sure to include the property setting "build.standalone=true" in your local "build.properties" file. Install The Struts-Faces Integration Library Distribution: --------------------------------------------------------- Stable releases of the Struts-Faces integration library (when released) will be available at: http://jakarta.apache.org/site/binindex.cgi You can also download nightly builds from: http://jakarta.apache.org/builds/jakarta-struts/nightly/struts-faces/ In either case, source code is included in the distribution, so no separate source distribution is needed. Deploy The Example Application: ------------------------------ Follow the standard instructions for your container to deploy the struts-faces.war web application archive. For the JWSDP 1.2 or 1.3 release, or for any standard Tomcat 4.1.x or 5.0.x release, you have the following choices: * Drop the "struts-faces.war" file into the "webapps" subdirectory of the servlet container release, and wait a few moments for the container to recognize the new application and deploy it for you. * Use the dynamic deployment Ant commands, as described below. Execute The Example Application: ------------------------------- By default, the application will be installed at context path "/struts-faces", so the URL to access it will typically be something like: http://localhost:8080/struts-faces/ The example application is functionally identical to the canonical struts-example.war application included in standard Struts 1.1 releases. When first started, the only valid username/password combination is "user" and "pass". ==================== BUILDING FROM SOURCE: ==================== If you wish, you can build the Struts-Faces integration library, and the sample application, from the source code included in this distribution. Follow these steps: Install An Ant Distribution: --------------------------- If you have downloaded the JWSDP 1.2 or 1.3 release described above, Ant is already included. Otherwise, download Apache Ant, version 1.5.4 or later, from: http://ant.apache.org/bindownload.cgi Install this environment as described in the Ant documentation, and ensure that Ant's "bin" directory is on your PATH. Configure Your Build Properties: ------------------------------- Copy the "build.properties.sample" file in the top level directory to a file named "build.properties", and customize the settings that are specified there. Build The Sources: ----------------- The simplest way to build is to execute: ant clean dist to recreate the entire distribution in the "dist" subdirectory. Use the "ant -projecthelp" command to see what other targets are available. ======================================================= USING THE STRUTS-FACES LIBRARY IN YOUR OWN APPLICATIONS: ======================================================= Using the Struts-Faces integration library in your own Struts-based web applications is straightforward, and requires the following steps: * Add the "struts-faces.jar" file from the "lib" subdirectory of this release into the "/WEB-INF/lib" subdirectory of your webapp. * Add the following JAR files from the JavaServer Faces reference implementation's "lib" directory to your application's "/WEB-INF/lib" directory: jsf-api.jar, jsf-impl.jar, or install them in your servlet container's shared folder. (You can also use any other JSF implementation that has been certified to be compatible with the JSF specification.) * Add the following JAR files, containing the JSTL release (or from the JavaServer Faces release) to your application's "/WEB-INF/lib" directory: jstl.jar, standard.jar, or install them in your servlet container's shared folder. * Add the servlet definition for the JavaServer Faces servlet into your web application's deployment descriptor (/WEB-INF/web.xml): faces javax.faces.webapp.FacesServlet 1 * If you have a element on your declaration of the Struts controller servlet, modify the value to be "2" or greater so that FacesServlet is initialized first. * Add the servlet mapping for the JavaServer Faces servlet into your web application's deployment descriptor (/WEB-INF/web.xml): faces *.faces * The tag library in the Struts-Faces integration library (as well as those in the JavaServer Faces reference implementation) are embedded in the JAR files themselves, and rely on the ability of a Servlet 2.3 (or later) container to automatically recognize them. Therefore, there is no need to copy the TLD files into the WEB-INF subdirectory of your web application. * Modify the JSP pages of your web application to use the JSTL, JavaServer Faces, and Struts-Faces integration library tags, instead of the traditional Struts tag libraries. This migration can occur one page at a time, as you become familiar with the new technologies. You will want to note the following points in particular: - Include the following tag library directives at the top of your page in order to declare them: <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %> <%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %> <%@ taglib prefix="s" uri="http://struts.apache.org/tags-faces" %> - The Struts-Faces tag library (prefix "s" above) contains replacements for functionality in the existing Struts HTML tag library that are not directly provided by JavaServer Faces components. You should convert your existing use of the Struts HTML variants of these tags to use the Struts-Faces version instead. (Functionality and attributes should be basically compatible, so this is usually just a matter of changing the tag prefixes.) - In particular, you must use the Struts-Faces version of the form tag () in order to activate standard Struts features like automatic creation of the form bean, and looking up the appropriate action to invoke based on the "action" attribute. - Replace the use of tags from the Struts HTML library with user interface component tags provided by the JavaServer Faces reference implementation, by other third party libraries, or by your application itself. For example, on the logon.jsp page, the username field was changed from: to the following JavaServer Faces Component tag: - JavaServer Faces provides its own mechanisms for internationalizing user interfaces. These can be used directly; however, to ease the transition for existing Struts-based web applications, the Struts-Faces integration library supports the tag, which is functionally equivalent to the previous tag. - Optionally, replace the use of tags from the Struts BEAN and LOGIC libraries with corresponding functionality from JSTL tags. This is recommended, because JSTL tags are more powerful than their Struts library counterparts, and the expression language syntax is the same as that used for value reference expressions. * Modify your struts-config.xml file to include identification of the custom request processor implementation class to be used, by adding the following element in the appropriate location (typically just before any existing and elements), one of the following controller element declarations. If your application module does *not* use Tiles: If your application module *does* use Tiles: * For each JSP page that you have modified to use JavaServer Faces components instead of traditional Struts tags, modify any elements in your webapp's struts-config.xml file to include "/faces" in front of the path to that page (if you are using prefix mapping), or a ".faces" extension (if you are using extenaion mapping. For example, change: to this: * In most circumstances, you should not need to make any changes in your Actions, or the business logic classes invoked by your actions. They are still invoked as part of the standard Struts request processing lifecycle, and are still expected to return an ActionForward (or null) defining what view layer technology should be invoked next. NOTE: If you have a command component whose "immediate" property is set to "true", it will be processed as it would in a pure JavaServer Faces based application. Only command components with immediate="false" (which is the default value), that are nested inside a Struts-Faces tag, will be forwarded through the normal Struts request processing lifecycle. * If your application contains cancel buttons rendered by the tag, you should replace them with an that has an "id" attribute set to "cancel" in order for this button to be recognized by Struts as a cancel button. * If your application itself provides additional UIComponent and/or Renderer implementations, you must register them with the default JavaServer Faces RenderKit before they can be used. The simplest way to do this is to define a "faces-config.xml" file that contains the declaration for your custom classes. Such a file can be included either in the "/WEB-INF" directory of your web application, or in the "META-INF" directory of a JAR file included in "/WEB-INF/lib". (The Struts-Faces Integration Library itself uses the latter technique to register its custom components automatically for any web application that includes "struts-faces.jar" in its "/WEB-INF/lib" directory.) ================= KNOWN LIMITATIONS: ================= The following items identify functionality areas that have not yet been fully implemented or tested: * Use of the Struts-Faces integration library in multiple application modules (likely to not work without the addition of a Filter to set the correct module configuration instance). * Use of the "forwardPattern" or "pagePattern" attributes on the element. * Use of the Struts Nested tag libraries. * Use of the Struts-EL tag library (although this should be unnecessary, since you are free to use JSTL tags directly). * Use of a custom RequestProcessor subclass. The Struts-Faces integration library provides its own custom subclasses (org.apache.struts.faces.application.FacesRequestProcessor or org.apache.struts.faces.application.FacesTilesRequestProcessor), which must be used (or subclassed) for the integration to operate successfuly. * The JavaServer Faces specification describes several restrictions on combining JSF component tags and other JSP source elements (including custom tags from other tag libraries) on the same page. See Section 9.2.8 of the JSF spec for more information. =============== DEVELOPER NOTES: =============== The CVS sources for the Struts-Faces integration library include a System Integration test suite that is comprised of a test web application (default context path is "/struts-faces-systest") and a client application based on the HtmlUnit package from SourceForge. To execute the test suite: * Update your build.properties file as needed to declare appropriate values for the "htmlunit.home" and "junit.home" properties. * Update your build.properties file as necessary for deploying applications to a standalone Tomcat instance. You should be able to successfully use the "example.install" and "example2.install" targets. * Compile and deploy the system integration application by executing the Ant target "systest.install". * Execute the test client by executing the Ant target "sysclient.execute". * When you have finished testing, you can remove the test application by executing the Ant target "systest.remove". * Before committing any changes to the integration library, be sure that the system integration tests can be succesfully executed. * If you add new functionality to the integration library, you should also add or enhance the system integration tests to catch potential future regressions as the library is updated by you, or others, in the future. libstruts1.2-java-1.2.9/contrib/struts-faces/build.properties.sample0000644000175000017500000001427610404045220026245 0ustar arnaudarnaud00000000000000# build.properties.sample # ----------------------- # # ============================================================================== # Copyright 2002,2004 The Apache Software Foundation. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # ============================================================================== # # This file contains example property settings that you would use to customzie # your build environment to build the Struts-Faces integration library from # source code. To use this file, make a copy of it in "build.properties" and # customize the values as required. # # $Id: build.properties.sample 54187 2004-10-09 22:27:12Z craigmcc $ # ---------------------------- BUILD MODE ------------------------------------- # Uncomment the following property setting to build web applications that will # include all of the required libraries, and therefore run on containers other # than the Java Web Services Developer Pack (JWSDP) 1.2 or later, which makes # many of these libraries available to web applications already. build.standalone=true # ---------------------- DEPENDENCY HOME DIRECTORIES -------------------------- # The absolute or relative pathname to your installation of the JavaServer Faces # refererence implementation (version 1.1 or later). jsf.home=/usr/local/jsf-1_1 # The absolute or relative pathname to your installation of the JSP Standard # Tag Library. If you are running against a Servlet 2.3 / JSP 1.2 container # (such as Tomcat 4.1.x), use version 1.0.x of JSTL. For a Servlet 2.4 / # JSP 2.0 container (such as Tomcat 5.0.x or any JWSDP release), use # version 1.1.x of JSTL. jstl.home=/usr/local/standard-1.0.3 # The absolute or relative pathname to your installation of Tomcat 4.1.x, # Tomcat 5.0.x, or the Java Web Services Developer Pack (version 1.4 or later) # server. server.home=/usr/local/jakarta-tomcat-4.1.29 # The absolute or relative pathname of the Struts 1.1 (or later) # Distribution Directory struts.home=/usr/local/jakarta-struts-1.1 # ---------------------- DEPENDENCY LIBRARY PATHS ----------------------------- # The absolute or relative pathname of the Commons Beanutils Library commons-beanutils.jar=${struts.home}/lib/commons-beanutils.jar # The absolute or relative pathname of the Commons Collections Library commons-collections.jar=${struts.home}/lib/commons-collections.jar # The absolute or relative pathname of the Commons Digester Library commons-digester.jar=${struts.home}/lib/commons-digester.jar # The absolute or relative pathname of the Commons FileUpload Library commons-fileupload.jar=${struts.home}/lib/commons-fileupload.jar # The absolute or relative pathname of the Commons Lang Library commons-lang.jar=${struts.home}/lib/commons-lang.jar # The absolute or relative pathname of the Commons Logging Library commons-logging.jar=${struts.home}/lib/commons-logging.jar # The absolute or relative pathname of the Commons Validator Library commons-validator.jar=${struts.home}/lib/commons-validator.jar # The absolute or relative pathname of the Jakarta ORO Library jakarta-oro.jar=${struts.home}/lib/jakarta-oro.jar # The absolute or relative pathname of the JavaServer Faces API Classes jsf-api.jar=${jsf.home}/lib/jsf-api.jar # The absolute or relative pathname of the JavaServer Faces RI Classes jsf-impl.jar=${jsf.home}/lib/jsf-impl.jar # The absolute or relative pathname of the JSP 2.0 API Classes # (If you are compiling against a combined Servlet 2.3 / JSP 1.2 API # classes JAR file, this property can be omitted) jsp-api.jar=${server.home}/common/lib/jsp-api.jar # The absolute or relative pathname of the JSP Standard Tag Library # (JSTL) API Classes jstl.jar=${jstl.home}/lib/jstl.jar # The absolute or relative pathname of the Servlet 2.4 API Classes # (or a combined Servlet 2.3 / JSP 1.2 API classes JAR file) servlet.jar=${servlet.home}/common/lib/servlet.jar # The absolute or relative pathname of the JSP Standard Tag Library # (JSTL) RI Classes standard.jar=${jstl.home}/lib/standard.jar # The absolute or relative pathname of the Struts Runtime Library struts.jar=${struts.home}/lib/struts.jar # ------------------------------- TOMCAT INTEGRATION -------------------------- # The build.xml file for this package includes commands that leverage the # manager webapp of Tomcat 4.1 or 5.0 to dynamically install, reload, or # remove the example web application. In order for these targets to work, # you must copy the "catalina-ant.jar" file from the "server/lib" directory # of your Tomcat or JWSDP installation into the "lib" directory of your # Ant installation, and customize the following properties as needed. # The URL of the manager web application on your Tomcat or JWSDP installation url=http://localhost:8080/manager # The username and password of a Tomcat user that you have configured to # possess the "manager" role. You can use the admin webapp to configure # such a user, if one does not exist already username=tomcat password=tomcat # The context path to which the example web application will be deployed example.path=/struts-faces example2.path=/struts-faces2 # ------------------------- System Integration Test Properties ----------------- # The following properties are only required if you wish to execute the # system integration test client against the corresponding webapp. # The absolute or relative pathname to your installation of HtmlUnit 1.2.3 # or later. This code can be acquired at SourceForge. htmlunit.home=/usr/local/htmlunit-1.2.3 # The type of JSF state saving that should be used when the system integration # test web application is depoyed ("client" or "server") systest.state.saving=server libstruts1.2-java-1.2.9/contrib/struts-faces/build.xml0000644000175000017500000001740710404045234023375 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/doc/0000755000175000017500000000000010423130300016213 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/doc/dtds/0000755000175000017500000000000010423130300017151 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/doc/dtds/README.txt0000644000175000017500000000015310404045244020661 0ustar arnaudarnaud00000000000000This directory contains local copies of W3C (www.w3c.org) XHTML DTDs for use by the Ant xmlvalidate task. libstruts1.2-java-1.2.9/doc/dtds/xhtml-lat1.ent0000644000175000017500000002677710404045250021707 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/doc/dtds/xhtml-special.ent0000644000175000017500000001004310404045204022440 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/doc/dtds/xhtml-symbol.ent0000644000175000017500000003303010404045234022331 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/doc/dtds/xhtml1-strict.dtd0000644000175000017500000006160010404045222022403 0ustar arnaudarnaud00000000000000 %HTMLlat1; %HTMLsymbol; %HTMLspecial; libstruts1.2-java-1.2.9/doc/dtds/xhtml1-transitional.dtd0000644000175000017500000007655710404045250023624 0ustar arnaudarnaud00000000000000 %HTMLlat1; %HTMLsymbol; %HTMLspecial; libstruts1.2-java-1.2.9/doc/faqs/0000755000175000017500000000000010423130300017145 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/doc/faqs/actionForm.xml0000644000175000017500000002154110404045234022005 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Building an ActionForm

      This is a simple example of a login form to illustrate how Struts makes dealing with forms much less painful than using straight HTML and standard JSP facilities. Consider the following page (based on the example MailReader application included with Struts) named logon.jsp:


      
      <%@ taglib  uri="/WEB-INF/struts-html.tld" prefix="html" %>
      <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
      
      
      
      
          <bean:message key="logon.title"/>
      
      
      
      
      
      
      
      
      
      ]]>

      The following items illustrate the key features of form handling in Struts, based on this example:

      • The taglib directive tells the JSP page compiler where to find the tag library descriptor for the Struts tag library. In this case, we are using bean as the prefix that identifies tags from the struts-bean library, and "html" as the prefix that identifies tags from the struts-html library. Any desired prefix can be used.
      • This page uses several occurrences of the message tag to look up internationalized message strings from a MessageResources object containing all the resources for this application. For this page to work, the following message keys must be defined in these resources:
        • logon.title - Title of the logon page
        • prompt.username - A "Username:" prompt string
        • prompt.password - A "Password:" prompt string
        • button.submit - "Submit" for the button label
        • button.reset - "Reset" for the button label
        When the user logs on, the application can store a Locale object in the user's session. This Locale will be used to select messages in the appropriate language. This makes it easy to implement giving the user an option to switch languages -- simply change the stored Locale object, and all messages are switched automatically.
      • The errors tag displays any error messages that have been stored by a business logic component, or nothing if no errors have been stored. This tag will be described further below.
      • The form tag renders an HTML <form> element, based on the specified attributes. It also associates all of the fields within this form with a ActionForm bean [org.apache.struts.action.ActionForm]. The tag looks up the /logon action mapping in the Struts configuration. The logon mapping tells the tag that the form bean is stored in the session context under the key logonForm. The Struts developer provides the Java implementation of the ActionForm bean, subclassing the Struts class ActionForm (see Building Controller components). This bean is used to provide initial values for all of the input fields that have names matching the property names of the bean. If an appropriate bean is not found, a new one will be created automatically, using the Java class name specified through the action mapping.
      • The form bean can also be specified in the tag by providing name and type attributes. But most often, everything is specified in the Struts Configuration File.
      • The text tag renders an HTML <input> element of type "text". In this case, the number of character positions to occupy on the browser's screen has been specified as well. When this page is executed, the current value of the username property of the corresponding bean (that is, the value returned by getUsername).
      • The password tag is used similarly. The difference is that the browser will echo asterisk characters, instead of the input value, as the user types their password.
      • The submit andreset tags generate the corresponding buttons at the bottom of the form. The text labels for each button are created using message tags, as with the prompts, so that these values are internationalized.

      Handling multipart forms is also easy. Obviously when you create a multipart form you're creating a form that has at least one input of type "file". The first step to creating a multipart form is to utilize the struts-html taglib to create the presentation page:


      
      <%@taglib 
          uri="/WEB-INF/struts-html.tld"
         prefix="html">
      
      
      
          Please Input Text: 
          Please Input The File You Wish to Upload: 
         
         
      
      
      ]]>

      The next step is to create your ActionForm bean:



      Look at the Javadocs for FormFile to see the methods it exposes to manipulate files in file uploading. Also look at the Javadocs for ActionServlet and ActionMapping for the various parameters you can specify to change how files are uploaded. Basically in your execute method in your action class you would call ((UploadForm) form).getMyFile() to retrieve the FormFile and do what you want with it.

      libstruts1.2-java-1.2.9/doc/faqs/apps.xml0000644000175000017500000001353010404045174020651 0ustar arnaudarnaud00000000000000 Dan Walker Ted Husted Building Applications

      This document outlines one possible sequence of development steps that can be followed to create a Struts application. It is not intended as a complete description of each referenced development activity. More detailed documentation is available elsewhere and is referenced by "(more...)" links where possible.

      1. Requirements development and design are outside of the scope of this document.
      2. For help installing Struts, see the Getting Started chapter.
      3. There are many other ways to approach Struts development and there are many other features available besides the ones discussed below. This document outlines only one way to get started.
      4. This document focuses on form/data centric applications, but may also work with other types of applications.
      5. This material was written for Struts 1.1 (beta 2) and now 1.2.2
      1. Implement data entry forms as JSP files.
      2. Implement one or more ActionForm descendents to buffer data between JSPs and Actions.
      3. Create an XML document that defines the validation rules for your application.
      4. Implement one or more Action descendents to respond form submissions.
      5. Create struts-config.xml to associate forms with actions.
      6. Create or update web.xml to reference ActionServlet, taglibs used by Struts.
      7. Parallel Tasks
        1. Building
        2. Unit Testing
        3. Deployment
      1. Implement data entry forms as JSP files.
        1. Use elements from the html taglib to define the form elements. (more...)
        2. Use message and other elements from the bean taglib to define the labels and other static text of the form. (more...)
          1. Create and maintain a properties file of the text elements to be displayed. (more...)
        3. Use property attributes to link form fields to ActionForm instance variables.
      2. Implement one or more ActionForm descendents to buffer data between JSPs and Actions.
        1. Create get/set pairs that correspond to the property names in your related JSP form. Example:
          <html:text property="city" />
          needs:
          getCity() and setCity(String c)
        2. When needed, create a reset method that sets the fields of the ActionForm to their default values. Most ActionForms do not need to do this.
      3. Create an XML document that defines the validation rules for your application.
      4. Implement one or more Action descendents to respond to form submissions.
        1. Descend from DispatchAction or LookupDispatchAction if you want one class to handle more than one kind of event (example: one Action to handle 'insert', 'update' and 'delete' events, using a different "surrogate" execute method for each). (more...)
        2. Use the execute method (or its surrogates) of your Action class to interface with objects in your application responsible for database interaction, such as EJBs, etc.
        3. Use the return value of the execute method (or its surrogates) direct the user interface to the appropriate next page.
      5. Create struts-config.xml to associate forms with actions. The file minimally needs:
      6. Create or update web.xml to reference ActionServlet, taglibs used by Struts. (more...)
      7. Parallel Tasks
        1. Building
          1. Use Ant. It can compile, create WAR file, perform XSLT transformations, run unit tests, interact with version control systems, clean up, etc. (more...)
          2. Create and use build script incrementally, as you create files that need to be copied, compiled, etc.
        2. Unit Testing
          1. Unit test normal java beans with JUnit. (more...)
          2. Unit test JSP, taglibs and conventional servlet components with Cactus. (more...)
          3. Unit test Action servlets with StrutsTestCase. (more...)
          4. Add all unit tests to the build script as a separate target. This target should use the junit tag to launch each TestCase descendent. (more...)
        3. Deployment
          1. Build script should create a war file containing the files developed above, along with files that make up the Struts framework.
      libstruts1.2-java-1.2.9/doc/faqs/database.xml0000644000175000017500000004136310404045206021453 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Mike Schachter Ted Husted Martin Cooper Ed Burns Anthony Kay Accessing a Database

      Most developers would consider accessing a database part of the "business end" of an application. Most often, we don't access a databse for the sake of accessing a database. We use the database as part of a larger business transaction. So lets start with accessing business logic from Struts.

      The best thing is use the Action as a thin adaptor between the web/presentation-tier and your business classes (including those that access a database).

      So you first design a business API that uses plain Java classes. The best thing is to use objects that take ordinary Java types and return a JavaBean or collection of JavaBeans. The Action then calls these objects and passes the result back to the web/presentation tier.

      A common approach is to create an Action class for each of business transaction, or use case, in your application. A simple "CRUD" application might have a CreateAction, a RetrieveAction, an UpdateAction, and a DeleteAction. To complete each transaction, the Action can make whatever calls are needed to your business API classes.

      Ideally, all the database access code should be encapsulated behind the business API classes, so Struts doesn't know what persistent layer you are using (or even if there is a persistence layer). It just passes a key or search String and gets back a bean or collection of beans. This lets you use the same business API classes in other environments, and also to run unit tests against your business API outside of Struts or a HTTP environment.

      The MailReader example application bundled with Struts demonstrates how this is usually done. The MailReader uses the DAO (Data Access Object) pattern to separate the persistence layer from the (Struts) control layer. MailReader defines a DAO interface that the Actions can call, it then defines a implementation that uses a database stored in main memory. Other implementations could be defined and used instead, without changing any of the Struts Action classes.

      To get started, it's simplest to setup a 1:1 correspondence between the Actions and your application's use cases. Each use case may make one or more calls to your business API, but from the user's perspective, each use case is a single transaction.

      As you gain experience, you will find ways to combine your Action classes, say by using the DispatchAction. It's even possible to use a single "framework" Action to call all of your business classes, as is done with Scaffold ProcessAction in the contrib folder.

      Using fewer Actions does require a deeper understanding of how Struts and MVC frameworks operate. Don't hesitate to err on the side of creating more Action classes at first. The Struts configuration makes it easy to refactor your Actions later, since you can change the Action type without changing anything else in the application.

      When you use the DAO approach, all of the database access details are hidden behind the business interface. The implementation of the business classes handle all the gritty details, like using a DataSource to pool connections to the database.

      As a rule, you should always use a connection pool to access a database. The DataSource interface is the preferred way to implement a connection pool today. Many containers and database systems now bundle a DataSource implmentation that you can use. Most often, the DataSource is made available through JNDI. The JNDI approach makes it easy for your business classes to access the DataSource without worrying about who set it up.

      There are many useful and mature persistence layer frameworks available. Before using raw JDBC or "rolling your own" solution, you should carefully review one or more of these packages. Here's a short list of packages most often mentioned on the Struts User list:

      For more, see the Struts Community Resources area on SourceForge.

      Ideally, the business logic layer should encapsulate the data access details, including acquiring a database connection. However, some older application designs expect that the caller be able to provide a database connection or DataSource instance. When you need to access a legacy design, the Struts DataSource manager can make it easy for your Action class to produce these resources on demand.

      NOTE: It is preferred that data connectivity be handled directly by the business classes, usually via JNDI. The Struts DataSource manager should only be used with legacy business classes that don't provide their own connectivity. When possible, we strongly recommend use of the standard DAO pattern, so that the Action classes do not need to know anything about the persitence mechanism. The DataSource manager is being retained in Struts 1.x for backward compatibility but may not be retained in Struts 2.x or later.

      The Struts DataSource manager is configured as an element in the Struts configuration file (struts-config.xml). The manager can be used to deploy any connection pool that implements the javax.sql.DataSource interface and is configurable totally from JavaBean properties. If your DBMS or container provides a connection pool that meets these requirements, then that component might be your first choice.

      The Jakarta Commons dbcp's BasicDataSource [org.apache.commons.dbcp.BasicDataSource] also works well with the DataSource manager, if a native component is not available. DBCP is not supplied as part of the Struts distribution. You can obtain it from Commons DBCP.

      Note: The Generic DataSource which was included with previous versions of Struts has been removed as of release 1.2.0 in favor of plugging in the BasicDataSource, or another DataSource implementation.

      This is how you would specify a DBCP BasicDataSource for your application:

      
      
      
          
          
          
          
          
          
          
          
          
      
      
      ]]>

      Note that you can define as many datasource objects as your application requires and refer to each using a logical name. This can be useful in providing better security or scalability, or even to test datasource implementations against each other.

      After a DataSource is defined, here is an example of using the manager to establish a connection from within an Action's execute method.

      
      public ActionForward
             execute(ActionMapping mapping,
                     ActionForm form,
                     HttpServletRequest request,
                     HttpServletResponse response) throws Exception
      {
       javax.sql.DataSource dataSource;
       java.sql.Connection myConnection;
       try {
        dataSource = getDataSource(request);
        myConnection = dataSource.getConnection();
        // do what you wish with myConnection
       } catch (SQLException sqle) {
          getServlet().log("Connection.process", sqle);
       } finally {
          //enclose this in a finally block to make
          //sure the connection is closed
          try {
             myConnection.close();
          } catch (SQLException e) {
             getServlet().log("Connection.close", e);
          }
         }
      }
      

      Note: If you use the Commons BasicDataSource with Struts, the query you provide for the pingQuery attribute (if you choose to include it) must return at least one row.

      Example: SELECT COUNT(*) FROM VALIDTABLE

      Just be sure you to replace "VALIDTABLE" with the name of a valid table in your database.

      If you need more than one data source in a module, you can include a key attribute in the data-source element:

      
         
            ... properties as before ...
         
         
            ... properties as before ...
         
         ...
      
      ]]>

      Which can then be accessed by including the key ("A" in this case) as an additional parameter to the Action.getDataSource() method.

      
         ...
         try {
            dataSourceA = getDataSource(request, "A");
            dataSourceB = getDataSource(request, "B");
         ...
      

      Each module can have as many data sources as it needs. The keys only need to be unique within a module since the struts module system maintains a name space for the items in each module to protect you from name clashes.

      http://www.mail-archive.com/struts-user@jakarta.apache.org/msg24621.html
      http://www.mail-archive.com/struts-user@jakarta.apache.org/msg24709.html
      http://www.mail-archive.com/struts-user@jakarta.apache.org/msg24626.html
      http://www.mail-archive.com/struts-user@jakarta.apache.org/msg24331.html
      http://www.mail-archive.com/struts-user@jakarta.apache.org/msg24102.html
      http://www.mail-archive.com/struts-user@jakarta.apache.org/msg23501.html
      http://www.mail-archive.com/struts-user@jakarta.apache.org/msg23455.html
      http://www.mail-archive.com/struts-user@jakarta.apache.org/msg23375.html
      http://www.mail-archive.com/struts-user@jakarta.apache.org/msg23321.html
      http://www.mail-archive.com/struts-user@jakarta.apache.org/msg23098.html
      http://www.mail-archive.com/struts-user@jakarta.apache.org/msg22713.html
      http://www.mail-archive.com/struts-user@jakarta.apache.org/msg21974.html
      http://www.mail-archive.com/struts-user@jakarta.apache.org/msg21026.html
      http://www.mail-archive.com/struts-user@jakarta.apache.org/msg19338.html
      http://www.mail-archive.com/struts-user@jakarta.apache.org/msg18323.html
      http://www.mail-archive.com/struts-user@jakarta.apache.org/msg14975.html
      http://www.mail-archive.com/struts-user@jakarta.apache.org/msg14914.html
      http://www.mail-archive.com/struts-user@jakarta.apache.org/msg14435.html
      http://www.mail-archive.com/struts-user@jakarta.apache.org/msg01562.html

      Transformation/Data Transfer
      http://www.mail-archive.com/struts-user@jakarta.apache.org/msg24480.html
      http://www.mail-archive.com/struts-user@jakarta.apache.org/msg23623.html
      http://www.mail-archive.com/struts-user@jakarta.apache.org/msg10195.html
      http://www.mail-archive.com/struts-user@jakarta.apache.org/msg10205.html

      The result of most queries will map to the ActionForms you are already using, and so you can render the ResultSet as a collection of ActionForms. But sometimes there are columns in a ResultSet that are not properties of an ActionForm, or even known in advance.

      Happily, the Struts tags don't care what type of bean you use with them. You could even output a ResultSet directly. But a ResultSet retains a connection to the database, and passing "all that" directly to a JSP gets messy. So what's a developer to do?

      Since Struts 1.1, the simplest option is to use a ResultSetDynaClass to transfer the ResultSet into an ArrayList of DynaBeans. The Struts custom tags can use DynaBean properties as easily as they use conventional JavaBean properties. (See DynaActionForm classes in the Struts User Guide for details.)

      Since this is in the BeanUtils jar, you already have it on board, and just need to implement the transfer routine (see the ResultSetDynaClass link).

      libstruts1.2-java-1.2.9/doc/faqs/dispatchValidator.xml0000644000175000017500000001547310404045232023356 0ustar arnaudarnaud00000000000000 Nick Afshartous Using the DispatchAction and Validator

      This is simple example to illustrate how to build a multi-page wizard that utilizes both the DispatchAction and Commons Validator. Using the DispatchAction helps to minimize the number of action classes while the Validator supports the declarative (non-programmatic) specification of form field validations.

      The example used is a simple two page wizard. The first page prompts for a name, while the second for an address. The application URL has the form

      where the submitName parameter is used to specify the name of the method in the action class that will be called to process the request. In the action mapping the value of the parameter attribute specifies the name of the dispatch request parameter (i.e. parameter="submitName").

      
          
          
      
      ]]>
      The method enterName simply forwards to the first page.
      On the page name.jsp is a hidden field for the submitName parameter. Submitting the name page calls method enterAddress by using Javascript to set the submitName parameter
      
      ]]>
      The enterAddress method then forwards to the address page.
      On the adddress.jsp page, we again dynamically set the submitName parameter.
      
      ]]>
      And the action path that is submitted is
      
      ]]>
      The action mapping for /address is
      
      
              
      
              
      
      
      ]]>
      Note that two action mappings are required to handle the page flow (we'll discuss why in the next section).
      Let's now add some validations to require input fields using the Validator. In validation.xml, there's a formset definition that specifies two field validations for the form bean named acmeForm.
      
         
      ]]>
      We need to identify the page where the input field resides so that we can control which validations are triggered for a given form submission. Without using the page property, any request that involves the acmeForm would trigger all of the validations associated with acmeForm (even validations for fields that the user has not seen yet). On each of the pages, a hidden field is used to identify the page number. In name.jsp
      
      ]]>
      In address.jsp
      
      ]]>
      The Validator will use the value of the page property in determining which validations to run. Now let's revisit the reason for having two action mappings. An action mapping is required for each page since the input attribute specifies the page to forward to in case validation fails. Therefore we need to define an action mapping for each page that could be displayed after a validation fails.
      The tricky part is how to setup Previous and Cancel buttons for each of the pages. If the user clicks Previous then the validations for the currrent page should not be triggered. For Cancel, none of the validations should be triggered. The solution for Previous is to set the page number property to the number of the previous page, effectively circumventing the validations associated with the current page.
      
      ]]>
      For cancel, there are two options. We could use the Struts Cancel button or create an action specifically designed to process a cancel request. The cancel action has no associated validations.
      
      
          
      
      
      ]]>
      And the Cancel button submits to the /cancel action path.
      
      ]]>
      The full example is here .
      libstruts1.2-java-1.2.9/doc/faqs/dispatchValidator.zip0000644000175000017500000000737110404045216023360 0ustar arnaudarnaud00000000000000PKç‘R/ÿT¡ AcmeAction.javaUX ¶»‘?r»‘?õµ•ÍnÛ0 Çï~ ¢è¡ ;M7 h†¡A›¡;¬(Ö¼€"3±ÖXÒH9É0ìÝ'ù#sÓupÓT‡¡ø§È);éGÐËÇÒ)£ãïb%‚­´_û“Ô"sprÕƒá`0„;2B:¿C6®´Ë%”> „Œ´Â4l$Qd…| iòXøFQ¤rkÈA8dç%ºø¾zN6mÈaÿöËœ³ñÿ©ßðGìF]½ÙÍ­, -bá“Ì0fG…cŸeÉ B1!24z‰3wõþl(ïZPÚÕý«°Vé…¯2ébùV†6_#KRe{ÀÌA.s½u) —‚[%`<çL3ÃGí ±Ø.m9:2LމO|…Ä!ìñ—ôbwOWpÃä'ƒa2ÀÙ»‹³çï¡ “…ã*Ô!VÛb¶T²*±•àÆ¡NùÙp|­Ø '³Zð+Š"ð+é—_ë}fÖà2„ÌäÖ_Žz§q¸´‚DyÕD˜z×Gm…‚1g€q‰þºL1(ÍNh‰;AÄvÔZqÊ¿3æ¾e¥œªk;òÆ´7ÓéÝÖ°Fä³'#‘Ù'õDX]´¶²¶ÔRI(Ü_aR>kì†P;¤[‘ãÉc 5 Ó*ÂÿW«p_sÞIóô-Ó”ÿry]{¡· à22k†í{/ L³Gè ÒMñ\é´frr¤=£Þ¨rþ]ÙóøÆiêÏæWÜ ák¾1DQQ鯑‹Y®Ü@îËò8ßœhjtDZ´„+å¿û“Üâëø½-ºH_ EPKà‘R/kÇÏ© address.jspUX d»‘?d»‘?õ•“ÏŽ›0ÆïyŠ©¥' é‘j/UOÕJ}X56²‡möí;Æ@)›v¹„|žßø›?”O_€ä U‹S•ðäòéH“ÎHwf‡½ºT"(žêSyŸhPš["(mÕÞ"«´2§S9žkøŽZ[ B™³ÂP/Eoݲ%eM%rÙu½5@`×DÅÄŠÐ?ób6x?ÕU³ŽQææË`¼øí!9á½Ò„®½ÔEbs&ÊÆÅÔùMî/ˇü$‡H°y/`wGx¡íjÙNø+°÷ŸÙÙ½®­åŒ_·fÏÅPKà‘R/:Ìã\¬done.jspUX d»‘?d»‘?õ³QuP(ILÏÉLR(-Ê´U*.)*-)ÖÍ(ÉÍÑ+ÉIQR((JMˬ°U‰()¨ÚqÙ`ב”š˜‡ª$‚OGN~zf2ª°X—M†¡‚K~^ª‚> PK à‘R/GßÄ hello.jspUX d»‘?d»‘?õ

      Hello there

      PKà‘R/Á÷R¾PZname.jspUX d»‘?d»‘?õ’Ínƒ0„ï<ÅÊR”S¡¹"ƒÚKÕSÕW0°€UcÐziéÛ×B~”¦õq=ßÌøGUct#éL8¦‘ÝCˉÙTÂZO™»<’·‰•½$ÂäaúF——È<š™(’í!‡W4¦n‘dâ'Q2TIëž:P%ëÞf"±ªC‘xlöH;tN5èÞ ZÜ w@W™@¢žœðÛ²ð¸ Ó/ÒŒ,7ÔÚ0R&jeŠ$hOÈ‚’Å;¹0†É&G ¼19žÃR8VdœxÍWe‡/þ¨fõ¯k ~@âoß0¾…ûøéÔdÐ6ÜfâðŽ4ËOՌڊý¿Ö©GÀoָήr—°VWÚ3?7^?•}‹i÷™Á_ü¦>l⫨Åù¼foK£ËLp«]¾Z|Š¿½L¤çªòïêö‹÷ú ÿPKõ‘R/kÝ|ïÚstruts-config.xmlUX Ž»‘?Ž»‘?õÍVMoÛ0 ½çWp>×ÖrÐ u‹6I‡ [R Ý†ž Å¢w¶dHr²üûQ’ã¥ù@Sì2ž™zï‘¶rqõ»*a‰ÚJ¦Q?yÊL‰BÎÓh|?ÏÏ?|Œû\]özï†ÓÁÃãÝŒÕ5q¦d^ÌáîûÍ×ñ ]D1c×5Ï÷*·+®nU#·ÄÃØða÷¢Ñþ ô“>c£I´µ°¶þÄØ3ÿŵå ÷¸‰ÒsT0a…a/=õŸú mG^t÷Þdú0úð¨X©¦ d¹†¼D³ÕX°¤W åEi þg”+]Å3ä²Õ$0+yPKI9¬ lÁp˜£Dz 4X¥J:Í-4…éh2Üb€qØ™ÒM­¤ë6|áK„m  V‡œL)S¯ ƒgžÊë±­`G(`‰J …5Xæg°*ìbŸ1 D’W—"»®ÝÒZ]Ì‹&éÅ1u°wñ¢¹nÀµÒ.È^]Á ÑÃóB¡Aé랃»Ìeë×Öž«—„¦Ï*t\Û#Ò…+ 2U%.-¹Þä²ÀÀv(| H•sQ‘߸¤¦™ ç@…ŸK5ã¥+”æY¼¡LHxsç •Àöwp_gþõøÆëÚÍÊÛ¹¹ˆ«Ðu¸ÝwËšÛE1?{½=ÐØ i?õ5›L¦M¹9x¾ucIHÍçh¼œäÙÔûy5½…ZÔ„Õ̪ÂNœòntÂðx§‚¢0çûƒÓ–¾ÃÈŽcq!è=2§Àµ©bÛw܇ ÅÿcÅv%ÿìF­qY¨æ¤žâˆPò$w]ÞK¬-+Žy‘q™aùªŸÖšq\j‹v‚ØyTîßÛïµÛ®ËfÓÍ_'ÏJ÷åæê _ódÉËB¸û*ù±YÝѹ±Óî™ Ú¸Ö4"Ú®a³ ëH¢«äÀlú ܆ÙÏÑM<žÜ²Ž'Ö ]µ ýã8;|²Ý“T ;äzàJn‹sW;Û»˜ºøPKñ‘R/Osqb²êvalidation.xmlUX …»‘?…»‘?õ•’QOÛ0…Ÿ×_áY{ “·$@I*hABB›„è@&¾M3ÛØN7Æúß¹IHZÐ6 ’ß«{Îùâ8üÊ32cS%CÚ÷{”€Œ•HeÒócokksÛëS2ˆ:àãèxx~q²O¦ÊäÞœg©à•ääëÞÑá°CÚ‡zŒíjÏ€œ©©ûÉ UÈzž±Ñùˆ Už+iÉ·ÚGrZd`±/§iR˜Ú™ÛÓUó™sz‡±ü–Ç}^ùÊ$,®=™p²yc|Ý¿îùØ¢åG¼`Jã ÉÔ Ï¢§ FÇ¥‹ÚÔ¶åIžC¤gJBÀž7ÿ2Œ9DW“µÁÚD<¬/º“îàÒûC¾7õ²ØXt?­8Öʈ½$zñwªß(6ñù­kN¬ªÊ3µàêªi”›26¤<Îá;tI€#)d¢Üi£4wÒij¬£„ÍâÅ[*>à A RwEj@Ô“ã*f¦P¹QÅp“ôð} èI¹v~ EÙ* «`ZüàYgÜ®¬m¿Ðwò'í ›Ñÿqb§Še§-ª¿PoŸ]òGPKç‘R/ÿT¡  @íAcmeAction.javaUX¶»‘?r»‘?PKà‘R/kÇÏ© @í‘address.jspUXd»‘?d»‘?PKà‘R/v8öGa° @í™cancel.jspUXd»‘?d»‘?PKà‘R/:Ìã\¬ @í2done.jspUXd»‘?d»‘?PK à‘R/GßÄ @íÄhello.jspUXd»‘?d»‘?PKà‘R/Á÷R¾PZ @¤name.jspUXd»‘?d»‘?PKõ‘R/kÝ|ïÚ @í›struts-config.xmlUXŽ»‘?Ž»‘?PKñ‘R/Osqb²ê @íÉ validation.xmlUX…»‘?…»‘?PK,· libstruts1.2-java-1.2.9/doc/faqs/eclipse.xml0000644000175000017500000002515610404045240021333 0ustar arnaudarnaud00000000000000 James Mitchell How to setup a basic Struts project using Eclipse IDE - Apache Struts

      * DISCLAIMER - This simple How-To shows you one of many ways to setup a working project using
      the Struts framework. This is mainly geared toward struts users who are new to Eclipse, and
      don't want to spend a lot of time figuring out the differences between their old IDE (if any)
      and this one.

      I will also apologize ahead of time for the formatting of this page.

      In this How-To, I will demonstrate (using Eclipse 2.0.1) how to setup, compile, run,
      and debug the struts-example web application that is bundled with the distribution.

      Next, I will modify the code to pull some data from a MySql database using the popular
      relational mapping tool OJB. (This is actually quite simple)
      Before we begin, you will need to create a directory somewhere to store your project.
      I typically use C:\personal\development\Projects\(some project)
      Once that's done, extract the struts-example.war to that directory
      (using your favorite zip utility)

      Delete the META-INF folder because this will be created during the build/jar/war process.
      Add a build.xml file to the project root. I use something like this:
        
      <project name="Struts Example" default="main" basedir=".">
      
          <!--  This is a basic build script, only the minimums here -->
      
          <!-- Tell ant to use my environment variables -->
          <property environment="env"/>
      
          <property file="./build.properties"/>
      
          <!-- 
               This build script assumes Tomcat 5 is the servlet container.
               Modify as necessary if a different container is being used.
          -->
          <property name="tomcat.home"        value="${env.CATALINA_HOME}"/>
          <property name="servlet.jar"        value="${tomcat.home}/common/lib/servlet-api.jar"/>
          <property name="jsp.jar"            value="${tomcat.home}/common/lib/jsp-api.jar"/>
          <property name="deploy.dir"         value="${tomcat.home}/webapps"/>
          <property name="build.compiler"     value="modern"/>
          <property name="build.dir"          value="./WEB-INF/classes" />
          <property name="src.dir"            value="./WEB-INF/src"/>
          <property name="war.file"           value="struts-example"/>
          <property name="war.file.name"      value="${war.file}.war"/>
      
          <path id="project.class.path">
              <fileset dir="./WEB-INF/lib/">
                  <include name="**/*.jar"/>
              </fileset>
              <pathelement path="${src.dir}"/>
              <pathelement path="${servlet.jar}"/>
              <pathelement path="${jsp.jar}"/>
          </path>
      
          <target name="clean">
              <delete dir="${build.dir}" includeEmptyDirs="true" />
          </target>
      
          <target name="prep">
              <mkdir dir="${build.dir}"/>
          </target>
      
          <target name="compile">
              <javac srcdir="${src.dir}"
                     destdir="${build.dir}"
                     debug="on"
                     deprecation="on">
              <include name="**/*.java"/>
              <classpath refid="project.class.path"/>
              </javac>
          </target>
      
          <target name="cleanWebApp">
              <delete file="${deploy.dir}/${war.file.name}" />
              <delete dir="${deploy.dir}/${war.file}" includeEmptyDirs="true" />
          </target>
      
          <target name="war">
              <war warfile="${war.file.name}" webxml="./WEB-INF/web.xml">
                   <fileset dir="./" includes="**/*.*" excludes="*.war, **/*.nbattrs, web.xml, **/WEB-INF/**/*.*, **/project-files/**/*.*"/>
                   <webinf  dir="./WEB-INF"    includes="**/*" excludes="web.xml, **/*.jar, **/*.class"/>
                   <lib     dir="./WEB-INF/lib"/>
                   <classes dir="${build.dir}"/>
                   <classes dir="${src.dir}">
                       <include name="**/*.properties"/>				
                   </classes>
              </war>
          </target>
      
          <target name="deploy">
              <copy todir="${deploy.dir}">
                  <fileset dir="./" includes="${war.file.name}"/>
              </copy>
          </target>
      
          <target name="main" depends="clean, prep, cleanWebApp, compile, war"/>
      
      </project>
      
        
      1. Create a new project.



      2. New Java Project



      3. Browse for the folder you created for your project.






      4. Eclipse will detect your source folders from any subdirectories under your project.



      5. In our case, this is where the src folder was placed.



      6. Default standard libs are automatically added depending on the type of project.



      7. Add the existing web app jars.



      8. Now we need to add a few jars from the file system.



      9. We always need this one (servlet.jar)



      10. Ahhhh...everything looks ok for now. You can always go back and modify these settings
        later.






      11. When everything settles down, you should see something like this (of course, it might look different depending on your installation/customization):



      12. Compilation warnings and errors are detected immediately. In this screenshot, I drill down
        into the source folder, package, file, class, and double click on the method....which
        brings up the source editor. I hover the mouse over the offending warning to see
        a description of what's wrong.



      13. I changed ApplicationConfig to ModuleConfig, then saved and now I see new errors.
        You can right click and import ModuleConfig right from the error.



      14. A quick look at the import section.



      15. Right click, Source, Organize Imports



      16. Ahhhh...better



      17. From the Package Explorer, right click your build.xml and run Ant:



      18. Is this cool or what?



      19. Uh Oh!



      20. Quick look at what jars are being used to process my build.






      21. I simply removed all the existing jars from the IDE's Ant configuration and
        added all from my own installation.



      22. Can't forget that last one



      23. Everything went ok (for me)









      24. Time to test-drive



      libstruts1.2-java-1.2.9/doc/faqs/helping.xml0000644000175000017500000003565410404045220021337 0ustar arnaudarnaud00000000000000 Ted Husted Craig R. McClanahan How to Help FAQ - Apache Struts

      "You can't always get what you want / but if you try real hard / you might just find / that you get what you need".
      [Rolling Stones]

      Struts is an all volunteer product. Our customers are the volunteers who donate their time and energy to supporting the product. If you want to support Struts, and become one of our customers, then you need to get involved and become a volunteer.

      Our challenge to any team using Struts is to donate the time of one team member one afternoon a week (or more if you can spare the resources). Have your team member browse Bugzilla for any issues without a patch or unit test, and add the patch or test. Please note that Struts does not use @author tags in our JavaDocs. If your patch includes an @author tag, we would have to ask that it be removed.

      (For more about creating patches, see the Jakarta Project Guidelines. The NetBeans community section also has a helpful section on the same subject.

      If Struts doesn't do what you want, it's up to you to step up and propose the patch. If Struts doesn't ship as often as you would like, it's up to you to step up with the tests and fixes that get a release out the door.

      If Struts does do what you want, help others become involved by turning your war stories into FAQs and how-tos that we can make part of the documentation. The mailing list is very active and trundling through the archives is no picnic. We can always use people who can reduce the best threads to coherent articles that we can put in the User Guide.

      Some Apache products like you to submit your patch to the mailing list. We would prefer that you create a Bugzilla Bugzilla report and then attach the patch to the report. To do this, you must first create the report, and then modify the report to add your patch. We realize this is a bit clumsy, but it keeps us from losing things, and helps to ensure that your patch will be attended.

      We don't sell Struts for money, but anyone who wants to be our customer can pay us back by donating the time and energy that money represents.

      You can research and report outstanding fixes and feature requests using Bugzilla. If you are unsure if this is an actual problem, feel free to bring it up the list first. But to be sure that an issue is resolved, read How to Report Bugs Effectively and report it to Bugzilla.

      Feature requests are also maintained in the Bugzilla database.

      Patches are always welcome. If you can't write a patch to fix your bug, a unit test that demonstrates the problem is also welcome. (And, of course, unit tests that prove your patch works are equally welcome.)

      If your bug or feature is already in Bugzilla, you can vote for the issue and call more attention to it. Each user can cast up to six votes at a time.

      If there is a patch attached to the issue, you can also try applying to your local copy of Struts, and report whether it worked for you. Feedback from developers regarding a proposed patch is really quite helpful. Don't hesitate to add a "works for me" note to a ticket if you've tried the patch yourself and found it useful.

      Struts is distributed by The Apache Software Foundation. These are the same people who distribute the Apache Web server. Like all ASF projects, Struts is managed as a "meritocracy", where everyone's contribution is welcome. Users can help other users through the mailing lists, report bugs, and request new features. Developers can contribute patches, new code, and documentation. The most active Developers may become Committers, who make the actual decisions about Strut's codebase.

      If you are new to open source development, see the How to get involved page the main Jakarta site.

      A very good place to start is by reviewing the list of open issues and pending feature requests (Bugzilla). If you see an issue that needs a patch you can write, feel free to annex your patch. If you seen an issue that needs a unit test to prove its fixed, feel free to annex your test case. If someone has posted a patch to an issue you'd like to see resolved, apply the patch to your local development copy of Struts. Then let us know if it works for you, and if it does, cast your vote for the issue and its patch.

      If none of the pending issues scratch your itch, another good place to start is by contributing unit tests for existing features (even those that still work).

      Our current approach to unit testing works fairly well for exercising most method-level stuff, but does not really address situations of dynamic behavior -- most particularly the execution of custom tags for Struts. You can try to fake what a JSP container does, but a much more reliable testing regime would actually execute the tag in a real container. For that purpose, we use the Cactus testing framework, which re-executes the JUnit-based tests as well to make sure that nothing bad happens when you switch environments. Right now, there are very few dynamic tests; ideally, we will have tests for every tag, that cover every reasonable combination of tag attribute values (yes, that's a tall order -- the totally lines of test source code will undoubtedly exceed the totally lines of code in the framework itself if we achieve this).

      The only difference is that the documentation is kept in XML rather than Java source code. Otherwise, all the same precepts and procedures pertain.

      The trick to getting started is to download the nightly build and try building the documentation WAR. Then try adding your own XML page under doc/ to see if the build succeeds. If it doesn't, it will report where the bad element is, much like it reports where a bad programming expression is. If it does, then your page should be available under target/documentation/.

      The website portion of the package is the root directory of doc/. The User Guide portion is under the userGuide/ folder. If the material you'd to add doesn't fit right in with what's there, the best thing may to start a new section after the existing material. The navigation column can be found in the project.xml document.

      To display markup, substitute &lt; for <. The unmatched trailing > will be ignored. Since it is XML, all elements also need to closed. So elements like <br> and <hr> need to set out as <br/> and <hr/>.

      Also watch for the length of code samples - these do not wrap. If a line is too long, it will force the right margin out past the edge of the screen or printed page.

      The stylesheets we use are adequate, but could certainly be improved by an XML guru, if you happen to one of those.

      Here is the truth regarding releases:

      Apache products are released on the basis of merit, and ~not~ according to a strict timetable. The volunteers devote whatever time they can to work on the product. But all volunteers have real jobs and real lives, that do take precedence. Since Struts does not have paid personnel working on the project, we simply cannot make date-oriented commitments.

      The bottom line is that Apache takes releases very seriously. We do not compromise the quality of our software by watching the calendar (and then ship something ready or not). A release is ready when it is ready.

      That may sound flip, but it ~is~ the truth. The delivery of production-quality, leading-edge software is not something anyone can prognosticate. If anyone tries, they are lying to you. That, we won't do ;-)

      What we ~will~ do is release all of our development software as soon as it is developed. This way you can judge for yourself how quickly the development is proceeding, and whether what is being developed will meet your needs. If you need a feature right now, you can use the nightly build, or roll your own patch. There are no internal code repositories, private development lists, secret chat rooms, or conference calls. What you see is what we got. If you are following the DEV list, then you know everything the developers know. Really, you do.

      So, what do you tell your team? If you can ship your application based on the nightly build of your choice, then consider that an option. You can still ship yours, even if we don't ship ours, and you will have access to all the latest patches or enhancements. (Just like we were working down the hall.) If you can only ship your application based on a release build of Struts, then you should base your development on the release build of Struts, and keep an eye on what is coming down the pipeline. This way you are at least forewarned and forearmed.

      • Most importantly, download the lastest nightly build or development release and test it against your own applications. Report any and all issues or suspected issues to Bugzilla. The sooner we resolve any problems, the fewer betas or release candidates we will have to distribute before we are done. (How do we know when we're done? -- When we run out of issues =:o) The sooner we find them, the sooner we are done.)
      • Contribute unit tests. The closer we get to a release, the more we worry about breaking something. The more tests we have, the more confident we can be when applying patches. Tests that prove that a pending issue is actually a bug are the most welcome ones. But we are eager for any and all tests for any and all features, even those that still work =:0).
      • Review the list of issues at Bugzilla. If there are any to which you can respond, please do. If there any patches posted, feel free to test them your system, report the results, and cast your vote if they work.
      • Confirm an issue's category and status. Newbies often post feature requests or help-desk questions as "bugs". This bloats the list of fixes we (apparently) need to apply before the next beta, making it hard to see the forest for the trees. If an issue doesn't seem to be categorized correctly, exercise your best judgment and change it. If one ticket seems like a duplicate of another, go ahead and enter the change. Every modification to the ticket is echoed to the DEV list and automatically subjected to peer review. Err on the side of doing.
      • Use Bugzilla to vote for issues you feel should be handled first. If an issue on your ballot doesn't include a patch, feel free to try coding one yourself. (In a meritocracy, patches are the only votes that matter.) Dozens of developers have contributed code or documentation to Struts. You can too =:0)
      • Answer questions on the user list. The Committers only have a limited amount of time to volunteer. If Developers are supporting each other on the lists, the Committers have more time to spend on the next release.

      The management of the Struts product is based on principles and practices used by creators of the Apache HTTPD server. Struts follows the Project Guidelines on the main Jakarta site.

      If you are new to this style of development, the Apache HTTPD Dev list is available in a digest form. Even if you are not working on the HTTPD server yourself, it is interesting to watch how the HTTPD team works on the server.

      The Struts project has its own DEV list, where all of the decisions regarding Struts are made. Most development takes place via Lazy Consensus. Committers post most changes to the product unilaterally, using their own best judgment, and only discuss or vote upon controversial matters. Struts PMC members can veto with cause any change in an unreleased product.

      libstruts1.2-java-1.2.9/doc/faqs/index.xml0000644000175000017500000000420610404045242021011 0ustar arnaudarnaud00000000000000 Ted Husted FAQs and Howtos - Apache Struts
      libstruts1.2-java-1.2.9/doc/faqs/indexedprops.xml0000644000175000017500000004202410404045212022403 0ustar arnaudarnaud00000000000000 David M. Karr David Graham Indexed Properties, Mapped Properties, and Indexed Tags

      The JSP specification discusses using "indexed properties" in reference to the <jsp:setProperty> tag. However, none of the support provided in the base JSP specification actually deals with the "indexing" part. In truth, it allows for setting "array properties", but it doesn't do much for setting or even getting the actual values in each entry of the array, except with explicit JSP expressions (<%= %>).

      The Struts framework provides much more powerful features related to indexed properties, but in truth most of the heavy lifting is not even in the Struts framework, but in the Jakarta Commons Beanutils package. This package is used by Struts to provide this functionality. You can see the javadoc documentation for the Beanutils package at http://jakarta.apache.org/commons/beanutils/api/index.html. The information particularly related to indexed properties is in the package description for the org.apache.commons.beanutils package. This article mirrors that information, but focuses on how this functionality is mapped to JSP tags using the Struts tag library.

      The support for indexed properties also includes "mapped properties", "nested properties" and "indexed tags", which are all related but slightly different. The latter is exclusive to Struts, but the first two are also provided by the Beanutils package. This article will cover all three of these topics.

      The simplest demonstration of using indexed properties in Struts can be shown with the following simple bean and JSP page:

      package org.apache.struts.webapp.exercise;
      import org.apache.struts.action.ActionForm;
      public class StringBean extends ActionForm {
          private String strAry[] = { "String 0", "String 1", "String 2", "String 3", "String 4" };
      
          public String getStringIndexed(int index) { 
              return strAry[index]; 
          }
          
          public void setStringIndexed(int index, String value) { 
              strAry[index] = value; 
          }
      }

      First note the two methods in the StringBean class, "getStringIndexed()" and "setStringIndexed()". Note that the "get" method takes an "int" and the "set" method takes an "int" and "String". The Beanutils package and Struts recognizes this arrangement of signatures as an "indexed property", in this case with the property name "stringIndexed".

      <!-- indexedtest.jsp -->
      <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
      <jsp:useBean id="bean" class="org.apache.struts.webapp.exercise.StringBean"/>
      <bean:write name="bean" property="stringIndexed[1]"/>

      Note the property value of "stringIndexed[1]". This is intended to reference the indexed property "stringIndexed", and the 1st (zero-based) entry of whatever array or collection which the indexed property represents.

      As you might be able to guess, when this page is executed, it will print just the string "String 1", which is the corresponding array entry at that index value.

      This is a simple demonstration of what indexed properties can provide.

      A variation on indexed properties are properties whose type is java.util.List or a subclass.

      For instance, the first example using "StringBean.java" and "indexedtest.jsp" could use a modified "StringBean.java" class, like this:

      package org.apache.struts.webapp.exercise;
      import org.apache.struts.action.ActionForm;
      public class StringBean2 extends ActionForm {
          private String strAry[] = { "String 0", "String 1", "String 2", "String 3", "String 4" };
      
          public java.util.List getStringIndexed(int index) { 
              return java.util.Arrays.asList(strAry);
          }
      }

      Note the different implementation of the "getStringIndexed()" method, returning a List instead of a String. If this bean class is substituted with the original "indexedtest.jsp", the result will be identical.

      The idea of "mapped properties" as opposed to "indexed properties" is that the property represents a "map" type, as opposed to an array or collection type. The signature of the "get" and "set" methods for a mapped property are different from the same methods for an indexed property. In particular, instead of an "int" for the index, there is a "String" for the key.

      The previous example for indexed properties can be changed to the following to demonstrate mapped properties:

      package org.apache.struts.webapp.exercise;
      import java.util.HashMap;
      import org.apache.struts.action.ActionForm;
      public class StringBean3 extends ActionForm {
          private String strAry[] = { "String 0", "String 1", "String 2", "String 3", "String 4" };
          
          private HashMap map = new HashMap();
      
          public StringBean() {
              map.put("zero", strAry[0]);
              map.put("one", strAry[1]);
              map.put("two", strAry[2]);
              map.put("three", strAry[3]);
              map.put("four", strAry[4]);
          }
      
          public Object getStringMapped(String key) { 
              return map.get(key);
          }
          
          public void setStringMapped(String key, Object value) { 
              map.put(key, value); 
          }
      }

      Note the "get" and "set" methods to represent the mapped property.

      <!-- indexedtest3.jsp -->
      <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
      <jsp:useBean id="bean" class="org.apache.struts.webapp.exercise.StringBean"/>
      <bean:write name="bean" property="stringMapped(two)"/>

      Note the property value of "stringMapped(two)". This will reference the mapped property "stringMapped", using the key value of "two".

      When this page is executed, it will print just the string "String 2", which is the string stored in the HashMap with the key "two".

      Nested properties allows you to combine normal properties, indexed properties, and mapped properties in a hierarchical fashion. A property value of a bean does not have to be a primitive like "int" or "String. The property value can be a bean with its own properties. The following example demonstrates this.

      package org.apache.struts.webapp.exercise;
      import org.apache.struts.util.LabelValueBean;
      import org.apache.struts.action.ActionForm;
      public class StringBean4 extends ActionForm {
          private LabelValueBean[] lvbeans;
          
          public StringBean() {
              lvbeans   = new LabelValueBean[5];
              lvbeans[0]   = new LabelValueBean("Zero", 0+"");
              lvbeans[1]   = new LabelValueBean("One", 1+"");
              lvbeans[2]   = new LabelValueBean("Two", 2+"");
              lvbeans[3]   = new LabelValueBean("Three", 3+"");
              lvbeans[4]   = new LabelValueBean("Four", 4+"");
          }
      
          public  LabelValueBean getLabelValue(int index) { 
              return lvbeans[index];
          }
      }

      First note the use of the class "LabelValueBean". This is a simple class provided in the Struts library which represents a pair of two Strings, a "label" and a "value". It itself is a bean, providing these two properties with standard getters and setter methods.

      Then, see the "getLabelValue()" method, representing the indexed property "labelValue". This class doesn't show a "setter" method. If you only ever provide read-only access a property, then it is not necessary to provide a setter method.

      <!-- indexedtest4.jsp -->
      <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
      <jsp:useBean id="bean" class="org.apache.struts.webapp.exercise.StringBean"/>
      <bean:write name="bean" property="labelValue[1].label"/>

      Note here the "nested" property reference. It is first using the indexed property "labelValue" and then the "normal" property of the LabelValueBean to get the final result. When this page is executed, it will print the string "One", representing the "label" property of the 1st entry of the array represented by the "labelValue" indexed property.

      When people started using indexed properties in Struts tags, I'm reasonably certain they started out with a high level of enthusiasm, but were somewhat frustrated when they discovered reality. The reality is that the "index" for indexed properties often needs to be a dynamic value, usually from the "indexId" counter in the "<logic:iterate>" tag.

      For instance, the following example JSP page using the same "StringBean" bean class uses a dynamic value for the index:

      <!-- indexedtest5.jsp -->
      <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
      <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
      <html>
       <body>
        <html:form action="indexedtest5.do">
         <logic:iterate name="stringbean" property="stringArray" id="foo"
                        indexId="ctr">
          <html:text name="stringbean"
                     property='<%= "labelValue[" + ctr + "].label" %>' />
         </logic:iterate>
         <html:submit property="submitValue">Submit Changes</html:submit>
        </html:form>
       </body>
      </html>

      The JSP expression syntax for the property attribute is somewhat messy and easy to get wrong so it's something we want to avoid. One way to make this a little cleaner is to use "indexed tags", but there's a wrinkle to this approach. We'll first cover the details of indexed tags, then we'll talk about the wrinkle, and then finally an alternative to indexed tags.

      The "indexed tags" feature is provided by several tags that have an optional boolean "indexed" attribute. This is only legal when inside a "<logic:iterate>" tag. When the "indexed" attribute is true, then the tag will incorporate the loop index into the resulting HTML component.

      The several tags that support the "indexed" attribute can be broken into three groups, split by what they do to incorporate the loop index into the resulting HTML component.

      Group 1Group 2Group 3
      checkboxbuttonlink
      fileimage 
      hiddensubmit 
      password  
      radio  
      select  
      text  
      textarea  

      In Group 1, all of these tags will generate an HTML "name" attribute of "name[nn].property". The value of each tag will also be initialized by the getter method corresponding to that property specification.

      In Group 2, these tags will generate an HTML "name" attribute of "property[nn]". These three tags don't have "name" attributes, so since it wouldn't make sense to use "[nn].property" (no name value), the array indexes are attached to the property instead.

      The "link" tag in Group 3 isn't anything like any of the others. The base description of the "link" tag doesn't even mention how this works, but the description of the "indexed" tag describes how it works somewhat (although it doesn't specifically say that it uses the name "index" if "indexId" isn't set). In short, the "indexed" behavior of this tag is to add a URL query parameter, where the parameter name is "index" or the value of the "indexId" attribute, and the parameter value is the current index value. Outside of this, the "indexed" behavior of the "link" tag needs no more explanation, in contrast to the tags in the first two groups.

      The problem with using the "indexed" attribute to automatically attach the loop index is that it gives you less control over how the loop index is used. For instance, in our earlier examples using the "<html:text>" tag, we attached the loop index to the end of the "property" attribute value, which was "labelValue" in our example. This results in a "name" attribute value in the HTML component of "labelValue[nn]". This maps to a "labelValue" indexed property on the "stringbean" bean instance.

      However, if we instead add the "indexed" attribute, and remove the manual attachment of the loop index, then the resulting "name" attribute in the HTML component ends up as "stringbean[nn].labelValue". This will not work as is. It can be changed to work, however. From the previous example (indexedtest5.jsp), the "<html:text>" component would change the "name" attribute from "stringbean" to "labelValue", and the "property" attribute to "label". With the "indexed" attribute, that ends up with a "name" attribute value of "labelValue[nn].label".

      So, it's very likely you could use indexed tags to support your needs for indexed properties, but you have to understand the resulting structure of your "name" attribute in order to understand what other attribute values you need.

      The "indexed tags" feature was created partially because of the awkward process for encoding the loop index into the property attribute, using a JSP expression. The creation of the JSTL eventually resulted in a solution that makes that process less painful.

      The JSTL uses a string-based expression language to evaluate attribute values, instead of using a run-time JSP expression. The engine that performs these evaluations is often called just "EL" (expression language) for short. After the JSTL was created, a derivative of the Struts tag library called Struts-EL was created. In short, this does everything that the Struts tag library does, but it uses the JSTL EL engine to evaluate attribute values.

      If you use Struts-EL, you can get back some of the flexibility of encoding your loop indices manually, but the resulting expressions will be a little more readable, and thus maybe a little easier to maintain.

      For instance, following this is a version of "indexedtest5.jsp" using Struts-EL:

      <!-- indexedtest6.jsp -->
      <%@ taglib uri="/WEB-INF/struts-html-el.tld" prefix="html-el" %>
      <%@ taglib uri="/WEB-INF/struts-logic-el.tld" prefix="logic-el" %>
      <html>
       <body>
        <html-el:form action="indexedtest6.do">
         <logic-el:iterate name="stringbean" property="stringArray" id="foo"
                           indexId="ctr">
          <html-el:text name="stringbean"
                        property="labelValue[${ctr}].label" />
         </logic-el:iterate>
         <html-el:submit property="submitValue">Submit Changes</html:submit>
        </html-el:form>
       </body>
      </html>

      The Struts-EL library is part of the Struts distribution, in the "contrib" directory. The one drawback to using Struts-EL is that it requires a web container supporting the Servlet 2.3 specification.

      libstruts1.2-java-1.2.9/doc/faqs/kickstart.xml0000644000175000017500000005320510404045174021710 0ustar arnaudarnaud00000000000000 Ted Husted Craig R. McClanahan James DeVries James Holmes Kickstart FAQ - Apache Struts

      Here are answers to the usual getting-started questions. For an in-depth, searchable FAQ, visit our friends at JGuru.

      Java technologies give developers a serious boost when creating and maintaining applications to meet the demands of today's public Web sites and enterprise intranets. Struts combines Java Servlets, Java ServerPages, custom tags, and message resources into a unified framework. The end result is a cooperative, synergistic platform, suitable for development teams, independent developers, and everyone in between.

      Java Servlets are designed to handle requests made by Web browsers. Java ServerPages are designed to create dynamic Web pages that can turn billboard sites into live applications. Struts uses a special Servlet as a switchboard to route requests from Web browsers to the appropriate ServerPage. This makes Web applications much easier to design, create, and maintain.

      Yes. Struts is committed to supporting industry standards. Struts acts as an integrator of Java technologies so that they can be used in the "real world".

      There are several active committers to the Struts project, working cooperatively from around the globe. Dozens of individual developers and committers contributed to the Struts 1.x codebase. All interested Java developers are invited to contribute to the project. Struts is a Apache Software Foundation project, with the mission to "provide secure, enterprise-grade server solutions based on the Java Platform that are developed in an open and cooperative fashion".

      Struts was created by Craig R. McClanahan and donated to The Apache Software Foundation in May 2000. Craig was the primary developer of both Struts 1.x and Tomcat 4. Tomcat 4 was the basis for the official reference implementation for a servlet 2.3 and JSP 1.2 container.

      Craig's current focus is as architect of the Sun Java Studio Creator (formerly Project Rave). Craig also serves as the Specification Lead for JavaServer Faces (JSR-127), and is the Web Layer Architect for the Java2 Enterprise Edition (J2EE) platform as a whole.

      It's a reference to struts in the architectural sense, a reminder of the nearly invisible pieces that hold up buildings, houses, and bridges.

      Struts is copyrighted software available under the Apache License, a "free-to-use, business-friendly license".

      Yes. The only requirements you must meet are those listed in the Apache License.

      You need to credit Struts if you redistribute your own framework based on Struts for other people to use. (See the Apache License for details.) But you do not need to credit Struts just because your web application utilizes the framework. It's the same situation as using the Apache HTTPD server or Tomcat. Not required if its just running your web site. Required if you've used the source code to create your own server that you are redistributing to other people.

      The best place to download Struts is at struts.apache.org. The nightly builds are very stable, and recommended as the best place to start today.

      To develop applications with Struts, you can usually just add the Struts JAR file to your Java development environment. You can then start using the Struts classes as part of your own application. A blank Struts application (in the webapps directory, open struts-blank.war) is provided, which you can just copy to get a quick-start on your own brainchild.

      Since the full source code for Struts is available, we also provide complete instructions for compiling your own Struts JAR from scratch. (This is actually easier than it looks!)

      Your Struts application can usually be deployed using a standard WAR file. In most cases, you simply deposit the WAR file on your application server, and it is installed automatically. If not, step-by-step installation instructions for various servlet containers are available.

      When you are compiling an application that uses the Struts classes, you must have the "struts.jar" on the classpath your compiler sees -- it does not have to be on your CLASSPATH environment variable.

      Why is that an important distinction? Because if you are using a servlet container on your development machine to test your application, the "struts.jar" must not be on your CLASSPATH environment variable when running the container. (This is because each Web application must also have their own copy of the Struts classes, and the container will become confused if it is on the environment path as well.)

      There are several general approaches to this issue:

      • Use ANT for building your projects -- it can easily assemble classpaths for the compiler. (This is how Struts itself is built, along with Tomcat and most other Java-based projects).
      • Use an IDE where you can configure the "class path" used for compilation independent of the CLASSPATH environment variable.
      • Use a shell script that temporarily adds struts.jar to the classpath just for compilation, for example
        javac -classpath /path/to/struts.jar:$CLASSPATH $@

      Struts currently has two testing environments, to reflect the fact that some things can be tested statically, and some really need to be done in the environment of a running servlet container.

      For static unit tests, we use the JUnit framework. The sources for these tests are in the "src/test" hierarchy in the source repository, and are executed via the "test.junit" target in the top-level build.xml file. Such tests are focused on the low-level functionality of individual methods, are particularly suitable for the static methods in the org.apache.struts.util utility classes. In the test hierarchy, there are also some "mock object" classes (in the org.apache.struts.mock package) so that you can package up things that look like servlet API and Struts API objects to pass in as arguments to such tests.

      Another valuable tool is Struts TestCase which provides a useful harness for Action classes that can be used with JUnit or Cactus.

      First, it's important to remember that Struts is an all-volunteer project. We don't charge anyone anything to use Struts. Committers and other developers work on Struts because they need to use it with their own applications. If others can use it too, that's "icing on the cake". If you submit a patch for a feature that a Committer finds useful, then that Committer may choose to volunteer his or her time to apply the patch. If you just submit an idea without a patch, it is much less likely to be added (since first someone else has to volunteer their time to write the patch).

      We are grateful for any patches, and we welcome new ideas, but the best way to see that something gets added to the framework is to do as much of the work as you can, rather than rely on the "kindness of strangers". Worst case, you can apply the patch to your copy of Struts and still use the feature in your own application. (Which is what open source is ~really~ all about.)

      The Struts package comes complete with a Users Guide to introduce people to the framework and its underlying technologies. Various components also have their own in-depth Developers Guide, to cover more advanced topics. Comprehensive Javadocs are included along with the full source code. For your convenience, these are bundled together as a self-installing application. The struts-documentation.war is the same bundle that is deployed as the Struts Web site.

      The Strut's mailing list is also very active, and welcomes posts from new users. Before posting a new question, be sure to consult the MAILING LIST ARCHIVE and the very excellent How To Ask Questions The Smart Way by Eric Raymond. Please do be sure to turn off HTML in your email client before posting.

      There is no official, commercial support for Struts, though third parties may offer different degrees of support.

      For a listing of some Java and Struts ISPs, visit the Struts Community Resources area on SourceForge.

      If you are starting from scratch, packages like Turbine and Expresso can be very helpful since they try to provide all of the basic services that your team is likely to need. Such services include things like data persistence and logging.

      If you are not starting from scratch, and need to hook up your web application to an existing infrastructure, then "plain vanilla" Struts can be a better choice. The core Struts framework does not presuppose that you are using a given set of data persistence, presentation, or logging tools. Anything goes =:0)

      Compared to other offerings, Struts endeavors to be a minimalist framework. We try leverage existing technologies whenever we can and provide only the missing pieces you need to combine disparate technologies into a coherent application. This is great when you want to select your own tools to use with Struts. But, if you prefer a more integrated infrastructure, then packages like Turbine or Expresso (which uses Struts) are perfectly good ways to go.

      See also

      Development of both products began about the same time. Leading up to the release of 1.0, it was thought better to continue to develop the taglibs alongside the controller. Now that 1.0 is out, the JavaServer Pages Standard Taglib is in active development. Once work on JSTL stabilizes, the Struts taglibs will be revisited. Tags which are not linked directly to the framework may be hosted at Jakarta Taglibs instead.

      If you use an <html:html xhtml="true> or <html:xhtml/> element on your page, the tags will render as XHTML (since Struts 1.1).

      Struts itself is markup neutral. The original Struts taglibs are only one example of how presentation layer components can access the framework. The framework objects are exposed through the standard application, session, and request contexts, where any Java component in the application can make use of them.

      Markup extensions that use Struts are available for Velocity and XLST, among others. A new Struts tag library for Java Server Faces is also in development.

      For more about using WAP/WML with Struts see the article WAP up your EAserver.

      JSTL, the JavaServer Standard Tag Library, is a set of JSP tags that are designed to make it easier to develop Web applications. JavaServer Faces (JSF) is a specification for a new technology that promises to make it easier to write MVC applications, both for the Web and for the desktop.

      The inventor of Struts, Craig McClanahan, is the specification co-lead for JavaServer Faces (JSR 127), and architect of the reference implemenation as well as Java Studio Creator. Both JSTL and JSF are complementary to Struts.

      The mainstay of the Struts framework is the controller components, which can be used with any Java presentation technology. As new technologies become available, it is certain that new "glue" components will also appear to help these technologies work as well with Struts.

      Struts originally came bundled with a set of custom JSP tags. Today, several extensions are available to help you use Struts with other popular presentation technologies, like XSLT and Velocity. Likewise, extensions for JSTL and JSF are now available as well.

      The JSTL reference implementation is available through the Jakarta Taglibs site. A JSTL taglibs for Struts, Struts-El, is available and distributed with Struts beginning with the 1.1 release.

      The JSF specification and reference implementation is available through Sun's The JSF specification and reference implementation is available through Sun's Java ServerFaces page. An early-release JavaServer Faces taglib for Struts, Struts-Faces, is also in early release and available through the nightly build. The Struts Faces taglib is expected to work with any compliant JSF implementation, including MyFaces.

      For more about what JavaServer Faces means to the Struts community, see the StrutsMoreAboutJSF wiki page.

      Struts should work well with any development environment that you would like to use, as well as with any programmers editor. The members of the Struts development team each use their own tools such as Emacs, IDEA, Eclipse, and NetBeans.

      See the Howto Guides for more about configuring IDEs to work with Struts.

      Yes. send a blank message to < user-digest-subscribe@struts.apache.org>.

      If you are subscribed to the digest, you can also post to the list. Just be sure to send your post to the user list rather than trying to reply to the digest.

      Not a usenet group, but the Struts User list can be accessed with your favorite newsgroup reader from the GMane News Site. Subscribe to groups gmane.comp.jakarta.struts.devel for the developer list, or gmane.comp.jakarta.struts.user for the user list.

      You must be subscribed to the user list or user digest before posting (or use the GMane Newsgroups instead).

      From the email account used to subscribe to the list, send a blank message to < user-unsubscribe@struts.apache.org>.

      If you are receiving the digest, you must send a blank email to <user-unsubscribe@struts.apache.org> instead.

      libstruts1.2-java-1.2.9/doc/faqs/netbeans.xml0000644000175000017500000002454710404045244021515 0ustar arnaudarnaud00000000000000 James Mitchell How to setup a basic Struts project using Netbeans IDE - Apache Struts
      Please read this first.

      * DISCLAIMER - This simple How-To shows you one of many ways to setup a working project using
      the Struts framework. This is mainly geared toward struts users who are new to Netbeans, and
      don't want to spend a lot of time figuring out the differences between their old IDE (if any)
      and this one.

      I will also apologize ahead of time for the formatting of this page.


      In this How-To, I will demonstrate (using Netbeans 3.4) how to setup, compile, and build a customized version of the struts-example.
      1. Create a new project.















      2. Now let's create (or reuse) a directory to hold the project. What I did was copy the struts-example.war from the Struts distribution and extracted it (using Winzip) like this:



      3. Next we need to create a build.xml to build our project. This file will sit in the root
        directory of your project. (Actually, it doesn't matter where sits so long as you make
        the appropriate changes to directories and such.)

        *Note - I will not spend any time here trying to convince you why you should be
        using Ant to build your projects. I guess I consider this to be obvious.
        Here is the build.xml file I use for this demonstration (you MUST modify this
        to use your environment):
          
          <project name="Struts Example" default="main" basedir=".">
          
            <!--  This is a basic build script, only the minimums here -->
            
            <!-- Tell ant to use my environment variables -->
            <property environment="env"/>
          
            <property file="./build.properties"/>
          
              <property name="build.compiler"     value="modern"/>
              <property name="build.dir"          value="./WEB-INF/classes" />
              <property name="src.dir"            value="./WEB-INF/src"/>
            <property name="servlet.jar"        value="/Apache_Home/jakarta-servletapi-4/lib/servlet.jar"/>
              <property name="war.file"              value="struts-example"/>
              <property name="war.file.name"      value="${war.file}.war"/>
              <property name="tomcat.home"       value="${env.CATALINA_HOME}"/>
              <property name="deploy.dir"         value="${tomcat.home}/webapps"/>
          
            <path id="project.class.path">
                <fileset dir="./WEB-INF/lib/">
                    <include name="**/*.jar"/>
                </fileset>
                <pathelement path="${src.dir}"/>
                <pathelement path="${servlet.jar}"/>
            </path>
          
              <target name="clean">
                  <delete dir="${build.dir}" includeEmptyDirs="true" />
              </target>
          
          
              <target name="prep">
                  <mkdir dir="${build.dir}"/>
              </target>
          
              <target name="compile">
                <javac   srcdir="${src.dir}"
                            destdir="${build.dir}"
                            debug="on"
                        deprecation="on">
                  <include name="**/*.java"/>
                  <classpath refid="project.class.path"/>
                </javac>
              </target>
          
              <target name="cleanWebApp">
                <delete file="${deploy.dir}/${war.file.name}" />
                  <delete  dir="${deploy.dir}/${war.file}" includeEmptyDirs="true" />
              </target>
          
              <target name="war">
                  <war warfile="${war.file.name}" webxml="./WEB-INF/web.xml">
                         <fileset dir="./" includes="**/*.*" excludes="*.war, **/*.nbattrs, web.xml, **/WEB-INF/**/*.*, **/project-files/**/*.*"/>
                         <webinf  dir="./WEB-INF"    includes="**/*" excludes="web.xml, **/*.jar, **/*.class"/>
                         <lib     dir="./WEB-INF/lib"/>
                         <classes dir="${build.dir}" includes="**/*.properties" />
                  </war>
              </target>
          
              <target name="deploy">
                  <copy todir="${deploy.dir}">
                    <fileset dir="./" includes="${war.file.name}"/>
                  </copy>
              </target>
         
            <target name="main" depends="clean, prep, cleanWebApp, compile, war"/>
          
          </project>
          
          
      4. Build the project using Ant from the command line.
        Here's what I get:
          
          C:\personal\development\Projects\struts-examples\struts-example>ant
          Buildfile: build.xml
          
          clean:
             [delete] Deleting directory C:\personal\development\Projects\struts-examples\struts-example\WEB-INF\classes
          
          prep:
              [mkdir] Created dir: C:\personal\development\Projects\struts-examples\struts-example\WEB-INF\classes
          
          cleanWebApp:
             [delete] Deleting: C:\Apache_Home\jakarta-tomcat-4.0.6\webapps\struts-example.war
             [delete] Deleting directory C:\Apache_Home\jakarta-tomcat-4.0.6\webapps\struts-example
          
          compile:
              [javac] Compiling 22 source files to C:\personal\development\Projects\struts-examples\struts-example\WEB-INF\classes
              [javac] C:\personal\development\Projects\struts-examples\struts-example\WEB-INF\src\org\apache\struts\webapp\example\memory\MemoryDatabasePlugIn.java:78: warning: org.apache.struts.config.ApplicationConfig in org.apache.struts.config has been deprecated
              [javac] import org.apache.struts.config.ApplicationConfig;
              [javac]                                 ^
              [javac] C:\personal\development\Projects\struts-examples\struts-example\WEB-INF\src\org\apache\struts\webapp\example\memory\MemoryDatabasePlugIn.java:185: warning: org.apache.struts.config.ApplicationConfig in org.apache.struts.config has been deprecated
              [javac]     public void init(ActionServlet servlet, ApplicationConfig config)
              [javac]                                             ^
              [javac] C:\personal\development\Projects\struts-examples\struts-example\WEB-INF\src\org\apache\struts\webapp\example\memory\MemoryDatabasePlugIn.java:185: warning: init(org.apache.struts.action.ActionServlet,org.apache.struts.config.ApplicationConfig) in org.apache.struts.action.PlugIn has been deprecated
              [javac]     public void init(ActionServlet servlet, ApplicationConfig config)
              [javac]                 ^
              [javac] C:\personal\development\Projects\struts-examples\struts-example\WEB-INF\src\org\apache\struts\webapp\example\memory\MemoryDatabasePlugIn.java:185: warning: org.apache.struts.config.ApplicationConfig in org.apache.struts.config has been deprecated
              [javac]     public void init(ActionServlet servlet, ApplicationConfig config)
              [javac]                                             ^
              [javac] 4 warnings
          
          war:
                [war] Building war: C:\personal\development\Projects\struts-examples\struts-example\struts-example.war
          
          main:
          
          BUILD SUCCESSFUL
        Total time: 11 seconds
          

      5. If it did not build for you, verify that the external jars (external to this project) are specified correctly.
      6. Now we can finish setting up our Netbeans project

        Mount the directory where we extracted the example and where we ran the build:






      7. If specified correctly, Netbeans will parse the build.xml automatically and will use
        (mount jars) the resources that you've declared for building.



      8. I usually get rid of the additional mounted directory under /WEB-INF/classes.
        Since everything there gets overwritten with each build, I don't usually need to
        see this (or possibly make changes in the wrong place)



      9. In order for Netbeans to understand the package structure for our source code, we need
        to mount all source directories directly.

        *Note - Some IDEs will do this automatically
        (Eclipse) or can be configured from the project config file (JBuilder)






      10. Use your source mount point to add/edit/delete your .java files



      11. Using the initial mount point, expand until you can right-click on the build.xml file (or one
        of the targets) and build the project



      12. If you receive errors from Netbeans (choking on the XML parse), don't worry, I did too.
        I always call ant on the command line anyway, so I don't worry too much about the IDE's
        internal XML jars.




      13. Feel free to change the code as you like, and then build and deploy your new app.
      libstruts1.2-java-1.2.9/doc/faqs/newbie.xml0000644000175000017500000015375110404045226021167 0ustar arnaudarnaud00000000000000 Ted Husted James Holmes Craig R. McClanahan Edgar Dollin James Turner Phil Steitz Newbie FAQ - Apache Struts

      Here are answers to the most common questions people ask when using Struts on their first project. For an in-depth, searchable FAQ, visit our friends at JGuru.

      If you like to contribute, there is a list of undocumented questions at the end of this page.

      The problem with ReloadAction was that Struts was trying to act like a container, but it couldn't do a proper job of it. For example, you can't reload classes that have been modified, or (portably) add new classes to a running web application (even if the container supported it).

      Meanwhile, as Struts 1.1 was being developed, work progressed on things like Tomcat's reload command via the Manager webapp. This feature allows you to quickly reload-on-demand, complete with saving and restoring your session). It started to make even less sense for Struts to half-implement a feature that containers are implementing fully.

      A more minor point is that freezing the configuration information at application startup time allows Struts to safely access the mapping information without bothering with synchronization. The "startup-only" strategy creates a modest but real improvement in performance for all users.

      So, ReloadAction is not supported since Struts 1.1 for two reasons:

      • It never did let you reload everything that you would really want to -- particularly changed classes -- so many people ended up having to reload the webapp anyway.
      • Containers are starting to offer reload-on-demand features which does the same thing as the Struts ReloadAction, only better.
      • Not supporting ReloadAction lets Struts avoid doing synchronization locks around all the lookups (like figuring out which action to use, or the destination of an ActionForward) so applications can run a little faster.

      Of course, if someone came up with an implementation that solved these problems without creating any others, we would not be opposed to including a new ReloadAction.

      Since Struts 1.1, the framework supports multiple application modules. All applications have at least one root, or default, module. Like the root directory in a file system, the default application has no name. (Or is named with an empty string, depending your viewpoint.) Developing an application with only a default module is no different from how applications were developed under Struts 1.0. Since Struts 1.1, you can add additional modules to your application, each of which can have their own configuration files, messages resources, and so forth. Each module is developed in the same way as the default module. Applications that were developed as a single module can added to a multiple module application, and modules can promoted to a standalone application without change. For more about configuring your application to support multiple modules, see Configuring Applications in the User Guide.

      But to answer the question =:0), a modular application is a Struts application that uses more than one module. Module-relative means that the URI starts at the module level, rather than at the context level, or the absolute-URL level.

      • Absolute URL: http://localhost/myApplication/myModule/myAction.do
      • context-relative: /myModule/myAction.do
      • module-relative: /myAction.do

      The Struts Examples application is a modular application that was assembled from several applications that were created independently.

      The framework grew in the telling and, as it evolved, some of the names drifted.

      The good thing about a nightly build, is that everything becomes available to the community as soon as it is written. The bad thing about a nightly build is that things like class names get locked down early and then become difficult to change.

      http://www.mail-archive.com/struts-user@jakarta.apache.org/msg19281.html
      http://www.mail-archive.com/struts-user@jakarta.apache.org/msg19338.html
      http://www.mail-archive.com/struts-user@jakarta.apache.org/msg20833.html

      The MVC design pattern is very simple to understand but much more difficult to live with. You just need this little bit of Business Logic in the View logic or you need just that little bit of View logic in the Business tier and pretty soon you have a real mess.

      Making ActionForm a class takes advantage of the single inheritance restriction of Java to it makes it more difficult for people to do things that they should not do.

      ActionForms implemented as interfaces encourage making the property types match the underlying business tier instead of Strings, which violates one of the primary purposes for ActionForms in the first place (the ability to reproduce invalid input, which is a fundamental user expectation). ActionForms as an interface would also encourage using existing DAO objects as ActionForms by adding ‘implements ActionForm’ to the class. This violates the MVC design pattern goal of separation of the view and business logic.

      Since the goal of struts is to enforce this separation, it just makes more sense for Struts to own the ActionForm.

      DynaActionForms relieve developers of maintaining simple ActionForms. For near zero maintenance, try Niall Pemberton's LazyActionForm

      The utilities that Struts uses (Commons-BeanUtils since 1.1) require that ActionForm properties follow the JavaBean patterns for mutators and accessors (get*,set*,is*). Since Struts uses the Introspection API with the ActionForms, some containers may require that all the JavaBean patterns be followed, including declaring "implements Serializable" for each subclass. The safest thing is to review the JavaBean specification and follow all the prescribed patterns.

      Since Struts 1.1, you can also use DynaActionForms and mapped-backed forms, which are not true JavaBeans. For more see ActionForm classes in the User Guide and Using Hashmaps with ActionForms in this FAQ.

      Yes. Define the element as an array and Struts will autopopulate it like any other.

      
      private String[] id= {};
      public String[] getId() { return this.id; }
      public void setItem(String id[]) {this.id = id;}
      
      

      And so forth

      Yes. The issue is that only one action class can be associated with a single form. So the real issue is how do I decode multiple submit types to a single Action class. There is more than one way to achieve this functionality.

      The way that is suggested by struts is right out of the javadoc for LookupDispatchAction. Basically, LookupDispatchAction is using the keys from ApplicationProperties.resources as keys to a map of actions available to your Action class. It uses reflection to decode the request and invoke the proper action. It also takes advantage of the struts <html:submit> tags and is straight forward to implement.

      You can roll your own with JavaScript events and javascript:void (document.forms["myform"].submit) on any html element. This gives you control of how you want your page to look. Again you will have to decode the expected action in the execute method of your action form if you choose this route.

      Unfortunately, there is some disagreement between the various browsers, and different versions of the same browser, as to how the focus can be set. The <html:form> tag provides a quick and easy JavaScript that will set the focus on a form for most versions of most browsers. If this feature doesn't work for you, then you should set the focus using your own JavaScript. The focus feature is a convenient "value-add" -- not a core requirement of the tag. If you do come up with a JavaScript that provides the final solution to this project, please post your patch to this Bugzilla ticket.

      A problem with a checkbox is that the browser will only include it in the request when it is checked. If it is not checked, the HTML specification suggests that it not be sent (i.e. omitted from the request). If the value of the checkbox is being persisted, either in a session bean or in the model, a checked box can never unchecked by a HTML form -- because the form can never send a signal to uncheck the box. The application must somehow ascertain that since the element was not sent that the corresponding value is unchecked.

      The recommended approach for Struts applications is to use the reset method in the ActionForm to set all properties represented by checkboxes to null or false. The checked boxes submitted by the form will then set those properties to true. The omitted properties will remain false. Another solution is to use radio buttons instead, which always submit a value.

      It is important to note that the HTML specification recommends this same behavior whenever a control is not "successful". Any blank element in a HTML form is not guaranteed to submitted. It is therefor very important to set the default values for an ActionForm correctly, and to implement the reset method when the ActionForm might kept in session scope.

      You can submit a form with a link as below. BTW, the examples below assume you are in an <html:form> block and 'myForm' is picked up from the struts-config.xml name field of the action.

      
          <a href='javascript:void(document.forms["myForm"].submit()>My Link</a>
      

      Now the trick in the action is to decode what action you intend to perform. Since you are using JavaScript, you could set a field value and look for it in the request or in the form.

      ... html/javascript part ...

      
              <input type='hidden' value='myAction' />
              <input type='button' value='Save Meeeee'
                  onclick='document.forms["myForm"].myAction.value="save";
                           document.forms["myForm"].submit();' />
              <input type='button' value='Delete Meeeee'
                  onclick='document.forms["myForm"].myAction.value="delete";
                           document.forms["myForm"].submit();' />
      

      ... the java part ...

      
              class MyAction extends ActionForm implements Serializable {
      
                  public ActionForward execute (ActionMapping map, ActionForm form,
                      HttpServletRequest req, HttpServletResponse) {
      
                          String myAction = req.getParameter("myAction");
      
                          if (myAction.equals("save") {
                                 // ...  save action  ...
                          } else if (myAction.equals("delete") {
                                 // ...  delete action  ...
                          }
                      }
                  }
              }
      

      This is just one of many ways to achieve submitting a form and decoding the intended action. Once you get used to the framework you will find other ways that make more sense for your coding style and requirements. Just remember this example is completely non-functional without JavaScript.

      Here is a link which utilizes the LookupDispatch action to submit forms with multiple actions without javascript: http://husted.com/struts/tips/003.html

      Struts is mainly a server-side technology. We bundled in some JSP tags to expose the framework components to your presentation page, but past that, the usual development process applies.

      Interactive pages require the use of JavaScript. (That's why it was invented.) If you want things popping up or doing this when they click that, you are outside the scope of Struts and back into the web development mainstream.

      You use JavaScript with Struts the same way you use with any presentation page. Since JavaScript is a client-side technology, you can use simple relative references to your scripts. If you need to fire a JavaScript from a HTML control, the Struts HTML tags have properties for the JavaScript events.

      A very good JavaScript resource is Matt Kruse's site at http://www.mattkruse.com/javascript/

      No. You need to set checkbox properties to false if the ActionForm is being retained in session scope. This is because an unchecked box does not submit an attribute. Only checked boxes submit attributes. If the form is in session scope, and the checkbox was checked, there is no way to turn it back off without the reset method. Resetting the properties for other controls, or for a request scope form, is pointless. If the form is in request scope, everything already just started at the initial value.

      Struts is designed to encourage a Model 2/MVC architecture. But there is nothing that prevents you from using Model 1 techniques in your JavaServer Pages, so the answer to the question is "Yes, you can".

      Though, using Model 1 techniques in a Struts application does go against the grain. The approach recommended by most Struts developers is to create and populate whatever objects the view may need in the Action, and then forward these through the request. Some objects may also be created and stored in the session or context, depending on how they are used.

      Likewise, there is nothing to prevent you from using scriptlets along with JSP tags in your pages. Though, many Struts developers report writing very complex scriplet-free applications and recommend the JSP tag approach to others.

      For help with Model 1 techniques and scriptlets, you might consider joining the Javasoft JSP-interest mailing list, where there are more people still using these approaches.

      Yes. There are several ways that you can use other beans or hashmaps with ActionForms.

      • ActionForms can have other beansor hashmaps as properties
      • "Value Beans" or "Data Transfer Objects" (DTOs) can be used independently of ActionForms to transfer data to the view
      • ActionForms can use Maps to support "dynamic" properties (since Struts 1.1)

      ActionForms (a.k.a. "form beans") are really just Java beans (with a few special methods) that Struts creates and puts into session or request scope for you. There is nothing preventing you from using other beans, or including them in your form beans. Here are some examples:

      Collections as properties Suppose that you need to display a pulldown list of available colors on an input form in your application. You can include a string-valued colorSelected property in your ActionForm to represent the user's selection and a colorOptions property implemented as a Collection (of strings) to store the available color choices. Assuming that you have defined the getters and setters for the colorSelected and colorOptions properties in your orderEntryForm form bean, you can render the pulldown list using:

      
          <html:select property="colorSelected">
            <html:options property="colorOptions" name="orderEntryForm"/>
          </html:select>
          

      The list will be populated using the strings in the colorOptions collection of the orderEntryForm and the value that the user selects will go into the colorSelected property that gets posted to the subsequent Action. Note that we are assuming here that the colorOptions property of the orderEntryForm has already been set.

      See How can I prepopulate a form? for instructions on how to set form bean properties before rendering edit forms that expect properties to be pre-set.

      Independent DTO An Action that retrieves a list of open orders (as an ArrayList of Order objects) can use a DTO independently of any form bean to transfer search results to the view. First, the Action's execute method performs the search and puts the DTO into the request:

      
          ArrayList results = businessObject.executeSearch(searchParameters);
          request.setAttribute("searchResults",results);
          

      Then the view can iterate through the results using the "searchResults" request key to reference the DTO: `

      
          <logic:iterate id="order" name="searchResults" type="com.foo.bar.Order">
              <tr><td><bean:write name="order" property="orderNumber"/><td>
                  <td>..other properties...</td></tr>
          </logic:iterate>
          

      See also: Map-Backed ActionForms (since Struts 1.1)

      The Struts tags seem to provide only the most rudimentary functionality. Why is there not better support for date formatting and advanced string handling?

      Three reasons:

      First, work started on the JSTL and we didn't want to duplicate the effort.

      Second, work started on Java Server Faces, and we didn't want to duplicate that effort either.

      Third, in a Model 2 application, most of the formatting can be handled in the ActionForms (or in the business tier), so all the tag has to do is spit out a string. This leads to better reuse since the same "how to format" code does not need to be repeated in every instance. You can "say it once" in a JavaBean and be done with it.

      Since the Struts tags are open source, you can extend them to provide whatever additional formatting you may need. If you are interested in a pre-written taglib that offers more layout options, see the struts-layout taglib.

      In the same arena, there is a well regarded contributor taglib that can help you create Menus for your Struts applications.

      The <html:link> tag is not intended for use with client-side references like those used to launch Javascripts or email clients. The purpose of link tag is to interject the context (or module) path into the URI so that your server-side links are not dependent on your context (or module) name. It also encodes the link, as needed, to maintain the client's session on the server. Neither feature applies to client-side links, so there is no reason to use the <html:link> tag. Simply markup the client-side links using the standard tag.

      http://www.mail-archive.com/struts-user@jakarta.apache.org/msg24504.html
      http://www.mail-archive.com/struts-user@jakarta.apache.org/msg22949.html

      Many Struts developers use the Pager from the JSPTags site.

      http://jsptags.com/tags/navigation/pager/

      Attribute minimization (that is, specifying an attribute with no value) is a place where HTML violates standard XML syntax rules. This matters a lot for people writing to browsers that support XHTML, where doing so makes the page invalid.It's much better for Struts to use the expanded syntax, which works the same on existing browsers interpreting HTML, and newer browsers that expect XHTML-compliant syntax. Struts is following the behavior recommended by the XHTML specification

      The short answer to this question is: No, you are not limited to JavaServer Pages.

      The longer answer is that you can use any type of presentation technology which can be returned by a web server or Java container. The list includes but is not limited to:

      • JavaServer Pages,
      • HTML pages,
      • WML files,
      • Java servlets,
      • Velocity templates, and
      • XML/XLST

      Some people even mix and match apparently unrelated technologies, like PHP, into the same web application.

      ActionForms are added to a servlet scope (session or request) as beans. What this means is that, for certain functionality to be available, your ActionForms will have to follow a few simple rules.

      First, your ActionForm bean must have a zero-arguments constructor. This is required because Struts must be able to dynamically create new instances of your form bean class, while knowing only the class name. This is not an onerous restriction, however, because Struts will also populate your form bean's properties (from the request parameters) for you.

      Second, the fields of your form bean are made available to the framework by supplying public getter and setter methods that follow the naming design patterns described in the JavaBeans Specification. For most users, that means using the following idiom for each of your form bean's properties:

              private {type} fieldName;
      
              public {type} getFieldName() {
                  return (this.fieldName);
              }
      
              public void setFieldName({type} fieldName) {
                  this.fieldName = fieldName;
              }
          

      NOTE - you MUST obey the capitalization conventions shown above for your ActionForm properties to be recognized. The property name in this example is "fieldName", and that must also be the name of the input field that corresponds to this property. A bean property may have a "getter" method and a "setter" method (in a form bean, it is typical to have both) whose name starts with "get" or "set", followed by the property name with the first character capitalized. (For boolean properties, it is also legal to use "is" instead of "get" as the prefix for the getter method.)

      Advanced JavaBeans users will know that you can tell the system you want to use different names for the getter and setter methods, by using a java.beans.BeanInfo class associated with your form bean. Normally, however, it is much more convenient to follow the standard conventions.

      WARNING - developers might be tempted to use one of the following techniques, but any of them will cause your property not to be recognized by the JavaBeans introspection facilities, and therefore cause your applications to misbehave:

      • Using getter and setter method names that do not match - if you have a getFoo() method for your getter, but a setBar() method for your setter, Java will not recognize these methods as referring to the same property. Instead, the language will think you have a read-only property named "foo" and a write-only property named "bar".
      • Using more than one setter method with the same name - The Java language lets you "overload" methods, as long as the argument types are different. For example, you could have a setStartDate(java.util.Date date) method and a setStartDate(String date) method in the same class, and the compiled code would know which method to call based on the parameter type being passed. However, doing this for form bean properties will prevent Java from recognizing that you have a "startDate" property at all.

      There are other rules to follow if you want other features of your form beans to be exposed. These include indexed attributes and mapped attributes. They are covered in detail in other areas of the Struts documentation, in particular:

      indexedprops.html

      For a complete explanation of what a JavaBean is, and everything it can do, see the JavaBeans Specification (version 1.01) at:

      http://java.sun.com/products/javabeans/docs/beans.101.pdf

      This is an interesting question. As a newbie, it is a good practice to create a new ActionForm for each action sequence. You can use DynaActionForms to help reduce the effort required, or use the code generation facilities of your IDE.

      Some issues to keep in mind regarding reuse of form beans are as follows:

      • Validation - You might need to use different validation rules depending upon the action that is currently being executed.
      • Persistence - Be careful that a form populated in one action is not unexpectedly reused in a different action. Multiple <form-bean> entries in struts-config.xml for the same ActionForm subclass can help (especially if you store your form beans in session scope). Alternatively, storing form beans in request scope can avoid unexpected interactions (as well as reduce the memory footprint of your application, because no server-side objects will need to be saved in between requests.
      • Checkboxes - If you do as recommended and reset your boolean properties (for fields presented as checkboxes), and the page you are currently displaying does not have a checkbox for every boolean property on the form bean, the undisplayed boolean properties will always appear to have a false value.
      • Workflow - The most common need for form bean reuse is workflow. Out of the box, Struts has limited support for workflow, but a common pattern is to use a single form bean with all of the properties for all of the pages of a workflow. You will need a good understanding of the environment (ActionForms, Actions, etc.) prior to being able to put together a smooth workflow environment using a single form bean.

      As you get more comfortable, there are a few shortcuts you can take in order to reuse your ActionForm beans. Most of these shortcuts depend on how you have chosen to implement your Action / ActionForm combinations.

      The simplest way to prepopulate a form is to have an Action whose sole purpose is to populate an ActionForm and forward to the servlet or JSP to render that form back to the client. A separate Action would then be use to process the submitted form fields, by declaring an instance of the same form bean name.

      The struts-example example application that is shipped with Struts illustrates this design pattern nicely. Note the following definitions from the struts-config.xml file:

              ...
              <form-beans>
                  ...
                  <-- Registration form bean -->
                  <form-bean name="registrationForm"
                             type="org.apache.struts.webapp.example.RegistrationForm"/>
                  ...
              </form-beans>
              ...
              <action-mappings>
                  ...
                  <-- Edit user registration -->
                  <action path="/editRegistration"
                          type="org.apache.struts.webapp.example.EditRegistrationAction"
                          name="registrationForm"
                         scope="request"
                      validate="false"/>
                  ...
                  <-- Save user registration -->
                  <action path="/saveRegistration"
                          type="org.apache.struts.webapp.example.SaveRegistrationAction"
                          name="registrationForm"
                         input="registration"
                         scope="request"/>
                  ...
              </action-mappings>
          

      Note the following features of this approach:

      • Both the /editRegistration and /saveRegistration actions use the same form bean.
      • When the /editRegistration action is entered, Struts will have pre-created an empty form bean instance, and passed it to the execute() method. The setup action is free to preconfigure the values that will be displayed when the form is rendered, simply by setting the corresponding form bean properties.
      • When the setup action completes configuring the properties of the form bean, it should return an ActionForm that points at the page which will display this form. If you are using the Struts JSP tag library, the action attribute on your <html:form> tag will be set to /saveRegistration in order for the form to be submitted to the processing action.
      • Note that the setup action (/editRegistration) turns off validation on the form that is being set up. You will normally want to include this attribute in the configuration of your setup actions, because you are not planning to actually process the results -- you simply want to take advantage of the fact that Struts will precreate a form bean instance of the correct class for you.
      • The processing action (/saveRegistration), on the other hand, leaves out the validate attribute, which defaults to true. This tells Struts to perform the validations associated with this form bean before invoking the processing action at all. If any validation errors have occurred, Struts will forward back to your input page (technically, it forwards back to an ActionForward named "registration" in this case, because the example webapp uses the inputForward attribute in the <controller> element -- see the documentation describing struts-config.xml for more information) instead of calling your processing action.

      Yes. If your Action does not need any data and it does not need to make any data available to the view or controller component that it forwards to, it doesn't need a form. A good example of an Action with no ActionForm is the LogoffAction in the struts example application:

          <action path="/logoff"
              type="org.apache.struts.webapp.example.LogoffAction">
            <forward name="success" path="/index.jsp"/>
          </action>
      

      This action needs no data other than the user's session, which it can get from the Request, and it doesn't need to prepare any view elements for display, so it does not need a form.

      However, you cannot use the <html:form> tag without an ActionForm. Even if you want to use the <html:form> tag with a simple Action that does not require input, the tag will expect you to use some type of ActionForm, even if it is an empty subclass without any properties.

      First off, there's an even newer Validator rule called validwhen, which is almost certainly what you want to use, since it is much easier and more powerful. It will be available in the first release after 1.1 ships. The example shown below could be coded with validwhen as:

      <form name="medicalStatusForm">
      
      <field
          property="pregnancyTest" depends="validwhen">
        <arg0 key="medicalStatusForm.pregnancyTest.label"/>
        <var>
          <var-name>test</var-name>
          <var-value>((((sex == 'm') OR (sex == 'M')) AND (*this* == null)) OR (*this* != null))</test>
        </var>
      </field>
      

      Let's assume you have a medical information form with three fields, sex, pregnancyTest, and testResult. If sex is 'f' or 'F', pregnancyTest is required. If pregnancyTest is not blank, testResult is required. The entry in your validation.xml file would look like this:

      <form name="medicalStatusForm">
      
      <field
          property="pregnancyTest" depends="requiredif">
        <arg0 key="medicalStatusForm.pregnancyTest.label"/>
        <var>
          <var-name>field[0]</var-name>
          <var-value>sex</var-value>
        </var>
        <var>
          <var-name>fieldTest[0]</var-name>
          <var-value>EQUAL</var-value>
        </var>
        <var>
          <var-name>fieldValue[0]</var-name>
          <var-value>F</var-value>
        </var>
        <var>
          <var-name>field[1]</var-name>
          <var-value>sex</var-value>
        </var>
        <var>
          <var-name>fieldTest[1]</var-name>
          <var-value>EQUAL</var-value>
        </var>
        <var>
          <var-name>fieldValue[1]</var-name>
          <var-value>f</var-value>
        </var>
        <var>
          <var-name>fieldJoin</var-name>
          <var-value>OR</var-value>
        </var>
      </field>
      
      <field
          property="testResult" depends="requiredif">
        <arg0 key="medicalStatusForm.testResult.label"/>
        <var>
          <var-name>field[0]</var-name>
          <var-value>pregnancyTest</var-value>
        </var>
        <var>
          <var-name>fieldTest[0]</var-name>
          <var-value>NOTNULL</var-value>
        </var>
      </field>
      </form>
      

      This is an excellent question. Let's step back a second and think about a typical mid to large size application. If we start from the back end and work toward the view we have:

      1) Database: Most modern databases are going to validate for required fields, duplicate records, security constraints, etc.

      2) Business Logic: Here you are going to check for valid data relationships and things that make sense for the particular problem you are triing to solve.

      ... This is where struts comes into the picture, by now the system should be pretty well bulletproof. What we are going to do is make validation friendlier and informative. Rember it is OK to have duplicate validations...

      3) ActionErrors validate(ActionMapping map, HttpServletRequest req) is where you can do your validation and feed back to the view, information required to correct any errors. validate is run after the form has been reset and after the ActionForm properties have been set from corresponding view based input. Also remember you can turn validation off with validate="false" in the action mapping in the struts-config.xml. This is done by returning an ActionErrors collection with messages from your ApplicationResources.properties file.

      Here you have access to the request so you can see what kinds of action is being requested to fine tune your validations. The <html:error> tag allows you to dump all errors on your page or a particular error associated with a particular property. The input attribute of the struts-config.xml action allows you to send validation errors to a particular jsp / html / tile page.

      4) You can have the system perform low level validations and client side feedback using a ValidatorForm or its derivatives. This will generate javascript and give instant feedback to the user for simple data entry errors. You code your validations in the validator-rules.xml file. A working knowledge of regular expressions is necessary to use this feature effectively. For more information, see User Guide

      The simplest way is to have two actions. The first one has the job of setting the form data, i.e. a blank registration screen. The second action in our writes the registration data to the database. Struts would take care of invoking the validation and returning the user to the correct screen if validation was not complete.

      The EditRegistration action in the struts example application illustrates this:

      
          <action path="/editRegistration"
               type="org.apache.struts.webapp.example.EditRegistrationAction"
               attribute="registrationForm"
               scope="request"
               validate="false">
            <forward name="success  path="/registration.jsp"/>
          </action>
              

      When the /editRegistration action is invoked, a registrationForm is created and added to the request, but its validate method is not called. The default value of the validate attribute is true, so if you do not want an action to trigger form validation, you need to remember to add this attribute and set it to false.

      The basic idea is a series of actions with next, back, cancel and finish actions with a common bean. Using a LookupDispatchAction is reccomended as it fits the design pattern well and can be internationalized easily. Since the bean is shared, each choice made will add data to the wizards base of information. A sample of struts-config.xml follows:

      
                  <form-beans>
                      <form-bean  name="MyWizard"
                                  type="forms.MyWizard" />
                  </form-beans>
      
              <!-- the first screen of the wizard (next action only available) -->
              <!-- no validation, since the finish action is not available -->
                  <actions>
                      <action path="/mywizard1"
                              type="actions.MyWizard"
                              name="MyWizard"
                              validate="false"
                              input="/WEB-INF/jsp/mywizard1.jsp">
                          <forward name="next"
                              path="/WEB-INF/jsp/mywizard2.jsp" />
                          <forward name="cancel"
                              path="/WEB-INF/jsp/mywizardcancel.jsp" />
                      </action>
      
                      <!-- the second screen of the wizard (back, next and finish) -->
                      <!-- since finish action is available, bean should validated, note
              validation should not necessarily validate if back action requested, you
              might delay validation or do conditional validation -->
                      <action path="/mywizard2"
                              type="actions.MyWizard"
                              name="MyWizard"
                              validate="true"
                              input="/WEB-INF/jsp/mywizard2.jsp">
                          <forward name="back"
                              path="/WEB-INF/jsp/mywizard1.jsp" />
                          <forward name="next"
                              path="/WEB-INF/jsp/mywizard3.jsp" />
                          <forward name="finish"
                              path="/WEB-INF/jsp/mywizarddone.jsp" />
                          <forward name="cancel"
                              path="/WEB-INF/jsp/mywizardcancel.jsp" />
                      </action>
      
                      <!-- the last screen of the wizard (back, finish and cancel only) -->
                      <action path="/mywizard3"
                              type="actions.MyWizard"
                              name="MyWizard"
                              validate="true"
                              input="/WEB-INF/jsp/mywizard3.jsp">
                          <forward name="back"
                              path="/WEB-INF/jsp/mywizard2.jsp" />
                          <forward name="finish"
                              path="/WEB-INF/jsp/mywizarddone.jsp" />
                          <forward name="cancel"
                              path="/WEB-INF/jsp/mywizardcancel.jsp" />
                      </action>
          

      The pieces of the wizard are as follows:

      forms.MyWizard.java - the form bean holding the information required

      actions.MyWizard.java - the actions of the wizard, note the use of LookupDispatchAction allows for one action class with several methods. All the real work will be done in the 'finish' method.

      mywizard[x].jsp - the data collection jsp's

      mywizarddone.jsp - the 'success' page

      mywizardcancel.jsp - the 'cancel' page

      Chaining actions can be done by simply using the proper mapping in your forward entries in the struts-config.xml file. Assume you had the following two classes:

      Then you can chain together these two actions with the Struts configuration as shown in the following excerpt:

      
             
                
             
             
                
             
          
          ...
          ]]>

      Here we are assuming you are using a suffix-based (.do) servlet mapping, which is recommended since module support requires it. When you send your browser to the web application and name the action A.do (i.e. http://localhost:8080/app/A.do) it will execute AAction.execute(), which will then forward to the "success" mapping.

      This causes the execution of BAction.execute() since the <forward> entry for "success" in the configuration file uses the .do suffix.

      Of course it is also possible to chain actions programmatically, but the power and ease of being able to "reroute" your web application's structure using the XML configuration file is much easier to maintain.

      As a rule, chaining Actions is not recommended. If your business classes are properly factored, you should be able to call whatever methods you need from any Action, without splicing them together into a cybernetic Rube Goldberg device.

      If you must chain Actions, be aware of the following: calling the second Action from the first Action has the same effect as calling the second Action from scratch. If both of your Actions change the properties of a formbean, the changes made by the first Action will be lost because Struts calls the reset() method on the formbean when the second Action is called.

      • How can I capture binary or formatted values, like dates or telephone numbers?
      • Why do my option lists disappear when validation fails?
      • Why can't I disable URL-encoding in the Struts taglibs?
      • Can I create dynamic ActionForwards?
      • How can I use my own (ActionForm, ActionForward, ActionMapping, ActionServlet) class?
      libstruts1.2-java-1.2.9/doc/faqs/project.xml0000644000175000017500000000311110404045206021342 0ustar arnaudarnaud00000000000000 Apache Struts Web Application Framework libstruts1.2-java-1.2.9/doc/faqs/ssl.xml0000644000175000017500000001420010404045212020473 0ustar arnaudarnaud00000000000000 Steve Ditlinger Secure Socket Layer and Web Applications - Apache Struts

      Many web applications, especially those deployed for e-commerce, necessitate the transmission of sensitive data between the web server and the client browser. This data may include passwords, credit card numbers, bank account numbers or any other information that users would not want to divulge to the general public. To protect sensitive data during transmission, application developers typically use the Secure Sockets Layer (SSL) and its companion protocol, HTTP over Secure Sockets Layer (HTTPS). HTTPS employs SSL to protect data by encrypting it at the source, be it the server or the client, and decrypting it at the destination. This prevents anyone monitoring Internet data transmissions from easily capturing this data. The client and server exchange public keys to enable encryption and decryption to occur.

      The encryption/decryption process comes at a performance price, however. The throughput of data for a web server transmitting via HTTPS is often as little as one-tenth that of data transmission via HTTP. For this reason, it is undesirable to deploy an entire web application under SSL. For fastest performance, it is best to deploy a web application under HTTP and employ HTTPS only for those pages and processes that transmit sensitive data.

      Switching back and forth between the two protocols can require hard-coding the protocol and full URL in every link to each resource in the web application. This creates an ongoing maintenance headache for developers each time a server name changes or secure protocol requirements change for resources in the web app.

      Another significant hazard is that there is nothing to prevent a user from specifying the wrong protocol by manually entering a URL into the browser. The penalty for manually specifying HTTPS for a page or servlet that does not require HTTPS is reduced performance. Far worse is the penalty for manually specifying HTTP for non-secure access of a page that does require HTTPS: public exposure of sensitive data.

      To help overcome the problem of non-secure access of sensitive data, the Java Servlet Specification (versions 2.2 and 2.3) defines the transport-guarantee element of the web.xml deployment descriptor file. The transport-guarantee element must specify one of three types of protection for communication between client and server: NONE, INTEGRAL, or CONFIDENTIAL. For most containers a specification of INTEGRAL or CONFIDENTIAL is treated as a requirement for SSL usage. Web application containers will prevent users from accessing web resources over HTTP if they have been so specified.

      The implementation for blocking HTTP access to web resources specified as INTEGRAL or CONFIDENTIAL varies from container to container. If a user attempts to access such a resource over HTTP, some containers will present that user with an error message instructing them to use the HTTPS protocol for accessing the requested resource. Other containers will actually redirect the request using the HTTPS protocol, but then continue using the HTTPS protocol for all subsequent requests, even those for resources with a transport-guarantee specification of NONE.

      An extension to Struts 1.1, named sslext, helps solve many of these issues for Struts developers. It extends the ActionConfig class, RequestProcessor, and Plugin classes to define a framework where developers may specify the transmission protocol behavior for Struts applications. Within the Struts configuration file, developers specify which action requests require HTTPS transmission and which should use HTTP. Developers can also specify whether to redirect "improperly-protocoled" requests to the correct protocol.

      In addition to these extensions, the <html:link> and the <html:form> tags have been extended. In these extensions, the Struts actions specified in either of these tags are analyzed to determine the protocol that should be used in requesting that action. The HTML generated by these tags will specify the proper protocol. An additional custom tag is defined for allowing users to specify the transmission protocol for an individual JSP. This is most often used for form-based authentication pages.

      The sslext library may be obtained from http://sslext.sourceforge.net

      One additional complication faced by developers of web applications is that some browsers (e.g. pre-6.0 versions of Netscape Navigator) will treat requests to different protocols and ports on the same server as requests to different domains. This causes these browsers to initiate a new session each time a different protocol or port is specified in a request. This problem can only be solved at the container level. Some containers have a "session domain" or "cookie domain" configuration parameter to allow the session to be shared across different servers in the same domain. As an example, the Weblogic Server has a "CookieDomain" property configured in its weblogic.xml deployment descriptor. Thankfully, the effects of this problem are diminishing as people upgrade their browsers to the current versions.

      The procedure for configuring SSL for a container will be specific to that container. The procedure for enabling SSL for Tomcat can be found here.
      libstruts1.2-java-1.2.9/doc/faqs/struts-el.xml0000644000175000017500000001214010404045206021640 0ustar arnaudarnaud00000000000000 David Karr Struts EL Extension - Apache Struts

      This subproject is an extension of the Struts tag library. Each JSP custom tag in this library is a subclass of an associated tag in the Struts tag library. One difference is that this tag library does not use "rtexprvalues", it uses the expression evaluation engine in the Jakarta Taglibs implementation of the JSP Standard Tag Library (version 1.0) to evaluate attribute values.

      In addition, some of the Struts tags were not ported to this library, as it was determined that their functionality was entirely supplied by the JSTL. These particular Struts tags, and the reason for their non-porting will be described in the documentation for this library.

      In order to fully understand the correct utilization of this library, you must understand the use and operation of the Struts tag library, and the use and operation of the JavaServer Pages Standard Tag Library (hereafter called the "JSTL"), along with the expression language (sometimes called the "EL") used for evaluating attribute values.

      In implementing the Struts-EL library, every Struts tag that provides a feature that is not covered by the JSTL (1.0) library is mapped into the Struts-EL library. This section reviews which Struts tags are NOT implemented in the Struts-EL library, and which JSTL tags provide that feature.

      Many of the non-porting decisions were based on the fact that the JSTL expression language itself provides the same functionality. In those cases, in addition to a possible JSTL tag name, the symbol "EL" will be listed.

      Bean Tag Library Tags NOT Implemented in Struts-EL

      Struts TagJSTL Tag
      cookiec:set, EL
      definec:set, EL
      headerc:set, EL
      includec:import
      parameterc:set, EL
      write c:out

      Bean Tag Library Tags NOT Implemented in Struts-EL

      Struts TagJSTL Tag
      emptyc:if, c:when, EL
      equalc:if, c:when, EL
      greaterEqualc:if, c:when, EL
      greaterThanc:if, c:when, EL
      lessEqualc:if, c:when, EL
      lessThanc:if, c:when, EL
      notEmptyc:if, c:when, EL
      notEqualc:if, c:when, EL

      (Note that the "iterate" tag was originally ported, even with the presence of the "c:forEach" tag, as the "indexed tag" functionality was not supported when using "c:forEach" instead of "logic:iterate". This has since been rectified, such that the "indexed tag" functionality checks for being contained in a "c:forEach" tag, in addition to the "logic:iterate" tag. However, the ported "iterate" tag has not been removed from Struts-EL, for backward compatibility.)

      Html Tag Library Tags NOT Implemented in Struts-EL

      None (all of them were ported).

      At this point of the implementation, there is only one change (to two similar tags) to the set of attributes between the Struts tags, and the Struts-EL tags. The "logic:match" and "logic:notMatch" tags have an additional attribute named "expr", which can take any value, and will be used as the value to compare against, in addition to the choices of "cookie", "header", "name"/"property", and "parameter".

      The Struts-EL tag library requires the use of the Struts tag library, and the Java Server Pages Standard Tag Library. It is not necessary for JSP pages using the Struts-EL tag library to also use the Struts tags or the JSTL tags, but the Struts and JSTL tag libraries need to be part of the application utilizing the Struts-EL tag library.

      This is because the Struts-EL tag classes are all subclasses of Struts tag classes, and their implementation uses classes provided by the JSTL.

      libstruts1.2-java-1.2.9/doc/faqs/works.xml0000644000175000017500000002107110404045210021041 0ustar arnaudarnaud00000000000000 Anthony Kay How Does Struts Work? - Apache Struts

      Java Servlets are designed to handle requests made by Web browsers. Java ServerPages are designed to create dynamic Web pages that can turn billboard sites into live applications. Struts uses a special Servlet as a switchboard to route requests from Web browsers to the appropriate ServerPage. This makes Web applications much easier to design, create, and maintain.

      Here is some more detail on the mechanisms and dependencies of Struts:

      • The web application that you develop has a deployment descriptor (WEB-INF/web.xml) which you must write. This file describes the configuration of your web application, including welcome pages (the file that is shown in a directory when none is specified by the request), mappings to servlets (path or extension name), and parameters to those servlets.
        In this file, you configure the Struts ActionServlet as the servlet that will handle all requests for a given mapping (usually the extension .do). This is the "switchboard" mentioned above.
        In this same file, you configure the ActionServlet to use one or more configuration files for Struts itself.
        For this text, assume we are installing the web application on the server at /myapp, and are using the simplest possible configuration from there.
        If you need more details on deployment descriptors, read the Servlet Specification available from Sun Microsystem's Java site.
      • In the Struts configuration file(s), you associate paths with the controller components of your application, known as Action classes (i.e. "login" ==> LoginAction class). This tells the Struts ActionServlet that when the incoming request is http://myhost/myapp/login.do it should invoke your controller component LoginAction.
        Note the extension .do in this URL. The extension causes your container (i.e. Tomcat) to call the ActionServlet, which sees the word "login" as the thing you want to do. The configuration is referenced, and your LoginAction is executed.
      • For each Action, you also configure Struts with the names of the resulting page(s) that can be shown as a result of that action. There can be more than one view as the result of an action (often, there are at least two: one for success, and one for failure).
        Your Action (the controller component you write) is based on these logical result mapping names. It reports back to the ActionServlet using words like "success", "failure", "ready", "ok", "UserIsIncompetent", etc. The Struts system (through the configuration that you wrote) knows how to forward to the proper specific page. This has the added advantage of reconfiguration of the view layer by simply editing the Struts XML configuration file.
        At this point Struts knows how to delegate to your controller components, and what to show as a result of your controller processing. The "model" part of the application is completely up to you, and is called from within your controller components.
      • You may also associate a Java Bean with an action (or set of actions) in the Struts configuration file. The Java Bean is used as a repository for form or display data that can be communicated between the view and controller layer.
        These Beans are automatically made visible to your controller components (like LoginAction) and any view page that is associated with that controller.
        These Beans can also be validated with the help of the Struts system to help insure that the user is putting good data in the form. They can be carried along with a session, allowing forms to span multiple pages of the view, and Actions in the controller.
        Note: You must be using some sort of server-side technology (JSP, Velocity, XSLT) for the view layer (going to the client) to see this data (plain HTML won't work). Struts works on the server side, so the client's view has to be composed there.
        The client feeds the data back through normal form submission (POST/GET) methods, and the Struts system updates that data in the Bean before calling your controller components.
      • Within your web application will be pages that represent the view your users will see. These can be JSP pages, Velocity Templates, XSLT pages, and so forth. A set of JSP tags is bunded with the Struts distribution so that you can get started right away, but any standard presentation technology can be used with Struts.
        Even plain HTML files can be used within your Struts application, although they will not take full advantage of all of the dynamic features.
        Following the example of the Struts JSP taglibs, several other packages are available to make the framework easy to use with your favorite presentation technology. For Velocity templates, there are the Velocity ViewTools for Struts. If you want to use XSLT in you application, you can choose between stxx and StrutsCX.
        These packages make the standard Struts framework elements look and feel like a seamless part of the original presentation technology. Struts also makes it easy to mix and match. If need be, you can use JSP, Velocity templates, and XSLT all in the same application!
        Since Struts relies on standard Servlet technologies, you should be able to use any Java presentation technology with Struts.
      • While the focus of the Struts framework is on the controller, the presentation layer is a significant part of any application. The Struts JSP taglibs include a number of generic and Struts-specific tags to help you use dynamic data in your view.
        The custom JSP tags account for a good deal of the Struts code base. It is educational to note that as of version 1.1b3 the Java code for the core of Struts was about 28,000 lines, and the Java code for the tag libraries (including tiles) was about 41,000 lines.
        These tags help you glue your view layer to the controller layer without having to embed a lot of Java in the JSP. This gives the page an XML look, and can be easier for web designers to deal with than a plain JSP. It also helps minimize dependencies between the controller and view.
        The custom tags are used to create forms (and invisibly interact with the Bean mentioned previously), logically forward to other pages, and invoke other actions of the web application.
        There are also tags that help you with internationalization, error messages, etc.
        All of these abilities depend in some way on the configuration files you supplied to Struts.

      It is important for you to remember that the mechanism described here is only in effect when the ActionServlet is handling the request.

      Since this only happens when a request is submitted that causes your container (i.e. Tomcat, WebSphere, etc.) to call ActionServlet, you must be sure that any page that relies on Struts is done through a request that will map to the ActionServlet (i.e. has a .do extension).

      libstruts1.2-java-1.2.9/doc/images/0000755000175000017500000000000010423130300017460 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/doc/images/how-to/0000755000175000017500000000000010404045204020704 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/doc/images/how-to/eclipse/0000755000175000017500000000000010423130300022321 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/doc/images/how-to/eclipse/developing-eclipse-style01.jpg0000644000175000017500000004326110404045214030116 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„   (1#%(;4>=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀ¢¤!ÿÚ ?›ÅZ…妣v³2+D œZ˼¾Ö-©¼ózì Ï×T!DÚ'©¦¥­ßÜ,÷y”Œ…%W?LÔ#XÖð¤O9 p§`äûqV©ÓìC”‡&±­9g™‰ éùTÛú¨87n1ì?Ÿ²‡by¤Z‡PÖ¥³k¡x}›™‘rqœ õ⤴¼×n„…n]q™2êá‘Óz— k ï")5Mj-Ûç—jœ 6úuÅ Õu¬¨ógË åõ•?gO°¹¤Kk­]´¢+¢<•ÞûʮќwúÔ×3kÖ±#ËpûšFŒ"€[ éÓ—%4íaÞBCs¯Mn²ÉµåòF@n8>E2ãPÕà–DûK¸ŒígTàÄ 9)ÞÖ È`Ôõ’HY'$u:~”ÖÕõXÀßq"‚22 gô§ìéöi ý·©ÏÓ~Cü)¶õùúoÈ…Ê…Ï þÛÔçé¿!þ«­ê'þ^›ò{(vv;ûgQÿŸ¦ü‡øQý³¨ÏÓ~Cü(öPìì_íCþ~[ò£XÔ?çå¿!G²‡`æaý±¨ÏË~B—ûbÿþ~[ò{(v<ƒû^ÿþ~[òá«_ÿÏË~BeÃæbÿk_ÿÏÃ~BíkÿùùoÈQì¡Ø9ä/öµ÷üü7ä)F­}ÿ? ù ^ʃ™‹ý«}ÿ? ù ?µoçá¿!G²‡`çbÿjÞÿÏÃ~B”j—¿óðߣÙC°s1´ïçá¿!J5;ßùîߣÙðs±´¯?ç»~Bí+ÏùîߣÙðs±´¯?ç»~B”j7ŸóÝ¿!G²‡`ç Fóþ{7ä)ÃQ»ÿžíù =”;<ƒûFïþ{ÈQý£wÿ=ä(öPìòj_óØþBöû¯ùêߣÙC°s°û}×üö?£í÷_óØþBeÁÏ!Âúçþ{ÈRýºçþzŸÈRöqìì>Ýsÿ=Oä(ûuÏüõ?£Ùǰs²¯‹fk}jÖTPÅa­dÜj‡ˆX7NG^µTÛPV5² Óïâ³ÔVöTv•9D\c8#œÕÅ×ã‡OÚÀb™|²¤c ÊrNzœÓpm™ÞÃŽ¿ ß´Æ×dJaTù\å¸Ù6Ìñ”¾àS’?¯©ê‰} be?hyA'¢·Aøbš§f'#6ŠÐzóJ(ê(´á@Å¢ NZ Š-( QH§ ZPhiiRŠb¶)€ ZQÖHaKLBN©Q@÷VñOwûÔ ˆ×KnšYÔ!% ˆÎ28ÇZáæhé²'ŠÊÎXÒD‰v²†v5,ÖÖ–ðkxö¢n'`'ŽgÜ,ŠÞm‚Û5Ä¶É /O5wqž)m¥ÓîdòÒ(D›Cl*¹ÆHþ”sK¸Y¾Émÿ>ñߪÅ%ƒÆÒ´ÅÁHŠªÀôÁ£š]ÂȘÇbªX¥°ã$/¦—4„iàí?eÎÝØùzzý(æ—p²r xâÐôePA¨îVÖØ&ëUs#mUHÁ$àŸä ÒîBÓÊ#m€y‹¹¨‡°¦ZËaq Rl·_7;•%¨æ—p²æi¾zÂ>Ì]²zŒd}yéOO°8>ÌÀœ m9>Ÿ¨£š]ÂÈ—ì¶ÿóÂ/ûàUUšÁ¤xÄ)¹%cOô£š]ÂÈ™„ƒ(-˜sÊí=:ÿ:h}?*Ù”»PvåŽqÇ­ÒîCZm5]ý—r€¸Ý×Zš4³—w”°>Ó†ÚÁô4sK¸Y±ÛCÈñFFIØ*${2ŠÒBnmª%URÇÚŽgÜ,‡“b ‚mN|¿/×Ò¢šãN‚DG6À—ØÜ¯ÉÁ<út¢ì,‹" vˆ£ ô!EW¹–ÒÕÕÜ©rV0B¨ÆIüèæ}Âȵ€±¶¶Ü½}>´‚KÛpý€¼· £™…ÖŸOI–ÐofÛ—ƒè}êÏ‘üòþùs>ádUYìÍÃBa µŠïdI$géÍI#ØÄ@‘­Ðž›ŠŒÑwÜ,‰|ˆç”÷Ȩf{HYÕâ@QUÈ:@þTs>ád4ÜØ,’$žL~YÚKáFz÷¢i좖(ˆ„¼§FÜãçœQwÜ,‰ìC#[²ž„#ÓúŠ‘b†U##¦@s>ád1þΓ$MpJü£·_çP5Õˆ¶i€ˆ‘H1=¿ .û…‘ád/“üóOûäQäÇÿ<Óþù]…ƒÉþy§ýò(òcÿžiÿ|Š9Ÿp²*?ùæŸ÷È£Êþy§ýò(æ}ÂÈ<¨ÿçš~B*?ùæ¿•a` è‹ùRùiýÅü¨» êÆéˆRG–½«¬K‰`Xg<å·²¿—3wÓ   4í{K¡,‡q ‚ÁyYÆÑʱȲNOS»¶*}7Nûï˜7ÊsÓ9'×¶\3FÊ»w¸d~"²›DÞA/ÎADB¨ÇÝûwÈÉ4€‰téæÔÄ“ÆþZ±;Ÿ »ægæ>€«ñغKdCr´ª6|ß0l‚sþ×§j`X´‡ìÖ±B[vÅ œc5VþßÌ»†So$ê¨ÊU(䎹#=:sHf7ÙÕceŠÈ¯¹3Üž‡¨Àæ¢:1’áåf3ciÉù@±ñß4À± „±q*;2‡%O\ó×Þ´)-”‚îf[y›Ìs— »v°àë=2_´™¥™ù~X „qŒzÓüù6ñÅœìP¹õÀª:¥±¸–ôyeU6ÆQ{rGp "²ÓßÍ·–ExŒ=UÂäîÉàœrÔ‡Es‘ö…ò‰Üß'Í›89éŠ`JÚO)–â\³¼F ‚0>ª ]´ƒìÖÉíÄd³z’rOæMWÔ-ijA#Zý¥cÜ aO\sóéT!ÐË@Á•¹HÚÃ%NÝ£6Üb€.éösBÁçdùŠŠ£³6y9ç ­ @PEPEPMzúm;Jšæßo˜¥Ü29â¹?øLµ_úwÿ¿uÓJ”e²%&˜Ÿð™j¿ôïÿ~êÃx‹]TÚ+}²FeS°r£©ëZ:0Dó²âÍ\¡ÓɦŸꃪÛûeOØ@\ì?á0Õ=-ÿïÕð˜jž–ÿ÷êaçaÿ †©éoÿ~¨ÿ„ÃTô·ÿ¿T{;øL5OKûõGü&§¥¿ýú£Ø@9ØÂaªz[ÿߪ?á0Õ=-ÿïÕÂÎÃþ SÒßþýQÿ †©éoÿ~¨övð˜jž–ÿ÷êøL5OKûõG°€s°ÿ„ÃTô·ÿ¿TÂaªz[ÿߪ=„‡ü&§¥¿ýú£þ SÒßþýQì ì?á0Õ=-ÿïÕð˜jž–ÿ÷êaçaÿ †©éoÿ~¨ÿ„ÃTô·ÿ¿T{;øL5OKûõGü&§¥¿ýú£Ø@9ØÂaªz[ÿߪ?á0Õ=-ÿïÕÂÎÃþ SÒßþýQÿ †©éoÿ~¨övIŠ5™`–h⣋ØD>\ôþU~ïÄ7°è67ˆ!ógw˜øàñRèÂé M•“ÄËÇ›¬‚Ë¿'§n;ÔW)ÕmÙU¡b2@‹•ö9ïSSråI¹%r/øL5?KûõIÿ †©éoÿ~«O«ÀŸhÅÿ„ÃSô·ÿ¿TÂaªz[ÿߪ=„‡ü&§¥¿ýú£þ SÒßþýQì ì?á0Õ=-ÿïÕð˜jž–ÿ÷êaçaÿ †©éoÿ~¨ÿ„ÃTô·ÿ¿T{;øL5OKûõGü&§¥¿ýú£Ø@9ØÂaªz[ÿߪ?á0Õ=-ÿïÕÂÎÃþ SÒßþýUÝ3]¼ÕÅså…Y#?»]¹ùª'F1‹h¨Í·c©ØŸÝ?÷ñ¿Æ‰ýÓÿükÐÍñwü‹÷?ïGüÅyåváþ)î%oÙ_Cº´’BÛ!#,r¿n„!ZÍ]™ºæYŠ&þBè£ “ØzVmõÀ¹¹2"l@ªú0?•»QVE%Z(Q@% ZPI@- (Q@ E/Xê“ØZÝÃÑö• ÌFH<η-íR÷HÐ-d%VYäRF8äúÖ3÷}ïëb㮆ÕÏ„lí¬'as! ¥Çʼ{ óéJ–Ê’r2~µ4då&Âi$m_\YÜMx»<ÿ(3FI 3¹@F2i©mf$ªcd›Yd$²ìc¸óÁÈzUê´¸ë‹]–¬AEP[^ÿ^ÿïÅÿ¡VU~Tw;Ú+Ï6qK£ª²¼2ätôªÙöÿóÆßÿÇøÕ)5°Yö}¿üñ·ÿÀqþ4gÛÿÏüãG3î+ þÏ·ÿž6ÿø?Æìûùãoÿ€ãühæ}ÂÈ?³íÿç¿þñ£û>ßþxÛÿà8ÿ9Ÿp²ìûùãoÿ€ãühþÏ·ÿž6ÿø?ÆŽgÜ,ƒû>ßþxÛÿà8ÿ?³íÿç¿þñ£™÷ þÏ·ÿž6ÿø?Æìûùãoÿ€ãühæ}ÂÈ?³íÿç¿þñ£û>ßþxÛÿà8ÿ9Ÿp²ìûùãoÿ€ãühþÏ·ÿž6ÿø?ÆŽgÜ,ƒû>ßþxÛÿà8ÿ?³íÿç¿þñ£™÷ þÏ·ÿž6ÿø?Æìûùãoÿ€ãühæ}ÂÈ?³íÿç¿þñ£û>ßþxÛÿà8ÿ9Ÿp²ìûùãoÿ€ãühþÏ·ÿž6ÿø?ÆŽgÜ,ƒû>ßþxÛÿà8ÿ?³íÿç¿þñ£™÷ þÏ·ÿž6ÿø?Æìûùãoÿ€ãühæ}ÂÈ?³íÿç¿þñ£û>ßþxÛÿà8ÿ9Ÿp²ìûùãoÿ€ãüj–¹¦Ksih-&ŠÜÂìC°séŒÕFzê i¡ŽtmX‚¯¨2·øUoøE.çòÓþû?á[Æ´#²!ÂOqðøjúߣoc’F€¦ÿÂ-w–?n¶ù¾÷Îyý)ýb=…ìØßøE.?çòÓþû?áGü"w?óùiÿ}Ÿð§õˆöfÃþ;ùü´ÿ¾ÏøRÿÂ)qÿ?–Ÿ÷Ùÿ >±ÁìØÂ)qÿ?–Ÿ÷Ùÿ ÞðíÒé{éìiì¬Àüƒr½zäà{Vu*©«"£™„þžêFe²·så+0{ŒOøE.?çòÓþû?áV«¤¬ÄàÃþKùü´ÿ¾ÏøQÿ¥ÇüþZßgü)ýb=…ìØÂ)qÿ?–Ÿ÷Ùÿ ?á¸ÿŸËOûìÿ…X`öl?á¸ÿŸËOûìÿ…]Óti´Æóhe,jg<î÷¨hÊ6ƒNçQ™?çŸþí»’ÙúVƒ'·ºŠç”X„8-´€O±ïSÒ¢€ (¢€ (¢€ §¨ÿ«‡þ»Çÿ¡PÊ(WèßðåU¾Ó ó—©ÝLG2ÉŸ.@Øëƒš~ãê:@©üèÜ}Oç@ãê:7SùиúŸÎÇÔþtn>§ó£qõ?©üèÜ}Oç@ãê:7SùиúŸÎÇÔþtn>§ó£qõ?©üèÜ}Oç@ãê:7SùиúŸÎÇÔþtn>§ó£qõ?©üèÜ}Oç@ãê:7SùиúŸÎ£º‹Ïµ1瓜ëÆ(®ggË5ÚË:F˜`ÌÊÄï#Ûµi"$kµ*úŠIX˜Ç–åVÓãeò̲ù ‚"ÈÚ¸ ŒqžÞµö4e2JU±vòp:{õëïTQfÞÑ-ä–Efg”Äã·AÀ¿Z±HŠ( Š( Š*ž£þ®úïþ…@(  î·üùW3$ï³Ê… ÄàõÍ4Ž‹þ¢o÷—ù¶_k·!›ž—ê(GvNNÐGLÿŸåN…ÙòNÜèúÑ`$¢Q@Q@Q@Q@ àp3óAQ—±Á~PIlž{æ˜;×!Fãæ€NqýÚÄà¬ÇøCýÞ=(Z)Q@+±NÏ4šÚ½ºÜ,aÁF E>‡ëZ8ëééI©©Y”Ոชá7ÄÙ]Åyr8=iÑ˱«ÆÁ•ºZdŒ{„I£‹’òd€;ÔŸÌT¹¢€ ÒÐEPEPTõõpÿ×xÿô*¹EHÿu¿à?ʨ:Ô’Lg$çï`M[£,*T1äæž8÷êhKÔš2qŒœzR¢€ (¢€ (¢€ (¢€ (¢€ ]ÍýãùÐdúÑ’2qé@Q@WÕ"’m.Hâûä^œSŽŒks –íì¡ËºÇI•ƒ9ÉëÇN? ݶ€[@±w À,rqWQ§°äÌÏ쩜HÒ›_Ë`IØK–È8ã¯éLmÊB€Fy+É$|ý>÷·ëQrIàÒŒM+ÌD“Wvˆ óèCk¤Í»Ú80Ù³’£8ù‡Ë׃ۿZ±¥éÏe$Œì°Á`Ä—>¤``þZÒ¤EPEPTõõpÿ×xÿô*¹EHÿu¿à?ʹæ½qL¾ðÇæÞzzS@lÛ’ÖÑ1êPFòîàœuüzP ”އØzŸòE9$NÀï@ YÆœuö=?‘©GJ@-Q@Q@Q@Q@Q@Q@8ÿ«_© $ž8ÝQÛ ùÚ?½ì=ê@y¹ö§m^Ê01ÇÓ¥0- (¢€ (¢€ (¢€ (¢€ (¢€ (¤™¶À¤¹ldöÉ4¤ì›0u9¼òèD Uºvàƒ·®kZÃí"ÙEÓ+8èÃŒŽÄûÖt¤äµeI%±™x$o'Íò‹2á`a ö î9Ç w4K{¨¥«.ÉÉ9P!$mòþ˜ûݺÖÄÜKy™VIEQåÊÃ,N#ž3Øp{²DººÒ•%%¦Q¸Æy]Ã’8÷ô ˜][/Ùã,@Pc‹äpIÝž¸À÷U/|«nPMçD¤1|ˆ¸9Ç'²yíÚ€44é/eŸý"Fò–0Gîöï$·¨€ì;~:t€( Š( ©ê?êáÿ®ñÿèTrŠ‘þëÀ•gIzw“ýÒð\Œäú `:Êé®E`ÑžY ’pVí@u#!¹ 2’@ ‘×¥ fP¬@'iÅJFj( Š( Š( Š( Šk0Q“IæÛ[å8ΊPà‚{ÛŸSÇøÒ4›C¬BŒ’N3@ò¢Œ†z‚1J$B 0§ž”»¾}I=ð:S¨¢XÒXH¡•²4Ylí£`Â5r9«ƒÐô¤¬´CÔZ)ˆ( Š( Š( Š*ž£þ®úïþ…@(  î·üùW6ëq†cí xÛM¥¥Ú¼´²pd ßsVŒ[‰9öÂóøš* ’sÎXsÏ äûQeTü¸ã’?ÇúP~Î6í7ÝÁÏsþI©Øå‰Í%€( Š( Š( Š( °Î1Á"šc'9qó —ÿ¯LhÕ9ÆðÜ08ôúR^9ý(°Í«°kfòʤ¼`çrmn¾œþ5-õÕÊ\Cîh™Âªo ÀŒ{zÐÚ¶.L+bÇ6HW9óSÛ4êí-ÂÃöWá¶HÊI wëŒcŽø¢ÀjQHŠ( ©ê?êáÿ®ñÿèTrŠ‘þëÀ•F   œõ¦Ëci$êh!èÀþ4y‰Ïμ{У«çiÎ :€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ I”µ¾ÑÁ94À© ™IÚGvÃÛw“ÈÎ:úf®S”¹Ãb°°´Éöxö±ÉzÓžÒÞH¼§… d¤qš"K³ŒHD‡À=>• ²µ‚?Ýò¿/JT´·G,° bÛ²¿<þ¦žÆ…J"©Q´`t” ºu¬žaò•^A†p£?¨ö¢ßOµ·XÂD¥£ÎÖ g““ú“@¨ Š( ©ê?êáÿ®ñÿèTrŠ‘þëÀ•G@Gä¯8$ÈcŽÆ€)v€O~p1ǧZQç'{v6ûæÀUßóû¹$S©Q@Q@Q@Q@Q@Q@Q+¬ps…$Ѱ÷Z’ÛʻԈxã¬g±>Çô«êrãžx¬âܽäô)顟k«Áq€‹€@Ž{m\š&Õ኉Êûrwü¡³Àà|Ø­lI3j6ŠX4ê6œr'Û×ð«T€Z(¢€ (¢€ (ªzú¸ë¼ú\¢€$“î°Î>ïO¥C°ÿÏGü…0 ‡þz?ä(Øç£þB€ ‡þz?ä(Øç£þB€ ‡þz?ä(Øç£þB€ ‡þz?ä(Øç£þB€ ‡þz?ä(Øç£þB€ ‡þz?ä(Øç£þB€ ‡þz?ä(Øç£þB€ ‡þz?ä(Øç£þB€ ‡þz?ä(Øç£þB€ ‡þz?ä(Øç£þB€ ‡þz?ä(Øç£þB€ ‡þz?ä(Øç£þB€ ‡þz?ä(Øç£þB€ ‡þz?ä(Øç£þB€ ‡þz?ä(Øç£þB€ ‡þz?ä(›rÛ¡E22¸l àƒS%x´†Š×’Ý\«(À Œ3.?jkh#¶aˆ‹ÐœV4a(_›©RiìCö¶°C… l|xtúUŽ‹Ç"E;§˜¥à©PÿÇk ñhðE0‘H}ã õÏ'5£HŠ( Š( Š*ž£þ®úïþ…@(  î·üùTtTåç~÷ÐgüûÓþn0Hœç±éB»3cË`;œ3ô¢À?#Ö–Q@Q@Q@Q@Q@Q@+°X”ž™Ç>”N[øà»X&ÊnáK9ô>žÕhg¸ÅO½qèV™Fu¹•y;N—Ò­U( Š( Š( Š*ž£þ®úïþ…@(  î·üùTtR`cã9Å!E*T| œ sùÒí\“÷˜õfÆiÜû£·oN”´€( Š( Š( Š( Š( Š( Š)&`°£1 ‚I8Ç"š>H­¯<´—Ë‘›*Ø`N1íô«–Ñ4,M+JTcsu40FSéS2cw2†”•!~$U2ÎâÚi^gvÝÔ–1ÏPþt¥E (¢€ (¢€ (ªzú¸ë¼ú\¢€$ºßðåQÐPÊKíê[’O Ç¥43/žSǨ´fV(ÈÉñÓ==ýh°L¸àHéœûAùÔ žžÀï@ 9Á¥¤EPEPEPEPEPE¬Hp äð3sÏ9?ïš77üó“þù§` Íÿ<äÿ¾hÜßóÎOûæ‹noùç'ýóFæÿžrß4XsÏ9?ïš77üó“þù¢À›þyÉÿ|ѹ¿çœŸ÷ÍÜßóÎOûæÍÿ<äÿ¾h°æÿžrß4noùç'ýóE€77üó“þù£sÏ9?ïš,¹¿çœŸ÷ÍTÔ 1C•eýü}GûTvŠ@I' Ü÷z ö¨wùç'ýði€n?óÎOûàѸÿÏ9ïƒE€7Ÿùç/ýði d`Ç!†3þ) ÷`eÿv"?¥.óÿ<åÿ¾ üó—þø4n?óÎOûàÑ` ÇþyÉÿ|7ùç'ýðh°ãÿ<äÿ¾ üó“þø4XqÿžrßÇþyÉÿ|,¸ÿÏ9?ïƒFãÿ<äÿ¾ Ü真÷Á£qÿžrß‹n?óÎOûàѸÿÏ9?ïƒE€7ùç'ýðhÜ真÷Á¢Àüó“þø4n?óÎOûàÑ` ÇþyÉÿ|7ùç'ýðh°ãÿ<äÿ¾ üó“þø4XqÿžrßÇþyÉÿ|,¸ÿÏ9?ïƒO?êׂ9<Š„ÏÌ"-ûÂ2Ö¤##§oz…-l; H9Ž:ûUZ(¢€ (¢€ B@$;šZ(ªzú¸ë¼ú\¢€$ºßðåQÐUÒò¡W;Ô•åHÆ  IsrFœ³HH}ºŸÔT›— n=9 ÍÄBu‡pÞÊX~ê*j( Š( Š( Š( Š( Š( Š*+Ûqwh¶ìÌ‚GU,½GÌ)ÅÙÜ ³ø^ kYfKÉËÆ ŠN>R=0*ͯöuûNÏ4}â½TåÌî$¬cL®öÅ! Ò¤\0ÏÍÁèzqŒvüªV7‹‰­Zi䬑€÷C x¨Ç¥HÉ,$¿’â14¬aÉcÒØÛ€r©íþ5í#fï*_¸yíõö  è¤EP|êŸm&î7tù|œ#0½:sëT^6žÖå¦e[b>KôÚ9ž}ibïûEþÞ…Ë6ø]¥³œ?N:ôý*]=fŽöx¤WÙhˆä0ËcñÁ  *§¨ÿ«‡þ»Çÿ¡Rå#ýÖÿ€ÿ*Ž€ Ìm2C,² ˆ23 8]ÇûCúÐEÒͱBðïʺ€™“k0ÜŽž•1ѱ=»¦Ý±¢/ß#i$\ýGãL&Šþ[çÊ‘cÉF;pw`xëÖ¶”a@=… Š( Š( Š( Š( Š( Š( ªÝÞÛ LœöFÆxÇ"˜-Á‚àƒÛËz›íñÏ9ÿïË…¿›§BÂO²llðßf ç늛ûNßÒn?é“…þÓ·þìß÷é¿Âí;îÍÿ~›ü(°ö¿÷fÿ¿MþiÛÿvoûôßáE€?´íÿ»7ýúoð£ûNßû³ߦÿ ,ý§oýÙ¿ïÓ…ÚvÿÝ›þý7øQ`í;îÍÿ~›ü(þÓ·þìß÷é¿Â‹iÛÿvoûôßáGö¿÷fÿ¿MþXûNîÍÿ~›ü*›¸î<˜âYwyÈyŒŽ3@tRI3µ°p~_åPmï¯ýðƘ×þúÿßühÚÿß_ûàÿ_ûëÿ|ñ£kÿ}ïƒþ4mï¯ýðƯýõÿ¾øÐµÿ¾¿÷Áÿ6¿÷×þø?ã@×þúÿßühÚÿß_ûàÿ_ûëÿ|ñ£kÿ}ïƒþ4mï¯ýðƯýõÿ¾øÐµÿ¾¿÷Áÿ6¿÷×þø?ã@×þúÿßühÚÿß_ûàÿ_ûëÿ|ñ£kÿ}ïƒþ4mï¯ýðƯýõÿ¾øÐµÿ¾¿÷Áÿ6¿÷×þø?ã@×þúÿßühÚÿß_ûàÿ_ûëÿ|ñ£kÿ}ïƒþ4mï¯ýðƯýõÿ¾øÐµÿ¾¿÷Áÿ†à0{]ÌúL}?ˆPAE03µÏøõ‡þ»/ò5V?¿/ûÿû(¤À’Š@PEPEPEP÷[þüª”ÓÉmŠŒ¬4Àš'F®:0Í(u'õÆpqŸ­ ÃÖ…`Ê œƒ@¢€ (¢€ (¢€ (¢€ (¢€£$ñHg8Îüè O`qøñþ4oˆçƒŒàã?ZuQ@Wºûö¿õóþ„(~Š 3µÏøõ‡þ»/ò5V?¿/ûÿû(¤À’Š@PEPEPEP÷[þü«Ÿ’;ß5öÇ62FPh úT2Åo'𬙔0Çn¥Xò·¥Xå$ð)„~ð ·Ýã¥9Wj…@è:Ѐ{‘Ðt- (¢€ (¢€ (¢€ (¢€ÀœŒ©ÈÍ5¢-»vÏ™pzñLh”ž¤00ÚHÀãü)R5V-Îs 'EÀu€( «Ý}û_úùÿB¿EPÚçüzÃÿ]—ù«ß—ýÿý”R`IE (¢€ (¢€ (¢€ (I3µ°2~^? ‡2Ï3ÿ}/øÓÌŸóÈÿßKþ4fOùäï¥ÿ3'üò?÷Òÿ“þyû鯀 Éÿ<ýô¿ãFdÿžGþú_ñ 2Ï#ÿ}/øÑ™?ç‘ÿ¾—ühÌŸóÈÿßKþ4fOùäï¥ÿ3'üò?÷Òÿ“þyû鯀 Éÿ<ýô¿ãFdÿžGþú_ñ 2Ï#ÿ}/øÑ™?ç‘ÿ¾—ühÌŸóÈÿßKþ4fOùäï¥ÿ3'üò?÷Òÿ“þyû鯀 Éÿ<ýô¿ãFdÿžGþú_ñ 2Ï#ÿ}/øÑ™?ç‘ÿ¾—ühÌŸóÈÿßKþ4fOùäï¥ÿ3'üò?÷Òÿ“þyû鯀 Éÿ<ýô¿ãFdÿžGþú_ñ 2Ï#ÿ}/øÔ;·Úî]¿é1÷ø‡¥tS;\ÿXë²ÿ#Ucûòÿ¿ÿ²ŠL (¤EPEPEPEHÿu¿à?Ê¡WVÈSÊœéLSC«1PÀ‘ÔÒ¢€FAÈ¥ Š( Š( Š( Š( Š( Š( «Ý}û_úùÿB¿EPÚçüzÃÿ]—ù«ß—ýÿý”R`IE (¢€ (¢€ (¢€ (nX¥¼¬½B‚?*çMäÓZ‚/+‚Ä3•9 éÀÅmN)ëk‘)YêËö7q¨ÌžføBå>\z{{Õ9·É¨Ý¥®VPûÎǶ# g8ÝŽ¾µ3+°âî®íÂñáಠ0áø9nyÏ\Ô©ûÍ–wïÎþ§Ÿ»è>˜¨(µ¦Ç%´"&ŽL™qfÈò=ªÔR;•Ý&P1ÉÛê)-Q@Q@Q@Q@Q@Q@Wºûö¿õóþ„(~Š 3µÏøõ‡þ»/ò5V?¿/ûÿû(¤À’Š@PEPEPEP’UoòªŸcµÿŸhïT¤ÖÌÇ1b‰ž¥T ’“mîE (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (ª÷_~×þ¾cÿÐ…oÑTv¹ÿ°ÿ×eþFªÇ÷åÿÿe˜QHŠ( Š( Š( Š|í²)Úý+>Úí¯-·¤%K1Q»‘Žæ­GK‰½lWÒR+K«›(£ePÆL“ìÔØn&7wl÷ '`ˆÒ8ÇQŒþ9§=îÂ;jÒ†,Avo1±;Ï8Ûõ¡uYÞX£Hâ&cÀÉù<7¿gM¸y-×í¡‘‚Áàž¾*ÔsG&6:¶T8Áê§¡¤”PEPEPEPEPEPE^ëïÚÿ×Ìú  ú*€Î×?ãÖúì¿ÈÕXþü¿ïÿ좓J)Q@Q@Q@Q@™CÅ"ž„(?•e N aþ¤fã±2Š{“ÚiñZJÒ#ÈÌÃ9áSù1o/å¦ãü[Fje''q¥ed!¶„Ïç˜ÔÉŒn"£†Æf2§™¹ŽNé†}pMHÉ 9  ç9Çz¨èãÔê(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ¯u÷íëæ?ýPý@gkŸñëýv_äj¬~_÷ÿöQI%€( Š( Š( Š(  $«2>_åPùqÿÏ5¦åÇÿ<Ö.?ùæ´\Ëþy­\óÍh¸—üóZ<¸ÿçšÑp.?ùæ´yqÿÏ5¢à\óÍhòãÿžkEÀ<¸ÿçšÑåÇÿ<Ö‹€yqÿÏ5£Ëþy­òãÿžkG—üóZ.åÇÿ<Ö.?ùæ´\Ëþy­\óÍh¸—üóZ<¸ÿçšÑp.?ùæ´yqÿÏ5¢à\óÍhòãÿžkEÀ<¸ÿçšÑåÇÿ<Ö‹€yqÿÏ5£Ëþy­òãÿžkP\ª«ÚíP?Òcéþð ‚Š`gkŸñëýv_äj¬~_÷ÿöQI%€( Š( Š( Š(  î·üùTtT_ Ãî I'·N˜¦€$g]Øo»ŸáèëùÐL›°¬6äᘛ§ ÷?•¼.æcŒ@ô3J Ÿ2Œ1ÏãÓÒ€&\íÁëKHŠ( Š( Š( Šd»¶íPIcŽ*4 ¼nÜHõþö?¥4'›²l€^cè}©[![Ë<*–áO'Ž9Í#yˆ†ç-’ÙëžCR `¹s’IÇÀÉÒ€E ¯u÷íëæ?ýPý@gkŸñëýv_äj¬~_÷ÿöQI%€( Š( Š( Š(  $û­Á?w Ïj‡qÿžrÿß¶ÿ `üó—þý·øPNF rèboð¢ÀùvùRô*]íœì—?õͿ€qþä¿÷í¿Â—{r_ûößáE€MÇþyËÿ~Ûü(Ü眿÷í¿Â‹n?óÎ_ûößáFãÿ<åÿ¿mþXqÿžrÿß¶ÿ 7ùç/ýûoð¢Àüó—þý·øQ¸ÿÏ9ïÛ…Ü眿÷í¿ÂÇþyËÿ~Ûü(°ãÿ<åÿ¿mþn?óÎ_ûößáE€7ùç/ýûoð£qÿžrÿß¶ÿ ,¸ÿÏ9ïÛ…üó—þý·øQ` ÇþyËÿ~Ûü)w7÷%ÿ¿mþXÜ眿÷í¿Â”»©/ýûoð¢ÀÛû’ÿß¶ÿ MÇþyËÿ~Ûü(Ü眿÷í¿ÂÇþyËÿ~Ûü(°ãÿ<åÿ¿mþÉËÚü¬?ÒcûÊGñZè(¦v¹ÿ°ÿ×eþFªÇ÷åÿÿe˜QHŠ( Š( Š( Š‘þëÀ•G@F³FÓ4*àÈ€QÔÓùP?ÚÙpÏ—ÄFØààóŒu©æ(íÄîØŒ€zyéÀúТš9£eOœý)ù¢€ Z2=E´›×vÜòhr(=(.㜪ê7”—©ÏáÁ©<äóüœüûw{c8 –g#›‰$jèÁ•À*}E;4dzŠ2=E´dzÒÐ1Ü,—AµÕãÂpGäjj( Š( «Ý}û_úùÿB¿EPÚçüzÃÿ]—ù«ß—ýÿý”R`IE (¢€ (¢€ (¢€ (Gû­ÿþUž²:ë ùmÆ+uŸLcŸ^ÔºIkY žRä—m¸ó7tú{UtÐææQ¸²“ s’Œc°ŸÂÀ’ãG–P‹¼8Bü³•$¶ãÁä`ôÇÔRÿeÊ%wòàt2oòä9ó8o¼Û}Á äÒ.š×ìÁâe'q‘œƒŸ/f1Ç9«éŒþzÆ‘ ¯œ2ÉÐðp{÷<e¾—$3[¸$å·íè ¯ê1ô¢êÆ{©Ø˜ãɉ^ÊäpCƒÒ€ 2xã@f]ËûÃÌÆÐÞü*ŸJ³’Ê9Qª³îUWÜ`AÜÔP[Í4PÆ‘äŽi‰gNß¡Ü?ȦÚè÷Jeíæ8÷QÓ¯¾ON´¶Ú4©v$›ËòÁÝ´19l›£ò¡ô™ü‹XãXÈ VÛ‚-÷z:qõ4j]=ÌÁƒ FÒ¡¦oš3ýåã¯åÓ­U}GÉÛxŒªªä€ØÀ~íVìO·^:u¤’êСwíR!I##¥:îvŠÔIÖfdUÏO™€Ïë@6£AüöÛå¸ŽÖÆp§ž½)"Ôákg–BFÆ*ÁT¶>bO¥0&¶¼‚è°‚Mûq’Ç##Ÿ¡©›vÓ³±ÆzfÙLש#€ä½8$J±@Q@U{¯¿kÿ_1ÿèB€7èª;\ÿXë²ÿ#Ucûòÿ¿ÿ²ŠL (¤EPEPEPEHÿu¿à?Ê£ ¨Gmw¢ó TÂç•$g÷ÎZ‘ìQç›"Ã&wD1·'©éž¼õ¦fD|âòJï2w$Avè06˜žT~K0–|¶$pI=§¥Fš2.YåËÒmÛ‡l“éïÛ\ §ÒàÑ™œÛÀÇ;NG$d~¤\a•Öy„Š¡þ\…ã¦:P"ÔÛ¤8xöÆ>˜§I¥Û¾,I*R=@f‹€ÆÒ i¼Íò9P6ü§ ç8Éäw$R¦“ Éæ$g',Ì-É>œrOLP„´#¶@[ØÙÏ_”¯?ªãHah•ÝPñÀ^§Oׯ½ '†Í`b’E@Û‚çŒ÷÷ç9ªÐé£Dï#oFÞ@³ž¤gB)€ù4›w·©tP[ð{rèø©nmÙìÖHÜ… ïèv°<ãéH ói+tfiä*Ò“€Pùþï^´ó¤Á°*<‰†-ÆI'’#¹íü…0$µ°ŽÒÜCÈr¶r3À:ajS/Ì’9`X€ÍÁ'±ö€mŒ/oh‘ÈT¸É;zrIþµb€ (¢€ (ª÷_~×þ¾cÿÐ…oÑTv¹ÿ°ÿ×eþFªÇ÷åÿÿe˜QHŠ( Š( Š( Š’A•aþïO¥Cå¯û÷Ù¦å¯û÷Ù£Ë_öÿï³@–¿íÿßf“Ë_Wÿ¾ÍZú¿ýöi|µÿoþû4žZú¿ýöi|µÿoþû4žZú¿ýöhò×Õÿï³@ å¯û÷Ù£Ë_öÿï³@ 寫ÿßf—Ë_öÿï³@ 寫ÿßf-}_þû4¾Zÿ·ÿ}š<µÿoþû4žZú¿ýöhò×Õÿï³@ å¯û÷Ù¤ò×Õÿï³@ å¯û÷Ù¤ò×Õÿï³@–¾¯ÿ}š<µõûìÐùkþßýöhò×ý¿ûìÐå¯û÷Ù¤ò×Õÿï³@–¾¯ÿ}š†áB½®3ÿ1õ9þ!@ÀÎ×?ãÖúì¿ÈÕXþü¿ïÿ좓J)Q@Q@Q@Q@?Ýoøò¨è¬ˆn%û]Û=°DiF8ÇUÆÓ¨Ï%ݸ’%r ä†á½òã[T€( Š( Š( Š( Š( Š( Š( «Ý}û_úùÿB¿EPÚçüzÃÿ]—ù«ß—ýÿý”R`IE (¢€ (¢€ (¢€ (—wInv²JÅ€?$e»{Uoíÿž?÷å©€B1ÿ,.ïËTm4ïÿC¹$ðÌ0oÌsE€"ò¢ ¥óî9>dNÿΧûYÿŸKÏûðßáE€>ÖçÒóþü7øQö³ÿ>—Ÿ÷á¿Â‹}¬ÿÏ¥çýøoð£ígþ}/?ïÃ…ûYÿŸKÏûðßáGÚÏüú^߆ÿ ,ö³ÿ>—Ÿ÷á¿ÂµŸùô¼ÿ¿ þXígþ}/?ïÃ…k?óéyÿ~ü(°ÚÏüú^߆ÿ >ÖçÒóþü7øQ`µŸùô¼ÿ¿ þ}¬ÿÏ¥çýøoð¢Àk?óéyÿ~ü(ûYÿŸKÏûðßáE€>ÖçÒóþü7øQö³ÿ>—Ÿ÷á¿Â‹}¬ÿÏ¥çýøoð£ígþ}/?ïÃ…ûYÿŸKÏûðßáGÚÏüú^߆ÿ ,ö³ÿ>—Ÿ÷á¿ÂµŸùô¼ÿ¿ þXígþ}/?ïÃ…k?óéyÿ~ü(°ÚÏüú^߆ÿ cH÷Û"[\ŒOаæ‹ÑÑL ísþ=aÿ®ËüUïËþÿþÊ)0$¢Q@Q@Q@é~ÿà?•6€'Eÿ}ô!W4γÿ¼?•4ê)€Q@Q@Q@Q@Q@Q@Q@Q@ÚçüzÃÿ]—ù«ß—ýÿý”R`IE (¢€ (¢€ (¢€ (ÒýÿÀ*m2N‹þúÿèB®igÿx*h ÔS¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€3µÏøõ‡þ»/ò5V?¿/ûÿû(¤À’Š@PEPEPEP¥ûÿ€þTÚdýõÿÐ…\Ó:ÏþðþTШ¦EPEPEPEPEPEPEPEgkŸñëýv_äj¬~_÷ÿöQI%€( Š( Š( Š( K÷ÿü©´É:/ûëÿ¡ ¹¦uŸýáü© /QLŠ( Š( Š( Š( Š( Š( Š( ŠÎ×?ãÖúì¿ÈÕXþü¿ïÿ좓J)Q@Q@Q@Q@—ïþùSh’t_÷×ÿBsLë?ûÃùS@^¢˜Q@Q@Q@Q@Q@Q@Q@®Ǭ?õÙ‘ª±ýùßÿÙE&”R¢€ (¢€ (¢€ (¢€/ßüò¦Ð$è¿ï¯þ„*æ™Ö÷‡ò¦€½E0 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (;\ÿXë²ÿ#Ucûòÿ¿ÿ²ŠL (¤EPEPEPE:O¿øåM IÑß_ýUÍ3¬ÿïåMzŠ`PEPEPEPEPEPEPEPv¹ÿ°ÿ×eþFªÇ÷åÿÿe˜QHŠ( Š( Š( ŠÿÙlibstruts1.2-java-1.2.9/doc/images/how-to/eclipse/developing-eclipse-style02.jpg0000644000175000017500000003232010404045250030111 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„   (1#%(;4>=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀ¤¤!ÿÚ ?±â kS±¿’;(Ñ Š$g&-Ûsêk%üY«ÆÅB®½Aˆq]P¥Ìœšbêž°ß¡VWÄû[ • $¿ÉãƒTèÁn.vCÿ n§ëýûÿøJ5aˆv€ÞPÆ}(öv4x³SÏX?ïØ©eñ.¯¦)’$uê­Rö0v7þKÖûö)á)Ô½aÿ¿baçbÿÂQ¨úÃÿ~Å/ü$ú¬?÷ìQì ì_øIµXïØ¥&Ô=aÿ¿baçbÿÂK¨zÃÿ~Å/ü$š‡¬?÷ìQì ìQâ=CÖûö)Gˆïýaÿ¿bcçc‡ˆ¯ýbÿ¿b”x†ûÖ/ûö(ö1hÅÿ„‚ûÖ/ûö)F¿}ëýû{‡;íûïX¿ïا z÷Ö/ûàQì`/hÅþݽõ‹þø£\½õ‹þø½ŒGí£[¼ÿ¦÷À¥þÛ¼õþø{‡´bjì÷þø¿Û7ôÏþø{‡;k~±ÿß—û^ëþ™ÿßcöŒ_í{¯XÿïN­×¬÷À£ØÄ9ؿڷ?ôÏþøjÜÿÓ?ûàQìbìpÔîéŸýð(þÓ¸ÿcþø½ŒCÚ1F¥p{§ýð)ßÚ7©ÿ| =ŒC‡öŒÿìß"œ/çõOûäQì¢ì>ß?û÷È¥Óz§ýò(öQv;í³±ÿ|Š_¶ÍþÇýò(öQv/Û%Ïðß"—írÿ³ÿ|Š=”CŠ.¤ÿgþù¢æOöï‘KÙD9Ø¢æOöï‘NûCÿ³ÿ|Š=”CœV¼ÅµyËr?•gW9±ÐëÚ«ézÌí¤HFWL6AüÅU¹Ö¬e¶•`Šgi #c»?w㎜úW\atš2oQ÷Úæ™=¥ÂÃk‰d‹ ÀÆæÆîݱÇÔÕ5ÖV .ÎL˱ÈìʬݹÇ"©AÚÌMö.¶³e&¡xê(Ù“ÈqáCeÖ§RÓâ¶YZ8Ày§0¦2cR>R@ä æ§’AtS¸Ô­¥¶RHáÜ7™D]¸ÛÏ=j¶µz—÷¢x¤b…FŒlà?J¸Å¦&ʵdŽá@§´êZ¢€)Â…§ (§ b–´å¥¤1E8PÓ×¥ ¥áKH u(§Š)ËHP)€ñKH Zp§”08ÝsþBÓýGòªÄtž‘6ƒ¦ê2y÷vâI0vHãßøDô_ùó÷Ñ«U$•“*øE4oùó÷Ñ£þ]þ|ÇýôiûY÷*þ]þ}ýôhÿ„[GÿŸAÿ}=¬û‡*øE´ùô÷Ñ¥ÿ„_HÿŸAÿ}=¬û‡*øF4ùõ÷Ñ£þ'þ}Gýôhö“î«°¿ðŒé?óê?ï£Gü#ZOüúûèÑí'Ü9PÂ5¤ÿϨÿ¾/ü#zWüûûèÑí'Ü9PÂ7¥ϰÿ¾ðŽióì?ï£G´ŸpåBÿÂ9¥ÿϰÿ¾ðŽéóíÿ^Ò}Ö=ƒþÝ0Ë¿þIpå˶ýÀ`ÙÏOzEÓØ’Öû˜íù˱o—8ç9ã&ž4«!$r›ÌŒ`?˜ÙÆs‚sÈÏc@ÚYÛÙFc¶ËBs´@úßASÐEPEPEPEPEPEPEPEPEPEPL¸™mà’Y –cèPƒTY.¼‰ÂíÌg~Uý³ëíüꀴ{ Ãw4ÄÄ„•Ú~w$t5ªÓBº¸µY„öó™ÚáÍéŠØ À—ãÞ“{ ]Ï<×ÿä3qþõgVežµmþ¯üú †{™ÍÓ[ÚG: w2±HÀ>†€+M¯ØÁy ª—d€\í8b3ŒIy¯[[ÈÐÆ “ „ #æ TqÎz7|PÐë“_ý‰\‰ÿºqq’1œç…Hš•³êO`¨Î29éïžýè WìW+vˆ"Ñ•†HbÜà­K­i0C–FÜ£níßLwõ C¬ÚOc-ÜE"m¬«‚Aノã½'öÕ¨vFYQÑKH }À=O΀6¹o Ë$@`©?E ®[O {ey˜)bf=Nq¦hå•Áº³ŠsD]AÚÝEO@Q@Q@Q@Q@Q@Q@Q@R1Ú¤ú çí®Ò­&àX„Ýò‚ܱǹ >• »HÒÎe$&ÿ™zð=¾cùÒ¦“f‘,~Y` ò9<•ÿŽM% •ÄÏ.éÙY¤s“‘è*DÒm”K¸;™¤Œí’ÃßÞ€"}7Èî —fc—fÀçØù ”ip‚­æL[f/̃ÐûP›hÞ‰Y™W¸äéRPEPEPEPEPEPEPEPE’«o¡ gKÓ-¤ÒmŒûš'¸>µ3i¶Ëѧÿ¿ïþ5h’¼ºu¹3LA Ìø?­fÏÃ!µ*æÝT:È90sÏ\f­hI¯¦jndw¬ÿòÍÂŒJ?Ƶ}[þø©jŽÿ!‹÷«>³(õ«oõçÐT´Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@$ŸêÛèhI8Ѭ¿ë‚ÿ*’F­gjnš¢M^Ue ¸„nª–Â[—Ãñ²2 cÎèÇŒûJЂ)#Y ®£òï¦÷*ǯÿÈfãýêάÊ=jÛý_ùô-PEPEPEPEPEPEPEPEPEPEPAô”š¼h¨—7jŠ0ª&à _ì(;ÜÝŸûkO™ŠÈoü#ößóñwÿjk-" )ZXÚGv]¤ÈÙã­>gÔ,‹žW²ŠO(ÿ³EÀóoq­\ÿ½YÕ#=.F!¸gŽÃ·±¦ïoïIÿ[üi\{zOûúßãFöþôŸ÷õ¿Æ‹€ooïIÿ[ühÞßÞ“þþ·øÑp íýé?ïëÛûÒßÖÿ.½¿½'ýýoñ£{zOûúßãEÀ7·÷¤ÿ¿­þ4ooïIÿ[üh¸öþôŸ÷õ¿Æíýé?ïëÞßÞ“þþ·øÑ½¿½'ýýoñ¢àÛûÒßÖÿ7·÷¤ÿ¿­þ4\{zOûúßãFöþôŸ÷õ¿Æ‹€ooïIÿ[ühÞßÞ“þþ·øÑp íýé?ïëÛûÒßÖÿ.½¿½'ýýoñ£{zOûúßãEÀ7·÷¤ÿ¿­þ4ooïIÿ[üh¸öþôŸ÷õ¿Æíýé?ïëÞßÞ“þþ·øÑ½¿½'ýýoñ¢àÛûÒßÖÿ7·÷¤ÿ¿­þ4\{zOûúßãFöþôŸ÷õ¿Æ‹€ooïIÿ[ühÞßÞ“þþ·øÑp íýé?ïëÛûÒßÖÿ.½¿½'ýýoñ£{zOûúßãEÀ7·÷¤ÿ¿­þ4ooïIÿ[üh¸öþôŸ÷õ¿Æíýé?ïëÞßÞ“þþ·øÑ½¿½'ýýoñ¢àÛûÒßÖÿ7·÷¤ÿ¿­þ4\{zOûúßãFöþôŸ÷õ¿Æ‹Ãkßò¸úÿJϦ¥K÷ÿüª©k™o~Íl°äG¼™Žøì &û©ýÛ?ûøßüMG4:œ KCŸGoð¢ÀECþyÚÿßmþgPÿžv¿÷Û…K :œÊJ­ ÁÇ.ßáR}TþíŸýüoþ&‹}TþíŸýüoþ&±êŸÝ³ÿ¿ÿÄÑ`±êŸÝ³ÿ¿ÿÄÑö=Sû¶÷ñ¿øš,ö=Sû¶÷ñ¿øš>ǪvÏþþ7ÿE€>ǪvÏþþ7ÿGØõOîÙÿ߯ÿâh°ØõOîÙÿ߯ÿâhû©ýÛ?ûøßüMû©ýÛ?ûøßüMcÕ?»gÿÿ‰¢ÀcÕ?»gÿÿ‰£ìz§÷lÿïãñ4Xìz§÷lÿïãñ4}TþíŸýüoþ&‹}TþíŸýüoþ&•-¯‘³p-Äx?êÙ‰éîk™/VÚÙb,c2#0õ¥xu%X؆ ¸1³_»IÙjÀ†ynm¿×ÍaûÒ8ÿÙj/·7üþiŸ÷ù½qéM+« ¸}¸ÿÏæ™ÿ›ü(ûsù|Ó?ïózgÒ«‘…Ð}¸ãþ?4ÏûüßáGÛ›§Û4Î?é³}=(äatù¿çóLÿ¿ÍþbÔ^^!{i,%PpJJÇøí.V‚èŸìz§÷lÿïãñ4}TþíŸýüoþ&•€>ǪvÏþþ7ÿGØõOîÙÿ߯ÿâh°ØõOîÙÿ߯ÿâhû©ýÛ?ûøßüMû©ýÛ?ûøßüMcÕ?»gÿÿ‰¢ÀcÕ?»gÿÿ‰£ìz§÷lÿïãñ4Xìz§÷lÿïãñ4}TþíŸýüoþ&‹}TþíŸýüoþ&±êŸÝ³ÿ¿ÿÄÑ`m5`e¡3ómv'•)ë@>»ÿ!yþ¿Ò³ééRýÿÀ*ŠÃþC¯ÿ^ßû5$»³UM¹ žñªz™ÛlLê:ª[#è:Ó˜‰¯aû<0‰bMÛqå’6–<ôãô$téSO6 -‹ñ±m£bnÆÑÉÀRy9íÐZ@tZ;¼–(ò®ÙAaŒ`àf¯S¢€ (¢€ (¢€ (¢€ (¨®Õ~ÈÐ*ÊÐêm"crÚ¶3Óï-g_^M>¡,q܃-ª†YPr$#¸ã¡¬äívöHh¥âé™ôÛwfкJáã ÜuSéX“h K9I–8㔀ŒìÝ·w\žO¥wÑ|°HÆz²84id•by91 IrOSŒñE••¼–o-Ç”¡4.ÁŒç–ú ×›±é˜ÄnT¶åŒaOßlà~jA£o·I–â$V@Fö –î9?Ë4s…ˆÎŸPÜù³Ÿ68 OO­vŸ¿ä /ýu>¾••gx ÔÑ\†ÁEPEPEPeÿVk(õ4˜>»ÿ!yþ¿Ò³ééRýÿÀ*ŠÃþC¯ÿ^ßû5$¹ÿ^ŸîŸéQ_É 6ÆYÃRd’H©¦Ki¬®n®ª ÁÉ$csòšœ-‘‘c&öUóHöX¬ö¶îÑR6ÝŒ;“Óר¤¹Ô!¶aHX®òU ¹ÆIí@ ˜ G¸Änô44ð£icVfÚ` >ŸZŠÞþÞx‘üÅBê\#° žqéÅ<^Z•V0•c…!Ç'Ú€ö˜3G™9Oœ|ßOZ‰µ5òÿÒb"GòÕƒ‚7`œgè Y¢€ (¢€ (¢€ ŠçýWçüdAÏ«˜Ÿ;ZÕÁÇñ-Z˜b{–ûß?ÞúÔJ–ãNÄ"Ò.uQoöYã…¢$åÆAÏ1XGÁš¡‰á:œF7ûÙRIç=_­tÂ¢ŠµŒÜnÂ/ê°ÊdMN í‚NÒy=êà;ãà \îÆÓŒãš¿n» “Ì•|ª#»¦§çêJžOoÇÞžÞÔö„P @žƒ¿×“KÛ.ÁÈûŒ> ÔÈÁÔ¡#nÔê?­oøgF—E±{ydIŸvPJ™ÕRVHj6w6(¬K (¢€ (¢€ (¢€/ú³YG©¤Àáõßù Ïõþ•ŸLJ—ïþùTVòúöÿÙ© 5CJ€çOBG§¥C}d.íì»Ç `ÜñÒ˜äÒ;亳dVŒ ,…›qùÁ$õ‰››‰€¬¼i¼–e$ '“÷Zšk“p ‘0y/¸zõVGì·C‚—mÃ#3´c×K ´´Ü®&,Î2IÉ<ŸLÀPè7 a<1ºI¹Yƶ͡G±â¥}iÙå•áGx™6¢ªNÜÿ|Ðá—ÌR¥÷cs£{0À×úSÓExžÍãh‰¶Ž4ÚËà ¤þMúPÍQ@Q@TW?ê¿?äh.ËþC«ÿ^Íÿ¡-lÐEPEPEPEPEPE6_õf²SIÃë¿òŸëý+>˜•/ßüò¨¬?ä:ÿõíÿ³R@kHÁ&Bzm#§¸¦\Îëm#Û/™"Žƒë×ñÏñL µ×LN#• ÒcæÇåìûää3/öìyaöY¿v¥å9_ݨç¯<x Xë«,ÑÛH’<¬ÅYÕ~U98ý1[4Q@Q@Q@Q@TW?ê¿?äh.ËþC«ÿ^Íÿ¡-lÐEPEPEPEPEPE6_õf²SIÃë¿òŸëý+>˜•/ßüò¨¬?ä:ÿõíÿ³R@k·úôÿu½=©ef£rÁ[®Ö*1Í0*&ÄùlX»xaÉ'ž¿:ô[Gºóж ídÀ7AÏ<Œ(ØÈN2ÄvúÑmu©År‘±Ff‘¶ºŸŸ2¾ïá==Gã@Ú-Ä÷Î× ìÁñ¸€ð>ïãê3ZQ@Q@Q@Q@Esþ«óþF€2ì¿ä:¿õìßúÖÍPEPEPEPEPEPeÿVk(õ4˜>»ÿ!yþ¿Ò³ééRýÿÀ*ŠÃþC¯ÿ^ßû5$ÎÄÏÝ_Ê–˜ $ùª;'ùR»ˆÑœ‚BŒ “ù´×+Äl¤•;K ­ŒóÁär?J™¤FYÔ}M:Š( Š( Š( Š( ¢¹ÿUùÿ#@v_ò_úöoý kf€ (¢€ (¢€ (¢€ (¢€ (¢€ (²ÿ«5”zšL]ÿ¼ÿ_éYôÀô©~ÿà?•Eaÿ!×ÿ¯oýš’jŠ`5ãAÉ pqþzSdH˜ÀÉØHäÏ€1N…;Mo½ãxÐå¾b¸RIe09<’)÷$ïfc¬®[æó®@O˜xãI  {XÚHbvÜ芬ޤ –€ (¢€ (¢€ (¢€ (¨®Õ~ÈÐ]—ü‡Wþ½›ÿBZÙ Š( Š( Š( Š( Š( Šl¿êÍe¦“‡×ä/?×úV}0=*_¿øåQXÈuÿëÛÿf¤€Ú¢˜Q@Q@Q@Q@Q@Esþ«óþF€2ì¿ä:¿õìßúÖÍPEPEPEPEPEPeÿVk(õ4˜>»ÿ!yþ¿Ò³ééRýÿÀ*ŠÃþC¯ÿ^ßû5$ÕÀ( Š( Š( Š( Š( Š*+Ÿõ_Ÿò4—eÿ!Õÿ¯fÿЖ¶h¢€ (¢€ (¢€ (¢€ (¢€ (¢€/ú³YG©¤Àáõßù Ïõþ•ŸLJ—ïþùTVòúöÿÙ© 6¨¦EPEPEPEPEPQ\ÿªüÿ‘  »/ù¯ý{7þ„µ³@Q@Q@Q@Q@Q@ÙÕšÊ=M&®ÿÈ^¯ô¬ú`zT¿ðÊ¢°ÿëÿ×·þÍIµE0 (¢€ (¢€ (¢€ (¢€ (¢€ ŠçýWçüeÙÈuëÙ¿ô%­š( Š( Š( Š( Š( Š( Ëþ¬ÖQêi08}wþBóý¥gÓÒ¥ûÿ€þU‡ü‡_þ½¿öjH ª)€Q@Q@Q@Q@Q@TW?ê¿?äh.ËþC«ÿ^Íÿ¡-lÐEPEPEPEPEPE6_õf²SIÃë¿òŸëý+>˜•/ßüò¨¬?ä:ÿõíÿ³R@mQLŠ( Š( Š( Š( Š( ¢¹ÿUùÿ#@v_ò_úöoý kf€ (¢€ (¢€ (¢€ (¢€ (¢€ (²ÿ«5”zšL]ÿ¼ÿ_éYôÀô©~ÿà?•Eaÿ!×ÿ¯oýš’jŠ`PEPEPEPEPEÏú¯Ïù˲ÿêÿ׳èK[4Q@Q@Q@Q@Q@Q@ —ýY¬£ÔÒ`púïü…çúÿJϦ¥K÷ÿüª+ù¿ý{ìÔTS¢€ (¢€ (¢€ (¢€ (¢€ (¨®Õ~ÈÐ]—ü‡Wþ½›ÿBZÙ Š( Š( Š( Š( Š( Šl¿êÍe¦“‡×ä/?×úV}0=*_¿øåQXÈuÿëÛÿf¤€Ú¢˜Q@Q@Q@Q@Q@Esþ«óþF€2ì¿ä:¿õìßúÖÍPEPEPEPEPEPeÿVk(õ4˜>»ÿ!yþ¿Ò³ééRýÿÀ*ŠÃþC¯ÿ^ßû5$ÕÀ( Š( Š( Š( Š( Š*+Ÿõ_Ÿò4—eÿ!Õÿ¯fÿЖ¶h¢€ (¢€ (¢€ (¢€ (¢€ (¢€/ú³YG©¤Àáõßù Ïõþ•ŸLJ—ïþùTVòúöÿÙ© 6¨¦EPEPEPEPEPQ\ÿªüÿ‘  »/ù¯ý{7þ„µ³@Q@Q@Q@Q@Q@ÙÕšÊ=M&®ÿÈ^¯ô¬ú`zT¿ðÊ¢°ÿëÿ×·þÍIµE0 (¢€ (¢€ (¢€ (¢€ (¢€ ŠçýWçüeÙÈuëÙ¿ô%­š( Š( Š( Š( Š( Š( Ëþ¬ÖQêi08}wþBóý¥gÓÒ¥ûÿ€þU‡ü‡_þ½¿öjH ª)€Q@Q@Q@Q@Q@TW?ê¿?äh.ËþC«ÿ^Íÿ¡-lÐEPEPEPEPEPE6_õf²SIÃë¿òŸëý+>˜•/ßüò¨¬?ä:ÿõíÿ³R@mQLŠ( Š( Š( Š( Š( ¢¹ÿUùÿ#@v_ò_úöoý kf€ (¢€ (¢€ (¢€ (¢€ (¢€ (²ÿ«5”zšL]ÿ¼ÿ_éYôÀô©~ÿà?•Eaÿ!×ÿ¯oýš’jŠ`PEPEPEPEPEÏú¯Ïù˲ÿêÿ׳èK[4Q@Q@Q@Q@Q@Q@ —ýY¬£ÔÒ`púïü…çúÿJϦ¥K÷ÿüª+ù¿ý{ìÔTS¢€ (¢€ (¢€ (¢€ (¢€ (¨®Õ~ÈÐ]—ü‡Wþ½›ÿBZÙ Š( Š( Š( Š( Š( Šl¿êÍe¦“‡×ä/?×úV}0=*_¿øåQXÈuÿëÛÿf¤€Ú¢˜Q@Q@Q@Q@Q@Esþ«óþF€2ì¿ä:¿õìßúÖÍPEPEPEPEPEPeÿVk(õ4˜>»ÿ!yþ¿Ò³ééRýÿÀ*ŠÃþC¯ÿ^ßû5$ÕÀ( Š( Š( Š( Š( Š*+Ÿõ_Ÿò4—eÿ!Õÿ¯fÿЖ¶h¢€ (¢€ (¢€ (¢€ (¢€ (¢€/ú³YG©¤Àáõßù Ïõþ•ŸLJ—ïþùTVòúöÿÙ© 6¨¦EPEPEPEPEPQ\ÿªüÿ‘  »/ù¯ý{7þ„µ³@Q@Q@Q@Q@Q@ÙÕšÊ=M&®ÿÈ^¯ô¬ú`zT¿ðÊ¢°ÿëÿ×·þÍIµE0 (¢€ (¢€ (¢€ (¢€ (¢€ ŠçýWçüeÙÈuëÙ¿ô%­š( Š( Š( Š( Š( Š( Ëþ¬ÖQêi08}wþBóý¥gÓÒ¥ûÿ€þU‡ü‡_þ½¿öjH ª)€Q@Q@Q@Q@Q@TW?ê¿?äh.ËþC«ÿ^Íÿ¡-lÐEPEPEPEPEPE6_õf²SIÃë¿òŸëý+>˜•/ßüò¨¬?ä:ÿõíÿ³R@mQLŠ( Š( Š( Š( Š( ¢¹ÿUùÿ#@v_ò_úöoý kf€ (¢€ (¢€ (¢€ (¢€ (¢€ (²ÿ«5”zšL]ÿ¼ÿ_éYôÀô©~ÿà?•2Í=Q§aû¿'fsß9¤€ÓûB{Ñö„÷¦ö„÷£í ï@ÚÞ´'½hOz>Оô}¡=èûB{Ðö„÷£í ï@ÚÞ´'½hOz>Оô}¡=èûB{Ðö„÷£í ï@ÚÞ´'½hOzdÒ«Çïü¨>Ñ5A9»Î{–úVŸÚÞ€´'½hOz>Оô}¡=èûB{Ñö„÷ í ïGÚÞ€´'½hOz>Оô}¡=èûB{Ñö„÷ í ïGÚÞ€´'½hOz>Оô}¡=èûB{Ñö„÷ ¼ÈÈ@ëY穤Àáõßù Ïõþ•ŸLJ—ïþùSj@( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ]ÿ¼ÿ_éYõ@zT¿ðÊ›REPEPEPEPEPEPEPEPEPEPEPEPEpúïü…çúÿJϪÒ¥ûÿ€þTÚ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (‡×ä/?×úV}P•/ßüò¦Ô€Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@>»ÿ!yþ¿Ò³ê€ô©~ÿà?•6¤Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Šáõßù Ïõþ•ŸT¤Ê ¿ÞqÀû¤z{ŠfÁÿ=%ü×ü)lóÒ_̓þzKù¯øP°ÏI5ÿ 6ùé/æ¿á@Áÿ=%ü×ü(Ø?礿šÿ…üô—ó_ð£`ÿž’þkþlóÒ_̓þzKù¯øP°ÏI5ÿ 6ùé/æ¿á@Áÿ=%ü×ü(Ø?礿šÿ…üô—ó_ð£`ÿž’þkþlóÒ_̓þzKù¯øP°ÏI5ÿ 6ùé/æ¿á@Áÿ=%ü×ü(Ø?礿šÿ…üô—ó_ð£`ÿž’þkþlóÒ_̓þzKù¯øP°ÏI5ÿ 6ùé/æ¿á@Áÿ=%ü×ü(Ø?礿šÿ…üô—ó_ð£`ÿž’þkþlóÒ_̓þzKù¯øP°ÏI5ÿ 6ùé/æ¿á@Áÿ=%ü×ü(Ø?礿šÿ…üô—ó_ð£`ÿž’þkþlóÒ_̓þzKù¯øP°ÏI5ÿ 6ùé/æ¿á@Áÿ=%ü×ü(Ø?礿šÿ…üô—ó_ð£`ÿž’þkþlóÒ_̓þzKù¯øP®ÿÈ^¯ô¬ú`zT¿ðÊ›REPEPEPEP¶p `3Ïz6ï¯ëLhþúþ´mß_Ö€ £ûëúÑ´}Z6ï¯ëFÑýõý€3íõºF’ÞÎi#Svä\pz°5/Ÿqÿ>ßÈ¿øª<ûùð›þþEÿÅQçÜÏ„ß÷ò/þ*€>ãþ|&ÿ¿‘ñTy÷óá7ýü‹ÿŠ ϸÿŸ ¿ïä_üU6K¹¢ìf £$ù‘ñT5Œë{kÄ`ªHÀn ~>ÑýõýhÚ?¾¿­G÷×õ hþúþ´mß_Ö€ £ûëúÑ´}Z‰åD¸HweÙK ÃãRìeï@ÑýõýhÚ?¾¿­G÷×õ£hþúþ´mß_Ö£ûëúÐ0URÆEÀ<ŽVhRTÎ×PÃ>ô€âµßù Ïõþ•ŸT¥K÷ÿü©µ PEPEPEPE9ú'û¿ÔÓhŽûp1É8â’Bá‘W©Îp3Ûê)€ß;§Ëœ¨93Œâœù¥†À8Ï®yü(°R†~ÿQÿ®ÒèU«M—¨Miu*€žJÁ¸9wc>ß.?X5a+:‹yH@~m¤ƒ†äñëÞ€%¶¼’âð¢Åˆ|¥pÄóÉoçR=ÙŠía•0$8•³Ÿ¨ë@7H·†Ý•†[ðä“õùM&¡ÿõÌÿ*Ãßòµÿ®®ÐQ™Žv†ÀÂŒ:”¹CÈÝÉÆ ¤Y±8@^‡¡$Š,ÔR”Ÿòƒþ¸¿ó}ú ¦j­Ä²›„·•¹v]ÃŒdzҵά¶²˜ž6‘‚ãrŒ`2G üêDÔYæ0ýœù¨x»†psžü0§` ·ÕݟǑ#¿%Ô€ÊQˆÆG·jÖ æÿQ'û§ùTZwüƒ­¿ë’ÿ*@rïü…çúÿJϪÒ¥ûÿ€þTÚ (¢€ (¢€ (¢€ (¢€"žòÚ&T’xÕ‚ò TÚóóýõL7öd`ÜEƒþÕ5¯,[h71€=€í¶ÏŸ8ÆK{b—íÖ `Oc÷½?ýt¿ÚóóýõHu <ô˜ÿïª,>‹«ØZX§¹DLä®zsWÿá Òÿçí(•ö¡¥^PDI#®ÀwIïõ§¦£¡¨ù®#f '8?‡Ažþ´"êú*H$KˆÕ†pA=ÿÏëO]kGIE¹ˆ;ýæîhÖ—{§ÞÜ_¹–7·1Ã$ðX³à}y›w®X(¼°7%™"»)Œ§Üz÷  Ú©ƒlò:¢ˆG$â§þгÿŸ˜ÿïª?´,ÿçæ?ûêš/l»Ý&3¹ ûu—ü÷‹ótÅn²x@ãø½?ýt¿ÚŸóóýõGö…ŸüüÇÿ}Q`+¬ñO«Da‘\[;N{й=í´rlyãVdéÅGý¡gÿ?1ÿßU÷}Â…–xÎA‚?E€‰†’îž"G«œtÇLõÇz{I¦<¾a–-û·d>2p? ‰´¸X4rDNAßœpGÜž*Çö…ŸüüÇÿ}P%¿´0¸ä©ÇÍOÓ¿ämÿ\—ùP!®ÿÈ^¯ô¬ú`zT¿ðÊ›REPEPEPEP hÇ%ŸR(òcÿžiÿ|Š<˜ÿçšß"&?ùæŸ÷È Éþy§ýò(òcÿžiÿ|Š<˜ÿçšß"&?ùæŸ÷È ›xIɆ?ûäQöh?çŒ÷È ìÐÏÿï‘GÙ ÿž1ÿß"€³AÿÂÅ9(¤ý(òcÿžiÿ|Š<˜ÿçšß"€&?ùæŸ÷È£Éþy§ýò(òcÿžiÿ|Š<˜ÿçšß"€&?ùæŸ÷ȧÀà â5ßù Ïõþ•ŸTûø†ø¹ÿUÿ|Óá ¾ÿ¦÷Íÿ„‚ûþ™ÿß4ÂA}ÿLÿïš,ÿ ÷ý3ÿ¾hÿ„‚ûþ™ÿß4Xþ ïúgÿ|Ñÿ ÷ý3ÿ¾h°ü$ßôÏþù£þ ïúgÿ|Ñ`øH/¿éŸýóGü$ßôÏþù¢Àð_Ó?ûæøH/¿éŸýóE€?á ¾ÿ¦÷Íð_Ó?ûæ‹ÂA}ÿLÿïš?á ¾ÿ¦÷Íÿ„‚ûþ™ÿß4ÂA}ÿLÿïš,ÿ ÷ý3ÿ¾hÿ„‚ûþ™ÿß4Xþ ïúgÿ|Ñÿ ÷ý3ÿ¾h°ü$ßôÏþù£þ ïúgÿ|Ñ`øH/¿éŸýóGü$ßôÏþù¢Àð_Ó?ûæøH/¿éŸýóE€?á ¾ÿ¦÷Íð_Ó?ûæ‹ÂA}ÿLÿïš?á ¾ÿ¦÷Íÿ„‚ûþ™ÿß4ÂA}ÿLÿïš,ÿ ÷ý3ÿ¾hÿ„‚ûþ™ÿß4Xþ ïúgÿ|Ñÿ ÷ý3ÿ¾h°ü$ßôÏþù£þ ïúgÿ|Ñ`øH/¿éŸýóGü$ßôÏþù¢Àð_Ó?ûæøH/¿éŸýóE€?á ¾ÿ¦÷Íð_Ó?ûæ‹ÂA}ÿLÿïš?á ¾ÿ¦÷Íÿ„‚ûþ™ÿß4ÂA}ÿLÿïš,MäïstòÉÍ×ÿÙlibstruts1.2-java-1.2.9/doc/images/how-to/eclipse/developing-eclipse-style03.jpg0000644000175000017500000004030410404045232030113 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„   (1#%(;4>=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀ;F!ÿÚ ?××õÓ¢µ¸Ë(•}@Æö>µ‘ÿ ÃÐ9?ï±ÿÄÖУÍ܇;; Éú…ÃÌ=§¿Û­ÿ>éú…(×þ}Óôÿ =‡˜{O!¶Ûþ}Óôÿ pÖ[þx'éþ{1{O!F°ßóÁ?!þ¿ÚÍÿ¼ôéWgµµ¼Ôïc DVi4†8àH¾éÀPÃ9ú‘ÛÞ›oqYíôÈÓN¹‚eKÈíoÃÜäc¶J’:ÞâÌiñ™c‰u&Ff`Ìv¡É gø¨æ{•b„v™pÒn¥";g•ÂüÛJ‘ŽJ®A¦Nµ•'—æ¿“»ËÜvoëŽÙ÷­"Ûz’Ò[§U’ƒ×¨ Íý˜“wœJ|Áû³œa½9õ¦NÏÍ·AqŒNmb<œ·AèhæþÌ I»€N%>`ýÙÎ0ÞœúÓ§gæÛ ¸Œ‹€Æ'6± žN[ ô4pc–9'¾[êp:RÛéÒÿi‹ë…‡qób’Û¬j0Há8{ôV}:é4Ö…•Ãdöùd±”°P ~èîG''4é47”Ï0æfYLÒ6 ºG£Ï99ÇAž.ˆ¯ê ™"^0ñ²,¤ŒTîhäméŽýiï ñê&âÒTHÜ;•(±Èàçï8éïŠéWF;HÜÂÍR4`Ä™F¡ÏÌIõ5fQ@Q@Q@Ïø·þ=íÿß?ʹz¤¥Ë÷Çû«ü…2¤Š( Š( Š( Š( Š( Š( Š( Š( Š( Šçü[ÿöÿïŸå\½RÒåûãýÕþB™REPEPEPEPEPEPEPEPEPEsþ-ÿ{÷Ïò®^©érýñþêÿ!L©¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9ÿÿǽ¿ûçùW/T€ô¹~øÿu¦T€Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ÿ‹ãÞßýóü«—ª@z\¿|º¿ÈS*@©$¨,ÞYÒ=ÅwcqÇJœéZˆ‘WûN<N~Ëô÷÷¦€wöF¡ÿAHÿðñTÙ4­E#fœd€HeëùNÀ;û#Pÿ ¤ø ?øª?²5ú Gÿ€£ÿŠ¢À5t­D³ƒ©Æ6œô^¼zwöF¡ÿAHÿðñTX¶•¨« œgqÁÿEéÁ÷§djôÿGÿE€?²5ú Gÿ€£ÿŠ£û#Pÿ ¤ø ?øª,ý‘¨ÐR?üüU4iZ˜Ëý§?eúûûQ`ý‘¨ÐR?üüU5ô­ET©Æyþ=}O±¢À;û#Pÿ ¤ø ?øª…¬5Ä.£½AÁeµ¿Å“øTJJ;+Š–720TÖíÙ@°ô*ËñÅöƒ ש1˜°B«Œ÷³ÔÓÈ…§ð»‰û»˜­â»žvÈO\f3÷±ßýßÌú ⻞vÈO\f3÷±ßýßÌú íõyù_"9â ⻞vÈO\f3÷±ßýßÌú ⻞vÈO\f3÷±ßýßÌú ŸWŸ—õòxƒx®ç²×„ ýìwÿwó>ƒ#x®ç²×„ ýìwÿwó>ƒ'Õçåý|ƒž Þ+¹çl„õÆa?{ÿÝüÏ ÈÞ+¹çl„õÆa?{ÿÝüÏ Éõyù_ çˆ7ŠîyÛ!=q˜@ÏÞÇ÷3è3Ðè_mÖ¬Zê;ô‰DŒ›L ÇŽ‡†ã‚8?¨Á3:R‚»)I=/ìCþ‚‘ÿà(ÿâ¨þÈÔ?è)þþ*¢ÃìCþ‚‘ÿà(ÿ⩯¥jŒßÚ‘œ ÿǰÿâ©X •ú±T‡#ƒþŽÆ ¹[ÛA6¡¡åHö¬<œu&€5$ep:@¦ÒŸñoü{Ûÿ¾•rõHK—ï÷Wù eH/þý—ý}Åÿ¡ ßaþ‡¹Ç¸öþ¿ìЦ\ ÛÊ1œ¡ãÏCüÒ˜¢€ÃËÆ2þ~Qíþ?^ÁôÉF^3‡ôéòŸoðúö/ Š)Š?Òãøœ{Ÿoëøà¬¹¡‘în;–ópÆâB„ ‰Œa=ý({xÌê°ÅïäFùTìLãŽ{ö¯m³$³‹*£²…Y·zc=EqâôJæ”ú‰~#hUP¹‘œ,e¥cµõìy¬¿,gGu?“ w,r{/ õ²“9l‰g·Óžöä ‘1`E™Ìi€Ò©$œ‚z‘œÔ6úZI©IÒy1ÄÏæ©ÜÆ=¢C´°\gžFzä‚Îâµ \év“\ˆíe™•⫪—T¯*»‰ pâ¾B[éÖ³ÚHìí ®’Mn­!bc@Ç”aË뎙|Ì,Ow¤Ù$³ÇÚ¤—¡y¹…w@QÀŽ1×'¥J–6°^_ý”L¿dóíÛÍpûó ¸# 1÷:s×Û™æv‘OWÓl죑m®Y`›É—ïO<ò€/*xËg׎{?¶|=ÙÄÌ1œã§¹Çä>Îu›pWîT4gKEs6oõ2ºh˜ñ ú¼r„Ò,Ĭ_sÈì ÝÁ óÜútç¢^I$¶vO4 Ä[£,iÝê84€Ö›ýtŸïe 9ÿÿǽ¿ûçùW/T€ô¹~øÿu¦TRÿïÙ×Ü_ú­æÿ¨øq¹ÈÏUüÏÒšJŽë‹Y¸än t÷ãó¦”Ppÿ¬Ÿ€>qÐŽ~Qéý–*JŽoõpÎz‘ÇÊ}§òÍI@TkÿRp>âó‘ž­øÿŸ­IUîm­›÷’AbÊ \ž@êÏ¥M1»b#Rs…Pj½Î›iu/™4[ŸÈb3ù‰Â3V’ml6ÎÂÎó ‡kÊ rØç¹ÿÏñ>™w´–w«hÐ31vvNJàr:ñÓ8'ÁpŒi-€Û–æ~Õy%¾°‡Ímå–GcÅI#¾vœó‚O§.ƒÁšÅŸ™ö=UaÝ×ËwMØÝŒãþôÜ}9éúÅ×Ãý}Æ~ÎÝEÁúݸQo¬yb0ËYp 'tÉOÔõÀÍß hÙ·z•Û¬âH¡“+•ÇÏ&ÒP~Pr:‡ŒÔʯ2µ¬5u2ï¼%¨I©M j;Òr¸f&R°ÿyxú©$t"§ÿ„?[XæŽ=cä”±uó ÝËùÂç¯S×5íúrÿ_p¹<Æ?‚uRÎF§\ä³òXIÿxêzàf{ÿ kw×2O.©d(»ßj†Ý•œ6Œz×'·þïõ÷'™þ Õ§#“SŽTˆÈÎBŽpíÑ:zŸAž›ÃzTº>˜m&•e"Fe+»ON§^09ïÔÄês+ZÃŒm­ÍZ+2‚™:³A"¡Š ãÒ€0ÍŽ¢ÌIÔ£$óÿÃÿŠúœe’iwrÌ÷è鬛DÎzîÿ9úezoõÒ¼i”€çü[ÿöÿïŸå\½RÒåûãýÕþB™RKÿ¿eÿ_qèB·Øÿ¤ Ïð7÷ÿÓñÚô˃‹yNq„<çãê?˜úÓôP"9yFs‡õéòðúw/ JpðŒã/ë×å>ÿãôî@Sÿ¤8ÏD^3î}ÿ§â{>™9Âqó¯|÷ç±é@ªº8„#eÎR7ÚÏ„c€r;ÜPn™u4á%{k¨Yne6àá|À7žFÑœàg§röáã¹€+œ€[d°\àCù­c]Ú›h¨+± ‹”õÚsù=;L¹y –òæLIÎXßߎµ…žòïýz—%¡–uk«-6êIãÝ–ía•&Ì™C+C.·AÆ:4Ëw{ªÍÖvׄÙ$ðÈLÄÓç.pyçc“•í2$Óá¶—V2ßYÛ5ÜÄ#D ŽxÀVU' …tHÜ}+¡ Š( Š)î7Ò€*ÿŸóùþ½óó5þã}?Ïóý}ù@A7úé?Þ4Ê@sþ-ÿ{÷Ïò®^©érýñþêÿ!L©¥ÿß²ÿ¯¸¿ô![ìOÚa±±¹ÁÇQïý=€}2à‘o)‰pzvÁΘ¢€;åÈnŒƒýÑÓŸðþ´úd¤‡‡¹~p÷O^ÇúÓ袀 b“ö‡ll^pqÔûÿOOÀôÉÉ0üë÷Aþðô#üúô Ó&…' wÊw¬TƒŒuS@Cke™‘ŽÝÎøGB};Ò_Z}©d†)‚¯Œãz~¢p狈âìîTþ̽ÿ —þ@ãV4ûfew˜Ë$›A;v€Àâ°§†ä—5Í%RêÖtKóƒE#,Û÷#LåA|î*¤áIÜÜŒO­X[tòöÇ*W™>cöíÇñÞßuØmþÙö¯/÷Ýs¸ã8Æí½7cØÎ8Î*z( Š( ‘þã}(¯ùÿ?Ÿëß?3_î7Óüÿ?×ß”®“ýãL¤?âßø÷·ÿ|ÿ*åê—/ßî¯òÊ*_ýû/úû‹ÿB¾Ãý!:#sqíýÙ L¸·”c9CÆ3ž>‡ù¥0E2!‡—Œeý:ü£Ûü~½ƒè’Œ¼ßáõì_@S¤9Çð/8÷>ß×ðÀLœeÆ~uíŸâÇü÷hõZúFbÛ$ˆ Æ4ÜØ ǃž†h¥½Ò™#ò¥¼)¼ïY­Lyʳq”œŽßÖ¥¾¸_68ÊVåu!Kn 3Ç#“ëØúVU©¶TUØ‚;¥â-¯÷RN?T8©4û¶Ÿ|2çB©¹á²3žß•cF¯¼£ëîE4­r§öËGq¼ÞZËö·ŠU ~Xó„#ÜùßgƒŠ±k×WiOI$k,Mö)fÜ$ *À&UTüØêzc¬Ì’ÓZ™¯\¼KžhÎ`x„j…þo1Ž×á9žI覩kE™ì'´š×ìW…/¹£ÀÀ`ØÆXvþëÀ7šíÜÀ¡b[ŒœyLû$Ä„…qHX¤õ­m2yn-Ùæ}ì€~Ë%¿Âä“õéùPº(¢€ Gûô  ¿çüþ¯|ü͸ßOóüÿ_~PMþºO÷2ÿ‹ãÞßýóü«—ª@z\¿|º¿ÈS*@©÷ì¿ëî/ýVóö¨Ç¶6=q•öúwüû4•ÑÖbØÚ³ž˜ÇÐÿ#L ( á É>1ã8õÚ=¿Çú (9ˆAœd¹Æ}vŸoðþ†J( £R>Õ ãpEÏ®2Þß^ÿ—p *;‚cv1½:úîÇüúu  *9àó¶~ñãdmÊËŒçwÔЫy±»ÜK'–w` gvÔÔz…¬— ÀÊ%Œ‚¡þéäßAYÕ‡<J‹³¹OÈÕßg¸Œ¹³ü½êÆ™e5³Í%ÃF^@£ç(Çz楇”&¤Ù¤¦š²q¥[\Iq#nWž0…—¡Ƨ7 Ïû ýÑM“Jhó­nç³ýÒC²nÕ,W†SŒn=+´Ä-ô”‚àJng‘Y&Ž'Û¶7rÙ# ûì9'¯ÒCIMBbòÜΊmä·1¦Ý¥_ïTœð½ÿ„{ä·:%µÆ£öÖyUð€¢•u}ØÇSå¨'ÐØVPE÷é@Ïùüÿ^ùùšÿq¾Ÿçùþ¾ü  ›ýtŸïe 9ÿÿǽ¿ûçùW/T€ô¹~øÿu¦TRÿïÙ×Ü_ú­ö?é3ü Æ}Ç¿ôüGv€}2àâÞSœa9Æ8úæ>´À}ÈŽ^Qœáýz|£ßü>Ëè’œ<#8ËúõùO¿øý;‡ÐEÅ?é3ÑŒûŸéøžÀ¦Npƒœ|ëßÄ=ÇùìzPè ŠÜ$鹂‚§©ÆNTþþûwŽ{¸£¶’D–2U /Ì9àcùÌRnÊàŠË$œ½ºLÇ$og §±ùKþ˜ü©ÑÞËÁ.ÓjÈU‚óð@cè+’g¥öþ¼ÿCGXº½‚Ï`”ÈYóµ#¤bSµA8ôäzŠ«­Ûy·{ærDåRF\³Bð$:×a™3j–ŠÒ©y1 â'(Nq´60Í“ “ž1škjöh¨]¥@Ãq݃Ë\‘¹ò>AÁå°8>”47°OpðDdfLå„m³ à€øÚH<`ð} O@R?Üo¥Uÿ?çóý{çækýÆúŸçúûò€‚oõÒ¼i”€çü[ÿöÿïŸå\½RÒåûãýÕþB™RKÿ¿eÿ_qèB·Øÿ¤ Ïð7÷ÿÓñÚô˃‹yNq„<çãê?˜úÓôP"9yFs‡õéòðúw/ JpðŒã/ë×å>ÿãôî@Sÿ¤8ÏD^3î}ÿ§â{>™9Âqó¯|÷ç±é@¢€ (ŒÒgøŒûéøŽäñù°Iq½JçÓ"“WV%¥ùke¸o˜L ’­!‚þææ6×ÊU•±ϧּØáê©-‡8—ï-&–â›Y£Šx‘ãHË©V*O©ÎQyϯ™wÞûTÅçÀÞo›ÌöÞg•½Ý³Ì6·Ï‚yÎÕéŠôÎrÃèŒòÝ>ûM³g›bbbX6é~ø0Ú}sÀÉá¤ÆÒKÃù~\’]Aç°™¾BÄíûä|Û¸ œàäõ¦šÖúŒ÷^dj²nÄP¡I';œn!Ÿ€7\çŒ_ Š)î7Ò€*ÿŸóùþ½óó5þã}?Ïóý}ù@A7úé?Þ4Ê@sþ-ÿ{÷Ïò®^©érýñþêÿ!L©¥ÿß²ÿ¯¸¿ô![ì?Òã¢78÷ß×ð=šôË›yF3”€(ËÃÆpþ>Síþ^ÅôQ@1GúCœósíýÜôÉÆP gç^Ùþ!ìÏqÖ€EP¤!ÇDnqî=¿¯à{ÉäÁ$˜ÎÅ-\ MÙ\ ju%‘ä˜ô#Ê;=ðUN?_Ozt:†é¼¹ãòs€ŒCa‰Ï¨çÇ5Ï Ïªþ¾ë8º¿[kØ-Ù2&FmÛÀÁÎ?ç§®xÀšn‘ªÛj¶QO±3˜Ñä‰$b,3´ãñ…t™—h Š( ›!ÄN}Ð2áX†dÈàõÿ¯ùÎk^Þ­´HpÉ"Æ'Çéõÿ9Êó®“ýãL¤?âßø÷·ÿ|ÿ*åê—/ßî¯òÊ*_ýû/úû‹ÿB¾Ãý!:#sqíýÙ L¸·”c9CÆ3ž>‡ù¥0E2!‡—Œeý:ü£Ûü~½ƒè’Œ¼ßáõì_@S¤9Çð/8÷>ß×ðÀLœeÆ~uíŸâÇü÷hôPEFètÜ €§¨ÎTŽÞÞ½»öŽ{H¤¶’4Š0Y ¯Ê8àcùÈRjêÀŒÈ®æ·O(ÙÝ’¬ÙÄY±=i¯$÷—6ê-nlÈä¼{@ NyükÊ:œËC¥¸êîZÕtÙ¯o-&‰£ 7''÷пzF߉‘§Þ[ý‹í‚û¡¶_*BþfveŽTmÿV8篷>±ÌkÑ@Q@2uf‚EB 2Ç¥a›E˜“©FIçþ=‡ÿôÿ8Ë$Òîä1™ïÑÒ7Y6ˆ1œõÝþsôÊôßë¤ÿxÓ)Ïø·þ=íÿß?ʹz¤¥Ë÷Çû«ü…2¤ —ÿ~Ëþ¾âÿÐ…o0jŒñ¸#c×_§oË»@IQÝmf ¥9éŒ}GóÀ’ŠŽ“ã.3]£ßü?©’€#˜$ÆCœg×i÷ÿê$ Š*5íR7l\úã-ïõíùö’£¸Æ7cÓ¯®áî?ϯJ’Š(  ipÓ4W g1R‡iÊdƒƒýïoJœ\!´8m†?3ñŒÒnÊàVkáŸ2hޱ‚‡âO?§ô©-µ.%1) àu;ºôÁ>•„+ÆNŸ=ËTWAEPE÷é@Ïùüÿ^ùùšÿq¾Ÿçùþ¾ü  ›ýtŸïe 9ÿÿǽ¿ûçùW/T€ô¹~øÿu¦TRÿïÙ×Ü_ú­ö?é3ü Æ}Ç¿ôüGv€}2àâÞSœa9Æ8úæ>´À}ÈŽ^Qœáýz|£ßü>Ëè’œ<#8ËúõùO¿øý;‡ÐEÅ?é3ÑŒûŸéøžÀ¦Npƒœ|ëßÄ=ÇùìzPè ŠÉ‚Ïg’ò[_ù±ªì„Ê€>è“n8ôç½Yý”"!üß .Ýç¶Ž:ã·óõ4¤®˜ÑB ZÞÞ?)åÚáßp*r>cLšþ+ë«d…÷°ž6À '&¼˜ÎM¨)]–5û)o>ÏäÛ}¥×vÔ•QíÁ8æEbà¯#ž¹Á¯ý’Ém¹ìþѺöYg€²±š2Òlc·º¶ Ÿ½××9ËuU·‰R!B"À>ïqÓŽ)ôQ@R?Üo¥Uÿ?çóý{çækýÆúŸçúûò€‚oõÒ¼i”€çü[ÿöÿïŸå\½RÒåûãýÕþB™RKÿ¿eÿ_qèB·Ø´!Ëccq“Ž£Ûúúþ úeÀ&ÞP °à© ô퀕0E2 CË’Ü¿'û£§ãý)ôÉAß püàŸîž¼‡ô§ÐEÅírØØ¼dã©öþ¾Ÿˆé“‚P`°ù×î“ýáèùôë@¢€ (¢€ ¸¹X÷Ä<Ï7fFÄfÆsŽ@8éO†â9™•7†P Œ§8ê=5çmì±"6Ó†.ÛyÆqÐö¤ûd@¨q*Bóc$à ã}ñY*«™®År“ÑZ’PE÷é@Ïùüÿ^ùùšÿq¾Ÿçùþ¾ü  ›ýtŸïe 9ÿÿǽ¿ûçùW/T€ô¹~øÿu¦TRÿïÙ×Ü_ú­öéqÑœ{oëøÍúeÀͼ£Ê1œñô?Èý)€ú(‘ <¼c/é×åßãõì@ ”eáã8NŸ)öÿ¯bú( ˜£ý!Î?yǹöþ¿€îúdã(3ó¯lÿö?ç¸ë@¢€ (¢€1õËi.¡½·ŽY¡ií‚+$e•Î6±ÚØŒãÒ¬Ù£™dýýËâ5_6XÂ3¿m q‘ÐvôZvŠ=NUº*ÑX qƒ÷@þ£ð>ô.€->ðì½3^MIZr^}Ž…Òh}›]7†Ún¼©9#ï Ázñé׊¤±O=ìZI©G§´«½¤2‡Ï—.ðLŸ0Sû¡ž™<Ü×§Oà^†ÝŽY$MfÍf{Ź{ÉUÁ2ˆZ-’”þYŸ”!㜎yÍt5b (¦Íþ¦O÷M`jºåŽ•qåÞJ!Ý’Ÿ¸$¨íâÞYYÍ ýÔ—>^ÍÃw¡â“®“ýãL¤?âßø÷·ÿ|ÿ*åê—/ßî¯òÊ*_ýû/úû‹ÿB¼ßñõ#î7ê¿ùúS@IQÝǬÜò7$ü~tÀ’ŠŽõ“òÎ:ÇÊ=?¯òÅI@Íþ²@ùÏP9ùO¯ôþY©(¢€ ãêNGÜ^03Õ¿óõ  *µÕͺ-î"W¤«2ärB}?úÔ<èc“oMê?:û>Ëþ}-ÿïÚÔ¸E»´;´Nª¨¡TU (y5 #ªBåŽ9'~$T"5´¶K§ºKx–áÆÖ” ÃŽ êzÊ¥ Š*™¢Ž7W‘ùløfåOÐd~tÍßßh×ùK™aš1&ðddùúTWº…¥É¶Ž Ñßí1œ÷©·7úé?Þ4Ê@sþ-ÿ{÷Ïò®^©érýñþêÿ!L©Ž«÷-¿ëæ?ý Ÿ¯kph°<²„f$ˆ¢ 2çòéêú˜ ©È̶«Æ ÔY@ÏÌ=«JC…b'Ž _óþ=h/5½þøy­èŸ÷À¤æ·¢ß5½þøy­èŸ÷À£ÍoDÿ¾kz'ýð(ó[Ñ?ï@šÞ‰ÿ| <ÖôOûàPæ·¢ß5½þøy­èŸ÷À£ÍoDÿ¾kz'ýð(ó[Ñ?ï@šÞ‰ÿ| <ÖôOûàPæ·¢ß5½þø_A%´¨É$’òg<ÿëïÎùÿ?Ÿëß?3ÿ?çóý{çæ?Ïùüÿ^ùù€óþ?×¾~cüÿŸÏõÿ?çóý{çækýÆúŸçúûò—­ëhâ9'Aä¼þQ`€ì'8Ç=?ÏJf§?›ohѲ2=ÄD2†Ž¢€.ÑHÍþºO÷2€9ÿÿǽ¿ûçùW/T€ô¹~øÿu¦TCWeHmÙˆU[˜É$àšƒVºÑµX%·¹¸£v$ÁSØCLëP´º’Ò8'IíQ£ýáZ—ú…¥¡òî'DvÃ'œsÏùýzÐ?í?þ~£ýhþØÓÿçê?Ö‹liÿóõëGöÆŸÿ?Qþ´XûcOÿŸ¨ÿZ?¶4ÿùúõ¢ÀÛüýGúÑý±§ÿÏÔ­þØÓÿçê?Öí?þ~£ýh°öÆŸÿ?Qþ´liÿóõëE€?¶4ÿùúõ£ûcOÿŸ¨ÿZ,ý±§ÿÏÔ­ÛüýGúÑ`í?þ~£ýhþØÓÿçê?Ö‹liÿóõëGöÆŸÿ?Qþ´X !´xˆ9¤Çýößãúûó¥þÏçú÷ÏÌŸóùþ½óóçüþ¯|üÀùÿ?Ÿëß?1þÏçú÷ÏÌŸóùþ½óó2VT‰Ý˜*…$±8ŸóÏ Ö©: ›ˆäŽ9¼Ð§£3ê9éM½Ô-.M´pNŽÿiŒà½@Ró®“ýãL Å¿ñïoþùþUËÕ =._¾?Ý_ä)• àƒ…$tÈÿ5½þøy­èŸ÷À£ÍoDÿ¾kz'ýð(ó[Ñ?ï@šÞ‰ÿ| <ÖôOûàPæ·¢ß5½þøy­èŸ÷À£ÍoDÿ¾kz'ýð(ó[Ñ?ï@šÞ‰ÿ| <ÖôOûàPæ·¢ß5½þøy­èŸ÷À£ÍoDÿ¾kz'ýð(ó[Ñ?ï@šÞ‰ÿ| <ÖôOûàPæ·¢ß5½þøy­èŸ÷À£ÍoDÿ¾kz'ýð(ó[Ñ?ï@šÞ‰ÿ| <ÖôOûàPæ·¢ß5½þøy­èŸ÷À£ÍoDÿ¾0’ÌIêy4P?âßø÷·ÿ|ÿ*åê—/ßî¯òÊ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (Ÿñoü{Ûÿ¾•rõHK—ï÷Wù eHQ@UM'L7úz\Ëx¬Ìãë† uÔІ‰‘£¥éuŠù©pq·ØþFý‚¿ô¿ÿ¿‹ÿÄÓ©¢E"–T½p \¬¨y}ÞÄNþÁ_úßÿßÅÿâhþÁ_úßÿßÅÿâhþÁ_úßÿßÅÿâhþÁ_úßÿßÅÿâj9ôxmÐ<ºú©u@w©å˜(wÔŠ“ûè#ÿÿ‰£ûè#ÿÿ‰ ûè#ÿÿ‰£ûè#ÿÿ‰ ûè#ÿÿ‰£ûè#ÿÿ‰ ûè#ÿÿ‰£ûè#ÿÿ‰ ûè#ÿÿ‰£ûè#ÿÿ‰ ûè#ÿÿ‰£ûè#ÿÿ‰ ûè#ÿÿ‰£ûè#ÿÿ‰ ûè#ÿÿ‰£ûè#ÿÿ‰ ûè#ÿÿ‰£ûè#ÿÿ‰ ûè#ÿÿ‰£ûè#ÿÿ‰ 6ÂÒ!’IpÇçå›HÅ¿ñïoþùþUËÓ@z\¿|º¿ÈS*@Ƚšìê y夸¶ðK89ó?Ý=)š–§(Óî™#òãež(¥Yð诒F8#`‚ON9á€^êrÇ$7^Û8§”1Y÷Ø’dÆ1•$sØ~X¸s}üÙ$®K¢œ«6rê§œàt#Ü’? ’W±Þ|$SI ž8šVÇšr6¯ÍÈÈÈ Œç#ÐÞ‘ ÍÇÙï ¸“Od¶ 4ÒãÎ?1ëœ2¼ ÀäW53sa üq½ô¦[-¶îŠò1›÷…Ê>Có' è €À…¡{{K” y¦òI%EIÙdFyUY>æA²t<09Á¹vš¯öI1:Øâ¯$± ®ü¸|¾Ýcš¯n·éd¢ o%›Ìo,˜š1åawdJÌsœíÞs»ýŒÓn享Zý®4G#SïæDJîf9اÞ¥¾\ç‘€ìa¿† W&øÈ±Y»y’Hß;¾Ù² ç îõ'5^ÇϹÓôæ·ûtÊÉn÷F5“Í„‚»ûcÌ$¯ëÚ€4<<—ëpZòyÝÌ_éðȪ%ÈèÎÄâÿVÿ㵿@Q@Q@Q@Q@FóïÿÀòZ¤Å¿ñïoþùþUËÕ =._¾?Ý_ä)• F!Eæ ûÇUF9ê$èGóªòi–’ ÆXH2ïm£p!ˆ\à“ÈÁäúšL´y¼×Œ·,vb™ ‚vgo œñÜÓ¢Óí¢uuWgFÜIÛ8#©$ã ÜtäÐÑÄ‘¼Ž‹†•·¹ÏS€?%.„m¤Åñº8g%JžbGèi 4<ÕôûàÑæ¯£ÿߘš¾ÿ|<ÕôûàÐ毣ÿß5}þø4y«èÿ÷Á¦ÆbŠ5Ž8Ê"ª«@èÅ;Í_Gÿ¾ jú?ýðhóWÑÿïƒGš¾ÿ|<ÕôûàÑæ¯£ÿ߀5}þø4y«èÿ÷Á Í_Gÿ¾ jú?ýðhóWÑÿïƒGš¾ÿ|<ÕôûàÑæ¯£ÿ߀5}þø4y«èÿ÷Á Í_Gÿ¾ jú?ýðhóWÑÿïƒGš¾ÿ|¥wÉÇì*½ 9ÿÿǽ¿ûçùW/Mérýñþêÿ!L©¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9ÿÿǽ¿ûçùW/T€ô¹~øÿu¦T€åL®âê£8ç4»þz§ä€ ‹ÿ=Sò?áFÅÿž©ùð bÿÏTüøQ±çª~Gü(Ø¿óÕ?#þl_ùꟑÿ 6/üõOÈÿ…þz§ä€ ‹ÿ=Sò?áFÅÿž©ùð bÿÏTüøThÚæH·4j¬Ä9Îé@Q@]N¶¶³\H H‘‚õÀâ¢7@àéw úkÿ í7_ô ¹ÿ¿°ñÊ>Óuÿ@»Ÿûûÿ¦ö›¯úÜÿߨ?øåiºÿ ]ÏýýƒÿŽPö›¯úÜÿߨ?øåiºÿ ]ÏýýƒÿŽPö›¯úÜÿߨ?øå!º¹PIÓ.’eƒÿŽP´ûØõ 4¹‰]É_$„úUÃV È™¿áHbÿÏTüøQ±çª~Gü(Ø¿óÕ?#þl_ùꟑÿ 6/üõOÈÿ…þz§ä€ ‹ÿ=Sò?áFÅÿž©ùð "™%yV3Ÿ)öŽ À<~u%sþ-ÿ{÷Ïò®^©érýñþêÿ!L©çýJÿ¼¥RÔ®žÊͦŠ>MÈ‹í»‹0QÏn´^b9ï|¨c/ÙÌÞrä’FÓ´.2~WSøã­)ÕbûL`6!1ÈϹ8`PÚyÉßÓ9ëËÊ^۽Ǯwä¨;)#¨ Œ0x<CTæÕü™µÚøôŒÈ‡úݨ‡O—”~>Æ€,I©ÚDd!Qbͱ¶ –±‚F'ƒèj_µÁçy[þ3ÊÆÞÙ¿÷Ï4€¤Ú¶59,óf›$Xÿ{s¶FʩʦÞ~ö<‘O›U‹ËgmÌdFô`YÕK)8Ü0ÝFG#Ö˜uxMâ"“ä˘œn!.ÃŒ6w™ÏëÌË©Ú3ǘD’’6F ‘Œ‚¤d}àyíÏNhåQ¶ÿ½÷û‘ìÔ€½ERÖ¿ä ÿ^Òè&´&ÿ]'ûÆ€EAuqä*]òÊÛ#Là3`žOa€Iúq“U$Õ…´‘ÅwŽVp¬‹ ¹R¼e²P®0 °/BÎñ–?-ðnÉ™÷Ç\~g­IH¢ºÿY¿Üoå@Þÿ ïÉÿ£¶fÿ]'ûÆ€P]\y W|²¶ÈÓ8 Ø'“Ø`~œdàP>Ó$o¼‡cÀ[póq޼(#¿jjêv7”’åFðŒS$ümäŽ{ЧjP¸i ‚‘ ùÏÜãçàòçŽzQmz.o%Ž2 K88 䳂zcgN ç4rŠ£¦}ûïúùoýjõsþ-ÿ{÷Ïò®^©érýñþêÿ!L©çýJÿ¼¥RÔcimpˆîË$rLdíulr@íë@ïh÷S"­Íªmæ6R]ÕÎì9%IRîŽ)m´†o5¤dðùb6aÊŒœ}Ï¡ÜsÆA`Kg¤ {ÁpÆÙ›sH]mÀ³g9bOË’p8ÀÉç%þ‘öË{¸Äþ[Ï'˜¯³>_îÄdc<åCøµ"èp}¢Vt£È[÷ JÛó¸3œ|Ç §=s%¾”ÏÌûäNóŒy’Nþ¼}ù8éóû µ¿“5Ì›·yò 1»ò*ãÿÏãTWGm°#Ü‚–ÁG‚] sÉýÚŒŒwⶆÒG2ÜFðA• {Fþl7ú°g'¥X²ÒŤñÊ *U\†|Å9ö;“×®0)£Tm¿ä/}þä_û5 /Q@µ¯ù_ÿ×´Ÿú ­ ¿×Iþñ Q@][ùê…[d±6øß Ø#‘Ü`~¼`àÕI4‘s$rÝÈ$•\3R€€®/9\-œ“ŸÃ Ы¤Ae“ÌaÆý¸'Ó>øëÈt©)TW_ñë7ûü¨;Âÿòƒýù?ôcVÌßë¤ÿxÐ* «=P«l–&ßã![r;Œ׌©s§Ov‰ö™met' öÅ¢ ã…¾ðÇ= æ›m¤}žÇìÞ~ïÞC&í˜ÿV#Æ{ù†}©€¤3ÙÃk$°K±_!dƒpÀR¿8Ýóp{mägÚ¬XiâÊFudÃF©µ#£ íÀÏÓÛ’O4vŠ@QÓ>ý÷ý|·þ‚µz€9ÿÿǽ¿ûçùW/T€ô¹~øÿu¦TÊ]I´Ar É Ÿ“õϵAö}Cþ‚ÿà8ÿ`gÔ?è!þñ£ìú‡ý#ÿÀqþ4}ŸPÿ „ø?ƳêôÿÇøÐö}Cþ‚ÿà8ÿ>ϨÐB?üã@ÙõúGÿ€ãühû>¡ÿAÿðgÔ?è!þñ£ìú‡ý#ÿÀqþ4}ŸPÿ „ø?ÆŸgi,Í4Ó‰^P£„ÛŒgÜúк)í¿Úìn-·ló£h÷c8ÈÆqY¥êîìÍ®rÇ'øÿÙ©€ŸÙ:·ýÏýø?üUÙ:·ýÏýø?üUÙ:·ýÏýø?üUÙ:·ýÏýø?üUÙ:·ýÏýø?üUÙ:·ýÏýø?üUÙ:·ýÏýø?üU!Ò5R:ÞAàƒoÿÙQp44«#§iñÚ™<Ò…Žð»s–'¦O­#輌ÿoŒn$à[ð?ñêO³êôÿÇøÑö}Cþ‚ÿà8ÿ>ϨÐB?üãGÙõúGÿ€ãühû>¡ÿAÿðgÔ?è!þñ ìú‡ý#ÿÀqþ4}ŸPÿ „ø?Æ€$±µ{e—Ì”JòH\°]½€é“éVY•³°UQ’Ç €ç¼VÅ­-˜£&X­×⹚ =._¾?Ý_ä)• PEPEPEPEPEPEPEPEPES€9ª®d•ì+üH¬2}‡vô^ßÍ‹â`®×.Ç÷‡,}Ϲë\Ý0/6±¨³näÉ÷¤þ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀!¸½¹ºP³ÌÒ9»TÿÙlibstruts1.2-java-1.2.9/doc/images/how-to/eclipse/developing-eclipse-style04.jpg0000644000175000017500000003452510404045214030124 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„   (1#%(;4>=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀ¬¤!ÿÚ ?±â gS±¿’;(Ñ Š$g&-Ûsêk%üY«ÆåB®½Aˆq]P¥Ìœšbjž°ß¡J<]ªzÁÿ~…W°€¹ØáâÝSÖûô(,Ôý`ÿ¿baçbê~°ß±N*Ôýaÿ¿baçbÿÂU©zÃÿ~Å/ü%—¬?÷ìQì ì_øJ53˜ïØ¥'ÔqœÃÿ~ÅÂÎÅÿ„›Qõ‡þýŠQâmCÖûö){;þ]CÖûö)á$Ô=aÿ¿baçbê°ÿß±JîÜI&ç$qŠgü"z/üùûèÿZ©$¬™<¨_øE4oùó÷Ñ£þMþ|ÇýôiûY÷TðŠèÿóè?ï£Kÿ®ÿ>ƒþú4{Y÷Tð‹hÿóè?ï£Kÿ¾‘ÿ>ƒþú4{Y÷Tð‹éóê?ï£Gü#GüúûèÑígÜ9Â1¤ÿϯþáʃþ­'þ}Gýôhÿ„kJÿŸoüxÑí'Ü9P¿ðé_óíÿ?áÒ¿çÛÿ4{I÷DðŽióíÿ_øG4¿ù÷ÿÇÒ}Õü#ºgüûÿãÆ—þí3þ}ÿñãKÚK¸r ÿ„{LÿŸüxÑÿþ›ÿ†€+K¯ØÃyÕK² ÃnJœ1ê%Þ½mo#Ed˜l!0b£Žý¾(hu‹I¯þÄ®Døû§#sŠ‘5+gÔ^À6'QœdsÐúû÷  í¯YÇI/™Œí. oÁÚqÏ©}iÑk–2ª”á°ãŸê¤}që@]Þ¼v1ÝÛ¢:1BC’§kÓŽ¼Ó#Ö¬ä¹{pøt}œ`y$F9ïŠQ¬Z‹x {…Ýì õÇ{RM¬Û@ó VeX‰Rû>RÀn zœsøPŽ«}¾\Ùé÷:67úãñªðøŽÂBªÒáÌaÈ»wcz{P‹mE®/žØÛMXÕ÷8Æ2X`ú}Ú½@Q@Q@Q@Q@Q@Q@Q@fxþ@³¿þ†´ 1]ª´]Ä‚–ëP¶··—#ÛX©áIê>•sRÓ4­21<Ë|Qíé#6Ìsžµ2nö*+B5¹Žkyes´H›LÒ6Ö€éÞºBG¢~f¤£×¿ä1qþõgÖeµmþ¯üú eÅšO I,2c¢l†€#m2h­",C+`áŽX} þU趯.òÒàUð¬Nr=ò3@çÅÇœ¯)'’¥¸-ŒúÓcÓaŽ÷í*ÒnˆMß(-ÔãÜÐ_Iµt~pb ƒr¹`Äþ`PÚM«©˜Ç°¹9n¹Î}s@Oeâ4fu1û´8VÆ1‘튮º-ª¬ŠL¬®‚0¥¸E /¦(GÒàk¤œM¬bœ) `}0? €è±K-Ã\K#¬²T ¹]¹úã?O6ÎÓ«0rw'ä.ëŒ †Ú(;¥d®ìpìzñ@.œƒq3ÎYã1»oå‡8çÔdâ®PEPEPEPEPEPEPEPYž#ÿ,ßïÇÿ¡­4<íU¤zèF#lþ'6yþûè&¯kš­ö©-´Ë!‰ ¾;‰nRØ£§7üRVƒý¤ÿÐÅuçêïRQÀkßò¸ÿz³ë2Z¶ÿWþ}K@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@TWvÑ^[=¼ëº7êÇ¿ZÌÿ„_Lþäÿø'øÓO…´¿ùç?þ?øÕs>äÙ÷úM–—wc5ºº1˜©/+0ÆÆõ5™&AskmyV÷/ºA´úžŸ…R»Жt·¶Óaµ·pU0쟼+«+ìïºo@Zž}¯ÿÈbãýêά‹=jÛý_ùô-PEPEPEPEPEPEPEPEPEPEPEPW°\ Kˆc•;]C ¬tm7þöŸ÷åÂÄ ¤ØÆáÒÂÑXr„?J°c>ƒò4î›øƒþC7?ïVuHÏK‘ˆnÇ£°íìi»ÛûÒßÖÿWÞßÞ“þþ·øÑ½¿½'ýýoñ¢àÛûÒßÖÿ7·÷¤ÿ¿­þ4\{zOûúßãFöþôŸ÷õ¿Æ‹€ooïIÿ[ühÞßÞ“þþ·øÑp íýé?ïëÛûÒßÖÿ.½¿½'ýýoñ£{zOûúßãEÀ7·÷¤ÿ¿­þ4ooïIÿ[üh¸öþôŸ÷õ¿Æíýé?ïëÞßÞ“þþ·øÑ½¿½'ýýoñ¢àÛûÒßÖÿ7·÷¤ÿ¿­þ4\{zOûúßãFöþôŸ÷õ¿Æ‹€ooïIÿ[ühÞßÞ“þþ·øÑp íýé?ïëÛûÒßÖÿ.½¿½'ýýoñ£{zOûúßãEÀ7·÷¤ÿ¿­þ4ooïIÿ[üh¸öþôŸ÷õ¿Æíýé?ïëÞßÞ“þþ·øÑ½¿½'ýýoñ¢àÛûÒßÖÿ7·÷¤ÿ¿­þ4\{zOûúßãFöþôŸ÷õ¿Æ‹€ooïIÿ[ühÞßÞ“þþ·øÑp íýé?ïëÛûÒßÖÿ.½¿½'ýýoñ£{zOûúßãEÀ7·÷¤ÿ¿­þ4ooïIÿ[üh¸öþôŸ÷õ¿Æíýé?ïëÞßÞ“þþ·øÑ½¿½'ýýoñ¢àpÚ÷ü…î>µŸLJ—ïþùSj@( Š( šÎ«÷˜© ócþúþty±ÿ}:<Øÿ¾¿lß_΀6?ï¯çG›÷×ó ÍûëùÑæÇýõüèócþúþty±ÿ}:<Øÿ¾¿lß_΀6?ï¯çG›÷×ó ÍûëùÑæÇýõüèócþúþty±ÿ}:<Øÿ¾¿lß_΀6?ï¯çG›÷×ó ÍûëùÑæÇýõüèócþúþty±ÿ}:<Øÿ¾¿lß_΀6?ï¯çG›÷×ó ÍûëùÑæÇýõüèócþúþty±ÿ}:<Øÿ¾¿lß_΀6?ï¯çG›÷×ó ÍûëùÑæÇýõüèÁƒ ©{RЮÿÈ^¯ô¬ú =*_¿øåPÍ*Á“>vF¥Ž=ÍHC{ §k€ãd˜ þy¢òØíٔɿ±O“k°‘S2 åœ0qžÕfÖÓE»Ýä[@Ûzþïv<ŽG¿J±ý§Ï”÷À£ûNÿŸ(?ï@ö>ÿ>Pßì};þ| ÿ¾ØúwüùAÿ| ?±ôïùòƒþøcéßóåýð(þÇÓ¿çÊûàPý§Ï”÷À£ûNÿŸ(?ï@ö>ÿ>Pßì};þ| ÿ¾ØúwüùAÿ| ?±ôïùòƒþøcéßóåýð(þÇÓ¿çÊûàPý§Ï”÷À£ûNÿŸ(?ï@ö>ÿ>Pßì};þ| ÿ¾ØúwüùAÿ| ?±ôïùòƒþøcéßóåýð(þÇÓ¿çÊûàPý§Ï”÷À£ûNÿŸ(?ï@ö>ÿ>Pßì};þ| ÿ¾ØúwüùAÿ| ?±ôïùòƒþøcéßóåýð(þÇÓ¿çÊûàPSA°ÁÆ€“µFAQR`púïü…çúÿJϦ¥K÷ÿüªµìF{)á\æHÙF=Æ*@¥ ŠÉ &ÖKp±ºfB¬Il ‚ èëQϤË2ä‘[xÌ£T+ÜóóS[}6KyVhäŒKÈl«AÛêÙÏÊ;ÔËdÂÅ-Lƒº`¿Â¬>üPk&IY±p´›öxç<`Ž~¹éHÚ&ûq OÀEBBú#/¯û_¥Y³±klÑ’\³aIÏËŽ $Š·l¬5˜¤Áذ°-Ž$P°éqC?ž—,² 7¨ÎFÞœäóÖ’]*'¶ŠºxÂÀ°1 ô:ô¦ý—îí ²Ê 0nî¸ãñ¥ŸH°’xä"‹`ÁU…HÆsÆGÜPͦÅ,r+\¹ó;îPC7LFö ¬ùbáÈ˨W§Ñ¨°èÉ儹¹fT•ž5PÐdÝ×ç­é–Új°‰—WÓ8Ÿs@üÔþõjz€5?½GšŸÞ ÍOïQæ§÷¨óSûÔy©ýê<Ôþõjz€5?½GšŸÞ ÍOïQæ§÷¨óSûÔy©ýê<Ôþõjz€5?½GšŸÞ ÍOïQæ§÷¨óSûÔy©ýê<Ôþõjz€5?½GšŸÞ ÍOïQæ§÷¨óSûÔy©ýê¥xA`GLÿAUéÃë¿òŸëý+>˜•/ßüò¦Ô€Q@Q@‘Б@ ¸úŸÎÇÔþtn>§ó£qõ?©üèÜ}Oç@ãê:7SùиúŸÎÇÔþtn>§ó£qõ?©üèÜ}Oç@ãê:7SùиúŸÎÇÔþtn>§ó£qõ?©üèÜ}Oç@ãê:7SùиúŸÎÇÔþtn>§ó£qõ?©üèÜ}Oç@ãê:7SùиúŸÎÇÔþtn>§ó£qõ?©üèÜ}Oç@ãê:7SùÐOSEpúïü…çúÿJϪÒ¥ûÿ€þTÂB‚II=ª@lr$«º7W_U9â@ÆHàPÒ¤z@ I=- çp}¨h Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ]ÿ¼ÿ_éYõ@zT¿ðʪ꼺}ÌqŒ»ÄÊ£Ôj@¤,nbY&<£–òÆÄÜ6íãŸz­*^ìQ™$$ybGÉßµ·§åÎÚ`Ko ÚüïµIãò†ÚÀñ‚~bHûÝÿ –Þ àÑIJ¬¨@a¿$ŒÛNxÈÎ:~ ñÞÿg[•m¿ºÝ'Ý\r<¶sÏ=¹¥6w+y~ý£~Sæ’CÎI9##§Oje¥­ó¼ks%ÆÍÙ“ç)ÎÓœÄã8ôÔØíïRÖBëqö‰¶¿ ò€GmärGë@öÁÆÿ089y·º:{gõÍOHŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( ]ÿ¼ÿ_éYõ@zT¿ðÊ£vŒç¢ŒÔ].ä‘ÒÆí•€ ˆúвNÔÜÿ/9íõ§` Ûr2qKH—Q Œ°ÞA zŒÿ1Mó£ó„;‡˜FvûP”È¥I¹÷ï@ „jQÂêëpåöªŒ¨rO'±ÏJ±¡ÚËi$ÑÈ®U-•û cë{P­€( Š( Š( Š( Š( Š( Š( Š( Š( Š( Šáõßù Ïõþ•ŸT¥K÷ÿü©µ PE÷q[º¤…·0È ¤ÿ*ûFIïÓ…Ú0zKÿ~›ü)ØûFIïÓ…Ú0zKÿ~›ü(°öŒ’ÿߦÿ ?´`ô—þý7øQ`í=%ÿ¿MþhÁé/ýúoð¢ÀÚ0zKÿ~›ü(þуÒ_ûôßáE€?´`ô—þý7øQý£¤¿÷é¿Â‹hÁé/ýúoð£ûFIïÓ…þуÒ_ûôßáGöŒ’ÿߦÿ ,ý£¤¿÷é¿Âí=%ÿ¿MþXûFIïÓ…Ú0zKÿ~›ü(°öŒ’ÿߦÿ ?´`ô—þý7øQ`í=%ÿ¿MþhÁé/ýúoð¢ÀÚ0zKÿ~›ü(þуÒ_ûôßáE€?´`ô—þý7øQý£¤¿÷é¿Â‹hÁé/ýúoð£ûFIïÓ…þуÒ_ûôßáGöŒ’ÿߦÿ ,ý£¤¿÷é¿Âí=%ÿ¿MþXûFIïÓ…:+Ø¥‘cA&æ8ŒŠ,¥RA< zš]Ÿí/çHgûKùѳý¥üèÙþÒþtlÿi:zyÍ`]@$ÙÎ?•:€8}wþBóý¥gÕéRýÿÀ*¯w1·´š`7ãg×5 S—S6ŒñT7Þ>X,ÃÏå4çÖ-#œÃ#22®æ/°G^œô§`ûKdì’ÛË,aÉldrG8>Ô£T‹{GåMæ*–dÙ’¸çwMÜr¾"Üë»nõ^™ëþy©-¿ä;oÿ\_ùŠ·mqsö}½*&Ôg†æH<¯>F™Dk¸(PP¶3í´þtÀ…¼IÞÉk;¤hK°S€vîÆqÇ5<ÚÐÀšÙ£ýÙ™€'‚p½˜úàñ@ “Zxä’6³;àVy± ùPÎNùÁ©-¼AÈ%’Úha$1Ô´ƒƒÈç g¨ nõ÷ò.+i£‘!'ÌÚHGÙ¸qŽ„wü*Ãëd jÌflCó¿ çÓ’(¿Û¤ÈQm•;ï7d}>FçéLÿ„Ž6Þb´Ð`+• Ç㯭ª]Ï=ż1,-,]‹å¸ôõÅ1µ«4òª—† Ä"Y}ù  “V_´Kм~XÉcÐd(+ÏÞTqëBYæDµ˜¤[°ûH ´á¹#½ûP6¶ˆÀå%ÁÊä•Rp¬p8Ϲ*â -„ÏhÊ x9Ê—Qø€h³ë’[ÞˆäÃ*²4+óeò„rz7¥I.°óDc†'·‘¢gV”m9’ótÿëPy­¼cdäFWÌm»÷ÈQÜa±‘ÐÕ˜5C-È…í™31‡q`Fà¥áÆ(¬ä²AqpmI…]Un™Ec»Ð žzT÷:ÔPEHe–G!B¢1[†‘€y ¦¬ŒWt/1ù¤ÈBíLg'ÐçŒUEñâWìrLù‰]¸ÛŽ â€Úã2˶ٕcÂ;ï#–(þaÖ¥k&ñâ„Ã);i¶¥€çœcõ  zl¿êÏÔ:ÌêÛê?­aZê×?»ó¢.fûŠ/~ÜœËéH -«$l Ä˳œ€ÁI#¶ ¦i6åanÜXáW®A=ºQ`&³ÔVêy#ÈŠ¹Ã²œcùÕÜQH ÈRëýÈÿöj¹@>»ÿ!yþ¿Ò³ê€ô©~ÿà?•E4K4/‘Ô«cÐñRVÓ-ÝɾBw3z×ÓÔ’XÃ$Žï¼‰ΛŽÖã#éÅ4éðŸ¾Ò¹+´–|–³ôÏGb—’"|æR7ÈwdúŸ^ƒò XÙIoi,ˆÂ3•òЦI9äç­\‚2ºœw$‰)ç'áL M ‹Êò4_4€«üÜFÅCwegwsÒÂcäV8çø¨¸5¶œçæ·_»³ãÇLúwëOx줔É$A›nߘäc§Lâ‹€Ô‚Á‘aedlœ’PN}… ¶Ó„þw<Àrî‡ ð3È‹€Å²Óø/ò®]IlcæÜ =*Hà°$D…BÉÃ=qÐuéíEÀY`°šV’XU™×kdõÇLúqš†âÇOŸ9Œ®\;mlg8ëÇáEÀ™a°@À£Ç>Äzú1üé¢×N"ÝzŒð1ÓŒûQp$ÙgçyÞPó $¶zä`çžx¦[Ãi£Ûm.’ >â>n1ÏáEÀt‰i$Ë1Œyª0­‘Ç¡ÆpqQCi§Ä¨< ÅWnXç=¹3EÀp¶° DxgyÎ^sHöÖMå¥R0Ãj¶7êsž¼Ñp°Ø++,* ã>‡#¿_zkÛiÏ3ÊÐì'w¯^üt¢àI ÚA#IaØ`’Ùãñ4Ó ‘ä0©i9lž9éŸ_΋€Ù-´é —€|§# Žùõõ¦\YióÚµ¿–J…HÊ€¥F?EßdÓ¶mòB2[žqß9ì?*zCcŠéWhç ¦~¼Ñp"‚ÒÆ(²NÍ…²Hüøü*V†Å¡òL_&íß{œôÎsš.¦œ#ذí\¹ M0´ž%ŠHÁEû mú`ñEÀg•aŒy útÆ1ôÇjdvšt[¶@>n¤¶IéêÙ•‹c§‹¹. ygçio”“œgÔ“SÃŒ‰"„+€Aè>™¢àXûTäŠkÜFË€{Žâ‹™=Ç‘I!b8EÍeâUg²º…à # GÓ?Z‘<• >á™Æ”ëøgŽ})ÒI„—ÓîN[qùzœÏ<ð hsý›qûϽò{ç׊ž›·}‚ãvýùÙüXÆzúPìËÉ{q3C$jÊ€oÎ3W©Ãë¿òŸëý+>¨J—ïþùSj@( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ]ÿ¼ÿ_éYõ@zT¿ðÊ›REPEPEPEPEPEPEPEPEPEPEPEPEpúïü…çúÿJϪÒ¥ûÿ€þTÚ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (‡×ä/?×úV}P•/ßüò¦Ô€Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@>»ÿ!yþ¿Ò³ê€ô©~ÿà?•6¤Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Šáõßù Ïõþ•ŸT¥K÷ÿü©µ PEPEPEPEPEPEPEPEPEPEPEPEP®ÿÈ^¯ô¬ú =*_¿øåM©¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8}wþBóý¥gÕéRýÿÀ*mHQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Ãë¿òŸëý+>¨J—ïþùSj@( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ]ÿ¼ÿ_éYõ@zT¿ðÊ›REPEPEPEPEPEPEPEPEPEPEPEPEpúïü…çúÿJϪÒ¥ûÿ€þTÚ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (‡×ä/?×úV}P•/ßüò¦Ô€Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@>»ÿ!yþ¿Ò³ê€ô©~ÿà?•6¤Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Šáõßù Ïõþ•ŸT¥K÷ÿü©µ PEPEPEPEPEPEPEPEPEPEPEPEP®ÿÈ^¯ô¬ú =*_¿øåM©¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8}wþBóý¥gÕéRýÿÀ*mHQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Ãë¿òŸëý+>¨J—ïþùSj@( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ]ÿ¼ÿ_éYõ@zT¿ðÊ›REPEPEPEPEPEPEPEPEPEPEPEPEpúïü…çúÿJϪÒ¥ûÿ€þTÚ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (‡×ä/?×úV}P•/ßüò¦Ô€Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@>»ÿ!yþ¿Ò³ê€ô©~ÿà?•6¤Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Šáõßù Ïõþ•ŸT¥K÷ÿü©µ PEPEPEPEPEPEPEPEPEPEPEPEP®ÿÈ^¯ô¬ú =*_¿øåM©¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8}wþBóý¥gÕéRýÿÀ*mHQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Ãë¿òŸëý+>¨J—ïþùSj@( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ]ÿ¼ÿ_éYõ@zT¿ðÊ›REPEPEPEPEPEPEPEPEPEPEPEPEpúïü…çúÿJϪÒ¥ûÿ€þTÚ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (‡×ä/?×úV}P“*‚ùÜãÐOqLØ?礿šÿ…HÁÿ=%ü×ü(Ø?礿šÿ…üô—ó_ð£`ÿž’þkþlóÒ_̓þzKù¯øP°ÏI5ÿ 6ùé/æ¿á@Áÿ=%ü×ü(Ø?礿šÿ…üô—ó_ð£`ÿž’þkþlóÒ_̓þzKù¯øP°ÏI5ÿ 6ùé/æ¿á@Áÿ=%ü×ü(Ø?礿šÿ…üô—ó_ð£`ÿž’þkþlóÒ_̓þzKù¯øP°ÏI5ÿ 6ùé/æ¿á@Áÿ=%ü×ü(Ø?礿šÿ…üô—ó_ð£`ÿž’þkþlóÒ_̓þzKù¯øP°ÏI5ÿ 6ùé/æ¿á@Áÿ=%ü×ü(Ø?礿šÿ…üô—ó_ð£`ÿž’þkþlóÒ_̓þzKù¯øP°ÏI5ÿ 6ùé/æ¿á@Áÿ=%ü×ü(Ø?礿šÿ…üô—ó_ð£`ÿž’þkþlóÒ_̓þzKù¯øP°ÏI5ÿ 6ùé/æ¿á@Áÿ=%ü×ü(Ø?礿šÿ…q:ïü…çúÿJϪÒ¥ûÿ€þTÚ (¢€ (¢€ (¢€ (¢€°`àdg½Wûëù6¯÷×ò4m_ï¯äi€m_ï¯ähÚ¿ß_Èе¾¿‘£jÿ}#H ˜u‘q¼ÛY\̈å .Ü>­RhÏÿ@Ë¿üsÿЦÿhÍÿ@Ë¿üsÿФþÑŸþ—øçÿHûFú]ÿãŸüUÚ3ÿÐ2ïÿÿâ¨þÑŸþ—øçÿAÔf?Ù—xîñTnÊe¼¶Žt×v¨üª}«ýõüWûëù6¯÷×ò4À6¯÷×ò4m_ï¯ähÚ¿ß_Èѵ¾¿‘ žTK„‡v]”°Àì1þ5.À1—Œ÷¤µ¾¿‘£jÿ}#Ljÿ}#FÕþúþF€ «ýõüWûëùF ªXȸ'ƒQC*Í J¹ÚêgÞ^»ÿ!yþ¿Ò³ê€ô©~ÿà?•6¤Š( Š( Š( Š( ?DÿwúšmW»º[eL©f‘¶¨ÈŸ©ª×÷7P‹e‰FùI wãRuÏO|ÿ:l wO µí´_gO.@ÅŸû˜ Õª mCO›ËÉ_9£¢€yÛ¸ëÓð  –kinâŠ;]ñÈ®wíÀãhïÛŸÒ¦›ìðJ¶ûQºK·+œçŸO¯JKˆ¶\Û¥½´n\±+Œ'zVHÄðª€I ÜsüºÐ´/ùÛÿ×*·H²¡t²Ü3äÅ!Qˆ†;wÝïéLl|°³@ëæ ê«ó\Û¿‘ê²5Ã9Œh[kƒ°–aý±E€Ö¢¤ÿÄ?õÅÿ˜«ïÔ}6ªÜK)¸KxcfBåÙw 1‘ë@®ue´”Äñ´„ oP@-ŒãÐwïR&¢Ï1€[Ÿ5ïñ…ç¿S }TÝÜ[,qI;ò]H ¥Ž£ÛµkR9¿ÔIþéþUÿ ëoúä¿Ê€9 wþBóý¥gÕéRýÿÀ*mHQ@Q@Q@Q@Oym*IÏüñþù}žùãýò(û<óÆ?ûäQöx?çŒ÷È 6¶ä‚`ˆ•èv*°/ÚÕÀÊRX¹##}ü=Í0-ì]¡v£¶8¤ò£ÿžiÿ|Š@TóÍ?ï‘G“üóOûäPåGÿ<ÓþùyQÿÏ4ÿ¾ETóÍ?ï‘G•üóOûäP¬h§*а¤1FNJ)?J<¨ÿçšß"*?ùæŸ÷È Êþy§ýò(ò£ÿžiÿ|Š<¨ÿçšß"*?ùæŸ÷È Êþy§ýò)À0 #]ÿ¼ÿ_éYõ@o¿ˆo‹Ÿõ_÷Í7þ ïúgÿ|Ñ`øH/¿éŸýóGü$ßôÏþù¢Àð_Ó?ûæøH/¿éŸýóE€?á ¾ÿ¦÷Íð_Ó?ûæ‹ÂA}ÿLÿïš?á ¾ÿ¦÷Íÿ„‚ûþ™ÿß4ÂA}ÿLÿïš,ÿ ÷ý3ÿ¾hÿ„‚ûþ™ÿß4Xþ ïúgÿ|Ñÿ ÷ý3ÿ¾h°ü$ßôÏþù£þ ïúgÿ|Ñ`øH/¿éŸýóGü$ßôÏþù¢Àð_Ó?ûæøH/¿éŸýóE€?á ¾ÿ¦÷Íð_Ó?ûæ‹ÂA}ÿLÿïš?á ¾ÿ¦÷Íÿ„‚ûþ™ÿß4ÂA}ÿLÿïš,ÿ ÷ý3ÿ¾hÿ„‚ûþ™ÿß4Xþ ïúgÿ|Ñÿ ÷ý3ÿ¾h°ü$ßôÏþù£þ ïúgÿ|Ñ`øH/¿éŸýóGü$ßôÏþù¢Àð_Ó?ûæøH/¿éŸýóE€?á ¾ÿ¦÷Íð_Ó?ûæ‹ÂA}ÿLÿïš?á ¾ÿ¦÷Íÿ„‚ûþ™ÿß4ÂA}ÿLÿïš,ÿ ÷ý3ÿ¾hÿ„‚ûþ™ÿß4Xþ ïúgÿ|Ñÿ ÷ý3ÿ¾h°ü$ßôÏþù£þ ïúgÿ|Ñ`øH/¿éŸýóGü$ßôÏþù¢ÀdÞN÷7O,˜ÜÝqPPÿÙlibstruts1.2-java-1.2.9/doc/images/how-to/eclipse/developing-eclipse-style05.jpg0000644000175000017500000003762210404045250030126 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„   (1#%(;4>=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀ¬¤!ÿÚ ?ÞÔ/. xÖ¤Ür¹ïÖ¨^ìuòÇüPý±wëýð(þØ»ÿ¦÷À û^ëþ™ÿß”j÷_ôÏþø¿Ú×^±ÿßík¯úgÿ| ?µ®¿éŸýð(þÖºÿ¦÷À þÖºÏü³ÿ¾/ö­Ïý3ÿ¾Ú—?ôÏþø¿Ú—?ôÏþøj\ÿÓ?ûàQý©sÿLÿï@ö¥Ïý3ÿ¾(Ôî?Øÿ¾/ö•Çû÷À£ûJãýûàPÿi\±ÿ| ?´®?Øÿ¾ÚW©ÿ| _íö?ï‘E†Ú7ìß—ûBTÿ¾þПýûäQý¡?û÷È BÿhOþÇýò(þПýûäQa‡Ûçÿcþù¿n›ýûäQ`íÓ±ÿ|Š>Ý7û÷È Aöé¿Øÿ¾E/Û¦ÿcþù}¶oö?ï‘KöÙØÿ¾E}²_ö?ï‘KöÉØÿ¾E¶KþÇýò(ûd¿ìß"€írÿ³ÿ|Š>×/û?÷È¢ÃíRÿ³ÿ|Š>Õ'û?÷ȢµIþÏýò)~Õ'û?÷È í2³ÿ|Š>Ó'û?÷È¢Ã\IþÏýò)~Ñ'û?÷È D‰+•Ï÷È¥ó[Ûþù€ÍÕ&0M!ÃyX÷ÕVû\D‰ Æ1Lnà¨òþ`Ÿ®1Thá@Å¢´¾ÝèÔPE-( ´Q@ E1Š)Â)E1¡E( ¢‚–€ ZcE!-–˜Å¥¤ ¢€”S¢–‰cû”ú&þηºÇÚs ÛqKý‰aÿßÐþt¿Ùðz΀ìø=ó£ìz7ç@'b”¢gÖ™R”_ëþ5ŒuÙmoµ {±ŸgxÖ!•gÞ¤ãœãª€jø¶Ñü€°M¾åQ¡C€dÜÛHCÖ­ÛkÖ×:±ÓÑ[qR@r­´àó@1x¢ídžY Ym yÄ‚(ÙLj‡å;‰ÁÏLUé¼Q ™-'P± ¤Ý€Q m¯9ë@Kâ”·ºžÞ[yd•gh’8ל*†'99ê=:ÔÒx„Émzö–²µ·ó\Ë…JŒçÒ€4´Ë™o4è.&‹Êy1Pr9«TQ@Q@Q@Q@Q@Q@Q@Q@Q@Ž´nÆE´›‡­¾búÑæZvÊG3“ô¨ªXÍ@o0„‘ÁúÕoìM?0ÅÙ Œ_ `ÙÏOz`I•eµ[ªý—w“Éù3Ö›‘amt.a· *îÚC.îNp3ì(ãL³“ZyÈœ³H™?1n´Ë"ÂåѦ· UBu#*@ F{Ðh6‚i¦›|³K1›xb… À*AƧM—˜Òy$³.ÇÌŒDƒù†pÜqÎhÅ­´Vp,0X×î‚űùš–€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¨o|ÿ²Hm™VP8fžLÐ!æ^ê1Csuq›£Dðƒ<ôÏ_z ™GîžÚí$VÊŒ±ª‰-6­ª¯kþüÿõê¼Úî«lßjŒ•ÿUÿצ©¡s³¥Óeº“O†K§Ý#¨l ÀÁäUïþßçYز¬Ä™sŸzeC¥WúÿEus*N–öÑ£ÌÊ_çbª`@>¢˜åÖímãÜ­ˆßåߌàŒñLºñ”nGÞÏš!àè{P£Z³QZ»4sIŒ#ŒO@G½K.¥m¡”¶iTqÏ^={ŽMfÒ”KæF±¥Ùp¤’õÅ2-{O•7,¼t>ÜýAúPÓ^ŸìÙ.íQdØírT¹Ïcèj­Ù‰¼™¬¡UŠõàãô4$ÚÅœ?1ʉ$1«™üûS§Ôà·¹hdY>P»œ/Ê»ŽO¹ ÓYµtÔK±Ô>â„Rp ôæ¢OXù©²yr3Ú‡ Tg¾r(XµU–òRÞm“#0r¸àmÁúÝkB€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ lßê_ýÓ@m‹ĶÛþ¹/ò¢F®„dÊWND)#$ÌZךŸ #ý±ÇuIŸÊ¦M­‡¦Ÿqe}¥Ö¥¶Û’ìp:Væ™#M¥ÚK)Vw…‰=I¤¢GûÝ¿ JÉîQ¥Wúÿ6æÑn ¶ù"‘xF@`;¥0!m.„§™(o3Íó27ÆÒzc¦{w¨¥Ñ-ea½¥)üH[!Îݹ=ú{ÐɦƓ¬ÞlÌã²Ãç#¡8ʉ4Ød½[¢òWlm,Üž3ÓÞ€m*Úu+ b .3üEJŸÐÐ4›o”˺f]ÜɃœŒsÆ:PÞÂ6³KU’HâQƒ´Œ¸ïž;÷¨—GµY‹üå6²ˆ‰ï½Û<ýh%Ñ­¤HÓtˆB¤|àŒñë“øÑ6”³ßK<³?–á?t§•$‚~TöÒ­ØD7Hc*‡Uû ý9鎵4Qîï½™š@‡ ä±n{àõ  ¡ÓcâešbbÈL°áN>^8üu«PÆ"…# ÌBåŽIúšuQ@Q@Q@Q@Q@Q@Q@2oõ2ºh‰´lX[úd¿Ê›#zWJ1e;–ùûËüÅu2jV­q%šÎ†áSq<ã3Z•˜ðsbÇQôÙ¿•u:?ül¹ÿ– üû¢ ¢gûßýlRVOr(:¿×üjZ`PEPEPEPEPEPEPEPEPEPEPCÊTô#€1¿áÓ@ €@'|Öø[Mô¸ÿ¿íþ5\ϸ¬Œý_ÃÖšt³Ä³I™ˆê;UIô区…­ÄqÏ2lmë¸qÈÁªWbØnc•c,1Íæ3’ÎäŽN=+wFSý‹b~oø÷OâÿdPô%”aÏ_Ï4ÚÉîY¥Þ¯õ5-0 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (’C±˜äEta‚¬2áTÿ±4ÌÿÈ:Ïþü¯øS¸†ÿbi¿ô³ÿ¿#ü*Ò¨UUFà `S¸f#}*:†2i؉N‡'î±Ï¥G½¿¿'ýüj.½¿¿'ýüj7·÷äÿ¿EÀ7·÷äÿ¿FöþüŸ÷ñ¨¸öþüŸ÷ñ¨Þßß“þþ5Þßß“þþ5Ûûò߯¢àÛûò߯£{~OûøÔ\{~OûøÔooïÉÿ‹€ooïÉÿíýù?ïãQp íýù?ïãQ½¿¿'ýüj.½¿¿'ýüj7·÷äÿ¿EÀ7·÷äÿ¿FöþüŸ÷ñ¨¸öþüŸ÷ñ¨Þßß“þþ5Þßß“þþ5Ûûò߯¢àÛûò߯£{~OûøÔ\{~OûøÔooïÉÿ‹€ooïÉÿíýù?ïãQp íýù?ïãQ½¿¿'ýüj.½¿¿'ýüj7·÷äÿ¿EÀ7·÷äÿ¿FöþüŸ÷ñ¨¸öþüŸ÷ñ¨Þßß“þþ5Þßß“þþ5Ûûò߯¢àÛûò߯£{~OûøÔ\{~OûøÔooïÉÿ‹€ooïÉÿíýù?ïãQp íýù?ïãQ½¿¿'ýüj.½¿¿'ýüj7·÷äÿ¿EÀi$œ’OÔæŠ@Ksþ¸þ?ÌÔTQ@Q@! u Po_ïÎëýáùн¼?:7¯÷‡ç@õþðüèÞ¿Þ×ûÃó£zÿx~to_ïÎëýáùн¼?:7¯÷‡ç@õþðüèÞ¿Þ×ûÃó£zÿx~to_ïÎëýáùн¼?:7¯÷‡ç@õþðüèÞ¿Þ×ûÃó£zÿx~to_ïÎëýáùн¼?:7¯÷‡ç@õþðüèÞ¿Þ×ûÃó£zÿx~to_ïÎëýáùн¼?:7¯÷‡ç@õþðüèÞ¿Þ×ûÃó£zÿx~t¡èAúRÐEKsþ¸þ?ÌÔ4VßQ·¸PA1åC/˜6ä„~F¥k¨wïP•`„œ@º·îg‹j1Þ0§ÐúRCwo:HÑʤDH~~îÊ€íVþX“Ï‹c¡·ŒéšQs“ËF\»C çÓ´©ŸZ†æ(ç½±ŠU )OCòš`Kw‡jÅ^Ù«*¶Ô'nN?¯Nµ$vº®R8¡f<ê? `Aö ±ÈÿgET}ŸqŽïB1Ö­\XhÖÈ­5¼J§ÊI?… ²Ñ Âà x“ÀÉýüêžsY`H?ˆí@ ¸ PÌÑÁ ’Gp¸ .à3Ó8«Yè³ÊbŽÞ"Œ•Áüp{â€,ÿbé¿óçåGö.›ÿ>qþTbé¿óçåGö.›ÿ>qþTbé¿óçåGö.›ÿ>qþTbé¿óçåGö.›ÿ>qþTbé¿óçåGö.›ÿ>qþTbé¿óçåGö.›ÿ>qþTbé¿óçåGö.›ÿ>qþTbé¿óçåGö.›ÿ>qþTbé¿óçåGö.›ÿ>qþTbé¿óçåGö.›ÿ>qþTbé¿óçåGö.›ÿ>qþTbé¿óçåGö.›ÿ>qþTbé¿óçåGö.›ÿ>qþTbé¿óçåGö.›ÿ>qþTbé¿óçåGö.›ÿ>qþTbé¿óçåGö.›ÿ>qþTÉ,­¬Ôýšpço~ECI€QH n×Çùš„ô  ‹+ÑÖT0a™æ!ƒaH|Çœã¥+é’ˆÕ+íÚ‰—xbO¿©€–ú;ÛhÝ ÄFÝå˜0ŽrÚ=*в±ÝÛïLNkÈ-œçñ4ö•%ÃLc”*Éü`χ4‰£² _5rs·þšþ\Qpc¥›EÆäb ¶æÈ_©8?J¼ÊN£bÀBXú ¦€,K¦Ä÷RÜ-Ï–ÌÁ”"áCHþ#Ç^´ç°O)DW[%W•·íï±$cñ¦Øñ- ¶[¼F¬NÏ™N0J·PO¨éR^i7;J¬(à’KD­¸ž¤ƒÔûÐßO‰ƒâé—zÎhû£ðýrj ]ÞÝ™„ã,èøHÂ(ÚÁ¸ýÚ…4@Ræ .ÿѤmÊ¡yÎÀ¹'óâ®Xé–¶7o®ûŠú\hñ•‡üúÜÿßKKÿ ‡üúÜÿßKGÕåÜžt/ü&?óëqÿ}-(ñ…émr>Œ´}^]Ãÿ„ÂÓþ}î¿ï¡Kÿ }§üð¹ÿ¾…W—pçBÿÂ[iÿ<.ï¡Kÿ e¯üð¹ÿ¾…/a.âöˆ_øK-?ç…Ïýô(ÿ„®×þxÜÿßBa.ãöˆQâ›Sÿ,nï¡Kÿ E¯üñ¹ÿ¾…Â]Åí¿ð“ÛÏûèRÿÂMmÿ“*Ì|Éaa)Rl©”lÈÇMÙçÒ³æšÐ‹"€·HüDñièf‚)qó(— äVœÚMŒæþáHÛºi"0Ÿ•BžöííMÉ«ˆdÒ´ã-ªÛÍ“r|Јؘû¾ìNjK{ÚGŒÃ$>c$ ¤©àƒî)sIîC$eÕ”÷>[o·HД?1‰9;GáV“J±ŽæØ °7¢±`DªÃ–àÑy-ÈeÆ™`‘Ý1f?4ˆT;ðAì0)ÂÒÞÔ¡…Ѝòw6YÀ¼¿‡¥.fÂÈÂáÁ­ˆ-8S…D{1Gƒ”Ëñÿ¿_ýz_øCÔt½?÷ëÿ¯GÖ|ƒÙù‡ü" ÿ?§þýõéßð‰/üþŸû÷ÿ×£ëAìüÅóúïßÿ^¤‡Ã-«$WÌ®½§ëIâ<ƒÙù>’oI'þ™ÿõèÿ„Yçðÿß¿þ½Xògæ/ü"ãþ~ÏýûÿëÒ ÿ/gþýÿõèúÇ{?1G†€ÿ—³ÿ~ÿúô¿ðùú?÷ïÿ¯GÖ<ƒÙ‹ÿàÿŸ¯ü‡ÿ×¥ÿ„tÏÏþCÿëÑõ ö~bÿ/'þøÿëÒÿ`ùù?÷Çÿ^¬y³h#þ~ýñÿ×¥ÿŸüsÿ¯G·ògæ(ÐÀÿ—ƒÿ|õé±ü÷ÿÇ?úô{ ö~bÿcùïÿŽõé±Çü÷?÷Ïÿ^—·òf/öHÿžßøïÿ^”i#þ{ûçÿ¯G·ògæ/öXÿžßøïÿ^—û,Ï_üwÿ¯G·ò³óû7þšÿã´¿Ùßô×ÿ£Ûù³óû?õŸøí`óÓÿ£ÛùÙùŽûý4ý(ûý4ý(öþAìüŘþ?Ò—ì¿íþ”{ ö~bý›ý¯Ò—ìãûߥßÈ=Ÿ˜á?‹ô¥ò½ÿJ^ÛÈ=Ÿ˜y~ÿ¥Vm67bÍ4ù''÷†¥ÔOt5¶bŧEË(i—¦ç'i_ñàŸï?þ„j$ÓÙ•‹”TŒ(  n×ÇùšŠ€*Ç{æ xínOFXI­ÆKBX£&á¬0G=Å;”Öu_¼@>é3lut¬„ÌŠPA"€Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ©é_ñàŸï?þ„håQ@Üÿ®?ó5 XÑs— r‚®7dþÑ¥¸9,}ÄÓ« 2Ä€¹«ÛôÝ.yí!ó®Q29cþ{UÓŠ”’nȉk­j'^³´R÷Oib’5W„䯷?jêÈ,BÝÆ?u¸,¨: œ‰Ó‹¥ n<½Wõ÷“r®¡4°Ù´Öí+ƒó©`GàEUþÓ{g¸jZ8ßh‘ˆÃŒçÖ¸Ê%SW²–ãÈygÁ=:~tßídY$G‚Eh”´½À¢‹Ùõuƒt.›X«Žnà8=éÑê¾zþêÞMàÁ°6ßßð¢À$š„‰¦Û]ÊžVâ¥ÇåÆN)ë©n”B-äóÏ>^GÝõÎq@ͬbãȆòor0ã88?•œþhí~é<ñ˜ •cŒ©1*ŸsO“PD±!äí ÆsœúÊ€#¶Õc¹uÙˆ™‚ 1¸¨lc¯CKý¨†òKd†WdÈÈH¢À2MY«Ý‘—rqŒŒã9ÏëQaÑä€ìóJ.Ò_n´,š°dÍ´†HAiPùõÎt§\ÞI ó) äÇvÛŽI$sÏnßGý¨ßlò¼¦Ý¾VFwõëÓîóPÁ®¨ˆ ¢‘T—*¼ÉÇå@ÐHe…dØÉ¸gku›s¨O‹Ý®Á¸ù”àà“œ1H _7ØâË“""ƒÆì°SôêzÓâ¾\ŒN¡‹(bF £ùÓ‡Qù—m¼Œ¯)‰ó»=ø)¨“Y…ÖVX¤Â ®F7óŽ(° MhšS ShuÜN6‘õ©ŸPskðÀÄË(BÁïž¿J, «˜`-uî,áÁ߇ÛÛ§QV¿´A´Šd‚F2¾À‡çŸ_¥Fš²I¿d„/a–':Ž]e"aº'äÁ°G^Ø4XI«3[I-½»¶ÅïãöÇZ±=ãCä¯Ùݤ°2ü¸÷ ?¶!Ø$Èbcµ_ŽN3ŒuéSÚêÝÊc‹<síž?1ƒô4n©é_ñàŸï?þ„irŠ(  n×ÇùšŠ€ ŸZrýÆü(6Ü0É÷”†×µmî#¹ˆIdt> úCM“¡¤ŸÚz¤’ØIn^^%ùh=½»þ4Ï^+À4øHy¤e.ð¨9üɽv¹ôwÛòØ8þÊ#ŸnÍ 6N5­­e.¬ˆä¶öÏ;vçJç–vïk-ª9Pän;Ë6~¤çµ mg˜»G+µË’wؓקéLV De_t`³ÌNOÝå¹ÉÝ(ÂÒÎ?1B"îÁq» #õ&„µ´WŒ/TåÈHEÎ>ž©†;K‹‰Ð‚$VÀr¼íƒ× õíO6ÖÒ[¬`~íT£AõÜsÉüé¬v 4p¨   ·VØ1ƒžx R¬v3–™H!‰Só3Ðñž½yë@ 4Ád"2çnÊõçæ²±$å • @SŒtÎNâ=Aö«¼FWef ÀI”ÃáéíÒ¬\ÜÙ,³¬©!pŠ$ýÛcnN9éÔžs@ûŽ>ï8Ï™½³×®ìç=ºæ”iÖJ|¿”®1¼àŽ™<òyëÖ€ nm­î£RÌ`#1¸ ~f›uŒ ZdÉ—å* =z¹ã¿#𙢵)"¡[Æì`ö>ǧ5k($¸™Aßn a¸Ÿá Hõ õ  £¶¶ó· ùÃoÛ¼áI¹Àê:¬‹¦Èësæ©e;ÈÛ‚8^~^OlPéaf ÁFÏ\äó×=úÔ0ÏaqÛ( ñ¸8Ãc?ûÜç®hvµ³x×!v‚Bç‚NNzäPµº‚Ò$óU¼ÅÃx©ÎyÏZ’Ú+­ØD€#6n ä× äuëQKŸ¤I&<µUÆâ în»ºäžùõ  d³Éà—‘¼àR3ÏÔÔ« ,±‘ó„RªÅ‰àðyïH×NµN, »vî8éœgúÔÑÁLY) )>Ã¥IUt”&ÁGÞ~ãûÆ€,;,nˆÌ»Ÿ;@9Î)ÔQ@Üÿ®?ó5 é@‰«2A ·Q$bdWM®[‚@9ã¯Ì+BÒê+˜Y¢'î«`ŒpCL *´ö…åó ž[y¿¿ëõ +j7×Ëm¬“¸™çÁš1·r`út9ÅMe§EhK]ÏVj`«Ý‰]ÊûfÀq‚^†£µ°’±#ð¥Îõûϸçv äÐx´‡æ;“2d,Äòsœv#·_Â’M&fpÊam²p1žvA'=çÞ‹€¿Øìd„0‡Ë‰Øž>ø,­ÈÇ^*7°š+˜ÑaICL®÷J$ÝǧºP«« %šb¢"%*C±;“àqÓ^õPè÷%åbbbØ9ó¹ùŠíÇ~œŠ½ee%½Ô²1M¬1Ç%¯O”{dŠ£o¥ÜÕ£†#å"´AˆßŽäボv=(KmãTY„2 èîÇ“Ào#‘Æ¥Kk¦ËâK”Ø»²s’A'>\:Ô²ØLÉ:(„‰¶òHgçiã€=yéQYé@™sš$F $(l‘œg§û2[‹‹‚ Q‰[p”gxùã§N3Öo¦´vÀ6ÆÒô å€üN?•U}Ydge†0ÎO—°TÈQ‘€2~_n½ióhÏ"*Õg<9]Ûˆ;ŽQÓúŠ.§Lp1Ûɲ_03g/׆àôÏzTI£H’HùF%·|ÎÄIógcqŽô\ v6MÃ(A´¹‡*¥˜ž8Ž)nìZáç!—l±¢`ÿ²ÄŸç@'Ñäi¥x¼­Œsd¨^lyÉÇJµu§Ÿ JìBŽTc#ƒÀíÊŠ¦š4Ëq¦T$2»uë¼9Ç늓QÒæºyvy$Hwrw'ËŒ:wëÞ€éSíAŒ$…³¿’yldvãž•è—?g’&0nqþ·q,>M»ztü .Ë 1­/f!³»æÞI99éÐc§¢9òÙ6À Å$hØçsc xàñ@Øi­ky$ÌAÝ»æÞIlœôè1Ó¿áI.3ßË:ÓsïY2K.6ôê3Ö€!µÒg‚o0¤ »¸‰¤,£8ù²G^=;õ«šm“ÙEå³+‚'¸>ŸOå@JX0!Ë®ÒxK†¸ãÇ~´‹¤L|Ö‘`g”î<“· œrp‘¢à:}&Y· B€±lŒääcgOº?§J½onöòÈË»– 6ª0;uó  TRªzWüx'ûÏÿ¡.?ä%gôåW(¢€%¹ÿ\æj 4˜<……ÞYª#*aW`‚8QŠv*gÔ ãùš`>Š@5•Xa€#ЊuPEPEPEPEPEPEPEPEPEPEi$?e+%µÃ“½ XØ‚7â˜<Óq¨[2Ã2ªÜ^2£‘Z4€(  n×ÇùšŠ€ rýÆü(´PEPEPEPEPEPEPEPEPEPEPEOJÿÿyÿô#@( Š–çýqü™¨¨§/Üo€EPEPEPEPEPEPEÖ‘ÝW=2q@ óáÿž©ÿ} <øçªßB€>ùêŸ÷Уχþz§ýô(óáÿž©ÿ} <øçªßB€>ùêŸ÷Ч+£çc+cÐæ€ƒèhÁô4`ú0} >†ŒC@¡ ‚HÀ ©é_ñàŸï?þ„håQ@Üÿ®?ó5åûøPh Š( Š( Š( Š( Š( Š( ¨Ý,fùZHÒM–Ò0y(Ëh ƒåYäù÷Ÿ_Z_±ŽwiíþŽ?ÆÀŠhထ-p$£ŽƒŸ_J8µ!C²˜ z‘ž;Pã¶ŽHÃÆ¶N¤pË þ¾´ï±ùçgÿ€ãüh¸öªªÍåZqöqþ5KEÇö®¥…UÿU®CÚ€7$vóæ=OznöþñüéooïΪJ!,Ñ4,ŠÝz¶1^¢€'ŽáeÝåÌiÁÚÙÁô§ïoï΀ íýãùÕMUÛû6˜ýß_z`ZªzWüx'ûÏÿ¡@\¢€ ([ŸõÇñþf¢ œ¿q¿ mQ@Q@Q@Q@Q@Q@U+~Ùœý–\c?ÞOJ™n­öçÇÓûÞÙþT¦êÜuš>?Úç½SÔæ†HQbE$)SŒ0È䎣#ñª‚ÒžIL‘þô– $Xôá°;ôô¦¬ÑCl‰%ÒHÀrÙ=ÿ•Mö«|ßGÇûB –毚™ Œd}?ghŸòÔí—ò4ÀÛ“ýc}M6b_ÚL÷ ˜–$.¡pTÈåê´À½afö¬Lާ¬K´c!sÉ÷æ®Òªz·üƒgÿwúÐʧ¥Ç‚¼ÿú  ”PEKsþ¸þ?ÌÔTS—î7á@ ¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ¥§ý±ãuºžÝ‘Jæ"A ó‘ì(§öÿÐRûþú_ð£û ÿè)}ÿ}/øSþÃú _ßKþa¿ý/¿ï¥ÿ ?°Ÿþ‚—ß÷Òÿ…ØOÿAKïûé€ì'ÿ ¥÷ýô¿áV´Ý1t÷™ÄòÌòãsHFxÏ ÷ 5œÌÅõÆIÏ“ìRÿÏýÇþ;þ}Š_ùÿ¸ÿDZKÿ?÷øïøPö)çþãÿÿ >Å/üÿÜã¿á@Ø¥ÿŸûüwü)²iÏ*’öáõo?¥_ªzWüx'ûÏÿ¡@\¢€ ([ŸõÇñþf¢ £šåm×9\·O- *¯ý ¿óïuÿ~ZíÿŸ{¯ûòÔÀ?´þ}î¿ïËQý ¿óïuÿ~Z€íÿŸ{¯ûòÔh/üûÝß– ûAçÞëþüµÚ ÿ>÷_÷å¨þÐ_ù÷ºÿ¿-Gö‚ÿϽ×ýùj?´þ}î¿ïËQý ¿óïuÿ~Z€íÿŸ{¯ûòÔh/üûÝß– ûAçÞëþüµÚ ÿ>÷_÷å¨þÐ_ù÷ºÿ¿-Gö‚ÿϽ×ýùj?´þ}î¿ïËQý ¿óïuÿ~Z€íÿŸ{¯ûòÔh/üûÝß– ûAçÞëþüµÚ ÿ>÷_÷å¨þÐ_ù÷ºÿ¿-Gö‚ÿϽ×ýùj?´þ}î¿ïËQý ¿óïuÿ~Z€íÿŸ{¯ûòÔh/üûÝß– ûAçÞëþüµÚ ÿ>÷_÷å¨þÐ_ù÷ºÿ¿-Gö‚ÿϽ×ýùj?´þ}î¿ïËQý ¿óïuÿ~Z€íÿŸ{¯ûòÔh/üûÝß– ûAçÞëþüµÚ ÿ>÷_÷å¨þÐ_ù÷ºÿ¿-Gö‚ÿϽ×ýùj?´þ}î¿ïËQý ¿óïuÿ~Z€íÿŸ{¯ûòÔºb²Ø ue;˜á†Þ4nŠ@P·?ëãüÍE@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Üÿ®?ó5PEPEPEPEPEPEPEPEPEPEPEPEPEKsþ¸þ?ÌÔTQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@-Ïúãøÿ3QPEPEPEPEPEPEPEPEPEPEPEPEPEP·?ëãüÍE@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Üÿ®?ó5PEPEPEPEPEPEPEPEPEPEPEPEPEKsþ¸þ?ÌÔTQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@-Ïúãøÿ3QPEPEPEPEPEPEPEPEPEPEPEPEPEP·?ëãüÍE@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Üÿ®?ó5PEPEPEPEPEPEPEPEPEPEPEPEPEKsþ¸þ?ÌÔTQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@-Ïúãøÿ3QPEPEPEPEPEPEPEPEPEPEPEPEPEP·?ëãüÍE@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Üÿ®?ó5PEPEPEPEPEPEPEPEPEPEPEPEPEKsþ¸þ?ÌÔTQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@-Ïúãøÿ3QPEPEPEPEPEPEPEPEPEPEPEPEPEP·?ëãüÍE@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Üÿ®?ó5PEPEPEPEPEPEPEPEPEPEPEPEPEKsþ¸þ?ÌÔTQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@-Ïúãøÿ3QPEPEPEPEPEPEPEPEPEPEPEPEPEP·?ëãüÍE@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@¹Re?>Þ¿Ãžæ¢Øç©ÿ¾?úôÀ6ùêïþ½üõ?÷Çÿ^€ ‡þzŸûãÿ¯FÃÿ=Oýñÿ× aÿž§þøÿëѰÿÏSÿ|õèØç©ÿ¾?úôl?óÔÿßýz6ùêïþ½üõ?÷Çÿ^€ ‡þzŸûãÿ¯FÃÿ=Oýñÿ× aÿž§þøÿëѰÿÏSÿ|õèØç©ÿ¾?úôl?óÔÿßýz6ùêïþ½üõ?÷Çÿ^€ ‡þzŸûãÿ¯FÃÿ=Oýñÿ× aÿž§þøÿëѰÿÏSÿ|õèØç©ÿ¾?úôl?óÔÿßýz6ùêïþ½üõ?÷Çÿ^€ ‡þzŸûãÿ¯FÃÿ=Oýñÿ× aÿž§þøÿëѰÿÏSÿ|õèØç©ÿ¾?úôl?óÔÿßýz6ùêïþ½üõ?÷Çÿ^€ ‡þzŸûãÿ¯FÃÿ=Oýñÿ× aÿž§þøÿëѰÿÏSÿ|õèØç©ÿ¾?úôl?óÔÿßýz6ùêïþ½þzŸûãÿ¯@Ãÿ=Oýñÿ×£cÏSÿ|õèØç©ÿ¾?úôl?óÔÿßýz6ùêïþ½üõ?÷Çÿ^€ ‡þzŸûãÿ¯FÃÿ=Oýñÿ× çߥ¤·?ëãüÍE@Q@Q@Q@Q@ ‘œ€=Í.ÃýåüèØ¼¿÷—ó¦°ÿy:6ï/ç@ÃýåüèØ¼¿22²oØÊv6ÓÏ|ýiû÷—ó aþòþtl?Þ_΀ ‡ûËùѰÿy:6ï/çFÃýåüè¼—QG Ò–ÊCä ôëQý³þn¿ïÉ íŸôíuÿ~Mlÿ§[¯ûòh°Û?éÖëþüš>ÙÿN·_÷äÑa‡Û?éÖëþüš>ÙÿN×_÷äÑa mF(ä‰%ŠxÌ®KÆ@$Õà„®r÷4l?Þ_·ûËùаÿy:6ï/ç@ÃýåüèØ¼¿÷—ó¨’D¸Fcm8õ¤è  n×ÇùšŠ€ (¢€ (¢€ (¢€ (¢€Õ¯ÔÿJmG<ÑÛÆ^S…éÀ$ŸÀU[»Ù ²óÄ%Xº¨Wäò@Î>½Fš¼*ý£Ò±Q‚:ƒŽ‡ŸÓëKý¦ ÄFâ9‘Šd ¿ÝÁôÁ=iØ )VÇîÜÿ×Ëÿ%«TNúõ­'·]€Ç!>c÷ïúþU:ջʰ°"f$muÉÀõçò¦¿Ú!®`Ž(¤u[ÁÏ_LóSOr-Øy¨Â"?֧߸úÒqÈÈ¥  ‡ÿ^¥ÿ]$þ•°ÿ}¾´ÀJϸ¾–=D[" »U‹lvêHì0:w¤Y‰­üÍŽ”¶ÝØç§ò¡µPÓB †I#fe%@ÉÀíÏó¦„R,±$‘œ£¨e> Óé‘­ÿÇÞ—ÿ_"¶Oúµúš`6 ¹˜Â¨CI#l@zgóù@C-úÙˆ–ô¢¼‡aà~|÷íMMVU")ƒH ŒÈqÏ·|S+fi!ˆþýp0Øë‘‘€sý+RSÓ¿åçþ»·ô  ”P·?ëãüÍE@Q@Q@Q@Q@²¤k¹€É=OÒ™æÇÿ=óÙ ¤†7SÕX‚ U¸¶‰ì¼3ªaƒ)f-´‚®{zÐ2(tøB>áYÃÆ6*pÝ’sÎOãR­•š…a`ªU“6Š`[FbñêÔ¾lóÑ1HE{)%Æ]Fnû-Xócÿž‹ùŠ`U¼ŒNQ£–ÊO˜7^–Ÿ´H¦ãæQÎÇ 7¡9'šm­Q‘’M¥FóüûÔ’Gm,«$¥¯Ý Ùß´7›üô_ÌQæÇÿ=ó€Ër?²µ#‘ïÏà*ûê6~c¤ÅÔÿ¦´lÿçæ/ûêªÍuÚZk{ÛDÞŠ­½Kt'zš`M$[,zlS¸~ó¾Ý¿ÊŸÓ#œÏö•iIÉv“$ñŠžË!Ž$¹Œ$j~nÊöŸüüÅÿ}R7U¹‚{½4C*9+§8­ÇuX×sÉêi€Ï6?ù还¨æò&cºú‚QH Ïek î“/,ÈõüéM•žØ€}¦$Œ•˜ lívéX†ä¯™Æ}~µoÍþz/æ)y±ÿÏEüÅUÓNEÉ<öþ”À»E %¹ÿ\æj*( Š( Š( Š( Іk[yØ4Ф„ Ëšû:Ëþ}aÿ¾ÙÖ_óëýð(þβÿŸXï@öu—üúÃÿ| ?³¬¿çÖûàPýeÿ>°ÿßìë/ùõ‡þøgYϬ?÷À£û:Ëþ}aÿ¾ÙÖ_óëýð(þβÿŸXï@öu—üúÃÿ| ?³¬¿çÖûàPýeÿ>°ÿßìë/ùõ‡þø µ€@ÐPDÙ ›x9öªÿØÚgüø[ß±@ö6™ÿ>ß÷ìQý¦Ï…·ýûciŸóámÿ~ÅØÚgüø[ß±@ö6™ÿ>ß÷ìQý¦Ï…·ýûèô­>)Hì GS•eŒ M5­¼ìhQÈË.h?ìë/ùõ‡þøgYϬ?÷À û:Ëþ}aÿ¾ÙÖ_óëýð(þβÿŸXïGöu—üúÃÿ| ?³¬¿çÖûàTÑC ²(Õ9ÂŒP”P;ëùRîD ˜Sjí¿ºŸ‘ÿcí¿ºŸ‘ÿ?´fþê~Güh°X?´fþê~GühþÑ›û©ùñ¢Á`þÑ›û©ùñ£ûFoî§äÆ‹ƒûFoî§äÆí¿ºŸ‘ÿ,í¿ºŸ‘ÿ?´fþê~Güh°X?´fþê~GühþÑ›û©ùñ¢Á`þÑ›û©ùñ£ûFoî§äÆ‹ƒûFoî§äÆí¿ºŸ‘ÿ,í¿ºŸ‘ÿ?´fþê~Güh°X?´fþê~GühþÑ›û©ùñ¢Á`þÑ›û©ùñ£ûFoî§äÆ‹ƒûFoî§äÆí¿ºŸ‘ÿ,í¿ºŸ‘ÿ?´fþê~Güh°X?´fþê~GühþÑ›û©ùñ¢Á`þÑ›û©ùñ£ûFoî§äÆ‹ƒûFoî§äÆí¿ºŸ‘ÿ,í¿ºŸ‘ÿ?´fþê~Güh°X?´fþê~GühþÑ›û©ùñ¢Á`þÑ›û©ùñ£ûFoî§äÆ‹ƒûFoî§äÆí¿ºŸ‘ÿ,í¿ºŸ‘ÿ?´fþê~Güh°X?´fþê~GühþÑ›û©ùñ¢Á`þÑ›û©ùñ£ûFoî§äÆ‹ƒûFoî§äÆí¿ºŸ‘ÿ,í¿ºŸ‘ÿ?´fþê~Güh°X?´fþê~GühþÑ›û©ùñ¢ÁcÿÙlibstruts1.2-java-1.2.9/doc/images/how-to/eclipse/developing-eclipse-style06.jpg0000644000175000017500000004532310404045230030122 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„   (1#%(;4>=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀ¬¤!ÿÚ ?±â kS±¿’;(Ñ Š$g&-Ûsêk%üY«ÆåB®½Aˆq]P¥“2riˆ<_ªzÁÿ~…(ñv©ëýú^Âçc‡‹uOX?ïРx³SõƒþýŠ=„Šv(ÖnÿéŸýð)ßÚ÷_ôÏþø{‡´aý¯uÿLÿïNµÏý3ÿ¾Æ!ÎÅþÕ¹ÿ¦÷À j·?ôÏþø½ŒCŽÏý3ÿ¾/öÇû÷À£ÙD=£©\îßý£qþÇýð(öQvÚ3ÿ±ÿ|Šp¿ŸÕ?ï‘G²ˆs±~ß?û÷È¥Ó±ÿ|Š=”C‹öÙ±ü÷È£í³±ÿ|Š=”CŽûd¹þûäRý®_öï‘G²ˆs±EÔ¿ìÿß"œ.dÿgþù½”C‹ö‰?Ùÿ¾E|Ÿìÿß"eçg¯1m^rO9Ê³ëœØèµíUô½fvŒi,£ «¦ þbª\ëv2ÛJ°E 3™7,±±Î~î1Ç9ô®¸Âé4dÞ¶$¾×4É­nV ]²¼XN7>7ví·©®dV‹ŠÔ–î8RÕ’(§ÐÓ¨8S… R޾ôÄ:–¢€)Ô€QN p u RÐ!â”RËK@Åiô)ëÒ†1iE p¤†3Å-(§ÐN1@ u ŠZ@8S… J:P®ÈZ¨þUB¸Î“Ò&ÐtÝFO>îÜI&çqb™ÿž‹ÿ>cþú5j¤’²dò¡áÑ¿çÌßFøE4oùó÷ѧígÜ9PÂ+£Ï ÿ¾/ü"º?üúûèÑígÜ9PÂ-£ÿÏ ÿ¾/ü"úGüúûèÑígÜ9PÂ/¤Ϩÿ¾ðŒióê?ï£GµŸpåAÿΓÿ>£þú4¿ði?óê?ï£GµŸpåAÿÖ”?å×ÿ4Â5¥Ï·þÿøñ£þí3þ}ÿñãG´—päBÿÂ=¦Ï¿þ€TÚf½¥u-¼Q¸hã)ꮤ?…eÚø©ã†WÔ‘£ž5Ú‹vVåöŒ18aÈçêÄ~"¸ŸQ·‚'D’9 ¬ªUR9ê0h´~,–-6Æîòß|2JËà t玾õwþx¼ï³ý’_µy›<­Ãû›óž(±ñEµõÝ­ºBñ½ÄbEó/==zv­Ú( Š( Š( Š( Š( Š( Š( Š( Š( Š ÔH„zP¸ôžbã­;ß4gÚƒ/*,#Í|Aÿ!«Ÿ÷«:ÏXŽ5–Ù£|íaƒ‚Aè;Ьښф6£bNæÜw}ì¶rsï@¦i±È°(xáòõÄÝý)–šU•Œ¦[h<·)³;‰Âç8<¥0èº{ßoæP¥¤vc€r0IÈçž)ãJ³ yL^2J³HņzŒ“œqÓ¥DÚ˜ñˆÚÕJ(`«¹°¡º€3Àã¥2÷B´¹W1¨‚W`ÆUÎîoñÇû-ÊÊ;eTiÙBÆÎÄãŒgü+F€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¬Í~{Ë[=œ‰ÖPå—vA qùЀ祂âY^K‰âÜç2Û«möè*5K‹yR[yâ”ç÷P*îú㨭yæ'm_UòøœÓ!QmjÞt1‹´ý䈟êÇvŸ&‚æ:¸ÚQy„—Ú7mU;ŠŒúd­-¾·iyms-£‰ —ÆG#\Tpk[® Ï‘Dcƒû…‰n{1õ  :n­i©ùŸe“vÌÈèz>†«j;a ¿ IÌYFÈûªsÎñv  «[,lùl"a€6€qÎzúúŠ]UM½Íª´Ñ\JP…lmbqÏ\­,ºÝªÙËp…ŠÆvò?‹nïåUÓZgŠ0±–”Üœ…ùQL»Fy늷q«[[É:H[(20 ž€ûœŠ¦Þ"‰–W¶…¦D‹ÌÊ‘ÁÉ?•Nu¸RY#’æ|'Ü]ªIoLníšY5ËH˜‡YBó±Šðø`¤ŸRhFþdjûYw íaÈúÓ¨¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ Ìñüfÿz?ý h@b»Uiº‘1-Ö£mo!aŽCm$ž£éW5-7KÓ#Ì/J¡ß½$c´ŽsÖ¦MÜqØŒ\G5ˆ½²¹¿Ú™¤l6Xë¤`2~çãŸóëPQÀëßò¸ÿz³ê =jÛý_ùô útSÜ´îòüê¨ñ†ù\H~&€ºUº¾àÒíSwʧvîÔP4«Qçpÿ¾píów\~¤Ð­´èmâx”Èñ²ìÚíÐ{SWK·²1‘ÃlÉfçämË@ZØÇk$rK‚¡F[;èÒ«I¢[JŒ­$Ûœ#ïù¤±ãØPòi¶îf8*Ò¸rÊpAýOÔšoö\_eŠ–eò¤2«†ù·Ù9ÇûF€!—A³‘<¼Ê±Ÿ¼Šü1Æ2}ñO]ÙYUA!PÜ3Ü3øÐît»{«ƒ4ÛÙ±…çîtä~@Ò&Ü‚åbÊQɾ=þ±@Òmÿ~Y¤vž3ŒÍÉBŸÇ *ºè§íR;\ºÀU–8ÓøC[®}?Zж´ŠÑBùP" \ðéSPEPEPEPEPEPEPE™â?ùÍþüúÓ@sò7Z«#×B1bX7üNlÿß?ú «ºæ¥k} jBÚu“ÊBŒcQ-ÊŽÅ-9±á;1þÒèbºãÁÏýð*G¯ÈbãýêϨ(õ«oõçÐT´Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Ewmå³Ûλ£~£8÷ë@ŸðŒiŸÜŸÿ$ÿið¶™ÿ<§?öòÿãUÌûŠÈÏ¿Òlô»»­ÕÑŒÅIi™†67©¬É4x£‚æÖÚò8­î_tƒh-ô=? ¥©/BY’ ]6Qãnýá]Y_cÿ}ÐÕ}¯ÿÈfãýêάË=jÛý_ùô-PEPEPEPEPEPEPEPEPEPEPE`zPW°\Dzx"•G;]ATèÚwüøZß•ÿ w]"Å:XÚ© ˆTúU“ÏAùwæþ ÿÍÏûÕR3Òäb†qÀèì;{nöþôŸ÷õ¿Æ•À7·÷¤ÿ¿­þ4ooïIÿ[üh¸öþôŸ÷õ¿Æíýé?ïëÞßÞ“þþ·øÑ½¿½'ýýoñ¢àÛûÒßÖÿ7·÷¤ÿ¿­þ4\{zOûúßãFöþôŸ÷õ¿Æ‹€ooïIÿ[ühÞßÞ“þþ·øÑp íýé?ïëÛûÒßÖÿ.½¿½'ýýoñ£{zOûúßãEÀ7·÷¤ÿ¿­þ4ooïIÿ[üh¸öþôŸ÷õ¿Æíýé?ïëÞßÞ“þþ·øÑ½¿½'ýýoñ¢àÛûÒßÖÿ7·÷¤ÿ¿­þ4\{zOûúßãFöþôŸ÷õ¿Æ‹€ooïIÿ[ühÞßÞ“þþ·øÑp íýé?ïëÛûÒßÖÿ.½¿½'ýýoñ£{zOûúßãEÀ7·÷¤ÿ¿­þ4ooïIÿ[üh¸öþôŸ÷õ¿Æíýé?ïëÞßÞ“þþ·øÑ½¿½'ýýoñ¢àÛûÒßÖÿ7·÷¤ÿ¿­þ4\{zOûúßãFöþôŸ÷õ¿Æ‹€ooïIÿ[ühÞßÞ“þþ·øÑp íýé?ïëÛûÒßÖÿ.½¿½'ýýoñ£{zOûúßãEÀ7·÷¤ÿ¿­þ4ooïIÿ[üh¸6½ÿ!{­gÓÒÜnP?•71’zó[¢ogÂú–õh˜erG¨"„Ó¿'£~t|žùÓ|žùÑòz7çHmeK˜Ëƒ³ TƒìqSm_ï¯äi€m_ï¯ähÚ¿ß_Èе¾¿‘£jÿ}#@ÕþúþF˜Ì‹*G¼n|ã¯n´ý«ÿ=ò4‹±‡Ë*¦i ]«ýõüWûëùb «ýõüWûëù6¯÷×ò4ÄdyÆcÆî½úPö¯÷×ò4m_ï¯ähÚ¿ß_Èѵ¾¿‘ jÿ}#FÕþúþF€ «ýõüWûëù6¯÷×ò4m_ï¯ähÚ¿ß_ÈÔr¼ql ùÛhëÖ¢€ (¢€ (¢€ (¢€ (‡×ä/?×úV}P™ÿ-×ðþUZy=!Ùô¬ª| ks2õ¾Ó&ô1ÅsÈäŒuâ®éÑ˦%$1bÃ8à°þfÚF“ÑX͆ñ¡b‹u†`èÊdxcÈ' rÿ¢]jt³f"$¸ÎV&êWËÝœuûÙ®³"Ä÷×0´ÊZ2%bÆ œg#žƒúU2â[›]óË 4g*Ã×ü“@Q¥M.g†S,Ìr9ºsKs¨Y[nHÂÈ™Fp“ÜûÔJœæ×&áÍüDúEË]Yïgyb72Ÿ¦=:U[-RâHà2Ffó€V3Ö*Iž@¨­³°'rWÕ~@V¡Š”bAÊî N?I².[K¹Èò÷¡Áõ#Ð@T’8™æƒÎxÕ·ap '·NýjÔßò³ÿ¶Ÿú RÖnæ´š`A¡§é²m;@À$“ì?úßsÎêIùÿ‘ªøZþº—.fh¤¶UÆ%—cgÓkéT—S^Ü+!h#Ú¤Œ ¤».}ú è2ÚÂ%´3¼A»oR«êqÚ˜úÐEÌ ;,A·ÔÑ`'·Ô„óÅ’ñ—\þóå9ç€^•5¿ü~ÞÛ?äh Cíl²Ü•¤!”.C|¤óùT¶R3Ü^†bÁ&A=Å?Ö€ ¥™®Œ2!D3:ä’ê=:Õx5cr/áÉÉ5g) †Üù‘• ¸Œ_i¡«Ä•´,6“:dg¥]¢Q@Q@Q@Ãë¿òŸëý+>¨Lÿ–ëø*…•]Jº†SÔ‘RÚ`Ë `Ž„(©;b€!‚Îw-`HÇ.ÍüÍO@RÚÏ6rÃ9 $w8œíUÿá±8YH·Ÿð­!QÃb\SÜÓŽâcŒ¢¢Œâ«[ØLaýÚÆÞ1Øz* Ómˆ!J®æ ØÏcœA:RÿfYí*@'<Èúß…+iÖ­œãäÍ‚}ÇùÍ>H7]A(‘6Ç»#žã”¡¦E}´´å ô*?úÔø´øâM«79É8äñŒt¨”¿¯ë±jVúÅ/!XÌÛ ¶àÀƒþM2-*Õ ³ò¬w Üç‘ÐòMYäÓm%#u]ˆ»TÃN:ŠVÓíYJ¦\d`g<~T±ØÛG"ºm £ Ë`~¾ýibƒeÅĆDÄ›1×°>Þôé-ã’Hœf&ܽzàëQZéÖ¶’Ë,U¥9n¿§§Jeöž/Ú¼°½‚çüý)ëac•ÖB͹›I=3ÇNPF—dvã-ƒõõ>õ<¶°ÍÊ•1GÐÐI§ZG–©ÍÁ°rr@Çò¡tëDŠXÀ%pKÆ€Ó­và0çï363õúS!Òm"G‡.X’Ų2ÙãÓŸOJ‘l-QPP­× #õ'šK‹O1`XäP"‘[œôgjÿ}#FÕþúþF€ «ýõüWûëù6¯÷×ò4m_ï¯ähÚ¿ß_Èѵ¾¿‘ jÿ}#FÕþúþF€ «ýõüWûëù6¯÷×ò4m_ï¯ähÚ¿ß_ÈÔ&TûA€°]ÇŒR‹×ä/?×úV}P™ÿ-×ðþU IÀMHF÷sF³ÇfÆèKÄzãÒ¦‘Ö&Pç›h÷?äS°’Æå‚°;X©úÑ$©O#°€–>€R±Ï’ÉŸš2üFjLŒg#B) ¨*3÷Ž9 Ü1ÔSb•%‰eƒ#ÀúŠvGŽzQ;Š2=Er9 I*E Êì ,ÇÐ i¸U¶38dK8È€´ÇæG~i°ú K‘ê(h Š( Š( Š( Š( Š( Š( Š( ©§ü…åÿ®+üÍrzïü…çúÿJϪÓ?åºþÊ¡uŒ§£ ,[L ²ŽÛ¶ Lã°ª7ÑI?–ñí/‚@¬pc<ã­03ŸK¸’o31#¹ffÝ»f{(#¯¾A©-t¦‹Oº¶%PÎ…8máè=}?ké,âGD†ÞWeÚcþ ‚À¦®›%¾‘{@ZXÈ­»'ô~Ÿ*i.Ó<Œ±B n¨‘’DD…Ž÷IíÖ¢ŸI–ETTŽf8ò¹Œ¤ç’H  m´§·xÛÉ…Ô1>S9!3·æo^=Zu­»>Žm"„DP;¨ dò8${{Ð,´©àža#-’_~I£G#J|úd²]M*¬[Xƒ‡92`ƒ‚qòŽ1ŽG4ÏìË”FTâVBÃy0²Àãž;t§Å¥41BаËss—^9'>ÝúSŧ]ÛŠÓ!P7–Á<¿OÎ’ïIyZAŠÀm~…1´:¯~” º4Òm„cve CH Úxà`mïÇnÕoMÓ>É1•ÂçË  1m¿3ØzŽÔ¥E (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ¤Ÿò—þ¸¯ó4Êk¿òŸëý+>¨Lÿ–ëø*Ф âúÜo)œyÌúg¥Xãþ¹ŸåZQÝ2@‹[Â"îËcœÇ¡ö©œùÆ•ÊPø„Iv±˜@‰ˆ·Œ’:cڴ翵·uIgX°L23éÒœ'Ì9G””O g¡À$á‡u¨£¿´’6u¸Œ*9‰`0À‘ÐÕ’M$±Å·Í‘qÀÜÀdúR4Ñ*îi“’÷_Ê€ní€ÜB]Ã.9¿JeΡoo¬dWh—sF¬ cé@šò`žPáü…%Õ'>ŸZ`ÔmŠ pVG)è‡ úš€kV¦6•RàÆ§nñ `Ûp=Nx«þg%Öd@ï]§rã¨Ç­C³g"ÊC8òŠ „¿ÿЇҕ5Xd´7+á>]»£+¿wLg­Z0*&Œ°;H 2¥:9c”ˆáNÖÒ€EPEPEPEPTo~ÿãý ó®äô5D_•‰n&Œ$cË*Å™³Ó+Ž?:ªÚeŒI–ˆÃqô¨ÓX¶vr yKs&8,0}ËLKªGýžn­Ï‡TÙ§%€þ´ÆÖ­#f¾Ð }FÕlû}êuV`¢NI§}ÛDÚ˜KÙ`q¤Gæfsœm œmÇZUˆN‰†«R„>AP=÷S!Ö­‰T™¼¹ÙBFb£>„â‹zÚâ;¨h²QÆT‘ŒŠ–Ïü†þ½Ïþ„)þBòÿ×þf˜¦»ÿ!yþ¿Ò³ééŸòÝåQÔ[Qÿ}Çýs?ÊŸ5ìÊHª±ðIÚ?•gRq²*.Ìu†ˆâ[¨"P‡*©ÎO©4÷Ò&7O2¼ADÞjDÙe'œ’O#¯AÅU(rFÍÜ%+»}XíB[4"FŽhܰ !>ð ·;õé@ã‘%^6 Œ2ïN Š*ïßü ¡—ªAÌêw[“xçÛ"ªÃ¦Z,J’È„’±±ToLŒš@L¶v‚â33 ×k–“'Çï³[ ó¼˜$‚òäƒê(cbÇçmÀn³ð g${òiEŸïI“q• 9i2H ú( ÛÚG ù¸ûJùaX$@ð»ˆ'¿¨ö©Œ¿fHV>T‡åOÖ€!m>Ä«¡`Ae“ƒ×ó§ ;5àHv‚/™À ƒœ}E=­íZg•¥%ÝvçÌû£9Àôè*M°oÝæó¿ßïŒ~^Ôem]J°#È=ûB„ÿ¼¿õÅ™ S]ÿ¼ÿ_éYôÀôÏùn¿‡ò¨ê@­¨ÿÈ>ãþ¹Ÿå[–¿ñëû‹ü© $¢˜Q@Q@Q@Q@Q@Q@fꥶ©g$„àE/d“”À¹ö ¬®d—Qag ‹BI¹ñÔgr®=r¸=óZôQ@Q½ûÿô03M…™$›XI=NÁGö}ŸüúÃÿ| ìû?ùõ‡þøgÙÿϬ?÷À û>Ïþ}aÿ¾Ùöóëýð(þϳÿŸXïGö}ŸüúÃÿ| ?³ìÿçÖûàQýŸgÿ>°ÿ߀ìû?ùõ‡þøgÙÿϬ?÷À Ãko†ã$`•P*ÿ¼¿õÅ™ O]ÿ¼ÿ_éYõ@zgü·_ÃùTu VÔäqÿ\Ïò­Ë_øõ‡ýÅþTÐQLŠ( Š( Š( Š( Š( Š( ˜ðDòÇ+¢´‘çcÊç®(”|–ú‘š7QÝÇ~yÛ@rA÷Æ+B€ (ª7¿ñþ‚†%’ ŒcIµ¾?#Rµ¾?#FÕþøü0 «ýñù6¯÷ÇähÚ¿ß‘£jÿ|~F€ «ýñù6¯÷ÇähÚ¿ß‘£jÿ|~F€"iP\ˆË/Ó ÈÖª§ü…åÿ®+üÍ 9MwþBóý¥gÕéŸòÝåQÔ[Qÿ}Çýs?Ê·-ãÖ÷ùS@IE0 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (ª7¿ñþ‚†ÿ­o­6¤Š©©M,›àÿX]pV¡#ÖªÜ^]EŒ)2¯–Ò9• ørCÞ˜é7²ÞBÒJŠ#kg®Tcñ«ù¢ EP3ÿ!…ÿ¯sÿ¡ Dÿ¼¿õÅ™¦)®ÿÈ^¯ô¬ú`zgü·_ÃùTu VÔäqÿ\Ïò­Ë_øõ‡ýÅþTÐQLŠ( Š( Š( Š( Š( Š( Š( Š*ïßü ¡Ÿ6£f&pnbÈ'ø©ŸÚV_óóýõJÀÚV_óóýõGö•—üüÇÿ}Q` ¼¹°»¶hZî5 AÈ##=êSKDU–å&(r¬ìç·^hd—J@Ioÿw§åR-Öš¬¬&„,Àç¡=hOí+/ùùþú£ûJËþ~cÿ¾¨°ö•—üüÇÿ}Qý¥eÿ?1ÿßTXb¸ŠãVÀ€ƒ´ÿ´)éÿ!yëŠÿ3@¦»ÿ!yþ¿Ò³ééŸòÝåQÔ[Qÿ}Çýs?Ê·-ãÖ÷ùS@IE0 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (ª7¿ñþ‚†M‰ýÅü¨òÓû‹ùT€yiýÅü¨òÓû‹ùPå§÷ò£ËOî/å@–ŸÜ_Ê-?¸¿•Zq*<´þâþTyiýÅü¨òÓû‹ùPW¢ôU?ä//ýq_æh“×ä/?×úV}P™ÿ-×ðþUHµùÜ×3ü«r×þ=aÿq•4”S¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ £{÷ÿè(`BÊŠÄn=©1«~U Õ¿*1«~Tb?Vü¨Ä~­ùPˆý[ò£ú·å@#õoÊŒGêߕտ*1«~TL¢ímÔLeÉ?P*ÿ¼¿õÅ™¦'®ÿÈ^¯ô¬ú`zgü·_ÃùTu VÔäqÿ\Ïò­Ë_øõ‡ýÅþTÐQLŠ( Š( Š( Š( Š( Š( Š( Š*ïßü ¡¿ë[ëM©¢€ C’Kcqヾs@–M¹*£qä0N84싸,_”àûŸjC$€p£ í<÷ÿõåE€‘I( ÆO¡Í:LÿÈaëÜÿèB‘?ä//ýq_æiÊk¿òŸëý+>˜™ÿ-×ðþUHµùÜ×3ü«r×þ=aÿq•4”S¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ £{÷ÿè(`fM©[‰œbS‚y·øS?´íÿ»7ýúoð¥`í;îÍÿ~›ü(þÓ·þìß÷é¿Â‹ŸÚ¹ÉYÏ9ûKý§nJ …¿Â€ûNß9Û.G9ò[ü)§nF ÊFsÌMþY€¿ÚzMÿ~›ü)?´íÿ»7ýúoð¢ÀÚvÿÝ›þý7øQý§oýÙ¿ïÓ…L· xÕöˆH%ŽwZ‘?ä//ýq_æh“×ä/?×úV}0=3þ[¯áüª:+j?ò¸ÿ®gùVå¯üzÃþâÿ*h (¦EPEPEPEPEPEPEPEF÷ïþ?ÐPÀ­EHQ@Q@U$ÿ¼¿õÅ™ S]ÿ¼ÿ_éYõ@zgü·_ÃùTu VÔäqÿ\Ïò­Ë_øõ‡ýÅþTÐQLŠ( Š( Š( Š( Š( Š( Š( Š*ïßü ¡ZŠ (¢€ (¢€ (ªiÿ!yëŠÿ3@ž»ÿ!yþ¿Ò³ê€ôÏùn¿‡ò¨ê@­¨ÿÈ>ãþ¹Ÿå[–¿ñëû‹ü© $¢˜Q@Q@Q@Q@Q@Q@Q@Uß¿øÿACµ PEPEPTÓþBòÿ×þf€9=wþBóý¥gÕéŸòÝåQÔ[Qÿ}Çýs?Ê·-ãÖ÷ùS@IE0 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (ª7¿ñþ‚†j*@( Š( Š( ©'ü…åÿ®+üÍršïü…çúÿJϪÓ?åºþÊ£©¶£ÿ ûúæ•nZÿǬ?î/ò¦€’Š`PEPEPEPEPEPEPEPTo~ÿãý ÔT€Q@Q@Q@ROù Ëÿ\Wùšå5ßù Ïõþ•ŸT¦Ëuü?•GRm@a8'a­«gAk. „ý© $óûëùÑæ'÷×ó¦æ'÷×ó£ÌOï¯ç@˜Ÿß_Î1?¾¿b}:<Äþúþty‰ýõüèóûëùÐæ'÷×ó£ÌOï¯ç@˜Ÿß_Î1?¾¿b}:<Äþúþty‰ýõüèóûëùÐæ'÷×ó£ÌOï¯ç@˜Ÿß_Î1?¾¿b}:<Äþúþty‰ýõüèóûëùÐæ'÷×ó£ÌOï¯ç@˜Ÿß_Î1?¾¿b}:<Äþúþty‰ýõüê•á²#=¾‚“½€( Š( Š( ©'ü…åÿ®+üÍršïü…çúÿJϪÒقʈ’{qU>Ýkÿ?ßB¾µ.cÿ¾…;ûJùûOûî€í(?çí?ïº?´ ÿŸ´ÿ¾èþÒƒþ~Óþû£ûJùûOûî€í(?çí?ïº?´ ÿŸ´ÿ¾èþÒƒþ~Óþû£ûJùûOûî€í(?çí?ïº?´ ÿŸ´ÿ¾èþÒƒþ~Óþû£ûJùûOûî€í(?çí?ïº?´ ÿŸ´ÿ¾èþÒƒþ~Óþû£ûJùûOûî€í(?çí?ïº?´ ÿŸ´ÿ¾èþÒƒþ~Óþû£ûJùûOûî€í(?çí?ïº?´ ÿŸ´ÿ¾èþÒƒþ~Óþû£ûJùûOûî€í(?çí?ïº?´ ÿŸ´ÿ¾èþÒƒþ~Óþû£ûJùûOûî€í(?çí?ïº?´ ÿŸ´ÿ¾èþÒƒþ~Óþû£ûJùûOûî€í(?çí?ïºC¨[7[¨ÏÕè>Ýkÿ?ßB·ZÿÏÄ_÷ТÀnµÿŸˆ¿ï¡GÛ­çâ/ûèQ`·ZÿÏÄ_÷УíÖ¿óñýô(°Û­çâ/ûèQöë_ùø‹þúXíÖ¿óñýô(ûu¯üüEÿ} ,öë_ùø‹þú}º×þ~"ÿ¾…ûu¯üüEÿ} ‚ÞXåÕehÝ\y+Êœ÷4Ëk¿òŸëý+>˜‘rÈ¡šR¡źŽõIk2‰a‘FP©£ìmæmXˆïáGõ†Ý”2Åd¢€†Ýqº8†NTu¥ûÏüñþù}žùãýò(ûÏüñþù}žùãýò(ûÏüñþù}žùãýò(ûÏüñþù}žùãýò(ûÏüñþù}žùãýò(ûà©ñ¥`Í»ÿ uÇéþ4y·ô¸ý?Æ‹y·ô¸ý?Æ6ïþ×§øÑ`6ïþ×§øÑæÝÿÐ:ãôÿ,æÝÿÐ:ãôÿ<Û¿ú\~ŸãE€<Û¿ú\~ŸãG›wÿ@ëÓüh°›wÿ@ëÓühónÿèqúónÿèqúmßý®?Oñ¢Àmßý®?Oñ£Í»ÿ uÇéþ4XÍ»ÿ uÇéþ4y·ô¸ý?Æ‹y·ô¸ý?Æ6ïþ×§øÑ`6ïþ×§øÑæÝÿÐ:ãôÿ,æÝÿÐ:ãôÿ<Û¿ú\~ŸãE€<Û¿ú\~ŸãG›wÿ@ëÓüh°›wÿ@ëÓühónÿèqúónÿèqúmßý®?Oñ¢Àmßý®?Oñ£Í»ÿ uÇéþ4XÍ»ÿ uÇéþ4y·ô¸ý?Æ‹y·ô¸ý?Æ6ïþ×§øÑ`6ïþ×§øÑæÝÿÐ:ãôÿ,æÝÿÐ:ãôÿ<Û¿ú\~ŸãE€U’è° a:ycŒÖ¬…6â~_J,òz·åGÉêß•'«~T|ž­ùPòz·åGÉêß•'«~Už¦ñ P~T “îhŒ×ä/?×úV}0= Tÿ9ÿë—ô©æ¾–Ò@¡$U än# s߯ w¤€«m«_-’ò&híRig99ǯÿ*‘µIßV™mÞ‚p·¨Ã8æ#éL WW˜i¯qöv™6Y*‚;`¶OÔd{ÓaÕîLIæÇ»91Á#ã¯\zðšåÁ½û<ʼn;ö‚œ€ÙïÜ”Ä×®dx xÌ‘ùÛŸ8ÚFBõë@ÚkW^nŃr¼…Û{€@f#hÉ1ØÂ…¿¸‚úk‘*²2»ù.OÌÊ€œõ!sß­XÓõk™J—XÌ>rÃß~Jƒœôïé[´Q@Q@Q@Q@Q@Q@Q@Q@ ›ýS}+8ÿËO¯õ¤ÀesÖW÷¡]ë+OÇÌû€ç¯céÏÖ€-6­*6ã2dåWï ç뜥#ê· ¤´+Lfí<äc9=Kg©<ÓÊ&b‰s†,20Øçœóô΋vß1s»f3üXÎ?.i%SOù Ëÿ\Wùšäõßù Ïõþ•ŸT£^EçFñnÛ½1ŸN*Ôrĉ(ŒÑ(Ub¼Š@9g‰wmî¸^´Ðöávˆ" 9ÆÎ(¸[˜Õ6* LchR,ðªíX£ Œ`/ô¢à –!q aÏVÛɨä²ËlÑ‚#Ÿo‹)žÁŒQ–Svò G¶Š8‘aLB¡cÈÉP:rh¸ ˆ‡HÐsžzÛ ýh¸Û ýhû`ô­û`ô­lƒõ¢àlƒõ£íƒÐ~´\íƒÐ~´}°zÖ‹€}°zÖ¶AúÑp¶AúÑöÁè?Z.öÁè?Z>Ø=ëEÀ>Ø=ëGÛ ýh¸Û ýhû`ô­û`ô­lƒõ¢àlƒõ£íƒÐ~´\íƒÐ~´}°zÖ‹€}°zÖ¶AúÑp¶AúÑöÁè?Z.öÁè?Z>Ø=ëEÀF» ¥NjŒ÷ ;0s¸ðKÒ€*ÿiCÿ<î?ïË…1o-SîÛʹ9âݺþT€d·6²£©†åwãqHIüG4Ȥ³‰÷ywnsŸÞ#¾¨Ïz`MöÛ`Xýžl·Þ>Csõâ—ûB çÉŸ9Ïú†ëùRßÚPÿÏ;ûòßáQÚÉçêRÊ©"§”£.…yÉõ _]ÿ¼ÿ_éYõ@zT¿ðÊ›REPEPEPEPEPEPEPEPEPEPEPEPEpúïü…çúÿJϪÒ¥ûÿ€þTÚ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (‡×ä/?×úV}P•/ßüò¦Ô€Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@>»ÿ!yþ¿Ò³ê€ô©~ÿà?•6¤Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Šáõßù Ïõþ•ŸT¥K÷ÿü©µ PEPEPEPEPEPEPEPEPEPEPEPEP®ÿÈ^¯ô¬ú =&Uó¹Çî‘éî)›üô—ó_ð©Ø?礿šÿ…üô—ó_ð `ÿž’þkþlóÒ_Í€ ƒþzKù¯øQ°ÏI5ÿ 6ùé/æ¿áFÁÿ=%ü×ü(Ø?礿šÿ…üô—ó_ð `ÿž’þkþlóÒ_Í€ ƒþzKù¯øQ°ÏI5ÿ 6ùé/æ¿áFÁÿ=%ü×ü(Ø?礿šÿ…üô—ó_ð `ÿž’þkþlóÒ_Í€ ƒþzKù¯øQ°ÏI5ÿ 6ùé/æ¿áFÁÿ=%ü×ü(Ø?礿šÿ…üô—ó_ð `ÿž’þkþlóÒ_Í€ ƒþzKù¯øQ°ÏI5ÿ 6ùé/æ¿áFÁÿ=%ü×ü(Ø?礿šÿ…üô—ó_ð `ÿž’þkþlóÒ_Í€ ƒþzKù¯øQ°ÏI5ÿ 6ùé/æ¿áFÁÿ=%ü×ü(Ø?礿šÿ…üô—ó_ð `ÿž’þkþlóÒ_Í€ ƒþzKù¯øQ°ÏI5ÿ 6ùé/æ¿áFÁÿ=%ü×ü(Ø?礿šÿ…üô—ó_ð ']ÿ¼ÿ_éYõ@zT¿ðÊ›REPEPEPEP¶ \ Œ÷£jÿ}#@ÕþúþF«ýõü0 «ýõüWûëù6¯÷×ò4m_ùè¿‘ àtž•\nFA©6¯÷×ò4m_ï¯ähÚ¿ß_Èе¾¿‘£jÿ}#@ÕþúþF…“"à{¨×‹öxeŽ7“Î`¨«€yú;Rù÷óá7ýüÿŠ ϸÿŸ ¿ïäüU}ÇüøMÿ#ÿâ¨óî?çÂoûùÿGŸqÿ>ÿßÈÿøª<ûùð—þþGÿÅQçÜÏ„¿÷ò?þ*€økõ³’ "•£2 ̤`;ëW¶Œ¸g½Wûëù6¯÷×ò4m_ï¯ähÚ¿ß_Èе¾¿‘£jÿ}#@ÁUKdðj(eY¡IW;]C ûÒ‹×ä/?×úV}P•/ßüò¦Ô€Q@Q@Q@Q@çèŸîÿSM ;íÀÆI8⑈E^§9ÀÏo|S¾v6ü¹g#8Î3Šr±óJ6À8Ï®¥JCÐÒ¶›ÿ ë÷©«T ’23ãBþ§?áKæ›±UÏÍŽ884ì‘™˜ü .ÐsžyÏøQ¼‰‘צ?•>›'ú¶ú@g[ÿÇ–™þúÿè-ZtVA¿ºYnòb¨ÄC»î÷ô¦ÿl|°³@ëæê«ó\Û¿GªÈ× æ0`¡m®ÂY‡ôvÅkQH vÿ‘²?úõoý kiú ¦j­Ä²›„·–6d.]—wŒdzҵά¶’˜ž6ê0 c8ôûÔ‰¨³ÌaçÍCûÅÞ0£ƒœ÷àŠ`Aoª›»‹uŽ)"G~K!ԣɣµkR9ÿÔIþéþUÿ ëoúä¿Ê€9 wþBóý¥gÕéRýÿÀ*mHQ@Q@Q@Q@Oym*I|Dã,=1GÛ¬@ÇŸc÷½(ÔþгÿŸ˜¿ïª¡gƒþ“ýõE€‚ÂöÖ;î#V È-îjí ?ùù‹þú¢À5ï,d ê<6Žqÿë¥7Ö'Ï„“×,(ö äO?ïR®¡d¹Ûq'© 2hÔûBÏþ~bÿ¾©P³1°1t?ÅE€¤'ŠÛKÓ¦™ÂF®¤±<”ÔŸðéóö”ÂC¥ÿÏÚUC©é†GΤ¾K¶æ‹hÁ?^´X¶§¡0@f÷kµpHÚ:qùÒ®©¡"•E†O89üI  ÿá!Òÿçí(ÿ„‡KÿŸ´¢ÀT¶¼·½ñ:Im*È¢Ù ÷ÊÖÌ÷¶±É±î#Vdé@ÿhYÿÏÌ_÷ÕG=Æp¡ež&äaðGâ(°°ÒÃ3ÄHõsé^¸ïOit·—Ì2Å¿víÁñ“€? £PŸJ…ÃG$!È;óŽãð'ŠŸûBÏþ~bÿ¾¨³²ßÚ\ ˜É*qóSôïù[×%þTÈk¿òŸëý+>˜•/ßüò¦Ô€Q@Q@Q@Q@Ã’ŠO©y1ÿÏ4ÿ¾ETóÍ?ï‘IäÅÿ<Óþù¾LóÍ?ï‘G•üóOûäPåGÿ<ÓþùyQÿÏ4ÿ¾ELóÍ?ï‘IäÅÿ<Óþùy1Ï4ÿ¾E/•üóOûäPåGÿ<ÓþùyQÿÏ4ÿ¾ETóÍ?ï‘G“üóOûäP”F]¥T¯¡S>Ïüñþù}žùãýò(û=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀ¬¤!ÿÚ ?±â kS±¿’;8Ñ Š$gcí¹õ5’þ,ÕãrŽ!W^ Ä8®¨RƒŠfNM1‹õOX?ïÐ¥.Õ=`ÿ¿B«Ø@\ìpñn©ëýúj~°ß±G°€s±ÃÅzŸ¬÷ìRÿÂU©úÁÿ~ÅÂÎÀx«Rõ‡þýŠwü%—¬?÷ìQì ì_øJ53˜ïØ¥'ÔqœÃÿ~ÅÂÎÅÿ„›Qõ‡þýŠQâmCÖûö){;þ]CÖûö)á$Ô=aÿ¿baçc‡ˆïýbÿ¿bøHïòy‡þýŠ=ŒCбÿßcçbÿjÜÿÓ?ûàP5[Ÿúgÿ| ^Æ!ÎÇ Nçþ™ÿß—ûNãýûàQìbì¥p¹ÿ| wöÇû÷À£ÙD9ØhÏþÇýò)ÂþTÿ¾EÊ!ÎÅû|ÿìß"”_MþÇýò(öQv/Ûfÿcþù}¶oö?ï‘G²ˆs±Âîlõ_ûäRý®_öï‘G²ˆs±EÔ¿ìÿß"œ.dÿgþù½”C‹ö‰?Ùÿ¾E|Ÿìÿß"eçg¯1m^rO9Ê³ëœØèµíUô½fs Ò$9FW\6AüÅT¹Ö¬e¶•`Žg2nY#cœýÜcŽ:sé]qƒi3&õ}®i“Ú\,6»ex°¹Ÿ»vǹ5Í ÒqZ’ÝÇ Z²G/Zp¦Šu& P9§Ð)í K@!Ý©{cÐ…8R/>ôá@ )˜…¥¤1ã¥( -- u§Ð §Ž”1‹J(@8S‡Z@8ccþú4ý¬û‡*øEtoùô÷Ñ¥ÿ„WGÿŸAÿ}=¬û‡*ámË ÿ¾ð‹hÿóè?ï£GµŸpåBÿÂ/¤Ϩÿ¾ðŒióê?ï£GµŸpåAÿÆ“ÿ>£þú4¿ði?óê?ï£GµŸpåAÿÖ“ÿ>¿øñ£þ­+þ}¿ñãG´ŸpåBÿÂ7¥Ï·þ%eŒ¸(9ã¯|ÕßøIâó¾ÏöI~Õælò·îoÎzt ÇÅ××v¶ÉÆ÷‰Ì`¼ôõéÚ·h¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (,R `zqé@à;Òy‹Ž´ì|ÑŸj ¼qü¨°5ñü†®Þ¬êC=b8Ö[fóµ†  î*³hZkFÚŒe‰;›qÝ÷²ÙÉϽNšu¤rÇ"À¡ã‡ÈS×ÿwô¦YéVV2™- òܧ—Äázàdð>”âéì}¿˜]B–‘ÙŽÈÁ'#žx§*Ì4oå1xÉ*Í#ê2NqÀã¥DÚ˜ñˆÚÑJ(`ªY°¡º€3Àã¥2÷A´¹W1¨‚g`ÆUÎîoñÇû-ÊÊ;`¨Ò5²…‰ÇÎ:øVPEPEPEPEPEPEPEPEPYšü÷–¶"{9=¬¡Ë.x$?:ôÐ\K+Éq™+@ o­Ú^[\Ëhþa ‘‘ÈÁÁã×Ö낳Á$Qã`Å~ábFžä }hΪÚj~gÙdÝåàžCÇÐÕs­Gl$á"+9‹(ÙuNyÁþ.ÔaµkeŸ-„Bì0Ð9ÏCŸ_CQKª©·³¹µVš+‰J£-¬N9ë• —[µ[9n±XÎÞGñmÝüªºkLñF2Ò›¿*)—hÏ=q@î5k[y'I bFasÐs‘TÛÄQ2Êöдȑy™R89#ò  η K$rC01üÏ„û‹µI-éݳK&¹ië(^v1^ €sê@  ßÌ_k.á¬9ZuPEPEPEPEPEPEPYž#ÿ,ßïÇÿ¡­ Wj­#×B2 †5ºÔmmä,#‘Èm¬AáIê*楦izlby–ô¢û’F;ç=jdÝÇˆÖæ)¬Eå•ÍþÑ"m3HÛXñ®?¹ùš‚Ž^ÿÅÇÖ³ê =jÛý_ùô útSÜ´îòüê¨ñ†ù\H~&€ºUº¾àÒíSwʧvîÔP4«Qçpÿ¾píów\~¤Ð­´èmâx”Èñ²ìÚíÐ{SWK·²1‘ÃlÉfçämË@ZØÇk¤rK‚¡F[;èÒ«I¢[JŒ­$Ûœ#‡ù¤±ãØPòi¶îf8*Ò¸rÊpAýOÔšoö\_eŠ–eò¤2«†ù·Ù9ÇûF€!—A³‘<¼Ê±Ÿ¼Šü1Æ2}ñO]ÙYUA!PÜ3Ü3øÐît»{«ƒ4ÛÙ±…çîtä~@Ò&Ü‚åbÊQɾ=þ±@Òmÿ~Y¤vž3ŒÍÉBŸÇ *ºè§íR;\ºÀU–8ÓøC[®}?Zж´ŠÑBùP" \ðéSPEPEPEPEPEPEPE™â?ùÍþüúЀçänµVG®”bÆØ>5›.¿ôWµÍJÖ÷@Ô–ÚeÄ…_D·)lRÓ›þ);AþÒèbºãõ?÷À¨(à5ïù \½Yõµmþ¯üú –€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¨®í¢¼¶{y×toÔ~´™ÿ¾™ýÉÿð"Oñ¦·…´Î‚9ÿð!ÿÆ«™÷‘Ÿ}¤Ùiwv3Û«£Š’ó3 loSYrhÑ$6¶×‘ÅorÛœmþ³Ò©]’ô&-ítÈmmÜG@á“ó êÊûû#ϵþ5‹÷«:³,õ«oõçÐT´Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Qé@\ZÁsÉàŠUíuUS£ißóáiÿ~Wü)Ü4‹pécj¬§ ˆ@#ô«&3žƒò4î#ÍüAÿ!›Ÿ÷«:¤g¥ÈÄ7 ãÑØvö4Ýíýé?ïë+€ooïIÿ[ühÞßÞ“þþ·øÑp íýé?ïëÛûÒßÖÿ.½¿½'ýýoñ£{zOûúßãEÀ7·÷¤ÿ¿­þ4ooïIÿ[üh¸öþôŸ÷õ¿Æíýé?ïëÞßÞ“þþ·øÑ½¿½'ýýoñ¢àÛûÒßÖÿ7·÷¤ÿ¿­þ4\{zOûúßãFöþôŸ÷õ¿Æ‹€ooïIÿ[ühÞßÞ“þþ·øÑp íýé?ïëÛûÒßÖÿ.½¿½'ýýoñ£{zOûúßãEÀ7·÷¤ÿ¿­þ4ooïIÿ[üh¸öþôŸ÷õ¿Æíýé?ïëÞßÞ“þþ·øÑ½¿½'ýýoñ¢àÛûÒßÖÿ7·÷¤ÿ¿­þ4\{zOûúßãFöþôŸ÷õ¿Æ‹€ooïIÿ[ühÞßÞ“þþ·øÑp íýé?ïëÛûÒßÖÿ.½¿½'ýýoñ£{zOûúßãEÀ7·÷¤ÿ¿­þ4ooïIÿ[üh¸öþôŸ÷õ¿Æíýé?ïëÞßÞ“þþ·øÑ½¿½'ýýoñ¢àÛûÒßÖÿ7·÷¤ÿ¿­þ4\{zOûúßãFöþôŸ÷õ¿Æ‹€ooïIÿ[ühÞßÞ“þþ·øÑp8m{þB÷ZϦ¥K÷ÿü¨Ùެôæ¤jÿ}#FÕþúþF˜ÕþúþF«ýõüWûëùl…"¤gTdàU ÊzàŒŽ´»Wûëù@Wûëù6¯÷×ò4À6¯÷×ò4m_ï¯ähÚ¿ß_Èѵ@ÉlÇ…¢r?QÁqo:“cÂ¥É'aÙÚä¿'£~t|žùÓ|žùÑòz7ç@ÉèßBó"ÝGóÄúSm«ýõüWûëù6¯÷×ò4m_ï¯ähÚ¿ß_Èѵ¾¿‘ jÿ}#FÕþúþF€ «ýõüWûëù6¯÷×ò5¯[H>vÚ:õ¤¨ Š( Š( Š( Šáõßù Ïõþ•ŸT¥K÷ÿü©—3*ä€Î#®+9»E´5¹•¨ÈÏòZy­rXòr;ç8«Zl’Éiº@s¹¶äõâ±£7'½Ë’IlWŠþáÊ7\9b ³Ù9)ôéJÚÌBÍ®DNU[n;Ÿ“òâºLÉ$ÔŒk+5»…„fNFA# c¿QGھצO!‰â!Xu#·½-ÓJšZ<2˜™Q@#Žj½Íý»²D×D%K(R ïõ5œéÎmrn5$·,i7-sg½Ü†#s(_åéÓðª¶Z¥Ä‘ÀÒFfó€V3V*I7P1ÔVYÙ‰;’¾«ò± T¡$©`¤ãñkà/•k.ç#ËÜ ‡œ‘è T’8™æ€ß:+nÂà2OnúÖ°ÿVßQýhÄ4r@èÅXwªm=ʶâÜ‘ôýoÖ¹êi$üÿÈÙ|/úîZ¿œ[µ«¼¢(ÌØvfÀÆÖëøâ³þEÔgdš>vªÄrLƒ{—ŸO@k Ä|Ú­Ì6VÓ?“æH‚FR6‚8ž¿$º•êG „EºEc“¨7““ÿ]X´Ô'–ê¥1èIXþbzòyàp9Á=jÌÿòµÿuÿ¥#Ô>ÑöË Á‰ZBBä7Êǟʤ²‘žâõY‹˜ôÿZ,ÒÌ×&¢ rIuöëUàÕ¼øÃ%³ä²¢‚ÀÅCcò  ׋A+º‚]•rä1Ò¯É{åÙ †‰ƒ66ÇüGÛŽøæ‹Y5¸Ú6˜ÂâÀ/žAÛœc­#ßܬ7òÐÆ­7b{Q`&K¹¡… Â3<ŒB€{2}ùÍ0j¼á­ØofXþaóÁH I«9Y6çÌŒ¨mÄ`ûHý X¾$­¡a´™Ó#=(í€( Š( Š( Š( ]ÿ¼ÿ_éYõ@z[ ÒÓ *Žê®T«¿ÊNxÈ5-&¬À€i° ™ÛرÁý*ÎÅÆ¨CSF:D¦ÛÜÏ·Ñ¢p–ä̧ûÀ‚ûÝ}:™ô»),‰ÀÆà:c§NœU’I%•´²}¥ˆÁûØ?QHÖq¥œBÊ»”Žry#¹ë@kd’ÐA#‚68Ï¥gÿÂ;cÐË.=7Ÿð«…G „âžæœpÇke`ZÞÀÂct$H‡îЦ6ñŽÃБP0m6Ø‚ªî`ÍŒö9Àô¥/öežÒ¡TsÁl¡íøP¶jÙÎ0NHÜØ'éþsVNHé@®m ºO|tÍ*ÛBŠÆ?KIî;±Ó“¦É+œðÄ*XÑcQ3µFI4Ä>Š*¼³ßÁ ÀDVŸzšKx¤’'g‰·/^¸#úÔVÚu­¤²ËUiN[¯ééL_iâñ“ý+Ë Ø.ÏÒž¶ù9]d,Û™°T“Ó„Pi§ZG–¨›7ÁÉÉʄӭ)cl”aÁ,r?N´Uۀß¼ÌØÏ×éQäÚDޤ‡.X’Ų2ÙãÓŸOJ•l-QS ·^@$Ôži.-|Åc‘@ŠEnsÐ~gjÿ}#FÕþúþF€ «ýõüWûëù6¯÷×ò4m_ï¯ähÚ¿ß_Èѵ¾¿‘ jÿ}#FÕþúþF€ «ýõüWûëù6¯÷×ò4m_ï¯ähÚ¿ß_ÈÔ&TûA€°]ÇŒR‹×ä/?×úV}P™ÿ-×ðþU‹ªÝ{…{wg™Q‰\‘’>\®p9#š@Ró®‹-°[¶hVNM®G˵ŽÍÔñZV×’I~ 2Féå‚6 “Àäóòõ銩&«ro¼F °¹dù•NW>þÔ“ßO)X¤–(ŠÎ‹¸2â\¼ñÓ=úÐúË–ž"FnÔ#æ“¡Èç§nª»kï™A€(ÃÄA“Á\ýïn(íä³ÞI•®@UätûÜð}ˆªV÷SÚYAóǹâ|Ès+áýï~”Ûg[xT:îŠ@V|òðNG=3ÇNÕnÓP½šTBmŠáغœ‚Þ2;Ðð_Ìúl“’Œêár£ä2Aä žxéÚ ]Fì´¬¯Ç †ÜâQ’2xýhu)'ûT±¬áˆv# äùœ‘Ïn3øS_S¼K¡ü´³|¾aÎ0£=qéž´û›©-õY„r¡%b2Ï’A#žÝzvª·šœ“¬Q#¡ÊFdØNUˆlƒƒþÈàЛ+¹&»’W–6am¸Ä£ýQÏÝnzþUêÓ›PË5»³*0” "“œ©9ÆF~â€osuvÐ?ž±¼“«¬ewl"}FFsZ¶/r¡œ >Z¶ÐAË ý(Ý€( Š( Š( Š( Š( Š( Š( ©§ü…åÿ®+üÍrzïü…çúÿJϪÓ?åºþÊ©K{R˜Ø¶õÆ@BqùR¿Ú6ÿôÓþý·øQý£oÿM?ïÛ…þÑ·ÿ¦Ÿ÷í¿Âíúiÿ~Ûü(°ö¿ý4ÿ¿mþhÛÿÓOûößáE€?´mÿé§ýûoð£ûFßþšß¶ÿ ,ý£oÿM?ïÛ…Ú6ÿôÓþý·øQ`íúiÿ~Ûü(þÑ·ÿ¦Ÿ÷í¿Â‹\Ù´ë1oQò¾?.•/ö¿ý4ÿ¿mþXûFßþšß¶ÿ ?´mÿé§ýûoð¢À!Ô-Ø|ÌîÛü(KëhÑQT`-¸•´mÿé§ýûoð£ûFßþšß¶ÿ ,ý£oÿM?ïÛ…Ú6ÿôÓþý·øQ`íúiÿ~Ûü(þÑ·ÿ¦Ÿ÷í¿Â‹hÛÿÓOûößáGö¿ý4ÿ¿mþXûFßþšß¶ÿ ?´mÿé§ýûoð¢ÀÚ6ÿôÓþý·øQý£oÿM?ïÛ…þÑ·ÿ¦Ÿ÷í¿Âíúiÿ~Ûü(°ö¿ý4ÿ¿mþhÛÿÓOûößáE€?´mÿé§ýûoð§G{ ލžaf8»oð¢ÀZNzq×&—aõ_ÎÃ꿪þtÀ6UüèØ}Wó aõ_·Õ:6UüèØ}Wó aõ_·Õ:B¸–P½gÛȲêm"«@¤lšåµßù Ïõþ•ŸLLÿ–ëø*f‘ÿ!ÿ¤_ÈÒ@YšÿÉŒJê¡ gæÇ­Kwx–¶mtÉ#Æ«¸ì¸ÎiŠý ßÛVâ9$h¦U@Ì2£ç ÛN9õ#®:ÕËiþÑÿ*H¹Æý  d©D¶ðÌ#•ÖY<µÚAÎ9çÔQa©Cþ­$L¨uÞܧ¸Á  ¥¼FI Ç@%`=ê¿ hó4#ª³_ظšcjÖË;FÛ‚) f8òòT0ç>‡éVå©‘#0—|í]ã-ޏÔÔ,¤b©ynĸ©çÓ­P²“yn}‡2/ éׯµ$÷ðEf×JâXÃýÑ ’NÜzu5Õ¢ó¡ãxŒ„çÌ*6Œ1ÉÁ?Ý49¿´$‹s #ăç>ƒÔÔcRÉ´Ç&Û’##Çñãð  £¼¶”f+ˆ\s÷\*ŠãQ·†7+"Jè¡Ê#‚Bœ|ßLæ€mJšEUyLxßåàíÎOÜ~bm}mu,±C*;Ä@`ȧ=hKûW yñÎQAuùˆëŽy©bš)“t2$‹êŒ Ñ@Q@6_õf€2.³ö;œg;OLûúsQ‹Xü²N=¿Ï­HÙmñ%=:{cùS'ŠÖ$–H“b)fã¶9þTAnáû#3Ú)¹³xlƒœœqÊÒÛÜE4Öˆ–ˉÞû~\œ{Óº‘m¥–/³@HTòyÆK Jˆ_@óÇÁnUÑa?;n%N|cò  öíitòˆá#,@Á9çõ?Ù`Ïú¤ü½óüè°‘'ßçÖ²ÛÿÏü½±ü©ä1GåES»¯ç°ªú_úèÿëÒ:`sšïü…çúÿJϦ¦Ëuü?•3HÿÿÒ/äi çDk‰@k’ ” É™ÏJ»}k%Å™µŠDŽ7SîRNÒ1Ç#ó«nêĨØÏm icŠ``ÊåÔ²œ±nxíœu«q›%³Y‡8û*¬j£èÍõ©(¯›{öXb3«ÂU#7 üØÏ=E?IÒNž0ÏÄb?ÝG³wûMÉË{Й4øþʰÂL~[‰’[ =sÖ”[ÜH£í2ÂN×RcqŒdœwúÐ|{;q<Ñì’#ùŒàž3øÔ×?œÌ‹*¥»ù{Ô'#gM§8J­a¥Ü¶ ·W@«k´d€g©þ÷ÿXPž”\4¯t¬v•ÎÖÉù]rrÇŸŸ<`q@Î’Îkw‘Ye–79N0¡÷ÙúÔÞ†æ`b)ABùh˜ÓýÿÒ€ á–)dÃî‘£VË>PKsŸÂœšmËÀ¶í*Å R–R«—<’s×Ò€"‹@ KæÎ7».d±<‚Ôù´6šðÈÓWP¡NàJàs€}(‹§ê9•ÚwüÈK«_b8ÏçO—D2D1$~hæ'i KzàƒÇÖ€,A§Ëor9£­²À‹åòèzãðÅ ¤Ä×ð^“‰Ó%Ød;vçÇjZÜÛYÞhÛÉ…£q³ÉÛ’9ã•VPðüîQÄËEµc »²ÉRp{ŒP÷:<²ª©tv”È&m¿( µ¸õE{𽤰Í9†TT–E“2F6‚:ô! Ðtº%ÅÉvi–0ÓØÀ£vr0@É÷ÏjÕÓíE„ªAò.@ÆOsбEPEÙ՚ǻæÎäq’0Ç=j¢½Õ"Ki-ÝÀ`B±ÜƒõúRO¶Æ¬é"H’!á^AÆ­2âkkˆZ)•™Q·®0h³[iùs<%¸&!·Ž‡§áùS ŽÎ£xÌÃgÝS ž ÅB°Å%Ñ–í–tݹU¢9I=ºÔ±Å§Â²ãt ÏÊÚA-ǧ,hõ[D•åÌÆG`Kçå<§5"Ín®¤rˆÎqóh_¶ÃÇßÿ¾Mn‡ý¿ûäúf€"º¹I"Ú…³œò1þzÔ_úèÿëÒ:ç5ßù Ïõþ•ŸLG¦Ëuü?•3HÿÿÒ/äi 5¨¦EPEPEPEPEPEPEPEPM—ýY  ‰­¢¹È™ÕOñŒÕA ±ÔQì ˆ;ÛÈ›öáåÝù)…5=Gío’)*í£)ã' z·ý™eÿ<-ÿïŸþµÙ–_óÂßþùÿëQý™eÿ<-ÿïþµÙ–_óÂßþøÿëRfYÏ ûçÿ­@ ý™eÿ<-ÿïŸþµÙ–_óÂßþùÿëPý™eÿ< ÿ¾úÔfYÏ ûãÿ­Hm6ÅA& |“òõª½£F×墌ۡQŒ`d☾»ÿ!yþ¿Ò³ééŸòÝåLÒ?ä#ô‹ùH j)€Q@Q@Q@Q@Q@Q@Q@Q@SeÿVh7ødúŠÍÕoþÁ1ïbÖ “øàqïŠ*O} WIsr·Ÿ2L‚¿ê÷ ç$çÚ¦}Bám¯e1xdUDp  ýÓÏSÞ˜Çw"GžŒÏ!ÂmŒ¦O¦ 8=OÒ« mc‚¸‚@òd€˜?(ï×ß§Z—ûUN [LÀïçå!Á<šŽçXŒH!‡;Ù“kðA—#ò4búíìå…Ø§Ûƒ‚>a…fÈ9Çj 5·1&e¶FÜÁÛ” Áô?˜4¡ ð’á h™$( m$gòW)ÿê$ÿtÿ*ÎÒÿ×Gÿ^‘Óœ×ä/?×úV}0=3þ[¯áü©šGü„oþ‘#I­E0 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ l¿êÍeÉ"FŽduQ‘ËUG{)$YHY”°8þB¤ ßeÒ¾Qº=ª0Î;~îÞ™Á8ã4ñž!–/8”†rÓ’IÇ$ç°¦2)¡ŠùW±¨Qÿ-ÈAÏPKqRù:~Ð ©ÆzL@ç¨ÆzqÓ¥€ "Àï;1Ëwîj/³i{•·§Êr«ç ç9ÆqÔP“&Ÿp妕#2£è3€}è § üàÐÆÜ†ÇÓ§zO/OÜ •ªƒ1!AàgŽ=*BÖG?½¹ýç÷NGz:k«s ¨Lÿ–ëø*f‘ÿ!ÿ¤_ÈÒ@kQLŠ( Š( Š( Š( Š( Š( Š( Š( ›/ú³@¸¹9àö¤ù?Ú©ù?Ú£äÿj˜ÉþÕ'ûT|ŸíQòµ@ÉþÕ'ûT|ŸíQòµ@ v› ÀÍgYËçßy¤c̶FǦI c]ÿ¼ÿ_éYôÀôÏùn¿‡ò¦iò¿úEü$µÀ( Š( Š( Š( Š( Š( Š( Š( Š)²ÿ«4›ü2}E2¤Š* á^RX§å]äÀí@ Ü|ÆT8#,•÷÷©÷/cžqøÓAdt¥¤EG?ú‰?Ý?ʳ´¿õÑÿפtÀç5ßù Ïõþ•ŸLLÿ–ëø*f‘ÿ!ÿ¤_ÈÒ@kQLŠ( Š( Š( Š( Š( Š( Š( Š( ›/ú³@Ü,ĤŽIà"?¥UþÐ_ùöºÿ¿-HûAçÚëþüµÚ ÿ>×_÷å¨þÐ_ùöºÿ¿-@¿@sök¼ÿ×7¿Ú#û=Þ=<–£ûDϽßýùjOíÿŸ{¯ûòÔh/üû]ß– ûAçÚëþüµÚ ÿ>×_÷娲_‰Ô[]d‚?ÔµC¦«%Â+¬-c Ð7®ÿÈ^¯ô¬ú`zgü·_ÃùS4ùßý"þF’ZŠ`PEPEPEPEPEPEPEPEÙÕšÍÀùÉϱ¤Êu¿ï¯þµHSû­ÿ}õ¨Êu¿ï¯þµOî·ýõÿÖ£)ýÖÿ¾¿úÔe?ºß÷×ÿZŒ§÷[þúÿëP”þëß_ýj2ŸÝoûëÿ­@Sû­ÿ}õ¨Êu¿ï¯þµ5Ý6m¬v‚~÷ÿZ³l¥3Þù¤^Ùïš`s:ïü…çúÿJϦ¦Ëuü?•3HÿÿÒ/äi 5¨¦EPEPEPEPEPEPEPEPM—ýY  ßá“ê)• G.J„‰c”àã¿éš-´îfC…ëМš`+HÞf‚1À=zg?Jp{2>áò.qד@Çñó·\ž?*BYÁ@>ö;úP¬þZ´Ž1뎜gùÒ£±g,Ãjäã’@ü¨BpqÎAÇNô´€Žõº•gië£ÿ¯HéÎk¿òŸëý+>˜™ÿ-×ðþTÍ#þB7ÿH¿‘¤€Ö¢˜Q@Q@Q@Q@Q@Q@Q@Q@6_õf€1î'0#b)%,z ª¿n“þ|n?!þ4€>Ý'üù\þCüi~ß/üù\þCühþЗþ|îyöãMkÆc–°¸cîøÐ¾ß/8³¹Áôühû|¼¡ÜñÓþ4}¾\çìW9úñ£íòÿÏ•Ïä?Æ€·Ëÿ>W?ÿO·Iÿ>7ÿl—’ïc®jJ(¤sÿ¨“ýÓü«;Kÿ]ýzGLs]ÿ¼ÿ_éYôÀôÏùn¿‡òªV¿ñÿþìÖ´É/ݵ¨(R²b0¿wn8Å^Ó¿äiÿ\‡õ  R¢€ (¢€ (¢€ (¢€ (¢€+Iÿ!;÷ŸÿA5©øÓ¢€ ?( Æ€ÆŠÉñÝG¦JÖAÈÇ–sõ¦Rºy¸UY|ôÞäí@.$–4a >kж1U|ûïùò_ûú(óï¿çÉïè£Ï¾ÿŸ%ÿ¿¢<ûîöHí¨£Ï¾ÿŸ$IGøPçßÏ’ÿßÑGŸ}ÿ>KÿEy÷ßóä¿÷ôQçßÏ’ÿßÑF€}÷üù/ýýy÷ßóä¿÷ôQ òß:2ýFF?ÖŠŽÂ6†íc|nKdSQ@λÿ!yþ¿Ò³éélÁe ÄÉ=¸¬¶ks4’Ç©ˆL˜(SÓëH&":ÉÁÿaiCik8DTm^.è¿è4ï…£t_ô?÷Âк/ú ûáhÝýýð´n‹þƒGþøZ7EÿA£ÿ|-¢ÿ Ñÿ¾ÑÐhÿß @è¿è4ï…£t_ô?÷Âк/ú ûáhÝýýð´n‹þƒGþøZ7EÿA£ÿ|-¢ÿ Ñÿ¾ÑÐhÿß @è¿è4ï…£t_ô?÷Âк/ú ûáhÝýýð´èZÙ.bš]PKå䪣¨Å_þÓ²ÿŸ˜ÿ1þ4iÙÏ̘ÿ?´ì¿çæ?Ìí;/ùùóãGö—üüÇùñ Aý§eÿ?1þcühþÓ²ÿŸ˜ÿ1þ4 ?´ì¿çæ?ÌÚv_óóæ?Æ€í;/ùùóãGö—üüÇùñ E)¦ŠYY—Wؤð¡W£_³¢yuo0Fá•QÈ  FúÐ’~Ñýô(ûu¯üüEÿ} ,öë_ùø‹þú}º×þ~"ÿ¾…ûu¯üüEÿ} >Ýkÿ?ßB‹}º×þ~"ÿ¾…nµÿŸˆ¿ï¡E€>Ýkÿ?ßB·ZÿÏÄ_÷ТÀnµÿŸˆ¿ï¡GÛ­çâ/ûèQ`·ZÿÏÄ_÷Ш-åŽ]VV‰ÕÇ’¼©Ïs@¶»ÿ!yþ¿Ò³éé,Š¥*(Ü[ ïPD–³ x–ôeŠ>ÆÂB«ýü(âž°Û²†X£ Œƒ´P0hm×£ˆdàeGZ_³ÃÿÏüñþù>Ïüñþù}žùãýò(ûÏüñþù}žùãýò(ûÏüñþù}žùãýò(ûÏüñþù}žùãýò(ûÏüñþù}žùãýò(ûà©ñ¥`Í»ÿ uÇéþ4y·ô¸ý?Æ‹y·ô¸ý?Æ6ïþ×§øÑ`6ïþ×§øÑæÝÿÐ:ãôÿ,æÝÿÐ:ãôÿ<Û¿ú\~ŸãE€<Û¿ú\~ŸãG›wÿ@ëÓüh°›wÿ@ëÓühónÿèqúónÿèqúmßý®?Oñ¢Àmßý®?Oñ£Í»ÿ uÇéþ4XÍ»ÿ uÇéþ4y·ô¸ý?Æ‹y·ô¸ý?Æ6ïþ×§øÑ`6ïþ×§øÑæÝÿÐ:ãôÿ,æÝÿÐ:ãôÿ<Û¿ú\~ŸãE€<Û¿ú\~ŸãG›wÿ@ëÓüh°›wÿ@ëÓühónÿèqúónÿèqúmßý®?Oñ¢Àmßý®?Oñ£Í»ÿ uÇéþ4XÍ»ÿ uÇéþ4y·ô¸ý?Æ‹y·ô¸ý?Æ6ïþ×§øÑ`6ïþ×§øÑæÝÿÐ:ãôÿ,æÝÿÐ:ãôÿ<Û¿ú\~ŸãE€U’è° a:‚ycŒÖ¬…6â~_J>OVü¨ù=[ò äõoʓտ*>OVü¨ù=[ò äõoÊ óÔÞ4 ʉ>æ€8ÍwþBóý¥gÓеOøóŸþ¹Jžkém!°D EPÎFâ:=úòzH ¶ÚµòÙ!"fŽÕ&‘†s“‘ŒzñÏò©Tõi–Ýáh!GKq! Œ0s€~b>”À•uy†š÷gi™e‘B¨#¶ dýFG½6^äÄžlp+³˜þøÀéó1Î:õǯI®\ß³ÁX‘±¿a¸)È žýÀéLMzæG‰·ŒÉ¹ó¤d/^´¦µuæìX7+È]·¸b6Œ‘Óü([ûˆ/¦¹«#+¿’äüÁ\¨ ÏR=úÐ;V¹”©uŒÃç,=÷ä¨9ÏNþ•»@Q@Q@Q@Q@Q@Q@Q@Ù¿Õ7Ò³üµúÿZLëž²Ô/B»ÖVŸ™÷Ï^ÇÓŸ­ZmZTl˜Ñ“'*¹ÜX)Ï×9)U¸U%¡XÂ`;0'iç#nr{tìh[=MæžQ4kKœ1a‘†Ç<矠«þt[¶ù‹Û1ŸâÆqùsH *šÈ^_úâ¿ÌÐ'®ÿÈ^¯ô¬ú =ò/:7‹vÝéŒúqV£–$HDf‰B«äRËØ=ëGÛ ýh¸Û ýhû`ô­û`ô­lƒõ¢àlƒõ£íƒÐ~´\íƒÐ~´}°zÖ‹€}°zÖ¶AúÑp¶AúÑöÁè?Z.öÁè?Z>Ø=ëEÀ>Ø=ëGÛ ýh¸Û ýhû`ô­û`ô­lƒõ¢àlƒõ£íƒÐ~´\íƒÐ~´}°zÖ‹€}°zÖ¶AúÑp¶AúÑöÁè?Z.5Øe*p3Tg¹HكǀªXþ”WûJùçqÿ~[ü)‹yjŸvÞUÉÏí×ò¤%¹µ•L7+¿ŠDêOâ9¦E%œO»Ë»sœþñð}F{Óo¶ÛÇìóe¾ñòŸ¯¿Úg>LùÎÔ7_ÊþÒ‡þyÜß–ÿ ŽÖO?R–UI< 2èWœŸZåõßù Ïõþ•ŸT¥K÷ÿü©µ PEPEPEPEPEPEPEPEPEPEPEPEP®ÿÈ^¯ô¬ú =*_¿øåM©¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8}wþBóý¥gÕéRýÿÀ*mHQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Ãë¿òŸëý+>¨J—ïþùSj@( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ]ÿ¼ÿ_éYõ@zT¿ðÊ›REPEPEPEPEPEPEPEPEPEPEPEPEpúïü…çúÿJϪÒeP_;œp>éžâ™°ÏI5ÿ ƒþzKù¯øQ°ÏI5ÿ 6ùé/æ¿áFÁÿ=%ü×ü(Ø?礿šÿ…üô—ó_ð `ÿž’þkþlóÒ_Í€ ƒþzKù¯øQ°ÏI5ÿ 6ùé/æ¿áFÁÿ=%ü×ü(Ø?礿šÿ…üô—ó_ð `ÿž’þkþlóÒ_Í€ ƒþzKù¯øQ°ÏI5ÿ 6ùé/æ¿áFÁÿ=%ü×ü(Ø?礿šÿ…üô—ó_ð `ÿž’þkþlóÒ_Í€ ƒþzKù¯øQ°ÏI5ÿ 6ùé/æ¿áFÁÿ=%ü×ü(Ø?礿šÿ…üô—ó_ð `ÿž’þkþlóÒ_Í€ ƒþzKù¯øQ°ÏI5ÿ 6ùé/æ¿áFÁÿ=%ü×ü(Ø?礿šÿ…üô—ó_ð `ÿž’þkþlóÒ_Í€ ƒþzKù¯øQ°ÏI5ÿ 6ùé/æ¿áFÁÿ=%ü×ü(Ø?礿šÿ…üô—ó_ð `ÿž’þkþlóÒ_Í€ ƒþzKù¯øQ°ÏI5ÿ âußù Ïõþ•ŸT¥K÷ÿü©µ PEPEPEPE;`À%ÀÈÏz6¯÷×ò4m_ï¯ähÚ¿ß_ÈÓÚ¿ß_Èѵ¾¿‘ jÿ}#FÕÿž‹ùŽIáYUÀVäd“jÿ}#@ÕþúþF«ýõüWûëù6¯÷×ò4m_ï¯äiP 2.±  x¾D2ÇÉç0TUÀ<çÔڗϸÿŸ ¿ïäüU}ÇüøMÿ#ÿâ¨óî?çÂoûùÿ@Ÿqÿ>ßÈÿøª<ûùð—þþGÿÅPçÜÏ„¿÷ò?þ*>ãþ|%ÿ¿‘ÿñTÈï÷_­œ–òE+Fd™HÀ v'Ö¯lp23Þ€ «ýõüWûëù6¯÷×ò4m_ï¯ähÚ¿ß_Èѵ¾¿‘ `ª¥Œ‹€2x52¬Ð¤«®¡†}éÅë¿òŸëý+>¨J—ïþùSj@( Š( Š( Š( ŠsôO÷©¦Ðöàc$œqHåÃ"¯Sœàg·¹Ào¿) ®r:gÅ9Xù¥àg×?Ò‹%!û¦´ßù[ÿ»ýMZ d‘‘ŸÚõçü)|Ãób6*¹ù±ÁÁ§`ŒÌç€h=yç?áFò$ G^˜<þTúlŸêÛèi›oÿZgýt_ý«R€ È:…ÒËp̧ɉʌD1Û¾ïé@ ý±òÂÍnëæ ê«ó\Û¿Gª»\3˜Á€F…¶¸; fÐqÛìµ€Çoù#ÿ¯Vþk[RuîåLÕ[‰e7 o,lÈ\».á€@Æ2=iZçV[ILOH@ÆõØÎ=~õ"j,ó~ÎD¨x»ÆpsžüLmõSwql±Å$HïÉu :”b:QÚµiÿê$ÿtÿ*‹Nÿu·ýr_å@†»ÿ!yþ¿Ò³ê€ô©~ÿà?•6¤Š( Š( Š( Š( §¼¶‰•$ž5`¼‚ÜŠ‹ûBÏþ~bÿ¾©Øêd`ÜÅ÷…5¯,[h71€¾Œ(° öësçÄN1’ÃÓ ë0'‡±ûÞ”jÿhYÿÏÌ_÷ÕP³ÁÿI‹þú¢ÀAa{k„ ÷«ä¦§þгÿŸ˜¿ïª,^òÆ@Á®£Ã`çþºS}a’|øI=r€_؃‘< ÿ½BêK·zÃ&‹0í ?ùù‹þú¤}BÌÆÀ\ÅÐÿž+m3Nšg º’Ç ùMIÿ —ÿ?i@ü$:_üý¥T:ž˜dø™/’í¹¢Ú0f€u=„h¿v»W£Ûó¥]SBE*³E†O89üI  ÿá!Òÿçí(ÿ„‡KÿŸ´¢ÀT¶½·½ñ:Im*È¢Ù#êµµ=í¬rl{ˆÕ€ºq@hYÿÏÌ_÷ÕG=Æp¡ež&äaðGâ(°°ÒÃ3ÄHõsé^¸ïOitÇ—Ì2Å¿víÁðIÀÐQ¨O¥BÁ£’ÀäùÇ"x©ÿ´,ÿçæ/ûê‹0-ý¡…À¹Œ’§5?Nÿu·ýr_å@†»ÿ!yþ¿Ò³ééRýÿÀ*mHQ@Q@Q@Q@ 1¡9(¤ú‘G“üóOûäPåGÿ<ÓþùžL_óÍ?ï‘@ äÇÿ<ÓþùyQÿÏ4ÿ¾ETóÍ?ï‘G•üóOûäPäÇÿ<Óþùy1Ï4ÿ¾EL_óÍ?ï‘G•üóOûäPåGÿ<ÓþùyQÿÏ4ÿ¾ETóÍ?ï‘G“üóOûäP”F]¥T¯¡S>Ïüñþù}žùãýò(û=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀˆZ!ÿÚ ?Ø×µ³£½º­²J%Ry!q€¡ÏZÉ_­ŒD¿?ÿa[‡iùþ&«ù‡´òx¡ü¹§æ?øšwü$Íÿ>‰ùþ&—ÕüÃÚy Éú…ÃÌ=§£\où÷OÓü)¶Ûþ}Óôÿ =‡˜{O!ÃYoùàŸ§øRa¿ç‚~ŸáG°ó´òûY¿çŠ~Cü)FªßóÅ?!þ½‡˜ý§£ToùâŸÿ wö“Ï$ü‡øQì|Åí<…ƒùdŸÿ _··üóOûä…ÇÌ=§¢õ¿çšß#ü)Eãq?ï‘þ{1ûO!ßkoî'ýò?”\·÷SþùáG±ó´ò$W•”0Hðzgh¥ÌßÝ‹óJ‡­.W4» Šgš1$b&BHåçƒúƒOÌßÝ‹óJ\±î—b8.áYâ2«' A#ú“3v/Í)¸Åuiv"ûWïÚÝïP àãùóÛ’MÔ¤’IrI?Z–’ؤîoxÙC\éÊH«‚Oo•j¼å¼{Ñc†%Ú»<î<óíôük¶ŠN ì]ìbß[ûG&XöãרšØÓ,WWÐlã0Ä%mDBdŽ4Gò„y<ãž2yÎiÉÙ]-Y°ºm•η¦ÝÃoföí$ðHìh¸ c$â+Éú•ÏëÑE–˜ê´ÒFÌóÛÆ9ï”ù€ëÀ<ŒÖpo™/먚лVwº>4é Šk{2óÁ% fb>ûy„3ž1íÓ´ÿÙzn›¬[À·Žo!¸ƒ A"L‘ž6€½r>f£šKK–âßézrÍ%ÕýÛÂ×WHÉ µÈ(S»ž¼¯Z­…¥­î“¤“Kr!•‰a°oºWñïB”š‘liÖ×w¬p©ƒeÌq „` JT‘ò‚°?RiÖú•ÅÈTiÑîKgÔ–Ú¥ƒŽ9¥ÎÐùS3/¬áŠÊÊî1Vä>QØ1R§@~•LV±wD1ËOÄ8S–€O€QOõ§ x§ @8SÅ8u§ŠrÓ… )Ë@á@‹ ÊFÌÁT/Rp>ñ¦$±ÉŸ-Õ±×iÎ+Š:c²0å´‚ûLÒ-®S|/s&åÉÇœzqJ4=;LÔ´ù¬íü©vBw±ãÊsÜû C4t?ùŸúêô'¬µËçìûeÏöŸµäîÝŸ¹æg>^î7ãÛ8æª[Š;vÿò¼ÿr?äÕÅÜÇÄ¿ïŸçCÙÝG‹4ë»ùlͤEü´mÅX)\ªã©•†t]gÊX–Ûœ')•™ÝïšÞœà¢“aªd'Ú±ÞM»±n]9ÿz¬6›âg–9]îZHó±ÍÐ%s×w­J}YRoA°i ·UXVh•[x 861ž\qŸJOì=kÈò<—ò·oòüåÛ»¦qž¸§íi“Ë"fÓ<@öâÝÌíyfàÀè1œSŇˆ„kû-1µ~Ò0¸é»¶åKÚRYŠÇÄ0îòžá7±vÛpæ=Iç­ Ó5¿³}›ùóËÏzç¦qך^Ò˜rÈ|š~»0a)š@à 8;€9óØšy³×žD‘Þvxó±À%s׿ãOÚørHpѯÇü°ÿÇ×üiÃG¿ÿžøúÿÖÅÉ!ÃH¾ÿžøúÿ(Òoç‡þ>¿ãKÚørHwöUïüñÿÇ—üiÃK¼ÿž?øðÿ=¬;‡$…eçüñÿLJøÓÆ›wÿ<¿ñáþ4{XwI 4ë¡ÿ,¿ñáNþϺÿž_øð£ÚørHp°¹ÿžøð§ ùçÿ ^ÖÃ’BýŠãþyÿãœ,çþçê(ö°î’-'þçê)ßf›ûŸ¨£ÚørHrÛÊ?ƒõï³ËýßÔRö‘î’!“û¿­(‰Çðþ´{H÷I¿¥8#zQí#Ü9$Aq 줞$‰F4!û眞y¦-¾ ŠB]@€œ–ª¹üdԽ͒V±éwZÇm$¶òE$,–Á†I'<Ÿö2KyD°8¤^Ž–hüA¥hw ˱j[»{%·‚áî,ÌbÎy'ž:Ñäj_óýýøãCP}A9.ƒìí&†æY§˜Jò„ÛŒgÜú×qÿÿ¾)[D‡õ=_¾?Ý_ä)•™AEPEPEPEPEPEPEPEPEPEP^wqÿÿ¾4£Ë÷Çû«ü…W¸mÐ3ÌÇj"ýçoAþp$àiMõhàž(ï#ûÈ®C\Hƒ•+ÇŽwýªã\À· nÓÆ'q•Œ¸ÜG¨{Ê€·–­çm¹…¼õ¸qû¾¿{Ó¡ëéMödDEÜLqóÎsŒ/¯>”$—Ç413 ò’wNIÁ9?†zÔifñy©wF Ä€Œ’3ôúP—0Z {™ã… Ài(ϧ45Ì\4ñ©@KàmIôÀ#óU5{7¼òÌdF‰üÑûÂY— 낽½jÂ]ÂÉ#D[‹å×å‘“ƒÀùOä{ƒ@[˜á­ÖxÌè2ч€õ#¯qùÔM¨Zý†k¸¦Iá…Y˜ÂÁº ‘×®(Eý™wD|Áóœã ëÏ¥2ëQ‚Îê®dŽ•„’8Q•*1Ï®ïÒ€'k˜ámÚxÄî2±—ˆõ¯cùQ-̇ӡªO­Ù©LË´4ï/”@~OÔ§ÇZ¶×–©äî¹…|ÿõYqûΟwרéëQ]j0YÝC̑’£°’G 2¥F9õÝúPƒ4CvdAµ‚7Ì8cŒîr?1U!Õmž)%žHíãWTV’UÃeúçÅØž”øµoys$vÉ:+1À‘œdã5+^Z§“ºæóÿÕeÇï:}ß^£§­T}nÍJfXÔ}¡ —||¢ò~¥8Î:Õäš'Ù²Do1w¦ËÇ#Ôr?1@Q@Q@Q@yÝÇü|KþùþtÐ/ßî¯òŸ©á#†pÉ ›ã 8'k  0O=Ž:ô(,¥šöú;™"ò|˜Þ2¥dÜP‚ ¢çîœþµ ¦•uom«Le ’I«F`.9ËäuéÇ,iWÞ¥ŽÖ @Nèdù†$ ¡X8ë׎[6‘u1Ýq ¸ybHZgŒ(ÜÇ€ 8|`íû½³ÀÝJ)§–Ñ-Ø£«»ù›r#ýÛ¨<ðyeã¿àj”DçPŽâtŒ":6ƸyÏʲ åǺ=‰  ú½Äþ_’w*çt~{ÓÆåñÏ}…R³Ñ¥·ÓÞ2aóË@á†pÞRÇ…'ÆQ½qœãµM=•ÕÌWÆA r\ÚUËaæwÀãç½i’Ç`g4²‚ž6¸ŽyÀÁã ã½Dtf2Ê4–"Ò¸ßs ¿w˰|«÷ÈÜ3ôÉâÊY\K¥ÜÚÜÏóN¬‹Îÿ)Jà Ø½ryç©ë@ÝY^\‰ò!»·ò0Ÿ(ÿ2ü¿7Ðíéך±w×Û ¹¶Hdòã’6Y$)÷Š‚ÿv€([hoo$I¸K˜˜¹šEÁEQþ¬§î’xÏCŽgÖl.¯’D…ƒ#ÄP+NñcŸ˜í~r8< ¾æ€"¹Ò®®#û&a[2i<ÝÄ¿ïA˜ÇOïsz.4ëÛ»£s2BŒ¾^Èã¹q»h¸PWýg`zc½6M*ê;Kˆ­–n­ÌNWýÙ%ÎrCÿXsœt÷ÀÒž Mõ½ÌAb´l¬Å~V*I‘·§|õ_O±žÝí„ÞXKKsn…“ ;~b06ýÁÇ=zñÉŒé4 ù~T7O8mÇsdc`¸yH©‘Øø~A#§^kFî+¯·AslÉåÇ$l²HSï9)þíR‹Jº¶-b0É™#1VXŒ9ç¨ëíËl4»Í?Ë•<‰dDì2òâRs´÷‹¦:Ý(W¶º¶³ÑáŠ4–kvUo˜„â'RsƒŸoJ‚ïH¼–ÎHUѼՓåóÞ5™‰ùGÎ>`0q÷Ú4r;ÒhAòü¨nžpÛŽæ$ÈÆ8Áp:òxéRÙÚËnë¸BWtì[Ã|›€Ó}À  ´R¢€ (¢€ (¯;¸ÿ‰ß?ΚÑåûãýÕþB«Ü\Ek™;„Lã&¿¶4ÿùúõ£ûcOÿŸ¨ÿZvþØÓÿçê?Öí?þ~£ýh°öÆŸÿ?Qþ´liÿóõëE€?¶4ÿùúõ£ûcOÿŸ¨ÿZ,ý±§ÿÏÔ­ÛüýGúÑ`í?þ~£ýhþØÓÿçê?Ö‹liÿóõëGöÆŸÿ?Qþ´XûcOÿŸ¨ÿZ?¶4ÿùúõ¢ÀÛüýGúÑý±§ÿÏÔ­þØÓÿçê?Öí?þ~£ýh°öÆŸÿ?Qþ´liÿóõëE€?¶4ÿùúõ£ûcOÿŸ¨ÿZ,ý±§ÿÏÔ­ÛüýGúÑ`í?þ~£ýhþØÓÿçê?Ö‹liÿóõëGöÆŸÿ?Qþ´XûcOÿŸ¨ÿZ?¶4ÿùúõ¢ÀÛüýGúÑý±§ÿÏÔ­þØÓÿçê?Öí?þ~£ýh°öÆŸÿ?Qþ´liÿóõëE€?¶4ÿùúõ«×0ÝÆÒ[¸‘í,:gÒ‹5yÝÇü|Kþùþt =_¾?Ý_ä*ÿß²ÿ¯¸¿ô!@ÀŽæS ;ÕC1eP ÀÉ uüj%Ä»ÁÙ$PvË’2Bÿtgñ  .çhQd‘¶.î€àœŸÀ;þµ Ý\G‘,>vz4 /àC7ò?ý|'[’V)Fè³m:ÜB$Ue# ÔH==ÅR¹ÕÒÙ®TU0Ï`3ãr0RdúæOÝ·#'urJ·ž û=á€%¢&ùf¹ºò‘¶óƒ´äîr1þÁú.ºãSk)!¶’$m\î”–U%•6Œ¨ÝÉÈáIǦëÛ¹­®l¢Šä[™LlÍ!R˜RÙ<+zs\Œµñ6tXïÚÏl¿|>oÜÄ-2üØç*é»Ôb€44­KûCÍýå‹ùxÿK¯;Ï_”c§ó«ôQ@Q@Q@Q@Q@Q@T¼;Xp£­gÁ¨Cs,ÑA,2< ²EUSþ‘ô5šÅ—P$äý¯ÿe€µ^wqÿÿ¾G—ï÷Wù £÷ì¿ëî/ýPEE0"ºå‡l{wVŽÃý*„ZTp¸6Úm…«]Ïm ŽzP𕼋/cmËä/ ÁR¾ÞÜ{V;i·r1ytÃ+žYÝã$þµÉZŒç+ÅØÒ2IjliZTZz™6Gö‡;"àýÑíüÿ ÷H·¾¼N7!‰£tänà€rW{ïöÓò«ÝÈWJ¹€ÚIkwÍ r,,Ä­#+3`0Û–RqÓš•r×®âhfž+‰ *ÛÐ&0Ûˆ˜ÁÆ Á#=ê„I&’‘ËflÚÒ+yÌÏA÷ÉRˆÇ yÁíéƒFçÃ>u­¤)y³È´6Ò+>oîÚ5n¼cÌsŽùö¿EPEPEPEPEPEPY:ÕíœÁsp#ip†Ç#9­sÖ0øwN¸ٺŠdJç#ЂpkKG‘%‚úHØ25ÞAþQH Õçwññ/ûçùЀôy~øÿuª7ÿ~Ëþ¾âÿÐ…tTS¢€ ¨$¸œ‡H"ÛŒt¸'¯÷N? žÚS4;ÙB°fRÈÈ$uü*œww2*΋‰°Â<|ÛÞÎ3ßÇl÷¬jÔä±QÉá¼Î!h%‰Š–öòô'ÔT:¾ ÚlpH{Ü9|à‰ß¨ŽPv%ÿ|ÿ:/ßî¯òFÿïÙ×Ü_ú ŠŠ`PYréQÌäÜé¶L¶¼Ø-´±`9Së@-í@„‰ã™‰ãpÁ,q’=ÄÖ Yj2ÇSØ% «æ!^3ÉäŸÓ§®p­NS·+.--Éì45’Q%åœp¢ˆð¤¹÷#··§] gLþÕµX|ï+ùÛ»ïFñúïçðª¥Ù»±IÝèGm¥MÂ4·1¼\Kq,EX3—á›q#t·ã§Z’PEPEPEPEPEPEÿ|}?ÏùÿõÿÏùüÿ^ùù¢›î7Õ¯ùÿ´€‚¼îãþ>%ÿ|ÿ:/ßî¯òFÿïÙ×Ü_ú ŠŠ`PEP-Æ-âÆqŒc þCéQ_gìØ ËºDRTàบÎo´´jö¢H¦S»I1F9rý=ýÅA♾Ó๧۷͎'Ûœã,§PøÑ7¼O<:]Øp…b ‚XyxÇßçääócž:Ó†‘zT·–€+̨3€ #'•øqƒœãšïçF6`4‹Ò¥¼´1^eAœI<®ÃŒçÓWJ¼fe(*p‘Fó€pœüü~\õ¢Žt`úUâÆŽ"W.‚G"»á±´•‘œŽ£¸õ¨.-ÞÚ@’4D‘ŸÝʲÍI)'°X½¨hÓÛêA¬‘,Ͱ•hÆòËÀ'œt>†«g\yþIòU¶ï Ó FÆC´óDZô4”ՂÛJ¼H<׈(ÆEaI vgwNxãÒ¤µÒ.'ºž#tr̸W ìœã„g §Î¬cÆæÇÌPZc"*€Ë³ÊîŒ/ïd½°j‹Ûº\ˆ E¿ eeR¼ÿ´?^(R¸Xžm6t’åP+}ÙK “åêvO’F@ÁçŠ×ð½œö>1´‚ê?.Uó2™‘‡8ú~#¡2’qcKSÓ(®p¢€ (¢€ (¨'ûãéþÏÿ¨€GþÏçú÷ÏÍßq¾«ýÏøõ¤çwññ/ûçùЀôy~øÿuª7ÿ~Ëþ¾âÿÐ…tTS¢€ (¢€!‚ü˜É‰7mÂÏÃÐv¥Gx‹¦bˆá^6+d{aúPt-m1ÛÞgiQþ„·û(*·ˆU£ð#©VXa‚嫇ƈååŽMNÞK‹‰^Ö_ô°ßiaÉ,äù~_™{îãzsë;öo…eEùùÚЬC§°®ÞC;ƒë;–%û><¸ž?¿×t z³ŸÇôåÖ“u»½±/jQàĘÕrÃå©ÀÇ~} s&«¶y$òÝwÁ 9I6²ì1üÀã‚|¿Ã=ñM»ÕfšGû;KoÆ@曯2sÉäŽsÉ/W-6¼‘ÞKqko,&âf–\Ï–‡_…x‘¹9眴k§Ïw?lÁUQ(»>~'BÊwt¸$¯f>a—ZÏÚ/ÍÏÙöþêxöïÏúÃ!ÎqÛÌüqïO:ÜYÖÑÄ—R™. ˜r®¬mùÖ62[häa#ÖR("†8®"HˆÚñ\m“ÊGÍ·þšàñÛߊ—0ÞM!ò"·2H›\p±¨ªŒðI¨8âš‹NâlÒ›Äd¼ò⸠9œ*¬Û„›¹tÁÜÃw\ÿ ŽÕ/†n>Ùãˆîvló¥šM¹Î2¬qš—EúÙé”W °Q@Q@Týñôÿ?çÿÔ@#ÿ?çóý{çæŠo¸ßUþ¿çüzÒ ó»øø—ýóüè@z<¿|º¿ÈUÿ¿eÿ_qèB€:*)€Q@Q@ ··ˆcAÆ1Ž>ƒù¥E}Ÿ³`3.éISƒ‚àh9¾Òѫډ"™NìI$Å`äËô÷÷ŠfûO‚æŸnß68ŸnsŒ²œUCãDÞñ<ðéwaˆ6 `fAå㟓’ÍŽxëNEéRÞZ¯2 Î$ŒžW áÆsŽk¿Ù€Ò/J–òÐÅy•p$dò¸`w0sœsM]*ñ™”D ©ÀEÎÂsóðAùsÔzŠ9ÐYƒéW‹8‰\¸V Šï†ÆÒTFr:ŽãÖ ¸·{iHÑFw*È?5$P¤žÁbs¥Ý‡V Ø%™—Œ}þ~NH69ã­[M:YeûR– ‰† óBë‘)ÆBbŸàƒèi£K»ó •ˆódœçrvž‡¡ì} >tdV–Ítò*ÿË8žCÊç à3øsŒœT±iW“üˆ„Æ@Jˆ¤W?t¶ƒ€p'Ò‡$· wÔ1ɪ#%L`í`ÃøúÁ®Ö¸ë|lÚ‘AEPEÿ|}?ÏùÿõÿÏùüÿ^ùù¢›î7Õ¯ùÿ´€‚¼îãþ>%ÿ|ÿ:/ßî¯òFÿïÙ×Ü_ú ŠŠ`PEP0C“1&í£ø@9ãØzàô¨ïb´ÌQ+ÆÅcL’/aì?JÎ…­ æ;{Ìí*?ЂöÿeVñ ´~du*Ë ‚0AܵpøÑ¼±±ÃÉ©ÛÉqq+ÚËþ–í L9%ƒüŸ/Ëó/}ÜqïN}g~À-𱬨¿?;ZˆgŽ ('ÔöÛÈgp}grÄ¿gÇ—Ç÷úî"ÏOösøãÞœºÒn·w¶%íJ<“:¢.Xc|µ8ïÏ¢äb$ÕvÏ$ž[®ø!‡)&Ö]†?˜pO—øg¾)·z¬ÓHÿgimãxÂHüÓuæBy<‘Ó®y%ò ãäÔí丸•íeÿK ö&’ÁþO—åù—¾î8÷©ÓÄ/U²ƒ_/sçL;sÇ%ÿ|ÿ:/ßî¯òFÿïÙ×Ü_ú ŠŠ`PEP-Æ-âÆqŒc þCéQ_gìØ ËºDRTàบÎo´´jö¢H¦S»I1F9rý=ýÅA♾Ó๧۷͎'Ûœã,§PøÑ7¼O<:]Øp…b ‚XyxÇßçääócž:Ó†‘zT·–€+̨3€ #'•øqƒœãšïçF6`4‹Ò¥¼´1^eAœI<®ÃŒçÓWJ¼fe(*p‘Fó€pœüü~\õ¢Žt`úUâÆŽ"W.‚G"»á±´•‘œŽ£¸õ¨.-ÞÚ@’4D‘ŸÝʲÍI)'°XÕ²ÐZH%7,±Ê UQ2|§Ê‘°ã?/(£œwü(.ïÌ*V ÌiFsœaÉÚz‡±ô4”ÕÇa&Ó®`€Lè›J«²«2«A*@9‘ÜzÓb³ym êWrÂ2ê$ÎNGN¸Ç^F)ó+\VÚUâÇ,žP1ÄiE)ƒœÀàýÒ8î1׊ôÿÈ­eÿÿÐÚ±®ÓŽ…ÁY›tW!¨Q@Q@Q@T½ïÿÿÙ¨`Sªš_ÜÔ?ëïÿe [¯;¸ÿ‰ß?ΚÑåûãýÕþB¨ßýû/úû‹ÿBÑQLŠ( Іcòc&$Ý´<{AØt•â,V™Š#…xجi’@eì=‡é@е´Çoy¥Gú^ßì ªÞ!VÀlŽ¥Ya„F;–®#—–68y5;y..%{YÒÃ}¤ ‡$°“åù~eﻎ=éϬïØ¾5•ççkB± ñÔúžÂ»y î¬îX—ìøòâxþÿ]Ð$YéþÎ{Ó—ZMÖîöĽ©Gƒ`TEË r–§ùô\ÌDš®Ùä“Ëuß0å$Ú˰ÇóŽ òÿ ÷Å6ïUšiìí-¼oIšn¼È@Ï'’:uÏ$¾A\´ºÝ¸iÜÙÊ^êF’|N%’E;Fß—ýa<ç ¨S·x¤–²›E ±V`$<¶Üdoá½W#î;޾Ô-Œl–ѹ’[ha–F— ©ƒ¹ÎHàúŒÚŒ±ÌñE·Ì¹$!‰1 W1xyƒiçrGLœ®Ö ê–±öëQɸÙûɧóí2NÖ~k¿ð_üŠÖ_ð?ý «*Ñ´ ƒ»6è®SP¢€ (¢€ (¢€ ©{ßþÿ³PÀ§U4¿¹¨×ßþÊ*@·^wqÿÿ¾4£Ë÷Çû«ü…Q¿ûö_õ÷þ„(¢¢˜Q@Ëq‹x†1„cãè?úTWÙû62î‘•88.æ€3›í-½¨’)”îÄ’LQ†AÜ¿OqPx¦o´ø.iöíóc‰öç8Ë)ÅT>4MïÏ—v!Xƒ`–d^1÷ùù9 |ØçŽ´á¤^•-å Šó* àHÉåpÀî`ç8æ»ùј "ô©o- W™PgFO+†pã9Ç4ÕÒ¯™DJ œdQ¼à'??—=G¨£˜>•x±£ˆ•Ë…`‘È®ølm%A$g#¨î=j ‹w¶$$g÷r¬ƒóRE Iì4EXÍ,ß,¨ÀIŠ€’3n\åHØ:àõàž*¤^…ËO¼€• C‚pÃ9\lîÆ0sÒ—: ]ߘT¬@˜Ó Œç8Ó´ô=cèjI´‰ÒH–6‰Ä¤»Œ¨»U?6OËË c=ºÓçAbtÛ¸`yä‹lHÛ î'àsÎC1ÔdޤŠÍå´3©\yË˨O99:ãy£™Záaí¥^,rÉå@‘dR˜9Á Ý#Žãx¯Hð_üŠÖ_ð?ý «í8è\™·Er…Q@Q@T½ïÿÿÙ¨`Sªš_ÜÔ?ëïÿe [¯;¸ÿ‰ß?ΚÑåûãýÕþB¨ßýû/úû‹ÿBÑQLŠ( Іcòc&$Ý´<{AØt•â,V™Š#…xجi’@eì=‡é@е´Çoy¥Gú^ßì ªÞ!VÀlŽ¥Ya„F;–®#—–68y5;y..%{YÒÃ}¤ ‡$°“åù~eﻎ=éϬïØ¾5•ççkB± ñÔúžÂ»y î¬îX—ìøòâxþÿ]Ð$YéþÎ{Ó—ZMÖîöĽ©Gƒ`TEË r–§ùô\ÌDš®Ùä“Ëuß0å$Ú˰ÇóŽ òÿ ÷Å6ïUšiìí-¼oIšn¼È@Ï'’:uÏ$¾A\°u¨±rËhâk¦g™ŒÀ®æIåxžIéŒ÷«-¬[Û£\Û’nî¦L#‘†Ì£†Á(6ŸÞrý:ñ̸1ܬ5ÌNò:\λUBOsæ+à“ûÀˆ<·^ikL¢UŽd‘ X%xgØJ®Ý¥N>Sò ç9ÉéO.A¨j-{£+åegÞòb ¢òOSòuéÏ*{mF Xæx¢Ûæ\‰Ę+޼<Á´ó‚¹#¦_.–õ¸jZÇÛ­D&ãgï&ŸÌs´Èy8ÿYøm®ÿÁò+YÀÿô6¬kFÐ.ìÛ¢¹MBŠ( Š( ª^÷ÿ€ÿìÔ0)ÕM/îjõ÷ÿ²Š-×ÜÇÄ¿ïŸçMèòýñþêÿ!Toþý—ý}Åÿ¡ 訦EPE2ÜbÞ!ŒaÆ8úä>•ö~̻̀¤E%N €y  æûKF¯j$Še;±$“aƒw/ÓßÜT)›í> š}»|Øâ}¹Î2ÊqU{Äóå݇V Ø%™—Œ}þ~NH69ã­8i¥Kyhb¼Êƒ8’2y\0;‡9Î9®þtcfH½*[Ë@æTÀ‘“ÊáÜ8ÁÎqÍ5t«ÆfQ‚§o8 ÏÏÁåÏQê(çAf¥^,hâ%ráX$r+¾IPIÈê;Z‚âÝí¤ #DIýÜ« üÔ‘B’{yôH¢»¹‡/²Ù\3¬¨á™RFãîäÇ÷H$ äŽ3žÚUâbS€Å€‘IL)bòœ+ppx>””û ‡K»š2¬K‡’dŒ–ïÝò©¤ÒfÛì]ŒÑ—ÏuŒ#yŽ»rØá:uàúPæ…b°°¸1ÊÛ‰u uù3»Žüqƒèjy´Ç·Óe¸ŸjʳGA"±\‡$2ƒ•?(àã½7$"[  yyìê¥äEQ´ ä–àóÐã¶3šItÛ¸`yä‹lHÛ î'àsÎC1ÔdŽ£™XÐÿä§ÿ×´ú«µçËstRQ@Q@T½ïÿÿÙ¨`Sªš_ÜÔ?ëïÿe [¯;¸ÿ‰ß?ΚÑåûãýÕþB¨ßýû/úû‹ÿBÑQLŠ( Іcòc&$Ý´<{AØt•â,V™Š#…xجi’@eì=‡é@е´Çoy¥Gú^ßì ªÞ!VÀlŽ¥Ya„F;–®#—–68y5;y..%{YÒÃ}¤ ‡$°“åù~eﻎ=éϬïØ¾5•ççkB± ñÔúžÂ»y î¬îX—ìøòâxþÿ]Ð$YéþÎ{Ó—ZMÖîöĽ©Gƒ`TEË r–§ùô\ÌDš®Ùä“Ëuß0å$Ú˰ÇóŽ òÿ ÷Å6ïUšiìí-¼oIšn¼È@Ï'’:uÏ$¾A\”k8›P“ìÿñù+ÉÿsrH¸éÏúÌþõ-Ljd¸“|‹páËRK’Ê7+)Œa8cŒîÇù^Ì|ÀÚ–&˜mžÚà$f1bq¸àÊÅ‹lÇü´¦\kIz¥/-‹#íäɰïß#dïXcØsG# ¡ëâ1Üy‘Jq(e†m‘1“wÌɃ¸ÝsÑTv¨¦Õm¦Þ^ÉÙ§¹K‹€fù\ÙUr ï=Ér[`æ =J;+;x×{HVf‰ü·Œ6À6¶÷g<µ±Üáš¶«ý¢yn»¶é$ÞÍòFœœ ŸÝç>ôÔu¸¯¥PÐÿä§ÿ×´ú«µÁ-ÍÐQHaEPER÷¿üÿf¡NªisPÿ¯¿ý”Tn¼îãþ>%ÿ|ÿ:hG—ï÷Wù £÷ì¿ëî/ýPEE0 (¢€ (–ãñ c8Æ1ÇÐ!ô¨¯³öleÝ")*pp\Íg7ÚZ5{Q$S)݉$˜£ ƒ¹~žþâ ñLßið\ÓíÛæÇíÎq–SЍ|h›Þ'ž.ì8B±Á, È<¼cïóòr@ù±ÏiÃH½*[Ë@æTÀ‘“ÊáÜ8ÁÎqÍwó£0EéRÞZ¯2 Î$ŒžW áÆsŽi«¥^32ˆ”8È£yÀ8N~~?.zQG: 0}*ñcG+— Á#‘]ðØÚJ‚HÎGQÜzÔïm I"HÏîåY椊“Ø,[¼Ó+»Ô·Úñ[M"d_0…=võ§°®ÞC;ƒë;–%û><¸ž?¿×t z³ŸÇôåÖ“u»½±/jQàĘÕrÃå©ÀÇ~} s&«¶y$òÝwÁ 9I6²ì1üÀã‚|¿Ã=ñM»ÕfšGû;KoÆ@曯2sÉäŽsÉ/W.7ˆw}¨ù3'Ÿç|‘϶3ænå×oÌÃw\Ž}*(µp×—lÑKÛƒ#–sò+ ‡öóŽÝJ\ƒæ#Ôî,O—²4©¿”Ž\­æ$«ž רr~;+´h–gX¼¯š ¼¡)DU!²§råx }x9[Z…Ò*é÷jñ›&͘–ÞðFT% à åp³»ÁÏJJjÁbA¢^áP±ÁR³FP®’_v<¶üN3ÒîüÂ¥b|Æ™g9Ƨ¡è{CG: 1°ØM&¨¶ 6Íæùl»— ƒ‚HúsÉ¥ƒNº¹HÚI<ÆeRÀ“´es•ÀÉÀäzŠ|ÉŽ‹ÀPÉoâ+ˆ¥]®¶Çrçw'ÐúŽ ñ^…\•¾#XlV%…Q@Q@T½ïÿÿÙ¨`Sªš_ÜÔ?ëïÿe [¯;¸ÿ‰ß?ΚÑåûãýÕþB¨ßýû/úû‹ÿBÑQLŠ( Іcòc&$Ý´<{AØt•â,V™Š#…xجi’@eì=‡é@е´Çoy¥Gú^ßì ªÞ!VÀlŽ¥Ya„F;–®#—–68y5;y..%{YÒÃ}¤ ‡$°“åù~eﻎ=éϬïØ¾5•ççkB± ñÔúžÂ»y î¬îX—ìøòâxþÿ]Ð$YéþÎ{Ó—ZMÖîöĽ©Gƒ`TEË r–§ùô\ÌDš®Ùä“Ëuß0å$Ú˰ÇóŽ òÿ ÷Å6ïUšiìí-¼oIšn¼È@Ï'’:uÏ$¾A\žçZK‰¥¸6̳‘*F|Ï•RBä‚1’xØ9¸ã›M©Yª4ŠÀÏ}0’çÅP2:¿ð¿ë1¿§|s. wq«ZÛB¶–q™bXL{Ì„òDÂTþ»Ð}Ü{Ô—¶÷±ØÞmŠã?˜ÊYƒ9„nÒ·í×µ®× ‚꯯­öÆVõîYÎK2n €x?‹r@©lüCöXcO&fÙåþìOˆ~GVÈM¼1ÛÉÏV'¾)¸7 \½ðïþC³ÿ׳èK^‹\Õþ3HlV%…Q@Q@T½ïÿÿÙ¨`Sªš_ÜÔ?ëïÿe [¯;¸ÿ‰ß?ΚÑåûãýÕþB¨ßýû/úû‹ÿBÑQLŠ( Še¸Å¼CÂ1ŒqôÈ}*+ìý›™wHŠJœó@Íö–^ÔIÊwbI&(à î_§¿¸¨lsÇZpÒ/J–òÐÅy•p$dò¸`w0sœs]üèÆÌ‘zT·–€+̨3€ #'•øqƒœãšjéWŒÌ¢%N2(ÞpŸŸ‚Ëž£ÔQ΂ÌJ¼XÑÄJå°HäW|66’ ’3‘ÔwµÅ»ÛHFˆ’3û¹VAù©"…$ö eÒ/a—Êhоâ²T`„dÄ·€O8àCM]ߘT¬@˜Ó Œç8Ó´ô=cèhçAf%í§Ù#µÜd’"Ò+ðU„ޏÇoº?{éWáàMŒè¨ÛL¨ P@PïëÆÜ“Ç8£˜,O¦YÏk­éM<{³Äé’2ÊJqéÏ_\Ž ×­W5wv W9 Q@Q@Q@T½ïÿÿÙ¨`Sªš_ÜÔ?ëïÿe [¯;¸ÿ‰ß?ΚÑåûãýÕþB¨ßýû/úû‹ÿBÑQLŠ( Іcòc&$Ý´<{AØt•â,V™Š#…xجi’@eì=‡é@е´Çoy¥Gú^ßì ªÞ!VÀlŽ¥Ya„F;–®#—–68y5;y..%{YÒÃ}¤ ‡$°“åù~eﻎ=éϬïØ¾5•ççkB± ñÔúžÂ»y î¬îX—ìøòâxþÿ]Ð$YéþÎ{Ó—ZMÖîöĽ©Gƒ`TEË r–§ùô\ÌDš®Ùä“Ëuß0å$Ú˰ÇóŽ òÿ ÷Å6ïUšiìí-¼oIšn¼È@Ï'’:uÏ$¾A\¹y¬[%ýá³…Ú‰Ýåg“%Á¿/Ê6ñ#uÏ8ô9¬Ú»À-$µ”Ú(]г ¹å¶àó#íèr”î2ûSìdžÝ|ÓÊÄf”ÈX£ÁúÕøuøì®Ñ¢Ybò¾h&ò„¥T†ÊË•à1õàpÒÁr®Ÿqö¯é²lÙ‰mãÆs÷v®f½j°®¬Ñp +œÐ( Š( Š( ª^÷ÿ€ÿìÔ0)ÕM/îjõ÷ÿ²Š-×ÜÇÄ¿ïŸçMèòýñþêÿ!Toþý—ý}Åÿ¡ 訦EPE2ÜbÞ!ŒaÆ8úä>•ö~̻̀¤E%N €y  æûKF¯j$Še;±$“aƒw/ÓßÜT)›í> š}»|Øâ}¹Î2ÊqU{Äóå݇V Ø%™—Œ}þ~NH69ã­8i¥Kyhb¼Êƒ8’2y\0;‡9Î9®þtcfH½*[Ë@æTÀ‘“ÊáÜ8ÁÎqÍ5t«ÆfQ‚§o8 ÏÏÁåÏQê(çAf¥^,hâ%ráX$r+¾IPIÈê;Z‚âÝí¤ #DIýÜ« üÔ‘B’{‹/¤^Ç;Ã,iÇ÷üÉQœœIÆN ©Ž9¨ÿ³nön1mmÛlÀHÇ;pÇž8Aô4s ³]:ê$w(Œˆ»ËÇ*ºã uRFrËÇ^E)Ò¯„+/ÙÉF*ªAq`¥@ɧzúÈ,Àiw&B€Ûá@%þÓÁœànÝŒðxÎx¦Iaq ,¨" H+#ª¹ÁÁ“¸ó‘Àì} È,Y¼¶†u+9au ç'#§\c¯#öÒ¯9dòŽ H²)Là†î‘Çq޼QÌXôÿÈ­eÿÿÐÚ¶ë‚7ŽÁEHŠ( Š*¥ïøþÍCTÒþæ¡ÿ_û(©ÝyÝÇü|KþùþtÐ/ßî¯òFÿïÙ×Ü_ú ŠŠ`PEP0C“1&í£ø@9ãØzàô¨ïb´ÌQ+ÆÅcL’/aì?JÎ…­ æ;{Ìí*?ЂöÿeVñ ´~du*Ë ‚0AܵpøÑ¼±±ÃÉ©ÛÉqq+ÚËþ–í L9%ƒüŸ/Ëó/}ÜqïN}g~À-𱬨¿?;ZˆgŽ ('ÔöÛÈgp}grÄ¿gÇ—Ç÷úî"ÏOösøãÞœºÒn·w¶%íJ<“:¢.Xc|µ8ïÏ¢äb$ÕvÏ$ž[®ø!‡)&Ö]†?˜pO—øg¾)·z¬ÓHÿgimãxÂHüÓuæBy<‘Ó®y%ò äñkÝô \D—syÄ[Ï府¶ì˜öì(MqãUa’e˜J Òy‰ß¿än\;ŽyÏ8!r˜u;xà6‘ÚÊ-6õi’PðÛp9„÷õuƳºk9-íü¿²J²F÷çjF ÿ<óøÓä …¦«—›ª^C »KywadÜ»±óÆÜ7LušŽ}Wϲ’ÝäbÛ¥“ÌXòÛŽÀFå'¹ÜsÎsÆMn+’[j0ZÇ3Åß2äH†$Ä\pÄ}áæ §œÉ2jZÇÛ­D&ãgï&ŸÌs´Èy8ÿYøm¥É­Ç}ÿÁò+YÀÿô6­ºâŸÄÍ£°QR0¢€ (¢€ ©{ßþÿ³PÀ§U4¿¹¨×ßþÊ*@·^wqÿÿ¾4£Ë÷Çû«ü…Q¿ûö_õ÷þ„(¢¢˜Q@Ëq‹x†1„cãè?úTWÙû62î‘•88.æ€3›í-½¨’)”îÄ’LQ†AÜ¿OqPx¦o´ø.iöíóc‰öç8Ë)ÅT>4MïÏ—v!Xƒ`–d^1÷ùù9 |ØçŽ´á¤^•-å Šó* àHÉåpÀî`ç8æ»ùј "ô©o- W™PgFO+†pã9Ç4ÕÒ¯™DJ œdQ¼à'??—=G¨£˜>•x±£ˆ•Ë…`‘È®ølm%A$g#¨î=j ‹w¶$$g÷r¬ƒóRE Iì':]Øp…b ‚XyxÇßçääócž:Ó—G¿m¸ƒ†”B§záœíÀ<ä0#ÔdŽ4s ³o§ÏqnÓG²Œ„Ø,ÁcÏü´^€ò~¤(ÒîL…·Â€Ký¦=ƒ9ÀÝ»àñœñG2 ’Ââ(YPDVGUsƒƒ…'qç#Øú"³ym êWrÂ2ê$ÎNGN¸Ç^F(æAaí¥^,rÉå@‘dR˜9Á Ý#Žãx¯Hð_üŠÖ_ð?ý «í8è\™·Er…Q@Q@T½ïÿÿÙ¨`Sªš_ÜÔ?ëïÿe [¯;¸ÿ‰ß?ΚÑåûãýÕþB¨ßýû/úû‹ÿBÑQLŠ( Іcòc&$Ý´<{AØt•â,V™Š#…xجi’@eì=‡é@е´Çoy¥Gú^ßì ªÞ!VÀlŽ¥Ya„F;–®#—–68y5;y..%{YÒÃ}¤ ‡$°“åù~eﻎ=éϬïØ¾5•ççkB± ñÔúžÂ»y î¬îX—ìøòâxþÿ]Ð$YéþÎ{Ó—ZMÖîöĽ©Gƒ`TEË r–§ùô\ÌDš®Ùä“Ëuß0å$Ú˰ÇóŽ òÿ ÷Å6ïUšiìí-¼oIšn¼È@Ï'’:uÏ$¾A\´5ò³nD¸PÈQæóÇÚ%OúÀ£¦ÐAà‘éŠz†¢×±ª2¾VV}ï!v ª/$õ?'^œðâ… ;²Êëó-ã]yjÒl@¡„‹+1Æ3— qÛvAM´Õb²ócµKÈa—io.ì,›—v>`˜Û†éŽ sK“KÈçÕ|û)!xÝÞF-ºY<Å-¸ìnR{Ç<çÝj Ù7?y4þc¦CÉÀÏúÏÃmwþ ÿ‘ZËþÿ¡µcZ6pwfÝÊjPEPER÷¿üÿf¡NªisPÿ¯¿ý”Tn¼îãþ>%ÿ|ÿ:hG—ï÷Wù £÷ì¿ëî/ýPEE0 (¢€ (–ãñ c8Æ1ÇÐ!ô¨¯³öleÝ")*pp\Íg7ÚZ5{Q$S)݉$˜£ ƒ¹~žþâ ñLßið\ÓíÛæÇíÎq–SЍ|h›Þ'ž.ì8B±Á, È<¼cïóòr@ù±ÏiÃH½*[Ë@æTÀ‘“ÊáÜ8ÁÎqÍwó£0EéRÞZ¯2 Î$ŒžW áÆsŽi«¥^32ˆ”8È£yÀ8N~~?.zQG: 0}*ñcG+— Á#‘]ðØÚJ‚HÎGQÜzÔïm I"HÏîåY椊“Ø,HÖ $¨èªb˜@û@W9À'8þÏN*ÔzCý–áåÌŒ‚†6WV]’1 ƒƒÌxÈwŒü¤{çðC¤N¶—»D¦œy©µÕƒò­œ6 c'9ô¥Î‚ÃF~ΨosŸ‘Y”€NÖå[ðpx4G/,lpòjvò\\Jö²ÿ¥†ûHI`ÿ'ËòüËßw{ÓŸYß° |,k*/ÏÎÖ…b㨠õ=…vòÜYܱ/ÙñåÄñýþ» H³Óýœþ8÷§.´›­Ýí‰{R$À¨‹–ä-N;ó蹘‰5]³É'–ë¾aÊIµ—aæåþïŠmÞ«4Ò?ÙÚ[xÞ0’ÿ4Ýy€žO$tëžI|‚¸««É¾ÌºnêAÁÁ$»ÇÊÁU<à =sVæñ™O&gýÑ|ÓùŽ~YW$íÿ]ÿŽûðœÌGý·y%KGO8žfó†aÆPmùN\I8 u¤¾ÖRö&X®(%Æù7©r m¼ÞŒvŠ95¸skIºáÒØ‡º.óæL‚쎹QŽóàç·>µ´Ëˆ-ï,¥‘6'ó^L’]FÒ_”ãݹÀ§ÊÒËÖ~!û,1§“3lòÿv'Ä?#«d&Þíäç«ß{áßü‡gÿ¯fÿЖ¢q´YIÝ£Ñh®#`¢€ (¢€ (ª—½ÿà?û5 uSKûš‡ý}ÿ좤 uçwññ/ûçùÓ@z<¿|º¿ÈUÿ¿eÿ_qèB€:*)€Q@Q@ ··ˆcAÆ1Ž>ƒù¥E}Ÿ³`3.éISƒ‚àh9¾Òѫډ"™NìI$Å`äËô÷÷ŠfûO‚æŸnß68ŸnsŒ²œUCãDÞñ<ùô«pð&ÆtTm¦T‹( ( wõãnIãœQw§42Gåÿ«‘bÃHê »F¬FN8ºödó]üÈÆÃ[J¼Xå“Ê8€-"È¥0s‚ºGÆ:ñR]i2ÛêSY,¶ìc-‡iãP@8ç-€Ù'4s ±Q-¦{“n#a($o—n:ç=1ƒœôÅNÚUâÇ,žP1ÄiE)ƒœÀàýÒ8î1׊nI†\X\ZÆdP3´áÕŠFåOƒƒÁô4å°‘à·‘YžÎª^DU@ÎIn=;c9¥Ì‚ÂK¦ÝÃÏ$[bFØ_pÁ8žrŽ£$p zƇÿ -?þ½£ÿÐEa]¦•‹‚³.Ñ\¦¡EPEPEPU/{ÿÀöjꦗ÷5úûÿÙEHëÎî?ãâ_÷Ïó¦€ôy~øÿuª7ÿ~Ëþ¾âÿÐ…tTS¢€ (¢€!‚ü˜É‰7mÂÏÃÐv¥Gx‹¦bˆá^6+d{aúPt-m1ÛÞgiQþ„·û(*·ˆU£ð#©VXa‚嫇ƈååŽN~;+´h–gX¼¯š ¼¡)DU!²§råx }xª5œÍËo¿É‰#ˆïÃG„ H8ö,?ºØ#¸nÅ>`Ôµ·Zˆ6MÆÏÞM?˜çiòp3þ³ðÛNMeîâáb¸‰îù -÷ä’¶œ!ÏÝç çŠ94°\ŽMnâKéev”ÛHò·Ù̧j‰Ç`pçœuíÚ™u¨¤¶?cŠH”¦ÍϹ€S!98Éö×­>A\|ú¤3ÈÌÖ„‰îâåL¼9¸\TÍêzsÇ.³Ô£²³·w´¥fhŸËxÃlk`á¿vsÁ[ÎWkÆjÚ¯öˆAåºìbÛ¤“{7Érp2wœûרhòÓÿëÚ?ýV•¢‘¤Û.Ñ\ÆEPEPEPU/{ÿÀöjꦗ÷5úûÿÙEHëÎî?ãâ_÷Ïó¦€ôy~øÿuª7ÿ~Ëþ¾âÿÐ…tTS¢€ (¢€n1oÆ0ƒŒc}òJŠû?fÀf]Ò"’§À<Ðs}¥£WµE2Ø’IŠ0ÁÈ;—éïî)5éÚ MrŠQÚ”ÉSzàôõÀ霎 ëa'us€ƒN¿"@nV†!"¡¹@A á¾o—®PÜ@öÚ•¼BV2"¬K0ýèÈO+ž™òÀ÷_öN;Tiöü ¯.䦯þ;(gYŸ{8EˆH7}Ø™ Œå² pGáVµZH¨×€ ùS‡Ç*Hqï‘è)¨Se}ÂnK©e¬ïã¸0E1/ÆÁ|ô’ª@@æû«¹Ößíþcü(û[·ùð¢àkoöÿ1þ}­¿ÛüÇøQpµ·û˜ÿ >Ößíþcü(¸ÚÛý¿Ì…koöÿ1þ\ímþßæ?µ·û˜ÿ .ö¶ÿoóáGÚÛý¿Ì…û[·ùð£ímþßæ?‹€}­¿ÛüÇøQö¶ÿoóáEÀ>Ößíþcü(û[·ùð¢àkoöÿ1þ}­¿ÛüÇøQpµ·û˜ÿ >Ößíþcü(¸ÚÛý¿Ì…koöÿ1þ\ímþßæ?µ·û˜ÿ .ö¶ÿoóáGÚÛý¿Ì…û[·ùðªw–ö×Ò+ܤ¬Ê011PÐb‹_û'NÿžàCU‹x-í!h­£dV}çs–ÉÆ;Ñp^wqÿÿ¾G—ï÷Wù e (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ó»øø—ýóüé =_¾?Ý_ä)”€( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š+Îî?ãâ_÷Ïó¦€ôy~øÿu¦R¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¯;¸ÿ‰ß?ΚÑåûãýÕþB™HŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¼îãþ>%ÿ|ÿ:hG—ï÷Wù e (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ó»øø—ýóüé =_¾?Ý_ä)”€( Š( Š( Š( Š( ŠÎ°‚k>Öy5+ÍòÀ’6Ñeã÷~õ?Øäÿ •÷þAÿãtÀ>Ç'ý¯¿òÿ£ìrÐJûÿ ÿñº>Ç'ý¯¿òÿ£ìrÐJûÿ ÿñº>Ç'ý¯¿òÿ£ìrÐJûÿ ÿñº>Ç'ý¯¿òÿªzUÌòjº´“É,py{<À¹ÝžUG§¥m1T yj~PrIôúÒo_ù䟙ÿ@×þy'æÆëÿ<“ó?ã@õÿžIùŸñ£zÿÏ$üÏøÐ½ç’~gühÞ¿óÉ?3þ4o_ù䟙ÿ¦÷ uT€*¬~C9¹ÜÇó¦šó»øø—ýóüè@z<¿|º¿ÈS)Q@Q@Q@Q@Q@WJÿ6Ÿÿ^ÿè N½¸kX‰™Œˆ€If Æxïßô  b•&Œ%ÿ|ÿ:/ßî¯òÊ@PEPEPEPEPERþÇÓ?ègÿ~ü*Ø"=¥œË‰'’>]®ôÁèqõÀeåŽæ6î¿j7 çÆ&Ão¸E9<|ñ‚;*íàg,n‘qsE§Ù´r(u>BŒ‚2;PŸØúgý¬ÿïÂÿ…Øúgý¬ÿïÂÿ… ì}3þÖ÷áÂì}3þÖ÷á€ì}3þÖ÷ᦶ³µ´Ýökh`ÝÞZÎ:gcfìY­ f'$˜Á$ÒgYÏ¿ýú_ð û:Ëþ|íÿïÒÿ…ÙÖ_óçoÿ~—ü(þβÿŸ;ûô¿áGöu—üùÛÿߥÿ ?³¬¿çÎßþý/øQýeÿ>vÿ÷é€ìë/ùó·ÿ¿Kþø­màbÐÛÅŒ¢qøPÕçwññ/ûçùÓ@w2ë:vü}®3€ÐS?¶4ÿùúõ¢ÀÛüýGúÑý±§ÿÏÔ­þØÓÿçê?Öí?þ~£ýh°öÆŸÿ?Qþ´liÿóõëE€?¶4ÿùúõ£ûcOÿŸ¨ÿZ,ý±§ÿÏÔ­ÛüýGúÑ`í?þ~£ýhþØÓÿçê?Ö‹liÿóõëGöÆŸÿ?Qþ´XûcOÿŸ¨ÿZ?¶4ÿùúõ¢ÀÛüýGúÑý±§ÿÏÔ­þØÓÿçê?Öí?þ~£ýh°öÆŸÿ?Qþ´liÿóõëE€ŽmKJ¸ˆÅ<ÐËuG\ƒø“ûcOÿŸ¨ÿZ,ý±§ÿÏÔ­ÛüýGúÑ`í?þ~£ýhþØÓÿçê?Ö‹liÿóõëGöÆŸÿ?Qþ´XûcOÿŸ¨ÿZ?¶4ÿùúõ¢ÀÛüýGúÑý±§ÿÏÔ­þØÓÿçê?Öí?þ~£ýh°öÆŸÿ?Qþ´liÿóõëE€?¶4ÿùúõ£ûcOÿŸ¨ÿZ,ý±§ÿÏÔ­q3gƒXà­ÿÙlibstruts1.2-java-1.2.9/doc/images/how-to/eclipse/developing-eclipse-style09.jpg0000644000175000017500000007061010404045230030122 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„   (1#%(;4>=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀ¬¤!ÿÚ ?³¯k•ü‘ÙÆ†¢Fsågn}Md¿ŠõhÜ£ˆU‡PbÕ P’LÍɦ'ü%Ú§¬÷èQÿ v©ëýú^Âó±á-Õ=`ÿ¿B”x³SõƒþýŠ=„Ž+Ôúæ×1Kÿ V§ëýû{;â­KÖûö)ßð”j^°ÿß±G°€s±á(ÔFaÿ¿b”xŸQ89‡þýŠ=„í£ÄÚ¬?÷ìRÿÂK¨ç¬?÷ìRöhÅÿ„—Põ‡þýŠ_øI5X¿ïØ£Ø@=£þMC=aÿ¿b”xŽÿbÿ¿baöŒpñÿ¬_÷ìRÿÂC}ëýû{Ú0ÿ„‚ûÖ/ûö)Ã_¾õ‹þýŠ=ŒC‹ý½}ޱß±J5ëÓÿ<¿ïKØÄ9ؿ۷¿ôËþø£\¼õ‹þø{‡;kwŸôÏþø¿Ûwž±ÿßcs±Fµv{Çÿ| _훿XÿïG±ˆùØ£Y»ÿ¦÷À§kÝÓ?ûàQìbì?µî¿éŸýð)F­uÿLÿïG±ˆs±µ®éŸýð)F«sÿLÿïG±ˆ¹Øá©ÜÿÓ?ûàRÿiܱÿ| ^Ê#ç`5+Tÿ¾;ûFãýûàQì¢ì?´gÿcþùá?û÷È£ÙD9Ø¿oŸýûäR‹é¿Øÿ¾EÊ!ÎÅûlßìß"¶ÍþÇýò(öQv8^J»ÿ|Š_µËþÏýò(öQv(º—ýŸûäS…ÌŸìÿß"—²ˆs±~Ñ'û?÷È¥ûCÿ³ÿ|Š=”CœN¼ÅµyÉ<ä*Ï®sc£×uGÓ5‰Ìxf‘"Ê0ʺa²æ*¥Î³e-´«PÆÎd,$Žs÷qŽ8éÏ¥uÆI™7¨ûíoMšÒáaµÛ,‘axÜøÜ:vÛÇÔ×3ZB.+R[¸¢œ:V‚½i )ÔŠÎiôQJ:ûЩhÃÚ”RÂHá@Ç Zu-)E ´´ QO0 p¦!iÂáHc†3Å-(§Ž(§˜ P(ßêp§ J:P®ÈZ¨þUB¸Î“Ò%ÐtíBO>êßÌ“gq`S?áÑ¿çÌßgüjÕI%dÉåBÿÂ)£Ϙÿ¾ðŠhßóæ?ï£OÚϸr ÿ„WFÿŸAÿ}_øEtùô÷Ñ£Úϸr ÑÇüºûèÑÿ¶ÿ>ƒþú4{Y÷T/ü"úGüúûèÑÿÆ‘ÿ>£þú4{Y÷DðŒi?óê?ï£KÿÖ•ÿ>£þú4{I÷DðiCþ]Gýôhÿ„kJÿŸoüxÑí'Ü9"/ü#zWüûãÆøFô¿ùöÿÇÒ}Ã’!ÿæ—ÿ>ßøñ¥ÿ„sKÿŸüxÑí'Ü9"ðŽéŸóïÿ?áÓ?çßÿ4½¤»‡"þí3þ}ÿñãGü#úoüðÿÇÒ]Ñü#úoüðÿÇ/öÿ¤ñ¨&Ô[²°%¶Œ18aÈíÞ¬Gâ+‰õ+h!²dI#ºÊ °*G#=F V‹ÅrŦØÝÞ[ãφIYcî Nxëß5wþx¼ï³ý’_µy›<­Ãû›óž(±ñMµõÝ­ºBñ½ÄbEó/==zv­Ú( Š( Š( Š( Š( Š( Š( Š( Š( Š ÔH„zP¸ôžbã­;ß4gÚƒ/*,#Í|Aÿ!«Ÿ÷«:ÏXŽ5–Ù£|íaƒ‚Aè;Ьښф6£b[sn;¾ö[99÷  ÓN´ŽXäXË&ï/ôèz>†«j;a ¿ IÌYFÈûªsÎñv  «[,lùl"aŒmãœô9õô5ºª›{;›Ui¢¸”¡ 2ØÚÄãž¹ZYu«U³–áI+ÛÈþ-»¿•WMmž(ÂÆZCp"r«ò¢™vŒó×nãVµ·’t¶ Pd`=÷9M¼E,¯m ̉™•#ƒ’0*œëp¤²G$3ÌøO¸»T’Þ˜ÝÛ4²k–‘1% ƒ±Šðø`¤õ P„oæF¯µ—pÎÖ­:€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¬ÏÿÈo÷ãÿÐÖ„+µV‘Çá]ÉCÝj6¶òÈä6Ö*xRz¥\Ô´Í/MŒO0¾(‡vô‘ŽÂ9ÏZ™7qÇb1sÖ"òÊæÿhtÚf‘¶°,NõÒ1ÿ–™¨(àuïù \}k> £Ö­¿ÕÿŸAPϧE=ËNï/Ϊo•À$€Gâh«¥[«î .ÐáÕ7|ªwnà}EJµwûçÿ7påÇêM>ÛN†Þ'ˆ6]›]²újbévâ6F28m™,Üü¹hK[ícdŽIp@Q–ÎÀ:ôªÒh–Ò£+I6çHáþiìxö<šm»™Ž ´®²œGB?Sõ&›ý—Ùbe™|© ªá¾mÇvNqþÑ eÐläO/2¬gï"¿ qŒŸ|S×F¶GR* ¨nƒnüh÷:U½ÕÁš}ìÛp¼ýΜÈC¤Û°!žV,¥\—åǿӶ(M¿ïË4ŽÓÆc‘™¹ ¨SøáEW]ý®Gk—X ²Çb uϧë@Ö‘Z(Xw*T ž0*j( Š( Š( Š( Š( Š( Š( ³˜•/ßüò£g«}9©Ú¿ß_Èѵ¾¿‘¦µ¾¿‘£jÿ}#@ÕþúþF›!H£iÆÕ8€B²†Þ¸##­.ÕþúþF€ «ýõüWûëù6¯÷×ò4m_ï¯ähÚ¿ß_Èѵ@ÉlÇ…¢r?L†x&Ç¿ŽÇƒüªy’v®Iòz7çGÉèß1Éèß'£~t|žùÔ/2-Ôp`1I O¥0&Ú¿ß_Èѵ¾¿‘ jÿ}#FÕþúþF€ «ýõüWûëù6¯÷×ò4m_ï¯ähÚ¿ß_Èѵ¾¿‘ jÿ}#QÊñųtƒçm£ƒÖ¢€ (¢€ (¢€ (¢€ (‡×ä/?×úV}P•/ßüò¦\ÿ­UÜT3€Hô¬æÚ‹hks+Pvv)iæ¼8êXõÈèsœU½9å’Ót€çsmÉÎFx¬hÍÉîi$’+CpåN›®€±ÙŽ ûÙ9)ôéJÚÌBÍ®DNU[n;Ÿ“òâºL‰$ÔŒk+µ»…ˆ üŒ‚F@Ç~¢µ}¯LžO)â!Xu#·½:é¥M.7†_-•çh9qÍW¸Ô,-YÖ6¹ó•,»HcëïYΜæ×&ãRKr}"äÝYïgyb7:ŸËƒŽ•VËT¸’8HÌÞxP Fc ÅI#æ<€QZ5gf$îJú¯Èa 1R„r¥‚“ÄRA¬ €¾U´»œ/p*OR= j’G<Ð<ç[v‘’{tïÖµ‡ú¶úë@ wŠh6*ØÆAÁ« crÇ…È^žÃÿ­ùW5M~äl¶kúêY¿œ[µ«¼¢(ÌØvfÀÆÖëøâ³þUÔgdš3÷Ub9&A½ÇËϧ 5Òb>mVæiŸÉó$A#)A($õüé$Ô¯R8dÄ[¤V9ä* Àdäãÿ×@-5 廂)L@:ˆþbzòyàp9Á=jÌÿòµÿuÿ¥"Ô~ÑöË Á‰BBƒ»å'ŸÊ¥²‘žâõY˘ôñùÐ!f–fº0[²!D3:ä’ëíÖ«Á«ã –Ï’ÊŠ ІÇå@A®&‚Wu»*ð'*ü—ž]¸h˜3clÄ}¸ïŽh²kQ´m1…Ä €\žAÛœb‘ïîVù aÃF‡ ØžÔ2]Í (näbsØ“ïÎiŸÚ¸á­ØofXþaóÁH I«9YsæFT6â0 }¤~†¬_VаÚL鑞”vŠ@PEPEPEP®ÿÈ^¯ô¬ú =-—t à*Žê®T«¿ÊNxÈ5-_q :y™Øz8?¥YظÀuèjcÃHƒmîgÛèÑG¸KrfSýàAýLú]”„Dàc°1Ó§N*ÄI%•´²}¥ˆÁûØ?QHÖq¥œBÊ»”Žry#¹ë@kd’ÐA#Œl qŸJÏÿ„vÄã2È@í¼ÿ…\j8ì'÷4ãŠ8ÑQT`ZÞÀÂct$H‡îЦ6ñŽÃБP1[M¶ …*»˜1Æ{àz ÒìË=¥B¨ç‚ÙCÛð m>Õ³œ`œ‘¹°OÓü欜 0$‘Ò€+\ÙÛÝcψ>:f•m`Dر€¹Ýz–“Üwc§…'M’W9áˆþT±¢Ç¢gjŒ ’iˆ}Uy!g¿‚A€ˆ¬ >ô4–ÑË$NÎ3n^½pGõ¨­´ë[Ie’ªÒœ±çôô¦/´ñxSý+Ë Ø.ÏÒž¶ù9]d,Û™°T“Óž”"ØZ¢2(L0 ÝyÁ$~¤óIqkæ, ŠR+sžƒð  ;Wûëù6¯÷×ò4m_ï¯ähÚ¿ß_Èе¾¿‘£jÿ}#@ÕþúþF«ýõüWûëù6¯÷×ò4m_ï¯ähÚ¿ß_Èе¾¿‘£jÿ}#@ÕþúþF¡2§Ú å‚î8b^»ÿ!yþ¿Ò³ê€ôßùn¿Aü«Tº6÷ öîÏ2£¹#$|¹\àrG4€¤&»,¶ánÙ¡YÍ&×#åÚÇæêx­+kÉ$¿#tòÁIàryùy=1@$ÕnMñ·ˆÄ6pË'̪r¹÷ã¥$÷ÓJV)%Š2³¢ãn ¸—o£r姇ÍHÂíÛ4G=;tíUÛXŸ|Ê£ Os÷½¸  ¶7²Ïw$NW »€UätûÜð}ˆªV÷SÚXÁóǹâ|Ès+áýï~”Ûg[xT:îŠ@V|òðNG=3ÇNÕnÓP½šTBmÊáØºœ‚Þ2;Ðð_Ìúl“’Œêáw(ùLA9'ž:v¨Q»&VW‰ã…Cnq/$dñÓÞ€RyþÕ,k8E"ˆÃ9>g$sÛŒþ×ÔïèB?+m,ß/™Î0£=~™ë@¹º’ßU˜G*+‘–|’ öëÓµU¼ÔäœC:¤fM„åXîÈ8?ìŽ Y²»’k¹%ycfÛŒj?ÕýÖç¯åQ®­9µ ³[»2£ @Â) åIÎ20;÷Ë{›«¶üôä]c+»`1ëÈÎkVÆåîT3•ËS´rÃ?N(Ý€( Š( Š( Š( Š( Š( Š( ©§ü…åÿ®+üÍrzïü…çúÿJϪÓåºýòª2ßA­Þ¸ÈOò¤´mÿé§ýûoð£ûFßþšß¶ÿ ,ý£oÿM?ïÛ…Ú6ÿôÓþý·øQ`íúiÿ~Ûü(þÑ·ÿ¦Ÿ÷í¿Â‹hÛÿÓOûößáGö¿ý4ÿ¿mþXûFßþšß¶ÿ ?´mÿé§ýûoð¢ÀÚ6ÿôÓþý·øQý£oÿM?ïÛ…&¹³iÖb&Þ£å|~]*_íúiÿ~Ûü(°ö¿ý4ÿ¿mþhÛÿÓOûößáE€C¨[° ù˜<Ý·øP—ÖÑ¢¢ ¨À[p?*,ÿhÛÿÓOûößáGö¿ý4ÿ¿mþXûFßþšß¶ÿ ?´mÿé§ýûoð¢ÀÚ6ÿôÓþý·øQý£oÿM?ïÛ…þÑ·ÿ¦Ÿ÷í¿Âíúiÿ~Ûü(°ö¿ý4ÿ¿mþhÛÿÓOûößáE€?´mÿé§ýûoð£ûFßþšß¶ÿ ,ý£oÿM?ïÛ…Ú6ÿôÓþý·øQ`íúiÿ~Ûü(þÑ·ÿ¦Ÿ÷í¿Â‹ŸÚv£Ïÿ~Ûü)SQ¶’EEfÜÇä#š,À„秦—aõ_ÎÃ꿪þtÀ6UüèØ}Wó aõ_·Õ:6UüèØ}Wó aõ_·Õ:B¸–P½gÛȲêo"«@¤lšåµßù Ïõþ•ŸLMÿ–ëôÊ Ó\Gy©Hz*F ÔÞÃZx„«{…wÙ#¯Lâ¯Í¨"[Á3Î"GŒ»mÉ£–ÝFÝú6§oß{ùdÌ€mÏLúPu8€½N[hýàäú}h£QŒùx»OÞ}ÏÞ›éëHº¤-H·±”N„£ë@ ¸ÕØÂeŸjJpŸpO_Â¥ûzùž_Ú—ÌÛ»nþqëJûV !ûtxs„ýèù¾œÑ>©¼bI.p¥¶ç¸_Оh‹¬Fd5ÀDŒ¤–¿ìÔò^˜æ ¾q–ÇA“@  ’mòîÕ·ýݲŸ¥KçËÿ=ó¤_í›4GöÔÉRÙó8ëÍI&¢±Âò›œªuÃçðúÓ#Ô£—ËÙv¤Ê2€H2ßJs߬ryotªøÝ´¾=q@߬c2]* –OJA¨Æd1‹Ä.nß0g>˜õ ÿµ£c•t²+¹BÉ !~RÜÿß4“êé 2LeBO1¶î$ŸÃ³jË´’~ì¨l{ô¨¿¶ÎÔo.äyŸtqÈÆsÖ€'—R1C¡¥t••T¯¿CÍWþÞˆÛÇ0yˆáW¾r¯¸ü >maáŠ7+6\‘´‘=NNŸ:ÓWK©4Ÿ)û…ÆHÀ9ǧ4«dìû÷18ÇSV©€Q@‡­êé0´ó9'j/V9< ¨÷±ßEa<oîð4€Óþ>¢™H£šU‚ %¹–?A@T?d,ñr7gpÎxã‘ùÒÁ©4óZ¢¡Û ;ßd.HúÓn¯æ·šhü¸Ø…CÌFâÇhÓšˆk§‰E‡HÛio·ÑßÍ^¶»Žå¤Ûm,q‚{ÕŠ@Psÿ¨“ýÓü«;Kÿ]ýzGLs]ÿ¼ÿ_éYôÀôßùn¿Aüª¾Ÿ–ëSŒ ÆŠ3î’Ít"ò~Ï8ÚžŸOZ†æÊhÒÌ$ˆ²ÛÇŒ²îSž½ÅkÆ–þlDÌ»!rÈsˆ99ö¨Îˆvãíþ=üŸ¹ìFzûÐ¥¿›3,ÊvË‚¼à1#>ô×ÒXÅ¤Ê•Šžþ!‚9  ¥°pñKo(£ešPX7ÊGLŒuíUâÐÄ-òM€†ÁÜ͹뎞٠\î™sæ ß§_zlºTl`Žu ’pTà“ס‡åéIŽc‰Ïh#;}][×ýœP)£K=¬ u2«¤KzŒ=züÝ}ªÍ®žð\F[iQ¹Ë.GÌ@\rIè(‘è‘Æl‡!sbòzoöD†8P›ˆ¢Xdë£3I–Ý·ñàÕfÐÃpfR‘ª‡B™ASž¾ƒ<Úp’R‘¢Cǵ6(ÆKxÿ€¯æi–Z\¶Í´èÑFáÀCd&ιéøPý~H*å4EP-çÛÍÃùim³'néHÏ~*•ÂÝyöŸhá~иòÜ“ŸÊLÁRBđ֢ócÿž‹ùŠ@lóÑ1QÜ-½Ì-¬ŒŒÃžs@[N°ËŠÀX`ùLŽãóÅ>;H%I#”/;WÌùA#“Š`B¶1ÉtÒ]Ëé»r« ‘×’FãÚ¥ŠÊÆujçå`6œ“ǧ,hä¶µY^_4™,_ž@úTª°«+ yRÇ—õ94€—Íþz/æ(ócÿž‹ùŠ2icòd×îžþÕCKÿ]ýzGLg9®ÿÈ^¯ô¬úb=7þ[¯Ð*¯`æ;QÀÉXÐÉ© oE%¨‘®fÈ]ÁsÀïZ’{Ð-íÆÌòÄ6¢}úšRØ|ÍîV}V8òålœ&ùù qÏbG\SN³l;eÁ¾èáqÝz~´ö¤ÆÉ2¿ë8»çóêLÓF¯oå«”•KàÆ¬.LsÏ+ê®3,¹Ç•Æy玆«Þj¢8›ÊV ¼*—+|á[öÍ$Ý«€Žß½ Ž[ŽÎzžôöÕ6K"ÉƨS,ØãqÆZwö¬[•3™FJàzôàÔ¶×ðÝÈËæUïã€qëÐúPSj°[™<ü I|¼’ðƒžO={TðÞE,/6JF„‚Ò £ƒƒøR&½†ˆ‚dóîÂówà“Š¯¬† ÒÃ*’†AU<œús@“RE½ŽÝcwÜ»˜á:=NÕá´‚$9+¼Œ¸9h°jÖÓÆ]7iÀ ƒØqž½¨›V¶‚f…Ãy€`“œqŒû÷¦ý­ *«ÌìÛUŒž¹ïÛi…Aý»m¿šÿ)|&0ݪI9>­Ú‹$º“C4»•|YQ»ï ?*ŠMbC$kjÊà|ØfÃmÉ=Çç@‹Toµ÷ýmŸý|'õ¤u9­ãhãžÝî Œv" cÇ^µO}Ÿý§ÿ¿ þ4o³ÿ 4ÿ÷áÆöôŸþü/øÐ¾Ïþ€Óÿß…ÿ7ÙÿÐûð¿ã@û?úOÿ~ühßgÿ@iÿïÂÿìÿè ?ýø_ñ£}Ÿý§ÿ¿ þ4o³ÿ 4ÿ÷áÆöôŸþü/øÐ²'GœÿLüjÅŒ‘Ëx$…vÄÖÈPc¨™×ä/?×úV}0=7þ[¯Ð*ƒMA%æ¥HÁüš’”šŽØ¶HÈÀ"ÜôüêåÕŒF+hÕÜyQާ)§±N-nVu¸?Îv¶å¸^sÇÔMþʵÆ6¶<¯+ï1ýi’9´ëv‘Ÿ 6\á¹Ï? ¦ÀÑ,yuUŒEÃu_C@Ëi‘ƃtb?¸Pà¯ãð¨_K¶rwo ÀnáNC}HÍ ¦[ªöc…Þp¯Ö•´èï™8ݹ¾öA4±iðE"È7³¨À,ÙÀÆ1ôäÒG¦ÁC&Db%%¹Uà~B€&—Í;Jïºbw;~RÛùVበŒG‚Oæsýh—V±ÝÆ#—qLò ðÞÆ˜–#† «.Òx±‘úP#ÓaŽO0<¦A˜¿8¾•$6Pñ€XJI±ÉlŒsøPE„[6»Hã¯Ìäý?.ÔÇÒíÞ@ìd8mÁwñŸ_­0]*'’'䈣–%O';¸Ïn\Ó—K¶C˜÷¡îUˆÈÀú|¢Kü“~ðù¦BØÆNr?N)N€…Ødˆ«3`äõ †Â(¦óCHÇ%€fÈ F úâ”ØÂ×Fá‹—$à`8üMI§é1Ûùl§æàå½Éþ¦˜|:²@‰8.ê¥YÃcq9ÉüwL –šk[Œ±f ÌÍ’{!Z” )€Q@·_ë?æk>÷ýmŸý|/õ¤Z—¥Ž=dþT“l‚Á$4²°UT2ÜÇgœP/fÑFðrÍãóa0ëéN[˜[í.¿—+*î,¥¾ÿ¯n:ûÐÁ< –d§…)#°éÓ9¦ýºÉcv$‹4`ß68ãòü(ÂòÁùŒK&[hØä‘»Àf™u}eLPæC–<“†ÆH}Y¹T·òJŹÕ™XÏ¿_j§öèŒYÝ Uó'*¥8bqÆvž(Ì3ÚÌbCžd ¶Õ,p3Œ“é‘Ö­ýš,çiÿ¾®hˆ’-»22rÇû¦©è-ÿëÊ*çõßù Ïõþ•ŸLMÿ–ëôÊ«Y1IõVS†!ÓåjH ›HÓM©ÛE¼¦íç®qÖ©Íw(·° °É4YÝ!8¦÷S}R}È©_½b©–£©ü(ËßHDK[ZC…y8CÁ9ûwÅfiúÄ^lÄL§e‰lùA¿.ç@Þþâ)Š:ÀÁ lc“¹ˆãéŠ}åñ‚dòʺ4o·9pÊüÎ:ÐtÝFkÙ™c_œ–çvæÿÇjÓÜH ™ÖÞMÑçj±Óš@f¦§rZI‰Ð,`'+ó*q‘O½Ô¦ŽØ„³y¦<ç¦súSq}2Ýd„&@“!ã$vÇ=ðj5Ôç{™[„I¤p9<ó@ ŸWxàI’ÀåÙ3Ê õ÷ëÅFÚÌñÄò<1íUÜcžKÿ ýh° ŸT¸ŠáEwU?,mò±b uôÍH÷wS¤lŠÑHˆò2) »ioëÍA>¥tðÌb-Ðò«>æ0½»žAö¥¹¸½ƒf'“ˆžFÐãc¢ò=†=hÖ¡u2ùF3,w¸pˆ=øÈ•A¯ïŒ–¶¢fóˆñµKç܃Œn Šžþææ¹’EhQK|Ãæ,Ýðà/§zŸK¼™Ê¤¥XHòí9Ë 1àÐGaþ­¾µf˜Q@›uþ·óþf³ïÖÙÿ×ÂÿZ@Aª2¦§b]•W2rÇ¥G)µ¸Š¸òy e]¤ã1î*•¬mÛÃVWFD€Ç/ .e ONqƒøUKImd¶­Â¼sÆ";§O‘FáÛ'Ö€vĈ—1̓œMp£chøÒ퉢dщ2_å™ G8Èï“×ðÅ&­¢+±ãù$2 Î8ÛüV{K7P†` NœðW9Æz~jæH®¶‰f@€r‚uÁ>½3ÁÇzm´èÞ7Ž;t(ʲ¨ Æxç©  1l$‰¼Ä+ Ê!™p=9Æ{úÔ¾|{6}£ž^ï´Œõûß_zt·qÈd…vƒÒP{þ_DéýyE@ïü…çúÿJϦ#Óåºýò¨t°­}¨‡©XÁÓ I%õ²¿e¹<௞ßüN+rî$Ž(ÌHÑÆÕ`+ÒÅ4—R!ÙÄHˆ,ÛFI3G‘üòN›~èééL0B]\Ä…”’¤¨È>´o¨W†6Uè ‚:X£™6Kºÿu†E2;{e>dPÄ \nU¯¥1,mc˜L–ñ«€£åÁ'N¦žÖ°»îhÔü¥v‘Æ ÉãÞ€1B1iôUüõ4çE‘ :†R0A€äCòþê?a~Qòj ¼-'˜ÐÆd#ŠŒãë@ ÄÅ£Š4b%TÒƒEÙÌH]† m"€Kx%ÿY oÎ~eŸZIm¡–'£]®»NnÄЖ¶é–Fm 1ÏZXíâŠBñ RT&œqøš_.R›#eÆÂ0ǧÿZ£[;@FÛx2‘„)þ‡¥I$1JTÉ9_ºYAÇÒ&-áü´Þm€ìño‘Іó,‘ÀÅ,pC³ÇhÍ÷ЍýhŽìp«®Tàóót«nÿ¦øõ;mNåÔfŠ`PEfÝ­üÿ™¬ûßõ¶õð¿Öf¶†ã>|qº©ãzîÅEý™aÿ>öß÷è… )K¦%½Š#Ïç(ŒC!+ü#H>Rúg­X¶±²–Ú9ÒÙ‡+äŽ?J`Ký›aÿ>öß÷è…Ù¶óïmÿ~‡øRþ̰ÿŸ{oûô?ÂìÛù÷¶ÿ¿Cü(þͰÿŸ{oûô?ÂìÛù÷¶ÿ¿Cü(þͰÿŸ{oûô?ÂìËù÷¶ÿ¿Cü(NÓÕK{l“û¡þZÍÑï÷Ä»ckt*¸ÆN)Ìk¿òŸëý+>˜›ÿ-×è?•U³Ï›«c¯”Ÿú R@[7–+dWÍ‹ˆñ²îe³ÓÆé‘ CÌhÓsN0• ܱQ¤¿yB+λŸb1ˆÆðÒG9\ç¯áQuMƒ™²!óÕŽ_åéÓ qמ´)–ýdd-1ØØˆùy|Ç;Ž8ã”Ã&£´dÉ9g]óX7u^?hÔïv©˜^8‰š%ß"Œ£¾: ÊŠkËM;Ó[…|½±r͵x<é@„ÚžÙŒ’:óʬ,vóÑNßNüŠLßE…â7yUœ2nØ»zŒ)ÉÈÁÆ~‚€.ØÉvY.̆ET㪮OæOÓš¥5Åìo ·2³¶p~Ÿ)Àíêqõ  +?µg«HÛ®g÷‹´l eü—(mü²üŸb\’xîAu늣n·ñÚˆâ’}ÑÛ·ÊÑõŽGçŸZË<Ú‘™Zâ8UYc&Á$!Ág Ï·Z’)5a#Æ7H`Ê0ÌqÆ{j8e¿ É+ÇŸ'fO rN9ô4ɧÔøÇ#fþïî ê2 \r =馿ñ%‚;‰®cIâR [8nÚxáONôÈ›TI3†ˆ»`#,°2:Ä}jW†iã3B }ªGÛý‚@ÛåQ@ÉÒÍ×±œ°}ãÈiT°Lá°}*[(fKÙÓ;âdnùrßÅÇLt Ík$Ú‹˜âd”N¯¼! ‘ïÜnþtiÖ’Ït÷sÇåmàMHùÜðON1úPkˆn R9 ̪ìè›YGpV·¬V‰üÃ#(|FÒ.ÖeÀê0;ç° ‚?õkô´À( ŠÍºÿ[ùÿ3Y÷¿ëlÿëá­ / ŸQL¤Xé­Çö¹ÐÉ ÈüÙ)ÏÔœ`h95;¡ âñ4dŸ¼1àc·=êíÝܰÝ, 2…òøï»æÏáŒS4ÖÜRÝÙ™ð„dR†É—¶j½Æ´VÌ”VÞб¾Ò@•Ÿyg/Ù¬QáY<¨Æø\àÿUQm.i%Ò2›ó!'>pÞÈöÆ£:EÉP>LˆxùºKƒó}sŽhS¦Î%mª…7~èîÇ7=ÇzS“2[Gh™ò×ÌPp®ã» |€.6žÏ-©•„«n(ÀmS´”c×Ö³¢Ñ®×ËÞùÛºàm;TnäNØ4ë›+½ÖÊÖë4q¤oÈ|°9#)ÃK¹‹,r)Ëp¤ô?ð‚€ tËÖ¹/¼®·$3Û“SÇk,61hÒ9<ÆòÐîÁ `Ö€+6—y$êÇ Ðå\.@+Ç9zÖч˜öHѬÀ¸Á‡å@·šl·s8Ž6¶ŸÞ`–ÁS´qÀàúõ§Gc4 &Ž52 ‹ìßÆÒ¤žØÍVIž;6ŒÅJ۶Ⴥkdrÿ ³}§O4¯šÒ ´_*¯L`eOçœô W)Ê•$G´nbß6Üo>§µS‹F¸ËoT òÕ˜ ”Ï@8nÝè]6å¦<¥²bßur~QÇLqJ4˘bK;Ir°þ.Î=Ïjµu¦Îó¼JcE~?ëîj6Ó§o!Š,¬ÈUÎ*îÂò½:Ž´fÒÒhËÈYã%·Ä›÷pˆ$ôªI»6Ln<•ˆ Ù`†çàþgì €ˆy$ްìÊ ¶sŽƒòªí¤Ü}©¤hb™ HB³}ÝÌH==è~Á3;neõ8ëZÔ )€Q@·_ë?æk>÷ýmŸý|/õ¤Ã¹bøÀ=Æi<˜?Ùÿ¾(ò`ÿgþø£ÉƒýŸûâ€&öïŠ<˜?Ùÿ¾(ò`ÿgþø£ÉƒýŸûâ€&öïŠ<˜?Ùÿ¾(ò`ÿgþø£ÉƒýŸû‣T±ÆÏܪ’ ¯Ìª6«Û£é’h—×ä/?×úV}0=7þ[¯Ð*ƒN*ïS“Ú‘¶>© )É¢_¼^h¾ÚÜw¯\õü*åÅìBÞÞihxÆ3É4ròéq¹_¡]õ D.e®qøóAÔlÀμœóéïHB‹ë_“÷Ëóôÿëú~4‹¨Ú~IVQ’1Ç~ç­hoLãrç8Æ{õÅ EG?ú‰?Ý?ʳ´¿õÑÿפtÀç5ßù Ïõþ•ŸLMÿ–ëôÊ«éÑù·Zœ`ã|h¹ôÈjH6¥p#ò¼ëã`&qþ]X²Gh©0Y`öäõâ•î;Xª4±æ£‰X›tk·¦X1÷ä û=¸ó›ýG“Ó¶ÏëLCÛKYXLBÌÙ‘võäéÉ4¤«E pbŒF®HÇqè}èóipÈa1°ûÎÌüóýj(4TŠ;„óïÔ©Ø@Ï  ÞÆæ;¦>hHcR‘`Ø, Ï寛6ŽnL­$Š»ä-‚»°8éèxë@¡´Ž;5¶p$Œ ÃL¹²YüŒ"t(0ÀqÀ=ºR5ÒÐ+#ÈY MÁ }ýi©¦È'iÞà<•lÆ6• 1ŸöE0t˜ «C0Cmû€Œa};RG¥,q«óïýÜJ£w8ö ¶Ž­x. £!ƒ}Á¸üÁ°[¸ùp=5´¹cž -ç S‚YsÇÏÛþ@  ÊCçŒ7Æz:Ôë§,D.1æ,¦VÇL“’(«¥„_g”!p“p ãß°P)Ñéj$c3¬¨Y›a@9c“ŸZ_ìÅ7FpcÜŒ. c?CIa¦-sæyÎÃï2Ž>f?û7é@6‹æÅyJJ¨7`dnù‰ý\þU¡k\³ïy{60 À>€PÔrÆ#Pd^ƒ½=]î°?CL¢€ (¢€3n¿ÖþÌÖ}ïúÛ?úø_ëH 3ÜÃlŒf '=ê¯ö¥—ü÷_ÈÒþÔ²ÿžëùŠâúÆxÂý«aʼƒøƒ@+i|ùó-Á-»2 $ÀJ°÷ºdŠêï+œ°)÷¾¼{S©s¥F›#0ªä¡02:v¦ùÚ8mƒ·åô>½(~Ѥy'îw¸Ã7—Éü{ “íúvíÞdyÝ»;O\c=:ãŠö¥—ü÷_ÈÑý©eÿ? ù@6]JÍ¢p'*@àÔ_Gÿ^‘Óœ×ä/?×úV}0=7þ[¯Ð*­`æ;QתƄ~MIÆðå£Úïg›vÝØ.p8ô¢kÖögÊ2K4C¸:õ¡¤¶Av÷*¾¬ª@ò6öÛ üø`§¿‘Ö˜u¸‚‚ ”¾aéÂc;ºû:Пک’ 2<ÞGîòp;óÈ=)ƒXO%]­ä]à2G ÷'8:çSHž¤[ ²pé×Ò‰5eE“ýBñe\¯È?<€#ŸZH€c ,­ÁÜ^ü~5#j»r†Ú_9T±+ œçÅM5àŽ;y1„™€$ãågžj]^;™Ö†Q!ÎAåŸÎ€.‰£2¼@è2F g.®]Ô¥»ö;·Ì7»{g޽4€›ûM<—sŠT!Ãc?9À¦AªnKo:åŒ9ä`éÏ?AÍ0Ú¼?jH#I$-˜/'¯Ò&¦‰KåHv¶Ý¼[¸ü(ÖápYa—ËÆàür0 8Îx )“k!R'1¼HÍ»-ƒ¹^Ÿ…H5'¹…>ÍG+J ‚Çó EFšÁ‘‚Fª]‚¼p[òb€#R¾{KiЮ騻qòànç çвú‹=’<&111î ¤¨ @öõ  ’kWÛ’cÍó‚A_›ëòÔ·W÷QYn,¸‘òb)®z{‘E€}ž¦òÏ ’61y¢5p‘ÓÏZß°ûïô  ´S¢€ (6ëýoçüÍgÞÿ­³ÿ¯„þ´€¸ßxýi)Q@Q@Q@ROù Ëÿ\Wùšå5ßù Ïõþ•ŸT¦ÿËuúåPiˆ²^jHßu’0q醤€Î“R…Wcj7>™Íi]ÙÀc·ŒÛcc*ÃñÔ¦žÅ8Ø®,-„›ü¾s¸eŽç<ÜóÇZoöu¦1äŒy~_S÷qŒ~´ÉÖÍ!s$î8b瑞ÂÙ‘ScT6»”vàô Ëk¨ˆñ‚©÷GLqŽ*­Æ“ Ȩ¬Ñ¯;Èf,ãÐœóøæ€höí<6dF,y!T¸çùb¤¼Óc¹S´˜°Ôœ‘Œc‚?ȦŸO…‘‘X3)çvhÏáN‚ÆÞÞS,jÞangf<ãÔû @Xª¿ÙÖ»qå±ë–21c‘‚ ÎHéÁô Ico++:®ÞF@<ãÞ…±·FŒ…oÝýÀ]ˆ_Àœ…9ía’a+)Þ1ш2ôÓalW2½QŠœúäçß½5tÛDËX@]¥q¸ô ä£ò¦C¥ZÇGC)݉ü<j’;£š9·Éž‹dœ äóÀÈüMH¶°++À*ÌÀûž´ évªŠ€L+û÷ùpãž8&¥’Ò -ÖB"RUb¸ÇN”ÇÓ­$ò÷—»g'Œõ§Miò–—æSaéƒÖ€%‹C‰K`wc{c>¸éšÒµâf-ŽGj`X¢˜Q@·_ë?æk>÷ýmŸý|/õ¤ì¼œð{R|ŸíRù?Ú£äÿj˜ÉþÕ'ûT|ŸíQòµ@ÉþÕ'ûT|ŸíQòµ@ v› vŒÖuœ¾}÷›Œo¶FǦI c]ÿ¼ÿ_éYôÀôßùn¿Aüª­™+6¬AÁ!þÔÍ•‡ÙK¡/³;Ž3œVeÅÜ‘ÚØ~ò42Ä7K(ÊŒ~#¯Ö›wbJÅFÔî Š‘˜7;íÁRL_8_›žrGNê#¬Üì,Sò“Óp#§zƒûb/Ìò£Ýõï&íÙôÏ?}½é}G÷²ÆÉ2ù‘ðÊ`“Üã­Gq«MjòݱIH!¸Êñ€ n¿Lý(ýÄóX ‡YÛ•HÎ8úšmõä– A!ù· Ätà(#=zŒâ ¿¼[`E+¤#eNàGE<õõéô©Qy5=°M …‡\‡8Bs€y?¯À|Z”íc$â3 bJaT3ާ?QL‹S¸0îq;ÊåOÀù¸'ߟʀ6­:Þ›x¼“¹‚)aÊꤑ»$rqÒjÓ™"䶇ÌÁóNùøûܧ¯z‚Zådb±(ó97ª¯Ê2G?úU‰e¸Ibg"âG…@<)áU‡à¹üM@÷SÍ4$ßgŽ@ÙGŸË®Ðy“’Ü{T¶w3}¶@²Æù–²î8ŒƒÂýsÍ6yçmA’ ÜH&Rbß?vÍ·„ŠM:{›ûÇ•$f…83Àó°<ùP[«™QÄ…|à$œ/2r9éòŠß±¸kˆä,Èûh’1…~Èäúã¯jè#ÿV¿AKLŠ( ŠÍºÿ[ùÿ3Y÷¿ëlÿëá­ / ŸQL¤Eð¯)%I_º»È'Ú˜ ¸ùŒ¨y`8¯¿¹©·/cžqøõ ‘Ò–ÿê$ÿtÿ*ÎÒÿ×Gÿ^‘Óœ×ä/?×úV}0=7þ[¯Ð*‡KÛöíGv6í9éŒ5$4—*2WKv\ó̘Ç×8­ë,[Bycr-z« Û£!Ú¹''Ú«è?*.ÕÈ8Ô…TŒ{Pd†9Ô1C•Ïn1OÚ¹ÎzgT })© hT±cžrOzxàP@$#¥ Õ@縠"€«¥/Ê«ØH@ÀPÒ€ ©¸ð»»úÓ^¤dg@J®{vþ´í«è8ö¤Ž$Š5Ž5¯Aé@ QOUê)#1²‡i üKÞ€'ùÑóŒ^”…NÂÈ ã€„D©ˆ€pjr¼}—è ZMExE(HsMM^)6ìx›qÀÃu8ÏòæÀ™oX°'r€ )€Q@·_ë?æk>÷ýmŸý|/õ¤™îbRGÉà"?¥UþÐ_ùöºÿ¿-@ö‚ÿϵ×ýùj?´þ}®¿ïËPý ¿óíuÿ~Z~€çì×yÿ®n(´F1ö{¼zy-GöˆÿŸ{¿ûòÔŸÚ ÿ>÷_÷å¨þÐ_ùöºÿ¿-@ö‚ÿϵ×ýùj?´þ}®¿ïËPd¾ ¨¶ºÉ©j‡MVK„VXZÆ#‘@Þ»ÿ!yþ¿Ò³éé¿òÝ~ƒùU[0LÚ°$Ä€ø R@NÚ½€´)ç.í˜ÛïY÷+0³°›`Œy‚.Ú†î¦Ñß<¡3p ¿ïHl oÛí·9ÅFcÕ6š|ˆLŸ{þZ`ñôÎ8  Jß,¥39 Ø„ƒÇÞ9-ëÆ:Ó wñÛF7\1hÕ¤$—î¹ÎWê(ãExÒZ†¬{²ëä §‚ÄœóŽxª*šÌ’LÏ‘¹“Î@mÄî=¨F]CwÊ&.7evd`|R¯ö„Ó]J†xÓi0£`dÐËxna0½ÊBÀu,s¸îÜwØÆsSØ4é •”îr<Æ$q‚K`ýÑÛŠÎΤm¢6þp>NÑ€H?!ç9À9ÇoÆ·Lr¬h±Ê2ÌÒ.âÃð#ªÃu<²E‘ÑáeÀ%UIœô=¸íJ«t¥åCrcWM±¹É)»Üš‚8î·\ÎÂåQò`…x ¸#éV&]@éë±¼²Bî@ ºŽÿ6FJ!ª!ÜfpÏœ.NNÞäÓ<ÿZ¨Tf“p Q‚¿>Öã’r2ÛÚ€MêÞÉk‚È Ãóq׫z­%°½´*ó4‰ I¸¨LrrsŒç=³@k ¨ã„D%I;æEÔMŠÍ¢¾MŒÏ’V%eÞK’FF í@hÖ·0D¡A‹Æ­æÄ9#9)ÜœÔ g2»ÜClèñy¥WhÁrqø©÷€ÎÊK-:[‰ G0Rv.A Î3×Þ˜öSÅx?s0·IýÏP6cŠÞÓüß&?>gÏ^µ¹B¢˜›uþ·óþf³ïÖÙÿ×ÂÿZ@^ÀùÉϱ¤Êu¿ï¯þµ §÷[þúÿëQ”þëß_ýj2ŸÝoûëÿ­FSû­ÿ}õ¨Êu¿ï¯þµOî·ýõÿÖ )ýÖÿ¾¿úÔe?ºß÷×ÿZ€ §÷[þúÿëQ”þëß_ýjkº$lÛXíýïþµfÙJg½óX^Ùïš`s:ïü…çúÿJϦ¦ÿËuúåPéŽ#½Ô]º*FOäÔ€¡$Z÷—æ)P£œägLV”÷ $pÌ\xÁÉ╚ݴö"2Æ7eÔmëÏJ<Øÿ¾¼œuïé@ƒÌO—ç_›îó×é@–2¥„‹Ôç¥+:ªîf}Iâ“ÌL‘½r:Œô ¥E]ŸÎ8æ6>x¼uïé@ K 7£<ŠjÍpu+Ï?Ö€¤òGµ#:¦70\œ œP"¹†h–HäRŒ2iLñ,Ë p$`H_\c?ÌP•Õ†U¸4‚Da•u#®A ËÎdQ·¯=(2ÆLˆqË´Èî"‘œ‚¯³ž2x<~tƾ·:;aŸ#Œ ?¨ –þÞ)¼–.ÒuÚ‘³ÞƒÜRÃ{ҘћvHù‘”88$sŠkêV±Ï仲¿˜#ÁFq8ÇAJº…»ÎaC#88;bbÉœ`r Fú¥²´ªÁÿwŒü¼u#úº¬AR=Á  (íâÚ­³œÖ¦ª¢€ (6ëýoçüÍgÞÿ­³ÿ¯„þ´º{ødúŠe #—%BıÇÊpqßôÍF ;™áF:ô'&˜ Ò7™„!†:§ŒçéJ3½™pù8ë’E q/;q…Éþ”+r\ÅŽþ” ŸËV‘¶†=qÓŒÿ>(GmîY†ÕÉÇ$€? JHƒœƒŽéiÿê$ÿtÿ*ÎÒÿ×Gÿ^‘Óœ×ä/?×úV}0=7þ[¯Ð*­`†KQ«F€~MI9½¹yCOŸp]¹ÀÅR»±”Ab¥#w†09ÊCÓéF½@¤t—yW’Qq=L€¸o›ŽØÀë×µDtI ã|\A°px|»ùs@6•'šûL[¸ë˜€b~^:œã·Jchî°D‘ˆ²‘ªžv‚Ãø?B({½5å…Ut€‚YØí^1¸#ðéUÿ±Ììì¬@Å‹7Ì7†#ÿ .‰ô¿2G(à&C"ŠÙä?SUäÒ%’c+î_•Êùœ°:ñÓß­Yµ²žÚi] @60[<ŒœžG²EU›K¸œ¹Mˆ¦fuŠ•ä|ÜsŽ”¡id¶úzÛd©ÇÌÑ’ >¹¦^Ù<ínc* Gï9Έ ž;â“FýѼ¥Ä ²Žyþ"=i³îíîfH >åØü ªŒƒŽ¿/ëL&–æÁàiš6eeQªÇ=7}O4È´§HBåñ¹˜Û“Ž9þTÉt‰¥¾ó£(X˘RÜc€¸¦*x§·)3(e~8nOÔ~T.…"º•d%™q€9ã©ãÔ}jÀÓšâÞ#!1±•¤uöfÉ_å@ L±ù ¢9Ú=Àù®W®Üè¿­> 2E¸w¬aÛtNÛ›qÎ:qj$Ó$šåÌ¥<’á KcË+Üuèi,t¦Þ{­’Ì~e*Hçs7þÌ(¼š<óÅ@v.Qý~rAÿ¾ñøV­»[ÆûÂ)wݱ>êpåžè~?õkô´À( ŠÄ½Ô,ã¹hÞâ5e$ONMQžòÚââÍ!™¾Ð§ÒýÄælE$„žˆ*¯Û¤ÿŸÈn“þ|®!þ4¿o—þ|®!þ4hKÿ>w?ÿCxÌrÖ }Àÿ_·ËÎ,îp}ÿ>ß/èw˜›ÿ-×è?•WÓß˺ÔäÆvƇò IQü;#Bdû^8ÜAŸ^½µ=ìbÞÖWÝ™#UT±?€æ—*ŽÅ99nW}NÕ ŸƒˆØî9ÇËÇ<‘Òê¶`æ6?qºzôéïÒ™#†£mòüíÏ_üœãæãåüi«ªZ2üãh1°-ž›F2 @Oö˜C*—±À·çÓñª·Z¬ÂJ12¼Ä ¤ã=}qÚ€ªFÍÆ 4’l+\ûãö¥]ZÙæŽ4,CÉØFÜc¨Çž½)€õÔ­YÑ7°g8U(ÀŸ|c§^zpjI®ã‚PŸõm' OAÏZ@6ßP¶¹$2om»±´ð2G>œƒR¼ñGÈÒ.ÄûÇ=(¯ö­¸‘Ä‚HÑU[sFÀ|ÇcŒg8ÈãЊ"ÑâŠBâY77íQ• 0|zÐéÑÅ:Ld‘ÝÕ-»‚àvɤ¸Ó¾Ñ"o•Š¢°òrX¦ÑHXiñØïòݘ¿]Àìz?¼jg·ŒÅ$h«þ¥TuõÁ4Z=*(Ô*Ë.>RÃ#æ*ÛéÇ9éŠ&Ò£šBÍ4¡71€Äc=3úÓë§Çöƒ4®Ó1]¤:®NNÏNôÕÓ"Žw–7d-“… 0O\gõ¤'Ñáš1™"¢ |§ è2?6ãGŠKY"G`Æ0ªIãØíþÑ })Nù¥’I1Ä/ª‘Æ1ÆÑÚ¤‡NH݃ñ˜¼°©%²ñLÿd[ùl ¸fË.1ž¹'§SÇåK&še9–îwÊÛ„”õ/òæ€%›LK¶Qèö–b# 7d9ãК„ê].ååÈÆ@#?\!@Æ%ÛÎg ‰6…ÛÔ™4ëmíäW X¢¶0»ŽOAüèbÍ"!†ꞘQ@$ÿXßZoøÐ2œ &åþâþf¤A¹¸¿™£rÿq3Lrÿq3Fåþâþf€ ËýÅüÍ—û‹ùš7/÷ó4n_î/æhÜ¿Ü_Ìѹ¸¿™ É HÙ„k ïþ5™a#Mv$¼öÈÇë@Ö»ÿ!yþ¿Ò³éé¿òÝ~ƒùUk)>ªëÕbB?&¤€shy¶ó#¿nìî8Î=*½ÕóGka4˜ "€ìN00Oô¦ÒZ$orŠjì÷‘ÆÐ¼g ¬3”ÁÉŽ íRlfàB–ìåÛ°$+yÉÓ¶iÑªË šhC±gá $¢ž[vö÷«2jXbvs“‡\9ëÚ€"‡Tk…S ±ùܤ{ß°2OÇ,—Ãìp\Æ>I<ä઱ã@C«™nV¶mìÃ$ ¤?ºzV€•|ãpÎ÷óéH ñ©Í%ÜqG ®\‡Gb.$cŽŸ­:=Wu¹•­Ù?r³Ü ÃåLÁ©Íä[4ð¨3óî!z€;u9éúÓåÕ•'Hã·ò11²•àqc×çÔJ¤¤C—¶mÝÍè0 ”À”M :™Y·d+(Ç2 \|o~¼~lv²®ÒXäÙÀ;^´û_·®¥²i]¢^9‚1÷³Ó9ÿõV­ (9ÿÔIþéþU¥ÿ®þ½#¦9®ÿÈ^¯ô¬ú`zoü·_ þU–¡ïua•dŒ톤€È—S´O“í7¤gC¦GáŒÖ½å¤,-åÄ ª¡þu1i”ãb¼v±nÙ ÀƒÇPqŸä?*#°µŠ_1 Epr:S$$°µ‘Y^!‰${žµ$¶ÐÌŠ’Ƭ«ÐÔ×´·xü¶‰vgv1Þ‘í!pР2’}½úP•´"…UýGãþ&¬Pqel+÷·þ4Ick"F¯Œ£è(VÁÕÄ+¹X°ö4ùm¡šEy#VdèOjkYÛ²m0¦1Ž”Ô±µDذ _L{cùq@ ‡Mµ‡vØ,åÉnyÝ»ùÿ*rØÛ¤ˆñ¦Í»¡8Ç?KäE»vÅÎýùÇñcü¸¨?³,°GÙÓäz•í`{o³´JaÆ6v¤6²„àB¡‰Ž„ðOêhÜšO›*;°;U—ocœgù~¦˜ººÊ²,Q^„r™4À½mnйbÀäcбLŠ( Š(  -u¯£…ŸNX^eÉÙ 'pÉé‚9ª‡í>]‡Û<¿<Ü!a!G·$ÒõÌ’ÆŒ!‡ÍbzÆ*¯Ÿ}ÿ>KÿE}÷üù/ýýy÷ßóä¿÷ôP^KÉ«ØFÊzƒ "’6º‹>Vg®×?¥?ϾÿŸ%ÿ¿¢>ûþ|—þþŠ<ûïùò_ûú(óï¿çÉïè ϾÿŸ%ÿ¿¢>ûþ|—þþŠkË|èËö5ÿZ)–´7b7á’ÙýEs:ïü…çúÿJϦ¥³”3$öâ©Áug]7ÚãÍÂ…<—_z@Möí7Éò¼È1·ÀÏó¨$ºµ6ñÅ ˆÑ¨]ä?m¶ XŠ)`‰ ÿj†‰”2sŽ´é&¶y¢‘u0:¨ ëžiô¹¶Upú‚1$í;@ÛúóLI­Ð*M „Û‚ óëœÐËyf¼F>¼ëPÝMm:”MLD¥H;@Ï×9 %͸ۻRFÇ_” þµ–4®5A‡ T§±Ð2Sumäl‚ 1÷ð:ý3J·V oО9Àü{÷ Dbâý¨™ ’v/#Ó¯ëJ. :š¿xl_›õâ€o%¥ºÇê*b…*9>¹Í2±…6.¤q¼?ÞºŽ½ "ǧù¯#êR3Jþô€¼“Ðwý*KF°´WP. ó¾îGSÉïý( qYE(tÕdÀV]­&GÌIîzŽ1ô§Û¥…¸,5yN~wœ~ÅB–Ö0„j{<¶ ¹±ò•õô5¤—¶JT›´$}9ýhgûjÓþ~"üÿúômZÏÄ_Ÿÿ^˜öÕ§üüEùÿõèþÚ´ÿŸˆ¿?þ½ÛVŸóñçÿ×£ûjÓþ~"üÿúômZÏÄ_Ÿÿ^í«Oùø‹óÿëÐýµiÿ?~ýz?¶­?çâ/Ïÿ¯@öÕ§üüEùÿõèþÚ´ÿŸˆ¿?þ½fÜOÓ4ƒW áB®F¿f3DòêÞ`Ã…*£‘H FúÐ’~Ñýô(ûu¯üüEÿ} ,öë_ùø‹þú}º×þ~"ÿ¾…ûu¯üüEÿ} >Ýkÿ?ßB‹}º×þ~"ÿ¾…nµÿŸˆ¿ï¡E€>Ýkÿ?ßB·ZÿÏÄ_÷ТÀnµÿŸˆ¿ï¡GÛ­çâ/ûèQ`·ZÿÏÄ_÷Ш-åŽ]VVÕÇ”¼©Ïs@¶»ÿ!yþ¿Ò³éé,Š¥*(Ü[ ïPD–³ x–ôeŠ>ÆÂB«ýü(âž°Û²†X£ Œƒ´PÐÛ®7GÉÀÊŽ´¿g‡þxÇÿ|ŠO&ßq_.-Àd£8¦Æ¶²3ªG(pß' b±ˆÙöŵ[k½qΤûÏüñþù}žùãýò(ûÏüñþù}žùãýò(ûÏüñþù}žùãýò(ûÏüñþù}žùãýò(ûÏüñþù}žùãýò(û÷Ë+4o+R¥$Ý–b23‘^>ÚÆøIŸ,å|Àeýà¾VÉ=2G§Ò€5àVU}ÊÃ.ÄnlñŸóÅKHŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( ]ÿ¼ÿ_éYõ@z=Ü‚y$"äôªë=˨eÓî ‘xÿV|Û¿ú\~ŸãG›wÿ@ëÓüh°›wÿ@ëÓühónÿèqúónÿèqúmßý®?Oñ¢Àmßý®?Oñ£Í»ÿ uÇéþ4XÍ»ÿ uÇéþ4y·ô¸ý?Æ‹y·ô¸ý?Æ6ïþ×§øÑ`6ïþ×§øÑæÝÿÐ:ãôÿ,æÝÿÐ:ãôÿ<Û¿ú\~ŸãE€<Û¿ú\~ŸãG›wÿ@ëÓüh°›wÿ@ëÓühónÿèqúónÿèqúmßý®?Oñ¢Àmßý®?Oñ£Í»ÿ uÇéþ4XÍ»ÿ uÇéþ4y·ô¸ý?Æ‹y·ô¸ý?Æ6ïþ×§øÑ`6ïþ×§øÑæÝÿÐ:ãôÿ,æÝÿÐ:ãôÿ<Û¿ú\~ŸãE€<Û¿ú\~ŸãG›wÿ@ëÓüh°›wÿ@ëÓühónÿèqúónÿèqúmßý®?Oñ¢Àmßý®?Oñ£Í»ÿ uÇéþ4XY.‹Ö¨'–l`~µd(ù²OËé@Éêß•'«~T|ž­ùQòz·å@Éêß•'«~T|ž­ùTz›ÆAùP1'ÜЮÿÈ^¯ô¬ú`z©ÿsÿ×/éSÍ}-¤6HŠÈÜG@ç¿^@ïIV×V¾[$/äLÑÚ¤Ò0Îrr1^9©Tõi–Ýáh!FKq! Œ0ÙÀ?1J`Jº¼ÃM{³´Ì²È¡TÛ–ÉúŒzlZ½É‰<ØàWg1ýñÓæ8$cœuë^"“\¸7¿f†8±#â'~ß0S=ûÒ˜šõÌo’?;sçHÈ^½h;MjëÍØ°nW»op Äm#¦;øP·÷_Mr%VFW%Éù‚¹Pž¤.{õ  :~­s)Rë‡ÎX{ïÉPsžý+r€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (³ªo¥fŸùiõþ´˜ ®zÊþð4#zÊÓñó>à9ëÀúsõ  M«J¸ÆŒ™9UûÈ9úç#§JGÕnIhV0„fí<ämÎOnKg©I4ò‰£X¢\á‹ Œ69äž~‚¯ùÑnÛ½s»f3üXÎ?.i%SOù Ëÿ\Wùšäõßù Ïõþ•ŸT£^EçG$YÛ½1ŸN*Ôrĉ(ŒÑ(Ub¼Š@9g‰s¶4ºázÓCÛ…Ú ˆ(ç8¢à=ncTب1 qH³Â«µbŒ.1€¼cÒ‹€‚hD…Ä1ï=[o&£ZË,r<³F\Ž}¨¸™á,Åå9o Ôqh£‰Ä*<Œ•§&‹ ¸zFƒœð;ÓþØ=ëEÀ>Ø=ëGÛ ýh¸Û ýhû`ô­û`ô­lƒõ¢àlƒõ£íƒÐ~´\íƒÐ~´}°zÖ‹€}°zÖ¶AúÑp¶AúÑöÁè?Z.öÁè?Z>Ø=ëEÀ>Ø=ëGÛ ýh¸Û ýhû`ô­û`ô­lƒõ¢àlƒõ£íƒÐ~´\íƒÐ~´}°zÖ‹€}°zÖ¶AúÑp¶AúÑöÁè?Z.5Øe+Ç5F{„˜9Üx ¥é@´¡ÿžw÷å¿Â˜·–©÷må\œñnÝ*@2[›YQÔÃr»ñ¸¤N¤þ#šd2YÄå¼»Ç9ÏïGÁõïL ¾Ûl ³Í–û߸n~¼RÿhAœù3ç9ÿPÝ*@;ûJùçqÿ~[ü*;Y<ýJYU$Tò€Ë¡^r}h—×ä/?×úV}P•/ßüò¦Ô€Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@>»ÿ!yþ¿Ò³ê€ô©~ÿà?•6¤Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Šáõßù Ïõþ•ŸT¥K÷ÿü©µ PEPEPEPEPEPEPEPEPEPEPEPEP®ÿÈ^¯ô¬ú =*_¿øåM©¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8}wþBóý¥gÕéRýÿÀ*mHQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Ãë¿òŸëý+>¨I•A¼ãÐOqLØ?礿šÿ…HÁÿ=%ü×ü(Ø?礿šÿ…üô—ó_ð£`ÿž’þkþlóÒ_̓þzKù¯øP°ÏI5ÿ 6ùé/æ¿á@Áÿ=%ü×ü(Ø?礿šÿ…üô—ó_ð£`ÿž’þkþlóÒ_̓þzKù¯øP°ÏI5ÿ 6ùé/æ¿á@Áÿ=%ü×ü(Ø?礿šÿ…üô—ó_ð£`ÿž’þkþlóÒ_̓þzKù¯øP°ÏI5ÿ 6ùé/æ¿á@Áÿ=%ü×ü(Ø?礿šÿ…üô—ó_ð£`ÿž’þkþlóÒ_̓þzKù¯øP°ÏI5ÿ 6ùé/æ¿á@Áÿ=%ü×ü(Ø?礿šÿ…üô—ó_ð£`ÿž’þkþlóÒ_̓þzKù¯øP°ÏI5ÿ 6ùé/æ¿á@Áÿ=%ü×ü(Ø?礿šÿ…üô—ó_ð£`ÿž’þkþlóÒ_̓þzKù¯øP°ÏI5ÿ 6ùé/æ¿á@Áÿ=%ü×ü(Ø?礿šÿ…q:ïü…çúÿJϪÒ¥ûÿ€þTÚ (¢€ (¢€ (¢€ (¢€°`àdg½Wûëù6¯÷×ò4m_ï¯äi€m_ï¯ähÚ¿ß_Èе¾¿‘£jÿÏEüG¤ð¬ªà+r2 Iµ¾¿‘ jÿ}#FÕþúþF€ «ýõüWûëù6¯÷×ò4„(™ØÐvη1,¨p¬7 úT»Wûëù@Wûëù6¯÷×ò4À6¯÷×ò4m_ï¯ähÚ¿ß_Èѵ¾¿‘ žTK„‡v]”°Àì1þ5.À1—#=ém_ï¯ähÚ¿ß_ÈÓÚ¿ß_Èѵ¾¿‘ jÿ}#FÕþúþF€‚ª–2.ÉàÔPʳB’®vº†÷¤®ÿÈ^¯ô¬ú =*_¿øåM©¢€ (¢€ (¢€ (¢€ (ÏÑ?Ýþ¦›@ wÙŒ’p9Å$…ÁE^§9Ú3ÛßÀoŒ|¤‚ÈéœgåfóJ0ÁÀ8Ï®¥JC÷M +i¿ò·ÿwúšµM ’23ôÚÓ¿?áNó͈تçæÇTff<»AëÏ9ÿ 7‘ R:ž0yü¨ôÙ?Õ·ÐÒ#þA°ÿ×*±@dû¥–á˜&'*1Çç»úP¿¶>XY uóõUù‹. íߊHõWk†s0ж×a,Ãú;b˜ÔR”Ÿò‡þ¸¿ó~N£ýÑü¨µVâYMÂ[ÀË2.˸`1ŒZ­s«-¤¦'¤ cz‚lgƒ¿z‘5yŒ"܉PþñwŒ(àç=ø"˜[ê­yql±Å$HïÎõ :”b:nÕ­HçÿQ'û§ùTZwüƒ­¿ë’ÿ*ä5ßù Ïõþ•ŸT¥K÷ÿü©µ PEPEPEPEE=å´L©$ñ«ääT_ÚóóýõNÀP³#æ,¼)­ybÛA¹ŒôaE€_·XŸ>"qŒ–˜£íÖ cχ±ûÞ”jÿhYÿÏÌ_÷ÕP³ÁÿI‹þú¢ÀAa{k„ ÷«ä÷5?ö…ŸüüÅÿ}Q`÷–2 u€G8ÿõÓõ†Ióá9ë–‚úĉáÏûÔ£P²\í¸ˆÔî4Y€hYÿÏÌ_÷Õ#êf6æ.‡ø¨°™,pé1<ލ¾Päœ _í ?ùù‹þú ûBÏþ~bÿ¾ª¡{C#ÿ§Çä»nh°¸?Z,ËéD 2CûµÚ¸|m8üéVM-T¨’0üÝpr3ø“E˜ÿhYÿÏÌ_÷ÕÚóóýõE€n!ŸVˆÃ"¸¶vœã‘W'½µŽMq° ·N(/í ?ùù‹þú¨ç¸Ó®,³ÄÀŸ~"‹0!a¤3‡gˆ‘êçÓ3×êG—Ly<Æ–-û·d>2pôjDúT.9! AßœpGõ=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀ3¤!ÿÚ ?ÐÖõ‹û-J+K hç/}» oNÕ˜¾'ÖYÅ„[d-–Øfôõ®ˆRƒŠm™¹;‰/Šux$Xæ²…¾ê´g'·­ø«U¶`³ÙÃ=!Ö«ØC¸¹Øé|S©Â´–Öê&MéòžW$g¯±¤Åz”¤ˆí`rªX…BpSÖaáÎÄoj €öðFGÊyÅפ©·ÿ¾OøÓöî/hÅÿ„²÷þxÛÿß'üiá,½ÿž6ÿ÷Éÿ>¯öŒQâ»ßùãoÿ|Ÿñ¥ÿ„ª÷þy[ÿß'ühú¼CÚ1OŠo?çŒ÷Éÿ_øJ/?ç”÷Éÿ^Â!í£ÅŸóÆûäÒÿÂMwÚ(?ï“G°qó°&»?òÊûäÓ‡‰.ÿç”?÷ÍÂ=Ê#³X¡…­d –àƒÎðûáÉý+®0rŠ2nÌ¡ª%Üö²Ä(P@ù·nõç§J¼5ë1#J-BÎɆb-»?tN:Õ¸;qéâq  „¬ŠCù`މr8;‡íQŬÃÆÈ%E¹„¢(IR7Žzûqõ¤©°æ$‹\³HãV‚F(¨í½À ƒìr¥CªAyhÑ$LöÊa¿3Í ;ƒjÆ](­HS¨ãN)QJ(áךrõÅõÒ÷¤!Ôá@!–€½éháN QN­œ:P…9iáJ) }´ p§P)â NíŠQÒž´ï9`GwÜF1…RO_jÎIb]B{ƒ˜t Ÿºl޹íÆx®z‘mèk’È?±¢µ!ÕÙ0ß¹/€zñëUíâKxcµƒÎhÄêë¾"ò{Ôò¾m‡uc_ÿ¼ß‡ò¬ê‚ÏFž¤“2FŒ@²ƒQý–ßþxEÿ| Wade·ÿžß—ìÐÏÿïG3îAöh?ç„÷À£ìÐÏÿïG3îAöh?ç„÷À£ìÐÏÿïG3îAöh?çŒ÷À¨æ[H4É)8ÉQO™÷ "´éŸÞ·ü…iÓ?¿où / ²í:o÷íÿ!GÚ´ßïÁù .ÂÈ>Õ¦ÿ~ÈQö­7ûð~B‹È,ƒíZo÷àü…jÓGñÁù /.ádjӿ礣íZwüôƒò]…}«Nÿž~BµißóÒÈQy¿kӿ礣ízwüôƒô¢ì,ƒízwüô‡ô£íšüõ‡ô¢ì,ƒíšüõ‡ô£íšüõ‡ô¢ì,ƒíšüõ‡ô£íºüõ‡ô¢ì,…ûnŸÿ=aý(ûm‡üö†‹°²¶ØÏhiñ\YÍ Ž'Üô‹°²'òÓû‹ùQ±?º¿•+°² ‹ýÑùQ±º?*.ÂÈ6/÷GåFÅþèü¨» Ú£øGåFÅþèü¨» Õþèü¨Ú¿Ý•aap=‚‹°² AF ¢ì,ƒÐQè(» Àô`z .ÂÈâ|Aÿ!y¿åYÔÀô©>÷à?•6¤Š*•…äpàmhÙ®AQýh¸Ôâ$*Ç+3r€óŽyû¸¥Óï–õd+ÈV8 `c<~8¦ZjQÜì’ݨœ{ûÕ‰?ãúÇ?óÛÿe4wÍ‘æ“Ë£ÉÀö⥵šGžH¥Dù@!–¹iÖnvfŽ*Æm¾¶ZåÒX·G™¼¢“k'‘ƒÛšÝÚ=u™†Ñè(Ú=G £hôm‚£ÐP´z 6A@Ñè(Ú=G £hôm‚£ÐP´z 6A@Ñè(Ú=bkWɦÆgxd‘ù¼µs𮓛‹«<·Œ:;lp—¸€¹Tu+ÖµLD¤Æï˜àžM8Ǚ؊•8¹1lõ(®æ1":°]Ü•<~Õ]bY•¤),‰ Ä„³HìGoÇJj¢R[#k¨!äœH®Uv´%Ÿ^zþ%ḭ́˜ã·€Í,™ÀÈÔò}Åe ¼Ðr} -­Š’Þݤð‰­Ì%¸F{ô?8©u“)³QïnÌüº‘'¿«XINÎ"jÆsi·Â8Ûûr|¹`9ÿ^Ù­ ÕŠ;kYä’[‡ 'v '§jÒD£JŠ…Q@ÄxƒþBó~ʳª€ô©>÷à?•6¤Š*­¢Ñä ¹2V+×è}…0Ø[þë©ÎCGÓÓ©àSÒÚ(‡îPFp@*:f€ ”Ǫ«èzsÇøQq$pÜÚK,ˆŠ’ä–`?„ô¦¥»Ó$•™5?/qÉT‘qšž×PÓm•±x®ÌrYœdúV1¡ÏæÚ±™ ù¾fèƒd“‰89Ær3ÏAÖ®ÿmiÿóóýô+rûkOÿŸ˜ÿï¡GöÖŸÿ?1ÿßB€í­?þ~cÿ¾…ÛZüüÇÿ} ?¶´ÿùùþúmiÿóóýô(þÚÓÿçæ?ûèQýµ§ÿÏÌ÷РûkOÿŸ˜ÿï¡GöÖŸÿ?1ÿßB€í­?þ~cÿ¾…ÛZüüÇÿ} ?¶´ÿùùþúmiÿóóýô(þÚÓÿçæ?ûèQýµ§ÿÏÌ÷РûkOÿŸ˜ÿï¡GöÖŸÿ?1ÿßB€2ï5UyÛÊû;ÇØ™ÀÏáPEx²ß@ò½¼j€ÄÁ²HÀ§PÜÛEu—2î\‚=H**ýÕè*¼öfYšE™“zÙv«“Ü{š™EIY;G¦Ê1®$ر¢‚G®O<<ñMˆaó¡`sqéSì×+p¾£D½ÄrO4L# ‘•Î~¤Ó¯-Úâ%T“Ëel†Á=ˆõ´éÁSV@ÝÆ˜nŠ¢™âÂdýÙ9ÈÇ]ù©-¡0@¨Ì†I`1Ôæ´nâ&¢Q@ÄxƒþBó~ʳª€ô‰ŽÜŸAŸÒ²¸X-ý±Hûi¿çÑ¿ï±J5¦=,ßþûXûi¿çÍÿï±Iý´ßóèß÷Ø¢ÀÛMÿ>ÿ}Š?¶›þ}þûX Õšiã‹ì¬»Ø.KŽ*ùÔmG¡ýзI ÔòÐ1`¼þïR%ûˤÝ>'†"I#¾ÜƒZH˜•`Ö.>Ò¦â=‘$@I“¿z†lÿtÏçO¼»º”Ú´+#þÿ-^¡ÿ>#þÿ-òõùñ÷ùhòõùñ÷ùh°—¨ψÿ¿ËN *¨ó£¾~îìþ´X'Äò›ðþULG¸û¯þïô®Võ)ô­ß hÞ:ŒÕGÈLØ•­q÷S'ýšå5 s Á?.Ö$¹â¯h´÷'VÕ¶*ÑY–Ocÿо?n¶?´íwtÌ™ÿ¾M@ªÑÊTIÔ©ÀÇš£§lâ´t—‰4©g—'–i‹rN:ñô+Z‰%¹”$ÛØ°­k¨E†FP¸Ê¸(qÛ#Ðþ\TòË lžf2íå¯ëÛô¬DUµwr©eýÓ£8ÆvþDqJ-íþ\CÈ ¯Ê>QÜJxn úâš–ð"2$1ª¿ÞP úÐ-áR„C(6© >Qè(KxPƸôP(D«nFd(ÎOʃ G¬hyÏ*:ç?΀EPEPEOVÿ!ÿ]¢ÿÑ‹@( Š( Š( Š( Š*…ïúßóè)08È^oÃùVu0=ãî¿û¿Ò¹XÔ§ÐR@>µô#ÅÀöõ«†äËcV×ËyÌä(éëY—}²yâKvŠ(”á¶™¾¾•M]¶ÉNÉ$b®pAê µ™¡=üAþøþu¹'ü„-øÿžŸú£¨t*Æn㵸Rd7Ê õ£kh-ô‰¬å–$šPû¾nlÿõ«Y5k#8&ØÛ&{¸œñù‡`(¤„*»° ëüDþ£: ³(ó•Uv|ËÇIÿ?žr46,#f Éœü¼)*«¸{¼}MK£iòÚ’UŽ2AS«|ÄîozÔ¢€ (¢€ (¢€ (¢€ (ªz·üyúíþŒZ¹EPEPEPEPT/ÖÿŸAIÀxƒþBó~ʳ©è÷uÿÝþ•ÊÃþ¥>‚’õoO½Nå£.cÕÅÙ‰«¢S«l›ÌŽ ~ò“Öq¬³BÑÃÌýXúzU9ö!Anf(Ú g'¹õ¥¬Í ìãú÷Çó­õÿµŸûÏÿ š@kLÅ ‘—ª©#ò¬è†ðìBŸ0ç–Éèô¥~ñ/ ’÷FÉs*hמK–Ü2£‘ž£ùÔ «Ü­ÌÒOÈU#IÆÓ– OüM;ê¶„——S ·ù¯ ­¨•!ÈùŸ'å#¿aO›Yxæ1ˆS—(¹|`† –ãÎi€Ë{ȉ³m(}D¹ òÈ8鑊dÚôñ|ŸcV±lŸ/äÝæ([Y¸sÈ1,¥AgÏÊ®³ÇkKO»7–æBª¤1\+n  4PEPEPEOVÿ!ÿ]¢ÿÑ‹@( Š( Š( Š( Š*…ïúßóè)08È^oÃùVu0=ãî¿û¿Ò¹XÔ§ÐR@[µ…&†à…ùO¾@©&µA–þEPN{ü¹Ïâi€¾Lm ª„PùÉ8Ϧ)²Yªdù¥†qò®yçô‬•³L8ásÎGøÔ7Pˆ%HQŸ­-üAþøþu¾¿ò³ÿyÿôH ’È<XSÛÆ%‘ºí8ù¤ëôâbª½E*¾Í\µa5¼1»Œ©y7Ý8?ʬ»Ú\ܘX‡’ ’ŒvçzÏÖ…ʇ{ê%Íżw–P»H÷_Z–\²ÆK|­9ö4ÀM–ä¯Ë8Ààtÿ Gû1Dâ2Ì í räþ¿­<,MÐ!ïÐw§** "…p(h Š( Š( Š*ž­ÿCþ»Eÿ£€.Q@Q@Q@Q@U ßõ¿çÐR`p ÿ¼ß‡ò¬ê`z=ÇÝ÷¥r°ÿ©O ¤€³ !ÙÙ€/ËïŸð§˜gÚc 7¨ÉÁÆ~”À`‚RÊ£v@Ãpp3R}žè¾,HÁ!óÇù¢Òà®Û@«túdUyQÓn󜌎s@XÿÇôïç[ëÿ!k?÷ŸÿA4€Ù®Ä1Ï$[Ĥ ¸BÀúÖ´¦ã+¢*AMYš+d%Ð…ž6yí!ùÁ#œÕ9tF‰‰¶%™Ê Íüääò6¶;Ї¹eÓe42ÆöŽ€,BæpB1Þ¨¾€Ò1Ý$x°vrƛܕ ýƒ!¹•sÂê›\/̘f$/ ägëN}išG–xË2)o|çœû@t3û<Èr¤º¨ã<`“ŒžqÍhPEPEPEPTõoøòõÚ/ý´rŠ( Š( Š( Š( ¨^ÿ­ÿ>‚“€ñü…æü?•gSÑî>ëÿ»ý+•‡ýJ}$ñÌÑ+ AÁäg‘ÿë§-̨0Ï©õÎ?:`*Ýȇ*zaG¸¤RŽ2=Azÿ‰ íRç96ôíœÓFp¡±òŒ P–?ñýûãùÖúÿÈZÏýçÿÐM 6i²³$LÈ»˜ …õ¦LjÔbmæRN# ­É+é tÊmÛÌŒÜp]A<öÁ Ýë" [ÊDš5P~WùŸ ýÑÜ sQÜkmn‘’ÊKἩ21Ç œdóÒ€"k©<›'{§G6&PcÌ“åÆG~½=é.õ‰£‚å+ó¿æ ^¸¼‘좑?ví2£(<¯=½7L‘e‚3öÃ$²Æ ¨dÉRFN={P½>WŸN¶–C—’$f>¤V(¢€ (¢€ (¢€ §«Çÿ®ÑèÅ  ”PEPEPEPEB÷ýoùô˜ˆ?ä/7áü«:˜q÷_ýßé\¬?êSè) R[ÅçK³æ$ãz“ZÓŠ”¬È©'ÝI¡BÖ’G`y:{g¥GyaVs¼)‡Ná&xíïZFI[M ä¤ô¹‡o[Ú\þ†í[FOcÿо?o¯ü…¬ÿÞýÒfŠ`E2B14‘«2ô%rj6»ƒi àÃô¬åR1vcQl|­om•BF¹@ü‡Ö„6Î#UòŽFä=Eh!w[¶Ã˜8C‘×Ú™ Å´ð,êSc å°1ŸZ[£ ª —!¤P¸þöx4‘Ém"¸]«—d?ÂK(HÞŒ,oD^#*@CT‚B(¢€ (¢€ (¢€ §«Çÿ®ÑèÅ  ”PEPEPEPEB÷ýoùô˜ˆ?ä/7áü«:˜q÷_ýßé\¬?êSè) W´6 «Æ½Êœ~F®=}äLºz£¢’gQp##ÌÏËžbL™Óî®.§*è¸Ü2Ý¿_JÖìSïc)êíÚæ4 ÀÆFjJÃc{ßR{øþƒýñüë}ä-gþóÿè&4SØÞ[WXþÿQùÖo™0M¿ÙÒtÇÜã\uá7+ÄÖ [RXìeŸO†)áÛ!v±’@ô늭‹:ܰ(U6K³2 3Ó¸Ï×T¢“3{…¶…$2ÂÀ±ùY‚‚‘“×åýi$ðê˜áE•@Jà€ÄnÉ8 ÿéT"Ü–ï{ v³ZºE+nr¬)éÁÏ5 ÐÂáb‘71ÆÏº nùyàö ‡r±¬Ê¸ ØU89Á*OãZÖ6ßd³Ž ƒ·=3Üç¹&€'¢€ (¢€ (¢€ §«Çÿ®ÑèÅ  ”PEPEPEPEB÷ýoùô˜ˆ?ä/7áü«:˜q÷_ýßé\¬?êSè) Q¼×VÓE=ž<Ä=ñÈ­)òó{Û4Üt/ͬÝNC Xcb>mÌ[Ÿ¥Sº{‹Ô u9d;BÒˆµœuk¸r_pPBŽ€`RÔOcÿо?o¯ü…¬ÿÞýÒfŠ`ZþS ¾îÙäzŠŠŽÐm*ì®ÍP2:þtO©²µºØ@‘<|Œ•… ®NÅÊ6W)ØkR\]¹•ÄCÛ”0/Óäà~U×ng/1ÄŒ„ûƒ »v'1Ϧ+¨Ì·m¬4×1ˆ7†å!”`s÷†r:zgÚ«?ˆ&P¤[ÆãË.HO=2rqŽqš–ïSº6˜pñ´låK.úüÃð5ZÝË‘$‘ÇÜà0`Íòíä:œóëé@ÿÂE$ÊÞ\?"QdùÉù†F3ÇËÔUÛ‹ÛŸík„SÅ 9òä>U±ÈÏL@ÔPEPEOVÿ!ÿ]¢ÿÑ‹@( Š( Š( Š( Š*…ïúßóè)08È^oÃùVu0=ãî¿û¿Ò¹XÔ§ÐR@>­QÀD\6Å;³ÔœëL`Hš¬8û¼çŸj  Ëø*ÃéŒA@ {M±îHÜ:ŒýjµOcÿо?o¯ü…¬ÿÞýÒfŠ`É¢I£1È2¦“I«0NÆ]ý¥­œ;Ù¦%Žf f’-JÆ8¡I#("o”õ Ôgò'·­aœrDî±s¦\E¥¼+¨b_#œœt§øsV¸Õ ÒÝZÇBÁp óŸ­vr.^k˜ß[@$€=x¦3B’$lP;±OSޏ¬ÊéIµq£JbÁHÒ,j€ã®?ýu%PEPEOVÿ!ÿ]¢ÿÑ‹@( Š( Š( Š( Š*…ïúßóè)08È^oÃùVu0=ãî¿û¿Ò¹XÔ§ÐR@>žÒÈȪ]НAž”ÀS<¤’dlž¼Ò d‡azs\Jñìi®ryëQPö?ñýûãùÖúÿÈZÏýçÿÐM 6h¦yˆnõÝéžihޱg%å²,[w#†ÚÝÚ³WM¿™•%#ŒŸ™¼Ìñôý+ Ó“–›$Šþ(KÕÔ kK.WÊ*JôƦð’\Æ·"âÖk~A_4ä¶rzâ»4äÜË^c¢¬ûø’mJÑdàyrœƒ‚§åäÕ‘Cí/‘î^ÊI£yãTýáî;QWh¢€ (¢€ (¢€ §«Çÿ®ÑèÅ  ”PEPEPEPEB÷ýoùô˜ˆ?ä/7áü«:˜q÷_ýßé\¬?êSè) E0 (¢€'±ÿè?ßη×þBÖï?þ‚i³Hvà´ÀƼŸ÷¾oÎAòÇœç5fæðM¥¡‘€Þªì>R£p ôã<ÓbFcÝ“­½ëý¦1!t¹ €¶Üã$Ï5nÚG7p˜n¥’ßí%çÞ¬¾IcÉäá³ÞÅu·bn¦&;åL’>e.£ŽœöÅ[Õ¤1fCm(8m¸^{öçozáUS¸‡È"// ã¶[ß­9¢‚òæÒ'¿Ü“˜2˜Ë}ÌõbqÃó†9LóÂneËGòÆò¢IA#óŸZÛó¥ûMgrÊê¿îgzæ€/Ñ@Q@Q@SÕ¿ãÈ×h¿ôbÐÊ(¢€ (¢€ (¢€ (¢€ ¡{þ·üú LÄò›ðþULG¸û¯þïô®Võ)ô§GË HÔ³€PÚŠ»®miÚ\"Ýå¼spªOþ½WÔ´õUóíÙüKéï[Y¸™'ïtVF¤ö?ñýûãùÖúÿÈZÏýçÿÐM 6i²2¤lÏ÷@æ†ì®4öºsÎd›rÕc•#Þ´¼ËkKñ òF¬`rIÀ™¨…HÏbœZïbi–VŠR …“õ#y<• ¹·?vhŽ 8ê9?•hHÉo­¢H˜Ì沬aXÄ8õëUmžÒÉ8%C¿Ê󲬨’A@~ÓlT7Ÿ lxå½>¾Ô4öé´¼±.N,~”Ô’Ñ2É3à >lu#ò¦µÍ™¸MÒÆd åNîÝÏâ(È €AAPEPEPTõoøòõÚ/ý´rŠ( Š( Š( Š( ¨^ÿ­ÿ>‚“€ñü…æü?•gSÑî>ëÿ»ý+•‡ýJ}$êöŒâ=Aôÿ*ηðÙQÜÞš)ï*“ŸçŠcykm+ÊÏå%¹ÿ )Ö~ÇW± Y±ä“ÐÀô¢´Z-Jdö?ñýûãùÖúÿÈZÏýçÿÐM6j;˜Ì¶î‹Œ‘ÆiI]45£3U¯%Abäªã;—ÓëSÚZÊtùc‘V6‘Ù¶²†ÐŽõËBE+ÈÒn6Јh«·™Fí¡ATÀ_Ÿ~gÛ‚«ò´—E¼ÈÊp§?RK~˜ü+°Èš-ÂWdÈäg2sµ÷ ¤¶G^ù©Îš^i “Je6ݽsÈü(ôfÕÅ å`Õـ:gïq×§µ5ôî»®¾DWT_/¦àÃ9Ï_›ô Éáäy]üþ±SÇ$Œ`ã¿p —ûÙ£‘W1Âù|…÷ÿdžhFÞ/&‹víŠqŒþ%PEPEOVÿ!ÿ]¢ÿÑ‹@( Š( Š( Š( Š*…ïúßóè)08È^oÃùVu0=ãî¿û¿Ò¹XÔ§ÐR@>¬XH‘Ý£HÁWIè**«Á¢££6e×-×;w9ô³oµ6»ˆD±ˆÓ9<òkŠ•ÉÝè%$¶(Q^‰‰=üAþøþu¾¿ò³ÿyÿôH šŠéŠ[;)Á”¢ØÖå¼Ç½&†PØDéúÓ..®fÑähX$ë2ÆzFƹhUmòšN6W+&¥}·É ùʈ⠙VÚ>¥€üýªkÙ™u)‚JâàG† ç ’Û¾^‡Šì2õ‰Ä¥1 åK°8ƒ¿žøã§ZIµ©×dq¤~sJ•b0Ý»“ùPO®Þ(Œ x‰a»q8켞§Ÿ_¥H5;ךØ2FŠîÌp @aƒõ!z~´§§\5Õ¢ÊûwGËœŸÎ¬ÐEPEPEOVÿ!ÿ]¢ÿÑ‹@( Š( Š( Š( Š*…ïúßóè)08È^oÃùVu0=ãî¿û¿Ò¹«ÖS;m Ϧi ,µ‘  7Ÿ¼3Óó¦Å o÷f³Óv¦}‘¶î.  uùsÒ…´v$n@î'œcŸð  ?<`2N9ô¤6eQËH¿(SŽ?Z[XÌzŒ*H8uäVâÿÈZÏýçÿÐM 5¦C ’ˆ¥áXvúË_©1KQÆLÿZ¸ÁÉÚÚÔ«ÈÐèb³M2kË…b–ÉGoº?д¹²ŠW´ÀòÕ\’½œr{ñY*§'ÊÕG8«»¾³Žä T¼‘À×Àd:àúñSË}m Ã̃*•Ü2  ŽÝjÄ<ÜÛ…Ügˆ(ÉqŒc?ÈÔm¨[,±Æ&F/ÎU`œŸn(—zŠÚLc0Èácó”®yõ9=J}½ý´ñ†¢ lf€ǧ"ÝÛ1Œ-ÄDÉ÷0ãæúzÓã‘%@ñººž…NE:Š( Š( Š*ž­ÿCþ»Eÿ£€.Q@Q@Q@Q@U ßõ¿çÐR`p ÿ¼ß‡ò¬ê`z=ÇÝ÷¥rÖìV$*pvãô¤€'‘äFIäg­4Jâ?,7ËéLŒ çŠ_´M´¯˜Ø9ϽâQŸœóIçIÏÎyë@Ú;I¨@Ìrwç[3O¶¥i$Î7¸ÉõÚi Ú®žÊU§RÁkŸ4‹+‡{S a˜ôíZÂn;8)-K–3Ú­f¸ØdÝ÷$ëLš=9-nUw²äœü€r8ç†ÚÒ¦Ní²’²±5Úéw1´lòÇ!B å1žsô8¨ü3ím?ÛW%üÅù î ϶GlTŒE·ÒãØRû ˜Û•$dW`÷,hpí—r›ôÉÎ(ãO¥Ëx·3Í®±„£Î9Èô¬÷µÓÝÐKåRH# ñ×ç=?™ÒÂ[”ž[èËŒoÄ$‚HÀéß¾jí•í¥¸ˆÝ«òNv@?µ¬çá#Göµüü/ähþÖ±ÿŸ…üÚÖ?óð¿‘ ûZÇþ~ò4kXÿÏÂþF€íkùø_ÈÑý­cÿ? ù?µ¬çá#Göµüü/ähþÖ±ÿŸ…üV¿Ô-n-Ö(eí4XP÷ÔЭQ@Q@Q@Q@P½ÿ[þ}&âù Íø*Φ£Ü}×ÿwúW+ú”ú HÑLŠ(  ìãú÷Çó­Éä!eÿ]ÿöSH Ê)€Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@P½ÿ[þ}&âù Íø*Φ£Ü}×ÿwúW+ú”ú HÕ«;U¸V,Ä@cš¤®ì&ì®h.”€òã݉ª­§.Ã!¸Ž0 ÈnØ5£§¡œjs;hbƒc¸¤¬Ú³³5'±ÿè?ßη%ÿ…—ýwÿÙMH”S¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ¡{þ·üú LÄò›ðþULG¸û¯þïô®Võ)ô«’ݰq‘ü«H|H‰ü,¼×Çaç™ÿ?Z†äµ†0ùç°®Ú‰GC‹ Ìß7C7:LŽ;b\3øŽôOcÿо?nKÿ! /úïÿ²š›”S¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ¡{þ·üú LÄò›ðþULG¸û¯þïô®Võ)ô«ú@¶iØ\ç$|¼àU-“j°ÛîGŒ… ŽõJ[×”0¸ÎT°­\ß.¤¥Ð¯ÎrÇ$õ4V%ØÿÇôïç[’ÿÈBËþ»ÿ즔S¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ¡{þ·üú LÄò›ðþULG¸û¯þïô®Võ)ôþÅòÝòùA‡ûØéQ-¹YvÉÐ+7Ê}3þÀE¶¶è€$Ç’{Óœƒ'zmNxçšU³ÈQˆ\)b}ºR=œ±Ç½°ÝßËüh,ãú÷Çó­Éä!eÿ]ÿöSH Ê)€Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@P½ÿ[þ}&âù Íø*Φ£Ü}×ÿwúW+ú”ú H Äòde‰Æ=±ä)^wi¼ÌàôõãÒ˜¹”t`=0£§¥9.¥@Ã!ÁóÉ ûTø#^¼ kO#)R܃Àçüâ€cÿо?nKÿ! /úïÿ²š@nQLŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š*…ïúßóè)08È^oÃùVu0=ãî¿û¿Ò¹XÔ§ÐR@>Š`PEOcÿо?nKÿ! /úïÿ²š@nQLŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š*…ïúßóè)08È^oÃùVu0=ãî¿û¿Ò¹XÔ§ÐR@>¤‡É/žÛT£œdÐïfÑ—,nhËkª 0q£šzé*q#ñ9«¥(¦ÌcRËWs.uÙ3/¡ÅGJJÎÇBwW'±ÿè?ßη%ÿ…—ýwÿÙMHÍÊ)€Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@P½ÿ[þ}&âù Íø*Φ£Ü}×ÿwúW+ú”ú HÕ{Ñ'” K¸ƒÊ㨭¨´¦¹¶2­h4MõÀºÛ&v°<‘Œß7¤¯R?/óÍvS§hÙôüº~›$Õ’2æ`Ó3„Ó+†m9;¤QI“ØÿÇôïç[Ï5í³€6Ç.æç¶þµ™f¯ÚcõýEi×õÇ`ûL~¿¨£í1úþ¢€°}¦?_ÔQö˜ýQ@X>Ó¯ê(ûL~¿¨ ,i×õ}¦?_ÔP´ÇëúŠ>Ó¯ê( ÚcõýEi×õƒí1úþ¢´ÇëúŠÁö˜ýQGÚcõýE`ûL~¿¨£í1úþ¢€°}¦?_ÔQö˜ýQ@X>Ó¯ê(ûL~¿¨ ,i×õ}¦?_ÔP´ÇëúŠ>Ó¯ê( ÚcõýEi×õƒí1úþ¢´ÇëúŠÁö˜ýQGÚcõýE`ûL~¿¨£í1úþ¢€°}¦?_ÔQö˜ýQ@X>Ó¯ê(ûL~¿¨ ,i×õNéþTÒb8/È^oÃùVu0=ãî¿û¿Ò¹XÔ§ÐR@>Š`_Ò"µ’fqòÔÚ½¬co–=ëXNI؇¹›6Ï5¶}ÜñL¬Þå¢{øþƒýñüë¢o¼~µ,¢Q@ ÷ @áÉs…¥‰ü©ŸlOùãsÿ~ü)Øí‰ÿØŸóÆçþü?øQ`¶'üñ¹ÿ¿þ}±?çÏýøð¢ÀlOùãsÿ~ü(ûbÏŸûðÿáE€>ØŸóÆçþü?øQöÄÿž7?÷áÿ‹}±?çÏýøð£í‰ÿÖŸäÑö´ÿ&‹€}­?É£íiþMûZ“GÚÓüš.ö´ÿ&µ§ù4\íiþMkOòh¸ÚÓüš>ÖŸäÑpµ§ù4}­?É¢àkOòj+«–xaÙ¿¶òqH Í·ÿÞ´ÿǪ[hM½¬q3+0,I^œ’hJ)Ÿ{rÖ—‰ ¶ž`beýÒÁÈ<Ô_Û-ÿ@ÛïûòiúŸŸDúv ºíˆŠ¯–ñlÿ‰Uó„$ª¼$…'Ðb€,IË®‘vœ–ç$úô§.®QB®™zª8Bx þÙoúßß“I£™$½¿à–”¡Q"'Ð=âù Íø*Φ£Ü}×ÿwúW+ú”ú HÔ±NðÆê„©b93L ã¾Ø¼Ç–ÛŒäsÇ~)÷fíªß7<°$}ºs@Í/›·‚6ŒrsQPö?ñýûãùÖüò$)$’¨€–>‚“$º‰Ê€X8PÈË“Œ÷Ƨ¤EnóÇh÷4¡•²ƒ´ààô4ê(¢€ —Î{˜ †EŒÉ»,Ë»©ÊæEVQ·ec…",äÿß^ÔÀyÓoUI7Ѐ9$ÃÿפŽÂîT¡)èD9ú;«§^:†[øJž„CÿÙRÿf_Ïì_÷çÿ¯E€?³/¿çö/ûóÿ×£û2ûþbÿ¿?ýz,ý™}ÿ?±ߟþ½Ù—ßóûýùÿëÑ`ìËïùý‹þüÿõèþ̾ÿŸØ¿ïÏÿ^‹f_Ïì_÷çÿ¯Göe÷üþÅÿ~úôXû2ûþbÿ¿?ýz?³/¿çö/ûóÿ×¢ÀÙ—ßóûýùÿëÑý™}ÿ?±ߟþ½þ̾ÿŸØ¿ïÏÿ^ìËïùý‹þüÿõè°öe÷üþÅÿ~úôÙ4ëäLý¶/ûòÆ•€¯ä^Ïä?÷äÿ>ÍÚ[D‘È,K@ÇBGô  ¨¤”á Î})7ŸoÈP2)îü–UØÎí’Ôþ¢ž'R>òŽ3‚"˜ ç ¹2FG¥5.Uå1©RB†à `’?¡ ï>ߪ±Hï}r¬~U éÁ GÄò›ðþULG¤\ «×oô®z-:ðD€ÛIœzR@;û>óþ}äü¨þϼÿŸy?*a`þϼÿŸy?*?³ï?çÞOÊ€ìû¿ù÷“ò£û>ïþ}äü¨k;¤»…š qïZwеŬð©¤VPO½& Ý2i¤O&b¨«™ÉoâÏ'>¸§ÙØÍг0*ŠAË’FOAÀç¥1téär»&Ä”¹ù‰/׈Î*)-f’îaÈ¡œ³1d|¸Çâ¸ú@ M.íà‡æ€£1,æÉÎkn5Ú€`.;@¢ Î«d?ßÿÐjÕìsCØE°o?tàQý:sÇH4Ø/£Þ/¼é¶¤j_$ ÌI8'¶;ŸJžþ |ˆà´‚UEq“ ¡ñÈÏãùP].=@^7Ú<ÿ’L;<™F]ƒ€3×qÎqëÍmÐEPEPEPEÓ*@ÌÄ(ÍsQYXŨ½êÏó·ð™~P{*ÞΟÞýÒÅ€wü³?ZmV¸†Wš9atW@Ë󌌅R›HyïDÒ̬¹Só`ƒŒg©€d6ÉSÌM²nù¶|ÉœàžXÓôÿ±;¶åù” £8$÷'Ö‹zª[ÿÈBïèŸÈÒ“ñü†'ü?•gUéR}ïÀ*mHQ@Q@Q@Q@Àpø‡BGJ“ÎZwóŸÖ9ýh¸œþ´yÏëEÀ<çõ£ÎZ.ç?­súÑp9ýhóŸÖ‹€yÏëGœþ´\ÎZ<çõ¢àsúÑç?­óŸÖ9ýh¸œþ´ÉÍB’*ºž¡†E/³ÛÿÏ´÷íiàPªªª½Œ@ E "žœí ûŽWùT?Ùðÿ~ûüßãLû>ïÏÿ›ühþχûóÿßæÿ?³áþüÿ÷ù¿Æìø¿?ýþoñ û:ïÏÿ›üj5HáÞ!,Cýæg'8÷ôþ}rúÿü…æü?•gSmõ{ýíþÝ}øSµ¯¿çá¿!@öµ÷üü7ä(þÖ¾ÿŸ†ü…Ú×ßóðߣûZûþ~òk_ÏÃ~BíkïùøoÈPý­}ÿ? ù ?µ¯¿çá¿!@öµ÷üü7ä(þÖ¾ÿŸ†ü…Ú×ßóðߣûZûþ~òk_ÏÃ~BíkïùøoÈPý­}ÿ? ù ?µ¯¿çá¿!@öµ÷üü7ä(þÖ¾ÿŸ†ü…Ú×ßóðߣûZûþ~òk_ÏÃ~BíkïùøoÈPý­}ÿ? ù ?µ¯¿çá¿!@öµ÷üü7ä(þÖ¾ÿŸ†ü…Ú×ßóðߣûZûþ~òk_ÏÃ~BíkïùøoÈPý­}ÿ? ù ?µ¯¿çá¿!@öµ÷üü7ä(þÖ¾ÿŸ†ü…Ú×ßóðߣûZûþ~òk_ÏÃ~BíkïùøoÈPý­}ÿ? ù ?µ¯¿çá¿!@öµ÷üü7ä(þÖ¾ÿŸ†ü…Ú×ßóðߣûZûþ~òk_ÏÃ~BíkïùøoÈPý­}ÿ? ù ?µ¯¿çá¿!@öµÿüü7ä)?µo¿çàþCü(:òWžá¤•·9êj ÿÙlibstruts1.2-java-1.2.9/doc/images/how-to/eclipse/developing-eclipse-style11.jpg0000644000175000017500000002761710404045244030131 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„   (1#%(;4>=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀ3¤!ÿÚ ?ÐÖõ‹û-J+K dœ¼Aöì$õÇjÌ_ë,ˆâÂ-®þZŸ-¹îõë]¥“lÍÉÜI|S«Á"Ç5”(í÷CFr{zÑ?Šu[f =œ1“ÙëUì!Ü\ìt¾)ÔáHZKku.ôùO+’3רÒGâ­JRÂ;X\ª–!PœÔõ£ØC¸s±Åš‚mßo,2>SÈüè.½#ýM¿ýòÆŸ°q{F/ü%—¿óÆßþù?ãKÿ eïüñ·ÿ¾OøÑõx‡´bÞÿÏûäÿ/ü%W¿óÊßþù?ãGÕâÑ‹ÿ Mçüñƒþù?ãKÿ Eçüòƒþù?ãKØD=£x¢óþyAÿ|Ÿñ¥ÿ„šóþyAÿ|š=„GÎÀxšïþyAÿ|šxñ-×üò‡þù£ØG¸s±á#»="‡îÑÿ ×üò‡þù¥ì#Ü=£þ+¯ùçýóKÿ ×üó‡þù£ØG¸{F(×î¿çœ?÷Í/öý×üó‹þù£ØD^ÑŠ5ëŸùçýóKý»sÿ<âÿ¾höhÇ ràÿË8¿ïš_í»îEÿ|ÑìpöŒµqŸõqß4á¬Ï¹ýóG°CöŒ?¶'þä÷Í/ö¼ÿÜþù£Ø.âöŒQ«ÏýÈÿïšQ«OýØÿïš=„CÚ1ÃT›û±ÿß4£S›û±ÿß4½ŒCÚ1´¦þì÷Í/ö”¿ÝOÊbƒÚ1F¡/÷Sò¥þЗû©ùQìP{F(¿ÿ ~T¿m—Ñ?*=ŠhÃí²z/åNû\ž‹ùQìP{Fk“Ñ*_µIè¿•Å´b‹—ô_Êœ.ÿwò¥ìP{F>9ÉQŸ»PG©[IpÐ%™a,à‘ÔÐâ¢QŒ]‹NLz^!³K™%H£~…—’Þ¤y ";‡Ê«÷Iõ¥hÞÁyZçâN±9'ÓùVmAgCâK˜¬¼Meu6óäÆŽ;ˆcÇ^*¤#´Xቭd –à©çx}Ç¿NOé]qƒ”Q“ve íM.¦¶– ð4 p Í»pÉëÏJ¾5ëA#J-‚Îé†b-»?tN:Õ¸;qéâ o%c•u@¡ü G ĹÃŒö¨¡Öb‰ãdócU€ÂQIoõöãëKÙ°æ%‹[³DZbª±Ú?y€AØ’z†ÿT‚òÐÄ‘0`bØHP ùžhPiÜ•ŒºQZ(§P1Æœ:R¢”P1ï4åëŠ;ê9¥ïHC©Â€C…-9{ÒÐ!ÂHbŠp §”Ä8S–¢ÇÐ(ñK@Ç už)´îØ )ë@ó–gpÄcU$ÖjKêܤà TýÓduÏn3ÅsÔM½ `ÒCŒƒû+B]“ û’ø¯3UíâH!ŽÖ+F'W]ñ@ï“Þ§•ól;«þ ÿÄÿ‡ò¬Ú‚ÏFž¤|É9rÊ Gö[ùáýð)]…}–ßþxEÿ| >Ëoÿ<"ÿ¾>gÜ,…û4þXGÿ| >Íüñþù¹Ÿp²³AÿÕ§ÏH?!GÚ´ïùéä(» !~×§ÏH?!Iö½;þzAù / ²ízwüôƒò}¯Nÿž~”]…}¯Nÿžþ”}¯Nÿžþ”]…}³OòÖÒ¶iÿóÖÒ‹°²¶iÿóÖÒ¶iÿóÖÒ‹°²í¶óÚ>Ûaÿ=¡¢ì,ƒí¶óÚ|WsH'Üô‹°²'òÓû‹ùQ±?º¿•+°² ‹ýÑùQ±º?*.ÂÈ6/÷GåFÅþèü¨» Ú£øGåFÅþèü¨» Õþèü¨Ú¿Ý•aap=‚‹°² AF ¢ì,ƒÐQè(» Àô`z .ÂÈâ|Aÿ!‰ÿåYÔÀô©>÷à?•6¤Š*•…äpàmhÙ®AQýh¸Ôâ,c•™¹@ùÇ<Ž}\Ré÷Ëz²ä+01ž?S-5(îvI nŒTN=ýêÄŸñýcÿ]¿öS@„²4Òú«c–ÀúT¶³Èóɪ™P+ürÓ¬ÜìÍ%‘›m®3\ºKèãó<ÆEfÖO#·5¹é]faéF¥”`zPéF¥”`zPéF¥”`zPéF¥”`zPéF¥bkWɦÆgxd‘ù¼µ®jºÌgº²“cÆ\íp/qH •KQ½kTÄJLnùŽPyäÓŒyˆ©QS‹“ =J¹ÌHŒ¬w%O;Uuy¦S.ÉdT†&Ø”–bIô#ŠŠ—‚9ª‘R[#k¨a·y&#²¡V„£óëÏZ–òâXJGošWÉ SÉ¢±…^h9>†kbœ—·i4"kf„·qg¡èqRë&Sd¢)ÞÝ™ùu# O~;VÐ’œDÕŒæÓo„q¸×'>a`9ÿ^Ù­ ÕŠ;kYå’[‡(Nì3ž«I"Q¥E@Š( ŠâÓù#ühûLäñ¢àiü‘þ4}¦?òGøÑp´ÇþHÿ>Óù#üh¸Úcÿ$iü‘þ4\í1ÿ’?Æ´ÇþHÿ.ö˜ÿÉãGÚcÿ$ûLäñ£í1ÿ’?Æ‹—y-ÓÎÞU´mbӟ Ž;©/"–h£# È”6r(ÕCsmÔ^\˹rö4‚ÄŠŠ¿u@ú ¯qhf‘Ýfd‚7]ŠÁ‡> úšRŠ’³zhŒ®&Â+‡*±"‚GLàTóÃ+ϰʈÈaÓp ãÜzT{5ÊãÜ.7Èî#’yba8TŒ®së–4ëËv¸‰U$òÙ[ àžÄv#Ö8*jÈ£|›­¨¦x°™þ9ÈÇ'~jKhL*3a’X rNkFî"j)Q@Q@Gˆ?ä/7áü«:¨H˜íÉôý+ k…€"ѰÛ€?¶›þ}þû£ZcÒÍÿï±E€?¶˜Ë›ÿßb“ûi¿çÑ¿ï±E€?¶›þ}þûm7üú7ýö(°A«4ÓǵeÞÁr\qW/. °]±™›hã±?Ò‹¯öøÐ»X“‰EFfºÿDDÊA ϺÿŸ?üŠ(óî¿çÏÿ"Š@}×üùÿäQGŸuÿ>ùP‘‹érÙ ×QOòõùñ÷ùiØËÔ?çÄßå£ËÔ?çÄßå¢À^¡ÿ>#þÿ-^¡ÿ>#þÿ-òõùñ÷ùhòõùñ÷ùh°—¨ψÿ¿ËG—¨ψÿ¿ËE€<½Cþ|GýþZ<½Cþ|GýþZ,åêóâ?ïòÑåêóâ?ïòÑ`/PÿŸÿ–/PÿŸÿ–‹yz‡üøûü´yz‡üøûü´XËÔ?çÄßå£ËÔ?çÄßå¢À^¡ÿ>#þÿ-^¡ÿ>#þÿ-òõùñ÷ùhòõùñ÷ùh°—¨ψÿ¿ËG—¨ψÿ¿ËE€<½Cþ|GýþZ<½Cþ|GýþZ,åêóâ?ïòÑåêóâ?ïòÑ`/PÿŸÿ–/PÿŸÿ–‹yz‡üøûü´yz‡üøûü´XËÔ?çÄßå§•Tyшß?wvZ,âù Íø*Φ£Ü}×ÿwúW+ú”ú HÖq¼0:ŒÕ!3bF¶?„Ÿök”Ô-Ì3“òínFÜñWkEßrnÛVØ«EfY=üAþøþu­¨ÿ­·ÿ®‡ÿAj@¶Ÿxo­ž ¦ÃϺB›ˆ ž„täÕ5¸¸·¶µKx÷)VùUrIÉÀôüâ”SKVT¥Ìïk­Ö£9Æ"F ìl1Î=OåQOw~³yÑÄH‹€àáF[®;ôüé’[´šo&UÈ”»íÉÔŽ{ŒU8õ÷xc‰Ë#¿w'ñÉ=h­²ÿqõ©é€Q@Q@Q@Q@Q@Q@Q@Q@U ßõ¿çÐR`p ÿ¼ß‡ò¬ê`z=ÇÝ÷¥r°ÿ©O ¤€}kè'þ>} ãñ«†äËcV×Ë’Fß’tõÿ8¬Ë™EäÓÇ»EJ~o/ï·øU5vÛ%;$‘йÁ¨$RÖf„ö?ñýûãùÖÕÊ,—¶hã*ÓGüÒ[ìÿÝoûøßãBXÛÆ=ª½&˜û$?ÝýMd‡û¿©¥`ÙÀÊU“ ŒOZ_²B?ƒõ4X Q5Ú£–˜Q@Q@Q@Q@Q@Q@Q@Q@P½ÿ[þ}&âù Íø*Φ£Ü}×ÿwúW+ú”ú HÕ½>ôYHìbó1š¸»15tMý¯²o28X+}å&–ëYi"xâ‹æ~¬}=*œ»¡­ÌÅ''¹¥¬Í ìãú÷Çó­É¿ä!eÿ]ÿöSH Ê)€Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@P½ÿ[þ}&âù Íø*Φ£Ü}×ÿwúW+ú”ú H v±$¢PÇ ä>ù$Ö±‚Z'ùA$÷;sŸÄÓ|˜ÚU ¼ =ó’q“ÛÙ,Äy>iaœp¹çŸð kE,Ó”dásÎ@þµ Ô" B’gë@ cÿо?nKÿ!/úïÿ²š@nQLŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š*…ïúßóè)08È^oÃùVu0=ãî¿û¿Ò¹XÔ§ÐR@Y…ÆììÀd/ËïŸð§˜gÚb 7<ŒðqŸ¥0 ”°Qƒ» a¸8©>Ït_‹0H|ñþ¢Òà®Û@«túdUyQÓisœŒŽs@XÿÇôïç[’ÿÈFËþ»ÿ즔S¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ¡{þ·üú LÄò›ðþULG¸û¯þïô®Võ)ôÇ3D¬ª†Áäg‘ÿë§-ÌŠdw#ž¹ÇçL[¹åBL(ã·‚êQÆAÁzÿ‰ í2ƒœŽ›zvÎi#8PØùF(Køþƒýñüër_ùÙ×ý”ÒrŠ`PEPEPEPEPEPEPEPEPEPT/ÖÿŸAIÀxƒþBó~ʳ©è÷uÿÝþ•ÊÃþ¥>‚’õ%¼~t»0IìRkJqR•™$ã£itAØòHÎ!§ãÒ™y§Á”ò@˜’0w 1ϽëXÉ.†rRz\‰·Æ­ê)ÕÏ{ìt5gfOcÿо?nMÿ! /úïÿ²šB7(¦EPEPEPEPEPEPEPEPEPEB÷ýoùô˜ˆ?ä/7áü«:˜q÷_ýßé\¬?êSè) W´& «ÄV€5qëèÿ"eþ_™Ñ¼îŸhãÌÏËžƒå‡2gNº¹º¸*ê¸Ü2Ý¿_JÖŸ»ûØÆz»v¹ `c#5%a±Ñ{êOcÿо?nKÿ!/úïÿ²š@nQLŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š*…ïúßóè)08È^oÃùVu0=ãî¿û¿Ò¹XÔ§ÐR@>£yn­åŠ{mÌ[Ÿ¥Sº{‹Ô u9d;BÒ„ÔqÕ®ÿäO%÷T(è-A¡=üAþøþu¹7ü„,¿ë¿þÊi¹E0 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (ª¿ëÏ ¤Àà‚’õfÂDŠéZBUpA#µEUx2££6%× _»¹Ï yª=Ì&%O-sØ× *3“»ØÒRŠÑôW¤bOcÿо?nKÿ!/úïÿ²š@nQLŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š*…ïúßóè)08È^oÃùVu0=ãî¿û¿Ò¹«ÖS;mR§ŸL Ò@Yk& €0Þ~ðôäüé±B÷f³ÀÀ©€Ÿdm¥‹¨ÇŸ—=([GbFô.âyÆ?È  ~xð8É8çÒÙ•W-"ü 3ÔãÖ€Ö3£ ’y³7ü„,¿ë¿þÊi¹E0 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (ª¿ëÏ ¤ÀàFyÅvÔJ*ÝN,73nVÐÎ?럯nØ¥®üGzØžÇþ? ÿ|:Ü—þB6_õßÿe57(¦EPEPEPEPEPEPEPEPEPEB÷ýoùô˜ˆ?ä/7áü«:˜q÷_ýßé\¬?êSè) WôjÓ²Ü÷àU-—T† Êñ`xæ©Ëxò†WùI«“åW!.ˆ¯ÎrNIêh¬K'±ÿè?ßη%ÿ—ýwÿÙM 7(¦EPEPEPEPEPEPEPEPEPEB÷ýoùô˜ˆ?ä/7áü«:˜q÷_ýßé\¬?êSè) /}‹ä/»åòƒ÷±Ò£[r²í“ Vo”úgü)€‹l%;¢dà<ŸZq³q’]6ŽIÏüó@ ¶r 1 …,O·JG³–8÷¶Û»ùˆ ±ÿè?ßη%ÿ—ýwÿÙM 7(¦EPEPEPEPEPEPEPEPEPEB÷ýoùô˜ˆ?ä/7áü«:˜q÷_ýßé\¬?êSè) '8ÆX‘ŒcÛþT¯pí7™žzzñéL\ʽL(ãééNK©P0È`F0@#üòh>Õ6ßׯšÓÈÊT·`ð9ÿ8 ØÿÇôïç[’ÿÈFËþ»ÿ즔S¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ¡{þ·üú LÄò›ðþULG¸û¯þïô®Võ)ô¢˜Q@ØÿÇôïç[’ÿÈFËþ»ÿ즔S¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ¡{þ·üú LÄò›ðþULG¸û¯þïô®Võ)ô© osasŠ%t›DT—$nh=´ ÂÈÀù@ëþMHš@Ù¸1êÕt¢åÙŒjÙjîeΛ%eô8⣥%gc¡;«“ØÿÇôïç[’ÿÈFËþ»ÿ즤fåÀ( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¨^ÿ­ÿ>‚“€ñü…æü?•gSÑî>ëÿ»ý+•‡ýJ}$ê½è K¼©å1ÔVÔyy×6ÆU£ÍƒI¾¸ûNÙ7m+Õ»ÿê­ózJžHïÛüó]”éÚ6}?¥øl“’2æ`ò³„ç­2¸gñ3Õ‚´Rdö?ñýûãùÖó£5í³òÇ)fç¶þµ™F¯ÚcõýEi×õÂÁö˜ýQGÚcõýE°}¦?_ÔQö˜ýQ@X>Ó¯ê(ûL~¿¨ ,i×õ}¦?_ÔP´ÇëúŠ>Ó¯ê( ÚcõýEi×õƒí1úþ¢´ÇëúŠÁö˜ýQGÚcõýE`ûL~¿¨£í1úþ¢€°}¦?_ÔQö˜ýQ@X>Ó¯ê(ûL~¿¨ ,i×õ}¦?_ÔP´ÇëúŠ>Ó¯ê( ÚcõýEi×õƒí1úþ¢´ÇëúŠÁö˜ýQGÚcõýE`ûL~¿¨£í1úþ¢€°}¦?_ÔQö˜ýQ@X>Ó¯ê(ûL~¿¨ ,i×õNéþTñHGâù Íø*Φ£Ü}×ÿwúW+ú”ú HÑL úDV²LÂçÓå©õ[X¾_/;GLÖ°©$Èq[™’ìó—÷i•›Ü´Ocÿо?tM÷Ö¥€”R¢€ (¢€!žá (9.p¡±?•3í‰ÿØŸóÆçþü?øQ`¶'üñ¹ÿ¿þ}±?çÏýøð¢ÀlOùãsÿ~ü(ûbÏŸûðÿáE€>ØŸóÆçþü?øQöÄÿž7?÷áÿ‹}±?çÏýøð£í‰ÿÅ:ËXŽúé"†²3p1·úÔÏíûdòÕ–WgTrOn¼­jÐEPEPEPEç’:ñ@_ݾ¢ö­i"Fƒ>q“å#¶?¤ÓÿäûÏÿ¡@X¢wÿòœ£IÎ}Ö§¸EŽXQ 2o-¸9 œý)€³¬1ÙÉq†Ø…ÇÌpp*²·“1‚hÌîv…ò†Òrã–ÿd÷ ®£`íòE3tÁò[}Å^‚8&ŒH¨G8Á<‚1×ÔPšÚ-§åì{š«§ß\’rLPóøæ|Aÿ!y¿åYÔÀô{ºÿîÿJåaÿRŸAI2Êè›àdšœ³\DrÊŠ­–,z“ôZ`=Ì%ƒtÜ]°2<išã‘‚8<Æk[qÆî ‘þxâ¢y]Ô+Œ{P–?ñýûãù×A2,Šèã*ÙzŠL¦µ‚w,a˜ {uÿL{0R5ŠF‹ËbÀ€çwÏ©¤cÓ­c1Ÿ/,€séŽqÓ°§}‚×åýÐqŒÐvú{P…Pªè)h¢€" w ´¢ §¾F1SýŸOÀBà)\<^§­0%sjùß¶BƒžáNGëLŽ;8¶”‹NAÜsùúp8§p!ŠÏOŒG˜·²t,ǯ®:gÞ¯ý­?É¥pµ§ù4}­?ɧpµ§ù4}­?É¢àkOòhûZ“EÀ>ÖŸäÑö´ÿ&‹€}­?É£íiþMûZ“GÚÓüš.ö´ÿ&µ§ù4\íiþMEurÏ,;7ž›ÉÇéH Ý·ßß´ÿǪKhM½¬q3+0ÜI\ã’MIE 2õËùs2] GlW>”.¨#¿¶’HçÂo!~ÎÊXí8=M0"º¿yîœA ÅÈ…‰¤'#®1€sAôª±Â#^ÈnæÕÁÎê9Ç'ŒÐ¡$*û–Ö`A²IŒc>¦KãÚÎIâÑú““Þ€¨>òî:Ï£ÿ.›–»¹.UB‘ª™P©8=hšñü…æü?•gSÑî>ëÿ»ý+•‡ýJ}$êX§xcuBT±ƒŽ”Àž;í‹Ìy;qœŽxïÅ"Þìݵ[æç–ƒùtæ€!š_7om俢  ìãú÷Çó­ùäHRI$;Q,}&Iu”°.p¡‘—'î=ªz@1äXöî8ÜvsJ[!H;NC@¢€ ( |繂dXÌ›²Ì»±š‘,®dUdÔmÙXáJÅœŸûëÚ˜:mê‚Mô I0ÿöT‘é÷r xõOB°äèTì®xêoá*zÿeKý™}ÿ?±ߟþ½þ̾ÿŸØ¿ïÏÿ^ìËïùý‹þüÿõè°öe÷üþÅÿ~úôf_Ïì_÷çÿ¯E€?³/¿çö/ûóÿ×£û2ûþbÿ¿?ýz,ý™}ÿ?±ߟþ½Ù—ßóûýùÿëÑ`ìËïùý‹þüÿõèþ̾ÿŸØ¿ïÏÿ^‹f_Ïì_÷çÿ¯Göe÷üþÅÿ~úôXû2ûþbÿ¿?ýz?³/¿çö/ûóÿ×¢ÀÙ—ßóûýùÿëÓdÓ¯‘7}¶.?é‰ÿV¿‘yÿ?°ÿß“þ4û7imG ±,  Ò€&¢SˆÉê:ŠMÇ áxÿdP2“•µ»ówib4PqÓ'óÇâO­[©yGÁLó†@Ü™#=Jj\«ÊcR¥‚†à `’?¡ ï>ߪ±Hï}r¬~U éÁ GÄò›ðþULG¤\ «×oô®z-:ðD ÛH=) ýŸyÿ>ò~TgÞϼŸ•0°gÞϼŸ•Ù÷Ÿóï'å@ö}ßüûÉùQýŸwÿ>ò~T5Ò]ÂÍ€H÷­;èZâÖâ 4ˆÊ ÷¤À¡{¦M4‰äLUqó9-üYäç×û; šfQH9rHÉ<ÿ=(«§Lo#‘Ù6$…ÏÌI~¸>Äg –ÓIw0‰dPÎY˜‚2>\cß+¡4ÄÒîž¹£1,æÉÎkj5Ú€`.;@¢ Î«d?ßÿÐjÕìsCØE°o#ƒ€AGô÷ÇãŠh4Ø/£Þ/¼é¶¤j_$ ÌI8'¶;ŸJžþ <ˆ ´‚UE~L2„*;㑟Ƙt¨õxßhóÀGóɕeØ8=wç¼ÖÝPEPEPEPQ]2¥»!@îMsQYXŨ=âÏó·ð™~P{œU½;>"?¼ÿú¤Š)ïùf~´Ú­q ¯4rÂ讗猅R›HiïÒÊ®¹æÁÎ;S²l©æ&Ù7|Û>eÎpϧÓì>ÆîÛ—æP6Œà`“ÜŸZ½U ÿ…ßÑ?‘¤'âù Oø*ΪÒ¤û߀þTÚ (¢€ (¢€ (¢€ (¢€…pø‡BGJ“ϓր>OZ<ù=i€yòzÑçÉë@Ÿ'­|ž´yòzÑçÉë@Ÿ'­|ž´yòzÑçÉë@Ÿ'­|ž´yòzÑçÉë@Ÿ'­|ž´yòzÓd5 Hªêz†ÙíÿçÚûöµ ªªªª¯@£PE "žœí ûŽWùT?ÙÐÿ~ûüßãNàÙÐÿ~ûüßãGöt?ߟþÿ7øÑpìè¿?ýþoñ£û:ïÏÿ›üh¸öt?ߟþÿ7øÔA"‡x„±÷™œœãßÓùôÌkÿò›ðþUL ·Õï÷·úCuôáMþÖ¾ÿŸ†ü…Ú×ßóðߣûZûþ~òk_ÏÃ~BíkïùøoÈPý­}ÿ? ù ?µ¯¿çá¿!@öµ÷üü7ä(þÖ¾ÿŸ†ü…Ú×ßóðߣûZûþ~òk_ÏÃ~BíkïùøoÈPý­}ÿ? ù ?µ¯¿çá¿!@öµ÷üü7ä(þÖ¾ÿŸ†ü…Ú×ßóðߣûZûþ~òk_ÏÃ~BíkïùøoÈPý­}ÿ? ù ?µ¯¿çá¿!@öµ÷üü7ä(þÖ¾ÿŸ†ü…Ú×ßóðߣûZûþ~òk_ÏÃ~BíkïùøoÈPý­}ÿ? ù ?µ¯¿çá¿!@öµ÷üü7ä(þÖ¾ÿŸ†ü…Ú×ßóðߣûZûþ~òk_ÏÃ~BíkïùøoÈPý­}ÿ? ù ?µ¯¿çá¿!@öµ÷üü7ä(þÖ¾ÿŸ†ü…Ú×ßóðߣûZûþ~òk_ÏÃ~BíkïùøoÈPý­}ÿ? ù ?µ¯¿çá¿!@öµ÷üü7ä(þÖ¾ÿŸ†ü…Ú×ÿóðߤþÕ¾ÿŸƒùð  ëÉ^{†’VÜ穨(ÿÙlibstruts1.2-java-1.2.9/doc/images/how-to/eclipse/developing-eclipse-style12.jpg0000644000175000017500000007306010404045224030121 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„   (1#%(;4>=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀ¬¤!ÿÚ ?³¯k•ü‘ÙÆ†¢Fsågn}Md¿ŠõhÜ£ˆU‡PbÕ P’LÍɦ'ü%Ú§¬÷èQÿ v©ëýú^Âó±á-Õ=`ÿ¿B”x³SõƒþýŠ=„Ž+Ôúæ×1Kÿ V§ëýû{;â­KÖûö)ßð”j^°ÿß±G°€s±á(ÔFaÿ¿b”xŸQ89‡þýŠ=„í£ÄÚ¬?÷ìRÿÂK¨ç¬?÷ìRöhÅÿ„—Põ‡þýŠ_øI5X¿ïØ£Ø@=£þMC=aÿ¿b”xŽÿbÿ¿baöŒpñÿ¬_÷ìRÿÂC}ëýû{Ú0ÿ„‚ûÖ/ûö)Ã_¾õ‹þýŠ=ŒC‹ý½}ޱß±J5ëÓÿ<¿ïKØÄ9ؿ۷¿ôËþø£\¼õ‹þø{‡;kwŸôÏþø¿Ûwž±ÿßcs±Fµv{Çÿ| _훿XÿïG±ˆùØ£Y»ÿ¦÷À§kÝÓ?ûàQìbì?µî¿éŸýð)F­uÿLÿïG±ˆs±µ®éŸýð)F«sÿLÿïG±ˆs±ÃS¹ÿ¦÷À¥þÓ¸ÿcþø½ŒC€Ô®=Sþøïíö?ïG²ˆs°þÑŸýûäS…üÿìß"eçbý¾ö?ï‘J/¦ÿcþù{(‡;í³±ÿ|Š>Û7û÷È£ÙD9Øáy)þïýò)~×/û?÷È£ÙD9Ø¢ê_öï‘N2³ÿ|Š^Ê!ÎÅûDŸìÿß"—íþÏýò(öQvq:óÕç$ó‘ü«>¹ÍŽ]ÕLÖ'1ášD‹(Ã*é†È?˜ª—:Å”¶Ò¬C9“p’69ÏÝÆ8ã§>•×]&Œ›Õ¾ÖôÉ­.]²ÉÏçm¼}Ms5¤"âµ%»Š)Ã¥h!ËÖœ(¢H æŸ@…£¯½:–€=©E )Ô€QN p u RÐ!â”RËK@ÅñC§ bœ)áN†8ccþú4ý¬û‡*øEtoùô÷Ñ¥ÿ„WGÿŸAÿ}=¬û‡*ámË ÿ¾ð‹hÿóè?ï£GµŸpåBÿÂ/¤Ϩÿ¾ðŒióê?ï£GµŸpäAÿÆ“ÿ>£þú4¿ði_óê?ï£G´ŸpäAÿÖ”?åÔßFøF´¯ùöÿÇÒ}Ã’"ÿÂ7¥Ï·þÿøñ£þí3þ}ÿñãKÚK¸r!áÓ?çßÿ4Â?¦ÿÏüxÑí%Ü9Â?¦ÿÏüxÒÿ`ißóÃÿ4{IwDØ:wüðÿÇ/öÿ%eŒ¸(9ã¯|ÕßøIâó¾ÏöI~Õælò·îoÎzt ÇÅ××v¶É Æ÷‰Ì`¼ôõéÚ·h¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (,R `zqé@à;Òy‹Ž´ì|ÑŸj ¼qü¨°5ñü†®Þ¬êC=b8Ö[fóµ†  î*³hZkFÚŒe‰;›qÝ÷²ÙÉϽNšu¤rÇ"À¡ã‡ÈS×ÿwô¦YéVV2™- òܧ—Äázàdð>”âéì}¿˜]B–‘ÙŽÈÁ'#žx§*Ì4oå1x‰*Í#ÆFIÎ8t ›@Ó1Z)E w67Pxt¦^è6—*æ5LìʹÝÂíãž8â€e¡ÙYGlF¶P±³±8ãÇ@ Ñ Š( Š( Š( Š( Š( Š( Š( Š( Š+3^žòÖÄMg"&ÖPå—wÇçMÏKij<—Å;¹Îe·VÛì3ÐTj—6ò¤¶ÓÅ©Ïî UÝìqÔVœ„s¶­ª¨ÿÄÿ¿B¢þÛÕŒÐÆ.Ó÷’¤ê‡r?f¬.c«F”Fža%ð7mn{1õ  :v«i©ùŸe“w—‚zt=CUε°_„ˆ¬æ,£d}Õ9çø»P†Õ­–6|¶ °Æ6€qÎzúúŠ]UM½Íª´Ñ\JP…lmbqÏ\­,ºÕªÙËpŒJÆvò?‹nïåUÓZgŠ0±–”܈œ…ùQL»Fy늷q«[[É:H[(20 ž€ûœŠ¦Þ"‰–W¶…æD‹ÌÊ‘ÁÉ?•Nu¸RY#’æ|'Ü]ªIoLníšY5ËH˜‡…ÁØÅx|0Rú(B7ó#WÚ˸gkGÖ@Q@Q@Q@Q@Q@Q@Vgˆÿä 7ûñÿèkBÚ«Hãð®„dÈ!nµky äbk<)=GÒ®jZf—¦F'˜_C»rHÇaƒÖ¦MÜqØnbšÄ^Y\ßí&Ó4µ`:w®‘蟙©(àuïù \½Yõ™G­[«ÿ>‚¡ŸNŠ{–Þ_U0ß+€IÄÐWJ·WÜ]¡ÃªnùTîÝÀúŠ•j<î÷ξnáËÔš}¶ ¼O2ø§®lެ* ¨nƒnüh÷:]½ÕÁšmìØÂó÷:r? i“nA Ò±e(ä¿.=þ±@Òmÿ~Y¤vž3ŒÍÉBŸÇ *ºè§ír;\ºÂU–8ÓøC[®}?Zж´ŠÑBùP" \ðéSPEPEPEPEPEPEPE™â?ùÍþüúÓ[ÏÈøã½U‘롱¶ÿ›/÷ÛÿA5{\Ômo´ Im¦Y HUñØÔKr–Å9¿â’´þ$ÿÐÅuçêïRQÀkßò¸ÿz³ë2Z¶ÿWþ}K@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@TWvÑ^[=¼ëº7êÇ¿ZÌÿ„_Lþäÿø'øÓ[ÂÚghç?öðÿãUÌûŠÈϾÒ,´»»­ÕÑŒÅIy™†67©¬É4h£‚æÖÚò8­®[s ·Ð6zU+²^„³¥½¶› ­»‚¨èÝ’~a]Y_cÿ}Ðôyö¿ÿ!‹÷«:³,õ«oõçÐT´Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Qé@ÜZÁr'‚)T…‘AªÇFÓ¿çÂÓþü¯øS¸é(áÒÆÕX‚!PGéVLg=äiÜG›øƒþC7?ïVuHÏK‘ˆnÇ£°íìi»ÛûÒßÖÿWÞßÞ“þþ·øÑ½¿½'ýýoñ¢àÛûÒßÖÿ7·÷¤ÿ¿­þ4\{zOûúßãFöþôŸ÷õ¿Æ‹€ooïIÿ[ühÞßÞ“þþ·øÑp íýé?ïëÛûÒßÖÿ.½¿½'ýýoñ£{zOûúßãEÀ7·÷¤ÿ¿­þ4ooïIÿ[üh¸öþôŸ÷õ¿Æíýé?ïëÞßÞ“þþ·øÑ½¿½'ýýoñ¢àÛûÒßÖÿ7·÷¤ÿ¿­þ4\{zOûúßãFöþôŸ÷õ¿Æ‹€ooïIÿ[ühÞßÞ“þþ·øÑp íýé?ïëÛûÒßÖÿ.½¿½'ýýoñ£{zOûúßãEÀ7·÷¤ÿ¿­þ4ooïIÿ[üh¸öþôŸ÷õ¿Æíýé?ïëÞßÞ“þþ·øÑ½¿½'ýýoñ¢àÛûÒßÖÿ7·÷¤ÿ¿­þ4\{zOûúßãFöþôŸ÷õ¿Æ‹€ooïIÿ[ühÞßÞ“þþ·øÑp íýé?ïëÛûÒßÖÿ.½¿½'ýýoñ£{zOûúßãEÀ7·÷¤ÿ¿­þ4ooïIÿ[üh¸öþôŸ÷õ¿Æíýé?ïëÞßÞ“þþ·øÑ½¿½'ýýoñ¢àpÚ÷ü…î>µŸLJ—ïþùQ³XéÍHÕþúþF«ýõü0 «ýõüWûëù6¯÷×ò4Ù EHÎ6¨ÉÀ4ª”6õÁiv¯÷×ò4€6¯÷×ò4m_ï¯äi€m_ï¯ähÚ¿ß_Èе¾¿‘£j’ÙŽ( D:ä~"£†âÞu&2Ä^?¥O2½‡gk’üžùÑòz7çLAòz7çGÉèß'£~u Ì‹u#ÌRCéL ¶¯÷×ò4m_ï¯ähÚ¿ß_Èѵ¾¿‘ jÿ}#FÕþúþF€ «ýõüWûëù6¯÷×ò4m_ï¯ähÚ¿ß_ÈÔr¼qlÜãçm£¯Z@:Š( Š( Š( Š( ]ÿ¼ÿ_éYõ@zT¿ðÊ™sþµWqPÎ#Ò³›j-¡­Ì­BFv)h%xv‘’Ç“‘Ðç$uëV´×•í7K÷·6Üž£¾õœéÎmrn5$·'Ò.MÕžöw†#s¨ü¸8éUlµK‰#€É›Ï HÌaX©$|Ç1ÔV­YÙ‰;’¾«òXˆ T¡$®à¤ãñkà/•m.ç#ËÜ ‡Ô@i RHâgšœñ«nÂà2OnúÖ°ÿVßQýhÄ.ñËFÅ[±j}9ÊçIà{þ·å\õ4iùÿ‘²ømýu-_Î-ÚÕÞQfl;3`ckuüqY‰}*ê3²MÎÕXŽIoqòóéè t›U¹†ÆÚgò|ÉHÊFÐAÇÊ =:Iu+ÔHd"-Ò+òà2rqÿë  š„òÝÁ¦  "?˜ž¼õàp9Á=jÌÿòµÿuÿ¥G¨}£í–"ƒ4„2…Èo•?•Ke#=Åèf,`ÐlSýhšYšèÁ"A#RAÉ £Ó­WƒVóã –Ï’ÊŠ  Ê€ ƒ\",M®è vU$ÉÆ@ÇJ¿%ç—d.& ØÛñn;㚬šÔmLaqàÏ íÎ1Ö‘ïîVù aÃF§ ØžÔX ’îhaCpŒí#  CžÀŒŸ~iƒUìÖì7³,0ùÈp¿‡$P%Õœ¬‚sæFT6â0 r¤~†¬_VаÚL鑞”vŠ@PEPEPEP®ÿÈ^¯ô¬ú =-†é@é?•GuWJUß NxÈ5-'¸È<Ìì= Ò¬ì\`:ô51„a¤A¶÷3íôh£Ü%¹3)þð ƒþ÷__Φ}.ÊB "p1¸˜éÓ§b$’ÊÚY ¾ÒÄ`ý쨤k8ÒÎH!e]ÊG9<‘Üõ µ²Ih ’AN3éYÿðŽØœfY·Ÿð«…G „âžæœqG*#"ªŒâ«[ØLaýÚÆÞ1Øz*+i¶Ä¥Ws8ÏcœA:Qý™g´¨Uœð[#è{~­§Ú¶sŒ’76 úœÕ“€„’:Pk›;{¬yñÇLÒ¥¬(¡R0;°=jZOqÝŽžçM’W9áˆþT±¢Ç¢gjŒ ’iˆ}Ui!w¿‚A€ˆ¬ =³@Ém’Dìã16åë×ZŠÛNµ´–Y ­)ËOJ`2ûO…?Ò¼°½‚çüý)ëac•ÖB͹›I=3ÇNPF—dvã-ƒõõ>õ4¶°ÍŽB¥GLdô"€šu¢EåªG³!°rr@Çò¤M:Ñ"–0ÉFÇ#ñ tëE]¸ 9ûÌÍŒý~•:M¤HêHrå‰,[#-ž=9ôô  –ÂÕ‘Ue Ýy’?Ry¦ÜZy‹Ç"ŠÜç ü(ÎÕþúþF«ýõüWûëù6¯÷×ò4m_ï¯ähÚ¿ß_Èе¾¿‘£jÿ}#@ÕþúþF«ýõüWûëù6¯÷×ò4m_ï¯ähÚ¿ß_Èе¾¿‘¨L©öƒ9`»Ž¤®ÿÈ^¯ô¬ú =3þ[¯áü«Tº6÷ öîÏ2£¹#$|¹\àrG4€¥ç]–[`·lЬŸzM®G˵‰æêx­+kÉ$¿ctòÁIàryùy=1@$ÕnMñ·ˆÄ6#,Ÿ2©ÊçßÚ’{é¤+’ÅYÑq·lKƒ·ž>î{õ  õ—-<&TŒ.ݨGÍ'C‘ÏNÝ;UvÖ'ß2†TÀ±dðW?{ÛŠ»c{,÷’Dåp«y>÷<b*•½Ôö–P|ñîx„ß2s+áýïÒ€ ûlëo ‡]ÑH ÂGÏ/äsÓAÓ$N@É玪ÔnÉ••âxáPÛ‚J2FAÏ=èu)'ûT±¬áˆv# äùœ‘Ïn3M}Nñ.„ Bv¶ÒÍòù‡8ÂŒõúg­>æêK}Va¨X¬@BFYòH$sÛ¯NÕVóS’u†4t9XÌ› ʱÝpÙ³gw$×rJÒ£0¶ÜbQÌG?u¹ëùTk«Nm,Öį̂ÂP0ŠH9RsŒŒýÅ2Þæêñà=#w]c+»`1ëÈÎkVÆåî*–¤¨ å†~‡nŠ@PEPEPEPEPEPEPTÓþBòÿ×þf€9=wþBóý¥gÕéŸòÝåT¥½‚)Ll[zã !8ü©ßíúiÿ~Ûü(þÑ·ÿ¦Ÿ÷í¿Â‹hÛÿÓOûößáGö¿ý4ÿ¿mþXûFßþšß¶ÿ ?´mÿé§ýûoð¢ÀÚ6ÿôÓþý·øQý£oÿM?ïÛ…þÑ·ÿ¦Ÿ÷í¿Âíúiÿ~Ûü(°ö¿ý4ÿ¿mþhÛÿÓOûößáE€‰®lÚu˜‰·¨À;_—J—ûFßþšß¶ÿ ,ý£oÿM?ïÛ…Ú6ÿôÓþý·øQ`ßÛ° ù˜<Ý·øP—ÖÑ¢¢ ¨À[p?*,ÿhÛÿÓOûößáGö¿ý4ÿ¿mþXûFßþšß¶ÿ ?´mÿé§ýûoð¢ÀÚ6ÿôÓþý·øQý£oÿM?ïÛ…þÑ·ÿ¦Ÿ÷í¿Âíúiÿ~Ûü(°ö¿ý4ÿ¿mþhÛÿÓOûößáE€?´mÿé§ýûoð£ûFßþšß¶ÿ ,ý£oÿM?ïÛ…Ú6ÿôÓþý·øQ`íúiÿ~Ûü(þÑ·ÿ¦Ÿ÷í¿Â‹ŸÚv£Ïÿ~Ûü)SQ¶’EEfÜÇ(G4X ÏN:äÒì>«ùÒØ}Wó£aõ_ΘÃ꿪þtl>«ùѰú¯ç@Ã꿪þtl>«ùѰú¯ç@W’Ê÷¬øeÔÚD9VH>Ù4Ëk¿òŸëý+>˜™ÿ-×ðþUšâ;ÍJCÑR3ù¤€¦öÓÄ%[ݪïõ’>™ÅmÅ{ØÃq4É:šF “øÐ£n£ný=ýœ~fû¸Ë >dnzgÒƒf1›¸[`ýàå½>´Ä(½µ>V.aýïú¿ÞŸéëHº…“Dò­å¹8f®êsÅI-ÌÂ%–xãˆãΟƫÝêvÖñ¹YW•Z4pXn ŽÝhðêÒÆŸ·–$d.2€ŒóéQ®­e$Æ(î#v~ë¯!Žò3@JÅSy½¶ »nã*ã>zÔ«qN`Y£2¸Æn×Û­C2µÄJDžWÌàe°=yéÖ¥Žh¦Ï•">ÓƒµÁ šât<ÑĤà`£?A©e<{Öæ `C8pr?/΀.¡k ÌVï2 %û °ü?>Õ,7N¬ÐÍNÖ(ÀàúPc¼µ•wGs ŽyW§_Ê‘¯­°k¨¢†lÈÐzí@ mFÅP»^[„ ÆUÆHÈ}9¤]FÔÉ"<ÑǶA–p7’ªÜzýêcjp¥ÌÐ2°ò•›pä >¿0¦K¬ÛÇ2D±Í+º‡èA=Èô ÛêÏsäyr£n( ‚ÀdŽ\*eαoirÐÍ˵‘Kí~lsžƒ'¶(þ×…®ÚÚ8f‘ÐኅäŽçØÔ7ôò\+ÄØ„1 ¸aöŒœ~D}A  8'†â?2 RTœÔCX-‘sÝ´öÓFZ9èHù‡¦F~øü# ûõ`ß+S÷J¨=çåï‘ÏJ´t“sk¶àìsrf sÇ+ÅSQ"D"hdŒøž-êAG€4ø´SöÇšwˆ‡vvò£(푌ÏÝï¥9ôr÷»ÚDû8)ˆöpªË‚Içïþ”Í7AŽÖg–飺c…ã\3§<ò?*¯65ݼLó,2ìrë·p ûÉïÐý(^ÊÚHy&‘Yœ3lRª0¡F'°«4Q@v—ípþR[líÜíœ{ñUšÒúY 2‹uHåW;‰ãð¤Æ`©!bÈëQy±ÿÏEüÅ 6?ù还¨îÞæŠVFFÆFáÏ9  ­§XncØK )‚ñŽGçŠ|6vJ’G)^v¯™ò‚F Å0!1ÉtÒÝËé»r« ‘×’FãÚ¥ŠÊÆqÔsò°NIãÓ–4 r[Z¬¯/šLŽÀ–/Ï }*UXU•„¼©cËúœš—Íþz/æ(ócÿž‹ùŠB4±ù/‡_º{Õ /ýtõé09ÍwþBóý¥gÓÓ?åºþÊ °sΨàd¬hGäÔ7‡"’ÛÌk™¾îà¹àwÇ­iC~©chæ'y&A¶8ÆIÀç©§d¶ ·¸Ù5¨ãÊ·6Øö¨ýçÌãžÄޏ¦~ÐvLAþèá1ýzu÷ã¥Iý±oœl”ÿZ6Ýs»ŸPzf˜ºí©‰\Ç2™6˜•€@zcœ~x  äÕ-× 3LNß&2 ƒŒàóÀ=ë;L×üË_6ú6Œq‰~R|°äuÎzþTxêѬ¢9-®# )rʸMĪ繩÷š‚YÎE;|§·î‘ÆI÷ï@ ±Õíµ [oc³y8ùW’1‘Ær¦§{ûT‚i¼ôdƒ>aFiRâ,²y–Ó,H‘¶à³€O éšuæ³½¡™brûÌaÁÜHü³@®­ne‘4^Rƒ+HTÉ€yëÈö÷¦.¹d÷om4’('äÁÎNsÓÚ€}jÎÞ(摈ŠF!\à?¼9#éQÿoZ…ghçDPIb£çûíl}(9õè¡™ ªðÆšEÀåB÷Ç;½h›[3Ù…xö¼’îìŠ@ÖvM#³È±ò¸V#Ž{ u  *(¢€ (¢€*HG˜Ü÷¨ÙÐc.H'©¤Y­¢¹È™ÕOñŒÔ_Ù–_óÂßþøÿëPý™eÿ<-ÿïŸþµÙ–_óÂßþùÿëP0þ̲ÿžÿ÷ÏÿZìË/ùáoÿ|õ¨fYÏ ûãÿ­Iý™eÿ<-ÿïŸþµ û2Ëþx[ÿß?ýj?³,¿ç…¿ýóÿÖ¦0þ̲ÿžÿ÷ÇÿZìË/ùáoÿ|õ©¦Ø¨$Áo€2~OþµW´dkòÑ FmШÆ02qLG/®ÿÈ^¯ô¬ú`zgü·_ÃùT:j /5$c€É?“R@R“QÛéìç§OZÙ]>´·@ò%~Iá±ëJ-=†âÖâ &ØJ$ùÎÖÜŠ[„;ƒ}H•7ûËØÿê|Ÿ¼~îþµBÚM«JÒaÁvÜà7Îp}³CéÍ EûÅEˆC€ÝSÐúÐÓXÃ,QF7Æ!ÿVclã~V- Ê4òÿzÑã[9*ݹúãŠQ£¡»2Éq<ˆQc?R¬Í“ë÷¿JtÚ\sKw}‘†ÛÉܘ6sì@ÅKe§ÃbÒ4EËI÷™Û$òÇù±«§™&æ]Ôà¥QF³‰Uc `ˆmÀŸÇ'ñ§M¤ZÏ1‘üÌ-°?˸Œ^hH´ø£º[–i$•Sb´£ŒãëŠC§Bd‘ÃʾfIUrOSZŽmÖXÊfTB ”ÿÓÚ™q¢ÛKi$+¹ &ÀÙÎ1¸ÕÍ(Ñmp ´¯(óþnÄ~EF*htôŠwvc*˜¼°$ù$–Éïž?*aÒ,ü¦Œ!¢òI¾¹õ÷¦¾ „&¹s´¡Ý)ù”ã*}¸  ï,b¼ò¼ÖÉ +`‚:ˆi‚õ.°•T|Üp08õÇô }.+©gk’]eÙ€8*¶~¤ŸÆi¥ÛÚK¾3!ÁbªÍ»ŽN½\¢€ (¢€ (>áØI€ÄzsY×ÌÆ[0XŸô”ê~´€»ü2}Efê·ÿ`‰ ˜÷±?ëÉüp8÷Å "¹Õ•6ÀH0GÜ-Î}(}Bám¯e1hdUDpŒ…þéç©ïL 㻑#ÏFg”á6ÆS'Óœ~•Xkk4ðHL*QÏ¿N´/öªœ¶™/ÏÊ8C‚y5αCw–M­Á\® X¾»{9!v)ä6àà˜aY²qÚ¨ mÌQæ[dmÌ$lP0cÐãê hC|$¸H&I `HùIÇ©ü\¤s©“ýÓü«;Kÿ]ýzGLs]ÿ¼ÿ_éYôÀôÏùn¿‡òªÖLVmU”àˆƒÿjH ¿²4Ókæ5¼^aMÅûç®ia½™ll6gO½)!FSÜ5!}fçz,qBLÎV<±ùpáïûë"¢> ¸Ú¤[Åþ¤Ü˜ý̯ÚlÌDhb͹_˜üÙb¿/åÞ˜ºÕßÙ£‘­ã&X–U*I§©#©Çµ[“R”ˆR(B´¤’^#o”¶F9íßk*Ç\º]8œ$ +#´®~a±N¾Ië@“\»‘de±ÂõBXt‘œŸÀSX¼É*$wdá! ÆMÙ9Çw  Ún§%ßœóÇFUr\Xªœz*¤ºÜÖÏ*˜„¦9˜Hû©Æéïë@W³O¦‹¹-ÎXecˆä‘øâ›%¨·+Tüìù;:p@ç<ý8  û}^ù,‘¤Ž)YmZvmÄ: c­O&§pÚËA¢‰²–ûä#׿"€5™„·jîÑ.#@ÎÓ“×é‘M‹Y¸òAžÞ8ÜÉåàÈ:àx'Žy O®N—†Þ(ƒ°H¤c€NõFÏ~ zv¤Z¹šh¡H­Ñåƒ;¡~o×(:¯m¯\b–í"» Nçb¼rG½O5í⥉œ‹‰d‚%"7*·Óå'æ€!û}õåÔ ’Á ¡ÎÀÈ¥vì–SÝ-õâß?˜ÒÏ’UT !XÄó@ º¼¾]A…¼ò'_Ü2©ù|¢åxäÒ“N½¾Ô/ÝãšG¶GÈÚÈ£o˜ãœ©'€:ÔRëR»Ø¤ò<+(/Â|Ò~Ÿ(®–ÂåîQ*¨x¤ØÅTðGç@h Š(  Û¯õ¿Ÿó5Ÿ{þ¶Ïþ¾úÒä’$hæGU±ÅTw²’E‘ä…™APK€qŸä(·Ùt¯”njŒóŽß»·¦pN8̓8Þ€špŸÎ r6ä0Æ>Ÿ'—§îʇ UA˜ Œp3Ç•!k#ŸÞÇÎßùiýÓ‘Þ–êÜÂàO%N>aTô¿õÑÿפtÎk¿òŸëý+>˜™ÿ-×ðþU–ßj!ÆT¬`l5$4—ÖÊp-nO8*'n=¾î?Zê’ÞÞ[HãhQ¢F€¥KÒ]G‹hFCv ³$t$Ñöh?çŒwoÝ=>•Dƒ[ÀÎ®ÐÆYIeb£ ž¤R=¥´Šªöñ2®†@@Å+nñmºXš2@Ä Onµ^çL±¼TG‰6DÙØ€œኬí\8khXHw>PÇÔúÐöö³4ŠðÂä€#¶hO*=¥|µÁ ‘Û§ò•@¶VlbŽR$.K€Ä1ëסé@U*(UšðÅ#£É;FrŒÊ Síé@Á32DŠ[%ˆP3ž¹¨ÖÆÑbZÀªí¢0qŒþT,pÇB(ãDŒpT? bZÛÆ›#‚$LµPƒÔ~4}’ØLeû<^iÆ_`ÉÇNùTséÖ—Koù_tïÛñ?Hööä‡xbÊÁŠ”úût¤‚Þ­ãŽ0 qò™çôkiqyC*Wr÷ZtVÖðÈÏFí÷™P~´«mÊeXc1Ép£$ýB[Ã2GF¬0B(ç© þÇj–ëÅGýà 9ÏãRCäGG–©ÎÕLÁçP”PEPm×úßÏùšÏ½ÿ[gÿ_ H rAÄùªŒÿæ£û§üóƒþýÿõ©}ŠÓþyÁÿ~ÿúÔ}ŠÓþyÁÿ~ÿúÔ}ŠÓþyÁÿ~ÿúÔ}ŠÓþyÁÿ~ÿúÔ}ŠÓþyÁÿ~ÿúÔ}ŠÓþyÁÿ~ÿúÔ}ŠÓþyÁÿ~ÿúÔ}ŠÓþyÁÿ~ÿúÔ}ŠÓþyÁÿ~ÿúÔ}ŠÓþyÁÿ~ÿúÔgfªXÇÉýßÿZªZ:I~^5Ún…F: š`rúïü…çúÿJϦ¦Ëuü?•V³Ï›«c¯”Ÿú R@[ûm²Úe‹>^1øUtyÓMÓÀy㈯ï^÷¸ãŽ0xü)Þàˆ^]JI–5’å7I‰±!¼ÚJàåw×ð¨LúÎÐC\ 3ª¾Òvté8ëÏZ¦ÔÒfŒµÁØÛa>P"_˜çyŒsÅFeÕb³„´×,ÒD²>aËî«…ãñ€-ÏåÅ͇”E“vS‡ÈxlŒuÇJɳ:¼*ŠŠð†*Äy$ïmˆ0@È{ЋBùÒ)$º‹’³º@IÎáŒ|¤3Ó4‘¾¢³K#ý¦5q"C–r8LŒduà`úPæ¼ÕþÖB¤ª áÐDH@1–SŒg©'éS[3Ǧ_®ns!–DšX¶œ:‚çéÎ Uk½XÍ[ù¨®qä–2£p;qÈÉÆOá] Ôı”dHÏ÷Óf€1u3{-Üñ#\TÆÀĘ)'•ùSÁ>˜©¢šöY¦’áíüöR¾NHiÚpNN;PgÔc²–Y$º[‰Z7dòO#bçná‰sÓ]Ô$ÕVÞ#ò•˜ndRóœtå¸Ô—YŸd…Œ.dÛÊûÿ^3T!ŸX°ónJÆHVò6ïÉ®åÏØtïŠCu¨J×P.^d;/'ådɉÛ×o=G°íKÆ©  ]ã DŒÄ@SŒG‚F2N;ž¼â€&žÚöÊm–1f |K ·$ÛﻥTk$j1¼nóy,°ÿ¢³|2$Æ:çŠÒÒâš(åTEû)~wBÑåp3µ:ŽÿZÇŽÖæ6I ·œf´~[s¸PØ'Øæ€/Ea%®›,Œe¹c_'kÏжyȪ© Ôm·PF7–ÑA¸’]ˆå<(ª·25´F`R€¸›Ô”Q@›uþ·óþf³ïÖÙÿ×ÂZ@^þ>¢™H±Ó[OµÎ†HÝDh‡æÈ!N~¤ä{@ —SºÞ FIûî;sÞ®]ÞKÚ¡s(_/#¾ï›?†1LÓXp!KwfgÂÀe!ˆl8ù{f«ÜkElت¶ö…ˆö’ãëÞ‹ùõw‚åVHX2£‰~l±)·3üF´mnźÊQ£'9WƒŽô6iißê$ÿtÿ*ÎÒÿ×Gÿ^‘Óœ×ä/?×úV}0=3þ[¯áüª--ÄwÚ‹±ÀTŒŸÉ© 3\j¥|ű‡o]ÛôÍtÖò mã‘H!”Ž”$ÖãvèIE1“¤rźRBñè3ü…I@Ê­ÊFGCBº¶í§îœ­-#*º•e PE$R¤Ñ,‘0daGz ˆ%X‹ 쥂úŒÿ1ùШ ŠŽÒf”!$ÄûŽøúŠŒßÛ g¥ ÐÎ`$þL(“j6Ó’UY¨ I<{}iÑ^ÙÝHÐ$‹#)åHî¿¥#jViqä4ê²ïí9ûÄdÒí;??ÈóÁ“;v€NHþ`þTÆÕ­IQƒB@o”ú‘ý ] eVÆå##¡¥ Š( ŠÍºÿ[ùÿ3Y÷¿ëlÿëá)jiâ·ÌÒ*xÜqš­ý£eÿ?1ßT€?´lÿçæ/ûê¡3émÆd€¢çhÏLÿúéÝfÍðã9û矯<Ó®g¶šT‘5‹`à§Ÿ^E>“¾bIprîœǧSùÓ\hÏÍÀÆ7qŒc§ÐÐÒíB2_žq߯aùS„ÚX`’¥ »ªž¢€%[ëwe¸ˆ3XîëÚý£eÿ?1ßTÉu 3sJœ|Õ_Kÿ]ýzG@æ»ÿ!yþ¿Ò³ééŸòÝåUìP¼úª(Ë4Hü’íÞP²ºÜoú¦ôúS ŒÍabL"_ÞA#`Ž~”îØÛFžYÀ’8Šy™•‹gÏà À#ŸZ„èWe@>_ËÇÍÒm¤oúçûPí¤\¬Í±cò÷~àîÇÙÆâr£ÁJ´KˆìâŠ(Ó>R‰T0 òìù…[»Ón!1N”«~B¸Q~ùª6úÒ¤åÕ„"Û. ‰³‘‚ŸA@iö÷0êr2ZñÆÉ$Ì ‰‰u9Éð­Es¥ÞÎÓt¿hgˆð…OnA8àôÁï@Ö-o¦-¹‘£”òò!ÉÏ®N{`TzŒ×ebCreÁ^Ü•Ç'¯Lb€(Å¡8…¢){mä‰]XüÎØÃ‘ëO:uÔú“^Ü[GÈeDäÇ•Q¸p~SùЖúUÒi’³›i8E‹n9Ž9nù¨ Ò."¶Šç-´È>îSåa»ñ@Ï£ÝϨ´Œ‘ù.ëæ À+¨u `.NÉ?…FúMÄSÛ´Žæ"rñ–ùwbO˜ñèP~.ƒz$F’bø †j‚ü‚sÇlz·ý™-Õº?14“;H¬0|¶l•>½é7pÉo1âDÞùíò…ù‡'…ɦ¤µÒî…Û»–€$}é.óóFŒ)õ s@ÚT÷7¯çäù„…òÇ2çrA¤Òt›ˆ%šâø·šÇpÌÀ½Û0Þhœú-åÌ:¢|Ñ‚ÑÈvž|ôÿß`Væ™löÐÈ®‹´…’9XÆÀüA?\¢€ (¢€ (6ëýoçüÍgÞÿ­³ÿ¯„þ´€¸cW,_¸Í'“û?÷Å &öïŠ<˜?Ùÿ¾)€y0³ÿ|QäÁþÏýñ@“û?÷ÅLìÿßy0³ÿ|QäÁþÏýñ@“û?÷ÅLìÿß ¥Ž0~åP´M~eQ´=º0™&€9}wþBóý¥gÓÓ?åºþʡӟʻÔä#;R6Àö INMPxD¢ÿhpúõÍlÅXA<ϰH£䓸P£ËÔnWè+ê–Q—p£aðzçzóéHuk7)ó¿çý)ˆpԬϗ‰×÷Ÿw¯ëéøÓSV±xšE¸R£9ôÿ uÍôvío»\Äüäãh Oô¦¶«b‘¬p¡[Øñõ¿lšÅŒnPι_½Û¹÷ü)ÇV±ù¦áBg.´,·qGäs‘;B;ñšdz•œŒˆ“®é § ’1Ûñj¨fÈL‘ù¤‡W;ö£n3ÿ¡ué@ FÑ¡iRedP9çó4Ë]VÒê+wI3¨*¥NJ–[ÛxgXd”,ÑiþÕb2yÀ ’ œg§JûVÇÌ1ý¥7|r3×ñÆÖ-~O&E“2l»G<óÔ Pͪ¶â[ß“ M‹Áõ<@ ü)§X·ÁÚˆXÛŒçúާë@SÄQ½´S‹bV ¹š>¥KsóqÀïW¦Ô=>;´†IB€(À?1u÷"€)¿ˆ­’Õ§1KòÊÑ8 ž½)Óëb;´$Û/ò TðªI9\AøÐ֚ŽÍÔ–ùêÁW';¸Ï^•¡@Q@›uþ·óþf³ïÖÙÿ×ÂR÷ðÉõÊ@WR¹û%“ÈáTã<ž:wõ  ×Õ&—NC†š8Ï™!%:d u8Î=êÛjlÀƒ÷‰ÁROßÎŽ9àùzÓõ¦diZÛlHU_çùƒŽ:gÜSæÕ'„G›MåÔÉ„rpœ{uçéï@†öIo£,;s¸ùù%YFHÇûžµ¡½3Ëœãï×€ußê$ÿtÿ*ÎÒÿ×Gÿ^‘Óœ×ä/?×úV}0=3þ[¯áüª :?6ëSŒo?PÔ mJuÉ2ØŽ6gOJºš{‹kAá%·\+íÜF/QÚÃŒ<èÙ§b°¹h—hã.‚{òEÿü{qç¿ü{}ŸîŽ˜#?­1¶Œ¦ig`³¶e]¹È X{rM2M Z#Y°a‰bV)’1üCž¸  .tKi‚mýÛ©ÜÒ 9±ïëU/tk–W6ó+Kt Ü; qÐ~š×2´sL#µ8p2ØcÞ¬ê:\í#ÜY8óä_,ïèŒä(Y´Ù¤·‚ÜÎv£X|¥M¿/ã“øÓtí;Ãr a†Ôˆ"ŒííÿýhD[³<Ë dgÚ2ÃÞ³cÐü¸ö­ÉRUã 'È€ÈUÏË÷Aâ€>$ $æ8ÈŒH»ÜäcÒ„ÑÀ{róXPGÂmfQÑIÏ#Û½#èVÂò;ˆR(¶mÂù*q´äm=¹4I£€Åçäó’0Ê[œ’;úãµE‡¢ŠÔ@'bl™Ú;ª/þÉúÓ#Ðkh㽟%(T“ÈÏ~ÜÐöšGÙ. )åyhÍ#yqˆþm»WìÍúS¢Ðí¡š9W9GfüÆü•G4vöñ ¸È¶ Æ~Î;)^yçƒR¾´X`+€¦é¶Ͱ‚ü…A?‡¢›Éýû/–X¶|ù$Œý77çVotßµÈSåŽ!Іn ÇÒ€"¶Ñ~Ï.~ÒZ#(”¦Áç>•«@Q@›uþ·óþf³ïÖÙÿ×ÂZ@YžæhØÍ @N{Õ_íK/ùî¿‘¤ý©eÿ=×ò5ÅõŒñ…ûVÂ!•yñ˜+iX>|ËpKṉ‚Aüô«{¦H®®ñ2¹Ë™ÝÛž=…5.´¨Ódf\ƒ´&GNÔß;G°`6à<¾‡×¥/Ú41äýÎ÷fòù#ßaR}¿NÝ»Ì;·giëŒg§\q@þÔ²ÿžëù?µ,¿çºþF‹Ùu;6‰Àœd©ƒPicÇÿ^‘Ð9®ÿÈ^¯ô¬ú`zgü·_ÃùU{1Üj޽V4#?F¤€cxvÑíw—›;7¼àqž•vö[+öÍøÇ^”ûmFKP[Ú-‘¹’6Á!B9ÍQÍ®ÇlÎ&‰þYš3´ ¨äòr9  vÚ„sØ›¶I"‹chž7Øèħõt"€'¢€ (¢€ (6ëýoçüÍgÞÿ­³ÿ¯„þ´€¸ßxýi)Q@Q@Q@SOù Ëÿ\Wùšäõßù Ïõþ•ŸT¦Ëuü?•C¦"É{©#}ÖHÁúa© 3dÔàUØu+‡ŒNçšèÆÝí V59Vˆ Ò‹Ln6i–‚_3Êùƒnfœçœ@£‚8Ÿ÷¦7ó7RÙ''ó ¾™háÇO,±S¬„n9<‚:št}µ¼ÆXÑ·’OÍ#0õ €OµO¶Ms°™Y·]ˆÎ ôÎ:)-4ë[u´‹Ê 0pIîOv?EýdÐEÑùŒˆ~â¤àx=~f?Z··ŠÚ2‘9%˜±'Ô“É  h Š( ŠÍºÿ[ùÿ3Y÷¿ëlÿëá){—'<ÔŸ'ûT€>Oö¨ù?Ú¦òµGÉþÕ'ûT|ŸíPòµGÉþÕ'ûT|ŸíP]£DfÃp3YÖrù÷Þn1æ[#cÓ$Ð1®ÿÈ^¯ô¬ú`zgü·_ÃùUk2VmXƒ‚"Bü© -}ŠÇì{š·ìÉbsŠŠ;Ù!Óì›^jüÓL2«Ó¨äýi·v$¬BÚÅÓJ‘ÄÖû¤“fÒ„˜~p¿7ÍÎA$téÞ¡:õæÐBAþ Ü”ò¸'o^¼uý(9ÖnRg‰ü€Ð¶Ò6g;ˆ!FxÆ3ü]j?í«Èía’O³fh–mÛHlùЊ¼××m5¤qÀ¨&ly’wKƒÇCYÑë×nòvç¡Ã¦”k“Éqyöu‚X-°e$—ôéÇÿ«ò$Ö.c¼†ÚÖá)2&I– …ùLsß…ZÓ5&»‰¼é"YKìP‹•àÜÈÇá@Oâ+˜-£!asä’Áø;öÈËd¯·¯5д—Ã0‰¤'# ÷äÐf·¨ÜA$¶ð²!03&ѽËm' ?(냚UÕnI Ik%¼rF* -Ô€}OéÈxõ{‡’ötžÛË^"G8 wX0#¹Ç"¬Ï«\ǧ%Äpß·8¼ž»Kd~'ñ  Zvò<ÑóX®NÜèHËcŽ>3Hx†ížUU·"52çÊ…fÛ€Çåê}zP­®\¥Ì°³[„}ݤŽz/ÍÇëQ隽ʴ02Å䪀Ìì7·qn¹Ç8éÛ­ ¹½´‚<×ó‘nNN6–uúgþ) ¸õ!ö›¿,4k*Æ×%ÜÎ@ ›°ü(_Þ]QÒ«G}4R¼éxòÁžeMÀ(¨?ðƒôÍI¤Ï}öu d2*#¾vä…àlÆ:ûÕT¹šÖþ;at"Xç_Þ\@ý×q‘ÿë ¦Âv¹³ŠgP¬Ã:TôQ@›uþ·óþf³ïÖÙÿ×ÂZ@^þ>¢™HŠ+K—R¼c(o'˜áóÈ-û°päçš©%õÇÛ\Gwe™ŠLäné‚sÍo‹ˆ¸E-¸'Þ#8ü¹¦£‘dMÈÁ—$d{SéQ@Íþ¢O÷Oò¬í/ýtõé09ÍwþBóý¥gÓÓ?åºþÊ¢Òöý»QÝ»cÎzc I%ƒ•Ò‡R3&1õÎ1]d+ÛGµfÐBŽ@¡_ª·FI±rNÑ“Ôâ‹ýÑéÒ˜ƒbä£#‘Å€ ©ÔPà~Tß-9ù““ÇzReˆQž 4**Œ*€=… 0Š1ÓŽ”Œ©U‡oü¨±ÛÃ*$HFÕè*J@Žð’>÷µ&ÔfÕÁ1Ö€-1‹Ž˜Å8¨+´€G¥ Uü©h3„Qž¼Pi¼— 2iW÷lÃ’1Î?ZIÚtšòØ)"çäNë@<‘'è½¾b)‘#ñå³/¦ +B„¢4js‚ ÍàVÙº0Or9 f–ÆXä†Ib*¤o]ØÁÏüGéVLhßyýE(à`Q@Q@·_ë?æk>÷ýmŸý|'õ¤™îbRG$ð Òªÿh/üû]ß– ûAçÚëþüµÚ ÿ>×_÷å¨þÐ_ùöºÿ¿-Uä{i'µµöðAàHÀâ€&‘isúài~ÞŸóíuÿ~ /ÛÐt¶ºÿ¿&íÿŸk¯ûòÔh/üû]ß–£ûAçÚëþüµ6KåhÙEµÖH#ýKT:j”¸E`U…¬`‚9€9½wþBóý¥gÓÓ?åºþÊ«Y‚fÕ€&$ÀZ’ÁÕ¬ÏË3¦à˜ÛVq¦Ø \yAz!áúqïN÷`ˆZ=FIÂnºPÒbf ã=ÝÙÅBbÖ šã"'Þÿ–»OLÇJ“RIÙ3pUm»‘÷ŽKúŒc¨ÌZœV‘ ÷LÏ´ªIb_ºär¿Qù·~ºˆ´kbF"ˆ0nLúÿ? ©åjïq(3Ι”8Uó0Ä~Lç{Л»}C{ÆŽí l®‡9/–)úaâ¾õZTÔšÚwœùä©lÉ 0ùs»Û§rͯb»§I¦^?td08às¸~UBfÔ7Ëö?4ªÜ¹FP[w# ò©Ïé@ú|Wk¦ ’fûS –˜nÚ}0þu¦.÷ZLŽC|ëP7NKÀðsŸÖ€3í¬õí|˜žæ6ŠÙÔß)— Ç·¥<‹»U®ŒwqDªéËÊ’©É\ò2­øÐÐ&©ý—/”û%ÃíóU™ÜãƒÉùyíÏÖ¢5%·̹˜ä•Úv`gï19ÎqÍG2ê’j,ˆnp.FÕ¼†ÏuÜN¨Ý¯¢¸¶Žå¯Lr ‘Űùváx Š e%šHË0fØ›ƒ>$á€Çò*ci=Üâ~×$‰#ñ1ãéò¨•Bö7&âÞæö)d‡yP«ôØ`´ž*k ;”Ô$xchXÉ+n–´Ä®1‚Üv'ŠeÆ5Ψä@QÄë œ&ÐH‰€?MßÎ+N»G·!Œ›49ýã·R Ð÷  —W“D“E Ž“Æ®ì[&FüðVº=/ÎòÍóBy‡Êýý¸ÐÊ(¢€ (6ëýoçüÍgÞÿ­³ÿ¯„¤ìœœð{L§÷[þúÿëRÊu¿ï¯þµOî·ýõÿÖ )ýÖÿ¾¿úÔe?ºß÷×ÿZ€ §÷[þúÿëQ”þëß_ýj2ŸÝoûëÿ­FSû­ÿ}õ¨Êu¿ï¯þµOî·ýõÿÖ »¢#6Öà÷¿úÕe)ž÷Í öÈÄz`sïü…çúÿJϦ¦Ëuü?•C¦8Ž÷RsÑR2&¤€£$zñŒH…õÎW‘ôÅt0\Fö‘Lβƒ¹Ž(I­ÆÚ{3D»³" ¿{,8úÑçEÇï“ó¾”Ä/›ËûÅùþï=~”‚xг Sjõ;†;rñÈç§=j‹Èm ’WpDi¼… œ}($¾‚?'-ÌÎGCϱíÅ;ívþlqyªZ@v`õÆ3Ïâ(âhÈÈ‘Î>ðëCKn˜)Ú[Øÿë Y±µÔäd`õ§Éà …/-ÞV‰&BêžÇ8þT³]A&ieUŒul怲ÆÌdRHÈöõ£Ì@Åw®áÔg‘@‘º‚N'¿¥ š”šº»6ÉöwÞ#và¨Y7m‚8Ï)nôYç>J˜¸•¦ÎrAqŒcß?…M•/Û$•ö@’ Bäœàt8@Ç@yô¨—Dt¾š|Ç }Ø2»çŒÓ\þ]h·š-ÌÖñÂ’F|¼áË9þùÀ9>Ý8ü*­U°˜Eå<¬£–?>=ËùPÍ OpwŸ&® 1± Õ3×iÏûÕ‹]%‡™o(Ù·hÃ+娓‚{®çÚ€#ÈÐÌ Êï$G†'o˜Än=:qß“Dú5Äíòmc F1+·—’áÇ'¯€-_é“Må¬nœÍ#nF^8<|ߥU>v¿‰ÝãkTÃù8;±í“ŸÄÐït‰.ÌP Ž8÷g Ç?›‘øTšf—5¥Ê¼‚d;£'t›Û?7§ã@ôPEPm×úßÏùšÏ½ÿ[gÿ_ H ˜±’–=U_·Iÿ>7ÿ>Ý'üøÜ~CühûtŸóãqùñ íÒÏÇä?Æ £¸pòé· Àc?äÐÿn“þ|n?!þ4}ºOùñ¸ü‡øÐöé?çÆãòãGÛ¤ÿŸÈn“þ|n?!þ4}ºOùñ¸ü‡øÐ^òF”Y\ ‚:ñ¨ôähîQeµŒ{æµßù Ïõþ•ŸLLÿ–ëø*ƒO.ëS“ÛÈ5$Gðì›ö¼|»‚ì^½׆ýÖɘöŒ(êqÆzãÛ½ *; Êäi­ÚËsq¾QÕó•!ƒ€ ¸Ï;ªGÖ,c•¢yJȯ³iFÉ<ôãž©ˆlzÍ·ÙÌÂHSÌ1Ѷóœtã¯JžmBÚ “q=`¹÷àf€#½“1ÊÒa¶b8Ù‰=p09ãž;T²ÞȨzLè¨Ã$Äxô ë-(ˆJÞa} l <öÇN>Æ®ù‰¿fõߌíÏ8  X·3Ãk,‹#”Þ±±ÇqÀ§Å«YK ™%&0‚MÛîžéê(–ºÅ½ÄP²£ÍÑ<¶'ëÓ§=zT“j¶PH‘¼ë—é·9Ç$tühÍ©Z¬nû؈Æ_į8ÁÎsÚ¡Ý'1DlGLõÇaÉôÙu›`¿ºbOš±åÑ•Oï1Œgµ/öżÐ³a,›Ñ°+ǃÏlÏN(ƒ\ˆ ýßï< þ^îwç>¹â«“ngC°H#æã¡$›åã¡õ  rjª4¶»Ž5wUÝå0HÎ ÓÐ㚯/ˆ.]í˜<2lß÷€ óUa@ ÚÓ›#4qÀÒoÚª’ïXóŒOáN²×#¸œÇ"”\:«ÜY—ã•ïë@ÔPEPEPMΙi5Ä’IfÉ>cëLM.Î9D„†B%Øàþ&o¼~´R¢€ (¢€ (¢€ ¦Ÿò—þ¸¯ó4Éë¿òŸëý+>¨Lÿ–ëø*­dPOªy® q‚ǶC @"^ÜHVÕ.í2ÃbŒ8'ô«71›K[9&"åÈÈ$m#N´'~£jÄ0é61LÓ‡ipÁUv“·~Qùš-ô«(.ã¸23F~PB^¤ ž½Í1 q¥ÚO„ÝHç 6©Ú¨Sß¿_zžkK7b”Àêߌ°#99Å1,m"‚8íîdˆÆåÑÆ \ŒÈ#§­,¶hí£œˆU¢ùXŸ•PƒÇ¹À ìôË;Kµ¹[‡gPT ðûÇ“Íhïµó|ß“ÌÆ7íç™  éö‘Íç-Ô‚]û· c¦0;žqŸzI4ûW‚8’îXÕ!X[n u^€ä}zc­/ö}§îÝHc·"axÈÆqǯ=óNšÃO’t•b**ˆ¸ Ž£ŽIéŠI,mdGêL»bprÝ3‚1ÓŒc=E‘a !q!±'Õ ƒÐÐbÒ­ü½—o"¬¬ñ¨À ›ý3Øg?…> >ÞÙ¡N Há™Jƒ´  t'©äТÃO‰ù„¾oãéôÏÍõ¨ÖÂ5…"”á#pñ©òÿ»Ï^ô$–6MböË)FpCLª»ÎNO$w5 Γcs¬—2‚F,¤ÛóxéÍZ»Ž+©b("¸ uÜFÐ"ßVƒJ³þK¹¼²ÊÍÛ†!ËŽqž§±  _´ÃýñGÚaþø í0ÿ|Qö˜¾(€ã5%PET“ï·ÖšiÇÎHÎ &åþâþfåþâþfËýÅüÍ0 ËýÅüÍ—û‹ùš7/÷ó4n_î/æhÜ¿Ü_Ìѹ¸¿™ rÿq3Fåþâþf€$#f®@'¿øÖm„5ÚÈÿyí‘Ö€9wþBóý¥gÓÓ?åºþʨF»î/b?vF…[éóR@g]5µ†¬ÑÛ@X\‘‰aŒsœšÔÔ5=°CqåçpÃp©‚s“ƒŠÎ2÷¹M$´¹Hk$¹ i)ö!ä;¶õ#Obinõ&PcTd‘%Q&vê?ƒZŒ‡Všæ[q±Q#õ™\¡V9޼{zµyzm¥@2²±õa€÷8 ØêFòc·dعrÇNXcü>•4×b;iåHܘAá®HôÏ_Â~|@$ï`8BëY“êÍmmlUóq”·ñ„;N= <¥0- Tr͈Ë:ÆÁó¼¯1Æ{u¦ Uî!•a€¤‘£7»:ã=;@ þ×’(ãŽKf{†Um¨KëÀÏcÚ®]Ý4zk\ħvÐʬ9ç}h·öœßl’³2°PÊ’0s“‘ŸjHõŸ3 -Ȉä†/ÎÐ@'ë–gÖ€=Qî|¹)"ŒH‡,§çV;GQêAã=:ÒXÆØx‹bR·'`Ý€xçß(–ú» 2Z3,›#Íò‚ÇòjHõ9®e€Á<Œ„»`äP–úªK+£C ˜2œàôéÇ^G½DúÉRT[1“v6à99`‘ÓÞ€$U †Wã\!v<ŒŒôøV]bHæ•ZÞW;÷lPNÅØ‡°=Ï|}hAªËšhC±gÀBI(¤å°ÇonzÒXŒaÚ’K²6 ’páNF8ëïE€uÖ¦é-²Å ¡$u Ï Ž Æ­QºÔ®¡„(—:Ë®ñ»ñÛ@v3´Ò²ÉI"p¬nàñØŠÝ¡QLЍççn_JŠY£‹fó·{\ޤö¤Ã'ÔS)Q@ut2XíïcÈeq¼g>Õ›ºñ!Ž+WÙµŸp‰7¨br cøpO\¥0%Τ…™LÌÛ²”c™ÇÐ. >7¿^?6@¡FÙWi,rlà¿­>×íë©lšWh—Œøa½ž™ÏÿªµiQ@Íþ¢O÷Oò¬í/ýtõé09ÍwþBóý¥gÓÓ?åºþÊ«XÛ­Åæ ŒÌ¼DC/PpԳϥý¯Ï‘,™ü±] Ñá‘ýå'xv5Šn撺ъ4XVBá#ÜHbqÜsOm)\±`„¶ÜäuÁÈü]ŒÈ×CA @nÝÓ½#è‘Èà¶Ò 7ÉÛ,rO×4ø4xí³ä,iž^Iþ§ó©~ÂøÆå¢ÀC‹_q#0nýGJHôd¥`T™IÝŸCÛéþ4>·„Hù„“ŸsœS†ƒnªE’8=èÒh°Ë÷Ò3À;ŸÌÓ_F‘ßæºcüñÚ»qé÷súÑ`.Ä™R6'$zúèþÆ‹û‘wíêA?È~TÆÐâ1MÍf^¿…'ö'™dmÅ÷7\“šsèVò*«Å ¡@Ç@;S†P$aU·(¡õ ;wg…cF~¤w¦… qàǯZ“û%mXö1É\pi²h±Hû#fÝ»8êpôXÉ¡A*²¼q°c¸Œ´Ø4 ÜUP–räŸ]Û¿Cü¨ËéÅñ¼¡ÚC ö"«iEI<Æ$îÆF¯æhŶ˜¶À,AAÎhPE0 (]kèágÓ–'™rvHÌ2z`Žj©ûO—`o ~y¸BÂ0BnM /\K,hÂ|Ö'¡`1U|ûïùò_ûú(óï¿çÉïè£Ï¾ÿŸ%ÿ¿¢G’òE*ö²ž¡¤Sck˜³åiÑ&zí þ”ÿ>ûþ|—þþŠ<ûïùò_ûú(ÐϾÿŸ%ÿ¿¢>ûþ|—þþŠ4óï¿çÉïè£Ï¾ÿŸ%ÿ¿¢G–ù‘—ìj21þ´Tv´WkŒ2Z¢Ÿ¨ g]ÿ¼ÿ_éYôÀô¶`²†bdžÜU8.ìâk–ûbp¡Nùpõ÷¤ßnÓ|Ÿ/̃qœ ÿ:A©AœpC¨FŒ€ ä$}3M¶Á+ ƒPHP§ö¢¸ÜÄPHç{sN›QŠKˆe]IPGÕo\óH #ÕâU=üNX§h^j8õ(ã £RŒªÇ·AçûÙÍXMfØ( u^õª÷š”W(ɤ+!S° 䎠çŠ`>=V5+¿Q‰±×å==þ¿D5Öy¤¢bEÀR „=ˆæ^³lñ q3hëëŒÒ®¯P ôDñÎn½ûÐCTTN,‡É>Zò¾ZQª(h‰Ôâ!GÎ6/Ïúñ@ µ¿‚Õ"‰uÌQÆ)Q’}sšŽÞâÎÞ=‰¨œy‹'-éÔuè­"ËcçI,šƒ»1%|À&I=`õÇ>‚¥±½³²R©}æ)UI!nFrÙ'¿ÜS¤´†`éªI®»ZRÀî$÷=G})ö³Ù[ÃPi&9Ä’JN3þÎì~”bÎÜGömHGå¸dÎB½3èkUu«P ˜‰Ç'ŽZ?¶­?çâ/Ïÿ¯GöÕ§üüEùÿõèþÚ´ÿŸˆ¿?þ½ÛVŸóñçÿ× ûjÓþ~"üÿúômZÏÄ_Ÿÿ^€í«Oùø‹óÿëÑýµiÿ?~ýz?¶­?çâ/Ïÿ¯GöÕ§üüEùÿõèþÚ´ÿŸˆ¿?þ½ÛVŸóñçÿ×  Û‰âšfjá<(UÀ¨×ìÆhž][̸p¥TdŠ@Z7Ö„“öˆÿï¡GÛ­çâ/ûèQ`·ZÿÏÄ_÷УíÖ¿óñýô(°Û­çâ/ûèQöë_ùø‹þúXíÖ¿óñýô(ûu¯üüEÿ} ,öë_ùø‹þú}º×þ~"ÿ¾…ûu¯üüEÿ} >Ýkÿ?ßB‹}º×þ~"ÿ¾…Ao,rê²´N®<•åN{šåµßù Ïõþ•ŸLH¹dPÍ)PFâÝÇz‚$µ™İȇ£(T€Ñö6XˆïáGõ†ÝÔ2Åd¢€†Ýqº8†NTu¥ûÏüñþù}žùãýò(ûÏüñþù}žùãýò(ûÏüñþù}žùãýò(ûÏüñþù}žùãýò(ûÏüñþù}žùãýò(ûOVü¨ù=[ò£äõoÊ€“Õ¿*ƒÏSxÐ(?*É÷4Æk¿òŸëý+>˜…ªÇœÿõËúTó_Ki ‚ P’"†r7Ð9ï×;Ò@UµÕ¯–É ˆ&híRig99ǯÿ*‘µIßV™mÞ‚`·¨Ã œóô¦©«Íýš÷gi™e‘B¨#¶ dýFG½6^äÄžlp+³˜þøÀéó1Î:õǯI®\ß³CX‘ñ¿a¸)È žýÀéLMzæG‰·ŒÉ¹ó¤d/^´¦·uæíX7+È]·¸b6Œ‘Óü([ûˆ/¦¹«#+¿’äüÁ\¨ ÏR=úÐ?V¹”©uŒÃç,=÷ä¨9ÏNþ•¹@Q@Q@Q@Q@Q@Q@Q@Ù¿Õ7Ò³üµúÿZLëž²¿¼Þ²´ü|ϸzð>œýhÓjÒÆÙ1£&NUs¹°SŸ®r:t¤}VáT–…c €ìÀ§œ¹Éìxìh[=JI§”Mц,20Øç’yú ¿çE»nõÎí˜Ïñc8ü¹¤•M?ä//ýq_æh“×ä/?×úV}PyÅ»nôÆ}8«QË$@¢3D¡UŠò)åž%ÎØÐnë…ëMnh‚ £'8¢à=ncTب1 qH³Â«µbŒ.1€¼cÒ‹€‚hD…Ä1ï=[o&£ZË,r<³F\Ž}¿ .¦xK1FYNAÛÈ5FÚ(âE…1 …#%@éÉ¢àH.#^‘ ç<ôÿ¶AúÑp¶AúÑöÁè?Z.öÁè?Z>Ø=ëEÀ>Ø=ëGÛ ýh¸Û ýhû`ô­û`ô­lƒõ¢àlƒõ£íƒÐ~´\íƒÐ~´}°zÖ‹€}°zÖ¶AúÑp¶AúÑöÁè?Z.öÁè?Z>Ø=ëEÀ>Ø=ëGÛ ýh¸Û ýhû`ô­û`ô­lƒõ¢àlƒõ£íƒÐ~´\íƒÐ~´}°zÖ‹€vJœ ÕîRv`çqà*–?¥UþÒ‹þy\ß–ÿ bÞZ§Ý¶•rsŹëùP%¹µ•L7+¿ŠDêOâ9¦C%œ,[˼rNx®ø>¼÷  ¾Ûl ³Í–û߸n~¼RÿhAœù3ç9ÿPÝ*_í(ç•Çýùoð¦ZÉçêRÊ©"§”£.…yÉõ _]ÿ¼ÿ_éYôÀô©~ÿà?•6¤Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Šáõßù Ïõþ•ŸT¥K÷ÿü©µ PEPEPEPEPEPEPEPEPEPEPEPEP®ÿÈ^¯ô¬ú =*_¿øåM©¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8}wþBóý¥gÕéRýÿÀ*mHQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Ãë¿òŸëý+>¨J—ïþùSj@( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ]ÿ¼ÿ_éYõ@zLª çsŽÝ#ÓÜS6ùé/æ¿áR°ÏI5ÿ 6ùé/æ¿á@Áÿ=%ü×ü(Ø?礿šÿ…üô—ó_ð£`ÿž’þkþlóÒ_̓þzKù¯øP°ÏI5ÿ 6ùé/æ¿á@Áÿ=%ü×ü(Ø?礿šÿ…üô—ó_ð£`ÿž’þkþlóÒ_̓þzKù¯øP°ÏI5ÿ 6ùé/æ¿á@Áÿ=%ü×ü(Ø?礿šÿ…üô—ó_ð£`ÿž’þkþlóÒ_̓þzKù¯øP°ÏI5ÿ 6ùé/æ¿á@Áÿ=%ü×ü(Ø?礿šÿ…üô—ó_ð£`ÿž’þkþlóÒ_̓þzKù¯øP°ÏI5ÿ 6ùé/æ¿á@Áÿ=%ü×ü(Ø?礿šÿ…üô—ó_ð£`ÿž’þkþlóÒ_̓þzKù¯øP°ÏI5ÿ 6ùé/æ¿á@Áÿ=%ü×ü(Ø?礿šÿ…üô—ó_ð£`ÿž’þkþlóÒ_̓þzKù¯øP°ÏI5ÿ 6ùé/æ¿á@N»ÿ!yþ¿Ò³ê€ô©~ÿà?•6¤Š( Š( Š( Š( l¸ïFÕþúþF€ «ýõüWûëù`Wûëù6¯÷×ò4m_ï¯ähÚ¿óÑ#@Àé<+*¸ ÜŒƒRm_ï¯ähÚ¿ß_Èѵ¾¿‘ jÿ}#FÕþúþF€ «ýõü! &EÀö4JmA"´Šác’A+E\d“õ5öŒÿô »ÿÇ?øª?´gÿ eßþ9ÿÅQý£?ý.ÿñÏþ*öŒÿô »ÿÇ?øª?´gÿ eßþ9ÿÅPý£?ý.ÿñÏþ*íÿèwÿŽñTè5-ÚÛÉi<È\6àB}kC`Ë‘žôÀ6¯÷×ò4m_ï¯ähÚ¿ß_Èѵ¾¿‘ jÿ}#FÕþúþF€‚ª–2.ÉàÔPʳB’®vº†÷¤®ÿÈ^¯ô¬ú =*_¿øåM©¢€ (¢€ (¢€ (¢€ (ÏÑ?Ýþ¦›@ wÛŒ’p9Å#— нNsžÞäS¾v6ü¹g#8Î3Šr³y¥ƒ€qž\óùQ`$¤= +i¿ò·ÿwúšµM ’23ôÚÓ¹ÏøRù‡æÄlUsócŽ ÈÌÌxBƒ×žsþo"@¤uéƒÏå@¦Éþ­¾†ïÿ ½3þ»GýjÙ6ðÛù×ç2m'i'%ˆýé`[[²äD„ØuÇò¬ë‹”Žöx¾ÏȆKlrO<øšp½³ 7ÙÊåö«2ðÇxBi‚öÛ͉£µ&Ý£w,®¯L1÷  !mnʉ0GvÆ?•)µ€õ…?/óéH øñý±mŒcÊ›¦?¾=+bN£ýÑü©€Ú«q,¦á-àe™ —eÜ0ÆG­ +\êËi)‰ãiÞ €[Ç üêDÔYæ0‹sæ¡ýàÞ0£ƒœ÷àŠ`AoªµÝŲÇ‘#¿%Ô€ÊQˆê=»Vµ #›ýDŸîŸåQißò¶ÿ®Kü¨×ä/?×úV}P•/ßüò¦Ô€Q@Q@Q@Q@÷–Ñ2¤“Ƭ[‘QhYÿÏÌ_÷Õ;hYãi‹ï k^X¶Ðnc}PýºÃ9óâ'Éaéå@¾±x{½éF /ö…ŸüüÅÿ}Pu <ô˜¿ïª,¶±Ø@¯q°^AosSÿhYÿÏÌ_÷Õ¯yc `×Qá°sÿ]8ßXdŸ>ž¹a@/ìAÈžÞ¥…’çzÃ&‹0í ?ùù‹þú¤}BÌÆÀ\ÅÐÿ:gXô5Ý‚ªË$žZ™/!ym`Žky3t„l“œoÏLZµ¬]ÚèÒ¡À±ÌOîöí= 3Ôv¬é¯¥ŸÊ»ÓÄSðá¤%uíÅ)“N)yÖØË¯úOB_w§µ$o§¦óçÛ‘Y]Ï$63Ûý‘@×U·U '´à`~ÿÛéJuk~ÓÚßÿþµ½¼ñM¬Ûˆ¦ŽR"”»`kR{ÛXäØ÷«2 tâ€"þгÿŸ˜¿ïªŽ{:áBËÏüñþù}žùãýò)}žùãýò(û<óÆ?ûäP’(Ðå#U> bƒd䢓ô Êþy§ýò(ò£ÿžiÿ|Š<¨ÿçšß"*?ùæŸ÷È Êþy§ýò(ò£ÿžiÿ|Š<¨ÿçšß"œ` â5ßù Ïõþ•ŸTûø†ø¹ÿUÿ|Óá ¾ÿ¦÷Íÿ„‚ûþ™ÿß4ÂA}ÿLÿïš,ÿ ÷ý3ÿ¾hÿ„‚ûþ™ÿß4Xþ ïúgÿ|Ñÿ ÷ý3ÿ¾h°ü$ßôÏþù£þ ïúgÿ|Ñ`øH/¿éŸýóGü$ßôÏþù¢Àð_Ó?ûæøH/¿éŸýóE€?á ¾ÿ¦÷Íð_Ó?ûæ‹ÂA}ÿLÿïš?á ¾ÿ¦÷Íÿ„‚ûþ™ÿß4ÂA}ÿLÿïš,ÿ ÷ý3ÿ¾hÿ„‚ûþ™ÿß4Xþ ïúgÿ|Ñÿ ÷ý3ÿ¾h°ü$ßôÏþù£þ ïúgÿ|Ñ`øH/¿éŸýóGü$ßôÏþù¢Àð_Ó?ûæøH/¿éŸýóE€?á ¾ÿ¦÷Íð_Ó?ûæ‹ÂA}ÿLÿïš?á ¾ÿ¦÷Íÿ„‚ûþ™ÿß4ÂA}ÿLÿïš,ÿ ÷ý3ÿ¾hÿ„‚ûþ™ÿß4Xþ ïúgÿ|Ñÿ ÷ý3ÿ¾h°ü$ßôÏþù£þ ïúgÿ|Ñ`øH/¿éŸýóGü$ßôÏþù¢Àð_Ó?ûæøH/¿éŸýóE€?á ¾ÿ¦÷Íð_Ó?ûæ‹ÂA}ÿLÿïš?á ¾ÿ¦÷Íÿ„‚ûþ™ÿß4ÂA}ÿLÿïš,MäïstòÉÍ×ÿÙlibstruts1.2-java-1.2.9/doc/images/how-to/eclipse/developing-eclipse-style13.jpg0000644000175000017500000011470110404045210030113 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„   (1#%(;4>=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀU¤!ÿÚ ?éo-mî]~ÑRíQ1cëY͆³+(à¦ÅÈ¡JKDÅdK–—p¬ÑYZ°V*O’½GáReéÿóákÿ~Wü)óϸr®Ä7š=ª«\[YDàFOåA¶Ò¯Ú­¡‡³,JAç”sϸr®Ãâ²ÒæÏ•khøëˆ”ãô§ÿfiÿóãmÿ~—ü(çŸpå]ˆ^ ;…à²Y[¢×'>Õ?öm‡üù[ߥÿ 9åÜ,ƒû6Ãþ|­¿ïÒÿ…Ù¶óåmÿ~—ü(ç—p²ìÛùò·ÿ¿KþŶ—m™qoigš54s˸YŠËN–5x­mY ¬kƒM[m9çxÎÈ>lB0=³ŒgqïG<»…‘'öuüùÛÿߥÿ Hì´ùvÿ÷é—<»…‘‡JÌ€Ci˜ˆ|‹ò“Лû>Ëþ|íÿïÒÿ…>yw !>Çb$ ökpì Ë\1Ÿæ)~Ágÿ>ß±G<»…Õ³°“vÛkfÚvœF¼JwØ,ÿçÒûö(ç—p²cd “knäŸ-j+xô» ÆÞ+YBõÚŠqG<»…‘7Ø,ÿçÒûö(ûŸüúAÿ~Å.yw !ÛØÌ…â¶„¨f_õ@r ·¨§ý†Óþ}`ÿ¿bŽyw "])n~ÎÉh&?ò̪çò©þÃgÿ>°ß±Ož]ÂÈAid\ ·ƒr€HØ8§ò¡­,Ñ 5¼Td’ƒKž]ÕvlìÙA[h# „Ód¶²†6’H-Ñe˜  9åÜ9Wa¶ñé×(^Þ+iª¦¥û¯üûCÿ| 9åÜ9W`û¯üûCÿ| k[Y#"´)s…'ãðÍòî«°Æ]8*±Km¬HjòGZ—ìvßóïýð(ç—påC#†ÎI%E‚"Ñ0VýØààäE?ì–ßóïýð(ç—p²²[ϼ_÷À¤k{4*±Ú¹AÉôý(ç—på]mí™VIC†ÿ")±Åg#H© DÆÛ÷cƒ€‘ùåÜ,‰>Ëoÿ>ñß²ÛÿÏ¿ïKž]ÕvilzÛÅÿ| O²[ϼ_÷À£ž]Õv-K÷Çû«ü…ay[d¿oµ¼nÒ1Hƒ¨ òŒqŒÒHZ_€7ã±]ŠIßž§‘í×"ºUÎÑž¸æ†f¶v5œ…åDIN拇ÈýT»ñKª\L¬#•ÎæÝŽ?:ŸF¶–‡{˜åódQ†$‘€ÁíšÙ  [©„WÒ%¤’G30.­ã““ßüª8£º¢‘#¸ Ó:±$» ä€z§C ìÒ]̾|lcs¹ÀÜYñ‘ô"›u’$?f[¸ ÷©Wf/òàõÎ1žø  Ëpëo’á@bz“ŽzU]N¦Âµ–pŶîÚ0yÅ 3®-nÄ1FÆPªò4Æ5'{’ 9nüSá´¸ŠÞöGIâFE,IÉ_-ÆrOJ`GgÀeiu$ ÄFe ñ‚Fs޽I¤¶‰RâÙ3¤lþzDìIoá#8ëÓŠ»¤[Ý#Í%ëHdùß/Ü\> þU©Hjö3]:ß-Æ×MÀ¹RðÁ©’ Ù¯¤ÚÒÅæ#1á¶+‚ üÙäuéŽ)€³ÇzB\?š«"´“ b6.øþ_c±[ñÏ­VýìÖÓ U¸‰˜ÆÃ{°;W®qœÐ¢ÖèZËòΓÉ"¼¬9\r®}1ZúbI’,¬ìA8Þ0qž8Éýh[¤Gµ•%Ft*C*Œ’=c\%ìÑ€­uö`ü—OÞaƒŒâ„7OsÛ+Êë,{0{°Ï;¹Àã=sVb¶–;K?´‹©P¡3*³ßòíès€7P¶v’ÛÍŠ’)’æc.X‘°—+ÇAü=+^òC¿Qº\¤P3ÆÛ2Û@<ñÈô¨£¶–;;?´-Ô¨c&UVbÞgË·¡Î )ÐÞ¼…Ir#„ÜlËüÛXG}½*qm;#Gp·»C¶äp~ö=:æ€4ôÔXì£EIhÁg9ïÖ›«£I¤^" ³BÀÂäÈ'vó„ò—ËC¹ò0^OÖ£X.ne»™’å@Ghf\6xã4ÀÝ‹w”›þöÑŸ­TÕ¾[e™,¸tÉÁ> {‘‘øÒ%a•Qâ +D¹‹cr]±¸ü{þú©~Ëw¼F!0’@Þ~\’Fáêx8ÏJ`2+r³Ìßf»m!;2ÛËm@\㇩ Q´ŒÎè«#~ûUe»1ú°4³mEmr6çD Íê@ëU5hüŵýá‰VpK‚Qµ½i“-¼íq8Šæi`óK3'ÎÌvFü¤qÊSG~Ñܥ˻£2ì$e¶Æ7§sLŠÜH-âÈo>øæ¤¤E:mûÆÐ§å^­ŽÂ«5ª3ïkkrýw3ü©.%þì÷ßÿZÞÿv?ûïÿ­@ ’*âXap9Ã6¥ÄÑ.Øâ…Ñ[ùPñ/÷cÿ¾ÿúÔb_îÇÿ}ÿõ¨&µG}ïmnÏýâA?ʥĿÝþûÿëP‰»ý÷ÿÖ£ÿv?ûïÿ­@%þì÷ßÿZŒKýØÿï¿þµ—û±ÿßýjCæ±ÿßýj_Þà©ÈÏßÿëTqÁåc‚'©RJ“ÿv?ûïÿ­F%þì÷ßÿZ€!{Dv,ö¶ìÇ©8$þ•(€‘ãýÿþµ ®ÊU£Œ© ¿ô¤DxÔ*G¨è`Ò€‰»ý÷ÿÖ£ÿv?ûïÿ­@ ûÐ@Û$ó÷ü©{ýØÿï¿þµE%²ÊÛ¤¶·võb þU €‘ÿßýj\KýØÿï¿þµ'ïrØòÛÿëPr[,ºKkwoV ŸåRb_îÇÿ}ÿõ¨ 'Æ2r~~¿¥.%þì÷ßÿZ€Þÿv?ûïÿ­HË#)VŽ2¤`‚üÒ€#ŽÙbmÑÛ[£z©ÿ*—ÿv?ûïÿ­@ﺟ÷ßÿZ™$&U ,0¸8fÏô -¢#K[eaÐŒ?J›ÿv?ûïÿ­@%þì÷ßÿZŒKýØÿï¿þµ—û±ÿßýjd‘™~I"…Ç\3g§á@ N|¨ =v3úSöÉ»vÈóŒgÿZ€ÿv?ûïÿ­F%þì÷ßÿZ€ùÝ£Cÿm?úÔ™›þy§ýüÿëP‡á˜ùçÿ²ÕhØ%ª¹èùPmư¬ƒìÇ}åWe½‰Ï>p—Éæ#ºì?4LNänàóÒ‹¡E üµÿ|è"˜ìþx@؇¿øS%ó2²sÜ •QIêE !|ÆÝ.ÅíÓÖ»3†9îŸlŸð¦ÕZI³ym ÿCH b“zàãpà€iÏ÷é@ !?eƒÝ“ÿA¦ÜJaŒ2„$wÚãL Û{ë³wЉ2Ò)ÜI$¯Ô8þ•£op· ¹U—Ù‡õè j)Ÿªjðé›|èæmÊXuêG>ÕWAÕþÝh­4Ë$Ï!pʽ·ßZvjŠ@1þôõÑ?˜¥Ÿ´F;yGùÓ“L"Sò³ ½€ïYqk2´¼Â @òW¨üè°°Ê“IJÆr¬2)ßòÝ>ü©þ•?±Ê¡žê8w†'ä]ÎF>QëL V:˜’u·™€v¡“?,ÈpsìØíZ€`é@o/ÑTÇ °›vÕÂ2=N:})4Ûõ¾VV)ã?½ˆžAã²q@É 'VeÞ£(EšÒ)$U<åp¯ì­ v71^@³Bû“¦;P}êYæŽÞ#$­µ½e\jÏ´N–Ì0ÛЫ/ûCÔzÖ´L« 2è~”Ù¥t(±ÂÒ³0½†@Ïëþ8#=/§·¸H¯£h–le`B–#;N@õã§àx  @01ÏãMë×ýÆþ”¹&æãžÿ²Šu )Ü_D‰),~XÉfÉìþ.}*{i[xÞXÌnÊ !ìi-€’N­ÿ\¿öZª¿ñä?ëŸô¦˜ot¡ ’ßpQž\V|PÛMªÜ^Ày`(p®0#¾(¸¥‰&‰¢•C£Œ2‘Á[MÓmt¸ 6‘íRwNIúš@YþZÿ¿ÿ²ŠŠ|$2~§?Θ3'÷ŠÀc¹ÿ·úµú @DñHrŒr~ñšŽU73¾r8êxÉÿ`Ylí8ëŽ* ò €ÈÄŽ¹þ½IÓ7îÕ€œ¶¯Ö§¸ßJlŸñëûÉÿ ÓœŒ îr¾¾Ô“½´¬cRêð“ž8Îxôü*Þ›o-¼½f Ä“ …ÉÏZlÔ´Û]RÜCwå ƒ‚±«1E,Q HÐaTt¤ r ­NÒKH­˜)a‰KÓ¯}jM"²º¹µ §fß,•¶ã¦{âŸ@5UÔ«TŒzU4í*ÏK H¶y¹‰9?O ¤§ûÑÿ×DÿÐ…ÇÌõËúÓ­ÝÒZÊÛÆ|Èö ôëÎk!-mÎc†y˜ðŠG'ñÀÛ°¶6v‹ 9r2~™9ÅOÿ-ÓèßʤÿÇÔÿQü«7S{¯³\[[V•þbb,¬…6‘89çð¦PÙ-ÚEo2Kåà ª»)Rp÷àÖÀzPÀæï#•.À?l9™¾eN¼œUý3OSù¢â'}¥¾VÚIùNÈïÍh]ÆÒÚË3)±®ä*¬rH“ÄgrHý1BFÃOKSç|Âi 9áˆï_z‹^¶–âÂJ°b£¸  ©!7·–‹læO.5IVq×9º ;8¬¢1@!bÁIÈ_aè(`HgkYÄÉJV6ùòFåÎ=ñšÍ´„]ØÅis ãÖ@Ý73ä¨ý(è”1ˆaHÃ3Ç$ýM/ü·_÷ùŠ?åêçþº좦Kqp¬®HB0H$Ò€3$²’KØ‘œKWß #.[Ó=…hPÀ(¤rŒä(*Qœ’;JREPD{ü)€»eþô_¯øR4ç Êp~÷ >žô¸—ûÑ~¿áF%þô_¯øP”g.NO_ð¥Ä¿Þ‹õÿ 1/÷¢ýÂŒKýè¿_ð ÿz/×ü(Ŀދõÿ 1/÷¢ýÂŒKýè¿_ð ÿz/×ü) ÊA¢ý€Ää&Z3°9nÃìKýè¿_ð  $ƒ'¯^J\Kýè¿_ð ÿz/×ü(Ŀދõÿ 1/÷¢ýÂŒKýè¿_ð ÿz/×ü(Ŀދõÿ B’’§t_+ïØçÒE rùqêÔìKýè¿_ð£ÿz/×ü(Ŀދõÿ M’ï º.ûþ‹ˆI IÉÉcNĿދõÿ 1/÷¢ýÂŒKýè¿_ð ÿz/×ü(Ŀދõÿ 1/÷¢ýÂŒKýè¿_ð ÿz/×ü(Ŀދõÿ 1/÷¢ýÂŒKýè¿_ð I ”"ÀàtÜ þ”äãP©äªŽ€då@ ‰½ëþ›%Þt\;÷Ç·µ"E"gkGÉÉÉcšv%þô_¯øP‰½ëþb_ïEúÿ…›ÖͿŒMëýôßá@Îpsèƒù Ë]Qبû,ƒrîÒ€,E# Y›;ÐŒl§ÉÅ­Ñw7þ€´ÌKªjRj·–ÖDë ®ÛÈPØõ©a¸ÖåŒ:Ù+)èBgú×[§M+³%)6j7öò¸‚8ØŒà¯ÿ^œš¤çH¿ï“þ4*PjèNrDé)ÿ–qþGüjtºsœÇäiû‹ÚH°²ò3~µ:l=b_Ö§ÙD|ò¶?ùä¿­cÿžKúÔºq›$óÉZ_.?ùä¿­K‚+™€Ž,ÿª_ÖåEÿ<—õ¨i 6T_óÉZ_*/ùä¿­K(O*/ùä¿­T_óÉZ@T_óÉZ<¨¿ç’þ´yQÏ%ýhò¢ÿžKúÐåEÿ<—õ£Ê‹þy/ë@ åż/”¼‚{ö¥ò¢ÿžKúÐåEÿ<—õ£Ê‹þy/ë@•üò_Ö¢šKK|yª‹žh_*/ùä¿­T_óÉZ<¨¿ç’þ´yQÏ%ýhò¢ÿžKúÑåEÿ<—õ Ê‹þy/ëG•üò_Ö€*/ùä¿­S…Ù¬ä Nà}3@¾Ï÷SGÙâþïêi}ž/îþ¦³ÅýßÔÐöx¿»úš>Ï÷S@Ùâþïêhû<_ÝýMg‹û¿©£ìñÿwõ45Ç÷òZÞö/6-úŒ1í€/ËŽ:psži€:ÉwtÉ0™K 8Ç<{S¥ÿ[¯«è @º;ëšÏ—$ˆTÊÃf2pý9®›MÔÆk}-víY<½²¬Ç\œw­±´R&”ovgxÃ#VOúæ(¹†¹x“•—(mÚƒ;²q×§¯CZÃH£9nÅkH!A.æ’6ÆÐ§½ÈÿgÐU¹-”Ï»?!±FW3&Ȱ–±¤‘‚Å–Fvöà{{Ô¢Hó¿-´>¸ÿZžfÇdJÛ4Èämçó£ËQÉÝ»½*[hhvÅ‚IÀçßãG’¸_˜îr1íÀÿ‹•a|¸ö– x¿ýUIBÑPÊDr1(àâ¨ÃùjI`Žý~´€±P4‡s¯™àãž´€tGiÙÀ¾•-WÜþr®ÖÁ-ÅL2íL¯_÷úS.@6Òdg Oâ)ž­‹a$€˜œ9cótéô«Ör™­cvêE6]Îöê% ¾!÷ÀûÃÜzý*¤ìuW³#pR7*@8Áã¨ã§µiÕ{·(nÚ¬p[¥ #³•ÚicÜYóϦjå025{ûû#–À8$ƒéÖ¯XµÓÛ+Þ$i+sµ3Ç×Þ›JÀY¬KÝJâÖúKU–6Y"V[g›öÏãÅH*  ‹0IïT-ÿãÖ_úè?˜¦€( Š( ŠtÇ ü«Â‚OAQnÿ¦2ÿߦÿ `h¦ÿ¿Mþ¿ñëuõoýhޱÙkš«JŽË#ʃ`õjÖ¾ñ$³#[¨3—€çœóßv®©ÒrØÉKKÌæB§-Æp½”{U˜ä0ɽ·çvìóŸ\ÕÂ<±QfeÔ»¸23È_îä¹Î=*x¥‘X°wŽwrqUh†¥ø.åG,X³6>fcÆ?çR$„€¥ŽÑÈâ§•ì˜HÁv‡8ôÍ*JË­×Þ¡¤4Ø¢FÜóœç9¤,IÎîùÎjlЏã#1Ë99ë“Fáê?:Í”…Ü=E‡¨¨e¡Ò8Å"E Ö¤dzŠC´‚29 EHÔ*ãÞ‘ê(2ˆÀ Ó S”*ô#·À8óCd`)Ê‘ê)Mì"r› AÈ@ÃéÆjÌJ#‰Sp;F8¦È©"cÁ÷ª–Ö_c¸- †ŽOõúƒÎÀüÇãë ¹¢šáJ¸VSÔE 4Ž$Ù¢(죟‘ê(ÈõdzŠ2=EEä@Eò£Û)%ÆÑ†>§Ö€$PˆWjªŒ8U oøõ—þºQL )Q@Q@· æn?¨¼ÐQÕ‘›•1š’ —þ=n¾­ÿ -h\Çmyke…‰ £}~´ÛDµ”"}Ž aÕ¶© =j€¯q"}½ì¡Ó:¨a#"íaß´"·Œ‹ËHGÏ·ÌD\‚A#· ÄVjMÕäK’YÁom¡ÛËwa£·C!tÈQœÒOu¦Ånì"·3LËQÈÛžµ´íÌì$Içi‰l&™-Ðpä FqÒ£»¼ÒmP³%»mtV  íÜW“íó©üj@œ>˜fHBÛù’(e]ƒzv¥Ÿû6ÙÑ&KtiÐk;í"îdT·F—€Œƒ9àcÿ:îïJµ·†vŽI¶•!*Ä ßO˜~t4m¦I8Ý¥+¸(Aœ~Ucìv¿óíýð(û¯üûCÿ| >Çkÿ>Ðÿ߀±ÚÿÏ´?÷À£ìv¿óíýð(û¯üûCÿ| >Çkÿ>Ðÿ߀±ÚÿÏ´?÷À£ìv¿óíýð(û¯üûCÿ| >Çkÿ>Ðÿ߀±ÚÿÏ´?÷À£ìv¿óíýð(û¯üûCÿ| >Çkÿ>Ðÿ߀±ÚÿÏ´?÷À£ìv¿óíýð(û¯üûCÿ| >Çkÿ>Ðÿ߀±ÚÿÏ´?÷À£ìv¿óíýð(û¯üûCÿ| >Çkÿ>Ðÿ߀±ÚÿÏ´?÷À¬û˜­¡%Œ…$•éÉ  Wmnúd³A$ÉWUýEVÓ¿äÿ_æ)«E (¢€ (¢€zq“ÿ<ÇòV|^Hbˆ,­’ÊêÙÙÏ^ 4‹;+*OFìp= ,¿ñëuõoýhþ§hnxh¼ÈÌl¬í#súTZfž¶ñÅ‹lIPK’XúÓ+VÄz´Û‚)<’ÒÜHä}=ýk&;W»¸M°\Gærfv!G¹æª'3s5­Éµ6š3ZÆd™–"¹<³ÿ×5‘/‡n§Ž%ybÊ ˜±eù6í¦9¤÷2,ɢΰÇ2ÆÐGÈŠBÀdõ9ñÛêi,´µÓš$fmðH¯·‚cDøÊθѮ.o¢žY"e,ŒrÙªŒã¯5,ÚA[ˆÈ­º§ÞpÌ_Éñƒï@ e¥Io=£HñºZG$qáy!¶àŸ”þuQt;±öe3A²Ê%Ž[k!¿ïœzÐÛk ˆõ6¹gŽ4a—H‰Ä€2séíZTQ@Q@Q@Q@Q@Q@szëi÷ªöw7[Qðzž gFºnŸ¥OmitYYNÕw݃íVtïùªÿ1H Z)Q@Q@é†XýÕþB«0š¼Ëhã9]¤·úSÔ×<©ª6ã‡$ô>Õ4¿ñëuõoýh^y¤¬1Ʋå±Àô÷¤·–A ‚X‚™6sÛÐSÝÌÒjmd¶ˆ¸Pë3wøþtï·On›.#óln,ʸ<•ž@zûT_÷ª-î>†/‰¾×…ôØÑ¤KŸÝ© ß1m¼Ž¿ãýk–0jŸg..òÂAÁp§9`îç¯Jì‚„®Úêe&ÓЊOí…‘"y&ß$žPS'V=ºð~oÖ¥š-U%E[¦6%—&P ¹9Éùyr9ÆsZ(Ó["/"¬w:”׸•¤ç÷œ¹9Î1Éæ¥'XWÚ%˜@ÊÉ‘êAéÇ^œQìé®Í'ÔH?µ¦¼Hûœ"…˜œ€232“ÇJx‹Z ˆ²ÊI`Šp}èzpzdb‡N•öi’$:§“.éæÞ¡|°’†VÉÁä8ý*ÿ†Zý”ÛKð-mà„.qr3ž½ (êìÂêà‘ È ÈûÜéÓ8çŽõ‚t+ûÛÜÃf-í¤bD®ÊB¯\àþÊ–¬}¤ÔTƒi4Í[®›¡ÙÃl&Û  -ö¹êIϯ~‡è+•k©šUΛ(ʲ Sµ‹>l.}€®šrŠNîÆrNú!–WÅ4m6Ÿq/—qçÆ¶į*r>ï§_zXn¥óÒsew¼Ä±8ÀYTäcnAÎr:t­9¡üÈ›>Ãm¯µ(n7ˆî'vØ£,‚0ßÜ뎣´=ÜÍ+ÈöWyŠšY˜§¦q×ß§:ÑÍN÷M¥Ø³g©ÜYD©ö+“åìù<ݱüŽ;võ;N}M7M¹šÞ{užÒUŽ$;óÀ—'ö#Æ—45÷Z]„·¾žÑ|«]>uDã=ªj( Š( Š( Š( Š( Š*£ýöúÿŸóþ@{Ö,ñí/ýuþ´€Ð¢Q@Q@eéd-±ŒzþÛ˜­î¢)(VÈà•ä})^ÊÆ;IŒ¦s#c+Œ uÉÞëiÈÉÿЛ•ÝÊ“»¹¹E‘\ÄÒÂQ •#=8 ÿJσKXç™â†Ú2ò«9EÁãoÛåI«¬QÛ•Pœ€àcoäV$µÂEf YT)’F‰ã··5ÇU9ÔäÛÌÖ+Ÿ§ÃaXÔon]€ÆãP]hÐ\Íq1%d™@¸Ã0÷ùSþøÖ••ŒÛ¸ 2HnŒ¶w^De3–asŒ¡¦ZèËAq7Ú"ˆ0Ž6ŒœúÓ³hâ[¶”O²"!%Œ¢7Þ9úçó¦Ã¡Çª÷Ë3`ɽbÇ Ã‚?#©  ¦²’âòæG(¡DJ†Î[ õä ŠÛDŠåG•äBa~ÜIǧ^”vÒ ‹dÓùÄ”ì éSÐEPEPEPEPEPTä`²@É8É÷ g¹KxVÁ2@5‘hþe“¸ àãñ€Ò¢Q@Q@ vÅ™H OaØs\ý¥Ö¥wqvm œ`íÊ„pyÏ<ž=©§§Þ=ÆQ¡e)Á% ûúž_øõºú·þ€´½E0"º‘¡€º[*zr@þµ™m«G5Ä© լ̒ªº¡É íô‡ãš›VÛwv±È»¥n ·#æ¹Û‹h-/Nn¥šx$ Q°¡¿‰ò¥Ì˃oÝG]ir—p P؃ÔËÖ5[­:íc j°Ê £ÈÙ󯤱ÏOœžÝ*“º¹-[B)uË…† †^fÎXÞDp9P§8íß¡­»s#@)Räd•R£ò<Šb3dÔ®›Cµ½…aYfh”‡¨ÞÁ{Û¨ôýb{@Á"ǰÍ,@ÙJìfî<6vô¾Æ€5’æ 'xxÚXþüjà²ýGj©iqwxÉq…-œ+).GLç8•V¼Õ¥·ŽiÕCb×Ç"à†O½»Óï'ëIo®/“1K’ì9-äbC½O#o<÷(ÁÖí—qt•cçd…F$ à…ç=}qM\…î–Õ­®£œ¶ÝŒ€ž€ç‚F0ÀÐdñ šO4dy¢`¾Zfb\'n9a×~µfËS†òC$ˆØ$oæÁÃc±àÐ]¶»<ˆÒJÑ*†#h¶“ŸoÞ'i§ÙxŽØ¥¬R¤H1@ Ý3žr:Ö€'¿ÚÚæÙ\Z4ê†B‰CeA\ýí¹Îò©.5 lï¥K·X Ë·åa‚ 'ý¨‡]²š•¶„/Øäƒ‚ ƒ‚ztõÛ­Y òiöì#¾’#ä+ûr$~#PQîf€ í~Ð0Âà•ëƒØ7#õ¦Ûk#+Ê6òÄ‘¡ØÈ:¿=ùü$0\X^MbI­¢2g\ë•'Ó§µ$¹Ž6¹‚F‘ùŽ}4OFÕWT[–Pò¥Ú8c´¨ œwäþTË‹ë¯ø™""FmB26s¹q“ŸÀ¥{®O ó$_0ßB •>^G^¿9«ÃS/{n6¼q±’"p7¬›C®pq¸üm­}®îÕ`¶˜Áq9Påy žœþž•jêø[]Å)Úñ»–ÀÇÊ3ŒçŠ«kâ ;¹"Ž‘䑊íP­·s’ ¿¯%ÏúÁøÿèF“?RÿuÇû†ªißò Uþb€5h¤EPEPåûãýÕþB°¥·»‚õ¹IèŸ26bTt9?.ôÀŸMÓd‚i..Š™ØŒv鎇¦*¹/üzÝ}[ÿ@ZÞ¢˜ÜDf„¢°SA#=?Ò©Åb|éˆxT´Ë$›c ±Ú8àÔ&¡¸Š[xÄnÛ¹ãk‘¿I&Ôä¸&ŸùxÓëQ5uoëbá£:} ­üÀà˜¸ݳǰù´”¸¸ó®.&••ƒFP#Õ¶ŒA*½rxëDQ³&NìIt„iíîg¶1¹t…!I®:‘Ž¥ØáŠ •ýl×6cî2*ÄV]…‚ZhÝёɴävr2_O­Mm¤¥½ÀÜM"$’Ko·j3’IŸ¼ÝIë@¨$€=N*¬6 ÃCu2@ ?g ~£#è W½Ò>Ó¼>s°Xä‚i²í¡¶3¸!ϱú’ZG$ÐKʘ²…À•+Ïç@¤Ðáde2Ê行11c$ç‚zú晥éSÃt×·Ó™.XœÀ€QÔ*çîŽÃñ O³DæævH0"ŒìÂèàd žQG$œU«]6Y–Tg%DŠ2Gñ¾óúÐý›öp²ÞþXmÙÈÏÞÝüê }gO&yÕid~r½ 8Èè8>´É4m¶×F)Œ—“u–P«†NS!@oÎ¥›HYäifºåÿ–nB(g8 q×4‘h°$h²Hó2ÌfÜáAbzƒ€:vì)ÃHŒ_Gr'”,r´Ënâ'8ÝüGŒÐ5Ð¥’8á–*("hc1ž`*áŒE9ÎOã~=4/=Ä· щp«ò“Óå€#:ýŠ{cwpVXü­ß (¾€ÇâA5j;b†ÓÊþTf2Œ>qÉc<~¦€#M>8ÚS’Fe™fm¤@Q¡ÛúšEÓ—í7r¼ÒÈ·Jãm¡@`g¡õ  áå’%{›‰ç-Ü6`Œö_z±&”DhÑÌÒ\ý¡fy¥À-ÀFà «ÊŽ=úó@E¦GÙ RÈm„ôàä{˜5 Æ“ö—%™Ú(•þvl¹f ŽÝ°?–(Öz¢€4n®ZJP«„ãüýk$xf9"¯.Wî†à}(åOV Mlhè­»M@FLcÇQµ¦†æ;yö‡[™#”<'÷>dYúŸJ¯iªjw‹uRE+jÒ¬[`À/ÊZv­LîõÑa`ç&\pI;¿ ]CS¾YgûÖ̆8 ;ã$fI6dyÓ¿µEs¯\½Ô1Ú-$ ‘ä] îR ŽAŒnhKûûĂ̒,FY ‹fá¸(NHëE†·+Í;Ímº5  !l c9äŸz³§/Ÿ2¬OpÒM †%*¥R=¨Ä“÷¹õù©g×c$‘­å1ë‚¿¼dÎàr>é뎔Ù5ô‰\Éi2²’»r§.1•ëî9éNþ݉r%·–6ÉUƒ¹Ã+Áõ`3Óš´Þx·Kšào2G¹—´!ëœ$SÅ: rÚâFòÁò´ÌB€ îž„v SX"úå¶´ÖCËÛ*•Ânã§S“Kmâ;K–˜"¶#F‘IeÃøñÛ®( ñ w%VÚÒYd×Utù6íÏ9Áá×¥I&¹ Ó亅€â4$u%CôäPI5¹ÔØ™‘ Þ«$«€Ù\6q‚}:u­m>÷íÖþpˆÆ¤ü¹el^ ÅgÅoo—Q²ïy†Tö¹^™ç§lç£§ß èÞD†HÑ\ .1¸‚AÇ·jŠ( Š( ³®ÖÇÿB4˜ú—üƒ®?Ü5SNÿ`ú¯ó«E (¢€ (¢€þ¥ÿë˜þBªêgX„(#<àgM4þzo ÎIÇoóÚ›/üzÝ}[ÿ@ZÞ¢˜ÜEçBSvÓAÆqƒŸéURÍŒ²“(æewÂcyqú? ±y–ÒXÁ•<šÄmnâ4 DŒ¿ÿ­Rߘҹ©£ÂaÓÐV.KåzrsN¸Ó-®wu;§@ŒGQŽãÐôçý‘éT!¥ÆnŒñO<ª©H˜!zqz,ô¨läWI&}™$l„Ï\P>• ÷s$“a+»åù2ñõ©¤Gµ‹Q{ä%gß(!Yxð"~§4³iËssp÷ ¹$ED‚ ŸÌãò¨¢Ð­b|¤“ì%KD_åb½ úPäkÉ3¥Ìa·MÁbÇ/×Ô€ Y4KYK‡iLlXˆ÷|¨[;ˆ÷9?:mÖrKïæC' Üã?ÈQ&k!ËÎçpwt,CøP­ô¸ ›Î #ÌUÕÛ%·mÎQøR[i6öóC(iÁŽ äƒqÇ  m*®Þw’oŸixÃ|·¦E4höá=óñò!~"Ámú9é@ m¤Ao;ÏæM,®3ÈÙ'p@HÖ£ ¢¬ham>Vÿ•ˆ}ð8h¶ûã2rñ #å@Î;vÍKm¦Am´£H_Í33–åÛi_›x?   ‹ Äöå&šUyw¼¦À}ÎσžÀ±Åi[[¥¬"(³´y>¤“úš–Š( Š( ³®ÖÇÿB4˜ú—üƒ®?Ü5SNÿ`ú¯ó«E (¢€ (¢€áCåOB€~‚¨V ©Œ²”ØÙqÎAé‘ýi€Chb•JGµ~\åè=:óSËÿ·_VÿЀ7¨¦7nñÛ“mbÊÆq’õ¬›]POs:C4¤Å2+o€¨pvdò>ö1׌ЕÜàYÊÉœ„'æR?ŸÖ³G†lä@ÌòäŒà9ÅOq©5±{ErÚj.–Œ`c€qT_Y{{´·˜üétë.Õ(q³ÿ½‹?Cø‚ ²¾Ôo/U<Ù–&D¢B¡X±‰ä|¸éïNÓuk­è÷)‰ÃŸš!ØãäÛ’}ó@ ©_^ùÓýŠëb´Væ ð”É.ÂH#=CëPÜkW“ÞC·™p£Ýï_›ƒƒ  u»´‚YfŽDˆÊåÀVo˜(;ѧëIæ–3%¶øÔ±p ÀáqÏ$zP˜u ÍÌ«~t“M'—>ЉTnpz·8÷>”\kÆÞcjL9‘"o3—dÎAà|§žh²ëï¿™g‡V(—9qŒŒã§#šq×v&µ*Ä”@¯œ¸`¤tàe‡4¿Ûçì©d¦á™TÍ…P¡ñ"öé`×bža¶2ùbMÎHvC|©˜r:”êÁžF†ðB›åv%F áHÉéíYZÞ±r¶{UM¬Á@RMÙC¥yÀç+œ{ ¶#ŽÚâh»H; ùÈê2@‘4³ ;Ä­"ylFJç8§PEPEsþ°~?ú¤ÀÏÔ¿äqþ᪚wüƒÕ˜  Z)Q@Q@Ëù 0I"ã+#=: ΋P˜ßÇš&Î\!ãŽæ˜n®^»X”)Y˜†'¶j’_øõºú·þ€´½E00$Y7’û—¡ÉÏ$Öә̑äÏŽNHÊŒãéÔÕŽ]2Þ[£qºt…Ë™Ð:dƒÖ‹M.ÖÎMñ ÚF`™ë´Çá@º]¬×ms ‘¤m€þñ¶üŒxÎ8#?Ÿ­ ¥YÇ~÷«ÁÙ·¡JŽ:t&€ 4è縞IϘ’¢ ^›@98>ç•G‰cÑ$ ”ó[a#¦W84E¤Ä,àŠWË9š7hÙ‰åŽAÏ'“ÏZsèöR4…ãb?'˜ÛTž¤ à“Èõ>´ét«9‰2DN\È~c÷Ž3ü…¥YÈIh‰9vûÇ‚Ä~¹ûb€ 6ÚÞA"+²—w,ÌnrIÉûŠ>‚’ßKµ¶–9#Œ<ŒÁàÅ>]>Þkƒ3‡ÜF+®:|À7ãUÛC±xÙ$ŽIÈËÊÌ@ÚW“ÀÃ7ô!ÒlË»4lÊû³9( êB眜œw>´e[mPÍ;‘¹§rÄ ’rG·JiÑlH*c}…vìóoLgÆqß­I>™o9$ù¨Å ŽVBUsÁÿhÐ.t¸d¶–@…e!m£€‹œ: ¦É¢XÉ&öIÉ!<ÖØ¤õÂç€4( Š( Š+:çý`üô#IŸ©È:ãýÃU4ïùªÿ1@´R¢€ (¢€ (šŒ[ÈeÆ#€=FÚÆÓ5·œBÈÚL„dõêO͕֚´’­ÚÊîÀ“·wʧéØÕÉãÖëêßúÐõÀ†ñ™-ÉF*Å”dvËYºƒMupˆnÐÅ:!2E´8;3Ÿ”sótô  ;¹È³•2™—×ëYëá5ããbÌ2HråN˪ µ³-èŒ[NE8ÄlÈ01À8Ÿ.­5µâÛÊ]ŒW/æ£ ÆÁøy©ÿ|7 Æ}Jòø+Ït"1¤¿ºò€@åˆ g¦”º^£x²G%Ó\É«!ª6í§ø ýs@ ©ÜÞ5Äÿe½žÜG¸éžôj}VöÚI„¶¶ûm Y§+3‚\a~^xNøëVµ+¶µì¥|³:¤‡v6ƒøé@ëâ Úq²Ý#ºˆùeVSœ°³[Ã8ëßQ@Q@Q@g\ÿ¬þ„i03õ/ù\¸j¦ÿ Áõ_æ(VŠ@PEPE-Â,™GV@üRµÓmí$2F¶0 â˜Ãi I$K´É÷€éùQ/üzÝ}[ÿ@ZÞ¢˜ š%š"ŒHƒ‘Ô`æ«%š™´’H¬y1OOÊ€'»ŒKk*3mO>•Î>¯q|ܦÌpDg¥Lš[•·±¹¤F±éÑl“Ì—ÝŒg'54¶Mçy‘óG'ûJ3ÿΨ’)´ËIî~Ñ$mæàÊì¹ÇN†–×M´´É;Xç’Äã=q“Çá@šm¤·Mrðî•¶å‹á ¯ÇJºu¢^=ÚÀ¢áØ3>NI TÈ‘@ÖI<òMûÅ™UvŸáÓñþTÄÑì#˜J–à0ÇñqÓŒàÐG¤Û‹(-æO$q&J±=É çž¦žÚU“¼ŽÐd0$㞸á@“N´”’ð+åúŸ¼q“ú N´|îNKýX‚Oæå@}­¹S@2«(bI8lg$õû«ùQo§Z[H²CÖU ¹bB€1À'Ž(.tÛK©D“ŹÆ9 FqÓ dZE„(ê–ãk ¤'Û'ÃÒ€"]Ì]™ÙY€QQˆf<óÎwwô©çÓá™—€«ç @ûì!@ ‹I±†a,paÁÌqŒã«üÅjÑHŠ( Š( ¸`™fèÐVx¹Ý0'zÈWä@8ny¦Ÿ´Çæ¤dáœeOP}Fi%ÿ[¯«è @ÔS ÒÂØíb¤²ŒƒÏ,dZÞI-ÕÂyWqy7 20ÁfAç¯Íùb€5/&ag1èBg$óÞ©¯‡´çŒ3À ’Ôô°]ßFO¢¹m<üÈ>€àVlÚ•Å¥àüÇ÷ò>p6#n}ózÿÓ#ø #°÷Wø–K‚‚8älNcò÷8+Žp0? 4»»ÈäŠIüùVe…o2`öqõ Õ$¹’æ*æêØÉ° »˜Ë͵Ž:gùÕyïï¯5( ¤Y>D–å1áÂÍ»ž2 QZ±ª™–¡¼o CûÂä’áp[¿Zf›¨Ý«\]ø•щ-–Âðsï@í®®ZîT·òÄ·LÙ—%Ub+Ïó¦ÝkwP@× &7yc‰Nr7 ±îÓÓÖ€ã[¼·W áÌJ@ nÉëÓæ¥mnæVX¡fgh®@ ®¨IöËjxÔµ¾6(¶Âh„†G*ÛNÑã‰J[mji¦‰šÜDZ "ig—*å9ÇèqÒ€"Ôï®® ™aAq4^`ÿ3˜8­6ÛX»’Ñ%"òãxcI¸³+È9ì¿¥-®¹¨\@e]<âX„°Ž3´:nù°=º{ÓbÕî¼»E<B‡b«.[,8§#œúPÖÚ¶¡-Ô6²ZǬ͸¿PÎ>¾µoS¿²ZKæ ¶ó]f`O˶7nÞ›NEPƒZÔî;9-'g.6€¥\ç=6õÐPEPEPY×?ëãÿ¡L ýKþA×î©§È0}WùŠÕ¢Q@Q@ :‡ùXdþB¨ÝÛ¸¶±Q†þñ_@i[N´‘Ú+‰ ýÚg$~œUùãÖëêßúÐõÀdÑ,Ñ”|í8èpx9ªñÚDÒ>ZFØà€d'æ€&ºE’ÖTrB•9#µrï«J‰ÿÎSb5éÿ}ÔÉ¥¹Q‹{‘qé±\oÜÓÏJ±%´2ùždHÞj„|¼£8Û“ùÕC>›eq8ž{X¤”`eñÒm§ÙÚHÒ[[E¿ÞdP  ¬-å®Ú&™¶åÊŒœG>ÄøR‹+U¹k•·ŒNÄ3Hn$ Ÿ¡"€ØÂÓÏ,ƒœ2· méL].Á'YÖÒ*ôpƒ"€4»O°Ãi4Ký3Û­Ku­ÞEnþPŽImË™@Õ{Œ°Æy麗ísÞßéÒ¼‘$BñÐ@çŽAÙèqéß­X¿ÔšÈž QâšÕš œ±dýà;‡¦=y¨ô½Vþöùm¤HPFÍ8äàŽ€_S@´PEPEsþ°~?ú¤ÀÏÔ¿äqþ᪚wüƒÕ˜  Z)Q@Q@ù~øÿu¦"³çbÇ\Qp‘ÐèÊН/üzÝ}[ÿ@ZÔUÙcIc(ã*{Uxí!ó•c±Á\¹8à_ZšåKió´©Î:×!&¬c^/%#¦0¹­DšEF.GO¤$i¦Ãån*ã~[®O5i¢÷n[zíl€wx>ܟά’9l­g”K5´2H:3Æ ,6¶öîϼQ3}âˆ?\Pm-šc3[Äe8Ë”Ž0G?€ü©E¼"S(†1!9/´dœc¯ÓŠ ¶Žie®g 9;zqøÒ­¥˜œH¶ðy©üAåü{P"±´qÙ˜Òh BÈcÇõ©M­¹‘ä6ñoaÛ`ËB{е¼-÷¡ŒóžTuõ Á ÎbŒç9ÊŽs×ó ;x!UX¡‚*€y }i"µ·†C$PE² Û4ã.Î FÄãxÀ9ôÍ4ZÛ‰AoøÆ¶ ¨ôµAq¤ØÜßk,êîB\† ÏŒŽjqil#òż^^Ý»v c®1é@ {I"HžÖ>â4`…úÔ¿d¶‰þÏœ:I°nc¯Ò€lmÌ»Ú5`"òB6ª÷{à~BŸ ­½¿úˆ"‹ýÄ ü¨Z(¢€ (¢€ ιÿX?ýÒ`gê_ò¸ÿpÕM;þAƒê¿ÌP­€( Š( ŠtýqþÀþB¨[W!®< XÎ~Psƒõ¬ª%u6ö*=‹h¬".u¹ ÀpR3šŠ_øõºú·þ€µªwÕÞ¢¨E{ñ›R;@ï¡Yßi77}#¹ca!<œtç©çð  Kדì3›>N¡³éÿפM:ÌÂ7[Ær¼’¼ÓNÈDz§àœí‘Ô}8¬»›‹«;×@¥¢³™®YÉê’þÃ|¸ÿ®bÊö°"ê¡/æ·FÆì“ÈCbÌBóŽ Ç~‚—D’Dš7€Å<®²Hä ä7ÉÎ=¸º²ÅqsåO,V‹"$ß2î› Œ{mçéPJ÷†²–’24ñ˜ã™_! ˜ç÷X}G¥[Õ!)Àá1müGªÅÀïÏLõªúeô±Ë4©r‚Fx‡Ù°3 8Žüxô  ±Ý:Ê\Ý%ª]M3µÃ´ìeDj.µKûa"} 1óÆ1Á~oü{¥:MVúÊeY2ïâ€lØê¥ÿ&'ÓŠ|W··7ßeŠùLh²°cSæ…íÁ‘‡”Xê÷w71±Œ°¬‰L¤r¾sÕy<~ÅõÅ½Ýæ6Û\Hcåv.¡b1E–­}s½i”"ÉB‚ý€Ý‹?…K§êî×½Õäf6´yæˆ(Í»Ÿ)Ç•µ@Q@Q@VuÏúÁøÿèF“?RÿuÇû†ªißò Uþb€5h¤EPEP¦ûÃýÕþB£™DÑ¢º¨)Ñ—*0iI]Y;­´ ¦èز¹ÉaŸri%ÿ[¯«è M++½EP†ÉJ…$PÊzƒPEin%sä(*À©ÛÓíëõ  nd·‘\¥N@êkŒ—UiŸÝ Ã#Ûî}*&ü®Tcs¬Ò’4Ó¡ò‘ÕYwaþöO<Õ¢ªsFjÉ¢›sF¤ú‘BƈIDU'© ËMÛ¶.ãßÒì]۶Ǿ9 mmæ’i]æíÛzuúÔŠ°X(ŒÈ˜Î1•ÿ e¼ÑÀ¶±d€ØNí¼p¾üê_-7±rzœu (‡ª¯¯J6/÷G~Þ´*"€TÀÀéH±¢œª('Œ@|™ÐùnËËÁ#Ó4àˆ¨€Phtëxne¸Uf–\ä»À'$ ô8‚¥[XUå}šR ç8éøPŠŠƒ ¡G°¥ Š( Š( Š+:çý`üô#IŸ©È:ãýÃU4ïùªÿ1@´R¢€ (¢€ (Ó}ïø ÿ!QYC± mõÍ&1#žÞp~Ïp%*Fá°Œf™/üzÝ}[ÿ@Zb7¨ª¾ ´!€*]2û±íÒä\Ü}¢ÒÒ$[˜ÄMç'å·>¹«|dûÛÕGÉü,O§·Ö¤Žu…AHÀÛÜ iÙ «²¶„â_ŽÂGé¸ÖUѺ³¼G˜,¦k°Ç“¶CÏ×ïOÀçå_Å ­oiko«ÔZÅ$òâvKˆC±v,̳Ç'ßµ.„­Â5˜µ’r²yŠ‹å;¸óXgw·€W‚ÚëQ¹†â>Ñ,V‰2Ærpg†ìÓo§¨$†mC[K[ Í G­<b9T˜†+9O‚qÚ€/jvû#û>ØŠÚÁœA–ˆÌã¢äã#KíBÊ.$’2΋ò*:®ñ€9ÚÄœñÇJtww¢µͲ¬¬—±æm¢,díÇÜpOj,5;Û«¸³"É$+ˆc`#BPæeK/'‚ ?Ëqq©8¹œXÇ&Ï6hˆ`¤/\sô¨ÛT¼ÄMsxÖ³™ T€*2³(c‚ îÂ:P©Ü¼–ªo ³:¤“Û²!IæÄ0ÜŒnaÉ'QV–öþ {O2òW[‹t–i0䌑…OPhö‘|. xšñçg–DŠ`«’«ŽxïéY0j·Q&šUAˆQ¢b«æ†` *„äݘ ©ãŽ@7´7¸—Gµžîc,ÓD’1ØQÆùÎzú( Š( Š+:çý`üô#IŸ©È:ãýÃU4ïùªÿ1@´R¢€ (¢€ (Ó}ïøþB³®ï­¬ná–e²$CžµPƒ©%î Ù£Žv¶û]Ña,Ì—ž#à}jãÖëêßúÓ¹…ê) l (R÷tªÐ¥§šÛV ‡pzŸOpªÖò]§#Ö¸¹o•y=×yãÛîÔËÒåE_©Öé"1¦ÀcB—vÒrA>µh:a—’@ç©Gèj‰#k«u`­›eÝE{my)3¤­tŸ.IóÜ©æ~=Ö‘[ZÇgªí»m­åÄX}ŸÌä±l68äÒh±L³Eö|•dÜ$„ Œ–ã$cvhÚ¤ s<À$’Hí]‘6Öý÷Ì3ô#¿O¥@mn®µ´‚`û hâiÞ-êøIˆnx9 ¹ô&€.jVîw@¿¾û5¸û¨ Î;lÕM=®#šFr·nñmiëÀbxÇLд‘°“Ë,ñÚÜË44 îo˜ºq³?¨ï./öOäËsöÒ‰µga^1Ÿ»ÓÖ€ ¦Ô!$S]02´@òHQ´‚=ù<Ó¤“Q€°ŽK‡Rò#É*Šê7}¥Ž{›º½­Íà³U•¢“%Yð"ÆIûÆAÏ¥}Ö¡=ÜEÝžWX© ‘ÄvC sÉìx šæèjSÆ×ý­<¯.(ƒyG?{ôÏSL7û2’\Jÿ¥©Sˆ¾uoÝ/Ó=([I¤R7..&µ†¼© v_Üžüçvð>”šŒ³Å}{rȪÞQóO—ÃwœPÞ’úéÞkÉe¢…B»A8äóÍnPEPEPEsþ°~?ú¤ÀÏÔ¿äqþ᪚wüƒÕ˜  Z)Q@Q@³õÿ€ä+3Y·HKùaÐ$[Â@'pê­]=f“°õýÆ®`ŒlˆÆ§p*Ä¿ñëuõoýjÍê*„6FDBÒ²ª¥ŽV†{C+–K 0ÉàtçÖ€'¸ mäÞ]§ ô5ÅËpT|–s“ÜmÀ†¤ùº!«ug[¥lþ̀Ƌ+’ªsƒõ«xŽÜJ‡s\0å†r¸Áü1IªiñH#’þÕôV™A<ã¦}F)ö÷¶—2Ê9¿´]çž'‘2¥U¾m¼q´qÇ^õz_øõºú·þ€´åW`Fõ€¯¨¶„žt'þú‘n×_i¸ûEí¼È÷1˜–4 ãää|džã×'½j_‰„ÛÙHÙÙqéïõ©hÓy¡É$Ô«¡éçÓÍ|ßF³îí/á¼™íò-¤7Q(\’\ÀqË®ãþš/¶io&©âV»Åï"29_,\“´‘ÉÏu¦é6×bHDm:ÉÈ ¹·ÂDIãnîÏÔÐõ+yn/f‚kwŸtvªì aí›/×#=2{úUt±¾—[Hä71‹vHÅÐPÛÔ$Øl° œ2‚q÷‰ö  Z•¼³I,(Ò]5½¸°·3‚8 ª–Q]¤îÌ—ÂñÞ-Œ|Í…F7nþÆzÿ…ZsÇÄ¢é­.$šVkrûØ–Q;>llÈÇAÀ=ª;ÅÔ Î!ûoÚ‹KæÎgͳgðç>ï=sÞ€ «}B1"@×¥ZVýk±òÆÒ0s‘ü_7_zt‘j0–›²…äWË»-]qŒžÍüŽO¹Å: k‹›Ð¤ß­Š¬­é¥FÎ"ÆãÇæó0·N1K§ÿiIuJÓ4Í–yRDH[`ÈÙ’dç¦ü8’â O7î.%2ª"DZJÇþÑUÎs§5L¥úY ÞÜ/˜Û!òç„ÉÀÀ2n.œç–89ô€ .cÔ_Î[¶-ái·î#òðÞ^Ò~Lÿ«û¼õÏz—uÕþ¶¿†Ï+¸x¶G#¦qÒ€#™o ›kÔºóÚX‰YvdýÀöû„!Kå–Ä;ÝÜ€F¬°…]çæ,ç •É'§Þ¥q1šÊ[x¦ù“'’\¦ðñ0J‚¸õªtZ„—ñÄóÞý‘_qb’ÇŸ”ðw’ØÎ;ý1@EQ@Q@g\ÿ¬þ„i03õ/ù\¸j¦ÿ Áõ_æ(VŠ@PEPE:_¼?Ý_ä)r0FäAÅDÓ*N!l«ž™¥2_øõºú·þ€´ÀÞ¢˜ ’D‰ ÈÁTu&«Åy‘‡š2î6ûðó  ® ‹y €WiÈn•ÆKçà”ÓØŸ÷ý “R×/S­ÒÙ[N€ª"|£*ïR­Ô P,ªw»F¼õeÎGá´þTÄWm_OYDfé7ú žä0jKmFÒîFŽÞt‘—¨ËVÂÖIRâê8Ú% áŽ6‚@ó"Ÿs¨ÙÚ>Ë‹„¸àõç8ÿÐOå@K©XÛ¤w†'èê¿{bÞî—‘!mÆ2qê3@¼°³K /ÙØ#(å ü©¨¢€ (¢€#¬Q³¹Úª2O¥:€ FuBŽ «îpOô4l]áöà`69Óô´Q@Q@VuÏúÁøÿèF“?RÿuÇû†ªißò Uþb€5h¤EPEP¦ûßðü…-ýÌÑZD"Vò¶ƒ$ˆ~eÔ]'¨;ÛB…´fä›§fxc}¶äŒå¾µ,¿ñëuõoýjäõv7¨¤2½ÿ¤àœ:ûB²-Òánn ·:ËqF¾V89öèxühNý]l'-&á³Ó”ô»µXTy±à/LÐäX¯¡éù ¯¦ãT/4ûÔ¼šKbÞT-öˆQ{³¹G¿Ë'ýý ¶³—OÔ¾hï|¨h1±ØnÜXgÔçñ¦iv7bH” ˜53Ì*’xØ(Kû[™ï¤‰ ’e)j­)@ö͹¿Cú­—zÚÂ$‚t‚HÒá$¸9öÞª}NhÕý¬“M4™&0[ªüç,Yœþ@Õ;;¸æbö·éž2“çåUnÏ>™(ÄQ4ÐAs$ÜZLóJR3óÎ dò:.G^3QÞY^ȳ¬pÏö‚eóeÝ…‘vÏQ•ôé@Ö›v¢D·ŠP+&Ÿõ.;ÿ½N’Âö2”!y€ÇæŒ:í»¸ |l“Þƒ%¼ÉdS nä8‹çÔH4ûmA®ãyD¢Sù“J¿êÛ`áyÃsœäzÐï-/Íø1'”F@•×b!ÁåpzçUm4˶xÍØ„̦PØOà|ž à’¢€-_Ø^²ÞEHbD’X6žYÜ·>Çyÿ/¥G=¥ËÛN‚…¹2æY‡"H÷g Ï'n=:PÎñ ˜Ùq6Öá&Tº’ÜÕíMçy¬^Jܤò„Fl7Á8þBý2(6ÃO»kèãqv¶bEc¼lþ 3À'Œì®ª€ (¢€ (¢€ ιÿX?ýÒ`gê_ò¸ÿpÕM;þAƒê¿ÌP­€( Š( Š|˜Þ226¯òég–îz—±ÜkÊÍŵ QŠ«/üzÝ}[ÿ@Z¡ÔUÙdHc.ç =³U㻈HÙÞ7¸ÚLl OZšá‚[ÈÍŒ=zWðÞ°Üšnz’ÁéÅ&¤þ“иޝJq&ƒ· `Þž·–îc >dðyeݸ~[ò¦I_ûfÄËå,’»t; v’9 `råRZêv—’à‘‹sѲ†Ç\ eÞ³adó-ÌÍÈLm…RpqŽ¿×ÒŸuªZZKåM#yœ|‰9çq(?ÝoÊ€#¸Õmm¢ŠfY16vþì©ãÔV-¯"¹’TŒ>b 6åÇQžüÐÁ›C=³@ƒEó¯ϧƖae1[¸B!$D2UϾ¦—OÓoVî9&WY|…Yne»£l·'®rÔp si“5Ô`LòA&ß´3…Ëåzc¯éYm¥j¨~Îê]Õ§#ÊX܉Q\|Ç7Þçó ƒG»ŽD–ÀKrnÉpY’¨2dœõWd’0R«È!ˆÆ=‘¨·z¼V±C#Ã/ïrv•ÚËPzT¶º”7§kÆ@à dg@ üOs$!’_(Äì OÐgZW¾…e·E`âfe ¤RÜþT7í¾jnÆìnÇ­F/-ÍßÙ„«æíŒõ#ú–9PLn®ÆTæ“΋s/˜›—ï Ã#ë@å_177݆OÒ‰&HÞ4cóHp }3@ž]Ë*Î2bŸ@Q@Q@Q@g\ÿ¬þ„i03õ/ù\¸j¦ÿ Áõ_æ(VŠ@PEPE:_¼?Ý_ä)€``ǹ çñ5 ¿ñëuõoýhC7¨ªê³[ªX†S׆²ml^«‡W»“θñ!PdŸ—òÅi_DVÆl3·ÉМú…BºÍ‚Æž¹¥&ì‚ÂèYþÎ ‚Hì3èIªwº<ò^\O˜¹Àó>]ÃØ~ìsþÛS±irÙê+$vŸhEŠ$Y|í„ÎIóœÓtÝâ'Pñ›m¡ÃÉ»Œ™9þíIu§ÝÉ|Át;m€•ä—.ó‘ô'òªñèPyÈ­c*Ň ì &…À€,]ií4÷[&ÅŠw†Ë†ê}1Umtk¸‹FÖÑeÞ6ÆP)^qÆ€$óËo§¼æIç¹RéŸ(:I×è]õªðèms­o`B™CsµÁèrÐï´Fî`þJ+ò$€(]¤mÆ3úÕäÒ¤µš'¶†ÂÔB®ÜùN2w{äš‹KÒ'Šk“!žÖ7í 0$°ßžƒ§+ùT7Z-ÔñÉŠ0wHÆmüÌœ)ïÆG_J³u¥Hn]`‚?-ü½’ç§œwçÚ¤Ô£ºž[0ˆ‰r“ÈѾ7]ŽÄ®EP³Ð§„o4m–DsÊ’pY*騢€ (¢€ (¢€ (¬ëŸõƒñÿÐ&~¥ÿ ë÷ TÓ¿ä>«üÅjÑHŠ( Š( M÷¿à+ü…rwÄ’]²dÝ÷5b¸Á?7½&Í©AJ÷èkh·íqf"º„År…,]}sWeÿ[¯«è MÊ×ÓczŠ¢FO(‚##@ `u98ªÑÞ$¢fES÷~R@}Çç@.d[Èäà<â¹y,u—(‹Ó!¼Â ü)8·³±JInއJ”˧BY·0X㎴©¨Âæþöi ^?‰7gðùéL’¼ZÔsÌÑÛÚ]M°á™Bá~b½ØtÓìõX®åTÍðÆ6 >0OëŠeöµ „“¤¶×/ä¢91¨mÛ›j€3’sžÝ©n5˜"¸H"Š[™$ È!ÚC A:!ý(/5²Eµ¬›¤´l@dŒœfk¬ZÜ]ÉmæGªFÄisäg€ H5;u3™äŽ¢—ÊHà+ œèr1ìh·Õl®ÊÜĦ7hÝYÀ*Tr3ÇÝ'é@ºÔmm-ij'–;†óƒùw§-õ£lû‚³9ËœŸ—9ÆpqÒ€4¯aÅŒÁ7³lÆ þzUU׬2œŒb†ìš°Óe+¹Ù†Gbr*­î†óÝÜÜG Á^ OO“9ãîþé:sË{P&%® “Ciir‘ÅqÉ<…dM¹Cëê)šv…$±Ã€áä¶•ƒÍ“X€¤cêzз:]Ô—¬cò¾Ï¶ÝUžfg>\»Îr;‚G^Ã׊ëáÆmOuÂÛÍ`޾TO’B“‚1Ž ˜²@Üé†i§†Ú%·Ž88ÆÜ#e·cÓ­Am¢Þ¯ c™D¹vpo9Ǩë@]:î{;y¡QorÍ,…ÝÈ0y¸›H|tÁÇN0yŤÊ.-Ä©Cos$êÙ%›vóÓXw=3ÇJ¯6‹{*Eo›q ÙdÞÅœ±Èvàzu5n;+¿íDº ²°`“˜iQŒxxäzEyk}usnFÔ™-ft,¨KÒdÌ1ÀÖ?G\ãpöÏ9Ôì…°¸ûJy%¶ïÏô¨u^ÚÊ ˜H4q{ºŒf€%þÔ±û?Ÿö¨ü vîÏz´Ž² t`Êà ŽôBfÖh¬Xµ¸e>F›ðZö¾Ÿå,Ÿk‹c6ÀsÔã8 ¶§d°™MÌ~Xm¥³ßÒ¢mV(ÅÛÈUcEmß}HëíÎGá@ö­okÉWGžL¾Vìšž]BÒÝ$è£~Ì“ü^”Ö³ek·tÊß¼¶Ó÷3ÜÕ…½¶kŸ³‰—ÎÆí™ç³^[Á4qK2¤’pŠO&¢¥‰ EÔXF ÇwC@ u©AŒ·)">ÀÛF~óNßÒ™6±i ¼ÎÒ+K &f‰OÍ€¹"€%þÒ²Û }¥16Dg?{ëÙ“ʸŽF†PÀcœw  5øtëG¸›q ¤„Q–l ð*´º©‹Î.RhAnY$*»¿2Ãþ@ ³× ºi£e#ËvK‚ŠÃÛø±øUˆµ;cko,Ò¤M8R‹¸üÿí;-Ò/Ú¢Ìdùºdà~´ï·[T™ ©UΉ±´~;‡ç@­õ›i-!‘äEšHo(7#+œU›Kè/,–î'Q]Äúq“@ ‡Sµ”AûäWw"îÎG×¥V’T™c–&©eaЂN &-KþA×î©§È0}WùŠÕ¢Q@Q@ qßýÁü…eÛɧÎn¯oÏØ¢òÞ¹µ¤"ÞĹ%¹rDóRÚê"¿gy AŒsD¿ñëuõoýkÁÁ´Í“JÆõ¡$7hò[•ŒÁ”œgéYVºRÁs<ÀÊd™‹JNÐ6d{ýÜþ4oPU¶6ó¬lËå¶äñŒW-¨y²êóKRìlŸ¸}**j­ëùMÙ&‡æÇçA o”ƒ’8Ïñüjxm®­f)nЛV‘¤`ùÞ¥˜³Ž:’)阥¹ Ý¥ÈKWiš9\eÈÝøÖ³®|?=µ¬mi<³H¨¨É#d7έǠ&¬’ÔÚEÜÅåy!i%“{Å–Xþê¨9äýM2 îßL’Á&„Å4*®Ä†ªqíòƒøÐºŽˆ÷wÍt­—j9`8‘Ïzž)†›v‹iq @Ý y_Ú¦þŠM2ÒØ£’4e’UŒ`bt?«øTÇI¹žð^\K—JÆÜlu{åÿJ‚OHÍ›ãv±e ´ò9¥»Óf‚Ýà·‹ÌXµ±Ú0ÿàwŸÊ€"¾ðõÍäºhðDŸ;Ýó#(\tÀÜ=ð*Åæ‹q$^D2ÆÖê$rsß+ÔZu¶‹%µ’¢«üÅjÑHŠ( Š( M÷‡û«ü…fý¶s«%šÆ¸bCÎ~Ÿ…)6¶&M«XÓ–"PͰŒãålÿJ«/üzÝ}[ÿ@Zh³zŠ¡]FòÀV«1[©P‘¹Ê«ãùÀV2[ÉyX¶K§D Ò–P:wŸÒ¸ê§*œ±ÓÌÖ6JìßÓ4è´èJ còì?íU®ôHînngl’UR‡ìq·æëÏÜö}Íu¥ec6î*ésÛ]ù–S[Ç—{%…œ€™ ¸v4Ë]fļ’ˆc¨‚¹ rwdœþB˜…›Fwº-ÑEo¶X–#•ɼsœsÈéééËaÐDZ³^yá¢ó7¤%>ó–ŸÒ€6 0ÐQ@Q@Q@Q@·Q$úäJ¡‘­%÷ã©b™¬æ[k™7#C+Oû-ïè{ýz€]¢€ (¢€ (¬ëŸõƒñÿÐ&~¥ÿ ë÷ TÓ¿ä>«üÅjÑHŠ( Š( M÷¿à#ù ŽéÝÅ›§¶c?2•äzƒT·;HUQ>Ù‘ÎWåU#מE\—þ=n¾­ÿ -'%7̇ΧïGczŠb Ž2’ôè(¦¥$K伈&E,ÛÝŸ”ö¬›RÕgX•¸2¡ÚB‚AÁ9ôÇãZBŸ1Ÿ+K¹¡ \ÜMÄwÊuv8*dúÒ[눦7ã1Ë2†òÈVì8=ÎÕφ¡«;.­¬ =ÑBTΠù#ùzê«6©om¹‰ÖBÎÑ­·uºô€µ%ôÏä30—r€»N[=ǨëÏl¦šõœÐ‡ˆÊ7¨d/(ä|¤ç±íë@l&k>ÚwÆù"WltÉÔôQ@Q@Q@›}gu>§8Š/"Hä™rPü£×å<öý+6ÚÞÜjª/íâžAˆ ’ frŒ õ™ÒQ@Q@VuÏúÁøÿèF“?RÿuÇû†ªißò Uþb€5h¤EPEP¥ûÃýÕþB¡–™•¦Q!UÚ7p([m ˜·eÈÎNiòÿÇ­×Õ¿ô¡+I+#zŠ  ‰ZIK(8~ãØ€  :µÝžšmå¹’;t,ÊŒ í5ý¯¦ù¦_í‹_3wî9ǦvÕFI$Ù³ ÞÛ_]j2ÚΓ!‘>e?ôÍGóœÚ”Ëþ#ó  ýI —PÓCyr®÷;Nü³5^ææÙ&Åmm¹IÈõÅDåÊ®4®;HÁÕçmˆ›­“î.Ñ÷Þ¥¿ÕÚ8‹ZÁ3„#.v¿ï2®O^£·J¤î®&>}vÖÞØM2HƒÌ1º±U(@Ï9>˜V39lpp@9à䎼sÖ€#}j8؉-n$bYXªâ%%€-ƒþÉBÇ>ܱöéŒPìE‰#»™ï(P„-Ôò¹?‰4‹ À© fY q¿˜Sj ïœç8Èç°À  D³ŒÅ„ÿW)p9ÏEéàû9gl€¼‚që†?¨/t4¸s*Ï(¤Cæ1Dªñíß4¡ij–‘Ff,Û™Üå˜úšš€ (¢€ (¢€ (¢€ (¢€ (¢€ (¬ëŸõƒñÿÐ&~¥ÿ ë÷ TÓ¿ä>«üÅjÑHŠ( Š( Ë÷Çû«ü…2€ ‚_øõºú·þ€´½EPD®IÏ-ÇÑGõ  ó)ÔtÒ¹áä<‚?å™ÿ‚ãUvœ$2}Ö?2”Nk:“PW*1»¥™W™¥ff6Èr}7½Go¬ÉWâi…¼“<Î_#ó¤UÀïÂ8è*ÖÚ‰’˯ˆvµ?gvuIœ’¹åǃޔëi[E±ë'ryØP0wcž¾”ÄOu¨Ÿì ut'@$3úUy5ÖJ‘Ú†)(‰UåØìK…ÎÒ8\ž¼ƒ@7Fê7Ý—$NcuÎ@#ƒß¨«Q@Q@Q@Q@Q@Q@g\ÿ¬þ„i03õ/ù\¸j¦ÿ Áõ_æ(VŠ@PEPE>_¾?Ý_ä)”TÿÇ­×Õ¿ô¦õÀ)‘Œ<¼c-éì?ÏzÅñ4Ëš{´3¯šÀÇl›œü‡·¥QŽ×ÃzÈsÅ™àûsÅ&“Üiµ±k@»ûV¯t|‹Ø[Æ¡o"Øßyú{V›höLIØà31p$`$Ë!†~a–n©¦„VþÂGÔidÜn)Ý€XsÕˆõ<Í\ƒL¶·•ePí*ççy 1Î$õé@M¤@Ö2ÚØİ rI-ˆùéÏ\1çé×¥2óD‚ä³y“,"±s# 0bªsòƒŽÞÔzÖÚ+H¼¸ƒ`ijf>¤žI©h¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ιÿX?ýÒ`gê_ò¸ÿpÕM;þAƒê¿ÌP­€( Š( Š|¿|º¿ÈS(¨%ÿ[¯«è L ê)€TJÁ$mn[²û(ôÿ?…PÔ&Úsa†Có)òÌÕKQå”f8V8tùAã¡Îk*³ä‰p3&Ò„ŸÚÒ™Y™šÕXóïL}vxֱ̬ùHf`D§qHŸccïgÇ^Eh¯mIcouçŠibXIŒäE4y䎼•Ûê8&¢¼Ö/dÓÁUŽÕîx‚XÛÌ+‡ IßÞ˜†I­_[ݬÓ#y^SEöuüÅjÑHŠ( Š( Ë÷Çû«ü…2€ ‚_øõºú·þ€´½EP2/¿/ûÿû(  oÈÑ˧2ÛMt|ÖýÔ8Üß!ý*Ÿö‹aÀð­èrpsùÒjàXÐg’}^ë̳¹µÛoT¸ œn~˜íZí§Z2²´ C,ŠFO!Ûs~gš`Dú=„“^ ±ÏÛõÀÎHÚu£G4 V,ìå¿Òãæ€%Ð^åµ{‘s§µ‰[xÂÆÓ 27?9>•³%•´°$‚6ˆ±r„pI9'ó$д¥î‡kzðo#„`"¢ò>¸Èü«1éöqÌ%Kh–@6† Î=(ÐY[[‚!‚4ÈÚv¯Q’qù“ùÔI¤iñ£¢YªäG8éüèçN³/›h·FIC·¦NOëO6VÆ5ŒÁÅV@»xºÆ€!—K´ži$¸ˆM¸( ã… œ?àMùÒA¥ZCy-؉Lò>íä ¯ÊÛŠ»EPEPEPEPEPY×?ëãÿ¡L ýKþA×î©§È0}WùŠÕ¢Q@Q@—ï÷Wù e¿ñëuõoýi½E0 ‰]„’¥†îÄqÂûûçüòŸ©LRÿNwC!ËÇîÏ¿ùÅgO¨µÌ¡¹Ž6$18 þ¬ªÏ–:v\ÒPÇ«Kœe­Qºç«½V¿Ô/Œò[ù«lâtò”F[äªî.y^?‰Ò;jKÜv£«ÝÃ)Ž-²D…ÝP)Ôùî?„ýi±jµ¤-_¾?Ý_ä)”TÿÇ­×Õ¿ô  ê*€)‘ýùÞþ‚€(êörÜ5´Ðˆ˜Û¹r²’ùHíõªmyå4gh#nYˆ|sòÐ.Êh¯%º[ªI¢¬,Ì8,sÏûÕxZ[/›‹xGþ·>¯¯SÖ€ìVžjKöX|ÈÀþXÊÓµbµØÉöhv?Þ_,`óžX¬ía“ÌŠÚßnÝÊ€zgÓI•¤(é¬1£ýõXÀ õõ MimpêóÛÅ+'Ýg@Jý3M[+E‰â[XDrºÆûŽô¿g¶Š¢(’1† (c?†åQZivVvbÖh„[0(>p>n9  &²‚hü²P•ÈPà½ö¨¥Ò¬eTF¶ˆ"Ëæ”TY°G#õ  h‹*F¡FT`K@Q@Q@Q@Q@g\ÿ¬þ„i03õ/ù\¸j¦ÿ Áõ_æ(VŠ@PEPE>_¾?Ý_ä)”TÿÇ­×Õ¿ô  ê*€*%,$“jänõÇeÿëþT’3˜dÜ›FÃüYíYî#a”p#Úš%—ôuÙ²(¬®ôcßß\Ë<Ð5ÈŒÇ:b É TePq’Aã­"‹+¨]©’V¸­ãºHwä!Ibzwýj¼„ÓêóÌ—‘Ñb’àœ ÿ2(ö—wqBý¤‰vÈû•U8t¼95GOÕïç‰åžX1 Bd1FÈù#9#ž>´ûíbæ+4’9cIˆi\ªªü=OëQ Zý¢yÄÊlÒòÇ03ïš‚ÿSž}.ô5Ìrù‚æ&·P3ª¹ Ç?Â?Þ­ Rö]RD¡XȦ=Ãr*“†ÀÀ<ñÏÒ€$ºÕnc»>Jy–ûpÀu1þURMjö6´,ȬLk,nUwï`2£©àŽž”¯¢Mqs¥[ÜÝ:´“"¿Ê¸8ÿ>µz€ (¢€ (¢€ (¢€ (¢€ ιÿX?ýÒ`gê_ò¸ÿpÕM;þAƒê¿ÌP­€( Š( Š|¿|º¿ÈS(¨%ÿ[¯«è L ê)€S#<¼§° ^O µ¬’ÜÈ#ˆ 5Ê[ëñ¼·º½†Ü©&ñî1?:Òå4Ú2XÁ¤Î“Hkw±k;O31† 9ç°«~TcwÈ¿7Þã¯Ö³jÚ'utZm+±vž£Rb`tG r"¢íE =Å Š0I ““ÇS@EŒ4hÜç4yiŒl\}(8,à·#FöfbFI,rSRyh°EÜx'šdr[ÊòGÄíÈꤾÄv§´Q±£RW¡#¥8  PEPEPEPEPY×?ëãÿ¡L ýKþA×î©§È0}WùŠÕ¢Q@Q@—ï÷Wù e¿ñëuõoýhzŠ  ‰w‰$Ø«‚ü’qÙ}¹ïþzAb5+Sms”BCf'ç#¸ú×3qá)mÄòÅkt™IlŽÄtür+zU\49ëPUÍOÎdÒ Eù.TœóéïU/®n.'¹…S£—ƒËhàE•y9]ÁÀœåx'ØgQZmRw‚e´¼»Q-Á½/mÒ %/j’ÄïÔc¯Ó ½yõY®ÖùQ6H1ÛåÉ‚Hã$¼j úEÝíÄ‹%Û$²Ê¡qÌeæzàäVež­u%¼‰¨5À–{™v§ú3€ã à¹ù³÷}X[íMÜGm)ž9 $ƒ~0wtÁã#°üj õMUŠ:ͺI¹âóÎâ}Æ-Ó Áç¯4­¦ÝL šâúrÊnZÐG€¿¼(¾ç’9ôǹ8ú–¥p7!¼ÌÌó+Ù²FBª†ÚpWw )äž´³áøž=;sJï¾G!X( óž?žkN€ (¢€ (¢€ (¢€ (¢€ (¬ëŸõƒñÿÐ&~¥ÿ ë÷ TÓ¿ä>«üÅjÑHŠ( Š( Ë÷Çû«ü…2€ ‚_øõºú·þ€´½EP2/¿/ûÿû(  ºÌñIm´q»Ü3/ï¨)=‡µs×ú6±*­¼šŒ lLjžV9ïÛsùÕF\¤Ê<ƦþŠòiâ(cdß–ÜI`s9ùkj“wwI+!¾jyÂÃÌ+¸/|tÍ:ÁˆU,ÄI=ª8£ŠÖÙ"Œá‰¨Ï  `P$2:J($ p=ê²nÍÖÂe=ÙÉ·œ€'¢€ (¢€ (¢€ (¢€ (¢€ (¬ëŸõƒñÿÐ&~¥ÿ ë÷ TÓ¿ä>«üÅjÑHŠ( Š( Ë÷Çû«ü…2€ ‚_øõºú·þ€´ÀÞ¢˜D»üÉvmûÜçè¿Ó4™«JðÞéÏ)\op6ç$ùf©Kö¹¤wkwDV9M¹ÁÅeWšÖ‰pµõ-é«.Ç þ‹8ÁÞüUy.oúà‰&‘c™YÝ2#.Wi¹äg85¤tH—¹VK–ŸTšàÏtˆE·dF¾æ§Lç­Lnµ6l´ÒHØX†W#rqžE1¹3Éñ´ºº–죤—ùƒ¸ç ãéU§’æöÖê(&¸žW’æ9c íD ávñŽÊ8  3­ÙâèX›§ wôlsŒõö¥·}DÇ%̲\ cxUcþ ’;ðMZÕî¾Ç-¼¯ æ‹.™IÎ:žTŽßZÍKÉ<È’k›Ø”Ç)B›Í`PÓ!y<éíL­i N1)E.=þµ-PEPEPEPEPY×?ëãÿ¡L ýKþA×î©§È0}WùŠÕ¢Q@Q@—ï÷Wù e¿ñëuõoýi½E0 d~_gÿÙEgkÂ(­£¼–âH>Ì۔ƊĒ1ŒŽõÌEâ;ÿµ7y?Ù³ò”Ž=à{ü¸5µ:Ni³ µÕ6“:MRä>¢—M樌yˆ‹€¤ÿwÜšÖGIQƒHÈ9äøŠÉ«;'uqh¤2(î`’Ý.Eò¤ÆÖ<“×ÔÓã‰"R±¨U,[w'$þdšuÖ‰E‘”@B±ŒõþTÌ%Ú<À¥Cwã#ôê(¢€ (¢€ (¢€ (¢€ (¢€ ιÿX?ýÒ`gê_ò¸ÿpÕM;þAƒê¿ÌP­€( Š( Š|¿|º¿ÈS(¨%ÿ[¯«è @ÔUT{$Å]@'8*O§¿±üÿ0®¬’öÜÁy¶HŽ •äwÈ?Zç/<-ei Å×ÚØ[¬lU7o›¸í‚+Zu%JQž¬¹àˇ—Jx˜å!“jzc8çëLX$·Y–ùPÞH÷"#'(Í#&;å3³ñïSQZnÅRmÁ\o›¨Ãi:J·$Ȣܪ;7R>éÚW9Áõ­-+Ï·²ˆÜýªi¦†ßÉNN8ì0?ZƒCû:æ=2ÊK½Ép›Ü•)$mòŒåNÝø ‚qì*ÏÙ®d¸fFÔ/6ÕYF#½NGÎ9=IÈ=ÅnØ´¯cn׉ŒJdÈÁÝŽxúÔÔQ@Q@Q@Q@Q@Q@`Þjn^1ktÛ ]Ë òzP+Ûï6Îd—`²–„€)4ïùªÿ1H Z)Q@Q@ù~øÿu¦PPKÿ·_VÿЀ7¨ª¢€zƒX÷±¸a—¹XÈYO—ùUFN;(©nj[[ÃiÃoÇôU©*JJÚQ@Q@Q@Q@Q@Q@Q@bkWï§[›…†Y•rYc<¸ó@ɪ>©¢OqäÍ l‡o˜~ðõ£Nÿ`ú¯ó€Õ¢Q@Q@—ï÷Wù e¿ñëuõoýi·çGýïÐÓ%º‚ß$W¦H¦üäõý rzþ†€9=CGœž¿¡ ÎO_ÐÑç'¯èhó“×ô4yÉëú<äõý rzþ†€9=CGœž¿¡ ÎO_ÐÑç'¯èhó“×ô4yÉëú<äõý rzþ†€9=CGœž¿¡ ÎO_ÐÑç'¯èhó“×ô4yÉëú<äõý rzþ†€9=CGœž¿¡ ÎO_ÐÑç'¯èhó“×ô4yÉëúiº…dHÌ€;çh=ñNó“ûß¡ Ï–ÀIƒq©d&I¥ˆçkŒa9Èüé0*ÜÜM-£À–.åÚ8ià®›´ŒÊüEjQHŠ( Š( Ë÷Çû«ü…2€ ‚_øõºú·þ€´ˆµ´Í>Kˆ!iYU@ÇEã©ö¨nåy´[y$l³ùl~§ÀÖ‘˜y4ÝÇÔþt€7SùѸúŸÎ€ ÇÔþtn>§ó qõ?©üèÜ}OçFãê:7SùѸúŸÎ€ ÇÔþtn>§ó qõ?©üèÜ}OçFãê:7SùѸúŸÎ€ ÇÔþtn>§ó qõ?©üèÜ}OçFãê:7SùѸúŸÎ€ ÇÔþtn>§ó qõ?©ü蜄ÿmYdöåVµ)^)¤Œá’7aõ˜z^£6§¡™¡h™‘ÏFã¨ö«zoüƒ-ëŠ!@«:Ûþ=eÿ®ŸÖ€4h¤EPEPåûãýÕþB™@A -mtÉ%°‘h„ºÛHH:|…HÛ‚ËÈÆ*­Î Ó[,)bñª•# ¸”ì§×œ‘a/?í­7ûnOùð“þûZ,ÿmÉÿ>ßkIý·'üøIÿ}­¶äÿŸ ?ïµ£ûnOùð“þûZ,ý·'üøIÿ}­ÛrÏ„Ÿ÷ÚÑ`í¹?çÂOûíhþÛ“þ|$ÿ¾Ö‹mÉÿ>ßkGöÜŸóá'ýö´XûnOùð“þûZ?¶äÿŸ ?ïµ¢À'öÜŸóã'ýö´¿ÛrÏ„Ÿ÷ÚÑ`í¹?çÂOûíhþÛ“þ|$ÿ¾Ö‹mÉÿ>ßkIý·'üøIÿ}­¶äÿŸ ?ﵤþÛ“þ|$ÿ¾Ö‹¿ÛrÏ„Ÿ÷ÚÑý·'üøIÿ}­þÛ“þ|$ÿ¾Öí¹?çÂOûíh°öÜŸóá'ýö´mÉÿ>ßkE€?¶äÿŸ ?ïµ£ûnOùð“þûZ,ý·'üøIÿ}­ÛrÏŒŸ÷ÚÑ`£çjvóK‘†’¨ö©¯u•fh’Íæ‹‘¸ìhÕØÂÑ-„Š •eâ¬Ù^A¼nä2DªÃiàE€ŸûBÛþzûäÿ…Akͤ…A?¼ÏÞ€.yéýÙ?ïÛ…zÿvOûößá@ž¿Ý“þý·øQç¯÷dÿ¿mþyëýÙ?ïÛ…zÿvOûößá@ž¿Ý“þý·øQç¯÷dÿ¿mþ}¡?»'ýûoð£í ýÙ?ïÓ… ,K÷Çû«ü…2€ Z_2UEBç$‘ü"€ ’ÿÏ(3þl“þyCùŸð¦²OùåæÂ’Ï(3þl“þyCùŸð£dŸóÊÌÿ…$ÿžPþgü(Ù'üò‡ó?á@É?ç”?™ÿ 6Iÿ<¡üÏøP²OùåæÂ’Ï(3þl“þyCùŸð£dŸóÊÌÿ…$ÿžPþgü(Ù'üò‡ó?á@É?ç”?™ÿ 6Iÿ<¡üÏøP²OùåæÂ’Ï(3þl“þyCùŸð£dŸóÊÌÿ…$ÿžPþgü(Ù'üò‡ó?á@É?ç”?™ÿ 6Iÿ<¡üÏøP²OùåæÂ’Ï(3þl“þyCùŸð£dŸóÊÌÿ…$ÿžPþgü(Ù'üò‡ó?á@É?ç”?™ÿ 6Iÿ<¡üÏøP²OùåæÂ’Ï(3þl“þyCùŸð£dŸóÊÌÿ…$ÿžPþgü)GžD³ð ÌÿÝþú?áFgþì÷Ñÿ 3?÷cÿ¾øQ™ÿ»ýô€ ÏýØÿï£þfîÇÿ}ð 3ÿv?ûèÿ…Ÿû±ÿßGü(ÌÿóÎ3ÿ#úQºùçýü?áH ýñþêÿ!L ¨ÜÝ‹1#”.ZP€g;GSØqÖ€+¦«2™ÚK}ñ¬©Ø–Uãß–ëR\j~]œ²ʺ9‹ç ·9úSS“ý9`Û,ªåÀ8=ϵ%Öµ"?)ZVrÜ`®1ŒöÿhQ`'Kðò"œ:îãäÇ$úc8ÅT⼆(à/.𪡸`sÎ ,†³¼Æ±Û3<¤yk¸ ‚ç=¾é¨_[\Ê̬ATE‹ÑÃJŸøéE€Õµœ][$ʬ¡‡F"¦¤EPEPEPEPEPEPEPEPEPEPåûãýÕþB™@T’Ýn|èÝäUÞ3±Šçå}(›l¬ +"‚¤"± •Æ=xð¢]2ÞY¼Ç߂ۊ;IÆ2E0ìØO–¥uŒåQ¤%rGÕ-ͤw%‹£¦@db§¨ÈíÀü©Ï°[îݰäcôcOjŽ=*Ú9–\ÊÌ˜Ù¹É Ž€{sNàG6 ›)ž/$ŽUˆ;@l{rÕ'öU¨åC«à|êä6Acœúí“ï@â‰a‰cLá}NM>Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Ãø®fl‹XÀèãMÿ„ªùöþú4ìÿ TÿóíýôiÃÅ·*0° ÿ,ÿÂ]uÿ=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀ2¤ÿÚ ?³©ê:„z¥ÌP\¬qDjíSÉÿ¯]éÅÅ6ˆ”­}Løu}ny%Ž;¥ß†ÀNyÓÞ«ÙÁ+´''} ~ÙâO1PO,Û ×òú~bŽJBæ‘^×ZÖ®'}­!ŽJ/A&©Ò¦–ÁÏ"äzôÑ9K¸÷©_—jôa‘ÏåSÉMti û_ˆ‚î3ÄI;p:{{Š9)viŠûX–ÔJ·Ñ—hì~XÎ bŽH^Öiq·ÝÇæЃý®øÿdšJ4û4†­}K¸ˆê_ocùSä§Ø9¤R—Ä´2¼o0 ‡i¨ªT`ÕÅÏ!Äz¡ÿ–ãþøZ=ŒžC¿á"Ôÿç¸ÿ¾øQìaØ\òx‹Rÿžãþø{vy ¤““ŸÒ‰+0[z¾—b÷mqq,ÈÒ¿#:õª£U¥a8ßR¥®¥Î¤AsqÆ Q Ï^3ÅR­$¬r!$ÑtØeµÍØx†âCóÓ>höòì.D>ÛÚtª&‚{œd€Áð•7^AÈ…‹HÓã—å¼¹GVÚ3&9…/o.ÁÈ„:F– ±¾Ÿ œŸ7§éG·—`äCäðõ„L×!Tã¦xíG·r"1¥é›Ô »’ÇæâO»ÆrhöÒìˆwöN˜O“œŒä?}qïG·—`äD‰áÍ>eóY\~màçô£ÛÈ=š IÒ.'•sÓsŸÒo öhwöF“‚~Òøíð£ÛÈ=š‰¥ÎqÒ1Àlnþ{y³A&¦A&É%•ÉaåG·{4!Òt¡¸yîJõ?Êo öh– ÂhÄ‘¼¥OûCü(öòfˆ¢Ót©Vy±<ÿ*=¼ƒÙ ~•´‘pç@`Oò£ÛH=š'—F±†##´»G¸ÿ =´ƒÙ¡‹¦i§gïß/ÐáG·˜{4>m"ÆÝ7É$ª¾¹öϧµÞAìѲÓ>oß¾W¨ÏÿZm öhrXi®·=aš=´ƒÙ¡óé–6èi]œd‘éŸéG·{4G®˜òIÙ‰éóQí¤Í¿±­¿½'æ(öòfƒûßûÒ~cü(öòf…þÉ·þôŸ˜¥íäÍ ý“oýé?1G·{4J·Äÿ?o öh_ì¸=_ó¥íäÍ ý™«þt{y³Aý™«þt{y³BÿgAêÿÞAìпÙðú¿çG¶{4`‡Õÿ:=´ƒÙ¡~ë~t{i³Aö½[ó£ÛH=šYD;·çG¶{4/ØãõoÎm öh>É«~t{i³B‹XÇvüèöÒfƒìÑÿµùÑí¤Í ödõj=´ƒÙ¡|„õ4{i³Aä'¿çKÛH9¾RûÑí¤ˆ_-}éûi³A°{Òö²fˆÂ‘¤`åÛ‚ÛÎH¨æò*Â:رb­“Ôï4ù¼‚ÃÞÎ7$³IÏ_Þ9¼‚Ç)âPU*:Ô W¾£JÇ_sšÀnÛ‚H óÓ·½ #Šm‰*!=@c@ ’É%™¤|ÃwœzzP¨©oUˆ7Ú@ò;%brrùÅ mj@V>:!õÍX‘U£Û Mž„ñü¨/±À)9üÇ¥7ì‚ U^6‡8  â ±ªÄ {PdÓ`G,P9?Þ>Øì=(¸X[4§r&JýÍÄsŠž+t…‰I?1 –Þ9ŽeEbXýh(ì!ˆ¿—99cú`P”M˜TU=  ëiÇóÊ1‚Ç>ƒÜþt T²F5÷;4’TFÑ1\wÁéúPig Dª[ ,Çü(IâóãØØ ð}>¢€!ŽÆßËÚ\pwnçÇAé@[Ktaˆ£Ü9“óŠ’h¼å NÜr=8ú{ÐIa2:ƹ^Ÿ1æ€,äó÷x÷ÿëRÉÿg¦zÿõ©€ŠûÆQ‘‡³fù½óÿëPxû¼ŒõÿëSÜ{ÿ¾¨¾cc;F?ÞXáñ’ }M"¶ïºTãßÿ­H™p…“qè7õ¨ÿ7¢þýj>oEüÿúÔ|Þ‹ùÿõ¨ù½óÿëPóz/çÿÖ æô_Ïÿ­@Í迟ÿZ€›Ñ?þµ7¢þýj>oEüÿúÔ|Þ‹ùÿõ¨ù½óÿëPóz/çÿÖ æô_Ïÿ­@Í迟ÿZ€›Ñ?þµ7¢þýjã¼Mÿ!fÿqjŒ§÷˜îþ”†U6°‰!’:ÊÎÎAc¥;+•Ĥ )†üzÒ“ïòŒeՉߜS?=®$–ápÌÎG40äÌ—Q¹ÃÆ™ÀSÈãÞ€%¼3e|¥.0xcñÍÌJ¶@O€à=jšUYVTÏcô  ¶vòE $*"®Ò?1õÇjÕYev2–VÆÔ ai ŒË¬5ã»lq´ |…ïüé¢U¼àâR ÀÁ>¹ëH$p3üû-03níe¸¹»¯¸#¯^¼Pš¦=Ì “øPK¤–KPýâ¸ëŒtÿëÐíaxmŠnçªNvz «akr·-4îW¶3Ýzòh÷öóO&ÕÎÒF‡^òv¶ŠwP—ñ=ÿœUÚ@ôFZjzƒé‰| ·òØœ‚zVÞÎ*V¹ÎÁ­|è¬-« ŒÓŸðªö1îO;$]Nèýë\vû¿ýj=Œ{‡´eˆïgvÇ’çcáí:Í+u¾:ð¥ì—pç}‰×qê§× ÿ ^Î=ÇÎûDZü‡øRä]ÇÌÀ!=ä?Â¥Á™Š#ç9úð¤â;‹³ýïÈ…HÈ.gŠÕÌX&p[h }x¤Ôn~eÜ3†"€Ë?ÞýòÏ÷¿AEÀ<³ýïÐQp,ÿ{ô\Ë?ÞýòÏ÷¿AEÀ<³ýïÐQp,ÿ{ô\Ë?ÞýòÏ÷¿AEÀ<³ýïÐQp,ÿ{ô\Ë?ÞýòÏ÷¿AEÀ<³ýïÐQp,ÿ{ô\Ë?Þý$R±³äz ä|FwjyõOéLÊU&LÀŽ…N)W=ÎIÎx4“Ú<ç"&0ÊÛO¤ÕÆ›[ kV”/ÚÕž`§$ uêqBì$¬µ"HËR‰6ݧiÇcŒööªÕè««'—+lÆÀW¦?úô†=´­É´$܃´qÎ}(EˆËˆç‚=F X¶²û,e"‚@ Éùzš—Ë—þyIÿ|Ñ``¶|©>›hZþYIžß-ÈRß4‹‰Ò)1œãm FŠL»@Ág,.ͲF-àÆ( ŒŸióDo´õB¼gÔ{в[É"í1J=Àé@ : E†LÅE‚Û´ «#HrÄ/ZK‹A$±¼±Ê3”Àèh¥ò›…º†,ù†-˜ÒË"tÓµ0Ihsž¿0çŒQí ²-%¦ #ÁÈäRç€ùdN°ÝòLG'ÜRç€ZC¼›®?vߘ¥ÍÚC„w8ÿRJ—$U˜®>Sgðÿ–ÐõʸÁSsôÿ‘‘KdÓcͶ.@pGåšVVÖT« QÈö÷¢À;ÈŸþx·æ?Æ‹yÿÏüÇøÑ`"ùâߘÿ,äOÿ<[óãE€<‰ÿç‹~cüh°‘?üñoÌò'ÿž-ùñ¢ÀDÿóÅ¿1þ4XÈŸþx·æ?Æ‹yÿÏüÇøÑ`"ùâߘÿ,äOÿ<[óãE€<‰ÿç‹~cüh°‘?üñoÌò'ÿž-ùñ¢ÀDÿóÅ¿1þ4XÛr6ëÈÿ,/({veVÚÉ ä¼Cÿ!ÿ®Iü©×Üîó\‚Ø» @ “~å8Êäކ€/ g7«(“ ŒíãÛž`e]Z_½Ü©C™‰r3ŒõéJš´¼·.|¼‹—sFæÆââ(ÄF5ª–ï~Or‡Lºf!¯œÇ³hQ‘“ëH ÙŽE7¯ó>á觯ë@ :m×’#Ž3’Ý:sí@m#x¢+$¾cn'$çÔ5P@P@P^¶“KŽ21ç|AI 3aIöf‘wÆìdöÏ Ö²ÿ_øP„_.«Õ€üi€¡‚<ŠGtEÜìz“M&À\QHq‚9é@ Iòƒm88=)´Ð–5#:‡=žOùÅ{…ÀËm¥×#f‹0¸ìZ@ e$€À‘מ”ìæP@P@P@P@W°\I¨‘.0 ¨A"„or);Ã,x?\P%âùúäŸÊ˜eô«o#©uÞtœ¥Ê®5n®ÂDñ>ñùBƒž:x­yl“õ±ª-XÎ%ÝLJҷö7’NRÙâ÷ldúŸëÚ¦–•’ô -4-^ZÝo½˜ã$wàŠ¦ÕÁ!­§¼¸xï‰]…c9'©ëœóé@lHÖŒ÷’ýŽWh]Ý?*‚M:m³°ÔŽã÷~bûu  6ËMö¶•OTìç@P@P@P@\˜})02®Zø€A*«ŸnhxãI Y¢ã®qN.ÌL°–öÊû–a’OñƪìVCÎ× Éx` Óæ}‚ȶV9BªH3ÏÊAÇ©Õ ©äÛoAç†fož{b´¼» È|iS,ŸhF›@$f“m«X‰#H¢”íŸçgË.AÏS×ô¤Ûkaè2xm®&”2¯f9ÿiÉ+XM&= Hâ?½eBW xöö¹®Çb'²†9w´¬¥ÛqÔ‘þÔ›B°‹§ÂÅæ¹8Î8éùQÎ÷T>Ý ´r¢V$ü§#¿¹¢MÈ‘gÏ‹ y©“œ ÷Z‹1ÝWGû¬­Æx=¨³C×+m/‚:9X® h¡bÑ‚ <ÐÝÂÃ>ÃoÝ3שõëUÎÂÈ_±Â¨R26äqK™…¿dqo›%·zš9˜Xh²„Àãxúýió°åD²D²G°“Ž:J”ìî; ’Ú96ï•mÀç¡Îi©4+ò“Îó±óíÛŸjWv°Xa´ˆÈ\ƒ’Û=xÅ>fCEŒ 8läg®ýBŸ; "X¡H¾à ` Ÿ­Km‚Vmb,Y·Nyj|Ì, ´Œt.8#ïQ̽¬nI;¹Çú SB“AaZÚ6ÜzõÏZ9˜X_!<ƒ!is;Ü-ÐÍ» ç>”s=‚Â-´j»~c×’Ç<Óæaa¯g¸s¸61ØÏOð)´D ;Æì2c9ZI´Ha@PWûíõ¤À¡qþ®_¡¤âù¯ýrOåTW¨Ú™Ý6—² ƒõ€Kksko峆9cÀÀ”Ð'Ü_¥0ûÉõþ†€*ßÂ’ˆ÷ËåàärFyÔzP]bÙdÓÑEÊÅ´pÌIjʬSJîÅÁÙè-•‚(@.70±uõÏNj ’а¤îÇŦ˜¦;.O+gL·lœþ™5d¦ˆ ¹>ð ¯ÛŸå@]&l¬í¹Øq“ŒãéúÐäÓb{¯6IÉsÎ8è1Ÿä(#ÒÑ'ßö–2Rxàp(ŸIŽF.÷3˜±ù¸÷ ±‘–&K¶Ú«Œ``¥LšPû …®\á‰^9ÿ?­$ÚBJÊZæ@<óú ‰´h‹í{·˜•ãCë@ãc=.G¨ €)ßõZL X¿ä%sÿ f½úÿ„"ý0 ( € ( € ( € ( € ( € ( € («ýöúÒ`P¸ÿW/ÐÒñü„GýrOåT[xHf9#å#±Í —ÍLí#ëô4ºŸq~”Àï'×úŠâßÎ*wÛž™þ†€(ê–rKn‘¬Š¨©Ý““ŠÊ¤šìT]‚>8´µ·iA¿9AÜŸCWò«Ÿ3¹½µ²ïž;’¤~[g9'ð­SVБ±i†&ñ™wä`1Ž1Ÿ¨4?öE©e>aÜ­“´“×OÖ€ÙÙM+Ü=È|˜’1ÆþË@iÖÉp1rÆL‡Æp£ùÐ\i–LZIgqÎòwñëÒ€"]&ÒdGŠèìå=1ùt  bÓ­žÏÊ%‘[q*@äqý(eÒmf*Í;m\ñ‘óÿÖ ÿ`ÀÛ·JäÈÆÖ€&¸Ò!¸vw’MÍÔ‚?/¥3ûÜ ${Žs@ílÒÕ˜¡8 =ÿU¤ÀÅ‹þBW?ð _KhD¬2 ×H%qÆ7пiv·Q»¢‘ÉäU5`”yJ ®§’$’ ‹Ì ¬ <ãZ|¥û'{!˯A$ˆ‘©ù™ÞvðÇ¥¡ìŸRÝÕêÛÉåmù¶Ë’D(Ý\¤þ!¶S|rnhÕþ^FN8ýiò²Õ2Ýž¢—‚sn¾Oëþš±2ƒŽå<@ ç·(Àd„pF0;œR °ºÔÕƒ·:ãßßùÐý­þ’"òÙ?6A~¹ u¨š3 ‰¶…ÏQ’rF?Jdzì ˜Q¶î*Aà÷>ŸJyÖc í‰ó‡Á$m;FzÐÿj„\ËSå«• 23Ÿð4ëXU0{žOûçõ7ö”gN–ñTâ0IRFi¥qÅ]ا'ˆíã¹XLÅ€eÁ>Vj¨¶®=µØãS¾fÁòÈ# qßÖŽQ{&Æ/ˆíÙ$ao8òÈ r¯½¬~Å÷$Mr3·t.7Ëå¦9`ŸÎŽQ:lµuxÐ\¤A©œ±lmÅI‘ëPƹd$ìÝà €zþ?¥*jÉçyr*Œ¾ÐUÁÇÝëø°  ¦\\,Xê…³øýhJ( €*¿ßo­& õrý 8ßÿÈEë’* :»Ù.csüç­ ¥20›QI Jã?-o§Ü_¥0ûÉõþ†€€"¹ˆKãþ”^âÙ–Ý)vml–=ù¬ê)5u"··4ùDæGŠIàgñ­u“'dE›¦É!t,ÌdŒ¯áÚ“VäÓôð¿$à’6\sÇ¿>a>ØÃ1䪇tsŽ~¼ÐŽœï$ÿjcœ†;—éé@ ºNšQ|H»aéô –ÂÂdf†èF‘Ê•×ÛùИtÛtWò¥fc¹Y²^Æ€tke7JKg$°ôÇ§ó  °D°@‘!%QBŒõâ€@NÿªÒ`bÅÿ!+Ÿø5¬¿×þ!À0(Àô € A@‚€ JjF‘çËE\œ£>´ìJ01Œ Pè(À ˆÑKEŽXÔа:b€ñFì¬ñ«9RFvŸjv‡bP^4‘vº+/¡ìA@Ѹ ކ€ ( €*¿ßo­& õrý 8ßÿÈD×$þU@u—¶ÐÍ:I)l¡àֈ⠬Hç9ìh@n'Ü_¥0ûÉõþ†€€Oõmô4Ù´,§®hš5¶§´Š§lxBàç€ý)7eq7er¦›2\Þ]JÀ(d;Æàqϵ5g‰;‰¶..U ¾20‚‹QA§BII£ÜÛ²LƒæÜ•B–ZbÌäJDŠpÎÇ÷ç=q@ zA\ ûN0wõî?•J,ôÄ`ÞrpTæÜð  tùla‰ÒÞ\ ÃçÏÖ€,Åym3”ŽdfôÏ^3ǯ^Ô5P@ïú­&$d Fè’94 Ö°uiÎÖ±¢Ö£L€ ( € ( € ( € ( € ( € ( € ªÿ}¾´˜.?ÕËô4€ã|Cÿ!ÿ\“ùUØ]@%$ƒ†Š@Co Ãós¶Iöùh O¸¿J` ÷“ëý -$ŸêÛèh$ŒIFèh¼–(m^ÈMÝöŽ?*‰ÅÊ6NÃZ ³±‚ÜJ~ô’ðìO&œcbl“º4í>Y‰TS$x)éUr¬ÑGÌÓb|…Ua»“8'ƒÇùéHCM2á|™ v€dëÛ®(Lé6†Er•]£ç=:céLÄË"yÏ$ПI´ecÙ… 6œté@¶Ó`¶ ®æpAÜÍ’H  tP@S¿ê´˜åçúËÿ¢J¨î‚[ød>qŠŸOzÒ§B"tñ‡Ë–=N²,16:¦qèhÄÞ©ù16z¦>†€zÇÓÐÐ!{ê}JMÜÇÓÐÐûïXÿ#@%ÏTÆ}JLMޱôô=hq7ª~F€&îSò4˜›Ö>ž†€‰sÁLgÐô c¬yúLMëäh}ž©¡ c¬}=Z½õN¾††&õOÈÐboXÿ#@ ûÜõLgÐô cªg‡­6q!‰vgpa§w Û‰ v¯\·Ÿã@µý¿r…ÆÜrN3šQÿé™S…pÜ8é@j÷ÛëIŒ¡qþ®_¡¤âùúäŸÊ¨ÊVE”+–鑚‡+Ã_n>P1Ï;Hì}@ª´Ÿq~”Àï'×úZI?Õ·ÐÐÐ@WG]ÁX’î)5u`!°† }ÐÆáåQ‡nþÕ1*±NöFdi‰)/)ÜÇ^O^9í“ùš²Dšb\¨K‚'Çàþ¦€5㿵–EHçFfÎÐ_¥X € ( € §Õi09Ë¿õ—ÿDþ•Qݶ,xWþ>¦ÿtUÔèLNž³(( € ( € ( € ( € ( € ( € (  ¯÷ÛëIBãý\¿CH7Ä?ò_úäŸÊ¨ÒP  †®¬l»F lãø‰ô4â­ Ù´Ÿq~•BûÉõþ†€€Oõmô4´PhW$3¸Ðaks<¢ ƒïáqŸÆ‘NöW(gJ‘÷:&óÆ®qÛüŠd–ÿ³,÷3y-ד@†ÂÖWŠV^†€,P@P@S¿ê´˜åßúËÿ¢J¨î‚[<-ÅÌäô *êt"'J%8¹Î:÷¨³,u ( € ( € ( € ( € ( € ( € ªÿ}¾´˜.?ÕËô4€ã|Cÿ!ÿ®Iüª€ì.÷ícaÈRqšI&õ ¶¡#P:à“€Oj¦Óz6“î/Ò}äúÿC@ @ 'ú¶úZ(ˆÊ ó¸Ð!’žUŒ ûçn ü{ÐSNÊæuÄÚP#ra¼Ì€ªA$óõ ’ÊjÖ¬¹bÈ@ÉOç.±dÛq)ùŽå<Ðê( € (  wýV“œ»ÿYôOéUÐKbo §™<êNQŸÎ´›µˆ‰Ðª[î¡IË1›ñZŽæ3¶AÇ'<:Z ¢BÊ%€¡&¦ÃKàH¤úšv` š22q€ÙÏcÒ‹0¸£DäàsÞ‹0¸yÑà1pzsE˜\quUÜXõ'ŠV<Øó1séšv`5'ŠEÜ’)ÎsÚ†šÅD@"DÁéó ,Âàfˆ<÷ôëE˜\_61ŒÈ£#<š,ÇpyR=»Ø ÇÜГ`Dbº’z`ÑfdE$PGbh³C«U®JV¾|CþZ§ýô)ÙŠâù±ç×9ÇZ,ÇpóimëÔç¥`#M©%Ô2yíE˜\Q,gprp0h³ ŽV 2¤ê)P@JiUóØš@Py¶¦@07õ€ä”]j+‰e¡K¤Þ£<ÃÔ~~ôœ˜[]I$ α늫ˆ“ÏoAEÂáç· ¢ápóÛÐQp¸yíè(¸\<öô\.{z .=½ ‡žÞ‚‹…ÃÏoAEÂáç· ¢árÉË9=Å)Æ€Ø!çýPþTŠæ{·ˆä"?ë’*¢NÕÝP¾ìsÆMD£q‘1RŠ(UGÁª´Ÿq~”Àï'×úZI?Õ·ÐÐÐ@ F‘ÏÞ=¨­Í¼×“¤Pyr/,û@ÝÍDd›vfô+>­l·2#[1Ûœ0PzuúU€äÔm™rÖ„dÑNy8þT4‘É2ùp…F!rFðNqéÅ\F:F£ð 8Ò%Û…‚€@P@ïú­&$`FèGÜäu4š³ݰàbbÊà¹s´d7QêzÐ’[“E¶Ô‚JÁì#(cÀ^ƒÓ×Ò¢Þ`9îÒR¾nœ¸q¸–nÍÜcØÊ‹XþÐȿ٨cÞ00O?7OL~&‹jÄ[Üg–‘Øìÿt?SIÝ:ZØ !a·ßtu¥vÄVƒn#€mä`(ÔZÜG9Q¨°Ù¯ÝŠEjùv›·l‡vsœ Ѩ {k'dfŽÇ÷z Q¨–ÖRœÉ,v•ä†@_"Ëò­ý>êѨ !³>QÅ€­ ÉŽ}ÔQ¨ –ÞÊhÙ$Ž"­Ôp3Eب\ºùaˆÁaŒâ@ŠÂ46qœg ÷÷­P‹Jwõ¦ä§÷Z<”þïë@’ŸÝýhòSû¿­Jwõ ÉOîþ´y)ýßÖ€%?»úÐä§÷ZÈ»¸…e‘7ò21ƒH£iÊD?•r~!ÿˆÿ®Iü©ÔêöM}lФž[g ÒvÊÓì61[ï/°OÐЄtI÷éL¾ò}¡  “ý[} -Äl0~ñí@¬ï#žêh’Œ§–õíÍDevГ¹V]b5™£Kfg‚r1øÕŒ?µŠ,~e®Vùyãëüÿ*HõH£ˆHöes€022ü(ÿÛi´²Íóœ÷ÿ »i;NŒX.TŽW¡ÈúÐôP@NÿªÒ`bÅÿ!+Ÿø4í¡ŽYÇ˜Šø†hB.ý’Ûþ}âÿ¾0ì–ßóïýð(û%·üûÅÿ| >Émÿ>ñ߀²[ϼ_÷À ì–ßóïýð(û%·üûÅÿ| >Émÿ>ñ߀²[ϼ_÷À ì–ßóïýð(û%·üûÅÿ| >Émÿ>ñ߀²[ϼ_÷À ì–ßóïýð(û%·üûÅÿ| >Émÿ>ñ߀$UTPª¨èÀ´P@P@PWûíõ¤À¡qþ®_¡¤âùúäŸÊ¨«U[¶‰šÏO™¹Ç.å×^b-6éîìVI« Ž{ðy¦´%Úú*}ÅúS7ÞO¯ô4´’«o¡  €#°1 àI  ¶ëw<ª±mn ;ŽÙ÷¨„ùƒ­ŠçS’7ÄvDns“ŒgêÀ_íY€qöbÄ.Q°B±Ç<ýh몹m¿es‚yŒý?*HµIZEˆÚ»1þ%ázÿžh1ªI¦4±eRARFÐÆIýhÅî§öc$FXŠ–fàzsõ  çZrêÕˆ †ïŽ?J{jî&d[W*½[×é@]JIAˆâ|‘ôúžÔj³0U£q“Èõ?§ë@ öÁx…¶(ÛH'Û?Ö“>/ù \ÿÀ(©lYd;[Gq2Ø[ü¼{wúøÕû¢Ôž¤a@P@P@P@P@P@P@_ï·Ö“…Çú¹~†oˆä"¿õÉ?•P…˲¸TPÎÇ€N?^Ô’l.03ÊÉ·o§CÁ¥îîT’[©÷éTH7ÞO¯ô4´’«o¡  €·!‘•b})4š³¥…Áyå·þRGÓÖ¢t•’îE.§p%1ÇdØ äœc8ôô­FuØã‰Ï÷Ž»²GÓšêw1ÄKع*1ò“Éã=ºP[V¹ ?â_ %sœð?JQv²²ù *öeߟé@ }VUEGµòÙ—+’qÓ8Æ=±øÐºôÎ1žMP@¯UW@çIü„®à ×±ÿ_øP„[Dqæ”ÇåÀhªmªìyÛ–Èþ2?ýj¿pZ–XËä§÷ò»°=ù©V¸ÊÐ µ?8r77qÇçÖ©ò‰\k¶¢QvFÀî:ãžÿZk’á©-â]8‡ììÊAËãûTÅÅ^ãw#©PcB9#ΪУ¤{ÕBpù@Âç9ëÒ’Q DU¾F;†yÝŽ”{¨·2Àƒ›G9ç¿¥àj8íø!v¼®9õ£Ü£µ5·"€ÇLNù¦ù,-Eݨ•?"·¾:çëéG¸–¢2~ów¯ËŸ þµ›°Êêo1q…ÛØÏ=‡áWî‹QA¼ç!@ÀÆôç¿­/t5%_?Ë”7äì'öþ”‡¨È ߘ<ð6öõÍ7Ëm_¨9ºÜvÜtéGºŒS~Ê §'®>¾´ýÁj)kÌ6 þ´½ÐÔr›¢ÊX`nåF:QîP¸7bU*”=O~´G–Úƒ¸¶æäÊL˵vŒŒgó¡òÛ@WêW-¨˜ÈòÔ7#‚=8=j½Ë‹Þ,@nŒƒÎ o8Ç_Ρòô¸ÓöÃ3G¸m>ßçùÓ÷l-FüßÇ÷»ýk7¹E+õrý 8ßÿÈD×$þU@uZŒP»£M+G‚UHïžÔãS™%Ô—Ë1F¨K«´dvâ•îîU­¡¶Ÿq~”7ÞO¯ô4´^þY"µf‰w7?/¯€ó°³ód ¸<•ëŒÐ{[‹§°•‡˜`¨#8ÏcNVMØKa©}¨‡(ö9 Ÿ˜gçÿÕHc×Pº ³Y2¨\œ’r:r{Ð%¾¾d_³36ì+*6ïÛüö  úí›beäsŽÞÞçò cÔ¯¤PÂɰmläc§Ö€'×>D¯%«! Jpy#׎(ŸÚ~K·ö|Ÿ.p0yçÓ¤¿2«ÁÆpzŠZ( €)ßõZL X¿ä%sÿ f½úÿ„"È…•Ž$b÷žƒÐUÜV&©P@P@P@P@P@P@PWûíõ¤À¡qþ®_¡¤âù¯ýrOåTep¡wÀœt>´–àAn$ÀJ?Í͸÷ïBmîoVo§Ü_¥0ûÉõþ†€€+ß¼±Û1…w71Ÿ˜gœúúP[K’Y™å“€ÿ f/…êzô9ý1@uÐ_øþ“%Xu8ô={JLœ‰Œw>T’w >ƒ©ÎOOÖ€}2æHÊ%ÙP]˜ƒ¸ƒž óÓµ)Ó¯0¡o˜…HÉõúþ´fÎÚ[ws-Ã̘PiwAÉûkf%€ÏÍ•ׯ ]2éݼ!T´îàŽàç9ÿö}ßœXß>Âá±È#Û¯J±´±ÙæFç÷¹ù…6òÎyícЧ‰Ð‚dç-ÁëŠiبÉ'ª¹Y4»‘6ù.–` àH¤œŒuè)Ü·5m‹vvÒÛ¤(òX¡ñ‘“ëŒãµ&g'wrÕ!P@P@_ï·Ö“…Çú¹~†oˆä"?ë’* ;Wûæ¤äéùÿ#M²Ÿq~”Àï'×ú\Ž™  ÷Í2Û7Ù×tœàzð}G,޶[æRpyÁ<þZÍî_O—ÊßpW8;IëNV¾‚[j 6°®Qà‰†OÏíϸúRõºÔ°YíQ@\㜓‘Ç_Ö€®5D8Kur#vOOlb€6§Ío mïÔõô ÚçWò“ýC3|ØÚ8éÏ=ý(æïUÜÀY'ŒžøúúÐ广SŽØ3Áè|–ÞkÖ¹TšÝR"„–89é@( € †¼>”˜W?ñûÿ_æhåúÿ„ú`P@P@P@P@P@P@PWûíõ¤À͹*àô>”ŠåÒç!âùúäŸÊ¨“µ¾j@ŽNŸŸò4Ð)÷éL wfè\Çä“¿äh+_ùfcv—z… »c9㎵Ñ]n\¶fŒò^\XDÖÁ’r~n€\æœjì–¬ÂÞK¸LÆïÌ<ÕÜ3nzçµP†)Ôšî‰,06ÜgŒÿZ·/Ú7Ç€qÎ|¼uíœö  ª5/´9V‡rI?#¿jjÜj†â8Ì*c·Œ}sÖ€o&ªÇ÷ðÆ«ÈãéÁëë@¬C*²UÚ2ÍŽ½øÍ<¾¥åü±·šâ6à¯OÀÐÍ&ªb]° $í=8Èýxü(MI‹²!þ, ŽqŽr;u  âkóÔ J¤ãh8çõþt×káGkXó&ܰÚ_˜PX®‘þñrÁ¸Îl‡×žÔbI5G¾]Í“‚>lwúP‘™Úk¥U”ƒ•^ƒšL 7?ñûÿ_æhÕ£”³¤šà[Pï ¸ä¶ÏºzÕò±]TŒ( € ( € ( € ( € ( € ( € («ýöúÒ`P¸ÿW/ÐÒñü„GýrOåTjÿ|Ô??äi 6Sî/Ò˜ï×Ú#òOÉßò?ýj¯ªGhó/ÛÕŠìÂmÎ3žz~º_¡)[ÓclmŠ«…•¸Èëý1øÓ0j‰2n•˜mňÁã¿§·øÐ<³K„˜¢4¼’AÚ¹=??!@ÍQ.üÔ,ÑdåIôÈéŸJ•µDJnìr[߯é@:¾yc=¿úÿ•>3ªoMâ,½ÓŽ¿ýj‰µÓ€”nûØÉôï@:Á€±ùŒ½F>CŸ¯§êhði'ç ÊCÁ·ÿª€%±:•þÖcå©  ´P@C?ÞJL «Ÿøýÿ€/ó4jÑC͆éŒÐ´ìr,…ð„lr:Ÿj¦¬!¢î"ªI#r†Æ3×·ÖŸ+ ˆ·¶6–9Çðžôr0º»…Š€Ç,p>SG+ ¡Ò\Åìbsô¡E°¸ß¶CêØÎ>飑…Ðèîc‘Â&âHÎqÅ-Äk¤I0 Œ¶8£•Ø.=%WVeÉ H<Ôš°îEöذNawr½EW#ÉVdi5'ru©¶—ÈÅÜEC í œã¦9þ´ùºÄr>Å$·=jZ ¹Œ>ÒH;¶ô=xÿG+ ‹$éÃç¦xîõ¤¢Ø\gÛ!Ý´'ŽŠ{Óåaqõ¾â»úŽFCÒæ'“`$63‚¡Å ¹-H€ ( € (  ¯÷ÛëIBãý\¿CH7Ä?ò_úäŸÊ¨Õþù©9:~ÈÓ@l§Ü_¥0*]¥Ë\Fal'qøq@µAj&S|›×gÉ€z÷þ”º¡®n„¦+Ʊ¶û4Š’*Áº3ý1øšb ŠÓRI“3± Í–g$ž8úP=ž¦òü·#irß9È\žŸéì(û>¦·~lrNU›®2:}1@ˆõE‰U$PØäœOo¯é@M\eˆŒtÀööúþB€jÓ|±àýîúÔÔ:¬¨Q$Eç9Î;û ú~´¾V¬Ñ®ù“xÉùpàõý?ýt»5læGž~=¿È L56ºýÁD‹pÎì03ŠÑ € (þðúR`e\ÿÇïü™  –?ëÿ DıVˆŸjçø‡­]…q~ÍÍ¢%àcŠ9˜Y- >Xì9öéG3 !~Ëea‚§#s0²ÐÆä–E$ŒŠI´; 6ЗVò×+ÓŠ|ÌVC–‚±¨ ä`R» †6bÆ5$õ$u¢ìv#D"…ÉÉÀêh»`0ÚÀsû”çÚŸ3õ’ªž¸®Æ1-¡DUX× 023MɱY –ñG&ô@­ŒqéIɽÈ ¼%‹“$ç8ïG3 !^ä`ÎŠÄ dŠkaØAo׊9˜¬„û,‹y)“ßm>gÜ,…ò"Æ<µéŽ©s0²$¤0 € ( € («ýöúÒ`P¸ÿW/ÐÒñü„Wþ¹'òªµ¾j@ŽNŸŸò4Ð)÷éL w‘\=Äf'£׃ï@j¿eY¾„J›0¼p~ÿJM¤4ŸBCÔ–ÞD¢9FsÐñ‘ü‡æiˆ‚ èçCö†!Y‰fœŒñÇÒ€ôë÷—‹’¨Òå€ýÜžŸŸOð ìZ‚݉£›åÉù }@ö銔[êKªNÇ$‘è=¾´‚ Tsö”æ(Å‚]$'í’ $'½  4P@ ÿx})02®ã÷þ¿Ìнð°(æ6¹*zçÿJqW.æ,¦¦ÒI-ˆÜîƒ'œ€ p?:«…ºrC”±”3 €Ý¹Ç<}hå+Ù®åëKÃs4ÉäºÈ›ø©X‡$@º¡ Ì,ì ƒ´Ó¦3׊D’‹íÚk]ªŒàg àâ€#—T±_!ÎpN?úÿJ¸Ò²Ü$B'*À’ãî­U›P0M4f2û1€ ôÇ­BuI¤¸Aù\«î9 ŸÏühɪ¼±KVÈRJ³c¡Ç¥<êgp_ òÁrN û{P¡ÔÈí)]ØPs»o_׊…5w‘Y’Ô;‹Œ»þ´õÔÎâ¾S9ó ü ŒÝzšµYÔË ˆ B–Îv•ôúŸÊš*)7f'öà —‰ ;DˆŒà©ÆOáš|¥û=.Ok© ˆ^F‚HÊ– ¤¶i5b%Wb$ÕÚEc«°;ø8lõéH·îXÈ9÷þT뎬ƒ³“Ó42ß³FÅ·åFÚO?3Óõ  ×ί&cÁöÎhÍP@U¾ßZL êåú@q¾!ÿŠÿ×$þU@v¯÷ÍHÉÓóþFše>âý)Nî 丣}«Üzðh¾©%¬2©½‰fR˜MÀpsÏ_“vOtJm®%±¶ÏåHª2zƒÜ~ SZeÔs!'j3ÅÉ$Çô÷ }*íåÏÚŠ#K¹Â±û¹'~hþϼ[¿>9ÀÁû…¹ïŽØéŠ”Y߈•ä/sì;cëùÐ-5 söÐxéþG×ô Çk¨+¡k°Gñd}zqô  òYêk3¼W*LŒ ÷}ú~”ÿ±j\x7Ï|j•­ï…ª§ÚK»;ÉéúP‹®"ƒmÔÞl¹äŽŸÊ€,P@ ÿx})02®ã÷þ¿Ìл5VŸæàddP€Ð¦@( P ¨ldƒ‘žÔP@P¹À''P@¨ª»U@€P€ :@ E\mP1Ó€€ B€@( €êÐb€ ( € ªÿ}¾´˜.?ÕËô4€ã|Cÿ!ÿ®Iüª€í_ïš#“§çü4Ê}ÅúS¥Ý´²ÜÆé&ÑéëÁö  ڭެª×Q¬¡“ »ó×ê)7a¨¶Jm%žÆØG9‰ÑGÌ9ϨÄA‘4S#,øÌwu$Å#èóI.MÎÔiwºŒò¹$Ö€û2à^yñÜ*OÉž{ã§¶(U°¼ò•ïh¨'Ûÿ¯ùЋ àsöö÷ëÓô F•t²o‚ø¢‘Î;õ?Ö€ØjJ]î€Ä…”qŒtöê:zØßyÊò]‰X0S2?ÏJ|w‹v$’èù!˜ù@õäãùÐ…P@Ï÷‡Ò“*çþ?à üÍ\±ÿ_øP€¿L€ ( € ( € ( € ( € ( € ( € ªÿ}¾´˜.?ÕËô4€ã|Cÿ!ÿ\“ùUÚ¿ß5 G'OÏùh ”û‹ô¦;Ëf–æ7ŒqÏ_jƒTºŠÊPÓ¢Ê07cŒ§½'+ Fäf×6Ê'1:(;—œô?Ì b+ä,sÆc¸A±˜‚£æäçÿ­@ &Œ²H]®T!—{¨’@úòhþÌoµùÑ]"¸?p®:LP«§NaUKÆUÇU'Û=þ¿/ömÐä_ÉÓ¹?ãõüèñé÷èMô¤Kryëëø~Ti— ±MAÂcä Ð^´¦ÆöKdCsåºîË+FN@É  hÚ7Èê9f<š’€ ( €!Ÿï¥&UÏü~ÿÀùš³lÈB1ŸJqÜl[¸p|ù0v3ÛÒ«™v‰êFJ( € ( € ( € ( € ( € ( €*¿ßo­& õrý 8ßÿÈD×$þU@v¯÷ÍHÉÓóþFše>âý)NòÛ͹ÌÁ1Û=zÐ}Nñ,&V‘žb`nÏ?OzMµ°Ò¹+Y‹‹e3˜ÝTËß§õÇåLExt¸xü»´ùŠ…ûÜœã¯ô “I·y v¡D»Ü3É }Ï?Zš­yæÅx‚P~àç×óÓ2élÑ*­ã\óÓ¾}¿Z“ 9Òçç?ãõüèñé’#£}²SŽO^zûñÿÖ dÒn…†ñ€Ýß#9ÈÁë@ KœDíöÌÌÍ¡›`Ær½sŽŸ•M6™q2 7TU,€äã<õ÷  0¨ â€ ( €!Ÿï¥&UÏü~ÿÀùš¹cþ¿ð¡m"|ÎI7Ì ý*›b±UleLùRˆò0vþ?ýj¾t÷‹/˜Q7d‚¹'¾5)«Œ¯ œ±C©ù‰<žãNiŠÃÊéд`€F{Í58®fX¹‚YD>\ l’3š˜´¯qŒû,ÛGï‰m¤³cžýió.ÁaÖå°Vãoœtÿ£ØV`¶s+îc,Y‚ð ˰Y‰ö9Œ[Lä±M§$O­êû‡›iÌ…Ìçï ’öâ—2µ¬;¬n tݵ‰bí“Iµp+›K‚ÙMLš®hö˜ï³Üç>p6xÏ·øΗ4{˜ø¡—쯲íœ0bqCj÷C¶„kk:±"Q‚Á±“Øð£™ Ìš(¤D4¥™‰ ÿv“hv*‹[Á‘ç“ÈÁÞyçŸÒ¯š=…fN-æ Ÿ1~ønüà`Ôó!ØcZÎv´0!¹<äQÌ» Ìq·ŸæÄ»ràžÙÿÒŽdcàŠxÉß(u'¾IïÿÖ¤ÚcW'©P@Uþû}i0(\«—èiÆø‡þB+ÿ\“ùUÚ¿ß5 G'OÏùh ”û‹ô¦;Ët’æ6i‚Û8ÏZƒT¼þÏ”0ÍÞ˜Æ #ÛëEÚW$6‘ÜXÛ#ÌQ•AVS‚z\~”¯Ÿf'ŒGx‡k1TFäçh²i¶M!’KÄÂ˹À`;’çëúÐÿgA%æøï΃ŸR?C@®”¯…¹m¸ÆW¿A×ðýM(Ñ€92çÿ?¯æhñéB7F|§'ž½Çô .ØË]>rNOóëë@ úK5ºB.\*îù±Ï'4zÚon‘-´}æêh@AèsŠ( € £ª]Åe;mŒ`‚qùR`f>þL ¾y f™ ?$;ЄXÙÈ6²ÎXŒý㊾f$yáK<¨ª:’¤i6H9ƒŠ0M.#¯qÖ€Kèê@Î{P^âñ¾T;G=èÆHÇW_΀M$ +ŒóÓ=(ÊêùØÁ°ppsƒ@ æ&2qõ 3D1ûÅä€9ï@ æG¸.õÜsžM:€æÇýõãÞ€°Èî •‚Ç*±+¼`õ_ZÓD£§( € ( € ( €2î¯á‚óììOšÀ²®ÓÈúô¤c'›hd#ãݨ¤#âù¯ýrOåTjÿ|Ô??äi .²"i`ṮCær1Ú€9Y¦áƒ/M¬@î:wëEÀ\aÙöòWo'?筼ȓ[Å Ü_u”àÿž‡ð¢àB–‘¤ŠÁ˜*3£Œdç¯áEÀF²‰å9rD›ÈÏ^IÁüè¸ÙÆ×"pÎãZ.µ¤L¡ m c ÏAßð¢à4XÄ9 à㽿Ïâh¸ŽÖ(ÝKü§'œg¯§Ö‹€Ö³ˆ¾àÒ€:ûæ‹€-¢¹‘öƒ¼š.¥ª$ÂUf Ú·%œ•$íìOÿ®‹¡öãýÁEÀ>ܸ(¸Û÷Õ¼;í“'ÊX(&€+Ïq%äÌÌh€c 9ÏÖ€+G•w!.]œ)$ëŽÔ žæÖ+¤mÛPîÂ÷àëBv*2qÕØ}šåížþYó&€’pAã§&«™Í²FÒ­#Ú I…]¸ÝøÑÎÇídYµÚË,‘©/)Ë4›!É»"ma„“ûÇÉ$‡`sž½©\‘ÞLxÁi1´.>^Ç#µ©k gåßÛ±‘×$ú{š.–°F¡B¡Jà…è Ñpíát(w쀼`c8íîzÑp,E"IJª.„’8àž¿Î‹PYÛ…ÀVå6ÇLçÒ‹7—rè²±+ŽqøzÑpâ·(Ñ© xžÃÞ‹fÕÖ]—žZ‰¤A’ éEÀ¨t‹c)—22y¹pÙÏ¥W;5ö²µ‰£²X‚„–O–#ÎçÒ“‘.m—RC*(QJä ç· ¢à{z .ç· ¢à{z .ç· ¢à{z .ç· ¢à{z .ç· ¢à{z .YõE‚æ+v_žPÅp8ãÿ×@t‚f”È3€£ŒþöA¡@r03ô¤#âù¯ýrOåTjÿ|Ô‡ çœŽ>†˜d¶¹0k§!†î×¥a¼'?k“þý­ɼÿŸ¹?ïÚÐä^ÏÜŸ÷íhò/?çîOûö´yŸó÷'ýûZ<‹Ïùû“þý­EçüýÉÿ~Ö€"óþ~äÿ¿k@‘yÿ?rßµ ɼÿŸ¹?ïØ ȼÿŸ¹?ïÚÐä^ÏÜŸ÷íhò/?çîOûö´yŸó÷'ýûZ<‹Ïùû“þý­EçüýÉÿ~Ö€b¹ò#‰g*¨;F9úÐÃÄLìe.ÍŒ–Oð cÂHYÌ@ ÀÇã@‹–\,»=Ö>Zd\Ã(“Î.@ Œ`géô ™o%}ßidöXÆ(‘yÿ?rßµ ȼÿŸ¹?ïÚÐä^ÏÜŸ÷íhò/?çîOûö´yŸó÷'ýûZ<›¿ùû“þýŠ<‹Ïùû“þý­EçüýÉÿ~Ö€"óþ~äÿ¿k@‘wÿ?rßµ  0½Ì0¤jÊBcÿëÐüû¯ï/ýûÿëÑ ÃϺ It`«ÿëÐçÝyïßÿ^O>ëûËÿ~ÿúôy÷_Þ_û÷ÿ×£@Ϻþòÿß¿þ½î€zrp—ÿ× AçÝyïßÿ^}×÷—þýÿõèÐϺþòÿß¿þ½ž}×÷—þýÿõèÐ3Ý é’3/ÿ¯@„ó¿÷ïÿ¯Fƒ+IÜ’ûK.{Çø’x¢XÂ`e?úô沕,0F>çÿ^€9_.ÍSo¤j?Jb;Gûæ¤Ûï'ûßÐÐð}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€*“ ^FX ŠPk;óµ|Ä`Û‘ÿ×ý)ˆl¶Ú‹ÊÄJ¡ÂŒôé×j»j“¤\0y;)6¥Ev$#áÎqɽiŒ¨Ðj]uè9#¿íõ E‹X§wŸ!rqôs@0})`úPW)#ðÃiëŽJ`G W à¹ÈÃÿ=[#ô c. ¹vS8Û†ýá¸ÇCHÒ€8ÿÿÈa¿ÜZ 4žâ}íûé:ÿxÐ}¦qÿ-¤ÿ¾i¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í3ÿÏy?ï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ùï'ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´Ïÿ=äÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìЬì÷¥‹£’s@ÿÙlibstruts1.2-java-1.2.9/doc/images/how-to/eclipse/developing-eclipse-style15.jpg0000644000175000017500000005257710404045224030136 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„   (1#%(;4>=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀ2¤ÿÚ ?±ªj:Œz¥ÔV÷+QÚ¥AÉ WM*q”Sh†÷Ô¡¯®O$±­Êïw`F~`==ê:k[ Éô&û_‰7ªyñå›házþ_OÌRå¥k‹šEkMoY¹œEöÄL†9*§FOò§*PJö”‹pÝëÓDì—qï]¿.Åèà çòüérS]Í!>×â ¥šx‚àß.0?¨£’Ÿ`æø¯u‰m„«ö@â?,g±éG$/k4‡qï»ÌÕ»ãý’i(Ó}šB}«_RÁ®"y …÷öö4ù)ö4ŠRøƒVŠWç•#bõ…R¥­…Ï!£Äz¡ÿ—ÿ|/øQìaØ9äv8kúüö÷À£ØÀ\òkÚ‡üö÷À£ØÀ9ä/öö¡ÿ=‡ýò(ö0y 5ÍCþ{ûäQìaØ9ä8kwÿóØß"—±‡`ç¿ÛWÿóØß"cÁÏ!¶¯ÿç·þ:(öPìòûbûþ{ã¢eÁÏ!F±}ÿ=¿ñÑG±‡`çá«Þãýhÿ¾EʃžAý¯{ÿ=Gýò(öPìò5kÃÿ-Gýò(öPìì?µo?ç¯þ:(öPìòj·ŸóÔß"eÁÏ!ßÚ—óÐß"eç£S»ÿžŸøè£ØÀ9ä/ö•ßüôÿÇEÊÏ!´®¿ç ü…ÊÏ!ßÚ?óÓô½”{<……ÏüôýÊ!ÎÇ ûùéú =”C‡Û®?ç§è(öQìò··øÿAG²ˆs±~Ù?÷ÿAG²ˆs°ûlÿßý(öQììx»›ûÿ £ÙD9Ø}®oïþ”{(ŽSô£ÙG°¹Ø¿i—ûÿ¥Ê!ÎÅŸâý){(ŽÉýê=œAÍŠ'“ûÔ{(‹‹æÉ½G³ˆùØMr±‰J ˆ¥¶nü«µ}J’j7Íû¤òÁe æó éoZ.¯°Y÷$¸Ô|›×.Spl£ƒ×ò¡Ù=lrþ#s&¤º˜”þ”IY‚ØÛÕ´«¼k«‰fG”…ùÀÿëUÆ«ŠåR¥®¥Î·¹¸ã¨dzv§íåØN)„š6› ²fæì9~KÛ¤um£2c‘øQí¥Ø9ŸÙZ‚ßnŸ9>oOÒo.ÁȇÉáë"2™îB€>ë_¥Þ]ƒÙ¢?ìÍ7z…¼¹,~n$û¼g'Ž)ûyvf‡dé„ÿÇäç#9Æ?/z=¼»³D‰áÝ>UÞ’ÊàŸ½¼þ”{y³Dé:C€Dò®ze€þ”{y³C¿²4 ûK€?Úáî(öòì̓EÓ.8Šií à —·{4$º>™›%–T g%€ÊŸ·{4IÒ¾`.•ê•ÞAìÑ,:„Ñ+Æò•?íõ©{y³DQiÚTƒ"i±oþµÞAìÐ ?IÚH¸sŽ 6Oò£ÛÌ=š'—E±†##´»G¡£ÛÈ=šºfšv~ýþº õ¨öòf‡Í¤XÛ¦ù$•W×>Ùô£ÛÈ=š"ZgÍû÷ùzŒÿõ¨öÒf‡%†šáqpÜô†höÒf‰'Òì­Ô4²º)8É#ПOj=¼ƒÙ¢8í4×p‰pÄžŸ0ÿ =´ƒÙ¢×ö5·÷¤üÅÞAìÐcÛzOÌQíäÍ 4‹qüR~t{y³BÿdÛÿyÿ:=¼ƒÙ þÊ·õÎo öh_ì¸=_ó¥íäÍ ý™«þt{y³Aý™«þt{y³BÿgAêÿÞAìпÙðú¿çG¶{4`‡Õÿ:=´ƒÙ¡~ë~t{i³Aö½[ó£ÛH=šYD;·çG¶{4/ØãõoÎm öh>É«~t{i³B‹XÇvüèöÒfƒìÑûþt{i³Bý=MÚAìоBzš=´ƒÙ òÞ—¶r!|¥÷£ÛH9¾RûÑí¤Í–=èö²D@Ú| #9½† o9"§›È«tëbÅŠ¶OS¼Ð¥naïg’Y¤ç¯ï ÞAc”ñ( ª•j+ßPJÇ_sšÀnÛ‚H óÓ·½!‘Å 6Ĉ–4'¨ h²Y$³4“¸`®óOJ•-ã ¡ãæâ€ [HGbD¬NN_8 m­HªÇÇCŸ\ЉZ=²ÙèOÊ€"û$1ò“‘ÏÌzP~Á * ü!Î(x•V5X€ +&›9bÉþñéÆ;Jwk f”îEÉ_¹¼îq@Ån±1¢©#xÐKoÍ™Xƒ–?ZŠ;b/ò‚\äåé@Q6aQTdôÉ  ëiÇóËÆ 8Àô9?, Q…}Îã@‰%A4mÇCÏOÒ€#K8b •RÝ2Ì€$ž/>=Œ@ƒéõ vVþ^ЊÃ»w<: rÚ[£ EáÈ䜜P“Eç(RvãAéÇÓÞ€"K‘–5Êôù4g'Ÿ»Ç¿ÿZOû=3×ÿ­LVÞ2¥{5 óz/çÿÖ ñ÷yëÿÖ¦¸ö)ÿ}P|Æþèÿ¾…ø|d¨S@·M§ÿýj@4È„,›A»ÿ­@ù½óÿëPóz/çÿÖ æô_Ïÿ­@Í迟ÿZ€›Ñ?þµ7¢þýj>oEüÿúÔ|Þ‹ùÿõ¨ù½óÿëPóz/çÿÖ æô_Ïÿ­@Í迟ÿZ€›Ñ?þµ7¢þýj>oEüÿúÔ|Þ‹ùÿõ¨ù½óÿëPâoù 7û‹T€ìe?¼Çpô¤2¯Ù`Y!’:ÊÎÎr1ŽŸ'ec2¸˜„‚˜o|õ¤'ßåË«¿8¦6~{\I-ÂᘜŽh`3É™.£s‡3€§‘ÅKxfʘ”¸ÁàÇ4 ÌJ¶@O€à=j–UYVTÏcô£`+YÁ$RB¢Ú@'æ>¸íCÒ«,®ÆRÊØÚ„ - 3¢²™uv»wo-ÆÎÞÿΘ%[Î%!àÇ‚}sÖ ‘ÀÏñÿì´ÀÍ»µ–âä:îB¼È#¯^¼Pš¦=Ì8<ŸÂ€*Ý$²Z„‡ïÇ\c§ÿ^€k ÃlSw<íRs³ÐP[ [•¹i§r§§\îõäÐïíæžM«¤Œð¿¯Z–î9Í¢¤RpWqèXw iVòÛÂÞsýæ$&s·š äù—;•LE0D€õõCÇå@ sžÆ„Ý ö¼PVÑb;Ø4ŒrÇ?ü€tˆ³Fñ– 2$v¦3.ÒÎâÓTRŒâÔ©S’O®=8Ð#X+ ™Ì¤¡ÀÀ>¹ëHR2¼ôAM€Ì±tëëô  ×V±ÈгÚ,ÛŽÒHä úöïD¥S•¨;0²¾¥çR¶áAÎ:gŠˆ)(ûÎìnÝ Ö[ðí*ìbG·oJ¶!$‹7i PHaÎxÆëþ4k#ÖG­´dzБë@G­´dzБë@G­´dzБë@G­´dzБë@w‰¿ä,ßî-R®¹wIH•ó×, ŒJ’BðHㆀZ6¹û8lÉ·v>QÅW+·0¯­‚CRä}®s€qÛð©o‹p_0dŒöéù{Ðæ<ãxϧá@ Y!u,² ‚xÿ Uh›£Ž;…8oºÙúcü(¸ °zŸÈ…0¹Æyü?€ª£$ãòÿ ]£Oéþ\OCü¿Â€íT,Ä€:ð?€ØÿtŸÈ…6FH“¸îm¼@ǰUcø…ª@ äü…"ìc…p~˜ÿ Ƨ àCŠ­{pÖÐÎêâÞ¯4â®ÒìŒÈõ=Aôľ[˜Ø1 Ý€pOJÝÓŠv#šV¸&­|êZ¡V#§ùýŒ{“í"ê—GïZã·ÝÿëQìcÜ=£ìXŽöw`<;óG±pö±a&•ºÇßþ½”{‡;ìL»U>½øRöK¸ùßaáö?§øRä]ÇÌÁP·cùð©pH|Ìw—ìsôáSaÜ6qü_ÿ C ºž+T1`™Æí õâQ¸!ù—pÎ Š_,ÿ{ô\Ë?ÞýòÏ÷¿AEÀ<³ýïÐQp,ÿ{ô\Ë?ÞýòÏ÷¿AEÀ<³ýïÐQp,ÿ{ô\Ë?ÞýòÏ÷¿AEÀ<³ýïÐQp,ÿ{ô\Ë?ÞýòÏ÷¿AEÀ<³ýïÐQp,ÿ{ô\‘JÆÌ è(‘ñÝ©îé˜Ôþ”Àì¥RdÈÜèU±HÈÚ¸ÁîrNsÁ ¸³yÈ>Sïe8Y±œÄr~”¹àã ß»n=Å.hŽÒ#¹Ç0ŸÓüj\‘Vbˆîü²oÓüj[@“.ãyMÏÓüjJ"–ŦǛl\°GåšVVÖTUU…‚¨Àä{{Ñ`äOÿ<[óãE€<‰ÿç‹~cüh°‘?üñoÌò'ÿž-ùñ¢ÀDÿóÅ¿1þ4XÈŸþx·æ?Æ‹yÿÏüÇøÑ`"ùâߘÿ,äOÿ<[óãE€<‰ÿç‹~cüh°‘?üñoÌò'ÿž-ùñ¢ÀDÿóÅ¿1þ4XÈŸþx·æ?Æ‹yÿÏüÇøÑ`"ùâߘÿ,m¹  uä”=»2«mdÈ?…r^!ÿŠÿ×$þTÀëîwy˜\‚pv€A&ýÊq•È89 ^ÎoVQ ŒíãÛÛúÓ*îÖý†0dg%ÈÎ3Ôqž”©¨ûKËrçËȹwêhÜØÜ\E·º1 T°{ðª{!Ó.™ˆkç1ìÚddúÒCcvc‘MëüϸzéëúЛuäˆÅãcŒä·AŽœûPÛHÞ(ŠÉ/˜Û‰É9ǵM@P@P@™­,²"Çœ¬yßRGçI— H·³4ˆË¸&7c'¶x fÅúÿ„"Ü+ Er[-ƒÞ©·ÔJÃÃ+ «=+ O12åÉ8Æ{Ñ`@ ó~ÍÃv3ŒóNÌdzŽiŒêŠY˜I4ì©  ©„R‰4RgdŠÛzàô¦âЮ…IQþã©ã<hc²=E 2• zÑ`€ ( € ( € ( € ( ö ‰/ÌÈ“ár¡ F÷"£±Ü2ǃõÅr^!ÿˆÿ®Iü©Ö_L°Fï fÂã ƒÖ³”¹UÆ­ÕØl2BûÄ íUžÙ ñZ¸Ù&úŠæ°µc8—w~J@d]é÷ïté ‘ÃÈX³c''µÔT¹¤iS—‘roÔ¿wh”ôF"ŒpÇÇñpEJú™¤5´ù%!Òø•ØUIêy9Ï>”'}ƒbF´g¸,—ìr»BîéùPiÓm†¤w»óÛ­X±°x.Zoµ´ªz§`:Р€ ( € ( € ‚àüÃéI•pÊoˆr=9 eÛõÿ…E”ò˜!“æcÖ­ßK‹B±·µ|qŽÆà)Ýö¦ÖÛËØ'À  :ã]…øa·…•ÄÀã8ÜGùíI¶Á$‡ONŽí&±Ódiµ ÙÅo泉Êà@ŒŽ2>¿•;»l+!bŠnðùêwe‹)?úÔ6ï{•¬M E³€ dŒNj]ßAÇim¸•”6âxÈä÷üjœ¤+"G·G>[JäìÆ0:géK›¨ìB¶äÂ&}Ë‚zgØôªç{ØV[ ö‰›bçž1Ó·µí=…Ê‹0K i°KÂó–ã¯?Ö¡¦RhM8! íÆ{úR³Ço]›ÁÊúŽh·@"ûTøÿCO•Šèxš3œ7C·¡ëJÌ."Ïõ]Ý;QÊÂàn"Ëã$‡­>Vò$xã‚Ý;´’¸Æùñìß»€<ô£•Šâ¤ñ»Vä`ŒQf'‰Ø*6IÎ8ô¡Å ¸õufe%zûR°Å € ªÿ}¾´˜.?ÕËô4€ã|Cÿ!ÿ\“ùU×Þ›_-áºp¢FÈçãÿ­Sdôbi5f6Þ$‚ÌFŽ\rAÆ;U\¦ÓØÝO¸¿JV¹¶2L621üè?R±ž{–Ñ`lc{{~u…J\ÎèÞ3„a¶¤÷VÐØCÜ´KH“={ÿ<µIEXÇVÈí´˜ G,ÆŒÅJg<œã9íJ¡Z¾…Ì$yúÍìÆá’@Î}Ï4)ÒÉ“wÚ>÷ʤ÷Î9ÏlÊ€/BÆ0%>SZ~Fqž}(ÈÉäv œ ž”ASyP@!e ‘“ÐzÐÐ@S¿ê´˜‘ÿÈJçþ@Í‹õÿ…E‘$-æ(ùö7É«³‚8X|Ëž1úæŽfAö8q§ïnëߥÌ,Ê0'9ïëÿë¥ÌÂÈq¶ˆÁäàìëŒûæ…&ÂÝ}Š Û¶s»wãUÎÂÈSi0‚0­.f±ÅŒ|ØÀÝéÿë4s0åBÅkM”Ý×=Ï­M…‡¼*îX–®ÞRNÁaÒf•F†½v°XÞ4…¢Q„lägÖŽfÝÂÄfÆ… ’¯ùô\ì9P¿d‡*v“´ädç—3 yKäùYm¸Ç^:WÖáb3g êþú>˜§ÌÂÈrÛ¢œ‚ÝIäô&Ž`°Ñg€îÞOj9˜XVµœ³n$°n½èæaaïÈá‰l€GÖ’v û,{ å€8èǵ>fä¦íØ9Îzõã®ÂÃ"´ŠÝá×ÇÜ›ÜHzD‰#º™ñº•úÃéP@_ï·Ö“…Çú¹~†oˆä"¿õÉ?•P^£jÓº:mßdê)Û[skm峆9cÀÀ”ЧÜ_¥0ûÉõþ†€*ß“÷Ëåí`G$g{é@u‹U—OD" Þbpxö¬ªÅI+» Yì-•ŒgJ-ÎõÞ[zœ÷éÍTQI nì|ZiŠc²à„ò¶tËvÉÏáù“VI hP¡»“ï ð}¹þTõÒ`fÊÎÛ‘Ám‡8Î>Ÿ­>M6'ºódœ—<㎃þB€=-}ÿic e'ž€ ô˜äbïs0ù‹›z‡ûbd»mª¸ÆúPÉ¥²ZåÈÞ•ãŸóúÐM¤$¬¥®dsÀ÷ÿ?  ›Fˆ¾×»pY‰P8ô>´®03ÐPäzŠ(ÿU¤ÀÄþBW?ð lXÿ¯ü(B/RÁ±ÈéL € ( € ( € ( € ( € ( € ( €*¿ßo­& õrý 8ßÿÈD×$þU@u·„†`3’>R;ÒI|ÔÎÒ1ž¿C@©÷éL¾ò}¡ ®-üâ§q]¹éŸèh3YÓ¦¸‰9 ]§q=}@úTNÆÔê(¦¬KŸZX¤i¶äI>ôãUc9>gr;kkeŸ­!³²šW¸{ø?1$cŒý–€Ó­’àb匙3ŒáFó ¸Ó,˜´’Îãäïã×¥DºM¤ÈÑÙÊzcòé@ŧ[=Ÿ”.K"¶âTÈãúPˤÚÌUšvÚ¹ã#çÿ­@ þÁ·n•È-‘Œ?­Mq¤Cpìï$››©~_Jgö¸H:÷æ€-ÚÙ¥«1Bp@z(;þ«I‰ü„®à ¼oc°+$ŠÌíÂõéŸéN*ãŒ\´B®¿^›q Œ¤·9ÇåÞ«”¿díqñëq˜ãgâW°8$ãrƒ¦ËWw¿f¶Š_/>Á`1ŸzIÝØªÚõ¼a7£|ÅÇÊAÆÓŽ~´ùYj“döš_LÈ‹´2yêA~­&¬L â†6¬‚HÆÌ#Jc%˜gŒóøê(°ùñ±é ÜOÖŸ++ØÈ±{©µ¾ÜP‡ó0B;m8Á?Ҥɫ;nÛ¬ˆ‚ÌTtê1ïï@‰F­ˆØíMçæ^™ ž¼ã ×ZUžhY@p¼íúú'Öã†,´D9Ü,0õ>ôçÖàBAòpóŽ9÷ ®ù’8¡92ùm¸àô'#ò k…M˒ì?{ÿ‰ýE3ûj1ó2 „q¸dÈú žÿRŽÅ:î ¬Üž)¥rã-ŠCÄpÈ’ùp¸xº‰0oñ§ÊËö-›ÄBÎ 2¡l²€xOZ9D©6#ø‚!)m)fBè9ÀÏô£”=“î\µÔc¹º{tFÜŠ·=:Æ•‰pi\Œjd1ßç4k‡ûØñïÇëH‚7Ö¢ØÞZe‚±˜ÆÃõ  6wéu+ÄN ý(xeóUŽ1‡+ùP”PWûíõ¤À¡qþ®_¡¤âù¯ýrOåTW{3¥Ìq¢¡Þüõ¤¦C&j)Â’1Ÿ–€7Óî/Ò˜}äúÿC@ @\Ä%ˆ‚qŽJ§}bíoÅ?–’I'œô©iô4§%ЖÖñG§H²7™B‚O?‰­rf[E¦é²H] Æó#+øv©z riúx_’pI. 9ãߊN°ŸlFá˜òUCº9ÇNƒ?^h‚ÇNw’µ1ÎCËôô ]'M(¿¾$ÝǰôúPKaa23Ct# ÈåJƒëƒíüèÌ:mº+ùR³1ܬÙ¯c@º5²‡¥%³’XzcÓùÐØ"X H’¨¡Fzñ@ € §Õi01#ÿ•ÏüšÖ‘¤“è­ŽFFp}hA{8¦ ÀôPŠ  `zP@  ¼i"‘ÔŒahØc`z 0=( dVR¬ © Ž(TUPª ÀPZjÅ»:Æ¡Ÿï9?ZqØ1@”ÓQw€Øä pt8dä†(«ýöúÒ`P¸ÿW/ÐÒñü„GýrOåTY{m Ó¤’–Ê=iᎠªÄŽq“žÆ„â}ÅúSo¼Ÿ_èhh$ÿVßC@ œ+BÁÉ zàf€)£[iÚ{HªvÇÆÜ`çŠMÙ]‰»+•4Ù’æöîB©ç#“MYǘQ•ÄŽÛG— —*Œ_¿áAE¨ Ó¡$¤ÑîmÙ&Aón?Ê€!K-1fr%"E8gcŽ{󌸠‹= ®Àý§;ú÷Ê€%zb0o98*@ónøPº|¶0Äéo.aŽóŒgë@b¼¶™ÊG23zg¯ãׯjš€ (  wýV“?ù \ÿÀ(±cþ¿ð¡¿L€ ( € ( € ( € ( € ( € ( € ªÿ}¾´˜.?ÕËô4€ã|Cÿ!ÿ\“ùUØ]@%$ƒ†ŒÒx^šû²O·Ë@}ÅúSo¼Ÿ_èhh$ÿVßC@ $bHÊ7C@.4èäµ0ÆBeƒ´JM]Xºsä—0–|‘:ä³°ÚìÇ’)F*$Y]¾ãFŸ§M1(ˆ]1§¥PìÑKÌÓb|…Ua»“8'ƒÇùéHCM2á<™ v€dëØãëŠÓ:M¡‘\£eWhùÏN˜úS£F±òÈžsÉ4çÒm@XöaB§:P­´Ø-ˆ+¹œw3d’(ÝP@ïú­&$ò¹ÿ€P3bÇýáB~˜ËæîùO~¦€‡¨V‡Rí&&ÏTÇÐÐboXúz/ï}S¯¡é@À »˜úz?}ëähĹê˜Ï¡é@ ‰±Ö>ž‡­.&õOÈÐÝÊ~F€zÇÓÐÐ!H—<Æ}J›cÏÐÐboXÿ#@ ûìõL} ›céèzÐ ýïªuô4 17ª~F€zÇù_Þçªc>‡¥›S8ô=hÄÞ©ù›¸n)Œö€!n<âaÎ0:‘~(¸‹öÂrĸ|£0úÔ£~oãÆîøõ©Jãý\¿C@oˆä"?ë’* ;)P ·LŠÎR³Hiáqòã<í#±õb6Sî/Ò˜}äúÿC@ @ 'ú¶úZ( bI¡–"ÁKdg¸¤ÕÑQ—,“!Ó ‚Ø<(áå_¾@Å$¬¬UIJO™™ÒA¦$¤¼§r?y=xç¶OæjŒÄšb\¨K‚ÉÇN3ÁýMkÇk,Š‘ÎŒÍ ¿J±@P@NÿªÒ`bGÿ!+Ÿø6,×þ!é€P@P@P@P@P@P@P@_ï·Ö“…Çú¹~†oˆä"¿õÉ?•P¤ªéQ$š³#e*0Kâ>ÆœU´´Ÿq~•@ ÷“ëý -$ŸêÛèhh ЮH$gq ÄmüùD@ ?Ó²¹C:T¹Ð 7ž0ÝsŽßäPIoû2Ïs72Ýy4èl-`ux¡UeèhÅP@P;þ«I‰ü„®à رÿ_øP„_¦3* ³æ‹+«#ÐÓ° H€ ( € ( € ( € ( € ( € («ýöúÒ`P¸ÿW/ÐÒñü„Wþ¹'òª°»ß±Œh‡!IÆhI6“v@ O.%Ë`–ÀÀÎÚœšoMi÷éH¾ò}¡  “ý[} -Äe‚yÜhÉO*Æ•~ù ‚ôÓI\θ›JnL7™H$ƒþ~´YMZÕ—,Y ©ãüâ€Ö,›n%?1Âü§š½@P@NÿªÒ`bGÿ!+Ÿø6,×þ!éé ó°)€wªMôºÞÜyœ(| €N}(Õè"Dš7U*êCtç­&šÅiNÔsE˜›prqÁÏ4Y…ÃÍï^zsÖ‹0¸žtYǘ¹ã€}zQfÌMÛw®zc4Y€­")Ã:ƒŒòh° kˆPe¤QÎ:÷¡E±\_:<æ(¡'­aq|Øÿç¢qî(³ c'Ôœã÷¢Ì. "1º“è aq<ø¼ÆO1w.23Ò‹0¸àêÀ•`@ëƒÒ•€O6¢‡ˆä"¿õÉ?•P^¥2Ã’åøqž*"¯$ƒ ËY|èƒPìŸLQkÑ'Ü_¥ ÷“ëý -$ŸêÛèhh #Hï¸Ð"š¸–8ÀóïœR)¦’l n4µ›ÉòpäcÊÉÜN?Zd“PÓ•™>Ï»ŒGרý:PŠÚ[\[ÆôG5P@P;þ«I‰ü„®à رÿ_øP„_¦fdH™¤@2xÏJi]è aòæ ƒ ®1Æ=?•=V¢Œ1È®,½ 9¦æö qeò en2GqB›JÀÕÅŽÉ#èÍÛ¸8õãõ¡Í°°¿c‹nâ0G'×ÿÖis0°‹e U.ÇCéÒŸ; Ø¢=}Áþ”¹ÞÁd>Kt‘‹6r@è}:RR°XlaB –9Õs°²±Êå›’Fzæ…6…Êa„«©.C Ÿ|ÑÎÇd;쑌`°ç¥ÌÂÁœQÈwd{ýƇ6Ղ½¬r3-ó‘Ÿl*š H#t*Ä’¿ZMÝÜ,Dla?ÞZ®v%’(|§ŽjSh,Bº| ÷w¡ªçaÊ„}>&R8$c9Ï`?¡M…‰&´Ž/~ïÝýÜRRhör§æ{Óçaʃì0í w1€NqŠ9ØX°«´c$óžNj-—yþ²_Æ£ez.áŸ$qŸjWW®r¾!ÿŠÿ×$þUB;fU;˲ª¨É&’M½¬®>Õ†`¯?­7{êÝO¸¿Jï'×úZI?Õ·ÐÐÐ@ F‘ÏÞ=¨{Øfº–ÕƒÇÄŽ*T“m#IS”b¤ú•'Ô¬mÙO7À;¯'ô?•Q˜“jv1ȺIùA#œ*ëQ1#‚BìWFzй c¶) k÷›€/[NfVÜ»YHÈ#õ  ¨ € (ÿU¤ÀÃRPºcÐl4›²)+è\{ákÄ‘ºÈðǸ…çúVTj9ÞàÕ‡T•ô‚N˜[ŒúÖ·dˆu`U®”n@ßê ëøÑvÍãÀ{8Û’<ßÈúQÌØ¶£$øà!>°“Æ û€hmŒRØÁZìÛ»g<ΕØuwDKÌì ðOãøÓ»Ñ_¼“,&è,¬Ä0ÇëIÉŒ`Õþ“nGQŸZwbíLy›î‚ìm¿êIúg׊.ÀpÔ$`Ì·b7q‘‚IëØ)¢ìû{yM'Ú†Ô}˜ÇZW`,·í•{±3Äž2{öQv’îFòGÚB´Ë¹ÃÎ1ŸZ9˜M«Š¦#î!íëÖØ]BLeçØ>nL0Ûyæ‹°ûLœ„º‚î*`#޾¾œÑvµü‰#¤—v¾Áû‚r?Z.À» Ì·F)]\lÜ]¸ç´EÜ 5@P@P@eÞ¬—ñ¤r[ÆÖqÊWçþÕ<ª÷6U¦¡Èž‡3âùúäŸÊ¬ÄíšAýÛpÜdÔ5q±]Š(U\£Œ`ÕÚO¸¿J` ÷“ëý -$ŸêÛèhh Œ© ;¹!T’N I·dU°»µ¹º˜AW_h¾µ’mØræO–D«[-̈ÖÌvç ~•dŽMFÙ—-hFHç“å@Ay“/—Tb$açœPÁc¤j? #"]±¨Qè(ÔP@NÿªÒ`bGÿ!+ŸøvZÁäG ËM‚ïЩaÇNϽ\kÆ%ÌÚ|R—;xLç"¢ÀÜy¤òì"|±(ê cNMûD†#$6Vá÷ S Úó&‹‰z ‰3i€<\.#éÀÊý=)jZF`Í€À%FE€yV›BDzŽsüèÔ­µ’ Uަ3ùÑv…m‹+`r "@寡”`uÛžõp%óŸ×ôªÃÎ_Ò€¸yÏëúP9ýJáç?¯é@\<çõý( ‡œþ¿¥póŸ×ô .súþ”ÌÛ«¨¼Éq»¡â‘ÆÓ”ˆ*äüCÿ!ÿ\“ùSªÕ¬ÚúÙ¡GØÙÈ8È©cNÃl­>Åc÷”'ð4ÐŽ‰>âý)€7ÞO¯ô4´’«o¡  €!eIâ‘ +Ç ±SLžßÍšÖÞ‚3ÉÎI9ïïQ&Ú°ss;‘K¬F³4ilÌàNF?°íb‹™k‡•¾^xÆzÿ?Ê€=R(â=™GD\à Œ€? öÚmì³|ǧ=ÿ€.ÚNÓ£ •#•èrþ´=P@S¿ê´˜‘ÿÈJçþ@Í[h£š]²¢ºã8aš‹Kah mý‘Lû ¯üûEÿ| >Ãkÿ>Ñ߀°ÚÿÏ´_÷À ì6Ÿóíýð(û ¯üûEÿ| >Ãkÿ>Ñ߀°ÚÿÏ´_÷À ì6œ£EÇû€°ÚÿÏ´_÷À ì6¿óíýð(6ƒ¥´Cþ(û¯üûÅÿ| >Ãkÿ>Ñ߀°ÚÏ´_÷À ì6¿óíýð(û ¯üûEÿ| rZÁ%!EÏ]£ÿ)?º(ò“û¢€)?º(ò“û¢€)?º(ò“û¢€)?º(ò“û¢€)?º(» 1Ö.?ÕËô4€ã|Cÿ!ÿ\“ùUÕj‹xc&ÏnWæ|Ÿáö©wèiMyˆt»©.ôô’U*ã*Iï€y¦´!Û¡Ó'Ü_¥1}äúÿC@ @ 'ú¶úZ(˜A’8;T’H£aÅ9;"¶¨­ìÒªE´/;‡×ûÔFWm“ŒœYÔäñ‘œäãÇz± ý«0>ÌX…Ê6V8短=uW-·ì®pO ñß§å@ ©+H±Wf?ļ/_óÍF5I#”Æ–,ªH*HÚ8É?­X½ÔþÌcdˆËRÌÀN~´\ëN]BZ±°ÝñÇé@m]ÄÌ‹jåW«zý(ë©I!È1üO’>ŸSÚ€#mVfÊ´aÎ2y§ôýh>Ø/¶Â…iûgúÒ`c^IƒŽúUCtسábMÔÙ$ü£©Í\ú¦¬Ê"˜ÊIXpÒrÃŒöªVê!bno4©\ `wïIÛ jIHa@P@P@P@P@P@Uþû}i0(\«—èiÆø‡þB+ÿ\“ùUØ\ÈÊáQC;8ý{ I6°ÝÌw+(]½1߃J.í”ÒI4n'Ü_¥Q ßy>¿ÐÐÐIþ­¾†€€ nådtʱ9éŒP B¦ŸqºymÖÛÊHº=ûû÷¨‹½Õƒ™ÉÝ‘Ë©Ü LqÙ6cy'Î==*ÀŒê7±Ç5Ÿïwd§4!Ôîcˆ—±rTcå'“Æ{t ¶­rľ@Jç9à~”¢þíeeòUìÊ¿?Ò€ú¬ªŠkå³.W$ã¦qŒ{cñ  uéœc<š( €)^ª®6€3Ï“¼ÿYôOéUÐKbÇ…ãêo÷E]N„Äéë2†È¬Ñ²£ìb8lgÖàG:Hb@Žû+‘ÞšjâdPÐѬ€lxœdñõª|½®-è¸* ”c¹æ”yzÜ@n—øXüãºôÚ3ßÖŸº‰no~Ð<å=¼ãh—%´ FH·ëu#ÄÛ£?u[?úô×%µ GF÷äáãPuã‘ùýi5Ôi7¬UyhfÂÎyô§î ÔUûzí)h$“Ç'­'ÈŠ>Ú_v0@<möè~”{¨›µ-ˆEÞTaxÀ9úÑî\5kð£÷j~~A#8Ï×Ò‹@5†û¼ ­÷@ÎyÇ¥“ jO)›Ê_, ýóR­}AÜ ØU|Ù=GQŽä{Õ>Qj(ûaNp­·°sõ¥îÜ5$›í#òBç?6{R\½F·˜ÍçéCå¾­ˆØÞŒmU#ÜO­W¸-ESx[,]ßtc§çKÝ F†¾Ú¹A’>nœýéû¡©4>pvóNWŽ\Ô»t¹{ýíû´Ç8éøwª´¨ö7kf6.é÷tltÏ×Ò—»ÍäØfëó0ÊLŽ„tïÞŸ¹`ÔQ»¼Æþøõ¬žå®?ÕËô4€ã|Cÿ!ÿ\“ùUÕj0Ã#£M+G‚UHïžÔãS™%Ô—ËòãTÉ;WhÈìÅ+ÝÜ«XÛO¸¿Jï'×úZ¯,‘Z³D»›Ÿ—׃@ yØYù²\võ#4ZàW´¸º’ÂVRa‚ Œã=9$›HHj_j!Ê=ŽH'æÆ9ÿõRõÔ.ˆ,ÖLª'$ƒœŽœžôÉo¯£YìÌÍ» Ê€;öÿ=¨E¾»fÇØ™yœã··¹ü¨õ+é0²lA[9éõ  ÅõÏ‘+ÉjÈB’œHõãŠgö…ß’íýŸ'Ëœ yôÅi/̪Åpqœ¢€€ (  wýV“œ¼ÿYôOéUÐKbÇ…ãêo÷E]N„Äéë2†ÊždlŠäc#¨¦˜ º±ÜÄ€þ¿Z„>€ ( € ( € ( € ( € ( € («ýöúÒ`P¸ÿW/ÐÒñü„Wþ¹'òª³¸PÀ‚»ˆ`Gn„w¤·½¸[/œ¬¯ód3n=ûЛ{…ÛÕ£}>âý)€7ÞO¯ô4´^ýåŽÙŒ+¹ùã׃@Ë+}‡|Êp88'š¸¬¥¸m>SS7F3´žÔä’nÂ[]jªåÑ ù¹Æ9ÿõRõ½¾Ág³Úä‚Ns0?#Ýêp-7¼ð@ÝÏéŒPÍÝàµWklJ[O‰y|V"ÖXÜÊ“À=Oá@4P@P@¯â’F]’„s•Ïõ¤Àý´‘^áCy’JªzmïéN.ÌÅŸÚÍms/š»w/ƒW)'±)Xè* 3.¬og½•ã»ha*»@byïÇji£U(¥°çÓ§c&Û·MÒ+ ¥²#9ïBbS]ˆF“w½µó :«àåwcßÔ~´î?h».tæ¹ÓVÒIKA.Ù$àæ¤Í»».—{ŒE~ÊÇ8Ǧ3@‰ ÐSþ”îv0{/ÍØç?ç4Ò% X\l•€Üã;³ÆyΆ€$}:å••®ÙÕ‹d98Á Ú€é“áUnÙcT¢ä õãŠGÓnÚédûaÚ!yùxÇÐ:ó'7ÎFF={hÄ–’ɧ}›Ï;ñ‚䓟­Ar¯¹¯°Á”|À=ÓjdZeÚ³–¾bYvîÏ~¼ûþ”á§^ù¯äÝòŒ‚Fq@剞XÜJèä¨èßZ¥y§ÝOròC}$(È"ç‚^´Ó4ŒÒVhd:\Ѳ1™¬Â\í9?.Ò:÷ëEÁÍv4-Ñ㌉s'©8ÉéÍ#2J( € (  ¯÷ÛëI“t.7ÈT¯•ƒ‘Þ§[›'K“]ÎSÄ?òõÉ?•Y‰Ú¿ß5 G'OÏùh ”û‹ô¦ßy>¿ÐÐätÍW¾i–پλ¤ç׃ìh9eu±ß2“ƒ’Á<ôíM+ZÍî_O—ÊßpW¡ OZrµÝ¶ÛPIµ…rL2~n}ÇÒ¤cÖëRÁgµEsŽrNGZF¸Õá-ÕÈ\Œ Ù==±ŠÚžw4 ¼"·¿S×Ò€#k_ÊOôe Íó`ghã§<÷ô ›½Wsdœ2{ãëë@–æýLB;`ÌTo =ðh[y¯ZåRkuHŠXàç¥\ € (þðúR`e]Çïü.Xÿ¯ü(B/Ó € ( € ( € ( € ( € ( € ( €*¿ßo­&mÌ€,«ƒÐŽÔ‹QÒç!âùúäŸÊ¨ƒµ¾j@ŽNŸŸò4Ð)÷éL wfè\Çä“¿äh+_ùfQšMê7`.3Ÿ~j'¢ÓráÙš3Iyq§ÄÖÁ’v?7@®sN µvKÜ-仄ÌnüÃÀí]Ã8öç®{UbI®á8‘bÀómÆxÏõ  rý£|xçËÇ^ÙÏjª£RûC•a±Hq×$“ù;ö ­Æ¨n#ŒÂ –;xÇ×=höòj¬ j¼Ž1žœ¾´Ä2¨%]£,ØëߌÐËê^_Ëy î ãn ôü ,Òj¦%Û AÎÓӌ׀dÔ˜»"âÀçç#·Zž&¿1H@”¨ÚN6ƒŽ_ç@ v¾Dv°e2mÁË §õù…U€êéï,ŒàöÀè}yí@$“PH${åÜÙ8#æÇ¥I FºUYH9Uè9¤À£uÿ¿ðþt ¹cþ¿ð¡¿LK2B»œà`žzSJá{ ñÊì¨I*<×¥ 4+’RP@P@P@P@P@P@U¾ßZL ›¿´y´/•ƒœõ©Öæñö^ÍÞüÇ)âùúäŸÊ¬Àí_ïš#“§çü4Ê}ÅúSàºûD~Iù;þGÿ­@j‘Ú<«öðJìÂmÎ3žz~º_¡![ÃclmЇ 7+w¦?b † Q&Mҳ͸±#ô[T‚e7é½v|˜¯éIÛ¨Õú˜¯ÆÛìÒ*Hª7èxÏôÇâiˆ‚+MI&LÎÄ+6YœFxãé@öz›ËòÜ¥Ë|ç!rz~§° ìúšÝù±ÈLy9Vn¸ÈéôÅJ#Õ%T‘Cc’p}=¾¿¥5py–"1ÓÛÛëù |IªMòǃ÷¸uÿëPWP겡D‘œç8ïì3éúÐùZ³F»æMã'åÀƒ×ôÿõÐìÕ°O™xqøöÿ"€0ÔÚë÷-Ã;°xÀÎ(F€ ( gûÃéI•uÿ¿ðþt ¹cþ¿ð¡¿LÊÅ#fU.@áGzkpòOò<`…Ý¥=µBÜÚ ˜×‚HǽÌ,„[H@.ŒÑÌÂÈ|pGbˆv3jM¶; äCÇŸ-ÌVB XïÝ) ×#4ù˜YXÑA  nëÇZWcöxvíò“Æ1ÚŽf+!Í2meGb(¸Æ hH“òü)ó1Yx#xÕFÅ Ú’mjìðóû¤äç§z9˜YADbUrzmÜ,*Cg(Ч¦@¡¶Ça¦ÚI1''=)ó1Y0D@5Àv¥ÌÂÈjÛ@¸Û z |Ì,‡¬Q©QAÆ+±Øu ( € («ýöúÒ`P¸ÿW/ÐÒñü„Wþ¹'òªµ¾j@ŽNŸŸò4Ð)÷éL w‘\=Äf'£׃ï@õFµI”ßD%>N<÷úRm!«ô%0]IamäJ#‘Tg<ƒÆGò™¦"l/£Ú…f%šBr3ÇJGÓ¯Þ^.J£K–C÷rz~}?€±j v&Žo—'ä-õÛ¦(Qo©,J©8’G öúÐ5QÏÚPñÓü>¿¥>(5 é¾åêÜtëíô …¦¦·rJ'n1»Œ{ qþzТ=Gìì 0¸+– û˜   tŸ¶H$ž6ô€,Ð@P3ýáô¤Àʺÿßøÿ:\±ÿ_øP„_¦mÖ®-[I!CeO­RF‘§u{ƒêo™‹Fr²*áO\޽=x¥`P]È×Yvf"ÎO-UC’Fóý)Ø~ÏÌ·%ã.ž.|½„‘•nqÎJ“6¬ìC&ªãÈ|o 8ÎOù8ô E‹«¿³Ì©·vQ›¯ÿëþTË[ÿ´\ù>QByÉúvüJš9ÙÒRbxöñ÷½þ”Qu_Ý#Xå1äz½‡­Dš¼ÛZg¶>NT.Þ¼¨?¦hoí'XÛ„7ñäcŒc¯'ò ¶¬U¾ÎpŠåºäãŽ9  nun‘Ÿ(³3„+œa¸ã=úÐ'T”Ãæ m™˜o9ävÀ O«¬Hî!vE†éž3ߥê3G#* …“žz¨Ži¤\b™×BÎÖ’nTg|äƒü¿Z|¥{=mrÝÆ¢°Âå–%‚•<`‘œ~µ&Lˆj’4aÅ«(!¾órÆ×ô “RhVBÈ%(ˆß»g$ç¯Ð~t©ª•UmŸ &ÀsÛÖ€öæòÙö/4˜Ï¡Æ(Ìsy“IÜl'Üöþ_I@Uþû}i0(\«—èiÆø‡þB+ÿ\“ùUÚ¿ß5 G'OÏùh ”û‹ô¦;¸'’â6ö¯qëÁ  ú¬¶°L­{Ê¥>MÀpsÏ_“i!¤ÞĦÚâko&)ÕFOP{Ô b ‹LºŽd"äíFc¸¹$‚xãžô¥]¼™ûQDiw8V?w$ñùý(þϼ[¿>9ÀÁû…¹ïŽØéŠ”Y߈•ä/sì;cëùÐ-5 söÐxéþG×ô Çk¨+¡k°Gñd}zqô  òYêk3¼W*LŒ ÷}ú~”ÿ±j\x7Ï|j•­ï…ª§ÚK»;ÉéúP‹®"ƒmÔÞl¹äŽŸÊ€,P@ ÿx})02®¿ã÷þ¿Î—,×þ!é€T1` 1êqÉ  € †Æ@89í@@bØ=N( €`CAê @#*¸Ã(aèFh*­Œ€pr2:PÐ2« 0{Š\P@PØÈ#4P@&ÕôûPÐ@Uþû}i0(\«—èiÆø‡þB+ÿ\“ùUÚ¿ß5 G'OÏùh ”û‹ô¦;»ie¹ÒM«éëÁö  ú­Å½¤Ên£YC&~8çž¿QIÊÃQobSi,ö6Â9ÌNŠáÎxÈý@¦"´‰¢™gÀFc»© ž(GšIrnv£K½Ôg‘’@ýh?³.矩ü™ç¾:{b€%[ Ï)Q.ö€:‚}¿úÿ(°¾?ocÇNϯçí@ŽÊñ ^±ï~½?J„iWK&ø/Š)ã¿SýhM†¡$¥Þè HY@'ÇOn§ó ­÷œ¯%Ø‘Uƒ9#üô Ágx·bI.’”^N?hP@ ÿx})02®¿ã÷þ¿Î—,×þ!é€P@P@P@P@P@P@P@_ï·Ö“…Çú¹~†oˆä"?ë’* ;Wûæ¤äéùÿ#M²Ÿq~”À§ylÒÜÆâ@ qŽ9ëí@õ[¸ldp‹ tÀÝŽ9ú{Ñ{-ÉZÍ®,m”NbtPw/9è˜^!cž3 ŒÄ7'?ýjI4e’Bír¡ »Ý@àŒ’ד@öc}¯ÎŠéÁû€ýqÐúb€%]:s ª^2®:©>Ùïõüè³n‡"þNÉÿ¯ç@O¸GBo¥ [“Ï__Ãò “L¹Šj ^€úõ 67²["Ÿ-×vYX’2rMh[FÐÀ‘¼†GQË1äДP@ ÿx})02®¿ã÷þ¿Î—,×þ!éѼ„¨r‹´ò§œÕ&…Š&Ø™{b“w RÉ8 € ( € ( € ( € ( € ( € ªÿ}¾´˜.?ÕËô4€ã|Cÿ!ÿ\“ùUÚ¿ß5 G'OÏùh ”û‹ô¦;Ëo6æ73Çlõë@õKÄÓæVtoL ÙÈÁú{Ñ{®JÖbâÆÙLæ7U2÷éýqùPxt¸xü»´ùŠ…ûÜœã¯ô “I·y v  w¸g’@<ûž~´ 5ZóÍŠñ ýÁÏ®;ç¦(eÒÙ¢U[Æ 2¹ç§|û~´ &@r/¥Î1ÎÇëùÐãÓ$GFûd§ž¼õ÷ãÿ­@ɤÜ ã»¾Fs‘ƒÖ€—8‰Ûí™™›!C6ÁŒåzç?*šm2âe@o2¨ªYÉÆyëï@`PAÅP@C?ÞJL «¯øýÿ€/ó eËõÿ…Eú`6TY"drB‘‚AÅ5£)­ÖX’?”í Üð)§gqXŽYãhó9ØŸÂ;ñTäŸA$з–Ïp)“ïJ2Hm öi€]F7SÓn)ó °–ö“Çp²I>ði<ýh”“VHb½´íq#‰‚£cåǽ%%kX,/Ù¥ ÍÆönI=A÷÷ý(æ]‚ÄfÎàäÊF ’Hÿ=)ó®Â³¶“©é Tã$ ÓŠ—aØ_²L1¶rH 76Iü¨æ]‚À-¦ s1bT™PzÒæAfMhö 2Ä+" °b¡Û¡CéP@_ï·Ö“…Çú¹~†oˆä"¿õÉ?•P«ýóRrtüÿ‘¦€ÙO¸¿J`S¼·I.cf˜!³Œõ 5;ϰJ¬#ów¦1É#ÿ¯EÚØ,Hm#¸±¶G˜£*‚¬§ôþ¸ý(¼:}˜ž1â¬ÅQg“œu ɦÙ4¦I/ .ç€Ï$€yúþ´¿ÙÐIy¾;Åó$ çÔÐЫ¥+Ä¡n[n1•ïÐuü?S@ 4`E̹Æ?Ïëùš|zPÑ…ÄŸ)Éç¯_ñý(‹¤62×Oœ“Óüúúо’Ín‹— »¾lsÉÍ^¶„[Û¤A‹myºšz†( €(ê—‘YGçNÛcàœ~T˜fãÏ¿“U÷Ï?Öšv?ëÿ ‹ôÀd¾S£G!R¤`‚i§f¸Èü¤fÄ‹Æ ýÐJ¸ZÃüø·„óqžp:Ò˜¯"Gv`wÏ ±©Áu8Á=èÆ@!×§4Ñq r‚TÜHÍ;Í8Þ¹úÐ ¢(Ì]¤g9ãâÊÀÐæ€Éêê?A4d$\¨óÒ€®¬HV©ÁÁèhX…bÍFÓÄ…CH£s÷=³9£•wFá†JäzŽ¢5aôP@P@PUÖ¡ Ÿfb|Ö•vž@÷éH æO6ÐÈF Ç»QHGÄ?ò_úäŸÊ¨Õþù©9:~ÈÓ@I.²"i!ṮEær1@œ¬ÓpÁ—¦Ö w;õ¢àH.q#>ÞJíäçüõ¢àW™kx¡;€‹î²œóÐþ\RÒ4‘3mFbqŒœõü(¸ÖQ<ÂG.H“yëÉ8?{8ÚäNÜqëEÀV´‰”!-´ tè;þ\‹‡!œc··ùüMñÚÅ£)”äóŒõôúÑpÖqÜ@p_|Ñp´@W2>Ðs·€3EÀTµD˜J¬ÁŽœ{t¢à8[§ÛVä³’¤½‰ÿõÑp4>ܸ(¸Û÷ûqþà¢à@ú·“§ý®e@Ë(¼óÉy3-P aAÎ~´Z8|«¹ rìáI$ߨ¡ ¾KÆp(–ÚȺòž$\ˆÌ <?­W¹µ‚êåç6ç|¤ bŸ3F‘¨â¬‡=´oܤ‡u|p cŽ=8£™‰M¢5±¶ÿÖáƒÜà€òs1ûFO"G%€²Ã,Cû§óšW!»»ˆ±F }òÁ·8'<û{š.!m  G.@Ï]¾¤ú{š.X6¶öé׿çEÀ‘b…X6ÒHràœpIϧ®>”\ hxÜÈËËc§åEÀžr·Ç€•Œ‚:sÃùQp+Û[BgxÂü‘¯BÎþ¹ãý‘EÀì"t(Y¶oŽsÓ®I¢àYMäŽÔ\ÚÚdÖj›!n ëžôÓ°âù]ÑV=&œ:< Ç;qŽÞŸ;4u[-Cn!+‡fÛ#IóÕºö÷4›3nå¯=½+ˆ<öô\ÏoAEÀ<öô\ÏoAEÀ<öô\ÏoAEÀ<öô\ÏoAEÀ«>ª°]EnËóÊ®Çþº <ë¤4åLƒ8 8Ïn” { ŽÐ 9 ˜úRÈø‡þB+ÿ\“ùUÚ¿ß5 G!è9ç#¡¦-nd éÈaƒûµé@Ço ÏÚäÿ¿k@„òo?çîOûö´yŸó÷'ýûZ<‹Ïùû“þý­EçüýÉÿ~Ö€"óþ~äÿ¿k@‘yÿ?rßµ ȼÿŸ¹?ïÚÐä^ÏÜŸ÷íhòo?çîOûö(ò/?çîOûö´yŸó÷'ýûZ<‹Ïùû“þý­EçüýÉÿ~Ö€"óþ~äÿ¿k@‘yÿ?rßµ ®|ˆâYʪÑŽ~´°Åqf2—fÆK'øP1á$,ÎÄî „à`ýhqrË…—gºÇÏë@ [Á…Ó‚ê׿ÿª€ȼÿŸ¹?ïÚÐ ò/?çîOûö´yŸó÷'ýûZ<‹Ïùû“þý­EçüýÉÿ~Ö€"óþ~äÿ¿k@“wÿ?rß±@‘yÿ?rßµ ȼÿŸ¹?ïÚÐä^ÏÜŸ÷íh[u¹¼âìàZ?Lú}h7Ÿuýåÿ¿ýz4|û¯ï/ýûÿëÑ Ÿt’èãý_ÿ^€>ëûËÿ~ÿúôhy÷_Þ_û÷ÿ× Ϻþòÿß¿þ½¾}×÷—þýÿõèÐÏt;Ó“€<¿þ½>ëûËÿ~ÿúôh0ó¿÷ïÿ¯F€}×÷—þýÿõèÐó¿÷ïÿ¯F€)žè`oL‘œyýz'Ÿuýåÿ¿ýz4ZH®ä¿ÚYsØF8 Ä“ÅÆ£)ÿ× 0”©a‚1÷?úôÊø‘vj›}#QúSÚ?ß5 Fßy1ýïèhø>”`úPƒé@¥>”`úPƒé@¥>”`úPƒé@¥>”`úPƒé@¥>”`úPƒé@¥>”`úPƒé@¥>”`úPƒé@¥>”`úPƒé@¥>”`úPƒé@ •KBW‘–"”ÎüÆãíXfväõÿJb-¶¢ò±¨R0£=:uãÚ€.Ú¤é Nä @Mƒé@Ý£ÉHøsœrGoZc*´—EzHïÆ{}hbÖ)ãÝçÈ\œ}ÐŒJ@>”ÊHÅ|0Úzã€ÀŸÒ˜E À”ès¼ž¤ãŒzb€%T”NýÍ€žùô¤¸>”`úPâŸù 7û‹T“ÜO½¿}'_ïO´Î?å´Ÿ÷Ñ í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ùï'ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´Ïÿ=äÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö™ÿ缟÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}šÃÕžô³±c´rNhÿÙlibstruts1.2-java-1.2.9/doc/images/how-to/eclipse/developing-eclipse-style18.jpg0000644000175000017500000006017010404045224030125 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„   (1#%(;4>=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀ¤!ÿÚ ?ê[A‹Éx–fUdtQÀeUíé¶ýЦXË\1H_tK´|¿:¹÷ÉQ@!² ©Ü]²€\LØ'ÜáGüzš¹@¯~õfßÿÇŒÿõÌÿ*@SÓ?äûëý+R†…—úƧ¦EPEPEPEPEPEPEPEPEPEPEPEP+ß½Y·ÿñã?ýs?ÊôÏùCþúÿJÔ¡€èõ{+BÐO6É ÃiÀà}3V%Õ¬¡¸h&›Ëu¾e NCÅRL¿g"½æ½ ½§Ú#ݦï1Z<+ÔòkQ[Ç<’:Å'*Æ6Æ3Œž8ùXý“&»§E/–×0r™HÈ<ã·JšÇS´Ô i ˆ*Tàô<Ò³§$®É.¯a´ÛçË@D,p:“Ž€dsïQJÙ¯>ʬí.Õl,lFÓÐçÇi%¾©isr-ávg+¼|Œ_\ã=z’öúÞÅ®¨cµKÒ€"W²’ãÈIX¾à¹ØØäeyÆ9Ï´&¯dí2‰¹ˆe²¤dgzóǨ _[…f‰|©v9d$ÆÁÃ6c'ƒSZÈO>x-(R¤GÍ÷yè3Ú€-Ë*CI!ÚŠ2MgrÏÈ"Ü:™D8X!ˆÏLg3jvËqÍÊÕ<—ΠǧïéHº­«"²™NäwQå6HC†:ç·Zjk­b·Œ'Ž&ÆÂÁŽFxçð«vÓÇsn“ÄIG\‚ähšëv%•wȹ.2Ñ2·ïd‘À<ŸJõÛlDñeãi|§È`ÊJ’>\dç  äÕì¢X™æÀ—vž9Ç>œúÓ·cûÏžOÝî <¦à¯QÓ®qéÍX´¾·½Rmܶ<©‡ž óϵ6óR´±tK‰v3 ð¤àzœtæ€=NÖI¼•gó2À©†Ý½Iãïßµ@uíÇ­#ë‰##yá•Ñò«tí@¢ºŠ[™­Ð“$w‚¤‘‘ÏCøT´Q@Q@Q@J÷ïVmÿüxÏÿ\Ïò¤=3þAÐÿ¾¿Òµ(`T:$—·ÒLî¬È±º«ØSž˜ÁíÜU‰¼3k4ÆFš` ;yÞ0Ã8ÏëÅZ••V­biôU¹±sÝLñ¼£…è:õê ÛÎ…æ}» `­µ3GõëB•UkdB|6Íx»¥Í¨wvòÌYv·3õ5«§iɧ¦ÔrøP •QÀúš®)ÔæV{b.ʰ•â`­*ʶ29ÃÞ™œa½ûDWRªHÌXR¥W8Æ{žõ&E[=&⦠pR ‚Ü#ȹàçhäq×?Z±w¥­Ý´1I<…¢]»Ø+ãAã®(­–<7.'¸-l¦3‚2Å·Ê1Ðt4ááøDÌþ|˜(SnÕèH<œdàÔІÓdia•¯§2E»’©Î᎘ãÕ ¾‡¼:LÅ¢TRZ4%‚ôçq銶lœÇtŸkŸ÷ç ’•Æ0¼túÔ1é1Çjb8c ”HFÖÁ vô þÍ]Çp/§Þ‰°åPîÉÏÊššB%ÚL.&Úžf"ãnå‡Lõæ€éÛ,m›bJ¡@ .ÁëÔóÀ«Xù-måÜL+åäm|÷o§j­ý…hn&•‹Ÿ48eÏvsÿ¡7çM)UŒGy$f9<Å)kÎì¼ðM%ÖÄ šD•-µXœ’sÈ89'¦*ÑîÌ7&yQäf•¡Mß .É;AÏ'ŽEY·Òå[Inå[™cDi£#( ^©çê[Ý.;¹£˜¹Yvî(¯‘×ø JHïëÏ”É&á!8ùÔôSÇEíT¤ðÌn ÙÑ\(!R1¤‘ü<žO4ÔÐ'Že‰nØÚäI +½·HÆÜc޹Ï5£ýžßoûWÚ¥ÚËò¶®Ý¾™ÆZŠÛG[Ki`‚áãWMŠÈˆ­í‚Iú曨èƒPòwÞNžT{>P§w ’r:ü¢€-!™fŽáƒí± $(PrFGt㊯ká¸í·bòáÁU0N íÚx¶-Z}$•‹eäÉ"Jf2BYŠíÉc¡íD–3I¬[ܺÆÑCRÛÎçnÄ®1Æ[¿ñgµZ¶‚H¤å¸yL¯•…Eìþ½êz( Š( Š( Š¥{÷«6ÿþ”`úQƒé@¥>”`úQƒé@¥>”`úQƒé@¥>”`úQƒé@¥>”`úQƒé@¥>”`úQƒé@¥>”`úQƒé@¥>”`úQƒé@¥>”`úQƒé@¥>”`úQƒé@¥>”rŠeJ÷ïVmÿüxÏÿ\Ïò¤=3þAÐÿ¾¿Òµ(`*ßµ½Í¥·–Ûgvð8Ç\Ê«MâÛX"i$´º ¯°Ÿ“®Hþ÷±«Q¹´i9lË+âf`‚üÖdUŒ¨·‚G|ëéH¾ ‚CŠÚæC:» UÊœ0ë×ô£”^É÷%°Ô¦ºÔ¯mžØ¢[²…|Žã<óW®ã…š(šWHþdÖ“V"Qåv3¤×a·ÓíîfŠOÞƒ6¸ëÔþ€šxÖT˱m'oÞ¬`‚Ÿ6áÝsŒR$}†¯ý̰F®¯ÝócæÆx<~855õÓZˆˆ‰™^TBÃMÌ# ÷íšdš”qÝù9 ‡Ti6«7A×=ÇAÞ^æk=:KˆLpÊ[9 tzÐkMZIŠh¥%À(»2UC`«©ç¿×½"ê·77v‘ÚZ·“,I;»í8FöÜ0Gãô ‹VŸÌ¼šâÜÃem¹w`J‘Ü7ôüié®Äö«:[\6f•P¤†=;àŽGLЦ֠·¼ŠÖX¥Y\)aÁÙ¸àgžyôÍ4jrϨ%½¼{ct“l’&Ad qƒÓ9ààñ@ ·ÕnÚÝîaóžâFŽ1n˜ÁàînûO==iã\„¾¼û$†L ¡X‘ž¾ Œuü(XõE‘¢Qm0i ª+Ã! ޽ñÇj‰5;«.;¸l¤ˆÈ€|I…#9NOaØóžÔEªÎZÒ?±™šxÝËBãjí`1ó`ñžja©¯Ú.b6ó*ÛgÌ”´ ¡ääñ "×í¥´–áb—6ü¼ç¦qØ÷¨Ï‰-TFƼ·Bûð¸$0ëž6·åÅi›‚/ßÈ”ƒ7 çsëSPEPEPEPEPEPER½ûÕ›ÿ3ÿ×3ü©OLÿt?ï¯ô­J&›ß—4¦]ñ1(VV]§F Cyá›+‹-ã 3nÌ̓“Ï^zš¥&#VQ±%¶ƒkeå ­æ¦ä ¨Â㓌 þf¥MÊ9 xÖDh ¶FÉÉïÎ{Óæ`êÉ“­…ºÞ=Ò©¾ aŽ ‘Ó8©¦´D@è’vgMÀ~Τ†Ûܧý‘YÅo#H|µeÞŽPܰã±ôö4:}´2E"¡/b5fbNO¯SùšBº5¢3•ó€hŒ[|ÖÚ¨{ž? ’}6 í¡·f˜GÝ¡%e?.1’8À :u¹f!Ë. œ1 Èõ¦I¥[Iñ4,òù¯‰Üt9àp8 :U©ˆ!W?1bæC¹‰9=O ¦C£ÛA$/N¦¨ó›AàžE:=*Ú?ôÏì{M1.Õ  ó[äÇ@¼ðzP¦Û4QF ‹!J9SƒÔ:ç½$z]´sË*ù¿½ûèeb‡Œ}Üã ÅL€Bb-;.C.éX”#¦Óž? ¨þÓ¤´·Þëpýóžýò:½Œq]µÎùB‚1½É §×¹«4Q@Q@Q@Q@Q@Q@¯~õfßÿÇŒÿõÌÿ*@SÓ?äûëý+R†K‰žFÀ©•£ÆP!Üm8 íÈ9÷¬»ÝK\‚Â[ˆç¹ùe ~æ[“òúZE.§U8Å¥Ì^‹PÕœZo³´î˜B7(*Kà`ñœv=ia¼Õd–Å&žxD±È$aoœs„=8$ú…Bq‚.iÉ5¾½¨ žá„®¥>Q±†ÞNqÆ:׸ˆÍ F%x³üiŒÌúT³ï¡5Ýüz5£A+† ùu;Šœ*à)ëÏaÓ¨ï<-¨ÏsÜ*LRmÛ*¦ß™9\ƒŸ^yôˆ§j7‹w8¼óM.Ñ Ê°<¨ù@?:l3Ý8±¸¸¹¾|—Ybi 6÷çÇQܱÝj3Çq½ÍÄ“)FbQ³i;9Æ $É©&¹ºº[±ב*<.Œ"Úvîñ•äc' mø[$¨º•0¾lL<Îz¸ØO œtûÛV–VèMsxUÛ1F¨ì9ÛÆxÏn†€)Åw~ú*È—½É(%/_,s’ÞOLð~‚’ú÷S†Â "•™Ö6bVýã‘·==—ë@ eª^lDÏs%«Ê@2[Øçh­}.sp.eI,fb#ß@ qê3žM^¢€ (¢€ (¢€ (¢€ (¢€ (¢€)^ýêÍ¿ÿÿë™þT€§¦È:÷×úV¥ íï ‰ã¶g_6F8]Êã9Á9íÚ‰µ="hŠMyfñžªò)óªI–¡-Ò%ŠçO··>LÖÑB‡c(POҜڊíÝyÜ»Æd¯¯Ò‹0å“è2ÛT´º¼žÖ)–†ñÛÖ¥½6¢ÑÍèˆÀ1¸K½xÎxëCV&QqÑŒKë(í!—φ(dG–aÛò¥:•йCy`â2¦AÇ úÒ$7PNîÍÃ…`JŸzK‹¨mŒk,Š­+„E,bHg¯ZVº.ݦŒLÃ+a¸þ]N-me•™cRÄ.3õ  pëVÒFÑá áÍ(7’q… àz޵mîU/#¶*û¤Fel ¼c#ëÈ ŠêÞi^(¦ä練%~¢ñ\GæA*J™#r0##‚(ôPEG¼6ÈRÞâRwŠëÅI@Q@(¢€ (¢€ (¢€ (¢€ (¢€ (¢€)^ýêÍ¿ÿÿë™þT€§¦È:÷×úV¥ ½…ÍÔÖ·M gfUd'$ŒsÍfj^¹“M™#™e™¤óªã',qÉãï~•q’Fðª£bͧ‡æÄw/ †á&TdFÅ#§¾OzšßÃò[Ífâhd[pùW‹;‹œžü{S檋Öú|–ú•ÍÌs/•pU™6òÀ>•rghâ.‘<¬?þdÖ¥˜ÉÜÇ—EšãL‚tŽDWRãŸá#‘õÇéV`ÒŒsBòL@¥ÑW¤Q´7åÈR$‚ÓF¹³¸’X®bÂbS±‰ÏPÇœ~Vï-o.,à‰'„HÈï!™X7Œ‘@ }6Y.¼Ã2ÞHå9ܘÆx ’k[©¬ï`{ˆØÍ¹b>_©ÁçžüÐ2é’*+V·‡c+7îÎÒC8ã&¤’ÖòMBÚã΀,JU—Ë9lãvxéÅCc¤µ„òK‰Îד»vIÎ8ÇÐUÝ> -ìÒ9Œf^Kyhry8bŠ( Š( Š( Š( Š( Š( Š( Š( Š¥{÷«6ÿþPtRÝ“i××sj×ðOåauT¹\ã§5¥9˜BßgTi?„;mžò©fsI= ©5©¡Ó­¦Þl®¬Î¡‰ÀS‚x^{véN]^áîD)k^D ¤1—;ñ·¶ü "éÚÁ»žD–%~jH[†LõÉ~YõfúæHb‚HâÍí¾Î‘£w@#Üd{ŸÎ©6Zœ•µ“i ·Ñ,ªH$º®I3€)ÿÙ–;£o²Cº!„;GÊ=¨»9w°Ú5Ûʉ¸\aÃÓ5$è^&U™¡?ßLd~`Ò‘.ýJÃN²’Î($ž]ølç¿ãšž;X"Ùå‹å®ÄÀû«è(Òì’8´„4ŠUÎÑóÔ­-ÅŒ°EÄ´QacW Ð?JØ­¼ä›ÈÌŒmVÛÈÙm¬¢·¸Å C)/6à±=KPbßMÔ-Q-î-âáá•qô©›dfŽck’ 6ÞT˜ [ E–IÞ0ò¶ýà}ii§Ál"’#€8 0níøÐ–*–ð´QüÑ€ ßŠe†“kb²_1åf.ò*îlœ‘ÀdЉ¦ÙFމk¬€+€£æ¦iFd¬„ZÄ `;GÎ?™üèÒYZÉ1™à¤+´±^qéLM2Æ8´‰blF:P.—c4I¶¼h0ªÊ™¦Á2Í” "œ†Tƒ@-ma³€Co'¹=Iõ5-PEPEPEPEPEPER½ûÕ›ÿ3ÿ×3ü©OLÿt?ï¯ô­J¦K‘}e5¼7/nÆmò‘Œ‚qœûV6§m«Ûi³\o»ˆ¬™® –ÿkÓmiTÜt¹zÕu;ˆ–häž[C$EÕg˜;ðAãœq‘ÐÔÚj†[¹ûnÏ.E˜Ç7@OÉžzÔõúÓЂ/XYKi®^Êb•’vVI<ô ¼äg®}«N÷Èû+ýª_*7?˜cÇ?Þb¡˜MÝÜÁš+ùt[O³›’U\å–'?&rÃ#ç'·µˆln义¤7 ’2NäÎÀ£ÁLŒÏr}"iÃRµ»¸i¡¹•LLÛYS =–=~€{U½M§’ÖÒTµ¹3 #r‘>6 ÊX7 2;Ð&Žñõ%‘Rp ÆÈÛðˆœoVÁ={­^[‰Z;ƒ%œ€FåQARe£Ÿçé@[Ü›]2&µ¾‰a‰’eŽ@¹!F:7sß­Ea%ÕÅù‰šëíH 2ƒ0ÛãÌȸc‘ÐШíoYÖÚHîv y¡i Ç’ ¹é‘ž´‚ÕþÁ ?a¼ýÙ˜ÌÛ† 1#¦=ûP…ŒÐÍe;ÛJì–Â3¼¥\G·óúRÅ æíHF—‰3ùŸgy$Ìk1Ÿ\žGå@ kïìÆZôæ`Hc‡ Žß>O8þ!ý*‘Ø’)ÞÿxOÞ 7dãv?¹ùPCù5yäòîQ5.ÿ»c×å_^y?‡j½@Q@Q@Q@Q@Q@Q@Q@¯~õfßÿÇŒÿõÌÿ*@SÓ?äûëý+R†‘_ÇÐZ°;æb!€àgƒŒÇLÓĺ\jYç‘U[i&àóÇOcùU(¶h©Ê[oOeÊϸîU ‹Ã#9çò¦sO?ßæ©tÄlr^ÝG§Z|¬=”‡Yê‘ÝßÝZ¬R)·`78lŒúqýjÜó!i »ìˆXŸÀi5beWb©ÕíÒ‰•faãr1©ÅÚö{Ê”‘*Å‘ ‘¸ŒŽq郟zDˆ5›X [å`§÷mÜà3ߥZ¶¸Žê3$$” W%HÉê=è)µ+X.ÒÕÝ¼× ˆôÉñ¨×X±e™–RÂ.ØF9QÔŽ>aôÍ(Õ­Ç´ÌÞhb„@ä0$Ž:có¢E'šÔB…¡¹‰¤ITñá#¾h¯dÞxIÌ*ÎÁPÀuÛýì{TöwqÞÀ&‰eU=¤ôÏz­y©›kØí– åñ‚d œžÙëŽÿ‡­Hº­›K,K)gˆ1 #íëŽ>l{PcÖ,äXZ3+,í¶6¾ã<zgò>”G©Ç3Ù˜š’ÊBýÒ==u;G¹’Ý$-$yÈNqÔ9#ÐU¯EŸ ìP7“!™ÃEŒ©`~éÏNÔlj‘Æ6]£Ã8Û˜‚—ûÇ›ðéÞžu+Qpa.ÀÀ·–Û$nÆ8Áï@ sOòÃùÍ‚Á?Õ6rzqŽø8õ¥“WµàP³¿ž©Žlm8 àd{PË{]ÍoʘP;R89é‘‚8ê BÚÕŠ w‘ÔU‰†w}ÓÓ¡ÁÁèhWÔmRÙ.ØFî#!Èbq‚1‘Ïô«TQ@Q@Q@Q@Q@J÷ïVmÿüxÏÿ\Ïò¤=3þAÐÿ¾¿Òµ(`/öi¼x.>Õ$F,UHŒȪWþIôùa†wiYüÀd Ù'œöZ•¡W–ÚÛx|Y'•ÖéZ6¸.À@êbzŠš ;imd†æU6á€S»qËgŽôs«äZOXµ ®£–EóˆgŒc€}zU™Œ«0"<•ܨ?ˆùT™7s1ôEŸO†ÞY¶¼a*¡‡Ìrx`>¿X‡KŠ)¡”»»DyÀ @Àb|åé@ŠƒÃ±¬ŒVêE×ËtŸ:g%IÆNzg9«‘éí´0Gw2¤2‡\`|£¢>ïo^(%ÓD×ëtó¹ ATÚ¼cÐã8öÍC‰0ÜCÅhÌ|F™P}ñ“øÐ¯¦y¶ko=̲?,€`1Œp=3N“Of¾‚á.^4v¬J«·3ØP-tˆm¤”«f9”¦ÅdäüÀdþ&œºt‹n!×k.Ö] …_áéß¿zuΟö™÷½Ì¢?—0Œm;NGëÊ¢‹GH%á” ”?HÓ*XäØÉä÷ M+zÙËu,‚=¾[áU“ `R˦–Õ¡¹’µûˆª¤9ÈÏC@ o¥Çmz÷¾³1_-s–9?67u÷ªï¢ŽÅôÂ8îЪ  `Žx=èí£—’)d½æ‡T„.SŸ›wj˜iÊaçÉäK¸˜x-Ôç¯s@¥Ñ§Š¢²š1¶erÅ ž˜^O=êÙÒÂÅŠâH刹€ %Ž[‚1É tÖ­;]ÊêÑùF6 ‚¼÷ÆzœÔ_Ø¿sý2]ÈÑí;Wî¡%W§©<õ ǦK$i}(O=¦| dçnGA“Z4Q@Q@Q@Q@Q@J÷ïVmÿüxÏÿ\Ïò¤=3þAÐÿ¾¿Òµ(`Všý­u ÄK’0u$‚¿/SÎ1õ›uâF Y'_²¸Y|±ˆÛe†~÷û?­i¦tÂ’’W.'ˆnÝ‚CI™°v u$ç‘Ó£­:vöyl£ i\¤™óÀ*pç¡ôýhå@éE´ë›®j\Ü©PëåÄTçsòóÓ×úV¼ë+ÂË ‹‡£2–ð:–c4“иÖ.­´«Y—Éó\¹~Úq–Ÿ©>Æ¥‹Q¾žê8ãx1+$‰ˆ‰Q\“»wPr?/ZDWÄ7äWkUl?‰†ìyxÝÇa€qž½úÔñj*ÚÃBn¡uhÆ‹•`}'“ß 8  G\º#‰m79„À€›Û3ÏÞsíÒ­j»X3%Í .|Í’¬Cc€ 9#·4±EPEPEPEPER½ûÕ›ÿ3ÿ×3ü©OLÿt?ï¯ô­J­Œ!dPYØògõíS\ZÛ][´"˜œa”¹ü©¢®Ö¢Ám¼(×÷c³1oÔÔ…#ã*œ8P&ÙSÛÍq,q²´°®1ÊädSæ‰fˆÆåž¥¡üÁ€i­ÄH!މcQýÕ<Óªà(Ó[·Ó=s´RíÏNþ´lMû¶®ÿ\sQ\Iml†I‚ª± NÜõ8çô(XÕpBúÅ4-¸¢–Èæ€¨°U z9£daqµ'8Àë@ U B–qMħ!cØq@ #AÚˆë€(dI1½U±Ó#4ol÷ÄŠ¾l`o1Áéõ©q "=F(B¤:"ù^kaWx-·×ßð ò¡ÁýÚc<ð)Dqà€‰Ž˜À ¢¸·šêh£æhpä#éÎ9¦ÜØÚÝ"¬±üªáþV+ó™ÁührˆWiU*;cŠ<´Ý»bîõÇ4yQà-y9éÞÁecer£ƒŒgò4ú(¢€ (¢€ (¢€ (¢€ (•ïÞ¬ÛÿøñŸþ¹ŸåH zgüƒ¡ÿ}¥jPÀ¯-Ä×¶wVöð·ìY™ö³‚1Žžõ©øjítÙ ‹Ìó7…ˆle¸ãò­#$Žšul®]´Ñ®å‰fÚ¢?2&ki7(}ªCd0îHìzT°è -Ÿ 3ÇH²!1È9 (æCuQ¡g¦=¦±upÁåÎÊÁÿ‰8Á;žzÕÍJÝîlÚ(±ܬQTûüj[¹„åÌîeM¤Ìc´ÿC·•bä0™6ª)R9Ž:qM¼²wÖ!Sf$ 4rù˜lD@Ùœm##8Ï~”ˆ4®a»»°º†U‰YœˆÂ±Ã&F3èHϨúÖ é—Ý[Á%‚Ê?{³,J"¸‚ã‚ ×Þ€/O¤Þ‹ÛiãÛ+Ãå0É´áq¸t'ž{Ž´Ù4{±ËÚ[™Ê„3y…ZQ¸IŽžçÞ€ãF¹™^?&5·YËÇÈ0T¨ÔÈ'§zØ·[¨žÞ-‰öu„f³‡À÷úÐré2ùw äÀ“2:‹~y7yãÛæ©Þè—rˆÚ ;TÄ¥Ö ø ¡p>^äzu F‹« ˆ¦[‰"Wq9Ëês·¸â­Ýh·2Ãt‹ äIFòø2–l®î?‡·^œb€6—rñϳ‡ìï":Æ&é…窑œã¨9ÎzÖ”VqYÛ$pù„JA ©í´P/m{-ÝÿÈÇqŠ9VBYH݃ŒµëÚªË§Ë «ÈmbX„ˆæÒ0Y\AáW¹ ôþ¡6™2é‘Göïmnc–Co;$jì¬þð!ÃãœñïŒöÍ:]b(­å•àœ˜+FB‚22'Sí׊¹ip.­cQH»‚¶2?*¯öÓÕòÎTCmÊAÈ6së÷i¿ÚȆ·™fÞCò–9ŽAÇ@O^Ôx‚lg·%UK° 2qPHÏrÓ¾*s©’ìIm*ýž—oË–w îÇð÷Å5uˆš2D‰ M‘8lí=p3ƒÔŽ•fÆño­ÌÉ‘®ö@$´N;r^h(näûmâNш Û³h;ŽW'<óøTk¬Dc$Á2¹QÜȤs’R(Þ¹>Ûwµ„¢K3ÂD°–l©Æpœõ«I¬ÇäV7JVå€ É›ñ’9Ç^q@šÁ[ ®ÒÆá£H„¨IP$SèsÇàóRË©y(†KIÖFVsS*‹Œ±ù±Üt9ç¥SvÖñZÏ!XÖMË´)V$ŽàŒuü),õU»•c[iИ˒Û~\1]§ó‘@­'76É1†XKŒùrŒ2ýEK@Q@Q@”ºìlÍ‹i|´eI+„bÅqŒäüÃS㾸[Hïe1´3ò¡D!òÄ‹c¿   q<Æ_²Ê@›+û¼±\uç•=*½–³7• ¹ŽG–äŽ0g<½y÷  ip ¼¶Œîe*Äd%OOqUoÿãÆúæ• )éŸò‡ýõþ•©Cé¦ÁwåÍ+J&% ÈWiÇQІóÃ6W2[Ǻ6f܉l“ž£=MR“F±«(Ø–ÛAµŠ²üò†VóS*AQ…Ç'gó©SE³ŠH1"4„Û!ÉÉúç½>f'VLl-Öñî•XHø-†8$ G®*[ˆ#¹„Å ;Iƒ‚9ÄRCmîU}"ÙÒ%Ý:˜™Ye`ňÁ$瓌þtÉ´‘&¡Ș¤hÊíÝ—p0 9ÇL™ã­'}¸†h°å&ÊÙrHbs‘é‚1Ò©6€ŸjŽHîfXÁs"—rÎX~mÜtb€,ˤZÊêØ’=¥HXä*2¿t=0)G´xž#çl|¢VFsÏ8 þȶÝ#†œ;¿˜\JÀƒŒp{pü*qg¹Žã2#˹<{ŽçŽ´é–Ê$]®R@T¡rUA98¹¨&Ь§UÉV/»Îl“€2Nyà@ÿÂ3§åNn~@¡~üÓ¿j³.i*ʬ$Û `@‘€PÇ-L÷Å ¤[™O2ä;0bÂv!JŽþ†¦]>Ý$·tVSn¬±€Ç=r;Йoö™§c+™×dŠÒ¥yã1Éüê9t˜Í³¤.Ë)`Ë4ŒÎÊGrBG^ô^]^Òu¹e ¥e|Òs޾¤õÏZµ.“o,óJïqºdØàLÀçŒgÜþtš4%Äò,¥UÝÙ¶íèq‘Ï'¿sOµÒ¢‚+Uy$‘íÙÜ6â2ÌI9ç©ëšqÒ­éºo5¤-¸ƒ!+¥ztèH¦6‘¶’8‹+°]®ìÌSoÝÇ €2xPZiÛ¥¹ye’XÜ6òf$œŒó×¾jIt«inVvóCmYRÀc$téÅ:-2Ú(d„+´n» »–} ¦6“lÈ4Äó—2¶æ÷=¨ë§@—ŸjF™_j®Õ…Âôzw?Ek¦¼"øÉ:ù—g%ጡN1ÆIúýI  –ÐGknDHÆNOçRPEPEPEUM6Ò4dX°«7Ìy*w}óÏ¿ziÒíNñ‰v·ð œ*œç*3…9È ].ÑEH¡\—$¶ #'=rIÍG>“nöéJ#x“dO–;AìAíë@­ ±¶KpìûI%˜’I$“×ÜŸZ«ÿ3ÿ×3ü©OLÿt?ï¯ô­J.'xu­+F¼À!Üm8 íÎsïYwºž¹Œ·ÏqòÊ@Ýãf[“òúùÖ‘K©ÕN1væ/E¨êÎf—ìæHwL!”%ð0xÎ;´èouI%±I§š,r [ƒŽp‡§ÿP¢ÈN0E½9&·×µ3Ü0•Ô Ø6°ÛÉÎ8Áã¯çZ:”’ÅfÍ `Û”3*䪖ˆ dô5,Æ{èeMyt±Ù“uqo4ŠÒ }ÌÑ…8b6ðsŽÃ¯J}ÝÝÒj1D.e‰^xÑÊñ¸ç#=ùúнBöäȯjÒ„hÃB.%|œ«dd cÓ¯ZŽÊúè_F²Ï4©%̱mh6…A’§ øéƒøÐõ[Ñu£(†ÚfûL‚ SØ$ú ϸ¨!¾»¸³·-ͳyE GbÒƒŽ…z½ºõ  aå‡XŸÍ¹»ØåLQ*Lmäço<õüê½µäßÙÓ䜲Üò´qo¼Ð Ç·á@K}¨)$\\°K"³çÌ*ß»ÏËÁaÔ*•}¬Gqr»‡×oÉÔ6pTd|¤u&€"Š÷Tþʼ’k† eT„–Gî¿t;wú÷«W^y1Mkwu2º¼g*çî¶ äÈü½èHÜC®[Ç#I$¢ÔÇ$¾QÃ6TŒ1ëU-åÕn¬/ÒIÙn ¢"häÇ@JŽÝOÖ€-My·NÛ åߘò¬qÌÖà»s€¸ <â¶(¢€ (¢€ (¢€ (¢€)^ýêÍ¿ÿÿë™þT€§¦È:÷×úV¥ íï`‰ã¶g_6F8]Ë‘Ç\ŸÊ–mGHš3÷–RFz«È¤ÀÕ$ËP–éÅq§ÛÛŸ&[h¡Cƒ±”*“ôâœu %uÜrïr¾¿J,ÅË'Ðe¶§iuy=¬Rƒ, 29ã·­Y’D†6’WTEfc€ XR‹ŽŒ…µ 4$k¸H F2 0qL–]9.ÒIdµ[ +1]ø'Œ¸&‹R:FŒò0TQ’Ìpªos¥´±\É5™)1Ê̹88>™8  êÝgXxÄÎ2¨Xn#ØUyõ[8Câd•ã :FÀ²d’3Ó&€&këE·µÔ"p$.6“éšœFGJ¬Ú’4ª×p…KH»ÆP¤ŠHõ; !Y’ò¡¼Á‚qœ}q@[û6\­ÜeFDƒ«}ßϵ$:•”óÉ WP¼±Œ®:ñ@[]Û]©kiâ™Tà˜Ü6áD·0C*E,Ѥ’}Åf·Ðw ›ëEàk¨D¨ 2€$‘PcOk3uÜ/Ç"@9# rx>Æ€,Ës‰4ÑÆò"³XûzÓa¼µžO.ˆ¤|µÁÁýh/®ÖÊØÌñÉ"† ˆÀ'“ÔŽõê12Û²bâCà|¬3yÿdŽ3Ò€%[ËgeT¸‰™™•@prW¨úІmRÕ"‘â‘n5.ÑÂÊÌŒö ‹SµdC,‹nîæu ‚p3Þ¬¢Y–" XT,7:œPè Š( Š( Š( Š( Š¥{÷«6ÿþ™&«¶›{ý’ö sO+ÈBc<.1“Ï^žÔë­6âè–y¢V–!ØCŒNWž=óLƒJ¹Šê9L¶ø[™'m±[p#ÏQ“úP·V7—ZAµšâ'˜“a€Ùú:ÒÝXN~ȶmQÛ¾ý®„äà_s@Í¥N÷!’á=¦*S$îB§œú*µ®~Vð†$ nŒËËÜ7¬{Ü}(I´›ÉÕwÍm¸Z=¸>QãwqÏ vk‘z’Ì`1Ç@V?˜·~OAÇJ»EPEPEPEPEP+ß½Y·ÿñã?ýs?ÊôÏùCþúÿJÔ¡€ß¶ÍoycQåO#.Cs¹äc§ÐÕŸËmÊöU$1'=rG÷Ù5j77…%+jZO—‘a[LLï 2ü¿:’2@ö=,:ü·lX†k„€eÆéÓßô§ÊŠ[²}:úêmZþ ÄB(]U>nFW8éÍ^½¸6¶þb¦ö.¨ªNf`£'°É©fsI= Mª\~á#´F–Ižn²‚sœr8=³ìigÕ'ŽëÊŽÕ]DÉ1—b¡ºc‘‚?í" ww‰oi,ɶR‡nÐßÅœcó?ZÍ\¸”¢%ˆ|Àáä+´¦Òz®q†ôÎ{w  ¶>Ó%³´2ù`É“•/ŒÇqÔŠŠçT¼{¹†$Ž2ÆÂ@ÎÃpJ‘œõГëRÄ<±f^äJc(¬YF6ržŒ;u­8gY=ÃË‘Ð?”äQí@§V¹3\F-Dq<‘³È~r¸ÿgç±8§i]Çeo,–°4³:/—ç€ÃƒÊúöýMj³[´©-¼A£hGç/PAúûS Ô.Œ—†h`A#"”îb `€:{дíEîc™®¢KcÁsÜqœ€E>æòxîšx#“ËDy ’ìÀb@Ç'å=qÚ€*Ük2B“H¶ÊȾo—™0XÇÙã¡Ç_Â’ëS»û$Â(#Šå^%ù¤ÈFã¨ÏLõ  kÈ$°†à#y¬RG“»k7M òõâš5IZú(RÙLRLñy†LTxÇ·®(ÚµòÛéo43ª³ˆë†Ã|ãž=ª¢ëÒ4 2Z«Åö_´HÞn ã†\c¨ 犳o©Í%ß“-ª¢ÚâMÙ`¥³ŒtÀ?¯Zj]].™y(+4°É ŽÏ•Iôœ{Pæ¿V$·%• 32]ƒðyçØSWa©­¯Ù‰ŸËóCíÝŽ˜éïŸjKmBúm>YÞ UoØ«9ù¶±ªñÓßð§É©H–ÖÍ"G’ÜÎÛßnBç 9?0ìÒ€¯+ÜkP°ùËq&I,¡‡ô<þ™¦[^\%ŒwÓ\ |øÐ­¾Ð¡YÈs·'¾M+j÷"a ÙÆÎ<Àÿ¾áJm'øyaÛ¯nô©w{y©Â¶û#µÇ;e¾f žÚ»Ø¯ ƒP–(o¤ž!º ‚*«äª‘Î÷¹ëÞ‘u+£kzæÒ1-´‚0†pœ)'qæãúPQ@Q@Q@ZÄ‘Î-f—€w ¬ë™®%¶’5°¸Ô€HãHôå)a°Á JÓ¡$vv3ìk¨¡iI! ã'éNºÐôû‹7¶ò$nñ¨È÷ÔþuI´Zœ•µ‘g ·Ñ,ªH$º®I3€:TŸÙ–;£o²Åº!„;~èö¢ìåÜzÁh×o2¤Fáp†7LÔ²ÅÑ4r ta‚§¡¤Ko©ZM.ÆXãŽKX™"ÎÀWîç®)’é6ÒßÃvÙÝT#¡Î3úâÎÝc–5…LÅäP8f=I÷ªMáý=®"‘b±äùJ«µ‰Ç'ŒçÞ€-O§Y\H²Mmºci+Ó*9ì4ÕI<ø T•†ýàÇ<~´ã¥Ø°Xˆ‘·¿ËÔúÔ«in³G*‚HÓËFÇ*¾ƒÛŠm½…¥³»Aom'Þ*:Ôm¤éí–Ö‘Ý¿{úÐ¥Ó,eEY-buEÚ ®p=)dÓìå‘ä’Ú6wRŒJõcgYý˜Û}š?$°b›x$ƒOšÒÞyRYaGxþëÈ I§YÊÒ´–ѱ”bL¯Þõº^š#v–Ö˜Ë /Lý(û™:[·“мBFî~_Ö”ivÿÚoù¼Ð8PÆ3ÀÉãÔÐ%¦›PE,Vñ"Iºl(Nx÷ɪÖú>—-ÊÝÛùrF€ªÆ›L`ç$ôÎsï@[éÖv—’JϾâ噓nÀbœÚf™´ªÖÐGó&FãÖ€$u‹CbÚ#|Æ1ÀúTs[éo~†e¶7`†@Äoã¡€$m6ÉÌ¥­b>oßù~õ2k-6 DI¢‚;xŽW~©?Z_ìý9åÝöxK» º ’:7ëÖ¤[ DYUmã_¾ýêaÒì@m"ù¢ü½ê?J°ŽT•-"WŒ¬JK²ŒMå[ÇLvU?E‹e ¨·(eA(˜ïÇ,:°íÚ€4( Š( Š( Н?ßü*:@c[ÿª?õßúÕê­2Ü‹ë)má¹xãv3l”Œ` gÍcjPëÚd×[ȶÉZàð™l¦ÚÒ6:©¸érõ¨Õ."Y’Yåµ2D\,ÙvNüxçdt5,6Ú¡–ÅnMîÏ.E˜Ç/@OÉžzÔõúÓЂ.ØYËi®^Êb•’vVI<÷pr3×>ÕRYžÉ„Ën]Á®á¸êW5 ÂnîæTÑ^yv™ŽüÆ&²Ç/Î"Úp¬wrsŽsŸzmä’ bs-Ê´“Fȉ6•´d0?x78üqÅ" +—º¸°ºXà’Ê'Ì2êù†=Fxàý:ÖËuͽµËßoo4G—k:áJ’7ÁÏ9ÏáÅ^¸MV;ÛY?Ò¯–Fr„q¿# zö?…2âÚíì&W†õîp›•c¼ʤà`o¥-Ä:‹£Å¼H#œãæË²mçp'æÝ߸­{ygW·á•Á„3ÎØ0Çç¯Pd—wfOµªIˆ²$cb;ucß4Ɔâ=:Þ(mõ1Ê›ÊÎKŒ62ßwÏ  ÝÅyãm ã#ù,‹ç¦Óó–êF8ïO[y­'¿híîÝågte˜•ÁQÀãvG¥;N–6s¹‚æáŒ‹±$“æÇŸ™Ž1×­M Ò_ ­ÓDQf J`Çql‘½Aèh•äb5º2—æIHV>X^x#ŒôèzÓ.aº’ÚhÞþHüÈs'ÌyùÝútÏJ·(xfÓžÞÒûdlw¯˜H U†ääƒÞ +x†(YÌ‹3¼Š²üž^Ó³*»`÷Ï&«ú…ª½œÑ9¸ Wåc Ãuú§ogy‚ÁoosA(Uöìrä«6#uÏÒ€'½µ»—QBcºb&|:>PÆÊ½ò'·ëJ>Ýå]¬¶—NÍ#P\0iàÇñÔ}qšKدæ‚ÌÄ. Dˆ†HÀÞ`@`1ש#Ú®[Ã$w³‰- ³Ëæ¤Ä.l뜃ǽg˜5³ Û|­º0¬¼— ûÆ?tŒñÓÚ‰íç›ìË=¥ô‘Ás&ÊCy{H^wdòGSž´ ¾lzâ²[Ýy-Öbù@ß.8-ǃT4ˉäÆY.¥kkcçªÉ½L¹ù¶€zœø@:doH&‘4›Ü}[¹«TQ@Q@Q@Q@çÿYøTT€Ç·ÿTë¿õ«Ô$7ñÁ4¬ù˜•lp3ÁÆ öÍ#øJK=Ë*†ÚI…ƧOcùU(³ENObUÖ´ö\­Ào™T(F,K Œ dçÛÒëšpÿ¤¬RɈØä½ºN´r°öRì:ÏTŽîúêÕc‘M»¸©ÃdgÓëVçš;xŒ’¶ÕI$à$“Ú†¬L£ÊìV}ZÎ4‰šGkAå>KJãØóK.©g Ë’0‘˜ 6?1ä\sޏæ‘%‰æŽÞ–VÚŠ98ÍSþÚ°ù?|Ù“;@‰òqÔcFsޏç¥Ju+1nœöæ«ÜëvÐÂïdÙ†$«"•Ü`Ä`ã#¥Lúµ’B$i[¶í±lõû¸ÏBN„U¸äIcY#`Èà2°<z¤u{=Ó*¼ŒÑ#;‰ŽBõÁÆ^Ô ^ÐZÇræhã‘‚©x]y#Žß¯JyÔíFíÍ"•(4Nß÷xÇÿ«½$Z¥´²\&&O³–Ï*Œuù±Žô%ôªæÝœì8mѲ~ŒGsªZZÉ$s<£UfÄ.Øàt÷éèh+fÚ(î<£æË3” ¨m¼ŒdsÅJ5[?³™¼Ó´1±‰9éŒ{Ö€ý³a¼'žrT?Ülm'Î8ŒÛ¾)öú¥Äæ(¥&@Å(Ëó£‘×¾=9é@]]Ci›;í\à`Iôrj¿ö½–ÐÂV ¨aˆØç'nœðGQÞ€&©gï Ê|Ä#cÐd€@äãœj!®iÆ!/ÚÂUså·ôÈÇÁ^:Ð’jÙâ_29¥ò‰9R‡ž Œç#âŸý£köϲy¿¾Î1´ã8Î3Œgã9 ^\ý–ßÌ ½‹**çf {rjí Jo¢0HKa2ü£ø¾QÀärqŒÐǪÙÉp`I‰6Â60‘‘Î1Èœôï@ —CI^I$¸gw”Ê7ÆŒ• FÇ@*äv¬“à ¸}‘Ååù@Œxù±ëÅAo¥$SM$“4¦Ud9US‚yÉŸlô¦¾•#A_o˜yN¬‡jð Æ?Z.´´ä›¹QØ vP¿9C•==sÅHúsœÇw4K6XªÃÙÇéÒ€•äÚI WRDÎ጑ª®1Ž8æ}¤A{t“ÈÎ@ÁÆqÿ¡7ç@Ë¡ÆÆëdÞZÜ ˆ°ß÷¾lg¹§¶Ž²Bë-ÃÉ+2’ì«ü € ã©í@áÐgŽàÂn3daòÎ0¾bØÆÜ󆬨i³ÇtóÝÈ0³¼°Æ‡!wg’ppO4šXšÁm§¸’fGÞ$9É##8Î*&ÑUÌ,n\<÷%QTFs’@Ž>”—ZÏvnåâ}Ų#RrT©äŒãñT‡n-U~ÅxÎÅã$˵v…bÙS“Éëë@i,ÐÃw’ÇåÊf,Nç$œœRx§¦•j&ñ\nfÜÀƤ“Œ}ìdt <صxd¹–F2ù«#c(CP=™6šÓ"n»—Ì èÏ…Ë+c#Àè:PØørVîU_=f µxÚ¡@éÓRÁ£Çs¤Ó<Þ|f7;UI©8ŸsÍ%Înâ qw$Ž3ó2)#û¸ÇãÖ£‹Bh£/æ Iò‰ü:{Ê€,>˜ÄL±ÝËrm€)±É<Ž{ð}iLx¬Å½½ÓźPîè ;€ Ðt÷õ  (¢€ (¢€8­2K«t”ËÉh‹b.%`«…9¾àûÖ²¡<–9HÐÎYBdãå*3Û;áù€ â™—@ò„ò´ÂÕÛÌd@ÈÃ9ê:T³¤ž†dš¼ê¶¸žÍ<ÙÞ#$€…`ëótã¦{õûRá/–Þ9-@3$Xpw0*ºŒôç‡SÒ‘ËF1cq5«¤ ˜›Ñ_ ~™öú޵“¿s!E2ÙFs"¹c‘•ÚF0Øçv1Ÿ|ö  ¥×&ŠòÙ^8£ŠO,:¹Ãøé’:g°=:ІïT¸“O’cuo0K#ÆÛÀ›'Œg<¥Iq­ÜÆ(¾ÌòÇ9‰äÈ>PÝ uÇ^ß…kA{´Èè·2Ä%òÕ·qÆp{Œž´™©yq=ÔqIlU"‘£(»Èe á¿B¶iVž->ÝÍ팓<ˆŽJ•U ;üÇ‘‚ ë@ºÖ%´.$žÕ€òLn€áŽ7n¹ížiÉ¨Ï ·ßj¼µÄNþ\L…[hPA''޼ãü(Ú~¬ÆÖyõ`DŽE@è0¼ã†`y=3UÕ/,ïZ„D2!‹tDòKg?0ÏÝíýá@o5k·‹QÌP¤QÊ–@’)\àýìòG ëÔÕ†ÕîÖB­m#«"¬«Ì|‚H$1ŒäuíÒ€+Çâ‰pm1ä‰<¼’ÎÁ™J®|g¾=úÕË-Râ[ÿ³ÊÖî<é"+!”.HcÉÀã÷Î{P·Ú¨]5n´óÁäòߺ¼IÉõMõ«¤ò5 2¨ÜÃæX~lnb¡ìCß½-æ¹5¾ ð¶Ž,²+Hy °'æŽ1ÐuëUmüM=Ä_,–AÕ£ÜI;pÌT÷ãñǽ]›S )f¹Ž&7E WÚ²($nÁ=ïÖ¤MRåõ¶µ WÙó8~\î6O\coã@^ÞÃ6›4–÷hdòËä¸0r9é‘Ó5Ÿ§=¥©g¸F_.fY%ËåÔ®aÊA8Š]?U‘ï$ <3G%ÂrÎ7F¤‘Ï }zöÅ,:ÕÓ‰ß6¯…(Ñ‚B‚ÀdÇ€yÚxí@Ï©ÜC±ûfžÞtí™´„Û´œ›±¸9ê*szWW†Ý®íˆ’ÝŠ¨È;²˜ãw9ÉÇ÷  vúµíÍŒ¥ØÏög•LJ[Ëeà3ÔõÇlw§ÜjohÎ%Œ9U*,ïàŽIëô  îuIóËàòÃFHËH€YNz.sÐôíQéZÄ—2B—2Ú:9|£Œl`;“×$ûc½_Ó.êÉf’Hd,͆„¤g޾Õj€ (¢€ jÆŠìê 3ãq“@‘¤¨RE §¨#ƒN  óÿ¬ü**@cÛÿª?õßúÕêµmäìA"ÎÄ“?¯jšæÊÞêÝí刜a€ùsøŠh¤ÚÔX-!·€C~ìvb[õ5'•»^:qÒ6ÈâšÞk‰R6V–øår2*b Ð 5¸Ã EB˜ÐÐTRXÛÉuË¡i#\±Ú=öôÏ=h>ÅÁFQ޵]ôëW¹Šá¢ýä@…Á s×#¡ühvŽ7 ²+БšŠåí­â2Nª¨Ì;3’NhO&,å¦ ÉùG4àŠ!@ `qÐPŽ ÌS»bš"…Ða#d?0ÀzqŠ2(¤€1Ú¤f #0ùXðHö4¢8Âl»}1Å8¨$#§( –¶·†K‹…PйvÙž*Q~^Ћ°óŒq@.Ÿj—ŸjX±.Ý™ÜpsÓ§éKkeofd0!G.ر$õ䚟blÙµvúcŠo“òÓŒm419ËÆŒ}JƒP\iÖ—*‹$CÁÆÂW‘Ó8Æhóµ¬F™Pom‘‚™ôö©|´Þbî9 ®g·³ˆ4ØDg 0„å‰ã õ¤¶žÚíC†Xœ¡ÚïQ@¬1!ÊFŠ}BJ±F …Eõu 0ÄT)QÅ MÉEÎ10Gã@ÙÙÁc†Ý  õbÇó<ÔžL[vùIޏÚ(|´È;*0:RyãRc}ÑÒ€ˆ±¢¢(UQ€À–€ (¢€ (¢€+Ü}ÿ£¤5¿ú£ÿ]ÿ­^  òØÜM{guom yÅ™Ÿk8#éïXÚŸ†ïL™Ò¼Ï7xXfÆ[î?*Ò2±ÕN¢VW.Úè÷rij_/̉šÚMÊjÙ ;’;•,: ÊËcçÃÑÄ’,£Ì#†9 Ó¢Ždª4,ôdzÖ.® s²°âAŒÓ¹æ®jVïsfÑÆŽåbŒp©ö øÔ·s Ë™ÜÊ—JœÇiþ…«òHa2mTR¤r9tâ›yfϬ¦ÓÌ ,rïâ4 ÌãdŒ÷éHƒJæ»» ¨dH‘™ÈŒ+™21ŸBF}GÖ°M¸†êÞ l¹óve‰UR»x =yë@î4›Ñ{mmÄŒ°þéü¨½Æ¿ÛÈí”ùöèì7€T”ûÑЎqíš°úÌ1Û¼²E2²܃ÉÀèzuûg–ƒ–%2UrA'žÄéšžÛUŠâãÉògŒ™ Σ—9öÏOÇŠ—P¾‡O¶ó§ÎÝÁ@É'·8™ª£\·+Xg&qû æCœõOls“@ 6·o ëÚ˜åiTcoÌB– dç <ž=ê8üCm$AÒ ’K"• ‰¿¨#åÍNú‹2[I ad¸òdY̧$ÁÆAâ¬Zÿj¼Êi<`63޹éß÷  5)æ·‚7ƒËÜÓGÞ f ØûÕ#­5¬2IyüNñ „Âú–`3íúPãZµþÐ[fÂ'œô K­EknZåzHb}˜Æ@XŽ9uúÔ±j~uð·ŠÖWŒÄ’‰P0ÙÆA öôü(­Çˆ"Ù8¶SæÃ†*ë˸)À óßÚ§›Z‚ ’E2²Éå´gh*p$œt õï@ ÚÕ¸šÚ4ŽYÈVFPÃt=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀ^¤!ÿÚ ?ê4+N}ÉšÂÕ˜ÛÆI0©$íÕoû#Lÿ u§ýø_ð M¤é¢3>Ó·ü±_ð¬Ã¦Xcþ”¤º]†Ñÿû>ŸÜZ…­ôtEy-tøÕ‰¸UÎZ`p-Ã\qf!l\HÛœ{V-{žÿ [ú÷ÿAr€7ú£ø:Ê=)02´øôÿ¶¿Öµ¨M:y_O·wrXÆ '¿gÌïcÿxÑæ?÷cÿxÑæ?÷cÿxÑæ?÷cÿxÑæ?÷cÿxÑæ?÷cÿxÑæ?÷cÿxÑæ?÷cÿxÑæ?÷cÿxÑæ?÷cÿxÑæ?÷cÿxÑæ?÷cÿxÑæ?÷cÿxÑæ?÷cÿxÑæ?÷cÿxÑæ?÷cÿxÑæ?÷cÿxÑæ?÷cÿxÑæ?÷cÿxÑæ?÷2Gb‡'8ªW“:ÙÌTà„$:q@МÁ=våTo~åÿýsÊ€° Ñã`&óAÏüY¦µ?gicŽáUeNÓ‚_ óì(‡ñO훆Ž5†T\` {qY´À÷=þ@¶õïþ‚*å2oõGðþu”zR`eiñéÿm­kP›dŽÙ!YC”+`{U³ÿµúS°X>Ïþ×éLDÝÑ% ÈpÀ ëÍ 0ª à±Àã©¥û?û_¥ƒìÿí~” ¨Ë>@éÞ‹…û?û_¥@ò[Gp-ÞåfO&€±,±¤1´’J’Ç ¦€¼h'BÒ.äÞ¢‹‰~Ïþ×éGÙÿÚý(°X®.,ËÆ‚î=ÒýÁ‘–ç~5cìÿí~”ƒÈ}ÿÒ¢™­à f¸HÃ}ÒÄ Ñ`± €áóŽ /ÙÿÚý(°X>Ïþ×éGÙÿÚý(°X>Ïþ×éGÙÿÚý(°X>Ïþ×éGÙÿÚý(°X>Ïþ×éGÙÿÚý(°X>Ïþ×éGÙÿÚý(°X>Ïþ×éGÙÿÚý(°X>Ïþ×éGÙÿÚý(°X>Ïþ×éGÙÿÚý(°X>Ïþ×éGÙÿÚý(°X>Ïþ×éGÙÿÚý(°XŽx¶FNsøV]ïüyOÿ\ÛùRø?ÔGþèþUF÷î_ÿ×1ü¨òÊ»Gî–œŽ®ÁDIúÓÎ|n1â)0ýÚtúW?@ç£ÈÃþ½ãÿÐE\ Mþ¨þβJL ­#þ=?í¯õ­j«&‡u2H› Hä˜L0OÊ6ã;õª¶Z üw·(eh£2Že=°ÃgÜvíZs+*¬lÑq4+•n’& vMÌ6‘ŸsÉ«ö:oدî¦O/Ëœ†|À1ôã4›"UVCõ :kb°t‘XKÆ ÷äU¢În§‘¥B¬ÂDÉ'ç HǧMIˆõÑ¥·¼´’ÞEòà6IRG9ã®sÖ¬ÝÛ]Ü[Á•¶kˆå[,a³Çò8 ŽÆâ;ÙnãÜÊÛIÏÌN0Øcõ¨î´ë‹›Ø¦sPˆ ÝCn?/B>½(»h·YÒ *‡ÈÎÆÏ<£Š°tÉ Ü’¬Vñï€D ݆Gÿ¥Bš<ɼ{!*Vr¯#`‚¸Ç ëÎ1Ú¤:Lßh»“Ì çÎyÚF:`c©ãµi÷‹uÙlR3!+½ŽC’qÓÞ©"î²Æ ŠeCbC€B0,sÏ9_^”li L‘¼Y%˹³ÃúŒûæ…Òf[haAmˆcrn·>‡¦pF:P>åo·hmûÎU³zŽ)ßÙr›è.DXÐ.ÄruéÇ9Ï·JÏßí ’Á…}Á™Û=0{w­«[y–ëÍcܰ¬{Õ˜³§ÛöÍ\¢€ (¢€ (¢€ (¢€ (¢€!»ÿSþ}+÷þ<§ÿ®mü©0úˆÿÝʨÞýËÿúæ?•Y_º>”å‘b%Üá@9?…0<ßÅs›vW*À ‚NGcÒ±¨ÜôoùØ×¼ú«”É¿ÕÃùÖQéI•¤ǧýµþµ­@ÛT¾fXG˜âà*fÁM½G>µ¦¿ªKq<&Õâ” Ea†9öè?:Ó•*œ,.¯¨Ÿ(””!s `™'ðLjÌBÆrÆ{瞥T¼¹µX ´’„xãm„69nxÆ3޹ M©^=»ÆÌ`“lA`~ l>9ì9©D× „¸yV+`ÑÇå°ó[ œœû¾´‰©Þyí!…I™ˆ€]¹Î;ñRBøOv¦(Õ#8O•‹¸ DZ$ñ@­nnäò¿})}à!ØÛ[÷Œ ú&Þµ!Ô¯dŒí"'A r`br$yÁô ûRõä¸H6JÑçhòXl çÔãôó¨ÜÉ t.‘‰·c•Ú ñœúŒÐ~}îëÆ‚YX¨%7Æp¿7÷Hº`öÍNš„í{BEhÚ=ÙòK¶HÀ犭ý­© <ÌÐÄ%ߌs´c8c`àc'žN;š4ñn¶ª¶²y‘‚~mÛ‰=ò}jÀ çph¨åžcó%•3Äàf€’$Š0 AÏ¡¥ Š( Š( Š( Š( Š( Іî4’ $E`FªŸe·ÿžß“ÁÀ¬Ûß¹ÿ\Çò  Ò Ú?Óïz|ñ4¿ØðÏýïýö?øš`y¿ [ÉK$ F§t‡'¥`P¹èßò°ÿ¯xÿôW(“ª?‡ó¬£Ò“+HÿOûkýkZ€*É¡ÝL’(h$œL0OÊ6ã;õª¶Z¡åÊZ(Ì…ã˜1àa†Ï¸íÚ´æGJ«4[] ä·ç“Z:oدîfO/Ëœ†À1ôã4›"UVCõ<é­¶@YÒEo7Œ =y@h·æiXʳ $Ÿœ6A#œu5&#×FšÞîÒKiË€À’¤ŽsÆ\ç­Y»¶»¸·ƒ+ln#”99`xàžG‘ØÜG{5Â<{™[i9ù‰Æ{ ~´é줹¼³šm„@¸+–8íÜqÞ€ 6b½·E·Q;–@° žÞÙüi'Ò¦¸½yä$Eü™\` r3ÏQ@ ŸI¹•%pÐ,Ò«!%@* ¯ÈãíÌwÚdÊ·Cm 4©!ÚHlår3Çž¼ô  F•p†3CÈÌxÚ倃cè?!t‡ŠÝàŠ;`†BàüÊÇ;»Ž‡œwã4ó¥:Ìò(‚G’;Œ…#·­Btỷ”SÞT‘€cÇÍœg<Ï­Cy¡ÞÍ4í±bVÝ–r9È8¨u«övw1µ ¸·¯ó†brzÓ·­iQ@Q@Q@Q@Q@ÿp}j½&CÔÖmïú»ÿúæ?•ScýkÿßT¿h›þz¿ç]¼‘ìsó3‹ñ;3ëX’v/'éYË=$Íã±îz7ül?ëÞ?ýUÊ‘Œ›ýQü?e”˜ZGüzÛ_ëZÔMµ[èÄËùŽ.¦alÛÔsØÔVšþ©%ÅÄMjŽñJT*ÆÀ•ÃûtiÊŽ•N ^äë«êD<´å\ÂØ¦Iüõ{N–ïûJö+§,¡ŒÈÚ9Ó9¤ÒDJ1KBÅü“BÖïŠʪÈW% uÏlúVwö¥û\Í”б°oõlNÍØ#Ó8Á©1ºŽ¡ݤ71&%HUNzuéÀ5bóPÖÞâeF™C‰·݃ÇQÜЗó Ù–T>Ljì@ŒäŒ÷Ï<JeôàÝX2Mï?Þ_å@¦³o~åÿýsʘ“Î;G•ŒàrOøS°þ±ÿßGü(ÎÌѲF› ÈÅC Œx9ÏZ»cgueÅxŒ ¼œ²ãŸÇ°ö^ãHš{»©¼ÅŒÊ…•‰$q׎:c¿^”E¥KÚ.°«#¬ÇãzC£¼rHü)ÐëwO4ñ ’y.œwùI?…Jš­ÐCªù&qÙr¹œßKc©Ìé4·kû°ê±ùq?sŽsϧn(óݼZÂǾF[pËÒã'¯ÓVçU»†Ôºù|nÛ+DØ“Çã©ÿ¾}è³ê—{®£4q;1`CaG^ãž=}¹™µYÖï¡áýØÊmĶs϶3øÐ´ýRIZO´à€Ñ ÄÙ ÝAútÍ#_Iåüh&•Æ jT•\(Ïêh+Vò(c F»›jÈѶæ`gŽyô­;YÚk‹‘¹Z8Ü"áÁÇ#'ƒÏ¥Y¨nÿÔÿŸC@›[þzûãÿ¯FÖÿžƒþøÿëÒÚßóÐßýz6·üô÷Çÿ^€ ­ÿ=ýñÿ×£kÏAÿ|õèÚßóÐßýz6·üô÷Çÿ^€ ­ÿ=ýñÿ×£kÏAÿ|õèÚßóÐßýz6·üô÷Çÿ^€ ­ÿ=ýñÿ×£kÏAÿ|õèÚßóÐßýznÿwŸï/þƒ@¦³oÕßÿ×1ü¨N1…Ž^ ÿZ‚â<{`äËÁõë@oâèß]‘ò)9Ç'xâ±iîz7ül?ëÞ?ýUÊdßêáüë(ô¤ÀÊÒ?ãÓþÚÿZÖ  ?¶í¢ŽF•]DrŽ“œÓ¾·¤<òH€$Š;˜°s‚pN=_+5Tåk¢íË,'2å˜ QÎJlµ¼¹¹…a‘<† ¹‡\€´¬K¦Ò»$¹½†ÚDI e¹àg8ÉöÉ ê³E(’)ü¶VˆÍœ`zÒ žÒâíhAXHùr»xÕGûgM™’P¦GBÀ0‹qLO=¸æ€'m^Ín$€È|È×qê8éùΚº´i<2Æ¥A ÊA±^F8ç÷ÍMe¨Û_<«o&óߖKøb¢mÿ ˸BU8Ï'·]õ»8Љ|ÔÎs¹ËŒãNMbÑÚUÃÆH*PäÛxüH95[g™b`cŽJ ’ õ}jK;ø/ZUƒqòŽ+óÒ€ /+‰c‘BÇBRù퓞? ¯q©XùbIâf1’ÛLYhÈÇ8íÔ~tÖÔìáiÞ(ÌÎåb#pS‚IïƒÇáV¥n·?gmêà)'aÛÏN@ §ÝZÎdKXŒapíû½ îä|Òý¸$—be ¾>`Ù-‘ž˜÷ gÔ¬vÇ$±³2ž‹,‡8ü9 TQëc}ÉšVìUœ1<猼÷  Qêvò´b$¡Ô0dB@ÈÈÉíÅF·ñ^ZFê²Fe‘d\1Ÿë@QRDš„Ñ*¿˜…˜">ÂIg÷ïÖ›ý­p_jÛ¦1€Kuÿh»Îi<×oåÁæL-ó+Fî1ŽõÈ j·;™dh\–8ÆqóœãŸÓ­2MZ[}Ü$¹cßð1·žGÓ4ûÍNâ)XÕØ Ÿîž¤ú‘Žø õi£Y0ˆÅK3Ëcw#ÛÖ´meyÄ€ʽCýhz)Q@G§ÿÇÝçûËü¨CÔÖmïÜ¿ÿ®cùSøDÚ>AT¿´-¼ß'Êo´oÛäãæÿ{¯ÝÇ9þ´ á¼lñ € -•`Sì:]ëA£X°¸†rñ"ªd O“<žOl}iÍ«Ü\¬ B/´HBüáH Ÿ—ƒÈõ ÛjítcŒÆ ?ßód~î:s×4§¥&V‘ÿŸö×úÖµJºVŸ1|‡s¼;5ÏŽ¤g®*(<;g äÓcrJÅÌMО¾çó«æf¾ÖKBÊèöK³ln 0pDœÎ}8©a†Ô]Ï,8ó²¡[¡Àê=qŠWd¹IŽžÎ ‡W•I+ÀÑ×ÔqP¾— ŠT¤C#oÜdfÚÙÎG<¥"Ûið[ÇÎR/+,ÄåzœŠ¬ú»Nޝ* ÎôóïãÎzcµNú]£ËæÛ<ð‚óŒñœgùSŸc$Íg2„]Ëç6q» ž}{пÙöþKÅûÏ-È;|ÆÀÁÈÇ<~÷²‚IZGBKŒ0Üv·ätÎ8ÍU—D°¸E,Ž9çÎ~sާ<ðåBh¶;˶MÌæiœõ9Ï'Ôš—û*×9Û ?/I[¨%ëêIüiWM¶XÌx‚TäÈÄü§ g9ǵ:Ky'yäYÓcçi_Lg^çJ¶š(ÐHñ‚Ç,– œóœ¹é@ ý‘ šážI L¥v*“Œæžt«RÁˆ”œ©æV9ÛÓ¿¹ ¬tÛQ2ÌÓ©0!ÎaÀžƒ¦*gÓm%¹’gVia‘±Ð™Àà Š]*Þu„Ç#ª«n$1&Ay9ç‘ß5,–¶ZºÊÅ"2 4„Äõ<~YØÙƱIm’ |¤HXØõç­6K(-ãÝŒ…Ë´c ÏAì(µ PHôï4¨íÄ2POŸJ¸eŒuuéž½½h“\ÅBGc°U-×éO2Æ3:¨>§¡Ô’¡†@Î3Q‹¨I@$:ï^;zÐüØñëŒg9 Èƒ«¨üh°ÜE<+,n °Ü9©(h £Ó¿ãî÷ýåÿÐhCÔÖmïÜ¿ÿ®cùSD}Ñôª?Ù‰çý§Î“í;³æÿ³ýÜtÛíøÐ3…ñ·üŒR×5þULG·èðBtk"bŒ–·vTsò޵bd«r8  ÒÙÛ‰MÈŒy  “ÀöQ=)02´øôÿ¶¿Öµ¨¬šÔÉ"nIÄà ß(ÛŒtïÖªÙhZ„w—Q™^(Ì…ã˜Ó 0}ÇåZs#¥Uš-¦…r«i"`’‡dÞÀi÷<šÐ±Ó~Åu2y~\ä7C¸p?LÒl‰TMYÔ,¥ºž'Ôã’r§ îücñªm¦Ï$C–—Ì Žs ݇=I‰kM¶º‚ÊËEÜ’ÁÉõî?ZÉþƽŽT‹bÈŒ[æG•'Üdy  ’i7föYRávH…[,rÝ0DZzI¸,¥´eUv…vNýÇz(k>îÉn H,Œiy䑃sN›Nyõarû<µ]£’I#ü}ô]t‰c‚Ö†Ô¥»r»™w»rp;ðqíÞ.,¦X‰‡ÈxåAœçæ`ÃÛ‚1@m2i.m\¤¤±“òóœŽ~¼~5-ýÕ퉊Fˆ?˜X$¼ã9ž‡§jŠ .\ÿ¥ù21i“$°ù‘ôêé#Ó.!K5Š+Eû3ç ‘‘··S×ð ͤO$„(c–`\nÏ>à|£ØÕ»Ho bc ŽXœçåôÇŸm£^ÇnažHnxr®N•Áί"­ÿeùwSK6Î%P~AáqŽüPÙ—M¢;źHbq‚>aÇR?Š "ê(öbÜ©Q‘æ?Þ NA#‚{P‘é3¥ä34¢P‘„Áb pF1ŽAúŠ[m7ì–‘yÉš%+º7'v@É9ÔQRdúk¼Q¢:2ÂËå«'nçžxÔÏìEÞXËœœžÐ ãØüisì`[C`7ŒŸ6ìJ­6œï9‘v­Ü¡Æå Žx÷&€g¥­¤þ`¹Û·'9è®;zT¡BV Œbm«Ä2y÷ ])É€@2üã‚N:çúÓí´‘m‘YÕ²K&C| zûzÐý”ª"Ua€ªŽ@Æ@?\äV• Š*=?þ>ï?Þ_å@¦³o>í÷ýsʘØÛì#tþû/Ø-ÿ¸ß÷Û0<³ÇѬ^'•iÔçµstîz7ül?ëÞ?ýUÊdßêáüë(ô¤ÀÊÒ?ãÓþÚÿZÖ  mªßD'X€‘ÅÀTÌM‚›G#ŸZŠÓ_Ô帞&µGx¥(Qa†9öè?:Ó•>Î ^å…Õõ"ÌHʹ…°L“×±ãÞ®éÒÝÿi^Åtä¨pcÚ9Ó9¤Ò"QŠZjwóÄ *Ã<¡;Ž@ÛÇN 9öªË©\yw Z<Ç6Ïõ-ò®ìn<óÇ¥I‰cOÔâÒ# Ý;ÂeÂ! Œãõ¬µ×/²Ö|°Ës»å³.«z—ÒCöuÛ°•ù[ Œr}F ?…7ûBê+­æQ,{ Bà¹\Øàäõé@,µ)Ù.$½Qc`ƬXdãcžÜŠ|×—_ÚÂÚžP_›1± í$ð1œPdÔ®–ÞÐI*yŽÛfcnà'ËŸ^ Œ~4éµ ïßAeŽR§Éb2¬6÷Ç*zPŽ£rnmb…’Er<Æò]w ã#°ãÞ¦¾Ô$[5šüÂC2FØÎxëÛ÷  ¿»ºåÄL{„f&'”ÎsÀûÇö¦&¡0ŽÄË0fi6ˈ‡ëØÿ:Iµ;Õª*Þ„æ&;ìsÏ96}ªí•úÜǸu••‰Â0úzâ€3-®ncÒRyç—-2lê[†ìñÓâ§ŸTºŠwc‚åtÝ0 œôõúãµD—ÏpÖÏ-Ë(7.Ÿ¹V ÈÁ=ˆΟo«Nm¦iÊ+,%Ѽ§Å@#©íÀõ  ˜Ë¿Þ gÔwêÏ¡  ê*@É}FX•\º31Dr„’'¯~ôÓ¬L\ªÛ/¦KŽO¨vûâ˜Ïu)³8Yd(Ù`3ŒŽ Þ•ëL(jÎX7šûv`àé‘@ Mbi$ ¶ d¨œÉG\séÚ¦¼¼–ÞôG+f1û²qÉlgÖ€+bF ¾Z+Sß1ÝÓ¾3Í$zÄûò㌗8œÈÎ8¢À9õ™‘™~Ì E$üàdŒôÏ'§¥HuÒâU•c4è ù›ƒÇæ3é@¦±3¢íΜÏÔdu«êRÉ.ß.2ŠQY•‰ÜYˆ}¸  :Nÿ»Ï÷—ÿA¤‡©¬ÛÏ»}ÿ\Çò¦NR5,ÁG“Šu0<Ÿâü2ÿ×4þUÌP¹èßò°ÿ¯xÿôW(“ª?‡ó¬£Ò“+HÿOûkýkZ€ý·mr4ªê#”CÂ’s·<ŒTVúÞóÉ"’(òH àœcùUò³UJVбý¹e…æ\³ #9É]ÃqRÙj+yqs Å"y ,:äøu¥b]6•Ù%Åì6Ò"H[-Ï œ ã'Û$T/¨ZË«$R2+ùl­!›8Àõ¤A=­Ä3Ú$ð‚°‘•Êíà{Uí6WIB™ Â-Å02yíÇ4;jök<™™î#G?1M]^?µžcVPC2‘ƒ¸¯#sŽ{æ€&²Ôm¯žU¶“yˆá¿ÏáDºŒ^ VÞe*X\ð?Ò€#MZ··—ɸQqÂ)ŒäñŸåü¨—V·Ž'“l§b» ÏÊÛ[õ"€úœËN²¬“œ*”9ëŽj{›„¶EgÅŽÕT\’pOè V—Wµ…YŸÍWqýÙôÝ®9Å2mYT°A,¯+”Û‚»p2sÇ¡  ¿´"rÊãÉG§,N1ïššÖæ;¸ÑnØIrx8èhŒ:å³Â®Êà—dnƒ?Ëšž-FÞêG‚0ÌÜ€HV gú@ mw†ÅcƒÊ[•UGÊ¿)lp=©U¶Hä‘„‚8ñó”;[œp~´±jÏ2Ç JᢇTÊsŽ CyŪ0ùZBáTõùr V¢¤ Ÿi´™ÄD†Ür2¤G=z³”Ïðäqô fAÄrxª³Çc©<£çfÊŸ™¹Ç\}(ÖääåxïšlrÅ*R0I?\J]± ü›ðžøô¦½Ä1Î!cûÆà)<{žÝèåu+šHåŽXÖE «(aŸB(Ãgm¼qK€: ZOÿ»Ï÷—ùP‡©¬ÛϹ}ÿ\Çò¦¬–wR1 ©W ÈF0AãØÆœö—dÆC #d/˜@ÆìàñéÅoÍ,Ï2ñ¼M¾RC—¦ã¸žqêkŸ¬›»-ç£ÈÃþ½ãÿÐE\¤WlRÙÙQœŒ|«ÔóXž|ÿóãqÿŽÿ *i‘¼Vå$R®%äÜÖ¥JºNŸ1s‡vÞÇšÇçÇR3éQAáÛ8næ›’VÞbaÀ8#=}ÏçWÌÍ}¬–…•Ñì—fÔpQƒ©6r9ì8©a†Ô^O,$yÙP­Ðàu¸Å+²\¤ÇOgëʤ•àaˆÈëƒê8¨dÒá1J‘¼ˆdmù23mlç#žÒ‘í´ø-ãFç)•–br½NEV}ݧGY&TÞžcücϨwÒ­_0£gž°Qž¼gà~TçØÉ3FYÌ¡rùÍœnÈ'Ÿ^ô/ö}¿’ñ~óËrß1°0r1Ï…<ÚBn~ÐCë‚çh8ÆqÓ8 †™jV=¾hw!Y˜cŒqÏLžô¯¦Úy¯3!••²çnOÇ'Ÿ­*éÖë"¿ï®Í+H9‚y#Þ”ØAäùXp7™6CäƒœŽ¦€.—i6íèØa‚°1ž½qÆ}*)¬l`ušY$Œ›ƒØeˆ×ÐPŸN‚O´ˆÝÄ’YŒŒv°ÆàŽ:RŧÛÚÛ®÷såÄÈ]œŽ,zþ½h>ÛLÒ®$Œé×#dxgHe'p+…ÎÆ®C§Û[ÝHf2NY£@åv v€}äPþÃgÙ!/"˜‰òTÎÝ@úóÆ Ylì …ÚRc äÈFÓžÜñ×µö6f^ܱPe•ŽW¨ÉÏ8Ϥk(-`5c‚ÄrÄg® õ  ÔT˜úW˜ìÎÑ€CUN Üž¼þ”Ñ£äòŒyUÁ`sœúðH¦äÒÄ–ÐÂÒîòåó°ÎîO­Htäe‰ŽÈÝÛjåxlñÇnhi-ö¦˜Içc! údg „éSKçËRŃ79$œƒž;@„:4“Lûö*.œdûܶûU}ì›ík2Î#áÔ“Æ}ýè«i.f@=OÎSæ ñÏ?*X´`†ò#¬d¹Ët<óíÅ:ÛGX.VVpû[w ’x<œž¼Ö¥ Oÿ»Ï÷—ÿA  SY·œ%÷ýsʘ Ò²Xc;AdÓí]¤µ‰Û9eä þ•vÒâêy'¥i¼G3¹;¶(#Ç+“V`sÑ¿ä aÿ^ñÿè"®RÙÕš«I•ÿ-çÿ®â­R¬šÔÉ"†ç.¾Q·éß­U²Ðµï.£2´Q™ Ç0cÓ 0}ÇåZó#¥Uš-¦…t¢ ^&T”;&ö€›HéÜòkBÇMûýÔÉåùs°aÁÜ8¦sI²%Q5aÚ…”·3Äñº€œrNPäÃߌ~5M´ëˆ ¹"(œ´¾`TrK®ìì9è*LKZm½ÔPÀþZ(„î䳇'׸ýsY?Ø×ÑÊ‘lY‹aüÈò dð;ŒÏ4r]&ìÞË*\.É«eˆ-ÓŒ{×½I¸YVHRÞ=ª»B»§~ãŽ= Mcawd—$G–F4ŽH<òHÀÁǹ§Í§<ú²Ü¾Ï-Whä’FÆ?_ýV]"XííaHmJ[·+¹—xÛ·'¿ÝéeÑåË0ù¨:çæ`ÃŽœ(çK™îm\¥¼I,l~^s€1Ïׯ¬\Û\Ý[ªÌ vYKlä#¯ ïÈ?Q@î´yå¬mÜ›U‹0#å ¿üÝzþt&sP1 (Bæ&À2O^ÇŠ»§Íwý¥{Ó’¡Á‰Dd mƒéœÒi(Å- 5 ¹íç‰!@C ò¤î9o8$çÚ« Jã˸bÑæ9¶©o•wcqçž=*LK~ ×‘éÞ.\gÏ­f.¹{ޱ+å€[ß( |äP™u[Èïd‡ìãnÂWål©äúŒ aÔn¢ºeDZr.˕ȎO^”bËR–âKØÕ6,jņN0F>œŠ|×—_Ú¢Úž^ÞrŒH;I< gYu+¥·´Jžk¶Ù˜Û¸ òçר#:kûßßCeŽR§ÉleXm9Å8ê7&æÖ(Y$V#Ìo%Ô°Î2=8÷©ooå[tšÍ (•£4G#òd΀(\j:—“4r"D À¢°}ÛAÈëߌ{T·½ä6é"ÄŽ»Î[cê1Ðu“ùPÛ7~K>è ¬» ùm…ýæß^IñéZ–צHãY„ï8޽³ÁÅf&­¨ý˜;E˜IUíÎOû¾ûRßk–÷2ƈ›üå1çç±É [k—sÉ ùh¬ë“·¸ Àþ•fMBhã½6Ù‘ÒpÌV©'§#9  ixòZí þ”müÐI\û={uª°ÈÞJi¦WÉw“?! 8të@ F¹­Ÿâ8':‘ž¸¨àðíœ7sMé+o1À8#×Üþu§35ö²ZWG²]›QÁF‘³09ÏaÅK 6¢òya#ÎÈ…n‡¨õÆ)]’ç&:{8.U$¯1p}G ép˜¥HÞT26ü™¶¶s‘Ï…"ÛiÐ[ÇÎR/+,ÄåzœŠ¬ú¹d™PgzyŒwñŒg< v  ßJ´yL…8<`£8ÉÆqžåL:}Œ“4eÜʨ»—ÎmØÝO>½èQ§Ûˆ^!æynAÛæ6F9ãð§›8MÏÚbýp\íÎ:gÒíHi”;¬Ì1Æ8ç¦Ozsé¶žkÊÈrÊÁ²çn¼g‘šUÓ­ÖEÞ±\šV r òAõ¡´ëWƒÉxË'˜då‰!ŽyÏâh;‹ $†C)h¡)µÀ•‘q€9ã 4²i6’Eå²Éƒœ°‘ƒ6qœœäô  ãCO³ùi—y—Ì2dä Û°9ãŸJ½”º2© ùŽ0NNGsï@*Õ£°‘‘sµZV!xÇñŽÞ”—E¥Ã–K“×l¬ãð}…Cƒm½ÇëšÉþƾŽT‹jÈŒX‡ó#Ê“Àî2<ÐÉt›Ã{,©:ì‘ ¶X‚Ý0DZ{Ðt›…•d…-ã*«´+° wî8ãБøÐÖ6vIpRD’YÒ9!¹äÁǹ§M§<Ú°¹/ÊUÚ9$‘‚1Œ{úþèºéÇok ÃjRåw2ïq“߃nô²èòÊfˆ˜|‡ŽTÎ~f 8éÁ 2g¹µr°DBÆÇåç8ýxüjKë›Ûtð¬ÑÊYHpF{àÊ€)¾…:‰)UƒAå)g+”/@ÉëÔÓ®4‹¹ A±ÆêåÕC¨xÆ2zÐuë@†yö]ßdÁ3ñ™Ôy™É=€\Œ ðkjÚ ˜cŽñ˜ÄdÎàÙà`8üe¦‡r¶Ëš›$¹Ü`Œ``7~þô·Ú5Ü÷2ÉòEÚUœ€1ØZŠÛJÔê˜+lNn‡æÜõüúÕÛ>îâ+¸Ù¢A,ÂEØç惑íï@RÚãìÂÕ™_gòÉÉfÝÓ¯¨Ò{ugÇóžB“Æ(þTÊ*@ÁŽ{¸¬·BþdÄP9‚3Ô`‘ž7›¨4Åñ »j„±Ç‘žÝz{Óöž÷nMÏßÜpv‘‘ô *µHŠ( Š( £Ó¿ãîóýåþT!êk6óîß×1ü©Ô'Ü_¥-0<›âü2ÿ×4þUÌйèßò°ÿ¯xÿôW(²ÿ«5V“+þ[Ïÿ]ÅZ¤FÕ¯cYÄJ$q8DÌM‚›G#ŸZ†×Äœ³ÏZ#¼R”¨À°ÃûtkÊŽŸe¯rÂkçÊ$å\ÄØ¦IëØñWtù®ÿ´¯bºrT8ò€Œ£}3šM"%¤I¨]ÏoDÿ¾øPóú'ýôŸÑ?ï£þ|þ‰ÿ}ð¦éßñ÷yþòÿè4Àõ5›y÷o¿ë˜þTÔ'Ü_¥-0<Ÿâü2ÿ×4þUÌP¹èßò°ÿ¯xÿôW(²ÿ«5V“+þ[Ïÿ]ÅZ¤²}ÅúSÞ•¥XcY«…?PïbJ(RIJ…$Et=U†A U ¡TÔÖŠ7‘$hÑ3µŠ‚Wè{P¨ Š( Š( ¾Él#ýž-·Ø0®=jZ( ùQùÞw–žn6ïÚ7cÓ>”ê*¿õ?çÐÐu f[êŽ`Í |Ãr…\pIÉëOþÖŒíÛÄ1 œ¾¾´Àkjñ™cŽžBåvž`qœQ‘ZT€( Š( Š*=?þ>ï?Þ_å@¦³o>í÷ýsʘB}ÅúRÓɾ!ÿÈÓ/ýsOå\Í{žÿ [ú÷ÿAr€/ú³Ui02¿å¼ÿõÜUª@k'Ü_¥-PQ@Eq!A_í­éMký¤ ÀÉÒ¸ûkzQöÖô¢àmoJAzÄd(¸ öÖô£í­éEÀ>ÚÞ”}µ½(¸Û[Ò¶·¥ûkzQöÖô¢àmoJ>ÚÞ”\í­éTõ]M­ôùfÛƒ?…ÏÂceÿ>÷’ÿð˜ÙϽÇä¿ã[ý^]Èöˆ¯uâ>h#­®âEåvª\Ó—ÄúZª©³˜íèJ¯®}}y§õywh†èàäXJ1÷W§çì*Çü&6_óïqù/øÑõywhƒþ/ù÷¸ü—ühÿ„ÆËþ}î?%ÿ_W—pöˆ?á1²ÿŸ{ÉÆøLl¿çÞãò_ñ£êòîè?á1²ÿŸ{ÉÆøLl¿çÞãò_ñ£êòîÑü&6_óïqù/øÑÿ —üûÜ~Kþ4}^]Ãü&6Cè×û/øÖΉp·fâá &ƺ–¢tœØã+–SY·Ÿvûþ¹åY”tk$˜#Èbpw›õ¥˔ͻ Ý~aòþ´ÀòŸ³7‰å,…–œojæèÜôoùØ×¼ú«”ÙÕš«I•ÿ-çÿ®â­RY>âý)j€( Š*½ïúº¡Tæ†O´™5”2€¤‘û²3Ï?_Ò¤ Ün†WŸgÎÝ×qãÔnǦiaµÔ^"Îë#¬Ì0xtûgµ0îúi2ÚRqÈÎ}xÏ\Ö…ŒM”Q0 ¢…9mÝ=èÅ€( Š( Š+;ÄòºÿršÜ9¢½CœÛ’hck™!•û²íqŽ26äàžy⫽͂ÛÌc‰L’*…SÜÆÐyü d“cšêÄGpQ±|ì>V6ŽÀc¸õïYUqMn ¢¨Š( йq|²éV–b be?xä“¥w>ÿøú r×V‰pÜÒ=MfÞ}Ûïúæ?•ršB}ÅúRÓÉþ!ÿÈÓ/ýsOå\Å{žÿ [ú÷ÿAr€/ú³Ui02¿å¼ÿõÜUª@\&iÖ_"B›WbŸö»ŸÃ§çJ±] `-1*«‰ŸÊµºZXZ–¨¨Q@W½ÿW@*ÅïfÊdE³¿]Ç 558ŸÊ”6ÝìUÀ9<ûzCªÄ'“6ÿL/Æ;÷Ü(£Y¶Ø\¬‚03¼Œ~y£û^"ŒË ß(ËnÉÀÏ=ϦiØ –ò™­ã”¡Bêӌʥ¤EPEPU5E bêÀYA¿"€û6Çþ|­ÿïУû6Çþ|­ÿïЪç—qYpM§4Ytû~ªŽ0y9ã9ÀÍ9_NX¤ž[DAð˜…sŒr}OΟ<»…‘#gR4Øü’®ÆO-:.9Ç\sRA›5Ã@4èÖDpÑ/Ëõ"—<»…‘kû6Çþ|­ÿïУû6Çþ|­ÿïУž]ÂÈ?³lçÊßþý ?³lçÊßþý 9åÜ,ƒû6Çþ|­ÿïУû6Çþ|­ÿïУž]ÂÈ?³lçÊßþý ?³lçÊßþý 9åÜ,Šp&Ÿ.¥seýhþPÚAôëZb,whŠT  £|´97»I¦³o>í÷ýsÊB}ÅúRÓÉþ!ÿÈÓ/ýsOå\Å{žÿ [ú÷ÿAr€/ú³Ui02¿å¼ÿõÜUª@iK/‘jd_jçhïNŽPð,¤mwrz »ipêF×h¡IWÃ)ÛÖö˜ùÜJñ‘žãÔQ`®R0…Õ—yÂŒR}®=®Åd ´’½óŠ,µÔiÃnÆÓÇ|T7$°îRp=F=(h >lóÑ:©skÄâV¸*@ Wë‘P2C™e8+€0ݺcéH–öI÷V<ƒœ–ÉêôÄÚÅP(H¶Ž1šU‚ÍT¨àã9lç#?KCGP£ ÝNócÿž‹ùŠC6?ù还£Íþz/æ(y±ÿÏEüÅlóÑ1@›üô_ÌQæÇÿ=óy±ÿÏEüÅlóÑ1@›üô_ÌUmAÕ¬Ûkó/CþР ”PÒÝ/–6€ÇÓà!•òÑžBpúôçõ  KR7R§æëÆô§Ão ÄI'9'ñ  ¨ Š( ŠhUˆyÇznŸÿwŸï/ò  SY·Ÿvûþ¹åL¡>âý)iäÿÿäi—þ¹§ò®b€=ÏFÿ-‡ý{Çÿ Š¹@ —ýYª´˜_òÞúî*Õ 5w*DØ*É'¥*•uHe=èj€…í™6³"©$ªœgŒ~"Ãçå<óǧÒÀk[Å•w¸à÷ÇéHöÑ6íÙŽOÌG9¢à+[Fßx1ãxÕ ]†¦Ü\Ĥ²G» ăŠ]qŸðšÝÿϼ÷Ñ©#ñn£*3¥¤eWý³ÏÓ×𮟫¥ÔÏÿ„Æÿýp9<·ÂcÏúñ×–â«®áí­âýA[i³\ç9¥OjDÒ%¤lªÁNç'Û¯j^Â=Ãöÿ þ ûàryn)SÅúƒº¢Ù©gÆÑ–ç=)ý^=ÃÚ1Æ7ÉÖŠ0qÉn´ßøMnÿçÞ?ûèÑõuÜ9ØÂkwÿ>ñÿßFŒoæ•cŠÑÛ¢«šN‚J÷;ÿ ­Øÿ—hÿï£Kÿ ­ßüûÇÿ}W]ÅíÂkwÿ>ñÿßFøMnÿçÞ?ûèÑõuÜ=£øMnÿçÞ?ûèÔÖÞ#ŸUf·–E6A'ø…L¨(«Üjm³ª¢¹M ¤†ô[Á£Fc]¼8ÆxÃG^?Jl°j(–=áÃ|ìdÎãÆO_»×Ò˜Ý[É <¨ßdb4,‡cÁãò¥ŽÎñš3&öD*Øß´ôÆ¿|š[Ó2ù²Ê±…;ñ',Þ£Ðtãڭ؉¾Îv%ßœŒÜvÿëÒÍQ@JÞÊHµK«³;æ !Ð`Ÿ­YÓ¿ãî÷ýåÿÐi!êk6óîß×1ü¨¨O¸¿JZ`y7Ä?ùeÿ®iü«™ sÑ¿ä aÿ^ñÿè"®PeÿVj­&Wü·Ÿþ»ŠµH 7‰&·òäV4–;S©*h¼Uß ±é÷Y¢¹Ø~RÑï<ñƒ“ƒÏøU±Ê%™‚Ç󦋶AÆ=+G4BCb²–Å‹1¹f%B1Å!Ó™üòû ‚I<ÿ“G:Ü|¡%„¯  …v /Žœõöª:Å´°è7¨pÛ¡;B’Np3×ÞŽdô™æŸf¸ÿžÿß­[´ðÇ6’³ÂÅâ8 qÔcž•ØÚ}Lµ4!ºiLïs–ߵ±+·ŽGåL—R¸a­œÁWïÆï½ÁÀÞý+>UÜ`5…²Z\(mÄŒçœäeN:céUm枘ý–o2G,dmùXtÇûUV]ÃRáÔ%hu¥Æÿ3r¨È|Ü9Ž*&Ô.¶â;I2‰Nrzíé÷}©(®á©^æI§¶XEµÇÊåƒ?'¿ž½MSû4ÿóÂ_ûàÕ¦—QjfŸþxKÿ|ÐЭµÛ)§FŽ4”fR©›\¬ij]ñdvwÑÜi¶ó2ïrå<‘œv9ÖÙ§ÿžÿߦ”½ÝG%®öiÿç„¿÷Á£ìÓÿÏ ïƒZÝ`û4ÿóÂ_ûàÖ–… ±Þ9xFÁÉR?‰j*5ÊÇîwøï¯ýñÿ×£ýõÿ¾?úõ盆ûëÿ|õèÃÿ}ïþ½ï¯ýñÿ×£ýõÿ¾?úôaÿ¾¿÷Çÿ^Œ?÷×þøÿëЇþúÿßýz0ÿß_ûãÿ¯@ûëÿ|õèÃÿ}ïþ½ï¯ýñÿ×£ýõÿ¾?úôaÿ¾¿÷Çÿ^›§ÿÇÝçûËü¨CÔÖmçݾÿ®cùP@—k¹Ód›b_™¶œgŽžôæ¼… ±À '¯N•|¬W<³Çî²x™ÝU¢Bá\ÕHÏsÑ¿ä aÿ^ñÿè"®PeÿVj­&Wü·Ÿþ»ŠµH )–Gµ+ ì¯ éB‡KLJä¸O™‡®*ô°Š wu¤nƒx;AyàãŸÖ©ÏçÉ”•ŸLãÞµä‹'™ŽmBdnBœ„?7 qùþ”¦îåÄå6„m! ÀÏ9ü)r »·r›Ñ“Ë þ¬‚Çž5w2ÜC'œ¡Y`GzÔ¸« 2:ͽ¿{{äEW1¨fw{týk"ŠoªÎV}¯åAS¿…àp8ûÜôö«wwÒ[^H¨V@O–HáÉ>¿Â?:`Eý²êò)… ŒrŠÿ3z tâœÚœî$$?»Ù™åH,Ç1ž}UNT9©iQ@5‘\Ê##½B-¶ÝyÊø’¸îqž}8•X Š*¦¥ÿmþòÿèB€-Ñ@Ï©ÍnX· »ªº„QÏãž:‘ug{Ñn©Ë`ý9{S#Ô'y–LFb(›‘[%rØôëÏ"µ©Q@Q@JÞ{§Õ.¡’[FË—¦I#Þ¬éßñ÷yþòÿè4!êk6óî_×1ü©ÐÇh¡_÷’þð|ß7°ÿ cXŒÃ¶V 2:–ä ÑHV<¿ÇѬ>&‘;DI€NqÇJæê{žÿ [ú÷ÿAr€7ú£øU/5}GëI“k8¹L €Ót5~€4¥—ȵ2/µs´u4èä2@²ÁeÈRj­¥Ã©J}M¡Eql̤íû܆ÁãôÆjÅ­ËNX4a0ýìõ«p²½ÉOQnnL2EÄÎÒ1Ð×ùÐ×8†y 0ç*xÎ?Ö§”w®áK¥·/ûÖè)·¤yxïƒÅ&šÌíÇûùRŸùfÜûTØ¡¶Š ùp¸Ï\’™©{çËlý(° ¢B⸀ Çùõ§vÇ–ØúQa‹¸ÿq¿*7î7åE„÷ò£qþã~TXqþã~Tn?ÜoÊ‹n?ÜoÊÇûùQ` ÇûùQ¸ÿq¿*,¸ÿq¿*­¨’lÛå#æ^¿ï ,ÇûùQ¸ÿq¿*,SAêH\€sÆGò§¨XØ`c¥G#oÊ—qþã~TXqþã~Tn?ÜoÊ‹n?ÜoÊÇûùQ` ÇûùQ¸ÿq¿*,¸ÿq¿*7î7åE€7î7åP[N¶ó_ÈÃîílwáhtm诌nÅgÞ}Ûïúæ?•tèë±~aÓÖ—zÿx~tÀòˆDËùæŸÊ¹š÷-”h¶9aÿñ÷ÿdUÒ@êECw4Q[³Èêª1’O½rÑ.£%êÝ9wp±*§¹ÞÒ?ãÏþÚÿZÖ  Uu‚X­£)]ÑØÓ¹±¶,nR8r;cóÁ¥ŠÒÞ)VE-¹F\8ÇO¥_;‘$Ç,ˆìÄ2g\Šaµ…„ ³â_¾<ÃÏëII °å†%8fÜÎyúúÔS¢En#BvŒõ9ïI¶ÇbVšíav]ŒÁéc=OÿZ “P´C<Àð4‡RµþCxö84À`Õm|ÖV}ª!ˆ?6síÓŽ½9¤ºÕ"µ–XÞ9 "†æÏ\}:Ò—VµLˆØÈ@nÃ?—¿J•5 fU>aRÝŠG׎:Ž´Øõ($œÄ¥»m;OÍŸAŽžý9«”Q@Q@UÔ¿ãÍ¿Þ_ýPfÔa†c Hê@àU°r Á†T‚=©h dð-PEPEpðGs¨lJñ…Q“ÈÅ05 ÿQû£ùUß¹ÿ\Çò  6w¿éÉ%´pà¡l ¼ôì ^µ‘嵊I6îeíÎ? óM¡ÍYžkãÏùeÿ®iü«œ GªÄíýb 8ÙþËZZ¤ÒÛØO,2¢3(Ær@âLóÏŸ%Ìf)YòÑ“§iâ¯Òœë%ÿ®Â®P]JòîÞkD¶„¼rJ«#ÿqxíO·vûmáÉÎ#þF˜|Çþñ£Ìï@cÿxÑæ?÷cÿxÒ†b'œc΀!U²©UÞ äp@À#ÿ<ÓßNä.w‚ØÜá€Ç  .—º¶éiGt: ²!æHpå½ýt-Q@U]Kþ<ÛýåÿÐ…G>˜“NÒYwr@«04¬„J›J Ž‡Þ˜ #ãæ#wÇa’Oó¦ˆH•àpÀsß§é@‡(AUrs§ù7à°è(`R¢€ (¢€ ©mÿ·UþTn³o~å÷ýsʘ£N%7—$Ó+ÿÄÓ¿³ÏüþÝ~kÿÄÒ¹\¨ó?ÅäøŽDóLFŸ3ã==«žª$ô›._N´Ýz…q°CŽÀ*ýË^Nà‹È¢}ÔÆ?Z@B°\ùÑÉ%ìryg!XŒgíõ«~tÿóÒÛó4Ô#“,[Ù÷ )ÞtÿóÒÛó4U’õ˜Ÿíì6ñúSVÞíYØj ñ¸ü¼ã§oz_*÷þ‚+ÿŽÿ…UïýWÿÿ <«ßú¯þ;þyW¿ô_üwü(ò¯è"¿øïøU½='V“κ ¼Ž9ö  u›|náY"yFT V`<“uFMÒdVm¢?¼xùy^Ÿ$7Wé"ý©•ç‚äÿtÏŸ­0º™29d)T8n‡$c¶OnqÞ­9º{šPÌr|À ©#œtçÓ¥UjR ’ÀCµT³(IäŽO^9úSÃê1˜Ñ °óqtÏñp:tÇÿUXžKØôÈ™C5ÃX„èqœcéQ,Ú†Äi!bûcÄã¾}ó@—2ÚXñ)‘QA µ1ë@‚Š@PEPU-Àûmß×ùP¬APj]ÉøiŒŸJ‘æšy|ÅTlLc=sר>àÖ&RØò¯ˆò3Ëÿ\ÓùW5Tˆg¯éH²lú¨Nãû¢­l>ߘ¤°û~b‡Ûól>ߘ£aöüÅ·æ(Ø}¿1@ÃíùŠ6oÌP°û~b‡Ûól>ߘ§*8éë@ ª—u½ÄÆYT—ùpsÓï­1šP[E´¨¸wœÿœTõ%UñþFy?ëš*æªÑ,ôH%´]:ÌA$E„ ¿Ì–Aƒ´zRùéýû_ûÿ7øRNkíDÕš#mæ¾3•篽:æÞÅ!žD.Æ!ó*ÊÙÇZIý™m—”gýc)Óm¹ÃIÈã÷Çë@ËcÓ¿çƒÿßçÿ>ǧÏÿ¿Ïþ4Ae§äþåñéç?øÒýNÿžÿŸühûÿ<þÿ?øÒ-<ã¸ÿ¶Ïþ4¿cÓ¿çƒÿßçÿrAmco)#œÈÍüè+6öKžF‚)(ÀÎdàñß})IÞùÖp|üH"÷°>QÇN¼ûu«—÷—жìæP„2Œãœ`ã¿~€š`$W:ƒC—‡al…9ôÆ¿ÍÓÛY§ÔdH‰÷£ª"8|näœ v㎴vÖk—¸ )qûŒb#Ìë×—·¥5ždöØ$+2„ÝÔºN?ˆ\jX.Põá|¾£åþ{˜ÿÀi¦ãTXÀØI=XÆ~^Î>¤tí@É©2)më—¶G÷+œzçšØ)´PEWRÿ6ÿyô!@k+f90Œç$‚y©“8l®Ð[#§ ¦V-¡v·@:Œöǯ¹¥HÕ€s…ÇLg§øP±…+ÈÀ€¾”‹$oÆÕl޼æ€"UmÝO?ç­>Q@U[[H./nÌÈÌAP0ì½½-ÿfYÏ'ÿ¿Ïþ4‡K±# ö2¿øÐ/ÀÆ)|Ïj,;žYããŸJéš*æê‰;«/øñ·ÿ®küªjØy’ßS‰äÜÚmÈRyÊúU%KKKKä·y\Ü3Iµ‘‰€1ŸÂgP¶þópð7øQý¡mýçÿ¿mþXûBÛûÏÿ~Ûü(þжþóÿß¶ÿ ,ý¡mýçÿ¿mþh[yÿïÛ…þжþóÿß¶ÿ ?´-¿¼ÿ÷í¿Â‹h[yÿïÛ…MosûÄd’<©ýèß?¢ßGü(ùýþú?á@ÏèŸ÷Ñÿ nûvÈ÷zçŸå@ùýþú?áGÏèŸ÷Ñÿ >Dÿ¾øQóú'ýô€ŸÑ?ï£þ|þ‰ÿ}ð çôOûèÿ…?¢ßGü(ùýþú?áGÏèŸ÷Ñÿ >Dÿ¾øQóú'ýô€ŸÑ?ï£þ[QÝö6Üï/CŸâkûãþøÿëуÿ=ýñÿפƒÿ=ýñÿ×£þzûãÿ¯@üô÷Çÿ^Œùè?ïþ½?óÐßýz0ç ÿ¾?úô`ÿÏAÿ|õèÁÿžƒþøÿëЃÿ=ýñÿ×£þzûãÿ¯@üô÷Çÿ^Œùè?ïþ½?óÐßýzO ]Þd¼¿Ê˜ò=E‡¨¤‘ê(Ü=E<Ãǘÿ„–\Ï4þUÎUïl`˜ØÛ‘b_á>•?Ùæÿž2ß&€4ç¾™B-©+…·Âçœ{T_Ú‡üôOûñ%!‡ö†¡ýôÿ¿Qý¡¨ÏDÿ¿Pý¡¨ÏDÿ¿Qý¡¨ÏDÿ¿Pý¡¨ÏDÿ¿Qý¡¨ÏDÿ¿Pý¡¨ÏDÿ¿Qý¡¨ÏDÿ¿Pý¡¨ÏDÿ¿U½>æævNÊ@\ŒFëßÞ€-Õ&º›ûA H²ˆ‰ÁÉÎxÏNÔ„1µDRÍåHЄV 1’K=Í*j‰&<»yØ– ‚9Á=Ï 4À†çZŠ5PcÀpÄpWŒãÜdTÒj±Æû ³¸Ž6@ÆOÜP__Khç÷@ .sóœt üh}QVEO"\–)·Œ–ÈëŽôZ7¦eÎÜ€>ö3޹þ•v)X•×£ ŽAþ\RÔ´Q@U]Kþ<ÛýåÿÐ…Z¢€1¤Ôä¶ŽVgYÙN~V]˜ç€xÁã¡'µK6§¹éBêŦ-¹.[n7Ž´X d½¸ãV²lÈÛA¸'úŽ-Mæ¶iâ¶ß‚NÙTš…µÐ¬ÃìÌØʸ ûS¶¦êµ©—ßSéE€ûg’>ÎA7r:õºSãÕWUŽÜ±b@ÃӭÇŸuÿ>Gþþ-#\\ª6gþš-UÁhÚAlJªäáÇ®â’ß.úU¼RK* E`qòõ4<º”qº¨¸™ÉBÿ.8f•5(ŒJò\Ëlã8#Ž¼Šš•Ÿw•s+#?¨¦ExeäI8óÁ+œqžh¸yâÙLúÛJKȸ$õõ¬Z`zv¬[G¦Ú¡Yr° 8Qè=êÇöÕ¯÷&ÿ¾GøÒ°öÕ¯÷&ÿ¾GøÑýµkýÉ¿ï‘þ4Xûj×û“ß#ühþÚµþäß÷Èÿ,ýµkýÉ¿ï‘þ4mZÿroûäþÚµþäß÷Èÿ?¶­¹7ýò?Æ‹mZÿroûäÛV¿Ü›þùãE€?¶­¹7ýò?Æí«_îMÿ|ñ¢ÀÛV¿Ü›þùãGöÕ¯÷&ÿ¾GøÑ`í«_îMÿ|ñ£ûj×û“ß#üh°öÕ¯÷&ÿ¾GøÑýµkýÉ¿ï‘þ4Xûj×û“ß#üiF·kŸ¹7ýò?Æ‹^mGOºròÃ+bMË”\Ö¡éõÑãi?/+ÇË×§Þ€%–óMšS#Ã)sƒ£·ãøT+.œ…6ý©Dcä/Êxç¯^U½³ãh¾Ð»È㯩§Ig$¦B×`ãåÆ>_qÏÿZ‹‘ßXÆèÃí$&HSŒn9ÉëדíÍE$Údr—NáN:úŸsE€ŽW±yWk\,9,è|Äç¾}êÜz…ŒW2-Ài>ðÀÁôïõüè.µK;­±Ÿ´(QÉP¹ëŸ_jTÔ,Vd›dÍ*©]å'8ëϵWéÃoü}@1Û•‘Ž{RI5“ù›MÀóg(½H è üèëq§‚Y¾ÔÌØÜÇv:t=¸ü© ö™ã !%ƒm^ç'¯¾hÄš•¤†ßiÌM¸`/'çŸsQ%Þž¨É‹’¬6q÷p@^½MK­=YÙ’âGqó3…É÷ëךW½°p.BìüÀtÏ=³@ùÚvæb.·°Ã·Ë–ä{æ¤[Í=^ qûœí^ÿŽ{Пí«_îMÿ|ñ¦Ë­Z˜™6Mó>èÿ,t»ÓÑ1rU†Ò>î נɥ[½;*ÏòH¯æoe\“ŒzÐ-Þ›6Ó$S³*•@Ür1×5 ¯¦Kþ°]~ñÂåùôÅY‹P±†FtK€Íœð;’}}MF/,Ò8V7ºÁ zŒsÏ4X+Äïêß¹ bE†²)ÿÙlibstruts1.2-java-1.2.9/doc/images/how-to/eclipse/developing-eclipse-style21.jpg0000644000175000017500000004544310404045220030121 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„   (1#%(;4>=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀý¤!ÿÚ ?étm#L“E°wÓ­ÚÞ2Ì`RIÚ9éW±t¯úYÿß„ÿ ¡u¤i«'u äô…²õ6Â=:FK+elŽV%¯Ò¶Ó, väØÛ©Îb^Jµý•§Ï…¯ýù_ð  (4m,„é¶yÇüð_ð©?±t¯úYÿß„ÿ `غWý,ÿïÂ…'ö.•ÿ@Ë?ûðŸá@ö.•ÿ@Ë?ûðŸáKý‹¥Ð2Ïþü'øPý‹¥Ð2Ïþü'øQý‹¥Ð2Ïþü'øPý‹¥Ð2Ïþü'øQý‹¥Ð2Ïþü'øPý‹¥Ð2Ïþü'øQý‹¥Ð2Ïþü'øPý‹¥Ð2Ïþü'øQý‹¥Ð2Ïþü'øPbé_ô ³ÿ¿ þ¿ØºWý,ÿïÂ…غWý,ÿïÂ…غWý,ÿïÂ…غWý,ÿïÂ…غWý,ÿïÂ…غWý,ÿïÂ…غWý,ÿïÂ…غWý,ÿïÂ…غWý,ÿïÂ…'ö.•ÿ@Ë?ûðŸáKý‹¥Ð2Ïþü'øPý‹¥Ð2Ïþü'øQý‹¥Ð2Ïþü'øPý‹¥Ð2Ïþü'øQý‹¥Ð2Ïþü'øPý‹¥Ð2Ïþü'øQý‹¥Ð2Ïþü'øPý‹¥Ð2Ïþü'øQý‹¥Ð2Ïþü'øPbé_ô ³ÿ¿ þbé_ô ³ÿ¿ þ¿ØºWý,ÿïÂ…غWý,ÿïÂ…غWý,ÿïÂ…غWý,ÿïÂ…غWý,ÿïÂ…غWý,ÿïÂ…غWý,ÿïÂ…غWý,ÿïÂ…'ö.•ÿ@Ë?ûðŸáGö.•ÿ@Ë?ûðŸá@]ã˜!¶ñ=ÄVñ$Q…L"(P>QØW?@å¡ÿÈ Oÿ¯hÿôWh>ïýgâk'[ÿlŸUþt€}¯ú«o÷M\¤¶šÅ›ºÛo09‹• n$f‘5ûÈWráÕ6ËÝ1ù¾Viì¤G>¼^ÛÂð8ŽpÛI~å8ÆÜZ±6µeËÛÍ!GE,r8À?¥>Qû'ЄøOV*Í #hÁB9# ~U¡iså´w6èäSI¦‰•9E]FpЀå § êƒÜÓ"Õí¥µ[„YŒn@OÝœ¹#<ýåH‚ÅÜW¶ë<;¼¶$ËŒàâªM®YC-ÄNï¾,à.NR>”é5›H­Úg.ª¬‚¸9##ôæ”êÖÇËò„’‰X4hX(c€O§ÿZ€"µÖà’{ä4aËõ+ò¶{~ujÂþßP€ËlÛ•[iÏPÉËNÞÞö;G.e€®zÔqêñ<72˜.-Ëo&>»N=hÃUƒ vN#H¹ŒÊ¸Î?1DZ¤RÞ-¼pÎÛ£I>\6qÏn”ë=NÞöya€¹h¾ñ+×^jPYHa&Lm *¹ÏãÈãÞ€!å£Ì-ãoô†Lª?ËÉ]ÀN=©-µËilÓ‡¬Œ¥OFôõÈϵ^±`…LŒ¬†MÁ AÃdûw© Õ-ç¹0 8sY€Î3ôçé@^ÞAang¸m¨SéU—Z³eB†Fó)µ ß“ŒR_J&Öì žh]Û̉K2…É œ~Ñ®Y•B¾k}DdØ'üúƒ@}¼4¶~R†Šä²î'HRzcØŠH5[IïžÎ932dêG_Ê€}¨Aaåyûñ)*¥W# gš…õËšŒß4ÁY~„à~f€ rÊerÐÆ¥˜:pôüéÏ«ÛÇ»¤Ã2y[|³¸62ã¬A²†™.—‹p‚yÒ9ÃnE`-ÔŽ;ó×"€ÒÒHQ$¹¸vL&àiê¼Ç_zXôÈâòvO:ùh±’"®p²zc­$ZZD’´Ü³È†?0¸£Ø€9÷94·ZU½äP¤æFò—hmÜ‘Ç_^@?…!Ò¢´‘M,;‡*›pNݹäœßµ2-íü£4ï…DWb2yP01Áõ€*–äw!´(ë"»ŸyËú`óVl´É"¼šââmàÌeŠ5û©•Ûž™Î3ßÐÇM¬Å»Í;áˬŽûNsÔŒqžâ£m"6hÝî'i"Ës´9É#=¨â€#ºÐ ¹•ŸíÜJ¡\|À†ê äÞ«4/´½™q0’Fr¤ÿÝùqŸœõ  ÇJu±Žâx…¹Êª•Á'9' õÉ©!ÓÒ ‰%ŽY¹bcùv‚Ç$çë“Ö€ ¹Ñb¹´··’êèˆ !Ë‚ÌqŒ’AÏÑ‹ ¿”c¸œÔ)'a.$•í“Ó >µŠWsqs&õeef\ÝzÜøU‡ÒQãUûUÀq/œew3c?.::v K _Uµ¸f¢Ëg{`Ž8çó5fÞÝ¡’iy%2¾ì1á`Aýhz(¢€ (¢€ (É> ÈÙsþâè"¹ºöojO¥ið"¿˜-—x8ù0çëÔVÍgÝÿ¬üMdëò “ê¿ÎµÿUmþé«”€Ô·ÿPŸJ}PQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@IñþFËŸ÷ÿAÍеxrÕaÒm¦Î皉8Æ@­ZÏ»ÿYøšÉÖÿä'Õ kþªÛýÓW)©oþ¡>”ú  (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€<“âü—?î'þ‚+› rÐÿä§ÿ×´ú«´Ÿwþ³ñ5“­ÿÈ6Oªÿ:@>×ýU·û¦®RRßýB})õ@PEPEPEPEPEPEPEPEPEPEPEy'Äù.ÝOýW7@å¡ÿÈ Oÿ¯hÿôWh>ïýgâk'[ÿlŸUþt€}¯ú«o÷M\¤Úw÷q˜Õ…½§ž«¿†?ìä=Hª_ð•ηV°½”CíÁóºgr=ëU¤¥Ô›þ†0´‹h1^d ¿må0¼sÐõÅ[MRòyocŠÚ5Ä©s'û9úQËa:InÉô+¹ï4¸&¹d2º;O$äcŽõ&¡=Å»ÀñªL¨–Ã|̦®zŽ•/s)$¤Ò)ˬ\ É †ÏÌ:ÄÛˆê2GN:hÖ®Z&xí¢”‹É ÜÌ»ˆéØR$б¾ŽîÚ <Àâ6<äuÅ@×òÁ&¢gA²Ö1"„låpÇÐ`ñï@Û_ΗžT/ *±•9Œ­gÞÝÞÁ«È#•þ΂T„ڻةǧc×Ú€$ÄìŠD­Òm2†FÛéÐúÔM>¬še¹ób3ÜÊ 1aò+ ñòcóñ  #QºKøìþÊÓlTJBG^€c¿o¥'ö¥ÂZÝ\Kj vBHIv ´vé@ —S¼kEQhÐ\ºÈ@-Œ‘‘מ2;RÁ-Ü·VD]>%´34{T)a³¾Ü€w‰5Ë£k¦Î=ò¬n¨%ìÌ®:äÃÒ¤}bhÖ]ð¦(¥bL§£*Î:ßҀ%†þêKù¥º[,q¾æ†³íƒÈÅRMJþ+[©L±O"F²"œl ±†^£ƒ×Žhô×·‘ËoÁnòÊY_!#·¥"ê³5üЋ7û«üéû_õVßîš¹H YiÒ¯kjóÜÙK{šKÍÊí¡c‰¡9S¨?˧µ]Ú-NK©cì›b m yC ˜ÇËôô¥K[[yt‚Ü仄Ÿ\š.ÅÍ-®-¢ÛCÙ¬B)>`b÷â™soÓBe™Â†cÈ Ì>aõíHN÷ÔsYZ5ȸkhLã‘!ŒnZ{Û@ð˜^Ú&9(P'9éõ C"²´‡Ëò­aËÎͱ·=qéšjZY-Ô’Go¸#çe@çÔûÐ…¢Áä X9ÝåˆÆÜõÎ*»¶’5ß‘Ô/™Ó~”;ØY;3Éi3gs4c'#ôª¢=¬˜ˆ¬M¬o“ò.Åoåš´¶¶rù3-¼±G”ûÚ;m=¨ŽÂÎ#!ŽÒ2¬`n®}h²ÙéñZ2Kml¶É—*ѨAêqÒ X4o´D‹ —œÈ<°s·½±@ w¢éóÀ#6ñB«š8ÕNÐsŽ3Î*Ѳµ1$FÚr¨c_ í@Ø­wF~ÍbŒì ô”ß.ÊÒÞFÁ $|ä(U=¹þT YéWDzÚÎXÔ˜H<ãñ«?d¶û@¸û<^pl±õë@6¦1%´ëBORa^Jziöq4M¬(b$Æ ORï@h Š( Š( Š( Š( ŠòOˆò6\ÿ¸Ÿú®n€=ËCÿŸÿ^Ñÿè"®Ð}ßúÏÄÖN·ÿ Ù>«üéû_õVßîš¹H rÙÞ´× ´†)í¼´ÄÀ|ù?7^;VU柨XÝéò?›å–@²“ž™Î3[&ޏJ;¿²µv·A½™ŒXŒù¿ê[~A>¿.~•vÛK¯/Ìräf0“.Tepx¾I¥tKœm¡oA´–ÇNŽÚXDmùÞ{ŸaÒ“VXžkP¡4e6çºg­KÜÂnòl§>›y.ªå„ßg˜²ÈÉ"…Gþ,ƒjIºû$„ƒæ¹EdŠN¨£nã$óÏozD—tà µ¤äðÂYEÊãîð:çô¨…½çÚu%†…n#ÄR™ðß63‘œŽÝ¨ö©wio3AfpÒ/—nó”pç‘êj Û©õy$Xdò˜BùƒaÚÅŽW9=xã­BÚ}êþëìÍ$Kñn›qÊðOAÓ×ð¡ôçm2ΦɘfVxüåÉÂàœîï@½…ÑÕmçhXT TGLFPÙäþVf¾ašdf1Èf 6–ÎÑÉÇ´Ó§Ý‹ãòîdU/û¦•@ÚA÷ïN·Ó®¶E °mVh¤vÞ0»)^rqÛÖ€#þ˽–ÞKYa›/³ù†\†qѱׯ­Gu ›Ë{x¬¦‰šB ›îœ®Öcœpwdš¶l¯b»P\‰šA.0 aƒ×œŸÇŠŽ 6[[I-£°Üwîó>Ñ·wÏW©Û‘@ ú\† 7–×Í04ŸºW Û[8ÉÈŽ2sRÅksý§s+[H†E\‚`Qn Æs×Ú€+A¦^¦4'í%Ù°iæÆrWsÇÞªoa¬æ6ŽÚo1®ó:r2Åzq”ÿ¾h¡…d“V’v·xÕaXôœ1'qGzþv€ (¢€ (¢€ (¢€ (¢€ (É> ÈÙsþâè"¹º÷-þ@Zý{Gÿ Š»@÷ë?Y:ßüƒdú¯ó¤íÕ[ºjå š²Ã$ñI…·€Jp9+ž£žœTCÄö>t0˜î̓ËÎ#Z(šªMìJ|Ecå‡iP›Ü…ÿV7mÉüsÓ4ÿ혙î#Š ÚH òp\Ž}ñG+dÖäÚMëj:tW/ ˆºç§áíN¼¼6²Â¦d‘ÕÀ\œþ¤RzÉY´WŸ\´‚æ[vÞd‰KË`dàg=? [·$i!j„– Ì2s΋¶·1]ÛGq nŽA•5ê%¼£D–ª‹£žF;q@ÚÝ­ÎðãxÎ$#ŒŽ™CSÔî­u(--â‰ÌÈJÝ÷‡b@ÀúÐËk¶¸–æ!¡!@q×#9ãµU:Ü0i–×W`#OÀEa×¾ PÁ{_-%‘.FäuBUF3–=³V(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€<“âü—?î'þ‚+› rÐÿä§ÿ×´ú«´Ÿwþ³ñ5“­ÿÈ6Oªÿ:@>×ýU·û¦®RÿØÖ÷¦yg4^[âL¾ŸNj­ï†a–[YmdòžÜç-–ȸ"´R6V‹_ðØùj…\ ›kn݃øóV-ôÈ-çžTi ¸9‘Y²áô¥ÌÉu$É,¬¢±‹Ê„¾À06vAM¼¶–åâQ",*êì6’Ä«9ÀäzR!»»Œ:\lKò«#™ùw‚qïšQ¥Û%°† Ñ€ûÕ‘°ÊqŽÓ¥ }2cÉ&>Fý¡¤8;ºäw¤þË„Ïq+É3ý¡vHŒùR9㉠ép˜#$仫´žaHÆ9J˜Ú!¾{¤óyaw|¸ÎzPI¦¤sO*Ü\oœa¿yÓÓ˜¦&“ vÑÂ’Î<¢J?™ó.FÒ€&ûûT3´Ò·’›KpOv>¦¬ÐEPEPEPEPEPEPEPEy'Äù.ÜOýW7@å¡ÿÈ Oÿ¯hÿôWh>ïýgâk'[ÿlŸUþt€}¯ú«o÷M\¤.î »¼òšs‹OÝ8·Î$ü íätëžµJ]WZ‚òÅ$šaÄ-õ=‡žµ²HêŒ ÷,G[ò••_ÊÌ@CŸ5üÌa¸ãåÁíÖ®[Í}uu¨@÷*!aùn¼F8'§zVD¸Á+¢Ï‡<ÅÒaŠc1‘óWO àgõëÖ¥Õ‰öy£×lñ®À†ÜáOQžŒzR÷1ŸÄÌùîõ#ª½²Jñ$…‘“‘kgiœu'¯AJÓêbÒIüÙÐDãRSænõÓhòC ‚Hü¨³$»Óï ÔmâÜ’ØõÆ£ºšÆË´,_hc¶&`7 ñÁ<õãZ[Õ™$š…œO"Is´K¹Áoº=éŸÚ–8sö¸°Y¾n€ôüèj7I^6 ¬2<†+È%’tIùëGË×ü(Ö÷0]G¾ÞU‘sŒ©ÍEq}ä]ÃoöiœË÷]Jm뜰<}(£UÓÌm ¼„¢€KoãùÓ×P³lm¹Œä1n»zþTѪX›ˆà)æHªè3÷èEDºÍ±Y–Xâ… ´¬¿.Çnýx<ñ@ ׺S˜nÞ[byX¥ldq’úUŸ¶[yÉžžcʹ䊉µKWf»ˆ*0V;ºÚ¤{Ûd€NÓÆ",9n2N1ùÐôPEPEPEPEPEPEP’|@ÿ‘²çýÄÿÐEstîZü€´ÿúöÿAv€3îÿÖ~&²u¿ùÉõ_çHÚÿª¶ÿtÕÊ@1´‰î$žqwý¢ßìåL$í^{îëÍgÞøjá.lgµ“Î00Ü ¨àcžO·JÕHè…T´±hxa|ƒºeóbòåÊg#~þ9ã’Gz½k¥.o%y‘ÖèäxÀÁÉííIÈ™U¿B}2Éì-ØÍæ¤j>M¸×ÔÿœRjÍ9†âÊy©#HXav¸lc¯8©fRww*¾ˆRFXÊbÈÑÌW;±Ž})Í£jc3—“z¶ùWp!F ‘ŽzŽ*Kaaqe ´"íLPïÞ«7ç§RHÇëM“Mši¯L·aº‹Ê*±Ê0@çqçæ=¨ÂÊéRg[ÅK‰Y¤X~\ $õÖŸsiq5õ½Äsĉ~Fˆ±9àó¸vö  »Ííl C$38IW`‹fã#NKvÀ«©¦K•Ÿí —%÷’±|£(r{ÜóùPÛé“[%¸ŽíCÅÀÍå}å^„ ð~¹Ô&’KNn.7™¢x‰H©8êF8üzÐ6Ÿw*Ût 6ä¯ @ãv{篧J’¥öÂг¬Û£$ä |§w;ƒ@›Ã²†o*ò$ `%ŽÖ ;úäv§´Ò.m,c´[¨™¡ÝŒí ‘œÍlQ@Q@Q@Q@Q@Q@Q@IñþFËŸ÷ÿAÍйhòÓÿëÚ?ýUÚÏ»ÿYøšÉÖÿä'Õ kþªÛýÓW)©oþ¡>”ú  (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€<“âü—?î'þ‚+› rÐÿä§ÿ×´ú«´Ÿwþ³ñ5“­ÿÈ6Oªÿ:@>×ýU·û¦®RFÞD*±gçŒv©ª€(f ¥˜à’hÍÄ),.7V§3ª• pXà}È 6Š( Š…RO šd3Gq K ÆU‡q@Ü»¶änÆqžqI$‰m$Œd“Ú€os Ò·‘dPpHì}?Z–€$‹m#œ"Œ“è)cu–5’6 Ž)Á yR5rÌEÜÞÃüŠ‚ÓP´½$[L²ŽèzÒ€,Ñ@̨2Ä(õ&†uR¡Ž ¯ù´PEPEPEPEPEy'Äù.ÜOýW7@å¡ÿÈ Oÿ¯hÿôWh>ïýgâk'[ÿlŸUþt€}¯ú«o÷M\¤94ë·šñáµÊ¸¶ò‡ïùòNò?/ʲ¯4{Ë+Í>_(²Aãž™ÎÑÒ¶MP©®^þÃÔšÝz³¶ÆK‘ä6ýÙ†áWm´‰ åó\À»&bÑ7™¹]§å÷É4¹¥R6й¡YÉa§¥´±F…¡ÎóÜÿ*MV(¥šÔK܉cdq;T8-óc€{Ô½Ì&ï&ÊSé3j®î¥­æ,²àeÀãÈ8=qdžÑ%û$™Hüç(¬±áC"Œ dמAÇqšD‘[iwÙ…§h‘L ùà1Á'mÆ:ôèmHnÝ/›Bâ$ ¿Ëßû¼ñ@£C¸&%BªfÑL°ÚFË·®NÞµdiÓ ëIÓÎŽ81’`X6Añ†Ç?>ÓI6WM2C,!þΠàÇ''Û ªòi—³é6¶òÇ´ÂÇ|k"ã°#©ô  ¦2ÞÛÝ-´sH°¤e¥l²0þ"qÏáVæ[«‹[¨ä·„ø‰Kœ2ñ‚Oc×§¥f\é7sZÆ­¼ªÈÍä‰A# c,Àä‚ Ï^jÀÓÜê¢YlıcBï.Ha»,Gs‚h¶ºKÙ ]!Þ8Ì0pJ䜓ëÈü­Cq¦^\iöÉ)·cG‹É€À•#Œ~hyté#Ôî+8¦’HÐv€Aç’? «i¥^ǦEf-ÄN… ÎÓodaÕ†GAØZ•´©^ÚÞ9,â‘6FˆÉ±?>½}ù¦Ýé²¥åÝÔË$‘²>6Fݘ ·nãÏlã8 Úér]èî²[ˆÖDˆˆd$’ÊrXç¡<}*ËÚ\ ld‡N… N@6¡VzzœÐWº]Ô­u²$fIûÂø2*Ÿe$œ¶wPÚ^Â,ÃÇ4h«ž~f#Iê:äž¼PÌ åAxb…À$ãÞŸ@Q@Q@Q@Q@IñþFËŸ÷ÿAÍйhòÓÿëÚ?ýUÚÏ»ÿYøšÉÖÿä'Õ kþªÛýÓW)©oþ¡>”ú  (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€<“âü—?î'þ‚+› rÐÿä§ÿ×´ú«´Ÿwþ³ñ5“­ÿÈ6Oªÿ:@>×ýU·û¦®RRßýB})õ@PEPEPEPEPEPEPEPEPEPEPEy'Äù.ÜOýW7@å¡ÿÈ Oÿ¯hÿôWh>ïýgâk'[ÿlŸUþt€}¯ú«o÷M\¤$ºŽîñ¡[²×:ÀN$Éà½:{V|÷šÍ¥å€š{¥Šf &ä{=ëecª rÙŸ]ò‘q¿ÊÌ[S;ßøãåÇ\UÈúæêþ)fºXÁo$ð¬ ãïêxúRÐO‘- ^ŽH4˜`™fY#PJ¸Áô£üzѪ½âÎ>Ïçåæ!ä4™èÜp:uÇÖ¥îa?‰‘,—o¿T{¦eÏÙ‘¢"2vâÆ1»§5›} kÉ‹Þ]ÇÆ?+æÉÎp03õô¤Hýn{ønbk_;b€v¤LáÎyŽ=}j «ÙLæÞk‹†uùÓ 0Ä& @ ¶¸Ô MïxbY†éRÝÃì*z¹?6¥!ûMµä³ÇöÂÁ-ã“æœÅ°9!Ooé@ôéoÅýÁ»yr"ò[— Œ;g¿µMwq4Öö²¢ÝÁ œÊ<Êœp0ïÖ€ v¾Kˆ“}ÑÀˆ/ÉËÿ-  Œ÷ëÓ5•î­åз‘NæX6íª@Æ:n,:v$W‚\—”ÝœM˜ü’P£y@9ïÇã@éÓÞ,—Wý®h–2ËBU³×OSô8©õiCAe'Ùçfó£”…™3œƒƒüè­%éÕ0žvß0m]Ÿ»ò¶u'{vxÎ}«:ËÇissr|¸¢3/—„±ó6ñÎãühð\ÌðZ\4·—ér‹rFÀÄ@^:~MM÷ÉvåZî@×+ÂB„ØH9ÇMØô N¾™^îW{Ë¥‚ó‹æÞKn`g ü*}QÄ:¥Ð³–wŽ)1²Ä· w ´šˆ»˜D%/ûÌ#/îÂàì ã'æ«ÛÞHÐj/ö»ÇDDHÈ‹çWl”2rGµo@ArÅ‚Œ–ÆIÇ|qš}PEPEPEPEy'Äù.ÜOýW7@å¡ÿÈ Oÿ¯hÿôWh>ïýgâk'[ÿlŸUþt€}¯ú«o÷M\¤ðê–Èd‰ßh‚0îǰÎ:uüj95}vD–â'î_å‘V“4Tçº,jéè±ÿ¤ÆÆW1œ~ñÍ#êö*dQ:´‘ä2s3ÈQf/g.ÄšmôZš\Â+Œ0E>{Ë{gDšPŒýþ¾ƒÞ“Й+; ]BÑ®2ù±çzàü¸çÓŠmÕŒ¥â²hò¿3*.ÜgÖÍyoo*G,¡]úý}?‚ÖûN!ÒÚH”.æ`£hëŸ~9 ÿiYùwœ6Û÷Ns鎵:Ť·>NüeQ£cÑÃgzr1ÍXŠòÞiÞå "uÏëN¹º†ÕNûA8Oà(1¨Ú©óT:py§çQ gOhLÂéJ dàúã§ùê(VÔlÖ—ÏRŒv‚2r DÔ¬ä¸0%ÂAÆÑëŒþ½½hÐ_[\ÌÑC(wA’==G­-ÕÏÙ¼’cfJ±äòç€h7–âçìæP%þïôÏLûUU¿Ò±,hðàò(N œdñÎZ|Z‰òc¶‘Y]ÌHaAG¥I¥g,Í N¦E$2ò0GQ@ euc, ›G¸ ëÆOåO–ìǯ’Íç+6ðFn3žýÅ(½¶3¼>rï@KÀëÏJ£.¯aik#Ú*:ÆËæ$xM»Ž9ÀÐöú¬2GL »K÷UÎr;Ž0{T©Z,Ϙy‘«3¤ð:ýq@ ‹V²–ÑnVSå6ÊI#=1“OmJÍeŽ#:ï‘C"€NàxÈ ƒS³¸’4†`Í bƒiÇ^ݪkk˜ná[È$Œ’7™õ-Q@Q@Q@IñþFËŸ÷ÿAÍйhòÓÿëÚ?ýUÚÏ»ÿYøšÉÖÿä'Õ kþªÛýÓW)ÖÑä¸y§ûfß´AäòÁÂsïך£{á™–æÊ{97µ» î!xæµR7…TºG†"ò|±pê$˘`Ã~þ=9&®Úé_g¹»‘§Þ·G,»0Gàý)9 UoЛM²6«oçTÊ€?­2ûM’óJÊmÎäÎp=½K2“»¸ßì×7l÷9†ë!ãà—o ŸAUì´ûñÑšàA4Û5¨_¯Ž(.­£®¤êþj£Ý}¸9Êç¡õõ⡲Үe7²Ëͱbê¢BI9õæ€ÛBkfg†â8ßÌ&Ȫ¥Oç ÓæÑå‘åay0D9ˆ6Ãó4ûM,îf–Lð¼99nüÔ¯c3Cmþ–MÌ&dvFGJdš^éƒ † |¶pTÌœ©Ïn@ÈÅgGá™cÝ·Q?7_ÜU>¿ì žÓA{X%é,¹ Æ!•U#ôQÍHº+Æß»»Ú¢XäÆ 3Ÿa@µÒ^Ù. ]mšT+æ$J¸?Þ#¡j–òÆ{˜-ã[½+³˜ÃeÆQŽE!Ó7]ù­1òÌ‚R›z¾Ý¹Ï¦;V|:Mâ¬ÅŠf4-€ÆvÄ©cùPÐiWŸc·Y.’)Rg¶Ç¸n,O¯½Jtwi 5ÖTÎÓ0œ©\g>„ÐVzuò¥ß™p ’DH¢xÔйÁô=jÕþŸ5ÜÑIã@Q2©’wc'9ã  ¾’K'™3XÈÁÁÁ Ïâj¬:MäÑN.åI"8„9ýx  õ=/Št‹b…Pb #o§ÿXU‹{…Ü‚бv ° $ž~¤Ð+¥Ì‘B«xw[‘䀥yÎZ#Òä‚âÞH.v¤1¶´`’3“Îxé@ ³³¸MBöá£X÷ŒAóî=N1ÆHý^²†K{TŽiŒÒ¼å@Éú šŠ( Š( Š( $øÿ#eÏû‰ÿ ŠæèÜ´?ùiÿõíþ‚*ígÝÿ¬üMdëò “ê¿ÎµÿUmþé«”€¨ú´–×W‘ùÐ&ÓÍŒqOÊFzñUŠ/’îÒŽ×mÆ2Øa·8÷>µªÎ˜ÒL˜øšëÉy)X¼ÂzwíÂúp3ß­\‡S¼º¸¿‚6¶_³–PFw· žÇŽT„éE<=s-Ε \L²Í°Àä{~´jzŒ¶smŒG…Ì!ó™9ÆÕç¯çô©{˜ÍZM œÂòù Û:Úä¬kŸ2O6:ñŒã8?AŽRÏW%®^ò{Qo¡ó#Î2Þ¼œvÿõR$5^]:æ5TŒÆgÜ@8'Gé»è;dz>eó~Ï&Ï8m‹9 ž¸Î:ú¨;}ryÆæÚ)–`#QARÀúcïuü©£UžÞîW’âÝã ‘wĩ۞ƒ¡ç?®hÞŸªÏqy:ÍqÁòñ¹vœr7Ï^ƒôûýS˲‚{) q9ùØa†3ÆJƒùÐ)¨]}®ÜËqm[¤…Z3–cÔ)$*jj·MÌ¢[6ò%)±$¨|<ñÇ××Ú€úµÄ¼ÛÜÚª%á…¤d%vl, ù†9ã=êVÕf:”BöòDÅC‘ÉɆr?"=èÝÖ¢‹cq5«¤­ ùGÑ_ ~™õQÖ³¡Ö縷P¯k Èä;“+·ån§vzž‡­Y[Û•Õ^)®m’ ‘”B‡spsÏ v¨ Õ_ìS·Ÿo,Éqå—Sò($ Äg Ï¯j†Mvá7Ö›c†I[$‚û/=·§½kÿhZ4y阣¸ÏÝSÐþ”‡¦k’Ig"³7˜¥Z|áQÆC™äuªä·×ŠödÝÙ¤R,ždžY(ÄŒÃ^´"ê[o/—ÍŠo*–8ã8c÷øÆO<ÝÇ\ë^d1$–lÒJÌÁ ʱ㞣óÎGJŠmMîVÞhîÕ2£tQI†ûälã¦F0jÌZ­Ô·wQ”†8ãga•ÚHɲAÆz;ž´Øõ[¦Óí¯L–†7#Ϋ?– äwëŸnþÔô½”]é¢îxãšd2%m«Èùx$ó@ ‡U¾¸kÅX¢ËI y °*p2¡²s× üjDÔe]æk»&¹pÄ@N88$ç¯OÊ€5ÇAEPEPEP’|@ÿ‘²çýÄÿÐEstìZEóÇ¢YT¶·m¢¬[ê­quA—¡ý)é\Ȫç9éYšßüƒdú¯ó Úÿª¶ÿtÕÊ@\€[0cBáCSÏ¥%Õ…á‹Î^bmɱÊàþ¯TRrNå*mL/ ‘œQˆbÝ&H³3ïHZ‰k,À³[1I󣧺£.ªH9\Ž‡Ú€wOQp‰7„@ç¸5­¥²È° >aËîbäúrh<‘Å&¨é¸PÙÙÛY«­ºã{bX±$žy>ô †Ü!Äq=~QƒLV´–y" HwO¯OÒ€%Ž˜"o<1f‡Š^4ؽ€Œ-"£˨ܠã#Þ…Ž$ªF»¸8šFÈ60‰C¸8ˆíïÓô§„8`¨ â€baµB¶K p}sLò­Õîâ œ”c4¤Àó`˜ÚD8$f›[í}‘ \ío“ÿ8ÅÀ1ÇÓå)Lqª±1®6àázÚ€)E}¦Éi-Êmòc\¹òˆ!}qŒãÓÚ®•‰+* 0=(aš]ˆrH_›üj Iì®ã-‚¨ÇïDSuÆ@ô  (WnØÐc¦ ÃbÆ4ÜÃí4«h¥V4U=@P¡¢Ü;FŒÃ¡*2(F®\"‡=XM4ÛÂÀa[xG ëõ  ( Š( Š( ŠòOˆò6\ÿ¸Ÿú®n€=KÒ$:D/º6™ã‰’FûʽHÏÐâ¬M§U‰Å¼RÇq£@äoÉÀ»Òº|O•g‹µÒ ¬=«ëò “ê¿Î€kþªÛýÓW)RM&êY®åŠÞ×˹¶òpd#œ“¼ü½y—ZʼðýÕ¥æŸ2@’*0•Ldœ•²’:¡U-.]ÿ„rðÛªù‘1hv)bGwîÊñèqÛ¥^µÑYo/¤¸‚ܤìZ6 I\®Þ˜Ç9$Òr&UU´.h–Riö m"B»øÏ÷Ûüj=WNšòmñˆ›1ì çœï^?—Nµ/s;ɲ1¦Möëùñý§>\êç| \ãI85—ou¼¸¶±† XF‘¬›‚œ}ïáuÏLf‘$ÚÞ™s{qÖâ6hÔl-!M„“÷O_ltïUtÝ:iÃ%ºÙ‚Óª±Ü··# 3‘ƒùPÛh×P£#AnÐ „‹nónVJ~@$7CÓñ§É£Ü‰KÁmj¥‡°Ù±‰lpqq@iú\öw×+;‡Ä†Sór]½ºg'õ©5 ;«û xç‚ÞI2¨”ªƒŽÄ©Ïâ(ƒIhn-¦ŽÞÒWŽ„³®6þ!Áü²>µ z4žMÔoij$¦XäW,~þà¿t`};Ð"iž{[9]…Œœ«›H$¯óœãµ=´©åÕ ¹– e!•‰À R8ú‚>”nê »» ˜%†g"0¬pÉ@µ›r¶ëöÖ³F¦@°É!e¶àýÞ£`ר  ¿Ù†-LÝEmhåÑ»Œ2mÈ8ãœƒŽ£§z‚6èYOnÖÖ±#N&X’BQ†A(~QÇ¡ëÒ€+ˡܶâ¶ö»¼‰˜G–ÌÙP>^‹Øþ@VÜFóÍ5!×f×%·÷Žžô™•s‡=¸XÚîxÌLZS´qƒ· ÜN1ÞCL»ºŠFHmD³[ˆœ;ƒsŽL{ÐKe?öâ;Z#´nó‰l©Ú¹+ƒ‚p$AO:eÜÑÛ%Í­«®Þfýñ9V,q÷Út8  `±ºòôøn- o³ÈÒ3™ yxû»zsƒô­Š( Š( Š( Š( ŠòOˆò6\ÿ¸Ÿú®n€=ÃCUþÂÓþQÿÑöÿdUí‹ýÑùP ±‡ãÔÖN·ÿ Ù>«üéû_õVßîš¹H]Yàšâ'„•·¶mË žsŸn˜ªãÅQ›x ”Ûî1³OZÑDÙRæÙ’ÿÂMoåy‹¤$~d½>A»oãÈ=*q¬<’]E œ…­ÉVbFÜíÈüÿ­ é[vO£^M¦As”‰¨jÑØ\GÆì™Fv‚p)‘k*ÛüÛi" 挒Ld†þ]h°kkqòí¤óÌžXˆü¼í-ÔûM]Zd¼t¸¶e‹dMÐf"ä®<òOZžÇWŽöòH#†U »;NÓƒÏÖ¦Ôo~ÓȒlœaJ‚Ji¯!…,Ï—$ 11~PÞÝñíM»ùRÊl¥ ¾SË×vÞ=Ej²«ªEfÒ1¹6äy€t]Àþ"Ÿ6¦a¾†Õ­d̘Ëäm\û÷  wwÖÜÊT·*¡GrH~dU959"Œ,¤Y0îÈYxEÆ[=úŠHuu–àÅöi|ß(9#• ?CøTº–¡%•Õ䶪wyh¤d`rsÏOA@.µakn²y1ò ì ÉçëWÕów>\OÝ  K‹‹_0F.ÏbÞSŒŸ¡÷§:â†?è²ìT.í‘…Š·äAúÐÅžo·ÜÃ…eŽ(ä@IpA9ÿgõ¨cÔ˜ÙG+BÆifx– @ùn3œtSÍGq­-©€Om*4€|¼œ ⦷¾¸šâî1fBÀå¼Áó Ž;g4Èõ&k+yDæÙ0Bò3žsŽŠj4×äm¥ò±20œ>¼P¡½¹I}3EöU<µC¼Øç¡ì(m]ÖT‡ìR™‹²¿+ ×èE4jWW:…´vp¯Ùž$™¤ld«{dcõ©—Q+ãÏCo(Œ Á'!Hç=÷ Hõ9$·¸‘,f/‚3+¹Ç=kB€ (¢€ (¢€<“âü—?î'þ‚+› rÐÿä§ÿ×´ú«´Ÿwþ³ñ5“­ÿÈ6Oªÿ:@>×ýU·û¦®RUÒ¬gËÈŒÒȘß8Êúc==ºT7¾³¹{wˆZ@ÝŸnMh¤Ñ¬jÉ2Ïö6žR56Ë„]¼7 çžyçžsSC§ÚÛÍ,Ñ¡V—&L»ßPN)]’ç&:ÒÖÞÖ<[ T>„ž=·µV÷.¯4{ŠñÔŒCŽ£ØñH–ÛwcNµ[‰'ØÅåÎðdb­‘ŽW8éíU­ôKxíî!¸g¸YÊïÍÑy®ZZ»ÓíoNgF';]“#ÐàŒþ5Ž ²Ë汸iÉ2@ r@àu .d¡ð’eÈ%ŒÎ[ c ç#ƒŽ;PÚU„ŒãË9!*ÊÃy^ãÖ€%K xÞFUaæ|ÆÛÏ_—8€¦¶—hmá€FË„‘”¨Æ:ƒš|–²y{¢ŒP¤¨Ûè@ê=Èô»HÄ¡Qñ.w«JÌ '9Á<÷‰¥Y$ODU]÷œHÀîÆ7œƒêG^ô±é–qÌ%HˆaŽ7¶Ü€qœgß ­…²Ã4K 3™dòÄç9ìséMm6Ñ¢HÌgjg{dç®NrAã õÅ7û*ÏÌßå¸o0KÄ®à03éÆ)‘é¶ ¶Ñ—òÛï§Ú㿯þ´æ‹Õ¤VñÈñF ®C±b‡ªç9Çæ*Ì–6›§•Ó 4b9[qQÓ¿hŒÚ-•ÁŒ[LÑ([d¬K*ôxëÔzÔ¯£Û‹Ä¸‘È#òÄ$§œåŽ~l“ß9ÍZ}¸¹’à <ÙÖ>kò9íœw?LÔqi–BØÇ±›~|ç$7<ƒœƒÉéêh.tí>DHçP€   Y7 çg“ß×Þ¥m>Ùå2mä`ì;c8Ï\qž¾ôÒì¡¶1muˆ6ðLÏ•>¡³‘Ôô=Í4éZ|™"3‰’V…åqƒÛÚ€&u i’˜`X‘ƒ× Ïµ3û*Ï(v>äÜCy¯žF '9ÅpÓœ´ŒÃ=Ž ê0?*Ž í æwœÛØáÛ¶rNGN¥hÐEPEP’|@ÿ‘²çýÄÿÐEstîZü€´ÿúöÿAv€3îÿÖ~&²u¿ùÉõ_çHÚÿª¶ÿtÕÊ@Q“íisxÐÅvQívÄÊdô>=«:ê}ZÆòÃϸ¹H¥`$Üã“ÜsøÖÊÇ\^Œ¸·MºÎ\Åû§ø÷ñ¿þ޵rÞ ÙîïãžKÅsy œ)pyúž>”‰n hZðì2[iQ[˨ñ¨ æýÀöÿ5_¶yëö;_î¼¾žf‹Û§^*^æÖL‰~×öûð†ïw?fÞ?tÁÿ³zÔ:eìŸé³Çö»´ŒF© œœîǯ¯Ò‘$ÚÛj qÚyÛ4,çpF8Ç\Õm:âêãÏkYn&ØgL» ¼1Øõ ¶mCÊxçûcB²‚Ycdr…OL’~ö;ô¤1ÝÛÝÉ4QÞ–À9P|Âî,GRн?íñßÜ=ÓÌê‘”vž~\18Î=ëOÔf¹¸°·x£º·yYU72qÑ‚#@ˆ.b¼µžQy!û:!T“#ÌwtEÞ<7Xkñ2JZ=ù °>p=xÍ#¥Õ™$[äH®Ë… C˜ÊqŒuùNÕ)ûdº¤>×I·(à F9%ÁúŸz¹s5ÄÖSùPM¤»;nt 72ýW8ïT¦K¥¶Ê7å®ã—ÆÍÝöýî´Èšþ;ÒÏöÆä)\e#Ûv~• •·•¤Þb An\’æùŽÜË4íVòâ-6)7ÜÛ“nÊF×3ÆG§ZÓ¸‘ÚÚêÕ­fuK~†á! ð=Maéšt¶O& •Ü&hÝ•SêΞ•cRŠúm;Ë•.\›ËT]ÄÇnñþîÞ½ýèÌO{ìã¼xÖYK£a¨>§§Ò¢QwýåZÅ5±[—.<£Ÿ,³0Úºô4*@í4M{m%àxUš,m`ÌI Ÿ—‚¿\TW¿Ú;nü¯µù›eû:þïgáŒþ9 ïâh$·’;ùa[ˆ˜§s.2߇^>•o û&à ǵRUAgÐúÐ6—Rÿl”–{†0¤Ï4`åÈÛŒ²zVž“¿û>6Ünb[ý ø$‘œPÊ(¢€ (¢€ (¢€<“âü—?î'þ‚+› rÐÿä§ÿ×´ú«´—}q syQX…€5‘¬\Bú{ªJŒr¼½ ,Zÿª¶ÿtÕÊ@M«oI’¢Þ!#’­3ŒãqLm{Hy#G¸Ÿî‰†~™|¬ÑS“Ø”ë:r¢7ÚWk.ì…$(Î2xùyãœR¶±dXÖFi"ÈdÙqÓÐQÊÃÙ˱&™|š”w1£ q¬ÇøýE>âöÞÙÕ&“i#<)8§¹â“Љ+; ©¸–!ó!Ï™”`Œäœ` wïEí¥Ë¼V­óFuòÊíÏLäu C®/­­¥H¦“k?O”>§ üj+}JÂMë¡Bn-”*ß½ÔuÇZUÕ,Ú5db7mÛå¶üã8ÛÝ9éÒ¢‡Yµ’èÂIPU7 üÁ²xùyçÚ€,Ãk=ÃÁ»¤\ä`€pppz¸éNº»†ÍÎÄp©b“@.«j÷1Àžk4±¬ˆÂ*UºsŽ?¯dC‘+±Ï”øVÎ0xàçüh&Õí!*ÊÄÌaÂBìC“À•#jV©q # $Æ–ÜÐŒìh[«¨­"NX!`¹T-É8ëUޱb “+¡ýÓõ{tôæ€ }V n¥¶rHäØ9Èa´09è2OcHu­­§nE’^J—£n8'§=};⯖ ¥‰’MSV²“&<°Q”aÉÎ:އ¡ÅU²Xâ‘¥!e””aÇ©ãîp(¿Û6¼ýù-ÛëÆ9è#èh—U€XOuoûá î+ÊäuÈÏlt= Mqmm2E4»]ú ŽÀ’8ëR]N¶¶²Ü8%"Bçph²ß´HÍ{€î I”¿à(ϯnÔ.­bÓ„๠GÊq†èsŒ`ôϯh©b’N±xÑöÄ܅냌gµ(Õm ªÜ•QÎ4.ñž?QÅ*j¶O?’“‚ÿ/ðœ|ßtçÁì{ÒCªÚ̳02ªÂX1x™G9ç·ZpÕ,þÆ÷fVXQ‚±hØxÁî*ÝPEPEy'Äù.ÜOýW7@å¡ÿÈ Oÿ¯hÿôWh…Í­¼“³=¼LÇ©( 5^k;Q„[BSƒåJ@SµÿUmþé«”€C£‡–sy*™àòX\玞õNóÃö‹9ìæùíØgÌ}¼LÍh¤o¶èY·òvyÒ¨hü¹@ÁÞ7n=¸äž•rÛKóÝIç»­ÑË¡Œp~”9ê·Ð—N²ËÊò"¨(¸¦^éÉy!c+ dòä 3œ{}EK3nîâf“=Ó=Ë´WYßÕîíàã=WµÓ/W>}ÙŽY¶*¼DоûG_¥%ÔôˆõÒ˜Ø3±[9dp~• ž“6Ù~Ý6K4Û&áD„“ÎÏ4°hBÝ™âºdrâE+(S´¯@1È4ù´v•¥?m”y‚0rªq°ävõ Úé1ÚM,¸_07HÔ0,rNìdóëK>šÓÙÁn÷NþWÞi_Ìú‚1@:pCq,E#0K(÷=ýê4Òˆ†x¤»’Hæbø*£kÝ‘ë@šIDô¹L¦o=d!r­·iãÆ3NVo#¸’æI `€Ê¹ãý¬gñÒ€$“Oóm§‚k‰dKæ)le9쪧ÃöÂcFæ-ØgE~3Ã?„P±é;nZW¹‘ÐËæˆö¨¶íz £/‡å„På£ÎõUÀFÜBÍׯ\вhÓ5ʨŸÍ‰3do»e¸Û€>‡½i}”™¦gžFŠT åm_R=ÍQMlmZ@mØñˆ‘w¨ìH4·šÞ[Ç×N̉°ÈȬHõä`q@gð乞hï^I¤Vd ªKëŸã5hiIa,3]8šá%u x{žqš’m!g¸ŠâICLŠâFÜ$uu=*w²óVí&žI"¹vb1Œ¿^´iò:!{ÉZhßzJUxàŽ˜ÇBj¹ÐÀVHîåE+µN<³‘ÔzÐÐi)óK$Í)•YOʪpOr>ÙéL“GómÖ)nžM‡äÞŠT cHÁúÐPè&DbúbˆŒ¢ñåýÑÓØU—Ó‰–;¹cŽR[` @$äõ÷àúÐ&˜ÐÚ%¼OóCÈÊ ?ºá{t÷õ­ ( Š( ŠòOˆò6\ÿ¸Ÿú®n€=ËCÿŸÿ^Ñÿè"®Ði¿Ö‚ãýDŸîåH Ë_õVßîš¹H Kõ ô§ÕQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@äŸ?äl¹ÿq?ô\Ýz>›ã?³i¶°}ƒw• &ï;À?v¬ÿÂuÿPïüÿØÐxÛs“ýŸÿ‘¿ûŽ_î‰×ìÊ‘þ»ÿ±  pø¯bB>Å€õ½JŸþúqÿÈßý+v/m‰GöwAÿ=ÿûü'_õÿÈÿý0øN¿êÿ‘ÿû?á:ÿ¨wþGÿìhÿ„ëþ¡ßùÿ±£þ¯ú‡äþÆ€øN¿êÿ‘ÿû?á:ÿ¨wþGÿìhÿ„ëþ¡ßùÿ±£þ¯ú‡äþÆ€øN¿êÿ‘ÿû?á:ÿ¨wþGÿìhÿ„ëþ¡ßùÿ±£þ¯ú‡äþÆ€øN¿êÿ‘ÿû?á:ÿ¨wþGÿìhÿ„ëþ¡ßùÿ±£þ¯ú‡äþÆ€øN¿êÿ‘ÿû?á:ÿ¨wþGÿìhÿ„ëþ¡ßùÿ±£þ¯ú‡äþÆ€øN¿êÿ‘ÿû?á:ÿ¨wþGÿìhÿ„ëþ¡ßùÿ±£þ¯ú‡äþÆ€øN¿êÿ‘ÿû?á:ÿ¨wþGÿìhÿ„ëþ¡ßùÿ±£þ¯ú‡äþÆ€øN¿êÿ‘ÿû?á:ÿ¨wþGÿìhÿ„ëþ¡ßùÿ±£þ¯ú‡äþÆ€øN¿êÿ‘ÿû?á:ÿ¨wþGÿìhÿ„ëþ¡ßùÿ±£þ¯ú‡äþÆ€øN¿êÿ‘ÿû?á:ÿ¨wþGÿìhÿ„ëþ¡ßùÿ±£þ¯ú‡äþÆ€øN¿êÿ‘ÿû?á:ÿ¨wþGÿìhÿ„ëþ¡ßùÿ±£þ¯ú‡äþÆ€8_jÚšÜ×~W•½TmÝ»uÀ¬šÿÙlibstruts1.2-java-1.2.9/doc/images/how-to/eclipse/developing-eclipse-style22.jpg0000644000175000017500000005445710404045204030131 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„   (1#%(;4>=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀ2¤ÿÚ ?³ªj:„z¥ÌV÷"(¢ ´l$]éÆQM¢Ü΃WÖî$’8î“z lÁÏ z{ÕºtÖè\Ò%ûg‰<ÅO>,³m/Qø}?1K’—asH‚Ó[Ön'}­!ŽJ¯ðŒŸåTéAtv[‚ï^ž7)wõ+òì^Œ2qôüê\)®y ûgˆ‚–kˆ‚€Nï—ÿG%.ÁÍ!ñ_kÚ¬©vŒ8ŒF3Ëb“„µ‡ÌÉã\E;¯#Þ;VïE&ŽJ}ƒšC Ö¾¥ƒ\Ä õSާӨÓä§Ø\Ò)Iâ Z)7œBT‹Ô~JŒByä ñ¨åàß þ{vy!Ôÿç¸ÿ¾ü(ö0ìòþKþ{ûàRö0ì>vÄ—ü÷÷Àÿ ~Æ…ÎÅÿ„ƒRÿžãþøáG±‡`ç¿ðj?óØßcÃçc†¿¨ÿÏaÿ| =Œ; žAý½¨ÿÏaÿ| =Œ;<‡.»¨ùl?ïG±‡`ç¿Û—ùÿ\?ïKØÃ°sÈwöÕÿüö÷È£ØÃ°sÈQ­ßÿÏQÿ|Š=ŒžBÿm_Ïaÿ|Š=”;<…þÙ¾ÿžÃþù{vy 5›ïùê?ï‘G±€sÈpÕïqþ´ß"eÁÏ!µïç¨ÿ¾EÊÏ!ÃV¼ÿž£þù½”GÎÃûVóþzûäSö0;º¥ÙëGýò):Pìì_íK¿ùè?ï‘OÙ@9ä(ÔîÏü´ÿÇE/eçc¿´®¿ç§þ:(öQìì_í¯ùéú =”{<…þкÿžŸ £ÙG°sÈQ¨\ÿÏOÐQì¢ìp¿¸ÿžŸ £ÙD9Ø}ºãþz~‚eÁÏ!Ë{pô{(‡;í“ÿÏOÐQì£Ø9Ø}²ïþ‚eÁÎÇ‹¹±÷ÿAG²`ç}®oïþ‚eÃçb­ÔÄãè(öqì.vIö‰½úŸóú/eç`.$ÈËRöq;Í xЩÄ9Ø«<‡ø©û8‹Žó_ûÔ{8‰5ÒF$Q 2"–Ù¸gò®vÕö5±R]JxËŸ)vÊÌç ÓÞ´]_`³%¸Ô<‹×.WvìŒ_ʆÒ{^g-â)ZMD1'&5?¥I=lmêúUŒ—msq$ÈÒ¿)tú{UF£JÁb¥¶¥Üä\Üd`$NÕ^ÞK¡<ˆI4M6$Ýsv1¹Žþyô§íäˆ}¯‡4ÙPM×Ƀàÿ*=¼ƒ‘ “§Ç(ÙyrŽ­´fLr? ^Ú]‡È„:>–o·OœŸ7§éG·—ar!òxzÂÞ#)žä(ã׎Ô{yvDGý—¦îUw$Ÿ›ýgÝã9oß¿ËÔgÿ­G¶{49,4× ‹†Éè Ñí¤ÍŸL±·PÒÊè¤ã$B¥ÞAìÑvºc¸D‰=>oÒm öhµýmýé?:^ÞAìпØöÞ²~t{y³B&ÜwÎm äAý“oêÿÚAìâ(Ò ßó£ÛH=šì¸=_ó£ÛÈ=šû2WüèöÒf…þ̓Õÿ:=´ƒÙ þ·Õÿ:=´ƒÙ¡³áõÎm öh>Á«þt{i³Bý†/VüèöÒfƒì1z·çG¶{4(²ˆwoÎm öh_±ÇêßÚAìÐ}Ž?VüèöÒf…±Œ·çG¶{4eOVüèöÒf…È;µÚAìоJúš^ÚAìÐy+ïùÑídˆS‘ƒš=¬ƒ‘ #QÓ4{Y³A°{ÑídÍ5„ #;.Ãï9"£›È«tëbÅŠ±'©Üy£›È,=¬â|î2õýᣛÈ,rž$Pº©QÐF PÝõV:û˜¼ÖvÜAž˜=½éPÃlH‰Q êl–I,Í#äî+¼ãÓÒ€%Ž5‚0¨PtŽ(e HîØ‘˜ç—oEüÿúÔ|Þ‹ùÿõ¨ù½óÿëPóz/çÿÖ æô_Ïÿ­@Í迟ÿZ€›Ñ?þµ7¢þýj>oEüÿúÔ|Þ‹ùÿõ¨Žñ7ü…›ýŪ@v2ŸÞc¸úRTÚÀ²BðÖP~vsF:~t•ŒÊâR”ÀÃ~=iÌcA'õ¦w’ßTòfK¨ÜáãLà)äq@¥RäÓÚ,dFT°ÏJ`Ä$I‘†ý(­¥¤°Ê2cT ƒ´Ÿ˜úÐ¥‰–Wc6ålmBô¤|lË«½ãË„a´G¼œwþtÀÐ1?œM„00O®qš@;gûCïgôÅ03îôé.&¤ÊŒ£’{õö  R e+Ôþ€£p$žÍE¿R1œãÿΘZÂðÛÝÏ;TœìôVÂÖånZiÜ©éŒçw^¼š}ý¼Óɵs´‘ƒžõë@]G9´TŠBÎ î= ô•o-´Mç?ÞbBwš äù—;•LE0D€õë‘ô<~Tp°9ìh@ ]Б¿aÛÅEmŠ#½‘ŽXçò€¤¤Eš7Œ±)#µ1™v–Wšª²ÅJœ¶rzäN4¬„ÌæRP€``\õ¤!TŒ¯=S`E°uÏAï@ "’üAïøP˜ù''€‚Á<¨a‚Xži€Ž®uذ/'ó  Y´€2=hÈõ #Ö€ Z2=hÈõ #Ö€ Z2=hÈõ #Ö€ Z2=hÈõ #Ö€ Zã¼Mÿ!fÿqju˲HD¯ž¹`¸üéÔbT’‚Gô4‘g¨_ÞÎñÛÅlv³ 3ààWD©Æ*ì…&د©^E4±Il›¢8}¼€h(µ{‰Í¢h¯åq“8éOØ®âöŒ·¬ýW€¥ì—pöŒœÏaþ.šîR“%o¼~µfc[]›‚Q¼µÜI}Ý}2)=¥´ð°2Ü´¼`ƒ@éP@P;wHí"-“¸íà9¦2ËQ–8‡øP ¤AïÇøP.Æ8Wéð ŒjpÎô8¢à" ×BÄp3É dòGs,nÒ Ì@ éÏNœŠvÒâûHc`0à‚ç8î=Eì»N(¶Æ÷웥óúíØ>ï÷³éÚ€"h°ì»º1cHòÏ÷¿AEÀ<³ýïÐQp,ÿ{ô\Ë?ÞýòÏ÷¿AEÀ<³ýïÐQp,ÿ{ô\Ë?ÞýòÏ÷¿AEÀ<³ýïÐQp,ÿ{ô\Ë?ÞýòÏ÷¿AEÀ<³ýïÐQp,ÿ{ô\Ë?ÞýòÏ÷¿AEÀI¬lÁ¹ž‚€9Úžî™OéLÊU&LÀŽ…[€Œ«Œç$ç<ö–zŒȇM•›Í.’ÆIéŸzÖj3kRS”V„aÖZw–KWÝ+†n$V°”TRlÍÆEèíµ,åí[9½?9áÜ9d^D» ‡×»Ræ€í"_Þ¦â`:dƒRå 'ÔVûÇë\æ†|–×^hh¦ œõôãÛ¥0 ­Ê£ ®KåHúzP§Üã&á¤#¨  ˆPI÷ÀæP@B!axÓù­´ _/¶ryúÐ{+'+ÊŽPŽWnF}G½1—d·’EÚb”{Ò€ xÐ"Ã&Àâ€"‚ÁmÞG†Õ‘¤9b­6ÛÜVâÐI,o,r†Œå0:Cʺ89@¹ç­M¿™r_{³Ÿ»î3ߨTÁJ)¦ïpve™tûIX´rA'Áoón‚S»¯8’zgÜÐ?²í6ƼÀDr˜oº:?²¬òÑdäc¯ÿ^€tëO-PZº»îœz÷ ‡N‚"IŽw'»Ó·zsiöï+I$»ì}±ëí@[ñŊdmÍÓ¯ç@‚7œ-[ÍÝ»|ãsúPf†bî|–ÁbG#×ëJÀ'‘?üñoÌò'ÿž-ùñ¢ÀDÿóÅ¿1þ4XÈŸþx·æ?Æ‹yÿÏüÇøÑ`"ùâߘÿ,äOÿ<[óãE€<‰ÿç‹~cüh°‘?üñoÌò'ÿž-ùñ¢ÀDÿóÅ¿1þ4XÈŸþx·æ?Æ‹yÿÏüÇøÑ`"ùâߘÿ,äOÿ<[óãE€<‰ÿç‹~cüh°¶ä$4l1בþ4X^PöìÊ­µ“ þÉx‡þB+ÿ\“ùS¯¹Ýæ¹°v€A&ýÊq•È89 n'Ü_¥0ûÉõþ†€€+ßÄÓ[2#ì<üÞœÑâ²vH>ØëøPFUÜ~UëéR @ (1þèæ˜Ú¿Ý_ÊÕþêþB€ «ýÕü…Wû«ù 6¯÷Wòm_î¯ä(Ú¿Ý_Ê€.é_ò ƒýßëTº(  ½m&–1&dcÏ™RGçH ÈRE½™¤F]Á1»=»P3^͂͒p1B8_‰X«>ã’N=…0&óSûÔy©ýê<Ôþõjz€5?½@šŸÞ ÍOïPæ§÷¨óSûÔy©ýê<Ôþõjz€5?½@šŸÞ ÍOïPæ§÷¨óSûÔy©ýê<Ôþõjz€5?½@šŸÞ ÍOïPæ§÷¨óSûÔy©ýêĽ‚yoÌè—T $PžäRÑØ„ncÁúâ€9/ÿÈD×$þTÀë/¦H#w3 ûvñŽ™ô¬å.Uq¤º» †H¤Þ!j¨9÷ ñÓéùÖ®6I÷%4ö:û‹ô¤0o¼Ÿ_èhh¶¡ šÕ>ÃÏÍÜpzP6ŠÈÙ Ž:ÐVûÇëRWº4ƒj‚~b:ã­0$Šx¥;cl‘Ô`äRZ( € (æ•ÿ Ø?Ýþµ@[ € †¼>”˜W_ñûÿ_ç@Ë6ÊZLJ‹>Kú΋ Áä¿ üè°X<—ô ’þƒó¢Á`ò_Ð~tX,Kú΋ƒÉAùÑ`°y/è?:,%ýçE‚Áä¿ üè°X<—ô ’þƒó¢Á`ò_Ð~tX,Kú΋ƒÉAùÑ`°y/è?:,%ýçE‚Áä¿ üè°X<—ô ’þƒó¢Á`ò_Ð~tX,Kú΋ƒÉAùÑ`°y/è?:,%ýçE‚Áä¿ üè°X<—ô #µ!”n?ÕËô4Æø‡þB#þ¹'òª®½6†7†íÀ¶G89ÇÿZ•“ÜM&¬ÆÛÄ–öb$rë’Aô§{”íÑÉ÷é@†Èꮘž„û­u©ÛÚL"—~㎋ž´®;Ô%¶Øó, ÿlv= 1 ¿f1E2;¯Í€Ý³œÐVûÇëR&µµc!u'~s¸þxô¦2x’(؈×i=¾ŸäÒ-P@oJaý›Èáyç¥PŒˆ êéÏ_ó‘@“E $VÉÀÁëÆ•<0 `Žzs@Ï÷‡Ò“*ëþ?à üèjÑÒ9²ìª1Œ“ŠXº×®s*q׿ìb%Õ»¢ºÍVpéEƒ•ŽXåÿW">?ºÀÐ 5¸ž|9Çš™ä}áÛ­KÌ&Áü[†?:A<'¤¨yÛ÷‡_Jhº·g(&B@Éù»PÚXÖ?1Bxž?:gÚ­ùýü|Î:Ž¢€í0n+çG2FáÀõ i¢EViUºÀ@ 0Ø%MØÎ3@ ö˜?ç¼÷Ø <‰ÝT™8Í4Ü@3F?àB€´CÚU<ÁÎ 8ï2=¬Û×jýãžÖ€n!fŒgŸ¼(Lðƒƒ*qË´$ÑI’£g¦}P@PWûíõ¤À¡qþ®_¡¤âù¯ýrOåTW¨Ú´îŽ›wÆÙ†AúŠ@6ÖÜÚÛyláŽXð0¥t)÷éL w$—1³M°ŽÙÇcï@ž!Yª¦âƒ¡‰Æ0A©šmX¸hî^6«q§A ó€¼0 à·§óE4¬É{·[{wZÝÃ#Hqµ›'Ž1ÔñT!­÷Ö¤ o}kc#m+œêzôü©€©}i¸…™; Žœÿú¨Õ ( € “M´Y4ÿ™ÎÙ”QÇL޵@LÚwî£E”þê3d}1ú¨  ÑèIIß“œ‘Ï¡ý(ytµx”¤jŸóŸñý(ÑÛ HRf|–n§šL 7_ñûÿ_ç@ÅkõHåbNî;ðF?Zqv*3qØ·iÍ* ¶Aù©ó1º’jÄO Y@¾bù`ùÉÛO™Úȳa¦ÛéêD r@ž§›¹2›–âf[öÞ8a×±ú Dé±}ÛÈîêG9=NIÎ:u4h¶ËÇgl>às‚9$ÔÐÛI¶po ¸ÝÛZ‘ôø^ßÈbþXÆ< PÚt ÙËã,vçŽzÐ?²íö̘aƒóuç?ÔÐäÓ­åcpìˆAPXñŠt{E<+‚04 èp.BÈáw2?Jµ.ŸÁ7î;räçoÓ?J‚MÎDD"@0ݹÿ@ ‘ ʲKËyÆè(UÓ Hä7ªI»pSŒä`Ðì/+ËĘ۷;¹Æs×ë@&—oB¥ò„ózgüOç@µ±Kp¸v%KAÏøZ € ( € ªÿ}¾´˜.?ÕËô4€ã|Cÿ!ÿ\“ùUÖÞ€ÎHùHìsH%óS;HÆzý n§Ü_¥0)ÞC—³Ë±‡lŸz‡Sº’ÊU0ÆÒL¶9öúÒwWÖÖóØÛG4¥p ©ôÌÇÄVŠÖÃÍCÖì( Žç=~¸ ·Þ?Z2ˆÓ”Êò>pÍÞüäÖ˜ãOE"AÛžG§ó e¸çŠV+ŠÄ !P@¸‹í&ßxóB‡Ù߯JÑÒ¿äû¿Ö¨ tP@Ï÷‡Ò“*ëþ?à üèrÇýáB~˜P@P@P@P@P@P@Uþû}i0(\«—èiÆø‡þB+ÿ\“ùUÕÞÌésh¨wŸãÿ=iE)Ʉڊp¤Œgå  ôû‹ô¦;È`’æ6‘ÈeéíÁ 59ç´˜XšRÉó*¦ì ý}èÔjÃÚÞÒkhî ©Î è?™¯cJäÌQpÉ9<ã=qÞ€‰Ü~S×Ú¤ ÒYA ÂFsÈ>½{Ó (C1±vûÍ»þFCp1ÄT¶3Îztï@dÿtþ”dÿtþ”dÿtþ”dÿtþ”THdòðä`·Å_Ò¿äû¿Ö˜è €!Ÿï¥&U×ü~ÿÀùÐ2At¶˜•†FBõÇR \q3°Õñ-¡”Æbœ»³´Œã±«åfžÆV¹+k‘”s¼®QCHn#×ÚŽQ{'Õ—æŸÊ…dYIàŽïRdS]bf §i àÜžþ”*êp5‘¹CÀ(HsŽhé} ´Š  ÄÇžŸ÷É  I®Çöo2HJ¶ÒÁCõü?ZêÁ y°œ(\ìpÜž/zyÕ¡ É9vN?w¯C@&²¤‚c]§#@[;¶Ž:wõ .·lÊX#ìÅÇøÐ[•ÄçvWxÜ1ì([W…Q˜Æçj©!Jž¿C@ mrÕnD $ _fHã@J³Ä$Qò’@䇨ôP@P@P@U¾ßZL êåú@q¾!ÿˆÿ®Iüª€ë/m¡št’RÙCÀ­ #ÄX‘Î2sØÐ€ÜO¸¿J`S¼ŠÝîciIÞ:qœp}¨ J[›y×ìQfO˜È<3Iß Õºh¬å±¶Žäåv¹ãžŸÖ˜Šñ®–ò¡ŠF,YŠ ¤ ç'œzâ€ßxýj@Ìk«Å2”‹z+’¼õÿ `8Í~ÇQ×$gúÐÕrN60÷4€}P@\Ò¿äû¿Ö¨ tP@Ï÷‡Ò“*ëþ?à üèÿ<ÛáÄ{ùŒg‚FM qÅ]دý´¿mUm*O4!(@Ëœ8ükN_3oeîüE“ªLÑÉåXÊ™ù³‚7éíŸÆ•ˆäWÕ—®äU·ŽO-o\8Ç=G½I‘Uu)K¸[ùXƒÏ\ ç§¥H·êÖaW&6SêG\sÒ€$K°Í(1Úp¬TÝ}¸éù@“T›ì¤³ö’¸RpO¡Ç@?ÛæŒ¾ëhä b<Œ“É<Ž‚€$þÐ`ê“6deÊž˜ïÈï@ŨJÍ–´] ó…< ØÎq@j2ª,U<æ.H$•ÏM½z€$Œ„äZìÀl–Ý÷°8õ#ð4‚þDŒ™-W%WÈÎ[±àu mHǹƒ²lÏŸùí@X_‹¥Œ,†Êœ¸Ç·½^ € ( € ( € (¤Œ¡Û'&ò°x”åYIÛ€ãüCÿ!ÿ\“ùUØ]@%$ƒ†ŒÒx^˜û²O·Ë@}ÅúS•êZµÌfoõƒ§ãƒÒ€!Ôžæ)Øc.Å>` cãúÒwè5n£ÝlšÂÙ.°P¨Û»×þ´ÄWô©%M…·m€çÏ<}q@o¼~µ f=åÄ ÛÓ,]‚§¦xúÓÿ´_7Ü.9ÉùP"â¾N6°úŠ@>€ ( €.i_ò ƒýßëTº( gûÃéI•uÿ¿ðþt “Ìš,4]ògŒŒþ”!Å&õ þÕÔÅÚÆÚb–(YOByÆ3ÛŽkK.æ¾Î¿1`Þjn’m´Ur¤‚sócù`þ4¬‰å‚ê^º‘’ÙBî.¼0þ^õ&EU»ÔYØ}‘@V#œò#ü(AwrÖEÍ»¬àgnÒAç~?KÄÍ+¬2®ì+õäþCóÅU‚{õŒyêÌÏ·ËÝ#n®òù·Â…M¤ƒ’N3‘Û©ü¨ý ‘Ò€ ( € ( € ( € ( €2ï?ÖKøÒœ_òOúâ?•rž!ÿˆÿ®Iü©ÙJÈ& Àeºdf¡ÊÍ!Øk…ÇÊ9çi¨ª´Ÿq~”À¥yö_´Çç}þÝ=J‡R7Baö,Û>p¥@ëÇ_Æ–½­Ô{!al—@Ê»½zuüiˆ¯úcÈ›Ã36ÍÄàóÆ}q@aó™ºû…H—Œg÷½SÈàžÝ=éŒA,E‚‰¹9ÀÈç{P!ÙPÁ|Ã’3Œð÷ `ÅUK4„2Oá@ ·ý¦ý?Âßö›ôÿ 6ÿ´ß§øP·ý¦ý?€/i_ò ƒýßëL tP@Ï÷‡Ò“*ëþ?à üè'ïÿåØfLŽ8鑞¾Ô!Æ×Ô‹Ï×ÅÐÉ„£.A+À9èH>•v‰­©Z÷&?ÛG ;#` ©dÝ:úb ýÚ/\´Â1äI¹rçëô©2*©ÕYÛ+€Ç9»þ ’ý¬HxvÜÔÃsõãŒ~t,Ouæ¿›([ ‚8ó×éø“@`MB(€É#4n[•ù[øGZY?´ßp µp»pFsŽrsëúPHú¢«6Ñ„ÏÝîãëþs@}U£"®åÎp2¾ØÏZp]GÍg¶î_”í郟é@}Såù}üäøzŽu}Î&BíùXmûÜvÝÓ©  Z( € ( € ( € (.óýd¿ )Åÿ äÿ®#ùP)âù¯ýrOåLÎU ĉ$Õ˜ÐÆR£¶q˜ûqVVm'Ü_¥PŠwj—1 ‡Îzrx=9 u/µ4£ì,çù€ÏÖF­ÔsIg…°¹Qå²»ºßÖGu§¼ˆV ³6ÒÝÏ”˜W_ñûÿ_ç@ÉO!Ý‚¸ òqÀ#=¨C‹IêB-õåºP.PÄTüÇ)Ï~9â¯Ý5½;lNlõI"‘$»ÆWå*qƒ»<ñéEÑ<ÐObýÊÌ`Ao02䩎sڤȨ¶Ú‘w/v n;@ôǽJ‘c¿û Ù Àpáñ““×LP±-ÚÊæFFFn~èç§Aùš¢öúœQ!ºgådõ=Èÿwò4)·ÔzƒÃ`çŽ:}:Tµ½G.&êäíó ?QúPy™Aþ ùX<ƒóg“Ò€Ö-UI2FÀ²U¹¿Ã@tP@P@P@P@eÞ¬—ñ¤8¿äŸõÄ*åã “àqž?ZDÒcDQæÊ¥C`{ò3@ÒQ‹3ÊĮ̀ÈqŽ:v  g±óöy“6P’{~” iª…2±ŒŒAÈ<ÐŽ”„°EeeQÆ6Œvë@<ÍË.цP9üýèϤ#ÆPÌü¨ïÇ¿á@:PO™äˉK¯Ë9>½ùý(m 4h;|£ :dŸëú ³kjmÉ&Bçj¨ÈÇÿ×@( € ( € ( €*¿ßo­& õrý 8ßÿÈEë’* ;fU%Ë2ª’Z’W²°el.õàÓ{‚7Sî/Ò€)ÞOw1«ÄXžø>þÔ¥ÅÔàZ¸Œª|ʼn玟&®4Ò×pÛX[4±f6P8Çþ™ü©ˆ¯¡ Ì™±Twf¸,8'§© QÐõ)u™ÑÊ´¬AÈäf»cV -L\]ÉÖÃP-—I.#¸sŽô¹áüÁÊû¶›{Ë¿Ll¾ÞÈ\u祤{‡+ìAq¤j3•?ÙÒ.ÕÛ…*ëMT‚ꬬú¦ØÜ/^£¥7R ZáÊÍkBW¹GÒ#yQÐ3 }‰íYÓ­¥¤T¡ØÎþÀÕ?çÍÿ1þ5¯µ‡r9X`j¿óæÿ˜ÿ=¬;‡+š¨$Rlߎãüi{XwVz†‘Æ—n?ÙþµÂn[ € §Õi01#ÿ•Ïüš–óG¡¤m ü£êO I½‹ ªX3”pî·Š«2¹%ØWÔì‘ „ c89=qü賄»É4q gpªN&‘#å±*É–m g©ô [»x_d³"63‚y 7¶ÃwïЕ8 œÐí´ÞXŽd&A•äОêÝ•åEeê é@ [ûF`¢æ"I Þhû}¦ ûD(Éùº ”ÍD}ÙW )ç=(3}j1™ã85 Ô-0Ož›F9Ïçü IÄR³¬r+²}à§8 -í¹Dc Pë¼àâ€ñMþªE~p{‡ô  ( € ( € ( €*¿ßo­& õrý 8ßÿÈD×$þU@v²:®ðÛpÜsRÕÀ‰Š”PB¨À 8Æ 06“î/Ò˜ï'HîcF„9=ñžÇÛÚ€ Ôí¦¼˜%L’sÏ<ZM\iÛ¡#^%µ…³´%‘””tãü2 b+G©‡™U­Ù!`AÇL{ÐÛï­HÍa2¬‚’†BI8Æ2sÚ˜Mi,‘¢¤ÛY7aù݃Û?Oå@ {;’Á9÷é@ me4 ›§.Š1·'΀+ǦÎ%,$)èwvéŽ1Û•Jl.evÌðp9ïþq@”>~b¸ö€}\Ò¿äû¿Ö¨ tP@ïú­&$ò¹ÿ€P2ûyåY£,£ Hç#=ñN#ï¡PµÞIÚÊ„2°m¤g¾}êýãoÞØ´eÒcŽSnùPý7¾û³ïKRm6Í ¿³íìÏË×=ôÎjLJ›l °Ó)6Ñ–Á9ç9íŸÃ4ÛÔÓDè’´‹**ãabHÈÀ÷íï@ §K»DÉŒ·¾?´Zÿf;Æ" ²H‡³;óé@\Ò,¡øÆìnÆqíß}¨’¦„fR7.q–“»÷ÅMÿ£»‰Q“̃×õë@™-|ˆ™UÌnèWk‘ƒÆÞÿN(¤¿ÙgaÜêx]ØÅc¾âÛäý 4 è“î/Ò˜Šw—"+˜ÓÉžøÎ:ЫÞÊs6&IeÉ<ÿõ¨°Ó±!¼û5…³ˆ £( éÇøfãÕ$y–7¶EffV+ƒŠs}ãõ©"‡<g4ÀUR½Xž;ÐéP@п9|žF1Ú€/i_ò ƒýßëTº(  wýV“?ù \ÿÀ(uä† ÄBD,£‘ƒN;•ÛЭý¡¢ Åcfë"GÁòÆ6ççš»H×’¥·,}¿OX¤0ÙÚ˜e £Äzú‚iY“É+êÍ+©mâ·ŒÍèÉ@ãŒÿ!RbSó´ö’ôr§Í`½8$ó@ ½ŸLǰo*ªP ÆFsÓ¥/Úôæ–@¶Á¤g(zàäþ4ZÝiÒ”E¶–B[(6¨Ç9?J’âæÍgxÍ·˜ÃnæqÎ1É=²(úRÈìHÌ![jrÁ€õõ4ø¥ÓedVµDÝòX.{zÐ亱nmòèëÆÐ8à‚OlPf[ 4–Û6ù„ ®xð Ï¥»y"M£“ôã9õoÖ€ k›º•"€]¼c°ÆFzu#zk ²ˆÃDÍ´mÈŽšŒÞiâÙ¢ŽÕYFWÀñÎ(aybß*Ú3|Ì@ØHêFMG$ö î¶*†,|Ÿ}—v01Û>ýèÜp“dL…¤U9* \ÐÚ( € ( €*¿ßo­& õrý 8ßÿÈD×$þU@u:ªÞ´y²Ù”Ë>ãØzT»ô.¿h‹Lº’ïOI%ReI?ÅÁæš%Û¡Ó'Ü_¥1ï.LW ˆ0=øãƒ@jvŸm™TÌ Ø™ÉPIÏÿª“·q§bCw$6ÒG‘YFBŽGášb+Ç©Ý<«(Ü̬9\õèÍ÷Ö¤ [\ÞTÁ $îÉÉôüºS)-õó6O¸`mçŸÿ]K µ×ü¶¸f z1ï@6pÄnº-×=GùïEÀЉYcUvÜéõ¤è D,/5¶” åöÎzýhKJÿlîÿZ -Ð@S¿ê´˜‘ÿÈJçþ@Ëæqo‡1‡€Á§¡*ì¯ýµ ¼PtÉ<À„£(É#8â´åó5öNÛ–N¨Í†+¹?7ˆ8ãÛ4¬O"êË÷7#(ÈŒ:qš“"ŸÛ¡iaÝj ™YTçî‘Á==(/µ xå×ÌR‘ÛÔcùÐIZWAhC‚9qׯøPm¨¤½¡L¡f`ŒýO$÷Û&‘Ô8P»œœ=»f€ý ¹ÿ^²õO|þ°ß£2‡¶ e‡;}ºP½ú­ãÃöRYXç€h¢üe° óð99‡z[{ø¤˜£Ûù`ÏOoq@.Ý$mÐ c9lž?:‰õTè–Á\†Áqè éß§ê(X¯Ñ‰V·]à¨tl8üÿJÑòÓ9عÎsŽôBrQOéÚ€ ‰v®GN(h € ( € ªÿ}¾´˜.?ÕËô4€ã|Cÿ!ÿ®Iüª€ì.ddp¨¡Ž'¯jI6¸ÊW};ðj`Û½ÆÑ¸Ÿq~•b)Þ\ÉÄh‘îsŽ}è+ĉ„ŽíÃ*,|zg?J™µr ¯¡¬—Eá·x”"?•-·ÛùûQuq5gb´úœñ ±d¹ð~§ôª÷Ö¤ Ù-/U\ÁqÉ,ØþCš`"Û_‰ ó—il‘ž£ŒãÛ­$6×mSsûÀùÝíé@ †Êæ9ƒ›‚Àç·úEÄhR €!¸¼i¼ÖØP/—Û9<Ðm¯ï ±@–ÙUùSŒïç=½ªÊj—"5/hÌÅAÚ¹<ç}(C¨Ý5±u±un@Ï`}(R –I-L[W(­’O_ojŒÝ½ÞíöïûøºÒ`gGÿ!+Ÿø4²Ã‡†3#dÉÆFJâ“zZÿí‹Òòå !ÉóÓ‘ÇÕÙw5öqµù‰Íî¤ñɲÌFÊ¡”°'?1>ƒ?DòÁu/ÜM,p£E ‘˜ŒŒtãüŠ“"¡¾ŸÍ„IliFU²î8ô ½Ô&ŠTдL«:ž =1Ž¿á@ öëÃ#§ØÙ0FŒ~T¶××lPMhÊìºã8ù®®Äα[æ5Úwlœã<…7í·óêp\¯Ýnà?†Oá@ åÑtÛ6Ñç*÷½:[«¤‘Â[nPÀ#Ö€!KÛÙ=Öæ!µ‹~íŽN§¹ü¨ñ_Ê× ÀÀyAÛ wÀéõ'ò TºK—ŒÚ°›ae#*;ÿ3@%íÄ‘¤Â؆0³ FOpŒp3ÉÇÓµ9¯o@¿dfPp[içüÿZHï.Ö0ÒÂI*ì@” tbÆêKã ÎRO¨ôó  TP@PWûíõ¤À¡qþ®_¡¤âùúäŸÊ¨«R†dy¥hðJ‚;çŒSNBd“Ü—Ëò£T$«´dvÒnîåZÆÚ}ÅúP;ˉ£¹#L¯séÁ  ××!.м1¶”þ5ÍR«Œ¬‹Œn®X–âê;Xd†×–ûñŽ£¿òóж!•cºÔLª²Â0KÄlàsÓ¦OZ`+*î?(ëéR5¿µ,Êx*Hû¹èqÚ˜ öû,æ&OA·¯éF 4j6g²©#;Y9ü¨ÞÕþêþT€]«ýÕü¨Ú¿Ý_Ê€ «ýÕü¨Ú¿Ý_Ê€.é_ò ƒéýj€·@NÿªÒ`bGÿ!+Ÿø43p0m”´™tÈÏ_jãkêCö­x]Í´EY )Çç¡9㊻D×–•¯rÆí]ÑÁDŒ…ÊIÜxëéŠ4'ÜEë–¸XPÛ gÈܦ?Ç&E_?PY"V„á¤`ØA÷AãœñÇzKËF9SÈ·ýÛì©'œóõö ó53#«Bª™Yp}sÔý(-¥ÔÃF'€T;±Ìqõãž(IŸP3?”cHÈž™ïõ ùšŽÕ o# áw ¾™ †M@:y°îUæÀPY½¹ J÷áßËJïx?:…SgŒÊŒU‹m ‚p1ß×?•>+‹ß´"InÛ< [÷¸s^=CÕc¸—vdŸä·å\ŸCéÒ€$ÕB¸x‰Îì´Á÷õÛúЌڋ¹ G•ÁM»ºsÔã®(]PHq ”ç¦=±ßë@$Ô!·ÉÝ„@’T»<ð” ŬGjž\¡T‚2 8äZžÔj+4žv† g§LÜИõ/´ç'—æŒòö?Ï4QÓ\CŸ1q‚Ý{dP–‹RÁÙ"+™lç88»PÓGs$ŠË„Û¸$8øIõú{Ðs«†Uä`dŽ?JY!ÔÔ*ufÞÌF1ŽGOZ-L"—˜ F Àäü¾¹  V«r¤ ‡ÝˆÀ$c–ç'§Ò€,P@P@_ï·Ö“…Çú¹~†oˆä"?ë’* ;Wûæ¤äéùÿ#M²Ÿq~”ÀGÎSœÿC@ñÃ%õÀ{[g—xËË·µxæ¦NV÷F­ÔšÚ7:r%¤Q0Þà7–^{0:Ó[j!äÞùŒoµFs·ïN¼zÓ8õË.Ë8"Œ±ùÊ`‘ÏPsíþMXKL|¢Ê4àlýhÂãT%GÙc\‘ß8ŸjCq¨,NÞNd2|«·»zuõÏ4fÂk‰‘šæ/,ƒ€1ŽÿS@¨ € ( € §Õi01#ÿ•Ïü›?ëÿ ‹ôÀ( € ( € ( € ( € ( € ( € (  ¯÷ÛëI›s "ã±E+ê;isñü„GýrOåT#µ¾j@ŽNŸŸò4Ð)÷éL|åqŒç¿ÐРöâöåd[?7z’Ó2ƒ¦y©—7Ù·RÅ‹\ ¿³ÄMù2F1׌cÔñMl"H¤Õį¾$*yÇ\:ô¦î§ÔSöxK Qœ¨Îrzsô  ð™ (e>>`=hôP@P@P@ïú­&$ò¹ÿ€P3^Ì1$à4!Dð–Ú%Lçn7¾•VbºHa@P@P@P@P@P@P@_ï·Ö“…Çú¹~†oˆä"?ë’* ;Wûæ¤äéùÿ#M²Ÿq~”ÀGÎWÎ{ý `ß\ÇíÌo-¤o½I2¸W¦j'ÍotjÝI¬ÃÙÅ%ƒ+¦ù3ÈÁçÖ©l"XŸVœª ÝŒ²Ç×§µ0s&¦cã`Ü8<óœ~”¡™ä§›36=hôP@P@P@ïú­&$ò¹ÿ€P3ZÕË´ž1Ͻ Ùˆ¶žDŒåTe“ŽVî… ÿ>/ ±¯Wù¢ÀxŽ1"óžþh°Ÿ?¼^:óNÌ伂 …Ÿïœ.<ÓQlM¤<\ÀN¨N3ÖŽVB˜YS󣕅Ð%Ô.“ž(åh.€Ý@7š¸8#Ÿ|QÊÂèSqÎeN0:úô¥ÊÂèCsåPà–Î1ÏN´ùX] öˆväÈ c<Ÿóê(åat"ÜÂÍààgŒý?1G+ ¡æT%€óR1¿h‹ŸÞ/ïëNÌó¢Î<ÅϦiXIÎÇ¥!ž ÛK¨9Û‚{Óåb¸Ÿh‡Þ/ ‘ôhåatx‡ñŽ€àuÁéE˜\S<@€dQ“´sÞ‹0¸,ñ9dRXdzÐâÐ\x•¶´ˆ`š9X]Í*À„8céE˜\jÝBÊÌ]€Û! ¸RGÞÿõê¯=… é>Æ!‘—…,9è=%ÌŽ+IWrr#l““ÁëI¹ Ð`ŠÒy•Ud$.CÀ ?•;É ÑˆEšÊÛ‘Ó§”ýë„ýŒ²ˆI$î ŒñÓ?NÔŸ7PV#,ÔùNì®Hõ¨N[ƒ°øã¶•Ü(vÙÉäàý?ïš’Z‚°Ÿh¶òÎDƒøvó‘þqúRäcº^Ó8 ÀŒ.ïÂŽYÐöCóØù²pݺÿ*,ÂètRÛÄÒìUrX©<¨4r°º'Ù ¤;6âÜòØÏJkšÂÐ|‰oÃï1ÎXñÞ’mDBE™săj€[æÆ=?OÒ«ÞƒËYï²Îq’Ø'¡¥ïX4'³L<[ŽÄ$€(j[0V VÈÌZBÁϽ?Ã4.kY±#-³×Ä€“Œý)jõˆEŽÚfÚ¦BBŽ¥¸â‹É É‘…´ŽP‘NìgæÆGÿ®Ÿ¼Ðh8a”9SÐúÖOFQJãý\¿CH7Ä?ò_úäŸÊ¨Õþù©9:~ÈÓ@l§Ü_¥0ó•Ç\ÿC@w·f+˘|ñÞ¬pŽsò¯ >•2RkF4ÒÜžÌ\\iáìæÙó?,:ÞãëM+!‘«É#ƒ8Enî}Æ©$–ú™¸CeùçàgÃõ A¦Œ¦IÑ‚»Ùå@ Hµ1r?x<’äà‘ÀÏ~=(N€ ( € ( € §Õi01#ÿ•Ïü›?ëÿ ‹&Bñͺ6P™ñ»ŽÕv³B¹P\Y¤@4$œñ‘Œú÷«å•÷&èq¸³àùg8öÍ.YèpšÔð!8¹ vÅ—pºÍh§ˆIb ãZ]Âè‘î-ð7¦v6àãþ4”Xî„ jö¯8ŒmPrÇn”{ÉØZZä-5”©ÌG@ö©) º,,ð¦T ”ã§56lwDbæÖ&b!öñ€:fŸ,˜®­-¶Yš1Ã<Î3E¤CíÍ´»^5 Aã<€ÿ*Ræ[XeÌ–‚VócÜê=9íþ"œT­ n-¡c¶=¹;NÓ¯çG,˜] ÒKs)„lÕyü?:=äípÒÂÛ½­Á"8Ç@yš”wf5žÕ–Ñ‘’ÃŽÇ¡þtí-ÃA$žÉ ‰£'jôÛÔP”ž¨.–‚ ì¤r<¿˜­²AtHe·¸xÃDÌ[!Iñ¥fº…Ó,–HÈÐðXôÿiI­ÃD6IlÇÌð ‡;r__jiK¸]žËheIÆßÒŽYÑ,_e¹,.@î_j—Í ¬ÆËgÒ!ÎgsO–K`º»·ÜˆYY@è2qþM²kpº¦ÞâIt @O~¿áKT· ØÙ^5eTŒéYËFR)Ü«—èiÆø‡þB+ÿ\“ùUÚ¿ß5 G'OÏùh ”û‹ô¦>r¸8çúƽiRæt2´hÎŒw|«éî*'Õ“±QinKµÔ¶*Èa˹mÙŒñÛ5h‘ÆËQ3;ý©qŸ•rx(Íi~'/ÂF„–Û’Ý€î=G·zCk©y­‹µ1çœ?.?ZkYê-.>Õò`w`ç=:~´û˜5œ¼2ª¦GË»éœqé@1†XÔ;n`O©  € ( € (ÿU¤ÀÄþBW?ð lXÿ¯ü(B-¬¾b*…'nNA¦®ËK¢÷­æm0E°/~Ýxý+E2nZÑ!GŽ4`䑊„õ)ûD`å¦2ÿ(ëÇ¥>V+ŽIbhƒˆ†q÷p8áRÓC@ò¢0RN2=i4[^?õaAíŠ'Ù¡Î|µÎíÝ;ÑÌÅd;ËLçbõÏJ.Æ/–œ|‹ÇŠ.yiýÅü¨» `ÁÐEØXVDc–U'ÜR¸ å¦s±sëŠw` "lU}(m°QÐQvyhv.zô¢ìƄ䢒{‘EØÈEéEØŠ0á‚FqŠ.˜юYŸqEØcŒõE?…`Txbàtâ‹°*ƒ'¾)žZ` ‹ÇN)Ý€yiýÅôéEØ A$(ëÇZW³€0éIBãý\¿CH7Ä?ò_úäŸÊ¨Õþù©9:~ÈÓ@l§Ü_¥0Ç+Î9þ†€2õk˜-ç…f˜Ü`‘Ï×$qU¶´DÊJ-]’µ´×6ë ÞX ΂1Ç"§b„{ Æ)þ–J©ÝÔç?á@6wŸºÅë|ªCÄ㯽1¬oÚVo·]¿(àúÐmì/ÒXæ’ï 2dHÏ~sùÐ¥²¾u&-@Œ¶G:ÿõ¨J5)©%ˆ$÷  € ( € (ÿU¤ÀÄþBW?ð lXÿ¯ü(B.Gæåü͸ÝòãÓÞ©Û ¤@`d Ž”P@P@P@P@P@PWûíõ¤À¡qþ®_¡¤âùúäŸÊ¨Õþù©9:~ÈÓ@l§Ü_¥0Ç+Î9þ†€05ûkYÝœÙ\\ÏÛº>8ȶ9­iÍÇK™T§jÑfÒÒkÖ/´1©WÆFqÆ;t¨›NM¢àšŠL™´ùÝ“ŒU8ÉÎï®jJ±º>X®¦’zÿ‡×šFÓn˜ jSp{Pwaw40ÃÉF×rNO©ëÏÿ^€/ÛÄ ·Ž%9¡s@P@P@P;þ«I‰ü„®à رÿ_øP„\E”y›Ø6NPc•NÂ!ó.7•ÛÐg8ïFƒíp>êŒä}1F€&ë€@ÛŸ½ÛòïF€4Ír¡‰ˆ:õè²crcC†pÎÐ3Æš°È#†Ã½›!²òp1Vù ÷‚S~ÅÌ~bä£ p1þ4.N î" @”¤± H^F?LÓ÷ÞMö63Y;¾\î¥îRFûPfd`Á`¾ŸãKÝ Bµ›I|ÒDßÁÓÐZ/2¶À¯b-Ú†vì<ãæÊðsÿ×ý)û‚÷…C}“¿ÌÆþ0§?ýj/Aê:·ü¾`ÉÇ9#§áJ\½\žFŸnc^xÌÔhPn¸  òÜãòïF€0Ër “ zþ½@M”¦e40·ùMÆúô-ÀŠÜÎdýîí¡2^ý*¥kh%qŒ÷k7ÝÜ€ž€cïéš- Qð½ËÔÒ…©$ ?ÙØÈ¿¼Œ÷⥥}¯b°¹½ä@ ÷øÕòÄWdáî7ýñéÓãSd=Fe.0Ýǽf÷Jãý\¿CH7Ä?òõÉ?•P«ýóRrtüÿ‘¦€ÙO¸¿J`#Œ•#žßC@ö­u ¥ûÅs4ª%`êiþ2rxäQì¥QhK«=KÖ¶­=”%&ò~fuÛÎàzt4[—B¯}At™P17Ì2KŽ:GÒZgâðìd!€Ïs‘Žzc¥Hš\‹&ãvü@Ž>Ô“i—NÒ ½»›$qÓëþ}èLp1@P@P@S¿ê´˜‘ÿÈJçþ@Í‹õÿ…EÄFBä¹mÇ áöªlEhã»DP\“³’H?6yíVÜD®Il.įö‚¥1òãÖ”¹m Õú‚¥ÃC2HÃqÎÆ^1ǽ۫¥o"ÿ¼`õ;Ï9ÿëUÞ³-J’²Â˜`‚ø8ÏãPšÔlfÛ­£ †KgœñÅ;ÄZ“BeÆÙW£-ê{ñRíÐhEך 0Ù¸ä tíOݰj,âàÉû“…Àî8çŸÒ…kjá/ÚMºy{D¼nô÷¡rßPÖÄh·¤Î£Ž¼z}=j¯j3eðݵÀÏv ã§ÿ^‹À5,Ä&Äžaç?/N•.Ý©\-ÿ‘zrp¯ÿZ«Ü£öÝŒÙåyÈü{R÷CQ®·ù;{ã§øS\¨Šºs 8çzÿ…àjOœnó›9ÁÇ}*]º \®±ê’dRqŽØúãW€µV÷iÃØ8½ÐÔša1hü¢þ.”•ºÜ®ÿ —CÆ€9ª÷¨*^ª1œsÇøÑx¤°ý Ç/™Ãä„Î1Óüj_.–¹[òŒ—$c#ªð¤Ò%ÉŽ!…#óRœu¸õ#]øýçßïõ¨{è4R¸ÿW/ÐÒñü„Wþ¹'òªµ¾j@ŽNŸŸò4Ð)÷éL”6:ñé@š¾˜—jlâžPîTO¨­!7¦s‚–¶–ÂÆÖfÌ&ÝÀdŸá¥LÚrmˇæ˜œ±¹‘þM‹»œrO×­IDCDŒ}ÙGÇlŸÖ€5a@Îp:š( € ( € ( €2õ¹–Þ5šIü˜×‚vn¤U¶~ßpKÎÃ’¸ý(µcþ¿ð¡¶„ívË’rNqô«oaXªm.v€nK}N9ÍW4{ Ìžh¦kuHåÛ Æ[Ö¥5}PÚv †+­ê^Q€à[<úU7‚W°O° ûйö¥t`-î<ÂLù'Ðÿõ¨æVØ,Äh.vç…Ç|Ÿ_óùS¼{™3G1·T‡d稩º¸õ±‚ç97ųžÞ”ù£ØVb{­£½M>hö 1ÍÁ9‘ó×·¥.eØ,É&IÕ£pÖ{ÒM-ÆÄ1KöQüÈ1óïEÕîÐ`¼ó8)¸žÝžõW¶˜ÿ³Üñûþ€Ž½ésG°YˆÖ×½;²sÐëO™˜ñ â@Þ` ±Pzæ•Õ‡fHé$–ûIÙ!%OCI4˜-µÊ°ýð ¿qûš®hö™%ÄrÈÀÅ \)žõ1in60[ÜaƒKÔ.cØÿ…>dbù ‚²‰7c'‘Ç^!fH±H-D{€qÜWW¸t"k{œü³ã¤ú>hö˜msŒ%Á{¹ïÒŸ4{˜{Œ6'å—î!ÿŠÿ×$þU@v¯÷ÍHÉÓóþFšòë"&–LË>g ã¨Ù½`q´qEÀ>ܸ(¸Û÷ûqþà¢àn?Ü\íÇû‚‹€}¸ÿpQp·î .öãýÁEÀ>ܸ(¸Û÷ûqþà¢àn?Ü\íÇû‚‹€}¸ÿpQp·î .«y:wÛ&O” °PMWžâKɘ+ùh€c sõ  ÑÂb»—.Î’@ñÚšËä±|gYjq˵íâ9Õ¤%@ªrl,KžQB¹ÂŒšÛ‡¥ÁIžNI~Äð)9iaØlr,dN„“ïšnmŠÁ¾SŽ ñíC•ÂÀÒî}Ãpù·p{ñþs…‚yDÍ–\qŽ mW¼¦-–bF>fàRr¸%b, œ´„ñ»Žj½£R_;ýÃómõÏ5<ÚÜ,D8ÇÏ&G}Ýê½§rŠS,òÆ>P‹Açæ'?Ê—8X d³mãåÉÇ~Ñ…‡2d¹†Nî~?Ãõ¥Î [´9%HÆIæŽmn#x7DޤFÖéíMTò cøßý£Kœ,,ãç|ÛÆŽvîÙsóv'IÊáb5„( 3d‚ Ï<€3úUs°°¦1¸ÍƒÇ¥Îˆðr‡Í»¯|ÑÎÂÁÝÊ®9'ŸsC›a`)—,Y¹mÄdâŽp°‚/˜1f8ê ëG8XF€6Ü»üªƒÛð§ÎÂÄ/{¥Ø…·4— pO#åÿõþ”œ›Šq$³BŽgeÜ£€£Ò¥»°D¬‚;B€ä*`géHGÄ?ò_úäŸÊ¨Õþù©9AÏ9} 0(Éks `×NC ݯJ8ÃxN~×'ýûZ'“yÿ?rßµ ȼÿŸ¹?ïÚÐä^ÏÜŸ÷íhò/?çîOûö´yŸó÷'ýûZ<‹Ïùû“þý­EçüýÉÿ~Ö€"óþ~äÿ¿k@“yÿ?rß±@‘yÿ?rßµ ȼÿŸ¹?ïÚÐä^ÏÜŸ÷íhò/?çîOûö´yŸó÷'ýûZ<‹Ïùû“þý­8ÅsäGÎUPvŒsõ †+ˆ™ØÊ]›,Ÿá@Ç„³;¸€ŽÖ€,¸Yv{¬|þ´µ¹ ]8 þ­{ÿú¨|‹Ïùû“þý­"óþ~äÿ¿k@‘yÿ?rßµ ȼÿŸ¹?ïÚÐä^ÏÜŸ÷íhò/?çîOûö´y7ó÷'ýûyŸó÷'ýûZ<‹Ïùû“þý­EçüýÉÿ~Ö€%·[˜ÛÎ.Î%£ôϧ֓y÷_Þ_û÷ÿ×£@Ϻþòÿß¿þ½ž}×÷—þýÿõèÐó¿÷ïÿ¯F€'Ÿuýåÿ¿ýz<û¯ï/ýûÿëÑ  çÝyïßÿ^<û¯ï/ýûÿëÑ Ÿuýåÿ¿ýz4ó¿÷ïÿ¯F€}×÷—þýÿõèÐó¿÷ïÿ¯F€}×÷—þýÿõèÐϺþòÿß¿þ½ZH®ä¿ÚYsØF8 Ä“ÅÆ£)ÿ× 0”©a‚1÷?úôÊø‘vj›}#QúSÚ?ß5 At®ÑmïíÁ¦e·¾WcçqØvïŽßJt0ß+eå$“žqè:P1¾N¢!#ÎC&:ã¾~”Ûêdló §'¦åõ Bý›P,ŒÒéü]9í¥×PyK4ªàmÓð  ¥Šùœ˜åT‡ùZ³”`úPƒé@¥>”`úPƒé@¥>”`úPƒé@¥>”`úPƒé@¥>”`úPƒé@¥>”`úPƒé@¥>”`úPƒé@¥>”`úPƒé@¥>”`úPƒé@¥>”`úPƒé@¥qþ)ÿøµ@i=ÄûÛ÷Òuþñ ûLãþ[Iÿ}>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€0õgg½,ìX퓚ÿÙlibstruts1.2-java-1.2.9/doc/images/how-to/eclipse/developing-eclipse-style23.jpg0000644000175000017500000003565110404045236030132 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„   (1#%(;4>=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀá¤!ÿÚ ?·âzÿMÔ’ÚÎ]L*çt[ŽMdjŠÄ46 Ž Ãÿ×®˜QŒ’fr›L_øLµ/ùåiÿ~¿úô«ã MˆRO@!ÿëÕý^ûF8ø¿SRCCjìaéúÒÿÂ]©íÝäÚíÎ3äñŸÎ—°€ý£âýGþyZÿ߯þ½8x»Pÿžv¿÷ëÿ¯G°ˆ½£øKuùåkÿ~¿úô¿ð–jóÊ×þýõèöhÅ+Ô?ç¯ýúÿëÒÿÂUÿ<íïÕÂ!í¿ð•_ÿÏ;oûõKÿ Mÿüó¶ÿ¿T{‡´bÿÂQÿ<í¿ïÕ/ü$÷ßóÎÛþýQì"ÑŠ±äÏÌQà‰ñÿ±ÿßühÿ„&qÿ/±ÿßühöþAìüÅÿ„&ùýþø?ãJ<7üþGÿ|=¿{1á Ÿþ#ÿ¾ ð†Oÿ?‘ÿßoäÌ_øCgÿŸÈÿïƒKÿtßóùýðhöþAìÅÿ„>aÿ/qÿß—þ ¿çî?ûäÒöþCöbÿÂ!7üýÇÿ|„¦òõýòhöþAìÅÿ„Joùúþù4£Âsùzþù4{ ö~bÿÂ)7üý'ýòh›þ~Sþù4{!{?1ßð‹Mÿ?)ÿ|š?á›þ~cÿ¾MßÈ=˜¿ðŒMÿ?1ÿß&—þ™¿çá?ï“G·ògæ/ü#SÏÂ~F”xnoùøOûäÑí¼ƒÙ‡ü#“Ïtü/ü#³ÏtüÛÈ=˜¿ðMÿ=Óò4¿ðKÿ=Óò4{o öbÿ`Mÿ=“ò4`Kÿ=“ò4½·{1ÃB”ËdüØRÿÏdüÛÈ=Ÿ˜£C”Ëdü(ÑeÇúÔüÛÈ=Ÿ˜bËÿ=Sò4£F”ËTýhöÞAìüÅþÇ—þz'ëJ4‰Gü´OÖmäÏÌ_ì™ç¢~´dËÿ=õ£Ûy³óû*QüiúÒÿfKýôýi{_ öb2QüiúÒÿgKýôýhö¾AìÎZãW¹íÕÄÔõ˜,%˜à ?ðQYê–7ϲÒê)›°­ž=hÝQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@åÚßü†.¿ßª4êÛKÙJª2J`ø®OIѵ;h­MÄL_ìRAÜ)Ž~÷¨éÍV»±×&³Xã·»WNHN_¤©$sýÜó]6‹ksi©j‘ºÈ¶fD6Á›#îüØÏ=hbŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š*‰»“ûkì¬BÄ Þ¹Î8úQ@KZaö¿Jv<ßö¿JC/û¥;ó=lÿÄÞëýú¥š‘žµmþ¯òþB¥ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š*¥íÍͶ+Q< eÊɇEÇ?OÄRÛ,ñ¸12î ÛÏßëW[5œ¯%ärùL€ð@$`‚3ÏãM³%ä 8®Ue#! ‘ôÍ;ͤ‡ð CLŸôÑÿ/þ½5¤óÑÿïŸþ½;çZ×ü…îߪ\ÔŒõ«oõ—ò›®Ý=¼öŠ&¹Š&ó ›d Ç„(««O „ï4hòÛØ­Ëa¸bwqÿŽþµ-ž§<׬ÐƱM,±FQÉl¡a’1ßmA¨ëÏeq"¬l*¾øRØ'íëš»c{4³IÔqÇ"F’æ6,»[p@çå?¥bÛø‰ƒÜÊ&YÄŠÏ Mò„ÚÛ@ä|Õtjï«Ái²ußç(s´Œ)g [ËÛ›=VöTU’ÚX¤‘YÈ#æ“;F1“n‚’ïZt²‚AÓ3ºü­Êílzw  QjréP¬dmŠhYZB–uíç´šÖoí yÅ»e6†8Ç##dñWm hÑ‹S·¹í®á‡í’7›1¹]È=1ëéíW´éQͧéoi’ÝÐÇéXfäÍ$JÒ¬±9ê™Î?iLýù©ˆóíkþB÷?ïÕ‚Z¶ÿWù!Oh£iRFP^<í>™ë@gÒl.d¶ÊËÏ#¯QÇoj™m B…bQå³:ûÎOã“ùÐ3éV7f·Vsœ’N9Ù?÷¢ÿ¾OøÑöÉÿ½ýòÆ‹€}²ïEÿ|Ÿñ£í“ÿz/ûäÿûdÿÞ‹þù?ãGÛ'þô_÷Éÿ.öÉÿ½ýòƶOýè¿ï“þ4\í“ÿz/ûäÿlŸûÑß'üh¸Û'þô_÷Éÿ>Ù?÷¢ÿ¾OøÑp¶Oýè¿ï“þ4}²ïEÿ|Ÿñ¢àlŸûÑß'ühûdÿÞ‹þù?ãEÀ>Ù?÷¢ÿ¾OøÑöÉÿ½ýòÆ‹€}²ïEÿ|Ÿñ£í“ÿz/ûäÿûdÿÞ‹þù?ãGÛ'þô_÷Éÿ.öÉÿ½ýòƶOýè¿ï“þ4\í“ÿz/ûäÿlŸûÑß'üh¸Û'þô_÷Éÿ>Ù?÷¢ÿ¾OøÑp¶Oýè¿ï“þ4}²ïEÿ|Ÿñ¢àlŸûÑß'ühûdÿÞ‹þù?ãEÀ>Ù?÷¢ÿ¾OøÑöÉÿ½ýòÆ‹€}²ïEÿ|Ÿñ£í“ÿz/ûäÿûdÿÞ‹þù?ãGÛ'þô_÷Éÿ.öÉÿ½ýòƶOýè¿ï“þ4\í“ÿz/ûäÿlŸûÑß'üh¸Û'þô_÷Éÿ>Ù?÷¢ÿ¾OøÑp¶Oýè¿ï“þ4}²ïEÿ|Ÿñ¢àyîµÿ!{Ÿ÷ê0=._¾?Ý_ä)• PEPEPEPEPEPEPEPEPEPEPEPEP ­È^çýú¥T¥Ë÷Çû«ü…fk_g·Ž5˜Àó>Á (:“óÖ¤!ÕÙícqg–?ÝŒõ“;JŸNHý})—šÃÅ$ˆ±ܱʹ޼‘ŽÄS–ú¤Aì3&vÊÜ’¤¶=;ŠŠ+Û”Ó¬c›DêèÄ’‘ƒ»>»‡ë@^£-ë~òÙ¢FA"1Ï ý~½ªoî×O‰ÙRYä'bŒ’Ê:“ô ƒW–â™-¦èÑ77%PŒû üÔo¬]$ÙUå›~ÂHÀÇ·¿z|W÷‚ÚiŒK"ùì©×(2r[ ÇlÖ…¬í8 û²:²6sœçð銱E (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ („Ö¿ä/sþýRªÒåûãýÕþB¡hÑ\¨,™Ú}3Ö¤‹xR#QµÌƒÙŽrSùÔO§Z<¦V œäšN³b„À™C•öç?Έ´ë8F#·Eò9¨  µ‚Ý™¡‰P·R*´z\@È'a2»n T.ÓøP¦Æk%¼Q¬hàq€?€ò¨­ô‹X`º bå›×üŠšK Y o…Nâ ÇÅL‘FŽY+ H†p?S@¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ („Ö¿ä/sþýRªÒåûãýÕþB³ïaK‹«(dÎÇ— ‘ƒÜR6Í2á Ûè:ÌÑî*=ÅN;ªæ–ºV£%™Óu I£Ì+pì¹\ãûÔÀ×ÿ„{MÿžRß÷ÿ?áÓ生÷ýÿÆ€þý4õRß÷ÿlz•(&5v JœNçvë@ÿ„{MÿžRß÷ÿ?áÓ生÷ýÿÆ€øG´ßùå'ýÿñ£þí7þyIÿßühÿ„{MÿžRß÷ÿ?áÓ生÷ýÿÆ€øG´ßùå'ýÿñ£þí7þyIÿßühÿ„{MÿžRß÷ÿ?áÓ生÷ýÿÆ€øG´ßùå'ýÿñ£þí7þyIÿßühÿ„{MÿžRß÷ÿ?áÓ生÷ýÿÆ€øG´ßùå'ýÿñ£þí7þyIÿßühÿ„{MÿžRß÷ÿ?áÓ生÷ýÿÆ€øG´ßùå'ýÿñ£þí7þyIÿßühÿ„{MÿžRß÷ÿ?áÓ生÷ýÿÆ€øG´ßùå'ýÿñ£þí7þyIÿßühÿ„{MÿžRß÷ÿ?áÓ生÷ýÿÆ€øG´ßùå'ýÿñ£þí7þyIÿßühÿ„{MÿžRß÷ÿ?áÓ生÷ýÿÆ€øG´ßùå'ýÿñ£þí7þyIÿßühÿ„{MÿžRß÷ÿ?áÓ生÷ýÿÆ€øG´ßùå'ýÿñ£þí7þyIÿßühÿ„{MÿžRß÷ÿ?áÓ生÷ýÿÆ€øG´ßùå'ýÿñ£þí7þyIÿßühÿ„{MÿžRß÷ÿ?áÓ甿÷ýÿÆ€¥ÚX“%¼l‚2Ò33QÒ`pš×ü…îߪTÀô¹~øÿuªsÈGOÿ®ßÐÒ/ÞZÃáøÒ[˜QIJåYÀ?|Ñë/Œï$µt”4mÚC ÛÀ‘n›É€½õÒÆÙûDyð0£åéœúôëQ[Ë©ÎÈgšâ&’EÕTƒÈ‘Ç]ã‰:ÝÄ2¿Ÿ+][ìùLjXã¤÷¨¢›R…6Å!·RÌë”?;ç¦9íÇh²\íëŽh Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( .þàúϤÀá5¯ù Üÿ¿T©érýñþêÿ!TæÿŽÿ]¿¡¤ †ŸqªÛ›»m Eò™Ø!px$þUÂR Ö<øsoæ l÷Ã~ÜdûƒL¾‘œ#"œåÎ=‰çÓ¥$q$eÊ(Rí¹±ÜôÏè*öÝŽWsºîòعÆâ@ÀN(ù`ªXŸ” 梴¹p,É¢7+¿0ìFC@ up––“\ÉÆÒ6Þ¸&£7ðlŽ@Iå0î€À•Áÿ P%ê¥üv‚]Ý7–P6¨Î9ÉþUúµ¼Z|—ѹ‚2ÁÚÎãɨõQ@Q@Q@Q@Q@Q@Q@Q@Q@]ýÁô5ŸIÂk_ò¹ÿ~©SÒåûãýÕþB©Íÿ!?þ»CH>ÚKCg 3jwvd³Åwp¹E½˜`ל} ÷wG{;½zí4ˆÊÛ.›ä (P¸ñÏ×­04 Ñî­Loi1I@§€òÎàqÎ à‘ß­Q“C¿dš8m¤H˜d#˜T1L¤€˜–A“Ïå@ÑiÆ¿†Þ(à¶–%X•  ÀéÚªÚ5ÒÏÐY<£ì«ê»IÎìœãžÀÐHô ˜.£š_-cXæSªª¢‚¤\d†8w¹§]èÓ.‘ikof£Ë‡%`Xƒ,Ø1.1qÍ2óMÔ¥ÓšÈ[3¹yd3y‹´îÀœç,;b¬µ‘·Óï-ª¥ÅÜìªïw;0'ü óŸCн$ÑÅâ8ÖGU2[m@ˆîè+>ñž×Ã:¢]ÄmÚS?”¬ÊwïÜT Ï=(¢¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ( ¿¸>†³é08MkþB÷?ïÕ*`z\¿|º¿ÈU9ÿä#§×oèiCCµÕµ}8^6½s iv,j@Ãý*Þ–÷¶>$¹²¼Ô¥»…,ÄÙ‘@Úwc·°¦êß[3*¬ÊKz’2?Njí{ »Ê»fIÁ8ÇÐÊ€.Ñ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ßÜCYô˜&µÿ!{Ÿ÷ê•0=._¾?Ý_ä*œßòÓÿë·ô4€£¢Í®ix³þÀ’m²;(¹ËÓñ«Zl…ïˆnooôÖ³†K1 ªù;³ÛØÓÔ~D;« lºäà…#ÓšeŸ‡Ú F;§x0Œ­²8ÈÎÕdäžx?*Ý¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ( ¿¸>†³é08MkþB÷?ïÕ*`z\¿|º¿ÈU9ÿä#§×oèiÐQLŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š‚ïúLZÿ½ÏûõJ˜—/ßî¯òNoùéÿõÛú@tS¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ »ûƒèk>“„Ö¿ä/sþýR¦¥Ë÷Çû«ü…S›þB:ývþ†À( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( .þàúϤÀá5¯ù Üÿ¿T©érýñþêÿ!TæÿŽŸÿ]¿¡¤AE0 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ( ¿¸>†³é08MkþB÷?ïÕ*`z\¿|º¿ÈU9¿ä#§ÿ×oèiÐQLŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š‚ïúLZÿ½ÏûõJ˜—/ßî¯òNoùéßõÛú@tS¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ »ûƒèk>“„Ö¿ä/sþýR¦¥Ë÷Çû«ü…S›þB:ývþ†À( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( .þàúϤÀá5¯ù Üÿ¿T©érýñþêÿ!T§ÿŽÿ]¿¡¤CE0 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ( ¿¸>†³é08MkþB÷?ïÕ*`z\¿|º¿ÈU)ÿä#§×oèiÐÑLŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š‚ïúLZÿ½ÏûõJ˜—/ßî¯òNùéßõÛú@tS¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ »ûƒèk>“„Ö¿ä/sþýR¦¥Ë÷Çû«ü…S›þB:ývþ†À( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( .þàúϤÀá5¯ù Üÿ¿T©érýñþêÿ!TæÿŽŸÿ]¿¡¤AE0 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ( ¿¸>†³é08MkþB÷?ïÕ*`z\¿|º¿ÈU9¿ä#§ÿ×oèiÐQLŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š‚ïúLZÿ½ÏûõJ˜—/ßî¯òNoùéÿõÛú@tS¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ »ûƒèk>“„Ö¿ä/sþýR¦¥Ë÷Çû«ü…S›þB:ývþ†À( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( .þàúϤÀá5¯ù Üÿ¿T©érýñþêÿ!TæÿŽŸÿ]¿¡¤AE0 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ( ¿¸>†³é08MkþB÷?ïÕ*`z\¿|º¿ÈU9¿ä#§×oèiÐQLŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š‚ïúLZÿ½ÏûõJ˜—/ßî¯òJùéßõÛú@t4S¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ »ûƒèk>“„Ö¿ä/sþýR¦¥Ë÷Çû«ü…S›þB:wývþ†À( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( .þàúϤÀá5¯ù Üÿ¿T©érýñþêÿ!TæÿŽÿ]¿¡¤AE0 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ( ¿¸>†³é08MkþB÷?ïÕ*`z\¿|º¿ÈT`&õvEfC•'?)©´¿§þ<ßãGÚ_Óÿoñ§p´¿§þ<ßãGÚ_Óÿoñ¢àiOüy¿Æ´¿§þ<ßãEÀ>ÒþŸøóiOüy¿Æ‹€}¥ý?ñæÿ>ÒþŸøóûKúãÍþ4}¥ý?ñæÿ.ö—ôÿÇ›ühûKúãÍþ4\í/éÿ7øÑö—ôÿÇ›üh¸Ú_Óÿoñ£í/éÿ7øÑp´¿§þ<ßãGÚ_Óÿoñ¢àiOüy¿Æ´¿§þ<ßãEÀ>ÒþŸøóiOüy¿Æ‹€}¥ý?ñæÿ>ÒþŸøóûKúãÍþ4}¥ý?ñæÿ.ö—ôÿÇ›ühûKúãÍþ4\í/éÿ7øÑö—ôÿÇ›üh¸Ú_Óÿoñ£í/éÿ7øÑp´¿§þ<ßãGÚ_Óÿoñ¢àiOüy¿Æ´¿§þ<ßãEÀ>ÒþŸøóiOüy¿Æ‹€}¥ý?ñæÿ>ÒþŸøóûKúãÍþ4}¥ý?ñæÿ.ö—ôÿÇ›ühûKúãÍþ4\í/éÿ7øÑö—ôÿÇ›üh¸ iÙÌŸëQÒ„Ö¿ä/sþýRªÒåûãýÕþB³µ[³kn¢9cŠY\"<ŸuO©üª@‚-j7ˆIå³"Ûùò:B›#ë•éRÅ©3^‹I­ŒRa‚ÿ즘&²elGjÌ ¸c“ÈD×a’tHâ‘•¶å°x,~"€ÚÄ͹Km’LQ‘Kƒ¹ õìyeuóM@KD¤íÜ1€î=úPáÐv¥¤EPEPEPEPEPEPEPEPEPEPEpš×ü…îߪU@z\¿|º¿ÈUÛWâx¼ñçýjû*@ŠÏMX’q:ÄÆ`U‚) T’q‚Ov5¶‘´È÷3¼’±uv@ÏBI=Ïz`X‡L¶€(Eo•ƒ‚Xž@#úšHôËh¶lª  ¡ÎÓ€Hîxû @9´ÛfH×k*1ÄÁõã­OžFs#³¡L³“€zãÒ€-ŠZ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Zÿ½ÏûõJ¨K—ï÷Wù ¡z­-ÍœY#YeÚÆ3ƒŒRïö óÿ}ÿøQýƒüÿßßÁþÀ?°cÿŸûïûø?Âìÿçþûþþð û?ùÿ¾ÿ¿ƒü(þÁþï¿ïàÿ ?°cÿŸûïûø?Âìÿçþûþþð û?ùÿ¾ÿ¿ƒü(þÁþï¿ïàÿ ?°cÿŸûïûø?Âìÿçþûþþð û?ùÿ¾ÿ¿ƒü(þÁþï¿ïàÿ ?°cÿŸûïûø?Âìÿçþûþþð û?ùÿ¾ÿ¿ƒü(þÁþï¿ïàÿ ?°cÿŸûïûø?Âìÿçþûþþð û?ùÿ¾ÿ¿ƒü(þÁþï¿ïàÿ ?°cÿŸûïûø?Âìÿçþûþþð û?ùÿ¾ÿ¿ƒü(þÁþï¿ïàÿ ?°cÿŸûïûø?Âìÿçþûþþð û?ùÿ¾ÿ¿ƒü(þÁþï¿ïàÿ ?°cÿŸûïûø?Âìÿçþûþþð û?ùÿ¾ÿ¿ƒü(þÁþï¿ïàÿ ?°cÿŸûïûø?Âìÿçþûþþð û?ùÿ¾ÿ¿ƒü(þÁþï¿ïàÿ ?°cÿŸûïûø?Âìÿçþûþþð û?ùÿ¾ÿ¿ƒü(þÁþï¿ïàÿ ?°cÿŸûïûø?Âìÿçþûþþð û?ùÿ¾ÿ¿ƒü(þÁþï¿ïàÿ ?°cÿŸûïûø?Âìÿçþûþþð ]1,Éqqq) ŒJàùM¤Àá5¯ù Üÿ¿T©érýñþêÿ!TæÿŽŸÿ]¿¡¤AE0 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ( ¿¸>†³é08MkþB÷?ïÕ*`z\¿|º¿ÈTF8Úh¤pÛ¢m˃ޤ koVý?µ·«~ŸáNàkoVý?µ·«~ŸáEÀ>ÖÞ­ú…koVý?‹€}­½[ôÿ >ÖÞ­ú…û[z·éþ}­½[ôÿ .ö¶õoÓü(û[z·éþ\ímêß§øQö¶õoÓü(¸ÚÛÕ¿Oð£ímêß§øQpµ·«~ŸáGÚÛÕ¿Oð¢àkoVý?µ·«~ŸáEÀ>ÖÞ­ú…koVý?‹€}­½[ôÿ >ÖÞ­ú…û[z·éþ}­½[ôÿ .ö¶õoÓü(û[z·éþ\ímêß§øQö¶õoÓü(¸ÚÛÕ¿Oð£ímêß§øQpµ·«~ŸáGÚÛÕ¿Oð¢àkoVý?µ·«~ŸáEÀ>ÖÞ­ú…koVý?‹€}­½[ôÿ >ÖÞ­ú…û[z·éþ}­½[ôÿ .ö¶õoÓü(û[z·éþ\ímêß§øQö¶õoÓü(¸ÚÛÕ¿Oð£ímêß§øQp÷Ôƒ“Ç* @pš×ü…îߪU@z\¿|º¿ÈV~¡+£Û¢N WrB¹ ÎJ@G+y:…­ Õ|égÂÇá'$ç€qÆ®ßζjï´¶j¨ã'×÷äÑý³üû]ÿß“E€?¶aÿŸk¿ûòhþÙ‡þ}®ÿïÉ¢ÀÛ0ÿϵßýù4lÃÿ>×÷äÑ`í˜çÚïþüš¹cr—Ð,°†ÚÌT9ƒúŠ,Ÿí/çFÏö—ó¤³ý¥üèÙþÒþtlÿi:6´¿?Ú_Οí/ç@Îéo’GP£ÐÓ¨„Ö¿ä/sþýRªÒåûãýÕþB™REPEPEPEPEPEPEPEcØn/pªÌ ß>vúr}=«D[ïfãý³íþ©¦öaõ³ßf©}¥ÎÂ^yq— .õ òîÏSþp)+MjL»/ ¼y.‰0Êò}øëú ŽæîÒÙÕZï'ÌàΗߟNŸ­0-Ç :+Ç<Ž„IGáúŸZQlÿ[7ýü>ßáH:yRC‰\î|aŸ¯Þ¢ðßüx'ýw—ÿF50/ÑH ÷ ¤PÆ%™Á`¥¶Œ d“øÎݬ^ZÜ*Gìeð,cóÅ2=NÎDfYNÏÌŒ7œd|Üã¦zZ_íQ³.Ë»žcaŽqÏ/ãŠ}”ísj’°±<bEX  :Çüx÷—ùÕêá5¯ù Üÿ¿Tª€ô¹~øÿu¦T€Q@Q@Q@Q@Q@Q@Q@Q@Ö%VI™°¿~Hé@ì{œvúö6o'YÒí®¶<“Æ7FA _èÃó¦–Ÿìîa¼+«ß8W£üñX2ÿgyw°˜×ís‚Î`l.íØËc Éö4=Í¢Éj± ˜ÖYX’ݘ¾ùô4è Äéþ‘ @“y…ýrr@#$Ž9zÆH`‰Ï-+¸ÁìÍ‘ÿ¡/çS‹Ëbǃþ×ÓüE %ÄRIŽUcær{qý~•†ÿãÁ?뼿ú1©~Š@V¹·y$I ‘cPÌ»”©ÆAƒ¿j§u¤Éw"I,г¹f€œ`çäù¾\þ4æÒ3 ² ðmÓ vðNå`HÏL ãߨ¤›H7 <ïnò• ìmÁàFÜ“·¯|Óí¥¿Ùm–Û¶çœc©ÍOH :Çüx÷×ùÕêá5¯ù Üÿ¿Tª€ô¹~øÿu¦T€Q@Q@Q@Q@Q@Q@Q@Q@ƒL¹ŽYšÞüIJÈ\¯” ÷ÍE<6ÒZÍs¨y‘-ÌEŒ(ûý0.jz‰¿‰Ö ’ J,’åJeHǯ<{Uxìµ?-|ÍSçÇ;aÍ }‡Pÿ ¡ÿ¿#ühû¡ÿACÿ~GøÐöCþ‚‡þüñ£ì:‡ýýùã@Øuú ûò?ƬXZ5˜%Üá™·•îXžŸGöK¿ú7ýû}’ïþ‚ ÿ~Åd»ÿ ƒß±GÙ.ÿè ß÷ìPöK¿ú7ýû}’ïþ‚ ÿ~Åd»ÿ ƒß±GÙ.ÿè ß÷ìPdÓç™vKzÌ™,v­ @pš×ü…îߪU@z4׉0f ~aéLûDóÚ?ûèT€}¢ùíýô(ûDóÚ?ûèPöˆ?ç´÷УíÏhÿï¡@Ú ÿžÑÿßB´Aÿ=£ÿ¾…hƒþ{Gÿ} >Ñüöþú}¢ùíýô(ûDóÚ?ûèPöˆ?ç´÷УíÏhÿï¡@Ú ÿžÑÿßB´Aÿ=£ÿ¾…hƒþ{Gÿ} >Ñüöþú}¢ùíýô(ûDóÚ?ûèPöˆ?ç´÷УíÏhÿï¡@Ú ÿžÑÿßB´Aÿ=£ÿ¾…hƒþ{Gÿ} >Ñüöþú}¢ùíýô(ûDóÚ?ûèPöˆ?ç´÷УíÏhÿï¡@Ú ÿžÑÿßB´Aÿ=£ÿ¾…hƒþ{Gÿ} d¯k2…•âu‘Ò€*ß*JKÃ,$²ì`d¾C~óéWâ  4ñ“ŽNáÍ0íÏhÿï¡GÚ ÿžÑÿßBÚ ÿžÑÿßB´Aÿ=£ÿ¾…hƒþ{Gÿ} >Ñüöþú}¢ùíýô(ûDóÚ?ûèPöˆ?ç´÷УíÏhÿï¡@Ú ÿžÑÿßB´Aÿ=£ÿ¾…hƒþ{Gÿ} >Ñüöþú}¢ùíýô(ûDóÚ?ûèP¬u[’ ¿U* õ4”Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ÿÙlibstruts1.2-java-1.2.9/doc/images/how-to/eclipse/developing-eclipse-style24.jpg0000644000175000017500000006205210404045220030117 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„   (1#%(;4>=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀ2¤ÿÚ ?³©ê:„zÌP\¬QDjì$ÿ×®štã(¦Ñ êÌèu}nyeŠ;¥ß†Ç–o˜Oz§NšÝÍ"awâO1Sψ–m£O?—Óó¹)vi­uÍfâa»DÈbIUãhÉþUN”As²äZüñÈRî=é·åؽdãéùÔ¸S] æß¶xˆ)cqP Ýò€1éî(䥨\Ò$†÷YšÙdKè˼aÄ~Zç±C…4í`æö¹ÖÑNû¸Ä€°"žíÔýš9)öi 7zúâ W’0¾þÞÆŸ%>ÁÍ"”ž Õ¢‘£yÀt%HؽE?cÄóÈAâ=Sþ~ýð?ÂcÁÏ!WÄZŸü÷÷Àÿ =Œ;<‡ÂE©ÿÏqÿ| =Œ;;x‡Rÿžãþø{ Í‹ÿ ¥ÿ=Çýð?ÂcÂç¿ðj?óØßcÃçc†¿¨ÿÏaÿ| =Œ; žAý½¨ÿÏqÿ| =Œ;<‡.»¨þ¸ßcÁÏ!·5 ÿ®ÿÇøQìaØ9ä;ûjÿþ{ÿã£ü){(vy ý·ÿ=Gýò(ö0ìòûjÿþ{ûäSö0ì>v/öÍ÷üö÷È¥ìaØ\òûfûþzûäQìaØ9ä8k¸ÿZ?ï‘G±‡`ç£W½ÿž£þù{(vyþÕ¼ÿž£þù{(;í[Ïùê?ï‘G±€sÈpÕ/?ç¯þ:){(vy ý§wÿ=ñÑOÙC°sÈQ©Ý“þ·ÿ{(vy×üôÿÇE/eÃçaý¥uÿ=ä)û( Ž…Ïüôý/eçbBç?ë?AG²ˆs±Âþãûÿ £ÙD9Ø¿n¸þÿè(öQv*ÞÜô{(öv/Û'þÿè(öQ;¶ÏýÿÒeÂçcÅÜßßý(öQv/Úæþ÷éG²ˆs±EÔßßý(öQìì_´ËýÿÒeçb‹‰Oñ~”½”GÎÇ äþõÎ æÅÉýê=”EÎÅóŸzgó°šéc(KlÜ3ùW;jûØ©.£pŒßºO,PÞo9Ÿ»oZ.»Ÿr[Gȹû>×.WvìŒ_ʆ×`±ËxÚMH3u1)ý(’³°-Q·«éV2]µÅij#LBŒ8ýj¨ÔiZÁÊT¶Ð4ËŒù7$ >Ùâ©V’V°œMM‚I7\݆ˆnbžŸN¸§íåØ\ˆ’ÛÚlª&‚kŒd€Áñý(öòDé|rü——(êÛFdÇ#ð¥í¥Ø|ˆoö>– ·Û§g'ÍéúQíåØ\ˆ’OXA”Ïr@ä8õúSöòDF4½3zwrÄüØó>ïÉâ—·—`äBÿdé„ñypr3üõǽ?o.ÁȉSú|«½e™Á?{x9ý){y³D ¤iÄò®î›ÌSöòf‡céö—u;Çø{Ñíä̓DÒç8Ši¶†Æî@?…/o öhIt}2 6K,¨@ÎK?•ÞAÈ€é:PÜÃ’½@`Oò£ÛÈ=š%‡B°š0ñ¼¥OûCü(öòDE›¥H2&{ÿÖ£ÛÈ=šìí+iapç@lŸåOÛÌ=š'—E±‚##´»G¸ÿ ^ÞAìÐÅÓ4Ó³¸ß÷Fáþ{y³CçÒl­Ó|’J×#ÓéG·{4D,tÏ›÷ïòõëúQí¤ÍK 5Ââvç ,3G·r!óé–6êY]œHôÏô£ÛÈ=š#ŽÓLy$ìÄôù¨öÒf‹CG¶äüèöòf…þǶõ“ó¥íäÍ ý“oêÿÚAìÐdÛú¿çG·{4(Ò­ÇwüèöÒfƒû.ï?çG·{4ÙâÌQí¤Íþ̓Õÿ:=´ƒ‘öt¯ùÑíäÍ ýŸ«þt{i³AýŸ«þt{i³B‹‡vüèöÒf…û ^­ùÑí¤ÍØ¢Ûó£ÛH=šì‘ú·çG¶{4dÕ¿:=´ƒÙ¡E¬c»~t{i³Býš?Îm öh>Ξ¦m öh_!=MÚAìÐy ïKÛH9¾RûÑí¤ˆ_-}èöÒfƒ`÷£ÚÈ=š m>vvß½† o95<ÞEXC¦Û,U²zæ—7X{ÙÆä–i9ëûÃO›È,rž$Pº¡UàÔ W¾£JÇ_sšÀgn ƒÏLÞô€Ža¶$D±¡=@c@ ’É$™¤|ÃwœzzP±Æ°F*ƒqÅB,¡iÛ3òçŠAmj@V3Ž\ЉY6H¨WО?• "û1ò“‘ÏÌzS¿`„mU@¡„9ÅOªF«@€p¤dÓ`G,P9?Þ=8ÇaéNà alÒȹ+÷7=Î(x­ÒLhªHÇÞ4’ÛÇ1̨¬AÀË­E„1o¹Ï-ü°(Ê&Ì**Œž€Ðu´‰cù€eÁcŒŸAîhRÊX×Üî<Ð’ š6‰Šã¡ÁéúPig Dª[¦YøP“ÃçDZˆ ð}>¢€!ŽÆßËÚXpwnçÇA@[Ktaˆ£Ü9“óŠ’h¼å NÜr=8ú{ÐIa²:ƹ^Ÿ1æ€,äó÷x÷ÿëRÉÿg¦zÿõ©€ˆáÆQ‘€ôlÒß7¢þýj@Ow‘ž¿ýj`³À(àT€BØ8%ü €ó³ùÿõ¨¨û×(Q‡¨?ýj`ðá2›lÿõ¨ß7¢þýj@7¢þýj>oEüÿúÔ|Þ‹ùÿõ¨ù½óÿëPóz/çÿÖ æô_Ïÿ­@Í迟ÿZ€›Ñ?þµ7¢þýj>oEüÿúÔ|Þ‹ùÿõ¨ù½óÿëPóz/çÿÖ æô_Ïÿ­@Í迟ÿZ€›Ñ?þµqÞ&ÿ³¸µHÆR<ÌwÿJC*›XH¤€Î²ƒó³œ‚1Óó¢â'ec2¸˜„‚˜o|õ¤?1ŒuŸÖ˜yÞK}(§“4wQ¹ÃÆ™ÀSÈãÞ€-L qíH^! ž€õ¦*¬«*g‚1úP[8$Š@HT@»HüÇר`[Ue•ØÊY[P…¤tVS.®×nÇËq€ó·¿ó¦‰Vóƒ‰H@¸1à`Ÿ\õ¤’8þ?ý–˜·v³\\‡]ÈW€Ùuë׊ÓS´Ç¹ ò ©t’ÉjóÇ\c§ôÍ>Ö‚ئï]ªNvz «amt·-4îW¶3ß^M>þÞiäÚ¹ÚHÁÏ úõ  n£œÚ*E!gw…‡zf•o-¼-ç?ÞbBg;y¡€¾O™s¹TÄSH;õÈú?*¸Xœö4 nèˆß°íâ€"¶ˆÃo`Ò1ËþCðRÒ¢ÍÆX€È‘ژ̻[;‹MQY ý”©S’O\àvàP#X+ ™Ì¤¡ÀÀ>¹ëHV¯=S`E°u' ÷ ‘I~ ÷ü(L~ì‚rqH,Ê€†%‰æ˜êçP€ò:µ‘ëH#Ö€ Z2=hÈõ #Ö€ Z2=hÈõ #Ö€ Z2=hÈõ #Ö€ Z2=hÈõ ;Äßòo÷©×\»¤€$Jùë– Î F,¤¼8Ç¡  ®\ßñê£{( Np2x­$¡îŒå±Ö¿ymu$\£,œ‚H­cF2W¹››NÃSÄwn@©“Ò«ØG¸½£âÒö+¸{FH·¬„~”{Ü=£.Øÿý?Âb»‡´d‚sÇËü(ö+¸{F`Ú=Oä?—(sÁê!þ¬;‹°zþƒü(°\6Sùð¢ÁpØ=Oä?ÂÃ`õ?ÿ 6Sùð¤1’´P¡yj“Ó§å@ ܤ‘ôá@rÀga@…*¶çŽ´²Å _6e{ì\¦rxôõQ‹–À݇BñMæys,ž[mm pi8µ¸&™&Áê!þ®XƧ àCŠo&s8Aè3@òÏ÷¿AEÀ<³ýïÐQp,ÿ{ô\Ë?ÞýòÏ÷¿AEÀ<³ýïÐQp,ÿ{ô\Ë?ÞýòÏ÷¿AEÀ<³ýïÐQp,ÿ{ô\‘JÆÌ è(‘ñÝ©çÖ5?¥0;)T™27:lR26®0{œ“œðhŸ~¥ö9­ÆÎZVuœ8 =+yFw¿à%)(òô*¶­yîé§0 A˜01ê=kXÎV¹›‹l‘ô­j@›ì #9Ë›8÷öý¤Ì\²$M7\P Y°ÇøÒç‡på‘*ØëaJýŒ€zàýhç§Ü9d@š¦6úSuaÜ\’%.¢?åÑÿJ=¬{‡#ºF 1þ‹'éGµpäd«¥_ÿÏKÚǸr2A¦^³?åGµˆr2UÓ¯ü»¿åKÚG¸r1ëav?åÝÿ*=¤C‘’‹;ž3þT{H‡#$·ÿ©ÊiäcÄþ¦OÊ—´päbùÏü¨ö‘FDßóÅÿ*\ñ#È›þx¿åGÎ}‡qîFo5E,prp:ЩɻXWõ³ç(ÁÁ⛥5Ð.‰ær‚UÞ gœŠNJöÆý®¡‹Sа#¶sÏn:ÓörØWµÛg|yÆ~ðúÒösìívû¶ùñçÓp£ÙÏ{Ñö…®ù£ @úçÓÖ«ØÏ°]}ªßho><û…O³žÖ [ëRªÞ|c#8,õ¦éM;X.…û]·¿‘‘ó ^Î}‚äÚVœ~ô`ôl~u^Æ}‚èÞ[ƒ”:r[ ¸}ª çGƒßp£Ù˰î0ßZ…ÏŸÏL04ý”û è_¶ÛçjûÇüæe>Áq‘ê6²ºªHIb@ùHiº3Š»At#jvˆX4¤m¤m=rGô4Õ dCþÝoµI” ÙëÛëéÐÔû)ö Ž7vËÖxÆ?Ú½œûÉDŒ‚AÏ5-5¸ÇR$qláFNh"‘e]3µ†FF(Ž©¼íTINGXñÇçH šNèõ;§•0è¸ Œþ”ÀØóSûÔy©ýê<Ôþõjz€5?½@šŸÞ ÍOïPæ§÷¨óSûÔy©ýêż†â[ã:,ûTB6{‘Hc±à ±àýq@—ˆä"?ë’*`u—Ó$¼’˼.21ÐVr—*¹I-nì6)!pþH;UA=:xãüóZ¸¸¤É¾¤Â[6¶F’'Ü6€¥É¸ü¨X©-N§ƒ|Ö¸ï#Oa™!‰ŠŒä™úf´X¹£7†zØ{(¤22†R¸^‡Ž¿–*^%ÚÌk &*ÍhDd—c|§-ž˜÷©úýûê²èÅhm bT…Ë+©Ú[øïÚ«ë3± ‡½fÄìäWq îÛ°ç¦9ã4–"M,3‹ a³÷¼4„–Úùô=¯¬Í$®Lhs^ÃÄöM)˜G.AäqÏãQíݬ7†š4–r[¼mçªàçßJqÄ8¾`ú¬Þ„A¬Sç6íûÎ '‘üèúÔìŠú£Õ&>OìøÐâ eÇ9ãœþ¿7ŠŸqG &Æ…Ó•v¥ÛŒ¯Z[žâú¬…'M¶ÎB ôÇùäâ—Ö§½Æ°’Ñ;"´íû<žZ€¼1#“þ ÷§õ©ì/«{·¸ éÉ.|‡¯QÏ)±1}]ïq1c<…ž'$òxíïÇ'õ4G$¬‚Xi!Ñý…1Š@wÉàdv¤± a¤†ìø£ÞRN~özœ‚9‰¦ñ2`°²nÈA%„0ŠBC!Îy={óÿÖ¤ñ2h¥„•ÃýÄU p§¨ä:ŸåúSúÌïr~ªÖŒhOØÊ‘ÀnôëíOësÔ>«+Ù a,D2&1ÀëŠ*oV/«JöBŸ°D0O›å<ƒÁõã ü©Kú΋ Áä¿ üè°X<—ô ’þƒó¢Á`ò_Ð~tX,Kú΋ƒÉAùÑ`°y/è?:,%ýçE‚Áä¿ üè°Xi8=© £qþ®_¡ 7Ä?òõÉ?•P}éµòÞ§elŒœsþµM“уI«1–ñ%½˜¸äƒøU6º!èh,·@¶«Ó©*.û<Öò#ûMÙ RÐ ÈÇNßç¯.Åû:J÷‘nß+ ¡U$r1õªZîsÏÝøY>Åþèüª¬gv.Ñè( ±¨è£ò .Ƙc8ÌjqÓŠVCS’ê;jÿtzô¦+°Ø¸ÆÑLQ`»Fƒ‹ùR°ùŸqv¯ ü©ŠìAHEõ8¥aó=®.Õþèü©ŠìF@€m½Ä 9¹úQ`æ}ÃËN>EãÚ•‡Ìû‹±q£:S°®À*Œá@ϵvÚ¸ÔX9˜žZnݱwcÅ+3µ®Tyû‹ÇµCæ—qv/÷G\ô¦+°Ø¸#hÁê1@]†ÅþèãÚ€»F€’rzñÖ•‡Ìû€ÆÅü¨°s>âì_îʘ®Ãjÿt~TØl_îÊ€» «œàgרl@sµsô¢ÁÌÃbà £§Ø»G  .ÄØ£QÇN:P`±¢•@ú ,MîU~êômîE?ÞJLEh&¡+1 ¢I'É¡lÜB:ÍÏ?xSLðƒƒ*qË´$ÑI’£g¦}P@PWûíõ¤À¡qþ®_¡¤âù¯ýrOåTW¨Ú´îŽ›wÆÙ†AúŠ@6ÚÜÚÛyláŽXœ Áé@Q­ËÆŒ—I°HlöúTkÜënšvqÔ‘–í‚2MÜÇ^ õéOÞ!:Jé¡'H=† űŸ—‘ùäÑgmÆ¥ÛQþ®FÉpJ·ÚâëÇÍëøúékÜ´é­9Y$¢çÏ,³ÇŽ Ÿoþ·ó¦ïr"éòÙ«Y$ŽRÏw GÐøçJWiî7¸ÙEÜi¶¹\®†\Ç·çEŸFR©MüQ؛ɺ؀N É=Çíëšv}ÌùéÝè6hn™™Rä(làg‘ÏÓÒ†ŸqÂtÒ»ŽÃ¥Žä¸):¢ã¦{ãéëCO¸£*ij®2Hg2»ÅrªXàe³øPÓèÊŒád¥fŽà²*ÎÀÉÆNlœPÓî(J 6ã¡‹y){˜À'–ÇôúÒ|Ë©qt¤ì¢Áa¹–BßjFÁÊínŸ†=è³}AΜU¹MÝ´nÆ}«C‘Úú @‚€ ( € ( € ( € ( € ( gûÃéII`YïåGg `ÚBœdEûËÊòñ&6íÎîqœõúÓdÒíã(T¾P‚>oLÿ‰üèö¶)nÄ©cè9ÿÀ  TP@P@_ï·Ö“…Çú¹~†oˆä"?ë’* :ÛÂC0É)Ži‹(–2v‘€rÐÐȶDrîU]¬rOÖ³÷w=ë&â<Áhìç2 •U#¨‚‹DJ¥TšµÉ_ì‹Â× $ýS|¶µÈµræQÔfË•ód=N{þ¿éJÑ+š¶öD’¬2©¸–`TŠF98ëõ¦ìõ".q|‹Ì„Gc:—YÌ 9Ïò¥h³G*ÐvkB[˜ iQæiˆÁp?úÔÚ]H§)¤ÔFÄ–*-Á`ACß©¤¹{ŽN³µâ* (¤2‰ˆÛÏ#ŸÂŸºµud¹l@ÌFžd®œ tÏåShšóU»²&°ÇÏ;©,1ŒôÅWº‘šöÎW°®,[néNUvço×ÛÜÑî‰:ËeýHik%¶òVá¶¡Üp2sKݵ®4ª¹ó8îIÖÖ÷(g ä,:“úŠi¤Éœ*N)ö,û`ÁL 22 W22ö-{ÛaÁÁ9*AëŠ9½ŒÅKØà?~2=?ÄQÌÑšè {nɻ̟›Ž?È£™£4í`7¶á™FÞ9úÑ̃ØÔ½¬5µ e\ù™ü Èj…Fía~ßnT2Èw tÿ8£™°ìÐ Ø “¼Œdà‚?ÏJ9§k öÛp…Ì¡@ÆsÅÈ=Œïd¯-Ð Òžš9*3{!­¨[.?yÁ8ΟΎtRÃÔ}[èB›ˆÆ0qÃgÒŽd'Bi\!¾†gÚ„ž½½(RL%FPW`×°|’@àôs!*3ìò%—Ë!Áß­Ë`TdÕÇIum‡$s·§|ýi¹$(Ò”–„m¨Û+0߸öÒçE¬=F¶öÈ0ÿ”®àpqG2'ØÏ°†ö‘‘Ø©SŒ‘Á£™ØÍ¤Ð争ö|Ø.ÅTŒ‘O™éI_ÈE½·c Ï´¹Ý®ƒáž)Á1>à;M4ö&tå‰ Ÿï¥ ‚½·ü„¤ÿ®Cùš©€P@P@PWûíõ¤À¡qþ®_¡¤âù¯ýrOåTW{3¥Ìq¢¡üõ¤G'›æþïj)!r¸ÏËÍ\Y-¶Æžî+;®Ço,õ÷Ä7á6Z€ŸÃü(æ]Šö2Öò-ÅAƒfGC×#úU$™„¥:oFKöKùä¿•W*3ö³î£~Éså/LQʇígÜSkAØ2E¨=¬û€µ€Kƒ×Š9P{Y÷má\â5zvô¢ÈN¤ŸQ ¬ 0bR>”r¡ª³]D6vå·—8ÇN)r¡ûiÚײAœùc¦)ò¡{Y÷ì°mÛå.3œbŽTÖ{ÜQoR¾XÁÆ ,…í%{ÜCk ˜—ƒž”r¡ª³]F‹+pIò—“Ÿ¥.T?m>âý’ñ)úÓåBö³î*Ú@„‰F=¨Y½Ø}–ùäœô£•µŸpû49Ï–¹¢È^Ò{\V‚&}Í–õ¢Èä•“ö;l“ä§>Ô¹Q^Ú§qæÞÁ`S²%T’ê o Z5$úŠ,T’Ù€·…vâ06¯µ@êIßQÖéþ4r¡º³}GE pçË@¹ëŠKbe9Kv2¼>”2Jößò“þ¹æh@^¦@P@P@_ï·Ö“…Çú¹~†oˆä"?ë’* :ËÛhfRr‡€Z@8F"‹j’ÀgŽ{Õ¯¶¦ÕP1É8ãõ©÷Ž›Q]G³Þ ¥!\lÉ{ó£ÞTº¿ø`Íç–§bù™ÉÆ0FÞ}h÷ƒ÷WßOø?ä1›PÜEÀí‘ÏëG¼RT-¸÷{Ï<ùQŸí}(¼¯¡1._yê÷‚cæF¾XÇ'ó§y\N4¹tz‘¨Æ>R²8ƧÞF‹Ø=ô%ÍèDùT¶~lc§ýz~ñ©]‰1¾ËÕ0s´ñǾ´ß7AER·¼2A|²;G†Â1ŠO›¡Qö-%!f7Ÿ&Åd `œ÷õ¡ó *–·eÔ‰y=°­‘J4;‡üLBJª¨<ŽZ=àýÂEå$¨$`úUœÏÈZP@P@P@P@P@C?ÞJL ößò“þ¹æh@^¦@P@P@$eÙ8Á4€Ï•ƒÀì§*ÊH?… 8ÿÿÈD×$þU@vP‰IÁÃÁ4€†^(O˜û²O·Ë@íá‰Ñ7§fÁ•Î÷¬Ò]Ý9É]ÊÞ)vÂ4àŽOZ-æ%5Ö:²WˆIÆnœ“¿9<ñÅU®­rÜdåÊGöDªÞ.Az~Óò¥ËæWµ{¸ ?—+³É0neHÿ˜Cš)$®2KœûBgxn¿(ã¦3IÅw*5ä´åéó$’1,ªév©´ ã½}³M«õ"2qVq¸±ÇµNëýÀ©/úõ¡/0”®ô€ÅÙêíw¼ÀOùÅ=Æï(´£a<†Ø¡ï€éœ1þy¢ÞcçWv ‰ùkÃÎîyõ÷¢Ý.O;½ùtÑÇ#F~Ö…àî ñžzÿµE—q©I'îéÿ þB´H»\£¸mÙ~O=(µÕ®%7s¨ÙZÄ–ï!3+n<ŒýÞœj¤¬gRNihOçÃÿ=SþúîŒù%ØAq MÂEÇÖ‹ ör½¬âÛD©ŸLÑtœ–¶fتȤƒŒÞ‹¡8I+´/›3æ&=w .ƒ’]†µÄ* 2§í .†©ÍôܬŠd\¾@æ‹¡ªsi»lu 6Ö‘sŒÑÌR›Õ!í,jpÒ(>„ÑtJŒžÈŒÝBI~dphæE{)íaæx‚†.0FAÿ?Z.‰ä–ÖÜB»s*|Ý9¢èjœß@ $\¾´]§$íaæ* ‹óAÏ¢è9½áò Ëü+?tîýóMHöØUó+ àvÇ_éTìgS{y"Y*¤»]Ý$õéœþU)GrÛ¬Ûõ½„ÝbŒÙQÉTO·˜%ŒAÚN3Ôç­¨y±¿ÙöþYŒ) F0 ˆXî!Ómò0 `Œõÿ8¥È‡õ™€Ó­Ô`ЯøÓäBx‰½Eu¸mÀ6ï]Ôr úÄíaÏe ’X1'®ZŽTJ­5°(Š¢üØO»ót£•¶•Ûî9í"tT íŒÛÓô£•«$îFÚu»8|0#ѨäE,DÒ°©ao2*‚y¡E!:óníŽ6P• A {ûæŽT%ZiÝ ö6ºá¶¸ÁühåCöóº}„{Ã8'g§£•¯4¬‡Ge Sy¨lc¯jRw«JQåc~Á#!ŽÑÏJ9Pý¼ÆeÛ` ØÎ2zsš\ˆ¿­TèX†‡ˆø\`O󚤬c9¹îIL€ gûÃéI^ÛþBR×!üÍ ÔÀ( € ( € (.óýd¿ )Åÿ äÿ®#ùP)âù¯ýrOåLÎtY VÎ=‰©jêÃNÎèc!EÇÍ1†'ÐЕ•€³Ü*"›4ÜTÀt©Mö:åm»LâE*d #í8'ò¢ï°*qwjd²I'ÙÕ’ÛçÜFÍ™ÿõv¦Û¶ÄF1æ³–ž¤Eîƒö%ÈÆpƒü}¿ZZö.пÆI+“)6ðÅ*ŒeÇ$uÏô¦Þºû¾ûh†G» Ym£ ¸¼³’1×/›±¤U+Y˧riäJª-Dˆ®Ã×·n;Õ6ﱜ#Vù¬Â9¥pwYíÂåAûv¡7ØR„VÓd‘çíB¨ÎX®¥wØb£¤ˆÅÌ®ªËeœÎÓÓòéJï±~Î)´æ?̘¡fµRKWiÎ1Å;¾ÄrÆöR ^RÈEª²íäç¿Ëó¡ß°â£gïZ ”»Z«‹EY7}Ï/w´žÛ6S·6ž¤Ö»äó`Tü§f7{Óš"¥’\¬¶`Uœá@P@P@P@P@P@Ï÷‡Ò“½·ü„¤ÿ®Cùš©€P@P@P]çúÉ@S‹þAÉÿ\‡ò SÄ?ò_úäŸÊ˜…Þý¬c@ìv“ŒÑ›³v*5® 8ÁÎ=©¶›ÐKcVQ)¶Ä,˜&¥ÞÚSqR÷¶!Ùyä IWxÎæ8=þ•6•y©s;­¥&P@lüŒØÿ =áþå4Æ*j%P—QýáÆ•ðÛ¡®ƒ Ží]H•^,Æ„¤)Ê“OK1w¡Y”Œu$súQišõB¢^ M©"ãkgµõ„Ý.{µ î‚È`I@Î6œuéëE˜9Sº²$wŹ™7Œ~cŠMHq•m¨ÆŠì³ù— ±îÆFGOj-.å)R²´u'?jXÔ9'œŽOnÔõ3^Í·e¡G¨ bPrzqÇéô¥i¥C°E ú4ëŽOLúúД‚S¢öD¥.v©,7Æw`g×ު̅*w o¶… 'B¤ã¨÷ïoçSïw5^Æöå¯×Ÿ= œ‘ß=úÔ%!Nt_A 7è&RTž¼÷ÍsÑ},ZPÆPpqëÚ‹H¨ma.S%n“Í,¹ Ü=(³]A:oxè*­ÛåΤ“ž ã§±§ïtbn’Þ$’‹± ì9l½Çj5ˆ²æWÞ䙥 ?º§oòÿ”ZAÍC°ãâ Å0,ÎIÝÏ©Ú] S¤þ$(Šð0\.ìœN3Ïj-!9R¶ÂºÝ˜T+ ûºð8Áÿë=ë :JZì&Ëì&eBA¸üÿϰ¢Òèë ²CpÙÕù‰9éŠaÓ] mRXÑ„­¸äsøSŠkr*Ê-û¤ÕFD3ýáô¤À¯mÿ!)?ëþf„ê`P@P@-•³ÊìС$œ’)Ze ª€)Ô€ã¼Cÿ!ÿ®Iüª€ë5)R(Ÿ221û¤fœä=ˆíeó¢v•Ás×¥k06îUȉ$1¦[Ò”¶4¤Úši]•š;cm7PnÁéžyÿõÔY[s¡J¢›÷u*/&ã7;c-ɧ¦h²³Ô9åÍwR5‚ßly¼äÓ£~ÿ­+.å¹ÎîÐo·œÁWç ÓžüSI_FDåS•©GA¢+R€‹’£ c·ù?­+.åsÔ¿Â=b€Ø·,±ïCNÊÛ’ç5SXê"Gj`“_,oùsÇùæ„9Tººê2HmD„µÓ¿•ŽGåÚ“K¹QKiž]šÊKNÎÁ‡Ê?ˆñÛ½÷+š«Ž‘-4q‹E{‹pÀwª²±Š”¹öԋɵòT}°‘†ÝJÊÛ—ÏS›á%’8vÄà.GÊê)´»‘Ní¨}žÛpU»9Sów<ÿžµ6]Í}¥K]Ä"ŽÚ%.I`Já¹Ï‡ãBIu¥RkXŽH-‘ ër0DZþ컉ΣI¨ŠŒmw;ŽFN2F1BKdÉ”å~w‰±‹bݶF^ŸçÊ‹.å9ÔNî ëjÿ´gxÏtiÜ©·.ÄÖÉò³à`•Àç&œlgUI­zjÎ` € ( € ( € ( € †¼>”˜í¿ä%'ýrÌЀ½L€ ( € ( €*¿ßo­& õrý 8ßÿÈEë’* ;gU%˲ª¨É&’M½¬¬[jáA8>¼§¾¬HÖºhÖ̴˹¢V¶¦ÔTœÒŽåc5¿Ùâ/nH9Ú ôç§ÿZ¦êÛ¨O™¥! Úî ÆÇ ó)oåéEã¨ÔjÞ)2%šÄ,x?)ÝÓñÏÿª•âS…k½¯ëï&Š[v™@QÈ?6xšjû(MEÚZ 3Zàn·9ÇLç‘úRºìW%N’þ¿¯óKiö2ï ?2ƒNñ°¹jûK&>!“Ì Ï`3cwÊ„×beÆ×wÔ…æµLæÛ2à62HÉ¥uØÑB£ûZI%œ@Y°ƒÈôïíøSn(˜Æ¬Õ®'ŸÞm˜E×òNO¿±¢ë°rNúK_ø`lûb¤d®7tüZ4ÚÁj‹Þæ® P‚H “nF gð¥t5Nnözymc‰dhOÌ>`#ÚÒ%F¤›Š`Óz'Ê[8$ã¿ùö£Ý U³wÏÌßgVp '~sÈ¥uØj2ÑshZ¶†& c– àŸZ´‘IÉ{·º–Vè0"ãþ&ŽTK­7Ô_²A´/–0:rhåBö³½î*[EŠFq“Œãì:’jÌ–™˜P@P@P@P@C?ÞJL ößò“þ¹æh@^¦@P@P@_ï·Ö“…Çú¹~†oˆä"?ë’* ;YSxla†9©v"b¥ PªG ;݈ՙ¤K\ÂßÐïm ¦¢ä”ž„&KÁ b5iwdtôïSyX×–—3×A«-ÀIö[®ðÜ|¸õ拽tŒ/ËAk݉‹eõãLÿúé^]Šp£wïŠKÁ"+Ƭœå‡_çM9(Ò³iê7̾ ”¬qÉÇ΋È|´{ŽÞ _õ!¥B?:/+'=ô]±q*…Ê¥@àãžÿ… ›©2T•¹HÌ·¨H1‚ª€—#’qÏJ/$W-'Ô-ä»yæ…Uì9>èN]B¤i%h½Eóo¼¢|„ßéÛùÑy%ï 4·ŒyKË ñyïÏj/ Q¤º‚5ãdÂãdç­ð5Im¨Ã=è@Ín›÷mþ¼R¼»¡FöRБ%»»Iß‘´(ãSNV!Æ—2Qz ç_yYòw§¯?çó¢ò¶Ãä£{s†ì8«é€ÏZ7@²·¼Ijn70ŸÓúÓú‘UBÞéf¨Ä( € ( € ( € ( € (þðúR`QK˜àÕHHÝr@󚎣l;Ÿ ?!ã$Žxõ˜C:L2›ºÊ‘Ôg½I@P@PWûíõ¤À¡qþ®_¡¤âùúäŸÊ¨£W´ûm»B$ÙHhKagc¸“Ì(Oàh½:»Ú•ŽO-ˆ7¥bé´¤›W+ù2xÕ.€ÆrÀõæ¦ÎÛ›óÇ™·òî s(¸UË|­»$…}ÅÍâùF,7;P›ÅÎữ¯?ç¬û–çNîÐoÑ£º ƒ?&r ¦—fLæ¬ÓŽ£D2l/Üqóg4¬ûÎ7Ö#’¾Ç±.‡l?§¥;;n'8ûK¸„qù~a{•²IÀõüóBVê•íhÛQžT€nŽìya0ª9•ŸqóÅè㨶ñKˆòÝcÀRÜgúô¡&·a9FI¨ÄÚã÷„` Êó¢Ï¸:é~Îè¼]íTtj-æÑ7ðê#BËÀºQ3 ïÇ?áE¼ÁM?³¢ìóOÛXóÍ}Çí#ü‚HF!ºHK7;}€ý ÉŽ.ÿnï#æïjdàoëþY÷œVޤ²¤²\—*€H·4Úw܈Ê*:Æâ¬Rå‹\«¡‚xÎ(³îQÒѳ!6Æ7V3§ ¿ÞÇ×+[©~Ó™[”·ñ,J¦eb«‚G|µI«JrnÄã‘‘TdP@P@P@P@Ï÷‡Ò“6IaSÛ4&RaÊ€èO­K‹ î¶*†,|Ÿ}—v0íŸ~ôÀ·ÜäÙ!iNJ‚ă×4v€ ( € (  ¯÷ÛëIBãý\¿CH7Ä?òõÉ?•P]ÿÚ„›(Õ¤“œp.ý )¨·ï»" *õ¯l H :1R@ÆzÓ!Û¡¿t"6DLÅcÀÉiJÖÔÒ‹’šåܪÂÌÚÅ¿xvÏøâ§Ý±ºuTÝ·¯“>ù\FO#ÇøÑefÕ9£e©ÇbcͰ?/On1JÑ-ʶº"H›N…K¬¼àÓÞšå¹uT]ö¶Ä¨$ȼp1Ûþ˜¥î•zÉÛOëþ¡l͉˺ŞFz~í„ÝUSmEO²ySybM¢5Ü:dcÒtOÚÝ_¸×M:uÈÛíKÝ){TûŽ·[0ÑùC– t<ûzfšåè)º¶|ÖK˹ŸïÇûöúÑî‰:ÚXc%Né6œ×§=qKݱIÖæéøø#×ìªX |míÓÿZzý£³~D&;)1#ˆÇ_—©íÚ¦Ñ4R­w¦£ÔÙª‚ªåyÂŒã#?©§î’ý«zÿ_Ö‚²’1‘"—ƒúQî±Þ¬Y$/h÷-!ÏË€½2•5ËЉ*ŸjÂyVPÈѳ¸là“ôÒ‹Eh>jÒJI'Ù„dFÒí ÇÔhKö—Õoÿ…’Þ9Ê|ªÙu韭-¢”ä·F…´«$C` .ÐúÑ;œ•"ã-Ii™…P@P@P@ ÿx})0+[¨:›’ÄCÜšŠ!9(§ŒtíLbd«‘ÓŠZ( € ( €*¿ßo­& õrý 8ßÿÈEë’* ;)åhßlhÜð Ço^Ô’¸\Œ9!”¢¦?º:ðjbÛl¹¤­cZá‚Zbó@äõª–ä¯4“±\͈#cfŽNÐ>ï?J›é±·'¼×8ß6 ³‘f·á—®}s‘Å+­t+–W½b?5RUì+°”mäýºÿœÒ¿‘\­¦ùõ'ŠurŬöm\ƒŒçÛ¥R~FrƒV´ÆÅ(‘е’¢¶rHÉãð¤ŸåTí;3¸6 WãyúQ"”þ1Ær©¼Øvàwî==¨¿‘>ÎîÜâ´¡âV’×,A' ŒgðôëEôØJm) ŠÎ¡¬¶¹Î3Žzt¦ŸJ--'q‘ÎdeÿA¬ØbÃÿ­I?!Ê¿lðìš2‡6Â0?/Aü¨ù GOŒXç%OúÕ=Gù'ä)S³øÈ|Òî§û?äL€6ð;ž)_ÈÓ–É®}Xÿ1̇6Jg8^}¹§"yR_#\y™ÿB,¹8=ð;ô¢þDª|¿lXdVˆ·Ø‚@U#® iù qiÛžã<å.H´ ÈØgöè1ŠWò+‘ÛâÏm¹6JÛ²X…Æî3éEü‡È¯¤Å»Žž9ãäþ_È\ºÛœH.ævÍ•NOB9ÿõb…'Ø'JeýÃ’G{q’ÒÛ˜ì_óíMIõDÊŒ6Œµ·L?dnõü(æ}…ì!{s7Ž Y 1ll=qÍÚ¨®k\O¶É„&ÕÆâ^™£™ö±Ž¾ðy(S'‡#ð£™Q·ÔžÚW6üqŽ@Çj¤îeR*6±530 € ( € (þðúR`gùÒE©þî2ù‹Ô§4 ooX•û3 8ùÂ1ÀÏ'NÔÀs^Þ$~ÈÌ à¶ÓÏùþ´‘Þ]¬a¥„’UØ(è(ÅÔ— 3Æ œ¤ŸQèç@¨ € (  ¯÷ÛëIBãý\¿CH7Ä?òõÉ?•PV¥.ÈÓJÑà•wϧœ„É'¹/–bP’v®Ñ‘ØI»»•kòù¿fýÆ<Ì f“½´.Ÿ/7¿±‚(°ÊÌ ßÓŸ¥O¼kû«¿À#[Á¦æ äcŽyý(\“¥} _oÉš?7²ûsÚ•¤kz6ÛBb·{eÜø,¸žyþTõ"ôöêæE 7t#ž¸ÿ>Ô½â¯C°éý˜9xäù¦Ô…QKa‹ö{°dþ=éZ]Êr£Ò:ŽjFYÈî9þT>aEоÑo„xÞ¬GFÈ úfšæ%º7ØÔ0>d'èð^€…o·/ï6Øãó£Þtm°‹öÝÍækžÇéG¼Ùio!ûo‚ýô'°Ï¿õü¨÷‰½ìFû`Ý"lxƒ×ŸZ^ñw£}¢*_dôlž;ò?1G¼7*;4=üFKIHÎO@y?à)ûÄ·Fú!%Žñ”:ΪÁFGbA9¡©eI;4/”UàwÆ;R÷‡z/D‡B·FáZFÈèpxïÿÖ¦¯}I“§Ëh—jÎ`$ dã=(  c'é@€@ê@ ,ƒ}ÒÐÐ6šÜ(P@P@P3ýáô¤ÀÏf/˜Û¦æòÆG2}M‰5mòcwa$•îÏ<ÏÀ¹hóº“p»NŒcœsÜ÷  è € ( € ªÿ}¾´˜.?ÕËô4€ã|Cÿ!ÿ®Iüª€ì®0#nâÛ¡­${q(¶_80›;›qïÞ„ÛÕ‚mêѵp¡ìÊ´¾PÀËzQ-);M4®WX¢1BçhRvŸïÔYYjnå.i^! Q,$ ½ÊÜsß?äSI[qJRrø«ŒVÙÛöûƒ¿Têͼ˜ŒcŽž´$Z˜E/0.ŒÉù}s@­VåH»€HÇ-ÎOO¥X € ( €*¿ßo­& õrý 8ßÿÈD×$þU@v¯÷ÍHÉÓóþFšJèĶDÎ¥£ÀÈiJÖÔÖŠ“šäܪòÚ­¼Nñ8A¸¨‘ÏÖ¦êÆê5ÚOQñ½š²D±²ç¦sŽ9çŸ\йv£U§&ÿ¦@’Ø´{M»ñ‚qÐÏ߯Ǝ5“¿1+Kh±gË«¯!Nqí×ëNñ3PªÞëB’ÑÛÛ0s‚0}Gœõæ•ãÕ¸ÕKÝ–€âÝdû;¹`[nÿ¹§j4ÞÁ6ùy­òÜF’ÒB¡`”F9cœ9'N)hÁF¬wjä¾eœ“nXpq’ÙÇN Uãr9j¨Ù°fë“ €;ã·¯Óó£Ý UZ] Ž[<»+¶@Æ@ëÆOëI8ö*P«ÖZ 3[wÚH ]À<çÿÕúÒºìW%N’$Yí*ð:’yº€HéÞ$rÕ½Ó ö‰²W‰³ γ‚?¼Ñî­BÕ]âžÄŠöeÂNOÌ7p:ýiû¤5U+܇u¶ mÄ®Xç8çÚ–-SnbÜVK,„OV'‘ÅRŠf«8»&)Ó­øÂ•çðiò!}b áalhŒc©éÖŽT/oR÷¸‹an#ØÊ[ŘòO®hå@ëÎ÷Lq²€Œlï‘ÉâŽT/m>ã~ÁkœùC=ŽOOJ9ý½NãšÊê„õþ#ÞŽT%ZkfÊÝX0sÔõ£•­6­q¦ÂÜ€6‘ƒœ†9£• W˜­em>Uè2p?Î(åBU¦ºŽp  pH£•¶­p‘)\ùqŒ±=9ÿÊŸ*«'rjfa@P@ ÿx})0+ÛÈJOúä?™¡z˜P@P@U¾ßZL ë—eÆ•ÊQm\ãüCÿ!ÿ\“ùUv¯÷ÍHÉÓóþFšRftµÌqùŒÂžô=´.šNIIØ€½ÈŠ3öuiréÏùüªuìl£O™®mídÛnѰ88÷¢ï°{8&¯-MuæàÛŽ0FßÓÿ¯Jîû¡O–üÚ¢H$œ++Ú…U_”(ïM7؉ƺE-Ó²mÕSÀ ž”&ú ”i¤ùe¨¾mÎðÝpzäc]ö%;k! ·^J¶Lå€éÆ‹»l5|Í9h3ué~å@Înô½â­JÛó®Ø-”#Ûšw—by)/´*Kpë'›j£ísíBoªi®Y $×\…·_•zã¾qÇáÍ—`Œ)õÃ%ædŒ…€úõé^E(ÒÒï×úü=Ò+1·NvqÓž>”]öZn˚ÚkÅ<[#|ØÏN=w—a(RhYež5B–ᜮY@ããS§Ö"\Ãpc`.Ô'9,{sý1CO¸éÎøu Ç“t»6ŽsžÔYÛpS§Íðêž´Y÷zÊ6Xç+ }©ÆH$òƆŸqÆP»|º û4’I ûQ$gô$ gð­.Wܯi¥îŒXeGïWr| g¡#ŠV}Ês‹ZCr&è’MÐRI8éUgÜËžžÜ¿×PT¸Š <Ë¥ÜF÷O¥inP”•¢#ÇsµH»UrOÓéEŸq©S¿Â$Üýï´*€0>nçð¡§Ü#:{r€µ¹ÜÚ•<ú¶zŸåùRå}ÇíiÛáÖS:¾ëœ±Sž:óG+î5Z)«G@X¦FY^ñœÉàõ¢Ï{ƒ”ZåQä]ÍØ ·õÏøS³îO=/å¤ñÛó‚û‡ÌONGÿ^RÜIÂSÒ: ãÈVûbG?ÿª–¶Ü¯sšÜ-»+oiÀ‡Vê}(kÌ#Q5eݳ¯£ÌV*0H=êÖÆæzî£ó¦E˜Ñ"*du¥påi^‡RH 8÷§påa½yù‡ž”˜¹¢€°Ó"Ú]AôÍ+•ï`IRLì`Øô¡;ƒ‹Žã©’C?ÞJL Öì«©>âî‡_©¡u$G8F”Àiž ÅK¨ íÁ=éò±\>Ѽ^A#è:ÑÊÂèSqÇQŸ¥M£ctê©»-F˜­|©Œ“‘qü8ǧnh²°Ôª]YjFc³7 ûÙo~_­+Få©UäÛúþºA—ï<©ÜüŸ7°ü©¥†s•]9yv‚4ß3%8ÏvïÚ‹D9ªÝÙtüäO9+¨õ#¯OóøÒj%ÆUú!.RÃa-#€ ù@ÆNO·ÔPÔB›­}­——“$ƒåmÇúú¨´D¥ZûÙgäDZG1î8ã<þTíÍW™ÙjF±éÙÊùÚpíϵ+D·*ý‰->ÙŽWóp½09ÏjiFä9UönëA v9]ò¿CŒ®;}=9ýh´F¥[¢Ëj!Œy’JF#¯~¸£K :œÏEr–”Z(—*ÒÝ%“Ê$y¤ ä~¨´AʪVjÈkCdƒ ,¤†ÎÜgŸÊ‹Djuž©!Þ]“ ,Œ»€ ää{}(´I欞¨Ym¬VO.I[?ŸOzc°F¥f¹’/ØÚ'fòãùŠÓ?‡zo–µRZjȶØîRŒù,JŽp?úÔ½ÒïZÖeÁg”U‚¹·l…_*9ý³æ»[ þÍ‡ËØþ¹÷Ïùú \ˆY•ïbO±Dz– ÆHïŠ|¨Ÿm+YŽ‚ÜBÌÁ‰ÈïõÏõ¦•‰Nebjfd3ýáô¤À£˜¿´Mœy@ñžÄš¨¦öYŠ[xÚ]Š®K'?â)ò±] 'Ù ¬Ûqnylg¥Ræ°´"[Â0ûÇ s–f”†ù°(™…±gÊç?þª.µÐ|³|«›B6š/´®lÆ?‡×<ñÿÖ¥u}‹P—#´‰¢šþˆTÏN´Ó]Œå +{À²Â#]¶¹Ëà cÖ‹®Àá;»Ë Çž5ÎlwÀzQuØ¥ ?¶3 u–çÉÇî­ ù8>“ÐFš=Ÿñæ7`vÏ8¥uØ%ŒK–Œ¶€±b6ã§¾iÝv'’WiÈbΙì<àž;u¢þE:oùÇ ck¤Siµ¹ÜØÎ:ÿ\sEÕö%ÂJ óGhí~uÀPW9Ï_çE×D>I]'-¡xóh?¼Ã Î(ºì'ïj|-ò 2H|Gßô]v$Ö¼ýYPÉf6ã¦9ïŸÐQ q{9‚̉÷¬‚Ÿ½Œc‘‘üè¿87´ÆKt©m¾;0¡8n8çúŠNVZ"£I¹Ṵ̀ ^[£+1lm¯OñªÓ±“Rº÷ˆüø‰ùmp»±¸Î•×b¹$·Ó>èÆë!¸r1Ïù•üŠTìô˜ç¸·Y[ý·ËÀpIíNë±*œÚø¤VÚ¿c^H?N£ò_ÈZלD™PÿÇQÓ‘ŒÒ¿Üû`'i1مÖf‹®Àá+ë1æhVV‰mw/ªŽØÖÖ%BM)9 $ˆ¬Ÿè¡J¶G^GøÑuØ9d­ï†<)lñèxÇÖ€K»} _f‡qc“î? »#ŸÚNÖ¸áA˜ˆÔëÇZ,ƒž[\O³Å´®Àäâ‹ ö’½îH8È ( €!Ÿï¥&DoØL2 @;d‘U ô%’{$>SFIUé·¨«JOT+­€Oe#‘åüÀàåh´]mî0Ñ3ÈRGçJÍu ¦2i- ‘Ñ¡à ±éþ4Ò“[ƒ²$¶cæx9q:úûSQ—F+ ÙmÉ#*N6þ”ZCº%‹ì·‚Ã’?2ãµKæˆ+1†òÕÂ4ˆs‚ÇÓå’Ø.ní£‘È…•”ƒ<“G+}Bèz›yä—÷@”Éï×ü)j–ᣌ¬ŠÊ0¤dJÎZ2‘Nãý\¿CH7Ä?ò_úäŸÊ¨Õþù©9:~ÈÓ@jLÒ \Á‚øÉâ‡{hiMGšÓØ„›ß%6ì2s»8À5>õ-K™ßa^m”$j7€ÿ=áÚ•ÕØÂoÄêv‚^˜óéKÞ¹_¹åõRC(Qòü¸ÇZ~÷RZ¤Úå>Ü¡ÊË·æbA9üè\Ã~ÅÜW’ô[©US. 8Ç?­•„£K›]N¡¼ä&ÞÝ3íÞx¡a«ý¤HLžÇ~´½âŸ° ¼‘IXŒ|ǵ7ÌL}”^¨kCƒ…÷éßš^ñIPØT«#2q´óúS÷‰~Å¿ Ú²v‘žNýè÷ƒ÷7ÛÉ [¸à`ÿõ©>báìVãÂß¡eÜ®20xéóúÓ÷‰½g°ØÅöáçqŒ¬2i.n£—±·»¸ÿôó¸#ÆŸ¼OîPª/YPI´sóm¦~´{Àýн†ª_G°`zïçòt^â9ÔÚÊH#ÏçKÞö TI#^nùfÀÎ>QùóMóK©Kó¹•ÂGÊz{~½âïEhЯý£œªŽ˜#üzÑïöGz±€£/˜±~ýârÞ»ûz¾ =qéÇz=àýËB4›óÆ0ŠÔÛò=öÕÊÇ»# ø÷£ÞTn÷"^y™.|¼ŒŒÒ|Ë¥k[RìE¼´ÞFü ß^õhç•®í°êd†@î( ‚Hdu ,ƒÒ€ (þðúR`V·êO"ÏÔЀ¼cBrQIõ"ªìÆB(?J.ÀQ† :cµ`)Dc’ŠO¸¢à!TSøQvåGÇȼtã¥aaÁ@9ô¤|´À§îÀ<´þâút¢ì £8P3׊@V`=& õrý 8ßÿÈEë’* ;Wûæ¤äû¿þFšEµE·HþÜŠ¼3ÿ׬ùtµÎÿlܹ¹ 6F¾Zý´ 3ƒÁúóN˹Òw|‡½«Ê§Ê»É„óÛž}¿·Ù‰UQø¢/ö|€’.rzÿ>GÜ^Þ?ÊKöLÄciŒ‚3žÇ>´ùt±Ÿµ÷¹’#ŠÁãFSpÌcIFÝK•u'~Qe´•ö…uLtNÙö¡ÅŠ5b¯t"ØÈÿJ’s“ž9úÑÊû×ò±—aéÃüÿ¯¸{xßáý›!Eh*Tç LzÒä}ÊúÄoð’ÁÜö©08çüýi¸ù“é}‘¢ÂlœÜ¶;c?ãG+î?oåéîÁÃ]HC O¯¥žaõ„­hж¼24„9#îû𣗨}9RÐoØ&ߟµ8ÀÇç­¯¸ý¼mnQßapF%ùIÉúƒëG(½²ì c$y"á·uÏ=x÷ö¡E® ëÅý‘c²‘¯Ú|¸Èõõ¡GÌR¬›¿(e)ˆ"Ý8#óþ4r¾ãU£{¸Œm:Rqö–ÛøäsõúRä}ÊXˆ¯²;ì2ãh$c©Ïüiò¾âöñß”Q`á ­Ã ýzsžýy£—Ì^Ý^î"ýŠO)“í¹Æ1Ûr»n/l®Ÿ(Ie+íÅË€O^G§Z_qÆ´WÙ#:tÌNn›åO9éõ¥Èû”±_drØÊ®\O†=O<ã8Ï>”ù_q:ñjÎ"Á`ð¸c>ò3Ôÿ 6ê)×RV°, ¸s†<ãñ£—Ìt—Â+X“1HÑúýhåÖà«û¼¶-£I&ï4¨Îî9ÀsíMÆäÆªŠµˆN›+33]6I㑃ŸZžGÜÑb"’J$¦Éö¦'mÊ»KsÏ?Z|¤*Êï@{Ò³¬ì„äñëG(*öVhXí$O+‹0üÙüi¨´)U‹¾›ŒŽÊU$›–ÇßçŠJ/¹R­öI­-ÞÁå2g¹Ï­8«Õ¨§²°³ýáô¦ÌŠößò“þ¹æh@^¦@P@P@_ï·Ö“…Çú¹~†oˆä"?ë’* ;Wûæ¤äû¼úäi &d{’BqòóíõôÅGºvÚ¶º¡=B À®å$ôqJÑw{"¹·† ц~]¿Ý-š¤Ò2•9ÉÙïý![R„0lgŽ”s¡,4¬>Kèc—ËbsêGLÓrH˜Ðœ£t,w°É/–»·“‘Œ –Á*2Œy™ö¤j ’7L3߯ùüis£OªÉìÉ~ÝÅl6ã§ÓüE>dgì%v„—PŠ-à«’¹ãyÇó¡Í!Ç)Xt—±DûX6qž¶•I 4e%t1õã‘ÕÑÀSŒœš\ö)aÜ’i‹%üQ…8b§±?ŸÜ’hIÜOí(8ÆóžœRçCú´ÆN-ûQ]€<œt£êÒµÙtFAÈ«9š°P@P@P@P@P@P3ýáô¤À§H56òÔÄ3ùšh k”˜Ðõ鈚ÜÊS2€Ó†+yžSda°q·ÿ¯MnVÆs'ïwm1:÷éU+[A+Œg»YÇ˹=Æ21ßÓ4% QнËItÚ»~l×ó¡¨\lz%`‘¡MÜø¡(ØZ’@Óý™Œ‹ûÀ8Ï~)4¯ ÕìVûMï Âwÿ¯WË]“‡¸Ý÷ïN˜ÿ›DzŒË\a»zÍî2•Çú¹~†oˆä"?ë’* ;Wûæ¤äû¼zäi ,F÷Jˆ¦Õ p*}ŽÉF›m© ×!Tk0Ù'oþT]öNíL’I&û:²[þó$lÛž)¶í±Œy¬å¡û  ý‘IÈÚ;uïíúÒ×±v§üÃ呌¤ÛEˆ1–‘×?Ò›}‰ŒR^ûi‘H÷€–Xnð3³œc®)>bâ©lßNä³É*̪¶âD Ô¯~=¸ïM·}Œá¸¶åf*M3©ßh…ÈïéBo°8Am!VYžulFrHÍwØb£¤ˆ…ÍÃ*²Ùò@ç§åJï±^Î Ùȓ̜ÆY­Ô’äÛÔcŠw}‰å…ì¤$9d"ÝJíäúñíÛó¡·Ø#YûßÖŸðFÊdkUal«&ﻳwí±QQS·6ž¤Ö¾c¼žt* ”íÆáëUõ3©Ê’åe UP@P@P@P@P@C?ÞJL 8˜ßIörùC®=MTmÔNý Õu£s 8çh¿áWî Þ'€L7yÇ9Æ1Ž8úT»t¹]SP“"’F;cëŒU^Ôy[ݧ3ƒøñKÝ I¥–p?‹¥%n£w+…¿Â‚èxÃùU{‚Ô/U êAÏãEâ’Ãöƒ¾gÞÉ œc§øÒ|ºXjä!oÊ̹#ï{ÄÒ-ÉŽ!…aù©\ºÜz‘®ü~ðåûýjú ®?ÕËô4€ã|Cÿ!ÿ®Iüª€í_ïš#“§çü4Ê}ÅúSh € ( € ( € ( € ( € ( € ( € ( € ( €!Ÿï¥&8ÕÛTÊ6Æ ëɪ‹V/:É%¾ÒvH@ÎÓÐЬ˜t+­µÊ·úì.ýÄîjù£ØVd·Ë#*@¸R:÷©M-ÆÆ {Œ0iz…Á {ð§Ì…fÀ¬ bMÄdò8ãùÑtd‹‚ÔG¸Á¥u{ŽÚ5½Î~YñR})óG°¬Äkkœa.ûÝÏ~”sG°Y‚ã ‰þfqãŸð4î»™,ÑHâ0“l)÷½ÅJitE ïá‚åm‰™e=êÈ †[C!/ìzdP#âù¯ýrOåLÕþù©9:~ÈÓ@l§Ü_¥0€ ( € ( € ( € ( € ( € ( € ( € ( € (¥ôÂ3gÃ4€Ï·”Ï©Ü)|´P0ëM;E³qó¾íÆãOŠÄ‘~éٗ݉àRr¸Xb²Açž@Ò©ÔaaLc$îl n8Å.vGƒÌ9ÝÁïš9ØXXÐFèÀ±Ø¸ä“ŸsCÂÀS.X³rÛ±“Š9¾pŘàä‚zÑΠ ·.ÿ*…àöãü)ó°å!{ØínÄ,¤¸S‚rGËÿë¤äØìS‰%šs; Ê8 8ãéRÝØ²í Š˜• 9ÿÈEë’* ;Wûæ¤ä=<äqô4З `2`Ó?þ½ûmï÷“þýÿõè¸Ûo¼Ÿ÷ïÿ¯EÀ>Û{ýäÿ¿ýz.öÛßï'ýûÿëÑp¶Þÿy?ïßÿ^‹€}¶÷ûÉÿ~ÿúô\í·¿ÞOû÷ÿ×¢àm½þòß¿þ½ûmï÷“þýÿõè¸Ûo¼Ÿ÷ïÿ¯Nàm½þòß¿þ½+€}¶÷ûÉÿ~ÿúô\í·¿ÞOû÷ÿ×¢àm½þòß¿þ½ûmï÷“þýÿõè¸Ûo¼Ÿ÷ïÿ¯EÀ>Û{ýäÿ¿ýz.öÛßï'ýûÿëÑp¶Þÿy?ïÙÿwûmï÷“þýÿõé\í·¿ÞOû÷ÿ×¢àm½þòß¿þ½ûmï÷“þýÿõè¸Ûo¼Ÿ÷ïÿ¯EÀ>Û{ýäÿ¿ýz.öÛßï'ýûÿëÑp¶Þÿy?ïßÿ^‹€}¶÷ûÉÿ~ÏøÓûmï÷“þýÿõé\í·¿ÞOû÷ÿ×¢àm½þòß¿þ½ûmï÷“þýÿõè¸Ûo¼Ÿ÷ïÿ¯EÀ>Û{ýäÿ¿ýz.öÛßï'ýûÿëÓ¸\½åÁSç˜ñÙ#þt€ŠÚ)íå’A)w“-§Ò–|û¯ï/ýûÿëÑ ƒÏºþòÿß¿þ½y÷_Þ_û÷ÿ×£@>ëûËÿ~ÿúôhçÝyïßÿ^}×÷—þýÿõèÐBy÷_Þ_û÷ÿ×£A‹çÝyïßÿ^}×÷—þýÿõèÐeYb»’BÿieÏaâ€Ojòc”ÿëИNÊT°ÁûŸýzå|H»5M¾‘¨ý)ˆíïš#o¼ŸïC@Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€8ÿÿÈa¿ÜZ 4žâ}íûé:ÿxÐ}¦qÿ-¤ÿ¾i¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@z³³Þ–v,vŽIÍÿÙlibstruts1.2-java-1.2.9/doc/images/how-to/eclipse/developing-eclipse-style25.jpg0000644000175000017500000004366210404045204030130 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„   (1#%(;4>=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀm¤!ÿÚ ?»¬ëöº¼vVQÄÁÑHÞ½Î{çÚ³&ñ>­ a£·>á2?tF”ZM“qgñ»nŠÒÛ@¡º™ížÇŽ ¾$ÖndÙ6ÿt¶Ld ’sš¯c ^äs²3â½Xõ0sÓ÷GŸÖ•|U«61<ŒÝZ~ÂËÿ ^©ŒˆaëõG¯§Z_øJµNs ?/_Ýž?Z=„ÎÄÿ„³Pþå¿ýñÿ×¥ÿ„³Pþä÷Çÿ^aöŒ_øJõîAÿ|õéá)Ô?¹ýñÿ×£ØD=£x¦ÿû°ßýz_øJ/ÿ¹ýñÿ×£ØD=£\ÿ©¥mKPt`,.1yx€й.{zÑËÔ.û“R½’ê)ÿ³&S³í;½F:ûÔrÞ^Ëk<cpâ\a~æ08ÂŽÂ…®¡vf +¯ùö›þýšp²ºÿŸi¿ïÙ­y£Ü›1ÂÎëþ}¦ÿ¿f”ÙÝÏ´¿÷Á¥Íâ³,î±ÿÓß”YÝÏ´ß÷Á£š=Çf8Z\ÿϼ¿÷Á¥—?óï/ýðhæp³-.?çÞ_ûàÒ‹[ùá/ýði)G¸4Ç [ù÷—þø4ákqÿ<%ÿ¾ ˸¬Åû-Çüð“þø4¢ÚãþxIÿ|\Ñîc…´ÿóÂOûàÒ‹iÿ焟÷Á§Íã³öyÿ猟÷É¥û<ÿóÆOûàÒæp³-æÇú™?ï“Köy¿çŒŸ÷É£š=Åf8A/üòûäÒùÏ'ÿ¾M˸YŠ —êŸþù4á ¿óÉÿï“G2îbˆeÿžoÿ|šw“/üóûäÑÍáf/•'üóûäÓ–9?ç›~F“”{ŽÌ_*Oî7åNXßûù9—p³å¿÷ò¥ÉŸ¸ß•.eÜ,Ljßq¿*<·þã~Ts.áf<#ÿpþT»û§ò£™w 1B7÷OåNÚßÝ?•˸Yг÷OåNúNK¸YŽÚz`Ò€} ˸Y™¥X"ŽBÍÑ“¯^y¬Ø¬žÞ3 Ó¤lèÄ;©ƒ’Ýs“XÉ^W5‹²±‰âù Ëôʳk"ÏJ“ï~ùTFD×ó©ócþúþty±ÿ}:<Øÿ¾¿lß_΀6?ï¯çG›÷×ó ÍûëùÑæÇýõüèócþúþty±ÿ}:<Øÿ¾¿lß_΀6?ï¯çJ®­÷X¡ O@M.Æþéü¨ØßÝ?•û§ò ctþTloîŸÊ€ ýÓùQ±¿º*67÷OåFÆþéü¨ØßÝ?•û§ò ctþTloîŸÊ€ ýÓùQ±¿º*67÷OåFÆþéü¨ØßÝ?•û§ò ctþTloîŸÊ€ ýÓùQ±¿º*67÷OåFÆþéü¨ØßÝ?•û§ò ctþTloîŸÊ€ ýÓùQ±¿º*67÷OåFÆþéü¨ÚßÝ?•&1@Oˆä17áü«6¨J“ï~ùU{(mþÇ4²[C#ý¡†çŒ1Æ:H ôñcxþÅR¸ÁêGqíUZêÉ'h[N·§yC6oîóL{»VTÓ#Y+6èT…RWÓÔ0 ^XF%i´Èöo ÈîáN8ïó}(EºÓHéj °s ¹íÇn½O%´šåà›M†6ÜÁ–„1‘ÇqšÐþβÿŸ;ûô¿áGöu—üùÛÿߥÿ ?³¬¿çÎßþý/øQýeÿ>vÿ÷é€ìë/ùó·ÿ¿KþgYÏ¿ýú_ð û:Ëþ|íÿïÒÿ…Cqm ˜aŽ<õØ gò ~Ö–WWR}Ø£ÜG¯µP¶ñl l­<-æ€æQP)PO'?Ä $®¨>¥fgx|¬Hè9È!XŒþ•z˜Q@Q@Q@Q@Q@SY±Ó4e½ÏýõMÎx,ïªbO¹üé¤ÿ´ïªbwû_øý¿Ú?÷Ý4±þñÿ¾ê9n¹üsJ[ Gˆä17áü«6¤g¥I÷¿ü©ÚH¬PÇÅï Ú»F2ŸÐTÑA[|¨Ñvƒ£¦qþ€%¢€ (¢€ ­}÷ùô  ‘ùE9âóc|eN1úÒ¼Z|’<`Œòd;L¶qœóþÈü… &†[{}ÞM±yÜÛvŒŸ^µ'ÛWþy¿æ¿ãNàm_ùæÿšÿm_ùæÿšÿûjÿÏ7ü×ühûjÿÏ7ü×üh¸ÛWþy¿æ¿ãGÛWþy¿æ¿ãEÀ>Ú¿óÍÿ5ÿ>Ú¿óÍÿ5ÿ.öÕÿžoù¯øÑöÕÿžoù¯øÑp¶¯üóÍƶ¯üóÍÆ‹€}µç›þkþ4}µç›þkþ4\í«ÿ<ßó_ñ£í«ÿ<ßó_ñ¢àm_ùæÿšÿm_ùæÿšÿûjÿÏ7ü×ühûjÿÏ7ü×üh¸ÛWþy¿æ¿ãGÛWþy¿æ¿ãEÀ>Ú¿óÍÿ5ÿoÚ×û’þkþ4\7)ÿ<äü×üi¿h\ýÉ1þòÿ;…„óÇ÷dü×üi ÊGÝ—þú_ñ§Ì…a £²Éÿ}/øÒy¿ìÉÿ}/øÒæA`ó=¤ÿ¾—üj79lóø‘I»…Ž#Ä?ò›ðþU›@ÏJ“ï~ùTšüzÍÿ]ßùÒ@\…Àrß÷ÑÅe.‡,lïñ«’Û~CŒ6î¼õù»c¥0‡š?ùnó†ùãÎ9Žx‡õ©4Ô-]yÈÏÞ8éÖ—íö¸N„zƒÓŒÐã»·â9QÎÝØSž*5;YÉ ((a¸ã ŒÐßjƒÊY<ÕØÇ穦GnÑ+´Š™PÅXò këU8iã8ä÷¦Ï¨[@v´€¶HÀõÁ8ý([y㹈ISéÚ£ŽúÚDG¨œdã§ZD¿·fqæ(Uî'ƒRµÄ(¨Í"¨ºIë@¾¥j°‰epH)äôÿ]ÁæÉŒáã¶•4_Z$\G…8?7z\BwbU! sÓ4Ö»·RCL€Œäg¦)¿m€ÍI v—¦Óœ ŸÒ€mBÚV2© Àp}qÏê)Í}j½n#ýï_ÿ]9®­ÑQšdÁ*IêZk^Û$Œ½;а×z§ÛZ‘ªUå±î>oLuï@ mGRò ‚È ­à }쎼ñŠ»§\ÝO4ËsÍ¡qµî2zŸÃñ  ôPEZûîóé@÷M)F¶uŽEÏÌFNoÒ¢:H“IdÝÉù@ùI988Èç¿Z@+éQº/.Â0Wހ䉡ô˜™·+ÊŒ3‚¤wÎ{{š> 6(fiTÌ0NÐ=3ÈßJci0¼>S™xëŽÀÛÐЩ`±ÅF̆6,UG'9ãïéUŽ‹ ïav‚B’:w#=¿Ô¯¤¡“+4Ч!‡‚1ŽŸ™ëïJ4ˆ­(y7ã§>Üõ=h¸‹[y3ïG;ù”÷8~ƒõ¨$Ò¡F܈þè!Nr#ÿ×Þ€i…l<›˜Xàäœ`ŒcŸÃµ>çMŠá"GwÄ`È$ãÈ<ñÖ€´¸‹dI"œ8Ç cŽŸìŠ|ö)+Ÿ•äÊ}†8úŒ ƒû"'_ßHÎÁ˜®Up ’q‚=ûÔéa$¨±!.9úûÒ#¤BÛ·É#ä’“»vOóØñRC§Ç¨èîÛ0'sÓÓð¦WJ¶IÔ0*r9÷Èÿ¥$zE´r]Ù  ÎA®3ØQp%6”wׯf95Ò¢xæY%•ŒÄb@¹#Ú§k™T39Ú¡99$?•0&™ ŒK<ŸÅ‘òîÎ{{æœöUHèQÙÁNsÔZ@Cs¤¤ñód ³8–äöõ§>• „™F-Ǹûñútö¦‹ke¶@ˆÇh0êNp½OH'Ä?ò›ðþU›T¥I÷¿ü©4É„39haÉÀúÒ@ZÓˆÝ àa•“PÿlÃfK¥ò–òÎwoÃm?CÒ˜ m¬ÛNårFçÛm8qÆ?ˆ© Ô­®&X¢f%ÁØqÀÎ3ëÍ[¢€ (¢€ (ª×ßpŸJ¦8BG\ŠË½Ô¤ŠïìÊJ’ ;VsmGBà“z—mgi¡V,Iîzf¡k÷XF|–}Ëóß<~œ]ÕÉjÎÂ.¯hë¹g$Xà½;ûNŸ/"„;”ŽÙÇרD#Y‰˜l4{ö— Hû»³SÝJqlÊÇUüF L×X/–N[ÀÅ,W )m˜!NÝÛF ö¡&Ó`Eü29Øö~ñ6å½zӾۛʅ°IÆ00@Çךl·’‰Ñ•¥UÊà‚ Á¥ººhBF$‘Î@4›°›²¹¦£çÌк"H@0"¦ûb}¤ÀA91ñÏNqŠIÝ\Q—2¸¿k‡s/åa•Èô幨*I70r=jŠ!³‘¥€³œì?"EX¤EPEPEPEPâù Mø*ͪÒ¤û߀þTihc0wØÃÙûÒ@[±Š(Ó1>îÇ}*(ìtù ¤m½ƒdâRLg9㟗š`*éVg,¡ÎOHß)ã‘ÏÓÒ’ÛI†Úíf‰Ü*.=Č㜞N\i¢Mû¤EØlœmÏLÓ‘ÒDSЩÈ4+«3*°,¿xzRÐEPU¯¾àÿ>”H}ÆúŠÏ¹Óâì\X cT5ub“±jD?u‰Ú¡–Â3ÔÙ+¸í÷㥠YXMÜM·SœIžpLŒH'©ëÖ™—mà°H*7€8ôéÖ¨D‘éöÑŒ*69à±<‘‚~¸4·¶ëœ$«ø@Ý”· µ.Z!¸”Çô«Â"c@¡T` ©ËÜQµ¹NëK4~iPÌÌyê´w.Í3"ãpŒ+îP^öýjFZD­æl•X’æìÓï-qE"¤‘œ©$ô¤ÕКº± ŽœÖó4²ƒcc<øÔ—vo*ÌÑ”ó0€3` s‘õ¥ÙXP*±Qtg‘]gtUÜQ8!@É'éVmtÑm(t}ÜŸSTQ-”\w±ûábj}§Ûóm>ߘ£iöüÅ §Ûóm>ߘ iöüÅO·æ(Ú}¿1FÓíùŠ6ŸoÌQ´û~b€ §Ûóm>ߘ iöüÅO·æ(Ú}¿1LGWÎÆAǨ /Ä?ò›ðþU›T¥I÷¿ü©š|o&Ÿ(@I,xÆzûñIrÎ)Ù¤ €70@O'ÐU(t먡’%ÚŒe,$A$ãàãõ¦m¥]«F#œÄ¢GrcÎ[9ä¦?zé·QƦ;œÊT–•ˆ#aÿÁÍ?OÓ®c¶»K™F•6._vÍŒœQDºuæð"”"…QÄ„p0=O9ë@ ·Ó/#»ILƒo™¹—Ìbö¤ÆIü+j€ (¢€ ­}÷ùô  Cî7ÔV^ÌZE"Çq<¼¶ÙXc @ã4µè5n¥Ý.Ê ÛrÒùñJ¬U\1#õ«iš|û¼›‰dÚpÛnàþtÓ£“g,k$rÜ20È>sr)#Ò¬eÝåÍ;mb§·zÐ!ÿض¿ß¸ÿ¿Íþ5 ¶:dRk¹#`3†¹ ãó .›§¸R—2°`ÅÁç=;ûRÿeØyÆ>o4 ìûCgLЙa#ºG<ÌÈpÀ\1#ëÍ94‹9rK; ‘‘;œô¿ØÖ›‚ù—# yíþ5 Øi±³«ÝȦ1–äü¿^hé¥XÈÛRiØ… ÄíÐ篱¥I³•Ç-Ã)è|æ =¡$ . ß·­#i6K"Æe¸à•ssŽ´ïì[_ïÜßæÿ?±m¿qÿ›ühþŵþýÇýþoñ¦&ÌÊbÜo 9ºÿ bÚÿ~ãþÿ7øÒ>f‹¹åG©¿Æ€Ò,ãRÏ,꣩3°·Ò,ã¼³¨$ ™Ørzw éaÂgA!|öÉñ¦¥¬q-ÄJàƒ‚Ò3ž†€± ¸ÇOOz†KÄŠhârIœ|¼~>”€€êöÃÌĨv0N6üÄãùÔÒ^¤RùrŸ&ýÌ .2_ÄP‰p²gËtluÛƒŠvööü…V»•ÄÖÊIƒŽÿ)¦iÿêdÿ®Ïÿ¡å÷à?•I¡ÿǬßõÝÿ$èÕ-,€áHà瘺åÃÃe½ƒ’xÜrxè:â°Î«pm‹,*~B[ ‡Á'#84€é´ãºÔAÉÏÊr:Uª`PEPU¯¾àÿ>”H}ÆúŠ¢¡ÿ±öª©FÈ u\ì{Ô½Š[¡4K±ïÉ"´lêêØuÈ?Oʵd†ïì¥JBÍ‘Æ#?)è:P-ÂNåC¢L³Hë8e!@V$)·×­F4[¥½Ü?-·°`Oî‰`Fß~µd’E¢Ü,л\ËaONG9Ç$÷<~55Þ™q#~æEÚK;œÈGfc°ç¯°éR¦ ÷*ïat^¹#ßž¿_Z”ZÝ-ÑpÑHª¿ºi Ü0Ir}óÒ€ÖÊ{{‚ûã* ®J³?8¤|ÆÉá2ùM¾FQù~f,3ÇlÐa¡¹¹å¸2ĤîGþ!Áþyý)çN½QI!2G@Ä·ÍÓ'¾‘ý(t«™%b‰•9!Ðù8¡´›¸ Ø²$¨®eÛ’ ð>OLz÷ Ùè· †YYcѨb|®A  ÅI‘pc4gbð?…òÙ*O^Š2qÎ}¨;"á,]S»}ÒÄ lÚ:ž0y«Ž{u;%Ehº`{w÷v  ë£^ Xá*ÊÛœ!dƒŽø>zÔ£E©;ãŠ`ˆ‹*d· K7Ôƒ@[é·i¯j$OŸvrIôàqß·zªš¿f+,¨ÒÉ''( ôÎ?*½t“]ZIh–¦3€¹]œÓŸÒ§µðMò”1H®›z`'9ïÁÇÖ€êÞåæIÕbfŽ)WNq´ÈUOìÉ­®’o9Z$‹ËÀàœ.F=A={ÐÉ,i´4Ч Çz£smiu/™%Á ¶\ƒž™ïH……¸$ý´ä€§•û£ã¢s¹¹&K˜Ä[p¸q‘Ó€ (¢€ (ª×ßpŸJ¤>ã}EgùQI¥o”òcfP®ríéô©v¶¥-ôáý@$E_&ãNIÎ3Œ÷Î+R+Òùqû²HRfœwÏJ î‚J̧¹*7“,²ªƒ+È8䎠s×Ú›¹"ÜI‹íwçÌÆ@laxù>Ý*‰%^/4Qý—;Û ‰ËÎ;àôãÞ’ÿS¸†Q†XU°X)eÏR€+jY.¢‚;B¬ù‘¶€x<ñèAüE5õw$8¸Š8äˆ:‚ ”<`uêsߊVÖ%‚OÞ\Ę…Üvœ“ö¤ƒ]Ûn‚EV˜ÈSæp¼q†K‰#Xä\â?0ØÇqþðÕSûzimŒ±[¢0D Iœ62z˜ŸÒ€4µ –¶Óžá5eåŽW¨úTz•ü¶ëÙ¢óz©# ™+Ç^¤5:káä(²Fbhäb3É+ŽÿS‚úY@·œ&ÀÙéÆÐ}=M#Û[¹ $hÌGR€Ó~ÉiÿœP£»µbªŽ¹8Âã©Çúb”ËlnŒGoœGuëÇLý;P öóK"DTºŸ›Ãñ§Ã$2B^"†2HÈépQ@I °ÜÈ\š‚K«$wG+¸‘°œý8ç¨é@ ì 0(#Ý"žß7{üµ 6·Vå¾]Ž “÷N;ÐÀ-cA >XQÀQß¿ãA{T”/É™tÂúöþ/Ö€ ˜­g‡ËŸa ‘»Ú¤t„¨GTÁè?Jlkl±¢ ‹`áÇéH“[} À…<À`cÔÿ  DSåS§Å'îWäýØöãé@-½¢ÊÒdn<d$sìN*À(I Tàòc@;ÚOêÍ,`¬¿ìädƒø‰š `y`³Ä‚qß<ŠÏ¿ó¾ÆÂÜfV]«Î1“Œþk)×RòÒ=º6ù!ƒ`œncÏM¿­ é'Ùó,ϵÎKËò»{àŽô’5óì0fEBJÞ Aï‘דÍ5©™äïÚw²ïA–<õôíZêì¸FWb `sÆsý( †Ý-“*L™Áê>SK§©“þ»?þ„h”ñü†&ü?•fÓÒ¤û߀þU&‡ÿ³×wþt!å¯Ì¸ÿwÿ¯Y1[_Ç$í’óK*åH|¿$ÿÀ}Å0:¢¬²1›ÌxÕAܧc’FzàŒ ãÞª%†£#J· ‰.’Ù%TõÆqóm  rD߆…."å1¹Hå¹_*KòóÇCÍY#ãÐ%Úlìl…”œñó{u9©®´“;©Žen0JsŽpÌ[‘íôæ€-$G|÷†bf‘v¾ŽsŽxíî1R‹9–vt¸BíŒ:dãÔ·<ûP[Ø<q€Nѳ±mÄ}O^)›¾Õá–bX³²²e@ÜŹ\ààžôYtVæ)L…Ö2~G]Ùqùäþ4ÿì©•P%ØVŽ1o+’¼g<û{c4 º<ÓM–0*œ©!8`PTgƒÁîqCèr$;b\#ùªÞl ÏN:cñ ÚxdnÓH‚W!°©ÂƒÏ¶*XôVQ°Ê¥QFÏ“åÎìFrG Ôç“ÍEq¡2YÈ–æ9%v$™ŒÛëÛ¨©ïô™o"MÈÌtm8êb=1Î~”Р^áQ”«P@0Ýxïž½*S¡#DQ¥PÛÒ=¬œç9êsÉ  ­ô¿"Í­–UØùÝò“ÏŒ“éùš¬þŽI74 Œ÷OnÝqÈëÇ^}¨÷"Ï•2 _0¸<ç‚C ãôÀ%Ö¡Ž&&S³ï¨+ŒîãÛŒöäVPEPEZûîóé@‡Üo¨¬â¾•ºdGh¢f[¦wµ-Öè]ýÄ2$1( ¬ÑÆltÍjGz#€È.¼â2\8ÆÂœ Žêa+Þý%fTT½…ŒD1¨2IœŽ™fœŸN•:½ÔwM mp]Êî.þÞ¬’hµ‹¹&…E²w ‘ÐôáNyǯè)5 Û˜å?½h²1¡RbË Ï=Çû{ËÆ¿1’Íj—hÌœœ}3Ó>Þõ8½?ÚI)Œ"fHXŽ3Æ9'¾zv ²»”Ýȳ;’ •û¸…ãžic¾œX¼ªŸh(òa€ã¦(¸Ôõ .â‰m–-ùR\àób;÷¦>¥&D;Æf@£1±Æ#޽NJFÕ.!,R‚¡AÁð]Çn;Øüj÷À‘º4ÈA. ÇÎ}†Oå@®±y1‘Äq´hÃd/Ê{uÏzrê—2å®Õ;ø;XO<ós߀ 5‹´³’wŠ(•Iœ68MÜýz ›PÖÙ!hc¸áÁw¦}è¿öíÀ†¤»Ü ÈVOQŸ~”åÔ¯7µÂªJ‚4Ì(§!‹î8ÍY´Ô¥–Å¥•M“µW$0ôÏ<ãëùUy5‹Á?––ÈF\ƒ“úàtœõë@.à7 ™ûÅê tÎ3Ó89©C¡ ¤àÐbæ!ŒH27^0IŸÀÓüØÿç¢uÇÞh2F:ºŽ3×·­$sÅ#²$ŠÌ¸È¦zPè «_}Áþ}(ûõ&“o úT^tI'.>eø$Ø­máÇ•iŽFÕ#*º•u ¤`‚2 0“jï´nãœPÑ@Q@Ña·PÙ'8ç4®‹"2:†V*FA",h*¨À` 6¨b؈Á8äòM6Xc™v˺ƒœ0ÈÍ<€A  ÀµQ@E=´!DðÇ(^›ÔP T7êÏ¡  öè¿OëUoä’+Fhs¿*1žHø©ƒj—ª©‡{bÛˆ‚p1êÇ­9µI“!â@F~bN8ÈÇÔ•ãëLO©O-€!¶’Í€$uöÇâkI²+´=)^ïý}§ýu?ú ¤ÓÿÔÉÿ]ŸÿB4Àå÷à?•&›Ma*©ä\±êGQÒ’Æ›eöX‚嶀̌ǩõúÔ ¡ÆV2’‘$r7¶[<’ àdôÀŠ-Xïcftx÷´¯ 1 6© sš™´`óË+Ì bv|œ¦v÷'“òu÷ ÝéFìί>Ø¥mà*áƒl ×=8ô¨×BˆCåù…AV  sƒÉ'Œœs@*ƒ¶e—i]„¨ëÈËžx晇‹Æ<écV€ ®ìÏ'æë@>ŒÌ\Í[v žs·Æ1íþvÇN[)¦te"RN6`¯$€ ¨íUkï¸?Ï¥Rq¾¢¬hŸò ‹êÿú¤€½E0 (¢€ (¢€ (¢€ (¢€ (¢€ (¨nÿÔÿŸC@óIr FP:™1ý*'7r!G´‰”õ_þµ  Ü@¥b³…9 IÿÖ©<Ûßùö‹þþÿõ¨ÐóoçÚ/ûûÿ֣ͽÿŸh¿ïïÿZi[©§€É h±¾âC籞ôí?ýLŸõÙÿô#@§ˆä17áü«6˜•'Þüò©4?øõ›þ»¿ó¤€¹ -~UÇûßýjÆGÕmã•‚9go—ygn<ãc€ 0×Ú PÛ•Bƒs™¶2Gõ™?…T:Ž®–¯q$v¦í¦#Ç þ$ÿÀiëVóŒ°Æ]Jª‡xAŸ»‚sž:P@¤•†9´Q@V¾ûƒüúP!÷ê*Ɖÿ ¸¾¯ÿ¡H ÔS¢€ (¢€ (¢€ (¢€ (¢€ (¢€ †ïýOùô4EHQ@TÓÿÔÉÿ]ŸÿB4Êx‡þC~ʳj€ô©>÷à?•&™7‘a3ûCNçÖ’Ο}Ô`ÆÈW ­œòx¨¤ÕÒÕ¦ûj,)žZû‹¡º`cƒL>·c­‘‹/P«ž0N~˜®A2\D$Lã$`ŒAÁIEd`ô¢€ (¢€ ­}÷ùô  Cî7ÔUþAq}_ÿB4¨¦EPEPEPEPEPE ßúŸóèh:Š (¢€ ©§ÿ©“þ»?þ„iÊx‡þC~ʳiéR}ïÀ*]&1-œªI¸bê4­í’ßîéŒp?­$¶pJIt9-¼ÄãG°Å0#:]™rÆ’ÆöÀp3œžžµf8Ò%*ƒ±cõ''õ4ê(¢€ (¢€ ­}÷ùô  Cî7ÔUþAq}_ÿB4¨¦EPEPEPEPEPE ßúŸóèh:Š (¢€ ©§ÿ©“þ»?þ„iÊx‡þC~ʳiéR}ïÀ*“CÿY¿ë»ÿ:H )€Q@Q@Q@V¾ûƒüúP!÷ê*Ɖÿ ¸¾¯ÿ¡H ÔS¢€ (¢€ (¢€ (¢€ (¢€ (¢€ †ïýOùô4EHQ@TÓÿÔÉÿ]ŸÿB4Àå÷à?•I¡ÿǬßõÝÿ$À( Š( Š( «_}Áþ}(ûõcDÿ\_WÿÐ$ê)€Q@Q@Q@Q@Q@Q@Cwþ§üú΢¤Š( ªiÿêdÿ®Ïÿ¡`rž!ÿÄ߇ò¬Ú`zTŸ{ðʤÐÿãÖoúîÿÎ’FŠ`PEPEPU¯¾àÿ>”H}Æúб¢È./«ÿèF’õÀ( Š( Š( Š( Š( Š( ¡»ÿSþ} gQREPU4ÿõ2×gÿÐ09OÿÈboÃùVm0=*O½øåRhñë7ýwçI£E0 (¢€ (¢€ (ª×ßpŸJ¤>ã}EXÑ?äÕÿô#IzŠ`PEPEPEPEPEPPÝÿ©ÿ>†€3¨©¢€ (ªšú™?ë³ÿèF˜§ˆä17áü«6˜•'Þüò©4?øõ›þ»¿ó¤€Ñ¢˜Q@Q@Ukï¸?Ï¥Rq¾¢¬hŸò ‹êÿú¤€½E0 (¢€ (¢€ (¢€ (¢€ (¢€ (¨nÿÔÿŸC@ÔT€Q@UM?ýLŸõÙÿô#@§ˆä17áü«6¨J“ï~ùTšüzÍÿ]ßùÒ@hÑLŠ( Š( Š*µ÷ÜçÒ€)¸ßQV4OùÅõýÒ@^¢˜Q@Q@Q@Q@Q@T7êÏ¡  ê*@( Š*¦Ÿþ¦Oúìÿú¦)âù Mø*ͦ¥I÷¿üªMþ=fÿ®ïüé 4h¦EPEPEZûîóé@‡Üo¨«'ü‚âú¿þ„i /QLŠ( Š( Š( Š( Š( Š*¿õ?çÐÐu PESOÿS'ývýÓ”ñü†&ü?•fÓÒ¤û߀þU&‡ÿ³×wþt4S¢€ (¢€ (¢€ ­}÷ùô  Cî7ÔUþAq}_ÿB4¨¦EPEPEPEPEPE ßúŸóèh:Š (¢€ ©§ÿ©“þº¿þ„iÊx‡þC~ʳiéR}ïÀ*“CÿY¿ë»ÿ:H )€Q@Q@Q@V¾ûƒüúP!÷ê*Ɖÿ ¸¾¯ÿ¡H ÔS¢€ (¢€ (¢€ (¢€ (¢€ (¢€ †ïýOùô4EHQ@TÓÿÔÉÿ]ŸÿB4Àå÷à?•I¡ÿǬßõÝÿ$À( Š( Š( «_}Áþ}(ûõcDÿ\_WÿÐ$ê)€Q@Q@Q@Q@Q@Q@Cwþ§üú΢¤Š( ªiÿêdÿ®Ïÿ¡å”H}Æúб¢È./«ÿèF’õÀ( Š( Š( Š( Š( Š( ¡»ÿSþ} gQREPU4ÿõ2×gÿÐ09OÿÈboÃùVm0=*O½øåRhñë7ýwçI£E0 (¢€ (¢€ (ª×ßpŸJ¤>ã}EXÑ?äÕÿô#IzŠ`PEPEPEPEPEPPÝÿ©ÿ>†€3¨©¢€ (ªšú™?ë³ÿèF€9OÿÈboÃùVmP•'Þüò©4?øõ›þ»¿ó¤€Ñ¢˜Q@Q@Ukï¸?Ï¥Rq¾¢¬hŸò ‹êÿú¤€½E0 (¢€ (¢€ (¢€ (¢€ (¢€ (¨nÿÔÿŸC@ÔT€Q@UM?ýLŸõÙÿô#LSÄ?ò›ðþU›LJ“ï~ùTšüzÍÿ]ßùÒ@hÑLŠ( Š( Š*µ÷ÜçÒ€)¸ßQV4OùÅõýÒ@^¢˜Q@Q@Q@Q@Q@T7êÏ¡  ê*@( Š*¦Ÿþ¦Oúìÿú¦)âù Mø*ͦ¥I÷¿üªMþ=fÿ®ïüé 4h¦EPEPEZûîóé@‡Üo¨«'ü‚âú¿þ„i /QLŠ( Š( Š( Š( Š( Š*¿õ?çÐÐu PESOÿS'ývýÐ)âù Mø*ͪÒ¤û߀þU&‡ÿ³×wþt4S¢€ (¢€ (¢€ ­}÷ùô  Cî7ÔU8µhô­gˆY€ÀäçRt_Ìo„yù<’øÀë*o¶?ùÇøQqÛüãü(ûcÿœ…ûcÿœ…lóð¢àlóð£íþqþ\íþqþ}±ÿÎ?‹€}±ÿÎ?¶?ùÇøQp¶?ùÇøQöÇÿ8ÿ .öÇÿ8ÿ >ØÿçáEÀ†âþdò¶n•äÁ<Õß5ýJ.濯éGšþ¿¥ó_×ô£Í_Ò‹€y¯ëúQ濯éEÀ©¨jÙö¯q1&4å°ñ¨¢×3[¬ncgÈïÀÇó ÑHŠ( ªiÿêdÿ®Ïÿ¡`rž!ÿÄ߇ò¬Ú`zTŸ{ðʤÐÿãÖoúîÿÎ’FŠ`PEPEPU¯¾àÿ>”H}ÆúŠÏ×&ÓìÒ[ÛÉÍÒõÉ'ÓÞLjïEÇ›å[ÿ«);ÜOj“7ßóÆßþÿõ¨fûþxÛÿßïþµ¾ÿž6ÿ÷ûÿ­F€¾ÿž6ÿ÷ûÿ­Fo¿ç¿ýþÿëQ o¿ç¿ýþÿëQ›ïùãoÿ¿úÔh›ïùãoÿ¿úÔfûþxÛÿßïþµfûþxÛÿßïþµ¾ÿž6ÿ÷ûÿ­F€¾ÿž6ÿ÷ûÿ­Fo¿ç¿ýþÿëQ o¿ç¿ýþÿëQ›ïùãoÿ¿úÔhZ;¹dˆI «"¹"\ž}+OzúÌP½}GçFõõ ëê?:7¯¨üèÞ¾£ó£zú΀(ê -Àh„K ê$“ü1íQÅ Á»IfXQa$ÎsøSÍ€( Š*¦Ÿþ¦Oúìÿú¦)âù Mø*ͦ¥I÷¿üªMþ=fÿ®ïüé 4h¦EPEPEZûîóé@³DeP¾l‘Œçä8ÍCö#ÿ?W?÷ßÿZ¤ìGþ~®ï¿þµb?óõsÿ}ÿõ©€}ˆÿÏÕÏý÷ÿÖ£ìGþ~®ï¿þµb?óõsÿ}ÿõ¨ûÿŸ«Ÿûïÿ­@Øüý\ÿßýj>ÄçêçþûÿëPö#ÿ?W?÷ßÿZ±ùú¹ÿ¾ÿúÔ}ˆÿÏÕÏý÷ÿÖ£ìGþ~®ï¿þµb?óõsÿ}ÿõ¨ûÿŸ«Ÿûïÿ­@Øüý\ÿßýj>ÄçêçþûÿëPö#ÿ?W?÷ßÿZ±ùú¹ÿ¾ÿúÔ±,Lª×7…›8 –<}7bÿÏ]Gþý·ÿ@Åÿžºýûoþ&‹ÿ=uûößüMþzê?÷í¿øš6/üõÔïÛñ4l_ùë¨ÿß¶ÿâhØ¿ó×Qÿ¿mÿÄЭ¢Žè9†îèìbŒ¶GÔTÿ`?ó÷?ýý >Àçîûú(ûÿŸ¹ÿïè ìþ~çÿ¿¢°ùûŸþþŠ>Àçîûú)mcŽ(ŠDåÀvÉ'<çšä”FŠ (¢€ (¢€ (¢€ (¢€ (•ó”2œ¤sþígC~Ñڣ͑ÛS‚¹=Iü))¾qË!ÝÆ1í“Ï¥käQ/ú1o,(%f8$’§hgŸˆ]6Æ&£1%ˆÆûÕy5<Ïkm"+ϵˆ|’bxÿ€ÐƒR…’LÂUñûÒA$ŒcóÍ6 ÂÖqcä܉cÓ_ÓÜP½¥ïý|¿þ‚+J€"º˜[ÛI1ìRp;ûVdzÃ,dKgŒ~óªs…#èzô4€zê­çÑ‚Š£pFÜ2z`ãž V¢’T8äg¥-UÓÿÔÉÿ]_ÿB4Éø‡þC~ʳj€ô©>÷à?•;Oqi £KHÏÆxÍ -}±=(ûbzQp¶'¥lOJ.öÄô£í‰éEÀ>Øž”}±=(¸ÛÒ¶'¥ûbzQöÄô¢àlOJŠâu•0;Qp+QHŠ( Š( Š( Š( Š£¨­ÀhÞÞÜÏò:2‡ Œãž~•P˪ÓØë$…0IªÐ8úÿ¬¯­f¦¨ÓŽÒ12Ñqÿ>Oÿ}¯øÐö‹ùòûíÆ–Æ9#¼ÄØÍ#6܃ŒŸjä¼Cÿ!‰¿åY´Àô©>÷à?•FTÿ}‡åR´ÿ}¿J6Ÿï·éLiþû~”m?ßoÒ€ §ûíúQ´ÿ}¿J6Ÿï·éFÓýöý(ھߥO÷Ûô iþû~”m?ßoÒ€ §ûíúQ´ÿ}¿J6Ÿï·éFÓýöý(ھߥO÷Ûô iþû~”m?ßoÒ€ §ûíúQ´ÿ}¿J6Ÿï·éFÓýöý(ھߥO÷Ûô iþû~”m?ßoÒ€ §ûíúQ´ÿ}¿J6Ÿï·éFÓýöý(ھߥO÷Ûô iþû~”m?ßoÒ€ §ûíúQ´ÿ}¿J6Ÿï·éHS8ËŽG€"[P³™DŽ Ïcœg·µM´ÿ}¿J6Ÿï·éFÓýöý(ھߥO÷Ûô iþû~”m?ßoÒ€ §ûíúRÔŸ­q^!ÿÄ߇ò¬Ú`zTŸ{ðÊ›REPEPEPEPEPEPEPEPEPEPEPEPEq>!ÿÄ߇ò¬Ú =*O½øåA 8ÁéëHÜ€ƒ“þÕ_îŸÎ€ §¡üèÊÿtþteº:…æÅÜpªðÈÌI>˜ÿ‚«ƒÇ½4´`€r éóPåº:2ž‡ó +ýÓùÑ•þéüè7ú`„.—¿$û⥤EPEPEPEPEPJ ô +ýÓùÑ•þéüé€AÔÿ£)è:2¿Ý?_îŸÎ€"·—Î’`W7*9ôÔ¹_CùÐJ’ZB2ÇÖ€ ¯÷OçH3œdààáºPåº:‚Úc:;Œ;(CŠãüCÿ!‰¿åY´Àô©>÷à?•#ýïÀ*3õig’ ÊçÎ ävªÍo¨,êäe*Ä7šp­‘‚}xíõ¦•ì¡ÒIX#DÊG˜Næ#öÞÕ~#*ª/—€0>gɽù  P±E.±€sƒUäÿœ?õÉÿ˜¤É?Ö7Ö³nm]õŸËÞŠx `äúŒ÷íLZ ÿ=W{ä ïóÑÈê;ñÇëM67’£,²¾Í˜ æ–ãœþ™  ÓÀˆqÓ/ÏOñâ¥ÀÈÁ¤oùŠÛýš­PEPEPEPEPEPKß”PKÈGF¬ÊàdãŸÃúÔZmœÖ…ÄÌ$,N<ޝZ`hQH öë.¿ë«è"¬S½ÜM,j‡ ÛŠŽ0xþ¿…R–ÚöK„òó (dI0ädq߯JGµ¿1ȾcîÏÊÂCÂg§×Þ­éðKN'mÎÏ»9ÎxúPº©§ÿ©“þ»?þ„h”ñü†&ü?•fÓÒ¤û߀þUZKww-ö™×=\Ò¤ý‘¿çîãó_ð£ìÿ?wšÿ…0²7üýÜ~kþ}‘¿çîãó_ð ìÿ?wšÿ…,v¡&´ÒÈÁJäqŸ ö¤öÎîXÝN2s€Wü)>Èßó÷qù¯øSû#ÏÝÇæ¿áGÙþ~î?5ÿ >Èßó÷qù¯øQöFÿŸ»Í€QÆS,’1]¿9ÀUŠ@PEPEPEPEPE‡8 1Sê:НöFÿŸ»Í²7üýÜ~kþÀ>Èßó÷qù¯øQöFÿŸ»Í€²7üýÜ~kþ}‘¿çîãó_ð EoäÇ"¬²eÉ%Î3œcÒ›öFÿŸ»Í€²7üýÜ~kþ}‘¿çîãó_ð ìÿ?wšÿ…doùû¸ü×ü(û#ÏÝÇæ¿áR[À¶ñìVfÉ,Ku$ÒŽñü†&ü?•fÕÖIâ&Þч}ÿþµ3þ&ÿŸaÿ}ÿõ¨°Ãþ&ÿŸaÿ}ÿõ¨ÿ„‰¿çØßýj,øH›þ}‡ý÷ÿÖ£þ&ÿŸaÿ}ÿõ¨°X?á"oùö÷ßÿZøH›þ}‡ý÷ÿÖ¢Á`ÿ„‰¿çØßýj?á"oùö÷ßÿZ‹ƒþ&ÿŸaÿ}ÿõ¨ÿ„‰¿çØßýj,øH›þ}‡ý÷ÿÖ£þ&ÿŸaÿ}ÿõ¨°X?á"oùö÷ßÿZøH›þ}‡ý÷ÿÖ¢Á`ÿ„‰¿çØßýj?á"oùö÷ßÿZ‹ƒþ&ÿŸaÿ}ÿõ¨ÿ„‰¿çØßýj,øH›þ}‡ý÷ÿÖ£þ&ÿŸaÿ}ÿõ¨°X?á"oùö÷ßÿZøH›þ}‡ý÷ÿÖ¢Á`ÿ„‰¿çØßýj?á"oùö÷ßÿZ‹ƒþ&ÿŸaÿ}ÿõ¨ÿ„‰¿çØßýj,øH›þ}‡ý÷ÿÖ£þ&ÿŸaÿ}ÿõ¨°X?á"oùö÷ßÿZøH›þ}‡ý÷ÿÖ¢Á`ÿ„‰¿çØßýj?á"oùö÷ßÿZ‹ƒþ&ÿŸaÿ}ÿõ¨ÿ„‰¿çØßýj,øH›þ}‡ý÷ÿÖ£þ&ÿŸaÿ}ÿõ¨°X?á"oùö÷ßÿZøH›þ}‡ý÷ÿÖ¢Á`ÿ„‰¿çØßýj?á"oùö÷ßÿZ‹ƒþ&ÿŸaÿ}ÿõ¨ÿ„‰¿çØßýj,øH›þ}‡ý÷ÿÖ£þ&ÿŸaÿ}ÿõ¨°X?á"oùö÷ßÿZøH›þ}‡ý÷ÿÖ¢Á`ÿ„‰¿çØßýj?á"oùö÷ßÿZ‹ÂDßóì?ï¿þµð‘7üûûïÿ­E€ÁÕ.>Õ|ómÛ¸3š©@ÿÙlibstruts1.2-java-1.2.9/doc/images/how-to/eclipse/developing-eclipse-style26.jpg0000644000175000017500000005531710404045236030136 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„   (1#%(;4>=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀ2¤ÿÚ ?³©ê:„z¥Ô0\ˆ¢ˆ.Ѱ’ÿ\×M:Q”S± ½u3¡Õõ¹å–$ºPè¡€òÁæ®=ê8-Ñ<Ò&~%ó<ø‰fÚ8^¿—Óó¹)[`æ‘^Ó[Ön.Fê4áŽJ¯ðŒŸåMÒ¦•ì R.Cw¯M”ºzíùvŒ2ÏZ\”û4†‹Ï…Ë\B ÜvàtÿG-.ÁyŠÿX’ÙeKØÙÚ0â0ƒ8Î(p§{X9¤H×:â)ÝwpÚz·|²irÓìÃu¯©`×½GËÇSéè ´ûäS“Ä´R¼o:†F*FÅê*Õ2yä4xTÿžãþøáG±‡`çáâ-Oþ{ûàQìaØ9ä(ñ¥ÿ=Çýð(ö0ìòx‡RÿžãþøáG±‡`ç¿ðj_óÜßü(ö0ìò5ýGë‡ýð(ö0ìò¯ê?óØßcÁÏ!Ã^Ô?ç°ÿ¾'FÎÅî¡ÿ=‡ýò?ÂcÃçbwPï0ÿ¾Æ…Ï!ßÛWÿóØß"cç¿ÛwÿóØß"cçbÿm_ÏQÿ|Š=Œ;<…þÙ¾ÿžÃþù{vy ý³}ÿ=Gýò(T`568j÷¸ÿZ?ï‘Mчasȯ{‘ûÑ×û¢—²‡`çåÕïÉß"eÁÎÅþÖ¼ÿžƒþù{(vy]Róþzÿ㢗²‡`ç¿Ú—óÐß"Ÿ²‡`ç£S»?òÐß"eÁÏ!ÃRºÿžŸøè¥ì£Ø9äÚW_óÐ~Beçc¿´.ç§è(öQììQ¨\ÿÏOÐQì¢ìp¿¸ÿžŸ £ÙD9Ø}ºãþz~‚eçc…íÁþ?ÐQì£Ø9Ø¿lŸûÿ £ÙG°s°ûdÿßýÊ=ƒsô{(övk›ûÿ¥Ê#çc…Ôßßý(öQì.v/ÚeþÿéG²ˆs±Eħø¿J^Ê#çc„ò{ô¡Sˆ9°óäþõ?es±|é1÷©{8‹5ÒF$Q 2"–Ù¸gò®v×c[åÔ®¿î“Ë•[ÍÉÈò¸öõ¢ë°Y÷&¸Ô|‹‘oµË•Ü#hàõüºPÚ]Ç-â)õ Äœ˜”þ”;_@[z¶—b÷mss$ÈÓ¿+`?úÕQªâ¬„➥KmK¸ÏÙîn21•YáÚ«ÛIt"MM†Y7\݇ˆn$?<Œúu§íåØ9û_i²¨š ®1’Ç×µ¼ƒ‘‡IÓã”l¼¹GFÚ3&9ivD4èúXRßnŸ9>oOÒo.ÁȇÉáë xŒ¦kª!ýøíG·“舌išfåQwrXüÜIÊñœš=´»"ý“¦g‹ÉÎFrŒ~^ô{yvf‰ú|˽%™Á'æÞJ=¼ƒÙ¢ô!‘<«ž›˜éG·{48hú@ý¥ð:üãü(öòf‡Á¢ésñÒ1Ú†@?…ÞAìÐ’èúdl–YPœ–*=¼ƒÙ :V” pä¯U þT{y³D°èVD7”©ÿh…ÞAìÑZn• ÈšAìHÏò£ÛÈ=š§é[IqÔÉ¥ÞAìÑ4º-Œ1¥Ú=ÅÚAìÐÕÓ4Ó³¾_î‚ßýj=¼ƒÙ¡Òhö±î-+ª‚O4{i³CN°$t2=N(öÒf‡G¦ØÈ–ä`Œõ{i³D“évVÈ­4® ñ’@äÿJ=¼ƒÙ¢(í4É$“±'§Ì(öÒf‹_ØÖßÞ“ó£ÛÈ=šì{ïIùŠ=¼ƒÙ¡ÃH·¿çKÛÈ=šì›Wüèöòf€iPâÎm öhwö\¯ùÑíäÍÓ ßó£ÛÈ=šû6WüèöÒfƒû6WüèöÒf…þχÕÿ:=´ƒÙ þχÕÿ:=´ƒÙ¡~ëþt{i³Aö½[ó£ÛH=šYD;·çG¶{4/ØãõoÎm öh>Ç«~t{i³B‹XÇvüèöÒfƒìÑûþt{i³Bý=èöÒf…òÔÑí¤Ížô½´ƒ‘ å/½ÚAȃÊ_z~ÚAìоZûÒö²D@Ú| ìä>ö-¼äŠžo"¬!Óm‹*Äž§yæŽ{t {8ÜÍ'=xhæò §‰.ªUF@¤Ýõ¬u÷0ù¬và’<ôÁíïHdqC ±"%D'¨ h²Y$³4“¸`®óOJ–8Ö EAÐn8 E”-#»bFcž\ñ@¶Ö¤Õc㢉®hÄŠ­Ùlô'å@}’ùIÈçæ=(¿`„ BÿsŠž «¬AÀµVM6rÅ“ýãÓŒv”5…³Kó"ä¯ÜÞ@÷8  â·HX˜ÑT‘¼h%·Žc™QXƒ–?ZŠ;b/ò‚\äåé@Q6aQTdôɤu´‰cù€eãœ` úsùÓ©e–5÷;4’TFÑ1\wç§é@¥œ1J©n™fÿëPÒÛ¤ð:HÄ=€=>´ØYF³6ã‚9ñÓ§ÖŽuŠ”l(ã' ë@ΰܞayqžãúšŠ; 5pP|ÑñǯšZÂúŸÊ€ /©ü¨ÂúŸÊ€ /©ü¨ÂúŸÊ€ /©ü¨ÂúŸÊ€ /©ü¨ÂúŸÊ€ ©¸xA—ÉÆx  ~oEüÿúÔ€>oEüÿúÔ|Þ‹ùÿõ¨ù½óÿëPóz/çÿÖ æô_Ïÿ­@Í迟ÿZ€›Ñ?þµ7¢þýj>oEüÿúÔ|Þ‹ùÿõ¨ù½óÿëPóz/çÿÖ æô_Ïÿ­@Í迟ÿZ€›Ñ?þµ7¢þýjã¼Mÿ!fÿqjŒ§÷˜îþ”†U6°†H ë(?;9È#Š."vV3+‰H@S øõ¤?1ŒuŸÖ˜{·’ß *y3%Ônpñ¦pò8¦·†l©‰KŒüsBlÄ«døãÐv  eU•eNÄcô£`*ÙÛÉ€¨v ù®(`[Ue•ØÊY[P…¤t6S.°×ní可ÀùÛßùÓD«yÁĤ )‚}sÖ ‘ÀÏñÿì´ÀÍ»µ–âä:îB¼È#¯^¼Pš¦=Ì8<ŸÂ€*Ý$²Z„‡ïÇ\c§ÿ^€k ÃlSw<íRs·Ú€*ØZÜ¥ËM;•=:çpç¯&€o4òm\í$`ç…ýzÐõù EgÜGz@S¿´e“fÞ2:ã#ü)€Aa ‘Û¡n:b€ý™oÁódÈÏSž£üšL„ûçääãóï@" J‰ :ž¦Þ¾´o_Z7¯­×Ö€ ëë@õõ zúн}h—»QwUɼ“Æ6ŸóøÓþG­ Z2=hÈõ #Ö€ Z2=hÈõ #Ö€ Z2=hÈõ #Ö€ Z2=hÈõ #Ö€8ïÈY¿ÜZ¤]rî’‘+ç®X.?:@5•$…à‘À‡úЫF×g ûÍ»±Àâ«•Û˜/­‚FŽ)r>×9vü*@7Ÿ/˜2F{tü½èspg𠬺–YÁ<…Z&û®88íþ\C€Fû­Ÿ¦?€`õ?ÿ .asŒóø…UFIÇåþ»F:ŸÓü(€)è—øP!ÕBÌH¯ü(]÷Iü‡øPddŒ);ŽæÛÀ {Q–8‡øP ¤AïÇøP.Æ8Wéð  qµ­ +]]}¼g žN3ì=é]uerÃ!Êç ŒQ`.¢ÑHÛ sàªÃ¿ï@ }YQŠ˜¤Üq‘žƒüh° 5Lí+zÃ9ã·ãúQ`'·¼º*:í廿2}hÉõ 'Ö€ ŸZ2}hÉõ gžHžHžA#íb¿À0y>ÔÈÔµÍÇÍŽW°ô¦¾Yþùü‡øQp,ÿ|þCü(¸–¾!þ\Ë?ß?ÿ .åŸïŸÈ…òÏ÷Ïä?‹€ygûçòáEÀ<³ýóùð¢àYþùü‡øQp,ÿ|þCü(¸–¾!þ\Ë?ß?ÿ .åŸïŸÈ…òÏ÷Ïä?‹€ygûçòáEÀ<³ýóùð¢à6E+0n@'îŠ.%â3»SÝÓ1©ý)ÙL¤É‘¸Ыb‘µqƒÜäœçƒ@örMóŸp «mÂWøx''ÛŠu¼r=ÅÁD,/LzSÇ‘?üñoÌò'ÿž-ùñ¢ÀDÿóÅ¿1þ4XÈŸþx·æ?Æ‹yÿÏüÇøÑ`"ùâߘÿ,äOÿ<[óãE€<‰ÿç‹~cüh°‘?üñoÌò'ÿž-ùñ¢ÀDÿóÅ¿1þ4XÈŸþx·æ?Æ‹yÿÏüÇøÑ`"ùâߘÿ,äOÿ<[óãE€·!!£a޼ñ¢ÀBò‡·fUm¬™ð KÄ?ò_úäŸÊ˜}Îï3 [7aHoܧ\ƒƒ‘ÐÐâ}ÅúSo¼Ÿ_èhh¸ÚH°§9===Á  óGs ¬kÎÁ²zcϵDÜ’÷UÊVêTNt™¢“ä –$vêzÖ²÷¥¢!hT‹H»á£ºÄß0õÏ?Ö¥¦´c$].ýA&wfÆ8ç=.Ô€´[Ï,¢Lcœãø‡<Ÿ~•0¤ßžQp@Á“òþ´€C£ßÈZéÈ#¾x }"ú4e¶”í'!IÁüÇç@C¥^DŒ7çpo—œséÏ艥jX5Ãäçíþy FÍ„RCgsΣúûÓÅP ßõ´˜·—b×ÄÎ6–ÈíÈÖ€!TŽI$AåAaÇc?ãE€‹ûF5–&û2ù’ðÅHã§z,„ÔbvRNX.p1ÏNôX ´€( € ( € ŸJÿ[uþúÿè"©¡@P@P@P@…{Ä—ædI®T tÞäu¤hìB7 ±àýq@—ˆä"?ë’*`u—Ó,1»È 0.8 ö¬å.Uq«ucaxŸx„ª žHâý)7ÞO¯ô4´’«o¡ \&øYr{š«qZØ1¸”<@eËrÇ~(½µó*éì³ß\˜›¼/PTgÐÓ³k˜JIì9t»€Ëåê@œœŽœŽ~¿"‰àÓ¤ŽO1®]› 'åœöÅW‹J‘YÀ½cŸ¼œãŸÆ€i“„‘´2cËëÇÓštzD‰´}²M€ŽF@ü{лŒ1²µÇžÅ³»=(È ’}¨ € (…ïúÚL Ü$,ÇU${ò?Z@@—ðÈÄ$g 㨦-ïm”¤BŒ³a@PF3Œñ@èãb²Ç´† mç<þzÄ%dgFUV cœŽ9ýh°íî’à†?0Ç^”€ž€ ( € (}+ým×ûëÿ Š¤…P@P@P@PWûíõ¤À¡qþ®_¡¤âùúäŸÊ¨ºôÚ˜Ú·HÙ8çýj–“щ¤Õ˜Ûx’ÞÌDŽ]y Ÿ¥UÊmt7“î/Ò}äúÿC@ @ 'ú¶úlÑù±2ŒÐ;‹) Œ±!Üîr2ztÿ ‰ß—A¤žã,4ß ÜHÒÓ»{-RQÔ…7aƒBDpb¸–5ã* çõô«(zéL¬ º•€Î$g#¿j`Ó<Õ%áO.£œñœœúŠ?±HxŠÝ°XÔ*®Þ˜Ï^´cÈFúSÎxÈî}ýèþÆò‹{‡L Rñ@Yinë#ÎYÁ…˜ÇZÑ € (…ïúÚL Û«˜à–5’=Á9ÆpBuKUù=¶sþx¢ÀH÷IBÑaJnŒl~4ê‹q±c;X.{PðÝÛÌ›‘>]á eÇ4€EÔm°J†Î{/ZvH/#¸”¤aŽ6{Pš@P@ý:hãšè;`îSÓýš´› š&T 2vžø¢ÚØ3 “½;ÿhåb¸Ñu PÛ° îÉqO•…ÐøåIs°ä}A¤ÓC¸Ï¶A¸®üqÏ¥>V+¡ ì/Ï÷€ `çã4r0ºípÏQÔÄô£•…Ð帉¡iUÃ"ç$sÒ•ì.¡ÆKà9§ÊÂèr\E"³#‚ïcµ'‚èoÚíÿçªôÏáO•…пi‡~Ðÿ0 c3ÒŽVB}® ãL烎´r°ºí¶ûr$Èè Œ.‰Xã ]±¸à{šI6;•÷‡ùÔðy-YFãý\¿CH7Ä?ò_úäŸÊ¨¯Qµ7Ž›wÆÙ†AúŠ@6ÖÜÚÛylûŽXð0¥t)÷éL¾ò}¡  “ý[} -ÄQ’yûǽ2+uŠyeVbdêAANM¤ŠO§@ò’÷+ËÇ®pÏaéA#bÒã†æ.à“ÌẞO?RhW"€ ( € (  ÙóxÇâi0*OUCøÿõ¨J:Gÿ?JR™):cüŠFöÑÈAh£Êœƒ’9ü¨â hŽ=¹Î;* …Fq|õÿ8  ´’©'¸ÿõP1ß7¢þgü(|Þ‹ùŸð æô_Ìÿ…7¢þgü(ù½ó?á@Íè¿™ÿ —N†9e¹ó1 ?ôT›[F‰†3–WäôÍw¸¬4[B¬&9ÎO_òMÌ,ƒìÐçî˜ëG3 Žâ'Ë]¹ëCmîöX7nòÆsš|Ì,„k;v#1Ž:rhæad(µ€6áÏ¥Ì,‡cXÌap‡¨¥w{ŽÃ~Í9LçÉ4s1XÚ(ÕÖ4Úïb‡&÷ !¤!vìí·¯QO™…¿f‹ûœä§·J\Ì,/Ù¡Æ<±ŒæŽfB}–ýÏÔÓæad=¢F s·§µ+±Ø¬À+=*Xn?ÕËô4€ã|Cÿ!ÿ\“ùUÖÞ€ÎHùHìsI$¾jgiÏ_¡  Ôû‹ô¦ßy>¿ÐÐÐIþ­¾†€€ b(É<ýãÞ€Ç<²#ï÷†zPSm¤™žÚU¤ïæ}¡°\œq×ßÖ‚GaÃæHþt™“¯OóÞ€$¶Ò!¶š9D’3Gœn>Ø  ( € (  ¿ëi0(\Ç+•1ž€ñ¸ŒÇßéH ÆA¤,fP2p ý}©Œd‘jJ›„ÁÈþ€( ·¼’5OµƒîÈê8{ÐLZ€þýZOl_o¥¦ Aƒƒp¡X`c‚8õÅ;ɾãlêìFxÏLãéúе/Ÿ™Tcþ}éú( € [ ü™î®C09ÈUÆ7BnŶÔ#US´œ€x"«‘‹˜ýKà¡ ¶Õ çó¡À9ƒíÀ aÁRÀ’1߯ùïG s o—'j2ræŽAÜ’{%ãr$óØzzÒQ¸6$7K4› íÝɤJl Œ’øG6Æ\Ø?0ÏÖš…Ю,wˆï’å‡qŠN6Äšùa‘ÐÆçoqŒvÿjvor&Gm¸ØH89¥(ØiÜ€j‘HFãÜzãÖ«Ù±sýµ=±•yõ¥È;ˆoÐæ$”r0¸}¹1’?„6ßr ˜’Þå. ìqêGô¤âÐÓ¹ýöúÔ1”.?ÕËô4€ã|Cÿ!ÿ®Iüª€êïft¹Ž4T;Ïñÿž´€"”ÈdÂmE$)+Œü´ 7Óî/Ò˜}äúÿC@ @ 'ú¶úZ(ˆ ’{î4È¡….%t9‘¾ðÏJE6ÚW3åÓì”ù‚è&$ÜÄ{äóÒ™&Œwvò e™#?xt  á=%N¸ûí>€ ( € (…ïúÚL 뤙 sÕ°?.ôǨþïtÑðÃ~¨ï@ 6÷êß»¸\31 ŒàgŽ´Œš‘w *ü$Ó'¶:ô yWû÷yËŸC÷{öǸ Ì—âÙ×Í åþR£óг¹Ÿ4)bIã°é@Òh € (l%1Ü\3“ž‡²Š¸«¡2Û^Hp€·Ê9ý*¹5ÜW]I‘˜° c¾qŽ;QÊ‚ã ì„à@FG^O¯·µ«¸\W¼’><’øþ!‘ž3Ór®áqVê^­ ³àtíÞŽT.]ìŒñ ÝÐHëŒÒå´¬Âú\OµH)„òÁws¯OoÖŸ*É'âp«pFr)$˜7a-îg`c*Ï9çô¡ÆÀÈ¥¼• ÛlÌ#9?áMEub»nrm$ ‚´h¥†û;☣ ÎOjGt ÈAêp0?§JO/Q*7J»‡÷pàÿõ¨xVð\+¡‹o@9ÍZ¤@P@M¥­ºÿ}ôL Z`´dzБë@G­Š.‘ë@G­´dzБë@ÏdzБë@G­U¾ßZL êåú@q¾!ÿˆÿ®Iüª€ì. óI á€ã=) ¼/GÍ}ÎÙ'Ûå¡Ð'Ü_¥0ûÉõþ†€€Oõmô4´Ph$3¸Ðp5©¹—Éu3g÷€6Hÿ Z\§ÍerœéqL&v_3w}ßКd‰%¾“æ«6ÀJ’wAŸÓ“@¿´ìÂljÃoÆäò3“@ÔìÄ›<õϯa@Á2N¤®F:‚0Gþ´%P@P½ÿ[I™|eDBCGÉØö'Ú€!?Ú{xòóŽøÿ>´ùc¿3Ã"`°ùXgã@ s© 6®Â6ðHÏýzPº*K( sÓ¿úô=¿Ú¼×ûF͘BŽ”€³@P@Bãιh NvŒVåêK¹h¥æÒv’p08õ§î†¢”¼ó8O—>³þ­£¦Žã$F­‚‡Žj#n îGsä(„ý÷Н¨Y‹\ì}ëódíãjN×Ð5"t½ »*G9#š¥ËÔ5[î7 úPÔRTŽàBÁ2s‚EKµÃR6Kßá_Ì ¥Ê‚Gwœ•n\äq€1Å”,Æ*ß”ÎÃ“Ó ?ÏíjO\oo1NÞ6ñPím©KÞÈ*’€j!Kì|«”u­àj;Ë»,p ÝÇlëŸÎ—ºdɸ ÷±ÏÖ¡ÚúŠwêåú@q¾!ÿˆÿ®Iüª€ìådY0ØÉ8¬å+4»ŽÃn>P1Ï;Hì}@«´Ÿq~”Àï'×úZI?Õ·ÐÐÐ@¦Üœã;U´K?·O%»–˜çxÉÇ^ßDTnìSÕŠódI9IŠîBHÜǧýjÉ‘6YÎIùNçlõ?Ï€%†=;í åD²|’ÁÀëè?•Lº]š+*ÃÃu‰ÍO ¥‰=KzcúP”P@B÷ým&uÚÌˈw}Ó÷H=ºö¤vmO*GÓ¾?ÇëO@u¾7HWë÷[œ¿Ÿ?•ue‘”œœŒíæ€_SË8èHëõ í ùÂôû§ïÿÖ  -Íï‰Âyy<¯NônP@O¥­ºÿ}ôT€Ð € ( € ( € (ÍPWûíõ¤À¡qþ®_¡¤âù¯ýrOåTg2«’Tµua­2•–'Ä}I+ 6“î/Ò¨@ßy>¿ÐÐÐIþ­¾†€€ ä‚Fw­eö/µOöoõ¿Å×ôöÍD\nì%b´Òé +Í$ŒÙ>¸ÿëUŒHî´­‰òmÜà*à’N{cëÓô [Ü騉*»Fe#Ç\@¯`&áFNš±o8I T©·þ´-P@P¾ËÏó¤À¤òEvÚH$Æ 7á‘L«—û¿?_Ö˜ çAÇïSžŸ¼ÿëÐfòÔ(c'Êsƒ“Ž:ýhíql½fN }ÿþ¿½)žÜmÌ©óŸ¿ç@.ÆPÊr§Ci»G¿æhÚ=ÿ3@Ñïùš6Ìд{þf€$‘DȲ8RíµrÇ“é@Ãm<×S&(Ë·qÊŽj‘I.¬¶4ë† P @Y˜gŽpOµÔz­‹ùÅÍÓ9ï“í€}ÿJ ye-Ì»’å¢ ásÔ÷ë@fÊÁƒ]?;pAlŒ ÿäп³å.Ú  vb¨Æ€'µ†hcgVSó’sî}(:]>ÿí¯*L¦7“q\•ÀÆ;~h*Ñî:+õŠ1#F̨ÊIf'^½³@íâÉc}$L¾pF*ªY¸Æ;~ÎZ=Ç-•⺰u9rwyþÿ¥h÷"þξÏ3+U™ˆ8$ãú~TÑî9ì/‹f9V0:*±pGLôÏ4£ÜT°»~FN\±²w}Ojh÷-Gi7öx…åĹÉ`X޹Æsœv ’&Ó§ów­ã €sëõü? |Q˜bXËn*0O­ *\«—èiÆø‡þB+ÿ\“ùUØ^oØÆ4ÞÀä)8ÍI´›°16@ë‚[Œ àôö§&›Ð¶Ÿq~”€ï'×úZI?Õ·ÐÐÐ@ WPXÜh­›Ù5ÔÂÝËüGF{{TEÅß”]lTóô¨åcå3<ŽAùIç¾=¾•cך{W‡/‚ ‘Á-NÆh£.I`%³€ùô  7Z…½¤‘¤­ƒ $cÚ€"mbÑ]-ó¿tõ mZÑfhË6Wï|§ŽŸã@MJ l;½1ŽSÏ¥2MbÙ@Ù½› ciçŽh9çIöËâŒ88ëIFæÕ.YK†ASÇPzÒŒþ϶Á[cÇé@€iöÛØܰd“ß­Hm"!W!á’zç9 cVÆÝV6 Oçùó@±€J¾@Àäúcùq@Æqª(l(ÀÏ4vïcùPŸfü©gý–ü¨Ïû-ùP»ØþTÀd‘Ç#!’=Æ6ܹ­>ÎÐ\\\1vL|¼’ Š`\´Ó’Ös*HÇ ‚0íþf(¼·”ç>cîúpô  ( € ( € ( € («ýöúÒ`P¸ÿW/ÐÒñü„Wþ¹'òª¬Ô¦H¢rddoá#4ág$˜=ˆíeóbr²‡`¤úb•¬Àè“î/Ò€ûÉõþ†€€Oõmô4´PDGŒ±]ÄŒŠM&¬Á4Ö´Yd†Ü1‘F 0ÇÕ>T¹cÐ/vG-ù~Fùc>„Ÿò Ô†¡`!‹u¡ÜÃ(¥Aýhë}¦*h>aåôõ­ ¨é‘ᣋ WsZV»´YÚ9¬öºñ÷ô—øP=îŸ-¿—ä—R¿u—·^¿  Ëch+oÍÏÝ }Š×$ýž,ž¿( 6¶ûBù1àtE kn `~è  3ÃV%Ú¤“sIBöåíÚ-˜bÄüÚ€"W†CºØ¢ã‚yõâ€..Ö8ËC–ÆõãŸÔþTÙnn×yXOÜWi8$sÛžh†êð„mó1Áê03ýó  ªáŽ6°úŒRôP)g¹IÈ÷|ÄmÚqŽÇ4ÀoŸxæ3»“‘Ê€#K@º‡hURÇ{$gòþT,— e-‡Þ#íž ]ÀÏ^ô€~q WI$Š­¸Mµ¤a&®ê„LeQ8 zfŸ³•ùm¨ ûu¨pž|{‰Æ3ÞŸ²¯`¶Ûã>jôÏáG²Ÿ`K¨c·óÙÇ—Œ‚;ÒTäåËm@A{l_`•KdŒØëOÙN×° …©Þ|å “íOØÏ°ûm°m¾zg uîzRöSÞÀ>Kˆ£}ŒÃ~ÝÁ{‘þEJ„šº†òÝWsJª1žñJœÛ²@=çŽ0…›ùðÏò©Po`ÜÄ-ÚpùFr9¦¡.n^  »ƒ2Æ2ÈÏò£Ù˰†x®´2+¨8È4¥ AÚH9ÖG ªü®ì•À¡Á¥p9¢•Ý#‘Y£8`CR÷ÛëIBãý\¿CH7Ä?ò_úäŸÊ¨Ù•X¹fUP2KR²°!¶®ƒëÁÍ7{êÝO¸¿Jï'×úZ‚öqolÎT°ÁÎ>†€®Gټ܈ùä°88¢×Ø ðj,ö2\÷mÁP§ïÒªQå“BNã#× f*ÐÌ®Œmÿ=ªF,:ˆwx¢`Xof Û8ÉüiYš…¬bMöª$ €¤ œš`Iý¡c+Üa…A ü2ECý«c"ŒÛen9QŽ Ÿ¥L·–2E#ˆ#RpÊp9Çë@ ]GNXÙÖ„É?»äöÏ¿j¸Ö–³ùrPàexÆ3@( € Áñ­k¦M¹20l\ôÅTi¹ì'$Œ¡â}=•™~ÒUz‘¯ØLžtð”iÛKn¸Ú3°Qì&èoü%zg÷çÿ¾Âa΃þ½3ûóÿßa0çAÿ ^™ýùÿïG°˜s ÿ„¯Lþüÿ÷À£ØL9ÐÂW¦~ûàQì&è?á+Ó?¿?ýð(ötð•éŸßŸþø{ ‡:øJôÏïÏÿ| =„Ãü%zg÷çÿ¾Âa΃þ½3ûóÿßa0çAÿ ^™ýùÿïG°˜s£WF’ßQógHd’9Þ1ÜSNPM\¤ï©¢é´Ío)@l±êIyÏÒ›œ£.tõñeg#•òNbaÔ°à*Ui® Hl ÚUT®T®A= /k+€÷·‰áXrŠ0qÛ©)É>dE•¸Î#êry4ý¬û€ÕÓ­T0pÝ~cMÖŸplm“cÁwñI՛ꤵŠY¼×¶Ý¸Ïþ¾i*’в’iöò&Ý¥~]¹V9ðQ­4À–[xåUWRBôäjˆÍÇT hD-_‘¹#&Ÿ´•ùº€ÓgÝ”'qå‰ä *~ÒH[ÛCl¬!M¡ŽO$óJs”þ %¨©q³² Rç,@êzPwûíõ¤À¡qþ®_¡¤âùúäŸÊ¨ÒiR þaP¤r[ ©hw".Œ€F* (Ài݃V6Óî/Ò˜¾ò}¡   ÷ò¬6¬íð3Æ3Øö åxÞÇæ4Ï<ÏáBO ¬®viò̰î<]äî§Z©.Y4$"k™ ½œ‹ $ch÷õ©ôÔí$ wÛ·{£¦@þt×Õ-S‰-BÄ œƒïÇë@BØ[ UÝ€ €~¿Ò€£e²=–ì¢GîËP‰Š2»J.Þ˜ÅT{Jì\£ê( € ã|qa=õ͸·BÞX;¸=ñþ½)¨^äJ-ìs¶¶7–‹ Ú ‚ûuëǽjêÁ‘ÊÉ¡‹T‘Eoå®POldñKžÊÉ>ìì+öEÁlýÂ;ƒŽžØ¥í ‡ÊÃìÆÂ¿c$Ÿº{ŒuÆiûH •”?áÔÿçÝ¿#þ^ÚÈÃþÍOþ}Ûò?áG¶€r0ÿ„sSÿŸvüøQí Œ·áÓåÙ¾žL,@Ëìl œãÞ¢ÿ˜§ÅOøG5?ù÷oÈÿ…_¶<Œ?áÔÿçÝ¿#þ{h#øG5?ù÷oÈÿ…ÚÈÃþÍOþ}Ûò?áG¶€r0ÿ„sSÿŸvüøQí Œî¼k5ž˜ÑN…7qŠå©%)6"¬çE‘v¸ÈÈ8¨(D±E Xå°:ŸZuP@P@P@U¾ßZL êåú@q¾!ÿˆÿ®Iüª€êïÄþtmB@¹$:㎵påûDÊý(;:•r¿6Oñ`çð¬íß)wmjn§Ü_¥1}äúÿC@ @¯åòm™ü½ý~\dô==è’Hc—]‰žp: Ѐ­epÑéòÌ‚Ü2®NNzfªK•´$"ë¼(öR,™#{â¤c×T†Pßè² ¸œGQëí@ mY#?=¹'i$. œƒøùÐýª®Akl"®à­Ýùvâ€Úây(ÂÜ‚í… Fã“éÅHuȃ0JHíéš’mZ8„DÄçÌàc žß­Io¨¤÷"©(\@P;þ«IÎ]ÿ¬¿ú'ôªŽè%±c¿ñõ7û¢´¨DNž²,( –Vf@Ác÷GÎ\Š[©bš@".Š1Ç?ZvUY\¬‰lèÑþï p¤sí@sǨ;’E»p¹Ç9Ï41f ƒ3Sn=sÖ¦Fo<†Æqž}~”ÉÃ}“ÎòÉ8ÎÀh ér!zÌ2°6 \dúþ© ã…ÓŸùbG^¤ú})Žã~ÚÙBNT6O¶{{ÒÁ¯´,ð¹>ž´ÇrY§hßhŒ°Ûœçÿ­@6@o¤# ÓlãùRÇ=ë'-ÌX¨ÇO˜6/Û[ˆIÚ¹''œz~40-Û3ÐXsœ×¥¸±]³Ê¨a*~€¸“Þ43ü–l îí@›Á”É”Úõ i‘ çÛ“nÃå'­¸ótàóå²NsøPbÇrîê %b§'ÓåŠUþû}i0(\«—èiÆø‡þB#þ¹'òª°¼ŒºäHcÚêxm óŒSk‰¢8¦‰ªƒž·‡½5n…]?…ÜÞO¸¿Jb*]ݼ7¢Ç¸séÁ÷  íjò{i<Ÿx•X.ÀÏÏô©“¶¥Å_BíÍû}‚)íã3œydgëùS‹æW%«; ‚í®ÑÜÅ*„<pó¦"(/J]E ŽP¥ˆ ñþ'ò  ÒܲÞÝ9þt$zŒîè¦ÆA¿8ù¾¾£Ú€"MRä|­c#»,¹€ªÏ䗮˔''8Áãê~”ø5Ü̳[ «pqÐtýhK ×¹‘ã6­ ûÇ¡ú Pê`Ž( ¢€ ç(ÿU¤Àç.ÿÖ_ýúUGtرá_øú›ýÑZT"'OYPF5t0ã÷˜$É^yùHªÐ×Ü&¶}LJ<øPÄ#7ã=þ´….Kh9›RûAÚ©äùƒ;{÷úR3?´š0[(w( yÆ9ú~TgR%¸  !Q…$ôÜ:õë@$ûFø¼¯,&x9Ƕ(½áÔ<Ò-U6ãpsõô gRb~âüÀ ¨Æ1Éê{æ€:‘!UB®dÉ|Ôíïô  6ÍpX ”€d9lû±@P@P@P@U¾ßZL êåú@q¾!ÿˆÿ®Iüª€í%ƒ£ «‚¤{R­½¤VP /'“žÆ„@Ÿq~”À§yq4w1¤i•î}84_T‚+©Ug¸6áS#sϿғ·PNĦâæ;i ‡ÍÊÊ:ÿœùŠ`A Þ¥çF²AŸ™ƒ€p9<{õ {½SÍÙ¾CK´1B6ŒžOáŽhûuúÝ`À^ œ‡d ТúñaSöFv#¦·¶;þ” B÷<Ø61ïííïú|w׌èÅ€o¯zñÇOÖ€"º¾¾D»?Ý'¿ÓþºS|c ,™O9R“ÁöõÅ/Ûï6’l sŸËé¯îRçˆÑäRÀnÁxx  ( €)ßõZLrïýeÿÑ?¥TwA-‹ÿ©¿Ý¥B"tõ‘a@P@P@P@P@P@P@U¾ßZL êåú@q¾!ÿŠÿ×$þU@v¯÷ÍHÉÓóþFše>âý)Nîk„¹bL¡ê}84© 7ªÝNÐ*¦Wkc<ÿõ… !¦Ñ!šílmžÞ/1ŠÊzúÿB?Aú ™H÷|ÌäÀÆxç™ yõo7lq­.ÐÅ1µryü±ÍjÔ’ï>Q{|œ¾™Ó4(¼ÔKþ‹¹Èçƒíþ'ò ^ê=ì†1Û?ç¿é@ŽîýÙ€ûñ×ü?Z„]êBêLÛEO§=ÿ­J/®»?ÙÎíà( F᜴bÂk‰á/s…³€¼ôõ  4P@NÿªÒ`s—ë/þ‰ý*£º lXð¯ü}Mþè­*§¬‹ (L¾K©Úİ¿aùP+ –dg*—À¡úf€hjÚÎÍø§ÔûÒ˜¢ÖU Ž rߟZ̬»pÓ’x#–?afK4R;FRR›HÅ@Ú L—,‰v#fä Ïå@šd¶ð´…fO<3I"4syaFæ˜ÚdÚKóâì’GPyëÿÖ"¹YiâvX€~P‚IÏ4Æ$p²@Ñù‡œá²I´!û$ÞYj}Øë“þɤ+1â r¤È§[8>˜ v#[)€}ÓîÜ»yž½?ÒY“ÑÈìò– °¦2jP)¥TwÏbiAÜKlÒ.pÈXgÜRñü„GýrOåTjÿ|Ô??äi 6Sî/Ò˜îä¹[ˆÄ+”îìh R+yåU½‘£P™MŒFNyþB“K¨ÓkbB÷‹clÖè¶ÊÜ{ÿL~4ÄC j¢d—˜6B…#9õ"èÚ0¯8Ç_síùô  ò]ê‘Lçìᕘ* qŸN¿¯é@ûN¬p~ÍÂôàœ|Š”Ü_ PÍóË}ÕüèÅŒ—2Á¾î%ŠB~êöb€ (  wýV“œ»ÿYôOéUÐKbÇ…ãêo÷EiPˆ=dXP@éak!­îä,[‚9ãùQaò´,šLL«'ÚˆŽ5 @nÏJKý޾icq)RÊûO¨Ïùü(ͽŠÁfÖÞc•9ù²sϽ2ïO[›D·ód@„ÀüÝ=i§b£.WrºhP«FÆy˜«n9o½È<þTù‹ö¯°ûÍ";«¦¸i\¨^8úÔ™ E #7Úd*Ìo`E £+Rà ß¸ãç§å@}7ÜLÏ–ãŽùíï@Zù»Ì­÷Ë`žpzþÄÑ‘¯žä˸Žp{f€4@!xþÕ.[0àð1@E¥$s¬Þs–Y ã $ÐÅ‹yF?0ݳ·Üó@ÀÒ€ ( € ( €2ï?ÖKøÔ°($lH?ê€ê=(/—Kœ¿ˆä"?ë’*¢Õþù©9:~ÈÓ@l§Ü_¥0)Ý›¡s’>Nÿ‘ 5H­¥•Eñ`¡>]„ŒœóÓð£N£M­‰í¿a¶k`7…•¸÷þ˜üh+«,虀fÜX(R3ÇNzf€×Wi0ŽU\vü«“ÏåÊ€ ê©vC<9ävÈéŸÆ€%j‚% —Ç%€ö÷úÐ%ÕóÌ1cáïî*|rj›Ð´2dîîL·¶Ì@óW;¶`ñÎ3ŠB}lqûäàžÜÿ »qÊfAœ+gƒ@ {ûTÎfRA#“2EH·´>p‘|¿ïÅ+Ïh®ò(Vû§=h1ynßvU#æù‡A޹ íÖÛK,ªØì:öÿ@¼¶y~rïݳè}(ŸÚV›Ô ”†RÁ‡L¼þ§Q´ œ¼3Û‘‘ÏÒ€%ÆdØœ•éÜrhñºHã`ÊzÞ€€ ( € ( €2ï?ÖKøÔN/ù'ýqʘ§ˆä"?ë’*`v¯÷ÍHÉÓóþFše>âý)Nð]}¢?$üÿ#ÿÖ  ú¤v*‹õb»>M¹=ú~º6¶%+xlm±PáFånã¯ôÇãLDÁª$ɺV`·#gŽþžßã@ðjÍ.bˆÒòIjäôüü…5D»óP³E“•'Ó#¦}(UþÕ(]»±Él{~>¿¥êùäEŒtöÿëþTøÎ©½7ˆ°~÷N:ÿõ¨%þ×V`{eKî4¦]Mí£hâħvC€8ÏJжó¾ÎŸhÛæãæÛÐ’€ ( €*^ÛÇ;©1ÀãGò4˜ZœÀ³ˆÔÑ©9$çŸz¨î„ö¿ñõ7û¢´¨LNž²,( € ¾xRÕšpÆ0Fv’_jWv ‚;iî% Šmä;ŠÛ{`ú«$BÐØ`nI@!Èmìq‚AïêÆlîcŠÑd”¬@7q»Œ`ŸøG0ÓaI¢ovR`IžüÒ€·–Ãälf Ah˜#-Žsžôù/l4˩ʄVëÓ¸  ÖÒiŽÌ2ÂsmbØ#'ƒŽØü(ÂM6}ì©+d3 Ãå{ñ@gÓVG*¬Îe ÛK}ìãò俀$XìV3¶Ûå>ãʃÎ9õÅ>K$sìá79ù}} XÑ«î¸bÞ„Œóï@F‹j‹ª02r:uP@P@c^ÜÀ&•LÈÈÆáH"ÿr×ü¨”ñü„Wþ¹'ò¦jÿ|Ô??äi 6Sî/Ò˜.ÒäÜFal'qøq@õO² —íé½v|˜ƒßúRvê5~„†+Ʊ¶û4Š’*Áº3ý1øšb ŠÓRI“3± Í–g$ž8úP=ž¦òü·#irß9È\žŸéì(û>¦·~lrNU›®2:}1@ˆõE‰U$PØäœOo¯é@M\eˆŒtÀööúþB€jÓ|±àýîúÔ.¯ FVù°1ƒß¾{b€?µü§•›ß*»¶óíŒôö  &þÕ`† ˆÛvü»œÐ¢‚r@ëë@P@Ï÷‡Ò“ Yÿ–ßõÉô*¨n„ö#ð¯ü}Mþè­*§¬‹ ( Ës&ÉQ]Of 6¶8cˆ±K¶S@6ÙRäÚ[Ì¢HQ‰G`x$ Œ€=ó@ˆ —O’ëå„+_™ðÁz䊆Kë’U6a˜3òŒŽIô Í9ÕCÛ€*•__¯­IåÛ^¨hì•ØÇ$)Á? ¨¤÷`>h¬mdUkhB”fÎxÇüJ¨SrW@@fÓcWU´]Ì›Šì7=3Ó®+E‡“CsbN$·\—ÉáNÇ?¨¥ì%Ð RKWµ’e‚ ÈA>§'ÔºMID JÞTThŸ?+;õÈèqVðò]@pÕ 3 ØÉúc·§4}^V¸Õíʆ .6çîŽ9Æ:õÍVžÀXšäD°…¼Ö ;qÆ{ý+8Â÷òÕ HÕ|OnßZÃÉ»b;…šÙg„Väõœ ã.Y¨ï‡2G°)ãvGáI¤¶`B/ãûÚ¶I³ `®Ó×ñR?Û؉!?/\ƒß$ÐÖ—ÑÝ[´ª¬6ýå1éž1րɚÑ'‚&màòÖª)7«°2K»À[`súŸÊ£Ü IdPIç½fõr} 8ïÿÈEë’* ;Wûæ¤äéùÿ#M²Ÿq~”À§yÃÜFb| ê=x>ô_TkT•~Ý•J|žƒ×¿Ò“k¨Õú˜.¤°¶ò%Ȫ3žAã#ùÌÓ6Ñ·í B³Í!9ã¥#é×ï/%Q¥Ë!û¹=?>Ÿá@ص»G7Ë“òúíÓ(·Ô–%TœŽI#Ð{}h¨çí(xéþ_Ò€tßr„un:uöúPV-TòfQÉàã§åùz{Ð4šÛ¢G*ù¿1/žNGjжYR¸yqóÓ4%P@C?ÞJL -gþ[×%ÿЪ¡ºØÂ¿ñõ7û¢´¨LNž²,( €#¹”Ãnò£8õ  ( )9* é’(¢„†A‡ Øç€Ƈ9Eçž” n…5*F1ŽÔ©'ÜP¼Àì:P•RA :S»ØŸÝ^˜éEØ å¦s±*9˜D‘¦Ä@«èM»°ËOî/§J.À6&íÛW>¸¢ì ¼ûQv•R*:qÒ‹°ËLcbãÓ]€àŒô€(²E©²D pG¾Zsò/>Ô*ªýÕè(G€ ¨T)*£&õrý 8ßÿÈEë’* ;Wûæ¤äéùÿ#M²Ÿq~”À§yò\FѾÕG¯€+ê²ÚÁ*›è–e)òîŽyëøRm!¤ÞĦÚâko&*EQ“Ôãõ˜ˆ"Ó.£™¹;Q˜î.I ž8ǧ½#éWo&~ÔQ]ÎÝÉ<~J?³ïïÏŽp0~án{ã¶:b€%wâ%D¹ Ç\ûØúþt MHý´:‘õý(ñÚê èZìüY^œ}(­i¨ïÊÞ `uúý([mK* Ú…ÎIŸ§JT¶ÔVPÆåJ§i9àuí@ –ú‡ÛDp Ä”’3ô  ( €!Ÿï¥&³ÿ-¿ë’ÿèUPÝ ìGá_øú›ýÑZT&'OYP@Þ<‘Û;C÷3øâ€)E{|ÌÚ®âU¹Ÿˆ6-Bý¤}ÖLS€TŽyï¥/ö…ñ]Ëbx w ý¨ÍÅÔècò-ÙòÄ6AÅWk»óáo±Œy#»=?,PÝòÈc6à W.ˆ#ãñÅG¡…dÅ‚Œ¬2qŸJbê—í¼g8!A†9íõ  ßN—Kûs`/9Æçõ?•Do¯Ú0E©CÓóŸåбÜÍ1„†Ê¥Oõ‡Z»@P@P@Uþû}i0(\«—èiÆø‡þB+ÿ\“ùUÚ¿ß5 G'OÏùh ”û‹ô¦;»ie¹ÒM«éëÁö  ú­Å½¤ª×Q¬¡“ »ó×ê)7a¨·±)´–{aæ'Epçßý΀X_Ÿ·±ã§?ç×óö GexŽ…¯X÷¿^Ÿ¥ ±¼óýûˆ÷d¨=³Ò€ìoý·Ç$c=1þE=­/|ƒÚw9}ÁÎrX±†h Ûq1šLä±  P@C?ÞJL -gþ[×%ÿЪ¡ºØÂ¿ñõ7û¢´¨LNž²,( €!¼3‹gû0̨”Rj›€’ JçIaƒžþ¸ýh±K«™| 0¸wóÓŸ¥(›W+Ÿ!áx8ëßЋ¹¯=ÐCÓvAÃtèp×ߥ@%ÕX! F~Q‘ós‘»Ž(d’ì•.Œ¬Ly\p8ù¹üÿJ³HÈÆQ´î8cŒñÞ€$ € ( € ( € ( € ªÿ}¾´˜.?ÕËô4€ã|Cÿ!ÿ\“ùUÚ¿ß5 G'OÏùh ”û‹ô¦;Ëf–æ7ŒqÏ_j¯ª]Ce*¼è²L Øã{{Òr¶ƒQ¾¤­f×6Ê'1º¨;—œô?Ì b+ä,sÆc¸A±˜‚£æäçÿ­@ &Œ²H]®T!—{¨’@úòhþÌoµùÑ]"¸?p®:LP£O›ÉU[Ò«ÀÈcׯç@ ý›t?åþN˜Á'Ÿ×ëùûPãÓîЛéH–äó××ðü¨—zeÄãh¾u]ÄàóÇa@"çx&õ±¼;~bëϰ  ÖÆå-çCrÒ4‹´n' ÁéÏ® Kck=»ÊÓÜ´ÛÏÊp´n€ ( gûÃéI…¬ÿËoúä¿úT7B{øWþ>¦ÿtV• ‰ÓÖE…[mÏÙfÁe%¼²Üãž(µõ*M¨ò“ªÄ0zÜzãÓ"ž…§¶H5F–'Y””–¾R™éŒzz÷h4áb}F‰£Ùn̤« †ÛƒÆó¤dBj*¥|Ð(Ý’=y"€cÔÅÒ«J d±,À3œf€±j  y™"0¥‹NzôôÍKd—¨ïö·WR8Æ8?•%ª^+§Úd‚ÛŠð1Æ8üèÀ}©‰'ËØç¾N¥I@P@P@P@U¾ßZL êåú@q¾!ÿˆÿ®Iüª€í_ïš#“§çü4Ê}ÅúSå·›s™‚c¶zõ  ú¥ÚXL¬è$ó7l§½°Ò¹+Y‹‹e3˜ÝTËß§õÇå@Šðép$ñùwiò3 ÷¹9Ç_é@ &“nòí@ïp8Ï$€y÷<ýhjµç›â AûƒŸ\wÏLP—Ig(EéU©Îpõõ"iRf{×wݹx8^éŸÒ€ý™#C}ºS³ ‘ž~œñéÞ€ö˜š5¹?3îÉ+úÐö6­iÇ™¦brY³þ4b€ ( € †¼>”˜ZÏü¶ÿ®Kÿ¡UCt'±…ãêo÷EiP˜=dXP@Cx†[gYT··J§-µÜŒZ+¬ƒ È @'?áj’âÖîf ·^YòÙp™'8?Ëò k;£¿%r3`sþ4䵘%“Ì_5˜åÝ à~• Øæ²f!ìä ¼ˆï“Ï¥tB²µ¦µ¥Ò¶~Úy#ŽOJZÊ=µÒßj7ñrIïõ£ÚSìü‹‰täD¸ .wo Xuéžô”àª7k l¯¼ÀÂô›$˜ô«ÚÒµ¹@Skrþ>K6ÀŽ{J¤/°Ü[I&ž!ó¶¶0ÌÄóÇøÔÆ¤cSšÀD°M¼“xî;FãÆGLÛÒ­Î6ø@lvŠ® áÜÆsþqÞ›­MÛÝâÎëp-xßyIð@ëSí!²ˆR?%Ò8U,Ù'vxÆ+IËV[Ng–O<ùm·j€˜ “úΤ +!‘¤q‡”dð8sE€–€AèAÇPn]Ûr7c8Ï4ì÷iUþû}i0(\«—èiÆø‡þB+ÿ\“ùUÚ¿ß5 G'OÏùh ”û‹ô¦;Ët’æ6i‚Û8ÏZ­¨ß‹;°Š†BÈ$'¾(»è4‰æ²¬íâž-“:¶2ýx?… ‹J·I£Ûq€®ÛTpz䎽¨—E€¿,Ä(“Ìn0É8'ñ<оŒ<ÿ´yå\qŽ'±i—WûC6Ðãðïï@]4C0‘®ÎòÁ²G\ X´à/„ÍrÄ£1Ž$ã4¢9Áj(<Ä` ã<ô $’q@¼ðÆÛ^TR;ôÿ@Iþãà=JVeE,ÄI ²Œå‡yé@µK¸¬£ó§m±ŒpN?*L =FãÏ7X ˆ¾yþµQÝØ…ãêo÷EiPˆ=dXP@Ayj·pylvá•ÇpsBШ¾WrŠhn^_µI‡vrƒ“ŸÒ«˜·SKXu¶Œ¶óÅ)¹™ö•'‚y¡°u.­`¸Ñ¼û§›ír¨v¢œ˜ìi\J¥•¬Mg§-¢L¢W“Ìàoçhôýhnâ”ùˆ±ÀRáÇÉ·¾9éšDÿf…}é!S¹[¦Gñõ4èÊДó˜’na¸á±žþß­9t¬<ó‚ mÛÇíŸjoöS-Òȳ¶ÍåØsÛÎ(é¥ùj¨“mUŒÆ^Ù×Ûõ4E¦4[±9mÅNqÁú~´3ÛÂX4n‰ÁcóúñZ*-@¤–œ| úuÇ^•³Ä/åÀ²L®ëάgž@?ãüª=·dóÃç°q.ÕUe8¾ÿ…D'ʶ¤ö(»Ý•F@¼ôþu´+7¢ˆ]GÞLmp‘†=È#ÿ­ùÔS”£v `Hˆk†û¤#œg>´Ý}o`šhº‹ÆÈeÉsŽ3ÏÒ©â.ïÊÐéÞTË'œä‡,FN‰Vºµ€uÅ€ši$ÞºªýÜã4¡W•%m€ŽM5še‘nY ¶ìúŸj¥]%nP!ºÔ!‚÷ìÌÇÎ`YWiäz湓ʹ2‚ñîÇÔR‘ñü„Wþ¹'òªµ¾j@ŽNŸŸò4ЗY4°*fX¡ó9í@œ¬ÓpÁ—¦Ö w;õ¢àC{ Ý® ÉÍ»*}±Þ”½åfT_+%G1¤*ŒAˆ`ƒ‘éúP´Vww+MiÜ—`cèãÜ wÓef,îC.Ò§tÇOÆ‹=¼Inó2n>hÚA<(ö¢à@Ö0’p\Ž>ƒÒ‹€«gïù¤ùýONþ´\}‚=²,¹sÉÏùïÍEµ‰ eK¨Bå8$€$sÛõ4\ìqyâV.~mÛIã®qEÀl–»î&N˜Á9\Y ¥ó$Ë6ìg—¥ÓÚC/™ƒ"ù„ó“üþ”\‹(ÄB0ÎÇÝÀéŸË­Ëg‡ËËòNHo`1úf‹¬´™'rþ[§ï02qϯ=ó@ ‚ófXç!ÃrëÏzkZƒ4Èò3BäàôÓ¶ ZÓ­£ÓäBÍ•çu7&Ä•‹ÚȺòž$ýÜˆÌ ëR2ÏÛ÷ûqþà¢àn?Ü\íÇû‚‹€}¸ÿpQp·î .öãýÁEÀ>ܸ(¸Û÷ûqþà¢à6ç’y#Ú "©Ž‹?žÞ‚‹€yíè(¸žÞ‚‹€yíè(¸˦Â6rÙV,:Ã¥™ *K¿ËŒ /AÐt¢à5´ˆE2PTƒÁGáEÀ·¼pZ5²ŒÆÙÎzþ”\ aÄ0¤H£b y¢à?Í9ÎÕÏÒÀ†Dó­ ¼¬\0åSÎi\ˆ&À~\§ÃÐ~”\ >{z .ç· ¢àUŸUX.¢¶eý䡊àqŒÿ: <ë¤4åLƒ8 8Ïn” { ŽÐ 9 ˜úRÈø‡þB+ÿ\“ùUÚ¿ß5 G!àyÈãèiFK[™ºr`þízP1ÆÂsö¹?ïÚÐ!<›Ïùû“þý­EçüýÉÿ~Ö€"óþ~äÿ¿k@‘yÿ?rßµ ȼÿŸ¹?ïÚÐä^ÏÜŸ÷íhò/?çîOûö´yŸó÷'ýûZ<›Ïùû“þýŠ<‹Ïùû“þý­EçüýÉÿ~Ö€"óþ~äÿ¿k@‘yÿ?rßµ ȼÿŸ¹?ïÚÐä^ÏÜŸ÷íhÆŸ!!YʪÑŽ~´°Åqf2—fÆK'øP1á$,ÎÄî „ãƒõ ÅË.]žë?­@-nCOÿV½ÿýT¾EçüýÉÿ~Ö‘yÿ?rßµ ȼÿŸ¹?ïÚÐä^ÏÜŸ÷íhò/?çîOûö´yŸó÷'ýûZ<›¿ùû“þýŠ<‹Ïùû“þý­EçüýÉÿ~Ö€"óþ~äÿ¿k@Û­Ì íçgÑúgÓë@ɼû¯ï/ýûÿëÑ  çÝyïßÿ^<û ¤—@ú¿þ½}×÷—þýÿõèÐó¿÷ïÿ¯@Ÿuýåÿ¿ýz4|û¯ï/ýûÿëÑ žèw§'yýz}×÷—þýÿõèÐaçÝyïßÿ^<û¯ï/ýûÿëÑ  çÝyïßÿ^S=ÐÀÞ™#8òÿúôh!<û¯ï/ýûÿëÑ ÊÒEw$…þÒËžÂ1Å>$ž(–0à…Oþ½9„ì¥K ¹ÿ× WÄ‹³TÛéÒ˜ŽÑþù©6ûÉïC@Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ JlÊZ¼Œ°ÆP6wæ7jùˆÀ#·?þ¿Ò –ÛQ’V"U Fg§N¼{PÛT áƒÉÜH °}(´w€$|9Î9#·­1•Z K¢Î½$wã=¾´±kñîóä.N>ƒŽicÒ€ JŠé$r‚>m=qÀ`Oé@íí®£u29 g?99ÿ&˜Å¹¶»æ+/÷{qâãš\Áô¤ƒé@Šä0ßî-POq>öýô¼h>Ó8ÿ–ÒßF€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö™ÿ缟÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Ó?ü÷“þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Úgÿžòßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhVv{ÒÎÅŽÑÉ9 ÿÙlibstruts1.2-java-1.2.9/doc/images/how-to/eclipse/developing-eclipse-style27.jpg0000644000175000017500000005251010404045220030120 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„   (1#%(;4>=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀ¤ÿÚ ?»«jÚ„À³³òBùa³ é×<þ½:qq»%ÉÞÆ\ž$Öu„,˜áNÎ ­=Œ·k¡×:ïˆ-Ž$·ˆû¤{‡R:ƒêåIR¦Èç’ºæ½ä4­ j‚m0¶âO<ÂeNáÏ"?øHõÌöa×ê_J~ÆÃŽÿ„‹[l ·>IëÓZ^ÆÞ@|E­€sn£÷'ƒéOØÓîòþ(Õcr’$HèhÈ4{´bÂW©zCÿ|Qì"/hÅ*ÔsÒûãÿ¯OØD=£þGþ˜ÿß½„CÚ1ßð”j?ôÇþø£ØD~Ñ‹ÿ 6¡ÿLïŠ=„Eí£ÄÚ‡ý1ÿ¾(öhÅ%¿ÿ¦?÷ÅÂ!í¿ð’ßÿÓûâaöŒ_øI/ý!ÿ¾(öi!Gˆï¿é—ýñG°ˆ{F(ñ÷ý2ÿ¾){‡´bÿÂC}ÿL¿ïŠ=ŒCÚ1Gˆoüòÿ¾)ûÚ1F¿zçŸýñG±ˆ½£5ëßúeÿ|Òö1hÅõçý2ÿ¾hö1hÅþݼÿ¦÷ÍÆ!í£\¼ÿ¦÷ÍÆ!í¿ÛwôÏþù£ØÄ=¤…þÚ»ÿ¦÷ÍÆ!í£Y»ÿ¦÷ÍÆ!í¿Û_ôÏþù£ØÄ=£k_ôÏþù£ØÄ=£j÷?ìß4{‡´bZçýûæcöŒwö­Ïû÷ÍÆ!í¿Ú—?ìß4{‡´bNàÿsþù¥ìbÑ‹ý¥qþÇýóG²ˆ{F(Ôgÿgþù£ÙD=£ûBöïš=”CÚ1F¡?û?÷ÍÊ!íá7û?•Ê!í}ºoö*=”CÚ1ÂöcýßÊeöŒ_¶KþÏåG²ˆ{Fò_ö*=”CÚ1ßj—Ûò£ÙD=£]Kž£ò£ÙD=£í2{~T{(‡´bý¢OQùQì¢ÑŽóßÛò¥ì¢/k!É+6r@g…ÍL¡«•ÊNÅ_íX7hd22XlÆÜœ`únµšå½¬[æ9o’Ú¼„õڿʓܤik¶šƒk&{Ks$f%SÈ篯ַ¥R1›%«³)ôýl̯öS…`ÁIr3ϵií!Õ‰ÇM ¼¿ïv6ÌK̲ò¤=9j}ÂÒ×у !¸ e›'ïnî}i^Ÿp´†E· VF4÷(Y1ŽAÇÞç‘MÊ›w¸ZE[½+U»ºyÞÈ#7P…@þuJ¤µÉq“#¦?åÑ¿ï¡þ4{XwIе/ùõoûéÆŸµ‡päïì=Kþ}[þúãKÚø¹$8hšüú·ýô?Ækãåbÿbj?óìß÷Ðÿ=¬;‹’BQÿŸfÿ¾‡øÑíaÜ9$(ÑuùöoûèÖÃ’Bÿcjóìß÷Ðÿ=¬;‡$‡cßÿϳßCühö°î’iÿóîß÷Ðÿ=¬;‡$‡ "ÿþ}Ïýô?Æ“«ãäaý‘ÿ>çóãGµ‡påb&û?ñîߘÿ~ÖÕŽUïüû·æ?Æ—µ‡påc†—{ÿ<æ(ö°î’iw™ÿP1Gµ‡pä¿Ù—ŸóÀþbkáÉ!³/1þ¤þbkãQhpÓnÿç‰üÅÖÅË!³®ÿç‰üÅÖÃ’C†Ÿv?å‰üÅÖÃ’BÿgÝÏùŠ=¬;‡$€i÷_óÈþbkáÉ!ÂÆçþyÌQíaÜ9$/Ønç‘üÅÖÃ’C¾Ãqÿ<æ(ö°î’ìWóÈþbkáÉ!ÂÎàõgó½¬;‡$…“ÿÏ3ùŠ^Ò=Ã’B‹Yÿç™üÅÒ=Ã’C¾Ë7÷çG´pä Y³þ¬þbiáÈÇýž_îÎiáÈÃìòÿsõ£ÚG¸r1 ?¸:=¤{‡#È“û†iáÈÀA&~íÒ=Ñ?÷hö‘î’ƒ÷MÒ=Ã’C¼·ô£ÚG¸rH_-±ÒiáÉ!ÛÒ—´qrHFó‘ÊEf#3`TÎQ’µÊ„\]ìg¦Ÿ,aÖ8cO0çÍc¸ƒœž9>õ’I;ÜÑ·ØÁñü…¤ú/ò¤÷ØíŸï‘•…äl2©3 ã+ü¨° ö¤ÿžsÿß–ÿ ,ö¤ÿžsÿß–ÿ ,ö¤ÿžsÿß–ÿ ,ö¤ÿžsÿß–ÿ ,ö¤ÿžsÿß–ÿ ,ö¤ÿžsÿß–ÿ ,ö¤ÿžsÿß–ÿ ,ö¤ÿžsÿß–ÿ ,ö¤ÿžsÿß–ÿ ,ö¤ÿžsÿß–ÿ ,ö¤ÿžsÿß–ÿ ,ö¤ÿžsÿß–ÿ ,‘È$RBº€qó¡_çH ã‚Ir.GN´ï²MýßÔS°Ù&þïê(°Ù&þïê(°Ù&þïê(°Ù&þïê(°Ù&þïê(°Ù&þïê(°Ù&þïê(°Ù&þïê(°Ù&þïê(°Ù&þïê(°Ù&þïê(°Ù&þïê(°Ù&þïê(°Ù&þïê(°Ù&þïê(°Ù&þïê(°Ù&þïê(°Ù&þïê(°Ù&þïê(°Ù&þïê(°Ù&þïê(°Ù&þïê(°Ù&þïê(°Ù&þïê(°Ù&þïê(°Ù&þïê(°Ù&þïê(°µ˜uQùŠ,}šOAÿ} ,öy?Ùÿ¾…`'ÙßýŸûèQfä?û?÷ТÌÈöï¡E˜ ä°î¿÷Т̲•88ühµ€â|Gÿ!y~ƒùS¶¼iM‰ƒïæLÛA9lsL ¶æâ[9@m²B¶ìàã¶G<Ð$¸Õ9wˆ ÎGÈ_¹xÆ?àTÄÚ³ÂÒ DãljICŸ—ŽçÞ€%7º±*@»1€æ&òyÇnÜšsK©K*ÇÌL’à0ˆ•e‰Î0}(VÝÞKxžDØì€²úr(ôP@P;î£ðþ´˜ú“êLH´Äs<²àºãäP2NON˜üh@Q›Qñ ÖÍåÙ¼E°";“ ¬O^y,1L¢2LHIÉ díÇéÚ€@P@P@P@P@P@P@ ØþŸJb#'ôúPóȦ;vüÅ1 ϸüÅ&~Ÿ˜ 8õ¥E'Þü=ª%¸ÑÄx‹þCýò glÿxÒm+þ@ëÿÿÐ0,\Ý {9eU,ÑF[ig€)m¢Û;KYQ‚2søÿ  ·Ö<ØüÓ ° ãæ`p@ç¦sÖ€$þÔLÐ\D|Õ]ÇÊù—c“ŽyZìeš9mç,…TÈvÎqžžÔª:P@P@S¾ê?ëI^9¤pôÿµMýóùð¢àj›ûçòáEÀ>Õ7÷Ïä?‹€}ªoïŸÈ…ûTßß?ÿ .ö©¿¾!þ\íS|þCü(¸Ú¦þùü‡øQpµMýóùð¢àj›ûçòáEÀ>Õ7÷Ïä?‹€}ªoïŸÈ…ûTßß?ÿ .ö©¿¾!þ\íS|þCü(¸Ú¦þùü‡øQpµMýóùð¢àj›ûçòáEÀ>Õ7÷Ïä?‹€}ªoïŸÈ…ûTßß?ÿ .ö©¿¾!þ\íS|þCü(¸Ú¦þùü‡øQpµMýóùð¢àj›ûçòáEÀ>Õ7÷Ïä?‹€Ÿi—ûÿ ÿ .ö™¿úð¢àh—ûß ÿ .ÀO>Oï~ƒü(¸ ç?÷¿Aþ]…ƒÍï~‚‹°°y¯ýãù .ÂÂy­ëú .ÂÃY‹š¸Wˆÿä//Ð*`vÏ÷ &Ò¿ä¿ð?ýÓì‚3nÂ`¾^ß›wLwÍgË&‘ qI£qdò÷åTì p[#ëÒ€ 5K„MÆ%žpHýoz,.¥u”HâÁ'—Úq€~÷Óõ¢ÀY²¹—>]Î2Äìlž[Éh¿¹„€c+)#v?N~”j7Adv„àãnTã>ƒùõæ€'¼¿ž cH /½{©àÿ‘@ ÝÄ—±Dêel)ù€ ÏÓ P?´.c¶C"#I°36œ\ãõ :•Ðfg]¡Nžyëôöýh°Ï}$*¸‹,Ȭdœä{cŠ…u+¢Ø6ø]£æ*GãOð -åÌv°·’f,…™€ÇC@ ûècPðfbs‚02Ü}xYK»“ 1…wü…G |ÍŽ~h6Ô.<‰%³äÄð=Èó ‹ëÖ–ü•EÝ’§ ì}øýhÐjRHϺ,ˆÉå€w cÇ4Þê ÂÞlc²rÄž1Ž8È  /&ºÜY;òIÌÐ1!Ôn›íñó…Î 8ú~¿ö¸»ŠyÈO12ÅAÏÓêOé@ MB餸3Œ€yç¿j.' Ãö¨#…_RÏëÞ€ ƒRºVxÞ0윀À‚ÀçŸ`1E€±k4“í–±íÎí¤®9ãœQ`4©P@Åx‹þCýòª¶¼i6•ÿ uÿÿèF˜ÞÞ)aduù]v·=TŸKK‰ –êâY »o_›h=:ãÓ$Úe¼òÉ,ƒsHÊÙôÛŽ?Jt;e’VÜß¼ÀèÙÏ?‰  °‰ÓqÜÛ~m£±'¦=èé£E„Å+£BX©Àï׌PA¢Ao*™<(.¨¾T·ÄÞg(…ˆ¾Sמ:cµ u¬ˆËy ¸ÿΖüðüè77Û„˜&\ˆÌj3±›8üWùP ºÕ–ä’Üíò|¤€qÔ=:š’9õR‰<±•-þéS€r1ŸÔþ”ù.õUÓVQl¾q=bxÏUÆFp?>ÔE&¨n`2 !BHÙ¸ç zôÇ_zµÎ.nD‹&@»FT9Áã"€*Û›¨ôÉãarÓlm’wìIÁÏò  º‰¿”»Ú‰‰ˆÈ\Œ ž=~j®¯Ï˜ÈŽd0¹B2º•ëÑZXfÕ${V™LhÎLcû£ã‘@ÝíúÜ7Ù!g_íe'nG ã¡ï@–†ci¸ÇœTÀƦ(Z( € ( €)]ÇÀÿ=©uFq!‚A<§nzfŒ£§ß$K H¥QŒ©*9Éæ˜I‘éòÆñ3´²92àsúPí¡¿[‡’i7 U7ðXãôë@Ëà¾üyç?—õ¤" Cþ=ÇýtOýPÚ­ºÿ®¿û(¦'â?ù Ëôʘ³ýãH ´¯ù¯üÿB4À¼]c‹{°UQ’O@(h‘dfp\¿û¿óó7ýü4Ãì+ÿ?3ßÃ@\d¶Æ¡¥žVPËÁrrr1úЭ?ÖÝ×_ý”P#“ñü…åúåLÙþñ¤ÚWü×þÿ¡`X¸µ’ý‡š…rNq‘@׎Yät˜¢¾p§'oÊûw  ZMƒÙDÞc&æ‹Á<ŸRsרPú( € ( € §}Ô~Ö“;Pÿl¿îµ š°W•”ÚÜK6àVL.qÏn)4ïª.:l͈íl`±ÙD ƒ¹ßv4F*;&ÛÔ•à²WW}˜aòî96ñÐ ¡šu‹»N‘# FrWžãóë@ ,ì­ÚÂÙ*?@S@ – $…2óc9Œõúb€,¬Â¤"(ÀPv¨ã½+XÛ5ºÀЃç Ï~¿Î€[ZÇ,{cE‘FéÏë@“lÓJûPÈv—çÓ¦hbÓ¤·vˆÂÐჲ¶FÉú@Ϙ…£¹1œ®ü9ÎãÛŠ—ì6jæ"ƒ2.B“ÙOPzÿ<ØY¬j¾B*F;mèD‚ Fˆ¾ZÊ@sœþtÓí;.6·ÓÓé@,l„˜ǼqÜ ñød~”±ÙZªŸ&5^x+ØŽ8ýhƒNµÑã…C Â·qÆ(ÍP@Rºÿ^?Ïj]Fb]ÜÝEwû¨$x‘pp O×°üÍ!·¹»’æ4rvIÏ–ÃrüÞ½N´±]^G³bV|œu#Û gß=(¾¿Aò‰aYƒÇ$÷Ï·­i[ÜHÐï¸cØURpÇç@ zÁ­ñ*ŽF:0¤­?ÖÝ×_ý”S“ñü…åúåLÙþñ¤ÚWü×þÿ¡`YœJmed˜ÎpsŠÌ_íhíÓg˜r1°…%qŒsïÎIÏJŠáuo³$²¾C+–ÛÏ^ýxãZ-ã¾X„˜³B`ºÁTyõÝÍ!}VæÏfÚëÙP6ïO÷Zx:ÓK#áׂ .9Áç×àн—ŸöHþÓþ·7~‚€& € (  wÝGáýi03µùËþãP€«¬£È’1È_&P852×ñ.660ÛÄ3x›rg•9=)S‹Š³ ´ÝÉ.tù®]”ȱ«+esóÏØδ ­‹p’H>лq„r¿1RÊqÆ9ý(Ðèl-đʪ۲ÊI =¨K+ ôã$»šíߨ'ÜäãÚ€#:)a‚M¯ó—G%”îlãÀÇ·q@ mO,ªÝÇï6[–'<÷Êçé@:Lû©9çåØGóoÒ€…Ø “G´å¶gx=NHqŽã•:Êž)|ÐJ&㜰>½?*´–’Ç<î®…e>`IÀàçÜÐ1éó%ŒÖ¾j‘UHb Ôç:­y¢ÍztË` 8È#hÏ4õÒeÜÁš=£Saä’¸ôé@ þƘÜK#ÎŽ²ì*p?6=zP¾1„D“F±Žv…# zôã8÷ ßi3\GÇtWgr:t鎃§½>ÛKk[¦š'•  ¯ÜÇך¬4Y¤™æÉ(3÷wîÛ‘@tP@P âÂL¦7vÏN‚»oç¬÷Áÿoç¬÷ÁÿjAr„”6ÊOR##?­;mïüõƒþø?ã@ÛßùëýðÆ€$SY%‹h`ÇsÁÏ­>Óým×ýuÿÙE9?ÿÈ^_ þTÀíŸï@6Úá­´4uRßë2äðXð)~Ò᥄³¸îTŒ ÍP‹\„sG¸Ûž>ƒ“§=MY¶Õâô[yLŒS~OnœÌPú( € ( € §}Ô~Ö“;Pÿl¿î7ò¡GZkxÀsrLò2¶î t¤í±pWÜÒµ¼šk·¼ˆâG2ÀcŽ0{ûTÒ›’Ô&¬ô$¼º¸ÈKmîê¬@UÁ9®sÇñøV„Cª^‚Ñ< ^%ÚÊc;³ƒó18¼PÇ}¨\ˆ~A‰9_)ÈaƒÏQÆ{u  :~¡s4’}²·Œ·9BO€+ý·RFÙÄÞg̶>o”1Ûƒß46¥©¬eþƹ=c|¼°ç×sï‘@oï2²íù²Æ ‘ŒÙÁçû¿…2KPòg•íˆ%°™F+éÔ§ñ  b¿ÔYy!òÕ£r"±äŒþ§é@“S¾M9gcÌ'¦çÏFqÇÖ€+½Eîaߪ2#Ë s…'±ã¯¿J³Ä¿i¹W ´$)#žqÏ4VÞâåtË#ÌÓª1Y ’è6Žç¦(®¥u|K=©”L*žh9ǯÍ@EýÓK8A†o-±‚xb½‡õ4ƒQ¾kç°G»¤M–ô^:ôæ€ ¶Ô5YnÇî6«‚ 1±AŒòš¹k¨ÞM3«YC`åHõðO¥VþÒÕ%·¸)nªÈ6®#l±=ϧ´jòþx’ÞÇ!¿tÀ· ã®=hm*êæî’æ‹P'“ÏÖ€.Ð@PÁ™€ÿ=©_hþðýimÞ­G÷‡ë@Ñýáúдx~´É!MìÜdêN( Oõ·_õ×ÿeÀäüGÿ!‰~ƒùS¶¼iY¼Qè±0Ë‘œqËsÍ0-¬öñYK/—ˆãR]@ñ@[ßÙK$‹±bh“àpGùõ  öÍa–æ2²yCæØìPŽ¡oäÉ">ÿ/†UëœãRµÎוc~rŽpW´“êV°äUœmž¸ÿ?J_í+/ùù¦zÐ5+,ö˜ðN:Уk4ÉR‡g®:qñ  TP@ïºÃúÒ`gjò —ýÆþT +ê¯pç ¥Š6b¨ dåE)YjÙq×KðßFöÑ<1’N 9ö¢RWD´Ó³s¾ä-Ø€£'ëÉñªص[WPIJ1MÌ ž ÆzgƒÇµ5µ‹R±´;æW`¥‘ã‚}:ñÒ€%‚öÊýÞ&)ÉÈ SX´Ü±ÀüÃhRq´ãŸÐP޳`˜Í…ÄTàöà㞇ò4 RØÈ¬¼ÆÊJ³ä´‘kVr$Ò ?w2ÀÁòäãð4äÕí$|#3&Æ0)Û…ÆyühÇU±â´§–qÈ9Æ}Gn”ÔÕ­^dY¾`[qB¹Ïn¼ôâ€'Žé$’e@O”ªÛ†0ÀŒŒP0j+5„—^K¨KÈ-ÀÏàh Ýf;' ÂXy{Éã§ò  ÿ´­Äªc¸ü‡p9Àqœõü¨mZÍ[ivÉèmÏlôéž3ë@êöLN&8ìv§ç^ÈnÝ#.ÞQ‡?Ýé×Û­KöërÊ¢MÌFv¨$¯×Ó¨ë@lY´bXKÍÈbW,ž8ç·µJuPèžgÌøÚ6œõ#úlš­”r*ƒ3T -»'c¯4°ê0Í Ä¨¤NÓÏâ€-RÒYÄ .e$ €ôÍ\ €)]ÇÀÿ=©uVŒ›‹›ˆ¯gêOHã/×åù~¹çð¦­Î§Œ˜U±Ø!éëÓ©íÚ€./Ìd¬AŽÒT¯AžžçÃ4jÉæ’Ü5Àòz8úiÝCþ=ÇýtOýPÚ­ºÿ®¿û(¦'â?ù Ëôʘ³ýãHÎÙ.tDI9Q¿ €Aå©ml [9!p<·R€0¸Æ(7Òí.™*¬¡t@R¹Î>™ ÓI†8%Žy·NÕ|P` óØPìØ<§@\n]¤ƒÈù‹2h%ÓlMÖòD“‡ÜA-דùšE²fRPüª¯\wÏZôk`ÌdšO-£)aóáyü±ô  F³‘ò±`{{“ßÜšš:&ŽXË«"Ç=Tv4j€ (÷QøZL íCþA²ÿºÔ )jþSÊcdºtGÝòcðO8þ´šo¡qi-͸l- ´¤a ~Ò¼c‚1ÖˆÁGbdï¸ùlí]ÔÌC« vÈ<†Ï?îʨCH²î©ò?!ˆPyäÆy<ÐÓO³·d•Ëd!ÁnyäòqšTÓã´f·>£æzxgÚºF¬72ÚÁˆ<œ±ãÞ€¥Ùm ä€#ŒrO÷Ñ ÛNµgò™‰ùƒì-ÏÝ*9ëê~¹ 4» 2"ÊÙb$mÀ‘ëœÐ‹¦Ù¬i Ç…P@ÎpO××€Ó-ÙmÚ3å®qóœóœóœ÷4ä±µŽHÙ#Úè»W ~ï<{ŽhÿfƒÍ’LÍ´·ÎqÇN;PIkfñHîF\‰IàžsèÒ€ žËNù’啲7ò`…À}8  ?³íR›s€W2è=sóPÿ³lÑ‹˜ùËs޼ ÐF™`#P"xÁÜ}ñßÜп³-<²žYmćl“Œœç¥=¬m™Q|¼*.À‘òúu(‰¥Ú ;QÆîIó$ç žzƒÓÒ€¥ÚoÝå±ä6 ±GÇRM9ôûi.vçR|Ä Ž‡3À þÏ·X#VŒ>z1êAÇN†€4Û[y„±FC€K éÜЪ(…öá'È@nÄŒãŠ@gyWóóýúÿëÒžMÖsöˆóÿ\úôÀ_*ïþ~cÿ¿_ýz@UßüüÇÿ~¿úôyWóòŸ÷ëÿ¯@ {k‰@Y.¨`ıÐçÖ€iþ¶ëþºÿ좘ŽOÄò—è?•0;gûÆi_ò_øþ„i=Õ»\X̓$eFq‘ô  'K»IPÃtUP±ã$œä€0}01@ßF¿x¶5È89BelÇ×Ð ç?†(a¥^‰ãaxÂ5mÛD‡×ÜñÆ(S§Ü îž6D3>å9ÊôíoZ†m.þYË ­‰´áDŒí!{v8îs@ m&þG•~Ѱ G23£ {c¯¨  =:Þ[[_.iFÉ9-»Žò  TP@S¾ê?ëI¨È6_÷„}aguHbÚ¬²–$Ê£ ýMLõÐÒj^³²º[X•㌘›*Ž~VÈöÏJšJQVb›Mݺ±¸¸b€¬`«|Ù,â àzà7çZW‡L¿ÝÊFÔpĸ?(^ƒ¨çÚ€“tÂ1s7™µ÷nó[ `€¼ùñ@ÙÛ^X³Ëq$·eÀQç×ôêh¤Ïû¹#•ùËFÒ03d:cÛÒ€¤ßÈ[æÞÇæmíórÙõÆFߦ(:uæ|Å!|ÂùùBÿVÇNÙ Ť_Ç ªnƒ4‡Ÿœä1óc¯·j|zMÚ"»Ü .6:³—oâ#§åøg4é4ëöÓ’¼o4¥úuÆnOlçÓµ,:TñÜÃ+N[b~sÇ9aœN:P¤¶™..yl%2Ç“‚NZ‚>h´é­„££*©bqÀœsÞ€*ßiW»Èd‚ˆÆXò6Ž„vÎhÒé·n¬›ŠŸ”FÂBv Ù<žzúP¤Ó/¦óÝ®HûB#£ÏŽÔ/ØnbÓᵄ¨1²áÃÐòO¶;Pô»›Y${™Ú@@¾am£$žÃÔv  ( € ( €(^ÿ­ÿ>Ô˜éP@PkOõ·_õ×ÿeÀäüGÿ!‰~ƒùS¶¼iRK…‡ïfLp Ëqš`_²if·`ìFxÜ$p:q@"»Ô HchšPaÜÎêKÁôãŽ=èmµ NFS%ª„Ý´ ŒžzuÏNÔ³@P@P@ïºÃúÒ`gjò —ýÆ¡GZè¢WA#É## ämÇ€qùÔÏM‘¤.úšjIc yâIv—ŒŽ:sJœ¹£vLÕ˜ë»é“de ÷K”.ÏáZAµ6 rC™#\2‘†Èæ# ­ «]]y>Tiy˜(NK Ÿ÷hÞ™©K},ŠöÞR¨e²@›S½‰“̆1yƒy'6Q‘»ç§¸  ŸV¸Èx£W§pRv·R?E8úÐwzÝÂ[í•$v ‘QÅhÏq$6vÒnãVÜ:‚FhÔ®Z%Re‰°7Ôÿ“@µ ]í%cbT¬qÝëßåâ€/ÙM%ŪK*ÙÆvƒœPôP@P ßõ¿çÚ“½ ( € ­iþ¶ëþºÿ좘Ÿˆÿä//Ð*`vÏ÷ ,è¿ò ‹êÿú¦Ú( € ( € ( €)ßu‡õ¤ÀÎÔ?ä/ûB¶ªeY »­R2ÛSÌŒHöþµ2Óv\uèlÁwn-¢x",dà$j$}:S‹M^$É4ìÇM{$;.[ »e@9üÀúš¡Z…›üÁ‚;&öpG¸ÁãÚ€&­h‚2²oÀeA8àõüºP‚[+òÐæ)örT€Ãë@ǪØ"IUv†>]§Àé@iÙ|ßé)…ÎÏzoÛ­<ဤ¸Hrë… TµJÂA²,eºñÏëŠUÕ-]‰(o•›rŒ·¯?Ho­–1™|³š€#]NÑæH’]ÌùÁãóÖ€&[˜ÚIPnÌ@Çž=h5(g°{ÅW"–#‚H=‰ .µk{'`cló .N:}qŠ˜ê‹ `ÃæRKãž#¯sùV³R K»,Tmçþ\u Gw¦E!’3 HçæeNO~Húu A5’Þ˜m£ŒJÛ·”PëùÐFÄÆTFqüCóúÐÊ( € (  ¿ëϵ&z@P@ZÓým×ýuÿÙE09?ÿÈ^_ þTÀíŸï@YÑäÕÿô#L ´P@P@P@S¾ê?ëI¨È6_÷„iài|‰%Ÿ¾ð y8Ï9¤õeÇDmÚé±ÃlJüa•—å+ÆçJPÑ R¹$ú|3¸Ò)B9ëÈ'ÿAU’Bº%ª´˜Þ#c‘8U<ò?3@C¥ÚÛm\Û‚–à·<ýq@:bY«}…„Lp uÜ1ùŠS¦@ÉrÛã݇SŒ94ÖÑlš1–vŽ@ÏNXýÐN“QrT0m½ñ´¨©?"h–+F†[,CsŸ~Ô"é6©¡Â*•7bsüù }Íí¹Bg‘Œœç¯æhDÓ-‘Ñ•NQ<±“Wžç@-¤k+È¥Ô¾ÐB¶ Ð `°‹Ë‘<ÉH”ç' ä(¼ú]œ»ÒæBÄŒŒ¶PþhãK„HÄÈå›Nœþ4Ø´[hפ;Kù¾à9ÈÅ=t‹EÎñ´ ºœùšHt«K{“,eÖFa±Æs@ EµI’fÜÒ#nÎp3œÐP@P ßõ¿çÚ“½ ( € ­iþ¶ëþºÿ좘Ÿˆÿä//Ð*`vÏ÷ ,è¿ò ‹êÿú¦Ú( € ( € ( €)ßu‡õ¤ÀÎÔ?ä/ûB ]nŠ$VñÈHňèÊiNïBád[µ¶¹k8£žâ&ÿU!áÐÔRRQ´‚voBK»K«ƒåÆ`+m,r«»hãè7qïZW‚ÏTž à,kµ9 W/cÓŸjtZ}ü‚%»•˜£î&#ÇzšÉo¬ÚIo¤’pÀ ±‚Üû8 Fz<©cÈÄ›£-´€ÍÆGãé@XêÂ3‹²\ýã¼ôËg·~œÐm/ŽÓ–3) ½›°Fç?VüÅ6 V8fÝ0/+v‚À=Îþº|vˆT–YËÜyn¬|ÂÉÆ=‡ç@’×U:r"Ü~üï`ޏç¿lПz·0Ë$ìÛPç2‡9ÉÇqÀâ€-$¥ÍÃVYB Û±œ 1Çj­„ðé“Ú,Q…te_˜œ2@ïÍVÔ4ËËÍìUÂþfí´t>™&€&û-ó9Éa°aAä‚I#w^Ë@%ާ.ÖšF%³™HÞ~`ôôï@%Ž§Ñ®Ú§”à¶ß éǵImk¨¦¤g‘ã ¥Ï#8ô(¬µF–,LÑÁŸ˜oÁÛ»==qšÝ € ( € ¡{þ·üûR`W¤@P@­?ÖÝ×_ý”S“ñü†%úåLÙþñ¤þA‘}_ÿB4À»@P@P@P;î£ðþ´˜Ú‡üƒeÿq¨@QÖ£@žUwy$dÀrã€qS+-‘p»êkA¨¼–P¶øá$íi|«ÆGq×ëJœùãqIr»¼Ô^<½¬T6vÛx2X~U¡$0ë¿.Ù"]è0Ü•mÀá# duíšDÖ¥¹x‘I“k#KÉàçŽ:Э7TþЕÔ@ѪŒ‚Ì ?QÚ€+lÎ’ ’ÝUÌÙÂ©ÚØóŽ=ºâ€¯•Œ¹³lo竞8û§>”ã«È6ÍåJ–Îk7Qô΀"ƒ_/ò´ ØE.' 7æsô  "ÖÞUY¼…H7a¹þbAv÷þ´é5ÅM=nþÌø=‹ g8=ú{f€-ZinaO³ª£¡¿’Glp9àñúД½ÍÅÄnQvÚ§¨,:Æ€+[êR6y%’/´FŒÃ·…±9ÐmOW¸€—€®Ï(vÈÜFsŸÄP‘«1bû¤jw*>íÄœ §ô?äP&¶Ïpb[BpÅw è '‡´Ö×J¸_³+æ=û’aŽüsN}(±ëR™U#”1] 1]™ ׌ž[Ðp(a×İaV(Ù‰b_$(R~n8ì .uß²ÎÑ5¾öËò¾: ޽s€6W%AaƒŽ@9ÅP@B÷ýoùö¤À¯H€ ( €+Z­ºÿ®¿û(¦'â?ù Ëôʘ³ýãH :/üƒ"ú¿þ„iv€ ( € ( € (  wÝGáýi03µùËþã*u_3Íi¾Vì)rÄx¥-5eÇ]³ÖqÚ$¦V\aQ $éíDmk¢]ïfI-ͬ.$`7A r  œþŸ‰B+«&E’ ò&ö¶ûŽ´’ê0ó4C~ ŽÏ?J‘…­Þè·$…H,ªÜN”ßX…XüØÕ@nôÚ@9ühO¶Y’Ãí¹Ýó1Ö€#7"p¿&Oïñƒ•?Ñ*r^Ù²È<ÈÂGŒ’FÓÀ9˜ íÖ^h‡Îˆ¶Ö8ÈÆ_ç@´ÖâvxÄM¬HÚh5¾³y’$š6v$(R#¨úó@ ¢2̃ïD~=²>´ W¶ÒÙ=Ò«KPò1ž” Æ£efìÊy¬BŒ?žý(t¸³ó”ÆÑæEÎõ#ÏâZþÍs¶hÝ·Ú„œýhòÜZ@JË$12C8'΀®m¤“drF\ôŒžôĸ±pY!L³È9Á?žhtŽ,eUpÇvq×=èôP@P ßõ¿çÚ“½ ( € ­iþ¶ëþºÿ좘Ÿˆÿä1/Ð*`vÏ÷ ,è¿ò ‹êÿú¦Ú( € ( € ( €)ßu‡õ¤ÀÎÔ?ä/ûü¨@I¨hÓ_"(¹DE}àÉç¯zM\¨ÊÅ›]1 „!¸`ÊrŽ€exÁëž´¡E`”®î>}5.÷Ò;!\œH'‘Øíd&‡¼€M/”Çr¦s´àŒäò~ñã¥Im¤ClRI6ß·åÁlž¡éÒ€ÛJ[ÆÄ¨sÆe\ñß‘ƒ×Ö€û"#mÅ%MÇzÕŽOQ@ m Í¢þójG ãˆê?Ú4¿Øé°Gæ³Àà)ôêIé@ @µŽ'D’A½²ÄmçØŒc…IoºÃȪªÊH#NyãÔ kèVf-†åå€\·^¼c¹íÅJšUºHŽ ‘ùX8 ¯'Ò€&[5Idt‘Ô8A´`°â€#]9cYdPÁ±´uzc€( ôXnC å“€ àŸËõ  KMÒù’»¬ g8òIéøtô mÝØi ¨ä‚ÇÓý£@ ¹Ñ!–d–”¨U\.é‘íÓ§µ>  y7Å,ÊqŒ‚?ßå@¾‡ ³ f‘Ù„…ðÇ$œr ï@”P@P@/ÖÿŸjL ô€( € (µ§úÛ¯úëÿ²Š`r~"ÿÄ¿Aü©Û?Þ4€³¢ÿÈ2/«ÿèF˜h € ( € ( € §}Ô~Ö“;Pÿl¿î7ò  Äû‹ô¦Ð@P@P@P@P@P@P@P½ÿ[þ}©0+Ò € (  ÖŸën¿ë¯þÊ)ÉøþCýò¦lÿxÒ΋ÿ Ⱦ¯ÿ¡`] € ( € ( € (÷QøZL íCþA²ÿ¸ßÊ€7î/Ò˜ @P@P@P@P@P@eÅ/Ù~ÓpÒ~ïÏmêÍÐgþ]èJ9XÖHØ20ʰèE:€ (…ïúßóíI^P@V´ÿ[uÿ]öQLOÄò—è?•0;gûÆt_ùEõýÓíP@P@P@ïºÃúÒ`gjò —ýÆþT¸Ÿq~”ÀZ( € ( € ( € ( € ( € (2óKʼ°i‹—äö=‡n ¨  ÷yk¼ø€è :€ (…ïúßóíI^P@V´ÿ[uÿ]öQLOÄò—è?•0;gûÆt_ùEõýÓíP@P@P@ïºÃúÒ`gjò —ýÆþT¸Ÿq~”ÀZ( € ( € ( € ( € ( € ( € (  ¿ëϵ&z@P@ZÓým×ýuÿÙE09?ÿÈb_ þTÀíŸï@YÑäÕÿô#L ´P@P@P@S¾ê?ëI¨È6_÷ùPâ}ÅúSh € ( € ( € ( € ( € ( € ( €(^ÿ­ÿ>Ô˜éP@PkOõ·_õ×ÿeÀäüEÿ!‰~ƒùS¶¼igEÿd_WÿÐ0.Ð@P@P@Nû¨ü?­&v¡ÿ ÙÜoå@‰÷éL € ( € ( € ( € ( € ( € ( € ¡{þ·üûR`W¤@P@­?ÖÝ×_ý”S“ñü…åúåLÙþñ¤þA‘}_ÿB4À»@P@P@P;î£ðþ´˜Ú‡üƒeÿq¿•n'Ü_¥0€ ( € ( € ( € ( € ( € ( € (…ïúßóíI^P@V´ÿ[uÿ]öQLOÄò—è?•0;gûÆt_ùEõýÓíP@P@P@ïºÃúÒ`gjò —ýÆþT¸Ÿq~”ÀZ( € ( € ( € ( € ( € ( € (  ¿ëϵ&z@P@ZÓým×ýuÿÙE09?ÿÈ^_ þTÀíŸï@YÑäÕÿô#L ´P@P@P@S¾ê?ëI¨È6_÷ùPâ}ÅúSh € ( € ( € ( € ( € ( € ( €(^ÿ­ÿ>Ô˜éP@PkOõ·_õ×ÿeÀäüGÿ!y~ƒùS¶¼igEÿd_WÿÐ0.Ð@P@P@Nû¨ü?­&v¡ÿ ÙÜoå@‰÷éL € ( € ( € ( € ( € ( € ( € ¡{þ·üûR`W¤@P@­?ÖÝ×_ý”S“ñü†%úåLÙþñ¤þA‘}_ÿB4À»@P@P@P;î£ðþ´˜Ú‡üƒeÿq¿•n'Ü_¥0€ ( € ( € ( € ( € ( € ( € (…ïúßóíI^P@V´ÿ[uÿ]öQLOÄò—è?•0;gûÆt_ùEõýÓíP@P@P@ïºÃúÒ`gjò —ýÆþT¸Ÿq~”ÀZ( € ( € ( € ( € ( € ( € (  ¿ëϵ&z@P@ZÓým×ýuÿÙE09?ÿÈ^_ þTÀíŸï@YÑäÕÿô#L ´P@P@P@S¾ê?ëI¨È6_÷ùPâ}ÅúSh € ( € ( € ( € ( € ( € ( €(^ÿ­ÿ>Ô˜éP@PkOõ·_õ×ÿeÀäüGÿ!‰~ƒùS¶¼igEÿd_WÿÐ0.Ð@P@P@Nû¨ü?­&v¡ÿ ÙÜoå@‰÷éL € ( € ( € ( € ( € ( € ( € ¡{þ·üûR`W¤@P@­?ÖÝ×_ý”S“ñü†%úåLÙþñ¤þA‘}_ÿB4À»@P@P@P;î£ðþ´˜Ú‡üƒeÿq¿•n'Ü_¥0€ ( € ( € ( € ( € ( € ( € (…ïúßóíI^P@V´ÿ[uÿ]öQLOÄò—è?•0;gûÆt_ùEõýÓíP@P@P@ïºÃúÒ`gjò —ýÆþT¸Ÿq~”ÀZ( € ( € ( € ( € ( € ( € (  ¿ëϵ&z@P@ZÓým×ýuÿÙE09?Èb_ þTÀíŸï@YÑäÕÿô#L ´P@P@P@S¾ê?ëI¨È6_÷ùRq>âý*€Z( € ( € ( € ( € ( € ( € (  ¿ëϵ&z@P@ZÓým×ýuÿÙE09?ÿÈ^_ þTÀíŸï@YÑäÕÿô#L ´P@P@P@S¾ê?ëIu4/&bØ`r'Â’j 0øÿ`ÿ…Ûqy¿ïƒþmÅýæÿ¾øPý·÷›þø?á@öÜ_Þoûàÿ…Ûqy¿ïƒþmÅýæÿ¾øPý·÷›þø?á@öÜ_Þoûàÿ…Ûqy¿ïƒþmÅýæÿ¾øPý·÷›þø?á@öÜ_Þoûàÿ…Ûqy¿ïƒþmÅýæÿ¾øPý·÷›þø?á@öÜ_Þoûàÿ…Ûqy¿ïƒþmÅýæÿ¾øPý·÷›þø?á@öÜ_Þoûàÿ…Ûqy¿ïƒþmÅýæÿ¾øPý·÷›þø?á@öÜ_Þoûàÿ…Ûqy¿ïƒþmÅýæÿ¾øPý·÷›þø?á@K©Á!ÉfÏû‡ü(Ÿo·þóß þXíöÿÞoûá¿Â‹}¾ßûÍÿ|7øQ`·Ûÿy¿ï†ÿ ,öûï7ýðßáE€>ßoýæÿ¾ü(° bÁÚá×;Z\‚F3òŠrž#ÿ¼¿Aü©Û?Þ4€³¢ÿÈ2/«ÿèF˜h € ( € ( € §}Ô~Ö“¥ ( € ( € ( € ( € ( € UœŽ‚˜ ŽxeÝå2>Óƒµ³ƒ@Þ‚àn# güúÐäwõ }¢7“¹<Ìgfîq@ æÇæùxùÀÝŽxI4Qmó6®ã´dõ4ÜÞU»:(Ü1Œýq@ðqœÐdwõ ù±ù†?—xŠçœzÐòG€=ÏJvG÷Z2?»úÐÊd’p@hǦþ´ÈxþCýò¦lÿxÒ΋ÿ Ⱦ­ÿ¡»Nà\‹€Qp .EÀ(¸¢à\‹€Qp)ßu‡õ¤À©H€ ( € ( € ( € ( € ( €z7Ò˜2i[¢('Î['v}OzsŸ­쿟ÎBNà2¹#8ïœöü¨I )˜eœ6@ÏNA@»µšI™þåÕAp@e#<õ M$$2(‘78 Ð$ã®qÏé@ m!Ý"I.UÖ,‘•'q>¼ÐÒ[ýžÖà—Sæ:éÈïÖl@U怑ê) Ǽ±¸–íÝC8Îâ»6ü¼c¯jbt¦Üþd©·x#†ÊhÚ¡†Yt‡–9êhlQH öŸën¿ë¯þÊ)ˆäüGÿ!y~ƒùS¶¼i‚G0Ø ͓ѿJ<Ù=ô ͓ѿJ<Ù=ô ͓ѿJ<Ù=ô ͓ѿJ<Ù=ô ͓ѿJ<Ù=ô ͓ѿJ<Ù=ô »‘‚þTÜŸîÒ€ ŸîÒ€ ŸîÒ€ ŸîÒ€ ŸîÒ€ ŸîÒ€ ŸîÒ€ ŸîÒ€ ŸîÒ€ ŸîÒ€ ŸîÒ€ ŸîÒ€ ŸîÒ€ ŸîÒ€ ŸîÒ€ ŸîÒ€ ŸîÒ€ ŸîÒ€ ŸîÒ€ ŸîÒ€ ŸîÒ€ ŸîÒ€",¨RH‹)ê(°ÚÿÏ¢þB€°ÚÿÏ¢þB€°ÚÿÏ¢þB€°ÚÿÏ¢þB€°ÚÿÏ¢þB€°ÚÿÏ¢þB€el"Õr9è(òÛÃ3n–Ü9é’3ì6¿óè¿ ì6¿óè¿ ì6¿óè¿ ì6¿óè¿ ì6¿óè¿  ¡Š8T¬qˆÁ9À€ã¼Gÿ!‰~ƒùUÛ?Þ4€J@P@P@P@P@P@P@P@P@P@P@P@P@Pâ?ù KôʨÙþñ¤”à¸ÏÐÒÚ¿ß‘ jÿ|~F€ «ýñù6¯÷Çäh*©%ÆÏC@ „‰aYA°gÞ€µ¾?#@ÕþøüWûãò4m_ïÈе¾?#@Ï1– ¸ñ@ € ( € ( € ( € ( € ( € (9¤ÂòHE-ÔÐ<ÙÿçÑÿï´ÿc:ùôûí?Æ€:ùôûí?Æ€:ùôûí?Æ€:ùôûí?Æ€"¸½khüÉ­¤TÜ!”õ8õ¢À] 0 `3HBí_ïÈе¾?#@ÕþøüWûãò4m_ïÈÐI"»Èªs±¶Ÿ®þ´ÆøþBòýòª¶¼i²¬o­ 3.Úí.ÜÛ#`ê ^Œx÷ÎÑL–êüÉ*ì'cí8¢ñóSÏJ’/šXäœ2 È(©×€FZ¼²e±±Ç=HöÍ _õOþé ³ÿt?î/ò u)´o$°}Ë÷sœnéÏLÐi®.bD ¼!ÚÉnqž?çÚ˜³j.è¦0›¾ÿÉÂñØç¿é@íAo̲4@f+Žyÿ @N¹`®FpzŠä$ÿõÉ™  4P@P@P@P@P@P@W¾ÿÿë›*h ÷ÖQ»ûGœ|¿38^ß»žû©&Ÿç}•~Ó»ÎÀßž™ÇjµH ÝwþAßöÕ?ô!M¦~êÐR.Y.¢…Ú$•®sódŸ€ÿ `*M¨nO10­É!3·“ú}èú{^I){µÛò``3šÐ¤kOõ·_õ×ÿeÀäüGÿ!y~ƒùS¶¼iYãºg,.”zyCÖ€äÝÿÏØÿ¿Cühònÿçìß¡þ4y7óö?ïÐÿ<›¿ùû÷è#AtÊA»#ê‡øÐžT©oPÌ ’™Î)Ï&ïþ~ÇýúãLÉ»ÿŸ±ÿ~‡øÐäÝÿÏØÿ¿Cühònÿçìß¡þ4y7óö?ïÐÿtò$Í,³yŒT/ÝÆ)b€ ( € ( € ( € ( € ( € ( î"ó­ä‹vÝêW8Î3@M– NµOýù_ñ¦öCþ‚­ÿ~Wühû¡ÿAVÿ¿+þ4}‡Pÿ «ß•ÿ>èÐU¿ïÊÿ2].îu >¤^0ÁŠù g>´\ ó$îÃËœF tٚɻÿŸ±ÿ~‡øÐäÝÿÏØÿ¿Cühònÿçìß¡þ4y7óö?ïÐÿ<›¿ùû÷è>Ú„>ù7³¶âqŽÀJ@r>#ÿ¼¿Aüª€Ü“_;Èû0àãïÿõ©XÿoŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹oŸùö÷ßÿZ‹Ïê×j¿yvíÈg4ÀÿÙlibstruts1.2-java-1.2.9/doc/images/how-to/eclipse/developing-eclipse-style28.jpg0000644000175000017500000005270710404045204030133 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„   (1#%(;4>=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀ¤ÿÚ ?¹«êÚ…¾²,¬ü¦0ÙuàuÎOá[Ó§²\ìf?‰5…˜DÌv©òø&´ö0Ý®‡Üë¾ ¶8’Þ"=R=éAõò¤©SdsÉ ºî¼`iZ×kÚamÄžFáG²¦ò#ÿ„\Èf\çòZ~ÆÞC¿á"Öð ¶P ÛŸ$õé­/cáÏ!?á"Ö€9·Qƒ´þäð}?Z~ÆÞC_ŬnRD‰u aöŒOøJõ/HïŠ=„Eí£ÅZŽzCÿ|õéû‡´bÿÂS¨ÿÓûâ—°ˆ{F;þGþ˜ÿß{Ú1á&Ô?éýñG°ˆ½£âmCþ˜ÿß{Tc‡‰oÿéýñG°ˆ½£þ[ÿúcÿ|Qì"Ñ‹ÿ %ÿ¤?÷ÅÂ!í$(ñ÷ý2ÿ¾(öhÅ"¾ÿ¦_÷ÅÂ!íïøHo¿é—ýñKØÄ=£øH/é—ýñOØÄ~ÑŠ5ûßúeÿ|Qìb/hÇ z÷þ™ß4½ŒCÚ1F½yÿL¿ïš=ŒCÚ1·o?éŸýóG±ˆ{F(×/?éŸýóG±ˆ{F/öÝßý3ÿ¾hö1i!¶®ÿéŸýóG±ˆ{F(ÖnÿéŸýóG±ˆ{F/öÅ×ý3ÿ¾hö1hÅÅ×ý3ÿ¾hö1hŽÏû÷ÍÆ!í£V¹ÿcþù£ØÄ=£ý«sþÇýóG±ˆ{F/ö¥Ïû÷ÍÆ!í£S¸?Üÿ¾i{‡´bÿi\±ÿ|Ñì¢ÑŠ5ÿÙÿ¾höQhÅþПýŸûæeöŒQ¨OþÏýóG²ˆ{F8_ÍþÏåG²ˆ{Fn›ýŸÊeöŒp½˜ÿwò£ÙD=£í’ÿ³ùQì¢Ñ€¼—ýŸÊeöŒwÚ¥öü¨öQhÅRç¨ü¨öQhÅûLžß•Ê!í¿h“Ô~T{(‡´c¼÷öü©{(‹ÚÈrJÍœásS(F*åFr“±WûVÌ2Ü»1·'>‡Û­BånÖ-ó·ˆÉm^Bzí_åR÷)Zí¦ ÚËOi’3© ޼úýkzSŒcfÉjïS)ôíi¦I>ÊÇa °9 ޼ûVžÒv&´Ð›Ëñ÷clļË/,8*IsÓ“Å.j]É´‰×Â,º6î_=ˆÇ-ÀÃW§Ü- Û¯‡…™Â2g;†;³Ó¥>j}ÂÒ×ãead22͸ýíÝIõ¥ÍO¸ZC"‡[†Š+#FÛ”,„cq÷¹äSæ§{Ü-"­Þ•ªÝÝ<ïdŸ¨B :¥R Zä¸É‘ Sòèß÷Ðÿ=¬;‡$€hZ—üú·ýô¿ãOÚørHwö¥ÿ>­ÿ}ñ¥íaÜ\’4MGþ}[þúãGµ‡qò±±5ùöoûèÖÅÉ!F‹¨ÿϳßCühö°î5(ÑuùöoûèÖÁÅ‹ý¨ϳßCühö°î.IþÇ¿ÿŸfÿ¾‡øÑíaÜ9$(Ò/ÿçÝ¿ï¡þ4{XwI 4‹ÿù÷?÷УÚørHwöM÷üûŸÌ/kãä¿Ù7ßóî1Gµ‡påb*ô˹üÅÖÕŽ]ïüð?˜£ÚørHQ¥ÞgýAüÅÖÃ’Bÿf^ÏùŠ=¬;‡$…þ̼Çú“ùŠ=¬;E¡ÃM»ÿž'ó{Xw,…þλÿž'ó{XwI}Øÿ–'ó{XwI ýŸuÿ‹üª^ã[³ýãR2°¼†U&aœebb?•~ÔŸóÎûòßáE€>ÔŸóÎûòßáE€>ÔŸóÎûòßáE€>ÔŸóÎûòßáE€>ÔŸóÎûòßáE€>ÔŸóÎûòßáE€>ÔŸóÎûòßáE€>ÔŸóÎûòßáE€>ÔŸóÎûòßáE€>ÔŸóÎûòßáE€>ÔŸóÎûòßáE€>ÔŸóÎûòßáE€’9ŠHWP>t+üéÏ'û?÷ТÌû;ÿ³ÿ} ,À<‡ÿgþúY€yþÏýô(³<–×þúY€ÖR§Í°Oˆÿä//Ð*`vÏ÷ ’Ç¢D`ûù“v9lsL –æâ[9@m²B¶ìàã¶G<Ð$¸Õ9wˆ ÎGÈ_¹xÆ?àTÄÚ³ÂÒ DãljICŸ—ŽçÞ€%7º±*@»1€æ&òyÇnÜšsK©K*ÇÌL’à0ˆ•e‰Î0}(VÝÞKxžDØì€²úr(ôP@P;î£ðþ´˜ú“êLH´Ä>Yp]qò3œž1øÐ€£6£â­[˳x‹` Dw&Xž¼òXb˜Dd˜“’@ÉÛÓµ:€ ( € ( € ( € ( € ( € ( €@±ý>”ÄFOéô ?ç‘LvíùŠbŸqùŠLý?1@qê?JŠO½ø{TKq£ˆñü†%úå@ÎÙþñ¤ÚWü×þÿ¡`X¹ºörʪY¢Œ¶ÒÎRþÛE¶v–"²£*:dçñþ@ o¬y±ù¦`2ÇÌÀàÏLç­Iý¨"™ ¸ˆùª»•ó.8Ç'ò((µØË4rÛÎ$Y ©ìœã==¨Tt € ( € §}Ô~Ö“¼sIáè(ÿj›ûçòáEÀ>Õ7÷Ïä?‹€}ªoïŸÈ…ûTßß?ÿ .ö©¿¾!þ\íS|þCü(¸Ú¦þùü‡øQpµMýóùð¢àj›ûçòáEÀ>Õ7÷Ïä?‹€}ªoïŸÈ…ûTßß?ÿ .ö©¿¾!þ\íS|þCü(¸Ú¦þùü‡øQpµMýóùð¢àj›ûçòáEÀ>Õ7÷Ïä?‹€}ªoïŸÈ…ûTßß?ÿ .ö©¿¾!þ\íS|þCü(¸Ú¦þùü‡øQpµMýóùð¢àj›ûçòáEÀ>Õ7÷Ïä?‹€}ªoïŸÈ…>Ó/÷ÿAþ\í2ÿôáEÀ>Ñ/÷¿Aþ]€ž|ŸÞýøQpÎï~ƒü(» šÿÞýa`ó_ûÇò]…„ó[×ô]…†³947p8¯ÿÈ^_ þTÀíŸï@M¥Èàú¦ÙfÝ„Á|½¿6î˜ïšÏšM"¢’â(¢]Û#ó"ÚG½J²iö÷O¤qH@Vm˜Œž;PÒiДV½Œ{Woäçò EÓ#PéöU 2àgüZ±ö»o›ý"/”á¾qÇÖ€\ÀHhò[`ùÇÞôúДP@Nû¨ü?­&5ÕÃÅ3 åp™¼nx<}?:¯6£pÎVÀPFi©p‰¸Ä sÎ ÿ­ïE€&Ô®²‰@Õöœ`½ôÀýh͕̹òîz±;g–ãòZ…ïî! Ó+)ùHÀÝÏÓŸ¥FšÐY¡88Û•8Ï þ}y  ïoç‚XÒ(7ï^êx?äPGwq%äQ:„Ù[ ~`çé(ŸÚ1Û!‘Ÿ`fl89¹Çë@ ý¥t‡Ù×j¯ r3ÏQííúÐóßI ®"Ë2+A'9Øâ€!]Jè¶ ¸ ´|ÅHüqéþå¼¹ŽÚòLų0èh!} jìÌNpxn>¼ ²—w&c ïù Ž@ù›ý:Ðm¨\y…J)gÈ=‰à{ç@ ×­,1ù* ‹»%NØûñúРԤ‘ŸtX+“ËîÇŽh°-î °H¦óc%“–$ñŒqÆEIy5ÐDxŽà"ÉØ§’H~f€Fé°ß8\à“§ëøÐÚâî)ç!<ÄË<O©?¥"_ݸ3Œ€yç}ªt¸˜à>Õp«ê@ý{ÐjWJÏ vAXóì(Í­üÒM¶XvÇ·;¶{sŽxíE€Ñ¤@Pâ/ù KôʨÙþñ¤ÚWü×þÿ¡`[{x¥…‘×åuÚÜö4R}).$‚[«‰d6í½~m ôê¦(I´Ëyå’Yæ‘•³é·~”èvË$­¹¿xѳž@4a¦ã¹¶üÛGbOL{ÐÓFŠ# ŠWF„±S߯ ƒD‚ÞTxäu(Û¸= ëŠÒ € (  wÝGáýi0(µ´ÂI"FnÌT1@×êê¥ÎX1íPçìÙ\¬—å÷«$>OSÅ/½'© %ž3@ ˆ¤ð#ämu ‚(ûG÷ÇëHbäˑӃLhþøýh®Ê…a–m£¯ZqÚ£&EÔæ€Œ‡_ÖcBrJœúŠ`.ÑýñúÐ$tnç3m´€uP@Ј¬ÌC7R&€@P@&sž™  € ( €8¯ÿÈ^_ þU@vÏ÷ #†)eÐãðàɆÀ;N[œ`Y³¾—qù€ “·ã¥T¹Óõ ÒÝ„0:°+ &F1ô?Ö€`ÕR&XÜ€@Û¹òc9Ï®r(î”f6ydV.ÅD§,´ËÝfæY>ωH#+Ø•ž¸Ï?J·u=ŽÑpäÄ#aQ´Àdœg­T›X¹!v@†ŒòGò8Sž¾Ô­e9¸´ŽfK ã5P@S¾ê?ëIFæ_&Ѥ;8õ¤Y®¤ŠÊÖªËÔŽÿÝ¡´´)E½K‚ÛP ¶ý5?üM;eÔç•¿ýý?üMû.£ÿ<­ÿïéÿâh°ÙuùåoÿOÿE€ ¦¢F Vÿ÷ôÿñ4X-5ãTHmB¨Àaéÿ|ÓßgÔ¿ç¯ýöøš,ö}KþxÚÿßgÿ‰¢À'Ùõ/ùãkÿ}Ÿþ&€m¨œf Sƒ‘óžýó@ ö}KþxÚÿßgÿ‰¢ÀgÔ¿ç¯ýöøš,}Hõ†×þû?üM/Ùõ/ùãkÿ}Ÿþ&€Öºƒct‡#.x?÷Í;ìú—üñµÿ¾ÏÿE€>Ï©Ï_ûìÿñ4Xìú—üñµÿ¾ÏÿE€>Ï©Ï_ûìÿñ4Xìú—üñµÿ¾ÏÿE€>Ï©Ï_ûìÿñ4Xìú—üñµÿ¾ÏÿE€>Ï©Ï_ûìÿñ4Xìú—üñµÿ¾ÏÿE€>Ï©Ï_ûìÿñ4Xìú—üñµÿ¾ÏÿE€>Ï©Ï_ûìÿñ4X*L˜YÄjäò‘ü©nåEºŽ¼~€êzvö»‡ùQ@áþTPW7·…É,«Ðw8 DVîÏ-Æã²`{ ¢€9ÿÈb_ þTÀíŸï@M¥€tuÈþÿþ„i} 01@ .L31Þ€2ïõqix±ùX‘ŒHÚëæèB…òc”Æ3ÛÚ€6i€P@P@S¾ê?ëI¨È6_÷ùP€¥­IjŠ7˜ÊÊåÐniI¾žeÁ.¦…­ÄóØÆ$3FĆ1óã?¥M&Ú÷‚i'¡%ä—LÂ;a!uV*Êy‚}q–?…hAšš–„Äìñ.Ò ç±Ãnîx{У—S¹ò|Åh\Iž"8*äçùPö7×aõ1¼Xw|¸>™<(.¨¾T·ÄÞg(…ˆ¾Sמ:cµ u¬ˆËy ¸ÿΖüðüè77Û„˜&\ˆÌj3±›8üWùP ºÕ–ä’Üíò|¤€qÔ=:š’9õR‰<±•-þéS€r1ŸÔþ”ù.õUÓVQl¾q=bxÏUÆFp?>ÔE&¨n`2 !BHÙ¸ç zôÇ_zµÎ.nD‹&@»FT9Áã"€*Û›¨ôÉãarÓlm’wìIÁÏò  º‰¿”»Ú‰‰ˆÈ\Œ ž=~j®¯Ï˜ÈŽd0¹B2º•ëÑZXfÕ${V™LhÎLcû£ã‘@ÝíúÜ7Ù!g_íe'nG ã¡ï@–†ci¸ÇœTÀƦ(Z( € ( €)]ÇÀÿ=©uFq!‚A<§nzfŒ£§ß$K H¥QŒ©*9Éæ˜I‘éòÆñ3´²92àsúPía¿[‡’i7&ªoà±ÇéÖ€/‚ûðTmçœþ_Öjñî?ë¢èB€Óým×ýuÿÙE09?ÿÈ^_ þTÀíŸï@M¥Èàú¦âë[Ý‚ªŒ’z@óD‹#3€"åÿÙã?Ê€(ÝiV÷²´²*9`Hç‘@ •S‰€ÜdŒóÓü)¡L€ ( € (÷QøZL íCþA²ÿ¸ßÊ„}ZI£ýñ½–%w(ˆ¹àþ}zÒ•–¥ÆïKðêkhL1î–L¬Ø““ŠPššº&JÎÁw¨‹E éŒ+3n8t=ù Uˆd:Õ´‘‡!—åÉ#C`¹îx4‡Y‰Ö7·ŽIUœ#:­Og©[_HénŶ çu¨|ÅC¡›~ÃÉVÇŒçð ë¶A ’á{6Þ’>¸?•)ÕâÜ)òJƒ¸ðs†8ü–€¹k*Nà‘c§SÓõÉ?•95›yÒF‹c?™Œ”ßë@mfÉm…Ç›òwÇ^£ð4‰¬@ó$j’Ê\±Gñ}:þTf+¡,“*!"5VVÏßgŠ‚ A¤°šåàÚñ)cNGÁÈ4^ÿZ6n@„2ˆ÷r‹Çò  ßV†<³+E%Áá”ä1ùþTkpC rI¼¶ÓŒ$Ÿ§,zµ»Û$§x.B… rNqÀôÏ6¯j¬«ûù<Ì…û«œdþT zä #ߨΊáqœñf×S¶»2‹rÏ匞:ý?*ŠfÖic‰w™$ UBç¨Ïéï@P@BõKI´ ã#·Ìÿ°¯üüÍÿ °¯üüÍÿ a_ùù›þþ>¿óó7ýü4}…çæoûøh’ÚC†–yYC/Éç<~´ëOõ·_õ×ÿeÉøþBòýò¦lÿxÒm+þ@ëÿÿÐ0,\Z‹‹IaÞÃÍB¹'8È  ëÇ,ò:LQ_8S“·åŽ}»Ð­&Áì¢o1“sEÀàžO©9ëì(ýP@P@S¾ê?ëI¨È6_÷Z„MX+ÊÊmn%p*ø\ã“ÓŠ™'ظ۹±­Œ »(°w;àŽÆœb£±2m½I^ %uwÙ†.ãqógÿ𪉧X»´é0”g åyî?>´¢ÎÊÝ£ÄJ„¶¯'Ÿ×­8XE‘nZÜœ|Ñã8ôäAkg$qÆBI´6Ó‘ž¿1ãß­8ØZÛötÀéÓ¯øŸÎ€"6v^o”ØÎCì'ý’£ôõ4©a`Á¢HS(ß63HÏ_¦(âÊÌ*B"ŒjŽ0;е³[¬ 1.p¼÷ëüèEµ¬rǶ4Ya1ÁÀþœþ´y6Í4¯µ ‡i~}:f€!†-:KwhŒ-;+d`œŸ ñiˆZ;“ÊïÜáqŽ=¸  ~Ãf®b(3"ä)=”õ¯ñPÍ…šÆ«ä"¤`ã¶ÑÞ€$H ¤h‹å©  t9Ïç@>Ð3°2ãk}=>”‚ÆÈI {ÀÀφGé@ •ª©òcU炽ˆãÖ€4ëX8T: +wb€,Ð@P+¯õãüö¥Ôf%ÝÍÔW¹‚G‰W`±ýxÀéêh µÍÔ—£“°ÊNá ËózôŽ´±]^GfĬäœu#Û gß=(¾¿Aò‰aYƒÇ$÷Ï·­i[ÜHÐ︌£ØURpÅ%ë¶Ī9è´ÿ[uÿ]öQLOÄò—è?•0;gûÆi_ò_øþ„ifq)µ”’c8 ÁÎ(1µ£·MžaÈÆÂ•Æ1Ï¿9'=(+…Õ¾Ì"Êù ®[o={õãŒ}h·Žù`bbÍ €~ëP ç×w4…õ[›<›k¯e@Û½?ÝýhàëM,‡\0¸çŸ\sƒ@ö^Ù#ûOúÜ|Üú š€ ( €)ßu‡õ¤ÀÎÔ?ä/ûB®²¯ HVHPÇ!|™@àÔË_ĸ;660ÛÆ3x›rg•9=)S‹Š³ÝÝÉ.tù®]”ȱ«+esóÏØδ$­‹p’H>лq„r¿1RÊqÆ9ý(Ðèl-đʪ۲ÊI =¨K+ ôã$»šíߨ'ÜäãÚ€#:)a‚M¯ó—G%”îlãÀÇ·q@ mO,ªÝÇï6[–'<÷Êçé@:Lû©9çåØGóoÒ€…Ø “G´å¶gx=NHqŽã•:Êž)|ÐJ&㜰>½?*´–’Ç<î®…e>`IÀàçÜÐ1éó%ŒÖ¾j‘UHb Ôç:­y¢ÍztË` 8È#hÏ4õÒeÜÁš=£Saä’¸ôé@ þƘÜK#ÎŽ²ì*p?6=zP¾1„D“F±Žv…# zôã8÷ ßi3\GÇtWgr:t鎃§½>ÛKk[¦š'•  ¯ÜÇך¬4Y¤™æÉ(3÷wîÛ‘@tP@P âÂL¦7vÏN‚»oç¬÷Áÿoç¬÷ÁÿjAr„”6ÊOR##?­;mïüõƒþø?ã@ÛßùëýðÆ€$SY%‹h`ÇsÁÏ­>Óým×ýuÿÙE9?ÿÈ^_ þTÀíŸï@6Úá­´4uRßë2äðXð)~Ò᥄³¸îTŒ ÍP‹\„sG¸Ûž>ƒ“§=MY¶Õâô[yLŒS~OnœÌPú( € ( € §}Ô~Ö“;Pÿl¿î7ò¡GZkxÀsrLò•mÝ@è)IÛb௹¥ky4Ö1oy)Ä’F™`1Ç=ýªiÉÉj)«= /.®2Û{º«pNp«œñüDþ¡$ê— ´O‰v²˜ÎìàüăŒd¯±ßj"@âNWÊr`óÔqžÝhΟ¨\Í$Ÿl…-ãmÎAГÁ  ÿmÔ‘£vE17™ó-›å$ và`÷Í ©jk±®OEØß/,9õÀ\ûäPû̬»~l„1¨$gc6pyþïá@ ‡RÔ<™å{b l&QŠä:u©ühXïõTžHDjѹyLNAϧsô I©ß&œ³‹1æÓ sŒçŽ£8ãë@ Þ¢÷0ïU å 9“Øñ×ߥYŽâ_´Ü«‡Ú‘Ï8çš«oqrºeÀ‘æiÕ¬… ÉtGsÓWRº¾%žÔÊ@Œ&O ´ã׿  "þé¥È Ã7–ØÁ<1^¿ÃúšA¨ß5óƒ X#ÝÒ&Ëz¯zs@[j¬·c÷UÁ˜Ø ÆyƒÍ\µÔo&™Õ¬È@¡°r¤zŽx'Ò€+ij’ÛÜ·UdW¶Xž„gÓZµy´.¯dÄâcŽÇaÁúqþq@Õì†íÒ2íàåsýÞ}ºÐ¿n·,ª$ÜÄgj‚Jý}:Ž´öÅ›F%„¼Ü€v!%rÁyãŽ{{P§Qµ‰æ|Ï£iÏR?¡ ɪÙG"¡˜30BÛ²qÆ:ó@ £ ÐÜJÊAÔí<ñž("Õ-%œ@²æR@ØÏLÐÊ(•×ü|óÚ—Q•iÉžæx¯§êOHã/×åÃõÏ?…0nucœ/?–>”#èÖr8vV,rr{û“@C§AÑËudA窎ƀ-P@S¾ê?ëI¨È6_÷Z„-_ÊyLL—Nˆû¾L` çÖ”“} ‹·Sj hmiËá•·í+Æ8#¡…'}É%³µwS1¬0Û ò<ÿº?*²F&‘dÝSä~B+ óÈŒòy ¦ŸgnÉ…+–ÈC‚ÜóÉäã4©§ÇhÍn}GÌôð(þϵtXnd µƒy9cǽK²ÚÉF äž?ï£@¶jÏå3óØ[ŸºTs×Ôýs@ivdD;•²ÄHÛ#×9  M³XÒ  €œàŸ¯® ¦Z=²Û´gË\ãç9ç9ç9îhÉck‘²GµÑv®ýÞx÷ÐþÍ›$˜;›ioœãŽœv ’ÖÍâ!ÜŒ ¹“Á<çÐ¥A=–ó%Ë+dnäÁ €:úq@gÚ$¤36ç®d;†Pzçæ ÿfÙ£1ò;–< çx 2ÀF D6ñƒ¸û㿹 fZye<²2Û‰Ù''9ÏJ{XÛ2¢ùxT]€)#åô8ê:PKµ@v£Ü“æ6IÎA<õ§¥K´ß»ËcÈlb8$Ž3ޤšséöÒ\,íΤ0ùˆ:g@ ýŸn±:F­|ôcÔ‚3Ž i¶¶ó bŒ‡–'AÓ¹  TP íÂO€Ý‰Ç€Îò®ÿçæ?ûõÿפ1<›¬çíçþ¸ÿõ逾UßüüÇÿ~¿úô€<«¿ùùþýõèò®ÿçå?ï×ÿ^€ö×€²\!PÁˆc¡Ï­:Óým×ýuÿÙE1Ÿˆÿä//Ð*`vÏ÷ &Ò¿ä¿ð?ýÓ{«v¸±š!HÊŒã#é@N—v’¡†èª¡b9ÆI9É`ú`b€+¾~ñlkpr„ÊÙ¯ Î PÃJ½ÆÂñ„jÛ¶‰¯¸9ãŒP§O¸Ý=&é„bæo3kîÝæ¶@Áxóâ€%³¶¼±g–âInË€6£Ï®1éÔÐ#IŸ÷rG+ó–¤`>fÈtÇ·¥I¾·Í½ÌÛÛæå³ëŒ¿LPtëÌùŠBù…óò„=þ­Ž³@ ‹H¿ŽTÝi?9ÈcæÇ^nÔøô›´Ew¸\lug.ßÄGOËðÎhÒi×í§$+xÞh=KôëŒ6ÜžÙϧjXt©ã¹†Vœ¶Ä üç!ŽrÃ9œt  Im2\\8òØJe'œ´:|ÑiÓZ GFURÄã€8ç½U¾Ò.¯wÉŒ±ämíœÐ¥ÓnÝY7?(„„ì²y<ôô I¦_Mç»\‘ö„F!F?Ÿ¨_°ÜŧÃk PceÆ'¡äŸlv év76²H÷3´€€|ÂÛFI=‡¨í@4P@P@P½ÿ[þ}©0+Ò € (  ÖŸën¿ë¯þÊ)ÉøþCýò¦lÿxÒ8¤–- 3 æL)m¡Ž[4À¿dÒÍnÁØŒñ¸6Hàtâ€(Ew©@ÆÑ4 Ã¹Ô–-ƒè1Ç{ÐÛjœŒ¦KU »i6<ô램f€ ( € ( €)ßu‡õ¤ÀÎÔ?ä/ûBŽ´-ÑD®‚G’FB7‘·ÇçS;-‘¤.úšjIc yâIv—ŒŽ:sJœ¹£vLÕ˜ë»é“de ÷K”.ÏáZAµ6 rC™#\2‘†Èæ# ­ «]]y>Tiy˜(NK Ÿ÷hÞ™©K},ŠöÞR¨e²@›S½‰“̆1yƒy'6Q‘»ç§¸  ŸV¸Èx£W§pRv·R?E8úÐwzÝÂ[í•$v ‘QÅhÏq$6vÒnãVÜ:‚FhÔ®Z%Re‰°7Ôÿ“@µ ]í%cbT¬qÝëßåâ€/ÙM%ŪK*ÙÆvƒœPôP@P ßõ¿çÚ“½ ( € ­iþ¶ëþºÿ좘Ÿˆÿä//Ð*`vÏ÷ ,è¿ò ‹êÿú¦Ú( € ( € ( €)ßu‡õ¤ÀÎÔ?ä/ûB¶ªeY »­V2ÅSÌŒHöþµ2ºê\uèlÁwn-¢x",dà$j$}:S‹M^$É4ìÇM{$;.[ »e@9üÀúš¡Z…›üÁ‚;&öpG¸ÁãÚ€&­h‚2²oÀeA8àõüºP‚[+òÐæ)örT€Ãë@ǪØ"IUv†>]§Àé@iÙ|ßé)…ÎÏzoÛ­<ဤ¸Hrë… TµJÂA²,eºñÏëŠUÕ-]‰(o•›rŒ·¯?Ho­–1™|³š€#]NÑæH’]ÌùÁãóÖ€&[˜ÚIPnÌ@Çž=h5(g°{ÅW"–#‚H=‰ .µk{'`cló .N:}qŠ˜ê‹ `ÃæRKãž#¯sùV³R K»,Tmçþ\u Gw¦E!’3 HçæeNO~Húu A5’Þ˜m£ŒJÛ·”PëùÐJÄÆTFp>ðÁ<à~½¨åP@P ßõ¿çÚ“½ ( € ­iþ¶ëþºÿ좘Ÿˆÿä//Ð*`vÏ÷ ,è¿ò ‹êÿú¦Ú( € ( € ( €)ßu‡õ¤ÀÎÔ?ä/ûBŽ´ð4¾D’ψßx <œgœÔµv\tFÝ®›6Ê‚Wã ¬¿)^0:! ¥+’O§Ã;pí"‘´#ž¼‚ôÅY$+¢Z«Iâ69ƒ…SÏ#ó4$:]­¶Ð…À ¸)n sÏ×C¦%š·ØXDÇ—]Ø :d ‘-¾=Øu8Ác“@ mÉ£ùghä ôåˆÿÐ4é0å%CÛßJú“øÐ&‰b±´he²Ä79÷í@.“j,*"©Qóv'?ÏšGѬÞÐ[”!FyÉÎzþf€$M2ÙTåË9yàþt"ÚF²¼Š]Kí+`½  ¼¹Ì”‰AwòrþB€+Ï¥Ù˽.d,HÈË`…éÖ€4¸DŒLŽY°TîùÉÏã@ ‹E¶qºC´±O›îœøP×H´\á_J[ 9È™ ‡J´·¹2Æ]daÆg4Øô[T™&mÍ"6ìç9ÍhÐ@P@P½ÿ[þ}©0+Ò € (  ÖŸën¿ë¯þÊ)ÉøþBòýò¦lÿxÒ΋ÿ Ⱦ¯ÿ¡`] € ( € ( € (÷QøZL íCþA²ÿ¸Ô ÕÖèÆ‘[Ç a!,We4§w¡tì‹v¶×-gsÀDßê¤<0#úŠJJ6N×Ð’îÒêàùq ÛKªîÚ8Æ: Ü{Ö¤à³Õ#gˆ8 íFB•ÁÀ ØôçÚ€Ÿ ‰nåf(ûƒ‰ˆÀÁqßÞ€&²[ë6’[é$œ0l`·>À(§^*Xçr1&èËm 3dq‘øúPÖ:°Œâì—?xï=2ÙÀíÆß§4Kã´åŒÊBofì¹ÏÕ¿1@ †ÃUŽ·L Êݤ €0Ïs€ÿ®€†¢%–r÷[«0€2F1aùÐäµÕNœˆ·¿ûØ#®9ïÛ4E§Þ­Ì2É;6Ô9Ì„áÎrqÜp8  IéspÅU–Pƒvìg qÚ€+Aa<:dö‹a]Wæç {ó@µ 2òó{ Up‚?™»m¦I  ¾Ë|ÎrXlPd9 ’HÝײÐIc©Ëµ¦‘‰GlæR7Ÿ˜==;Љc©ôk‚6©Æ%8-ƒ·è:qí@[Zê)©çdxÆB©sÆHÎ=J‚+-Q¥‹4pgæðvîÏO\f€7h € ( €(^ÿ­ÿ>Ô˜éP@PkOõ·_õ×ÿeÀäüGÿ!‰~ƒùS¶¼igEÿd_WÿÐ0.Ð@P@P@Nû¨ü?­&v¡ÿ ÙÜju¨àP'•]ÞI0qÀ8©•—CH]ésZ Eä²·Ç cµ¤qò®Gq×ëJœùãrd¹]‡^j/^Ö*;FíÇ€¼™,?*Ð’uß—l‘.ônJ¶àð‘2:öÍ"kR܈¼H¤Éµ‘¥äðsŒÇhÖ›ªhJê hÕFAfŸ¨í@¿¶gIInªæìáTílyÇÝq@×ÊÆ\Ù¶ 7óÕ€Ï}ÓŸJqÕäfòÀˆ€¥Kg µ›¨úç@A¯—ŽyZl"—ó9úP‘ko*¬ÞB¤ °Üÿ1 €;{ÿZtšâ¦ž·f|ņ3œý=³@ ­4·0§ÙÕQпßÉ#¶8ðxýhÊ^æââ7(»mSÔã@­õ)N›<’ÉÚ#FaÀÛƒ؜Žh¶§«Ü@KÀWg”;dn#9Ïâ(ÈÕ˜±}ŠR5;•vâNÓŽzò([g¸1-¡8b»„€ô“ÃZkk¥\/Ù•óýÉ0Ç~9ǧ>”Øõ© ̪‘ʮЮ̅ëÆO-è8°ë‚âX0«lı/’)?7v?…:ïÙghšß{eù_G^¹Çá@+’ °ÁÇ †( € ¡{þ·üûR`W¤@P@­?ÖÝ×_ý”S“ñü…åúåLÙþñ¤þA‘}_ÿB4À»@P@P@P;î£ðþ´˜Ú‡üƒeÿq¿• º¯™æ´‚ _+vÈ9bµ2i»A4®mZi¦(~ÐÁ”†GP2¼`õÏZ!Ebe.grIôÔ¸ßHì…qŒàœO#±Ú*É M%yš_)ŽåLçiÁÉäýãÇJ’ÛH‚ÜId*¯¿oËØ#<CÓ¥%¶”¶‰PçŒÊ¹ã¿#¯­/öD$FÛŠJ›Žô«ž¢€t;6ˆG—Ú0G ô,GoV4c¦À‚B6FÐÀR1ÇI=(±è6±Dñ¤’ç,~_›ØŒc…IoºÃȪªÊH#NyãÔ kèVf-†åå€\·^¼c¹íÅJšUºHŽ ‘ùX8 ¯'Ò€&[5Idt‘Ô8A´`°â€#]9cYdPÁ±´uzc€( ôXnC å“€ àŸËõ  KMÒù’»¬ g8òIéøtô mÝØi ¨ä‚ÇÓý£@ ¹Ñ!–d–”¨U\.é‘íÓ§µ>  y7Å,ÊqŒ‚?ßå@¾‡ ³ f‘Ù„…ðÇ$œr ï@”P@P@/ÖÿŸjL ô€( € (µ§úÛ¯úëÿ²Š`r~"ÿÄ¿Aü©Û?Þ4€³¢ÿÈ2/«ÿèF˜h € ( € ( € §}Ô~Ö“;Pÿl¿î7ò¡_V7 Š–ðJ\ÊÛÊÆH*zsJwz"án¥ËTº’Ê$ž$Ÿš2pXÇ'½E.kZA;_A×±Ü?²)EfAÁäí À¿:Ô‚EW6ñ¼,Å‹#:•ä“ùsí@Cc¨GöÖÛ)YÑ‚ƒ"‡Ýó`’;ö  ÷°Þ\AÂÞIFF ó¿O ŒcŸ­%è¹.Ò$rôya‰N? ô  ø,¯ì®žDGò•›hFR6nÎ<ž3zšMFˆ‰¤Ëa¸eÀm£×œnÉ#ò ’ \È$·*‘Õy$ŒãÑx÷>Ô5øÔ^QöUda8ù¸#8ë^”{O[•µlmÓ$ôÀà {b€,P@P@P@P@B÷ýoùö¤À¯H€ ( €+Z­ºÿ®¿û(¦'â?ù Kôʘ³ýãH :/üƒ"ú¿þ„iv€ ( € ( € (  wÝGáýi03µùËþã*ÜO¸¿J`-P@P@P@P@P@P@P ßõ¿çÚ“½ ( € ­iþ¶ëþºÿ좘Ÿˆÿä//Ð*`vÏ÷ ,è¿ò ‹êÿú¦Ú( € ( € ( €)ßu‡õ¤ÀÎÔ?ä/ûü¨q>âý)€´P@P@P@P@P@P@P@/ÖÿŸjL ô€( € (µ§úÛ¯úëÿ²Š`r~#ÿ¼¿Aü©Û?Þ4€³¢ÿÈ2/«ÿèF˜h € ( € ( € §}Ô~Ö“;Pÿl¿î7ò  Äû‹ô¦Ð@P@P@P@P@P@P@P½ÿ[þ}©0+Ò € (  ÖŸën¿ë¯þÊ)ÉøþCýò¦lÿxÒ΋ÿ Ⱦ¯ÿ¡`] € ( € ( € (÷QøZL íCþA²ÿ¸ßÊ€7î/Ò˜ @P@P@P@P@P@P@B÷ýoùö¤À¯H€ ( €+Z­ºÿ®¿û(¦'â/ù Kôʘ³ýãH :/üƒ"ú¿þ„iv€ ( € ( € (  wÝGáýi03µùËþã*ÜO¸¿J`-P@P@P@P@P@P@P ßõ¿çÚ“½ ( € ­iþ¶ëþºÿ좘Ÿˆÿä//Ð*`vÏ÷ ,è¿ò ‹êÿú¦Ú( € ( € ( €)ßu‡õ¤ÀÎÔ?ä/ûü¨q>âý)€´P@P@P@P@P@P@P@/ÖÿŸjL ô€( € (µ§úÛ¯úëÿ²Š`r~#ÿ¼¿Aü©Û?Þ4€³¢ÿÈ2/«ÿèF˜h € ( € ( € §}Ô~Ö“;Pÿl¿î7ò  Äû‹ô¦Ð@P@P@P@P@P@P@P½ÿ[þ}©0+Ò € (  ÖŸën¿ë¯þÊ)ÉøþBòýò¦lÿxÒ΋ÿ Ⱦ¯ÿ¡`] € ( € ( € (÷QøZL íCþA²ÿ¸ßÊ€7î/Ò˜ @P@P@P@P@P@P@B÷ýoùö¤À¯H€ ( €+Z­ºÿ®¿û(¦'â?ù Ëôʘ³ýãH :/üƒ"ú¿þ„iv€ ( € ( € (  wÝGáýi03µùËþã*ÜO¸¿J`-P@P@P@P@P@P@P ßõ¿çÚ“½ ( € ­iþ¶ëþºÿ좘Ÿˆÿä1/Ð*`vÏ÷ ,è¿ò ‹êÿú¦Ú( € ( € ( €)ßu‡õ¤ÀÎÔ?ä/ûü¨q>âý)€´P@P@P@P@P@P@P@/ÖÿŸjL ô€( € (µ§úÛ¯úëÿ²Š`r~#ÿ¼¿Aü©Û?Þ4€³¢ÿÈ2/«ÿèF˜h € ( € ( € §}Ô~Ö“;Pÿl¿î7ò  Äû‹ô¦Ð@P@P@P@P@P@P@P½ÿ[þ}©0+Ò € (  ÖŸën¿ë¯þÊ)ÉøþBòýò¦lÿxÒ΋ÿ Ⱦ¯ÿ¡`] € ( € ( € (÷QøZL íCþA²ÿ¸ßÊ€7î/Ò˜ @P@P@P@P@P@P@B÷ýoùö¤À¯H€ ( €+Z­ºÿ®¿û(¦'â?ù Kôʘ³ýãH :/üƒ"ú¿þ„iv€ ( € ( € (  wÝGáýi03µùËþã*ÜO¸¿J`-P@P@P@P@P@P@P ßõ¿çÚ“½ ( € ­iþ¶ëþºÿ좘Ÿˆ¿ä1/Ð*`vÏ÷ ,è¿ò ‹êÿú¦Ú( € ( € ( €)ßu‡õ¤ÀÎÔ?ä/ûü¨q>âý)€´P@P@P@P@P@P@P@/ÖÿŸjL ô€( € (µ§úÛ¯úëÿ²Š`r~#ÿ¼¿Aü©Û?Þ4€³¢ÿÈ2/«ÿèF˜h € ( € ( € §}Ô~Ö“;Pÿl¿î7ò  Äû‹ô¦Ð@P@P@P@P@P@P@P½ÿ[þ}©0+Ò € (  ÖŸën¿ë¯þÊ)Éø‹þCýò¦lÿxÒ΋ÿ Ⱦ¯ÿ¡`] € ( € ( € (÷QøZL íCþA²ÿ¸ßʉ÷éTÐ@P@P@P@P@P@P@P½ÿ[þ}©0+Ò € (  ÖŸën¿ë¯þÊ)ÉøþBòýò¦lÿxÒ΋ÿ Ⱦ¯ÿ¡`] € ( € ( € (÷QøZL ë© y3† Óð d£Zˆ ~?Ø?á@öÜ_Þoûàÿ…Ûqy¿ïƒþmÅýæÿ¾øPý·÷›þø?á@öÜ_Þoûàÿ…Ûqy¿ïƒþmÅýæÿ¾øPý·÷›þø?á@öÜ_Þoûàÿ…Ûqy¿ïƒþmÅýæÿ¾øPý·÷›þø?á@öÜ_Þoûàÿ…Ûqy¿ïƒþmÅýæÿ¾øPý·÷›þø?á@öÜ_Þoûàÿ…Ûqy¿ïƒþmÅýæÿ¾øPý·÷›þø?á@öÜ_Þoûàÿ…Ûqy¿ïƒþmÅýæÿ¾øPý·÷›þø?á@öÜ_Þoûàÿ…Ûqy¿ïƒþmÅýæÿ¾øPRêpHrY³þáÿ gÛíÿ¼ß÷Ã…û}¿÷›þøoð¢Ào·þóß þXíöÿÞoûá¿Â‹}¾ßûÍÿ|7øQ`·Ûÿy¿ï†ÿ ,X°v¸uÎÖ— ‘Œü¢§ˆÿä//Ð*`vÏ÷ ,è¿ò ‹êÿú¦Ú( € ( € ( €)ßu‡õ¤À©H€ ( € ( € ( € ( € ( €@ç# ¦"¸†mÞS#í8;[84íè.â2Ï­.G÷ZgÚ!y;“ÌÆvnç¾l~o—œ Øç@“Eß3jî;FOS@ÝÍå[³¢ÃÏ×¼­<вº€ÁUP/÷sÞ€mÇüôŸòŽ€ ÞaΗx+û¼ãÖ€3F2ÒÌ #äž”í·óÒÊ:![€2dŸHèÝ2âKqæùsRF0õ cÄò—è?•0;gûÆt_ùEõoýÐÚw¢à\‹€Qp .EÀ(¸¢à\‹Nû¨ü?­&J@P@P@P@P@P@«Ñ¾”ÀÉ“JÝA>rrwgÔñ×§?/ö_ÎÍç!'p\‘œwÎ{~T ki!¢e3 ³†ÀÈ`ð9è3ú uݬÒLȧ÷.«—R3ÏZji*È¢DÜê¡À“޹Ç4ÖÒÒ$’å]bÉ\î'ךšK³Û\ê|ÇR9úÐ"C*Es!vï÷(_¶Ûÿô4€È¼S-ÛÈŽHwÜÝ¿/ëÚ˜ ¶Ñî2uÛ¼…9aÇÓƒŠÑµ¸†d”´‡–b:š‘¯`(@~HÇJ@UÐú^cŸôƒÏüi°9ïÿÈ^_ þTÀíŸï@ ‘ÀÀ ¶(ódôoÒ€6OFý(ódôoÒ€6OFý(ódôoÒ€6OFý(ódôoÒ€6OFý(ódôoÒ€6OFý(ódôoÒ€6OFý(.ä`†?•7'û‡ô 'û‡ô 'û‡ô 'û‡ô 'û‡ô 'û‡ô 'û‡ô 'û‡ô 'û‡ô 'û‡ô 'û‡ô 'û‡ô 'û‡ô 'û‡ô 'û‡ô 'û‡ô 'û‡ô 'û‡ô 'û‡ô 'û‡ô 'û‡ô 'û‡ô È‹*’"ÊzƒŠ‡ì6¿óè¿ ì6¿óè¿ ì6¿óè¿ ì6¿óè¿ ì6¿óè¿ ì6¿óè¿ Y[µ\Žz IôûK™|ÙìÒG#™A8 ÿ²4ÿúÅÿ|Š?²4ÿúÅÿ|Š?²4ÿúÅÿ|Š?²4ÿúÅÿ|Š?²4ÿúÅÿ|гmm ¬e …bRrUF9¤!â?ù KôʨÙþñ¤R € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €8¯ÿÈb_ þU@vÏ÷  Æ~†ÕþøüWûãò4m_ïÈе¾?#@ÁUI.0zl$K Ê€#>ôý«ýñù6¯÷ÇähÚ¿ß‘ jÿ|~F€ «ýñùˆÈ¾yˆ°]ÇŠ}P@P@P@P@P@P@ zж¯÷ÇähÚ¿ß‘ jÿ|~F€ «ýñù6¯÷Çäh9!ˆÈÍ;@ 0 `3@ µ¾?#@ÕþøüWûãò4m_ïÈе¾?#@$Šï"©ÎÆÚ~¸úÐâ?ù ËôʨÙþñ¤Éþ±¾´€Ì»k´»slƒ¨%z1ãß;E0"[«ó$«°´â>‹ÇÌ=O=(Hù¥ŽIÁT‚ŠxÏãš¼²e±±Ç¹Ù¤Ëþ©ÿÝ4–ò‡ýÅþT¢%6l!,rò “Ã=9éš­-ÅÌH„%@c-Î3Á9ÿ>ÔÀE›QwE1„Ý÷þ^ŽÇ=ÿJ·hò x–e‘¤ 1\sÏøRumÊdg¨ þBOÿ\—ùš³@P@P@P@P@P@P§ß_­4R  7hó•ægËÛ÷sßu0$Óüï²§ÚwyØóÓ8íH ÊÃ*A ÐÿñæÿUþb€-º´ÀJ@eÍ%ÔPHÑ$¯sžwSðÿëSRkýËæ&¹$&vòxý>ôý=¯$”½Úíùp0ÍhRµ§úÛ¯úëÿ²Š`r~#ÿ¼¿Aü©Û?Þ4€¬ñÝ3–J=<¡Çë@ ònÿçìß¡þ4y7óö?ïÐÿ<›¿ùû÷èMßüýûô?Æ€ ºe ÝŒõCühO*T·Ž(fILç€g“wÿ?cþýñ¦äÝÿÏØÿ¿Cühònÿçìß¡þ4y7óö?ïÐÿ<›¿ùû÷è: yf–Y¼Æ*î〱@P@P@P@P@P@Pr>éÁìq@¼›¿ùû÷è0&ïþ~Çýúã@“wÿ?cþýñ É»ÿŸ±ÿ~‡øÐ8[}6 ¸ 9?¼Sy|–ä(èx?•0${k‰SkÝe V=ýi4É;°òç¨6f€#ònÿçìß¡þ4y7óö?ïÐÿ<›¿ùû÷èMßüýûô?Æ€&ïþ~Çýúã@¶…¡¾Mìí¸œc°Òˆÿä//Ð* 7$×Îò>Ì88ûÿýjV¿Ûçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀÛçþ}‡ý÷ÿÖ¢ÀRŸUHÑLV¡îÏܜ秮éL ¿Ûçþ}‡ý÷ÿÖ¥`íóÿ>ÃþûÿëQ`íóÿ>ÃþûÿëQ`íóÿ>ÃþûÿëQ`íóÿ>ÃþûÿëQ`íóÿ>ÃþûÿëQ`íóÿ>ÃþûÿëQ`íóÿ>ÃþûÿëQ`9ýZãíWï.ݹŒæ˜ÿÙlibstruts1.2-java-1.2.9/doc/images/how-to/eclipse/developing-eclipse-style29.jpg0000644000175000017500000005345010404045236030135 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„   (1#%(;4>=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀ2¤ÿÚ ?³ªj„zÔV÷B(¢ µv’GÒº)ÒRŠv%ÊÆt:¾¹<²ÅÚwcË?0qïWìáÕäú2QyâS"§ŸY¶Œëù}?1K’ŸasH‚×[Ö®'Xší#$1$¢ñ´dñøU:T×As²äzôñHRî=êW娽dÔ¸S]Í!ŸlñRMÄA@'?.1íî(䥨9¤Iî±-²Ê—Ñ—xÈü±œnÅÓµƒšCÚã\E;ï#;BÝ»ãÑI¥ËO°^Cï_BÁ®!z”úŸOcO’ŸasH§'ˆ5hdxä˜F*Ã`ê W±ƒè.yoß¿ËÔgÿ­G¶{4:; 5ÂâvÉè Ñíäˆ|úeº†–WU'’= þ”{y³DqÚé D‰=>j=´ƒÙ¢ÐÑí‡y?:=¼ƒÙ¡±í½düé{y³Aý‘n?ŠOÌQíäÍ ý“oýé?1G·{4(Ò ßó£ÛH=šì¸=_ó£ÛÈ=šû2WüèöÒf…þ̓Õÿ:=´ƒÙ þ·Õÿ:=´ƒÙ¡³áõÎm öh?³áõÎm öh_°ÅêßÚAìпa‹Õ¿:=´ƒÙ QíùÑí¤Í ö8ý[ó£ÛH=š±ÇêßÚAìТÖ01–üèöÒfƒìÉêßÚAìпgOz=´ƒÙ¡|„÷£ÛH=š!=é{i³Bˆ—Þk öhQZ=¬ƒÙ Ø=èö²fˆO¤g!÷°Ámç$Tóya›lX±VÉêwžisy‡µœOÍ/=xióyŽSÄŠT*:Ô W¾£JÇ_sšÃ¸$‚=1éïHá†bDKÔ4Ù,’IšGÉÜ0Wyǧ¥KkacTTã@‹(ZGvÄŒÇ?3“Ò€[Z#Uމ®hÄŠ¬›$T+èOÊ}ŽùIÈç“Lý‚µU…þç|{€2Óê(ìmü½¡ÁÁÝ»ž¥9m-ц"pärN?Î(I¢ó”)8Ç ƒíOz‰, VFX×+Óæ<Мž~ïÿýj@?ìôÏ_þµ08Ê20ölÒß7¢þýj@Ow‘ž¿ýj`³À(àT€BØ8%ü €ó³ùÿõ¨¨û×(Q‡¨?ýj`ðá2›lÿõ¨ß7¢þýj@7¢þýj>oEüÿúÔ|Þ‹ùÿõ¨ù½óÿëPóz/çÿÖ æô_Ïÿ­@Í迟ÿZ€›Ñ?þµ7¢þýj>oEüÿúÔ|Þ‹ùÿõ¨ù½óÿëPóz/çÿÖ æô_Ïÿ­@Í迟ÿZ€›Ñ?þµqÞ&ÿ³¸µHÆR<Ìgô¤2©µdŠH ë(?;;dŽŸ'ec2¸˜„‚˜o|õ¤?1ŒrA'õ¦w’ßJ©äÌ—Q¹ÃÆ™ÀSÈãÞ€-L qíH\ˆH>‡J«*Ê™àŒ~”À­go$RB"Ú@'æ>¸íCÒ«,®ÆRÊØÚ„ - 3¢²™uv»v>[ŒlNÞÿϵ04J·žLBƒ õÏZ@)#þÞñÚ`fÝÚËqrw!Q€Ùuë׊ÓS´Ç¹ ò «v’ÉjóÇ\c§ôÍ:ֆئï]ªyÙí@l-nVé¦Êž˜Îw~h÷ðM<›W8$`ç…ýzÐ×QÌm#³‚7ÁaÞ€"Òm¥µ‰üÙÎÅ‚‹Í y>eÖà¦"˜"@zžr¨<~Tp¯cB6îˆûÞ(¼F(ŽöØåˆ?§áHBÈ‹4ob RE02íl®-5Udg¥JœI>¸¸¬„ÌæRP€``\õ¤©^z ÀŠ5`àžƒÞ€E%øƒÞ€$ÇîÈ''€‚Á<¨a‚Xži°ÕΡ6mäþtk#ÖG­´dzБë@G­´dzБë@G­´dzБë@G­´dzБë@w‰¿ä,ßî-R®¹wIH•ó×, ŒYI*¼8Ç¡  íÙòùû*…v\6w`d€+Y(G{„c9ê†]k÷–×2@ÐBæ6 Y9‘ZFŒd¯s76†§ˆîÜ€-S'§½W°q{F8x†ë½ªþT½„{‡´dƒ]¹*XÛ(ŽŸçÒaáí£^˜ÿË£Ø.áíñ­Êå’QìpöŒzëùf´{Ü=£$]RCÿ,Ö—±]ÃÚ1먹þý(ö+¸{F<^¹þü…ÅwhÇ‹²„~ŸáG±]ÃÚ1âr‡ù…ÅwhljyÆ?Aþ½ŠîÑ’ÇÿX…ÉwhÃ?çd»‡´aþz ^Éw´bóÀÿ ^Í8qïú…Íœ\óð¥ìØ0=ÿ!þr0¡G©ü‡øRä0mÿ§øRåavSùð¥aÜ6Sùð¢Áq6È…+ÅòÇ©ü‡øR¾Xõ?ÿ âycÔþCü(‚#åEU'*8„-„’£.3¸hQ1@võE;0¸ƒ‚ÛsÇZ@E$‘ÄW͘G½ö&S9VDßóÅÿ*\ñ+ßóÅÿ*9ÐùX¾LßóÉÿ*\È,ÃÉ›þx¿åK™+E/üñ“þù¥Ì‚Ì_*_ùã'ýóEÐìÃË—þxÉÿ|Ò¸ì\¿óÆOûæ•ÂÁåKÿ<¤ÿ¾h…Éÿ<¤ÿ¾jl1|¹?ç“ÿß4ƒË“þyIÿ|ÒYoIŽÕ)4´%­D‚ÎhahþvÎpvž:zæ“zŒ-ífÙÝ9+€M6î$¬ ¶ŸxbŒqÓä?HÉDm#c “œ©mœ}ïOzkt[Z¤p„Kòœõ¿!UösÍvªÊî?v¤ØIc„¾¦w;u\à{uàQK¤6™(µˆå’ø»9ÆXàœçýO´–Î!bô7ˆ¿ÖŒ.2ÌëÓ­sʾÃö¨0 ÇÞi{9vÆµåºÆÎ%V ;NzÓT§{XW¯m¥,ÉœãàõÅ¥8î‚ã㸆VÚ’+7<Ï¥ÂQÕ¡Ü’¤€ ( € ( € ( € (  ýSyÚ¨’œŽ±ãδtq©Ý3ÆÉ¹€ØÏ§j`lÐ@P@P@W°\I¨‘n6¨*:or:ÒìB0Ã,x?\P%âùúäŸÊ˜m쩳ËÊ™àAíYÎ\ªö*)=݆Bñ>ñ;BƒŸr=«W$Ù:û‹ô¤2µÝ»JêAŒž(·v’IÊÜ2¡{úõàòU}*ã!Eóí*AÉ9ÏŽ~´oN²{(™v”cwlPº( € †ð¨µ°ÊÈ9ÖàgÍöUóÆ[#´»½qüuÇéø¡:\›³ ï·-’?^™5§ï×T- <ë$Ìà8;€Ýiög/È,I# gÿ¬*½•Neg­‚èsK§"¬žLÙ줸ã?Ê’W¥Ðh,wzzDRp¹=sÓý‡åIÓªú…ÐÈåÒã“1Á.àwŽã“Î}ªœkµ« c»‚9Ä‹m&HÜpÄà§z‡NN6¸\°ú½º8R’rHásÒ³Xi5qÜ«¿3Œ3ëéGÕßp¸«ªÂdeÙ&Æp=ýý¨xyZ÷ ‹©‡\ 3œ})J„¢û^ÛÉóq Î óŒã¥?«Nö ‘¾µn¨J¤„í,gõ÷K ;‹˜zêо݉&]ËŽ=½{T¼<–㸩«@À’® w8ÿH. ªÂÑd‘p›ÈÛž? IÙ0¸>¯m{ØIŽ8ÛÈÍ 6ì‚ãZ·@~I2#¦úÀÓXY±s udq‰ö“Çô¿>®ö¸î$:¨’TF„®ìô;ˆü1íD°öM¦ý³™bÜ—/µ@lç×·½WÕ´½ÅÌHú´Q€dFÈ|sƒè=jVOf;Šu‹aü2Ÿ¢ÒXi…Ëvó¥Ä^bHÁëÅe88;1Ÿï¥fÀ¯mÿ!)?ëþf„ê`P@P@Uþû}i0(\«—èiÆø‡þB#þ¹'òª®½6ž[Cvà #'ãÿ­Sdôbi5f$¤‚8زòAü*›¹^†ê}ÅúP!’º©]Ì=ÍHÀ0Á  —ÖOtЉ3EŒå‡'š‚M)ئ/%I'<çÛ¯JÒQ…ÐP@šå’íÑ”yJªK œõöâ€,Ð@]ní´e¸À>¹¤Æ­}J“’ ]Љ#!£ïÏoóÖi8꙼iÂN‰®pù³PôëÒ—<Çì©0¦k›6ƒ˜ëG<ƒÙÒþb%ÖÜý”y„ƒ½x_çÍ.yØ¿eFûèJÒÝyK‹DχáOšd*t¯¬† góúïÇ'mÒ{ÙRߘxšëqÿCQÇ_^ ó³¥üÃQ®ƒåbLí²¸ÏN?<ÑÍ1¸Q¶â¼·a‹Ec“ÛÜsG<ö¥J×ryö·ú:àƒŒ'AŽŸžEóN—qRKŒœZ®À8{sG<˜:t’ÜtO¿›eqÆ0;sG4žâ•:ihÆù³ù›5Î3·uéG<÷²¥ÍnmÞ[Œô5l;Üã§çÒi;X¥J–üüÉÙ~{EQÔŒg<ô£žböTº1Ë-ÆÆßj¤zmü… sÜN-”‡G-Èól»¶äŒc&Ži Ó¥}$6I®@‹0ÍÇ£žHj•&ìä1å¸ómšù€.HFOóÖŽyìR¥Kw!CÜŒ”·]ÇÆ8þ´sÌ^Ηp®„똔õÝòmýqG4ÞŒ% <®ÌjµîõU‰@,pÅ1Å.i²¹(%qêÓeÊØÎæ#©æ«žd:t÷¸¢IƒlÊØ<¸ïŸð¥Ï1{:v½Æ Û…™-÷Ñ@ Îjyå¹§°§{^ÄûÞHѤ]¬GJ®‡4ÒŒ¬ˆb•"Ô›{mÌ@~MTS{Ý‹Föçå€ cœ*¹®…û\ǘ:Ç©éG+ ¡Ââ&…¥W ‹œ‘ÏJ\®ö QÉb¼A#4ùX]Kˆ¤VdpB}ìv¤âÐ] û]¿üõ^™ü)òH.…ûL;¶‡ùŒtÏJ9X] ö¸33¦rpp1ÖŽVB}¶ßnD™£‘…Ñ$“GRíÇÜÒI±Ü­½dùÔåO"¥«0)\«—èiÆø‡þB+ÿ\“ùUÕj6¦áãtÛ¾6È 2nE ÖØÚÛylûŽXð0@ }ÅúS½Õ¹•Ô‡Ûü=ÿ¡ ]X$ÌË*|­ïÿ× ØY­Œ%ÙòrYé@s@FþÀÜ 7;Ù@ØOÊqž¿\vFªW /Aô Pw9òo^1Ÿ­ k}J‹ox@-p»ÇÝ ÿLTZ]ΗR—Hè!·»Æßo½‚N”ìû‰J›å&íGü|*gžrxZ]Þ“û#¨)¹ºzþ”­.ãç¤þΈU†û¼ƒ€¤ Ýûö¢Ò:=»n‚yiO7osï×¥=v¸¯N÷åÐkÃxHŒÜ¡Ü‡<ãÓÚ•¥µÊŒé|\» "ºY›•ÞÃ$ç°ü=è³î.jm_—ADW á®Óvsþ¶(´»‡5.‘ÇpInç;qžØþtìú±sCxÇb3or…í{Y‰Ê±ã“œ V}ËU)»®RA çÊ>Ô¿^ÿʥ܎z_Ê)‚è¹4Œ)'§^ß•bS§kXŒÛ^˜ÕLêNíÍóJV—rÕJ7¿/õ÷ŽxïFss}zz}(´»‰Jòˆ-.ù‹p áÉãž”r¾àêÓz8èGvXÊó*ÐïÎGåŒf„žá)S^êDᘲJ¨™èyì?­;Jä)RQ³B4r…užuØÇ AÁçš,úJ7N+QÑE,AÓΟ;2sƒÅ 4)J2³¶Ã+ÀÀ›¤ О™ôíE¥Ü¥*M|:ˆa¼Mì'Ü3Âç’;þ=(´»‚'eÊ[·,*%9| œÕ+ÛS ¸¹>]‰)C?ÞJL ‘D’jM½s¶ Gæi§`±hÙÛ¶3ã§&«ŠÈwÙ`ݻˣ™…á b#\!àŠWw¸ì7ìÐó”Îx9&Ÿ3%´Q«¬i´?ÞÅÍ…’ZÂ.ÎÛ}È£™…¿f‡9ÙÎAê{t¥ÌÂÈ>Í1åŒg4s0²kÿ–có4ù˜Yh‘‚†\…éíJìv+0 Ä€ KÇú¹~†oˆä"?ë’* :ÛÂC0䔎ÆKæ¦v‘ŒõúÝO¸¿J`#ÿûÔ1OºÄsÛ4ZæÖÞô*™åÏÝZ,´øì¤•ÑÚCÉcÒ€-Ð@PW`g p¸äúRcW¾†r‹M˲r¬²À¯<.Ÿ•gî÷;Ÿµ¶±éý~c¼«I.…ËÃ$cž{ô¢ÑoqsÕŒå±Øöý¡±÷Uˆç±88¢Ñî7*Éß”´–‘O Lö¨ùAçÒ©E4bêÊhS¦Äqó6ÀqÆ(ä@±2ì9ìUÀ íÀ ÐtùIUšÙ¶™Ó±ˆn0H ÿëÒäE,L¯¨é4åp™•÷ PlØ¡À#ˆjún54¸Ôƒæ1*N:c¯Z9Þ*OK 4È·Þù''8ÿ=èäBúÌ­kKãRÝr»ONE>T‰uå-ÐßìÈz’Ùçž;Š\ˆ¯¬ÌNMˆ®ä”,F:ÑÈîÚ[Øt–îîïn™œÓq&5ÚIt&š²,@ÊÙŒ =©8Cì·t؃Y˜’üô£‘ÄÊÛ º|iFðÇ''4r+XO'%+ :d^^ÀÌ|c‘ÇøQȇõ™^äŸb]›w¶7ÆZ|¤{g{Øgöd=Ëgžxî1K‘õ™‚iè#ÚÎI H c?ÂŽA”˜’C¤ÇilÅØ}j¢®&Z.öFtEÝÐu óŒúÕrÚVa}.i“x_(òÁws¯OoÖŽT4Í…X‹3‘I+ƒb[Ü4ÌÊÑ•wÏ?¥6Ȥ¼–2BÛ1ˆÏ?áT¢»Šìi¸Ürm—$ ‚'#¾?j>ar[{£4¬¾^Ü(nzý:TÊ6CNäq^»¯üz¸ ž9ý8¦à—Q\E½—a-œ§±âŽEÜ.Y‚S#È eœˆzÔµa¢'ûíõ¨c(\«—èiÆø‡þB#þ¹'òª¬½¶†iÒIIÊ=iᎠªI8ÉÏcBq>âý)€´P@P@ÉÿÕ¨þtþ2:f€ ‚A :{P;´&W9ãÒ€ÔZ#‚Ë…m¹îhi=EdäúÐ&´a€ ö4 ;lç @( €”Uúq@ÛoqhP@P@ö € †¼>”˜í¿ä%'ýrÌЀ¼8À( € ( € («ýöúÒ`P¸ÿW/ÐÒñü„GýrOåTau”œ0Hmáxb>kîvÉ>ß-t ÷éL € ( € ( ®†ëw#8¹¤ÆÊ’¨ÛGÜ ñ¬s×´­æ>uüƒÅ³rMù+Ž>nŸ­;y“í܃M¼K–7*/[œãŸ~ÔYw+ÚI裸­ 2çíÛBœçwéú-®âS´~M¸ä}©rzÝN1ëô¢Þaí?º»¥7™8ÜpÄúûûÑn·{Ú<¡Q!mù²Äà÷Î;нBmÛàyEøäcvïÇÖ‹i¸¹×5ù=»òé ¡Ý’ý^´­Ò媊ÜÜ‚ìÚ›ð}§-Ðä;y‹šîÊÖÜÆ/ïRÝñõ¢ÖêK©°6$P½`v`cÛ©çúP»\roI8FX–ÿ 1Î -Òग¼à jí#'ÛpùŽA¸£—ÌjªJü€Ö£o7]1–$ž?úÔrù‰UwøFA+p¡'PËŸº§?™¤’¾åNspÖ#¿³ã™'P¡·2ôÏ¥>EÜ_X•´ˆï(+ôÅUCp:ã½ó5×À= f“ t;Q¿NÞdº‰-b3ìW^Y}ŒyÈ$ôÏøÒå}ÊöÔïð“ymh®Û˜µV²9§%)]"(w}¾]˜ÝäŒg×&©Hÿn ¡0F9'ëþ§¸N¡¾ãxQ“ÏN?ÏŸ(jLžxƒeç⓵ǭˆŸí£î`ýqT¹E¨ º ““—9ŒŽ?¥”5­~S;G=2#üñG¸– óüÇóq³o5.ÖÐjäGí£ Sϵ?tZˆßnÇÊT|£¨{÷§î£Èº$í;~nø<`\þt¯ê0oÇï1¿ø±ëY½ôJãý\¿CH7Ä?òõÉ?•P”ÒF³*>77LŒÔ9Y¤4¯¨× —ç¤v>¢¨FÒ}ÅúSh € ( € (+²¢ÙËgo|zRcï¡F5±Ç–LÁ¦xÏó —c²N·Ä!û9çXÇ?Ï4½Ý‡ûæ¯ÜBöD«í“`RwvÏÓñňrÖÕuéd2Èï¿Aê: ~è“«wgk )a´ I6°'°À=?*^éW­{Ýòm"_½#ež¿Cù*vŠ'ž¬ºw›"<¡ì ýr@ÇáKÝØ«Uø¯¨H¶+$k‡ÃF8®HÀý(|¡Y¦û1¬|ÈÑöœãÜçëGº6«Y¶Å_ìðì‹à ÷9£Ýöö»d‘›CÊ+v-ÜtÍ5ÊL•U¿¡ý‡¦&b¤äž:rM/tµíµwþºbÄl;_ OéÏ??t‹Ö×úÜs 5‘ѼÂÇ9¡çüN(÷D½«I¢7KXGï9Ò•¢¬Ru›ˆ…l m‰#œ… ztþ´{£½e»°õ]= ,ŠÁP‘0Nx4ýÛÝu+>£#6‰‘„¬q§è0àE%ʵ*^Õ¾UbfKGc+ïfÜW¨ãü;Gs5*©r¯ëR3-¢oòÒL¹;¹Æ02,R¼KQªíw°ðÖŠÊá\)'-ž?ÆŸºMªµa²+…’A±$ìy J+UX5iÙL,‡aÊàØÿ Wˆùkëæ\³¶Š1æD[kì*â’Øç«RR÷dYª1!Ÿï¥&{où Iÿ\‡ó4 /S € ( € Ð@U¾ßZL êåú@q¾!ÿŠÿ×$þU@v’€XƒPÕÕ€Ô¨Á-œwúqVVi>âý*€Z( € ( € ŠèâÝÈ]Ävõ¤ÆŠt™PöYÉO”\qAYÝö;y#«S$Æ]ÍbÇÞÛž£§OŸȆ•¬¦5&›Ø #HÀéBo°Ü#üå»t™"PØé·çµRÛS »I¨²S d䯇·Ýìˆç’ê(ÏXÔþY4»ˆðÄèU‘Jž£Yœ“º``ˆ¦Ã•ã”Yœ“½ÀA““÷h²œŸPòbÿžiÿ|Š,…Ï.â˜ã8Ê/ÔX9ŸpÆ(Ú‹3î"AkµcP{zõ¢É ÎMݰhcpÁ‘Nîh²œ–ÌCo U$!z|½(²´šÖ㼨ÁÈ3œç‹!sËk‡•üó_Ê‹ æ—p1F@4Àç ¢È9¥Ü<¨ñ-q×¥AÍ.à"Œ P>”Y4»ˆE!Q@''ŽôY s“Ý€† ¥DiƒÔmY<·¸¾TyÏ–¹úQdÒî8À¦HP3ýáô¤ÀÏû;O©ñ# XÆpHÈÉ /ZÃ4 ±³«F©€yÉ9÷>”ÀÏ“N¾7²J³¯–ï»nJãŒvöÇåAvqÑXß,Q‡xÙ•Ifby¿^Ù -âËc}$L¢p¬T(evãíø:Ñî*Ù^+©ƒ'sÈ ÷÷ý( G¹öuöyXq•fb =3ôü¨ C¸¯a|\™c¢«ÞÔ¡ÜT°¼pœ¹$ÉÝøö -头›û<@òâL’XG\ã®qÛ­6?›½o`äŸ_¯áøPâŒÃÆ[qQ‚}iRãý\¿CH7Ä?ò_úäŸÊ¨Âð>Æ1§˜Àä.ìfˆ¤Ý›²BÆ£¾ 8ÁéíMµ}¶6“î/ÒÅ € ( € ( Oþ¨ýGó ] Ê ·8mÜŸlëŠNý )ò]ó• ör|Å^øãð¨´Ôè¥kY.¼´Û Íœr~¸ªÔÉ:wwD+ ÷ÌZUÝ´…Áã$ð4­#G::Y“z$f2ïÂ3üøõÇåE¤ô­k ¾ÎÉ^‡=zõïéE¤ôo{ a½*wKôãõ‹H\ô“ÑŽ;à|éíùД…)Qè„¶Šípd˜2„!qÓØûД‡RTžÈXã¿ÜK̸Ç®>”% ”¨ÛD5!½Iw4¡6í£ŒûQi ΓVKQ× xe ¸n3éCR¾„Ó•%I¤Wþb»È8àŒ_¥+H·*6²Bˆµ ÌÆUäðíùQi ž†Ö"»êò8ãœ`þiÚDóRè†4¬A3 Œ=ûv¢Ò)NŠè=Vñ¢R[ksHÏ^;zQïX–é)1÷f•NõÏÓÒ•¤R¬Of&Æ|‚OB}ª£~¦U\/î–*Œ‚€ ( €!Ÿï¥&HŸf¢çýÐþf„Ï´îšb¸} tдîšáöýÓ@\>Ð?ºh ‡Ú÷Mpû@þé .hÝ4Ãíû¦€¸} tÐ!c–'Ö¤eõrý q¾!ÿŠÿ×$þU@uš”É NLŒŒ~é§œ’`öm7Œ *…ϦÚV¶€t)÷é@ @P@P@ܰX‰À'ó¡+膛˜Ôù\úóéK™©Éì'Ûm²Gœ™ô¹ýNÂý® ‘æ®E>d/e>Ã>ßo´¶ü(m¹õ÷úRæE{ ÞÖom•yɃӞ´s!*5µƒí¶øÏš¢ŽdƧ`ûm¶qç&}3G2cS°Ã}lÀ+1 øãäÑÌŠT*-PáukÌEÉýhæHŸeRZØ_¶ÁÎ8öü­È=Œû / .WÌçúQ̃ØÎ×°%ÔH ‚G4ù)®€.íÊo®ÑÎsG2e;ÚÃZúÙTŸ5N8¹Õ ÚÂý²ÜãlªÃ¹¾´s ö3ê…[È$zÑÌÑšè w!q*€Nx£™ Òšv°»p»Œª×4ù{)ÞÖ×ÖÊ3æ¯o—2¡Qô·[üv=È~Â}„Žþ T1³ŒŒP¤˜J„â®4êVã‚XvàŠ\襇›%pc™ŸCÖŸ2#ÙO° ¸;Èçd/e>Â}²ß’d žœÿú©s!ûöGY²‚:Ó½ÌÜ\]™LõÓ;U9Åï¨yöÂ2E¶7Žq‘þE]ƒ’¥þ-‡4¶£jýœåB{zõ§uØJ57æØh{@¼Û>ÞÁrF:ÿ3KÝìSUoñ ö«B¬^Ü…\cžÏ4s.Áìª^Ê@“Z3‚Šp[#`pª–¬xšÌDeû9ãô¢ñÞÄòU¿/0Ówl¡ŠÛ¶âœôÿ8£™v²¨÷yÖÌÁͳOÊ;ûÿJ.»%D­Ì(¸´aÿòmägðôÏ¥]ƒÙÔ_iY-Ê1ŽÙ·¨$ýãóÍ;®Ä¸Í=d1.a‰Ô›C°ä)9çé].…ºs’øµδ(ìÏÏÏ=~´^=…ÉU;ó›_7›|*®Ï'ðî(Ó°%RßÃsj"R¶åK6æÆAü(ºìR§Rîòö‹ ¬‚Ý±ŽƒéEãØŸgW~`KˆW%í¶ÄÊÀ};QuØ9½¥¨yÖ²¾Ão•ÏÍÍO rTŠ¿0éÍnZÙÇNFÎqøšo–⊪âšc¼Ëb²~ç˜ñçÐQt.ZŠÚî6)£ûN>΀Kçô¡5}‡(K“â,¶¶ò’mÛtDØúgŸÊ†ÒèLcRkâÜoo½H¶rd8ûÿ.´]v+’v·6Ä–Ímq)ÛÏ óéMY²**ެ—û>ßfÖRÃÜÓäD}bwºãX‚¢ )ÚÆR““»+G sjOæ.ìD1ùš¨ÉÇbK#OµPÀEÃuËýkOm>â°©cl˜Û ƒ¸äb“«7»é-b–o5Á'nÜgóÍ%RQVB°É4ûg\l ãnCãðJ´ÐX–[x¥UWRBt#b¦3”uC[D!h‚|ÔdÑÏ+óu m 9Êg$–=@Çò§í$‚ÂÛÛEl¬!M¡ŽO$óJs”þ %¨©q³² Rç,@êzJ®ÿ}¾´˜.?ÕËô4€ã|Cÿ!ÿ\“ùUÚM*E¼È@R0IéRÑIØŒ²6€£h 0š•Øš±´Ÿq~”Ä-P@P@Ew»ìϳïc­'°ãkêUß}¸o@©´ghïÆ.j/#«–´zŠf»Q¹ NH^'ùÓ¼„¡I蘯=à¸Â[˜È'¯Ó­•öaK–îZW¾8%‡UÇÞüsJò¥Ç4—¦ÄJ$?{ŒúÓ¼¬%\Ï]ct6¨þ,/ì:ѯa¥OWÌ9å» È'ïç·Óš/.ĨR»¼½o¾ þ©Xó†+ÓŸ¯¦(÷еn>G»ÜŒ®Tý9úPù‰Š¥f›æ_®vƭ鑎çßÒ‹È®Z/v#=ð|¬jø=À}(÷*6ÕŠí|»<¸£À t£ÞT]îÇnÄJ Òó03ùÑyX\”®îôMs²`Êp¿.ýy¢ì|”î®Æ¬÷̪~μ“ž:~´¯.Ãp¢›÷‡Æ÷Šê¯²rYºaÖšr£I«§¨‹%îö&5ÛØcëïô¢ò6Ü-Úå[ ª’NèW ªofeî~HPg$ñŽqõõâ‹È9iubC-ÚH±Ëñ·$×ñÏ­ ½˜N4Úæ‹'¿O•¡Œdã=OÔR¼‹ä¢õLrÉ~"mЩ|ðøÑyXN4\´z ²_ð kÛ$þ½;ÈN4w¸fé1Ä7±Ëd gðþ´j+S{½Ö–ö3—L†lp¹ÀüÿW’)FŒ¶dıŽ3 ùöóUÐæ•¹ˆí¿ä%'ýrÌÓD—©€P@P@PWûíõ¤À¡qþ®_¡¤âùúäŸÊ¨®ü\ ‘ Œ>Ü’ pyª‡/Ú&Wè9AØ”«²åùþ-§5I¾R®ÚÔÝO¸¿J`-P@P@Ev¥­AÁ#úRcNÎä o2ÀíDýâ}¿Ç56vÜÝTƒ•ùHÿx¯4fä … KyþTµî_ºÒ|¢,^XÝxäç¯Z,ûÔ§} *DñÊ»nð\¦IŸåÈZÏq9'xŒÌ~Ù‚Ý'Œç¯ò¢ÚîÉE{‚Ä\Jn‡bÀdàñÀǶ(]î³\¼» x¤Ã/ÊüÇÊ‹>ãRŽ–‰,1LŽÝÇbxïši>äNqjÊ$Û²(û=ØË ã=qÜ~­$»3ITMûñÙ’[A*¶ç¸\±ÉPÙíÆ„Ÿr*N-YDjÃ(ؑހ£ä=Où‹>å9ÇVà:Xd°[Ï+'~Üö¡§}ÅÇ•^7è,hèószž?úÿ4¼Å)'ª†„+éûµ¾/÷¾ïùæ¦Ïkš:z¸˜äÀ^gq;Fz~UV}ÌÔ£eîù2ÆMîIã?1<þ¬×RùâîÔ ñŽÔºªs×kDrÊò“vÏ`¥×'¶hºIZöޝ¬88§r\ZÜZP@ ÿx})0(yæ AˆPÅ£.qžMnů¶œ>!?(ÈóÎ=?aqVñ‰h,Îs‚:ô .,weäT1 ßž?JâOxb˜Çä³`gwj±ð\L™M¡zuÍ™¾|dÛ°ùIë@®?í2ÌAFåÉ9ð wbÇrîê %T’ 'ž1@\±@€*¿ßo­& õrý 8ßÿÈD×$þU@v7HXd>ͬ§ï`‘Þ•®&ŸB8æÂ$@9à6Gz4è4ÓÕ©÷éL € ( € ( Oþ¨ýGó Ü[­Âª¹ ž;ðGõ¤ÕÍ)ÔpwDK·$î.sŽþ•<ˆÕbf¶$’Ö/)C;:ÓqDF¬¯§R8¬ òÈÀ`AôägùRQEJ¼ïè/öt!™²–ëƒøSG"¬NÖbÿgA‚àlçüõ§È…õ‰€Ó »ž§Š9}baŸop§’:š b&Â>I(È çÐРJ¼å¸‰¦Û£‰#ŸlRä@ñjÀºt '˜™Wê¡£‘ÄM«=…šÆ9œ;3‡ç=‡·Jn)„+Ê Ëa©¦B…[sî^‡=)("ž&o@d8/’sœÑÈ…õ™[•HBÊÁÁê)ò¢]y=Æÿg[ãn‡¿­.D?¬LU±A«;3ÈwÍ>PuÝî‡M·Û€ùp9÷Í.D?¬Îä¶ÖâÝ î,ORF*’±JœîäÔÌ€ ( €!Ÿï¥&k`?´Üã¤Cùšé€P@P@PWûíõ¤À¡qþ®_¡¤âù¯ýrOåTU¨ÝEgM367…cÐ{T—9»DK9a¸´Á¼åHŸaMãˡЧÜ_¥1 @P@P@]¶îTdŽƒ×šÖä]¼Q«g‚½sþV7%'aô§wú#€£<ž¿¥ϰý„t÷ƒíÒóþŠØçü(æ}ƒØÇùˆþßq³?gbÄä.Bç§×­.gØ¿a Û›þ‘¯f´|Ÿ~”ùŸb_â5 rìÌ[¹ÿ 9ßa¼Âtc²©y1‹[1e\áOéÍ O°ÞÊ@÷Ò$a¾ÊäñÀÿõQÌû P‹væ#}B`ÅVÕ·. '#òö¥Îû°ðÝÈwÛ.1Ź'û½ÇùæŸ3ì/cæ»–•U¢ä*‘ÄšÂT©¨¶˜ÑwxÎa_™°©Æ?:\Ò+ÙRJí’-ä •0+œ°8gÚŸ3ìC£ù…’ïÙä9Á#8§¦(æbö1µïb?í&Ïä–`)úç·µ.rþ¬®•É|Ó4håv’:U^èçœyed2ÛþBR×!üÍ4Az˜P@P@U¾ßZL êåú@q¾!ÿˆÿ®Iüª€íYc>bÈ¡ƒ…sØ ‘§b¥­”6í%Èf,w} 0:û‹ô¦!h € ( € (;œù ´xÆ~´ o©P%û]—r猭E¤t¹Q[Ëý¸Þ7’FåúR÷‚ôw°æ»‘w¯1Æ3ô§ï {+7aß á -ϧÿ^xmÑQPÇr=3Œ~T½á·AÛ@_í2ã qÇ^ãŠ=à~Ål;7Á6ïŒËŒŽž¾”ýáZïga®ºù7¦YO#—¼4è-l(ÁÀ2&öôÆÿ®x/FÛh(Žyx³ž˜§ï ÷›vÉ"®ó´tàcùÑï ô·Kb=—ÈUüå‰Ê¾8ÉÎ){ÅÞ‹º± ]C€]>¸ýâ/C°¼.X0È^p;õüQïé%b6Q1¨,¹-–Æ:qÒ•¤R•î9¿´A?4`qŽiûÂ^ÃÌ+ô;üÅf!²¹ãÚ•¤7*/K ۙ˓´9#ðúй‚^Å+"Fûi˜˜Â„ÏFúëOÞ¹ Øò븵*Éæ:œ!J5ìݬ†¤wk>ZL‚N·j-+”åMÆÉ¸ûh.bhÂÿzÐùºe§2cv_å?xƒ‘»p;ãõ¢Òèë ûStda8L`Ÿjq¿Rj*v\…¬Ð £ Ï÷‡Ò“½·ü„¤ÿ®Cùš©€P@P@PWûíõ¤À¡qþ®_¡¤âù¯ýrOåTjÿ|Ô??äi 6Sî/Ò˜ @P@P@] ۸ݷ=ÇjOaÇtPQP¥âäI“¸úz û~µžÎÖå­áÐ_%á˜_°<Œþ4í®âçj)r°Û•ÇÛ~`6‡ÎcëJË¸ÜæŸÀN¶¢âˆ˜”^œuÁúûUrÝ:®zj §’W÷í…ÉçÏZ9b<‡½›8Î<(^”ùIURèFÚq”™·àcwNëõÍ.BÖ#ºÐY,Ämçèzp@ëïC˜£]+®]ÔÓX2³\1*OÐŒ÷æ—'™O­eFœw³}¡‰'=>¼uéɧɿ/¬+[”zØ”LÄFXgñ†ŽR]{ôýœ&gÏ'é‘ÒŽAýcÈÅÊ ’c•,~\÷éG(:êî˰él™ÝelžŠIÇ^ÿËéCˆ£Y$“C$±•Ö!ö‚ §ƒƒúÐâûŽ5â›÷wiçqß;8,áïíG }c²°å±e‰“íw’y?ÎŽ]7¬›O”iÓ¿u剘/CôãßÛõ£“KëÞÄŸdm›|ãÛºõéò“íUïb?ìà~ôÌO?¨ÇéK¯¬[d*X¶Ì<§pbU‡nŸáúÑʺ¾ˆE°"6C9l‘ŒŽ˜9õ£”utÒi§#72žIäžZ9<ÇõŸî¢äi審’qÆMRÐç“»¸êdÏ÷‡Ò“ˆŽI5åIåâ1Ÿq“BD©i6[d’1Nzÿõ±@¹_rÔ‘;,a_” ’sÍ1ˆ²@щNpÙ$ŠÄ?cŸË#íO¿ÎOøû:B³-åÊ“"ð峃ž˜¦;%”À>é÷n]¼ƒÏ^¿Ÿé@¹Yb¤ŽGg”°la{ bjP)¥TwÏbiAÜIlÒ.pÈXgÜRñü„GýrOåTjÿ|Ô??äi 6Sî/Ò˜ @P@P@ܨhXd?µ*Ü[Ú[…wGåŽpÜžsÍCQGM:•g¢eg¸´W%a8ùFC{…Mâj©ÕkWܘÇgh|—ÃÜýyÏÒ¢Œùª¶õüJ„GlE$äóÁãMI T$Þ¯V8jHdeòØêXŽ:“ü¨çÕÚW¸ I6òÛ?Ä3Ó¯øQÎVwµÅ:Š%#cïâú»¾¬Xõ¤ÎÔ“¾ßÊ…4ÃÊ;´%¾ “n0…‰>Þž´)Ü'‡pê ©BìB¤œ “·¶(ç@ðòKV„QG”Gå¸%±“ÀÖ…=l9aÚ5ÇÏyl¤Œ‘ê{SrIؘP”ãtFº¤M*ª£a»ñKðÒJí€Õ",@GÀ8Ïs ú´’Üx¿Fä! ÇoZ9„è5ÔkjI‘¶7Ç9'ãXgÕ’}º=ŠÛ[œúv8õ§Ìˆö½ˆŽ¦™Fû1’N=qKœÓêϾ¥‹kp¨ ÅRw1©MÃrjfa@P@Ï÷‡Ò“Š[‰µerH1 aïÉ¡`X·”cóýЋ;}Ï4À¸”P@P@—yþ²_Æc C×ÉÇ¥"ÔW9oÿÈD×$þUD«ýóRrtüÿ‘¦€ÙO¸¿J`-P@P@2õGê?9•[€89í@Ók`Ú£øGå@]‹Œ`cÒ\M«è?*võP í ´zÊ€»jãGå@])Ú>ô}ÄD!pÛIõ­!·®ƒ¶ØSØ…‚ Ž}¨ ´† ‚b(ÚØh£@˜¢ÀäØm_îÊ€» «è?*ì]£ÐPcV4E ¨¡GAŠV“níŠUH ƒÅ1]¡4v¢…€P•ÉÉÝŽ A@P@Ï÷‡Ò“¬«ª²‚Ñ {òh@_ÒDSÐŽôÀZ( € ( € ˼ÿY/ãH qÈ9?ëþTÊx‡þB#þ¹'ò¦jÿ|Ô??äi 6Sî/Ò˜ @P@P@]-œ–Ú?½éïE›Ñ*"Á KÅÆq¸ó¸çŠ=œÖý¥6ÛqwBÇíªO x§Ö¥ÓšÑ•íi_HŠÐÞ†U®9bÞßãK–CU(ÚíƒÜ³”( € ( € ( € ( € ( € (þðúR`T†%}T±ÎR.0}I /Æ‹j‹ª02r:`:€ ( € ( €1¯n`J¦hÁÜ)_òOúâ?•rž!ÿŠÿ×$þTÀí_ïš#“§çü4Ê}ÅúSh € ( € ( à¦ÎQ!Âùµ8ÞêÀfIeh«š×¹$ §éë·¥vªµíoëþ›"3š#•"º"BwÙœ~÷éëUÏZé¸è- æM:]Û§‘NÞH˜ôö¨‹­ôiyeko”fØPÄg#?{#·ÍSR•IË]ÿ­4‹MªYª3 ƒšÉaê7kè§i´!øøQì*v  þÔ³ÎÀ‘Ø)â«ÔìC?µmò¡„Šœ•è0N½éý^}ãÛS´F òíÏ*E%B£ÙÐFÜnåò=PŒð#G°˜\Q¨Û*ñÆvœ½ÿ ^Æi^Át*jÎHó6òGÌ{ÐèÍt ¡£hb2yÃ`'×{—µ‚èkj¶ŠŒÂBØRØ yý*–¥í`ºu;GÁIwÔ€p­'B¢Ýбê6¯ÑÈú¡¡Ðšè@º•«Gæv€»ŽàG:NÖ  mFÑ#Ó§8=úRT*7d‚èkê¶h¹2Ê‘ŒýG×òªXz ]Ôíˆs°U“œãŸÖ—°˜\qÔ­FÃæ$§€sùba=t ¡N¡j/œ7»¿¥/c=ìBJÍ\¡›æS‚6ž?Jj…K^Átj6²Ï䤟9è š%Bq3ZÐNÍFLë¡ÿ=¨ö;ÐùŽJ‘ЊÁŒ¤· o¨1ppb©«„¶Éµíöî )sÂôçúÖßVì+–'¹ò–·šÁ@$.23ßéYÆÛ×a¶©D$ep'·oÆ­aäÝ®XŽáf¶Y¡RÊÝCY¸8Ë–CðæHö<`î$~¤’Ù¿ì_jÙ&Ì‚»O\wÅHÿl@_b$„½p|“@Z_GulÒª°Û÷”|ǦxÇZ|w&{Dž™·€B?ÈZqI½X2K»Ø$¶8Àçõ?•RQî$²€Iäu¬À£qþ®_¡¤âù¯ýrOåTjÿ|Ô??äi 6Sî/Ò˜ @P@P@Üs Ô:cÙ[É–ѹüûšÑUšw¸¬/Ù-ðG’˜#ŽÔ½¤û…ƒìvø#ÉNyœwÍÒ}ÂÁöK}¥|”ÚFÅ/i;ÞáaVÚ J ;PêIõ„k;ghP¥5Rkf+lm‹—0!$r=(ö³µ®B›;rrb^µÒ}ÂÀlíò’™ã ¥í'Ü,8ÛBvæ$ùFÑÇAéG<»ŽÃ •±Ýû„ç¯ý¬ûŠÈÊÚ06ƒ(uf÷aaZÒݱº8ö¤ªMlÂÁ?ÞJÍŒ­nÔŸ#¤Cùšh ¢4€‹ÏŠ|Ì*§PqÓŽ”]€žZc˜¢ì` ¤@ ’(åM’ dë‚8 Øœü‹Ïµ ª¿u@ú QÀÀ €* J¨ÀIFãý\¿CH7Ä?ò_úäŸÊ¨Õþù©9:~ÈÓ@l§Ü_¥0€ ( € ( €?ú£õ΀@P@P@P@P@P@P@Ï÷‡Ò“½·ü„¤ÿ®Cùš©€P@P@PWûíõ¤À¡qþ®_¡¤âù¯ýrOåTjÿ|Ô??äi 6Sî/Ò˜ @P@P@ ŸýQúç@ € ( € ( € ( € ( € ( € ( gûÃéI^ÛþBR×!üÍ ÔÀ( € ( € («ýöúÒ`P¸ÿW/ÐÒñü„GýrOåTjÿ|Ô??äi 6Sî/Ò˜ @P@P@ ŸýQúç@ € ( € ( € ( € ( € ( € ( gûÃéI^ÛþBR×!üÍ ÔÀ( € ( € («ýöúÒ`P¸ÿW/ÐÒñü„GýrOåTjÿ|Ô??äi 6Sî/Ò˜ @P@P@ ŸýQúç@ € ( € ( € ( € ( € ( € ( gûÃéIžcgÕ2’ùdE’FrO¡æ´§$“º¸™$vj¯›¿™†7 çñü;Öîµ7ot,=lî·×ÊH®*]XtˆX²‘ù‘¨±`–œçŒb±”œµc šÚs<²yçËm»PœÁŸÐþu X‰YF‘ÁùQ“ÀèZ¡q@†í¹ëŠ,@_ï·Ö“…Çú¹~†oˆä"¿õÉ?•P«ýóRrtüÿ‘¦€ÙO¸¿J`-P@P@2õGê?>€ ( € ( € ( € ( € ( € ( €!Ÿï¥&%@úƒ‚êƒÊ‘ÏSÓÒªå‘ØDrø0ôêZéx!Xlçs†goÇùT{o ±<ðy쮲íUV^¯¿áQ ò­€©=‚Ë=áXÙ6óÓùÖЬÛÒ!bk¨¢”@p‘†1Ü‚?úßE9J7i4À‘×î•,GlçÖ©â5Ø,1tÑåº ÆÈ`K9ÇçÞ¬k~P±4Zw—*Éç;bØç?L«]ZÁaÓØ‰¦y…,¡~îHÁÏ­(UåIX,Fúk4Ë"ܲ۰é×üñT«¤¬â"º¿†ϳ35e]§=ë˜ec'›hd#ãÝLŠä|Cÿ!ÿ®Iü©Ú¿ß5 G'OÏùh ”û‹ô¦Ð@P@P'ÿT~£ùÐè € ( € ( € ( € ( € ( € (¥ôÂ3gÃ4€ËP·º¤‚@WÈ ŒwúþtlÇL„•%ßåÇ^ƒ éÒ‹€ÖÒ iüÉARu…ÜñÁhÖÊ3g9ëúQp%‹‘"ˆ0æ‹€ÿ3œí\ç=)ó0!•<ëCo+ 9cÔóšW¢ °—)Æðô¥ÏžÞ‚‹€yíè(¸gÕV ¨­Ù~yCÀ8ãÿ×@t‚f”È3´(ÀÏn”öA¡AÑSò¤#âù¯ýrOåTjÿ|Ô‡ çœŽ>†šÂòô Lúgÿ×¢àm½þòß¿þ½ûmï÷“þýÿõè¸Ûo¼Ÿ÷ïÿ¯EÀ>Û{ýäÿ¿ýz.öÛßï'ýûÿëÑp¶Þÿy?ïßÿ^‹€}¶÷ûÉÿ~ÿúô\í·¿ÞOû÷ÿ×¢àm½þòß¿þ½îñ×idÇýsÿëÐý¶÷ûÉÿ~ÿúô\í·¿ÞOû÷ÿ×¢àm½þòß¿þ½ûmï÷“þýÿõè¸Ûo¼Ÿ÷ïÿ¯EÀ>Û{ýäÿ¿ýz.öÛßï'ýûÿëÑp¶Þÿy?ïßÿ^‹€}¶÷ûÉÿ~ÏøÓ¸Ûo¼Ÿ÷ïÿ¯Jàm½þòß¿þ½ûmï÷“þýÿõè¸Ûo¼Ÿ÷ïÿ¯EÀ>Û{ýäÿ¿ýz.öÛßï'ýûÿëÑp¶Þÿy?ïßÿ^‹€}¶÷ûÉÿ~ÿúô\í·¿ÞOûöƘÛo¼Ÿ÷ïÿ¯Jàm½þòß¿þ½ûmï÷“þýÿõè¸Ûo¼Ÿ÷ïÿ¯EÀ>Û{ýäÿ¿ýz.öÛßï'ýûÿëÑp¶Þÿy?ïßÿ^À‚åï. Ÿ<ÇîF?­ "¶Š{ydJ]äÆâÑú}(gϺþòÿß¿þ½<û¯ï/ýûÿëÑ Ÿuýåÿ¿ýz4ó¿÷ïÿ¯F€}×÷—þýÿõèÐϺþòÿß¿þ½y÷_Þ_ûöÆ<û¯ï/ýûÿëÑ Ÿuýåÿ¿ýz«,WrH_í,¹ì#P1ñ$ñF¨aF9Oþ½9„ì¥K ¹ÿ× WÄ‹³TÛéÒ˜ŽÑþù©6ûÉþ÷ô4üJ0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(ñOü†ýŪIî'Þß¾“¯÷'ÚgòÚOûèÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4‡«;=égbÇhäœÐÿÙlibstruts1.2-java-1.2.9/doc/images/how-to/eclipse/developing-eclipse-style30.jpg0000644000175000017500000005312610404045214030121 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„   (1#%(;4>=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀ2¤ÿÚ ?³©ê:„z¥ÔP\âˆ.ÐP’κ)ÒŒ¢‰os:_[žYbŽéÆ¡€òÁ ÈqïWì ·D¹>„¢óÄžb§ŸY¶Œëù}?1K’—asH‚Ó[Ön'´C†$•^6Œž? §J lì¹Ö½×7÷ÿJ=”CŽSô£ÙG°s±~Ó/÷ÿJ=”CŠ.%?ÅúRöQ;'“ûÔ{8ƒ›O'÷¨öQ;Î|}ê=œC„÷+‘D€ÈŠ[fáŸÊ¹î»X©&£p…ÿv›eVó2r<®=½hºì}Én5È·ÚåÊnÝ‘Áëùt¡µØ,Î[ÄndÔƒ·SŸÒ‰+0[z¾“c-Û\ÜÉ24¤/È@>žÕQªâ¬‚ÅKmK¸ȹ¸ÈÁe NÕ^ÚK œMM†I7\݆Œnc¿žGÒŸ·—ar!öÞÓfQ4\`’7Çô£ÛÈ9±i:|r|—·HêÛFdÇ#ð¥í¥Ø|ˆiÑôµôà§ÍéúQíåØ\ˆ’OXA”Ísµ@ä8õãµÞAȈÿ²ôÂÊ¢îà±ùŽ$åxÎO{yvD/öN™ž/'9È~1ù{ÑíåØ9"xsO™w¤Ó8?Äþ”{y³D1éC‰åé¹€þ”ý¼ƒÙ¡ÃHÒ'íÔïáG·{4> Kœâ)¤c€ØÜ2åKÛÈ=š]K‚M’Í"3–`ò£ÛÈ9'J€¸rW¨ 3ü¨öòf‰aЬ%Œ¯ùÑí¤Íö|>¯ùÑí¤Íö|>¯ùÑí¤Í ö½[ó£ÛH=š°ÅêßÚAìТÊ!Ý¿:=´ƒÙ¡~Ç«~t{i³Aö8ý[ó£ÛH=šZÆ;·çG¶{4fÕ¿:=´ƒÙ¡~Ξ¦m öh_!=MÚAìÐy ïKÛH9¾RûÑí¤ˆ_-}éûi³A°{Òö²fˆOœ‡Þ÷œ‘QÍäU„:u±bÅ['©Þhæò k8œÍ/=xióyŽSÄŠT*:Ô MßQ¥c¯¹‹ÍaÎÒ ƒÏLÞô€Ža¶$D±¡=@c@ ’É$™¤|ÃwœzzP±Æ°F*ƒqÅB,¡iÛ3üÎN?JE¶µ F«ÇE\ЉY6ȨWО?• "û1ò“‘ÏÌi€ß°B …P¡„9ÅOªF àH ɦÀŒX r¼zqŽÃÒÀÂÙ¦ù‘rTü›ÈçoEüÿúÔ|Þ‹ùÿõ¨ù½óÿëPóz/çÿÖ æô_Ïÿ­@Í迟ÿZ€›Ñ?þµ7¢þýj>oEüÿúÔ|Þ‹ùÿõ¨Žñ7ü…›ýŪ@v2ŸÞà@?ÒʦÖ’ óÖP~vvÈ#?:."vV3+‰ˆ@)†÷ÏZ@#óÇPIýi€G»y-ùÐO&dºÎ4ΞGôj`X€3j@*äBA=0 TJ²¦xaÒ€­g‘H ˆ«´€OÌ}qÚ†¥VY]Œ¥•±µZ@gEe2êívìDn1°98ïüûSD«yÁĤ \ð0O®zÒr8þ?ý–˜·v³\\‡]ÈW€Ùëׯ¦‡kG¹‡“øP[´–KP˜®:ã?úôëX^b›¹çj“ž‚€*XZÜ­ËM;•=:çp÷äЗðM<›W;I9á^´5ÔsEHä,àÇ¡aÞ€"Òmeµ‰üéÎÅ‚|¼ÐÀw“æ]nU1Á×®AõÊ€.ç=(hˆß°íâ€"·ˆÅÞÀ»±ÏéøRdEš7Œ±.E02íl®-5Udg¥JœI>¸¸¬„ÌæRP€``\õ¤«W¢ëL£W3Àô²)/‚€$ÇÈA98¤ å@C ÄóM€Ž®uسo'ó  Y´€2=hÈõ #Ö€ Z2=hÈõ #Ö€ Z2=hÈõ #Ö€ Z2=hÈõ #Ö€ Zã¼Mÿ!fÿqju˺HD¯ž¹`¸üéÔbT’‚GzÀåÁr?ÑTyŒ€198ÉãŠÖJÞãŒ'5t2ë_¼¶¹’‚1°RÉÈ$ŠÒ4c%{™9´ì5âþ”½ŠîÑ’ Ö?Â?J=ŠîÑŽl„~ŸáG±]ÃÚ1ârqÇòÿ =ŠîÑ’ 3ÛôáG±]ÃÚ1àñÿÖáKÙ.áígüàQì—pöŒ?ÏAKÙ!ó±Gùà…Íwv{þŸáKÙ¡ó‹þqþ½˜sùü(ä0¡G¯è?— sÑïùð¥ÊÂì§òáJøm§òáE‚âlÿÿ V ‹åSùð¤1|±ê!þÄØ=Oä?‰3C–‘Š…'ŽŸ•5¨lrJ“´.sþ€P±¶í¯’½F¡\B Np[nxë@I$Qófî}‹”ÎOƒÞšMì Øt-ÂO.e“Ëm­´ 5¸“¾Ä›©ü‡øR¸Æ±NÀ>‡ÞLæ0pƒÐP¼³ýïÐQp,ÿ{ô\Ë?ÞýòÏ÷¿AEÀ<³ýïÐQp,ÿ{ô\Ë?ÞýòÏ÷¿AEÀ<³ýïÐQp,ÿ{ô\Ë?Þý$R±³äz ä|Fwj{½cSúS²™I“ °#¡VÅ #+µqƒÜäœçƒ@ðÓµ±ÍoýÎZWt¸WP@' ­åIݱ)ÍG•lV:>µç»¦žÀ1`qQëZÆpJ×2i·±$šVµ.Íö+œò>lãߨQÏÔ9dHšn¸BÙ ÿ¯G<;‡,‰VÇ[ WìeAë€?ÇüâŽz}ÖD ¡jcþ]ô§ícÜ\Œ”hºüú?éGµpäcƨÿ¯Gµpäd«¥_ÿ²Rö‘tËÑÖÙèö±FJº}Øÿ—wü©{H‡#¶cþ]ßò£ÚD9(³¹ã0?åG´ˆr2Akp?å‹þT{H‡# œõ2~T½¤{‡#È›þx¿åG´ˆr1|‰¿ç‹þT¹âW+"oùâÿ•ñV¿çŒŸ•.t5/“7üòÊ—2 1|™ç‹ÿß4¹Y€Š_ùå'ýóK™Ì_*_ùã'ýóEÐY‡—/üñ“þù©¸ì\¿óÆOûæ‹…ƒÊ—þxÉÿ|Òc°¢9?猟÷Í+¾\ŸóÊOûæì\ŸóÉÿïšS¾¶2åž”·A‚@ªM¥a4ù~u¼%¦ 8‘Wƒ“ž¿'¸ÁmÔÛ¸”l(¶ŸxfF8éò~µ#$M´Œ7œ©tx~aÅÎ]‚ãMí¨ý¢>8á…?e>º{nB‘*œœ`=”ûÅ[Ëgm«:œc?çÔPéM+´;«y)22O>”9Gt;‡Ú ÚÎiï¸bg-¬o­BçÏŒç¦~Ê}…t(¾¶ÏúÕíƒØôÿ=”ûÆG¨ÚÊê©!%‰å St'v‚èŠëQ²ʲáx(Tòy㧨4ý…MìD—\òùgO˜¡˜€1×/½sÜe¿´Ï·vËlœùç§ýóG0 Ò ¶Øp39ÿß4s¿k›)òÚüç þy?÷ÍÀ5oÝØª‹lŽ ÎGþËG0kÉUµz/Úô9€‚ëí7 *}û3’ô9€¯§¬Ñ\Ít­lë01ø ÀiÛ\<²º: ÚªÀ£îG ô¦À±L€ ( € (  +Ø.$Ô È·PT tÞäu¤1Ø„a†Xð~¸ KÄ?òõÉ?•0:Ëù–¤‘Áa¼.Ü€:jÎRQWcÂÁÄ íUœq’>Ÿjãd›Ë­·‘’FJ€a;@éÇô÷ªúÄ֦ʅß*!ò´×wSÍóÇ8ãŸj¥ŒŸAýVV¹ 6Bbê%PP‚ã õü*~²í`ú´†¬ö¾LÃd… Ç'Ë©úýûõWt®;þ%øY<©º‚n•_Z•ˆú¬¯mIl@Üa}Í9ù}:ÒúÌ­ø”𒾂§Xˆ$ÞÜœ{œõÍ?­NÖ¹?U–úóàó„ÞC’rüxõÇçQíåkõo0¹’Ñ¡0°œ)ヒ=‡ëT±2¹+ )-ÄÛd¥Ê@ÙaÃ÷‰Ï^i¼LÁaŸp`ÜÊ!Œc9÷ϯãGÖgpú³µÄŽ<±b“n✆Ç?^õ_Z›bxf•ÇmÓš½x•'‰—Pú»{ „já¡c®ÜxïÇãIâe½Áadì!þΑ3üØÀÏåßßùÓX©'{ƒÂÉ\`Ke“·“Ÿêi¬\ì7…k[èIØ?îÌ-°` ô³í÷©}jw½ÄðÒHÙ²_fž0O§×RúÌšÃ4ír+‘a"•H\¹9Rs€Oÿ¯§µZ•¬˜,$·eVXÙŸr«1ÆHb?.+t?«L’$Ž& A,¤¹Žd/«Ïq“F¯+nx‹n=}z~s Xiµq!QÈꀼ8˸äž=ËaýZc¤ æ³É³I8wž{c¥2 ->Í­7.ÅU ìXçÿ¦Ê( € ( € ªÿ}¾´˜.?ÕËô4€ã|Cÿ!ÿ\“ùU×^›CCváD‘“ŽqÿÖ©²z ¤Õ˜DYˆãrà’A#Ú©»ŒµºìÅÿé" •ëÓúÖ^÷cµ*IïfKç\€ÐרåNï±”ÿœq’ãÌa;—ÊØ”amY Muå3 1¿8Q· õüé]ö4P§{shHn.AÚ,ò>˜§wØgO~aŠ×eÖW·P¡°T/8Ç&—½½Šj•¹T…K›™$ùmÀ a^‡Žô]öNœV²$y¥.Û9Œc­;»èˆŒ"ãïH7ÌîÁ­¶ár9ÇÿXQwØ9b’´…·û@‘„±©ÇFÛŽhWê)òYr±‚k•Ø«dª3 ¥wØ®JníÌ×HÄý‘pªËõý(»ì>Jm|CÖiÛÌXzm##×üúÓ»¶Ä8ENÎCVggÚöÃr¦àÎ?ý•ò)Á%u"1spèÐ9ÚFúÒ»ìW³‚ñ-È`>̬¬Øû¸Ú)Ýö%ÆŸó2Ü ÈŽÜé’1žŸýz.ï°¹aˬµ&œ¾Ûä mè;š.û  i-Ei&óFÛUÎv‚W Í}„£ k"8æ$O6Ü çè2xü¹¤›ê‹” Óå–À÷Hçì ýæS··Nßk Fœ$—¼*MuºBÖÜu_—­}„áNÊÒ&ºå ÜÜž?ÏlQwØ)íÍ ýó.[ìã~p/õÍ={ ÐzshB^x·ÈÖȸÛÜòOò:­lZP•¢¤XC(b¢Ù|µ_—lÿ>*µìdÔm~màŒ3Ë•[.ÖmHã·çùQwÕ¡³-®'WkŠYA°ôë@Yu °ô¢áÊ÷Ê úf€³‘˜ œ žô\[ÙÒ"Y€Š. -ì8JP@P@P@P@P@ ÿx})0*EI©6õÎØ™¦€¶líÎ3ã§&«ŠÈ_²Á»w–3G3 !ÂÄf0¿!àŠWw¸ì7ìÐó”Îx9&Ÿ3%´Q«¬i´?ÞÅÍ…’ZÂ.ÎÛ}È£™…¿f‡9ÙÎAê{t¥ÌÂÈ>Í1åŒg4s0²kÿ–có4ù˜Yh‘‚†\…éíJìv+0 Ä€ KÇú¹~†oˆä"?ë’* :ÛÂC0É)Ži$¾j´Œg¯ÐÐôÒâ ×`^™5<ˆêx©;ÝÅaLXgž=)¨¤D«ÊJÚ€ ŽAÜ $À¥ÈWÖ_T§+ÜL¯’9éG&·ˆj<¶Ó" ´³CÆGÐÑÈâe{ØY,b¢³9XóŒõ¡ÅXQ¯.f×QŸ„`Ì\c4r!ûy+¡íbŒª¥Ûå]£ Så%WiÞÙӵˆ8À&—"+ë2¾ úr¼H­+nEÚaøQÉ ,CRm-Æ*0rdlƒ‘Àÿ&ŽD7Š—aÇLˆ»6÷Ëö£‘ ë2²V„q£°l`ž9¦£be]Ët4i÷,O>ž˜¥ÈŠúÌÇÚZ}˜¿Ï¸Çÿ=)Æ6"­_im 5F!@P@P@P@P@P3ýáô¤À¢³ù:™Èh¹ç°'§©ªŒn&ì]†éf“bŒ»¹#ÔéMÆÀ™—ËÞ[&0Ø'péëMBè\ÃÒñã@9rÂ8Á¡Á¡Ül×Ë ¬†';z‘Œvÿ.®'+[܉‘Ûn6iJ6w+R2¸ëÈãœU{6.dKöÔöÆT}ᑟZ\ƒ¸Ö¿A´lo˜:QÈ+‹öäÆHçhl¾(äbK{•¸,·×¤JR‹CNäo÷ÛëPÆP¸ÿW/ÐÒñü„Wþ¹'òª«½šD¹Ž4T;Ïñÿž´€#”ÈdÂE$)Æ3òПÛLvâF @`;{}jy´¹Ò¨§.TQË ~;äc¥þ@ðöWæ¨dÿ¨|’}9Çõü¨ç«ù‘MÊ3y8ämΗ9VWJäŸÚ'Ëöy9úSçò#êúÛ™ Ÿ ÜW8çüŠ\å<7f;ûDïÚ-äÎ)óùõ}/Ì4_Ìqˆ3‘¸Žøÿ"—;°qdÔLgCžq€ÏùÅ7;tp÷ê)¿nBÅÉÀ\žüõ…ÁìVP,Çl,W±­àðöZ±c¿ß!Q¸… õÀëB¥BÊ÷¨ ¬|—Ï_j9ƒØkkŒþÔTù7gnis—õo0MD²Ü²œòOL fŸ8ž'¸èõ Ìs õÏAÇ?¯éB¥BËqb¿2.L/÷K`rqš…*¯q¢-æúQÏ þ¯yZã[S#†# \þE,7˜£Pr¡„ ƒŽ;÷ÿOŸÈ_WWµÆ¥üÆEV„rÄ#%7qº³iƒêØnËì_Ìõ£™‚¡ ]¾„Ÿneo-ábã9ÛÚŸ1Á5tôíåN E‰â@üèæò%ÐÒüÃŒ¾r‡ T{ӽ̧Wb²HcÔ˜í-˜»~5qW3e¡rïdgD]ÝR8Ï­W-¥a_K‡ÚdÞÄ~ð]ÜãëÓÛõ£•ãæ™¢p«`Fr)%plK{†™ÙZ= ùçô¡ÆÀȤ¼–2BÛ1ˆÏ?áT¢»Šìi¸Ürm—$ ‚'#¾?j>ar[{£4¬¾^Ü(nzý:TÊ6CNäq^»¯üz¸ ž9ý8¦à—Q\E½—a-žBžÇŠ9Wp¹f L 1” p þ!ëRÕ†ˆŸï·Ö¡Œ¡qþ®_¡¤âùúäŸÊ¨²öÚ§I%-”<zÒÂ1ACq“žÆ€-*ߘ•”«¯M¬#ŸÒ£Þ; L_Pü‘ûœÓ÷ˆJ‡v+à À\Ž8ñ×=ºô£ÞöI1ÔŒMˆ×Ì'p?:^ñ¢öZè<ɨÄiRGøÓ¼‰Q¡ÜE]CzÊûN”éóÞ—½¸Û£nT"> òr›vðxÏüÑy·$‘ï<áåĸÀÉ8ã­7Í}Š¥Ë«7„¾èÔ|¿)Îp®(÷‚Ô´³¶÷Î “³#åãüÏëG½r¯G–ÝI%7jq !@¿ŽqMót"*“øž¤eµ;# q•ôäûý?:^ñv¡}ô$†K£pRTÂâƒøæ„Ýõ"q§Ëx½HÚKå]Íž@ Ÿ~ô^E¨Ñz&,²^ùûVb8ëƒõÏ47+Š1¥ËvõN Ø,Š¥I㌯4{Ãj‚Ñ1ÌׯÝ@Eœî×7ÍÌ¢ÛHMé*;îëúГî©äb>XíÄ“ÎrIÀëøQn—ž¼Ü€"PÊ îá•!2HàŽœÑo0æv¿!{íPmÍ\Í_29½”ïk n!Q“*ñèrhº§7ÐQ4g¤‹ŸLóEй%ØE¸…Ê…‘Inƒ<К§%º΋þz§ýô(º$»n!ƒ"‚iÉïþMCörì+ÍlÜ) ‘Ÿj.”$ÕÒÜÂ/š™9ïEÐýœí{¸„6Ó*gÓ4]³•¯`óâÈÁ9ÇËÏò¢è9%ØFºÌ«ÉÇ4s!ªS}ù±ã>bc8ÎáÖ‹¢y%Øc\À¤5I'4s"•)¾ƒÒTŒ”^丸î‡S$( € ( € ( € ( € †¼>”˜aÝöùvcw’1Ÿ\šh íÁ”&Ç$ã=´÷ Ô#7Üo 9ç§çŠO”5&O<@Áˆ2ó‚qIÚãÖÄOöÑ÷0~¸ª\¢Ô]ÉÉËœ‚FÇ҇ʌV¿)£ž™þx£Ü Kyþcù¸Ù·š—kh5r#öÑÐ)çÚŸº-Do·cå*>QÔ´ýÀÔyD§oÍߌëŸÎ•â=F Øýæ7ÿ=k7¸ÊWêåú@q¾!ÿˆÿ®Iüª€ìf’5QÀËôÈÍCvvŽ.1ÏE#±õB5¤…g…Q‰ƒÅ \¸MÁÝ6Øç!°{n©äF«Q›HLKRUsŒž”ùVÄ{Y't1l RÄùž¹£• ×›a¶ä ­€2¦1ü¨åCöójÌO·PB«qŽD¼Þà, Pv†ŽsøZ9Py½Ä[ hÃb>£ÖŽT†ëÔ•µ {HQÌ«FùäVáR¬ÚånèTÓíÑÄÉ´r!:õµÀiöáêÃ9ô£‘ëjÍ‹-”S.Xº€çž(qLQ­(í°ÅÓmÁæ%NTç¥.DSÄÌ_ìû}ÌØl“’ww§È…õ‰ÚÖÊ`eão¶sÖŽT'Zoq>ÁoýÒzõ>£ŽTÞ`–1¬{ b2O^ØÆ?AG*^MÜ>ÁoŒm=Z9P{y¶¶àáÙ‰î~¤ÿZl*•úUP@P@P@P@Ï÷‡Ò“½·ü„¤ÿ®Cùš©€P@P@h €*¿ßo­& õrý 8ßÿÈEë’* ;99*{Ôµ}c&ÅÆ[˜ŸCBÐe湚+Q!RJŒ°ÚGáÿ×¥v•Έӌ¥Ëpw%ˆû)ÀîsÏJ9Ÿ`t©¥ñ .î3ÿ­€2zç¯ù4s>Áì¡üÄBòïk!ƒº»O½.iv/ØÒÓÞ$û]Ï–ì“Û'ü)ó>Ä{*w·0Á{r©¶bûsÐŒþŸ.gاFžêZû]Öý¿d#Ü“åO™ö'ÙSµù†‹›Â@ íÜTŒ~¯"½.âÉyplIôÿóšnO±1£M«ó nnN@€ŒàúÔ]‚§O¸-ÝöVÜ”#޼ÑÌû¥¼µ—S´„}¶–!rãô)>•(%ñ.®6±6¬Î'úQÌû²…þ!Ÿn¹ÂæÑ”¾p9Ïò¥Ìûì)ëïl ws°o·)ޤƒÐcÿ¯O™ö¥NúH|wW’öÄ/Ðä?>ÿ• O°¥JŸIWW ¿5³gilr;ð9ö¡Iö©S[HCwp"ÝöV-èÿ 9¶²‡5¹†5í×ݤ9ã'úRæ}ŠTiïÍ ¢êëû?'gq×ü?Z|ϰ½•=¹„K‹ß1CEŸ˜†ã#¿OZWÝ:Vv`÷Ûʤ9ö‚Tð2zþœÑy§F×o ñsp¯åùÈÎXp?ÏJwdû:m^öµNh€¹Ï¡o­Ì=”-{ØgÛæË퀶Þ¨=G_çK™•ì#¥Øä½‚²¶gvéO™ö£xAut³óSK™‡²§ÒCÒêà’ZØ…úÇ·=ÿ*jO°*}$0]ÜìRÐîF®þT¹ŸaºTïe {»¬€¶¬£#““Æ}…>gØ*}d#j«06¬03È?áKöÃÁ¯ˆzÝÜoÛör{ž¼q:Sæ}‰t¡kó^\`-ªŒçžJ9Ÿ`TaoˆŒ^Ý0È·!Jä6:gÒ—3ì_±¦¾Ðóyr:Z3ÐŒôü©ó>Ī4úÈpº¹.ì¤džqõéG3ìK¥N׿diQ]—n{fîe8¨»&Sû;O©ñ# XÆpHÈɦˆ/ZÃ4 ±³«F©€yÉ9÷ö¦|š}ÿÛ^T|·“q\•ÀÆ;~h.Ñî,6Wé 6eFRK1êë×¶h G¸²ØßIQ0V*2»qŒvü?h÷¶WŠêÁÔ~ð¹;˜žA¾;þ”£Ü‹û:û<̬8ʳ1œc?JÑî:K ÒÀÇ(Œ aUˆŒt¦h G¸©awá59rHfÉÝøö -å¨ífþϼ¸—9, #®qœç¨ ‰´éüÝëxà úý€f–2ÛŠŒëH —êåú@q¾!ÿŠÿ×$þU@v›ö1Œ9 N3DRm&ì€ …‰G|Øàôö¡Ù½7kºÜ…8áY²1Ž¿¥giw;yé7g’ùwø8™zp?¤G5Ú+³ >g 9ǧ$½Åd©SKb‹Pò™LɽÎ=±ÐqJÒ±¢•kÛDHɨg>laqßáNÒ%:†­½ê••§ƒ—8cJV–÷©Iûª ‘ß´™y6㌂0ztþtZ@åE-#‹Æ˜yr"Ýýiû×!{%P»nÁ`ò&p¸8çx/KK"1ÏŸ»ÎÎÝÞqùR³¹\ôùmoÀ–_´™6Å4cåû§­S¿B#ìíy"&ŽÿË\Ü àc€;ž8ôÇëSiw-Jþ ûWÚ‘·F;ñÏéM^äOÙòé¹n¬À(„q@ZÁžq@Gå@"²°ùH8ãŠÓ[Š=88â€j ¤P 5¸ ƒÐƒ@­a)b¡#¨ÏJgk€e,T¸u®ƒA<Ð 4-  g@X&€ €3ž( N ,5äHþûªýN(½†¢ÞÈs0Q– z&ö C?ÞJL ‘>ÍEÎ3û¡üÍ ŸhÝ4Åpû@þé .hÝ4Ãíû¦€¸} tдîšáöýÓ@\>Ð?ºh ‡Ú÷Mpû@þé .BÇ,O­HÊ7êåúã|Cÿ!ÿ®Iüª€ë5)R(\™øHÍ8$䓱´¾l26âT3'®6ÒjÌ ‘ÁiåDÂà†ÙÀoSß¼ÖVs½Ô«vœGK¿ïÜì¶ßŸ¥ .⌧£åÐ{ŠĢU»ÈQócÓüy§dõ¸”§ò¸‘Æ–l2n³Õ¾n«Çé×ó¤”{•)U[D“ʶ0~ÔJ©,ÜäûÓ²µ®G5E.nQ»-W<»n>ñãÆ—»Ü«Õ_dœY‰­¢iýáŽ5\·F^ÙÂo@:jâF\õÚ1G ,K]½Šº¢ù®¡ +·ŒsC‰*»M»n0é©ÚFôÿ=(ä+ë/°6š„`HÊ=rÄ5ÐWÓctUómÇóÖŽDÄI;Ø_°~ìD%!ÈÀç=èåè/o¯5µlJ™@”„u ÑÊ½í¦¨béx@¦áø9Èâ—'™o­ùG=Eu‘Sœ4ùx†ÓMÓѤgi–$ÑÈ Ò²BÇc²O0Jwn,NSB‚Uî­ažŒÀ™¶:ÑÈ ÖÈDÓü¹#hå /\j9,7ˆæM41´Ï˜•™°y;†yïK¥‰î‡ 1Bº‰ŸçëžßJ|‚úËm;l(Ó`yŒ@==häľÀ1ˆüÖÚ9éÏçG/A*úÞÄriŠU¼¹ ’OQÇ¥Gïª%û.Ž\î_N™Îiò‘íšKúµ†I§îîn™è)8E­tiæYUÌÍÀÁ¡Âá ü©«ÓW't¬Ù9ät>ÔrÖ_D;û=|(Êåwnç­šX^ÝósXC§.y€CŽ (äÖaZÃt+œà)ÈÇZ9t°•{KšÃNš‡¤Œ¹ë´bŽA¬Kì=¬#tÌÅ@ LÓåDªòN艴ÒdÎ;F:ŽxéKµˆIl[‚{’=ê’±„ææîÆÏ÷‡Ò†AD4cS*ï´˜zU¹-’­Å«"áp£$öÅ[£5ÐZóm·mûJg ~'¥/e=ì“Êö4£~ÝÁqÉäRPm]Ã-¸]Í8ä}?ÄSöSÙ â$Z\èqíšJ ÞÀ!0‹cqææ033B§.n^ 4IoŒ™‚ãr23ü©û)v Â"7E(u¥f€HÂÈáW+»%01þM@,b)]Ò9•š3µ€ìqŸëS`°„`‘éR2Çú¹~†€8ßÿÈEë’* ;gUbûÙU@É-H6++Vp =ø5O}X‘£<6°À²< ð®+6’Ôé§:’|©•¦º¶21û>ã€NO9î1R仕K%ÌXn–áÄ µÁàr{‡éUuc.ZŽV¾ÅukV|-¹U‰õÀϯ=*tìjÕDµ—aÞ|)_³Ü$¶:ãüsEÕö$Ò¿6ß Õ–Û`Å©v$ŒÝÏ4]v…KüE…ÔG¶8ˆ ˆœUsö2tï&:=E_?º“å'Oǽâ–®¢A¨y²ˆÌL§$x¡JîÁ:±æ¸©¨¤Žb“ôÿ=¨ç‡i]±£R]‚&å† à`ãš9õÕ½ÛÜ’âù tK+.KƒÓžž´Ü¬E:iÿj¦õ6ÁÈ'#ð©ç4ú«³ÔqÔÓÌeòÛ qœŠ|âú³µî9oÃãTc9sŒŒã~sè5Ôkj\ ‘1äòzp2hç)aû²A~†=áOR1‘éŸëO˜‡A§k‘K‘¶ÛÉ'ØzRç-aû²{k¡p[{ç¹Òš•̪Rä'ª2 ( € ( € ( € ( €!Ÿï¥&8áŽmIüÅ݈†?3U8ì‘§Ú¨`"áºå‰þµ§¶ŸqXT±¶LmAÜr1I՛݌t–±K7šà“·n3Çùæ’©(«!Xdš}³®6q·!ŽqÇø ¥Zh,K-¼Rª«©!: ‘Ž1SÊ:¡ˆ-¢´A>Fê2hç•ùº…„6å3’ Ë cùSö’Aamí¢¶V¦ÐÇ'’y¥9ÊÔÔŠ8ÙÙ)s– u=?¥W¾ßZL êåú@q¾!ÿˆÿ®Iüª€í%™!æmŒݪZ¸Ó¶ÄEÑö…Q´ƒM;°qhÚP .@< b@Î8=¨¨ ®ƒß¤S×aÄ0@#Þ™;P@J(Ú6íÀǦ(Þà W 8 €UPaT(Îx ¶÷¨‘Œ"ªaŠ6mî- ( € ( € ( € ( €!Ÿï¥&{où Iÿ\‡ó4 /S € ( € (  ¯÷ÛëIBãý\¿CH7Ä?òõÉ?•P]ÿÚÑ´‰äHàãƒÍT9~Ñ2¿AUNÍÌ›—çÿ{iÍE’nƜͤ™tá­ÂE4bP2¼ã'O¾ GMÕ%y'aâ ·oxìtâ‹>ä¹ÂÖäÇ*²†½˜|£'äsý(³î>hµ¤¾Îê’fíOwlú>?•+y—íkÝô&ò&òÀûqÏç¯5V}Ìùဉc”H­èÎ00O^¿Ê¦Ïkš9FÎNÌR @kþ1÷sNϹ<ѵÔìm¼+\`ªõÜàÑËæÙZê"ËÙ$^m É;ºóü¨i÷gåSt› Ø%°dò9íøÑóì¯Ê<[Ï»{Ým$s†âs†ü¤FÞã >ÚPÄ·ùü©Y÷/ÚS×Ü-¦@®ƒ<)8ç·ò¢Íu©ªˆ$OŒÝ‚ÌrãÉãúE­Ô“_èá’(÷=æiù³žsœóM&ºŠSŒ”Dhg… 1À OzVvÜjpæ¿ Ç¶œàÁ°Ž¤÷þ´r¾ãU!üº‰ä°*†ïç<îÎyäQo1ó­Ôtþ¿à‚ÚyRÆ~У,Jœò{ÿ!G-ºƒ«ÌšåK@Ò Ü¨ù £“ýi8ùŽ5l¾‘'”Ë&Ôºƒ;T7ùîiÛ]ÈæM]Æì n‹ ŠHû¬I<ð¢Ï¸)'öF2N»É¹T$à6ìœdcõÍ-{”¥eÊ9b¸2×c†'Ó4ìû‰ÊÚ"ý–TÀYUQ„'¸ÿëŠ9Zê/k¯(ä‚TùÍØ9ç–àôþƒõ¦“î'8½9F$Š ^è¼ä·rsŸÈšVk©\ñ“Ò"µ¬ïɼÜ ÀõíG+î%V ì 1\Ì·ªËïc¬û•ÍMY8$grÝ€ƒžŽ´ìû’çœu$s+3›Ü pïÒ†ŸqÆQv\ƒ¼¸ïÎ6•<ãŽiY÷+ÚGe‰~Ípÿvð‚yÀ9§gÜiMoâÖà8ÍÓmw9Ç¥>W܇VøGmtU1fõ¦e6›Ð¨n ¾ Ä rÑ€qÜÓFmصöÓ†Ä-òŒÈ'œz~4Ââ­ã3ÐXsœ×¥qc¼/*£BËžÿäP ‰=ãE1ŒBÍݨÇÁpe2e …Æ3Ö€Lˆ_>2mØ|¥ºþ” ãÔ€óÑ•É9Ïáé@î,w.î ÂPAÉäc”Ë4 («ýöúÒ`P¸ÿW/ÐÒñü„GýrOåTcv…†C”ÚÀçv3ëJ×DQÎ'€J(;¸VÝØÑ¥ôÓØœg´*$.ËÈôŸ»mOG÷ê^îÃÞ+8ÞGLüõ¨´lJ•nkW±fÜÀ'ŸÍ.û»óÖŽE{‚ÄIG• ]6R¿1žMˆ"mÜ_ìø|¥-µz ÓäV°¾±;¹Óá$˜cœq×ÖŽDÞc¾ÅÅ]Ï…ÿŸJ9P½´¯qŸÙ¶ûp`sïš\ˆ¯¬Îâ6¨îä¨ 6qŒõâŽE`X‰)]!?²àÉ,ÎyÈ祈YŸAÇM˜—%ºò(äBX‰¤’–1FABÊßÞš|©ëÉèÄt H9ëG"ÄLDÓâUÚŘÜ£ÓŒRäCx‰7t9ì!vÜs09éÆ)ò¢Uy%oë¸ÇÓ‘áDy”$ƒÇ_¥.M X†¤Ú[Š4ØËäŒ{Qȃëµ…]>Ü<ϽO‘ ×›µúötHù†}ùǧëG"¬N÷¶Qª°H=»QÊ„ëI|ç H ò}:Qȇõ‰‰Ÿ+!%”ž§SIAX‰6˜ø,â·ºÉë“ME"'ZSVeŠ£"þðúR`V¶ûIý¢ÌЀ¿L€ ( € ( €*¿ßo­& õrý 8ßÿÈEë’* :­Fî+8ÚYÝ€/µ@ñŸCRÝ‹„%7h‰g,7bXrç(@O>ÔÑ.<®Æ¼Ë ÊÂÝ¢ãýjNÉlmMÎr·1Zk–9U³È|¥3ÏåPåäm ijæN $k2Ùì@Œ~Z­7±›»|®z,›Ø±( å:àqŽ)_È·/ŒA)ÞY¤jÅsƒÇ·aEü‡Ê­¤ï¹ ½¸Ù͹ pz{QÌûèÂÿï¶ÌTâÜ®;¶x?L{Sæ}…ì`¾Ð±ÞÌÛ³jà(Îzg§jŸ`•¯´$s¼¡ܨ‚ÇúP¤ûéAFêB¥ìÎáE£ ÷-Çò£™öF)_˜h½œÊWìÌ# {/s>Ãö0µù‡Ü^”s>Å*0[Èz^³Å¼BN‚2{ úuÿ 9‰tRv¸Æ¼¸8+l@'©Èü¨æ}ŠTaÖDÖ—&à±ÚŽ˜9îGô§s:´Ô,Xª1 ( € ( € ( € ( €!Ÿï¥&{où Iÿ\‡ó4 /S € ( € (  ¯÷ÛëIBãý\¿CH7Ä?òõÉ?•P«¬l$I\1<2ç¶*JM­™RÖÊ 8KÌXîúd`¢ý)€´P@Pzpph¨¥‹{šÛ»@‚€ ( €   €à P@P@P@P@P@Ï÷‡Ò“½·ü„¤ÿ®Cùš©€P@P@PWûíõ¤À¡qþ®_¡¤âù¯ýrOåTjÿ|ÔŸwð?ÈÓ@Hhl•’íÕ2{à’{V 4ùMþ±wÌÒ…«™Û‰mÇ©Æ:ôçß4ž¢Ýë+K!ZÀŒ-è ·$–ê1ÔsQìg²)bc«h¿ÄNVeuAÉ5§³’Ñ£•»»ˆo!\om™ù†1þsOÙÉì+‹öËl'ŒpFáKÙϰ]Û-¹ýü| Ÿ›¥?e>Ár1©ZíV2…ŠŒñUì'µ‚èt—ÖѦã2c<Ÿ¥J¥6í`ºÞÚŽ·øÊ}‚èF¾µPI¸“†¡R›èB BÛxC& îFSÏýŒí{Ç}¶ØãÿµKÙO°]/­IAù¶ÿŸÎe>ÁqRöÙÛjÌ„çÏ_óš)¥{ÅŽòÞ@JL„ “ϧÿª‡NktµÛìßç¦ß]Ô½œïkÆ›ûPóÐç¦ W±Ÿ`ºíÖÜbd ÷õü©{)ö ‚ÞÛ8$Lœg<ôÆÀÐéMt Š·væ3 ™6€ $ôÍ'NiÚÁpk»u´Ñ€{î¡S›è×ö«ŒÎœžÍÒ©Q›èAöû`2¨ÉÀÿ>”{)ö ŠomPfO˜9íKÙO°\y¹[i™œníK’V½‡q†öÔ ñ‚:Ý)û)öбÞ[ÊÌ©*–ã=½ht§v‚àní†3j^Î}‚äÕ ( € (þðúR`QÉ&¢|©<¼F ÷4!4J–“eñvI#¨'=úئ.VZ’'eŒ+ò„Ny b$,4BC“œ6I"€¶„?c›ajpØÆrÏoç@¬=måÊ“"œ9làúb؉,¦÷O»r•ç>ý?ÒY–!ŠHävyK ØP;P0 €)K"£¾OBiAÜIlÒ.pÈXgÜRñü„GýrOåTjÿ|ÔŸwð?ÈÓ@]].ÌÆ€Åà±æ·úÅNâ²ý™j‚¡°wn$‚:=¼ÂÈwö}©EVˆ1U žp?­/m;èÂÈ|VC”‰„Æ1“S*’“»z…†KcªŒŸ)ÎwœŸÆª5e‚Â.›hªÊ°€¨ÐëÔzÜ,´ëFB†._˜æ…^iÞád!ÒíYÛé¸ã¦)ûzÂÈsiÖÖý}1ý%Z¢êC²í711“‘Œ8©ûzÂÈQ§Zÿ¹?ÞäóKÛÔÓP²¶PfÙ¹˜ƒ’sÓ¥'VVµÂÙh[-xÀž•^Þ¥· !ÍarCg×q'ëúRU¤‚Àº}²© Þ>Üýx•´ßP°.Ÿj‹´DÛ·“Å´ßP²´ëWcEòÿ¼hUæîB.Ñ›&3Œ`®ãƒÎiªõÜ,ƒû2×nôcïþ&o>ád8éö¥ y)í¸ûÿ‰üé{iÞ÷ û±FSCc9$ž:Qí§{Ü,´ëW+˜þéÈùZi®¡d3û*Ï'1’0¥Žâ«ë;…ã§[$¡ô1ã§OÊ—¶Ÿp°­§Û1bc9aƒ†==)*Ó]BÕ¹rþPŒpqKÚÎÖ¸X‰´«2²/–Fþ¤1ÍZÄTMk°YO¶ŽBéõ;?Z—ZmY°°ƒM´ Œ!¡ÈÁ=iûzš«…‘j±P@P@Ï÷‡Ò“Š[‰µerH1 aïÉ¡`X·”cóýЋ;}Ï4À¸”P@P@—yþ²_Æcp,cþYåJú”¢Ú¹Ëx‡þB#þ¹'òª$í_ïš#“§çü4Ê}ÅúSh € ( € ( € ( € ( € ( € ( € ( € ( €!Ÿï¥&XWUd'¢÷äЀ¿¤ˆ6 §¡逴P@P@—yþ²_Æâÿr×!ü¨”ñü„GýrOåLÕþù©9:~ÈÓ@l§Ü_¥0€ ( € ( € ( € ( € ( € ( € ( € ( € (þðúR`T†%}T±ÎR.0}I /Æ‹j‹ª02r:`:€ ( € ( €1¯n`J ÈÈÆáH"ÿr×ü¨”ñü„Wþ¹'ò¦jÿ|Ô??äi 6Sî/Ò˜ @P@P@P@P@P@P@P@P@ ÿx})0),éo¨;881ÇÔÕÂ[dŸÚöûw”¹ázsŒ}ko«NöË\ùK [Í` ïYÆo]†BÚ¤ ‘•ðA=»~5k&ì+–#¸Y­–xAun@¬ÜeË!ŠŽøs${ž0w? RIlÀ„_Çö/µl“f@Á]§®;⤶ /±B~^¸uÉ45¥ôwVÍ2« ¿yGÌzgŒu Çrg´Ià‰›x#ü‡õ§›Õ€ã$»°!ÈÝ‚KcŒSùU%à@@,K*‚O=ë0(Ü«—èiÇx‡þB+ÿ\“ùUÚ¿ß5 G'OÏùh ”û‹ô¦Ð@P@P@P@P@P@P@P@P@C?ÞJL ÖàIò:D?™¦€º#@¼ðx§ÌÀRªq•8éEØ å¦1±qéŠ.ÀpFz @Ù"ŽTÙ"N¸#Š]‰ÏȼûPª«÷T   (¡P¤ªŒx˜n?ÕËô4€ã|Cÿ!ÿ®Iüª€í_ïš#“§çü4Ê}ÅúSh € ( € ( € ( € ( € ( € ( € ( € ( €!Ÿï¥&{où Iÿ\‡ó4 /S € ( € (  ¯÷ÛëIBãý\¿CH7Ä?ò_úäŸÊ¨Õþù©9:~ÈÓ@l§Ü_¥0€ ( € ( € ( € ( € ( € ( € ( € ( € (þðúR`W¶ÿ”ŸõÈ3Bõ0 ( € ( € ªÿ}¾´˜.?ÕËô4€ã|Cÿ!ÿ\“ùUÚ¿ß5 G'OÏùh ”û‹ô¦Ð@P@P@P@P@P@P@P@P@C?ÞJL ößò“þ¹æh@^¦@P@P@_ï·Ö“…Çú¹~†oˆä"?ë’* ;Wûæ¤äéùÿ#M²Ÿq~”ÀZ( € ( € ( € ( € ( € ( € ( € ( € ( gûÃéIžcgÕ>I¼³å`HÎI÷æ´¦ÒNêâd‘Ø]ª¾nÎæÜ3ŸóŽõ»­MÛÝ 1âÎëpf¼o¼¤€x8©uam",¤~K¤p„X°KNsÆ1XÊNZ±Mm9žY<óå¶Ý¨N`‚Oè:,D¬#Hà‡|¨Éàt‹-ƒÐƒŽ8 € ÃvÜŒõÅ  ¯÷ÛëIBãý\¿CH7Ä?ò_úäŸÊ¨Õþù©9:~ÈÓ@l§Ü_¥0€ ( € ( € ( € ( € ( € ( € ( € ( € (þðúR`RT¨8.yC’9êzUB\ 2;ŽBß‚~@ë]/ýÒlN¶K•䳆goÇùT{o!Øžx<öWYvª«/×ßð¨„ùVÀTžÁežð¬l›yéüëhVmé±5ÔQL ®20Æ;Gÿ[ó¨§)Fí h`ÓFC\ºT±³ŸZ§ˆ×`°ÅÓG–è/!,8çgŸz>±­ùBÄÑiÂ9’O9Ø«Ç89üjeZêÖ žÄM3È)uUÎÜ‘ƒšP«Ê’°XŠM1še‘nYHmد·_óÅZ®’³ˆXŽêþo>ÌÄùÌ *í<ï\£+ ¶†B0^=ØôÈ GÄ?ò_úäŸÊ˜«ýóRrtüÿ‘¦€ÙO¸¿J`-P@P@P@P@P@P@P@P@PKé„fÃ4˜j«yªÊ$Dvã¿×ó£`&:d$©.ÿ.00½AÒ‹€ÖÒ iüÉARu…ÜñÁhÖÊ3g9ëúQp%‹‘"ˆ0æ‹€ÿ3œí\ç=)ó0!‘<ëCo3 9cÔóšW¢ °—)ÆðôþT\ >{z .ç· ¢àUŸTX.¢·eËÊ®uÏç@t¢fœ©gF{t  v…EL ý)Èx‡þB+ÿ\“ùUÚ¿ß5 G!Æ<äqô4З€`2`Ó3þ4\í·¿ÞþýŸñ¢àm½þô÷ìÿm½þô÷ìÿm½þô÷ìÿûmï÷£ÿ¿güh¸Ûo½ýû?ãEÀ>Û{ýèÿïÙÿ.öÛßïGÿ~ÏøÑp¶Þÿz?ûöÆ‹€}¶÷ûÑÿß³þ4}¶÷ûÑÿß³þ4}¶÷ûÑÿß³þ4\í·¿ÞþýŸñ¢àm½þô÷ìÿûmï÷£ÿ¿güh¸Ûo½ýû?ãEÀ>Û{ýèÿïÙÿ.öÛßïGÿ~ÏøÑp¶Þÿz?ûöƘÛo½ýû?ãJàm½þô÷ìÿûmï÷£ÿ¿güh¸Ûo½ýû?ãEÀ>Û{ýèÿïÙÿ.öÛßïGÿ~ÏøÑp¶Þÿz?ûöÆ‹€}¶÷ûÑÿß³þ4\í·¿ÞþýŸñ¦öÛßïGÿ~ÏøÒûmï÷£ÿ¿güh¸Ûo½ýû?ãEÀ>Û{ýèÿïÙÿ.öÛßïGÿ~ÏøÑp¶Þÿz?ûöÆ‹€}¶÷ûÑÿß³þ4^åï. Ÿ<ÇîF9üè+h§·–ID¥ÞLY=>”gϺþòÿß³þ4hçÝy?ïÙÿ4óŸ÷ìÿy÷_ÞOûöÆ<û¯ï'ýû?ãF€}×÷“þýŸñ£@>ëûÉÿ~ÏøÐçÝy?ïÙÿ4óŸ÷ìÿV–;¹$/ö¦\öŽ(Ñ$ñD¨£)ÿ× 0”©a‚1÷?úô å|H»5M¾‘¨ý)ˆíïš#o¼ŸïC@Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€8ÿÿÈa¿ÜZ 4žâ}íûé:ÿxÐ}¦qÿ-¤ÿ¾i¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@z³³Þ–v,vŽIÍÿÙlibstruts1.2-java-1.2.9/doc/images/how-to/eclipse/developing-eclipse-style31.jpg0000644000175000017500000004772610404045250030133 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„   (1#%(;4>=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀ2¤ÿÚ ?³©êWñê—0Ár±Ç]«°’tS§Ú!½õ3¢Õõ¹å–8î—z(`<°wr\{Õ{8%v‰æ‘(¼ñ'˜©çÅ–m£O?—ÓórRìÒ µÖõ›‰ÄFíá‰%£'ùU:TÒØ9Ùn ½zxä)wô+òì^Œ29©p¦º4†ý³ÄAKâÚ;¾\vÔQÉO°sH’+íb[U•/£.чXü±œnÅ''k4‡›qﻌH;Ý»ýÑÉO°sHaº×Ô×½GËïíìiòRìÒ)Éâ Z9&ÑŠ°Ø½EW±ƒèO<†êŸóÝïþ{vy ¾#ÔÏü·÷À§ìaØ9ä;þ-Oþ{ûàRö0ììQâKþ{ûàQì`76/ü$—ü÷÷Àÿ =Œ; žC†¿¨ãýpÿ¾Æƒ‹ý½¨ÿÏqÿ| =Œ;<…ö£ÿ=Çýð(ö0ìòkº†?×ûàRö0ìòûsPÿžãþø{vy 5½Cþ{ûä…?cÃçc¿¶ïÿç¨ÿ¾E/cÂç¿ÛWßóÔß"cÁÎÅþÙ¾ÿžÃþù{vy 5›ïùê?ï‘G±€s±ÃW½ÇúßütQì¡Ø9ä(Õïç¨ÿ¾EʃžC¿µo?ç¨ÿ¾EÊÎÃûVóþzûäQì`òj·ŸóÔß"eÁÎÇj]ÿÏAÿ|Š=”žBNìŸõŸøè¥ì òý¥uÿ=?ñÑG²aó°þÒºÿžƒòý”ÎÇ Bçþz~‚—²ˆs±F¡sÿ=?AG²ˆs±Âþãþz~‚eçaöëùéú =”{;·×ûÿ £ÙG°s±ßmŸûÿ¥Ê=ƒ‰öÉÿ¿ú =”{;ö¹±÷ÿAG²`ç}ªoïþ‚eçc…Ôßßý(öQìì_´ËýÿÒeçb‹‰Oñ~”½”GÎÇ äþõÎ æÅÉýê=”EÎÅóŸzgó°šé#(KlÜ3ùW;k±­Š’j7[÷I°PÞg9Ÿ»oZ.»Ÿr[Gȹû\¹]Á²6Ž_ʆ×`±ËxŠF}H9'&%?¥Vv±¹«i–Ov×Ì) ò0§ÿZ©TiX9JvÚ—p‘sq‘‚TH2=;U{i.„ò!$ÑtØ$“uÍØx†âCóÓ·qOÛ˰r!öÞÓfQ4\c' Òo äBŤiñÉò^Ý#«m“—¶—aò!?±ôµ¾Ý89>oOÒo.ÂäCäðõ„L×!TC^;SöòDGý—¦oP.îK›ýg+Ærx¥í¥Ø9á¥i„ñy9ÈÎCðG×ô{yvDHžÓæ]é4Î ûÛÁÏéG·{4A‘¤8\O(ÝÓsc?¥?o öhpÑô€ ûCàu;ÇøQíæÍƒDÒç8Šií à ~T½¼ƒÙ —FÓ “d’Ê„ ä°Çò£ÛÈ9'J€¸rW¨ þT{y³D°èVįÊTûð£ÛÈ=š"NÒ¤È1Ø‘þ{y³@4í+i"áÎ:€Ù?–(öòf‰åѬ¡ˆÈï.Ñî?Âo öh`Ó4Ó³¾_ Ü?Âo öh|ÚEºo’IU}r=3éG·{4D,´Ï›÷ïòõÿëQí¤ÍK 5À"vç ,3G¶{4>}2ÆÝM+¢“Œ’=3ý(öòfˆãµÓ$p‰;z|Ãò£ÛH=š-c[zOÌQíäÍö=¿÷¤üÅÞAìÐïì›Wüé{i³Aý“oêÿÞAìÐ *ÜwÎm öh_ì¸=_ó£ÛÈ=šiïùÑí¤ˆ_ìØ}_ó£ÛH9gAêÿÞAìпÙðú¿çG¶{4`‡Õÿ:=´ƒÙ¡~ë~t{i³Bý†/VüèöÒf€YD;·çG¶{4/Ù#õoÎm öh>Ç«~t{i³B‹XÀÆ[ó£ÛH=š³'«~t{i³Bý=èöÒf…òÔÑí¤Ížô½´ƒ‘ å/½ÚAÈ…ò×Þm öh6z=¬ƒÙ¢ÓàiB{p[yÉÞEXC¦Û,U²zæŽo °ö³ó¹¥ç¯ï >o ±Êx•Bê¥GAJ÷ÔiXëîbóX íÁ$yéƒÛÞà 6Ĉ–4'¨ h²Y$“4“¸`®óOJ–8Ö EAÐn8 E”-#»bFcž\ñ@¶Ö¤Õcã \ЉY6H¨WО?• "û1ò“‘ÏÌzS¿`„ªñ´9ÅOªF«@€p  ɦÀŽX r¼}±ØzQp°¶iNäL•û›ˆçõÊaêÿZ€ øp™MǶúÔÀwÍ迟ÿZÍ迟ÿZ€›Ñ?þµ7¢þýj>oEüÿúÔ|Þ‹ùÿõ¨ù½óÿëPóz/çÿÖ æô_Ïÿ­@Í迟ÿZ€›Ñ?þµ7¢þýj>oEüÿúÔ|Þ‹ùÿõ¨ù½óÿëPóz/çÿÖ æô_Ïÿ­@w‰¿ä,ßî-R±”þóÀ?ÒʦÖ$2BgYAùÙÛ Œtüè;+•ÄÄ ÀÃ{ç­ ùŒc¨$þ´À#Îò[ó  žLÉuœþÞiäÚ¹ÚHÁ…ýzзQÎm"³‚»Bý3K·–ÞóŸï1!?»Í ò<Ëʦ"˜"@y>£èxü¨á`sØÐ€@»¡#~Ã·ŠŠÚ#G{#±Ïä?HJ‹4ob RGjc2í,®-5Ed.-J•9 ’zçœ ka39”” ˜×=iªÀ•ç¢ l£V¹è=èdR_€=ÿ “!äâX'• 0KÍ0ÕΡ6äþtk#ÖG­´dzБë@G­´dzБë@G­´dzБë@G­´dzБë@w‰¿ä,ßî-R®¹wIH•ó×, ŒJ’BðHㆀ0F¹pYû*ì 19dñZÉB!ÎJèŽë_¼¶¹’·…Ê0RÉÈ$Ž+HÑŒ•îfæÓ°ÔñÛªzU{÷´c‡ˆn¿çÕ*^Â=ÃÚ2E×nJ–û2à?Ï¥Â=ÃÚ1F½)ÿ–)G°]ÃÚ2A­Jå’QìpöŒpÕä?òÍhö ¸{FH5Iü³Z=ŠîÑ‹‘÷ôÿ ^ÅwhÉëá¥ÅwhÇ ¶?Â?Oð£Ø®áíñ9=¿—øQìWpöŒIžß ÿ =ŠîÑüà…/d»‡´aŸóþ½’îÐ?ÏAþ{%Ü~Ñ‹ÇùÇøRök¸s‡ÿ§øQìÐùÅÀÿ8ÿ ^Ì9ƒüþr0¡G¯è?— ùƒh÷ü‡øRåavSùð¥aÜ6Sùð¢Áp=Oä?•‚á°zŸÈ… ƒÔþCü(Ø=Oä?ÂÄ(ÈÒª(É9QÀ B $¨ËŒîU€;$o$ìÐ\ €ÁÁm¹ã­ "’H¢+æÌ±ï}‹”ÎOƒÞšMì Øt þg•2Éå¶ÖÚœ¢ã¸“ObMƒÔþCü*n1¬cS†p¡Å7“9Œ ô ygûß ¢àYþ÷è(¸–½ú .åŸï~‚‹€ygûß ¢àYþ÷è(¸–½ú .åŸï~‚‹€ygûß ¢àYþ÷è(¸–½ú .H¥cf ÈôÈøŒîÔóëŸÒ˜”ªL™ ¶)W=ÎIÎx4ÏÿgjBÎkoì‡bÒ³¬â@ç´”$ïrS’V*¶­yîé§0 A˜01×#Ö¶Œà¢•Èi¶K&•­J~žr¹ÝÈù³~: ຋–CÓN×*‹2ôðî²%:ØB¿d Î0?­ôû‡,ˆ…©ùtÒŸµqr2Q¢ê#þ]ô£ÚǸr1ë¤jè²~”{H÷FJ4«àãÚJ=¬{‡#$]2ô }™ÿ*^Ò!ÈÇý†åNÞ—´ˆr2U°ºòîÿ•Ò!ÈÇ¥­Á8ò\‘ÔÔ{H‡#$û<Ë÷¢qõ{H÷FJ ›ê_ò¥í#Ü9¾DßóÆOûæŽx‘du 20' "—¿ç*[E +ê"]ÛH–å~o\ö  vW6ðÄѵØr¤ä¿ËíßÞ€'7öX›ˆð½~nŸç¿m¶Î<äÆ3œñÛüE'Ûí<£/Ú#Ø$ç¥<Ý@qšœñøÕF.[!6–ãtïhöQ26¦ÒƒŒn¸Å?g>ÂæGCiu í²\[¶èœeN1š†­¡DÔP@R»*/"~r>S¿n9çŸé@÷açH×)3 ´‚00qžOO^”¾n™åLj&Qƒ³ø{óÞ€"žm32[¹å©$ló@ ºbÝ"›y¤`ƒk}îçž²îËmÜvó´nïéøÐ¢šÈBUídP3‡[æäçŽs@ Ž]1L»-æ2Ùí»®F~”÷’Ãy/ »FK|Ü“•Ï~9 y´ãl¬Öò‚0Bîêxã9íÅJï¦Ô´ç>BNﯥE4ºH• C+6Ó·œç¿Ö€!ót‘"Ì b äŽzžÉ  ]<)c¥@®ìgïuçŽô+˧ïˆù2îÝ€3õç¯=èLš^-ÿq %NÒð1ÎMDòé"á³ ¬ûOm¿Eºb¸ o,’ÆÆnsÇAÓüŠ|“Y«•[G2äûŠ÷çòüè|ë?°Êßen$ÁÏ?ð,~”A5¬‚tŽÍ’"ëæ¶ìÙéÓÖ€ÿé±"Á+å›·ï@},eÒ w.9ϯ#œûPÁ­[oT`ኆ`=úV¾Ú$r3®Ð¬å°Ò-í§Ç˜€îÁÏsXIݶh•‘~¤a@CPiÖLAv)Ô®p{q@šk¡3JÖ¬>@v’\`ûtÈ×q¿×œ u£•…Пl·Û‘ #Ž€ÑÈÂè’I£Œ)vÆãîi$ØîVÞ$ùÔäEKV`R¸ÿW/ÐÒñü„Wþ¹'òª«ÔmLKÆÙ†AúŠ@6ÚÜÚÛùláŽXð0¥t)÷éL ÷VæWRoð÷þ†€u`“0s,¨TòŸþ½>ÂÉla(Ÿ'%˜þ”g4P@P Ag2³Î°¸,ÞçŽÔÅPÿHA*à€#vaïÏŽ1ùPBTD ÝÄ„\–íùqý(D·½‚XÛíiå$£6rI8Ǹ }—P3;ý¨ÙÀ çcÔ˽,0jÈdyQÁfb›Ž:p¨ {=MbEk…h9Áê~˜ãš}µ­ý´Ñ(I2Ùl íç¶NO?…GöMV3µnU× ä6Þ§æçóý(ÑÙjqÅ"‹¨Ë±%NHÇ9ô Ge¨¦Õ7cnW'98{wý(Íi¨yxIÑe?zMÇæ?LqŽ”Ùê»IûÙœäd·Œu±ÍY[{ÕiÏÚ[`þèÈÇo÷¿JŽ8u(æ‡|¢UÉ.rp:döü¨!m«ï”˜ð~áϯ(ÆÏR ºÝªÊ@ç‚ìö㨠 .-µ  \*^Ç«`Œô÷Í6K]DÊYnWhR©óµœž=8  '†ýÙŒS¢g§<=1þsí@¥²Ôcß$7äb@ÁÆ9Çc“@Mk~µÊª³îÃvúp{Pe´ÔÖŽåUüµV9êA9íî9öé@·¶ÔmÓ]‡Pßtw•hP@Ï÷‡Ò“¤1¤š“o\íˆùši´-µ»LcŽœš®f+!~ËíÞXÏ¥Ì,‡cXÌap‡¨¥w{ŽÃ~Í9LçÉ4s1Y[EºÆ›CýìPäÞád„°…Û°tÛõù˜Y öhyù:zžÝ)s0°¿f‡Ø1œÑÌÂÈO²ÃýÏÔÓæad=¢F AÛÓÚ•ØìV`ˆ–õrý 8ßÿÈD×$þU@u·„†`3’>R;ÒI|ÔÎÒ1ž¿C@©÷éLáÿz€)÷XŽ{f€+\ÚÛÞ…S#|¹û¯ØÐe§Çe$®ŒîÒK”n€ ( €2õdµ’hÒêVŒãhÎyÿ<Ð8í´´ MÛç¤ç½=èòZiæÌo¸•!Üz®Ý?ÇÞ€%ŽÖÂ6{p؅ù+Àçéê;}(ïö¥–÷ëóƒÏÒ€µ+YdXÄ›drB£ Á þÒ´ó yœŽ3´ã¿ÀС¾·šS?Ì ÁíÖ€uEÆeÆz|§ëééÍÚ½ÉURUØd+éŸå@ MZÍ×"R9Æ6“ß§®(MVÍâi<ݪ§‘À竪Ú2†óÎ8*sÈÈ FÝS{±XÎv¹0Æ?Ï4ÄÕmZFMÌ0p SÉãühê°e :‘@P@P@ ÿx})0(,þN¨F܆‹ž{zzš¨«‰»¡ºY¤ØÜòG©Ò›;‘É|±Í±—6#ó¦¡uq\tw¨ïË–Æ  âM|°ÊÈbs·¿nßãB…Л±%½È™íÆÂAÇ4¥ ;•Æ©#qבÇ8ªöl\È—í©íŒ¨ëÈÏ­.AÜC~€¨Øß1 t£‘Šà/“#øC`0=ñG s[Ü­Á` ¾¸õ#úRq°Ó¹ýöúÔ1”.?ÕËô4€ã|Cÿ!ÿ®Iüª€êïf‘.cóüç­ ¥20›QN‘Œü´¾Ÿq~”ÀVPÃPK: ™7¾ðÀN1‚Oõ ÙéVöO¾"峜±á@h € (  òÁ×CÍ_jq‘Ò€të5錓ÈϽ=í-ä]¯°É8#×­3û>Ût¬c e9lÿJDÓ,ÑB‹tÀ$ŒÐþÅm|”Èg¿É }’!9"Ú=­ÍÜ“þZzØÛ&6ƒ(6 ÿ¨N„tíÒ€tû_5dò€*0àtÇò ¶—fÎ[ÈPNß»ÇN”ïìû=¥~Ϩácj02;â€cjx0!˜â€.Ÿk(ÄvWƒš°ˆ#QxU¥-P@P@ ÿx})0)$†=Lá f.ÃëUq2йw²3¢.œgÖ«–Ò³ éq>Õ&à¦ËÝÎ>½=¿Z9P\’iš' ±g"’Wì%½ÃNÌ= 3žJ°'r).匶ÌFâ3ÏøU(®â»nrm—$ ‚8<öÎ}3@vÕ̹Æt G§×šD›WtÞ"ˆzÀÏëÒ€ø›:¨}©×vÌgîñßÔþ”±LF_(ÅòB2¼ôê;v WÕÜH "©$)g¾'é@gÔÃq$ð3Œvç¯è j¿g únr1Œ“ÏÖ€%gÔü°V8óæ`çÛùãõ ä“VÞ¢8¢ÆÓ’HëÛ½Gæk,á–$Iyëןþ¹ ÕH!aœñ…ê8çéÅ=ßSÊ ˆì³ tôëô Ôñ#‹wó’nÿã@ i5o4…Š € Ç'Ó­D¬K†1ª+ 8O=³Ç_ÐPÈ5W µ2ÛØÏLzþ”횯Ù$>a”åròÅ$iª)’IdÎÆw òxþT&íKÊÝ*GÍ„Á<`ã¯~zõè²Kª,d´KÉ\žz÷éŸÒ€³êÂTQn `rqÉsÏf&¸hPÝ IyÈ^)0ÛþBR×!üÍ ÀcL€ ( € çP@U¾ßZL êåú@q¾!ÿˆÿ®Iüª€ì. ’AÃÅ !·…á„ù¯¹Û$û|´Ð'Ü_¥0€ ( € ( €(j0‰¤Óˆ”¦[ýEVû“#®£»©õjA¿OÊ€Zm…•5!ÎA;øîO~¼þ”Ûù…|­@g>X*ü€12}¨¿d"ë-ªî‘8fû¿†}6+K†”¢êÊÈAÎzzg·ÿ®€&Š“ý¤ª¹S€:ÐÛI:¨]تXŒŒç¦}3ùЖ #‘ªI8ÜÛvœàŸÔó@ÆBÅug ]¥ÈÆ×Ö€#àÈ5@ÃiÛ™çgžÙÙ,a•åc{°‚6>qÈäŸCÎM$på™FªK3—8<3Ÿ¥LÖ†O‘¯VA.$lŒää‘Ú€,]¤pšžçuÚŸ7#¡ãŸjh³t@‹ªªìÜH o_ZkXÅ$²¬Ú–ùn°ùrúÔ·³yÊ'Ô#²T³l ñŒhk˜‹5Œ€Å[w8ÈÇ~q@;ˆËj´Qí-ær ä$ Ï?w–Èïï@$Q(UKóDÅ[9ô>ÔX[}.Öá·H„’w{ç4’éV²ª««ªÞ™Çó4°iv–ï¾(öœç­\ €!Ÿï¥&{où Iÿ\‡ó4 /S € ( € Ð@U¾ßZL êåú@q¾!ÿŠÿ×$þU@v’€Xæ¡«« “bà–'ù‰ô4â­ I÷éT!h € ( € ($¹Ñ[ ‘¸g4BY¾Ïs:C§‡ ÁdCÉØ1Ûߤ³É€—÷ü)²%¸ÉÁ§=¨ÆöíTjîÍÕ6³Û8çëí@ÿh^E ó­ð¯&ÅÈM>üÞÉ*ξ[É»nJãŒvü:ÓФ£ÜXl¯Ö(ülÊŒ¤–byuëÔfíâËc}$L¢`¬T(evãíø:Ñî9l¯Õƒ¨ýárw1<‚|wý( G¹öuöy™Xq•f$zgéùPqÏa|[)*ÆEV 1Óõ¦‡pK È×÷f59rHfÉÝøö£@´;–ã´›û<@òâ\ä°,G\ã9Î;R ‰´éüÝëxà úý€f–2ÛŠŒëH —êåú@q¾!ÿŠÿ×$þU@v›ö17°ä)8ÍI´˜ ´$j;à–ÀÀÎOjm¦ôm§Ü_¥ € ( € ( €!gXî2ì$ã½J6pAÁÁÇc@ @ #¤H^F £©'PKdqíþE€ =­-#º¢åØ(õ&€#;f`c˜ü‡!}è\Œ‘ÔÐn]Ûr3ŒãÚ€pÛ»#¹ € 7Ár2F@ Þ¿7Ì>^¼ô $ džPZD]Û˜ £'' ÿ Ð4ñ ËÊŠ=K@ çó›Àq»pÆ}(óáÞJ›ÏEÜ3@f 2Ä9÷ $“ÀA䆼>”˜"}š‹œg÷Cùš>Ð?ºiŠáöýÓ@\>Ð?ºh ‡Ú÷Mpû@þé .hÝ4Ãíû¦€¸} tдîšáöýÓ@\…ŽXŸZ‘”n?ÕËô4Æø‡þB+ÿ\“ùUÖj2¬Q¾d(ßÃŒÑy$ÁìGk/°bÊ…'Óm³°}ÅúPÐ@P@P ÷Š+…–I BFvG~(„ÑZKpßé &Üœ;{žÙ¥(·°1|·Œ6ÎîIç¾~”†ÖÅÌé’_˜ç€zu÷9‹oaö¤ |^Nì8úþt¦ßOy7A‰8êsÎ9ÿ!³³u¯˜K€p çúЖúbmmÜTž¼öÇéÎ>´"iÛ6ý¨ùœ‡lç¾Iǧ­ ·ÓÔ¾ûü—É*NF{~4!·²b^¨ÜyÇáÓþùü(OæD\€~^Èðã?JŸfŸ$aEñ8“ÌáŽ>˜üh³[YÈcqy$P*sž¿ËúPBÒÇyÝ~ß&[+À#¯æ?È ùD»¯6£da‡$óþ?ZI¿³ÑÐ}­˜#d€2g¿§Z–XìPÄòBbN zœt [+Ea<—®ׂxúÐ"Óì÷Æø³•ÆÀlOÇõ4É£±F óËæm8t=9ó  ei±‰îÊù¬NI뎼t Ò:%”Çv ³ ?tÓ¦(ÑAeå…Žós¶vîñÇÓ§ó  ŸFIÛq+Ë €{zóùÐ ùÉ'Ú\`€=:cÞ€,EmöHRìàd‚Þç4˜ÃÆ52ŽûKD1Ç¡5Q‹jè –âу‘p¸A’{b­Ñšè+ómwmûJg ~'¥/e>ÁaÒyQ¾Æ—çÛ¸.9#üŠJ « °Ó-¸\´áxÉÈÆ:ˆ§ì¤öAaî"@…¤À~‡ÙþT”Ø,!0‹s8—t`g*3G³—7/P°Ñ$ɘ.1FÈÏò§ìåØÂ"7C0uÎ2*ef‚ÂG²G ¥ùPÙ+òi¸4µ b‘Ý#™Y£8`;›†‘‚G¥HÊ7êåúã|Cÿ!ÿ®Iüª€í\).]•UFI4’»Ð6+£VÂíPH׃T÷7Sî/ÒÅ € ( € (  íJXc¹ŒK K¹6œcš¢—6oHÖ…ŽHV䟘~ùZ%ÓÝØ Tó6“׌ãûý:Ð ¦² >Í!€ÇÞ'ëÏé@Il|ÕV²#{…R•#ßœP§¥ÑŽ;YÎCõ8ŽzhH.,vÜáŸËuïŸÃú{Pr>œLÇjr²`û{ŽAÏùÅ:té~AhÑ«]³Àç¿?äP쌲ÿ¡|Á° %C.qžæÍƒyvläî œ~ŸËštWV“4ˆÖlÅ€/€ à ñíÇã@ ŽâÍç›&¼N0;ç9  {#(¶b#\o\ñÉü¨9çÒâ*>ÍŸ=6Ó­7ÎÓÜì†É˜£mÁlpxãŸCÓµMÆöidKB¶Ý¤rFGnÑ@ÙìDbV´1™>RN ïÏ_Ò€-K%„±ï’Fö]›»õ'¯|POykæ#Ådw+7ÍŸA¸‘ƒÏ_Ö€÷6^@•-ØûYC@êO÷þTÚ¥œ‘§ú&ý¸ sÆ·ô ®¬"ýÒYä:—o››¹'ž(v}@,oå¡`:€Ü®;ñßò ,Ú›@Y T‘Ypg#¿zA6¬ì­`UbA=p?:K·ÔXF±[DÈPoFR{çžÞ”‹>¦ñ-"à®ÐËëÛŠsϪy‘„·Lc.qßÓ¯Nœþ>Ô-œ—Ò\µF¨BŽ ÈÇ­_ n( HÒ5Úˆª3œŠ>êªñŽ8  € hŠ1!F»ÏVÇ?G?ÞJL ößò“þ¹æh@^¦@P@P@_ï·Ö“…Çú¹~†oˆä"?ë’* :»ñqç#Ap¹$pqÁ殿h™_ åhgB®Ê7û¶ÓšÎÉ7bîÚW7Sî/Ò˜… € ( € ( ÿåçþýhÅ­ì“ÊÑ\ùhÜ*’Oðø`äÐVšeÕ¼èíu¹T*”Éè=è×6·@¢ÿav;AôôÇz?³n|µ tQ€là“’[?Zbéw!QEÖÒ„0|I¾:wöuàbËvTž¿3ÀLÐúmÑ9K­€7òX©é@ 6u$hùÃ'9>¸ ÐеX’í•Ã3Éç4§]5¿–×Î[<“Ϧ?•Iekum¸<þq~K9$Ž8  «¦ê|‰xY0rW<å¨ɦÞÇF·¼“ÜŒsé@M6í0¿m`ƒsÀ  ­¡Rä!þ'\‚þçùP?³®âpñ\–-&_,Gÿ@=ÛËŸµ²¦üœ’3ÓÛŽ?z¬tÛÈ‚„ŸÍÝŸ0T’súâ€5ãR‘ª±Ü@ŸZZ( € (þðúR`P7ßPbyhÀ8îhBnů¶œ9Ÿ”d œžqéøÓ Š·lHÌ{A`9ÎpG^”Â;ÆyU , ÷ÿ"€L'¼h¦1ˆY°3»<±ð\L¹Bª˜Çš2!|ûrmØ|¥ºÐ+Ž7Rg˜¶Œ¨Ý’sŸÂÜXî]ÝA„ $ƒ“éŠåšUþû}i0(\«—èiÆø‡þB#þ¹'òª°»BÊJɰ«)Îì2;ÒJâdqL.!UÎî²;ѧAÝ=Q¼Ÿq~”ÀZ( € ( € ¯,Þ]â BìëÀ™æ€"}RÞ"ÞidÛþÉô:«h@!ÛžŸ!æ€#›V³T˜ìp«·úu lZ‰|²XeC´óÔË6±h%«3sŒ…>Ÿ­/öÅë#×%1ë@u‹b–$rs´Žƒ'¯ùæ€=ZÝË$]¤òç88í@5‹Bk;2g*çŒÿ…8ê–êÄ6àç+ߎ?Q@ ý­mäùŸ¼è>R‡<ãüE=µ;U2—Ù§9 ¾­gPÒ°ÈùM1µ«5tR͆ÎÓÛüŸÊ€µ{eVo˜Ó“×ü <ê–Ãn ’ͷϿږŸ'ï\RzP[V³GØdmØ…=(3­Zî*¥‹l £iç?Ë·ç@ë0+”D‘Ü66ïóõ þ׋Èy|¹2‚œgë@ ± ²X¤Ú¤r8Ыª[ºæ=ÍÏ?)àq“úÐjÚàᜑŽã#ôæ€Õ­ *—!І#€}èÂxîcYb9S‘Óé0#¶ûMÎ:D?™¡~˜P@P@U¾ßZL êåú@q¾!ÿŠÿ×$þU@uZÔvq´Ó3cxPª >•7.rvBYË öbX2‘·m<úMÕ´:û‹ô¦!h € ( € (?R‘’@•Šåw €Aã±  :ùí+é€>nwpzqÀâ€ö‚`&M1r ŸSŒ{ >Ó—Fm9”^K`t$}h‘Ül6é[2W,xã:Oí‘°ÚZä„Ï#ø}:P¶Ó"æ/ìÑ…8g Ã7sŒzæ€öð±çû+j) 1Žƒ=>Ÿ—µ"Þ?’QôÜG@Ãï ð?ôèâÕ@Ò®22Çã¿oËñ 1êB?¨˜ýæ-•Ïlßþªd‘ê»:¿™¹ñ»ÀtõÍX ~­9Þ„ÞXã dcÿfý(‘I'„JÔ“¿hÏËõ ¿âsºQû±ÇÈxÇ×úPŒz·.² r*pW¾Hý(÷ ©3£BÈ›Wžœ¶éœGMSÎ%]vª•^Ÿ7=Oá@ŸûD³y;q´1Óü¥W–=V-ò,žc€:`cŽsŸjšdÔÑÛìî…Yòààg¥6TÕ2­ c†ÎÈ'8¼j}ºj~xk‡ˆ nŠ£¥hP@Ï÷‡Ò“½·ü„¤ÿ®Cùš©€P@P@PWûíõ¤À¡qþ®_¡¤âù¯ýrOåTjÿ|Ô??äi 6Sî/Ò˜ @P@P@oì¾Û*§šÑáAÈúÿ:¦¶1Å#¤š‹¹;CGËßžÝEF°[ÝF¶é¨7Ì÷Éc~¼{ÐÂÚÞ)ÖG¿ÚOGNxÿ ¾5 ]¡ŒÊÎ3Æpp•"ê6®¬™V Ž2hF¡hX¨28ëôÿ?´m3=q۳ǧZWÔ-)3dž8w3@ ·¶ÍL› * =ÇZCj#.'FQއ4ø. ¸-äȯ·®Ó@®£hÊÏ@©Ç|Pš…«¡q2€O¾(]FÑ”0¸@dâ€íÖàe¤ ½™¸éë@ MFÕÜ ™x!rOû~tö½¶BCO ã“@®¥jÁˆ”pH»cÓò  jÁ”2œ‚2 P@P3ýáô¤À¢#’MHùrlÄ`Ÿq“B%KI¾l]ä‘Éç¯ÿ[ÅÊËRDì±…~P‚IÏ4 D…ÒˆHrsµ²r( hCö9öö§ÝŒg'üöþt ÃÖÞPA2)ÖΦ(ˆÖÊ`tá·.ÞAç¯_ÎY“ÑÈìò– ° dÔ (  SJ¨ïžÄÒƒ¸’Ù¤\á°Ï¸¤!âùúäŸÊ¨Õþù©9:~ÈÓ@l§Ü_¥0€ ( € ( €#ÿ—Ÿøõ eÓ­¦’G•Y™úüÄc€8ú@Zm¬2,‘ÆVEèÛŽiÖ’’^rrFN ÷ :u©]­á‚>f$àœŸÖ€t»3ÃBGEc>Ÿü¨N™hØÝlqËŸ§¯ €Ó-†ˆ: Ç€=³lO²oPÈ8ÚOç@>Ÿjð¬McRH\œ ÐýiåˆÌ ¨ÏR{õþT°ØÁUÇ*àýhìk ÙHÌcå;Qˆÿì›/,Æ!Â7%C üèÃM´ ¸EÈÿhý?•Nµ *½qÀü3@ }2ÙŠ•VB­»*ÝyÎ>™  …±pæ2HmÃ,psüóùš‰ô›S³`h¶ ÔuÇæs@B(U` Z( € (þðúR`QKq6¬®I$ =ù4 , òŒ~`ºgo¹æ˜ÀÒ€ ( € ( €2ï?ÖKøÒŒnžƒòÈÒ•õ+—Kœ·ˆä"?ë’*¢NÕþù©9:~ÈÓ@l§Ü_¥0€ ( € ( €*\µÂÝEöuR Lž‹žq@Mw¨¦í–JØl›¨ÏÿZ€¹ÔÄŠªÃG·A×¾?Z}…åÕÄÌ%ƒdc#vçŽ9ü*¿@P@P@P@P@P@C?ÞJL °:®ªPœˆcß“Bün’ xØ2ž„w¦Ð@P@P]çúÉ@S‹þAÉÿ\‡ò SÄ?òõÉ?•0;Wûæ¤äéùÿ#M²Ÿq~”ÀZ( € ( € þ^àÖ€$ € ( € ( € ( € ( € ( € ( gûÃéIR•õRÇ9H¸Áõ$P€¿,Qª.v¨ÀÉÉüé€ê( € ( € ƽ¹€M(3 ##… ‹þAÉÿ\Gò SÄ?ò_úäŸÊ˜«ýóRrtüÿ‘¦€ÙO¸¿J`-P@P@Gÿ/?ðë@P@P@P@P@P@P@P3ýáô¤À¤· o¨1|àÄSW9lŸÚöårSÆH Èçë×5·Õ¦‰®„k T-æ°P g¿°¬ã Þý…õH0ì®ÿoÆ­P“v@XŠáf¶YáÕ†@éYÊ2åG|9’=¡z`î$T´–ÌübûVÉ6d Úzã¾)öÄö"HOË×`÷É45¥ôwVí*« ¿yGÌzgŒu Çrf³Ià‰›x#|‡õ§›ÕØ&Î?Å‚KöÀçùþUVp 1%‘A'žõ˜n?ÕÉô4€ã¼Cÿ!ÿ®Iüª€í_ïš#“§çü4Ê}ÅúSh € ( € (?ùyÿ€Z’€ ( € ( € ( € ( € ( € ( €!Ÿï¥&k`¤ùòÈ3BèÀEôéUv•SŒ¨8éÇJ/`ËLcbãéEØ(ÀAH€$QÊ›$@É×q@ å§?"óí@ª¯ÝP>‚€p0(  …B’ª0àR`Q¸ÿW/ÐÒñü„Wþ¹'òªµ¾j@ŽNŸŸò4Ð)÷éL € ( € ( ÿåçþýhJ( € ( € ( € ( € ( € ( € †¼>”˜í¿ä%'ýrÌЀ½L€ ( € ( €*¿ßo­& õrý 8ßÿÈEë’* ;Wûæ¤äéùÿ#M²Ÿq~”ÀZ( € ( € þ^àÖ€$ € ( € ( € ( € ( € ( € ( gûÃéI^ÛþBR×!üÍ ÔÀ( € ( € («ýöúÒ`P¸ÿW/ÐÒñü„GýrOåTjÿ|Ô??äi 6Sî/Ò˜ @P@P@ÿËÏüúДP@P@P@P@P@P@ ÿx})0+ÛÈJOúä?™¡z˜P@P@U¾ßZL êåú@q¾!ÿˆÿ®Iüª€í_ïš#“§çü4Ê}ÅúSh € ( € (?ùyÿ€Z’€ ( € ( € ( € ( € ( € ( €!Ÿï¥&yßTù&Ÿ+$ó’}ù­)É$Ø]ªÉ›³¹†7sþqÆkwZ›·ºÅÖC5ãgr’àã­O´†Ê YHü‡H¡TX°KNsÆ1XɹjÀ‚kiÌòÉçŸ-¶íBpCùÔb Ñ™Gwùy<Ñ`% zqÇPn]Ûr7c8Ï4ìíp_ï·Ö“…Çú¹~†oˆä"¿õÉ?•P«ýóRrtüÿ‘¦€ÙO¸¿J`-P@P@Gÿ/?ðë@P@P@P@P@P@P@P3ýáô¤À¤ªPp\ ò‡$ õ=*¢ì#±ˆ‚«| Ï´¡W•%ØäÓ¥YåЫîà~ŸçµTk¤¬ÐÝjÁyöf'Î`YWiäzæ¹Ëhd#ãÝLŠä|Cÿ!ÿ®Iü©Ú¿ß5 G'OÏùh ”û‹ô¦Ð@P@Pòóÿþ´%P@P@P@P@P@P@T¾˜C†lãØfj«{ªH$|€¸Ç¯çFÀLtÈIR]þ\`azƒ¥­¤@Ò+ù’‚¤ê? .¸-ã‚Ñ­”f6Îs×ô¢àK!…!E`Íþo9Ú¾½(¸Èžu¡·•‹†±êyÍ¢ °—)Æðô¥ÏžÞ‚‹€yíè(¸gÕV ¨­Ù~yCÀãÿ]PuÒ švS ÎŒ öé@dÚ0?*@r>!ÿŠÿ×$þU@v¯÷ÍHÈzy$qô4З `2`Ó?þ½ûmï÷“þýÿõè¸Ûo¼Ÿ÷ïÿ¯EÀ>Û{ýäÿ¿ýz.öÛßï'ýûÿëÑp¶Þÿy?ïßÿ^‹€}¶÷ûÉÿ~ÿúô\í·¿ÞOû÷ÿ×¢àm½þòß¿þ½ûmï÷“þýÿõè¸ ö»Íû·&qõýz/Ûo¼Ÿ÷ïÿ¯EÄm½þòß¿þ½ûmï÷“þýÿõè¸Ûo¼Ÿ÷ïÿ¯EÀ>Û{ýäÿ¿ýz.öÛßï'ýûÿëÑp¶Þÿy?ïßÿ^‹€}¶÷ûÉÿ~ÿúô\í·¿ÞOûöÆÀ>Û{ýäÿ¿ýzWûmï÷“þýÿõè¸Ûo¼Ÿ÷ïÿ¯EÀ>Û{ýäÿ¿ýz.öÛßï'ýûÿëÑp¶Þÿy?ïßÿ^‹€}¶÷ûÉÿ~ÿúô\í·¿ÞOû÷ÿ×¢àm½þòß³þ4À>Û{ýäÿ¿ýzWûmï÷“þýÿõè¸Ûo¼Ÿ÷ïÿ¯EÀ>Û{ýäÿ¿ýz.öÛßï'ýûÿëÑp¶Þÿy?ïßÿ^‹€}¶÷ûÉÿ~ÿúôî/{pTùæ<r1ýi´SÛË$‚Rï&2Y=>” ±çÝyïßÿ^_>ëûËÿ~ÿúôhçÝyïßÿ^<û¯ï/ýûÿëÑ Ÿuýåÿ¿ýz4ó¿÷ïÿ¯F€'Ÿuýåÿ¿ýz4ó¿÷ïÿ¯F€}×÷—þýÿõèÐ ÒEw$…þÒËžÂ1Å>$ž(•‚`e?úô沕,0F>çÿ^€9_.ÍSo¤j?Jb;Gûæ¤Ûï'ûßÐÐð}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô Ò€ J0}(Áô ?Å?òo÷¨ '¸Ÿ{~úN¿Þ4ŸiœËi?ï£@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìÐö›ùï/ýöhûMÇü÷—þû4}¦ãþ{Ëÿ}š>Óqÿ=åÿ¾Íi¸ÿžòÿßf€´ÜÏyï³@Ún?缿÷Ù í7óÞ_ûìЬì÷¥‹£’s@ÿÙlibstruts1.2-java-1.2.9/doc/images/how-to/eclipse/developing-eclipse-style32.jpg0000644000175000017500000004062310404045230030117 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„   (1#%(;4>=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀ'¤ÿÚ ?¨é¤6ŠŠaax±õU#æ÷õïUÍ[›Nÿ+ òØÏö¯p«ó¤lÀnÃeGÏz×r“0mtáŒ5ÑägäÆ9ç·¥.f; öM;oúˬ篗Ûò¥ÌÂÄ‚ ;퀳y(âTåùúQÌì[iÛÈÝuŽ1òuàûzÿ:|Ì,‰~ɦH QÆÓÉàß+Éß³i¹û÷8Ï÷;qíNò !D6HÀYZ02åÉ>Ÿ­+È4–ö8$O$¤p=yÅ È,€Áb¥¶™Ø`F:`ôúÑyè ±óX¹˜Æ§ 6œ·=ÿåEج…X,±&rØÀO\uéëš/!Ù°Yy²|ÓìØJõõíEä+"Aoa´“$äö1ý(¼‡dJmôåBªó18 íéúRæYˆlüÎLÞXvœ“ŽŸadH°éþa$Ï·=0yäû}(¼‚ÈbÃk¼Ócf~ïñzt¢ìV%XdŸ2|vp•+ÈvD‰ž©’Ò’Ëè~SŸ§ùÍÒ "“!Þv+mϪîM€#gîŸÊ‹ ³±¿º*.‚ÌF€Ê¥2¨¬kk )é"n¶×zP•G”“¹mÃ*Zçm½Y¢VCµ{´XË•n™<¿)Fâ2sœ~M-JvètÒ óäˆÈ¡TzŸÊ¥¶¶4z¤N¡•å&À@8ôæZÔÒ:Eܤh5i[Ì.²°ÎWåÆ{x?QW¥ŽVÈçm@íKY"Ø>m˸Lþõ2RM5÷Á.)7-{\5þÁöYb߸ï$€ Ú¼ý:þ”äŸ@§Ë|­¨ìÃçnšo“">OÞ>•­'®ºÉhS²Io¤¢6@`Fxlã?QÚ´œìÓLJ7M2õŒÉ,Ž‘:2È»YÆ \Ž+9U©%iiB.ñ.¼Íóp ©öük)¹ZÚe¿RÄe²à6Ö œgcñ­nö š´72OhÊ—B¨ÀˆdÆSÈíPïot™s[Ý.ÝÃç,@¡m§8$p½IϽ9JQ»¸ÜSµÈšÝœb{|Œ‚cLdÊÏÒ)J÷“×Ìi(ü:h±,wSH–³[«üdáº~uµW+$ÝÊ“}YzE@O”÷ œo'•Ç|Ö-·¸–Œ¿ŠÌëº PBDÁ$‘›€1Ö¶§³9küH¯ZáU6ºFr:ðsSIÊþñµ´.E´@NvðN6ÔI>€–¬Ê×d7mÓªžcéöj–ÁÔ}•Õ‚iðÂñûÈQ»bðv÷ïœÔûÜÞEhOávøzغŸ”7Éêk¥_“C½ýK7“ËnL $2Æ yÚsùV~ùvˆ ç[VÚÙŸåš3ŽÓŸ¡ ³î ždXS‘ÔPn®Í¼¡3#8\f€%·—Îݘ<xh+‹£o!ÝcÈU#“@ {Çì´r@Ï#éþ4-½ÁÊ›v9aך3ù"„VÈ'¯oñý(Ø.ZY¶fEÇ E-åÏÙ¶âù€zñ ´º7êÖí_Q@°=å@ƒÐ~T`zÊ€ AùR`zÊ€ AùS`zÊÃÐ~T`zÊ€ AùS`zÊÃÐ~T`zÊ€ AùPè?*0=å@ ü¨Àô•ƒò Ð~T`zÊ€ AùPè?*0=å@ ü¨Àô•ƒò Ð~T`zÊ€ AùPè?*0=å@ ü©ˆ0=åHaè?*0=å@ ü¨Õ°ŒZÈîŠv“Õ}ª’¾‚nÚ™ÚdóÜ^l"6‹'9W=ç ¾Í»–Ú’Rв4¤UY\(g º(eR0ÌpŒœûT·ev ¤®È¾Ò©"+£ ~Ú±U—5š3öºÙ¢`Q‰Á*pFzV棗 ¡•² ƒ@ m«É'?Zb‡r°ìM8¨ïŸÎ•Àƒí ö“ W`gÞ³Ubåʈç÷¹lN^O_ZÔ± ‘† í=jœl®O6¶(Ã*ù85%Ê[nì‘Î3@ ©•É‘‡' éÎ+9UŒ˜Òoaþ@Û»Ï!GsÚ®2RWBzÙÆqçóLC¾ÌG&F4.üy#<š Áõüè`d’?l‡dlÀ3àt“I»+•wg È§ŠP»’ݽ>¾•*iìT©Ê7¸Û‹¸mŸlŒÀíÜ1ßÚ¶…9OTa*‘Žâ[Ý%ǘÈUqƒDé¸&¤>YLl@†g«.1úšq§Ì·B•N^ ¾i`RD+Ùˆþ†¦QåëqÆ|Ý vûŸÎ °Ûî:6ûŸÎ€ ¾çó o¹üèÛî:6ûŸÎ€ ¾çó o¹üèÛî:6ûŸÎ€ ¾çó o¹üèÛî:6ûŸÎ€ ¾çó o¹üèÛî:6ûŸÎ€ ¾çó o¹üèÛî:6ûŸÎ€ ¾çó o¹üèHäx×Ä´î ¸bÀáSŽiY^ã3î,rsýPŠR ší¹UÁ÷¬çh¸ŠQ抲-åÜ‘-É1»kgv:V*œÛ\Ý =œä×6È•ì-ÚC!f¶î¼fºN‚U†·ò:ÇÓÐÊ~ëDÀ2ö žc,¬£Œ*ƒÐP÷ BÖ¦Iµa­Æ±2ÈÌ0:ç§AÅÝŽVræä˜$žç¥tI;h%n¢£…Œ!“ UÝÚÄÙOµ±gl·\6;æÉb¶·Š@èpçùühe8dpA‘€pzšå¯FSi£HI%fJË Ñ”€‚T7¡úV”iÊ QI¦V“Nµv$Îã>þ}kb E¹b“ÌÙïÿ× ‹ .Ø€Bťݓ@ !óK:í^ƒÖ‹#f6 "«‘Á<⥧m“Ô¯ºÀÁâ—æ?ë7¿Ö¡SåwFÒ¬¦­%éä:æÒÖêE’_¾£†#Ñ ’‚²9%N2wc,àòW–Ey¤?1ƒ §9óY-B<·ovYwÊȪØÝœG|zý)E¥fú ÞÍìI2…À;‡=òM'kYSNäû×û  Þ¿Þo_ï 7¯÷…×û€ ëýá@õþð zÿxP½¼(Þ¿Þo_ï 7¯÷…×û€ ëýá@õþð zÿxP½¼(Þ¿Þo_ï 7¯÷…×û€ ëýá@õþð zÿxP½}hܾ´ 7/­Kʶ?½ýRNi'Dì耻=±H Ñ\ê à7ËßÓùP2c%Ä‘²ÍQ‘ŽsŸš“ä""è¢Ö&-ÔqÇÏN­G$¤‹”RBÊKþωË!Ç?‘®£1y\¶çÚ þTÉ<À«·I‰IåŽÀp?*t[Ù˜"-¿Âvý(äߣŖ<ƒÓé@ýæìcÃÀÎp9ý(%.s¦Û dy`rFxúP ³²"°uãÚ€·Œ…Ò¡,z,~}>”æÜI‹¦OÈ? qõ  v»ì˜°½PsÇÒ€+³É°cF‰]Ú6ƒý(ùlt˜‡m»Éü½¨pûS:L;‰Âp={PöüÉÿ˜ðPvާJ‹{N¶”…Y±&‡7:|188ÆÁÏ¿Jµö+_ùö‡þýŠ>Åkÿ>Ðÿß±@Ø­çÚûö(û¯üûCÿ~ÅbµÿŸhïØ ìV¿óíýû}Š×þ}¡ÿ¿b€±ZÿÏ´?÷ìPö+_ùö‡þýŠ>Åkÿ>Ðÿß±@Ø­çÚûö(û¯üûCÿ~ÅbµÿŸhïØ ìV¿óíýû}Š×þ}¡ÿ¿b€±ZÿÏ´?÷ìPö+_ùö‡þýŠ>Åkÿ>Ðÿß±@Ø­çÚûö(û¯üûCÿ~ÅbµÿŸhïØ ìV¿óíýû}Š×þ}¡ÿ¿b€±ZÿÏ´?÷ìPö+_ùö‡þýŠ>Åkÿ>Ðÿß±@Ø­çÚûö(;WŠ("_"Eô(ŽôŸ,Ë ƒº¶ÕóÌc ÏjÎnÈΫ´H­gßt~Ï,’#,äÈÇzÎÞ2¥$ç§bõ¬“¸>t{1Ðç­nuàèßïAM¥,ñÛ¢—¥ ìSKå„el2=,1 ž`\¨êzb¹þ°“³+‘•忹]„à‘÷€®‚ .ø‘Ç€¨œùƕ݆Ü\4 rŒÇŒÉ98©§UOD7 R3‰8åqÏù© º”LѪ‡Ý#`dcñ  €±b£’qX⃳)Fè­%èŽ@¥Œr@Î9Åi s+¡5gb?íX>oõŸ(Üxª‡V„)8—¦~í4©<†5Þ ßçÞ€Þ†™àŒê -ÔqÔV¾Íòs\ÉT\ü¤w:¶-¹‚ç¡çò¬Iôl,ë´ c œæ€/£žM‰¿>¤q@#3É ó`.qÁ«åÑ2.îÑ]õ…ÂKØŽõ ö4’³°Ã«Cæ*!ÝÇ¥'ºº[dVlüÇ¥89»9ò+‘> b@Lnþ»{põ©œy]‡uq§V„>6È~ƒ<Ô”YK•x ÃpP ç­5vì Ù\5ñIPäàf´©OΜùÄ:¤J¼‡ Çô¬ ­¯çw–më¸b€öÕy^ó½>󜕯³´y›3U/+$5µã•£}À†ÆzÖFƒ[TŒ *²1nƒh[S‰Þ²¿{Ž”rX.Òá™Sp+×5‰¡ß;Ä( $ŸÒ¶T½Îc/iïò‰& #•£1JJ“’bj Ôe?ítéþ4w'Ö‹€dúÑp ŸZ.“ëEÀ2}h¸O­Éõ¢à>´\'Ö‹€dúÑp ŸZ.¨ëEÀ6Œc€@ª:@ è($ÿ{ú hD >U÷4h€OB??þµ4¤䪓þ}ª87{™ŽÚÏÿª¯ARÃz‘I¤ôc½„H‚}Õéÿê¥F; m½ÅÁÿ?þª­?çÿÕF€#F€8õÿõTÊ1–èiµ°ª…FÃÿÕM$•6Ø0Å€<ëúSÐBàÿŸÿUlÃnn#ïü¨Ð^Î'¹L1êCŸÊ«™÷‘6ùÿõTè0Áÿ?þª4èq×ÿ­F€C.Ýàl.p[¨c¿áNâqLU.…°Ì´´+qFðÅ…¹õ9ZlŠÒ¦É f_MËM;l+ Z0B@ã''æ_ñ¡»€íÒÏÿ¾–ÅÝ.1ä·ýô´‰!òÛr[2Ÿ÷—üi¹_p²%Ý/üñoûéi i–DÆa˜à|Ë@u2>Ìá‰ÉÄ€gò4ùº ÈŸtŸóſ便 Ãt¿óſ怒³3a^sÎ - #‚Âÿ7nZGj¤eÇã8Î=häVÓE¡Idõ4XùRç[dv òfÿžOE€<™¿ç“Ñ`&oùäôXÉ›þy=òfÿžOE€<™¿ç“Ñ`&oùäôXÉ›þy=òfÿžOE€<™¿ç“Ñ`&oùäôXÉ›þy=´ÖA®cžHÜIÝ ¤CpÛaVÁÜqÆà)6¢®Æ•È?²ö7ÍpžiÁ?…œe°4Ñr 9~̱£C"3æúâ„Oök¯Hï£þXì÷^ÿßGü(°Ùî½!ÿ¾øQ`³ÝzCÿ}ð¢Àgºô‡þú?áE€>Ïuéýô‹Ógu#'ú‘´çïO¥_±^Óûèÿ…ûçý0ÿ¾øQ`±^Óûèÿ…µÎspÁ™¢R>V?áL‹I¹€."–ùQô  cNûA;¨@8W àç‘ÇùÅY‰ 6èöÅðK¶qùR°RÚæLì{fÇ£“ý(°ûçý0ÿ¾øQ`±^Óûèÿ…¯aváF``~ñì~”X éD±ÝÅyÿL?ï£þXìWŸôÃþú?áE€>ÅyÿL?ï£þXìWŸôÃþú?áE€>ÅyÿL?ï£þXìWŸôÃþú?áE€±rD›eÛ»?Âr),?ñíoô_å@·ÞO¯ô4Ź–TmØÇ(µÄù¥CÅóœ®ç Šå¹7h¤’Ô&·™®ƒ¥÷—œ+)p;~9®Že{\‹ ýu·&ýüÀ n*„I-¥Ì¬í @ÚÙÝŒòzuÍ,w1ÎŽ÷®è½PŽ´w<ã½#:¯Þ`>¦€È€àºƒé𠱓"ëšDc…u'ØÐ¨ €2õX'šxü¢Ê†ù\ ÞǃŠ*ZÇ命DMœŸ8¨©ËÈù¶*7¾„Ò¥¨®ZRþ3Ûðÿ<ÖTU4ß.åJöÔu­Ý”DEQIÀ$qÀÿ*é3$S·’U‰Kïc€6ÐÊ( € r}ñ@Ð@§=1ÍdÂúL— Ê›e6‚0HÁþ”Ù[IeèÃ+÷FAá@´Ñd"abT¦yÛë@è €(MöMì[ÌÜ“Œòr¹ývÐ%lvtŸÓ9éÿÖ £iÆC±fÜ'ü(ÜŸd’FGVÎâO^£â(Ÿ™¤H•C°@²ÇùœÐû ›{ˆql"``‚1š³@P@PO÷Í$?ñíoô_å@·ÞO¯ô47UúÿC@n’ºˆÈä8èã@ç‰G_´Ryù3Ç5Ç(EÉûÖ5MÛa÷6vÒHL·EOq¼Ãü+°È‹û>ÏŒ=x(d³¶Å.[ûãÐP)ah¤"Þ1rÓ¼Ž3@’ÖÚ8QMÓ°I štö6²î/9Ú¨ äp¼÷ôãô &\b°çôöû}9-æYGlg†Çz¹@Vê@²})02ã”Lí&Þ NpÞ4š³ì7O¹G’s,!U—ÞMLiBěђ­õŠJO‘¶EÏ!{ýX„þѲ‹ ¹/ƒªzМn$@Àc@ € (É÷ÅK@V{åÝJØ;O<œt YÝ-Ü B 1\uÍSkÛE!ͺʯ˂@#¿¦F÷¶²?ï,ƒdd`€&ƒP‰6¬v¬Šøû£¡àý(ÑjÈÓ¤/ ˆÒcoêhB€ ÏškQ#K†=Ç'+þ#ò >ÕfW‹Xˆq¸cÛú~t‚òÍŸÍŒã­Xšâ(df6 °“ôÉþTÇÔ¡bo²¹i:½>n?©  Ö¬²@’,^^á÷qÈö  h € ( € ‰þù ‡þ=­þ‹ü¨VûËõþ†€ê¿_èh¥Ó[‹¨„ªKÿ  &H HKJ± Œ{ö®)ª\îæ©ÊÂ\6šÓ²Ì~îF¹ýEv™ tÑÕ71Ï÷¿ç@ÇÉEÆáæ–çðëÒ€#··ÓdTŽq"PŽÿ«ô  cO·UUT*#†#­;ìpme UYv¤ŽÄÐà`: ( € £}þ´})02¬ñåsÓÉý˜Ó®$G¹wv¢eB)üé»[AÞúUMßb“ØzóJC%µåm­lbP¹õôé@¨ € (É÷ÅK@Zâyci<¸ • ŒÎIòÐe4³[³Ë–Áˆ ‚2(´ww¼ù–{8€Olöü¨c¼¹3ºqmÓ×úPÍu{jËlã,¹ÇrÚFš‘â11þê(J(”·2+•ò3† §®WÌþTÛeÆ~Î7cþy·ùô ×;ÈkL ðv5O=ÅÌe¶ÂCà§8ú}h)/n‚Bc´._¯ÏJ»nò<Ò¦Ç#æ_J’€ ( € ( ŸïšHãÚßè¿Ê€%o¼Ÿ_èhn«õþ†€*ÝL‘ÝD­ò‹Ò€+ÎÖæYHrù¾r:{f¸§*|+h7–IqäËæ'ííÎÏJí2#KÍ7aeµÄ`mÜcˆâ€%}BÎ9¼µ…ËÇ…û˜Ú ¿çŠ’K˜!ß"@»£!z8 ~4j)ÖY$Eþ sž¹%P@FûýhúR`dÚºÇf!TFÙ$q÷Å5¸tÊâá¤o!ã‘ñ’ŠÏ×Þª\¿d˜ß©u$ÔMÇϬY'ß½IC÷ß”‘cÜ2Aç\ € ( 'ß-PYÚïÌqðíÝŒyý3@²7&ûPÃî8éÓð  ÈÚ  ª·á”œc¯Zw›¨«!V]Ç“ŒŸ¯¥5§Õ9)k`·æzЋF»gµ"*àmÛëß½Y €)Ê÷Ø"|»ˆÓ+ƒ×ÓuDdÔ6å¶ìg¢ç¿qé@SÜw'Ëž þ?äP’×^q>Lœ:|¸ïþõ@¿ÚeXƒ$m'sßð  ì¾×µ¾ØP·Ú=¹  4P@P@Dÿ|ÐCÿÖÿEþT+}äúÿC@u_¯ô4^æY’â%Ž-Êzœt  —Æ“9xâ.§î²OÐ×êÚm8š¨é¹$×ÒGs奛8ÏÌê21þ ì2º„Å7>@½6÷¸Ë4C{,’$mg ,2ǰüèsìväâ=à zúú¨ÂJírÑì>X\î Žs@P@Pïõ£éI…H\à ÿËQژɡ3Ës¶7HQ²Î…;Ž™©Ši»°mt-µ%'•åã’sßOÖ¨CR I†ù.X)Ú w÷í@j]ç„÷s@ ±_åK̄ɌʀÝ/„àÍ"˜¹ãŒÿ*¹@9>ø  h €+ÜGpìþT¡ ´ú`ߘÅQO ,·y¸sž(‡QRØž0¼íæ#¯|}#茓Ư´Ï žø ùZ‡œŸé1ù@üÃo$qÿ× ¥‡SŒèù,H=zðh{D¾Lý¦Hä〣çéé@—v>`ö9  ¯Ñí±èÝWÛÙ¿:…­õ ç†Ê€q‚3ž{õÏá@-uç7©?ß#¥>KkÖ2mŸ“rüÇéÓüâ€ö;æXóxT¨çç’–(ô éi#ouP½O­>€ ( € ( ŸïšHãÚßè¿Ê€%o¼Ÿ_èhn«õþ†€+Ü}§íù8òÿ‹¥A4×I$RBAùv¦T×,¥UIÙ% 4Ú€¹Û Ñ2ÄãŒ?uYõM›ÚÚ<ô¸ç9úмڟœV;hŠ÷‰ÿõP¤º‹#ù–ȧiÆÖÏã@ßy¼ü‡o—Ûnw~Z’Íî™X]F¨F6zñÍX € (  7ßëGÒ“Â$( lpÞŠI M%Ú£…°Ibà³r8àÔÆ)_PnåÈì&I ý¶Cž£}úûUˆsÚN×>bÝ]À”ÇO­] € ( 'ß-P;‹q,²p½8#<óßý>‚T˜J “¸tÔv2ü̗ͱ³€ƒÉéϯò {Ð æYUb£æosÍHleó‘þÛ6Å9)ž£Ž(°••¥ë[pÏ“íÓbÒÖ{|ïºy‰ùÆ{Ð¥ ÌA> b€)Ém™ }¡B–$ƒé•ÈëíúÐd©kÑŠ>~W G=ù ­Š+“öÔ<ô?_¯ù4$¶hL„Ý… .îOÝ>zÐ~ÁXƒ^œ¨ùv¶3óëïŠÐ·A¼h­½U@ ê(J( € ( €"¾h!ÿk¢ÿ*•¾ò}¡ ¾òý¡  ×1J÷2KµGQž´©r%,e³ò°p1õÉ(Õç|¦‰ÆÚŽš-E®sȱ©àõë¬ÌjêË\D_°Çd{}hxµ5|$èUŸ®:¡þY  †ù“+•n{nqüèé ÁÀ‘öâMÙO”j€ ( € ¡|“4ÃËT#Yˆþ”˜k‘ªÅ•óúñŸ1{Ð1"†&¸ ;GaIÊ9ë‘Ý…Lyuå¿R²XÄÎdºÏ9ÆáÇøÕ’?ɳžáf`±lãpç}®!C†•ã<°P”P@9>ø  h €)ÝClí!žR8LŒ—ž;w"€§%º@ÂÚBè\äŸ_Ê€+-‹<ö–ÜÙÜ ŽNxúÐKi`ûîXlEÁÞ#¶N94óiaçÇ'ž2U|ÁƒÈí@Mga2±[¯)`Ia×<ä¿Ê€,XÚÚÂ[ìÓ—8ÁùÃqšº«´`±os@¤ŠÛÍ,f!ƒFªätõó  æ A[†bƒ·’F1éžÔ‰œ”¹|ägéÓ¥I,6¤ß;Òœã¨on(6‹J ’\®ÒÇý£ýs@vÂ5¶ˆBsA°ûcŠ’€ ( € ( ŸïšHãÚßè¿Ê€%o¼Ÿ_èhn«õþ†€*ÝB’]DÍ.Â?‡Ö€+Ï ™]D± Íò–' ûW©·7i§¦Ãç²–K‘ ½hÔ0Ârp=ý«°ÈEÓ§Ú?¼}2;gÚ€]>w¸I>ØøF$ù}?ÏJÍvʯw¼1¤Á´ˆÉ*™,û¬rOåVHæm*7#h Üœ篷4ç]9й-¶-«Õ^xýhìE2fÊŽ:@Ð@9>ø  h €)\Íf$•g7__—õ?­?Okv¾ÌŒ‹¼‚®Î(¨:W˜ûÔ,œ† ’z‘þ4“(„Ëû°ƒËfÝŒ{P÷éiC…ó·|¸VÎxÿëPS*l‰‰`È=y#X±yȳÇÝwpãjž€ r}ñ@Ð@T¹ž(ž\À”&p$ÇéŠ]>hæ·fŽ…C‘´cÞ€+%í˜gSk†^ÄϦh$¾³Ë-h 2»P¦;P†öÛí†ÖO0œåŽÿ*†âöÌ©[»3˜/Ê9úœb€,YÝZN[ʃËÀî@½øýhäe ~ï}¨”“À&*mÔ¸rã9Êÿˆü¨¼·* Ù®)À ƒžÐÖ€/m™ö›(Œã¯åþMK-ä*ÒfÑX¬¸$㟯OÒ€_€‘¬ „ÇËóéõ4¡nâKxÜ&ÀÊßOj’€ ( € ( ŸïšHãÚßè¿Ê€%o¼Ÿ_èhn«õþ”Véà[¨„ˆKž„Py–ò3y¢=ß0Vãߊ៲sw5\ÖÐKŸì±v<ñ™‹3ž8þ•Üd1Nå”Qû°rOÍŒäu?•=ŸII|ÖU #å=»Šm§öUÓ)Š-®ÃA#n-2Î*°‚# wqéÍ[PB€ € ( € Ÿï¥&aUk¦ Ãtû•|ëˆ'˜¬8O+¸ãžýóùP¯mAÚú:…Ø þŽù9Ï'§>Ôï·]oÛÉ ç4‹ûNóhÿDdàdŸoj=/®¼…&ÚMÙÆÜãô±as4íûÈš 7zÒ¦@O¾(Z(¤×2§˜©. ò1`sǹý(1{`HÆR;àõühÍ”³Í4ñùn€0FGã@÷På±9äž}Çë@šêþ0¬–¡Ær€s’y  лI ;¡F#%Oj{(a†ƒØŠ(  S\̬TC‘¸€v“ÝpSùP_lº8>OÍŽñ7òü¨·»ðÖØŒÏù4+]]y$Ú‡kG¾?F÷—ê‘l³ÜÍ÷»Ïý(í»Hð#L¡d#æQØÐ”P@P@Dÿ|ÐCÿÖÿEþT+}äúÿC@u_¯ô  ·3,wQ!ˆ9?ÅÅV¸x ²4‘)ÚpÀ±þÅ9ÓSwF©JÚ qyiß–öÛ¤'–ØÒ»L†-ý?c" OX×®Fx ¸º²vdžÍ™‰ÇÜ?×µ:;ë5š%†Ô†~ATüö  Æ ¹ÁUÌق߯ÿZ€'·œOæaq±¶ðsš–€ ( € Ÿï¥&[€ÓÊ­)ˆœo|šуأ£¬ðµÄ6³…vxÁÏ8éÈæ¶«%$ŸSqqmt4Ëj&"ˆžI?ž_¥bl+=þü,1c“ëùÿŸzXÚÿÎd0ˆûí94¶­w%̆tT…xQŽIõ  ˜”P@O¾(Z(  ³ý¯Ì q…Û»<óïÓ4ë/´ù-ö¬y›Ž:tü(¼Qk•ó[dC¯Ý;¾˜é@ jªŸêbsþÑþ†€'°’òMæê%ƒÇš·@NCyæ í,@Oíɰ€<̯ ÊúPvê…cĈ¤› ò¦(ô`‚11M£q½èôP@P@Dÿ|ÐCÿÖÿEþT+}äúÿC@u_¯ô  ÷N—¬qîCÔúPiçÊå£]ê~éLçèkŽUZ›M~ª:–öâ;Ÿ.+6tÜ7:ŽØ­v [û²»Í„€tÛÎO#Ú€×·jåE‹7=oÊ€}rÒD¢ÅÀo¼N~_nhÿiŸ¡ˆÿ¬Û÷îÐöòK'™æÅåí|/=F4-P@A?ßJL ™Ø¤ìà±Kdœ` ši\:ÙË%ì†K[ÌåÛdŽ1“èi{9AûÀ§/t´°j˜›„¶q×:SßP.ßé@.\}(Aè÷N¬Ä`qŒzvúЖ‰t›þÓ"¿÷qÿê  4P@O¾(Z(  “ÛÜ<²4S” 'Œž;dgó ÙE40²Ï'˜Å‰$àzf€ [}AYñrNv©ù±×¹ü(ÛP; \ª°Põû `ž”ó÷œ‡íKåƒÈÚ2GßZŠ[mE6÷!²I!½ÏÎh{Xïc'í$¼qŽsôô  K»8ûPI!¹.Hl,ˆð2¿à:‰­oxÍÆï” n#žzóœþ‹g|&çpÈãÌaý(òZ^1“mÉɹ~cÀôÿëP~ÃxË7®¥G$sÉ?  Ð#Ghî]•@,{ŸZ}P@P@?ß4ÿǵ¿Ñ•Jßy>¿ÐÐßy>¿ÐÐ{qö˜ŒDlþ*‚WºYbÈX—hùMrJUT–†‰FÂÌúÚ@†$0ƒÉ':ë3²j»740îèqÎsõ 3êaˆHâ#=O§ç@}LË1F©üg?§Z~oû§"L»Êú?Ò€,Bd!¼Ñƒ¸íéÓµI@P@O÷ÇÒ“9cYoC+Fà†˜S@ÕÑ ¦Ž`–fB°#íÚ±qŒòIúÖ“Ÿ2W3…5Ú-­”ƒp{©2Áížýk3@ŠÅ¢—x¹”€ÙÚIÇÒ€.P@P“€ (€Ò«(¸›æõlÿïþµOgh-mÚ û·19Æ1šªth›ïJçß<ôÇZökyq'Ú1.ÐÁpŸç@Ó¥ {.Éë“úûþ‚€=1ÕÕžòi`ß18ãñ  (£Ù3HXKÁbHÇbTãÿýh¥’óÉùUHa‘ÆGñ4‹¤í}Â|䌂™þ¿äÐäÓ†Cç¾Mý:΀ý‘,a¥`Çr­^‚!ĤŠí@ € ( € ('ûæ€øö·ú/ò  [ï'×úªý¥V¹ŠG¹‰’]€u\õ &ŽãÍq •møÇá\’…Nvâ͵<ïr;„Hƒ´÷à\×Y˜Õ·ÔÂ’nпn8#Ûë@{{ýçeÚ…'=?úÔ-¾ eŒµÒm^X÷åÒ€ö{Áô€Ø“~NG”=²M¸Ã’Ä‚;Jš€ ( € Ÿï¥&?ä#ÿoýP€½L€ ( € (É÷ÅK@P@P@P@P@P@P@?ß4ÿǵ¿Ñ•Jßy~¿ÐÐÝWëý(àó&FÜGl}9  óÙÊÎá0äH9Zå• 96™¢š±ÖÂ[ÍÿnhðÜ õé]ñ½®E˜&žØ j2Alò9uª#i®\•»™A9À'ühtžln×’°NÜò}zЩdcû³1g™órsŽ”±Zî|Ó o½ÆÜ}ó@h € ( þøúR`QƒþB?ðÿÐ…eêb ( € ( 'ß-P@P@P@P@P@P@Dÿ|ÐCÿÖÿEþT+}äúÿC@u_¯ô o¾ŸE5Ä)qNÃqè S–8™œyì±³áAך┠æõ5MÛaße±–õäóœ­ÊîŽÕÚdhÐ@P@Pýñô¤À£ü„à ÿ¡ ©€P@P@9>ø  h € ( € ( € ( € ( € ( € ('ûæ€øö·ú/ò  [ï'×úªý¡ o¾ŸV¸’¼‰^6.z V•`f‘eî;°ØüW½—;º5\Ö$š]> “$€‰C}àó]¦Cÿµì°O˜xÿ`иÝd@èx>Ø P@P@A?ßJL 0ÈGþßú¡z˜P@P“€ ( € ( € ( € ( € ( € ( €"¾h!ÿk¢ÿ*•¾ò}¡ º¯×úP7ßOÆ€Àóìý(6imIJ;Å!ˆecÍpʤ9Úq5IÛFM=ÜÎTÚ³¾í¹ 9w®Ï=MgËpé#î@\7 哟ƹI©µÊh¢¬:{Û¨$e…×v†yô®³2ì.Ï 3¡F#%Oj}P@P@O÷ÇÒ“Œòÿ€7þ„(@^¦@P@äûâ€% € ( € ( € ( € ( € ( € ( ŸïšHãÚßè¿Ê€%o¼¿_èho¼¿_èhï§ã@ç[ƒw€¸4t²¸D°n1¤vÍr¿j¤í±¢å±$‡PûN#wu<œqÿ×®£1Лÿ´8B!Ç;zк( € ( € Ÿï¥&?ä#ÿoýP†^¦  € ( € r}ñ@Ð@P@P@P@P@P@PO÷Í$?ñíÑ•JÝWëý Õ~¿Ò€¾ú~4ð;ÝG"ÊUGðúÐibŸÍuŒ©mÙVó0Gá\Ž9Ý™¢jÚ’OkzóI$WAUÇA]fcE¥þW}æåIÇC“@P@P@A?ßJL 0ÈGþßú¡z˜P@P“€ ( € ( € ( € ( € ( € ( €"¾h!ÿh>‹ü¨VûÉõþ†€ê¿_é@ß}?lŒ¾b©<ûP|°î•ÕgAn ‘ø×¦œÝ¤jž›W¾!°MFx‰¾ ²2•Œ œzûW¤¨É«œüèu—Œ,mcdu¼”–<²Ž?Z~ÂAí©¤ø¢ÏV½°E2¹RÙp1ÇãS*N*ìjI›u‘A@P@A?ßJL 0ÈGþßú¡ ½LA@P@äûâ€% € ( € ( € ( € ( € ( € ( ŸïšHãÚ¢ÿ*•¾ò}¡ º¯×úFûéøÐrAÎŽÊ é@çŠqä4ìžfNÌ çxx·{–§c mI/&•5-‰$…€ò2Nz準. [û'Übè^^øÛTO‘¾oôsÇcß§½kí—b9<Ëzˆ-5uº7¾s¬Evù%8>ù¥:¼ÊÖΞ±,l ˜œ’TÐmµé€ù-*ª®³¸ÐÇ"€4`“Î$Æ7qé@ € ‚¾>”˜`ÿü¿ô!Bz˜‚€ ( € (É÷ÅK@P@P@P@P@P@P@?ß4ÿÇ´EþT+}äúÿC@u_¯ô o¾ŸA5ÒÇuEX–î Þâ!#JÑãw¥sýb)Ù—ÈÈ.$Óã™ÖWrÊ b©Ðƒ|Í ÚÅ›uµ»V•a|ƒ‘ƒ{ÖÄ–#†8¿Õ ^ÜPè ä·†VÝ$HÄw"€ª¨¡PP0í@ @ÿ|})0(Áÿ!øèB„2õ1P@P“€ ( € ( € ( € ( € ( € ( €"¾h!ÿh>‹ü¨Vê¿_èhn«õþ†€+\O$w1"ÄX¤v ¦¾Èå„yC¬~jå–#–N,ÑBè†æâÝo6#!,2á2:ŸÖ·p‹wh‹µ á©«®ö²—nqÊòO?:±O¨˜Õ³˜œö_óØÐj|ÃýM¸9>”;]•ó–AEîyãô  ¶øÕˆÛ=(h € ( þøúR`QƒþB?ðÿÐ…eêb ( € ( 'ß-P@P@P@P@P@P@Dÿ|ÐCÿÖÿEþT+}åúÿC@}åúÿC@îà\F"Pcþ,Ðyn%ŽY2„°Ök™&"XñƒŒzcúк( '#xçµ& r¡‘ýÇÿÐ…/ÓP@P@9>ø  h € ( € ( € ( € ( € ( € ('ûæ€![ˆcµˆ»µA?LPÍð fže‘ü½äçå §ëÍrKÚ©;.[j%Ä·­,¾D¨¨@ PqÉüë¬ÌsËxè…f‰Ù£ß&€¶Gèß÷É í‘ú7ýòhûd~ÿ|š>Ù£ß&€oc œ?ýòhÿÚuÿï“@ö„_ÝûäÐý¡÷_þù4hEý×ÿ¾MÚuÿï“@ö„_ÝûäÐý¡÷_þù4hEý×ÿ¾MÚuÿï“@ö„_ÝûäÐý¡÷_þù4hEý×ÿ¾MÚuÿï“@ ý¡3µ¿ï“@ ý¡÷_þù4hEý×ÿ¾MÚuÿï“@Ô"$0C@º”-¡Ž:ü§Š›€¿Úuÿï“@ö„_ÝûäÐý¡÷_þù4hEý×ÿ¾MÚuÿï“@ö„_ÝûäЬë.YU±ô  ƒ¦I´æòòrÛsÉãÿ¯H=ü†‰î³üDò9 dk¤•™d7 Äp}Gù? 'lë"N˃’ûÜæˆt§Êí¹*ç 0 Í¥ØMÃï@ìžqŸñ DØî]œÝ¾ò09ô2iαʦrÆEÆãœŠ§;¹&Uë‘•Î?ÏÒXŒSð_§ùÅ94¢ˆËæ‚väŽÏ¿Ù„”Ý.vc<{Ð +÷þkLÌwîÇn¹ B *E?-ÉQœár;ýh¸ÉÚÍÎq(MœŒþ4 Ò·FQäÎ~PGlZMidm` Žô?”}E (úŠ<£ê(yGÔPåQ@ƒÊ>¢‡”}EQõyGÔPåQ@ƒÊ>¢€(úŠ<£ê(ò¨ Ê>¢€(úŠ<£ê(ò¨ Ê>¢‡”}E(úŠ<£ê(yGÔPs[4ªª 0lý?Ò€!:{´ÆF•}¦:Ó¶ºP¶¸iVRAÁÍ.yGÔRׄ°#½4ìî'ª±UtçxfüÒn78íW9ó;“¨« ºs,+§‚Ã8¿‚Æ.lŒ^8çžOéEÄ*i’‰µÛŸ›q·é@|£ê)yGÔPåQ@ÂB& ç4ÐÿÙlibstruts1.2-java-1.2.9/doc/images/how-to/netbeans/0000755000175000017500000000000010423130300022474 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/doc/images/how-to/netbeans/building1.jpg0000644000175000017500000006255110404045230025073 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„$=($!!$K58,=YN]\WNVTbnxbh…jTV{§|…’–ž ž_v®º¬š¸›ž˜$ $H((H˜eVe˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜ÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀc¤ÿÚ ?»¬j3ÙI‰€R…› ž€tæ´§-ÄÝŠ+­Þ÷’gpÁ?øõkìQ<ÌŽ__G7•·ªÊAþt(®¡v0øŠüu éÐÿ/eæ`‘7òQê9–MÊÛÇœYw#…ÎÓÀzšÞÂ+Àë³n|ÀÞ^Ð_ÜRžÃ4ḱ¾Ty£T–.¹ÀfÛÁ¬­%°hƇ…mï"Šã‘Ò2#gR rzãð£[ ,O4-m¶IFmã\ïÎOqŽßZI;‡B½Ä6Osh‘śĻԂ¸èGøÕ&ì’+€Ê7Èc°°?0n8Ô“w K}<Ë(ýÚåUƒ’ ©Û’1ŸZ/+…=!ŠÃ}‡UÌ$ °?ç5Sè$^¸•7;É*5¹¶U ¼¾8ãØÔ¤2¶¼þdÅ— ˆd—Óµ8+!1Ñ3>Xæš?Fwç¿LvúÑ×Aô =m¡K¨ä•<ß%ÁldÀOÒ‰]ØJÆd~VÖó7ç¶Ò*ÝÉÐÓÓîc·Ó73Ër­µ[à*‰&ÙIÙ-e ´i#LÎÆRݨ´•ÃB{xmþÛj»#3¸eCü=›vcÒä/šÚ&Ø•ó,áÀ*ÙçÞ‹»†–%ˆÅ¡'–!XZ6XÈ#æã¿ÿ^Z ™JÁbk×[„\m=ŸϚ©^Ú o©rSÙ„ÐÈ©pwvœr*UïqŒ‘-d{Ø¢H•Ý׿ääñÒžªÂКøÀ-ä†ÜDȳgha•Ö”o{±½Šú‚Z!Œ§ AÊ&7/ÔóN7°è’ÓìHV!#ûòàôëíéK[K–CnÛLk.ÄÝÏ ž¤zšw od ùYË÷†m88ô¯!è@‰jñǹbáfla‡O¥=E¡dÃmÈ,±Gµâ1œóþÖi]´̶¦6edfgÜC€AÏi«††Mh@P@ @P!i´P@ (h ¦@ H € Phh  -_N7Ïö¦8\ç {ÖŸ)«W3Sæ<ì½uÏ ÿ׫öÌV|6ªsö³ÿ~ÿúô:Íáóôïßÿ^kä.Pÿ„xÏ×þCÿëÑí|ƒ”?áóôïßÿ^kä¢ÿÂ>?çèÿß¿þ½×È9Cþñÿ?_ùÿ¯GµòPÿ„|Ï×þCÿëÑí|ƒ”?°üýä?þ½×È9EþÀóòïßÿ^käý€?ççÿ!ÿõèö¾AÊØþ~OýûÿëÑí|ƒ”_ìÿ??ùÿ¯GµòPþÁóóÿÿúô{_ äì!ÿ??ùÿ¯GµòA°‡üüŸûãÿ¯GµòQÑèÍ%.ÙI$&8üé{_ åý‡ÿO?øçÿ^ŸµòA°ÇüüãŸýz^×È9û ÏÇþ9ÿ×§í|ƒ?°Çüüûãÿ¯Gµò@þÄóñÿŽõé{_ äûÏÇþ9ÿ×£Úù bùøÿÇ?úô{_ äìQÿ?øçÿ^käýŠ?çàÿßýz=¯r‹ýŒ?çãÿÿëÑí|ƒ?±‡üüûãÿ¯GµòAÒiM#n{¦fõ+ŸëGµ·@äýŽ?ç¿þ9ÿ×§í|ƒ_ìqÿ=ÿñÏþ½×È9ûÏüsÿ¯KÚù cùïÿŽõèö¾AÈÙþ{ÿãŸýz=¯r ý?ç¹ÿ¾?úô{_ åìŸúoÿŽõèö¾AÈ/öWý7ÿÇ?úô{_ äì¡ÿ=¿ñÏþ½×È9û(Ïoüsÿ¯Gµò@þÊóØÿß?ýz=¯r ý—ÿM¿ñÏþ½×È9û,Ïoüwÿ¯Gµò@þËóÛÿÿëÑí|ƒ?²Çüö?÷Ïÿ^kä¢ÿfùíÿŽÿõèö¾AÈÙƒþ{ã¿ýz=¯röhÿžßøïÿ^iä‚ÿfùíÿŽÿõèöžAÈÙ Ëcÿ|ÿõèö¾AÈÙ£þzÿã¿ýz=¯röwý5ÿÇúô{O äû;þšÿã¿ýz=§ršýáôʲ,Îûkù“Ý…‹vx9À•*êPŒ ÖÜÃŽÀ1þ”v€+ÞÜ5ºÆWn]öå³Á=¾”ß„7?ÚN:ÊïíFO€„q׊µ@…É*«´y¥öÏOSùP#Ô`o-K|Ì ñêFqúПmƒ{øwc§Ö€,‘š‚îsjW`,árçPq߯AÃ(,Ä ®<çÓŠV¾Hß”Æw#Šþ(Û8Ø£'üò(ö·?hip…B6ÐHê0õ  è6S+J+®p äqžôbæõa“bŒ° }ÈÿXîÖ[…Ã#>â1ÜК¨·2eÕDBO/ƒÎs€:iÔá Î'¨  Eä[$o˜yh]€3þ«wL#²Ä€qÁ#¯ò  è¹òÚ`ãeÇññÎJŒê£áÔ|ÀrÆH ›Ø†Îç/oZE½ŒõÉÁ 8^Hçò Ñ•]ÄmÜ>ð,˜ /ât µÆà ‚¼°>”4$èY3€Häc‘@œu  ‘]H†e_•ö($“@7±œ6Ëq÷9#ŸÈþTد‘¶«) Äôе@M/”Ñä ¬ÛIôô  ¯¨•·wòö°<î1œþ@ÐÂú/›!ÕA 1:ãò ¥ò´Žž[åH@ùºsÅ?í°Ý¿ŒŒuÈÎ~˜þF€&ŽE1^€â€s/‘m, gb–ÇÒ€+¶£ ÈF~P¹Î9ÏNhŒF@%X ¸%¾n?ñÚµ‹*^‡ôõ P@ù~ðúå@YN&ƒÈ˜¬¤åÁ\ ÷ëŸÒ€`ŠÙWa’wtç’§¥[  ÷¨Ì±² #äy{sÐâã½D-LèL2€Á¶å°xé@ZÚ­¶í®Ä688ã=SÉ[–˜YÎ[ÎS_½ôü¨Ðؤ%6;a@Èã’Ï^€XÂqü{¿úßJ³@Ý dRcy6°m«Ž:b³‰L‘nIþ´¦Æ2±.æý×O˜ý–€-–"ˆE’ñ DËc¦9è}([8ZHs–f,yÏ_zœð:f€)¤fBTÃÿJÖQ¼a lfü[?ã@,°æA<žiþ>oLcµ;ì0üƒo À=»~\þf€&Š1j‹ÑGç@ ¹A%¼ˆCÊFü3@ž/µLàš" ÛçÔÐö’'IX2‘–Î:éø·N”jÄ1„RO$’{’rhôP@:l™ŒLö ãý¿üwÿ¯@?ÛÿÇúôcý¿üwÿ¯@ßöÿñßþ½ÿoÿÿëÐöÿñßþ½ÿoÿÿëÐöÿñßþ½ÿoÿÿëÐöÿñßþ½ÿoÿÿëÐöÿñßþ½ÛÿÇúôcý¿üwÿ¯@?ÛÿÇúôcý¿üwÿ¯@ bWwÍœ)=1Ò€P‚FþŸìÿõèÇûøïÿ^€ ·ÿŽÿõèÇûøïÿ^€ ¿íÿã¿ýz1þßþ;ÿ× íÿã¿ýz1þßþ;ÿ× íÿã¿ýz1þßþ;ÿ× íÿã¿ýz1þßþ;ÿ× íÿã¿ýz1þßþ;ÿ× íÿã¿ýz1þßþ;ÿ× oûøïÿ^€ ¿íÿã¿ýz1þßþ;ÿ× #ù³Èþþ½3»ž6ûýhvÿ·ÿŽÿõèÇûøïÿ^€ ·ÿŽÿõèÇûøïÿ^€ ·ÿŽÿõèÇûøïÿ^€ ·ÿŽÿõèÛþßþ;ÿ× oûøïÿ^€ ·ÿŽÿõèÇûøïÿ^€ ·ÿŽÿõèÇûøïÿ^€'¶…d‹sœ‘Ç G/úÔÿwÿe ØóÔóúý(h¹ºÁ}°ÈÁ P8úš–h–EèÃ<ö ÐHPI É&€’$™ØêØë´æ€@›”á±ëŠ’9A‘ùu@÷J¬@ã¾hñJ%P”ÚS<‚=èjkôo÷úP’œ3sŒôZhéßñ 4dF284G(°ßÖ€@®/ᑈ@ 6Tœã©”43G:o‰ÕÇû$Pè’H#ò}(cH2?@ ¥¸XÉ\E,S¬‡ Д ·6ÛŒŸ®(ñȲ ŽÝE>€$«“è("˜HHÆo¥=º¨þt§î¿ÅÓ¯S@Iç?N”3\±ÀÑ*n½(ôÙ\F…ˆ'ÐæšW!Kì`ô#ÐÐÕ€} E`ÙÇcŠZMÃ~ÞøÍ-nÇþ=ÇûÍüÍW—ýj»ÿ²Ðm׿>üŸ×¥-U†X£Y˰ÊÈÇn~”Ð `cPñ"²|Æ@¬s€}=©¤¦© v’88é@‘­·˜iÙgS–fXË„¥&Æ‘bÆV–{¢[z®ÅWþðçëBr˜qÅOiÕÿ –oõ/ô4I€#4fÕP–ã4,± œP2Èü¨Õ³¼gÖ€$~þãJ’^»s×° Çñë@nd@›zÎy ZHÙŒ´b€)Lv^ ÊÁZHðØ;xÝßñ F6êdÛÖD,ÊNpAþ¿¥6º@Uº8úPh0íJµ@n¾ÿüüh²ûÏ@¨¬³!WŒ[T;‹@è(ÍS˜mŸ.7)í@[lÃR{ЭÐ}Gó þ×øº¦€rIëüºö O“`f€*,nJ€§œã4yA 9#½TÔVCåûª¤’0}4옞Å5b'bKÄU‰\¾qÇ~yúVm´ˆo”Õ…™âVuÚÄr*Í®þêçÖ€+)ÁäîüèF€"—r1‘W?.(·šæNY†OÝÍ^  v?ñî?Þoæh¼¿ëSýßý–€#=O·~´´ß-2HE ܟ΀’Â1·qÉÿ?>€1‘@$õ$ÐPLhNJ ý(UBŒ(PÐ<˜ÁÎÑ@ €åGýÅü¨Ê¡FÀ ~þãJ’_¾q×=}(ƒ§LPT #¡ (&€€•\a•Xz0È HãBJFŠOU€@Êa€4*ªýÐ-#"·ÞPhTUûªÒ€€ª“’hh e 0Àï@¨Q€0(nƒê?/ð3ËqøšNrIüèh €Ñ] °Êž ŬˆÀØwüúÐ% ­&   €å¦s´f€@ìãܼßÌÐ;Ï7åòc‰ÎD‡§ÐÐ_ôßùö³ÿ¾Ïÿ@úoüûYÿßGÿ‰ ý7þ}¬ÿï³ÿÄÐþ›ÿ>Ö÷ÑÿâhÿMÿŸk?ûìÿñ4¦ÿϵŸýôøš?ÓçÚÏþû?üMé¿óígÿ}Ÿþ&€ôßùö³ÿ¾Ïÿ@úoüûYÿßgÿ‰ ý7þ}¬ÿï³ÿÄÐþ›ÿ>Ö÷ÙÿâhÿMÿŸk?ûìÿñ4¦ÿϵŸýöøš?ÓçÚÏþû?üMé¿óígÿ}þ&€5ðÎ-ìÆxáÏÿ@ þ›ÿ>Ö÷ÑÿâhÿMÿŸk?ûìÿñ4¦ÿϵŸýöøš?ÓçÚÏþú?üMé¿óígÿ}þ&€ôßùö³ÿ¾ÿ@úoüûYÿßgÿ‰ ý7þ}¬ÿï£ÿÄÐþ›ÿ>Ö÷ÑÿâhÿMÿŸk?ûìÿñ4¦ÿϵŸýöøš?ÓçÚÏþú?üMé¿óígÿ}Ÿþ&€ôßùö³ÿ¾Ïÿ@úoüûYÿßgÿ‰ ý7þ}¬ÿï³ÿÄÐþ›ÿ>Ö÷ÑÿâhÿMÿŸk?ûìÿñ4¦ÿϵŸýöøš½"ÞÏ#ý³ÿÄÐMéëofàgÿ‰ ý7þ}¬ÿï£ÿÄÐþ›ÿ>Ö÷ÑÿâhÿMÿŸk?ûèÿñ4¦ÿϵŸýôøš?ÓçÚÏþú?üMé¿óígÿ}þ&€ôßùö³ÿ¾Ïÿ@úoüûYÿßGÿ‰ ý7þ}¬ÿï£ÿÄÐþ›ÿ>Ö÷ÙÿâhÿMÿŸk?ûìÿñ4¦ÿϵŸýöøš?ÓçÚÏþû?üMH“êH¡R+UQØ9ÿâhÔ¿x}ò erqŽN9Ô\hU‡¿Ñp(` ÇŽŸZ.ZÝX’X÷ýióIàpNIÍ$ÀSn¤ä±'×òÿEÀpŒye '=è¸ 0Ÿ00sžr/ð¢à(GB@ÇOÃ\ œ€¢àF70ÈÁÇz.£ëH€ ( € ( € ( € ( € ( € ( € ( € ( €%”qŸ§ò ¨ € („—W>t«EµoÌNzýh¿j½þä÷Ñÿ >Õ{ýÈ?ï£þ}ª÷ûßGü(ûUï÷ ÿ¾øPö«ßîAÿ}ð íW¿Üƒþú?á@n¯@'d´€×ªÄl·àãïð ûUï÷ ÿ¾øPö«ßîAÿ}ð íW¿Üƒþú?á@Ú¯¹ýô€µ^ÿrûèÿ…j½þä÷Ñÿ ÍéÏÉ?xÿ…j½þä÷Ñÿ >Õ{ýÈ?ï£þ}ª÷ûßGü(ûUï÷ ÿ¾øPö«ßîAÿ}ð íW¿Üƒþú?á@ —ÎáB[äÿ´€%ΡýÛoûé¿Â€ êݶÿ¾›ü(ΡýÛoûé¿Â€ êݶÿ¾›ü(ΡýÛoûé¿Â€ êݶÿ¾›ü(ΡýÛoûé¿Â€7ÿݶÿ¾›ü(3¨vÛþúoð :‡÷m¿ï¦ÿ 3¨vÛþúoð :‡÷m¿ï¦ÿ 3¨vÛþúoð :‡÷m¿ï¦ÿ 3¨vÛþúoð :‡÷m¿ï¦ÿ 3¨vÛþúoð :‡÷m¿ï¦ÿ 3¨vÛþúoð :‡÷m¿ï¦ÿ 3¨vÛþúoð :‡÷m¿ï¦ÿ 3¨vÛþúoð Íÿ÷m¿ï¦ÿ ¿/Ýÿ¾•g_LÐ$E¾`Ä…}¹Æ;ÐSÜÌŠaBH‘œ¶XœyïÁ a½¸XUØ«l(ç…ëùГy*»DV=ñ†f$áHOá÷‡å@­ä2ÛÇ!.¡±õD¯¹ÿ®¿û*Ð&àƒ¿äî*8$ƒŠl·L–«0Q“ž>€Ÿé@ qpñÈŠ»Få'%IôôúÐMx#Q€O8-Ž:dÐR÷ F,“†×Þ€$7qª’Uò –å~´3ÆHèE%䌌vcs>Þzu ZñbÊË€àãð?­ x„¾AØÃÆ:{\ Ú0İ:æ€öض–È~^œ‘ý *]©8*ÜÏèîG¡²A`HàŽ9ýhuêÿAüè”÷’Œ ±öÚIP$2(yàZV«:2çœt¢À#NŠÛ[ â‹0í)‚pÀœ‘íš9X Ó¨#9¾}1NÀ*LŽŒÀð½}©XÏP@*ÁAŽÏXûDa€Ï'ô£•€}¡î`Tc#=ÿÎE !¸]…—'ž;SåU9P}EH @P@åÌ6ê²*ÆïÅQ–ïNŸkDøé¹sŠOµi¹1dËЂ€s¦†ÿ Oqc9í0wªOLò Mý”qª$Ê@sÒ€+Å"Hóº0*Òð}~Q@ 0!o¾vg%8ÆhhŒ¥ ®Sœ/ôÏs@’ ²2‚2¸éøjcÚG&CHø98u#Ð-#ìv±aÈã$æ(“ÛfòØ ùÜKã¯á@N[r(nJì7•!òÆAüh#n‡HÁÇñðIý1Ú€ì±äüìTJ–àÊ€ö¸ÃFå¤ Y±´N¯¥FlßfÀÀÎó¼ú“éÎ3ê3@­´J¬¡Ž‚yô9 ÛÀÑʘU*ª8aé@”ŸžÃùÐw·Wg>k“ï ÆôÍ)6¨We*Ń dg¯ó [ÃòäÁïõý3@·CÆ$`^Ÿ7®r:ûÐ-£gÌß¼R§ŸZ ap¬XÑ‹(Ýž¹í|÷  Öä…ç±  Ž¡Æ¨?•!@['Ó§p#0FI#¾}0F?ZwÞWûm¸ð¥pˆ‰É9õ¢à4 Îöílžô\ò††3È¢à5` ¥UØtôôÅ|”ÛŒsŒg½`/”1†fný‹€Ö[«7¯ãBv’ÈÀ’8ü±EÀ ~ñcõ4\ˆÆÂ¤–Ï\ÿõ¨¸ 0e”ïlƒ×¿Cþ4\ªAaëïEÀ<…*£'å§øQp#›$`œõ¢à< dÒh € (Ò¨iF{ ?ÊœUØKÏüðOÊŽDöx?ç‚~Tr ³Áÿ<ò£‘}žùàŸ•ˆ0@NL)š9 öx?ç‚~Tr ³Áÿ<ò£‘ {sܧ>Æ—*öç¹NFz9P‘oÿÏn?å‚zt4r "ßþx§\t4r ³ÛÿÏ뎆ŽTö{ùâqÐÑÈ€½¹ÇîSŸcG*öç¹NFz9P ±@¤‰ÇlŠ9彂9ž/"WdÆv)=F}ir _BXm0ÉÆJ?¨ [@à`m<~"”¢–Ã(È3<™-ÃzŸAN)4!6û·ýôj¹Pßvÿ¾¨o»ßFŽT·Ý¿ï£G*Ûîß÷Ñ£•m÷oûèÑÊ€6û·ýôhå@}Ûþú4r  ¾íÿ}9Pßvÿ¾¨o»ßFŽT·Ý¿ï£G*Ûîß÷Ñ£•m÷oûèÑÊ€6û·ýôhå@}Ûþú4r  ¾íÿ}9Pßvÿ¾¨o»ßFŽTŒßFŽT›ÿ­?õÌJÎŒ¥42Mv˾Y©<dŒGÕM]‰ÍâÃe6ž¡ƒ*“»Xð¼ü½¹?…e}l2Ö«ÿsrÈÉ=:޵»øDWŠA#ìòÀä±È…21ÆOSÓÿ­ÔŠ/Ø庑„ʳ‡Á*ªr»~ö{þ›îdŠÊ<ÅVýÞÊ’רÜÑv·ÜÅr±ù‘Œ~cäž@$ãÚ›nà8¼¯¤O$¯–1¹ÇŽ€G¸óîdÛØÈ œŒ"ã=? ¼wW€#¢óeÎ8ý5)°. ¦{™"Y×vÕ ¿QÔ}NAöȪ»½€l—S<ï1aRØ‘Æ:üÄc¯¯¥ Ú&ŒÎVq–‘wÂ3ž‡ŒsJì¬÷r28(Ê ¢ƒœ“ÎHô”]€è®åyaÝ*®ð>@9?‡R=ÁãÓ­;°-ià-¶ÑÀ8Ãy¦¶p×<ò:ýx¤ߟ#éÉãô¦Ž?^Ÿ¯N¾Ô 1ž1ŽztëíÉ Æ;cƒ8ý:Ð#nNœ?Z@ =¸ü8t÷¦Ž1ŒçŽzñÓ§½)磯_n”cÛ9õ~¼RoÏ‘ôäñúSG¿¯OçB*lý¦÷j»>øöþöÞ3íK¨ "Hª Ûüã:n'‘ŒñŒqIªßëOû§ùŠSÙAÿ×Kþ÷ôá° T@P@P@P@P@zæ_)·m,Jõ=+»1”ÞU‘÷µ´Û±Œ«•ãð"­¸± - 5­Á¨31ÿ¥hŒ˜Þ±9û<Ÿ§øÕó¡Ûþ}äý?ÆŽtVçab¶Ò Ç'‘Éüèç@;íÿ>ò~ŸãG:ûcϼŸ§øÑ΀kÜùˆÈöÒ`Ar?:9Ð ·E(·—`dƒýhç@/Ûþ}äý?ÆŽto û<¿§øÑ΀j]yhm¤tè}±¿çÞOÓühç@loù÷“ôÿ9ÐÛþ}åý?ÆŽt"¸Æ;YB‚OPzœúÒRH}¬ÿϼ‡¿;y£™}¨ñþ'þ;Éõ£™Ÿj?óï/þ;×ÖŽdö£ÿ>òO»Ç¿ëO¿j=­äŸwŠ\ÈíGµ¼ƒÓîñG2 ö£ÿ>Òzt^ž”s µÖÞNzýÞž”s íDõ·ç¯ÝæŽtö£ÞÞCÜä/4s tF?ÑäÿÇy>¿¥È]‘ÿ.òþœÑ΀®ë’<Ðg ’mè1Ú“’8C+oi M‘‘øÒºü3‰£ÚÃ~‰4ÆUõòÿ½ýT6•@P@P@P@P@P@/>úýùŠÀcd *ÿÕ,J¹(¼±#4^Øùz´+´‘¾Aó9þzvé@~L_óÍ?ï‘@WÓ¤Z‡ÙÖ(wR7¸\ç#cž•¤^–][–pÈÓµKg’:žÕW@IçZ–UNì`…ãž™=;  ¨dMÁ”0+<¨Ð+æû;íÆwyg¯§J.€wîÿç‹ߣþhû¿ùâß÷èÿ…<¡ g?óÄÿ…g%w y–ßóÈÿß–ÿ › <ËoùäïË…ó-¿ç‘ÿ¿-þX̶ÿžGþü·øQ`2ÛþyûòßáE˜™mÿ<ýùoð¢Ì̶ÿžGþü·øQfæ[Ï#ÿ~[ü(°™mÿ<ýùoð¢Ì̶ÿžGþü·øQfæ[Ï#ÿ~[ü(³D–¥‚ùx$àf"?¥`KäÅÿ<Óþù€<˜¿çšß"€&/ùæŸ÷È É‹þy§ýò(|˜¿çšß"€É‹þy§ýò(“Å‚B#Nÿô  ®—üöZªÿë¥ÿ{ú ÖJ  ( € ( € ( € ( € (  —Ÿ}~‹üÅ`1+”mñBeYOÊÀcæ€ + Zô]\!‹Ëû‰I8ÆN;sþ{€kP|ðâúIºîE\c¦2­k „g¶”¤–,¬rHG¹zžß; %[²FÊàq€ŽÞØ4Xµâ{€Ãj—WÐsýr‰Œ±š€wmª£$žÔÈ®"—ý\¾†€$'$ЬC)È# Žô¹ 4f€ К3@h7_Ö€4™÷ ?½‹ýñM§H€ ( €#¸ÿy?Ý?Ê€3aÿ[/ùì´Uÿ×Kþ÷ô¬6•@P@P@P@P@P@/>úýùŠÀf¿ü{ÇþèþT%P@P¸ÿ‰>‹ýiô:@Cz%¤¨€–eÀÅV¼·”¬IH럘–çýzd°J®êÚHUºéÔrÛtvð£#¨ þT*œ¨8#=-P@–9HsŽ=ê®âPìA<çè8âXåä÷úR`Iÿ-bÿ®‚„¥ ( € Žãþ=äÿtÿ*͇ýl¿ç²ÐWÿ]/ûßÐV°ØBUP@P@P@P@P@\¼ûëô_æ+š6ÿñïû£ùP”P@Ÿrعmsò¯ÝR}}*­ n?óÎ_ûö•€7ùç/ýû?áE€7ùç/ýû?áE€7ùç/ýû?áE€7ùç/ýû?áE€7ùç/ýû?áE€7ùç/ýû?áE€7ùç/ýû?áE€7ùç/ýû?áE€7ùç/ýû?áE€7ùç/ýû?áE€7ùç/ýû?áE€7ùç/ýû?áE€7ùç/ýû?áE€7ùç/ýû?áE€̱|Ž>qÕH¦µ P@Çü{ÉþéþT›úÙÏe  ¯þº_÷¿ ­a°„ª € ( € ( € ( € ( € ¹y÷×è¿ÌV4mÿãÞ?÷Gò  ( € (RÿÓÉ èqëZÃaqþÓßFªÈvXг;’XÑ  ¹w*ù‡,2ãÈ£@ö›þú4YŒB©bÌ'q¢ÈŒ†l¼h²ÇûMÿ},€1þÓßF‹ ´ß÷Ñ¢Èí7ýôh²ÇûMÿ},€1þÓßF‹ ´ß÷Ñ¢Èí7ýôh²¥”:¡r³¸óŠ4IÚU¹8aÁcE€›íýÁÿ}·øÔò€}¡ÿ¸?ï¶ÿ9@>ÐÿÜ÷Û hîûí¿ÆŽP´?÷ýößãG(Úûƒþûoñ£”Îä` #ýöÿ9@o™Œâ$çý¦£”Ü3Ÿ"<Ÿöš¼À7ùáýôÔY÷Ü?ç„÷ÓQgÜpÿžÿßMEŸp ÃþxGÿ}5}À7ùáýôÔY÷Ü¿óÂ?û騳î‚ëˆÕ:ô'úÓHP@P@P@PËϾ¿Eþb°£oÿñÿº?•I@P@ú—ü~Ÿ÷õ­a°ŠÕ@Et†KiFK b“ZM­&Þ'nTsüúýùŠÀf¿ü{ÇþèþT%P@P¸ÿ‰>‹ýiô:@GqšŒÍWš9.|µx6"¸-—ŒNßçV{+‚¸Eåwyx+òüÄŽ½8Æ1~Ôé-Z(7…XÎXÊÙpÎ@'½B–íq¹Ò6ò7œF…OeÁù¸ãqÓµh¼R*@àh‡+»–ãOz‰m]ïy rJçõ隬lg ,®l„0&C‘“ƒÇ8ï×½X³´hæWumªŸ(fžÃЏŽ?vÃÜqÿê Ð@ÖûÑÿ¾) H€+I$È”#0?Æà3@É-aSŽ6°'?Öäæg¶Ù0süYß#¯­“$ÈYƒ¤aÂ÷†í¾ØìzvÅ4YÈÉr,%b*3É,áÇÓõ ì2•Ã(cóF}âF}¹ÁöÍ#éß¼]¿2mBNHxœ÷  lçÌ` `§¦áß¾ôQ´é Œû”üÅ‚‡eÏÌç¨ä}áùP‹fèÑííÝó7ò9Ï׃@¨ €+Ýõê•\Èk@ ( € ( € ( €.^}õú/ó€Íø÷ýÑü¨J( € Ϲ$]H3|«Óñª¶€E–ÿžoúR°[þy¿éE€2ßóÍÿJ,–ÿžoúQ` ·üóÒ‹e¿ç›þ”X-ÿ<ßô¢Àoùæÿ¥ËÏ7ý(°[þy¿éE€2ßóÍÿJ,–ÿžoúQ` ·üóÒ‹e¿ç›þ”X-ÿ<ßô¢À!-¾<£œrqM R@¼ÈÛž(Øú²ƒ@ X­UÆØá QiØ ©P@P@P@îÿåŸÔÿ*¸ Ö€P@P@P@\¼ûëô_æ+š6ÿñïû£ùP”P@Bãþ>$ú/õ§ÐéŒÊŠY˜*ŽI'@ Šx§Å"HR§4þƒ4ŠC(e ‚2ï@ @P@P@YC,@Ï&€¾ôïŠhR  Ή-Û,¨®« 0È&ª*줊(æ…£M‡ÍA…bävéTÕ‹,Ñ…”µÌ=GÿZ³Uî.iD,Ónp>U`‘ëëë@K¹äŠG Á £9$¨¯¯4Ñw)™PlÜà Ø8æê3þÏÿ^€½œùˆöDზùˆà玞ô<Ù’äDÎÈ›w­´“Ÿ_óÖ€"k·@̬2§#—ÈvGý(#srd¶Rñå\•R8 ñÖ€%ŽêâH¡?ºF‘ qÔrsÿëë@ØLÓÇ#¶y|€OA€q@®.n#Ö¡†%/Æ ¯÷y?5Z»ëÔÿ*¸ Ö€P@P@P@\¼ûëô_æ+š6ÿñïû£ùP”P@Bãþ>$ú/õ§ÐéP¬«¤…mꄃ׎”ŽçH$3|¸`~]¸퟽@µŽT–Ë/ äð8ü¿­hÐ@P@Pv©i=ÍÕ™Ì~YbÎ?‡¥_o½ûâšÔ€(9-â•÷:’qŒ†aÇàh«in®®#;”‚2ìyüM;°& AƒÔ@1âŽE $jê9†@ 1£++"•o¼àÐLØbM¸nÑŒzP„q€‹ŒŒvG«¶DW^¸a‘@bŒ¸sˆÇ¥(ÛÜc*8ÇJ4hʽ¨ P‚œ2rqÞ€ Û°2F3@]õê•\Èk@ ( € ( € ( €.^}õú/ó€Íø÷ýÑü¨J( € Ϲ-ö©¡o•zïêj­ eÿç“~kþ4¬åÿç“ßKþ4XËÿÏ&ü×üh°_þy7æ¿ãE€\¿üòoû鯋eÿç“ßKþ4XËÿÏ&ü×üh°_þy7ýô¿ãE€\¿üòoû鯋™ùäß÷ÒÿrÿóÉ¿ï¥ÿ,—ÿžMÿ}/øÑ`/ÿ<›þú_ñ¢Àùäß÷ÒÿrÿóÉ¿ï¥ÿ,Imñæ6xä‘þ4Òõ ø"YY÷àŒ`â€"»íÝ9Œ•S–îO§å@ žq "ùnìùÀ\vúšaºÄ©‚PXnÏË€8Ï~ÙÁ¨!D>T ¸,~´ º]莎Œç68àžÇØÐnâ(­ó·'óÅ=&FR[ä e•ø P&¼·…\¼©”eÜ2? Ÿí¾l{¶îÆáœzý(Iá’CJŒëÕCGá@P@îÿåŸÔÿ*¸ Ö€P@P@P@\¼ûëô_æ+š6ÿñïû£ùP”P@Bãþ>$ú/õ§ÐéŽëc…$Ði>N$£ÉÂîÇÍ@\¤•A$Ïpph‘ßA$K'˜1 gØÐݸp†dÜN1ŸÂ€íHªÄà}ñ@$ÑÈìˆà²õµ>€ ( € (­÷£ÿ|S@:,7PÛ¼‚W NÏÒ€#¾¼‚hãHä Þjœ­Gql—ÄdDtLåXg­+ÂZtceÇÔ¯øPuÓ[ÃåvïÞKP3ÛÚ€ ­?Îp¬qìÙ€:pÃÿ-£„lÇ#*îÏœ´zuô ­\ˆU‹I‚HÙמ¼úúšI¬ås(_,+ŽOSíü?Qמ(²éï#HI_Ÿ'%Û‚F>ïOÆ€&ŽÌÇ*²í ²ozy{qùк(½ßü³úŸåW2Ѐ ( € ( € (  —Ÿ}~‹üÅ`3Fßþ=ãÿt*’€ ( €(\ÇÄŸEþ´ú 4bXš6èà Ã;…-"nF ¸¯ç@ )ßÞ!;˜–+Ï,Oõï@²”)Óæ ‡ƒ÷IÏçÍ!Ó¿vê É"çÞ#–(âÚtxö¼e™°AêI?Ö€ÒËìòîùH€yÉÏ­[ € ( € kçt{FNñšh <‹Ÿùæ¿÷ßÿZ<‹Ÿùæ¿÷ßÿZ<‹Ÿùæ¿÷ßÿZ<‹Ÿùæ¿÷ßÿZ<‹Ÿùæ¿÷ßÿZ<‹Ÿùæ¿÷ßÿZGŠá±‰pOÏF€B²HÌÊ"^¿7ÓühЖ Ëåò§æªQ¸ ö¦ÿž_øõ‚¸}©¿ç—þ=O.joùåÿQȵ7üòÿÇ¨ä ‡Ú›þyãÔrÃíMÿ<¿ñê9ã%”ÊWäÚ½8ÆÀ6¨€ ( € ( € (  —Ÿ}~‹üÅ`3Fßþ=ãÿt*’€ ( €*OÍ34a`>óÓ>Þôô°ýšçû±ßgü(Ðì×?Ý‹þû?áF€f¹þì_÷Ùÿ 4û5Ï÷bÿ¾ÏøQ Ù®»ýöÂ>ÍsýØ¿ï³þhökŸîÅÿ}Ÿð£@³\ÿv/ûìÿ…}šçû±ßgü(Ðì×?Ý‹þû?áF€f¹þì_÷Ùÿ 4û5Ï÷bÿ¾ÏøQ Ù®»ýöÂ>ÍsýØ¿ï³þhökŸîÅÿ}Ÿð£@µŸÌBÂ08b¥~P@Gqÿòº•fÃþ¶_óÙh«ÿ®—ýïè+Xl!*€( € ( € ( € ( € ( €.^}õú/ó€Íø÷ýÑü¨J( € ( € ( € ( € ( € ( € ( €#¸ÿy?Ý?Ê€3aÿ[/ùì´Uÿ×Kþ÷ô¬6•@P@P@P@P@P@/>úýùŠÀf¿ü{ÇþèþT%P@P@P@P@P@P@P@ÜǼŸîŸå@°ÿ­—üöZªÿë¥ÿ{ú ÖJ  ( € ( € ( € ( € (  —Ÿ}~‹üÅ`3Fßþ=ãÿt*’€ ( € ( € ( € ( € ( € ( € ( î?ãÞO÷Oò  ØÖËþ{-UõÒÿ½ýk „%PP@P@P@P@PËϾ¿Eþb°£oÿñÿº?•I@P@P@P@P@P@P@Pwñï'û§ùPl?ëeÿ=–€*¿úéÞþ‚µ†Â¨€ ( € ( € ( € ( € (åçß_¢ÿ1X Ñ·ÿxÿÝÊ€$ € ( € ( € ( € ( € ( € ( € (;ø÷“ýÓü¨6õ²ÿžË@_ýt¿ïAZÃa T@P@P@P@P@róï¯Ñ˜¬hÛÿǼîå@P@P@P@P@P@P@P@Çü{ÉþéþT›úÙÏe  ¯þº_÷¿ ­a°„ª € ( € ( € ( € ( € ¹y÷×è¿ÌV4mÿãÞ?÷Gò  ( € ( € ( € ( € ( € ( € ( € Žãþ=äÿtÿ*͇ýl¿ç²ÐWÿ]/ûßÐV°ØBUP@P@P@P@P@\¼ûëô_æ+š6ÿñïû£ùP”P@P@P@P@P@P@P@Gqÿòº•fÃþ¶_óÙh«ÿ®—ýïè+Xl!*€( € ( € ( € ( € ( €.^}õú/ó€Íø÷ýÑü¨J( € ( € ( € ( € ( € ( € ( €#¸ÿy?Ý?Ê€3aÿ[/ùì´Uÿ×Kþ÷ô¬6•@P@P@P@P@P@/>úýùŠÀf¿ü{ÇþèþT%P@P@P@P@P@P@P@ÜǼŸîŸå@°ÿ­—üöZªÿë¥ÿ{ú ÖJ  ( € ( € ( € ( € (  —Ÿ}~‹üÅ`3Fßþ=ãÿt*’€ ( € ( € ( € ( € ( € ( € ( î?ãÞO÷Oò  ØÖËþ{-UõÒÿ½ýk „%PP@P@P@P@PËϾ¿Eþb°£oÿñÿº?•I@P@P@P@P@P@P@Pwñï'û§ùPl?ëeÿ=–€*¿úéÞþ‚µ†Â¨€ ( € ( € ( € ( € (åçß_¢ÿ1X Ñ·ÿxÿÝÊ€$ € ( € ( € ( € ( € ( € ( € (;ø÷“ýÓü¨6õ²ÿžË@_ýt¿ïAZÃa T@P@P@P@P@róï¯Ñ˜¬hÛÿǼîå@P@P@P@P@P@P@P@Çü{ÉþéþT›úÙÏe  ¯þº_÷¿ ­a°„ª € ( € ( € ( € ( € ¹y÷×è¿ÌV4mÿãÞ?÷Gò  ( € ( € ( € ( € ( € ( € ( € Žãþ=äÿtÿ*͇ýl¿ç²ÐWÿ]/ûßÐV°ØBUP@P@P@P@P@\¼ûëô_æ+š6ÿñïû£ùP”P@P@P@P@P@P@P@Gqÿòº•fÃþ¶_óÙh«ÿ®—ýïè+Xl!*€( € ( € ( € ( € ( €.^}õú/ó€Íø÷ýÑü¨J( € ( € ( € ( € ( € ( € ( €#¸ÿy?Ý?Ê€3aÿ[/ùì´Uÿ×Kþ÷ô¬6•@P@P@P@P@P@/>úýùŠÀf¿ü{ÇþèþT%P@P@P@P@P@P@P@ÜǼŸîŸå@°ÿ­—üöZªÿë¥ÿ{ú ÖJ  ( € ( € ( € ( € (  —xó=>_æ+‚\˱B‹€¸æ:_´ÏÿOùü(ûLÿôñÿÿ€´ÏÿOùü(ûLÿôñÿÿ€´ÏÿOùü(ûLÿôñÿÿ€´ÏÿOùü(ûLÿôñÿÿ€´ÏÿOùü(ûLÿôñÿÿ€´ÏÿOùü(ûLÿôñÿÿ€´ÏÿOùü(ûLÿôñÿÿ€´ÏÿOùü(ûLÿôñÿÿ€´ÏÿOùü(ûLÿôñÿÿ€´ÏÿOùü(ûLÿôñÿÿ€´ÏÿOùü(ûLÿôñÿÿ€´ÏÿOùü(ûLÿôñÿÿ€´ÏÿOùü(ûLÿôñÿÿ€´ÏÿOùü(ûLÿôñÿÿ€÷”`ßhÛƒžcéùP<é±Óÿ¬´Uÿ×Kþ÷ô¬6•@P@P@P@P@P@/>úýùŠÀd ¹hÕKc`'U-€O=ƒ°·8ñoð¢ÀäJâf$üœsƒE€rÈ|¶fmëJڀř¶móߥ;ñ#à æ•€bÎì¹ÙÔeiØ2°íüÑ`Y$¡ #ò¤W?0|½HéE€¦eggž=†øÓ° 'Î>^£?†(° ¥Ù•—i4L­±XàÁ=©ØNÇpÙó E€wšß/©Í«;üœsŠ,ÖCå`2;R¶ 1gvm@nù§d±¶ôVÆ23Iè/ú§ÿtÒ!ÿ[/ùì´Uÿ×Kþ÷ô¬6•@P@P@P@P@P@.Á2 Nßæ+@꫘[ Ëþ4ÎÑÏ>ëþ>ôî°ä³œŽŸ2ÿ+€o›0±ÜrrËþ4\FçÜð1÷—üiÝ€ÀÀ·8ÁWüi\·[ryÏÞ_ñ¢à Œä…Ž8Æåÿw° ´à àõù—üi\+€àtù—üh¸Pž¶äþ+þ4î°äŸ³žzüËþ4®ª²® ¦åÿ.|¾1ös÷—üiÝ€»Aû9Èéó/øÒ¸—Œ³žzüËþ4î³ û9ã§Ì¿ãEÀRL HÿiÆ•ÀYFýåÿ.l8ìçÝÆÀPc7yz~t®ªWîÀGü Æ‹€én}z¯øÓ¸—Ág<û¯øÑp ‡ôsòôù—üi\aÉ?g<õ寋€¡YWh€ôÜ¿ãEÀEB§+nAú¯øÑp+ßKþ4\`æ6Q ƒüKþ4± M0ôÿ  ¯þº_÷¿ ­a°„ª € ( € ( € ( € ( € »sþº?øó€ÆFdp }Ðyb{šWv 5Ý#@öϵV–âæÝ“ÏŠ0€ù\“ÉÇ¥YšhàÊáA8îhxœ¨W·Oz’€ FeR 7s@ @B(œùóæaÎ8b; ˆ–Ȥf<äÐëH;˜ñ@ ’Uˆò²ç—4å;€"G ÿ¶hÏÍïž¿|Ðóý÷ÿ¾Í"¶á•‘Î>ù ¶)‘òz çš^¾ÿ÷Ù VÜ2²9>ù çûïÿ}š9þûÿßf€¾ÿ÷Ù Ÿï¿ýöh7|Û|ÇÝŒãy çûïÿ}šLŸï¿ýöh}4’&É'æn§?Ý ?úéÞþ‚µ†Â¨€ ( € ( € ( € ( € (íÇúèÿàÌV Ù{”üÍE,©ÚI#*/”Ë–8ܼ~†€*LRêhÒÙ•ðÁ˜«dy¤’[ +/"iž ¥€Y § ¬?¨¦2¥ÝµÃ\ì6}Žh¿g”[¶V²ãÓ¸ÏN½èaŸhî;v‰nÉ c?—äh¶2&0ÈBJ'ž‡ž¿JlV—8Ì»‰_0äNFHýhËk*DSd›JüÁ[';¯¶(ýª²Û(eÚqМâ€aò³È9ŸçŠ‚cûןÐP#v†a*õú$¯æ1€7 c×Þ…p)ÜFï$EnÖ$œg`CöfA.ÝÇî…ç¨ïýh'ŽRåP:® žB垀±H¡w¤Ž¸;F@*h[xŒpJIv#ž¼ñÍWû;ü¤Dù€É秦hIb•"uY‹Å´|Ýœÿ:hÖ ¢'áØà¼ñßÒ€&¸IÞ03ò‚2®?½¨«PaÈæÉäŒð? … ¸2ÌA÷? $†H”m rÍ×çLдJ«*zwÆzPËdd€+g<ýî´è£òûŽG§ùâ€,i½&ÿ}¿öZkÿ®—ýïè+Xl!*€( € ( € ( € ( € ( €.Ü®þüÅ`2½ÏúÃôÌÐgÔ™$+÷ŠðH‰ojj-캛»Áœ а¡Å &ûDÞ±ÿß'üi}¢oXÿï“þ4}¢oXÿï“þ4}¢oúgÿ|Ÿñ ízÇÿ|Ÿñ ízÇÿ|Ÿñ G4Ï LÆ2 ÎÓþ46&ÿž‘ÿßühÄßóÒ?ûàÿ „ÛØÇ9ãÙ_þz/ýñÿ× ì¯ÿ=WþøÿëÐöWÿž«ÿ|õèû+ÿÏUÿ¾?úô}‘ÿçªÿßýz>ÊÿóÕïþ½eùê¿÷Çÿ^€²¿üõ_ûãÿ¯@Ù_þz¯ýñÿ× ì¯ÿ=WþøÿëÐöWÿž«ÿ|õèû+ÿÏUÿ¾?úô}•ÿçªÿßýz>ÈÿóÕïþ½eùê¿÷Çÿ^€²¿üõ_ûãÿ¯@Ù_þz¯ýñÿ× ÙGå4Ê[?19Æ;-Bÿë¥ÿ{ú ÖJ  ( € ( € ( € ( € (  ·ë£ÿ€1X ¯sþ°ÿº?™  ‘ÉqœcùPÈ %öºhÐI4Ò+‘¹Gñ2:uãùQvkÅwš5@ÎÒÄÊúPäÇÁ8]™òyü¨’Í7•2¼†Î1· £úЬó*¬ª¡ñÓ'–aý(Rîg‘F ‚zз߿åÝ·ý(Å¿ü|/ÐÐÊ( € ( € ( € ( € ( €#‡ýlßSü–€+?úéÞþ‚µ†Â¨€ ( € ( € ( € ( € (íÏúèÿàÌV"+Ž Æ€)¼,Ä`†§ã@ ±‚…H6Œ“÷ÉüM'—'üò?˜ÿO)ÿçê¿ã@‰ÈÁ‡ªÿ/”ÿóÈþkþ4žSä'‘î¿ã@ åÉÿ<Ïýô?Æ€$L—hòH  y¢€ Q@G¨ #ÔP‘ê(ÈõdzŠ2=E¢€ Q@G¨ #ÔP‘ê(ÈõdzŠ2=E¢€ Q@G¨ #ÔPpÿ­›ê’Ðgÿ_/ûßÐV°ØBUP@P@P@P@P@^¹dVùÓx(6ç'ŽÕ€Êû ÿŸeÿ¿K@è?çÙïÒÐÒÕïÒкùö_ûô´nƒþ}“þý-¡=-Wþý- ÿŸeÿ¿K@è?çÙïÒЃ 8ªO´K@ ¶?ùó÷äPwAÿ>Ëÿ~–€ Ðϲÿߥ 4à[/ýúZvØÿçÌß‘@ -86ªýrZ7Aÿ>Ëÿ~–€ Ðϲÿߥ mþ|Çýù‡ÊmýúZ?uÿ>ƒþý-ºÿŸAÿ~–€ÿϘÿ¿"€ ±ÿϘÿ¿"€ ±ÿϘÿ¿"€ ±ÿϘÿ¿"€ ±ÿϘÿ¿"€ ±ÿϘÿ¿"€ ±ÿϘÿ¿"€ ±ÿϘÿ¿"€ ±ÿϘÿ¿"€ RÌ1Pr»BóòÐWÿ]/ûßÐV°ØBUP@P@P@P@P@\¼ûëô_æ+ƒ7—aì(;UA'Š•È"¾†iD7¶pv¨à`ŸAÎ>´®>V¯r[ƒòt9íìi’S‘¶0u` Üœ cÜ$rÇ0 !ÂôªŒ“h 2rAþëöÿdÔ~wXäÆÑó>Ñ€;šˆ\ÀJ€ñå›héÉ  ýê œöö4´Èʬ1”eP9‥I“zW8oéBwMhÇ1å0ß^ßí -Bó-½³JÈX# '-@}¿þœî?ïÚÿW#É<ï6Ñä”á†@ Š–¬2Ëýóõ ÀÛ#Ò€#i¢ÏÐP‹±ÆT>”G÷:€ ( € ( áÿ[7Ôÿ%  Ïþº_÷¿ ­a°„ª € ( € ( € ( € ( € ¹y÷×è¿ÌVßå/ný£ºt ™›§ûUÃAt%&OÞ†î0>aŽŸ1jV-É2ýÇÜò4È(]M2Ddp£ÎCÏ ašŠxD’`n.ê0¬»G\à ~•R©(苌"ÕÛ-¹BW¦×ÿÐ Iº¬°Ç"$Ò (ê{gšÍû<&èiìî7 ÁñËdr?!þ{’|ÏQò{·ó6˜æd>íü€)Ý…½©˜°N8^ÿ)ãñ¤Í)ó]òŠÏÕ7y‰ˆùQdeÀ÷ÚE™Y= iH¶}ÝéŽIãpîy¦Hú­sÿ«ÿ]×ÿF šY"Üì·X~ÿrÚ«åb"9H95,e§ûçëHŽI¸â€(•É  6¹ËzPÑýÁ@ € ( € (8ÖÍõ?Éh³ÿ®—ýïè+Xl!*€( € ( € ( € ( € ( €.]òéÿþb°ß7 ¤àãüh¨Q ‹is– ¯'ó •‹¨qש‡Þ€+É‘¾hÃw •ëùÐy9rí ³¤°ÿVE)´¬;c–'hQµ¿ˆtZd–® rÈKDܹ+××­4²†<¸ •Èýh Ž™‘´ ä’=½;ÌOï¯ç@‚»"Ên(£#ƒŒzÐ4Ú&#¢°ÿñ B7ºdó©$°è÷ y‰ýõüè3±¢Øë½wÔzäw ÛüñÿLJøÐì<†Ž8öäGSøÐï"oozúÐ^b‡<ƒŸB(¬ac’9úŠrÉŒÔP‘Ô —ó óûëùÐæ'÷×ó ÌOï¯ç@˜Ÿß_΀1?¾¿b}:<Äþúþty‰ýõüè°ÿ­›üöZ¬ÿë¥ÿ{ú ÖJ  ( € ( € ( € ( € (  —_ëþüÅ`2MÄì(ÜÞ¦€ ÍêhÜÞ¦€ ÍêhÜÞ¦€ ÍêhÜÞ¦€ ÍêhÜÞ¦€ ÍêhÜÞ¦€ ÍêhÜÞ¦€ ÍêhÜÞ¦€ ÍêhÜÞ¦€ ÍêhÜÞ¦€ ÍêhÜÞ¦€ ÍêhÜÞ¦€ ÍêhÜÞ¦€ ÍêhÜÞ¦€ ÍêhÜÞ¦€!·ûÏôþ‹@Ÿýt¿ïAZÃa T@P@P@P@P@rëýbÀ˜¬<öú J( € ( € LóŽIôçüÿ*P}ˆïÍ ~È9ü¼ã=¨K`AÀï@\ ƒèhߟº ätàõçð绺ðx 4P@P@P@ÛýçúE  Ïþº_÷¿ ­a°„ª € ( € ( € ( € ( € ¹uþ±?à?ÌV{}%P@P@Î9õ ª½p(ìy$¶2M(ÀÚEÅ4®TŒœààvÿõИ Ćbs÷ù÷ ò0 u?J@<½9äŸë@I;Ž{f€=€{PP@P@P@ÛýçúE  Ïþº_÷¿ ­a°„ª € ( € ( € ( € ( € ¹uþ±?à?ÌV{}%P@P@P@P@P@P@P@Go÷Ÿéý€+?úéÞþ‚µ†Â¨€ ( € ( € ( € ( € (å×úÄÿ€ÿ1X yíô”P@P@P@P@P@P@P@¿Þ§ôZ¬ÿë¥ÿ{ú ÖJ  ( € ( € ( € ( € (  —_ëþüÅ`1ç·ÐPP@P@P@P@P@P@P@PvÿyþŸÑh³ÿ®—ýïè+Xl!*€( € ( € ( € ( € ( €.]¬Oøó€ÇžßA@ @P@P@P@P@P@P@P@ÛýçúE  Ïþº_÷¿ ­a°„ª € ( € ( € ( € ( € ¹uþ±?à?ÌV{}%P@P@P@P@P@P@P@Go÷Ÿéý€+?úéÞþ‚µ†Â¨€ ( € ( € ( € ( € (å×úÄÿ€ÿ1X yíô”P@P@P@P@P@P@P@¿Þ§ôZ¬ÿë¥ÿ{ú ÖJ  ( € ( € ( € ( € (  —_ëþüÅ`1ç·ÐPP@P@P@P@P@P@P@PvÿyþŸÑh³ÿ®—ýïè+Xl!*€( € ( € ( € ( € ( €.]¬Oøó€ÇžßA@ @P@P@P@P@P@P@P@ÛýçúE  Ïþº_÷¿ ­a°„ª € ( € ( € ( € ( € ½rŒî»G@§ùÀd~\Þƒõÿ<¹½¿_ñ Ë›Ûõÿ<¹½¿_ñ Ë›Ûõÿ<¹½¿_ñ Ë›Ûõÿ<¹½¿_ñ Ë›Ûõÿ<¹½¿_ñ Ë›Ûõÿ<¹½¿_ñ Ë›Ûõÿ<¹½¿_ñ Ë›Ûõÿ<¹½¿_ñ Ë›Ûõÿ<¹½¿_ñ Ë›Ûõÿ<¹½¿_ñ Ë›Ûõÿ<¹½¿_ñ Ë›Ûõÿ<¹½¿_ñ Ë›Ûõÿ<¹½¿_ñ Ë›Ûõÿ<¹½¿_ñ Ë›Ûõÿ<¹½¿_ñ C¡bèÿâG¯µWxeó–2An0G «Œ’BÉ›þy7æ?Æ«y3Ï&üÇøÑ΀<™¿ç“~cühç@LßóÉ¿1þ4s &oùäߘÿ9Г7üòoÌèÉ›þy7æ?ÆŽtäÍÿ<›óãG:òfÿžMùñ£y3Ï&üÇøÑ΀<™¿ç“~cühç@LßóÉ¿1þ4s &oùäߘÿ9Г7üòoÌèÉ›þy7æ?ÆŽtäÍÿ<›óãG:òfÿžMùñ£y3Ï&üÇøÑ΀<™¿ç“~cühç@LßóÅ¿5ÿ9Ðí¨Ý’I«!‰ý¡wÿ=Þ€í ¿ùîôh]ÿÏw ûBïþ{½ÚóÝèþлÿžï@ö…ßü÷z?´.ÿç»Ðý¡wÿ=Þ€í ¿ùîôh]ÿÏw ûBïþ{½ÚóÝèþлÿžï@ö…ßü÷z?´.ÿç»Ðý¡wÿ=Þ€í ¿ùîôh]ÿÏw ûBïþ{½ÚóÝèþлÿžï@ö…ßü÷z?´.ÿç»Ðý¡wÿ=Þ€í ¿ùîôh]ÿÏw ûBïþ{½Úxÿ^ôh]ÿÏw ûBïþ{½ÚóÝèþлÿžï@ö…ßü÷z?´.ÿç»Ðý¡wÿ=Þ€í ¿ùîôh]ÿÏw ûBïþ{½ÚóÝèþлÿžï@ö…ßü÷z?´.ÿç»Ðý¡wÿ=Þ€í ¿ùîôh]ÿÏw ûBïþ{½ÚóÝèþлÿžï@ö…ßü÷z?´.ÿç»Ðý¡wÿ=Þ€?ÿÙlibstruts1.2-java-1.2.9/doc/images/how-to/netbeans/building2.jpg0000644000175000017500000002407010404045214025070 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„   (1#%(;4>=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀ¤!ÿÚ ?µ¬k¶š±¶âXð¿xõGû{X–ò;X!+8uv=³]Q£ffäï`}[ĨH0?é—¶Oò?•:[Ä2Ü›|D’€k Œãùÿ*=1sHtš§ˆcØ’ÌÝ Ï­FºÏˆZ0ëe#9‚1G³¦Ò ­wZµhÕÚ"Ïü,yÚ2G?•*ëzÛÂyndÌPtÎ9üiû*v¸sÈQ¬ë¦AÅÞÃ!v ãéSKZi^5– ¦ÁÊã%†@½0æ‡R×÷()Ü8">)«®lv"5Ø»ˆeã8éøÑìé‡4…þÔ׿çàãî¿ä‚Oê‘>É6+ P©S{<„$Ôq÷ãÿ¾/ü$z‡÷ãÿ¾?a{F;þ-CûñÿߣÄZ‡÷ãÿ¾(öv/ü$7ÿßOûâ—û~ÿûéÿ| =Œ‹ý¿}ýäÿ¾(ׯ¿¾Ÿ÷È£ØÀ9Ø¿Û×ßÞOûæ”k·¹å“þù½ŒCŽþܽþòß4 n÷ûéÿ|Š=ŒCŽÕç÷“þù¥þÚ¼þòß4{‡´bbïûÉÿ|Òÿl]ÿyïš=ŒCŠ5{¿ï/ýóNþÖºþòÿß"cçaý«uê¿÷Í;ûRëûËÿ|ÑìbÑ‹ý©sýåÿ¾iF¥sýåÿ¾hö1hÅþÒ¸þòÿß4á¨Ücïûæ—²ˆ{F/ö…Ç÷‡åGö…Ç÷‡ýóG²ˆ{F8_Oê?*_·Oê?*=”CŠ/f=ÇåKöɽGåG²ˆ{F(¼›ûÃò¥ûT¿ÞýÊ"öŒ_µKê?*wÚdõ•'J!í¿h“Ô~T¢y?½úQì¢?hǤ®ÌoÒª¾ª™ž4ó °©,¥@Ó'Þ³”câÛ91mYÉ?À¿Ê²«6YÕkšþ¡©5Ŭ°$l¡Hrrxç¥P“𼓙ZæØ¥@¸¯Q]pª”R±%¥Ðµàѱ¾€´uŽIŽ)‡ÃºÙ¹ûK_DeÙåî$çn1Ž”{Hv'•’\mûï-ÛÞÜ3ØO@+èšãÄ#kÈ6‚Àî1ƒÓØRç‡`ådWÕnd%Ì‚ír¼g=‡©5$Z¯@—6ß"ì.xÎqÓך~Ò6µƒ•’&­$¢U»·ó0b9 Œñì)«¡ë îÂêßt›I8îqKžƒ•Ž:6²Î¬×p©°gÓŽ:{ ?°õSÖæßîíÎ;g#·j9ãØ9d=´mZGŒËsq ^@ÈÉì=ÍW›Ã7óÎóI<,îK“×ò¡TŠè¬¼3v€fh3þŸðŽÜÿÏh¿_ð§í×a{6(ðõÏüö‹õÿ _øG®?ç¬_¯øRöñfÃþûùëëþïìùëëþ{xÙ±°n?笯øR àËX¿_ð£ÛÄ=›¡Ïÿ=#ýœ4IÇü´õ£ÛD^͇ö,ÿóÒ?Ìÿ…(ѧÿž‘þ´{h‡³c†7üôõ£ûoù蟭/lƒÙ±ÃI˜ËDýi²¥ÿž‰úÑí—`öl•(þ4ýißÙ’ÿ}?Z=²fÃû2_ï§ëNþΗûéúÑí{6ÙÒ}?ZpÓäÄ´{d͇Ø$þòÓ…“ÿyi{dÍ‹ö'þòÑö7þòÑí{68Z¿÷–²¿÷–lƒÙ±E³âï³·¨£Û öl>ÎÃø…;ÉoQGµAìØy'ÔS¼³ê(ö¨=›Ë>¢”&;Š=ªfÀ†ä 7bFj›iìw|ñÀ‚Â<ž¼æ³”£&\SG;â?ù ?û«ü«.³,õÞ ûm¨”ÄgŒ8m»KwôúÕ­€›ÌN0ëÏšPÁ†T‚=©ˆZ(¢€ (¢€ (Ž‹UŒˆ®° z ‡¸Ãzç†qž´¥”0]Ã' ¥`³FßuÁ§dzŠv¬2õ z@-Q@Q@Q@Q@Q@Q@Q@ÇøþBÏþêÿ*Ë PëçK†KçœÇuáðB’;ûýzÕ-€«…rEµ.¼¸Ç#jî$#œÿ³Z]ºé4QCtêÍ»æ Çõö¦ßµ7üúÏùñ£íMÿ>³þCüh}©¿çÖÈjoùõŸòã@Ú›þ}gü‡øÑö¦ÿŸYÿ!þ4}©¿çÖÈjoùõŸòã@Ú›þ}gü‡øÓ£œ»…0Jžì?¨\B²8$?LR½˜È>Ç1¶_Ò¤ŽŽ@á$È$ŒÞ©ÈV#ûd%8úzæœmP¹m’d¶zóÞŽ`°ÓgÛ(öÿãR×3ɱþnãŠNW0ÿÏ7ý(óüóÒ¦Ã0ÿÏ7ý(óüóÒ‹y‡þy¿éG˜ç›þ”XÌ?óÍÿJ<Ãÿ<ßô¢ÀaÿžoúQæùæÿ¥óüóÒ0ÿÏ7ý(°˜ç›þ”y‡þy¿éE€<Ãÿ<ßô£Ì?óÍÿJ,æùæÿ¥aÿžoúQ`0ÿÏ7ý(óüóÒ‹y‡þy¿éG˜ç›þ”XÌ?óÍÿJ<Ãÿ<ßô¢ÀaÿžoúQæùæÿ¥óüóÒ0ÿÏ7ý(°˜ç›þ”å9ÁZ,!â?ù ?û«ü«. ;Ò+£3*°%NÐÕ­€qàdÔKq !u‘v®rsÒ˜‡´ˆŠYUFI$ôÅF÷PFåU Hô.åþðüéDO¾ê¼Éü(w/÷‡>ôŠèÙÚÀí88= ( ô#Ö–€ (Ž‹PT=ÆR¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8ÿÿÈYÿÝ_åYtê½F‘*K#)åÈ,? U­€”ŒŒVcéLù˜1ÐgÐv @4XDl‚BUÁp ×ëßÞ§¸Ó¡$ pÒ*©`sý(°G£Ã\30 [žsAÒQ‚r]@ÉÆrAÏz,#ÐíÓ3:Nþ´û1&2íp¾ab~¤Ïš,2K]6;k“:»3AÏN}aWiˆ( n:-AP÷QHŠ*""©–uBÃ#8‘\E4…#Ÿs“Rí?ß?¦Õ€6ŸïŸÈQ´ÿ|þBÓýóù 6ŸïŸÈP´ÿ|þB§ûçòm?ß?£iþùü…O÷Ïä(Ú¾!@Óýóù 6ŸïŸÈP´ÿ|þB§ûçò †q9Ïj ;ˆ ’HÏõ T2©ž=ÍÐmëúÓÁýÞîø n.cµ‰^âe@Øþ­>VdŠHäƒr¸ÈÆ}häØ($‘ša•U‚™ã¸o_Ö€$S•ëÛß \¢6×p§nïºqÓ=ùP€a2! *AªÃSÉ#hz‚3ƒŽ=hÅµÉ™È x«4ÇøþBÏþêÿ*Ë PꌓE¨Ïsû ²3£=½rzÕ­€¼Ã*G¨Å`áÞ±¤w¾\Jßq2>^§7C××­4mFcQ$*¢… @ÀÇtèy´ë iôﲋ’žòïÜÙÃÀëïúQaŽm'Qfsý áY‰;p0؆G×ø´ÍB;˜\ß³F’…˜ä`gëÈ=}h©¥ÝÅt;Â"óšB»BÙéߎ?Z§7‡.Zíî"½òÉ™æQƒò³3ùb‹ –M+UhÙSQ+»8ùÛåûØ÷ûÃò«zv=­ôÓÍpe.Õ˜í‰~¿¥4è¦7 ¨{ŒÑ˱R*^GZŒÃ) ùzŸÊšhyoæ³n8ÈÀϵMI€Upϡ֑Z%)^Ï©´EÙ€ÃIq½-Ì»eÝò‚I#µC…ÄnÏ眞~ûŸ—¯ä:$Óz[Ù]DáŒã%Ù˜îb@íO[K¡#±¹fÜÀŽN1éŽÞ”€„i÷›‰kÆ<’£qàãüi«§ÞŒ×L¬Ý†9üùü¨ZŠ( Š( ©êztz•¿•$’FAʼm‚(h!KdŠó±““ùÒ\+0ùP¾ ’£€Üõâ€3àKÉf“íQ )‰(Ú ‚sÏ5¨¿êM»—ªZ¼“oH¤˜ÆäqÏNvÕ˼˜#M¬ƒs¬zp?*:%–Tߤ¯€À‘ϵC4b@¡,J0u;°ƒ0'¡§’wm>àúŸæk>âãrÁæ,œãî·^~ƒ§z‘‹ìœ2;º¶rÜ{“YžY,Ù‡Ìäðý'¦sõüi©¦Œ66…ÂýÑÚ´)ÇøþBÏþêÿ*Ë PéjÖÀSQ@)ë@ EPECqÑj Ô=Æ&G­´€2=hÈõ #Ö“j{ÿßGühÚžÿ÷Ùÿ6§¿ýöÆ€ ©ïÿ}Ÿñ£j{ÿßgühÚžÿ÷Ùÿ6§¿ýöÆ€ ©ïÿ}Ÿñ£j{ÿßgühÚžÿ÷Ùÿ6§¿ýöÆ€ ©ïÿ}Ÿñ£j{ÿßgühÚžÿ÷Ùÿ6§¿ýöÆ€ ©ïÿ}Ÿñ£j{ÿßgühÈëîÄÒ§¨Sõ›cþê~B—å€ju?!@B¨>  Rõ ~´›cþê~B€`…&Ôô…†S>Ï÷ç@HãŒåëRPâ?ù ?û«ü«.€=A{Ó°}*ÖÂ#zQåžüPì«Q„ó@Pt£w<(  è(Ú=(<µ¦˜Ç­'–}i<¶ .Ar*šÉ¶è¢Å3 lÈ»°ÿëҵ݆:ßÏ:”k,v†7«!séíëDºº¢ôäfvUPTsÁíØñD•‚ú™’{¢P¯R1Ç zÔQjÎÖñŧGæLOïÀ>• m}–ßþxEÿ| >Ëoÿ<"ÿ¾e·ÿžß²ÛÿÏ¿ï@Ùmÿç„_÷À£ì¶ÿóÂ/ûàPö[ùáýð(û-¿üð‹þø}–ßþxEÿ| >Ëoÿ<"ÿ¾e·ÿžß²ÛÿÏ¿ï@Ùmÿç„_÷À£ì¶ÿóÂ/ûàPö[ùáýð(û-¿üð‹þø}–ßþxEÿ| >Ëoÿ<"ÿ¾e·ÿžß²ÛÿÏ¿ï@Ùmÿç„_÷À£ì¶ÿóÂ/ûàPö[ùáýð(û-¿üð‹þø}–ßþxEÿ| >Ëoÿ<"ÿ¾e·ÿžß²ÛÿÏ¿ï@Ùmÿç„_÷À£ì¶ÿóÂ/ûàPö[ùáýð+.E #…P 3`ÔÐâ?ù ?û«ü«.€=V!ò~4­¿±ª[Ó»¹¤Áõ¦ Ú(À¢àS€$RJ*€( Š«{÷SëPZÚCu4†PÙU\r§’sÐû ‡¸Ë°éÖð̲ ºç¥fÇàMNðC"íx‘—Ш#Ö†ï¸ ´11Á0J « JT¬H ýÜ(ãéHÑ@Q@Q@Q@Q@Q@Q@Q@cËþµÿßoæhŒñü…ŸýÕþU—@«ÜüjJµ°@=i¥jFCQz0=jTû´êLsÖ€Š(¦[ߺŸZ4ÏõÓº¿û5CÜf…€( Š( Š( Š( Š( Š( Š( Š( Š+_õ¯þû3@gˆÿä,ÿî¯ò¬ºõX~çãRU­€(¦ Å7Ë\ÒBÚ–€ )€Q@V÷î§Ö3ýtßî¯þÍP÷¡E (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ Ç—ýkÿ¾ßÌÐâ?ù ?û«ü«.€=V¹øÔ•k` )ˆ( Š( Š) @V½û©õ£Lÿ]7û«ÿ³T½ÆhQHŠ( Š( Š( Š( Š( Š( Š( Š( ±åÿZÿï·ó4ÆxþBÏþêÿ*Ë U‡î~4òqT¶h¦ ¢˜QHÜ)7W2=i3ÏÞýÔúѦ®›ýÕÿÙ¨{ŒÐ¢Q@Q@Q@Q@Q@Q@Q@Q@cËþµÿßoæhŒñü…ŸýÕþU—@«ÜüiíÒ©lAî)ô!@ @=h`&hɤJ£æ ïÝO­gúé¿Ý_ýš“Üf…€( Š( Š( Š( Š( Š( Š( Š( Š+_õ¯þû3@gˆÿä,ÿî¯ò¬ºõX~çãO= RØêEè)¡ E0 EéÒ QPÀ€Jzu¦¿u>´iŸë¦ÿuöj—¸Í )Q@Q@Q@Q@Q@Q@Q@Q@V<¿ëdÿ}¿™ 3Äò÷WùV]z¬?sñ©*ÖÀDz‘OO»@‡QLŠ) ƒHÊ‘IHAR'JcE{ߺŸZ4ÏõÓº¿û5KÜf…€( Š( Š( Š( Š( Š( Š( Š( Š+_õ¯þû3@gˆÿä,ÿî¯ò¬ºõX~éúÔ•k`W'­(P!h¦L,{R¡½iÔ)…=(§Ž*EáEŠ×¿u>´iŸë¦ÿuöj—¸Í )Q@Q@Q@Q@Q@Q@Q@Q@V<¿ë_ýöþf€8ÏÿÈYÿÝ_åYtêžµ-RØŠb )€T$œÒsN Š@8ÒÓ­-U½û©õ£Lÿ]7û«ÿ³T½ÆhQHŠ( Š( Š( Š( Š( Š( Š( Š( ±åÿZÿï·ó4ÆxþBÏþêÿ*Ë R¿Ö¦"©ZL|ÀÓh¦Q é@ éO?Z@-@U½û©õ£Lÿ]7û«ÿ³T=ÆhQHŠ( Š( Š( Š( Š( Š( Š( Š( ±åÿZÿï·ó4ÆxþBÏþêÿ*Ë QN3õ©TàÕ!¢˜À*&êi”˜ C”Ðb¤ -À«{÷SëMÓi·²®Uzœz¡î2ÿŸüõOûèQçÅÿ=Sþú€<ø¿çªßB>/ùêŸ÷Р΋þz§ýô(ó¢ÿž©ÿ} <ø¿çªßB:/ùêŸ÷РÏ‹þz§ýô(ó¢ÿž©ÿ} <è¿çªßB>/ùêŸ÷Р΋þz§ýô(óâÿž©ÿ} <ø¿çªßB>/ùêŸ÷РÏ‹þz§ýô(óâÿž©ÿ} <è¿çªßB>/ùêŸ÷РÏ‹þz§ýô(ó¢ÿž©ÿ} <ø¿çªßB>/ùêŸ÷РÏ‹þz§ýô(óâÿž©ÿ} <è¿çªßB>/ùêŸ÷РÏ‹þz§ýô(ó¢ÿž©ÿ} <è¿çªßB:/ùêŸ÷РÏ‹þz§ýô(óâÿž©ÿ} <ø¿çªßB²d ÈäíÈúšã|Gÿ!gÿu•eШ§qNKa)ȧS¢˜DÃæ4€@ 8¤T­:Š`…±H —g!~µ[5 a“ëFO­>´dúГëAm£%±õ4ß5¾?:<ÕþøüèóWûãó£Í_ï΀5¾?:<ÕþøüèóWûãó£Í_ï΀1¾?:<ÕþøüèóWûãó£Í_ï΀5¾?:<Åþøüèóûãó£Í_ï΀5¾?:<ÕþøüèóWûãó£Ì_ï΀5¾?:<ÕþøüèóWûãó£Í_ï΀5¾?:<Åþøüèóûãó£Ì_ï΀8nŒÐÒÐâ?ù ?û«ü«.€=EsƒZwÖ©l!ÀàÔ”ÐÀ)»9ɤºQ@!8 –Í0ŸJ@W¹èµ&2³\”Ádà’=©æáB«lŸ§j| 0^!çc`u©¢“ÌMÀõ¡ÆÀ>šÒˆ]$(i'i8å=ê@’ßT3ù–‘ª)`ÝÆ3Å-ލ·3%¢®ðÍ„ùˆœ c=(ÑêhìàÙm åHÏÔŽßýqëP&¶ý…_¼w~œsÒ€-`Ipˆ,T«íÁ`g¯=ÏN=myQÿÏ5ü¨ò£ÿžkùQåGÿ<×ò Êþy¯åG•üó_Ê€*?ùæ¿•TóÍ*<¨ÿçšþTyQÿÏ5ü¨ò£ÿžkùQåGÿ<×ò Êþy¯åG•üó_Ê€*?ùæ¿•TóÍ*<¨ÿçšþTyQÿÏ5ü¨ò£ÿžkùQåGÿ<×ò Êþy¯åG•üó_Ê€*?ùæ¿•TóÍ*Ï¿P³ ··ÔÕjãüGÿ!gÿu•eШ¯õ¥Æ*–Â4õ=©‚E0 (¢ -Ž”Â}i i9úRS ÇE¨*^ã Ji@qÔcÐâ €; Pè(¥RUÕ”ËÈ#銓íÏY?Oð£íÏY?Oð íÏY?Oð¤3ÊAW öãü(Ê®è?—íÏY?Oð íÏY?Oð£íÏY?Oð íÏY?Oð£íÏY?Oð íÏY?Oð£íÏY?Oð íÏY?Oð£íÏY?Oð íÏY?Oð£íÏY?Oð íÏY?Oð£íÏY?Oð íÏY?Oð£íÏY?Oð íÏY?Oð£íÏY?Oð íÏY?Oð£íÏY?Oð íÏY?Oð£íÏY?Oð íÏY?Oð£íÏY?Oð ;³œ»3œÓhñü…ŸýÕþU—@¢§­.*–”i 9´QL$ ilý)1Œ-éI@„¢˜ÜtZ‚¡î0¢SXœ¨\rqÏПé@ûËù0ÿÞ_ÈЇþòþFŒ?÷—ò4aÿ¼¿‘£ýåüï/ähÃÿy#@ûËù0ÿÞ_ÈЇþòþFŒ?÷—ò4aÿ¼¿‘£ýåüï/ähÃÿy#@ûËù0ÿÞ_ÈЇþòþFŒ?÷—ò4aÿ¼¿‘£ýåüï/ähÃÿy#@ûËù0ÿÞ_ÈЇþòþFŒ?÷—ò4wH8ñN ?Äò÷WùV]zŠð /Z¥°˜´´Àrš’„M-é@ &›œý(@'ÒŠ`P7 ¨{Œ¬Öò”p$“OD”g/ü8÷§t!¦'Øå˜ò¸ëAIË|®@çöô¢è bVTÜŸ\ÒŸ¾ŸSüKAl®„èï2²‰<ÂF=E1ôë„XÌ…pY˜žäôíüèd‚íRPÒä˜ð§wFÇÒ¤ˆS¼ \IÝè>”5ºº@ªÿx~•%PEPEPEPEPECQÓMóÄËwqnPüÞSzõèâ¬Tg@äçÖŸ@ˆÿä,ÿî¯ò¬ºõè~´ï­RØBµ1 Öžˆ[4Ò})ŸZJ`S¢€!¸èµCÜaE (¤ dg›û¿øñÿ6'÷ñãþ4lOîÿãÇühØŸÝÿÇøÐ±?»ÿñ£bwÿ?ã@Äþïþ<Ɖýßüxÿû¿øñÿ6'÷ñãþ4lOîÿãÇühØŸÝÿÇøÐ±?»ÿñ£bwÿ?ã@Äþïþ<Ɖýßüxÿû¿øñÿ6'÷ñãþ4lOîÿãÇühØŸÝÿÇøÐ±?»ÿñ£bwÿ?ã@Äþïþ<Ɖýßüxÿû¿øñÿ6'÷ñãþ4lOîÿãÇühØŸÝÿÇøÐ…UÎ3îM-qþ#ÿ³ÿº¿Ê²èÓLé*Ûóì„ÿ!Iö˜‡i?ïÛ…Rz>Õ¤Ÿ÷í¿ÂµGé'ýûoð§tµGé'ýûoð¥q㤟÷í¿Ân£?óÓþý·øQö¨û ?ïÛ…; í1úIÿ~Ûü(ûL~’ß¶ÿ .†iÒOûößáGÚcô“þý·øQtö˜ý$ÿ¿mþ}¦?I?ïÛ…@G<èÀad?öͿ¡ó÷$ÿ¿mþ,ÌÜ“þý·øQæîIÿ~Ûü)yƒû’ß¶ÿ <ÁýÉ?ïÛ…`þäŸ÷í¿Â0rOûößá@˜?¹'ýûoð£ÌÜ“þý·øPæîIÿ~Ûü(ó÷$ÿ¿mþyƒû’ß¶ÿ <ÁýÉ?ïÛ…`þäŸ÷í¿Â0rOûößá@˜?¹'ýûoð£ÌÜ“þý·øPæîIÿ~Ûü(ó÷$ÿ¿mþyƒû’ß¶ÿ <ÁýÉ?ïÛ…`þäŸ÷í¿Â0rOûößá@˜?¹'ýûoð£ÌÜ“þý·øPæîIÿ~Ûü(ó÷$ÿ¿mþyƒû’ß¶ÿ <ÁýÉ?ïÛ…`þäŸ÷í¿Â0rOûößá@˜?¹'ýûoð£ÌÜ“þý·øPæîIÿ~Ûü(ó÷$ÿ¿mþyƒû’ß¶ÿ <ÁýÉ?ïÛ…r^#ÿ³ÿº¿Ê²èÑæÿXi”Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ˆÿä,ÿî¯ò¬ºôy¿ÖePEPEPEPEPEPM—ýSÿºhY1ò Ó[ÂŒï³ @8à“@ K«7MÁâÆ3Î*Hž”´aAÀà`òžƒÜPª ‚E`88£äã§4»WÐRèáŽI&g‘&ÌF¡¤œZÛ”—;Tc“ùÐ]=×rÈ„zù‡üjH–Ò}Â/›iÁ÷­%ÔÇlìŠCw·øÕ‚ªf|€p2>´Ù(€,€’p\“Qý¢ÓvÒñÎ0qœÐnmç|_†3SlOî/ä(c¦ßéK±}(–8 l'»Ò„ãp÷ GÄò÷WùV]z<ßë 2€ (¢€ (¢€ (¢€ (¢€ (¢€ (¦Ëþ©ÿÝ44©¸üï­Vš^'XÙQƒgÓü÷þû€>Óü÷þû}¦ùïýö)€}¦ùïýö(ûLóÞ?ûìPö˜?ç¼÷Ø£í0Ïxÿï±@Ú`ÿžñÿßb´Áÿ=ãÿ¾Åiƒþ{Çÿ}Š>Óü÷þû}¦ùïýö(ûLóÞ?ûìPö˜?ç¼÷Ø£í0Ïxÿï±@Ú`ÿžñÿßb´Áÿ=ãÿ¾Åiƒþ{Çÿ}Š>Óü÷þû}¦ùïýö(ûLóÞ?ûìPö˜?ç¼÷Ø£í0Ïxÿï±@Ú`ÿžñÿßb´Áÿ=ãÿ¾Å/ÚáÿŸˆÿï±GÚáÿŸˆÿï±@ÚáÿŸˆÿï±GÚáÿŸˆÿï±@ ö¨?ç¼÷Ø£í0Ïxÿï±@Ú`ÿžñÿßb´Áÿ=ãÿ¾Åiƒþ{Çÿ}Š>Óü÷þû ¨Iãÿ¾Å/ÚáÿŸˆÿï±@ß줡Žx£Úsò°çœš±ö¸çâ?ûìPö¸çâ?ûìR}ªùïýö(~×üüGÿ}Š>×üüGÿ}Š>×üüGÿ}Š>×üüGÿ}ŠOµAÿ=ãÿ¾Åiƒþ{Çÿ}Š>Óü÷þû}¦ùïýö(ûLóÞ?ûìQö˜?ç¼÷Ø Oįª»#G çµfPÿÙlibstruts1.2-java-1.2.9/doc/images/how-to/netbeans/building3.jpg0000644000175000017500000003271510404045250025076 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„   (1#%(;4>=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀ0¤!ÿÚ ?ŸUÕo Õæ‚…Ž%ÆQè;Õ85Mjñ¥[{؃#íº[§ø×R§TÚ3»¹”ý>ÁÍ"Â]ë¬À}ª,d €;ãÛÜ~t¢ï[²K¨—¨$ppN8Ô¹)ö Èm½öµq•n£¸_”rwŽœu©Öµå4†ê £8<ãÒŽJ}ƒšCöµ¾U7ƒÞÎÚ›Î×pfŒl<ð¡Âšè ÈtRëm"‡¸ERpHQëƒÚª\꺭¬¢9nv3ò€hP¦Ý’ Éÿoj?óÜß"”kº‡ü÷ÿÇEW±‡byä/öæ¡ÿ=ÿñÑNþÜÔ?ç°ÿ¾EƃžBjÿþ{㢔kWÿóÛÿ½”;<‡lßÏoütRÿl_ÏoütQì¡Ø9ä(Ö/¿ç·þ:)ßÚ÷¿ó×ÿ{v;í{ßùê?ï‘N­ïüõÿÇGøQì¡Ø\òûVóþzÿ㢔j—Ÿó×ÿ{(vv;ûNïþzÿ㢩ÝÿÏ_ütQì¡Ø9Ø¿ÚWó×ÿïí+¯ùéú =”;<‡ Bçë?AJ5 Ÿùéú ^Ê=ƒŽ÷ßýn¸ÿžŸ £ÙG°s±EõÁ?ë?ANûlÿßý(öQv/ÛgþÿéNsãïþ‚eçaö¹¿¿úS…ÌÇøÿJ=”C‹ö™½úR‹™Oñ~”{(‡;\KŸ½NÉýê=”CžBù¯ýê$ºD%<Ñæ„ÜpÉü+)Æ1è\[e959бòãØ8Ï™ógn~î?­K>¢a!ØÌÌ›·08ïùqëY騳–ñ &¢-ŸÒ³2}h{†©¤XÍ~n§’d‘ÎÐQˆíôöªøkJ|´RLyÉ"^kEZIX—+hzdlèóÎ Œ¶d4øü?§L›ãšvCÜIÖŸ¶¹Ñ¡é{‡ïåËŽµ ðöžäâI›={š=´ƒ‘ mLym,Á‡c%BÒ†q+cþðt£ÛH9$Z-ˆA,RÍ·¨a%Fš^˜ÑïYåÛ?Ö~T½´ƒ‘Å¡Ø2æ9%*2SKÓvÈô̘ÿ=¨öÒDi&ýú=´ƒ‘öeˆgÚ$ÛœãÍïM:V›Õ¦cYzQí¤ˆrhÚ{#³qžFÒtøßc3©Æyn1õ§í¤ˆ“§Ú$%½7ÓŸH±‰w9u¥¨öÒf†®Ÿ¦±8”äuùéɦéìY ïŠ^ÚAȇ¶•f‹¹™Ààd·­0XéÄ€%ëÓç{i"%þȵÿoþú¥þɶÿoþú£ÛH9e[·ùÒÿeÛÿ·ùÑí¤ˆ_ìËöÿ:?³mÿÛüèöÒD/ötí~tgAþ×çG¶r!³àÿkó£ìÿµùÑí¤ˆwØ¡ôoαCþ×çGµr û^ÿ/Ù"÷üé{Y"kõüé~Í¿çGµr û4~ÿ(cOÚÈ9¾B{þtPzÒö²DRûÒùkOÚÈ9¾ZѰQídˆ]¢¡k8]˰bÇŒï?ãRæÞãQKa¦ÂÜœ•b}Üÿ=­cbKo9ÿ¦þ4¹¼‡c–ñ…Õ6¨À¨•R3ÐnâóŸŒeOuÏo­Gmi®ï&2»ºÐ%±Y¦gpv°Áƒé×54­¼B(Ô„^€ó@ =÷LŠä6á…ÆçSAm¾|¨öîë@ {E’fwE!‡?/=1×>ôÅÓ`W/±·“Ùæ€',pù` ÍUM*¸•KœçŒ¨ü³@á…`b+c$òsUWL‹ƒ*ïeÆÖÓ½9tè’Tt»;gб$K&Ýé§púÐuÓ¡_•cÂpp:çëAÓmÊ•11Ïn”$6‹ ï*ùûv´MmçH —Æ9üó@ K#pêŒ#'ð©'ˆÍÜ üËŸë@¦Sº?˜Ä®G#8ïïJ4ë`¡|’BôÉÎ(y¢2ÄShê##ƒž•Qt«uÚ|²’¼gŒPî} ú9ô4sèhçÐÑÏ¡ sÐ9ô4sèhçÐÐÏ¡£ŸC@>†Ï@h7@9é͇ù4›‡¯ë@áëúѸzþ´n¿­‡¯ë@áëúѸzþ´n¿­‡¯ë@áëúѸzþ´Éø—þB§ýŬšôiNùÇ?Ò ™œXÙWq9,2:P€-å2Û¬„ Är皆+ß2HÔÇ´HH\°'¡=¾”%ÌÏЀsÖ¥­üÂ;@ÛÜÉ$ûJ½x§ÜÜ4$œdŠ˜0xÄJ{¬<ÐdœµÁ+ž}h¼šH„b"‚ý9  Ëb»NH#ÐƒŠŽ;†k–ˆ¨ÀÈ€êW†0ÉŽ½êH\É »`3ÅC Ã<å>V^¹©×34[B–îz ‘I1)ldã8§“óPgº+sålÈÏQK{pÖðnQ’H8¶—Iwôc¨=©¢ì+iëŒÐ²Ê"Ánic‘ezçÖ€OÝÕVK†Ž|1 ¡€Á`÷Í>öqmjò–ÛŒsŒÑo(”’’ù‰µH;q×?ýjvv¸õkU®îZP¸éži,’ì·ó@ì)-îuã†E+$Øe97kžu9U#?fÜÍ×Oøy"F‘¤éš‘—xô•zÊ€=åGƒò AùQÇ ü¨ãÐ~Tqè?*ä|Kÿ!cþâÖMzÌ鬭»$ç„cü…B÷0>7ÆÍŽ™‰Ž?J#¹†4ˆê£°ÿÂs9Àúˆ›ü(k˜_ï#zÄßáJ.¢ ´+éå7øP%Ä ˆËŸH›ü(kˆïÆÍX›ü(EÔXÀ1þ­ÿ”ÞFXœ??ôÍÿ€. "6ϯ”ßáJ×Pºídf†&?Ò€º…*#*ŽÂ&ùR ˜CnÛ½|¦ÿ ædb=âoð¥q(+€;Ûü([¨WMþu Œ21ñ7øPý®,‡þ¹¿øR›Èóœ?ýûð û\ÝûöÿáH÷0È…”õ7ÿ Hî ‰vÆŒ£9Àÿ—í0îÎÆÏ¯”ßá@ nâ#\úæÿáH·0ªíUp=£ð }²>8“úfÿáH×Q2•erPcoð k˜Y 21R1´ÄØþTï¶GŒað?é›ÿ…û\a@ÃñÿLßü)­qZ6$zÄßá@ n¢eÚUÈô17øR-Ì(0¨Ê=¢oð 7q‚®Gýsoð¥ûdxÆ×ÿ¿oþ}²?Gÿ¿oþ}®0 aøÿ¦oþÏ´ÅÜ9ãÄÇÿe¡.!;UÆé“ñ4¢ê0QõmÿÄÑö¤õ—þý·ÿ@Ú“Ö_ûößüM'ÚcÈ?¼Èè|¦ÿâh~Ôž²ÿß¶ÿâhûRzËÿ~Ûÿ‰ íIë/ýûoþ&µ'¬¿÷í¿øš>Ôž²ÿß¶ÿâhûRzËÿ~Ûÿ‰ íIë/ýûoþ&µ'¬¿÷í¿øšæ|DÛµ=Ã<ƽF+.€=ãv_gÞíUÙ§Q†4Õ€r4Å—r€;âš~IAôÿ&ž€*´ûNäãŽÜÐÏ8Q¶5'ëE /q’/ýiÌó ¸@rh²7Ü`Ÿ-}†iñ™ >`Ó€’Š@PEPEPEPEPEPEPEPEPEPEr>&ÿ±ÿqk&€=öUL…I/S“Фú¥´rlmàã$íàPñ\Å3”F%‡PA¬¹.§V%®¤\»¯=(6¿u›Ù0?q{ôíGöƒÙööÈö_ð  ægÎË×b:à'øR=Ü‘ÈÊײ.Þ¤ªü¨ä…w öÇÑ?¶¾@Éÿsü(é<òRñØsÈ þê ÙÅûŒuÈQý(æîAÿ/íù'øP·’>6ß±ÏNü(ì #AæIw7\p×ýÚ“gût¸ÿ€ñ4XFIÀ½—8Ïðñ4Îq}/îñ4ìÀd®á{.=~Oþ&ƒo¥÷ÇÿE˜ßú~—ÿÿâiLdu½”ßüM`&Ïú~“÷?•bfÎÛÉŽ88 ÿÄÒ³ßg“þ~æü“ÿ‰£ìòÏÜß’ñ4}žOùû›òOþ&³Éÿ?s~IÿÄÐöy?çîoÉ?øš>Ï'üýÍù'ÿ@ÙäÿŸ¹¿$ÿâhû<Ÿó÷7äŸüMg“þ~æü“ÿ‰£ìòÏÜß’ñ4}žOùû›òOþ&³Éÿ?s~IÿÄÐöy?çîoÉ?øš>Ï'üýÍù'ÿ@ÙäÿŸ¹¿$ÿâhû<Ÿó÷7äŸüMg“þ~æü“ÿ‰£ìòÏÜß’ñ4}žOùû›òOþ&³Éÿ?s~IÿÄÐöy?çîoÉ?øš>Ï'üýÍù'ÿ@ÙäÿŸ¹¿$ÿâhû<Ÿó÷7äŸüMg“þ~æü“ÿ‰£ìòÏÜß’ñ4}žOùû›òOþ&³Éÿ?sþIÿÄÐ/â0WSÁbÄF¼ž¦²¨¾¿2–mÆÜB0?{žjªBf'`±r:áIÅRƒhW$K[”•¥Ql¸' P>•$ŠžSrOR:œúU{9Æ€#óãnÝ;S°þ}ÛcÏûíþ{9ÇE¤I»+'ÍÛqãô¥—HiY™Äg'ûçü(ör Œm •ÀòÔö!Ï¥6=fÕ¶F9sÀôéKÙÈ.O—,„ „ òXäþ”Á¢‘œùÿm¿Âg ¸c~HF}éH4FWF_-vtÏ?¥ÎC¹tµRæH—'Í€y§ ‚u ŒŽ¹ÆQ²3ÖŽV„@·1òÂØÇ÷©<ø°GpÚªä öˆñ ãýêC¿zœÓÆÄ qþÕ>IžtXÇqþõ9.•3¶&ÿj—³ûhÿžGó£í£þyΗ³c¸}´Ï#ùÑöÑÿ<çG³apûhÿžGó£í£þyÎfÂáöÑÿ<çGÛGüò?Í…Ãí£þyζùä:=› ‡ÛGüò?móÈþt{6¶ùä:>Ú?ç‘üèöl.móÈþt}´Ï#ùÑìØ\>Ú?ç‘üèûhÿžGó£Ù°¸}´Ï#ùÑöÑÿ<çG³apûhÿžGó£í£þyÎfÂáöÑÿ<çGÛGüò?Í…Ãí£þyζùä:=› ‡ÛGüò?móÈþt{69¿¶íOw¬jJʬÀï¯Þ>cgÚwŒàãëUc—1M·§—:¨çükXôb#¸‰⢎ãŠ\˜þÑ ñŒZ_ÌB°ŠGˆÉrË@ íÏ?­6%1Œ@°§#Š.»€8.Ch`9ÆzãœS—å`N [æÉ<ûQuÜ P\üHÒŒª€zúS¾×üõ]wû\óÐPnàí(¢ë¸¼ƒþz >×üõ]NþE™¢18ʆƒ‚9?*›M`¨ÈHÜXÏ@þ•2heUû£éKZ!Q@Q@Q@Q@Q@Q@Q@Q@‡âøÿOúâŸÊ³+£¿Ÿþ>eùK.lN1íÏ\U­Ý„3´Ñ|­'î÷ŽqëÏZÍ»K¨î%1C5°¤…íïIº~Aµ„p1í] a†½ÃbÒy õ­ 1 Ý4¨ŒÏ‡°^D_óÉ?ï‘G‘üòOûäW8ÃÈ‹þy'ýò(ò"ÿžIÿ|Š<ˆ¿ç’ß""/ùäŸ÷È ȇþy'ýò(ò!ÿžIÿ|Š<ˆ¿ç’ß"³/URýB¨Q°ð(~èúR×Y!EPEPEPEPEPEPEPEPEaøƒþ?Óþ¸§ò¬Êä(ôP“I5â[¸ILck¨«ñjPéîd–\ € ëó§t4´ÔòÕ"2¿(fV9Ϩö«r$¦ä`7—Ž ãƒß9ü:PÛXePa„rA$ÇõéÞ¦'Sß…Ž »ñ»îç¯_JŒ6²dÜcŒ(ÇÊç׿jtM¬>u„Èôúÿ…4I¬.Ðb‰>ƒŽ8ïëJYÊ‚sÔã§ë@ Ù¬Îô qÆ ÏÊ?OwÕ…ÆØãˆ =HàŒýhT%²8È^8ã¿­¶«ætM˜o½>”ëvÕDGÍŽ2û  Ù8éŸj«!œÝ'Ú@yg8ýs@+÷GÒ¦Ó‰°}«ªénH}–ùäß•eŸþy7åK™wû,ÿóÉ¿*>Ë?üòoÊŽeÜì³ÿÏ&ü¨û,ÿóÉ¿*9—p²Ïÿ<›ò£ì³ÿÏ&ü¨æ]À>Ë?üòoʲÏÿ<›ò£™wû,ÿóÉ¿*>Ë?üòoÊŽeÜì³ÿÏ&ü¨û,ÿóÉ¿*9—p²Ïÿ<›ò£ì³ÿÏ&ü¨æ]À>Ë?üòoʲÏÿ<›ò£™wû,ÿóÉ¿*>Ë?üòoÊŽeÜì³ÿÏ&ü¨û,ÿóÉ¿*9—p²Ïÿ<›ò£ì³ÿÏ&ü¨æ]À>Ë?üòoʲÏÿ<›ò£™wû,ÿóÉ¿*>Ë?üòoÊŽeÜì³ÿÏ&ü¨û,ÿóÉ¿*9—p²Ïÿ<›ò£ì³ÿÏ&ü¨æ]À>Ë?üòoÊ¢¦š{‡âøÿOúâŸÊ³+”£ÑDrÍ=ÜpÉåÈÑŒ7§"§·´¾·ÓÝïͨØ}~n§Žôt-® Ëù÷1º”áÛÎs×ò­ #˜Ü† Þ^á±^;ÐÓZ*¡¤‰pH9“Ïò©Šjeð%@»úàd.~q@ùZÉ“{K0ª>ß•:õ…ƒkÍ p0ßjnÍa626$òxãñ§õŒ¨3Åâ;Fh¢×U/¸Ý€Ç¯ÏËÇ¥=ÓVûF#’=€õ`9ÿ?­-L–ÌÀÏR8㎃֖(õQ!w‘À;8õéÓÒ€ tÕR"$’&}‡ºÉôJ­ œ] ¹`Òyg$PJýÑôªšõÁŠþóÞ0ѺØì;w®´¯$C؃H¸ó–_:æF@ F~µ|*䥟ιê+M”¶”4cí AûÇwJxò÷ \6ÜúÔ E+» 3õêàœÜžœsҀ𩕜– 5‘ñ÷Ûó Ìï·çG˜ÿßo΀HÿßoΜñ÷›ó ÞßÞ?ßûÍùÐïï7çNÞßÞ?a½¿¼:PíýãùÐ!w·÷çNÞßÞ?a½¿¼:PíýãùÐ!w7÷çNÜÞ¦˜Øn>§ó£szŸÎ… s÷çOÉõ4dúšPO© úšzn•¬çl`ú ?¥mS ‘9g9'$äœÕ»7"]™àÕÉ{¢-J¡Óim ÷¦˜˜¡_4‚Ns\é”1mŠ€­ØPÖì[>sØzSæòï0Hè…&F#ÐÒ¸ òIÝ—$ŸÒ•!(Ö1qŠw­ÌÍøÒ˜X|Öàb‹€†ÝŽ|yî]‰QÖ›ä>ìù¬)Ü0¸rNFÆ…€„ d'9¢à $‘!úTª0 g8i6Ž¢±ãûŸ‰þut·1¼Aÿéÿ\SùVef3Ñ<˜î&¼ŠW؆!–Î1È54bÏLv±‘ç. ñ&AìäàSè=âyï¡Q±@ˆp$è~œšÖº´–y %ÁŒúûW¸¿²§ÜOö„þ½O_^´ïìÉö·út›Žñüh.´Ùg¹Ž_¶²•ÎÑŽzvÁ¥6+æµäö Äõ9äóï@XÚIjd3\¼Û±·qûµr€ (¢€ Ê¿ÿ‚ÿ×3@k÷GÒµÏÝ_÷Gò­ªl„Š3Xî|¡ãÆj{x#'–éIÎêÁaòG¼/8ÁÍFmòÙó³NÃ[Œ©ÞÜ{õ¥xw“ó°ÏlÑpìãvw·Òœ!6MÌw sEÀCWnöç"Ûç9ü)Ü@0AbAP°`C;Qp/»{}3O6 n'>´®è¤EPEPEPEP:ŠÇî~'ùÖ”·1¼Aÿéÿ\SùVef3Ñ<¨f–ñ.dF0Y³Œ`ƒRÁg ¾ší§7˜ÒKy‡æþ‚Ÿ@*hò\Ë} he‚€Ù ý+ZêËíó™2 `}i[ûrOÚ¦ÿ¾^9¥þÈaö©7sì?Î~´ÛÍ8K:¸¼a0*³uÿëqH4P°–îFÇ$±'úЃLò­¤Atÿ6Ò]˜ü úÕ>ÐYÂщšR[%˜çÔfŠ( ²¯ÿä ¿õÌÐýÑô­áO÷Gò­ªl„„¢±Q@Q@Q@Q@Q@Q@Q@Q@ê+?¹øŸçZRÜLÆñü§ýqOåY•˜ÏD+Ëx·Gùcqôäcõ©-ímWNvÒü²îf'±ëéùSè]]É}’Ãä¶€Ùµo,¡žBÒK°•v>ô€©ýb ýñÏO¼:ñÏÖý•iµ‡žrq“‘П΀u¦YÜJL“2ºŒ˜gñüê7Ñí‹‚×O°.ÜdqÎzþtã¡Û¾HšCò•8#–*dÒ£ÂíävpűÛÛŠ¿EPYWÿò_úæh ~èúV¿ð§û£ùVÕ6BBQXŒkWƒŒóŒúTs[i:zöõühÞòH›nÑÈÚǸÏ9ü3D&ý›¨Q°ôÁù»w «j >â°'ø±‘DZõ©ÒÞ)CFÇÈPõ?ù怦ùd UY7}î3Œý}1L‘µ$ĆOG¯öÅÍ|$‰%ˆ|ßxœ~9¢6Ô•°é u㓊{ ß%OïFì¯xÿ9¥¯¼à³¤~_9eÿõк(¢€ (¢€ (¢€ (¢€ (EcÇ÷?üëJ[‰˜Úÿü§ýqOåY•˜ÏD>@–óí_ê|±»óýjKt±—M”im¹P_×þßó§Ð š4wOÓ$qDZ¶ˆØýEjÞ[ÚI!iåÅG€à¼ýiSû?H‰£ÏÝÿX:ñúÓþæmeó×Oþ½tJ<ÈAö«ŸïÇÿ|õèûUÏ÷ãÿ¾?úõ>ËÌ.j¹þü÷Çÿ^µ\ÿ~?ûãÿ¯G²ó ‡Ú®¿ýñÿ×£íW?ßþøÿëÑì¼Âáö«ŸïÇÿ|õèûUÏ÷ãÿ¾?úô{/0¸}ªçûñÿßýz>Õsýøÿïþ½ËÌ.j¹þü÷Çÿ^µ\ÿ~?ûãÿ¯G²ó ‡Ú®¿ýñÿ×£íW?ßþøÿëÑì¼Âáö«ŸïÇÿ|õèûUÏ÷ãÿ¾?úô{/0¸}ªçûñÿßýz>Õsýøÿïþ½ËÌ.j¹þü÷Çÿ^µ\ÿ~?ûãÿ¯G²ó ‡Ú®¿ýñÿ×£íW?ßþøÿëÑì¼Âáö«ŸïÇÿ|õèûUÏ÷ãÿ¾?úô{/0¸}ªçûñÿßýz>Õsýøÿïþ½ËÌ.j¹þü÷Çÿ^µ\ÿ~?ûãÿ¯G²ó ‡Ú®¿ýñÿ×£íW?ßþøÿëÑì¼Âáö«ŸïÇÿ|õèûUÏ÷ãÿ¾?úô{/0¸}ªçûñÿßýz…ª€NO­TaÊ/ˆ?ãý?ëŠ*Ì®qžŠ&{yï%Ž3#,@…ù,w&ûMµÛI€0ÀðßîóŸÎŽ€QÑ­ãƒPˆ¼òI3+|®Ëô"´õ=F &ݦFÌPM«[ù…ÙÙ†ÒrZ_íKO³ |‡ÚIÊìë@›Scf’%[aR=ÿ¬ZIåºÎ…Fû»”f€&0ÄT©v·c­9QS;T.}-Q@e_ÿÈAë™  5û£éK]d…Q@Q@Q@Q@Q@Q@Q@Q@‡âøÿOúâŸÊ³+£ÑD’Ã=ÛÁ™ Œm_ÄT±ÜKs¦¿ö…«D00CcqöÈühè--õ‡™+ÌÈÀï}à}98­;ûï²JÛ ’=(ª•¸)öVà|Çßv1ý*rjaïEªÛ»eˆ>èÅ_*¤‚T:dRô Š( Š+*ÿþB ÿ\Ía¯ÝJZë$( Š( Š( Š( Š( Š( Š( Š( Š(  ?Çú×þU™\…™aÿ!9ÿÜ¡41ÏŽU ‡¨4½…­´žd0*>1žø«PPEPE•ÿ!ÿ®f€0×î¥-u’PEPEPEPEPEPEPEPEPˆ?ãý?ëŠ*Ì®B@šI"žâHC3ª|ª­·qô¨ZöëɉÙäÚ0Ì»¸ëUv&0ßÜÿÏgÿ¾'Ûîç»ø®ŽEØAöûŸùîÿ÷Ñ¥÷?óÙÿï£G${ûŸùìÿ÷Ѥû}Ïü÷qÿ4r.ÀKmsq4¬ypr*ÎdÿžóßÃ\óV‘H3'ü÷›þþ3'ü÷›þþ Éÿ=æÿ¿†ŒÉÿ=æÿ¿†€"¸¸¹‚Þg…¥–E\ª<žx¤ŽG’è™3½ Î8PzýÑô¥®²BŠ( Š( Š( Š( Š( Š( Š( Š( ŠÃñü§ýqOåY•ÈQÞÜŸô¹3ÓŠˆ4-Èr=…4€É\~ìÿß"€`?òÌÿß"˜‡€9]‡#ý‘éMo!F|³Ó?tQf•`nˆGåE"ý†B{tY€)ƒ¨VÿdS€Œ¹R#=…&˜ ÈÃqì)I‹`l7>Ã×r€„Œ€ß¡LL ¸è(åèÄR Œ¨øÔ$à›Iéô¤Õ€Î_º>”µÖHQ@Q@Q@Q@Q@Q@Q@Q@Q@~ ÿôÿ®)ü«2¹ =EÍÛŸp:Ô7 n¬ì’2/Þ`G¯½=¥‚9<¶|0Çõ§ˆð$¿Þ @IÄ«œóóÓ•£oºùã<7jŠyDq‡O›'ûÕ\]I·w•òçÜqšgöˆÞSåz‚Æí÷?ïºOí NPéóõ¥þÑ‚ü™Æ@ß@ oˆ8!r;o¤þÑ©ÿ}Ю X¡N:üõ5¥Éšè |Œr}(ªýÑô¥®²BŠ( Š( Š( Š( Š( Š( Š( Š( ŠÃñü§ýqOåY•ÈQßܹŽI\uk6k˜æÜ;ƒ· 'ôëjóÉkr]d„–$à ñM_²©aa‚2;P|»<‚`sVnÎ8×/ L8ÙËP²ÂÒ @¡ç­V·J€»sœn [Jffcî'$îöÅFš)C¸(Ý뺀ôrê¡aWhù»Ptr\¶Ñ“þß¾hNw–Ø2pOÏLþÃp¨9Îê’$ÀXÇÃæ«Vvï Ø,-€ÁúPuû£éK]d…Q@Q@Q@Q@Q@Q@Q@Q@‡âøÿOúâŸÊ³+£¿º ÒLŒÁIÆ3YKÉws…97SŸ­C%–ùÁefêA˜¨ÿ³~røÀÈô  a´ò•”—|œüÌ+RÉ•!!ÈRXœ@<Øÿ¾¿lß_΀6?ï¯çG›÷×ó ÍûëùÑæÇýõüèócþúþty±ÿ}:<Øÿ¾¿"²´ë´ƒ…nŸ…f¯ÝJZë$( Š( Š( Š( Š( Š( Š( Š( Š(  ?Çú×þU™\…ƒ)cs(ÞÊ…¨!'…¥†yT‘’1ÈëHvêU—Ph/!2}êÌ2³Fï$¬¡*¬íqŠXææ+–|œZ|Ÿ'-3"É&-vHaòÎäñx"‰›ËRÆI…$ã“Ú€#IKî®…-ó®3Sº•88ç®hjÀF’,„„‰(^>ûþtmÿmÿ:6ÿ¶ÿÛÎdL£sU&€3î¥-u’PEPEPEPEPEPEPEPEPˆ?ãý?ëŠ*Ì®BA“þ>¦ùIÅW·¶Öí#ÌNv…êsÐP)=û’¯µˆãŒgÞ­¤µ´¨ÛÑ ÒßK¶¶û‡;ä Ê´qÇ…K2®g…éÈ=è ëpD)ÀcŒÖ‰º1½9nÉ2ÌÙbT¨0µ,¿1û¬AÎx4Øá·òœ·Ì}>Z²:t?• ûÈÑŸcù3ì#Mÿ–éþëJÌ_º>”µÖHQ@Q@Q@Q@Q@Q@Q@Q@Q@~ ÿôÿ®)ü«2¹ = ÿÇÌß…-PA8  ‘ÐÐ[$@ïcéÒ“pÆyÇÒ€EPLÿ—•ÿpÐbýÑô¥®²BŠ( Š( Š( Š( Š( Š( Š( Š( ŠÃñü§ýqOåY•ÈQègþ>fü)h¢€ (£ë@åFh¢€ (¦ËÊÿ¸h1~èúR×Y!EPEPEPEPEPEPEPEPEaøƒþ?Óþ¸§ò¬Êä(ô3ÿ3~´Q@Q@Q@S?ååÜ4˜¿t})k¬¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€0üAÿéÿ\SùVerzÿ™¿ Z( Š( Š( Š)Ÿòò¿îÌ_º>”µÖHQ@Q@Q@Q@Q@Q@Q@Q@Q@~ ÿôÿ®)ü«2¹ = ÿÇÌß…-PEPEPEÏùy_÷ f/ÝJZë$( Š( Š( Š( Š( Š( Š( Š( Š(  ?Çú×þU™\…ü³(žB²DAÇWß?ý¸ïà Ïÿnûø(óÿÛ‡þþ <ÿöáÿ¿‚?ý¸ïà Ïÿnûø(óÿÛ‡þþ <ÿöáÿ¿‚?ý¸ïà Ïÿnûø(óÿÛ‡þþ <ÿöáÿ¿‚?ý¸ïà Ïÿnûø(ISÍ ÒÄR8P „7GÇý4_ñ£oûQÿßÅÿßÚDV ¿íGÿühÛþÔ÷ñÆŸ´ˆX6ÿµýü_ñ£oûQÿßÅÿ=¤BÁ·ý¨ÿïâÿÚþþ/øÑí" ¿íGÿühÛþÔ÷ñÆi°mÿj?ûø¿ãFßö£ÿ¿‹þ4{H…ƒoûQÿßÅÿ6ÿµýü_ñ£ÚD,Úþþ/øÑ·ý¨ÿïâÿÒ!`ÛþÔ÷ñÆ¿íGÿühö‘ ßö£ÿ¿‹þ4mÿj?ûø¿ãG´ˆX6ÿµýü_ñ£oûQÿßÅÿ=¤BÁ·ý¨ÿïâÿÚþþ/øÑí" ¿íGÿühÛþÔ÷ñÆi°mÿj?ûø¿ãFßö£ÿ¿‹þ4{H…ƒoûQÿßÅÿ6ÿµýü_ñ£ÚD,Úþþ/øÑ·ý¨ÿïâÿÒ!`ÛþÔ÷ñÆ¿íGÿühö‘ ßö£ÿ¿‹þ4mÿj?ûø¿ãG´ˆXÂ×ÈþÐP8‰=«2¹ÆÿÙlibstruts1.2-java-1.2.9/doc/images/how-to/netbeans/building4.jpg0000644000175000017500000005456010404045230025077 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„(#(#!#.+(0=fB=88=}Y^Jf”‚œ™‘‚Œ£¸ëÇ£®Þ°ŒÌÿÏÞóúÿÿÿžÅÿÿÿÿÿëÿÿý+..=5=xBBxý¨¨ýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýýÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀd¤ÿÚ ?³wvm™@AÉíUÜM®¤Ì XÔÜþ^Ì.1µbJOåÒfû]¿çŠþýj9pþÖoù⿟ÿZŽ@¸k7üñ_Ïÿ­G \?µ›þx¯çÿÖ£./ö³ÏüÿúÔrÃûY¿çŠþýj9áýªßóÅ?þµpþÕoù⿟ÿZŽ@æíVÿžKùÿõ¨ä ‡ö«Ï%üÿúÔrÅþÕoù俟ÿZŽ@¸j7üò_óøQÈÁý¨ßóÉÏáK9…þÓoùä¿çð£9„þÔoùä¿çð§ÈÂÿi·üò_óøQÈÁý¦ßóÉÏáK9ƒûM¿ç’ÿŸÂŽ@æí6ÿžKþ 9âÿi7üò_óøQÈí&ÿžKþ 9˜?´›þy/ùü(ä`þÒoùä?ÏáG \?´›þy/ùü(ä ‡ö“Ï!þ 9˜_íÿžKþ 9˜?´XÿË!þ 9˜?´[þyóøQÈíÿžcüþrÃûE¿ç˜ÿ?…ÌÚ ÿ<Çùü(äa´þyóøQÈÁý ßóÌQÈíÿžkþ 9áööÿžkG sÛÛþy­Ìooùæ(ä ‡ÛÛþy­q~ÞßóÌQÈÁööÿžbŽ@æ·7üóZ9˜>ÜßóÌQÈ·7üórÅûqÿžbŽ@æ·ùæ(ä`ûqÿžbŽ@æ¶Ÿî 9˜>ÚßóÌQÈÂý´ÿpQÈÁöÓÿ<ÅÌAªðñŸD?ÈS¦6Wʉä ê@ãñ­1IþÑ‹ÌÃ0ÆêRØ IµÈ  ®I,£Ô‚£T#ˆCp&'j¬0zóŽø§¨Év• ¾R|ÄqŸozIê2m"ó–4V~2Àí#ëM7aXsZB±™67ú²ÛNG ÑvYB]Ôg8 »³Ž™ëK™…ˆlƒ¸ÂçœqžiË "Ī>`ê>H ã68¤€‹RdÀV Æ8Âô§b¢3Ú8tí8<ö÷£¨ m˜>ß0FÙøhl ˆƒ¹°{qœÕ\µdŽÓ{p£?.r1Ò¥îR äœó˜÷à ÑvŽÞ1l}ôüÍè,Ùó²'æhçA`þÏ›þz'æhçA`þΗûéùš9ÐX?³¥þú~fŽtû>_ï§æhçA`þÏ—ûéùš9ÐXzYÏnY7Lú~”s ³ö ¿¾¿™£ƒì3}3G: ±”¾¿™£…û ¿ß_ÌÑ΂À,e;×ó4s °}†_ï¯æhçA`62ž®Ÿ™£ƒì2ã_ÌÑ΂Áö¾¿™£…û¿ß_ÌÑ΂Áö)¾¿™£(ç¶žFÜÒ)4s$c~Å/÷×ó4s °}ŠOï'ëG: ؤþòþ´s °}ŠOï/ëG:Q~Å'÷—õ£ƒìRyZ9ÐX>Å'÷—õ£ƒìryZ9ÐX_±ÉýåýhçA`ûŸÞ_ÖŽt±¿÷–Žt²?÷—õ£…û#ÿyhçAÊdï-è,dï-è,dï-è,eï-è,/Ù_ûËG2 Ù_ûËG: Ù_ûËG2 Ù_ûËG2 Ù_ûËG:Pû3ú­È,]~£è?•fQ[í3£ œÃ·µ9gB989#ò8  h9¥ò‚œgqÇ'³ý(¦á8Éìhaf,øhZ‹ÍÁÉm¸÷ gŒ…ù†HÍ;ÍO u6W1…ÜIÀ ¬èܵ†roóŠ<ô8à ~T¾|{wnãé@R¬¥Âÿ ÅI@£»VÚX 2>`hI&XÎ:ŸJU™@ŠrpOåñ  (6Xå]Ûwg¾q@\Fwg(âXÈ'pÀ>€*Ønô ÐfP çœþ¿Ïò ÎAç ö ΘsÒ€2p IÇë@'Œ•äNø g‰—p~(èêã*r:PÐI>C]N:çšwÇÌ9é@³¡ÆN $cñ  h¬ûJ‚>ñÆhtž[8ƒŒzÿ‘@ £$€ÃŽ´ÑqÝÏ€æ¦3¸c8 89ÁÁ Èâ8ÙÏE ý¢=øÜ94ŸhŒ6 ``}zñúPªÁ€ äZ( €ýGÐ*¨BbHþmÎHÏ–xϽ'ÙìåNsœ®{“Çç@¨‡û­Ÿ¸[±Ö€#òŒªHm¹Æ~B:zf€$‚á¸qÛÚ€&  ۣğO-ºþT‘Ú*r§É+Ïé@û*ç9þ,þ”b€"¸Ud]ù*“ŸÊ€"IíÊ«&Ì#}~´×¶i.AÈä@[vB çøxíïí@EŒ¾[!ˆ==±ý(J¢±†U‰ÂŒ"aÛš•­™ß{H2H< tPu% ¥@Çn?€'  ‘‹ß»&ëœõ lö¨ Ê6ã/§­9­˜« Á qü¨7óׂˆ'ç>þôj€#’ î¬{u÷þ¼PRZ‚ÎÙ6Nväô Ùæ…(v…ãæBášAlF@q†?7ùâ€Ûec¾ç·^Aþ”ו#+–hÔëÓßÚ€%·FHÎþ¥‰  (º€ä…,~ñº2f8a¼|ãǹ<~f€[W 8'œs×4b€"¸Çƒ»¯TŸå@ºG1Ú»×å+Ê00?™ µ¶ä [£1éëŸñ @âC&õÞÙ′®g€»~¼`ÔÐÑ¦Ä ×ÔúÐf]ðºçR8 8æq´ÐÆ@ Û2¼e Œp¼¿ã@#M‰·9䓸œÐè € WÎàqßé@ Áõ_Ö€ UýhÁõ_Ö€ UýhÁõ_Ö€ UýhÁõ_Ö€ UýhÁõ_Ö€ UýhÁõ_Ö€ UýhÁõ_Ö€ UýhÁõ_Ö€ Uýh9éО(H ã+úÐ`ú¯ë@ªþ´`ú¯ë@ªþ´`ú¯ë@ªþ´`ú¯ë@ªþ´`ú¯ë@ªþ´`ú¯ë@ªþ´`ú¯ë@ªþ´`ú¯ë@ªþ´`ú¯ë@ªþ´Žâ€OqÖ€ UýhÁõ_Ö€ UýhÁõ_Ö€ UýhÁõ_Ö€ UýhÁõ_Ö€ UýhÁõ_Ö€ UýhÁõ_Ö€ UýhHãÞ™Ïr(¯÷×éý(¤ÿœPÐfdÉ1ÁÁÂý(êÁ”2ô#"€€ ( w +€€Ò8Á4ªÁ‡êg˜¾´úkt?îš{ýãõ ŠMÀ6Þô+$Ôê¦Dbì“…'ðr -5˜(æ€X0È  4нzЫ«t4êcHã¯Ò€¬dPÐY‚õ4+†Î(Oõçüèïý($ÍÆæ€€ÌI= Á×pé@ €zPÐdgèh  ­ÿÕ~'ùÐO÷×éý(§üñ@ @Æl…º<~TÐ m´#"³‘žÀÿœþ4€˜çn3Û4Y¹ÜÓ ÝÁíØ¤Ý†:؃$Àv”`¼Ð„X¦P2(HzµHÿq¾”Xé@@žô#ªO¥V=;PÑ1e稠7Cþé ?Sõé@()XnœŽô°‘Œ½hZ«&Æ¸Øø;™8#¯Ztiå\]»w`0Gÿ®›Å !›ï¥ýãô  ¨ €ÝÓµ™¨z…ÙKò¹í@ äžÔ5WõŸ6qí@ˆ/$~´!þ¢€áüÿ©þTÙÕš€g#{P‘œ õ nK€ ƒ“‘ëÚš Y\ívâÏê[{Šö.#n@ØÆi”2b@8 •˜Ïzµ@¹ÚÛ±Æ(?5‹pp>”b€&·ÿUøŸç@?ß_§ô ž½èh?&<±Ø2ÝM,q¬d‘’O>”úo–„ä¢£  }(h†5'¥*¨QÀ  yKž”úÈÁ ùIéúЕBŒ FèÝ4çê~´‚€¢–ÉÐTä u5”8à Œæ€cDmʸ8ÆrhôÖPÝE z u5‘[¨ P/Ju4¢“’(zPÐYCu*…€ÿQ@ðþ}>´w  Å-5Ô:=Çϳ¦A989ç½+ Ä´Æ!õ Ø¿ÝêJo–¹Î(ô5¿ú¯Äÿ:‚v+‚±—>€ãµCæIÿ>¯ÿ}ñ Ì“þ}_þûã@™'üú¿ýö?Æ€2OùõûìdŸóêÿ÷Øÿ<É?çÕÿï±þ4y’Ï«ÿßcühó$ÿŸWÿ¾ÇøÐæIÿ>¯ÿ}ñ Ì“þ}_þûã@™'üú¿ýö?Æ€2OùõûìdŸóêÿ÷Øÿ<É?çÕÿï±þ4y’Ï«ÿßcühó$ÿŸWÿ¾ÇøÐæÉÏú+ò1÷ÇøÐæÉÿ>¯ÿøÐæIÿ>¯ÿ}ñ Ì“þ}_þûã@™'üú¿ýö?Æ€2OùõûìdŸóêÿ÷Øÿ<É?çÕÿï±þ4y’Ï«ÿßcühó$ÿŸWÿ¾ÇøÐæIÿ>¯ÿ}ñ Ì“þ}_þûã@™'üú¿ýö?Æ€2OùõûìdŸóêÿ÷Øÿ<É?çÕÿï±þ4y’Ï«ÿßcühó$ÿŸWÿ¾ÇøÐæIÿ>¯ÿ}ñ Ì“þ}_þûã@›'üú¿ýö?Æ€6OùõûìdŸóêÿ÷Øÿ<É?çÕÿï±þ4y’Ï«ÿßcühó$ÿŸWÿ¾ÇøÐæIÿ>¯ÿ}ñ Ì“þ}_þûã@™'üú¿ýö?Æ€2OùõûìdŸóêÿ÷Øÿ<É?çÕÿï±þ4y’Ï«ÿßcühó$ÿŸWÿ¾ÇøÐæIÿ>¯ÿ}ñ ­ÌÈ»VÕ±þðÿ™ú þT6ÜqœœPO|JvÞ¾´€7®3š,®8ìh<ÅÈêqNÀ(e= H¤g=ñNÀ8sÅ rã­Ôgž”Xzóó(°õÏ^ÔX Îx Þ¾´n\ã4oR3š,3¨Í;ú@P@P@P@P@P@P@P@P@çê>ƒùPl¡±ž€æ€Æ9ìÅ;€ÖŒ±æ‹€¢2¼Œôÿ>”\*‘žzÐDdÈàç¥òÈPÆ:Qp,…ÆG_J.²dc?áEÀAd sÒ‹€ãœúö¢à ãÖ‹€³É<ý>ŸáEÀpO¯úQp±·†ÈÏ=¨¸„L{ÑpÇœsÐ .¸ 29â‹% € ( € ( € ( € ( € ( € ( € ( € ( €ã¿ÓùPh € (»\0vUˆ°SŒäP~Ó'üð?÷Рí2Ïÿ} >Ó'üð?÷Рí2Ïÿ} >Ó'üð?÷Рí2Ïÿ} Ì€¨?÷Р7 ñþРûLŸóÀÿßB€´Éÿ<ýô(ûLŸóÀÿßB€´Éÿ<ýô(ûLŸóÀÿßB€´Éÿ<ýô(~Ó'üð?÷РûLŸóÀÿßB€´Éÿ<ýô(ûLŸóÀÿßB€´Éÿ<ýô(ûLŸóÀÿßB€´Éÿ<ýô(EÄ„à@sþð y³Ϲÿ¾…lßóîï¡@›7üûŸûèPæÍÿ>çþúy³Ϲÿ¾…lßóîï¡@›7üûŸûèPæÍÿ>çþúy³Ϲÿ¾…lßóîï¡@›7üûŸûèPæÍÿ>çþúy³Ϲÿ¾…lßóîï¡@›7üûŸûèPæÍÿ>çþúy³Ϲÿ¾…lßóîï¡@›7üûŸûèPæÍÿ>çþúy³Ϲÿ¾…lßóîï¡@›7üûŸûèPù“Ïÿ} ²ý?/å@gwWELóœàZkÎÊ <V'Ôã·ã@ K§Ø—©ÀúK眕òÎñœ€{ ˆ  cmñ«ã€4X¬—ýÿè(ža'!I\ã40Xƒíëž?þI.ÆQÈÏ-Šu\w?ýjE¸B2xއ×ó4`d¶8ò§é@ÎPœ ’Øë@ óT›‚8#­d,Fzé@ dAÔöÍ'3¼cÖ€2Œó@ ²#6Ðy ŽÿJ…î3®[ŸÊ€æ¦Íœp(óÜ1@•Á<ƒŽ”žrgþ\Ðù‰»nîhXÿÖ¡  ˜í\ã<â€8ÎÒ€]ëëE€7®3ŸÒ‹+†$ÔX2(üñE€PÊz@ ‘N}ÇN´ì²1œñHÞ¾¿×Ö‹žbzô§`1r9¢À(`FA¤y‹ëNÀ.õãž´X:‘Ö‹†E9¢À8r3H € ( ‘•GÌÀtëô É‚ÏÈèCãùPJ[’ `qŽ­úýhÛ21þ÷ùô •#s•‘'æÏ9ýG¥H" q…Ð AyH9ÿ  rpHÙœãçë@ÐM…ÆÑœqÏùæ€ñ±ue`r¹ <ð ÏNø @r ~„‘Ǹ?Ò€H›-³'~rxâ€&Æ‚€e.N6y š Ä1*[¾W#ò AŒß) ã‚€Ñ:áÜÃ?úôß&M¥@?7SÇ©?Ö€$aXnêAéï@ 8pH!UJŒãÛü(qü_J‰¡,_æ_¨ÛÏLu Ê ¬7H$zÐä)À<€0}ÿÎM±@a‘É$wõö ò~ÿÍ÷(7ŽE$óŽsŸñ  1ÿ­C@2î>´›xàcîLd‘“íǦ?úô\ãTaÅʤsœÒ¾YõsÒÀ]˜‘íEÀA FàzuÔ\1‚¸$ž(¸#ãœð1EÀF‹qÉ#ò¢à T€yÿëb„ÀSî§ô¢à(@¯ú QpQ·ž~ŸZ.ù@ñøŠ.bÊžƒ>ŸáEÀ<®08\H € ( –5‘Æå …î>”Ò¸ºÚÆ@tPO?wÿ­UÊ!»¬¿º¿÷ÏÿZŽP&û<óÉ!G(ÙàÿžKù 9@>Ïüò_ÈQÊäEŒÀö8£”aäEèß÷Õ D^ÿ}QÊäEèß÷Õ D^ÿ}QÊäEèß÷Õ D^ÿ}QÊäEèß÷Õ ÉÉ ÿ}QÊäEèß÷Õ D^ÿ}QÊäEèïª9@<ˆ½ýõG(‘¡ÿ¾¨åò"ô>¿zŽP&!ž¿ÍG(‘¡ÿ¾¨åò"ô?÷Õ D^‡þú£”È‹Ðú}ê9@<ˆ½ýõG(‘¡ÿ¾¨åV(ÔåAÏûÔr€ÇžØ«9 :ŠV@ ¹·$!Éúÿ…@MŒ7|c½&¬vfÞÃqi\Ë|Óå@oïš9P[ûæŽT–þù£•e¿¾hå@oïš9Pƒ-ýóG*e¿¾hå@oïš9P[ûæŽT–þù£•e¿¾hå@oïš9P[ûæŽT–þù£•e¿¾hå@oïš9P[ûæŽT–þù£•e¿¾Ôr -·ßÿ€ÿ…Lw»‰ çÊ £98ã'¾ 9y.ÛG‰Ã3ãwQO<ž\T_ ]’!r§#¾;Ö½G¹á,'.OêhØ=à Êü§ozu¥prëü)€;äsúQpóʲmØ-éϹ4îÀS#µœ’)ÚHÇj:ÅæHrÅPðwŸîŽÔĹ—oÊ»±ó‘ÓÓ’)\dÞl…ØöûŸ¯ô§qÙw"ŒÆG>üf‹žP_\³€ vùsÜŠW~Ñ3¢òÏ=sè}©Ý€åÙáBœgëý?*.–äù\’pÌ9?íwÿô€ôïýz~”gŽ¿çü(IëÏ¿?&€ÇÏúÐ8ÿ=?úô?ýçš\ÿ‘ÿëë@ð4wãô vçÿ¯Óô uëL R6ÙnveÀÇSŽ”€V-€\áüÅqŒ L §ïŸ¡þb”†Uoõõþ”ã°P‚€ ( € ( € ( € ( € (Ì®–n›Gô¬Öã 2¡}á¥SŒ|«þ"©ÙI2dõ;OãŠV]À™§‰Á ¤ƒÔªºÕ’û‘íú&(º RHCÏû(º|È2O—É'goJ.€S,,ÁŠGBS¥@#KFɆ A)¢èY£ Œ1õ%zÑt 8Ì}GÉÒ‹ Í„1`„1à¶Îhº»áòÂ,£³&hºLæ<îë”ëEÐ &ˆtCÇû]žd;ƒyg#¡ÙÒ‹ åŽ4 7žIÉ_Sš.€wÚý¯ûäÑtö„ÿkþù4]}¡?Úÿ¾M@hOö¿ï“EÐÚý¯ûäÑtö„ÿkþù4]}¡?Ûÿ¾M@hOö¿ï“EÐÚý¯ûäÑtö„ÿkþù4]}¡;îÿ¾M@á?Úÿ¾M@BJÖY±„ô€O”‘ºy˜ uÅ!–’A#¹à£éD€¿Ö?×úSŽÀB ( € ( € ( € ( € (  çûÃðþ•Éã†3’¼;мˆÿ»@‘÷hò#þíDÝ Èû´yÿv€"?îÐäGýÚ<ˆÿ»@‘÷hò#þíDÝ Èû´yÿv€"?îÐäGýÚ<ˆÿ»@‘÷hò#þíDÝ Èû´yÿv€"?îÐäGýÚ<ˆÿ»@‘÷hò#þíDÝ ¼1„b =èûïþ{ ¿Ö?×úUÇ` ¡P@P@P@P@PóýáøJÈe¸ÿÕ'ÐP¨ € ( € ( € ( € ( € ( € ( € lŸêŸèh¢}÷ÿ=…@ßëëý*ã°P‚€ ( € ( € ( € ( € (yþðü?¥d2CuPòrU3€=ºP‹sçŽ1Ó8Çó ýª/9¢Ï*2N:P‰"H»”ä~X ­ÄMÑÿJ ÄC~¾ÔŸjƒ~Ï0g§Cô 7Qc*Û¹sŠp¸ˆ‚wôöëôõ ûLyü¤dé@ 7‡ ¸ãibpxÅ?Ï‹c6þ©Å6;¸ž4rvîÁ­I$‰ËœgÛ4‚hÏG¿ZoÚ¡Á>`zÐ ¸ îó8Î9Pö¨÷ž>¹Ïo€&V ¡”äZ( € ( € (²ª¡  ‰÷ßüö¬¯ô«ŽÀB ( € ( € ( € ( € (  çûÃðþ•Ä[Vxþi—æL‘@ýŸä|ȻٕóŽ2ÿ jÚ²»±™X¸9ÊÐã€*Ò@BT}1šŽ+5J†@Û•L=ýèšÏÎM¦Eû»A+œzcßüñ@ myƒÃ§«f€«ÐI N@ÇO˜é@ŽÉcBªÑýÝ£äê=ýJq¶&4_0n\ó·#¶(¦Ð•Ûæ¯Ýe /tçÚ€-¹vm² ŒŒg¥4Z°H×Í_c;yü9ÿtÖ«&ls‰2ÃòÍ*Á´¡Á€6Œc½B¶!dWóŒ\y÷ íŠH2§®:uÿSb Ü]Y³œ2äg,Oÿj€,Ä¢(Õz Pò=hÈõ #Ö€ Z2=hÈõ #Ö€ Z2=hÈõ ÈG”üö4U>ûÿžÂ€ oõõþ•qبA@P@P@P@P@<ÿx~Ò² N‰aK2®z{V—ñ4dãiËМcùÑp\4Œª™ Á8ïEÀwóÌþT]qÿ<ÏåEÐ Çüó?•@'óÌþT]>X‰9¨ºxÿžgò¢èçv<£·qEÐÎáû£·']¼Ï3ùQt.JÑ{ŒQtñÿ<ÏåEÐóÌþT]qÿ<ÏåEÐóÌþT]œî#Ê;qÁÅ@/óÌþT]‡9\DHÏ|’;{€?ž€Çåùƒ,IlßJ–2JìK1À#‡¿#ùÐ’$ôt4´ʈÛNìã8 Oò  ( ,PO,p(ÎCƒ@ € LŒã#>”dc9â€@ =(h €!x„²Œƒ•Á|ÿJ¤Ä8…bÃíPÝ<â«A û?s&Üä ½9Í‚ÔdÎ6—·ù´M¹*2qþÏÿ[Š4øbFüœmî}úÓÐÊ1Äãç$ÿ³Š4é÷ßüö˜Èýcý¥\vªP@P@P@P@P@O?Þ‡ô¬†[ýR}:€+Iþµÿ `6\!xYTdžÙÅGå±PNz³çðüh?%™¤ÛS»ƒžƒh‷¡PƒvÏž£Å:KbdR í‚89äóÏå@´[®œà.Žs@˜\” ™ 2“÷‡8þy ‹RXPÜŽ8ОK4p+çå9l6;ôÚ¶ãÃÉÀÈ>œó@kfòÈÁ$¾O ä~è?×7û¢Ÿ@,Ò € (²ª¡  ‰÷ßüö¬¯ô«ŽÀB ( € ( € ( € ( € (  çûÃðþ•ËqÿªO  Pi?Ö¿áLÒC 0È dW °É?ŸôÖ†6Îå'&€F0:{Ѐè(h € ( € L}úÐm” I­:€ (Юo÷E>€Y¤@PdÿTÿC@ï¿ùì(ÿXÿ_éW€*„P@P@P@P@P@Ï÷‡áý+!–ãÿTŸA@  ²ª™\•§QLíOî/åEÀ6§÷ò¢àSû‹ùQp ©ýÅü¨¸ÔþâþT\jq*.µ?¸¿•ÚŸÜ_Ê‹€mOî/åEÀ6§÷ò¢àSû‹ùQp ©ýÅü¨¸ÔþâþT\jq*.µ?¸¿•ÚŸÜ_Ê‹€mOî/åEÀ6§÷ò¢àSû‹ùQp ©ýÅü¨»öà ›”t£ iP@Ù?Õ?ÐÐDûïþ{ ¿Ö?×úUÇ` ¡P@P@P@P@PóýáøJÈe¸ÿÕ'ÐP¨´Ÿë_ð¦iÎE»`àýqÞ€+î’ À`6à¸,Hg<д²ðù!8íœâ€ÓJ³ùpß4Ó,ÆåÎáŒ}hò3µ»ŒüÁ‚äqžE´AS!r IaÆ8æ€!3¹ŽNBðO?AÅ;í2…bà€}‡_Ò€..vØÏµ-P@P@:õÍþè§Ð 4€( € lŸêŸèh¢}÷ÿ=…@ßëëý*ã°P‚€ ( € ( € ( € ( € (yþðü?¥d2Üê“è(ÔZOõ¯øS´€Lg­Aê ÐP€Np2;еG@9ö Ò€êúÐT ~T›W$íÜ3`òŽƒtÍ ( €'ú§ú¨Ÿ}ÿÏa@7úÇúÿJ¸ìT  € ( € ( € ( € ( € ž¼?éY ·ú¤ú uV“ýkþÀm )aë@—DÊN³¼`šV8 ÈÇ\’3úP—.Í÷‡ ¸ëž´sÈ`œ“þÊñúЂ’TÔŠZ( € ( ‰mÎAéÓò¦ÆÙÏ\vÍ )P@:õÍþè§Ð 4€( € lŸêŸèh¢}÷ÿ=…@ßëëý*ã°P‚€ ( € ( € ( € ( € (yþðü?¥d2Üê“è(ÔZOõ¯øS´€(0=”1 rhp=-P@P@%-P@ƒýsº)ôÍ ( €'ú§ú¨Ÿ}ÿÏa@7úÇúÿJ¸ìT  € ( € ( € ( € ( € ž¼?éY ·ú¤ú uV“ýkþÀm ÌK‚€%À&E)úæ€ÜD¸ËŽh|èËÞ2h©pŒ¹'ã×°?Ö€î7uÔÃp£ËÀ$8ÈüÀþ´5P@ÝÃv9 0# ÐK`iØxÉëÅ 0?…-:õÍþè§Ð 4€( € lŸêŸèh¢}÷ÿ=…@ßëëý*ã°P‚€ ( € ( € ( € ( € (yþðü?¥d2Üê“è(ÔZOõ¯øS´€k¨t*zŒÇ#`—]Êr¿/1Ïç@ [m§;¹È==Éþ´Øí™Ya· ôëŽh–ù•ˆåxèô  žáq ¾œPfÃ.åS=Áþ‡ó  4P@P e÷d~\Ó<¾:ÿœÑp/ }Z.ì7«Qph99&€HAþ¹¿ÝúfP@ “ýSý TO¾ÿç° ýcý¥\vªP@P@P@P@P@O?Þ‡ô¬†[ýR}:€*Ë»Í|cu¦pÞ«úÑ ÕZ4Ãz¯ëF€oUýhÐ ê¿­a½Wõ£@ 7ªþ´h†õ_Ö0Þ«úÑ ÕZ4Ãz¯ëF€oUýhÐ ê¿­a½Wõ£@ 7ªþ´h†õ_Ö>oUýhÐ ê¿­a½Wõ£@ 7ªþ´híóç6q÷GJ:fP@ “ýSý TO¾ÿç° ýcý¥\vªP@P@P@P@P@O?Þ‡ô¬†[ýR}:€+Iþµÿ `6 –O*6|gø â¸Wm¤®îÛ[pïþ€Ü }¹õôëþèåY þŠ’€ ( € ( €,Fè<ÅÚ[°§`H € të›ýÑO iP@Ù?Õ?ÐÐDûïþ{ ¿Ö?×úUÇ` ¡P@P@P@P@PóýáøJÈe¸ÿÕ'ÐP¨´Ÿë_ð¦iÉSÌŒ¨8Ï|f€#ò¶òë¼c/ûgÜÐ>ÇÏ2ø}Æ€&Š2…Ù›qcž˜  ( € ( € (¡@fnæ€ ¿+ õ¦Ž € (Юo÷E>€Y¤@PdÿTÿC@ï¿ùì(ÿXÿ_éW€*„P@P@P@P@P@Ï÷‡áý+!–ãÿTŸA@  Ò­˜ ¤@P@P@P@P@è?×7û¢Ÿ@,Ò € (²ª¡  ‰÷ßüö¬¯ô«ŽÀB ( € ( € ( € ( € (  çûÃðþ•ËqÿªO  Pi?Ö¿áLÒ¯øö~ßZ¯ùre]<¬Åp}þ”ß9Ì›‡QœqïPð8s³îPs»±@‘RMê˼2G\“ÛÛùP›õ+øÿ:–€ ( € (2y×ðÏô§ÐÛyçÿ×E€@Îdç9à}i€åÉv>üsý)‡w”ß7#<ÑÔ iè?×7û¢Ÿ@,Ò € (²ª¡  ‰÷ßüö¬¯ô«ŽÀB ( € ( € ( € ( € (  çûÃðþ•ËqÿªO  PYH¾H)€ÍËýáùÒܿޗûÃó rÿx~tn_ï΀ Ëýáùй¼?:7/÷‡ç@åþðüèܿޗûÃó rÿx~tn_ï΀ Ëýáùй¼?:7/÷‡ç@åþðüèܿޗûÃó rÿx~t%¹fÁÏÊ)ôÍ ( €'ú§ú¨Ÿ}ÿÏa@7úÇúÿJ¸ìT  € ( € ( € ( € ( € ž¼?éY ·ú¤ú uV“ýkð;S¿€ü©~ò ð•€ü¨üå@à?*?ùPøÊ€À~T~ò ð•€ü¨üå@à?*?ùPøÊ€À~T~ò ð•€ü¨Ð®o÷E>€Y¤@PdÿTÿC@ï¿ùì(ÿXÿ_éW€*„P@P@P@P@P@Ï÷‡áý+!–ãÿTŸA@  Ò­˜ ¤%Ýå6Ͻí@@òNÅ'Ê:p^”Á4»ˆÞrÚ6ýîOô  ãi …Xðœëé@P@P@PyýáÉ9ÏJ`!‘€cÀÇéE€]íÇxX )P@ƒýsº)ôÍ ( €'ú§ú¨Ÿ}ÿÏa@7úÇúÿJ¸ìT  € ( € ( € ( € ( € ž¼?éY ·ú¤ú uV“ýkþÀm (€Å±Éë@P3ד@ @P@P@!ë@s@ @è?×7û¢Ÿ@,Ò € (²ª¡  ‰÷ßüö¬¯ô«ŽÀB ( € ( € ( € ( € (  çûÃðþ•ËqÿªO  Pi?Ö¿áLÒ ÀÍ&ïZ @áÅ:€ ( € ( €»œPäzÐ<ô P@:õÍþè§Ð 4€( € lŸêŸèh¢}÷ÿ=…@ßëëý*ã°P‚€ ( € ( € ( € ( € (yþðü?¥d2Üê“è(ÔZOõ¯øS´€B21@T6ûö o4ê( € ( € L “@ ·’s@\÷  Z(Юo÷E>€Y¤@PdÿTÿC@ï¿ùì(ÿXÿ_éW€*„P@P@P@P@P@Ï÷‡áý+!–ãÿTŸA@  ²ƒæ¾ŽÙ¦pßß÷Ïÿ^0ßß÷Ïÿ^0ßß÷Ïÿ^0ßß÷Ïÿ^0ßß÷Ïÿ^0ßß÷Ïÿ^0ßß÷Ïÿ^0ßß÷Ïÿ^0ßß÷Ïÿ^0ßß÷Ïÿ^0ßß÷Ïÿ^0ßß÷Ïÿ^0ßß÷Ïÿ^0ßß÷Ïÿ^0ßß÷Ïÿ^0ßß÷Ïÿ^0ßß÷Ïÿ^0ßß÷Ïÿ^0ßß÷Ïÿ^0ßß÷Ïÿ^}¾DÍ’Ê;bŽ€Y¤@PdÿTÿC@ï¿ùì(ÿXÿ_éW€*„P@P@P@P@P@Ï÷‡áý+!–ãÿTŸA@  Ò­˜ ¤%.2Àg¨?´ <ð0õÏ<~”áq]Û¸Å=]\§8 P@P@P@P@%ʵËÀxeéï@`ÿ\ßîŠ}³H€ ( Éþ©þ†€*'ßóØP þ±þ¿Ò®;U( € ( € ( € ( € ( €'ŸïÃúVC-Çþ©>‚€@¤ÿZÿ…0HÈЩ8ÍDöÈÎXƒêçühÞB™çoë@i´Pè € ( € ( € ( ’IžP2ïßÒ€'ƒýsº)ôÍ ( €'ú§ú¨Ÿ}ÿÏa@7úÇúÿJ¸ìT  € ( € ( € ( € ( € ž¼?éY •&"5Yè;ñ 7A&3î?Æ€+´Á)œpW?ÖªÚž`þÿþC?ãE„`þÿþC?ãE€<Áýÿü†Æ‹yƒûÿù ÿó÷ÿòÿ,æïÿä3þ4XÌßÿÈgüh°˜?¿ÿÏøÑ`0ÿ!Ÿñ¢À`þÿþC?ãE€<Áýÿü†Æ‹yƒûÿù ÿó÷ÿòÿ,æïÿä3þ4XÌßÿÈgüh°˜?¿ÿÏøÑ`0ÿ!Ÿñ¢À`þÿþC?ãE€<Áýÿü†Æ‹yƒûÿù ÿÑNV<¶@íæh°}¨pþbŽQ‡Ú‡÷æ(åûPþáüÅ jÜ?˜£”[ʰyê?Ƥ–|DÙBqþ4}÷ÿ=…@ßëëý*ã°P‚€ ( € ( € ( € ( € (yþðü?¥d2+¦•m‰„eð(#$Ø!'$Æ?• ÷ÿW„%P ‘¶!oJ@5åÙ&Ò àcøQpÜ'@Ÿ@(¸ &CŒg¸àQp:…S‚w €ùõ¢à"M¾]NÉ>†‹€Ñ3|çåÂç±íJà(¸NpIþ´î„ÉÏ\Œâ‹€4ʧžqÅ¢áv’ÀŽH•À_´&pp=³NàJ ÐÐL€ (›Žö~U“éœÿ…+€ú` ûÿ‡õ  € (Ó,˜ƒ‚#þ•›ÜdhÒµ‰3 >)e>ûÿžÂ€ oõõþ•qبA@P@P@P@P@<ßyéY nþãóÌÐ1Ü¥w?Õñ Ïß<çÛqØAT2†R§½ "ùƒ3`zŸÇüh°!Ps“×?©?Ö‹tcޤzÑ`n ©Üß/zò(°X‚È\ÏQ@ŒÙ2pÙýh¢ ‘ëïE€_+ŽKdc€ÉÊ*î<qÞ‹y#³rHèqš,ù+êzçôÅê6¨ƒ´À( €$´*³Ì\€¡$ôêj$29JGpcŒ’3‚6Ÿ”úgÒš` ¹äŽ;.hn°}¿ïÑ¥Ì0Ø?¾ß÷èÑ̰}¿ïÑ£˜Ø?¾ß÷èÑ̃a@Üp?Õñ©†B¥Èþ™ñ  ýcÿžÂ€ oõõþ•qبA@P@P@P@P@<ÿx~Ò²'Ü_¥:€YŽ@éü9§píûàQp ´?ïEÀ1þÐÿ¾ÇûCþø\íûàQp ´?ïEÀ0¼?ïEÀ1þÐÿ¾ÇûCþø\íûàQp ´?ïEÀ0¼?ïEÀ1þÐÿ¾ÇûCþø\íûàQp ´?ïEÀ1þÐÿ¾ÇûCþø\ÚÒ/F6í?ç4Øò$ O8ùÎ:éEÀ­<çÛú@P@5þã}(O¾ÿç° ýcý¥\vªP@P@P@P@P@O7Þ_ÃúVCN¯Óû¦€wû/ÿ|ä·r:ŒSÔ€FÈS´} ÅD“æ0î»wt,•+O΀;oûgòmÿlþB€ ¿íŸÈP·ý³ù 6ÿ¶!@ßöÏä(ÛþÙü…Û? oûgòmÿlþB€ ¿íŸÈP·ý³ù 6ÿ¶!@ßöÏä(ÛþÙü…Û? oûgòmÿlþB€ ¿íŸÈP·ý³ù ©y¸µ¹ÇAøQÐ|.KïvíHËK¼€[ŸnœÐÆDyùcÿ¡?J “9RqÓq¨Ä[¼±¸äý1@ ŠG_OÊ€%µÿ–Ÿïé@ oõõþ•qبA@P@P@P@P@b_õ‰ÿþb²œ>AÁPR\ÄNÙV2Gf4-³#£ÕBçøzSj@EpÅ!fRAÀÍ1%pá6³É ß)ÀÇQøÐ}©€Såýð á»_΀®ˆ;DD°ûÀdþ\… <…”ª»™NO'öö Žè±Ëb=}ñôÅI ;—iô-P@P@P@ȬÒ|¸éÜÓè|©?ÙüéyR³ùÐasÔ)üúÔyR³ùÐåIþÏç@•'û?ŸÿZ€n¥ €ã9=? ¿Ö?×úUÇ` ¡P@P@P@P@P‰Ö'üùŠÈdRýïÀPì X÷eºí°¢àX·bÊÄŒr;cµ6î´€FPà 2(* Ç `PMoÆ9€äÇ€6ô÷ÿ9 1!èISÿë ÆvŽ˜ö HÖ<íϾhôP@P@P@3þZŸ §ÐÒ € ( 'ß“üö ¬¯ô«ŽÀB ( € ( € ( € ( € (  ÿ¬Oøóƺnô]аÚCã ð(U¸ŒHSÁ§p/ÿM?#EÀ2ÿôÓò4\/ÿM?#EÀ2ÿôÓò4\/ÿM?#EÀ2ÿôÓò4\F¸¾1ß"‹.Áêߨ=[ó¢à«~t\`õo΋€l­ùÑp ƒÕ¿:.°z·çEÀ6Vüè¸Áêߨ=[ó¢à«~t\`õo΋€l­ùÑp(Sžsîiê( € (‰÷äÿ=…Bßëëý*ã°P‚€ ( € ( € ( € ( € (Ä»sóôÚ;ý+!‘æ/ûé¨Ì^ÿ÷ÓP˜½ÿ裂1{ÿßM@b÷ÿ¾š€ Åïÿ}5‹ßþúj3¿ýôÔf/ûé¨Ì^ÿ÷ÓP˜½ÿ裂1{ÿßM@b÷ÿ¾š€ Åïÿ}5‹ßþúj3¿ýôÔf/ûé¨Ì^ÿ÷ÓP˜½ÿ裂1{ÿßM@b÷ÿ¾š€ Åïÿ}5‹ßþúj3¿ýôÔf/ûé¨Ì^ÿ÷ÓP˜½ÿ裂1{ÿßM@b÷ÿ¾š€ Åïÿ}5:=™;:`ç“×Z…¿Ö?×úUÇ` ¡P@P@P@P@PóýáøJÈbˆ›˜pI DH“¦­°²aW€ÿª³m?Ž( €Ê§« v¸ ¸çÓƒü ,8Dl:àP|ž‹×¼\ uþT¹>¦€€l^2H)Fh «Àx:;'ÔÐr%zo˜ŸÞþt¹ S@Éõ4XäšieІàþ´);G&€'ÔГêhÉõ4dúš2}M>¦€ ŸS@O© §ß“üö¬¯ô«ŽÀB ( € ( € ( € ( € (  çûÃðþ•À’*2ØÅж±´sH˱·6oxnJE6™b_»þ})’A!Ó'¼_æ(£Üá²rpN=ùªSåÒÃQ¹a±¼ãÑ¿ôR"[¢7»n\s@¼œÉäy˜“®ï˧åš»].hõ‹øÿ#@ @J޾ÁŽHÿv“*"® ™¡_á#ñš·$ã ‚O̼žüŠ:€#õmõþ´å@Gþ­¨Zo?6:ÐldŠšãµ=~è P@P@ÄûòžÂ€!oõõþ•qبA@P@P@P@P@<ÿx~Ò²nƒÐv4qÅ3",r~S@s¸`ïØúPybYßl”Ðì‹|‘ެR••‡`“Â0á»CL’YãŠgýâÚÙ) )”I´îí4îÖ]píí@‡PxVX÷©;@?tõÅM­…;å“q÷LÐ!r PýáÆÜw P*sÖ€審ü¨ÀB*’€œ1Í0¢‘‘@]ª0(WîŠuP@P@ O¿'ùì(ÿXÿ_éW€*„P@P@P@P@P@dÿZŸUþb²nbIórF(ËÏY?1þe¿ç¬Ÿ§øP–ÿž²~cü(ËÏY?Oð -ÿ=dý?€ ·üõ“ôÿ 2ßóÖOÓü(˜)>kôöÿ llíœÈÜc¦;¥?-ÿ=dý?€ ·üõ“ôÿ 2ßóÖOÓü(ù¿ç£þŸá@Íÿ=ôÿ >oùèÿ§øPóÏGý?€›þz?éþ|ßóÑÿOð æÿžú…7üôÓü(ù¿ç£þŸá@Íÿ=ôÿ >oùèÿ§øPóÏGý?€›þz?éþ|ßóÑÿOð æÿžú…7üôÓü(Œì²Æ¾caŽq@ €ååÿxÿJ¿Ö?×úUÇ` ¡P@P@P@P@P™?Ö§Õ˜¬†G)+ ¬ÜE5¸¼Ò,‰•*õëȪIîdQó(Àϯ­ªÀ"Ü¿#fìOÓ'ü(å@K¬Ì7†$ {RhdÕ P[î¥$}Ñ•AÈ óq$ FjÚW°„[‡f8^@Æß|ÑÊk‡ì œŸj9PjP@P@P@P@Iþº÷¿¥}éÞ?Ò€#oõõþ•qبA@P@P@P@P@fOõ©õ_æ+!‘³Æ7+º˜ä@^ —Œã§"Àoú7<Çϸ¢ìýŽcã‘È¢ì€cœtäQp΋þz'ýô)yÑÏDÿ¾…t_óÑ?ï¡@ÓE´þñ:xP²"d3ªœ/SŽÔoƒfÍé·¦2(¸ ÿFÁÜS»Í¿4/NE`?΋þz'ýô)yÑÏDÿ¾…t_óÑ?ï¡@üôOûèPçEÿ=þúyÑÏDÿ¾…t_óÑ?ï¡@üôOûèPçEÿ=þúyÑÏDÿ¾…t_óÑ?ï¡@üôOûèPçEÿ=þúyÑÏDÿ¾…t_óÑ?ï¡@üôOûèPÑç‡k+|ݵ:½/ûÇúPmþ±þ¿Ò®;U( € ( € ( € ( € ( €,Éþµ>«üÅd0 T6 1 HOG?.öþñüèÞßÞ?'˜AÆãùЗ`3¸þtooï΀ íýãùÐ;6ÆùOZdDØ$p¿Ê€$'£ŸÎ€{gç@öþñüèÞßÞ?ÛûÇó {xþtooï΀ íýãùн¿¼:7·÷ç@öþñüèÞßÞ?ÛûÇó {xþtooï΀ íýãùн¿¼:7·÷ç@öþñüè)I3C’OÍý( ûÒÿ¼¥Fßëëý*ã°P‚€ ( € ( € ( € ( € (ÌŸëSê¿ÌVCFQÀõ4Ò§žI *Ûxϵ(pÈ=y4¤F3žôÒ§iÇSšp1ç@ ·Ü?JHú¢ÿ*@¤GŽs@¹È4n:ô  h € ( € ( € ( € ŠOõÐÿ½ý(ƒïKþñþ”¬¯ô«ŽÀB ( € ( € ( € ( € (  2­Oªÿ1Y /¹‚ªõlJ3/÷þú?á@eþâßGü(Ì¿ÜOûèÿ…—û‰ÿ}ð 2ÿq?ï£þf_î'ýô€ ËýÄÿ¾øP|ÒÚœÿ´€s´)§Ò€ ËýÄÿ¾øP™¸Ÿ÷Ñÿ 3/÷þú?á@eþâßGü(Ì¿ÜOûèÿ…—û‰ÿ}ð 2ÿq?ï£þf_î'ýô€ ËýÄÿ¾øP™¸Ÿ÷Ñÿ 3/÷þú?á@eþâßGü(Ì¿ÜOûèÿ…—û‰ÿ}ð 2ÿq?ï£þf_î'ýô€ ËýÄÿ¾øP™¸Ÿ÷Ñÿ 3/÷þú?á@C™c,ÝŽ¥}éÞ?Ò€#oõõþ•qبA@P@P@P@P@fOõ©õ_æ+!_¼ÿïuP@P@P@P@P@P@P@ ?y?Þ A÷¥ÿxÿJ¿Ö?×úUÇ` ¡P@P@P@P@P™?Ö§Õ˜¬†5~óÿ¼hÔP@P@P@P@P@P@P@4ýäÿz€Þ—ýãý(6ÿXÿ_éW€*„P@P@P@P@P@$âDÿ€ÿ1Y nT¶ñ¸ÐíÞÌ…G÷Ÿóá@ ´y¿1þ›G÷Ÿóá@ÑýçüÇøP´yÿ1þŒŒ–Ì…3ÌOY?Ïá@˜ž²ŸÂ€1=dÿ?…bzÉþ <Äõ“üþy‰ë'ùü(óÖOóøPæ'¬Ÿçð ÌOY?Ïá@˜ž²ŸÂ€1=dÿ?…bzÉþ <Äõ“üþy‰ë'ùü(óÖOóøPæ'¬Ÿçð ÌOY?Ïá@˜™ÆdÉÿ>”ìúkþ 2?é¯ùü(Èÿ¦¿çð 8ãÖ€½'e_€#oõõþ•qبA@P@P@P@P@b_õ‰ÿþb²‡ï'×ú†YÌr•8Ppz·^å@ GÊ®rHq@¹BxÝŒ€N8ç§ó ­äMÓ'Óæ€] ‘J[¯±úÐ…ÔeA\œœ`b€$“”Qü蜲uQŽA= þT¦PÈ9'ŠCpŠ2r=ã4Ö¹rŠ[¥OÝ~£ùÐ 1r©Ž99 µÂ#l‚h3ª‚H#‹:³Þ9ôÁrI\䎃éþ4ñr™ O&€’$xï@OÒ€!œÅ@$wúÐùÀmÞ˜ ­ÆBåOaøÿ…8Πg Ç^:PËþ±>´f€ ( 'ß“üö ¬¯ô«ŽÀB ( € ( € ( € ( € (  ÿ¬OøóÀŽ„uÐ@]åóÉ{c?ã@ ò—j…r¥IÁgšb[¢³|ß.A ž8Ê€° ÇÎÄ)Ž( ’IsÔ‘Èà’ó¦%+ƒ+{œŽ¥:B6`ãùÐybùÁÜPŽ1@ xÃ+|Çqdš<•þñÜ:ôÿ94¾R•a¸üØç4þêç#ùÐIÍÅO|w ¤Y[ sÎxÉ yK×qÏ®y Xz3cŒŒõ [ ÆŒ{ý?€DªrQž´å@¬[q9ã“@PYŽ=(6‰IÃ30ô'§õ F¡ƒ%‡sŠE…©ÜNÞ™?_ñ <9$)ž§w¾­XCûÄúЪ( €Ÿ~OóØP-þ±þ¿Ò®;U( € ( € ( € ( € ( €,Jà@Î0•d1¹îÌÿ…!ÜzÄùúPm?óÉÏá@Óÿ<—üþm?óÉÏá@Óÿ<—üþm?óÉÏá@ ƒÿ<—üþǬ`ýýT›Oüò_óøP´ÿÏ%ÿ?…Oüò_óøPàŽ‘/ùü(;XÁÿ?JM§þy/ùü(Úç’ÿŸÂ€ §þy/ùü(Úç’ÿŸÂ€ §þy/ùü(Úç’ÿŸÂ€n#üý( ž±/ùü(6Ÿùä¿çð iÿžKþ 6Ÿùä¿çð ȉGùúPåÿ¸?3þeÿ¸?3þeÿ¸?3þeÿ¸?3þ±†ËÏ?Ê€!`w±ÚpOaíT˜ ƒýÖÿ¾MUЃû­ÿ|š.€0ºß÷É¢èû­ÿ|š.€0ºß÷É¢èû­ÿ|š.€0ºß÷É¢èû­ÿ|š.€0ºß÷É¢èû­ÿ|š.€0ºß÷É¢èû­ÿ|š.€0ºß÷É¢èû­ÿ|š.€0ºß÷É¢èû­ÿ|š.€0ºß÷É¢èû­ÿ|š.€0ºß÷É¢èû­ÿ|šW@V7ó“Õ*‰öéýGå@Û§õ•nŸÔ~T}ºQùPöéýGå@Û§õ•nŸÔ~T}ºQùPöéýGå@Û§õ•nŸÔ~T}ºQùPöéýGå@Û§õ•nŸÔ~T}ºQùPöéýGå@Û§õ•nŸÔ~T}ºQùPöéýGå@Û§õ•nŸÔ~T}ºQùPöéýGå@Û§õ•nŸÔ~T}ºQùPöéýGå@Û§õ•nŸÔ~T}ºQùPöéýGå@Û§õ•nŸÔ~T}ºQùPöéýGå@Û§õ•nŸÔ~T}ºQùPöéýGå@Û§õ•nŸÔ~T}ºQùPöéýGå@Û§õ•nŸÔ~T}ºQùPöéýGå@Û§õ•nŸÔ~T}ºQùPÿÙlibstruts1.2-java-1.2.9/doc/images/how-to/netbeans/building5.jpg0000644000175000017500000011130310404045214025067 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„   (1#%(;4>=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀc¤ÿÚ ?Óñ³w¦Ïn–î4e› œ@­iÁI;‘)XÍ_jf=þfÑ>dÛŸÍë_ayÈ.1Õ‡SäßãUì".v(ñ~®T°òÈNÖ—°‡pçbŸë*»Š SÜ«cùÑì#Ü9ØßøLu_X¿&ÿ~Â!ÎÃþWÖ/É¿Æaçaÿ Ž«ëäßãG°ˆs±ÉâÝbLìØë…cÖaçc›ÅzÊ®æUUõ*Øþt½„;‡;ñ^²ƒ.ª£Ô«ëG°pç`|W«„B…=ö¶??açbj§¡Œþ þ4{‡;þýSÖ?×ühöv=2Ñûëü~´{‡;ž+ÕáZ6=NRöv'ü%ºž3º?j’Ȩ›YÜáTÉ'ñ¤èÅuhÁüK©#²1Ue8#ƒß½?aöŒOøIõTýÆaöŒwü$Ú‡8)ÇûßãG°ˆ{F4øŸQìcüÏøÑì"ÑŠ¹©ïwØnÖ²)êñéѼ&XcŒ®õ=9<‚*©¹=Å$‰ ‹O\L°,ò7˜$Ý*«©ÏË×ÛŠ—0+X|ÖúwØÛË0¤æ8÷ÙT©_Sê>´“•ü†Ò±m-4µhŒ¿g%fuûë‡]„‚@>¢§švÐ~éR(ìeŠ-ë™mß\gôúU>d/t¼ÖÖV·à¼pC²[v„†ó‚Ùç§~j¤ã÷¤™Zå, .é NîÒ—o5AVÜqŒóéÒ©s+ ÒÇ=þy­ÌC `ó@Ï^”cŽùüèýsøæ€ ó×4à±×üÿŸæ€Sß9#éþ4£··é@ùÍ8P@( ß΀oÒ€óþÏÿ\óùÐï@ÅS“ך:€ ÚñÚ¤Ñ2ܘ6G·„Ýœï\têr\è”nd'„d;5IpÁÄXÏëWíŸõoò ÑàÜ@“ïÿ^š­g{ ¿ð‡ÿÓ÷þAÿì©ýcÈ^Ì?áÿ§ïüƒÿÙQõ öaÿý?äþʬy³þñÿ?ÿùÿ²£ëAìÃþñÿ?ÿùÿ²£ëAìÃþñÿ?ÇþüÿõèúÇ{0ÿ„@Ïñÿ¿?ýz>±äÌ_øDüÿûõÿ×£ëAìÃþÿ?ßùÿ²£ëAìÃþÿ?ßùÿ¯GÖ<ƒÙ‹ÿŽ:_ä/þʬy³øD±Òøÿߟþʬy³øD‡üþÿä/þ½Xògæ/ü"Kÿ?¿”_ý•Xògæ> < ZEÑŠ•%cÆAê:Ðëßtžcáç?m?÷èsúÑõ ö`<(ÿÓÿ~‡øÑõ!{?1G…@éx@ôò¿úô}cÈ=Ÿ˜Â*§­áÿ¿ýz>±äÏÌ_øEÆãóÿ!süèúÇ{?1áóú~¾Wÿ^¬y³óøF=o?òÿ^¬y³óáŒËçþBÿëÑõ ö~bÿÂ29ÿKëÿL¿úô}cÈ=Ÿ˜ ùû?÷ïÿ¯GÖ<ƒÙù‡ü#@t»ÿÈ_ýz>±äÏÌ’]I¤/5ûÈÄc,™¿/ÿ¯G·ògæðùùÿÈýz=¿{?1FÿOGþøÿëÑíüƒÙù‡öý=ä?þ½ßÈ=Ÿ˜¿Ø#þ~OýûÿëÑíüƒÙù‡öÿŸŸüsÿ¯G·ògæØCþ~Oýñÿ×£Ûù³óûÏÁÿ¾?úô{ ö~aý†?çãÿ!ÿõèöþAìüÅþÄÿ§üsÿ¯G·ògæ؃þ~?ñÏþ½ßÈ=Ÿ˜ ÏÉÿ¾?úô{ ö~bÿbùøüÓÿ¯G·ògæØßôñÿŽõèöþAìüÅþÆÿ§üsÿ¯G·ògælOþ°º¿ÈW9©ý©/t?tßy †Îg>”«®[(ÄçcopqÐì Ÿ®ÚÔ  ZãY$fYve |¬{sÚ€!“VX­ƒó$ã;í8Ï"€$Ó5~Ó-”FF ‘š¿@EóEØ<ó/–S=9äý1ý(8µ»GòT¿Ï")àq’׸üècªZ€~s‘™ŒsôúûPµ9PGqš«¨Ý5¤Q²y`¼3!ÂŒçŸÒ€!ƒV‰ƒ, «¢—b£+´7gÓåýE+êÐFÀIº,d²È¸ c"€=^ÚTò>HòÐe†1Ÿæ?:’Æ÷ípl‹T°Æá´þ¿Ê€-Ð%¶½¹b{…@²)8@Ù_”·9àôí@ïu5¶˜Dƒs‚ä>E./c‚%m­ɹ†2Põqü¨ígG6ç’TŒ[‰Ì ©;Ý´øãó Û^µeS /—QŽåIÆF(ÈÔíü¹œïDfI^T çñàЦ¡Ü,+¿.̪Û~V+œóí‚(ÝT–ø@÷ (Æ¡ÐãSÇç»#OZˆëÑ9ŠvÛ*.\/ 0"€uKqåq'ïeù{zý(±ê‘ón8b•NÕùˆü¨?µàdRDÞʺ`0,ãþú,z½¼‘«…•w¨hÃ& ƒÓ˜üèÍ­Ìwq—‹vÐÅNáŽGZ”ç{P|ó•®‘Y|¥X²K7ã@RÜ âL—ùÕŒ‘ózrähj±¹Du`ìXaF@ˆþ”¡@\Ü}áÜÇ}ŒÄôô  ù5½–rKålp~U~ë‚ÙüüEY­¿ÌXHЬÊ—Š’‘ G«#Í,~L»€¨æÉtÑÜ3”ð7 >lþ”«¤D¹%u$ü¸fÆqÇ,zPRÔâ‘ã…âYÌ‘I¹|™+ã cÐ `×q–îbfÀ6À_iÈ'nGá@l,ÇxŽGe}¿+c‚3ú ·@»™/žäi—EÊíÈ1cë÷þŸ Zé1Z´~\ŽBåH1U 8Ï@8P†•l½%ó:Ëéßð  ÔVþ!$Q“ “yr›rzÿxŽh4¶K¥œÍo,XÄ-•û£<¤ÿxÐ2étêóLÒäîÀxÀ2MJ4Ý»].dY—?¼ ½21Œv¨{kQló‘ØHÁ°Ç8!@ëÔôhÅaÁdì±[Oo|ÐF6&ó1·?+dðhËhѼÞl·<„‚IÇ8Ç·({m9-§IVYGFˆH© ãÿëÖ€.PG“$W2m{4>i&b »9ÏÞ¯#4*èѬkžP¨WËÛ´ƒÏÔÐ&‘H†âe3#,¬¸óŸn9'¥2 >tÔVC„‚'wEnÎìçŒ dœõ8é@´ö±Ï428ù¢lcø€~ PiôÄv™Ãɶ@Å‘Bä’1Ôóøg}”Þ*3­Å·—…ØÅ `9N> ƒúP4˜Ô²ÈÛ2'?ÌXsŒŽOjVÒ¡d·Bïˆ>ïN~enú^Û{qnKKmŽ=Φ9<~_J±¦ÛIknË+nwvsÎqŸ~ôhœ@'…fÅ NY µÕ¹2™–W1­Œtþ¢€t˜Ê²‰¤E+7OÞŒ“ÏrÍÓhÃLUhöÏ(TbÛxä’O\duí@覤žm·—öyf åžÜ¯¿ÌETšÙoä -…Ì bh·“@<1Pž:}À'þú4fÞ·"LáF2zŸzeìB{)â*ì á1¸ñÛ€)µþ@–Ó:ÆÅYÁ@8ëÕ…X·™n-ã™3µÆ@=G±÷  (‚©f ($ôØæŠ\ùR#ã®Öúª×ñ.NP(hfI”•ÈÇc@P95Õʨ }Ô5½ÂÜ‚½hj­ö賂 õÀ  4Ýþ¹7ô  §m®Ç8Á'“€8<šjôþ/øZç :ÄÀÃ!½è†q38U8S×Ö€%  WzœV xܬJÜ 3œ˜Žx4=µÔq -åI¾ÖÇ5E4ëç–= †e™2½GQé@PiïReÁ,½²: ¸çm«ØÎ O@§»XdÙ·'Üâ€%†d˜½GP{P”·ÄpÄ“è(¶÷"fe# 9â€%~ƒýåþt¿òÈõþ>zš@rÇœãŽO€u 9Àè‹s:¨n[¥K@Ï(†"ägî{  o0ž-àm ᔞTÓjÎÀKH€Žv?„àШ»Ç™å÷ÆhÔP†—ÿð7ÿÐRŸþ>£ÿpÿèuÇÏÈ黓ӧ< ugÛ\[—m+¦äžFÚO8âª.À&ð –Þ(Þ,±™Q› +tvÕª@¿ f‚6Ö €ØÎ­`Ä–Ba%ÍÔ‹v–wX•Ç¡1ç·?Ò¥rî‘;Ïu|YüÕC$¿ßw'ßž>ôÓ  uÆÇAŸÈP½?¬Ÿ…X¹ÏÙ¤Ç]¦€2äŒç×€/iñ”¯*Š·94Ÿ¬Ç3þ<ìDbHl=ü³T¥Ê™2ØÇÉÍ'ï d‘™7`íïÉÏÓùT9wìt¶ÒI-º<±ùnÃ%i–A©cdyõ  ¬§p,ǽmÐk‚ñ9™vŽ;¤.%iÆduÉû¹éí@Ô¡¥ÿÇŸü ÿô#@§ÿ¨ÿÜ?úBÀäàqß­>€äÅ–aq†p 1üzÐmíâ¶!]¡Î[ß’Gåš–€;€Ä­˜õb~¦€€#h"f$ƤŸjr"Æ0Š{P¨!m9òÅK@EöhçšþT""¢íPôÝþ¹7ô  §Ï˜qœî<ç§¾(«Ó¡SšBŠX1Q¸t4**’U@'©€@ xÒEÛ"+¯£E$pÃ&("Œ‘‚R0§€ Ð]ÆAô$iÜP3@ zoýöøŠ3ªÏž›ÿ}Ÿþ"€ êŸóç¦ÿßgÿˆ :§üùé¿÷Ùÿâ(Ωÿ>zoýöøŠ3ªÏž›ÿ}Ÿþ"€ êŸóç¦ÿßgÿˆ :§üùé¿÷Ùÿâ(d»×"@‘A§ªŽÂFÿâ(üÿ|º¿ÈPk‰LJ»vå›1À¦•Àb]¡á²O¦2FJn )º@~l¯\†Š\¬]FÃå Çû r?ÎGçE€t3ùžaÚT#c'¿5`öµ/Tb¶ç8?áO”GsŠs‚»†GjV‘Þ+¡bŒ>m c­7;3ʉ˜OËÛÞ•µ° [˜ÙwqôïéE˜ k¸‘™X‘´ÓÓ­>V}²!¸¶å q’¿çÖŽV×h® sÁ#ñͬ xÚ# ?(ëíJÏ`ö”È]¯»û¸çüóE€OµÃ»»g=ºfŽVö¸¶äî^„99§ÊÀI/#X‹¯ÍŸ§nÑÊîŠ ( € ( € ( € ( € ( € ( € ( € ( € ’¾?Ý_ä( #Y6îè§8¦€k@Œ_=Bàv?ãEÀ‰­7I¹›w«dúqO›@-¶à¬Œgæt8íÓ°¥p^^ü3Ç<öã6¶ Ÿ1²­» ô#úÑpl hØmM™îEÚÜû(”63ž€ÓæÏmƒ‘ó|ÝO“h[ª7·ËÈíƒëÅfŽÄ–n¤Äÿ:jMMk½NÓóÏòÿ ¬›4c¹˜–=N^1ÿ Š9˜/’c$zž”¯­ÀŒÛ7œ®%làå¸ÎxÇÇj|Ú¢Íü¤…Æ1luëÚŽf½ª¾ß˜‚ ø{RæÑJ‘½€# Œ òOõ4ù€œ3“š€ ( € ( € ( € ( € ( € ( € ( € ( €&œ½ÀQúP4P@6¡ö™ÒÞ;r‘>Ì»Oöôß·jŸóÊÏþûoð íÚ§üò³ÿ¾Ûü(ûv©ÿ<¬ÿï¶ÿ >ݪÏ+?ûí¿Â€·jŸóÊÏþûoð íú§üò³ÿ¾Ûü(PÕK­0~û…9ïuTvSŸ}¿Â€íÚ§üò³ÿ¾Ûü(ûv©ÿ<¬ÿï¶ÿ >ݪÏ+?ûí¿Â€·êŸóÊÏþûoð íÚ§üò³ÿ¾Ûü(ûv©ÿ<¬ÿï¶ÿ ö¨IU§?}¿Â€·jŸóÊÏþûoð íÚ§üò³ÿ¾Ûü(û~©ÿ<¬ÿï¶ÿ >ݪÏ+?ûí¿Â€·jŸóÊÏþûoð íÚ§üò³ÿ¾Ûü(ÑÞj²J±ˆìÁ9þ6ÿ ±_û¶_÷Ûÿ…Õÿ»eÿ}¿øP_û¶_÷Ûÿ…Õÿ»eÿ}¿øP_û¶_÷Ûÿ…Õÿ»eÿ}¿øP_û¶_÷Ûÿ…Õÿ»eÿ}¿øP_û¶_÷Ûÿ…Õÿ»eÿ}¿øP_û¶_÷Ûÿ…Õÿ»eÿ}¿øP_û¶_÷Ûÿ…Õÿ»eÿ}¿øP_û¶_÷Ûÿ…Õÿ»eÿ}¿øP_û¶_÷Ûÿ…Õÿ»eÿ}¿øP_û¶_÷Ûÿ…Õÿ»eÿ}¿øP_û¶_÷Ûÿ…Õÿ»eÿ}¿øP_û¶_÷Ûÿ…Öü³±?ð7ÿ ן§ýóÿ Ð6¨n Õ¬Våþ`å•dÙœc¾­Wº¾¹‰ ¨#š8[såˬyïÃcõ  ¶Úâ[,®QÙœ…œ¯¯Z¾ú•ÂK$!ób ÎÄ•Bªñé÷ÇähýœÆâÎ Ø2F®@푚Ê_øû½ÿ¯ƒÿ -U7¬˜„Ê͆$vê:Psꜗ"5ÜÛ¾SÓ€ÇúPï/$‚h‘6€èX’ŒÝ1Ø}h·šÄƒj“É ÅN2“@ ‡UܪÒDãs:…“† ;ûÐÍ©BŠÅ–L %×nJë@ƒ[³…s@¥4‘9ò¶ïy¶ ÝMU}I-ò—8†Û… Ær2}Å$zœLÒËV\*üNhf¾‰J€™Ô2¨œçü Gý©Âád*¹ÜBýÞHçêA -J68(ø à|£'¾hHobšQ”º’8eY_¼ÿîç@—Z”–óÎ0»!ÁÆÆ%¸¨àu  "þ6$r±ÜP¿xŒçúPJØ!rÄŽ£¶3ŸÃò MB$8Úíóì“ßë×ô4ßíø)#ÉfUáWß&€$[èžuˆù˜ª¶>RFsùb€.ÚÇäC@î$1BXmÎ@Ët SŠ»‘Ý);[¨ÉÊò鸀´wesÉÜ;`œþ”r°»ÇÊ 6q´`ŸçG+@>Œ²H»BãŽ´š°µØÀÙ·Î¥>P$Žá$ (nsŒJV°%ê²Hå*°=ò¦ãmLÓ"Âel…œÒ¶¶Ôº“vHà÷Áôâ‹0îâI6>Tãœö§ÊípöØðÄ«€£9#¯þTr°î•Jä÷ q‚súQ`ÌRFî>÷|~TœZv>Ô€€QÃÂã“×ü >Pí†UÝÉúqG+ûda7°dÈÝÆGù#󣕀ŸmŒÄ]2ÄHâŽW{Ëw"ŸQš€ ( €Q¾¶³ .&XËÚ–€2®5 ëoÚ výÝëœP}»CÊÖùU §g@9¥"Þèk÷M¸äéíì(—wzMÑSöÕ ¼íE;Ž0 ܧ°í@"Õô¸aH£¹@ˆ¡TsÀ(œG4·rÆá£iÎÖì~U 5¬%ù”ùdî1dm'צ â€"}>"14ò°B¦W FAÆ{ž¤ÐÓ@²J’%ÃÄÊ¥r›y úP2éðKóÉ‚I 0$`ž”.Ÿ²1•ÈG, ‘– {zÖ€#»±gw0:¯›‘#0pqÆ1ÓQ@[jÛ” ûø’yL¦2²n ¤d}ó@œgNâQœËò–9ëÔc°íÚ€ìnlÍ!F`Å äß·­E-ˆP‹L0¼€8ÇÊG|t N/—å‰P ó[Í99b@Æ9ÆãÜg½\K+tÐHØr ÉŽh++W†àI#¨DBˆ‚MÀAôÆ=ÉÏ^(AfC‘£ùÐI,ÒY%?hp“¬Œmà c3ÓÐЛX‚"Ç+FÈÌÊêFAbIê1Þ€gkòg"•ÁÁ_Ìþf€¬â0$+;¨Q‚A·©9Iç=hP;÷ûÔ(Ù`x4VŽ·ªåÕaÙ‘D™äç<`uÎzœv  [6ò<x4¥$bE Ýò9¦€C–$ÿwn=¨¸µ b¡˜²Ž}0F8úš|À?ìýšûÈn8ü1Ò•ÀtpˆÙˆf;±œœÐÝÀaµ\“æ>r0xã>œþ4ù€wÙ×j€Ì»s‚<Ò¸ KE $Ž£NÔù®´E0Wœcwñ~t¹˜ÙÆÜ3» çœ .^Ñ\åúäò9=3MJÀ$¶Šñ:©;ˆã=3·m B­¾ó;väöÁÿš „ylŒÌáø$ÿõ©_[ "kR]ÍrÀòÇã;Óæ‡­²¡]ǨÏÞúÿõ¨æT*‹–ùjž=AÏè)sj¬¤$aŽy#ÓÿÕOšÀL«´c$Ó=ª@Z( € tè$¸°@ˆIÿfª*îÀTžâg­¤³>Ýø‰K`gµ£„S°ˆä¾†$/&vˆ¼–hÎüérÀ Æ(ÁˆqîÆ­R‹ ‡•üò™ÿ=”BáåEÿ<‡æÆe¸×·‚Lo3“ýhöQ û§üúÅùQ좱ÚϬ_•Ê!pû§üúÅùQ좱ÚϬ_•Ê!pû§üúÅùQ좱ÚϬ_•Ê!pû§üúÅùQì¢ijI&Ú"O|=”Báö;Oùõ‹ò£ÙD.b´ÿŸX¿*=”Bâ K3ôh¹éÁ¥ìâ²YñþÎvžž¿­Î!pû-˜ëkÀÝÊž”{8ô ‡ÙlÀ'ìÑp2~SÇùÅÎ!qM­¢ ´`q‘´ÓöQ ‰öK?ùöˆò zŸÿ]/g¸K1ÿ.ÑuÇÝ=höq ‡Ù,ÿçÚ.¸û§­Î!pû%ŸèÑrp8<ÿœQìâifqþ=84{8…Åv/ú4_0ÈùOO_Ög¸%½ª°)nŠHÈ Å?e¹R}JÒ™-þË4yjHýê\"µ£Tµ, Ù\.â,„\‘ó —œíP£Ëàj7PÚ¹IÁAä`eQйz…ëÇ4s;=ÕÕô±Â'„aTçošI9v’qÇCŸZm´ì†IåðíÜ×nv†B6®Ý£W|·Vy¹½ŸË‡d$ aˆS9Æ=±ëR¢®ÆSŠþò8€ŠH£ –ÛnöÀù@Úsô4“h su%ôÐ%Ò*Û&v`wRã’¶E]Ýì!³_ܵ¡¹óVÚ6lb£7ÌAÎF\u¤äì2¯Û.!7L—J]æ{I¶1˜òq’óŸÏš›µp%[½BgEûHŒ“ŹË˜·ÓŠ|ϸA¨ÜKqk¾u_3Ê“êpFHÆySÜ`|À^ÑÐGa° šUÐ UGa¶äƒ¼sÈ#<ŽOR¸Œ(îNJõéó:ú 76œù²W§zuö  ðW#ƒòçw·$úSÛÎ+·ÐGÓŽI¢öQ·)a~QÀéÀãó4½?¯øN Àùp°ùG=è¸W »²1Œ:{Ѐq'ÜrÝŒûpëE€M¹# œóÈÆyêxÿõÑp:dðÄ•ëÓægÿú ª{ ÐA@P@P@P@P@©{qöw-±œ˜ÕB¯RIZ想¹Ft—Ë/šö;öíÊÊSø ÒNÜCZHJ¾ŸvÊz«\ÈAü7ÔÚÃRÁÔÜ’~Å??îÿhªE+ƒûIÿçÊüwüiûH…†Gz".RÆa½·7#“ÓרQí"ý¤ÿóå?þ;þ4{H…ƒûIÿçÊüwühö‘ –ûÎ‰â’ÆfGR¬29ñ¡Ô‹ šÊ}ª þ¹£ÚD,;ûIÿçÊüwühö‘ u& ±Oùñ£ÚD,6;ï*5Ž;•W€2?Æi°ÿí'ÿŸ)ÿñßñ£ÚD,ÚOÿ>Sÿã¿ãG´ˆX?´Ÿþ|§ÿÇÆi±½ÚÛB"†Æu@IÆày''’}M%8­Xx¿lô999 Ï¥ñ>ÞÜ¡L{’BrxçëÅÒ!`û{qþ‡7ä}~´sÄ,onÖsû}Þ<ýy§í"·°ég8ôÀ^>”¹â·°ég0ÀQéúQϰ}¸ÿÏ”Àczz})ûH…ƒíäç6Sõá9ŸJ^Ò!`7ä’M”ÇqÉáy£ÚD,(Ô#ýcÎNBséš9â_·èSÔä''Ž~¼Qϰ«¨2ŸøóŸßîóïOÚD,T• šie{[õyH'ʘ' `túT¹.áa« ²º1µÔŸcîw Žœ›Ç¸Ö÷-s4… xŠ©>:ü§úŠS’i$¡'ü|Ïþÿôtö%h  € ( € ( € ( € ( € ÑÔÖ§Ñ?š×!C&Ù¢ân¬(ä%6È‚DÂd²œtÏqň¦£`ó¼aÔŒ9cN1Ó¯N:óEã{¯¨é‘¨ge\‚v˜Žî1Ÿ—î?h¼@y¼ÓÕUŽÜ7o(åÞùQx³c >Tgæþèö¬jî4Yû<óÆ?ûäVc³ÁÿÏüñþù}žùãýò(û4óÆ?ûàPöh?ç„÷À ìðÏÿï‘@Ùàÿž1ÿß"€³ÁÿÍüñþù}šÿ,cÿ¾Ef€Ëÿï‘@Ùàÿž1ÿß"€³ÁÿÍÿ–1ÿß"€"º‚´˜ˆcÈŒÿô  {oøù¸ãô脟ñó?ûÿÐVôö ÐA@P@P@P@P@£¨ÿ­O¢5®B†½½ômæ[Ú´ñÍg(ê»p `äŠ]/I¸}Pj‘˜<¢|¸÷$•Á$ŒŒ`ž?—p‚€2.mOö¬×<ñ¢·¦ÝÇ9ÿ~•ÑM¤·2ÃÁŽâRFÜX `Þ¼–ê3ÏÞý(²î…Ò]'Ѭ@ˆ@lá`öÁü8À¬º€Øô§1]<é2 q·®î ,(³µŽ+}’E ¸b 4@çß'g6Ó²`L`ƒþ}­ÿSü*y¥Ü,…ò ÿF·çþ˜¯øQÍ.ã°y0ÿϽ¿ýùOð£š]À<˜çÞßþü§øQÍ.àL?óïoÿ~Sü(æ—p&ù÷·ÿ¿)þsK¸“üûÛÿß•ÿ 9¥Üɇþ}íÿïÊ…ÒîäÁÿ>öÿ÷åÂŽiwòaÿŸ{ûòŸáG4»€y0ϼ÷éÂŽiwòaÿŸ{ûòŸáG4»€y0ϼ÷éÂŽiwò`ÿŸ{ûò¿áG4»€y0Ͻ¿ýù_ð£š]À–Á58ü¸ãLÆùØs÷})ݸ»‹©³P0 € (+ÏøóŸþ¹·ò  ;oøù¸üô脟ñó?ûÿÐVôö ÐA@P@P@P@P@£¨ÿ­O¢5®B‡júŒ¶Z}œ0$ž3ó•Ý´*‚xîMTV U´ñ;[0¶Ô`¹–b©"¼Póµº8öoQ½{qp*4Òçfóò€:“R<úÖ©nºY€ÿP>è~ÎqugÀR¢XÕžÙÅ6öäZ[Jî;•}Y˜*ÌŠŽ)/•gŠ&çcFNÞóÈÿëÐU­ÇÚ óúof$zóM- 3µ”y"¶1—œ 1 \s@‹Oo¨Ee¬;Ö<7c"Rq“ꢀ ¸Ôn%„«J±uP1ÌŸ> —ÓšÞ3D&TOÌ8Ç_Ê€@P@#p§”V‘mâg-¹ÈÎ[5rZ»-Ó˜ÉdPØVð8çéK•-£´b’ÜŽ‡“JJÌ\Þ½…Ä3$-1$&ÕÿiÐ_Ï×ÂÅÔÒ“WB×1[Äí,ýá…È磡êqÅHÈ.¼Evó¼Ë+ǚю™ó‘õé@Å­[»hæGVáYöíÿÈÐg]ŒjWÆ|«xË<›ˆÇ^œÐë+د-üäWECljüÖ¹ 4%´†÷H‰.vØÃ)‚§AŠ¨î€žÊÊ  p!ŽX³f>äòj@‡TÓ`Ô!ghÂó(S€zŒGoJÁ>‹d]c`laLóœd(=¨¦³kskÚ:4(¡aÈ”ëˆ#¸…¢”§ ä{ps@[ÚÉ n{Éç$óæmÁ逅fŽ-ñÄ"ÈøP04ØG­ =¨ùsž3ë@ µ=€ /  Èõ #Ö€ Z2=hÈõ #Ö€ Q@ÔqŒqŠLPmj·×)‘£Ê–˜%J²°<‚:J¥ð±u4ÓMAz× <®0òÛëÎ2G±$ÀTŒ­ý¢k»–ŒÆÑ…%~PÃgíœ{PãJŒA,fiY¤‘%óÝÁÕT8ÇðÓ pK$«wrZ@ÁÉa’I9Ǩúvé@äZÆŠ&_´:¹uyr¤õÀÓ°  拉µ„ÉÌû"ª¹UÚ€}Þöäóï@-¿ãæãñÿÐc  2ÇÌÿïÿA[ÓØLJÐA@P@P@P@P@£¨ÿ­O¢5®B„Öïnmôû(-‹'ž„P (8ã&ª+P*Økz« il®o°¨þbíÌ{¹Úݲ=¨i-€è5ãŽÖD`ÌÒ!Tdôôô©Æ Dƒ—$‘ÎÒàÈÓ•¯ z@Ö’}›„°ÛýÞœRååÈ´¶2•-ó**ŽìÄ(™JMVH°e ˜#Hé¼|ª1’~¢€1æ¸ó.%tXYË)x8>õºÒÏ5¿ç¿ýùZ|ž`kÏ;ûò´ry€y­ÿ<íÿïÊÑÉææ·üó·ÿ¿+G'˜šßóÎßþü­ž`kÏ;ûò´ry€y­ÿ<íÿïÊÑÉææ·üó·ÿ¿+G'˜šßóÎßþü­ž`kÏ;ûò´ry€y­ÿ<íÿïÊÑÉææ·üó·ÿ¿+G'˜šßóÎßþü­ž`kÏ;ûò´ry€¾kÏ;ûò´ry€°]´i'È„# Çö¡ÃA\½ý²ÿóÕÿïÀÿŽO!Ü?¶_þz¿ýøãG'\?¶_þz¿ýøãG'\?¶_þz¿ýøãG'\?¶_þz¿ýøãG'\lš³I#K&qÿ9<‚åd¸˜K.[¯îG ¿ìŠ9<€‰¼†v6l±ÉýÐÿj¨Þ; ÷óÖûô?ƪï°î?ç¬ÿ÷è}€?qÿ=gÿ¿Cüh»ìûùë?ýúãEß`ÜÏYÿïÐÿ.û~ãþzÏÿ~‡øÑwØ÷óÖûô?Æ‹¾À0²ùÅQ”(?2í9ªW¶¢@P@P@PŽ£þµ>‰üÖ¹ 4Ú®t…ŽxÖD1†)Çtö–ÐZ@"¶‰bŒsµG¤^»ö¨Ùf‚ÞI!Ý庩\sŸ›ŠçU–e tíB@‡p?!ýEt~ˆG¥³o d”¹PÈH)÷  [ˆ#¹¢”­ƒÁÁ‚¨ ¨Ú=« ¦Ü2 ù­¹Áê÷Ê€0®URît@¬„; é‡Â„GT"Žª%1B!,Í`ã$qøâ¢wè4QŽêoµI+ÍåG0C½±ˆ×÷˜<ð3´uîi_P&þÑ‘a}ì’¾XÛË Ø'˜Ç·4]ÛP!ž{ƒole¸!e+#6Ð6aÐztù»úR»²rµP@P@íyÿ  ɃË_7=_Ö£^mi·úôúéZ’F°ÝÜBg‚khâ ʈÌÇi Ÿ—Ü?ÈÆUz Ž&nü™ž' †Ž6^ŸïsN.õË17’C…[?RÃúV—ÖÂ":„C%•ÂrñÃÁ¿çŠ9 .£‡š)#9Æ×Ú¿©8ý­'+n~ÜÏiq<;!Y à‚ªA?Ú6†$×íhJÜà•‰z®ô'ƒòÒr¶à,º­¼.‹&å.7a°À8'=º Ÿjni—‰Ž"ñ[Èãp°6žp{ÿ‚À³L€#ñðÝÌÓèI)P@P@P@hê?ëSèŸÍk¢=~kˆôË(¢gX$LJÊÛNB‚£wlš¨î]*÷Y€y6–¢þÜ&G¸Ï–Çï(c÷±ÇùèJ×ÐÑj785Fw‘ñ޵ cZC ´éQÈÇqT9üê¤ÓØ - xg´• ]ª&`T ¸4ÔøV4M$²±c$…ߎ p=G½kÍsÄÑJ¡‘†4U´«‰#6˵G'?Ÿz È¡äùccåsUv¶6¯÷þù¹Ÿp «ýÄÿ¾EϸÕþâß"ŽgÜjÿq?ï‘G3Ÿ÷È£™÷Ú¿ÜOûäQÌû€m_î'ýò(æ}À6¯÷þùs>àWû‰ÿ|Š9Ÿpª?ï‘G3Ÿ÷È£™÷Ú¿ÜOûäQÌû€m_î'ýò(æ}À6¯÷þùs>àWû‰ÿ|Š9ŸpJB¨"6<(õZ«·qu%óÛþù1½¿ï‘@oo.!hÒÕÙóÔji7° 3êq᥵>2Å@Çêim¦Ø2̪2 O€ÌooûäP°ÁK.â2N(Y·”•88ƒ@ æ7·ýò(Ô-Òo%î`Y¸YC~T"N$\ÆèÃÕ@4COÕ§5¥½¼ACZùi3Ž<ݼ w‚3Üà —L ¶DÆDs¹CF«³Ô`tçµ\óÛþùyíÿ|ŠÎ¾%®Á?óÌv÷5½-„ÈkAP@P@PŽ£þµ>‰üÖ¹ "ñÎÚM˜ñé³÷ù?.v»±Î3þzUE¤õ¦ºÔhG6fÇ “ }»ÿËï¯|Ói1¥pÉ …# Ò)s`Ó­@ÌË[‰¬!E’;cŸ”—ŸÊœ¤½{n]Ðn–îÖiv‘;úñÓô¤2Î¥rö¶fH‚ï.ˆ t]Ì'Øg=ºuh:]Jí ˆ\Y³Æ#J•}¸ù@Ýòž}OOzlr¢• dbØÏ©¦Àu *jYòS9òw;Üç?†qŸjÏÙ^ÂtÙ 0ˆf%£\©æ><}¯~h´º¦  ÈÐf=¿w)ØÁ={–ü(Ô—7Vî‘Iu'”Ê$싺<‡éŒeTrÞú`´:Ž£#Å™‘y8 »<Ïv“À€F;æ€4oÄkPm<±³Ì]ù9Ͼ1Œûã½VŠmAã.ø† Ñ£&IŸ'Ÿº¯9ëß Zîå'˜Ãv<¦p Ãá2Œs´Žyè;Pž=Ëý¢[ÉUV2«´&Ð D$óÏR_l_Æ_`q»$cÜu Ð@Ïùy_úæßÍj—ÂÅÔ}H€)’H’ÉrÈ@ܨùsÓ¯Ziµ°ê:œé „šITJ‹‰N?‡žô€5kyï]`Š51¢–ff+’À¨ÁÁè dc¸ @¿”\LÞr8c…Ý’ü¾£½ lg»ƒa½H$åÙƒ?0õÏœPvÃS6þk™ÒFWÈr&XÓ ŸÖ€$·Šõ5_ÞO1@Äcc)Ž2Û¶ç§Ašš;Y…Ö¡7™*†“) µ¿v£9ÆzúÔ˜j!ožNFØÝ‰|NãÙx[Í-ûÆït îÁ2:É^¸#n`g<Е´- 0vRÌÅÎÅÚ ŸA“øúÐÔP}ïü}÷ó5½-„È«AP@P@PŽ£þµ>‰üÖ¹ 5D‰”¯#ª „e˜à=iÇtðËÑ,Ȳ!èÊÙñ¤f¹gs2ùö¯1¡Ü²‚Až1@¨ŸUpJAm‘Óå“4Ôøb%‹K +‡2&î>l àzt  gEtdu ¬0TŒ‚(#gjbH´&8ÎQJ )ö¨&Y¢Ie ")ó9nzÕ4ÀgÚ!ÿžÑÿßB—+ûD?óÚ?ûèQÊÀ>Ñüöþúr°´Cÿ=£ÿ¾…¬§û-–U*x“ÈÑÊÀtr[EÇ‘ª¯A¸QÊÀÚ!ÿžÑÿßBŽVöˆç´÷У•€}¢ùíýô(å`h‡þ{Gÿ} 9XÚ!ÿžÑÿßBŽVöˆç´÷У•€}¢ùíýô(å`h‡þ{Gÿ} 9XÚ!ÿžÑÿßBŽV$‰%ÈØêØ³ƒœrµ[E‹©-@€(6–¥‰[ËÄä*M€>‚€ô¨–U’I®'ÛÈY¤ÜúPú( € ( € (  ûßøûîækz[ ‘V‚ ( € ( € (  Gýj}ù­r3^¶¸›L²xƒ41&dE]Ç%FÖÛüX=½ê£¸tÍ7XáôûÃelU$ÖØ28ûÌýÐz~˜$“MÜ ÝNåÑ ì èrÏЕ g[Ï5„J‹qlÀáÕ¹üñNR¾âعáë³yi<…v²ÎÊqÐð9ýi ³ªO%½‹ÉÚw gÆv)`½>U$óÇÐLÚ”¨ªSŽÑÜyj<çÂdŒ§îÓØÐ»´eÝvÈìYÔŽ‡Óšl 7··åH{{~ToooÊ€ ííùP½½¿*7··å@ööü¨ÞÞß•ÛÛò {{~ToooÊ€ ííùP½½¿*7··å@ööü¨<“r¹í5ª_ QÕ# ¤·\ÿ¥K Ã/–0œüŠÙ;çæ?—Öª1¸[yðê1E%×šŽŽpP©¯Ìsù ©¦‹3]}žçlÛVŒ•rqó ’ éÓ}Ò³Sûj(^(®”¤®06~\‚rN:àhOíx¼ˆåND± »Ô?ǶhþÕO2DXå¡ÉU@¥T*’Nâ?¼=ý¨ÐjqM(UŠQ9D•€ÚÍŒãϯQ@3ÜKq*ÛyA `Ž$.p‚:pG<ý8ä7ÕâE-äÌTñxrÇ¿ãƒ@4P@P@‡%Íòø¬A—¶0©”Âryúÿ:Ùÿ—•ÿ®müÖ©|,]GÔŒ(›YMæLÑ݈ÖY<¦-Ø;UzätUFN;[ØÔ9_p65k“ù>jD~g8úcš2Ỉ‘Á}»Ç11FÞÒq´ Ûzýà?•*ܪ®Û™£YƒêX óUÊû}ªßþ~"ÿ¾Å²ìnmˆ Ϩ.(å—`ÓY±RÒ@JýÒXqô£–]€A-fa%¾[©ÊóG,»«5š32Ë–ûÄ0£–]€wÚ­ÿçâ/ûìQË.Àj·ÿŸˆ¿ï±G,»}ªßþ{Åÿ}Š\¯°Ú­ÿçâ/ûìSå—`µ[ÿÏx¿ï±K•öûU¿üüEÿ}Š|²ìö«ùø‹þûr˰Ú­ÿçâ/ûìQË.Àj·ÿžñßb—+ìö›`IóáÉêwŠ|²ì±Ër<¹ñgiÎ9Zvj.âêMP0 [[ËqHŠ70i==h¹•£¼6òu9ÚB>¼ÀÐO{klá'¹†'#!^@¤Æ€ý£c½Óí–û“;‡š¹\uÏô€Ó €2Ù$“kÌ÷N3Í6yÒÿÏY?ï£H½ËÆ…ÞgUQ’Kž(°^ý¢1$7 éÓ!Í9î4gyUFI,x«<Œ ‰\‚2ã@O"©c+€IÜhÈ@"WÁÿhÐùÒÿÏY?ï£@/üõ“þú4yÒÿÏY?ï£@/üõ“þú4yÒÿÏY?ï£@/üõ“þú4yÒÿÏY?ï£@–CÖG?V435Òîbß»n§=Ö©|,]GTŒ(Þ˜@´í÷ßÿB4STçP³ç³ÿ* ÖÒ¾°ó $Ž1 cåC9 äQÓh Ûyœßùhs"Äã NhNŸûF) Ċ̲$‰ü€ ãúPkÈ/šúwÍTÉ€' û¼‚fèGz–4š£”µÏ›‚O$¸+ž”’Üg¹ÍJ‰r.b€~åfýYPAØ.vñþõT[yšXL‚ñ„w Ä’ãלdûr8úPC£ž{ìÈ%°ï\I#¦ïºÇ^Ô{K†â vÈf(ÊÄù®ÏÈr$œ|´©@gÞÿÇØÿp3[ÒØLŠ´P@P@P@hê?ëSèŸÍk¡Ú¶›%öi4'/GäÝ·peóØÕEê{o ¬Ì·rMª$k3m^…ñI»¥«LÀˆº©Lƒ$öü©˜­ÕV»ÛUzô¦Û`^ðÅÄ—6´§%nAöÀ?ÖuXæ’ÁÒÅ·!eS‚ÈÜ®Gã@ÚJQJYÝ68Š/3-œa<½ÏZ–5ud Cõ9æ›Ô€­}È‘2 ÞTÊgï ?\þVf¹i–â;Y1ÉÂÀÇf½>éûzб¹’ Ìæßi%†3·×>½¿Z™m® XeW?-Éâ4w)ç©Ãzõ #Óîâ€2,¦o* K>NvïҀ$û4í4†;iâ˜@R9K|¾a_¼yõÀé@tˆ$eßæ„b6¬€ sÀ'Û½hÐ@P@DÎå3žc`R{¯¥ZøXºŽóFq¶_ûößáSa‡˜?¹/ýúoð¢ÀW{kwrí Û' ⋱ÛÛÅ(‘!”8QÎ?:,þ`þä¿÷é¿Â‹†UPK,€¤ÆßáE€hº„’lŽ£aãô÷r°omÁ ¹Èí´ÿ…5öûm¿üô?÷ɧÉ.Áq>×l¶îHÁ;OøQÉ.Áq~Ûoÿ=ýòhä—`¸}¶ßþzûäÑÉ.Ápûm¿üô?÷É£’]‚áöÛùèï“G$»Ãí¶ÿóÐÿß&ŽIv •.%InwFIéŽæµ‚ij&6¬A@P@P@£¨ÿ­O¢5®B‹—zŒ6T&@îòFFƒ,ÜsŒúUGt “MÕ­¯â$n†Dᢗ‡¡êx?ZM5£56ÚöÝžu}ñ#dvSÓØŒý)ÊÚøf{¸Ë,ò`ŒôÇòÚi¸µ¸N…ÛØy³÷NTüO½ 4INï@ óï\‡=hiO"”|ùÑ Ï5MÏ8 c—'€<¦ÿ V`` Ão_Ý7¥¬.`9Ž]§€|¦çô¢Ìåíß˽¶®bnO§J,À<á´·—6ùMúSåb¸y½—7=?tßáG+ €˜#˜±èMþ¹Xî*ɸ±NHê<¦ÿ 9X æüÁ|¹²z)¹ý(å`(rßvÏÒÿ 9X\v_þxOÿ~[ü(°_þxOÿ~[ü(°_þxOÿ~[ü(°_þxOÿ~[ü(°_þxOÿ~[ü(°Ø«¶£yRªª0%ãe½GµVɈרP@çüyÏÿ\ÛùP·ü|Ü~?ú tBOøùŸýÿè+z{ …h  € ( € ( € ( € ( € ÑÔÖ§Ñ?š×!DÚ–—ý¡¦[:°ÃÚî°+‚ Tw  Xɶ]Bä•Q2B"¯@;þt›¸õyx1m¥2T6Üö¤[âEFê ÄÎFàhm²É.3HÅ€¸`¤úqýs@¥»ÜؼQ͹i8*~ éÍeO¦Là2éð(ê°o‰Ž0ã¶x==~´Xøvm’1Ž7¸òç #Ìaôäí@oÍûÉDQý¡…ÁóiC!·Ëžž§Ö€mæUýž!µ¿y&GïÁun~€´-æ)yD6Ñ´"mðÆ …A±Ý#ÜÐûòhÆ¡¦ß\[¤Ip¸ 6¨òþR3»©ë@÷6mjækH¢…Y­‡"b@Xàc«)çûŸJÏ’-ª[´I¥!£ÎìÆ<Ö<pAäöæ€5lô9áÙ¢ˆ\‰¡d¸*•ÜíÀo®h- Z;±,pY˜¤dy¯•ùŽGS‚}}{Pqhײ­¤È›J²0%‚•Pù#‘žG¦(E²þÏÒ­­Ê‘c_39l œÿž(íP@P@P7Ÿñå?ýsoå@–ßñóqøÿè1Ð ?ãæ÷ÿ ­éì& ‚€ ( € ( € ( € ( € (GQÿZŸDþk\…/õ4Ó´¸g™4±avÑ€¼’ݪ;€ÛØÌo&‚Î~G™He=[€Aÿ=‰MX šµ­åœŸi%1£Ü3ƒŽÔ€å¬¼)ou p`\ŒüÊÜãØª”\w¦Ñ!k{>ñ•SŒp*@¿$‰m$ލŠ2ÌÇRh¹Ô¬D1Ìo-ÄR±¹•v¹ô½$š„S,2^Û¬ŒvªTsŒc>´­©X­ÂÀ×¶âf8XÌ«¸œ‘ÓêúŠQ±S0kËp`ÿZ ª6}yâ€êvÝ. í¸†FÚ’Wk@}x  åš(P<Ò¤jNfPGP²nàõ9~óýß^½¨“ê–pyÀÎ$8ó"F×'ŒûГ^Ánî'•"T@ìîê HO·Ò€—vÒ2¬w3:†P® ä‚=¸?•K@P@P@P@]ÿÇœÿõÍ¿•aÛÇÍÇãÿ Ç@$ÿ™ÿßþ‚·§°˜V‚ ( € ( € ( € ( € (  Gýj}ù­rY½ÓcÔ4»v'd±E”b7WGpj£¸ káëKÈaºŸh€  `€ÿ=©\k×Å$qÜòÊä OãÞò^iø‚€y%Ôä~úó?³$gݵ§czmÀéíœÓ£¨Û5Ý¡+«¤‹ž„£û¸  é·¯#N>ʳKÅ"Œ…±Îq–?(êé@LJ]-å$ˆ4‘Î…±‚w… OÓã IåL¨ñ+J·ˆÉ’@ÀŸ ~I¢\ȱDÒB#·rѰ', †9ºvÍKw¤ÜÉsq4 éeÞ¤»+(Ø‹Ôuå>é=(5-6᣶HfÛgÿú ÞžÂaZ( € ( € ( € ( € ( €4uõ©ôOæµÈQ&©ª;K¶DU2Íþê…\±=úUGp ³ñeš¢G©Í:«ÆQX¬ŠÝêGãI«±©¥»YJn"¦@88íš@rÖz6—qe¸‚2GñÈüêš°‡ÃdÑÆåãYCœñÅHgš;xZY[j/S×èî}¨©ÕìB+ùÍó6ùm¹q×+Œ¯Q×E1µÝ5fò¾Ô dƒµX޹ `G&€í½;í@¹Ã2œ#¥NN00}}G¨ >±a™ºr}NÆÁç/7'¶hN¯d#Wó[’Fß-·Œc9\du‘ÜzŠšâöÚÚži•br·PÄôÆ=h?íK!+Fg TY”…àdÄc ‘œð}(¿Úö^^ÿ1ø8Ùå>ÿûç¿P‹¨Ú23¬ÊUY±´~9 ëZ{À“%Æøßî”FlŽ9àtäôŽ´'ö¥—šcûBä îÁÙÓ?{îç³@‚þÞâ)'Ë`êÈ@õÁÇŸc@¦³dP3L÷{É ÅGÆìc8í×Ú€-ÛÏÌ+4¾6û¬Ü{P”P@P@ çüyOÿ\ÛùP%·ü|Ü~?ú tBOøùŸýÿè+z{ …h  € ( € ( € ( € ( € ÑÔÖ§Ñ?š×!EÛ›o´¸w–I#Œ4r¦7!ÇläsUÀ–ÏK·¶B[uįÒÎ;c è ó&—3Ž¿u¤±ʤeHVpHÏ~€ö¤+ëÖ'h[ËEÇ$*r}¹JBfß…#‘4ÉÆÓ4‰î¤Jc4ïm¾×lbß±ƒ,ŠØÎX2äw#ùP9´Ë™O˜×‰ç²4NÞO˱±£9ޤžÿ€'ÃÈ xRà€ÑÍ%2@ëÎ1øûP›B §Ú1½&\ìÿž’oõíÒ€ô# Dk¯ÝBÛ¡>F\1ÜsÏOA@»ÑšâY¤YÐeñnØv*äA 6ðAîx‰üÖ¹ «êRÙiÖÀ’xÎFí¡TÇsÍTV U³ñ9¶+m©C<“Iâ€ýÖÎ/ð‘C`7µ£ŠÊ_1ÂïB«îqR9ei¦4]I"³F?úÔݺ·¡$)fënÛ£œs“Ú.®#µ¦—;A9$œ=É PGÖ!E†ã~ hö|È2O·#¥B|Ed$*«;(ÜZEåP¸Üsè€þ ?8Dz|)pÒy*ím¬sè?:|šå¬jÌÉ6ÜáOõ‡!~_ÄÐúÝ´j¡¢œJÏåùE@`p<㡯z³u} ¥ŸÚ¤ÝåàÏ?^ŸSŸÄ6æ13ǦzPðêö³0ǘ©æ4{Ýv®åÎF †=n)•"šFÈÙ'Ï ’r}Çç@ uý=o©”ï8çÁ# c®pGnôbÃQ†ü1…d{°àý?Îh”^"³ÅºLÄI,jùæs@6Wqß[%Ä*â7]ë‚G­O@P@P@Ewÿsÿ×6þT‡mÿ7þƒP“þ>gÿú ÞžÂaZ( € ( € ( € ( € ( €4uõ©ôOæµÈQ¡-¤7šLI:çljÀ© ‚b9ã¸ØÙAc—îbÌY˜û“ɤv»,–ò¤¢ž=„Š.=rb€0%ñ €Óݧ;E«/þÍJÂjæ÷…"dÒšBT‰¥i$_~)ŒÔ»¶K¸ NY~eeeꬤ2ŸÀ€h¤šG˜kÛ“)VGí%Ôã+Œ`@(‡B¶ò^%yY%NàH?–([C·hš?2Pe^£¤¼öõéí@Ú/€ÓÌcFÌHvâ?˜1Ç9#¾h÷:Ds´ì.&Ï“{´ƒòªãÑG=zóÍK&—nUü a•ñºUÁc\ç?Žh¸Ðâ6ÜL¤ G?.]A$Ÿ/$ýÜuö´¸O6d±BìáŽ2 bßÔŠŽM?µ5ÌËo1à4aNÑ€‚1òÊ€tˆ’äÊ“LÌ›‡ÌÀÜ[³€;†9­g†âI%|cyUt/~™ 𧆠ðF÷þìFH\Π.î™è£Œã¿^h^Ú¶¶Š$¬H×b€$ € ( € ( €"¼ÿ9ñÿ<ÛùP·ü|Ü~?ú tBOøùŸýÿè+z{ …h  € ( € ( € ( € ( € ÑÔÖ§Ñ?š×!Bkw·6Úu”ÅÏDpƒž2j ®Á•l5ËûR-e²¹¾Â£ùŠrnçkcŒj]ßÔn#ŠÖDl–‘ OJ1lb³H6ÜÛ\îÇ!KùNV¾€ièMZKöl0Ç¡ãƒH ——+ilee-ó**âf`ª?2(œº«Å„k)ÁZGBÃåAŒz¢€+&æ)g3B¡Ù¤$µ0Xß‚(OˆWÍaö9|¤2n‘Ñc;òE>mybMÿfrŽq Ü?xC?NOzYu¿)pöŽ%Y<·]à v†ûÝ:0  sj0DªÙÉÜ¡×#t`÷aÛµQ¹ñ½º$ ˜›-¿?À ‡®pMGg®I$DÒͽ•Qq×è´È|Jþt ÒJ$|£s(üñ@Ùë²>Ÿo4öÌ[ìñÍ;+?B|àœv  +ªt‹«å…âX£vRØ$í? «?‰`·’Txd;°F>b£${t4³ ´‘+¼f2Fvž¢€@P@P@CyÿSÿ×6þT‰mÿ7þƒP“þ>gÿú ÞžÂaZ( € ( € ( € ( € ( €4uõ©ôOæµÈQ¦Öñ\é ñ¬ˆbwÅ8ÒÚ HVÑ,qŽv¨¤f»ö¨Ùf‚ÞI!Ý庩\sŸ›ŒP6ú¼³.³µr T¨ ‘yzS6ðL²³•ÀH~(Vâî`h¥«`ðpA ƒê€*6lÈ ´û†rþiÜàã žãǵ)ÑìŒm–B²È¤=¿ ée66ÖYÇ£¾öýh§F³,Iœª—;Pä”väPçÒ­§yŒªÒ¶ç)!\üª¸úaGÔ3Y[´”¡]66 ÇZ‚ëH³»M’£mòü¢ʆ^Àã®2H÷ bY̪êÌÛ‹+y$ŸÏq  ‚ˆÕQÕc(Ê¡Î2¤$w#}(cÐìãŽ(×ÍÙö™G@Þ gŠ}Θ’imc ´hÊW9'†È?^§ñÅG&ƒa+eÑÏ,@Þ@RÀ† vÎI>ô¥@P@P@çüyÏÿ\ÛùP·ü|Ü~?ú tBOøùŸýÿè+z{ …h  € ( € ( € ( € ( € ÑÔÖ§Ñ?š×!Dzô÷évQÄÎÊŸ¼um‡!AQ»¶MT7UÓ/õ›qäÚÚB´q“Ÿ¼»¿‹œa´žÀtZÀŽUžI€‚:Ôi B>Ó¤FìqóNOãU+tKAší%h"‰˜O*,ꓵ®•yp¹Ýã¤÷ùP&¡â¢3D²œE*‚rTóÛ¡@Þx…í­Öql=†WÃU2GaÁàõÀ÷ êײÜÛ:CV¦æh›sòá7ŒôãîúõœÐì¼@’I"ÞF-‚ªº·Í‚§§P?LŠmÞ½-´2\ dh7Ë9 Y‘Œvþ”<º­Ä.þe¼aaÙç~ó‘¼àcŒ~h5R[;Ù!Š#+ã(¤ñ’dÏÑ;gðÁ4iÄš¤Ä%°H•g-ÎrÃcÕhZ€ ( € ( € ( € (+¿øóŸþ¹·ò  ;oøù¸üô脟ñó?ûÿÐVôö ÐA@P@P@P@P@£¨ÿ­O¢5®BP‰&”©"«©„d0ÈêíÑí$…HXJ1íŠÍþÅտ祇å'øÐ¾§ 2ËÉß½Ù‹»v,}=¸  ®ŠèÈêX`©P"ÊÔÚ£Ë(=@ô ½¼2H$xcgŠ‚@Îzýy ‹+Uòñmò²cÄcäïÇ¥0éö¦idx•Ì ++T޽>´4pÅ&8Ñ êU@Ï$ÿ2:}P@P@P@P@ßüyÏÿ\ÛùP·ü|Ü~?ú tBOøùŸýÿè+z{ …h  € ( € ( € ( € ( € ÑÔÖ§Ñ?š×!FÕŸüyÁÿ\×ùP´P@P@P@P@P@P@P@Eyÿsÿ×6þT‡mÿ7þƒP“þ>gÿú ÞžÂaZ( € ( € ( € ( € ( €4uõ©ôOæµÈQµgÿp×5þT-P@P@P@P@P@P@P@ÞÇ”ÿõÍ¿•b[ÇÍÇãÿ Ç@$ÿ™ÿßþ‚·§°˜V‚ ( € ( € ( € ( € (  Gýj}ù­rmYÿÇœõÍ•K@P@P@P@P@P@P@PWñç?ýsoå@vßñóqøÿè1Ð ?ãæ÷ÿ ­éì& ‚€ ( € ( € ( € ( € (GQÿZŸDþk\…­ïnÞ%òàáÿXÞŸîÐɪM- Šg‰ŸüvšW`Fu©ÁŠ,ÿ¾ßüMkì¼Åq?¶ßþyCÿ}·ÿG²ó ‡öÛÿÏ(ºgï·ÿG²ó ‡öãÿÏ(¿ï¶ÿâhö^apþÛùå~vÿâhö^apþÛqÖ(xãï·ÿG²ó ‡öÛÿÏ(¸ÿm¿øš=—˜\?¶ßÝE×}¿øš=—˜\¶ü~ê.Ûoþ&eæí·ÿžPÿßmÿÄÑì¼Âáý¶øÏ•?ßoþ&eæí·ÿžQtÏßoþ&eæí·ï_÷Ûñ4{/0¸n?üò‹þûoþ&eæí·b‹Ž¿;ñ4{/0¸m¿üò‡Óï·ÿG²ó ‡öÛÿÏ(ºãï·ÿG²ó Œ“^‘"›8ÿñ4;-ÂäŸÚ·¿óãýþÿëVCí[ßùñþÿõ¨þÕ½ÿŸÿï÷ÿZ€í[ßùñþÿõ¨þÕ½ÿŸÿï÷ÿZ€í[ßùñþÿõ¨þÕ½ÿŸÿï÷ÿZ€í[ßùñþÿõ¨UÔçhÖC¸R»¹‘ºß4î¥2YÌZ8ØA"Fÿâhµ·ü|Ü~?ú tBOøùŸýÿè+z{ …h  € ( € ( € ( € ( € ÑÔÖ§Ñ?š×!E=j+Ù´†M=öÌP}HÇ Æ€d¬ž·WR¬¶ê#p*£º²½ºu>ŸçÔHÃoñëÏÒϼÿ3@ëþ=ºrhÎíþ·ëLñéÿ×ýi;{Ž;uàPß·§ÈS àçŽ?Òíþ¥0ø~=úóô¤x$œzóüͨú÷íÓ“@xäöýhãòÿ?0ŽßN?”€8ÏãŽ? ?Ý\â^;t©—ÂÀÚ®b‚€ ( € (?QVLˆ¥˜Ú'å  ¶Ñ^Aá¦K÷ 0OÄÀŸZÔ¶ÿ›ÇÿAŽ€(Iÿ3ÿ¿ýoOa0­P@P@P@P@P@Z†<èóÓ÷yÇÕk¢weR©y·4]1@áÝ ²^x?4T'`#6á‰&+ÂOûqUûIƒìËÿ<¯?︨çX>Ì¿óÊóþúŠi °}™ç•çýõÒA`û2ÿÏ+Ïûê*=¤‚ÁöeÿžWŸ÷ÔT{IƒìËÿ<¯?︨çX>Ì£þY^ßQQí$³/üò¼ÿ¾¢£ÚH,f_ùåyÿ}EG´X>Ì¿óÊóþúŠi °}™ç•çýõÒA`û2ÿÏ+Ïûê*=¤‚ÁöeÿžWŸ÷ÔT{IƒìËÿ<¯?﨨ö’ Ù—þy^ßqQÏ °}™Gü²¼ÿ¾¢£ÚH,!µR1^qÏߊ“œ˜fOî^ßQT€fOî^ßQP™?¹yÿ}E@dþåçýõ“û—Ÿ÷ÔTfOî^ßQP™?¹yÿ}E@dþåçýõ ½UT%æ`|ÑP'S$.²¥áB>oš.”b }ªã9Ç?ìÇ@òÇÌÿïÿA[ÓØL+AP@P@P@P@PŽ£þµ>‰üÖ¹ +#‡ÿÕMÄ >ÐùL*zœÿœR²«tìN"ãoáG($ÇÈiW= k`"K©]ü°€>yÝœt§Ê·ÄOæD¯ŒnÅKVv'ÿQ'û§ùR¶ßñóqøÿè1Ð ?ãæ÷ÿ ­éì& ‚€ ( € ( € ( € ( € (Jüš5O–æµÈPÈ–TEͳî ÉÿÅP‰ÎlÛž¿2zçûÞæØ °ä²6Wó'øõ+€ ³ç-ó§ÓûÞÔî"#³nÌ?ïª."!v‹6ÆûÉÐõþ*.Ñ–?5›œýäëÿ}Qv$o#+5³ ŒoNøÿj„ìím¥~ÈØn£rsÿQv…e ¢Õ€^@ÜœãÔ€iˆ·[6=‰;ÿÀ©Ý€¾YÉ?dl·_™9ÿÇ©\Ut]«há}7'ÿEÀg“òíûcÓrñTîÀw–wûezÉÇþ=EØ" 0luù“ÿŠ¢ìËà±¶ ÜŸüU`9•ÙkW$ ™8Ïü +"íKWÓrñTß,à±¶ÏÞOþ*Ø ËŒZ0ÀÚ>déé÷©ˆ­%-Á;“ÿЧvÊž,Ødçï'ÿEØ•ÁcnzüÉÿÅQvùgåÿCo—ó'øõ`YÉ?dl·_™9ÿÇ©\UdM‹jÁ}7'ÿEÀjGåRÌ©ÃGÿÅS»ÁX«Æ>tíÿ¥pA)‰Ñmœd|éßþ@¸ÅÕÀôÏO÷c  ÇÌÿïÿA[ÓØL+AP@P@P@P@Pï70xÿš×!Dp ŽâERøØ§ Ä÷>´²ÊÁÖ(SÌÁ*½©'Ó‘ùЋÛÛ7ˆ][ÂÜ.B[“Žâ€/\\Ãj¡§‘QKm÷=¡ Žî JˆåV-÷G­M@5äD*€.v®{ž¸ý(ÔP@„ŒÐmÖã<‡|ƒ Œ }Ñþ4/•Uy™ØáTHÙcéÖ€CŽ ’‚8 ÈÜN´Ó¤L·ŽdnOç@FÞ¡–i žA7øÐ»æ æË¸Œæ7øÐüßóÒ_ûøßã@¼³H@$HÝG^ôÚʦi7Aæ7?­/Íÿ=%ÿ¿þ4ˆû×rM!#"FíÇ­/Íÿ=%ÿ¿þ4|ßóÒ_ûøßã@Íÿ=%ÿ¿þ4|ßóÒ_ûøßã@ ¿÷›<é7c8ó§ç@ óÏIïã“ÒY9ÿXßã@tROÚw36$q–9=€"“þ>gÿú ÞžÂaZ( € ( € ( € ( € ( €5/?ãê¬Ík¢%`/ 壼š‚âx­u(åÒ8Í»¦ç8,‡õÀ?‘  éÄ7·0E`ÑɵÕÛcä( 'Ò€4µw¹’Ð!uTœ³22ã@÷öWzÆ3h@ɱ€ö;feè²£mÈàp@=3žsŸÎ€,ˆfûh€HÛJ œn$†ÝïÁü VŽÊo:kiHŽà1,Ã=N3ØãŸÒ€o§ßm #\o,žqÊ€ÇpÉä÷ôëÒ€–1Û˜ü¹¶2e‚¸';©çŒPµŠºYF²!FŸJ[[cnOÌ#Ó¡ööö  —'ý"QÜ6ñÕ ¢‘íîEÄg»qí@K!šF™€—õ÷  7Ë,¶æ&)µ‰-€qòžÆ€*›)#[ó¡>n£ßŸ4‘NÒ4q,‘®ÒÂ<å•r™qÉ ŽhD·™±Ï*`ì]À9êyãõ  víÄB6F2963“Áé@œ¸FX%È“ÈÊðqž9  ç‚â(%HRG2Ûì7Fç$ŸÆ€#’Gn±¤ü²9À<·¯wý(ÍìWRB? `HA–#׃Î=(‰Ê‘²£÷™a–\œ¨ÿëPgµ¼36 9ùÈaýáÐçÓ4Km4 ¡´„>3ûÑ·Ÿ÷s@’Öå‰(’$}—‚ÁsÓ¯õ  Þ+EG-»œoêxé@‚'¸äsÇoj»¢Ë×ýt䔟ñó?ûÿÐVôö ÐA@P@P@P@P@©yÿPýcþk\…o×yؤ`ôäÐ95¹#™£ÁvŠÛ³`ã=¸ÎëM&öMrY$Xö•,p7ÛºÏ48µÐ ?l¹õ‹þø?ãHí—>°ÿßühûeϬ_÷Áÿ>ÙsëýðÆ€¶\úÃÿ|ñ í—>°ÿßühÐÝ\Ë:ǺNvßZÛsÿ=bÿ¿GÿŠ mÏüõ‹þýþ*€¶Ä‰<× ÎÛ²«Œqz€ØIŸõè?í™ÿ?³äÿžéÿ~ÿúôgÉÿ=ÓþýŸñ û>OùîŸ÷ìÿÙòÏtÿ¿gühþÏ“þ{§ýû?ã@ö|ŸóÝ?ïÙÿ?³äÿžéÿ~ÏøÐýŸ'ü÷OûöÆ€ìù?çºß³þ4gÉÿ=ÓþýŸñ û>OùîŸ÷ìÿÙòÏtÿ¿gühþÏ“þ{§ýûÿëÐýŸ'ü÷OûöÆ€ìù?çºß³þ4gÉÿ=ÓþýŸñ éy.P¶ã¹ŽqŽ¡(´Ÿñó?ûÿÐVôö ÐA@P@P@P@P@©yÿPýcþk\…¯×÷ó4Ÿ÷–­pÐå"iA$Ê}Õçé€Ò{›‰cr7Ä:¹˜÷zñÇsÅ6ÛÜ z’I%Ô+ DR6Òì à¯§Ö-ëAlÃÍ v¡#““Èü:PSÜÜýž×D¥_vÐ6aÔzûþ”人g)ˆˆ$ ÷ryvϰ ‹Q¹’hÆ#UÊ‚ Álõ#¿å@2‰<Ï”¾Ì ÀJ¹iÿ©þëJÓ € ( € ( € ( € ( € (oøù¹úŸåP“þ>gÿú ÞžÂaZ( € ( € ( € ( € ( €4ïN.aϬÍk¢9’9W–‡CšÍ–Õ¤!^ʬb@9#œƒ@ò™P$v»xprOÕ¨<©sŸ$çýåÿO"Où÷ÿÇ“üh096ü¼Ÿã@‘'üðÿÇ“ühò$È?gät;“ր˛þxŸûíÆ€%µŽEºWtØ¡HÉeöô4¡½¼?:7¯÷‡ç@õþðüèÞ¿Þ×ûÃó zÿx~to_ï΀ ëýáùн¼?:7¯÷‡ç@õþðüèÞ¿Þ×ûÃó zÿx~to_ï΀ ëýáùн¼?:7¯÷‡ç@õþðüèÞ¿ÞGlA¹¸ ÷?Ê:£'ü|Ïþÿô½=„Ä­P@P@P@P@P@—¯?ïH¦5P¥Cdü½rSó-çÉ?ïÊPæZÿÏ’ß” jN’ÿ\V€2×þ|“þü­'™kÿ>Iÿ~V€=©8H~­'™kÿ>Iÿ~R€2×þ|“þü¥9ZÙŽÅIô-;dô ÿÉu y–¿óäŸ÷å(<Ë_ùòOûò”¡íIY!' ­?dô ÿÉu ¶RA±PGcÐy–¿óäŸ÷å(ó-çÉ?ïÊP›"ÿ oþK­!ƒ§€ë‚Ð~ãþ|ýøZ?qÿ>þü-8,DdiÙõî´lþ¿ù.´lþ¿ù.´lþ¿ù.´lþ¿ù.´lþ¿ù.´lþ¿ù.´lþ¿ù.´lþ¿ù.´%³!wXáíV ¾XN~SÛÛŸ'ü|Ïþÿô½=„´P@P@P@P@P@hê?ëSèŸÍk¡Ä¡Äö ;cÇj­o«Ú]L±[+Œ*/h; ä®EOxq(ÎAÂü&€3¥“Ë`çsª(u'ùÐr]$SÃ0 )Âô«Œ“hMØ”“’>äœcý†¨­w$pM´¢á¥òÔI õ¡(°åßË_”rÞŸçÔzЬŒîÎá4ìJŽŽ;[`DctkŒÉÛŸñ ·ž;„/ ¡ŠäÆqéÅjÂÉÖ<*ÿ­A÷G÷…é@d¸ŽÎÅçxË!T‰/×ëBW¬ÿ0Ë¿ûòŸãWìä+¢qr.4éfXLXVtPAÚ¥¦˜Ë²æ7­ !UGȨ'¹[Ýô€&C‹¹‘ô €%x àzPé@¥”`zPé@¥”·ü|Ü}OòŽ€(Iÿ3ÿ¿ýoOa0­P@P@P@P@P@:úÔú'óZä(Wó<åm°mÝÐqÞ«u0ôT_·Ý½¥úÎÆoß«¼6©Ü1Ðîgç4×¼ÿV¿Sÿ šÈ¿¹†ÚkvšEŒ}¦6Ëpù ‚îóaC<’ª…Q3!Q×pcÓ¯åWŽ*È\©êÍ iX®@)&3ÿ\Ú e~æÚ)£Žæeˆ=ÀêqÆy4ˆl­žýt—’Q¸nã%²£+×´qÇon\Ÿ6â²:g9º„ú–ÿÐM!  ëÆ„YØ}¡˜#Rø¾CÁö=?Æ“*½I%¸T:0DqÇ<ˆöáH¡’Nȶ¦3¹‡&3$[rŲ7ç$Ó$š€3ïä¹ÿŸ¤íÿM…5¸æš ÒH—øP ždêKüÓ·j®I åu`ÚeÃH&B ©{Œ¿/úÖúÒ 2…êG•e2å†ýTvÃ9îÿZ³ú¥  ( € ( € †Ûþ>n~§ùG@$ÿ™ÿßþ‚·§°˜V‚ ( € ( € ( € ( € (  GýlcÙ?š×!CáUT!8P2}>´ÈÚ(šFŽÛa‘·9R£qõ<ÐNæU ®2rYº}è”ÖæVùáWƒ®YHÈ<´}œ—f{evld—^ZV)I¥aþTŒäùaGþ5ÇÜ`;ûÓ$»xÐÜLL–þ`Y7¡%Nx#šixÚe™­É‘ Ä®Fz÷ ‰wOØ«¸’Ì¿Ý#Ö€$ó£ÿž‰ÿ} ]6àǸƋÈeÆqõ iµ± º+Ñ}Æf2É*Gï–f\ßÚ€$ó£ÿž‰ÿ} ®LoŽHüÕ.[†>öGqí@ ¶ßþ}?ññÿÅS»‘×ì²C V^§ñ¤¹f‹ÍoÞ'_ï ‡Ï$nA ¤6Ò6â}ˆ  xQp£ð E$k‚èû€çGÿ=þúyÑÿÏDÿ¾…tóÑ?ï¡@üôOûèPçGÿ=þúyÑÿÏDÿ¾…tóÑ?ï¡@üôOûèP-Žn.èsÊ:¡'ü|Ïþÿô½=„´P@P@P@P@P@i_ÿ®þÙÿ5®B‰C°UˆGCí@˜ÿßo΀1ÿ¾ßcÿ}¿:<Çþû~tyýöüèóûíùÐæ?÷Ûó Ìï·ç@˜ÿßo΀1ÿ¾ßcÿ}¿:<Çþû~tyýöüèóûíùÐæ?÷Ûó Ìï·ç@˜ÿßo΀1ÿ¾ßcÿ}¿:<Çþû~tyýöüèóûíùÐæ?÷Ûó Ìï·ç@˜ÿßo΀1ÿ¾ßcÿ}¿:<Çþû~tyýöüè­—úÉ?ÝÿÙc  RÇÌÿïÿA[ÓØL+AP@P@P@P@P•ÿúøÿíŸóZä(eÿt*( € ( € ( q‚O  +·—nO¯n€ ÁùHÀÏ#µ1eùA$6T“œÚ€Ï´1*Ø\óŽàdŠF/ÞÀñ@ æä|ŠÍÈÔЙUN çœûrGô ÌðØÔàAé@ @P@P@W²ûò»ÿ²Ç@¤ÿ™ÿßþ‚·§°˜V‚ ( € ( € ( € ( € (  +ÿõñÿÛ?æµÈPþËþèþTP@P@PRr@ÏLÐQÎ××?ã@ ¹%›'Ûÿ×@ÀØ@Lc߯Œ` Îhì üh쪈fb[;Î3ŽÄÐÀ€XÁ³œôÇøPTð\ø#'’}=è6.â͸“ïÇøÐöÀA@P@P@^ËïÉþïþËR“þ>gÿú ÞžÂaZ( € ( € ( € ( € ( €4¯ÿ×Çÿlÿš×!Cû/û£ùP@P@P@P@P@P@P@P@ì¾üŸîÿì±Ð)?ãæ÷ÿ ­éì& ‚€ ( € ( € ( € ( € (Jÿý|öÏù­r?²ÿº?•P@P@P@P@P@P@P@^ËïÉþïþËR“þ>gÿú ÞžÂaZ( € ( € ( € ( € ( €4¯ÿ×Çÿlÿš×!Cû/û£ùP@P@P@P@P@P@P@P@ì¾üŸîÿì±Ð)?ãæ÷ÿ ­éì& ‚€ ( € ( € ( € ( € (Jÿý|öÏù­r?²ÿº?•P@P@P@P@P@P@P@^ËïÉþïþËR“þ>gÿú ÞžÂaZ( € ( € ( € ( € ( €4¯ÿ×Çÿlÿš×!Cû/û£ùP@P@P@P@P@P@P@P@ì¾üŸîÿì±Ð)?ãæ÷ÿ ­éì& ‚€ ( € ( € ( € ( € (Jÿý|öÏù­r?²ÿº?•P@P@P@P@P@P@P@^ËïÉþïþËR“þ>gÿú ÞžÂaZ( € ( € ( € ( € ( €4¯ÿ×Çÿlÿš×!Cû/û£ùP@P@P@P@P@P@P@P@ì¾üŸîÿì±Ð)?ãæ÷ÿ ­éì& ‚€ ( € ( € ( € ( € (Jÿý|öÏù­r?²ÿº?•P@P@P@P@P@P@P@^ËïÉþïþËR“þ>gÿú ÞžÂaZ( € ( € ( € ( € ( €5/cw•J@C’28Ú}G¥rCåÜ{~güh<»oÌÿ]Ç·æÆ€.ãÛó?ã@—qíùŸñ ˸öüÏøÐåÜ{~gühòî=¿3þ4ywß™ÿ<»oÌÿ]Ç·æÆ€.ãÛó?ã@—qíùŸñ ˸öüÏøÐåÜ{~gühòî=¿3þ4ywß™ÿ<»oÌÿ]Ç·æÆ€.ãÛó?ã@—qíùŸñ ˸öüÏøÐåÜ{~gühòî=¿3þ4ywß™ÿ<»oÌÿ]Ç·æÆ€.ãÛó?ã@—qíùŸñ òî=¿3þ4ûhž6¸*zttרÐ9-§ó¥uˆ°gÈÁ°õ5¤&¢¬!¿g¸ÿŸwÿ¾—üjý¢ Ùî?çÝÿï¥ÿ=¢ Ùî?çÝÿï¥ÿ=¢ Ùî?çÝÿï¥ÿ=¢ Ùî?çÝÿï¥ÿ=¢ Ùî?çÝÿï¥ÿ=¢ Ùî?çÝÿï¥ÿ=¢ Ùî?çÝÿï¥ÿ=¢ Ùî?çÝÿï¥ÿ=¢ Ùî?çÝÿï¥ÿ=¢ Ùî?çÝÿï¥ÿ=¢ Ùî?çÝÿï¥ÿ=¢ Ùî?çÝÿï¥ÿ=¢ Ùî?çÝÿï¥ÿ=¢ Ùî?çÝÿï¥ÿ=¢ Ùî?çÝÿï¥ÿ=¢ Ùî?çÝÿï¥ÿ=¢ Ùî?çÝÿï¥ÿ=¢ Ùî?çÝÿï¥ÿ=¢ -®Oü°oûíÆh‚Ç4Ú΢ÌXÝÉ“X Oí}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀í}Cþ~äüèþ×Ô?çîO΀?ÿÙlibstruts1.2-java-1.2.9/doc/images/how-to/netbeans/building6.jpg0000644000175000017500000002520210404045246025077 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„   (1#%(;4>=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀ¤!ÿÚ ?µ¬k¶š±¶ãX®7Þ¨ÿokÞÇkÃæ0n@Ál×ThÁÙ™¹;ØVñ2˜ü¯lŸä*XµoÉrmñJm¬€ ÇóþT{:bæùuOÆP~噺(AŸÖ£]gÄ-uˆ2‘œˆÁ£ÙÓiÖ»­Z´jígÌÂÇ£$sùR®·®1Œ'–æHüÀLãŸÆŸ²§k‡<…κdì]ì2`Î>•8Ôµ£+Æ%·Êl®2XdïKÙSiu=rÝŽ”ƒU×6HÄF»q  g?=0æ¿Úšðÿ–#ƒ¸:ÿj ý«9F1è\[hæF»3TÛOc»çˆàœõç5œ¤¤ËŠhç|Gÿ!gÿu•eÖl³Ôzƒí¶¾i‹ÏŒ8m»wwôúÕ­€›ÌN0ëÏšPÁ†T‚=©ˆZ(¢€ (¢€ (Ž‹UŒˆ®° z ‡¸Ãzç†qž´¥”0]Ã' ¥`³FßuÁ§dzŠv¬2õ z@-Q@Q@Q@Q@Q@Q@Q@ÇøþBÏþêÿ*Ë PëçK†KטÇsáðB’;ûýzóT¶ªhqÇ,[RëËAÈÚ»‰Hç?ìÖ†—nºd PÝ:³nù‚ñÀ¾ÔÄ]ûSϬÿÿ>Ôßóë?ä?Æ€µ7üúÏùñ£íMÿ>³þCühûSϬÿÿ>Ôßóë?ä?Æ€µ7üúÏùñ£íMÿ>³þCühûSϬÿÿts—p¦ SÝ€Çó ã¢Õ ˆVG‡àc)ŠW³ØãÆ6ËúT‘À±È$™‘;Õ9 ÄcL‚D§O\Óª-²L–ÏAþ{ÑÌlã#ežÃßüjXbòæy6?ÍÀqIÊàOæùæÿ¥aÿžoúTØaæùæÿ¥aÿžoúQ`0ÿÏ7ý(óüóÒ‹y‡þy¿éG˜ç›þ”XÌ?óÍÿJ<Ãÿ<ßô¢ÀaÿžoúQæùæÿ¥óüóÒ0ÿÏ7ý(°˜ç›þ”y‡þy¿éE€<Ãÿ<ßô£Ì?óÍÿJ,æùæÿ¥aÿžoúQ`0ÿÏ7ý(óüóÒ‹y‡þy¿éG˜ç›þ”XÌ?óÍÿJ<Ãÿ<ßô¢ÀaÿžoúQæùæÿ¥óüóÒœ§#8#ëE€ä é c†‘UK8ž?*Š=ÊüÅ€bÄsAÒcaw%Ô œg$÷¢À2=Ý0C1#¡ëŽþ´û1&2íp¾ab~¤Ïš,–ºlv×&uv,AÜú®Ӣ€!¸èµCÜaE (¨ŒˆŠ¦YÕ ó@ Šâd)û˜ JF:ÈGà)µ`3ÒCǰ£Ó÷‡žœ @O÷Ïä(Ú¾!@Óýóù 6ŸïŸÈP´ÿ|þB§ûçòm?ß?£iþùü…O÷Ïä(Ú¾!@Óýóù 6ŸïŸÈP2 Äç=¨$î 0PI#?Ö€ePʦx÷7A·¯ëO÷a»â€!¸¹KXÕç™P6?€ŸëO†U™#’9Ç Ê¸ÈÆ}häØ($‘ša•U‚™ã¸o_Ö€$S•>½½ñPµÊ+mw vî?)ÇBzþò 7É2! *AªÃSÉ#hõgœqë@-®LÎA3ÅY ?Äò÷WùV]z€ïT`´š-F{Ü픀qvŒã\žµk`/0Ê‘ê+ öDŽóˉ[;ã—©ÇÍÐõõë@„ƒFÔ`€F5Bª(PÄ qÇN‡‘ëO¹ÐæŸOû0¹Ã Þ]ä¶pÁ°?_Ò‹ VÒugÿ‰ƒ…f$íÀÃ`~\SâÓ5îas~Ím’…˜ä`gëÈ=}h&—yÐxï‹Îi î= güqúÕI¼;t×rOï–LÏ2Ž~VlŒþX¢Ã&“JÕZ6TÔŠîÎ>vù>ö=þðüªÞŸ§Ok{4ó\U×j‚Äí‰~¿¥4¨¦7 ¨{ŒÑ˱R*^GZŒÃ) ùzŸÊšhyoæ³n8ÈÀϵMI€UpÏ¡Ö4J>R¼c>¤zÑg¨˜|éÉû1…LL¥ŽÜ’Hô>Õ^]-Ý£o0>Ó½•ˆÁ=éɦôbÓeŽ9”H‹æ)sž¼ûu¥¶ÒÌWI$Ö(ªúðëR•Q@Q@UMKOQ·òžI# å^6Á4¥ºEyØ€““ùÓn˜|©æ`©+Ç 7=h>îåšO´YFfS QµAçž Ô_õ?ª“¸z¥«É6õŠG&1´Ž@8n9éÎÚ¹a“Iµ—ærAÎ?J]’åK *oÆÒWŽ@`HçÚ¡–1 P–&6§v`ô5Qi'qÓî©þf³î!v¸Ü°yƒËg8èÝy÷§z„1bFŽÉÃ!S»«g-ǹ5™å’í˜<ÎOÐrzg?_ƘšhÃch\/Ý«Bˆÿä,ÿî¯ò¬ºõÞ–­lE1Rž´”PEP7 ÍCÜbdzÑ‘ëH#ÖŒZ2=i6§¿ýôÆ€ ©ïÿ}Ÿñ£j{ÿßgühÚžÿ÷Ùÿ6§¿ýöÆ€ ©ïÿ}Ÿñ£j{ÿßgühÚžÿ÷Ùÿ6§¿ýöÆ€ ©ïÿ}Ÿñ£j{ÿßgühÚžÿ÷Ùÿ6§¿ýöÆ€ ©ïÿ}Ÿñ£j{ÿßgühÚžÿ÷Ùÿ6§¿ýöÆ€޾ìM) z…?Q@ ¶?î§ä)~P00ì(6ÇýÔü… 9  ú€(HSÔ)úÒmû©ù Q€v›SÐPF Lû<Ü9#Ž3”­I@ˆÿä,ÿî¯ò¬ºõïNÁô«[PéG–{ñ@ °­FwÍAÐfÜð¢€$c £hô òÖšc´žYõ¤òÚ€ ¹Ȫk&Û¢‹NÌ€æEÝ€ÿ^•®ì1ai†£-M»îùR>FŸOoZ™õä %žÕ`¤-IäžN;tüè’³°7úz¦æ³ `“û¥ããSZÍeu D´ÚvîùâðúÔoì¶ÿóÂ/ûàQö[ùáýð(û-¿üð‹þø}–ßþxEÿ| >Ëoÿ<"ÿ¾e·ÿžß€²ÛÿÏ¿ïGÙmÿç„_÷À ì¶ÿóÂ/ûàQö[ùáýð(û-¿üð‹þø}–ßþxEÿ| >Ëoÿ<"ÿ¾e·ÿžß€²ÛÿÏ¿ïGÙmÿç„_÷À ì¶ÿóÂ/ûàQö[ùáýð(û-¿üð‹þø}–ßþxEÿ| >Ëoÿ<"ÿ¾e·ÿžß€²ÛÿÏ¿ïGÙmÿç„_÷À ì¶ÿóÂ/ûàQö[ùáýð(û-¿üð‹þø}–ßþxEÿ| >Ëoÿ<"ÿ¾e·ÿžß€²ÛÿÏ¿ïYr(Y*…› ¦€8ßÿÈYÿÝ_åYt걓ñ¥mýRØÝÍ&­1ÑFâœ"QTEP[ߺŸZ©v+µÜž^BŸ0§\ç¡öF2KI4¯·¬pJÒN •̌ç=N:VŠ[Ú²üÂ@=”pɡߨ -mÆ1oÆqòýiÉ1¶èâE mʨzRôPEPEPEPEPEPEPEPXòÿ­÷Ûùšãí:“õ ¢€ )V÷î§Ö³Ärµç™«miÂõ>ÿJ”í+Œž;yžê6‘#Wv[̪‘ýiú^žÖ³5âȧÀ¿óÕ¿!GØþz·ä)ûV°/üõoÈQöÿž­ù =« Øþz·ä(ûÿÏVü…Õ…ƒì ÿ=[ò}ç«~BjÂÁöÿž­ù >À¿óÕ¿!Gµa`ûÿÏVü…`_ùêߣڰ°}ç«~B°/üõoÈQíXX>À¿óÕ¿!GØþz·ä(ö¬,`_ùêߣì ÿ=[ò{V°/üõoÈQöÿž­ù =« Øþz·ä(ûÿÏVü…Õ…ƒì ÿ=[ò}ç«~BjÂÁöÿž­ù >À¿óÕ¿!Gµa`ûÿÏVü…`_ùêߣڰ°}ç«~B°/üõoÈQíXX>À¿óÕ¿!GØþz·ä(ö¬,`_ùê߬ÿ,DY$nOûƦSrÜ?Äò÷WùV]@ÏU‡î~4òqT¶h¦ ¢˜QHÜ)7W2=i3ÏÞýÔúѦ®›ýÕÿÙ¨{ŒÐ¢Q@Q@Q@Q@Q@Q@Q@Q@cËþµÿßoæhŒñü…ŸýÕþU—@«ÜüiíÒ©lAî)ô!@ @=h`&hɤJ£æ ïÝO­gúé¿Ý_ýš“Üf…€( Š( Š( Š( Š( Š( Š( Š( Š+_õ¯þû3@gˆÿä,ÿî¯ò¬ºõX~çãO= RØêEè)¡ E0 EéÒ QPÀ€Jzu¦¿u>´iŸë¦ÿuöj—¸Í )Q@Q@Q@Q@Q@Q@Q@Q@V<¿ëdÿ}¿™ 3Äò÷WùV]z¬?sñ©*ÖÀDz‘OO»@‡QLŠ) ƒHÊ‘IHAR'JcE{ߺŸZ4ÏõÓº¿û5KÜf…€( Š( Š( Š( Š( Š( Š( Š( Š+_õ¯þû3@gˆÿä,ÿî¯ò¬ºõX~éúÔ•k`W'­(P!h¦L,{R¡½iÔ)…=(§Ž*EáEŠ×¿u>´iŸë¦ÿuöj—¸Í )Q@Q@Q@Q@Q@Q@Q@Q@V<¿ë_ýöþf€8ÏÿÈYÿÝ_åYtêžµ-RØŠb )€T$œÒsN Š@8ÒÓ­-U½û©õ£Lÿ]7û«ÿ³T½ÆhQHŠ( Š( Š( Š( Š( Š( Š( Š( ±åÿZÿï·ó4ÆxþBÏþêÿ*Ë R¿Ö¦"©ZL|ÀÓh¦Q é@ éO?Z@-@U½û©õ£Lÿ]7û«ÿ³T=ÆhQHŠ( Š( Š( Š( Š( Š( Š( Š( ±åÿZÿï·ó4ÆxþBÏþêÿ*Ë QN3õ©TàÕ!¢˜À*&êi”˜ C”Ðb¤ -À«{÷SëMÓi·²®Uzœz¡î2ÿŸüõOûèQçÅÿ=Sþú€<ø¿çªßB>/ùêŸ÷Р΋þz§ýô(ó¢ÿž©ÿ} <ø¿çªßB:/ùêŸ÷РÏ‹þz§ýô(ó¢ÿž©ÿ} <è¿çªßB>/ùêŸ÷Р΋þz§ýô(óâÿž©ÿ} <ø¿çªßB>/ùêŸ÷РÏ‹þz§ýô(óâÿž©ÿ} <è¿çªßB>/ùêŸ÷РÏ‹þz§ýô(ó¢ÿž©ÿ} <ø¿çªßB>/ùêŸ÷РÏ‹þz§ýô(óâÿž©ÿ} <è¿çªßB>/ùêŸ÷РÏ‹þz§ýô(ó¢ÿž©ÿ} <è¿çªßB:/ùêŸ÷РÏ‹þz§ýô(óâÿž©ÿ} <ø¿çªßB²d ÈäíÈúšã|Gÿ!gÿu•eШ§qNKa)ȧS¢˜DÃæ4€@ 8¤T­:Š`…±H —g!~µ[5 a“ëFO­>´dúГëAm£%±õ4ß5¾?:<ÕþøüèóWûãó£Í_ï΀5¾?:<ÕþøüèóWûãó£Í_ï΀5¾?:<ÕþøüèóWûãó£Í_ï΀5¾?:<ÕþøüèóWûãó£Í_ï΀5¾?:<ÕþøüèóWûãó£Í_ï΀5¾?:<ÕþøüèóWûãó£Í_ï΀5¾?:<ÕþøüèóWûãó£Í_ï΀8nŒÐÒÐâ?ù ?û«ü«.€=EsƒZwÖ©l!ÀàÔ”ÐÀ)»9ɤºQ@!8 –Í0ŸJ@W¹èµ&2³\”Ádà’=©æáB«lŸ§j| 0^!çc`u©¢“ÌMÀõ¡ÆÀ>šÒˆ]$(i'i8å=ê@³ ’¼c숪í€KuéÓŽzþ†´¼¨ÿçšþTyQÿÏ5ü¨ò£ÿžkùPåGÿ<×ò£Êþy¯å@•üó_Ê*?ùæ¿•TóÍ*<¨ÿçšþTyQÿÏ5ü¨ò£ÿžkùPåGÿ<×ò£Êþy¯å@•üó_Ê*?ùæ¿•TóÍ*<¨ÿçšþTyQÿÏ5ü¨ò£ÿžkùPåGÿ<×ò£Êþy¯å@•üó_Ê*?ùæ¿•TóÍ*<¨ÿçšþTyQÿÏ5ü¨ò£ÿžkùP}ú…˜ ½¾¦«Pâ?ù ?û«ü«.€=E­.1T¶¹§©íLú)€Q@€ilt¦ëHcIÏÒ’˜ˆn:-AR÷`zSJŽ£‡€\ØR€A@*’®¬ y}1@}¢oùë'éþ}¢oùë'éþ}¢oùë'éþ}¢oùë'éþ}¢oùë'éþ}¢oùë'éþ}¢oùë'éþ}¢oùë'éþ}¢oùë'éþ}¢oùë'éþ}¢oùë'éþ}¢oùë'éþ}¢oùë'éþ}¢oùë'éþ}¢oùë'éþ}¢oùë'éþ}¢oùë'éþ}¢oùë'éþ}¢oùë'éþ}¢oùë'éþ}¢oùë'éþ}¢oùë'éþ}¢oùë'éþ}¢oùë'éþ}¢oùë'éþ}¢oùë'éþ}¢oùë'éþ}¢oùë'éþÇvs—fcŒsM ?Äò÷WùV]zŠž´¸ª[ZPy¦€äRÐE0)¥³ô¤Æ0·¥%Š`CqÑj ‡¸ÂŠ@PMbr¡qÉÇ?B¥ï/ähÃÿy#@ûËù0ÿÞ_ÈЇþòþFŒ?÷—ò4aÿ¼¿‘£ýåüï/ähÃÿy#@ûËù0ÿÞ_ÈЇþòþFŒ?÷—ò4aÿ¼¿‘£ýåüï/ähÃÿy#@ûËù0ÿÞ_ÈЇþòþFŒ?÷—ò4aÿ¼¿‘£ýåüï/ähÃÿy#@ûËù0ÿÞ_ÈЩ;ˆ$pâ–€8ÿÿÈYÿÝ_åYtê+À4½j–Â`:ÒÓÊjJ4·¥0šnsô¡ŸJ)€Q@ÜtZ‚¡î2³[ÈQÀl’M=Qœ¿ðàsÞІ˜Ÿc–cÊà “Þ‚“–ù\Î ý(ºX••0ç'×4§ï§Ôÿ#RÆP[+¡:;̬¢O0‘QL}:áV3¡\f>¤ôíüèd‚íRPÒä˜ð¤·FÇÒ¤ˆS¼ \IÝè>”5ºº@ªÿx~•%PEPEPEPEPECRÓMóDËwqnPüÞS‘¸zõèê¬Tg@äýiÔÇøþBÏþêÿ*Ë Q^‡ëNúÕ-„! {S¹ýiá°(…³M'Ò õ¤¦E0 (Ž‹PT=ÆR¢€ BÆFq@ ±?»ÿñ£bwÿ?ã@Äþïþ<Ɖýßüxÿû¿øñÿ6'÷ñãþ4lOîÿãÇühØŸÝÿÇøÐ±?»ÿñ£bwÿ?ã@Äþïþ<Ɖýßüxÿû¿øñÿ6'÷ñãþ4lOîÿãÇühØŸÝÿÇøÐ±?»ÿñ£bwÿ?ã@Äþïþ<Ɖýßüxÿû¿øñÿ6'÷ñãþ4lOîÿãÇühØŸÝÿÇøÐ±?»ÿñ£bwÿ?ã@Äþïþ<Ɖýßüxÿ(U\àc>äÒÐâ?ù ?û«ü«.€=4Α’­¿>ÈOòŸiˆv“þý·øU' ƒíQúIÿ~Ûü(ûT~’ß¶ÿ wA`ûT~’ß¶ÿ Qw:Iÿ~Ûü)†ê3ÿ=?ïÛ…j°“þý·øSº>Ó¤Ÿ÷í¿Â´Çé'ýûoð¢èaö˜ý$ÿ¿mþ}¦?I?ïÛ…@iÒOûößáGÚcô“þý·øQtsÎŒCÿlÛü*0rOûößáRÀ<ÁýÉ?ïÛ…`þäŸ÷í¿Â˜?¹'ýûoð£ÌÜ“þý·øPæîIÿ~Ûü(ó÷$ÿ¿mþyƒû’ß¶ÿ <ÁýÉ?ïÛ…`þäŸ÷í¿Â0rOûößá@˜?¹'ýûoð£ÌÜ“þý·øPæîIÿ~Ûü(ó÷$ÿ¿mþyƒû’ß¶ÿ <ÁýÉ?ïÛ…`þäŸ÷í¿Â0rOûößá@˜?¹'ýûoð£ÌÜ“þý·øPæîIÿ~Ûü(ó÷$ÿ¿mþyƒû’ß¶ÿ <ÁýÉ?ïÛ…`þäŸ÷í¿Â0rOûößá@˜?¹'ýûoð£ÌÜ“þý·øPæîIÿ~Ûü(ó÷$ÿ¿mþyƒû’ß¶ÿ <ÁýÉ?ïÛ…`þäŸ÷í¿Â0rOûößá@˜?¹'ýûoð£ÌÜ“þý·øP%â?ù ?û«ü«.€=_õ†™@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ÇøþBÏþêÿ*Ë G›ýa¦PEPEPEPEPEPEÙÕ?û¦€£MÇä^¾• ³[Ã;ìÂ$p(©ufé¸ô…”à4 L‘I0rA2d|¤öVK«v·²keýê"«—R;G>ç¯ähDrãh pÝÿ š´„å grõ9 ¹¸ŽKwD,XŒ´Õ–`²É¸ã§_Æ€#—Ê”_‚§Uqcf$’Oâml·Q@XÙ³)c¸¨À%»voÌOï΀«< ¿Ò½¼?:iØO%qÖ…©Èaùз¯÷‡çBî#Ö€9ÿÈYÿÝ_åYtèRÝ[—8ž/ûìS>Óü÷þû}¦ùïýö(ûLóÞ?ûìPö˜?ç¼÷Ø£í0Ïxÿï±@Ú`ÿžñÿßb´Áÿ=ãÿ¾Åiƒþ{Çÿ}Š>Óü÷þû}¦ùïýö(ûLóÞ?ûìPö˜?ç¼÷Ø£í0Ïxÿï±@Ú`ÿžñÿßb´Áÿ=ãÿ¾Åiƒþ{Çÿ}Š>Óü÷þû}¦ùïýö(ûLóÞ?ûìPö˜?ç¼÷Ø£í0Ïxÿï±@Ú`ÿžñÿßb´Áÿ=ãÿ¾Åiƒþ{Çÿ}Š>Óü÷þû¿k‡þ~#ÿ¾Åk‡þ~#ÿ¾Åk‡þ~#ÿ¾Åk‡þ~#ÿ¾Å'Ú ÿžñÿßb´Áÿ=ãÿ¾Åiƒþ{Çÿ}Š>Óü÷þû}¦ùïýö(ûLóÞ?ûìP. 'þûÇ’ÕÝΙN˜q@}®ùøþû}®ùøþû}®ùøþûŸjƒþ{Çÿ}Š_µÃÿ?ÿßbµÃÿ?ÿßb€µÃÿ?ÿßbµÃÿ?ÿßb€íPÏxÿï±GÚ`ÿžñÿßb€´Áÿ=ãÿ¾Åiƒþ{Çÿ}Š>Óü÷þû}¦ùïýö(’ñ¬š«²0a´r{VmÿÙlibstruts1.2-java-1.2.9/doc/images/how-to/netbeans/building7.jpg0000644000175000017500000013425310404045230025100 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„   (1#%(;4>=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀ‚NÿÚ ?½â›ë»9­E¬Æ Ñ;¾1m¨9_ζ¡ÊüÄɵ±Šºæ Ú{¿³m @•“'p$p#ã>øãž„WK¡Mkm¼ÿ¯øBnȯuí^ÔÆ­+'š»ãbbpËÏ<-¯o!91’kzô2I²JÕ PP`‘·Ž£ó*•6.i ½®\J±A3Ë#tD…XŸÀ ktÒ%¶Õ|Gw’Ûí 8-°aŸN“§InÒ+jßó÷ÿÓü*½Œ;;þM[þ~ÿò…ƃ‹ÿ ­ÿ?ù ?ÂcÁÎÅ#ÕyÿJ?÷í?ÂcÁÎËFûÄáÕ WaØì£$ dão¸üê}/éŽòu?µÃ[¨œÌƒ-·€ãœmÈê?:=+\\Ò#mg]Žà[É$«1 ym†ÉÆ1žôý•;\9¤-Ƴ®Z8ŽæI!r7$IB(T©½ƒšHh×u}»Åà ÞRàœ ãØþT{}ƒšAÿ ©ÿ?_ù Ÿ±‡`çe„Ôµ÷·ûB Ú ó¸+Ôçn*}+Ø9¤@RÙ´šv•ûlZC¥D’[iI±y³D޳g!Ç™‘ë’¦¦Ü¹¾×+X±¨6•,úš$VR[d’-à‘¼È뜒^1J<É/˜;jfø£ì^l bñ€á™¡D‹÷\ð GÁéÀ$‘zºWê)[¡¯æ@$ ö«]ÇC6Ãý!1æ |¹Ï½ggÛ©_ä%ݤP¥œÓÛIs›4Nï(Øå™JG¿#8Ç­N÷[\ès¨²®®¢ Óä8PñÌLiÇ÷Ácƒõ={Vßg¹M=J8®´ë(#¸´íašGf ƒæà+e²Ì;dôíÞ#tÛî7°ëË9ü,aµ˜·{’'EW#n2ØbO›×€Æ©sÝönSu¯Ù¶ù2ý£ûþhÛ×û»sÓÞµÖä›Ðê°iúN2(šê>Õ€±Ç̸É랣¥bàå).š{$=&Ò…þ‘ ±YùÞyçÌ Ã ƒŽ¤‘õàR´í&ƒK¢}:;Iu-&)c³–åÒQt±¤l„rSî¹ã·>´¤ÚŒšk¢žÀi1-½µ´¹´ùØÏ:KÉ'o$Ó8#ŒS\ÜÚ¾¿×ibÄ3ÚÚøŠÚhd´LÙ6nŒ›øúõÝøÒi¸4÷ 1­ ®¹½†Þe —ExÖ2õ/¾:0}µ„­õ6dšÖÔmìî­™äŠeHUA K) bÿ8¬¬Ý›]ûÿÕ¦¶ ‚ãKMGH†HlŒ-ožMŽý¬0݇$‘œã=)µ+I†—DÖ iea^ešÝÉiqñ°g%JnGN™ãµ)]»ôºdбý´9ÄÆÞ µóºù2y¤ž²÷nëTïͦß0ÒÄCéy!hJþâO,\LŒ¦N1ÉP£Œý쌟ÍÏšÂV.nÓ¤ûc]ÛÛÁ“DÇ$¬û¾òcå}à¿zŸ{KN¥˜ÒÀjw.^ÉÜ"ùKå,b,}àXú¸9ϵO½Ê‡¥ÇGý–“Ù[ÿ¡›w’åe'i!A;2ÝGÁÍõ›ô ÓÒÖêÍ&Ú5ߨç.6 Á†ÂWHéD®º]³ÍÓRÚâ7’¯Ú2f óí Áã®Ú-+¯˜hP×^Ý‘– ke 1Ù,SFI_M¨“’=y«§~¬™Õ©!@ (hhE-!‹H¡h¥ñuW€­É€Ä„p›²@=ǧë\”ªû;è\£s/|Z›£ôܱ`ÿèU·Ö¥ýà ”EðJ©û@çþ¸ÿöTž%½ÿ¯À9GÂÿQüƒÿÙQõ!{1GƒGüÿÿäþʬy³àÑÿ?ÿùÿ²£ëAìÃþÑÿ?ÿùÿ²£ëAÈð‡ùÿÿÈ?ý•Xòf(ðxòýÿû*>±äÌ_øCÇüÿÿäþʬy Â!ÿOÿùÿ²£ëAìÃþüÿäþ½Xòf/ü"#µñöÇÿ¯GÖ<ƒÙðˆÿŸãÓÃÿ×£ëAÈÂ@Ë÷þAÿëÑõ öc¿áóûÿúô}cÈ9xLÏñÿ¿?ýz>±äÌ?áóúï×ÿ^¬y³$ÃRC¿ÊÔ^=êQöÇÊzƒótö¤ëß ryÿ„[þŸòÿ^ŸÖ<ƒÙ‹ÿ¸ÿŸÏü…ÿ×£ëAÉæ'ü"Ãñúï×ÿ^¬y³á`åóÿ!õèúÇ{1?áȽ#þÙõèúÇrð¨òûÿ¿úô}cÈ=˜£ÂÞ·¿ù ÿ¯GÖ<ƒ?áóûÿ¿úô}cÈ=˜¿ð‹Ž÷Ÿù ÿ¯GÖ<ƒÙŽÿ„hÏçþBÿëÒöþAÈ/ü#Cþ?òÿ^o䃣Ð-Þ]û¦õ*ÛS¨<ô£Ûß ryÿ„hÏßþBÿëÑíüƒ?áóùÿ¿úô{ äøFÿéïÿ!õèöþAÈðùûÿÈ_ýz=¿r ÿàÿŸ¿ü…ÿ×£Ûù Â8?çïÿ!ÿõèöþAÈðŽÿÓÙÿ¿ýz=¿r ÿèÿŸ¿ü‡ÿ×£Ûù ¿ðùúÿÈýz=¿ùþÿúzÿÈýz=¿r‹ÿÿý=ä?þ½/oä¦ôÿ|º¿ÈW:,É›6©%’-®cp¸{²0Ú›yàúö¦m¬C,eœªD­!`Q_ Îð3N™Åh#¬ˆ®ŒeYNA¢€"½¸û%”÷wy1³íÎ3œPKmZ9ÚY-[i YŒìIÏ bxÏúPQk±KqJ›„ÒVMÎ0 €6BãËõîOA’­@Ëqå\Á/Ë6à?Ä@Ǹ sþϽWœ~k‡ÂÆ …l’_iU8yŠã© c9àTÔ-_þZí!Yˆ‘J Œî }å<ö9 Åw­£å¤Ve áH ŸB šš€(^jÛM8[tx­áÊÆBi-÷FOÈz‘@iZr²òÜÆB#1Ü @$ŒÛžœÐiÛnoŸ+µH ¬ÎI,1´ äl†€§Þ­ô *£ Y<:‘÷XŒò§áÓµY  [_C"Äó›TI¾Ø®<ÇL)c¹vŒ`ëÎ\Ôu8ìQú<ˆ…ÊFF×aƒ‚9òÏùÀ }Jy ²Ï$†3Ô…bH8Ã`®:Ï¥\  s]Ü-ëÁ²J#dreÚÇqa…Á?)êGZXõ+I a$$H«lm£pØÀ'#ƒƒÈõž±ksm ¥¶Ü2Ä Œ6€8èO8  ¥Ô-avG— µ†Òvð 'Ž ¹nƒ<ššRx#š&ÝŠN1FE2òãì¶Ï9]Ë óŒ.~füN;ãɯRƒ•#Þíé“„w-†Æ=1ÜPWR´gŽ?0‰$$,lŒ#HÈûÀóÛžœÐiÛ0[ä–P7«(pX.Tãæ0äqÈäšCªÙ„fóhÆ”ÿ>H¯0É®zZGÕ­©.Br o¼ÊÙŒó¼{ò8 æ€u+@Œ…rH!‘ƒ.1’ÃP2 'zб ©<ÍnŽE §È#"€å„lP||¡Ž>çœPmEÚÝæ»…"Q#D‹´¬ì¬ÀàøIã&…¼È™¬eGNwxn€Æ€tg‚â9–ï{$›Éxþ÷2“ÐŽq)çÛ§jÖ  z£GöSùÊÏÌo.ÆR ’‡®(£Y[j1Ç"Hâ·‹ËXæ·pÌŒ¹ÝÃ÷`Ü¢€$þlj¬¾ÎÞRæMçɈF¸#k ÷RFI'œöZµ²Kiî$S“+d²2N=þfsÿÇa@h6ê;8õO´ÜÂóIå '—µ˜ä0ŸÐPÒɬM ÛdIžâ6’3¼· ¹£‘ÔsùPC¢eÉå°Y|ØÃ£¾df;3÷zp3G|rf-6K|iㄲ“lcòp¿}ºîíœó VVíkˆÒ +ȸ\`3Áäç’yãé@Ð= =µ½ÌÓ¼1§”›,%Œò…2Y²:1ì9  WZ4×m#Ïx È›>X°«òH¼ çþZg’y×€ §:\Äâç÷1Ló,{9%Ãg'>®qŒq×=@ú˽/ ÒÇ4‘ù±"0K9% ܆ó öâ€m¤Û£¸·HÖ,¡kcæ®ÀÍÊ”uõ ò0±hΰA—~a¶Ròñ‚æç‘”^8ÈÉ<Ð%²º¶œÜDóO<¬ÅÞ8ÐR¨˜sò qÜ´£§ÀÖº}µ»^(•¯B@б@ÃH„iÒY‚ ³‡ù—#å#` ž@ ª}@õ9 ¢¶‹Lš)\s¶A²ÖͶ|Å;(8ûƒ©9Éì1@])Á}פI0‘mÜUÃnnpXãuät†Û=À)l!Äx!UѰÜòv£#ø ›HóoZãÏÆé›vzŽ:ÿÓ/ü{Û]ÚOã]Z‰¤’Vl˜ÕÅ+?y‡?»G\ƒ@´ø×O¶·r Å£èHq@»Ñœ‚B‚NÐIü‡&€2 E™;y&I¢šK„y­dUËÈ9ÆxsÐŽ™ö !¼¹QnRã1ç ³1ÙÏËÌ×woCm)ò›.‘Ü1‹,›œ·ÈsÁç9Œd :(KÞljrÀ}ã€0¹ô>”í“ûÐßmÿÄÓ6Éýè?ï¦ÿâhÛ'÷ ÿ¾›ÿ‰ Û'÷ ÿ¾Ûÿ‰ lŸÞƒþûoþ&€lŸÞƒþúoþ&€ ²zûé¿øš]²zûí¿øš6Éýè?ï¶ÿâh6Éýè?ï¦ÿâhÛ'÷ ÿ¾›ÿ‰ lŸÞƒþúoþ&€lŸÞƒþûoþ&€ ²zûí¿øšM²zûé¿øš6Éýè?ï¦ÿâhÛ'÷ ÿ¾›ÿ‰ fhÕËl;c/ò1=äZ{$ªÄ àüíÿÄÐm“ûÐßmÿÄÐm“ûÐßMÿÄжOïAÿ}7ÿ@ ¶OïAÿ}·ÿ@Ù?½ýôßüM&Ù?½ýôßüMdþô÷Óñ4m“ûÐßMÿÄжOïAÿ}7ÿ@Ù?½ýôßüM.Ù?½ýößüM&Ù?½ýôßüMdþô÷Óñ4m“ûÐßMÿÄжOïAÿ}7ÿ@Ù?½ýôßüM.Ù?½ýößüMdþô÷Ûñ4m“ûÐßMÿÄÐd/läÂB‚p²ñÚ{+‰$Pc ŽS,Äg€ZM²zûí¿øš’oøù‡ýÓÿ¢Í$.ûw|È0¹çø~÷ÌÜût¦¨½Åõ«„¸»‚#!d)ǯ4%½ÄQ—·š9»£`Ã>œ}hJ( €»*Rq@ ÂHXÉ=a@PH’@©4Û þóßü(e!” ƒÐŠGuÝ‚¢Œ³1ÀÖ€ ‡Q±žUŠ Ûy$nˆ’©'ð€,ÐS}É¿ëÝÿšÐ‹–Û+ôûçŽíÁàr?È œò§æ#åè9é@Ës SÅ ±K’£iÇêz sÜŠ,­ÌMtÖÊÄÊ«¸€§qߦ~eã¯#Ö‹uZŠââ Tq4p¡8 #…ôæ€ {˜.½´ÑÌ€à´léÅK@0J†M¾j}#2¢v ª2I8P3«éë2Äo"Üà †Êþ}[ŠDš0ñ:ºŒ§ þ4ꉮaW(_px8J A¡ €»*Rq@ É(%pqÿ×úP\Ǽ¿îå@ýlÜþÝÝZ…pO™#9ÇÀärxæ€&›þ>aÿtÿè³I ŒÊ0»ºð¼7ÌÜŽ=0@c.5;ÍŽÊ|«~T‘ÞoOóüꢕõC³VºÅâÉÊ­±É,%ËC¯‘Ôl€ [¡H ë™/fº–Z(#‡i,fÚï¸pyÀ+_—< ÎÒÚ½šÜîó&¹†5•.]÷ ʲíE\ŽøNy¤W3µzd”ïþüCüÖ€)ºãÌoU#üþT¯1®}U¿'äMÄ+;ôÿ@ØÀ“Æîäûúþ•jY‚¶±‚0v÷ u}ÒiÓ[D…ç¹GŠ$ ±Rz’Àò{~³.¡:¤¶ö·É ¾j§‡fs÷Hó:ÁÆ  JpŠ×B[QWoBý¼Ëqš±¼jY×kãpÚÅNpHê§¡ ¡&û“×»ÿ5  îŽ$”gf Ü"€sÊŸ˜— ç§ZË×.míÄlò:Í͈ՋlïÈéÓrä¹þUï¢¦É \̲>.¤‘”‚±ËO¸#ƒ÷#Lò§4ÔU¶f•dQZç‹í<äß?#·îd  °’Úi¶zœFYYaŽâè5ÄŒÒïl3m$.N8è¼à]´y”«=AÁ¤w­¼¤BAJÉa´’1ÓÚ€6’ŠOR$±¤±Ö@óxQ‰iÜòBdõÿhÐ朋—dˆ0<„n¤ä°ÜOæMNH’@’MfIä!@èàüž‡ü;ÿž(Ο»Êînù­Z  É?yvÂGòù#qìN¿X²…T´‚@ýTcÒ€'¸ÿyÜ?Ê€,7úÙ¸ñðÝztZ;NõmÃ9ÏÞáy' @Íÿ0ÿºôY¤€†FÆFå]Ýx^ænG‚˜ ÑZïí}Äy#*–#9Rˆô"„ì{}8Ãx²7DŒ\X;Á ùÜF>¤ƒó cnÐ ô Ö\H2¹d)I^3‚A?tŽê?*jéö‹$oåÊÆ6W]÷S0È Ž àòå@()àY€ùвô"€!û<4¬GqÍ[è(+ˆÁ~b¥{óô ¢³ áÝËÛj€"¸·YÂeÞ6Fʺc+Tõr ƒÖ€ þÎ_ùý¼ü ÿãtf–V$ÎÕ$åŽI$’I÷$“ÇñÅ$ßroú÷æ´5ÑÄ’Œã,ÃᛃÀäPAÎySóòôô  —Zu½ÔÆIL£räT`ŠB·9=0yëÀÅ£†ÂhzXÄ—¦ì¼®û™Õ†Äff ä‚z’9éÀÂsmY…‹##š.-ÄL ä,¨g×ë@’d-úøÃå¶æ/º1þ¯=(EÛ{³cŽq@ e¬¬2Á  ¦ÁI?½lzb€-¨Ú € ¤úTCR\]2¢1ð°ü¨â"ÅqG»dh¨»ŽNŸÊ€€Ad4TXŸ–,Fxè==èʪ¢…Q€:JZ‚{T•·(Þ£½: Äõ'½-Çü{ËþáþTa¿ÖÍÀÿ†ëÓ¢ÐùÚw«nÎ~÷ È8Z]FêÞÏËšæá-Ô`qILc¨íŸÊ’‡öÞ—ÿAkûãÿ²¦ý·¥ÿÐZßþøÿì¨þÛÒÿè-oÿ|öTméô·ÿ¾?û*?¶ô¿ú [ÿßý•Ûz_ý­ÿïþÊ€í½/þ‚Öÿ÷Çÿe@öÞ—ÿAkûãÿ² ûoKÿ µ¿ýñÿÙPý·¥ÿÐZßþøÿì¨þÛÒÿè-oÿ|öTméô·ÿ¾?û*?¶ô¿ú [ÿßý•Ûz_ý­ÿïþÊ€í½/þ‚Öÿ÷Çÿe@öÞ—ÿAkûãÿ² ûoKÿ µ¿ýñÿÙPu ¬µXèÊ 1’9ûÞÔ¯®én厭m’s÷?û*Oí½/þ‚Öÿ÷Çÿe@öÞ—ÿAkûãÿ² ûoKÿ µ¿ýñÿÙPý·¥ÿÐZßþøÿì¨þÛÒÿè-oÿ|öTméô·ÿ¾?û*?¶ô¿ú [ÿßý•Ûz_ý­ÿïþÊ€í½/þ‚Öÿ÷Çÿe@öÞ—ÿAkûãÿ² ûoKÿ µ¿ýñÿÙPý·¥ÿÐZßþøÿì¨þÛÒÿè-oÿ|öTméô·ÿ¾?û*?¶ô¿ú [ÿßý•Ûz_ý­ÿïþÊ€í½/þ‚Öÿ÷Çÿe@öÞ—ÿAkûãÿ² ûoKÿ µ¿ýñÿÙP>³¥:2Zß 1ÂöT÷×t¦yuKuåðTg®áé@ þÛÒÿè-oÿ|öT­?ßî¯òS € ( € ( € ( € ( € ( € ( € ( € ( € ( € (Yþøÿu¤€Š˜P@P@P@P@P@P@P@P@P@P@ÎàqÆÕþB’*`P@5ÝÝW=2q@ óáÿž±ÿßB€>ùëýô(óáÿž±ÿßB€>ùëýô(óáÿž±ÿßB€>ùëýô(óáÿž±ÿßB€>ùëýô(óáÿž±ÿßB€>ùëýô(óáÿž±ÿßB€>ùëýô(óáÿž±ÿßB€>ùëýô(óáÿž±ÿßB€>ùëýô(óáÿž±ÿßB€>ùëýô(óáÿž±ÿßB€>ùëýô(óáÿž±ÿßB€>ùëýô(óáÿž±ÿßB€>ùëýô(óáÿž±ÿßB€>ùëýô(óáÿž±ÿßB€>ùëýô(óáÿž±ÿßB€>ùëýô(óáÿž±ÿßB€>ùëýô(óáÿž±ÿßB€>ùëýô(óáÿž±ÿßB€.Mþ¨ÿÀ?ôH 77QZ*wüíµBFÎIÁ=Ð`ê!h×L]"E,Åãe ¼žÞ” ¨Œ/½1¹|¶ÈŠƒÓ¦TóéÏNhj(+ZŠ9î´øæ$Bòe\dDÄq@¿³lçÊßþý/øPý›cÿ>Vÿ÷é€ìÛùò·ÿ¿KþfØÿÏ•¿ýú_ð û6Çþ|­ÿïÒÿ…Ù¶?óåoÿ~—ü(þͱÿŸ+ûô¿á@ ºmœƒìVØ;¿å’ÿq¨?³lçÊßþý/øPý›cÿ>Vÿ÷é€ìÛùò·ÿ¿KþfØÿÏ•¿ýú_ð û6Çþ|­ÿïÒÿ…Ù¶?óåoÿ~—ü(þͱÿŸ+ûô¿á@ ºmœƒìVØ;¿å’ÿq¨?³lçÊßþý/øPý›cÿ>Vÿ÷é€ìÛùò·ÿ¿KþfØÿÏ•¿ýú_ð û6Çþ|­ÿïÒÿ…Ù¶?óåoÿ~—ü(þͱÿŸ+ûô¿á@l4­9íTµ…«ÍÉ…Oñj±ý‘¦Ð:Óþü/øPý‘¦Ð:Óþü/øPý‘¦Ð:Óþü/øPý‘¦Ð:Óþü/øPý‘¦Ð:Óþü/øPý‘¦Ð:Óþü/øPý‘¦Ð:Óþü/øPý‘¦Ð:Óþü/øPý‘¦Ð:Óþü/øPý‘¦Ð:Óþü/øPý‘¦Ð:Óþü/øP¬ßêÏüÿA4€ÈÕày…©Hf•c›s¬2lllaÁÈîGz`gߨOqm2Çe3—·1Â&œ…²û‰mÄüÀ¨àœã€—4wsÈ,ÀieGóA^‚åœçœýͧðÇP#iæÇNµ>T6è¶ê.þeA#*Ç£ŽxùˆÏ4{AÚc»’$ “îŒ+ï]»pG`Œ”º§üißïËÿ¢ž€3¯|¿6/´íû&Öß¿îîãnïo½×Œã¾(¥¼ËñK6È "ÆÆL¦ B’6 ãŒPš_ü}\Ì»”úƒ,¤¡Ð==¢†Æ7‚[/7Ê@þT`HŠJ†f9=IÈÆG4Òn™ÏÚ~O81›bŒ€`䎜ç#ƒ€zq@Ä󅼑&(-Õ䪻Xù’uã?Â:@%Ô¦ú(Ìü´ÎÁò¨ ·žÙzöã4¦Ÿë£ÿÿè @×ÿdû}·Û|Ÿ/Ê“v1œ§¯~´ZK›ÈŠ •bKGç6 Ÿ3m*K¡xnyäÐ-ÄñÅ2ÛJZ_2|B•rÔüÀ ôçÍO5þû¦X®BÛa7L¸Âg~Hb1ÕTwºÐgÔ.E¤²5Ï–èŽcýÖ<ÂÁO<¿L俀$ÎòD˜ ·W"ªícæI׌ÿèEL—R›è£3òÓ:<;Ê 6Þ{dyëیК®þÿ 5eê¢#yl&{T_.L” ¹Êv$s@ZKt‘L#pë ,ñƩÒÒmÇ}¸ €=°}@&[§_2Hî~Óo×y>SwQ”a±Œöï@ ÷¥Œsa5ó\…ÝÁ^¯Í»§8Aëš©5ä¢×zÜ,®ŒÄ8Úà)Ï ‡sÔ@¦ž[yÌtÂ/‘šw ¾6ã*£‘ßé@tédžÐ<­¹·¸Îͼ qÛÞ€64ïøó_÷ŸÿB4j€ ( € ( € (º”׉²;(#•˜mìÃÙTúûR†ýoþ|mÿ9øŠ`õ¿ùñ·üåÿâ(ß­ÿÏ¿ç/ÿ@ýoþ|mÿ9øŠ7ëóãoùËÿÄPR[ê—6òÜZ¢¤Û ›(ËŽP¤w È»ÿŸ ¯û÷@‘wÿ>_÷î€"ïþ|.¿ïÝEßüø]ߺ<‹¿ùðºÿ¿tyóáuÿ~èÓæY¼ß°^³ä‘»sO 'ð  Ò ¿5I²¹CuŒÿtë@ ä]ÿÏ…×ýû È»ÿŸ ¯û÷@‘wÿ>_÷î€#šÎæe öW Ÿ“rÌ@.B>÷hÛ–ÚÝÎFpsžsœ÷  Eßüø]ߺ…tù–o7ì¬ù$nÜÀè Àü(t‚ïÍRl®@PÝc?Ý#úÐyóáuÿ~èò.ÿçÂëþýÐä]ÿÏ…×ýû È»ÿŸ ¯û÷@‘wÿ>_÷î€#šÎæe öW Ÿ“rÌ@ŽÒæ(Â&Ÿt±ŸÇÜÐ…ŠKª¬–ó«nc)»’}(ŸþxÏÿ~›ü(ùÿçŒÿ÷é¿Â€ŸþxÏÿ~›ü(ùÿçŒÿ÷é¿Â€ŸþxÏÿ~›ü(ùÿçŒÿ÷é¿Â€ŸþxÏÿ~›ü(ùÿçŒÿ÷é¿Â€ŸþxÏÿ~›ü(ùÿçŒÿ÷é¿Â€r¡°@9ê1ÐãùŠ’Pç Nyú¥U?ˆBþâxîbŠ+‹KhÌO$’Ý´a‘@ê1Ë×D¥ÊJBY&©½µí‰¶Æi*pF`z…V/gøÁ‹635ÆŸk<˜ß,)#²ƒýkH»«ˆe¥ü¸0yÅJï Ð:)Ä€Zi¦š`29RG•²Ñ6Çèpò"•À}0 PkBÚÚFŽV}ʪÄ,lÜ3m^ƒ©÷'ÃK1Ý[¼È°Æ$eI>F&=¿*aG*Ç#<õè(ê¯âûN§ql§.ÑÚ¾Ðû[jÌň9éíCWvô÷Ú|¦{?³«¼q}âò#÷Ñ7V9<+~_Jmm`*YéSÅ ¢H§g1l˜—‰DÍ‘–~þ³®p~óbTX}š[k8û-ǘap¤í|vT€ä/aû¢œ~„\mùqŒ/Ƚ>ïÊ¿/OS@.6ü¸Æä^Ÿwå_—§© ~\c ò/O»ò¯ËÓÔЋ¿.1…ù§ÝùWåéêhEÆß—Âü‹Óîü«òôõ4"ãoËŒa~Eé÷~Uùzzšq·åÆ0¿"ôû¿*ü½=M¸Ûòã_‘z}ß•~^ž¦€\mùqŒ/Ƚ>ïÊ¿/OS@.6ü¸Æä^Ÿwå_—§© ~\c ò/O»ò¯ËÓÔЋ¿.1…ù§ÝùWåéêhEÆß—Âü‹Óîü«òôõ4"ãoËŒa~Eé÷~Uùzzšq·åÆ0¿"ôû¿*ü½=M¸Ûòã_‘z}ß•~^ž¦€\mùqŒ/Ƚ>ïÊ¿/OS@.6ü¸Æä^Ÿwå_—§© ~\c ò/O»ò¯ËÓÔÐÚ í ´ʯÝû¿*ü½=M0(xþ@Ò×H¿ôbÒ–ÀgÝIi5ô·Rßé¡áqå@dRØ’99ÇéîUÖÍ££Ê“ßëÇ,s+MÏîR|¾p{óSw§õ°2úÿ©O«ÿèmXËvP—ÒKƒC+Fˆ»óŒ³Æ9ÇÖ”_+¸ãŸU*/³Ã!–+ŽG×ejꧺ‡‹dŒƒ?ë•ÇÿK( 2jìrR}L7üE?knb%º¿f*­hH8 E?¿¹KÛ °%Þ òyhÖŒøÎÑäã×)ûo ±&ýWþyÛÿß‹þ"mä ú¯üó·ÿ¿üEÛÈ,õ_ùçoÿ~.?øŠ=·X7êßóÎßþü\ñ{_ °oÕç¿ýø¸ÿâ(öÞA`ߪÿÏ;ûñqÿÄQí¼‚Á¿Uÿžvÿ÷âãÿˆ£Úùƒ~«ÿ<íÿïÅÇÿG¶ò ýWþyÛÿß‹þ"mä ú¯üó·ÿ¿üEÛÈ,õoùçoÿ~.?øŠ=¯X7ê¿óÎßþü\ñ{_ °ƒûMvâa´`bÞ~§Üö{_ °í5Ûˆm†Ñ‹yøŸsØQí|‚À?´×n!¶F-çàz}ÏaGµò þÓ]¸†Øm·Ÿé÷=…×È,ûMvâa´`bÞ~§Üö{_ °í5Ûˆm†Ñ‹yøŸsØQí|‚À?´×n!¶F-çàz}ÏaGµò þÓ]¸†Øm·Ÿé÷=…×È,ûMvâa´`bÞ~§Üö{_ °í5Ûˆm†Ñ‹yøŸsØQí|‚À?´×n!¶F-çàz}ÏaGµò þÓ]¸†Øm·Ÿé÷=…×È,ûMvâa´`bÞ~§Üö{_ °í5Ûˆm†Ñ‹yøŸsØQí|‚À?´×n!¶F-çàz}ÏaGµò þÓ]¸†Øm·Ÿé÷=…×È,ûMvâa´`bÞ~§Üö{_ °í5Ûˆm†Ñ‹yøŸsØQí|‚À?´×n!¶F-çàz}ÏaGµò þÓ]»a¶F-çàz}Ïj=¯Xl­¨8XæŠÑƒ0½¼ä9èSž™ü(ö¾A`òïçËOÿÀ)øÝ/h»~!akûhee†Â ¨eeX%Œ°_ªŒõýhUè4‚”Uˆ%K‚@Æ~v¬Û»¸ÆÞÿÇÄ?XôlU(õ‹‹i«´K7•²¨9 õ±'>üsЏ¤Ý˜ºuþ±`cŠÚÆkó$fImä¼Öçv÷œõü¾Üt9©!H»)c÷´RºŒÂæGݧ=ÿ•žÃ1!„=Ôó\ér\+JÅKF¬@Éã“Û¥W»kX –Zm!¶û,‚Æ?,)a¸sÇÔuõ¨I-€Ø¦cjÒ$77mi›<Ð]$LǸ6P€1• a‰äp9Àrj÷PÜÇg%Œmw#¨ ù@d –*X›#9!úÃÿ£b¤€ÑÓãItkhäEt{uVVSö¶övª–°E6¬HÏéËv:Â\5ªµ´M3£äÆ®˜GñÆsÏ¥ 9iu …c éZ“•ùX$‘?Ná~µ7‹Ðº³.ødõ‡¹‘Ù’A(ùعlŽ06Ç©é’-l$•‘ÕUPévFg‘¡ß¿vQÙš<¶C„íää““êh‡K´…ÒEID}êòJò0;Yz±'fã§$õ -.Êã‡k[¢$gs|¡U•G^p¿?¥7ûÇËDXYBF‘#$Œ¬ª™Û†#†arA І—d!š!É<^LŸ3e׿<œç$»z’y4äÓ­cº7 ¿%€.ÅV  œœ2r}MM,Ê𼋖…÷¡Éàí+ŸÉç@çÑ4ë‡gšßqmÿÆØ]ÊU°3…ÜçÉäò }N¸FIm÷#ïÞ»ØÜÅŽpyÃ1#?tœŒP>‰§\;<Öû‹oþ6ÂîR­œ.àÇ8ÆO' H4»A2K²BË´àÊåX®0Ì3†aóž< mÖ—ÚPÓâ- "?(a‰ÂmÚG^~Rqœ€ppq@ ŸDÓ®žk}Å·ÿaw)VÀÎpcœc'“È€/Ð@P@P@P@P@5y%¶w8Q#súfô•ý¡mýçÿ¿mþÕÄsÁwå–;låÎTŽéë@ruÿÉÿ£€#½ÿˆ~°ÿèØ© #Ôn.-ü9¦¬Ñ,ÞTRÊ æ4+ÔÄœ ûñÎ*â“v`fé×úŇ—½”׿HÌ’ÛÉx­Îì/ï9êù}¸ÆjHGR.ÊXÅ=Ä-®£0ƒ¹ƒ‘÷G©ÏÇ¥g°ÌHaY.¦–ëK’áVe&5cŒžOn”ýÛhË ­?¶ŒÛ}–Ac–°Ü98ú޾µ)%°ÀƺÖe¶¹¹†(wIö%ŽGFn®;êÃ*(; |\ItáY¢P'Q!XöE䯸ðNæçœ òGʈf’T·{}¥äTYÑpË! —E=c9Âôé“Å6jú+ f¶Žk‡¸B£»‰!^‰n8ÛŒI€@.oYÉg¶òG$ò$L¶æ@|¡w’]ryëÞ€¯<š‚X›%óÁq)Y²‘휂@'å”vëÇO˜I§êy$Ku. 7ådÜJ ¿x`m?:ð ¼ñȼDÖ‘»›i&Hžc+d³*,޼Bq¿hÿháˆÔÓ¯$½»[ùQÇ+Ĭ\å]”œv¼ç<`@-Ð@P@P@P@P@P@šïú»?úùú Pz©¨¨ºÿ¯9šPé:ÿÀäÿÑ@ÞÿÇÄ?XôlT:|i.mˆ®nªÊà ‚£ Š`>ÂÖÞÎÕRÖ FÉ‚p9ã½9nÀ‡XK†µV¶‰¦t|˜Õ³àž8Îyô¤-.¡p¬a}+Rr¿+’'éÁ/Ö¦ñzWVeß ƒ>°÷2#Û2@cH%;W-‘ÆÐ8õ=02E­$’²:ª (d[ÈóIr<×–S!ÆTcj®ÃƒÊ•EÈ9Œã ‡GÓá@‰l»@Û‚IÊì ´äò6ªŒê3@=½À¸Žó æ<ŒÌH  ’I'‡aÏlz G±e*б #ÈA‘¹,rïÝ'’¿túPÂÆÜX¥ýQqÊ…ÆÜ Œ äšm¾km"É7˜¡†÷vv;¶ç$’OÜ^O@é@ ‡K´ƒ”’.ä(?zÿ»SÙ9ùN   ãA²’ØÅvžy}æR "¹ff9ò1+œ•ìsÍhAvèR%Ú¥ÙÈÉ<³'ó&€@P@P@P@P@P@fk¿êìÿëäè-@èž¡þ¢ëþ¼åþi@äëÿ“ÿF5G{ÿýaÿѱR@G¨Ü\[øsMX¢Y¼¨¥•AÌhW¨=‰8÷ãœUÅ&ìÀÍÓ¯õ‹.+{)¯Ì‘™%·’ð;[Ø_ÞsÔòûqŒÔޤ]”±Š{ˆZ)]Fas#îSžÿJÏa˜Â²]M-Ö—%Â4¬ÊLjÇ<žÝ)û¶Ð –Zm!¶û,‚Æ?,)a¸rqõ}jRK`6)…«k°A¨¥½ªÆðA#Æï! òŒïÁ]¬û%¹*.N,kβL²Y(O âl‚òywŒœy‡¨©ÚÕ.ÛÄOiºµ¼1˸ ù,L0ÀÿXÞ䓌 €\Ò量ÚX"‡Vcøʬ§¡Á^„Nx͵ñ²m#Ç*B¯.K0yã;S`å—9*{…ÆÜ€ji7’jt7r[ýœLŠè…ÃN?ÃÁÈè € ( € ( € ( € ( € ( € (3]ÿWgÿ_#ÿAj¯@õõ_õç/óJ¿'_øŸú1¨;ßøø‡ëþŠ’GO%Ñ­£‘ÑíÕYXdTdLØZÛÙÚªZÛÅ6¬hÏéËv:Â\5ªµ´M3£äÆ®˜GñÆsÏ¥ 0ÌZ›.ÖÑïˆéµ[ÿŸZM_F&“Ve­ M»MI¯î 6ª°˜R&uvl•%‰^ù@÷ç¦D­¢’VGALe)t{ZS$,ÂPÁÈÛàC¹Â’ ÉO<šiÖ¢ aØÅe*ÎYر`ÜNAWœç#=y cÑ4èŸzÛòwî˱½U[p' «œç$g¯4"iÑA ‹nÒ,¯‚$–W‘²9PImÅAþÉõ4 ZŸvèbgû8ag?y1µÈ° nÆqÇN(õ¼Û[Åo íŠ$‹’pÀÐè € ( € ( € ( € ( € ( € (3]ÿWgÿ_#ÿAj¯@õõ_õç/óJ¿'_øŸú1¨;ßøø‡ëþŠ’=FââßÚjÀíÍåE,ªcB½AìIÀÏ¿â®)7f>žî•·œÌѼ +Ç$ßhhpUÇ÷†N=¸èsRB75 ¦¶³ób{ÉK¼î;ãvqÆqÔu¬öÎGÌ™"ƒÄòÊÎpØ‘úsøRnÝݺ¾¾¸¾²˜ÜÉæGó @ÝŸ4uÇÜíž#Ÿ_–û7Ø·^+²º!‘ШÙP±âDê uç¦@&‡Xžtºx´éBÛ…áÛY‘@$`1ÝÔð0œ-Væu‚8m"7‡|4äGµ ƒÎÝÙÀÚTCz €Gm¯=ÈûBZ¨²ó!y—÷™‘P¯É·dP~nǯJ®Þ!–fH’€É$Má˜4fhѹ*ä8å O= lÚÕêh÷büÛ›;y ³åTåZD91–##¦î”iuÉ¥ºšm:YB™R6×s¦x,W`©†'‘Ç\ø†0í k„sDà?Ìì†B Xaœ…?{`ZÕÌ—‚5¶ey£b‚lÆó1bI]Ø".2¹éÀÉÀˆ$ÅÃ-ŽRÒ#-Ãy£ äG ÆXæ2W #©^à “Ä£Èß`_"!pîí?ÌRÚÅT)Îr0 ätÁ Þ#hÚí–ÂW†ÜM‡ ã-läìÚ*@!‰äq×›SÔU²²kx#v”¶ÎYLl’‚Pæ6=º(ÏÌpDjz„“I\ܵÄm#· “ʲJ„¹Úv1¯ñ(žxÍj.¯<‹û»% ÷/mù°¾âH¨ÂpNxÆ>bUüDÉ+(¶‘å;cYD¦ ÷P¶?ryÁÏ/&€-A«\ܰií½#M®c` 2€¯9ØÄnÙÁ^™8¯­ç\[DÎnfŒ¿šÞ\j®Àn`„Œ`Œ‘Œ.Iâ€&—Sº·šé~Í$Ì–29ˆ>å*v'2rrþƒ4_ûjö;©ä{Xä·[ãŠubÆI7)À£$p¦ã´京ÑÛÜ·Ù£3Áq¾Ï4ífq;¶çÉéÛÞ€*Úk£MÓ$žÕe{ˆÞO0¨b@ÀnÐÇŽ¨Ë ç¯õË{eÛlÑÝÜy¾IŠ6,Q°Çæ‡ßÂyRÕfh`cc"½ÆR$rS2 äÀ¸RÀã$À8­ß‰ ¤·¬Ù£ŒJ#p[çdVb Û°}Æ1#¸ x‚{eº{‹D„º(勈|àmÀùx$ƒê9 û\–ÒhÅÄ Œ™eE`å¢ò¦`=f.@$tùŽMI·tö³Iý™/™^6JƒŸXÜc¨z¯læÔîTCç,ö*E£X0²°‘O8^“ŠËÔ5+««ý-8âÌŒB>íλGucqw8€hP=CýE×ýyËüÒ€/É×þ'þŒjŽ÷þ>!úÃÿ£b¤€ÑÓãItkhäEt{uVVSOÒ®´m'GÓÒxá¹k·2Éʹòåa¸n(=€hq=B-®¢Ù*cÍ‹qÊžªÊÃV9ˆ VþÁÓ÷c7y#?ñû7ÿE€»eem§Û {H„Q‚N$’z’O$ûšž€+>k%иdmù @vÌ:1\í$``‘‘è(KH·Ôlíí¦’ c‘|̾vžAÉù²¹ç®y "ÏËT *Ióy‡8Î\Ç¢ðOðA€ h°K À©¥Y•I*TŒ}Ü\cÀ#šŒé~Z YT‚O˜³È$9Æràî=‚„z Hºu¢FѤ ¨Ò$¥T7&ݸ¦6/Ž(Ñ4å•dÿ:à)Þß( ¬s†E!GœN@ N»yÞ{}ÆãýwÎÀIò…ààCÈÁæ€&M:Ö;£p¨ÛòXìQXõ`¹Ú ÉÉ''ÔÐúu«Ûù%SÌiAGeev$’Œ–n‡¡#§ÑìvàBÊp£zÈÊãŽwœåß'9;ŽIÍCýƒdnÚfL¡‰" –€Î͸ç.¿ÌA#'4aô»'GF‡*é*0Ü܉[s޽ÏåÛÙt{ZS$,ÂPÁÈÛàC¹Â’ ÉO<š’m:Ö{¤¹‘ÎB…]]—wc¡ÿm¸ïžhÐØÛÁysw{g¹Ûæ¶âwmtzP_Nµ{$£*y((쬮ĒC‘’ÍÐô$tâ€+®‹j$•˜6"¦ÆddÛ¸çx;·ï–Ï à÷$FÑìYQL,¤ yƒ$áð~~I?6s¸úœ€H³*@YP™MÉ<ŠÀ±ËAÈòTqžq@ŸK²¸òwôۡHLLјÁÆB•#t;dt&€4{pâ민3ÉÝ““ÉÉÉäЧÒì®.òú@ë ù˜ êA Œãwg®8éÅFº%‚Ã")<¸“Ë ç>;+só¨ÉÀl€  ZºµŠî0“À;•‘Ê2ŸPÀ‚8$pz;Ð?Ùv[6y96Y‰6샜†-†,9$N@ çÑ4ë‡gšßqmÿÆØ]ÊU°3…ÜçÉäò PÒ-ïmnbÆÉ'ÜÞg'k´f-ØÏ÷N1ýy .§¨ìÊÀ…bXµ—n û ;¿tdàP4‹1!YI$1§È1œaÉÜ:·ÿõ9tº]”¶ðÁ$9Žóæl‡Á³œîù‰Ï\œõæ€3u]:ÖÛì2Dæ,äowgc¹yÉ$“÷“Ð:P¨ž¡þ¢ëþ¼åþi@äëÿ“ÿF5G{ÿýaÿѱR@iéò ³ÿ® ÿ Š`WÕ¤H®´¹$uDK–ff8 ä“@ï/¥½’Ûû6KœÊ©%Ë4&6\|Œ»I;׿ÚpJŒð@ kFçP–k™åµh$‘_˺òãPe~R™»®Hïœck¹DuºuÄ·Ò\ÆÑO$JÒ&ÆP¬FHç§5†`j1j7—³,º“[jÅ r(ÚyV%dRÙdŒeùºqæv°™‘%¤vz¥ •må’K˜ N°í}þjî K1$ƒœç' éZÊÜ4¼€ïë˜ekë§¶$1,“O'—»ì\íf98$p§±çZÏ]|æàµ›í indnÖ‘YTqžc8éyÁ –W³Íy=¥ÍªÁ$1£’’ïVÜXpp{ÎxÆ »@P@P@P@P@P@P@fk¿êìÿëäè-@èž¡þ¢ëþ¼åþi@äëÿ“ÿF5G{ÿýaÿѱR@iéò ³ÿ® ÿ Š`IqkÓBg‰d0H%wð¸ødÐn©cqö>Ê=Ï&ÓòU?+žŸ)]ÊøËÚë@¥£}·ÄV –žg›¼|Í‘òcŽpÙ<ôí@ôJÿLKÙQ<Öò¨Áxvå‡`w9ǦO©Í)8ìðÔ,I}w(ŠU™U„@nS‘ц*¥9=¬nVc"ºµŠî0“À;•‘Ê2ŸPÀ‚8$pz;Ð#M·Ž’£ ,^S‘X|ÇæüÜ»ÎNNMC¤éGO’y¤•eš`ªÌªÃ!s‚K31?1' £@P@P@P@P@P@P@fk¿êìÿëäè-@覡þ¢ëþ¼åþi@¤ëÿ“ÿF5G{ÿýaÿѱR@iéò ³ÿ® ÿ Š`Y € ('Ä·ö0¬Ñ,Ó¬RÊ æ4 òbN}øçQI»03ü7=Ü7+o9™£xWŽI¾ÐÐ6àª7ï œ{qÐæ¤„kk3ÝE`$´• ùÂÉ+Ä\ćàd “ÀžqŠÏaœÍΓpиšø\•ÎØ®â‘Óo½+}ñÀÏãÒ¢Ö©/Ä“WÁfezmãFn¸@¡vŸ*<‚BsïYU³–ƒGCYŒÂ»ñ!´–à5›4q‰Dn |ìŠÌA;v¸Ã†$wä §Ö¦·ó#’Ëc$~al«nÆv©;†ÆÈPØàç µÖ¦¾ì–[Ú4Ý2<…|î˜@W“˜ÛïlíœdàõÉmmåšöh{”Y†æòÌŒ^˜Ú„dœätÇÍ@´­F[ï5f´’Ý£Á¬Xô.Šr1Ïäsè~€ ( € ( € ( € ( € ( €2õíÞM©\eg óTcÌìoÚßû°ÿ߯ÿâkOeæ+ÜLÒÁwƒRýÖ'ºúQ8r©'_øŸú1ªG{ÿýaÿѱR@iéò ³ÿ® ÿ Š`Y € ($%£‘ÑÁVV ŠËðÆ”ú.‡ œÞQ™K4F%Žp ãð  I#IchäEtpU•†A¨"€1ß@V;?´ï°r@>Scñ(OærkOi-Ь[Òt¸´¨eŽ$“ΔÊí&Ü– ávô¨m·v2õ 3/ô+ȧÂlšD$™b#.¬¬Bç;‰ c'“Ï40ÑìDl‹ ($Ë#LgX¨$c“@ &œ¨±¥¿—älÙUbÅX†\³|§ dŒ`ÐͧZ4kÀ¬‹#ʉ#sîÝzç{pxæ€iežó³ãsÉ#Hăsp2xéÉõ4=P@P@P@P@P@fëŸê ÿ®‡ÿE½kKq3›¯Íêß1ÿ{æ<þ•¸¿ÔßuÿIzõ<­cW Ñ³'_øŸú1«‘ÞÿÇÄ?XôlTz_ü‚¬ÿë‚è"˜h € ( €8»«‹ëVye¸žÜ[Ë*–[)!Då C÷÷pyÏ_L Ö)rˆêôë‰n,-¤¹¢žH•¤MŒ¡XŒ‘ÏNk; ÀÔbÔo/fYu&¶>ÕŠäQ´ò¬JÈ¥²8ÉÊ0ótãÌía3"KHìõKA*ÛË$—0aÚûüÕÜ–bI9ÎNÒµ•¹iyß×0ÊÚÔ¶v¦XmÚvÈFî=ÎÐÍù)ëØd€ Ÿí«Øî§‘íc’ÜElcŽ)Õ‹$dܧzŒ‘À^›ŽÐ ’ê³GorßfŒÏÄVû<Óµ™Ä|îÛœ'§oz«i¬^7L’{U•î Gy<¡‰»C8b£,'œnÐ@P@P@P@P@›®¨ƒþºýõ­-ÄÌn¿7«|Çýï˜óúVâÿS}×þ=%ëÔòµ^ƒFÌàrèÆ¬FG{ÿýaÿѱR@iéò ³ÿ® ÿ Š`Y € ( € ÈÔ´o¶øƒJÔ@RÓÌów™²>LqÎ'ž¨^€)_é‰{"Ê'šÞU/ܰìàAÇ8ôÉõ9¥'€ ¾å‚i/®åJ³*°ˆ Êr: #ðÅT§'£ÊÌdWV±]Æ`Ør²9FSêGŽBGz®4{pâ민3ÉÝ““ÉÉÉäЧÒì®.òú@ë ù˜ êA Œãwg®8éÅFº%‚Ã")<¸“Ë ç>;+só¨ÉÀl€  _ € ( € ( € ( € ( € (7\ÿQýt?ú-ëZ[‰˜ Ý~oVùûß1çô­Ä þ¦û¯üzKשåk½™:ÿÀäÿÑXŒŽ÷þ>!úÃÿ£b¤€ÓÒÿägÿ\ÿAÀ³@P@P@>%¸¸·±…`v‰fb–U1¡{p3ïÇ8ªŠMÙŸá¹îá¹[yÌÍÀÒ¼rMö†·Q¼xdãÛŽ‡5$#[Yžê+%¤©ÎI^"æ$^ àúŽh¾×%´š1q@#&YQX9h¼©˜@Ù‹ >c“@´­F[ï5f´’Ý£Á¬Xô.Šr1Ïäsè~€ ( € ( € ( €3uÏõ×Cÿ¢Þµ¥¸™€Í׿õo˜ÿ½óJÜ@ßêoºÿǤ½zžV±«ÐhÙ“¯üOýÕˆÈïãâ¬?ú6*H =/þAVõÁ?ôL 4P@P@P@djZ7Û|A¥j )iæy»ÇÌÙ&8ç “ÏNÔ¯@¯ôĽ‘eÍo*Œ‡nXvp ãœzdúœÒ“ŽÀP_ @òÁ4—×rˆ¥Y‘XDå9øbªS“ÑŠÆåf2+«X®ã 0l¹Y£)õ #‚G¡#½Cý—e³g“‘³`%˜‘ónÈ9ÈbØbÃ’@$ä Ž}N¸vy­÷ßüm…Ü¥[8]ÁŽqŒžO 5 "ÞöÖæ,l’}Íærv»FbÝŒÿtãךrèúz€>̬ÈV%€YvàŸº° ÷FNMiežó³ãsÉ#Hăsp2xéÉõ4=P@P@P@fëŸê ÿ®‡ÿE½kKq3›¯Íêß1ÿ{æ<þ•¸¿ÔßuÿIzõ<­cW Ñ³'_øŸú1«‘ÞÿÇÄ?XôlTz_ü‚¬ÿë‚è"˜h € ( € ( € (  ŸÜ\[ØÂ°;D³N±K*ƒ˜ÐƒÈ=‰8÷ãœUE&ìÀÃÓ¯õ‹.+{)¯Ì‘™%·’ð;[Ø_ÞsÔòûqŒÔŽŠþîâ?ÜÞ6÷)hòl8o-ÂCƒùÖ{ É¿±¶%¢-vJ·ÊMÔƒë‡,½3Ôõ¶§º-øX‚ú%wtŽë _nÕ¡ìêOjŠ—æÔ·P3 ON#}|ˆ…û´ÿ1H_kP§9ÈÀ$s‘Ó€x£k¶[ ^q6+Œ´a³“³h©†'‘Ç\9¼A%»\5í• .ÉòJLˆ¼ìÀåÈáÍÇ#š’M^ê˜ìä±®äucŸ(,„ÅAëdc§#'б§æ^- ‡‰dIwÜE‡Î0r.;oö4~€ ( € ( € (7\ÿQýt?ú-ëZ[‰˜ Ý~oVùûß1çô­Ä þ¦û¯üzKשåk½™:ÿÀäÿÑXŒŽ÷þ>!úÃÿ£b¤€ÓÒÿägÿ\ÿAÀ³@P@P@P@$‘¤±´r"º8*Êà ƒÔ@XZÛÙÚªZÁØb± PN”€Å’ÆÝ‹¼š¶§“Ëñª¥RKDÂÆŽ‡kokm)¶¸–àK)wy@vиÀ(íI¶ÝØ4€¨ú]“££C•t•nnD­¹Ç^çòíŠlº=Œ­)’a(`Èdmƒp!ˆ\áIä€'žMI&i+³I¹y ¬’ òÎGO»Æ:PaÒí!t‘RF‘z¼’¼ŒÖ^¬IƸéÉ=hH­v_OtÏ–•0 `*®â>§,ÜúcŽ2@' € ( € ( € Í×?ÔAÿ]þ‹zÖ–âf7_›Õ¾cþ÷Ìyý+q©¾ëÿ’õêyZƯA£fN¿ð9?ôcV##½ÿˆ~°ÿèØ© 4ô¿ùYÿ×ÿÐE0,Ð@P@P@P@>%¸¸·±…`v‰fb–U1¡{p3ïÇ8ªŠMÙ‡§_ë\VöS_™#2Ko%àv·;°¿¼ç¨åöã9©!$òÉ&—²Äa•š&hÉÎÆÜ¹ïƒÞ³z ãω.^)ü¶Ü¡˜*0 d†PAýyú×J ¥´m§uÓ«ÿ!»%{ÿ^_ðluzyn@\sÁv,Õ§sÍs!t‰u­¬> ŽÓí0,JñÂñ–Ë8cÀûÇʳÓå«o®^Ã>¢÷(²Á ÛRw7F¼Ïð€q“…IzÓY¸¹¸··þÏ‘$“ybå‘T)L°Þ¡ˆÃãî˜c§Ì#‹^›ìpÏqg›q< åò2ƒ ò‚d^1<à€@+§ˆ®ð¼–Þ]µµ¼ïp™`Ä ²¡‘OGvçqô€XmvUÒïn%¶û4° òÌ«"ÆìÜ(˪½Œñ€9ë€×[g´„AåßL×ok¹$P§ ̬XqÊ…'2p26Ð|A&.lr–‘nÍP¯"8^2Ç1’½J÷Ž×Y¸7RÛíóçiZ8ƒ¸DâIú¤Œ,=yÏMM¨k²éê Ö-”ŒÉ8VgØ ‘‘µO]¤‚ûãѶ€W¶Önã ö¸Õ¥y.$I¤H ÚÁ|dv “€hj×’^ (¬ 7K¿Í pB.Ñù[a'"UêC@£V½»šIí^ñb’H–Û+KÄŽ¢B~q’Üà÷s@Pë5ôÇa;į$jè­’ÉrJ„• ç’28!Ön%‰³Œ\K/•™YW;YÈmÈNÕ'9ܸêp w6×ò›ošÊÜÊË¿†ei”tÌG¸=J‚îòKÛ}íoåGÔ±+Ér¢E'‡¯9Ïin&f3uù½[æ?ï|ÇŸÒ·7ú›î¿ñé/^§•¬jô6dëÿ“ÿF5b2;ßøø‡ëþŠ’OKÿUŸýpOýSÍP@P@P@’F’ÆÑÈŠèà«+ ‚PEAakogj©kP#aŠÄA8ñÞœ·`&¢ؤ`Ñ/–D„ÊÛP!ŽOaÅ 0×WvâçAx¿éÿŽÑ`4mXéq\ͨ´Qy󈳀`žÀôF4¶*1rvEÈo­ç ‰Ë:‚[äl 1^¸ÇUoÊÆá$®Å66æÎkCî&ßæ.ãÎòKs×’Æ‚±ìwÈâPCbFçç/œg‚‰r3Á%¾km"É7˜¡†÷vv;¶ç$’OÜ^O@é@ :]‘†¼Ÿ’¼˜þfÊ/Êx9ÎAE õph8ôM:'Þ¶üû²ìCïUVÜ Ãd*ç9ÉëÍI—i ¤Š’4ˆûÕä•ä`v²õbN0ÍÇNIë@ßé÷×0Ï ù‘Ã7\°U.~R …ä}0ö ‘»i™2†$ˆ&X;6㜸bÿ09ŒœÐÇG±%È…•œî.’2°;²9Èý1ÃÓŠlÚ&<>T¶û£ØQ—{ àäüÜüÇ$NH$‘ÉÍ;ûÇ.|–%‹·21Ú]ƒ1^~_™AÆÈÅIo§ZÛH²Dæ(a½ÝŽí¹É$“÷“Ð:PbÒì¡´{XáÛ íÈÜÙUUH9È "àŽr3ך—dfyû÷e™£Ëd1NÐNNH9>¦€4‹1!YI$1§È1œaÉÜ:·ÿõ9lÚ&<>T¶û£ØQ—{ àäüÜüÇ$NH$‘ÉÍAªÁ½¤)íS<ŽFIù™]‰üÉ­in&b3uù½[æ?ï|ÇŸÒ·7ú›ãÏüzKÉêyZƯA£fN¿ð9?ôcV##½ÿˆ~°ÿèØ© 4ô¿ùYÿ×ÿÐE0,Ð@P@P@P@>%¸¸·±…`v‰fb–U1¡{p3ïÇ8ªŠMÙ‡§_ë\VöS_™#2Ko%àv·;°¿¼ç¨åöã9©!Ú¼’KáKé&ˆÃ#YH^2s°ì9ïZÏaœö»wsý©5»½Ã[´žV#u »™J–ÁãxíŒe]É8%9|!ÌùVæÅ²Ï©èæÚXåÚeE’uݽBɱÈ<Ÿ”“žxç/ÈÖ›P—½ýj\Òìn-åinü†¦Ðè«»—v9!W9{uãÔHu'­ëDUºÖÖGiö˜%xáxË åœ1à}ãƒå@ÇÎÙéò³ŸÄAo5Ä–8…xÐù£.ñ=1‘ç¨<`Žh[[º¶R­ [È¥eWV&3 Ì£$t\à0°&€4S”¬×e_±Äe_0Lƒ ’­…*@;Q9À|zíåΣgl–« 30s"å$#ãSÕô€3ÉÀÖ:Ü“Z[Ì`Ýî#–G”yždŠ„aB€Gï'+ß ÷Þ¡&™nðÁ½ÍâE-±óL‹ƒ$jCü£ëL÷ä`d"’[á, ›?²nXØí)òHÎ3ÆÙ”`d“»ŽÜ€X¶×®.æKh4üÜ08’F¯–‰`‰ðç=±óP­µór<èìØZy¡‘¤¿z¨W = ƒ9#O@®O=´S=²›p`‰ä3fBò$d¡õg‘ÜãµZ°Õ¤¼¸·F´ò⺷k˜dóeL1Ã|üŽ@ãó€ :( €2õöÙmÚÌL¸zœ£ ºm'¨™…‰»ÛÏ×?SùûÖÜñîïò/‹Ç"g)ùûòµ•I'k6¤ëÿ“ÿF5f2;ßøø‡ëþŠ’OKÿUŸýpOýSÍP@P@P@’F’ÆÑÈŠèà«+ ‚PEAakogj©kP#aŠÄA8ñÞœ·`7U‰'Òî­ÞCÏE¸)b £×­ 0nôø®¥yîeµwnYÛLŸÌ·lœ W;jÝhî­-9cŽa6Ép…9,X§¦3Š/PÆÜÙÍhcýÄÛüÅÜyÞInzòXÐ{xzݬï"ÝûëŸ<ù˜8S!o›npXÛ»©Ça´M9¢hšß(r1½¸YvŽxP®À(àdà évFg‘¡ß¿vQÙš<¶C„íää““êh4Ñ,#™fX¤ó•ÕüÃ3—b»€$ç-ðç<t€c Dc…”D* aÚRW8b$Àç@þ˲ÙlžOËjŠÍò€ÊÀuç˜Ó¯§¹ ´»&0ôó0w6AwÄðwAêãTøzÇíQʈÈHN×`åÛ`ß¼Àâ<Ôî9êr$%¤7rÜyk—‘]AUP¨ªª@8lÈÈàž1Ö€&‡K²‚ßìñC¶-ñ¾ÝÌy@¡O^ÛòúÐ]3F6WŸj–H™Ö3£d ¤ƒ™›´aFÉãšÕ € (3]ÿWgÿ_#ÿAj¯@5õ_õç/óJ½'_øŸú1¨;ßøø‡ëþŠ’OKÿUŸýpOýSÍP@P@P@“â[‹‹{Vh–iÖ)ePsy±'>üsЍ¤Ý˜zuþ±aåÅoe5ù’3$¶ò^ks» ûÎz€~_n1ƒš’ÒO,’iqK,FY¢fŒœìmË‘žø=ë7 Î<ø’á•âŸËmÊ‚£Heן­tª [FÚw]:¿ò²W¿õåÿÇW¡§—öäÈ<bÇýZw<×2§@—ZÚÃâí>Óį/a¼³†<¼p| ùÛ=>PI¼×XâyãC挻ÄôÇ Dgž ñ‚9 umnêÙJ´-o"••]X˜Ì32Œ@mÑs€À`rÀšÐ]NR³\}•~Ç•|Á0 d‚J¶ ©î=F@çñë·—:²Z¬$ÎÁÌ‹”dŒoOTcÐÏ'XërMio1ƒt¸ŽYQæy’*… ¼\œ¯|@+Ükw²i–î û<·‰°yVFØdX|ê6$ê:ò1È¢Õî­`‘¤ŽærÓˆ#ŽáWÍÌÛ„*~] …$ç?tƒ@޳q²ÙÆŸ"‰rÍ-!±µr½Omû3¹{’nµç¶‚[“j­n¦dŒ‰~vxƒ’Û€–Ø9'§œM{«Io©%Œ6žt°)󌰔óÇAås߀HÁV‘!¹»kLØÁæ‚é 2f=Á²„Œ© O#Î![º{Y¤þÌ—ÌŒ¯%AϬaÎ1ÎÔ=W¶HÔ´˜ÜZÇ3*©qŸ•é÷ :ƒÔ8#Ò€% €35ßõvõò?ô  ôOPÿQuÿ^rÿ4  òuÿÉÿ£€#½ÿˆ~°ÿèØ© 4ô¿ùYÿ×ÿÐE0,Ð@P@P@P@ $i,mˆ®Ž ²°È õP¶övª–°E6¬HÏéËvj ýŠF ùdHL­µRäöR uxn.t·‹þŸøíFÕŽ—ÌÚ‹EŸ1‹8F ìDcKb£'d\†úÞyÚœ³¨%¾FÀÃëŒuVü©ÜnJìScnlæ´1þâmþbî<ï$·=y,h Ïo[µä[¿}sçŸ3 d-ómÎ Ûwu c8â€,6‰§4M[åF7·«.ÑÏ Ø œ@.ÈÌò4;÷îÊ;3G–Èb œœ2r}MFš%„s,Ëžrº¿˜frìWpœå¸v烎€P¢ÑìahŒp²ˆ‚…A#l;@ Jç @‚xð(ßÙv[-“ÉùmQR¹¾PX¼óuô÷4éôëYÙÙу9 Y†ppHäŽPm£Ø²¢˜XH0óIÃàüü’~lçqõ9qÒìŒÏ#C¿~죳4yl†! Ú ÉÉ''ÔÐ`ÑìmîÄp·œo1äfb@e’I<;{cÐ`ÇK²3<ýû²ŽÌÑ岄'h''$ œŸS@ E˜¬¤’˜ÓÈdÎ0äî[€ˆúœ€Z‚í¡X¡]¨¾ä’O$’y$žI<’hôPf»þ®Ïþ¾Gþ‚Ô^€)êê.¿ëÎ_æ”~N¿ð9?ôcPw¿ññÖý$ž—ÿ «?úàŸú¦š( € ( € ( € ('Ä·ö0¬Ñ,Ó¬RÊ æ4 òbN}øçQI»00ôëýbÃËŠÞÊkó$fImä¼Öçv÷œõü¾Üc5$#{W’I|)}$Ñdk) ÆNv‡#=ñëYì3ž×nîµ&·w¸kv“ÊÄn¡q·s)RØ´›7ˆ$Kk‰b±óM¤M%Âù `†tùxù†èÛ$àã~ZuÖ¼öÐKrmU­ÔÌ‘‘/ÎÏrApòÛ$ôã“€êW׿ÙÚ‚–ûå¿ÚAÖU`Cíºz¡Èǧ<šv¡«>Œ¢7IoQ™f•‡Î'´iÀ?{`8ê~b&MZG¼‚1iþ=Ä–é/˜2 Ý•Ç(q‚xäã¡Ó € ( €35ßõvõò?ô  ôOPÿQuÿ^rÿ4  òuÿÉÿ£€#½ÿˆ~°ÿèØ© 4ô¿ùYÿ×ÿÐE0,Ð@P@P@P@ $i,mˆ®Ž ²°È õP¶övª–°E6¬HÏéËvj¥Æ•y“,)$+t@T‚ÇéÖÝÒiw“4×΄ò1ÉfI>dÿ?€Ås;[ -Ñ»oåhºrGu8 4Œ\F@'æð3Œ*–ÊŒ´Eˆo­ç ‰Ë:‚[äl 1^¸ÇUoÊ‹ÂI]ˆúu¬—Bá‘·ä1Ø#0èÅs´‘‚FF  §K²0ÓòA“ÌÙEùO9È(¤ Ž 4é~Z YT‚O˜³È$9Æràî=‚„z £éì’'Ù•V@U‚¿)@…x< ª£>Pz€hM¯–ÈMËC{©Y”Œò¬[+Á#‚2 SÔÃæukùîl-¢‰$¹1ÍûÖéå»m!0ÝnSÈK†-'–J>vír~SÃ9ë€ ûmfî0ŸkZW’áRA´‘:D€ ŒÆGa’ 8†­y%ಊÊt»üÐ×"ퟕ¶r%^ t4¥gr—–P]F$ñ¬Š¨dgó  h  Íwý]Ÿý|ý¨½SÔ?Ô]ל¿Í(üàrèÆ ïãâ¬?ú6*H =/þAVõÁ?ôL 4P@P@P@PIKG"+£‚¬¬2=A…­½ª¥¬@†+àsÇzrÝ€š¤)q¥^A$Ë I£JÝ ±úu¤7tš]äÍ5Ƴ¡<ŒrY£RO§Y?Ïà1\ÎÖè GtnÛùZ.œ‘ÝN # ù¤< ãÊ¥²£-bëyçh"rΠ–ù W®1Õ[ò¢ãp’WdI¤Y¤Žáe"BåãiähÛvwe ÛÎOïAgAÓX>ûvs óÊìÏòºòÄäü²0ÉìG À§Zˆ%‡c”«9gbÅ€Pq9^sœŒõæ€#—Jµf•Ö5Þá°²–xƒ0 Ÿ/;yÉÎ0NO<š«e A¼·ž]̯€NÖÁ]~mÌÅŽ$aÉ#  I¤Y£FÛegŽA"ÈóÈÏq9# ß.qó94æÒìžÞ v‡÷P s“m<üÊp2AÀÎh8´M: mòƒoÈÎ̼Fc)8û‡׿J’.ÒI$i÷«É+ÈÀíeêÄœa›Žœ“Ö€$·±·µ–I kË÷Îâsó3wÿiØþ?J…ô{<ÂÀÅ‚ÈÀI¹‹À0Ë7#“Ç&€ì{¹òX–.ÜÈÇiv Åyù~ec##%¾km"É7˜¡†÷vv;¶ç$’OÜ^O@é@[Áµ¼Vð®Ø¢@ˆ¹' Í>€ Ì×ÕÙÿ×ÈÿÐZ€+ÐMCýE×ýyËüÒ€/I×þ'þŒjŽ÷þ>!úÃÿ£b¤€ÓÒÿägÿ\ÿAÀ³@P@P@P@dø–ââÞÆÚ%šuŠYTÆ„AìIÀÏ¿âª)7f¬Xyq[ÙM~dŒÉ-¼—ÚÜîÂþóž —ÛŒ`椄ojòI/…/¤š# e!xÉÎðäg¾=k=†sÚíÝÏö¤Öî÷ nÒyXÔ.6îe*[Œuã¶1•w$à”åð„W3å[›Ë>§ [›ic—i•I×võ $jÇ ò~RNyãœT¿#ZmB^÷õ©sK±¸·•¥»òB›C¢®î]Øä…\äíÔQ!ÔœZ´­Ÿo¨]Æn¯nŽ öÖò\´[ù[œ:?EëíLį¬k:¥£Ý a• Rв+ ;'bÀ•Éâ5à…å}9 s_Epd¹¸–Ò £B‹, p2$%wõÝ–ùWhƒ@ Õ5©!Ñ¥¸†=’³ÜÂvÖR‘Î|¾žýñ@K«\ij!ÓÛÏŒ#„W/„rÀÚ¤ç(A  ŽHÉMRâfT·³ŽVX–i@¸*Å‚ùd; +Á\ã'nõéa¶k£jËsÏhýï–’“ü'ùcÐç=‡Ìéµ[ïí[+Am%åUirLl’ ~oݱ d’ ±ÖäšÒÞcè?q²<£Ìó$T# ?x¹9^ø €Ig­³ÛÅq}vÑKhnÑ£”ɈÔ)mß(ÁùÇL÷ü@+éšóKc;M$(ð€°È¥A—h²ä$.½ÎÕž¤Ôu=NÚfómã†4²¸™ü¹ÃSaINÛ€äKp@€&º×žÚ nMªµº™’2%ùÙâH#n>[`äžœrpzÎîin&¶º†8§‰B#º•bÀrBœåŒzsèn€ £ª*·Ùƒ(aæ6C ƒû·  G¾ÑãvG—LWS†V¡ ïÉ6·Bì¥!¢U†SŽ´£'_øŸú1¨;ßøø‡ëþŠ’OKÿUŸýpOýSÍP@P@P@’F’ÆÑÈŠèà«+ ‚PEAakogj©kP#aŠÄA8ñÞœ·`&© \iWI2Â’@èÒ·DH,~iÍÝ&—y3Mq¬èO#–hÔ“éÖOóø W3µºÑݶþV‹§$wS‚HÅÄd~i8Àò©l¨ÁËDX†úÞyÚœ³¨%¾FÀÃëŒuVü¨¸Ü$•Ùii#¸YH¹xÚy6ÝÙBvó“Æ;ÐAÐt־ݜÈ0ìò»3ü®¼±9?,Œ2{è0#ér0.²‘€|ù6ÉœgÀ–Î@ÁÍ6}N¸vy­÷ßüm…Ü¥[8]ÁŽqŒžO pÑìDl‹ ($Ë#LgX¨$c“@hö,¨¦FÒŒ<Á’pø??$Ÿ›9Ü}N@}¤[ÝéÒÚ(ò÷y¬ÉØò ØÏ?}¸÷ &b$,¦9ˆDŒ6s€Ì6ýÞOÐc Dc…”D* aÚRW8b$Àç@þ˲ÙlžOËjŠÍò€ÊÀuç˜Ó¯§¹  .lmî˜4ñîeBŠwT§Œt9U õqŠ®Ú%ƒ®×ŠFù$F&g,áÀ ç-ÀQÎqŒ`P¥ÑìeiL³ CC#l Bç H'$y<òhÒÁÜ=À_Þº*3dò’þ<:}GUeAlÎÁTHÙ$àݽs7ºn‹}¨E{;ÂÒ§ÞA¶OMþ?úÇ"€-^M°]ùR#âÊ\í`qÊP”àrèÆ ïãâ¬?ú6*H ¤ÙZi‘\\El‘¤Î=²I4Àf—qk©éñÝÇen‰!m¡¡Là1žÔ]Ï“<µ$˜Áþúrk°‘J Î`ˆ`óû¡Ç^>ï'Š  Î`ˆ`óû¡Ç^>ï'Š  Î`ˆ`óû¡Ç^>ï'Š  Î`ˆ`óû¡Ç^>ï'Š  Î`ˆ`óû¡Ç^>ï'Š  Î`ˆ`óû¡Ç^>ï'Š  Î`ˆ`óû¡Ç^>ï'Š  Î`ˆ`óû¡Ç^>ï'Š  Î`ˆ`óû¡Ç^>ï'Š  Î`ˆ`óû¡Ç^>ï'Š  Î`ˆ`óû¡Ç^>ï'Š  Î`ˆ`óû¡Ç^>ï'Š  Î`ˆ`óû¡Ç^>ï'Š  Î`ˆ`óû¡Ç^>ï^(*ƒ9‚!ƒÏî‡xû¼ž(*ƒ9‚!ƒÏî‡xû¼ž(*ƒv`ˆ`óû¡Ç^>ï^(*ƒ9‚!ƒÏî‡xû¼ž(*ƒ9‚!ƒÏî‡xû¼ž(*ƒ9‚!ƒÏî‡xû¼ž(*ƒ9‚!ƒÏî‡xû¼ž(*ƒ9‚!ƒÏî‡xû¼ž(l­mæ’28aŽ1Ž+ž®ãE¯ìë?ù÷OʳgYÿϺ~TgYÿϺ~TgYÿϺ~TgYÿϺ~TgYÿϺ~TgYÿϺ~TgYÿϺ~TgYÿϺ~T«gkÌ;mâ!‹äcßÜ ­¨j~›wk Õµ²%Îà%0¦Œc*!æG‘Œî/˃ø×W2îH¡í$c“™xëÏN¼ÑÌ»€¡í$c“™xëÏN¼ÑÌ»€¡í$c“™xëÏN¼ÑÌ»€¡í$c“™xëÏN¼ÑÌ»€¡í$c“™xëÏN¼ÑÌ»€¡í$c“™xëÏN¼ÑÌ»€¡í$c“™xëÏN¼ÑÌ»€¡í$c“™xëÏN¼ÑÌ»€¡í$c“™xëÏN¼ÑÌ»€¡í$c“™xëÏN¼ÑÌ»€¡í$c“™xëÏN¼ÑÌ»€¡í$c“™xëÏN¼ÑÌ»€¡í$c“™xëÏN¼ÑÌ»€¡í$c“™xëÏN¼ÑÌ»€¡í$c“™xëÏN¼ÑÌ»€¡í$c“™xëÏN¼ÑÌ»€¡í$c“™xëÏN¼ÑÌ»€¡í$c“™xëÏN¼ÑÌ»€¡í$c“™xëÏN¼ÑÌ»€¡í$c“™xëÏN¼ÑÌ»€¡í$c“™xëÏN¼ÑÌ»€¡í$c“™xëÏN¼ÑÌ»>Ÿs<û¦rÃ`3ÅcQ¦ô.}²×þ~aÿ¾Åf0ûe¯üüÃÿ}Š>Ùkÿ?0ÿßb€¶ZÿÏÌ?÷Ø í–¿óóýö(ûe¯üüÃÿ}Š>Ùkÿ?0ÿßb€¶ZÿÏÌ?÷Ø í–¿óóýö(¦îÛÏ€ý¢l㑇õ  Z…¦›©^ZÍuq ¥¶â#.0Äãç ÇNÿ¡´×Vÿl¾Ñn Þ=V€%ûe¯üüÃÿ}Нy4RÁwåH‹9sµÇ)@RuÿÉÿ£€#½ÿˆ~°ÿèØ© !¶{©-bs}p 8p8úSOôŸùÿ¹ü×ü(ÿIÿŸûŸÍ€ôŸùÿ¹ü×ü(ÿIÿŸûŸÍ€ôŸùÿ¹ü×ü(ÿIÿŸûŸÍ€ôŸùÿ¹ü×ü(ÿIÿŸûŸÍ€ôŸùÿ¹ü×ü(ÿIÿŸûŸÍ€ôŸùÿ¹ü×ü(ÿIÿŸûŸÍ€ôŸùÿ¹ü×ü(ÿIÿŸûŸÍ€ôŸùÿ¹ü×ü(ÿIÿŸûŸÍ€ôŸùÿ¹ü×ü(ÿIÿŸûŸÍ€ôŸùÿ¹ü×ü(ÿIÿŸûŸÍ€ôŸùÿ¹ü×ü(ÿIÿŸûŸÍ€ôŸùÿ¹ü×ü(ÿIÿŸûŸÍ€ôŸùÿ¹ü×ü(ÿIÿŸûŸÍ€ôŸùÿ¹ü×ü(ÿIÿŸûŸÍ€ôŸùÿ¹ü×ü(ÿIÿŸûŸÍ€ôŸùÿ¹ü×ü(ÿIÿŸûŸÍ€ôŸùÿ¹ü×ü(ÿIÿŸûŸÍ€ôŸùÿ¹ü×ü(ÿIÿŸûŸÍ€ôŸùÿ¹ü×ü(ÿIÿŸûŸÍ€+Þ¼âÒî9.e• ¤‡#‚ ŽÀzš½'_øŸú1¨;ßøø‡ëþŠ’+/øñ·ÿ®kü©5P@P@P@P@P@P@P@P@P@OPÿQuÿ^rÿ4  òuÿÉÿ£€#½ÿˆ~°ÿèØ© +ÛòÒoá}Šœ;=0&òåÿŸ”ÿÀsÿÅÐåËÿ?)ÿ€çÿ‹ Ë—þ~SÿÏÿ@—/üü§þŸþ.€._ùùOü?ü]\¿óòŸøøº<¹çå?ðÿñtyrÿÏÊà9ÿâèòåÿŸ”ÿÀsÿÅÐåËÿ?)ÿ€çÿ‹ Ë—þ~SÿÏÿ@—/üü§þŸþ.€._ùùOü?ü]\¿óòŸøøº<¹çå?ðÿñtyrÿÏÊà9ÿâèòåÿŸ”ÿÀsÿÅÐåËÿ?)ÿ€çÿ‹ Ë—þ~SÿÏÿ@—/üü§þŸþ.€._ùùOü?ü]\¿óòŸøøº<¹çå?ðÿñtyrÿÏÊà9ÿâèòåÿŸ”ÿÀsÿÅÐåËÿ?)ÿ€çÿ‹ Ë—þ~SÿÏÿ@—/üü§þŸþ.€._ùùOü?ü]\¿óòŸøøº<¹çå?ðÿñtyrÿÏÊà9ÿâèòåÿŸ”ÿÀsÿÅÐåËÿ?)ÿ€çÿ‹ Ë—þ~SÿÏÿ@—/üü§þŸþ.€._ùùOü?ü]\¿óòŸøøº‚ú2¶7r<ÁÏÙ¤@[zàÿxÿv€.É×þ'þŒjŽ÷þ>!úÃÿ£b¤€hÿ¿û`ÿúSôP@P@P@P%I/-íî´Í ¸PÑÄ¡>éܧ-ƒ“ŽÜË’[±6–ìI¸š[‹È¥™åX|¶FuPß6ì”ü>ÍPÉÅó5ÔGi;ˆÜ#È €ÝÛ<¨±ê– K$©+*î•ÔJ9Áá½{®`[…·i£0ÊÆXn#Ô½å@¹€ s4a n*1–úr9÷ SS³’êx§ŽG™У‚S_¯ýò}(é}fñy©uG’7‰$géÏÒ€¾³kv¸[¨ (pÒ Ð} éÜ~t::ÈŠñ°da•e9zŠZ( € ( € ( € ŽI£ˆ#„È$àqÉç§Né@5³s‚2£†£¨=(JN¿ð9?ôcPw¿ññÖý$O*Ãv›Î¢uÝÙ~däûqþG4Àœ‚ `ŠJ( € ( € ( € ε¹htë[g¶¼Ý ÆÛm%a¸()dGÔt‹Y Ï0(×1¨]ØÏ¡;ºvÀèriñ%ýÍÜ‘BÒ¼£“h,«±WǃùÐd%Ì eÑBm[‡„ÝĤîQž±ž1ÎsÚ€-Ç¦Ë Ð,i…!›hòÌäòŒ6AqÈb°%.€L…o.ÝeÈÜvã•ù²!àd¥ÜÊ»\¢Hf…Ø1fPáBœào#f2pqŽI ‹Jss ÒÇÙ*»+O$Ä…WîBàŒ“Ø±éSÇCÈÑÛÁ<ÆC¹‚CŽWï{ŒŒs@vq¼6È’ìó9,P`NOa“Ï''œ”5P@P@P@2H–R7–ÀèÇ=ävô<õ€ zØÆ‹8ÉbF㌞Gãþ~_þù_ð ϸÿŸ—ÿ¾Wü(ÑKp÷Fn_H?*úéí@|‰?çêoÉ?øš<‰?çêoÉ?øš<‰?çêoÉ?øš<‰?çêoÉ?øš<‰?çêoÉ?øš<‰?çêoÉ?øš<‰?çêoÉ?øš<‰?çêoÉ?øš<‰?çêoÉ?øš<‰?çêoÉ?øš¯©[3i·;î%`#-‚œ öÔ¥'_øŸú1¨;ßøø‡ëþŠ’¥÷úÕÿ®mÿ¡%0*BËä2È‚HãÉÚÇ7O§œžÇûÊž€Yºxæ¸i"RŒÉ‘ÆìpO}Üc=ñ‚>\¢Œœµ×õýyNª»¬¶ìW̱­ÐüëÁöª"ž ¸¡VHc<†(ÆU@Ø0 äž?ˆ÷æ€ rºÃ™„¬æ6™ ©ò_ÌA·§[®OËí@ íÛFÌóGÊ©+n0e€9FÜÜ1==M †Ôí˜^™Ç"¡Â€ÿpã søwØä÷È5ºØ @ÝÏ}¤dŽ¿08¨À4VÎ[ƒ§o9qŠº*¨b\‡ü0:ð=òùî–}VÛ˹ýÂ:`®6³“¹ôƒÜ÷  ­.¥i%CrÊ3åÇ·Ž}ñ°õù['Мk]\D&ô‰w(» ̤NФœdŒ†ÇÇ ×Rˆd"º£Ëm€o\€dÏLQÀûØ @ õãE0[€<¨åmàݵPƒœüGœ`΀'{©c¼û<·†(¸2²®O‘“ŒXŒãºàÐêä,éld`Ò3°Œ+yqü¹eoSÆ3Ç^(]|Ù-á$í”…,@ Žx<ãØóôê%ŒîùmÇóÿõ}JŽéM9‘;5¸ Àc³¥6êòîݶÏslÆ’_¼eŽÇÆzÜdr9ã<“I_¨aY– Za‡1íÃí€ÝA‘ðG§Zú‰soºêîb°„*¼†,ÉØ¿2¶xÆsíÉö¦®õ b·eYq:¼Û†Ñ•P®Wô¥@P@P@WÔäuÿ\_ù·'_øŸú1¨—¹3 t0´Ç¿$´` ¸9çvZÐ/ÿ)Çÿˆ¦²ÓþùN?üE-?èÿ”ãÿÄP²ÓþùN?üE-?èÿ”ãÿÄP²ÓþùN?üE-?èÿ”ãÿÄP²ÓþùN?üE-?èÿ”ãÿÄP²ÓþùN?üE-?èÿ”ãÿÄP²ÓþùN?üE-?èÿ”ãÿÄP²ÓþùN?üE-?èÿ”ãÿÄP²ÓþùN?üE-?èÿ”ãÿÄP²ÓþùN?üE-?èÿ”ãÿÄP²ÓþùN?üE-?èÿ”ãÿÄP²ÓþùN?üE-?èÿ”ãÿÄP²ÓþùN?üE-?èÿ”ãÿÄP²ÓþùN?üE-?èÿ”ãÿÄP²ÓþùN?üE-?èÿ”ãÿÄP²ÓþùN?üE-?èÿ”ãÿÄP²ÓþùN?üE-?èÿ”ãÿÄP²ÓþùN?üE-?èÿ”ãÿÄP²ÓþùN?üE-?èÿ”ãÿÄP²ÓþùN?üE-?èÿ”ãÿÄP8²ßM Š2Y´â¿r€.|ÛÞÜùúïjmïü|Cõ‡ÿFÅIQ[Gc µ¬'#ä+1ùA=²M0 ºYˆH©lÊÁ í· [y!@y$©àsÅr»Øžî(Òf[kpË|„㥔îR5¸—Ds,cøÛÚ€+™ ßh1Ä"1‰7GÝÆsŒg¥4›v@=Dlˆâ(vº+©ò—FAéèhi§f…œ0½°w‚c³–‰Oü²Ô{š@:?±È¬Øgd\À£,¤†Žqµ¿#@X­w-½« ‘‘ u·bü(`ÇÙ“ ª78¨Qðè($D’{u‘×{¬·c@ œYÛÂóMªFƒ,Æãô q‹“²äAÿ>¶ß÷á? F—XHbLÂÇäTýäôæ€$  àÁ¼o*¨ÈíÏ8 }¢ËÑïÙÿ ˆ$·wW8;q@ÐeæmÊuæ€#[FpÁ3è8ü¨èH¹EB?ÝD™€îƒè(J( € ( € ( € ( €+ê?ò ºÿ®/ü[“¯üOýÔïü|Cõ‡ÿFÅIȘ­”)b Œ…ÉùÓµ0­¬o"×çÔ<ˆfHÌ–é€PH\®N œžÜÜ÷(×™5ËÓúþ¼¾ûí^ÿÇÇýsoåLÈ©uÿ×Y?ôcPt7OBÄF ·wNUcSƒ¼… uÏÐô«§>G{1æv¹-‚,zd 0]Ú5‘JFNT|¼KàuéŒQ:žÑóZÜ=›å½Í‹øóOøþ‰Ž “xŒêK7ú=´Ò1ŒY…Ë©#=>àÊÒ•¢Ð(¶ÒEÏÙ‹K6te†p†=ŒHAóŽz)à}Á: â­rc §ÜÒƒþ=“ýé?ôcU ÿ6ÿï?þ‹zÍ—d7ÒÎÅ®eó¿Ñ­”tF¹cîz(ç©âzq»‚ŠÓM_•ßõæ_[fïkÛ²7gËP\g§ÜÎ;uϽQÈ<Çßý°ý (ôNãþ=­þ£ÿA4_žGÔ…Y·ÿàTn€?×7û£úÐK†bKäøsþÏ «2Và(èWúZ¸Ÿ~O÷¿  Ð@P@P@P@[Qÿm×ýqähäàrèÆ ïãâ¬?ú6*H"º·KkuiâVÇ\>QL Úèðj2ê4 s Áo0`z;Üÿ‰È÷wVíg:­ÄD˜ØsÅSÔżÏ<I+úhÔN+{­`µW Lj2üíêÙœg#°š¹¥:Ž›º-4ðu»±$³K"±?É“Oebü2[‹ÃÄ‚²†LyàÐIRÖÇE´±–Î#“1&@Ò[ž9Îxíé×®I6µE«7±²³ŠÖˆ„q È 99$û’Iüi ¶ÝÙb؆µ”‚ HAÿxÔÄ2¤Ð3°U ù$àݽW‰´øng¸Yáó§Æ÷.3€Àöã?_ Â±nrqQè„Q¤¬¾h‹OóCoó q–Ýœç8ÎsL‚xfŠ[³åHˆ;X|É@PVMm4¡J€zޏ ¾Ëüü/é@/•³ •[ ž¢€,ÐeÕ&mÌ*:Ÿ­A,6ò6å˜!ÎNÅ>‚‘*–=Ia@DC4…H#wQô%P@P@P@P@õùÝ×þF€-É×þ'þŒjŽ÷þ>!úÃÿ£b¤€•®nŒÓª\$QÇ)WÉÝÀõÜ=i€}¢óþÿ¿û:>Ñyÿ?‰ÿ€ßý{°8»OüÿìèûEçüþ'þöt}¢óþÿ¿û:÷c8¼NéÛÿ³ íŸóøŸø ÿÙÐö‹ÏùüOüÿìè­%ËœµÌL}íGÿ@¯p§+s>¢ÐñTÿ´^Ïâà7ÿg@Ú/?çñ?ðÿ³ iîØa®ã#ÐÚÿötÌóÛÚÍ0š1¡m¿e8뺀’\™'VšåJcȶ8U9ûßíP·Oÿ?ÿà ÿâ¨s?üüCÿ€ƒÿŠ 3ÿÏÄ?ø?øª7N?åâüüUŸþ~!ÿÀAÿÅPnŸþ~!ÿÀAÿÅPîŸþ~!ÿÀAÿÅP™ÿçâüüU&éÿçâüüU§ÿŸˆðñTnŸþ~!ÿÀAÿÅPºùø‡ÿÿ@éÿçâüüU§ÿŸˆðñTnŸþ~!ÿÀAÿÅPºùø‡ÿÿ@éÿçâüüU§ÿŸˆðñTnŸþ~!ÿÀAÿÅPºùø‡ÿÿ@éÿçâüüU§ÿŸˆðñTnŸþ~!ÿÀAÿÅPn¡w,ú ë3G••¢ýÚm8~¹õ  Y:ÿÀäÿÑ@ÞÿÇÄ?XôlT ×]×Ëè L «]^ImíXÂÉ!j¨-•13‚£¯8Ç~Aã5¼©$Ý¿­lMÇÅ®[J$y „…ä†#•b9Ú{ñÔàsIÑ’ÜwíËal³H’D\+"HP SÛG ÝHéî2{ ^È.]´¹ŽòÙg„å?˜8=8ê#ŠÊQqv`KHa@P@PmGþA·_õÅÿ‘  Çúûßúúoý:­ ît«{¹—æ–4;PufÆÏ© r·}ÅA©GžDÞh'|@È“ƒƒÃ/“ÏN¸~Íï}ãaÕa™ctŠ_)ö!ÎU#9Ï̽õëÒkOë@¸ëmN)Ñ]ã’Ý#24¥pÈ1“Á8ÆG\uúÑ*mhµèm¨±µwº„Å*”Ä@|ÇxF¹Û“ÆTôè©ëh¿éW ‘\ê²Å)Sk,J¶òÊåÕNÒ¸#£r9ì{‘ƒ‡I­ú¯ëa\šmVVGx¥ò“x0쀖P3œü­ÔÇ^™•I½?­GrŽלïE$2  RM¤àçå$v=ûTÊ6Ö÷j‘…P@P@P@‰qÿ"þ£ÿ_rÿ5  é:ÿÀäÿÑ@ÞÿÇÄ?XôlT ×]×Ëè L -¤ZßJŽ¢ÎªË ÀYux}r¥U¶Ý»þ!aÇL€Ãoi6Á’G̹RAãœìûKÚ;·ßúýBÀÚU ?¹Œ[ät…B‚A ¬F9 Ž3Ç'Ök.º…„—LI—ÜÜ91É1+óØÚ1€:sœšF¶]¿°K¥Ã2È,¾Sï"0FœÌ3Ÿ™º’9éÓªÕšßü‚Å¥…åçîtT#¶’?ô#Qwk%!…P@P@P@‰qÿ"þ£ÿ_rÿ5  é:ÿÀäÿÑ@ÞÿÇÄ?XôlT x"’æíäö‚8™Ô}Ôì¤ `'Ù`þäŸø/ÿ@Ù`þä¿ø/ÿ@Ù`þäŸø/ÿ@Ù`þä¿ø/ÿ@Ù`þä¿ø/ÿ@Ù`þä¿ø/ÿ@Ù`þä¿ø/ÿ@Ù`þä¿ø/ÿ@Ù`þä¿ø/ÿ@Ù`þä¿ø/ÿ@Ù`þä¿ø/ÿ@Ù`þä¿ø/ÿ@Ù`þäŸø/ÿ@õ hWN¹!dȉˆÌòžÇ±lP椺¾wö’8™Ô}Äì¤ô¿eƒû’àL¿üUeƒû’ÿàL¿üUeƒû’àL¿üUeƒû’ÿàD¿üUeƒû’ÿàL¿üUeƒû’àL¿üUeƒû’àL¿üUeƒû’ÿàD¿üUeƒû’ÿàD¿üUeƒû’ÿàL¿üUeƒû’àL¿üUeƒû’àL¿üUeƒû’ÿàD¿üUeƒû’ÿàD¿üUeƒû’ÿàD¿üUeƒû’ÿàD¿üUeƒû’ÿàD¿üUeƒû’ÿàD¿üUeƒû’ÿàD¿üUeƒû’ÿàD¿üUeƒû’ÿàD¿üUeƒû’ÿàD¿üUeƒû’ÿàD¿üUdÌøwP œ ¹É'º÷<ÐôàrèÆ ïãâ¬?ú6*H?뮿ëå¿ô¦D"h¶#´ò©ò§óËÃ3m$e‡8-òŒ0jÝÙú.–ÕŸÏî$yÔ.n/³*E²Áž2H;›€GLëÁ ;Röqù¿[_ ¯îf2kxþÎ¥¥iÚøw^¹ùîÉÉÝŒûr:qVóÿ%÷ïä mBîÒÎY–éæÜ*É9S#O§É·oãžÕ~Î2’^Ÿ \³s{w˜Ÿ$hò.Òw‚[å# Ø9Îp:TFvóvÖ¡uœÓ?”ѳO*«+.ÀäÁ¹û±×¯Q§$——ãoóbK«¨®.Y¥·kkxÌû¶pH]ÀžqÉã¡sÄ(ť݌¨—÷³jVöÒ2DÑ̾`ØàÈç+·÷sÉî8çG(9/ëUä„Ie¨Ü=¤3b1˜bt!‹1uNCÛxà‚N:óÂ8©5ëø_ü‚äúuåÌßeûI‰¾Óo篖…vco“Ÿ¿íÓ߈©«Û£·õ÷ —7·©c} Ë&öyž9»ÆŠÒd¦À3Û̃;Fr‹·oÓüÿçÕ'·‰®YcxwÍÄ aÎKg>Yãg¾9ÍRR|½tümþc¹ ·×°êÀ¦9æ"$>ŠH‘‰ØX`á@Æî˜>ÕJqOe¯é×þ‹’M$úÃÌ¡$ò¤VPAädv$2qÓ5„ÒR².õ÷¿õôßúu#3aœ5)eÏå3¼FR˜)&0§Œƒ?/9ç;µyr%§õ¨…’îö;¸ìüËs+²Ÿ7Êm¡JÈq·w_ÝõÏ~œRPƒ7Oøo/0+]ÞÝ2oó$V÷,È¡—sÆvg!ç8íîpEÆZy¯ÇQEíëù{Üy·R@™ ¯™ó”qíÔgˆä‚û“ü€—J½žé\yeÚç¨óòà“Óo_~”ªAGní}ÃD_»j{ËKöyXƹ‚…Øwcn ‚Nõü*PJëý_Ï·ÜÄG¥\Üÿc\Ì¥ç™#F@Ùb[ÈC^I?:‘´Keÿ‚Ø–ì {d’ÖîI%•â <䉑9ïÎ>QŒ7N”£«´–×éäÿ­F6}Fî3$#Êi¡fÞá8*œ3Þù»täà8½z?ø>^]…p·ÔîgíX‰`ó!O+i-ûÅCÙÇý;{Ñ*qO—®¿…ÿÈw#mbéV7 Qï.çEPA<ãqç#8þU{(ëäÿÏúòóÉ…õñ‹iŽ4™\‡ùC¶ÐÏ–?Ä:1=8;¸žH_ËúëoÓòNó!ŽL§Ì ü¹Ü{Ö YØc¨P@P@P%Çü‹úý}ËüÖ€7¤ëÿ“ÿF5G{ÿýaÿѱR@G5Ý´77I5ÄQ¿ÚígãjsúS´ré1LÓDöI+çs©@Í“““Tå&¬Þ‚°C> h‚ê(ÅÃ4ŠN㜷±9==hrmÜæÒ‘šK&1±d$¡*Ää‘èsÍ%).¡aÍq¦:li­2NÒËŒœç|œýM Mkp n4Éš7–kI3”fe%O¨ôè(RkDÀãLtØÓZ2d¥—9Ïù9úššÖà1GŽàÎb³dŸ0 “Ôç­795fô ¶ŽB›‚ ùH$‚>„ŸÌÑÏ.áaDºRÉ‚K!$k±Ê@{hæ•­p°õ»Ó“fË‹UØ»S£jñÀôÈR»cÜieH3ZC /!ŽX~'¯­ϸÜi‰;N²Ú ˜a¤ »ˆô'¯aG3µ¯ †ÑÄ& Ö>YÊ`€IROÔÓç•ïp°ÛË»!¦O7ø²¢+¯¦¥»»±–¤»¶†êõ&¸Š7ûI;YÀ8Øœþ”Üi‹;N²Ú ˜a¤ »ˆô'ð•>gk_@ ºL ,£Umà!A†Æ3Ç|qMÊOv+7aR Ö„ÀËÈc–‰ëëK™÷EÞœ6ââÔmbÃç^ç${œŸÌÑv0K½:ŽÖë5‰…NV3³h> ~'ó©ç•ï}BÄÿÚ_ó÷oÿüjF'ö…—üýÛÿßÅ ûBËþ~íÿïâÐý¡eÿ?vÿ÷ñhþвÿŸ»ûø´hYÏÝ¿ýüZ?´,¿çîßþþ-Ú_ó÷oÿ€í /ùû·ÿ¿‹@ö…—üýÛÿßÅ ûBËþ~íÿïâÐd̯áÍA”†Su!‚2´¿'_øŸú1¨;ßøø‡ëþŠ’êì“]íf\Ü·CþÂS58®\¥½ôr°+Áˆ¼©BQÕ¡\±çKÿ=þú5#:_ùêÿ÷Ñ ­Ë±`³1*pÀ?CŒàþ~tXn]‹™‰S†úgð"‹ï:_ùèÿ÷Ñ ó¥ÿž¯ÿ}<éç«ÿßF€:_ùêÿ÷Ñ Ηþz¿ýôhó¥ÿž¯ÿ}<éç«ÿßF€:_ùêÿ÷Ñ  ú”Ò2ìƒ ÿô4,nÉ=öÖeÍÓt?ì%G§ Ë”·¾I\ •Ž`Ä^ T¡(êÐ\˜Ü¸p†fÞA!wò@ÆOê?:Ÿ0çKÿ=_þú4yÒÿÏWÿ¾'/üõûèÐçKÿ=_þú4yÒÿÏWÿ¾t¿óÕÿï£@/üõûèÐçKÿ=_þú4yÒÿÏWÿ¾t¿óÕÿï£@/üõûèÐçKÿ=_þú4yÒÿÏWÿ¾t¿óÕÿï£@/üõûèÐçKÿ=_þú4yÒÿÏWÿ¾t¿óÕÿï£@/üõûèÐçKÿ=_þú4yÒÿÏWÿ¾a\’t D“’nåçñZÝ“¯üOýÔïü|Cõ‡ÿFÅIãþºëþ¾[ÿ@J`eN—+¤`Œ÷C')¶0Äcð§!úÃÿ£b¤€Šây`¹¹U±»˜ÙƒEá÷TzûS/¶Íÿ@½Gþüÿõèûlßô ÔïÏÿ^€íryΓ¹A¼^þÃò£¥€_¶Íÿ@½Cþüÿõèûlßô ÔïÏÿ^€¶Íÿ@½Gþüÿõè>Û7ýõûóÿ× í³Ð/Pÿ¿?ýz>Û7ýõûóÿ× í³Ð/Pÿ¿?ýz>Û7ýõûóÿ× í³Ð/Pÿ¿?ýz>Û7ýõûóÿ× ®î.'´š%ÒõÏ(&2F=hy.eŽæënŸ}"É9‘Y 8 ªŽø?Âh>Û7ýõûóÿ× í³Ð/Qÿ¿?ýz>Û7ýõûóÿ× ûlßô Ô?ïÏÿ^€¶Íÿ@½Cþüÿõèûlßô Ô?ïÏÿ^€¶Íÿ@½Cþüÿõèûlßô Ô?ïÏÿ^€¶Íÿ@½Cþüÿõèûlßô Ô?ïÏÿ^€¶Íÿ@½Cþüÿõèûlßô Ô?ïÏÿ^€¶Íÿ@½Cþüÿõèûlßô Ô?ïÏÿ^€¶Íÿ@½Cþüÿõèûlßô Ô?ïÏÿ^€¶Íÿ@½Cþüÿõèûlßô Ô?ïÏÿ^€¶Íÿ@½Cþüÿõèûlßô Ô?ïÏÿ^€¶Íÿ@½Cþüÿõèûlßô Ô?ïÏÿ^€¶Íÿ@½Cþüÿõè•Ìr§‡/LÐÉ ’áÜ,‹´à•ÅnI×þ'þŒjŽ÷þ>!úÃÿ£b¤€‰ÒQ$lnemÒ¢°!9€=½0& € ( € ϸ–a4›&eö€q÷T÷æ€!óî?çåÿï•ÿ <ûùùûå€>ãþ~_þù_ð ϸÿŸ—ÿ¾Wü(óî?çåÿï•ÿ <ûùùûå€=Ér¿i|-÷WÔOz<ûùùûå€>ãþ~_þù_ð ϸÿŸ—ÿ¾Wü(kFžy$V¹U# óíí@|‰?çêoÉ?øš<‰?çêoÉ?øš<‰?çêoÉ?øš<‰?çêoÉ?øš<‰?çêoÉ?øš<‰?çêoÉ?øš<‰?çêoÉ?øš<‰?çêoÉ?øš<‰?çêoÉ?øš<‰?çêoÉ?øš<‰?çêoÉ?øš<‰?çêoÉ?øš<‰?çêoÉ?øš<‰?çêoÉ?øš<‰?çêoÉ?øš<‰?çêoÉ?øš<‰?çêoÉ?øš<‰?çêoÉ?øš<‰?çêoÉ?øš¯©Û3i·;î%`#-‚œ öÔ¥'_øŸú1¨;ßøø‡ëþŠ’²u‡þ»Åÿ¡­035H<ýRÑ>Éouˆe;.|Ñó÷[ŸÂ€#I/- ºW¼.¶ÏÊ €V=òsÐ<ð9ÎG@¿´$ûJDÚ–ËCæbëjàÈ;±´|ÌËœcŒuæ€u B[ȯ |¬Û±Ã0*¥ˆM¥Ž aÀ ¼ô9«<³ý’Úêæó|²é“¸Bˆ¨q‚9õ?NÃ"€.Ç}zÚ„ÊÓÄ 4€Ã˺(ÎÖòÕws…9-ƒž9#ô{—¸ŽP÷"ãar²ºçÙÔ{p@ ú‚(.?×Kÿ]?öD sJ0GfÅ’Ëä®|¨‡˜7$žx#’xÁ  ®.îGû䀱o3{„°Æ%HèIéÏQÇ,72<ê'¸K” N$A'nêXg¶9èhÍãM¢=ÉBª9F×9$`’qیЦîXÖlL"d24(Gœþc½9è½0~oz±Óy±;LβÜI ~1œü£©=èAÖŸúæô%  RÛ@Ú¼ÐÆ\ÄìX¨ÎAL¨  ¶—w2+4×1©Ù¹•~säaJ…êFÒKÇ š’MNÙ圫´rÊŸ“åé“Ç9Ï8ÈàÐîþ¾÷Sùµ_ € ( € ( € ( € ( € ­¨ÿÈ6ëþ¸¿ò4rN¿ð9?ôcPw¿ññÖý$° ¥X¤`ƒÞ˜´’F1å¼ÞŒÎ=òGçß¿<ùòϬߚñTÂÄ̳9¼ÄRªw/àŸâÿdPüù?çÖoÍ?øª<ù?çÖoÍ?øª<ù?çÖoÍ?øª<ù?çÖoÍ?øª€[´¦i f7gÈ G#hã=Áú~`€W0\g‹wÇûËþ4žEÇüû?ýô¿ã@‘qÿ>Ïÿ}/øÐä\ϳÿßKþ4yóìÿ÷ÒÿEÇüû?ýô¿ã@[ÚÈ×–&E@bW ätÁ>ô’[ήBÂÌ=TŒ~§?ç¿Zg‘qÿ>Ïÿ}/øÐä\ϳÿßKþ4gOŠX䕤Œ eP2AÎ3è}èíP@P@P@P@P}GþA·_õÅÿ‘  ruÿÉÿ£€ê+®.pw`‚ °#åaÕ{Š@AöIçòOûø¿üjÀ>É/üþIÿÿQp²Kÿ?’ßÅÿãT\ì’ÿÏäŸ÷ñøÕû$¿óù'ýü_þ5EÀ>É/üþIÿÿQp²Kÿ?’ßÅÿãT\ì’ÿÏäŸ÷ñøÕû$¿óù'ýü_þ5EÀ>É/üþIÿÿQp²Kÿ?’ßÅÿãT\ì’ÿÏäŸ÷ñøÕû$¿óù'ýü_þ5EÀ>É/üþIÿÿQp²Kÿ?’ßÅÿãT\ì’ÿÏäŸ÷ñøÕû$¿óù'ýü_þ5EÀ>É/üþIÿÿQp²Kÿ?’ßÅÿãT\ì’ÿÏäŸ÷ñøÕû$¿óù'ýü_þ5EÀ>É/üþIÿÿQp²Kÿ?’ßÅÿãT\ì’ÿÏäŸ÷ñøÕû$¿óù'ýü_þ5EÀ>É/üþIÿÿQp²Kÿ?’ßÅÿãT\ì’ÿÏäŸ÷ñøÕû$¿óù'ýü_þ5EÀ>É/üþIÿÿQp²Kÿ?’ßÅÿãT\ì’ÿÏäŸ÷ñøÕû$¿óù'ýü_þ5EÀ>É/üþIÿÿQp²Kÿ?’ßÅÿãT\ì’ÿÏäŸ÷ñøÕû$¿óù'ýü_þ5EÀ>É/üþIÿÿQp²Kÿ?’ßÅÿãT\É`òÆÑ½Ü…aæ/ ÿÛ*.§%IË´œ ±=Àõ¥p<ôÜÎI&i <’XÓ<ù¿ç¬Ÿ÷Ñ Ï›þzÉÿ}<ù¿ç¬Ÿ÷Ñ Ï›þzÉÿ}<ù¿ç¬Ÿ÷Ñ Ï›þzÉÿ}<ù¿ç¬Ÿ÷Ñ Ï›þzÉÿ}<ù¿ç¬Ÿ÷Ñ Ï›þzÉÿ}<ù¿ç¬Ÿ÷Ñ Ï›þzÉÿ}<ù¿ç¬Ÿ÷Ñ Ï›þzÉÿ}<ù¿ç¬Ÿ÷Ñ Ï›þzÉÿ}<ù¿ç¬Ÿ÷Ñ Ï›þzÉÿ}<ù¿ç¬Ÿ÷Ñ Ï›þzÉÿ}<ù¿ç¬Ÿ÷Ñ Ï›þzÉÿ}<ù¿ç¬Ÿ÷Ñ Ï›þzÉÿ}<ù¿ç¬Ÿ÷Ñ Ï›þzÉÿ}<ù¿ç¬Ÿ÷Ñ Ï›þzÉÿ}<ù¿ç¬Ÿ÷Ñ Ï›þzÉÿ}<ù¿ç¬Ÿ÷Ñ Ï›þzÉÿ}<ù¿ç¬Ÿ÷Ñ Ï›þzÉÿ}<ù¿ç¬Ÿ÷Ñ Ï›þzÉÿ}<ù¿ç¬Ÿ÷Ñ Ï›þzÉÿ}<ù¿ç¬Ÿ÷Ñ Ï›þzÉÿ}<ù¿ç¬Ÿ÷Ñ ÿÙlibstruts1.2-java-1.2.9/doc/images/how-to/netbeans/building8.jpg0000644000175000017500000013225610404045214025104 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„   (1#%(;4>=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀšMÿÚ ?±ãøù´ÇüûOÿ¢…oCgò"[£&Â8e³Í`½aR'URÇ“ƒÈ'ï#·¥·WOëúÿ‡#Gî³+U æ[™m’Ú]¬ ÚÄÁn™'žp3Z7xüÉÕ6ºiý_ðýï‡ô놼“Jp¦7[SŒÙ†S* nùR7uÏôÑ©%nbÜWA–>²MjÞÞk¸îÍ$RÁ¸+ð„†Â±8ÈïƒÓŽh•GÊÚ@¢®&¦ésiñLê’ùš‚Û‡¸!e*F 6s‚N=iÎRNÞ@’±ðÔa ’ß%¢É,ÉÎÈ0ÜŒ|¡©û_!r•íü>óire1J¶ír"‘Tn@z›w#¡+~ôÝK;.„÷žX$»Ž+åg´x–S4~Z'BOLó;ÒUom7¦»£¶:DÆfßœ;ÆXà†9úÇÕB|èMXÚþÎÓ·†û xA½+æIƒ'ígt÷5Ÿ4»õ±VBXé:}Ä ~ТG-”Òù.îR7”nÈ;¶œçŸ­œ“åó–æ½¬zw†9­Ô‚cÝ¸è ‚Þ¿Ž;VÚØž¥½jÒÚ->æÙ~Я¹¢-å±VÇÊæÏ®xéŽõ0m¶˜4O{¡µÌ±Mö¥¹ &T…EÚzzŒ7tÏÔÌjsNËa¸Ù?f“ì¦ã|[=<äß×w;¿OzÒúØ›ŽŸ¦ÿeé³Þ$Ië1žg˜«®Òv•]ÜŸ¢šÆR—3KÈ´•‘^/¬“Ø@·Éç^F’„1œª•$œô8ÛëžÕN¦Ûar°ÐážëO"2 ÅÆ%ˆƒ•ÎCqÇ¡ð¥*'ä $2èI ‚Ï-ô)+Ûý¡cb 0=s»8ÿgã4ÕK»X9t-Yh¶±xŠ:êGžOùj6§ú²Ü0lðqØTÊmÙ E^Æ]œwºœVÜmŽF $™Bã@O=€ÏvÚ±\¶½È¡ðür\XÀoÀ–î%”'”IPU‰ïá¯~œrÝK&í°¹I4½Ùì>×tìë-¤ò*ªóF=Fî½)MÞËÈj:âѼÍ%õæ’XÔ·Ë`•ñ¿æã=xÎ5\þ÷(¹t¸YhòÜ\4o4(‰JÌ’¤˜Ôu#¿¥šHI—BÉ,6wQÜL‘,‰cæá9*úœæ—´¶­/acЖKù -åG2Â&òÔsÔ|Ì9ƒ?â:š^Á˨äðææ‚'ºÅÅÃLˆ¢< hÉ-œàãÒk»°rŒ‡BŠhånßìío$À˜†ÿ‘€#nìwàæ‡RÎÖRÜ2¦ŸtŠc•§Kg‚WL2‡|s×5.z¯˜ùt3õ=.;%/#•ÖSG• Ç|AÛ+åÿt.ÜÇ@??ÝÚ×üCÞ!HµxïVò+IâH!£·Øn€cüióBÖlV{“µìN¨bhv%°UÇ,…ÀϨæ—îûþ#÷ŠþF­ö±ý–çìþg›³È?{Îqž”ù¡{ÜV{ 6ÿŸô+¯ûôÔùãÜ,ËAªÍo¼–×&+}ÞZù$mÜryÆO5*PN÷ 2mÚ×Ú-çÝ,¶È±ÄÂ6¨è:sÔõ¥zvµÇï¬îµ[{Ène±žCnŒ!aòÑ ÎÕ\¼ãñÍKäj×¹YŽ®ð,2ZÉ""lS%¨fUç€År1Ÿ^;U^½ÿj<Í®4ÑÌa›ÎŒ‚²‹l9ÀÇ-Œž=IÏz_»Úÿˆ{Ä Kí?hû ïôû(ÛÓwnßÒ«šµÿYö,yÚÞ÷c ì2n m^ƒaF;qëëSû¾ã÷†gYÛÎ"¹Û Ž&‘µGAÓž§¯Zw…š¸{ÄßiÖóÌ«ºª-¨UÚßxCK÷}ÿ÷†!Õ–"KY#YA RÔ+NH$ ãÛ§n”ïÿˆj6ÖNÑËÁo:¥Nb$=A`þ49AîÄ“Dý¨ÐÍÙ]#˜(‘c¶ iÈè=è¼7¿â=I~×®yÏ+G338“æ· €ÀÀ8î)~ïkþ!ï ûN¸&†_.ã|,ì‡Èè_;Nù4~ïk‡¼Icu©ÚDÑ5”ÒÆ ’(ÔÅÂo ’x;¹ÿ­K‘ëq«¢#6´ÛÁK !aÛ€‡*ÊôÅ?Ý÷¼2äjwyóí’Û‹-¨V'Ü€ ¦œÏñ›+ý‚óþ}.?ïÙªçqYŠ,o?çÒûöhçp³XÞϬÿ÷ìÑÏáf(±»ÿŸIÿïÙ£ž=ÂÌ_°ÝÿϬß÷ìÿ…ñîaö¿ùõŸþýš9ãÜ,Ãì7óë?ýû4sǸY‡ØnÿçÖûöhçp³±]ÿϬÿ÷ìÑÏáfvÓýñþêÿ!^z7)½õš\}îàY²ŒÈdôëL "š)—t2$Š1ʰ#ý?>€ÝcFy*(Ë3=h+{»k­ßf¹†m¸Ýå¸lg×幟`š2äãhaœóÇþ:ß÷Éô  ( ¨p…€r žHÉýGç@&ˆÊb!g+¸dc¿àCó´ê( d¼¶†e†[˜c•ñµÀfÉÀÀ  ¨©r†ð+ž@9Áýå@ @Ž®¹F # çpGæ(h {ë;§)mwÎJÇ c^(IfŠÝ,‰ó˰'ôþæuR¡˜Ç êqœÀÊ€€!’òÚ’n!ŽWÆØÙÀfÉÀÀ  ¨ÖDWƒ#U”äë@ @#ºÆv 2IÇ$àÌŠ ¨p…€v…Ï$ dþ£ó  wXÆ]‚Œ’qÉ8ó4Z!tpA!sÉ?¨üèh wXãgv Š2Yަ€"·¼¶ºÝök˜fÙÞ[†Ç×5":Ȥ£‘sÈ8#ó´P³ýñþêÿ!I—io(Ô¯f2Ì‘™í]®<´Éëè{}i‹ WþBZâ$m­#yR³3ù1„7gç8ÈçœPKl$°‰‰iv.òÀ[ð2áÅA«#I¤^¢)gh*¨É'iàPwx×ý#Qš ó·@Ѱ]­»QXüÛsŒþY  6¶÷úÑî#½“–çwž~HO—û™=0} tôSPFXÒê%--¹ÝµFK¯ñ/¾G x/¥g][ßCb&6HÝî0Ì»‹Ç»¦ Âï üXБêÙy–óÌï¹£O27\ÚŘíp[¢îÀÆ(í„w"âA;¿—èãÉ?8'p'?{ °g®wç=hýeÝYÏu¨]FGo5¬qÈLd–“!N@èzŽ(/.u·ß3ݲ=ÜžhRÛ– ϰ(_›ÚxçìŽ*;_34bYÖ0¶UÙ„e¦Úp¤>Hçw¯z±œO|àF>ÎÑ+)-¹¾ðÉ<¼y‡ëüTwEˆAk,x™H¸—>ic‘¼à‚ÝA9yïš¿@¼P]˦ÙÅo-ñžOîä‡ÊXÛÉeb«ÈbäúöÍMªÉwvn>Ï ßÐí Q”?îçÏË×®ÁÈãÚ€,*NÚ¥±‘n‹¥Ì†BAò‚íFFxû¤}ß_›œPÕfNë©r%·šdšÞ4UXK+ÒeIÆÑÔu s@áƒQŠòžæRñùJ6Ç#«¨UÞKn Éß÷†ïOá ¬’ò++UoÇfádckÆ@QÓîáy=æ  K™n¥‘Òù-Ìå6í‘ì8ì>ùÃ|¹ûØçü(×^ ³o»û:ÈHwÎÒÐóg'¬œçžÂ€%t¸Žåâo¶›XÝ„F2Ìû¶ÆW“ÔdÉ÷ŽÞÇ   úK´šE“ÈÅ BÌÇ$£“@è#d©dÖu‹í“„Aƒì/!R6üÝJtííš®ÿlò_wÚ÷ùmö-»þöçÛ¿ìù_ë=óüTî#ÛÅÚŸ:b©¸ ™X‚àx ž: Æ€7è Ý:¡Rìm^IÇaIŸ4sJd{‰CÉvê? À `Yóáÿž±ÿßB€>ùëýô(X Ê ²`þ`äP0Einåã¸rHÇï.]ÇäÄŠŸÏ‡þzÇÿ} <øç¬÷РnÖço™;.Þž]ÃGùí#4[¥­¶ï.v;ºù— '帜PÞ|?óÖ?ûèPçÃÿ=cÿ¾…|?óÖ?ûèPÅipáä¸p@Çîî]ä¤ ™%‚4T.7I“ù““@²[©b¯,rÄÉÆ2?*wÚ!ÿž©ÿ} >ÑüõOûèP–Xز!Ú2pzZ¤–¶Qº¸¹›*r7^HGâ `п>ùëýô(óáÿž±ÿßB€>ùëýô( â´¸pò\8 c÷w.ƒòRI ÛÁ'GMò—?™$Ðüøç¬÷Рn#°ºÛö”¶›nvù[LÐÞ|?óÖ?ûèPçÃÿ=cÿ¾…|?óÖ?ûèP7 ks·Ì†Þž]ÃGùí#47ŸüõþúyðÿÏXÿï¡@Ÿüõþú Äv[~Ò–ÓmÎß0+c際χþzÇÿ} G–FC2€Ãl˜?˜9 Z[¹xî’1ûË—qù1"€'óáÿž±ÿßB€>ùíýô(Ï,q±WuVA8"€σþ{'ýô(Ĥ‹¨8 ýi gL²aFN7^=ÏÀ<éç«ÿßF€:_ùêÿ÷Ñ Ηþz¿ýôhó¥ÿž¯ÿ}<éç«ÿßF€:_ùêÿ÷Ñ Ηþz¿ýôhó¥ÿž¯ÿ}<éç«ÿßF€:_ùêÿ÷Ñ Ηþz¿ýôhó¥ÿž¯ÿ}<éç«ÿßF€:_ùêÿ÷Ñ Ηþz¿ýôhó¥ÿž¯ÿ}†áÝÒmÌÍ‹wêsÝhÔÓH&p$¾@>ÿá@‰ä9įÁ#©΀:_ùêÿ÷Ñ Ηþz¿ýôhó¥ÿž¯ÿ}<éç«ÿßF€:_ùêÿ÷Ñ Ηþz¿ýôhó¥ÿž¯ÿ}<éç«ÿßF€:_ùêÿ÷Ñ Ηþz¿ýôhó¥ÿž¯ÿ}<éç«ÿßF€:_ùêÿ÷Ñ Ηþz¿ýôhó¥ÿž¯ÿ}<éç«ÿßF€:_ùêÿ÷Ñ ó¥ÿž¯ÿ}Šæi ´ Èä?Ä}(bì²ÎÊfvÉ´—o£4“|à rqïÇZ|ßñóû§ÿEšHdNOʽvgg Óƒ–¦¨Œ‚iµ £[™âH∪Ä–c'\£p K å[Û«†‘Ý1,R>øÎåT;p7Õ€¿H 7𽥤ÞKKMÔÇæÆ…G’ìê8ÎO§€¦'ØÐý™ÔÉ2­ÈwMï°ê½Óߊ›ÙØ«isB¨’µä²FQc;s’Höÿªnn˜—bª22£§µi)Ü úŒÐ7s˜”*™Á=½ÿZÎH[ÜsŽ$oSþ§jí%¼lç,FI õ9^ßK»š&Û$p»)ÆpB’(µûK¥Í­us=¼r8o-¶§MØTŽXàŸ»ŒrJ×.—M”«#pj@†o¹7ý{¿óZžèn’UÆì³|˜á¸=N4çæ-óHÇ â€(ê"H絸¤*­°Æ®@bÄmÈï’6 Ž7çµ8ÚöbbXy—“Ý;¿–—n;pvqë´Î3ûÜ T£ÊµÜ/Ô «{æ´ÖÅ,‘y²²±Œ)bnغŽÔ-À£eq ÚÆFŽõ•¢c.ç@Ê¥T©$žÜüÞŠM;;\ Š@6VòâwÆv©8  ïµÈ²–$’:Žß΀4Ô†úÐwV¶•``³!ô ŽCßÚ€9Û©¯£H/MÔ‹¾0Ê¿hÃ@ G·?:úþœ€oi¦WÓ-¤¸pò˘HÇF9QÀî‘ÿ×  Ÿ2Ü«<›É y*Ý? ³i9™aó)Á>´=QžæV”Çx8àdœuëþx X´¥Ü0;2sžÍžhÅÇü{ËþáþTa¿ÖÍÈÿ†ëÓ¢Ð9~D_žh÷s”‹s7–ùx  “ÇÌ?îŸýi !u9?*õÙœ7NZ˜  ˜ž=NVŽÙ¤ŽT‰<Àè`Éœ† žtú€­i-éÔB;>Y¿z¬HSæÁÝ·'$?U\ì_›¡t¥Vxîã¸g²hÂJ•ZVæ^„mVä‚Aÿu}0SÛ@V[\Ú_ß\ؼæÕµÂJYn$f 0,9Œd3ÔNb1iݲܓZ#B´ «{¾ÆE,‚^£ü(«A# «xÉPš ƒZú7mŒŠ[½¿Â€+%¼“:ü¬Š9ÜhIcŒ"ô€+_ÂÒˆp.#G%á!Hm`8bኞOo\PF³R„[©?Ä µÈÿÇê%Ú´­÷~¨OUbí…¿Ùl’/-c!¤mˆ3³ÇqÆEXÇÍ÷&ÿ¯wþk@Ý ÒJ¸Ý–o“7©ÁÀ ƒœüžcÎ1ßè8  fÂöúSEÌÁ¶mŠŒs’ã#pÆ8ç¡ã±ÒŸ*ÖD»ô&·¶¼MU˜y‘Ú $bZPU”䪪äwIÀ¼JI¤%©£Y”Auo$ÍÅ2Dð¹`^/0£.1‘ýïZ&Žî_ .š4© ¦Ñbfy!Û¹P~þx#>ÞsjJÖb6eÇšûqǨÈd…Ðc,¤ Ði‚_˜yO“žhMAê-aÜØÞÜX[B¶’+ÇjI–,dÏñçøOùê±kÃekƒ£ ç(g'ùÐØ„)ÚHàã8  å¶œ³(\ òKz»o‚=½IäŸZ–€(Ï±ÍæB É$mê ëÖ€'´ó¶6y<Ö€qÿòÿ¸•Xoõ³rúCuéÑhœ¿"/Ï4{¹ÊE¹›Ë|¼PÉóçÄB³¼íRÄ|„v÷"’WcŸ.|…ýÁùO<Ž:óLùÿçŒÿ÷é¿Â€çÿž3ÿߦÿ >ùã?ýúoð ùÿçŒÿ÷é¿Â€çÿž3ÿߦÿ >ùã?ýúoð ùÿçŒÿ÷é¿Â€çÿž3ÿߦÿ OŸþxÏÿ~›ü(~ùã?ýúoð çÿž3ÿߦÿ OŸþxÏÿ~›ü(ùÿçŒÿ÷é¿Â€çÿž3ÿߦÿ >ùã?ýúoð ùÿçŒÿ÷é¿Â€é#¤Ø†Qû†Q˜Ød’¸Š’ã2;*bŒÄ‘ä7Ì9ã§½7çç1NrIÿRßÐPóÿÏÿïÓ…/ÏÿͪÿÐJßÿÿ@Ùµ_ú [ÿà!ÿâèû6«ÿA+ü?ü]fÕè%oÿ€‡ÿ‹ ìÚ¯ý­ÿðÿñt³7ú³ÿÿÐM 1µ+}Ž8rL“ਙ¢Ü<·8,¼öð¦=Bæê×N»…Lp-·±iÝÉ.\.Ù#ny$ÇZŽ»¯µÝ3H BX‘cËñ›—Lçw >Ý00@'‹T»[kW›Èw»‰]6!QfyùŽïõ€öû¾ü^Ón¥¹7K)…š ¼­Ñƒ…R~‡$ñÛ§8ÍC©ÿÇþŸþô¿ú%è”òÈ%H!Ú$ufÜã Œñ‘“Èôþ„kÓ<ñÆ']¯¹ã`A*Sç½ÐÿõÈÙ]Éq<Èá@¦ûn¿ÉGë@YêIÍ9ÈdRm>b@3N?^”ÙuYVVU‰„ØTîó’Xs— c ðzr@'’ƒ 1HËã#¨"†eÉÉû§§åÚ€$Ñ™Ò!˜wdWÇÊJƒŸ¦6‘Ï^Ùиÿ×Çôý¨¥Ä“ýª(`xÓr;’è[¡QØïP¬[ÄMò·;ÆåùpÅIä‚Ã*z}¹ .¦©4n4ªW†Ú[“×jç==ûPó^$Sv;É…*«›;¸8è¤ó@¶«…åL˳>•‘È<òTý;
(2Œ±n2:€(f\‘œŸºz~]¨A}"ɇvE||¤¨9úciõí‘Í[ý|GÿЀ(ß]K ðÇ Y‰òZSÁ^Ê}úÐmõDto1ÕØ! Áä}Þyïƒ@­êù‚9"’',ŽÎ ‘‚A\zÐG¨A*©Mí¸žä·vq×+ÿ}Ö€#mR1ͱÂe»+nXðCcøOÜПnìh%Y²Ävîl䃜ãø[¿o¥Mm:\Ãæ `»™pÂGO€4ôïøó_÷ŸÿB4j€ ( € ( € (Ô/í,¢k¹Šûv‡` ÂóÌ~t€Ê¸Õt;¤ qsg2²a†}y¦>ßá툞m†ÈÃ\.7ÞÓ=ýh´´3Ìóì·ÿ{åÏÞÝ×ýî~¼ÐM¨è²Ûù+}m å©M‡jñ•‚0p1@–¥£YDR=F$嘲Œà8€à”ËBÎ÷Q°[[˜¦eiIÙ yO@ š.Ò£‘~ë¦2=G9úÿA@%ùY%‘%Ì£›8Îrì;q€û{HíÝ e‰=NXçêKŠ=<$s3ƪ¡mùJTŒ/Q×4Ó¥ÄIo:må·oÈ'9CžGª:uöÀÿ³âÙp»Ÿ©Väp cÇíŸÒ€#K9~Ú²6äiD…¹ ƒÆ]ÙäœtÐý|GÿЀ+ÏmæÊ’¬ÒD謠¦ÞAÆzƒè(†Æ0AŠI"v¶Ã÷ÆIäžsÉäyë@ þÍ„îÒdƒ Œƒ×Òš§ª Žòâÿžgþþ?øÓöQ ‡—üó?÷ñÿÆe¸40²•h²ÁGçõ£ÙD.CýŸaÿ>Q~mþ4{(…Ãû>Ãþ|¢üÛühöQ ‡ö}‡üùEù·øÑì¢ìûùò‹óoñ£ÙD.ÙöóåæßãG²ˆ\?³ì?çÊ/Í¿Æe¸gØÏ”_›Ê!qVÂÅNVÎ0qŽ Ê!q?³ì?çÊ/Í¿Æe¸gØÏ”_›Ê!pu8û_›Ê!qÃNm»m`;ÆWç<Ž9ëÓ‘G²ˆ\ÃNm»m`;ÆWç<Ž9ëÓ‘G²ˆ\ÃNm»m`;ÆWç<Ž9ëÓ‘G²ˆ\ÃNm»m`;ÆWç<Ž9ëÓ‘G²ˆ\T²Óò¥-¡ËƒŒ;r;÷éÏëG²ˆ\E°Ó›nÛXñ•ùÏ#ŽzôäQ좰ӛnÛXñ•ùÏ#ŽzôäQ좰ӛnÛXñ•ùÏ#ŽzôäQ좰ӛnÛXñ•ùÏ#ŽzôäQ좰ӛnÛXñ•ùÏ#ŽzôäQ좰ӛnÛXñ•ùÏ#ŽzôäQ좰ӛnÛXñ•ùÏ#ŽzôäQì¢%Š+eTX£EVP²°õûÝ9ýhöQ ŽT¶íPwŒ¯ïŸ‘Ç?{§"e¸*@Ûv¨;ÆW÷ÏÈ㟽ӑG²ˆ\ m»Tã+ûçäqÏÞéÈ£ÙD. 6ݪñ•ýóò8çïtäQì¢HnÕxÊþùùs÷ºr(öQ ‚¤ ·jƒ¼e|üŽ9ûÝ9{(…Ä  Bƒ¸eq3ò=~÷¸£ÙD.Gu-¥»Op¬±©ò7SÀ9êE'N(.QþÜÒ=gÿ¿w¹#æ-Y]Ù_‡6Ë#ñ»wš˜ÎqÔCMS‹ “ÇÄîÁ?6HÏ÷˜w¬Z³°É¤ÿŸûaýRªŸÄ μGQìR¬3 YX;q…B[ø[ør:Ò®¶°‘>Ÿzút—÷1Ï/úZ!Ù3L¶ûÖ5P^M¥²Np¹Æy®dí£zŒn•ÿ }?þ½!ÿл)ü(–fi u›Û”Û+™&½–@Ür¤ar3ÈÎ=¥ÚàN5©§µŽ&¶‹íK#(”É´¯ÊFF[–Èãûyw`Aa¨Ý^ÌË$M? Ê„íÞLçØñÍ$ÛÑksYÍtG°’4,ZEŒó’ý³þÎ2Ngk-­ýü·q[I1·Îd-Œá|³÷U›‡Æ ôobÓw°jÆSup#’@BZª¨™|ÓztÈgÅ)o÷Û“5›ZCóÆÒ0gÿI’\~úÀ-Ô}=}NG¥€u®«4"G·Ž14BH7²¯R ó’ÿxuÙθ˜.¥<1,·T²H±!¨*I<¯S’Pƒ†§Ìú€5ÝúÌ‘³Z¯ ŽáK Æw½rð7ÃØ­õ=B; P‘‰ÌvqÏ,¸6p 3¼/-ózàt)IØd²ê·Èd“ÂÖæM»X³¬NÈÚH>‡Ï|™ˆ¶·3ËzðJc[y F… ±œíp~ðÇ+…#œ´“Ww°4wi4›‘‹»AbÇ©Ú:šÂèÛ¶üÛ÷`ðØß÷y7 (FÝ·æß»†Æÿ»Èù¸Q@6í¿6ýØ<67ýÞGÍŠ·mù·îÁ᱿îò>nP»oÍ¿v ÿw‘óp¢€mÛ~mû°xloû¼›…#nÛóo݃ÃcÝä|Ü( vß›~ìþï#æáEÛ¶üÛ÷`ðØß÷y7 (FÝ·æß»†Æÿ»Èù¸Q@6í¿6ýØ<67ýÞGÍŠ·mù·îÁ᱿îò>nP»oÍ¿v ÿw‘óp¢€mÛ~mû°xloû¼›…#nÛóo݃ÃcÝä|Ü( vß›~ìþï#æáEÛ¶üÛ÷`ðØß÷y7 (FÝ·æß»†Æÿ»Èù¸Q@6í¿6ýØ<67ýÞGÍŠ@Û”|å·~Vûÿw‘óp£õ¦ÿÈOúéþŒZRØ w7›«˜`º”ÛO8B|œœR:c~Å“C`^ÒÛuþ¯‡.¢Xv’sÇ—íÅ%ñ^@^_õ)õý «ž_([¹ã¶v–f ÁÉ=¹AE7i2æÔténeÔ¤…Ñ<ƪw+$ÈÃøEm.YuͤÉt.¤Ô]î æµ¼ò:ù9㣑w –áÕt»{x`Žëä†5wdœ(gjÖ-EZâ ŠçÃð6èRÒ6㔄Ávõþ^k­yüÙd‰ò¬¬UòW’1Éùò¢ñó_è— Vso*³o!âÈ-Œg‘×S¼XWIe‘ZhŠËþ°8~1Ïð£š=ÀlZ–A Ã@B„A9 qÆH^(ý)¯å®ÃnEC\¯ÊÅ•ºg “Þ•ã{Ü _UÒdei&‰™~éd$ŽAôõþŸ4{ßè‰çm6ëçÿ­Ä_ë:ýî9êzúÑx€†÷Gòb&Ž(cpâ8Ój’GAýì;¨¥x÷í©híp· ð™Ðad1üÀzŒ÷?;Çp/4 "[ ÌCÉÿVsœ¯séJñçRÑÈ ¼$ÀƒPÇ,:w=}iÞ 4ê?›$ÑÍw.Ó2GóþdsÐuô¢ñî­5M.ÒÚtº ¢¢î$Žx¤œRµÀxÖ¬8Ýx§8-ÃŒ‘Œ})Þ=ÀµaÆëÅ9ÁndŒcè8éEãÜkVn¼SœáÆHÆ>ƒŽ”^=ÀµaÆëÅ9ÁndŒcè8éEãÜkVn¼SœáÆHÆ>ƒŽ”^=ÀµaÆëÅ9ÁndŒcè8éEãÜkVn¼SœáÆHÆ>ƒŽ”^=ÀµaÆëÅ9ÁndŒcè8éEãÜkVn¼SœáÆHÆ>ƒŽ”^=ÀµaÆëÅ9ÁndŒcè8éEãÜkVn¼SœáÆHÆ>ƒŽ”^=ÀµaÆëÅ9ÁndŒcè8éEãÜkVn¼SœáÆHÆ>ƒŽ”^=ÀµaÆëÅ9ÁndŒcè8éEãÜkVn¼SœáÆHÆ>ƒŽ”^=ÀµaÆëÅ9ÁndŒcè8éEãÜkVn¼SœáÆHÆ>ƒŽ”^=ÀµaÆëÅ9ÁndŒcè8éEãÜkVn¼SœáÆHÆ>ƒŽ”^=À³a€ñN~öŒ‘Œ}(¼{_Q¿ÓoìÚÜß,a™vÂqµƒtü)6ŸP kˆxÿ„’@®I+ö8ñéééÅMüÿ¯¸e‹+í>Õ®¥—Uk©®]]ÝâÙ÷F;qÓF˨‰Ìœ÷ø#ï·jÂ[±…ïü|Cõ‡ÿFÅR€bšÖ­^f»6ñÍ#É<…T7N7Œ– Œ1‚O`X¤žöÊöÖ+¹VU–TŒ¬rL§B‚šÝÎqŽqÛ­tÙðÿ~çÿdÿ⨽âYY,m<—Ÿ¼}ˆ#–yŽ À Iè ü(±›hW}òŽØÄ:dáŽ>lvF?—¨È¯ìø¿sÿ2ñTgÃýûŸü “ÿŠ î-­m­å¸š[•Š$.íö‰N'ƒ@gÃýûŸü “ÿŠ û>ïÜÿàLŸüUÙðÿ~çÿdÿâ¨þχû÷?ø'ÿ@ö|?ß¹ÿÀ™?øª?³áþýÏþÉÿÅPýŸ÷îð&Oþ*€ìø¿sÿ2ñTgÃýûŸü “ÿŠ û>ïÜÿàLŸüUÙðÿ~çÿdÿâ¨þχû÷?ø'ÿ@ö|?ß¹ÿÀ™?øª?³áþýÏþÉÿÅPýŸ÷îð&Oþ*€ìø¿sÿ2ñTgÃýûŸü “ÿŠ û>ïÜÿàLŸüUÙðÿ~çÿdÿâ¨þχû÷?ø'ÿ@ö|?ß¹ÿÀ™?øª?³áþýÏþÉÿÅPýŸ÷îð&Oþ*€ìø¿sÿ2ñTgÃýûŸü “ÿŠ û>ïÜÿàLŸüUÙðÿ~çÿdÿâ¨þχû÷?ø'ÿ@ö|?ß¹ÿÀ™?øª«{lµ¾É.iaö™9ÿ{Ô ¨ÓB’¤O+¬’gb›©luÀÝÍC~Ø´»PÓsi)Á™ØèIõ  ’uÿÉÿ£€#½ÿˆ~°ÿèØ© )ý² $šÂÙÊÁCãÍÜzãrçê=yº³¯£)Ãjz¬zkE$pËÒ4Dl@qÎ;œä÷ä$•%mÚS†«dײX.$òã¸/!ŽC(òÜdAê@ã×Ò€3u]&öküÙn@ XÒf”åXGp¹';¸2'<ž}CŒËcoÝ)/êvŒL…ó@í\€C©hÒܾ¢OÞóÅ.$‘‚ÛNͭÞqò¸ÚHع“û&fÖ#¸óÆ¡âhvU`UAŒœ†ùSå;±‘–4 Ž-ª[Ê¶Š·1Ád¦]À¸esç ÙÏÜ uÁŠÐÑld´¼Í›B|ÎÌ„»gÕyz4€8Éë¸àf€ ( € ( € ( € ( € ( € ( € ¥©uµÿ®ÿ¢ž€9{ß Ûß_ɯ/À‚¥]FÌt òñóÍ]½R¶— \¹R‚ÍŒžS“Ž(BN¿ð9?ôcPw¿ññÖý$˜ï Ó´Iç'J*¢Œ³¶ÞGsÿë<j’¾ˆéz´Z†èŒS[Ü ÉŠu Ì8ù† dþg¨Ë”lÀ¿$‰m$ލˆ 31ÀP:’j@Ê>$ÓÁ{Gý9ÍÿÄÐû+Û{ø<ëi7 ;NT©SèAÁ=ˆ=èz¬ú¬wBÝ·ä)!¢±è¥±´‘€NNG¨  –xÚáíÃ~õ]—€Ä€ñÓùPè € dóÇnåmª]PË0P?2(?·[ÿg}¿ÌÿEò¼íûOÜÆs޽(z(‹£¨¥ÃË”ƒhØS*Ï#° ‚Ë3o×èïì–KmÏgöײË<•ŒÑ–“`øհHäýî í¦\Ï,Ñyr£òÌGå± ºvX°ù*$ˆí<?†€.E¥KŒM§Éx¾PX’¦ëfÞç;†6pÈ?v6`gjä6ÑÊXy+¥qÜ +ä¡(Ä)]¸ʸÆ&€,j:dò2æÖIã’Þ4•c™]Æ[y£gÌ?| mÏÞÅUþÄ•¥cýœ±£µÝ$NnÉ÷8våù6 mµhÕÞ›?úEœV1Ék=ÜžTF±/”¥v÷?»rI2îš2Ĉp /Î8Q÷*Ì@KFÔ&¹º’|¢tw+Fá$o<ìÈfÀ8ÀÀ@ [G6vz¥Å½²ÆÊZPFæ‹ì¤Ç99“’$óï@O¤_JÇìp}‹¨¾Î%ò¦S.áÉÉxÆãóœdŠ"Ñ™lgŒY]ˆ]Ðù m•²7e„j¾Qê¿xäã<\€X¸ÓnÎÏ™ÄRC,Èb±VÈÜHã`_+ómÎÑ’6™%µÅ…ÇØ–ÝUgŒŸ6AU%GG8_—9<"µ¥¸˜Œ¹ÏË»v{cw_n·7ú›îsþ‰/8Çu¬jô6dëÿ“ÿF5b2;ßøø‡ëþŠ’OKÿUŸýpOýSöPEoiPD‘F«Â"…<ž½9nÀš÷^!··½hR™ãŒí–XP2FÙèyÉÇ|é׊µÕì¼r$±¬‘ºº8 ¬§ ƒÐƒP+«Æ‹Í:ÚÞY$Ÿ¦âÀ‘ß©üò”ß5—õý^nÅKXšËI}B í.£ÁØÑ©ÚÄßw±üj=¤ÖŽßõýyjÒFåt2Yã‰áI 3ìAƒÉÚ[’ŸÊ€!mFÑcºÎ»mAiˆí9>ýqÝHê  鮨=¿ž¦çÊ!J¹´”Ü@]¿/Í’ÃP«KØ.÷ˆŒ“’HÚ6ô;XƒƒÏN¡ Ûê6—7/m êÓ ,Sd'ž¸e#òõ Օ˪@ÓË»f-¤*7(a–ÛÃÉã<Ðú( € ( € ( € ( € ( € (  ÝsýDõÐÿè·­in&`2ç?.íÙíÝ}¸ZÜ@ßêo¹Ïú$¼ãÖ±«ÐhÙ“¯üOýÕˆÈïãâ¬?ú6*H =/þAVõÁ?ôL ¡ÿSû¢ª_õ s3ø~tÕ –Ëm"»Ë*I;°hLœ>F¯#ÓŒdÚ–ž‚/èþÓ4Y¼ë(Ýf1ùlìä–u:€xÅMü†ex–ÞòK‘so “Ãop|È¢$¾JGµ‚ޏä}ö$Žy(Ëž2ê´¾ß×ë­ˆ«(Ù·°^I£ßO%»À—,©J30W\ìõ9UÎÑí•Q©8Ùj­·õýyõªQqNç}]*jÐI=ƒW|±ºL‰7”párzgn3Û9  ÷ÑdŒÚ¤ÜYÐÝÉ€7•“Îߌñ—Þ0?ç®z(Ÿ™pº$6§NÔ–xÒ3uè*Û náI Œu¡ccyÅÍŨ’ÏÌHÐ-ó–;K“ÒCó®>nÇŽô ®“v·WìXåY<ؘ`Ÿ:v ã8ÊIŒàãvq‘@xsH–Î/2íeŽeQ;l8‚49PvžC ‘Ûé@´P@P@P@P@P@P@ºçúˆ?ë¡ÿÑoZÒÜLÀeÎ~]Û³Ûºûpµ¸¿ÔßsŸôIyÆ;­cW Ñ³'_øŸú1«‘ÞÿÇÄ?XôlTz_ü‚¬ÿë‚è"˜Cþ¦?÷ET¾&ê@Ǻñ´æ%‚æt‹),° dŒädrqŽp§\еâ¼r$±¬‘ºº8 ¬§ ƒÐƒP?¬ØÚI¨¼’ÚDìȘ>DLÎ~`I,ŒNQNRŒ#w«bå+l&“oemª&Ë(WÌLÃ7‘Ø9ªƒÈÝžÜu;°)rÎñ¢á.VtUSÔ.þÌð&ý­3QŒä€Oò´¦“ÜL‡íSô·³a\€êê$(÷68‘v÷#ŒŽzÐ÷½œ{Élõ{y\ù—‘3äw¨œ´CE¿í+ùý·ÿ¿«þ5Ÿ,» ?´¬çößþþ¯øÑË.ÀÚV?óûoÿWühå—`í+ùý·ÿ¿«þ4r˰ö•üþÛÿßÕÿ9eØûJÇþmÿïêÿ²ìý¥cÿ?¶ÿ÷õÆŽYvþÒ±ÿŸÛûú¿ãG,»iXÿÏí¿ýý_ñ£–]€?´¬çößþþ¯øÑË.ÀÚV?óûoÿWühå—`í+ùý·ÿ¿«þ4r˰ö•üþÛÿßÕÿ9eØûJÇþmÿïêÿ²ìý¥cÿ?¶ÿ÷õÆŽYvþÒ±ÿŸÛûú¿ãG,»iXÿÏí¿ýý_ñ£–]€?´¬çößþþ¯øÑË.ÀÚV?óûoÿWühå—`%†æ ÞDÑË·®Æ Ê“Mn”€( € Í×?ÔAÿ]þ‹zÖ–âf.sòîÝžØÝ×Û…­Ä þ¦ûœÿ¢KÎ1Ýk½™:ÿÀäÿÑXŒŽ÷þ>!úÃÿ£b¤€ÓÒÿägÿ\ÿAÀšõ1ÿº*¥ñ0R§›?Ú[Å2µô—A4¬Ù€°ÌŸ(á¸<~\cqµ-U•¢ÙZAmŽÑÁÆ»±’ÀÎMü€ÉÔåŽÎî`f; |yÊ»ßÀ6×½(áÔß5Ù~Ö˖ȃM&Ô ,N‹pÞYÜ<Â<¶ ‘ýÜŽÏL`?g%™Ÿ;Lé+00üOl÷ÇdzG1y#ß·+±ý@ÇCœ3ZSW0ä±¾ŽÎò8­·›«fŠ4Þ D7HBŸ¢º€FF25­˜zRKl.•²Œd-ÁìÒJç±Mù‚.ùÒÿÏWÿ¾d0ó¥ÿž¯ÿ}_:_ùèÿ÷Ñ ó¥ÿž¯ÿ}<éç«ÿßF€:_ùêÿ÷Ñ Ηþz¿ýôhó¥ÿž¯ÿ}<éç«ÿßF€:_ùêÿ÷Ñ Ηþz¿ýôhó¥ÿž¯ÿ}<éç«ÿßF€:_ùêÿ÷Ñ Ηþz¿ýôhó¥ÿž¯ÿ}<éç«ÿßF€:_ùêÿ÷Ñ Ηþz¿ýôhó¥ÿž¯ÿ}›Mf{ë’ÌXùqõ>ïUö@Ò© € (7\ÿQýt?ú-ëZ[‰˜ ¹ÏË»v{cw_n·7ú›îsþ‰/8Çu¬jô6dëÿ“ÿF5b2;ßøø‡ëþŠ’OKÿUŸýpOýShÔÇþ誗ÄÀ}HÉR]Ã+Ä$JÞ[•¦plŠ}šµ è4ëc<äã;Ue»*ŽçÿÖxÓJú Òõhµ Ѧ·¸A“ê˜qó Éü8ÏQ—(Ù¡R=Ö·§¢ù—\‹tùþKìçŽqÈ羆¹éãi¹òEëò‹µÍ/²ÃýÏÔ×_´—rlP¹c»™P`yq¾òQ&ÚW…aÁål·Ù³ûcthÆ<ΣÌÝþÎ3Œü¿woðÐxuKưŠHîDò¼ Ón@‚YO.U™²Àƒ· cбi=åÔÐÂoð…ea-¹Gß/1@ 7ÝÓ¨4«§Î×Z}µÃ…,Jì@HŠž€ ( € ( € ( € ±¥ÇíÏýsù½WÙN¤€ (  ÝsýDõÐÿè·­in&`2ç?.íÙíÝ}¸ZÜ@ßêo¹Ïú$¼ãÖ±«ÐhÙ“¯üOýÕˆÈïãâ¬?ú6*H =/þAVõÁ?ôL ¡ÿSû¢ª_õ 0ÿ®_÷Oôªû >¤ Μڅ´B' 5¼¢h·}ÒÀƒìA<öëÏBâù]Àŵð­Ý¼ ©[D‘@…a‚ÞW n;‹3sÛ ÷ÈÅ7g`:eiŸaˆ”ˆCä¦yÚ¸ÀúàVrJI 9KÍR¸šæ8ìÉ×mÿ?ÿßbŽWØ.k¶ÿŸˆï±G+ìµÛÏÄ?÷Ø£•ö ‡Úí¿çâûìQÊûÃívßóñýö(å}‚áö»oùø‡þûr¾Ápû]·üüCÿ}Š9_`¸}®Ûþ~!ÿ¾Å¯°\>×mÿ?ÿßbŽWØ.k¶ÿŸˆï±G+ìµÛÏÄ?÷Ø£•ö ‡Úí¿çâûìQÊûÃívßóñýö(å}‚áö»oùø‡þûr¾ÁrÞ$rÝÝ4n®<¸ÆTç»Ói¤®µHP@ºçúˆ?ë¡ÿÑoZÒÜLÀeÎ~]Û³Ûºûpµ¸¿ÔßsŸôIyÆ;­cW Ñ³'_øŸú1«‘ÞÿÇÄ?XôlTz_ü‚¬ÿë‚è"˜Cþ¦?÷ET¾&ê@aÿ\¿îŸéUö@}Hµ è4ëc<äã;Ue»*ŽçÿÖxÓJú +é:¬7ÀÃåMo\}O»Õ}4ª@( € Í×?ÔAÿ]þ‹zÖ–âf.sòîÝžØÝ×Û…­Ä þ¦ûœÿ¢KÎ1Ýk½™:ÿÀäÿÑXŒŽ÷þ>!úÃÿ£b¤€ÓÒÿägÿ\ÿAÀšõ1ÿº*¥ñ0RúåÿtÿJ¯²ê@¡¬éͨ[D"p“[Ê&‹wÝ,>ÄÏn¼ô./•Ü [_ÚÝÛÀº•´IV-år㸳1Á'=º|ŒSvv Q¦™ö‰H„>Jg«Œ®g$¤š”¼Ðõ+‰®cŽÀ,“Ä!7M„ÚAÙ‚yÚxÇF2Hó©àêEÅ9.TÛë}oÖÿ×]‹rG[§Úý‹N¶´ß¿È‰cÝŒnÚÎ? ôˆ)ÞÿÇìßõÎ/ç%WÙ½HsZ!¶‹OŽH®ôä˜[¦|ˆšËÃa‰lœ0 'ŒP™/åóàYï~È$Y ÃbþåL.â0:ýã۸긆Úò_2Cwqö•ƒË&vÉäÄùÁ«q×åö4*^ê/csrîÐÄžQM¢-Év$‚FÝÌyç<öšiü7¨´ÓG6"”$‘¶àÃg÷‚¨<äp1Æ:ƒ@6²Xýš+skn÷ìw·¶ ”¹Æ <äpCÈ ï5˜£¸xîÒÏ o…>J*¹GÆ7sµ9$ƒ»ÜP‹yîãÔLs]”ÜùJ*¨O™‘ž¼rO§š¯~·&Û^1M Ä7nVˆ³Ü&pw ~F€q¨ß£Þ°¸…Z5›î(m­³fFp§,Äôä ›Qº¿¶¹X–ê"0êd!ÎKeBíbÀa~U!¹’A  Ê(´ì¢à‰dhÆÀcÃc-“œâ=8çõª[h!‹,‚éãóæ`0AùWf}}¿;+\YIµ¶ó ª»ä-Œ¤õÎG8ô¢Ú»bÔ“$’76Ò{®N>¼cš™n´†XÒ¿ãöçþ¹ÇüÞ«ì§R@P_ˆe´)beÀ ÔåV”ÚOQ3¬Ç9¶”äóò¯=xúsZóǸXÿ"ûÌÓ6rýàuô¬ªI;Xµ'_øŸú1«1‘ÞÿÇÄ?XôlTz_ü‚¬ÿë‚è"˜Cþ¦?÷ET¾&ê@aÿ\¿îŸéUö@}Hµ è4ëc<äã;Ue»*ŽçÿÖxÓJú +é:¬7ÀÃåMo¸œ’’hRóCÔ®&¹Ž;²O„ÜI4fif çiãuÉ#Χƒ©ä¹So­õ¿[ÿ]v-ÉnŸkö-:ÚÓ~ÿ"%v1»h8ü+Ò £o+Ir`o@ØæO_¥UÚŽ€Vò`ÿŸkûòŸáG4»€y0ϵ¿ýùOð£š]À<˜?çÚßþü§øQÍ.àLóíoÿ~Sü(æ—p&ùö·ÿ¿)þsK¸“üû[ÿß”ÿ 9¥ÜɃþ}­ÿïÊ…ÒîäÁÿ>Öÿ÷å?ÂŽiwò`ÿŸkûòŸáG4»€y0ϵ¿ýùOð£š]À<˜?çÚßþü§øQÍ.àLóíoÿ~Sü(æ—p&ùö·ÿ¿)þsK¸“üû[ÿß”ÿ 9¥ÜɃþ}­ÿïÊ…ÒîäÁÿ>Öÿ÷å?ÂŽiwò`ÿŸkûòŸáG4»€y0ϵ¿ýùOð£š]À<˜?çÚßþü§øQÍ.àLóíoÿ~Sü(æ—p-i*‰yr4AåÇÂ(QÕý(mµ¨• P@fk¿êìÿëäè-@èž¡þ¢ëþ¼åþi@äëÿ“ÿF5G{ÿýaÿѱR@iéò ³ÿ® ÿ Š`Mú˜ÿÝRø˜©‡ýrÿº¥WÙõ VÔ/ Ó­Œó“ŒíTQ–vìª;ŸÿYàM+耯¤ê°ß•5¼ñ¨&)Ô+ÇÌ0H#ùqž£.i§¨5 eMâ;u2J—+n£&!¶cç¦qÈ羆¹c‹¥)ò'©\®×5k¨“2÷þ?fÿ®q9*¾Èê@(I[¨ôØ®ß`&Ý\É5䎀NTŒ.FyǽK&¥y €ZÂç ]¡Œj¥FÖ׿ËsÏŒ´%­õÅÉósoHÑ££6âÅ•[‡Æ9ÇQž)Ýjw3[éË °Å-ÄqM'ÊI’08 0ãõz·m¨]Í}µ­ÂÚ´²D¬vŽWpÈ;²ÙÚxÚ1ž¼r©@P@Pviû`g¨¬víÇS×<öíU§-Ä2ÎIÌÃǽ@ç=†:ûý}\’躅cJÿÛŸúçóz¯²HP@šïú»?úùú Pz§¨¨ºÿ¯9šPù:ÿÀäÿÑ@ÞÿÇÄ?XôlTz_ü‚¬ÿë‚è"˜Cþ¦?÷ET¾&ê@aÿ\¿îŸéUö@}H59µ h„NkyDÑnû¥€#Ø‚yíמ…Åò»‹ká[»xR¶‰" ü®@Üwf8$ç·AnÎÀtÊ4Ó>Ã)‡ÉLóµqõÀ¬ä”“@r—š¥q5ÌqØ’x„&âI£0€»H;0O;Oã¨ÆIu<H¸§%Ê›}o­úßúë±nHëtû_±iÖÖ›÷ù,{±Û@Çá^‘;ßøý›þ¹Åüäªê@(´ZuŒ-º+xÛŽV%‚íêü(óYÛN¥f·†EfÞC  ¶1ž{ãŠV¶®ᡌ̃ !Q¸@z÷?1¬lØ8kXrKù‰ ’}r@ü…=m [†¸Xc0ÃHn#О½‡å@Ð@P@˜‹`dðM"FˆÌQKrÄ gëNí€ê@P/þ?nëœÍê¾Èu P@fk¿êìÿëäè-@覡þ¢ëþ¼åþi@¤ëÿ“ÿF5G{ÿýaÿѱR@iéò ³ÿ® ÿ Š`Mú˜ÿÝRø˜©‡ýrÿº¥WÙõ VÔ/ Ó­Œó“ŒíTQ–vìª;ŸÿYàM+耯¤ê°ß•5¼ñ¨&)Ô+ÇÌ0H#ùqž£.i§¨5 eMâ;u2J—+n£&!¶cç¦qÈ羆¹c‹¥)ò'©\®×5k¨“œ×ÑTÕ[¯QŸâjÞ—Â&gy1Ï$ÿ¾Eh òbÿžIÿ|НÅ•ÁA}ñ”- (nüã#§½ Ü |˜¿ç’ß"€&/ùäŸ÷È ¢Û»:ª!1¶Öùzüˆ¢à;É‹þy'ýò(òbÿžIÿ|Š<˜¿ç’ß"€&/ùäŸ÷È É‹þy'ýò(òbÿžIÿ|Š<˜¿ç’ß"€&/ùäŸ÷È É‹þy'ýò(òbÿžIÿ|Šd?eœ1‰cmŒQ°£†E Üň¥$6ç*§÷‘Ç^ž”š¸y­ÿ>ö?ø )rù±‡šßóïcÿ€¢Ž_6æ·üûØÿà(£—Í€y­ÿ>ö?ø (åó`kϽþŠ9|Øšßóïcÿ€¢Ž_6æ·üûØÿà(£—Í€y­ÿ>ö?ø (åó`kϽþñ£—͈ҽÿˆ~°ÿèØ«•iéò ³ÿ® ÿ Š`Mú˜ÿÝRø˜©‡ýrÿº¥WÙõ PÖtæÔ-¢8I­åE»î–Œb ç·^zÊî-¯„mníà]JÚ$Š+ ò¹qÜY˜à“žÝ¾F)»;Ð (ÓLû D¤B%3Îկ׳’RMÊ^hz•Ä×1Ç`I⛉&ŒÂí ìÁ<í!úÃÿ£b®4Q§¥ÿÈ*Ïþ¸'þ‚)4?êcÿtUKâ`>¤õËþéþ•_dÔ[P¾ƒN¶3ÎN3µQFYÛ²¨îýg€M4¯¢¾“ªÃ| >TÖóÆ ˜§P¬G0Á åÆzŒ¹¦ž hÔ•7ˆlíÔÉ*\­ºŒ™ü†ÙŒž™Ç#œzúåŽ.”§Èž¥r»\Õ®¢LMV—SmÆ^!Lái?‰ý:V°•¢"¯Ù#ÿ§Ïüz®wý0°}’?ú|ÿÀ7£ÿL,dþŸ?ð èçÓ Ù#ÿ§Ïüz9ßôÂÁöHÿéóÿÞŽwý0°}’?ú|ÿÀ7£ÿL,dþŸ?ð èçÓ Ù#ÿ§Ïüz9ßôÂÁöHÿéóÿÞŽwý0°}’?ú|ÿÀ7£ÿL,dþŸ?ð èçÓ Ù#ÿ§Ïüz9ßôÂÁöHÿéóÿÞŽwý0°}’?ú|ÿÀ7£ÿL,dþŸ?ð èçÓ Ù#ÿ§Ïüz9ßôÂÁöHÿéóÿÞŽwý0°}’?ú|ÿÀ7£ÿL,dþŸ?ð èçÓ Ù#ÿ§Ïüz9ßôÂÄ jÿju†9ÜRwBÊG-Ú©KMD;ì—?óï/ýðió.àd¹ÿŸyïƒG2îcM“€<®y»v¥x€ƒK`Ä‹ mÄù=òzuÈð^#º|©·m›®ÅÚ¸Œü£Ž8•ˆ‹š¿üLµnaù^ÞÉ"ðÀ™G õ•Gw ÑBýmôíIl–î)<Æ fPeByÃ9>Ç¿CÎ T'Ñ…‰¾Ésÿ>òÿß´æ]Äd¹ÿŸyïƒG2îëßøø‡ëþйFž—ÿ «?úàŸú¦Ðÿ©ýÑU/‰€ú×/û§úU}R gNmBÚ!„šÞQ4[¾é`Áö ž{uç¡q|®àbÚøFÖîÞÔ­¢H B°Áo+7Å™Ž 9íÐ{äb›³°²4ϰÄJD!òS<í\`}p+9%$Х懩\Msvdž! ¸’hÌ .ÒÌÎÓÆ8ê1’GOR.)Ér¦ß[ë~·þºì[’:Ý>×ìZuµ¦ýþDKìcvÐqøW¤AN÷þ?fÿ®q9*¾Èê@(5¸®ÝfŒÌƒ-q¸9#¯qùÐÙÕJ†` ('©Æp?*Z( € ( € ( €€ ((‘ÿ®¸ÿv?ýž«ì€ú ( €3eˆ\jWI1X. Tx”2´ ÏÍýßÞ¯N§Ž€‚ûi]nCÌÙy›ÉœãÜ~0­ÂíÇS@è ½ÿˆ~°ÿèØ© 4ô¿ùYÿ×ÿÐE0&‡ýL|LÔ€Ãþ¹Ý?Ò«ì€ú+jÐiÖÆyÉÆvª(Ë;vUÏÿ¬ð ¦•ô@WÒuXo‡ÊšÞxÔêˆãæ$ü¸ÏQ—4ÓÔ 2¦ñ º™%K•·Q“?Û1€sÓ8äs_C\±ÅÒ”ùÔ®WkšµÔI™{ÿ³×8¿œ•_d õ ¶Q¤ý… ˜ßÇ  B“iÜ ’zƒŸ›œs€ç/u­[Oå^‹xÞ0¤¬Š2V\½¹Ø qìyÝ € ( € ( € ­2©¸&Xš@Pð¹ÃdçøONxý*–Új VéÀi6´À“´cnÏ\z€? zX„8²Ž7‹?"… çøùqëýi;^àKn )FxåŸûþÿýnßLR`KHc#ÿ]?û±ÿìõ_dÔ€PV‹?,Yl™UÄ›Ô}¨†RÜón¹|}ïs€n4‰n#œ-§—†q ”جaFÛË+7p€k/+VXˆšÛ´vêT.ÜB8S…?6N9É대0é:†9,ÛyÁ2|°w]Þ[˜`÷àО‘`–±´†’Bù‚=ê¼|¿ A8랤З¿ññÖý$ž—ÿ «?úàŸú¦Ðÿ©ýÑU/‰€ú×/û§úU}R gNmBÚ!„šÞQ4[¾é`Áö ž{uç¡q|®àbÚøFÖîÞÔ­¢H B°Áo+7Å™Ž 9íÐ{äb›³°²4ϰÄJD!òS<í\`}p+9%$Х懩\Msvdž! ¸’hÌ .ÒÌÎÓÆ8ê1’GOR.)Ér¦ß[ë~·þºì[’:Ý>×ìZuµ¦ýþDKìcvÐqøW¤AN÷þ?fÿ®q9*¾Èê@( € ( € ( € ( € ( €úéÿÝÿgªû >¤€ ( € ( ½ÿˆ~°ÿèØ© 4ô¿ùYÿ×ÿÐE0&‡ýL|LÔ€Ãþ¹Ý?Ò«ì€ú+jÐiÖÆyÉÆvª(Ë;vUÏÿ¬ð ¦•ô@WÒuXo‡ÊšÞxÔêˆãæ$ü¸ÏQ—4ÓÔ 2¦ñ º™%K•·Q“?Û1€sÓ8äs_C\±ÅÒ”ùÔ®WkšµÔI™{ÿ³×8¿œ•_d õ NבEÁ…É—zÌdÁ Œîe#…#ÜžF@çÕlÕAy `^'V$‚FŒó´ãŽHÀçŠxÔ-LRÈ%ùbÍ“å9Uù‡#×*Üu  4P@P@Po0GÚÜ–Ú>èõ÷èzfšB½7ìÜ7ã;sÎ=ij1X¤¤ˆÀœ 0<õÅ6šÀ‚2<ãŠ@Èÿ×Oþìû=WÙõ E5kV1côÞwŒy|1Ãz‘óé´çd‡Y·[ˆ!‘$‰æ &Õ ·A´Ç’@ óÁÀ›´¾µKˆã‘#p ùƒŒœ~Ÿ‡` P@%ïü|Cõ‡ÿFÅI§¥ÿÈ*Ïþ¸'þ‚)4?êcÿtUKâ`>¤õËþéþ•_dÔCYÓ›P¶ˆDá&·”MïºX0}ˆ'žÝyè\_+¸¶¾µ»·u+h’(¬0[Êä Çqfc‚N{tù¦ìì@,£M3ì1‘|”Ï;W\ ÎII4)y¡êW\Ç€Y'ˆBn$š3 ´ƒ³ó´ñŽ:Œd‘çSÁÔ‹Šr\©·Öúß­ÿ®»䎷Oµûmi¿‘ǻݴœ~éS½ÿÙ¿ëœ_ÎJ¯²z ¡ýœæÙ¬ÍÆ,¼³¢§ÎŒ`±' ÇàdžrúuÛÝAq硜H7:GµUU$ÆT’NKààô‚¡»»€´ dë§ÿv?ýž«ì€ú ¦ú]´žnåÿY ð8ÇUt?6G}íêh›MŽiŒ†Y”RŠÀ+:‘‚xÏEÇ|gš±mÚÚÃn„”‰)n¸%P@ {ÿýaÿѱR@iéò ³ÿ® ÿ Š`Mú˜ÿÝRø˜©‡ýrÿº¥WÙõ VÔ/ Ó­Œó“ŒíTQ–vìª;ŸÿYàM+耯¤ê°ß•5¼ñ¨&)Ô+ÇÌ0H#ùqž£.i§¨5 eMâ;u2J—+n£&!¶cç¦qÈ羆¹c‹¥)ò'©\®×5k¨“2÷þ?fÿ®q9*¾Èê@( € ( € ( € ( € ( €%¸ºb•##'te³ËûŠ¥n]DYþ̹ÿŸ¨¿ïÁÿâ¨÷FÙ—?óõýø?üUèöeÏüýEÿ~ÿGºý™sÿ?q߃ÿÅQî€f\ÿÏÔ_÷àÿñT{ U¿‚æÍa>|/æH#ÿTF8'?{ÚtöÜÿÏXïÑÿâ©h"‰n`ŽVß yp¼¸òÈÎÜq÷½è÷FX1ܯü¶‡«õG³ýïj=ѽÿˆ~°ÿèØªPÍ=/þAVõÁ?ôL ¡ÿSû¢ª_õ 0ÿ®_÷Oôªû >¤ Μڅ´B' 5¼¢h·}ÒÀƒìA<öëÏBâù]Àŵð­Ý¼ ©[D‘@…a‚ÞW n;‹3sÛ ÷ÈÅ7g`:eiŸaˆ”ˆCä¦yÚ¸ÀúàVrJI 9KÍR¸šæ8ìɤõËþéþ•_dÔ[P¾ƒN¶3ÎN3µQFYÛ²¨îýg€M4¯¢¾“ªÃ| >TÖóÆ ˜§P¬G0Á åÆzŒ¹¦ž hÔRßP†dì‘+¹p€!yŽãŒuàœ ph uf^ÿÇìßõÎ/ç%WÙ½H&ݸÆ1@QÁEǦ(J)ÎTs׎´ 0 € ( € ( € sžôÒˆNJ.}q@ F0 c§(UUU{ Z±¥ÇíÏýsù½WÙN¤€ (  Íwý]Ÿý|ý¨½SÔ?Ô]ל¿Í(üàrèÆ ïãâ¬?ú6*H =/þAVõÁ?ôL ¡ÿSû¢ª_õ 0ÿ®_÷Oôªû >¤ Μڅ´B' 5¼¢h·}ÒÀƒìA<öëÏBâù]Àŵð­Ý¼ ©[D‘@…a‚ÞW n;‹3sÛ ÷ÈÅ7g`:[kxí-¢·„H9ÀTBÒK´’y$¶±b]#T¶8Á8Ü0ª7g’ü…Á ¬’Ñ'ý_Óê:ÈfUüh÷ò— q`죬ž„U^Ñ[ɇþy·ýþ“ÿŠ£™Œ<˜ç›ßé?øª9˜“üóoûý'ÿG3òaÿžmÿ¤ÿâ¨æ`L?óÍ¿ïôŸüUÌɇþy·ýþ“ÿŠ£™€y0ÿÏ6ÿ¿ÒñTs0&ùæß÷úOþ*ŽfäÃÿ<ÛþÿIÿÅQÌÀ<˜ç›ßé?øª9˜“üóoûý'ÿG3òaÿžmÿ¤ÿâ¨æ`L?óÍ¿ïôŸüUÌɇþy·ýþ“ÿŠ£™€y0ÿÏ6ÿ¿ÒñTs0&ùæß÷úOþ*ŽfäÃÿ<ÛþÿIÿÅQÌÀ<˜ç›ßé?øª9˜“üóoûý'ÿG3òaÿžmÿ¤ÿâ¨æ`ZÒURòä yqõfnïêM Ý©R@Pf»þ®Ïþ¾Gþ‚Ô^€)êê.¿ëÎ_æ”~N¿ð9?ôcPw¿ññÖý$ž—ÿ «?úàŸú¦Ðÿ©ýÑU/‰€ú×/û§úU}RmBú :ØÏ98ÎÕEgnÊ£¹ÿõž4Ò¾ˆ úN« ð0ùS[Ï‚bB±|Â?—ê2æšz£RK­JÖÎöÖÒáöIu¸DOBF8Ï©ÏãŒÜ`䜗@¹n  Ëßøý›þ¹Åüäªû W©  ‰'»mMM.Š—¶i–ŠU>BF3‘Ç$yàd`IµIaÞk‰ÆÒ©¼¶U·c;A9ù!C}q’#]jI#’TµTy³n« 3© ¥yÿVzííœPçÖ Í{bm·ÊÕÆï݇-•÷(qÏN¸è@,i÷²]ù‚[g…“•p­œô,ªsǤ Μڅ´B' 5¼¢h·}ÒÀƒìA<öëÏBâù]Àŵð­Ý¼ ©[D‘@…a‚ÞW n;‹3sÛ ÷ÈÅ7g`:[kxí-¢·„H9ÀT…âɯÞéÈ_˶‡Ì38냷SƒÏAúŠ5•%.âjçAãTRÄ(nbÇñ'“õ5ÎÝÆfÞÿÇìßõÎ/ç%WÙ½HT“M´È^2Dƒ.öÛó œry<ŸS@šÊÞwg‘òoW*ÃÆ9yºz‘@ M2Î8e†8G*ÝT ’ÇÓ—nž¿J¯ý¯}çÎaxÃ3,b2>ð ƒ–#1ÎÉÁ4vÚÖ+mÆ0å›iŽ: ±'ž=Ï­"Ù[¥Çœ¨wä7±POR8äòy>¦€Ú}«A &/Ý»n?w´óÈ8 àf€™iŒ¤eDaB¨vÛò€+œ099<A@Åo1C`ªBE x`ëÇ­,q,xÚXáBüÎ[õ=yëÔ÷ Ð@P@cJÿÛŸúçóz¯²HP@šïú»?úùú Pz§¨¨ºÿ¯9šPù:ÿÀäÿÑ@ÞÿÇÄ?XôlTz_ü‚¬ÿë‚è"˜Cþ¦?÷ET¾&ê@aÿ\¿îŸéUö@}Hµ è4ëc<äã;Ue»*ŽçÿÖxÓJú +é:¬7ÀÃåMo§<Ž3qƒ’r]庀2¯Óuü§Ì‘Š>o<Éê Uí+yCþ{ÜßIÿÄQuØÊóÞãþúOþ"‹®ÀPÿž÷÷Òñ]vò‡ü÷¹ÿ¾“ÿˆ¢ë°”?ç½ÏýôŸüE]€<¡ÿ=îï¤ÿâ(ºìåùïsÿ}'ÿE×`(Ï{Ÿûé?øŠ.»yCþ{ÜßIÿÄQuØÊóÞãþúOþ"‹®ÀPÿž÷?÷Òñ]vò‡ü÷¹ÿ¾“ÿˆ¢ë°”?ç½ÇýôŸüE]€<¡ÿ=î?ï¤ÿâ(ºìåùïqÿ}'ÿE×`(Ï{ûé?øŠ.»yCþ{ÜßIÿÄQuØÊóÞãþúOþ"‹®ÀPÿž÷÷Òñ]vò‡ü÷¸ÿ¾“ÿˆ¢ë°´• yr»~î>\Œõ@({©R@Pf»þ®Ïþ¾Gþ‚Ô^€)êê.¿ëÎ_æ”~N¿ð9?ôcPw¿ññÖý$ž—ÿ «?úàŸú¦Ðÿ©ýÑU/‰€ú×/û§úU}R gNmBÚ!„šÞQ4[¾é`Áö ž{uç¡q|®àbÚøFÖîÞÔ­¢H B°Áo+7Å™Ž 9íÐ{äb›³°-µ¼v–Ñ[ÂŽ$€œà€*Âñ?‡ä×ïtä/åÛCæœuÁÛ€©Áç ýEÊ’—q5s qª)b71cø“Éúšçnã3oãöoúçó’«ì^¤€2mµ)¢³¶»¿xLWïÌQ²˜þBç<œŒÈÇAÁÏ5ûi62¨®|ì²¾Ôòݲ ?ƒ§_nEë±ÜÜÛEm }òì“mXƒ•b?„ûáOŒ€X°Ö-5 š(-·züÊw.zàGQÃ`óÓƒ€ ôP@P@ ³˜å`PÑC»g{wéëT•Љ<Ôó|¼üÿN3éŸ_jVv¸Èã¹’"ß)‘Cc®3Ó'üæ‡!#»‰£ÜÙO™—•=Ž3Ó§¿jn, êFXÒ¿ãöçþ¹ÇüÞ«ì§R@Pf»þ®Ïþ¾Gþ‚Ô^€)êê.¿ëÎ_æ”~N¿ð9?ôcPw¿ññÖý$ž—ÿ «?úàŸú¦Ðÿ©ýÑU/‰€ú×/û§úU}RmBú :ØÏ98ÎÕEgnÊ£¹ÿõž4Ò¾ˆ úN« ð0ùS[Ï‚bB±|Â?—ê2æšz£RK­JÖÎöÖÒáöIu¸DOBF8Ï©ÏãŒÜ`䜗@¹n  Ëßøý›þ¹Åüäªû W©  饰·šY®bHü¤YJ€ŠFÓ sŽ2y뎧 ú\s [©ç¸Á9ÞÀdeÆÑÏ#žœð(ßÙùxžK»™$ŠA"³ìÆcÛ>ü }¥´Â¬ÓÚâcÔíáH­Ô¤0[Êä œ–,pIÏnƒß#˜’ÚÞ;Kh­áG@NpÀ axŸÃòk÷ºròí¡ó Î:àíÀÔàóÐ~‡¢eIK¸š¹ÐF‚8Õ± ˜±üIäýMs·q™·¿ñû7ýs‹ùÉUö@¯R@P@P@P@P@cJÿÛŸúçóz¯²HP@šïú»?úùú Pz§¨¨ºÿ¯9šPù:ÿÀäÿÑ@ÞÿÇÄ?XôlTz_ü‚¬ÿë‚è"˜Cþ¦?÷ET¾&ê@Ǻñ´æ%‚æt‹),° dŒädrqŽp§\еâ¼r$±¬‘ºº8 ¬§ ƒÐƒP>«ysn“¼S²²É±jíû¹ã>½éÆ.RQF5ë*0çh©§kW3%´çÌš)#r6l ÇFqôNêN,ÒæW:J bÏ\=¸oÞ¢+²àðþ:*ϽÿÙ¿ëœ_ÎJ¯²z å¬!–ÊÎÖâ8­Ä†ÈË †­+„ûŽsóg9Àä•'¼€Z·º¼žHaèÉ$Á|Ø%#äv#w–øWŒ3ÏQ@^ê·@γР0 çlv^›Nî ·Îp~PÍy|žlßk;cK©1àùR ñ“ÔçqŽù$Å¥åÜš³G$ÐíóLòʃ;[h\®p§%ˆ9㨠 Qq‰£ … ††8Søžž´%P@P@P@4¯øý¹ÿ®qÿ7ªû iÔ€P@™®ÿ«³ÿ¯‘ÿ µW  z‡ú‹¯úó—ù¥_“¯üOýÔïü|Cõ‡ÿFÅI§¥ÿÈ*Ïþ¸'þ‚)4?êcÿtUKâ`>¤fΚ¡’Ùm¤WyeI'v “‡Â¨Ãuã$zqŒ›RÓÐEýÃ:f‹7e¬Æ?-œ’ÃŽ£§P©¿ÌÍ~id¼–ÎÈ2“|a£aå g¾CãŒçŒàáy›g6¢óYFÉ´‰à ¯$ÌFxUçOlwž·¼  Å»\Eú?Ú¡Ž]Ó[ü¿½]¬Ã§ U¹?Þ P\ú<’¥ì©eåH,‚ÙÇæ†ò¤ )\s…eܘ#…É q@E^êrᤑ_ ä0%özôÀç¡”-Sø@’¤€ ( € ( € ( € ( € (Æ—ÿ·?õÎ?æõ_d : ( €35ßõvõò?ô  ôSPÿQuÿ^rÿ4  ÒuÿÉÿ£€#½ÿˆ~°ÿèØ© 4ô¿ùYÿ×ÿÐE0&‡ýL|LÔuâ h/ÌKÌéRYa@ÉÈÈ<äãàN¹j-Ä xäIcY#utpYNA¡ w\‚×¼0I.ÿ-<È#nˆ$©=Ïzq‹””QzÊŒ9Ú)iR[7Ùn—O‚Di#Fu†ªåº‚ ‚Aïß¿!=$âÍ!.es° ¡Â2.p0¤ö'œtéÔÿZZƸkk»¹¥TŽ`ª±åã<ŠÃ‘ê¿¥UÚŽ‚"ò`ÿŸkûòŸáG4»Œ<˜?çÚßþü§øQÍ.àLóíoÿ~Sü(æ—p&ùö·ÿ¿)þsK¸“üû[ÿß”ÿ 9¥ÜɃþ}­ÿïÊ…ÒîäÁÿ>Öÿ÷å?ÂŽiwò`ÿŸkûòŸáG4»€y0ϵ¿ýùOð£š]À<˜?çÚßþü§øQÍ.àLóíoÿ~Sü(æ—p&ùö·ÿ¿)þsK¸“üû[ÿß”ÿ 9¥ÜɃþ}­ÿïÊ…ÒîäÁÿ>Öÿ÷å?ÂŽiwò`ÿŸkûòŸáG4»€y0ϵ¿ýùOð£š]À<˜?çÚßþü§øQÍ.àLóíoÿ~Sü(æ—p&ùö·ÿ¿)þsK¸´•D¼¹  òãá(êþ”6ÚÔ J ( €(ꊭö`Êyà þíûP#Þèñ»$’éŠêHea ú.ü“kpð$!ÆR%Pe0xë@2uÿÉÿ£€#½ÿˆ~°ÿèØ© 4ô¿ùYÿ×ÿÐE0&‡ýL|LÔÌÏáùÓT2[-´Šï,©$îÁ¡2pøUn¼dN1“jZz¿£øgLÑfó¬£u˜Çå³³’XqÔtêã7ò™¯Í,—’Ù™BÒoŒ4l<¡Œ÷È`¼qœñœ.·6Ê]A沌!†Ò7ƒr0I˜ŒýÕÁÀSÛÝÉàëp;ÊÈñ5Åý‚Ek˜ãÍÈÜX$Q×ý¦QøÐ{­ ÅxEµ„o§-ÞÒ0вœJå$)9h8û£©Pz}´ÖË ÂlÛ|Ã' ,Ä|Ç“Áž}yª*@(ßPwÕw–›ìÒ³F™‚…ØÛ±·‡Á“½µ.MŤ…áÿH·‘©?'™$j»—<ãqçŒò0(CJšYžûÍ‘$hî6e•DÎ=9ÏŽy=hýP@P@P@ƒ __\jZ•¼È^ÖäÌOÝ;¾ç¿û~"€:m/þ?nëœÍê¾Èu P@QÕP[3°U6I8÷o@Íßj^Îð™ï"í“Ópïþ±È  w“E,^Tˆø³—;Xr”£'_øŸú1¨;ßøø‡ëþŠ’©6VšdW[$i3»Ä§øG¶I&˜ Òî-u;îÒÊI mV…3€ÄsǵWD`Œù1cËRIŒáϧ&» ª æ†?ºuãîòx ª æ†?ºuãîòx ª æ†?ºuãîòx ª æ†?ºuãîòx ª æ†?ºuãîòx ª æ†?ºuãîòx ª æ†?ºuãîòx  zx n@EOõ*ŒcïõàsXÕè4Z¬FÁ B%ˆFžZcjíéí@ vÃ~-áfíÿ ù·cv}sŸ\Pâ†(Wl1¤kÇ  ô~ú( € ( € ( € (¨‹Â(Q’p9'$þt^Khn/_ÎŒ>ØÓíËSû"ìë?ù÷OÊÃû:Ïþ}Óò û:Ïþ}Óò líc¸‡m¼XbÀ†@ÀüŒ{û@µ COÓníaº¶¶D¹Ü†Â‘޼t9ëÛõ6¤w‘ˆâŠ0crvF«žWÐ{ÐôSPÿQuÿ^rÿ4  ÒuÿÉÿ£€#½ÿˆ~°ÿèØ© )Èln4èí®žF‚5twøGåLôµ³Ó,#´Žò7HËmfqœ'ŸÎ€+ áò¢d{„j3¸|¿.?:êæ]É4=¤Œrqó/yéך9—p4=¤Œrqó/yéך9—p4=¤Œrqó/yéך9—p4=¤Œrqó/yéך9—p4=¤Œrqó/yéך9—p4=¤Œrqó/yéך9—p4=¤Œrqó/yéך9—p.i«Æá±¸.ÀHÀr\󴌚Τ¶°Ñoɇþy·ýþ“ÿЬù˜Ãɇþy·ýþ“ÿŠ£™€y0ÿÏ6ÿ¿ÒñTs0&ùæß÷úOþ*ŽfäÃÿ<ÛþÿIÿÅQÌÀ<˜ç›ßé?øª9˜“üóoûý'ÿG3òaÿžmÿ¤ÿâ¨æ`L?óÍ¿ïôŸüUÌɇþy·ýþ“ÿŠ£™€y0ÿÏ6ÿ¿ÒñTs0&ùæß÷úOþ*ŽfäÃÿ<ÛþÿIÿÅQÌÀ<˜ç›ßé?øª9˜“üóoûý'ÿG3òaÿžmÿ¤ÿâ¨æ`L?óÍ¿ïôŸüUÌɇþy·ýþ“ÿŠ£™€y0ÿÏ6ÿ¿ÒñTs0&ùæß÷úOþ*Žfà·¼3¬@Ƙß!9忼M Ý!ûe¯üüÃÿ}Š‘‡Û-çæûìPöË_ùù‡þûÖ»¶óà?h‹›?8ãäaüÍRÔ-4ÝJîÒk›ˆ]-·q†'}†:wþ`šîÛí‘7Ú"ÀÁ;Ç\­KöË_ùù‡þû^òh¥‚ïÊ‘rçkŽR€4¤ëÿ“ÿF5G{ÿýaÿѱR@W†i…¤2˨ÍdSÉ@2GN”Òo`%V±·Q¸<ÁN‡¡é@ þ“ÿ?÷?šÿ… nA]Bà‚2+Ïé@ ’Y"Ç™©Ì™é¹gô¦“{õ7 ]Bà‚2+ÏéHý'þî5ÿ ?Òçþçó_ð 7 ý¡q’2Wü(?hU%µ €É$¯¥$šIËLóeb!˜ŽŸ?§j§°‰*F“ÄöîZöy–@¬Í¢Ÿ“å¿èp³€r;€[ë #ìšØÄUÑ\üà(|…?2©?0¦9Îzà®6Sʳ’PÉæüؘÉ!HÚ§’8m½@Ï\[ÕnÅ¥²“*BÒH±‡r\Ÿ˜äñ¡ˆÏp:ô  ëªÈtËk¥Ž9 ƒ>â#F7 7Ÿ»œôÈڣ̺D÷É%´±DÒ€“¤í9~_Cs¨Éa*Û§¼tA#¾ÂX‚N˜ÏÊzí9ë€>³23Ÿ±&133y+mb£õŽsìHo5y’ÊæEƒÊÏŠ)7†;Ð9ÎÜtù^sÆ1Í3RÖæ†;”‚ ¬EŠ\±•I$»…¸ÜN@pgûVA|-¾Èíµ–9Y¶Ö ݸ†I õã¦@4è € ( € ýçÛdòî$‡÷i˜ç–õŸÙ'úOüÿÜþkþ†é?óÿsù¯øPþ“ÿ?÷?šÿ…é?óÿsù¯øPþ“ÿ?÷?šÿ…é?óÿsù¯øPþ“ÿ?÷?šÿ…W¾iÅ¥Ür\Ë*IGm€õ4zN¿ð9?ôcPw¿ññÖý$8¾[;WÕ„@TÝØpG\p?.¢®"²C#²¬‘»„åAÇß98è8çÔûÕ][úì’y‹¾ %;¤M¤Â| óø~ô•·8ÕÖÞØ<@6áº÷úÀ¸éïMîÀžäqn•F£MÝ׎‡Óô©ŽÀ/Íæ)S‰%»{ã×ßíQÐ  \îÆe±¸àü§rç“ÇBzò¿tq4H6™†ç üÄŸõ€.3ìOÖ’³þ¼€WY‹“` °$…Êg¯?Þ÷ô¡[¯õ¸ãM¸ÜÌÃcm,¤qrO¯_åKí ,DÙžè`¢!’:ýóÇçIü( *FQ4ËD?êË.»³"‚1€¤àq‘ÀèqÒ€Ó-'A?hO.RÎÌÎ9êIÏr3×A@\Y[ܸyP“Œ9PãÑ€8a׃‘Éõ4!… Ë1_Þ"•Sž€àŸý~T º}¼¬ÎUÕÙ·ŽFFÎê8¯8+ÛÄö­lcO,¢ð6ãã§Ë‹+{—*qƒ‡*z0 :ðr9>¦€Ú}«##E•e‘ÌzHrýûŸþµCj©(•<Ã+H[’ÞNxÎ3†Û»®=¸ Í¥YLìÒC¸¶ïâl À†ÀÏçO=hãO¶óVM®Jãƒ#Ät,3†#““Àô) ‘™0C$a÷ŽOËÓ¶(J( € (ÿÙëš6ªû MR@P@TÔ?Ô]ל¿Í(ôàrèÆ ïãâ¬?ú6*H öÛv$0ßÂûˆ²p8ìôÀ›d¿óòŸøøº<¹çå?ðÿñtyrÿÏÊà9ÿâèòåÿŸ”ÿÀsÿÅв_ùùOü?ü]\¿óòŸøøºCŒ0nŒç›þ΀Ë—þ~SÿÏÿ@ÑHÊU®ƒÁ߯þ?@ Š%™LîR0H¨?±ÝÓðëW}?ÊóÞãþúOþ"•×a‡”?ç½ÇýôŸüE]€<¡ÿ=î?ï¤ÿâ(ºìåùïqÿ}'ÿE×`(Ï{Ÿûé?øŠ.»yCþ{ÜÿßIÿÄQuØÊóÞçþúOþ"‹®ÀPÿž÷÷Òñ]vò‡ü÷¹ÿ¾“ÿˆ¢ë°”?ç½ÏýôŸüE]€<¡ÿ=îï¤ÿâ(ºìåùïsÿ}'ÿE×`(Ï{ûé?øŠ.»yCþ{ÜÿßIÿÄQuØÊóÞãþúOþ"‹®ÀPÿž÷÷Òñ]vò‡ü÷¸ÿ¾“ÿˆ¢ë°”?ç½ÇýôŸüE]€<¡ÿ=î?ï¤ÿâ(ºìåùïqÿ}'ÿE×`"XÛí’‡îÓ™9<·¦ÜPÞˆD¾\¿óòŸøøº‘‡—/üü§þŸþ.€._ùùOü?ü]\¿óòŸøøº<¹çå?ðÿñtyrÿÏÊà9ÿâèòåÿŸ”ÿÀsÿÅÐ{èÊØÝÈó?f‘mëƒýãýÚ½'_øŸú1¨;ßøø‡ëþŠ’£þ>ÿíƒÿèILÐ@P@P#ÿ]qþìû=WÙõ B ù·Üý®aŽÝ‚IYÉb€Ñœî×Ü‘L È Fí@ @P@P#ÿ]?û±ÿìõ_dÔ€P9,7­Ïïpf™&S·î²„Æ}FPzuǽDºté1ºK˜ÅÓÞÆ"P‚p»²?Õ¯sßÔ`!¢ùvþL3!PÊTMí¸PA0ÛÀާކ€5QJƪ\¹›>çPÐ@P@P@P ;H·°¸¹¹Q¾âæFvŽ@';G·óü€²¿ñû/ýsOæÕ_d ª@( € ()­Òr¾am«œ(lsÙ¸ç#·¡ç¨TÖ†Ýe,ÌB(,ØÉ9œ(NN¿ð9?ôcPw¿ññÖý$Kïõ«ÿ\ÛÿBJ`T7Åü|´q¢÷ …ÜŽ”ï>çh?h;¢b:pAÔAé@Ÿsÿ?/ÿ|¯øPçÜÿÏËÿß+þy÷?óòÿ÷Êÿ…'Ÿqÿ?/ÿ|¯øPù÷?óòÿ÷Êÿ…'Ÿqÿ?/ÿ|¯øPù÷?óòÿ÷Êÿ…X°3H×§òZ=ÇøñÐz­9uodŸóðŸ÷àÿñt´l“þ~þüþ.6Iÿ? ÿ~ÿGº Ù'üü'ýø?ü] 6Iÿ? ÿ~ÿGº Ù'üü'ýø?ü] 6Iÿ? ÿ~ÿF€$ÿŸ„ÿ¿ÿ‹£@ ’ÏÂ߃ÿÅÑ É?çá?ïÁÿâèÐdŸóðŸ÷àÿñth²OùøOûðøº4Ù'üü'ýø?ü]l“þ~þüþ.6Iÿ? ÿ~ÿF€$ÿŸ„ÿ¿ÿ‹£@ ’ÏÂ߃ÿÅÑ É?çá?ïÁÿâèÐdŸóðŸ÷àÿñth²OùøOûðøº4¿•#^IþÀˆÓ”@½Û±ÝMÚÊÂäIÿ?S~IÿÄÔŒ<‰?çêoÉ?øš<‰?çêoÉ?øš<‰?çêoÉ?øš<‰?çêoÉ?øš<‰?çêoÉ?øš_"Oùú›òOþ&€+jvÌÚuÈ{‰XË`…ç=…iI×þ'þŒjŽ÷þ>!úÃÿ£b¤€©}þµë›èIL ²Å{ Ò"Égv×8¸Áü9Á<÷•7d»ÁÌÒ #w2g¡l`ØKùˆ6ôã«uÉù}¨ ½»hÙžhùU2mÆ °#hÛ€[†'§±  ¡pÚ³ Ó2äT8Pîdîû€>ây ![aB(¹ï´Œ‘׿õ€*ÙËptð-ç."±WEU Kã†Ç^¾@:MhçK—…îc—~ÿCßðªê@(Ë\-SO$7 ñ«8µBL,̪†NIÜ}Êx=€4¢‚]Ê¡•$s·»c yÉ?2òõë@®¹köapñÍo’3 ¼d9ã”dàsqÍ$:ÜÞ¦‘·|‘ìlÛX6ÞŒsŽÝx a×Q-!šív4Äû>U›wF-Œa ç‰8Z¶u€Ä’IçFͧ$69ù±ƒ÷7t÷Ñ € ( € ( € (ÿÙëš6ªû MR@P@VÔäuÿ\_ù¹'_øŸú1¨;ßøø‡ëþŠ’%‰eM­õu˜Ò[ήBÂXz©PÓ'?ç¿ZO*ëb§ÙäÚ½åÿ ú;RJÀ7ȸÿŸgÿ¾—üi€yóìÿ÷Òÿ5í&“nûW!X0—;ÿ“@ò.?çÙÿï¥ÿ<‹ùöû鯀"ãþ}Ÿþú_ñ ȸÿŸgÿ¾—üh朎Ÿi!Cû¾ ûþ•_d U XXĶ0Z./iÈÉØAÿ¾E#éñÉpe2Hdx†6»®0Oãjô qÓ®@*ÚhË”O4$Q*) ‘I+‘Ï̪~lŽ1€8  pÙæIžie•U—s‘Èb½€}ÑÓûœÐx´x¢HÂ\N$‰#“+¹Bî¶:;GO~hY4á*"5ÍÆÑãp;ðsžGÊsÝvãŒt¹@P@P@P+ÿ²ÿ×4þmUö@𤀠( € ¯¨ÿÈ6ëþ¸¿ò4nN¿ð9?ôcP/%rf@èai~IhÀpsÎ) *ì´ÿ _þSÿLe§ýÿòœøŠ6ZÐ/ÿ)Çÿˆ e§ýÿòœøŠ6ZÐ/ÿ)Çÿˆ e§ýÿòœøŠ6ZÐ/ÿ)Çÿˆ e§ýÿòœøŠ6ZÐ/ÿ)Çÿˆ e§ýÿòœøŠA˜™Í­¼«…Ü¢Â@23Ïzþ”ÓV³y·?Ý—ÿf£A‡›sýÙðj4ón»/þKF‚6çû²ÿà ´ýч›sýÙðZ=Ð6çû²ÿà ´{ mÏ÷eÿÀh÷@<ÛŸîËÿ€2Ñî€y·?Ý—ÿ%£@6çû²ÿà ´{ mÏ÷eÿÀh÷@<ÛŸîËÿ€ÒÐ͹þì¿ø-?t͹þì¿ø-è›sýÙðZ=Ð6çû²ÿà ´{ mÏ÷eÿÀh÷@<ÛŸîËÿ€2Ñî€y·?Ý—ÿe£Ýón»/þËGºB+ÊÒ\Ú¼ä¨Q»Os·õ×ô¤Þ–@?e§ýÿòœøŠ@-?èÿ”ãÿÄP²ÓþùN?üE-?èÿ”ãÿÄP²ÓþùN?üE-?èÿ”ãÿÄP²ÓþùN?üE#‹(ÑôШ£,ÇO ë÷(çͱwýíÏŸ®ö ÞÿÇÄ?XôlTà ²XÂímÄÇ÷ Äü žÙ&˜ Ý-£WXí™X&ݶÀ–ÜHP'*Üuâ•Êä•ùlMw)i3-µ¸eˆ>Bpqô¦INå#[‰u2ÉÖ0½¨¹–l. q¼±&ãû¸ÎqŒô¦“nȨ‘E×Eu>RòÈ== 4ìÀㆶðBìvrÑ)ÿ–QžãÜÒñýŽERZüÎȹFYI G8Úß‘ ,V®»’ÞÕ†HÈ… àöõ~°cìÉ…UœaT(áØt’¢I=ºÈŠë½ŽÖõlzmÇØ­ i§‚Õ#A–c ñúR½‡äì‡ùÿóëmÿ~ü)ˆDHÒç I˜Xü‘ªŸ¼žƒÜД_÷[Æòª€@çnyÅ3í^‹ÿ~ÏøPȆKwxÕq´àíÅX Š+LÛ”(ê>´ÙÖ3†TÏ \​‹”D#è(ˆi€nƒè(J( € ( € ( € ( €+ê?ò ºÿ®/ü[“¯üOýÔïü|Cõ‡ÿFÅIȉ[)b-ã!F2~AÇ4À÷²¼‹^ŸPò`yÙ#2@˜C—k“‚Ãg'€w7=ÌYît9Å®Küÿ®†ÕïüxÜ×6þUg9Nëþ>$ÿ®²èÆ  éa3éºz"1»È•XÔàï!@Èsô=*á?fù­q¨óir]=U4¸B™p]Ú5•JÆNT|¼KàuéŒQ:žÑóZÔ9®lXÿÇšÿÀ?ôLu˜—yCªM1û=¬ò1Œu$\¹pz’¹é÷Ï9WÍe`JîÈ»áë1kfÒG:Í á {•F3Î9è§÷@<JÂQåºfŒñìŸïIÿ£¨`ßñóoþóÿè·  ©¼¸/æ‹]Mç³Z¨Æ$¦Xú0sÑG=OÔèÜRZw~Wþ½M¶o7{^Ý»>Xò‚ã=>æqÛ®}êÎrAÿöÁÿô$ Ð;øö·úýÐ|y=GøP›øò“þ@èƒýsº?­d¸f$¾A?‡?çüúZ³%nŽ…p§õ  ‰÷äÿ{ú }P@P@P@P@µùÝ×þF€.I×þ'þŒjŽ÷þ>!úÃÿ£b¤€‚+«t¶·Wž%a yÀÇÊ)Vm F]B6nd-æ Rb{Ÿñ9šòêݬçU¸ˆ“Žx  zšÛÌóÁpQ‘¤2±ÿ¦@ã¶±KH-ÂAÚŽ¿;z¶A'Èì@&®\&àî‹Fh:‰ÝØ’Y¥‘XŸÈ d·~…ød·";‡ˆ+…d# <˜óÁ EK[ÒÆk8ÌLÌL¤·tøÞåÆpAÆ~¿A…n¥9·ˆi+(”E§ù¡·ù†8ËnÎsœg9¦I<3E5Ùò¤GÄ ¬>d  ¨«¦¶UR £Ò€"û,8ÿ…ý(UÅlè%VÈ'¨  TuI›sÊŽ§ÜÐÃo#nY• äàŠ|+9"U,z’Ô,D1©nê>‚€@P@P@P@PmGþA·_õÅÿ‘  ’uÿÉÿ£€#½ÿˆ~°ÿèØ© &k›¯:uK„Ž8å1ªù;¸»‡­0íŸóøŸø ÿÙÐö‹ÏùüOüÿìè÷c¥âûvÿìè~Ñyÿ?‰ÿ€ßýh¼ÿŸÄÿÀoþ΀Ov3‹Äç¯ú7ÿg@ ö‹ÏùüOüÿìèûEçüþ'þötÖ’åÎZê&>ö£ÿŠ W¸S•¹ˆÜZþ*€ö‹ÏùüOüÿìèûEçüþ'þöt5Û 5Úèmû:†InVHQf€™Žm@Æ›ûßìãñ  n%¶†Vš2F¯j2Æw{Ð÷Oÿ?ÿà ÿâ¨Ý?üüCÿ€ƒÿŠ tÿóñþþ*€ ÓÿÏÄ?ø?øª7Oÿ?ÿà ÿâ¨wOÿ?ÿà ÿâ¨7Oÿ?ÿà ÿâ¨Ý?üüCÿ€ƒÿŠ tÿóñþþ*€ ÓÿÏÄ?ø?øª7Oÿ?ÿà ÿâ¨Ý?üüCÿ€ƒÿŠ tÿóñþþ*€ ÓÿÏÄ?ø?øª7Oÿ?ÿà ÿâ¨Ý?üüCÿ€ƒÿŠ tÿóñþþ*€ ÓÿÏÄ?ø?øª7Oÿ?ÿà ÿâ¨Ý?üüCÿ€ƒÿŠ tÿóñþþ*€!·¹¹šæê/2[r€7Ù-¸g¦î(mÓÿÏÄ?ø?øª£¬K/ö-ædˆ;2‘ì8žzÿ{×¥hÉ×þ'þŒjŽ÷þ>!úÃÿ£b¤€Sþºëþ¾[ÿ@J`bØêóH-^˜\.J¥¤©·ä-Æ錹Ȯ‰ÒJétó]ÿnXMrÑíå”LeC(t8ÎpKÚ:¤~£2èI4¿ÏþwãZµµdYÃFÅw2¹U(2GBFî‡î秸ÊKoëúó “]KsöÈ-íž$ß»4‘—û¥Fz¦*<­° M]|Ð…É#w|ùsÈÌgœ pOS‹t¯ëOó ŠuË%¹’}¾^ü¶Tò –AÝÆQŽ=ÆW±¯ý\tš„ÂâÖ/±Lžl»~ÞÖ96;{ðŒŠš³wØ.WcY)•+Fvƒæ)e\€ ?Ƽ=(öNö¿õý ¹7Û£cÇ"JË8Üwr0yœŸö[Ò§‘ÿ_×õt,Ô ( €"“þ>­?ßýôZÇ…§ý{Åÿ  –€ ( € ( € ( € ( € ( €)Znz±ŒpÑmà°õ<â€3ôûOA©½ÅÝͬÐJ~xƒ¶°6ñ׿<н[þ@×ÿõ×ÿeŽ€5dëÿ“ÿF5G{ÿýaÿѱR@)ÿ]uÿ_-ÿ %0(&‘‚8&žià6$rmFÒ½T÷I{Ö®«½Ò³‡®œÞQwsç8PdܹùsŽ1·øÇ~¼Òö,¬Óˆ§ž0FûÔ@éòõ?wÏÀÁíÝ_×p±%Í¡šhæK‰`’5e=¼ƒŒçp?Ý1•­pºmº\Ç:oS03pdç’O˜Äœòiº’jß×Oò Ó¢>b4’´oÌ€\¶wt9ÉêqϰÁíû…ƒìxžK«‰)«1_B1€1Œ1íŸ~û¤€béP¨Œee‹h‰I»Uem£‘ò/\ž:õ§íXX™­·ê rBíHÊŽ2KÁü@ÿ}ºwžkG—úþ¿È # ( ¤ÿ«O÷ßÿE=%²–Óm”1Bm£†2>AÏ4lÔP@P@P@P@P@›’G¨j;@/r›¿ƒê=ëXAI]ˆ—í}zgýIÿ⪽”Bå}A‹è7¬Äeê?†>Ù5”•͉:ÿÀäÿÑRw¿ññÖý$^¤¹»wö‚8™Ô}Ôì¤ `7ì°r_ü —ÿŠ ìÐr_ü —ÿŠ ì°r_ü —ÿŠ ì°r_ü —ÿŠ ì°r_ü —ÿŠ ì°r_ü —ÿŠ ì°r_ü—ÿŠ ìÐr_ü —ÿŠ ì°r_ü —ÿŠ ì°r_ü—ÿŠ ì°r_ü—ÿŠ ì°r_ü—ÿŠ ì°r_ü—ÿŠ bŽòТ¸;Üs+·ü²~ÌH ÙÚÃöRVRL’~Ñ(þØ6(_²ÁýÉð"_þ*€²ÁýÉð"_þ*€²ÁýÉð"_þ*€²ÁýÉð"_þ*€²ÁýÉð"_þ*€²ÁýÉð"_þ*€²ÁýÉð"_þ*€²ÁýÉð"_þ*€²ÁýÉð"_þ*€²ÁýÉð"_þ*€²ÁýÉð"_þ*€²ÁýÉð"_þ*€²ÁýÉð"_þ*€²ÁýÉð"_þ*€²ÁýÉð"_þ*€²ÁýÉð"_þ*€²ÁýÉð"_þ*€²ÁýÉð"_þ*€²ÁýÉð"_þ*€²ÁýÉð"_þ*€²ÁýÉð"_þ*€36*ÝêªJðzœšÞ—Â&9°wp$Ž˜Ý×ÛZˆKÏù¯?ë©þQ×4þ"‘µ'_øŸú1ªŽ÷þ>!úÃÿ£b¤€Sþºëþ¾[ÿ@J`PW–(#—ÕIɶ~Rz([©ˆ.ŠGʽA䬠 yŽÒÅÊ….ÃóÀ#ñ ^œ³^êøÙÇqÐúþ=( Ä‹½Š ƒpL÷Ï·¥8LâàDÅ £Ô1ü: í26Lj¬$ž0FHçŽy 4îŠd`¬¹p 3ßð <’Ç…ùØàm8'¡>Þ´$,^0Xa¹~4ú( ¤ÿ«O÷ßÿE=2)¦ÚŒ˜!>ê£úзɼD=Ü’Ø$qŽÙ㯭F³Ë!]»3È$ýÝÞԱܳüØ@  Ûßæüh8§”€w3`úàm_R=}häm¾5l‘œg8 >ÐËÉ÷xlüôü‡ýô(yÔ0R7*6=N=ýýøK4«¾ÐXÚ€ÒËç]€oÚ ÿh‚é‰FÚ61PG¹Ç|ûúð!šCs·h(¸ÁÏ wϽZ € ( € ( €2c…n5‹ävpÃò±Â*”šØ _Ù°ÿ~oûøiûIŠÚŒk…{’@—øŽOÝŽ¥¶õ`lI×þ'þŒj@G{ÿýaÿѱR@G-Ý´77I5ÄQ¿Úíwãjsú`B—Ztg)qj§Ô:ŠÖœÅ®=7¯ùî:_¶ØnÝö›mÇ¿˜¹ kÍ=˜3\Z– uÈ ¶Ë‹›`Ç«y‹šh¹Ó†Òm¶ÝëŽ =?Sy§’ ¸µ$x4¿n±ãý*Ûƒ‘ûÅë@.´à…ŨSÕw®(ÂþÉ@îÜÐ €í /ùû·ÿ¿‹@ö…—üýÛÿßÅ ûBËþ~íÿïâÐ «yïmV⑃¹!)è–×¶_a¶Gº·È‚5e2/÷@ ÐÞœP!¸µÚ9 ½p(~ÝcœýªÛ9ÏúÅëÒ€n´õmÂêÛ9ÈýâñÀ~T­8®ÓqjWÓzâ€^؉ ý² úÕíŸñ íÖ<ÿ¥[òrx½h7¶·›bÝ2d\Ðo,~L]Û‡ ÓÖ€·Xç?j¶Îsþ±zô ûfŸ~Ñk0>uàP‹Û0.m€ã1{t þвÿŸ»ûø´hYÏÝ¿ýüZ?´,¿çîßþþ-Ú_ó÷oÿ€í /ùû·ÿ¿‹@ö…—üýÛÿßÅ ûBËþ~íÿïâÐý¡eÿ?vÿ÷ñhþвÿŸ»ûø´hYÏÝ¿ýüZ©a"K¬_:Oè ü(I½„$÷ÂÙÜ]œ’M£>œÓQrÑ +³ê_j`EöÙ¿è¨ÿߟþ½m›þzýùÿëÐöÙ¿è¨ÿߟþ½m›þzýùÿëÐöÙ¿è¨ÿߟþ½m›þzýùÿëÐSËö” q¢ÞÊ ä,–Á†}y4ã'Séu$h¨šMú¢Œ*ˆzu¤Ûz°öÙ¿è¨ÿߟþ½m›þzýùÿëÐöÙ¿è¨ÿߟþ½m›þzýùÿëÐöÙ¿è¨ÿߟþ½"Ï,·Vå´ûè•‹3ÀqÊ0í“ÔŠdSÇmM¥êŽ$Cˆ{…×Ú€$ûlßô ÔïÏÿ^€¶Íÿ@½Gþüÿõèûlßô ÔïÏÿ^€¶Íÿ@½Gþüÿõèûlßô ÔïÏÿ^€¶Íÿ@½Gþüÿõèûlßô ÔïÏÿ^€¶Íÿ@½Gþüÿõèûlßô ÔïÏÿ^€¶Íÿ@½Gþüÿõèûlßô ÔïÏÿ^€¶Íÿ@½Gþüÿõèûlßô ÔïÏÿ^€¶Íÿ@½Gþüÿõèûlßô ÔïÏÿ^€¶Íÿ@½Gþüÿõèûlßô ÔïÏÿ^€¶Íÿ@½Gþüÿõèûlßô ÔïÏÿ^€¶Íÿ@½Gþüÿõèûlßô ÔïÏÿ^€!µ’x潕ôûÐ&xʯ’s€¤‘eÙ+ÊšUâÉ&7°·ÁltÉï@ê{ÛA¼w†Xwɲ®ÓŒ þ”­'_øŸú1¨;ßøø‡ëþŠ’'IDˆÆæVÝ*' ° ÷¦ÔP@P@÷Ì&$Ì >Я÷T÷æ€"óîçåÿï•ÿ O>ãþ~_þù_ð ϸÿŸ—ÿ¾Wü(|ûŸùùûå€>çþ~_þù_ð ϹÿŸ—ÿ¾Wü([Fžy$V¹ F;çÛÚ€,ùÏÔß’ñ4yÏÔß’ñ4yÏÔß’ñ4yÏÔß’ñ4yÏÔß’ñ4yÏÔß’ñ4yÏÔß’ñ4yÏÔß’ñ4yÏÔß’ñ4yÏÔß’ñ4yÏÔß’ñ4yÏÔß’ñ4yÏÔß’ñ4yÏÔß’ñ4yÏÔß’ñ4yÏÔß’ñ4yÏÔß’ñ4yÏÔß’ñ4yÏÔß’ñ4yÏÔß’ñ4yÏÔß’ñ4¾DŸóõ7äŸüM'‘'üýMù'ÿ@õ+fm:ä=Ĭe°Bó‘Ð{P”àrèÆ ïãâ¬?ú6*HÉÖúïþ†´ÀÌÕ ûF©hŸd·ºÄ2“œ(ù£çî·?‡z$¼·‚å^ìºÛeeuϳ¨öマ ŠKŸõÒÿ×Oý‘(œÒŒÙ£Çqd²ù+Ÿ*!æÇ É'žÀ$ž0hk‹»€‘þù ,[ÌÞál1„ÉR:zsÔqÅK Ì:‰îRå‰PIÁº–íŽz§sxÓAhrPª£Î@QµÃÆIdœvã4)»–5›™ Qç?˜ãoNz/L›Þ€,A4ÞlNÓ3¬·E°……ߌ`g?(êOzÙÓ¿×Ïþê6  ( € ( € ( € ( € ( € (  Úüƒn¿ë‹ÿ#@$ëÿ“ÿF5G{ÿýaÿѱR@ )V‚0AïL3ÉÇ–óz0#8÷ÉŸ~üò@çÉÿ>³~iÿÅPI&u˜ÙÍæ"•S¹xÿû"€çÉÿ>³~iÿÅPçÉÿ>³~iÿÅPçÉÿ>³~iÿÅPçÉÿ>³~iÿÅPBÙ¥3Hc1»>@b9@çîÓó±‚ã<[É÷—üh<‹ùöû鯀"ãþ}Ÿþú_ñ ȸÿŸgÿ¾—ühò.?çÙÿï¥ÿ<‹ùöû鯀-XE,rÊÒFP0P2AéŸCï@( € ( € ( € ( € ( € ( €+j?ò ºÿ®/ü\“¯üOýÔ—P™]páp‹ƒ»U+«ÜR²Kÿ?’ßÅÿãTîöIçòOûø¿üjÙ%ÿŸÉ?ïâÿñªwû$¿óù'ýü_þ5EÀ>É/üþIÿÿQp²Kÿ?’ßÅÿãT\ì’ÿÏäŸ÷ñøÕû$¿óù'ýü_þ5EÀ>É/üþIÿÿQp²Kÿ?’ßÅÿãT\ì’ÿÏäŸ÷ñøÕû$¿óù'ýü_þ5EÀ>É/üþIÿÿQp²Kÿ?’ßÅÿãT\ì’ÿÏäŸ÷ñøÕû$¿óù'ýü_þ5Jàd—þ$ÿ¿‹ÿÆ©Üì’ÿÏäŸ÷ñøÕû$¿óù'ýü_þ5EÀ>É/üþIÿÿQp²Kÿ?’ßÅÿãT\ì’ÿÏäŸ÷ñøÕû$¿óù'ýü_þ5EÀ>É/üþIÿÿQp²Kÿ?’ßÅÿãT\ì’ÿÏäŸ÷ñøÕû$¿óù'ýü_þ5EÀ>É/üþIÿÿQp²Kÿ?’ßÅÿãT\ì’ÿÏäŸ÷ñøÕû$¿óù'ýü_þ5EÀ>É/üþIÿÿQp²Kÿ?’ßÅÿãT\ì’ÿÏäŸ÷ñøÕû$¿óù'ýü_þ5EÀ>É/üþIÿÿQp²Kÿ?’ßÅÿãT\ì’ÿÏäŸ÷ñøÕû$¿óù'ýü_þ5EÀl–,oÝÈQÁVbòý²¥p-08*I,NÞ@ËŽqë@zng$“4„žI,i€ž|ßóÖOûèÐçÍÿ=dÿ¾|ßóÖOûèÐçÍÿ=dÿ¾|ßóÖOûèÐçÍÿ=dÿ¾|ßóÖOûèÐçÍÿ=dÿ¾|ßóÖOûèÐçÍÿ=dÿ¾|ßóÖOûèÐçÍÿ=dÿ¾|ßóÖOûèÐçÍÿ=dÿ¾|ßóÖOûèÐçÍÿ=dÿ¾|ßóÖOûèÐçÍÿ=dÿ¾|ßóÖOûèÐçÍÿ=dÿ¾|ßóÖOûèÐçÍÿ=dÿ¾|ßóÖOûèÐçÍÿ=dÿ¾|ßóÖOûèÐçÍÿ=dÿ¾|ßóÖOûèÐçÍÿ=dÿ¾|ßóÖOûèÐçÍÿ=dÿ¾|ßóÖOûèÐçÍÿ=dÿ¾|ßóÖOûèÐçÍÿ=dÿ¾|ßóÖOûèÐçÍÿ=dÿ¾|ßóÖOûèÐçÍÿ=dÿ¾|ßóÖOûèÐçÍÿ=dÿ¾|ßóÖOûèÐÿÙlibstruts1.2-java-1.2.9/doc/images/how-to/netbeans/creating-project2.jpg0000644000175000017500000005616210404045214026542 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„   (1#%(;4>=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀd¤"ÿÚ ?Óñµw¥ÍÛ²„h‹¶àO@:`ŠËÅ:‹ÇæIÀÞ»K`^¤ñ¡ÛslÞ–îñլȥ2¤žzý¤ºy‘Ì‘†ØÜ©Áè}+²”"à›Fm»–n|]ªÃp-ö˜uI# öÆ0ÇÖ¢>3ÕÆr"8û­×ó¬ëiRYŸ5[È(Bx,$ŸÇ·mï4­V8¤º‰"™šTܼ>Szs„bþ]÷)¯Œµv© Ü~´öñv²©½‘ö;[άG%²YêP[ÛC ÒÃXžEe«òx8vÍY¹¸¶m<,³ ˆØB…¼ÀÙlŒ®Üð}ñShÿ(kÜËÿ„ÏUõ‡òoñ¥ÿ„ÏUõ‡òoñ«¶º\—±CQA œ¹ó©Lt*yõ5,¶ÚTV¦*ÜMöIO–Τo 6ð3‚h´;½Ê_ð™j¿ôËòoñ§§‹µ‰3±±×j±ÇëVã³ÑÚyF!@Ñ#‰ +"¹#ÏZÎðãþÔÛ* kGDË…ÜÄŒc'ØÓå…¶ ¾åƒâÍeS{"…õ*Øþt7‹5„P̈ ÷*ßãW'¹Œ2É5ÄoeýžˆÑ‰fM¼asÔ¥â‰D®†2¯ØÀuŸpÎÞ›súÒQ‹v°]÷þÍ_fý©³ûÛ[Κ<_ª“埠oñ§Ù»ÿd\%ÍÄ[d· óA‘…ÛØõç.‹•¤—Ï<^x‚Egá—§Oz|°×@»î3þýSÖ/ɿƞž*ÕäûŠ­î«ëXp pÏóIþ„Ï5³£^Ei¢Ü4’2°¹‚£€ÍŒþ”宄¦ûñ~¨3äßãJ¾-ÕX€¾Y'° þ5$Òi·ÙÍ4«Ý\?žUŽc]àôÙj+{%Ô¬ÔG•îÝÆÙÌ]­M¡Øz÷)ê™Á1‚;a¿Æœ¾+ÕávèIsž–$Ån²»FåßÌUd|ŸSž=*x ­ž¶†n¶e Å&á–&>üç©ïE¡Øz÷*§ŠµW8@Œ}±þ´­âQklR;Àÿ:‹Cs©u¼Ç ›yÚÀØã8«±}Š_³Å|ÑË{´…Žñ†lŠ[¡ f‡§°“}È¡ñ³:»DŠáX€Ü~µü%z—¬“O;Û.•yh–þd±|…Õñ×,1VÏIFƒÎò0. yܸu(pp;nÇZV‡aëܧ‰5‰•ÌH®#˜ª±Ú=zÓOе5;[`#¨!¿Æ®Ù-¥–œ74)3[·›‡“æ tö¬Ÿ¸“V–EòÊ;e;‡©¦£ía]¥¹gþ­KÖ?ɿƔx§QõÿÿÄ Uû8ö36ÿá)Ô}cýÆ—þGÖ?ü{ükŠ=œ; ™›_ð”j>±þ¿ãKÿ F£êŸø÷øÖ ¥£Ùǰù™·ÿ >£êŸ¯øÑÿ >£êŸ¯øÖ0¥£Ùðs3gþmGÕ?_ñ£þmCÕ?_ñ¬jZ=œ;36á&Ô=Sõÿ_øI5ï'ëþ5Š)Ô½œ{36?á$Ô?¼Ÿ¯øÒÿÂI¨y?_ñ¬z(öqìÌØÿ„’ÿûÉúÿ(ñÿ÷“õÿÇ¥{8öfkÿÂEýåýÆ—þ+ÿï/ëþ5“EÎ=…ÌÍoøH¯ÿ¼¿¯øÒÿÂCýåýƲ)EÎ=‡ÌÍaâ ïï/ëþ4¿ð_y_ñ¬¡EÎ=…ÌÍ_øH/¿¼¿¯øÒÿoßy_ñ¬šZ=œ{35F¿}ýåýÆ—ûz÷ûËúÿe uÎ=‡ÌÍA¯^ÿy_ñ£û~÷Õñïñ¬º){8ö36¼E£VHJܘ6G´á7d=Ç¥bÅàׇ>V«"n;bÆZëî>øÿt!XßÚ’î—„·ßwnÂŒç¦+ž5gdÍìŒtðHCŸííÿ^Ÿÿoý?ÿäþʵ—Z·Pçcn`qÐ(b Ÿ® iÓöÓî.Trßð†ÿÓÿþAÿëÑÿhÿŸïüƒÿ×­ÝNñ¬£„¨LÉ&̾p>R{sÚ¡“VX­wLv´dàdžGÿZm>áÈŒŸøCÿéÿÿ ÿöTÂÿOÿùÿ²­­7QûsξYQ68n*õÚ}ÑÇü!ÿôýÿúôÂ!ÿOßùÿ¯[_no,/–<ÿ7Ëòóï×éŽj8µ›Wh‘Ÿçp½‘Àõî?:=´û‡"2¿áÿ§ïü…ÿ×£þú~ÿÈ_ýzÚ©ç<Çæc½>¾ÕmX2†Áæ—µŸpä‰ÍÂ#ÿOßù ÿ¯KÿÿŸïü…ÿ×­½Bå­ WM™gTËœ(ÉÆMC«e&ù]Af*2›GVϧý´û‡"2¿áÿ§ßü…ÿ×¥Çü¾ÿä/þ½j¾«ߺ.~a"ൈ?øéü©cÕ­¥LÆ$wÎ<µ\µ/k>áÉ+þ_ú}ÿÈ_ýz|^–ß¢ÈØÆV<ßU«e|/&¸EÕb`0Æì¨?Ö­ÑígÜ9ÎÂ+ÿO¿ù ÿ¯Kÿ·ý>ä/þ½O¼WœF·d&âË€OqŽŠjåþ¦–„¢€Ò*†*sІ#ÿA4{Y÷H™Ÿð‹ÓçþBÿëÑÿ·ý>ä/þ½j¦£—±ÛƬC†;ˆÀ8ÇOZ»GµŸpäG=ÿ¿ý>ä/þ½Âãþ?òÿ^´~Ý2É3¼iöx¥òÉîíÎ?dšÝ¨VòÛqVQõRáIôÍÖ}Ñáóùÿ¿úô¿ðŒÓçþBÿëÖ´z„Y~udR̬¸+Œg?˜¦¦§nòÇïýãmVÛÁ8Î3øQígÜ9™ÿÏý>ä/þ½ðŒÿÓßþBÿëÖýV’ðC4«0Ú¨›Ôâÿ=¬û‡$L¯øF¿éïÿ!ÿõèÿ„kþžÿòÿ^¯.« I7dÄ.à9 Ç ýGçNµ±Š)HV^SääZ=¬û‡$LÿøFÿéïÿ!õéáÿ§¿ü‡ÿ׫ÿÚ®ýÛˆBÛŠ©Â($dûp*GÕa ! ë´²†u±RAò4{Y÷H”áÿ§¿ü‡ÿ×¥ÿ„wþž¿òÿ^¯.«nÀ’$AÎÒËø8ãל~u=­ÔwBC`cmŒ`ƒ€qúŠ=¬û‡$L¯øGéëÿ!ÿõèÿ„wþž¿òÿ^·+>+Ù–KŸ´¤B8X'îÉ,ÌBÿcëGµŸpäEOøG‡üýä?þ½/ü#ÿôõÿÿúõtêp÷e,3¹üÈR}:Θš´=[—e~QÞk>áɯü#ÿôõÿÿúôÂ?ÿO_ùÿ¯[U ÔæÞ5} ®ð­ì ÇóÅÖ}Ã’&_öý=ä?þ½/öÿŸ¯ü‡ÿש›VÂ\b/™p"ÉâL±AúÈŠ|µ¼ˆ¬ÁÕp3!\&p3øÑígÜ9_ûþžòÿ^ìúyÿÈýzuhÚáãòäáTªíù˜Üô\Ô¿ÚvÁ #pG9Éú‚4{Y÷H”ÿ°‡üüÿä?þ½/öý<ÿä?þ½iCqå„Gp\dö9§ÈÛ#fþè&k>áÈŒ¯ì1ÿ??ùÿ¯Göý<ÿä?þ½95Ër°1 Œ»ðFÞõäÓŽ·m½Ï–Cn8ÉVÜ€ ÷ÅÖ}Ã’#?°ÿéçÿ!ÿõèþÄÿ§üsÿ¯Z6ó¥Â@À©ÚÊÃO¡©hö³î‘2±?éãÿÿëÒÿcùøÿÇ?úõ«EÖ}Ã’&_ö0ÿŸüsÿ¯Gö0ÿŸüsÿ¯Z”QígÜ9"Kq÷Çû£ù Ét!nmE­Ë$ìÛ¤07 >lþ•©q“4jh*2qž‹šoý5ÿÈýzÌ£æ5„áIòð¿ÍÓ ªŠ‘4˜Ð[v@Á¹êp¡«ûé¯þCÿëÑ·þšÿä?þ½g( ¿i”Ì¡B9ÇËÀ`cŠ”ibÀ·–Xœÿc“ŸÄæ­íÿ¦¿ùÿ¯Fßúkÿÿúô­²ZÀ" $ä÷©$]ѲóÈ#Š]¿ô×ÿ!ÿõèÛÿMòÿ^€2¸¹K{y,îÑ"M˜ÇŽƒ“†>‚–ãGÞ‰¶f2+[…ãz1Æ Åjmÿ¦¿ùÿ¯Fßúkÿÿúôµ¸·FÙÝÛs±Ç'§o ©©6ÿÓ_ü‡ÿ×£oý5ÿÈýzZ)6ÿÓ_ü‡ÿ×£oý5ÿÈýzZ*…ÍìNѨF•#úÔ_ÚSr?ÈÿlOÿÿ¹ÿ²T,pO'œ}ON•4ÿññûŸû%Bäç«sÛ<ž9àPª£_€ò¶™ÄlU˜m dõ#Ö­Õ&‚»y]AIœí,eõ¦€·o2\[¤ÑçkŒ€zcRVv’ðF%·‰-ÌfXݳ…?Ý@ïé–­ Q‚¶Ö#ƒŒàÒ$*’Ä9$ö¦Å4SgÊ‘v°8¬8…˜=Ýë-Ê»H ,¬=3qéWt«ƒsy|D‹*F"E”cç9ÉÇ~p~™ã4¯¨í¡¥Ušú%ÉÃ;Vk (eÁÅ1pΓ ¦xìjJ¥§ýù=€fãþ=åÿpÿ*‚[äG* 6;î©mîàà`Ž¢³]Aé‚{ÕÝ>7T,ÀÅ[ªæò pCuÆqSJþ\LàghÎ+)†àAaÏû?ýzבҘÝà üª £(Ç;0©Û¯ü¿•I)ÀëÐgÐ}Þ§Úš;õêzýie8\ú äô/SȤþ÷S÷=h7˜G*#ø¨Šu–GE ß±ª×²©uˆ¡àƒ»8Å®L[pO9õ  Õ ×) m`Ý3ÅMT/Áó”ààíçu  ‘Ê’¨d`Gò§Öm«º\‡àŠÒ æ™bP[©è=h†e™r½GQUµ–O¡þb™`œýÚШ'ºH[i¶3Šž©_ÿ¬_÷hX.㙂Œ†#8«§¯|öZÑ  ÷KÆO×ø'IÛÁEW¸¹Ù> jUxÃw¦ØÆLÆ\mPù  õ³¤?xóè:Ô•Ÿx6܆e8õ”f¥–B˜Ç÷}éóÿ¨“ýÓüª ?$»˜Ð©÷ç§ŸýDŸîŸå@7/$~õº}£S“Œž1žŸýz‘¾ü½Ö·N½£^½øëÀöêy÷ f ¥˜à“Q‹˜‰Pï YÁ0HÜvž=k,E!# ÇqÀÈ  Šd²,Q³·E¢d‰UÛq­UÕ#–Kqå.B’ÍÈÀàóïM=µÀ¸VùJ:œ2¢¦®`³,€²Ï<¶ eÉ?æêxö?•trÉ=ªI"àž‡ =pyÿ9™ºoBT®OMW Ì£ªõ¨/° é¸VnpçÎz etÒà:¡êÙÅ*œ¨'Ò¢˜0’9KÎ@ëÍMEdµÔ®á‹´yþkU>âý("ÿþ>ßðþU^¬_ÿÇÛþÊ«ÐI?ü|GþçþÉP¶I<qß­‰œû40ÊØ± ¿CTwj_óáaÿÿ@‘vq aØ`¸Pþ=jžíKþ|,?ïáÿâhݩυ‡ýü?üM[·¶ŠÔ8…v‡9až¼œ~Y©k?v¥ÿ>÷ðÿñ4nÔ¿çÂÃþþþ&€4ƒºŒ {Fva†b~¦³·j_óáaÿÿFíKþ|,?ïáÿâhB£kxY‹4jI»RÿŸ ûøøš7j_óáaÿÿ@’4Œa(ö§V~íKþ|,?ïáÿâhݩυ‡ýü?üMZ°Ÿ-*š³÷j_óáaÿÿFíKþ|,?ïáÿâhB¢û4óÉ*©»RÿŸ ûøøš7j_óáaÿÿ@‘5ÚŠz FëÿoåT·j_óáaÿÿJ$Ô×;llF8”ÿñ4~\ðsÆ=}é~SÔç½Pߩυ‡ýý?üMµ/ùð°ÿ¿‡ÿ‰  Ř1PHè}(¢±` 1êqTwj_óáaÿÿFíKþ|,?ïáÿâhB‘”2•`=Pݩυ‡ýü?üMµ/ùð°ÿ¿‡ÿ‰  ‹o0eAÅIYûµ/ùð°ÿ¿‡ÿ‰£v¥ÿ>÷ðÿñ4yÑ\aÔïH‘$gäP¹ôª[µ/ùð°ÿ¿‡ÿ‰£v¥ÿ>÷ðÿñ4¡MxÒLoPqëTwj_óáaÿÿFíKþ|,?ïáÿâhêEg(¡Oµ>³÷j_óáaÿÿFíKþ|,?ïáÿâhóFŒÁ™A#¡§V~íKþ|,?ïáÿâhݩυ‡ýü?üMhS]×k€G¡ª;µ/ùð°ÿ¿‡ÿ‰£v¥ÿ>÷ðÿñ4y#HÆBjlÿê$ÿtÿ*§»RÿŸ ûøøš7j_óáaÿÿ@MÃË×ýktú-F ñzzôöªM&¨ÌY¬lI'$™OÿI»RÿŸ ûøøšÐ¢³÷j_óáaÿÿFíKþ|,?ïáÿâhB‘”2•aF Pݩυ‡ýü?üMµ/ùð°ÿ¿‡ÿ‰  †›h¨¨°€ªÁ°I9 qœçŽzUªÏݩυ‡ýü?üMµ/ùð°ÿ¿‡ÿ‰  20i»û£òª;µ/ùð°ÿ¿‡ÿ‰£v¥ÿ>÷ðÿñ4¡EgîÔ¿çÂÃþþþ&Ú—üøXßÃÿÄÐƆ6b̹&¤ V~íKþ|,?ïáÿâhݩυ‡ýü?üMW¿ÿ·ü?•W­ j“a§gÞFÿâhÛÿ>:oýößüEjÜ}ñþèþBªÏ!Wh\³cæ8­\}ñþèþB«ÉÉ·wElãÖ„it‡†á€$úc$g>œPn£œ¯¨a‚)ͱ~ÁÐ&`3þ5Úï|»nÈäãòâ«@.c+•ÜO÷BóB\YX)ÄgŒ÷ã4‚ßn ¾g£¡ÇoÀS–¢A¼þ½¸ÅŸ* Îw.FÏZ>Ö„ÆÞÛz}ÞüÒý”2m‘‹à`:œR­¸rÜ©'ŽØ£@º‰Ø('$à)†ì}¥bT$Œú}ïþ&…³UmÁÎáŒt¡,ÂH®$bCgžÿ{ÿŠ4{ Jó"6ÓŸsŽÖ˜.áÚ[q~”ç€;“¸€ØÜ=qQ%§î•dbJŽaÈ?ÐQ qmÜzç ÓëùÒýªûwþ=¨Kp§;¹*W¦:ãü)¢ÍF~R0Fzc­ø§HÈTF9ÿ –¢ŽŽÏæÌ9†Æ¥¤À(¢Š@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEO:ŒnîÒ «ýÏûãÿA¬]Q®>Ók¹“çXFáIÆ;}hJŠÆº¿¸Š0ŠˆæŠ,ãy'kcÁÅV·ÕoÙe“k³>n8*õãÞ€:*+0ê3¬Ínc‹ÎŒ39Ý…*ž¯Î:ú»g1¹²‚r¡L±«;df€3çÔ/…ÔñÛÃnÉÌŽÀ“€{ëLþÐÕ?çÞÏþþ·ÿIÿ/—¿õØèªµãdÂC”å°ÄƒƒÄÊ€-ÿhjŸóïgÿ[ÿ‰£ûCTÿŸ{?ûúßüMRšý£±[€€’Ì1ŸLÿ…-ÝëÂð*ìb3Àœcqõ  ŸÚ§üûÙÿßÖÿâhþÐÕ?çÞÏþþ·ÿTfÔ–$\ Ç ÁÛœf›ª¬Þ6PY”¼œ‹ ÐþÐÕ?çÞÏþþ·ÿHÚŽ¦ªXÛÚp3þµ¿øš¬uUrC‚3¹vò¸õüÇçS³‡¶.½2?*‘ïµDb¦ÞÏ ãýkñ4ŸÚ§üûÙÿßÖÿâiº”¯ fŒ)f” ÝÓ“Šªú‚A”¹âE8Âô?LÐÏí Sþ}ìÿïëñ4hjŸóïgÿ[ÿ‰ªqjQI#ŽvP®€F~¤â¤7Ð…¾cæ trAÆ?hÇö†©ÿ>ö÷õ¿øš?´5Où÷³ÿ¿­ÿÄÕ6Õ-Älÿ9T¶îã×ò¥]F"Ì ¹ÚNæ ÂÄsÿ|š·ý¡ªϽŸýýoþ&ª@·³áw­oP?»ïPG{“—v[%Iu«)÷Ÿþ¹Ÿý h¿Ú§üûÙÿßÖÿâhþÐÕ?çÞÏþþ·ÿY÷z‹[ÜH˜M±¨nCdõôÕ2jºUÛp’Üð?"h×ö†©ÿ>ö÷õ¿øš?´5Où÷³ÿ¿­ÿÄÕo·Á°±b0sÔŒ~b‡¿…:nn@G\Œñ@´5Où÷³ÿ¿­ÿÄÑý¡ªϽŸýýoþ&ªhGæ2w#Ÿ•z )Éÿ¾…<_ÀdTRÇ{mV‚qš²—ڣȨ-ìòÇ÷­éŸîûUúÇüñ±ÿ¿¯ÿÄÔVÿñ÷ûÇÿA5£<†(YÆ2=hžýcþxØÿßçÿâh߬ÏûüÿüMXŽäØ,NNAéþ4¦é010Hê=E;0+oÖ?çýþþ&úÇüñ±ÿ¿ÏÿÄÕ•»‰³´’{ÔÒÇ?™;F€U$}‹0*ïÖ?çýþþ&úÇüñ±ÿ¿ÏÿÄÕ„¸m¡ä ’GùÅ!¼ChÁbúð(³ úÇüñ±ÿ¿ÏÿÄÑ¿Xÿž6?÷ùÿøš²nâW(IȦÜ]ùRT.sƒŽÜñ¢Ì7ëóÆÇþÿ?ÿFýcþxØÿßçÿâjä’¬d 'œÛÖš.¢$òp8ÝŽ=h³®ýcþxØÿßçÿâh߬ÏûüÿüMX‘0w1'G^„ÿCJná w'ô¢Ì ÛõùãcÿŸÿ‰£~±ÿØÿš•€Ï߬ÏûüÿüMõùãcÿŸÿ‰­ (?~±ÿÃeÿ>‘~¿ãG²\çŸOWCLþW%S”œ÷Æ{š’[bïÇ;ÄÑ©@Tqê=…ný†Ëþ}"ýưÙϤ_¯øÑì¤9étô—;¦“î `ØÆiLŒmÌ®B¶à8ãæVþk]Øl¿çÒ/×ühû —üúEúÿÊAs›º²‘¤v€ó.w’ûp «a<»M™ÎÔÆ Ùû —üúEúÿa²ÿŸH¿_ñ£ÙH.dꋆtÞP‰\dsÞª½‚8 eo4ù„OáŒWBl¬Ø’Ö±’y$çüi>Ãeÿ>‘~¿ãG²\熟r|Ù6³+2Á+Œ*ŽM8¢«E#;  f(ŽÇ§Òº_°YϤ_¯øÐ,lxŬ<œ¿ãG³\åN¸1:ÌHÞg©%I”;~û¯N>foý˜×@,l[µ‡žÆYXœ¢ÃÈÏ~ŸÍ…ÎrÚÒT»Y…Ž=Á>î¿€þµ¢Ÿyÿë™ÿЖ´¾Åcÿ>±tÝß§çKö;% þrÝz~~Ô{60f³ó%‘Äî‚E êÁˆ÷ Y"Ä9 ÈdV%IÏô&·ˆÎmbã¯_ñ ØØóþ‹úŸÇÞfÂæ±‡†ù¶NˆžNi Š}˜B’2€NNÎ}Aâ·¾ÅcÏú,\wëùÑö+ùõ‹®;õüèöl.aGcr¼Ü–R§'=Bý”UxìdKˆÂ°FÁ‡Ïœ1ÓÖºo°ØÿϬ<’_ñö XØ’µ‡žÆfÂæu·ü}ÃþñÿÐMiÈ‚Hʆ’;K5ed·I‚ ÏÞ¤ÛÛÛ?}º~t{9ÈüµóÇA|…BmÈ7«€3ÙGoÐU¢€r˜ÀÉùÛùÐR!œ¯A“ó·­>IÊâÔvÈ?)ÀâŸ[$/½˜• sß’súš—Ë‹$läuùÛüj•Þ¡giqädŸßûèÓQ“Wü‘o †*@##¸=ª$³2»™$.x銫æIÿ=þú4y’ÏGÿ¾’ —RÜ+).Ä©Èè;ÛëH-[*Ì=GóŸëTüÉ?ç£ÿßF2Oùèÿ÷Ñ£’Arê[pÁÛ…*£”…MYždŸßûèÑæIÿ=þú4{9Í:+3Ì“þz?ýôhó$ÿžÿ}^É…Í:+3Ì“þz?ýôhó$ÿžÿ}=“ štVg™'üôûèÑæIÿ=þú4{&4è¬Ï2Oùèÿ÷ѣ̓þz?ýôhöL.iÑYždŸóÑÿï£G™'üôûèÑìØ\Ø“þ>ýqû-fÜA<ú‹¬ˆ… g8eÜFÓ‚9vòqnûÊ;þí@T$’µ$ñÉ7šÖZ‚¸]¹ž>:ÿ #g šš[éWZWÉ#fâ2ÂNT퀧'hÆ2M_×Î4û“¸/#’pÌ:ÕG0H¥d±ÔÝ[¨i¦ ý~z´Ú‘bI±»äçý_ÿ^œ¯v §ÿf¶ÚkiIr Á—ÀÉêO~œu"¡›Q˜›˜Öå$ Ûye( lûgW÷äuõúÑöóÚÊìz~èpyçëÍ]À½‚B¸>„ãüMG`ÀÎ:p8çëT~Þ{Y]ŒtÄ#Šù,nÆ8ˆp8à~Ts.à]à Æ8ü8~´`œðNF8ïÁã§Oz¥öîÂÆìƒŽ§Òƒ|H ØÝàðr:z}(ºîâ ÏÎGB7uöà 0Iéœú‚3úp*ÛÉ'67g'ŸÜŽG<}9£íç<Ù]žrsçÒŽeÜ  Ž Î#û¼ž8úP3ŒóÓ9#Ørxý*¿T;TØ2sÀNç¿j´n4q9X6¹Àý×#ê1ÇãW¡‹h=AY÷4²K#Ç<`¼ÆL´Y)ÏNzV²ªsŒÐ_bµÿŸhïØ£ìV¿óíýû5Ø­çÚûö(û¯üûCÿ~ÅMECö+_ùö‡þýŠ>Åkÿ>Ðÿß±SQ@ýŠ×þ}¡ÿ¿b±ZÿÏ´?÷ìTÔP?bµÿŸhïØ£ìV¿óíýû5Ø­çÚûö(û¯üûCÿ~ÅMECö+_ùö‡þýŠ>Åkÿ>Ðÿß±SQ@ýŠ×þ}¡ÿ¿b±ZÿÏ´?÷ìTÔP?bµÿŸhïØ£ìV¿óíýû5Ø­çÚûö(û¯üûCÿ~ÅMECö+_ùö‡þýŠ>Åkÿ>Ðÿß±SQ@ýŠ×þ}¡ÿ¿b°íqö¥Â…Bp?Ý–º*çm?ãå?ë‚è2Пë¿à" ©ï?×ÀEA]0øDŠ(ªQEQEQEQEQEQEQE¥¨ÿ¬O¢5§jºœ–mœp*ù³ÇÃ0ÈP«“ÇsMÔÖ'Ñ?šÖ±‚ûM·Žu?*)VS†SŽ ö®DQgâ”· ¦®fdYá…°ÊÙÆGU½h:jâa4É_g·@Ó|çpàîÀÆ0jÙÖlÕ›s² ÝûÆR•¨þF BOpRîAopÙ’ £ô¨é4(eÝ’¹¶%Ýa ¬à†9ëüMǽY‡R†YR-²Ç#’H…O5Wþêˆ'‘˜… ‘rWpýüªVÓ%“cÉ}+N„•“h`€:tïQÚhpÚ‚Í#yr‰ìrDe?‘Í8ëÚx” ›p*e^F@Ï©~ukð™-('&âE\4d¤éÇó¦ÁáØ UD™¶U?"î$ Pwc#€8éS¾Ž5¬«;«Û**ðBç¯×&€'³Ômïdt‡ËžYH ޏ?ˆüê 5ëÞTf}Ñö ÷¹Ç½j[-?ì—Ëç¼›Æ0@óÎ:ŸsÍS“ÃI8”Ï'•äOSÈï@[YµTɇ݌î@$‘Ør¼ûŠdš¤ƒL³ºH‘MÊ+ìB&W<3íÒ6²]Ër—E,¤†+ºUAþø^j_°2iöö°\¼^B*À;€ä A&µ¢F/YRF–w(\ýìú…T‹Äžc0kY#fmΤ‘öŽßŸ¡â§>‡å"c»\˜Ôî'—©éCè*ÛÁº“cyÃnÑÒGGàELšÝ›)cæ¢ó´¼doÁÇËëÍ'öížÅÄžYAÜ‘ø¨î´e6QGi Æ0X.I`Üœ„T6ú-ÄÌ×w “M7˜Ã‡þ^ã¯Ë@Î(ïö—îo_`ͺyŠ3é\ƒíœˆø‚Æ0DÎÈËvùxáw=Nü©×Z2\L%[‰c>_”ø9Þ:sžøÈϽV¹ðÕ½Á Í"®(dnFSÏS÷¸ôÅYMzżÍÍ$kF÷B à÷àƒBë¶Mu21/³Ë –ÏÒ’çD‚é¤2;âIZB8êP/ôÍ#h¹¶1}¤†fÉ"$ñ»Œ~=hÄé,· F$ITâ‡ëÃÞõ׬¼5üØÁ•] —¡½Lúp.'‘I„Bç‚\ÆsßïßF ŸC†e€t,hJ‚>^„ƒÁ  Ïâh|Ù<¨™¢A 2@ùäØÃê?˜>•n]zÆS#:±$2Ã&:ävê?:‰´lÿ¥J»–0Û/)!pF:rH¥}7o4ÎLìI’FNìã±J’]zÂ$W‘¾DgÝ·ƒ…,@õ8ò§6³j‘±u™H[FCóœzp*«uá¸.Y·O"©€ÈÜŒ§ž§ïqéVîôµ¹šiDÌ*¢‘´0Âîìzýêcêr3JD¤ˆÄ¨\6s’xÈÁb¤ƒRVÒþÛ2í »!yÝ‚G\qßšGÒÏî©b–$Ù¼`–³ž¸çó¥].²‹i‰š"Ìî¬>û–Ý»Žœç§­WƒZÌPËs’’#žâ[~UJ̆ž2:ÿã²ÕõÐàŠÎ+xdx¼§g½~lä}?¨Y³Æ= OýZ†óýwüT=çúïø¨+¦˜QEB (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€4µõ‰ôOæµ³gÿp×5þU¨ÿ¬O¢5­›?øóƒþ¹¯ò®B‰h¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+µÿ”ÿ® ÿ Ë]s¶ŸñòŸõÁ?ôh ÏõßðPT÷Ÿë¿à" ®˜|"aEU(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÒÔÖ'Ñ?šÖÍŸüyÁÿ\×ùV6£þ±>‰üÖ¶lÿãÎúæ¿Ê¹ %¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(®vÓþ>Sþ¸'þƒ-tUÎÚÇÊ×ÿÐe /?×ÀEASÞ®ÿ€Š‚ºað‰…QT ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(KQÿXŸDþk[6ñçýs_åXÚúÄú'óZÙ³ÿ8?ëšÿ*ä(–Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹ÛOøùOúàŸú µÑW;iÿ+ÿ\ÿA–€ ¼ÿ]ÿOyþ»þ* é‡Â&QEP‚Š( Š( Š( Š( Š( Š( Š(  -Gýb}ù­lÙÿÇœõÍ•cj?ëèŸÍkfÏþ<àÿ®kü«¢Z(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ çm?ãå?ë‚è2×E\í§ü|§ýpOýZ‚óýwüT=çúïø¨+¦˜QEB (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€4µõ‰ôOæµ³gÿp×5þU¨ÿ¬O¢5­›?øóƒþ¹¯ò®B‰h¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+´ÿ”ÿ® ÿ Ë]s¶Ÿñò¿õÁ?ôh ÏõßðPT÷Ÿë¿à" ®˜|"aEU(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÒÔÖ'Ñ?šÖÍŸüyÁÿ\×ùV6£þ±>‰üÖ¶lÿãÎúæ¿Ê¹ %¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(®v×þ>Sþ¸'þƒ-tUÎÚÇÊ×ÿÐe /?×ÀEASÞ®ÿ€Š‚ºað‰…QT ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(KQÿXŸDþk[6ñçýs_åXÚúÄú'óZÙ³ÿ8?ëšÿ*ä(–Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹Û_øù_úàŸú µÑW;iÿ)ÿ\ÿA–€ ¼ÿ]ÿOyþ»þ* é‡Â&QEP‚Š( Š( Š( Š( Š( Š( Š(  -Gýb}ù­lÙÿÇœõÍ•cj?ëèŸÍkfÏþ<àÿ®kü«¢Z(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ çmãå?ë‚è2×E\í§ü|¯ýpOýZ‚óýwüT=çúïø¨+¦˜QEB (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€4µõ‰ôOæµ³gÿp×5þU¨ÿ¬O¢5­›?øóƒþ¹¯ò®B‰h¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+µÿ”ÿ® ÿ Ë]s¶¿ñòŸõÁ?ôh ÏõßðPT÷Ÿë¿à" ®˜|"aEU(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÒÔÖ'Ñ?šÖÍŸüyÁÿ\×ùV6£þ±>‰üÖ¶lÿãÎúæ¿Ê¹ %¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(®vÓþ>Sþ¸'þƒ-tUÎÚÿÇÊ×ÿÐe /?×ÀEASÞ®ÿ€Š‚ºað‰…QT ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(KQÿXŸDþk[6ñçýs_åXÚúÄú'óZÙ³ÿ8?ëšÿ*ä(–Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹ÛOøùOúàŸú µÑW;iÿ)ÿ\ÿA–€ ¼ÿ]ÿOyþ»þ* é‡Â&QEP‚Š( Š( Š( Š( Š( Š( Š(  -Gýb}ù­lÙÿÇœõÍ•cj?ëèŸÍjݵô‰mýŸ¢(ÿX=+£NŠÎ“Thãgk~dâAL:Èg?÷ئ¢ÞÀjQYÛCþ}Ïýö(þÚóîï±O’B¹©Eeÿmù÷?÷Ø£ûhÏÿ}Š9$5(¬¿í¡ÿ>çþûmù÷?÷Ø£’AsRŠËþÚóîï±GöÈÿŸsÿ}Š9$5(¬¿í¡ÿ>çþûmù÷?÷Ø£’AsRŠËþÚóîï±GöÐÿŸsÿ}Š9$5(¬¿í¡ÿ>çþûmù÷?÷Ø£’AsRŠËþÚóîxÿlQý´?çÜÿßbŽIÍJ+/ûhϹÿ¾ÅÛCþ}Ïýö(ä\Ô¢²ÿ¶‡üûŸûìQý´?çÜÿßbŽIÍJ+/ûhϹÿ¾ÅÛCþ}Ïýö(ä\Ô¢²ÿ¶‡üð?÷Ø£ûhϹÿ¾Å’ š”VDšêÆ2m˜óŒïí™?çÆ_ûèRi­ÆjÑY_Û2ÏŒ¿÷УûfOùñ—þú€Õ¢²¿¶dÿŸï¡RÇ©¼ˆ[`õv8þb€4+µÿ”ÿ® ÿ ËZM©:©cn0OïfYÓÆ}mÐÿã²Ð7Ÿë¿à" ©ï?×ÀEA]0øDŠ(ªQEQEQEQEQEQEQE¥¨ÿ¬O¢5ªZË_.ÇNÏå¯×çõwPÇ›xO浘•]¯.Ý ôr{}k¢µ‰'öå‰,m—$õû´’Þ7’±##d2K†8¶?üUDÐ+1bódõÿFÿëÖ’ŠÔL„ŽÆsíׯ·J\r{çÛ¯_n•'ÙÓŸžnF?ãÛÿ¯GÙÓŸžnzÿ£õëOi±íœú޽9Οߛ×þ=¿úô{H…ˆ±ÇB;ò:{ž:Òž3Áöé×Û“R}?¿7¯ü{õèû:~nãÛÿ¯G´ˆXv<NŸ§Zä|§Ž8:p8ëR}G˜cþ¿úô taúvÿëÑí"#ÛÀã¶8N­&8霌p:ûtéRý?¿7LÇ·oγ§Mócÿoþ½Ò!b23ž3ŸcÏ_n”`ç¦sí×ôéRt=^nx?èßýz º~néÛÿ¯G´ˆXŒzzGÓ“ÇéIcëÈýO¥Kötþüßø ÿ×£ìéýù½ãÛÿ¯G´ˆXˆŒÁç§N¼ôëJAðF¦q×Û­IötþüÞ¿ñíÿ×£ìéýù¸ä£õèö‘ óž‡AÓÛ§ZtããôàqúÔ‚ÝñÍÇOôoþ½gAžn?éÛÿ¯G´ˆX‹cÜÐqúÐGc9zût©~Οߛ¦?ãÛÿ¯GÙÓûór1ÿßýz=¤BÄdr{çÛ¯_n”c=³ŸQ×§'Ž•'ÙÓŸžnéÛÿ¯GÙÓûóà7ÿ^i±ƒØò>œž?JLqÐúò:{ž:Ô¿gOïÍÿ€ßýz>Οߛ×þ=¿úô{H…Šópÿix#§Í[5šmŒy“œñoßó«>k~Oü?üUe9'°"Í[ÍoïËÿ€ÇÿŠ£ÍoïÉÿ€ÇÿЍf¡ñäí§þ†ÔÏ5¿¿/þþ*‘]‘‡—“ÿǹ'ûÞô™áæ¿møãaò‹}â¸ïZzw߇þ½£ÿÐ%¡ÝL’á†ú1ÿâ©ÖaVá dF#’ö o?×ÀEASÞ®ÿ€Š‚ºað‰…QT ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(KQÿXŸDþkIúˆÿÝÊ—PË$„~+M‰™bE0ÎPî›ü+¢Z)›ÛþxÏÿ~›ü(ÞßóÆûôßá@¢™½¿çŒÿ÷é¿ÂíÿYh ÏõßðPT÷Ÿë¿à" ®˜|"aEU(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÔ¼ÿ˜{«þkQÂ¥&u2; ßSR^ÇÔ?öÏù­5ãáýÐcß“\…Í<Š[ÀÓºýàúdúûT0_;Þ Y­ÌR,>`Ý:ý)Öì¿BÌ»®…°ÕGT핤׼ÅË$hÁÛ® úМ·BÁeš4'€§+£’•ˆëƒÓüâ¨Ihók-),±¬(>à!þfÈÉËÖ³/„³7ï£F|3ˆÝŽIŒçÓ§­t”V2±qmæ=Ë6#*©à•ú†çÓµ(ûSEp4ŸèÃÉÝ,Ìx;ˆŸ”¯Nr[¨_pÝ·#v3ŽôµÏywBF–/µy¦ ªÎ½Ï¿Lœi5·`“ÝJÊV6BHÙ´|Ùn»ºàõí@‰?Ú”Ýu²9HL+Ã0ç©<ž+VhšXãPJ° îî¿NÙíéÏ~”$„ˆØŽ Ì2L1ûù:Oð«ê†;M¬§;I?>½Ì”ˆ„lLøP’iŸ;f“‘ž0Hêã¿ÿ®—Í›þ{ÉúU´¬¶+j" PxÚGoóïŠÍÜRNà5.šBDweˆëµÅ<Í03¸éX±ZÜ¥œ.Ëq±0À\–õà:}Éš6”+M½~ïR»6õ'¦sŸz`k‰¦#"wÇáHf” Âzr9¬HÍù%‘ßÌØv®Ã´¿/$íëÖ¦æÙÐݲ,ŸÆƒ´úóŽxýhLÝ0FnÈsÑw þTÿ6oùï'éYS®n.ÐDæI|¦œŽ»º j%ÓÜȲI&àT+·œa³Nœþ´¬&”Œ‹‡#ØŠ Ҩɸp:rEb»†;a›*‰òícŸïg·çšY¾Ó4PBÉ>WVÁ>bwö9  ¡4¬AäE/›7ü÷“ôªQ¥[G†V ïÈ*G^µj$(˜8ÎONþæ€k©¡µó|ÙˆÃ`ÉÇÒ‡meZÎàÿM£k ‘•%¢P7r3ŒTSïIJ,ÑÈÃbݘ)8êÁÉçšk¨ažñÕŒÞl%[n °?ÔP·…ßbÞnaü!†iëŠ ,nLŒÀ"…ëòŒž c-¬ê¡¾s–…VÉÚsŒâ^lßóÞOÒÜH ËÇ’Z{‹˜S);`®N?®* —+$ÌÁ•áŽT;åÏ4½æÍÿ=äý(ófÿžò~•Š©},;ÈB¿§(ONqV´Ñ6Ù|ÇyŒoF^yÏÞ9ôöýhCÍ›þ{ÉúU)î]ËÉöÖ|4yÜAãŽNG°ö«úOú÷úIho?×ÀEASÞ®ÿ€Š‚ºað‰…QT ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(Nù‚O7ÝQ'Ðejº·aþ°‚9jÅäÍ ¹A–hÕ@ÝŽ¥jur@""Aî ÿñ5ÈQRf¶žMó[ÙÌÀ`4‘î8üTâŸÂB›!ŽÚ$íJÈ-XûE×üñ?›ÿñ4}¦äu‹åœì´Û[Ö/Ϳ¶·¬_›…IöÙ» ÇûÏÿÄÑöÙ¿¸?ï§ÿâh?¶·¬_›…"ÝìQŒ“»©9=½j_¶ÍýÕòì:sýÚwÚn¿ç‰üßÿ‰ ~ÚÞ±~mþ}µ½büÛü*o´]Ïù¿ÿJ³Ý3`Ÿï3æ´Û[Ö/Ϳ¶·¬_›…ZßwýÈ¿ïñÿ n®XebÜB ñÚ®Ù®bäc«…G'’cQŠAÇ×¥[ûM×üñ?›ÿñ4¢âè<“ÉÇ%ÇþË@ œK#ï…?óÖ/ü{ü+W}ß÷#ÿ¿Çü)†âä6§’·ÿ@¸?óÖ/ü{ü) ¬ð{ßáZh¹þâ߯ÿâhûEÏ÷þþ7ÿ@¸?óÖ/ü{ü(Áÿž±ãßáZžeÙ ýþ?áHg¹S‚±çÚRöZÌÁÿž±ãßáFüõ‹ÿÿ ÒûEÏ÷þþ7ÿGÚ.¸Ÿ÷ñ¿øšÍÁÿž±ãßáIƒÿ=bÿǿµV[¦ ?ë±ÿ ]÷Ü‹þÿð  ¬ùëþ=þ`ÿÏX¿ñïð­]÷Ü‹þÿð£}ß÷"ÿ¿Çü(<ˆEº*Ⱦb¨ƒƒŒô¨ßz›]ùsG“ǹZÕßwýØÿïñÿ 7Ýÿr/ûü€2ˆ$äËþ=þ`ÿÏX¿ñïð­]÷Ü‹þÿð£}ß÷"ÿ¿Çü(+þzÅÿ…?óÖ/ü{ü+W}ß÷#ÿ¿Çü(ßwýÈ¿ïñÿ ÊÁÿž±ãßáFüõ‹ÿÿ ÕßwýÈ¿ïñÿ 7Ýÿr/ûü€2pç¬_ø÷øU½)vÎü†àd€qœJ­[ßwýÈ¿ïñÿ "–Wºòå¾WÜUý¿Ù  —Ÿë¿à" ©ï?×ÀEA]0øDŠ(ªQEQEQEQEQEQEQE¥¨ÿ¬O¢5¡ÚE¶â5Ú¥¶‚p;ö£QÿXŸDþkHèÏnª’ylQ@lg ä)nQ²ÕšúæHa·pa}²ï;v ¼uÎF?Ù'"­Ý“å¯=Ïò5“£Åêmj·|ÿè \ûZE­œÖŽ-d”ïcœŸ Åo·úø?Þoý¨ë Úkqõ ϶æFÚ c' À$çÓ€jjν1­¥–ØÜ ëµÉݵ±úúÒz*îÅ«{¯6!+©…Xü›Î /®;Sålªr ‰Ðÿ´*³+ å§Úåb[å\GÓŒŸçÞ§aˆaÄ^PÞ˜M mù‡aM [èLzš…äò¢‘ñœ™©SUçÿi~¿á@ˆ¾Ý'üð÷ßÿZ¦Šs4NJí#Œg5žY=ÿJµeþ¦\ž(â}ÅúSGúÖÿtZr}ÅúSHÌŽ=TZ¯%ò£íUÏl“Šž–e%ràƒYn›[kñŽ \±S½ßøqгÜüOó§Ó#ûŸ‰þtú(¢Š(¢Š(¢Š(¢Š(¢Š*(ä"ÿî/þƒ-KQEÿ!ÿqôhµçúïø¨*{ÏõßðPWL>0¢Š*„QEQEQEQEQEQEQEij2Æ=B5¤ãbí„Ú8“ž?ܧ_ÿ®éóZyè¿îå\…íºÿžò“ÿˆ¦K Ä ‹h<,‡±Ü©¨  -at̓Ôe$ÿâ(K+ÈÉ(ª êvIÿÄUê(Øn™Ë:ÿ BI*G÷}êä‚á¤b g#+'ÿN¢€¶ç9ò~’ñ*Než"7•$$åHþèõ§Ñ@þxÍÿ~›ü*4ŽácD9Ø d¬ƒÿd©( bëþxÊOþ"ÇråCE´RHYƒýÏj’Š|ÿ©›þý7øT{e‡Ùä œó…IECä·üù·ýûoþ&”$¡H[g\úFÿüMKE"«…É›ÿ<›ü)¥eX% €9‡ô§Ñ@²HßzÕÏÖ6ÿâi@˜ iÿqÿøš}ÔYpa›<ô‰¿Â‡ÿž3ߦÿ ( ÿôå$õ|¡¸=.ìʯÈr>¹Ïõ aW ¸'©É'õ оÅ`òUÀÉ `zõ?•8³ £íà÷Å<lÀL`}:Sv¯ŸJGi¶##·Èþ•&ÔQµŽA ÿ>;ôõ …*Whã8'ßüM5˜†*ªX‚s€OO  —ÊSg‚px§¤òƒÆæçëÏ4Ý©’J)'×8‡JDmë¸> ÿ*u+37SšJ(¢Š(¢Š(¢Š(¢Š(¢Š*oøü?îÿñêš¡¶ÿÆÿwÿP{ÏõßðPT÷Ÿë¿à" ®˜|"aEU(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÓ¿ÿ]Ò?æ´óÑÝÊ™þº?¤Íiç¢ÿº?•r%Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Cmÿþïÿ©ªoøü?îÿñê¯yþ»þ* žóýwüTÓ„L(¢Š¡Q@Q@Q@Q@Q@Q@Q@wÿë£úGüÖžz/û£ùS/ÿ×Gôù­<ô_÷Gò®B„¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¨m¿ãðÿ»ÿǪj†Ûþ?ýßþ=@ï?×ÀEASÞ®ÿ€Š‚ºað‰…QT ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(NÿýtHÿšÓÏEÿt*eÿúèþ‘ÿ5§ž‹þèþUÈP”QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE ·ü~7û¿üz¦¨m¿ãí¿ÝÿãÔ^óýwüT=çúïø¨+¦˜QEB (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€4ïÿ×Gôù­<ô_÷Gò¦_ÿ®éóZyè¿îå\… EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPPÛÇÛ»ÿǪj†Ûþ?û¿üz€+Þ®ÿ€Š‚§¼ÿ]ÿtÃá (¢¨AEPEPEPEPEPEPEPÿúèþ‘ÿ5§ž‹þèþTËÿõÑý#þkO=ýÑü«¡(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š*oøüo÷øõMPÛÇã»ÿǨ½çúïø¨*{ÏõßðPWL>0¢Š*„QEQEQEQEQEQEQEißÿ®éóZyè¿îåL¿ÿ]Ò?æ´óÑÝʹ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¡¶ÿÆÿwÿTÕ ·ü}·û¿üz€+Þ®ÿ€Š‚§¼ÿ]ÿtÃá (¢¨AEPEPEPEPEPEPEPÿúèþ‘ÿ5§ž‹þèþTËÿõÑý#þkO=ýÑü«¡(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š*oøüo÷øõMPÛÇÛ»ÿǨ½çúïø¨*{ÏõßðPWL>0¢Š*„QEQEQEQEQEQEQEißÿ®éóZyè¿îåM¾Gi¢î*¨{ã‚§®=ªÜñû¶àc¯ÿc\…ÑP¤ÿÏ6üÿû?Òç›~ýOEAþ“ÿ<ÛóÿìhÿIÿžmùÿö4=úOüóoÏÿ±£ý'þy·çÿØÐôTé?óÍ¿?þÆôŸùæßŸÿc@ÑP¤ÿÏ6üÿû?Òç›~ýOEAþ“ÿ<ÛóÿìhÿIÿžmùÿö4=úOüóoÏÿ±£ý'þy·çÿØÐôTé?óÍ¿?þÆôŸùæßŸÿc@ÑP¤ÿÏ6üÿû?Òç›~ýOEAþ“ÿ<ÛóÿìhÿIÿžmùÿö4=úOüóoÏÿ±£ý'þy·çÿØÐôTé?óÍ¿?þÆôŸùæßŸÿc@ÑP¤ÿÏ6üÿû?Òç›~ýOEAþ“ÿ<ÛóÿìhÿIÿžmùÿö4=úOüóoÏÿ±£ý'þy·çÿØÐôTé?óÍ¿?þÆôŸùæßŸÿc@Ô6ßñøßîÿñêOôŸùæßŸÿcNµŽAp]Шێ約žƒû€+^®ÿ€Š‚§¼ÿ_ÿtCáQEwQE\Š(¢àQE¢Š(¸QEÀ(¢Š.EQp2ĺ‰bwF=‚RÂI¨ÿ~?ûæ²OZJä(×ÿ„“Qþü÷Íð’j?ßþù¬Š(_þMGûñÿß4ÂI¨ÿ~?ûæ²(  øI5ïÇÿ|Ñÿ &£ýøÿïšÈ¢€5ÿá$Ô¿ýóGü$š÷ãÿ¾k"Š×ÿ„“Qþü÷Íð’j?ßþù¬Š(_þMGûñÿß4ÂI¨ÿ~?ûæ²(  øI5ïÇÿ|Ñÿ &£ýøÿïšÈ¢€5ÿá$Ô¿ýóGü$š÷ãÿ¾k"Š×ÿ„“Qþü÷Íð’j?ßþù¬Š(_þMGûñÿß4ÂI¨ÿ~?ûæ²(  øI5ïÇÿ|Ñÿ &£ýøÿïšÈ¢€5ÿá$Ô¿ýóGü$š÷ãÿ¾k"Š×ÿ„“Qþü÷Íð’j?ßþù¬Š(_þMGûñÿß4ÂI¨ÿ~?ûæ²(  øI5ïÇÿ|Ñÿ &£ýøÿïšÈ¢€5ÿá$Ô¿ýóGü$š÷ãÿ¾k"Š×ÿ„“Qþü÷Íð’j?ßþø¬Š([þ-CûÑÿßÂEëýñY4P·ü$Wþ±ßÂEëýñY4P·ü$Wþ±ßÂEëýñY4P·ü$Wþ±ßÂEëýñY4P·ü$Wþ±ßÂEëýñY4P·ü$Wþ±ßÂEëýñY4P·ü$Wþ±ßÂEëýñY4P·ü$Wþ±ßÂEëýñY4P·ü$Wþ±ÿßÂEëýñY4PÿÙlibstruts1.2-java-1.2.9/doc/images/how-to/netbeans/creating-project3.jpg0000644000175000017500000005646210404045250026546 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„$=($!!$K58,=YN]\WNVTbnxbh…jTV{§|…’–ž ž_v®º¬š¸›ž˜$ $H((H˜eVe˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜ÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀc¤ÿÚ ?»¬j3ÙI‰€R…› ž€tæ´§-ÉnÅ%ÖîÊ'h< Ãþ«Ob…ÌÈ¥×ïãG·Œá”§z(®¡ÌÆ_Ž¡=:ñ£ÙD9˜ßH ÔàñúÒöQf8ëúŠ®J¨»[Îeæcá"¾ÿ¦‘ÿ~Ê!ÌÅÿ„Šûþ™þGühöQfð‘_Ó?ÈÿÊ!ÌÇ.½¨6vªœuÀ?ãKÙD\ÌS®ê 2Ê z•?ãG³ˆs0mwPQ–UÝOøÑì¢>fÛÚ€]Ø]¾¸8þt{(‡3k÷ǦÏÈÿ?es0ÿ„‚÷ý×üi{(‡3ºæ Ã* `Ægæc?·ïØüøÑì¢Ìp×o˜àm'Øñ£ÙD9˜o^ú§ëþ4{$ìQ®_›OÐñ£ÙD9Ø«®_1Âí'Øñ£ÙÄ9˜rõNÐ}?ãG³ˆù˜øõ}BDgUWï­/gæc?·/=Wõÿ~Í ]^ýÕ™`½HÖ—³ˆs1§[¼hüøÓöH9˜n^z§ëþ4{$>fÛ—~©úÿÉ ™‹ý·y꿯øÑìs°þÛ»õ_×ühöH9ØmÝú¯ëþ4{$ì_í«¿UýÆdƒ™‡öÕߪþ¿ãG²AÌÃûjïÕ_ñ£Ù çbÿlÝú¯ëþ4{$Ì?¶nýWõÿ=’3훿UýÆdƒ™‹ý±u꿯øÒöh\ì?¶.½Wõÿ=šfÛ^«úÿ?fƒ™‹ý±u꿯øÑìù˜kÝz¯ëþ4{4.f/ö½×ªþ¿ãKÙ çaý¯u꿯øÑìÐs0þÖºõ_×üiû4Ì_ík¯QúÿÍ™‡öµÏ¨ýÆ—³BæbÿjÜú×ühöh9ØŸÚ·>£õÿ=šv/ö­Ï÷‡ëþ4{4ÌQª\úÖfƒ™‡ö¥Ï¨ýÆfƒ‡ö¥Ï¨ýÆfƒxíšé!E£‘J7ܯ¹|ÝÊYP§Ž©­˜‘^Xõ›lJËÚϨëDïašpÜXß*<Ñ¢HK\à3màÖM5°]1¡á[kÈâ†8Ý㌈ÙÔ†!ŽO\~kt‰æ­¶É"ͼkùÉã#¾´’w^æ'¹Ž4HâÍâmêA\t#üi¦ì-ÉŠ@Òì‡Íòì,ÌŽëŠ.î ¶ú›(ýÚåUƒ–TíÉÏ­hSÒ¬7Ø‘Wt$ °?ç5Sè$^¹•;É*5¹¶U ¾8ãØÔ¡•µé“˜dùpÂLƒòúv§ …!Ñ:|©4Ñüè¢3¼צ;}h{è>§­´)u’ —ÉpÇéòš%wf$fEåmo3~{m"¬ =>æ;}3s1Ü·*ÛU°HùTI^E'd8›)£I`Ììe ýѺ—½¨hOo¿Û­WdBGw ¨xÛØñÞ“nÌz\…ã³[DÛ¾cœ8[<ûÕkqibXŒP_È#¬-,lù¸ïÿ×¥«CÙ•´Æ+5à%#v‚€À ät4å²,²Éµf)%ÂCÏ# Ùõèx¥¯Aè6v€Ø¼J÷ ò– ´mäñB½î'k,FÝÞPmΣæÁÊÙpÿÏÓÿß“þ4{GØ9EþË‹þ~›þüŸñ£Ú>ÁÊ(Ó"ÿŸ—ÿ¿&—´}ƒ”?³bÿŸ—ÿ¿'ühö°r“Å£•ã»uܸÈLdƇSÈ9DþÃóóÿŽõèö¾AÈ/öÿŸüsÿ¯KÚù aùø?÷Çÿ^käýˆ?çàÿßýz=¯r‹ýŠ?çãÿÿëÑí|ƒ”?±éãÿÿëÑí|ƒ?±GüüãŸýz=¯rö/ý<ãŸýz=¯rö(ÿŸƒÿ|õèö¾AÊ/ö0ÿŸüsÿ¯OÚù cùîïþ½/käýŒ?ç¿þ9ÿ×£Úù cÿÓÇþ9ÿ×§í|ƒ_ìqÿ=ÿñÏþ½×È9ûÏüsÿ¯KÚù cùïÿŽõèö¾AÈÙþ{ÿãŸýz=¯r ý?ç¹ÿ¾?úô{_ åì‘ÿ=ÿñÏþ½×È9EþÉóßÿÿëÑí|ƒ?²‡üöÿÇ?úô{_ äì¡ÿ=¿ñÏþ½×È9û(Ïoüsÿ¯GµòA²ÇüöÿÇ?úô{_ äì±ÿ=¿ñßþ½×È9û,Ïoüwÿ¯Gµò@þËóØÿß?ýz=¯r‹ý˜?ç·þ;ÿ×£Úù fùíÿŽÿõèö¾AÈÙ£þ{ã¿ýz=§r ýš?ç·þ;ÿ×£Úy fÿ-ýóÿ×£Úù fùëÿŽÿõèö¾AÈÙßô×ÿÿëÑí<ƒ_ìïúkÿŽÿõèöžAÊhK÷‡Ð*ȳ;í¯æN?v-Ùàç~T«©B0$;[s;ÄúPÚ¯{pÖë]¹wÛ–ÎöúPo|HÜügh88ë+¿µ>B¡ÁÇ^(ÕV$ª®Ñæ—ØW==Oå@ Q¼µ-ó2ƒÇ©Çë@}¶ }ïáÝŒ~ŸZœœ¡>Ô•,¦##h$…Ë[_A—ˆr‚ ’GL óôâ‹€­w‘»)Ž¡‡#Š.·‘²å1þè4\[Ïç0¤lG^¦˜0Ǽ_îÖ(CªeciB…uÎŽ3Þ€,\Þ¬2lQ–¹ã@ ÚËp± 8dgÜF2cÛš³@æL³º¨ˆIåðyÎpç@ :œ$Ýóõõ(¼‹dó- °#€nãi„cvX8$uþT=@÷>[L`  ¸þ!þ9Ïé@Bb’:˜@8Éó{ÙÃüã#åíë@·±ž¹8$ ÉþT‚ú2 €Ë¸»‡Þ€ãó%üN¶¸ÜPW–Ò€&‚d &p Œr(CÓŽ´R+©Ì«ò¾Åä’hæö 3†Àn>ç$sùÊ€ò6Õe!˜žƒ `‘@¨)¥òš<µ›i>ž”Uõ¶îû6°<î1œþ@ÐÂú/›!ÕA 1:ãò ¥ò´Žž[åH@ùºsÅ?í°Ý¿ŒŒuÈÎ~˜þF€&ŽE1^€â€s/‘m, gb–ÇÒ€+¶£ ÈF~P¹Î9ÏNhŒF@%X ¸%¾n?ñÚµ‹*^‡ôõ P@ù~ðúå@YN&ƒÈ˜¬¤åÁ\ ÷ëŸÒ€`ŠÙWa’wtç’§¥[  ÷¨Ì±² #äy{sÐâã½D-LèL2€Á¶å°xé@ZÚ­¶í®Ä688ã=SÉ[–˜YÎ[ÎS_½ôü¨Ðؤ%6;a@Èã’Ï^€XÂqü{¿úßJ°ßtý(.UÝ gc>ÒÕÇõ­º%”H^7@˰©ÇN}½Fö{äÜ·©=O§X‹\`‰X8ÏÌþXÇj,‘Eå!‰ AÁíÆ?¥;~ø÷‹ýÚÀeíØªC,W-«»ËxÆx9é@=÷¼²3 '±þ$6‹ ªáÜìRЧ á@(‡–é+ Ä‘ï.äÛœç=sùÐÆž #n06Óë@ úz::ù²"äc-Ÿÿ_jlV²‹°ç 32€ùëœñëžôv€#––H݇(r=ÿÉÁüC-𱑷>UqÉ#hòMÀRÂXvàmm§8ïÆqøP,Pdp¬rëÇÍÉ?Ö€ØÆV%Üߺéïóÿ²Ð%²ÄQ²^$™ltÇ=¥Kg A rÌÅ9ëï@žLÐ4ŒÈJ˜gˆ—ó±Cƒø@ lSyŽŒIÓçäŸÃ©éë@J âGI8ã×?‡^Ôf€ ¼]ðíòžLŸàÆGæEA$"邽¬Ñ‚…7˜Œv'ßó  ZÊ7Œ!-€Ìß‹güh–È'“Í?ÇÁíéŒv û ? ÛÂǰnß—?™  âŒE¢ôQùÐnPIo"Ä2‘…Æ Ðg‹íSx&ˆÃ6Â9õ4=†d‰ÒV ¤eºtü[§Jµ bÂ)'’I=É94ú( €6LŠÆG¦{Pqþßþ;ÿ× íÿã¿ýz1þßþ;ÿ× oûøïÿ^€ ·ÿŽÿõèÇûøïÿ^€ ·ÿŽÿõèÇûøïÿ^€ ·ÿŽÿõèÇûøïÿ^€‡Ê~~ßÝÿëÐ$1l_’nƒø‡øVÚˆ\ÅýÉ¿ï±þj˜¿¹7ýö¿áF ‹®É¿ïµÿ 5Ì_Ü›þû_ð£P³*¨P³`tù—ü*y@<ñé7ýô¿áG( çI¿ï¥ÿ 9@<ñé7ýô¿áG(ž=&ÿ¾—ü(å<ñé7ýô¿áG( çI¿ï¥ÿ 9@<ñé7ýô¿áG(ž=&ÿ¾—ü(åóǤß÷Òÿ… xô›þú_ð£”Ï“ßKþr€yãÒoûéÂŽPNs‘‘×Ó­ŽûÌDÙb6ç ÄŠ.â–V¹tt ¡ëžr„õ¹½“Ë#åó7ã=¶çùÒ»O·|ÅDGüŸ×¥-U†X¢YÙÙr²1Æ~”Ð `cPñF¬Ÿ1+àOAßêii*B¤Ž:PdkmæšvYÔå™Ö2Á‡¡)šWbÆV–k’[x]Нýà7~´ eÊb( ㊞ӫþ,ÿêýÓ@ãVò×å=jÜC¶·÷Oå@Æþéü©4š³9â–@›@ùz1‚O^9Èë×·¯5š…†+À~Î# _œ{ÇáZ-„5#•œ4±(*>R¤Ÿé@ 6K•Â'Øz”Y¿cLcc{Ç#è{~h’ÙcmÊŒ1ÔóίZ4>ʘǖ_\ÿ:4>Å`ÞQÈé׎Aþb‹ ìã|îˆÇ'¯4YØ3(f è»O¦=¥dµT`Á°9‰'Ó½&Öþéü©.ž¿ñ4‡ê?ÚZÎ`ˆ¯VKr)FÆ”ÏOœeÑ€moîŸÊ¬ktþTmoîŸÊ€ ­ýÓùPµ¿º*6·÷Oå@Öþéü¨ÚßÝ?•[û§ò ktþTmoîŸÊ€÷ƒiÎÑÆ=ê&jÆä¨ yÎ3YŒ¼ …œ‘Þ€*ê+!r•A$ƒ‚¯ó¦“Ø¢¬RRs$[[Œ¶ãÓ¿'5 ¾¤^Úšñ34jλXŽEQ¢!»û«ŸZ¬§s“¸có  Š]ÈÆE\áq@¼×2rÌ2~îhõ[±ÿqþó3@åÿZŸîÿì´êx=»õ  ùi’B(fêÀsùÐCBF6î9?çñ Ð† `($ž¤šJi ÉAŸ¥*¨Q… ".#A¾Oº?‹Ú©½@v?Û—þû¥p¸Ì®3Ó/EÂÃDˆ[h³éæQqÙÇûrÿßt\Aöåÿ¾è¸?Û—þû¢àÿn_ûî‹€cý¹ïº.öåÿ¾è¸?Û—þû¢àÿn_ûî‹€cý¹ïº.öåÿ¾è¸?Û—þû¢àA-¹’uc+ìØÈÃw$;öéEÀŠ3ä̱ï`GÉ€Ø%„þ(¸1þÜ¿÷ÝÇûrÿßt\íËÿ}Ñp ·/ý÷EÀ1þÜ¿÷ÝÇûrÿßt\íËÿ}Ñp ·/ý÷EÀ1þÜ¿÷ÝÇûrÿßt\íËÿ}Ñp#ñðܱùGÞ9îh{% GE‘ 0Ê‘‚(1m ²•Œ ¤‘õõ¢Â±-´˜‚€€ o–™ÎÑšu[±ÿqþó3@ï<ß—ÉŽ'l ‰O¡  ¿é¿óígÿ}Ÿþ&€ôßùö³ÿ¾ÿ@úoüûYÿßgÿ‰ ý7þ}¬ÿï£ÿÄÐþ›ÿ>Ö÷ÙÿâhÿMÿŸk?ûèÿñ4¦ÿϵŸýöøš?ÓçÚÏþû?üMé¿óígÿ}Ÿþ&€ôßùö³ÿ¾Ïÿ@~Ùƒ›{?ûèÿñ4m~âº?•7¸ H z‹EÚ>npIû¾ý &iM\­lÁ.P6\; R\ §wŸðÍI«NÏúîhÜJaä%GJ³˜‰šXO9¤!T6Éê;qèh¨H[j[‚À…b_Å}=G¥95ä‘Ȥ;½N8ù "Ô¤Æ<¶‘˜åFj“÷AîÞ”bêvgÚÒÆ$É;cÜÝ3Œ`ÐGy(FC†BªNìe›¯?Ö€& ÑÈU¢;ÇÊUNFî=³ßÓð  #¼’N܆sb¼gdsÓ¾(K)%–Ò… ÇÊsÀb=(z(ÀÎqÍP$b6…ÆXã'·þ”Ð i™\¤’´íp? §–#€MÅØK´à.qÈ<þ?Ò•´«>S$séלS°·ɇ]«Ï$ŽÄZ-  æ¾é:aN1´ÿ:,¡“Ì Ê¶ÓŒ¯CI«% +Mçyÿ¹Ž;F|ÂF9>ÆŸ@þ›ÿ>Ö÷Ñÿâi¦ÿϵŸýôøš?ÓçÚÏþú?üMé¿óígÿ}þ&€ôßùö³ÿ¾Ïÿ@úoüûYÿßGÿ‰ ý7þ}¬ÿï£ÿÄÐþ›ÿ>Ö÷ÙÿâhÿMÿŸk?ûìÿñ4¦ÿϵŸýöøš?ÓçÚÏþû?üMH“êH¡R+UQØ9ÿâhÔ¿x}ò erqŽN9”¬LèPœÈÈëNÎàH¿q?Ýʓܤ2†4Ȣǖ¥$¬Ü„(ã€Ý)R+B2²ÇSÝ]‰Bz~8¶…z íßÐä~¤Ðic ÌÒmëŒOñ }Ž »DxÌAèô•Kå¦Pí'ÝÇjF†6 ýþ[ßüâ€"QnÎ6à œýs×< q´€…8矯¯ã@Ž$ˆ0A€ÌXóÜõ Ð@P2†"€bCŒ¯AŽ´îÀpU‡\þ4€MŠ[v9§p-?»þzÑp†Fqøõ¢à.ÅÁàòi*„Q@ @øø?îæiôJ@P@P@P@—ï þT |g±Í4ìÔ–ôe Ïüh¸ 0nl³gÔÓ¸ã9 3ÎùíJà(Œã' ëô¢à7ÉpÌXö'µDCŒ’qŸj.E¸pc»±ôÿ9§pm°`Ç çŸÇüh¸hƒ6r@8ÈõÅ+·Ä ;Bà{œSæÔDë÷ýÑü©=Æ- +^Ü=º£"äó¥±ùUÅ'¸™wM´BØC¹*9ϳÊ©Â+¨®Ë’ȱFÎç ¼“ŒÖE Šxæ$&àGfR§ò4­*,‹$3tàó׿àh3F¾f[XËqÐPC€IH€ ( € ( € (YGú*Š€ ( €(IusçJ±$[Q¶üÄç ?Ö€ö«ßîAÿ}ð íW¿Üƒþú?á@Ú¯¹ýô€µ^ÿrûèÿ…æ÷¤úŸð  û‰þèþTÞà- #•[r:à”9ÁïI€Ší4Ë.6€0Ç×ÛüÿúÒ¸ ¾C%œ¨½Júãõª’BMÂÍœ¦Æ›{g¡$úÐ~Ãt\¶I,r¦LŸüP  ã¶qØX„bU nœcð k´ËJC åˆè°8Ç?­A5´Š?Õ€ÛŽ\c2e¸¼{Є«¿!‹oÉ\IóG' Ï­O¶ËÄ”[,k°ŽùzõúPê( € ( H Ú@ÎÓœzðGõ¦€ŠHܶåR¤©61Í4À_%‰9\9€Ÿé@ qpñÈŠ»Få'%IôôúÐMx#Q€O8-Ž:dÐV÷( # –ÉÃ? ”f1¦"º==>µMjåÿç“þcüiX/ÿ<ŸóãE€2ãþY?éþ4X·0!¡bPqþ4X$J‡)m´ú€£úÑ`—ÿžOùñ¢Àùäÿ˜ÿ,—ÿžOùñ¢Àùäÿ˜ÿ,—ÿžOùñ¢Àùäÿ˜ÿ,—ÿžOùñ¢Àùäÿ˜ÿ,—ÿžOùñ¢Àùäÿ˜ÿ,—ÿžOùñ¢Àùäÿ˜ÿ,—ÿžOùñ¢Àùäÿ˜ÿ,—ÿžOùñ¢Àùäÿ˜ÿ,—ÿžOùñ¢Àùäÿ˜ÿ,—ÿžOùñ¢Àùäÿ˜ÿ,—ÿžOùñ¢Àùäÿ˜ÿ,FB·81¾Jp8õúÓ¶€;íîw^ô¹X ’ïr 1žhjÀIH€ ( € ( € ˘mÔ dT-Œߊ£-Þ><Ö‰ñÓrçŸjÓrbÈ— çL #þ@ žâÆrÚ`î;Tž™äš;û(ãTI”*€ç¥WŠD‘çt`U¥àúü¢€`Bß|ìÎJqŒÐÑJ\§8^021éžæ€$AÝ]edeeqÓñÔÇ´ŽL†‘ðrpêF  û$c{¤28ÉùŠ+÷ýÑü©½ÀZ@Aw3AäPI8Éè(èçi`$™äP!îëc…MGÂIœnR:‡R¿Î€²£Hц”#ØçÊ€ÔR¶Õ,:à²=3Ö€%ܾ£Ö€u`0zŒàõ ´Ñ«"–vÚ¾çþ”ž|~kE¼UÜAì=hbš9Q]a•÷ IÀ õÁëùP%¸Ž&‰ÏS…'Ôú rJŽ2¬1’¿ˆ84íÃ$dqÖ€FAÈ €˜(Ë Œr2(A¡ Þ¡¶î½(°áŒäb€ÊN23é@åÁ9uö  €"Ú Öîá1úÓè°*àØÀã׌Qp"r‰Æ9ô¢àIH€ ( € ( €*†”g²ü©Å]ÓÇ‚1’6ÝØ@NçZr¡½Üh¥žÒuQÔ•<~´¹PÊ 8Ø?3UÈ€M©ýÁùš9Ôþàü͈h¢o½œzæŽD~ÏüðOÊŽDöx?ç‚~Tr ³Áÿ<ò£‘}žùàŸ•ˆkxŸÜ'OJ9_¸ŸîåY=Æ- "¸„Ì£ÞªŒ¬&Š7Vk   Á‚² ¨ÁåÆjÕ²œŸ-‹ª’b²ÌGFî=ýé’Š’ZÏ,[HeŒ0>YpIëßÓ§ZIchmçf(hÀÎrAÉ8üˆü¨ŸÙäÛmf,û¸¸Q»'…,öÌ®åQvîVWQ@QõÁüètùp¥·+lmßwåÆ=hahÞdöh×ËpNÉàŒþd~T—q)»gi’=ÁG,Ç9 c²‘„-C±— ¬0<ŠšÚÅâ‰2¨%Ü:à*‚3ø²É,s;Ä¡üÌg'q@§°ÁÛÙb¤mËüˆé@}‘üÉO”¸`yÝ×üûÐÖq<m1…Ët ÅN¥Þ]¼ù ‘IÚTd©Î=x#úÓ@G$LÌ ¤pzsM0 ’>b¸bx4\o7 `“ϯ  XT€qžzûÿ…; `d2ñ÷²sœdñEÀGØÉŒaúZaFAR1h­Á"~ /õ­"“B¹¿¼:®T¹¿¼:9Pæþñüèå@›ûÇó£•noïÎŽT¹¿¼:9Pæþñüèå@›ûÇó£•noïÎŽT¹¿¼:9Pæþñüèå@›ûÇ󣕢ÿëOýsÒ³†ã)M “]ºÇ/—ûµÏ†ˆÁÁsU5v$@ׂ9¬FæU$0Xðœü½†Meä2Ö«ÿròÈÉ=#­nþ¢Eû<°9,r!LŒq“Ôôÿëu"‹—R‘2‰Ãà•U Õvçv{þ®Àîd…ŠIûÅVýÖÊ’רÜÑw`%¸žæ+•ŒK@~cä“ 8ö¦Û¸/+éÉ#åŒnF1Á£[jqÛþþæ@±íŒ€ ¯Ì0‹Ðç§áB@WŽêát@yŽ78ýJl ~tÏq,Buƒ… ¼wGÔälŠ«»u~âº?•d÷´€( € ( € (¬ˆÇ,ªO¸ (ÀjZ( € ( € ( € (  ·?ëÇû¿Öµ†Â#ª € ( € ( € ½s/’Û¶—Ê…êzV1vc)¼«#ïkY·cW+ÇàE[qbZ6k[‚Pfbþ=KÝ1½bsöi?Oñ«çB¶7üûÉúè­ÎÂÅmdŽONOçG:ßloù÷“ôÿ9ÐÛþ}äý?ÆŽtd¹ó#d{i ° Ž9è[¢ª[Ë€02Aþ´s íÿ>ò~ŸãG: ã#ìò~”s ,/ÜO÷Gò¬žãeýªáu×·E/PHþçknXû;õõ.ß;Gg+¡!‚ðEb2%–[x·J®Fì|ì¤ûc{"ÎPÂJ¡ ì=HúÐÒêOÝER6áº3ÍWòù³¶Õh×j¢©É$».J–K™[O’M­ŠqÀç¨éšHgfXг+䆓†mÎGâJk_¸H™“@vžvûþt±ßJûAƒk97dA?Ò€%·–g¼•$Qp眕Z € ( HÄm ÁcŒúqŸéMÆ•‘°Fàœ­;yäc(NXŽYØKŽç?­+h,ħ#ùóŠvv2a— ó~„ ,epd=”à Z,€’&f?ÞSƒI€ú@U¹ÿ^?Ýþµ¬6PP@P@PËϾ¿Eþb°× *˜ÿÕ,J¹(9$ŒÐ{cåêÐB®ÒFùÌçøIü:Pß“üóOûäP+›˜â½Ë¹bªÃÌ&rHÀç¥ {jZ@Ñ(Úp6©bÜ‘À=¨o´YoU l`„Èç¦N0± ÏdìæõÂd°ã Ç¸â€"[Û&£TXÆG|c§_jW½ÓãPÎUr ÁŒîããî?8ÜØ…V;pé™ÈúŒqøÐ†Š-„ˆÓ§   ÷ýÑü©½ÀZ@Њ®Ìn§ÖÀI“̉“ w a‡€†Þ×ËÎõˆŽÛAþ¦€$ð‡WÊ0 µ€+/”¸n´ XqŒŒÙÏó ˆcùaÏJqE.¸ö?þª„ÚC¸@¸mÄô¢ÖŒ¢%ÚrAm¹)Û·#Ò€$ € ( e 0Ã"€ƇQÀÅ;°(|ÒØ»·`nõ¢à'–ŸÝî±A#8üzÒ¸ ´`Œuë@ª ÂŒ Z«sþ¼»ýkXl":  ( € ( € (  —Ÿ}~‹üÅ`1+”mñBeYNU€Æ;š,¬%kÑup¦//î&A$ã8íÏùî­@ˆ»yó’È©ŒtÁ'?øõPm ,]·d "ܽIéŸz4ò“Bé"¨ŒÄ`6`Golå€Çaû»‘…O5Î ão\îKÆ€ÚQt+$Á” R qÛ‡~žß­ ¤¨”lzÒ`e‡SÎcxò€éœ?ëÓô©èg²ÐÑ–9?³Y¨m¼n8Àì «E«õ+ÊŸmmÂH÷Œ~í$ g¿ã@Ä‚p‹óFÙ(w1Ïá‘@ 5´Ëƒ´Gã‘’['=?JX!ilïP'œNÁÈtç@›%óâ~_i%‹œ“Ç]­e_(l«(,½_çS“ô :Htù#A‘¸®2 äIÃùЛ{vŽèÊa&>SÐäк( € (’);JŒ•9ǯ¦€ŽH™›p¤œÓLò #æ+†'ƒEÀRæä óý)_@°º©ã<õïŸð§t,$ ¼}îsÓ'Š.ŒD‰3ÎãÓµMjåÿç‘ÿ¾—üiX/ÿ<ýô¿ãE€ãÜŸ”ä|ËÇëEÞF Gþú_ñ¢À r Çü Æ‹¹ùäï¥ÿ,»€eÿç‘ÿ¾—üh°_þyû鯋eÿç‘ÿ¾—üh²î—ÿžGþú_ñ¢Ë¸_þyû鯋.àùäï¥ÿ,»€eÿç‘ÿ¾—üh²î—ÿžGþú_ñ¢Ë¸_þyû鯋.àùäï¥ÿ,»€eÿç‘ÿ¾—üh²î—ÿžGþú_ñ¢Ë¸_þyû鯋eÿç‘ÿ¾—üh²î—ÿžGþú_ñ¢Ë¸_þyû鯋.àùäï¥ÿ,»€eÿç‘ÿ¾—üh°_þyû鯋.àùäï¥ÿ,»€eÿç‘ÿ¾—üh°®3çò¥~^äþÕ¤6Ê  ( € ( € (  —Ÿ}~‹üÅ`3Fßþ=ãÿt*’€ ( € ( €ÿq¾”š¿q?Ýʛܤ;„\Ÿÿ]R½¼x&¶L¬{Ü uQ?­RÓb¹nIV8Œ„ü g"¤`%Œ°Q"n=ášQ,dp£$ç¥6Kˆ£ˆÈÒ.Ð3œõ Ér‘¤m†0áB ç‚ G4r(`ÃèO"€MÁ Nàxã­l{Cy‰µ¸#€fŽ`Æ6k?Q@ € ( € ( € ( € «sþ¼»ýkXl":  ( € ( € (  —Ÿ}~‹üÅ`3Fßþ=ãÿt*’€ ( € ( €ÿq¾”š¿q?Ýʛܤr£®‡ ‡#Þ“¬öI}0šA³³ã«ã·ùÿõT'(¦„Òd÷Q¯Øž5)…ÀÉÀP) «ƒ|¼á~`ÛÉý(;k9´¢!D/#yÈ<útÇ~´'ØŒÌë^6 ¹ÈRhymšT¶Rvym–ØÄcå#ƒøÐÄ6À£r¨S߃“Ÿ­A-œ²Ì~P™Š©8¦qßiúP‘ÙÉGg £9 gçôö  ¼Ô¢Ò•=L¥ÞP8yï@ € ( € ( € ( €*Üÿ¯îÿZÖލ€ ( € ( € (åçß_¢ÿ1X Ñ·ÿxÿÝÊ€$ € ( € ( a• zPp†à*$ðûÃÒ›|«ùâï¡E€<«ùâï¡E€<«ùâï¡E€<«ùâï¡E€<«ùâï¡E€<«ùâï¡E€<«ùâï¡E€<«ùâï¡E€<«ùâï¡E€<«ùâï¡E€<«ùâï¡E€<«ùâï¡E€<«ùâï¡E€<«ùâï¡E€<«ùâï¡E€<«ùâï¡E€<«ùâï¡E€<«ùâï¡E€<«ùâï¡E€<«ùâï¡E€<«ùâï¡E€Cê 0œö…•™ˆ6@¨ µÁVÁ‰²=Å5€Ÿjÿ¦mùŠ|ŒWµÓ6üÅŒ.jÿ¦mùŠ9\ŠG2I»iQŒsWdS € ( € ( € ¹y÷×è¿ÌV4mÿãÞ?÷Gò  ( € ( € ( € ( € ( € ( € ( € ( € d¿êŸýÓ@pÿ­÷WÿAÿëZµ†Âc*€( € ( € ( € ( €.^}õú/ó€Íø÷ýÑü¨J( € ( € ( € ( € ( € ( € ( € ( €/ú§ÿtÐ\?ë_ýÕÿÐEA?úÖ­a°˜Ê  ( € ( € ( € (  —Ÿ}~‹üÅ`3Fßþ=ãÿt*’€ ( € ( € ( € ( € ( € ( € ( € ( Kþ©ÿÝ4—ú×ÿuô@Oþµ«Xl&2¨€ ( € ( € ( € (åçß_¢ÿ1X Ñ·ÿxÿÝÊ€$ € ( € ( € ( € ( € ( € ( € ( € (’ÿª÷MeÃþµÿÝ_ýPÿ­jÖ Œª € ( € ( € ( € ¹y÷×è¿ÌV4mÿãÞ?÷Gò  ( € ( € ( € ( € ( € ( € ( € ( € d¿êŸýÓ@p­÷WÿAÿëZµ†Âc*€( € ( € ( € ( €.^}õú/ó€Íø÷ýÑü¨J( € ( € ( € ( € ( € ( € ( € ( €/ú§ÿtÐ\?ë_ýÕÿÐEA?úÖ­a°˜Ê  ( € ( € ( € (  —Ÿ}~‹üÅ`3Fßþ=ãÿt*’€ ( € ( € ( € ( € ( € ( € ( € ( Kþ©ÿÝ4—ú×ÿuô@Oþµ«Xl&2¨€ ( € ( € ( € (åçß_¢ÿ1X Ñ·ÿxÿÝÊ€$ € ( € ( € ( € ( € ( € ( € ( € (’ÿª÷MeÁþµÿÝ_ýPÿ­jÖ Œª € ( € ( € ( € ¹y÷×è¿ÌV4mÿãÞ?÷Gò  ( € ( € ( € ( € ( € ( € ( € ( € d¿êŸýÓ@p­÷WÿAÿëZµ†Âc*€( € ( € ( € ( €.^}õú/ó€Íø÷ýÑü¨J( € ( € ( € ( € ( € ( € ( € ( €/ú§ÿtÐ\?ë_ýÕÿÐEA?úÖ­a°˜Ê  ( € ( € ( € (  —Ÿ}~‹üÅ`3Fßþ=ãÿt*’€ ( € ( € ( € ( € ( € ( € ( € ( Kþ©ÿÝ4—ú×ÿuô@Oþµ«Xl&2¨€ ( € ( € ( € (åçß_¢ÿ1X Ñ·ÿxÿÝÊ€$ € ( € ( € ( € ( € ( € ( € ( € (’ÿª÷MeÃþµÿÝ_ýPÿ­jÖ Œª € ( € ( € ( € ¹y÷×è¿ÌV4mÿãÞ?÷Gò  ( € ( € ( € ( € ( € ( € ( € ( € d¿êŸýÓ@pÿ­÷WÿAÿëZµ†Âc*€( € ( € ( € ( €.^}õú/ó€Íø÷ýÑü¨J( € ( € ( € ( € ( € ( € ( € ( €/ú§ÿtÐ\?ë_ýÕÿÐEA?úÖ­a°˜Ê  ( € ( € ( € (  —Ÿ}~‹üÅ`3Fßþ=ãÿt*’€ ( € ( € ( € ( € ( € ( € ( € ( Kþ©ÿÝ4—ú×ÿuô@Oþµ«Xl&2¨€ ( € ( € ( € (åçß_¢ÿ1X Ñ·ÿxÿÝÊ€$ € ( € ( € ( € ( € ( € ( € ( € (’ÿª÷MeÃþµÿÝ_ýPÿ­jÖ Œª € ( € ( € ( € ¹y÷×è¿ÌV4mÿãÞ?÷Gò  ( € ( € ( € ( € ( € ( € ( € ( € d¿êŸýÓ@pÿ­÷WÿAÿëZµ†Âc*€( € ( € ( € ( €.^}õú/ó€Íø÷ýÑü¨J( € ( € ( € ( € ( € ( € ( € ( €/ú§ÿtÐ\?ë_ýÕÿÐEA?úÖ­a°˜Ê  ( € ( € ( € (  —Ÿ}~‹üÅ`3Fßþ=ãÿt*’€ ( € ( € ( € ( € ( € ( € ( € ( Kþ©ÿÝ4—ú×ÿuô@Oþµ«Xl&2¨€ ( € ( € ( € (åçß_¢ÿ1X Ñ·ÿxÿÝÊ€$ € ( € ( € ( € ( € ( € ( € ( € (’ÿª÷MeÃþµÿÝ_ýPÿ­jÖ Œª € ( € ( € ( € ¹y÷×è¿ÌV'ŠæU‰d\(þ3éþí{*!."Ïþ&šW`0ê.<¤ÿ¾ÏøUò áý¤ÿóÉ?ï³þrÃûIÿç’ßgü(ä ‡ö“ÿÏ$ÿ¾ÏøQÈí'ÿžQÿßgü(ä ‡ö“ÿÏ$ÿ¾ÏøQÈíÿžIé÷ÏøQÈí'ÿžIÿ}Ÿð£.ÚOÿ<“þû?áG \?´Ÿþy'ýöÂŽ@¸i?üòOûìÿ…pþÒùäŸ÷Ùÿ 9áý¤ÿóÉ?ï³þrÃûIÿç’ßgü(ä ‡ö“ÿÏ(ÿï³þrÃûEÿç’z}óþrÃûIÿç’ßgü(ä ‡ö“ÿÏ$ÿ¾ÏøQÈí'ÿžQÿßgü(ä ‡ö“ÿÏ$ÿ¾ÏøQÈí'ÿžQÿßgü(ä ‡ö“ÿÏ(ÿï³þrÃûIÿç”÷Ùÿ 9áý¤ÿóÊ?ûìÿ…pþÑù䞟|ÿ…q­ª:<”$œpçü)8Ùÿ·\ϲßÏþµ@Ãí×óìŸ÷óÿ­@Û®?çÙ?ïçÿZ€·\ϲßÏþµ=o%(d@ž\ÿñ4Ù¯$X\”‹Npçÿ‰  ð­÷WÿAÿëZµ†Âc*€( € ( € ( € ( €.^}õú/ó€ÊÚ’\=ƒ-«bM£êF;{Ðl é1 ‚Òœw¯÷Ͻl!~Ÿç?¥úèÿ?Ê€·ÓüþtÀ?OóüèOòôüiqŸð¦ßÓð ·cÇùü)¾¿ç×ô¦þy üóøR;óþM0ßçüæ —é×õ éÅ0vþŸ… ËüÿJ`)èzœþ”óšùÍ è?ϧëHôÇéÿצŸåÇëHŸ¾Ÿï RØ Äa@^è¦HÉ0¶ú­j—1èån›2m8õ°>ôvõ¯þêÿè"€ ŸýkV°ØLePP@P@P@P˼y‰žŸ/ó€ÈÃ3BÏŒ r”Œ”©[Œt£`b’RãŸtªæ`HþåÇæ”s0$rãóJ9˜’?¹qù¥Ì,HþåÇæ”s0$rãóJ9˜’?¹qù¥ÌÉܸüÒŽfäî\~iG3òG÷.?4£™€y#û—šQÌÀ<‘ýËÍ(æ`HþåÇæ”s0$rãóJ9˜’?¹qù¥ÌÉܸüÒŽfäî\~iG3òG÷.?4£™…ƒÉܸüÒŽfäî\~iG3òG÷.?4£™€y#û—šQÌÀ<‘ýËÍ(æ`HþåÇæ”s0$rãóJ9˜’8ù.89ê”s0$ËÿvãóJ ¿÷n?4 /ýÛÍ(ËÿvãóJà ¸ÀéÊPd£ee¸ÚG<¥I<çÇM£ú ‚õ­ZÃa1•@P@P@P@P@/>úýùŠÀaú¤ÿtP¨ € ( € ( € ( € ( € ( € ( € ( € Gûô CþµÿÝ_ýPÿ­jÖ Œª € ( € ( € ( € ¹v3"Ôíþb°‰æ*(16@ÇUÿ\¿üòoÍÆ€ ¿üòoÍÆ€ ¿üòoÍÆ€ ¿üòoÍÆ€ ¿üòoÍÆ€ ¿üòoÍÆ€ ¿üòoÍÆ€ ¿üòoÍÆ€ ¿üòoÍÆ€ ¿üòoÍÆ€ ¿üòoÍÆ€ ¿üòoÍÆ€ ¿üòoÍÆ€ ¿üòoÍÆ€ ¿üòoÍÆ€ ¿üòoÍÆ€ ¿üòoÍÆ€ ¿üòoÍÆ€ ¿üòoÍÆ€ ¿üòoÍÆ€ ¿üòoÍÆ€ ¿üòoÍÆ€ ¿üòoÍÆ€ ¿üòoÍÆ€ ¿üòoÍÆ€ ¿üòoÍÆ€ ¿üòoÍÆ€ ¿üòoÍÆ€ ¿üòoÍÆ€ ¿üòoÍÆ€ ¿üòoÍÆ€ ¿üòoÍÆ€‹•#ÊnGªÿ$@‰œ¡@ýA?úÖ­a°˜Ê  ( € ( € ( € (  ·?ë£ÿ€1X dhG±Aå‰î}håbËor‡ Xàn‡šŠ+™~Ô-抓”bq^K-Ì18I$Ub3‚hë"9!X:Ú€@&åß³#pǵ-Pd?ºrcÈ  M~üŸ÷Ù ]ì»·JýÒXá½q@[ûòßf€é/ú¹™±èæ€X¨$ÈàOÎhrßß“þû4…°ÁL“Ðo<Ð|ôó<¿9·ÿwy äÿÏGÿ¾Í"±edrC¼Ðï°e¥p=ÜБðz|æ€[i"Gÿ¾Í6wxãÊ3³ !'úÐÉ~½V?ü 5|«¸ ”¦d,§$|²*lw #mIÙ s@e¿¿'ýöh¾gÍ·Í|çÞzõ e¿¿'ýöhÉÿžÿ}š2ç£ÿßf€'°ÉÞI$‘ÔœÐgÿZÕ¬6T@P@P@P@vãýtðæ+ˆ8•½Ôb€+‰¡ŒÜÇ3¢— 3c#b þ”XM\†Õ|Ëó4d4H¥wIÅ'0³_´»T"ƒÃ[ƒù΀(µµÉf$8RÜíäž[ýÅN°Ì'„°•ˆO×ÿÕ@±HñH»„»]§’=}ûÀÐ_f›,ÈŽ¬Ñ»9À Èëé@´£#2íÛA8çåÀàýhI ”HU\ì»vú}hô±ùŠªN0rOqô —e±^8SÐb€)J7« ðíNÓ4ЈoC鎕Ü›’jÀ –²}ž ÌÛÀU q´q‘úPnEY nù³ÆÜ®q@†ã{ϸîç¶;JzÅþ‘¬R*Œ˜ô :;5Äa÷Œ ¿aòŸÒ€"ò%c(mä°lúJW†e’=†Ý£¯qŸë@Ë òÇÛI'©  ±Ç›xЂ¸ õ ]±cŽa@¨dŒlgãé@g1¤¥›vÜì^3´ã×§zµ±ªù…ðIéŒPrÛJ Q–$Æ@ýÆÇ_ç@1É=ÖçÖ/BqØÐDâ90޹Îzü„:•íæS'•¸cÉ=¶ë@ZÆËƒ»žèhãòÁÈã´jã}(³ÿ­jÖ Œª € ( € ( € ( € »sŸ5Vm¡I 8Ȭ0¸#9¿ïÓ…0¼¹È øÛ¶hß7£à;оoFÿÀw |Þÿ€ï@ù½ÿÞ€ òŽÍÿ€ï@ù½ÿÞ€ óz7þ½æôoüz7ÍèßøôŒÒ²•;ùÿw ‘7µ%SܘXÐ~KúÉÿ€í@’ÿôÓÿÚ€%ÿé§þµKÓOüj<—ÿ¦ŸøÔy/ÿM?ð¨ò_þšà;Pä¿ý4ÿÀv Éúiÿ€í@’ÿôÓÿÚ€%ÿé§þµ!…ÈÆdÿÀv  ]2€*JgÉcŸÒ€©*}Ö”} zo’ÿôÓÿÚ€%ÿé§þµKÿÓOüj<—ÿ¦ŸøÔy/ÿM?ð¨ò_þšà;Pä¿ý4ÿÀv  ¬ã1–0ಕÏàh9ÿÖµk „ÆUP@P@P@P@^¹rŽ6’ª9ü+†œ€B c@ ›ùæ?#@ZueP=H4ß:OEütž‹ù<é;íÐö æàË1ù3qÿ<Çähr@*£> Ð±7÷¢ýhŠÓ²†TAÁ ÍÇüó‘ 3äŠ2qÈ4ìMýè¿Znérq°ãØÐºoö?#@i@ÏÉùv&õ‹õ “(8ýÙúf€ Ó±ù7MþÇähGš@ ÅúÐâoïEúЉ¿½ë@&þô_­›ûÑ~´boïEúЉ¿½ë@&þô_­›ûÑ~´boïEúЉ¿½ë@&þô_­›ûÑ~´DÌeum¹QÕh¼ÿëZµ†Âc*€( € ( € ( € ( €.^}õú/ó€Á÷ù_»Û¿hÆî(Sµ¼–æwŒFÊlHIÎ8è9äç<ú W-Ç•]–n>àü‘¦ARRC¨ËH«Ï¹úÐyîÒãF*Ÿœ–ùÖ¦ä›e’0IJÿú ¬Æ]¼—Ê“<`É‚Oaš§ý«PÄ0]Ä׎QNK—q]HÄѯþ‚i Z…§Ž xZC€T ÿÀsý(½ŠŒ\¶]$j ËG7*®à{ûÐ…$“Гr¸‘ƒ)t ƒ~a@‡ÐLå"f$ÿZ‹íz%J’!r@ÈÈâ€% Ž¿ ®ˆl1ï@E ‘sÐŽ¢€?¸(ÔP@P@P@GúùÏj‚õ­ZÃa1•@P@P@P@P@/>úýùŠÀ`é¾ »™r eNJ´(XB†âb-žÜÇ' ÀÜ6¨ÛïÓ?+™õ.\}Áøÿ#L“>òF‰â+ÉûÔ8_f€LJn(HÈ‚=:sü©6ûšÂ*×jäìÛœ“ÆUÿôLÈ›T‘ã–0°< Ì3·´TÀF¢–æÜVœ)Ç'Ó¯ ¶õ—)¢ÖÇøÿè&  ÓZˆHÜ`Çiæ“.nÇÆgp¡æcË0`£>ƒ'¥4)4Þ„ŒY¼²ù ]2 Î>aA#¨Ô?ûßÖ€+‡ó  àÿPÿX cqqê1@ÙJ¶b€,[)˜Œf€%î uP@P@P@Åþ¾_óÚ€ ŸýkV°ØLePP@P@P@P˾dAþïó€Ãl¸Æ0:þ½föü¿úô׊Wlcž€z}h3i!$çôã@¶™z9Aÿ× ì’%›<0è;‚=}èw3³ rsÓÿ¯@ ¶oö/þ½ ’oVa3ÀÓ´ì?÷æ?Æ€PŠ£U=>´»fÿgòÿëÐRË» €;úаÿÜ?˜ÿfÙFpœßã@Ù?ç˜ý?Æ€²•#`ú? ýÃùñ í1!:ú‘þ4m—ûƒôÿ1/÷éþ4ª®ªÃǸÿ\?÷æ?Æ€ ?÷æ?Æ€ ?÷æ?Æ€ ?÷æ?Æ€ ?÷æ?Æ€ ?÷æ?Æ€ ?÷æ?Æ€ ?÷æ?Æ€ ?÷æ?Æ€ ?÷æ?Æ€ ?÷æ?Æ€ ?÷æ?Æ€#‡™¤>£úPÿ­jÖ Œª € ( € ( € ( € ¹uþ±?à?ÌV{}%P@P@P@P@P@P@P@P@GúÇúPÿ­jÖ Œª € ( € ( € ( € ¹uþ±?à?ÌV{}%P@P@Ps€?Ò€ rs“ŸÃ&€3’8ñï@¡¶!üÀ}ãÔš àŽ@ü¶p'ŽŸøPävÖ€-’sŒäþ$J NvŒg½8dŒ‘Š( € ( € ( € Žõô 'ÿZÕ¬6T@P@P@P@rëýbÀ˜¬<öú J( € ( € ( €<Ž(À}.pGŒb€’1œs@ pr6Œœb€àŒ1éŠ^2>U㧃ŒOSŽhI'­%P@P@P@Áþ±þ”ÿëZµ†Âc*€( € ( € ( € ( €.]¬Oøó€ÇžßA@ @P@P@P@P@P@P@P@P@Aþ±þ” ÿëZµ†Âc*€( € ( € ( € ( €.]¬Oøó€ÇžßA@ @P@P@P@P@P@P@P@P@Aþ±þ” ÿëZµ†Âc*€( € ( € ( € ( €.]¬Oøó€ÇžßA@ @P@P@P@P@P@P@P@P@Áþ±þ”ÿëZµ†Âc*€( € ( € ( € ( €.]¬Oøó€ÇžßA@ @P@P@P@P@P@P@P@P@Aþ±þ” ÿëZµ†Âc*€( € ( € ( € ( €.]¬Oøó€ÇžßA@ @P@P@P@P@P@P@P@P@Áþ±þ”ÿëZµ†Âc*€( € ( € ( € ( €.]¬Oøó€ÇžßA@ @P@P@P@P@P@P@P@P@Aþ±þ” ÿëZµ†Âc*€( € ( € ( € ( €.]¬Oøó€ÇžßA@ @P@P@P@P@P@P@P@P@Áþ±þ”ÿëZµ†Âc*€( € ( € ( € ( €.]¬Oøó€ÇžßA@ @P@P@P@P@P@P@P@P@Aþ±þ” ÿëZµ†Âc*€( € ( € ( € ( €.]¬Oøó€ÇžßA@ @P@P@P@P@P@P@P@P@Aþ±þ” ÿëZµ†Âc*€( € ( € ( € ( €.]¬Oøó€ÇžßA@ @P@P@P@P@P@P@P@P@Aþ±þ” ÿëZµ†Âc*€( € ( € ( € ( €.]¬Oøó€ÇžßA@ @P@P@P@P@P@P@P@P@Aþ±þ” ÿëZµ†Âc*€( € ( € ( € ( €.]¬Oøó€ÇžßA@ @P@P@P@P@P@P@P@P@Áþ±þ”ÿëZµ†Âc*€( € ( € ( € ( €.]¬Oøó€ÇžßA@ @P@P@P@P@P@P@P@P@Aþ±þ” ÿëZµ†Âc*€( € ( € ( € ( €.]¬Oøó€ÇžßA@ @P@P@P@P@P@P@P@P@Aþ±þ” ÿëZµ†Âc*€( € ( € ( € ( €.]¬Oøó€ÇžßA@ @P@P@P@P@P@P@P@P@Áþ±þ”ÿëZµ†Âc*€( € ( € ( € ( €/\£;©QÐ)þF°—7 ýÆ€.oo×ühòæöýÆ€.oo×ühòæöýÆ€.oo×ühòæöýÆ€.oo×ühòæöýÆ€.oo×ühòæöýÆ€.oo×ühòæöýÆ€.oo×ühòæöýÆ€.oo×ühòæöýÆ€.oo×ühòæöýÆ€.oo×ühòæöýÆ€.oo×ühòæöýÆ€.oo×ühòæöýÆ€.oo×ühòæöýÆ€.oo×ühòæöýÆ€.oo×ühòæöýÆ€.oo×ühòæöýÆ€.oo×ühÑFèÌXu¿ýtÊÆS…?•\ZHö7÷[ò«æB°loî·åG2 Æþë~Ts °loî·åG2 Æþë~Ts °loî·åG2 Æþë~Ts °loî·åG2 Æþë~Ts °loî·åG2 Æþë~Ts °loî·åG2 Æþë~Ts °loî·åG2 Æþë~Ts °loîŸÊŽd2[Q»$“;V#ûBïþ{½ÚóÝèþлÿžï@ö…ßü÷z?´.ÿç»Ðý¡wÿ=Þ€í ¿ùîôh]ÿÏw ûBïþ{½ÚóÝèþлÿžï@ö…ßü÷z?´.ÿç»Ðý¡wÿ=Þ€í ¿ùîôh]ÿÏw ûBïþ{½ÚóÝèþлÿžï@ö…ßü÷z?´.ÿç»Ðý¡wÿ=Þ€í ¿ùîôh]ÿÏw ûBïþ{½ÚóÝèþлÿžï@ö…ßü÷z?´.ñþ½èþлÿžï@ö…ßü÷z?´.ÿç»Ðý¡wÿ=Þ€í ¿ùîôh]ÿÏw ûBïþ{½ÚóÝèþлÿžï@ö…ßü÷z?´.ÿç»Ðý¡wÿ=Þ€í ¿ùîôh]ÿÏw ûBïþ{½ÚóÝèþлÿžï@ö…ßü÷z?´.ÿç»Ðý¡wÿ=Þ€í ¿ùîôh]ÿÏw ûBïþ{½ÿÙlibstruts1.2-java-1.2.9/doc/images/how-to/netbeans/creating-project4.jpg0000644000175000017500000003373610404045230026544 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„   (1#%(;4>=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀ|˜ÿÚ ?Ù×5¦ÒÝÝ%¡bI ´*‚OCž¦´¥KÚu&R±Ÿ‹Zà1‚Ò)BŒ·–±ÿëoªù‹ö —Æë m ¶qµXƒúÆ(xF·aÏä4xá¿èŸ÷Øÿâi}[Ì^ÓÈ_øMÛþéÿ}þ&«y‡´òøM›þéÿ}þ&«y‹Úy ÿ «Ð=ï±ÿÄÑõo1ûO!á4oùðOûìñ4}_Ì=§¿ð™·üø'ýö?øš_Wóh(ñ“Ï‚ßcÿ‰£êþaí<…0oùñOûèñ4}_Ì=§¿ð˜7üø§ýô?øš>¯æÐQâæÿŸÿ¾‡ÿGÕüÃÚy ÿ sÏ’ßCÿ‰£êþaí<…,cÿ.Iÿ}þ&«ù‡´òþ¶ÿŸ$ÿ¾‡ÿGÕüÃÚy ¯æÐ_øIÛþ}óüMÃÌ=§¿ð“7üú'æ?øš_Wóiä/ü$­ÿ>‰ùþ&aæÓÈ_øIþ}óüMÃÌ=§£ÄMÿ>©ùþ&aæ/iäð‘7üú§æ?Âaæ?iä8x¿çÙ?1þ{0öžAÿ ϲ~ŸáG°óiä(×›þ}“ôÿ =‡˜{O!·[þ}Óôÿ =‡˜{O!F¸ßóî¿§øQì<ÃÚy ý¶ßóøQì<Åí<…ÓϺ~ŸáG°ó´òûe¿ç‚~ŸáKØy‹ÚyÖþx'éþý‡˜ý§ïívÿž)ùð¥ì<Åí<ƒûY¿çŠ~Cü(öcöžBU¿çŠ~Cü(ö>böžBÿj7üñOÈ…ÃÌ=§£SoùäŸÿ =˜{O!´›þy'ä?ÂaæÓÈQ¨·üòOÈ…ÇÌ=§¿ooùæŸÿ =˜{O Íÿ<ÓþùáG±óiä;í­ýÄÿ¾GøQì|ÃÚy¼oî'ýò?ÂcæÓÈ_µ·÷þùáG±óiä/Ú›û‰ÿ|ð£Øù‡´òí-ýÔÿ¾GøQì|ÃÚy+ÊÊ$x=3´T¸EhÙJMì…ÌßÝ‹óJžX÷ ˱™ªÝyÚ5ÙŒ®6•ÊÎ?¢QJÍ1ÆWÐËñ¯úëOú÷›ÿEŠß ԙÓ?‘wÁ/›n#‘—(ˆXPÉNqÔ×cvº‹×úþ¿¤MŒ½Y摬šå•¤(ÛB0e ’ ÈëÉ$úÑ+r«ws«Õíô³ªÏ¦:À¯-ź@–ðxAÆò[h ñËuW$¹y½Jv½ŒÉt6/íIUîä‹O*Œ„ª3¹¯€íÉôéV§-qYj\ÿ„zÞ95K•÷E=º,Œˆ~Yc¶A9Á©öGê>]ÐÅд©õx´û{Ù¢áã‘9c±A9ÉUü¸Ç=sÎ)ûI(ó4.U{éɧI£êÓ}ŽB‘qºE2\çklã·jræRJà­f3Cm=,®ÿ´ ß’E˜£æ‹!Îáÿ|þ¿J'Íuʵµ4SN²½Ò-àÓaóíâ&ÈF”,Ç8;G ç§Bjyœdܻɭ¦…`Ð-ÒË+Âmf˜*?ñFÀ}⃃ŸîöïG´–Âå[‘>‰o ‚Î,ͬs±y0c.pBÝðñ~ÑíÔ9K2øzÒÖá’Y&‘Zõ-Sk*CdðsÔÝ?$ª6´ì© ›FÓ-# ww$BIfDc“´#m;¹ëÊõ¡NOd©µ++K+kO-æ3ÏrÀmƒžzõÇ^OjŒ›lM$gÖ„Š(ÔáHPŠx á@ @€Zp P…-8P©¢€(E8PÐÅŽ€uP1Ôp c…(€©´ ¤³\ÎöðˆÎéQʲüÇG|öïÓšå©ñ›Ãá1ô‹›Éµ×V’hfòóm_-f^ìÀ—Æ2§îõǦeÿ™fãþÿ¡šÒ_ !|Lw‹l/o$¶6P‰JDêÙp¸Ü€w#Þ´¡R0½ÂI»Xçm´o["§Ù"–5*K"0\õÇ9ç8=ë£ëþ¿á…ÊE'‡uÉî Ó[ÇÒDÀgÀ¦)¼DHdí¢kÏp.dŽFœÞkN¥²:ç=ª=­;XžY‹H×áçˆMÏÒ-†lœœÜóG´¦Õƒ–Dɧk‹esmöU?jpóHÒ©wÁÈ–õç×Þ—´§tï°rÈ$ÓüG6Ï5î$ØÁ×uÐ;Xt#æëïB©IÃ,…#óüý÷nÝžgÚFí¹Î3»¥Ò•­ú,ˆF…«( ! ¯š¸$t=}ÏçOÚørÈ’=#Z$TW*¬ÊoïzûÒö´Ã–DÏcâ ?Ö=ÃåJ|× ü§¨ëÐàRS¦ƒ–BG§ë±ºº••<µap ýÞ½=©ûJaË"Õ”Zåœï?’e•Ê’Ò\qÓ8qŸÇ52•6­q¥$D¶ºú¼Ž4fG.þ\áAcÔà|ô…i>“ªË·ÍŸb„]Ò©Ú@9éOÚÁ,†ÿbjóïÿ¯øÑíaÜ\ŒQ¢êóïÿ¯øÑíaÜ9ïìkÿùáÿ¯øÑíaÜ9£F¿òÃÿ_ñ£Úøùïì{ïùáÿ¯øÑíaÜ\ŒQ¤_Ïü}ÆkáÈÇdÞÿÏü}ÆkáÈÀi7¿óÇÿ_ñ£Úør1ÃJ¼ÿž?øúÿ/káÉ!²ï?çþ>¿ãOÚør1ÃL¼ÿž?øòÿ/káÉ!³.ÿç—þõœ¹$ïrãÌ•¬Eäê_óýýøãQËã¼»]ÛOÜDÌ…'pÎ[=?rjÉ Šwm›3ýñþêÿ!Y¢È©€P@P@P@P@P@P@P@P@P@P@P@P@OXÿE×û”£?ßî¯òS‘Ï §lr£3…`i´ÖâVß÷é€#‚ÏL¹…f†ÒÙ£oºÞHÃQÇ#Ðô#‘Åzeµ¼·Z[,Q!wo$2O€,ôË„/¥³(vB|9V*GOPhOìÛùò¶ÿ¿KþfØÏ•·ýú_ð û6Ãþ|­¿ïÒÿ…Ù¶óåmÿ~—ü(þͰÿŸ+oûô¿á@öm‡üù[ߥÿ ?³l?çÊÛþý/øPý›aÿ>Vß÷é€ìÛùò¶ÿ¿KþfØÏ•·ýú_ð û6Ãþ|­¿ïÒÿ…Ù¶óåmÿ~—ü(þͰÿŸ+oûô¿á@öm‡üù[ߥÿ ?³l?çÊÛþý/øPý›aÿ>Vß÷é€ìÛùò¶ÿ¿KþfØÏ•·ýú_ð û6Ãþ|­¿ïÒÿ…Ù¶óåmÿ~—ü(þͰÿŸ+oûô¿á@ª¨‰¶8Ö5 £‰P¿ñãqÿ\ÛùPòÛÛ,®¢ÖÛˆ¹Oð yÿóëmÿ~ü(ò-ÿçÖÛþü'øPLPï*¶v§bQý)ÙZàLóçiÿ~—ÿ‰£@&?ùó´ÿ¿KÿÄÑ “üùÚߥÿâhÐEð­gj2 â%?Ò‹+]ï"ßþ}m¿ïÂ… "ßþ}m¿ïÂ…Ew)i3-µ°eˆ>JqÇÒ€-Ì™ÀÃ(†±ÿ ‹¯÷(F¾?Ý_ä) "¦±ÛK.—a=³bhmÔ(Àù ‘ŸÀqœc†U%t4øçº¾Ží”Fî\œå²0@éßxã‘»îLo×úþ¿¯&lÕˆ¥¬[Kw`"€²¿Ÿ n\eBȬHÏOáÞ€*®Œ««ÛNþeªJòK#ZBbJŒ€œq€T¼Ð_Ø'·[%k_"PðÇ;‚¹¼”KÒK`$–Á‰õÀi¡ÞC†Žv—b í[¢KãhËî ã2~l¼Ä^´ÓV=bÒî=!m£XæLe ‹;6œ…Î$á3÷‰8,Ôë‹k¹[W²²ïß rY6"˜‘ #;²6ž1Ï€r!µÑäþØ–[˜¥<’™$o'Ë’6ݵc`[ 6ñÑA£u¡^"Î{]·Y*Çå˜Ç—0±%ÚIÆ0IÎâ0±©iºŒÖOe ¦à²ÝIæùŠy‰6ÐsÖ@qƒÓ#$khVbÆÒh¢Û´ÌÀ(PK’¤mÿd¨çŒzPP@P@P@P@P@bv?õÒ_ýôïüxÜ×6þTjõò¼FΈ¹vU’qÉ8ó 2µn"ÕahÈKw‘¢QŸ0LŒw8'øíš}S‹V»Ù!µAqfIZBÊAS,€ ņфëóqÛŽP˲êsÃ9‰áºre|¢2ʳۆ$“Æcqî/YÉ,¶É,Éå³å‚`‚ªOÊìqŒûæ€×/û§úSèéP¿ñãqÿ\ÛùP©ÿ×ÉþñþtCXÿE×û”£?ßî¯òSCO‘"Ñ­¤‘Õ-Õ™˜à( 2I  OÄ+,-¹Ø‚à‚ ƒÁE>€ ( € ( € ( € ( € ( € ( € ( € (  NÇþºKÿ£€ ½ÿúæßÊ€-Oþ¾O÷ó  :œi-¼QÊŠè÷0++ †TÈ"€,Ï éÒ*;3Ú¹ ¬rPžˆÇù7~‡œ¯uɸYmŒ*Áv–x·œg ù—ééUÐC"´PÝÛÁ4‘¹xÙ!UØIÉ#,yÏ9Í+.ã,:Fû÷Ûnócä)ܼðyär:-æ ‘\ù–ûò¥>`§å=G^‡ò¢Þ`* —ìݒǘð3ǰ•=J‘…A{ÿ7õÍ¿•ZŸý|Ÿïç@5ù]¹@3ýñþêÿ!I0„‹¥é“ìó †$wMÜdÚHöä䜂Gñ*“ihe3I«n¶#fàcå<`œ`ñŒõ탌¤ÆMîÕXž#O3IÙåÇ.ë‹qåÈ~Wýòpx<¡  ¶–÷vš•½ªI¤ gkx2 S ¤Œ’Äð>ûwÃP5Ô®&Ž×7+pòæ&D?d“ΈlÀ_¼ü6[äàäm¦­©¼$×Pd¢Õ;Zê#`íVs‡,~^á[ ­¥Y¶ß÷á?€"žÕ[k[ÇoŒƒ˜WR*àcrœçêí@‚ÒÞ xâò!“ËP»ä‰K6RqÉ ùÿóëmÿ~ü(ò-ÿçÖÛþü'øPä[ÿÏ­·ýøOð È·ÿŸ[oûðŸá@‘oÿ>¶ß÷á?€"ßþ}m¿ïÂ…Ew)i3-µ°eˆ>JqÇÒ€-Ì™ÀÃ(†±ÿ ‹¯÷(F¾?Ý_ä) "¦–—ÿ «?úàŸú  4P@P@P@P@P@P@P@P@‰Øÿ×Iôcпñãqÿ\ÛùP©ÿ×ÉþñþtÊ(5 å2ÇCµ&|¡˜ü÷Èà;öÇ~u‹œÜ`[²ÂÒ¸9Ý&Çum£<°sÎÜÿh÷z¥ÌÒ\ Œ´Ñ¤eNU£rNyË<`uëÇ -ðê÷ q,e¼l#E8RYû“ÏNNxàb€4h € ½ÿúæßÊ€-Oþ¾O÷ó  Çü‚.¿Ü  þøÿu¤€Š˜Z_ü‚¬ÿë‚è"€,Ð@P@P@P@P@P@P@P@P'cÿ]%ÿÑ@^ÿÇÇýsoå@§ÿ_'ûÇùÐ( "µUó ‘ÀÛŸpÙÞÜ3ÉÉ“ž99Å7û>Ûí 1…¤£ À³‡.y µ¥«K$¦Þ$«±Ø Ë¯¡=Ç€öÐHìòC;'–ÌÈ +ýÓíí@ äÅ¿–›·oÎÑØÛŸ®8úPè /ãÆãþ¹·ò  Sÿ¯“ýãü膱ÿ ‹¯÷(F¾?Ý_ä) "¦–—ÿ «?úàŸú  4P@P@P@P@P@P@P@P@‰Øÿ×IôcÐ:,‘²8ʰ j(Ë26IÉýôŸüU7ȇûÿäÿâ¨ò!þãÿßù?øª<ˆ¸ÿ÷þOþ*€"î?ýÿ“ÿŠ ȇûÿäÿâ¨ò!þãÿßù?øª<ˆ¸ÿ÷þOþ*€"î?ýÿ“ÿŠ ȇûÿäÿâ¨ÞR­F3IÿÅPÎÅœ±ÆIÍQÖ?äuþåhÏ÷Çû«ü…$TÀÒÒÿägÿ\ÿAf€ ( € ( € ( € ( € ( € ( € ( € ( €1;úé/þŒz O€çGÿ=þúyÑÿÏDÿ¾…tóÑ?ï¡@üôOûèPçGÿ=þúyÑÿÏDÿ¾…tóÑ?ï¡@üôOûèPçGÿ=þúyÑÿÏDÿ¾…tóÑ?ï¡@  zÇü‚.¿Ü  þøÿu¤€Š˜Z_ü‚¬ÿë‚è"€,Ð@P@P@P@P@P@P@P@P'cÿ]%ÿÑ@ ›ýLŸîš}P@P@É¿ÔÉþé Ð=cþA_îPŒÿ|º¿ÈR@EL -/þAVõÁ?ô@h € ( € ( € ( € ( € ( € ( € ( € (±ÿ®’ÿèÇ Mþ¦O÷M>€ (vÆÛ÷±ÅBåUI‡€%±ôïïšFÇã,xÇ^=»~to}¬Ûþêgއ¯·µO@É¿ÔÉþé Ð=cþA_îPŒÿ|º¿ÈR@EL -/þAVõÁ?ô@h € ( € ( € ( € ( € ( € ( € ( € (±ÿ®’ÿèÇ Mþ¦O÷M>€ (#‚3zaŒA‘ˆ=Gþ”ú( € dßêdÿtÐèž±ÿ ‹¯÷(F¾?Ý_ä) "¦–—ÿ «?úàŸú  4P@P@P@P@P@P@P@P@‰Øÿ×IôcÐ66ØÆ9ÍEþÿL¿J?Ñ¿é—é@ú7ý2ý(ÿFÿ¦_¥èßôËô ýþ™~”£Ó/Ò€ôoúeúPþÿL¿J?Ñ¿é—é@ú7ý2ý(j§¬È"ëýÊÑŸï÷Wù H©¥¥ÿÈ*Ïþ¸'þ‚(ÍP@P@P@P@P@P@P@P@bv?õÒ_ýôÉ¿ÔÉþé Ð@P@P@ ›ýLŸîš}SÖ?äuþåhÏ÷Çû«ü…$TÀÒÒÿägÿ\ÿAf€ ( € ( € ( € ( € ( € ( € ( € ( €1;úé/þŒzdßêdÿtÐè ¦Û¿,S§GéøŸJi‘ƒ¨ m=yÿ>´¥äÚ}W‚}NzûqÏã@ÿvÌìÇÄð P@P&ÿS'û¦€@õù]¹@3ýñþêÿ!I04´¿ùYÿ×ÿÐEY € ( € ( € ( € ( € ( € ( € ( € (  NÇþºKÿ£€±´îÆ1Îh/ôoúeúPþÿL¿J?Ñ¿é—é@ú7ý2ý(ÿFÿ¦_¥èßôËô ýþ™~”£Ó/Ò€ôoúeúPþÿL¿J?Ñ¿é—é@P=cþA_îPŒÿ|º¿ÈR@EL -/þAVõÁ?ô@h € ( € ( € ( € ( € ( € ( € ( € (±ÿ®’ÿèÇ Mþ¦O÷M>€ ( € ( € dßêdÿtÐèž±ÿ ‹¯÷(F¾?Ý_ä) "¦–—ÿ «?úàŸú  4P@P@P@P@P@P@P@P@‰Øÿ×IôcÐ&ÿS'û¦€@Ûw¿wsž FY—…`¨IÚIǧ·Ö€{‚y “’IÇ8¢€ì|Ã%†ìñŽ>Ÿ‡4€)ëòºÿr€4gûãýÕþB’*`iiò ³ÿ® ÿ Š³@P@P@P@P@P@P@P@P@ýt—ÿF=#Šg“üóOûäPäÇÿ<Óþùy1ÿÏ4ÿ¾ELóÍ?ï‘@“üóOûäPäÇÿ<Óþùy1ÿÏ4ÿ¾ELóÍ?ï‘@“üóOûäPäÇÿ<Óþùy1ÿÏ4ÿ¾E>€)ëòºÿr€4gûãýÕþB’*`iiò ³ÿ® ÿ Š³@P@P@P@P@P@P@P@P@ýt—ÿF=P@P@P@OXÿE×û”£?ßî¯òSKKÿUŸýpOýPš( € ( € ( € ( € ( € ( € ( € ( € Äì뤿ú1è € ( € ( € (  zÇü‚.¿Ü  þøÿu¤€Š˜Z_ü‚¬ÿë‚è"€,Ð@P@P@P@P@P@P@P@P'cÿ]%ÿÑ@P@P@P@SÖ?äuþåhÏ÷Çû«ü…$TÀÒÒÿägÿ\ÿAf€ ( € ( € ( € ( € ( € ( € ( € ( €1;úé/þŒz( € ( € ( € (ž±ÿ ‹¯÷(F¾?Ý_ä) "¦–—ÿ «?úàŸú  4P@P@P@P@P@P@P@P@‰Øÿ×IôcÐ@P@P@P@õù]¹@3ýñþêÿ!I04´¿ùYÿ×ÿÐEY € ( € ( € ( € ( € ( € ( € ( € (  NÇþºKÿ£€ ( € ( € ( € §¬È"ëýÊÑŸï÷Wù H©bÎí­ì­áki£‰•xñ«PßÚ'þ}&ÿ¿‘ñthŸùô›þþEÿÅÐý¢çÒoûùÿ@ö‰ÿŸI¿ïä_ü]Ú'þ}&ÿ¿‘ñthŸùô›þþEÿÅÐý¢çÒoûùÿ@ö‰ÿŸI¿ïä_ü]Ú'þ}&ÿ¿‘ñthŸùô›þþEÿÅÐý¢çÒoûùÿ@ö‰ÿŸI¿ïä_ü]Ú'þ}&ÿ¿‘ñthŸùô›þþEÿÅÐý¢çÒoûùÿ@ö‰ÿŸI¿ïä_ü]Ú'þ}&ÿ¿‘ñthŸùô›þþEÿÅÐý¢çÒoûùÿ@ö‰ÿŸI¿ïä_ü]Ú'þ}&ÿ¿‘ñthŸùô›þþEÿÅÐý¢çÒoûùÿ@ö‰ÿŸI¿ïä_ü]Ú'þ}&ÿ¿‘ñthŸùô›þþEÿÅÐý¢çÒoûùÿ@ö‰ÿŸI¿ïä_ü]Ú'þ}&ÿ¿‘ñthŸùô›þþEÿÅÐý¢çÒoûùÿ@ö‰ÿŸI¿ïä_ü]Ú'þ}&ÿ¿‘ñtHn]¤³¶ÜƒŒ»Ó#¡”P@P@P@OXÿE×û”£?ßî¯òS € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ž±ÿ ‹¯÷(F¾?Ý_ä) "¦@P@P@P@P@P@P@P@P@P@P@P@P=cþA_îPŒÿ|º¿ÈR@EL€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (  zÇü‚.¿Ü  þøÿu¤€Š˜P@P@P@P@P@P@P@P¼y¤U‘#TU<ÆX’w´?»@ åËÿ?)ÿ€çÿ‹ Ë—þ~SÿÏÿ@—/üü§þŸþ.€._ùùOü?ü]\¿óòŸøøº<¹çå?ðÿñt„:²nHgUÀƒXïûÐÈ_|I*—b 2îÀ OLJ<¹çå?ðÿñtyrÿÏÊà9ÿâèòåÿŸ”ÿÀsÿÅÐåËÿ?)ÿ€çÿ‹ Ë—þ~SÿÏÿ@—/üü§þŸþ.€._ùùOü?ü]:3ºß9ÞŠý1Ôýh¦±ÿ ‹¯÷(F¾?Ý_ä) "¦@P@P@P@P@P@P@P@Èÿ×\»ó’€@\Ü4nÃ’yeVm«´c$œP:’;d€¤#•⹈ÄèˆØ\ÈX±q…dýÌúã¨4öÔíT™É!ìÆ_“~ö:C@-í»Üy ç~Ha Äu±‚FçƒèhzdŸzúïþ†´7ü|Ûÿ¼ÿú-èôPgöݶݾd?hûG‘äù£úÍ™Ç^Ÿ6?ýt+ê¶ûA‹.K¢Œ©PÁWr’0Àn##§¨  m5 [Ü}ž]á—r¤ñ‘Î2ÇCÁÁ  4P ÿKoúáþ‚(¶±ÿ ‹¯÷(F¾?Ý_ä) "¦@P@P@P@P@P@P@P@Èÿ×\»ó’€@\Û´Ž“C ŽxÁUf]Ë´ã Œ@zƒ;d ¯¦Ì× sö n.Öh¾\0bBÎFIæ€éOˆ¶\ efræ,²³1f(sòç8ÁÜ0 ó·Òc‚øÜ(ƒï¼¼æ’ÙÈ/éÉèéÏ\€hÐ$ûÐÿ×x¿ô5 ¿ãæßýçÿÑo@ €2 Kvµ&ë+sçr‘þ·ÌÇÓ?ú p*ª4ǵ£· ìÕ¾vÎX£‘É8<`]&Â{xmæMϰ‰Shrp$ppTŒq×=hJ€ dñémÿ\#ÿÐEVÖ?äuþåhÏ÷Çû«ü…$TÀ( € ( € ( € ( € ( € ( € ( € ( €@ò²y8Aó±7zýá@.?éÛþþ?ÿ@.?éÛþþ?ÿ@.?éÛþþ?ÿ@.?éÛþþ?ÿ@.?éÛþþ?ÿ@.?éÛþþ?ÿ@—3<{ͺªÈŽHv'é·Ú€•Œ‘2íù ˜9Võ ÅÇý;ßÇÿâ(ÅÇý;ßÇÿâ(ÅÇý;ßÇÿâ(ÅÇý;ßÇÿâ(ÅÇý;ßÇÿâ(ÅÇý;ßÇÿâ(ÅÇý;ßÇÿâ(Èž\QG¸1HÑ  þTSXÿE×û”£?ßî¯òS € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (ž±ÿ ‹¯÷(žê,ÄîŒ{é@ ÿ ¡ýøÿïE€?á#Ô?¿ýð(°ü$z‡÷ãÿ¾ÿ„Pþü÷À¢Àð‘êßþøXþ=Cûñÿß‹ÂG¨~?ûàQ`øHõïÇÿ| ,ÿ ¡ýøÿïE€?á#Ô?¿ýð(°ü$z‡÷ãÿ¾ÿ„Pþü÷À¢Àð‘êßþøXþ=Cûñÿß‹ÂG¨~?ûàQ`øHõïÇÿ| ,ÿ ¡ýøÿïE€?á#Ô?¿ýð(°ü$z‡÷ãÿ¾ÿ„Pþü÷À¢Àð‘êßþøXþ=Cûñÿß‹ÂG¨~?ûàQ`øHõïÇÿ| ,ÿ ¡ýøÿïE€?á#Ô?¿ýð(°ü$z‡÷ãÿ¾ÿ„Pþü÷À¢Àð‘êßþøXþ=Cûñÿß‹ÂG¨~?ûàQ`øHõïÇÿ| ,ÿ ¡ýøÿïE€?á#Ô?¿ýð(°ü$z‡÷ãÿ¾ÿ„Pþü÷À¢Àð‘êßþøXþ=Cûñÿß‹ÂG¨~?ûàQ`øHõïÇÿ| ,ÿ ¡ýøÿïE€?á#Ô?¿ýð(°ü$z‡÷ãÿ¾ÿ„Pþü÷À¢Àð‘êßþøXþ=Cûñÿß‹ÂG¨~?ûàQ`øHõïÇÿ| ,ÿ ¡ýøÿïE€Žã\½¸á•£ŒÿÙlibstruts1.2-java-1.2.9/doc/images/how-to/netbeans/creating-project5.jpg0000644000175000017500000001457710404045214026551 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„   (1#%(;4>=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀt3ÿÚ ?Ù×5¦ÒÝÝ%¡bI ´*‚OCž¦´¥KÚu&R±Ÿ‹ZpÆ H¥2Æ0íü‡[}WÌ\ï±¾6XøлgUˆ#¯¬b‡…kvþCGŽþÉÿ}þ&—Õ¼Åí<…6cÿ0ôÿ¾ÇÿGÕ¼ÃÚy ÿ «Ð=?ï±ÿÄÑõo0öžC‡ŒÛþ|þûüM/«ù‡´òxÉ¿çÁ?ï¡ÿÄÑõ0ö‚ÿÂ`ßóâŸ÷Ðÿâhú¿˜{O!ÃÅíÿ>)ÿ}þ&«ù‡´òþæÿŸ$ÿ¾‡ÿGÕüÃÚy Éú…ÃÌ=§£_oùöOÓü(öaí<…þÝoù÷OÓü(öaí<‡m·üû§éþ{1{O!F´ßóøQì<Çí<…þÙoùàŸ§øQì<ÃÚy 5vÿž ùð¥ì<Åí<…³Ïü‡øQì<Çí<‡j7üñOÈ…ÃÌ^ÓÈQ©±ÿ–Iùð£Øù‡´òj-ÿ<“òáG±óiä/öƒÏ4ÿ¾GøQì|ÃÚyÌåšß#ü(ö>aí<…ûkq?ï‘þ{0öžB‹¶þâß#ü(ö>aí<…MýÔÿ¾GøQì|ÃÚyId¨œ œ…$•Û›{!ù›û±~iQËã¼»=ÉŽu…¼­ì¥€O<}E>Eч3[£†Öض¯tIÉßPY¯ã_õÖŸõï7þ‹Ó†êg=Ñ•Ùg"î%‚6_6ÜG#.Q°, 3’$œã©®Æíð¿ëúþ¶$ÌÕžiÉ®YL…hF ¡2v€A9z’}iËá^¿ »›z¼1¯‰Æ0ÅfÒÃÙ …ÏÎFìòyÍrÁûœÝF÷°.‹¥ùº“}¢àC`B7˜BeÌŒ½U[€íÉôù姘r­BÏE°žéÜNòX=Ê[Á6òŒÌFHÛ°äS´~|rKÌQbûKµŽÓJ±Ù‰å¹š´( œJ,1–ã ÈÅJ“»ÖÃkdQÖ,´Û=éiríqÍÄÙo”wÎÕätç¯Z¸JOtKIljt»‹mžZAymc¿FÙÁ‡9ÿxŸ^?,ï$ü¯ú•¡Þ‘¥YÝ‹I/gI"VÏñ+cqû¸\‘ó5595{ ¤´'¹ðí¥¼.Ó¸0G+02§Êsû GûCüŠJ£m^£åC4…¶‹EŽâqn _w–å“h%Gʧ֜îåeØQµ†¾›a,6’ÂÓÆ×ÒºD¤¨<À{ð§ß'½5)+§Ð,‰F•h“Féç[ÿ²2³+nôo»Àƒš\îß+‡*$ŸJ°€.®š/6Y•Hwk>U\}×Ú’œžË°8®¤QÙ[[]鱺<²\¤$°Ø7M¸çznM§äJÅ]Qb]Já ŒÆ«#. g'¦Àö«…ùUÉ{•–¨CÇZp¤Å8PÅ9hÔ€x ´úrЇZxéHŠp CÅ9hÄ$ÿsúŠÊ¯ÂiOâ9Bêâ;ˤ³¹¹m<0ûdÊ7›cüB2Nzu½G¥s‹°êÖþSïì¿+nݸn\÷úÖëèDú¾³ÿ!kŸ÷ÍAfÿ‹l/oØÙB%)«eÂãrÜzÞ„ã ܉&íc¶Ñ¼AnŠŸdŠXÔ©,ˆBç®9È<ÁïšèúÄ?¯øar‘IáÍri̳[ÇÒD°ÀpéMâ Ò@Ó.;Ä¢%‹}È1µ>Ô0¸Æ07vÀÇÒ³ö”¿¤O,†Ã¤ëðÎóÄ&ŽgÎùáC6NNNy曩M«,‰SOñr¼ª÷ $˜ÞâäØé“»œRö”¶ý–C²µã‘0”Ç+o‘ à‡oR3ÉàsG´¦²$ŸN×îP%Éžd!d¸ õäЪS[Œ† WÝ¿ÊmÛvgÍ\íÆ1צ8úQíi‡,‰ŽŸ®¼34 囀W Æhö”ïpå>›­Iæoó[ÍÇ™ºpwã¦yç{Jh9d Òu_'ÉòÛÊÝ»gš»sÓ8ÏZ=¬7Y:V¨Ñ¤o;ʤ.zàgŠ=¬–E¤·ÖÌ3ÌpжäM¸ÿ}}?*žzv² Hß[V‘‘åC#—m“S€h禲,u_#Èýç“ÿ<üá·®zgiûJw¸rË`–ÃSƒÎF¼ œ~&…RšØ9d Ò¯Gü±ÿÇ×üiûXw#iwŸóÇÿ_ñ£Úør1ÃL»ÿž_øòÿ/káÈÇ 6ïþyãÃühö°îŒpÓ®¿ç—þ<(ö°îŒpÓîçŸþ<(ö°î’X\ùgÿ =¬;‡$‡}ŠãþyÿãÂkáÈÇ )ÿç˜ÿ¾…/káÈÇ 9ó÷?ñáGµpäc¾É7÷?ñáG´päák0þÔQícÜ9¢Þ_îþ¢iáÈLj$þïê(ö‘î’C'÷QG´päï)ý?QG´päáÃó£ÚG¸rHpFôÒ=Ã’BH·[-¼‰7™wqצG¥Då+\qR‹½ŠÞN¥ÿ?Ñÿßþ5—,{—yv K…½ )PÞ2¯µRåŠz‰ó;hršÏü…®ß5™¡ÞO÷Çû«ü…$TÀ( € ( € ( € ( € ( € ( € ( € ( € ( €ÔP¬ÿÈZçýó@äÿ|º¿ÈR@EL€ ( € ( €©æÝ¤m3Äž[9(r ÔSM&ÝýŽßþîï”ÿâj½œ» áö;ùÿ¹ÿ¾Sÿ‰£Ù˰\>Çoÿ?÷?÷Êñ4{9v ‡ØíÿçþçþùOþ&g.Ápû¿üÿÜÿß)ÿÄÑìåØ.c·ÿŸûŸûå?øš=œ»ÆIokRúÈ êƒå^¬B÷=H¤á$µÏöHÿŸËŸüsÿ‰©dùü¹ÿÇ?øš?²Güþ\ÿãŸüMÙ#þ.ñÏþ&€ì‘ÿ?—?øçÿ@öHÿŸËŸüsÿ‰ û$ÏåÏþ9ÿÄÐý’?çòçÿÿâhþÉóùsÿŽñ4dùü¹ÿÇ?øš?²Güþ\ÿãŸüMÙ#þ.ñÏþ&€ì‘ÿ?—?øçÿ@öHÿŸËŸüsÿ‰ û$ÏåÏþ9ÿÄÐý’?çòçÿÿâhþÉóùsÿŽñ4TÇå<±ïwÙ&ÝÏŒýÕ=€þõ ê(ˆÖä-sþù ò¾?Ý_ä) "¦.e¤‡Ì”2®àÊ Ho=Oä+G{°n11µYQÎîCtã‘Èô©°Cz\ÆnÀ…ÜpIÉöî;¥7¯q9$Ž5Ù ’ý‰x㯿ÄQW°¹™á™ÆÀŒÎ1ØçðÉ4’º3zÑ©,…³–#<ăÐwÇ×­>P¯\>HØ»É%ùœ QÊ€z]³ÊQ"$d¨nq‘ž§Ç§éK–È #)j2ÍÖ·p’¨—p¦‰NGÐÕEꀪÚ܉)ýÑfdD ²\˼ªIÇ–F@==k~bKW"52Z¼o"-_+¹¼Í„r2C’2Ctãù€­q«…¶kgž$t $q‡“扟nÝ­Ðl9õö4œ®±j“Â’‹›we·€Îò’Šeöü¿Þ!Ç“ÓÍÜçW{IÝñãýãˆdÞ l‘‡%G9ŒñÇnzŠ­¸‹Vž@#ûYÝÂG¿zFß+7Þd€‡¢ž£ÔàR)no$¿òg‰"‰$³`¡÷Æ|Ó¡ÛëÐ$›v`ŽÆ°(( € ( € ( € ( € ÈŸþ>në¿þÓŽ€#EqÏü…®ß4ÞO÷Çû«ü…$TÀh‰k>EƦ:*wÖâð#1p0ýG'n{:þµ €‰kaìrN::ÅM€XJ‘´ãŒ|ÇŽsǶß÷á?€"ßþ}m¿ïÂ…E¿üúÛß„ÿ <‹ùõ¶ÿ¿ þyÿóëmÿ~ü(ò-ÿçÖÛþü'øPä[ÿÏ­·ýøOð È·ÿŸ[oûðŸá@‘oÿ>¶ß÷á?€"ßþ}m¿ïÂ…E¿üúÛß„ÿ <‹ùõ¶ÿ¿ þyÿóëmÿ~ü(ò-ÿçÖÛþü'øPä[ÿÏ­·ýøOð È·ÿŸ[oûðŸá@‘oÿ>¶ß÷á?€¡Q6"".s„@£?‡Ò€ÔP¬ÿÈZçýó@äÿ|º¿ÈR@EL€ ( € ( € ( € ( € ( € ( € ( € ( € (EqÏü…®ß4ÞO÷Çû«ü…$TÀ( € ( € ­s-À¹·‚ÛÊ .òL¹ÀÚ3Ú€ËÔç­‡å'øPåê?óÖÃò“ü(òõùëaùIþyzüõ°ü¤ÿ <½GþzØ~R…^£ÿ=l?)?€/Qÿž¶”Ÿá@=Ú^à ïjV@ç÷aóòŒ÷  ÛÌiÖ4uA±œ’›ºê?½@—/üü§þŸþ.€._ùùOü?ü]\¿óòŸøøº<¹çå?ðÿñtyrÿÏÊà9ÿâèòåÿŸ”ÿÀsÿÅÐåËÿ?)ÿ€çÿ‹ YcVX9#½ž»§¥>€ ( € ( €ÔP¬ÿÈZçýó@äÿ|º¿ÈR@EL€ ( € (  ²ÈZËýÙ¿ô µ@Gs:[BdpO!BެÄàÄ9â€*I¨KnV;¨%vP‚9 +)uBr@äc¸ç®,Z]-ày!Úе$ ä=³Æ{óÛ€O@U“þBÖ_îÍÿ Pãþ>ÿíƒÿèI@ nn<…@«¾Y[diœnlÉì0 ü;œ ˆÞù1µÄc”’B]Àc‘œr$ € ©Z<ÞZHXåFðŒS$ümäŽ{ŠS´eb$ (È%oÆSŸ’>îzQ@Z„s]G @ÈìK¬¥JðTŒŒïžØõ  tÆÿ›÷ŸÿE½>€ ( € ( €ÔP¬ÿÈZçýó@äÿ|º¿ÈR@EL€ ( € (  ²ÈZËýÙ¿ô µ@Gs\BcrG!ƒªÀäÀ€yâ€)O¦5âÿ¦Ë® €,&ÐêÄm$ç;@9=‡rn "YŠ·îämá1÷[¾=_©'¿P@dÿµ—û³è8ÿ¿û`ÿúPè›=P«l–&ßã;[r;Œ?Ç€*\é²^" ›ˆå`NC@ qÊ©' 1Á;º·8 ¶Ò>Ïeö?wï!}Û1þ¬F1׿—úÐ)ÚÄYËpoªÄ†.ÊAò~oºÆÜäû`öZ`µ™%*® C2Û:Øïž½†_ 7ü|Ûÿ¼ÿú-èôP@P@¢€8gþB×?ïšï'ûãýÕþB’*`P@P@Wž žê  x”Ä~ó$r1Ú€åê?óÖÃò“ü(òõùëaùIþyzüõ°ü¤ÿ <½GþzØ~R…^£ÿ=l?)?€/Qÿž¶”Ÿá@—¨ÿÏ[ÊOð ŠÚèÞÃ=Ķ¥bWE¿'r‘Ü}(ræïMŸêÊaØŽK)ì¡ ÅÇý;ßÇÿâ(ÅÇý;ßÇÿâ(ÅÇý;ßÇÿâ(ÅÇý;ßÇÿâ(ÅÇý;ßÇÿâ(ÅÇý;ßÇÿâ(ÅÇý;ßÇÿâ(T”ÍÈ` ›ÊìIʰî£Ö€@P@P@ê(ˆÖä-sþù ò¾?Ý_ä) "¦@P@P@P@P@P@P@P@P@¢€8gþB×?ïš´þ%ÔY‰Ýö Ò€þ=Cûñÿß‹ÂG¨~?ûàQ`øHõïÇÿ| ,ÿ ¡ýøÿïE€?á#Ô?¿ýð(°ü$z‡÷ãÿ¾ÿ„Pþü÷À¢Àð‘êßþøXþ=Cûñÿß‹ÂG¨~?ûàQ`øHõïÇÿ| ,ÿ ¡ýøÿïE€?á#Ô?¿ýð(°ü$z‡÷ãÿ¾ÿ„Pþü÷À¢Àð‘êßþøXþ=Cûñÿß‹ÂG¨~?ûàQ`øHõïÇÿ| ,ÿ ¡ýøÿïE€?á#Ô?¿ýð(°ü$z‡÷ãÿ¾ÿ„Pþü÷À¢Àð‘êßþøXþ=Cûñÿß‹ÂG¨~?ûàQ`øHõïÇÿ| ,ÿ ¡ýøÿïE€?á#Ô?¿ýð(°ü$z‡÷ãÿ¾ÿ„Pþü÷À¢Àð‘êßþøXþ=Cûñÿß‹ÂG¨~?ûàQ`øHõïÇÿ| ,ÿ ¡ýøÿïE€?á#Ô?¿ýð(°·½Äï4˜Þç'ÿÙlibstruts1.2-java-1.2.9/doc/images/how-to/netbeans/creating-project6.jpg0000644000175000017500000001467510404045250026551 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„   (1#%(;4>=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀt3ÿÚ ?Ù×5¦ÒÝÝ%¡bI ´*‚OCž¦´¥KÚu&R±Ÿ‹ZpÆ H¥2Æ0íü‡[}WÌ\ï±¾7XøлgUˆ?¬b‡„kvþCGŽþÉÿ}þ&—Õ¼Åí<…6cÿ0ôÿ¾ÇÿGÕ¼ÃÚy ÿ «Ð=?ï±ÿÄÑõo0öžC‡ŒÛþ|þûüM/«ù‡´òxÉ¿çÁ?ï¡ÿÄÑõ0ö‚ÿÂ`ßóâŸ÷Ðÿâhú¿˜{O!ÃÅíÿ>)ÿ}þ&«ù‡´òþæÿŸ$ÿ¾‡ÿGÕüÃÚy Éú…ÃÌ=§£_oùöOÓü(öaí<…þÝoù÷OÓü(öaí<‡m·üû§éþ{1{O!F´ßóøQì<Çí<…þÙoùàŸ§øQì<ÃÚy 5vÿž ùð¥ì<Åí<…³Ïü‡øQì<Çí<‡j7üñOÈ…ÃÌ^ÓÈQ©±ÿ–Iùð£Øù‡´òj-ÿ<“òáG±óiä/öƒÏ4ÿ¾GøQì|ÃÚyÌåšß#ü(ö>aí<…ûkq?ï‘þ{0öžB‹¶þâß#ü(ö>aí<…MýÔÿ¾GøQì|ÃÚyId¨œ œ…$•Û›{!ù›û±~iQËã¼»=ÉŽu…¼­ì¥€O<}E>Eч3[£†Öض¯tIÉßPY¯ã_õÖŸõï7þ‹Ó†êg=Ñ”Ÿfü‹¸–Ù|ÛqŒ¹DBÀ²€pÎH’sަ»$íuëúþºfjÏ4†É®YL›hF ¡2v€A9y$ŸZrøW¯è.æÞ¯ kâq£E 1Y´°Ä6BÀ!só‘»<žs\°~ç7Q½ì ¢é~n¤ßh¸Øæ™s#/UVà;r}>yiæ«P³Ñl'ºw¼–r–ðM¼£3’6ì9#Ôퟜ’óX¾Òíc´Ò¬vbynfƒí ç…Ë e¸è21R¤îßõ°ÚÙu‹-6ÏzZ\»\G3Fñ6[åóµ@99ëÖ®“ÝÒ[‚.âÛg–^[XïÆÑ¶paÎÞç×Ë;É?+þ¥hGw¤iVwbÒKçYÒH•³üJØÜ~îä|ÍMNM^Âi- î|;ioË´î ÊÌ ©òœþèþÐÿ"’¨Û_רùPÍ!m¢Ñc¸œ[¨Á]å‡ydÚ QòŸéõ§;¹Yvma¯¦ØK ¤°´ñµô®‘)ª0žü)÷ÉïMJJéô "Q¥Z$ѺyÁVÿ쌬ÊÛ½îãð æ—;·Êáʉ'Ò¬ K«¦‹Í–eRÝÚÄ•WŸuö¤§'²ì+©vVÖ×zln,—) ,6ÍÓn9ãÞ›“iù’±WTX—R¸H#1ªÈË‚AÉé€0=ªá~Ur^åeªñÖ€)ñ@ñ@Zu (í>€´áÖ€:Râ€(ñ@Z±I?Üþ¢²«ðšSøŽgPº¸Žòé,în[O >Ù2æØÿŒ“ž@oQé\ÆÆ¢ì:µ¿”ûãû/ÊÛ·n—=þµ¤:ú>‡/¬ÿÈZçýóPY¿âÛ ÛǶ6P‰JDêÙp¸Ü€w#Þ·¡8Â÷"I»Xçm´[ O²E,jT–D`¹ëŽrÉÈõÑõˆ_ðÂå"“ÚäÓ™f¶¤ˆ;`3€àÒ›ÄA¤¦]w‰DKû‘cj}¨aqŒ`ní¥gí)HžY ‡I×áçˆMÏò-†lœœœóÍ7R›VY¦Ÿâ8åyUîI1½ÅȱÓ'w8¥í)mú,†ÿekÆ)"a)ŽVß"ÁÞ¤g“ÀæiL9dI>¯Ü K“<ÈBÉpëÉ¡T¦¶ 6¯»”Û¶ìÏš¹ÛŒc¯Lqô£ÚÓY?]xfh@Ë7®AŒÑí)ÞáË }7Z“Ìßæ·›3tàïÇLóÎ(ö”ÐrÈA¤ê¾O“å·•»vÏ5vç¦qž´{Xn²t­Q£HÞ6)v)•H\õÀÏ{X,‹Io¬ ˜g™á¡mÈ&›pþúú~U<ôíd-¾¶­##ʆG.Û& §ÑÏL9d4Xê¾G‘ûÏ'þyùÃo\ôÎ:Óö”ïpå–Á-†§;œ<ŒyA8üM ¥5°rÈA¥^ùcÿ¯øÓö°î.F(Òï?çþ>¿ãGµ‡päc†™wÿ<¿ñåÿ^ÖÑŽmßüòÿLJøÑíaÜ9á§]Ï/üxQíaÜ9á§ÜÿÏ?üxQíaÜ9$(°¹òÏÿ{XwIûÇüóÿÇ…Ö=ÑŽSÿÏ1ÿ} ^ÖÑŽsçîãÂkáÈÇ}’oîãÂiáÉ!ÂÖaü¨£ÚǸr1E¼¿ÝýEÒ=ÑIýßÔQí#Ü9$(†Oîþ¢iáÉ!ÞSú~¢iáÉ!Â6‡çG´päàè?:=¤{‡$„‘n<¶[y6n 2îã¯LJ‰Ê2V¸â¥{¼Kþ£ÿ¿ük.X÷.òì,— z...R =¼d_j¥ËõævÐå5Ÿù \ÿ¾k3C¼Ÿï÷Wù H©€P@P@P@P@P@P@P@P@P@¨ #YÿµÏûæ€;Éþøÿu¤€Š˜P@P@$p›‹Ô‡Íx”ÆÎvÉ ¨Aõ4sû$ÏåÏþ9ÿÄÐý’?çòçÿÿâhþÉóùsÿŽñ4dùü¹ÿÇ?øš?²Güþ\ÿãŸüMÙ#þ.ñÏþ&€ì‘ÿ?—?øçÿ@öHÿŸËŸüsÿ‰ û$ÏåÏþ9ÿÄÐý’?çòçÿÿâhþÉóùsÿŽñ4dùü¹ÿÇ?øš?²Güþ\ÿãŸüMÙ#þ.ñÏþ&€ì‘ÿ?—?øçÿ@öHÿŸËŸüsÿ‰ û$ÏåÏþ9ÿÄÐý’?çòçÿÿâhþÉóùsÿŽñ4dùü¹ÿÇ?øš?²Güþ\ÿãŸüMÙ#þ.ñÏþ&€ì‘ÿ?—?øçÿ@öHÿŸËŸüsÿ‰  ¦?)å{¾É6î|gî©ì÷¨Q@F³ÿ!kŸ÷Íw“ýñþêÿ!I0(As(…$>d¡•wP¸b@xê!Z8«ØEƒpÁˆ1ªÊŽwrã§ŽG¥M€ŠÒæ0#v.ã‚NH°ÇqÜ})¸Ø{‰Ì $q¨ÈT—ìHëÇ}ûþ"н€}ÌÏ ÈF6fqŽÀ¯?†I¤•ЛÖId.œ±à tƒ¾>½iò€­zà±òFÅÞI/ÎààbŽTÒížR‰#%CsŒŒõ8Æ8õ?J\¶@X©Õ™íîüØáimä!¿ÌŸSù}cÇ9ãž:ž”ù˜ (pêñÆŒÀ–r¸ÇÒ’ó4´‰¢Ù,(ƒ‘µAçÛ¹?NÔùôCoà†“ÑŽM+°³Å¸°Ÿâ8ê@ì}Ç­c$¤ Ü_¬S.äh¾!‚äyr  ¢X:íx¤o’DbfrÎÁŽrÜçÆI}¥Ùjû\>`dØÃsð q’Fz‘ƒ@ :E™RÊ„ÈònIäVŽX@'’£Œóаö°=¨¶1(„åÛŽ˜ÇL``Ž˜ SK²U aóÝŸ5šMņ mÄî;~\œ8éÅ5ô{$IvŒ£)iüË®yå¸qäŽ ÇäÒì‘*$H£sp"mÈ:ö?Ÿ|Ð{ ÊÎÎ yF7e€Ê•l…Î,¡ˆHç4j×Nµ´¼Àãj†v`‹ýÕáG…Ààz ³@P@P@P@‘?ü|Üÿ×ý§F:Šâ5Ÿù \ÿ¾h¼Ÿï÷Wù H©€P@P@PFûñ£ñŒ:ãñú o‘oÿ>¶ß÷á?€"ßþ}m¿ïÂ…E¿üúÛß„ÿ <‹ùõ¶ÿ¿ þyÿóëmÿ~ü(ò-ÿçÖÛþü'øPä[ÿÏ­·ýøOð È·ÿŸ[oûðŸá@‘oÿ>¶ß÷á?€"ßþ}m¿ïÂ…E¿üúÛß„ÿ <‹ùõ¶ÿ¿ þyÿóëmÿ~ü(ò-ÿçÖÛþü'øPä[ÿÏ­·ýøOð È·ÿŸ[oûðŸá@‘oÿ>¶ß÷á?€"ßþ}m¿ïÂ…E¿üúÛß„ÿ <‹ùõ¶ÿ¿ þyÿóëmÿ~ü(ò-ÿçÖÛþü'øPä[ÿÏ­·ýøOð È·ÿŸ[oûðŸá@P¨›9 QŸÃé@ê(ˆÖä-sþù ò¾?Ý_ä) "¦@P@P@P@P@P@P@P@P@¢€8gþB×?ïšï'ûãýÕþB’*`P@P@V¹–à\ÛÁmå—y&\àmí@ åê?óÖÃò“ü(òõùëaùIþyzüõ°ü¤ÿ <½GþzØ~R…^£ÿ=l?)?€/Qÿž¶”Ÿá@—¨ÿÏ[ÊOð í/a†wµ+ sû°ùùF{Ðíæ4ë: ØÎIMÝ ŒuÞ Ë—þ~SÿÏÿ@—/üü§þŸþ.€._ùùOü?ü]\¿óòŸøøº<¹çå?ðÿñtyrÿÏÊà9ÿâèòåÿŸ”ÿÀsÿÅЬ±«N¬‘ÞŠO]ÇÓÒ€@P@P@ê(ˆÖä-sþù ò¾?Ý_ä) "¦@P@PY?ä-eþìßúZ €#¹-¡28'¡GVbpâHñ@$Ô%·+Ô’»(A…•”º¡9 r 1Üs×-.–ð<íhÚ’Îò Ùã=ùí‚@' €*Éÿ!k/÷fÿÐ(qÿöÁÿô$ Ð77B Uß,­²4Î76 äöþÎDo|˜ÇÚâ1ÊI! .à1ÈÀÎ9’?†@Ô­o-$,r£xF)’~6òÇ=Å ©Ú2±dŒ7Œã)ÇÏÉw=G¨ -B9®£† Näv%VR¥x*FFwƒÏlzкcÇÍ¿ûÏÿ¢Þ€@P@P@ê(ˆÖä-sþù ò¾?Ý_ä) "¦@P@PY?ä-eþìßúZ €#¹.!1¹#Á‡U`rà@<ñ@§ÓñÓeŽW@ hub6’s žÃ޹·¿‘,Å[÷r6ð˜û­ßǯԓ߀ ¨  ²ÈZËýÙ¿ô œÇßý°ý (ô Í¿ž¨U¶Koñ­‚9Æ cƒ@.tÙ/ÍÄr°'! 8åT“†àÝ[ŒÛig²û?Ÿ»÷¾í˜ÿV#ëßËýhN”íb,å¸G·UbCe ù?7Ýãnr}°û-0ZÌ’ƒ •W!„F™m?ìwÏ^À/Ðþ>mÿÞýôú( € ( € Q@F³ÿ!kŸ÷Íw“ýñþêÿ!I0 ( € ( €+ÏÏuД9Gów¦Ïõe0ìG%”öÐÐbãþ¿ïãÿñbãþ¿ïãÿñbãþ¿ïãÿñbãþ¿ïãÿñbãþ¿ïãÿñbãþ¿ïãÿñbãþ¿ïãÿñ*Jfä0MÇåv$åXwQë@ € ( € ( uÄk?ò¹ÿ|Ðy?ßî¯òS € ( € ( € ( € ( € ( € ( € ( € ( € Q@F³ÿ!kŸ÷ÍZê,ÄîŒ{é@ ÿ ¡ýøÿïE€?á#Ô?¿ýð(°ü$z‡÷ãÿ¾ÿ„Pþü÷À¢Àð‘êßþøXþ=Cûñÿß‹ÂG¨~?ûàQ`øHõïÇÿ| ,ÿ ¡ýøÿïE€?á#Ô?¿ýð(°ü$z‡÷ãÿ¾ÿ„Pþü÷À¢Àð‘êßþøXþ=Cûñÿß‹ÂG¨~?ûàQ`øHõïÇÿ| ,ÿ ¡ýøÿïE€?á#Ô?¿ýð(°ü$z‡÷ãÿ¾ÿ„Pþü÷À¢Àð‘êßþøXþ=Cûñÿß‹ÂG¨~?ûàQ`øHõïÇÿ| ,ÿ ¡ýøÿïE€?á#Ô?¿ýð(°ü$z‡÷ãÿ¾ÿ„Pþü÷À¢Àð‘êßþøXþ=Cûñÿß‹ÂG¨~?ûàQ`øHõïÇÿ| ,ÿ ¡ýøÿïE€?á#Ô?¿ýð(°ü$z‡÷ãÿ¾ÿ„Pþü÷À¢Àð‘êßþøX Û‰ÞâwšLos“ŠÿÙlibstruts1.2-java-1.2.9/doc/images/how-to/netbeans/creating-project8.jpg0000644000175000017500000005365010404045214026547 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„   (1#%(;4>=:498AI]OAEXF89QoRX`ciji?Ns{rfz]gid//dC9CddddddddddddddddddddddddddddddddddddddddddddddddddÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀf¤"ÿÚ ?Óñ³w¦On¶ì¡"ïN Vbx£Px÷ï¤ñ½B“ø§øÔí¸¶>?þ‚µ—¾bHÒ§Úw©x¥îØÜ£Ôûì¥N. ´fÛ¹fêÑN òöËŒ•xØqŒ|Þõñž®3‘ÁÁù[¯çYÖ²¬>&²Ì¡ü†Œ4„ðH ŸË§á[¶×šV¬‘IwE3HLÉœ,Ží?Tá¿„W}ÊcÆZ¹© Ü~´óâíd&ò‘…=ÖÇó«Il–Ú„0Zà ÒÁ"’E+!ÉààqÛ5fâxKU’d6$Ýæù²>]½½E£ü¡wÜÌÿ„ÏUÿ¦?“ð™ê¾°þMþ5búÏK{¨ †(á„Ì¡nLŠT®;ŒäçÞ¦{M*;s9ŠÜL-'o-œ½YvœÔ‚h´;½Ê?ð™j¿ôËòoñ§§‹µ‰>âÆØë…cýjÜzCÌÙX“Ì·üÍÁ’6#,1œö¬ÿ 1KKlª€ÚÈŠw„ÝÆOÖŸ,-°®û“ë7”@¾¥[Δø³XUÜÈŠ¾¥[ή=Äköi'™ÅtÔI#Þ_/®qT¼K/™?š1 cxŸ#;zmÍ 1nÖ ¾âÿÂY«ìßµ6{kcùÓG‹õRp<³ô þ4û i+s<^[Úˆù€€w &Ï\çšv‡•ÜðÜÍÚn pÊÞ ·­°×AÝ÷#/ÔóɈ~ þ4õñ^®ùبØôV?Ö± û8g™Hþ?­kè·Q[h·í$Ž­æDBÆÀ1äô¦áÐJO¸ïøKµA×ËèßãJ<[ªòÉ´í:=;ìM'“çIç`£º† ~:æŽXZö ˸Ÿð•j>±ÿãßãGü%ZŽ3˜ÿ_ñ©’ÛO6{ŠÄ.<‡*…SÏœýìv©­ì4Ñ L.QàÄ€Þ ¸Î{÷¢Ðì?{¹SþGcü›ühÿ„£Qõÿÿ³Z{ËøíÀ{—‰€8‡¯ëNžÊÊ+E/I³.$ÏÌdÏËÞ•¡Ø^÷r ¼EªÛÊÑLª’/U`ÀÖ˜[Ë©Œis!˜Š>Mƒ¡¡êŸ¯øÒÿÂM¨z§ëþ5Š)j½œ{ ™›?ð“jÞO×ühÿ„›PõOü{ük–gÁÌÍŸøIuTýÆ—þMCûÉúÿbŠuÎ=ƒ™›ð’jÞO×ühÿ„“Pþò~¿ãYQìãØ9™±ÿ %ÿ÷“õÿ?á#¿þò~¿ãY¢gÁÌÍøH¯ÿ¼Ÿ¯øÑÿ ÿ÷—õÿÉ QìãØ\Ì×ÿ„†ÿûËúÿðßy_ñ¬šQG³aó3Xx‚ûûËúÿð_y_ñ¬ª(öqì.fjÿÂA}ýåýÆ”k÷ßÞ_×ük&G³`æf ×¯¿¼¿¯øÒÿo^ÿy_ñ¬±KG³aó3Pk×¾«úÿÛ÷¾«ÿeÑG³as3gÄZ3j²BVçÉÙÓònÈ {ûV,^šÂUÐ7lxÏë]…Çßîä+ûRO´\¦! ìå›vÎzb¹cVqVLÞÈÆOì9þÐÉÿ®?ýzü!§þÿòÿ^¶Y·Qûó±·°ãb ŸLàÖ•W¶Ÿqr£•ÿ„4ÿÏÿþBÿëÑÿqÿŸÿü…ÿ×­íJñ¬£‰”&d“f\öÒ¡“VH­<Æ òÜDyÚ9 d‘Æp*=´û‡"2?á#þ_‡ýúÿëÒÿÂçø߯þ½miÚÛeeDD Ø8j½G¶ŸpäG/ÿyÿŸïü…ÿ× x@ù~ÿÈ_ýzÛ7ÄFG–<ñ/–#Ï¿?Ni‘êö¬Ñ#>ñÐp è??:=´û‡"2?á?óü?ï×ÿ^øDOüÿûõÿ×­ÅÔ­[f$ÆøüÀíÏ_~ƬÆâHÕ×8`ÈÅÚ}Ã’'5ÿ‰ÿŸßü…ÿ×¥ÿ„HÿÏïþBÿëÖî¡rÖ–¾j-½ol¹€É?A©7—6Aœ”Ë) úsG¶ŸpäFWü"_ôú?ï×ÿ^øDüþûõÿ×­sªÛ»‰ŒϘ¥~]¬wo”Кµ¬ŠJogX\±êz~ò£ÛO¸r##þ3ÿ?£þýõêH|5-¼‚HuŽŒ±àÖµlïÅÝÌñ,n«Ü3)È«”½¬û‡"9ÏøENy½Ïý²ÿëÑÿ±ÿŸÏü…ÿ׫I®bOÞˆ‚yŒ˜Rņ éŽÞµfÿUŽÖ"Ê7?–d r26³ýÑígÜ9"fÂ,çóÿ!õéá?óùÿÿúõ«ý£^Eo-½ÙKòƒœzàŒUÚ~Ú}Ã’';ÿ¹ÿŸÏü‡ÿ×¥ÿ„`ÿÏßþCÿëÖŒ—òÇ-Ó“ìÖÌÛqÝ÷CŒcø½{SgÖ­£YB6ç×€ppqô£ÛO¸rD¡ÿÁÿŸ±ÿ~ÿúô¿ðŒ‘Òóÿ!ÿõë^èf”D¥„„µ—cüP¨ÓUµ+k9í ÛN2À>¸ Òö³î‘3†Hÿ—¿ü‡ÿ×¥ÿ„hÿÏßþCÿëÖýW{‘ו †=êùêAù‡äGëéGµŸp䉑ÿÑÿŸ¿ü‡ÿ×§É K(A%ó0EÚ §Ýƒš¸º´ å,ÿ»yqýÐOËŸLŠpÕmŒ)*ùŒ®ÛWrOµÖ}Ã’&wü#Gþ~ÿòÿ^—þ¿ú{ÿÈýzÐþÔ€3™ö·“·jœŸo˜R>­nB»°€áÊ„œgéGµŸpäEøG?éëÿ!ÿõèÿ„wþž¿òÿ^´U¶;·ERÃ{) Jç ýåRÛ^ErÒ$aÃGÊÊA£ÚϸrDËÿ„wþž¿òÿ^øGéëÿ!ÿõër¨ É’òt!X!PåÃpsŽ1íGµŸpäE/øGéëÿ!ÿõéáÿ§¯ü‡ÿ׫ÿÚPã%ó3+aßùTk«ÀKðY|À±”·‚ŠÙÿǨö³îˆ©ÿÿý=ä?þ½/ü#ÿôõÿÿúõ²¬C)È# ÔW“›kWŸnáÜÜôQ÷à2hö³îˆËÿ„þžòÿ^ ÓÏþCÿëÕ©5EŽk„d!bkxŒdãÃò4–Ú´Rª‰•øUIE'¶hö³îˆ¯ýƒÿO?ùÿ¯Ký…ÿO?ùÿ¯V?µàûB  ±£g ƒór¡vúçwéRJß’ÊTC){}yQígÜ9"RþÂÿ§Ÿüsÿ¯Göý<ÿä?þ½iCu툛wÊ8ã8þU5Ö}ÑØôóÿŽõèþÄÿ§üsÿ¯O]n’T39W? äçð¥}nØe'hb$ÈåWc6qÿ4{Y÷H‘ÿbÓÇþ9ÿ×¥þÄÿ§üsÿ¯Z÷QÜîò÷½C ‡èjj=¬û‡$LŸì_úxÿÇ?úô¿ØßôñÿŽõëVŠ=¬û‡$L¯ìaÿ?øçÿ^—ûÏÇþ9ÿ×­J(ö³î‘%¸ûãýÑü…d:ánmEµÉ[†lÈànÈæµ®2fCFI\ô\úŠgý6ÿÈ_ý•fQš4h•÷,‡$ÙPI‹`g§Þ=+JŸôÛÿ!öTlÿ¦ßù ÿ²  z”nñÄñù»ã“rùJ¤ô#¡ãÕqb×±3K%ÄLêMÊ ¸‘Ó8ê~µ©³þ›ä/þÊŸôÛÿ!öTNÊÁlžB’³+ãå pyÿ¹FÏúmÿ¿û*6Óoü…ÿÙPk°ÿhû Ó:¹0}þ÷ùÍiÄèèìÚXRI9íÛ¥ilÿ¦ßù ÿ²£gý6ÿÈ_ý•Qm*ݙ؎^A'Nƒºý ,àF¯Q³þ›ä/þÊŸôÛÿ!öT[P‰eµÚѼ]bKaÇØÝÝ#ã¶sõäš»FÏúmÿ¿û*6Óoü…ÿÙPMÄN·wʺ– ˜3¢*mo”¤ç°§ÿdE$n7¼k&HPªI9<÷æ´öÓoü…ÿÙQ³þ›ä/þÊ€( 0 <ß´IçwH1’Ü(æªÇ¥MÐÃ"Ú&‹劀2F=¾õ³³þ›ä/þÊŸôÛÿ!öTTv‘ÝÆ©(áX7øÄ?Ÿgý6ÿÈ_ý•?é·þBÿ쨜ÚzKuçîÚN7  ç9=? - ö«jx€Ò*Ãé“ùÖžÏúmÿ¿û*6Óoü…ÿÙPyÒÔHòG<ŠïÄàåHPG?îŽh}"´6ÁÝP¹aê2¥qúÖ†Ïúmÿ¿û*6Óoü…ÿÙPtÚ\mf!ŸkÉ Rq¸°n3ÛïSôÛkˆžy®›2K·ÙÆ3ì*öÏúmÿ¿û*6Óoü…ÿÙPY² šæt{[³*Æ_åÚ“ƒ×=ëKgý6ÿÈ_ý•?é·þBÿ쨇ök <árÿiÏúÝ£¦1Œtì)ƒG"1Å+¢’ ÀU^ýþQϹ­-ŸôÛÿ!öT…p ó¿òÿe@ª$àc'­Gu´ÛH&™Yv˜×`x=jE²w…/ðnäŒúŠ]ŸôÛÿ!öT‘å«ÛÁnö7dFÀ–!>cüDüÝòsõ«éQG ‘ ‰Xž8Úsý*þÏúmÿ¿û*6Óoü…ÿÙPhÑÓ(|ù1lˆq„•‡×GÖ¥þ͉‘DŒ]Äžc1xÿ?*»³þ›ä/þÊŸôÛÿ!öT¥¤vŠëᘷøÀqSѳþ›ä/þÊŸôÛÿ!öTð,Gfö—~Z9ù°¸ äzôù©nto2ÑÑ%̘;>Pƒî²Žƒý£Íklÿ¦ßù ÿ²£gý6ÿÈ_ý•W¶¶òGiG|Íè: ±FÏúmÿ¿û*6Óoü…ÿÙPE?é·þBÿì¨ÙÿM¿òÿe@l?óßÿ ÿöT›ü÷÷çÿ²  gÿˆÿÜÿÙ*$‚yÀÿõTÓÿÇÄîì• žzœžœò~œô UF¿Q$аNâ6Ú̪1œëïVê¼Â—’ÌÈÎç À úÓ@Z·™. I£Î×ê*JÎÒ^üÈ"G½ŒÉŒ>é;úsÖ´¤)ÁÇÒ H$à jH’gc«c®ÓœV /7ur§çóLYVÄtïW4›‘q¶HæXÒFÊw ÈrqÀ<àý)\vÐÔªí{ç;°8Î*ÅdíÜ÷¦#JÒa”'èjJ£aÄÎ= ·?ú‰?Ý?Ê€ –õ#r nÇR IÂÏœíY¬€€qÐÿZ·§FÁ °À @j»‰IwŠ–FÙ>3´ŠËpÌ[$rIû¾ô¬##¥'ü´Oøþ‚j­ƒ±Cs³¡«_òÑ?à_ú  ?êÓû‹ÇáßÚ‘NrrO=i[ýZÿ¸½ð:wö¤SNIç©ï@ ’eÑX7~‘'W™£ü½ûU{ù”b"¤ž9éIc*+˜ðAc}hõE,é ³ÈÏ¥ª:‡ÞCƒŒc8÷  qJ’¨d`E>³-ØÇr„tc´ŠÓ I"Ĺcô´ØgYÇu Ô øÔ6CmÒý iT3\¤' œã šª_cü¥>Èå`¼«ƬVeˆÿIät§@Ïp°`I?…\$Üv5 ÝÆÉB”R“»¿Ò¢´S%Ϙ£j ž:}(F™,©Ëœg õ§Õ ðDª[î‘ñy'€™v¢L`>?ÏÓùtÞ„©_BÕ7xÞSø€ÍGxqlüã§ó¬­ß1>`Á3AFÝ5œ!Pˆà}i–Ä›xÉë´Qp¬B2‚v0bS@ÑYs]ÈÒpÍϽh@Å BNIhJ(¢€$Ÿþ>#ÿsÿd¨›$Ÿ¿Ž3Ï_§< MI¦]†fÀÈvÛ¶¨ùº‡ýmÿïñÿ Ш…µ¸‘¥[xVV2ˆÀûë¯ëU<ÝCþ¶ÿ÷øÿ…n¡ÿ@Ûûü€-[[Eh$‚¾aù¾cÏ ü*jÏóuúÛÿßãþyº‡ýmÿïñÿ Òê0¬À{ » 3=Ífùº‡ýmÿïñÿ <ÝCþ¶ÿ÷øÿ…hTOm ±f‰I=N*§›¨Ð6ßþÿð£ÍÔ?èoÿøPØãH†#P£ÚŸYþn¡ÿ@ÛûüÂ7Pÿ m¿ýþ?á@~Éså/åSÖ›¨Ð6ßþÿð£ÍÔ?èoÿøP…CöK|ÿªOʪùº‡ýmÿïñÿ <ÝCþ¶ÿ÷øÿ…^Ž4v¢…‚—þZ'ü ÿA5CÍÔ?èoÿøR¬úŠœ®n¯ÿÖ  íˆsµ~;Ò óÝz“Ö¨yº‡ýmÿïñÿ <ÝCþ¶ÿ÷øÿ…^hÑÙK(%z:R9p€1êqT¼ÝCþ¶ÿ÷øÿ…n¡ÿ@Ûûü€4)C)VƒÔ¡æêô ·ÿ¿Çü(óuúÛÿßãþmm`F ±¨#¡-gùº‡ýmÿïñÿ <ÝCþ¶ÿ÷øÿ…^tYk¨aèi© qœ¢>ÕOÍÔ?èoÿøQæêô ·ÿ¿Çü(B™$i Ô6=j—›¨Ð6ßþÿð£ÍÔ?èoÿøPÄ‚(Û(OµIYþn¡ÿ@ÛûüÂ7Pÿ m¿ýþ?á@ž4r¥”½)À0gùº‡ýmÿïñÿ <ÝCþ¶ÿ÷øÿ…hR2«©VƒØÕ7Pÿ m¿ýþ?áG›¨Ð6ßþÿð  ±Å@ˆÐ.})Í÷OÒ¨yº‡ýmÿïñÿ <ÝCþ¶ÿ÷øÿ…hG÷OÑ?ôhÏ Žp éÓ¯<š¤gÔXó§[žŸòÛÿ­Iæêô ·ÿ¿Çü(BŠÏóuúÛÿßãþyº‡ýmÿïñÿ Т³üÝCþ¶ÿ÷øÿ…n¡ÿ@Ûûü€$:U—–È! 61‰À àdð2;b®B¨  `0ô¬ÿ7Pÿ m¿ýþ?áG›¨Ð6ßþÿð ,hS|´þâþUGÍÔ?èoÿøQæêô ·ÿ¿Çü(@À¢³üÝCþ¶ÿ÷øÿ…n¡ÿ@Ûûü€.¼1»neÉúÓ•B¨ ªn¡ÿ@ÛûüÂ7Pÿ m¿ýþ?á@Vq›Qí¦ÛÿßãIçj_ô ·ÿ¿Æ€5çûãýÑü…VšFŒ.Õ Y¶Œœ ³q÷Çû£ù ¯,K(PÀ8#9¡]F~V;\HëŒ3ŸN)~ÓG8õ #ðÅ)·C¼tW@˜` ÿDö¦G˰lŽHÜUh¿i‹°SŸË­β™6çqžÇŒæ˜¶Å0Q•\g˜û~$qËå·yê8úRÐ¸Ã ŽæÛ÷OçÒŸÄRccg ‘ÁíŒÿ:Œ[Aó p)~Ï„UÊ”]™ÇPqŸä)èGy«6Ø)Éã=1SGæòúÔ hR#pFAåsÛÒžöÊèU‹@'#n¨ÐÎìpE s’ œ•8ÿõûSØ ¸ï•@íM–ÈJÛ‹óë·ž˜ëéF€H.àÃä$©ÇLþ-FÞX÷©nÊí$‚F@úó@ÿ´õùó‡þÿð£ûOPÿŸ8ïñÿ ®/`*Nâ6€H*s×Ç®xÅ }n£;ËpØ ÎzczPí=Cþ|áÿ¿Çü(þÓÔ?çÎûüªB&ß™‰û¡˜ôî1Nû}¾åLî*IÆ}yÏÒ€-.¥¨3ª‹8rÇ÷Çü*;TÿŸKûü þ>!ÿ|V¤ÏåBòc;¶=q@¼íSþ}-ÿïñÿ <íSþ}-ÿïñÿ ².B¶É@ ‘§p=”ܧcÜH qÁ§f_;TÿŸKûüÂ;TÿŸKûü­ ¨ŽpÇcÏÓÖ„¸W›ËUo»œ•#YWÎÕ?çÒßþÿð£ÎÕ?çÒßþÿð«3]¤K!Àñƒ‚}3N–Û“@#‚ýtYSÎÕ?çÒßþÿð£ÎÕ?çÒßþÿð«?jO9ãÁ –ÁëéRÇ"È»—8r0E`QóµOùô·ÿ¿Çü(óµOùô·ÿ¿Çü*ÚÜÄÙÃtö?ŸÒ†¹‰@É8=ðqõúQfO;TÿŸKûüÂ;TÿŸKûü¬ý®ûwŒäí88<Ðn£Û”ËrLgœQfo;TÿŸKûüÂ;TÿŸKûü®GÇiÿ>ëùš>Çiÿ>ëùš~ÎAs)cšêöH] ‹†S‘÷jlRUˆ0–Þc*=ð{úë k+F]¦Œç7û>Ëþ}ÇýöÆg ¹Ï¾ž] Fcää°]¼‚sßñ©$µrah¦òÚ%+’¹È8ÿ ÜþϲÿŸqÿ}Ÿñ£û>Ëþ}ÇýöÆg ¹Ïɧ™ Ìì0vz°gôéLZ€ªf$+n/Óÿ‰®û>Ëþ}ÇýöÆìû/ù÷÷Ùÿ=œ‚ç9si(¥ƒqy ÜA…çýÑV¢ŒÃd‘’‘…Èï[?Ùö_óî?ï³þ4gÙϸÿ¾ÏøÑìä2o¡ûB4a¶œ«Œà‚ôª²éâPG6s½ÐŒcñ5е…›˜2Oûmþ4ŸÙö_óî?ï³þ4{9Îytà¬q)Ûw PÛÓéÍ2M9•U‘ÙÌK¶$àù”¯Ýük¤þϲÿŸqÿ}Ÿñ¤ûüñ^¸ÿXzþ~Ô{9ÎXØÝmr3¾mÁÛpà…XLT†t2ßFc'3Ÿñ®„XX’…y8¼<þ´ ÛˆPîéûÃÏëKÙÈ.s°ÚÌ/UŽVÝÙA çvsúšÐOõ‡ýÃüÅi ŒBœŒÞž½iVÊÄDJ\ŸÞŸŸJ~ÎAski᥎/za³9Ÿñ4Ô°Xàòãr¸pêHίJÝ69…FNd<ÏÚƒa`3˜Tc¯ï­/g ¹„,—bÌŽ\œ}âN˜ð¤þÏU¶òc`£vy\@1ì0? Þû€ÏîWŒg÷‡¿Nô ŸÜ¯ûÃ×Ó­?g ¹…ˆŽáfóˆçèôªËa,oQ“ä«#3>b¸íôZé¾Áaÿ½*E‰„ÚBÇP¼qÀŠÒþb)¦©sŠË¾6Ú»|¶¶Bgq9é‘éøÔ×:ü2"„‘Êü€IùA$tÇ\½*ÏÚí·nû û¶íÏÙŽqéÓ¥+^Àì¬Öw Sî“nNß§|ÀlWi—SJQHÙ@RFsëÅUÓà–[Ö,Ò4Qùk™2>@zgŸZ¶÷°¼MµºÀ‚ :õ¢ È`‰cKk¼(&ÉÇ©£NàdÚj—¢%Ź.Ù÷Q£sì{“Z+}w%×–­‡_~lw 篷ãR«R¡MŒåAÈØàž”ï¶ÁæyŸc¸ó1ßg9Ç×/Q>£s%»K$crƃØ%û€qÀê9Ú«h^$“ºI¥„aç9<Ÿnz}x«©sly?dºd$’9$䓸ÓݱÎlgåvŸôcÓÓ§J>`R:ž Àû:å†b7}é6t9ëRÿi\–æ…@fGÈêC•Ï\€qØUynÊà€·¨ýunM6)µ_¶MRm‰Q7 %19éÔ~U”Þ›Ïy¼ÄcæTÞÉœ¼§’¼Ž$•h˜ôq,Qh$”f5ã,=½iLZBƲµÈd q‚£?NGçUcÑ¥…íÄ^B¢¿ïv9ÆC}O"ˆô¶a{„À/²ÝeÎÜ@Ç+–'v é@Iô9.…º fc”0ÚWh8§—Є"böB" ¹qÁóøÎ«>‡s*2É$@0¢Š*ÄQEQEQEQEQEQEQEQEQEhê_ëSèŸÍkjÏþ<àÿ®kü«RÿXŸDþk[Vñçýs_å\…ÑEQEQEQEQEQEQEQEQEQEQEQEQEQEW;ü~§ýsþ¯]s°Çê×?êôVóþ?Oýs_æÕIyÿ§þ¹¯ójŽº!ð‰…QV ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(GRÿZŸDþk[Vñçýs_åXº—úÄú'óZÚ³ÿ8?ëšÿ*ä(–Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š)²1HÙ‡UШª:V omb3Æ!¸h–B€äFr§¸þUz€ ç ÿÔÿ®Õ룮vøýOúçý^€*ÞÇéÿ®küÚ£©/?ãôÿ×5þmQ×D>0¢Š*ÄQEQEQEQEQEQEQEQEQEhê_ëSèŸÍkjÏþ<àÿ®kü«RÿZŸDþk[Vñçýs_å\…ÑEQEQEQEQEQEQEQEQEQEQEQES'ÿQ'û§ùSéw£)î1@±Íjš™–R“CkŠPe×€3ŽàçïZmÔ—vû¦‚HdS´‡B¹÷íYóèñYéÑåhT+“ËH˜Áý9˜­ *I$°ŒÊråCÀtlF}èÝs°Çê×?êõÑW;ü~§ýsþ¯@o?ãôÿ×5þmQÔ—Ÿñúëšÿ6¨ë¢˜QEb (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€4u/õ©ôOæµµgÿp×5þU‹©­O¢5­«?øóƒþ¹¯ò®B‰h¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+ƒþ?Sþ¹ÿW®Š¹Ø?ãõ?ëŸõz«yÿ§þ¹¯ójޤ¼ÿÓÿ\×ùµG]øDŠ(«QEQEQEQEQEQEQEQEQE£©­O¢5­«?øóƒþ¹¯ò¬]Kýj}ù­mYÿÇœõÍ•rKEPEPEPEPEPEPEPEPEPEPEPEPEPEP\ìñúŸõÏú½tUÎÁÿ©ÿ\ÿ«Ð[Ïøý?õÍ›Tu%çü~Ÿúæ¿Íª:è‡Â&QEX‚Š( Š( Š( Š( Š( Š( Š( Š( Š(  Kýj}ù­mYÿÇœõÍ•bê_ëSèŸÍkjÏþ<àÿ®kü«¢Z(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ç ÿÔÿ®Õ룮vøýOúçý^€*ÞÇéÿ®küÚ£©/?ãôÿ×5þmQ×D>0¢Š*ÄQEQEQEQEQEQEQEQEQEhê_ëSèŸÍkjÏþ<àÿ®kü«RÿZŸDþk[Vñçýs_å\…ÑEQEQEQEQEQEQEQEQEQEQEQEQEQEW;ü~§ýsþ¯]s°Çê×?êôVóþ?Oýs_æÕIyÿ§þ¹¯ójŽº!ð‰…QV ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(GRÿZŸDþk[Vñçýs_åXº—úÔú'óZÚ³ÿ8?ëšÿ*ä(–Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹Ø?ãõ?ëŸõz諃þ?Sþ¹ÿW  ·Ÿñúëšÿ6¨êKÏøý?õÍ›TuÑ„L(¢Š±Q@Q@Q@Q@Q@Q@Q@Q@Q@:—úÔú'óZÚ³ÿ8?ëšÿ*ÅÔ¿Ö§Ñ?šÖÕŸüyÁÿ\×ùW!D´QEQEQEQEQEQEQEQEQEQEQEQEQEQEÎÁÿ©ÿ\ÿ«×E\ìñúŸõÏú½U¼ÿÓÿ\×ùµGR^Çéÿ®küÚ£®ˆ|"aEUˆ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÑÔ¿Ö§Ñ?šÖÕŸüyÁÿ\×ùV.¥þ±>‰üÖ¶¬ÿãÎúæ¿Ê¹ %¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(®vøýOúçý^º*ç`ÿÔÿ®Õè­çü~Ÿúæ¿Íª:’óþ?Oýs_æÕtCá (¢¬AEPEPEPEPEPEPEPEPEPŽ¥þµ>‰üÖ¶¬ÿãÎúæ¿Ê±u/õ©ôOæµµgÿp×5þUÈQ-Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s°Çê×?êõÑW;ü~§ýsþ¯@o?ãôÿ×5þmQÔ—Ÿñúëšÿ6¨ë¢˜QEb (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€4u/õ‰ôOæµµgÿp×5þU‹©­O¢5­«?øóƒþ¹¯ò®B‰h¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+ƒþ?Sþ¹ÿW®Š¹Ø?ãõ?ëŸõz«yÿ§þ¹¯ójޤ¼ÿÓÿ\×ùµG]øDŠ(«QEQEQEQEQEQEQEQEQE£©­O¢5­«?øóƒþ¹¯ò¬]Kýb}ù­mYÿÇœõÍ•rKEPEPEPEPEPEPEPEPEPEPEPEPEPEP\ìñúŸõÏú½tUÎÁÿ©ÿ\ÿ«Ð[Ïøý?õÍ›Tu%çü~Ÿúæ¿Íª:è‡Â&QEX‚Š( Š( Š( Š( Š( Š( Š( Š( Š(  Kýj}ù­mYÿÇœõÍ•bê_ëSèŸÍkjÏþ<àÿ®kü«¢Z(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ç ÿÔÿ®Õ룮vøýOúçý^€*ÞÇéÿ®küÚ£©/?ãôÿ×5þmQ×D>0¢Š*ÄQEQEQEQEQEQEQEQEQEhê_ëSèŸÍkjÏþ<àÿ®kü«RÿZŸDþk[Vñçýs_å\…ÑEQEQEQEQEQEQEQEQEQEQEQEQEQEW;ü~§ýsþ¯]s°Çê×?êôVóþ?Oýs_æÕIyÿ§þ¹¯ójŽº!ð‰…QV ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(GRÿZŸDþk[Vñçýs_åXº—úÔú'óZÚ³ÿ8?ëšÿ*ä(–Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹Ø?ãõ?ëŸõz諃þ?Sþ¹ÿW  ·Ÿñúëšÿ6¨êKÏøý?õÍ›TuÑ„L(¢Š±Q@Q@Q@Q@Q@Q@Q@Q@Q@:€ÌÑQ_ªÔñjñÅ q‡´mŠMÆ;»Pj_ëèŸÍh·ÿxÿÜʹ -m§÷¬ÿð'ÿ±£ûm?½gÿ?ýCEKý¶ŸÞ³ÿÀŸþÆí´þõŸþÿö57öÚzÏÿûOí´þõŸþÿö5/öÚzÏÿû_í´þõŸþÿö5 /öÚzÏÿû?¶ÓûÖøÿØÔTPßÛiýë?ü ÿìhþÛOïYÿàOÿcPÑ@m§÷¬ÿð'ÿ±¤þÛOïYÿàOÿcQQ@ÿm§÷¬ÿð'ÿ±¥þÛOïYÿàOÿcPÑ@m§÷¬ÿð'ÿ±¤þÛOïYÿàOÿcQQ@ÿm§÷¬ÿð'ÿ±£ûm?½gÿ?ýEEKý¶ŸÞ³ÿÀŸþÆí´þõŸþÿö57öÚzÏÿûOí´þõŸþÿö5/öÚzÏÿû_í´þõŸþÿö5 /öÚzÏÿû?¶ÓûÖøÿØÔTPßÛiýë?ü ÿìj”ñù[÷@åNGVèjz­iÿ1×!üÚ€+ÞÇéÿ®küÚ£©/?ãôÿ×5þmQ×D>0¢Š*ÄQEQEQEQEQEQEQEQEQEhê_ëSèŸÍj8.!F Ñ‚ô©¯ãæuýßþ„´‘I?šë#£ «ŽÿS\… ûDóÚ?ûèQöˆ?ç´÷Щ%¸¡wbNI>€§Úªbßr†3&ã€dÔgêFMöˆ?ç´÷УíÏhÿï¡SïoZ7·­Aöˆ?ç´÷УíÏhÿï¡SïoZ7·­Aöˆ?ç´÷УíÏhÿï¡SïoZ7·­Aöˆ?ç´÷УíÏhÿï¡SïoZ7·­Aöˆ?ç´÷УíÏhÿï¡SïoZ§swq¬±”ÀÇÞRzçÞ€%ûDóÚ?ûèQöˆ?ç´÷ЪgP»þô?÷Áÿ¡vT0h°ÀvAèzÐÏ´Aÿ=£ÿ¾…hƒþ{Gÿ} ©ý¡wýè¿ïƒþ4h]ÿz/ûàÿ[ûDóÚ?ûèQöˆ?ç´÷ЪÚÞ‹þø?ãKý¡wýè¿ïƒþ4oíÏhÿï¡GÚ ÿžÑÿßBªh]ÿz/ûàÿ'ö…ß÷¢ÿ¾øÐÏ´Aÿ=£ÿ¾…hƒþ{Gÿ} ©ý¡wýè¿ïƒþ4h]ÿz/ûàÿ[ûDóÚ?ûèQöˆ?ç´÷ЪŸÚÞ‹þø?ãGö…ß÷¢ÿ¾øÐ¿´Aÿ=£ÿ¾…hƒþ{Gÿ} ©ý¡wýè¿ïƒþ4h]ÿz/ûàÿ[ûDóÚ?ûèQöˆ?ç´÷ЪŸÚÞ‹þø?ãGö…ß÷¢ÿ¾øÐ¿´Aÿ=£ÿ¾…Ehsq#Êͪí ¿X¿ïƒþ4¶2ÜjOæíÊ"€TcûÔÛÏøý?õÍ›Tu%çü~Ÿúæ¿Íª:è‡Â&QEX‚Š( Š( Š( Š( Š( Š( Š( Š( Š(  ;ßøú‡þÙÿèKHŸññ'ýsÌÒÞÿÇÔ?öÏÿBZ«tíÎô8`ƒèy®B‰r­ìam¥a‘œÑŒýpÄ~&³5¦‘ü…f w¯Ý]¹ù‡j³q=¼åKÇp¬£°pq‘œôȦC%¬2‰DW.à`vߦMK­+Èm£ˆò÷#{ #kJóÚ³îî%°»D‰Iò£ ³ÌfÜJÉÆIädV™¿ˆà˜dã‘Àãõ¤7ЖɂB}Jñ  CP¼û9Üð«Æñƒ‘Lãõ« ypfŽ ¨L»dGí Ÿß¨ÿÇÖö«o/Ëû+lÎvì\~Y¥û\x›É›x]ƒÀÎO~ø  {u+ ÌH<ôÎÑØž™ÏO¯>Ô.«|AmÌ¡Uˆùrê¸89è{â¯ýªØd}•¹9?"ò}zÒ‹ËubE³‚ÄB¯?­SP¼Tey!g>fÖÛ´ ’lõï×µhØLÓÚ«»+6H%F*1w Œ#û3±lŒm^{žõ2ÊQB¥¬Š£ @­6ÛÏßûÝåvårLÿ¿OóÒ ¿õÒÀ­ZóÛþ}åÿÇÆ¡0´ÒK!FB@ »õô  HÜGç&øK'÷Ô{w«WF'¸f‡î0,@è®G׸þ¹Ì&Á @ä}GøÑåÜl ä>Óüikp3õ=Þ\ ªÍºP «í'ƒÞ¡Y®­ÄÊB•†0)å¹/…ÏÐ}«TÁ1Æmߎ?Æ"l“öwÉã·øÓk颓 Rb™Ã¯ä}qÅ>+ˇ+’E$þó‚8Çqß×µi & ¬-Xm6ãŸlÒý‘ölû!Ú9Æ΀)XI#¶’U|8 áFÀ*¬n§’XN‹ûᣱ޵°-æ‘lÀž§ŽZAh㥡랋××­fÃ{(Ž.0²BÒp1‚6à~¦«ÚÞ\ý‘ä3!v‘÷APxÉ­£m!VÂòËÇëIöGÁd8=Füh”×®–¥’2Ï…ÃmÂr@ê~µ^Î! æ2ÛŠð{qóqž•¦`˜®Ólø#ãüiÚE-«6ÿcÜêSÁ+ØÊÇp¤ç®{RËwJîѤ¨P§ƒåïÎ{úV¿Ù\œýút_ñ¦ËfòÆÑ½«íaƒÓÓ¾”“5ôË*•e“h$àŽŸ…^°šY£;nU° ‘ÏÙ«BÚAÒÕ½‡üiVÞT\%³(ôGõ #ó|ß›qL¼×úU­+þBsº¿É©¾LÿóÁÿ1þ5&™‘êR™¦Uqœµ@ yÿ§þ¹¯ójޤ¼ÿÓÿ\×ùµG]øDŠ(«QEQEQEQEQEQEQEQEQE§{ÿPÿÛ?ý jïúÓþàþf®^ÿÇÔ?öÏÿBZ†ê Þ¼0G¨®BŒM;í-ygìePüÁ·å\ …#߯zu¼:cÜÀÐÚAÜ9ŒHÜã8ÎÜg‘Þ¬KÇË‘ÄåÔ—Ú7c#<ã=)ð˜í£'I?|¨È ãÒŸ3µ€¥¨]Inñ*0Ueff11ŒvzÓ£¾ÄÓ! l dp@íÓ8íš„M2J\n@@ç×áUÚÆÕ'˜ÁB…À|dƒð¤SjŒ±ŽÝòÍ„ÜW 7{Ó¿µ³'“$Ž­”9r£©õ#ÙÛþ‚ [[tl¤¬£9`ïrO?Y-ÎJŒG"€&¶ÿÈåZµ•já¯bÃyéô­Z(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š*ÿ—üìÕ5BŸòÿ€ýš€*^Çéÿ®küÚ£©/?ãôÿ×5þmQ×D>0¢Š*ÄQEQEQEQEQEQEQEQEQEk]F$˜ ì…cVqA_ZƒÈùúŸòOþ&—SUgEe ¤&C ƒÊö¨…¢Ä¬ñ ùA'ʈŸîW!CÍ®NMÄ¿÷Êñ4Ÿdÿ§‰ï”ÿâi¦ÎÈAÎ?ÕÅ×ÓîRKik‚!BIÇ1GŽŸîÐþÊ?çâ_ûå?øš>ÉÿOÿß)ÿÄÖ{,)÷¢‹·>LCÿe£•O÷QsÿŽÐ‡Ù?éâ_ûå?øš>ÉÿOÿß)ÿÄÖxÈ‹Ýaû¤ÿwÚ´ÂÑ kéþª/þ"€²ÓÄ¿÷Êñ4}”ÏÄ¿÷Êñ4}‚Óþy/ýú‹ÿˆ¤v©4CÈ·0ÑGºOeö  l‹‰AöTÿâi|‡ÿŸ©ÿ$ÿâi~Ímÿ>–ß÷á?¢ŠÊÙâWh“, 8Š :ÿ»@yÿ?SþIÿÄÑä?üýOù'ÿMû§üò_ûõÿM’ÎÕp…àůû”'ßóõ?äŸüMCÿÏÔÿ’ñ4ö¶¶ GÙ-x?óÁ?¡û-¹g?g·PhÐ{Pü‡ÿŸ©ÿ$ÿâhòþ~§ü“ÿ‰¦}–×þy[ÿߘÿ—ì–ÄdCÿ¶1ÿ…;ÈùúŸòOþ&!¿çêÉ?øš#·¶1©6–¹ Ëÿ k[[´¤}šÝ@ñ…;ÈùúŸòOþ&!ÿçêÉ?øši´¶a€Ûÿ±ÛÿÏ?ïÄá@òþ~§ü“ÿ‰£ÈoùúŸòOþ&’;{}¼ÚÛ 0'¯ÒŸö{oùôµÿ¿ þžCÿÏÔÿ’ñ4žCÿÏÔÿ’ñ4ï³ÛÏ¥¯ýøOð£ìößóékÿ~ü(¾CÿÏÔÿ’ñ4yÿ?SþIÿÄÓ¾Ïmÿ>–¿÷á?³ÛÏ¥¯ýøOð ù ÿ?SþIÿÄÒùÿ?SþIÿÄÒýžÛþ}-ïÂ…g¶ÿŸK_ûðŸá@ òþ~§ü“ÿ‰§CŽá\É$Œß/ÍŽÐ >Ïmÿ>–¿÷á?£†8ãÔqQÆ „@¹ûÞ”Zóþ?Oýs_æÕIyÿ§þ¹¯ójŽº!ð‰…QV ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(GRÿZŸDþkIqå‹?ß!’?(n@»³À㺗úÔú'óZz°Øœ¸¿ÈW!G?¤C,:”ÆæÞC—l þKlSó{í*3Û¶®¾âÿ½ý Ccb¶SÜÊ.¦—ÏmÛdrBp:zž>€\ÍrAEÁ{úIX©K™Ü̸É# ÜAÿ£³õ—ÏYD‹€Œá¿ÖgŒàzqøÕ»û_µy`O,%[tmƒÁúp{’áeóöÔCð÷³¸sîsùÕ)8»¡EE¿xžUÛ68û¬xèÃW50JD3ö˜zÿ×Eª`·pÜãùOj¹ªØ‹ñýªh rÌOŒàƒý8=!ßñ3?¹óÓ‰|°Ã¦ÏÓ=½tG>u¶zî9ǮƪRé>©ð‘•âmÝØéœÿ“WXƒqoƒŸœÿè FîáeÐ}SœÜ KQlT9|ÇŒsW*œÖÉwgo#"©Üvœ9Ïn´™Qµõl§Ë+e*>‰e”½¸äcòü*ÌŸ2³äd¨ u¤{hQrȈ0«­÷ɲŽÜ"€GÞrǯ©É¦&îÉßï·Ö«\¨¸ÿ=…Y¾ßZÓÌI“vÒÇü3¼±ýÁùU»…”cŽ? gØäÿž‰úÔöИÃ09ô  ¢ÿTŸîŠAþ¸ÿº?­,_ê“ýÑIÇœÝÖ€2¤w•·g$óйdí¼ÆI#Ô²Ú}Ѹ9Á©-àä–Ë’?ºÞ?ΟLîŸ÷ó§ÐEPEPEPP§ü„¿àÿf©ªÿ—üìÔRóþ?Oýs_æÕIyÿ§þ¹¯ójŽº!ð‰…QV ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(KPÿ_Ò?æ´yáwFí%WÓéF¡þ¾/¤ÍjCü?îå\…ùÿóÉï„ÿâiD0©ÊÆõ £ÿe§Q@ ò ÿžCþùOþ&"ßþy/ýðŸüM>Šh†ÊÆÆ2GþËA†I1‚Or©ÿÄÓ¨ yÿóÉï„ÿâiV(PîDÚ}UTåN¢€bÿzOûè…7É€õŒzªŸéO¢€ä[ÿÏ%ÿ¾ÿ‰¥À"0èB§ÿ@un‡?6Þ=})Ô…Tœî—þúáM0ÄNHr}IáJ®g¦A§Pg‡û­ùð¥û‘ˆPIè(€`?ï¡þ†›ïo?R?ÂÏ¡ã‘EGöxºß˜ÿ >Ï÷[óáRQ@ ¢Œ Ì?—bÿzOûè…-›ûÒßCü(ؿޓþúáKE&ÅþôŸ÷Ðÿ 6/÷¤ÿ¾‡øRÑ@ ±½'ýô?‹ýé?ï¡þ´Pl_ïIÿ}ð¨aÿàyû¸ÉúµOPCÿ£è›P[Ïøý?õÍ›Tu%çü~Ÿúæ¿Íª:è‡Â&QEX‚Š( Š( Š( Š( Š( Š( Š( Š( Š(  -Cýt_HÿšÔ‡øÝÊ£Ô?×Åôù­H‡ýÑü«¡(¢Š(¢Š(¢Š(¢Š)¬›ˆ$äá9Áüˆ§Q@ °îˆ¹ß–Ço$ËùÑ\íU@ê2OsÇõ¥¢€±.5bÌÇh9`Œ‚q§­!@KŠ9Ü1Âàp;ö?>ŠŒB6.P(ÂüªÀ–üÿ´¯yr|ŠX¨ Ž[ÓÓéO'=h ¼!œü¼pªPc¦:‚?*O+÷ŽB&Þyf<~ÒŸE" EÀbÇל~¤šZ( Š( Š( Š( Š( ¡‡þ?GÐÿ6©ªãô}ój«yÿ§þ¹¯ójޤ¼ÿÓÿ\×ùµG]øDŠ(«QEQEQEQEQEQEQEQEQE¥¨¯‹éóZÿû£ùTz‡úø¾‘ÿ5©ðÿº?•r%Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Cü~¡þmSTÿÇèúæÔVóþ?Oýs_æÕIyÿ§þ¹¯ójŽº!ð‰…QV ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(KPÿ_Ò?æµ!þ÷Gò¨õõñ}#þkRáÿt*ä(J(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ †øýCüÚ¦¨aÿÑô?ͨ¥çü~Ÿúæ¿Íª:’óþ?Oýs_æÕtCá (¢¬AEPEPEPEPEPEPEPEPEP–¡þ¾/¤ÍjCü?îåQêëâúGüÖ¤?ÃþèþUÈP”QEQEQEQEQEQEQEQEQEQEQEQEQEQE?ñú>‡ùµOPCÿ£è›P[Ïøý?õÍ›Tu%çü~Ÿúæ¿Íª:è‡Â&QEX‚Š( Š( Š( Š( Š( Š( Š( Š( Š(  -Cý|_HÿšÔ‡øÝÊ£Ô8–3ƒ€œp2´Ãr8ùOºÞŸJä(šŠƒí#û§þùoð£í#û§þùoð  è¨>Ò?ºï–ÿ >Ò?ºï–ÿ žŠƒí#û§þùoð£í#û§þùoð  è¨>Ò?ºï–ÿ >Ò?ºï–ÿ žŠƒí#û§þùoð£í#û§þùoð  è¨>Ò?ºï–ÿ >Ò?ºï–ÿ žŠƒí#û§þùoð£í#û§þùoð  è¨>Ò?ºï–ÿ >Ò?ºï–ÿ žŠƒí#û§þùoð£í#û§þùoð  è¨>Ò?ºï–ÿ >Ò?ºï–ÿ žŠƒí#û§þùoð£í#û§þùoð  è¨>Ò?ºï–ÿ >Ò?ºï–ÿ žŠƒí#û§þùoð£í#û§þùoð  è¨>Ò?ºï–ÿ >Ò?ºï–ÿ ž¡‡þ?GÐÿ6¤ûHþéÿ¾[ü(¶;®ÃqŽ~RñzŠ«yÿ§þ¹¯ójޤ¼ÿÓÿ\×ùµG]øDŠ(«QEQEQEQEQEQEQEQEQE¾)¶gÏÙ€ ØúJoü$ö¿óä!\Ãu¤®BŽŸþ{_ùòýð“ÚÿÏ—è+˜¢€:øIíçËôÂOkÿ>_ ®bŠéÿá'µÿŸ/ÐQÿ =¯üù~‚¹Š(§ÿ„ž×þ|¿AGü$ö¿óåú æ( Ÿþ{_ùòýð“ÚÿÏ—è+˜¢€:øIíçËôÂOkÿ>_ ®bŠéÿá'µÿŸ/ÐQÿ =¯üù~‚¹Š(§ÿ„ž×þ|¿AGü$ö¿óåú æ( Ÿþ{_ùòýð“ÚÿÏ—è+˜¢€:øIíçËôÂOkÿ>_ ®bŠéÿá'µÿŸ/ÐQÿ =¯üù~‚¹Š(§ÿ„ž×þ|¿AGü$ö¿óåú æ( Ÿþ{_ùòýð“ÚÿÏ—è+˜¢€:øIíçËôÂOkÿ>_ ®bŠéÿá'µÿŸ/ÐR[‘dAÆ+—¢€:Vñ›ç}‰|ãï`ôÏøšoöþŸÿ@Õü–¹Ê(£ÿ„ƒOÿ jÿß+GöþŸÿ@Õü–¹Ê(£þßÓÿè¿’Ñý¿§ÿÐ5%®rŠèÿ·ôÿú¯ä´oéÿô _Ékœ¢€:?íý?þ«ù-ÛúýWòZç( þ ?þ«ÿ|­ÛúýWòZç( ûOÿ jþKGöþŸÿ@Õü–¹Ê(£þßÓÿè¿’Ñý¿§ÿÐ5%®rŠèÿ·ôÿú¯ä´ÂA§ÿÐ5ï•®rŠèÿ·ôÿú¯ä´oéÿô _Ékœ¢€:?øH,;i«ÿ|­'ü$?ô_ûå¹Ú(ÿÙlibstruts1.2-java-1.2.9/doc/images/how-to/netbeans/creating-project9.jpg0000644000175000017500000004700410404045246026551 0ustar arnaudarnaud00000000000000ÿØÿàJFIFHHÿþLEAD Technologies Inc. V1.01ÿÛ„  $" &0Q50,,0cGK;Qvh|zthrp‚’»Ÿ‚бŒpr£Þ¥±ÁÇÒÔÒ~æöäÌô»ÎÒÉ"$$0*0_55_Ɇr†ÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÉÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀf¤"ÿÚ ?³©^ÍjñˆÈÚT“‘ž€UaªÜ•ÜNÑÛpÆñêv´q$Gþ™·òU_p;À“#r¸\í>žõ´bšØ–I&±tŽná”ëMþÙ¼ô_ÈÿV‰‚jp|àì* ­_Žk[µV•U±.3€ÍŽ 9$žÀB5›Â2àuàÿ8ê÷¡rUqëƒþ5"4kÂG#º.˜Ø<÷©$’3j:„û2.wgŸLzûÔéØ ¿Û7ì~¿ãGöÍ×û¯øÔ“ÃjeTDTMãîcÜT ¢Ç¿d{ü§;IAè~´ýÞÁ©öÍ×û¯øÒ®¯xßt)úþ5*Cf\ä(ݶ삪qϪúi+%Îb`q“Ú‹.ÂÔöµà ëƒþ4§V¼$>‡üjf‘G”Îê`ʬ»³“Ž˜õéPêm¹So+±yžqéBK°jÚ×›s…Ç®øÒ bèôÛùñ¥·f’‰$]¦"î÷é_z[† $uó°ÏQÓ±¢Ë°j7ûbëýŸ×üi˪ݷ@Ðñª)åäù›¦Ú¹e*EgpYˆ;“…8&‡Ø.Åþ׺ÿgõÿ¯tx#þ4é^ÞX–VCK! ƒÊŽ*_.<@*n6¨SÕ=h²ìÿk]³úÿ(Õ®‰ÀÚOÐÿI,vêˆÃ’_wÌ2xëK• ô žX‡Ÿ<䝸ÒÓ°jCý­sþÏëþ4¿Ú·XÏË^Æ¡€/Ûš1Žê¤c¥Z—Ë[iâˆÆçp8éÆ)Ùv Hÿµ®ÙýÆ—ûVëùqøÿ:Dµ7D¨ƒ‡=[ÿ¯O”F–²GŒ±T$g¾9¥§`Ô‡ûVçýŸ×üiµn}Wõÿ.Ý`—åìÊ0[§­-ºÛy¶omø*ÄŒS²ì‰ý«sþÏëþ4jÜÿ³úÿ8Goäç $ØØ\ñ×¹õ©#‚Û`ÜPá“ 7g­/w°jCý©s꿯øÒÿj\ÿ³úÿH«nÌ™XÀ2²‡±¥x!HFåP¦Cg’Ùâw°j1õ¸Ø«€¬:‚øÓµ.=Wõÿ³8·i¥}«+oæÚËl8éši'ÐÑoûRãÕ_ñ¥þÓ¸õ_×üj•ùP®Ë¿Úw«úÿÚw«úÿS¢ŽTeÏí;UýÆ—ûJãÔ~¿ãT©håAv\þÒ¸õ¯øÑý¥qê?_ñªt´r »-ÿi\z×üi´®=Gëþ5N–ŽT;²ßöǨýhþÑŸÔ~µRŠ\¨We¿íýGëKý£?¨ýj¥ùPîËÚúÖí ýGëUh¥Ê…v[þПÔ~´ BQúÕJZ9P]–¾ß?¨ýi~ß?¨ýj¥-¨.Ë_oŸÔ~´}¾oo×üj­r ».ê6fí“lÚ¸éœä ¢º3¦v]²çÑúõ±'QôÊ©ý©¼ÉF󜓞Ò³RkBìS&?åãÿÿëÒÿcÓüsÿ¯Wì`|çiÉ@ ý*Íò #+ûþ›ÿãŸýz?±¿é¿þ9ÿ׫÷3U ó6ߘð8?áLk°î8fÆ~\ã¯sÈ,ŠŸØÿôßÿÿëÑýÿMÿñÏþ½]·¹óÝ×i{ö5=ò #/ûþ›ÿãŸýz?±ÿé¿þ9ÿ׫ÞyÚFߟvݹÿ=©«y*¥¹l}ò "ŸöGý7ÿÇ?úô¿ÙôßÿÿëÕásÇÍÕwŸ×ò©†PᣞAdfÿdÓüsÿ¯GöGý7ÿÇúõ~âC[€äN']);_†éÈÀïš9äEOìŸúmÿŽÿõé²é·þ;ÿ׫fê1ŒåFyÜ1Æ ÏéBÝÄÃåÜNq´hçadTþÉÿ¦ßøïÿ^œšcÆÁ’à«áúõjIJH¡H ŽHëSQÎÂÈÍþÊ?óÛÿÿëÒÿeÓoüwÿ¯R-÷Íó… ¸ŒsÆ}½ªYî–$$rvî÷àŸéG; "·öWý6ÿÇúôeÿÓoüwÿ¯VþÒ¦dA;‰íÀ©¨çadgeÿÓoüwÿ¯Gö_ý6ÿÇúõe§uyIUòâ8cžzýi$½‰Cí9+úúÑÎÂȃû/þ›ã¿ýz?³?é·þ;ÿ׫i:;… Ï}?ÄSEÜM·᱃Žç £‡*+fÓoüwÿ¯Gögý5ÿÇúõ¡Q´»eÚܹé×úQÎÕÿ³?é¯þ;ÿ×§5ƒ0PÓ“´`ezΦq¡þVnqèLÒý®"†âà`u£…‘_û7þšÿã¿ýz?³é¯þ;ÿ׫jL‘ÉÁþž0ZCwŒàgæ#‚qž´s°² þÎÿ¦¿øïÿ^ìßúkÿŽÿõêÀºŒç9dn#ã¯ò4ø¦YKÈ+ÔŒQÎÂÈ«ýÿMñßþ½Ùßô×ÿÿëÕêƒÎušEpNpsåG; "ìïúkÿŽÿõé³ÿé¯þ;ÿשþÒž»û»yü©¢í2ÝHÜíç<ýhæadEýŸÿMñßþ½Ùÿô×ÿ«€‚ 6gò¢gÆBò~ÿJ9˜Y³ÿé¯þ;ÿ×£û?þšÿãµ+]y^R1þ?Έ®Õ€ÜŽfEO±ÓOüv—ì_ôÓÿ«TQÌÂÈ«ö/úiÿŽÑö/úiÿŽÿõêÕs0²'Qôʪ0À–/.R$',1ŸÆ­É’êÆG¦{Sqþßþ9ÿש[ìjCsœ€sÉ?‡SVhÇûøçÿ^Œ·ÿŽõè•%P®ýÊÙ@=ˆïõ¨üƒ2í"[ qÓ§Ö­cý¿üsÿ¯F?ÛÿÇ?úô YˆbCv55ÿoÿÿëÑöÿñÏþ½Vc‹3È”1Àúõ¢;EB¤1ìH dãÞ¬ãý¿üsÿ¯F?ÛÿÇ?úô´Œ–$umßýoÔþu=ÿoÿÿëÑöÿñÏþ½Ep¡âÁRÀp1Îi¨‹!$ÆÑ¥6œÒ§Çûøçÿ^Œ·ÿŽõè«Ùï*‹„ž8ÁýM8ZàC‡ãV1þßþ9ÿ×£íÿãŸýzŽ8¼·fÞ[pÍIF?ÛÿÇ?úôt#æÎsü8íõ  ^QÏ–Ë3G¸0¸äúçÞžö*ùÝ#®ß ÁÖ­p2ýF~ïÿ^Œ·ÿŽõè¶ "¶ö±`½¹ÎOF?ÛÿÇ?úôcý¿üsÿ¯@$B&“ä•‘È,  õÏj_±«+rT78ÀÈÏ=jÖ?ÛÿÇ?úôcý¿üsÿ¯@}›æßæ6óÕ½¸ÿP­«£¢)ÄJTç=Htü*î?ÛÿÇ?úôcý¿üsÿ¯@G4K2€ÝŽjL·ÿŽõèÇûøçÿ^€!{uy|ÌàœgÎ*5‹|B,:ã,ÍZÇûøçÿ^Œ·ÿŽõè¹µ‹,Œ u=xÀÒ†´Cq$þ˜«ÿoÿÿëÑöÿñÏþ½W{U0ìå°Y€Î3œÿ-´r#;Ê~gÇ|ô©ñþßþ9ÿ×£íÿãŸýz*³òÈ RáÀRxÇ篽YÇûøçÿ^Œ·ÿŽõè³ÛüÃæ{ùS~Æ¡ £3éžÀJ³öÿñÏþ½q÷ÿñÏþ½ zzÓeÇ”À¡pF Žôð çvðç·ÖŒ·ÿŽõèžÐcHÌü§9 sëß½H¶ª¨Ë¸áˆ?‘ÍXÇûøçÿ^Œ·ÿŽõè·ØÆW÷ò þï åNû27Çvâ}j|·ÿŽõèÇûøçÿ^€#Š%ˆ½ÎjJ1þßþ9ÿ×£íÿãŸýz¨c ÂÑK´ÏóïïD¶[¡e ósŽíõ«xÿoÿÿëÑöÿñÏþ½G^YbX³7sRQöÿñÏþ½ÿoÿÿëÐEÿoÿÿëÑöÿñÏþ½QöÿñÏþ½ÿoÿÿëПýbý?¥0ŸsOõ‹ôþ”Ã×½-Dg˜ݶœ-A" ™È9êqØP±¸’5uèiÕZÐÆ»£MË“¼+ÇÓü÷«'88àÐÓ­"²·Ý`~†¨'~f¸P~mÅ8?•Mi(’{Œ2¸P€2‘ÏÞô  U™zñíRULf€,£«Ž)Õ¿ßoaR¿Üo¡ <ê¬F3ztrΪÄw©m”€IhzŒÌ£=xö§±Ú¤ú ÕS“œã“é@é?‰äj8í*{TŸÄ¿ò4§î¯Ð*AÍ)û£è?•  g ÀýèW åGnõîËŽzæ’•Ç'½OQI:ÆÛJ±8Ï ©j¥ßr¬AP2‘÷‡_J±É2F#8Ï"ŸP:ïQ•†(ËbAý?Zž€˜(ɤGÓ¯¥Gqü?2‰GÐКcȨpsš}C?U $ÊÄA5%UƒýoáV¨’Hf„?N¾”ÉdÃT`zÓ!¤Ü  4Öpƒ“N¨'8'¥=e ØüªCÒ¡‹fó´{f¦=(^Ÿ÷Ïò¤§'üúÒ¯OûçùR½ÿ?ç@ LóS{Úœz§ƒ×Ó¥] ' ¦FPëI:³G„Éä{P¢L€#±ô©+/-Æw—ïnëó/N}êý¼$ynppûÔ\I’ÒdnÇ|f›7ú£UsÉù¨v1žç‘ƹô¤)89Å>Šªó1n¥yÅXŒå QEçÿX¿OéL?çEÉq.5sÇãµA¾ãþ}£ÿ¾èÅ7ËŒ1a=X(Ýùõ¨wÜÏ´÷Ýî?çÚ?ûî€%Š%‹vÌÝy§Õ}÷óíý÷Fûùöþû  !ˆèH ±=I5[}ÇüûGÿ}Ѿãþ}£ÿ¾èÅ0ÆŒrTf¢ßqÿ>Ñÿßto¸ÿŸhÿïºUTaF)j¾ûùöþû£}ÇüûGÿ}оLyû¢ŸU÷ÜÏ´÷Ýî?çÚ?ûî€,S<¨ÿ¸*-÷óíý÷Fûùöþû  ÕBŒ(À£ø—ñþF ßqÿ>Ñÿßt¸"Þ?ûî€,º¿Aü¨ãU÷ÜÏ´÷Ýî?çÚ?ûî€'* €HéFÕ œ žõûùöþû£}ÇüûGÿ}ЊFUe*Ê ŒŠƒ}ÇüûGÿ}Ѿãþ}£ÿ¾èTŠ$mÉ JáXÀ?ÊŸU÷ÜÏ´÷Ýî?çÚ?ûî€'e 0FE"¢©Ê€*÷óíý÷Fûùöþû  ŒªßxPo¸ÿŸhÿïº7ÜÏ´÷ÝL¨ªrNªûî?çÚ?ûî÷óíý÷@• ŒŒã¥/J¯¾ãþ}£ÿ¾èßqÿ>Ñÿßtb€FȨ7ÜÏ´÷Ýî?çÚ?ûî€'TUû  SÒ«ï¸ÿŸhÿïº7ÜÏ´÷ÝX^Ÿ÷Ïò¤ã¯çP¸=mãÿ¾èßqÿ>ÑÿßtbН¾ãþ}£ÿ¾èßqÿ>ÑÿßtbН¾ãþ}£ÿ¾èßqÿ>Ñÿßtï²C´¨B3ŒüÄðqÏO¦À«ï¸ÿŸhÿïº7ÜÏ´÷ÝX¤Ú¾ƒò¨7ÜÏ´÷Ýî?çÚ?ûî€,t¢«ï¸ÿŸhÿïº7ÜÏ´÷ÝLQXäŽiÀ``U}÷óíý÷Fûùöþû  U}÷óíý÷I¾çþ}£ÿ¾èÜGÐ*ب’qÉÅI'QôÊ£t=Í •OàŽ¢5}qõ ÆîÀŒ`ŸzkDY¾cŸSŠzï1qß郟ʕ$»õ¦ˆ¶à©û/å]¥¹ÎÂi•rÉÉÇCNY±ƒœóMü]óҗ˨ ‚3íF€"̬ çÀàóOÜîÏ‹ ·wæ=©Æ0Ë‚I>ôh‰Ïæ) Š'ô¤àc8ç< sHІ9'ô£@ç'<ôö Ê¹ñM’,«`òyý1JaÝË6OÒpu œð:çŒRy©Ü‘탚`#)ÇÍ×Ón »Ÿ\Q ó g­ •ÎN=Áæš!ƒÇâ)L ª‚~èÇO§øQ  eP¹ÏáŠp9Ó<®88ÈÁÀ§ŒÐÑE€(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š{ŽÿOåL©îþ_Ê©Ý4‚H–2ÿ6s³nZ±ET’âEPŸ•јŒäã·N†¢Žò_(;¨9< Þïô¡EVûKïòü±æ ’qŽ:{ÔÐÉæÃ˜Æõ LŠ‚K™D®±Ä¬ã%±MûMÇüñOûïÿ­Iÿ-çÿx*ŒÊrHPPžsì(_´ÜÏÿ¾ÿúÔ}¦ãþx§ý÷ÿÖ¨Z}°‰6÷#¤–rž_ 7ŒüÍü¨´ÜÏÿ¾ÿúÔ}¦ãþx§ý÷ÿÖ¨åT„œ:~t‰v¬»ˆ g··½XûMÇüñOûïÿ­Aº¸>Jßýj‹íÉ#Ô`ä}iûƒG¸t#"€nnÇ’Ÿ÷ßÿZ´ÜÏÿ¾ÿúÔÛ‡(¥€ÉÈާÏ<.Dƒ ;sô  ~Óqÿ<zOƒBü¹9!·ëþN?*O³Å8ç<ŒÕÿ"îûê"îûêŽV€,÷@Ç5·ueEÎÀT“ž¸ÇøVŸ‘÷§Þ£Èƒûƒ®>õ¬ ëþ±>µi—rõ¤À!{|ÔÉn-áp’ Fp7åG+ûW àS ]<ǵGöÛOï?ýòÿáV®p}Iô¢ÌÄ ô✆ ['éQL[ÍÀbÑÐýiŸ7÷Ûó¢Í;E¸·ÍÔÒ—ËàóÉ9ϽWù¿¾ß7÷Ûó§ÊÀœE‚NãÏ^)D` Î? ¯ó}¿:>oï·çG+uˆ(Àoï·çG+ÝS-ýöüèË}¿:9X[ýgüü*´‹+\‘…;yÆFzg<ÒÛq ` žÕ]¤F}ûn±•H¡l^çe”¶Í¹Øù‹»vpFN9äôëS_’-å*p}AÇZ®Ë Y. n§içô©Úá;¢”ƒØÆiÇ@"ÐG‘°äôó ~9>”×¹r¤/“9ýjU–4û°H¿HȤW‰X‘ ™'?êÏý)ˆ„]J°Êœ m#Ÿ»œç4ù.'FU „… {’xäûTžlyÏ‘&qŒùg¥)š2A0ÈHé˜Ï|ÀE’Gµ•Ø÷‚íöÍEnŒÓ’K]½elýÐzw©ŒÈP¯•.ÁÂD™#P¢9¸ÉCšzR+©¶  €Ù'8ùWŽO½YÊÒm1‘ÀëÎ=úÔã,D`ÀäÞ]/ŸíÞL›½|³š_0#7´e 7uÏ~ÿ‡àj?´LF­  p3žy52ÉMžL¥zœÆNM/›üð“¦?Õž”|À‡í7å©rzõlzÓ¾Ó&W”ßç½J&Œ dÇýs4žtyÈ“#‘û³Å0mÒA’pä œÔ„õçÛŽýx¨#•#æ9$œ¡¥û@ÿžró×ä=)Ý>}óŸ~´}óï×§éPý wŽ_ûöi>Ð;Ç/¿îÏ4]0ÍüòOÊ«`zûèÿ‡þú?ã@~ÍüòOʳAÿ<“òªØ‡þú?ãM~# äõúÓßÙ ÿžIùQöh?ç’~U-€‹ìÐÏ$ü¨û4óÉ?*–Š‹ìÐÏ$ü¨û4óÉ?*–Š‹ìÐÏ$üª”xó—oOÄÖ•fÇþ¸»ýMG7úãþèþf™O›ýqÿt3L­#°‚Š(ª¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ÍÏÞ_¢ÿ1WaÿSû£ùU+Ÿ¼¿Eþb®Ãþ¦?÷Gò¬F>Š( Àô£ÐRÑ@ è*´ÜLßî¯þÍVª¬ÿë›ýÕþm@ÔWLVÖfS‚ –€ÊU€ ðAï@äy-ã AÜIᜰèiæâEÄBn–è1ŒÕ†E¼¡±ê(hѾò)ç<ŽôËV/k1É* 5-4F€@íéÒ”£=¨h¢Š(¢Š(¢ŠŒ3~NééBÉ–qÍ?ž:õ£hô•0—cÆ­:O»øçJT’õÇzI>ïâ?@ТŠ)QEQEVj®îÿSZU›úáþïõ4ßëû£ùše>oõÇýÑüÍ2´ŽÂ (¢¨Š( Š( Š( Š( Š( Š( Š( Š( Š(  7?y~‹üÅ]‡ýLîåT®~òýùŠ»ú˜ÿÝʱú(¢€ (¢€ Ͻm·tu'ÔÖ…g_ÇÈÿp3UÀ‡yÿžiùš7Ÿù柙¦Ó. [yH8! ð«².óÿ<Óó4o?óÍ?3TyÓ9Âd7ûGŸðÏãS,Ì&òßnIaÇjZgyÿžiùš7Ÿù柙ªKq+F\l*1ƒÜz±nXÁc’TdÑ ï?óÍ?3Fóÿ<Óó4Ú)Ùíçþy§æhÞçš~f›E@;yÿžiùš7Ÿù柙¦ÑE€vóÿ<Óó4o?óÍ?3QÅ'˜ŠJ•%Cm>‡¥:‹ ¼ÿÏ4üÍ!rp(äw>µVúY!HÚ.X¸õàñV’‘ƒ‘‘éK@4|ù÷?Z<ù?Øýj6ûÆ’³/Ÿ'û­|Ÿì~µYÝ÷l‰¾2Am ­B÷2Ä ’(öƒÎÙwøb€/ùò±úÑçÉþÇëPJþYPFrÁi²L‘œ1#¿œSé@|ù?Øýjº£ ¹xè}ÿÆ›öˆ·[îAÇçÐÒ-Â<Š«Ÿ›=AcØÐ¼,Ï»zôÇCIäï¯äi«pܳ X÷ »'9Ç#«u&wtÆ@õü)Ý€¾AþúþF ÿ}#Kö˜°ãÏû'¯§ãMK¸Ù7Ã’1´çƒŒô§ÌÀ_ ÿ}#G¾¿‘¥[ˆ™¶«äçõ"²¸Êœ€Hü¸£™¾¿‘¦¼EvàzqбQÏþ¨ýGó¡IÜ(¢ŠÐAEPEPEPEPEPEP›Ÿ¼¿Eþb®Ãþ¦?÷GòªW?y~‹üÅ]‡ýLîåXŒ}Q@Q@P¼F{Ÿ”„ÌÕú©pªgmÃ8UþmM;WÉ“û†ÀäPz‚*}‰ýÁFÄþàªæ¿ÙÛ¯•ïÒZavˆFÐs¼f¬ìOî 6'÷ÀWÌ\zb•mÝTv§ØŸÜlOî 9€‡É“û†&Oî›bpQ±?¸(æ&Oî<™?¸jm‰ýÁFÄþࣘ|™?¸hòdþá©¶'÷û‚Ž`bô»vwÉ ÞœÒ«C™(3´àâ—Éò Mä¾ÔçÕqŒZ–*¬AÆáÐûÔ§``sŒ¡ã§pJ2?O±?¸)®ª!@9Ϋ˜ ïJVûÆ’ fƒÍ9$`ã?Њìy]¯32g$`äþ$š°í± c8¨üö#""?ð N†P0ÁX6àqšíÞ@wH2˱ð½G·¾¾þÕgËL“±rzñÖ…D@¢¨01ŠvG­݉ýÕü©ÔQÒŠ(¦É÷üéÔÙ>ïâ?·Þ4”­÷%G . U÷4á3›D‘ž?ºj9awl¤¡=A@Õ¶˜ŒøDrÖAÕN÷Ê€|â£F•vB7FÅú°í ýGj¹ka §P¤fŽQæüü/x>¾}iYæùa·2‚A*9èqWh  2Ï6Ôeu$ `qœ¼žŸÊŸp1· '$îRGON*Ý+Š( Š( ª\*™Û*zýZ­ÕYÿ×7û«üÚ€"ØŸÜ_ʉýÅü©iÈ 3Üv¢àû‹ùQ±?¸¿•UŠIÌdwvQ¿ è=*Ý–‚  €Ù<äœqEÀ³±?¸¿•û‹ùUX.daerŒ¶q“üªÝ6'÷ò£bq*Z(¸ ±?¸¿•û‹ùRÑEÀM‰ýÅü¨ØŸÜ_Ê–Š.lOî/åFÄþâþT´Qpbq*kª…á@9½ê¾£rö±G" æ@ úŒ°NèÁÁÁê)#}ãIJßxÒR9·ª&ÐX–éÿë¨f{ˆ‘Ÿtl gŽ?NK"HdGgƒ¸‘×ÇÒ¢–‰cd&c;øU+bgò¹Æ@léLiÕ]Î#ž}1ô©d÷ÈlÕf´Vc%IVÝ–\‚}ÇãR‚æq¼gúò)>Ó69È þT‘ÛÃ`7((uíøÓ>Ç•P\ ¹ÀUÀ;gÚ€$7Q |Í“ž6ñê1ÇQNyv…Ø73ýÑžãLKr%23å˜p09ÇÿKäb(Õ[±Øé@ gTKò7q×ùôúÓ$¼‰ÌJäciäçéCÛ»ƒ™F]v¿ËÔsÓÓ¯½$–›âflã×?ã@}¦/›æÎÞç>”±Ì²;*òƒŸ©#úS>Îvðã~ýàãŒý)aƒÊvmÙ,9ãäŸë@ qu±Ìá\ã>”ùù„ãÔ:eͪ\˜üÎUqëOœb¨þtÖàAEV¢ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€,Üýåú/óvõ1ÿº?•R¹ûËô_æ*ì?êcÿt*Äc袊(¢Š*¬ÿë›ýÕþmVª¥Â©‹(8Uê=Í2ŠM‰ÿ<Óò£bÏ4ü¨¦Ù6•ã$þ&“È‹*v ¯J~Èÿ¸Ÿ•þy§å@ D¥H@6ô©)6'üóOʉÿ<Óò ¢“bÏ4ü¨ØŸóÍ?*Z)6'üóOʉÿ<Óò ¢“bÏ4ü¨ØŸóÍ?*Z)6'üóOʉÿ<Óò dW*X´äg±¢O»øçK±?çš~T×T Â(9½0$o¼i)[ïJ@36Õ\àg­6V0‘æ ûÔ¶ÿë[ýÚ[𠜹… èª÷ª^4QŽ\uÉmãÝYïàà`}ÒhݘÑ9‚W «ó>[9-ó‚*IÂ#Pyظî(ýž’É*8šD Œ°ì9Ž®Oõ§Ç(Ž2ñ*•Sól9VúPÚ*›I(•#i€bÀ9úwúñ¨bžQ ’.<µÆã÷qÓœ{P•AfŸ!šLŒ·hÇ-Š¿@G?ú£õΤ¨çÿT~£ùÓ[QZˆ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š³s÷—è¿ÌUØÔÇþèþUJçï/ј«°ÿ©ýÑü«¢Š(¢Š(ª³ÿ®o÷WùµZª— «;n`>Uê}Ú€L›y…Ä|>Ó·ëÚ—ÌûëùÑæGýõüè¶ènJFóŽÙç>ôÆžCÈvQ¼àmê?.jç™÷×ó£ÌûëùÐÙ£R¦WUÞùl ç<ù4¹o™”óò…”çW¼Èÿ¾¿dß_΀(ù­… +DYÉ8ÏÒ¥†Išéƒ0ÆHÛè;vúw«>dß_Î2?ï¯ç@¢›æGýõüèó#þúþtê)¾dß_Î2?ï¯ç@¢›æGýõüèó#þúþtêlŸsñÎ2?ï¯çMwF\S’8Ͻ4Ë®OÌ?:7/÷‡çW<¨ÿçšþTyQÿÏ5ü©E¹9YJöH¦ºR­q!¨Èÿ Ðò£ÿžkùQåGÿ<×ò  {—ûÃó£rÿx~usÊþy¯åG•üó_Ê€)î_ïÎËýáùÕÏ*?ùæ¿•g¢/œ>Q÷}=ÍI¹¼?:klq† Œç­A*¨˜ü£îŽßZnÑè?*¥orÿx~tn_ïΪmƒò£hô•>Q÷/÷‡çFåþðüê¦Ñè?*6AùQʽËýáùÔs°1yΠÚ=åK´z 9@(¢Š° (¢€ (¢€ (¢€ (¢€ (¢€ (¢€,Üýåú/óvõ1ÿº?•R¹ûËô_æ*ì?êcÿt*Äc袊(¢Š)¨´Pm‚£ÐRÑ@ ´z 6AKE&Ñè(Ú=-›G £hô´Pm‚£ÐRÑ@ ´z 6AKE&Ñè(Ú=-›G £hô´PEPEPEPY©þ¸»ýMiVlë‡û¿ÔÐs®?îæi”ù¿×÷Gó4ÊÒ;(¢Š  (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€,Üýåú/óvõ1ÿº?•R¹ûËô_æ*ì?êcÿt*Äc袊(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+6?õÃýßêkJ³Sýrÿ»ýMG7úãþèþf™O›ýqÿt3L­#°‚Š(ª¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ÍÏÞ_¢ÿ1WaÿSû£ùU+Ÿ¼¿Eþb®Ãþ¦?÷Gò¬F>Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ³SýpÿwúšÒ¬Ôÿ\?Ýþ¦€#›ýqÿt3L§Íþ¸ÿº?™¦V‘ØAEUQEQEQEQEQEQEQEQEQEfçï/ј«°ÿ©ýÑüª•ÏÞ_¢ÿ1WaÿSû£ùV#EPEPEPEPEPEPEPEPEPEPEPEPEPEPY©þ¸»ýMiVlë‡û¿ÔÐs®?îæi”ù¿×÷Gó4ÊÒ;(¢Š  (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€,Üýåú/óvõ1ÿº?•R¹ûËô_æ*ì?êcÿt*Äc袊(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+6?õÃýßêkJ³SýpÿwúšŽoõÇýÑüÍ2Ÿ7úãþèþf™ZGaQTEPEPEPEPEPEPEPEPEP›Ÿ¼¿Eþb®Ãþ¦?÷GòªW?y~‹üÅ]‡ýLîåXŒ}Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@fÇþ¸»ýMiVj®_÷© æÿ\ÝÌÓ)ó®?îæi•¤vQE@QEQEQEQEQEQEQEQEQEY¹ûËô_æ*ì?êcÿt*¥s÷—è¿ÌUØÔÇþèþUˆÇÑEQEQEQEQEQEQEQEQEQEQEQEQEQEVlë‡û¿ÔÖ•fÇþ¸»ýMG7úãþèþf™O›ýqÿt3L­#°‚Š(ª¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ÍÏÞ_¢ÿ1WaÿSû£ùU+Ÿ¼¿Eþb®Ãþ¦?÷Gò¬F>Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ³cÿ\?Ýþ¦´«6?õÃýßêh9¿×÷Gó4Ê|ßëû£ùšei„QEPQ@Q@Q@Q@Q@Q@Q@Q@Q@n~òýùŠ»ú˜ÿÝÊ©\ýåú/óvõ1ÿº?•b1ôQEQEQEQEQEQEQEQEQEQEQEQEQEQEšŸë‡û¿ÔÖ•f§úáþïõ4ßëû£ùše>oõÇýÑüÍ2´ŽÂ (¢¨Š( Š( Š( Š( Š( Š( Š( Š( Š(  7ºÿÀ˜§¥â¢*†ˆàþ³ÿ­L¹ûËô_æ*1!PŠ1ÊŽ¦±gí£ÖûùÿÖ£í£ÖûùÿÖ¨<à ·§Ôÿ…/š¼s×Ú‹7ÛG¬?÷óÿ­GÛG¬?÷óÿ­Qy‹Œç¶i¾rîÇ8ÆrE¶XïçÿZ¶XïçÿZ ó§éŠ_5p:ý1Ío¶XïçÿZ¶XïçÿZ¢gUÆ{ôÅ'šœàô  ¾Ú=aÿ¿Ÿýj>Ú=aÿ¿ŸýjˆH§ÿ®)¦e O¥¶XïçÿZ¶XïçÿZ¡¦qšUpÃ#õ  ~Ú=aÿ¿Ÿýj>Ú=aÿ¿Ÿýj„J§¦~˜æ—Ì^:þ](°ý´zÃÿ?úÔ}´zÃÿ?úÕš™#=(óWóÏlQ`&ûhõ‡þþõ¨ûhõ‡þþõª+(ìÝéUÃtÏã@ý´zÃÿ?úÔ}´zÃÿ?úÕ Hˆ=±J$R2 KöÑëýüÿëQöÑëýüÿëTK"±À<Ò4 €N(°}´zÃÿ?úÔ}´zÃÿ?úÕš™<ô£Ì\Ï>ÔX ¾Ú=aÿ¿Ÿýj>Ú=aÿ¿Ÿýj‡ÍMØÍ*¸aÆ@ý´zÃÿ?úÔ}´zÃÿ?úÕœžÿ•9Ha‘@}´zÃÿ?úÕ®^AùG#§z’¢‹ýb»ýM2oõÇýÑüÍ2Ÿ7úãþèþf™ZGaQTEPEPEPEPEPEPEPEPEP›Ÿ¼¿Eþb™ w®vŒÔ“­OøóˆÒn!˜ ð1XŒˆ¬Y'Ì\ç=G¿øÒþï#/â¥y6.Xñô¨¾Ù@%×´n>´\Œ‰óªQT1N}ñSn>µ ³H¬B•ÀÇQEÀhXÁÈ•sÛ‘NÊg"QïÈæ™ö‰½SòÿëÑö‰H)ƒÈãÿ¯EÀpŒâEý(ù6ãÍ_Ò›ö‰½SòÿëÑö‰}WòÿëÓ¸cc÷‹Ç¿ZUdS“"“ŒuÚ&õOËÿ¯GÚ%õ_Ëÿ¯Hb?ùè?(Qíù×å÷¦ý¢oTü¿úô}¢oTü¿úô\(_w˜½1ÔQò`4cÓ"›ö‰}WòÿëÑö‰½SòÿëÑp,`çÌ^˜ê)~M y«ùŠoÚ%õ_Ëÿ¯GÚ%õ_Ëÿ¯Nà8ya³æ/æ3J…Þ)ϸ¦}¢_Tü¿úô}¢_Tü¿úô€P±†Ì^=Å<2 âEç'¨¨þÑ7ª~_ýz>Ñ7ª~_ýz.¾b}:l?ëýÏêiŸh›Õ?/þ½-¼%ËoÆ@?I¿×÷Gó4Ê|ßëû£ùšei„QEPQ@Q@Q@Q@Q@Q@Q@Q@Q@¦ÿZŸðæ)úÆÿt:Y¿Ö§üùŠŠRVMèˆÇgý-3ÐFÇŸ\¨þ§óª×¥ŽÀNNáÐc½I$‘ÈA+ #ºœ~ ¤F‰pY …Žq@½ Æ%_â“xŒð}*¼Ò<…PNÕ‰ÉÃzÕ¯´/÷òžzg>[gè(´MåòPzðxüêA4…Õ0 l0 q·¿ù÷¾l[vùGo¦roß±ò°  Ò³ 2¨ùÇAÛó ]ÎA;S’0 éóýj6>ty9è)|èÁ'Ë9=x ÜL†d$îÁÆ1†ÅYÌ‘Äê)žj1Û哞ØðØ0ƒã@[óóçãÿ¯ïQÍ÷Ûð©wŸùæÿ§øÓ fm¥zc4Ûæ&ñº>ãÖ¤—i”û§“ìi…þyŸÒ—l˜Ël~^ç;PN_ 8Ï£,{Ç"nÁäõ8¥[ØÿóÌþ”lùæJ¦óº¶Ž„qšUšC…fUëóu½ýêÏr”xíÅ/’q'N( vbe,ÀüÜNEæÈÌ€ºœg]òÜDg'éIå7üñ÷í@’wÚ!P túcúÔqM'”Xºä·§N]ò›yGŽ(òN1äñøP;²ªK`sŽ94Ñ4›m¹Î?úõkË|cË8ü)L:DGå@幑ãiùPÓÊÉ*pp:|¹«žSÏ#úR4,êTÄp~”QçpÀ‚ñÐñSÛ»ºøÈ=EKå7üò?¥7QÛÅÝ»œãœõê[Oøú þ´›$ÿžmúS­•–å·)¯ã@ 7úãþèþf™O›ýqÿt3L­#°‚Š(ª¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ÔßëSþüÅC?ßü*i¿Ö§üùŠd©»‘×Ò±@-¿™)š—snãDZÇlÒ!HQN„1ç3ŒT謨Ù¶iSlJ0á›Ôœv¢ìn%hÙB“´·LzR¬ÿ#S•œwãùSÎÂá²2šŒÁ]»ˆÆíÚ€÷D +dž3ŽyÇ­/Ú€%v3qÀ÷#×ÚœÐÆÊv1Ó@“ž¤¾‡?ÌиÓ×Ú¤w*À`sß4Á`ðÄz€zÔ™Sœ‘ÏZ’/õÉøÿ*µU" μŽÿÊ­ÐEPEPEPEPEPEPEPEPEPL_øùÿ€ëO¦/ü|ÿÀGõ ¦ÿ\ÝÌÓ)ó®?îæi•¤vQE@QEQEQEQEQEQEQEQEQE[•w?R0 ‚? fÃÿ=_òáKt*ax#ÜS<ˆB‚Tt«þˆÅò¿é£þKþy_ôÑ¿%ÿ O&Ý_ð¤x¢PE?T_ð y_ôÑ¿%ÿ <¯úhß’ÿ…W!U_ûáÂŒ'÷Ÿöü(Ç•ÿMò_ð£Êÿ¦ù/øU|&~âô=Q}>•`Áê£þù_ð Êÿ¦ù/øQåÓFü—ü(û<_Ü÷Êÿ…ƒ¨òÔä‘ʯ¡>”¢,t‘ÿ%ÿ 6ùêÿÿ _*/ùãýð)‹E(2}€°ÿÏWü‡øQ°ÿÏWü‡øRyÿtß+þ J3°uþêÿ…;aÿž¯ùð£aÿž¯ùð¥1D ýÌ_÷ì…0EÞ̪lpŠà{P¶ùêÿÿ 6ùêÿÿ fËoTü“ü)DP• G²¯øP¶ùêÿÿ 6ùêÿÿ qmSäÇÈîO¥!Š2ØòãvEÿ ]‡þz¿ä?‡þz¿ä?“ɈuHÿï…ÿ <˜ÿ¸Ÿ÷Âÿ….Ãÿ=_òáFÃÿ=_òáBÇ?ÕFzÿÿ _./ùãýûá@ °ÿÏWü‡øQ°ÿÏWü‡øRùqÏ¿ïØÿ <¸¿çŒ_÷ì…&Ãÿ=_òáFÃÿ=_òáKåÅÿêë@Íþ¸ÿº?™¦Sæÿ\ÝÌÓ+Hì ¢Š*€(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š³s÷—è¿ÌRI´Có®åÚ21œñKs÷—è¿ÌR‚6¯=‡ò¬FgÚ#%Ë™cm¥°€œì;G_ÃûUéz­G$5ßyβùÇZ|¤`}hw+IËGÿ]ÿB^à>ðႈÆWƒ÷ªYâóv1“i*qNÙ— ¿hQ…wcߨ¦›Z I=ǰÃþ§ÐÔ÷=þº'þ„*¿†x<ãMu¸Ú<×k•8¤"ŸúWÜßûìîÚëùÖ‡ñÇž¹?ú ¨ZÚ6ºŽ}ÄÆzúTÄ2?©ÿÐM:¡“ÌòbœsøÔÕ Ä³C³ÉÇ~´ n$`í"SÉÜÎ ÜjFÈŒn ž3ÇZFŽ6 9xX¯ò¥`«QÐc©Éëï@™#}ãU®Fm'¡'ù ²ßxÔ.žd2¦í»˜Œþ€¬¢V¶R9çm,±¤Š¨oè?݆79ýÿ_cÿÅS£Aewî$ç8Ç`=O¥6ÀzýÄÿt*?Œý(_¸ŸîåIügéH ¬K÷54 rTò:Ðð岤} >4 ÔäЗ§â-"ôüOó¥ Š( Š( Š( ˜¿ñóÿÖŸL_øùÿ€ë@Mþ¸ÿº?™¦Sæÿ\ÝÌÓ+Hì ¢Š*€(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š³q÷×þüÅ/–œeA8‡øR\}õÿ€ÿ1N=¾ƒùV#åÇýÁù𥃢ãèøRÑ@ ²?îÈ…'—÷ä?ÂE D@?‚ˆO*?!þ´P|¸ÿ¸?!þ¡…Áõ…-˜­ùѱ;®~ …-ß.?îÈ…(D!Gä?€Aè{â–€ Vüé6!ê3õÁþ”¯åK@ òãþàü‡øRùqÿp~Cü)h'&€ VüÿúÔ…õÉüúÔ´P|´ô?§øQå§¡ý?ÂE U7~ýj0=[ó¥¢€Õ¿:0=[ó¥¢€Õ¿:0=[ó¥¢€Õ¿:0=[ó¥¢€Õ¿:j¯ü?ÆŸLOõßçÞ€"›ýqÿt3L§Íþ¸ÿº?™¦V‘ØAEUQEQEQEQEQEQEQEQEQEfãï¯üùŠqíôÊ›q÷×þüÅ8öúåXŒ(¢Š(¢Š(¢Š(¢Š)Éç§¥-›y^yüóB®@8ÇÔúÒÑ@mPI'€yè3A\çåž¾Þ”´Pvp208à¿ Úß(' œúþ”ê( zw8Ž(Ûóǹÿ&–Š 1œÑEQEQEQEQESýwù÷§Óýwù÷ ¦ÿ\ÝÌÓ)ó®?îæi•¤vQE@QEQEQEQEQEQEQEQEQEY¸ûëÿþbœ{}ò¦Ü}õÿ€ÿ1N=¾ƒùV# (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ b®ÿ>ôúb®ÿ>ôßëû£ùše>oõÇýÑüÍ2´ŽÂ (¢¨Š( Š( Š( Š( Š( Š( Š( Š( Š(  7}à?ÌSo þTÛ¾¿ðæ)Ç·Ð*ÄaEPEPEPEPEPEPEPEPEPEPEPEPEPEPLOõßçÞŸLOõßçÞ€"›ýqÿt3L§Íþ¸ÿº?™¦V‘ØAEUQEQEQEQEQEQEQEQEQEfãï¯üùŠqíôÊ›q÷×þüÅ8öúåXŒ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š)‰þ»üûÓé‰þ»üûÐS®?îæi”ù¿×÷Gó4ÊÒ;(¢Š  (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€,Ü}õÿ€ÿ1N=¾ƒùSn>úžx ÛÜRy£Ó·¡ÿ Äcè¨üÏoÐÿ…g·è€$¢£ó=¿Cþyžß¡ÿ ’ŠÌöýøQæ{~‡ü(J*?3Ûô?áG™íúð  (¨üÏoÐÿ…g·è€$¢£ó=¿Cþyžß¡ÿ ’ŠÌöýøQæ{~‡ü(J*?3Ûô?áG™íúð  (¨üÏoÐÿ…g·è€$¢£ó=¿Cþyžß¡ÿ ’ŠÌöýøQæ{~‡ü(J*?3Ûô?áG™íúð  (¨üÏoÐÿ…g·è€$¢£ó=¿Cþyžß¡ÿ ’˜Ÿë¿Ï½'™íúð¢3™sÏOCï@Íþ¸ÿº?™¦Sæÿ\ÝÌÓ+Hì ¢Š*€(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Škê‘Ï’OnqIý©üðþU˜i+šŸÚ‘ÏåGö¤_óÃùV]©ý©üðþTjEÿ*øáð·ÀÚö¡áxË@ð™#‡QÑõ]cIµ¿²‘ÑeE–&Ÿ+”taêçÿá¦þù©¾ÿ‡Fãÿ#×DpØé%(áê4öj.ÏÓBé§g8¦¼×ù7ü)/…ôN~ÿágÿÉÂ’øQÿDçáßþ6ü‘\Èý§>Ÿù©¾ãž|A£ç?µ'ü4çÀžŸð³|!ÿ…ÿÇéýW0_ó Q[û’ÿ!{J_óò?øÿ3§ÿ…%ð£þ‰Ïÿü"lÿù"øR_ ?èœü;ÿÂ&Ïÿ’*O|cøqñ^¶ð·|U£x«Ä7q\Ïm£èº®—{},ñ™gF“ä*"–f8 öøEüYÿBÆ­ùéßü‘YNšo–¤%º4Óû™k•¯u¦½Qâð¤¾Ñ9øwÿ„MŸÿ$Qÿ KáGýŸ‡øDÙÿòE{gü"þ,ÿ¡cVüôïþH£þб«~zwÿ$TþûÌv^_zu½øuðMÕl´+ï |+´Öu'û;KŸÂ:|w÷âFtSo ¹ß07ÜP¡Ilj [á_Ã{{NÒþü0’ïUÔu;GŸPðÄ1[C œ÷e„pîrÍåÆìrOµzƹðâÞóÄš?ˆõŸ êŸð‘x}6è·­|°Ë¦Æíºu#»ªÎ6¤ë·÷¨‘£îUs÷FëU×|%‹w§ZÝEâ[Ë>£—¶–’Yé:ŠÝ¤‰i*–t0È…VA†=¦¤â¤å&¹WWdŠŒWkžMaàO…š´w–ýŸnme‰fŠxôlFñ :’Ã#,£=‰­lÛü"ðMÛ2Ú|?ørѤR:ÛøvI™#”‰˜!;U€%Ià€qTßösÐg¼±–÷Ä^´63Ã}kŧ‰[LI­­a‚6Y–ý¡Vt·²¬ŠÒÈîX1À>ðg†~jz­Î•ã߇¶—úí¥Ö¥~Añ6 âÃOžu¸˜˜.™¢†)<Ä;ÛjíU\dnË ŠÃãiû\&5 ºÆ\ÊûÙµ-šv¶Ã9Q|µaÈüÓD)ðkÂ24‹Ã‚Nп—*§†'fŠLÚà}Ó‚b)ÿð¥<-ÿDÏà·þ·5ßS¡Ë¦L|kðËK“ÆHu>ãþZ®²pI‘¥L¼ãl„>xÆx®“Ãz?Š|]¦_Ã~1ð.©¦ä¶KÈ|7âh¡yc [Ë3^©ué ©ÏÖüµWOÅÿ™êíøž;ÿ SÂßôLþ á+sGü)O Ñ3ø-ÿ„­Í}ÿ ÿâ?ý  ÿÁ»ÿË ?á_üGÿ¡ƒÁ?ø ×ùaK–¯oÅÿ˜{¾_‰ó÷ü)O Ñ3ø-ÿ„­Íð¥<-ÿDÏà·þ·5ôü+ÿˆÿô0x'ÿïÿ,(ÿ…ñþ†ÿàƒ]ÿå…µ{~/üÃÝòüOŸ¿áJx[þ‰ŸÁoü%nk;XøMá=IÔµY>|š=2Âêù¡Â÷ ò¬4…·¸ÉéšúKþÿÄú<ÿ‚ wÿ–GSøWñ[Ó¯´i ø_? ¾ ©ÀȺ8?\Qÿ SÂßôLþ á+s_N„¿²vø›ÀÊ2vƒáý|;d@gòŸð©~&ÐÏà_ü'µÿþXRå«Ûñæï—â|Éÿ SÂßôLþ á+sGü)O Ñ3ø-ÿ„­Í}7ÿ —âgý þÿÂ{_ÿå…ð©~&ÐÏà_ü'µÿþXQËW·âÿÌ=ß/Äù ÓÀ_ /C›o|`žaËø~XÒ=ûÞ3.Ñ*Ÿ17.œâŸqðãÀ–SkBóáÇÁK[-IÓµ›ÝAü1rÐ%Û_ ø@X*-‹±n„8ÇÝ5ëZ‡ìmªjsÞÜßx“Âóɨ?›z£j«m<Êí$R}nD(ѳ¶ "ïß'™æy²oéuo‚ž"ð¶¯^êþ0ð=‡‡[Ã:W‡¯CøĆ M&Ío-"TXoZBî5ʤåSç‹å’ëø¿óȾ^§„ÇðÏáÜ‘ÛJ¾ ø ©wn×VÂ]à’[u Í ŽBû²Ýœ`ãN/ƒ>š4–†ÿåŠDY"–/ \?øe¨ºÇç&ü8i¶Mz±øcÅÍ$ë,00òþ׿<î-…TÈÌf%BÓj‹e·›ÿ0÷Wm=O'ÿ…)áoú&¿ð•¹¬Ý#á7…5kïãø[ðb’ãPc Ü3²^\Y–%xù¹lv {·†´íGÆ7¯§x_âwÃjú+{Û©m,´?<ñ[ÙÜÇipî¦ø 4ÑÇÎ2Xc#šéô¯‚Ÿ´›l!ñW‚dHe¿›|¾×wº»¸¼~ü\žsI*­o7þaî«møŸ:”ð·ý?‚ßøJÜÑÿ SÂßôLþ á+s_MÿÂ¥ø™ÿC?ðž×ÿùaGü*_‰ƒþfàÔ½¯ÿ/í 9jöü_ù‡»å§©üß~ß¾°ðŸÇKM.ÃAð¾‡xÃ÷bðµŒúvš]îõE24DŒÊ|°»…AÚ¾"Þ¿óÆ?Î_þ*¿Eÿà¦þ×tÚ>ÊÃ[¾Òo¯GÃo MçéV·–6¢¾Ö6/—<³>á†ËoÁÈàcŸÏ°Ëýèÿ6ÿ Þ7I_tFß#û=ý˜ÿäÝ~Ù+ð7þšmk×ô j}FÝRàr ôHºg¯Ö¼ƒöcÿ“uøÿd¯Àßúiµ¯_Ó-©õuKÈ+Ñ"éž¿Za°YŸø˜jÝ~YlÇB?åÝOãOˆíkÕäÓ´ÃЃ5øô'ޏõË3ÿ [¯Ë-˜èGü»©üiñý­z¼‚ºv˜z0f¿ž„ñÓ·¢€ó»¿jSxäkê¢8xµWN2Å PÃnH2éÒ\y™RŠ¢ôE±ŽaÏ'Ž¿ð‹P¸Ò$þĽÓõMNöæ-~÷R¾mfÚÆYÖgÙ%·Ùáxc+ànù==Èœk1Žä)èqÄñ÷ük‡ñ¯µŸA¬Å¨ÅmRiŒÐùV­&ÛiQß™-^\áIO.x@f;ƒAñ3œƒ/Ïc…†=M¬<œ£É9Cui'˼Zѯ¹­Nœ..® ÍÒ·¼º¤ímšó_wsñÿöýœþ&ø×ã§Åm_@øwã˜uÝVÂî×YRðìÝXCa¤$¢›PŠò0%·¹ŒÊ¾@vˆä.^¼çö4øÈú4t?³ˆÄx†àÜ>¥áu¸}SQk²Æ.¿µY–ÚÎ;e‰7FåIJ0Hd>aýÁñ/ƒü`umZ(4m+Ä6­ûO¥^j>&¾Ò®mexŽ‚ÚÖ2˜î~pr¼ÿ ‡Äß¼Wâ+o ÚÍñ6oê¶žÓ´ÿXÛÞ3¾³sÍL²I#& CTF]œÛHX˜”¯Ñä~!ñ |³“}N–û:UjsòÖŒ[§WímÂ*Z+Yô²<ÜfA€j8ˆâ]IUÕÅrÞ7÷ŸÙoFÚׯsðçþ¿ã;.†?á–õئ•¤«â å§¹†x优<º®.ÈVH°“mÕ몋ö=ø—:¥Ä_²ˆm#·[ t¿¶“¯ßÓ[4Ñ#<.ŠJ— »¡Æ+íÈR_úçþ‚+刀gi݃añ,å¾?á ÕGÊø;O£`ã®+ Fr© FéèüÖÖ. Çgk/¸­-þ¯¥ëе¿Xêögˆ|²èvÃ:X JÖÖØÊ_Ãðe`f†vC4~b‡;ÜŽ‚×Àÿ³µÜŒzN­ X[Ø>£¡jeâk{hÏö­…™šÝäšBe‚Ê)UÐÅ.XæP|®ûOºÓu+KÕu?‡wVÑx‹À­âøF´OÙjsXO­éop—w×,L2IæFÛó˜Èv.¾¡¯èŸ³†©g¤Úëºþ‰}ky2Ú\Mã ä 5¥±–F¹œ\âH¬?2B¸*ˆsüÞNE–`2ºXÊ8 =1u]ãEÊIY$”Ü›÷ÒÝ+%t­ÕôbëUªé:²“÷S÷’W¾í[£èõ¾æ¾§á/€w–Vv÷z߇VÖÓEº·‚+?Û[Éq£n`û~-§OvÑÇû‹•Ë©‰|¬\w^ Ö>hÒôÏ jú‘£A)ieuw•|•í®­ïŒwBg–ÞH·N‚Gh˜‘^}¬ü,ø!syâ½vþÆëKŸR¸qos¯£èˆ/®oî••Ï•sp‘D$- ²í 5½mð»à¿ŠîáÖ4k üè¶Ã@ŒøTËNŠˆµ§•i'— >LbHð7áó%ß”u'¾_Çh†möuk·cn«€ŠÒ08“FÞV ¼¬yð÷öy[¿ø®ÂëÃPIâM7[¶×îˆ-m£OÖ,ækÈ^9dVÓTZËpDD#VrPl!ñ€þjÞ!¼]Rò×KÔ–ÒÖà5¾­u¢è¶êCk³¸4ôšî„ÙÝ@tA–cŸà?Ù¿û;X½±»ðâYÝ%ÕÆ£4¾#1OaÖvòʲ%ÄÂX1kg1Ê»„i a‚ôïxWö{¾¼Ò´?ÝÙ0ð¶…á›-ûST¾‹DÓ´¦·ŽÛMŽÖúR,ÚYàTé+HèKâ`mò ާÀºÁ/…°]\xOY𦻬Orþ%Ó;ÈläЬR<Ø}‹=Á, f ¹Ë-]ã|BðTz¬ú4¾$Óm¯ ·²ºcw+ZXË ßÙ~Ïä_L«krïöë,G®ãíeGš›¼w]ðoìÓªÚY\ë7žû,¶ö–ÖW2x’ÆÜMke¦›(9<ðH[XI…[9?5ïiŸ|Q©kº7‰ÎŒ·ú¢øRÕïn Þ•õ¸µ²´ÓaMU•-æˆC{a‹hæ!Zò 6‡e`ëPøóÀ×.#¶ñŸ„çrÊŠø‹G•˵ÇÙB¬ÄäÜ~àò|Ÿ{Šë+å/ ü>ý,¯!ž?hšïˆZúÒá5;ŸY6°Í¦©co[Ê’ESE š"à”„#Ëúa4ˆ#»[źÕL‹;\y/«j2Z"ì6í!Œ§úcâ=»G“n@ÚlWŒ`Ðn4x`ñÜöZsë¾1Ko,ð;êÉ«Y¾—hT±|¶ˆT­»k|¤×‘Úèß aÖì'‡ÅZÂÏs«Ë}¥…Ô.ÒÔjVú׉%¹†Y {YN¥w­º¤ØU6¤Ä@‹5ë¾0Oˣʼnn&´Ó[[ðו,^Á'öºêÖO¥¦û_œ¾[E ü„ “^Moað†-JÝV¾¸Žª÷VñÞϩɧ®¡i­øžK˜.d’?– /îuýðÜŸ%…³…ùdØ69c¦ü ·‚ÓÎñv»s¥­•«i÷]ë7Zh°6m¤ÚÀ÷Vöì0:MËBea>û±±[˜Ñô<#¦| ²×t›¯ kúÈÔ ÔìÒÚqâ7Ó忹–åc[¤¸ƒÈV’òâù µ’êææ é#4U— ‡ìñgn'°Ô/í4+ƒ5í‚h6þ$‡ÃÖÑj1ÉköH—O·ò‘ŒºmÜÑ$ƒÍ|â"VáêøNÏà<ö‘{áMSYMJÛR´ŠÉa‹u-Ì*·"x~Î<Ë©5¤iH sqw )#¼tlÿàšù§Ä÷·i}­x—BKt¸×nšëQÕõH|G©ÂöÐBf<öI2Ü!XC„#ó’Cû4i@Õ5Ûytïhך{jú¦»r÷ZM¾©o=ÔWWÛtbKÈ,ã)9S(·#n q¿ážWGbúâM/XñyÓZ üU#ÜkpBO–öÑ9m…´(¢r¢3I‰3’aŸPýš4}Ã×—ík&’,5‘¢jWÚG‰¯ä‚Ñu;f¾_5­š[6’êcÁ´ª .ä8&Á±êÿ¼=ðÉñ‡ÃÛ];ɹ—ÄúYÔ´µ– [†}_v£ ¡ W–-EWb¤dFJ0'Ô+Šø}qà˯ E/€%¶›Ã?Úšò[=š\Gh/cÔ®’ý`Y•O–·Kp¨PyeB˜ÉB¤ö´QEüÍÿÁZÝö©² ê§þ_„‚œ}»[õ¯Ì?:/ùëýö¿ã_§ÿðV¯ù:‹/û%~ÿÒín¿1(û)ý˜ÿäÝ~Ù+ð7þšmkØ4ß½©ØNý*ñÿÙþM×àwý’¿é¦Ö½L?6§Á\j—g‘r0h³?ñ0ÕÆÛ-˜ä`ôt<~xü >#ÿkÑ‚1§i‡8À9šÿî1úŠeŸü„5nĶc·?èëþ ’/ù Þ 4ý3ž0}þ­8Ö£?ò ˜ç O^CZ•–xÖc?ò —ž0?ùü+R€2µ4ódÒ¢MýEÇ› "bÊñº@ÎÜtï^+âÿkmâMN;8ôYjVVS­¯ˆ|Iu¦\i×QÂöîV hä Ës… ËaÖ.,Ò}*Þâõ-Kæa‹¨í§-.Àe%Ám©‘Ô°ëÇ<_áÍXø“TSxgT²Ômtùš×Å ½±–Âxb0ɱRÞD;ÐBù,|¸¯ãZß*¡¨UÅZ¼-ª•Hû³\É»sZü¼¿Þ¿Kž–W.LD¿{~ëÖI´õŽšmÞþVê.¥ðóÆú¿†<%¥Kãxt}GMqy*¥Æ¡{möÈ5»M[O‘6Kö‡ÙⶆÑRe(»üÄÃO8Ÿþ2}ˆÛKñÃ[û@…¢[À÷Fà(·¨vD‰ŒLÊÍ,̲Èñ}–]à‡ŠüMkðöôøÜhúÇ„mõ5œÙZâ9ÅÍòÝÚ,Ö÷6× -cX⢷”¡”ÆJ¦`Ⴄ•§’(£çpªó:¨V‘‚ð IŽké2è{,¿OÙJŸ%*k’ošq´唺Ém'Õ¦Î*îõ«>e+Éê•“Õê—Dú#‡øá¯øcOÔ-|O⻿]\j?hµ¿½ó>Ñ  ‚„L2"_$p±E€ã>cî‘ûÚ(®Ã ¢Š(¢Š(¢Š(Ï ÕGÊØ;O¡ÁÇ¡¯ª|Eÿ!Iëœ?ú¯•¾#(m`¡ÎOø˜¤Øp|ªƒ†ÁÛõÁÅaâL¸èŸK#Îõ[Ñîì4ÍOXð–©ec­x.O'†|+y¤êÙI®iÏqú‰ºg•ñ rH²#™ ä2»ï_`¸ðßìÛÚ.ü8°ùZZÁnÞ)¾$m6É­´ÿ6tæ·¶i–"Ê]CÎËÉv¯&½³:n£¦èZ‡Š¼'©éö^ ð<¾&‹AðE¶#ØÉ¯ibåouXo ¼¡–mñ¾óŒ•î_J¼Ò?fèeÑõ–ñ›egJ¶v–¾,Ô-lï.íbŠÖ  Äï-„Å-£Y[Gw/—Œ02‹XžYS’U$¿v¬–‹IwŸó?4]dãìÕñ|öþïcµÔôÿƒwÞ¹óµ­>? ÿn2jÛxŽäé’jÅC4sJÓ2ÆÄB¯½ 6"À}¬ÊýGÃ}Àš6›¨[xPMFÐj7Bú_퉵‰m® óL- Êì`Ž<¨€¡Fì勱òyûˉg‘ž+x£–GŠ ‚7ÞY»ŒOW¢¹ ÇÞ ñ%ÔV:ˆô½Jîkvº†ÞÚá^I`V‘ 'gÃC0ùIÿQ.?Õ¶Þ¾€ (¢€ ž×þ>­¿ëâý T=¯ü}[×Ä?ú ÖŠ( ©ê1[ϧßAtf[Y¬î¢¹6ÍqÀ·xÙdòšß÷ªûIÚcùÁÆÞqW*µå¼VwV·+#[\[Oop¼ñÊÐHŒŽ "Ub¤€P†H8£o+ÞV>eñ×ìýo é ®É©Å–ƒi,²ø±‚Žâ}N3«jV÷újMeos2*ÄúvÛk8dòáòÄbÊî&_'ìì÷šN•ây´èíô ÃørãUñ±‡k¤Ïn‘i±é2=àˆ‰­€IÄÑÆâgpŒ¿£þÌz•­”úÝïÖÖâÚÖ;‡ñ¶[›+}7ìvád[æF–q&8"$bIäÞñ`øâMS^ÐÏ·F·Bà\5×:Ž¢ðùÅn”Ÿ!¥1‹Û—nÑ”ã÷Qì6 ¼Œß&ƒ&~$k”Ó\𡵓Q†AªÿlXÿe‚öDJªo¾È’ïùs^K-õK}×z› ýVâò¨]km¦ÚßÙk^&iã¹yÈh­ä¿Ÿ_&¢mØBv€¨¹õ$ñ@¸m)µÏ FŸf}R6³jöK¥3½ƒ,ª‚üÙ–,Dc¼ù7W“Á'ÁÛ=FÆ«‹­Z[Èå¾›Ämea©Øë^(YÓÜ?›o —ïâ9+“öY<¶ÂàF´Ç þÎðÀ—zqÕF…tn/,ŸB'·ðõ¿öŒWd4àŠŒÒiWE0.’_3ÆUf ºž_€Ã^Ònü*Ú씥½‹E'’Ì_Ü=Ü@\,‡È`×ÚËæ‚>Ó-Ø~ZSY±^þÏ lš•ž­>‹x&¼³¸Ñ×Å6º$-¨Çqjö Ÿ$JGÒ¥mæF)%á™ “[ÂW?»¤]xRÃ]·Õ`Ô¬íl®m$ñ¼Ñ^\ÉulVàü™ÝG¨E:Ê®­?Ûe6ùe`6 kÿÙå4h’ÜM¦ê¾.m%ìa»ñD¿mÖb„‘¶þfM¨·"€dqÅÛmWŸÄ³n‹ ø~òòæÒî¬u¯ìkË­7ÄZÌ6±êvïz ̯4/%â@¼òm ÊåM†Öÿg¿ìcl°ÜK¥êž*þŸÓEω.5x`,#¸†K…Fµð$"ÌE#ŽØGò–ügû:èÚ‡ï&²i4«Û e´‹—ÓuÝ^å-aÔákÕó˜ËpY¯#‡$3 ·;Zcܾ^x:ûÃ0Ýx  o ¾©¯­«ZÅq¡»S»ŠøÀ’ªþèÝ%ÆÂƒËeÚÉ”*Ok\WÃíK·†aÔ< ‘Gá¹õ={ìË´ö–æò=Nî+ç†)@Û]%Ã!@#eehþBµÚÐEPó=ÿjÿ“¨²ÿ²Wáý.Öëó¿Nÿà­_òu_öJü#ÿ¥ÚÝ~bPöSû1ÿɺüÿ²Wàoý4Ú×¯é‡æÔø+Rà 㑲.F yìÇÿ&ëð;þÉ_¿ôÓk^¿¦›Sà®5K€3ŽFȹ4Ágÿ! [‚1-˜íÏú:ÿŸÂŸÿ‰µèÁiÚa Æï¯øëœŒÝǾgÿ! [‚1-˜íÏú:ÿŸÂŸÿ‰µèÁiÚa Æï¯øëœŒÝǾ €aãYŒ`ÿÈ2^xÀýüçð­JËù\_‹¼!ÿ A°eÔ§ÓZÂ+èÁ‚MV ¸6Íó5…å«:l¹†F’7Ýó!À¯+7ɰYÞ8kQ¤Úè³Zø¾êìE%Ô[ÄrÚ©.â®ÙN6*¶ÓÎWûáýíï‚ôïâ7ü"÷ßë”WÞ{ÖÓã²½âi,RÛù çdòf%Îd£GæåøÜ~[+ÄåO—á`£K*±q”b¡)^NNR»Õ¥ª³»w:+R¥:QÄC§Z£¼©¨´Ówo¥¬´ûϤ(¯)ømáMWÃ×þ/Ônßyy7±õGtÝ•»»¨ˆI$ð9¯¦M4œ]ÓÚÇVÒÖ°ê)‘ɱÇ,N’E",‘I+Æñ°YYx`AÁŸLŠ( Š( <ñü…%ÿ®pÿè"¾Wø†Ö‚°%MİÊ _øCuPyí_Tx‹þB’ÿ×8ô_+üDë;HàØ|KtÈÿ„7U„t«2ã¢~‡ŸÞÚ5†¡¤éÞ6Ð5í+Kñ‚¤ñOÃÃè,Ÿ\Ò㻊óWµ»78M;ü’oePÛXäzµûþÌ3Non¤ð„÷:]äRùwlÖ·“ü™®#G ¼Îˆ²J£ÎcYÊŸ/»´0jº6sãë?iZ?‰< ÿ ½¯Ã/øzÈ@ÚÞ“ Ìw:¥„ŸhTO.Ô» ÛÝ8 šômkSýœõoìíKPXÔOâXb°† ?]´>%Õ6 P$jÚŒ]XݘPyaG(|ùãˆýõ:œµ$¯IY+[Ý–®óŽÒwײÙi^<®šä”=Õñ=^ú­¬ŸEùîm=÷ìí¨[]¼éáå´Ðnïuy/'¶Ôl’7¸ûåÕô7%Q¦Ž©hUcúc'Ý‘ƒ2Ç[ýŸŸ¥Õ†›<öÖz|RAý³kpÉ%½¬6{m—*ò46ñ$,ѳI¬»7Ä’Yï¾Ùøy/gÒtø<#®Ç}oy­=…äz8šßì×W =É;Þfx£q“2YÉ’†ˆ­Y“Pý´›› ü%os<ªÚbÅoq+Ísf£·Ž4móB—(‘B ¼k,ɨóV»öùmò-XAðGá׈ÚêÒ{=/\¸Ñôi¢Quªjh²¹–æÚÎîʲË+\5°¹ X¬°À¬„¯qµ¹·½¶·¼´š;‹K¸!¹µ¸…ƒÅ=¼¨9‡ ¬¬¬pE|ç­\þÏw·cThK‘§Ï§K¯ˆàŽÎ 2iu{y­^×É„¹¹71üŸg’Vó, ôøY¿ô=—SêBÒßAðð𮯩´ÃD›JžÚ1§ÛèÇÎ2:M†Y!‡Ê1&Ù¤;vѰ~ƒµÝ[öešÞÊç^Ô|Y­´·W6=œh‚Ùe(Užcå ¬G“°ÕŸx‹à©ªx‹Añ´z\LãÃÚι«EucetÓZÙ[iÆK¸Ý]?ѵXŠ?–Œ“J¤0YvÖ×|Oû3›{9uûß Çŵ‰¶–·ðK%”zhŽÐHžX“Êûqì ¬‚"3”&_ð.óT×ôA¦À‘YÖoõ›co§Ï=Í­¾žg‘Ï…¾ÍXž8‘‘§\°Š`†Á±ËxnÏö`°¾].ÃWÒµMv{ë;‘¡©ë7ZÍÄçRV°Coò™#Že…!O,ªÁ=bU5ô¼z— èÔ#¶u»YžàKö«¶WûPcå™6`ý¶çåÛÞ>DÛóO‡dý—l¯DÓ¯´«ífkÛK¿³j?ð\ê÷WêJö@Ã2’5œCäÆbÁ,’Òé¡i1^.¡š-âÌ÷ 8yw œ]|nÚI·]¿å±ôÍñyÐGˆx–çÒß[ðÌH–é¨;Uõ{$ÒݾÆDŠ©|m±;f[å¼–Úóá –£k ³ÕÏÕ¥¾Iï°lô­NÇZñ:H×-4že´O¨ÂG)Y·rã˜ÔúÏŒdÐbÑPø’ÒkÍ1µ¯ ¶ðEs+jK«ØÅ¦HV,wÏi)rv¯—¸ðµäÖº—ÂK-BÚTÒ/ êÓ^š>©§ë^%€Ï0y [$—ÑxŠb͘ÜòFY|€ä!ÖgË›eÖ´ý'S¿ÒoL÷–׺ Ñîü/ êöÚ¼­•…å´^!¶Š ¹ÞêÕ„ \l‘>Ói}êÊêeŽêwVS,Ç"ü¾¶MvÃÃWÚÆ“~%ºƒPÓ-e–Ê)o’{9ìVîQ”?ö:LÑlhÕî„ìP´Ï·„µ¯‚WÚî?†¼%©ZjÐêv–vZ\[}–êIn­[pŽì™.lï¢vÈ Ãs;+G¾rÖñ'ÀUÑpšMÔºEÿŠ[G¹³XuQlu8íÄ€Ý,“¬_dû4qı1(Q"¶|«©7Ä/Ù÷AÐü?w&“pÚn¥a­( 'QÕo£´¶Õ-ÍÚ^K—-x–ïòy‡7PEX“Å_×F2¯…o&ÒîüTt«ÈK’;XÎ[›Çšá-ÖÐÀ±"£È~F†'îÆ ¸ø›ð'AÐ|?t|7yý«iÚÃiö°h‹{­¦© ¹àóÚy‹^$Ì^v¡vEÁ·È÷?‡úÇ„õï Ǫø*‡îuM|@«e>ŸÞE©]Ã{,Pʈ乎yQÔu‘]xa]­q?µß ø“ÃQë´k= ãT×£Àé¾uÔ•Ô— Á -ÄsJŒ@Ü®­œÚ€ (¢€?™ïø+WüE—ý’¿ÿév·_˜•úwÿjÿ“¨²ÿ²Wáý.Öëó€?²ŸÙþM×àwý’¿é¦Ö½L?6§Á\j—g‘r0kÈ?f?ù7_ßöJü ÿ¦›Zõý0üÚŸqª\œr6EÈÁ 6 ?ùj܉lÇnÑ×üþøüM¯FNÓn0}Ç\ä`vî=ðË?ùj܉lÇnÑ×üþ$_ò¼sâß]éÖºý†µ ¬z5Œº}ì^.†âîÆÿ%d‰­âyŠEq”‘Ups¿ŽsŸo®wÄÞĺriò]Ofå.V[wž9AXäá’9‰OÌŽ¤9¯?3Ë0y¾ ®_ަçF§+iJQwŒ”¢Ô¢Ô“M'£5¡^¦¤jÒv”nµI­UžŽëc®üw{à _I¾ø‹m¡Oâ_&·eªø*Þé,4嵆(LV‹‚[tI¡I^UtT–4n é&F‰ðêþÛFº_‹ú–±¥dj6šyšïÃ÷÷y‰îXÅû4‹eÙ3¼‚i»‚ ôŸøÙhÚ4ºv¹§XÏ ]jËuâ;K­KL»QwR²Àn]dš?-˜¹,rÍ“ÊÛø1nü-ây5¯YÚAâÛŸD“xKMšÉtÙ´éfºdÂiÌÁÿxŽ [(t‘IVðð•qÙ66T2¥K%ÃÃÝÄÊ´}Ô¡ÌùÔææýûÃáêìuÔ,E)b%ˆ¾&Oøj/]m¥£Ê½Ýwò±ÒxáEŸ€5™¼Ekã]wTÒ&Эt}?HÔ5‡Ðôû]ñ,ý›î–)µ;,pÇ4°Kw¤ÜÚÃ5µÇÚZIãfVê-z†a¾2^æ=Ùi—ž.øý$-§Æthé2Ê–^Öâ‡P]>öÆâÎ-Ñ[¯š°^]Ú'Ù”œI3Gå’]j;_ˆ_£ŠñÆce_k¹c'‚nn Q[š(á¶vòžúÆÖʨ3›hñæü‹Ìz;bŸà¿ááâK[-*ûÃþÖVa=¦…­m‡U¸³mVÒ;q5ßú5ʳHäUMã € / é ~,hj6>Yü?k6¯áÝ?í–SØÚÜÛcÄö‘#h÷XÚÇ«»gØ# P¦ÕÌñVµð>×öú>»cmi øN¾ÔbK-Q¶y"·kD»VkH…ŽÈû-ª:²!ÉÚ§×|&ž‹A±_ Y[éÚ7+mem`úZÛMòGs–²"<2¬é*H®¡ƒ«gš6ùß#OKÒ´ýÂßKÒ­!±°´WX- "ov‘Û$’ÌÎîììK3;1$’kBŠ(©íãêÛþ¾!ÿÐÅASÚÿÇÕ·ý|Cÿ¡Šíh¢Š* §H­®$‘Hã‚gxÓÝ e\2@ d޽EOYzä¶–ú.±5õ”º•Œ^¡-æon.§¿´H$im£€&y4b2FâÀdf¾A·Èù×_ñ‡Á3EÑlµO_N‘xoO»Ò4´}:mBËA‹[M¢Á/ÚÄ jÀcx®¹†hÝ“æ_e½Õ<(>ŪOiÿ…ΦKk§CoåÓ.¢lm"†6Qo6•w*)a–U‡‰jþ>ø=gáÝÚûáÝÝÚË¢Aaá¸ô]êÿNÓãñ hâÜŸ´ì†Xµ9Àkdº<Ü®äq¼-Þ‹{àXµ Míþ¸ð¼özÁe¸ÒZÉg‚ÑbšE·Œù[+H¨§04mò ¾G‡xgļC¯]xKFøo$sÝÁw{yqocá9tdôûE¶]iú”±€Ñµª¨ƒ*%ƒ‚»C×Çß³^£¥éºž±•¥Åg¤h‘[Yëú&§èºpKk[{hÊG%ªÇ͵´’Dª1+”BF·…¾#þÏú=Ž«sáµÓ43=¸:Í¥Ÿ‡ï ¾™"°Žcy°»+‘ò^P]¡@IdÎf±¯~Ï^:6¬xCG°ðiw¾ÖdðÌ2húÅìqÝGJ×s¢@i˜AåÄŠDŒ2|ƒo#¬ÑµŸ?5y<-¦[èZ¾³i¦Åw.“sáíFÂå4›xF qymøD ¢CDa‘AO-ëÓõøWÄ][kZ™©C{yo¨^%Õ¬oö«È-þɲž®Vß0rH1³!XƒáŽ¿gO†¶ÐÞhòãÏ}·-1Ð|G>´lïUµ]×&[vž8$ŽTWÇÉ$!F Šîµ_Ž^Ð5SI×$Ôôˆt{M"êóW»²Ùð¶¡¥Ä0ËN×vÒo#•¼ëxÆØnˆ$[JTýô54Oƒ ´¼« XHÆïí¯=÷™}<· v/bÞÓ1 ±Ê±ùqãj,1¢€¨îcдxo>ßj—¢á®…ÐŒ …Ã-Ò—Ý×$_]ûxZòûOß /uÒ¡ñÊêì“ìÓh:ý»£]Ü-½¾ã%° |r†''Y*A¯aŸ ’=äà uÜOÏÆ3Ÿùg'ýûoC€cÆrèhÑ?‰4ù5-1µÏ @¶ñÀn<½J}ZÎ :v@˵b¼’ÚRùù<½Ø;kÊ­õ¯…V«Çá»»C6¬÷Ïw-³ýŸGÕìuŸ@.æ¦?gß{o¯Ì%@ÁÌ…˜nuÏ«øÆãC´ÑR_é‡UÓZðÍ¿ÙVÞ¯/P¸Õìmôû’’2€!¼–Úbà–A`®”Zøƒám–§lðøJâÛÍÕžê[–Ó­Ì:>¯a­xšÑ/$€JÆ÷¶zôâXU™ŒÁ™CËFÁ±ÇÃã?z°ñŸàëÝwMÔMÅòjV²ˆîoVk+›Ao%ÜrÄ®4x%’5CµÒÍ!šgMo x“àΧâ _ ø òÓWMBÒÎÇPµÒ´ëG³™äº²‘˜[Þy¯W}ÜS…ŽOšÞ[’¯kŠÊ_|Õ¡ÿ„†ËÀ7Zå¥ù¹¼[ÄÓts=½ÝäsX]Û}–{¤–eÒm žZ˜TÝ$’o1†§„|Yð\×´cáï†óZjñjVÖ–7°hÞ·ŸOuk›g_"ëÏ1[Ϧ]C1Ù§ÃDD„Ø6"o|]í‹àk©ôÆñTšuêŸØ-­Ò[ý©u é®.ÕlÚÕyK”–(¼•ÿþ h…pžÕŽ¥§kÇOµÐôËFÞÚÏS€ÜBö¿kó¤/x`—÷BU\#ÈÑ€*fñ÷ÁäÒ>ßë·Ó‹Òÿþ)­&+K Ö|º­ÜÒ̶ÑZ´/©ibh—ËÆÚŽoŒ_ ô @–k c©Ùjò[év:†÷Ö°ÙjvË,OhnƒÊóìó »Ôa$r™låàxwÄþ‹Zð­”¶-Ö§®¤MbškÍs¥uÕϤíY§ŽiÕ› Ë*³*’@ìëŠøâ=Å~]ðÖŸq¦i7Z¦¿V÷61éòÍ=¾¥uoqt`Bv‰åŽK€[DÀº«nQÚÐEPó=ÿjÿ“¨²ÿ²Wáý.Öëó¿Nÿà­_òu_öJü#ÿ¥ÚÝ~bPöSû1ÿɺüÿ²Wàoý4Ú×°i¿{Rÿ°œÿúUãÿ³ü›¯Àïû%~ÿÓM­zþ™Úž@Õ.1‚O"Çaƒí@™?Ú¿[0¼ç#ìéÏ·9…>"µ¯F0¦sÔù×ùöÀüé–yþÐÕ»b[<`öû:þU$YþÕ¼é§é˜çœù×ùã·j62HÖ£ãû.bNzªG®&¡¬ÛËy§lŠ3Asž¥â1“ÎýĪç#ŠõÚÏÕtèµm6óLšI!Šòä‡`–0Ãï.àW#ÜåÆ`ðØü-|.Ÿ=±å”nãuëš}SM4õLºU'B¤*Òv”]ÖÏðz?™àºW„£º±ñV§¯x¾ÕíuM / ´~Òeðýæ™p'ûDWÒ8>S&P ¥‰ùwW/¦|øy¬ëQÑüq⻋Í2î ãku«NïLVŽòÞ1_+‹I#[‰|›”A$R‰_sW°\ü.Ó—@¾Ò4Ë×´ºžîÖúÎò{Xg‚ÒâÝ‘‘Ú#–&*Û”°'y9ãšµø{wš¦µâÏC=ƒxwÄxt-Må!Ô$[i¦K„¹™–Pb"ªgS‘Ž~n,~CŒÁå™^S“Æ<Ó«*Þõ)JS”Ûö•ä–’ÚIÝê¬ÎéJŽ.Jõñ¸£ &’J)(Ç•u[«yœ¯ì­ii~—#Ǻüöé¬Ë¨î-­å¼KIm.¢xVéÙœÁplmïìmõÖÂI6Œù%”†¸pÎŽÙA }Ø# —²×Ãû›‹Ò|U¬[é7pi‘ÛÙY]ivrÚ]ؽëÉäÝÅ•-Ù/!-h…StÈÙeŒÇõ4kÑÄS\=XÔƒÚQjKïZ„é¾YÅÅ®XúÒŠæü/¤i~Ð4_ é׆kMO´°³k›ˆ¤¹’@±³ŒätÀÆ1ŠèÁ¤  ‚ìA©'žø‹þB’ÿ×8ô_9kÚ}¾«ãßiWP5Í®¥yãm>æÙe05ŽDžõdˆIÿ,Ë+•ßÛ9í_Fø‹þB’ÿ×8ô^ 7ü•OØ{ÅúŽÞÖÒ¬ü‹Ž‰ôÐùSÂÞ2ø›añ/Mð—Æïj:ƒg×u Ï y×þ|PÜøvÀëvVv·6êÐëû±i§&3 /Ôâ¯ÙòØ6¡wá½ ÂëNÒí5 ·#Qµ±ûU¾•‰c´ffŽêñm6FX«¬Àp¤×¥¯ÂÏÂ[oãyô»‹ÿX}»û*ãUÖ5ZÏE{ÐÂñôÛˉ-t÷˜3h"BC0ƒ¸|àÖòƒxKÃ, š+ˆAÐt£äÜE†)S1|®‘ªÆ¬0B€ €1^¾cˆÁâjPž°ü´ãÆ)¨¹¦ýä¥9½cÊå«MÙ\ò2¬.;OK–&õ%*r“‹œiµFN0§%ÌÕ£¤ZWv?x6³Ž xfôè/mtôAÒ£K [Ì‹¸mÕbæÉó0?04mò ¾G‘êþOb÷ºž—cqi`R(Å߂望»v´ÑÚΚԗžÔmìš >Må³µßuèç²Ô-Ó]ŽvW¿µ¹ðMýü>}¥Œ×BâìÍjbóa°µóIvܰ4}‰ÚÀžw‚Gðo…í -]¼=¤3ÛIb"aÌmj#R¸* (À« àïÇ!•<-áÄ”ÁöS*èzbÈmvI’XEŸ/dҦΘ•Æ0Ç&Á±ÅxÀŸ ¦ð括h^Ó4ûMZ+_ÚÅ«iqͪÃ-̧R¦{£,ªë4¾j®òªBíÀUÇ£¦‘¤År/#Òôèïf¸[¤²¶K‘pÂáZQ(]ÁÈ»º³’.fç÷›6–v–ÐÙØÚÛÙYÛ®È-m ŠÚÚÉ;cŠ0IàÖ¬Py·Œ.´[-)µý&=cNmsßd’ÚÎí"¾»Ö,m,nŒw,©ˆ.§·Ÿp˯•¹A`òXsÄ<‘ö”g"MÛ´ü%ã/…^ ×ôhô?†ZꉨZÅczš'†a¾Ó¥î4é.cKçùvÓisÃ$±† ¸”ew{„¾ðT÷Ý\øO÷wÜ\]´×š=…Û¥ÄöÐYÜ4FhÛÉó ¶‚7Xö‡å$“$^ ðm½Ý­ôðÄÖ2E-•äZ•Ýœ±Æ±FðJ±‰–4DVRTP8P'į„ÿØ¿ÚiðÚFÓâñc[Þïð¶•®Ÿ ƒûIu«ÉðaŠY#‘evë26væ9~3ü8Ðô [†Ú¬–š†±"hÚv£ 6 -JÞ7†[g‘ßw,h!àí¯¡¿áð¦ÐŸðŒø{jÞh…þÅÓvCÌ3}¤+‰¼Æi<ß½¹‹g'5fÛÃÚ•¼Vvziifmm´Ë(-á‹Î[‚‰ U_9] ½CuÑ·mò0üâmÅþ‹_Ð4Ë­#M»Ôõ裴¼±‡N¹yíµ+»Yîd·Œ†ya’ãæÄ„L …rÀv•0Al¬–ðÅ<³Në i¼ò»I,Œ]Ý™Ù,ÌIÉ5-QE3ßðV¯ù:‹/û%~ÿÒín¿1+ôïþ Õÿ'Qeÿd¯Â?ú]­×æ%R¿³×ü[ið'àý´·—  üIö 1¶Fše°Q–„“€:’Mzv™ñÆ{µ?øœôÕ.?æ¥r/úa^ð þH‡ÂOû'~ÿÓm½zF™÷µ?û \èPuiñÆB÷T?ÛùöÃþAúWAmòÃÜÒÅñÆÚ·Ÿñ9é§éŸóÒ¿çµÿý0®"Óþ?5Oúø·ÿÒhh‹þB·ŸöÓ?ôuývgâ?Œÿ¶“þ'?ó —þaÚWü÷þ˜V§ü,oÿÐgÿ)ÚWÿ¯4?òOûËÿ£ã­JíÿácxÏþƒ?ùNÒ¿øÅð±¼gÿAŸü§i_üb¸Š(·ÿ…ã?ú ÿå;JÿãÂÆñŸýò¥ñŠâ( ßþ7Œÿè3ÿ”í+ÿŒQÿ ÆôÿÊv•ÿÆ+ˆ¢€;øXÞ3ÿ ÏþS´¯þ1\Ä/ø•¼!¯±¾·ÐFí"é::Jdóâ;·­¸mٜ楮;âü‰ÚïýzÇÿ£¢¯/<ÿ‘&qÿ`õ¿ôÜŽœûæþ¾CÿJG9ÄoOâo <ºÎæ†ëZXñ§éH¾‹©£d,6Tãœã¨æ¾+›ÄšÏö† ûR}ŸÊ•~Ïö;³ôØU•ål•U±–UUbU@OZÿÈÉáŸúüÕ¿ôÑ©WȳÈ[Ã_õÎoý.оKÃd–Cˆ²µñÿÓtG=Ic ’²P_œKðG‹|AuâÝ^Ö{å’7Dñ}å€6VK[™m5x<ÈäSZÂ!ù±nC˜|³$…ÿE<3ãÏØøsA´µÕD6öú>›Q‹ 1¶¢ÛÆY¡,Äõ,Ä’I$’I¯ÌÿÈëâOûüQÿ¢|A_¡ütûéÿú":ýñvò/ø‡âŒ´IþØäÃ?ñ/ÒýÇüðöãÇÇ)oˆþ ”ꙑu8o±ià t;µ'N:WYâùÛ¿öjòqÿ% Áßöñþ™.ë;%-¬nÒTáemä}Eÿ ÷‹?è-ÿ’:oÿ£þïÐ[ÿ$tßþ3\}¡ØÂ}âÏú 䎛ÿÆhÿ„ûÅŸôÿÉ7ÿŒ×EvðŸx³þ‚ßù#¦ÿñš?á>ñgý¿òGMÿã5ÇÑ@‡ü'Þ,ÿ ·þHé¿üføO¼YÿAoü‘ÓøÍqôPaÿ ÷‹?è-ÿ’:oÿ§'ÄFÊé«md`Ê~Á¦09}«¢€=_þ7Œÿè3ÿ”í+ÿŒQÿ ÆôÿÊv•ÿÆ+ˆ¢€;øXÞ3ÿ ÏþS´¯þ1Gü,oÿÐgÿ)ÚWÿ®"ŠíÿácxÏþƒ?ùNÒ¿øÅð±¼gÿAŸü§i_üb¸Š(·ÿ…ã?ú ÿå;JÿãÂÆñŸýò¥ñŠâ( ßþ7Œÿè3ÿ”í+ÿŒQÿ ÆôÿÊv•ÿÆ+ˆ¢€;øXÞ3ÿ ÏþS´¯þ1Gü,oÿÐgÿ)ÚWÿ®"ŠíÿácxÏþƒ?ùNÒ¿øÅð±¼gÿAŸü§i_üb¸Š(·ÿ…ã?ú ÿå;JÿãÂÆñŸýò¥ñŠâ( ßþ7Œÿè3ÿ”í+ÿŒQÿ ÆôÿÊv•ÿÆ+ˆ¢€;øXÞ3ÿ ÏþS´¯þ1Gü,oÿÐgÿ)ÚWÿ®"ŠíÿácxÏþƒ?ùNÒ¿øÅð±¼gÿAŸü§i_üb¸Š(ðÏþ g¯jÚ¿ígw¨Ýý¢à|7ðÄ^g‘mîÖ÷W*6ÄŠ¼dóŒ×çŸÚ§ÿžŸøê…}éÿ!ÿ“…³ÿ²wá¯ý,Õ«à:ÿÙlibstruts1.2-java-1.2.9/doc/images/asf_logo_wide.gif0000644000175000017500000001335210404045216022766 0ustar arnaudarnaud00000000000000GIF89a3ÕììëOZô1DDD±ŸGZ }óÜ\ä·RvwwÇF‘h7Þ8ôN>® Q´*ààà­jhðxFk ?ôôô‰ 2™‚<ËÌÌ{ l— ^°¥~»»»ø%8ˆˆˆkM%5A°.0̤©u€…Ž.*œ©®²ˆyªªª™™™‘7W‰œ¦Ì"+´ÃÉÍŶ†•×ÖѲM9£&Áu&efgŸ³½SVXÝË˼°šŽ•333ÅÖÛ½šîÔØÃ)ÿÿÿ!ù,3ÿÀŸpH,ȤrÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿àðï$.›Ïè´zÍn»ßðçE¯Ûïø¼~ÏÏçR+?&$}ˆ‰Š‹ŒŽe>>3N.-&?)$t ¡¢£¤¥h’>M&+‡-' 8‡C!;?# º<¥ÃÄÄ'¦QÂÆËBÍ­ÏÔNÑ„^Å•b'ª«ØI'48?8"œÐ# 2ð%;;۩ߪÊü\Lt8p¿UjPÍHF`F‡ WN豂3NKtP™—oË›¨*GH#ZÐ@‡#…ˆŠ(¸k×£x `ôÀD„ÿGÈä$ Y‚·TµñNÇS5úõë@å ÈTQµXDªÔ“}žN‰¤ÊÈÕ3 Ìè'€Œ éZ$˜A#Ý(¨ÐF;=ÀÐƃÂ*^”Xl/Ù­Bøm* Sä¡>L6!û ²Sg.,õŠpÊÒ¢@Ì*É3פÏr=ö›YU`Å€ š­}j´‘€„28˜w‚^ÛŒS† 4xaG>‰X%hí*’á’˜ÿ&@Ø2£ÿ d]: gú°j}M$6îEïÙgiyÃV ÓP°B -¤0ƒƒd AÌ9PA^{ý•Ó_PÇÿ“ :1À ä’GxCH†”$\ÀâL4£©’Þ×àØQMÁ¸A 0D@–¡P25tÎS¨ðˆ*5 ÙA~H˜ÐYHäÑì˜Ì 'ä÷cIÄì6™*34DD£Ïjú¤D¡ 4l¥”T&qå]2&•w @1DÜyÂB5¸eD“ D›œœ ô8&nÄQèY.”Œ’C¤ ôø.Ð÷I¤%Ü -0øƒ„R¨œ…î%“;; Ø`„Á`O6Øbd’xÊ"? M´%ú ÀR3ŠçO5:úgR p# –mGÜöSÿäå†ë-V­ ª£Dån¤mêU˜MB„½>x¶T&à²u#HgÌ®Wm9ñ'õ2ü®làâÛš«™1^?ÓbüÍQCø'„l…Ô( Àm[£¼FŽ$± .Ô œp·bð¹fPÁ…V W6Iâ`~ËÁÜpˮ胳>l*$ '0ª´§­>lT0[úô+•GƒM„ØR±\„U 1Úý8›¾R ”5¨¯êy÷·þágñ*ÂýÚ·µ–‚«â-Ŏ̵geÓ±‰ ÛBTëUÛDžuŸEĪiEm@€Ìå`@6càú*Wáοæôÿ€†;€ h·]cl4YXu›J@ð oßxËv;~“í·mcƒÊà)~Sƒ  SÚx9`\äA9ÀzZ'á¢WT߈þC&¸:Më<0éžL4Ë a'ì&f±ÀÈ º¬Î¯›Ð„`G¡çüì9}ÑPa°“tH/øN„׬ B„2I@Û”@>!ô«[ËØ–>$ôk+1 xÈ–µi¬ÏpBXŠ>–’›"xÿŒ=–@óˆ°”ªUÌŽûá£â"ˆÀ¬ç]E8ãQ“ªÈQ-T×”¡ÇA¡<ÔªÈB… `OB»¬Õ¹á¡Üd*3Y‘Q–Qs•8ˆÜø°&¤Å£dKQ ÐîŽu¯Ãìv¥€ =ÇgµóІ„‚83ݨJâÁ” KÂR¶b•è]+B¥æ´MUJ3@å¼`fŠ‘0O”^!Ãÿʘ@ªÒôqÍ(³EÖ€ñýÊÏ8ƒ”ÎN¾‹3&)†"—0ÉBì-{’°çå"ùÇN†DsCèWÕ8-Cý(8bKTãXéÅ@^R–A§IŸT˜Lÿø@fªº¨ÎuÀ$b–»]!S/0̆n²;øÎ0* ‘ñp¨ª.4i€&ªÉ1¼ŽS][ó9ÃÇmfWíÚT+ZÑ!pU¤D¹`þ€JúàŸ™ «gH–@Ê1ÁS;ÊXÇ8 Zt%Y€F´r’¤TËYtV)ì†7w”DLUçË^`8¢‡¸+ ýe|ùKP±£ínÐ@ Xðˆú ‰=­Ï_ 9¶tf5Œ“Ã*×àè„Jiq*{õkY…ÐØ“Jí: INð?ÈÔïdM¬Vwëš#Ô·E¬ËÚWN vR½aOH;ÒÙÒu±[]ÿiê%‚œCf9¸ÖK SÖÔ‡6u0«_Íî´0øÕOTxÔd0¼k€$ÐðŽ;%HV"Âú lÈ­> 83EÜ@v1 Œõ0™Ø§$@t* .'‡«Þáèù½f0JZjeÅ¥+ùH\bIª7¶Õ.EGÚÝT~÷dc,‰eÊÊⳜWÄH6ë—+ȬVÎA”´|-ÒÄ”¦•Å€}õ Ì!>ç*Q‡š&ª@Áâ Fàh@øÈPé•]•h‹= .U™g—4¹¨;uFÑDå–X\\ÿ•$­c f$úỘ®¦ÂuÿÉ« }H:“Žâîv§Qìv²HL.¯t½Q W$Ä.n‚ D ‚8Hf3Ù Ze€˜^U¦•3e¹ßÎÓBAs‡^rÃK#xÁ‚ygí8ó PÚ  4¬`ÌÈiºº%Ä©±Ó5éRj6FÙÓî\ ʲ«Gô!C0aÿ šFÞRZDÀ°$²¥pwÂ{¡³…ä*ÄÔoçZâ)¸;_ÕŠ €òo!©(ú°±{cÏÒ~Ug8AÞU¿µüÐR¾¸6P ^Ï`½fÐ ºA!×ûól±){_Êq9™@€e’æ´µë |çÄÁ–½ó¶¶\ÿ‚4`‘”%ô~‹9TÂÏUyý¤ÅnDK•=IZ{$à¹?YeHd'%©+ÊGwÀQð,<Ãav®”®u@ÜÁ:w$Œ:¶«Òi¶Y"¯Z¸ÃØ–NÃÑ$üUÅËÖY4.è¡æø®n\`œ§×$H@ pð”B˜ýù±‘½ìecvBÌfÎsf÷— <@/ 8 ie@Ôjû…‰sövœíì@Â`° •0 ƺ»óó]és%×ö˜?—^©#äIã™ñg-=,þš;5çƒmhŽžáÿ´#Í5õÿMõ/–CéADayC–rî§oC@€ÖR^wqáåÓÃQÿn'sHàP °+@u±Çç3·—¬³:@G:_f_«£_àCb¶S²cfí€fR4„Z4aƒ8n&O7gÍa¬Õ_„ ²4[D•f&³„¸ö}ß’8²&Àxl±sc2¬]²–i…U÷##N£Acû—(Vhh]1eâá…ª‚~  jÈwõS’Km3\îÖ‡#³„¨7hˆ80³ÀDZ)@%ÐÌç+1˜b†?)¨‚6¥::U˜5?U! ƒá3¢u;Íw`ð`|Ò1†Ú!àf%pgoðñwÿ Ó‹7¢>–2þЋÄ(Ÿ‚õwpÈYB&ðŒQŒZpŒQŒWÐŒ'ðŒ¨p?]Ð%¾¸ß&M ŽÉÈݰ?f°- ™ò æøðÀ|3ñ3ÊA‚8US'èe)XSý傦X™¥3Å×+°¨!¨xƒÈ—|ó#’m ¶`#0€°Thp[üñ‘ ’q@$I’$@îh:` @÷8ƒK§dfYð9Y8e_G|È0¸FÄtÑiö36±ƒ×á;`L ð`P.ð eà‘"y•X™•e @8B B‘Ô‘CULÀgYÿ?4SÀ5ôõeÅ–t.ˆE©S¦ˆ!ÎÁtÏæ+CY`Ø!¬ÓSi‹N”|0ða`•Z™˜Š¹˜Rp•@3à•?Pvƒ!íP1ö¥‚*Xl5¹–\óeýXS»Â_9ó“E)Š™µb;Äq‰3#à; Ù|2 ^ƾù›À™IЛJðJ`%}?Ó?)Wÿb(À2Të?[RÀ/D‘ˆÿÈà³¥÷$ôV• öÒHÇš.LK-˜–S.`·G´°Áè³oU@[Rû ,• €!Ú¥ÔQÅ—ŠÇ$¹Gô­Êa¢åz¹*X¦$[²&«ªëº30p3B¤§Ä‹ë«8«º½ŠP‰¤k¨O ˜ Ëj:öS]©0$w#dB³äx…j5XË„>`QaZv5`O.bOVò·ÉûIÕ PÇÛ46 倴û©0¸ßÒ(Ý_O¢CÜ#­ÖõV&¼ð0Ý£CSнñ+h]1B€¾?RJ 3¯ÑV.p%°Ú½ó¥¢E,¬x”²ø+ÿK÷SÈ” ®y‰¯óª¾ç:6u®k iвÆw;¨û§©Ë¯`Â9Û«Gê;{¨õwIÙË,’„¬>P5Êã½Ëiö‹%×{i«Gy;2ª— ð[­À-HðÃÖ"zËáó¾ÛVL`%uVÛ:5¼€ÅÛ&î „cbîä"9œphÅf5¼xóÅ¥ÐV·ÔP± ÖÒ¸yú2€²(Z3˜™ÇT|zÁ+>ušd–Y°Ê£°Áž+a%Pgú¯@³~Z€Úº°'| àZ«D´t·J;ÃgƒÆNMð’°c¤ P(|S©.rEA§c„¬Üí ÿm (ô“¦<°T|Ñ(UÅGè' ¹á ìä°þ61 ‰˜¶g bª\ É~úD5q Á2uÓG4ÕV|CYmÇ”¥è±º¢ ú“‡ÜCDô™7³”\g $±Ï¬¯”Œ‹ëºPé§p Ê#Ê]AÞ¡ÐÕøÂIµþfH€¼HœÄ™R €B›=­GqÍJZÆ-¿¼JÊlPXsQÌ!ÓÄÒL^¹Q62­-vdÊÎü}HâË»qC¨/°=Б°uIœyÌfO‡î0"ÁÃ÷3½âÎùªúõ¦H§_ÉÿGjŽÜÈ @h½É •ÐÉcûÉ)MÊÈ|6ÑÌ5pÌâ´rO5â"csq× !¶.RØ}½-¸Þà(= Ò·Å—Ä9ÎRGY|WÉ Ó+âÂúðØB¬MåÙ?à"OÊï¸,0¨ Ð’*PÉ Ÿ]ÔǙdz-‹ƲŸŠ8®3ùù®9Á_wù†ü®¢(D#pÂGÚº™ÐÉ@—\gQ¹VÐs]×ÚíBèT‡­ A#©WpK-:äŠGÒE¡5QÞ¥Ò'Øý¾D Å£\ÙÎKÒ1MÓÄ›ÃE }â"E¢GèÌ5àrˆcÊá͘¢ÓR;°ÿHº •Ü’•IÛ9Q"Ú|OGÕáꊽ-®BÄÛÁ=!¡Õu©ŠÉÇ3ʱ¾šÉ®Ë¯9K³Z³4{ÐUßGà Tah׆öV­ñ…ŦŒøÊêqÙ•ä’P å¢×ó­äÇõ¾ud%T„²¥-)­9­p&u `iµÖ•Ùu”nÑ·u” ê—!ä.WßG m£EþëÃü•%ÉÆ'ÆÆ€ €m”|/p\z4ÁB u̧ۺS`·cÎñ âg²x¹Šž±Ýy|z‘Ü/ãÚÜ’Ì«`n7.×M›rGª×€D±ËYÎGÈ*²ë áPàÿK x\âynëctÍl~ªÐÑ)IsNm£ÙqeJùmßFp>Êêôñ×Ǫ}Û¦ƒÆ´®¡mõí'ÖR©© Zúf}1 °` €›tœ|gF”gféÈtºÍ²ÖF¼ýûºº2Ý*ìÖo-™h'pØTÇz(»Ì‘@ ÁþM°O'†êÝß ZÐT²›<ŸÔlGPîíß~¸÷M%`¡;Nä`;¡˜œÔDÕÎÄ`rŒá] ×QÇ4ѸÓ7ƒ;Ï2ÀT`ÓgðÜ8É1ngÀiÑñwàÌO°Ø}Ýð"Y° Û0R.¹A© {ÿ^y¸-Uö'€nî˜ìN´ðo,O—m Ú;I, ¡ÞY¢>Ø!ØVó#€ïó°[úzgeÏTk]œZï¬4ç7öDpÚ|nömЄò%P#,=˜Líƒ5ñöúj#0 àL M.ÐRmuµ¿àL%0À¸ïù¤°¨š/M:üß2 Æ%I’AMöeNôö0‹OÖÇç÷P¬rgPû%_òáîç¶ÏøÉþèŸþ[Àù}Þþ¶õÚ/þoþIP’êÿøŸÿW`ÿ¡ÊX4‘Iå’Ùt>¡Qé”Zµ^±Yí–Ûõ:ƒ;libstruts1.2-java-1.2.9/doc/images/jakarta-logo.gif0000644000175000017500000002061010404045174022536 0ustar arnaudarnaud00000000000000GIF89aù0ç:5:[Q,‡{Dß:³«N¿JñÉ[£%·.•#Ñ;Td-ð×\‡*÷T@™5Mðá]~ &æSI÷|J†2Em¡/èàbîîî¶V:NÈ‘v_ "v8:\I’ˆI®¦bK>–T=çÎbÐEöòŠ[]_¶ivŠ•N &‘hk<5¸±[ÚÙÙ:Jf.Y¸xP.--c*]î3t2¡–YbF2}FöööÝBvh7˜Œf= Sö£Q¢,F¶®jÈĈÜ,Tˤ„îæj¢‚IZxY;>¥´ºfed¥:o{ƒÁ=Y6ÊEîÒfúúúL#4Rm>>>c&`Ú$Ako“pQ§šeÝ9Xv6S{oFááà/ IÎvЇGC7$2 DlùhF 08¤*["4” *ʦ¦ÒÒв²°h6M¯o^’~^¼)Qž%DŽ-Oª Rö›WÌixì<Ž":è5R4g‡ a–¤¬TTUºº†•S„ÚÊj––•€[_MXIJJöHAn0ééè¡D3µÄÈþþþi"^®¢jƒ?qË´˜vP‚`lpìxJÎʘb 2‰œ¦‚*Q¥H” \Ö>*0’&R°W~ 2Í(Vö1¹›‘õ4>´®n.UuDvljh¼SQ5W{(9ï»ZK)PrSoèiMvvvò>àÍ˦¦¥³AKN 6’fV¶Œxòòòî~Ftt¯gb0"5h7ie,<‡HgÎ~††|N| f~>F”T[$%a:dÄ»¼¶¶Š·|y€€º¤”ÐÌÆ†1p a` N{c_ô$>u¢`…††n[Arrr¬®¯?TiDvhú‹KïµTX"b AP&&&μ}ù3žžê)Ju*UY8e¾J„$`!þ+Thanks to Brian.Ewins@i-documentsystems.com,ù0þ H° Áå4\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠôè…ÍÈ“(Sª\ɲ¥Ë—0c†œá¥¢—‰^¤xL¦ÏŸ@ƒ J´¨LCePô”¨¤'"ikñ1Ó‹…TOª‹ÆuiVƒÇ¸FS÷µ,A b£a5›Ò‹KâElR.Qº=kí¨¡¾VjîyÑH >¶«(^¼8QÑ@–cìÊècº¥dر¡ŠÝ0¨ÂRÃM/³@Žê¬˜O4“'_ˆPS¤¡7S›%3ŸÊ _¨P²&ŠgJö&²U @Œ5ê©Ñ©1@øð½X‹xàìïRþù]ˆeÑšQ†þŽ'Åõ£YŽBò2{ÑÀCz™í>¤ýôl€oêHÁÐ]å ¢Ä#*çÉP³CsÈàa!¡pÓ 7ÜÒŠWÝI!☉hàc‘é¤CA/Äó‚ÉöÝgDý—|ßÕ6|¤­4fvdß}˜‘’!£D“$wÙØ]<½a&@1º´F<“ìÍ#{4ˆ@ùÔ…PœC—\’F…Ôa u0AŒ,E胈_ýHÐcU "^ (Zý8[]5Ò‡’!é4Š#¡ñÈR4Šzd_ÝtSŽ ¢UÙÝž•v·Š¢Í ñÁÇ$“ðÑ¥4þ‰¬áÌpØp@þ@Å `áWàQidÃ+ô|‚9àüUVztÙ(Ï`¶D":”À‹®@D÷™gÐ,äêfˆ4ÝÄ#A³\éJ7ÒăêAƒn:k¬ëä ®¸¢£A%M9鬑³ýÛn<ïÆ;¯@’T.¹éÐ"º®¤ó°@W<‹ð!Z1»"_Ǥó.Ç0É}Uˆ(P9³×±ÄëŽÀ«Hóo"R[².'ðÀ3dÃݤS›Ì0rÉw²¶˜€‚rR ‡ (LÂe"­XbIöÌf=ÈQf—ÜÑ\dƒGuܸÉÌþ†Ü0ã‰\FQ ¨ã%B"iêp­†`öóAñˆ¦Íl§3›"óG‘g"† 9²@ÿy1¹hBœÜáÇyDÒÌ+ Žttƒ…=bƒÒ·­ì²—¿þÍÉ 'š2¬¤ŠÆ1†”MÅ®ŒFÄ40½¨  M€£0‡q a½èE)̦¿P$cš`ÄÎAÒ Àá—hÎ%žêàáá  °9}N>Á“ÖQÁD„æ[«ë¤AB¨ lÑp cÔè9HÙe6a¡<ņ2àRÏz”@PXñP4^¡htäÔ1DR€ÐÜ ƒ :ÊUó;KXB Õ ™½Ð ‰[¡C˜ˆ­!ш=ƒÅ\áDÌø®‹õ”ÞQ¹Vž‚Õ¨Õ[—žÅÿØ¡y X¨>Ì@€ˆ#¨„~Œ£É…ðh ]° µi8þ€l ÿ銂ôÕž€V0C$G8Žeã¦'™¤Nu) ¨ Å膟ŠFp‡…Å ˆY²·jc4PãD¸åá²}³Ù ¹9̬â`j5È«EXÊR4ÊYÈ,ë :uwÝ+ˆ ÁUjŽS}\áƒ)wˆNÌ– íÍé@¤†™ƒ6±ë…°hÞ+Ù¸ìdNÂ,½VAáÙ`ÒpÅhWÌyà"m6z! ~¤müØ#Û@R”é PduaÕ 6¸‡*È LÄB N I³ÓžbkÖkóþ$¼zK»P­Øl¼âWˆN4Égþ‰\Å@.æ\92LÚ¤ÌU0¥h`Ÿifw\lãß*a‚Ðõ ^°%‘öŠÄ¬å¨ñ² R-ÌU±cai8ÑLšÍq»Qâ~Î`óà@8ð jø`ãÀB°Œ`°Öΰ%ô7‡9|@¶P8@ Sƒ¼ÂWG&‡² ì­oàÈ ¹„:TÊ•LÍvÈv1™½‘sÂQCBEü&¢Îr†¯ìB=öœ•H¨,HUKØßËÀ¹à¢Ç]ÂA,¾ìbAÄÍíz¢»|T'¿£'ê³Ä¥Äâ>`Às`ޏ8.2ŠGFô‚µg›ÕþΠ Røªw@išLq7V¼ãw«A x¢­ˆ²YôM$D=ÍMœ\¼<šn¤ÌÞ_¹Ó{îÙð!IPWÒX"‚ØÚ½ ®8úžë+BòZi6BD<ªNh:TF#Ë: t6F1ƒpÅÆžˆUˆæZ¶ ³¦eWgD=êd±O¼•ŽvQ»¢{pÅ#š°Y!,!ÚÐs禱TØàÀP ãf‚Ö§G™p‡ÇaþcyuÀ‰A~€2…À!îñŠW8¡jhµ‹²åF#UïMÏôTgDlÃüæ½;N#þÈóS|®—AT,úÀþéBæ×{ëÁ·˜Eã 2–»wóÏà3ƒ‚ðŸv¾/ÉØÝÒ osÃW÷Œ%¨à¡(Ѓ0†0 y ’·û0«¦j‡ã ßpZÉ Ô`ÇÁ0Âc{t¡²Çv ` ¬€,¹p—PÕ‘d2 ‹° ÆÐ 9W€DQ`%TÛ–26Õ7 5cî±tæ–Tô^ôï—DÁ‡kQg|FN91Vnݶ9™v…mwv˜Z/|æ—svt×]à'%æsæTôAñÇ÷8µab¸/° ¬òªòÐ;a Xà4þ˜ gep óðýPq7߉H@ ãPò #W¹ÀQp)… +À.øð`d5` $  ` að D,è S¿¹w ê`ƒååéc=&4‡¢mzD¨Ô{]5Ø#à^!Ðs^\ˆ€3F¯BjÝ wûõ„Ô„Œa…mïÆiuwT,Ä„mµn@$Tß&0"ˆåIGxäØfO£CŒ\VpàHý€Gö` Ê€GzÀD6PþGVmÀ )Ui`Ë€@vp´Çµx¾ PÖ ɇD¸Aa(VõsœSºÁY ¥0ò”¢‘M%&n¦¢3U0XjíV)X©•àÁu=‚Œí—ÄÑ :µQ†£ÔOU 1óÅYfw|Åt—l·BÑ@Oâ$ýQ–U@Eéq|Ó— ‡˜³Q}y†la+ñ ®¢(Ð%5¡Ð ³b ŒÐ Í@ òÓ yB €¬Vqщ_à§SP½ gÀ6õ€»Æ‚„¦àe6ð“ÜÃvd°ŠN€7}sáþP‹°‚¶·»Ð£Dñƒq|81F÷Ñ÷˜À‡Xî–pú§…Í':°•ßjDtwëÒž³¡o㑘씳 yúö}kf ŠFÀG˜Vè÷8ÞètCsE®3Ú<IFÕ ^`JP  2 **npùp¤Prà –àY Ô€ ûР ó  8Z—X >ÀHP ‚¼– ¯Åbr&à |tæ`Ôaœxp9`.Xrà ¬@p‚÷ ddPúÐ#‘>œyau1FlÀBP9`w ãUh@Ó *{„þ[¨]gVÏà)qÉÔ‹ú¸B|jo>5¡@CO a,T•qTzY³@D=R`3 Ij…¹‡ù;‚™Œñ†!épfð ÁdÅ g( #Ÿ ˜˜õV¡¢“ð&: 4’xpÓ L¤0sÀ,€£µ€ y0>Ó00Ѐã hkfã ÁP Éà’²»6+À ‚¹àceò 6ŠGÆÈ'$çЮü°}ó ²'YžP‘ s,±]³ M)·±F±_ª¨Á87a ûªDS2éÇ8š~ñ° R2³3;†2c·þ}šmvš±ç¦IëI&;²l±k€²{Ô5P@à?cpõ  ¢àš4P Õ Š0¥@$e°Óµ¬6 ÕÀq¤…S6s`cÀZÙ H—@š [p¶’&p#ï   õ@RàrPx÷ Sd@@c°¸á=¸Žû¸Qi˜A±;X2Ä!­PD[™`!p$Œ­VµÔµH€ ²é£˜¡€X‹É ø ŒÀQTP µÐ ü0¤˜ b« ›pº¢+ p¾`lÙÂÒ Ì@W@èþP‹¹` –ðÈ Y@×° /ð@)Ѹ•{¾èk93ÀYs‰¾("ÇàÇ0´/ˆ¥50xÐŒà Îð´ÕàP[ ¢À ˜ˆœ¥pj>0 X°Zz —84p²ÅfS‘,Ðk|t=¦+¦  éʉ'•Rc w³!Ÿð›½ÀQm mÚ°G–ÄP¾¥ê¾8Üpêù|9¼Ï"¶`qPgðÕqG†ÿàš ¨ÀÀ:ú‘˜àºêƒ ¨€ ºicÕ r  e…à :†Œ°Z–Pº°¶erâ‚[@qsôq¹{hà¹edL@]þa¾=<ÈŸ¢žBP„ŒÄ@¬ !pP¯à‚z@ þðPÅ:*ÅÿÀ‚ ó`ÀÐh¬‹µ¬… ²[ /Ö›æ  úc¨ð´0°½l“ p RÞ0 “8ã` và[¹Àº’Räpnà5øÃ5DC¹‰Í_1 2 ÍÒ씇€ôpÕA p¢œ`µ`6k|‘¢°»º[  µþ;Õ€ ó0 ‰DÚàf¯6 IZVð<4ð€ò  (i\à»p› ¼ ‰` p2!¼Œp¸@ Ö` ûÐjð¦Ú4%ŠÈ×<Ò$]Òq dþ÷ Í.ç‚™°ÕàÀõÐkü­–ÀÍpÎP‹ ® ®Ù ,4 €¡ŒDÀp hÓ Õ@GÁy¬¢c+Üì?6ГXq>` Äö›¬ÕcÀ Ÿ ,3• ÷ð5À Ö Äpíp Q '€°&×z½×E0„pôÀ àDÀ ,P™`çÉsà ¸v»6êZzÀæ0ö€É\[ ó`óУ›æ-J} Zûóy² ·;rJk T’à¡°¯€ œ¹°7|ó[°Ñ[¾ $À?ð×p ] CC Ò|þ=ÝÔmÒ†° ´Pù  „à ÷ðàù[a2£õ0Áv~ÀÙö& Π] 0 Ó,@Êpˆû VÌJjf@Xà»fi@ !9‰æðcS‰ã0i°H¦Pzô$LVJÙ7p•!Ý'QŽz[²*è8T/¾ê`$ Ñ˜#aÍî‹âîÛ8)@ Y¸Œ°d‘Ü cPà68ÍqcP¤ÀÞ*έ®•ß6 ,PåëlŠ  Ø fðß÷!¥`X; ¯6;6H‰¸°Èvd‚ÀÍk&‡pÊR‹þá âP7•`ë`= A`k@žQù¥t~Vœ Ú€°U€\ñõ›.–sÍŽî¾lÐé(a ìP±P~Ps°Õq þ`—p9@@ ¯9@lO¾´T>~°´šcö XP Õ  Ðßµ0@1@· ÔG]ÚÞ2¹0¥Ø0  (Õ Љ7F ¹`Ø¿)€â è°FÀ 7à < ³ê{é3é$1•*ð#Ñ 6Ÿ.Íú~¾BÀÌ*q  à @ô@ v !LÞ '5Š&ð@ð‚ðJ ›þü°cçM ÿ€kŠÐksÀÓÕº`£¸€ Iêf ðŒ bp o±ª¼£ Øž 90Ê0xDwpÂÕ±Gp À• ë°)ÐQÀ •Ðîëpk)ép Rãs¡šÉÁôhÙ :@3Àð<÷ á x9y¿:À2tBK ÅДo4Å0U€t-‘á«À€"¯aÝ€}bö‘£ ø«@¹^ ³ A(ú‰¿ø¿UŠ*¦:öR“…`á'so(âìÆ°Ïð9RPe ® õG„4‹À@„€@þps3ÄÕ¬Íñ&Õ±·Í1³^z& š +¡À¶9 ´ª¹å,ð¸ ?\Ð< xôÓ ›0€ V@¨€ Ñ~  y™)S@Aî ²'8xœÇ£„„8… „¸ Tª´H /‰<~R$È*Bø¬I€È5BF¥‹'¤BÒ¥3R!Ý^Sd7³Fz¬òâh¢Aé–z”’ŽO´‘(Ò½XƒbÆÈnT¡4Rš´c/\¹s”€hB=êàfGR^¾8VÅÓ‘«Ø¬y1*ÀÈtf\4X䨲gÝ‚¤-Þšr«D–äó¢°º‘êf¼þЯ̾!©œ/ÀJ‘F¹Œw¹ àrr¦[RZ÷î£^NÑqC‚$FjÔȆî½pðàyÇ„«ÏñdsžÊ¥KÎ3‘¦@& @isà@=Ršø±ç£Y³qh,9K–‡Ã~0šYP™<¾á€š/QfTæÙgLn1˜2 °Â2„pgàÁ#@ ‹v@ñ."‡\ám)8óH°.‹«*ŽÚÉ(¤, I CÒ‘i$R$)ˆÔ­›Qø2¤¨¡–Œ†Ýfè&-j)tk²È9R©ÒÑæ#)ÊÀò(*EbÌéÅQþ ¤!uLDy‚ENóÒ#ž9Š:¹ò(>Òü²Ñ¥|\C˜7®ùá‡Åœ36G¥–^zQ†zQ*¹šº€fÛ1ìâˆ.Ä a‘­ú_ƒ?ª‚Q¨ºþ£ŠºÅE—…5‰½¸ ¿ÎÒ`(ž¶:ê¬%؈§'+?þ7é… 6Î")ˆ†6ŸÚàh¨ÿÈ{ðŘ䥂ODó4€hŒ¢€÷ãþ&(‚Y~$ñ¢Œ—ˆý΂K9†8@CFp@ ôVƒy!àÐÛª:Ñ ¸ÕàÈ0Ž& 7~8q¨Ž©:Nàä¸Äs®°‰ñ4à§ëE3`xîРzÀÎC,tËɰÁvEŽÿØÃ8¨ˆ½@t„DÁ#BÀ) á€ÜÀƒ†Bð»âÕo$ òpd>C}éHíKD󔉩 AÊÑP<6ƒÜ© Ò«B=²“™$€˜"-É— LQ Í>±=’x’üJ9~F0&¬Lüê’™@šàDÕØ—^З#yÁ "þ‰7°ª<¨ÄM±B ŒpÇŽƒŽ;0C¡¸T €p½­ÐDhÕŒS&\¡UÊ`%œ•.êÌÅÆamn68ÇxLð„9Ô£¦àEP¸ ë@ XG±¯­P”u©‚4F"…npo|¸¼Y]2’¼,åà’ ¦<d/TÙ *wâRàÉtcÚ¤G8É›60I S(v$FÍô”"Ä+ÿ‡¥V&¢“#É,ÞÔ#PÔ©-mÔ@" !@m‚e é/Åú|AÂèZ°_ЃÌ0ÅÙ±ƒ* £òŧìþº®0p7M•¬šðg=<`‡nâáõ8@.Æ™œgq Àƒ©Î-î ÁB€Jdà ACê‚!XТÉKD4¡ƒ©’4jR¨-OÓ¡)«Úƒj"^=?% MG4À'½´|V…J[ßÚt)MÚWnÑ !dÏUÈi'§@ÒÀ”c À ¤0 (ÕLÒ¥.P9‹2ŒÂ(^(.ñX™Ó* 'Rx*©z\¸¢»‰˜Å –Ôš[B%|Hw¯’Àv¬6©!z PÁ^Ü!³5„h tó‡@:èñŠþ\ÊgëÄâ`V –m3¸1d˜b;¦è&,Ïñx€Cf9¶p7Sˆ#E@%Bà ð` Èx‘­ò«ŽÂ’6(V¬‚BùMÄNÑ®Ajì·!)ƒvAR†2/¥u‰ ´½'}de©j(ÔQ›R ©GA¡*´écì¥Gž1¡GÚ2K˜4ª\EËwM"ñxP†L[4§‰ …é#-X$¦ÕçIcmITHÊ¡Q ›7î>ñ†]„:±8Bòcz„a8d8DÞj`xL‡䈱[õÃÂÜágÈñ vþ¯HÃs ˆ*H@fñ€LÜ Øri+‰nרuyÔÇ–§5/xÕ‡*Í3t`ƒ·H ¤n¤Ð¾YT¼4:ðx<ª°q¾\<ã“Ôs£Ö{òGi å~ôtH´Qçƒ×üKÁlE$ޱ†n£N‡) Í:ÃBžéo!PBUy¤f™•Õ‘ÅöJ`VŠ¢i{àíii¿‚·K‰ Â&Uq)”SMªÜháŠ+¤ñº:_¸¤xj½Ý…[Et€…»[òzX¯J¤&ù¯Z¢n¼ÉÄѯ#úÉ& µš “øUÆÅ0Oÿ>aQ­°…ªå«ñÆÄ­®}Wé¥Ê i°1ôëËÏ:JúÂË/»¼Y+Pj.å#Ò¬I Þ»Ûº/IÉÔ÷[Ð^i ž–;[ž~€$ 0»«8µÔiÅ+'Cn):Ë«5œ«ÙQôðܯ¥àÈPÙºv]PÙDD8Ac»(7'éw°+»Ö«àN}Pâ†Û÷àVª°wÒ™ã=5¨Eü¥æ•Sšºè”O…·#:A€wó¯)Ë^îA€·0Ô¥c*œâ½"=§ãq‡çsÌD"ÀÛ–¢þ+»ÆEk»îQùIÕ¥ÎPP­òÚ˜dG¹ËXï’1½ ~xH_Õѧ"ú«o)&ñ;ì@€ŸïÈfc\ðÀëä~ÊËU¾ô-«diyÿÑG8R?q$^áG,æ0þIbfQàwEBA;libstruts1.2-java-1.2.9/doc/images/struts.gif0000644000175000017500000001116010404045242021523 0ustar arnaudarnaud00000000000000GIF89aôVÕÿÿÿüüý÷÷øßßàÆÆÇ¬¬­×ØÚÌÎÑJZl2d6f ;k +K$MxSqy¨–§¸¾ÈÒ·¾Åëïó÷ùûÏÐѹº»%>Vúûûžž‚úúøþþýôôôíííååå‘‘‘ÿÿÿ!ù",ôV@ÿÀŽpH,ȤrÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿Fʃ¡(›Ïè´º)@ŸÀxˆDÇÙø|%8Éõã_Š.à.²Qä\K$¨ @sØr¦ü ?¤Œã y"•2²#Tœs s`rV8 ®dE{ÉG::€†ZÉ á`±ÍŒ,£Ø‘%*Ñ ˆÄ?l] ™uq"3,‹ EC&º‡RN(´¸98t ~ðÆŽœ8’+¢ëpŒ£çHÇ:ÚÿñŽxÌ£㔋Äß Éú´ÇBÒ â |… @ˆn'ñú×#É…x @’”|EÔ8¨ ¬ÇnˆëÀðÀ0¾Ž’YÀ(Ké¶IK•é‰:\òà01‰ŒÒ²Ç¤á)€@Ó*­_“:¤£ Œ6T‚5ÙTµœ1vЍò¥€lA»f S„މÄ÷¸éo‚˾\À…€“»xàà®lD¼‰<ÑrlRPQ¶2¦ñs ì¸æyFDžRY@=÷c1€`ZÌ Còô¶'Pd|6ºaˆâFÛd€“hHkþðfF0 ÿjÄЉVã¼PràŸkQPz•"£Aéw²Æ$š8„f$GHºXdŒ[™E¢˜‰­¬Ñy~ˆ€?|e Té>@ MÎÑ»x`mS³›Q J ©z€ª\"ÅUé™!}l —x9€*ICè8`ºOܾIS%eªpd0P©ö3žUxÀ®f?²‰Nxâ ,inb.³¢U/* …A›Pð€ü¥øR0Q&„ ” öé (’´ f3ÈË¢‰—®”¸M¦ÂùŽQ°Nuá fG‹ÃŸŒN*œ`ÌDz¦Ï-¾ä˜sÕ]øL× ‹|ÿ€Àc)KºR Áî'¤h~$k:ÁhÑDÂ[R¬h|X¾IùÊ[þò˜Ï¼æ7ÏùÎ{þóÅàûãAOú8R@÷y5^¶“‡îœ9t¥ý¬$ j_p•²J_BdŸÊÊ‹a¡<Dú}1”i¬;â?o ãCùœZ¾±ÊSDp‚s>’À?ùpÐŽòžÚ—α/ýZyh«*{5…‹w­œHd•Å#GQeçî‰Cþ—£@ @P–Lt~µ 2åï—@`ß×`§¶€P†G Zÿõ¤.áBÑvSÐQLV9›ŽÅÓsšÄIýgJù7ág3KCÙ8Ð:ÂKu5.ÌCJ´@xce†Z;…‹ùfŠ4£`7ýØ33#þ€KE¦ˆxÍ2’#9 ЇvpI£@hxH +´nJCV ` I5$¹“&‰’ÞE,É $Zš€FwòVX #TS‹ï13“iip3¹åHM"\Z”zUKk4D$a°¶)ÿg ÿàf+5V†ã&×uYìC5Žæ 5Ä•ØB<'ù˜èE[ñ—ÕU÷S. 8Xk•O ±ÌÐ}Ç13MgXÅ  v Y€S à9äBwç6ÄqIâABQdiÕ@A’ S§¨™.he"s½EƒOä~]—<4$pb"ärB'ÐZ©‰!œ¡'“«pg÷`û&s’ÅQãÁgcØo™“ì?1œaœu²)ý’ õ|¿1r*•‘t!ÑÂjS#Êb[h!…ƒ7p /&VáÑ^ð i¢)gT7<Á_ˆMØ¥(°6 #Ñ/ÿqÓwkstH çA•  ^ùpbH< JgË•vñbíG¢–ö–(ºŽË… ä„“¬Æ‹ô+¦’•t ކDz%_“\sNpaho‚`g'Ú$j“ne/ú¤&x¤snnál !&‹PŽX~U_§cB(Òc2E¢£u‘”¥€P¥‹<ÔI<drJküå¦I § €è6A•À¥òÕ:Ö éc¤qÉnIðÀc¥ì¥m¹.©1v¥*„È¡r­S{_ócêY¨tBCveyæ95£Ÿ—š© Sz©¯Ê$ŒJ¬jaÿÁ gZ Ø"¦ïCfHzJªšVœŠ¶ãØÆ²j©ajï0hàµH •ÁU¦eá ç‘TÄ`^ʰ"ñ¤·º8sV‹Ì)5ØÚ$Ÿ9 p§Ýz¶®,¶­ïåuGaB!—÷³9^` Ê¢å0i}º¬ÀP˜M¶}¯G@©±P>äš8S«+;*Šxy2adXÆ5°)X6°@JKµ£|âT¹Bª•‹k„é Ãiþù@ïZ¨£±*à† ô© õš¯`³j€³ ;럓prØ)€ç˜¼‰g(Ö§' ¤ô )ék2’+ÿÔЂÔQú,#mv•«°¶§Ö;©Ä9.:(¨‡õ é}Ëe­§Ö¶=U(Š .9êI¸'å`\Ëòoª{ j5 ƒîd<¨0…w¤&¸6´’Ú-FÃNƒ* ¹hà Proposals - Apache Struts Framework libstruts1.2-java-1.2.9/doc/proposals/release-plan-1.0.1.xml0000644000175000017500000000534410404045222023777 0ustar arnaudarnaud00000000000000 Martin F N Cooper Struts Release Plan (Version 1.0.1)

      $Id: release-plan-1.0.1.xml 51063 2003-09-09 17:49:23Z sraeburn $

      The objective of the Struts 1.0.1 release is to provide an official release of all the bug fixes and documentation updates that have been made to the STRUTS_1_0_BRANCH branch since the release of Struts 1.0.

      Since the release of Struts 1.0, a number of important bugs have been fixed, and some notable improvements have been made to the documentation. Currently, these updates are available only to those people who are willing to obtain the source code from CVS and build their own version of Struts. This release will make these updates available in an official distribution, thus making them available to a wider audience.

      Therefore, the following release plan is proposed for Struts 1.0.1:

      • Code Freeze / Tag Date - Wednesday, November 21, 2001
      • Release Manager - Martin Cooper
      • Release Announcement - To the following mailing lists and web sites:
        • announcements@jakarta.apache.org
        • struts-dev@jakarta.apache.org
        • struts-user@jakarta.apache.org
        • jsp-interest@java.sun.com
        • servlet-interest@java.sun.com
        • http://www.freshmeat.net

      Prior to the release of Struts 1.0.1, the following action items must be completed:

      • The Struts 1.0.1 Release Notes document shall be updated to describe substantial changes and improvements since the Struts 1.0 release, along with associated updates to the main Struts Documentation Application pages describing the new release.
      • All of the Struts example applications that are included with the release shall operate successfully in the following servlet containers:
      • A release vote shall take place on the struts-dev mailing list to approve this plan. The release vote MUST pass by "Majority Approval" of Struts committers.
      libstruts1.2-java-1.2.9/doc/proposals/release-plan-1.0b1.xml0000644000175000017500000000667510404045172024077 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Struts Release Plan (Version 1.0-beta-1)

      $Id: release-plan-1.0b1.xml 51063 2003-09-09 17:49:23Z sraeburn $

      The objective of the Struts 1.0-beta-1 release is to create a milestone release against which a final series of bug fixes and documentation updates can occur before a Struts 1.0 Final release is created.

      The code base for Struts has been in an informal "feature freeze" for several weeks, while development focus has been on bug fixes and the completion of required documentation. Both of these goals have been substantially achieved, so it is time for a formal beta release - with the goal of moving quickly to a final Struts 1.0 release shortly thereafter, if no disabling defects are found.

      Therefore, the following release plan is proposed for Struts 1.0-beta-1:

      • Code Freeze / Tag Date - Wednesday, February 21, 2001
      • Release Manager - Craig McClanahan
      • Release Announcement - To the following mailing lists and web sites:
        • ANNOUNCEMENTS@JAKARTA.APACHE.ORG
        • GENERAL@JAKARTA.APACHE.ORG
        • STRUTS-DEV@JAKARTA.APACHE.ORG
        • STRUTS-USER@JAKARTA.APACHE.ORG
        • JSP-INTEREST@JAVA.SUN.COM
        • SERVLET-INTEREST@JAVA.SUN.COM
        • http://www.freshmeat.net

      Prior to the release of Struts 1.0-beta-1, the following action items must be completed:

      • All Bugzilla bug reports against Struts 1.0 nightly builds MUST be marked as "Resolved", with any of the legal Bugzilla resolutions (FIXED, INVALID, WONTFIX, LATER, REMIND, WORKSFORME).
      • Bug reports that are resolved as LATER or REMIND will include comments as to whether those specific issues will be dealt with in a subsequent 1.0 beta or final release, or whether they will be scheduled for consideration in a subsequent release time frame.
      • Any remaining items on the Struts 1.0 TODO list shall be completed.
      • The Struts 1.0 Release Notes document shall be updated to describe substantial changes and improvements since the Struts 0.5 release, along with associated updates to the main Struts Documentation Application pages describing the new release.
      • All of the Struts example applications that are included with the release shall operate successfully in the following servlet containers:
      • A release vote shall take place on the STRUTS-DEV mailing list to approve this plan. The release vote MUST pass by "Majority Approval" of Struts committers.
      libstruts1.2-java-1.2.9/doc/proposals/release-plan-1.1.xml0000644000175000017500000001305710404045250023642 0ustar arnaudarnaud00000000000000 Martin F N Cooper Ted Husted Struts Release Plan (Version 1.1)

      $Id: release-plan-1.1.xml 51063 2003-09-09 17:49:23Z sraeburn $

      The objective of the Struts 1.1 Final release is to provide an official release of all the bug fixes and documentation updates that have been made to the main trunk of the jakarta-struts CVS since the release of Struts 1.0.2.

      Only minor changes have been made to the codebase since the Struts 1.1 RC2 release. Issues reported on the few oustanding tickets are either unconfirmed or may be categorized as enhancements and can be resolved in short order. Therefore it is time to make the latest code base available as the Struts 1.1 Final Release.

      The final release of Commons FileUpload has been approved and will be available for distribution with Struts 1.1 Final, as required by the Struts 1.1 RC2 release plan.

      Therefore, the following release plan is proposed for Struts 1.1 Final:

      • Code Freeze / Tag Date - Saturday, June 28, 2003, 23:59:59
      • Release Manager - Martin Cooper
      • Release Announcement - To the following mailing lists:
        • announcements@jakarta.apache.org
        • struts-dev@jakarta.apache.org
        • struts-user@jakarta.apache.org

      The release process shall follow the same general procedures established the Jakarta Commons products.

      Prior to the release of Struts 1.1 Final Release, the following action items must be completed:

      • A release vote shall take place on the struts-dev mailing list to approve this plan. The release vote MUST pass by "Majority Approval" of Struts committers.
      • The Struts 1.1 Release Notes document shall be updated to describe any substantial changes and improvements since the Struts 1.1 RC2 release, along with associated updates to the main Struts Documentation Application pages describing the new release.
      • All of the Struts example applications that are included with the release shall operate successfully in the following servlet containers:

      Prior to the release of a subsequent Struts 1.1 Final release, the following action items must be completed:

      • All Bugzilla bug reports against Struts 1.1 RC2 MUST be marked as "Enhancement" or "Resolved", with any of the legal Bugzilla resolutions (FIXED, INVALID, WONTFIX, LATER, REMIND, WORKSFORME).
      • Bug reports that are resolved as LATER or REMIND will include comments as to whether those specific issues will be dealt with in a subsequent beta, release candidate, or final release, or whether they will be scheduled for consideration in a subsequent release time frame.
      • The final release of Commons-FileUpload 1.0 must be available and made part of the Struts 1.1 Final distribution.
      libstruts1.2-java-1.2.9/doc/proposals/release-plan-1.1b1.xml0000644000175000017500000000647310404045212024067 0ustar arnaudarnaud00000000000000 Martin F N Cooper Struts Release Plan (Version 1.1b1)

      $Id: release-plan-1.1b1.xml 51317 2004-01-06 05:49:41Z rleland $

      The objective of the Struts 1.1 Beta 1 release is to create a milestone release against which a final series of bug fixes and documentation updates can occur before a Struts 1.1 Final release is created.

      Many new features have been added to the nightly builds since the release of Struts 1.0, and many bugs have been fixed. Several of the new features are in high demand by current Struts users, and so it is time to start the process of making this new code base available as a formal release. The first step in this process is an initial beta release, with the goal of moving towards a release candidate and then a final Struts 1.1 release as soon as is practicable.

      Therefore, the following release plan is proposed for Struts 1.1 Beta 1:

      • Code Freeze / Tag Date - Monday, March 18, 2002
      • Release Manager - Martin Cooper
      • Release Announcement - To the following mailing lists:
        • announcements@jakarta.apache.org
        • struts-dev@jakarta.apache.org
        • struts-user@jakarta.apache.org

      Prior to the release of Struts 1.1 Beta 1, the following action items must be completed:

      • The Struts 1.1 Release Notes document shall be updated to describe substantial changes and improvements since the Struts 1.0.2 release, along with associated updates to the main Struts Documentation Application pages describing the new release.
      • All of the Struts example applications that are included with the release shall operate successfully in the following servlet containers:
      • A release vote shall take place on the STRUTS-DEV mailing list to approve this plan. The release vote MUST pass by "Majority Approval" of Struts committers.

      Prior to the release of a subsequent Struts 1.1 release candidate, the following action items must be completed:

      • All Bugzilla bug reports against Struts 1.1 nightly builds MUST be marked as "Resolved", with any of the legal Bugzilla resolutions (FIXED, INVALID, WONTFIX, LATER, REMIND, WORKSFORME).
      • Bug reports that are resolved as LATER or REMIND will include comments as to whether those specific issues will be dealt with in a subsequent release candidate, or final release, or whether they will be scheduled for consideration in a subsequent release time frame.
      libstruts1.2-java-1.2.9/doc/proposals/release-plan-1.1b2.xml0000644000175000017500000001126610404045246024073 0ustar arnaudarnaud00000000000000 Martin F N Cooper Struts Release Plan (Version 1.1-b2)

      $Id: release-plan-1.1b2.xml 51317 2004-01-06 05:49:41Z rleland $

      The objective of the Struts 1.1 Beta 2 release is to create a milestone release against which a final series of bug fixes and documentation updates can occur before a Struts 1.1 Final release is created.

      A number of new features have been added to the nightly builds since the first Beta release of Struts 1.1, and many bugs have been fixed. It is time, therefore, to take the next step in the release process, and make the latest code base available as a second Beta release. The goal is to move towards a release candidate and then a final Struts 1.1 release as soon as is practicable.

      Therefore, the following release plan is proposed for Struts 1.1 Beta 2:

      • Code Freeze / Tag Date - Saturday, August 10, 2002
      • Release Manager - Martin Cooper
      • Release Announcement - To the following mailing lists:
        • announcements@jakarta.apache.org
        • struts-dev@jakarta.apache.org
        • struts-user@jakarta.apache.org

      Prior to the release of Struts 1.1 Beta 2, the following action items must be completed:

      • The Struts 1.1 Release Notes document shall be updated to describe substantial changes and improvements since the Struts 1.0.2 release, along with associated updates to the main Struts Documentation Application pages describing the new release.
      • All of the Struts example applications that are included with the release shall operate successfully in the following servlet containers:
      • A release vote shall take place on the STRUTS-DEV mailing list to approve this plan. The release vote MUST pass by "Majority Approval" of Struts committers.

      Prior to the release of a subsequent Struts 1.1 release candidate, the following action items must be completed:

      • All Bugzilla bug reports against Struts 1.1 nightly builds MUST be marked as "Resolved", with any of the legal Bugzilla resolutions (FIXED, INVALID, WONTFIX, LATER, REMIND, WORKSFORME).
      • Bug reports that are resolved as LATER or REMIND will include comments as to whether those specific issues will be dealt with in a subsequent beta, release candidate, or final release, or whether they will be scheduled for consideration in a subsequent release time frame.

      The following bugs must be addressed before Final Release of Struts 1.1.

      Custom Tags
      1586 The <html:form> tag generates incorrect focus javascript for radio buttons.
      Documentation
      10537 [:TODO:] sections (18)
      Example Webapps
      10955 Error running struts-blank applicaiton under JRun 3.1
      Validator Framework
      7353 Validator JavaScript Select Error
      10191 Validator range checking bug
      10348 Validator is not available under module
      10349 Validator: date validation does not allow blank input?
      10432 DynaValidatorActionForm does not validate data
      10584 Not all validation files are read in Validation PlugIn
      libstruts1.2-java-1.2.9/doc/proposals/release-plan-1.1b3.xml0000644000175000017500000002315410404045226024071 0ustar arnaudarnaud00000000000000 Martin F N Cooper Struts Release Plan (Version 1.1-b3)

      $Id: release-plan-1.1b3.xml 51063 2003-09-09 17:49:23Z sraeburn $

      The objective of the Struts 1.1 Beta 3 release is to create a milestone release against which a final series of bug fixes and documentation updates can occur before a Struts 1.1 Final release is created.

      A number of new features have been added to the nightly builds since the second Beta release of Struts 1.1, and many bugs have been fixed. It is time, therefore, to take the next step in the release process, and make the latest code base available as a third Beta release. The goal is to move towards a release candidate and then a final Struts 1.1 release as soon as is practicable.

      Therefore, the following release plan is proposed for Struts 1.1 Beta 3:

      • Code Freeze / Tag Date - Sunday, December 29, 2002, 23:59:59
      • Release Manager - Martin Cooper
      • Release Announcement - To the following mailing lists:
        • announcements@jakarta.apache.org
        • struts-dev@jakarta.apache.org
        • struts-user@jakarta.apache.org

      Prior to the release of Struts 1.1 Beta 3, the following action items must be completed:

      • The Struts 1.1 Release Notes document shall be updated to describe substantial changes and improvements since the Struts 1.0.2 release, along with associated updates to the main Struts Documentation Application pages describing the new release.
      • All of the Struts example applications that are included with the release shall operate successfully in the following servlet containers:
      • A release vote shall take place on the STRUTS-DEV mailing list to approve this plan. The release vote MUST pass by "Majority Approval" of Struts committers.

      Prior to the release of a subsequent Struts 1.1 release candidate, the following action items must be completed:

      • All Bugzilla bug reports against Struts 1.1 nightly builds MUST be marked as "Resolved", with any of the legal Bugzilla resolutions (FIXED, INVALID, WONTFIX, LATER, REMIND, WORKSFORME).
      • Bug reports that are resolved as LATER or REMIND will include comments as to whether those specific issues will be dealt with in a subsequent beta, release candidate, or final release, or whether they will be scheduled for consideration in a subsequent release time frame.

      The following bugs must be addressed before Final Release of Struts 1.1. Checked items have been resolved.

      Custom Tags
      [x] 11021 ActionForward or <html:link> tag does not support absolute URIs
      [x] 12302 Sporadic error in html:form action attribute
      [x] 13645 Add action attribute to <html:link>
      [x] 15044 Taglib - Index Attribute in html:Checkbox doesn't set correctly
      [x] 15196 Bug on the RequestUtils.computeParameters using a DynaValidatorForm as map of the parameter
      [x] 15451 Multiple mapped properties not possible / Direct maps and indexes not possible
      [x] 15601 tile examples to move to standard webapp location
      Controller
      [x] 12871 ExceptionHandler does not obey controller inputForward rule
      [x] 14054 Rename "Application" components to "Module"
      [x] 14749 Action "input" not starting with '/' and not a valid forward will cause an internal server error
      Documentation
      [x] 10537 [:TODO:] sections
      [x] 15167 Updated Action documentation
      Utilities
      [x] 11932 (Message Resource is not multi-app aware) Multi-Resource not work in Multi-Appliction config environment
      Unknown
      [x] 14042 Unknown Memory leaks with JBoss 3.x +(Tomcat/Jetty)
      Post Mortem -- These tickets were added after the release of Struts 1.1 B3 and need to be resolved before the next iteration
      [x] 15736 Struts doesn't initialize under strict security manager
      [x] 15799 Nested tags picks up wrong bean for values
      [x] 15883 wrong resource file used in multi-application context
      [x] 16019 LookupDispatchAction multiple MessageResources
      [x] 16514 NestedtTiles fail in this release
      [x] 16603 internalModuleRelativeForward() doesn't treat module-relative paths as defined by forwardPattern
      [x] 16609 MessageResource not in request scope for Module
      libstruts1.2-java-1.2.9/doc/proposals/release-plan-1.1rc1.xml0000644000175000017500000001013010404045212024233 0ustar arnaudarnaud00000000000000 Martin F N Cooper Struts Release Plan (Version 1.1-rc1)

      $Id: release-plan-1.1rc1.xml 51063 2003-09-09 17:49:23Z sraeburn $

      The objective of the Struts 1.1 Release Candidate 1 release is to create a milestone release in preparation for an imminent Struts 1.1 Final release. As a release candidate, this milestone release currently contains no known showstoppers.

      A number of bugs have been fixed since the third Beta release of Struts 1.1, and all remaining bugs have been categorized either as enhancements, or as problems which can be fixed in a release subsequent to Struts 1.1 Final. Therefore it is time to make the latest code base available as a first Release Candidate. The goal is to move towards a final Struts 1.1 release as soon as is practicable.

      Therefore, the following release plan is proposed for Struts 1.1 Release Candidate 1:

      • Code Freeze / Tag Date - Tuesday, February 18, 2003, 23:59:59
      • Release Manager - Martin Cooper
      • Release Announcement - To the following mailing lists:
        • announcements@jakarta.apache.org
        • struts-dev@jakarta.apache.org
        • struts-user@jakarta.apache.org

      Prior to the release of Struts 1.1 Release Candidate 1, the following action items must be completed:

      • The Struts 1.1 Release Notes document shall be updated to describe substantial changes and improvements since the Struts 1.0.2 release, along with associated updates to the main Struts Documentation Application pages describing the new release.
      • All of the Struts example applications that are included with the release shall operate successfully in the following servlet containers:
      • A release vote shall take place on the STRUTS-DEV mailing list to approve this plan. The release vote MUST pass by "Majority Approval" of Struts committers.

      Prior to the release of a subsequent Struts 1.1 Final release, the following action items must be completed:

      • All Bugzilla bug reports against Struts 1.1 nightly builds MUST be marked as "Resolved", with any of the legal Bugzilla resolutions (FIXED, INVALID, WONTFIX, LATER, REMIND, WORKSFORME).
      • Bug reports that are resolved as LATER or REMIND will include comments as to whether those specific issues will be dealt with in a subsequent beta, release candidate, or final release, or whether they will be scheduled for consideration in a subsequent release time frame.
      libstruts1.2-java-1.2.9/doc/proposals/release-plan-1.1rc2.xml0000644000175000017500000001357410404045244024260 0ustar arnaudarnaud00000000000000 Martin F N Cooper TedHusted Struts Release Plan (Version 1.1-rc2)

      $Id: release-plan-1.1rc2.xml 51063 2003-09-09 17:49:23Z sraeburn $

      The objective of the Struts 1.1 Release Candidate 2 release is to create a milestone release in preparation for an imminent Struts 1.1 Final release. As a release candidate, this milestone release currently contains no known showstoppers.

      A number of bugs have been fixed since and other internal changes made since the first release candidate of Struts 1.1. All remaining tickets have been categorized either as enhancements, or as problems which can be fixed in a release subsequent to Struts 1.1 Final. Therefore it is time to make the latest code base available as a first Release Candidate. The goal is to move towards a final Struts 1.1 release as soon as is practicable.

      This release candidate includes the Commons FileUpload RC1 JAR, which is required to compile and use Struts 1.1. A final release of Struts must depend only on final releases of other required products. Consequently, the Struts 1.1 Final release cannot be made unitl the Commons FileUpload 1.0 Final Release is available.

      However, Pending the final release of Commons FileUpload 1.0, and should there be no showstoppers found in this release candidate, Sunday June 29, 2003, is set as the anticipated release date of Struts 1.1 Final. Anyone wishing to test the product before the final release is encourged to do so before that date.

      Therefore, the following release plan is proposed for Struts 1.1 Release Candidate 2:

      • Code Freeze / Tag Date - Friday, June 6, 2003, 23:59:59
      • Release Manager - Ted Husted
      • Release Announcement - To the following mailing lists:
        • announcements@jakarta.apache.org
        • struts-dev@jakarta.apache.org
        • struts-user@jakarta.apache.org

      This plan is being prepared and executed in accordance with a positive vote held on the STRUT-DEV list, beginning on May 29, the results of which were posted on June 3, 2003.

      The release process shall follow the same general procedures established the Jakarta Commons products.

      Prior to the release of Struts 1.1 Release Candidate 2, the following action items must be completed:

      • The Struts 1.1 Release Notes document shall be updated to describe substantial changes and improvements since the Struts 1.1 RC1 release, along with associated updates to the main Struts Documentation Application pages describing the new release.
      • All of the Struts example applications that are included with the release shall operate successfully in the following servlet containers:

      Prior to the release of a subsequent Struts 1.1 Final release, the following action items must be completed:

      • All Bugzilla bug reports against Struts 1.1 nightly builds MUST be marked as "Enhancement" or "Resolved", with any of the legal Bugzilla resolutions (FIXED, INVALID, WONTFIX, LATER, REMIND, WORKSFORME).
      • Bug reports that are resolved as LATER or REMIND will include comments as to whether those specific issues will be dealt with in a subsequent beta, release candidate, or final release, or whether they will be scheduled for consideration in a subsequent release time frame.
      • The final release of Commons-FileUpload 1.0 must be available and made part of the Struts 1.1 Final distribution.
      libstruts1.2-java-1.2.9/doc/proposals/release-plan_1_2_0.xml0000644000175000017500000002705410404045222024226 0ustar arnaudarnaud00000000000000 Ted Husted Martin F N Cooper Struts Release Plan (Version 1.2.0)

      $Id: release-plan_1_2_0.xml 51697 2004-08-31 17:23:10Z jmitchell $

      The objective of the Struts 1.2.0 release is to provide an official version of all the changes that have been made to the main trunk of the jakarta-struts CVS since the release of Struts 1.1 Final.

      Since the release of version Struts 1.1 Final, we have removed many of the elements deprecated between Struts 1.0 and Struts 1.1 and made several bug fixes and nominal enhancements.

      The following release plan is proposed for Struts 1.2.0:

      • Tag Date - Saturday, February 21, 2004, 23:59:59
      • Release Manager(s) - Ted Husted, Martin Cooper
      • Alpha Release Announcement - To the following mailing list:
        • struts-dev@jakarta.apache.org
      • Beta/General Release Announcement - To the following mailing lists:
        • struts-dev@jakarta.apache.org
        • struts-user@jakarta.apache.org
        • announcements@jakarta.apache.org

      The release process shall follow the same general procedures established for the Apache HTTPD project and Jakarta Commons products, and utilize the HTTPD numbering scheme.

      The release will initially be given an Alpha status and made available through the Release Manager's home directory. Pursuant to a Majority Vote on the struts-dev Mailing List, the release may be moved to the public release directory. The vote may also serve to reclassify the release to be of Beta or General Availability (GA) quality, as defined by the Apache HTTPD project. Subsequent votes may reclassify the release, either to promote it or to demote it, as need be.

      Prior to the Struts 1.2.0 release, these specific action items must be completed:

      • The Roadmap page must be updated with an explanation of the new release numbering scheme.

      Prior to any release by the Struts Committers, including this one, the following action items must be completed:

      • Resolve showstoppers. Relevant Bugzilla tickets verified by a Struts Committer to have the Severity BLOCKER, CRITICAL, or MAJOR must be "Resolved" with one of these Bugzilla resolutions: FIXED, INVALID, WONTFIX, WORKSFORME.
      • Test example applications. All example applications included with the release shall operate successfully under the Reference Implementation containers for the Servlet/JSP specifications supported by the release. In the case of a Struts 1.x.x release, these containers are:
        • Tomcat 3.3 (Servlet/JSP 2.2/1.1 Reference Implementation)
        • Tomcat 4.1 (Servlet/JSP 2.3/1.2 Reference Implementation)
        The best available version of each container shall be used, as documented by the Tomcat website at the time the test is conducted.
      • Update Release Notes. The Release Notes for the distribution shall be updated to summarize any substantial changes and improvements since the prior release, including updates to bundled documentation and example applications.

      Prior to an initial Struts minor release (#.#.0), the following action items must be completed:

      • Review pending issues. All relevant Bugzilla reports marked "Resolved" with the Resolutions LATER or REMIND shall be reviewed to ensure that pending issues have been addressed prior to the release.
      • Review pending enhancements. All relevant Bugzilla reports marked "Enhancement" shall be reviewed by the Release Manager to ensure that all suitable enhancements have been made prior to the release.
      • Resolve new issues. All relevant Bugzilla tickets MUST be marked as "Enhancement" or "Resolved" with any of the legal Bugzilla resolutions (FIXED, INVALID, WONTFIX, LATER, REMIND, WORKSFORME).
        • Bug reports that are resolved as LATER or REMIND will include comments as to whether those specific issues will be dealt with in a forthcoming minor release or whether they will be considered in a future major release.
      • A Majority Vote shall take place on the struts-dev mailing list to approve a release plan for the initial minor release.
      libstruts1.2-java-1.2.9/doc/proposals/struts-faces.xml0000644000175000017500000002577110404045206023427 0ustar arnaudarnaud00000000000000 Craig R. McClanahan About Struts and JavaServer Faces [forward-looking]

      [18-Sep-2002] JavaServer Faces (JSF) is being developed as JSR 127 under the Java Community Process, with the goal of creating a standard framework for user interface components to be used in web applications. Included will be the following basic features:

      • User interface component model
      • Event handling model
      • Validation framework
      • Flexible rendering model (plugin support for rendering different kinds of HTML, or different markup languages and technologies)
      • A standard RenderKit (and associated Renderers) for generating basic HTML/4.01 markup. This library is primarily for making JSF useful out of the box, and allow apps to be portable across JSF implementations. However, we expect a lot of innovation in this area among competing JSF implementations.

      All of the above functionality is available via standard Java APIs, and is thus not tied to JavaServer Pages (JSP). However, because a large majority of JSF users will also be using JSP, an additional set of requirements is included in the JSF specification, including:

      • A standard tag library for generic things that are independent of the specific RenderKit in use (such as adding a validator to a component).
      • A standard tag library for the basic HTML RenderKit, with a tag for each combination of a component type and a method of rendering that component type. An example will make this clearer -- consider the UISelectOne component, which represents a list of options, and allows only a single option from the list to be selected. Such a component can be rendered in three different ways (in the basic HTML RenderKit), each with a different Renderer and a corresponding custom tag:
        <h:selectone_listbox> - Display a list of all the possible options (expanding the box to include all of them so that no scrollbar is required).
        <h:selectone_menu> - Display as a combo box (the traditional HTML <select> element with size="1").
        <h:selectone_radio> - Display as a set of radio buttons and corresponding labels.

      Note that the application developer doesn't know or care which mechanism was used to display this component -- that's up to the page author, who will pick the desired representation by virtue of which tag he or she selects (at the Java API level, you make this choice by setting the "rendererType" property on the component instance). This is one of the many advances that JSF provides over Struts tags, where there is one and only one way to render each individual element.

      There are also provisions for creating more complex components like grids, tree controls, and the like -- a common theme you will see is "compose complex things out of little things" -- that is accomplished in JSP by nesting component tags inside each other, just like you nest HTML <input> elements inside a <form> element.

      For more information about JavaServer Faces, and an early access draft of the specification (and an early access version of the RI that corresponds to an even earlier draft of the spec), you'll want to bookmark:

      http://java.sun.com/j2ee/javaserverfaces/

      In addition, there is a forum on the Java Developer Connection (free registration required) focused on JavaServer Faces, so please ask your general Faces-related questions there instead of here. Here's a direct link to the forum page:

      http://forums.java.sun.com/forum.jsp?forum=427

      Note that JavaServer Faces depends on Servlet 2.3 and JSP 1.2 (i.e. J2EE 1.3 containers).

      At first glance, the low level components sound a lot like the struts-html tag library that Struts users know and love. Indeed, there is a very substantial amount of overlap. So, what's going to happen?

      In my JavaOne BOF on Struts (March, 2002), I made the statement that Struts would have a very clean integration with JSF, so that you can use JSF components in your user interface, but continue to use the controller, Actions, and associated business logic. Indeed, I stated that it will be possible to transition your application from using Struts HTML tags to using Faces component tags, one page at a time -- in most cases, with zero changes to the business logic or Action classes and minimal changes to the <forward> elements in your struts-config.xml configuration file.

      Along with developing JavaServer Faces itself (I am the specification lead for JSR-127), I have been working on just such an integration library for Struts (1.1 only; sorry in advance to 1.0 users). While not completed yet, it is clear that the goals stated in the previous paragraph are achievable with the current evolving design of JSF. While things can always change in the future, many JSR-127 expert group members consider high quality integration with Struts to be an important success factor for JavaServer Faces to be accepted. Therefore, I do not expect that JSF will evolve in ways that make this kind of integration difficult or impossible.

      From the developer's perspective, you will need to do only the following to start using JSF components in your pages:

      • Add a new struts-faces.jar file, and the JAR files for an appropriate JSF implementation, to your /WEB-INF/lib directory.
      • Note that JSF and the JSP Standard Tag Library (JSTL) interoperate very nicely, so you will also be able to use JSTL tags in your new pages if you wish to.
      • Add a couple of elements to your web.xml deployment descriptor, corresponding to the requirements outlined in Chapter 9 of the JSF specification.
      • Transition one page at a time to use the new tag libraries, making an appropriate modification to the <forward> elements for your pages (the URL needs to change to meet Faces requirements).

      The integration library will be available as a separately packaged download that runs with Struts 1.1, and will include a converted copy of the canonical struts-example web application so that you can see exactly what had to change in order to use Struts with JSF.

      Besides the integration classes themselves (primarily an implementation of the JSF ApplicationHandler API), the library will include some Struts-flavored components and renderers that provide functionality similar to that provided by the existing struts-html tags, when this is not provided by the standard JSF components. For example, there will be a Struts version of the UIForm component that accepts an "action" attribute that looks up the corresponding action mapping, and creates the form bean as needed, just like the <html:form> tag does today.

      The good news -- development of this integration library is well under way.

      The bad news -- you can't see it quite yet. This is primarily because it relies on changes to JSF that have occurred since the early access release of the RI was published, so you wouldn't be able to use it anyway. However, as soon as it is feasible, this library will be added to the "contrib" folder of Struts, with the sources (and downloadable distributions) available under the usual Apache license terms. (The source code will also give you a head start at creating your own JSF components, too).

      Everyone's functionality and schedule requirements are different. However, the following points summarize my basic recommendations and thoughts about the future:

      • If you have existing Struts-based applications that use the existing HTML tag library, feel free to continue to use them if you wish. Struts 1.1 offers full support for this existing functionality.
      • Once the integration library becomes available, you should do some experimenting and prototyping to determine the effort required to migrate your apps to the new JSF component architecture (I'm betting that the extra functionality you gain by doing this will be well worth the effort in many cases). As described above, the actual migration can be done piecemeal -- it doesn't need to happen all at once.
      • For applications now (or about to be) under development that have relatively short term schedules (i.e. the next few months), you should probably stick with the existing HTML library.
      • For applications with a longer lead time, seriously consider waiting for the ability to use JSF components instead of the Struts HTML tag library. Doing this will let you leverage not only the standard HTML components that come with JSF out of the box, but also the rich libraries of JSF components likely to be created by third parties in the future (including Struts developers).

      For Struts after 1.1 is released, the developers haven't yet had formal conversations (which will happen on STRUTS-DEV) about what a future Struts will look like. However, I'm going to continue to advocate a long term migration to using standards like JSF and JSTL when they are available, and de-emphasize the further development of the Struts proprietary tag libraries.

      The Struts tag libraries have had a tremendous positive impact on the development of the standard Java APIs for user interfaces. I joked with the JSTL spec lead that Struts users would *never* accept JSTL without an expression language at least as powerful as the Struts one; and there is more than a little truth to that statement :-). The same thing is happening now for the HTML tags -- and it's time for us to start migrating to the standards, which gives us the time to focus on extending Struts in other directions in the future.

      Comments? Questions? If it's about Struts, or Struts/JSF integration, feel free to ask about these issues on STRUTS-DEV or STRUTS-USER (although I'm going to be relatively incommunicado over the next week; I'll be in Yokohama at JavaOne Japan and only intermittently connected to email). Questions about JSF itself should be addressed to the JSF forum at the URL listed above.

      And thanks to all of you for your continued support and use of Struts -- the community that has developed around this framework continues to amaze and humble me.

      Craig McClanahan

      libstruts1.2-java-1.2.9/doc/proposals/todo-1.0.xml0000644000175000017500000000675210404045230022240 0ustar arnaudarnaud00000000000000 Craig R. McClanahan The Struts Project TODO List for Version 1.0

      Application frameworks, like the applications we build with them, never seem to be completed. The following are the remaining work items before Version 1.0 of Struts can be released.

      The TODO list tasks are divided into functional areas that correspond to the major components of the Struts Framework. References in square brackets are the Java package containing the corresponding source code.

      Omnibus task list for items related to the Struts Documentation, which do not have direct relationships with code bases.

      An example web application utilizing the Struts framework and custom tag library.

      This is the core controller servlet, with support for the developer's action and form bean classes, plus the supporting data structures.

      Review framework-wide use of features that have now been deprecated.

      The Digester package supports scripted firing of "rules" based on matching a particular pattern of nested XML tags. Among the predefined rules that can be utilized are rules to create new objects, set bean properties from the contents of attributes, or call arbitrary methods with arguments based on the XML content being parsed. A common use for this technology (illustrated in the Struts ActionServlet), is parsing configuration files and building corresponding object trees.

      This tag library contains basic tags useful in manipulating JavaBeans and their properties. It includes support for getting and setting bean properties using simple, nested, and subscripted accessor expressions.

      This tag library contains tags useful in preparing web applications that use HTML forms as their primary mechanism for user data entry, as well as support for internationalized and localized applications.

      This package contains a variety of utility classes useful within Struts as well as in stand-alone applications.

      Update the filtering supported by BeanUtils.filter().

      [STRUTS-DEV, Matthias Kerkhoff, 11/13/2000]
      libstruts1.2-java-1.2.9/doc/proposals/todo-1.1.xml0000644000175000017500000004722710404045214022245 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Features We'd Like To See - The Struts Project Wish List

      Application frameworks, like the applications we build with them, never seem to be completed. The following major areas of improvement are being considered for implementation in a future version of Struts.

      Which features are implemented first depends greatly on individual developers becoming involved in the process. Many key features in Struts grew out of code first distributed on the mailing list. If there is a feature here that you need, or already have, please start a thread and show us the code!

      So, when is the next release coming out?

      An external development that is likely to affect the development of Struts 1.1 will be the emerging Standard Tag Library, being produced under the Java Community Process. A very early release is now available at Jakarta Taglibs.

      The existing Struts tags were used as input to the standardization process, but in the case where standard tags with similar functionality are adopted, we should migrate Struts tags to maintain maximum compatibility with the new standard library.

      See also the Service Manager packages in the contrib folder.

      The wish list tasks are divided into functional areas that correspond to the major components of the Struts Framework. References in square brackets are the Java package containing the corresponding source code. Listing a task here is not a guarantee that it will be present in the next release. Again, whether a wish becomes a feature depends on whether there are volunteers who choose to work on the task.

      Omnibus task list for items related to the Struts Documentation, which do not have direct relationships with code bases.

      Incorporate the Taglib documentation and Developer Guides into the User Guide, by including the source of these from their present locations. Revise TODO stylesheet to add Status and Source elements, and to support mailto links for volunteers in Assigned element. All elements should support hypertext links. Add support for "since" element for tracking changes to tags between versions. Area to post articles about contributions from Struts developers. Area to post a "choice" FAQ of truly common questions.

      An example web application utilizing the Struts framework and custom tag library.

      Use a "real" database of some sort (while still making Struts easy to install.

      Ted Husted

      Add support for switching Locales on the fly to the Struts example application.

      Ted Husted

      This is the core controller servlet, with support for the developer's action and form bean classes, plus the supporting data structures.

      Create a mechanism by which business logic (now encoded in Action classes) can be subdivided into individual work Tasks that are combined according to configuration information (including flow control and iteration support) in the struts-config.xml file. Support for workflow processing would be provided by a set of standard Actions, and will offer an alternative mechanism (not a replacement of Actions) to organizing your business logic.

      A Workflow Proposal is pending.

      Craig Tataryn, Nic Hobbs

      Add support for JavaBeans that include a PropertyEditor class for conversion to and from the string representation used in an HTML input field. This support should operate in a manner consistent with the way that standard JSP tags do in JSP 1.2.

      Retrofit the Struts controller framework with supports for event generation (and the corresponding registration of listeners) for all interesting events created by the framework. The list of interesting events will undoubtedly be influenced by changes related to other work items on this list (such as workflow processing and standard validations), so work on this should be coordinated with those changes.

      [STRUTS-DEV, Robert Leland, 10/10/2000] [STRUTS-DEV, David Geary, 12/20/2000] [STRUTS-USER, Ted Husted, 12/23/2000]

      Begin adding design patterns and support for easy integration with Enterprise JavaBeans (EJBs) for encapsulation of business logic and application data.

      Mike Schachter

      Improve the current Struts support for generating no-cache headers to provide finer-grained, configurable control on a per-page basis.

      [STRUTS-DEV, Hou Yunfeng, 10/07/2000] [STRUTS-DEV, Matthias Kerkhoff, 11/18/2000]

      This tag library contains basic tags useful in manipulating JavaBeans and their properties. It includes support for getting and setting bean properties using simple, nested, and subscripted accessor expressions.

      Update all of the relevant tags to include property accessor support using the syntax specified by the XPath standard (www.w3c.org).

      Dave Bettin

      Update all of the relevant tags to get and set attributes from a Java object that implements the XML Document Object Model, as well as from the current tree of JavaBean objects. How the underlying data object is stored should be transparent to page writers using these tags.

      Dave Bettin

      Update all of the relevant tags to get and set attributes from a JDBC RowSet (or ResultSet) object, as well as from XML DOM objects and the current tree of JavaBean objects. How the underlying data object is stored should be transparent to page writers using these tags.

      Dave Bettin

      Add the ability to use formatting patterns (suitably localized) for presenting numbers, dates, times, timestamps, and so on via formatted patterns.

      [STRUTS-DEV, Oleg Alexeev, 10/27/2000] [STRUTS-USER, Ned Seagoon, 12/11/2000] [STRUTS-DEV, Ned Seagoon, 12/13/2000] [STRUTS-USER, Ned Seagoon, 01/04/2001]

      Dave Bettin

      This tag library contains tags useful in preparing web applications that use HTML forms as their primary mechanism for user data entry, as well as support for internationalized and localized applications.

      Add a new tag that supports generation of groups of radio buttons.

      [STRUTS-DEV, Wellington Silva, 08/28/2000]

      Improve the mechanism by which you define values and corresponding labels for <html:options>.

      [STRUTS-DEV, David Winterfeldt, 07/27/2000] [STRUTS-DEV, David Winterfeldt, 08/02/2000] [STRUTS-DEV, Andy Boyko, 11/15/2000] [STRUTS-DEV, Andy Boyko, 12/07/2000]

      Support additional HTML 4.0.1 attributes (such as "disabled", "readonly", "wrap" on textarea) where appropriate.

      [STRUTS-USER, , 08/23/2000]

      Improve the ability to use the <logic:iterate> tag over a collection, and generate a set of input fields for each member of the collection (perhaps auto-generating a subscript?). A significant use case is master-detail relationships (say, a customer and their current orders) where you allow editing of any and all fields.

      [STRUTS-USER, Lars, 12/06/2000] [STRUTS-USER, Chandan Kulkarni, 12/26/2000]

      Create design patterns and improved internal support for forms that span multiple pages.

      Nic Hobbs

      This tag library provides mechanisms to conditionally process nested body content based on a variety of logical conditions.

      Add "else" and "else if" constructs to the existing conditional tags, in some reasonable format.

      Add conditional tags that emulate the "case" or "switch" capability of many programming languages.

      NOTE: Pending the outcome of the JSPTL, this functionality will not be added to the Struts-Logic tags. However, a contributor taglib is available.

      Niall Pemberton

      Enhance <logic:iterate>, or provide a new tag, to iterate over multiple collections in parallel.

      [STRUTS-DEV, Jeff R., 08/03/2000]

      This tag library will contain tags useful in preparing web applications similar to those supported by the HTML tag library, but render output that is well-formed XML in accordance with WML specifications.

      This potential new tag library provides access to facilities in the emerging XForms standards.

      Consider how to support more generalized definitions of forms and their fields, perhaps based on emerging XForms standards.

      This tag library will contain tags useful in preparing web applications similar to those supported by the HTML tag library, but render output that is well-formed XML in accordance with the XHTML 1.0 specification.

      This package contains code generators and other tools that facilitate the creation of Struts-based applications. Further subdivision into specialized packages should be performed as appropriate.

      Create a tool that takes an XML-based description of the properties of the form bean, and automatically generates the corresponding Java class.

      A contributor extension is now available.

      [STRUTS-DEV, Mark Wutka, 06/01/2000 and 06/16/2000]

      Ravindran Ramaiah

      This package contains a variety of utility classes useful within Struts as well as in stand-alone applications.

      Implementation of MessageResources and MessageResourcesFactory that loads message keys and strings from one or more XML resources or files.

      [STRUTS-DEV, Scott Sayles, 01/07/2000]

      Improve support in BeanUtils, ConvertUtils, and PropertyUtils for property values that implement Collection, List, or Set, treating them in a manner similar to the way that indexed or array-valued properties are handled.

      [Bugzilla #640]

      Unit test components compatible with the JUnit and Cactus testing frameworks, to test and validate internal APIs of the Struts framework. Volunteers will typically agree to develop tests for an entire package within the Java source code of Struts.

      Unit tests for the org.apache.struts.action package.

      Rob Leland

      Unit tests for the org.apache.struts.actions package.

      Unit tests for the org.apache.struts.taglib.bean package.

      Unit tests for the org.apache.struts.taglib.html package.

      Unit tests for the org.apache.struts.taglib.logic package.

      Unit tests for the org.apache.struts.taglib.template package.

      Unit tests for the org.apache.struts.taglib.upload package.

      Unit tests for the org.apache.struts.util package.

      This section is a catch-all for additional areas of functionality to be investigated for inclusion into Struts.

      [STRUTS-DEV, Cedric Dumoulin, 10/03/2000] [STRUTS-DEV, Eric, 11/07/2000] [STRUTS-DEV, Phil Grimm, 11/22/2000] Ted Husted [STRUTS-DEV, David D'Orto, 12/11/2000]

      A portion of the Struts web site, and file system, where individually contributed add-ons for Struts can be hosted and downloaded.

      Detailed proposal with implementation plan.

      [STRUTS-USER, Ned Seagoon, 12/22/2000]

      Ted Husted
      libstruts1.2-java-1.2.9/doc/proposals/workflow.xml0000644000175000017500000004366110404045236022657 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Proposal - Workflow Management System

      Work on this initiative has stalled. It is recommended that interested parties look to the Commons Jelly product. A way to persist the workflow state between sessions is needed, but Jelly otherwise fills the needs identified by this proosal.

      Struts 1.0 has become an increasingly popular platform for constructing web applications based on a Model-View-Controller type design pattern (also known as the Front Controller pattern. It has achieved this popularity for many reasons, but key among them have been:

      • The simplicity of the basic organizational principles (once you understand them)
      • The principle of logical naming to assist in isolating the view layer and the model layer, so that changes in one do not have to impact the other
      • A rich set of tools to assist in creating pages with dynamic content exposed by the model layer through JavaBeans

      One consequence of the original Struts design, however, is that the framework does not provide much assistance in organizing business transactions that require more than one interaction with the user (i.e. they span more than one JSP page and/or Action). Applications are left to manage navigation issues, as well as deal with ActionForms whose logical contents crosses page boundaries.

      The original Struts design materially assists page designers in creating dynamic pages, while protecting them from having to be very concerned with the business logic -- other than the names of the JavaBeans used to communicate model layer data to the presentation layer. However, Struts 1.0 still requires a Java developer to be involved on the business logic side (even if all of the functional logic is already available in Java classes) in order to create the Action classes.

      The purpose of this Workflow Management System proposal is to address some of these consequences. In particular, it intends to address the following set of goals:

      • Create a means where multiple-user-interaction business processes can be configured (scripted), including support for conditional processing and branching.
      • Support scripting elements that lets business application experts, who are not necessarily Java developers, can integrate pre-existing business functionality that is available as public methods on arbitrary Java classes.
      • Assist page designers in creating the user interface elements that correspond to navigation links within, or between, work flows.

      To give a flavor of what scripted workflow activities might look like, it is useful to consider some possible use case scenarios. The syntax that is shown for the examples should be considered as illustrative of what should be possible, rather than normative. No rigorous attempt has been made to guarantee consistency between (or even within) these examples.

      The example application included with Struts (like many other web applications) uses application-managed security, including a logon form. Consider that a business logic bean might be available (in some scope under key authenticator) that knows how to authenticate users given a username and password. It could be utilized to script application logon like this:

      <activity id="Application Logon">
      
        <-- Display the logon form (web framework independent) -->
        <web:forward id="display" page="/logon.jsp"/>
      
        <-- Authenticate the username and password, returning a Principal
            if accepted, or null if not -->
        <web:set  name="username" value="$parameter:username"/>
        <web:set  name="password" value="$parameter:password"/>
        <core:invoke bean="authenticator" method="authenticate">
          <core:param type="java.lang.String" value="$username"/>
          <core:param type="java.lang.String" value="$password"/>
          <core:return name="principal"/>
        </core:invoke>
      
        <-- If no Principal was returned, branch back to the logon form -->
        <core:if expr="$principal == null">
          <web:set name="error" value="$messages.lookup('invalid.logon')"/>
          <core:branch idref="display"/>
        </core:if>
      
        <-- Exit to the "Main Menu" workflow -->
        <core:goto name="Main Menu"/>
      
      </activity>
      

      Many complex data entry operations can be simplified (from the user's point of view) by dividing them up into a series of simple dialog pages that ask a few (often one) question that leads ultimately to a completed set of information required to process a request. In many cases, each page of the interaction will have navigation controls so that the user can short cut to immediate execution, or cancel the entire interaction. Such an interaction might be modelled like this:

      <activity id="Simple Wizard Application">
      
        <!-- Display the first page of the iteration -->
        <!-- (Using Struts-specific logical-to-physical mapping) -->
        <struts:forward id="page1" name="Simple Wizard Page 1">
      
        <!-- Process navigation input from the first page -->
        <!-- (Can do something much like this framework-independently too) -->
        <struts:navigate>
          <struts:branch control="CANCEL" idref="cancel"/>
          <struts:branch control="FINISH" idref="finish"/>
          <struts:branch control="NEXT"   idref="page2"/>
        </struts:navigate>
      
        <!-- Display the second page of the iteration -->
        <struts:forward id="page2" name="Simple Wizard Page 2">
      
        <!-- Process navigation input from the second page -->
        <struts:navigate>
          <struts:branch control="CANCEL" idref="cancel"/>
          <struts:branch control="FINISH" idref="finish"/>
          <struts:branch control="NEXT"   idref="page3"/>
          <struts:branch control="PREV"   idref="page1"/>
        </struts:navigate>
      
        <!-- Display the third page of the iteration -->
        <struts:forward id="page3" name="Simple Wizard Page 3">
      
        <!-- Process navigation input from the third page -->
        <struts:navigate>
          <struts:branch control="CANCEL" idref="cancel"/>
          <struts:branch control="FINISH" idref="finish"/>
          <struts:branch control="PREV"   idref="page2"/>
        </struts:navigate>
      
        <!-- Process the FINISH navigation control as appropriate -->
        <xxx:yyy id="finish" .../>
        <core:goto name="Main Menu"/>
      
        <!-- Process the CANCEL navigation control as appropriate -->
        <xxx:yyy id="cancel" .../>
        <core:goto name="Main Menu"/>
      
      </activity>
      

      Not illustrated above, but also interesting to explore, would be the situation where choices on one page affect whether some pages in the overall flow might be skipped.

      Workflow system capabilities will be exposed to applications through Java APIs that represent both the static description of particular activities and the dynamic current state of a computation. Object factory and pluggable implementation patterns shall be used where appropriate to maximize the generality and flexibility of the system.

      The following classes represent the primary components of the workflow management system:

      Registry - Collection into which multiple Process and Activity static descriptions can be stored and retrieved by String-valued keys.

      Process - The static description of a tree of business activities that are executed in a nested fashion, often by separate individuals (or application systems).

      Activity - The static description of a sequence of Steps that are generally executed by a single individual (or application system), within a reasonably short period of time.

      Step - The static description of an individual task to be performed as a discrete, indivisible, unit. Steps can also be nested inside other steps, to provide for looping and conditional processing. A rich set of built-in Step implementations shall be provided (including powerful capabilities such as the execution of an arbitrary method on an arbitrary Java object), and mechanisms to extend the set of supported Step implementations allows arbitrary extensibility.

      Context - The dynamic state of a computation through an Activity (or a set of nested Activities), including provision of storage space for JavaBeans produced and consumed by other Steps. Contexts keep track of the current Step being executed, so that activity processing can be suspended and resumed later.

      Scope - A Map into which arbitrary Java objects can stored and retrieved by String-valued keys. Context support a number of individual Scopes, each of which can be plugged in from application logic, to provide integration into existing application functionality. For example, in a web application implementation, Scopes will generally be mapped directly to request attributes, session attributes, and servlet context attributes as provided by the Servlet API.

      A rich variety of built-in Step implementations (and corresponding XML elements in specified namespaces) will be provided as part of the basic workflow engine, and as part of the associated Struts integration of this engine.

      Bean Interaction - The ability to get and set JavaBeans in arbitrary Scopes (mapped via the Context to real collections of objects).

      Control Flow - Conditionals and looping, where control flow Steps can contain nested sets of Steps to an arbitrary degree.

      Method Execution - Execute arbitrary public methods of beans stored in some Scope, passing specified arguments (expressions or bean references) and returning the method's result (if any) to a named bean in some Scope. To maximize usefulness of the workflow system in composing applications, no restrictions should be placed on the object types these Steps can interact with.

      Activity Management - GOTO a named Activity (exiting the current one), CALL a named Activity (resuming the current one when the called Activity returns, RETURN from a called Activity, EXIT the Activity system.

      User Interaction - Suspend workflow execution to interact with the user in some application specific way. For example, a web application would display a page and wait for input to be submitted before resuming the workflow.

      Specialized Processing - Prebuilt Steps for common processing functions such as XSLT transformations, performing arbitrary SQL queries, sending mail, and so on.

      The implementation of this proposal will be divided into three major development layers:

      • Core workflow management system capabilities and built in Step implementations that are independent of application environment. [Code in jakarta-commons]
      • Specialized implementation of workflow management system components that integrate with the Servlet API in a manner that is independent of any specific application framework. [Code in jakarta-commons]
      • Specialized implementation of workflow management system components that is tightly integrated with Struts's internal architecture and custom tag libraries. [Code in jakarta-struts]

      The workflow management system will support the general concept of Scopes in which beans can be stashed, with pluggable implementations for integration into different working environments. None of the APIs in the workflow engine itself will have any reference to the web layer (i.e. no imports of javax.servlet.*).

      Suitable object factory and pluggability APIs will be included to guarantee extensibility of the basic framework.

      Scripting of business transactions will be codified in XML documents that conform to an appropriate DTD and/or schema. The XML technology that is used will facilitate extensible definitions of Steps and other components, in both the XML description of these components and in the set of Java objects that implements them.

      When designing the detailed syntax of the XML representation of Steps, consider whether it is feasible for advanced development tools to "compile" activities into individual classes to optimize overall performance.

      When designing the detailed syntax of the XML representation of Steps, consideration should be given to emulating the syntax of other XML applications that are similar in spirit or detail to the concepts of scripting a business transaction. Useful models to consider include:

      • XSL Transformations (XSLT) - Includes control flow mechanisms that are becoming widely known and understood, which could be mimicked.
      • JSP Standard Tag Library (Early Access) - The design goals for many of the JSP custom tags in this library (produced by the JSR-052 expert group under the Java Community Process) are similar enough to provide a useful model for conditionals, looping, and interaction with objects in arbitrary scopes.

      To maximize the usefulness of built-in actions, an expression language that knows how to manipulate objects in the Scopes associated with the current Context will need to be supported. Useful models to consider include:

      • XML Path Language (XPath) - Will be familiar to XML-oriented application developers because it is used throughout the suite of XML specifications.
      • JavaScript like expression languages - Will be familiar to page developers (as well as Struts developers familiar with the nested and indexed property accessor syntax of many Struts tags).

      From the workflow script developer's point of view, XML namespaces will be used to introduce extended sets of Step implementations. There will need to be mechanisms to map a particular namespace to a set of legal XML elements (within that namespace) and corresponding Java classes that provide the functionality for those Steps.

      The web layer integration will include a mechanism to map scopes (from the workflow perspective) into the standard request, session, and application scopes of the web layer. Thus, workflow scripts will be able to place beans in appropriate scopes such that JSP pages can directly pull that data into the presentation, much as Struts Actions (and the business logic classes that are called by those Actions) can place beans there in a Struts 1.0 based application. Utilizing these capabilities, application developers will be able to "script" the business logic requirements of many applications, by combining functional logic already available as methods on business logic beans, without having to involve Java programmers to create new Actions (or otherwise synthesize business logic out of the constituent pieces).

      Components in the web layer integration may import APIs from the Servlet and JSP specifications, but not from any application specific framework. Framework-specific integration will occur on top of the generic web layer integration.

      In addition, the Struts integration will include a small custom tag library will be included, so that page developers can easily create navigational links and controls. Examples of such controls include links to the "next", "previous", and "finish" pages of a wizard dialog, a "cancel" button to exit a workflow early, or an "invoke" button to invoke a new workflow as a subroutine, and then return to the current step of the original workflow. Utilizing these capabilities, page developers can create the individual visible pieces of a work flow dialog, without having to be involved in navigational complexities.

      libstruts1.2-java-1.2.9/doc/stylesheets/0000755000175000017500000000000010423130300020567 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/doc/stylesheets/struts.xsl0000644000175000017500000003121010404045202022665 0ustar arnaudarnaud00000000000000 <xsl:value-of select="properties/title"/> <xsl:value-of select="body/title"/> <xsl:value-of select="$project/title"/> end heading
      end menu
      end main
      end content end footer


    • evenRow oddRow
      Tag Name Description

      -

      Since:

      DEPRECATED:

      Attribute Name Description

      Back to top

      evenRow oddRow

      DEPRECATED:

      Since:

      [] [Required] [RT Expr]
      Description Volunteer
      .
      libstruts1.2-java-1.2.9/doc/stylesheets/tld.xsl0000644000175000017500000000443610404045242022122 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/doc/tiles/0000755000175000017500000000000010423130300017333 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/doc/tiles/installation.xml0000644000175000017500000004337210404045244022602 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Martin Cooper Ted Husted Cedric Dumoulin The Tiles 1.1 Framework Project - Installation (1.1)
      • Download Tiles binary distribution
      • Unzip distribution
      • Copy web/tiles-doc.war or web/struts-tiles.war in your web server webapps directory (webapps with Tomcat). Please refer to your webserver manual to know exactly where, or check detailed install.
      • Restart your web server if necessary
      • Point your browser to the root of newly installed web application ( http://localhost:8080/tiles-doc or http://localhost:8080/struts-tiles with tomcat

      Quick start and setting of a new application using Tiles

      • Take appropriate tiles-blank.war and copy it in your web server webapps directory
        • tiles-blank.war - Tiles without Struts
        • tiles-blank-struts1.1.war - Tiles with Struts1.1
        • tiles-blank-struts1.0.war - Tiles with latest stable Struts1.0.x
      • These war files are not distributed with Struts binaries.

      Copyright : This page is largely inspired from the original Struts installation page. For those familiar with Struts, there is nothing really new.

      The Tiles binary distribution needs other software packages installed to operate. You may already have these installed on your system. To build Tiles from source you may need to acquire and install several others. The complete list is as follows:

      • Java Development Kit - You must download and install a Java2 (version 1.2 or later) Java Development Kit implementation for your operating system platform. A good starting point for locating Java Development Kit distributions is http://java.sun.com/j2se.
      • Servlet Container - You must download and install a servlet container that is compatible with the Servlet API Specification, version 2.2 or later, and the JavaServer Pages (JSP) Specification, version 1.1 or later. One popular choice is to download Apache's Tomcat (version 3.1 or later required, version 3.2 or later recommended).
      • XML Parser - Tiles requires the presence of an XML parser that is compatible with the Java API for XML Parsing (JAXP) specification, 1.1 or later. You can download and install the JAXP reference implementation, which is required for building the Tiles source distribution. In Tiles-based web applications, you may replace the reference implementation classes with any other JAXP compliant parser, such as Xerces. See detailed instructions related to the parser in the instructions for building and installing Tiles, below.
      • Ant Build System - If you are building Tiles from the source distribution, you must download and install version 1.3 or later of the Ant build system. This package is also strongly recommended for use in developing your own web applications based on Tiles.
        • If you are using the release version of Ant version 1.3, you will also need to download the "optional.jar" file that contains the implementation of Ant's <style> command.
        • Make sure that the "ant" and "ant.bat" scripts are executable, by adding the $ANT_HOME/bin directory to your PATH environment variable.
      • Servlet API Classes - In order to compile Tiles itself, or applications that use Tiles, you will need a servlet.jar file containing the Servlet and JSP API classes. Most servlet containers include this JAR file. Otherwise, you can get the Servlet API classes distribution from here.
      • Jakarta Commons Packages - Tiles utilizes several packages from the Jakarta Commons Project.If you are utilizing a binary distribution of Tiles, the corresponding JAR files are included in the lib directory. However, if you wish to build Tiles from source, you will need to download and install the following packages:
        • Beanutils (Version 1.0 or later)
        • Collections (Version 1.0 or later)
        • Digester (Version 1.0 or later)
        • Logging (Version 1.0 or later)
      • Xalan XSLT Processor - If you are building Tiles from the source distribution, you will need a version of Xalan to perform XSLT transformations. If you are using the JAXP/1.1 XML parser, you should use the version of xalan.jar shipped with it. Otherwise, download and install version 1.2 of Xalan from here.
      • Struts Framework - If you are planning to use Tiles with Struts, you should download and install Struts from Apache Struts Project. If you have acquired Tiles with the Struts distribution, you don't need to install it again. Tiles can run without Struts. In this case you loose some features.

      First, download a binary distribution of Tiles by following the instructions here. Then, make sure you have downloaded and installed the prerequisite software packages described above.

      Unpack the Tiles binary distribution into a convenient directory. (If you build Tiles from the source distribution, the result of the build will already be an unpacked binary distribution for you). The distribution consists of the following contents:

      • lib/tiles.jar - This JAR file contains all of the Java classes included in Tiles. It should be copied into the WEB-INF/libdirectory of your web application. WARNING - If you are going to be hosting multiple tiles based applications on the same servlet container, you will be tempted to place the struts.jar file into the shared repository supported by your container. Be advised that this will likely cause you to encounter ClassNotFoundException problems unless all of your application classes are stored in the shared repository.
      • lib/struts1.0/tilesForStruts1.0.jar - Same as before, but for use with Struts1.0.x.
      • lib/tiles.tld - These is the "tag library descriptor" file that describe the custom tags in the Tiles tag libraries. It should be copied into the WEB-INF directory of your web application.
      • webapps/tiles-doc.war or webapps/struts-tiles.war - This is a "web application archive" file containing all of the Tiles documentation found on the Tiles web site (including these pages). You can install this web application on any servlet container compatible with Servlet API 2.2 or later.
      • webapps/tiles-channel.war - Examples using a custom definition factory.
      • webapps/tiles-blank.war - A blank application that can be used as a starting point when you want to develop your own application with Tiles. This blank application doesn't contains neither use Struts. If you also want to use Struts, add struts.jar and related tld files, or choose one of the following applications.
      • webapps/tiles-blank-struts1.1.war - A blank application to use with Struts1.1
      • webapps/tiles-blank-struts1.0.war - A blank application to use with Struts1.0.x

      To use Tiles in your own application, you will need to follow these steps:

      • Copy the fileslib/commons-*.jar into the WEB-INF/lib directory of your web application.
      • Copy the file lib/tiles.jar from the Tiles distribution into the WEB-INF/lib directory of your web application.
      • Copy all of the files that match lib/*.tld from the Tiles distribution into the WEB-INF directory of your web application.
      • If you want to use definitions configuration file, you need to initialize the definitions factory. This can be done as follows:
        • Modify the WEB-INF/web.xml file for your web application to use a <servlet> that initializes the factory and catch Struts action forwards to check for definition name. Use the WEB-INF/web.xml file from the Tiles example application for a detailed example of the required syntax.
            <servlet>
               ...
               <servlet-name>action</servlet-name>
               <servlet-class>org.apache.struts.tiles.ActionComponentsServlet</servlet-class
               <init-param>
                 <param-name>definitions-config</param-name>
                 <param-value>/WEB-INF/tiles-config.xml</param-value>
               </init-param>
               ...
          
        • If you don't want to use Struts, use org.apache.struts.tiles.TilesServlet as servlet.
        • Create a configuration file for definitions. Its name must match the one provided before in WEB-INF/web.xml. Several comma separated names can be provided.
      • Modify the WEB-INF/web.xml file of your web application to include the following tag library declarations:
      <taglib>
        <taglib-uri>/WEB-INF/tiles.tld</taglib-uri>
        <taglib-location>/WEB-INF/tiles.tld</taglib-location>
      </taglib>
      
      • At the top of each JSP page that will use the Tiles custom tags, add line(s) declaring the Tiles custom tag libraries used on this particular page, like this:
      <%@ taglib uri="/WEB-INF/tiles.tld" prefix="tiles" %>
      
      • When compiling the Java classes that comprise your application, be sure to include the tiles.jar and commons-*.jar files (copied earlier) on the CLASSPATH that is submitted to the compiler.

      Note to Struts 1.0 users :

      • You should use a tiles.jar build with Struts1.0.x.
      • If you have downloaded a Tiles version build with Struts1.0.x, you already have it.
      • Consider to use tilesForStruts1.0.jar located in lib/struts1.0

      Note to Struts1.1 users :

      • You should also initialize a TilesRequestProcessor.
      • To do so, add following lines in your struts-config.xml file :
           <controller processorClass="org.apache.struts.tiles.TilesRequestProcessor">
           </controller>
        

      WARNING - Do NOT add tiles.jar to the classpath of your servlet container in an attempt to avoid placing it in the /WEB-INF/lib directory of each individual web app! Doing so will cause problems with ClassNotFoundException exceptions.

      For most containers, you need only to:

      • Copy the WAR files in your Tiles /webapp directory to your containers webapps directory.
      • In some cases, you may need to restart your container if it is running.

      Status of various containers

      For status of additional containers, please refer to the Struts installation page).

      First, download a source distribution of Tiles from here or from Struts contrib directory. Then, make sure you have downloaded and installed all of the prerequisite software packages described above. You also need the appropriate struts version (1.0.x or 1.1)

      To build Tiles, you will need to customize the build process to the details of your development environment as follows:

      • The Tiles source distribution uses a file named build.properties (in the top-level directory of the distribution) to identify the location of external components that Tiles depends on.
      • There is no build.properties file included with the source distribution. However, there is an example file named build.properties.example that you can copy to build.propertiesand then customize.
      • The properties you must configure in build.properties are documented in build.properties.example
      • Tiles build require a Struts library. You can use either a Struts1.0.x or 1.1 struts.jar. The resulting tiles.jar will run with the used struts.jar. You specify the Struts home with struts.home property.

      To build a "distribution" version of Tiles, first change your current directory to the directory in which you have unpacked the Tiles source distribution, and (if necessary) create or customize the build.propertiesfile as described above. Then, type:

              ant dist
      

      This command will create a binary distribution of Tiles, in a directory named dist (relative to where you are compiling from). This directory contains an exact replica of the files included in a binary distribution of Tiles, as described in the preceding section.

      IMPORTANT NOTE: The tiles.jar, as well as the JAR files from the Jakarta Commons project, must be in your classpath when compiling Tiles. The build.xml provided does this automatically. If you use your development machine to test Tiles application locally, be sure that the tiles.jaris NOT on your classpath when your container is running.

      libstruts1.2-java-1.2.9/doc/tiles/project.xml0000644000175000017500000000146510404045244021544 0ustar arnaudarnaud00000000000000 The Tiles 1.1 Framework Project - Installation (1.1) libstruts1.2-java-1.2.9/doc/uml/0000755000175000017500000000000010423130300017010 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/doc/uml/Credits.html0000644000175000017500000000076010404045246021313 0ustar arnaudarnaud00000000000000 Credits
      • sequence-diagram-action.gif Submitted sequence diagram by Gerry Chike on Feb 01. Based on article by David Geary in the Nov 2000 JavaReport article
      libstruts1.2-java-1.2.9/doc/uml/StrutsWork.jdm0000644000175000017500004736237210404045210021707 0ustar arnaudarnaud00000000000000¬íw qÉDùŒ}srsroo.db.DbJDProjectY¶&tþ¼FeLm_defaultCollectionTypetLsroo/db/DbAdt;Lm_defaultStyletLsroo/db/DbStyle;L m_diagramtLsroo/db/DbDiagram;Lm_forwardRootDirectorytLjava/lang/String;Lm_primitiveTypesPackagetLsroo/db/DbPackage;xrjack.baseDb.db.DbProjectY¶&tþ¼FeLm_authorq~Lm_defaultCollectionTypeq~Lm_defaultStyleq~L m_diagramq~Lm_forwardRootDirectoryq~Lm_primitiveTypesPackageq~L m_versionq~xr!jack.baseDb.db.DbSemanticalObjectšåï^G“vZ b_visibleLm_aliasq~L m_descriptionq~L m_importstLjack/baseDb/db/DbRelationN;Lm_nameq~L m_visibletLjava/lang/Boolean;xrjack.baseDb.db.DbObjectqÉDùŒ}L componentsq~L compositetLjack/baseDb/db/DbObject;L m_udfValuesq~xpsrjack.baseDb.db.DbRAMRelationNPÁ‘ ¦ÛWInbElem[arrayt[Ljack/baseDb/db/DbObject;xrjack.baseDb.db.DbRelationNm…³ èAxpCur[Ljack.baseDb.db.DbObject;“¤ß(Ø×ò[xpJsrsroo.db.DbPackageñ)°‘‘õÒhZb_primitiveTypesPackageL m_diagramq~L m_packageGosq~Lm_primitiveTypesPackageq~ Lm_referringProjecttLsroo/db/DbJDProject;L m_versionq~xrsroo.db.DbJDSemanticalObjectšåï^G“vL m_importsq~xq~sq~ uq~srsroo.db.DbPrimitiveType]ÊáSaÌxr sroo.db.DbAdtf<|ÆÖýÚZ b_abstractZ b_baseTypeZ b_collectionZb_staticL m_abstractq~ Lm_adtGosq~L m_ancestorsq~L m_baseTypeq~ L m_collectionq~ Lm_compilationUnittLsroo/db/DbCompilationUnit;L m_descendantsq~Lm_referringProjectq~Lm_staticq~ Lm_typedElementMembersq~Lm_typedMembersq~L m_visibilitytLsroo/db/srtypes/Visibility;xq~sq~ uq~ppppq~sq~ uq~ppppppptbooleansrjava.lang.BooleanÍ r€ÕœúîZvaluexpxsq~ uq~ppppq~$sq~ uq~srsroo.db.DbAdtGo¾¶} UL‰‘Lm_adtq~xrsroo.db.DbGraphicalObject'â6UtG€Z b_autoFitL m_autoFitq~ Lm_backEndLineGosq~Lm_frontEndLineGosq~L m_rectanglet$Ljack/baseDb/db/srtypes/SrRectangle;Lm_styleq~xq~ sq~ uq~ppppsrsroo.db.DbDiagram&™ú5ú(ÉI n_printScaleLm_choicet#Ljack/baseDb/db/DbSemanticalObject;L m_nbPagest$Ljack/baseDb/db/srtypes/SrDimension;L m_pageFormatt%Ljack/baseDb/db/srtypes/SrPageFormat;L m_pageNoFonttLjack/baseDb/db/srtypes/SrFont;L m_printScaletLjava/lang/Integer;Lm_styleq~xq~ sq~ uq~ q~,sq~)sq~ uq~ppppq~5sq~ uq~ppppsq~#sq~ uq~ppppsq~ uq~ppppsr"jack.baseDb.db.srtypes.SrRectangleDjœÎ‘!;IheightIwidthIxIyxrjack.baseDb.db.srtypes.SrType"06–~D÷åxpddpxsq~sq~ uq~ppppq~sq~ uq~ppppppptcharq~$xsq~ uq~ppppq~$sq~ uq~q~8pppsq~ uq~ppppq~$q~$srsroo.db.DbCompilationUnitÞEX‰¨Z b_isCompiledLm_adtsq~L m_isCompiledq~ xq~sq~ uq~ppppq~sq~ uq~pppppppt char.javaq~$xsq~ uq~ppppsq~ uq~q~Epppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ +uq~,srsroo.db.DbParameter7[ 1ò[Axrsroo.db.DbMemberõ•( ɾ5© Zb_finalZ b_orderedL m_elementTypeq~Lm_finalq~ Lm_multiplicitytLsroo/db/srtypes/Multiplicity;L m_orderedq~ Lm_typeq~L m_typeUseq~Lm_typeUseStyletLsroo/db/srtypes/TypeUseStyle;xq~sq~ uq~ppppsrsroo.db.DbOperationÈtænOM,Z b_abstractZb_nativeZb_synchronizedL m_abstractq~ Lm_bodyq~Lm_javaExceptionsq~Lm_nativeq~ Lm_synchronizedq~ xrsroo.db.DbAdtMember`Åð”ÉäÌRZb_staticLm_overriddenMembersq~Lm_overridingMembersq~Lm_staticq~ L m_visibilityq~xq~csq~ uq~sq~bsq~ uq~ppppq~ksq~ uq~ppppppptinputq~=xsq~ uq~pppppq~$srsroo.db.srtypes.Multiplicityª ¸Ø[A¼xr jack.baseDb.db.srtypes.IntDomain4%X%q@Ivaluexrjack.baseDb.db.srtypes.DomainPï2‡öZx-xq~Cq~$srsroo.db.DbClasspUj‘kAZb_finalLm_finalq~ L m_initBlockq~Lm_objectInitBlockq~xq~sq~ uq~ppppsq~sq~ 5uq~9q~{srsroo.db.DbJavaException P.“?)L m_operationsq~xq~zsq~ uq~ppppq~~sq~ uq~ppppptJ//Class body not available: class generated only for referencing purposes.pt Exceptionq~=xsq~ uq~ppppq~$sq~ uq~sq~)sq~ uq~ppppsq~/sq~ uq~sq~)sq~ uq~ppppq~sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bddiqpxq~{q~sq~)sq~ uq~ppppq~sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bdd¿qpxsq~sq~ uq~ppppq~~sq~ uq~pppppq~‡ptClassCastExceptionq~=xsq~ uq~ppppq~$sq~ uq~q~pppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~~sq~ uq~ppppppptClassCastException.javaq~$xsq~ uq~ppppsq~ uq~q~§pppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppsrsroo.db.srtypes.Visibility°W-pÔ&(5xq~wxq~$ppxsq~ uq~ppppsq~)sq~ uq~ppppq~sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bddêqpxsq~sq~ uq~ppppq~~sq~ uq~pppppq~‡ptIllegalStateExceptionq~=xsq~ uq~ppppq~$sq~ uq~q~Çpppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~~sq~ uq~ppppppptIllegalStateException.javaq~$xsq~ uq~ppppsq~ uq~q~Ñpppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxsq~ uq~ppppsq~)sq~ uq~ppppq~sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bddqpxsq~zsq~ uq~ppppq~~sq~ uq~pppppq~‡pt StringBufferq~=xsq~ uq~ppppq~$sq~ uq~q~ïpppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~~sq~ uq~ppppppptStringBuffer.javaq~$xsq~ uq~ppppsq~ uq~q~ùpppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ )uq~,sq~bsq~ uq~ppppsq~isq~ uq~q~sq~bsq~ uq~ppppq~sq~ uq~ppppppptnameq~=xsq~ uq~pppppq~$q~yq~$q~{psrsroo.db.srtypes.TypeUseStyle#ˆ z2 xq~wxppsq~zsq~ ruq~“srsroo.db.DbDataMemberº¹Û»É¥þ… Z b_navigableZ b_transientZ b_volatileL m_aggregationtLsroo/db/srtypes/Aggregation;Lm_associationAsBackEndtLsroo/db/DbAssociation;Lm_associationAsFrontEndq~*Lm_initialValueq~L m_navigableq~ L m_transientq~ L m_volatileq~ xq~jsq~ uq~ppppq~%sq~ uq~pppppt™// ----------------------------------------------------- Instance Variables /** * The default Locale for our server. */ // ----------------------------------------------------- Instance Variables /** * The default Locale for our server. */ // ----------------------------------------------------- Instance Variables /** * The default Locale for our server. */ // ----------------------------------------------------- Instance Variables /** * The default Locale for our server. */ // ----------------------------------------------------- Instance Variables /** * The default Locale for our server. */ pt defaultLocaleq~=xsq~ uq~pppppsq~#q~yq~$sq~zsq~ uq~ppppsq~sq~ (uq~,q~5sq~zsq~ uq~ppppq~8sq~ uq~pppppq~‡pt Hashtableq~=xsq~ uq~ srsroo.db.DbImport†’&¦½ªVŠZb_allLm_allq~ Lm_importedObjecttLsroo/db/DbJDSemanticalObject;xq~ sq~ uq~ppppsq~Qsq~ uq~sq~Csq~ uq~ppppq~Hsq~ uq~ppppsq~#sq~zsq~ uq~ppppsq~sq~ uq~(sq~zsq~ uq~ppppq~Tsq~ uq~pppppq~‡pt InputStreamq~=xsq~ uq~sq~Csq~ uq~ppppsq~Qsq~ 6uq~9sq~Csq~ uq~ppppq~bsq~ uq~ppppsq~#sq~sq~ uq~ppppq~Tsq~ uq~ppppptJ//Class body not available: class generated only for referencing purposes.pt IOExceptionsq~#xsq~ &uq~,sq~Csq~ uq~ppppsq~Qsq~ uq~q~usq~Csq~ uq~ppppq~xsq~ uq~ppppsq~#sq~zsq~ uq~ppppq~8sq~ uq~pppppq~‡ptHashMapq~=xsq~ uq~sq~Csq~ uq~ppppsq~Qsq~ uq~sq~Csq~ uq~ppppq~Œsq~ uq~ppppsq~#srsroo.db.DbInterfaceZ?Ìà#®xq~sq~ uq~ sq~isq~ uq~sq~bsq~ uq~ppppq~™sq~ uq~ppppppptnamesq~#xsq~ uq~pppppsq~#sq~vq~¥q~{psq~#xsq~bsq~ uq~ppppq~™sq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥sq~zsq~ uq~ppppsq~sq~ uq~q~°sq~zsq~ uq~ppppq~³sq~ uq~pppppq~‡ptServletResponseq~=xsq~ uq~sq~Csq~ uq~ppppsq~Qsq~ uq~sq~Csq~ uq~ppppq~Ásq~ uq~ppppsq~#q~kxsq~Csq~ uq~ppppq~Ásq~ uq~ppppsq~#q~5xsq~Csq~ uq~ppppq~Ásq~ uq~ppppsq~#sq~zsq~ uq~ppppq~³sq~ uq~pppppq~‡ptServletContextq~=xsq~ uq~&sq~Csq~ uq~ppppq~Œsq~ uq~ppppsq~#q~Öxsq~Csq~ uq~ppppq~xsq~ uq~ppppsq~#q~Öxq~Ðsq~Csq~ uq~ppppsq~Qsq~ uq~sq~Csq~ uq~ppppq~ísq~ uq~ppppsq~#sq~•sq~ uq~ppppq~8sq~ uq~ppppptR//Interface body not available: interface generated only for referencing purposes.ptIteratorq~=xsq~ uq~!sq~Csq~ uq~ppppq~Œsq~ uq~ppppsq~#q~öxsq~Csq~ uq~ppppq~xsq~ uq~ppppsq~#q~öxsq~Csq~ uq~ppppsq~Qsq~ uq~ sq~Csq~ uq~ppppq~sq~ uq~ppppsq~#sq~zsq~ uq~ppppq~8sq~ uq~pppppq~‡pt ArrayListq~=xsq~ uq~q~sq~Csq~ uq~ppppsq~Qsq~ uq~q~sq~Csq~ uq~ppppq~"sq~ uq~ppppsq~#sq~zsq~ ðuq~úsq~(sq~ uq~ppppq~+sq~ uq~pppppt// ----------------------------------------------------- Instance Variables /** * Has configuration of this component been completed? */ // ----------------------------------------------------- Instance Variables /** * Has configuration of this component been completed? */ // ----------------------------------------------------- Instance Variables /** * Has configuration of this component been completed? */ // ----------------------------------------------------- Instance Variables /** * Indicates if configuration of this component been completed. */ // ----------------------------------------------------- Instance Variables /** * Indicates if configuration of this component been completed. */ pt configuredq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$sq~Ãxpppt falseq~$q~$q~$xsq~(sq~ uq~ppppq~+sq~ uq~pppppt¼/** * The set of exception handling configurations for this * action, if any, keyed by the type property. */ /** * The set of exception handling configurations for this * action, if any, keyed by the type property. */ /** * The set of exception handling configurations for this * action, if any, keyed by the type property. */ /** * The set of exception handling configurations for this * action, if any, keyed by the type property. */ /** * The set of exception handling configurations for this * action, if any, keyed by the type property. */ pt exceptionsq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt new HashMap()q~$q~$q~$xsq~(sq~ uq~ppppq~+sq~ uq~pppppt£/** * The set of local forward configurations for this action, if any, * keyed by the name property. */ /** * The set of local forward configurations for this action, if any, * keyed by the name property. */ /** * The set of local forward configurations for this action, if any, * keyed by the name property. */ /** * The set of local forward configurations for this action, if any, * keyed by the name property. */ /** * The set of local forward configurations for this action, if any, * keyed by the name property. */ ptforwardsq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt new HashMap()q~$q~$q~$xsq~(sq~ uq~ppppq~+sq~ uq~ppppptÚ// ------------------------------------------------------------- Properties /** * The application configuration with which we are associated. */ // ------------------------------------------------------------- Properties /** * The application configuration with which we are associated. */ // ------------------------------------------------------------- Properties /** * The application configuration with which we are associated. */ ptapplicationConfigq~=xsq~ uq~pppppq~$q~yq~$sq~zsq~ uuq~ysrsroo.db.DbConstructorЙÒî 8ô˜xq~isq~ uq~sq~bsq~ uq~ppppq~fsq~ uq~ppppppptprefixq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~bsq~ uq~pppppt // ----------------------------------------------------------- Constructors /** * Construct an ApplicationConfig object according to the specified * parameter values. * * @param prefix Context-relative URI prefix for this application */ ptApplicationConfigq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t; super(); this.prefix = prefix; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~bsq~ uq~ppppptq// ----------------------------------------------------- Instance Variables /** * The set of action configurations for this application, if any, * keyed by the path property. */ // ----------------------------------------------------- Instance Variables /** * The set of action configurations for this application, if any, * keyed by the path property. */ // ----------------------------------------------------- Instance Variables /** * The set of action configurations for this module, if any, * keyed by the path property. */ pt actionConfigsq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt new HashMap()q~$q~$q~$xsq~(sq~ uq~ppppq~bsq~ uq~pppppt¥/** * The set of JDBC data source configurations for this * application, if any, keyed by the key property. */ /** * The set of JDBC data source configurations for this * application, if any, keyed by the key property. */ /** * The set of JDBC data source configurations for this * module, if any, keyed by the key property. */ pt dataSourcesq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt new HashMap()q~$q~$q~$xsq~(sq~ uq~ppppq~bsq~ uq~pppppt®/** * The set of exception handling configurations for this * application, if any, keyed by the type property. */ /** * The set of exception handling configurations for this * application, if any, keyed by the type property. */ /** * The set of exception handling configurations for this * module, if any, keyed by the type property. */ pt exceptionsq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt new HashMap()q~$q~$q~$xsq~(sq~ uq~ppppq~bsq~ uq~pppppt“/** * The set of form bean configurations for this application, if any, * keyed by the name property. */ /** * The set of form bean configurations for this application, if any, * keyed by the name property. */ /** * The set of form bean configurations for this module, if any, * keyed by the name property. */ pt formBeansq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt new HashMap()q~$q~$q~$xsq~(sq~ uq~ppppq~bsq~ uq~pppppt¢/** * The set of global forward configurations for this application, if any, * keyed by the name property. */ /** * The set of global forward configurations for this application, if any, * keyed by the name property. */ /** * The set of global forward configurations for this module, if any, * keyed by the name property. */ ptforwardsq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt new HashMap()q~$q~$q~$xsq~(sq~ uq~ppppq~bsq~ uq~pppppt¨/** * The set of message resources configurations for this * application, if any, keyed by the key property. */ /** * The set of message resources configurations for this * application, if any, keyed by the key property. */ /** * The set of message resources configurations for this * module, if any, keyed by the key property. */ ptmessageResourcesq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt new HashMap()q~$q~$q~$xsq~(sq~ uq~ppppq~bsq~ uq~pppppt®/** * The set of configured plug in modules for this application, * if any, in the order they were declared and configured. */ /** * The set of configured plug in modules for this application, * if any, in the order they were declared and configured. */ /** * The set of configured plug-in Actions for this module, * if any, in the order they were declared and configured. */ ptplugInsq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt new ArrayList()q~$q~$q~$xsq~(sq~ uq~ppppq~bsq~ uq~pppppt4// ------------------------------------------------------------- Properties /** * Has this application been completely configured yet? Once this flag * has been set, any attempt to modify the configuration will return an * IllegalStateException. */ // ------------------------------------------------------------- Properties /** * Has this application been completely configured yet. Once this flag * has been set, any attempt to modify the configuration will return an * IllegalStateException. */ // ------------------------------------------------------------- Properties /** * Has this module been completely configured yet. Once this flag * has been set, any attempt to modify the configuration will return an * IllegalStateException. */ pt configuredq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt falseq~$q~$q~$xsq~isq~ uq~ppppq~bsq~ uq~pppppppt getConfiguredq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t) return (this.configured); sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~bsq~ uq~ppppptè/** * The controller configuration object for this application. */ /** * The controller configuration object for this application. */ /** * The controller configuration object for this module. */ ptcontrollerConfigq~=xsq~ uq~pppppq~$q~yq~$sq~zsq~ ˆuq~‰sq~(sq~ uq~ppppq~sq~ uq~ppppptÕ// ----------------------------------------------------- Instance Variables /** * Has this component been completely configured? */ // ----------------------------------------------------- Instance Variables /** * Has this component been completely configured? */ // ----------------------------------------------------- Instance Variables /** * Has this component been completely configured? */ // ----------------------------------------------------- Instance Variables /** * Has this component been completely configured? */ // ----------------------------------------------------- Instance Variables /** * Has this component been completely configured? */ pt configuredq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt falseq~$q~$q~$xsq~(sq~ uq~ppppq~sq~ uq~pppppt²// ------------------------------------------------------------- Properties /** * The input buffer size for file uploads. */ // ------------------------------------------------------------- Properties /** * The input buffer size for file uploads. */ // ------------------------------------------------------------- Properties /** * The input buffer size for file uploads. */ // ------------------------------------------------------------- Properties /** * The input buffer size for file uploads. */ // ------------------------------------------------------------- Properties /** * The input buffer size for file uploads. */ pt bufferSizeq~=xsq~ uq~pppppq~$q~yq~$sq~sq~ uq~ppppq~sq~ uq~ppppppptintq~$xsq~ uq~ppppq~$sq~ uq~sq~)sq~ uq~ppppq~5sq~ uq~ppppq~=sq~ uq~ppppsq~ uq~ppppsq~Bddpxq~ pppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~sq~ uq~ppppppptint.javaq~$xsq~ uq~ppppsq~ uq~q~ pppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ .uq~Ésq~(sq~ uq~ppppsq~zsq~ ActionMessage
      objects (represented * as an ArrayList) for each property, keyed by property name. */ // ----------------------------------------------------- Instance Variables /** * The accumulated set of ActionMessage objects (represented * as an ArrayList) for each property, keyed by property name. */ // ----------------------------------------------------- Instance Variables /** * The accumulated set of ActionMessage objects (represented * as an ArrayList) for each property, keyed by property name. */ // ----------------------------------------------------- Instance Variables /** * The accumulated set of ActionMessage objects (represented * as an ArrayList) for each property, keyed by property name. */ // ----------------------------------------------------- Instance Variables /** * The accumulated set of ActionMessage objects (represented * as an ArrayList) for each property, keyed by property name. */ ptmessagesq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt new HashMap()q~$q~$q~$xq~Fsq~isq~ uq~sq~bsq~ uq~ppppq~jsq~ uq~ppppppptpropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppq~jsq~ uq~ppppppptmessageq~=xsq~ uq~pppppq~$q~yq~$sq~zsq~ *uq~,sq~esq~ uq~sq~bsq~ uq~ppppq~€sq~ uq~ppppppptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~}sq~ uq~ppppptÒ// ----------------------------------------------------------- Constructors /** * Construct an action message with no replacement values. * * @param key Message key for this message */ pt ActionMessageq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t@ this.key = key; this.values = null; sq~ uq~ppppq~$q~$xsq~esq~ uq~sq~bsq~ uq~ppppq~˜sq~ uq~ppppppptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppq~˜sq~ uq~ppppppptvalue0q~=xsq~ uq~pppppq~$q~yq~$sq~zsq~ uq~ppppq~~sq~ uq~pppppq~‡ptObjectq~=xsq~ uq~ppppq~$sq~ uq~sq~)sq~ uq~ppppq~sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bdd@qpxq~«pppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~~sq~ uq~pppppppt Object.javaq~$xsq~ uq~ppppsq~ uq~q~«pppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ êuq~4sq~bsq~ uq~ppppsq~esq~ uq~sq~bsq~ uq~ppppq~Ôsq~ uq~ppppppptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xq~Ñppsq~zsq~ uq~"sq~esq~ uq~sq~bsq~ uq~ppppq~âsq~ uq~ppppppptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~ßsq~ uq~ppppptÖ// ----------------------------------------------------------- Constructors /** * Construct an action error with no replacement values. * * @param key Message key for this error message */ pt ActionErrorq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t super(key); sq~ uq~ppppq~$q~$xq~Ôsq~esq~ uq~sq~bsq~ uq~ppppq~úsq~ uq~ppppppptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppq~úsq~ uq~ppppppptvalue0q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xsq~bsq~ uq~ppppq~úsq~ uq~ppppppptvalue1q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xpq~ßsq~ uq~ppppptñ/** * Construct an action error with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value */ pq~ðq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t/ super(key, value0, value1); sq~ uq~ppppq~$q~$xsq~esq~ uq~sq~bsq~ uq~ppppq~!sq~ uq~ppppppptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppq~!sq~ uq~ppppppptvalue0q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xsq~bsq~ uq~ppppq~!sq~ uq~ppppppptvalue1q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xsq~bsq~ uq~ppppq~!sq~ uq~ppppppptvalue2q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xq~ßsq~ uq~pppppt/** * Construct an action error with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value * @param value2 Third replacement value */ pq~ðq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t7 super(key, value0, value1, value2); sq~ uq~ppppq~$q~$xsq~esq~ uq~ sq~bsq~ uq~ppppq~Psq~ uq~ppppppptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppq~Psq~ uq~ppppppptvalue0q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xsq~bsq~ uq~ppppq~Psq~ uq~ppppppptvalue1q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xsq~bsq~ uq~ppppq~Psq~ uq~ppppppptvalue2q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xsq~bsq~ uq~ppppq~Psq~ uq~ppppppptvalue3q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xppppq~ßsq~ uq~ppppptN/** * Construct an action error with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value * @param value2 Third replacement value * @param value3 Fourth replacement value */ pq~ðq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t? super(key, value0, value1, value2, value3); sq~ uq~ppppq~$q~$xsq~esq~ uq~sq~bsq~ uq~ppppq~‡sq~ uq~ppppppptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppq~‡sq~ uq~ppppppptvaluesq~=xsq~ uq~pppppq~$q~yq~$q~«t[]q~$xppq~ßsq~ uq~ppppptÀ/** * Construct an action error with the specified replacement values. * * @param key Message key for this message * @param values Array of replacement values */ pq~ðq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t' super(key, values); sq~ uq~ppppq~$q~$xsq~esq~ uq~sq~bsq~ uq~ppppq~§sq~ uq~ppppppptkeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~ßsq~ uq~ppppptÖ// ----------------------------------------------------------- Constructors /** * Construct an action error with no replacement values. * * @param key Message key for this error message */ pq~ðq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥sq~Ãxq~¥t super(key); sq~ uq~ppppq~¥q~¥xsq~esq~ uq~sq~bsq~ uq~ppppq~¿sq~ uq~ppppppptkeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq~¿sq~ uq~ppppppptvalue0q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xppq~ßsq~ uq~ppppptÂ/** * Construct an action error with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value */ pq~ðq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t' super(key, value0); sq~ uq~ppppq~¥q~¥xsq~esq~ uq~sq~bsq~ uq~ppppq~Þsq~ uq~ppppppptkeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq~Þsq~ uq~ppppppptvalue0q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~bsq~ uq~ppppq~Þsq~ uq~ppppppptvalue1q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xpq~ßsq~ uq~ppppptñ/** * Construct an action error with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value */ pq~ðq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t/ super(key, value0, value1); sq~ uq~ppppq~¥q~¥xsq~esq~ uq~sq~bsq~ uq~ppppq~sq~ uq~ppppppptkeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq~sq~ uq~ppppppptvalue0q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~bsq~ uq~ppppq~sq~ uq~ppppppptvalue1q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~bsq~ uq~ppppq~sq~ uq~ppppppptvalue2q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xq~ßsq~ uq~pppppt/** * Construct an action error with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value * @param value2 Third replacement value */ pq~ðq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t7 super(key, value0, value1, value2); sq~ uq~ppppq~¥q~¥xsq~esq~ uq~ sq~bsq~ uq~ppppq~4sq~ uq~ppppppptkeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq~4sq~ uq~ppppppptvalue0q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~bsq~ uq~ppppq~4sq~ uq~ppppppptvalue1q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~bsq~ uq~ppppq~4sq~ uq~ppppppptvalue2q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~bsq~ uq~ppppq~4sq~ uq~ppppppptvalue3q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xppppq~ßsq~ uq~ppppptN/** * Construct an action error with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value * @param value2 Third replacement value * @param value3 Fourth replacement value */ pq~ðq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t? super(key, value0, value1, value2, value3); sq~ uq~ppppq~¥q~¥xsq~esq~ uq~sq~bsq~ uq~ppppq~ksq~ uq~ppppppptkeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq~ksq~ uq~ppppppptvaluesq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«t[]q~§xppq~ßsq~ uq~ppppptÀ/** * Construct an action error with the specified replacement values. * * @param key Message key for this message * @param values Array of replacement values */ pq~ðq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t' super(key, values); sq~ uq~ppppq~¥q~¥xsq~esq~ uq~sq~bsq~ uq~ppppq~‹sq~ uq~ppppppptkeyq~rxsq~ uq~pppppsq~#sq~vq~–q~{psq~#xpppq~ßsq~ uq~ppppptÖ// ----------------------------------------------------------- Constructors /** * Construct an action error with no replacement values. * * @param key Message key for this error message */ pq~ðq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–sq~Ãxq~–t super(key); sq~ uq~ppppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppq~¦sq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq~¦sq~ uq~ppppppptvalue0q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xppq~ßsq~ uq~ppppptÂ/** * Construct an action error with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value */ pq~ðq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t' super(key, value0); sq~ uq~ppppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppq~Åsq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq~Åsq~ uq~ppppppptvalue0q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~bsq~ uq~ppppq~Åsq~ uq~ppppppptvalue1q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xpq~ßsq~ uq~ppppptñ/** * Construct an action error with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value */ pq~ðq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t/ super(key, value0, value1); sq~ uq~ppppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppq~ìsq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq~ìsq~ uq~ppppppptvalue0q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~bsq~ uq~ppppq~ìsq~ uq~ppppppptvalue1q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~bsq~ uq~ppppq~ìsq~ uq~ppppppptvalue2q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xq~ßsq~ uq~pppppt/** * Construct an action error with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value * @param value2 Third replacement value */ pq~ðq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t7 super(key, value0, value1, value2); sq~ uq~ppppq~–q~–xsq~esq~ uq~ sq~bsq~ uq~ppppq~sq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq~sq~ uq~ppppppptvalue0q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~bsq~ uq~ppppq~sq~ uq~ppppppptvalue1q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~bsq~ uq~ppppq~sq~ uq~ppppppptvalue2q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~bsq~ uq~ppppq~sq~ uq~ppppppptvalue3q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xppppq~ßsq~ uq~ppppptN/** * Construct an action error with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value * @param value2 Third replacement value * @param value3 Fourth replacement value */ pq~ðq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t? super(key, value0, value1, value2, value3); sq~ uq~ppppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppq~Rsq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq~Rsq~ uq~ppppppptvaluesq~rxsq~ uq~pppppq~–q~—q~–q~«t[]q~˜xppq~ßsq~ uq~ppppptÀ/** * Construct an action error with the specified replacement values. * * @param key Message key for this message * @param values Array of replacement values */ pq~ðq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t' super(key, values); sq~ uq~ppppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppq~rsq~ uq~ppppppptkeysq~#xsq~ uq~pppppsq~#sq~vq~~q~{psq~#xpppq~ßsq~ uq~ppppptÖ// ----------------------------------------------------------- Constructors /** * Construct an action error with no replacement values. * * @param key Message key for this error message */ pq~ðq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~sq~Ãxq~~t super(key); sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq~Žsq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq~Žsq~ uq~ppppppptvalue0q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xppq~ßsq~ uq~ppppptÂ/** * Construct an action error with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value */ pq~ðq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t' super(key, value0); sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq~­sq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq~­sq~ uq~ppppppptvalue0q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~bsq~ uq~ppppq~­sq~ uq~ppppppptvalue1q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xpq~ßsq~ uq~ppppptñ/** * Construct an action error with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value */ pq~ðq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t/ super(key, value0, value1); sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq~Ôsq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq~Ôsq~ uq~ppppppptvalue0q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~bsq~ uq~ppppq~Ôsq~ uq~ppppppptvalue1q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~bsq~ uq~ppppq~Ôsq~ uq~ppppppptvalue2q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xq~ßsq~ uq~pppppt/** * Construct an action error with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value * @param value2 Third replacement value */ pq~ðq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t7 super(key, value0, value1, value2); sq~ uq~ppppq~~q~~xsq~esq~ uq~ sq~bsq~ uq~ppppq~sq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq~sq~ uq~ppppppptvalue0q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~bsq~ uq~ppppq~sq~ uq~ppppppptvalue1q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~bsq~ uq~ppppq~sq~ uq~ppppppptvalue2q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~bsq~ uq~ppppq~sq~ uq~ppppppptvalue3q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xppppq~ßsq~ uq~ppppptN/** * Construct an action error with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value * @param value2 Third replacement value * @param value3 Fourth replacement value */ pq~ðq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t? super(key, value0, value1, value2, value3); sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq~:sq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq~:sq~ uq~ppppppptvaluesq~{xsq~ uq~pppppq~~q~q~~q~«t[]q~€xppq~ßsq~ uq~ppppptÀ/** * Construct an action error with the specified replacement values. * * @param key Message key for this message * @param values Array of replacement values */ pq~ðq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t' super(key, values); sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq~Zsq~ uq~ppppppptkeysq~#xsq~ uq~pppppsq~#sq~vq~fq~{psq~#xpppq~ßsq~ uq~ppppptÖ// ----------------------------------------------------------- Constructors /** * Construct an action error with no replacement values. * * @param key Message key for this error message */ pq~ðq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fsq~Ãxq~ft super(key); sq~ uq~ppppq~fq~fxsq~esq~ uq~sq~bsq~ uq~ppppq~vsq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq~vsq~ uq~ppppppptvalue0q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxppq~ßsq~ uq~ppppptÂ/** * Construct an action error with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value */ pq~ðq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft' super(key, value0); sq~ uq~ppppq~fq~fxsq~esq~ uq~sq~bsq~ uq~ppppq~•sq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq~•sq~ uq~ppppppptvalue0q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~bsq~ uq~ppppq~•sq~ uq~ppppppptvalue1q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxpq~ßsq~ uq~ppppptñ/** * Construct an action error with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value */ pq~ðq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft/ super(key, value0, value1); sq~ uq~ppppq~fq~fxsq~esq~ uq~sq~bsq~ uq~ppppq~¼sq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq~¼sq~ uq~ppppppptvalue0q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~bsq~ uq~ppppq~¼sq~ uq~ppppppptvalue1q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~bsq~ uq~ppppq~¼sq~ uq~ppppppptvalue2q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxq~ßsq~ uq~pppppt/** * Construct an action error with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value * @param value2 Third replacement value */ pq~ðq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft7 super(key, value0, value1, value2); sq~ uq~ppppq~fq~fxsq~esq~ uq~ sq~bsq~ uq~ppppq~ësq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq~ësq~ uq~ppppppptvalue0q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~bsq~ uq~ppppq~ësq~ uq~ppppppptvalue1q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~bsq~ uq~ppppq~ësq~ uq~ppppppptvalue2q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~bsq~ uq~ppppq~ësq~ uq~ppppppptvalue3q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxppppq~ßsq~ uq~ppppptN/** * Construct an action error with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value * @param value2 Third replacement value * @param value3 Fourth replacement value */ pq~ðq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft? super(key, value0, value1, value2, value3); sq~ uq~ppppq~fq~fxsq~esq~ uq~sq~bsq~ uq~ppppq~"sq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq~"sq~ uq~ppppppptvaluesq~cxsq~ uq~pppppq~fq~gq~fq~«t[]q~hxppq~ßsq~ uq~ppppptÀ/** * Construct an action error with the specified replacement values. * * @param key Message key for this message * @param values Array of replacement values */ pq~ðq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft' super(key, values); sq~ uq~ppppq~fq~fxppppsq~sq~ 0uq~9sq~zsq~ |uq~‰sq~(sq~ uq~ppppq~Esq~ uq~ppppptj// ----------------------------------------------------- Manifest Constants /** * The context attributes key under which our ActionServlet * instance will be stored. */ // ----------------------------------------------------- Manifest Constants /** * The context attributes key under which our ActionServlet * instance will be stored. * * @since Struts 1.1 */ // ----------------------------------------------------- Manifest Constants // NOTE - The definitions of manifest constant values have moved from // here to the org.apache.struts.Globals class, so that they can be // referenced without having to maintain a reference to the Action class // itself. Any future new constant values should be defined there // instead of here. /** * The context attributes key under which our ActionServlet * instance will be stored. * * @since Struts 1.1 */ // ----------------------------------------------------- Manifest Constants // NOTE - The definitions of manifest constant values have moved from // here to the org.apache.struts.Globals class, so that they can be // referenced without having to maintain a reference to the Action class // itself. Any future new constant values should be defined there // instead of here. /** * The context attributes key under which our ActionServlet * instance will be stored. * @deprecated Use Globals.ACTION_SERVLET_KEY instead. * @since Struts 1.1 */ // ----------------------------------------------------- Manifest Constants // NOTE - The definitions of manifest constant values have moved from // here to the org.apache.struts.Globals class, so that they can be // referenced without having to maintain a reference to the Action class // itself. Any future new constant values should be defined there // instead of here. /** * The context attributes key under which our ActionServlet * instance will be stored. * @deprecated Use Globals.ACTION_SERVLET_KEY instead. * @since Struts 1.1 */ ptACTION_SERVLET_KEYq~=xsq~ uq~pppppsq~#q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxpppt Globals.ACTION_SERVLET_KEYq~$q~$q~$xsq~(sq~ uq~ppppq~Esq~ uq~pppppt 7/** *

      The base of the context attributes key under which our * ApplicationConfig data structure will be stored. This * will be suffixed with the actual application prefix (including the * leading "/" character) to form the actual attributes key.

      * *

      For each request processed by the controller servlet, the * ApplicationConfig object for the application selected by * the request URI currently being processed will also be exposed under * this key as a request attribute.

      */ /** *

      The base of the context attributes key under which our * ApplicationConfig data structure will be stored. This * will be suffixed with the actual application prefix (including the * leading "/" character) to form the actual attributes key.

      * *

      For each request processed by the controller servlet, the * ApplicationConfig object for the application selected by * the request URI currently being processed will also be exposed under * this key as a request attribute.

      * * @since Struts 1.1 */ /** *

      The base of the context attributes key under which our * ApplicationConfig data structure will be stored. This * will be suffixed with the actual module prefix (including the * leading "/" character) to form the actual attributes key.

      * *

      For each request processed by the controller servlet, the * ApplicationConfig object for the module selected by * the request URI currently being processed will also be exposed under * this key as a request attribute.

      * * @since Struts 1.1 */ /** *

      The base of the context attributes key under which our * ModuleConfig data structure will be stored. This * will be suffixed with the actual module prefix (including the * leading "/" character) to form the actual attributes key.

      * *

      For each request processed by the controller servlet, the * ModuleConfig object for the module selected by * the request URI currently being processed will also be exposed under * this key as a request attribute.

      * * @since Struts 1.1 * @deprecated Replaced by {@link org.apache.struts.Globals#MODULE_KEY} */ /** *

      The base of the context attributes key under which our * ModuleConfig data structure will be stored. This * will be suffixed with the actual module prefix (including the * leading "/" character) to form the actual attributes key.

      * *

      For each request processed by the controller servlet, the * ModuleConfig object for the module selected by * the request URI currently being processed will also be exposed under * this key as a request attribute.

      * * @since Struts 1.1 * @deprecated Replaced by {@link org.apache.struts.Globals#MODULE_KEY} */ ptAPPLICATION_KEYq~=xsq~ uq~pppppsq~#q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxpppt Globals.MODULE_KEYq~$q~$q~$xsq~(sq~ uq~ppppq~Esq~ uq~ppppptj/** * The context attributes key under which our default * configured data source (which must implement * javax.sql.DataSource) is stored, * if one is configured for this application. */ /** * The context attributes key under which our default * configured data source (which must implement * javax.sql.DataSource) is stored, * if one is configured for this application. */ /** * The context attributes key under which our default * configured data source (which must implement * javax.sql.DataSource) is stored, * if one is configured for this module. */ /** * The context attributes key under which our default * configured data source (which must implement * javax.sql.DataSource) is stored, * if one is configured for this module. * @deprecated Replaced by {@link org.apache.struts.Globals#DATA_SOURCE_KEY} */ /** * The context attributes key under which our default * configured data source (which must implement * javax.sql.DataSource) is stored, * if one is configured for this module. * @deprecated Replaced by {@link org.apache.struts.Globals#DATA_SOURCE_KEY} */ ptDATA_SOURCE_KEYq~=xsq~ uq~pppppsq~#q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxpppt Globals.DATA_SOURCE_KEYq~$q~$q~$xsq~(sq~ uq~ppppq~Esq~ uq~pppppt /** * The request attributes key under which your action should store an * org.apache.struts.action.ActionErrors object, if you * are using the corresponding custom tag library elements. */ /** * The request attributes key under which your action should store an * org.apache.struts.action.ActionErrors object, if you * are using the corresponding custom tag library elements. */ /** * The request attributes key under which your action should store an * org.apache.struts.action.ActionErrors object, if you * are using the corresponding custom tag library elements. */ /** * The request attributes key under which your action should store an * org.apache.struts.action.ActionErrors object, if you * are using the corresponding custom tag library elements. * @deprecated Replaced by {@link org.apache.struts.Globals#ERROR_KEY} */ /** * The request attributes key under which your action should store an * org.apache.struts.action.ActionErrors object, if you * are using the corresponding custom tag library elements. * @deprecated Replaced by {@link org.apache.struts.Globals#ERROR_KEY} */ pt ERROR_KEYq~=xsq~ uq~pppppsq~#q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxpppt Globals.ERROR_KEYq~$q~$q~$xsq~(sq~ uq~ppppq~Esq~ uq~ppppptˆ/** * The request attributes key under which Struts custom tags might store a * Throwable that caused them to report a JspException at * runtime. This value can be used on an error page to provide more * detailed information about what really went wrong. */ /** * The request attributes key under which Struts custom tags might store a * Throwable that caused them to report a JspException at * runtime. This value can be used on an error page to provide more * detailed information about what really went wrong. */ /** * The request attributes key under which Struts custom tags might store a * Throwable that caused them to report a JspException at * runtime. This value can be used on an error page to provide more * detailed information about what really went wrong. */ /** * The request attributes key under which Struts custom tags might store a * Throwable that caused them to report a JspException at * runtime. This value can be used on an error page to provide more * detailed information about what really went wrong. * @deprecated Replaced by {@link org.apache.struts.Globals#EXCEPTION_KEY} */ /** * The request attributes key under which Struts custom tags might store a * Throwable that caused them to report a JspException at * runtime. This value can be used on an error page to provide more * detailed information about what really went wrong. * @deprecated Replaced by {@link org.apache.struts.Globals#EXCEPTION_KEY} */ pt EXCEPTION_KEYq~=xsq~ uq~pppppsq~#q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxpppt Globals.EXCEPTION_KEYq~$q~$q~$xsq~(sq~ uq~ppppq~Esq~ uq~ppppptÒ/** * The context attributes key under which our * org.apache.struts.action.ActionFormBeans collection * is normally stored, unless overridden when initializing our * ActionServlet. * * @deprecated Replaced by collection in ApplicationConfig */ /** * The context attributes key under which our * org.apache.struts.action.ActionFormBeans collection * is normally stored, unless overridden when initializing our * ActionServlet. * * @deprecated Replaced by collection in ApplicationConfig */ /** * The context attributes key under which our * org.apache.struts.action.ActionFormBeans collection * is normally stored, unless overridden when initializing our * ActionServlet. * * @deprecated Replaced by collection in ApplicationConfig */ /** * The context attributes key under which our * org.apache.struts.action.ActionFormBeans collection * is normally stored, unless overridden when initializing our * ActionServlet. * * @deprecated Replaced by collection in ModuleConfig */ /** * The context attributes key under which our * org.apache.struts.action.ActionFormBeans collection * is normally stored, unless overridden when initializing our * ActionServlet. * * @deprecated Replaced by collection in ModuleConfig */ ptFORM_BEANS_KEYq~=xsq~ uq~pppppsq~#q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxpppt Globals.FORM_BEANS_KEYq~$q~$q~$xsq~(sq~ uq~ppppq~Esq~ uq~ppppptÒ/** * The context attributes key under which our * org.apache.struts.action.ActionForwards collection * is normally stored, unless overridden when initializing our * ActionServlet. * * @deprecated Replaced by collection in ApplicationConfig. */ /** * The context attributes key under which our * org.apache.struts.action.ActionForwards collection * is normally stored, unless overridden when initializing our * ActionServlet. * * @deprecated Replaced by collection in ApplicationConfig. */ /** * The context attributes key under which our * org.apache.struts.action.ActionForwards collection * is normally stored, unless overridden when initializing our * ActionServlet. * * @deprecated Replaced by collection in ApplicationConfig. */ /** * The context attributes key under which our * org.apache.struts.action.ActionForwards collection * is normally stored, unless overridden when initializing our * ActionServlet. * * @deprecated Replaced by collection in ModuleConfig. */ /** * The context attributes key under which our * org.apache.struts.action.ActionForwards collection * is normally stored, unless overridden when initializing our * ActionServlet. * * @deprecated Replaced by collection in ModuleConfig. */ pt FORWARDS_KEYq~=xsq~ uq~pppppsq~#q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxpppt Globals.FORWARDS_KEYq~$q~$q~$xsq~(sq~ uq~ppppq~Esq~ uq~pppppth/** * The session attributes key under which the user's selected * java.util.Locale is stored, if any. If no such * attribute is found, the system default locale * will be used when retrieving internationalized messages. If used, this * attribute is typically set during user login processing. */ /** * The session attributes key under which the user's selected * java.util.Locale is stored, if any. If no such * attribute is found, the system default locale * will be used when retrieving internationalized messages. If used, this * attribute is typically set during user login processing. */ /** * The session attributes key under which the user's selected * java.util.Locale is stored, if any. If no such * attribute is found, the system default locale * will be used when retrieving internationalized messages. If used, this * attribute is typically set during user login processing. */ /** * The session attributes key under which the user's selected * java.util.Locale is stored, if any. If no such * attribute is found, the system default locale * will be used when retrieving internationalized messages. If used, this * attribute is typically set during user login processing. * @deprecated Replaced by {@link org.apache.struts.Globals#LOCALE_KEY} */ /** * The session attributes key under which the user's selected * java.util.Locale is stored, if any. If no such * attribute is found, the system default locale * will be used when retrieving internationalized messages. If used, this * attribute is typically set during user login processing. * @deprecated Replaced by {@link org.apache.struts.Globals#LOCALE_KEY} */ pt LOCALE_KEYq~=xsq~ uq~pppppsq~#q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxpppt Globals.LOCALE_KEYq~$q~$q~$xsq~(sq~ uq~ppppq~Esq~ uq~pppppts/** * The request attributes key under which our * org.apache.struts.ActionMapping instance * is passed. */ /** * The request attributes key under which our * org.apache.struts.ActionMapping instance * is passed. */ /** * The request attributes key under which our * org.apache.struts.ActionMapping instance * is passed. */ /** * The request attributes key under which our * org.apache.struts.ActionMapping instance * is passed. * @deprecated Replaced by {@link org.apache.struts.Globals#MAPPING_KEY} */ /** * The request attributes key under which our * org.apache.struts.ActionMapping instance * is passed. * @deprecated Replaced by {@link org.apache.struts.Globals#MAPPING_KEY} */ pt MAPPING_KEYq~=xsq~ uq~pppppsq~#q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxpppt Globals.MAPPING_KEYq~$q~$q~$xsq~(sq~ uq~ppppq~Esq~ uq~ppppptÍ/** * The context attributes key under which our * org.apache.struts.action.ActionMappings collection * is normally stored, unless overridden when initializing our * ActionServlet. * * @deprecated Replaced by collection in ApplicationConfig */ /** * The context attributes key under which our * org.apache.struts.action.ActionMappings collection * is normally stored, unless overridden when initializing our * ActionServlet. * * @deprecated Replaced by collection in ApplicationConfig */ /** * The context attributes key under which our * org.apache.struts.action.ActionMappings collection * is normally stored, unless overridden when initializing our * ActionServlet. * * @deprecated Replaced by collection in ApplicationConfig */ /** * The context attributes key under which our * org.apache.struts.action.ActionMappings collection * is normally stored, unless overridden when initializing our * ActionServlet. * * @deprecated Replaced by collection in ModuleConfig */ /** * The context attributes key under which our * org.apache.struts.action.ActionMappings collection * is normally stored, unless overridden when initializing our * ActionServlet. * * @deprecated Replaced by collection in ModuleConfig */ pt MAPPINGS_KEYq~=xsq~ uq~pppppsq~#q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxpppt Globals.MAPPINGS_KEYq~$q~$q~$xsq~(sq~ uq~ppppq~Esq~ uq~ppppptŸ/** * The request attributes key under which your action should store an * org.apache.struts.action.ActionMessages object, if you * are using the corresponding custom tag library elements. */ /** * The request attributes key under which your action should store an * org.apache.struts.action.ActionMessages object, if you * are using the corresponding custom tag library elements. * * @since Struts 1.1 */ /** * The request attributes key under which your action should store an * org.apache.struts.action.ActionMessages object, if you * are using the corresponding custom tag library elements. * * @since Struts 1.1 */ /** * The request attributes key under which your action should store an * org.apache.struts.action.ActionMessages object, if you * are using the corresponding custom tag library elements. * * @since Struts 1.1 * @deprecated Replaced by {@link org.apache.struts.Globals#MESSAGE_KEY} */ /** * The request attributes key under which your action should store an * org.apache.struts.action.ActionMessages object, if you * are using the corresponding custom tag library elements. * * @since Struts 1.1 * @deprecated Replaced by {@link org.apache.struts.Globals#MESSAGE_KEY} */ pt MESSAGE_KEYq~=xsq~ uq~pppppsq~#q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxpppt Globals.MESSAGE_KEYq~$q~$q~$xsq~(sq~ uq~ppppq~Esq~ uq~pppppt f/** *

      The base of the context attributes key under which our * application MessageResources will be stored. This * will be suffixed with the actual application prefix (including the * leading "/" character) to form the actual resources key.

      * *

      For each request processed by the controller servlet, the * MessageResources object for the application selected by * the request URI currently being processed will also be exposed under * this key as a request attribute.

      */ /** *

      The base of the context attributes key under which our * application MessageResources will be stored. This * will be suffixed with the actual application prefix (including the * leading "/" character) to form the actual resources key.

      * *

      For each request processed by the controller servlet, the * MessageResources object for the application selected by * the request URI currently being processed will also be exposed under * this key as a request attribute.

      */ /** *

      The base of the context attributes key under which our * module MessageResources will be stored. This * will be suffixed with the actual module prefix (including the * leading "/" character) to form the actual resources key.

      * *

      For each request processed by the controller servlet, the * MessageResources object for the module selected by * the request URI currently being processed will also be exposed under * this key as a request attribute.

      */ /** *

      The base of the context attributes key under which our * module MessageResources will be stored. This * will be suffixed with the actual module prefix (including the * leading "/" character) to form the actual resources key.

      * *

      For each request processed by the controller servlet, the * MessageResources object for the module selected by * the request URI currently being processed will also be exposed under * this key as a request attribute.

      * @deprecated Use Globals.MESSAGES_KEY instead. */ /** *

      The base of the context attributes key under which our * module MessageResources will be stored. This * will be suffixed with the actual module prefix (including the * leading "/" character) to form the actual resources key.

      * *

      For each request processed by the controller servlet, the * MessageResources object for the module selected by * the request URI currently being processed will also be exposed under * this key as a request attribute.

      * @deprecated Use Globals.MESSAGES_KEY instead. */ pt MESSAGES_KEYq~=xsq~ uq~pppppsq~#q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxpppt Globals.MESSAGES_KEYq~$q~$q~$xsq~(sq~ uq~ppppq~Esq~ uq~pppppt5/** * The request attributes key under which our multipart class is stored. */ /** * The request attributes key under which our multipart class is stored. */ /** * The request attributes key under which our multipart class is stored. */ /** * The request attributes key under which our multipart class is stored. * @deprecated Use Globals.MULTIPART_KEY instead. */ /** * The request attributes key under which our multipart class is stored. * @deprecated Use Globals.MULTIPART_KEY instead. */ pt MULTIPART_KEYq~=xsq~ uq~pppppsq~#q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxpppt Globals.MULTIPART_KEYq~$q~$q~$xsq~(sq~ uq~ppppq~Esq~ uq~pppppt­/** *

      The base of the context attributes key under which an array of * PlugIn instances will be stored. This * will be suffixed with the actual application prefix (including the * leading "/" character) to form the actual attributes key.

      */ /** *

      The base of the context attributes key under which an array of * PlugIn instances will be stored. This * will be suffixed with the actual application prefix (including the * leading "/" character) to form the actual attributes key.

      * @since Struts 1.1 */ /** *

      The base of the context attributes key under which an array of * PlugIn instances will be stored. This * will be suffixed with the actual module prefix (including the * leading "/" character) to form the actual attributes key.

      * @since Struts 1.1 */ /** *

      The base of the context attributes key under which an array of * PlugIn instances will be stored. This * will be suffixed with the actual module prefix (including the * leading "/" character) to form the actual attributes key.

      * @since Struts 1.1 * @deprecated Replaced by {@link org.apache.struts.Globals#PLUG_INS_KEY} */ /** *

      The base of the context attributes key under which an array of * PlugIn instances will be stored. This * will be suffixed with the actual module prefix (including the * leading "/" character) to form the actual attributes key.

      * @since Struts 1.1 * @deprecated Replaced by {@link org.apache.struts.Globals#PLUG_INS_KEY} */ pt PLUG_INS_KEYq~=xsq~ uq~pppppsq~#q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxpppt Globals.PLUG_INS_KEYq~$q~$q~$xsq~(sq~ uq~ppppq~Esq~ uq~pppppt/** *

      The base of the context attributes key under which our * RequestProcessor instance will be stored. This * will be suffixed with the actual application prefix (including the * leading "/" character) to form the actual attributes key.

      */ /** *

      The base of the context attributes key under which our * RequestProcessor instance will be stored. This * will be suffixed with the actual application prefix (including the * leading "/" character) to form the actual attributes key.

      * @since Struts 1.1 */ /** *

      The base of the context attributes key under which our * RequestProcessor instance will be stored. This * will be suffixed with the actual module prefix (including the * leading "/" character) to form the actual attributes key.

      * @since Struts 1.1 */ /** *

      The base of the context attributes key under which our * RequestProcessor instance will be stored. This * will be suffixed with the actual module prefix (including the * leading "/" character) to form the actual attributes key.

      * @since Struts 1.1 * @deprecated Use Globals.REQUEST_PROCESSOR_KEY instead. */ /** *

      The base of the context attributes key under which our * RequestProcessor instance will be stored. This * will be suffixed with the actual module prefix (including the * leading "/" character) to form the actual attributes key.

      * @since Struts 1.1 * @deprecated Use Globals.REQUEST_PROCESSOR_KEY instead. */ ptREQUEST_PROCESSOR_KEYq~=xsq~ uq~pppppsq~#q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxpppt' Globals.REQUEST_PROCESSOR_KEYq~$q~$q~$xsq~(sq~ uq~ppppq~Esq~ uq~pppppt~/** * The context attributes key under which we store the mapping defined * for our controller serlet, which will be either a path-mapped pattern * (/action/*) or an extension mapped pattern * (*.do). */ /** * The context attributes key under which we store the mapping defined * for our controller serlet, which will be either a path-mapped pattern * (/action/*) or an extension mapped pattern * (*.do). */ /** * The context attributes key under which we store the mapping defined * for our controller serlet, which will be either a path-mapped pattern * (/action/*) or an extension mapped pattern * (*.do). */ /** * The context attributes key under which we store the mapping defined * for our controller serlet, which will be either a path-mapped pattern * (/action/*) or an extension mapped pattern * (*.do). * @deprecated Use Globals.SERVLET_KEY instead. */ /** * The context attributes key under which we store the mapping defined * for our controller serlet, which will be either a path-mapped pattern * (/action/*) or an extension mapped pattern * (*.do). * @deprecated Use Globals.SERVLET_KEY instead. */ pt SERVLET_KEYq~=xsq~ uq~pppppsq~#q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxpppt Globals.SERVLET_KEYq~$q~$q~$xsq~(sq~ uq~ppppq~Esq~ uq~ppppptÂ/** * The session attributes key under which our transaction token is * stored, if it is used. */ /** * The session attributes key under which our transaction token is * stored, if it is used. */ /** * The session attributes key under which our transaction token is * stored, if it is used. */ /** * The session attributes key under which our transaction token is * stored, if it is used. * @deprecated Use Globals.TRANSACTION_TOKEN_KEY instead. */ /** * The session attributes key under which our transaction token is * stored, if it is used. * @deprecated Use Globals.TRANSACTION_TOKEN_KEY instead. */ ptTRANSACTION_TOKEN_KEYq~=xsq~ uq~pppppsq~#q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxpppt' Globals.TRANSACTION_TOKEN_KEYq~$q~$q~$xsq~(sq~ uq~ppppq~Esq~ uq~ppppptq// ----------------------------------------------------- Instance Variables /** * The system default Locale. */ // ----------------------------------------------------- Instance Variables /** * The system default Locale. */ // ----------------------------------------------------- Instance Variables /** * The system default Locale. */ // ----------------------------------------------------- Instance Variables /** * The system default Locale. */ // ----------------------------------------------------- Instance Variables /** * The system default Locale. */ pt defaultLocaleq~=xsq~ uq~pppppq~$q~yq~$q~5pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~;xpppt Locale.getDefault()q~$q~$q~$xsq~(sq~ uq~ppppq~Esq~ uq~pppppt^/** * The controller servlet to which we are attached. */ /** * The controller servlet to which we are attached. */ /** * The controller servlet to which we are attached. */ /** * The controller servlet to which we are attached. */ /** * The controller servlet to which we are attached. */ ptservletq~=xsq~ uq~pppppq~$q~yq~$sq~zsq~ ½uq~Åsq~(sq~ uq~ppppq~ psq~ uq~ppppptô// ----------------------------------------------------- Instance Variables /** * The context-relative path to our configuration resource for the * default sub-application. */ // ----------------------------------------------------- Instance Variables /** * The context-relative path to our configuration resource for the * default sub-application. */ // ----------------------------------------------------- Instance Variables /** * The context-relative path to our configuration resource for the * default application module. */ // ----------------------------------------------------- Instance Variables /** * Comma-separated list of context-relative path(s) to our configuration * resource(s) for the default module. */ // ----------------------------------------------------- Instance Variables /** * Comma-separated list of context-relative path(s) to our configuration * resource(s) for the default module. */ ptconfigq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt "/WEB-INF/struts-config.xml"q~$q~$q~$xsq~(sq~ uq~ppppq~ psq~ uq~pppppt¬/** * The Digester used to produce ApplicationConfig objects from a * Struts configuration file. */ /** * The Digester used to produce ApplicationConfig objects from a * Struts configuration file. * @since Struts 1.1 */ /** * The Digester used to produce ApplicationConfig objects from a * Struts configuration file. * @since Struts 1.1 */ /** * The Digester used to produce ModuleConfig objects from a * Struts configuration file. * @since Struts 1.1 */ /** * The Digester used to produce ModuleConfig objects from a * Struts configuration file. * @since Struts 1.1 */ ptconfigDigesterq~=xsq~ uq~pppppq~$q~yq~$sq~zsq~ uq~ppppsq~sq~ uq~q~ Šsq~zsq~ uq~ppppq~ sq~ uq~pppppq~‡ptRuleq~=xsq~ uq~sq~Csq~ uq~ppppsq~Qsq~ uq~ sq~Csq~ uq~ppppq~ ›sq~ uq~ppppsq~#sq~zsq~ uq~ppppq~ sq~ uq~pppppq~‡ptAbstractObjectCreationFactoryq~=xsq~ uq~q~ žpppq~$sq~ uq~sq~)sq~ uq~ppppsq~/sq~ uq~ sq~)sq~ uq~ppppq~ ±sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bddðqpxq~ Šsq~)sq~ uq~ppppq~ ±sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bddqpxq~ q~ ®sq~)sq~ uq~ppppq~ ±sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bddqqpxsq~zsq~ uq~ppppq~ sq~ uq~pppppq~‡pt RuleSetBaseq~=xsq~ uq~sq~Csq~ uq~ppppq~ ›sq~ uq~ppppsq~#q~ Òxpppq~$sq~ uq~q~ Èsq~)sq~ uq~ppppsq~/sq~ uq~"sq~)sq~ uq~ppppq~ åsq~ uq~ppppq~fsq~ uq~ppppsq~ uq~ppppsq~Bt†pxsq~zsq~ Iuq~Jsq~(sq~ uq~ppppq~ òsq~ uq~ppppptÕ// ----------------------------------------------------- Instance Variables /** * Has this component been completely configured? */ // ----------------------------------------------------- Instance Variables /** * Has this component been completely configured? */ // ----------------------------------------------------- Instance Variables /** * Has this component been completely configured? */ // ----------------------------------------------------- Instance Variables /** * Has this component been completely configured? */ // ----------------------------------------------------- Instance Variables /** * Has this component been completely configured? */ pt configuredq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt falseq~$q~$q~$xsq~(sq~ uq~ppppq~ òsq~ uq~pppppt// ------------------------------------------------------------- Properties /** * The fully qualified Java class name of the exception handler class * which should be instantiated to handle this exception. */ // ------------------------------------------------------------- Properties /** * The fully qualified Java class name of the exception handler class * which should be instantiated to handle this exception. */ /** * The fully qualified Java class name of the exception handler class * which should be instantiated to handle this exception. */ /** * The fully qualified Java class name of the exception handler class * which should be instantiated to handle this exception. */ /** * The fully qualified Java class name of the exception handler class * which should be instantiated to handle this exception. */ pthandlerq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt, "org.apache.struts.action.ExceptionHandler"q~$q~$q~$xsq~isq~ uq~ppppq~ òsq~ uq~pppppppt getHandlerq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t& return (this.handler); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~ sq~ uq~pppppppthandlerq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~ òsq~ uq~pppppppt setHandlerq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t– if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.handler = handler; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~ òsq~ uq~ppppptD/** * The message resources key specifying the error message * associated with this exception. */ /** * The message resources key specifying the error message * associated with this exception. */ /** * The message resources key specifying the error message * associated with this exception. */ /** * The message resources key specifying the error message * associated with this exception. */ /** * The message resources key specifying the error message * associated with this exception. */ ptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~ òsq~ uq~ppppppptgetKeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t" return (this.key); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~ Tsq~ uq~ppppppptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~ òsq~ uq~ppppppptsetKeyq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tŽ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.key = key; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~ òsq~ uq~pppppt¿/** * The context-relative path of the resource to forward to if this * exception occurs during an Action. */ /** * The context-relative path of the resource to forward to if this * exception occurs during an Action. */ /** * The context-relative path of the resource to forward to if this * exception occurs during an Action. */ /** * The module-relative path of the resource to forward to if this * exception occurs during an Action. */ /** * The module-relative path of the resource to forward to if this * exception occurs during an Action. */ ptpathq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~ òsq~ uq~ppppppptgetPathq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t# return (this.path); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~ ˆsq~ uq~ppppppptpathq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~ òsq~ uq~ppppppptsetPathq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.path = path; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~ òsq~ uq~pppppt!/** * The scope in which we should expose the ActionError for this exception * handler. */ /** * The scope in which we should expose the ActionError for this exception * handler. */ /** * The scope in which we should expose the ActionError for this exception * handler. */ /** * The scope in which we should expose the ActionError for this exception * handler. */ /** * The scope in which we should expose the ActionError for this exception * handler. */ ptscopeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt "request"q~$q~$q~$xsq~isq~ uq~ppppq~ òsq~ uq~ppppppptgetScopeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t$ return (this.scope); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~ ¼sq~ uq~ppppppptscopeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~ òsq~ uq~ppppppptsetScopeq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t’ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.scope = scope; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~ òsq~ uq~pppppt]/** * The fully qualified Java class name of the exception that is to be * handled by this handler. */ /** * The fully qualified Java class name of the exception that is to be * handled by this handler. */ /** * The fully qualified Java class name of the exception that is to be * handled by this handler. */ /** * The fully qualified Java class name of the exception that is to be * handled by this handler. */ /** * The fully qualified Java class name of the exception that is to be * handled by this handler. */ pttypeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~ òsq~ uq~ppppppptgetTypeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t# return (this.type); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~ ðsq~ uq~pppppppttypeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~ òsq~ uq~ppppppptsetTypeq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.type = type; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~ òsq~ uq~ppppptŽ// --------------------------------------------------------- Public Methods /** * Freeze the configuration of this component. */ ptfreezeq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t& configured = true; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~ òsq~ uq~ppppptD/** * Return a String representation of this object. */ pttoStringq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tx StringBuffer sb = new StringBuffer("ExceptionConfig["); sb.append("type="); sb.append(this.type); sb.append(",key="); sb.append(this.key); sb.append(",path="); sb.append(this.path); sb.append(",scope="); sb.append(this.scope); sb.append("]"); return (sb.toString()); sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~ òsq~ uq~pppppppt getHandlerq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t& return (this.handler); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~ 6sq~ uq~pppppppthandlerq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~ òsq~ uq~pppppppt setHandlerq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t– if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.handler = handler; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~ òsq~ uq~ppppppptgetKeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t" return (this.key); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~ \sq~ uq~ppppppptkeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~ òsq~ uq~ppppppptsetKeyq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tŽ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.key = key; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~ òsq~ uq~ppppppptgetPathq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t# return (this.path); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~ ‚sq~ uq~ppppppptpathq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~ òsq~ uq~ppppppptsetPathq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.path = path; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~ òsq~ uq~ppppppptgetScopeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t$ return (this.scope); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~ ¨sq~ uq~ppppppptscopeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~ òsq~ uq~ppppppptsetScopeq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t’ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.scope = scope; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~ òsq~ uq~ppppppptgetTypeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t# return (this.type); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~ Îsq~ uq~pppppppttypeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~ òsq~ uq~ppppppptsetTypeq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.type = type; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~ òsq~ uq~ppppptŽ// --------------------------------------------------------- Public Methods /** * Freeze the configuration of this component. */ ptfreezeq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t& configured = true; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~ òsq~ uq~ppppptD/** * Return a String representation of this object. */ pttoStringq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tx StringBuffer sb = new StringBuffer("ExceptionConfig["); sb.append("type="); sb.append(this.type); sb.append(",key="); sb.append(this.key); sb.append(",path="); sb.append(this.path); sb.append(",scope="); sb.append(this.scope); sb.append("]"); return (sb.toString()); sq~ uq~ppppq~¥q~¥xsq~(sq~ uq~ppppq~ òsq~ uq~pppppt“// ------------------------------------------------------------- Properties /** * The servlet context attribute under which the message resources bundle * to be used for this exception is located. If not set, the default * message resources for the current module is assumed. */ // ------------------------------------------------------------- Properties /** * The servlet context attribute under which the message resources bundle * to be used for this exception is located. If not set, the default * message resources for the current module is assumed. */ // ------------------------------------------------------------- Properties /** * The servlet context attribute under which the message resources bundle * to be used for this exception is located. If not set, the default * message resources for the current module is assumed. */ ptbundleq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–sq~Ãxpppt nullq~–q~–q~–xsq~isq~ uq~ppppq~ òsq~ uq~pppppppt getBundleq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t% return (this.bundle); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~ #sq~ uq~ppppppptbundleq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~ òsq~ uq~pppppppt setBundleq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t” if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.bundle = bundle; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~ òsq~ uq~pppppppt getHandlerq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t& return (this.handler); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~ Isq~ uq~pppppppthandlerq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~ òsq~ uq~pppppppt setHandlerq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t– if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.handler = handler; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~ òsq~ uq~ppppppptgetKeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t" return (this.key); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~ osq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~ òsq~ uq~ppppppptsetKeyq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tŽ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.key = key; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~ òsq~ uq~ppppppptgetPathq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t# return (this.path); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~ •sq~ uq~ppppppptpathq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~ òsq~ uq~ppppppptsetPathq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.path = path; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~ òsq~ uq~ppppppptgetScopeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t$ return (this.scope); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~ »sq~ uq~ppppppptscopeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~ òsq~ uq~ppppppptsetScopeq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t’ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.scope = scope; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~ òsq~ uq~ppppppptgetTypeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t# return (this.type); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~ ásq~ uq~pppppppttypeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~ òsq~ uq~ppppppptsetTypeq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.type = type; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~ òsq~ uq~ppppptŽ// --------------------------------------------------------- Public Methods /** * Freeze the configuration of this component. */ ptfreezeq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t& configured = true; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~ òsq~ uq~ppppptD/** * Return a String representation of this object. */ pttoStringq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tð StringBuffer sb = new StringBuffer("ExceptionConfig["); sb.append("type="); sb.append(this.type); if (this.bundle != null) { sb.append(",bundle="); sb.append(this.bundle); } sb.append(",key="); sb.append(this.key); sb.append(",path="); sb.append(this.path); sb.append(",scope="); sb.append(this.scope); sb.append("]"); return (sb.toString()); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~ òsq~ uq~pppppppt getBundleq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t% return (this.bundle); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~ 'sq~ uq~ppppppptbundleq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~ òsq~ uq~pppppppt setBundleq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t” if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.bundle = bundle; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ òsq~ uq~pppppppt getHandlerq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t& return (this.handler); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~ Msq~ uq~pppppppthandlerq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~ òsq~ uq~pppppppt setHandlerq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t– if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.handler = handler; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ òsq~ uq~ppppppptgetKeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t" return (this.key); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~ ssq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~ òsq~ uq~ppppppptsetKeyq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tŽ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.key = key; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ òsq~ uq~ppppppptgetPathq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t# return (this.path); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~ ™sq~ uq~ppppppptpathq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~ òsq~ uq~ppppppptsetPathq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.path = path; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ òsq~ uq~ppppppptgetScopeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t$ return (this.scope); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~ ¿sq~ uq~ppppppptscopeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~ òsq~ uq~ppppppptsetScopeq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t’ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.scope = scope; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ òsq~ uq~ppppppptgetTypeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t# return (this.type); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~ åsq~ uq~pppppppttypeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~ òsq~ uq~ppppppptsetTypeq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.type = type; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ òsq~ uq~ppppptŽ// --------------------------------------------------------- Public Methods /** * Freeze the configuration of this component. */ ptfreezeq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t& configured = true; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ òsq~ uq~ppppptD/** * Return a String representation of this object. */ pttoStringq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tð StringBuffer sb = new StringBuffer("ExceptionConfig["); sb.append("type="); sb.append(this.type); if (this.bundle != null) { sb.append(",bundle="); sb.append(this.bundle); } sb.append(",key="); sb.append(this.key); sb.append(",path="); sb.append(this.path); sb.append(",scope="); sb.append(this.scope); sb.append("]"); return (sb.toString()); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ òsq~ uq~pppppppt getBundleq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft% return (this.bundle); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq~+sq~ uq~ppppppptbundleq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~ òsq~ uq~pppppppt setBundleq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft” if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.bundle = bundle; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ òsq~ uq~pppppppt getHandlerq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft& return (this.handler); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq~Qsq~ uq~pppppppthandlerq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~ òsq~ uq~pppppppt setHandlerq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft– if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.handler = handler; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ òsq~ uq~ppppppptgetKeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft" return (this.key); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq~wsq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~ òsq~ uq~ppppppptsetKeyq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftŽ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.key = key; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ òsq~ uq~ppppppptgetPathq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft# return (this.path); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq~sq~ uq~ppppppptpathq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~ òsq~ uq~ppppppptsetPathq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.path = path; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ òsq~ uq~ppppppptgetScopeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft$ return (this.scope); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq~Ãsq~ uq~ppppppptscopeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~ òsq~ uq~ppppppptsetScopeq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft’ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.scope = scope; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ òsq~ uq~ppppppptgetTypeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft# return (this.type); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq~ésq~ uq~pppppppttypeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~ òsq~ uq~ppppppptsetTypeq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.type = type; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ òsq~ uq~ppppptŽ// --------------------------------------------------------- Public Methods /** * Freeze the configuration of this component. */ ptfreezeq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft& configured = true; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ òsq~ uq~ppppptD/** * Return a String representation of this object. */ pttoStringq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftð StringBuffer sb = new StringBuffer("ExceptionConfig["); sb.append("type="); sb.append(this.type); if (this.bundle != null) { sb.append(",bundle="); sb.append(this.bundle); } sb.append(",key="); sb.append(this.key); sb.append(",path="); sb.append(this.path); sb.append(",scope="); sb.append(this.scope); sb.append("]"); return (sb.toString()); sq~ uq~ppppq~fq~fxpsq~sq~ #uq~+q~ òsq~zsq~ Iuq~Jsq~(sq~ uq~ppppq~#sq~ uq~ppppptÕ// ----------------------------------------------------- Instance Variables /** * Has this component been completely configured? */ // ----------------------------------------------------- Instance Variables /** * Has this component been completely configured? */ // ----------------------------------------------------- Instance Variables /** * Has this component been completely configured? */ // ----------------------------------------------------- Instance Variables /** * Has this component been completely configured? */ // ----------------------------------------------------- Instance Variables /** * Has this component been completely configured? */ pt configuredq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt falseq~$q~$q~$xsq~(sq~ uq~ppppq~#sq~ uq~pppppt·/** * The set of FormProperty elements defining dynamic form properties for * this form bean, keyed by property name. */ /** * The set of FormProperty elements defining dynamic form properties for * this form bean, keyed by property name. */ /** * The set of FormProperty elements defining dynamic form properties for * this form bean, keyed by property name. */ /** * The set of FormProperty elements defining dynamic form properties for * this form bean, keyed by property name. */ /** * The set of FormProperty elements defining dynamic form properties for * this form bean, keyed by property name. */ ptformPropertiesq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt new HashMap()q~$q~$q~$xsq~(sq~ uq~ppppq~#sq~ uq~pppppt˜// ------------------------------------------------------------- Properties /** * Is the form bean class an instance of DynaActionForm with dynamic * properties? */ // ------------------------------------------------------------- Properties /** * Is the form bean class an instance of DynaActionForm with dynamic * properties? */ // ------------------------------------------------------------- Properties /** * Is the form bean class an instance of DynaActionForm with dynamic * properties? */ // ------------------------------------------------------------- Properties /** * Is the form bean class an instance of DynaActionForm with dynamic * properties? */ // ------------------------------------------------------------- Properties /** * Is the form bean class an instance of DynaActionForm with dynamic * properties? */ ptdynamicq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt falseq~$q~$q~$xsq~isq~ uq~ppppq~#sq~ uq~pppppppt getDynamicq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t& return (this.dynamic); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~_sq~ uq~ppppppptdynamicq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xpppq~#sq~ uq~pppppppt setDynamicq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t– if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.dynamic = dynamic; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~#sq~ uq~ppppptÈ/** * The unique identifier of this form bean, which is used to reference this * bean in ActionMapping instances as well as for the name of * the request or session attribute under which the corresponding form bean * instance is created or accessed. */ /** * The unique identifier of this form bean, which is used to reference this * bean in ActionMapping instances as well as for the name of * the request or session attribute under which the corresponding form bean * instance is created or accessed. */ /** * The unique identifier of this form bean, which is used to reference this * bean in ActionMapping instances as well as for the name of * the request or session attribute under which the corresponding form bean * instance is created or accessed. */ /** * The unique identifier of this form bean, which is used to reference this * bean in ActionMapping instances as well as for the name of * the request or session attribute under which the corresponding form bean * instance is created or accessed. */ /** * The unique identifier of this form bean, which is used to reference this * bean in ActionMapping instances as well as for the name of * the request or session attribute under which the corresponding form bean * instance is created or accessed. */ ptnameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~#sq~ uq~ppppppptgetNameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t# return (this.name); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~“sq~ uq~ppppppptnameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~#sq~ uq~ppppppptsetNameq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.name = name; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~#sq~ uq~ppppptN/** * The fully qualified Java class name of the implementation class * to be used or generated. */ /** * The fully qualified Java class name of the implementation class * to be used or generated. */ /** * The fully qualified Java class name of the implementation class * to be used or generated. */ /** * The fully qualified Java class name of the implementation class * to be used or generated. */ /** * The fully qualified Java class name of the implementation class * to be used or generated. */ pttypeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~#sq~ uq~ppppppptgetTypeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t# return (this.type); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~Çsq~ uq~pppppppttypeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~#sq~ uq~ppppppptsetTypeq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.type = type; if ("org.apache.struts.action.DynaActionForm".equals(type)) { this.dynamic = true; } sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~Þsq~ uq~ppppppptconfigq~=xsq~ uq~pppppq~$q~yq~$sq~zsq~ Euq~Jsq~(sq~ uq~ppppq~ésq~ uq~ppppptÕ// ----------------------------------------------------- Instance Variables /** * Has this component been completely configured? */ // ----------------------------------------------------- Instance Variables /** * Has this component been completely configured? */ // ----------------------------------------------------- Instance Variables /** * Has this component been completely configured? */ // ----------------------------------------------------- Instance Variables /** * Has this component been completely configured? */ // ----------------------------------------------------- Instance Variables /** * Has this component been completely configured? */ pt configuredq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt falseq~$q~$q~$xsq~(sq~ uq~ppppq~ésq~ uq~ppppptÒ/** * Have we calculated the initial value object yet? */ /** * Have we calculated the initial value object yet? */ /** * Have we calculated the initial value object yet? */ pt initializedq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt falseq~$sq~#q~$xsq~(sq~ uq~ppppq~ésq~ uq~ppppptÏ/** * The calculated initial value for this property. */ /** * The calculated initial value for this property. */ /** * The calculated initial value for this property. */ pt initialValueq~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$sq~#q~$xsq~(sq~ uq~ppppq~ésq~ uq~pppppt // ------------------------------------------------------------- Properties /** * String representation of the initial value for this property. */ // ------------------------------------------------------------- Properties /** * String representation of the initial value for this property. */ // ------------------------------------------------------------- Properties /** * String representation of the initial value for this property. */ // ------------------------------------------------------------- Properties /** * String representation of the initial value for this property. */ // ------------------------------------------------------------- Properties /** * String representation of the initial value for this property. */ ptinitialq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~ésq~ uq~pppppppt getInitialq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t& return (this.initial); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~5sq~ uq~ppppppptinitialq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~ésq~ uq~pppppppt setInitialq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t– if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.initial = initial; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~ésq~ uq~ppppptÇ/** * The JavaBean property name of the property described by this element. */ /** * The JavaBean property name of the property described by this element. */ /** * The JavaBean property name of the property described by this element. */ /** * The JavaBean property name of the property described by this element. */ /** * The JavaBean property name of the property described by this element. */ ptnameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~ésq~ uq~ppppppptgetNameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t# return (this.name); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~isq~ uq~ppppppptnameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~ésq~ uq~ppppppptsetNameq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.name = name; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~ésq~ uq~pppppt/** * The fully qualified Java class name of the implementation class * of this bean property, optionally followed by [] to * indicate that the property is indexed. */ /** * The fully qualified Java class name of the implementation class * of this bean property, optionally followed by [] to * indicate that the property is indexed. */ /** * The fully qualified Java class name of the implementation class * of this bean property, optionally followed by [] to * indicate that the property is indexed. */ /** * The fully qualified Java class name of the implementation class * of this bean property, optionally followed by [] to * indicate that the property is indexed. */ /** * The fully qualified Java class name of the implementation class * of this bean property, optionally followed by [] to * indicate that the property is indexed. */ pttypeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~ésq~ uq~ppppppptgetTypeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t# return (this.type); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~sq~ uq~pppppppttypeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~ésq~ uq~ppppppptsetTypeq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.type = type; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~ésq~ uq~ppppptæ/** * Return a Class corresponds to the value specified for the * type property, taking into account the trailing "[]" * for arrays (as well as the ability to specify primitive Java types). */ pt getTypeClassq~=xsq~ uq~pppppq~$q~yq~$sq~zsq~ uq~ppppq~~sq~ uq~pppppq~‡ptClassq~=xsq~ uq~ppppq~$sq~ uq~sq~)sq~ uq~ppppq~sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bddkqpxq~½pppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~~sq~ uq~pppppppt Class.javaq~$xsq~ uq~ppppsq~ uq~q~½pppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ ,uq~,sq~bsq~ uq~ppppsq~isq~ uq~q~ãpppsq~zsq~ uq~q~æsq~isq~ uq~sq~bsq~ uq~ppppq~ìsq~ uq~ppppppptnameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~ésq~ uq~ppppptÈ/** *

      Find and return the ForwardConfig instance defining * how forwarding to the specified logical name should be handled. This is * performed by checking local and then global configurations for the * specified forwarding configuration. If no forwarding configuration * can be found, return null.

      * * @param name Logical name of the forwarding instance to be returned */ pt findForwardq~=xsq~ uq~pppppq~$q~yq~$sq~zsq~ uq~sq~esq~ uq~ppppq~ýsq~ uq~ppppptC/** * Construct a new instance with default values. */ pt ActionForwardq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t this(null, false); sq~ uq~ppppq~$q~$xsq~esq~ uq~sq~bsq~ uq~ppppq~sq~ uq~ppppppptpathq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~ýsq~ uq~ppppptz/** * Construct a new instance with the specified path. * * @param path Path for this instance */ pq~q~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t this(path, false); sq~ uq~ppppq~$q~$xsq~esq~ uq~sq~bsq~ uq~ppppq~'sq~ uq~ppppppptpathq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppq~'sq~ uq~ppppppptredirectq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xppq~ýsq~ uq~ppppptÄ/** * Construct a new instance with the specified path and redirect flag. * * @param path Path for this instance * @param redirect Redirect flag for this instance */ pq~q~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tP super(); setName(null); setPath(path); setRedirect(redirect); sq~ uq~ppppq~$q~$xsq~esq~ uq~ppppq~ýsq~ uq~ppppptC/** * Construct a new instance with default values. */ pq~q~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t" this(null, false); sq~ uq~ppppq~¥q~¥xsq~esq~ uq~sq~bsq~ uq~ppppq~Usq~ uq~ppppppptpathq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~ýsq~ uq~ppppptz/** * Construct a new instance with the specified path. * * @param path Path for this instance */ pq~q~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t" this(path, false); sq~ uq~ppppq~¥q~¥xsq~esq~ uq~sq~bsq~ uq~ppppq~lsq~ uq~ppppppptpathq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq~lsq~ uq~ppppppptredirectq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xppq~ýsq~ uq~ppppptÄ/** * Construct a new instance with the specified path and redirect flag. * * @param path Path for this instance * @param redirect Redirect flag for this instance */ pq~q~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t\ super(); setName(null); setPath(path); setRedirect(redirect); sq~ uq~ppppq~¥q~¥xsq~esq~ uq~ppppq~ýsq~ uq~ppppptC/** * Construct a new instance with default values. */ pq~q~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t& this(null, false); sq~ uq~ppppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppq~šsq~ uq~ppppppptpathq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~ýsq~ uq~ppppptz/** * Construct a new instance with the specified path. * * @param path Path for this instance */ pq~q~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t& this(path, false); sq~ uq~ppppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppq~±sq~ uq~ppppppptpathq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq~±sq~ uq~ppppppptredirectq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xppq~ýsq~ uq~ppppptÄ/** * Construct a new instance with the specified path and redirect flag. * * @param path Path for this instance * @param redirect Redirect flag for this instance */ pq~q~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tl super(); setName(null); setPath(path); setRedirect(redirect); sq~ uq~ppppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppq~Ðsq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq~Ðsq~ uq~ppppppptpathq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq~Ðsq~ uq~ppppppptredirectq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xpq~ýsq~ uq~ppppptî/** * Construct a new instance with the specified path and redirect flag. * * @param name Name of this instance * @param path Path for this instance * @param redirect Redirect flag for this instance */ pq~q~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tl super(); setName(name); setPath(path); setRedirect(redirect); sq~ uq~ppppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppq~÷sq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq~÷sq~ uq~ppppppptpathq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq~÷sq~ uq~ppppppptredirectq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~bsq~ uq~ppppq~÷sq~ uq~ppppppptcontextRelativeq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xq~ýsq~ uq~pppppt%/** * Construct a new instance with the specified values. * * @param name Name of this instance * @param path Path for this instance * @param redirect Redirect flag for this instance * @param contextRelative Context relative flag for this instance */ pq~q~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tš super(); setName(name); setPath(path); setRedirect(redirect); setContextRelative(contextRelative); sq~ uq~ppppq~–q~–xsq~esq~ uq~ppppq~ýsq~ uq~ppppptC/** * Construct a new instance with default values. */ pq~q~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t& this(null, false); sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq~5sq~ uq~ppppppptpathq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~ýsq~ uq~ppppptz/** * Construct a new instance with the specified path. * * @param path Path for this instance */ pq~q~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t& this(path, false); sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq~Lsq~ uq~ppppppptpathq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq~Lsq~ uq~ppppppptredirectq~{xsq~ uq~pppppq~~q~q~~q~pq~€xppq~ýsq~ uq~ppppptÄ/** * Construct a new instance with the specified path and redirect flag. * * @param path Path for this instance * @param redirect Redirect flag for this instance */ pq~q~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tl super(); setName(null); setPath(path); setRedirect(redirect); sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq~ksq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq~ksq~ uq~ppppppptpathq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq~ksq~ uq~ppppppptredirectq~{xsq~ uq~pppppq~~q~q~~q~pq~€xpq~ýsq~ uq~ppppptî/** * Construct a new instance with the specified path and redirect flag. * * @param name Name of this instance * @param path Path for this instance * @param redirect Redirect flag for this instance */ pq~q~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tl super(); setName(name); setPath(path); setRedirect(redirect); sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq~’sq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq~’sq~ uq~ppppppptpathq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq~’sq~ uq~ppppppptredirectq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~bsq~ uq~ppppq~’sq~ uq~ppppppptcontextRelativeq~{xsq~ uq~pppppq~~q~q~~q~pq~€xq~ýsq~ uq~pppppt%/** * Construct a new instance with the specified values. * * @param name Name of this instance * @param path Path for this instance * @param redirect Redirect flag for this instance * @param contextRelative Context relative flag for this instance */ pq~q~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tš super(); setName(name); setPath(path); setRedirect(redirect); setContextRelative(contextRelative); sq~ uq~ppppq~~q~~xsq~esq~ uq~ppppq~ýsq~ uq~ppppptC/** * Construct a new instance with default values. */ pq~q~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft& this(null, false); sq~ uq~ppppq~fq~fxsq~esq~ uq~sq~bsq~ uq~ppppq~Ðsq~ uq~ppppppptpathq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~ýsq~ uq~ppppptz/** * Construct a new instance with the specified path. * * @param path Path for this instance */ pq~q~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft& this(path, false); sq~ uq~ppppq~fq~fxsq~esq~ uq~sq~bsq~ uq~ppppq~çsq~ uq~ppppppptpathq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq~çsq~ uq~ppppppptredirectq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxppq~ýsq~ uq~ppppptÄ/** * Construct a new instance with the specified path and redirect flag. * * @param path Path for this instance * @param redirect Redirect flag for this instance */ pq~q~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftl super(); setName(null); setPath(path); setRedirect(redirect); sq~ uq~ppppq~fq~fxsq~esq~ uq~sq~bsq~ uq~ppppq~sq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq~sq~ uq~ppppppptpathq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq~sq~ uq~ppppppptredirectq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxpq~ýsq~ uq~ppppptî/** * Construct a new instance with the specified path and redirect flag. * * @param name Name of this instance * @param path Path for this instance * @param redirect Redirect flag for this instance */ pq~q~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftl super(); setName(name); setPath(path); setRedirect(redirect); sq~ uq~ppppq~fq~fxsq~esq~ uq~sq~bsq~ uq~ppppq~-sq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq~-sq~ uq~ppppppptpathq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq~-sq~ uq~ppppppptredirectq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~bsq~ uq~ppppq~-sq~ uq~ppppppptcontextRelativeq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxq~ýsq~ uq~pppppt%/** * Construct a new instance with the specified values. * * @param name Name of this instance * @param path Path for this instance * @param redirect Redirect flag for this instance * @param contextRelative Context relative flag for this instance */ pq~q~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftš super(); setName(name); setPath(path); setRedirect(redirect); setContextRelative(contextRelative); sq~ uq~ppppq~fq~fxpppq~Bsq~ uq~pppppppq~q~=xsq~ uq~sq~Csq~ uq~ppppsq~Qsq~ uq~ sq~Csq~ uq~ppppq~csq~ uq~ppppsq~#sq~zsq~ uq~ppppq~³sq~ uq~pppppq~‡ptRequestDispatcherq~=xsq~ uq~ sq~Csq~ uq~ppppq~xsq~ uq~ppppsq~#q~lxq~fsq~Csq~ uq~ppppsq~Qsq~ uq~ sq~Csq~ uq~ppppq~}sq~ uq~ppppsq~#q~kxsq~Csq~ uq~ppppq~}sq~ uq~ppppsq~#sq~•sq~ uq~ppppsq~sq~ uq~sq~zsq~ uq~ppppq~sq~ uq~pppppq~‡ptHttpServletResponseq~=xsq~ uq~"sq~Csq~ uq~ppppsq~Qsq~ uq~ sq~Csq~ uq~ppppq~sq~ uq~ppppsq~#sq~sq~ uq~ppppq~³sq~ uq~pppppq~‡ptServletExceptionq~=xsq~ uq~!sq~Csq~ uq~ppppsq~Qsq~ uq~q~®sq~Csq~ uq~ppppq~±sq~ uq~ppppsq~#sq~•sq~ Duq~Jsq~isq~ uq~ppppq~ºsq~ uq~ppppptÁ/** * Has this module been completely configured yet. Once this flag * has been set, any attempt to modify the configuration will return an * IllegalStateException. */ pt getConfiguredq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppq~~sq~Ãxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ºsq~ uq~ppppptJ/** * The controller configuration object for this module. */ ptgetControllerConfigq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Êxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~Üsq~ uq~ppppppptccq~{xsq~ uq~pppppq~~q~q~~q~pq~€xpppq~ºsq~ uq~pppppt“/** * The controller configuration object for this module. * @param cc The controller configuration object for this module. */ ptsetControllerConfigq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Êxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ºsq~ uq~pppppt*/** * The prefix of the context-relative portion of the request URI, used to * select this configuration versus others supported by the controller * servlet. A configuration with a prefix of a zero-length String is the * default configuration for this web module. */ pt getPrefixq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Êxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~sq~ uq~ppppppptprefixq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~ºsq~ uq~pppppt/** * The prefix of the context-relative portion of the request URI, used to * select this configuration versus others supported by the controller * servlet. A configuration with a prefix of a zero-length String is the * default configuration for this web module. * @param prefix The prefix of the context-relative portion of the request URI. */ pt setPrefixq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ºsq~ uq~ppppptg/** * The default class name to be used when creating action mapping * instances. */ ptgetActionMappingClassq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Êxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~(sq~ uq~ppppppptactionMappingClassq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~ºsq~ uq~ppppptØ/** * The default class name to be used when creating action mapping * instances. * @param actionMappingClass default class name to be used when creating action mapping * instances. */ ptsetActionMappingClassq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Êxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~?sq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~+pq~€xpppq~ºsq~ uq~pppppt,/** * Add a new ActionConfig instance to the set associated * with this module. * * @param config The new configuration instance to be added * * @exception java.lang.IllegalStateException if this module configuration * has been frozen */ ptaddActionConfigq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Êxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~Vsq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~sq~zsq~ ,uq~,sq~(sq~ uq~ppppq~asq~ uq~ppppptÕ// ----------------------------------------------------- Instance Variables /** * Has this component been completely configured? */ // ----------------------------------------------------- Instance Variables /** * Has this component been completely configured? */ // ----------------------------------------------------- Instance Variables /** * Has this component been completely configured? */ // ----------------------------------------------------- Instance Variables /** * Has this component been completely configured? */ // ----------------------------------------------------- Instance Variables /** * Has this component been completely configured? */ pt configuredq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt falseq~$q~$q~$xsq~(sq~ uq~ppppq~asq~ uq~ppppptã// ------------------------------------------------------------- Properties /** * The servlet context attribute key under which this data source * is stored and made available. */ // ------------------------------------------------------------- Properties /** * The servlet context attribute key under which this data source * is stored and made available. */ // ------------------------------------------------------------- Properties /** * The servlet context attribute key under which this data source * is stored and made available. */ // ------------------------------------------------------------- Properties /** * The servlet context attribute key under which this data source * is stored and made available. */ // ------------------------------------------------------------- Properties /** * The servlet context attribute key under which this data source * is stored and made available. */ ptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt Globals.DATA_SOURCE_KEYq~$q~$q~$xsq~isq~ uq~ppppq~asq~ uq~ppppppptgetKeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t" return (this.key); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~sq~ uq~ppppppptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~asq~ uq~ppppppptsetKeyq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tŽ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.key = key; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~asq~ uq~ppppptÖ/** * The custom configuration properties for this data source implementation. */ /** * The custom configuration properties for this data source implementation. */ /** * The custom configuration properties for this data source implementation. */ /** * The custom configuration properties for this data source implementation. */ /** * The custom configuration properties for this data source implementation. */ pt propertiesq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt new HashMap()q~$q~$q~$xsq~isq~ uq~ppppq~asq~ uq~pppppppt getPropertiesq~=xsq~ uq~pppppq~$q~yq~$sq~zsq~ uq~ppppq~8sq~ uq~pppppq~‡ptMapq~=xsq~ uq~&sq~Csq~ uq~ppppq~Œsq~ uq~ppppsq~#q~¼xsq~Csq~ uq~ppppsq~Qsq~ uq~sq~Csq~ uq~ppppq~Ísq~ uq~ppppsq~#sq~zsq~ uq~ppppsq~sq~ uq~ q~Ösq~zsq~ uq~ppppq~Ùsq~ uq~pppppq~‡ptMethodq~=xsq~ uq~sq~Csq~ uq~ppppsq~Qsq~ uq~sq~Csq~ uq~ppppq~çsq~ uq~ppppsq~#sq~sq~ uq~ppppq~Ùsq~ uq~pppppq~‡ptInvocationTargetExceptionq~¢xsq~ uq~q~êsq~Csq~ uq~ppppsq~Qsq~ uq~q~øsq~Csq~ uq~ppppq~ûsq~ uq~ppppsq~#q~Üxsq~Csq~ uq~ppppq~ûsq~ uq~ppppsq~#q~5xsq~Csq~ uq~ppppq~ûsq~ uq~ppppsq~#sq~sq~ uq~ppppsq~sq~ uq~ sq~zsq~ uq~ppppq~sq~ uq~pppppq~‡pt PageContextq~=xsq~ uq~sq~Csq~ uq~ppppsq~Qsq~ uq~ sq~Csq~ uq~ppppq~!sq~ uq~ppppsq~#q~Öxsq~Csq~ uq~ppppq~!sq~ uq~ppppsq~#sq~zsq~ uq~ppppq~8sq~ uq~pppppq~‡pt Collectionq~=xsq~ uq~ q~*sq~Csq~ uq~ppppsq~Qsq~ uq~sq~Csq~ uq~ppppq~;sq~ uq~ppppsq~#q~ðxsq~Csq~ uq~ppppq~;sq~ uq~ppppsq~#sq~zsq~ uq~ppppq~8sq~ uq~pppppq~‡ptArraysq~=xsq~ uq~ q~Dsq~Csq~ uq~ppppsq~Qsq~ uq~sq~Csq~ uq~ppppq~Usq~ uq~ppppsq~#q~ðxq~Rsq~Csq~ uq~ppppq~Usq~ uq~ppppsq~#q~0xsq~Csq~ uq~ppppq~Usq~ uq~ppppsq~#sq~zsq~ uq~ppppq~8sq~ uq~pppppq~‡pt Enumerationq~=xsq~ uq~sq~Csq~ uq~ppppq~bsq~ uq~ppppsq~#q~jxsq~Csq~ uq~ppppsq~Qsq~ uq~ sq~Csq~ uq~ppppq~{sq~ uq~ppppsq~#q~xq~xsq~Csq~ uq~ppppq~{sq~ uq~ppppsq~#q~Œxsq~Csq~ uq~ppppq~{sq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq~{sq~ uq~ppppsq~#sq~zsq~ uq~ppppsq~sq~ uq~q~–sq~zsq~ uq~ppppq~™sq~ uq~pppppq~‡ptTagDataq~=xsq~ uq~sq~Csq~ uq~ppppsq~Qsq~ uq~q~¤sq~Csq~ uq~ppppq~§sq~ uq~ppppsq~#sq~zsq~ uq~ppppq~™sq~ uq~pppppq~‡pt TagExtraInfoq~=xsq~ uq~q~ªsq~Csq~ uq~ppppsq~Qsq~ uq~sq~Csq~ uq~ppppq~»sq~ uq~ppppsq~#q~œxq~¸sq~Csq~ uq~ppppq~»sq~ uq~ppppsq~#sq~zsq~ uq~ppppq~™sq~ uq~pppppq~‡pt VariableInfoq~=xsq~ uq~sq~Csq~ uq~ppppq~§sq~ uq~ppppsq~#q~Êxq~Äsq~Csq~ uq~ppppsq~Qsq~ uq~sq~Csq~ uq~ppppq~Ûsq~ uq~ppppsq~#q~œxsq~Csq~ uq~ppppq~Ûsq~ uq~ppppsq~#q~°xq~Øpsq~sq~ (uq~2sq~zsq~ 7uq~9sq~(sq~ uq~ppppq~ísq~ uq~pppppt±// ------------------------------------------------------------- Properties /** * The name of the scripting variable that will be exposed as a page * scope attribute. */ // ------------------------------------------------------------- Properties /** * The name of the scripting variable that will be exposed as a page * scope attribute. */ // ------------------------------------------------------------- Properties /** * The name of the scripting variable that will be exposed as a page * scope attribute. */ // ------------------------------------------------------------- Properties /** * The name of the scripting variable that will be exposed as a page * scope attribute. */ // ------------------------------------------------------------- Properties /** * The name of the scripting variable that will be exposed as a page * scope attribute. */ ptidq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~ísq~ uq~ppppppptgetIdq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t! return (this.id); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~ sq~ uq~ppppppptidq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~ísq~ uq~ppppppptsetIdq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t this.id = id; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~ísq~ uq~pppppt1/** * The message resources for this package. */ /** * The message resources for this package. */ /** * The message resources for this package. */ /** * The message resources for this package. */ /** * The message resources for this package. */ ptmessagesq~=xsq~ uq~pppppq~$q~yq~$sq~zsq~ Žuq~›sq~(sq~ uq~ppppq~-sq~ uq~ppppptl// ------------------------------------------------------------- Properties /** * Commons Logging instance. */ // ------------------------------------------------------------- Properties /** * Commons Logging instance. */ // ------------------------------------------------------------- Properties /** * Commons Logging instance. */ // ------------------------------------------------------------- Properties /** * Commons Logging instance. */ // ------------------------------------------------------------- Properties /** * Commons Logging instance. */ ptlogq~=xsq~ uq~pppppq~$q~yq~$sq~zsq~ uq~ppppsq~sq~ uq~ q~9sq~zsq~ uq~ppppq~null */ /** * The MultipartRequestHandler for this form, can be * null */ /** * The MultipartRequestHandler for this form, can be * null */ /** * The MultipartRequestHandler for this form, can be * null. */ /** * The MultipartRequestHandler for this form, can be * null. */ ptmultipartRequestHandlerq~=xsq~ uq~pppppq~$q~yq~$sq~•sq~ 3uq~9sq~(sq~ uq~ppppq~’sq~ uq~ppppptÊ/** * This is the ServletRequest attribute that should be set when a multipart request is being read * and the maximum length is exceeded. The value is a Boolean. If the maximum length isn't exceeded, * this attribute shouldn't be put in the ServletRequest. It's the job of the implementation to put this * attribute in the request if the maximum length is exceeded; in the handleRequest(HttpServletRequest) method. */ /** * This is the ServletRequest attribute that should be set when a multipart request is being read * and the maximum length is exceeded. The value is a Boolean. If the maximum length isn't exceeded, * this attribute shouldn't be put in the ServletRequest. It's the job of the implementation to put this * attribute in the request if the maximum length is exceeded; in the handleRequest(HttpServletRequest) method. */ /** * This is the ServletRequest attribute that should be set when a multipart request is being read * and the maximum length is exceeded. The value is a Boolean. If the maximum length isn't exceeded, * this attribute shouldn't be put in the ServletRequest. It's the job of the implementation to put this * attribute in the request if the maximum length is exceeded; in the handleRequest(HttpServletRequest) method. */ /** * This is the ServletRequest attribute that should be set when a multipart request is being read * and the maximum length is exceeded. The value is a Boolean. If the maximum length isn't exceeded, * this attribute shouldn't be put in the ServletRequest. It's the job of the implementation to put this * attribute in the request if the maximum length is exceeded; in the handleRequest(HttpServletRequest) method. */ /** * This is the ServletRequest attribute that should be set when a multipart request is being read * and the maximum length is exceeded. The value is a Boolean. If the maximum length isn't exceeded, * this attribute shouldn't be put in the ServletRequest. It's the job of the implementation to put this * attribute in the request if the maximum length is exceeded; in the handleRequest(HttpServletRequest) method. */ ptATTRIBUTE_MAX_LENGTH_EXCEEDEDq~=xsq~ uq~pppppsq~#q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxpppt- "org.apache.struts.upload.MaxLengthExceeded"q~$q~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~¥sq~ uq~ppppppptservletq~=xsq~ uq~pppppq~$q~yq~$q~ ppq~$xpppq~’sq~ uq~pppppti/** * Convienience method to set a reference to a working * ActionServlet instance. */ pt setServletq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~sq~isq~ uq~sq~bsq~ uq~ppppq~ºsq~ uq~ppppppptservletq~=xsq~ uq~pppppq~$q~yq~$q~ ppq~$xpppsq~zsq~ Muq~Tsq~(sq~ uq~ppppq~Åsq~ uq~ppppptë/** * Commons Logging instance. */ /** * Commons Logging instance. */ /** * Commons Logging instance. */ /** * Commons Logging instance. */ /** * Commons Logging instance. */ ptlogq~=xsq~ uq~pppppq~$q~yq~$q~9pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~;xppptB LogFactory.getLog(DiskMultipartRequestHandler.class)q~$q~$q~$xsq~(sq~ uq~ppppq~Åsq~ uq~ppppptX/** * The ActionServlet instance used for this class */ /** * The ActionServlet instance used for this class. */ /** * The ActionServlet instance used for this class. */ /** * The ActionServlet instance used for this class. */ /** * The ActionServlet instance used for this class. */ ptservletq~=xsq~ uq~pppppq~$q~yq~$q~ ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xppppq~$q~$q~$xsq~(sq~ uq~ppppq~Åsq~ uq~ppppptX/** * The ActionMapping instance used for this class */ /** * The ActionMapping instance used for this class. */ /** * The ActionMapping instance used for this class. */ /** * The ActionMapping instance used for this class. */ /** * The ActionMapping instance used for this class. */ ptmappingq~=xsq~ uq~pppppq~$q~yq~$q~épq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xppppq~$q~$q~$xsq~(sq~ uq~ppppq~Åsq~ uq~ppppptb/** * A Hashtable representing the form files uploaded */ /** * A Hashtable representing the form files uploaded. */ /** * A Hashtable representing the form files uploaded. */ /** * A Hashtable representing the form files uploaded. */ /** * A Hashtable representing the form files uploaded. */ pt fileElementsq~=xsq~ uq~pppppq~$q~yq~$q~;pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xppppq~$q~$q~$xsq~(sq~ uq~ppppq~Åsq~ uq~pppppt£/** * A Hashtable representing the form text input names and values */ /** * A Hashtable representing the form text input names and values. */ /** * A Hashtable representing the form text input names and values. */ /** * A Hashtable representing the form text input names and values. */ /** * A Hashtable representing the form text input names and values. */ pt textElementsq~=xsq~ uq~pppppq~$q~yq~$q~;pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xppppq~$q~$q~$xsq~(sq~ uq~ppppq~Åsq~ uq~pppppt0/** * A Hashtable representing all elemnents */ /** * A Hashtable representing all elemnents. */ /** * A Hashtable representing all elemnents. */ /** * A Hashtable representing all elemnents. */ /** * A Hashtable representing all elemnents. */ pt allElementsq~=xsq~ uq~pppppq~$q~yq~$q~;pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xppppq~$q~$q~$xsq~(sq~ uq~ppppq~Åsq~ uq~ppppptå/** * The temporary directory */ /** * The temporary directory. */ /** * The temporary directory. */ /** * The temporary directory. */ /** * The temporary directory. */ pttempDirq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xppppq~$q~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~%sq~ uq~ppppppptrequestq~=xsq~ uq~pppppq~$q~yq~$q~Œpq~$xpppq~Åsq~ uq~ppppptâ/** * This method populates the internal hashtables with multipart request data. * If the request argument is an instance of MultipartRequestWrapper, * the request wrapper will be populated as well. */ pt handleRequestq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~sq~isq~ uq~sq~bsq~ uq~ppppq~8sq~ uq~ppppppptrequestq~=xsq~ uq~pppppq~$q~yq~$q~Œpq~$xpppq~’sq~ uq~pppppt /** * After constructed, this is the first method called on * by ActionServlet. Use this method for all your * data-parsing of the ServletInputStream in the request * * @exception ServletException thrown if something goes wrong */ pt handleRequestq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~q~%sq~isq~ uq~sq~bsq~ uq~ppppq~Msq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Œpq~§xpppq~Åsq~ uq~ppppptâ/** * This method populates the internal hashtables with multipart request data. * If the request argument is an instance of MultipartRequestWrapper, * the request wrapper will be populated as well. */ pt handleRequestq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~q~8pppsq~ uq~ppppq~¥q~»xq~¥tW ApplicationConfig appConfig = (ApplicationConfig) request.getAttribute(Action.APPLICATION_KEY); retrieveTempDir(appConfig); try { MultipartIterator iterator = new MultipartIterator(request, appConfig.getControllerConfig().getBufferSize(), getMaxSize(appConfig.getControllerConfig().getMaxFileSize()), tempDir); MultipartElement element; textElements = new Hashtable(); fileElements = new Hashtable(); allElements = new Hashtable(); while ((element = iterator.getNextElement()) != null) { if (!element.isFile()) { createTextElement(request, element); } else { createDiskFile(element); } } //take care of maximum length being exceeded if (iterator.isMaxLengthExceeded()) { request.setAttribute(MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED, Boolean.TRUE); } } catch (IOException ioe) { throw new ServletException(ioe); } sq~ uq~q~¦pppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~esq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xpppq~Åsq~ uq~ppppptâ/** * This method populates the internal hashtables with multipart request data. * If the request argument is an instance of MultipartRequestWrapper, * the request wrapper will be populated as well. */ pt handleRequestq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~q~8pppsq~ uq~ppppq~–q~¢xq~–tW ApplicationConfig appConfig = (ApplicationConfig) request.getAttribute(Action.APPLICATION_KEY); retrieveTempDir(appConfig); try { MultipartIterator iterator = new MultipartIterator(request, appConfig.getControllerConfig().getBufferSize(), getMaxSize(appConfig.getControllerConfig().getMaxFileSize()), tempDir); MultipartElement element; textElements = new Hashtable(); fileElements = new Hashtable(); allElements = new Hashtable(); while ((element = iterator.getNextElement()) != null) { if (!element.isFile()) { createTextElement(request, element); } else { createDiskFile(element); } } //take care of maximum length being exceeded if (iterator.isMaxLengthExceeded()) { request.setAttribute(MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED, Boolean.TRUE); } } catch (IOException ioe) { throw new ServletException(ioe); } sq~ uq~q~¦pppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~}sq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xpppsq~zsq~ 8uq~9sq~(sq~ uq~ppppq~ˆsq~ uq~pppppt—// ----------------------------------------------------- Manifest Constants /** * The default value for the maximum allowable size, in bytes, of an * uploaded file. The value is equivalent to 250MB. */ // ----------------------------------------------------- Manifest Constants /** * The default value for the maximum allowable size, in bytes, of an * uploaded file. The value is equivalent to 250MB. */ // ----------------------------------------------------- Manifest Constants /** * The default value for the maximum allowable size, in bytes, of an * uploaded file. The value is equivalent to 250MB. */ ptDEFAULT_SIZE_MAXq~rxsq~ uq~pppppsq~#q~—q~–sq~sq~ uq~ppppq~sq~ uq~ppppppptlongq~$xsq~ uq~ppppq~$sq~ uq~sq~)sq~ uq~ppppq~5sq~ uq~ppppq~=sq~ uq~ppppsq~ uq~ppppsq~Bddpxq~•pppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~sq~ uq~pppppppt long.javaq~$xsq~ uq~ppppsq~ uq~q~•pppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ euq~ksq~(sq~ uq~ppppsq~zsq~ Puq~Tsq~(sq~ uq~ppppq~¾sq~ uq~ppppptO/** * The underlying InputStream used by this class */ /** * The underlying InputStream used by this class */ /** * The underlying InputStream used by this class */ /** * The underlying InputStream used by this class */ /** * The underlying InputStream used by this class */ pt inputStreamq~=xsq~ uq~pppppq~$q~yq~$q~Wpq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xppppq~$q~$q~$xsq~(sq~ uq~ppppq~¾sq~ uq~pppppt;/** * The byte array used to hold buffered data */ /** * The byte array used to hold buffered data */ /** * The byte array used to hold buffered data */ /** * The byte array used to hold buffered data */ /** * The byte array used to hold buffered data */ ptbufferq~=xsq~ uq~pppppq~$q~yq~$sq~sq~ uq~ppppq~sq~ uq~ppppppptbyteq~$xsq~ uq~ppppq~$sq~ uq~sq~)sq~ uq~ppppq~5sq~ uq~ppppq~=sq~ uq~ppppsq~ uq~ppppsq~Bddpxq~×pppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~sq~ uq~pppppppt byte.javaq~$xsq~ uq~ppppsq~ uq~q~×pppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ Zuq~_sq~bsq~ uq~ppppsq~isq~ uq~q~ýpppq~Esq~ uq~pppppt˜/** * Convert a byte array to a String of hexadecimal digits and return it. * * @param buffer The byte array to be converted */ pttoHexq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$tM StringBuffer sb = new StringBuffer(); String s = null; for (int i = 0; i < buffer.length; i++) { s = Integer.toHexString((int) buffer[i] & 0xff); if (s.length() < 2) sb.append('0'); sb.append(s); } return (sb.toString()); sq~ uq~ppppq~$q~$xsq~ uq~ppppppptbufferq~=xsq~ uq~pppppq~$q~yq~$q~×t[]sq~#xq~Îsq~bsq~ uq~ppppsq~isq~ uq~q~pppq~¾sq~ uq~pppppt}/** * This method populates the byte array b with data up to * b.length bytes */ ptreadq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t4 return read(b, 0, b.length); sq~ uq~ppppq~$q~$xsq~ uq~ppppppptbq~=xsq~ uq~pppppq~$q~yq~$q~×t[]q~$xsq~bsq~ uq~ppppsq~isq~ uq~q~0sq~bsq~ uq~ppppq~3sq~ uq~ppppppptoffsetq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~bsq~ uq~ppppq~3sq~ uq~ppppppptlengthq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xpq~¾sq~ uq~ppppptŒ/** * This method populates the byte array b with data up to * length starting at b[offset] */ ptreadq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tQ int count = 0; int read = read(); if (read == -1) { return -1; } while ((read != -1) && (count < length)) { b[offset] = (byte) read; read = read(); count++; offset++; } return count; sq~ uq~ppppq~$q~$xsq~ uq~ppppppptbq~=xsq~ uq~pppppq~$q~yq~$q~×t[]q~$xsq~bsq~ uq~ppppsq~isq~ uq~q~Ysq~bsq~ uq~ppppq~\sq~ uq~ppppppptoffsetq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~bsq~ uq~ppppq~\sq~ uq~ppppppptlengthq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xpq~¾sq~ uq~ppppptÑ/** * This method reads into the byte array b until * a newline ('\n') character is encountered or the number of bytes * specified by length have been read */ ptreadLineq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tˆ int count = 0; int read = read(); if (read == -1) { return -1; } while ((read != -1) && (count < length)) { if (read == '\n') break; b[offset] = (byte) read; count++; offset++; read = read(); } return count; sq~ uq~ppppq~$q~$xsq~ uq~ppppppptbq~=xsq~ uq~pppppq~$q~yq~$q~×t[]q~$xsq~isq~ uq~ppppq~¾sq~ uq~pppppty/** * This method reads a line, regardless of length. * @return A byte array representing the line. */ ptreadLineq~=xsq~ uq~pppppq~$q~yq~$q~×t[]q~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$ty int read = read(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); // return null if there are no more bytes to read if( -1 == read ) return null; while ((read != -1) && (read != '\n')) { baos.write(read); read = read(); } return baos.toByteArray(); sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppsq~zsq~ @uq~Asq~(sq~ uq~ppppq~–sq~ uq~pppppt/** * The filepath to the temporary file */ /** * The filepath to the temporary file */ /** * The filepath to the temporary file */ /** * The filepath to the temporary file */ /** * The filepath to the temporary file */ ptfilePathq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xppppq~$q~$q~$xsq~(sq~ uq~ppppq~–sq~ uq~ppppptþ/** * The content type of the file */ /** * The content type of the file */ /** * The content type of the file */ /** * The content type of the file */ /** * The content type of the file */ pt contentTypeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xppppq~$q~$q~$xsq~(sq~ uq~ppppq~–sq~ uq~pppppt/** * The size in bytes of the file */ /** * The size in bytes of the file */ /** * The size in bytes of the file */ /** * The size in bytes of the file */ /** * The size in bytes of the file */ ptfileSizeq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xppppq~$q~$q~$xsq~(sq~ uq~ppppq~–sq~ uq~ppppptÖ/** * The name of the file */ /** * The name of the file */ /** * The name of the file */ /** * The name of the file */ /** * The name of the file */ ptfileNameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xppppq~$q~$q~$xsq~esq~ uq~sq~bsq~ uq~ppppq~Ísq~ uq~ppppppptfilePathq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~–sq~ uq~ppppppptDiskFileq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t+ this.filePath = filePath; sq~ uq~ppppq~$q~$xq~“sq~isq~ uq~sq~bsq~ uq~ppppq~äsq~ uq~pppppppt bufferSizeq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xpppq~–sq~ uq~ppppptå/** * Attempts to read a file n bytes at a time, n being equal to "bufferSize". * Note that this method can be dangerous, and that the size of a file * can cause an OutOfMemoryError quite easily. You should use * {@link #getInputStream() getInputStream} and do your own thing. * * @param bufferSize The size in bytes that are read from the file at a time * @exception FileNotFoundException If the temp file no longer exists */ pt getFileDataq~=xsq~ uq~pppppq~$q~yq~$q~×t[]q~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tä ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); FileInputStream fis = new FileInputStream(filePath); int readLength = 0; int totalLength = 0; int offset = 0; byte[] bytes = new byte[bufferSize]; while ((readLength = fis.read(bytes, offset, bufferSize)) != -1) { byteStream.write(bytes, offset, bufferSize); totalLength += readLength; offset += readLength; } bytes = byteStream.toByteArray(); fis.close(); byteStream.close(); return bytes; sq~ uq~sq~sq~ uq~ppppq~Tsq~ uq~pppppq~‡ptFileNotFoundExceptionq~=xsq~ uq~ sq~Csq~ uq~ppppsq~Qsq~ uq~sq~Csq~ uq~ppppq~sq~ uq~ppppsq~#sq~sq~ uq~sq~esq~ uq~ppppq~sq~ uq~ppppptˆ/** * Constructor. * Create a new MapperFactoryException. * * @param message The error or warning message. */ ptDefinitionsFactoryExceptionq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t. super(); this.exception = null; sq~ uq~ppppq~¥q~¥xsq~esq~ uq~sq~bsq~ uq~ppppq~$sq~ uq~ppppppptmessageq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~sq~ uq~ppppptˆ/** * Constructor. * Create a new MapperFactoryException. * * @param message The error or warning message. */ pq~q~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t5 super(message); this.exception = null; sq~ uq~ppppq~¥q~¥xsq~esq~ uq~sq~bsq~ uq~ppppq~;sq~ uq~pppppppteq~¢xsq~ uq~pppppq~¥q~¦q~¥q~‚pq~§xpppq~sq~ uq~ppppptH/** * Create a new MapperFactoryException wrapping an existing exception. * *

      The existing exception will be embedded in the new * one, and its message will become the default message for * the MapperFactoryException.

      * * @param e The exception to be wrapped in a SAXException. */ pq~q~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t+ super(); this.exception = e; sq~ uq~ppppq~¥q~¥xsq~esq~ uq~sq~bsq~ uq~ppppq~Rsq~ uq~ppppppptmessageq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq~Rsq~ uq~pppppppteq~¢xsq~ uq~pppppq~¥q~¦q~¥q~‚pq~§xppq~sq~ uq~pppppt{/** * Create a new MapperFactoryException from an existing exception. * *

      The existing exception will be embedded in the new * one, but the new exception will have its own message.

      * * @param message The detail message. * @param e The exception to be wrapped in a MapperFactoryException. * @see org.xml.sax.Parser#setLocale */ pq~q~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t2 super(message); this.exception = e; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~sq~ uq~ppppptD/** * Return a detail message for this exception. * *

      If there is a embedded exception, and if the MapperFactoryException * has no detail message of its own, this method will return * the detail message from the embedded exception.

      * * @return The error or warning message. */ pt getMessageq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~sq~isq~ uq~ppppsq~zsq~ uq~sq~(sq~ uq~ppppq~sq~ uq~pppppt€/** * Any "wrapped" exception will be exposed when this is serialized. * @serial */ /** * Any "wrapped" exception will be exposed when this is serialized. * @serial */ /** * Any "wrapped" exception will be exposed when this is serialized. * @serial */ /** * Any "wrapped" exception will be exposed when this is serialized. * @serial */ pt exceptionq~¢xsq~ uq~pppppq~¥q~¦q~¥q~‚pq~§xsq~ uq~ppppsq~ uq~ppppq~¥sq~Ãxppppq~¥q~¥q~¥xsq~esq~ uq~ppppq~sq~ uq~ppppptˆ/** * Constructor. * Create a new MapperFactoryException. * * @param message The error or warning message. */ ptTilesExceptionq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t. super(); this.exception = null; sq~ uq~ppppq~¥q~¥xsq~esq~ uq~sq~bsq~ uq~ppppq~ sq~ uq~ppppppptmessageq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~sq~ uq~ppppptˆ/** * Constructor. * Create a new MapperFactoryException. * * @param message The error or warning message. */ pq~–q~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t5 super(message); this.exception = null; sq~ uq~ppppq~¥q~¥xsq~esq~ uq~sq~bsq~ uq~ppppq~·sq~ uq~pppppppteq~¢xsq~ uq~pppppq~¥q~¦q~¥q~‚pq~§xpppq~sq~ uq~ppppptH/** * Create a new MapperFactoryException wrapping an existing exception. * *

      The existing exception will be embedded in the new * one, and its message will become the default message for * the MapperFactoryException.

      * * @param e The exception to be wrapped in a SAXException. */ pq~–q~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t+ super(); this.exception = e; sq~ uq~ppppq~¥q~¥xsq~esq~ uq~sq~bsq~ uq~ppppq~Îsq~ uq~ppppppptmessageq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq~Îsq~ uq~pppppppteq~¢xsq~ uq~pppppq~¥q~¦q~¥q~‚pq~§xppq~sq~ uq~pppppt{/** * Create a new MapperFactoryException from an existing exception. * *

      The existing exception will be embedded in the new * one, but the new exception will have its own message.

      * * @param message The detail message. * @param e The exception to be wrapped in a MapperFactoryException. * @see org.xml.sax.Parser#setLocale */ pq~–q~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t2 super(message); this.exception = e; sq~ uq~ppppq~¥q~¥xq~|sq~isq~ uq~ppppq~sq~ uq~pppppt‚/** * Return the embedded exception, if any. * * @return The embedded exception, or null if there is none. */ pt getExceptionq~¢xsq~ uq~pppppq~¥q~¦q~¥q~‚pq~§xsq~ uq~ppppsq~ uq~sq~isq~ uq~ppppq~sq~ uq~pppppt‚/** * Return the embedded exception, if any. * * @return The embedded exception, or null if there is none. */ pt getExceptionq~¢xsq~ uq~pppppq~¥q~¦q~¥q~‚pq~§xsq~ uq~q~ípppsq~ uq~ppppq~¥q~»xq~¥t return exception; sq~ uq~ppppq~¥q~¥xpppq~¥q~»xq~¥t return exception; sq~ uq~ppppq~¥q~¥xsq~esq~ uq~ppppq~sq~ uq~ppppptˆ/** * Constructor. * Create a new MapperFactoryException. * * @param message The error or warning message. */ pq~–q~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t. super(); this.exception = null; sq~ uq~ppppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppq~sq~ uq~ppppppptmessageq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~sq~ uq~ppppptˆ/** * Constructor. * Create a new MapperFactoryException. * * @param message The error or warning message. */ pq~–q~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t5 super(message); this.exception = null; sq~ uq~ppppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppq~3sq~ uq~pppppppteq~rxsq~ uq~pppppq~–q~—q~–q~‚pq~˜xpppq~sq~ uq~ppppptH/** * Create a new MapperFactoryException wrapping an existing exception. * *

      The existing exception will be embedded in the new * one, and its message will become the default message for * the MapperFactoryException.

      * * @param e The exception to be wrapped in a SAXException. */ pq~–q~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t+ super(); this.exception = e; sq~ uq~ppppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppq~Jsq~ uq~ppppppptmessageq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq~Jsq~ uq~pppppppteq~rxsq~ uq~pppppq~–q~—q~–q~‚pq~˜xppq~sq~ uq~pppppt{/** * Create a new MapperFactoryException from an existing exception. * *

      The existing exception will be embedded in the new * one, but the new exception will have its own message.

      * * @param message The detail message. * @param e The exception to be wrapped in a MapperFactoryException. * @see org.xml.sax.Parser#setLocale */ pq~–q~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t2 super(message); this.exception = e; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~sq~ uq~ppppptD/** * Return a detail message for this exception. * *

      If there is a embedded exception, and if the MapperFactoryException * has no detail message of its own, this method will return * the detail message from the embedded exception.

      * * @return The error or warning message. */ pt getMessageq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t´ String message = super.getMessage (); if (message == null && exception != null) { return exception.getMessage(); } else { return message; } sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~sq~ uq~pppppt‚/** * Return the embedded exception, if any. * * @return The embedded exception, or null if there is none. */ pt getExceptionq~rxsq~ uq~pppppq~–q~—q~–q~‚pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return exception; sq~ uq~ppppq~–q~–xsq~esq~ uq~ppppq~sq~ uq~pppppt /** * Constructor. */ pq~–q~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t. super(); this.exception = null; sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq~˜sq~ uq~ppppppptmessageq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~sq~ uq~ppppptT/** * Constructor. * @param message The error or warning message. */ pq~–q~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t5 super(message); this.exception = null; sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq~¯sq~ uq~pppppppteq~{xsq~ uq~pppppq~~q~q~~q~‚pq~€xpppq~sq~ uq~pppppt3/** * Create a new TilesException wrapping an existing exception. * *

      The existing exception will be embedded in the new * one, and its message will become the default message for * the TilesException.

      * * @param e The exception to be wrapped. */ pq~–q~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t+ super(); this.exception = e; sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq~Æsq~ uq~ppppppptmessageq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq~Æsq~ uq~pppppppteq~{xsq~ uq~pppppq~~q~q~~q~‚pq~€xppq~sq~ uq~pppppt;/** * Create a new TilesException from an existing exception. * *

      The existing exception will be embedded in the new * one, but the new exception will have its own message.

      * * @param message The detail message. * @param e The exception to be wrapped. */ pq~–q~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t2 super(message); this.exception = e; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~sq~ uq~ppppptIf there is a embedded exception, and if the TilesException * has no detail message of its own, this method will return * the detail message from the embedded exception.

      * * @return The error or warning message. */ pt getMessageq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t´ String message = super.getMessage (); if (message == null && exception != null) { return exception.getMessage(); } else { return message; } sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~sq~ uq~pppppt/** * Return the embedded exception, if any. * * @return The embedded exception, or null if there is none. */ pt getExceptionq~{xsq~ uq~pppppq~~q~q~~q~‚pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t return exception; sq~ uq~ppppq~~q~~xsq~esq~ uq~ppppq~sq~ uq~pppppt /** * Constructor. */ pq~–q~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft. super(); this.exception = null; sq~ uq~ppppq~fq~fxsq~esq~ uq~sq~bsq~ uq~ppppq~sq~ uq~ppppppptmessageq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~sq~ uq~ppppptT/** * Constructor. * @param message The error or warning message. */ pq~–q~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft5 super(message); this.exception = null; sq~ uq~ppppq~fq~fxsq~esq~ uq~sq~bsq~ uq~ppppq~+sq~ uq~pppppppteq~cxsq~ uq~pppppq~fq~gq~fq~‚pq~hxpppq~sq~ uq~pppppt3/** * Create a new TilesException wrapping an existing exception. * *

      The existing exception will be embedded in the new * one, and its message will become the default message for * the TilesException.

      * * @param e The exception to be wrapped. */ pq~–q~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft+ super(); this.exception = e; sq~ uq~ppppq~fq~fxsq~esq~ uq~sq~bsq~ uq~ppppq~Bsq~ uq~ppppppptmessageq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq~Bsq~ uq~pppppppteq~cxsq~ uq~pppppq~fq~gq~fq~‚pq~hxppq~sq~ uq~pppppt;/** * Create a new TilesException from an existing exception. * *

      The existing exception will be embedded in the new * one, but the new exception will have its own message.

      * * @param message The detail message. * @param e The exception to be wrapped. */ pq~–q~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft2 super(message); this.exception = e; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~sq~ uq~ppppptIf there is a embedded exception, and if the TilesException * has no detail message of its own, this method will return * the detail message from the embedded exception.

      * * @return The error or warning message. */ pt getMessageq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft´ String message = super.getMessage (); if (message == null && exception != null) { return exception.getMessage(); } else { return message; } sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~sq~ uq~pppppt/** * Return the embedded exception, if any. * * @return The embedded exception, or null if there is none. */ pt getExceptionq~cxsq~ uq~pppppq~fq~gq~fq~‚pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft return exception; sq~ uq~ppppq~fq~fxppppsq~sq~ =uq~Jsq~zsq~ 2uq~2sq~(sq~ uq~ppppq~„sq~ uq~ppppptœ/** * Component attributes. */ /** * Component attributes. */ /** * Component attributes. */ /** * Component attributes. */ pt attributesq~¢xsq~ uq~pppppq~¥q~¦q~¥q~¼pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~xppppq~¥q~¥q~¥xsq~(sq~ uq~ppppq~„sq~ uq~ppppptÂ/** * Component attributes. */ /** * Component attributes. */ /** * EmptyIterator over component attributes. */ /** * EmptyIterator over component attributes. */ ptEMPTY_ITERATORq~¢xsq~ uq~pppppq~¥q~¦q~¥q~öpq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~xpppt new EmptyIterator()q~¥q~¥q~¥xsq~esq~ uq~ppppq~„sq~ uq~pppppt"/** * Constructor. */ ptComponentContextq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t sq~ uq~ppppq~¥q~¥xsq~esq~ uq~sq~bsq~ uq~ppppq~³sq~ uq~ppppppptinstanceq~¢xsq~ uq~pppppq~¥q~¦q~¥sq~zsq~ ’uq~›sq~(sq~ uq~ppppq~¾sq~ uq~pppppt/** Debug flag */ ptdebugq~¢xsq~ uq~pppppsq~#q~¦q~¥q~pq~§xsq~ uq~ppppsq~ uq~sq~(sq~ uq~ppppsq~zsq~ $uq~'sq~(sq~ uq~ppppq~Òsq~ uq~pppppt¨/** * Extends attribute value. */ /** * Extends attribute value. */ /** * Extends attribute value. */ /** * Extends attribute value. */ ptinheritq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~xppppq~¥q~¥q~¥xq~Ïsq~(sq~ uq~ppppq~Òsq~ uq~ppppptÂ/** * Use for resolving inheritance. */ /** * Use for resolving inheritance. */ /** * Used for resolving inheritance. */ /** * Used for resolving inheritance. */ pt isVisitedq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~xppptfalseq~¥q~¥q~¥xsq~esq~ uq~ppppq~Òsq~ uq~pppppt$/** * Constructor. */ pt XmlDefinitionq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tU super(); //if(debug) //System.out.println( "create definition" ); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~sq~ uq~pppppppt attributeq~¢xsq~ uq~pppppq~¥q~¦q~¥sq~zsq~ Buq~Jsq~(sq~ uq~ppppq~ sq~ uq~pppppt /** * Attribute name or key. */ /** * Attribute name or key. */ /** * Attribute name or key. */ /** * Attribute name or key. */ ptnameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~xppppq~¥q~¥q~¥xsq~(sq~ uq~ppppq~ sq~ uq~pppppt(/** * Attribute value. * Value read from description file. */ /** * Attribute value. * Value read from description file. */ /** * Attribute value. * Value read from description file. */ /** * Attribute value. * Value read from description file. */ ptvalueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~xppppq~¥q~¥q~¥xsq~(sq~ uq~ppppq~ sq~ uq~ppppptˆ/** * Attribute value. */ /** * Attribute value. */ /** * Attribute value. */ /** * Attribute value. */ ptdirectq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~xppptnullq~¥q~¥q~¥xsq~(sq~ uq~ppppq~ sq~ uq~ppppptˆ/** * Attribute value. */ /** * Attribute value. */ /** * Attribute value. */ /** * Attribute value. */ pt valueTypeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~xppptnullq~¥q~¥q~¥xsq~(sq~ uq~ppppq~ sq~ uq~ppppptˆ/** * Attribute value. */ /** * Attribute value. */ /** * Attribute value. */ /** * Attribute value. */ ptroleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~xppptnullq~¥q~¥q~¥xsq~(sq~ uq~ppppq~ sq~ uq~pppppt¼/** * Real attribute value. * Real value is the value after processing of valueType. * I.e. if a type is defined, realValue contains wrapper for this type. */ /** * Real attribute value. * Real value is the value after processing of valueType. * I.e. if a type is defined, realValue contains wrapper for this type. */ /** * Real attribute value. * Real value is the value after processing of valueType. * I.e. if a type is defined, realValue contains wrapper for this type. */ /** * Real attribute value. * Real value is the value after processing of valueType. * I.e. if a type is defined, realValue contains wrapper for this type. */ pt realValueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~xppppq~¥q~¥q~¥xsq~esq~ uq~ppppq~ sq~ uq~pppppt"/** * Constructor. */ pt XmlAttributeq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t sq~ uq~ppppq~¥q~¥xsq~esq~ uq~sq~bsq~ uq~ppppq~osq~ uq~ppppppptnameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq~osq~ uq~ppppppptvalueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xppq~ sq~ uq~pppppt"/** * Constructor. */ pq~eq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t6 this.name = name; this.value = value; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~ sq~ uq~pppppts/** * Access method for the name property. * * @return the current value of the name property */ ptgetNameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t return name; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~žsq~ uq~ppppppptroleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~ sq~ uq~pppppt…/** * @return void * Sets the value of the name property. * * @param aName the new value of the name property */ ptsetRoleq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t this.role = role; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~ sq~ uq~pppppts/** * Access method for the name property. * * @return the current value of the name property */ ptgetRoleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t return role; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~Æsq~ uq~ppppppptaNameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~ sq~ uq~pppppt…/** * @return void * Sets the value of the name property. * * @param aName the new value of the name property */ ptsetNameq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t name = aName; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~ sq~ uq~pppppt{/** * Another access method for the name property. * * @return the current value of the name property */ pt getAttributeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t return name; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~îsq~ uq~ppppppptaNameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~ sq~ uq~ppppptr/** * Sets the value of the name property. * * @param aName the new value of the name property */ pt setAttributeq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t name = aName; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~ sq~ uq~pppppt×/** * Access method for the value property. * Return the value or a QualifiedAttribute containing the value * if 'direct' is set. * * @return the current value of the value property */ ptgetValueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tŠ // Compatibility with JSP Template if( realValue ==null ) realValue = computeRealValue(); return realValue; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~sq~ uq~ppppppptaValueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xpppq~ sq~ uq~ppppptv/** * Sets the value of the value property. * * @param aValue the new value of the value property */ ptsetValueq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t0 realValue=null; value = aValue; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~.sq~ uq~ppppppptaValueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xpppq~ sq~ uq~ppppptv/** * Sets the value of the value property. * * @param aValue the new value of the value property */ pt setContentq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t setValue(aValue); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~Fsq~ uq~ppppppptbodyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~ sq~ uq~ppppptv/** * Sets the value of the value property. * * @param aValue the new value of the value property */ ptsetBodyq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t€ if( body.length() == 0 ) return; //System.out.println("body set to'" + body + "'"); setValue(body); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~^sq~ uq~ppppppptvalueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~ sq~ uq~ppppptv/** * Sets the value of the value property. * * @param aValue the new value of the value property */ pt setDirectq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t this.direct = value; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~vsq~ uq~ppppppptvalueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~ sq~ uq~ppppptv/** * Sets the value of the value property. * * @param aValue the new value of the value property */ ptsetTypeq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t# this.valueType = value; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~ sq~ uq~ppppptB/** * Compute real value from attributes setting. */ ptcomputeRealValueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~ uq~ppppsq~ uq~ppppq~¥sq~Ãxq~¥t Object realValue = value; // Is there a type set ? // First check direct attribute, and translate it to a valueType. // Then, evaluate valueType, and create requested typed attribute. if( direct != null ) { if( Boolean.valueOf(direct).booleanValue() == true ) valueType = "string"; else valueType = "path"; } // end if if( value != null && valueType!=null /* && !(value instanceof AttributeDefinition) */ ) { String strValue = value.toString(); if( valueType.equalsIgnoreCase( "string" ) ) { realValue = new DirectStringAttribute( strValue ); } else if( valueType.equalsIgnoreCase( "page" ) ) { realValue = new PathAttribute( strValue ); } else if( valueType.equalsIgnoreCase( "template" ) ) { realValue = new PathAttribute( strValue ); } else if( valueType.equalsIgnoreCase( "instance" ) ) { realValue = new DefinitionNameAttribute( strValue ); } // end if // Set realValue's role value if needed if( role !=null ) ((UntyppedAttribute)realValue).setRole( role ); } // end if // Create attribute wrapper to hold role if role is set and no type specified if( role!=null && value != null && valueType==null ) { realValue = new UntyppedAttribute( value.toString(), role ); } // end if return realValue; sq~ uq~ppppq~¥q~¥xsq~esq~ uq~ppppq~ sq~ uq~pppppt"/** * Constructor. */ pq~eq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t sq~ uq~ppppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppq~®sq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq~®sq~ uq~ppppppptvalueq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xppq~ sq~ uq~pppppt"/** * Constructor. */ pq~eq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t6 this.name = name; this.value = value; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~ sq~ uq~pppppts/** * Access method for the name property. * * @return the current value of the name property */ ptgetNameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return name; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~Ýsq~ uq~ppppppptroleq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~ sq~ uq~pppppt…/** * @return void * Sets the value of the name property. * * @param aName the new value of the name property */ ptsetRoleq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t this.role = role; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~ sq~ uq~pppppts/** * Access method for the name property. * * @return the current value of the name property */ ptgetRoleq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return role; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~sq~ uq~ppppppptaNameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~ sq~ uq~pppppt…/** * @return void * Sets the value of the name property. * * @param aName the new value of the name property */ ptsetNameq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t name = aName; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~ sq~ uq~pppppt{/** * Another access method for the name property. * * @return the current value of the name property */ pt getAttributeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return name; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~-sq~ uq~ppppppptaNameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~ sq~ uq~ppppptr/** * Sets the value of the name property. * * @param aName the new value of the name property */ pt setAttributeq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t name = aName; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~ sq~ uq~pppppt×/** * Access method for the value property. * Return the value or a QualifiedAttribute containing the value * if 'direct' is set. * * @return the current value of the value property */ ptgetValueq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tŠ // Compatibility with JSP Template if( realValue ==null ) realValue = computeRealValue(); return realValue; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~Usq~ uq~ppppppptaValueq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xpppq~ sq~ uq~ppppptv/** * Sets the value of the value property. * * @param aValue the new value of the value property */ ptsetValueq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t0 realValue=null; value = aValue; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~msq~ uq~ppppppptaValueq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xpppq~ sq~ uq~ppppptv/** * Sets the value of the value property. * * @param aValue the new value of the value property */ pt setContentq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t setValue(aValue); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~…sq~ uq~ppppppptbodyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~ sq~ uq~ppppptv/** * Sets the value of the value property. * * @param aValue the new value of the value property */ ptsetBodyq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tH if( body.length() == 0 ) return; setValue(body); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~sq~ uq~ppppppptvalueq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~ sq~ uq~ppppptv/** * Sets the value of the value property. * * @param aValue the new value of the value property */ pt setDirectq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t this.direct = value; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~µsq~ uq~ppppppptvalueq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~ sq~ uq~ppppptv/** * Sets the value of the value property. * * @param aValue the new value of the value property */ ptsetTypeq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t# this.valueType = value; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~ sq~ uq~ppppptB/** * Compute real value from attributes setting. */ ptcomputeRealValueq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–t Object realValue = value; // Is there a type set ? // First check direct attribute, and translate it to a valueType. // Then, evaluate valueType, and create requested typed attribute. if( direct != null ) { if( Boolean.valueOf(direct).booleanValue() == true ) valueType = "string"; else valueType = "path"; } // end if if( value != null && valueType!=null /* && !(value instanceof AttributeDefinition) */ ) { String strValue = value.toString(); if( valueType.equalsIgnoreCase( "string" ) ) { realValue = new DirectStringAttribute( strValue ); } else if( valueType.equalsIgnoreCase( "page" ) ) { realValue = new PathAttribute( strValue ); } else if( valueType.equalsIgnoreCase( "template" ) ) { realValue = new PathAttribute( strValue ); } else if( valueType.equalsIgnoreCase( "instance" ) ) { realValue = new DefinitionNameAttribute( strValue ); } // end if // Set realValue's role value if needed if( role !=null ) ((UntyppedAttribute)realValue).setRole( role ); } // end if // Create attribute wrapper to hold role if role is set and no type specified if( role!=null && value != null && valueType==null ) { realValue = new UntyppedAttribute( value.toString(), role ); } // end if return realValue; sq~ uq~ppppq~–q~–xsq~esq~ uq~ppppq~ sq~ uq~pppppt"/** * Constructor. */ pq~eq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq~ìsq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq~ìsq~ uq~ppppppptvalueq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xppq~ sq~ uq~pppppt"/** * Constructor. */ pq~eq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t6 this.name = name; this.value = value; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ sq~ uq~pppppts/** * Access method for the name property. * * @return the current value of the name property */ ptgetNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t return name; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~sq~ uq~ppppppptroleq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~ sq~ uq~pppppt…/** * @return void * Sets the value of the name property. * * @param aName the new value of the name property */ ptsetRoleq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t this.role = role; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ sq~ uq~pppppts/** * Access method for the name property. * * @return the current value of the name property */ ptgetRoleq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t return role; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~Csq~ uq~ppppppptaNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~ sq~ uq~pppppt…/** * @return void * Sets the value of the name property. * * @param aName the new value of the name property */ ptsetNameq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t name = aName; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ sq~ uq~pppppt{/** * Another access method for the name property. * * @return the current value of the name property */ pt getAttributeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t return name; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~ksq~ uq~ppppppptaNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~ sq~ uq~ppppptr/** * Sets the value of the name property. * * @param aName the new value of the name property */ pt setAttributeq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t name = aName; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ sq~ uq~pppppt×/** * Access method for the value property. * Return the value or a QualifiedAttribute containing the value * if 'direct' is set. * * @return the current value of the value property */ ptgetValueq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tŠ // Compatibility with JSP Template if( realValue ==null ) realValue = computeRealValue(); return realValue; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~“sq~ uq~ppppppptaValueq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xpppq~ sq~ uq~ppppptv/** * Sets the value of the value property. * * @param aValue the new value of the value property */ ptsetValueq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t0 realValue=null; value = aValue; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~«sq~ uq~ppppppptaValueq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xpppq~ sq~ uq~ppppptv/** * Sets the value of the value property. * * @param aValue the new value of the value property */ pt setContentq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t setValue(aValue); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~Ãsq~ uq~ppppppptbodyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~ sq~ uq~ppppptv/** * Sets the value of the value property. * * @param aValue the new value of the value property */ ptsetBodyq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tH if( body.length() == 0 ) return; setValue(body); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~Ûsq~ uq~ppppppptvalueq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~ sq~ uq~ppppptv/** * Sets the value of the value property. * * @param aValue the new value of the value property */ pt setDirectq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t this.direct = value; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~ósq~ uq~ppppppptvalueq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~ sq~ uq~ppppptv/** * Sets the value of the value property. * * @param aValue the new value of the value property */ ptsetTypeq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t# this.valueType = value; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ sq~ uq~ppppptB/** * Compute real value from attributes setting. */ ptcomputeRealValueq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~ uq~ppppsq~ uq~ppppq~~sq~Ãxq~~t Object realValue = value; // Is there a type set ? // First check direct attribute, and translate it to a valueType. // Then, evaluate valueType, and create requested typed attribute. if( direct != null ) { if( Boolean.valueOf(direct).booleanValue() == true ) valueType = "string"; else valueType = "path"; } // end if if( value != null && valueType!=null /* && !(value instanceof AttributeDefinition) */ ) { String strValue = value.toString(); if( valueType.equalsIgnoreCase( "string" ) ) { realValue = new DirectStringAttribute( strValue ); } else if( valueType.equalsIgnoreCase( "page" ) ) { realValue = new PathAttribute( strValue ); } else if( valueType.equalsIgnoreCase( "template" ) ) { realValue = new PathAttribute( strValue ); } else if( valueType.equalsIgnoreCase( "instance" ) ) { realValue = new DefinitionNameAttribute( strValue ); } // end if // Set realValue's role value if needed if( role !=null ) ((UntyppedAttribute)realValue).setRole( role ); } // end if // Create attribute wrapper to hold role if role is set and no type specified if( role!=null && value != null && valueType==null ) { realValue = new UntyppedAttribute( value.toString(), role ); } // end if return realValue; sq~ uq~ppppq~~q~~xsq~esq~ uq~ppppq~ sq~ uq~pppppt"/** * Constructor. */ pq~eq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft sq~ uq~ppppq~fq~fxsq~esq~ uq~sq~bsq~ uq~ppppq~ +sq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq~ +sq~ uq~ppppppptvalueq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxppq~ sq~ uq~pppppt"/** * Constructor. */ pq~eq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft6 this.name = name; this.value = value; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ sq~ uq~pppppts/** * Access method for the name property. * * @return the current value of the name property */ ptgetNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft return name; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq~ Zsq~ uq~ppppppptroleq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~ sq~ uq~pppppt…/** * @return void * Sets the value of the name property. * * @param aName the new value of the name property */ ptsetRoleq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft this.role = role; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ sq~ uq~pppppts/** * Access method for the name property. * * @return the current value of the name property */ ptgetRoleq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft return role; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq~ ‚sq~ uq~ppppppptaNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~ sq~ uq~pppppt…/** * @return void * Sets the value of the name property. * * @param aName the new value of the name property */ ptsetNameq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft name = aName; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ sq~ uq~pppppt{/** * Another access method for the name property. * * @return the current value of the name property */ pt getAttributeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft return name; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq~ ªsq~ uq~ppppppptaNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~ sq~ uq~ppppptr/** * Sets the value of the name property. * * @param aName the new value of the name property */ pt setAttributeq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft name = aName; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ sq~ uq~pppppt×/** * Access method for the value property. * Return the value or a QualifiedAttribute containing the value * if 'direct' is set. * * @return the current value of the value property */ ptgetValueq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftŠ // Compatibility with JSP Template if( realValue ==null ) realValue = computeRealValue(); return realValue; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq~ Òsq~ uq~ppppppptaValueq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxpppq~ sq~ uq~ppppptv/** * Sets the value of the value property. * * @param aValue the new value of the value property */ ptsetValueq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft0 realValue=null; value = aValue; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq~ êsq~ uq~ppppppptaValueq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxpppq~ sq~ uq~ppppptv/** * Sets the value of the value property. * * @param aValue the new value of the value property */ pt setContentq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft setValue(aValue); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq~!sq~ uq~ppppppptbodyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~ sq~ uq~ppppptv/** * Sets the value of the value property. * * @param aValue the new value of the value property */ ptsetBodyq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftH if( body.length() == 0 ) return; setValue(body); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq~!sq~ uq~ppppppptvalueq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~ sq~ uq~ppppptv/** * Sets the value of the value property. * * @param aValue the new value of the value property */ pt setDirectq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft this.direct = value; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq~!2sq~ uq~ppppppptvalueq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~ sq~ uq~ppppptv/** * Sets the value of the value property. * * @param aValue the new value of the value property */ ptsetTypeq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft# this.valueType = value; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ sq~ uq~ppppptB/** * Compute real value from attributes setting. */ ptcomputeRealValueq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~ uq~ppppsq~ uq~ppppq~fsq~Ãxq~ft Object realValue = value; // Is there a type set ? // First check direct attribute, and translate it to a valueType. // Then, evaluate valueType, and create requested typed attribute. if( direct != null ) { if( Boolean.valueOf(direct).booleanValue() == true ) valueType = "string"; else valueType = "path"; } // end if if( value != null && valueType!=null /* && !(value instanceof AttributeDefinition) */ ) { String strValue = value.toString(); if( valueType.equalsIgnoreCase( "string" ) ) { realValue = new DirectStringAttribute( strValue ); } else if( valueType.equalsIgnoreCase( "page" ) ) { realValue = new PathAttribute( strValue ); } else if( valueType.equalsIgnoreCase( "template" ) ) { realValue = new PathAttribute( strValue ); } else if( valueType.equalsIgnoreCase( "instance" ) ) { realValue = new DefinitionNameAttribute( strValue ); } // end if // Set realValue's role value if needed if( role !=null ) ((UntyppedAttribute)realValue).setRole( role ); } // end if // Create attribute wrapper to hold role if role is set and no type specified if( role!=null && value != null && valueType==null ) { realValue = new UntyppedAttribute( value.toString(), role ); } // end if return realValue; sq~ uq~ppppq~fq~fxppppppppsq~sq~ uq~sq~zsq~ >uq~Asq~(sq~ uq~ppppq~!^sq~ uq~pppppt/** Debug flag */ ptdebugq~¢xsq~ uq~pppppsq~#q~¦q~¥q~pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xpppt falseq~¥q~¥q~¥xsq~(sq~ uq~ppppq~!^sq~ uq~ppppptŠ/** Config file parameter name * @deprecated use DEFINITIONS_CONFIG_PARAMETER_NAME */ /** Config file parameter name * @deprecated use DEFINITIONS_CONFIG_PARAMETER_NAME */ /** Config file parameter name. * @deprecated use DEFINITIONS_CONFIG_PARAMETER_NAME */ /** Config file parameter name. * @deprecated use DEFINITIONS_CONFIG_PARAMETER_NAME */ ptINSTANCES_CONFIG_PARAMETER_NAMEq~¢xsq~ uq~pppppsq~#q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xpppt "instances-config"q~¥q~¥q~¥xsq~(sq~ uq~ppppq~!^sq~ uq~ppppptf/** Default name */ //public static final String DEFAULT_DEFINITIONS_FILE_NAME = "/WEB-INF/componentDefinitions.xml"; /** Config file parameter name */ /** Default name */ //public static final String DEFAULT_DEFINITIONS_FILE_NAME = "/WEB-INF/componentDefinitions.xml"; /** Config file parameter name */ /** Default name */ //public static final String DEFAULT_DEFINITIONS_FILE_NAME = "/WEB-INF/componentDefinitions.xml"; /** Config file parameter name. */ /** Default name */ //public static final String DEFAULT_DEFINITIONS_FILE_NAME = "/WEB-INF/componentDefinitions.xml"; /** Config file parameter name. */ pt!DEFINITIONS_CONFIG_PARAMETER_NAMEq~¢xsq~ uq~pppppsq~#q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xpppt "definitions-config"q~¥q~¥q~¥xsq~(sq~ uq~ppppq~!^sq~ uq~ppppptŠ/** Config file parameter name */ /** Config file parameter name */ /** Config file parameter name. */ /** Config file parameter name. */ ptPARSER_DETAILS_PARAMETER_NAMEq~¢xsq~ uq~pppppsq~#q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xpppt "definitions-parser-details"q~¥q~¥q~¥xsq~(sq~ uq~ppppq~!^sq~ uq~ppppptŠ/** Config file parameter name */ /** Config file parameter name */ /** Config file parameter name. */ /** Config file parameter name. */ ptPARSER_VALIDATE_PARAMETER_NAMEq~¢xsq~ uq~pppppsq~#q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xpppt "definitions-parser-validate"q~¥q~¥q~¥xsq~(sq~ uq~ppppq~!^sq~ uq~pppppt˜/** Possible definition filenames. */ /** Possible definition filenames. */ /** Possible definition filenames. */ /** Possible definition filenames. */ ptDEFAULT_DEFINITION_FILENAMESq~¢xsq~ uq~pppppsq~#q~¦q~¥q~{t[]sq~#xsq~ uq~ppppsq~ uq~ppppsq~#q~»xpppt° { "/WEB-INF/tileDefinitions.xml", "/WEB-INF/componentDefinitions.xml", "/WEB-INF/instanceDefinitions.xml"}q~¥q~¥q~¥xsq~(sq~ uq~ppppq~!^sq~ uq~pppppt`/** Default factory. */ /** Default factory. */ /** Default factory. */ /** Default factory. */ ptdefaultFactoryq~¢xsq~ uq~pppppq~¥q~¦q~¥sq~zsq~ uq~ sq~(sq~ uq~ppppq~!Ìsq~ uq~pppppt/** */ pt definitionsq~¢xsq~ uq~pppppq~¥q~¦q~¥q~¼pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xppppq~¥q~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~!Üsq~ uq~ppppppptnameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq~!Üsq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~°pq~§xsq~bsq~ uq~ppppq~!Üsq~ uq~ppppppptservletContextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Öpq~§xpq~!Ìsq~ uq~ppppptB/** * Get a definition by its name. * @throws DefinitionsFactoryException An error occur while getting * definition. * @throws NoSuchDefinitionException No definition found for specified name * Implementation can throw more accurate exception as a subclass of this * exception */ pt getDefinitionq~¢xsq~ uq~pppppq~¥q~¦q~¥q~¾pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t< return (ComponentDefinition)definitions.get(name); sq~ uq~sq~sq~ uq~ sq~esq~ uq~ppppq~"sq~ uq~pppppt"/** * Constructor. */ ptNoSuchDefinitionExceptionq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t super(); sq~ uq~ppppq~¥q~¥xsq~esq~ uq~sq~bsq~ uq~ppppq~"sq~ uq~ppppppptmsgq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~"sq~ uq~pppppt"/** * Constructor. */ pq~" q~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t super(msg); sq~ uq~ppppq~¥q~¥xsq~esq~ uq~ppppq~"sq~ uq~pppppt"/** * Constructor. */ pq~" q~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t super(); sq~ uq~ppppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppq~"=sq~ uq~ppppppptmsgq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~"sq~ uq~pppppt"/** * Constructor. */ pq~" q~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t super(msg); sq~ uq~ppppq~–q~–xsq~esq~ uq~ppppq~"sq~ uq~pppppt"/** * Constructor. */ pq~" q~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t super(); sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq~"csq~ uq~ppppppptmsgq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~"sq~ uq~pppppt>/** * Constructor. * @param msg Message. */ pq~" q~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t super(msg); sq~ uq~ppppq~~q~~xsq~esq~ uq~ppppq~"sq~ uq~pppppt"/** * Constructor. */ pq~" q~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft super(); sq~ uq~ppppq~fq~fxsq~esq~ uq~sq~bsq~ uq~ppppq~"‰sq~ uq~ppppppptmsgq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~"sq~ uq~pppppt>/** * Constructor. * @param msg Message. */ pq~" q~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft super(msg); sq~ uq~ppppq~fq~fxpq~sq~ uq~pppppppq~" q~¢xsq~ uq~sq~Csq~ uq~ppppq~Œsq~ uq~ppppsq~#q~"xsq~Csq~ uq~ppppsq~Qsq~ uq~sq~Csq~ uq~ppppq~"­sq~ uq~ppppsq~#q~ðxsq~Csq~ uq~ppppq~"­sq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq~"­sq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq~"­sq~ uq~ppppsq~#sq~zsq~ uq~ppppsq~sq~ uq~sq~zsq~ uq~ppppq~"Ësq~ uq~pppppq~‡pt BeanUtilsq~=xsq~ uq~ sq~Csq~ uq~ppppq~bsq~ uq~ppppsq~#q~"Îxsq~Csq~ uq~ppppq~ûsq~ uq~ppppsq~#q~"Îxsq~Csq~ uq~ppppsq~Qsq~ uq~ sq~Csq~ uq~ppppq~"åsq~ uq~ppppsq~#q~ðxsq~Csq~ uq~ppppq~"åsq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq~"åsq~ uq~ppppsq~#q~xq~"âsq~Csq~ uq~ppppq~"åsq~ uq~ppppsq~#sq~zsq~ uq~sq~(sq~ uq~ppppq~#sq~ uq~ppppptÁ// ----------------------------------------------------- Manifest Constants /** * The context attributes key under which our ActionServlet * instance will be stored. * * @since Struts 1.1 */ // ----------------------------------------------------- Manifest Constants /** * The context attributes key under which our ActionServlet * instance will be stored. * * @since Struts 1.1 */ // ----------------------------------------------------- Manifest Constants /** * The context attributes key under which our ActionServlet * instance will be stored. * * @since Struts 1.1 */ ptACTION_SERVLET_KEYq~rxsq~ uq~pppppsq~#q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xpppt3 "org.apache.struts.action.ACTION_SERVLET"q~–q~–q~–xsq~(sq~ uq~ppppq~#sq~ uq~pppppt=/** *

      The base of the context attributes key under which our * ApplicationConfig data structure will be stored. This * will be suffixed with the actual module prefix (including the * leading "/" character) to form the actual attributes key.

      * *

      For each request processed by the controller servlet, the * ApplicationConfig object for the module selected by * the request URI currently being processed will also be exposed under * this key as a request attribute.

      * * @since Struts 1.1 */ /** *

      The base of the context attributes key under which our * ModuleConfig data structure will be stored. This * will be suffixed with the actual module prefix (including the * leading "/" character) to form the actual attributes key.

      * *

      For each request processed by the controller servlet, the * ModuleConfig object for the module selected by * the request URI currently being processed will also be exposed under * this key as a request attribute.

      * * @since Struts 1.1 * @deprecated Use MODULE_KEY */ /** *

      The base of the context attributes key under which our * ModuleConfig data structure will be stored. This * will be suffixed with the actual module prefix (including the * leading "/" character) to form the actual attributes key.

      * *

      For each request processed by the controller servlet, the * ModuleConfig object for the module selected by * the request URI currently being processed will also be exposed under * this key as a request attribute.

      * * @since Struts 1.1 * @deprecated Use MODULE_KEY */ ptAPPLICATION_KEYq~rxsq~ uq~pppppsq~#q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xpppt+ "org.apache.struts.action.MODULE"q~–q~–q~–xsq~(sq~ uq~ppppq~#sq~ uq~ppppptÖ/** * The context attributes key under which our default * configured data source (which must implement * javax.sql.DataSource) is stored, * if one is configured for this module. */ /** * The context attributes key under which our default * configured data source (which must implement * javax.sql.DataSource) is stored, * if one is configured for this module. */ /** * The context attributes key under which our default * configured data source (which must implement * javax.sql.DataSource) is stored, * if one is configured for this module. */ ptDATA_SOURCE_KEYq~rxsq~ uq~pppppsq~#q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xpppt. "org.apache.struts.action.DATA_SOURCE"q~–q~–q~–xsq~(sq~ uq~ppppq~#sq~ uq~pppppt©/** * The request attributes key under which your action should store an * org.apache.struts.action.ActionErrors object, if you * are using the corresponding custom tag library elements. */ /** * The request attributes key under which your action should store an * org.apache.struts.action.ActionErrors object, if you * are using the corresponding custom tag library elements. */ /** * The request attributes key under which your action should store an * org.apache.struts.action.ActionErrors object, if you * are using the corresponding custom tag library elements. */ pt ERROR_KEYq~rxsq~ uq~pppppsq~#q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xpppt( "org.apache.struts.action.ERROR"q~–q~–q~–xsq~(sq~ uq~ppppq~#sq~ uq~ppppptŠ/** * The request attributes key under which Struts custom tags might store a * Throwable that caused them to report a JspException at * runtime. This value can be used on an error page to provide more * detailed information about what really went wrong. */ /** * The request attributes key under which Struts custom tags might store a * Throwable that caused them to report a JspException at * runtime. This value can be used on an error page to provide more * detailed information about what really went wrong. */ /** * The request attributes key under which Struts custom tags might store a * Throwable that caused them to report a JspException at * runtime. This value can be used on an error page to provide more * detailed information about what really went wrong. */ pt EXCEPTION_KEYq~rxsq~ uq~pppppsq~#q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xpppt. "org.apache.struts.action.EXCEPTION"q~–q~–q~–xsq~(sq~ uq~ppppq~#sq~ uq~ppppptz/** * The context attributes key under which our * org.apache.struts.action.ActionFormBeans collection * is normally stored, unless overridden when initializing our * ActionServlet. * * @deprecated Replaced by collection in ApplicationConfig */ /** * The context attributes key under which our * org.apache.struts.action.ActionFormBeans collection * is normally stored, unless overridden when initializing our * ActionServlet. * * @deprecated Replaced by collection in ModuleConfig */ /** * The context attributes key under which our * org.apache.struts.action.ActionFormBeans collection * is normally stored, unless overridden when initializing our * ActionServlet. * * @deprecated Replaced by collection in ModuleConfig */ ptFORM_BEANS_KEYq~rxsq~ uq~pppppsq~#q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xpppt/ "org.apache.struts.action.FORM_BEANS"q~–q~–q~–xsq~(sq~ uq~ppppq~#sq~ uq~ppppptz/** * The context attributes key under which our * org.apache.struts.action.ActionForwards collection * is normally stored, unless overridden when initializing our * ActionServlet. * * @deprecated Replaced by collection in ApplicationConfig. */ /** * The context attributes key under which our * org.apache.struts.action.ActionForwards collection * is normally stored, unless overridden when initializing our * ActionServlet. * * @deprecated Replaced by collection in ModuleConfig. */ /** * The context attributes key under which our * org.apache.struts.action.ActionForwards collection * is normally stored, unless overridden when initializing our * ActionServlet. * * @deprecated Replaced by collection in ModuleConfig. */ pt FORWARDS_KEYq~rxsq~ uq~pppppsq~#q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xpppt+ "org.apache.struts.action.FORWARDS"q~–q~–q~–xsq~(sq~ uq~ppppq~#sq~ uq~pppppt/** * The session attributes key under which the user's selected * java.util.Locale is stored, if any. If no such * attribute is found, the system default locale * will be used when retrieving internationalized messages. If used, this * attribute is typically set during user login processing. */ /** * The session attributes key under which the user's selected * java.util.Locale is stored, if any. If no such * attribute is found, the system default locale * will be used when retrieving internationalized messages. If used, this * attribute is typically set during user login processing. */ /** * The session attributes key under which the user's selected * java.util.Locale is stored, if any. If no such * attribute is found, the system default locale * will be used when retrieving internationalized messages. If used, this * attribute is typically set during user login processing. */ pt LOCALE_KEYq~rxsq~ uq~pppppsq~#q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xpppt) "org.apache.struts.action.LOCALE"q~–q~–q~–xsq~(sq~ uq~ppppq~#sq~ uq~pppppt³/** * The request attributes key under which our * org.apache.struts.ActionMapping instance * is passed. */ /** * The request attributes key under which our * org.apache.struts.ActionMapping instance * is passed. */ /** * The request attributes key under which our * org.apache.struts.ActionMapping instance * is passed. */ pt MAPPING_KEYq~rxsq~ uq~pppppsq~#q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xpppt5 "org.apache.struts.action.mapping.instance"q~–q~–q~–xsq~(sq~ uq~ppppq~#sq~ uq~ppppptw/** * The context attributes key under which our * org.apache.struts.action.ActionMappings collection * is normally stored, unless overridden when initializing our * ActionServlet. * * @deprecated Replaced by collection in ApplicationConfig */ /** * The context attributes key under which our * org.apache.struts.action.ActionMappings collection * is normally stored, unless overridden when initializing our * ActionServlet. * * @deprecated Replaced by collection in ModuleConfig */ /** * The context attributes key under which our * org.apache.struts.action.ActionMappings collection * is normally stored, unless overridden when initializing our * ActionServlet. * * @deprecated Replaced by collection in ModuleConfig */ pt MAPPINGS_KEYq~rxsq~ uq~pppppsq~#q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xpppt+ "org.apache.struts.action.MAPPINGS"q~–q~–q~–xsq~(sq~ uq~ppppq~#sq~ uq~pppppt/** * The request attributes key under which your action should store an * org.apache.struts.action.ActionMessages object, if you * are using the corresponding custom tag library elements. * * @since Struts 1.1 */ /** * The request attributes key under which your action should store an * org.apache.struts.action.ActionMessages object, if you * are using the corresponding custom tag library elements. * * @since Struts 1.1 */ /** * The request attributes key under which your action should store an * org.apache.struts.action.ActionMessages object, if you * are using the corresponding custom tag library elements. * * @since Struts 1.1 */ pt MESSAGE_KEYq~rxsq~ uq~pppppsq~#q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xpppt1 "org.apache.struts.action.ACTION_MESSAGE"q~–q~–q~–xsq~(sq~ uq~ppppq~#sq~ uq~pppppt„/** *

      The base of the context attributes key under which our * module MessageResources will be stored. This * will be suffixed with the actual module prefix (including the * leading "/" character) to form the actual resources key.

      * *

      For each request processed by the controller servlet, the * MessageResources object for the module selected by * the request URI currently being processed will also be exposed under * this key as a request attribute.

      */ /** *

      The base of the context attributes key under which our * module MessageResources will be stored. This * will be suffixed with the actual module prefix (including the * leading "/" character) to form the actual resources key.

      * *

      For each request processed by the controller servlet, the * MessageResources object for the module selected by * the request URI currently being processed will also be exposed under * this key as a request attribute.

      */ /** *

      The base of the context attributes key under which our * module MessageResources will be stored. This * will be suffixed with the actual module prefix (including the * leading "/" character) to form the actual resources key.

      * *

      For each request processed by the controller servlet, the * MessageResources object for the module selected by * the request URI currently being processed will also be exposed under * this key as a request attribute.

      */ pt MESSAGES_KEYq~rxsq~ uq~pppppsq~#q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xpppt* "org.apache.struts.action.MESSAGE"q~–q~–q~–xsq~(sq~ uq~ppppq~#sq~ uq~pppppt/** * The request attributes key under which our multipart class is stored. */ /** * The request attributes key under which our multipart class is stored. */ /** * The request attributes key under which our multipart class is stored. */ pt MULTIPART_KEYq~rxsq~ uq~pppppsq~#q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xpppt; "org.apache.struts.action.mapping.multipartclass"q~–q~–q~–xsq~(sq~ uq~ppppq~#sq~ uq~pppppt«/** *

      The base of the context attributes key under which an array of * PlugIn instances will be stored. This * will be suffixed with the actual module prefix (including the * leading "/" character) to form the actual attributes key.

      * @since Struts 1.1 */ /** *

      The base of the context attributes key under which an array of * PlugIn instances will be stored. This * will be suffixed with the actual module prefix (including the * leading "/" character) to form the actual attributes key.

      * @since Struts 1.1 */ /** *

      The base of the context attributes key under which an array of * PlugIn instances will be stored. This * will be suffixed with the actual module prefix (including the * leading "/" character) to form the actual attributes key.

      * @since Struts 1.1 */ pt PLUG_INS_KEYq~rxsq~ uq~pppppsq~#q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xpppt- "org.apache.struts.action.PLUG_INS"q~–q~–q~–xsq~(sq~ uq~ppppq~#sq~ uq~pppppt®/** *

      The base of the context attributes key under which our * RequestProcessor instance will be stored. This * will be suffixed with the actual module prefix (including the * leading "/" character) to form the actual attributes key.

      * @since Struts 1.1 */ /** *

      The base of the context attributes key under which our * RequestProcessor instance will be stored. This * will be suffixed with the actual module prefix (including the * leading "/" character) to form the actual attributes key.

      * @since Struts 1.1 */ /** *

      The base of the context attributes key under which our * RequestProcessor instance will be stored. This * will be suffixed with the actual module prefix (including the * leading "/" character) to form the actual attributes key.

      * @since Struts 1.1 */ ptREQUEST_PROCESSOR_KEYq~rxsq~ uq~pppppsq~#q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xpppt6 "org.apache.struts.action.REQUEST_PROCESSOR"q~–q~–q~–xsq~(sq~ uq~ppppq~#sq~ uq~pppppt /** * The context attributes key under which we store the mapping defined * for our controller serlet, which will be either a path-mapped pattern * (/action/*) or an extension mapped pattern * (*.do). */ /** * The context attributes key under which we store the mapping defined * for our controller serlet, which will be either a path-mapped pattern * (/action/*) or an extension mapped pattern * (*.do). */ /** * The context attributes key under which we store the mapping defined * for our controller serlet, which will be either a path-mapped pattern * (/action/*) or an extension mapped pattern * (*.do). */ pt SERVLET_KEYq~rxsq~ uq~pppppsq~#q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xpppt4 "org.apache.struts.action.SERVLET_MAPPING"q~–q~–q~–xsq~(sq~ uq~ppppq~#sq~ uq~pppppt\/** * The session attributes key under which our transaction token is * stored, if it is used. */ /** * The session attributes key under which our transaction token is * stored, if it is used. */ /** * The session attributes key under which our transaction token is * stored, if it is used. */ ptTRANSACTION_TOKEN_KEYq~rxsq~ uq~pppppsq~#q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xpppt* "org.apache.struts.action.TOKEN"q~–q~–q~–xsq~(sq~ uq~ppppq~#sq~ uq~pppppt~/** *

      The request attributes key under which a boolean true * value should be stored if this request was cancelled.

      * * @since Struts 1.1 */ /** *

      The request attributes key under which a boolean true * value should be stored if this request was cancelled.

      * * @since Struts 1.1 */ pt CANCEL_KEYq~{xsq~ uq~pppppsq~#q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxpppt+ "org.apache.struts.action.CANCEL"q~~q~~q~~xsq~(sq~ uq~ppppq~#sq~ uq~ppppptž/** *

      The base of the context attributes key under which our * ModuleConfig data structure will be stored. This * will be suffixed with the actual module prefix (including the * leading "/" character) to form the actual attributes key.

      * *

      For each request processed by the controller servlet, the * ModuleConfig object for the module selected by * the request URI currently being processed will also be exposed under * this key as a request attribute.

      * * @since Struts 1.1 */ /** *

      The base of the context attributes key under which our * ModuleConfig data structure will be stored. This * will be suffixed with the actual module prefix (including the * leading "/" character) to form the actual attributes key.

      * *

      For each request processed by the controller servlet, the * ModuleConfig object for the module selected by * the request URI currently being processed will also be exposed under * this key as a request attribute.

      * * @since Struts 1.1 */ pt MODULE_KEYq~{xsq~ uq~pppppsq~#q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxpppt+ "org.apache.struts.action.MODULE"q~~q~~q~~xsq~(sq~ uq~ppppq~#sq~ uq~pppppt„/** * The page attributes key under which xhtml status is stored. This may be "true" * or "false". When set to true, the html tags output xhtml. * @since Struts 1.1 */ /** * The page attributes key under which xhtml status is stored. This may be "true" * or "false". When set to true, the html tags output xhtml. * @since Struts 1.1 */ pt XHTML_KEYq~{xsq~ uq~pppppsq~#q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxpppt+ "org.apache.struts.globals.XHTML"q~~q~~q~~xppppsq~sq~ uq~q~Bsq~sq~ uq~ sq~sq~ Buq~Psq~zsq~ uq~ sq~(sq~ uq~ppppq~$Lsq~ uq~ppppptë/** * The name of this package. */ /** * The name of this package. */ /** * The name of this package. */ /** * The name of this package. */ /** * The name of this package. */ ptPackageq~=xsq~ uq~pppppsq~#q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxpppt "org.apache.struts.taglib.html"q~$q~$q~$xsq~(sq~ uq~ppppq~$Lsq~ uq~pppppt|/** * The attribute key for the bean our form is related to. */ /** * The attribute key for the bean our form is related to. */ /** * The attribute key for the bean our form is related to. */ /** * The attribute key for the bean our form is related to. */ /** * The attribute key for the bean our form is related to. */ ptBEAN_KEYq~=xsq~ uq~pppppsq~#q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxpppt Package + ".BEAN"q~$q~$q~$xsq~(sq~ uq~ppppq~$Lsq~ uq~pppppt•/** * The property under which a Cancel button press is reported. */ /** * The property under which a Cancel button press is reported. */ /** * The property under which a Cancel button press is reported. */ /** * The property under which a Cancel button press is reported. */ /** * The property under which a Cancel button press is reported. */ ptCANCEL_PROPERTYq~=xsq~ uq~pppppsq~#q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxpppt Package + ".CANCEL"q~$q~$q~$xsq~(sq~ uq~ppppq~$Lsq~ uq~pppppt£/** * The property under which a Cancel button press is reported, if the * Cancel button is rendered as an image. */ /** * The property under which a Cancel button press is reported, if the * Cancel button is rendered as an image. */ /** * The property under which a Cancel button press is reported, if the * Cancel button is rendered as an image. */ /** * The property under which a Cancel button press is reported, if the * Cancel button is rendered as an image. */ /** * The property under which a Cancel button press is reported, if the * Cancel button is rendered as an image. */ ptCANCEL_PROPERTY_Xq~=xsq~ uq~pppppsq~#q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxpppt Package + ".CANCEL.x"q~$q~$q~$xsq~(sq~ uq~ppppq~$Lsq~ uq~pppppt@/** * The attribute key for the form tag itself. */ /** * The attribute key for the form tag itself. */ /** * The attribute key for the form tag itself. */ /** * The attribute key for the form tag itself. */ /** * The attribute key for the form tag itself. */ ptFORM_KEYq~=xsq~ uq~pppppsq~#q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxpppt Package + ".FORM"q~$q~$q~$xsq~(sq~ uq~ppppq~$Lsq~ uq~ppppptJ/** * The attribute key for the select tag itself. */ /** * The attribute key for the select tag itself. */ /** * The attribute key for the select tag itself. */ /** * The attribute key for the select tag itself. */ /** * The attribute key for the select tag itself. */ pt SELECT_KEYq~=xsq~ uq~pppppsq~#q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxpppt Package + ".SELECT"q~$q~$q~$xsq~(sq~ uq~ppppq~$Lsq~ uq~pppppt‹/** * The property under which a transaction token is reported. */ /** * The property under which a transaction token is reported. */ /** * The property under which a transaction token is reported. */ /** * The property under which a transaction token is reported. */ /** * The property under which a transaction token is reported. */ pt TOKEN_KEYq~=xsq~ uq~pppppsq~#q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxpppt Package + ".TOKEN"q~$q~$q~$xppq~$Isq~ uq~pppppppt Constantsq~=xsq~ uq~ sq~Csq~ uq~ppppq~xsq~ uq~ppppsq~#q~$Lxsq~Csq~ uq~ppppsq~Qsq~ uq~ sq~Csq~ uq~ppppq~$Ísq~ uq~ppppq~cq~8xsq~Csq~ uq~ppppq~$Ísq~ uq~ppppsq~#q~Œxsq~Csq~ uq~ppppq~$Ísq~ uq~ppppsq~#sq~zsq~ uq~ppppq~™sq~ uq~pppppq~‡ptTagq~=xsq~ uq~q~$Ûpppq~$sq~ uq~sq~)sq~ uq~ppppsq~/sq~ uq~q~$ësq~)sq~ uq~ppppq~$îsq~ uq~ppppq~csq~ uq~ppppsq~ uq~srsroo.db.DbInheritanceGo;bÜð7“„xrsroo.db.DbLineGo0ëðlÛZ b_rightAngleL m_backEndGotLsroo/db/DbGraphicalObject;L m_frontEndGoq~$ü[m_pointSegmentt![Ljack/baseDb/db/srtypes/SrPoint;L m_polylinet"Ljack/baseDb/db/srtypes/SrPolygon;L m_rightAngleq~ xq~*sq~ uq~ppppq~$îsq~ uq~ppppsq~#sq~ uq~ppppsq~ uq~ppppppxsq~)sq~ uq~ppppq~$îsq~ uq~ppppq~%sq~ uq~q~$ÿpppsq~ uq~ppppsq~BddÿÿÿÎpxsq~zsq~ uq~ppppq~™sq~ uq~pppppq~‡ptBodyTagSupportq~=xsq~ uq~sq~Csq~ uq~ppppsq~Qsq~ uq~ sq~Csq~ uq~ppppq~%sq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq~%sq~ uq~ppppsq~#q~xq~%sq~Csq~ uq~ppppq~%sq~ uq~ppppsq~#q~-xsq~Csq~ uq~ppppq~%sq~ uq~ppppsq~#sq~zsq~ ªuq~¯sq~(sq~ uq~ppppq~%9sq~ uq~ppppptt// ------------------------------------------------------- Static Variables /** * Commons Logging instance. */ // ------------------------------------------------------- Static Variables /** * Commons Logging instance. */ // ------------------------------------------------------- Static Variables /** * Commons Logging instance. */ ptLOGq~=xsq~ uq~pppppq~$q~yq~$q~9pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~;xpppt& LogFactory.getLog(RequestUtils.class)q~$q~$q~$xsq~(sq~ uq~ppppq~%9sq~ uq~pppppt¨/** * The default Locale for our server. */ /** * The default Locale for our server. */ /** * The default Locale for our server. */ pt defaultLocaleq~=xsq~ uq~pppppsq~#q~yq~$q~5pq~$xsq~ uq~ppppsq~ uq~ppppsq~#sq~Ãxpppt Locale.getDefault()q~$q~$q~$xsq~(sq~ uq~ppppq~%9sq~ uq~pppppt1/** * The message resources for this package. */ /** * The message resources for this package. */ /** * The message resources for this package. */ /** * The message resources for this package. */ /** * The message resources for this package. */ ptmessagesq~=xsq~ uq~pppppq~$q~yq~$q~-pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~%ZxppptU MessageResources.getMessageResources("org.apache.struts.util.LocalStrings")q~$q~$q~$xsq~(sq~ uq~ppppq~%9sq~ uq~ppppptŸ/** * The context attribute under which we store our prefixes list. */ /** * The context attribute under which we store our prefixes list. */ /** * The context attribute under which we store our prefixes list. */ /** * The context attribute under which we store our prefixes list. */ /** * The context attribute under which we store our prefixes list. */ pt PREFIXES_KEYq~=xsq~ uq~pppppsq~#q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~%Zxpppt" "org.apache.struts.util.PREFIXES"q~$q~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~%{sq~ uq~ppppppptrequestq~=xsq~ uq~pppppq~$q~yq~$q~Œpq~$xsq~bsq~ uq~ppppq~%{sq~ uq~ppppppptpathq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xppq~%9sq~ uq~ppppptá// --------------------------------------------------------- Public Methods /** * Create and return an absolute URL for the specified context-relative * path, based on the server and context information in the specified * request. * * @param request The servlet request we are processing * @param path The context-relative path (must start with '/') * * @exception MalformedURLException if we cannot create an absolute URL */ pt absoluteURLq~=xsq~ uq~pppppq~$q~yq~$sq~zsq~ uq~ppppsq~sq~ uq~q~%”sq~zsq~ uq~ppppq~%—sq~ uq~pppppq~‡ptHttpURLConnectionq~=xsq~ uq~sq~Csq~ uq~ppppsq~Qsq~ uq~sq~Csq~ uq~ppppq~%¥sq~ uq~ppppsq~#sq~zsq~ uq~ppppq~Tsq~ uq~pppppq~‡ptBufferedInputStreamq~=xsq~ uq~ q~%¨sq~Csq~ uq~ppppsq~Qsq~ uq~ q~%¶sq~Csq~ uq~ppppq~%¹sq~ uq~ppppsq~#sq~zsq~ uq~ppppq~Tsq~ uq~pppppq~‡ptFileInputStreamq~=xsq~ uq~q~%¼sq~Csq~ uq~ppppsq~Qsq~ uq~ sq~Csq~ uq~ppppq~%Ísq~ uq~ppppsq~#q~Qxsq~Csq~ uq~ppppq~%Ísq~ uq~ppppsq~#q~Wxsq~Csq~ uq~ppppq~%Ísq~ uq~ppppsq~#q~kxq~%Êsq~Csq~ uq~ppppq~%Ísq~ uq~ppppsq~#sq~zsq~ uq~ppppq~Tsq~ uq~pppppq~‡ptByteArrayOutputStreamq~=xsq~ uq~ sq~Csq~ uq~ppppsq~Qsq~ uq~ sq~Csq~ uq~ppppq~%ósq~ uq~ppppsq~#sq~zsq~ uq~ppppq~Tsq~ uq~ppppptJ//Class body not available: class generated only for referencing purposes.ptBufferedOutputStreamq~{xsq~ uq~q~%öpppq~~sq~ uq~sq~)sq~ uq~ppppsq~/sq~ uq~sq~)sq~ uq~ppppq~& sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bdd Bqpxq~Wsq~)sq~ uq~ppppq~& sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bdd mqpxsq~zsq~ uq~ppppq~Tsq~ uq~pppppq~‡pt PrintWriterq~=xsq~ uq~ sq~Csq~ uq~ppppsq~Qsq~ uq~sq~Csq~ uq~ppppq~&,sq~ uq~ppppsq~#q~kxq~&)sq~Csq~ uq~ppppq~&,sq~ uq~ppppsq~#q~Œxsq~Csq~ uq~ppppq~&,sq~ uq~ppppsq~#q~’xsq~Csq~ uq~ppppq~&,sq~ uq~ppppsq~#q~9xsq~Csq~ uq~ppppq~&,sq~ uq~ppppsq~#q~?xsq~Csq~ uq~ppppq~&,sq~ uq~ppppsq~#q~Exsq~Csq~ uq~ppppq~&,sq~ uq~ppppsq~#q~wxsq~Csq~ uq~ppppq~&,sq~ uq~ppppsq~#q~ýxsq~Csq~ uq~ppppq~&,sq~ uq~ppppsq~#q~éxsq~Csq~ uq~ppppq~&,sq~ uq~ppppsq~#q~¾xsq~Csq~ uq~ppppq~&,sq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq~&,sq~ uq~ppppsq~#sq~zsq~ Huq~Jsq~(sq~ uq~ppppq~&wsq~ uq~ppppptœ/** Global user defined debug level */ /** Global user defined debug level */ /** Global user defined debug level */ /** Global user defined debug level */ ptuserDebugLevelq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xpppt 0q~¥q~¥q~¥xsq~(sq~ uq~ppppq~&wsq~ uq~pppppt`/** User Debug level */ /** User Debug level */ /** User Debug level */ /** User Debug level */ ptNO_DEBUGq~¢xsq~ uq~pppppsq~#q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xpppt 0q~¥q~¥q~¥xsq~(sq~ uq~ppppq~&wsq~ uq~pppppt/** * Name of init property carrying debug level * @deprecated use DEFINITIONS_CONFIG_USER_DEBUG_LEVEL instead. */ /** * Name of init property carrying debug level * @deprecated use DEFINITIONS_CONFIG_USER_DEBUG_LEVEL instead. */ /** * Name of init property carrying debug level * @deprecated use DEFINITIONS_CONFIG_USER_DEBUG_LEVEL instead. */ /** * Name of init property carrying debug level * @deprecated use DEFINITIONS_CONFIG_USER_DEBUG_LEVEL instead. */ pt!INSTANCES_CONFIG_USER_DEBUG_LEVELq~¢xsq~ uq~pppppsq~#q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xpppt "instances-debug"q~¥q~¥q~¥xsq~(sq~ uq~ppppq~&wsq~ uq~ppppptÈ/** Name of init property carrying debug level */ /** Name of init property carrying debug level */ /** Name of init property carrying debug level */ /** Name of init property carrying debug level */ pt#DEFINITIONS_CONFIG_USER_DEBUG_LEVELq~¢xsq~ uq~pppppsq~#q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xpppt "definitions-debug"q~¥q~¥q~¥xsq~(sq~ uq~ppppq~&wsq~ uq~ppppptä/** Name of init property carrying factory class name */ /** Name of init property carrying factory class name */ /** Name of init property carrying factory class name */ /** Name of init property carrying factory class name */ ptDEFINITIONS_FACTORY_CLASSNAMEq~¢xsq~ uq~pppppsq~#q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xpppt "definitions-factory-class"q~¥q~¥q~¥xsq~(sq~ uq~ppppq~&wsq~ uq~ppppptØ/** Constant name used to store factory in context */ /** Constant name used to store factory in context */ /** Constant name used to store factory in context */ /** Constant name used to store factory in context */ ptDEFINITIONS_FACTORYq~¢xsq~ uq~pppppsq~#q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xpppt. "org.apache.struts.tiles.DEFINITIONS_FACTORY"q~¥q~¥q~¥xsq~(sq~ uq~ppppq~&wsq~ uq~pppppt/** Constant name used to store definition in jsp context. * Used to pass definition from a Struts action to servlet forward */ /** Constant name used to store definition in jsp context. * Used to pass definition from a Struts action to servlet forward */ /** Constant name used to store definition in jsp context. * Used to pass definition from a Struts action to servlet forward */ /** Constant name used to store definition in jsp context. * Used to pass definition from a Struts action to servlet forward */ ptACTION_DEFINITIONq~¢xsq~ uq~pppppsq~#q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xpppt, "org.apache.struts.tiles.ACTION_DEFINITION"q~¥q~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~&ésq~ uq~ppppppptlevelq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xpppq~&wsq~ uq~ppppptY/** * Set user debug level. This property control level of errors output. */ ptsetUserDebugLevelq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥t# userDebugLevel = level; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~'sq~ uq~pppppppt servletConfigq~¢xsq~ uq~pppppq~¥q~¦q~¥sq~zsq~ uq~ppppq~³sq~ uq~ppppptJ//Class body not available: class generated only for referencing purposes.pt ServletConfigq~¢xsq~ uq~ sq~Csq~ uq~ppppq~Œsq~ uq~ppppsq~#q~' xsq~Csq~ uq~ppppsq~Qsq~ uq~sq~Csq~ uq~ppppq~'sq~ uq~ppppsq~#q~xq~'sq~Csq~ uq~ppppq~'sq~ uq~ppppsq~#q~Öxsq~Csq~ uq~ppppq~'sq~ uq~ppppsq~#q~Œxsq~Csq~ uq~ppppq~'sq~ uq~ppppsq~#q~°xsq~Csq~ uq~ppppq~'sq~ uq~ppppsq~#q~¼xsq~Csq~ uq~ppppq~'sq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq~'sq~ uq~ppppsq~#q~jxsq~Csq~ uq~ppppq~'sq~ uq~ppppsq~#sq~zsq~ #uq~'sq~(sq~ uq~ppppq~'Rsq~ uq~ppppptZ/** The underlying factory */ /** The underlying factory */ /** The underlying factory */ ptfactoryq~rxsq~ uq~pppppq~–q~—q~–q~–pq~˜xsq~ uq~ppppsq~ uq~ppppq~–sq~Ãxppppq~–q~–q~–xsq~(sq~ uq~ppppq~'Rsq~ uq~ppppptT/** Factory configuration*/ /** Factory configuration*/ /** Factory configuration*/ ptconfigq~rxsq~ uq~pppppq~–q~—q~–sq~zsq~ Huq~Jsq~(sq~ uq~ppppq~'lsq~ uq~ppppptn/** * Fully qualfied classname of the factory to create. * If no classname is set, a default factory is created * (of class "org.apache.struts.tiles.xmlDefinition.I18nFactorySet"). */ /** * Fully qualified classname of the factory to create. * If no classname is set, a default factory is created * (of class "org.apache.struts.tiles.xmlDefinition.I18nFactorySet"). */ /** * Fully qualified classname of the factory to create. * If no classname is set, a default factory is created * (of class "org.apache.struts.tiles.xmlDefinition.I18nFactorySet"). */ ptfactoryClassnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xpppt7 "org.apache.struts.tiles.xmlDefinition.I18nFactorySet"q~–q~–q~–xsq~(sq~ uq~ppppq~'lsq~ uq~pppppt?/** * Debug level value. 0=no debug info >0 = debug info. */ /** * Debug level value. 0=no debug info >0 = debug info. * @deprecated Use commons-logging mechanism. */ /** * Debug level value. 0=no debug info >0 = debug info. * @deprecated Use commons-logging mechanism. */ pt debugLevelq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xpppt 0q~–q~–q~–xsq~(sq~ uq~ppppq~'lsq~ uq~ppppptÉ/** * Debug level value used when parsing configuration file. * . 0=no debug info >0 = debug info. */ /** * Debug level value used when parsing configuration file. * 0=no debug info; >0 = debug info. * @deprecated Use commons-logging mechanism. */ /** * Debug level value used when parsing configuration file. * 0=no debug info; >0 = debug info. * @deprecated Use commons-logging mechanism. */ ptparserDebugLevelq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xpppt 0q~–q~–q~–xsq~(sq~ uq~ppppq~'lsq~ uq~ppppptP/** * Do we want the parser to validate configuration file ? * Default value is true. */ /** * Specifies whether the parser will validate configuration files. * Default value is true. */ /** * Specifies whether the parser will validate configuration files. * Default value is true. */ ptparserValidateq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xpppt trueq~–q~–q~–xsq~(sq~ uq~ppppq~'lsq~ uq~pppppt¥/** Definition configuration file specofied by user */ /** Definition configuration file specified by user */ /** Definition configuration file specified by user */ ptdefinitionConfigFilesq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xppppq~–q~–q~–xsq~(sq~ uq~ppppq~'lsq~ uq~ppppptð/** Alternate name for parser debug details properties in configuration file */ /** Alternate name for parser debug details properties in configuration file */ /** Alternate name for parser debug details properties in configuration file */ ptPARSER_DETAILS_PARAMETER_NAMEq~rxsq~ uq~pppppsq~#q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xpppt "definitions-parser-details"q~–q~–q~–xsq~(sq~ uq~ppppq~'lsq~ uq~ppppptá/** Alternate name for parser validate properties in configuration file */ /** Alternate name for parser validate properties in configuration file */ /** Alternate name for parser validate properties in configuration file */ ptPARSER_VALIDATE_PARAMETER_NAMEq~rxsq~ uq~pppppsq~#q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xpppt "definitions-parser-validate"q~–q~–q~–xsq~(sq~ uq~ppppq~'lsq~ uq~ppppptç/** Alternate name for factory classname properties in configuration file */ /** Alternate name for factory classname properties in configuration file */ /** Alternate name for factory classname properties in configuration file */ pt FACTORY_CLASSNAME_PARAMETER_NAMEq~rxsq~ uq~pppppsq~#q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xpppt "definitions-factory-class"q~–q~–q~–xsq~(sq~ uq~ppppq~'lsq~ uq~ppppptä/** Alternate name for definition files properties in configuration file */ /** Alternate name for definition files properties in configuration file */ /** Alternate name for definition files properties in configuration file */ pt!DEFINITIONS_CONFIG_PARAMETER_NAMEq~rxsq~ uq~pppppsq~#q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xpppt "definitions-config"q~–q~–q~–xsq~(sq~ uq~ppppq~'lsq~ uq~ppppptü/** Alternate name for definition debug details properties in configuration file */ /** Alternate name for definition debug details properties in configuration file */ /** Alternate name for definition debug details properties in configuration file */ ptTILES_DETAILS_PARAMETER_NAMEq~rxsq~ uq~pppppsq~#q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xpppt "definitions-debug"q~–q~–q~–xsq~(sq~ uq~ppppq~'lsq~ uq~pppppt£/** * Map of extra attribute available. */ /** * Map of extra attribute available. */ /** * Map of extra attribute available. */ ptextraAttributesq~rxsq~ uq~pppppq~–q~—q~–q~¼pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~'bxpppt new HashMap()q~–q~–q~–xsq~esq~ uq~ppppq~'lsq~ uq~pppppt(/** * Default constructor. */ ptDefinitionsFactoryConfigq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t sq~ uq~ppppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppq~("sq~ uq~ppppppptinitParametersq~rxsq~ uq~pppppq~–q~—q~–q~¼pq~˜xpppq~'lsq~ uq~ppppptö/** * Constructor. * Create configuration object, and initialize it with parameters from Map. * Parameters corresponding to an attribute are filtered and stored in appropriate * attribute. * @param initParameters */ pq~(q~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~'lsq~ uq~pppppt/** * Access method for the factoryClassname property. * * @return the current value of the factoryClassname property */ ptgetFactoryClassnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t% return factoryClassname; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~(Isq~ uq~ppppppptaFactoryClassnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~'lsq~ uq~ppppptš/** * Sets the value of the factoryClassname property. * * @param aFactoryClassname the new value of the factoryClassname property */ ptsetFactoryClassnameq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t2 factoryClassname = aFactoryClassname; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~'lsq~ uq~ppppptƒ/** * Access method for the debugLevel property. * * @return the current value of the debugLevel property */ pt getDebugLevelq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return debugLevel; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~(qsq~ uq~pppppppt aDebugLevelq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xpppq~'lsq~ uq~ppppptˆ/** * Sets the value of the debugLevel property. * * @param aDebugLevel the new value of the debugLevel property */ pt setDebugLevelq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t& debugLevel = aDebugLevel; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~'lsq~ uq~pppppt/** * Access method for the parserDebugLevel property. * * @return the current value of the parserDebugLevel property */ ptgetParserDebugLevelq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t% return parserDebugLevel; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~(™sq~ uq~ppppppptaParserDebugLevelq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xpppq~'lsq~ uq~ppppptš/** * Sets the value of the parserDebugLevel property. * * @param aParserDebugLevel the new value of the parserDebugLevel property */ ptsetParserDebugLevelq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t2 parserDebugLevel = aParserDebugLevel; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~'lsq~ uq~pppppt–/** * Determines if the parserValidate property is true. * * @return true if the parserValidate property is true */ ptgetParserValidateq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t# return parserValidate; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~(Ásq~ uq~ppppppptaParserValidateq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xpppq~'lsq~ uq~pppppt”/** * Sets the value of the parserValidate property. * * @param aParserValidate the new value of the parserValidate property */ ptsetParserValidateq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t. parserValidate = aParserValidate; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~'lsq~ uq~pppppt™/** * Access method for the definitionConfigFiles property. * * @return the current value of the definitionConfigFiles property */ ptgetDefinitionConfigFilesq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t* return definitionConfigFiles; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~(ésq~ uq~ppppppptaDefinitionConfigFilesq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~'lsq~ uq~pppppt©/** * Sets the value of the definitionConfigFiles property. * * @param aDefinitionConfigFiles the new value of the definitionConfigFiles property */ ptsetDefinitionConfigFilesq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t< definitionConfigFiles = aDefinitionConfigFiles; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~)sq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq~)sq~ uq~ppppppptvalueq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xppq~'lsq~ uq~ppppptŠ/** * Set a new extra attribute value. * @param name Name of the attribute. * @param value Value of the attribute. */ pt setAttributeq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t+ extraAttributes.put(name, value); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~)!sq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~'lsq~ uq~pppppt•/** * Get extra attribute value. * @param name Name of the attribute. * @return Value of the attribute, or null if not found. */ pt getAttributeq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t, return extraAttributes.get(name); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~'lsq~ uq~pppppts/** * Get extra attributes as a Map. * @return Map A Map containing attribute name - value pair. */ pt getAttributesq~rxsq~ uq~pppppq~–q~—q~–q~¼pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tw Map map = new HashMap(extraAttributes); // Add property attributes using old names /* map.put(DEFINITIONS_CONFIG_PARAMETER_NAME, getDefinitionConfigFiles()); map.put(TILES_DETAILS_PARAMETER_NAME, Integer.toString(getDebugLevel()) ); map.put(PARSER_DETAILS_PARAMETER_NAME, Integer.toString(getParserDebugLevel()) ); map.put(PARSER_VALIDATE_PARAMETER_NAME, new Boolean(getParserValidate()).toString() ); if( ! "org.apache.struts.tiles.xmlDefinition.I18nFactorySet".equals(getFactoryClassname()) ) map.put(FACTORY_CLASSNAME_PARAMETER_NAME, getFactoryClassname()); */ return map; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~)Isq~ uq~pppppppt propertiesq~rxsq~ uq~pppppq~–q~—q~–q~¼pq~˜xpppq~'lsq~ uq~ppppptf/** * Populate this config object from properties map, based on * the specified name/value pairs. This method uses the populate() method from * org.apache.commons.beanutils.BeanUtil. *

      * Properties keys are scanned for old property names, and linked to new name * if necessary. This modify the properties map. *

      * The particular setter method to be called for each property is * determined using the usual JavaBeans introspection mechanisms. Thus, * you may identify custom setter methods using a BeanInfo class that is * associated with the class of the bean itself. If no such BeanInfo * class is available, the standard method name conversion ("set" plus * the capitalized name of the property in question) is used. *

      * NOTE: It is contrary to the JavaBeans Specification * to have more than one setter method (with different argument * signatures) for the same property. * * @param properties Map keyed by property name, with the * corresponding (String or String[]) value(s) to be set * * @exception IllegalAccessException if the caller does not have * access to the property accessor method * @exception InvocationTargetException if the property accessor method * throws an exception * @see org.apache.commons.beanutils.BeanUtil */ ptpopulateq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t // link old parameter names for backward compatibility linkOldPropertyNames(properties); BeanUtils.populate( this, properties); sq~ uq~sq~sq~ uq~ppppq~~sq~ uq~pppppq~‡ptIllegalAccessExceptionq~=xsq~ uq~ppppq~$sq~ uq~sq~)sq~ uq~ppppq~sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~BddDqpxq~)apppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~~sq~ uq~ppppppptIllegalAccessException.javaq~$xsq~ uq~ppppsq~ uq~q~)apppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxsq~ uq~sq~isq~ uq~ppppsq~zsq~ 8uq~9sq~esq~ uq~sq~bsq~ uq~ppppq~)sq~ uq~ppppppptconfigq~=xsq~ uq~pppppq~$q~yq~$q~#pq~$xpppq~)Œsq~ uq~pppppt// ----------------------------------------------------------- Constructors /** * Construct a new DynaActionFormClass for the specified form bean * configuration. This constructor is private; DynaActionFormClass * instances will be created as needed via calls to the * static createDynaActionFormClass() method. * * @param config The FormBeanConfig instance describing the properties * of the bean to be created * * @exception IllegalArgumentException if the bean implementation class * specified in the configuration is not DynaActionForm (or a subclass * of DynaActionForm) */ ptDynaActionFormClassq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~%Zxq~$t' introspect(config); sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~)Œsq~ uq~ppppptL// ----------------------------------------------------- Instance Variables /** * The DynaActionForm implementation Class which * we will use to create new bean instances. */ // ----------------------------------------------------- Instance Variables /** * The DynaActionForm implementation Class which * we will use to create new bean instances. */ // ----------------------------------------------------- Instance Variables /** * The DynaActionForm implementation Class which * we will use to create new bean instances. */ // ----------------------------------------------------- Instance Variables /** * The DynaActionForm implementation Class which * we will use to create new bean instances. */ // ----------------------------------------------------- Instance Variables /** * The DynaActionForm implementation Class which * we will use to create new bean instances. */ pt beanClassq~=xsq~ uq~pppppq~$q~yq~$q~½pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$sq~#q~$xsq~(sq~ uq~ppppq~)Œsq~ uq~pppppt‹/** * The "dynamic class name" for this DynaClass. */ /** * The "dynamic class name" for this DynaClass. */ /** * The "dynamic class name" for this DynaClass. */ /** * The "dynamic class name" for this DynaClass. */ /** * The "dynamic class name" for this DynaClass. */ ptnameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq~)Œsq~ uq~pppppt¤/** * The set of dynamic properties that are part of this DynaClass. */ /** * The set of dynamic properties that are part of this DynaClass. */ /** * The set of dynamic properties that are part of this DynaClass. */ /** * The set of dynamic properties that are part of this DynaClass. */ /** * The set of dynamic properties that are part of this DynaClass. */ pt propertiesq~=xsq~ uq~pppppq~$q~yq~$sq~zsq~ uq~ppppq~"Ësq~ uq~pppppq~‡pt DynaPropertyq~=xsq~ uq~sq~Csq~ uq~ppppsq~Qsq~ uq~ sq~Csq~ uq~ppppq~)Øsq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq~)Øsq~ uq~ppppsq~#sq~•sq~ uq~ppppq~"Ësq~ uq~pppppq~ûptDynaBeanq~=xsq~ uq~ q~)ásq~Csq~ uq~ppppq~Ísq~ uq~ppppsq~#q~)çxsq~Csq~ uq~ppppsq~Qsq~ ,uq~,sq~Csq~ uq~ppppq~)øsq~ uq~ppppsq~#q~ðxsq~Csq~ uq~ppppq~)øsq~ uq~ppppsq~#q~Üxsq~Csq~ uq~ppppq~)øsq~ uq~ppppsq~#sq~sq~ uq~ppppq~%—sq~ uq~pppppq~‡ptMalformedURLExceptionq~=xsq~ uq~ sq~Csq~ uq~ppppq~bsq~ uq~ppppsq~#q~* xsq~Csq~ uq~ppppq~%¥sq~ uq~ppppsq~#q~* xsq~Csq~ uq~ppppsq~Qsq~ uq~ q~*!sq~Csq~ uq~ppppq~*$sq~ uq~ppppsq~#q~¼xsq~Csq~ uq~ppppq~*$sq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq~*$sq~ uq~ppppsq~#q~%9xsq~Csq~ uq~ppppq~*$sq~ uq~ppppsq~#sq~zsq~ uq~sq~(sq~ uq~ppppq~*?sq~ uq~pppppt²// ------------------------------------------------------- Static Variables /** * The message resources for this package. */ // ------------------------------------------------------- Static Variables /** * The message resources for this package. */ // ------------------------------------------------------- Static Variables /** * The message resources for this package. */ // ------------------------------------------------------- Static Variables /** * The message resources for this package. */ // ------------------------------------------------------- Static Variables /** * The message resources for this package. */ ptmessagesq~=xsq~ uq~pppppq~$q~yq~$q~-pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~;xpppt_ MessageResources.getMessageResources ("org.apache.struts.util.LocalStrings")q~$q~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~*Qsq~ uq~ppppppptvalueq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~*?sq~ uq~ppppptf// --------------------------------------------------------- Public Methods /** * Filter the specified string for characters that are senstive to * HTML interpreters, returning the string with these characters replaced * by the corresponding character entities. * * @param value The string to be filtered and returned */ ptfilterq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxq~$t- if (value == null) return (null); char content[] = new char[value.length()]; value.getChars(0, value.length(), content, 0); StringBuffer result = new StringBuffer(content.length + 50); for (int i = 0; i < content.length; i++) { switch (content[i]) { case '<': result.append("<"); break; case '>': result.append(">"); break; case '&': result.append("&"); break; case '"': result.append("""); break; default: result.append(content[i]); } } return (result.toString()); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~*jsq~ uq~pppppppt pageContextq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~bsq~ uq~ppppq~*jsq~ uq~pppppppttextq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xppq~*?sq~ uq~pppppt1/** * Write the specified text as the response to the writer associated with * this page. WARNING - If you are writing body content * from the doAfterBody() method of a custom tag class that * implements BodyTag, you should be calling * writePrevious() instead. * * @param pageContext The PageContext object for this page * @param text The text to be written * * @exception JspException if an input/output error occurs (already saved) */ ptwriteq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxq~$t9 JspWriter writer = pageContext.getOut(); try { writer.print(text); } catch (IOException e) { RequestUtils.saveException(pageContext, e); throw new JspException (messages.getMessage("write.io", e.toString())); } sq~ uq~q~pppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~*‹sq~ uq~pppppppt pageContextq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~bsq~ uq~ppppq~*‹sq~ uq~pppppppttextq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xppq~*?sq~ uq~ppppptr/** * Write the specified text as the response to the writer associated with * the body content for the tag within which we are currently nested. * * @param pageContext The PageContext object for this page * @param text The text to be written * * @exception JspException if an input/output error occurs (already saved) */ pt writePreviousq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxq~$t¨ JspWriter writer = pageContext.getOut(); if (writer instanceof BodyContent) writer = ((BodyContent) writer).getEnclosingWriter(); try { writer.print(text); } catch (IOException e) { RequestUtils.saveException(pageContext, e); throw new JspException (messages.getMessage("write.io", e.toString())); } sq~ uq~q~pppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~*¬sq~ uq~ppppppptvalueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~*?sq~ uq~pppppt÷// --------------------------------------------------------- Public Methods /** * Filter the specified string for characters that are senstive to * HTML interpreters, returning the string with these characters replaced * by the corresponding character entities. * Please Note: Apostrpohes (') will not be encoded since * there is not a way to determine whether a left or right apostrophen was * intended. See the following link for more details on HTML encodings: * *http://www.htmlhelp.com/reference/html40/entities/special.html. * * * @param value The string to be filtered and returned */ptfilterq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥t- if (value == null) return (null); char content[] = new char[value.length()]; value.getChars(0, value.length(), content, 0); StringBuffer result = new StringBuffer(content.length + 50); for (int i = 0; i < content.length; i++) { switch (content[i]) { case '<': result.append("<"); break; case '>': result.append(">"); break; case '&': result.append("&"); break; case '"': result.append("""); break; default: result.append(content[i]); } } return (result.toString()); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~*Åsq~ uq~pppppppt pageContextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~bsq~ uq~ppppq~*Åsq~ uq~pppppppttextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xppq~*?sq~ uq~pppppt1/** * Write the specified text as the response to the writer associated with * this page. WARNING - If you are writing body content * from the doAfterBody() method of a custom tag class that * implements BodyTag, you should be calling * writePrevious() instead. * * @param pageContext The PageContext object for this page * @param text The text to be written * * @exception JspException if an input/output error occurs (already saved) */ ptwriteq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥t9 JspWriter writer = pageContext.getOut(); try { writer.print(text); } catch (IOException e) { RequestUtils.saveException(pageContext, e); throw new JspException (messages.getMessage("write.io", e.toString())); } sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~*æsq~ uq~pppppppt pageContextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~bsq~ uq~ppppq~*æsq~ uq~pppppppttextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xppq~*?sq~ uq~ppppptr/** * Write the specified text as the response to the writer associated with * the body content for the tag within which we are currently nested. * * @param pageContext The PageContext object for this page * @param text The text to be written * * @exception JspException if an input/output error occurs (already saved) */ pt writePreviousq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥t¨ JspWriter writer = pageContext.getOut(); if (writer instanceof BodyContent) writer = ((BodyContent) writer).getEnclosingWriter(); try { writer.print(text); } catch (IOException e) { RequestUtils.saveException(pageContext, e); throw new JspException (messages.getMessage("write.io", e.toString())); } sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~+sq~ uq~ppppppptvalueq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~*?sq~ uq~ppppptf// --------------------------------------------------------- Public Methods /** * Filter the specified string for characters that are senstive to * HTML interpreters, returning the string with these characters replaced * by the corresponding character entities. * * @param value The string to be filtered and returned */ ptfilterq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t† if (value == null) return (null); char content[] = new char[value.length()]; value.getChars(0, value.length(), content, 0); StringBuffer result = new StringBuffer(content.length + 50); for (int i = 0; i < content.length; i++) { switch (content[i]) { case '<': result.append("<"); break; case '>': result.append(">"); break; case '&': result.append("&"); break; case '"': result.append("""); break; case '\'': result.append("'"); break; default: result.append(content[i]); } } return (result.toString()); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~+ sq~ uq~pppppppt pageContextq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~bsq~ uq~ppppq~+ sq~ uq~pppppppttextq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xppq~*?sq~ uq~pppppt1/** * Write the specified text as the response to the writer associated with * this page. WARNING - If you are writing body content * from the doAfterBody() method of a custom tag class that * implements BodyTag, you should be calling * writePrevious() instead. * * @param pageContext The PageContext object for this page * @param text The text to be written * * @exception JspException if an input/output error occurs (already saved) */ ptwriteq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t9 JspWriter writer = pageContext.getOut(); try { writer.print(text); } catch (IOException e) { RequestUtils.saveException(pageContext, e); throw new JspException (messages.getMessage("write.io", e.toString())); } sq~ uq~q~pppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~+Asq~ uq~pppppppt pageContextq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~bsq~ uq~ppppq~+Asq~ uq~pppppppttextq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xppq~*?sq~ uq~ppppptr/** * Write the specified text as the response to the writer associated with * the body content for the tag within which we are currently nested. * * @param pageContext The PageContext object for this page * @param text The text to be written * * @exception JspException if an input/output error occurs (already saved) */ pt writePreviousq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t¨ JspWriter writer = pageContext.getOut(); if (writer instanceof BodyContent) writer = ((BodyContent) writer).getEnclosingWriter(); try { writer.print(text); } catch (IOException e) { RequestUtils.saveException(pageContext, e); throw new JspException (messages.getMessage("write.io", e.toString())); } sq~ uq~q~pppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~+bsq~ uq~ppppppptvalueq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~*?sq~ uq~ppppptf// --------------------------------------------------------- Public Methods /** * Filter the specified string for characters that are senstive to * HTML interpreters, returning the string with these characters replaced * by the corresponding character entities. * * @param value The string to be filtered and returned */ ptfilterq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t† if (value == null) return (null); char content[] = new char[value.length()]; value.getChars(0, value.length(), content, 0); StringBuffer result = new StringBuffer(content.length + 50); for (int i = 0; i < content.length; i++) { switch (content[i]) { case '<': result.append("<"); break; case '>': result.append(">"); break; case '&': result.append("&"); break; case '"': result.append("""); break; case '\'': result.append("'"); break; default: result.append(content[i]); } } return (result.toString()); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~+{sq~ uq~pppppppt pageContextq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~bsq~ uq~ppppq~+{sq~ uq~pppppppttextq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xppq~*?sq~ uq~pppppt1/** * Write the specified text as the response to the writer associated with * this page. WARNING - If you are writing body content * from the doAfterBody() method of a custom tag class that * implements BodyTag, you should be calling * writePrevious() instead. * * @param pageContext The PageContext object for this page * @param text The text to be written * * @exception JspException if an input/output error occurs (already saved) */ ptwriteq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t9 JspWriter writer = pageContext.getOut(); try { writer.print(text); } catch (IOException e) { RequestUtils.saveException(pageContext, e); throw new JspException (messages.getMessage("write.io", e.toString())); } sq~ uq~q~pppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~+œsq~ uq~pppppppt pageContextq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~bsq~ uq~ppppq~+œsq~ uq~pppppppttextq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xppq~*?sq~ uq~ppppptr/** * Write the specified text as the response to the writer associated with * the body content for the tag within which we are currently nested. * * @param pageContext The PageContext object for this page * @param text The text to be written * * @exception JspException if an input/output error occurs (already saved) */ pt writePreviousq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t¨ JspWriter writer = pageContext.getOut(); if (writer instanceof BodyContent) writer = ((BodyContent) writer).getEnclosingWriter(); try { writer.print(text); } catch (IOException e) { RequestUtils.saveException(pageContext, e); throw new JspException (messages.getMessage("write.io", e.toString())); } sq~ uq~q~pppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~+½sq~ uq~ppppppptvalueq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~*?sq~ uq~ppppptf// --------------------------------------------------------- Public Methods /** * Filter the specified string for characters that are senstive to * HTML interpreters, returning the string with these characters replaced * by the corresponding character entities. * * @param value The string to be filtered and returned */ ptfilterq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft† if (value == null) return (null); char content[] = new char[value.length()]; value.getChars(0, value.length(), content, 0); StringBuffer result = new StringBuffer(content.length + 50); for (int i = 0; i < content.length; i++) { switch (content[i]) { case '<': result.append("<"); break; case '>': result.append(">"); break; case '&': result.append("&"); break; case '"': result.append("""); break; case '\'': result.append("'"); break; default: result.append(content[i]); } } return (result.toString()); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq~+Ösq~ uq~pppppppt pageContextq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~bsq~ uq~ppppq~+Ösq~ uq~pppppppttextq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxppq~*?sq~ uq~pppppt1/** * Write the specified text as the response to the writer associated with * this page. WARNING - If you are writing body content * from the doAfterBody() method of a custom tag class that * implements BodyTag, you should be calling * writePrevious() instead. * * @param pageContext The PageContext object for this page * @param text The text to be written * * @exception JspException if an input/output error occurs (already saved) */ ptwriteq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft9 JspWriter writer = pageContext.getOut(); try { writer.print(text); } catch (IOException e) { RequestUtils.saveException(pageContext, e); throw new JspException (messages.getMessage("write.io", e.toString())); } sq~ uq~q~pppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq~+÷sq~ uq~pppppppt pageContextq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~bsq~ uq~ppppq~+÷sq~ uq~pppppppttextq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxppq~*?sq~ uq~ppppptr/** * Write the specified text as the response to the writer associated with * the body content for the tag within which we are currently nested. * * @param pageContext The PageContext object for this page * @param text The text to be written * * @exception JspException if an input/output error occurs (already saved) */ pt writePreviousq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft¨ JspWriter writer = pageContext.getOut(); if (writer instanceof BodyContent) writer = ((BodyContent) writer).getEnclosingWriter(); try { writer.print(text); } catch (IOException e) { RequestUtils.saveException(pageContext, e); throw new JspException (messages.getMessage("write.io", e.toString())); } sq~ uq~q~pppq~fq~fxpppsq~sq~ "uq~+q~-sq~zsq~ ¨uq~¯sq~(sq~ uq~ppppq~,sq~ uq~pppppt”// ----------------------------------------------------- Instance Variables /** * Commons DBCP DataSource instance. */ // ----------------------------------------------------- Instance Variables /** * Commons DBCP DataSource instance. */ // ----------------------------------------------------- Instance Variables /** * Commons DBCP DataSource instance. */ // ----------------------------------------------------- Instance Variables /** * Commons DBCP DataSource instance. */ // ----------------------------------------------------- Instance Variables /** * Commons DBCP DataSource instance. */ pt dataSourceq~=xsq~ uq~pppppq~$q~yq~$sq~zsq~ uq~ppppsq~sq~ uq~q~,'sq~Qsq~ uq~ppppq~,*sq~ uq~ppppppptBasicDataSource.javaq~$xsq~ uq~ppppsq~ uq~q~,'pppq~$xppsq~sq~ uq~ sq~sq~ uq~sq~zsq~ uq~ppppq~,:sq~ uq~pppppq~‡pt FastHashMapq~=xsq~ uq~ sq~Csq~ uq~ppppsq~Qsq~ uq~sq~Csq~ uq~ppppq~,Hsq~ uq~ppppsq~#q~°xsq~Csq~ uq~ppppq~,Hsq~ uq~ppppsq~#q~Œxq~,Epq~Bsq~ uq~pppppt Æ/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/action/ActionMappings.java,v 1.12 2003/04/15 00:18:45 dgraham Exp $ * $Revision: 1.12 $ * $Date: 2003/04/15 00:18:45 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Encapsulate a collection of ActionMapping objects that can be * administered and searched, while hiding the internal implementation. * * @author Craig R. McClanahan * @version $Revision: 1.12 $ $Date: 2003/04/15 00:18:45 $ * * @deprecated Replaced by collection of ActionConfig instances in * {@link org.apache.struts.config.ModuleConfig} */ ptActionMappings.javaq~fxsq~ uq~ppppsq~ uq~sq~zsq~ 5uq~9sq~(sq~ uq~ppppq~,_sq~ uq~pppppt4// ----------------------------------------------------- Instance Variables /** * The collection of ActionMapping instances, keyed by request path. */ // ----------------------------------------------------- Instance Variables /** * The collection of ActionMapping instances, keyed by request path. */ // ----------------------------------------------------- Instance Variables /** * The collection of ActionMapping instances, keyed by request path. */ // ----------------------------------------------------- Instance Variables /** * The collection of ActionMapping instances, keyed by request path. */ // ----------------------------------------------------- Instance Variables /** * The collection of ActionMapping instances, keyed by request path. */ ptmappingsq~=xsq~ uq~pppppq~$q~yq~$q~,=pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt new FastHashMap()q~$q~$q~$xsq~(sq~ uq~ppppq~,_sq~ uq~ppppptw/** * The ActionServlet instance of our owning application. */ /** * The ActionServlet instance of our owning application. */ /** * The ActionServlet instance of our owning application. */ /** * The ActionServlet instance of our owning application. */ /** * The ActionServlet instance of our owning application. */ ptservletq~=xsq~ uq~pppppq~$q~yq~$q~ ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$sq~#q~$xsq~(sq~ uq~ppppq~,_sq~ uq~pppppt½/** * The ActionMapping that should handle unknown request paths, if any. */ /** * The ActionMapping that should handle unknown request paths, if any. */ /** * The ActionMapping that should handle unknown request paths, if any. */ /** * The ActionMapping that should handle unknown request paths, if any. */ /** * The ActionMapping that should handle unknown request paths, if any. */ ptunknownq~=xsq~ uq~pppppq~$q~yq~$q~épq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~,_sq~ uq~pppppt// ------------------------------------------------------------- Properties /** * Return the "fast" mode flag. */ ptgetFastq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t0 return (mappings.getFast()); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~,sq~ uq~ppppppptfastq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xpppq~,_sq~ uq~ppppptb/** * Set the "fast" mode flag. * * @param fast The new fast mode flag */ ptsetFastq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t+ mappings.setFast(fast); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~,µsq~ uq~ppppppptrequestq~=xsq~ uq~pppppq~$q~yq~$q~°pq~$xpppq~,_sq~ uq~pppppt%/** * Return the Action that should handle unknown request paths, if any. * The default implementation casts the request to HttpServletRequest * and calls the corresponding version of this method. * * @param request The servlet request we are processing */ pt getUnknownq~=xsq~ uq~pppppq~$q~yq~$q~épq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tF return (getUnknown((HttpServletRequest) request)); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~,Ísq~ uq~ppppppptrequestq~=xsq~ uq~pppppq~$q~yq~$q~Œpq~$xpppq~,_sq~ uq~ppppptž/** * Return the Action that should handle unknown request paths, if any. * * @param request The servlet request we are processing */ pt getUnknownq~=xsq~ uq~pppppq~$q~yq~$q~épq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t‡ if (unknown != null) return (unknown); String paths[] = findMappings(); for (int i = 0; i < paths.length; i++) { ActionMapping mapping = findMapping(paths[i]); if (mapping.getUnknown()) { unknown = mapping; return (mapping); } } return (null); sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~,_sq~ uq~ppppptg/** * Return the ActionServlet instance of our owning * application. */ pt getServletq~=xsq~ uq~pppppq~$q~yq~$q~ ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t* return (this.servlet); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~,õsq~ uq~ppppppptservletq~=xsq~ uq~pppppq~$q~yq~$q~ ppq~$xpppq~,_sq~ uq~pppppt”/** * Set the ActionServlet instance of our owning application. * * @param servlet The new servlet instance */ pt setServletq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t+ this.servlet = servlet; sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~- sq~ uq~ppppppptmappingq~=xsq~ uq~pppppq~$q~yq~$q~épq~$xpppq~,_sq~ uq~ppppptÜ// --------------------------------------------------------- Public Methods /** * Register a logical mapping to the set configured for this servlet. * * @param mapping The mapping to be added */ pt addMappingq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$td mappings.put(mapping.getPath(), mapping); // mapping.setMappings(this); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~-%sq~ uq~ppppppptpathq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~,_sq~ uq~ppppptÕ/** * Return the mapping associated with the specified logical name, * if any; otherwise return null. * * @param path The request path for which to retrieve a mapping */ pt findMappingq~=xsq~ uq~pppppq~$q~yq~$q~épq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t9 return ((ActionMapping) mappings.get(path)); sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~,_sq~ uq~ppppptž/** * Return the set of paths for mappings defined in this collection. * If there are no such mappings, a zero-length array is returned. */ pt findMappingsq~=xsq~ uq~pppppq~$q~yq~$q~{t[]q~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tk return ((String[]) mappings.keySet().toArray(new String[mappings.size()])); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~-Nsq~ uq~ppppppptmappingq~=xsq~ uq~pppppq~$q~yq~$q~épq~$xpppq~,_sq~ uq~pppppt’/** * Deregister a mapping from the set configured for this servlet. * * @param mapping The mapping to be deregistered */ pt removeMappingq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t^ mappings.remove(mapping.getPath()); // mapping.setMappings(null); sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~,_sq~ uq~pppppt// ------------------------------------------------------------- Properties /** * Return the "fast" mode flag. */ ptgetFastq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t0 return (mappings.getFast()); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~-vsq~ uq~ppppppptfastq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xpppq~,_sq~ uq~ppppptb/** * Set the "fast" mode flag. * * @param fast The new fast mode flag */ ptsetFastq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t+ mappings.setFast(fast); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~-Žsq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~°pq~§xpppq~,_sq~ uq~pppppt%/** * Return the Action that should handle unknown request paths, if any. * The default implementation casts the request to HttpServletRequest * and calls the corresponding version of this method. * * @param request The servlet request we are processing */ pt getUnknownq~¢xsq~ uq~pppppq~¥q~¦q~¥q~épq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tF return (getUnknown((HttpServletRequest) request)); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~-¦sq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Œpq~§xpppq~,_sq~ uq~ppppptž/** * Return the Action that should handle unknown request paths, if any. * * @param request The servlet request we are processing */ pt getUnknownq~¢xsq~ uq~pppppq~¥q~¦q~¥q~épq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t‡ if (unknown != null) return (unknown); String paths[] = findMappings(); for (int i = 0; i < paths.length; i++) { ActionMapping mapping = findMapping(paths[i]); if (mapping.getUnknown()) { unknown = mapping; return (mapping); } } return (null); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~,_sq~ uq~ppppptg/** * Return the ActionServlet instance of our owning * application. */ pt getServletq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t* return (this.servlet); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~-Îsq~ uq~ppppppptservletq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ ppq~§xpppq~,_sq~ uq~pppppt”/** * Set the ActionServlet instance of our owning application. * * @param servlet The new servlet instance */ pt setServletq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t+ this.servlet = servlet; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~-æsq~ uq~ppppppptmappingq~¢xsq~ uq~pppppq~¥q~¦q~¥q~épq~§xpppq~,_sq~ uq~ppppptÜ// --------------------------------------------------------- Public Methods /** * Register a logical mapping to the set configured for this servlet. * * @param mapping The mapping to be added */ pt addMappingq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥td mappings.put(mapping.getPath(), mapping); // mapping.setMappings(this); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~-þsq~ uq~ppppppptpathq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~,_sq~ uq~ppppptÕ/** * Return the mapping associated with the specified logical name, * if any; otherwise return null. * * @param path The request path for which to retrieve a mapping */ pt findMappingq~¢xsq~ uq~pppppq~¥q~¦q~¥q~épq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t9 return ((ActionMapping) mappings.get(path)); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~,_sq~ uq~ppppptž/** * Return the set of paths for mappings defined in this collection. * If there are no such mappings, a zero-length array is returned. */ pt findMappingsq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{t[]q~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tk return ((String[]) mappings.keySet().toArray(new String[mappings.size()])); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~.'sq~ uq~ppppppptmappingq~¢xsq~ uq~pppppq~¥q~¦q~¥q~épq~§xpppq~,_sq~ uq~pppppt’/** * Deregister a mapping from the set configured for this servlet. * * @param mapping The mapping to be deregistered */ pt removeMappingq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t^ mappings.remove(mapping.getPath()); // mapping.setMappings(null); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~,_sq~ uq~pppppt// ------------------------------------------------------------- Properties /** * Return the "fast" mode flag. */ ptgetFastq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t0 return (mappings.getFast()); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~.Osq~ uq~ppppppptfastq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xpppq~,_sq~ uq~ppppptb/** * Set the "fast" mode flag. * * @param fast The new fast mode flag */ ptsetFastq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t+ mappings.setFast(fast); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~.gsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~°pq~˜xpppq~,_sq~ uq~pppppt%/** * Return the Action that should handle unknown request paths, if any. * The default implementation casts the request to HttpServletRequest * and calls the corresponding version of this method. * * @param request The servlet request we are processing */ pt getUnknownq~rxsq~ uq~pppppq~–q~—q~–q~épq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tF return (getUnknown((HttpServletRequest) request)); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~.sq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xpppq~,_sq~ uq~ppppptž/** * Return the Action that should handle unknown request paths, if any. * * @param request The servlet request we are processing */ pt getUnknownq~rxsq~ uq~pppppq~–q~—q~–q~épq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t‡ if (unknown != null) return (unknown); String paths[] = findMappings(); for (int i = 0; i < paths.length; i++) { ActionMapping mapping = findMapping(paths[i]); if (mapping.getUnknown()) { unknown = mapping; return (mapping); } } return (null); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~,_sq~ uq~ppppptg/** * Return the ActionServlet instance of our owning * application. */ pt getServletq~rxsq~ uq~pppppq~–q~—q~–q~ ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t* return (this.servlet); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~.§sq~ uq~ppppppptservletq~rxsq~ uq~pppppq~–q~—q~–q~ ppq~˜xpppq~,_sq~ uq~pppppt”/** * Set the ActionServlet instance of our owning application. * * @param servlet The new servlet instance */ pt setServletq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t+ this.servlet = servlet; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~.¿sq~ uq~ppppppptmappingq~rxsq~ uq~pppppq~–q~—q~–q~épq~˜xpppq~,_sq~ uq~ppppptÜ// --------------------------------------------------------- Public Methods /** * Register a logical mapping to the set configured for this servlet. * * @param mapping The mapping to be added */ pt addMappingq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–td mappings.put(mapping.getPath(), mapping); // mapping.setMappings(this); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~.×sq~ uq~ppppppptpathq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~,_sq~ uq~ppppptÕ/** * Return the mapping associated with the specified logical name, * if any; otherwise return null. * * @param path The request path for which to retrieve a mapping */ pt findMappingq~rxsq~ uq~pppppq~–q~—q~–q~épq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t9 return ((ActionMapping) mappings.get(path)); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~,_sq~ uq~ppppptž/** * Return the set of paths for mappings defined in this collection. * If there are no such mappings, a zero-length array is returned. */ pt findMappingsq~rxsq~ uq~pppppq~–q~—q~–q~{t[]q~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tk return ((String[]) mappings.keySet().toArray(new String[mappings.size()])); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~/sq~ uq~ppppppptmappingq~rxsq~ uq~pppppq~–q~—q~–q~épq~˜xpppq~,_sq~ uq~pppppt’/** * Deregister a mapping from the set configured for this servlet. * * @param mapping The mapping to be deregistered */ pt removeMappingq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t^ mappings.remove(mapping.getPath()); // mapping.setMappings(null); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~,_sq~ uq~pppppt// ------------------------------------------------------------- Properties /** * Return the "fast" mode flag. */ ptgetFastq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t0 return (mappings.getFast()); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~/(sq~ uq~ppppppptfastq~{xsq~ uq~pppppq~~q~q~~q~pq~€xpppq~,_sq~ uq~ppppptb/** * Set the "fast" mode flag. * * @param fast The new fast mode flag */ ptsetFastq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t+ mappings.setFast(fast); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~/@sq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~°pq~€xpppq~,_sq~ uq~pppppt%/** * Return the Action that should handle unknown request paths, if any. * The default implementation casts the request to HttpServletRequest * and calls the corresponding version of this method. * * @param request The servlet request we are processing */ pt getUnknownq~{xsq~ uq~pppppq~~q~q~~q~épq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tF return (getUnknown((HttpServletRequest) request)); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~/Xsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xpppq~,_sq~ uq~ppppptž/** * Return the Action that should handle unknown request paths, if any. * * @param request The servlet request we are processing */ pt getUnknownq~{xsq~ uq~pppppq~~q~q~~q~épq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t‡ if (unknown != null) return (unknown); String paths[] = findMappings(); for (int i = 0; i < paths.length; i++) { ActionMapping mapping = findMapping(paths[i]); if (mapping.getUnknown()) { unknown = mapping; return (mapping); } } return (null); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~,_sq~ uq~ppppptg/** * Return the ActionServlet instance of our owning * application. */ pt getServletq~{xsq~ uq~pppppq~~q~q~~q~ ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t* return (this.servlet); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~/€sq~ uq~ppppppptservletq~{xsq~ uq~pppppq~~q~q~~q~ ppq~€xpppq~,_sq~ uq~pppppt”/** * Set the ActionServlet instance of our owning application. * * @param servlet The new servlet instance */ pt setServletq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t+ this.servlet = servlet; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~/˜sq~ uq~ppppppptmappingq~{xsq~ uq~pppppq~~q~q~~q~épq~€xpppq~,_sq~ uq~ppppptÜ// --------------------------------------------------------- Public Methods /** * Register a logical mapping to the set configured for this servlet. * * @param mapping The mapping to be added */ pt addMappingq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tg mappings.put(mapping.getPath(), mapping); // mapping.setMappings(this); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~/°sq~ uq~ppppppptpathq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~,_sq~ uq~ppppptÕ/** * Return the mapping associated with the specified logical name, * if any; otherwise return null. * * @param path The request path for which to retrieve a mapping */ pt findMappingq~{xsq~ uq~pppppq~~q~q~~q~épq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t< return ((ActionMapping) mappings.get(path)); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~,_sq~ uq~ppppptž/** * Return the set of paths for mappings defined in this collection. * If there are no such mappings, a zero-length array is returned. */ pt findMappingsq~{xsq~ uq~pppppq~~q~q~~q~{t[]q~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tk return ((String[]) mappings.keySet().toArray(new String[mappings.size()])); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~/Ùsq~ uq~ppppppptmappingq~{xsq~ uq~pppppq~~q~q~~q~épq~€xpppq~,_sq~ uq~pppppt’/** * Deregister a mapping from the set configured for this servlet. * * @param mapping The mapping to be deregistered */ pt removeMappingq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~ta mappings.remove(mapping.getPath()); // mapping.setMappings(null); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~,_sq~ uq~pppppt// ------------------------------------------------------------- Properties /** * Return the "fast" mode flag. */ ptgetFastq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft0 return (mappings.getFast()); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq~0sq~ uq~ppppppptfastq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxpppq~,_sq~ uq~ppppptb/** * Set the "fast" mode flag. * * @param fast The new fast mode flag */ ptsetFastq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft+ mappings.setFast(fast); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq~0sq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~°pq~hxpppq~,_sq~ uq~pppppt%/** * Return the Action that should handle unknown request paths, if any. * The default implementation casts the request to HttpServletRequest * and calls the corresponding version of this method. * * @param request The servlet request we are processing */ pt getUnknownq~cxsq~ uq~pppppq~fq~gq~fq~épq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftF return (getUnknown((HttpServletRequest) request)); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq~01sq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxpppq~,_sq~ uq~ppppptž/** * Return the Action that should handle unknown request paths, if any. * * @param request The servlet request we are processing */ pt getUnknownq~cxsq~ uq~pppppq~fq~gq~fq~épq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft‡ if (unknown != null) return (unknown); String paths[] = findMappings(); for (int i = 0; i < paths.length; i++) { ActionMapping mapping = findMapping(paths[i]); if (mapping.getUnknown()) { unknown = mapping; return (mapping); } } return (null); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~,_sq~ uq~ppppptg/** * Return the ActionServlet instance of our owning * application. */ pt getServletq~cxsq~ uq~pppppq~fq~gq~fq~ ppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft* return (this.servlet); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq~0Ysq~ uq~ppppppptservletq~cxsq~ uq~pppppq~fq~gq~fq~ ppq~hxpppq~,_sq~ uq~pppppt”/** * Set the ActionServlet instance of our owning application. * * @param servlet The new servlet instance */ pt setServletq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft+ this.servlet = servlet; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq~0qsq~ uq~ppppppptmappingq~cxsq~ uq~pppppq~fq~gq~fq~épq~hxpppq~,_sq~ uq~ppppptÜ// --------------------------------------------------------- Public Methods /** * Register a logical mapping to the set configured for this servlet. * * @param mapping The mapping to be added */ pt addMappingq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftg mappings.put(mapping.getPath(), mapping); // mapping.setMappings(this); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq~0‰sq~ uq~ppppppptpathq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~,_sq~ uq~ppppptÕ/** * Return the mapping associated with the specified logical name, * if any; otherwise return null. * * @param path The request path for which to retrieve a mapping */ pt findMappingq~cxsq~ uq~pppppq~fq~gq~fq~épq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft< return ((ActionMapping) mappings.get(path)); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~,_sq~ uq~ppppptž/** * Return the set of paths for mappings defined in this collection. * If there are no such mappings, a zero-length array is returned. */ pt findMappingsq~cxsq~ uq~pppppq~fq~gq~fq~{t[]q~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftk return ((String[]) mappings.keySet().toArray(new String[mappings.size()])); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq~0²sq~ uq~ppppppptmappingq~cxsq~ uq~pppppq~fq~gq~fq~épq~hxpppq~,_sq~ uq~pppppt’/** * Deregister a mapping from the set configured for this servlet. * * @param mapping The mapping to be deregistered */ pt removeMappingq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fta mappings.remove(mapping.getPath()); // mapping.setMappings(null); sq~ uq~ppppq~fq~fxppppq~Bsq~ uq~ppppppptActionMappingsq~=xsq~ uq~sq~Csq~ uq~ppppsq~Qsq~ uq~sq~Csq~ uq~ppppq~0Òsq~ uq~ppppsq~#q~öxsq~Csq~ uq~ppppq~0Òsq~ uq~ppppsq~#q~5xsq~Csq~ uq~ppppq~0Òsq~ uq~ppppsq~#sq~•sq~ uq~ppppsq~sq~ uq~q~0çsq~Qsq~ uq~ppppq~0êsq~ uq~ppppppptDataSource.javaq~$xsq~ uq~ppppsq~ uq~q~0çpppq~$xppsq~sq~ uq~q~³q~0êppq~ sq~ uq~ppppppptjavaxq~=xsq~ uq~ppppsq~/sq~ uq~srsroo.db.DbPackageGo¤BnjTûL m_packageq~xq~*sq~ uq~ppppq~0ÿsq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~BddFqpxq~³sq~1sq~ uq~ppppq~0ÿsq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bddqqpxq~0êppq~ sq~ uq~pppp/** * Constructor. * @param msg Message. */ pq~7Kq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t super(msg); sq~ uq~ppppq~~q~~xsq~esq~ uq~ppppq~7Bsq~ uq~pppppt"/** * Constructor. */ pq~7Kq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft super(); sq~ uq~ppppq~fq~fxsq~esq~ uq~sq~bsq~ uq~ppppq~7Çsq~ uq~ppppppptmsgq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~7Bsq~ uq~pppppt>/** * Constructor. * @param msg Message. */ pq~7Kq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft super(msg); sq~ uq~ppppq~fq~fxpq~sq~ uq~pppppppq~7Kq~¢xsq~ uq~ sq~Csq~ uq~ppppq~Œsq~ uq~ppppsq~#q~7Bxsq~Csq~ uq~ppppq~"­sq~ uq~ppppsq~#q~7Bxsq~Csq~ uq~ppppq~&,sq~ uq~ppppsq~#q~7Bxsq~Csq~ uq~ppppsq~Qsq~ uq~sq~Csq~ uq~ppppq~7÷sq~ uq~ppppsq~#q~jxsq~Csq~ uq~ppppq~7÷sq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq~7÷sq~ uq~ppppsq~#q~¼xsq~Csq~ uq~ppppq~7÷sq~ uq~ppppsq~#q~' xsq~Csq~ uq~ppppq~7÷sq~ uq~ppppsq~#q~Öxsq~Csq~ uq~ppppq~7÷sq~ uq~ppppsq~#q~°xsq~Csq~ uq~ppppq~7÷sq~ uq~ppppsq~#q~Œxsq~Csq~ uq~ppppq~7÷sq~ uq~ppppsq~#q~¾xsq~Csq~ uq~ppppq~7÷sq~ uq~ppppsq~#q~–xsq~Csq~ uq~ppppq~7÷sq~ uq~ppppsq~#q~xq~7ôsq~Csq~ uq~ppppq~7÷sq~ uq~ppppsq~#q~!^xsq~Csq~ uq~ppppq~7÷sq~ uq~ppppsq~#sq~zsq~ uq~sq~(sq~ uq~ppppq~8Bsq~ uq~pppppt@/** Commons Logging instance.*/ /** Commons Logging instance.*/ ptlogq~{xsq~ uq~pppppq~~q~q~~q~9pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~ xpppt# LogFactory.getLog(TilesUtil.class)q~~q~~q~~xsq~(sq~ uq~ppppq~8Bsq~ uq~ppppptV/** The implementation of tilesUtilImpl */ /** The implementation of tilesUtilImpl */ pt tilesUtilImplq~{xsq~ uq~pppppq~~q~q~~sq~zsq~ uq~sq~(sq~ uq~ppppq~8]sq~ uq~pppppt@/** Commons Logging instance.*/ /** Commons Logging instance.*/ ptlogq~{xsq~ uq~pppppq~~q~q~~q~9pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xpppt# LogFactory.getLog(TilesUtil.class)q~~q~~q~~xsq~(sq~ uq~ppppq~8]sq~ uq~pppppt|/** Constant name used to store factory in servlet context */ /** Constant name used to store factory in servlet context */ ptDEFINITIONS_FACTORYq~{xsq~ uq~pppppsq~#q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxpppt. "org.apache.struts.tiles.DEFINITIONS_FACTORY"q~~q~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~8~sq~ uq~pppppppturiq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq~8~sq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xsq~bsq~ uq~ppppq~8~sq~ uq~ppppppptresponseq~{xsq~ uq~pppppq~~q~q~~q~’pq~€xsq~bsq~ uq~ppppq~8~sq~ uq~ppppppptservletContextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xq~8]sq~ uq~pppppt./** * Do a forward using request dispatcher. * * This method is used by the Tiles package anytime a forward is required. * @param uri Uri or Definition name to forward. * @param request Current page request. * @param servletContext Current servlet context. */ pt doForwardq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tG request.getRequestDispatcher( uri ).forward(request, response); sq~ uq~q~kq~¦ppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~8®sq~ uq~pppppppturiq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq~8®sq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xsq~bsq~ uq~ppppq~8®sq~ uq~ppppppptresponseq~{xsq~ uq~pppppq~~q~q~~q~’pq~€xsq~bsq~ uq~ppppq~8®sq~ uq~ppppppptservletContextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xq~8]sq~ uq~pppppt¥/** * Do an include using request dispatcher. * * This method is used by the Tiles package when an include is required. * The Tiles package can use indifferently any form of this method. * @param uri Uri or Definition name to forward. * @param request Current page request. * @param response Current page response. * @param servletContext Current servlet context. */ pt doIncludeq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tG request.getRequestDispatcher( uri ).include(request, response); sq~ uq~q~kq~¦ppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~8Þsq~ uq~pppppppturiq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq~8Þsq~ uq~pppppppt pageContextq~{xsq~ uq~pppppq~~q~q~~q~pq~€xppq~8]sq~ uq~pppppt¨/** * Do an include using PageContext.include(). * * This method is used by the Tiles package when an include is required. * The Tiles package can use indifferently any form of this method. * @param uri Uri or Definition name to forward. * @param request Current page request. * @param response Current page response. * @param servletContext Current servlet context. */ pt doIncludeq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t! pageContext.include(uri); sq~ uq~q~kq~¦ppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~8ÿsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~°pq~€xsq~bsq~ uq~ppppq~8ÿsq~ uq~ppppppptservletContextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xppq~8]sq~ uq~pppppt•/** * Get definition factory from appropriate servlet context. * @return Definitions factory or null if not found. */ ptgetDefinitionsFactoryq~{xsq~ uq~pppppq~~q~q~~sq~•sq~ uq~sq~isq~ uq~sq~bsq~ uq~ppppq~9sq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq~9sq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~°pq~˜xsq~bsq~ uq~ppppq~9sq~ uq~ppppppptservletContextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xpq~9sq~ uq~ppppptÈ/** * Get a definition by its name. * @param name Name of requested definition. * @param request Current servelet request * @param servletContext current servlet context * @throws DefinitionsFactoryException An error occur while getting definition. * @throws NoSuchDefinitionException No definition found for specified name * Implementation can throw more accurate exception as a subclass of this exception */ pt getDefinitionq~rxsq~ uq~pppppq~–q~—q~–q~¾pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–psq~ uq~q~"q~ppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~9Bsq~ uq~ppppppptconfigq~rxsq~ uq~pppppq~–q~—q~–q~'lpq~˜xsq~bsq~ uq~ppppq~9Bsq~ uq~ppppppptservletContextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xppq~9sq~ uq~pppppt|/** * Init definition factory. * This method is called immediately after factory creation, and prior any call * to setConfig(). * * @param config Configuration object used to set factory configuration. * @param servletContext Servlet Context passed to factory. * @throws DefinitionsFactoryException An error occur during initialization. */ ptinitq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–psq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq~9sq~ uq~pppppt^/** *

      Receive notification that the factory is being * shut down.

      */ ptdestroyq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–psq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~9psq~ uq~ppppppptconfigq~rxsq~ uq~pppppq~–q~—q~–q~'lpq~˜xsq~bsq~ uq~ppppq~9psq~ uq~ppppppptservletContextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xppq~9sq~ uq~ppppptÉ/** * Set factory configuration. * This method is used to change factory configuration. * This method is optional, and can send an exception if implementation * doesn't allow change in configuration. * * @param config Configuration object used to set factory configuration. * @param servletContext Servlet Context passed to factory. * @throws DefinitionsFactoryException An error occur during initialization. */ pt setConfigq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–psq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq~9sq~ uq~ppppptI/** * Get factory configuration. * @return TilesConfig */ pt getConfigq~rxsq~ uq~pppppq~–q~—q~–q~'lpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–psq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~9žsq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq~9žsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~°pq~€xsq~bsq~ uq~ppppq~9žsq~ uq~ppppppptservletContextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xpq~9sq~ uq~ppppptÈ/** * Get a definition by its name. * @param name Name of requested definition. * @param request Current servelet request * @param servletContext current servlet context * @throws DefinitionsFactoryException An error occur while getting definition. * @throws NoSuchDefinitionException No definition found for specified name * Implementation can throw more accurate exception as a subclass of this exception */ pt getDefinitionq~{xsq~ uq~pppppq~~q~q~~q~¾pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~psq~ uq~q~"q~ppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~9Åsq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~'lpq~€xsq~bsq~ uq~ppppq~9Åsq~ uq~ppppppptservletContextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xppq~9sq~ uq~pppppt|/** * Init definition factory. * This method is called immediately after factory creation, and prior any call * to setConfig(). * * @param config Configuration object used to set factory configuration. * @param servletContext Servlet Context passed to factory. * @throws DefinitionsFactoryException An error occur during initialization. */ ptinitq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~psq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~9sq~ uq~pppppt^/** *

      Receive notification that the factory is being * shut down.

      */ ptdestroyq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~9ósq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~'lpq~€xsq~bsq~ uq~ppppq~9ósq~ uq~ppppppptservletContextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xppq~9sq~ uq~ppppptÉ/** * Set factory configuration. * This method is used to change factory configuration. * This method is optional, and can send an exception if implementation * doesn't allow change in configuration. * * @param config Configuration object used to set factory configuration. * @param servletContext Servlet Context passed to factory. * @throws DefinitionsFactoryException An error occur during initialization. */ pt setConfigq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~psq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~9sq~ uq~ppppptI/** * Get factory configuration. * @return TilesConfig */ pt getConfigq~{xsq~ uq~pppppq~~q~q~~q~'lpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~:!sq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq~:!sq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~°pq~hxsq~bsq~ uq~ppppq~:!sq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxpq~9sq~ uq~ppppptÈ/** * Get a definition by its name. * @param name Name of requested definition. * @param request Current servelet request * @param servletContext current servlet context * @throws DefinitionsFactoryException An error occur while getting definition. * @throws NoSuchDefinitionException No definition found for specified name * Implementation can throw more accurate exception as a subclass of this exception */ pt getDefinitionq~cxsq~ uq~pppppq~fq~gq~fq~¾pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fpsq~ uq~q~"q~ppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq~:Hsq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~'lpq~hxsq~bsq~ uq~ppppq~:Hsq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxppq~9sq~ uq~pppppt|/** * Init definition factory. * This method is called immediately after factory creation, and prior any call * to setConfig(). * * @param config Configuration object used to set factory configuration. * @param servletContext Servlet Context passed to factory. * @throws DefinitionsFactoryException An error occur during initialization. */ ptinitq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fpsq~ uq~q~pppq~fq~fxsq~isq~ uq~ppppq~9sq~ uq~pppppt^/** *

      Receive notification that the factory is being * shut down.

      */ ptdestroyq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fpsq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq~:vsq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~'lpq~hxsq~bsq~ uq~ppppq~:vsq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxppq~9sq~ uq~ppppptÉ/** * Set factory configuration. * This method is used to change factory configuration. * This method is optional, and can send an exception if implementation * doesn't allow change in configuration. * * @param config Configuration object used to set factory configuration. * @param servletContext Servlet Context passed to factory. * @throws DefinitionsFactoryException An error occur during initialization. */ pt setConfigq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fpsq~ uq~q~pppq~fq~fxsq~isq~ uq~ppppq~9sq~ uq~ppppptI/** * Get factory configuration. * @return TilesConfig */ pt getConfigq~cxsq~ uq~pppppq~fq~gq~fq~'lpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fpsq~ uq~ppppq~fq~fxppppq~sq~ uq~ppppppptDefinitionsFactoryq~rxsq~ uq~ sq~Csq~ uq~ppppsq~Qsq~ uq~ sq~Csq~ uq~ppppq~:¬sq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq~:¬sq~ uq~ppppsq~#q~–xq~:©sq~Csq~ uq~ppppq~:¬sq~ uq~ppppsq~#q~'lxsq~Csq~ uq~ppppq~:¬sq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq~:¬sq~ uq~ppppsq~#q~8Bxpppsq~sq~ uq~!sq~sq~ uq~sq~zsq~ )uq~,sq~(sq~ uq~ppppq~:Ósq~ uq~ppppptH/** Debug flag */ /** Debug flag */ /** Debug flag */ /** Debug flag */ ptdebugq~¢xsq~ uq~pppppsq~#q~¦q~¥q~pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xpppt trueq~¥q~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~:æsq~ uq~pppppppt scopeNameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq~:æsq~ uq~pppppppt defaultValueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xppq~:Ósq~ uq~pppppt%/** * Get scope value from string value * @param scopeName scope as a String * @param default returned value, if not found. * @return scope as an int, or defaultValue if scope is null. * @throws JspException Scope name is not recognize as a valid scope. */ ptgetScopeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥tê if(scopeName==null) return defaultValue; else if( scopeName.equals("request") ) { return PageContext.REQUEST_SCOPE; } else if( scopeName.equals("page") ) { return PageContext.PAGE_SCOPE; } else if( scopeName.equals("session") ) { return PageContext.SESSION_SCOPE; } else if( scopeName.equals("application") ) { return PageContext.APPLICATION_SCOPE; } else if( scopeName.equals("component") ) { return ComponentConstants.COMPONENT_SCOPE; } else if( scopeName.equals("template") ) { return ComponentConstants.COMPONENT_SCOPE; } else if( scopeName.equals("tile") ) { return ComponentConstants.COMPONENT_SCOPE; } else { throw new JspException( "Error - scope translation tag : unrecognized scope '" + scopeName + "'" ); } sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~;sq~ uq~ppppppptbeanq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~bsq~ uq~ppppq~;sq~ uq~ppppppptnameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xppq~:Ósq~ uq~pppppt©/** * Return the value of the specified property of the specified bean, * no matter which property reference format is used, with no * type conversions. * * @param bean Bean whose property is to be extracted * @param name Possibly indexed and/or nested name of the property * to be extracted * * @exception IllegalAccessException if the caller does not have * access to the property accessor method * @exception InvocationTargetException if the property accessor method * throws an exception * @exception NoSuchMethodException if an accessor method for this * propety cannot be found */ pt getPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥t< return (PropertyUtils.getProperty(bean, name)); sq~ uq~q~)aq~ðsq~sq~ uq~ppppq~~sq~ uq~pppppq~‡ptNoSuchMethodExceptionq~=xsq~ uq~ppppq~$sq~ uq~sq~)sq~ uq~ppppq~sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bddšqpxq~;(pppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~~sq~ uq~ppppppptNoSuchMethodException.javaq~$xsq~ uq~ppppsq~ uq~q~;(pppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxsq~ uq~ sq~isq~ uq~sq~bsq~ uq~ppppq~;Psq~ uq~ppppppptnameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppsq~zsq~ uq~sq~(sq~ uq~ppppq~;[sq~ uq~pppppt // ----------------------------------------------------- Instance Variables /** * The Class instance of this DispatchAction class. */ // ----------------------------------------------------- Instance Variables /** * The Class instance of this DispatchAction class. */ // ----------------------------------------------------- Instance Variables /** * The Class instance of this DispatchAction class. */ // ----------------------------------------------------- Instance Variables /** * The Class instance of this DispatchAction class. */ // ----------------------------------------------------- Instance Variables /** * The Class instance of this DispatchAction class. */ ptclazzq~=xsq~ uq~pppppq~$q~yq~$q~½pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt this.getClass()q~$q~$q~$xsq~(sq~ uq~ppppq~;[sq~ uq~ppppptë/** * Commons Logging instance. */ /** * Commons Logging instance. */ /** * Commons Logging instance. */ /** * Commons Logging instance. */ /** * Commons Logging instance. */ ptlogq~=xsq~ uq~pppppq~$q~yq~$q~9pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~;xpppt( LogFactory.getLog(DispatchAction.class)q~$q~$q~$xsq~(sq~ uq~ppppq~;[sq~ uq~pppppt1/** * The message resources for this package. */ /** * The message resources for this package. */ /** * The message resources for this package. */ /** * The message resources for this package. */ /** * The message resources for this package. */ ptmessagesq~=xsq~ uq~pppppq~$q~yq~$q~-pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~;xpppt_ MessageResources.getMessageResources ("org.apache.struts.actions.LocalStrings")q~$q~$q~$xsq~(sq~ uq~ppppq~;[sq~ uq~pppppt/** * The set of Method objects we have introspected for this class, * keyed by method name. This collection is populated as different * methods are called, so that introspection needs to occur only * once per method name. */ /** * The set of Method objects we have introspected for this class, * keyed by method name. This collection is populated as different * methods are called, so that introspection needs to occur only * once per method name. */ /** * The set of Method objects we have introspected for this class, * keyed by method name. This collection is populated as different * methods are called, so that introspection needs to occur only * once per method name. */ /** * The set of Method objects we have introspected for this class, * keyed by method name. This collection is populated as different * methods are called, so that introspection needs to occur only * once per method name. */ /** * The set of Method objects we have introspected for this class, * keyed by method name. This collection is populated as different * methods are called, so that introspection needs to occur only * once per method name. */ ptmethodsq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt new HashMap()q~$q~$q~$xsq~(sq~ uq~ppppq~;[sq~ uq~pppppt/** * The set of argument type classes for the reflected method call. These * are the same for all calls, so calculate them only once. */ /** * The set of argument type classes for the reflected method call. These * are the same for all calls, so calculate them only once. */ /** * The set of argument type classes for the reflected method call. These * are the same for all calls, so calculate them only once. */ /** * The set of argument type classes for the reflected method call. These * are the same for all calls, so calculate them only once. */ /** * The set of argument type classes for the reflected method call. These * are the same for all calls, so calculate them only once. */ pttypesq~=xsq~ uq~pppppq~$q~yq~$q~½t[]q~xsq~ uq~ppppsq~ uq~ppppq~$q~;xppptq { ActionMapping.class, ActionForm.class, HttpServletRequest.class, HttpServletResponse.class }q~$q~$q~$xsq~isq~ uq~ sq~bsq~ uq~ppppq~;§sq~ uq~ppppppptmappingq~=xsq~ uq~pppppq~$q~yq~$q~épq~$xsq~bsq~ uq~ppppq~;§sq~ uq~ppppppptformq~=xsq~ uq~pppppq~$q~yq~$q~wpq~$xsq~bsq~ uq~ppppq~;§sq~ uq~ppppppptrequestq~=xsq~ uq~pppppq~$q~yq~$q~Œpq~$xsq~bsq~ uq~ppppq~;§sq~ uq~ppppppptresponseq~=xsq~ uq~pppppq~$q~yq~$q~’pq~$xsq~bsq~ uq~ppppq~;§sq~ uq~ppppppptnameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xppppq~;[sq~ uq~ppppptq/** * Dispatch to the specified method. * Added to class at Revision 1.3 * @since 1.1 */ ptdispatchMethodq~=xsq~ uq~pppppq~$q~yq~$q~ýpq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$t§ // Identify the method object to be dispatched to Method method = null; try { method = getMethod(name); } catch (NoSuchMethodException e) { String message = messages.getMessage("dispatch.method", mapping.getPath(), name); log.error(message, e); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); return (null); } ActionForward forward = null; try { Object args[] = { mapping, form, request, response }; forward = (ActionForward) method.invoke(this, args); } catch (ClassCastException e) { String message = messages.getMessage("dispatch.return", mapping.getPath(), name); log.error(message, e); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); return (null); } catch (IllegalAccessException e) { String message = messages.getMessage("dispatch.error", mapping.getPath(), name); log.error(message, e); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); return (null); } catch (InvocationTargetException e) { String message = messages.getMessage("dispatch.error", mapping.getPath(), name); log.error(message, e); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); return (null); } // Return the returned ActionForward instance return (forward); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~;ßsq~ uq~ppppppptmappingq~=xsq~ uq~pppppq~$q~yq~$q~épq~$xsq~bsq~ uq~ppppq~;ßsq~ uq~ppppppptformq~=xsq~ uq~pppppq~$q~yq~$q~wpq~$xsq~bsq~ uq~ppppq~;ßsq~ uq~ppppppptrequestq~=xsq~ uq~pppppq~$q~yq~$q~Œpq~$xsq~bsq~ uq~ppppq~;ßsq~ uq~ppppppptresponseq~=xsq~ uq~pppppq~$q~yq~$q~’pq~$xq~;[sq~ uq~ppppptM// --------------------------------------------------------- Public Methods /** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it). * Return an ActionForward instance describing where and how * control should be forwarded, or null if the response has * already been completed. * * @param mapping The ActionMapping used to select this instance * @param actionForm The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs */ ptperformq~=xsq~ uq~pppppq~$q~yq~$q~ýpq~$xsq~ uq~sq~isq~ uq~sq~bsq~ uq~ppppq~< sq~ uq~ppppppptmappingq~=xsq~ uq~pppppq~$q~yq~$q~épq~$xsq~bsq~ uq~ppppq~< sq~ uq~ppppppptformq~=xsq~ uq~pppppq~$q~yq~$q~wpq~$xsq~bsq~ uq~ppppq~< sq~ uq~ppppppptrequestq~=xsq~ uq~pppppq~$q~yq~$q~Œpq~$xsq~bsq~ uq~ppppq~< sq~ uq~ppppppptresponseq~=xsq~ uq~pppppq~$q~yq~$q~’pq~$xq~Esq~ uq~ppppptJ/** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it). * Return an ActionForward instance describing where and how * control should be forwarded, or null if the response has * already been completed. * * @param mapping The ActionMapping used to select this instance * @param actionForm The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs * * @deprecated Use the execute() method instead */ ptperformq~=xsq~ uq~pppppq~$q~yq~$q~ýpq~$xsq~ uq~ppppsq~ uq~ sq~isq~ uq~sq~bsq~ uq~ppppq~<7sq~ uq~ppppppptmappingq~¢xsq~ uq~pppppq~¥q~¦q~¥q~épq~§xsq~bsq~ uq~ppppq~<7sq~ uq~ppppppptformq~¢xsq~ uq~pppppq~¥q~¦q~¥q~wpq~§xsq~bsq~ uq~ppppq~<7sq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Œpq~§xsq~bsq~ uq~ppppq~<7sq~ uq~ppppppptresponseq~¢xsq~ uq~pppppq~¥q~¦q~¥q~’pq~§xsq~zsq~ uq~ q~<7sq~isq~ uq~sq~bsq~ uq~ppppq~<]sq~ uq~ppppppptresponseq~¢xsq~ uq~pppppq~¥q~¦q~¥q~’pq~§xsq~bsq~ uq~ppppq~<]sq~ uq~ppppppptmsgq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xppq~sq~ uq~ppppppptmappingq~cxsq~ uq~pppppq~fq~gq~fq~épq~hxsq~bsq~ uq~ppppq~>sq~ uq~ppppppptformq~cxsq~ uq~pppppq~fq~gq~fq~wpq~hxsq~bsq~ uq~ppppq~>sq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppq~>sq~ uq~ppppppptresponseq~cxsq~ uq~pppppq~fq~gq~fq~’pq~hxq~={sq~ uq~pppppt/** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it), * with provision for handling exceptions thrown by the business logic. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception Exception if the application business logic throws * an exception * @since Struts 1.1 */ ptexecuteq~cxsq~ uq~pppppq~fq~gq~fq~ýpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftK // No op action. return (mapping.findForward("success")); sq~ uq~q~‚pppq~fq~fxq~=xsq~ uq~pppppppt NoOpActionq~¢xsq~ uq~ppppq~¥sq~ uq~sq~)sq~ uq~ppppsq~/sq~ uq~sq~)sq~ uq~ppppq~>Hsq~ uq~ppppq~¥sq~ uq~ppppsq~ uq~sq~$úsq~ uq~ppppq~>Hsq~ uq~ppppq~¢sq~ uq~ppppsq~ uq~ppppppxsq~)sq~ uq~ppppq~>Hsq~ uq~ppppq~¥sq~ uq~ q~>Tsq~$úsq~ uq~ppppq~>Hsq~ uq~ppppq~¢sq~ uq~ppppsq~ uq~ppppppxq~>]q~>Epsq~4Ôuq~4×!buq~4×q~¥xsq~$úsq~ uq~ppppq~>Hsq~ uq~ppppq~¢sq~ uq~ppppsq~ uq~ppppppxq~>]sq~)sq~ uq~ppppq~>Hsq~ uq~ppppq~¥sq~ uq~ppppsq~ uq~q~>ppppsq~Bdd0»pxsq~zsq~ uq~sq~isq~ uq~sq~bsq~ uq~ppppq~>†sq~ uq~ppppppptmappingq~¢xsq~ uq~pppppq~¥q~¦q~¥q~épq~§xsq~bsq~ uq~ppppq~>†sq~ uq~ppppppptformq~¢xsq~ uq~pppppq~¥q~¦q~¥q~wpq~§xsq~bsq~ uq~ppppq~>†sq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Œpq~§xsq~bsq~ uq~ppppq~>†sq~ uq~ppppppptresponseq~¢xsq~ uq~pppppq~¥q~¦q~¥q~’pq~§xq~>ƒsq~ uq~pppppt/** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it). * Return an ActionForward instance describing where and how * control should be forwarded, or null if the response has * already been completed. * * @param mapping The ActionMapping used to select this instance * @param actionForm The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs */ ptperformq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ýpq~§xsq~ uq~q~< pppsq~ uq~ppppq~¥q~»xq~¥t response.setContentType("text/plain"); PrintWriter writer = response.getWriter(); try { ServletContext context = getServlet().getServletContext(); ReloadableDefinitionsFactory factory = (ReloadableDefinitionsFactory)DefinitionsUtil.getDefinitionsFactory(context ); factory.reload(context); writer.println("OK"); } catch (ClassCastException e) { writer.println("FAIL - " + e.toString()); getServlet().log("ReloadAction", e); } catch (DefinitionsFactoryException e) { writer.println("FAIL - " + e.toString()); getServlet().log("ReloadAction", e); } writer.flush(); writer.close(); return (null); sq~ uq~q~¦pppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~>¶sq~ uq~ppppppptmappingq~rxsq~ uq~pppppq~–q~—q~–q~épq~˜xsq~bsq~ uq~ppppq~>¶sq~ uq~ppppppptformq~rxsq~ uq~pppppq~–q~—q~–q~wpq~˜xsq~bsq~ uq~ppppq~>¶sq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xsq~bsq~ uq~ppppq~>¶sq~ uq~ppppppptresponseq~rxsq~ uq~pppppq~–q~—q~–q~’pq~˜xq~>ƒsq~ uq~pppppt/** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it), * with provision for handling exceptions thrown by the business logic. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception Exception if the application business logic throws * an exception * @since Struts 1.1 */ ptexecuteq~rxsq~ uq~pppppq~–q~—q~–q~ýpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t response.setContentType("text/plain"); PrintWriter writer = response.getWriter(); try { ServletContext context = getServlet().getServletContext(); DefinitionsFactory factory = DefinitionsUtil.getDefinitionsFactory(context ); factory.setConfig(factory.getConfig(), context); writer.println("OK"); } catch (ClassCastException e) { writer.println("FAIL - " + e.toString()); getServlet().log("ReloadAction", e); } catch (DefinitionsFactoryException e) { writer.println("FAIL - " + e.toString()); getServlet().log("ReloadAction", e); } writer.flush(); writer.close(); return (null); sq~ uq~q~‚pppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~>æsq~ uq~ppppppptmappingq~{xsq~ uq~pppppq~~q~q~~q~épq~€xsq~bsq~ uq~ppppq~>æsq~ uq~ppppppptformq~{xsq~ uq~pppppq~~q~q~~q~wpq~€xsq~bsq~ uq~ppppq~>æsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xsq~bsq~ uq~ppppq~>æsq~ uq~ppppppptresponseq~{xsq~ uq~pppppq~~q~q~~q~’pq~€xq~>ƒsq~ uq~pppppt/** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it), * with provision for handling exceptions thrown by the business logic. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception Exception if the application business logic throws * an exception * @since Struts 1.1 */ ptexecuteq~{xsq~ uq~pppppq~~q~q~~q~ýpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t response.setContentType("text/plain"); PrintWriter writer = response.getWriter(); try { ServletContext context = getServlet().getServletContext(); DefinitionsFactory factory = DefinitionsUtil.getDefinitionsFactory(context ); factory.setConfig(factory.getConfig(), context); writer.println("OK"); } catch (ClassCastException e) { writer.println("FAIL - " + e.toString()); getServlet().log("ReloadAction", e); } catch (DefinitionsFactoryException e) { writer.println("FAIL - " + e.toString()); getServlet().log("ReloadAction", e); } writer.flush(); writer.close(); return (null); sq~ uq~q~‚pppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~?sq~ uq~ppppppptmappingq~cxsq~ uq~pppppq~fq~gq~fq~épq~hxsq~bsq~ uq~ppppq~?sq~ uq~ppppppptformq~cxsq~ uq~pppppq~fq~gq~fq~wpq~hxsq~bsq~ uq~ppppq~?sq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppq~?sq~ uq~ppppppptresponseq~cxsq~ uq~pppppq~fq~gq~fq~’pq~hxq~>ƒsq~ uq~pppppt/** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it), * with provision for handling exceptions thrown by the business logic. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception Exception if the application business logic throws * an exception * @since Struts 1.1 */ ptexecuteq~cxsq~ uq~pppppq~fq~gq~fq~ýpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft response.setContentType("text/plain"); PrintWriter writer = response.getWriter(); try { ServletContext context = getServlet().getServletContext(); DefinitionsFactory factory = DefinitionsUtil.getDefinitionsFactory(context ); factory.setConfig(factory.getConfig(), context); writer.println("OK"); } catch (ClassCastException e) { writer.println("FAIL - " + e.toString()); getServlet().log("ReloadAction", e); } catch (DefinitionsFactoryException e) { writer.println("FAIL - " + e.toString()); getServlet().log("ReloadAction", e); } writer.flush(); writer.close(); return (null); sq~ uq~q~‚pppq~fq~fxq~=xsq~ uq~ppppppptReloadDefinitionsActionq~¢xsq~ uq~ppppq~¥sq~ uq~q~>ypppsq~ uq~q~Epppq~¥q~¥sq~Qsq~ uq~sq~Csq~ uq~ppppq~?Osq~ uq~ppppsq~#q~&wxsq~Csq~ uq~ppppq~?Osq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq~?Osq~ uq~ppppsq~#q~9xsq~Csq~ uq~ppppq~?Osq~ uq~ppppsq~#q~&!xsq~Csq~ uq~ppppq~?Osq~ uq~ppppsq~#q~Öxsq~Csq~ uq~ppppq~?Osq~ uq~ppppsq~#q~Œxsq~Csq~ uq~ppppq~?Osq~ uq~ppppsq~#q~’xsq~Csq~ uq~ppppq~?Osq~ uq~ppppsq~#q~Exsq~Csq~ uq~ppppq~?Osq~ uq~ppppsq~#q~wxsq~Csq~ uq~ppppq~?Osq~ uq~ppppsq~#q~ýxsq~Csq~ uq~ppppq~?Osq~ uq~ppppsq~#q~éxpppq~=xsq~ uq~pppppt à/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/tiles/actions/ReloadDefinitionsAction.java,v 1.4 2003/02/04 02:23:08 dgraham Exp $ * $Revision: 1.4 $ * $Date: 2003/02/04 02:23:08 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** *

      A standard Action that calls the * reload() method of our controller servlet to * reload its configuration information from the configuration * files (which have presumably been updated) dynamically.

      * * @author Craig R. McClanahan * @author Cedric Dumoulin * @version $Revision: 1.4 $ $Date: 2003/02/04 02:23:08 $ */ ptReloadDefinitionsAction.javaq~fxsq~ uq~ppppsq~ uq~q~>ƒpppq~fxsq~ uq~pppppq~¥sq~ uq~ppppsq~ uq~ppppq~»xsq~#ppxpsq~4Ôuq~4×bbuq~4×íq~¥xsq~$úsq~ uq~ppppq~>Hsq~ uq~ppppq~¢sq~ uq~ppppsq~ uq~ppppppxq~>]sq~)sq~ uq~ppppq~>Hsq~ uq~ppppq~¥sq~ uq~ppppsq~ uq~q~?¦pppsq~BddqMpxsq~zsq~ uq~sq~isq~ uq~sq~bsq~ uq~ppppq~?¼sq~ uq~ppppppptmappingq~¢xsq~ uq~pppppq~¥q~¦q~¥q~épq~§xsq~bsq~ uq~ppppq~?¼sq~ uq~ppppppptformq~¢xsq~ uq~pppppq~¥q~¦q~¥q~wpq~§xsq~bsq~ uq~ppppq~?¼sq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Œpq~§xsq~bsq~ uq~ppppq~?¼sq~ uq~ppppppptresponseq~¢xsq~ uq~pppppq~¥q~¦q~¥q~’pq~§xq~?¹sq~ uq~pppppt/** * Original Struts Action's method. * Retrieve current Tile context, and call Tile's perform method. * * @param mapping The ActionMapping used to select this instance * @param actionForm The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs */ ptperformq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ýpq~§xsq~ uq~q~< pppsq~ uq~ppppq~¥q~»xq~¥t˜ // Try to retrieve tile context ComponentContext context = ComponentContext.getContext( request ); if( context == null ) { throw new ServletException( "Can't find Tile context for '" + this.getClass().getName() + "'. TilesAction subclasses must be called from a Tile" ); } return perform( context, mapping, form, request, response ); sq~ uq~q~¦pppq~¥q~¥xsq~isq~ uq~ sq~bsq~ uq~ppppq~?ìsq~ uq~ppppppptcontextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~„pq~§xsq~bsq~ uq~ppppq~?ìsq~ uq~ppppppptmappingq~¢xsq~ uq~pppppq~¥q~¦q~¥q~épq~§xsq~bsq~ uq~ppppq~?ìsq~ uq~ppppppptformq~¢xsq~ uq~pppppq~¥q~¦q~¥q~wpq~§xsq~bsq~ uq~ppppq~?ìsq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Œpq~§xsq~bsq~ uq~ppppq~?ìsq~ uq~ppppppptresponseq~¢xsq~ uq~pppppq~¥q~¦q~¥q~’pq~§xppppq~?¹sq~ uq~pppppt…/** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it). * Return an ActionForward instance describing where and how * control should be forwarded, or null if the response has * already been completed. * This method should be implemented by subclasses. * * @param context The current Tile context, containing Tile attributes * @param mapping The ActionMapping used to select this instance * @param actionForm The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs */ ptperformq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ýpq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xsq~#psq~ uq~q~¦pppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~@$sq~ uq~ppppppptmappingq~rxsq~ uq~pppppq~–q~—q~–q~épq~˜xsq~bsq~ uq~ppppq~@$sq~ uq~ppppppptformq~rxsq~ uq~pppppq~–q~—q~–q~wpq~˜xsq~bsq~ uq~ppppq~@$sq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xsq~bsq~ uq~ppppq~@$sq~ uq~ppppppptresponseq~rxsq~ uq~pppppq~–q~—q~–q~’pq~˜xq~?¹sq~ uq~pppppt/** * Original Struts Action's method. * Retrieve current Tile context, and call TilesAction execute method. * Do not overload this method ! * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception Exception if the application business logic throws * an exception * @since Struts 1.1 */ ptexecuteq~rxsq~ uq~pppppq~–q~—q~–q~ýpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t˜ // Try to retrieve tile context ComponentContext context = ComponentContext.getContext( request ); if( context == null ) { throw new ServletException( "Can't find Tile context for '" + this.getClass().getName() + "'. TilesAction subclasses must be called from a Tile" ); } return execute( context, mapping, form, request, response ); sq~ uq~q~‚pppq~–q~–xsq~isq~ uq~ sq~bsq~ uq~ppppq~@Tsq~ uq~ppppppptcontextq~rxsq~ uq~pppppq~–q~—q~–q~„pq~˜xsq~bsq~ uq~ppppq~@Tsq~ uq~ppppppptmappingq~rxsq~ uq~pppppq~–q~—q~–q~épq~˜xsq~bsq~ uq~ppppq~@Tsq~ uq~ppppppptformq~rxsq~ uq~pppppq~–q~—q~–q~wpq~˜xsq~bsq~ uq~ppppq~@Tsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xsq~bsq~ uq~ppppq~@Tsq~ uq~ppppppptresponseq~rxsq~ uq~pppppq~–q~—q~–q~’pq~˜xppppq~?¹sq~ uq~ppppptî/** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it), * with provision for handling exceptions thrown by the business logic. *
      * Override this method to provide functionality * * @param context The current Tile context, containing Tile attributes * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception Exception if the application business logic throws * an exception * @since Struts 1.1 */ ptexecuteq~rxsq~ uq~pppppq~–q~—q~–q~ýpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tx // Call old method for backward compatibility. return perform( context, mapping, form, request, response ); sq~ uq~q~‚pppq~–q~–xsq~isq~ uq~ sq~bsq~ uq~ppppq~@Œsq~ uq~ppppppptcontextq~rxsq~ uq~pppppq~–q~—q~–q~„pq~˜xsq~bsq~ uq~ppppq~@Œsq~ uq~ppppppptmappingq~rxsq~ uq~pppppq~–q~—q~–q~épq~˜xsq~bsq~ uq~ppppq~@Œsq~ uq~ppppppptformq~rxsq~ uq~pppppq~–q~—q~–q~wpq~˜xsq~bsq~ uq~ppppq~@Œsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xsq~bsq~ uq~ppppq~@Œsq~ uq~ppppppptresponseq~rxsq~ uq~pppppq~–q~—q~–q~’pq~˜xppppq~?¹sq~ uq~ppppptŽ/** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it). * Return an ActionForward instance describing where and how * control should be forwarded, or null if the response has * already been completed. * * @param context The current Tile context, containing Tile attributes * @param mapping The ActionMapping used to select this instance * @param actionForm The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs * @deprecated Use the execute() method instead */ ptperformq~rxsq~ uq~pppppq~–q~—q~–q~ýpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return null; sq~ uq~q~kq~¦ppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~@Äsq~ uq~ppppppptmappingq~{xsq~ uq~pppppq~~q~q~~q~épq~€xsq~bsq~ uq~ppppq~@Äsq~ uq~ppppppptformq~{xsq~ uq~pppppq~~q~q~~q~wpq~€xsq~bsq~ uq~ppppq~@Äsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xsq~bsq~ uq~ppppq~@Äsq~ uq~ppppppptresponseq~{xsq~ uq~pppppq~~q~q~~q~’pq~€xq~?¹sq~ uq~pppppt/** * Original Struts Action's method. * Retrieve current Tile context and call TilesAction execute method. * Do not overload this method ! * * @param mapping The ActionMapping used to select this instance. * @param form The optional ActionForm bean for this request (if any). * @param request The HTTP request we are processing. * @param response The HTTP response we are creating. * * @exception Exception if the application business logic throws * an exception * @since Struts 1.1 */ ptexecuteq~{xsq~ uq~pppppq~~q~q~~q~ýpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t˜ // Try to retrieve tile context ComponentContext context = ComponentContext.getContext( request ); if( context == null ) { throw new ServletException( "Can't find Tile context for '" + this.getClass().getName() + "'. TilesAction subclasses must be called from a Tile" ); } return execute( context, mapping, form, request, response ); sq~ uq~q~‚pppq~~q~~xsq~isq~ uq~ sq~bsq~ uq~ppppq~@ôsq~ uq~ppppppptcontextq~{xsq~ uq~pppppq~~q~q~~q~„pq~€xsq~bsq~ uq~ppppq~@ôsq~ uq~ppppppptmappingq~{xsq~ uq~pppppq~~q~q~~q~épq~€xsq~bsq~ uq~ppppq~@ôsq~ uq~ppppppptformq~{xsq~ uq~pppppq~~q~q~~q~wpq~€xsq~bsq~ uq~ppppq~@ôsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xsq~bsq~ uq~ppppq~@ôsq~ uq~ppppppptresponseq~{xsq~ uq~pppppq~~q~q~~q~’pq~€xppppq~?¹sq~ uq~ppppptó/** * Process the specified HTTP request and create the corresponding HTTP * response (or forward to another web component that will create it), * with provision for handling exceptions thrown by the business logic. *
      * Override this method to provide functionality. * * @param context The current Tile context, containing Tile attributes. * @param mapping The ActionMapping used to select this instance. * @param form The optional ActionForm bean for this request (if any). * @param request The HTTP request we are processing. * @param response The HTTP response we are creating. * * @exception Exception if the application business logic throws * an exception * @since Struts 1.1 */ ptexecuteq~{xsq~ uq~pppppq~~q~q~~q~ýpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tx // Call old method for backward compatibility. return perform( context, mapping, form, request, response ); sq~ uq~q~‚pppq~~q~~xsq~isq~ uq~ sq~bsq~ uq~ppppq~A,sq~ uq~ppppppptcontextq~{xsq~ uq~pppppq~~q~q~~q~„pq~€xsq~bsq~ uq~ppppq~A,sq~ uq~ppppppptmappingq~{xsq~ uq~pppppq~~q~q~~q~épq~€xsq~bsq~ uq~ppppq~A,sq~ uq~ppppppptformq~{xsq~ uq~pppppq~~q~q~~q~wpq~€xsq~bsq~ uq~ppppq~A,sq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xsq~bsq~ uq~ppppq~A,sq~ uq~ppppppptresponseq~{xsq~ uq~pppppq~~q~q~~q~’pq~€xppppq~?¹sq~ uq~ppppptŒ/** * Process the specified HTTP request and create the corresponding HTTP * response (or forward to another web component that will create it). * Return an ActionForward instance describing where and how * control should be forwarded, or null if the response has * already been completed. * * @param context The current Tile context, containing Tile attributes. * @param mapping The ActionMapping used to select this instance. * @param form The optional ActionForm bean for this request (if any). * @param request The HTTP request we are processing. * @param response The HTTP response we are creating. * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs * @deprecated Use the execute() method instead */ ptperformq~{xsq~ uq~pppppq~~q~q~~q~ýpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t return null; sq~ uq~q~kq~¦ppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~Adsq~ uq~ppppppptmappingq~cxsq~ uq~pppppq~fq~gq~fq~épq~hxsq~bsq~ uq~ppppq~Adsq~ uq~ppppppptformq~cxsq~ uq~pppppq~fq~gq~fq~wpq~hxsq~bsq~ uq~ppppq~Adsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppq~Adsq~ uq~ppppppptresponseq~cxsq~ uq~pppppq~fq~gq~fq~’pq~hxq~?¹sq~ uq~pppppt/** * Original Struts Action's method. * Retrieve current Tile context and call TilesAction execute method. * Do not overload this method ! * * @param mapping The ActionMapping used to select this instance. * @param form The optional ActionForm bean for this request (if any). * @param request The HTTP request we are processing. * @param response The HTTP response we are creating. * * @exception Exception if the application business logic throws * an exception * @since Struts 1.1 */ ptexecuteq~cxsq~ uq~pppppq~fq~gq~fq~ýpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft˜ // Try to retrieve tile context ComponentContext context = ComponentContext.getContext( request ); if( context == null ) { throw new ServletException( "Can't find Tile context for '" + this.getClass().getName() + "'. TilesAction subclasses must be called from a Tile" ); } return execute( context, mapping, form, request, response ); sq~ uq~q~‚pppq~fq~fxsq~isq~ uq~ sq~bsq~ uq~ppppq~A”sq~ uq~ppppppptcontextq~cxsq~ uq~pppppq~fq~gq~fq~„pq~hxsq~bsq~ uq~ppppq~A”sq~ uq~ppppppptmappingq~cxsq~ uq~pppppq~fq~gq~fq~épq~hxsq~bsq~ uq~ppppq~A”sq~ uq~ppppppptformq~cxsq~ uq~pppppq~fq~gq~fq~wpq~hxsq~bsq~ uq~ppppq~A”sq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppq~A”sq~ uq~ppppppptresponseq~cxsq~ uq~pppppq~fq~gq~fq~’pq~hxppppq~?¹sq~ uq~ppppptó/** * Process the specified HTTP request and create the corresponding HTTP * response (or forward to another web component that will create it), * with provision for handling exceptions thrown by the business logic. *
      * Override this method to provide functionality. * * @param context The current Tile context, containing Tile attributes. * @param mapping The ActionMapping used to select this instance. * @param form The optional ActionForm bean for this request (if any). * @param request The HTTP request we are processing. * @param response The HTTP response we are creating. * * @exception Exception if the application business logic throws * an exception * @since Struts 1.1 */ ptexecuteq~cxsq~ uq~pppppq~fq~gq~fq~ýpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftx // Call old method for backward compatibility. return perform( context, mapping, form, request, response ); sq~ uq~q~‚pppq~fq~fxsq~isq~ uq~ sq~bsq~ uq~ppppq~AÌsq~ uq~ppppppptcontextq~cxsq~ uq~pppppq~fq~gq~fq~„pq~hxsq~bsq~ uq~ppppq~AÌsq~ uq~ppppppptmappingq~cxsq~ uq~pppppq~fq~gq~fq~épq~hxsq~bsq~ uq~ppppq~AÌsq~ uq~ppppppptformq~cxsq~ uq~pppppq~fq~gq~fq~wpq~hxsq~bsq~ uq~ppppq~AÌsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppq~AÌsq~ uq~ppppppptresponseq~cxsq~ uq~pppppq~fq~gq~fq~’pq~hxppppq~?¹sq~ uq~ppppptŒ/** * Process the specified HTTP request and create the corresponding HTTP * response (or forward to another web component that will create it). * Return an ActionForward instance describing where and how * control should be forwarded, or null if the response has * already been completed. * * @param context The current Tile context, containing Tile attributes. * @param mapping The ActionMapping used to select this instance. * @param form The optional ActionForm bean for this request (if any). * @param request The HTTP request we are processing. * @param response The HTTP response we are creating. * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs * @deprecated Use the execute() method instead */ ptperformq~cxsq~ uq~pppppq~fq~gq~fq~ýpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft return null; sq~ uq~q~kq~¦ppq~fq~fxpppq~=xsq~ uq~pppppppt TilesActionq~¢xsq~ uq~ppppsq~#sq~ uq~q~?¯pppsq~ uq~q~Epppq~¥q~¥sq~Qsq~ uq~ sq~Csq~ uq~ppppq~Bsq~ uq~ppppsq~#q~„xsq~Csq~ uq~ppppq~Bsq~ uq~ppppsq~#q~kxsq~Csq~ uq~ppppq~Bsq~ uq~ppppsq~#q~¦xsq~Csq~ uq~ppppq~Bsq~ uq~ppppsq~#q~Œxsq~Csq~ uq~ppppq~Bsq~ uq~ppppsq~#q~’xsq~Csq~ uq~ppppq~Bsq~ uq~ppppsq~#q~Exsq~Csq~ uq~ppppq~Bsq~ uq~ppppsq~#q~wxsq~Csq~ uq~ppppq~Bsq~ uq~ppppsq~#q~ýxsq~Csq~ uq~ppppq~Bsq~ uq~ppppsq~#q~éxq~=xsq~ uq~pppppt /* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/tiles/actions/TilesAction.java,v 1.5 2003/02/27 19:20:36 cedric Exp $ * $Revision: 1.5 $ * $Date: 2003/02/27 19:20:36 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Base class for Tiles Actions. * This class has the same role as Struts Action. It provides a method execute(...) * called when action is invoked. The difference is, that the execute() method takes * an additional parameter : tile context. * This class extends Struts Action. Subclasses should override * execute(ComponentContext ...) method instead of Struts * execute(ActionMapping ...) method. * Backward compatibility is ensured with the perform(ComponentContext ...) method. * @version $Revision: 1.5 $ $Date: 2003/02/27 19:20:36 $ */ ptTilesAction.javaq~fxsq~ uq~ppppsq~ uq~q~?¹pppq~fxsq~ uq~pppppq~¥sq~ uq~ppppsq~ uq~ppppq~»xq~¥ppxpsq~4Ôuq~4×£buq~4×q~¥xsq~$úsq~ uq~ppppq~>Hsq~ uq~ppppq~¢sq~ uq~ppppsq~ uq~ppppppxq~>]sq~)sq~ uq~ppppq~>Hsq~ uq~ppppq~¥sq~ uq~ppppsq~ uq~q~BXpppsq~Bddqqpxsq~zsq~ uq~sq~isq~ uq~sq~bsq~ uq~ppppq~Bnsq~ uq~ppppppptmappingq~¢xsq~ uq~pppppq~¥q~¦q~¥q~épq~§xsq~bsq~ uq~ppppq~Bnsq~ uq~ppppppptformq~¢xsq~ uq~pppppq~¥q~¦q~¥q~wpq~§xsq~bsq~ uq~ppppq~Bnsq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Œpq~§xsq~bsq~ uq~ppppq~Bnsq~ uq~ppppppptresponseq~¢xsq~ uq~pppppq~¥q~¦q~¥q~’pq~§xq~Bksq~ uq~pppppt/** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it). * Return an ActionForward instance describing where and how * control should be forwarded, or null if the response has * already been completed. * * @param mapping The ActionMapping used to select this instance * @param actionForm The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs */ ptperformq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ýpq~§xsq~ uq~q~< pppsq~ uq~ppppq~¥q~»xq~¥t2 response.setContentType("text/plain"); PrintWriter writer = response.getWriter(); try { ServletContext context = getServlet().getServletContext(); ComponentDefinitionsFactory factory = DefinitionsUtil.getDefinitionsFactory(context ); writer.println( factory ); } catch (Exception e) { writer.println("FAIL - " + e.toString()); getServlet().log("ReloadAction", e); } writer.flush(); writer.close(); return (null); sq~ uq~q~¦pppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~Bžsq~ uq~ppppppptmappingq~rxsq~ uq~pppppq~–q~—q~–q~épq~˜xsq~bsq~ uq~ppppq~Bžsq~ uq~ppppppptformq~rxsq~ uq~pppppq~–q~—q~–q~wpq~˜xsq~bsq~ uq~ppppq~Bžsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xsq~bsq~ uq~ppppq~Bžsq~ uq~ppppppptresponseq~rxsq~ uq~pppppq~–q~—q~–q~’pq~˜xq~Bksq~ uq~pppppt/** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it), * with provision for handling exceptions thrown by the business logic. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception Exception if the application business logic throws * an exception * @since Struts 1.1 */ ptexecuteq~rxsq~ uq~pppppq~–q~—q~–q~ýpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t4 response.setContentType("text/plain"); PrintWriter writer = response.getWriter(); try { ServletContext context = getServlet().getServletContext(); DefinitionsFactory factory = DefinitionsUtil.getDefinitionsFactory(context ); writer.println( factory.toString() ); } catch (Exception e) { writer.println("FAIL - " + e.toString()); getServlet().log("ReloadAction", e); } writer.flush(); writer.close(); return (null); sq~ uq~q~‚pppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~BÎsq~ uq~ppppppptmappingq~{xsq~ uq~pppppq~~q~q~~q~épq~€xsq~bsq~ uq~ppppq~BÎsq~ uq~ppppppptformq~{xsq~ uq~pppppq~~q~q~~q~wpq~€xsq~bsq~ uq~ppppq~BÎsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xsq~bsq~ uq~ppppq~BÎsq~ uq~ppppppptresponseq~{xsq~ uq~pppppq~~q~q~~q~’pq~€xq~Bksq~ uq~pppppt/** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it), * with provision for handling exceptions thrown by the business logic. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception Exception if the application business logic throws * an exception * @since Struts 1.1 */ ptexecuteq~{xsq~ uq~pppppq~~q~q~~q~ýpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t7 response.setContentType("text/plain"); PrintWriter writer = response.getWriter(); try { ServletContext context = getServlet().getServletContext(); DefinitionsFactory factory = TilesUtil.getDefinitionsFactory(request, context ); writer.println( factory.toString() ); } catch (Exception e) { writer.println("FAIL - " + e.toString()); getServlet().log("ReloadAction", e); } writer.flush(); writer.close(); return (null); sq~ uq~q~‚pppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~Bþsq~ uq~ppppppptmappingq~cxsq~ uq~pppppq~fq~gq~fq~épq~hxsq~bsq~ uq~ppppq~Bþsq~ uq~ppppppptformq~cxsq~ uq~pppppq~fq~gq~fq~wpq~hxsq~bsq~ uq~ppppq~Bþsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppq~Bþsq~ uq~ppppppptresponseq~cxsq~ uq~pppppq~fq~gq~fq~’pq~hxq~Bksq~ uq~pppppt/** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it), * with provision for handling exceptions thrown by the business logic. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception Exception if the application business logic throws * an exception * @since Struts 1.1 */ ptexecuteq~cxsq~ uq~pppppq~fq~gq~fq~ýpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft7 response.setContentType("text/plain"); PrintWriter writer = response.getWriter(); try { ServletContext context = getServlet().getServletContext(); DefinitionsFactory factory = TilesUtil.getDefinitionsFactory(request, context ); writer.println( factory.toString() ); } catch (Exception e) { writer.println("FAIL - " + e.toString()); getServlet().log("ReloadAction", e); } writer.flush(); writer.close(); return (null); sq~ uq~q~‚pppq~fq~fxq~=xsq~ uq~ppppppptViewDefinitionsActionq~¢xsq~ uq~ppppq~¥sq~ uq~q~Bapppsq~ uq~q~Epppq~¥q~¥sq~Qsq~ uq~sq~Csq~ uq~ppppq~C7sq~ uq~ppppsq~#q~8Bxsq~Csq~ uq~ppppq~C7sq~ uq~ppppsq~#q~9xsq~Csq~ uq~ppppq~C7sq~ uq~ppppsq~#q~&!xsq~Csq~ uq~ppppq~C7sq~ uq~ppppsq~#q~Öxsq~Csq~ uq~ppppq~C7sq~ uq~ppppsq~#q~Œxsq~Csq~ uq~ppppq~C7sq~ uq~ppppsq~#q~’xsq~Csq~ uq~ppppq~C7sq~ uq~ppppsq~#q~Exsq~Csq~ uq~ppppq~C7sq~ uq~ppppsq~#q~wxsq~Csq~ uq~ppppq~C7sq~ uq~ppppsq~#q~ýxsq~Csq~ uq~ppppq~C7sq~ uq~ppppsq~#q~éxppppq~=xsq~ uq~pppppt $/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/tiles/actions/ViewDefinitionsAction.java,v 1.6 2003/05/16 10:06:45 cedric Exp $ * $Revision: 1.6 $ * $Date: 2003/05/16 10:06:45 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** *

      An Action that writes the * definitions of the Tiles factory. * Useful to check what is effectivly loaded in a * Tiles factory * @author Cedric Dumoulin */ ptViewDefinitionsAction.javaq~fxsq~ uq~ppppsq~ uq~q~Bkpppq~fxsq~ uq~pppppq~¥sq~ uq~ppppsq~ uq~ppppq~»xsq~#ppxpsq~4Ôuq~4×£buq~4×£q~¥xppppsq~ uq~ppppsq~Bdd0ßpxq~Eq~>Kpsq~4Ôuq~4×!buq~4×£q~¥xpppsq~Bddïqpxq~Eq~>yq~?¯q~Baq~>]q~>Tq~>dq~>pq~?¦q~BXpppq~ sq~ uq~ppppdpppsq~BddïMpxq~={pppsq~ uq~q~Epppq~¥q~¥sq~Qsq~ uq~ sq~Csq~ uq~ppppq~Csq~ uq~ppppsq~#q~Œxsq~Csq~ uq~ppppq~Csq~ uq~ppppsq~#q~’xsq~Csq~ uq~ppppq~Csq~ uq~ppppsq~#q~Exsq~Csq~ uq~ppppq~Csq~ uq~ppppsq~#q~wxsq~Csq~ uq~ppppq~Csq~ uq~ppppsq~#q~ýxsq~Csq~ uq~ppppq~Csq~ uq~ppppsq~#q~éxpppq~=xsq~ uq~pppppt /* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/tiles/actions/NoOpAction.java,v 1.7 2003/01/05 01:24:48 martinc Exp $ * $Revision: 1.7 $ * $Date: 2003/01/05 01:24:48 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Implementation of Action that does nothing but forward to * "success". * * @author Cedric Dumoulin * @version $Revision: 1.7 $ $Date: 2003/01/05 01:24:48 $ * @deprecated Use o.a.s.a.ForwardAction instead with the parameter attribute: * * <action path="aPath" * type="org.apache.struts.actions.ForwardAction" * parameter="tiles.def.name" /> * */ ptNoOpAction.javaq~fxsq~ uq~ppppsq~ uq~q~={pppq~fxsq~ uq~pppppq~¥sq~ uq~ppppsq~ uq~ppppq~»xsq~#ppxq~>ƒq~?¹q~Bkq~Cq~&,q~?Oq~Bq~C7pppppq~sq~ uq~ppppppptactionsq~¢xsq~ uq~ppppq~>Hsq~ uq~sq~1sq~ uq~ppppsq~/sq~ >uq~Jsq~)sq~ uq~ppppq~CÝsq~ uq~ppppq~%sq~ uq~ppppsq~ uq~ppppsq~B‚Thpxq~„sq~)sq~ uq~ppppq~CÝsq~ uq~ppppq~%sq~ uq~ppppsq~ uq~ppppsq~B‘T1pxq~¾sq~)sq~ uq~ppppq~CÝsq~ uq~ppppq~%sq~ uq~sq~$úsq~ uq~ppppq~CÝsq~ uq~ppppq~¢sq~ uq~ppppsq~ uq~ppppppxq~Côsq~)sq~ uq~ppppq~CÝsq~ uq~ppppq~%sq~ uq~ppppsq~ uq~q~Cûpppsq~BƒÒpxsq~zsq~ uq~sq~esq~ uq~sq~bsq~ uq~ppppq~Dsq~ uq~ppppppptvalueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~Dsq~ uq~ppppppptDefinitionAttributeq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t super( value); sq~ uq~ppppq~¥q~¥xsq~esq~ uq~sq~bsq~ uq~ppppq~D(sq~ uq~ppppppptvalueq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~Dsq~ uq~pppppppq~Dq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t super( value); sq~ uq~ppppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppq~D>sq~ uq~ppppppptvalueq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~Dsq~ uq~pppppppq~Dq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t super( value); sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq~DTsq~ uq~ppppppptvalueq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~Dsq~ uq~pppppppq~Dq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft super( value); sq~ uq~ppppq~fq~fxq~sq~ uq~pppppppq~Dq~¢xsq~ uq~ppppq~¥sq~ uq~q~Dpppsq~ uq~sq~zsq~ uq~"sq~(sq~ uq~ppppq~Drsq~ uq~ppppptÞ/** * Role associated to this attribute */ /** * Role associated to this attribute */ /** * Role associated to this attribute. */ /** * Role associated to this attribute. */ ptroleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xppppq~¥q~¥q~¥xsq~(sq~ uq~ppppq~Drsq~ uq~ppppppptvalueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xppppq~¥q~¥q~¥xsq~esq~ uq~sq~bsq~ uq~ppppq~DŽsq~ uq~ppppppptvalueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xpppq~Drsq~ uq~pppppt"/** * Constructor. */ ptUntyppedAttributeq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t this.value = value; sq~ uq~ppppq~¥q~¥xsq~esq~ uq~sq~bsq~ uq~ppppq~D¦sq~ uq~ppppppptvalueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~bsq~ uq~ppppq~D¦sq~ uq~ppppppptroleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xppq~Drsq~ uq~pppppt"/** * Constructor. */ pq~Dœq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t6 this.value = value; this.role = role; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~Drsq~ uq~pppppt/** * Get role. */ ptgetRoleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t return role; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~DÕsq~ uq~ppppppptroleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~Drsq~ uq~pppppt/** * Set role. */ ptsetRoleq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~sq~isq~ uq~sq~bsq~ uq~ppppq~Dèsq~ uq~ppppppptroleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppsq~•sq~ uq~ sq~isq~ uq~ppppq~Dósq~ uq~pppppt@/** * Return value hold by this typed attribute. */ ptgetValueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~ uq~ppppsq~ uq~sq~isq~ uq~ppppq~Drsq~ uq~pppppt/** * Get value. */ ptgetValueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~ uq~q~Döpppsq~ uq~ppppq~¥q~»xq~¥t return value; sq~ uq~ppppq~¥q~¥xpppq~¥q~»xq~¥psq~ uq~ppppq~¥q~¥xq~Dèsq~isq~ uq~ppppq~Dósq~ uq~pppppt@/** * Return value hold by this typed attribute. */ ptgetValueq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–psq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~E$sq~ uq~ppppppptroleq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~Dósq~ uq~pppppt)/** * Set role attribute. */ ptsetRoleq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–psq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~Dósq~ uq~pppppt@/** * Return value hold by this typed attribute. */ ptgetValueq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~EJsq~ uq~ppppppptroleq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~Dósq~ uq~pppppt)/** * Set role attribute. */ ptsetRoleq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~Dósq~ uq~pppppt@/** * Return value hold by this typed attribute. */ ptgetValueq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fpsq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq~Epsq~ uq~ppppppptroleq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~Dósq~ uq~pppppt)/** * Set role attribute. */ ptsetRoleq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fpsq~ uq~ppppq~fq~fxpq~sq~ uq~ppppppptAttributeDefinitionq~¢xsq~ uq~ sq~Csq~ uq~ppppsq~Qsq~ uq~ sq~Csq~ uq~ppppq~Esq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq~Esq~ uq~ppppsq~#sq~zsq~ uq~ppppq~8sq~ uq~pppppq~‡ptListq~=xsq~ uq~ sq~Csq~ uq~ppppq~sq~ uq~ppppsq~#q~Ežxsq~Csq~ uq~ppppq~Ísq~ uq~ppppsq~#q~Ežxsq~Csq~ uq~ppppsq~Qsq~ uq~sq~Csq~ uq~ppppq~Eµsq~ uq~ppppsq~#q~kxsq~Csq~ uq~ppppq~Eµsq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq~Eµsq~ uq~ppppsq~#sq~zsq~ uq~ppppq~8sq~ uq~pppppq~‡pt Collectionsq~=xsq~ uq~ sq~Csq~ uq~ppppq~sq~ uq~ppppsq~#q~EÊxq~EÄsq~Csq~ uq~ppppsq~Qsq~ uq~sq~Csq~ uq~ppppq~EÛsq~ uq~ppppsq~#q~¼xsq~Csq~ uq~ppppq~EÛsq~ uq~ppppsq~#q~5xsq~Csq~ uq~ppppq~EÛsq~ uq~ppppsq~#sq~zsq~ uq~ppppq~8sq~ uq~pppppq~‡ptVectorq~=xsq~ uq~ q~Eêsq~Csq~ uq~ppppsq~Qsq~ uq~q~Eøpppq~,sq~ uq~pppppt%/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/util/ErrorMessages.java,v 1.5 2002/06/25 01:30:41 craigmcc Exp $ * $Revision: 1.5 $ * $Date: 2002/06/25 01:30:41 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Utility class that is useful for accumulating error message keys in * action classes or validation methods. Use this class as follows: *

        *
      • At the beginning of your action class or validation method, * instantiate an instance of this class in a local variable.
      • *
      • Whenever you wish to add a new error message key, call the * addError() method to add it.
      • *
      • To return the String array of error message keys required by * other Struts components, call getErrors(). *
      * * @deprecated Use org.apache.struts.action.ActionErrors instead * * @author David Geary * @version $Revision: 1.5 $ $Date: 2002/06/25 01:30:41 $ */ ptErrorMessages.javaq~fxsq~ uq~ppppsq~ uq~sq~zsq~ uq~sq~(sq~ uq~ppppq~Fsq~ uq~ppppptÁ// ----------------------------------------------------- Instance Variables /** * The accumulated set of error message keys. */ // ----------------------------------------------------- Instance Variables /** * The accumulated set of error message keys. */ // ----------------------------------------------------- Instance Variables /** * The accumulated set of error message keys. */ // ----------------------------------------------------- Instance Variables /** * The accumulated set of error message keys. */ // ----------------------------------------------------- Instance Variables /** * The accumulated set of error message keys. */ pterrorsq~=xsq~ uq~pppppq~$q~yq~$q~Eðpq~$xsq~ uq~ppppsq~ uq~ppppq~$q~%Zxpppt new Vector()q~$q~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~Fsq~ uq~ppppppptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~Fsq~ uq~ppppptÚ// --------------------------------------------------------- Public Methods /** * Add an error message key to the accumulated set of errors. * * @param key The error message key to be added */ ptaddErrorq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t$ errors.addElement(key); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~F/sq~ uq~ppppppptindexq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xpppq~Fsq~ uq~pppppt¬/** * Return the error message key at the specified zero-relative index. * * @param index Zero-relative index of the error message key to return */ ptgetErrorq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t7 return ((String) errors.elementAt(index)); sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~Fsq~ uq~ppppptO/** * Return the set of error message keys we have accumulated. */ pt getErrorsq~=xsq~ uq~pppppq~$q~yq~$q~{t[]q~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t  if (errors.size() > 0) { String array[] = new String[errors.size()]; errors.copyInto(array); return (array); } return (null); sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~Fsq~ uq~ppppptY/** * Return the number of error message keys we have accumulated so far. */ ptgetSizeq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t$ return (errors.size()); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~Fhsq~ uq~ppppppptkeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~Fsq~ uq~ppppptÚ// --------------------------------------------------------- Public Methods /** * Add an error message key to the accumulated set of errors. * * @param key The error message key to be added */ ptaddErrorq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t$ errors.addElement(key); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~F€sq~ uq~ppppppptindexq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xpppq~Fsq~ uq~pppppt¬/** * Return the error message key at the specified zero-relative index. * * @param index Zero-relative index of the error message key to return */ ptgetErrorq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t7 return ((String) errors.elementAt(index)); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~Fsq~ uq~ppppptO/** * Return the set of error message keys we have accumulated. */ pt getErrorsq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{t[]q~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t  if (errors.size() > 0) { String array[] = new String[errors.size()]; errors.copyInto(array); return (array); } return (null); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~Fsq~ uq~ppppptY/** * Return the number of error message keys we have accumulated so far. */ ptgetSizeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t$ return (errors.size()); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~F¹sq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~Fsq~ uq~ppppptÚ// --------------------------------------------------------- Public Methods /** * Add an error message key to the accumulated set of errors. * * @param key The error message key to be added */ ptaddErrorq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t$ errors.addElement(key); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~FÑsq~ uq~ppppppptindexq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xpppq~Fsq~ uq~pppppt¬/** * Return the error message key at the specified zero-relative index. * * @param index Zero-relative index of the error message key to return */ ptgetErrorq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t7 return ((String) errors.elementAt(index)); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~Fsq~ uq~ppppptO/** * Return the set of error message keys we have accumulated. */ pt getErrorsq~rxsq~ uq~pppppq~–q~—q~–q~{t[]q~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t  if (errors.size() > 0) { String array[] = new String[errors.size()]; errors.copyInto(array); return (array); } return (null); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~Fsq~ uq~ppppptY/** * Return the number of error message keys we have accumulated so far. */ ptgetSizeq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t$ return (errors.size()); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~G sq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~Fsq~ uq~ppppptÚ// --------------------------------------------------------- Public Methods /** * Add an error message key to the accumulated set of errors. * * @param key The error message key to be added */ ptaddErrorq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t$ errors.addElement(key); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~G"sq~ uq~ppppppptindexq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xpppq~Fsq~ uq~pppppt¬/** * Return the error message key at the specified zero-relative index. * * @param index Zero-relative index of the error message key to return */ ptgetErrorq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t7 return ((String) errors.elementAt(index)); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~Fsq~ uq~ppppptO/** * Return the set of error message keys we have accumulated. */ pt getErrorsq~{xsq~ uq~pppppq~~q~q~~q~{t[]q~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t  if (errors.size() > 0) { String array[] = new String[errors.size()]; errors.copyInto(array); return (array); } return (null); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~Fsq~ uq~ppppptY/** * Return the number of error message keys we have accumulated so far. */ ptgetSizeq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t$ return (errors.size()); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~G[sq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~Fsq~ uq~ppppptÚ// --------------------------------------------------------- Public Methods /** * Add an error message key to the accumulated set of errors. * * @param key The error message key to be added */ ptaddErrorq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft$ errors.addElement(key); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq~Gssq~ uq~ppppppptindexq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxpppq~Fsq~ uq~pppppt¬/** * Return the error message key at the specified zero-relative index. * * @param index Zero-relative index of the error message key to return */ ptgetErrorq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft7 return ((String) errors.elementAt(index)); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~Fsq~ uq~ppppptO/** * Return the set of error message keys we have accumulated. */ pt getErrorsq~cxsq~ uq~pppppq~fq~gq~fq~{t[]q~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft  if (errors.size() > 0) { String array[] = new String[errors.size()]; errors.copyInto(array); return (array); } return (null); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~Fsq~ uq~ppppptY/** * Return the number of error message keys we have accumulated so far. */ ptgetSizeq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft$ return (errors.size()); sq~ uq~ppppq~fq~fxpppq~,sq~ uq~pppppppt ErrorMessagesq~=xsq~ uq~ppppq~$sq~ uq~sq~)sq~ uq~ppppsq~/sq~ uq~#sq~)sq~ uq~ppppq~G¶sq~ uq~ppppq~$sq~ uq~sq~$úsq~ uq~ppppq~G¶sq~ uq~ppppq~=sq~ uq~ppppsq~ uq~ppppppxq~G¹sq~)sq~ uq~ppppq~G¶sq~ uq~ppppq~rsq~ uq~ppppsq~ uq~q~GÀpppsq~B³ø pxsq~zsq~ uq~sq~esq~ uq~sq~bsq~ uq~ppppq~GÖsq~ uq~ppppppptfactoryq~=xsq~ uq~pppppq~$q~yq~$sq~zsq~ "uq~"sq~(sq~ uq~ppppq~Gásq~ uq~pppppt÷// ---------------------------------------------------- Instance Properties /** * The "return null" property value to which newly created * MessageResourcess should be initialized. */ // ---------------------------------------------------- Instance Properties /** * The "return null" property value to which newly created * MessageResourcess should be initialized. */ // ---------------------------------------------------- Instance Properties /** * The "return null" property value to which newly created * MessageResourcess should be initialized. */ // ---------------------------------------------------- Instance Properties /** * The "return null" property value to which newly created * MessageResourcess should be initialized. */ // ---------------------------------------------------- Instance Properties /** * The "return null" property value to which newly created * MessageResourcess should be initialized. */ pt returnNullq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt trueq~$q~$q~$xsq~isq~ uq~ppppq~Gásq~ uq~pppppppt getReturnNullq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t) return (this.returnNull); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~Hsq~ uq~pppppppt returnNullq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xpppq~Gásq~ uq~pppppppt setReturnNullq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t- this.returnNull = returnNull; sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~Hsq~ uq~ppppppptconfigq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~Gásq~ uq~pppppt:// --------------------------------------------------------- Public Methods /** * Create and return a newly instansiated MessageResources. * This method must be implemented by concrete subclasses. * * @param config Configuration parameter(s) for the requested bundle */ ptcreateResourcesq~=xsq~ uq~pppppq~$q~yq~$q~-pq~$xsq~ uq~ppppsq~ uq~sq~isq~ uq~sq~bsq~ uq~ppppq~H-sq~ uq~ppppppptconfigq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppsq~zsq~ uq~ q~H-sq~isq~ uq~sq~bsq~ uq~ppppq~H;sq~ uq~ppppppptconfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~H8sq~ uq~pppppt:// --------------------------------------------------------- Public Methods /** * Create and return a newly instansiated MessageResources. * This method must be implemented by concrete subclasses. * * @param config Configuration parameter(s) for the requested bundle */ ptcreateResourcesq~¢xsq~ uq~pppppq~¥q~¦q~¥q~-pq~§xsq~ uq~q~Hpppsq~ uq~ppppq~¥q~»xq~¥tW return new PropertyMessageResources(this, config, this.returnNull); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~HSsq~ uq~ppppppptconfigq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~H8sq~ uq~pppppt:// --------------------------------------------------------- Public Methods /** * Create and return a newly instansiated MessageResources. * This method must be implemented by concrete subclasses. * * @param config Configuration parameter(s) for the requested bundle */ ptcreateResourcesq~rxsq~ uq~pppppq~–q~—q~–q~-pq~˜xsq~ uq~q~Hpppsq~ uq~ppppq~–q~¢xq~–tW return new PropertyMessageResources(this, config, this.returnNull); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~Hksq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~H8sq~ uq~pppppt:// --------------------------------------------------------- Public Methods /** * Create and return a newly instansiated MessageResources. * This method must be implemented by concrete subclasses. * * @param config Configuration parameter(s) for the requested bundle */ ptcreateResourcesq~{xsq~ uq~pppppq~~q~q~~q~-pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tW return new PropertyMessageResources(this, config, this.returnNull); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~Hƒsq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~H8sq~ uq~pppppt:// --------------------------------------------------------- Public Methods /** * Create and return a newly instansiated MessageResources. * This method must be implemented by concrete subclasses. * * @param config Configuration parameter(s) for the requested bundle */ ptcreateResourcesq~cxsq~ uq~pppppq~fq~gq~fq~-pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftW return new PropertyMessageResources(this, config, this.returnNull); sq~ uq~ppppq~fq~fxppppq~,sq~ uq~ppppppptPropertyMessageResourcesFactoryq~=xsq~ uq~ppppq~$sq~ uq~sq~)sq~ uq~ppppq~G¶sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~sq~$úsq~ uq~ppppq~G¶sq~ uq~ppppq~=sq~ uq~ppppsq~ uq~ppppppxsq~)sq~ uq~ppppq~G¶sq~ uq~ppppq~$sq~ uq~q~H«pppsq~ uq~ppppsq~B®+ºpxq~Gáq~H¢psq~4Ôuq~4ׂ‚uq~4×Ãq~$xpppsq~Bßpxq~H8pppsq~ uq~q~Gápppq~$q~$sq~Qsq~ uq~ppppq~,sq~ uq~pppppt ¶/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/util/PropertyMessageResourcesFactory.java,v 1.2 2001/02/12 00:32:14 craigmcc Exp $ * $Revision: 1.2 $ * $Date: 2001/02/12 00:32:14 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Factory for PropertyMessageResources instances. The * configuration paramter for such instances is the base Java package * name of the resources entries from which our keys and values will be * loaded. * * @author Craig R. McClanahan * @version $Revision: 1.2 $ $Date: 2001/02/12 00:32:14 $ */ pt$PropertyMessageResourcesFactory.javaq~fxsq~ uq~ppppsq~ uq~q~H8pppq~fxsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxsq~ uq~pppppt:// --------------------------------------------------------- Public Methods /** * Create and return a newly instansiated MessageResources. * This method must be implemented by concrete subclasses. * * @param config Configuration parameter(s) for the requested bundle */ ptcreateResourcesq~=xsq~ uq~pppppq~$q~yq~$q~-pq~$xsq~ uq~q~Hpppsq~ uq~ppppq~$q~Äxq~$tW return new PropertyMessageResources(this, config, this.returnNull); sq~ uq~ppppq~$q~$xq~H;q~HSpq~$q~Äxsq~#psq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~Gásq~ uq~pppppt˜// ------------------------------------------------------ Static Properties /** * The Java class to be used for * MessageResourcesFactory instances. */ // ------------------------------------------------------ Static Properties /** * The Java class to be used for * MessageResourcesFactory instances. */ // ------------------------------------------------------ Static Properties /** * The Java class to be used for * MessageResourcesFactory instances. */ // ------------------------------------------------------ Static Properties /** * The Java class to be used for * MessageResourcesFactory instances. */ // ------------------------------------------------------ Static Properties /** * The Java class to be used for * MessageResourcesFactory instances. */ ptclazzq~=xsq~ uq~pppppq~$q~yq~$q~½pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~;xpppt nullq~$sq~#q~$xsq~(sq~ uq~ppppq~Gásq~ uq~ppppptë/** * Commons Logging instance. */ /** * Commons Logging instance. */ /** * Commons Logging instance. */ /** * Commons Logging instance. */ /** * Commons Logging instance. */ ptLOGq~=xsq~ uq~pppppq~$q~yq~$q~9pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~%Zxpppt1 LogFactory.getLog(MessageResourcesFactory.class)q~$q~$q~$xsq~(sq~ uq~ppppq~Gásq~ uq~ppppptg/** * The fully qualified class name to be used for * MessageResourcesFactory instances. */ /** * The fully qualified class name to be used for * MessageResourcesFactory instances. */ /** * The fully qualified class name to be used for * MessageResourcesFactory instances. */ /** * The fully qualified class name to be used for * MessageResourcesFactory instances. */ /** * The fully qualified class name to be used for * MessageResourcesFactory instances. */ pt factoryClassq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~;xppptB "org.apache.struts.util.PropertyMessageResourcesFactory"q~$q~$q~$xsq~isq~ uq~ppppq~Gásq~ uq~ppppppptgetFactoryClassq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxq~$t> return (MessageResourcesFactory.factoryClass); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~I#sq~ uq~pppppppt factoryClassq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~Gásq~ uq~ppppppptsetFactoryClassq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxq~$ts MessageResourcesFactory.factoryClass = factoryClass; MessageResourcesFactory.clazz = null; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~Gásq~ uq~ppppptl// --------------------------------------------------------- Static Methods /** * Create and return a MessageResourcesFactory instance of the * appropriate class, which can be used to create customized * MessageResources instances. If no such factory can be * created, return null instead. */ pt createFactoryq~=xsq~ uq~pppppq~$q~yq~$q~Gápq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxq~$tÝ // Construct a new instance of the specified factory class try { if (clazz == null) clazz = RequestUtils.applicationClass(factoryClass); MessageResourcesFactory factory = (MessageResourcesFactory) clazz.newInstance(); return (factory); } catch (Throwable t) { LOG.error("MessageResourcesFactory.createFactory", t); return (null); } sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~Gásq~ uq~pppppppt getReturnNullq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t) return (this.returnNull); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~I[sq~ uq~pppppppt returnNullq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xpppq~Gásq~ uq~pppppppt setReturnNullq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t- this.returnNull = returnNull; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~Irsq~ uq~ppppppptconfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~Gásq~ uq~pppppt:// --------------------------------------------------------- Public Methods /** * Create and return a newly instansiated MessageResources. * This method must be implemented by concrete subclasses. * * @param config Configuration parameter(s) for the requested bundle */ ptcreateResourcesq~¢xsq~ uq~pppppq~¥q~¦q~¥q~-pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xsq~#psq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~Gásq~ uq~ppppppptgetFactoryClassq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥t> return (MessageResourcesFactory.factoryClass); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~Išsq~ uq~pppppppt factoryClassq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~Gásq~ uq~ppppppptsetFactoryClassq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥ts MessageResourcesFactory.factoryClass = factoryClass; MessageResourcesFactory.clazz = null; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~Gásq~ uq~ppppptl// --------------------------------------------------------- Static Methods /** * Create and return a MessageResourcesFactory instance of the * appropriate class, which can be used to create customized * MessageResources instances. If no such factory can be * created, return null instead. */ pt createFactoryq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Gápq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥tÝ // Construct a new instance of the specified factory class try { if (clazz == null) clazz = RequestUtils.applicationClass(factoryClass); MessageResourcesFactory factory = (MessageResourcesFactory) clazz.newInstance(); return (factory); } catch (Throwable t) { LOG.error("MessageResourcesFactory.createFactory", t); return (null); } sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~Gásq~ uq~pppppt÷/** * Get default value of the "returnNull" property used to initialize newly created * MessageResourcess. * @return default value of the "returnNull" property newly created * MessageResourcess are initialized to. */ pt getReturnNullq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t) return (this.returnNull); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~IÓsq~ uq~pppppppt returnNullq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xpppq~Gásq~ uq~ppppptç/** * Set the default value of the "returnNull" property newly created * MessageResourcess are initialized to. * @param returnNull default value of the "returnNull" MessageResourcess are initialized to. */ pt setReturnNullq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t- this.returnNull = returnNull; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~Iësq~ uq~ppppppptconfigq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~Gásq~ uq~pppppt:// --------------------------------------------------------- Public Methods /** * Create and return a newly instansiated MessageResources. * This method must be implemented by concrete subclasses. * * @param config Configuration parameter(s) for the requested bundle */ ptcreateResourcesq~rxsq~ uq~pppppq~–q~—q~–q~-pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xsq~#psq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~Gásq~ uq~ppppptâ/** * The fully qualified class name that is used for * MessageResourcesFactory instances. * @return class name that is used for * MessageResourcesFactory instances */ ptgetFactoryClassq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t> return (MessageResourcesFactory.factoryClass); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~Jsq~ uq~pppppppt factoryClassq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~Gásq~ uq~ppppptì/** * Set the fully qualified class name that is used for * MessageResourcesFactory instances. * @param factoryClass name that is used for * MessageResourcesFactory instances */ ptsetFactoryClassq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–ts MessageResourcesFactory.factoryClass = factoryClass; MessageResourcesFactory.clazz = null; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~Gásq~ uq~ppppptl// --------------------------------------------------------- Static Methods /** * Create and return a MessageResourcesFactory instance of the * appropriate class, which can be used to create customized * MessageResources instances. If no such factory can be * created, return null instead. */ pt createFactoryq~rxsq~ uq~pppppq~–q~—q~–q~Gápq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–tÝ // Construct a new instance of the specified factory class try { if (clazz == null) clazz = RequestUtils.applicationClass(factoryClass); MessageResourcesFactory factory = (MessageResourcesFactory) clazz.newInstance(); return (factory); } catch (Throwable t) { LOG.error("MessageResourcesFactory.createFactory", t); return (null); } sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~Gásq~ uq~pppppt÷/** * Get default value of the "returnNull" property used to initialize newly created * MessageResourcess. * @return default value of the "returnNull" property newly created * MessageResourcess are initialized to. */ pt getReturnNullq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t) return (this.returnNull); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~JNsq~ uq~pppppppt returnNullq~{xsq~ uq~pppppq~~q~q~~q~pq~€xpppq~Gásq~ uq~ppppptç/** * Set the default value of the "returnNull" property newly created * MessageResourcess are initialized to. * @param returnNull default value of the "returnNull" MessageResourcess are initialized to. */ pt setReturnNullq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t- this.returnNull = returnNull; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~Jfsq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~Gásq~ uq~pppppt:// --------------------------------------------------------- Public Methods /** * Create and return a newly instansiated MessageResources. * This method must be implemented by concrete subclasses. * * @param config Configuration parameter(s) for the requested bundle */ ptcreateResourcesq~{xsq~ uq~pppppq~~q~q~~q~-pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxsq~#psq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~Gásq~ uq~ppppptâ/** * The fully qualified class name that is used for * MessageResourcesFactory instances. * @return class name that is used for * MessageResourcesFactory instances */ ptgetFactoryClassq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t> return (MessageResourcesFactory.factoryClass); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~Jsq~ uq~pppppppt factoryClassq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~Gásq~ uq~ppppptì/** * Set the fully qualified class name that is used for * MessageResourcesFactory instances. * @param factoryClass name that is used for * MessageResourcesFactory instances */ ptsetFactoryClassq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~ts MessageResourcesFactory.factoryClass = factoryClass; MessageResourcesFactory.clazz = null; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~Gásq~ uq~ppppptl// --------------------------------------------------------- Static Methods /** * Create and return a MessageResourcesFactory instance of the * appropriate class, which can be used to create customized * MessageResources instances. If no such factory can be * created, return null instead. */ pt createFactoryq~{xsq~ uq~pppppq~~q~q~~q~Gápq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~tÝ // Construct a new instance of the specified factory class try { if (clazz == null) clazz = RequestUtils.applicationClass(factoryClass); MessageResourcesFactory factory = (MessageResourcesFactory) clazz.newInstance(); return (factory); } catch (Throwable t) { LOG.error("MessageResourcesFactory.createFactory", t); return (null); } sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~Gásq~ uq~pppppt÷/** * Get default value of the "returnNull" property used to initialize newly created * MessageResourcess. * @return default value of the "returnNull" property newly created * MessageResourcess are initialized to. */ pt getReturnNullq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft) return (this.returnNull); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq~JÉsq~ uq~pppppppt returnNullq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxpppq~Gásq~ uq~ppppptç/** * Set the default value of the "returnNull" property newly created * MessageResourcess are initialized to. * @param returnNull default value of the "returnNull" MessageResourcess are initialized to. */ pt setReturnNullq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft- this.returnNull = returnNull; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq~Jásq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~Gásq~ uq~pppppt:// --------------------------------------------------------- Public Methods /** * Create and return a newly instansiated MessageResources. * This method must be implemented by concrete subclasses. * * @param config Configuration parameter(s) for the requested bundle */ ptcreateResourcesq~cxsq~ uq~pppppq~fq~gq~fq~-pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxsq~#psq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~Gásq~ uq~ppppptâ/** * The fully qualified class name that is used for * MessageResourcesFactory instances. * @return class name that is used for * MessageResourcesFactory instances */ ptgetFactoryClassq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft> return (MessageResourcesFactory.factoryClass); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq~K sq~ uq~pppppppt factoryClassq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~Gásq~ uq~ppppptì/** * Set the fully qualified class name that is used for * MessageResourcesFactory instances. * @param factoryClass name that is used for * MessageResourcesFactory instances */ ptsetFactoryClassq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~fts MessageResourcesFactory.factoryClass = factoryClass; MessageResourcesFactory.clazz = null; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~Gásq~ uq~ppppptl// --------------------------------------------------------- Static Methods /** * Create and return a MessageResourcesFactory instance of the * appropriate class, which can be used to create customized * MessageResources instances. If no such factory can be * created, return null instead. */ pt createFactoryq~cxsq~ uq~pppppq~fq~gq~fq~Gápq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ftÝ // Construct a new instance of the specified factory class try { if (clazz == null) clazz = RequestUtils.applicationClass(factoryClass); MessageResourcesFactory factory = (MessageResourcesFactory) clazz.newInstance(); return (factory); } catch (Throwable t) { LOG.error("MessageResourcesFactory.createFactory", t); return (null); } sq~ uq~ppppq~fq~fxq~,sq~ uq~ppppppptMessageResourcesFactoryq~=xsq~ uq~sq~Csq~ uq~ppppq~bsq~ uq~ppppsq~#q~Gáxpppsq~#sq~ uq~q~H´pppsq~ uq~ppppq~$q~$sq~Qsq~ uq~sq~Csq~ uq~ppppq~KDsq~ uq~ppppsq~#q~9xsq~Csq~ uq~ppppq~KDsq~ uq~ppppsq~#q~?xppq~,sq~ uq~pppppt&/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/util/MessageResourcesFactory.java,v 1.8 2002/10/17 03:20:31 rleland Exp $ * $Revision: 1.8 $ * $Date: 2002/10/17 03:20:31 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Factory for MessageResources instances. The general usage * pattern for this class is: *
        *
      • Call MessageResourcesFactory().createFactory() to retrieve * a MessageResourcesFactory instance.
      • *
      • Set properties as required to configure this factory instance to create * MessageResources instances with desired * characteristics.
      • *
      • Call the createResources() method of the factory to * retrieve a newly instantiated MessageResources * instance.
      • *
      * * @author Craig R. McClanahan * @version $Revision: 1.8 $ $Date: 2002/10/17 03:20:31 $ */ ptMessageResourcesFactory.javaq~fxsq~ uq~ppppsq~ uq~q~Gápppq~fxsq~ uq~q~H8ppppq~$sq~ uq~ppppsq~ uq~"sq~(sq~ uq~ppppq~-sq~ uq~ppppptÂ/** * The MessageResourcesFactory that created this instance. */ /** * The MessageResourcesFactory that created this instance. */ /** * The MessageResourcesFactory that created this instance. */ /** * The MessageResourcesFactory that created this instance. */ /** * The MessageResourcesFactory that created this instance. */ ptfactoryq~=xsq~ uq~pppppq~$q~yq~$q~Gápq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~-sq~ uq~pppppppt getFactoryq~=xsq~ uq~pppppq~$q~yq~$q~Gápq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t& return (this.factory); sq~ uq~ppppq~$q~$xsq~bsq~ uq~ppppsq~esq~ uq~q~K~sq~bsq~ uq~ppppq~Ksq~ uq~ppppppptconfigq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xppq~-sq~ uq~ppppptA// ----------------------------------------------------------- Constructors /** * Construct a new MessageResources according to the specified parameters. * * @param factory The MessageResourcesFactory that created us * @param config The configuration parameter for this MessageResources */ ptMessageResourcesq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t1 this(factory, config, false); sq~ uq~ppppq~$q~$xsq~ uq~ppppppptfactoryq~=xsq~ uq~pppppq~$q~yq~$q~Gápq~$xsq~bsq~ uq~ppppsq~esq~ uq~q~Kžsq~bsq~ uq~ppppq~K¡sq~ uq~ppppppptconfigq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppq~K¡sq~ uq~pppppppt returnNullq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xpq~-sq~ uq~pppppt@/** * Construct a new MessageResources according to the specified parameters. * * @param factory The MessageResourcesFactory that created us * @param config The configuration parameter for this MessageResources * @param returnNull The returnNull property we should initialize with */ pq~Kq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tƒ super(); this.factory = factory; this.config = config; this.returnNull = returnNull; sq~ uq~ppppq~$q~$xsq~ uq~ppppppptfactoryq~=xsq~ uq~pppppq~$q~yq~$q~Gápq~$xsq~(sq~ uq~ppppq~-sq~ uq~pppppt// --------------------------------------------------------- Static Methods /** * The default MessageResourcesFactory used to create MessageResources * instances. */ // --------------------------------------------------------- Static Methods /** * The default MessageResourcesFactory used to create MessageResources * instances. */ // --------------------------------------------------------- Static Methods /** * The default MessageResourcesFactory used to create MessageResources * instances. */ // --------------------------------------------------------- Static Methods /** * The default MessageResourcesFactory used to create MessageResources * instances. */ // --------------------------------------------------------- Static Methods /** * The default MessageResourcesFactory used to create MessageResources * instances. */ ptdefaultFactoryq~=xsq~ uq~pppppq~$q~yq~$q~Gápq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~;xpppt nullq~$q~$q~$xq~I;q~GÙsq~bsq~ uq~ppppsq~esq~ uq~q~KÔsq~bsq~ uq~ppppq~K×sq~ uq~ppppppptconfigq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppq~K×sq~ uq~pppppppt returnNullq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xpq~GÓsq~ uq~ppppptP/** * Construct a new PropertyMessageResources according to the * specified parameters. * * @param factory The MessageResourcesFactory that created us * @param config The configuration parameter for this MessageResources * @param returnNull The returnNull property we should initialize with */ ptPropertyMessageResourcesq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t7 super(factory, config, returnNull); sq~ uq~ppppq~$q~$xsq~ uq~ppppppptfactoryq~=xsq~ uq~pppppq~$q~yq~$q~Gápq~$xsq~isq~ uq~ppppq~-sq~ uq~pppppppt getFactoryq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Gápq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t& return (this.factory); sq~ uq~ppppq~¥q~¥xsq~bsq~ uq~ppppsq~esq~ uq~q~L sq~bsq~ uq~ppppq~Lsq~ uq~ppppppptconfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xppq~-sq~ uq~ppppptA// ----------------------------------------------------------- Constructors /** * Construct a new MessageResources according to the specified parameters. * * @param factory The MessageResourcesFactory that created us * @param config The configuration parameter for this MessageResources */ pq~Kq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t1 this(factory, config, false); sq~ uq~ppppq~¥q~¥xsq~ uq~ppppppptfactoryq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Gápq~§xsq~bsq~ uq~ppppsq~esq~ uq~q~L*sq~bsq~ uq~ppppq~L-sq~ uq~ppppppptconfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq~L-sq~ uq~pppppppt returnNullq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xpq~-sq~ uq~pppppt@/** * Construct a new MessageResources according to the specified parameters. * * @param factory The MessageResourcesFactory that created us * @param config The configuration parameter for this MessageResources * @param returnNull The returnNull property we should initialize with */ pq~Kq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tƒ super(); this.factory = factory; this.config = config; this.returnNull = returnNull; sq~ uq~ppppq~¥q~¥xsq~ uq~ppppppptfactoryq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Gápq~§xq~I²sq~bsq~ uq~ppppsq~esq~ uq~q~LQsq~bsq~ uq~ppppq~LTsq~ uq~ppppppptconfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xppq~GÓsq~ uq~ppppptQ// ----------------------------------------------------------- Constructors /** * Construct a new PropertyMessageResources according to the * specified parameters. * * @param factory The MessageResourcesFactory that created us * @param config The configuration parameter for this MessageResources */ pq~Kíq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t+ super(factory, config); sq~ uq~ppppq~¥q~¥xsq~ uq~ppppppptfactoryq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Gápq~§xsq~bsq~ uq~ppppsq~esq~ uq~q~Lpsq~bsq~ uq~ppppq~Lssq~ uq~ppppppptconfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq~Lssq~ uq~pppppppt returnNullq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xpq~GÓsq~ uq~ppppptP/** * Construct a new PropertyMessageResources according to the * specified parameters. * * @param factory The MessageResourcesFactory that created us * @param config The configuration parameter for this MessageResources * @param returnNull The returnNull property we should initialize with */ pq~Kíq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t7 super(factory, config, returnNull); sq~ uq~ppppq~¥q~¥xsq~ uq~ppppppptfactoryq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Gápq~§xsq~bsq~ uq~ppppsq~esq~ uq~q~L—sq~bsq~ uq~ppppq~Lšsq~ uq~ppppppptconfigq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xppq~GÓsq~ uq~ppppptQ// ----------------------------------------------------------- Constructors /** * Construct a new PropertyMessageResources according to the * specified parameters. * * @param factory The MessageResourcesFactory that created us * @param config The configuration parameter for this MessageResources */ pq~Kíq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tg super(factory, config); log.info("Initializing, config='" + config + "'"); sq~ uq~ppppq~–q~–xsq~ uq~ppppppptfactoryq~rxsq~ uq~pppppq~–q~—q~–q~Gápq~˜xsq~bsq~ uq~ppppsq~esq~ uq~q~L¶sq~bsq~ uq~ppppq~L¹sq~ uq~ppppppptconfigq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq~L¹sq~ uq~pppppppt returnNullq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xpq~GÓsq~ uq~ppppptP/** * Construct a new PropertyMessageResources according to the * specified parameters. * * @param factory The MessageResourcesFactory that created us * @param config The configuration parameter for this MessageResources * @param returnNull The returnNull property we should initialize with */ pq~Kíq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tŸ super(factory, config, returnNull); log.info("Initializing, config='" + config + "', returnNull=" + returnNull); sq~ uq~ppppq~–q~–xsq~ uq~ppppppptfactoryq~rxsq~ uq~pppppq~–q~—q~–q~Gápq~˜xsq~isq~ uq~ppppq~-sq~ uq~pppppt¤/** * The MessageResourcesFactory that created this instance. * @returnMessageResourcesFactory that created instance */ pt getFactoryq~rxsq~ uq~pppppq~–q~—q~–q~Gápq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t& return (this.factory); sq~ uq~ppppq~–q~–xsq~bsq~ uq~ppppsq~esq~ uq~q~Lísq~bsq~ uq~ppppq~Lðsq~ uq~ppppppptconfigq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xppq~-sq~ uq~ppppptA// ----------------------------------------------------------- Constructors /** * Construct a new MessageResources according to the specified parameters. * * @param factory The MessageResourcesFactory that created us * @param config The configuration parameter for this MessageResources */ pq~Kq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t1 this(factory, config, false); sq~ uq~ppppq~–q~–xsq~ uq~ppppppptfactoryq~rxsq~ uq~pppppq~–q~—q~–q~Gápq~˜xsq~bsq~ uq~ppppsq~esq~ uq~q~M sq~bsq~ uq~ppppq~Msq~ uq~ppppppptconfigq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq~Msq~ uq~pppppppt returnNullq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xpq~-sq~ uq~pppppt@/** * Construct a new MessageResources according to the specified parameters. * * @param factory The MessageResourcesFactory that created us * @param config The configuration parameter for this MessageResources * @param returnNull The returnNull property we should initialize with */ pq~Kq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tƒ super(); this.factory = factory; this.config = config; this.returnNull = returnNull; sq~ uq~ppppq~–q~–xsq~ uq~ppppppptfactoryq~rxsq~ uq~pppppq~–q~—q~–q~Gápq~˜xq~J-sq~bsq~ uq~ppppsq~esq~ uq~q~M3sq~bsq~ uq~ppppq~M6sq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xppq~GÓsq~ uq~ppppptQ// ----------------------------------------------------------- Constructors /** * Construct a new PropertyMessageResources according to the * specified parameters. * * @param factory The MessageResourcesFactory that created us * @param config The configuration parameter for this MessageResources */ pq~Kíq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tg super(factory, config); log.info("Initializing, config='" + config + "'"); sq~ uq~ppppq~~q~~xsq~ uq~ppppppptfactoryq~{xsq~ uq~pppppq~~q~q~~q~Gápq~€xsq~bsq~ uq~ppppsq~esq~ uq~q~MRsq~bsq~ uq~ppppq~MUsq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq~MUsq~ uq~pppppppt returnNullq~{xsq~ uq~pppppq~~q~q~~q~pq~€xpq~GÓsq~ uq~ppppptP/** * Construct a new PropertyMessageResources according to the * specified parameters. * * @param factory The MessageResourcesFactory that created us * @param config The configuration parameter for this MessageResources * @param returnNull The returnNull property we should initialize with */ pq~Kíq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tŸ super(factory, config, returnNull); log.info("Initializing, config='" + config + "', returnNull=" + returnNull); sq~ uq~ppppq~~q~~xsq~ uq~ppppppptfactoryq~{xsq~ uq~pppppq~~q~q~~q~Gápq~€xq~J¨sq~isq~ uq~ppppq~-sq~ uq~pppppt¥/** * The MessageResourcesFactory that created this instance. * @return MessageResourcesFactory that created instance */ pt getFactoryq~{xsq~ uq~pppppq~~q~q~~q~Gápq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t& return (this.factory); sq~ uq~ppppq~~q~~xsq~bsq~ uq~ppppsq~esq~ uq~q~M‰sq~bsq~ uq~ppppq~MŒsq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xppq~-sq~ uq~ppppptA// ----------------------------------------------------------- Constructors /** * Construct a new MessageResources according to the specified parameters. * * @param factory The MessageResourcesFactory that created us * @param config The configuration parameter for this MessageResources */ pq~Kq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t1 this(factory, config, false); sq~ uq~ppppq~~q~~xsq~ uq~ppppppptfactoryq~{xsq~ uq~pppppq~~q~q~~q~Gápq~€xsq~bsq~ uq~ppppsq~esq~ uq~q~M¨sq~bsq~ uq~ppppq~M«sq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq~M«sq~ uq~pppppppt returnNullq~{xsq~ uq~pppppq~~q~q~~q~pq~€xpq~-sq~ uq~pppppt@/** * Construct a new MessageResources according to the specified parameters. * * @param factory The MessageResourcesFactory that created us * @param config The configuration parameter for this MessageResources * @param returnNull The returnNull property we should initialize with */ pq~Kq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tƒ super(); this.factory = factory; this.config = config; this.returnNull = returnNull; sq~ uq~ppppq~~q~~xsq~ uq~ppppppptfactoryq~{xsq~ uq~pppppq~~q~q~~q~Gápq~€xsq~bsq~ uq~ppppsq~esq~ uq~q~MÏsq~bsq~ uq~ppppq~MÒsq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxppq~GÓsq~ uq~ppppptQ// ----------------------------------------------------------- Constructors /** * Construct a new PropertyMessageResources according to the * specified parameters. * * @param factory The MessageResourcesFactory that created us * @param config The configuration parameter for this MessageResources */ pq~Kíq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftg super(factory, config); log.info("Initializing, config='" + config + "'"); sq~ uq~ppppq~fq~fxsq~ uq~ppppppptfactoryq~cxsq~ uq~pppppq~fq~gq~fq~Gápq~hxsq~bsq~ uq~ppppsq~esq~ uq~q~Mîsq~bsq~ uq~ppppq~Mñsq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq~Mñsq~ uq~pppppppt returnNullq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxpq~GÓsq~ uq~ppppptP/** * Construct a new PropertyMessageResources according to the * specified parameters. * * @param factory The MessageResourcesFactory that created us * @param config The configuration parameter for this MessageResources * @param returnNull The returnNull property we should initialize with */ pq~Kíq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftŸ super(factory, config, returnNull); log.info("Initializing, config='" + config + "', returnNull=" + returnNull); sq~ uq~ppppq~fq~fxsq~ uq~ppppppptfactoryq~cxsq~ uq~pppppq~fq~gq~fq~Gápq~hxq~K#sq~isq~ uq~ppppq~-sq~ uq~pppppt¥/** * The MessageResourcesFactory that created this instance. * @return MessageResourcesFactory that created instance */ pt getFactoryq~cxsq~ uq~pppppq~fq~gq~fq~Gápq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft& return (this.factory); sq~ uq~ppppq~fq~fxsq~bsq~ uq~ppppsq~esq~ uq~q~N%sq~bsq~ uq~ppppq~N(sq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxppq~-sq~ uq~ppppptA// ----------------------------------------------------------- Constructors /** * Construct a new MessageResources according to the specified parameters. * * @param factory The MessageResourcesFactory that created us * @param config The configuration parameter for this MessageResources */ pq~Kq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft1 this(factory, config, false); sq~ uq~ppppq~fq~fxsq~ uq~ppppppptfactoryq~cxsq~ uq~pppppq~fq~gq~fq~Gápq~hxsq~bsq~ uq~ppppsq~esq~ uq~q~NDsq~bsq~ uq~ppppq~NGsq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq~NGsq~ uq~pppppppt returnNullq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxpq~-sq~ uq~pppppt@/** * Construct a new MessageResources according to the specified parameters. * * @param factory The MessageResourcesFactory that created us * @param config The configuration parameter for this MessageResources * @param returnNull The returnNull property we should initialize with */ pq~Kq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftƒ super(); this.factory = factory; this.config = config; this.returnNull = returnNull; sq~ uq~ppppq~fq~fxsq~ uq~ppppppptfactoryq~cxsq~ uq~pppppq~fq~gq~fq~Gápq~hxppq~Äxq~$ppxpq~$xsq~bsq~ uq~ppppq~GÖsq~ uq~ppppppptconfigq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xppq~GÓsq~ uq~ppppptQ// ----------------------------------------------------------- Constructors /** * Construct a new PropertyMessageResources according to the * specified parameters. * * @param factory The MessageResourcesFactory that created us * @param config The configuration parameter for this MessageResources */ pq~Kíq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t+ super(factory, config); sq~ uq~ppppq~$q~$xq~K×sq~(sq~ uq~ppppq~GÓsq~ uq~ppppptƒ// ------------------------------------------------------------- Properties /** * The set of locale keys for which we have already loaded messages, keyed * by the value calculated in localeKey(). */ // ------------------------------------------------------------- Properties /** * The set of locale keys for which we have already loaded messages, keyed * by the value calculated in localeKey(). */ // ------------------------------------------------------------- Properties /** * The set of locale keys for which we have already loaded messages, keyed * by the value calculated in localeKey(). */ // ------------------------------------------------------------- Properties /** * The set of locale keys for which we have already loaded messages, keyed * by the value calculated in localeKey(). */ // ------------------------------------------------------------- Properties /** * The set of locale keys for which we have already loaded messages, keyed * by the value calculated in localeKey(). */ ptlocalesq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt new HashMap()q~$q~$q~$xsq~(sq~ uq~ppppq~GÓsq~ uq~ppppptÆ/** * The cache of messages we have accumulated over time, keyed by the * value calculated in messageKey(). */ /** * The cache of messages we have accumulated over time, keyed by the * value calculated in messageKey(). */ /** * The cache of messages we have accumulated over time, keyed by the * value calculated in messageKey(). */ /** * The cache of messages we have accumulated over time, keyed by the * value calculated in messageKey(). */ /** * The cache of messages we have accumulated over time, keyed by the * value calculated in messageKey(). */ ptmessagesq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt new HashMap()q~$q~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~N›sq~ uq~ppppppptlocaleq~=xsq~ uq~pppppq~$q~yq~$q~5pq~$xsq~bsq~ uq~ppppq~N›sq~ uq~ppppppptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xppq~GÓsq~ uq~pppppt›// --------------------------------------------------------- Public Methods /** * Returns a text message for the specified key, for the default Locale. * A null string result will be returned by this method if no relevant * message resource is found for this key or Locale, if the * returnNull property is set. Otherwise, an appropriate * error message will be returned. *

      * This method must be implemented by a concrete subclass. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up */ pt getMessageq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~sq~isq~ uq~sq~bsq~ uq~ppppq~N¶sq~ uq~ppppppptlocaleq~=xsq~ uq~pppppq~$q~yq~$q~5pq~$xsq~bsq~ uq~ppppq~N¶sq~ uq~ppppppptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xppq~-sq~ uq~ppppptN/** * Returns a text message for the specified key, for the default Locale. * A null string result will be returned by this method if no relevant * message resource is found for this key or Locale, if the * returnNull property is set. Otherwise, an appropriate * error message will be returned. *

      * This method must be implemented by a concrete subclass. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up */ pt getMessageq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~q~N›sq~isq~ uq~sq~bsq~ uq~ppppq~NÓsq~ uq~ppppppptlocaleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~5pq~§xsq~bsq~ uq~ppppq~NÓsq~ uq~ppppppptkeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xppq~GÓsq~ uq~pppppt›// --------------------------------------------------------- Public Methods /** * Returns a text message for the specified key, for the default Locale. * A null string result will be returned by this method if no relevant * message resource is found for this key or Locale, if the * returnNull property is set. Otherwise, an appropriate * error message will be returned. *

      * This method must be implemented by a concrete subclass. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up */ pt getMessageq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~q~N¶pppsq~ uq~ppppq~¥q~»xq~¥t Ÿ // Initialize variables we will require String localeKey = localeKey(locale); String originalKey = messageKey(localeKey, key); String messageKey = null; String message = null; int underscore = 0; boolean addIt = false; // Add if not found under the original key // Loop from specific to general Locales looking for this message while (true) { // Load this Locale's messages if we have not done so yet loadLocale(localeKey); // Check if we have this key for the current locale key messageKey = messageKey(localeKey, key); synchronized (messages) { message = (String) messages.get(messageKey); if (message != null) { if (addIt) messages.put(originalKey, message); return (message); } } // Strip trailing modifiers to try a more general locale key addIt = true; underscore = localeKey.lastIndexOf("_"); if (underscore < 0) break; localeKey = localeKey.substring(0, underscore); } // Try the default locale if the current locale is different if (!defaultLocale.equals(locale)) { localeKey = localeKey(defaultLocale); messageKey = messageKey(localeKey, key); loadLocale(localeKey); synchronized (messages) { message = (String) messages.get(messageKey); if (message != null) { if (addIt) messages.put(originalKey, message); return (message); } } } // As a last resort, try the default Locale localeKey = ""; messageKey = messageKey(localeKey, key); loadLocale(localeKey); synchronized (messages) { message = (String) messages.get(messageKey); if (message != null) { if (addIt) messages.put(originalKey, message); return (message); } } // Return an appropriate error indication if (returnNull) return (null); else return ("???" + messageKey(locale, key) + "???"); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~Nósq~ uq~ppppppptlocaleq~rxsq~ uq~pppppq~–q~—q~–q~5pq~˜xsq~bsq~ uq~ppppq~Nósq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xppq~GÓsq~ uq~ppppptÙ// --------------------------------------------------------- Public Methods /** * Returns a text message for the specified key, for the default Locale. * A null string result will be returned by this method if no relevant * message resource is found for this key or Locale, if the * returnNull property is set. Otherwise, an appropriate * error message will be returned. *

      * This method must be implemented by a concrete subclass. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up * @return text message for the specified key and locale */ pt getMessageq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~q~N¶pppsq~ uq~ppppq~–q~¢xq~–t Ï if (log.isDebugEnabled()) { log.debug("getMessage(" + locale + "," + key + ")"); } // Initialize variables we will require String localeKey = localeKey(locale); String originalKey = messageKey(localeKey, key); String messageKey = null; String message = null; int underscore = 0; boolean addIt = false; // Add if not found under the original key // Loop from specific to general Locales looking for this message while (true) { // Load this Locale's messages if we have not done so yet loadLocale(localeKey); // Check if we have this key for the current locale key messageKey = messageKey(localeKey, key); synchronized (messages) { message = (String) messages.get(messageKey); if (message != null) { if (addIt) messages.put(originalKey, message); return (message); } } // Strip trailing modifiers to try a more general locale key addIt = true; underscore = localeKey.lastIndexOf("_"); if (underscore < 0) break; localeKey = localeKey.substring(0, underscore); } // Try the default locale if the current locale is different if (!defaultLocale.equals(locale)) { localeKey = localeKey(defaultLocale); messageKey = messageKey(localeKey, key); loadLocale(localeKey); synchronized (messages) { message = (String) messages.get(messageKey); if (message != null) { messages.put(originalKey, message); return (message); } } } // As a last resort, try the default Locale localeKey = ""; messageKey = messageKey(localeKey, key); loadLocale(localeKey); synchronized (messages) { message = (String) messages.get(messageKey); if (message != null) { messages.put(originalKey, message); return (message); } } // Return an appropriate error indication if (returnNull) return (null); else return ("???" + messageKey(locale, key) + "???"); sq~ uq~ppppq~–q~–xpq~$q~Äxsq~#psq~ uq~ppppq~$q~$xpppsq~ uq~ppppq~$q~Äxq~$t Ÿ // Initialize variables we will require String localeKey = localeKey(locale); String originalKey = messageKey(localeKey, key); String messageKey = null; String message = null; int underscore = 0; boolean addIt = false; // Add if not found under the original key // Loop from specific to general Locales looking for this message while (true) { // Load this Locale's messages if we have not done so yet loadLocale(localeKey); // Check if we have this key for the current locale key messageKey = messageKey(localeKey, key); synchronized (messages) { message = (String) messages.get(messageKey); if (message != null) { if (addIt) messages.put(originalKey, message); return (message); } } // Strip trailing modifiers to try a more general locale key addIt = true; underscore = localeKey.lastIndexOf("_"); if (underscore < 0) break; localeKey = localeKey.substring(0, underscore); } // Try the default locale if the current locale is different if (!defaultLocale.equals(locale)) { localeKey = localeKey(defaultLocale); messageKey = messageKey(localeKey, key); loadLocale(localeKey); synchronized (messages) { message = (String) messages.get(messageKey); if (message != null) { if (addIt) messages.put(originalKey, message); return (message); } } } // As a last resort, try the default Locale localeKey = ""; messageKey = messageKey(localeKey, key); loadLocale(localeKey); synchronized (messages) { message = (String) messages.get(messageKey); if (message != null) { if (addIt) messages.put(originalKey, message); return (message); } } // Return an appropriate error indication if (returnNull) return (null); else return ("???" + messageKey(locale, key) + "???"); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~Osq~ uq~pppppppt localeKeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~GÓsq~ uq~ppppptž// ------------------------------------------------------ Protected Methods /** * Load the messages associated with the specified Locale key. For this * implementation, the config property should contain a fully * qualified package and resource name, separated by periods, of a series * of property resources to be loaded from the class loader that created * this PropertyMessageResources instance. This is exactly the same name * format you would use when utilizing the * java.util.PropertyResourceBundle class. * * @param localeKey Locale key for the messages to be retrieved */ pt loadLocaleq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$tÍ // Have we already attempted to load messages for this locale? synchronized (locales) { if (locales.get(localeKey) != null) return; locales.put(localeKey, localeKey); } // Set up to load the property resource for this locale key, if we can String name = config.replace('.', '/'); if (localeKey.length() > 0) name += "_" + localeKey; name += ".properties"; InputStream is = null; Properties props = new Properties(); // Load the specified property resource try { is = this.getClass().getClassLoader().getResourceAsStream(name); if (is != null) { props.load(is); is.close(); } } catch (Throwable t) { if (is != null) { try { is.close(); } catch (Throwable u) { ; } } } // Copy the corresponding values into our cache if (props.size() < 1) return; synchronized (messages) { Enumeration names = props.keys(); while (names.hasMoreElements()) { String key = (String) names.nextElement(); messages.put(messageKey(localeKey, key), props.getProperty(key)); } } sq~ uq~ppppq~$q~$xq~LTq~Lsq~NÓsq~isq~ uq~sq~bsq~ uq~ppppq~O3sq~ uq~pppppppt localeKeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~GÓsq~ uq~ppppptž// ------------------------------------------------------ Protected Methods /** * Load the messages associated with the specified Locale key. For this * implementation, the config property should contain a fully * qualified package and resource name, separated by periods, of a series * of property resources to be loaded from the class loader that created * this PropertyMessageResources instance. This is exactly the same name * format you would use when utilizing the * java.util.PropertyResourceBundle class. * * @param localeKey Locale key for the messages to be retrieved */ pt loadLocaleq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥tÍ // Have we already attempted to load messages for this locale? synchronized (locales) { if (locales.get(localeKey) != null) return; locales.put(localeKey, localeKey); } // Set up to load the property resource for this locale key, if we can String name = config.replace('.', '/'); if (localeKey.length() > 0) name += "_" + localeKey; name += ".properties"; InputStream is = null; Properties props = new Properties(); // Load the specified property resource try { is = this.getClass().getClassLoader().getResourceAsStream(name); if (is != null) { props.load(is); is.close(); } } catch (Throwable t) { if (is != null) { try { is.close(); } catch (Throwable u) { ; } } } // Copy the corresponding values into our cache if (props.size() < 1) return; synchronized (messages) { Enumeration names = props.keys(); while (names.hasMoreElements()) { String key = (String) names.nextElement(); messages.put(messageKey(localeKey, key), props.getProperty(key)); } } sq~ uq~ppppq~¥q~¥xq~Lšq~L¹sq~(sq~ uq~ppppq~GÓsq~ uq~ppppptÉ/** * The Log instance for this class. */ /** * The Log instance for this class. */ /** * The Log instance for this class. */ ptlogq~rxsq~ uq~pppppsq~#q~—q~–q~9pq~˜xsq~ uq~q~0pppsq~ uq~ppppsq~#q~ xpppt; LogFactory.getLog(PropertyMessageResources.class)q~–q~–q~–xq~Nósq~isq~ uq~sq~bsq~ uq~ppppq~O[sq~ uq~pppppppt localeKeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~GÓsq~ uq~ppppptž// ------------------------------------------------------ Protected Methods /** * Load the messages associated with the specified Locale key. For this * implementation, the config property should contain a fully * qualified package and resource name, separated by periods, of a series * of property resources to be loaded from the class loader that created * this PropertyMessageResources instance. This is exactly the same name * format you would use when utilizing the * java.util.PropertyResourceBundle class. * * @param localeKey Locale key for the messages to be retrieved */ pt loadLocaleq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–tÑ if (log.isTraceEnabled()) { log.trace("loadLocale(" + localeKey + ")"); } // Have we already attempted to load messages for this locale? synchronized (locales) { if (locales.get(localeKey) != null) return; locales.put(localeKey, localeKey); } // Set up to load the property resource for this locale key, if we can String name = config.replace('.', '/'); if (localeKey.length() > 0) name += "_" + localeKey; name += ".properties"; InputStream is = null; Properties props = new Properties(); // Load the specified property resource try { if (log.isTraceEnabled()) { log.trace(" Loading resource '" + name + "'"); } ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); if (classLoader == null) { classLoader = this.getClass().getClassLoader(); } is = classLoader.getResourceAsStream(name); if (is != null) { props.load(is); is.close(); } if (log.isTraceEnabled()) { log.trace(" Loading resource completed"); } } catch (Throwable t) { log.error("loadLocale()", t); if (is != null) { try { is.close(); } catch (Throwable u) { ; } } } // Copy the corresponding values into our cache if (props.size() < 1) return; synchronized (messages) { Enumeration names = props.keys(); while (names.hasMoreElements()) { String key = (String) names.nextElement(); if (log.isTraceEnabled()) { log.trace(" Saving message key '" + messageKey(localeKey, key)); } messages.put(messageKey(localeKey, key), props.getProperty(key)); } } sq~ uq~ppppq~–q~–xq~M6q~MUsq~isq~ uq~sq~bsq~ uq~ppppq~Ossq~ uq~ppppppptlocaleq~{xsq~ uq~pppppq~~q~q~~q~5pq~€xsq~bsq~ uq~ppppq~Ossq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xppq~GÓsq~ uq~ppppptÙ// --------------------------------------------------------- Public Methods /** * Returns a text message for the specified key, for the default Locale. * A null string result will be returned by this method if no relevant * message resource is found for this key or Locale, if the * returnNull property is set. Otherwise, an appropriate * error message will be returned. *

      * This method must be implemented by a concrete subclass. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up * @return text message for the specified key and locale */ pt getMessageq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t if (log.isDebugEnabled()) { log.debug("getMessage(" + locale + "," + key + ")"); } // Initialize variables we will require String localeKey = localeKey(locale); String originalKey = messageKey(localeKey, key); String messageKey = null; String message = null; int underscore = 0; boolean addIt = false; // Add if not found under the original key // Loop from specific to general Locales looking for this message while (true) { // Load this Locale's messages if we have not done so yet loadLocale(localeKey); // Check if we have this key for the current locale key messageKey = messageKey(localeKey, key); synchronized (messages) { message = (String) messages.get(messageKey); if (message != null) { if (addIt) { messages.put(originalKey, message); } return (message); } } // Strip trailing modifiers to try a more general locale key addIt = true; underscore = localeKey.lastIndexOf("_"); if (underscore < 0) { break; } localeKey = localeKey.substring(0, underscore); } // Try the default locale if the current locale is different if (!defaultLocale.equals(locale)) { localeKey = localeKey(defaultLocale); messageKey = messageKey(localeKey, key); loadLocale(localeKey); synchronized (messages) { message = (String) messages.get(messageKey); if (message != null) { messages.put(originalKey, message); return (message); } } } // As a last resort, try the default Locale localeKey = ""; messageKey = messageKey(localeKey, key); loadLocale(localeKey); synchronized (messages) { message = (String) messages.get(messageKey); if (message != null) { messages.put(originalKey, message); return (message); } } // Return an appropriate error indication if (returnNull) { return (null); } else { return ("???" + messageKey(locale, key) + "???"); } sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~O“sq~ uq~pppppppt localeKeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~GÓsq~ uq~ppppptž// ------------------------------------------------------ Protected Methods /** * Load the messages associated with the specified Locale key. For this * implementation, the config property should contain a fully * qualified package and resource name, separated by periods, of a series * of property resources to be loaded from the class loader that created * this PropertyMessageResources instance. This is exactly the same name * format you would use when utilizing the * java.util.PropertyResourceBundle class. * * @param localeKey Locale key for the messages to be retrieved */ pt loadLocaleq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~tx if (log.isTraceEnabled()) { log.trace("loadLocale(" + localeKey + ")"); } // Have we already attempted to load messages for this locale? if (locales.get(localeKey) != null) { return; } locales.put(localeKey, localeKey); // Set up to load the property resource for this locale key, if we can String name = config.replace('.', '/'); if (localeKey.length() > 0) { name += "_" + localeKey; } name += ".properties"; InputStream is = null; Properties props = new Properties(); // Load the specified property resource if (log.isTraceEnabled()) { log.trace(" Loading resource '" + name + "'"); } ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); if (classLoader == null) { classLoader = this.getClass().getClassLoader(); } is = classLoader.getResourceAsStream(name); if (is != null) { try { props.load(is); } catch (IOException e) { log.error("loadLocale()", e); } finally { try { is.close(); } catch (IOException e) { log.error("loadLocale()", e); } } } if (log.isTraceEnabled()) { log.trace(" Loading resource completed"); } // Copy the corresponding values into our cache if (props.size() < 1) { return; } synchronized (messages) { Iterator names = props.keySet().iterator(); while (names.hasNext()) { String key = (String) names.next(); if (log.isTraceEnabled()) { log.trace(" Saving message key '" + messageKey(localeKey, key)); } messages.put(messageKey(localeKey, key), props.getProperty(key)); } } sq~ uq~ppppq~~sq~#xq~MÒq~Mñsq~isq~ uq~sq~bsq~ uq~ppppq~O¬sq~ uq~ppppppptlocaleq~cxsq~ uq~pppppq~fq~gq~fq~5pq~hxsq~bsq~ uq~ppppq~O¬sq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxppq~GÓsq~ uq~ppppptÙ// --------------------------------------------------------- Public Methods /** * Returns a text message for the specified key, for the default Locale. * A null string result will be returned by this method if no relevant * message resource is found for this key or Locale, if the * returnNull property is set. Otherwise, an appropriate * error message will be returned. *

      * This method must be implemented by a concrete subclass. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up * @return text message for the specified key and locale */ pt getMessageq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft if (log.isDebugEnabled()) { log.debug("getMessage(" + locale + "," + key + ")"); } // Initialize variables we will require String localeKey = localeKey(locale); String originalKey = messageKey(localeKey, key); String messageKey = null; String message = null; int underscore = 0; boolean addIt = false; // Add if not found under the original key // Loop from specific to general Locales looking for this message while (true) { // Load this Locale's messages if we have not done so yet loadLocale(localeKey); // Check if we have this key for the current locale key messageKey = messageKey(localeKey, key); synchronized (messages) { message = (String) messages.get(messageKey); if (message != null) { if (addIt) { messages.put(originalKey, message); } return (message); } } // Strip trailing modifiers to try a more general locale key addIt = true; underscore = localeKey.lastIndexOf("_"); if (underscore < 0) { break; } localeKey = localeKey.substring(0, underscore); } // Try the default locale if the current locale is different if (!defaultLocale.equals(locale)) { localeKey = localeKey(defaultLocale); messageKey = messageKey(localeKey, key); loadLocale(localeKey); synchronized (messages) { message = (String) messages.get(messageKey); if (message != null) { messages.put(originalKey, message); return (message); } } } // As a last resort, try the default Locale localeKey = ""; messageKey = messageKey(localeKey, key); loadLocale(localeKey); synchronized (messages) { message = (String) messages.get(messageKey); if (message != null) { messages.put(originalKey, message); return (message); } } // Return an appropriate error indication if (returnNull) { return (null); } else { return ("???" + messageKey(locale, key) + "???"); } sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq~OÌsq~ uq~pppppppt localeKeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~GÓsq~ uq~ppppptž// ------------------------------------------------------ Protected Methods /** * Load the messages associated with the specified Locale key. For this * implementation, the config property should contain a fully * qualified package and resource name, separated by periods, of a series * of property resources to be loaded from the class loader that created * this PropertyMessageResources instance. This is exactly the same name * format you would use when utilizing the * java.util.PropertyResourceBundle class. * * @param localeKey Locale key for the messages to be retrieved */ pt loadLocaleq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ftx if (log.isTraceEnabled()) { log.trace("loadLocale(" + localeKey + ")"); } // Have we already attempted to load messages for this locale? if (locales.get(localeKey) != null) { return; } locales.put(localeKey, localeKey); // Set up to load the property resource for this locale key, if we can String name = config.replace('.', '/'); if (localeKey.length() > 0) { name += "_" + localeKey; } name += ".properties"; InputStream is = null; Properties props = new Properties(); // Load the specified property resource if (log.isTraceEnabled()) { log.trace(" Loading resource '" + name + "'"); } ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); if (classLoader == null) { classLoader = this.getClass().getClassLoader(); } is = classLoader.getResourceAsStream(name); if (is != null) { try { props.load(is); } catch (IOException e) { log.error("loadLocale()", e); } finally { try { is.close(); } catch (IOException e) { log.error("loadLocale()", e); } } } if (log.isTraceEnabled()) { log.trace(" Loading resource completed"); } // Copy the corresponding values into our cache if (props.size() < 1) { return; } synchronized (messages) { Iterator names = props.keySet().iterator(); while (names.hasNext()) { String key = (String) names.next(); if (log.isTraceEnabled()) { log.trace(" Saving message key '" + messageKey(localeKey, key)); } messages.put(messageKey(localeKey, key), props.getProperty(key)); } } sq~ uq~ppppq~fsq~#xpq~,sq~ uq~pppppppq~Kíq~=xsq~ uq~ppppq~$sq~ uq~q~GÉpppsq~ uq~q~-pppq~$q~$sq~Qsq~ uq~ sq~Csq~ uq~ppppq~Oísq~ uq~ppppsq~#q~kxsq~Csq~ uq~ppppq~Oísq~ uq~ppppsq~#q~Wxsq~Csq~ uq~ppppq~Oísq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq~Oísq~ uq~ppppsq~#q~öxsq~Csq~ uq~ppppq~Oísq~ uq~ppppsq~#q~5xsq~Csq~ uq~ppppq~Oísq~ uq~ppppsq~#sq~zsq~ uq~ppppq~8sq~ uq~pppppq~‡pt Propertiesq~=xsq~ uq~q~Ppppq~$sq~ uq~sq~)sq~ uq~ppppsq~/sq~ uq~sq~)sq~ uq~ppppq~P!sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bdd@qpxq~5sq~)sq~ uq~ppppq~P!sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bddkqpxq~;sq~)sq~ uq~ppppq~P!sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bdd–qpxq~sq~)sq~ uq~ppppq~P!sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bdd Áqpxq~EÊsq~)sq~ uq~ppppq~P!sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bdd qpxq~sq~)sq~ uq~ppppq~P!sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bdd Bqpxsq~zsq~ uq~ppppq~8sq~ uq~pppppq~‡pt Comparatorq~=xsq~ uq~sq~Csq~ uq~ppppq~sq~ uq~ppppsq~#q~P`xsq~Csq~ uq~ppppq~Eµsq~ uq~ppppsq~#q~P`xppq~$sq~ uq~q~PVpppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~8sq~ uq~ppppppptComparator.javaq~$xsq~ uq~ppppsq~ uq~q~P`pppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxsq~)sq~ uq~ppppq~P!sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bdd mqpxq~Ežsq~)sq~ uq~ppppq~P!sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bdd ˜qpxq~jsq~)sq~ uq~ppppq~P!sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~BddÃqpxsq~zsq~ uq~ppppq~8sq~ uq~pppppq~‡ptMissingResourceExceptionq~=xsq~ uq~sq~Csq~ uq~ppppq~bsq~ uq~ppppsq~#q~P¦xpppq~$sq~ uq~q~Pœpppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~8sq~ uq~ppppppptMissingResourceException.javaq~$xsq~ uq~ppppsq~ uq~q~P¦pppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxsq~)sq~ uq~ppppq~P!sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bddîqpxq~¼sq~)sq~ uq~ppppq~P!sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bddqpxq~0sq~)sq~ uq~ppppq~P!sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~BddDqpxsq~zsq~ uq~ppppq~8sq~ uq~pppppq~‡ptDateq~=xsq~ uq~sq~Csq~ uq~ppppsq~Qsq~ uq~ q~Pîsq~Csq~ uq~ppppq~Pñsq~ uq~ppppsq~#q~Œxsq~Csq~ uq~ppppq~Pñsq~ uq~ppppsq~#sq~zsq~ uq~ppppsq~sq~ uq~q~Qsq~zsq~ uq~ppppq~Qsq~ uq~pppppq~‡ptFormq~=xsq~ uq~sq~Csq~ uq~ppppq~Eµsq~ uq~ppppsq~#q~Qxpppq~$sq~ uq~sq~)sq~ uq~ppppsq~/sq~ uq~sq~)sq~ uq~ppppq~Qsq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~BddÃqpxq~Qq~Qsq~)sq~ uq~ppppq~Qsq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bddqpxsq~zsq~ uq~ppppq~Qsq~ uq~pppppq~‡ptValidatorActionq~=xsq~ uq~ sq~Csq~ uq~ppppq~Eµsq~ uq~ppppsq~#q~Q0xsq~Csq~ uq~ppppsq~Qsq~ uq~ sq~Csq~ uq~ppppq~QAsq~ uq~ppppsq~#q~5xsq~Csq~ uq~ppppq~QAsq~ uq~ppppsq~#q~Öxsq~Csq~ uq~ppppq~QAsq~ uq~ppppsq~#q~Œxsq~Csq~ uq~ppppq~QAsq~ uq~ppppsq~#q~ßxsq~Csq~ uq~ppppq~QAsq~ uq~ppppsq~#sq~zsq~ uq~sq~(sq~ uq~ppppq~Qbsq~ uq~pppppt// ----------------------------------------------------- Manifest Constants /** * The "property name" marker to use for global errors, as opposed to * those related to a specific property. */ // ----------------------------------------------------- Manifest Constants /** * The "property name" marker to use for global errors, as opposed to * those related to a specific property. */ // ----------------------------------------------------- Manifest Constants /** * The "property name" marker to use for global errors, as opposed to * those related to a specific property. */ // ----------------------------------------------------- Manifest Constants /** * The "property name" marker to use for global errors, as opposed to * those related to a specific property. */ // ----------------------------------------------------- Manifest Constants /** * The "property name" marker to use for global errors, as opposed to * those related to a specific property. */ pt GLOBAL_ERRORq~=xsq~ uq~pppppsq~#q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxpppt( "org.apache.struts.action.GLOBAL_ERROR"q~$q~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~Qusq~ uq~ppppppptpropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppq~Qusq~ uq~pppppppterrorq~=xsq~ uq~pppppq~$q~yq~$q~ßpq~$xppq~Qbsq~ uq~pppppt(// --------------------------------------------------------- Public Methods /** * Add an error message to the set of errors for the specified property. * * @param property Property name (or ActionErrors.GLOBAL_ERROR) * @param error The error message to be added */ ptaddq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t/ super.add(property, error); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~Q•sq~ uq~ppppppptpropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq~Q•sq~ uq~pppppppterrorq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ßpq~§xppq~Qbsq~ uq~pppppt(// --------------------------------------------------------- Public Methods /** * Add an error message to the set of errors for the specified property. * * @param property Property name (or ActionErrors.GLOBAL_ERROR) * @param error The error message to be added */ ptaddq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t/ super.add(property, error); sq~ uq~ppppq~¥q~¥xsq~esq~ uq~ppppq~Qbsq~ uq~ppppptŽ// --------------------------------------------------------- Public Methods /** * Create an empty ActionErrors object. */ pt ActionErrorsq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t super(); sq~ uq~ppppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppq~QÅsq~ uq~ppppppptmessagesq~rxsq~ uq~pppppq~–q~—q~–q~Qbpq~˜xpppq~Qbsq~ uq~ppppptÊ/** * Create an ActionErrors object initialized with the given * messages. * * @param messages The messages to be initially added to this object. * @since Struts 1.1 */ pq~Q»q~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t super(messages); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~QÜsq~ uq~ppppppptpropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq~QÜsq~ uq~pppppppterrorq~rxsq~ uq~pppppq~–q~—q~–q~ßpq~˜xppq~Qbsq~ uq~ppppptÌ/** * Add an error message to the set of errors for the specified property. * * @param property Property name (or ActionErrors.GLOBAL_ERROR) * @param error The error message to be added */ ptaddq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t& super.add(property, error); sq~ uq~ppppq~–q~–xsq~esq~ uq~ppppq~Qbsq~ uq~pppppt”// --------------------------------------------------------- Public Methods /** * Create an empty ActionErrors object. */ pq~Q»q~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t super(); sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq~R sq~ uq~ppppppptmessagesq~{xsq~ uq~pppppq~~q~q~~q~Qbpq~€xpppq~Qbsq~ uq~pppppt /** * Create an ActionErrors object initialized with the given * messages. * * @param messages The messages to be initially added to this object. * This parameter can be null. * @since Struts 1.1 */ pq~Q»q~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t super(messages); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~R"sq~ uq~ppppppptpropertyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq~R"sq~ uq~pppppppterrorq~{xsq~ uq~pppppq~~q~q~~q~ßpq~€xppq~Qbsq~ uq~ppppptÛ/** * Add an error message to the set of errors for the specified property. * * @param property Property name (or ActionErrors.GLOBAL_ERROR) * @param error The error message to be added */ ptaddq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t/ super.add(property, error); sq~ uq~ppppq~~q~~xsq~esq~ uq~ppppq~Qbsq~ uq~pppppt”// --------------------------------------------------------- Public Methods /** * Create an empty ActionErrors object. */ pq~Q»q~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft super(); sq~ uq~ppppq~fq~fxsq~esq~ uq~sq~bsq~ uq~ppppq~RQsq~ uq~ppppppptmessagesq~cxsq~ uq~pppppq~fq~gq~fq~Qbpq~hxpppq~Qbsq~ uq~pppppt /** * Create an ActionErrors object initialized with the given * messages. * * @param messages The messages to be initially added to this object. * This parameter can be null. * @since Struts 1.1 */ pq~Q»q~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft super(messages); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq~Rhsq~ uq~ppppppptpropertyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq~Rhsq~ uq~pppppppterrorq~cxsq~ uq~pppppq~fq~gq~fq~ßpq~hxppq~Qbsq~ uq~ppppptÛ/** * Add an error message to the set of errors for the specified property. * * @param property Property name (or ActionErrors.GLOBAL_ERROR) * @param error The error message to be added */ ptaddq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft/ super.add(property, error); sq~ uq~ppppq~fq~fxppq~Bsq~ uq~pppppppq~Q»q~=xsq~ uq~sq~Csq~ uq~ppppq~0Òsq~ uq~ppppsq~#q~Qbxsq~Csq~ uq~ppppq~ísq~ uq~ppppsq~#q~Qbxsq~Csq~ uq~ppppsq~Qsq~ uq~sq~Csq~ uq~ppppq~R›sq~ uq~ppppsq~#q~öxsq~Csq~ uq~ppppq~R›sq~ uq~ppppsq~#q~5xsq~Csq~ uq~ppppq~R›sq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq~R›sq~ uq~ppppsq~#q~–xsq~Csq~ uq~ppppq~R›sq~ uq~ppppsq~#q~#xsq~Csq~ uq~ppppq~R›sq~ uq~ppppsq~#q~ßxq~R˜sq~Csq~ uq~ppppq~R›sq~ uq~ppppsq~#q~-xsq~Csq~ uq~ppppq~R›sq~ uq~ppppsq~#q~%9xsq~Csq~ uq~ppppq~R›sq~ uq~ppppsq~#q~*?xppppq~$Isq~ uq~pppppt/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/ErrorsTag.java,v 1.21 2003/05/15 23:43:42 dgraham Exp $ * $Revision: 1.21 $ * $Date: 2003/05/15 23:43:42 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Custom tag that renders error messages if an appropriate request attribute * has been created. The tag looks for a request attribute with a reserved * key, and assumes that it is either a String, a String array, containing * message keys to be looked up in the module's MessageResources, or * an object of type org.apache.struts.action.ActionErrors. *

      * The following optional message keys will be utilized if corresponding * messages exist for them in the application resources: *

        *
      • errors.header - If present, the corresponding message will be * rendered prior to the individual list of error messages.
      • *
      • errors.footer - If present, the corresponding message will be * rendered following the individual list of error messages.
      • *
      • errors.prefix - If present, the corresponding message will be * rendered before each individual error message.
      • *
      • errors.suffix - If present, the corresponding message will be * rendered after each individual error message.
      • *
      * * @author Craig R. McClanahan * @version $Revision: 1.21 $ $Date: 2003/05/15 23:43:42 $ */ ptErrorsTag.javaq~fxsq~ uq~ppppsq~ uq~sq~zsq~ 9uq~9sq~(sq~ uq~ppppq~RÜsq~ uq~pppppté// ----------------------------------------------------------- Properties /** * The servlet context attribute key for our resources. */ // ----------------------------------------------------------- Properties /** * The servlet context attribute key for our resources. */ // ----------------------------------------------------------- Properties /** * The servlet context attribute key for our resources. */ // ----------------------------------------------------------- Properties /** * The servlet context attribute key for our resources. */ // ----------------------------------------------------------- Properties /** * The servlet context attribute key for our resources. */ ptbundleq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~RÜsq~ uq~pppppppt getBundleq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t% return (this.bundle); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~Rüsq~ uq~ppppppptbundleq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~RÜsq~ uq~pppppppt setBundleq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t% this.bundle = bundle; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~RÜsq~ uq~pppppt/** * The default locale on our server. */ /** * The default locale on our server. */ /** * The default locale on our server. */ /** * The default locale on our server. * @deprecated Use Locale.getDefault() directly. */ /** * The default locale on our server. * @deprecated Use Locale.getDefault() directly. */ pt defaultLocaleq~=xsq~ uq~pppppq~$q~yq~$q~5pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~;xpppt Locale.getDefault()q~$q~$q~$xsq~(sq~ uq~ppppq~RÜsq~ uq~pppppt;/** * The session attribute key for our locale. */ /** * The session attribute key for our locale. */ /** * The session attribute key for our locale. */ /** * The session attribute key for our locale. */ /** * The session attribute key for our locale. */ ptlocaleq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt Globals.LOCALE_KEYq~$q~$q~$xsq~isq~ uq~ppppq~RÜsq~ uq~pppppppt getLocaleq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t% return (this.locale); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~S?sq~ uq~ppppppptlocaleq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~RÜsq~ uq~pppppppt setLocaleq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t% this.locale = locale; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~RÜsq~ uq~pppppt1/** * The message resources for this package. */ /** * The message resources for this package. */ /** * The message resources for this package. */ /** * The message resources for this package. */ /** * The message resources for this package. */ ptmessagesq~=xsq~ uq~pppppq~$q~yq~$q~-pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~;xppptS MessageResources.getMessageResources(Constants.Package + ".LocalStrings")q~$q~$q~$xsq~(sq~ uq~ppppq~RÜsq~ uq~pppppt/** * The request attribute key for our error messages (if any). */ /** * The request attribute key for our error messages (if any). */ /** * The request attribute key for our error messages (if any). */ /** * The request attribute key for our error messages (if any). */ /** * The request attribute key for our error messages (if any). */ ptnameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt Globals.ERROR_KEYq~$q~$q~$xsq~isq~ uq~ppppq~RÜsq~ uq~ppppppptgetNameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t return (this.name); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~S‚sq~ uq~ppppppptnameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~RÜsq~ uq~ppppppptsetNameq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t this.name = name; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~RÜsq~ uq~ppppptÆ/** * The name of the property for which error messages should be returned, * or null to return all errors. */ /** * The name of the property for which error messages should be returned, * or null to return all errors. */ /** * The name of the property for which error messages should be returned, * or null to return all errors. */ /** * The name of the property for which error messages should be returned, * or null to return all errors. */ /** * The name of the property for which error messages should be returned, * or null to return all errors. */ ptpropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~RÜsq~ uq~pppppppt getPropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t' return (this.property); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~S¶sq~ uq~ppppppptpropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~RÜsq~ uq~pppppppt setPropertyq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~sq~isq~ uq~sq~bsq~ uq~ppppq~SÊsq~ uq~pppppppt newPropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppsq~zsq~ uq~sq~isq~ uq~ppppq~SÕsq~ uq~pppppt /** * Overriding method of the heart of the matter. Gets the relative property * and leaves the rest up to the original tag implementation. Sweet. * @return int JSP continuation directive. * This is in the hands of the super class. */ pt doStartTagq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~sq~isq~ uq~ppppq~RÜsq~ uq~ppppptÞ// ------------------------------------------------------- Public Methods /** * Render the specified error messages if there are any. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~q~SØsq~isq~ uq~ppppq~SÕsq~ uq~pppppt /** * Overriding method of the heart of the matter. Gets the relative property * and leaves the rest up to the original tag implementation. Sweet. * @return int JSP continuation directive. * This is in the hands of the super class. */ pt doStartTagq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~q~Sãpppsq~ uq~ppppq~¥q~»xq~¥tp /* singleton tag implementations will need the original property to be set before running */ super.setProperty(originalProperty); /* let the NestedHelper set the properties it can */ isNesting = true; NestedPropertyHelper.setNestedProperties(this); isNesting = false; /* do the tag */ return super.doStartTag(); sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~ppppq~SÕsq~ uq~pppppt /** * Overriding method of the heart of the matter. Gets the relative property * and leaves the rest up to the original tag implementation. Sweet. * @return int JSP continuation directive. * This is in the hands of the super class. */ pt doStartTagq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~q~Sãpppsq~ uq~ppppq~–q~¢xq~–tp /* singleton tag implementations will need the original property to be set before running */ super.setProperty(originalProperty); /* let the NestedHelper set the properties it can */ isNesting = true; NestedPropertyHelper.setNestedProperties(this); isNesting = false; /* do the tag */ return super.doStartTag(); sq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq~SÕsq~ uq~pppppt /** * Overriding method of the heart of the matter. Gets the relative property * and leaves the rest up to the original tag implementation. Sweet. * @return int JSP continuation directive. * This is in the hands of the super class. */ pt doStartTagq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~q~Sãpppsq~ uq~ppppq~~q~Šxq~~to // get the original properties originalName = getName(); originalProperty = getProperty(); // request HttpServletRequest request = (HttpServletRequest)pageContext.getRequest(); // set the properties NestedPropertyHelper.setNestedProperties(request, this); // let the super do it's thing return super.doStartTag(); sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~SÕsq~ uq~pppppt /** * Overriding method of the heart of the matter. Gets the relative property * and leaves the rest up to the original tag implementation. Sweet. * @return int JSP continuation directive. * This is in the hands of the super class. */ pt doStartTagq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~q~Sãpppsq~ uq~ppppq~fq~rxq~fto // get the original properties originalName = getName(); originalProperty = getProperty(); // request HttpServletRequest request = (HttpServletRequest)pageContext.getRequest(); // set the properties NestedPropertyHelper.setNestedProperties(request, this); // let the super do it's thing return super.doStartTag(); sq~ uq~q~pppq~fq~fxq~$q~Äxq~$tò // Were any error messages specified? ActionErrors errors = null; try { errors = RequestUtils.getActionErrors(pageContext, name); } catch (JspException e) { RequestUtils.saveException(pageContext, e); throw e; } if ((errors == null) || errors.empty()) { return (EVAL_BODY_INCLUDE); } // Check for presence of header and footer message keys boolean headerPresent = RequestUtils.present(pageContext, bundle, locale, "errors.header"); boolean footerPresent = RequestUtils.present(pageContext, bundle, locale, "errors.footer"); // Render the error messages appropriately StringBuffer results = new StringBuffer(); boolean headerDone = false; String message = null; Iterator reports = null; if (property == null) { reports = errors.get(); } else { reports = errors.get(property); } while (reports.hasNext()) { ActionError report = (ActionError) reports.next(); if (!headerDone) { if (headerPresent) { message = RequestUtils.message(pageContext, bundle, locale, "errors.header"); results.append(message); results.append("\r\n"); } headerDone = true; } message = RequestUtils.message(pageContext, bundle, locale, report.getKey(), report.getValues()); if (message != null) { results.append(message); results.append("\r\n"); } } if (headerDone && footerPresent) { message = RequestUtils.message(pageContext, bundle, locale, "errors.footer"); results.append(message); results.append("\r\n"); } // Print the results to our output writer ResponseUtils.write(pageContext, results.toString()); // Continue processing this page return (EVAL_BODY_INCLUDE); sq~ uq~q~pppq~$q~$xpppsq~ uq~ppppq~$q~Äxq~$tp /* singleton tag implementations will need the original property to be set before running */ super.setProperty(originalProperty); /* let the NestedHelper set the properties it can */ isNesting = true; NestedPropertyHelper.setNestedProperties(this); isNesting = false; /* do the tag */ return super.doStartTag(); sq~ uq~q~pppq~$q~$xq~SÊsq~(sq~ uq~ppppq~SÕsq~ uq~ppppptW/* hold original property */ /* hold original property */ /* hold original property */ ptoriginalPropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~%Zxpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq~SÕsq~ uq~pppppppt isNestingq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~%Zxpppt falseq~$q~$q~$xq~Sðsq~isq~ uq~sq~bsq~ uq~ppppq~TSsq~ uq~pppppppt newPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~SÕsq~ uq~pppppt//** this is overridden so that properties being set by the JSP page aren't * written over by those needed by the extension. If the tag instance is * re-used by the JSP, the tag can set the property back to that set by the * JSP page. * * @param newProperty new property value */ pt setPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~q~S¶sq~isq~ uq~sq~bsq~ uq~ppppq~Tfsq~ uq~pppppppt newPropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppsq~•sq~ uq~sq~isq~ uq~ppppq~Tqsq~ uq~pppppt”/** * The getters and setters required to set a tags property property. * @return String value of the tags' property property */ pt getPropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~sq~isq~ uq~ppppsq~zsq~ ;uq~Aq~Tsq~isq~ uq~sq~bsq~ uq~ppppq~T‡sq~ uq~pppppppt newPropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~T„sq~ uq~ppppptÜ/** Setter method for the property property * Also, only setting the original property value to those values not * set by the nested logic. * @param property new value for the property property */ pt setPropertyq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~q~Tfpppsq~ uq~ppppq~$q~Äxq~$tf property = newProperty; if (!isNesting) { originalProperty = newProperty; } sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~T„sq~ uq~ppppptf/** Getter method for the name property * @return String value of the name property */ ptgetNameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~sq~isq~ uq~ppppsq~•sq~ uq~q~Tªsq~isq~ uq~sq~bsq~ uq~ppppq~T°sq~ uq~ppppppptnewNamedq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~T­sq~ uq~pppppt/** * The setter for the name property * @param newProperty new String value to set the name property to */ ptsetNameq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~sq~isq~ uq~sq~bsq~ uq~ppppq~TÅsq~ uq~ppppppptnameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~T„sq~ uq~ppppptl/** Setter method for the name property * @param property new value for the name property */ ptsetNameq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~q~T°pppsq~ uq~ppppq~$q~Äxq~$t this.name = name; sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~TÝsq~ uq~ppppppptnamesq~#xsq~ uq~pppppsq~#sq~vq~Téq~{psq~#xpppq~T„sq~ uq~ppppptl/** Setter method for the name property * @param property new value for the name property */ ptsetNameq~Tæxsq~ uq~pppppq~Téq~Têq~Téppq~Tëxsq~ uq~q~T°pppsq~ uq~ppppq~Tésq~Ãxq~Tét this.name = name; sq~ uq~ppppq~Téq~Téxsq~isq~ uq~sq~bsq~ uq~ppppq~Túsq~ uq~ppppppptnameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~T„sq~ uq~ppppptl/** Setter method for the name property * @param property new value for the name property */ ptsetNameq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~q~T°pppsq~ uq~ppppq~¥q~»xq~¥t this.name = name; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~Usq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~T„sq~ uq~ppppptl/** Setter method for the name property * @param property new value for the name property */ ptsetNameq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~q~T°pppsq~ uq~ppppq~–q~¢xq~–t this.name = name; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~U*sq~ uq~ppppppptnewNamedq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~T„sq~ uq~ppppppptsetNameq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~q~T°pppsq~ uq~ppppq~~q~Šxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~U@sq~ uq~ppppppptnewNamedq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~T„sq~ uq~ppppppptsetNameq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~q~T°pppsq~ uq~ppppq~fq~rxq~fpsq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq~UVsq~ uq~ppppppptnameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppsq~zsq~ :uq~Asq~isq~ uq~ppppq~Uasq~ uq~ppppptn/** Getter method for the property property * @return String value of the property property */ pt getPropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~q~Ttpppsq~ uq~ppppq~$q~Äxq~$t return ""; sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~Utsq~ uq~ppppppptpropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~Uasq~ uq~ppppptt/** Setter method for the property property * @param property new value for the property property */ pt setPropertyq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~q~Tfpppsq~ uq~ppppq~$q~Äxq~$psq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~Uasq~ uq~ppppptf/** Getter method for the name property * @return String value of the name property */ ptgetNameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~q~Tªpppsq~ uq~ppppq~$q~Äxq~$t return this.name; sq~ uq~ppppq~$q~$xq~UVsq~isq~ uq~ppppq~Uasq~ uq~pppppts/** Getter method for the nestedProperty property * @return String value of the nestedProperty property */ ptgetNestedPropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~sq~isq~ uq~ppppsq~•sq~ uq~ q~U¦sq~isq~ uq~ppppq~U©sq~ uq~ppppptÐ/** * This is required by all parent tags so that the child tags can get a hold * of their nested property. * * @return String of the qaulified nested property to this implementing tag */ ptgetNestedPropertyq~Tæxsq~ uq~pppppq~Téq~Têq~Téq~{pq~Tëxsq~ uq~ppppsq~ uq~ppppq~Téq~Töxq~Tépsq~ uq~ppppq~Téq~Téxsq~isq~ uq~ppppq~U©sq~ uq~ppppptÐ/** * This is required by all parent tags so that the child tags can get a hold * of their nested property. * * @return String of the qaulified nested property to this implementing tag */ ptgetNestedPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥psq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~U©sq~ uq~ppppptÐ/** * This is required by all parent tags so that the child tags can get a hold * of their nested property. * * @return String of the qaulified nested property to this implementing tag */ ptgetNestedPropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–psq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~U©sq~ uq~ppppptÐ/** * This is required by all parent tags so that the child tags can get a hold * of their nested property. * * @return String of the qaulified nested property to this implementing tag */ ptgetNestedPropertyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~U©sq~ uq~ppppptÐ/** * This is required by all parent tags so that the child tags can get a hold * of their nested property. * * @return String of the qaulified nested property to this implementing tag */ ptgetNestedPropertyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fpsq~ uq~ppppq~fq~fxpppsq~sq~ uq~q~T­q~U©sq~sq~ $uq~,sq~zsq~ uq~sq~isq~ uq~ppppq~Uýsq~ uq~pppppt /** * Overriding method of the heart of the matter. Gets the relative property * and leaves the rest up to the original tag implementation. Sweet. * @return int JSP continuation directive. * This is in the hands of the super class. */ pt doStartTagq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~sq~isq~ uq~ppppsq~zsq~ 7uq~9sq~(sq~ uq~ppppq~Vsq~ uq~pppppt²// ----------------------------------------------------- Instance Variables /** * The message resources for this package. */ // ----------------------------------------------------- Instance Variables /** * The message resources for this package. */ // ----------------------------------------------------- Instance Variables /** * The message resources for this package. */ // ----------------------------------------------------- Instance Variables /** * The message resources for this package. */ // ----------------------------------------------------- Instance Variables /** * The message resources for this package. */ ptmessagesq~=xsq~ uq~pppppq~$q~yq~$q~-pq~$xsq~ uq~sq~(sq~ uq~ppppq~%sq~ uq~pppppt1/** * The message resources for this package. */ /** * The message resources for this package. */ /** * The message resources for this package. */ /** * The message resources for this package. */ /** * The message resources for this package. */ ptmessagesq~=xsq~ uq~pppppq~$q~yq~$q~-pq~$xsq~ uq~ppppsq~ uq~ sq~(sq~ uq~ppppsq~zsq~ Quq~Tsq~(sq~ uq~ppppq~V,sq~ uq~pppppt„// ----------------------------------------------------- Instance Variables /** * The number of character columns for this field, or negative * for no limit. */ // ----------------------------------------------------- Instance Variables /** * The number of character columns for this field, or negative * for no limit. */ // ----------------------------------------------------- Instance Variables /** * The number of character columns for this field, or negative * for no limit. */ // ----------------------------------------------------- Instance Variables /** * The number of character columns for this field, or negative * for no limit. */ // ----------------------------------------------------- Instance Variables /** * The number of character columns for this field, or negative * for no limit. */ ptcolsq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq~V,sq~ uq~pppppt½/** * The maximum number of characters allowed, or negative for no limit. */ /** * The maximum number of characters allowed, or negative for no limit. */ /** * The maximum number of characters allowed, or negative for no limit. */ /** * The maximum number of characters allowed, or negative for no limit. */ /** * The maximum number of characters allowed, or negative for no limit. */ pt maxlengthq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xq~V)sq~(sq~ uq~ppppq~V,sq~ uq~pppppt®/** * The name of the field (and associated property) being processed. */ /** * The name of the field (and associated property) being processed. */ /** * The name of the field (and associated property) being processed. */ /** * The name of the field (and associated property) being processed. */ /** * The name of the field (and associated property) being processed. */ ptpropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq~V,sq~ uq~ppppptš/** * The number of rows for this field, or negative for no limit. */ /** * The number of rows for this field, or negative for no limit. */ /** * The number of rows for this field, or negative for no limit. */ /** * The number of rows for this field, or negative for no limit. */ /** * The number of rows for this field, or negative for no limit. */ ptrowsq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq~V,sq~ uq~ppppptÁ/** * The value for this field, or null to retrieve the * corresponding property from our associated bean. */ /** * The value for this field, or null to retrieve the * corresponding property from our associated bean. */ /** * The value for this field, or null to retrieve the * corresponding property from our associated bean. */ /** * The value for this field, or null to retrieve the * corresponding property from our associated bean. */ /** * The value for this field, or null to retrieve the * corresponding property from our associated bean. */ ptvalueq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~V,sq~ uq~pppppt// ------------------------------------------------------------- Properties /** * Return the number of columns for this field. */ ptgetColsq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t return (this.cols); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~V…sq~ uq~ppppppptcolsq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~V,sq~ uq~ppppptu/** * Set the number of columns for this field. * * @param cols The new number of columns */ ptsetColsq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t this.cols = cols; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~V,sq~ uq~pppppt8/** * Return the maximum length allowed. */ pt getMaxlengthq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t% return (this.maxlength); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~V­sq~ uq~pppppppt maxlengthq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~V,sq~ uq~ppppptm/** * Set the maximum length allowed. * * @param maxlength The new maximum length */ pt setMaxlengthq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t( this.maxlength = maxlength; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~V,sq~ uq~pppppt//** * Return the property name. */ pt getPropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t$ return (this.property); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~VÕsq~ uq~ppppppptpropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~V,sq~ uq~ppppptb/** * Set the property name. * * @param property The new property name */ pt setPropertyq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~sq~isq~ uq~sq~bsq~ uq~ppppq~Vêsq~ uq~pppppppt newPropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppsq~zsq~ uq~sq~isq~ uq~ppppq~Võsq~ uq~pppppt /** * Overriding method of the heart of the matter. Gets the relative property * and leaves the rest up to the original tag implementation. Sweet. * @return int JSP continuation directive. * This is in the hands of the super class. */ pt doStartTagq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~sq~isq~ uq~ppppsq~zsq~ uq~sq~esq~ uq~ppppq~Wsq~ uq~ppppptˆ// ----------------------------------------------------------- Constructors /** * Construct a new instance of this tag. */ pt HiddenTagq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t- super(); this.type = "hidden"; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~Wsq~ uq~pppppt/// ------------------------------------------------------------- Properties /** * Should the value of this field also be rendered to the response? */ // ------------------------------------------------------------- Properties /** * Should the value of this field also be rendered to the response? */ // ------------------------------------------------------------- Properties /** * Should the value of this field also be rendered to the response? */ // ------------------------------------------------------------- Properties /** * Should the value of this field also be rendered to the response? */ // ------------------------------------------------------------- Properties /** * Should the value of this field also be rendered to the response? */ ptwriteq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt falseq~$q~$q~$xsq~isq~ uq~ppppq~Wsq~ uq~ppppppptgetWriteq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t$ return (this.write); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~W6sq~ uq~ppppppptwriteq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xpppq~Wsq~ uq~ppppppptsetWriteq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t# this.write = write; sq~ uq~ppppq~$q~$xq~Wsq~isq~ uq~ppppq~Wsq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~sq~isq~ uq~ppppsq~zsq~ ,uq~,sq~(sq~ uq~ppppq~W[sq~ uq~ppppptq// ----------------------------------------------------- Instance Variables /** * Comma-delimited list of content types that a server processing this form * will handle correctly. This property is defined only for the * file tag, but is implemented here because it affects the * rendered HTML of the corresponding <input> tag. */ // ----------------------------------------------------- Instance Variables /** * Comma-delimited list of content types that a server processing this form * will handle correctly. This property is defined only for the * file tag, but is implemented here because it affects the * rendered HTML of the corresponding <input> tag. */ // ----------------------------------------------------- Instance Variables /** * Comma-delimited list of content types that a server processing this form * will handle correctly. This property is defined only for the * file tag, but is implemented here because it affects the * rendered HTML of the corresponding <input> tag. */ // ----------------------------------------------------- Instance Variables /** * Comma-delimited list of content types that a server processing this form * will handle correctly. This property is defined only for the * file tag, but is implemented here because it affects the * rendered HTML of the corresponding <input> tag. */ // ----------------------------------------------------- Instance Variables /** * Comma-delimited list of content types that a server processing this form * will handle correctly. This property is defined only for the * file tag, but is implemented here because it affects the * rendered HTML of the corresponding <input> tag. */ ptacceptq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~W[sq~ uq~pppppppt getAcceptq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t% return (this.accept); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~W{sq~ uq~ppppppptacceptq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~W[sq~ uq~pppppppt setAcceptq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t% this.accept = accept; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~W[sq~ uq~pppppt†/** * The name of the bean containing our underlying property. */ /** * The name of the bean containing our underlying property. */ /** * The name of the bean containing our underlying property. */ /** * The name of the bean containing our underlying property. */ /** * The name of the bean containing our underlying property. */ ptnameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt Constants.BEAN_KEYq~$q~$q~$xsq~isq~ uq~ppppq~W[sq~ uq~ppppppptgetNameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t# return (this.name); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~W¯sq~ uq~ppppppptnameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~W[sq~ uq~ppppppptsetNameq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t! this.name = name; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~W[sq~ uq~pppppt½/** * The "redisplay contents" flag (used only on password). */ /** * The "redisplay contents" flag (used only on password). */ /** * The "redisplay contents" flag (used only on password). */ /** * The "redisplay contents" flag (used only on password). */ /** * The "redisplay contents" flag (used only on password). */ pt redisplayq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt trueq~$q~$q~$xsq~isq~ uq~ppppq~W[sq~ uq~pppppppt getRedisplayq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t( return (this.redisplay); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~Wãsq~ uq~pppppppt redisplayq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xpppq~W[sq~ uq~pppppppt setRedisplayq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t+ this.redisplay = redisplay; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~W[sq~ uq~pppppt/** * The type of input field represented by this tag (text, password, or * hidden). */ /** * The type of input field represented by this tag (text, password, or * hidden). */ /** * The type of input field represented by this tag (text, password, or * hidden). */ /** * The type of input field represented by this tag (text, password, or * hidden). */ /** * The type of input field represented by this tag (text, password, or * hidden). */ pttypeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~W[sq~ uq~ppppptî// --------------------------------------------------------- Public Methods /** * Generate the required input tag. * Indexed property since 1.1 * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~sq~isq~ uq~ppppq~V,sq~ uq~ppppptó// --------------------------------------------------------- Public Methods /** * Process the start of this tag. The default implementation does nothing. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~ q~Xsq~isq~ uq~ppppq~W[sq~ uq~pppppt // --------------------------------------------------------- Public Methods /** * Generate the required input tag. *

      * Support for indexed property since Struts 1.1 * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~q~Xpppsq~ uq~ppppq~¥q~»xq~¥tÎ // Create an appropriate "input" element based on our parameters StringBuffer results = new StringBuffer(""); // Print this field to our output writer ResponseUtils.write(pageContext, results.toString()); // Continue processing this page return (EVAL_BODY_TAG); sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~ppppq~W[sq~ uq~pppppt // --------------------------------------------------------- Public Methods /** * Generate the required input tag. *

      * Support for indexed property since Struts 1.1 * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~q~Xpppsq~ uq~ppppq~–q~¢xq~–tÎ // Create an appropriate "input" element based on our parameters StringBuffer results = new StringBuffer(""); // Print this field to our output writer ResponseUtils.write(pageContext, results.toString()); // Continue processing this page return (EVAL_BODY_TAG); sq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq~W[sq~ uq~pppppt // --------------------------------------------------------- Public Methods /** * Generate the required input tag. *

      * Support for indexed property since Struts 1.1 * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~q~Xpppsq~ uq~ppppq~~q~Šxq~~t¥ // Create an appropriate "input" element based on our parameters StringBuffer results = new StringBuffer(" * Support for indexed property since Struts 1.1 * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~q~Xpppsq~ uq~ppppq~fq~rxq~ft¥ // Create an appropriate "input" element based on our parameters StringBuffer results = new StringBuffer(" 0) text = value; } return (SKIP_BODY); sq~ uq~q~pppq~$q~$xsq~isq~ uq~ppppq~Ysq~ uq~pppppt•/** * Process the end of this tag. * Indexed property since 1.1 * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t€ // Acquire the label value we will be generating String label = value; if ((label == null) && (text != null)) label = text; if ((label == null) || (label.trim().length() < 1)) label = "Click"; // Generate an HTML element StringBuffer results = new StringBuffer(); results.append(""); // Render this element to our writer ResponseUtils.write(pageContext, results.toString()); // Evaluate the remainder of this page return (EVAL_PAGE); sq~ uq~q~pppq~$q~$xq~Xýsq~isq~ uq~ppppq~Ysq~ uq~pppppt|// ------------------------------------------------------------- Properties /** * Return the property name. */ pt getPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t" return (property); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~Y½sq~ uq~ppppppptpropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~Ysq~ uq~ppppptZ/** * Set the property name. * * @param name The property name */ pt setPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t) this.property = property; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~Ysq~ uq~pppppt-/** * Return the label value. */ ptgetValueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t return (value); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~Yåsq~ uq~ppppppptvalueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~Ysq~ uq~ppppptO/** * Set the label value. * @param value The label value */ ptsetValueq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t# this.value = value; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~Ysq~ uq~ppppptÁ// --------------------------------------------------------- Public Methods /** * Process the start of this tag. * @exception JspException if a JSP exception has occurred */ pt doStartTagq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tx // Do nothing until doEndTag() is called this.text = null; return (EVAL_BODY_TAG); sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~ppppq~Ysq~ uq~pppppt/** * Save the associated label from the body content (if any). * @exception JspException if a JSP exception has occurred */ pt doAfterBodyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tÖ if (bodyContent != null) { String value = bodyContent.getString().trim(); if (value.length() > 0) text = value; } return (SKIP_BODY); sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~ppppq~Ysq~ uq~pppppt´/** * Process the end of this tag. *

      * Support for indexed property since Struts 1.1 * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tŠ // Acquire the label value we will be generating String label = value; if ((label == null) && (text != null)) label = text; if ((label == null) || (label.trim().length() < 1)) label = "Click"; // Generate an HTML element StringBuffer results = new StringBuffer(); results.append(""); // Render this element to our writer ResponseUtils.write(pageContext, results.toString()); // Evaluate the remainder of this page return (EVAL_PAGE); sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~ppppq~Ysq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~q~X°pppsq~ uq~ppppq~¥q~»xq~¥tk super.release(); property = null; text = null; value = null; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~Ysq~ uq~pppppt|// ------------------------------------------------------------- Properties /** * Return the property name. */ pt getPropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t" return (property); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~ZMsq~ uq~ppppppptpropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~Ysq~ uq~pppppt^/** * Set the property name. * * @param property The property name */ pt setPropertyq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t) this.property = property; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~Ysq~ uq~pppppt-/** * Return the label value. */ ptgetValueq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return (value); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~Zusq~ uq~ppppppptvalueq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~Ysq~ uq~ppppptO/** * Set the label value. * @param value The label value */ ptsetValueq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t# this.value = value; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~Ysq~ uq~ppppptÁ// --------------------------------------------------------- Public Methods /** * Process the start of this tag. * @exception JspException if a JSP exception has occurred */ pt doStartTagq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tx // Do nothing until doEndTag() is called this.text = null; return (EVAL_BODY_TAG); sq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq~Ysq~ uq~pppppt/** * Save the associated label from the body content (if any). * @exception JspException if a JSP exception has occurred */ pt doAfterBodyq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tÖ if (bodyContent != null) { String value = bodyContent.getString().trim(); if (value.length() > 0) text = value; } return (SKIP_BODY); sq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq~Ysq~ uq~pppppt´/** * Process the end of this tag. *

      * Support for indexed property since Struts 1.1 * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tŠ // Acquire the label value we will be generating String label = value; if ((label == null) && (text != null)) label = text; if ((label == null) || (label.trim().length() < 1)) label = "Click"; // Generate an HTML element StringBuffer results = new StringBuffer(); results.append(""); // Render this element to our writer ResponseUtils.write(pageContext, results.toString()); // Evaluate the remainder of this page return (EVAL_PAGE); sq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq~Ysq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~q~X°pppsq~ uq~ppppq~–q~¢xq~–tk super.release(); property = null; text = null; value = null; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~Ysq~ uq~pppppt|// ------------------------------------------------------------- Properties /** * Return the property name. */ pt getPropertyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t" return (property); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~ZÝsq~ uq~ppppppptpropertyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~Ysq~ uq~pppppt^/** * Set the property name. * * @param property The property name */ pt setPropertyq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t) this.property = property; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~Ysq~ uq~pppppt-/** * Return the label value. */ ptgetValueq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t return (value); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~[sq~ uq~ppppppptvalueq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~Ysq~ uq~ppppptO/** * Set the label value. * @param value The label value */ ptsetValueq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t# this.value = value; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~Ysq~ uq~ppppptÁ// --------------------------------------------------------- Public Methods /** * Process the start of this tag. * @exception JspException if a JSP exception has occurred */ pt doStartTagq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tx // Do nothing until doEndTag() is called this.text = null; return (EVAL_BODY_TAG); sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~Ysq~ uq~pppppt/** * Save the associated label from the body content (if any). * @exception JspException if a JSP exception has occurred */ pt doAfterBodyq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tÖ if (bodyContent != null) { String value = bodyContent.getString().trim(); if (value.length() > 0) text = value; } return (SKIP_BODY); sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~Ysq~ uq~pppppt´/** * Process the end of this tag. *

      * Support for indexed property since Struts 1.1 * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t˜ // Acquire the label value we will be generating String label = value; if ((label == null) && (text != null)) label = text; if ((label == null) || (label.trim().length() < 1)) label = "Click"; // Generate an HTML element StringBuffer results = new StringBuffer(); results.append(" 0) text = value; } return (SKIP_BODY); sq~ uq~q~pppq~fq~fxsq~isq~ uq~ppppq~Ysq~ uq~pppppt´/** * Process the end of this tag. *

      * Support for indexed property since Struts 1.1 * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft˜ // Acquire the label value we will be generating String label = value; if ((label == null) && (text != null)) label = text; if ((label == null) || (label.trim().length() < 1)) label = "Click"; // Generate an HTML element StringBuffer results = new StringBuffer(); results.append(""q~$q~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~\£sq~ uq~ppppppptsessionq~=xsq~ uq~pppppq~$q~yq~$sq~zsq~ uq~ppppq~sq~ uq~pppppq~‡pt HttpSessionq~=xsq~ uq~sq~Csq~ uq~ppppq~xsq~ uq~ppppsq~#q~\®xsq~Csq~ uq~ppppq~Ásq~ uq~ppppsq~#q~\®xsq~Csq~ uq~ppppq~ísq~ uq~ppppsq~#q~\®xsq~Csq~ uq~ppppsq~Qsq~ uq~sq~Csq~ uq~ppppq~\Ësq~ uq~ppppsq~#q~kxsq~Csq~ uq~ppppq~\Ësq~ uq~ppppsq~#q~Œxsq~Csq~ uq~ppppq~\Ësq~ uq~ppppsq~#q~’xq~\Èsq~Csq~ uq~ppppq~\Ësq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq~\Ësq~ uq~ppppsq~#sq~zsq~ uq~ppppq~sq~ uq~pppppq~‡pt JspWriterq~=xsq~ uq~ q~\æsq~Csq~ uq~ppppsq~Qsq~ uq~ sq~Csq~ uq~ppppq~\÷sq~ uq~ppppsq~#q~kxsq~Csq~ uq~ppppq~\÷sq~ uq~ppppsq~#q~Œxsq~Csq~ uq~ppppq~\÷sq~ uq~ppppsq~#q~xq~\ôsq~Csq~ uq~ppppq~\÷sq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq~\÷sq~ uq~ppppsq~#q~–xsq~Csq~ uq~ppppq~\÷sq~ uq~ppppsq~#q~#xsq~Csq~ uq~ppppq~\÷sq~ uq~ppppsq~#q~-xsq~Csq~ uq~ppppq~\÷sq~ uq~ppppsq~#q~%9xq~$Isq~ uq~pppppt b/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/BaseTag.java,v 1.16 2003/05/17 01:56:51 dgraham Exp $ * $Revision: 1.16 $ * $Date: 2003/05/17 01:56:51 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Renders an HTML element with an href * attribute pointing to the absolute location of the enclosing JSP page. This * tag is only valid when nested inside a head tag body. The presence * of this tag allows the browser to resolve relative URL's to images, * CSS stylesheets and other resources in a manner independent of the URL * used to call the ActionServlet. * * @author Luis Arias * @author David Graham * @version $Revision: 1.16 $ $Date: 2003/05/17 01:56:51 $ */ pt BaseTag.javaq~fxsq~ uq~ppppsq~ uq~sq~zsq~ uq~sq~(sq~ uq~ppppq~]2sq~ uq~pppppt%/** * The message resources for this package. */ /** * The message resources for this package. */ /** * The message resources for this package. */ /** * The message resources for this package. */ /** * The message resources for this package. */ ptmessagesq~=xsq~ uq~pppppq~$q~yq~$q~-pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~;xppptS MessageResources.getMessageResources(Constants.Package + ".LocalStrings")q~$q~$q~$xsq~(sq~ uq~ppppq~]2sq~ uq~pppppt@/** * The target window for this base reference. */ /** * The target window for this base reference. */ /** * The target window for this base reference. */ /** * The target window for this base reference. */ /** * The target window for this base reference. */ pttargetq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~]2sq~ uq~pppppppt getTargetq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t% return (this.target); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~]asq~ uq~pppppppttargetq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~]2sq~ uq~pppppppt setTargetq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t% this.target = target; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~]2sq~ uq~ppppptt/** * Process the start of this tag. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$ts HttpServletRequest request = (HttpServletRequest)pageContext.getRequest(); StringBuffer buf = new StringBuffer(""); JspWriter out = pageContext.getOut(); try { out.write(buf.toString()); } catch (IOException e) { pageContext.setAttribute(Action.EXCEPTION_KEY, e, PageContext.REQUEST_SCOPE); throw new JspException(messages.getMessage("common.io", e.toString())); } return EVAL_BODY_INCLUDE; sq~ uq~q~pppq~$q~$xsq~isq~ uq~ppppq~]2sq~ uq~pppppppt getTargetq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t% return (this.target); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~]—sq~ uq~pppppppttargetq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~]2sq~ uq~pppppppt setTargetq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t% this.target = target; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~]2sq~ uq~ppppptt/** * Process the start of this tag. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥ts HttpServletRequest request = (HttpServletRequest)pageContext.getRequest(); StringBuffer buf = new StringBuffer(""); JspWriter out = pageContext.getOut(); try { out.write(buf.toString()); } catch (IOException e) { pageContext.setAttribute(Action.EXCEPTION_KEY, e, PageContext.REQUEST_SCOPE); throw new JspException(messages.getMessage("common.io", e.toString())); } return EVAL_BODY_INCLUDE; sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~ppppq~]2sq~ uq~pppppppt getTargetq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t% return (this.target); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~]Ísq~ uq~pppppppttargetq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~]2sq~ uq~pppppppt setTargetq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t% this.target = target; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~]2sq~ uq~ppppptt/** * Process the start of this tag. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–ts HttpServletRequest request = (HttpServletRequest)pageContext.getRequest(); StringBuffer buf = new StringBuffer(""); JspWriter out = pageContext.getOut(); try { out.write(buf.toString()); } catch (IOException e) { pageContext.setAttribute(Action.EXCEPTION_KEY, e, PageContext.REQUEST_SCOPE); throw new JspException(messages.getMessage("common.io", e.toString())); } return EVAL_BODY_INCLUDE; sq~ uq~q~pppq~–q~–xsq~(sq~ uq~ppppq~]2sq~ uq~pppppt /** * The server name to use instead of request.getServerName(). */ /** * The server name to use instead of request.getServerName(). */ ptserverq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xpppt nullq~~q~~q~~xsq~isq~ uq~ppppq~]2sq~ uq~pppppppt getTargetq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t% return (this.target); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~^sq~ uq~pppppppttargetq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~]2sq~ uq~pppppppt setTargetq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t% this.target = target; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~]2sq~ uq~pppppt|/** * Process the start of this tag. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); String serverName = (this.server == null) ? request.getServerName() : this.server; String baseTag = renderBaseElement( request.getScheme(), serverName, request.getServerPort(), request.getRequestURI()); JspWriter out = pageContext.getOut(); try { out.write(baseTag); } catch (IOException e) { pageContext.setAttribute(Globals.EXCEPTION_KEY, e, PageContext.REQUEST_SCOPE); throw new JspException(messages.getMessage("common.io", e.toString())); } return EVAL_BODY_INCLUDE; sq~ uq~q~pppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~^8sq~ uq~ppppppptschemeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq~^8sq~ uq~pppppppt serverNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq~^8sq~ uq~ppppppptportq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~bsq~ uq~ppppq~^8sq~ uq~pppppppturiq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xq~]2sq~ uq~pppppt†/** * Render a fully formed HTML <base> element and return it as a String. * @param scheme The scheme used in the url (ie. http or https). * @param serverName * @param port * @param uri The portion of the url from the protocol name up to the query * string. * @return String An HTML <base> element. * @since Struts 1.1 */ ptrenderBaseElementq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~tN StringBuffer tag = new StringBuffer(""); } else { tag.append(">"); } return tag.toString(); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~]2sq~ uq~pppppt@/** * Returns the server. * @return String */ pt getServerq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t# return this.server; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~^xsq~ uq~ppppppptserverq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~]2sq~ uq~ppppptN/** * Sets the server. * @param server The server to set */ pt setServerq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t% this.server = server; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~]2sq~ uq~pppppppt getTargetq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft% return (this.target); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq~^Ÿsq~ uq~pppppppttargetq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~]2sq~ uq~pppppppt setTargetq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft% this.target = target; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~]2sq~ uq~pppppt|/** * Process the start of this tag. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); String serverName = (this.server == null) ? request.getServerName() : this.server; String baseTag = renderBaseElement( request.getScheme(), serverName, request.getServerPort(), request.getRequestURI()); JspWriter out = pageContext.getOut(); try { out.write(baseTag); } catch (IOException e) { pageContext.setAttribute(Globals.EXCEPTION_KEY, e, PageContext.REQUEST_SCOPE); throw new JspException(messages.getMessage("common.io", e.toString())); } return EVAL_BODY_INCLUDE; sq~ uq~q~pppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq~^Æsq~ uq~ppppppptschemeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq~^Æsq~ uq~pppppppt serverNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq~^Æsq~ uq~ppppppptportq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~bsq~ uq~ppppq~^Æsq~ uq~pppppppturiq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxq~]2sq~ uq~pppppt†/** * Render a fully formed HTML <base> element and return it as a String. * @param scheme The scheme used in the url (ie. http or https). * @param serverName * @param port * @param uri The portion of the url from the protocol name up to the query * string. * @return String An HTML <base> element. * @since Struts 1.1 */ ptrenderBaseElementq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ftN StringBuffer tag = new StringBuffer(""); } else { tag.append(">"); } return tag.toString(); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~]2sq~ uq~pppppt@/** * Returns the server. * @return String */ pt getServerq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft# return this.server; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq~_sq~ uq~ppppppptserverq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~]2sq~ uq~ppppptN/** * Sets the server. * @param server The server to set */ pt setServerq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft% this.server = server; sq~ uq~ppppq~fq~fxq~$Isq~ uq~ppppppptBaseTagq~=xsq~ uq~ppppq~$sq~ uq~sq~)sq~ uq~ppppq~[÷sq~ uq~ppppq~[ÿsq~ uq~ppppsq~ uq~sq~$úsq~ uq~ppppq~[÷sq~ uq~ppppq~=sq~ uq~ppppsq~ uq~ppppppxsq~)sq~ uq~ppppq~[÷sq~ uq~ppppq~[ÿsq~ uq~ q~_.sq~$úsq~ uq~ppppq~[÷sq~ uq~ppppq~=sq~ uq~ppppsq~ uq~ppppppxq~_7sq~)sq~ uq~ppppq~[÷sq~ uq~ppppq~[ÿsq~ uq~ppppsq~ uq~q~_>pppsq~BP^pxq~RÜpsq~4Ôuq~4׆ uq~4× ¡q~$xsq~$úsq~ uq~ppppq~[÷sq~ uq~ppppq~=sq~ uq~ppppsq~ uq~ppppppxq~_7sq~)sq~ uq~ppppq~[÷sq~ uq~ppppq~[ÿsq~ uq~ppppsq~ uq~q~_Tpppsq~BKûpxsq~zsq~ Çuq~Þsq~(sq~ uq~ppppq~_gsq~ uq~pppppt%// ----------------------------------------------------- Instance Variables /** * The action URL to which this form should be submitted, if any. */ // ----------------------------------------------------- Instance Variables /** * The action URL to which this form should be submitted, if any. */ // ----------------------------------------------------- Instance Variables /** * The action URL to which this form should be submitted, if any. */ // ----------------------------------------------------- Instance Variables /** * The action URL to which this form should be submitted, if any. */ // ----------------------------------------------------- Instance Variables /** * The action URL to which this form should be submitted, if any. */ ptactionq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq~_gsq~ uq~ppppptÛ/** * The application configuration for our sub-application. */ /** * The application configuration for our sub-application. */ /** * The application configuration for our module. */ pt appConfigq~=xsq~ uq~pppppq~$q~yq~$q~bpq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq~_gsq~ uq~ppppptc/** * The content encoding to be used on a POST submit. */ /** * The content encoding to be used on a POST submit. */ /** * The content encoding to be used on a POST submit. */ /** * The content encoding to be used on a POST submit. */ /** * The content encoding to be used on a POST submit. */ ptenctypeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq~_gsq~ uq~ppppptY/** * The name of the field to receive focus, if any. */ /** * The name of the field to receive focus, if any. */ /** * The name of the field to receive focus, if any. */ /** * The name of the field to receive focus, if any. */ /** * The name of the field to receive focus, if any. */ ptfocusq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq~_gsq~ uq~pppppt®/** * The ActionMapping defining where we will be submitting this form */ /** * The ActionMapping defining where we will be submitting this form */ /** * The ActionMapping defining where we will be submitting this form */ /** * The ActionMapping defining where we will be submitting this form */ /** * The ActionMapping defining where we will be submitting this form */ ptmappingq~=xsq~ uq~pppppq~$q~yq~$q~épq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq~_gsq~ uq~pppppt1/** * The message resources for this package. */ /** * The message resources for this package. */ /** * The message resources for this package. */ /** * The message resources for this package. */ /** * The message resources for this package. */ ptmessagesq~=xsq~ uq~pppppq~$q~yq~$q~-pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~;xppptS MessageResources.getMessageResources(Constants.Package + ".LocalStrings")q~$q~$q~$xsq~(sq~ uq~ppppq~_gsq~ uq~pppppth/** * The request method used when submitting this form. */ /** * The request method used when submitting this form. */ /** * The request method used when submitting this form. */ /** * The request method used when submitting this form. */ /** * The request method used when submitting this form. */ ptmethodq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq~_gsq~ uq~ppppptš/** * The attribute key under which our associated bean is stored. */ /** * The attribute key under which our associated bean is stored. */ /** * The attribute key under which our associated bean is stored. */ /** * The attribute key under which our associated bean is stored. */ /** * The attribute key under which our associated bean is stored. */ ptnameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq~_gsq~ uq~ppppptë/** * The onReset event script. */ /** * The onReset event script. */ /** * The onReset event script. */ /** * The onReset event script. */ /** * The onReset event script. */ ptonresetq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq~_gsq~ uq~ppppptð/** * The onSubmit event script. */ /** * The onSubmit event script. */ /** * The onSubmit event script. */ /** * The onSubmit event script. */ /** * The onSubmit event script. */ ptonsubmitq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq~_gsq~ uq~pppppt/** * The scope (request or session) under which our associated bean * is stored. */ /** * The scope (request or session) under which our associated bean * is stored. */ /** * The scope (request or session) under which our associated bean * is stored. */ /** * The scope (request or session) under which our associated bean * is stored. */ /** * The scope (request or session) under which our associated bean * is stored. */ ptscopeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq~_gsq~ uq~ppppptŽ/** * The ActionServlet instance we are associated with (so that we can * initialize the servlet property on any form bean that * we create). */ /** * The ActionServlet instance we are associated with (so that we can * initialize the servlet property on any form bean that * we create). */ /** * The ActionServlet instance we are associated with (so that we can * initialize the servlet property on any form bean that * we create). */ /** * The ActionServlet instance we are associated with (so that we can * initialize the servlet property on any form bean that * we create). */ /** * The ActionServlet instance we are associated with (so that we can * initialize the servlet property on any form bean that * we create). */ ptservletq~=xsq~ uq~pppppq~$q~yq~$q~ ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq~_gsq~ uq~ppppptO/** * The style attribute associated with this tag. */ /** * The style attribute associated with this tag. */ /** * The style attribute associated with this tag. */ /** * The style attribute associated with this tag. */ /** * The style attribute associated with this tag. */ ptstyleq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq~_gsq~ uq~pppppt;/** * The style class associated with this tag. */ /** * The style class associated with this tag. */ /** * The style class associated with this tag. */ /** * The style class associated with this tag. */ /** * The style class associated with this tag. */ pt styleClassq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq~_gsq~ uq~pppppt6/** * The identifier associated with this tag. */ /** * The identifier associated with this tag. */ /** * The identifier associated with this tag. */ /** * The identifier associated with this tag. */ /** * The identifier associated with this tag. */ ptstyleIdq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq~_gsq~ uq~ppppptÈ/** * The window target. */ /** * The window target. */ /** * The window target. */ /** * The window target. */ /** * The window target. */ pttargetq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq~_gsq~ uq~ppppptš/** * The Java class name of the bean to be created, if necessary. */ /** * The Java class name of the bean to be created, if necessary. */ /** * The Java class name of the bean to be created, if necessary. */ /** * The Java class name of the bean to be created, if necessary. */ /** * The Java class name of the bean to be created, if necessary. */ pttypeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq~_gsq~ uq~pppppt*/** * Temporary copy of the 'name' property, used to ensure we don't * modify tag attributes between uses of the same instance. */ /** * Temporary copy of the 'name' property, used to ensure we don't * modify tag attributes between uses of the same instance. */ pt savedNameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~%Zxpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq~_gsq~ uq~pppppt,/** * Temporary copy of the 'scope' property, used to ensure we don't * modify tag attributes between uses of the same instance. */ /** * Temporary copy of the 'scope' property, used to ensure we don't * modify tag attributes between uses of the same instance. */ pt savedScopeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~%Zxpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq~_gsq~ uq~pppppt*/** * Temporary copy of the 'type' property, used to ensure we don't * modify tag attributes between uses of the same instance. */ /** * Temporary copy of the 'type' property, used to ensure we don't * modify tag attributes between uses of the same instance. */ pt savedTypeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~%Zxpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~_gsq~ uq~pppppt // ------------------------------------------------------------- Properties /** * Return the action URL to which this form should be submitted. */ pt getActionq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t" return (this.action); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~`“sq~ uq~ppppppptactionq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~_gsq~ uq~pppppt/** * Set the action URL to which this form should be submitted. * * @param action The new action URL */ pt setActionq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t" this.action = action; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~_gsq~ uq~ppppptQ/** * Return the content encoding used when submitting this form. */ pt getEnctypeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t# return (this.enctype); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~`»sq~ uq~ppppppptenctypeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~_gsq~ uq~pppppt†/** * Set the content encoding used when submitting this form. * * @param enctype The new content encoding */ pt setEnctypeq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t$ this.enctype = enctype; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~_gsq~ uq~pppppt@/** * Return the focus field name for this form. */ ptgetFocusq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t! return (this.focus); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~`ãsq~ uq~ppppppptfocusq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~_gsq~ uq~pppppts/** * Set the focus field name for this form. * * @param focus The new focus field name */ ptsetFocusq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t this.focus = focus; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~_gsq~ uq~ppppptO/** * Return the request method used when submitting this form. */ pt getMethodq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t" return (this.method); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~a sq~ uq~ppppppptmethodq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~_gsq~ uq~pppppt/** * Set the request method used when submitting this form. * * @param method The new request method */ pt setMethodq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t" this.method = method; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~_gsq~ uq~pppppt@/** * Return the attribute key name of our bean. */ ptgetNameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t return (this.name); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~a3sq~ uq~ppppppptnameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~_gsq~ uq~ppppptt/** * Set the attribute key name of our bean. * * @param name The new attribute key name */ ptsetNameq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t this.name = name; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~_gsq~ uq~pppppt6/** * Return the onReset event script. */ pt getOnresetq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t# return (this.onreset); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~a[sq~ uq~ppppppptonResetq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~_gsq~ uq~ppppptg/** * Set the onReset event script. * * @param onReset The new event script */ pt setOnresetq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t$ this.onreset = onReset; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~_gsq~ uq~pppppt7/** * Return the onSubmit event script. */ pt getOnsubmitq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t$ return (this.onsubmit); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~aƒsq~ uq~ppppppptonSubmitq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~_gsq~ uq~pppppti/** * Set the onSubmit event script. * * @param onSubmit The new event script */ pt setOnsubmitq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t& this.onsubmit = onSubmit; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~_gsq~ uq~pppppt=/** * Return the attribute scope of our bean. */ ptgetScopeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t! return (this.scope); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~a«sq~ uq~ppppppptscopeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~_gsq~ uq~pppppto/** * Set the attribute scope of our bean. * * @param scope The new attribute scope */ ptsetScopeq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t this.scope = scope; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~_gsq~ uq~pppppt>/** * Return the style attribute for this tag. */ ptgetStyleq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t! return (this.style); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~aÓsq~ uq~ppppppptstyleq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~_gsq~ uq~ppppptp/** * Set the style attribute for this tag. * * @param style The new style attribute */ ptsetStyleq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t this.style = style; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~_gsq~ uq~pppppt:/** * Return the style class for this tag. */ pt getStyleClassq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t& return (this.styleClass); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~aûsq~ uq~pppppppt styleClassq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~_gsq~ uq~ppppptm/** * Set the style class for this tag. * * @param styleClass The new style class */ pt setStyleClassq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t* this.styleClass = styleClass; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~_gsq~ uq~pppppt?/** * Return the style identifier for this tag. */ pt getStyleIdq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t* return (this.styleId); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~b#sq~ uq~ppppppptstyleIdq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~_gsq~ uq~ppppptt/** * Set the style identifier for this tag. * * @param styleId The new style identifier */ pt setStyleIdq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t+ this.styleId = styleId; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~_gsq~ uq~pppppt//** * Return the window target. */ pt getTargetq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t" return (this.target); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~bKsq~ uq~pppppppttargetq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~_gsq~ uq~pppppt`/** * Set the window target. * * @param target The new window target */ pt setTargetq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t" this.target = target; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~_gsq~ uq~pppppt8/** * Return the Java class of our bean. */ ptgetTypeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t return (this.type); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~bssq~ uq~pppppppttypeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~_gsq~ uq~ppppptd/** * Set the Java class of our bean. * * @param type The new Java class */ ptsetTypeq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t this.type = type; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~_gsq~ uq~ppppptÍ// --------------------------------------------------------- Public Methods /** * Render the beginning of this form. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~sq~isq~ uq~ppppsq~zsq~ uq~sq~isq~ uq~ppppq~b›sq~ uq~pppppt”/** * The only added property to the class. For use in proper nesting. * @return String value of the property and the current index. */ ptgetNestedPropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~q~U¦pppsq~ uq~ppppq~$q~Äxq~$t return ""; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~b›sq~ uq~pppppppt getPropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~q~Ttpppsq~ uq~ppppq~$q~Äxq~$t return ""; sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~b½sq~ uq~pppppppt newPropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~b›sq~ uq~pppppppt setPropertyq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~q~Tfpppsq~ uq~ppppq~$q~Äxq~$psq~ uq~ppppq~$q~$xq~b˜sq~isq~ uq~ppppq~b›sq~ uq~ppppptx/** * This is only overriden to clean up the include reference * @return int JSP continuation directive. */ ptdoEndTagq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~sq~isq~ uq~ppppq~_gsq~ uq~ppppptz/** * Render the end of this form. * * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~q~bÓsq~isq~ uq~ppppq~b›sq~ uq~ppppptx/** * This is only overriden to clean up the include reference * @return int JSP continuation directive. */ ptdoEndTagq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~q~bÞpppsq~ uq~ppppq~¥q~»xq~¥t /* store original result */ int temp = super.doEndTag(); /* all done. clean up */ HttpSession session = (HttpSession)pageContext.getSession(); NestedPropertyHelper.setIncludeReference(session, null); /* return super result */ return temp; sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~ppppq~b›sq~ uq~ppppptx/** * This is only overriden to clean up the include reference * @return int JSP continuation directive. */ ptdoEndTagq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~q~bÞpppsq~ uq~ppppq~–q~¢xq~–t( /* store original result */ int temp = super.doEndTag(); /* all done. clean up */ HttpServletRequest request = (HttpServletRequest)pageContext.getRequest(); NestedPropertyHelper.setIncludeReference(request, null); /* return super result */ return temp; sq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq~b›sq~ uq~ppppptx/** * This is only overriden to clean up the include reference * @return int JSP continuation directive. */ ptdoEndTagq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~q~bÞpppsq~ uq~ppppq~~q~Šxq~~tû // super result int temp = super.doEndTag(); // all done. clean up HttpServletRequest request = (HttpServletRequest)pageContext.getRequest(); // reset the original nesting values if (originalNesting == null) { NestedPropertyHelper.deleteReference(request); } else { NestedPropertyHelper.setProperty(request, originalNesting); NestedPropertyHelper.setName(request, originalNestingName); } // return the super result return temp; sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~b›sq~ uq~ppppptx/** * This is only overriden to clean up the include reference * @return int JSP continuation directive. */ ptdoEndTagq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~q~bÞpppsq~ uq~ppppq~fq~rxq~ftû // super result int temp = super.doEndTag(); // all done. clean up HttpServletRequest request = (HttpServletRequest)pageContext.getRequest(); // reset the original nesting values if (originalNesting == null) { NestedPropertyHelper.deleteReference(request); } else { NestedPropertyHelper.setProperty(request, originalNesting); NestedPropertyHelper.setName(request, originalNestingName); } // return the super result return temp; sq~ uq~q~pppq~fq~fxq~$q~Äxq~$té // Remove the page scope attributes we created pageContext.removeAttribute(Constants.BEAN_KEY, PageContext.REQUEST_SCOPE); pageContext.removeAttribute(Constants.FORM_KEY, PageContext.REQUEST_SCOPE); // Render a tag representing the end of our current form StringBuffer results = new StringBuffer(""); // Render JavaScript to set the input focus if required if (focus != null) { String tempFocus = focus; StringBuffer refocus = new StringBuffer("["); if (tempFocus.indexOf("[") > 0) { StringTokenizer st = new StringTokenizer(tempFocus, "["); if (st.countTokens() == 2) { tempFocus = st.nextToken(); refocus.append(st.nextToken()); } } results.append("\r\n"); results.append("\r\n"); } // Print this value to our output writer JspWriter writer = pageContext.getOut(); try { writer.print(results.toString()); } catch (IOException e) { throw new JspException (messages.getMessage("common.io", e.toString())); } // Restore original property values used to invoke this tag. Needed // for tag reuse to work correctly. name = savedName; scope = savedScope; type = savedType; // Continue processing this page return (EVAL_PAGE); sq~ uq~q~pppq~$q~$xpppsq~ uq~ppppq~$q~Äxq~$t /* store original result */ int temp = super.doEndTag(); /* all done. clean up */ HttpSession session = (HttpSession)pageContext.getSession(); NestedPropertyHelper.setIncludeReference(session, null); /* return super result */ return temp; sq~ uq~q~pppq~$q~$xsq~isq~ uq~ppppq~b›sq~ uq~pppppt”/** * The only added property to the class. For use in proper nesting. * @return String value of the property and the current index. */ ptgetNestedPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~q~U¦pppsq~ uq~ppppq~¥q~»xq~¥t return ""; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~b›sq~ uq~pppppppt getPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~q~Ttpppsq~ uq~ppppq~¥q~»xq~¥t return ""; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~cRsq~ uq~pppppppt newPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~b›sq~ uq~pppppppt setPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~q~Tfpppsq~ uq~ppppq~¥q~»xq~¥psq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~b›sq~ uq~pppppt¯/** * Overriding to allow the chance to set the details of the system, so that * dynamic includes can be possible * @return int JSP continuation directive. */ pt doStartTagq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~q~b‹pppsq~ uq~ppppq~¥q~»xq~¥t[ /* store original result */ int temp = super.doStartTag(); /* set the details */ HttpSession session = (HttpSession)pageContext.getSession(); NestedReference nr = new NestedReference(getName(), getNestedProperty()); NestedPropertyHelper.setIncludeReference(session, nr); /* continue */ return temp; sq~ uq~q~pppq~¥q~¥xq~bësq~isq~ uq~ppppq~b›sq~ uq~pppppt”/** * The only added property to the class. For use in proper nesting. * @return String value of the property and the current index. */ ptgetNestedPropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~q~U¦pppsq~ uq~ppppq~–q~¢xq~–t return ""; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~b›sq~ uq~pppppppt getPropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~q~Ttpppsq~ uq~ppppq~–q~¢xq~–t return ""; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~c—sq~ uq~pppppppt newPropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~b›sq~ uq~pppppppt setPropertyq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~q~Tfpppsq~ uq~ppppq~–q~¢xq~–psq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~b›sq~ uq~pppppt¯/** * Overriding to allow the chance to set the details of the system, so that * dynamic includes can be possible * @return int JSP continuation directive. */ pt doStartTagq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~q~b‹pppsq~ uq~ppppq~–q~¢xq~–tm /* store original result */ int temp = super.doStartTag(); /* set the details */ HttpServletRequest request = (HttpServletRequest)pageContext.getRequest(); NestedReference nr = new NestedReference(getBeanName(), getNestedProperty()); NestedPropertyHelper.setIncludeReference(request, nr); /* continue */ return temp; sq~ uq~q~pppq~–q~–xq~bûsq~isq~ uq~ppppq~b›sq~ uq~ppppptf/** * Get the string value of the "property" property. * @return the property property */ pt getPropertyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~q~Ttpppsq~ uq~ppppq~~q~Šxq~~t return ""; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~cÍsq~ uq~pppppppt newPropertyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~b›sq~ uq~pppppth/** * Setter for the "property" property * @param newProperty new value for the property */ pt setPropertyq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~q~Tfpppsq~ uq~ppppq~~q~Šxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~b›sq~ uq~pppppt¯/** * Overriding to allow the chance to set the details of the system, so that * dynamic includes can be possible * @return int JSP continuation directive. */ pt doStartTagq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~q~b‹pppsq~ uq~ppppq~~q~Šxq~~t // store original result int temp = super.doStartTag(); HttpServletRequest request = (HttpServletRequest)pageContext.getRequest(); // original nesting details originalNesting = NestedPropertyHelper.getCurrentProperty(request); originalNestingName = NestedPropertyHelper.getCurrentName(request, this); // some new details NestedPropertyHelper.setProperty(request, null); NestedPropertyHelper.setName(request, super.getBeanName()); // continue return temp; sq~ uq~q~pppq~~q~~xq~c sq~isq~ uq~ppppq~b›sq~ uq~ppppptC/** * Release the tag's resources and reset the values. */ ptreleaseq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~sq~isq~ uq~ppppq~_gsq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~q~côsq~isq~ uq~ppppq~b›sq~ uq~ppppptC/** * Release the tag's resources and reset the values. */ ptreleaseq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~q~cÿpppsq~ uq~ppppq~fq~rxq~ft¥ // let the super release super.release(); // reset the original value place holders originalNesting = null; originalNestingName = null; sq~ uq~ppppq~fq~fxppq~$q~Äxq~$tW super.release(); action = null; appConfig = null; enctype = null; focus = null; mapping = null; method = "POST"; name = null; onreset = null; onsubmit = null; scope = "session"; servlet = null; style = null; styleClass = null; styleId = null; target = null; type = null; sq~ uq~ppppq~$q~$xpppsq~ uq~ppppq~~q~Šxq~~t¥ // let the super release super.release(); // reset the original value place holders originalNesting = null; originalNestingName = null; sq~ uq~ppppq~~q~~xsq~(sq~ uq~ppppq~b›sq~ uq~ppppptB// original nesting environment // original nesting environment ptoriginalNestingq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~sq~Ãxpppt nullq~~q~~q~~xsq~(sq~ uq~ppppq~b›sq~ uq~ppppppptoriginalNestingNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~d1xpppt nullq~~q~~q~~xsq~isq~ uq~ppppq~b›sq~ uq~ppppptf/** * Get the string value of the "property" property. * @return the property property */ pt getPropertyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~q~Ttpppsq~ uq~ppppq~fq~rxq~ft return ""; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq~dPsq~ uq~pppppppt newPropertyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~b›sq~ uq~pppppth/** * Setter for the "property" property * @param newProperty new value for the property */ pt setPropertyq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~q~Tfpppsq~ uq~ppppq~fq~rxq~fpsq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~b›sq~ uq~pppppt¯/** * Overriding to allow the chance to set the details of the system, so that * dynamic includes can be possible * @return int JSP continuation directive. */ pt doStartTagq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~q~b‹pppsq~ uq~ppppq~fq~rxq~ft // store original result int temp = super.doStartTag(); HttpServletRequest request = (HttpServletRequest)pageContext.getRequest(); // original nesting details originalNesting = NestedPropertyHelper.getCurrentProperty(request); originalNestingName = NestedPropertyHelper.getCurrentName(request, this); // some new details NestedPropertyHelper.setProperty(request, null); NestedPropertyHelper.setName(request, super.getBeanName()); // continue return temp; sq~ uq~q~pppq~fq~fxq~cq~d ppq~Uúsq~ uq~pppppppt NestedFormTagq~=xsq~ uq~ppppq~$sq~ uq~sq~)sq~ uq~ppppsq~/sq~ Ruq~Tsq~)sq~ uq~ppppq~dsq~ uq~ppppsq~#sq~ uq~ppppsq~ uq~sq~$úsq~ uq~ppppq~dsq~ uq~ppppq~=sq~ uq~ppppsq~ uq~ppppppxsq~)sq~ uq~ppppq~dsq~ uq~ppppq~d‰sq~ uq~q~dŽpppsq~ uq~ppppsq~B ƒ°pxq~Vq~d„psq~4Ôuq~4×uq~4×¹q~$xsq~$úsq~ uq~ppppq~dsq~ uq~ppppq~Tæsq~ uq~ppppsq~ uq~ppppppxsq~)sq~ uq~ppppq~dsq~ uq~ppppq~Tæsq~ uq~q~d¤sq~$úsq~ uq~ppppq~dsq~ uq~ppppq~Tæsq~ uq~ppppsq~ uq~ppppppxq~d­sq~)sq~ uq~ppppq~dsq~ uq~ppppq~d‰sq~ uq~ppppsq~ uq~sq~$úsq~ uq~ppppq~dsq~ uq~ppppq~=sq~ uq~ppppsq~ uq~ppppppxsq~)sq~ uq~ppppq~dsq~ uq~ppppq~d‰sq~ uq~q~dÆpppsq~ uq~ppppsq~Bø˜pxq~Wq~d½psq~4Ôuq~4ט˜uq~4סq~$xq~d´ppsq~Bz[ýpxq~Võpsq~4Ôuq~4טÍuq~4×Üq~Téxsq~$úsq~ uq~ppppq~dsq~ uq~ppppq~Tæsq~ uq~ppppsq~ uq~ppppppxq~d­sq~)sq~ uq~ppppq~dsq~ uq~ppppq~d‰sq~ uq~ppppsq~ uq~sq~$úsq~ uq~ppppq~dsq~ uq~ppppq~=sq~ uq~ppppsq~ uq~ppppppxsq~)sq~ uq~ppppq~dsq~ uq~ppppsq~#sq~ uq~q~dòpppsq~ uq~ppppsq~Bꨯpxsq~zsq~ Åuq~Åsq~(sq~ uq~ppppq~esq~ uq~pppppt­// ----------------------------------------------------- Instance Variables /** * The body content of this tag (if any). */ // ----------------------------------------------------- Instance Variables /** * The body content of this tag (if any). */ // ----------------------------------------------------- Instance Variables /** * The body content of this tag (if any). */ // ----------------------------------------------------- Instance Variables /** * The body content of this tag (if any). */ // ----------------------------------------------------- Instance Variables /** * The body content of this tag (if any). */ pttextq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq~esq~ uq~pppppt // ------------------------------------------------------------- Properties /** * The anchor to be added to the end of the generated hyperlink. */ // ------------------------------------------------------------- Properties /** * The anchor to be added to the end of the generated hyperlink. */ // ------------------------------------------------------------- Properties /** * The anchor to be added to the end of the generated hyperlink. */ // ------------------------------------------------------------- Properties /** * The anchor to be added to the end of the generated hyperlink. */ // ------------------------------------------------------------- Properties /** * The anchor to be added to the end of the generated hyperlink. */ ptanchorq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~esq~ uq~pppppppt getAnchorq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t% return (this.anchor); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~e4sq~ uq~ppppppptanchorq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~esq~ uq~pppppppt setAnchorq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t% this.anchor = anchor; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~esq~ uq~pppppt¸/** * The logical forward name from which to retrieve the hyperlink URI. */ /** * The logical forward name from which to retrieve the hyperlink URI. */ /** * The logical forward name from which to retrieve the hyperlink URI. */ /** * The logical forward name from which to retrieve the hyperlink URI. */ /** * The logical forward name from which to retrieve the hyperlink URI. */ ptforwardq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~esq~ uq~pppppppt getForwardq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t& return (this.forward); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~ehsq~ uq~ppppppptforwardq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~esq~ uq~pppppppt setForwardq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t' this.forward = forward; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~esq~ uq~ppppptÈ/** * The hyperlink URI. */ /** * The hyperlink URI. */ /** * The hyperlink URI. */ /** * The hyperlink URI. */ /** * The hyperlink URI. */ pthrefq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~esq~ uq~ppppppptgetHrefq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t# return (this.href); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~eœsq~ uq~pppppppthrefq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~esq~ uq~ppppppptsetHrefq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t! this.href = href; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~esq~ uq~pppppt/** * The link name for named links. */ /** * The link name for named links. */ /** * The link name for named links. */ /** * The link name for named links. */ /** * The link name for named links. */ ptlinkNameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~esq~ uq~pppppppt getLinkNameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t' return (this.linkName); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~eÐsq~ uq~ppppppptlinkNameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~esq~ uq~pppppppt setLinkNameq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t) this.linkName = linkName; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~esq~ uq~pppppt1/** * The message resources for this package. */ /** * The message resources for this package. */ /** * The message resources for this package. */ /** * The message resources for this package. */ /** * The message resources for this package. */ ptmessagesq~=xsq~ uq~pppppq~$q~yq~$q~-pq~$xsq~ uq~q~Vpppsq~ uq~ppppsq~#q~;xppptP MessageResources.getMessageResources(Constants.Package + ".LocalStrings")q~$q~$q~$xsq~(sq~ uq~ppppq~esq~ uq~pppppt1/** * The JSP bean name for query parameters. */ /** * The JSP bean name for query parameters. */ /** * The JSP bean name for query parameters. */ /** * The JSP bean name for query parameters. */ /** * The JSP bean name for query parameters. */ ptnameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~esq~ uq~ppppppptgetNameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t# return (this.name); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~fsq~ uq~ppppppptnameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~esq~ uq~ppppppptsetNameq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t! this.name = name; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~esq~ uq~pppppt{/** * The application-relative page URL (beginning with a slash) to which * this hyperlink will be rendered. */ /** * The application-relative page URL (beginning with a slash) to which * this hyperlink will be rendered. */ /** * The module-relative page URL (beginning with a slash) to which * this hyperlink will be rendered. */ /** * The module-relative page URL (beginning with a slash) to which * this hyperlink will be rendered. */ /** * The module-relative page URL (beginning with a slash) to which * this hyperlink will be rendered. */ ptpageq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~esq~ uq~ppppppptgetPageq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t# return (this.page); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~fGsq~ uq~ppppppptpageq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~esq~ uq~ppppppptsetPageq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t! this.page = page; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~esq~ uq~ppppptŠ/** * The single-parameter request parameter name to generate. */ /** * The single-parameter request parameter name to generate. */ /** * The single-parameter request parameter name to generate. */ /** * The single-parameter request parameter name to generate. */ /** * The single-parameter request parameter name to generate. */ ptparamIdq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~esq~ uq~pppppppt getParamIdq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t& return (this.paramId); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~f{sq~ uq~ppppppptparamIdq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~esq~ uq~pppppppt setParamIdq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t' this.paramId = paramId; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~esq~ uq~pppppt/** * The single-parameter JSP bean name. */ /** * The single-parameter JSP bean name. */ /** * The single-parameter JSP bean name. */ /** * The single-parameter JSP bean name. */ /** * The single-parameter JSP bean name. */ pt paramNameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~esq~ uq~pppppppt getParamNameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t( return (this.paramName); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~f¯sq~ uq~pppppppt paramNameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~esq~ uq~pppppppt setParamNameq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t+ this.paramName = paramName; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~esq~ uq~pppppt1/** * The single-parameter JSP bean property. */ /** * The single-parameter JSP bean property. */ /** * The single-parameter JSP bean property. */ /** * The single-parameter JSP bean property. */ /** * The single-parameter JSP bean property. */ pt paramPropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~esq~ uq~ppppppptgetParamPropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t, return (this.paramProperty); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~fãsq~ uq~pppppppt paramPropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~esq~ uq~ppppppptsetParamPropertyq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~sq~isq~ uq~sq~bsq~ uq~ppppq~f÷sq~ uq~ppppppptnewParamPropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppsq~zsq~ uq~sq~isq~ uq~ppppq~gsq~ uq~pppppt /** * Overriding method of the heart of the matter. Gets the relative property * and leaves the rest up to the original tag implementation. Sweet. * @return int JSP continuation directive. * This is in the hands of the super class. */ pt doStartTagq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~sq~isq~ uq~ppppq~esq~ uq~ppppptô// --------------------------------------------------------- Public Methods /** * Render the beginning of the hyperlink. * Indexed property since 1.1 * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~sq~isq~ uq~ppppsq~zsq~ \uq~_sq~(sq~ uq~ppppq~g sq~ uq~pppppt // ------------------------------------------------------------- Properties /** * The frameborder attribute that should be rendered (1, 0). */ // ------------------------------------------------------------- Properties /** * The frameborder attribute that should be rendered (1, 0). */ // ------------------------------------------------------------- Properties /** * The frameborder attribute that should be rendered (1, 0). */ // ------------------------------------------------------------- Properties /** * The frameborder attribute that should be rendered (1, 0). */ // ------------------------------------------------------------- Properties /** * The frameborder attribute that should be rendered (1, 0). */ pt frameborderq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~g sq~ uq~ppppppptgetFrameborderq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t* return (this.frameborder); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~g@sq~ uq~pppppppt frameborderq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~g sq~ uq~ppppppptsetFrameborderq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t/ this.frameborder = frameborder; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~g sq~ uq~ppppptÑ/** * The name attribute that should be rendered for this frame. */ /** * The name attribute that should be rendered for this frame. */ /** * The name attribute that should be rendered for this frame. */ /** * The name attribute that should be rendered for this frame. */ /** * The name attribute that should be rendered for this frame. */ pt frameNameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~g sq~ uq~pppppppt getFrameNameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t( return (this.frameName); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~gtsq~ uq~pppppppt frameNameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~g sq~ uq~pppppppt setFrameNameq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t+ this.frameName = frameName; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~g sq~ uq~ppppptš/** * URI of a long description of this frame (complements title). */ /** * URI of a long description of this frame (complements title). */ /** * URI of a long description of this frame (complements title). */ /** * URI of a long description of this frame (complements title). */ /** * URI of a long description of this frame (complements title). */ ptlongdescq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~g sq~ uq~pppppppt getLongdescq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t' return (this.longdesc); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~g¨sq~ uq~ppppppptlongdescq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~g sq~ uq~pppppppt setLongdescq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t) this.longdesc = longdesc; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~g sq~ uq~ppppptr/** * The margin height in pixels, or zero for no setting. */ /** * The margin height in pixels, or zero for no setting. */ /** * The margin height in pixels, or zero for no setting. */ /** * The margin height in pixels, or zero for no setting. */ /** * The margin height in pixels, or zero for no setting. */ pt marginheightq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt 0q~$q~$q~$xsq~isq~ uq~ppppq~g sq~ uq~ppppppptgetMarginheightq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t+ return (this.marginheight); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~gÜsq~ uq~pppppppt marginheightq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xpppq~g sq~ uq~ppppppptsetMarginheightq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t1 this.marginheight = marginheight; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~g sq~ uq~ppppptm/** * The margin width in pixels, or zero for no setting. */ /** * The margin width in pixels, or zero for no setting. */ /** * The margin width in pixels, or zero for no setting. */ /** * The margin width in pixels, or zero for no setting. */ /** * The margin width in pixels, or zero for no setting. */ pt marginwidthq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt 0q~$q~$q~$xsq~isq~ uq~ppppq~g sq~ uq~ppppppptgetMarginwidthq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t* return (this.marginwidth); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~hsq~ uq~pppppppt marginwidthq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xpppq~g sq~ uq~ppppppptsetMarginwidthq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t/ this.marginwidth = marginwidth; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~g sq~ uq~ppppptY/** * Should users be disallowed to resize the frame? */ /** * Should users be disallowed to resize the frame? */ /** * Should users be disallowed to resize the frame? */ /** * Should users be disallowed to resize the frame? */ /** * Should users be disallowed to resize the frame? */ ptnoresizeq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt falseq~$q~$q~$xsq~isq~ uq~ppppq~g sq~ uq~pppppppt getNoresizeq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t' return (this.noresize); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~hDsq~ uq~ppppppptnoresizeq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xpppq~g sq~ uq~pppppppt setNoresizeq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t) this.noresize = noresize; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~g sq~ uq~pppppt•/** * What type of scrolling should be supported (yes, no, auto)? */ /** * What type of scrolling should be supported (yes, no, auto)? */ /** * What type of scrolling should be supported (yes, no, auto)? */ /** * What type of scrolling should be supported (yes, no, auto)? */ /** * What type of scrolling should be supported (yes, no, auto)? */ pt scrollingq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~g sq~ uq~pppppppt getScrollingq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t( return (this.scrolling); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~hxsq~ uq~pppppppt scrollingq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~g sq~ uq~pppppppt setScrollingq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t+ this.scrolling = scrolling; sq~ uq~ppppq~$q~$xq~gsq~isq~ uq~ppppq~g sq~ uq~pppppty/** * Ignore the end of this tag. * * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~sq~isq~ uq~ppppq~esq~ uq~pppppt~/** * Render the end of the hyperlink. * * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~q~hsq~isq~ uq~ppppq~g sq~ uq~pppppty/** * Ignore the end of this tag. * * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~q~hšpppsq~ uq~ppppq~¥q~»xq~¥t' return (EVAL_PAGE); sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~ppppq~g sq~ uq~pppppty/** * Ignore the end of this tag. * * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~q~hšpppsq~ uq~ppppq~–q~¢xq~–t' return (EVAL_PAGE); sq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq~g sq~ uq~pppppty/** * Ignore the end of this tag. * * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~q~hšpppsq~ uq~ppppq~~q~Šxq~~t' return (EVAL_PAGE); sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~g sq~ uq~pppppty/** * Ignore the end of this tag. * * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~q~hšpppsq~ uq~ppppq~fq~rxq~ft' return (EVAL_PAGE); sq~ uq~q~pppq~fq~fxsq~isq~ uq~ppppsq~zsq~ uq~sq~isq~ uq~ppppq~hêsq~ uq~ppppptÐ// --------------------------------------------------------- Public Methods /** * Render the appropriately encoded URI. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~q~gpppsq~ uq~ppppq~$q~Äxq~$t // Generate the hyperlink URL Map params = RequestUtils.computeParameters (pageContext, paramId, paramName, paramProperty, paramScope, name, property, scope, transaction); String url = null; try { url = RequestUtils.computeURL(pageContext, forward, href, page, params, anchor, false); } catch (MalformedURLException e) { RequestUtils.saveException(pageContext, e); throw new JspException (messages.getMessage("rewrite.url", e.toString())); } // Print this element to our output writer ResponseUtils.write(pageContext, url); // Skip the body of this tag return (SKIP_BODY); sq~ uq~q~pppq~$q~$xq~hçsq~isq~ uq~ppppq~hêsq~ uq~ppppptÐ// --------------------------------------------------------- Public Methods /** * Render the appropriately encoded URI. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~q~gpppsq~ uq~ppppq~¥q~»xq~¥t // Generate the hyperlink URL Map params = RequestUtils.computeParameters (pageContext, paramId, paramName, paramProperty, paramScope, name, property, scope, transaction); String url = null; try { url = RequestUtils.computeURL(pageContext, forward, href, page, params, anchor, false); } catch (MalformedURLException e) { RequestUtils.saveException(pageContext, e); throw new JspException (messages.getMessage("rewrite.url", e.toString())); } // Print this element to our output writer ResponseUtils.write(pageContext, url); // Skip the body of this tag return (SKIP_BODY); sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~ppppq~hêsq~ uq~pppppty/** * Ignore the end of this tag. * * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~q~hšpppsq~ uq~ppppq~¥q~»xq~¥t' return (EVAL_PAGE); sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~ppppq~hêsq~ uq~ppppptÐ// --------------------------------------------------------- Public Methods /** * Render the appropriately encoded URI. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~q~gpppsq~ uq~ppppq~–q~¢xq~–t // Generate the hyperlink URL Map params = RequestUtils.computeParameters (pageContext, paramId, paramName, paramProperty, paramScope, name, property, scope, transaction); String url = null; try { url = RequestUtils.computeURL(pageContext, forward, href, page, params, anchor, false); } catch (MalformedURLException e) { RequestUtils.saveException(pageContext, e); throw new JspException (messages.getMessage("rewrite.url", e.toString())); } // Print this element to our output writer ResponseUtils.write(pageContext, url); // Skip the body of this tag return (SKIP_BODY); sq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq~hêsq~ uq~pppppty/** * Ignore the end of this tag. * * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~q~hšpppsq~ uq~ppppq~–q~¢xq~–t' return (EVAL_PAGE); sq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq~hêsq~ uq~ppppptÐ// --------------------------------------------------------- Public Methods /** * Render the appropriately encoded URI. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~q~gpppsq~ uq~ppppq~~q~Šxq~~t¡ // Generate the hyperlink URL Map params = RequestUtils.computeParameters (pageContext, paramId, paramName, paramProperty, paramScope, name, property, scope, transaction); String url = null; try { // Note that we're encoding the & character to & in XHTML mode only, // otherwise the & is written as is to work in javascripts. url = RequestUtils.computeURL( pageContext, forward, href, page, null, params, anchor, !this.isXhtml()); } catch (MalformedURLException e) { RequestUtils.saveException(pageContext, e); throw new JspException (messages.getMessage("rewrite.url", e.toString())); } ResponseUtils.write(pageContext, url); return (SKIP_BODY); sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~hêsq~ uq~pppppty/** * Ignore the end of this tag. * * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~q~hšpppsq~ uq~ppppq~~q~Šxq~~t' return (EVAL_PAGE); sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~hêsq~ uq~ppppptÐ// --------------------------------------------------------- Public Methods /** * Render the appropriately encoded URI. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~q~gpppsq~ uq~ppppq~fq~rxq~ft¡ // Generate the hyperlink URL Map params = RequestUtils.computeParameters (pageContext, paramId, paramName, paramProperty, paramScope, name, property, scope, transaction); String url = null; try { // Note that we're encoding the & character to & in XHTML mode only, // otherwise the & is written as is to work in javascripts. url = RequestUtils.computeURL( pageContext, forward, href, page, null, params, anchor, !this.isXhtml()); } catch (MalformedURLException e) { RequestUtils.saveException(pageContext, e); throw new JspException (messages.getMessage("rewrite.url", e.toString())); } ResponseUtils.write(pageContext, url); return (SKIP_BODY); sq~ uq~q~pppq~fq~fxsq~isq~ uq~ppppq~hêsq~ uq~pppppty/** * Ignore the end of this tag. * * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~q~hšpppsq~ uq~ppppq~fq~rxq~ft' return (EVAL_PAGE); sq~ uq~q~pppq~fq~fxppppq~$Isq~ uq~pppppppt RewriteTagq~=xsq~ uq~ppppq~$sq~ uq~sq~)sq~ uq~ppppq~[÷sq~ uq~ppppq~[ÿsq~ uq~ppppsq~ uq~sq~$úsq~ uq~ppppq~[÷sq~ uq~ppppq~=sq~ uq~ppppsq~ uq~ppppppxsq~)sq~ uq~ppppq~[÷sq~ uq~ppppq~[ÿsq~ uq~sq~$úsq~ uq~ppppq~[÷sq~ uq~ppppq~=sq~ uq~ppppsq~ uq~ppppppxq~i–sq~)sq~ uq~ppppq~[÷sq~ uq~ppppq~[ÿsq~ uq~ppppsq~ uq~q~ipppsq~BPÃëpxq~g psq~4Ôuq~4×ë·uq~4×ô»q~$xq~ippsq~ uq~sq~$úsq~ uq~ppppq~[÷sq~ uq~ppppq~=sq~ uq~ppppsq~ uq~ppppppxsq~)sq~ uq~ppppq~[÷sq~ uq~ppppq~[ÿsq~ uq~sq~$úsq~ uq~ppppq~[÷sq~ uq~ppppq~=sq~ uq~ppppsq~ uq~ppppppxq~i¾sq~)sq~ uq~ppppq~[÷sq~ uq~ppppq~[ÿsq~ uq~sq~$úsq~ uq~ppppq~[÷sq~ uq~ppppq~=sq~ uq~ppppsq~ uq~ppppppxq~iÎq~\psq~4Ôuq~4×uq~4׸q~$xsq~$úsq~ uq~ppppq~[÷sq~ uq~ppppq~=sq~ uq~ppppsq~ uq~ppppppxq~iÎsq~)sq~ uq~ppppq~[÷sq~ uq~ppppq~[ÿsq~ uq~ppppsq~ uq~q~iápppsq~B]cüpxq~Xcpsq~4Ôuq~4בuq~4׸q~$xppsq~ uq~q~iÅpppsq~Bdܯpxq~V,psq~4Ôuq~4×uq~4׸Àq~$xsq~$úsq~ uq~ppppq~[÷sq~ uq~ppppq~=sq~ uq~ppppsq~ uq~ppppppxq~i¾q~[ôpsq~4Ôuq~4×Muq~4×rÀq~$xsq~$úsq~ uq~ppppq~[÷sq~ uq~ppppq~=sq~ uq~ppppsq~ uq~ppppppxq~i¾sq~)sq~ uq~ppppq~[÷sq~ uq~ppppq~[ÿsq~ uq~ppppsq~ uq~q~j pppsq~BRÐ&pxsq~zsq~ ,uq~,sq~(sq~ uq~ppppq~jsq~ uq~pppppt²// ----------------------------------------------------- Instance Variables /** * The message resources for this package. */ // ----------------------------------------------------- Instance Variables /** * The message resources for this package. */ // ----------------------------------------------------- Instance Variables /** * The message resources for this package. */ // ----------------------------------------------------- Instance Variables /** * The message resources for this package. */ // ----------------------------------------------------- Instance Variables /** * The message resources for this package. */ ptmessagesq~=xsq~ uq~pppppq~$q~yq~$q~-pq~$xsq~ uq~q~Vpppsq~ uq~ppppsq~#q~;xppptP MessageResources.getMessageResources(Constants.Package + ".LocalStrings")q~$q~$q~$xsq~(sq~ uq~ppppq~jsq~ uq~pppppt@/** * The property name of the generated button. */ /** * The property name of the generated button. */ /** * The property name of the generated button. */ /** * The property name of the generated button. */ /** * The property name of the generated button. */ ptpropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt Constants.CANCEL_PROPERTYq~$q~$q~$xsq~(sq~ uq~ppppq~jsq~ uq~pppppt,/** * The body content of this tag (if any). */ /** * The body content of this tag (if any). */ /** * The body content of this tag (if any). */ /** * The body content of this tag (if any). */ /** * The body content of this tag (if any). */ pttextq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq~jsq~ uq~pppppt/** * The value of the button label. */ /** * The value of the button label. */ /** * The value of the button label. */ /** * The value of the button label. */ /** * The value of the button label. */ ptvalueq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~jsq~ uq~pppppt|// ------------------------------------------------------------- Properties /** * Return the property name. */ pt getPropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t" return (property); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~jhsq~ uq~ppppppptpropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~jsq~ uq~ppppptZ/** * Set the property name. * * @param name The property name */ pt setPropertyq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t) this.property = property; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~jsq~ uq~pppppt-/** * Return the label value. */ ptgetValueq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t return (value); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~jsq~ uq~ppppppptvalueq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~jsq~ uq~ppppptO/** * Set the label value. * @param value The label value */ ptsetValueq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t# this.value = value; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~jsq~ uq~ppppptÁ// --------------------------------------------------------- Public Methods /** * Process the start of this tag. * @exception JspException if a JSP exception has occurred */ pt doStartTagq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tx // Do nothing until doEndTag() is called this.text = null; return (EVAL_BODY_TAG); sq~ uq~q~pppq~$q~$xsq~isq~ uq~ppppq~jsq~ uq~ppppptŽ/** * Save the associated label from the body content. * * @exception JspException if a JSP exception has occurred */ pt doAfterBodyq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tÖ if (bodyContent != null) { String value = bodyContent.getString().trim(); if (value.length() > 0) text = value; } return (SKIP_BODY); sq~ uq~q~pppq~$q~$xsq~isq~ uq~ppppq~jsq~ uq~ppppptr/** * Process the end of this tag. * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tä // Acquire the label value we will be generating String label = value; if ((label == null) && (text != null)) label = text; if ((label == null) || (label.trim().length() < 1)) label = "Cancel"; // Generate an HTML element StringBuffer results = new StringBuffer(); results.append(""); // Render this element to our writer ResponseUtils.write(pageContext, results.toString()); // Evaluate the remainder of this page return (EVAL_PAGE); sq~ uq~q~pppq~$q~$xsq~isq~ uq~ppppq~jsq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~q~X°pppsq~ uq~ppppq~$q~Äxq~$tk super.release(); property = Constants.CANCEL_PROPERTY; text = null; value = null; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~jsq~ uq~pppppt|// ------------------------------------------------------------- Properties /** * Return the property name. */ pt getPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t" return (property); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~jøsq~ uq~ppppppptpropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~jsq~ uq~ppppptZ/** * Set the property name. * * @param name The property name */ pt setPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t) this.property = property; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~jsq~ uq~pppppt-/** * Return the label value. */ ptgetValueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t return (value); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~k sq~ uq~ppppppptvalueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~jsq~ uq~ppppptO/** * Set the label value. * @param value The label value */ ptsetValueq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t# this.value = value; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~jsq~ uq~ppppptÁ// --------------------------------------------------------- Public Methods /** * Process the start of this tag. * @exception JspException if a JSP exception has occurred */ pt doStartTagq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tx // Do nothing until doEndTag() is called this.text = null; return (EVAL_BODY_TAG); sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~ppppq~jsq~ uq~ppppptŽ/** * Save the associated label from the body content. * * @exception JspException if a JSP exception has occurred */ pt doAfterBodyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tÖ if (bodyContent != null) { String value = bodyContent.getString().trim(); if (value.length() > 0) text = value; } return (SKIP_BODY); sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~ppppq~jsq~ uq~ppppptr/** * Process the end of this tag. * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tä // Acquire the label value we will be generating String label = value; if ((label == null) && (text != null)) label = text; if ((label == null) || (label.trim().length() < 1)) label = "Cancel"; // Generate an HTML element StringBuffer results = new StringBuffer(); results.append(""); // Render this element to our writer ResponseUtils.write(pageContext, results.toString()); // Evaluate the remainder of this page return (EVAL_PAGE); sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~ppppq~jsq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~q~X°pppsq~ uq~ppppq~¥q~»xq~¥tk super.release(); property = Constants.CANCEL_PROPERTY; text = null; value = null; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~jsq~ uq~pppppt|// ------------------------------------------------------------- Properties /** * Return the property name. */ pt getPropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t" return (property); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~kˆsq~ uq~ppppppptpropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~jsq~ uq~pppppt^/** * Set the property name. * * @param property The property name */ pt setPropertyq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t) this.property = property; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~jsq~ uq~pppppt-/** * Return the label value. */ ptgetValueq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return (value); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~k°sq~ uq~ppppppptvalueq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~jsq~ uq~ppppptO/** * Set the label value. * @param value The label value */ ptsetValueq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t# this.value = value; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~jsq~ uq~ppppptÁ// --------------------------------------------------------- Public Methods /** * Process the start of this tag. * @exception JspException if a JSP exception has occurred */ pt doStartTagq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tx // Do nothing until doEndTag() is called this.text = null; return (EVAL_BODY_TAG); sq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq~jsq~ uq~ppppptŽ/** * Save the associated label from the body content. * * @exception JspException if a JSP exception has occurred */ pt doAfterBodyq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tÖ if (bodyContent != null) { String value = bodyContent.getString().trim(); if (value.length() > 0) text = value; } return (SKIP_BODY); sq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq~jsq~ uq~ppppptr/** * Process the end of this tag. * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tä // Acquire the label value we will be generating String label = value; if ((label == null) && (text != null)) label = text; if ((label == null) || (label.trim().length() < 1)) label = "Cancel"; // Generate an HTML element StringBuffer results = new StringBuffer(); results.append(""); // Render this element to our writer ResponseUtils.write(pageContext, results.toString()); // Evaluate the remainder of this page return (EVAL_PAGE); sq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq~jsq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~q~X°pppsq~ uq~ppppq~–q~¢xq~–tk super.release(); property = Constants.CANCEL_PROPERTY; text = null; value = null; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~jsq~ uq~pppppt|// ------------------------------------------------------------- Properties /** * Return the property name. */ pt getPropertyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t" return (property); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~lsq~ uq~ppppppptpropertyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~jsq~ uq~pppppt^/** * Set the property name. * * @param property The property name */ pt setPropertyq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t) this.property = property; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~jsq~ uq~pppppt-/** * Return the label value. */ ptgetValueq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t return (value); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq~l@sq~ uq~ppppppptvalueq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~jsq~ uq~ppppptO/** * Set the label value. * @param value The label value */ ptsetValueq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t# this.value = value; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~jsq~ uq~ppppptÁ// --------------------------------------------------------- Public Methods /** * Process the start of this tag. * @exception JspException if a JSP exception has occurred */ pt doStartTagq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tx // Do nothing until doEndTag() is called this.text = null; return (EVAL_BODY_TAG); sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~jsq~ uq~ppppptŽ/** * Save the associated label from the body content. * * @exception JspException if a JSP exception has occurred */ pt doAfterBodyq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tÖ if (bodyContent != null) { String value = bodyContent.getString().trim(); if (value.length() > 0) text = value; } return (SKIP_BODY); sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~jsq~ uq~ppppptr/** * Process the end of this tag. * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tÊ // Acquire the label value we will be generating String label = value; if ((label == null) && (text != null)) label = text; if ((label == null) || (label.trim().length() < 1)) label = "Cancel"; // Generate an HTML element StringBuffer results = new StringBuffer(); results.append(" 0) text = value; } return (SKIP_BODY); sq~ uq~q~pppq~fq~fxsq~isq~ uq~ppppq~jsq~ uq~ppppptr/** * Process the end of this tag. * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftÊ // Acquire the label value we will be generating String label = value; if ((label == null) && (text != null)) label = text; if ((label == null) || (label.trim().length() < 1)) label = "Cancel"; // Generate an HTML element StringBuffer results = new StringBuffer(); results.append(". * *//** * Tag for input fields of type "cancel". * * @author Jeff Hutchinson * @version $Revision: 1.12 $ $Date: 2002/12/22 04:55:30 $ */ ptCancelTag.javaq~fxsq~ uq~ppppsq~ uq~q~jpppq~fxsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxpsq~4Ôuq~4×ùuq~4×/Àq~$xsq~$úsq~ uq~ppppq~[÷sq~ uq~ppppq~=sq~ uq~ppppsq~ uq~ppppppxq~i¾sq~)sq~ uq~ppppq~[÷sq~ uq~ppppq~[ÿsq~ uq~ppppsq~ uq~q~mWpppsq~Be,pxq~Vpsq~4Ôuq~4×6uq~4×5Àq~$xq~iµsq~$úsq~ uq~ppppq~[÷sq~ uq~ppppq~=sq~ uq~ppppsq~ uq~ppppppxq~i¾sq~)sq~ uq~ppppq~[÷sq~ uq~ppppq~[ÿsq~ uq~sq~$úsq~ uq~ppppq~[÷sq~ uq~ppppq~=sq~ uq~ppppsq~ uq~ppppppxq~mvsq~)sq~ uq~ppppq~[÷sq~ uq~ppppq~[ÿsq~ uq~ppppsq~ uq~q~m}pppsq~BOTÄpxsq~zsq~ auq~ksq~(sq~ uq~ppppq~msq~ uq~pppppt€// ------------------------------------------------------------- Properties /** * The alignment for this image. */ // ------------------------------------------------------------- Properties /** * The alignment for this image. */ // ------------------------------------------------------------- Properties /** * The alignment for this image. */ // ------------------------------------------------------------- Properties /** * The alignment for this image. */ // ------------------------------------------------------------- Properties /** * The alignment for this image. */ ptalignq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~msq~ uq~ppppppptgetAlignq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t$ return (this.align); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~m°sq~ uq~ppppppptalignq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~msq~ uq~ppppppptsetAlignq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t# this.align = align; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~msq~ uq~pppppt/** * The border size around the image. */ /** * The border size around the image. */ /** * The border size around the image. */ /** * The border size around the image. */ /** * The border size around the image. */ ptborderq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~msq~ uq~pppppppt getBorderq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t% return (this.border); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~mäsq~ uq~ppppppptborderq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~msq~ uq~pppppppt setBorderq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t% this.border = border; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~msq~ uq~pppppt1/** * The application-relative URI of the image. */ /** * The application-relative URI of the image. */ /** * The module-relative URI of the image. */ /** * The module-relative URI of the image. */ /** * The module-relative URI of the image. */ ptpageq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~msq~ uq~ppppppptgetPageq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t# return (this.page); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~nsq~ uq~ppppppptpageq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~msq~ uq~ppppppptsetPageq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t! this.page = page; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~msq~ uq~ppppptÂ/** * The message resources key of the application-relative URI of the image. */ /** * The message resources key of the application-relative URI of the image. */ /** * The message resources key of the module-relative URI of the image. */ /** * The message resources key of the module-relative URI of the image. */ /** * The message resources key of the module-relative URI of the image. */ ptpageKeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~msq~ uq~pppppppt getPageKeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t& return (this.pageKey); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~nLsq~ uq~ppppppptpageKeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~msq~ uq~pppppppt setPageKeyq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t' this.pageKey = pageKey; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~msq~ uq~pppppt6/** * The name attribute for the image button. */ /** * The name attribute for the image button. */ /** * The name attribute for the image button. */ /** * The name attribute for the image button. */ /** * The name attribute for the image button. */ ptpropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~sq~(sq~ uq~ppppsq~zsq~ ,uq~,sq~(sq~ uq~ppppq~nqsq~ uq~pppppt²// ----------------------------------------------------- Instance Variables /** * The message resources for this package. */ // ----------------------------------------------------- Instance Variables /** * The message resources for this package. */ // ----------------------------------------------------- Instance Variables /** * The message resources for this package. */ // ----------------------------------------------------- Instance Variables /** * The message resources for this package. */ // ----------------------------------------------------- Instance Variables /** * The message resources for this package. */ ptmessagesq~=xsq~ uq~pppppq~$q~yq~$q~-pq~$xsq~ uq~q~Vpppsq~ uq~ppppsq~#q~;xppptP MessageResources.getMessageResources(Constants.Package + ".LocalStrings")q~$q~$q~$xq~nnsq~(sq~ uq~ppppq~nqsq~ uq~pppppt,/** * The body content of this tag (if any). */ /** * The body content of this tag (if any). */ /** * The body content of this tag (if any). */ /** * The body content of this tag (if any). */ /** * The body content of this tag (if any). */ pttextq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq~nqsq~ uq~pppppt/** * The value of the button label. */ /** * The value of the button label. */ /** * The value of the button label. */ /** * The value of the button label. */ /** * The value of the button label. */ ptvalueq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~nqsq~ uq~ppppptw// ------------------------------------------------------------- Properties /** * Return the property. */ pt getPropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ sq~isq~ uq~ppppq~msq~ uq~pppppppt getPropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~q~nŸpppsq~ uq~ppppq~$q~Äxq~$t' return (this.property); sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~msq~ uq~pppppppt getPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~q~nŸpppsq~ uq~ppppq~¥q~»xq~¥t' return (this.property); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~msq~ uq~pppppppt getPropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~q~nŸpppsq~ uq~ppppq~–q~¢xq~–t' return (this.property); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~msq~ uq~pppppppt getPropertyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~q~nŸpppsq~ uq~ppppq~~q~Šxq~~t' return (this.property); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~msq~ uq~pppppppt getPropertyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~q~nŸpppsq~ uq~ppppq~fq~rxq~ft' return (this.property); sq~ uq~ppppq~fq~fxppppq~$q~Äxq~$t+ return (this.property); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~núsq~ uq~ppppppptpropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~nqsq~ uq~pppppt^/** * Set the property name. * * @param property The property name */ pt setPropertyq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ sq~isq~ uq~sq~bsq~ uq~ppppq~osq~ uq~ppppppptpropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~msq~ uq~pppppppt setPropertyq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~q~núpppsq~ uq~sq~isq~ uq~sq~bsq~ uq~ppppq~o#sq~ uq~pppppppt newPropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppsq~zsq~ uq~sq~isq~ uq~ppppq~o.sq~ uq~pppppt /** * Overriding method of the heart of the matter. Gets the relative property * and leaves the rest up to the original tag implementation. Sweet. * @return int JSP continuation directive. * This is in the hands of the super class. */ pt doStartTagq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~sq~isq~ uq~ppppq~msq~ uq~ppppptÉ// --------------------------------------------------------- Public Methods /** * Process the start of this tag. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~sq~isq~ uq~ppppq~nqsq~ uq~ppppptÉ// --------------------------------------------------------- Public Methods /** * Process the start of this tag. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~ q~o element HttpServletResponse response = (HttpServletResponse) pageContext.getResponse(); String tmp = null; StringBuffer results = new StringBuffer(); results.append(""); // Render this element to our writer ResponseUtils.write(pageContext, results.toString()); // Evaluate the remainder of this page return (EVAL_PAGE); sq~ uq~q~pppq~$q~$xsq~isq~ uq~ppppq~msq~ uq~pppppt¦/** * Process the end of this tag. * [Indexed property since Struts 1.1] * * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~q~p8pppsq~ uq~ppppq~¥q~»xq~¥tê // Generate an HTML element HttpServletResponse response = (HttpServletResponse) pageContext.getResponse(); String tmp = null; StringBuffer results = new StringBuffer(); results.append(""); // Render this element to our writer ResponseUtils.write(pageContext, results.toString()); // Evaluate the remainder of this page return (EVAL_PAGE); sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~ppppq~msq~ uq~pppppt¦/** * Process the end of this tag. * [Indexed property since Struts 1.1] * * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~q~p8pppsq~ uq~ppppq~–q~¢xq~–tê // Generate an HTML element HttpServletResponse response = (HttpServletResponse) pageContext.getResponse(); String tmp = null; StringBuffer results = new StringBuffer(); results.append(""); // Render this element to our writer ResponseUtils.write(pageContext, results.toString()); // Evaluate the remainder of this page return (EVAL_PAGE); sq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq~msq~ uq~pppppt¦/** * Process the end of this tag. * [Indexed property since Struts 1.1] * * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~q~p8pppsq~ uq~ppppq~~q~Šxq~~t_ // Generate an HTML element HttpServletResponse response = (HttpServletResponse) pageContext.getResponse(); String tmp = null; StringBuffer results = new StringBuffer(); results.append(" element HttpServletResponse response = (HttpServletResponse) pageContext.getResponse(); String tmp = null; StringBuffer results = new StringBuffer(); results.append(""); // Render this element to our writer ResponseUtils.write(pageContext, results.toString()); // Evaluate the remainder of this page return (EVAL_PAGE); sq~ uq~q~pppq~$q~$xpppsq~ uq~ppppq~~q~Šxq~~t§ // do the super's ending part int i = super.doEndTag(); // reset the properties setProperty(originalProperty); // continue return i; sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~o—sq~ uq~ppppptC/** * Release the tag's resources and reset the values. */ ptreleaseq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~sq~isq~ uq~ppppq~nqsq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~q~X°pppsq~ uq~ sq~isq~ uq~ppppq~msq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~q~pØpppsq~ uq~sq~isq~ uq~ppppq~o.sq~ uq~ppppptC/** * Release the tag's resources and reset the values. */ ptreleaseq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~q~påpppsq~ uq~ppppq~~q~Šxq~~tT super.release(); // reset the originals originalProperty = null; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~o.sq~ uq~ppppptC/** * Release the tag's resources and reset the values. */ ptreleaseq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~q~påpppsq~ uq~ppppq~fq~rxq~ftT super.release(); // reset the originals originalProperty = null; sq~ uq~ppppq~fq~fxppq~$q~Äxq~$t˜ super.release(); page = null; pageKey = null; property = ""; src = null; srcKey = null; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~msq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~q~pØpppsq~ uq~ppppq~¥q~»xq~¥t˜ super.release(); page = null; pageKey = null; property = ""; src = null; srcKey = null; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~msq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~q~pØpppsq~ uq~ppppq~–q~¢xq~–t˜ super.release(); page = null; pageKey = null; property = ""; src = null; srcKey = null; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~msq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~q~pØpppsq~ uq~ppppq~~q~Šxq~~t˜ super.release(); page = null; pageKey = null; property = ""; src = null; srcKey = null; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~msq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~q~pØpppsq~ uq~ppppq~fq~rxq~ft˜ super.release(); page = null; pageKey = null; property = ""; src = null; srcKey = null; sq~ uq~ppppq~fq~fxq~pÍsq~isq~ uq~ppppq~o—sq~ uq~ppppptC/** * Release the tag's resources and reset the values. */ ptreleaseq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~q~pØpppsq~ uq~ppppq~fq~rxq~ftT super.release(); // reset the originals originalProperty = null; sq~ uq~ppppq~fq~fxppq~$q~Äxq~$to super.release(); property = "submit"; text = null; value = null; sq~ uq~ppppq~$q~$xpppsq~ uq~ppppq~~q~Šxq~~tT super.release(); // reset the originals originalProperty = null; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~o—sq~ uq~pppppt /** * Overriding method of the heart of the matter. Gets the relative property * and leaves the rest up to the original tag implementation. Sweet. * @return int JSP continuation directive. * This is in the hands of the super class. */ pt doStartTagq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~q~oGpppsq~ uq~ppppq~fq~rxq~ftP // get the original properties originalProperty = getProperty(); // request HttpServletRequest request = (HttpServletRequest)pageContext.getRequest(); // set the properties NestedPropertyHelper.setNestedProperties(request, this); // let the super do it's thing return super.doStartTag(); sq~ uq~q~pppq~fq~fxq~pµq~qUq~Uúsq~ uq~ppppppptNestedSubmitTagq~=xsq~ uq~ppppq~$sq~ uq~sq~)sq~ uq~ppppq~dsq~ uq~ppppq~d‰sq~ uq~ppppsq~ uq~sq~$úsq~ uq~ppppq~dsq~ uq~ppppq~=sq~ uq~ppppsq~ uq~ppppppxsq~)sq~ uq~ppppq~dsq~ uq~ppppq~d‰sq~ uq~q~qpppsq~ uq~ppppsq~Bù“Æpxq~nqq~q„psq~4Ôuq~4×uq~4×*Ïq~$xsq~$úsq~ uq~ppppq~dsq~ uq~ppppq~Tæsq~ uq~ppppsq~ uq~ppppppxsq~)sq~ uq~ppppq~dsq~ uq~ppppq~Tæsq~ uq~ sq~$úsq~ uq~ppppq~dsq~ uq~ppppq~Tæsq~ uq~ppppsq~ uq~ppppppxq~q¬sq~)sq~ uq~ppppq~dsq~ uq~ppppq~d‰sq~ uq~ppppsq~ uq~sq~$úsq~ uq~ppppq~dsq~ uq~ppppq~=sq~ uq~ppppsq~ uq~ppppppxsq~)sq~ uq~ppppq~dsq~ uq~ppppq~d‰sq~ uq~q~qÅpppsq~ uq~ppppsq~BõÝpxq~RÜq~q¼psq~4Ôuq~4ט˜uq~4×Aæq~$xq~q³sq~$úsq~ uq~ppppq~dsq~ uq~ppppq~{sq~ uq~ppppsq~ uq~ppppppxq~d­q~q¼psq~4Ôuq~4טÍuq~4×AÜq~~xpsq~Bw]8pxq~SÕpsq~4Ôuq~4טÆuq~4×A"q~Téxsq~$úsq~ uq~ppppq~dsq~ uq~ppppq~Tæsq~ uq~ppppsq~ uq~ppppppxq~q¬sq~)sq~ uq~ppppq~dsq~ uq~ppppq~d‰sq~ uq~ppppsq~ uq~sq~$úsq~ uq~ppppq~dsq~ uq~ppppq~=sq~ uq~ppppsq~ uq~ppppppxsq~)sq~ uq~ppppq~dsq~ uq~ppppq~d‰sq~ uq~q~qýpppsq~ uq~ppppsq~Bô©Æpxq~mq~qôpsq~4Ôuq~4×##uq~4×-Ïq~$xq~qëppsq~Bvè$pxq~o.psq~4Ôuq~4×#Æuq~4×-"q~Téxsq~$úsq~ uq~ppppq~dsq~ uq~ppppq~Tæsq~ uq~ppppsq~ uq~ppppppxq~q¬sq~)sq~ uq~ppppq~dsq~ uq~ppppq~d‰sq~ uq~ppppsq~ uq~sq~$úsq~ uq~ppppq~dsq~ uq~ppppq~=sq~ uq~ppppsq~ uq~ppppppxsq~)sq~ uq~ppppq~dsq~ uq~ppppq~d‰sq~ uq~q~r)pppsq~ uq~ppppsq~BïÆpxsq~zsq~ puq~ysq~(sq~ uq~ppppq~rnull to return all errors. */ /** * The name of the property for which error messages should be returned, * or null to return all errors. */ /** * The name of the property for which error messages should be returned, * or null to return all errors. */ /** * The name of the property for which error messages should be returned, * or null to return all errors. */ /** * The name of the property for which error messages should be returned, * or null to return all errors. */ ptpropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq~rAction.MESSAGE_KEY will * be used to retrieve the messages from scope. */ /** * If this is set to 'true', then the Action.MESSAGE_KEY will * be used to retrieve the messages from scope. */ /** * If this is set to 'true', then the Action.MESSAGE_KEY will * be used to retrieve the messages from scope. */ /** * If this is set to 'true', then the Globals.MESSAGE_KEY will * be used to retrieve the messages from scope. */ /** * If this is set to 'true', then the Globals.MESSAGE_KEY will * be used to retrieve the messages from scope. */ ptmessageq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~r 0) { String headerMessage = RequestUtils.message(pageContext, bundle, locale, header); if (headerMessage != null) { // Print the results to our output writer ResponseUtils.write(pageContext, headerMessage); } } // Set the processed variable to true so the // doEndTag() knows processing took place processed = true; return (EVAL_BODY_TAG); } else { return (SKIP_BODY); } sq~ uq~q~pppq~$q~$xpppsq~ uq~ppppq~$q~Äxq~$tv /* singleton tag implementations will need the original property to be set before running */ super.setProperty(originalProperty); /* let the NestedHelper set the properties it can */ isNesting = true; NestedPropertyHelper.setNestedProperties(this); isNesting = false; /* do the tag */ return super.doStartTag(); sq~ uq~q~pppq~$q~$xq~s•sq~(sq~ uq~ppppq~s sq~ uq~ppppptW/* hold original property */ /* hold original property */ /* hold original property */ ptoriginalPropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~%Zxpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq~s sq~ uq~pppppppt isNestingq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~%Zxpppt falseq~$q~$q~$xq~s»sq~isq~ uq~sq~bsq~ uq~ppppq~tsq~ uq~pppppppt newPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~s sq~ uq~pppppt//** this is overridden so that properties being set by the JSP page aren't * written over by those needed by the extension. If the tag instance is * re-used by the JSP, the tag can set the property back to that set by the * JSP page. * * @param newProperty new property value */ pt setPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~q~sq~Tfppsq~ uq~ppppq~¥q~»xq~¥tÑ /* let the real tag do its thang */ super.setProperty(newProperty); /* if it's the JSP setting it, remember the value */ if (!isNesting) { originalProperty = newProperty; } sq~ uq~ppppq~¥q~¥xq~sËsq~isq~ uq~sq~bsq~ uq~ppppq~t6sq~ uq~pppppppt newPropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~s sq~ uq~pppppt//** this is overridden so that properties being set by the JSP page aren't * written over by those needed by the extension. If the tag instance is * re-used by the JSP, the tag can set the property back to that set by the * JSP page. * * @param newProperty new property value */ pt setPropertyq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~q~sq~Tfppsq~ uq~ppppq~–q~¢xq~–tÑ /* let the real tag do its thang */ super.setProperty(newProperty); /* if it's the JSP setting it, remember the value */ if (!isNesting) { originalProperty = newProperty; } sq~ uq~ppppq~–q~–xq~sÛsq~isq~ uq~ppppq~s sq~ uq~pppppt/** * Complete the processing of the tag. The nested tags here will restore * all the original value for the tag itself and the nesting context. * @return int to describe the next step for the JSP processor * @throws JspException for the bad things JSP's do */ ptdoEndTagq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~sq~isq~ uq~ppppq~r 0) { String footerMessage = RequestUtils.message(pageContext, bundle, locale, footer); if (footerMessage != null) { // Print the results to our output writer ResponseUtils.write(pageContext, footerMessage); } } // Continue processing this page return (EVAL_PAGE); sq~ uq~q~pppq~$q~$xpppsq~ uq~ppppq~~q~Šxq~~tÇ // do the super's ending part int i = super.doEndTag(); // reset the properties setName(originalName); setProperty(originalProperty); // continue return i; sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~s sq~ uq~ppppptC/** * Release the tag's resources and reset the values. */ ptreleaseq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~sq~isq~ uq~ppppq~r. * *//** * NestedMessagesTag. * @author Arron Bates * @author David Winterfeldt * @since Struts 1.1 * @version $Revision: 1.5 $ $Date: 2003/02/28 05:15:06 $ */ ptNestedMessagesTag.javaq~fxsq~ uq~ppppsq~ uq~q~s pppq~fxsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxsq~ uq~pppppt//** this is overridden so that properties being set by the JSP page aren't * written over by those needed by the extension. If the tag instance is * re-used by the JSP, the tag can set the property back to that set by the * JSP page. * * @param newProperty new property value */ pt setPropertyq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~q~sq~Tfppsq~ uq~ppppq~$q~Äxq~$tÑ /* let the real tag do its thang */ super.setProperty(newProperty); /* if it's the JSP setting it, remember the value */ if (!isNesting) { originalProperty = newProperty; } sq~ uq~ppppq~$q~$xq~tq~t6pq~$q~Äxq~$t) this.property = property; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~r 0) { String headerMessage = RequestUtils.message(pageContext, bundle, locale, header); if (headerMessage != null) { // Print the results to our output writer ResponseUtils.write(pageContext, headerMessage); } } // Set the processed variable to true so the // doEndTag() knows processing took place processed = true; return (EVAL_BODY_TAG); } else { return (SKIP_BODY); } sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~ppppq~r 0) { String footerMessage = RequestUtils.message(pageContext, bundle, locale, footer); if (footerMessage != null) { // Print the results to our output writer ResponseUtils.write(pageContext, footerMessage); } } // Continue processing this page return (EVAL_PAGE); sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~ppppq~r 0) { String headerMessage = RequestUtils.message(pageContext, bundle, locale, header); if (headerMessage != null) { // Print the results to our output writer ResponseUtils.write(pageContext, headerMessage); } } // Set the processed variable to true so the // doEndTag() knows processing took place processed = true; return (EVAL_BODY_TAG); } else { return (SKIP_BODY); } sq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq~r 0) { String footerMessage = RequestUtils.message(pageContext, bundle, locale, footer); if (footerMessage != null) { // Print the results to our output writer ResponseUtils.write(pageContext, footerMessage); } } // Continue processing this page return (EVAL_PAGE); sq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq~r 0) { String headerMessage = RequestUtils.message(pageContext, bundle, locale, header); if (headerMessage != null) { ResponseUtils.write(pageContext, headerMessage); } } // Set the processed variable to true so the // doEndTag() knows processing took place processed = true; return (EVAL_BODY_TAG); sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~r 0) { String footerMessage = RequestUtils.message(pageContext, bundle, locale, footer); if (footerMessage != null) { // Print the results to our output writer ResponseUtils.write(pageContext, footerMessage); } } // Continue processing this page return (EVAL_PAGE); sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~r 0) { String headerMessage = RequestUtils.message(pageContext, bundle, locale, header); if (headerMessage != null) { ResponseUtils.write(pageContext, headerMessage); } } // Set the processed variable to true so the // doEndTag() knows processing took place processed = true; return (EVAL_BODY_TAG); sq~ uq~q~pppq~fq~fxsq~isq~ uq~ppppq~r 0) { String footerMessage = RequestUtils.message(pageContext, bundle, locale, footer); if (footerMessage != null) { // Print the results to our output writer ResponseUtils.write(pageContext, footerMessage); } } // Continue processing this page return (EVAL_PAGE); sq~ uq~q~pppq~fq~fxsq~isq~ uq~ppppq~r 0) { lActions.add(va); } else { i.remove(); } } Collections.sort(lActions, new Comparator() { public int compare(Object o1, Object o2) { ValidatorAction va1 = (ValidatorAction)o1; ValidatorAction va2 = (ValidatorAction)o2; if ((va1.getDepends() == null || va1.getDepends().length() == 0) && (va2.getDepends() == null || va2.getDepends().length() == 0)) { return 0; } else if ((va1.getDepends() != null && va1.getDepends().length() > 0) && (va2.getDepends() == null || va2.getDepends().length() == 0)) { return 1; } else if ((va1.getDepends() == null || va1.getDepends().length() == 0) && (va2.getDepends() != null && va2.getDepends().length() > 0)) { return -1; } else { return va1.getDependencies().size() - va2.getDependencies().size(); } } }); String methods = null; for (Iterator i = lActions.iterator(); i.hasNext(); ) { ValidatorAction va = (ValidatorAction)i.next(); if (methods == null) { methods = va.getMethod() + "(form)"; } else { methods += " && " + va.getMethod() + "(form)"; } } results.append(getJavascriptBegin(methods)); for (Iterator i = lActions.iterator(); i.hasNext(); ) { ValidatorAction va = (ValidatorAction)i.next(); String jscriptVar = null; String functionName = null; if (va.getJsFunctionName() != null && va.getJsFunctionName().length() > 0) { functionName = va.getJsFunctionName(); } else { functionName = va.getName(); } results.append(" function " + functionName + " () { \n"); for (Iterator x = form.getFields().iterator(); x.hasNext(); ) { Field field = (Field)x.next(); // Skip indexed fields for now until there is // a good way to handle error messages (and the length of the list (could retrieve from scope?)) if (!field.isIndexed() && field.getPage() == page && field.isDependency(va.getName())) { String message = StrutsValidatorUtil.getMessage(messages, locale, va, field); message = (message != null ? message : ""); jscriptVar = getNextVar(jscriptVar); results.append(" this." + jscriptVar + " = new Array(\"" + field.getKey() + "\", \"" + message + "\", "); results.append("new Function (\"varName\", \""); Map hVars = field.getVars(); // Loop through the field's variables. for (Iterator iVars = hVars.keySet().iterator(); iVars.hasNext(); ) { String varKey = (String)iVars.next(); Var var = (Var)hVars.get(varKey); String varValue = var.getValue(); String jsType = var.getJsType(); if (Var.JSTYPE_INT.equalsIgnoreCase(jsType)) { results.append("this." + varKey + "=" + ValidatorUtil.replace(varValue, "\\", "\\\\") + "; "); } else if (Var.JSTYPE_REGEXP.equalsIgnoreCase(jsType)) { results.append("this." + varKey + "=/" + ValidatorUtil.replace(varValue, "\\", "\\\\") + "/; "); } else if (Var.JSTYPE_STRING.equalsIgnoreCase(jsType)) { results.append("this." + varKey + "='" + ValidatorUtil.replace(varValue, "\\", "\\\\") + "'; "); // So everyone using the latest format doesn't need to change their xml files immediately. } else if ("mask".equalsIgnoreCase(varKey)) { results.append("this." + varKey + "=/" + ValidatorUtil.replace(varValue, "\\", "\\\\") + "/; "); } else { results.append("this." + varKey + "='" + ValidatorUtil.replace(varValue, "\\", "\\\\") + "'; "); } } results.append(" return this[varName];\"));\n"); } } results.append(" } \n\n"); } } if ("true".equals(staticJavascript)) { results.append(getJavascriptStaticMethods(resources)); } if ("true".equals(dynamicJavascript)) { results.append(getJavascriptEnd()); } // Print this field to our output writer JspWriter writer = pageContext.getOut(); try { writer.print(results.toString()); } catch (IOException e) { throw new JspException(e.getMessage()); //throw new JspException(messages.getMessage("common.io", e.toString())); } // Continue processing this page return (EVAL_BODY_TAG); sq~ uq~q~pppq~$q~$xsq~isq~ uq~ppppq~{”sq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tç super.release(); bundle = Action.MESSAGES_KEY; formName = null; page = 0; methodName = null; staticJavascript = "true"; dynamicJavascript = "true"; src = null; sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq~}sq~ uq~ppppppptmethodsq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~{”sq~ uq~ppppppptgetJavascriptBeginq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$t1 StringBuffer sb = new StringBuffer(); String name = formName.substring(0, 1).toUpperCase() + formName.substring(1, formName.length()); sb.append("\n\n"); return sb.toString(); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq€iŽsq~ uq~ppppppptinputq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~{”sq~ uq~pppppt¡/** * The value null will be returned at the end of the sequence. *     ex: "zz" will return null */ pt getNextVarq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~%Zxq~$t if (input == null) { return "aa"; } input = input.toLowerCase(); for (int i = input.length(); i > 0; i--) { int pos = i - 1; char c = input.charAt(pos); c++; if (c <= 'z') { if (i == 0) { return c + input.substring(pos, input.length()); } else if (i == input.length()) { return input.substring(0, pos) + c; } else { return input.substring(0, pos) + c + input.substring(pos, input.length() - 1); } } else { input = replaceChar(input, pos, 'a'); } } return null; sq~ uq~ppppq~$q~$xq~ksq~isq~ uq~ppppq~{”sq~ uq~pppppt«/** * Gets the key (form name) that will be used * to retrieve a set of validation rules to be * performed on the bean passed in for validation. */ pt getFormNameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t return formName; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq€i¶sq~ uq~ppppppptformNameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~{”sq~ uq~pppppt«/** * Sets the key (form name) that will be used * to retrieve a set of validation rules to be * performed on the bean passed in for validation. */ pt setFormNameq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t( this.formName = formName; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~{”sq~ uq~pppppt¿/** * Gets the current page number of a multi-part form. * Only field validations with a matching page numer * will be generated that match the current page number. */ ptgetPageq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t return page; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq€iÞsq~ uq~ppppppptpageq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xpppq~{”sq~ uq~pppppt¿/** * Sets the current page number of a multi-part form. * Only field validations with a matching page numer * will be generated that match the current page number. */ ptsetPageq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t this.page = page; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~{”sq~ uq~ppppptç/** * Gets the method name that will be used for the Javascript * validation method name if it has a value. This overrides * the auto-generated method name based on the key (form name) * passed in. */ pt getMethodq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t! return methodName; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq€jsq~ uq~pppppppt methodNameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~{”sq~ uq~ppppptç/** * Sets the method name that will be used for the Javascript * validation method name if it has a value. This overrides * the auto-generated method name based on the key (form name) * passed in. */ pt setMethodq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t, this.methodName = methodName; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~{”sq~ uq~ppppptµ/** * Gets whether or not to generate the static * JavaScript. If this is set to 'true', which * is the default, the static JavaScript will be generated. */ ptgetStaticJavascriptq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t' return staticJavascript; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq€j.sq~ uq~ppppppptstaticJavascriptq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~{”sq~ uq~ppppptµ/** * Sets whether or not to generate the static * JavaScript. If this is set to 'true', which * is the default, the static JavaScript will be generated. */ ptsetStaticJavascriptq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t8 this.staticJavascript = staticJavascript; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~{”sq~ uq~pppppt·/** * Gets whether or not to generate the dynamic * JavaScript. If this is set to 'true', which * is the default, the dynamic JavaScript will be generated. */ ptgetDynamicJavascriptq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t( return dynamicJavascript; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq€jVsq~ uq~ppppppptdynamicJavascriptq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~{”sq~ uq~pppppt·/** * Sets whether or not to generate the dynamic * JavaScript. If this is set to 'true', which * is the default, the dynamic JavaScript will be generated. */ ptsetDynamicJavascriptq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t: this.dynamicJavascript = dynamicJavascript; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~{”sq~ uq~ppppptb/** * Gets the src attribute's value when defining * the html script element. */ ptgetSrcq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t return src; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq€j~sq~ uq~ppppppptsrcq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~{”sq~ uq~ppppptb/** * Sets the src attribute's value when defining * the html script element. */ ptsetSrcq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t this.src = src; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~{”sq~ uq~pppppt¥/** * Render the JavaScript for to perform validations based on the form name. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t, StringBuffer results = new StringBuffer(); ValidatorResources resources = (ValidatorResources) pageContext.getAttribute(ValidatorPlugIn.VALIDATOR_KEY, PageContext.APPLICATION_SCOPE); Locale locale = null; try { locale = (Locale) pageContext.getAttribute(Action.LOCALE_KEY, PageContext.SESSION_SCOPE); } catch (IllegalStateException e) { // Invalidated session locale = null; } if (locale == null) { locale = defaultLocale; } Form form = null; if ((form = resources.get(locale, formName)) != null && "true".equals(dynamicJavascript)) { MessageResources messages = (MessageResources) pageContext.getAttribute(bundle, PageContext.APPLICATION_SCOPE); List lActions = new ArrayList(); List lActionMethods = new ArrayList(); // Get List of actions for this Form for (Iterator i = form.getFields().iterator(); i.hasNext(); ) { Field field = (Field)i.next(); for (Iterator x = field.getDependencies().iterator(); x.hasNext(); ) { Object o = x.next(); if (o != null && !lActionMethods.contains(o)) { lActionMethods.add(o); } } } // Create list of ValidatorActions based on lActionMethods for (Iterator i = lActionMethods.iterator(); i.hasNext(); ) { ValidatorAction va = resources.getValidatorAction((String)i.next()); String javascript = va.getJavascript(); if (javascript != null && javascript.length() > 0) { lActions.add(va); } else { i.remove(); } } Collections.sort(lActions, new Comparator() { public int compare(Object o1, Object o2) { ValidatorAction va1 = (ValidatorAction)o1; ValidatorAction va2 = (ValidatorAction)o2; if ((va1.getDepends() == null || va1.getDepends().length() == 0) && (va2.getDepends() == null || va2.getDepends().length() == 0)) { return 0; } else if ((va1.getDepends() != null && va1.getDepends().length() > 0) && (va2.getDepends() == null || va2.getDepends().length() == 0)) { return 1; } else if ((va1.getDepends() == null || va1.getDepends().length() == 0) && (va2.getDepends() != null && va2.getDepends().length() > 0)) { return -1; } else { return va1.getDependencies().size() - va2.getDependencies().size(); } } }); String methods = null; for (Iterator i = lActions.iterator(); i.hasNext(); ) { ValidatorAction va = (ValidatorAction)i.next(); if (methods == null) { methods = va.getMethod() + "(form)"; } else { methods += " && " + va.getMethod() + "(form)"; } } results.append(getJavascriptBegin(methods)); for (Iterator i = lActions.iterator(); i.hasNext(); ) { ValidatorAction va = (ValidatorAction)i.next(); String jscriptVar = null; String functionName = null; if (va.getJsFunctionName() != null && va.getJsFunctionName().length() > 0) { functionName = va.getJsFunctionName(); } else { functionName = va.getName(); } results.append(" function " + functionName + " () { \n"); for (Iterator x = form.getFields().iterator(); x.hasNext(); ) { Field field = (Field)x.next(); // Skip indexed fields for now until there is // a good way to handle error messages (and the length of the list (could retrieve from scope?)) if (!field.isIndexed() && field.getPage() == page && field.isDependency(va.getName())) { String message = StrutsValidatorUtil.getMessage(messages, locale, va, field); message = (message != null ? message : ""); jscriptVar = getNextVar(jscriptVar); results.append(" this." + jscriptVar + " = new Array(\"" + field.getKey() + "\", \"" + message + "\", "); results.append("new Function (\"varName\", \""); Map hVars = field.getVars(); // Loop through the field's variables. for (Iterator iVars = hVars.keySet().iterator(); iVars.hasNext(); ) { String varKey = (String)iVars.next(); Var var = (Var)hVars.get(varKey); String varValue = var.getValue(); String jsType = var.getJsType(); if (Var.JSTYPE_INT.equalsIgnoreCase(jsType)) { results.append("this." + varKey + "=" + ValidatorUtil.replace(varValue, "\\", "\\\\") + "; "); } else if (Var.JSTYPE_REGEXP.equalsIgnoreCase(jsType)) { results.append("this." + varKey + "=/" + ValidatorUtil.replace(varValue, "\\", "\\\\") + "/; "); } else if (Var.JSTYPE_STRING.equalsIgnoreCase(jsType)) { results.append("this." + varKey + "='" + ValidatorUtil.replace(varValue, "\\", "\\\\") + "'; "); // So everyone using the latest format doesn't need to change their xml files immediately. } else if ("mask".equalsIgnoreCase(varKey)) { results.append("this." + varKey + "=/" + ValidatorUtil.replace(varValue, "\\", "\\\\") + "/; "); } else { results.append("this." + varKey + "='" + ValidatorUtil.replace(varValue, "\\", "\\\\") + "'; "); } } results.append(" return this[varName];\"));\n"); } } results.append(" } \n\n"); } } if ("true".equals(staticJavascript)) { results.append(getJavascriptStaticMethods(resources)); } if ("true".equals(dynamicJavascript)) { results.append(getJavascriptEnd()); } // Print this field to our output writer JspWriter writer = pageContext.getOut(); try { writer.print(results.toString()); } catch (IOException e) { throw new JspException(e.getMessage()); //throw new JspException(messages.getMessage("common.io", e.toString())); } // Continue processing this page return (EVAL_BODY_TAG); sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~ppppq~{”sq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tê super.release(); bundle = Action.MESSAGES_KEY; formName = null; page = 0; methodName = null; staticJavascript = "true"; dynamicJavascript = "true"; src = null; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq€j¶sq~ uq~ppppppptmethodsq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~{”sq~ uq~ppppppptgetJavascriptBeginq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥tê StringBuffer sb = new StringBuffer(); String name = formName.substring(0, 1).toUpperCase() + formName.substring(1, formName.length()); sb.append("\n\n"); return sb.toString(); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq€jÜsq~ uq~ppppppptinputq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~{”sq~ uq~ppppptŸ/** * The value null will be returned at the end of the sequence. *     ex: "zz" will return null */ pt getNextVarq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~xq~¥tÖ if (input == null) { return "aa"; } input = input.toLowerCase(); for (int i = input.length(); i > 0; i--) { int pos = i - 1; char c = input.charAt(pos); c++; if (c <= 'z') { if (i == 0) { return c + input.substring(pos, input.length()); } else if (i == input.length()) { return input.substring(0, pos) + c; } else { return input.substring(0, pos) + c + input.substring(pos, input.length() - 1); } } else { input = replaceChar(input, pos, 'a'); } } return null; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq€jôsq~ uq~ppppppptinputq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq€jôsq~ uq~ppppppptposq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~bsq~ uq~ppppq€jôsq~ uq~ppppppptcq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Epq~§xpq~{”sq~ uq~ppppptI/** * Replaces a single character in a String */ pt replaceCharq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~xq~¥t* if (pos == 0) { return c + input.substring(pos, input.length()); } else if (pos == input.length()) { return input.substring(0, pos) + c; } else { return input.substring(0, pos) + c + input.substring(pos, input.length() - 1); } sq~ uq~ppppq~¥q~¥xsq~(sq~ uq~ppppq~{”sq~ uq~pppppt5/** * The JavaScript methods will enclosed with html comments if this is set to "true". */ /** * The JavaScript methods will enclosed with html comments if this is set to "true". */ /** * The JavaScript methods will enclosed with html comments if this is set to "true". */ pt htmlCommentq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xpppt "true"q~–q~–q~–xsq~(sq~ uq~ppppq~{”sq~ uq~pppppppthtmlBeginCommentq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~'bxpppt "\n \n"q~–q~–q~–xsq~isq~ uq~ppppq~{”sq~ uq~pppppt¬/** * Gets the key (form name) that will be used * to retrieve a set of validation rules to be * performed on the bean passed in for validation. */ pt getFormNameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return formName; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€kTsq~ uq~ppppppptformNameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~{”sq~ uq~pppppt/** * Sets the key (form name) that will be used * to retrieve a set of validation rules to be * performed on the bean passed in for validation. * Specifying a form name places a * <script> </script> tag around the javascript. */ pt setFormNameq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t) this.formName = formName; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~{”sq~ uq~pppppt÷/** * Gets the current page number of a multi-part form. * Only field validations with a matching page numer * will be generated that match the current page number. * Only valid when the formName attribute is set. */ ptgetPageq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return page; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€k|sq~ uq~ppppppptpageq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xpppq~{”sq~ uq~pppppt÷/** * Sets the current page number of a multi-part form. * Only field validations with a matching page numer * will be generated that match the current page number. * Only valid when the formName attribute is set. */ ptsetPageq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t! this.page = page; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~{”sq~ uq~ppppptè/** * Gets the method name that will be used for the Javascript * validation method name if it has a value. This overrides * the auto-generated method name based on the key (form name) * passed in. */ pt getMethodq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t" return methodName; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€k¤sq~ uq~pppppppt methodNameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~{”sq~ uq~ppppptè/** * Sets the method name that will be used for the Javascript * validation method name if it has a value. This overrides * the auto-generated method name based on the key (form name) * passed in. */ pt setMethodq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t- this.methodName = methodName; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~{”sq~ uq~pppppt¶/** * Gets whether or not to generate the static * JavaScript. If this is set to 'true', which * is the default, the static JavaScript will be generated. */ ptgetStaticJavascriptq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t( return staticJavascript; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€kÌsq~ uq~ppppppptstaticJavascriptq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~{”sq~ uq~pppppt¶/** * Sets whether or not to generate the static * JavaScript. If this is set to 'true', which * is the default, the static JavaScript will be generated. */ ptsetStaticJavascriptq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t9 this.staticJavascript = staticJavascript; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~{”sq~ uq~pppppt¸/** * Gets whether or not to generate the dynamic * JavaScript. If this is set to 'true', which * is the default, the dynamic JavaScript will be generated. */ ptgetDynamicJavascriptq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t) return dynamicJavascript; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€kôsq~ uq~ppppppptdynamicJavascriptq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~{”sq~ uq~pppppt¸/** * Sets whether or not to generate the dynamic * JavaScript. If this is set to 'true', which * is the default, the dynamic JavaScript will be generated. */ ptsetDynamicJavascriptq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t; this.dynamicJavascript = dynamicJavascript; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~{”sq~ uq~ppppptÍ/** * Gets whether or not to delimit the * JavaScript with html comments. If this is set to 'true', which * is the default, the htmlComment will be surround the JavaScript. */ ptgetHtmlCommentq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t% return htmlComment; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€lsq~ uq~pppppppt htmlCommentq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~{”sq~ uq~ppppptÍ/** * Sets whether or not to delimit the * JavaScript with html comments. If this is set to 'true', which * is the default, the htmlComment will be surround the JavaScript. */ ptsetHtmlCommentq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t1 this.htmlComment = htmlComment; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~{”sq~ uq~ppppptc/** * Gets the src attribute's value when defining * the html script element. */ ptgetSrcq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return src; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€lDsq~ uq~ppppppptsrcq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~{”sq~ uq~ppppptº/** * Sets the src attribute's value when defining * the html script element. The src attribute is only recognized * when the formName attribute is specified. */ ptsetSrcq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t this.src = src; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~{”sq~ uq~pppppt¦/** * Render the JavaScript for to perform validations based on the form name. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t e StringBuffer results = new StringBuffer(); ApplicationConfig config = RequestUtils.getApplicationConfig(pageContext); ValidatorResources resources = (ValidatorResources) pageContext.getAttribute(ValidatorPlugIn.VALIDATOR_KEY + config.getPrefix(), PageContext.APPLICATION_SCOPE); Locale locale = null; try { locale = (Locale) pageContext.getAttribute(Action.LOCALE_KEY, PageContext.SESSION_SCOPE); } catch (IllegalStateException e) { // Invalidated session locale = null; } if (locale == null) { locale = defaultLocale; } Form form = null; form = resources.get(locale, formName); if (form != null) { if ("true".equals(dynamicJavascript)) { MessageResources messages = (MessageResources) pageContext.getAttribute(bundle, PageContext.APPLICATION_SCOPE); List lActions = new ArrayList(); List lActionMethods = new ArrayList(); // Get List of actions for this Form for (Iterator i = form.getFields().iterator(); i.hasNext();) { Field field = (Field) i.next(); for (Iterator x = field.getDependencies().iterator(); x.hasNext();) { Object o = x.next(); if (o != null && !lActionMethods.contains(o)) { lActionMethods.add(o); } } } // Create list of ValidatorActions based on lActionMethods for (Iterator i = lActionMethods.iterator(); i.hasNext();) { ValidatorAction va = resources.getValidatorAction((String) i.next()); String javascript = va.getJavascript(); if (javascript != null && javascript.length() > 0) { lActions.add(va); } else { i.remove(); } } Collections.sort(lActions, new Comparator() { public int compare(Object o1, Object o2) { ValidatorAction va1 = (ValidatorAction) o1; ValidatorAction va2 = (ValidatorAction) o2; if ((va1.getDepends() == null || va1.getDepends().length() == 0) && (va2.getDepends() == null || va2.getDepends().length() == 0)) { return 0; } else if ((va1.getDepends() != null && va1.getDepends().length() > 0) && (va2.getDepends() == null || va2.getDepends().length() == 0)) { return 1; } else if ((va1.getDepends() == null || va1.getDepends().length() == 0) && (va2.getDepends() != null && va2.getDepends().length() > 0)) { return -1; } else { return va1.getDependencies().size() - va2.getDependencies().size(); } } }); String methods = null; for (Iterator i = lActions.iterator(); i.hasNext();) { ValidatorAction va = (ValidatorAction) i.next(); if (methods == null) { methods = va.getMethod() + "(form)"; } else { methods += " && " + va.getMethod() + "(form)"; } } results.append(getJavascriptBegin(methods)); for (Iterator i = lActions.iterator(); i.hasNext();) { ValidatorAction va = (ValidatorAction) i.next(); String jscriptVar = null; String functionName = null; if (va.getJsFunctionName() != null && va.getJsFunctionName().length() > 0) { functionName = va.getJsFunctionName(); } else { functionName = va.getName(); } results.append(" function " + functionName + " () { \n"); for (Iterator x = form.getFields().iterator(); x.hasNext();) { Field field = (Field) x.next(); // Skip indexed fields for now until there is // a good way to handle error messages (and the length of the list (could retrieve from scope?)) if (!field.isIndexed() && field.getPage() == page && field.isDependency(va.getName())) { String message = Resources.getMessage(messages, locale, va, field); message = (message != null ? message : ""); jscriptVar = getNextVar(jscriptVar); results.append(" this." + jscriptVar + " = new Array(\"" + field.getKey() + "\", \"" + message + "\", "); results.append("new Function (\"varName\", \""); Map hVars = field.getVars(); // Loop through the field's variables. for (Iterator iVars = hVars.keySet().iterator(); iVars.hasNext();) { String varKey = (String) iVars.next(); Var var = (Var) hVars.get(varKey); String varValue = var.getValue(); String jsType = var.getJsType(); if (Var.JSTYPE_INT.equalsIgnoreCase(jsType)) { results.append("this." + varKey + "=" + ValidatorUtil.replace(varValue, "\\", "\\\\") + "; "); } else if (Var.JSTYPE_REGEXP.equalsIgnoreCase(jsType)) { results.append("this." + varKey + "=/" + ValidatorUtil.replace(varValue, "\\", "\\\\") + "/; "); } else if (Var.JSTYPE_STRING.equalsIgnoreCase(jsType)) { results.append("this." + varKey + "='" + ValidatorUtil.replace(varValue, "\\", "\\\\") + "'; "); // So everyone using the latest format doesn't need to change their xml files immediately. } else if ("mask".equalsIgnoreCase(varKey)) { results.append("this." + varKey + "=/" + ValidatorUtil.replace(varValue, "\\", "\\\\") + "/; "); } else { results.append("this." + varKey + "='" + ValidatorUtil.replace(varValue, "\\", "\\\\") + "'; "); } } results.append(" return this[varName];\"));\n"); } } results.append(" } \n\n"); } } else if ("true".equals(staticJavascript)) { results.append("\n\n"); return sb.toString(); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€l¢sq~ uq~ppppppptinputq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~{”sq~ uq~pppppt /** * The value null will be returned at the end of the sequence. *     ex: "zz" will return null */ pt getNextVarq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~'bxq~–t if (input == null) { return "aa"; } input = input.toLowerCase(); for (int i = input.length(); i > 0; i--) { int pos = i - 1; char c = input.charAt(pos); c++; if (c <= 'z') { if (i == 0) { return c + input.substring(pos, input.length()); } else if (i == input.length()) { return input.substring(0, pos) + c; } else { return input.substring(0, pos) + c + input.substring(pos, input.length() - 1); } } else { input = replaceChar(input, pos, 'a'); } } return null; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€lºsq~ uq~ppppppptinputq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq€lºsq~ uq~ppppppptposq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~bsq~ uq~ppppq€lºsq~ uq~ppppppptcq~rxsq~ uq~pppppq~–q~—q~–q~Epq~˜xpq~{”sq~ uq~ppppptJ/** * Replaces a single character in a String */ pt replaceCharq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~'bxq~–t4 if (pos == 0) { return c + input.substring(pos, input.length()); } else if (pos == input.length()) { return input.substring(0, pos) + c; } else { return input.substring(0, pos) + c + input.substring(pos, input.length() - 1); } sq~ uq~ppppq~–q~–xsq~(sq~ uq~ppppq~{”sq~ uq~ppppptZ/** * The line ending string. */ /** * The line ending string. */ ptlineEndq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~ xpppt% System.getProperty("line.separator")q~~q~~q~~xsq~(sq~ uq~ppppq~{”sq~ uq~pppppt®/** * Hide JavaScript methods in a CDATA section for XHTML when "true". */ /** * Hide JavaScript methods in a CDATA section for XHTML when "true". */ ptcdataq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xpppt "true"q~~q~~q~~xsq~isq~ uq~ppppq~{”sq~ uq~pppppt¬/** * Gets the key (form name) that will be used * to retrieve a set of validation rules to be * performed on the bean passed in for validation. */ pt getFormNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t return formName; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€msq~ uq~ppppppptformNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~{”sq~ uq~pppppt/** * Sets the key (form name) that will be used * to retrieve a set of validation rules to be * performed on the bean passed in for validation. * Specifying a form name places a * <script> </script> tag around the javascript. */ pt setFormNameq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t) this.formName = formName; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~{”sq~ uq~pppppt÷/** * Gets the current page number of a multi-part form. * Only field validations with a matching page numer * will be generated that match the current page number. * Only valid when the formName attribute is set. */ ptgetPageq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t return page; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€m7sq~ uq~ppppppptpageq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xpppq~{”sq~ uq~pppppt÷/** * Sets the current page number of a multi-part form. * Only field validations with a matching page numer * will be generated that match the current page number. * Only valid when the formName attribute is set. */ ptsetPageq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t! this.page = page; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~{”sq~ uq~ppppptè/** * Gets the method name that will be used for the Javascript * validation method name if it has a value. This overrides * the auto-generated method name based on the key (form name) * passed in. */ pt getMethodq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t" return methodName; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€m_sq~ uq~pppppppt methodNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~{”sq~ uq~ppppptè/** * Sets the method name that will be used for the Javascript * validation method name if it has a value. This overrides * the auto-generated method name based on the key (form name) * passed in. */ pt setMethodq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t- this.methodName = methodName; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~{”sq~ uq~pppppt¶/** * Gets whether or not to generate the static * JavaScript. If this is set to 'true', which * is the default, the static JavaScript will be generated. */ ptgetStaticJavascriptq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t( return staticJavascript; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€m‡sq~ uq~ppppppptstaticJavascriptq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~{”sq~ uq~pppppt¶/** * Sets whether or not to generate the static * JavaScript. If this is set to 'true', which * is the default, the static JavaScript will be generated. */ ptsetStaticJavascriptq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t9 this.staticJavascript = staticJavascript; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~{”sq~ uq~pppppt¸/** * Gets whether or not to generate the dynamic * JavaScript. If this is set to 'true', which * is the default, the dynamic JavaScript will be generated. */ ptgetDynamicJavascriptq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t) return dynamicJavascript; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€m¯sq~ uq~ppppppptdynamicJavascriptq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~{”sq~ uq~pppppt¸/** * Sets whether or not to generate the dynamic * JavaScript. If this is set to 'true', which * is the default, the dynamic JavaScript will be generated. */ ptsetDynamicJavascriptq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t; this.dynamicJavascript = dynamicJavascript; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~{”sq~ uq~ppppptÍ/** * Gets whether or not to delimit the * JavaScript with html comments. If this is set to 'true', which * is the default, the htmlComment will be surround the JavaScript. */ ptgetHtmlCommentq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t# return htmlComment; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€m×sq~ uq~pppppppt htmlCommentq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~{”sq~ uq~ppppptÉ/** * Sets whether or not to delimit the * JavaScript with html comments. If this is set to 'true', which * is the default, the htmlComment will be surround the JavaScript. */ ptsetHtmlCommentq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t/ this.htmlComment = htmlComment; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~{”sq~ uq~ppppptc/** * Gets the src attribute's value when defining * the html script element. */ ptgetSrcq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t return src; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€mÿsq~ uq~ppppppptsrcq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~{”sq~ uq~ppppptº/** * Sets the src attribute's value when defining * the html script element. The src attribute is only recognized * when the formName attribute is specified. */ ptsetSrcq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t this.src = src; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~{”sq~ uq~pppppt¾/** * Render the JavaScript for to perform validations based on the form name. * * @exception JspException if a JSP exception has occurred */ // Invalidated session pt doStartTagq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~psq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~{”sq~ uq~pppppt¬/** * Gets the key (form name) that will be used * to retrieve a set of validation rules to be * performed on the bean passed in for validation. */ pt getFormNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft return formName; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€n6sq~ uq~ppppppptformNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~{”sq~ uq~pppppt/** * Sets the key (form name) that will be used * to retrieve a set of validation rules to be * performed on the bean passed in for validation. * Specifying a form name places a * <script> </script> tag around the javascript. */ pt setFormNameq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft) this.formName = formName; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~{”sq~ uq~pppppt÷/** * Gets the current page number of a multi-part form. * Only field validations with a matching page numer * will be generated that match the current page number. * Only valid when the formName attribute is set. */ ptgetPageq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft return page; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€n^sq~ uq~ppppppptpageq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxpppq~{”sq~ uq~pppppt÷/** * Sets the current page number of a multi-part form. * Only field validations with a matching page numer * will be generated that match the current page number. * Only valid when the formName attribute is set. */ ptsetPageq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft! this.page = page; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~{”sq~ uq~ppppptè/** * Gets the method name that will be used for the Javascript * validation method name if it has a value. This overrides * the auto-generated method name based on the key (form name) * passed in. */ pt getMethodq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft" return methodName; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€n†sq~ uq~pppppppt methodNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~{”sq~ uq~ppppptè/** * Sets the method name that will be used for the Javascript * validation method name if it has a value. This overrides * the auto-generated method name based on the key (form name) * passed in. */ pt setMethodq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft- this.methodName = methodName; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~{”sq~ uq~pppppt¶/** * Gets whether or not to generate the static * JavaScript. If this is set to 'true', which * is the default, the static JavaScript will be generated. */ ptgetStaticJavascriptq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft( return staticJavascript; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€n®sq~ uq~ppppppptstaticJavascriptq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~{”sq~ uq~pppppt¶/** * Sets whether or not to generate the static * JavaScript. If this is set to 'true', which * is the default, the static JavaScript will be generated. */ ptsetStaticJavascriptq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft9 this.staticJavascript = staticJavascript; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~{”sq~ uq~pppppt¸/** * Gets whether or not to generate the dynamic * JavaScript. If this is set to 'true', which * is the default, the dynamic JavaScript will be generated. */ ptgetDynamicJavascriptq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft) return dynamicJavascript; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€nÖsq~ uq~ppppppptdynamicJavascriptq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~{”sq~ uq~pppppt¸/** * Sets whether or not to generate the dynamic * JavaScript. If this is set to 'true', which * is the default, the dynamic JavaScript will be generated. */ ptsetDynamicJavascriptq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft; this.dynamicJavascript = dynamicJavascript; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~{”sq~ uq~ppppptÍ/** * Gets whether or not to delimit the * JavaScript with html comments. If this is set to 'true', which * is the default, the htmlComment will be surround the JavaScript. */ ptgetHtmlCommentq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft# return htmlComment; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€nþsq~ uq~pppppppt htmlCommentq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~{”sq~ uq~ppppptÉ/** * Sets whether or not to delimit the * JavaScript with html comments. If this is set to 'true', which * is the default, the htmlComment will be surround the JavaScript. */ ptsetHtmlCommentq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft/ this.htmlComment = htmlComment; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~{”sq~ uq~ppppptc/** * Gets the src attribute's value when defining * the html script element. */ ptgetSrcq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft return src; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€o&sq~ uq~ppppppptsrcq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~{”sq~ uq~ppppptº/** * Sets the src attribute's value when defining * the html script element. The src attribute is only recognized * when the formName attribute is specified. */ ptsetSrcq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft this.src = src; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~{”sq~ uq~pppppt¦/** * Render the JavaScript for to perform validations based on the form name. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft)Z StringBuffer results = new StringBuffer(); ModuleConfig config = RequestUtils.getModuleConfig(pageContext); ValidatorResources resources = (ValidatorResources) pageContext.getAttribute( ValidatorPlugIn.VALIDATOR_KEY + config.getPrefix(), PageContext.APPLICATION_SCOPE); Locale locale = null; try { locale = (Locale) pageContext.getAttribute(Globals.LOCALE_KEY, PageContext.SESSION_SCOPE); } catch (IllegalStateException e) { // Invalidated session locale = null; } if (locale == null) { locale = defaultLocale; } Form form = resources.get(locale, formName); if (form != null) { if ("true".equals(dynamicJavascript)) { MessageResources messages = (MessageResources) pageContext.getAttribute( bundle + config.getPrefix(), PageContext.APPLICATION_SCOPE); List lActions = new ArrayList(); List lActionMethods = new ArrayList(); // Get List of actions for this Form for (Iterator i = form.getFields().iterator(); i.hasNext();) { Field field = (Field) i.next(); for (Iterator x = field.getDependencies().iterator(); x.hasNext();) { Object o = x.next(); if (o != null && !lActionMethods.contains(o)) { lActionMethods.add(o); } } } // Create list of ValidatorActions based on lActionMethods for (Iterator i = lActionMethods.iterator(); i.hasNext();) { String depends = (String) i.next(); ValidatorAction va = resources.getValidatorAction(depends); // throw nicer NPE for easier debugging if (va == null) { throw new NullPointerException( "Depends string \"" + depends + "\" was not found in validator-rules.xml."); } String javascript = va.getJavascript(); if (javascript != null && javascript.length() > 0) { lActions.add(va); } else { i.remove(); } } Collections.sort(lActions, new Comparator() { public int compare(Object o1, Object o2) { ValidatorAction va1 = (ValidatorAction) o1; ValidatorAction va2 = (ValidatorAction) o2; if ((va1.getDepends() == null || va1.getDepends().length() == 0) && (va2.getDepends() == null || va2.getDepends().length() == 0)) { return 0; } else if ( (va1.getDepends() != null && va1.getDepends().length() > 0) && (va2.getDepends() == null || va2.getDepends().length() == 0)) { return 1; } else if ( (va1.getDepends() == null || va1.getDepends().length() == 0) && (va2.getDepends() != null && va2.getDepends().length() > 0)) { return -1; } else { return va1.getDependencies().size() - va2.getDependencies().size(); } } }); String methods = null; for (Iterator i = lActions.iterator(); i.hasNext();) { ValidatorAction va = (ValidatorAction) i.next(); if (methods == null) { methods = va.getMethod() + "(form)"; } else { methods += " && " + va.getMethod() + "(form)"; } } results.append(getJavascriptBegin(methods)); for (Iterator i = lActions.iterator(); i.hasNext();) { ValidatorAction va = (ValidatorAction) i.next(); String jscriptVar = null; String functionName = null; if (va.getJsFunctionName() != null && va.getJsFunctionName().length() > 0) { functionName = va.getJsFunctionName(); } else { functionName = va.getName(); } results.append(" function " + functionName + " () { \n"); for (Iterator x = form.getFields().iterator(); x.hasNext();) { Field field = (Field) x.next(); // Skip indexed fields for now until there is // a good way to handle error messages (and the length of the list (could retrieve from scope?)) if (!field.isIndexed() && field.getPage() == page && field.isDependency(va.getName())) { String message = Resources.getMessage(messages, locale, va, field); message = (message != null ? message : ""); jscriptVar = getNextVar(jscriptVar); results.append( " this." + jscriptVar + " = new Array(\"" + field.getKey() + "\", \"" + message + "\", "); results.append("new Function (\"varName\", \""); Map vars = field.getVars(); // Loop through the field's variables. for (Iterator varsIterator = vars.keySet().iterator(); varsIterator.hasNext();) { String varName = (String) varsIterator.next(); Var var = (Var) vars.get(varName); String varValue = var.getValue(); String jsType = var.getJsType(); // skip requiredif variables field, fieldIndexed, fieldTest, fieldValue if (varName.startsWith("field")){ continue; } if (Var.JSTYPE_INT.equalsIgnoreCase(jsType)) { results.append( "this." + varName + "=" + ValidatorUtil.replace(varValue, "\\", "\\\\") + "; "); } else if (Var.JSTYPE_REGEXP.equalsIgnoreCase(jsType)) { results.append( "this." + varName + "=/" + ValidatorUtil.replace(varValue, "\\", "\\\\") + "/; "); } else if (Var.JSTYPE_STRING.equalsIgnoreCase(jsType)) { results.append( "this." + varName + "='" + ValidatorUtil.replace(varValue, "\\", "\\\\") + "'; "); // So everyone using the latest format doesn't need to change their xml files immediately. } else if ("mask".equalsIgnoreCase(varName)) { results.append( "this." + varName + "=/" + ValidatorUtil.replace(varValue, "\\", "\\\\") + "/; "); } else { results.append( "this." + varName + "='" + ValidatorUtil.replace(varValue, "\\", "\\\\") + "'; "); } } results.append(" return this[varName];\"));\n"); } } results.append(" } \n\n"); } } else if ("true".equals(staticJavascript)) { results.append(this.getStartElement()); if ("true".equals(htmlComment)) { results.append(htmlBeginComment); } } } if ("true".equals(staticJavascript)) { results.append(getJavascriptStaticMethods(resources)); } if (form != null && ("true".equals(dynamicJavascript) || "true".equals(staticJavascript))) { results.append(getJavascriptEnd()); } // Print this field to our output writer JspWriter writer = pageContext.getOut(); try { writer.print(results.toString()); } catch (IOException e) { throw new JspException(e.getMessage()); //throw new JspException(messages.getMessage("common.io", e.toString())); } // Continue processing this page return (EVAL_BODY_TAG); sq~ uq~q~pppq~fq~fxsq~isq~ uq~ppppq~{”sq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft' super.release(); bundle = Globals.MESSAGES_KEY; formName = null; page = 0; methodName = null; staticJavascript = "true"; dynamicJavascript = "true"; htmlComment = "true"; cdata = "true"; src = null; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€o^sq~ uq~ppppppptmethodsq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~{”sq~ uq~ppppptU/** * Returns the opening script element and some initial javascript. */ ptgetJavascriptBeginq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ftÚ StringBuffer sb = new StringBuffer(); String name = formName.substring(0, 1).toUpperCase() + formName.substring(1, formName.length()); sb.append(this.getStartElement()); if (this.isXhtml() && "true".equalsIgnoreCase(this.cdata)) { sb.append("\r\n"); } sb.append("\n\n"); return sb.toString(); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€o†sq~ uq~ppppppptinputq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~{”sq~ uq~pppppt /** * The value null will be returned at the end of the sequence. *     ex: "zz" will return null */ pt getNextVarq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~·gxq~ft if (input == null) { return "aa"; } input = input.toLowerCase(); for (int i = input.length(); i > 0; i--) { int pos = i - 1; char c = input.charAt(pos); c++; if (c <= 'z') { if (i == 0) { return c + input.substring(pos, input.length()); } else if (i == input.length()) { return input.substring(0, pos) + c; } else { return input.substring(0, pos) + c + input.substring(pos, input.length() - 1); } } else { input = replaceChar(input, pos, 'a'); } } return null; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€ožsq~ uq~ppppppptinputq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq€ožsq~ uq~ppppppptposq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~bsq~ uq~ppppq€ožsq~ uq~ppppppptcq~cxsq~ uq~pppppq~fq~gq~fq~Epq~hxpq~{”sq~ uq~ppppptJ/** * Replaces a single character in a String */ pt replaceCharq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~·gxq~ft4 if (pos == 0) { return c + input.substring(pos, input.length()); } else if (pos == input.length()) { return input.substring(0, pos) + c; } else { return input.substring(0, pos) + c + input.substring(pos, input.length() - 1); } sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~{”sq~ uq~pppppt`/** * Constructs the beginning <script> element depending on xhtml status. */ ptgetStartElementq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~·gxq~ft™ StringBuffer start = new StringBuffer("\r\n"); } // Print this value to our output writer JspWriter writer = pageContext.getOut(); try { writer.print(results.toString()); } catch (IOException e) { throw new JspException (messages.getMessage("common.io", e.toString())); } // Restore original property values used to invoke this tag. Needed // for tag reuse to work correctly. name = savedName; scope = savedScope; type = savedType; // Continue processing this page return (EVAL_PAGE); sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~ppppq~_gsq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tW super.release(); action = null; appConfig = null; enctype = null; focus = null; mapping = null; method = "POST"; name = null; onreset = null; onsubmit = null; scope = "session"; servlet = null; style = null; styleClass = null; styleId = null; target = null; type = null; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~_gsq~ uq~ppppptF// ------------------------------------------------------ Protected Methods /** * Return the form action converted into an action mapping path. The * value of the action property is manipulated as follows in * computing the name of the requested mapping: *

        *
      • Any filename extension is removed (on the theory that extension * mapping is being used to select the controller servlet).
      • *
      • If the resulting value does not start with a slash, then a * slash is prepended.
      • *
      */ ptgetActionMappingNameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥tÔ String value = action; int question = action.indexOf("?"); if (question >= 0) value = value.substring(0, question); int slash = value.lastIndexOf("/"); int period = value.lastIndexOf("."); if ((period >= 0) && (period > slash)) value = value.substring(0, period); if (value.startsWith("/")) return (value); else return ("/" + value); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~_gsq~ uq~ppppptR/** * Return the form action converted into a server-relative URL. */ ptgetActionMappingURLq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥tq HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); StringBuffer value = new StringBuffer(request.getContextPath()); ApplicationConfig config = (ApplicationConfig) pageContext.getRequest().getAttribute(Action.APPLICATION_KEY); if (config != null) { value.append(config.getPrefix()); } // Use our servlet mapping, if one is specified String servletMapping = (String) pageContext.getAttribute(Action.SERVLET_KEY, PageContext.APPLICATION_SCOPE); if (servletMapping != null) { String queryString = null; int question = action.indexOf("?"); if (question >= 0) { queryString = action.substring(question); } String actionMapping = getActionMappingName(); if (servletMapping.startsWith("*.")) { value.append(actionMapping); value.append(servletMapping.substring(1)); } else if (servletMapping.endsWith("/*")) { value.append(servletMapping.substring (0, servletMapping.length() - 2)); value.append(actionMapping); } else if (servletMapping.equals("/")) { value.append(actionMapping); } if (queryString != null) { value.append(queryString); } } // Otherwise, assume extension mapping is in use and extension is // already included in the action property else { if (!action.startsWith("/")) { value.append("/"); } value.append(action); } // Return the completed value return (value.toString()); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~_gsq~ uq~ppppptÚ/** * Look up values for the name, scope, and * type properties if necessary. * * @exception JspException if a required value cannot be looked up */ ptlookupq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥t ¿ // Look up the application configuration information we need appConfig = (ApplicationConfig) pageContext.getRequest().getAttribute(Action.APPLICATION_KEY); if (appConfig == null) { // Backwards compatibility hack appConfig = (ApplicationConfig) pageContext.getServletContext().getAttribute(Action.APPLICATION_KEY); } if (appConfig == null) { JspException e = new JspException (messages.getMessage("formTag.collections")); pageContext.setAttribute(Action.EXCEPTION_KEY, e, PageContext.REQUEST_SCOPE); throw e; } servlet = (ActionServlet) pageContext.getServletContext().getAttribute(Action.ACTION_SERVLET_KEY); // Look up the action mapping we will be submitting to String mappingName = getActionMappingName(); mapping = (ActionMapping) appConfig.findActionConfig(mappingName); if (mapping == null) { JspException e = new JspException (messages.getMessage("formTag.mapping", mappingName)); pageContext.setAttribute(Action.EXCEPTION_KEY, e, PageContext.REQUEST_SCOPE); throw e; } // Were the required values already specified? if (name != null) { if (scope == null) scope = "session"; if (type == null) { JspException e = new JspException (messages.getMessage("formTag.nameType")); pageContext.setAttribute(Action.EXCEPTION_KEY, e, PageContext.REQUEST_SCOPE); throw e; } return; } // Look up the form bean definition FormBeanConfig formBeanConfig = appConfig.findFormBeanConfig(mapping.getName()); if (formBeanConfig == null) { JspException e = new JspException (messages.getMessage("formTag.formBean", mapping.getName())); pageContext.setAttribute(Action.EXCEPTION_KEY, e, PageContext.REQUEST_SCOPE); throw e; } // Calculate the required values name = mapping.getAttribute(); scope = mapping.getScope(); type = formBeanConfig.getType(); sq~ uq~q~pppq~¥q~¥xsq~(sq~ uq~ppppq~_gsq~ uq~pppppt¯/** * The name of the form bean to (create and) use. This is either the same * as the 'name' attribute, if that was specified, or is obtained from the * associated ActionMapping otherwise. */ /** * The name of the form bean to (create and) use. This is either the same * as the 'name' attribute, if that was specified, or is obtained from the * associated ActionMapping otherwise. */ /** * The name of the form bean to (create and) use. This is either the same * as the 'name' attribute, if that was specified, or is obtained from the * associated ActionMapping otherwise. */ ptbeanNameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xpppt nullq~–q~–q~–xsq~(sq~ uq~ppppq~_gsq~ uq~ppppptµ/** * The scope of the form bean to (create and) use. This is either the same * as the 'scope' attribute, if that was specified, or is obtained from the * associated ActionMapping otherwise. */ /** * The scope of the form bean to (create and) use. This is either the same * as the 'scope' attribute, if that was specified, or is obtained from the * associated ActionMapping otherwise. */ /** * The scope of the form bean to (create and) use. This is either the same * as the 'scope' attribute, if that was specified, or is obtained from the * associated ActionMapping otherwise. */ pt beanScopeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xpppt nullq~–q~–q~–xsq~(sq~ uq~ppppq~_gsq~ uq~pppppt¯/** * The type of the form bean to (create and) use. This is either the same * as the 'type' attribute, if that was specified, or is obtained from the * associated ActionMapping otherwise. */ /** * The type of the form bean to (create and) use. This is either the same * as the 'type' attribute, if that was specified, or is obtained from the * associated ActionMapping otherwise. */ /** * The type of the form bean to (create and) use. This is either the same * as the 'type' attribute, if that was specified, or is obtained from the * associated ActionMapping otherwise. */ ptbeanTypeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xpppt nullq~–q~–q~–xsq~isq~ uq~ppppq~_gsq~ uq~pppppt[// ------------------------------------------------------------- Properties /** * Return the name of the form bean corresponding to this tag. There is * no corresponding setter method; this method exists so that the nested * tag classes can obtain the actual bean name derived from other * attributes of the tag. */ pt getBeanNameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t$ return beanName; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~_gsq~ uq~ppppptS/** * Return the action URL to which this form should be submitted. */ pt getActionq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t) return (this.action); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€Þ:sq~ uq~ppppppptactionq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~_gsq~ uq~pppppt/** * Set the action URL to which this form should be submitted. * * @param action The new action URL */ pt setActionq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t) this.action = action; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~_gsq~ uq~ppppptQ/** * Return the content encoding used when submitting this form. */ pt getEnctypeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t* return (this.enctype); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€Þbsq~ uq~ppppppptenctypeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~_gsq~ uq~pppppt†/** * Set the content encoding used when submitting this form. * * @param enctype The new content encoding */ pt setEnctypeq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t+ this.enctype = enctype; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~_gsq~ uq~pppppt@/** * Return the focus field name for this form. */ ptgetFocusq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t( return (this.focus); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€ÞŠsq~ uq~ppppppptfocusq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~_gsq~ uq~pppppts/** * Set the focus field name for this form. * * @param focus The new focus field name */ ptsetFocusq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t' this.focus = focus; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~_gsq~ uq~ppppptO/** * Return the request method used when submitting this form. */ pt getMethodq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t) return (this.method); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€Þ²sq~ uq~ppppppptmethodq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~_gsq~ uq~pppppt/** * Set the request method used when submitting this form. * * @param method The new request method */ pt setMethodq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t) this.method = method; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~_gsq~ uq~pppppt@/** * Return the attribute key name of our bean. */ ptgetNameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t' return (this.name); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€ÞÚsq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~_gsq~ uq~ppppptt/** * Set the attribute key name of our bean. * * @param name The new attribute key name */ ptsetNameq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t% this.name = name; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~_gsq~ uq~pppppt6/** * Return the onReset event script. */ pt getOnresetq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t* return (this.onreset); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€ßsq~ uq~ppppppptonResetq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~_gsq~ uq~ppppptg/** * Set the onReset event script. * * @param onReset The new event script */ pt setOnresetq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t+ this.onreset = onReset; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~_gsq~ uq~pppppt7/** * Return the onSubmit event script. */ pt getOnsubmitq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t+ return (this.onsubmit); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€ß*sq~ uq~ppppppptonSubmitq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~_gsq~ uq~pppppti/** * Set the onSubmit event script. * * @param onSubmit The new event script */ pt setOnsubmitq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t- this.onsubmit = onSubmit; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~_gsq~ uq~pppppt=/** * Return the attribute scope of our bean. */ ptgetScopeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t( return (this.scope); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€ßRsq~ uq~ppppppptscopeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~_gsq~ uq~pppppto/** * Set the attribute scope of our bean. * * @param scope The new attribute scope */ ptsetScopeq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t' this.scope = scope; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~_gsq~ uq~pppppt>/** * Return the style attribute for this tag. */ ptgetStyleq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t( return (this.style); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€ßzsq~ uq~ppppppptstyleq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~_gsq~ uq~ppppptp/** * Set the style attribute for this tag. * * @param style The new style attribute */ ptsetStyleq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t' this.style = style; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~_gsq~ uq~pppppt:/** * Return the style class for this tag. */ pt getStyleClassq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t- return (this.styleClass); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€ß¢sq~ uq~pppppppt styleClassq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~_gsq~ uq~ppppptm/** * Set the style class for this tag. * * @param styleClass The new style class */ pt setStyleClassq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t1 this.styleClass = styleClass; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~_gsq~ uq~pppppt?/** * Return the style identifier for this tag. */ pt getStyleIdq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t* return (this.styleId); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€ßÊsq~ uq~ppppppptstyleIdq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~_gsq~ uq~ppppptt/** * Set the style identifier for this tag. * * @param styleId The new style identifier */ pt setStyleIdq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t+ this.styleId = styleId; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~_gsq~ uq~pppppt//** * Return the window target. */ pt getTargetq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t) return (this.target); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€ßòsq~ uq~pppppppttargetq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~_gsq~ uq~pppppt`/** * Set the window target. * * @param target The new window target */ pt setTargetq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t) this.target = target; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~_gsq~ uq~pppppt8/** * Return the Java class of our bean. */ ptgetTypeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t' return (this.type); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€àsq~ uq~pppppppttypeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~_gsq~ uq~ppppptd/** * Set the Java class of our bean. * * @param type The new Java class */ ptsetTypeq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t% this.type = type; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~_gsq~ uq~ppppptÍ// --------------------------------------------------------- Public Methods /** * Render the beginning of this form. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tK // Look up the form bean name, scope, and type if necessary lookup(); // Create an appropriate "form" element based on our parameters HttpServletResponse response = (HttpServletResponse) pageContext.getResponse(); StringBuffer results = new StringBuffer(""); // Add a transaction token (if present in our session) HttpSession session = pageContext.getSession(); if (session != null) { String token = (String) session.getAttribute(Action.TRANSACTION_TOKEN_KEY); if (token != null) { results.append(""); } } // Print this field to our output writer ResponseUtils.write(pageContext, results.toString()); // Store this tag itself as a page attribute pageContext.setAttribute(Constants.FORM_KEY, this, PageContext.REQUEST_SCOPE); // Locate or create the bean associated with our form int scope = PageContext.SESSION_SCOPE; if ("request".equals(beanScope)) { scope = PageContext.REQUEST_SCOPE; } Object bean = pageContext.getAttribute(beanName, scope); if (bean == null) { if (type != null) { // Backwards compatibility - use explicitly specified values try { bean = RequestUtils.applicationInstance(beanType); if (bean != null) { ((ActionForm) bean).setServlet(servlet); } } catch (Exception e) { throw new JspException(messages.getMessage( "formTag.create", type, e.toString())); } } else { // New and improved - use the values from the action mapping bean = RequestUtils.createActionForm( (HttpServletRequest) pageContext.getRequest(), mapping, appConfig, servlet); } if (bean instanceof ActionForm) { ((ActionForm) bean).reset (mapping, (HttpServletRequest) pageContext.getRequest()); } if (bean == null) { throw new JspException (messages.getMessage("formTag.create", beanType)); } pageContext.setAttribute(beanName, bean, scope); } pageContext.setAttribute(Constants.BEAN_KEY, bean, PageContext.REQUEST_SCOPE); // Continue processing this page return (EVAL_BODY_INCLUDE); sq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq~_gsq~ uq~ppppptz/** * Render the end of this form. * * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t U // Remove the page scope attributes we created pageContext.removeAttribute(Constants.BEAN_KEY, PageContext.REQUEST_SCOPE); pageContext.removeAttribute(Constants.FORM_KEY, PageContext.REQUEST_SCOPE); // Render a tag representing the end of our current form StringBuffer results = new StringBuffer(""); // Render JavaScript to set the input focus if required if (focus != null) { String tempFocus = focus; StringBuffer refocus = new StringBuffer("["); if (tempFocus.indexOf("[") > 0) { StringTokenizer st = new StringTokenizer(tempFocus, "["); if (st.countTokens() == 2) { tempFocus = st.nextToken(); refocus.append(st.nextToken()); } } results.append("\r\n"); results.append("\r\n"); } // Print this value to our output writer JspWriter writer = pageContext.getOut(); try { writer.print(results.toString()); } catch (IOException e) { throw new JspException (messages.getMessage("common.io", e.toString())); } // Continue processing this page return (EVAL_PAGE); sq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq~_gsq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t« super.release(); action = null; appConfig = null; enctype = null; focus = null; mapping = null; method = null; name = null; onreset = null; onsubmit = null; scope = null; servlet = null; style = null; styleClass = null; styleId = null; target = null; type = null; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~_gsq~ uq~ppppptF// ------------------------------------------------------ Protected Methods /** * Return the form action converted into an action mapping path. The * value of the action property is manipulated as follows in * computing the name of the requested mapping: *
        *
      • Any filename extension is removed (on the theory that extension * mapping is being used to select the controller servlet).
      • *
      • If the resulting value does not start with a slash, then a * slash is prepended.
      • *
      */ ptgetActionMappingNameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–tÿ String value = action; int question = action.indexOf("?"); if (question >= 0) { value = value.substring(0, question); } int slash = value.lastIndexOf("/"); int period = value.lastIndexOf("."); if ((period >= 0) && (period > slash)) { value = value.substring(0, period); } if (value.startsWith("/")) { return (value); } else { return ("/" + value); } sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~_gsq~ uq~ppppptR/** * Return the form action converted into a server-relative URL. */ ptgetActionMappingURLq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–ti HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); StringBuffer value = new StringBuffer(request.getContextPath()); ApplicationConfig config = (ApplicationConfig) pageContext.getRequest().getAttribute(Action.APPLICATION_KEY); if (config != null) { value.append(config.getPrefix()); } // Use our servlet mapping, if one is specified String servletMapping = (String) pageContext.getAttribute(Action.SERVLET_KEY, PageContext.APPLICATION_SCOPE); if (servletMapping != null) { String queryString = null; int question = action.indexOf("?"); if (question >= 0) { queryString = action.substring(question); } String actionMapping = getActionMappingName(); if (servletMapping.startsWith("*.")) { value.append(actionMapping); value.append(servletMapping.substring(1)); } else if (servletMapping.endsWith("/*")) { value.append(servletMapping.substring (0, servletMapping.length() - 2)); value.append(actionMapping); } else if (servletMapping.equals("/")) { value.append(actionMapping); } if (queryString != null) { value.append(queryString); } } // Otherwise, assume extension mapping is in use and extension is // already included in the action property else { if (!action.startsWith("/")) { value.append("/"); } value.append(action); } // Return the completed value return (value.toString()); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~_gsq~ uq~ppppptÚ/** * Look up values for the name, scope, and * type properties if necessary. * * @exception JspException if a required value cannot be looked up */ ptlookupq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–t // Look up the application module configuration information we need appConfig = RequestUtils.getApplicationConfig(pageContext); if (appConfig == null) { JspException e = new JspException (messages.getMessage("formTag.collections")); pageContext.setAttribute(Action.EXCEPTION_KEY, e, PageContext.REQUEST_SCOPE); throw e; } servlet = (ActionServlet) pageContext.getServletContext().getAttribute(Action.ACTION_SERVLET_KEY); // Look up the action mapping we will be submitting to String mappingName = getActionMappingName(); mapping = (ActionMapping) appConfig.findActionConfig(mappingName); if (mapping == null) { JspException e = new JspException (messages.getMessage("formTag.mapping", mappingName)); pageContext.setAttribute(Action.EXCEPTION_KEY, e, PageContext.REQUEST_SCOPE); throw e; } // Were the required values already specified? if (name != null) { if (type == null) { JspException e = new JspException (messages.getMessage("formTag.nameType")); pageContext.setAttribute(Action.EXCEPTION_KEY, e, PageContext.REQUEST_SCOPE); throw e; } beanName = name; beanScope = (scope == null ? "session" : scope); beanType = type; return; } // Look up the form bean definition FormBeanConfig formBeanConfig = appConfig.findFormBeanConfig(mapping.getName()); if (formBeanConfig == null) { JspException e = new JspException (messages.getMessage("formTag.formBean", mapping.getName())); pageContext.setAttribute(Action.EXCEPTION_KEY, e, PageContext.REQUEST_SCOPE); throw e; } // Calculate the required values beanName = mapping.getAttribute(); beanScope = mapping.getScope(); beanType = formBeanConfig.getType(); sq~ uq~q~pppq~–q~–xsq~(sq~ uq~ppppq~_gsq~ uq~pppppt|/** * The module configuration for our module. */ /** * The module configuration for our module. */ pt moduleConfigq~{xsq~ uq~pppppq~~q~q~~q~ºpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xpppt nullq~~q~~q~~xsq~(sq~ uq~ppppq~_gsq~ uq~pppppt/** * The index in the focus field array to receive focus. This only applies if the field * given in the focus attribute is actually an array of fields. This allows a specific * field in a radio button array to receive focus while still allowing indexed field * names like "myRadioButtonField[1]" to be passed in the focus attribute. * @since Struts 1.1 */ /** * The index in the focus field array to receive focus. This only applies if the field * given in the focus attribute is actually an array of fields. This allows a specific * field in a radio button array to receive focus while still allowing indexed field * names like "myRadioButtonField[1]" to be passed in the focus attribute. * @since Struts 1.1 */ pt focusIndexq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xpppt nullq~~q~~q~~xsq~(sq~ uq~ppppq~_gsq~ uq~ppppptZ/** * The line ending string. */ /** * The line ending string. */ ptlineEndq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~ xpppt% System.getProperty("line.separator")q~~q~~q~~xsq~isq~ uq~ppppq~_gsq~ uq~pppppt[// ------------------------------------------------------------- Properties /** * Return the name of the form bean corresponding to this tag. There is * no corresponding setter method; this method exists so that the nested * tag classes can obtain the actual bean name derived from other * attributes of the tag. */ pt getBeanNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t$ return beanName; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~_gsq~ uq~ppppptS/** * Return the action URL to which this form should be submitted. */ pt getActionq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t) return (this.action); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€àÝsq~ uq~ppppppptactionq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~_gsq~ uq~pppppt/** * Set the action URL to which this form should be submitted. * * @param action The new action URL */ pt setActionq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t) this.action = action; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~_gsq~ uq~ppppptQ/** * Return the content encoding used when submitting this form. */ pt getEnctypeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t* return (this.enctype); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€ásq~ uq~ppppppptenctypeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~_gsq~ uq~pppppt†/** * Set the content encoding used when submitting this form. * * @param enctype The new content encoding */ pt setEnctypeq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t+ this.enctype = enctype; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~_gsq~ uq~pppppt@/** * Return the focus field name for this form. */ ptgetFocusq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t( return (this.focus); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€á-sq~ uq~ppppppptfocusq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~_gsq~ uq~pppppts/** * Set the focus field name for this form. * * @param focus The new focus field name */ ptsetFocusq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t' this.focus = focus; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~_gsq~ uq~ppppptO/** * Return the request method used when submitting this form. */ pt getMethodq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t) return (this.method); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€áUsq~ uq~ppppppptmethodq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~_gsq~ uq~pppppt/** * Set the request method used when submitting this form. * * @param method The new request method */ pt setMethodq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t) this.method = method; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~_gsq~ uq~pppppt@/** * Return the attribute key name of our bean. */ ptgetNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t' return (this.name); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€á}sq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~_gsq~ uq~ppppptt/** * Set the attribute key name of our bean. * * @param name The new attribute key name */ ptsetNameq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t% this.name = name; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~_gsq~ uq~pppppt6/** * Return the onReset event script. */ pt getOnresetq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t* return (this.onreset); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€á¥sq~ uq~ppppppptonResetq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~_gsq~ uq~ppppptg/** * Set the onReset event script. * * @param onReset The new event script */ pt setOnresetq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t+ this.onreset = onReset; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~_gsq~ uq~pppppt7/** * Return the onSubmit event script. */ pt getOnsubmitq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t+ return (this.onsubmit); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€áÍsq~ uq~ppppppptonSubmitq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~_gsq~ uq~pppppti/** * Set the onSubmit event script. * * @param onSubmit The new event script */ pt setOnsubmitq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t- this.onsubmit = onSubmit; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~_gsq~ uq~pppppt=/** * Return the attribute scope of our bean. */ ptgetScopeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t( return (this.scope); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€áõsq~ uq~ppppppptscopeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~_gsq~ uq~pppppto/** * Set the attribute scope of our bean. * * @param scope The new attribute scope */ ptsetScopeq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t' this.scope = scope; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~_gsq~ uq~pppppt>/** * Return the style attribute for this tag. */ ptgetStyleq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t( return (this.style); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€âsq~ uq~ppppppptstyleq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~_gsq~ uq~ppppptp/** * Set the style attribute for this tag. * * @param style The new style attribute */ ptsetStyleq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t' this.style = style; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~_gsq~ uq~pppppt:/** * Return the style class for this tag. */ pt getStyleClassq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t- return (this.styleClass); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€âEsq~ uq~pppppppt styleClassq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~_gsq~ uq~ppppptm/** * Set the style class for this tag. * * @param styleClass The new style class */ pt setStyleClassq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t1 this.styleClass = styleClass; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~_gsq~ uq~pppppt?/** * Return the style identifier for this tag. */ pt getStyleIdq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t* return (this.styleId); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€âmsq~ uq~ppppppptstyleIdq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~_gsq~ uq~ppppptt/** * Set the style identifier for this tag. * * @param styleId The new style identifier */ pt setStyleIdq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t+ this.styleId = styleId; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~_gsq~ uq~pppppt//** * Return the window target. */ pt getTargetq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t) return (this.target); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€â•sq~ uq~pppppppttargetq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~_gsq~ uq~pppppt`/** * Set the window target. * * @param target The new window target */ pt setTargetq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t) this.target = target; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~_gsq~ uq~pppppt8/** * Return the Java class of our bean. */ ptgetTypeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t' return (this.type); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€â½sq~ uq~pppppppttypeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~_gsq~ uq~ppppptd/** * Set the Java class of our bean. * * @param type The new Java class */ ptsetTypeq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t% this.type = type; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~_gsq~ uq~ppppptÍ// --------------------------------------------------------- Public Methods /** * Render the beginning of this form. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~to // Look up the form bean name, scope, and type if necessary this.lookup(); // Create an appropriate "form" element based on our parameters StringBuffer results = new StringBuffer(); results.append(this.renderFormStartElement()); results.append(this.renderToken()); ResponseUtils.write(pageContext, results.toString()); // Store this tag itself as a page attribute pageContext.setAttribute(Constants.FORM_KEY, this, PageContext.REQUEST_SCOPE); this.initFormBean(); return (EVAL_BODY_INCLUDE); sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~_gsq~ uq~pppppt€/** * Locate or create the bean associated with our form. * @throws JspException * @since Struts 1.1 */ pt initFormBeanq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t^ int scope = PageContext.SESSION_SCOPE; if ("request".equalsIgnoreCase(beanScope)) { scope = PageContext.REQUEST_SCOPE; } Object bean = pageContext.getAttribute(beanName, scope); if (bean == null) { if (type != null) { // Backwards compatibility - use explicitly specified values try { bean = RequestUtils.applicationInstance(beanType); if (bean != null) { ((ActionForm) bean).setServlet(servlet); } } catch (Exception e) { throw new JspException( messages.getMessage("formTag.create", type, e.toString())); } } else { // New and improved - use the values from the action mapping bean = RequestUtils.createActionForm( (HttpServletRequest) pageContext.getRequest(), mapping, moduleConfig, servlet); } if (bean instanceof ActionForm) { ((ActionForm) bean).reset(mapping, (HttpServletRequest) pageContext.getRequest()); } if (bean == null) { throw new JspException(messages.getMessage("formTag.create", beanType)); } pageContext.setAttribute(beanName, bean, scope); } pageContext.setAttribute(Constants.BEAN_KEY, bean, PageContext.REQUEST_SCOPE); sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~_gsq~ uq~ppppptŒ/** * Generates the opening <form> element with appropriate * attributes. * @since Struts 1.1 */ ptrenderFormStartElementq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t HttpServletResponse response = (HttpServletResponse) this.pageContext.getResponse(); StringBuffer results = new StringBuffer(""); return results.toString(); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~_gsq~ uq~pppppt©/** * Generates a hidden input field with token information, if any. * @return A hidden input field containing the token. * @since Struts 1.1 */ pt renderTokenq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~tó StringBuffer results = new StringBuffer(); HttpSession session = pageContext.getSession(); if (session != null) { String token = (String) session.getAttribute(Globals.TRANSACTION_TOKEN_KEY); if (token != null) { results.append(""); } else { results.append("\">"); } } } return results.toString(); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~_gsq~ uq~ppppptz/** * Render the end of this form. * * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t‰ // Remove the page scope attributes we created pageContext.removeAttribute(Constants.BEAN_KEY, PageContext.REQUEST_SCOPE); pageContext.removeAttribute(Constants.FORM_KEY, PageContext.REQUEST_SCOPE); // Render a tag representing the end of our current form StringBuffer results = new StringBuffer(""); // Render JavaScript to set the input focus if required if (this.focus != null) { results.append(this.renderFocusJavascript()); } // Print this value to our output writer JspWriter writer = pageContext.getOut(); try { writer.print(results.toString()); } catch (IOException e) { throw new JspException(messages.getMessage("common.io", e.toString())); } // Continue processing this page return (EVAL_PAGE); sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~_gsq~ uq~ppppptŸ/** * Generates javascript to set the initial focus to the form element given in the * tag's "focus" attribute. * @since Struts 1.1 */ ptrenderFocusJavascriptq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t” StringBuffer results = new StringBuffer(); results.append(lineEnd); results.append(""); results.append(lineEnd); return results.toString(); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~_gsq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tÊ super.release(); action = null; moduleConfig = null; enctype = null; focus = null; focusIndex = null; mapping = null; method = null; name = null; onreset = null; onsubmit = null; scope = null; servlet = null; style = null; styleClass = null; styleId = null; target = null; type = null; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~_gsq~ uq~pppppt'// ------------------------------------------------------ Protected Methods /** * Look up values for the name, scope, and * type properties if necessary. * * @exception JspException if a required value cannot be looked up */ ptlookupq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~tH // Look up the module configuration information we need moduleConfig = RequestUtils.getModuleConfig(pageContext); if (moduleConfig == null) { JspException e = new JspException(messages.getMessage("formTag.collections")); pageContext.setAttribute(Globals.EXCEPTION_KEY, e, PageContext.REQUEST_SCOPE); throw e; } servlet = (ActionServlet) pageContext.getServletContext().getAttribute( Globals.ACTION_SERVLET_KEY); // Look up the action mapping we will be submitting to String mappingName = RequestUtils.getActionMappingName(action); mapping = (ActionMapping) moduleConfig.findActionConfig(mappingName); if (mapping == null) { JspException e = new JspException(messages.getMessage("formTag.mapping", mappingName)); pageContext.setAttribute(Globals.EXCEPTION_KEY, e, PageContext.REQUEST_SCOPE); throw e; } // Were the required values already specified? if (name != null) { if (type == null) { JspException e = new JspException(messages.getMessage("formTag.nameType")); pageContext.setAttribute(Globals.EXCEPTION_KEY, e, PageContext.REQUEST_SCOPE); throw e; } beanName = name; beanScope = (scope == null ? "session" : scope); beanType = type; return; } // Look up the form bean definition FormBeanConfig formBeanConfig = moduleConfig.findFormBeanConfig(mapping.getName()); if (formBeanConfig == null) { JspException e = new JspException(messages.getMessage("formTag.formBean", mapping.getName())); pageContext.setAttribute(Globals.EXCEPTION_KEY, e, PageContext.REQUEST_SCOPE); throw e; } // Calculate the required values beanName = mapping.getAttribute(); beanScope = mapping.getScope(); beanType = formBeanConfig.getType(); sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~_gsq~ uq~ppppptF/** * Returns true if this tag should render as xhtml. */ ptisXhtmlq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~d1xq~~t> return RequestUtils.isXhtml(this.pageContext); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~_gsq~ uq~ppppptD/** * Returns the focusIndex. * @return String */ pt getFocusIndexq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t" return focusIndex; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€ãusq~ uq~pppppppt focusIndexq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~_gsq~ uq~ppppptZ/** * Sets the focusIndex. * @param focusIndex The focusIndex to set */ pt setFocusIndexq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t- this.focusIndex = focusIndex; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~_gsq~ uq~pppppt[// ------------------------------------------------------------- Properties /** * Return the name of the form bean corresponding to this tag. There is * no corresponding setter method; this method exists so that the nested * tag classes can obtain the actual bean name derived from other * attributes of the tag. */ pt getBeanNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft$ return beanName; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~_gsq~ uq~ppppptS/** * Return the action URL to which this form should be submitted. */ pt getActionq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft) return (this.action); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€ã­sq~ uq~ppppppptactionq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~_gsq~ uq~pppppt/** * Set the action URL to which this form should be submitted. * * @param action The new action URL */ pt setActionq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft) this.action = action; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~_gsq~ uq~ppppptQ/** * Return the content encoding used when submitting this form. */ pt getEnctypeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft* return (this.enctype); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€ãÕsq~ uq~ppppppptenctypeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~_gsq~ uq~pppppt†/** * Set the content encoding used when submitting this form. * * @param enctype The new content encoding */ pt setEnctypeq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft+ this.enctype = enctype; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~_gsq~ uq~pppppt@/** * Return the focus field name for this form. */ ptgetFocusq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft( return (this.focus); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€ãýsq~ uq~ppppppptfocusq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~_gsq~ uq~pppppts/** * Set the focus field name for this form. * * @param focus The new focus field name */ ptsetFocusq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft' this.focus = focus; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~_gsq~ uq~ppppptO/** * Return the request method used when submitting this form. */ pt getMethodq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft) return (this.method); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€ä%sq~ uq~ppppppptmethodq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~_gsq~ uq~pppppt/** * Set the request method used when submitting this form. * * @param method The new request method */ pt setMethodq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft) this.method = method; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~_gsq~ uq~pppppt@/** * Return the attribute key name of our bean. */ ptgetNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft' return (this.name); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€äMsq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~_gsq~ uq~ppppptt/** * Set the attribute key name of our bean. * * @param name The new attribute key name */ ptsetNameq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft% this.name = name; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~_gsq~ uq~pppppt6/** * Return the onReset event script. */ pt getOnresetq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft* return (this.onreset); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€äusq~ uq~ppppppptonResetq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~_gsq~ uq~ppppptg/** * Set the onReset event script. * * @param onReset The new event script */ pt setOnresetq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft+ this.onreset = onReset; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~_gsq~ uq~pppppt7/** * Return the onSubmit event script. */ pt getOnsubmitq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft+ return (this.onsubmit); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€äsq~ uq~ppppppptonSubmitq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~_gsq~ uq~pppppti/** * Set the onSubmit event script. * * @param onSubmit The new event script */ pt setOnsubmitq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft- this.onsubmit = onSubmit; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~_gsq~ uq~pppppt=/** * Return the attribute scope of our bean. */ ptgetScopeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft( return (this.scope); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€äÅsq~ uq~ppppppptscopeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~_gsq~ uq~pppppto/** * Set the attribute scope of our bean. * * @param scope The new attribute scope */ ptsetScopeq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft' this.scope = scope; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~_gsq~ uq~pppppt>/** * Return the style attribute for this tag. */ ptgetStyleq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft( return (this.style); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€äísq~ uq~ppppppptstyleq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~_gsq~ uq~ppppptp/** * Set the style attribute for this tag. * * @param style The new style attribute */ ptsetStyleq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft' this.style = style; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~_gsq~ uq~pppppt:/** * Return the style class for this tag. */ pt getStyleClassq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft- return (this.styleClass); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€åsq~ uq~pppppppt styleClassq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~_gsq~ uq~ppppptm/** * Set the style class for this tag. * * @param styleClass The new style class */ pt setStyleClassq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft1 this.styleClass = styleClass; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~_gsq~ uq~pppppt?/** * Return the style identifier for this tag. */ pt getStyleIdq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft* return (this.styleId); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€å=sq~ uq~ppppppptstyleIdq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~_gsq~ uq~ppppptt/** * Set the style identifier for this tag. * * @param styleId The new style identifier */ pt setStyleIdq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft+ this.styleId = styleId; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~_gsq~ uq~pppppt//** * Return the window target. */ pt getTargetq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft) return (this.target); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€åesq~ uq~pppppppttargetq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~_gsq~ uq~pppppt`/** * Set the window target. * * @param target The new window target */ pt setTargetq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft) this.target = target; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~_gsq~ uq~pppppt8/** * Return the Java class of our bean. */ ptgetTypeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft' return (this.type); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€åsq~ uq~pppppppttypeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~_gsq~ uq~ppppptd/** * Set the Java class of our bean. * * @param type The new Java class */ ptsetTypeq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft% this.type = type; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~_gsq~ uq~ppppptÍ// --------------------------------------------------------- Public Methods /** * Render the beginning of this form. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fto // Look up the form bean name, scope, and type if necessary this.lookup(); // Create an appropriate "form" element based on our parameters StringBuffer results = new StringBuffer(); results.append(this.renderFormStartElement()); results.append(this.renderToken()); ResponseUtils.write(pageContext, results.toString()); // Store this tag itself as a page attribute pageContext.setAttribute(Constants.FORM_KEY, this, PageContext.REQUEST_SCOPE); this.initFormBean(); return (EVAL_BODY_INCLUDE); sq~ uq~q~pppq~fq~fxsq~isq~ uq~ppppq~_gsq~ uq~pppppt€/** * Locate or create the bean associated with our form. * @throws JspException * @since Struts 1.1 */ pt initFormBeanq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft^ int scope = PageContext.SESSION_SCOPE; if ("request".equalsIgnoreCase(beanScope)) { scope = PageContext.REQUEST_SCOPE; } Object bean = pageContext.getAttribute(beanName, scope); if (bean == null) { if (type != null) { // Backwards compatibility - use explicitly specified values try { bean = RequestUtils.applicationInstance(beanType); if (bean != null) { ((ActionForm) bean).setServlet(servlet); } } catch (Exception e) { throw new JspException( messages.getMessage("formTag.create", type, e.toString())); } } else { // New and improved - use the values from the action mapping bean = RequestUtils.createActionForm( (HttpServletRequest) pageContext.getRequest(), mapping, moduleConfig, servlet); } if (bean instanceof ActionForm) { ((ActionForm) bean).reset(mapping, (HttpServletRequest) pageContext.getRequest()); } if (bean == null) { throw new JspException(messages.getMessage("formTag.create", beanType)); } pageContext.setAttribute(beanName, bean, scope); } pageContext.setAttribute(Constants.BEAN_KEY, bean, PageContext.REQUEST_SCOPE); sq~ uq~q~pppq~fq~fxsq~isq~ uq~ppppq~_gsq~ uq~ppppptŒ/** * Generates the opening <form> element with appropriate * attributes. * @since Struts 1.1 */ ptrenderFormStartElementq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft HttpServletResponse response = (HttpServletResponse) this.pageContext.getResponse(); StringBuffer results = new StringBuffer(""); return results.toString(); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~_gsq~ uq~pppppt©/** * Generates a hidden input field with token information, if any. * @return A hidden input field containing the token. * @since Struts 1.1 */ pt renderTokenq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ftó StringBuffer results = new StringBuffer(); HttpSession session = pageContext.getSession(); if (session != null) { String token = (String) session.getAttribute(Globals.TRANSACTION_TOKEN_KEY); if (token != null) { results.append(""); } else { results.append("\">"); } } } return results.toString(); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~_gsq~ uq~ppppptz/** * Render the end of this form. * * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft‰ // Remove the page scope attributes we created pageContext.removeAttribute(Constants.BEAN_KEY, PageContext.REQUEST_SCOPE); pageContext.removeAttribute(Constants.FORM_KEY, PageContext.REQUEST_SCOPE); // Render a tag representing the end of our current form StringBuffer results = new StringBuffer(""); // Render JavaScript to set the input focus if required if (this.focus != null) { results.append(this.renderFocusJavascript()); } // Print this value to our output writer JspWriter writer = pageContext.getOut(); try { writer.print(results.toString()); } catch (IOException e) { throw new JspException(messages.getMessage("common.io", e.toString())); } // Continue processing this page return (EVAL_PAGE); sq~ uq~q~pppq~fq~fxsq~isq~ uq~ppppq~_gsq~ uq~ppppptŸ/** * Generates javascript to set the initial focus to the form element given in the * tag's "focus" attribute. * @since Struts 1.1 */ ptrenderFocusJavascriptq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft” StringBuffer results = new StringBuffer(); results.append(lineEnd); results.append(""); results.append(lineEnd); return results.toString(); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~_gsq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftÊ super.release(); action = null; moduleConfig = null; enctype = null; focus = null; focusIndex = null; mapping = null; method = null; name = null; onreset = null; onsubmit = null; scope = null; servlet = null; style = null; styleClass = null; styleId = null; target = null; type = null; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~_gsq~ uq~pppppt'// ------------------------------------------------------ Protected Methods /** * Look up values for the name, scope, and * type properties if necessary. * * @exception JspException if a required value cannot be looked up */ ptlookupq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ftH // Look up the module configuration information we need moduleConfig = RequestUtils.getModuleConfig(pageContext); if (moduleConfig == null) { JspException e = new JspException(messages.getMessage("formTag.collections")); pageContext.setAttribute(Globals.EXCEPTION_KEY, e, PageContext.REQUEST_SCOPE); throw e; } servlet = (ActionServlet) pageContext.getServletContext().getAttribute( Globals.ACTION_SERVLET_KEY); // Look up the action mapping we will be submitting to String mappingName = RequestUtils.getActionMappingName(action); mapping = (ActionMapping) moduleConfig.findActionConfig(mappingName); if (mapping == null) { JspException e = new JspException(messages.getMessage("formTag.mapping", mappingName)); pageContext.setAttribute(Globals.EXCEPTION_KEY, e, PageContext.REQUEST_SCOPE); throw e; } // Were the required values already specified? if (name != null) { if (type == null) { JspException e = new JspException(messages.getMessage("formTag.nameType")); pageContext.setAttribute(Globals.EXCEPTION_KEY, e, PageContext.REQUEST_SCOPE); throw e; } beanName = name; beanScope = (scope == null ? "session" : scope); beanType = type; return; } // Look up the form bean definition FormBeanConfig formBeanConfig = moduleConfig.findFormBeanConfig(mapping.getName()); if (formBeanConfig == null) { JspException e = new JspException(messages.getMessage("formTag.formBean", mapping.getName())); pageContext.setAttribute(Globals.EXCEPTION_KEY, e, PageContext.REQUEST_SCOPE); throw e; } // Calculate the required values beanName = mapping.getAttribute(); beanScope = mapping.getScope(); beanType = formBeanConfig.getType(); sq~ uq~q~pppq~fq~fxsq~isq~ uq~ppppq~_gsq~ uq~ppppptF/** * Returns true if this tag should render as xhtml. */ ptisXhtmlq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~·gxq~ft> return RequestUtils.isXhtml(this.pageContext); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~_gsq~ uq~ppppptD/** * Returns the focusIndex. * @return String */ pt getFocusIndexq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft" return focusIndex; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€æEsq~ uq~pppppppt focusIndexq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~_gsq~ uq~ppppptZ/** * Sets the focusIndex. * @param focusIndex The focusIndex to set */ pt setFocusIndexq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft- this.focusIndex = focusIndex; sq~ uq~ppppq~fq~fxpppppppppppppppppppppppq~$Isq~ uq~ppppppptFormTagq~=xsq~ uq~ sq~Csq~ uq~ppppq~$Ísq~ uq~ppppsq~#q~_gxq€Û(pppppppq~$sq~ uq~q~_]q€ÚÓppsq~ uq~q~–pppq~$q~$q~\Ësq~ uq~q~b›ppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxpsq~4Ôuq~4×7 uq~4סq~$xsq~$úsq~ uq~ppppq~[÷sq~ uq~ppppq~=sq~ uq~ppppsq~ uq~ppppppxq~_7sq~)sq~ uq~ppppq~[÷sq~ uq~ppppq~[ÿsq~ uq~ppppsq~ uq~q€æupppsq~BGç1pxsq~zsq~ -uq~2sq~(sq~ uq~ppppq€æˆsq~ uq~pppppt²// ------------------------------------------------------------- Properties /** * The message resources for this package. */ // ------------------------------------------------------------- Properties /** * The message resources for this package. */ // ------------------------------------------------------------- Properties /** * The message resources for this package. */ // ------------------------------------------------------------- Properties /** * The message resources for this package. */ // ------------------------------------------------------------- Properties /** * The message resources for this package. */ ptmessagesq~=xsq~ uq~pppppq~$q~yq~$q~-pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~;xppptP MessageResources.getMessageResources(Constants.Package + ".LocalStrings")q~$q~$q~$xsq~(sq~ uq~ppppq€æˆsq~ uq~pppppt‹/** * Should we set the current Locale for this user if needed? */ /** * Should we set the current Locale for this user if needed? */ /** * Should we set the current Locale for this user if needed? */ /** * Should we set the current Locale for this user if needed? */ /** * Should we set the current Locale for this user if needed? */ ptlocaleq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt falseq~$q~$q~$xsq~isq~ uq~ppppq€æˆsq~ uq~pppppppt getLocaleq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t return (locale); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq€æ·sq~ uq~ppppppptlocaleq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xpppq€æˆsq~ uq~pppppppt setLocaleq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t% this.locale = locale; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq€æˆsq~ uq~pppppt /** * Are we rendering an xhtml page? */ /** * Are we rendering an xhtml page? */ /** * Are we rendering an xhtml page? */ /** * Are we rendering an xhtml page? */ /** * Are we rendering an xhtml page? */ ptxhtmlq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt falseq~$q~$q~$xsq~isq~ uq~ppppq€æˆsq~ uq~ppppppptgetXhtmlq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t return (xhtml); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq€æësq~ uq~ppppppptxhtmlq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xpppq€æˆsq~ uq~ppppppptsetXhtmlq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t# this.xhtml = xhtml; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq€æˆsq~ uq~ppppptÉ// --------------------------------------------------------- Public Methods /** * Process the start of this tag. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$ti StringBuffer sb = new StringBuffer(" 0)) { sb.append(" lang=\""); sb.append(lang); sb.append("\""); if (xhtml) { sb.append(" xml:lang=\""); sb.append(lang); sb.append("\""); } } } sb.append(">"); // Write out the beginning tag for this page ResponseUtils.write(pageContext, sb.toString()); // Evaluate the included content of this tag return (EVAL_BODY_INCLUDE); sq~ uq~q~pppq~$q~$xsq~isq~ uq~ppppq€æˆsq~ uq~ppppptz/** * Process the end of this tag. * * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t ResponseUtils.write(pageContext, ""); // Evaluate the remainder of this page return (EVAL_PAGE); sq~ uq~q~pppq~$q~$xsq~isq~ uq~ppppq€æˆsq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t; locale = false; xhtml = false; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq€æˆsq~ uq~pppppt// ------------------------------------------------------ Protected Methods /** * Return the current Locale for this request, creating a new one if * necessary. If there is no current Locale, and locale support is not * requested, return null. */ pt currentLocaleq~=xsq~ uq~pppppq~$q~yq~$q~5pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$t // Create a new session if necessary HttpSession session = pageContext.getSession(); if (locale && (session == null)) session = ((HttpServletRequest) pageContext.getRequest()).getSession(); if (session == null) return (null); // Return any currently set Locale in our session Locale current = (Locale) session.getAttribute(Action.LOCALE_KEY); if (current != null) return (current); // Configure a new current Locale, if requested if (!locale) return (null); current = pageContext.getRequest().getLocale(); if (current != null) session.setAttribute(Action.LOCALE_KEY, current); return (current); sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq€æˆsq~ uq~pppppppt getLocaleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t return (locale); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq€çQsq~ uq~ppppppptlocaleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xpppq€æˆsq~ uq~pppppppt setLocaleq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t% this.locale = locale; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq€æˆsq~ uq~ppppppptgetXhtmlq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t return (xhtml); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq€çwsq~ uq~ppppppptxhtmlq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xpppq€æˆsq~ uq~ppppppptsetXhtmlq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t# this.xhtml = xhtml; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq€æˆsq~ uq~ppppptÉ// --------------------------------------------------------- Public Methods /** * Process the start of this tag. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥ti StringBuffer sb = new StringBuffer(" 0)) { sb.append(" lang=\""); sb.append(lang); sb.append("\""); if (xhtml) { sb.append(" xml:lang=\""); sb.append(lang); sb.append("\""); } } } sb.append(">"); // Write out the beginning tag for this page ResponseUtils.write(pageContext, sb.toString()); // Evaluate the included content of this tag return (EVAL_BODY_INCLUDE); sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~ppppq€æˆsq~ uq~ppppptz/** * Process the end of this tag. * * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t ResponseUtils.write(pageContext, ""); // Evaluate the remainder of this page return (EVAL_PAGE); sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~ppppq€æˆsq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t; locale = false; xhtml = false; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq€æˆsq~ uq~pppppt// ------------------------------------------------------ Protected Methods /** * Return the current Locale for this request, creating a new one if * necessary. If there is no current Locale, and locale support is not * requested, return null. */ pt currentLocaleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~5pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥t // Create a new session if necessary HttpSession session = pageContext.getSession(); if (locale && (session == null)) session = ((HttpServletRequest) pageContext.getRequest()).getSession(); if (session == null) return (null); // Return any currently set Locale in our session Locale current = (Locale) session.getAttribute(Action.LOCALE_KEY); if (current != null) return (current); // Configure a new current Locale, if requested if (!locale) return (null); current = pageContext.getRequest().getLocale(); if (current != null) session.setAttribute(Action.LOCALE_KEY, current); return (current); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq€æˆsq~ uq~pppppppt getLocaleq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return (locale); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€çÝsq~ uq~ppppppptlocaleq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xpppq€æˆsq~ uq~pppppppt setLocaleq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t% this.locale = locale; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq€æˆsq~ uq~ppppppptgetXhtmlq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return (xhtml); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€èsq~ uq~ppppppptxhtmlq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xpppq€æˆsq~ uq~ppppppptsetXhtmlq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t# this.xhtml = xhtml; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq€æˆsq~ uq~ppppptÉ// --------------------------------------------------------- Public Methods /** * Process the start of this tag. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–ti StringBuffer sb = new StringBuffer(" 0)) { sb.append(" lang=\""); sb.append(lang); sb.append("\""); if (xhtml) { sb.append(" xml:lang=\""); sb.append(lang); sb.append("\""); } } } sb.append(">"); // Write out the beginning tag for this page ResponseUtils.write(pageContext, sb.toString()); // Evaluate the included content of this tag return (EVAL_BODY_INCLUDE); sq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq€æˆsq~ uq~ppppptz/** * Process the end of this tag. * * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t ResponseUtils.write(pageContext, ""); // Evaluate the remainder of this page return (EVAL_PAGE); sq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq€æˆsq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t; locale = false; xhtml = false; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq€æˆsq~ uq~pppppt// ------------------------------------------------------ Protected Methods /** * Return the current Locale for this request, creating a new one if * necessary. If there is no current Locale, and locale support is not * requested, return null. */ pt currentLocaleq~rxsq~ uq~pppppq~–q~—q~–q~5pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–t // Create a new session if necessary HttpSession session = pageContext.getSession(); if (locale && (session == null)) session = ((HttpServletRequest) pageContext.getRequest()).getSession(); if (session == null) return (null); // Return any currently set Locale in our session Locale current = (Locale) session.getAttribute(Action.LOCALE_KEY); if (current != null) return (current); // Configure a new current Locale, if requested if (!locale) return (null); current = pageContext.getRequest().getLocale(); if (current != null) session.setAttribute(Action.LOCALE_KEY, current); return (current); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq€æˆsq~ uq~pppppppt getLocaleq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t return (locale); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€èisq~ uq~ppppppptlocaleq~{xsq~ uq~pppppq~~q~q~~q~pq~€xpppq€æˆsq~ uq~pppppppt setLocaleq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t% this.locale = locale; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq€æˆsq~ uq~ppppppptgetXhtmlq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t return (xhtml); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€èsq~ uq~ppppppptxhtmlq~{xsq~ uq~pppppq~~q~q~~q~pq~€xpppq€æˆsq~ uq~ppppppptsetXhtmlq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t# this.xhtml = xhtml; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq€æˆsq~ uq~ppppptÉ// --------------------------------------------------------- Public Methods /** * Process the start of this tag. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tg StringBuffer sb = new StringBuffer(" 0)); if (this.xhtml) { this.pageContext.setAttribute(Globals.XHTML_KEY, "true", PageContext.PAGE_SCOPE); sb.append(" xmlns=\"http://www.w3.org/1999/xhtml\""); } if ((this.locale || this.xhtml) && validLanguage) { sb.append(" lang=\""); sb.append(lang); sb.append("\""); } if (this.xhtml && validLanguage) { sb.append(" xml:lang=\""); sb.append(lang); sb.append("\""); } sb.append(">"); // Write out the beginning tag for this page ResponseUtils.write(this.pageContext, sb.toString()); // Evaluate the included content of this tag return (EVAL_BODY_INCLUDE); sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq€æˆsq~ uq~ppppptz/** * Process the end of this tag. * * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t ResponseUtils.write(pageContext, ""); // Evaluate the remainder of this page return (EVAL_PAGE); sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq€æˆsq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t; locale = false; xhtml = false; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq€æˆsq~ uq~pppppt‚// ------------------------------------------------------ Protected Methods /** * Return the current Locale for this request, creating a new one if * necessary. If there is no current Locale, and locale support is not * requested, return null. * @deprecated Use getCurrentLocale instead because it makes the display logic * easier. */ pt currentLocaleq~{xsq~ uq~pppppq~~q~q~~q~5pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~tZ // Create a new session if necessary HttpSession session = pageContext.getSession(); if (locale && (session == null)) { session = ((HttpServletRequest) pageContext.getRequest()).getSession(); } // Return any currently set Locale in our session Locale current = (Locale) session.getAttribute(Globals.LOCALE_KEY); if (current != null) { return (current); } // Configure a new current Locale, if requested if (!locale) { return (null); } // If client doesn't specify locale then default for server will be returned current = pageContext.getRequest().getLocale(); session.setAttribute(Globals.LOCALE_KEY, current); return (current); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq€æˆsq~ uq~pppppt‚/** * Return the current Locale for this request. If there is no locale in the session and * the locale attribute is set to "true", this method will create a Locale based on the * client's Accept-Language header or the server's default locale and store it in the * session. This will always return a Locale and never null. * @since Struts 1.1 */ ptgetCurrentLocaleq~{xsq~ uq~pppppq~~q~q~~q~5pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~tŒ Locale userLocale = RequestUtils.retrieveUserLocale(pageContext, Globals.LOCALE_KEY); // Store a new current Locale, if requested if (this.locale) { HttpSession session = ((HttpServletRequest) this.pageContext.getRequest()).getSession(); session.setAttribute(Globals.LOCALE_KEY, userLocale); } return userLocale; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq€æˆsq~ uq~pppppppt getLocaleq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft return (locale); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€ésq~ uq~ppppppptlocaleq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxpppq€æˆsq~ uq~pppppppt setLocaleq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft% this.locale = locale; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq€æˆsq~ uq~ppppppptgetXhtmlq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft return (xhtml); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€é+sq~ uq~ppppppptxhtmlq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxpppq€æˆsq~ uq~ppppppptsetXhtmlq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft# this.xhtml = xhtml; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq€æˆsq~ uq~ppppptÉ// --------------------------------------------------------- Public Methods /** * Process the start of this tag. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftg StringBuffer sb = new StringBuffer(" 0)); if (this.xhtml) { this.pageContext.setAttribute(Globals.XHTML_KEY, "true", PageContext.PAGE_SCOPE); sb.append(" xmlns=\"http://www.w3.org/1999/xhtml\""); } if ((this.locale || this.xhtml) && validLanguage) { sb.append(" lang=\""); sb.append(lang); sb.append("\""); } if (this.xhtml && validLanguage) { sb.append(" xml:lang=\""); sb.append(lang); sb.append("\""); } sb.append(">"); // Write out the beginning tag for this page ResponseUtils.write(this.pageContext, sb.toString()); // Evaluate the included content of this tag return (EVAL_BODY_INCLUDE); sq~ uq~q~pppq~fq~fxsq~isq~ uq~ppppq€æˆsq~ uq~ppppptz/** * Process the end of this tag. * * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft ResponseUtils.write(pageContext, ""); // Evaluate the remainder of this page return (EVAL_PAGE); sq~ uq~q~pppq~fq~fxsq~isq~ uq~ppppq€æˆsq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft; locale = false; xhtml = false; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq€æˆsq~ uq~pppppt‚// ------------------------------------------------------ Protected Methods /** * Return the current Locale for this request, creating a new one if * necessary. If there is no current Locale, and locale support is not * requested, return null. * @deprecated Use getCurrentLocale instead because it makes the display logic * easier. */ pt currentLocaleq~cxsq~ uq~pppppq~fq~gq~fq~5pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ftZ // Create a new session if necessary HttpSession session = pageContext.getSession(); if (locale && (session == null)) { session = ((HttpServletRequest) pageContext.getRequest()).getSession(); } // Return any currently set Locale in our session Locale current = (Locale) session.getAttribute(Globals.LOCALE_KEY); if (current != null) { return (current); } // Configure a new current Locale, if requested if (!locale) { return (null); } // If client doesn't specify locale then default for server will be returned current = pageContext.getRequest().getLocale(); session.setAttribute(Globals.LOCALE_KEY, current); return (current); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq€æˆsq~ uq~pppppt‚/** * Return the current Locale for this request. If there is no locale in the session and * the locale attribute is set to "true", this method will create a Locale based on the * client's Accept-Language header or the server's default locale and store it in the * session. This will always return a Locale and never null. * @since Struts 1.1 */ ptgetCurrentLocaleq~cxsq~ uq~pppppq~fq~gq~fq~5pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ftŒ Locale userLocale = RequestUtils.retrieveUserLocale(pageContext, Globals.LOCALE_KEY); // Store a new current Locale, if requested if (this.locale) { HttpSession session = ((HttpServletRequest) this.pageContext.getRequest()).getSession(); session.setAttribute(Globals.LOCALE_KEY, userLocale); } return userLocale; sq~ uq~ppppq~fq~fxpppppq~$Isq~ uq~ppppppptHtmlTagq~=xsq~ uq~ppppq~$sq~ uq~q€æ~pppsq~ uq~q~–pppq~$q~$sq~Qsq~ uq~sq~Csq~ uq~ppppq€é›sq~ uq~ppppsq~#q~5xsq~Csq~ uq~ppppq€é›sq~ uq~ppppsq~#q~Œxsq~Csq~ uq~ppppq€é›sq~ uq~ppppsq~#q~\®xsq~Csq~ uq~ppppq€é›sq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq€é›sq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq€é›sq~ uq~ppppsq~#q~–xsq~Csq~ uq~ppppq€é›sq~ uq~ppppsq~#q~#xsq~Csq~ uq~ppppq€é›sq~ uq~ppppsq~#q~-xsq~Csq~ uq~ppppq€é›sq~ uq~ppppsq~#q~%9xsq~Csq~ uq~ppppq€é›sq~ uq~ppppsq~#q~*?xppppq~$Isq~ uq~pppppt a/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/HtmlTag.java,v 1.11 2003/03/08 19:23:49 dgraham Exp $ * $Revision: 1.11 $ * $Date: 2003/03/08 19:23:49 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Renders an HTML element with appropriate language attributes if * there is a current Locale available in the user's session. * * @author Craig R. McClanahan * @author David Graham * @version $Revision: 1.11 $ $Date: 2003/03/08 19:23:49 $ */ pt HtmlTag.javaq~fxsq~ uq~ppppsq~ uq~q€æˆpppq~fxsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxpsq~4Ôuq~4×  uq~4×:¡q~$xq€‰ïq€Ú¤sq~$úsq~ uq~ppppq~[÷sq~ uq~ppppq~{sq~ uq~ppppsq~ uq~ppppppxq~_7sq~)sq~ uq~ppppq~[÷sq~ uq~ppppq~{sq~ uq~ppppsq~ uq~q€éëpppsq~BO)æpxsq~zsq~ uq~sq~esq~ uq~ppppq€éþsq~ uq~pppppt//** * Constructor for XhtmlTag. */ ptXhtmlTagq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t super(); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq€éþsq~ uq~ppppptB/** * @see javax.servlet.jsp.tagext.Tag#doEndTag() */ ptdoEndTagq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t| this.pageContext.setAttribute(Globals.XHTML_KEY, "true", PageContext.PAGE_SCOPE); return EVAL_PAGE; sq~ uq~q~pppq~~q~~xsq~esq~ uq~ppppq€éþsq~ uq~pppppt//** * Constructor for XhtmlTag. */ pq€êq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft super(); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq€éþsq~ uq~ppppptB/** * @see javax.servlet.jsp.tagext.Tag#doEndTag() */ ptdoEndTagq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft| this.pageContext.setAttribute(Globals.XHTML_KEY, "true", PageContext.PAGE_SCOPE); return EVAL_PAGE; sq~ uq~q~pppq~fq~fxq~$Isq~ uq~pppppppq€êq~{xsq~ uq~ppppq~~sq~ uq~q€éôpppsq~ uq~q~–pppq~~q~~sq~Qsq~ uq~sq~Csq~ uq~ppppq€êHsq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq€êHsq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq€êHsq~ uq~ppppsq~#q~–xsq~Csq~ uq~ppppq€êHsq~ uq~ppppsq~#q~#xq~$Isq~ uq~pppppt I/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/XhtmlTag.java,v 1.5 2003/03/08 19:23:49 dgraham Exp $ * $Revision: 1.5 $ * $Date: 2003/03/08 19:23:49 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * This tag tells all other html taglib tags to render themselves in xhtml. It has no * attributes; it's presence in a page turns on xhtml. *

      * Example:
      * <html:xhtml/> *

      * * @author David Graham */ pt XhtmlTag.javaq~fxsq~ uq~ppppsq~ uq~q€éþpppq~fxsq~ uq~pppppq~~sq~ uq~ppppsq~ uq~ppppq~Šxq~~ppxpsq~4Ôuq~4×P uq~4×ï¡q~~xppsq~ uq~ppppsq~BÝœ˜pxq~–q~_%psq~4Ôuq~4ש uq~4×ú¡q~$xpppsq~BF†ñpxq~]2pppsq~ uq~q~–pppq~$q~$q~\÷sq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxpppq~fxsq~ uq~ppppsq~#q~\ìxsq~Csq~ uq~ppppq~Eµsq~ uq~ppppsq~#q~\ìxsq~Csq~ uq~ppppsq~Qsq~ uq~ sq~Csq~ uq~ppppq€êsq~ uq~ppppsq~#q~kxsq~Csq~ uq~ppppq€êsq~ uq~ppppsq~#q~xq€êŒsq~Csq~ uq~ppppq€êsq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq€êsq~ uq~ppppsq~#sq~zsq~ uq~ppppq~™sq~ uq~pppppq~‡pt BodyContentq~=xsq~ uq~q€ê¤pppq~$sq~ uq~sq~)sq~ uq~ppppsq~/sq~ uq~ sq~)sq~ uq~ppppq€ê·sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bddšqpxq~–sq~)sq~ uq~ppppq€ê·sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~BddÅqpxq~œsq~)sq~ uq~ppppq€ê·sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bddðqpxq~°sq~)sq~ uq~ppppq€ê·sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bddqpxq~Êsq~)sq~ uq~ppppq€ê·sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~BddFqpxq~%q€ê´sq~)sq~ uq~ppppq€ê·sq~ uq~ppppq~¢sq~ uq~ppppsq~ uq~ppppsq~Bddpxq~$áppq~ sq~ uq~pppp. * *//** * General purpose utility methods related to generating a servlet response * in the Struts controller framework. * * @author Craig R. McClanahan * @version $Revision: 1.6 $ $Date: 2002/12/08 07:12:17 $ */ ptResponseUtils.javaq~fxsq~ uq~ppppsq~ uq~q~*?pppq~fxsq~ uq~ppppsq~#q~\ìxpppppppq~$sq~ uq~sq~)sq~ uq~ppppsq~/sq~ uq~ sq~)sq~ uq~ppppq€ë$sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bddðqpxq~sq~1sq~ uq~ppppq€ë$sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bddqpxq~™sq~)sq~ uq~ppppq€ë$sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~BddFqpxq~q€ë!pppppq~ sq~ uq~pppp. * *//** * Custom tag that represents an input form, associated with a bean whose * properties correspond to the various fields of the form. * * @author Craig R. McClanahan * @author Martin Cooper * @author James Turner * @author David Graham * @version $Revision: 1.48 $ $Date: 2003/05/17 01:56:51 $ */ pt FormTag.javaq~fxsq~ uq~ppppsq~ uq~q~_gpppq~fxsq~ uq~ppppsq~#q~\®xq€éªsq~Csq~ uq~ppppq~sq~ uq~ppppsq~#q~\®xsq~Csq~ uq~ppppq~EÛsq~ uq~ppppsq~#q~\®xq~}Ðsq~Csq~ uq~ppppq~)øsq~ uq~ppppsq~#q~\®xpppppq~$sq~ uq~q~É|pppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~sq~ uq~ppppppptHttpSession.javaq~$xsq~ uq~ppppsq~ uq~q~\®pppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~q,ˆq,™q~\¦q~Õàq~Õ÷q€+FqNáq€+hq~Ùxq~ÙqP§q~Ýq~Ý'qRmq~à¨q~à¿qT3q~ä@q~äWq~Äxq~$ppxpq~$xq€+"ppq~\sq~ uq~ppppptÛ/** Sets the passed reference to the session object, and returns any reference * that was already there * @param session User's session object * @param reference New reference to put into the session */ ptsetIncludeReferenceq~=xsq~ uq~pppppsq~#q~yq~$q~ª`pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxq~$t¢ /* get the old one if any */ NestedReference nr = (NestedReference) session.getAttribute(NESTED_INCLUDES_KEY); if (reference != null) { /* put in the new one */ session.setAttribute(NESTED_INCLUDES_KEY, reference); } else { /* null target, just remove it */ session.removeAttribute(NESTED_INCLUDES_KEY); } /* return the old */ return nr; sq~ uq~ppppq~$q~$xq~­ýsq~isq~ uq~sq~bsq~ uq~ppppq€ëåsq~ uq~ppppppptpropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppq€ëåsq~ uq~pppppppt parentTagq~=xsq~ uq~pppppq~$q~yq~$q~$ápq~$xppq~\sq~ uq~pppppt”/** * Providing a property and the nested tag's parent, this method will return * the qualified nested name. It also checks for a relative property to make * sure it's handled correctly. * * @param property String of the property to get the nesting version of * @param parentTag the nested tag's nesting parent. * @return String of the fully qualified nesting property */ ptgetNestedPropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxq~$té /* if we're just under a root tag no work required */ if (parentTag instanceof FormTag) { /* don't forget to take care of the relative properties */ if (property.indexOf('/') == -1) { return property; } else { return property.substring(property.indexOf('/')+1, property.length()); } } if (!(parentTag instanceof NestedParentSupport)) { // need to spit chips } NestedParentSupport nestedParent = (NestedParentSupport)parentTag; /* return dot notated property from the parent */ if (property.indexOf('/') == -1) { property = nestedParent.getNestedProperty() +"."+ property; } else { property = getRelativeProperty(property,nestedParent.getNestedProperty()); } /* Some properties may be at the start of their hierarchy */ if (property.startsWith(".")) { return property.substring(1, property.length()); } return property; sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq€ìsq~ uq~pppppppttagq~=xsq~ uq~pppppq~$q~yq~$q~Tqpq~$xpppq~\sq~ uq~ppppptÿ/** A convenience method to provide the property straight from a tag using * its getProperty() method * * @param tag the whose property property is to be qualified by nesting * @return String of the fully qualified nesting property */ ptgetNestedPropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxq~$tp Tag parentTag = getNestingParentTag(tag); return getNestedProperty(tag.getProperty(), parentTag); sq~ uq~ppppq~$q~$xq~®sq~isq~ uq~sq~bsq~ uq~ppppq€ìsq~ uq~pppppppttagq~=xsq~ uq~pppppq~$q~yq~$q~Tqpq~$xpppq~\sq~ uq~ppppptÌ/** * A convenience method by which a tag can just pass itself in and have all of * its relevant properties set for it. * * @param tag The nested tag whose properties are to be set */ ptsetNestedPropertiesq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxq~$tŠ /* get and set the relative property */ String property = getNestedProperty(tag); ((NestedPropertySupport)tag).setProperty(property); /* if the tag implements NestedNameSupport, set the name for the tag also */ if (tag instanceof NestedNameSupport) { String name = getNestedNameProperty(tag); ((NestedNameSupport)tag).setName(name); } sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq€ì8sq~ uq~ppppppptpropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppq€ì8sq~ uq~ppppppptparentq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xppq~\sq~ uq~pppppt¸/* This property, providing the property to be appended, and the parent tag * to append the property to, will calculate the stepping of the property * and return the qualified nested property * * @param property the property which is to be appended nesting style * @param parent the "dot notated" string representing the structure * @return qualified nested property that the property param is to the parent */ ptgetRelativePropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~%Zxq~$tÛ /* Special case... reference my parent's nested property. Otherwise impossible for things like indexed properties */ if ("./".equals(property) || "this/".equals(property)) { return parent; } /* remove the stepping from the property */ String stepping; /* isolate a parent reference */ if (property.endsWith("/")) { stepping = property; property = ""; } else { stepping = property.substring(0,property.lastIndexOf('/')+1); /* isolate the property */ property = property.substring(property.lastIndexOf('/')+1,property.length()); } if (stepping.startsWith("/")) { /* return from root */ return property; } else { /* tokenize the nested property */ StringTokenizer proT = new StringTokenizer(parent, "."); int propCount = proT.countTokens(); /* tokenize the stepping */ StringTokenizer strT = new StringTokenizer(stepping, "/"); int count = strT.countTokens(); if (count >= propCount) { /* return from root */ return property; } else { /* append the tokens up to the token difference */ count = propCount - count; StringBuffer result = new StringBuffer(); for (int i = 0; i < count; i++) { result.append(proT.nextToken()); result.append('.'); } result.append(property); /* parent reference will have a dot on the end. Leave it off */ if (result.charAt(result.length()-1) == '.') { return result.substring(0,result.length()-1); } else { return result.toString(); } } } sq~ uq~ppppq~$q~$xq€+Cq~®/sq~isq~ uq~sq~bsq~ uq~ppppq€ìYsq~ uq~ppppppptpropertyq~Tæxsq~ uq~pppppq~Téq~Têq~Téq~{pq~Tëxsq~bsq~ uq~ppppq€ìYsq~ uq~pppppppt parentTagq~Tæxsq~ uq~pppppq~Téq~Têq~Téq~$ápq~Tëxppq~\sq~ uq~pppppt”/** * Providing a property and the nested tag's parent, this method will return * the qualified nested name. It also checks for a relative property to make * sure it's handled correctly. * * @param property String of the property to get the nesting version of * @param parentTag the nested tag's nesting parent. * @return String of the fully qualified nesting property */ ptgetNestedPropertyq~Tæxsq~ uq~pppppq~Téq~Têq~Téq~{pq~Tëxsq~ uq~ppppsq~ uq~ppppsq~#q~Töxq~Tété /* if we're just under a root tag no work required */ if (parentTag instanceof FormTag) { /* don't forget to take care of the relative properties */ if (property.indexOf('/') == -1) { return property; } else { return property.substring(property.indexOf('/')+1, property.length()); } } if (!(parentTag instanceof NestedParentSupport)) { // need to spit chips } NestedParentSupport nestedParent = (NestedParentSupport)parentTag; /* return dot notated property from the parent */ if (property.indexOf('/') == -1) { property = nestedParent.getNestedProperty() +"."+ property; } else { property = getRelativeProperty(property,nestedParent.getNestedProperty()); } /* Some properties may be at the start of their hierarchy */ if (property.startsWith(".")) { return property.substring(1, property.length()); } return property; sq~ uq~ppppq~Téq~Téxsq~isq~ uq~sq~bsq~ uq~ppppq€ìzsq~ uq~pppppppttagq~Tæxsq~ uq~pppppq~Téq~Têq~Téq~Tqpq~Tëxpppq~\sq~ uq~ppppptÿ/** A convenience method to provide the property straight from a tag using * its getProperty() method * * @param tag the whose property property is to be qualified by nesting * @return String of the fully qualified nesting property */ ptgetNestedPropertyq~Tæxsq~ uq~pppppq~Téq~Têq~Téq~{pq~Tëxsq~ uq~ppppsq~ uq~ppppsq~#q~Töxq~Tétp Tag parentTag = getNestingParentTag(tag); return getNestedProperty(tag.getProperty(), parentTag); sq~ uq~ppppq~Téq~Téxq~®Hsq~isq~ uq~sq~bsq~ uq~ppppq€ì“sq~ uq~pppppppttagq~Tæxsq~ uq~pppppq~Téq~Têq~Téq~Tqpq~Tëxpppq~\sq~ uq~ppppptÌ/** * A convenience method by which a tag can just pass itself in and have all of * its relevant properties set for it. * * @param tag The nested tag whose properties are to be set */ ptsetNestedPropertiesq~Tæxsq~ uq~pppppq~Téq~Têq~Téppq~Tëxsq~ uq~ppppsq~ uq~ppppsq~#q~Töxq~TétŠ /* get and set the relative property */ String property = getNestedProperty(tag); ((NestedPropertySupport)tag).setProperty(property); /* if the tag implements NestedNameSupport, set the name for the tag also */ if (tag instanceof NestedNameSupport) { String name = getNestedNameProperty(tag); ((NestedNameSupport)tag).setName(name); } sq~ uq~ppppq~Téq~Téxsq~isq~ uq~sq~bsq~ uq~ppppq€ì¬sq~ uq~ppppppptpropertyq~Tæxsq~ uq~pppppq~Téq~Têq~Téq~{pq~Tëxsq~bsq~ uq~ppppq€ì¬sq~ uq~ppppppptparentq~Tæxsq~ uq~pppppq~Téq~Têq~Téq~{pq~Tëxppq~\sq~ uq~pppppt¸/* This property, providing the property to be appended, and the parent tag * to append the property to, will calculate the stepping of the property * and return the qualified nested property * * @param property the property which is to be appended nesting style * @param parent the "dot notated" string representing the structure * @return qualified nested property that the property param is to the parent */ ptgetRelativePropertyq~Tæxsq~ uq~pppppq~Téq~Têq~Téq~{pq~Tëxsq~ uq~ppppsq~ uq~ppppsq~#sq~Ãxq~TétÛ /* Special case... reference my parent's nested property. Otherwise impossible for things like indexed properties */ if ("./".equals(property) || "this/".equals(property)) { return parent; } /* remove the stepping from the property */ String stepping; /* isolate a parent reference */ if (property.endsWith("/")) { stepping = property; property = ""; } else { stepping = property.substring(0,property.lastIndexOf('/')+1); /* isolate the property */ property = property.substring(property.lastIndexOf('/')+1,property.length()); } if (stepping.startsWith("/")) { /* return from root */ return property; } else { /* tokenize the nested property */ StringTokenizer proT = new StringTokenizer(parent, "."); int propCount = proT.countTokens(); /* tokenize the stepping */ StringTokenizer strT = new StringTokenizer(stepping, "/"); int count = strT.countTokens(); if (count >= propCount) { /* return from root */ return property; } else { /* append the tokens up to the token difference */ count = propCount - count; StringBuffer result = new StringBuffer(); for (int i = 0; i < count; i++) { result.append(proT.nextToken()); result.append('.'); } result.append(property); /* parent reference will have a dot on the end. Leave it off */ if (result.charAt(result.length()-1) == '.') { return result.substring(0,result.length()-1); } else { return result.toString(); } } } sq~ uq~ppppq~Téq~Téxq€+eq~®asq~isq~ uq~sq~bsq~ uq~ppppq€ìÎsq~ uq~ppppppptpropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq€ìÎsq~ uq~pppppppt parentTagq~¢xsq~ uq~pppppq~¥q~¦q~¥q~$ápq~§xppq~\sq~ uq~pppppt”/** * Providing a property and the nested tag's parent, this method will return * the qualified nested name. It also checks for a relative property to make * sure it's handled correctly. * * @param property String of the property to get the nesting version of * @param parentTag the nested tag's nesting parent. * @return String of the fully qualified nesting property */ ptgetNestedPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥té /* if we're just under a root tag no work required */ if (parentTag instanceof FormTag) { /* don't forget to take care of the relative properties */ if (property.indexOf('/') == -1) { return property; } else { return property.substring(property.indexOf('/')+1, property.length()); } } if (!(parentTag instanceof NestedParentSupport)) { // need to spit chips } NestedParentSupport nestedParent = (NestedParentSupport)parentTag; /* return dot notated property from the parent */ if (property.indexOf('/') == -1) { property = nestedParent.getNestedProperty() +"."+ property; } else { property = getRelativeProperty(property,nestedParent.getNestedProperty()); } /* Some properties may be at the start of their hierarchy */ if (property.startsWith(".")) { return property.substring(1, property.length()); } return property; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq€ìïsq~ uq~pppppppttagq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Tqpq~§xpppq~\sq~ uq~ppppptÿ/** A convenience method to provide the property straight from a tag using * its getProperty() method * * @param tag the whose property property is to be qualified by nesting * @return String of the fully qualified nesting property */ ptgetNestedPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥tp Tag parentTag = getNestingParentTag(tag); return getNestedProperty(tag.getProperty(), parentTag); sq~ uq~ppppq~¥q~¥xq~®zsq~isq~ uq~sq~bsq~ uq~ppppq€ísq~ uq~pppppppttagq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Tqpq~§xpppq~\sq~ uq~ppppptÌ/** * A convenience method by which a tag can just pass itself in and have all of * its relevant properties set for it. * * @param tag The nested tag whose properties are to be set */ ptsetNestedPropertiesq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥tŠ /* get and set the relative property */ String property = getNestedProperty(tag); ((NestedPropertySupport)tag).setProperty(property); /* if the tag implements NestedNameSupport, set the name for the tag also */ if (tag instanceof NestedNameSupport) { String name = getNestedNameProperty(tag); ((NestedNameSupport)tag).setName(name); } sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq€í!sq~ uq~ppppppptpropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq€í!sq~ uq~ppppppptparentq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xppq~\sq~ uq~pppppt¸/* This property, providing the property to be appended, and the parent tag * to append the property to, will calculate the stepping of the property * and return the qualified nested property * * @param property the property which is to be appended nesting style * @param parent the "dot notated" string representing the structure * @return qualified nested property that the property param is to the parent */ ptgetRelativePropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~xq~¥tÛ /* Special case... reference my parent's nested property. Otherwise impossible for things like indexed properties */ if ("./".equals(property) || "this/".equals(property)) { return parent; } /* remove the stepping from the property */ String stepping; /* isolate a parent reference */ if (property.endsWith("/")) { stepping = property; property = ""; } else { stepping = property.substring(0,property.lastIndexOf('/')+1); /* isolate the property */ property = property.substring(property.lastIndexOf('/')+1,property.length()); } if (stepping.startsWith("/")) { /* return from root */ return property; } else { /* tokenize the nested property */ StringTokenizer proT = new StringTokenizer(parent, "."); int propCount = proT.countTokens(); /* tokenize the stepping */ StringTokenizer strT = new StringTokenizer(stepping, "/"); int count = strT.countTokens(); if (count >= propCount) { /* return from root */ return property; } else { /* append the tokens up to the token difference */ count = propCount - count; StringBuffer result = new StringBuffer(); for (int i = 0; i < count; i++) { result.append(proT.nextToken()); result.append('.'); } result.append(property); /* parent reference will have a dot on the end. Leave it off */ if (result.charAt(result.length()-1) == '.') { return result.substring(0,result.length()-1); } else { return result.toString(); } } } sq~ uq~ppppq~¥q~¥xq€+‡q~®“sq~isq~ uq~sq~bsq~ uq~ppppq€íBsq~ uq~ppppppptpropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq€íBsq~ uq~pppppppt parentTagq~rxsq~ uq~pppppq~–q~—q~–q~$ápq~˜xppq~\sq~ uq~pppppt”/** * Providing a property and the nested tag's parent, this method will return * the qualified nested name. It also checks for a relative property to make * sure it's handled correctly. * * @param property String of the property to get the nesting version of * @param parentTag the nested tag's nesting parent. * @return String of the fully qualified nesting property */ ptgetNestedPropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–tk // return if there's nothing to play with. if (property == null) { return null; } /* if we're just under a root tag no work required */ if (parentTag instanceof FormTag) { /* don't forget to take care of the relative properties */ if (property.indexOf('/') == -1) { return property; } else { return property.substring(property.indexOf('/')+1, property.length()); } } if (!(parentTag instanceof NestedParentSupport)) { // need to spit chips } NestedParentSupport nestedParent = (NestedParentSupport)parentTag; if (nestedParent != null) { /* return dot notated property from the parent */ if (property.indexOf('/') == -1) { property = nestedParent.getNestedProperty() +"."+ property; } else { property = getRelativeProperty(property,nestedParent.getNestedProperty()); } } /* Some properties may be at the start of their hierarchy */ if (property.startsWith(".")) { return property.substring(1, property.length()); } return property; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€ícsq~ uq~pppppppttagq~rxsq~ uq~pppppq~–q~—q~–q~Tqpq~˜xpppq~\sq~ uq~ppppptÿ/** A convenience method to provide the property straight from a tag using * its getProperty() method * * @param tag the whose property property is to be qualified by nesting * @return String of the fully qualified nesting property */ ptgetNestedPropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–tp Tag parentTag = getNestingParentTag(tag); return getNestedProperty(tag.getProperty(), parentTag); sq~ uq~ppppq~–q~–xq~®¬sq~isq~ uq~sq~bsq~ uq~ppppq€í|sq~ uq~pppppppttagq~rxsq~ uq~pppppq~–q~—q~–q~Tqpq~˜xpppq~\sq~ uq~ppppptÌ/** * A convenience method by which a tag can just pass itself in and have all of * its relevant properties set for it. * * @param tag The nested tag whose properties are to be set */ ptsetNestedPropertiesq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–tž /* get and set the relative property */ String property = getNestedProperty(tag); ((NestedPropertySupport)tag).setProperty(property); /* if the tag implements NestedNameSupport, set the name for the tag also */ if (tag instanceof NestedNameSupport && property != null) { String name = getNestedNameProperty(tag); ((NestedNameSupport)tag).setName(name); } sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€í•sq~ uq~ppppppptpropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq€í•sq~ uq~ppppppptparentq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xppq~\sq~ uq~pppppt¸/* This property, providing the property to be appended, and the parent tag * to append the property to, will calculate the stepping of the property * and return the qualified nested property * * @param property the property which is to be appended nesting style * @param parent the "dot notated" string representing the structure * @return qualified nested property that the property param is to the parent */ ptgetRelativePropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~'bxq~–tÛ /* Special case... reference my parent's nested property. Otherwise impossible for things like indexed properties */ if ("./".equals(property) || "this/".equals(property)) { return parent; } /* remove the stepping from the property */ String stepping; /* isolate a parent reference */ if (property.endsWith("/")) { stepping = property; property = ""; } else { stepping = property.substring(0,property.lastIndexOf('/')+1); /* isolate the property */ property = property.substring(property.lastIndexOf('/')+1,property.length()); } if (stepping.startsWith("/")) { /* return from root */ return property; } else { /* tokenize the nested property */ StringTokenizer proT = new StringTokenizer(parent, "."); int propCount = proT.countTokens(); /* tokenize the stepping */ StringTokenizer strT = new StringTokenizer(stepping, "/"); int count = strT.countTokens(); if (count >= propCount) { /* return from root */ return property; } else { /* append the tokens up to the token difference */ count = propCount - count; StringBuffer result = new StringBuffer(); for (int i = 0; i < count; i++) { result.append(proT.nextToken()); result.append('.'); } result.append(property); /* parent reference will have a dot on the end. Leave it off */ if (result.charAt(result.length()-1) == '.') { return result.substring(0,result.length()-1); } else { return result.toString(); } } } sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€í¶sq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xpppq~\sq~ uq~ppppptÆ/** * Returns the current nesting property from the request object. * @param request object to fetch the property reference from * @return String of the bean name to nest against */ ptgetCurrentPropertyq~{xsq~ uq~pppppsq~#q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~tØ // get the old one if any NestedReference nr = (NestedReference) request.getAttribute(NESTED_INCLUDES_KEY); // return null or the property return (nr == null) ? null : nr.getNestedProperty(); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€íÐsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xsq~bsq~ uq~ppppq€íÐsq~ uq~ppppppptnestedq~{xsq~ uq~pppppq~~q~q~~q~T­pq~€xppq~\sq~ uq~ppppptË/** *

      Returns the bean name from the request object that the properties are * nesting against.

      * *

      The requirement of the tag itself could be removed in the future, but is * required if support for the tag is maintained.

      * @param request object to fetch the bean reference from * @param nested tag from which to start the search from * @return the string of the bean name to be nesting against */ ptgetCurrentNameq~{xsq~ uq~pppppsq~#q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~tã // get the old one if any NestedReference nr = (NestedReference) request.getAttribute(NESTED_INCLUDES_KEY); // return null or the property if (nr != null) { return nr.getBeanName(); } else { // need to look for a form tag... Tag tag = (Tag) nested; Tag formTag = null; // loop all parent tags until we get one that can be nested against do { tag = tag.getParent(); if (tag != null && tag instanceof FormTag) { formTag = tag; } } while (formTag == null && tag != null); if (formTag == null) { return ""; } // return the form's name return ((FormTag) formTag).getBeanName(); } sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€íòsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xsq~bsq~ uq~ppppq€íòsq~ uq~ppppppptpropertyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xppq~\sq~ uq~pppppt?/** * Get the adjusted property. * Apply the provided property, to the property already stored * in the request object. * @param request to pull the reference from * @param property to retrieve the evaluated nested property with * @return String of the final nested property reference. */ ptgetAdjustedPropertyq~{xsq~ uq~pppppsq~#q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~tŽ // get the old one if any String parent = getCurrentProperty(request); return calculateRelativeProperty(property, parent); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€îsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xsq~bsq~ uq~ppppq€îsq~ uq~ppppppptpropertyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xppq~\sq~ uq~ppppptß/** * Sets the provided property into the request object for reference by the * other nested tags. * @param request object to set the new property into * @param property String to set the property to */ pt setPropertyq~{xsq~ uq~pppppsq~#q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t~ // get the old one if any NestedReference nr = referenceInstance(request); nr.setNestedProperty(property); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€î6sq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xsq~bsq~ uq~ppppq€î6sq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xppq~\sq~ uq~ppppptÏ/** * Sets the provided name into the request object for reference by the * other nested tags. * @param request object to set the new name into * @param name String to set the name to */ ptsetNameq~{xsq~ uq~pppppsq~#q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~tt // get the old one if any NestedReference nr = referenceInstance(request); nr.setBeanName(name); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€îXsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xpppq~\sq~ uq~pppppt€/** * Deletes the nested reference from the request object. * @param request object to remove the reference from */ ptdeleteReferenceq~{xsq~ uq~pppppsq~#q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~tT // delete the reference request.removeAttribute(NESTED_INCLUDES_KEY); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€îrsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xsq~bsq~ uq~ppppq€îrsq~ uq~pppppppttagq~{xsq~ uq~pppppq~~q~q~~q~Tqpq~€xppq~\sq~ uq~ppppptû/** * Helper method that will set all the relevant nesting properties for the * provided tag reference depending on the implementation. * @param request object to pull references from * @param tag to set the nesting values into */ ptsetNestedPropertiesq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t¯ boolean adjustProperty = true; /* if the tag implements NestedNameSupport, set the name for the tag also */ if (tag instanceof NestedNameSupport) { NestedNameSupport nameTag = (NestedNameSupport)tag; if (nameTag.getName() == null|| Constants.BEAN_KEY.equals(nameTag.getName())) { nameTag.setName(getCurrentName(request, (NestedNameSupport) tag)); } else { adjustProperty = false; } } /* get and set the relative property, adjust if required */ String property = tag.getProperty(); if (adjustProperty) { property = getAdjustedProperty(request, property); } tag.setProperty(property); sq~ uq~ppppq~~q~~xq€+µsq~isq~ uq~sq~bsq~ uq~ppppq€î“sq~ uq~ppppppptpropertyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq€î“sq~ uq~ppppppptparentq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xppq~\sq~ uq~pppppt·/* This property, providing the property to be appended, and the parent tag * to append the property to, will calculate the stepping of the property * and return the qualified nested property * * @param property the property which is to be appended nesting style * @param parent the "dot notated" string representing the structure * @return qualified nested property that the property param is to the parent */ ptcalculateRelativePropertyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~d1xq~~t if (parent == null) { parent = ""; } if (property == null) { property = ""; } /* Special case... reference my parent's nested property. Otherwise impossible for things like indexed properties */ if ("./".equals(property) || "this/".equals(property)) { return parent; } /* remove the stepping from the property */ String stepping; /* isolate a parent reference */ if (property.endsWith("/")) { stepping = property; property = ""; } else { stepping = property.substring(0, property.lastIndexOf('/') + 1); /* isolate the property */ property = property.substring(property.lastIndexOf('/') + 1, property.length()); } if (stepping.startsWith("/")) { /* return from root */ return property; } else { /* tokenize the nested property */ StringTokenizer proT = new StringTokenizer(parent, "."); int propCount = proT.countTokens(); /* tokenize the stepping */ StringTokenizer strT = new StringTokenizer(stepping, "/"); int count = strT.countTokens(); if (count >= propCount) { /* return from root */ return property; } else { /* append the tokens up to the token difference */ count = propCount - count; StringBuffer result = new StringBuffer(); for (int i = 0; i < count; i++) { result.append(proT.nextToken()); result.append('.'); } result.append(property); /* parent reference will have a dot on the end. Leave it off */ if (result.charAt(result.length()-1) == '.') { return result.substring(0,result.length()-1); } else { return result.toString(); } } } sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€î´sq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxpppq~\sq~ uq~ppppptÆ/** * Returns the current nesting property from the request object. * @param request object to fetch the property reference from * @return String of the bean name to nest against */ ptgetCurrentPropertyq~cxsq~ uq~pppppsq~#q~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ftØ // get the old one if any NestedReference nr = (NestedReference) request.getAttribute(NESTED_INCLUDES_KEY); // return null or the property return (nr == null) ? null : nr.getNestedProperty(); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€îÎsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppq€îÎsq~ uq~ppppppptnestedq~cxsq~ uq~pppppq~fq~gq~fq~T­pq~hxppq~\sq~ uq~ppppptË/** *

      Returns the bean name from the request object that the properties are * nesting against.

      * *

      The requirement of the tag itself could be removed in the future, but is * required if support for the tag is maintained.

      * @param request object to fetch the bean reference from * @param nested tag from which to start the search from * @return the string of the bean name to be nesting against */ ptgetCurrentNameq~cxsq~ uq~pppppsq~#q~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ftã // get the old one if any NestedReference nr = (NestedReference) request.getAttribute(NESTED_INCLUDES_KEY); // return null or the property if (nr != null) { return nr.getBeanName(); } else { // need to look for a form tag... Tag tag = (Tag) nested; Tag formTag = null; // loop all parent tags until we get one that can be nested against do { tag = tag.getParent(); if (tag != null && tag instanceof FormTag) { formTag = tag; } } while (formTag == null && tag != null); if (formTag == null) { return ""; } // return the form's name return ((FormTag) formTag).getBeanName(); } sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€îðsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppq€îðsq~ uq~ppppppptpropertyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxppq~\sq~ uq~pppppt?/** * Get the adjusted property. * Apply the provided property, to the property already stored * in the request object. * @param request to pull the reference from * @param property to retrieve the evaluated nested property with * @return String of the final nested property reference. */ ptgetAdjustedPropertyq~cxsq~ uq~pppppsq~#q~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ftŽ // get the old one if any String parent = getCurrentProperty(request); return calculateRelativeProperty(property, parent); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€ïsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppq€ïsq~ uq~ppppppptpropertyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxppq~\sq~ uq~ppppptß/** * Sets the provided property into the request object for reference by the * other nested tags. * @param request object to set the new property into * @param property String to set the property to */ pt setPropertyq~cxsq~ uq~pppppsq~#q~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft~ // get the old one if any NestedReference nr = referenceInstance(request); nr.setNestedProperty(property); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€ï4sq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppq€ï4sq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxppq~\sq~ uq~ppppptÏ/** * Sets the provided name into the request object for reference by the * other nested tags. * @param request object to set the new name into * @param name String to set the name to */ ptsetNameq~cxsq~ uq~pppppsq~#q~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ftt // get the old one if any NestedReference nr = referenceInstance(request); nr.setBeanName(name); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€ïVsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxpppq~\sq~ uq~pppppt€/** * Deletes the nested reference from the request object. * @param request object to remove the reference from */ ptdeleteReferenceq~cxsq~ uq~pppppsq~#q~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ftT // delete the reference request.removeAttribute(NESTED_INCLUDES_KEY); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€ïpsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppq€ïpsq~ uq~pppppppttagq~cxsq~ uq~pppppq~fq~gq~fq~Tqpq~hxppq~\sq~ uq~ppppptû/** * Helper method that will set all the relevant nesting properties for the * provided tag reference depending on the implementation. * @param request object to pull references from * @param tag to set the nesting values into */ ptsetNestedPropertiesq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft¯ boolean adjustProperty = true; /* if the tag implements NestedNameSupport, set the name for the tag also */ if (tag instanceof NestedNameSupport) { NestedNameSupport nameTag = (NestedNameSupport)tag; if (nameTag.getName() == null|| Constants.BEAN_KEY.equals(nameTag.getName())) { nameTag.setName(getCurrentName(request, (NestedNameSupport) tag)); } else { adjustProperty = false; } } /* get and set the relative property, adjust if required */ String property = tag.getProperty(); if (adjustProperty) { property = getAdjustedProperty(request, property); } tag.setProperty(property); sq~ uq~ppppq~fq~fxq€+Ïsq~isq~ uq~sq~bsq~ uq~ppppq€ï‘sq~ uq~ppppppptpropertyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq€ï‘sq~ uq~ppppppptparentq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxppq~\sq~ uq~pppppt·/* This property, providing the property to be appended, and the parent tag * to append the property to, will calculate the stepping of the property * and return the qualified nested property * * @param property the property which is to be appended nesting style * @param parent the "dot notated" string representing the structure * @return qualified nested property that the property param is to the parent */ ptcalculateRelativePropertyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~·gxq~ft if (parent == null) { parent = ""; } if (property == null) { property = ""; } /* Special case... reference my parent's nested property. Otherwise impossible for things like indexed properties */ if ("./".equals(property) || "this/".equals(property)) { return parent; } /* remove the stepping from the property */ String stepping; /* isolate a parent reference */ if (property.endsWith("/")) { stepping = property; property = ""; } else { stepping = property.substring(0, property.lastIndexOf('/') + 1); /* isolate the property */ property = property.substring(property.lastIndexOf('/') + 1, property.length()); } if (stepping.startsWith("/")) { /* return from root */ return property; } else { /* tokenize the nested property */ StringTokenizer proT = new StringTokenizer(parent, "."); int propCount = proT.countTokens(); /* tokenize the stepping */ StringTokenizer strT = new StringTokenizer(stepping, "/"); int count = strT.countTokens(); if (count >= propCount) { /* return from root */ return property; } else { /* append the tokens up to the token difference */ count = propCount - count; StringBuffer result = new StringBuffer(); for (int i = 0; i < count; i++) { result.append(proT.nextToken()); result.append('.'); } result.append(property); /* parent reference will have a dot on the end. Leave it off */ if (result.charAt(result.length()-1) == '.') { return result.substring(0,result.length()-1); } else { return result.toString(); } } } sq~ uq~ppppq~fq~fxpppq~U÷sq~ uq~ppppppptNestedPropertyHelperq~=xsq~ %uq~+q~9q€Bq~Ÿûq€`sq~Csq~ uq~ppppsq~Qsq~ uq~ sq~Csq~ uq~ppppq€ïºsq~ uq~ppppsq~#q~Œxsq~Csq~ uq~ppppq€ïºsq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq€ïºsq~ uq~ppppsq~#q~Vxsq~Csq~ uq~ppppq€ïºsq~ uq~ppppsq~#q~T­xq€ï·ppppq~Uúsq~ uq~pppppt ç/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/nested/html/NestedCheckboxTag.java,v 1.5 2003/02/28 05:15:06 arron Exp $ * $Revision: 1.5 $ * $Date: 2003/02/28 05:15:06 $ * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * NestedCheckboxTag. * @author Arron Bates * @since Struts 1.1 * @version $Revision: 1.5 $ $Date: 2003/02/28 05:15:06 $ */ ptNestedCheckboxTag.javaq~fxsq~ uq~ppppsq~ uq~q~Uýpppq~fxsq~ uq~ppppsq~#q~\xsq~Csq~ uq~ppppsq~Qsq~ uq~ sq~Csq~ uq~ppppq€ïãsq~ uq~ppppsq~#q~Œxsq~Csq~ uq~ppppq€ïãsq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq€ïãsq~ uq~ppppsq~#q~RÜxsq~Csq~ uq~ppppq€ïãsq~ uq~ppppsq~#q~T­xq€ïàppppq~Uúsq~ uq~pppppt /* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/nested/html/NestedErrorsTag.java,v 1.5 2003/02/28 05:15:06 arron Exp $ * $Revision: 1.5 $ * $Date: 2003/02/28 05:15:06 $ * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * NestedErrorsTag. * @author Arron Bates * @author David Winterfeldt * @since Struts 1.1 * @version $Revision: 1.5 $ $Date: 2003/02/28 05:15:06 $ */ ptNestedErrorsTag.javaq~fxsq~ uq~ppppsq~ uq~q~SÕpppq~fxsq~ uq~ppppsq~#q~\xq~\Šq€Û4sq~Csq~ uq~ppppsq~Qsq~ uq~ sq~Csq~ uq~ppppq€ð sq~ uq~ppppsq~#q~Œxsq~Csq~ uq~ppppq€ð sq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq€ð sq~ uq~ppppsq~#q~Wxsq~Csq~ uq~ppppq€ð sq~ uq~ppppsq~#q~T­xq€ð ppppq~Uúsq~ uq~pppppt ã/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/nested/html/NestedHiddenTag.java,v 1.5 2003/02/28 05:15:06 arron Exp $ * $Revision: 1.5 $ * $Date: 2003/02/28 05:15:06 $ * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * NestedHiddenTag. * @author Arron Bates * @since Struts 1.1 * @version $Revision: 1.5 $ $Date: 2003/02/28 05:15:06 $ */ ptNestedHiddenTag.javaq~fxsq~ uq~ppppsq~ uq~q~Võpppq~fxsq~ uq~ppppsq~#q~\xq€¥Ùq€•q€Ãéq~tàq€¯Îq€ƒq€Ò§q€Œ‡q€µ3q€yq€¤üq€Õq€Ž/q€(®q€&ºq€Ÿq€„q€-q€Áq€ ²q€#_q€Ìq€@qþ¤q€$7q€ q€lq€ £ppppppq~$sq~ uq~q~±0pppsq~ uq~ppppq~$q~$q~$Ísq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxxppppq~Uúsq~ uq~pppppt Â/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/nested/html/NestedFileTag.java,v 1.3 2003/02/28 05:15:06 arron Exp $ * $Revision: 1.3 $ * $Date: 2003/02/28 05:15:06 $ * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * NestedFileTag. * @author Arron Bates * @since Struts 1.1 * @version $Revision: 1.3 $ */ ptNestedFileTag.javaq~fxsq~ uq~ppppsq~ uq~q€ŠLpppq~fxsq~ uq~ppppsq~#q~\xpppq~$sq~ uq~q~\q€Š2ppsq~ uq~q~W[pppq~$q~$sq~Qsq~ uq~ppppq~$Isq~ uq~pppppt ð/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/FileTag.java,v 1.1 2001/01/06 21:50:39 mschachter Exp $ * $Revision: 1.1 $ * $Date: 2001/01/06 21:50:39 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Custom tag for input fields of type "file". * * @author Craig R. McClanahan * @version $Revision: 1.1 $ $Date: 2001/01/06 21:50:39 $ */ pt FileTag.javaq~fxsq~ uq~ppppsq~ uq~q~\pppq~fxsq~ uq~q€ŠLppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxpsq~4Ôuq~4×äuq~4×gq~$xsq~$úsq~ uq~ppppq~[÷sq~ uq~ppppq~=sq~ uq~ppppsq~ uq~ppppppxq~\sq~)sq~ uq~ppppq~[÷sq~ uq~ppppq~[ÿsq~ uq~ppppsq~ uq~q€ð_pppsq~BSvBpxq~Wpsq~4Ôuq~4ןuq~4×Kq~$xq€Œ£q€ñsq~ uq~q~iÕpppsq~BaÞpxq~W[q~iÎq~i¾q~_%q~[ôq~jq~m`q~_Gq~\q~_]q~i¦q~i–q€ðhq€æ~q~m†q~mvq€¤fq~{Šq~{\sq~)sq~ uq~ppppq~[÷sq~ uq~ppppq~[ÿsq~ uq~ppppsq~ uq~sq~$úsq~ uq~ppppq~[÷sq~ uq~ppppq~=sq~ uq~ppppsq~ uq~ppppppxsq~)sq~ uq~ppppq~[÷sq~ uq~ppppq~[ÿsq~ uq~q€ðpppsq~ uq~ppppsq~Bæ „pxq~°q€ðxpsq~4Ôuq~4×~~uq~4×Ìq~$xpppsq~B_OÃpxsq~zsq~ uq~ sq~isq~ uq~sq~bsq~ uq~ppppq€ð›sq~ uq~ppppppptdataq~=xsq~ uq~pppppq~$q~yq~$q~œpq~$xpppq€ð˜sq~ uq~ppppptU/** * Return information about the scripting variables to be created. */ ptgetVariableInfoq~=xsq~ uq~pppppq~$q~yq~$q~Êt[]q~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tì String type = "java.lang.String"; return new VariableInfo[] { new VariableInfo(data.getAttributeString("id"), type, true, VariableInfo.NESTED) }; sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq€ð´sq~ uq~ppppppptdataq~¢xsq~ uq~pppppq~¥q~¦q~¥q~œpq~§xpppq€ð˜sq~ uq~ppppptU/** * Return information about the scripting variables to be created. */ ptgetVariableInfoq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Êt[]q~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tì String type = "java.lang.String"; return new VariableInfo[] { new VariableInfo(data.getAttributeString("id"), type, true, VariableInfo.NESTED) }; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq€ðÍsq~ uq~ppppppptdataq~rxsq~ uq~pppppq~–q~—q~–q~œpq~˜xpppq€ð˜sq~ uq~ppppptU/** * Return information about the scripting variables to be created. */ ptgetVariableInfoq~rxsq~ uq~pppppq~–q~—q~–q~Êt[]q~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tì String type = "java.lang.String"; return new VariableInfo[] { new VariableInfo(data.getAttributeString("id"), type, true, VariableInfo.NESTED) }; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€ðæsq~ uq~ppppppptdataq~{xsq~ uq~pppppq~~q~q~~q~œpq~€xpppq€ð˜sq~ uq~ppppptU/** * Return information about the scripting variables to be created. */ ptgetVariableInfoq~{xsq~ uq~pppppq~~q~q~~q~Êt[]q~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tì String type = "java.lang.String"; return new VariableInfo[] { new VariableInfo(data.getAttributeString("id"), type, true, VariableInfo.NESTED) }; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€ðÿsq~ uq~ppppppptdataq~cxsq~ uq~pppppq~fq~gq~fq~œpq~hxpppq€ð˜sq~ uq~ppppptU/** * Return information about the scripting variables to be created. */ ptgetVariableInfoq~cxsq~ uq~pppppq~fq~gq~fq~Êt[]q~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftì String type = "java.lang.String"; return new VariableInfo[] { new VariableInfo(data.getAttributeString("id"), type, true, VariableInfo.NESTED) }; sq~ uq~ppppq~fq~fxppppq~$Isq~ uq~pppppppt MessagesTeiq~=xsq~ uq~ppppq~$sq~ uq~q€ðxpppsq~ uq~q~°pppq~$q~$sq~Qsq~ uq~sq~Csq~ uq~ppppq€ñ!sq~ uq~ppppsq~#q~œxsq~Csq~ uq~ppppq€ñ!sq~ uq~ppppsq~#q~°xsq~Csq~ uq~ppppq€ñ!sq~ uq~ppppsq~#q~Êxpq~$Isq~ uq~pppppt ó/* * The Apache Software License, Version 1.1 * * Copyright (c) 1999 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . *//** * Implementation of TagExtraInfo for the messages * tag, identifying the scripting object(s) to be made visible. * * @author David Winterfeldt */ ptMessagesTei.javaq~fxsq~ uq~ppppsq~ uq~q€ð˜pppq~fxsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxq€­¸q€‰æq€Ú›q€p)q€Œšq€³q€¹¥q~i„q€~*q~iêq€èq~iÕq~iÅq~{nq~{uq~_7q~_.q~iýq~j q~mWq~_>q~\ q~_Tq~iq~iµq€ð_q€æuq~m}q~mmq€¤oq~{q~{eq€ðŠq€ðq€­¯q€‰ïq€Ú¤q€p q€Œ£q€³q€¹œq~iq€~3q~iáq€ñsq~¤6sq~ uq~ppppq~[÷sq~ uq~ppppq~[ÿsq~ uq~ppppsq~ uq~ppppsq~BZO³pxsq~¤Bq~4× ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶¶ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿIIUÿ¶¶ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶¶ªÿÿÿÿÿ’’ªÿ¶¶ªÿÛ¶ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmmUÿÿ’’ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛ¶ªÿÛ¶ªÿÛ¶ªÿ’’UÿÿÿÿÿÿÿÿÿÛmUÿ¶IÿÿIÿ¶Iÿÿ$ÿÿmUÿÛÛªÿÿÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÿÿÿÿmmUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶¶ªÿ¶¶ªÿmIUÿ¶¶ªÿÛÛÿÿ’’ªÿÿÿ’UÿÛÿÿUÿÿÿ¶ÿÿIÿÛIÿÛIÿÿmÿÛ¶ªÿÿÿÿÿÿÛªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛ¶ªÿÿÿIIUÿÛÛÿÿÿÿÿÿÿÿÿÿmmUÿmmUÿ’’UÿÛÛÿÿÛIªÿÛªÿÿªÿ¶Uÿÿªÿ’UÿÿUÿÿÿÿÿÿÿmÿÿ$ÿÿIÿ¶Iÿ¶mUÿÿ¶ÿÛÛUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$$UÿÿÿÿÛ¶ªÿÛÛÿÿIIUÿIIUÿÛÛÿÿ’$ªÿmªÿÛªÿÿÿÿÛÿÿÿªÿÿªÿ¶Uÿÿªÿ¶UÿÿUÿÿÿmÿÿIÿÿIÿÛIÿÛ$ÿÿIÿÿIÿÛ¶ªÿÛÛªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛ¶ªÿ$$ÿÿÿÿÿIIUÿÛÛÿÿm$ªÿmªÿmªÿ¶ÿÿmªÿÛÿÿÿÿÿÛªÿ¶ªÿÿªÿÿªÿÛªÿÿUÿÿÿÿÿÛUÿÿUÿÿÿ¶ÿÿ$ÿÛIÿÛmUÿÿ¶UÿÛ¶ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÿÿÛÛÿÿmmUÿÿÿÿ$$UÿIªÿÿÿÿÿmÿÿmÿÿ’ÿÿmªÿÛÿÿ¶ªÿÿÿÿÿÿÿÛªÿÿªÿÿªÿ¶Uÿÿªÿÿªÿ¶UÿÿUÿÛÿÿÿÿ$ÿ’ÿÛ$ÿÿ$ÿÛmUÿÛ¶ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÿÿ’’ªÿÛ¶ªÿ¶¶ªÿ¶¶ªÿÿÿÿÿÿUÿÿÿ$ÿÿIÿÿªÿmÿÿmÿÿ’ÿÿmªÿÛÿÿÿÿÿÛªÿÛÿÿÿÿÿ’ªÿÿªÿÿªÿÛªÿÿUÿ¶UÿÿUÿÛÿÛÿÿÿ’ÿÛmÿÿ¶Uÿ¶’ªÿÿÛªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’’ªÿ’’ªÿIIUÿIIUÿmmUÿÛÛªÿ’’ªÿUÿÿÿÿÿÿÿÿÿÿIÿÿIÿÿmÿÿ’ÿÿ¶ÿÿmªÿ¶ÿÿÛÿÿÛÿÿÿÿÿ’ªÿÿÿÿ’ªÿÿªÿÿªÿÛªÿÿªÿ¶ÿÿ$ÿ’ÿÿÿÿ$ÿÛ$ÿ¶IÿÛÛUÿ¶’UÿÛmUÿÿ¶UÿÿÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’’ªÿ’’ªÿmIUÿ’’ªÿmIUÿ’’ªÿÛÛÿÿ¶ÿÿ’ÿÿmÿÿ$ÿÿUÿÿÿÿÿÿUÿ$ÿÿIÿÿIÿÿIÿÿIÿÿIªÿ’ÿÿmÿÿ¶ÿÿ¶ÿÿÛÿÿÛÿÿmªÿÿÿÿ¶UÿÿªÿmUÿÿªÿÿUÿmÿÿ$ÿ’ÿÛÿÿ$ÿÿ$ÿ¶IÿÛIÿÿmÿ¶Iÿÿÿÿ$ÿÛIÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶¶ªÿ’’ªÿmmUÿÛ¶ªÿÛ¶ªÿÛ¶ªÿÛÛÿÿÿmªÿÛªÿÿÿÿmªÿmÿÿmªÿIÿÿIªÿªÿÿÿÿÿÿUÿÿÿÿÿ$ÿÿIÿÿIªÿmÿÿIªÿmÿÿmÿÿ¶ÿÿmªÿÿÿÿ¶ªÿÿÿÿÿÿÿ¶UÿÿªÿmUÿÿªÿÿªÿ¶ÿÿÿÿ$ÿÿ$ÿ’UÿÿUÿÛÿÛ$ÿÿIÿÛIÿ¶IÿÿmUÿÿmUÿÛ¶ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’’ªÿ¶¶ªÿÛÛÿÿ’’ªÿÛÛÿÿÿmªÿ¶UÿÿªÿmUÿÿÿÿ¶ªÿ¶ÿÿmªÿ¶ÿÿIªÿIªÿªÿÿÿÿÿÿÿUÿÿÿÿÿ$ÿÿ$ÿÿªÿIÿÿmÿÿ¶ÿÿmªÿ¶ÿÿmªÿÿÿÿÛªÿÿÿÿÿÿÿ’UÿÿªÿÿªÿÛUÿ¶ªÿÿªÿmUÿÿUÿÿÿmÿÿUÿÿUÿmÿÛÿÿ$ÿÛÿÛmUÿÿ¶UÿÿÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛ¶ªÿÛÛÿÿÛÛÿÿÛ¶ªÿÿÿÿÿÿ¶UÿÛÿÿUÿ’Uÿÿªÿ’ªÿÿÿÿ¶ªÿÿÿÿ’ªÿmªÿ’ÿÿmªÿ’ÿÿmÿÿ$UÿÿÿÿÿÿÿUÿªÿªÿ$ÿÿªÿIÿÿmÿÿmÿÿ’ÿÿmªÿ’ÿÿmªÿÛÿÿÿÿÿÛªÿ¶ÿÿÛÿÿmªÿÿªÿÿªÿ’UÿÿªÿÛªÿ’Uÿÿªÿÿªÿ¶ÿÿÿÿ$ÿÛIÿÛÿÛÿ¶ÿÿÿÿmUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛ’Uÿÿ$ÿ¶ÿÿUÿ’UÿÿªÿÛªÿÿªÿ¶ªÿmªÿÛÿÿ’ÿÿÛÿÿ¶ÿÿ’ªÿ’ÿÿmÿÿmÿÿ$UÿÿÿÿÿÿÿÿUÿUÿ$ÿÿªÿ$ÿÿªÿmÿÿmÿÿmªÿIÿÿmÿÿmªÿÛÿÿÛÿÿ’ªÿÛÿÿ’ÿÿÛÿÿÿÿÿÿªÿ’Uÿÿªÿÿªÿ¶Uÿÿªÿ¶UÿÿªÿÿUÿÿªÿ¶Uÿ¶’ªÿÿÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛ¶ªÿÛmÿÿÿ¶ÿÿÿÛÿÿUÿ¶UÿÛªÿÿÿÿÿÿÿÿÿÿÿÿÿÛªÿÛÿÿÛÿÿ¶ÿÿ’ÿÿ¶ÿÿmªÿIªÿ$UÿÿÿÿÿÿÿÿÿUÿªÿUÿÿÿÿÿIªÿmÿÿIªÿIÿÿmÿÿIªÿ’ÿÿ’ÿÿ¶ÿÿmªÿÛÿÿÿÿÿ’ªÿÿÿÿ’ªÿÿÿÿÿÿÿ’ªÿÛUÿÿUÿÿÿÿÿ¶ÿÿIUÿÿIÿ¶IÿÛÛªÿÿIUÿÿmUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÿÿÛ¶ªÿÿmÿÛ$ÿÿ$ÿÿ$ÿ¶ÿÿÿÛªÿÿªÿ¶UÿÿªÿÿªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÿÿ¶ÿÿ’ÿÿmÿÿmªÿ¶ÿÿIUÿ$Uÿ$UÿÿÿÿÿÿÿÿÿÿUÿªÿUÿÿÿ$ÿÿIÿÿªÿmÿÿmÿÿIªÿmÿÿmÿÿmÿÿ’ÿÿmªÿÿÿÿÿÿÿÿªÿ’UÿÿªÿÿªÿÛUÿ’UÿÿªÿÿªÿÛUÿ¶mÿÛ¶ÿ¶’ÿÛÛUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÿÿÛÛÿÿÛÛÿÿÿmÿ¶Iÿ¶IÿÿIÿ¶ÿÿUÿ¶ÿÿUÿÿUÿÛªÿÿªÿ¶Uÿÿªÿ¶ªÿÿªÿ¶ªÿÿÿÿmªÿ’ÿÿÿÿÿ’ÿÿÛÿÿ’ÿÿÛÿÿmªÿ’ÿÿIUÿmªÿ$Uÿ$UÿÿÿÿÿÿÿÿÿÿÿÿUÿªÿªÿÿÿªÿmÿÿmÿÿmÿÿIªÿ’ÿÿ¶ÿÿmªÿ’ÿÿÛÿÿÛÿÿ¶IÿÛ¶ÿ¶’ÿÿÛÿÛ¶ÿ¶’ÿÿÛÿÿÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛ’UÿÛ¶UÿÛmÿÿÿÿÿÿÿÿÿÛÿÿUÿ’UÿÿUÿ’UÿÿUÿ’UÿÿªÿÛªÿÿÿÿÛªÿÿªÿ¶ªÿÿÿÿÛªÿÿÿÿÿÿÿÛÿÿÿÿÿÿÿÿ¶ªÿ¶ÿÿmªÿÛÿÿ’ªÿÛÿÿ’ªÿmªÿmªÿ$Uÿ$$ÿ$UÿÿÿÿÿÿÿÿÿUÿUÿªÿªÿIªÿmIUÿÿÛÿ¶’ÿÿÛÿÿÛÿ¶mÿÿÛÿ¶’ÿÛ¶ÿÿÛÿÿÛÿÛÛªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÿÿÛ¶ªÿÛ¶ªÿÿIÿ¶IÿÿIÿ¶Iÿÿ$ÿÿÿÿÿÿÿÿÿÿUÿÛUÿÿªÿÛªÿ¶UÿÿUÿ¶Uÿÿªÿ’Uÿÿªÿ’UÿÿªÿmUÿÿªÿÿÿÿ¶ªÿÿÿÿmªÿÿÿÿÛªÿÛÿÿ’ÿÿÛÿÿÛÿÿ’ÿÿÿÿÿÿÿÿmªÿ’ÿÿmªÿ¶ÿÿIUÿ’ÿÿmªÿmªÿmUÿÿ$$ÿÿÿÿÿÿÿmIÿmIÿÛ¶ÿÿÛÿ¶mÿÿÛÿ¶’ÿÿÛÿÿÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÿÿÛÛÿÿÛÛªÿÛ¶ªÿÿmÿÛmUÿÿIÿ¶IÿÿIÿ’ÿÿ$ÿ¶ÿÿÿmÿÿÿ¶ÿÿÿÛÿÿUÿÛÿÿUÿÛÿÿUÿmUÿÿUÿÿªÿ’Uÿÿÿÿ¶ªÿÿªÿ¶ªÿÿÿÿ¶ªÿÿªÿÿÿÿ’ªÿÿªÿÿÿÿmUÿÿÿÿ¶ªÿÿÿÿ’ªÿÿªÿÛªÿÛªÿÿÿÿmªÿÿÿÿ’ªÿÛ¶ÿ¶’ÿÿÛÿÛ¶ÿÿÛÿ¶’ÿ¶’ÿmIÿmIÿÿmIÿ$$ÿÛ¶ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛ¶ªÿÛÛÿÿÿ¶Uÿ¶¶ªÿÿmÿ¶IUÿÿIÿ¶Iÿÿ$ÿ¶IÿÛ$ÿÛ$ÿÿÿ¶ÿÛÿÿÿÿÿmÿÿÿÿUÿ’Uÿÿªÿ’UÿÿUÿÛUÿÿªÿ’Uÿÿªÿÿªÿ’Uÿÿªÿÿªÿ’UÿÿªÿÛªÿÿªÿ¶UÿÿUÿÛªÿ¶Uÿÿªÿ’Uÿÿÿÿÿÿÿ¶IUÿ¶’ÿÿÛÿÛ¶ÿÛ¶ÿ¶’ÿÿÛÿÛ¶ÿÛ¶ÿ¶’ÿÛ¶ÿÛ¶ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛmUÿÛÛªÿÛ’ªÿÛ¶ªÿÛmUÿÛ’UÿÿIÿ¶IÿÛ$ÿ¶IÿÿIÿ’ÿÛ$ÿÿ$ÿ¶UÿÿUÿ¶Uÿÿÿ¶ÿÿUÿ’UÿÿÿÿUÿmÿÿÿÿUÿ¶UÿÛUÿÛUÿÿªÿ’Uÿÿÿÿÿ¶ÿÿUÿÛUÿ¶Uÿÿªÿ’Uÿ¶’ÿÛ¶ÿÛ¶ÿ¶’ÿÛ¶ÿ¶’ÿÛÛUÿÛ¶ªÿÛ¶ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛ¶ªÿÛ¶ªÿÛ¶ªÿÛmÿmÿÿ$Uÿ¶UÿÛIÿÛ$ÿÛUÿÛUÿ¶ÿÿÿ¶ÿÛ$ÿÿÿmÿÿÿÛÿÿÿÿUÿmUÿ$$Uÿ$$UÿIIUÿmUÿ$$ÿÛIªÿÿ$ªÿÛ¶ªÿÛÛªÿÛ¶ªÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛªÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿpq€éôq€éëpppppq~ sq~ uq~pppp. * *//** * Renders an HTML BUTTON tag within the Struts framework. * * @author Don Clasen * @version $Revision: 1.14 $ $Date: 2002/11/16 06:05:21 $ */ ptButtonTag.javaq~fxsq~ uq~ppppsq~ uq~q~Ypppq~fxsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxsq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~q~X°pppsq~ uq~ppppq~$q~Äxq~$tk super.release(); property = null; text = null; value = null; sq~ uq~ppppq~$q~$xq~Z-q~Z½q~[Mq~[Ýq~jØq~khq~køq~lˆq~msq~isq~ uq~ppppq~Vsq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~q~X°pppsq~ uq~sq~isq~ uq~ppppq~Uýsq~ uq~ppppptC/** * Release the tag's resources and reset the values. */ ptreleaseq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~q€ñˆpppsq~ uq~ppppq~~q~Šxq~~tn super.release(); // reset the originals originalName = null; originalProperty = null; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~Uýsq~ uq~ppppptC/** * Release the tag's resources and reset the values. */ ptreleaseq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~q€ñˆpppsq~ uq~ppppq~fq~rxq~ftn super.release(); // reset the originals originalName = null; originalProperty = null; sq~ uq~ppppq~fq~fxppq~$q~Äxq~$t super.release(); name = Constants.BEAN_KEY; property = null; text = null; value = null; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~Vsq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~q~X°pppsq~ uq~ppppq~¥q~»xq~¥t super.release(); name = Constants.BEAN_KEY; property = null; text = null; value = null; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~Vsq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~q~X°pppsq~ uq~ppppq~–q~¢xq~–t super.release(); name = Constants.BEAN_KEY; property = null; text = null; value = null; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~Vsq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~q~X°pppsq~ uq~ppppq~~q~Šxq~~t super.release(); name = Constants.BEAN_KEY; property = null; text = null; value = null; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~Vsq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~q~X°pppsq~ uq~ppppq~fq~rxq~ft super.release(); name = Constants.BEAN_KEY; property = null; text = null; value = null; sq~ uq~ppppq~fq~fxq€”ªq€™Ãq€9q€ °q€¤'q€½›q€Ç¸q€ÊBq€Íq€Ï°q€¯Kq€°Ðq€±†q€²"); if (value != null) { results.append(ResponseUtils.filter(value)); } else { Object bean = pageContext.findAttribute(name); if (bean == null) throw new JspException (messages.getMessage("getter.bean", name)); try { String value = BeanUtils.getProperty(bean, property); if (value == null) value = ""; results.append(ResponseUtils.filter((String) value)); } catch (IllegalAccessException e) { throw new JspException (messages.getMessage("getter.access", property, name)); } catch (InvocationTargetException e) { Throwable t = e.getTargetException(); throw new JspException (messages.getMessage("getter.result", property, t.toString())); } catch (NoSuchMethodException e) { throw new JspException (messages.getMessage("getter.method", property, name)); } } results.append(""); // Print this field to our output writer ResponseUtils.write(pageContext, results.toString()); // Continue processing this page return (EVAL_BODY_TAG); sq~ uq~q~pppq~¥q~¥xq€ò=sq~isq~ uq~ppppq~Xcsq~ uq~ppppppptgetNameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t# return (this.name); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€òÊsq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~Xcsq~ uq~ppppppptsetNameq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t! this.name = name; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~Xcsq~ uq~ppppptø// --------------------------------------------------------- Public Methods /** * Generate the required input tag. * Support for indexed since Struts 1.1 * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~q~Xpppsq~ uq~ppppq~–q~¢xq~–t ¼ // Create an appropriate "input" element based on our parameters StringBuffer results = new StringBuffer(""); if (value != null) { results.append(ResponseUtils.filter(value)); } else { Object bean = pageContext.findAttribute(name); if (bean == null) throw new JspException (messages.getMessage("getter.bean", name)); try { String value = BeanUtils.getProperty(bean, property); if (value == null) value = ""; results.append(ResponseUtils.filter(value)); } catch (IllegalAccessException e) { throw new JspException (messages.getMessage("getter.access", property, name)); } catch (InvocationTargetException e) { Throwable t = e.getTargetException(); throw new JspException (messages.getMessage("getter.result", property, t.toString())); } catch (NoSuchMethodException e) { throw new JspException (messages.getMessage("getter.method", property, name)); } } results.append(""); // Print this field to our output writer ResponseUtils.write(pageContext, results.toString()); // Continue processing this page return (EVAL_BODY_TAG); sq~ uq~q~pppq~–q~–xq€òMsq~isq~ uq~ppppq~Xcsq~ uq~ppppppptgetNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t# return (this.name); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€ósq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~Xcsq~ uq~ppppppptsetNameq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t! this.name = name; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~Xcsq~ uq~ppppptø// --------------------------------------------------------- Public Methods /** * Generate the required input tag. * Support for indexed since Struts 1.1 * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~q~Xpppsq~ uq~ppppq~~q~Šxq~~t| ResponseUtils.write(pageContext, this.renderTextareaElement()); return (EVAL_BODY_TAG); sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~Xcsq~ uq~pppppts/** * Generate an HTML <textarea> tag. * @throws JspException * @since Struts 1.1 */ ptrenderTextareaElementq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t StringBuffer results = new StringBuffer(""); results.append(this.renderData()); results.append(""); return results.toString(); sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~Xcsq~ uq~pppppt…/** * Renders the value displayed in the <textarea> tag. * @throws JspException * @since Struts 1.1 */ pt renderDataq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~tâ String data = this.value; if (data == null) { data = this.lookupProperty(this.name, this.property); } return (data == null) ? "" : ResponseUtils.filter(data); sq~ uq~q~pppq~~q~~xq€ò]sq~isq~ uq~ppppq~Xcsq~ uq~ppppppptgetNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft# return (this.name); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€óVsq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~Xcsq~ uq~ppppppptsetNameq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft! this.name = name; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~Xcsq~ uq~ppppptø// --------------------------------------------------------- Public Methods /** * Generate the required input tag. * Support for indexed since Struts 1.1 * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~q~Xpppsq~ uq~ppppq~fq~rxq~ft| ResponseUtils.write(pageContext, this.renderTextareaElement()); return (EVAL_BODY_TAG); sq~ uq~q~pppq~fq~fxsq~isq~ uq~ppppq~Xcsq~ uq~pppppts/** * Generate an HTML <textarea> tag. * @throws JspException * @since Struts 1.1 */ ptrenderTextareaElementq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft StringBuffer results = new StringBuffer(""); results.append(this.renderData()); results.append(""); return results.toString(); sq~ uq~q~pppq~fq~fxsq~isq~ uq~ppppq~Xcsq~ uq~pppppt…/** * Renders the value displayed in the <textarea> tag. * @throws JspException * @since Struts 1.1 */ pt renderDataq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ftâ String data = this.value; if (data == null) { data = this.lookupProperty(this.name, this.property); } return (data == null) ? "" : ResponseUtils.filter(data); sq~ uq~q~pppq~fq~fxq€òmppppq~$Isq~ uq~pppppppt TextareaTagq~=xsq~ uq~q€Ž#pppq~$sq~ uq~q~iêq€øppsq~ uq~q~V,pppq~$q~$sq~Qsq~ uq~sq~Csq~ uq~ppppq€ó¦sq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq€ó¦sq~ uq~ppppsq~#q~*?xppq~$Isq~ uq~pppppt /* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/TextareaTag.java,v 1.14 2003/05/18 18:57:13 dgraham Exp $ * $Revision: 1.14 $ * $Date: 2003/05/18 18:57:13 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Custom tag for input fields of type "textarea". * * @author Craig R. McClanahan * @author David Graham * @version $Revision: 1.14 $ $Date: 2003/05/18 18:57:13 $ */ ptTextareaTag.javaq~fxsq~ uq~ppppsq~ uq~q~Xcpppq~fxsq~ uq~q€Œëppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxsq~ uq~ppppptç// --------------------------------------------------------- Public Methods /** * Generate the required input tag. * [Indexed since 1.1] * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~q~Xpppsq~ uq~q€Œîq€1q€Yq€q€¯q~$q~Äxq~$t ¾ // Create an appropriate "input" element based on our parameters StringBuffer results = new StringBuffer(""); if (value != null) { results.append(ResponseUtils.filter(value)); } else { Object bean = pageContext.findAttribute(name); if (bean == null) throw new JspException (messages.getMessage("getter.bean", name)); try { String value = BeanUtils.getProperty(bean, property); if (value == null) value = ""; results.append(ResponseUtils.filter((String) value)); } catch (IllegalAccessException e) { throw new JspException (messages.getMessage("getter.access", property, name)); } catch (InvocationTargetException e) { Throwable t = e.getTargetException(); throw new JspException (messages.getMessage("getter.result", property, t.toString())); } catch (NoSuchMethodException e) { throw new JspException (messages.getMessage("getter.method", property, name)); } } results.append(""); // Print this field to our output writer ResponseUtils.write(pageContext, results.toString()); // Continue processing this page return (EVAL_BODY_TAG); sq~ uq~q~pppq~$q~$xq€ò«q€òáq€óq€ómq~$q~Äxq~$t$ return (EVAL_BODY_TAG); sq~ uq~q~pppq~$q~$xpppsq~ uq~q~Wsq~isq~ uq~ppppq~Wsq~ uq~pppppt5// --------------------------------------------------------- Public Methods /** * Generate the required input tag, followed by the optional rendered text. * Support for write property since Struts 1.1. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~q~Xpppsq~ uq~ppppq~¥q~»xq~¥t // Render the tag as before super.doStartTag(); // Is rendering the value separately requested? if (!write) { return (EVAL_BODY_TAG); } // Calculate the value to be rendered separately // * @since Struts 1.1 String results = null; if (value != null) { results = ResponseUtils.filter(value); } else { Object value = RequestUtils.lookup(pageContext, name, property, null); if (value == null) { results = ""; } else { results = ResponseUtils.filter(value.toString()); } } // Render the result to the output writer ResponseUtils.write(pageContext, results); return (EVAL_BODY_TAG); sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~ppppq~Wsq~ uq~pppppt5// --------------------------------------------------------- Public Methods /** * Generate the required input tag, followed by the optional rendered text. * Support for write property since Struts 1.1. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~q~Xpppsq~ uq~ppppq~–q~¢xq~–t // Render the tag as before super.doStartTag(); // Is rendering the value separately requested? if (!write) { return (EVAL_BODY_TAG); } // Calculate the value to be rendered separately // * @since Struts 1.1 String results = null; if (value != null) { results = ResponseUtils.filter(value); } else { Object value = RequestUtils.lookup(pageContext, name, property, null); if (value == null) { results = ""; } else { results = ResponseUtils.filter(value.toString()); } } // Render the result to the output writer ResponseUtils.write(pageContext, results); return (EVAL_BODY_TAG); sq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq~Wsq~ uq~pppppt5// --------------------------------------------------------- Public Methods /** * Generate the required input tag, followed by the optional rendered text. * Support for write property since Struts 1.1. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~q~Xpppsq~ uq~ppppq~~q~Šxq~~t // Render the tag as before super.doStartTag(); // Is rendering the value separately requested? if (!write) { return (EVAL_BODY_TAG); } // Calculate the value to be rendered separately // * @since Struts 1.1 String results = null; if (value != null) { results = ResponseUtils.filter(value); } else { Object value = RequestUtils.lookup(pageContext, name, property, null); if (value == null) { results = ""; } else { results = ResponseUtils.filter(value.toString()); } } // Render the result to the output writer ResponseUtils.write(pageContext, results); return (EVAL_BODY_TAG); sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~Wsq~ uq~pppppt5// --------------------------------------------------------- Public Methods /** * Generate the required input tag, followed by the optional rendered text. * Support for write property since Struts 1.1. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~q~Xpppsq~ uq~ppppq~fq~rxq~ft // Render the tag as before super.doStartTag(); // Is rendering the value separately requested? if (!write) { return (EVAL_BODY_TAG); } // Calculate the value to be rendered separately // * @since Struts 1.1 String results = null; if (value != null) { results = ResponseUtils.filter(value); } else { Object value = RequestUtils.lookup(pageContext, name, property, null); if (value == null) { results = ""; } else { results = ResponseUtils.filter(value.toString()); } } // Render the result to the output writer ResponseUtils.write(pageContext, results); return (EVAL_BODY_TAG); sq~ uq~q~pppq~fq~fxq€‹q€‹Kq€‹sq€‹›q€‹Éq€ŽVq€Ž™q€ŽÁq€Žéq€q€ŠOq€Š’q€Šºq€lppq~$q~Äxq~$tÄ // Create an appropriate "input" element based on our parameters StringBuffer results = new StringBuffer(""); // Print this field to our output writer ResponseUtils.write(pageContext, results.toString()); // Continue processing this page return (EVAL_BODY_TAG); sq~ uq~q~pppq~$q~$xq~WXsq~isq~ uq~ppppq~W[sq~ uq~pppppppt getAcceptq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t% return (this.accept); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq€ô'sq~ uq~ppppppptacceptq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~W[sq~ uq~pppppppt setAcceptq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t% this.accept = accept; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~W[sq~ uq~ppppppptgetNameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t# return (this.name); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq€ôMsq~ uq~ppppppptnameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~W[sq~ uq~ppppppptsetNameq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t! this.name = name; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~W[sq~ uq~pppppppt getRedisplayq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t( return (this.redisplay); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq€ôssq~ uq~pppppppt redisplayq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xpppq~W[sq~ uq~pppppppt setRedisplayq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t+ this.redisplay = redisplay; sq~ uq~ppppq~¥q~¥xq~X q€ñýsq~isq~ uq~ppppq~W[sq~ uq~pppppppt getAcceptq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t% return (this.accept); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€ô™sq~ uq~ppppppptacceptq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~W[sq~ uq~pppppppt setAcceptq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t% this.accept = accept; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~W[sq~ uq~ppppppptgetNameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t# return (this.name); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€ô¿sq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~W[sq~ uq~ppppppptsetNameq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t! this.name = name; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~W[sq~ uq~pppppppt getRedisplayq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t( return (this.redisplay); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€ôåsq~ uq~pppppppt redisplayq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xpppq~W[sq~ uq~pppppppt setRedisplayq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t+ this.redisplay = redisplay; sq~ uq~ppppq~–q~–xq~X0q€ò sq~isq~ uq~ppppq~W[sq~ uq~pppppppt getAcceptq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t% return (this.accept); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€õ sq~ uq~ppppppptacceptq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~W[sq~ uq~pppppppt setAcceptq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t% this.accept = accept; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~W[sq~ uq~ppppppptgetNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t# return (this.name); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€õ1sq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~W[sq~ uq~ppppppptsetNameq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t! this.name = name; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~W[sq~ uq~pppppppt getRedisplayq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t( return (this.redisplay); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€õWsq~ uq~pppppppt redisplayq~{xsq~ uq~pppppq~~q~q~~q~pq~€xpppq~W[sq~ uq~pppppppt setRedisplayq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t+ this.redisplay = redisplay; sq~ uq~ppppq~~q~~xq~X@q€òsq~isq~ uq~ppppq~W[sq~ uq~pppppppt getAcceptq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft% return (this.accept); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€õ}sq~ uq~ppppppptacceptq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~W[sq~ uq~pppppppt setAcceptq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft% this.accept = accept; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~W[sq~ uq~ppppppptgetNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft# return (this.name); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€õ£sq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~W[sq~ uq~ppppppptsetNameq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft! this.name = name; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~W[sq~ uq~pppppppt getRedisplayq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft( return (this.redisplay); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€õÉsq~ uq~pppppppt redisplayq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxpppq~W[sq~ uq~pppppppt setRedisplayq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft+ this.redisplay = redisplay; sq~ uq~ppppq~fq~fxq~XPq€ò-q~$Isq~ uq~pppppppt BaseFieldTagq~=xsq~ uq~ppppsq~#sq~ uq~q~\pppsq~ uq~q~V,pppq~$q~$sq~Qsq~ uq~sq~Csq~ uq~ppppq€õêsq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq€õêsq~ uq~ppppsq~#q~%9xsq~Csq~ uq~ppppq€õêsq~ uq~ppppsq~#q~*?xpq~$Isq~ uq~pppppt /* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/BaseFieldTag.java,v 1.17 2002/11/16 06:05:21 dgraham Exp $ * $Revision: 1.17 $ * $Date: 2002/11/16 06:05:21 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Convenience base class for the various input tags for text fields. * * @author Craig R. McClanahan * @version $Revision: 1.17 $ $Date: 2002/11/16 06:05:21 $ */ ptBaseFieldTag.javaq~fxsq~ uq~ppppsq~ uq~q~W[pppq~fxsq~ uq~q~\q~Wq€Œq€jpq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxsq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~q~X¥pppsq~ uq~ q~WMsq~isq~ uq~ppppq~Wsq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~q~WXpppsq~ uq~ppppq~¥q~»xq~¥t< super.release(); write = false; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~Wsq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~q~WXpppsq~ uq~ppppq~–q~¢xq~–t< super.release(); write = false; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~Wsq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~q~WXpppsq~ uq~ppppq~~q~Šxq~~t< super.release(); write = false; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~Wsq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~q~WXpppsq~ uq~ppppq~fq~rxq~ft< super.release(); write = false; sq~ uq~ppppq~fq~fxq€‹«q€‹éq€Žùq€7q€Nq€|q~$q~Äxq~$t{ super.release(); accept = null; name = Constants.BEAN_KEY; redisplay = true; sq~ uq~ppppq~$q~$xpppsq~ uq~sq~isq~ uq~ppppq~Võsq~ uq~ppppptC/** * Release the tag's resources and reset the values. */ ptreleaseq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~q~WMpppsq~ uq~ppppq~~q~Šxq~~tn super.release(); // reset the originals originalName = null; originalProperty = null; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~Võsq~ uq~ppppptC/** * Release the tag's resources and reset the values. */ ptreleaseq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~q~WMpppsq~ uq~ppppq~fq~rxq~ftn super.release(); // reset the originals originalName = null; originalProperty = null; sq~ uq~ppppq~fq~fxppq~$q~Äxq~$t< super.release(); write = false; sq~ uq~ppppq~$q~$xsq~esq~ uq~ppppq~Wsq~ uq~ppppptˆ// ----------------------------------------------------------- Constructors /** * Construct a new instance of this tag. */ pq~Wq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t3 super(); this.type = "hidden"; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~Wsq~ uq~ppppppptgetWriteq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t$ return (this.write); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq€ösq~ uq~ppppppptwriteq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xpppq~Wsq~ uq~ppppppptsetWriteq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t# this.write = write; sq~ uq~ppppq~¥q~¥xq€óÕq€ösq~esq~ uq~ppppq~Wsq~ uq~ppppptˆ// ----------------------------------------------------------- Constructors /** * Construct a new instance of this tag. */ pq~Wq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t3 super(); this.type = "hidden"; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~Wsq~ uq~ppppppptgetWriteq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t$ return (this.write); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€öÒsq~ uq~ppppppptwriteq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xpppq~Wsq~ uq~ppppppptsetWriteq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t# this.write = write; sq~ uq~ppppq~–q~–xq€óåq€ö'sq~esq~ uq~ppppq~Wsq~ uq~ppppptˆ// ----------------------------------------------------------- Constructors /** * Construct a new instance of this tag. */ pq~Wq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t3 super(); this.type = "hidden"; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~Wsq~ uq~ppppppptgetWriteq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t$ return (this.write); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€÷sq~ uq~ppppppptwriteq~{xsq~ uq~pppppq~~q~q~~q~pq~€xpppq~Wsq~ uq~ppppppptsetWriteq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t# this.write = write; sq~ uq~ppppq~~q~~xq€óõq€ö7sq~esq~ uq~ppppq~Wsq~ uq~ppppptˆ// ----------------------------------------------------------- Constructors /** * Construct a new instance of this tag. */ pq~Wq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft3 super(); this.type = "hidden"; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~Wsq~ uq~ppppppptgetWriteq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft$ return (this.write); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€÷. * *//** * Custom tag for input fields of type "hidden". * * @author Craig R. McClanahan * @version $Revision: 1.4 $ $Date: 2002/10/05 22:53:57 $ */ ptHiddenTag.javaq~fxsq~ uq~ppppsq~ uq~q~Wpppq~fxsq~ uq~q~Võppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxsq~ uq~pppppt.// --------------------------------------------------------- Public Methods /** * Generate the required input tag, followed by the optional rendered text. * Support for write property since 1.1. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~q~Xpppsq~ uq~q~Vøsq~isq~ uq~ppppq~Võsq~ uq~pppppt /** * Overriding method of the heart of the matter. Gets the relative property * and leaves the rest up to the original tag implementation. Sweet. * @return int JSP continuation directive. * This is in the hands of the super class. */ pt doStartTagq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~q~Wpppsq~ uq~ppppq~¥q~»xq~¥tr /* singleton tag implementations will need the original property to be set before running */ super.setProperty(originalProperty); /* let the NestedHelper set the properties it can */ isNesting = true; NestedPropertyHelper.setNestedProperties(this); isNesting = false; /* do the tag */ return super.doStartTag(); sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~ppppq~Võsq~ uq~pppppt /** * Overriding method of the heart of the matter. Gets the relative property * and leaves the rest up to the original tag implementation. Sweet. * @return int JSP continuation directive. * This is in the hands of the super class. */ pt doStartTagq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~q~Wpppsq~ uq~ppppq~–q~¢xq~–tr /* singleton tag implementations will need the original property to be set before running */ super.setProperty(originalProperty); /* let the NestedHelper set the properties it can */ isNesting = true; NestedPropertyHelper.setNestedProperties(this); isNesting = false; /* do the tag */ return super.doStartTag(); sq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq~Võsq~ uq~pppppt /** * Overriding method of the heart of the matter. Gets the relative property * and leaves the rest up to the original tag implementation. Sweet. * @return int JSP continuation directive. * This is in the hands of the super class. */ pt doStartTagq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~q~Wpppsq~ uq~ppppq~~q~Šxq~~to // get the original properties originalName = getName(); originalProperty = getProperty(); // request HttpServletRequest request = (HttpServletRequest)pageContext.getRequest(); // set the properties NestedPropertyHelper.setNestedProperties(request, this); // let the super do it's thing return super.doStartTag(); sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~Võsq~ uq~pppppt /** * Overriding method of the heart of the matter. Gets the relative property * and leaves the rest up to the original tag implementation. Sweet. * @return int JSP continuation directive. * This is in the hands of the super class. */ pt doStartTagq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~q~Wpppsq~ uq~ppppq~fq~rxq~fto // get the original properties originalName = getName(); originalProperty = getProperty(); // request HttpServletRequest request = (HttpServletRequest)pageContext.getRequest(); // set the properties NestedPropertyHelper.setNestedProperties(request, this); // let the super do it's thing return super.doStartTag(); sq~ uq~q~pppq~fq~fxq~$q~Äxq~$tk // Render the tag as before super.doStartTag(); // Is rendering the value separately requested? if (!write) { return (EVAL_BODY_TAG); } // Calculate the value to be rendered separately String results = null; if (value != null) { results = ResponseUtils.filter(value); } else { Object value = RequestUtils.lookup(pageContext, name, property, null); if (value == null) { results = ""; } else { results = ResponseUtils.filter(value.toString()); } } // Render the result to the output writer ResponseUtils.write(pageContext, results); return (EVAL_BODY_TAG); sq~ uq~q~pppq~$q~$xpppsq~ uq~ppppq~$q~Äxq~$t~ /* singleton tag implementations will need the original property to be set before running */ super.setProperty(originalProperty); /* let the NestedHelper set the properties it can */ isNesting = true; NestedPropertyHelper.setNestedProperties(this); isNesting = false; /* do the tag */ return super.doStartTag(); sq~ uq~q~pppq~$q~$xq~Vêsq~(sq~ uq~ppppq~Võsq~ uq~ppppptW/* hold original property */ /* hold original property */ /* hold original property */ ptoriginalPropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~%Zxpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq~Võsq~ uq~pppppppt isNestingq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~%Zxpppt falseq~$q~$q~$xq€÷ˆsq~isq~ uq~sq~bsq~ uq~ppppq€÷ësq~ uq~pppppppt newPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~Võsq~ uq~pppppt//** this is overridden so that properties being set by the JSP page aren't * written over by those needed by the extension. If the tag instance is * re-used by the JSP, the tag can set the property back to that set by the * JSP page. * * @param newProperty new property value */ pt setPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~q~VÕq~Tfppsq~ uq~ppppq~¥q~»xq~¥tÑ /* let the real tag do its thang */ super.setProperty(newProperty); /* if it's the JSP setting it, remember the value */ if (!isNesting) { originalProperty = newProperty; } sq~ uq~ppppq~¥q~¥xq€÷˜sq~isq~ uq~sq~bsq~ uq~ppppq€øsq~ uq~pppppppt newPropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~Võsq~ uq~pppppt//** this is overridden so that properties being set by the JSP page aren't * written over by those needed by the extension. If the tag instance is * re-used by the JSP, the tag can set the property back to that set by the * JSP page. * * @param newProperty new property value */ pt setPropertyq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~q~VÕq~Tfppsq~ uq~ppppq~–q~¢xq~–tÑ /* let the real tag do its thang */ super.setProperty(newProperty); /* if it's the JSP setting it, remember the value */ if (!isNesting) { originalProperty = newProperty; } sq~ uq~ppppq~–q~–xq€÷¨q€Šâq€ö\sq~(sq~ uq~ppppq~Võsq~ uq~ppppptR/* the usual private member variables */ /* the usual private member variables */ pt originalNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~d1xpppt nullq~~q~~q~~xq€÷¸q€Šòq€ölppppq~Uúsq~ uq~ppppppptNestedHiddenTagq~=xsq~ uq~ppppq~$sq~ uq~q~d½pppsq~ uq~q~Wq~T­ppq~$q~$q€ð sq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxsq~ uq~pppppt//** this is overridden so that properties being set by the JSP page aren't * written over by those needed by the extension. If the tag instance is * re-used by the JSP, the tag can set the property back to that set by the * JSP page. * * @param newProperty new property value */ pt setPropertyq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~q~VÕq~Tfppsq~ uq~ppppq~$q~Äxq~$tÑ /* let the real tag do its thang */ super.setProperty(newProperty); /* if it's the JSP setting it, remember the value */ if (!isNesting) { originalProperty = newProperty; } sq~ uq~ppppq~$q~$xq€÷ëq€øq€‹q€‹[q€‹ƒq€Œþq€Aq€iq€Žfq€Ž©q€ŽÑq€Š_q€Š¢q~$q~Äxq~$t& this.property = property; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~V,sq~ uq~pppppt?/** * Return the number of rows for this field. */ ptgetRowsq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t return (this.rows); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq€øXsq~ uq~ppppppptrowsq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~V,sq~ uq~pppppto/** * Set the number of rows for this field. * * @param rows The new number of rows */ ptsetRowsq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t this.rows = rows; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~V,sq~ uq~ppppptY/** * Return the size of this field (synonym for getCols()). */ ptgetSizeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t return (getCols()); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq€ø€sq~ uq~ppppppptsizeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~V,sq~ uq~pppppt/** * Set the size of this field (synonym for setCols()). * * @param size The new size */ ptsetSizeq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t setCols(size); sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~V,sq~ uq~pppppt6/** * Return the field value (if any). */ ptgetValueq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t! return (this.value); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq€ø¨sq~ uq~ppppppptvalueq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~V,sq~ uq~pppppt¸/** * Set the field value (if any). * * @param value The new field value, or null to retrieve the * corresponding property from the bean */ ptsetValueq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t this.value = value; sq~ uq~ppppq~$q~$xq~Xq€ŠÕq~X¥sq~isq~ uq~ppppq~V,sq~ uq~pppppt// ------------------------------------------------------------- Properties /** * Return the number of columns for this field. */ ptgetColsq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t return (this.cols); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq€øÐsq~ uq~ppppppptcolsq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~V,sq~ uq~ppppptu/** * Set the number of columns for this field. * * @param cols The new number of columns */ ptsetColsq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t this.cols = cols; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~V,sq~ uq~pppppt8/** * Return the maximum length allowed. */ pt getMaxlengthq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t% return (this.maxlength); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq€øøsq~ uq~pppppppt maxlengthq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~V,sq~ uq~ppppptm/** * Set the maximum length allowed. * * @param maxlength The new maximum length */ pt setMaxlengthq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t( this.maxlength = maxlength; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~V,sq~ uq~pppppt//** * Return the property name. */ pt getPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t$ return (this.property); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq€ù sq~ uq~ppppppptpropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~V,sq~ uq~ppppptb/** * Set the property name. * * @param property The new property name */ pt setPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t& this.property = property; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~V,sq~ uq~pppppt?/** * Return the number of rows for this field. */ ptgetRowsq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t return (this.rows); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq€ùHsq~ uq~ppppppptrowsq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~V,sq~ uq~pppppto/** * Set the number of rows for this field. * * @param rows The new number of rows */ ptsetRowsq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t this.rows = rows; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~V,sq~ uq~ppppptY/** * Return the size of this field (synonym for getCols()). */ ptgetSizeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t return (getCols()); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq€ùpsq~ uq~ppppppptsizeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~V,sq~ uq~pppppt/** * Set the size of this field (synonym for setCols()). * * @param size The new size */ ptsetSizeq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t setCols(size); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~V,sq~ uq~pppppt6/** * Return the field value (if any). */ ptgetValueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t! return (this.value); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq€ù˜sq~ uq~ppppppptvalueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~V,sq~ uq~pppppt¸/** * Set the field value (if any). * * @param value The new field value, or null to retrieve the * corresponding property from the bean */ ptsetValueq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t this.value = value; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~V,sq~ uq~ppppptó// --------------------------------------------------------- Public Methods /** * Process the start of this tag. The default implementation does nothing. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t$ return (EVAL_BODY_TAG); sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~ppppq~V,sq~ uq~pppppt¤/** * Process the end of this tag. The default implementation does nothing. * * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t return (EVAL_PAGE); sq~ uq~q~pppq~¥q~¥xq~X½sq~isq~ uq~ppppq~V,sq~ uq~pppppt// ------------------------------------------------------------- Properties /** * Return the number of columns for this field. */ ptgetColsq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return (this.cols); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€ùàsq~ uq~ppppppptcolsq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~V,sq~ uq~ppppptu/** * Set the number of columns for this field. * * @param cols The new number of columns */ ptsetColsq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t this.cols = cols; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~V,sq~ uq~pppppt8/** * Return the maximum length allowed. */ pt getMaxlengthq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t% return (this.maxlength); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€úsq~ uq~pppppppt maxlengthq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~V,sq~ uq~ppppptm/** * Set the maximum length allowed. * * @param maxlength The new maximum length */ pt setMaxlengthq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t( this.maxlength = maxlength; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~V,sq~ uq~pppppt//** * Return the property name. */ pt getPropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t$ return (this.property); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€ú0sq~ uq~ppppppptpropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~V,sq~ uq~ppppptb/** * Set the property name. * * @param property The new property name */ pt setPropertyq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t& this.property = property; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~V,sq~ uq~pppppt?/** * Return the number of rows for this field. */ ptgetRowsq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return (this.rows); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€úXsq~ uq~ppppppptrowsq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~V,sq~ uq~pppppto/** * Set the number of rows for this field. * * @param rows The new number of rows */ ptsetRowsq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t this.rows = rows; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~V,sq~ uq~ppppptY/** * Return the size of this field (synonym for getCols()). */ ptgetSizeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return (getCols()); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€ú€sq~ uq~ppppppptsizeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~V,sq~ uq~pppppt/** * Set the size of this field (synonym for setCols()). * * @param size The new size */ ptsetSizeq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t setCols(size); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~V,sq~ uq~pppppt6/** * Return the field value (if any). */ ptgetValueq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t! return (this.value); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€ú¨sq~ uq~ppppppptvalueq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~V,sq~ uq~pppppt¸/** * Set the field value (if any). * * @param value The new field value, or null to retrieve the * corresponding property from the bean */ ptsetValueq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t this.value = value; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~V,sq~ uq~ppppptó// --------------------------------------------------------- Public Methods /** * Process the start of this tag. The default implementation does nothing. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t$ return (EVAL_BODY_TAG); sq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq~V,sq~ uq~pppppt¤/** * Process the end of this tag. The default implementation does nothing. * * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return (EVAL_PAGE); sq~ uq~q~pppq~–q~–xq~XÍsq~isq~ uq~ppppq~V,sq~ uq~pppppt// ------------------------------------------------------------- Properties /** * Return the number of columns for this field. */ ptgetColsq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t' return (this.cols); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€úðsq~ uq~ppppppptcolsq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~V,sq~ uq~ppppptu/** * Set the number of columns for this field. * * @param cols The new number of columns */ ptsetColsq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t% this.cols = cols; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~V,sq~ uq~pppppt8/** * Return the maximum length allowed. */ pt getMaxlengthq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t, return (this.maxlength); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€ûsq~ uq~pppppppt maxlengthq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~V,sq~ uq~ppppptm/** * Set the maximum length allowed. * * @param maxlength The new maximum length */ pt setMaxlengthq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t/ this.maxlength = maxlength; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~V,sq~ uq~pppppt//** * Return the property name. */ pt getPropertyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t+ return (this.property); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€û@sq~ uq~ppppppptpropertyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~V,sq~ uq~ppppptb/** * Set the property name. * * @param property The new property name */ pt setPropertyq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t- this.property = property; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~V,sq~ uq~pppppt?/** * Return the number of rows for this field. */ ptgetRowsq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t' return (this.rows); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€ûhsq~ uq~ppppppptrowsq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~V,sq~ uq~pppppto/** * Set the number of rows for this field. * * @param rows The new number of rows */ ptsetRowsq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t% this.rows = rows; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~V,sq~ uq~ppppptY/** * Return the size of this field (synonym for getCols()). */ ptgetSizeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t' return (getCols()); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€ûsq~ uq~ppppppptsizeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~V,sq~ uq~pppppt/** * Set the size of this field (synonym for setCols()). * * @param size The new size */ ptsetSizeq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t" setCols(size); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~V,sq~ uq~pppppt6/** * Return the field value (if any). */ ptgetValueq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t( return (this.value); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€û¸sq~ uq~ppppppptvalueq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~V,sq~ uq~pppppt¸/** * Set the field value (if any). * * @param value The new field value, or null to retrieve the * corresponding property from the bean */ ptsetValueq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t' this.value = value; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~V,sq~ uq~ppppptó// --------------------------------------------------------- Public Methods /** * Process the start of this tag. The default implementation does nothing. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t+ return (EVAL_BODY_TAG); sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~V,sq~ uq~pppppt¤/** * Process the end of this tag. The default implementation does nothing. * * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t' return (EVAL_PAGE); sq~ uq~q~pppq~~q~~xq~XÝsq~isq~ uq~ppppq~V,sq~ uq~pppppt// ------------------------------------------------------------- Properties /** * Return the number of columns for this field. */ ptgetColsq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft' return (this.cols); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€üsq~ uq~ppppppptcolsq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~V,sq~ uq~ppppptu/** * Set the number of columns for this field. * * @param cols The new number of columns */ ptsetColsq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft% this.cols = cols; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~V,sq~ uq~pppppt8/** * Return the maximum length allowed. */ pt getMaxlengthq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft, return (this.maxlength); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€ü(sq~ uq~pppppppt maxlengthq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~V,sq~ uq~ppppptm/** * Set the maximum length allowed. * * @param maxlength The new maximum length */ pt setMaxlengthq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft/ this.maxlength = maxlength; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~V,sq~ uq~pppppt//** * Return the property name. */ pt getPropertyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft+ return (this.property); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€üPsq~ uq~ppppppptpropertyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~V,sq~ uq~ppppptb/** * Set the property name. * * @param property The new property name */ pt setPropertyq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft- this.property = property; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~V,sq~ uq~pppppt?/** * Return the number of rows for this field. */ ptgetRowsq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft' return (this.rows); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€üxsq~ uq~ppppppptrowsq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~V,sq~ uq~pppppto/** * Set the number of rows for this field. * * @param rows The new number of rows */ ptsetRowsq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft% this.rows = rows; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~V,sq~ uq~ppppptY/** * Return the size of this field (synonym for getCols()). */ ptgetSizeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft' return (getCols()); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€ü sq~ uq~ppppppptsizeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~V,sq~ uq~pppppt/** * Set the size of this field (synonym for setCols()). * * @param size The new size */ ptsetSizeq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft" setCols(size); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~V,sq~ uq~pppppt6/** * Return the field value (if any). */ ptgetValueq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft( return (this.value); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq€üÈsq~ uq~ppppppptvalueq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~V,sq~ uq~pppppt¸/** * Set the field value (if any). * * @param value The new field value, or null to retrieve the * corresponding property from the bean */ ptsetValueq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft' this.value = value; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~V,sq~ uq~ppppptó// --------------------------------------------------------- Public Methods /** * Process the start of this tag. The default implementation does nothing. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft+ return (EVAL_BODY_TAG); sq~ uq~q~pppq~fq~fxsq~isq~ uq~ppppq~V,sq~ uq~pppppt¤/** * Process the end of this tag. The default implementation does nothing. * * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft' return (EVAL_PAGE); sq~ uq~q~pppq~fq~fxq~Xípppq~$Isq~ uq~pppppppt BaseInputTagq~=xsq~ uq~ppppsq~#sq~ uq~q~iÎpppsq~ uq~q~%pppq~$q~$sq~Qsq~ uq~sq~Csq~ uq~ppppq€ý sq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq€ý sq~ uq~ppppsq~#q~-xppq~$Isq~ uq~pppppt ô/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/BaseInputTag.java,v 1.3 2003/05/18 18:37:20 dgraham Exp $ * $Revision: 1.3 $ * $Date: 2003/05/18 18:37:20 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Abstract base class for the various input tags. * * @author Craig R. McClanahan * @version $Revision: 1.3 $ $Date: 2003/05/18 18:37:20 $ */ ptBaseInputTag.javaq~fxsq~ uq~ppppsq~ uq~q~V,pppq~fxsq~ uq~q~W[q~Xcpppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxsq~ uq~pppppt1/** * The message resources for this package. */ /** * The message resources for this package. */ /** * The message resources for this package. */ /** * The message resources for this package. */ /** * The message resources for this package. */ ptmessagesq~=xsq~ uq~pppppq~$q~yq~$q~-pq~$xsq~ uq~q~Vpppsq~ uq~ppppsq~#q~;xppptS MessageResources.getMessageResources(Constants.Package + ".LocalStrings")q~$q~$q~$xq~jq~Vq€’2q~eçq€­Óq€³*q€¹²q€v–q~ntpsq~#q~;xppptS MessageResources.getMessageResources(Constants.Package + ".LocalStrings")q~$q~$q~$xpppsq~ uq~ppppsq~#q~;xppptP MessageResources.getMessageResources(Constants.Package + ".LocalStrings")q~$q~$q~$xsq~(sq~ uq~ppppq~Vsq~ uq~pppppt†/** * The name of the bean containing our underlying property. */ /** * The name of the bean containing our underlying property. */ /** * The name of the bean containing our underlying property. */ /** * The name of the bean containing our underlying property. */ /** * The name of the bean containing our underlying property. */ ptnameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt Constants.BEAN_KEYq~$q~$q~$xsq~isq~ uq~ppppq~Vsq~ uq~ppppppptgetNameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t# return (this.name); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq€ýVsq~ uq~ppppppptnameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~Vsq~ uq~ppppppptsetNameq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t! this.name = name; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~Vsq~ uq~pppppt/** * The property name for this field. */ /** * The property name for this field. */ /** * The property name for this field. */ /** * The property name for this field. */ /** * The property name for this field. */ ptpropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq~Vsq~ uq~pppppt,/** * The body content of this tag (if any). */ /** * The body content of this tag (if any). */ /** * The body content of this tag (if any). */ /** * The body content of this tag (if any). */ /** * The body content of this tag (if any). */ pttextq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq~Vsq~ uq~pppppt/** * The server value for this option. */ /** * The server value for this option. */ /** * The server value for this option. */ /** * The server value for this option. */ /** * The server value for this option. */ ptvalueq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~Vsq~ uq~pppppt|// ------------------------------------------------------------- Properties /** * Return the property name. */ pt getPropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t+ return (this.property); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq€ý§sq~ uq~ppppppptpropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~Vsq~ uq~ppppptb/** * Set the property name. * * @param property The new property name */ pt setPropertyq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~sq~isq~ uq~sq~bsq~ uq~ppppq€ý¼sq~ uq~pppppppt newPropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~Uýsq~ uq~pppppt//** this is overridden so that properties being set by the JSP page aren't * written over by those needed by the extension. If the tag instance is * re-used by the JSP, the tag can set the property back to that set by the * JSP page. * * @param newProperty new property value */ pt setPropertyq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~q€ý§q~Tfppsq~ uq~ppppq~$q~Äxq~$tÑ /* let the real tag do its thang */ super.setProperty(newProperty); /* if it's the JSP setting it, remember the value */ if (!isNesting) { originalProperty = newProperty; } sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq€ýÔsq~ uq~pppppppt newPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~Uýsq~ uq~pppppt//** this is overridden so that properties being set by the JSP page aren't * written over by those needed by the extension. If the tag instance is * re-used by the JSP, the tag can set the property back to that set by the * JSP page. * * @param newProperty new property value */ pt setPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~q€ý§q~Tfppsq~ uq~ppppq~¥q~»xq~¥tÑ /* let the real tag do its thang */ super.setProperty(newProperty); /* if it's the JSP setting it, remember the value */ if (!isNesting) { originalProperty = newProperty; } sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq€ýìsq~ uq~pppppppt newPropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~Uýsq~ uq~pppppt//** this is overridden so that properties being set by the JSP page aren't * written over by those needed by the extension. If the tag instance is * re-used by the JSP, the tag can set the property back to that set by the * JSP page. * * @param newProperty new property value */ pt setPropertyq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~q€ý§q~Tfppsq~ uq~ppppq~–q~¢xq~–tÑ /* let the real tag do its thang */ super.setProperty(newProperty); /* if it's the JSP setting it, remember the value */ if (!isNesting) { originalProperty = newProperty; } sq~ uq~ppppq~–q~–xpq~$q~Äxq~$t- this.property = property; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~Vsq~ uq~pppppt./** * Return the server value. */ ptgetValueq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t( return (this.value); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq€þsq~ uq~ppppppptvalueq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~Vsq~ uq~pppppt]/** * Set the server value. * * @param value The new server value */ ptsetValueq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t' this.value = value; sq~ uq~ppppq~$q~$xq~V sq~isq~ uq~ppppq~Vsq~ uq~ppppptŽ/** * Save the associated label from the body content. * * @exception JspException if a JSP exception has occurred */ pt doAfterBodyq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tÖ if (bodyContent != null) { String value = bodyContent.getString().trim(); if (value.length() > 0) text = value; } return (SKIP_BODY); sq~ uq~q~pppq~$q~$xsq~isq~ uq~ppppq~Vsq~ uq~ppppptŠ/** * Process the remainder of this page normally. * * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~sq~isq~ uq~ppppq~Uýsq~ uq~pppppt/** * Complete the processing of the tag. The nested tags here will restore * all the original value for the tag itself and the nesting context. * @return int to describe the next step for the JSP processor * @throws JspException for the bad things JSP's do */ ptdoEndTagq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~q€þ?pppsq~ uq~ppppq~~q~Šxq~~tÇ // do the super's ending part int i = super.doEndTag(); // reset the properties setName(originalName); setProperty(originalProperty); // continue return i; sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~Uýsq~ uq~pppppt/** * Complete the processing of the tag. The nested tags here will restore * all the original value for the tag itself and the nesting context. * @return int to describe the next step for the JSP processor * @throws JspException for the bad things JSP's do */ ptdoEndTagq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~q€þ?pppsq~ uq~ppppq~fq~rxq~ftÇ // do the super's ending part int i = super.doEndTag(); // reset the properties setName(originalName); setProperty(originalProperty); // continue return i; sq~ uq~q~pppq~fq~fxppq~$q~Äxq~$tÞ // Render any description for this checkbox if (text != null) ResponseUtils.write(pageContext, text); // Evaluate the remainder of this page return (EVAL_PAGE); sq~ uq~q~pppq~$q~$xq€ñˆsq~isq~ uq~ppppq~Vsq~ uq~ppppppptgetNameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t# return (this.name); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq€þ~sq~ uq~ppppppptnameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~Vsq~ uq~ppppppptsetNameq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t! this.name = name; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~Vsq~ uq~pppppt|// ------------------------------------------------------------- Properties /** * Return the property name. */ pt getPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t+ return (this.property); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq€þ¥sq~ uq~ppppppptpropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~Vsq~ uq~ppppptb/** * Set the property name. * * @param property The new property name */ pt setPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t- this.property = property; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~Vsq~ uq~pppppt./** * Return the server value. */ ptgetValueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t( return (this.value); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq€þÍsq~ uq~ppppppptvalueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~Vsq~ uq~pppppt]/** * Set the server value. * * @param value The new server value */ ptsetValueq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t' this.value = value; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~Vsq~ uq~pppppt // --------------------------------------------------------- Public Methods /** * Generate the required input tag. *

      * Support for indexed property since Struts 1.1 * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t¾ // Create an appropriate "input" element based on our parameters StringBuffer results = new StringBuffer(""); // Print this field to our output writer ResponseUtils.write(pageContext, results.toString()); // Continue processing this page this.text = null; return (EVAL_BODY_TAG); sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~ppppq~Vsq~ uq~ppppptŽ/** * Save the associated label from the body content. * * @exception JspException if a JSP exception has occurred */ pt doAfterBodyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tÖ if (bodyContent != null) { String value = bodyContent.getString().trim(); if (value.length() > 0) text = value; } return (SKIP_BODY); sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~ppppq~Vsq~ uq~ppppptŠ/** * Process the remainder of this page normally. * * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tÞ // Render any description for this checkbox if (text != null) ResponseUtils.write(pageContext, text); // Evaluate the remainder of this page return (EVAL_PAGE); sq~ uq~q~pppq~¥q~¥xq€ñ¸sq~isq~ uq~ppppq~Vsq~ uq~ppppppptgetNameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t# return (this.name); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€ÿ$sq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~Vsq~ uq~ppppppptsetNameq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t! this.name = name; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~Vsq~ uq~pppppt|// ------------------------------------------------------------- Properties /** * Return the property name. */ pt getPropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t+ return (this.property); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€ÿKsq~ uq~ppppppptpropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~Vsq~ uq~ppppptb/** * Set the property name. * * @param property The new property name */ pt setPropertyq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t- this.property = property; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~Vsq~ uq~pppppt./** * Return the server value. */ ptgetValueq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t( return (this.value); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq€ÿssq~ uq~ppppppptvalueq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~Vsq~ uq~pppppt]/** * Set the server value. * * @param value The new server value */ ptsetValueq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t' this.value = value; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~Vsq~ uq~pppppt // --------------------------------------------------------- Public Methods /** * Generate the required input tag. *

      * Support for indexed property since Struts 1.1 * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tî // Create an appropriate "input" element based on our parameters StringBuffer results = new StringBuffer(""); // Print this field to our output writer ResponseUtils.write(pageContext, results.toString()); // Continue processing this page this.text = null; return (EVAL_BODY_TAG); sq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq~Vsq~ uq~ppppptŽ/** * Save the associated label from the body content. * * @exception JspException if a JSP exception has occurred */ pt doAfterBodyq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tÖ if (bodyContent != null) { String value = bodyContent.getString().trim(); if (value.length() > 0) text = value; } return (SKIP_BODY); sq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq~Vsq~ uq~ppppptŠ/** * Process the remainder of this page normally. * * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tÞ // Render any description for this checkbox if (text != null) ResponseUtils.write(pageContext, text); // Evaluate the remainder of this page return (EVAL_PAGE); sq~ uq~q~pppq~–q~–xq€ñÈsq~isq~ uq~ppppq~Vsq~ uq~ppppppptgetNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t# return (this.name); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€ÿÊsq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~Vsq~ uq~ppppppptsetNameq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t! this.name = name; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~Vsq~ uq~pppppt|// ------------------------------------------------------------- Properties /** * Return the property name. */ pt getPropertyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t+ return (this.property); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq€ÿñsq~ uq~ppppppptpropertyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~Vsq~ uq~ppppptb/** * Set the property name. * * @param property The new property name */ pt setPropertyq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t- this.property = property; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~Vsq~ uq~pppppt./** * Return the server value. */ ptgetValueq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t( return (this.value); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqsq~ uq~ppppppptvalueq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~Vsq~ uq~pppppt]/** * Set the server value. * * @param value The new server value */ ptsetValueq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t' this.value = value; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~Vsq~ uq~pppppt // --------------------------------------------------------- Public Methods /** * Generate the required input tag. *

      * Support for indexed property since Struts 1.1 * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tü // Create an appropriate "input" element based on our parameters StringBuffer results = new StringBuffer(" 0) text = value; } return (SKIP_BODY); sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~Vsq~ uq~ppppptŠ/** * Process the remainder of this page normally. * * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tÞ // Render any description for this checkbox if (text != null) ResponseUtils.write(pageContext, text); // Evaluate the remainder of this page return (EVAL_PAGE); sq~ uq~q~pppq~~q~~xq€ñØsq~isq~ uq~ppppq~Vsq~ uq~ppppppptgetNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft# return (this.name); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqpsq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~Vsq~ uq~ppppppptsetNameq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft! this.name = name; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~Vsq~ uq~pppppt|// ------------------------------------------------------------- Properties /** * Return the property name. */ pt getPropertyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft+ return (this.property); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq—sq~ uq~ppppppptpropertyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~Vsq~ uq~ppppptb/** * Set the property name. * * @param property The new property name */ pt setPropertyq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft- this.property = property; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~Vsq~ uq~pppppt./** * Return the server value. */ ptgetValueq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft( return (this.value); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq¿sq~ uq~ppppppptvalueq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~Vsq~ uq~pppppt]/** * Set the server value. * * @param value The new server value */ ptsetValueq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft' this.value = value; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~Vsq~ uq~pppppt // --------------------------------------------------------- Public Methods /** * Generate the required input tag. *

      * Support for indexed property since Struts 1.1 * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftü // Create an appropriate "input" element based on our parameters StringBuffer results = new StringBuffer(" 0) text = value; } return (SKIP_BODY); sq~ uq~q~pppq~fq~fxsq~isq~ uq~ppppq~Vsq~ uq~ppppptŠ/** * Process the remainder of this page normally. * * @exception JspException if a JSP exception has occurred */ ptdoEndTagq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftÞ // Render any description for this checkbox if (text != null) ResponseUtils.write(pageContext, text); // Evaluate the remainder of this page return (EVAL_PAGE); sq~ uq~q~pppq~fq~fxq€ñèppq~$Isq~ uq~pppppppt CheckboxTagq~=xsq~ uq~q€ïÉpppq~$sq~ uq~q~m`q~d—ppsq~ uq~q~%pppq~$q~$sq~Qsq~ uq~sq~Csq~ uq~ppppqsq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppqsq~ uq~ppppsq~#q~-xsq~Csq~ uq~ppppqsq~ uq~ppppsq~#q~%9xsq~Csq~ uq~ppppqsq~ uq~ppppsq~#q~*?xq~$Isq~ uq~pppppt ï/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/CheckboxTag.java,v 1.17 2002/11/16 06:05:21 dgraham Exp $ * $Revision: 1.17 $ * $Date: 2002/11/16 06:05:21 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Tag for input fields of type "checkbox". * * @author Craig R. McClanahan * @version $Revision: 1.17 $ $Date: 2002/11/16 06:05:21 $ */ ptCheckboxTag.javaq~fxsq~ uq~ppppsq~ uq~q~Vpppq~fxsq~ uq~q~Uýppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxsq~ uq~ppppptî// --------------------------------------------------------- Public Methods /** * Generate the required input tag. * Indexed property since 1.1 * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~q~Vsq~isq~ uq~ppppq~Uýsq~ uq~pppppt /** * Overriding method of the heart of the matter. Gets the relative property * and leaves the rest up to the original tag implementation. Sweet. * @return int JSP continuation directive. * This is in the hands of the super class. */ pt doStartTagq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~q~V pppsq~ uq~ppppq~¥q~»xq~¥tr /* singleton tag implementations will need the original property to be set before running */ super.setProperty(originalProperty); /* let the NestedHelper set the properties it can */ isNesting = true; NestedPropertyHelper.setNestedProperties(this); isNesting = false; /* do the tag */ return super.doStartTag(); sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~ppppq~Uýsq~ uq~pppppt /** * Overriding method of the heart of the matter. Gets the relative property * and leaves the rest up to the original tag implementation. Sweet. * @return int JSP continuation directive. * This is in the hands of the super class. */ pt doStartTagq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~q~V pppsq~ uq~ppppq~–q~¢xq~–tr /* singleton tag implementations will need the original property to be set before running */ super.setProperty(originalProperty); /* let the NestedHelper set the properties it can */ isNesting = true; NestedPropertyHelper.setNestedProperties(this); isNesting = false; /* do the tag */ return super.doStartTag(); sq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq~Uýsq~ uq~pppppt /** * Overriding method of the heart of the matter. Gets the relative property * and leaves the rest up to the original tag implementation. Sweet. * @return int JSP continuation directive. * This is in the hands of the super class. */ pt doStartTagq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~q~V pppsq~ uq~ppppq~~q~Šxq~~to // get the original properties originalName = getName(); originalProperty = getProperty(); // request HttpServletRequest request = (HttpServletRequest)pageContext.getRequest(); // set the properties NestedPropertyHelper.setNestedProperties(request, this); // let the super do it's thing return super.doStartTag(); sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~Uýsq~ uq~pppppt /** * Overriding method of the heart of the matter. Gets the relative property * and leaves the rest up to the original tag implementation. Sweet. * @return int JSP continuation directive. * This is in the hands of the super class. */ pt doStartTagq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~q~V pppsq~ uq~ppppq~fq~rxq~fto // get the original properties originalName = getName(); originalProperty = getProperty(); // request HttpServletRequest request = (HttpServletRequest)pageContext.getRequest(); // set the properties NestedPropertyHelper.setNestedProperties(request, this); // let the super do it's thing return super.doStartTag(); sq~ uq~q~pppq~fq~fxq~$q~Äxq~$t´ // Create an appropriate "input" element based on our parameters StringBuffer results = new StringBuffer(""); // Print this field to our output writer ResponseUtils.write(pageContext, results.toString()); // Continue processing this page this.text = null; return (EVAL_BODY_TAG); sq~ uq~q~pppq~$q~$xpppsq~ uq~ppppq~$q~Äxq~$t~ /* singleton tag implementations will need the original property to be set before running */ super.setProperty(originalProperty); /* let the NestedHelper set the properties it can */ isNesting = true; NestedPropertyHelper.setNestedProperties(this); isNesting = false; /* do the tag */ return super.doStartTag(); sq~ uq~q~pppq~$q~$xq€ý¼sq~(sq~ uq~ppppq~Uýsq~ uq~ppppptW/* hold original property */ /* hold original property */ /* hold original property */ ptoriginalPropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~%Zxpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq~Uýsq~ uq~pppppppt isNestingq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~%Zxpppt falseq~$q~$q~$xqCq€ýÔqSq€ýìqcq€þLq€ñ•sq~(sq~ uq~ppppq~Uýsq~ uq~ppppptR/* the usual private member variables */ /* the usual private member variables */ pt originalNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~d1xpppt nullq~~q~~q~~xqsq€þ\q€ñ¥ppppq~Uúsq~ uq~ppppppptNestedCheckboxTagq~=xsq~ uq~ppppq~$sq~ uq~q~d„pppsq~ uq~q~Vq~T­ppq~$q~$q€ïºsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxq~SÕq~b›q~Võq~o.q~gq~s q€®bq€Ñq€Ðõq€‹q€³Çq€w³q~o—q€Œëq€ŽSq€ŠLq€“éq€ïºq€ïãq~\uq€Ûq€ð q€¥Äq€”æq€ÃÎq~tÅq€¯³q€‚æq€Ò†q€Œrq€µq€yq€¤çq€Àq€Žppppppppq~U÷sq~ uq~pppppppthtmlq~=xsq~ uq~ppppq~dsq~ uq~q~±pppq~$ppxq~¥cq~\q~Tqq~T„q~ª`q~Uaq~­Ýq~ˆ¬q~®Êsq~Qsq~ uq~ppppq~U÷sq~ uq~pppppt —/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/nested/NestedNameSupport.java,v 1.4 2003/02/28 05:14:01 arron Exp $ * $Revision: 1.4 $ * $Date: 2003/02/28 05:14:01 $ * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * This is so that managing classes can tell if a nested tag needs to have its * name property set. From what I know, these tags use the property * property, and the name is an addition. * * @author Arron Bates * @since Struts 1.1 * @version $Revision: 1.4 $ $Date: 2003/02/28 05:14:01 $ */ ptNestedNameSupport.javaq~fxsq~ uq~ppppsq~ uq~q~T­pppq~fxsq~Qsq~ uq~ppppq~U÷sq~ uq~pppppt å/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/nested/NestedParentSupport.java,v 1.3 2003/02/28 05:14:01 arron Exp $ * $Revision: 1.3 $ * $Date: 2003/02/28 05:14:01 $ * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * This interface is so managing classes of the nested tag can identify a tag * as a parent tag that other tags retrieve nested properties from. * * @see org.apache.struts.taglib.nested.NestedPropertyTag * @see org.apache.struts.taglib.nested.logic.NestedIterateTag * * @author Arron Bates * @since Struts 1.1 * @version $Revision: 1.3 $ $Date: 2003/02/28 05:14:01 $ */ ptNestedParentSupport.javaq~fxsq~ uq~ppppsq~ uq~q~U©pppq~fxsq~Qsq~ uq~ppppq~U÷sq~ uq~pppppt W/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/nested/NestedPropertySupport.java,v 1.3 2003/02/28 05:14:01 arron Exp $ * $Revision: 1.3 $ * $Date: 2003/02/28 05:14:01 $ * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * This interface is for managing classes of the nested extension, so they can * know to set the tag's property property. * * @author Arron Bates * @since Struts 1.1 * @version $Revision: 1.3 $ $Date: 2003/02/28 05:14:01 $ */ ptNestedPropertySupport.javaq~fxsq~ uq~ppppsq~ uq~q~Tqpppq~fxsq~Qsq~ uq~sq~Csq~ uq~ppppqësq~ uq~ppppsq~#q~Œxsq~Csq~ uq~ppppqësq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppqësq~ uq~ppppsq~#q~%xsq~Csq~ uq~ppppqësq~ uq~ppppsq~#q~*?xq~U÷sq~ uq~pppppt E/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/nested/NestedPropertyTag.java,v 1.8 2003/03/06 16:07:13 martinc Exp $ * $Revision: 1.8 $ * $Date: 2003/03/06 16:07:13 $ * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * NestedPropertyTag. * * The one of only two additions in this nested suite of tags. This is so that * you can specify extra levels of nesting in one elegant tag rather than having * to propagate and manage an extra dot notated property in nested child tags. * * It's simply recognised by the helper class and it's property is added to the * nesting list. * * @author Arron Bates * @since Struts 1.1 * @version $Revision: 1.8 $ $Date: 2003/03/06 16:07:13 $ */ ptNestedPropertyTag.javaq~fxsq~ uq~ppppsq~ uq~q~T„pppq~fxsq~Qsq~ uq~sq~Csq~ uq~ppppqsq~ uq~ppppsq~#q~Œxsq~Csq~ uq~ppppqsq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppqsq~ uq~ppppsq~#q~%xsq~Csq~ uq~ppppqsq~ uq~ppppsq~#q~*?xq~U÷sq~ uq~pppppt,/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/nested/NestedRootTag.java,v 1.8 2003/03/06 16:07:13 martinc Exp $ * $Revision: 1.8 $ * $Date: 2003/03/06 16:07:13 $ * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * NestedRootTag. * * The only other addition in this nested suite of tags. * This tag allows for a nested structure to start without relying on the bean * and workings of the FormTag. Useful for view pages that don't update when * returning to the server, or use hyperlinks rather than form submits. * * The Bean that it uses can come out of a jsp:useBean tag or define another * bean that's already in scope. As long as the other Struts tags can find the * bean by name, it'll work. * * It's simply recognised by the helper class and it's property is added to the * nesting list. * * @author Arron Bates * @since Struts 1.1 * @version $Revision: 1.8 $ $Date: 2003/03/06 16:07:13 $ */ ptNestedRootTag.javaq~fxsq~ uq~ppppsq~ uq~q~Uapppq~fxq~­éq~°Ýq€+q~$Íppppq~$Fsq~ uq~ppppppptnestedq~=xsq~ uq~ppppppq~­property property * @return String value of the property property */ pt getPropertyq~Tæxsq~ uq~pppppq~Téq~Têq~Téq~{pq~Tëxsq~ uq~q~Ttpppsq~ uq~ppppq~Téq~Töxq~Tét return ""; sq~ uq~ppppq~Téq~Téxsq~isq~ uq~sq~bsq~ uq~ppppq3sq~ uq~ppppppptpropertyq~Tæxsq~ uq~pppppq~Téq~Têq~Téq~{pq~Tëxpppq~Uasq~ uq~ppppptt/** Setter method for the property property * @param property new value for the property property */ pt setPropertyq~Tæxsq~ uq~pppppq~Téq~Têq~Téppq~Tëxsq~ uq~q~Tfpppsq~ uq~ppppq~Téq~Töxq~Tépsq~ uq~ppppq~Téq~Téxsq~isq~ uq~ppppq~Uasq~ uq~ppppptf/** Getter method for the name property * @return String value of the name property */ ptgetNameq~Tæxsq~ uq~pppppq~Téq~Têq~Téq~{pq~Tëxsq~ uq~q~Tªpppsq~ uq~ppppq~Téq~Töxq~Tét return this.name; sq~ uq~ppppq~Téq~Téxsq~isq~ uq~sq~bsq~ uq~ppppqZsq~ uq~ppppppptnameq~Tæxsq~ uq~pppppq~Téq~Têq~Téq~{pq~Tëxpppq~Uasq~ uq~ppppptl/** Setter method for the name property * @param property new value for the name property */ ptsetNameq~Tæxsq~ uq~pppppq~Téq~Têq~Téppq~Tëxsq~ uq~q~T°pppsq~ uq~ppppq~Téq~Töxq~Tét this.name = name; sq~ uq~ppppq~Téq~Téxq‘sq~isq~ uq~ppppq~Uasq~ uq~ppppptÈ/** * Overriding method of the heart of the tag. Gets the relative property * and tells the JSP engine to evaluate its body content. * * @return int JSP continuation directive. */ pt doStartTagq~Tæxsq~ uq~pppppq~Téq~Têq~Téq~ pq~Tëxsq~ uq~ppppsq~ uq~ppppq~Téq~Töxq~TétL /* set the nested reference for possible inclusions etc */ HttpSession session = (HttpSession)pageContext.getSession(); reference = (NestedReference) session.getAttribute(NestedPropertyHelper.NESTED_INCLUDES_KEY); if (name == null) { this.name = reference.getBeanName(); this.nestedProperty = reference.getNestedProperty(); } else { NestedReference newRef = new NestedReference(this.name, ""); session.setAttribute(NestedPropertyHelper.NESTED_INCLUDES_KEY, newRef); } return (EVAL_BODY_TAG); sq~ uq~q~pppq~Téq~Téxsq~isq~ uq~ppppq~Uasq~ uq~ppppptn/** * Render the resulting content evaluation. * * @return int JSP continuation directive. */ pt doAfterBodyq~Tæxsq~ uq~pppppq~Téq~Têq~Téq~ pq~Tëxsq~ uq~ppppsq~ uq~ppppq~Téq~Töxq~TétÑ /* Render the output */ if (bodyContent != null) { ResponseUtils.writePrevious(pageContext, bodyContent.getString()); bodyContent.clearBody(); } return (SKIP_BODY); sq~ uq~q~pppq~Téq~Téxsq~isq~ uq~ppppq~Uasq~ uq~ppppptc/** * Evaluate the rest of the page * * @return int JSP continuation directive. */ ptdoEndTagq~Tæxsq~ uq~pppppq~Téq~Têq~Téq~ pq~Tëxsq~ uq~ppppsq~ uq~ppppq~Téq~Töxq~TétÇ /* reset the reference */ HttpSession session = (HttpSession)pageContext.getSession(); NestedPropertyHelper.setIncludeReference(session, reference); return (EVAL_PAGE); sq~ uq~q~pppq~Téq~Téxsq~isq~ uq~ppppq~Uasq~ uq~ppppptF/** * JSP method to release all resources held by the tag. */ ptreleaseq~Tæxsq~ uq~pppppq~Téq~Têq~Téppq~Tëxsq~ uq~ppppsq~ uq~ppppq~Téq~Töxq~Tét1 super.release(); this.name = null; sq~ uq~ppppq~Téq~Téxsq~isq~ uq~ppppq~Uasq~ uq~ppppptn/** Getter method for the property property * @return String value of the property property */ pt getPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~q~Ttpppsq~ uq~ppppq~¥q~»xq~¥t return ""; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqÂsq~ uq~ppppppptpropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~Uasq~ uq~ppppptt/** Setter method for the property property * @param property new value for the property property */ pt setPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~q~Tfpppsq~ uq~ppppq~¥q~»xq~¥psq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~Uasq~ uq~ppppptf/** Getter method for the name property * @return String value of the name property */ ptgetNameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~q~Tªpppsq~ uq~ppppq~¥q~»xq~¥t return this.name; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqésq~ uq~ppppppptnameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~Uasq~ uq~ppppptl/** Setter method for the name property * @param property new value for the name property */ ptsetNameq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~q~T°pppsq~ uq~ppppq~¥q~»xq~¥t this.name = name; sq~ uq~ppppq~¥q~¥xq¡sq~isq~ uq~ppppq~Uasq~ uq~ppppptÈ/** * Overriding method of the heart of the tag. Gets the relative property * and tells the JSP engine to evaluate its body content. * * @return int JSP continuation directive. */ pt doStartTagq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tL /* set the nested reference for possible inclusions etc */ HttpSession session = (HttpSession)pageContext.getSession(); reference = (NestedReference) session.getAttribute(NestedPropertyHelper.NESTED_INCLUDES_KEY); if (name == null) { this.name = reference.getBeanName(); this.nestedProperty = reference.getNestedProperty(); } else { NestedReference newRef = new NestedReference(this.name, ""); session.setAttribute(NestedPropertyHelper.NESTED_INCLUDES_KEY, newRef); } return (EVAL_BODY_TAG); sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~ppppq~Uasq~ uq~ppppptn/** * Render the resulting content evaluation. * * @return int JSP continuation directive. */ pt doAfterBodyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tÑ /* Render the output */ if (bodyContent != null) { ResponseUtils.writePrevious(pageContext, bodyContent.getString()); bodyContent.clearBody(); } return (SKIP_BODY); sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~ppppq~Uasq~ uq~ppppptc/** * Evaluate the rest of the page * * @return int JSP continuation directive. */ ptdoEndTagq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tÇ /* reset the reference */ HttpSession session = (HttpSession)pageContext.getSession(); NestedPropertyHelper.setIncludeReference(session, reference); return (EVAL_PAGE); sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~ppppq~Uasq~ uq~ppppptF/** * JSP method to release all resources held by the tag. */ ptreleaseq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t1 super.release(); this.name = null; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~Uasq~ uq~ppppptn/** Getter method for the property property * @return String value of the property property */ pt getPropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~q~Ttpppsq~ uq~ppppq~–q~¢xq~–t return ""; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqQsq~ uq~ppppppptpropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~Uasq~ uq~ppppptt/** Setter method for the property property * @param property new value for the property property */ pt setPropertyq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~q~Tfpppsq~ uq~ppppq~–q~¢xq~–psq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~Uasq~ uq~ppppptf/** Getter method for the name property * @return String value of the name property */ ptgetNameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~q~Tªpppsq~ uq~ppppq~–q~¢xq~–t return this.name; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqxsq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~Uasq~ uq~ppppptl/** Setter method for the name property * @param property new value for the name property */ ptsetNameq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~q~T°pppsq~ uq~ppppq~–q~¢xq~–t this.name = name; sq~ uq~ppppq~–q~–xq±sq~isq~ uq~ppppq~Uasq~ uq~ppppptÈ/** * Overriding method of the heart of the tag. Gets the relative property * and tells the JSP engine to evaluate its body content. * * @return int JSP continuation directive. */ pt doStartTagq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tZ /* set the nested reference for possible inclusions etc */ HttpServletRequest request = (HttpServletRequest)pageContext.getRequest(); reference = (NestedReference) request.getAttribute(NestedPropertyHelper.NESTED_INCLUDES_KEY); if (name == null) { this.name = reference.getBeanName(); this.nestedProperty = reference.getNestedProperty(); } else { NestedReference newRef = new NestedReference(this.name, ""); request.setAttribute(NestedPropertyHelper.NESTED_INCLUDES_KEY, newRef); } return (EVAL_BODY_TAG); sq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq~Uasq~ uq~ppppptn/** * Render the resulting content evaluation. * * @return int JSP continuation directive. */ pt doAfterBodyq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tÑ /* Render the output */ if (bodyContent != null) { ResponseUtils.writePrevious(pageContext, bodyContent.getString()); bodyContent.clearBody(); } return (SKIP_BODY); sq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq~Uasq~ uq~ppppptc/** * Evaluate the rest of the page * * @return int JSP continuation directive. */ ptdoEndTagq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tÕ /* reset the reference */ HttpServletRequest request = (HttpServletRequest)pageContext.getRequest(); NestedPropertyHelper.setIncludeReference(request, reference); return (EVAL_PAGE); sq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq~Uasq~ uq~ppppptF/** * JSP method to release all resources held by the tag. */ ptreleaseq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t1 super.release(); this.name = null; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~Uasq~ uq~ppppptn/** Getter method for the property property * @return String value of the property property */ pt getPropertyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~q~Ttpppsq~ uq~ppppq~~q~Šxq~~t return ""; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqàsq~ uq~ppppppptpropertyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~Uasq~ uq~ppppptt/** Setter method for the property property * @param property new value for the property property */ pt setPropertyq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~q~Tfpppsq~ uq~ppppq~~q~Šxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~Uasq~ uq~ppppptf/** Getter method for the name property * @return String value of the name property */ ptgetNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~q~Tªpppsq~ uq~ppppq~~q~Šxq~~t return this.name; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqsq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~Uasq~ uq~pppppth/** Setter method for the name property * @param name new value for the name property */ ptsetNameq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~q~T°pppsq~ uq~ppppq~~q~Šxq~~t this.name = name; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~Uasq~ uq~ppppptÈ/** * Overriding method of the heart of the tag. Gets the relative property * and tells the JSP engine to evaluate its body content. * * @return int JSP continuation directive. */ pt doStartTagq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tJ /* set the nested reference for possible inclusions etc */ HttpServletRequest request = (HttpServletRequest)pageContext.getRequest(); // get al the originals originalName = name; originalNesting = NestedPropertyHelper.getCurrentProperty(request); originalNestingName = NestedPropertyHelper.getCurrentName(request, this); // set what we have to if (name != null) { NestedPropertyHelper.setProperty(request, ""); NestedPropertyHelper.setName(request, this.name); } // do the JSP thing return (EVAL_BODY_TAG); sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~Uasq~ uq~ppppptn/** * Render the resulting content evaluation. * * @return int JSP continuation directive. */ pt doAfterBodyq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tÍ /* Render the output */ if (bodyContent != null) { ResponseUtils.writePrevious(pageContext, bodyContent.getString()); bodyContent.clearBody(); } return (SKIP_BODY); sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~Uasq~ uq~ppppptc/** * Evaluate the rest of the page * * @return int JSP continuation directive. */ ptdoEndTagq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tž /* reset the reference */ HttpServletRequest request = (HttpServletRequest)pageContext.getRequest(); if (originalNesting == null) { NestedPropertyHelper.deleteReference(request); } else { NestedPropertyHelper.setName(request, originalNestingName); NestedPropertyHelper.setProperty(request, "nestOne"); } this.name = originalName; return (EVAL_PAGE); sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~Uasq~ uq~ppppptF/** * JSP method to release all resources held by the tag. */ ptreleaseq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t˜ super.release(); this.name = null; this.originalName = null; this.originalNesting = null; this.originalNestingName = null; sq~ uq~ppppq~~q~~xsq~(sq~ uq~ppppq~Uasq~ uq~pppppppt originalNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~d1xpppt ""q~~q~~q~~xsq~(sq~ uq~ppppq~Uasq~ uq~ppppppptoriginalNestingq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~d1xpppt ""q~~q~~q~~xsq~(sq~ uq~ppppq~Uasq~ uq~ppppppptoriginalNestingNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~d1xpppt ""q~~q~~q~~xsq~isq~ uq~ppppq~Uasq~ uq~ppppptn/** Getter method for the property property * @return String value of the property property */ pt getPropertyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~q~Ttpppsq~ uq~ppppq~fq~rxq~ft return ""; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq–sq~ uq~ppppppptpropertyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~Uasq~ uq~ppppptt/** Setter method for the property property * @param property new value for the property property */ pt setPropertyq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~q~Tfpppsq~ uq~ppppq~fq~rxq~fpsq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~Uasq~ uq~ppppptf/** Getter method for the name property * @return String value of the name property */ ptgetNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~q~Tªpppsq~ uq~ppppq~fq~rxq~ft return this.name; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq½sq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~Uasq~ uq~pppppth/** Setter method for the name property * @param name new value for the name property */ ptsetNameq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~q~T°pppsq~ uq~ppppq~fq~rxq~ft this.name = name; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~Uasq~ uq~ppppptÈ/** * Overriding method of the heart of the tag. Gets the relative property * and tells the JSP engine to evaluate its body content. * * @return int JSP continuation directive. */ pt doStartTagq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftJ /* set the nested reference for possible inclusions etc */ HttpServletRequest request = (HttpServletRequest)pageContext.getRequest(); // get al the originals originalName = name; originalNesting = NestedPropertyHelper.getCurrentProperty(request); originalNestingName = NestedPropertyHelper.getCurrentName(request, this); // set what we have to if (name != null) { NestedPropertyHelper.setProperty(request, ""); NestedPropertyHelper.setName(request, this.name); } // do the JSP thing return (EVAL_BODY_TAG); sq~ uq~q~pppq~fq~fxsq~isq~ uq~ppppq~Uasq~ uq~ppppptn/** * Render the resulting content evaluation. * * @return int JSP continuation directive. */ pt doAfterBodyq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftÍ /* Render the output */ if (bodyContent != null) { ResponseUtils.writePrevious(pageContext, bodyContent.getString()); bodyContent.clearBody(); } return (SKIP_BODY); sq~ uq~q~pppq~fq~fxsq~isq~ uq~ppppq~Uasq~ uq~ppppptc/** * Evaluate the rest of the page * * @return int JSP continuation directive. */ ptdoEndTagq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftž /* reset the reference */ HttpServletRequest request = (HttpServletRequest)pageContext.getRequest(); if (originalNesting == null) { NestedPropertyHelper.deleteReference(request); } else { NestedPropertyHelper.setName(request, originalNestingName); NestedPropertyHelper.setProperty(request, "nestOne"); } this.name = originalName; return (EVAL_PAGE); sq~ uq~q~pppq~fq~fxsq~isq~ uq~ppppq~Uasq~ uq~ppppptF/** * JSP method to release all resources held by the tag. */ ptreleaseq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft˜ super.release(); this.name = null; this.originalName = null; this.originalNesting = null; this.originalNestingName = null; sq~ uq~ppppq~fq~fxpppppppq~U÷sq~ uq~pppppppt NestedRootTagq~=xsq~ uq~ppppq~$sq~ uq~q~­pppsq~ uq~ q~U©q~%pppppppq~$q~$qsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxsq~ uq~ppppptl/** Setter method for the name property * @param property new value for the name property */ ptsetNameq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~q~T°pppsq~ uq~ppppq~$q~Äxq~$t this.name = name; sq~ uq~ppppq~$q~$xqZqéqxqq½ppppq~$q~Äxq~$psq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~T­sq~ uq~ppppptŒ/** * The getters and setters required to set a tags name property. * @return String value of the tags' name property */ ptgetNameq~Tæxsq~ uq~pppppq~Téq~Têq~Téq~{pq~Tëxsq~ uq~ppppsq~ uq~ppppq~Téq~Töxq~Tépsq~ uq~ppppq~Téq~Téxsq~isq~ uq~sq~bsq~ uq~ppppqBsq~ uq~ppppppptnewNamedq~Tæxsq~ uq~pppppq~Téq~Têq~Téq~{pq~Tëxpppq~T­sq~ uq~pppppt/** * The setter for the name property * @param newProperty new String value to set the name property to */ ptsetNameq~Tæxsq~ uq~pppppq~Téq~Têq~Téppq~Tëxsq~ uq~ppppsq~ uq~ppppq~Téq~Töxq~Tépsq~ uq~ppppq~Téq~Téxsq~isq~ uq~ppppq~T­sq~ uq~ppppptŒ/** * The getters and setters required to set a tags name property. * @return String value of the tags' name property */ ptgetNameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥psq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqhsq~ uq~ppppppptnewNamedq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~T­sq~ uq~pppppt/** * The setter for the name property * @param newProperty new String value to set the name property to */ ptsetNameq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥psq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~T­sq~ uq~ppppptŒ/** * The getters and setters required to set a tags name property. * @return String value of the tags' name property */ ptgetNameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–psq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqŽsq~ uq~ppppppptnewNamedq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~T­sq~ uq~pppppt/** * The setter for the name property * @param newProperty new String value to set the name property to */ ptsetNameq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–psq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~T­sq~ uq~ppppptŒ/** * The getters and setters required to set a tags name property. * @return String value of the tags' name property */ ptgetNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq´sq~ uq~ppppppptnewNamedq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~T­sq~ uq~pppppt|/** * The setter for the name property * @param newNamed new String value to set the name property to */ ptsetNameq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~T­sq~ uq~ppppptŒ/** * The getters and setters required to set a tags name property. * @return String value of the tags' name property */ ptgetNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fpsq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqÚsq~ uq~ppppppptnewNamedq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~T­sq~ uq~pppppt|/** * The setter for the name property * @param newNamed new String value to set the name property to */ ptsetNameq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fpsq~ uq~ppppq~fq~fxppq~U÷sq~ uq~ppppppptNestedNameSupportq~=xsq~ #uq~+q~3q€Aýq~Ÿõq€_üq€ïÏq€ïøq~\„q€Û.q€ð!q€”ûq€Ããq~tÚq€¯Èq€‚ûq€Ò¡q€Œq€µ-q€yq€Ïq€Ž)q€(¨q€&´q€™q€~q€-q€»q€ ¬q€#Yq€Æq€:qþžq€$1q€ q€fq€ ppppppppq~$sq~ uq~ q~­?q~µq~d­q€Åpppppsq~ uq~q~Tqpppq~$q~$qÊsq~ $uq~'q~U©q~ˆ¯q~žËq~‡ q~Uýq~Võq~gq€®bq€Ðõq€‹q€³Çq€w³q€Œëq€ŽSq~¥fqÿ?q€q€’q~©iq€Ïq€ Àq€"7qþ²q€$Eq€ "q€zq€ ±q~œ›q~SÕq€ŠLq~b›q€“éq~s q€Ñq€´q€ðppppq~$sq~ uq~ppppsq~ uq~q€íÛq€îÙppq~Äxsq~ uq~ppppptŒ/** * The getters and setters required to set a tags name property. * @return String value of the tags' name property */ ptgetNameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~q~TŸsq~isq~ uq~ppppq~T„sq~ uq~ppppptf/** Getter method for the name property * @return String value of the name property */ ptgetNameq~Tæxsq~ uq~pppppq~Téq~Têq~Téq~{pq~Tëxsq~ uq~q~Tªpppsq~ uq~ppppq~Téq~Töxq~Tét return this.name; sq~ uq~ppppq~Téq~Téxsq~isq~ uq~ppppq~T„sq~ uq~ppppptf/** Getter method for the name property * @return String value of the name property */ ptgetNameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~q~Tªpppsq~ uq~ppppq~¥q~»xq~¥t return this.name; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~T„sq~ uq~ppppptf/** Getter method for the name property * @return String value of the name property */ ptgetNameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~q~Tªpppsq~ uq~ppppq~–q~¢xq~–t return this.name; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~T„sq~ uq~ppppppptgetNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~q~Tªpppsq~ uq~ppppq~~q~Šxq~~t return null; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~T„sq~ uq~ppppppptgetNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~q~Tªpppsq~ uq~ppppq~fq~rxq~ft return null; sq~ uq~ppppq~fq~fxq~U‹qJqÙqhq÷q­ppppq~$q~Äxq~$psq~ uq~ppppq~$q~$xpppsq~ uq~ppppq~$q~Äxq~$t return this.name; sq~ uq~ppppq~$q~$xq~TÅqQsq~isq~ uq~ppppq~T„sq~ uq~ppppptÈ/** * Overriding method of the heart of the tag. Gets the relative property * and tells the JSP engine to evaluate its body content. * * @return int JSP continuation directive. */ pt doStartTagq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tU /* Set back to the original property */ property = originalProperty; /* let the NestedHelper set the properties it can */ isNesting = true; NestedPropertyHelper.setNestedProperties(this); isNesting = false; /* make the current reference */ NestedReference nr = new NestedReference(getName(), getNestedProperty()); /* replace and store old session */ HttpSession session = (HttpSession)pageContext.getSession(); originalReference = NestedPropertyHelper.setIncludeReference(session,nr); return (EVAL_BODY_TAG); sq~ uq~q~pppq~$q~$xsq~isq~ uq~ppppq~T„sq~ uq~ppppptn/** * Render the resulting content evaluation. * * @return int JSP continuation directive. */ pt doAfterBodyq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tÑ /* Render the output */ if (bodyContent != null) { ResponseUtils.writePrevious(pageContext, bodyContent.getString()); bodyContent.clearBody(); } return (SKIP_BODY); sq~ uq~q~pppq~$q~$xsq~isq~ uq~ppppq~T„sq~ uq~ppppptc/** * Evaluate the rest of the page * * @return int JSP continuation directive. */ ptdoEndTagq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t÷ /* set the reference back */ HttpSession session = (HttpSession)pageContext.getSession(); NestedPropertyHelper.setIncludeReference(session, originalReference); originalReference = null; return (EVAL_PAGE); sq~ uq~q~pppq~$q~$xsq~isq~ uq~ppppq~T„sq~ uq~ppppptF/** * JSP method to release all resources held by the tag. */ ptreleaseq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tL super.release(); this.property = null; this.name = null; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~T„sq~ uq~ppppptð/* the usual private member variable */ /* the usual private member variable */ /* the usual private member variable */ /* the usual private member variable */ /* the usual private member variable */ /* the usual private member variable */ ptpropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~%Zxpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq~T„sq~ uq~ppppppptnameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~%Zxpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq~T„sq~ uq~ppppptt/* hold original property */ /* hold original property */ /* hold original property */ /* hold original property */ ptoriginalPropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~%Zxpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq~T„sq~ uq~pppppppt isNestingq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~%Zxpppt falseq~$q~$q~$xq€+*sq~isq~ uq~ppppq~T„sq~ uq~ppppptn/** Getter method for the property property * @return String value of the property property */ pt getPropertyq~Tæxsq~ uq~pppppq~Téq~Têq~Téq~{pq~Tëxsq~ uq~q~Ttpppsq~ uq~ppppq~Téq~Töxq~Tét return this.property; sq~ uq~ppppq~Téq~Téxsq~isq~ uq~sq~bsq~ uq~ppppqåsq~ uq~pppppppt newPropertyq~Tæxsq~ uq~pppppq~Téq~Têq~Téq~{pq~Tëxpppq~T„sq~ uq~ppppptÜ/** Setter method for the property property * Also, only setting the original property value to those values not * set by the nested logic. * @param property new value for the property property */ pt setPropertyq~Tæxsq~ uq~pppppq~Téq~Têq~Téppq~Tëxsq~ uq~q~Tfpppsq~ uq~ppppq~Téq~Töxq~Tétf property = newProperty; if (!isNesting) { originalProperty = newProperty; } sq~ uq~ppppq~Téq~Téxq q~TÝqasq~isq~ uq~ppppq~T„sq~ uq~ppppptÈ/** * Overriding method of the heart of the tag. Gets the relative property * and tells the JSP engine to evaluate its body content. * * @return int JSP continuation directive. */ pt doStartTagq~Tæxsq~ uq~pppppq~Téq~Têq~Téq~ pq~Tëxsq~ uq~ppppsq~ uq~ppppq~Téq~Töxq~TétU /* Set back to the original property */ property = originalProperty; /* let the NestedHelper set the properties it can */ isNesting = true; NestedPropertyHelper.setNestedProperties(this); isNesting = false; /* make the current reference */ NestedReference nr = new NestedReference(getName(), getNestedProperty()); /* replace and store old session */ HttpSession session = (HttpSession)pageContext.getSession(); originalReference = NestedPropertyHelper.setIncludeReference(session,nr); return (EVAL_BODY_TAG); sq~ uq~q~pppq~Téq~Téxsq~isq~ uq~ppppq~T„sq~ uq~ppppptn/** * Render the resulting content evaluation. * * @return int JSP continuation directive. */ pt doAfterBodyq~Tæxsq~ uq~pppppq~Téq~Têq~Téq~ pq~Tëxsq~ uq~ppppsq~ uq~ppppq~Téq~Töxq~TétÑ /* Render the output */ if (bodyContent != null) { ResponseUtils.writePrevious(pageContext, bodyContent.getString()); bodyContent.clearBody(); } return (SKIP_BODY); sq~ uq~q~pppq~Téq~Téxsq~isq~ uq~ppppq~T„sq~ uq~ppppptc/** * Evaluate the rest of the page * * @return int JSP continuation directive. */ ptdoEndTagq~Tæxsq~ uq~pppppq~Téq~Têq~Téq~ pq~Tëxsq~ uq~ppppsq~ uq~ppppq~Téq~Töxq~Tét÷ /* set the reference back */ HttpSession session = (HttpSession)pageContext.getSession(); NestedPropertyHelper.setIncludeReference(session, originalReference); originalReference = null; return (EVAL_PAGE); sq~ uq~q~pppq~Téq~Téxsq~isq~ uq~ppppq~T„sq~ uq~ppppptF/** * JSP method to release all resources held by the tag. */ ptreleaseq~Tæxsq~ uq~pppppq~Téq~Têq~Téppq~Tëxsq~ uq~ppppsq~ uq~ppppq~Téq~Töxq~TétL super.release(); this.property = null; this.name = null; sq~ uq~ppppq~Téq~Téxsq~isq~ uq~ppppq~T„sq~ uq~ppppptn/** Getter method for the property property * @return String value of the property property */ pt getPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~q~Ttpppsq~ uq~ppppq~¥q~»xq~¥t return this.property; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqMsq~ uq~pppppppt newPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~T„sq~ uq~ppppptÜ/** Setter method for the property property * Also, only setting the original property value to those values not * set by the nested logic. * @param property new value for the property property */ pt setPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~q~Tfpppsq~ uq~ppppq~¥q~»xq~¥tf property = newProperty; if (!isNesting) { originalProperty = newProperty; } sq~ uq~ppppq~¥q~¥xqq~Túqqsq~isq~ uq~ppppq~T„sq~ uq~ppppptÈ/** * Overriding method of the heart of the tag. Gets the relative property * and tells the JSP engine to evaluate its body content. * * @return int JSP continuation directive. */ pt doStartTagq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tU /* Set back to the original property */ property = originalProperty; /* let the NestedHelper set the properties it can */ isNesting = true; NestedPropertyHelper.setNestedProperties(this); isNesting = false; /* make the current reference */ NestedReference nr = new NestedReference(getName(), getNestedProperty()); /* replace and store old session */ HttpSession session = (HttpSession)pageContext.getSession(); originalReference = NestedPropertyHelper.setIncludeReference(session,nr); return (EVAL_BODY_TAG); sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~ppppq~T„sq~ uq~ppppptn/** * Render the resulting content evaluation. * * @return int JSP continuation directive. */ pt doAfterBodyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tÑ /* Render the output */ if (bodyContent != null) { ResponseUtils.writePrevious(pageContext, bodyContent.getString()); bodyContent.clearBody(); } return (SKIP_BODY); sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~ppppq~T„sq~ uq~ppppptc/** * Evaluate the rest of the page * * @return int JSP continuation directive. */ ptdoEndTagq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t÷ /* set the reference back */ HttpSession session = (HttpSession)pageContext.getSession(); NestedPropertyHelper.setIncludeReference(session, originalReference); originalReference = null; return (EVAL_PAGE); sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~ppppq~T„sq~ uq~ppppptF/** * JSP method to release all resources held by the tag. */ ptreleaseq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tL super.release(); this.property = null; this.name = null; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~T„sq~ uq~ppppptn/** Getter method for the property property * @return String value of the property property */ pt getPropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~q~Ttpppsq~ uq~ppppq~–q~¢xq~–t return this.property; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqµsq~ uq~pppppppt newPropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~T„sq~ uq~ppppptÜ/** Setter method for the property property * Also, only setting the original property value to those values not * set by the nested logic. * @param property new value for the property property */ pt setPropertyq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~q~Tfpppsq~ uq~ppppq~–q~¢xq~–tf property = newProperty; if (!isNesting) { originalProperty = newProperty; } sq~ uq~ppppq~–q~–xq*q~Uqsq~isq~ uq~ppppq~T„sq~ uq~ppppptÈ/** * Overriding method of the heart of the tag. Gets the relative property * and tells the JSP engine to evaluate its body content. * * @return int JSP continuation directive. */ pt doStartTagq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–td /* Set back to the original property */ property = originalProperty; /* let the NestedHelper set the properties it can */ isNesting = true; NestedPropertyHelper.setNestedProperties(this); isNesting = false; /* make the current reference */ NestedReference nr = new NestedReference(getName(), getNestedProperty()); /* replace and store old session */ HttpServletRequest request = (HttpServletRequest)pageContext.getRequest(); originalReference = NestedPropertyHelper.setIncludeReference(request, nr); return (EVAL_BODY_TAG); sq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq~T„sq~ uq~ppppptn/** * Render the resulting content evaluation. * * @return int JSP continuation directive. */ pt doAfterBodyq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tÑ /* Render the output */ if (bodyContent != null) { ResponseUtils.writePrevious(pageContext, bodyContent.getString()); bodyContent.clearBody(); } return (SKIP_BODY); sq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq~T„sq~ uq~ppppptc/** * Evaluate the rest of the page * * @return int JSP continuation directive. */ ptdoEndTagq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t /* set the reference back */ HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); NestedPropertyHelper.setIncludeReference(request, originalReference); originalReference = null; return (EVAL_PAGE); sq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq~T„sq~ uq~ppppptF/** * JSP method to release all resources held by the tag. */ ptreleaseq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tL super.release(); this.property = null; this.name = null; sq~ uq~ppppq~–q~–xq:q~U*sq~isq~ uq~ppppq~T„sq~ uq~ppppptn/** Getter method for the property property * @return String value of the property property */ pt getPropertyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~q~Ttpppsq~ uq~ppppq~~q~Šxq~~t return this.property; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq sq~ uq~pppppppt newPropertyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~T„sq~ uq~ppppptß/** Setter method for the property property * Also, only setting the original property value to those values not * set by the nested logic. * @param newProperty new value for the property property */ pt setPropertyq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~q~Tfpppsq~ uq~ppppq~~q~Šxq~~t! property = newProperty; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~T„sq~ uq~ppppptÈ/** * Overriding method of the heart of the tag. Gets the relative property * and tells the JSP engine to evaluate its body content. * * @return int JSP continuation directive. */ pt doStartTagq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t originalProperty = property; HttpServletRequest request = (HttpServletRequest)pageContext.getRequest(); originalNest = NestedPropertyHelper.getCurrentProperty(request); originalName = NestedPropertyHelper.getCurrentName(request, this); String nested = NestedPropertyHelper.getAdjustedProperty(request, originalProperty); NestedPropertyHelper.setProperty(request, nested); NestedPropertyHelper.setName(request, originalName); // run the body part return (EVAL_BODY_TAG); sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~T„sq~ uq~ppppptn/** * Render the resulting content evaluation. * * @return int JSP continuation directive. */ pt doAfterBodyq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tÏ /* Render the output */ if (bodyContent != null) { ResponseUtils.writePrevious(pageContext, bodyContent.getString()); bodyContent.clearBody(); } return (SKIP_BODY); sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~T„sq~ uq~ppppptc/** * Evaluate the rest of the page * * @return int JSP continuation directive. */ ptdoEndTagq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t™ /* set the reference back */ HttpServletRequest request = (HttpServletRequest)pageContext.getRequest(); if (originalNest == null) { NestedPropertyHelper.deleteReference(request); } else { NestedPropertyHelper.setName(request, originalName); NestedPropertyHelper.setProperty(request, originalNest); } property = originalProperty; return (EVAL_PAGE); sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~T„sq~ uq~ppppptF/** * JSP method to release all resources held by the tag. */ ptreleaseq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t– super.release(); this.property = null; this.originalNest = null; this.originalName = null; this.originalProperty = null; sq~ uq~ppppq~~q~~xsq~(sq~ uq~ppppq~T„sq~ uq~pppppppt originalNestq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~d1xpppt nullq~~q~~q~~xsq~(sq~ uq~ppppq~T„sq~ uq~pppppppt originalNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~d1xpppt nullq~~q~~q~~xqIq~U@sq~isq~ uq~ppppq~T„sq~ uq~ppppptn/** Getter method for the property property * @return String value of the property property */ pt getPropertyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~q~Ttpppsq~ uq~ppppq~fq~rxq~ft return this.property; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq Ÿsq~ uq~pppppppt newPropertyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~T„sq~ uq~ppppptß/** Setter method for the property property * Also, only setting the original property value to those values not * set by the nested logic. * @param newProperty new value for the property property */ pt setPropertyq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~q~Tfpppsq~ uq~ppppq~fq~rxq~ft! property = newProperty; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~T„sq~ uq~ppppptÈ/** * Overriding method of the heart of the tag. Gets the relative property * and tells the JSP engine to evaluate its body content. * * @return int JSP continuation directive. */ pt doStartTagq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft originalProperty = property; HttpServletRequest request = (HttpServletRequest)pageContext.getRequest(); originalNest = NestedPropertyHelper.getCurrentProperty(request); originalName = NestedPropertyHelper.getCurrentName(request, this); String nested = NestedPropertyHelper.getAdjustedProperty(request, originalProperty); NestedPropertyHelper.setProperty(request, nested); NestedPropertyHelper.setName(request, originalName); // run the body part return (EVAL_BODY_TAG); sq~ uq~q~pppq~fq~fxsq~isq~ uq~ppppq~T„sq~ uq~ppppptn/** * Render the resulting content evaluation. * * @return int JSP continuation directive. */ pt doAfterBodyq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftÏ /* Render the output */ if (bodyContent != null) { ResponseUtils.writePrevious(pageContext, bodyContent.getString()); bodyContent.clearBody(); } return (SKIP_BODY); sq~ uq~q~pppq~fq~fxsq~isq~ uq~ppppq~T„sq~ uq~ppppptc/** * Evaluate the rest of the page * * @return int JSP continuation directive. */ ptdoEndTagq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft™ /* set the reference back */ HttpServletRequest request = (HttpServletRequest)pageContext.getRequest(); if (originalNest == null) { NestedPropertyHelper.deleteReference(request); } else { NestedPropertyHelper.setName(request, originalName); NestedPropertyHelper.setProperty(request, originalNest); } property = originalProperty; return (EVAL_PAGE); sq~ uq~q~pppq~fq~fxsq~isq~ uq~ppppq~T„sq~ uq~ppppptF/** * JSP method to release all resources held by the tag. */ ptreleaseq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft– super.release(); this.property = null; this.originalNest = null; this.originalName = null; this.originalProperty = null; sq~ uq~ppppq~fq~fxppppppq~U÷sq~ uq~ppppppptNestedPropertyTagq~=xsq~ uq~ppppq~$sq~ uq~q~­_pppsq~ uq~q~U©q~%pppq~$q~$qësq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxsq~ uq~ppppptn/** Getter method for the property property * @return String value of the property property */ pt getPropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~q~Ttpppsq~ uq~ppppq~$q~Äxq~$t return this.property; sq~ uq~ppppq~$q~$xqÕq=q¥q q q~Udq#q²qAqÐq†q~®Íq~¯Yq~¯Éq~°Uq~b®q~cCq~cˆq~c½q~d@q~$q~Äxq~$psq~ uq~ppppq~$q~$xq~Tfsq~isq~ uq~ppppq~Tqsq~ uq~pppppt”/** * The getters and setters required to set a tags property property. * @return String value of the tags' property property */ pt getPropertyq~Tæxsq~ uq~pppppq~Téq~Têq~Téq~{pq~Tëxsq~ uq~ppppsq~ uq~ppppq~Téq~Töxq~Tépsq~ uq~ppppq~Téq~Téxsq~isq~ uq~sq~bsq~ uq~ppppq $sq~ uq~pppppppt newPropertyq~Tæxsq~ uq~pppppq~Téq~Têq~Téq~{pq~Tëxpppq~Tqsq~ uq~pppppt/** * The setter for the poroperty property * @param newProperty new String value to set the property property to */ pt setPropertyq~Tæxsq~ uq~pppppq~Téq~Têq~Téppq~Tëxsq~ uq~ppppsq~ uq~ppppq~Téq~Töxq~Tépsq~ uq~ppppq~Téq~Téxsq~isq~ uq~ppppq~Tqsq~ uq~pppppt”/** * The getters and setters required to set a tags property property. * @return String value of the tags' property property */ pt getPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥psq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq Jsq~ uq~pppppppt newPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~Tqsq~ uq~pppppt/** * The setter for the poroperty property * @param newProperty new String value to set the property property to */ pt setPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥psq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~Tqsq~ uq~pppppt”/** * The getters and setters required to set a tags property property. * @return String value of the tags' property property */ pt getPropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–psq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq psq~ uq~pppppppt newPropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~Tqsq~ uq~pppppt/** * The setter for the poroperty property * @param newProperty new String value to set the property property to */ pt setPropertyq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–psq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~Tqsq~ uq~pppppt”/** * The getters and setters required to set a tags property property. * @return String value of the tags' property property */ pt getPropertyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq –sq~ uq~pppppppt newPropertyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~Tqsq~ uq~pppppt/** * The setter for the poroperty property * @param newProperty new String value to set the property property to */ pt setPropertyq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~Tqsq~ uq~pppppt”/** * The getters and setters required to set a tags property property. * @return String value of the tags' property property */ pt getPropertyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fpsq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq ¼sq~ uq~pppppppt newPropertyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~Tqsq~ uq~pppppt/** * The setter for the poroperty property * @param newProperty new String value to set the property property to */ pt setPropertyq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fpsq~ uq~ppppq~fq~fxppq~U÷sq~ uq~ppppppptNestedPropertySupportq~=xsq~ uq~q€¥ßq€¥ppppq~$sq~ uq~q~­µq~q¬q€ psq~ uq~q~­Ýpppq~$q~$qàsq~ uq~q~T­q~SÕq~o.q~s q€Ñq~o—qÿ?q€´q€ðq~®Êq€ŠLq€“épppq~$sq~ uq~ppppsq~ uq~q€ì q€ì"q€ì}q€ì–q€ìòq€í q€ífq€íq€î}q€ï{ppppq~Äxsq~ uq~pppppt/** * The setter for the poroperty property * @param newProperty new String value to set the property property to */ pt setPropertyq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ ~uq~†q~T‡qåqMqµq q Ÿq~Utq3qÂqQqàq–q~®Ýq~¯iq~¯Ùq~°eq~‰kq~‰ƒq~‰›q~žÀq~ŸIq~Ÿaq~‡•q~ˆq~ˆ6q~œq~ q€ý¼q€ýÔq€ýìq~SÊq~TSsq~isq~ uq~sq~bsq~ uq~ppppq ìsq~ uq~pppppppt newPropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~SÕsq~ uq~pppppt//** this is overridden so that properties being set by the JSP page aren't * written over by those needed by the extension. If the tag instance is * re-used by the JSP, the tag can set the property back to that set by the * JSP page. * * @param newProperty new property value */ pt setPropertyq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~q~S¶q~Tfppsq~ uq~ppppq~–q~¢xq~–tÑ /* let the real tag do its thang */ super.setProperty(newProperty); /* if it's the JSP setting it, remember the value */ if (!isNesting) { originalProperty = newProperty; } sq~ uq~ppppq~–q~–xq~b½q~cRq~c—q~cÍq~dPq~Vêq€÷ëq€øq~o#q€¥‹q€¥£q€Âóq€Ãq€Ã2q~s•q~tq~t6q€®Wq€®àq€®øq€Æq€‚Oq€‚gq€ÑXq€Ñq€Ñ—q€‹q€‹[q€‹ƒq€³¼q€´Eq€´]q€w¨q€x1q€xIq~ošq~oÝq~pq€Œþq€Aq€iq€Žfq€Ž©q€ŽÑq€Š_q€Š¢q€“Þq€”Wqþìqÿqÿqÿ4qÿ}qÿ¥q€+q€nq€–q€¥q€èq€q~©^q€+ýq€,%q€âq€%q€Mq€ Óq€!q€!>q€"Jq€"q€"µq€Çq€ q€2q€q€Fq€nqþÅq€&Ûq€&óq€$Xq€$›q€$Ãq€ 5q€ xq€  q€q€Ðq€øq€ Äq€ q€ /ppppppppq~$q~Äxq~$psq~ uq~ppppq~$q~$xppsq~ uq~ppppq~¥q~»xq~¥tÑ /* let the real tag do its thang */ super.setProperty(newProperty); /* if it's the JSP setting it, remember the value */ if (!isNesting) { originalProperty = newProperty; } sq~ uq~ppppq~¥q~¥xq~Tq ìq~Tsq~isq~ uq~ppppq~SÕsq~ uq~pppppt/** * Complete the processing of the tag. The nested tags here will restore * all the original value for the tag itself and the nesting context. * @return int to describe the next step for the JSP processor * @throws JspException for the bad things JSP's do */ ptdoEndTagq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tÇ // do the super's ending part int i = super.doEndTag(); // reset the properties setName(originalName); setProperty(originalProperty); // continue return i; sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~SÕsq~ uq~ppppptC/** * Release the tag's resources and reset the values. */ ptreleaseq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~sq~isq~ uq~ppppq~RÜsq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~q sq~isq~ uq~ppppq~SÕsq~ uq~ppppptC/** * Release the tag's resources and reset the values. */ ptreleaseq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~q &pppsq~ uq~ppppq~fq~rxq~ftn super.release(); // reset the originals originalName = null; originalProperty = null; sq~ uq~ppppq~fq~fxppq~$q~Äxq~$tž super.release(); bundle = Action.MESSAGES_KEY; locale = Action.LOCALE_KEY; name = Action.ERROR_KEY; property = null; sq~ uq~ppppq~$q~$xpppsq~ uq~ppppq~~q~Šxq~~tn super.release(); // reset the originals originalName = null; originalProperty = null; sq~ uq~ppppq~~q~~xsq~(sq~ uq~ppppq~SÕsq~ uq~ppppptR/* the usual private member variables */ /* the usual private member variables */ pt originalNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~d1xpppt nullq~~q~~q~~xq~T sq~isq~ uq~ppppq~SÕsq~ uq~pppppt/** * Complete the processing of the tag. The nested tags here will restore * all the original value for the tag itself and the nesting context. * @return int to describe the next step for the JSP processor * @throws JspException for the bad things JSP's do */ ptdoEndTagq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftÇ // do the super's ending part int i = super.doEndTag(); // reset the properties setName(originalName); setProperty(originalProperty); // continue return i; sq~ uq~q~pppq~fq~fxq 3ppppq~Uúsq~ uq~ppppppptNestedErrorsTagq~=xsq~ uq~ppppq~$sq~ uq~q~q¼pppsq~ uq~q~RÜq~Tqq~T­pq~$q~$q€ïãsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxsq~ uq~pppppt//** this is overridden so that properties being set by the JSP page aren't * written over by those needed by the extension. If the tag instance is * re-used by the JSP, the tag can set the property back to that set by the * JSP page. * * @param newProperty new property value */ pt setPropertyq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~q~S¶q~Tfppsq~ uq~ppppq~$q~Äxq~$tÑ /* let the real tag do its thang */ super.setProperty(newProperty); /* if it's the JSP setting it, remember the value */ if (!isNesting) { originalProperty = newProperty; } sq~ uq~ppppq~$q~$xq~TSq ìpq~$q~Äxq~$t) this.property = property; sq~ uq~ppppq~$q~$xq~Sãq &sq~isq~ uq~ppppq~RÜsq~ uq~pppppppt getBundleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t% return (this.bundle); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq —sq~ uq~ppppppptbundleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~RÜsq~ uq~pppppppt setBundleq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t% this.bundle = bundle; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~RÜsq~ uq~pppppppt getLocaleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t% return (this.locale); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq ½sq~ uq~ppppppptlocaleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~RÜsq~ uq~pppppppt setLocaleq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t% this.locale = locale; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~RÜsq~ uq~ppppppptgetNameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t return (this.name); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq ãsq~ uq~ppppppptnameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~RÜsq~ uq~ppppppptsetNameq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t this.name = name; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~RÜsq~ uq~pppppppt getPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t' return (this.property); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq sq~ uq~ppppppptpropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~RÜsq~ uq~pppppppt setPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t) this.property = property; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~RÜsq~ uq~ppppptÞ// ------------------------------------------------------- Public Methods /** * Render the specified error messages if there are any. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t ª // Were any error messages specified? ActionErrors errors = null; try { errors = RequestUtils.getActionErrors(pageContext, name); } catch (JspException e) { RequestUtils.saveException(pageContext, e); throw e; } if ((errors == null) || errors.empty()) { return (EVAL_BODY_INCLUDE); } // Check for presence of header and footer message keys boolean headerPresent = RequestUtils.present(pageContext, bundle, locale, "errors.header"); boolean footerPresent = RequestUtils.present(pageContext, bundle, locale, "errors.footer"); boolean prefixPresent = RequestUtils.present(pageContext, bundle, locale, "errors.prefix"); boolean suffixPresent = RequestUtils.present(pageContext, bundle, locale, "errors.suffix"); // Render the error messages appropriately StringBuffer results = new StringBuffer(); boolean headerDone = false; String message = null; Iterator reports = null; if (property == null) { reports = errors.get(); } else { reports = errors.get(property); } while (reports.hasNext()) { ActionError report = (ActionError) reports.next(); if (!headerDone) { if (headerPresent) { message = RequestUtils.message(pageContext, bundle, locale, "errors.header"); results.append(message); results.append("\r\n"); } headerDone = true; } if (prefixPresent) { message = RequestUtils.message(pageContext, bundle, locale, "errors.prefix"); results.append(message); } message = RequestUtils.message(pageContext, bundle, locale, report.getKey(), report.getValues()); if (message != null) { results.append(message); results.append("\r\n"); } if (suffixPresent) { message = RequestUtils.message(pageContext, bundle, locale, "errors.suffix"); results.append(message); } } if (headerDone && footerPresent) { message = RequestUtils.message(pageContext, bundle, locale, "errors.footer"); results.append(message); results.append("\r\n"); } // Print the results to our output writer ResponseUtils.write(pageContext, results.toString()); // Continue processing this page return (EVAL_BODY_INCLUDE); sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~ppppq~RÜsq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tž super.release(); bundle = Action.MESSAGES_KEY; locale = Action.LOCALE_KEY; name = Action.ERROR_KEY; property = null; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~RÜsq~ uq~pppppppt getBundleq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t% return (this.bundle); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq Osq~ uq~ppppppptbundleq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~RÜsq~ uq~pppppppt setBundleq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t% this.bundle = bundle; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~RÜsq~ uq~pppppppt getLocaleq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t% return (this.locale); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq usq~ uq~ppppppptlocaleq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~RÜsq~ uq~pppppppt setLocaleq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t% this.locale = locale; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~RÜsq~ uq~ppppppptgetNameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return (this.name); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq ›sq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~RÜsq~ uq~ppppppptsetNameq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t this.name = name; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~RÜsq~ uq~pppppppt getPropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t' return (this.property); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq Ásq~ uq~ppppppptpropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~RÜsq~ uq~pppppppt setPropertyq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t) this.property = property; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~RÜsq~ uq~ppppptÞ// ------------------------------------------------------- Public Methods /** * Render the specified error messages if there are any. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t  // Were any error messages specified? ActionErrors errors = null; try { errors = RequestUtils.getActionErrors(pageContext, name); } catch (JspException e) { RequestUtils.saveException(pageContext, e); throw e; } if ((errors == null) || errors.empty()) { return (EVAL_BODY_INCLUDE); } // Check for presence of header and footer message keys boolean headerPresent = RequestUtils.present(pageContext, bundle, locale, "errors.header"); boolean footerPresent = RequestUtils.present(pageContext, bundle, locale, "errors.footer"); boolean prefixPresent = RequestUtils.present(pageContext, bundle, locale, "errors.prefix"); boolean suffixPresent = RequestUtils.present(pageContext, bundle, locale, "errors.suffix"); // Render the error messages appropriately StringBuffer results = new StringBuffer(); boolean headerDone = false; String message = null; Iterator reports = null; if (property == null) { reports = errors.get(); } else { reports = errors.get(property); } while (reports.hasNext()) { ActionError report = (ActionError) reports.next(); if (!headerDone) { if (headerPresent) { message = RequestUtils.message(pageContext, bundle, locale, "errors.header"); results.append(message); results.append("\r\n"); } headerDone = true; } if (prefixPresent) { message = RequestUtils.message(pageContext, bundle, locale, "errors.prefix"); results.append(message); } message = RequestUtils.message(pageContext, bundle, locale, report.getKey(), report.getValues()); if (message != null) { results.append(message); results.append("\r\n"); } if (suffixPresent) { message = RequestUtils.message(pageContext, bundle, locale, "errors.suffix"); results.append(message); } } if (headerDone && footerPresent) { message = RequestUtils.message(pageContext, bundle, locale, "errors.footer"); results.append(message); results.append("\r\n"); } // Print the results to our output writer ResponseUtils.write(pageContext, results.toString()); // Continue processing this page return (EVAL_BODY_INCLUDE); sq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq~RÜsq~ uq~pppppt5/** * Release any acquired resources. */ ptreleaseq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t¤ super.release(); bundle = Action.MESSAGES_KEY; locale = Action.LOCALE_KEY; name = Action.ERROR_KEY; property = null; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~RÜsq~ uq~pppppppt getBundleq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t% return (this.bundle); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq sq~ uq~ppppppptbundleq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~RÜsq~ uq~pppppppt setBundleq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t% this.bundle = bundle; sq~ uq~ppppq~~q~~xsq~(sq~ uq~ppppq~RÜsq~ uq~ppppptZ/** * The line ending string. */ /** * The line ending string. */ ptlineEndq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~ xpppt% System.getProperty("line.separator")q~~q~~q~~xsq~isq~ uq~ppppq~RÜsq~ uq~pppppppt getLocaleq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t% return (this.locale); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq qTqhZqfÃppppppq~$sq~ uq~qY†pppsq~ uq~q~Ipppq~$q~$sq~Qsq~ uq~ppppq~Bsq~ uq~pppppts/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/action/ActionErrors.java,v 1.11 2003/04/15 00:18:45 dgraham Exp $ * $Revision: 1.11 $ * $Date: 2003/04/15 00:18:45 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** *

      A class that encapsulates the error messages being reported by * the validate() method of an ActionForm. * Validation errors are either global to the entire ActionForm * bean they are associated with, or they are specific to a particular * bean property (and, therefore, a particular input field on the corresponding * form).

      * *

      Each individual error is described by an ActionError * object, which contains a message key (to be looked up in an appropriate * message resources database), and up to four placeholder arguments used for * parametric substitution in the resulting message.

      * *

      IMPLEMENTATION NOTE - It is assumed that these objects * are created and manipulated only within the context of a single thread. * Therefore, no synchronization is required for access to internal * collections.

      * * @author David Geary * @author Craig R. McClanahan * @version $Revision: 1.11 $ $Date: 2003/04/15 00:18:45 $ */ ptActionErrors.javaq~fxsq~ uq~ppppsq~ uq~q~Qbpppq~fxsq~ uq~pppppq~$sq~ uq~ppppsq~ ¹uq~Åsq~bsq~ uq~ppppsq~isq~ uq~sq~bsq~ uq~ppppq­sq~ uq~ppppppptrequestq~=xsq~ uq~pppppq~$q~yq~$q~Œpq~$xqªppq~Esq~ uq~ppppptr/** * Save the specified error messages keys into the appropriate request * attribute for use by the <struts:errors> tag, if any messages * are required. Otherwise, ensure that the request attribute is not * created. * * @param request The servlet request we are processing * @param errors Error messages object */ pt saveErrorsq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$t3 // Remove any error messages attribute if none are required if ((errors == null) || errors.empty()) { request.removeAttribute(ERROR_KEY); return; } // Save the error messages we need request.setAttribute(ERROR_KEY, errors); sq~ uq~ppppq~$q~$xsq~ uq~pppppppterrorsq~=xsq~ uq~pppppq~$q~yq~$q~Qbpq~$xsq~isq~ uq~sq~bsq~ uq~ppppqÊsq~ uq~ppppppptmappingq~=xsq~ uq~pppppq~$q~yq~$q~épq~$xsq~bsq~ uq~ppppqÊsq~ uq~ppppppptrequestq~=xsq~ uq~pppppq~$q~yq~$q~°pq~$xppq~wsq~ uq~ppppptV/** * Validate the properties that have been set for this non-HTTP request, * and return an ActionErrors object that encapsulates any * validation errors that have been found. If no errors are found, return * null or an ActionErrors object with no * recorded error messages. *

      * The default implementation attempts to forward to the HTTP version of * this method. * * @param mapping The mapping used to select this instance * @param request The servlet request we are processing */ ptvalidateq~=xsq~ uq~pppppq~$q~yq~$q~Qbpq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t± try { return (validate(mapping, (HttpServletRequest) request)); } catch (ClassCastException e) { return (null); } sq~ uq~ppppq~$q~$xqaôq8¥q8˜sq~isq~ uq~sq~bsq~ uq~ppppqêsq~ uq~pppppppt pageContextq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~bsq~ uq~ppppqêsq~ uq~pppppppt paramNameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xppq~%9sq~ uq~pppppt/** * Retrieves the value from request scope and if it isn't already an ErrorMessages * some classes are converted to one. * * @param pageContext The PageContext for the current page * @param paramName Key for parameter value */ ptgetActionErrorsq~=xsq~ uq~pppppq~$q~yq~$q~Qbpq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxq~$t ActionErrors errors = new ActionErrors(); Object value = pageContext.getAttribute(paramName, PageContext.REQUEST_SCOPE); try { if (value == null) { ; } else if (value instanceof String) { errors.add(ActionErrors.GLOBAL_ERROR, new ActionError((String) value)); } else if (value instanceof String[]) { String keys[] = (String[]) value; for (int i = 0; i < keys.length; i++) errors.add(ActionErrors.GLOBAL_ERROR, new ActionError(keys[i])); } else if (value instanceof ErrorMessages) { String keys[] = ((ErrorMessages) value).getErrors(); if (keys == null) keys = new String[0]; for (int i = 0; i < keys.length; i++) errors.add(ActionErrors.GLOBAL_ERROR, new ActionError(keys[i])); } else if (value instanceof ActionErrors) { errors = (ActionErrors) value; } else { throw new JspException (messages.getMessage("actionErrors.errors", value.getClass().getName())); } } catch (JspException e) { throw e; } catch (Exception e) { ; } return errors; sq~ uq~q~pppq~$q~$xqsŒqsÅqsþqt7qtpqt©qtâququTququÆquÿqv8qvqqilq~üq~Ã×qb–qaÙsq~bsq~ uq~ppppsq~isq~ uq~sq~bsq~ uq~ppppqsq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Œpq~§xq ppq~Esq~ uq~ppppptr/** * Save the specified error messages keys into the appropriate request * attribute for use by the <struts:errors> tag, if any messages * are required. Otherwise, ensure that the request attribute is not * created. * * @param request The servlet request we are processing * @param errors Error messages object */ pt saveErrorsq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥t3 // Remove any error messages attribute if none are required if ((errors == null) || errors.empty()) { request.removeAttribute(ERROR_KEY); return; } // Save the error messages we need request.setAttribute(ERROR_KEY, errors); sq~ uq~ppppq~¥q~¥xsq~ uq~pppppppterrorsq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Qbpq~§xsq~isq~ uq~sq~bsq~ uq~ppppq+sq~ uq~ppppppptmappingq~¢xsq~ uq~pppppq~¥q~¦q~¥q~épq~§xsq~bsq~ uq~ppppq+sq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~°pq~§xppq~wsq~ uq~ppppptV/** * Validate the properties that have been set for this non-HTTP request, * and return an ActionErrors object that encapsulates any * validation errors that have been found. If no errors are found, return * null or an ActionErrors object with no * recorded error messages. *

      * The default implementation attempts to forward to the HTTP version of * this method. * * @param mapping The mapping used to select this instance * @param request The servlet request we are processing */ ptvalidateq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Qbpq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t± try { return (validate(mapping, (HttpServletRequest) request)); } catch (ClassCastException e) { return (null); } sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqKsq~ uq~ppppppptmappingq~¢xsq~ uq~pppppq~¥q~¦q~¥q~épq~§xsq~bsq~ uq~ppppqKsq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Œpq~§xppq~wsq~ uq~pppppt®/** * Validate the properties that have been set for this HTTP request, * and return an ActionErrors object that encapsulates any * validation errors that have been found. If no errors are found, * return null or an ActionErrors object with * no recorded error messages. *

      * The default ipmlementation performs no validation and returns * null. Subclasses must override this method to provide * any validation they wish to perform. * * @param mapping The mapping used to select this instance * @param request The servlet request we are processing */ ptvalidateq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Qbpq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t" return (null); sq~ uq~ppppq~¥q~¥xq8µqD€sq~isq~ uq~sq~bsq~ uq~ppppqksq~ uq~pppppppt pageContextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~bsq~ uq~ppppqksq~ uq~pppppppt paramNameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xppq~%9sq~ uq~pppppt/** * Retrieves the value from request scope and if it isn't already an ErrorMessages * some classes are converted to one. * * @param pageContext The PageContext for the current page * @param paramName Key for parameter value */ ptgetActionErrorsq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Qbpq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥t ActionErrors errors = new ActionErrors(); Object value = pageContext.getAttribute(paramName, PageContext.REQUEST_SCOPE); try { if (value == null) { ; } else if (value instanceof String) { errors.add(ActionErrors.GLOBAL_ERROR, new ActionError((String) value)); } else if (value instanceof String[]) { String keys[] = (String[]) value; for (int i = 0; i < keys.length; i++) errors.add(ActionErrors.GLOBAL_ERROR, new ActionError(keys[i])); } else if (value instanceof ErrorMessages) { String keys[] = ((ErrorMessages) value).getErrors(); if (keys == null) keys = new String[0]; for (int i = 0; i < keys.length; i++) errors.add(ActionErrors.GLOBAL_ERROR, new ActionError(keys[i])); } else if (value instanceof ActionErrors) { errors = (ActionErrors) value; } else { throw new JspException (messages.getMessage("actionErrors.errors", value.getClass().getName())); } } catch (JspException e) { throw e; } catch (Exception e) { ; } return errors; sq~ uq~q~pppq~¥q~¥xqvªqvãqsOqwqxÑqz¤q}èqqRq‹qzûqÄqýq‚6qlåqŸøqbqb»qbQq~QÈsq~isq~ uq~sq~bsq~ uq~ppppqŒsq~ uq~ppppppptmappingq~rxsq~ uq~pppppq~–q~—q~–q~épq~˜xsq~bsq~ uq~ppppqŒsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~°pq~˜xppq~wsq~ uq~ppppptV/** * Validate the properties that have been set for this non-HTTP request, * and return an ActionErrors object that encapsulates any * validation errors that have been found. If no errors are found, return * null or an ActionErrors object with no * recorded error messages. *

      * The default implementation attempts to forward to the HTTP version of * this method. * * @param mapping The mapping used to select this instance * @param request The servlet request we are processing */ ptvalidateq~rxsq~ uq~pppppq~–q~—q~–q~Qbpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t± try { return (validate(mapping, (HttpServletRequest) request)); } catch (ClassCastException e) { return (null); } sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq¬sq~ uq~ppppppptmappingq~rxsq~ uq~pppppq~–q~—q~–q~épq~˜xsq~bsq~ uq~ppppq¬sq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xppq~wsq~ uq~pppppt®/** * Validate the properties that have been set for this HTTP request, * and return an ActionErrors object that encapsulates any * validation errors that have been found. If no errors are found, * return null or an ActionErrors object with * no recorded error messages. *

      * The default ipmlementation performs no validation and returns * null. Subclasses must override this method to provide * any validation they wish to perform. * * @param mapping The mapping used to select this instance * @param request The servlet request we are processing */ ptvalidateq~rxsq~ uq~pppppq~–q~—q~–q~Qbpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t" return (null); sq~ uq~ppppq~–q~–xsq~bsq~ uq~ppppsq~isq~ uq~sq~bsq~ uq~ppppqÏsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xqÌppq~Esq~ uq~ppppptp/** * Save the specified error messages keys into the appropriate request * attribute for use by the <html:errors> tag, if any messages * are required. Otherwise, ensure that the request attribute is not * created. * * @param request The servlet request we are processing * @param errors Error messages object */ pt saveErrorsq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–t5 // Remove any error messages attribute if none are required if ((errors == null) || errors.isEmpty()) { request.removeAttribute(ERROR_KEY); return; } // Save the error messages we need request.setAttribute(ERROR_KEY, errors); sq~ uq~ppppq~–q~–xsq~ uq~pppppppterrorsq~rxsq~ uq~pppppq~–q~—q~–q~Qbpq~˜xq8ÅqFÂqnq‚q‚Öqƒqwsqy(q{4q~?qôqƒHqƒq{mqƒºqƒóq„,sq~isq~ uq~sq~bsq~ uq~ppppqìsq~ uq~pppppppt pageContextq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~bsq~ uq~ppppqìsq~ uq~pppppppt paramNameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xppq~%9sq~ uq~ppppptl/** * Retrieves the value from request scope and if it isn't already an ErrorMessages * some classes are converted to one. * * @param pageContext The PageContext for the current page * @param paramName Key for parameter value * @return ActionErrors from request scope * @exception JspException */ ptgetActionErrorsq~rxsq~ uq~pppppq~–q~—q~–q~Qbpq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t‚ ActionErrors errors = new ActionErrors(); Object value = pageContext.findAttribute(paramName); try { if (value == null) { ; } else if (value instanceof String) { errors.add(ActionErrors.GLOBAL_ERROR, new ActionError((String) value)); } else if (value instanceof String[]) { String keys[] = (String[]) value; for (int i = 0; i < keys.length; i++) errors.add(ActionErrors.GLOBAL_ERROR, new ActionError(keys[i])); } else if (value instanceof ErrorMessages) { String keys[] = ((ErrorMessages) value).getErrors(); if (keys == null) keys = new String[0]; for (int i = 0; i < keys.length; i++) errors.add(ActionErrors.GLOBAL_ERROR, new ActionError(keys[i])); } else if (value instanceof ActionErrors) { errors = (ActionErrors) value; } else { throw new JspException (messages.getMessage("actionErrors.errors", value.getClass().getName())); } } catch (JspException e) { throw e; } catch (Exception e) { LOG.debug(e); } return errors; sq~ uq~q~pppq~–q~–xq qb1qbÛqbqqr†qrqr¿qrøqw¬qyaq{¦q~xq€-qˆ–qˆÏq‰q‰Aq‰zq{ßq‰³q‰ìqŠ%qe¾q~Rsq~bsq~ uq~ppppsq~isq~ uq~sq~bsq~ uq~ppppqsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xq ppq~Esq~ uq~ppppptp/** * Save the specified error messages keys into the appropriate request * attribute for use by the <html:errors> tag, if any messages * are required. Otherwise, ensure that the request attribute is not * created. * * @param request The servlet request we are processing * @param errors Error messages object */ pt saveErrorsq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t5 // Remove any error messages attribute if none are required if ((errors == null) || errors.isEmpty()) { request.removeAttribute(ERROR_KEY); return; } // Save the error messages we need request.setAttribute(ERROR_KEY, errors); sq~ uq~ppppq~~q~~xsq~ uq~pppppppterrorsq~{xsq~ uq~pppppq~~q~q~~q~Qbpq~€xsq~isq~ uq~sq~bsq~ uq~ppppq-sq~ uq~ppppppptmappingq~{xsq~ uq~pppppq~~q~q~~q~épq~€xsq~bsq~ uq~ppppq-sq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~°pq~€xppq~wsq~ uq~ppppptV/** * Validate the properties that have been set for this non-HTTP request, * and return an ActionErrors object that encapsulates any * validation errors that have been found. If no errors are found, return * null or an ActionErrors object with no * recorded error messages. *

      * The default implementation attempts to forward to the HTTP version of * this method. * * @param mapping The mapping used to select this instance * @param request The servlet request we are processing */ ptvalidateq~{xsq~ uq~pppppq~~q~q~~q~Qbpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t± try { return (validate(mapping, (HttpServletRequest) request)); } catch (ClassCastException e) { return (null); } sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqMsq~ uq~ppppppptmappingq~{xsq~ uq~pppppq~~q~q~~q~épq~€xsq~bsq~ uq~ppppqMsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xppq~wsq~ uq~pppppt®/** * Validate the properties that have been set for this HTTP request, * and return an ActionErrors object that encapsulates any * validation errors that have been found. If no errors are found, * return null or an ActionErrors object with * no recorded error messages. *

      * The default ipmlementation performs no validation and returns * null. Subclasses must override this method to provide * any validation they wish to perform. * * @param mapping The mapping used to select this instance * @param request The servlet request we are processing */ ptvalidateq~{xsq~ uq~pppppq~~q~q~~q~Qbpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t" return (null); sq~ uq~ppppq~~q~~xqIq8Õqpq„eq„žq„×qwåqy©q|q~±q€fq…q…Iq|Qq…‚q…»q…ôsq~isq~ uq~sq~bsq~ uq~ppppqmsq~ uq~pppppppt pageContextq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~bsq~ uq~ppppqmsq~ uq~pppppppt paramNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xppq~%9sq~ uq~ppppptl/** * Retrieves the value from request scope and if it isn't already an ErrorMessages * some classes are converted to one. * * @param pageContext The PageContext for the current page * @param paramName Key for parameter value * @return ActionErrors from request scope * @exception JspException */ ptgetActionErrorsq~{xsq~ uq~pppppq~~q~q~~q~Qbpq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t ActionErrors errors = new ActionErrors(); Object value = pageContext.findAttribute(paramName); try { if (value == null) { ; } else if (value instanceof String) { errors.add(ActionErrors.GLOBAL_ERROR, new ActionError((String) value)); } else if (value instanceof String[]) { String keys[] = (String[]) value; for (int i = 0; i < keys.length; i++) { errors.add(ActionErrors.GLOBAL_ERROR, new ActionError(keys[i])); } } else if (value instanceof ErrorMessages) { String keys[] = ((ErrorMessages) value).getErrors(); if (keys == null) { keys = new String[0]; } for (int i = 0; i < keys.length; i++) { errors.add(ActionErrors.GLOBAL_ERROR, new ActionError(keys[i])); } } else if (value instanceof ActionErrors) { errors = (ActionErrors) value; } else { throw new JspException( messages.getMessage("actionErrors.errors", value.getClass().getName())); } } catch (JspException e) { throw e; } catch (Exception e) { log.debug(e, e); } return errors; sq~ uq~q~pppq~~q~~xqbûqžq @qŠwqаqŠñqˆqxqyâq|Šq~êq€Ÿq‹*q‹cq‹œq‹ÕqŒq|ÃqŒGqŒ€qŒ¹qž§q•tq~RTsq~bsq~ uq~ppppsq~isq~ uq~sq~bsq~ uq~ppppq‘sq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxqŽppq~Esq~ uq~ppppptp/** * Save the specified error messages keys into the appropriate request * attribute for use by the <html:errors> tag, if any messages * are required. Otherwise, ensure that the request attribute is not * created. * * @param request The servlet request we are processing * @param errors Error messages object */ pt saveErrorsq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft5 // Remove any error messages attribute if none are required if ((errors == null) || errors.isEmpty()) { request.removeAttribute(ERROR_KEY); return; } // Save the error messages we need request.setAttribute(ERROR_KEY, errors); sq~ uq~ppppq~fq~fxsq~ uq~pppppppterrorsq~cxsq~ uq~pppppq~fq~gq~fq~Qbpq~hxsq~isq~ uq~sq~bsq~ uq~ppppq®sq~ uq~ppppppptmappingq~cxsq~ uq~pppppq~fq~gq~fq~épq~hxsq~bsq~ uq~ppppq®sq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~°pq~hxppq~wsq~ uq~ppppptV/** * Validate the properties that have been set for this non-HTTP request, * and return an ActionErrors object that encapsulates any * validation errors that have been found. If no errors are found, return * null or an ActionErrors object with no * recorded error messages. *

      * The default implementation attempts to forward to the HTTP version of * this method. * * @param mapping The mapping used to select this instance * @param request The servlet request we are processing */ ptvalidateq~cxsq~ uq~pppppq~fq~gq~fq~Qbpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft± try { return (validate(mapping, (HttpServletRequest) request)); } catch (ClassCastException e) { return (null); } sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqÎsq~ uq~ppppppptmappingq~cxsq~ uq~pppppq~fq~gq~fq~épq~hxsq~bsq~ uq~ppppqÎsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxppq~wsq~ uq~pppppt®/** * Validate the properties that have been set for this HTTP request, * and return an ActionErrors object that encapsulates any * validation errors that have been found. If no errors are found, * return null or an ActionErrors object with * no recorded error messages. *

      * The default ipmlementation performs no validation and returns * null. Subclasses must override this method to provide * any validation they wish to perform. * * @param mapping The mapping used to select this instance * @param request The servlet request we are processing */ ptvalidateq~cxsq~ uq~pppppq~fq~gq~fq~Qbpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft" return (null); sq~ uq~ppppq~fq~fxqKFq8åqq¹q†-q†fq†ŸqxWqz*q|üq#q€Øq†Øq‡q}5q‡Jq‡ƒq‡¼sq~isq~ uq~sq~bsq~ uq~ppppqîsq~ uq~pppppppt pageContextq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~bsq~ uq~ppppqîsq~ uq~pppppppt paramNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxppq~%9sq~ uq~ppppptl/** * Retrieves the value from request scope and if it isn't already an ErrorMessages * some classes are converted to one. * * @param pageContext The PageContext for the current page * @param paramName Key for parameter value * @return ActionErrors from request scope * @exception JspException */ ptgetActionErrorsq~cxsq~ uq~pppppq~fq~gq~fq~Qbpq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft ActionErrors errors = new ActionErrors(); Object value = pageContext.findAttribute(paramName); try { if (value == null) { ; } else if (value instanceof String) { errors.add(ActionErrors.GLOBAL_ERROR, new ActionError((String) value)); } else if (value instanceof String[]) { String keys[] = (String[]) value; for (int i = 0; i < keys.length; i++) { errors.add(ActionErrors.GLOBAL_ERROR, new ActionError(keys[i])); } } else if (value instanceof ErrorMessages) { String keys[] = ((ErrorMessages) value).getErrors(); if (keys == null) { keys = new String[0]; } for (int i = 0; i < keys.length; i++) { errors.add(ActionErrors.GLOBAL_ERROR, new ActionError(keys[i])); } } else if (value instanceof ActionErrors) { errors = (ActionErrors) value; } else { throw new JspException( messages.getMessage("actionErrors.errors", value.getClass().getName())); } } catch (JspException e) { throw e; } catch (Exception e) { log.debug(e, e); } return errors; sq~ uq~q~pppq~fq~fxqcqßq `q qDq…qˆUqxqzcq}nq\qq¾q÷qŽ0qŽiqŽ¢q}§qŽÛqqMqŸWq–$ppppppppppppq~Äxq~$ppxxsq~Csq~ uq~ppppq~QAsq~ uq~ppppsq~#q~QxqeÜq~Q>q~}Hq~,sq~ uq~pppppt Ä/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/util/StrutsValidatorUtil.java,v 1.10 2003/02/25 04:58:30 dgraham Exp $ * $Revision: 1.10 $ * $Date: 2003/02/25 04:58:30 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . *//** *

      This class helps provides some useful methods for retrieving objects * from different scopes of the application.

      * * @deprecated As of Struts 1.1, replaced by {@link org.apache.struts.validator.Resources} * @author David Winterfeldt * @author Eddie Bush * @version $Revision: 1.10 $ $Date: 2003/02/25 04:58:30 $ * @since Struts 1.1 */ ptStrutsValidatorUtil.javaq~fxsq~ uq~ppppsq~ uq~qi|pppq~fxsq~ uq~ppppsq~#q~Q0xsq~Csq~ uq~ppppq~Pñsq~ uq~ppppsq~#q~Q0xqhöqpppppq~$sq~ uq~q~Q&pppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~Qsq~ uq~ppppppptValidatorAction.javaq~$xsq~ uq~ppppsq~ uq~q~Q0pppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ Œuq~›qs|qsµqsîqt'qt`qt™qtÒqu quDqu}qu¶quïqv(qvaqj{qj¤qvšqvÓqs?qw qxÁqz”q}ØqqBq{qzëq´qíq‚&qkÿql(qmåqnq‚q‚Æq‚ÿqwcqyq{$q~/qäqƒ8qƒqq{]qƒªqƒãq„qrvqr qr¯qrèqwœqyQq{–q~hq€qˆ†qˆ¿qˆøq‰1q‰jq{Ïq‰£q‰ÜqŠqe"qeKqoqoªq„Uq„Žq„ÇqwÕqy™q|q~¡q€Vq…q…9q|Aq…rq…«q…äq‘çq’qŠgqŠ qŠáqˆ qxqyÒq|zq~Úq€q‹q‹Sq‹Œq‹Åq‹þq|³qŒ7qŒpqŒ©qqqqFq†q†Vq†qxGqzq|ìqq€Èq†Èq‡q}%q‡:q‡sq‡¬q“Bq“kqŒûq4quqˆEqx€qzSq}^qLqq®qçqŽ qŽYqŽ’q}—qŽËqq=pppppppppppppppq~Äxq~$ppxq€iq8sq~)sq~ uq~ppppq~Qsq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bddšqpxsq~zsq~ uq~ppppq~Qsq~ uq~pppppq~‡ptVarq~=xsq~ uq~sq~Csq~ uq~ppppq~Eµsq~ uq~ppppsq~#qDxpppq~$sq~ uq~q:pppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~Qsq~ uq~ppppppptVar.javaq~$xsq~ uq~ppppsq~ uq~qDpppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxqqhÔqi-qhyq€hÝqÔqfâpq~ sq~ uq~pppp. *//** *

      * * This class contains the default validations that are used in the validator-rules.xml * file.

      * * In general passin in a null or blank will return a null Object or a false * boolean. However, nulls and blanks do not result in an error being added to the * errors. *@deprecated As of Struts 1.1, replaced by {@link org.apache.struts.validator.FieldChecks } * *@author David Winterfeldt *@author James Turner *@since Struts 1.1 */ ptStrutsValidator.javaq~fxsq~ uq~ppppsq~ uq~qs_pppq~fxsq~ uq~ppppsq~#q~Pæxq ppq~$sq~ uq~q~PÜpppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~8sq~ uq~pppppppt Date.javaq~$xsq~ uq~ppppsq~ uq~q~Pæpppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ q7qƒ-qˆ{q„õq‹q†½q£ppq~Äxq~$ppxq€hsq~)sq~ uq~ppppq~P!sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bddšqpxq~Jq~µ]sq~)sq~ uq~ppppq~P!sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bddðqpxq~Eðsq~)sq~ uq~ppppq~P!sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bddqpxsq~zsq~ uq~ppppq~8sq~ uq~pppppq~‡ptNoSuchElementExceptionq~=xsq~ uq~sq~Csq~ uq~ppppsq~Qsq~ uq~sq~Csq~ uq~ppppqòsq~ uq~ppppsq~#q~öxqïppq~,sq~ uq~pppppt /* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/util/IteratorAdapter.java,v 1.3 2003/02/01 05:05:12 dgraham Exp $ * $Revision: 1.3 $ * $Date: 2003/02/01 05:05:12 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Utility method for converting Enumeration to an Iterator * class. If you attempt to remove() an Object from the iterator, it will * throw an UnsupportedOperationException. Added for use by TagLib so * Enumeration can be supported * * @deprecated Use commons-collections' IteratorUtils.asIterator(Enumeration). * @author Sean M. Kelley * @author Rob Leland * @version $Revision: 1.3 $ $Date: 2003/02/01 05:05:12 $ */ ptIteratorAdapter.javaq~fxsq~ uq~ppppsq~ uq~sq~zsq~ uq~sq~(sq~ uq~ppppqsq~ uq~ppppppptenumq~=xsq~ uq~pppppq~$q~yq~$q~jpq~$xsq~ uq~ppppsq~ uq~ppppq~$q~%Zxppppq~$q~$q~$xsq~esq~ uq~sq~bsq~ uq~ppppqsq~ uq~ppppppptenumq~=xsq~ uq~pppppq~$q~yq~$q~jpq~$xpppqsq~ uq~ppppppptIteratorAdapterq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t! this.enum = enum; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppqsq~ uq~pppppppthasNextq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t- return enum.hasMoreElements(); sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppqsq~ uq~ppppppptnextq~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t» if (!enum.hasMoreElements()) { throw new NoSuchElementException("IteratorAdaptor.next() has no more elements"); } return enum.nextElement(); sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppqsq~ uq~ppppppptremoveq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tu throw new java.lang.UnsupportedOperationException("Method IteratorAdaptor.remove() not implemented"); sq~ uq~ppppq~$q~$xsq~esq~ uq~sq~bsq~ uq~ppppqVsq~ uq~ppppppptenumq~¢xsq~ uq~pppppq~¥q~¦q~¥q~jpq~§xpppqsq~ uq~pppppppqq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t! this.enum = enum; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppqsq~ uq~pppppppthasNextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t- return enum.hasMoreElements(); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppqsq~ uq~ppppppptnextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t» if (!enum.hasMoreElements()) { throw new NoSuchElementException("IteratorAdaptor.next() has no more elements"); } return enum.nextElement(); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppqsq~ uq~ppppppptremoveq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tu throw new java.lang.UnsupportedOperationException("Method IteratorAdaptor.remove() not implemented"); sq~ uq~ppppq~¥q~¥xsq~esq~ uq~sq~bsq~ uq~ppppq™sq~ uq~ppppppptenumq~rxsq~ uq~pppppq~–q~—q~–q~jpq~˜xpppqsq~ uq~pppppppqq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t! this.enum = enum; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppqsq~ uq~pppppppthasNextq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t- return enum.hasMoreElements(); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppqsq~ uq~ppppppptnextq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t» if (!enum.hasMoreElements()) { throw new NoSuchElementException("IteratorAdaptor.next() has no more elements"); } return enum.nextElement(); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppqsq~ uq~ppppppptremoveq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tu throw new java.lang.UnsupportedOperationException("Method IteratorAdaptor.remove() not implemented"); sq~ uq~ppppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppqÜsq~ uq~ppppppptenumq~{xsq~ uq~pppppq~~q~q~~q~jpq~€xpppqsq~ uq~pppppppqq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t! this.enum = enum; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppqsq~ uq~pppppppthasNextq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t- return enum.hasMoreElements(); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppqsq~ uq~ppppppptnextq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t» if (!enum.hasMoreElements()) { throw new NoSuchElementException("IteratorAdaptor.next() has no more elements"); } return enum.nextElement(); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppqsq~ uq~ppppppptremoveq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tu throw new java.lang.UnsupportedOperationException("Method IteratorAdaptor.remove() not implemented"); sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppqsq~ uq~ppppppptenumq~cxsq~ uq~pppppq~fq~gq~fq~jpq~hxpppqsq~ uq~pppppppqq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft! this.enum = enum; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppqsq~ uq~pppppppthasNextq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft- return enum.hasMoreElements(); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppqsq~ uq~ppppppptnextq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft» if (!enum.hasMoreElements()) { throw new NoSuchElementException("IteratorAdaptor.next() has no more elements"); } return enum.nextElement(); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppqsq~ uq~ppppppptremoveq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftu throw new java.lang.UnsupportedOperationException("Method IteratorAdaptor.remove() not implemented"); sq~ uq~ppppq~fq~fxpppq~,sq~ uq~pppppppqq~=xsq~ uq~pppppq~$sq~ uq~sq~)sq~ uq~ppppq~G¶sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~sq~$úsq~ uq~ppppq~G¶sq~ uq~ppppq~=sq~ uq~ppppsq~ uq~ppppppxsq~)sq~ uq~ppppq~G¶sq~ uq~ppppq~$sq~ uq~qqpppsq~ uq~ppppsq~B$oQ×pxq~öqhpsq~4Ôuq~4׈ˆuq~4×\éq~$xpppsq~B™<Mpxqpppsq~ uq~q~öpppq~$q~$qòsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxpppq~fxsq~ uq~ppppsq~#qçxpppq~$sq~ uq~qÝpppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~8sq~ uq~ppppppptNoSuchElementException.javaq~$xsq~ uq~ppppsq~ uq~qçpppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxsq~)sq~ uq~ppppq~P!sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~BddFqpxq~öq~Pqå^ppppq~ sq~ uq~pppp. * *//** * Concrete subclass of MessageResources that reads message keys * and corresponding strings from named property resources in the same manner * that java.util.PropertyResourceBundle does. The * base property defines the base property resource name, and * must be specified. *

      * IMPLEMENTATION NOTE - This class trades memory for * speed by caching all messages located via generalizing the Locale under * the original locale as well. * This results in specific messages being stored in the message cache * more than once, but improves response time on subsequent requests for * the same locale + key combination. * * @author Craig R. McClanahan * @author David Graham * @version $Revision: 1.8 $ $Date: 2003/04/19 19:06:02 $ */ ptPropertyMessageResources.javaq~fxsq~ uq~ppppsq~ uq~q~GÓpppq~fxsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxpsq~4Ôuq~4×QQuq~4×Çq~$xpppsq~ uq~ppppsq~B‚¾pxq~-sq~)sq~ uq~ppppq~G¶sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~sq~$úsq~ uq~ppppq~G¶sq~ uq~ppppq~=sq~ uq~ppppsq~ uq~ppppppxsq~)sq~ uq~ppppq~G¶sq~ uq~ppppq~$sq~ uq~qøpppsq~ uq~ppppsq~B$#zpxq~0çqïpsq~4Ôuq~4×iiuq~4×ëŒq~$xpppsq~B„'âpxq~,q~H´sq~)sq~ uq~ppppq~G¶sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~B\ÏÎpxq~%9sq~)sq~ uq~ppppq~G¶sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~sq~$úsq~ uq~ppppq~G¶sq~ uq~ppppq~=sq~ uq~ppppsq~ uq~ppppppxsq~)sq~ uq~ppppq~G¶sq~ uq~ppppq~$sq~ uq~q"pppsq~ uq~ppppsq~B}¡ºpxq~&!qpsq~4Ôuq~4×ßßuq~4×/Ãq~$xpppsq~B™&pxsq~zsq~ ™uq~›sq~esq~ uq~sq~bsq~ uq~ppppqIMPLEMENTATION * NOTE - our associated servlet context gives no indication of * problems with logging, so the only way this method will return * true is if setError() is called. */ pt checkErrorq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t5 flush(); return (error); sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq9sq~ uq~pppppt'/** * Close the stream. */ ptcloseq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t flush(); sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq9sq~ uq~pppppt'/** * Flush the stream. */ ptflushq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tˆ if (buffer.length() > 0) { context.log(buffer.toString()); buffer.setLength(0); } sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq®sq~ uq~ppppppptbq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xpppq9sq~ uq~pppppt]/** * Print a boolean value. * * @param b The value to be printed */ ptprintq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t- write(String.valueOf(b)); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppqÆsq~ uq~ppppppptcq~=xsq~ uq~pppppq~$q~yq~$q~Epq~$xpppq9sq~ uq~pppppt_/** * Print a character value. * * @param c The value to be printed */ ptprintq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t write(c); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppqÞsq~ uq~ppppppptcq~=xsq~ uq~pppppq~$q~yq~$q~Et[]q~xpppq9sq~ uq~pppppti/** * Print a character array. * * @param c The character array to be printed */ ptprintq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tP for (int i = 0; i < c.length; i++) write(c[i]); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq÷sq~ uq~ppppppptdq~=xsq~ uq~pppppq~$q~yq~$sq~sq~ uq~ppppq~sq~ uq~ppppppptdoubleq~$xsq~ uq~ppppq~$sq~ uq~sq~)sq~ uq~ppppq~5sq~ uq~ppppq~=sq~ uq~ppppsq~ uq~ppppsq~Bddpxqpppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~sq~ uq~pppppppt double.javaq~$xsq~ uq~ppppsq~ uq~qpppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~qúsq~bsq~ uq~ppppsq~isq~ uq~q(pppq9sq~ uq~pppppts/** * Print a double value and terminate the line. * * @param d The value to be printed */ ptprintlnq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t/ println(String.valueOf(d)); sq~ uq~ppppq~$q~$xsq~ uq~ppppppptdq~=xsq~ uq~pppppq~$q~yq~$qpq~$xsq~bsq~ uq~ppppsq~isq~ uq~q@pppq9sq~ uq~pppppt\/** * Print a double value. * * @param d The value to be printed */ ptprintq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t- write(String.valueOf(d)); sq~ uq~ppppq~¥q~¥xsq~ uq~ppppppptdq~¢xsq~ uq~pppppq~¥q~¦q~¥qpq~§xsq~bsq~ uq~ppppsq~isq~ uq~qXpppq9sq~ uq~pppppts/** * Print a double value and terminate the line. * * @param d The value to be printed */ ptprintlnq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t/ println(String.valueOf(d)); sq~ uq~ppppq~¥q~¥xsq~ uq~ppppppptdq~¢xsq~ uq~pppppq~¥q~¦q~¥qpq~§xsq~bsq~ uq~ppppsq~isq~ uq~qppppq9sq~ uq~pppppt\/** * Print a double value. * * @param d The value to be printed */ ptprintq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t- write(String.valueOf(d)); sq~ uq~ppppq~–q~–xsq~ uq~ppppppptdq~rxsq~ uq~pppppq~–q~—q~–qpq~˜xsq~bsq~ uq~ppppsq~isq~ uq~qˆpppq9sq~ uq~pppppts/** * Print a double value and terminate the line. * * @param d The value to be printed */ ptprintlnq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t/ println(String.valueOf(d)); sq~ uq~ppppq~–q~–xsq~ uq~ppppppptdq~rxsq~ uq~pppppq~–q~—q~–qpq~˜xsq~bsq~ uq~ppppsq~isq~ uq~q pppq9sq~ uq~pppppt\/** * Print a double value. * * @param d The value to be printed */ ptprintq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t- write(String.valueOf(d)); sq~ uq~ppppq~~q~~xsq~ uq~ppppppptdq~{xsq~ uq~pppppq~~q~q~~qpq~€xsq~bsq~ uq~ppppsq~isq~ uq~q¸pppq9sq~ uq~pppppts/** * Print a double value and terminate the line. * * @param d The value to be printed */ ptprintlnq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t/ println(String.valueOf(d)); sq~ uq~ppppq~~q~~xsq~ uq~ppppppptdq~{xsq~ uq~pppppq~~q~q~~qpq~€xsq~bsq~ uq~ppppsq~isq~ uq~qÐpppq9sq~ uq~pppppt\/** * Print a double value. * * @param d The value to be printed */ ptprintq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft- write(String.valueOf(d)); sq~ uq~ppppq~fq~fxsq~ uq~ppppppptdq~cxsq~ uq~pppppq~fq~gq~fqpq~hxsq~bsq~ uq~ppppsq~isq~ uq~qèpppq9sq~ uq~pppppts/** * Print a double value and terminate the line. * * @param d The value to be printed */ ptprintlnq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft/ println(String.valueOf(d)); sq~ uq~ppppq~fq~fxsq~ uq~ppppppptdq~cxsq~ uq~pppppq~fq~gq~fqpq~hxppppq~Äxpq~$xpppq9sq~ uq~pppppt\/** * Print a double value. * * @param d The value to be printed */ ptprintq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t- write(String.valueOf(d)); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq sq~ uq~ppppppptfq~=xsq~ uq~pppppq~$q~yq~$sq~sq~ uq~ppppq~sq~ uq~ppppppptfloatq~$xsq~ uq~ppppq~$sq~ uq~sq~)sq~ uq~ppppq~5sq~ uq~ppppq~=sq~ uq~ppppsq~ uq~ppppsq~Bddpxqpppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~sq~ uq~pppppppt float.javaq~$xsq~ uq~ppppsq~ uq~qpppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~qsq~bsq~ uq~ppppsq~isq~ uq~q>pppq9sq~ uq~ppppptr/** * Print a float value and terminate the line. * * @param f The value to be printed */ ptprintlnq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t/ println(String.valueOf(f)); sq~ uq~ppppq~$q~$xsq~ uq~ppppppptfq~=xsq~ uq~pppppq~$q~yq~$qpq~$xsq~bsq~ uq~ppppsq~isq~ uq~qVpppq9sq~ uq~pppppt[/** * Print a float value. * * @param f The value to be printed */ ptprintq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t- write(String.valueOf(f)); sq~ uq~ppppq~¥q~¥xsq~ uq~ppppppptfq~¢xsq~ uq~pppppq~¥q~¦q~¥qpq~§xsq~bsq~ uq~ppppsq~isq~ uq~qnpppq9sq~ uq~ppppptr/** * Print a float value and terminate the line. * * @param f The value to be printed */ ptprintlnq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t/ println(String.valueOf(f)); sq~ uq~ppppq~¥q~¥xsq~ uq~ppppppptfq~¢xsq~ uq~pppppq~¥q~¦q~¥qpq~§xsq~bsq~ uq~ppppsq~isq~ uq~q†pppq9sq~ uq~pppppt[/** * Print a float value. * * @param f The value to be printed */ ptprintq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t- write(String.valueOf(f)); sq~ uq~ppppq~–q~–xsq~ uq~ppppppptfq~rxsq~ uq~pppppq~–q~—q~–qpq~˜xsq~bsq~ uq~ppppsq~isq~ uq~qžpppq9sq~ uq~ppppptr/** * Print a float value and terminate the line. * * @param f The value to be printed */ ptprintlnq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t/ println(String.valueOf(f)); sq~ uq~ppppq~–q~–xsq~ uq~ppppppptfq~rxsq~ uq~pppppq~–q~—q~–qpq~˜xsq~bsq~ uq~ppppsq~isq~ uq~q¶pppq9sq~ uq~pppppt[/** * Print a float value. * * @param f The value to be printed */ ptprintq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t- write(String.valueOf(f)); sq~ uq~ppppq~~q~~xsq~ uq~ppppppptfq~{xsq~ uq~pppppq~~q~q~~qpq~€xsq~bsq~ uq~ppppsq~isq~ uq~qÎpppq9sq~ uq~ppppptr/** * Print a float value and terminate the line. * * @param f The value to be printed */ ptprintlnq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t/ println(String.valueOf(f)); sq~ uq~ppppq~~q~~xsq~ uq~ppppppptfq~{xsq~ uq~pppppq~~q~q~~qpq~€xsq~bsq~ uq~ppppsq~isq~ uq~qæpppq9sq~ uq~pppppt[/** * Print a float value. * * @param f The value to be printed */ ptprintq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft- write(String.valueOf(f)); sq~ uq~ppppq~fq~fxsq~ uq~ppppppptfq~cxsq~ uq~pppppq~fq~gq~fqpq~hxsq~bsq~ uq~ppppsq~isq~ uq~qþpppq9sq~ uq~ppppptr/** * Print a float value and terminate the line. * * @param f The value to be printed */ ptprintlnq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft/ println(String.valueOf(f)); sq~ uq~ppppq~fq~fxsq~ uq~ppppppptfq~cxsq~ uq~pppppq~fq~gq~fqpq~hxppppq~Äxpq~$xpppq9sq~ uq~pppppt[/** * Print a float value. * * @param f The value to be printed */ ptprintq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t- write(String.valueOf(f)); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq#sq~ uq~ppppppptiq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xpppq9sq~ uq~pppppt^/** * Print an integer value. * * @param i The value to be printed */ ptprintq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t- write(String.valueOf(i)); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq;sq~ uq~ppppppptlq~=xsq~ uq~pppppq~$q~yq~$q~•pq~$xpppq9sq~ uq~ppppptZ/** * Print a long value. * * @param l The value to be printed */ ptprintq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t- write(String.valueOf(l)); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppqSsq~ uq~ppppppptoq~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xpppq9sq~ uq~ppppptW/** * Print an object. * * @param o The value to be printed */ ptprintq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t( write(o.toString()); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppqksq~ uq~ppppppptsq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq9sq~ uq~pppppt\/** * Print a String value. * * @param s The value to be printed */ ptprintq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tq int len = s.length(); for (int i = 0; i < len; i++) write(s.charAt(i)); sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq9sq~ uq~ppppptF/** * Terminate the current line and flush the buffer. */ ptprintlnq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t flush(); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq“sq~ uq~ppppppptbq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xpppq9sq~ uq~ppppptt/** * Print a boolean value and terminate the line. * * @param b The value to be printed */ ptprintlnq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t/ println(String.valueOf(b)); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq«sq~ uq~ppppppptcq~=xsq~ uq~pppppq~$q~yq~$q~Epq~$xpppq9sq~ uq~ppppptv/** * Print a character value and terminate the line. * * @param c The value to be printed */ ptprintlnq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t1 write(c); println(); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppqÃsq~ uq~ppppppptcq~=xsq~ uq~pppppq~$q~yq~$q~Et[]q~xpppq9sq~ uq~pppppt€/** * Print a character array and terminate the line. * * @param c The character array to be printed */ ptprintlnq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$td for (int i = 0; i < c.length; i++) print(c[i]); println(); sq~ uq~ppppq~$q~$xq+qAsq~isq~ uq~sq~bsq~ uq~ppppqÜsq~ uq~ppppppptiq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xpppq9sq~ uq~ppppptu/** * Print an integer value and terminate the line. * * @param i The value to be printed */ ptprintlnq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t/ println(String.valueOf(i)); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppqôsq~ uq~ppppppptlq~=xsq~ uq~pppppq~$q~yq~$q~•pq~$xpppq9sq~ uq~ppppptq/** * Print a long value and terminate the line. * * @param l The value to be printed */ ptprintlnq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t/ println(String.valueOf(l)); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq sq~ uq~ppppppptoq~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xpppq9sq~ uq~ppppptn/** * Print an object and terminate the line. * * @param o The value to be printed */ ptprintlnq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t* println(o.toString()); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq$sq~ uq~ppppppptsq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq9sq~ uq~pppppts/** * Print a String value and terminate the line. * * @param s The value to be printed */ ptprintlnq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t… int len = s.length(); for (int i = 0; i < len; i++) print(s.charAt(i)); println(); sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq9sq~ uq~pppppt:/** * Set the error state for this stream. */ ptsetErrorq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t& this.error = true; sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppqLsq~ uq~ppppppptcq~=xsq~ uq~pppppq~$q~yq~$q~Epq~$xpppq9sq~ uq~pppppts/** * Write a single character to this stream. * * @param c The character to be written */ ptwriteq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tt if (c == '\n') flush(); else if (c != '\r') buffer.append(c); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppqdsq~ uq~ppppppptcq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xpppq9sq~ uq~pppppts/** * Write a single character to this stream. * * @param c The character to be written */ ptwriteq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t$ write((char) c); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq|sq~ uq~ppppppptbufq~=xsq~ uq~pppppq~$q~yq~$q~Et[]q~xpppq9sq~ uq~pppppt~/** * Write an array of charaters to this stream. * * @param buf The character array to be written */ ptwriteq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tT for (int i = 0; i < buf.length; i++) write(buf[i]); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq•sq~ uq~ppppppptbufq~=xsq~ uq~pppppq~$q~yq~$q~Et[]q~xsq~bsq~ uq~ppppq•sq~ uq~ppppppptoffq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~bsq~ uq~ppppq•sq~ uq~ppppppptlenq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xpq9sq~ uq~pppppt/** * Write the specified subset of an array of characters to this stream. * * @param buf The character array from which to write * @param off The zero-relative starting offset to write * @param len The number of characters to write */ ptwriteq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tO for (int i = off; i < len; i++) write(buf[i]); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq¾sq~ uq~ppppppptsq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq9sq~ uq~ppppptf/** * Write a String to this stream. * * @param s The string to be written */ ptwriteq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tq int len = s.length(); for (int i = 0; i < len; i++) write(s.charAt(i)); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppqÖsq~ uq~ppppppptsq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppqÖsq~ uq~ppppppptoffq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~bsq~ uq~ppppqÖsq~ uq~ppppppptlenq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xpq9sq~ uq~ppppptø/** * Write the specified portion of a String to this stream. * * @param s The String from which to write * @param off The zero-relative starting offset to write * @param len The number of characters to write */ ptwriteq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tT for (int i = off; i < len; i++) write(s.charAt(i)); sq~ uq~ppppq~$q~$xsq~esq~ uq~sq~bsq~ uq~ppppqþsq~ uq~ppppppptcontextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Öpq~§xpppq9sq~ uq~pppppt// ----------------------------------------------------------- Constructors /** * Construct a ServletContextWriter associated with the specified * ServletContext instance. * * @param context The associated servlet context */ pqJq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tO super(new StringWriter()); this.context = context; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq9sq~ uq~pppppt‚// --------------------------------------------------------- Public Methods /** * Flush the stream and check for its error state. IMPLEMENTATION * NOTE - our associated servlet context gives no indication of * problems with logging, so the only way this method will return * true is if setError() is called. */ pt checkErrorq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t5 flush(); return (error); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq9sq~ uq~pppppt'/** * Close the stream. */ ptcloseq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t flush(); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq9sq~ uq~pppppt'/** * Flush the stream. */ ptflushq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tˆ if (buffer.length() > 0) { context.log(buffer.toString()); buffer.setLength(0); } sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqEsq~ uq~ppppppptbq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xpppq9sq~ uq~pppppt]/** * Print a boolean value. * * @param b The value to be printed */ ptprintq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t- write(String.valueOf(b)); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq]sq~ uq~ppppppptcq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Epq~§xpppq9sq~ uq~pppppt_/** * Print a character value. * * @param c The value to be printed */ ptprintq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t write(c); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqusq~ uq~ppppppptcq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Et[]q~!¼xpppq9sq~ uq~pppppti/** * Print a character array. * * @param c The character array to be printed */ ptprintq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tP for (int i = 0; i < c.length; i++) write(c[i]); sq~ uq~ppppq~¥q~¥xqCqYsq~isq~ uq~sq~bsq~ uq~ppppqŽsq~ uq~ppppppptiq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xpppq9sq~ uq~pppppt^/** * Print an integer value. * * @param i The value to be printed */ ptprintq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t- write(String.valueOf(i)); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq¦sq~ uq~ppppppptlq~¢xsq~ uq~pppppq~¥q~¦q~¥q~•pq~§xpppq9sq~ uq~ppppptZ/** * Print a long value. * * @param l The value to be printed */ ptprintq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t- write(String.valueOf(l)); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq¾sq~ uq~ppppppptoq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xpppq9sq~ uq~ppppptW/** * Print an object. * * @param o The value to be printed */ ptprintq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t( write(o.toString()); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqÖsq~ uq~ppppppptsq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq9sq~ uq~pppppt\/** * Print a String value. * * @param s The value to be printed */ ptprintq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tq int len = s.length(); for (int i = 0; i < len; i++) write(s.charAt(i)); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq9sq~ uq~ppppptF/** * Terminate the current line and flush the buffer. */ ptprintlnq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t flush(); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqþsq~ uq~ppppppptbq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xpppq9sq~ uq~ppppptt/** * Print a boolean value and terminate the line. * * @param b The value to be printed */ ptprintlnq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t/ println(String.valueOf(b)); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqsq~ uq~ppppppptcq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Epq~§xpppq9sq~ uq~ppppptv/** * Print a character value and terminate the line. * * @param c The value to be printed */ ptprintlnq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t1 write(c); println(); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq.sq~ uq~ppppppptcq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Et[]q~!¼xpppq9sq~ uq~pppppt€/** * Print a character array and terminate the line. * * @param c The character array to be printed */ ptprintlnq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥td for (int i = 0; i < c.length; i++) print(c[i]); println(); sq~ uq~ppppq~¥q~¥xq[qqsq~isq~ uq~sq~bsq~ uq~ppppqGsq~ uq~ppppppptiq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xpppq9sq~ uq~ppppptu/** * Print an integer value and terminate the line. * * @param i The value to be printed */ ptprintlnq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t/ println(String.valueOf(i)); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq_sq~ uq~ppppppptlq~¢xsq~ uq~pppppq~¥q~¦q~¥q~•pq~§xpppq9sq~ uq~ppppptq/** * Print a long value and terminate the line. * * @param l The value to be printed */ ptprintlnq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t/ println(String.valueOf(l)); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqwsq~ uq~ppppppptoq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xpppq9sq~ uq~ppppptn/** * Print an object and terminate the line. * * @param o The value to be printed */ ptprintlnq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t* println(o.toString()); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqsq~ uq~ppppppptsq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq9sq~ uq~pppppts/** * Print a String value and terminate the line. * * @param s The value to be printed */ ptprintlnq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t… int len = s.length(); for (int i = 0; i < len; i++) print(s.charAt(i)); println(); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq9sq~ uq~pppppt:/** * Set the error state for this stream. */ ptsetErrorq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t& this.error = true; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq·sq~ uq~ppppppptcq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Epq~§xpppq9sq~ uq~pppppts/** * Write a single character to this stream. * * @param c The character to be written */ ptwriteq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tt if (c == '\n') flush(); else if (c != '\r') buffer.append(c); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqÏsq~ uq~ppppppptcq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xpppq9sq~ uq~pppppts/** * Write a single character to this stream. * * @param c The character to be written */ ptwriteq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t$ write((char) c); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqçsq~ uq~ppppppptbufq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Et[]q~!¼xpppq9sq~ uq~pppppt~/** * Write an array of charaters to this stream. * * @param buf The character array to be written */ ptwriteq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tT for (int i = 0; i < buf.length; i++) write(buf[i]); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqsq~ uq~ppppppptbufq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Et[]q~!¼xsq~bsq~ uq~ppppqsq~ uq~ppppppptoffq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~bsq~ uq~ppppqsq~ uq~ppppppptlenq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xpq9sq~ uq~pppppt/** * Write the specified subset of an array of characters to this stream. * * @param buf The character array from which to write * @param off The zero-relative starting offset to write * @param len The number of characters to write */ ptwriteq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tO for (int i = off; i < len; i++) write(buf[i]); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq)sq~ uq~ppppppptsq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq9sq~ uq~ppppptf/** * Write a String to this stream. * * @param s The string to be written */ ptwriteq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tq int len = s.length(); for (int i = 0; i < len; i++) write(s.charAt(i)); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqAsq~ uq~ppppppptsq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppqAsq~ uq~ppppppptoffq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~bsq~ uq~ppppqAsq~ uq~ppppppptlenq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xpq9sq~ uq~ppppptø/** * Write the specified portion of a String to this stream. * * @param s The String from which to write * @param off The zero-relative starting offset to write * @param len The number of characters to write */ ptwriteq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tT for (int i = off; i < len; i++) write(s.charAt(i)); sq~ uq~ppppq~¥q~¥xsq~esq~ uq~sq~bsq~ uq~ppppqisq~ uq~ppppppptcontextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xpppq9sq~ uq~pppppt// ----------------------------------------------------------- Constructors /** * Construct a ServletContextWriter associated with the specified * ServletContext instance. * * @param context The associated servlet context */ pqJq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tO super(new StringWriter()); this.context = context; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq9sq~ uq~pppppt‚// --------------------------------------------------------- Public Methods /** * Flush the stream and check for its error state. IMPLEMENTATION * NOTE - our associated servlet context gives no indication of * problems with logging, so the only way this method will return * true is if setError() is called. */ pt checkErrorq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t5 flush(); return (error); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq9sq~ uq~pppppt'/** * Close the stream. */ ptcloseq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t flush(); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq9sq~ uq~pppppt'/** * Flush the stream. */ ptflushq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tˆ if (buffer.length() > 0) { context.log(buffer.toString()); buffer.setLength(0); } sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq°sq~ uq~ppppppptbq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xpppq9sq~ uq~pppppt]/** * Print a boolean value. * * @param b The value to be printed */ ptprintq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t- write(String.valueOf(b)); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqÈsq~ uq~ppppppptcq~rxsq~ uq~pppppq~–q~—q~–q~Epq~˜xpppq9sq~ uq~pppppt_/** * Print a character value. * * @param c The value to be printed */ ptprintq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t write(c); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqàsq~ uq~ppppppptcq~rxsq~ uq~pppppq~–q~—q~–q~Et[]q@ xpppq9sq~ uq~pppppti/** * Print a character array. * * @param c The character array to be printed */ ptprintq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tP for (int i = 0; i < c.length; i++) write(c[i]); sq~ uq~ppppq~–q~–xqsq‰sq~isq~ uq~sq~bsq~ uq~ppppqùsq~ uq~ppppppptiq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xpppq9sq~ uq~pppppt^/** * Print an integer value. * * @param i The value to be printed */ ptprintq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t- write(String.valueOf(i)); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqsq~ uq~ppppppptlq~rxsq~ uq~pppppq~–q~—q~–q~•pq~˜xpppq9sq~ uq~ppppptZ/** * Print a long value. * * @param l The value to be printed */ ptprintq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t- write(String.valueOf(l)); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq)sq~ uq~ppppppptoq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xpppq9sq~ uq~ppppptW/** * Print an object. * * @param o The value to be printed */ ptprintq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t( write(o.toString()); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqAsq~ uq~ppppppptsq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq9sq~ uq~pppppt\/** * Print a String value. * * @param s The value to be printed */ ptprintq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tq int len = s.length(); for (int i = 0; i < len; i++) write(s.charAt(i)); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq9sq~ uq~ppppptF/** * Terminate the current line and flush the buffer. */ ptprintlnq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t flush(); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqisq~ uq~ppppppptbq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xpppq9sq~ uq~ppppptt/** * Print a boolean value and terminate the line. * * @param b The value to be printed */ ptprintlnq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t/ println(String.valueOf(b)); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqsq~ uq~ppppppptcq~rxsq~ uq~pppppq~–q~—q~–q~Epq~˜xpppq9sq~ uq~ppppptv/** * Print a character value and terminate the line. * * @param c The value to be printed */ ptprintlnq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t1 write(c); println(); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq™sq~ uq~ppppppptcq~rxsq~ uq~pppppq~–q~—q~–q~Et[]q@ xpppq9sq~ uq~pppppt€/** * Print a character array and terminate the line. * * @param c The character array to be printed */ ptprintlnq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–td for (int i = 0; i < c.length; i++) print(c[i]); println(); sq~ uq~ppppq~–q~–xq‹q¡sq~isq~ uq~sq~bsq~ uq~ppppq²sq~ uq~ppppppptiq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xpppq9sq~ uq~ppppptu/** * Print an integer value and terminate the line. * * @param i The value to be printed */ ptprintlnq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t/ println(String.valueOf(i)); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqÊsq~ uq~ppppppptlq~rxsq~ uq~pppppq~–q~—q~–q~•pq~˜xpppq9sq~ uq~ppppptq/** * Print a long value and terminate the line. * * @param l The value to be printed */ ptprintlnq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t/ println(String.valueOf(l)); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqâsq~ uq~ppppppptoq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xpppq9sq~ uq~ppppptn/** * Print an object and terminate the line. * * @param o The value to be printed */ ptprintlnq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t* println(o.toString()); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqúsq~ uq~ppppppptsq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq9sq~ uq~pppppts/** * Print a String value and terminate the line. * * @param s The value to be printed */ ptprintlnq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t… int len = s.length(); for (int i = 0; i < len; i++) print(s.charAt(i)); println(); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq9sq~ uq~pppppt:/** * Set the error state for this stream. */ ptsetErrorq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t& this.error = true; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq"sq~ uq~ppppppptcq~rxsq~ uq~pppppq~–q~—q~–q~Epq~˜xpppq9sq~ uq~pppppts/** * Write a single character to this stream. * * @param c The character to be written */ ptwriteq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tt if (c == '\n') flush(); else if (c != '\r') buffer.append(c); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq:sq~ uq~ppppppptcq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xpppq9sq~ uq~pppppts/** * Write a single character to this stream. * * @param c The character to be written */ ptwriteq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t$ write((char) c); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqRsq~ uq~ppppppptbufq~rxsq~ uq~pppppq~–q~—q~–q~Et[]q@ xpppq9sq~ uq~pppppt~/** * Write an array of charaters to this stream. * * @param buf The character array to be written */ ptwriteq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tT for (int i = 0; i < buf.length; i++) write(buf[i]); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqksq~ uq~ppppppptbufq~rxsq~ uq~pppppq~–q~—q~–q~Et[]q@ xsq~bsq~ uq~ppppqksq~ uq~ppppppptoffq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~bsq~ uq~ppppqksq~ uq~ppppppptlenq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xpq9sq~ uq~pppppt/** * Write the specified subset of an array of characters to this stream. * * @param buf The character array from which to write * @param off The zero-relative starting offset to write * @param len The number of characters to write */ ptwriteq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tO for (int i = off; i < len; i++) write(buf[i]); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq”sq~ uq~ppppppptsq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq9sq~ uq~ppppptf/** * Write a String to this stream. * * @param s The string to be written */ ptwriteq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tq int len = s.length(); for (int i = 0; i < len; i++) write(s.charAt(i)); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq¬sq~ uq~ppppppptsq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq¬sq~ uq~ppppppptoffq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~bsq~ uq~ppppq¬sq~ uq~ppppppptlenq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xpq9sq~ uq~ppppptø/** * Write the specified portion of a String to this stream. * * @param s The String from which to write * @param off The zero-relative starting offset to write * @param len The number of characters to write */ ptwriteq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tT for (int i = off; i < len; i++) write(s.charAt(i)); sq~ uq~ppppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppqÔsq~ uq~ppppppptcontextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xpppq9sq~ uq~pppppt// ----------------------------------------------------------- Constructors /** * Construct a ServletContextWriter associated with the specified * ServletContext instance. * * @param context The associated servlet context */ pqJq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tO super(new StringWriter()); this.context = context; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq9sq~ uq~pppppt‚// --------------------------------------------------------- Public Methods /** * Flush the stream and check for its error state. IMPLEMENTATION * NOTE - our associated servlet context gives no indication of * problems with logging, so the only way this method will return * true is if setError() is called. */ pt checkErrorq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t5 flush(); return (error); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq9sq~ uq~pppppt'/** * Close the stream. */ ptcloseq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t flush(); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq9sq~ uq~pppppt'/** * Flush the stream. */ ptflushq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tˆ if (buffer.length() > 0) { context.log(buffer.toString()); buffer.setLength(0); } sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqsq~ uq~ppppppptbq~{xsq~ uq~pppppq~~q~q~~q~pq~€xpppq9sq~ uq~pppppt]/** * Print a boolean value. * * @param b The value to be printed */ ptprintq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t- write(String.valueOf(b)); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq3sq~ uq~ppppppptcq~{xsq~ uq~pppppq~~q~q~~q~Epq~€xpppq9sq~ uq~pppppt_/** * Print a character value. * * @param c The value to be printed */ ptprintq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t write(c); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqKsq~ uq~ppppppptcq~{xsq~ uq~pppppq~~q~q~~q~Et[]q~~­xpppq9sq~ uq~pppppti/** * Print a character array. * * @param c The character array to be printed */ ptprintq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tP for (int i = 0; i < c.length; i++) write(c[i]); sq~ uq~ppppq~~q~~xq£q¹sq~isq~ uq~sq~bsq~ uq~ppppqdsq~ uq~ppppppptiq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xpppq9sq~ uq~pppppt^/** * Print an integer value. * * @param i The value to be printed */ ptprintq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t- write(String.valueOf(i)); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq|sq~ uq~ppppppptlq~{xsq~ uq~pppppq~~q~q~~q~•pq~€xpppq9sq~ uq~ppppptZ/** * Print a long value. * * @param l The value to be printed */ ptprintq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t- write(String.valueOf(l)); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq”sq~ uq~ppppppptoq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xpppq9sq~ uq~ppppptW/** * Print an object. * * @param o The value to be printed */ ptprintq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t( write(o.toString()); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq¬sq~ uq~ppppppptsq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq9sq~ uq~pppppt\/** * Print a String value. * * @param s The value to be printed */ ptprintq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tq int len = s.length(); for (int i = 0; i < len; i++) write(s.charAt(i)); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq9sq~ uq~ppppptF/** * Terminate the current line and flush the buffer. */ ptprintlnq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t flush(); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqÔsq~ uq~ppppppptbq~{xsq~ uq~pppppq~~q~q~~q~pq~€xpppq9sq~ uq~ppppptt/** * Print a boolean value and terminate the line. * * @param b The value to be printed */ ptprintlnq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t/ println(String.valueOf(b)); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqìsq~ uq~ppppppptcq~{xsq~ uq~pppppq~~q~q~~q~Epq~€xpppq9sq~ uq~ppppptv/** * Print a character value and terminate the line. * * @param c The value to be printed */ ptprintlnq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t1 write(c); println(); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqsq~ uq~ppppppptcq~{xsq~ uq~pppppq~~q~q~~q~Et[]q~~­xpppq9sq~ uq~pppppt€/** * Print a character array and terminate the line. * * @param c The character array to be printed */ ptprintlnq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~td for (int i = 0; i < c.length; i++) print(c[i]); println(); sq~ uq~ppppq~~q~~xq»qÑsq~isq~ uq~sq~bsq~ uq~ppppqsq~ uq~ppppppptiq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xpppq9sq~ uq~ppppptu/** * Print an integer value and terminate the line. * * @param i The value to be printed */ ptprintlnq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t/ println(String.valueOf(i)); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq5sq~ uq~ppppppptlq~{xsq~ uq~pppppq~~q~q~~q~•pq~€xpppq9sq~ uq~ppppptq/** * Print a long value and terminate the line. * * @param l The value to be printed */ ptprintlnq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t/ println(String.valueOf(l)); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqMsq~ uq~ppppppptoq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xpppq9sq~ uq~ppppptn/** * Print an object and terminate the line. * * @param o The value to be printed */ ptprintlnq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t* println(o.toString()); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqesq~ uq~ppppppptsq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq9sq~ uq~pppppts/** * Print a String value and terminate the line. * * @param s The value to be printed */ ptprintlnq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t… int len = s.length(); for (int i = 0; i < len; i++) print(s.charAt(i)); println(); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq9sq~ uq~pppppt:/** * Set the error state for this stream. */ ptsetErrorq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t& this.error = true; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqsq~ uq~ppppppptcq~{xsq~ uq~pppppq~~q~q~~q~Epq~€xpppq9sq~ uq~pppppts/** * Write a single character to this stream. * * @param c The character to be written */ ptwriteq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tt if (c == '\n') flush(); else if (c != '\r') buffer.append(c); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq¥sq~ uq~ppppppptcq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xpppq9sq~ uq~pppppts/** * Write a single character to this stream. * * @param c The character to be written */ ptwriteq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t$ write((char) c); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq½sq~ uq~ppppppptbufq~{xsq~ uq~pppppq~~q~q~~q~Et[]q~~­xpppq9sq~ uq~pppppt~/** * Write an array of charaters to this stream. * * @param buf The character array to be written */ ptwriteq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tT for (int i = 0; i < buf.length; i++) write(buf[i]); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqÖsq~ uq~ppppppptbufq~{xsq~ uq~pppppq~~q~q~~q~Et[]q~~­xsq~bsq~ uq~ppppqÖsq~ uq~ppppppptoffq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~bsq~ uq~ppppqÖsq~ uq~ppppppptlenq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xpq9sq~ uq~pppppt/** * Write the specified subset of an array of characters to this stream. * * @param buf The character array from which to write * @param off The zero-relative starting offset to write * @param len The number of characters to write */ ptwriteq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tO for (int i = off; i < len; i++) write(buf[i]); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqÿsq~ uq~ppppppptsq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq9sq~ uq~ppppptf/** * Write a String to this stream. * * @param s The string to be written */ ptwriteq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tq int len = s.length(); for (int i = 0; i < len; i++) write(s.charAt(i)); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq sq~ uq~ppppppptsq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq sq~ uq~ppppppptoffq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~bsq~ uq~ppppq sq~ uq~ppppppptlenq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xpq9sq~ uq~ppppptø/** * Write the specified portion of a String to this stream. * * @param s The String from which to write * @param off The zero-relative starting offset to write * @param len The number of characters to write */ ptwriteq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tT for (int i = off; i < len; i++) write(s.charAt(i)); sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq ?sq~ uq~ppppppptcontextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxpppq9sq~ uq~pppppt// ----------------------------------------------------------- Constructors /** * Construct a ServletContextWriter associated with the specified * ServletContext instance. * * @param context The associated servlet context */ pqJq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftO super(new StringWriter()); this.context = context; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq9sq~ uq~pppppt‚// --------------------------------------------------------- Public Methods /** * Flush the stream and check for its error state. IMPLEMENTATION * NOTE - our associated servlet context gives no indication of * problems with logging, so the only way this method will return * true is if setError() is called. */ pt checkErrorq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft5 flush(); return (error); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq9sq~ uq~pppppt'/** * Close the stream. */ ptcloseq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft flush(); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq9sq~ uq~pppppt'/** * Flush the stream. */ ptflushq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftˆ if (buffer.length() > 0) { context.log(buffer.toString()); buffer.setLength(0); } sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq †sq~ uq~ppppppptbq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxpppq9sq~ uq~pppppt]/** * Print a boolean value. * * @param b The value to be printed */ ptprintq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft- write(String.valueOf(b)); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq žsq~ uq~ppppppptcq~cxsq~ uq~pppppq~fq~gq~fq~Epq~hxpppq9sq~ uq~pppppt_/** * Print a character value. * * @param c The value to be printed */ ptprintq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft write(c); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq ¶sq~ uq~ppppppptcq~cxsq~ uq~pppppq~fq~gq~fq~Et[]q~kxpppq9sq~ uq~pppppti/** * Print a character array. * * @param c The character array to be printed */ ptprintq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftP for (int i = 0; i < c.length; i++) write(c[i]); sq~ uq~ppppq~fq~fxqÓqésq~isq~ uq~sq~bsq~ uq~ppppq Ïsq~ uq~ppppppptiq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxpppq9sq~ uq~pppppt^/** * Print an integer value. * * @param i The value to be printed */ ptprintq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft- write(String.valueOf(i)); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq çsq~ uq~ppppppptlq~cxsq~ uq~pppppq~fq~gq~fq~•pq~hxpppq9sq~ uq~ppppptZ/** * Print a long value. * * @param l The value to be printed */ ptprintq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft- write(String.valueOf(l)); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq ÿsq~ uq~ppppppptoq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxpppq9sq~ uq~ppppptW/** * Print an object. * * @param o The value to be printed */ ptprintq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft( write(o.toString()); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq!sq~ uq~ppppppptsq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq9sq~ uq~pppppt\/** * Print a String value. * * @param s The value to be printed */ ptprintq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftq int len = s.length(); for (int i = 0; i < len; i++) write(s.charAt(i)); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq9sq~ uq~ppppptF/** * Terminate the current line and flush the buffer. */ ptprintlnq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft flush(); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq!?sq~ uq~ppppppptbq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxpppq9sq~ uq~ppppptt/** * Print a boolean value and terminate the line. * * @param b The value to be printed */ ptprintlnq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft/ println(String.valueOf(b)); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq!Wsq~ uq~ppppppptcq~cxsq~ uq~pppppq~fq~gq~fq~Epq~hxpppq9sq~ uq~ppppptv/** * Print a character value and terminate the line. * * @param c The value to be printed */ ptprintlnq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft1 write(c); println(); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq!osq~ uq~ppppppptcq~cxsq~ uq~pppppq~fq~gq~fq~Et[]q~kxpppq9sq~ uq~pppppt€/** * Print a character array and terminate the line. * * @param c The character array to be printed */ ptprintlnq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftd for (int i = 0; i < c.length; i++) print(c[i]); println(); sq~ uq~ppppq~fq~fxqëqsq~isq~ uq~sq~bsq~ uq~ppppq!ˆsq~ uq~ppppppptiq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxpppq9sq~ uq~ppppptu/** * Print an integer value and terminate the line. * * @param i The value to be printed */ ptprintlnq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft/ println(String.valueOf(i)); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq! sq~ uq~ppppppptlq~cxsq~ uq~pppppq~fq~gq~fq~•pq~hxpppq9sq~ uq~ppppptq/** * Print a long value and terminate the line. * * @param l The value to be printed */ ptprintlnq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft/ println(String.valueOf(l)); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq!¸sq~ uq~ppppppptoq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxpppq9sq~ uq~ppppptn/** * Print an object and terminate the line. * * @param o The value to be printed */ ptprintlnq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft* println(o.toString()); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq!Ðsq~ uq~ppppppptsq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq9sq~ uq~pppppts/** * Print a String value and terminate the line. * * @param s The value to be printed */ ptprintlnq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft… int len = s.length(); for (int i = 0; i < len; i++) print(s.charAt(i)); println(); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq9sq~ uq~pppppt:/** * Set the error state for this stream. */ ptsetErrorq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft& this.error = true; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq!øsq~ uq~ppppppptcq~cxsq~ uq~pppppq~fq~gq~fq~Epq~hxpppq9sq~ uq~pppppts/** * Write a single character to this stream. * * @param c The character to be written */ ptwriteq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftt if (c == '\n') flush(); else if (c != '\r') buffer.append(c); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq"sq~ uq~ppppppptcq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxpppq9sq~ uq~pppppts/** * Write a single character to this stream. * * @param c The character to be written */ ptwriteq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft$ write((char) c); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq"(sq~ uq~ppppppptbufq~cxsq~ uq~pppppq~fq~gq~fq~Et[]q~kxpppq9sq~ uq~pppppt~/** * Write an array of charaters to this stream. * * @param buf The character array to be written */ ptwriteq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftT for (int i = 0; i < buf.length; i++) write(buf[i]); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq"Asq~ uq~ppppppptbufq~cxsq~ uq~pppppq~fq~gq~fq~Et[]q~kxsq~bsq~ uq~ppppq"Asq~ uq~ppppppptoffq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~bsq~ uq~ppppq"Asq~ uq~ppppppptlenq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxpq9sq~ uq~pppppt/** * Write the specified subset of an array of characters to this stream. * * @param buf The character array from which to write * @param off The zero-relative starting offset to write * @param len The number of characters to write */ ptwriteq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftO for (int i = off; i < len; i++) write(buf[i]); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq"jsq~ uq~ppppppptsq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq9sq~ uq~ppppptf/** * Write a String to this stream. * * @param s The string to be written */ ptwriteq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftq int len = s.length(); for (int i = 0; i < len; i++) write(s.charAt(i)); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq"‚sq~ uq~ppppppptsq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq"‚sq~ uq~ppppppptoffq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~bsq~ uq~ppppq"‚sq~ uq~ppppppptlenq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxpq9sq~ uq~ppppptø/** * Write the specified portion of a String to this stream. * * @param s The String from which to write * @param off The zero-relative starting offset to write * @param len The number of characters to write */ ptwriteq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftT for (int i = off; i < len; i++) write(s.charAt(i)); sq~ uq~ppppq~fq~fxppq~,sq~ uq~pppppppqJq~=xsq~ uq~sq~Csq~ uq~ppppq~bsq~ uq~ppppsq~#q9xpppq~$sq~ uq~qpppsq~ uq~q~&!pppq~$q~$sq~Qsq~ uq~sq~Csq~ uq~ppppq"¸sq~ uq~ppppsq~#q~&!xsq~Csq~ uq~ppppq"¸sq~ uq~ppppsq~#sq~zsq~ uq~ppppq~Tsq~ uq~pppppq~‡pt StringWriterq~=xsq~ uq~q"Ápppq~$sq~ uq~sq~)sq~ uq~ppppq~& sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bddqqpxq"Çpppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~Tsq~ uq~ppppppptStringWriter.javaq~$xsq~ uq~ppppsq~ uq~q"Çpppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxxsq~Csq~ uq~ppppq"¸sq~ uq~ppppsq~#q~Öxpq~,sq~ uq~pppppt 4/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/util/ServletContextWriter.java,v 1.2 2001/02/12 00:32:14 craigmcc Exp $ * $Revision: 1.2 $ * $Date: 2001/02/12 00:32:14 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * A PrintWriter implementation that uses the logging facilities of a * javax.servlet.ServletContext to output its results. Output * will be buffered until a newline character is output, flush() * is called, or until one of the println() methods is called. * Along the way, carriage return characters are skipped. * * @author Craig R. McClanahan * @version $Revision: 1.2 $ $Date: 2001/02/12 00:32:14 $ */ ptServletContextWriter.javaq~fxsq~ uq~ppppsq~ uq~q9pppq~fxsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxsq~)sq~ uq~ppppq~G¶sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~sq~$úsq~ uq~ppppq~G¶sq~ uq~ppppq~=sq~ uq~ppppsq~ uq~ppppppxsq~)sq~ uq~ppppq~G¶sq~ uq~ppppq~$sq~ uq~q# sq~$úsq~ uq~ppppq~G¶sq~ uq~ppppq~{sq~ uq~ppppsq~ uq~ppppppxq#sq~)sq~ uq~ppppq~G¶sq~ uq~ppppq~{sq~ uq~sq~$úsq~ uq~ppppq~G¶sq~ uq~ppppq~{sq~ uq~ppppsq~ uq~ppppppxq##q#psq~4Ôuq~4×lPuq~4×]Pq~~xpppsq~ uq~q#pppsq~Bddpxsq~zsq~ uq~sq~(sq~ uq~ppppq#9sq~ uq~ppppppptpropertyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xpppt nullq~~q~~q~~xsq~(sq~ uq~ppppq#9sq~ uq~pppppppterrorq~{xsq~ uq~pppppq~~q~q~~q~ßpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xpppt nullq~~q~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq#Vsq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq#9sq~ uq~pppppt/** * Construct an module exception with no replacement values. * * @param key Message key for this error message */ ptModuleExceptionq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t< super(key); error = new ActionError(key); sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq#nsq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq#nsq~ uq~ppppppptvalueq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xppq#9sq~ uq~pppppt¶/** * Construct an module exception with the specified replacement values. * * @param key Message key for this error message * @param value First replacement value */ pq#dq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t: super(key); error = new ActionError(key, value); sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq#sq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq#sq~ uq~ppppppptvalue0q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~bsq~ uq~ppppq#sq~ uq~ppppppptvalue1q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xpq#9sq~ uq~ppppptã/** * Construct an module exception with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value */ pq#dq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tC super(key); error = new ActionError(key, value0, value1); sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq#´sq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq#´sq~ uq~ppppppptvalue0q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~bsq~ uq~ppppq#´sq~ uq~ppppppptvalue1q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~bsq~ uq~ppppq#´sq~ uq~ppppppptvalue2q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xq#9sq~ uq~pppppt/** * Construct an module exception with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value * @param value2 Third replacement value */ pq#dq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tK super(key); error = new ActionError(key, value0, value1, value2); sq~ uq~ppppq~~q~~xsq~esq~ uq~ sq~bsq~ uq~ppppq#ãsq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq#ãsq~ uq~ppppppptvalue0q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~bsq~ uq~ppppq#ãsq~ uq~ppppppptvalue1q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~bsq~ uq~ppppq#ãsq~ uq~ppppppptvalue2q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~bsq~ uq~ppppq#ãsq~ uq~ppppppptvalue3q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xppppq#9sq~ uq~pppppt:/** * Construct an module exception with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value * @param value2 Third replacement value * @param value3 Fourth replacement value */ pq#dq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tS super(key); error = new ActionError(key, value0, value1, value2, value3); sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq$sq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq$sq~ uq~ppppppptvaluesq~{xsq~ uq~pppppq~~q~q~~q~«t[]q~€xppq#9sq~ uq~pppppt±/** * Construct an action error with the specified replacement values. * * @param key Message key for this message * @param values Array of replacement values */ pq#dq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t, error = new ActionError(key, values); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq#9sq~ uq~pppppt¯// -------------------------------------------------------- Public Methods /** * Returns the property associated with the exception. * @return Value of property. */ pt getPropertyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t= return (property != null) ? property : error.getKey(); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq$Jsq~ uq~ppppppptpropertyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq#9sq~ uq~pppppt†/** * Set the property associated with the exception. * It can be a name of the edit field, which 'caused' the exception. */ pt setPropertyq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t this.property = property; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq#9sq~ uq~ppppptf/** * Returns the error associated with the exception. * @return Value of property error. */ ptgetErrorq~{xsq~ uq~pppppq~~q~q~~q~ßpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t return error; sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq$rsq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq#9sq~ uq~pppppt/** * Construct an module exception with no replacement values. * * @param key Message key for this error message */ pq#dq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft< super(key); error = new ActionError(key); sq~ uq~ppppq~fq~fxsq~esq~ uq~sq~bsq~ uq~ppppq$‰sq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq$‰sq~ uq~ppppppptvalueq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxppq#9sq~ uq~pppppt¶/** * Construct an module exception with the specified replacement values. * * @param key Message key for this error message * @param value First replacement value */ pq#dq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft: super(key); error = new ActionError(key, value); sq~ uq~ppppq~fq~fxsq~esq~ uq~sq~bsq~ uq~ppppq$¨sq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq$¨sq~ uq~ppppppptvalue0q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~bsq~ uq~ppppq$¨sq~ uq~ppppppptvalue1q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxpq#9sq~ uq~ppppptã/** * Construct an module exception with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value */ pq#dq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftC super(key); error = new ActionError(key, value0, value1); sq~ uq~ppppq~fq~fxsq~esq~ uq~sq~bsq~ uq~ppppq$Ïsq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq$Ïsq~ uq~ppppppptvalue0q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~bsq~ uq~ppppq$Ïsq~ uq~ppppppptvalue1q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~bsq~ uq~ppppq$Ïsq~ uq~ppppppptvalue2q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxq#9sq~ uq~pppppt/** * Construct an module exception with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value * @param value2 Third replacement value */ pq#dq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftK super(key); error = new ActionError(key, value0, value1, value2); sq~ uq~ppppq~fq~fxsq~esq~ uq~ sq~bsq~ uq~ppppq$þsq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq$þsq~ uq~ppppppptvalue0q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~bsq~ uq~ppppq$þsq~ uq~ppppppptvalue1q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~bsq~ uq~ppppq$þsq~ uq~ppppppptvalue2q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~bsq~ uq~ppppq$þsq~ uq~ppppppptvalue3q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxppppq#9sq~ uq~pppppt:/** * Construct an module exception with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value * @param value2 Third replacement value * @param value3 Fourth replacement value */ pq#dq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftS super(key); error = new ActionError(key, value0, value1, value2, value3); sq~ uq~ppppq~fq~fxsq~esq~ uq~sq~bsq~ uq~ppppq%5sq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq%5sq~ uq~ppppppptvaluesq~cxsq~ uq~pppppq~fq~gq~fq~«t[]q~hxppq#9sq~ uq~pppppt±/** * Construct an action error with the specified replacement values. * * @param key Message key for this message * @param values Array of replacement values */ pq#dq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft, error = new ActionError(key, values); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq#9sq~ uq~pppppt¯// -------------------------------------------------------- Public Methods /** * Returns the property associated with the exception. * @return Value of property. */ pt getPropertyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft= return (property != null) ? property : error.getKey(); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq%esq~ uq~ppppppptpropertyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq#9sq~ uq~pppppt†/** * Set the property associated with the exception. * It can be a name of the edit field, which 'caused' the exception. */ pt setPropertyq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft this.property = property; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq#9sq~ uq~ppppptf/** * Returns the error associated with the exception. * @return Value of property error. */ ptgetErrorq~cxsq~ uq~pppppq~fq~gq~fq~ßpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft return error; sq~ uq~ppppq~fq~fxppppq~,sq~ uq~pppppppq#dq~{xsq~ uq~sq~Csq~ uq~ppppq~sq~ uq~ppppsq~#q#9xpppq~~sq~ uq~q##pppsq~ uq~q~‚pppq~~q~~sq~Qsq~ uq~sq~Csq~ uq~ppppq%›sq~ uq~ppppsq~#q~ßxpppq~,sq~ uq~pppppt /* * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Used for specialized exception handling. */ ptModuleException.javaq~fxsq~ uq~ppppsq~ uq~q#9pppq~fxsq~ uq~sq~zsq~ 'uq~'sq~(sq~ uq~ppppq%®sq~ uq~ppppppptpropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~ xpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq%®sq~ uq~pppppppterrorq~=xsq~ uq~pppppq~$q~yq~$q~ßpq~$xsq~ uq~ppppsq~ uq~ppppq~$q~ xpppt nullq~$q~$q~$xsq~esq~ uq~sq~bsq~ uq~ppppq%Ësq~ uq~ppppppptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq%®sq~ uq~ppppptâ// ----------------------------------------------------------- Constructors /** * Construct an application exception with no replacement values. * * @param key Message key for this error message */ pt AppExceptionq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tE super(key); error = new ActionError(key); sq~ uq~ppppq~$q~$xsq~esq~ uq~sq~bsq~ uq~ppppq%ãsq~ uq~ppppppptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppq%ãsq~ uq~ppppppptvalueq~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xppq%®sq~ uq~ppppptÐ/** * Construct an application exception with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value */ pq%Ùq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tL super(key); error = new ActionError(key, value); sq~ uq~ppppq~$q~$xsq~esq~ uq~sq~bsq~ uq~ppppq&sq~ uq~ppppppptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppq&sq~ uq~ppppppptvalue0q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xsq~bsq~ uq~ppppq&sq~ uq~ppppppptvalue1q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xpq%®sq~ uq~pppppt/** * Construct an application exception with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value */ pq%Ùq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tU super(key); error = new ActionError(key, value0, value1); sq~ uq~ppppq~$q~$xsq~esq~ uq~sq~bsq~ uq~ppppq&)sq~ uq~ppppppptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppq&)sq~ uq~ppppppptvalue0q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xsq~bsq~ uq~ppppq&)sq~ uq~ppppppptvalue1q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xsq~bsq~ uq~ppppq&)sq~ uq~ppppppptvalue2q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xq%®sq~ uq~pppppt//** * Construct an application exception with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value * @param value2 Third replacement value */ pq%Ùq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t] super(key); error = new ActionError(key, value0, value1, value2); sq~ uq~ppppq~$q~$xsq~esq~ uq~ sq~bsq~ uq~ppppq&Xsq~ uq~ppppppptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppq&Xsq~ uq~ppppppptvalue0q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xsq~bsq~ uq~ppppq&Xsq~ uq~ppppppptvalue1q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xsq~bsq~ uq~ppppq&Xsq~ uq~ppppppptvalue2q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xsq~bsq~ uq~ppppq&Xsq~ uq~ppppppptvalue3q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xppppq%®sq~ uq~pppppt_/** * Construct an application exception with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value * @param value2 Third replacement value * @param value3 Fourth replacement value */ pq%Ùq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$te super(key); error = new ActionError(key, value0, value1, value2, value3); sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq%®sq~ uq~ppppptº// -------------------------------------------------------- Public Methods /** * Returns the property associated with the exception. * @return Value of property. */ pt getPropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tH return (property != null) ? property : error.getKey(); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq&Ÿsq~ uq~ppppppptpropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq%®sq~ uq~pppppt’/** * Set the property associated with the exception. * It can be a name of the edit field, which 'caused' the exception. */ pt setPropertyq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t+ this.property = property; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq%®sq~ uq~ppppptr/** * Returns the error associated with the exception. * @return Value of property error. */ ptgetErrorq~=xsq~ uq~pppppq~$q~yq~$q~ßpq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t return error; sq~ uq~ppppq~$q~$xsq~esq~ uq~sq~bsq~ uq~ppppq&Çsq~ uq~ppppppptkeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq%®sq~ uq~ppppptâ// ----------------------------------------------------------- Constructors /** * Construct an application exception with no replacement values. * * @param key Message key for this error message */ pq%Ùq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tE super(key); error = new ActionError(key); sq~ uq~ppppq~¥q~¥xsq~esq~ uq~sq~bsq~ uq~ppppq&Þsq~ uq~ppppppptkeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq&Þsq~ uq~ppppppptvalueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xppq%®sq~ uq~ppppptÐ/** * Construct an application exception with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value */ pq%Ùq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tL super(key); error = new ActionError(key, value); sq~ uq~ppppq~¥q~¥xsq~esq~ uq~sq~bsq~ uq~ppppq&ýsq~ uq~ppppppptkeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq&ýsq~ uq~ppppppptvalue0q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~bsq~ uq~ppppq&ýsq~ uq~ppppppptvalue1q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xpq%®sq~ uq~pppppt/** * Construct an application exception with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value */ pq%Ùq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tU super(key); error = new ActionError(key, value0, value1); sq~ uq~ppppq~¥q~¥xsq~esq~ uq~sq~bsq~ uq~ppppq'$sq~ uq~ppppppptkeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq'$sq~ uq~ppppppptvalue0q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~bsq~ uq~ppppq'$sq~ uq~ppppppptvalue1q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~bsq~ uq~ppppq'$sq~ uq~ppppppptvalue2q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xq%®sq~ uq~pppppt//** * Construct an application exception with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value * @param value2 Third replacement value */ pq%Ùq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t] super(key); error = new ActionError(key, value0, value1, value2); sq~ uq~ppppq~¥q~¥xsq~esq~ uq~ sq~bsq~ uq~ppppq'Ssq~ uq~ppppppptkeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq'Ssq~ uq~ppppppptvalue0q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~bsq~ uq~ppppq'Ssq~ uq~ppppppptvalue1q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~bsq~ uq~ppppq'Ssq~ uq~ppppppptvalue2q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~bsq~ uq~ppppq'Ssq~ uq~ppppppptvalue3q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xppppq%®sq~ uq~pppppt_/** * Construct an application exception with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value * @param value2 Third replacement value * @param value3 Fourth replacement value */ pq%Ùq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥te super(key); error = new ActionError(key, value0, value1, value2, value3); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq%®sq~ uq~ppppptº// -------------------------------------------------------- Public Methods /** * Returns the property associated with the exception. * @return Value of property. */ pt getPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tH return (property != null) ? property : error.getKey(); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq'šsq~ uq~ppppppptpropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq%®sq~ uq~pppppt’/** * Set the property associated with the exception. * It can be a name of the edit field, which 'caused' the exception. */ pt setPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t+ this.property = property; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq%®sq~ uq~ppppptr/** * Returns the error associated with the exception. * @return Value of property error. */ ptgetErrorq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ßpq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t return error; sq~ uq~ppppq~¥q~¥xsq~esq~ uq~sq~bsq~ uq~ppppq'Âsq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq%®sq~ uq~ppppptÕ// ----------------------------------------------------------- Constructors /** * Construct an application module exception with no replacement values. * * @param key Message key for this error message */ pq%Ùq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t0 super(key); error = new ActionError(key); sq~ uq~ppppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppq'Ùsq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq'Ùsq~ uq~ppppppptvalueq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xppq%®sq~ uq~pppppt½/** * Construct an application module exception with the specified replacement values. * * @param key Message key for this error message * @param value First replacement value */ pq%Ùq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t7 super(key); error = new ActionError(key, value); sq~ uq~ppppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppq'øsq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq'øsq~ uq~ppppppptvalue0q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~bsq~ uq~ppppq'øsq~ uq~ppppppptvalue1q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xpq%®sq~ uq~pppppté/** * Construct an application module exception with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value */ pq%Ùq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t@ super(key); error = new ActionError(key, value0, value1); sq~ uq~ppppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppq(sq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq(sq~ uq~ppppppptvalue0q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~bsq~ uq~ppppq(sq~ uq~ppppppptvalue1q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~bsq~ uq~ppppq(sq~ uq~ppppppptvalue2q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xq%®sq~ uq~pppppt/** * Construct an application module exception with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value * @param value2 Third replacement value */ pq%Ùq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tH super(key); error = new ActionError(key, value0, value1, value2); sq~ uq~ppppq~–q~–xsq~esq~ uq~ sq~bsq~ uq~ppppq(Nsq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq(Nsq~ uq~ppppppptvalue0q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~bsq~ uq~ppppq(Nsq~ uq~ppppppptvalue1q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~bsq~ uq~ppppq(Nsq~ uq~ppppppptvalue2q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~bsq~ uq~ppppq(Nsq~ uq~ppppppptvalue3q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xppppq%®sq~ uq~pppppt>/** * Construct an application module exception with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value * @param value2 Third replacement value * @param value3 Fourth replacement value */ pq%Ùq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tP super(key); error = new ActionError(key, value0, value1, value2, value3); sq~ uq~ppppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppq(…sq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq(…sq~ uq~ppppppptvaluesq~rxsq~ uq~pppppq~–q~—q~–q~«t[]q~˜xppq%®sq~ uq~pppppt¬/** * Construct an action error with the specified replacement values. * * @param key Message key for this message * @param values Array of replacement values */ pq%Ùq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t* error = new ActionError(key, values); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq%®sq~ uq~pppppt«// -------------------------------------------------------- Public Methods /** * Returns the property associated with the exception. * @return Value of property. */ pt getPropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t; return (property != null) ? property : error.getKey(); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq(µsq~ uq~ppppppptpropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq%®sq~ uq~ppppptƒ/** * Set the property associated with the exception. * It can be a name of the edit field, which 'caused' the exception. */ pt setPropertyq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t this.property = property; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq%®sq~ uq~ppppptc/** * Returns the error associated with the exception. * @return Value of property error. */ ptgetErrorq~rxsq~ uq~pppppq~–q~—q~–q~ßpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return error; sq~ uq~ppppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppq(Ýsq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq%®sq~ uq~ppppptÎ// ----------------------------------------------------------- Constructors /** * Construct an module exception with no replacement values. * * @param key Message key for this error message */ pq%Ùq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t super(key); sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq(ôsq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq(ôsq~ uq~ppppppptvalueq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xppq%®sq~ uq~pppppt¶/** * Construct an module exception with the specified replacement values. * * @param key Message key for this error message * @param value First replacement value */ pq%Ùq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t super(key,value); sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq)sq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq)sq~ uq~ppppppptvalue0q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~bsq~ uq~ppppq)sq~ uq~ppppppptvalue1q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xpq%®sq~ uq~ppppptã/** * Construct an module exception with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value */ pq%Ùq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t super(key,value0,value1); sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq):sq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq):sq~ uq~ppppppptvalue0q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~bsq~ uq~ppppq):sq~ uq~ppppppptvalue1q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~bsq~ uq~ppppq):sq~ uq~ppppppptvalue2q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xq%®sq~ uq~pppppt/** * Construct an module exception with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value * @param value2 Third replacement value */ pq%Ùq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t* super(key, value0, value1, value2); sq~ uq~ppppq~~q~~xsq~esq~ uq~ sq~bsq~ uq~ppppq)isq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq)isq~ uq~ppppppptvalue0q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~bsq~ uq~ppppq)isq~ uq~ppppppptvalue1q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~bsq~ uq~ppppq)isq~ uq~ppppppptvalue2q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~bsq~ uq~ppppq)isq~ uq~ppppppptvalue3q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xppppq%®sq~ uq~pppppt:/** * Construct an module exception with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value * @param value2 Third replacement value * @param value3 Fourth replacement value */ pq%Ùq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t2 super(key, value0, value1, value2, value3); sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq) sq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq) sq~ uq~ppppppptvaluesq~{xsq~ uq~pppppq~~q~q~~q~«t[]q~€xppq%®sq~ uq~pppppt±/** * Construct an action error with the specified replacement values. * * @param key Message key for this message * @param values Array of replacement values */ pq%Ùq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t super(key,values); sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq)Àsq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq%®sq~ uq~ppppptÎ// ----------------------------------------------------------- Constructors /** * Construct an module exception with no replacement values. * * @param key Message key for this error message */ pq%Ùq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft super(key); sq~ uq~ppppq~fq~fxsq~esq~ uq~sq~bsq~ uq~ppppq)×sq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq)×sq~ uq~ppppppptvalueq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxppq%®sq~ uq~pppppt¶/** * Construct an module exception with the specified replacement values. * * @param key Message key for this error message * @param value First replacement value */ pq%Ùq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft super(key,value); sq~ uq~ppppq~fq~fxsq~esq~ uq~sq~bsq~ uq~ppppq)ösq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq)ösq~ uq~ppppppptvalue0q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~bsq~ uq~ppppq)ösq~ uq~ppppppptvalue1q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxpq%®sq~ uq~ppppptã/** * Construct an module exception with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value */ pq%Ùq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft super(key,value0,value1); sq~ uq~ppppq~fq~fxsq~esq~ uq~sq~bsq~ uq~ppppq*sq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq*sq~ uq~ppppppptvalue0q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~bsq~ uq~ppppq*sq~ uq~ppppppptvalue1q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~bsq~ uq~ppppq*sq~ uq~ppppppptvalue2q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxq%®sq~ uq~pppppt/** * Construct an module exception with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value * @param value2 Third replacement value */ pq%Ùq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft* super(key, value0, value1, value2); sq~ uq~ppppq~fq~fxsq~esq~ uq~ sq~bsq~ uq~ppppq*Lsq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq*Lsq~ uq~ppppppptvalue0q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~bsq~ uq~ppppq*Lsq~ uq~ppppppptvalue1q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~bsq~ uq~ppppq*Lsq~ uq~ppppppptvalue2q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~bsq~ uq~ppppq*Lsq~ uq~ppppppptvalue3q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxppppq%®sq~ uq~pppppt:/** * Construct an module exception with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value * @param value2 Third replacement value * @param value3 Fourth replacement value */ pq%Ùq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft2 super(key, value0, value1, value2, value3); sq~ uq~ppppq~fq~fxsq~esq~ uq~sq~bsq~ uq~ppppq*ƒsq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq*ƒsq~ uq~ppppppptvaluesq~cxsq~ uq~pppppq~fq~gq~fq~«t[]q~hxppq%®sq~ uq~pppppt±/** * Construct an action error with the specified replacement values. * * @param key Message key for this message * @param values Array of replacement values */ pq%Ùq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft super(key,values); sq~ uq~ppppq~fq~fxq~,sq~ uq~pppppppq%Ùq~=xsq~ uq~ppppq~$sq~ uq~q#pppsq~ uq~q~‚q#9ppq~$q~$sq~Qsq~ uq~ppppq~,sq~ uq~pppppt ~/* * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * @deprecated use {@link ModuleException} */ ptAppException.javaq~fxsq~ uq~ppppsq~ uq~q%®pppq~fxsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxppppq~~sq~ uq~ppppsq~ uq~ppppq~Šxq~~ppxpsq~4Ôuq~4×Pmuq~4×Pîq~~xppsq~ uq~ppppsq~B$ƒ,Üpxq~‚q#psq~4Ôuq~4×lmuq~4×]îq~$xq#*ppsq~B!|.Mpxq%®sq~)sq~ uq~ppppq~G¶sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~BeÎðpxq~*?q~G³qqÞqhsq~)sq~ uq~ppppq~G¶sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bn^pxsq~zsq~ uq~"sq~esq~ uq~sq~bsq~ uq~ppppq*ásq~ uq~ppppppptlabelq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppq*ásq~ uq~ppppppptvalueq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xppq*Þsq~ uq~pppppt// ----------------------------------------------------------- Constructors /** * Construct an instance with the supplied property values. * * @param label The label to be displayed to the user. * @param value The value to be returned to the server. */ ptLabelValueBeanq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t@ this.label = label; this.value = value; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq*Þsq~ uq~ppppptH// ------------------------------------------------------------- Properties /** * The property which supplies the option label visible to the end user. */ // ------------------------------------------------------------- Properties /** * The property which supplies the option label visible to the end user. */ // ------------------------------------------------------------- Properties /** * The property which supplies the option label visible to the end user. */ // ------------------------------------------------------------- Properties /** * The property which supplies the option label visible to the end user. */ // ------------------------------------------------------------- Properties /** * The property which supplies the option label visible to the end user. */ ptlabelq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~%Zxppppq~$q~$q~$xsq~isq~ uq~ppppq*Þsq~ uq~ppppppptgetLabelq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t" return this.label; sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq+sq~ uq~ppppppptlabelq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq*Þsq~ uq~ppppppptsetLabelq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t# this.label = label; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq*Þsq~ uq~ppppptŸ/** * The property which supplies the value returned to the server. */ /** * The property which supplies the value returned to the server. */ /** * The property which supplies the value returned to the server. */ /** * The property which supplies the value returned to the server. */ /** * The property which supplies the value returned to the server. */ ptvalueq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~%Zxppppq~$q~$q~$xsq~isq~ uq~ppppq*Þsq~ uq~ppppppptgetValueq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t" return this.value; sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq+Psq~ uq~ppppppptvalueq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq*Þsq~ uq~ppppppptsetValueq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t# this.value = value; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq*Þsq~ uq~pppppt‘// --------------------------------------------------------- Public Methods /** * Return a string representation of this object. */ pttoStringq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tÚ StringBuffer sb = new StringBuffer("LabelValueBean["); sb.append(this.label); sb.append(", "); sb.append(this.value); sb.append("]"); return (sb.toString()); sq~ uq~ppppq~$q~$xsq~esq~ uq~sq~bsq~ uq~ppppq+wsq~ uq~ppppppptlabelq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq+wsq~ uq~ppppppptvalueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xppq*Þsq~ uq~pppppt// ----------------------------------------------------------- Constructors /** * Construct an instance with the supplied property values. * * @param label The label to be displayed to the user. * @param value The value to be returned to the server. */ pq*÷q~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t@ this.label = label; this.value = value; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq*Þsq~ uq~ppppppptgetLabelq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t" return this.label; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq+¥sq~ uq~ppppppptlabelq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq*Þsq~ uq~ppppppptsetLabelq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t# this.label = label; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq*Þsq~ uq~ppppppptgetValueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t" return this.value; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq+Ësq~ uq~ppppppptvalueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq*Þsq~ uq~ppppppptsetValueq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t# this.value = value; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq*Þsq~ uq~pppppt‘// --------------------------------------------------------- Public Methods /** * Return a string representation of this object. */ pttoStringq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tÚ StringBuffer sb = new StringBuffer("LabelValueBean["); sb.append(this.label); sb.append(", "); sb.append(this.value); sb.append("]"); return (sb.toString()); sq~ uq~ppppq~¥q~¥xsq~esq~ uq~sq~bsq~ uq~ppppq+òsq~ uq~ppppppptlabelq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq+òsq~ uq~ppppppptvalueq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xppq*Þsq~ uq~pppppt// ----------------------------------------------------------- Constructors /** * Construct an instance with the supplied property values. * * @param label The label to be displayed to the user. * @param value The value to be returned to the server. */ pq*÷q~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t@ this.label = label; this.value = value; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq*Þsq~ uq~ppppppptgetLabelq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t" return this.label; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq, sq~ uq~ppppppptlabelq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq*Þsq~ uq~ppppppptsetLabelq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t# this.label = label; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq*Þsq~ uq~ppppppptgetValueq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t" return this.value; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq,Fsq~ uq~ppppppptvalueq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq*Þsq~ uq~ppppppptsetValueq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t# this.value = value; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq*Þsq~ uq~pppppt‘// --------------------------------------------------------- Public Methods /** * Return a string representation of this object. */ pttoStringq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tÚ StringBuffer sb = new StringBuffer("LabelValueBean["); sb.append(this.label); sb.append(", "); sb.append(this.value); sb.append("]"); return (sb.toString()); sq~ uq~ppppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppq,msq~ uq~ppppppptlabelq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq,msq~ uq~ppppppptvalueq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xppq*Þsq~ uq~pppppt// ----------------------------------------------------------- Constructors /** * Construct an instance with the supplied property values. * * @param label The label to be displayed to the user. * @param value The value to be returned to the server. */ pq*÷q~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t@ this.label = label; this.value = value; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq*Þsq~ uq~ppppppptgetLabelq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t" return this.label; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq,›sq~ uq~ppppppptlabelq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq*Þsq~ uq~ppppppptsetLabelq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t# this.label = label; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq*Þsq~ uq~ppppppptgetValueq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t" return this.value; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq,Ásq~ uq~ppppppptvalueq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq*Þsq~ uq~ppppppptsetValueq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t# this.value = value; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq*Þsq~ uq~pppppt‘// --------------------------------------------------------- Public Methods /** * Return a string representation of this object. */ pttoStringq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tÚ StringBuffer sb = new StringBuffer("LabelValueBean["); sb.append(this.label); sb.append(", "); sb.append(this.value); sb.append("]"); return (sb.toString()); sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq,èsq~ uq~ppppppptlabelq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq,èsq~ uq~ppppppptvalueq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxppq*Þsq~ uq~pppppt// ----------------------------------------------------------- Constructors /** * Construct an instance with the supplied property values. * * @param label The label to be displayed to the user. * @param value The value to be returned to the server. */ pq*÷q~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft@ this.label = label; this.value = value; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq*Þsq~ uq~ppppppptgetLabelq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft" return this.label; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq-sq~ uq~ppppppptlabelq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq*Þsq~ uq~ppppppptsetLabelq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft# this.label = label; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq*Þsq~ uq~ppppppptgetValueq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft" return this.value; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq-. * *//** * A simple JavaBean to represent label-value pairs. This is most commonly used * when constructing user interface elements which have a label to be displayed * to the user, and a corresponding value to be returned to the server. One * example is the <html:options> tag. * * @author Craig R. McClanahan * @author Martin F N Cooper * @version $Revision: 1.2 $ $Date: 2002/03/12 06:30:56 $ */ ptLabelValueBean.javaq~fxsq~ uq~ppppsq~ uq~q*Þpppq~fxsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxq~GÉq~H¢q‡áqqøq+q"q#q# qzqqq~GÀq~H«sq~)sq~ uq~ppppq~G¶sq~ uq~ppppq~rsq~ uq~ppppsq~ uq~ppppsq~Bddpxsq~zsq~ uq~sq~esq~ uq~ppppq-†sq~ uq~pppppt”// ----------------------------------------------------------- Constructors /** * Construct an instance with empty property values. */ ptImageButtonBeanq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t sq~ uq~ppppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppq-™sq~ uq~ppppppptxq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq-™sq~ uq~ppppppptyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xppq-†sq~ uq~ppppptÄ/** * Construct an instance with the supplied property values. * * @param x The X coordinate of the button press. * @param y The Y coordinate of the button press. */ pq-q~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t0 this.x = x; this.y = y; sq~ uq~ppppq~–q~–xsq~(sq~ uq~ppppq-†sq~ uq~pppppt˜// ------------------------------------------------------------- Properties /** * The X coordinate of the button press. */ // ------------------------------------------------------------- Properties /** * The X coordinate of the button press. */ // ------------------------------------------------------------- Properties /** * The X coordinate of the button press. */ ptxq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~'bxppppq~–q~–q~–xsq~isq~ uq~ppppq-†sq~ uq~ppppppptgetXq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return (this.x); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq-Ôsq~ uq~ppppppptxq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq-†sq~ uq~ppppppptsetXq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t this.x = x; sq~ uq~ppppq~–q~–xsq~(sq~ uq~ppppq-†sq~ uq~pppppt±/** * The Y coordinate of the button press. */ /** * The Y coordinate of the button press. */ /** * The Y coordinate of the button press. */ ptyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~'bxppppq~–q~–q~–xsq~isq~ uq~ppppq-†sq~ uq~ppppppptgetYq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t! return (this.y); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq.sq~ uq~ppppppptyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq-†sq~ uq~ppppppptsetYq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t this.y = y; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq-†sq~ uq~ppppptÉ// --------------------------------------------------------- Public Methods /** * A convenience method to determine whether or not the corresponding image * element was selected. */ pt isSelectedq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t4 return ((x != null) || (y != null)); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq-†sq~ uq~ppppptD/** * Return a string representation of this object. */ pttoStringq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tÓ StringBuffer sb = new StringBuffer("ImageButtonBean["); sb.append(this.x); sb.append(", "); sb.append(this.y); sb.append("]"); return (sb.toString()); sq~ uq~ppppq~–q~–xsq~esq~ uq~ppppq-†sq~ uq~pppppt”// ----------------------------------------------------------- Constructors /** * Construct an instance with empty property values. */ pq-q~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq.Msq~ uq~ppppppptxq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq.Msq~ uq~ppppppptyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xppq-†sq~ uq~ppppptÄ/** * Construct an instance with the supplied property values. * * @param x The X coordinate of the button press. * @param y The Y coordinate of the button press. */ pq-q~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t0 this.x = x; this.y = y; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq-†sq~ uq~ppppppptgetXq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t return (this.x); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq.{sq~ uq~ppppppptxq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq-†sq~ uq~ppppppptsetXq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t this.x = x; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq-†sq~ uq~ppppppptgetYq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t! return (this.y); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq.¡sq~ uq~ppppppptyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq-†sq~ uq~ppppppptsetYq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t this.y = y; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq-†sq~ uq~ppppptÉ// --------------------------------------------------------- Public Methods /** * A convenience method to determine whether or not the corresponding image * element was selected. */ pt isSelectedq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t4 return ((x != null) || (y != null)); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq-†sq~ uq~ppppptD/** * Return a string representation of this object. */ pttoStringq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tÓ StringBuffer sb = new StringBuffer("ImageButtonBean["); sb.append(this.x); sb.append(", "); sb.append(this.y); sb.append("]"); return (sb.toString()); sq~ uq~ppppq~~q~~xsq~esq~ uq~ppppq-†sq~ uq~pppppt”// ----------------------------------------------------------- Constructors /** * Construct an instance with empty property values. */ pq-q~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft sq~ uq~ppppq~fq~fxsq~esq~ uq~sq~bsq~ uq~ppppq.çsq~ uq~ppppppptxq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq.çsq~ uq~ppppppptyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxppq-†sq~ uq~ppppptÄ/** * Construct an instance with the supplied property values. * * @param x The X coordinate of the button press. * @param y The Y coordinate of the button press. */ pq-q~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft0 this.x = x; this.y = y; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq-†sq~ uq~ppppppptgetXq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft return (this.x); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq/sq~ uq~ppppppptxq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq-†sq~ uq~ppppppptsetXq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft this.x = x; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq-†sq~ uq~ppppppptgetYq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft! return (this.y); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq/;sq~ uq~ppppppptyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq-†sq~ uq~ppppppptsetYq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft this.y = y; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq-†sq~ uq~ppppptÉ// --------------------------------------------------------- Public Methods /** * A convenience method to determine whether or not the corresponding image * element was selected. */ pt isSelectedq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft4 return ((x != null) || (y != null)); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq-†sq~ uq~ppppptD/** * Return a string representation of this object. */ pttoStringq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftÓ StringBuffer sb = new StringBuffer("ImageButtonBean["); sb.append(this.x); sb.append(", "); sb.append(this.y); sb.append("]"); return (sb.toString()); sq~ uq~ppppq~fq~fxpppq~,sq~ uq~pppppppq-q~rxsq~ uq~ppppq~–sq~ uq~q-|pppsq~ uq~ppppq~–q~–sq~Qsq~ uq~ppppq~,sq~ uq~pppppt r/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/util/ImageButtonBean.java,v 1.2 2002/09/14 21:22:08 martinc Exp $ * $Revision: 1.2 $ * $Date: 2002/09/14 21:22:08 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * A simple JavaBean to encapsulate the request parameters sent for an HTML * input element of type image. Such an element causes two parameters to be * sent, one each for the X and Y coordinates of the button press. An instance * of this bean within an ActionForm can be used to capture these * and provide a simple means of detecting whether or not the corresponding * image was selected. * * @author Ted Husted * @author Martin F N Cooper * @version $Revision: 1.2 $ $Date: 2002/09/14 21:22:08 $ */ ptImageButtonBean.javaq~fxsq~ uq~ppppsq~ uq~q-†pppq~fxsq~ uq~pppppq~–sq~ uq~ppppsq~ uq~ppppq~¢xq~–ppxsrsroo.db.DbImageGo&bùns$Fn_opacityFactorLm_diagramImageq~¤7Lm_opacityFactortLjava/lang/Float;xq~*sq~ uq~ppppq~G¶sq~ uq~ppppq~rsq~ uq~ppppsq~ uq~ppppsq~Bdhpx?€sq~¤Bduq~4×;Äÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿsrjava.lang.FloatÚíÉ¢Û<ðìFvaluexq~1?€xq##q~…q#q#*pppppq~ sq~ uq~pppp. * *//** * This class functions as a wrapper around HttpServletRequest to * provide working getParameter methods for multipart requests. Once * Struts requires Servlet 2.3, this class will definately be changed to * extend javax.servlet.http.HttpServletRequestWrapper instead of * implementing HttpServletRequest. Servlet 2.3 methods are implemented * to return null or do nothing if called on. Use * {@link #getRequest() getRequest} to retrieve the underlying HttpServletRequest * object and call on the 2.3 method there, the empty methods are here only * so that this will compile with the Servlet 2.3 jar. This class exists temporarily * in the process() method of ActionServlet, just before the ActionForward is processed * and just after the Action is performed, the request is set back to the original * HttpServletRequest object. */ ptMultipartRequestWrapper.javaq~fxsq~ uq~ppppsq~ uq~q~ÊHpppq~fxsq~ uq~ppppsq~#q~EÊxsq~Csq~ uq~ppppq~)øsq~ uq~ppppsq~#q~EÊxpppppq~$sq~ uq~q~PBpppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~8sq~ uq~ppppppptCollections.javaq~$xsq~ uq~ppppsq~ uq~q~EÊpppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxxq~Pnsq~Csq~ uq~ppppq~Eµsq~ uq~ppppsq~#q~öxq~E²sq~Csq~ uq~ppppq~Eµsq~ uq~ppppsq~#q~5xsq~Csq~ uq~ppppq~Eµsq~ uq~ppppsq~#q~¼xsq~Csq~ uq~ppppq~Eµsq~ uq~ppppsq~#q~xq€ê†sq~Csq~ uq~ppppq~Eµsq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq~Eµsq~ uq~ppppsq~#q~%xqšq~Qq~Q8q~}Bq0qLsq~Csq~ uq~ppppq~Eµsq~ uq~ppppsq~#q~#xsq~Csq~ uq~ppppq~Eµsq~ uq~ppppsq~#q~ºxsq~Csq~ uq~ppppq~Eµsq~ uq~ppppsq~#q~-xsq~Csq~ uq~ppppq~Eµsq~ uq~ppppsq~#q~%9xq“Àq ›q~$Isq~ uq~pppppt ™/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/JavascriptValidatorTag.java,v 1.27 2003/05/18 22:26:08 rleland Exp $ * $Revision: 1.27 $ * $Date: 2003/05/18 22:26:08 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . *//** * Custom tag that generates JavaScript for client side validation based * on the validation rules loaded by the ValidatorPlugIn * defined in the struts-config.xml file. * * @author David Winterfeldt * @version $Revision: 1.27 $ $Date: 2003/05/18 22:26:08 $ * @since Struts 1.1 */ ptJavascriptValidatorTag.javaq~fxsq~ uq~ppppsq~ uq~q~{”pppq~fxsq~ uq~ppppsq~#q~Ežxq~E˜sq~Csq~ uq~ppppsq~Qsq~ uq~q0\sq~Csq~ uq~ppppq0_sq~ uq~ppppsq~#q~xppq~![sq~ uq~pppppt b/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/tiles/xmlDefinition/XmlListAttribute.java,v 1.2 2003/02/27 19:19:42 cedric Exp $ * $Revision: 1.2 $ * $Date: 2003/02/27 19:19:42 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * An attribute as a List. * This attribute associates a name with a list. The list can be found by the * property name. * Elements in list are retrieved using List methods. * This class is used to read configuration files. */ ptXmlListAttribute.javaq~fxsq~ uq~ppppsq~ uq~sq~zsq~ uq~sq~(sq~ uq~ppppq0psq~ uq~ppppptÔ/** List. * We declare a list, to avoid cast. * Parent "value" property point to the same list. */ /** List. * We declare a list, to avoid cast. * Parent "value" property point to the same list. */ /** List. * We declare a List to avoid cast. * Parent "value" property points to the same list. */ /** List. * We declare a List to avoid cast. * Parent "value" property points to the same list. */ ptlistq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Ežpq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~xppppq~¥q~¥q~¥xsq~esq~ uq~ppppq0psq~ uq~pppppt"/** * Constructor. */ ptXmlListAttributeq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t8 list = new ArrayList(); setValue(list); sq~ uq~ppppq~¥q~¥xsq~esq~ uq~sq~bsq~ uq~ppppq0sq~ uq~ppppppptnameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq0sq~ uq~ppppppptvalueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Ežpq~§xppq0psq~ uq~pppppt"/** * Constructor. */ pq0†q~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t4 super( name, value ); list = value; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq0¯sq~ uq~ppppppptelementq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xpppq0psq~ uq~pppppth/** * Add an element in list. * We use a Property, to avoid rewriting a new class. */ ptaddq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t+ list.add( element.getValue() ); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq0Çsq~ uq~ppppppptvalueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xpppq0psq~ uq~pppppt-/** * Add an element in list. */ ptaddq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tC //list.add( value ); // To correct a bug in digester, we need to check the object type // Digester doesn't call correct method according to object type ;-( if(value instanceof XmlAttribute) { add((XmlAttribute)value); return; } else list.add( value ); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq0ßsq~ uq~ppppppptvalueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xpppq0psq~ uq~pppppt-/** * Add an element in list. */ pt addObjectq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t list.add( value ); sq~ uq~ppppq~¥q~¥xsq~esq~ uq~ppppq0psq~ uq~pppppt"/** * Constructor. */ pq0†q~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t8 list = new ArrayList(); setValue(list); sq~ uq~ppppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppq1sq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq1sq~ uq~ppppppptvalueq~rxsq~ uq~pppppq~–q~—q~–q~Ežpq~˜xppq0psq~ uq~pppppt"/** * Constructor. */ pq0†q~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t4 super( name, value ); list = value; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq1%sq~ uq~ppppppptelementq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xpppq0psq~ uq~pppppth/** * Add an element in list. * We use a Property, to avoid rewriting a new class. */ ptaddq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t+ list.add( element.getValue() ); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq1=sq~ uq~ppppppptvalueq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xpppq0psq~ uq~pppppt-/** * Add an element in list. */ ptaddq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tC //list.add( value ); // To correct a bug in digester, we need to check the object type // Digester doesn't call correct method according to object type ;-( if(value instanceof XmlAttribute) { add((XmlAttribute)value); return; } else list.add( value ); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq1Usq~ uq~ppppppptvalueq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xpppq0psq~ uq~pppppt-/** * Add an element in list. */ pt addObjectq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t list.add( value ); sq~ uq~ppppq~–q~–xsq~esq~ uq~ppppq0psq~ uq~pppppt"/** * Constructor. */ pq0†q~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t8 list = new ArrayList(); setValue(list); sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq1|sq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq1|sq~ uq~ppppppptvalueq~{xsq~ uq~pppppq~~q~q~~q~Ežpq~€xppq0psq~ uq~ppppptW/** * Constructor. * @param name Name. * @param value List. */ pq0†q~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t4 super( name, value ); list = value; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq1›sq~ uq~ppppppptelementq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xpppq0psq~ uq~pppppt“/** * Add an element in list. * We use a property to avoid rewriting a new class. * @param element XmlAttribute to add. */ ptaddq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t+ list.add( element.getValue() ); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq1³sq~ uq~ppppppptvalueq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xpppq0psq~ uq~ppppptQ/** * Add an element in list. * @param value Object to add. */ ptaddq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tC //list.add( value ); // To correct a bug in digester, we need to check the object type // Digester doesn't call correct method according to object type ;-( if(value instanceof XmlAttribute) { add((XmlAttribute)value); return; } else list.add( value ); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq1Ësq~ uq~ppppppptvalueq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xpppq0psq~ uq~ppppptQ/** * Add an element in list. * @param value Object to add. */ pt addObjectq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t list.add( value ); sq~ uq~ppppq~~q~~xsq~esq~ uq~ppppq0psq~ uq~pppppt"/** * Constructor. */ pq0†q~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft8 list = new ArrayList(); setValue(list); sq~ uq~ppppq~fq~fxsq~esq~ uq~sq~bsq~ uq~ppppq1òsq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq1òsq~ uq~ppppppptvalueq~cxsq~ uq~pppppq~fq~gq~fq~Ežpq~hxppq0psq~ uq~ppppptW/** * Constructor. * @param name Name. * @param value List. */ pq0†q~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft4 super( name, value ); list = value; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq2sq~ uq~ppppppptelementq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxpppq0psq~ uq~pppppt“/** * Add an element in list. * We use a property to avoid rewriting a new class. * @param element XmlAttribute to add. */ ptaddq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft+ list.add( element.getValue() ); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq2)sq~ uq~ppppppptvalueq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxpppq0psq~ uq~ppppptQ/** * Add an element in list. * @param value Object to add. */ ptaddq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftC //list.add( value ); // To correct a bug in digester, we need to check the object type // Digester doesn't call correct method according to object type ;-( if(value instanceof XmlAttribute) { add((XmlAttribute)value); return; } else list.add( value ); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq2Asq~ uq~ppppppptvalueq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxpppq0psq~ uq~ppppptQ/** * Add an element in list. * @param value Object to add. */ pt addObjectq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft list.add( value ); sq~ uq~ppppq~fq~fxpppq~![sq~ uq~pppppppq0†q~¢xsq~ uq~ppppq~¥sq~ uq~sq~)sq~ uq~ppppq~4£sq~ uq~ppppq~¥sq~ uq~ppppsq~ uq~sq~$úsq~ uq~ppppq~4£sq~ uq~ppppq~¢sq~ uq~ppppsq~ uq~ppppppxsq~)sq~ uq~ppppq~4£sq~ uq~ppppq~¥sq~ uq~q2hpppsq~ uq~ppppsq~Bddðqpxq~ q2_psq~4Ôuq~4×""uq~4×£q~¥xpppsq~BddðMpxq0ppppsq~ uq~q~ pppq~¥q~¢q0_sq~ uq~pppppq~¥sq~ uq~ppppsq~ uq~ppppq~»xq~¥ppxpppq~fxsq~ uq~ppppsq~#q~Ežxsq~Csq~ uq~ppppq~sq~ uq~ppppsq~#q~Ežxq €ppppppq~$sq~ uq~q~Pˆpppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~8sq~ uq~pppppppt List.javaq~$xsq~ uq~ppppsq~ uq~q~Ežpppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ #uq~'sq~(sq~ uq~ppppsq~zsq~ uq~ q2¤sq~(sq~ uq~ppppq2§sq~ uq~pppppt@/** * The position in the list of messages. */ ptiOrderq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt 0q~$q~$q~$xsq~esq~ uq~sq~bsq~ uq~ppppq2¸sq~ uq~ppppppptlistq~=xsq~ uq~pppppq~$q~yq~$q~Ežpq~$xsq~bsq~ uq~ppppq2¸sq~ uq~ppppppptiOrderq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xppq2§sq~ uq~ppppppptActionMessageItemq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tG this.list = list; this.iOrder = iOrder; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq2§sq~ uq~ppppppptgetListq~=xsq~ uq~pppppq~$q~yq~$q~Ežpq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t! return list; sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq2æsq~ uq~ppppppptlistq~=xsq~ uq~pppppq~$q~yq~$q~Ežpq~$xpppq2§sq~ uq~ppppppptsetListq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t& this.list = list; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq2§sq~ uq~ppppppptgetOrderq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t# return iOrder; sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq3 sq~ uq~ppppppptiOrderq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xpppq2§sq~ uq~ppppppptsetOrderq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t* this.iOrder = iOrder; sq~ uq~ppppq~$q~$xppq~Isq~ uq~pppppppq2Íq~=xsq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppq~$q~$psq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~;xq~$ppxsq~ uq~ppppptÝ/** * This class is used to store a set of messages associated with a * property/key and the position it was initially added to list. */ /** * The list of ActionMessages. */ ptlistq~=xsq~ uq~pppppq~$q~yq~$q~Ežpq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xq2»q2×q2éq~Ásq~(sq~ uq~ppppsq~zsq~ uq~ q3ActionMessages. */ ptlistq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Ežpq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xpppt nullq~¥q~¥q~¥xq3Sq3oq3qÝðqÞŒsq~(sq~ uq~ppppq~!^sq~ uq~ppppptä/** Names of files containing instances descriptions. */ /** Names of files containing instances descriptions. */ /** Names of files containing instances descriptions. */ /** Names of files containing instances descriptions. */ pt filenamesq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Ežpq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~xppppq~¥q~¥q~¥xq0sq0›sq~(sq~ uq~ppppsq~zsq~ uq~ q3ásq~(sq~ uq~ppppq3äsq~ uq~pppppt6/** * The position in the list of messages. */ ptiOrderq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xpppt 0q~–q~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppq3õsq~ uq~ppppppptlistq~rxsq~ uq~pppppq~–q~—q~–q~Ežpq~˜xsq~bsq~ uq~ppppq3õsq~ uq~ppppppptiOrderq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xppq3äsq~ uq~ppppppptActionMessageItemq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t4 this.list = list; this.iOrder = iOrder; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq3äsq~ uq~ppppppptgetListq~rxsq~ uq~pppppq~–q~—q~–q~Ežpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return list; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq4#sq~ uq~ppppppptlistq~rxsq~ uq~pppppq~–q~—q~–q~Ežpq~˜xpppq3äsq~ uq~ppppppptsetListq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t this.list = list; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq3äsq~ uq~ppppppptgetOrderq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return iOrder; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq4Isq~ uq~ppppppptiOrderq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xpppq3äsq~ uq~ppppppptsetOrderq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t this.iOrder = iOrder; sq~ uq~ppppq~–q~–xppq~Isq~ uq~pppppppq4 q~rxsq~ uq~ppppq~–sq~ uq~ppppsq~ uq~ppppq~–q~–psq~ uq~pppppq~–sq~ uq~ppppsq~ uq~ppppq~ xq~–ppxsq~ uq~ppppptÊ/** * This class is used to store a set of messages associated with a * property/key and the position it was initially added to list. */ /** * The list of ActionMessages. */ ptlistq~rxsq~ uq~pppppq~–q~—q~–q~Ežpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xpppt nullq~–q~–q~–xq3øq4q4&qïÕq1sq~isq~ uq~sq~bsq~ uq~ppppq4ysq~ uq~ppppppptbaseNameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq4ysq~ uq~ppppppptlocaleq~rxsq~ uq~pppppq~–q~—q~–q~5pq~˜xppq~!^sq~ uq~pppppt/** * Calculate the postixes along the search path from the base bundle to the * bundle specified by baseName and locale. * Method copied from java.util.ResourceBundle * @param baseName the base bundle name * @param locale the locale */ ptcalculatePostixesq~rxsq~ uq~pppppq~–q~—q~–q~Ežpq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~'bxq~–t final List result = new ArrayList(MAX_BUNDLES_SEARCHED); final String language = locale.getLanguage(); final int languageLength = language.length(); final String country = locale.getCountry(); final int countryLength = country.length(); if (languageLength + countryLength == 0) { //The locale is "", "", "". return result; } final StringBuffer temp = new StringBuffer(baseName); temp.append('_'); temp.append(language); result.add(temp.toString()); if (countryLength == 0) { return result; } temp.append('_'); temp.append(country); result.add(temp.toString()); return result; sq~ uq~ppppq~–q~–xsq~(sq~ uq~ppppsq~zsq~ uq~ q4šsq~(sq~ uq~ppppq4sq~ uq~ppppptB/** * The position in the list of messages. */ ptiOrderq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xpppt 0q~~q~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq4®sq~ uq~ppppppptlistq~{xsq~ uq~pppppq~~q~q~~q~Ežpq~€xsq~bsq~ uq~ppppq4®sq~ uq~ppppppptiOrderq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xppq4sq~ uq~ppppppptActionMessageItemq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tL this.list = list; this.iOrder = iOrder; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq4sq~ uq~ppppppptgetListq~{xsq~ uq~pppppq~~q~q~~q~Ežpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t$ return list; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq4Üsq~ uq~ppppppptlistq~{xsq~ uq~pppppq~~q~q~~q~Ežpq~€xpppq4sq~ uq~ppppppptsetListq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t) this.list = list; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq4sq~ uq~ppppppptgetOrderq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t& return iOrder; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq5sq~ uq~ppppppptiOrderq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xpppq4sq~ uq~ppppppptsetOrderq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t- this.iOrder = iOrder; sq~ uq~ppppq~~q~~xppq~Isq~ uq~pppppppq4Ãq~{xsq~ uq~ppppq~~sq~ uq~ppppsq~ uq~ppppq~~q~~psq~ uq~pppppq~~sq~ uq~ppppsq~ uq~ppppq~ xq~~ppxsq~ uq~ppppptß/** * This class is used to store a set of messages associated with a * property/key and the position it was initially added to list. */ /** * The list of ActionMessages. */ ptlistq~{xsq~ uq~pppppq~~q~q~~q~Ežpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xpppt nullq~~q~~q~~xq4±q4Íq4ßqðœq1‡sq~isq~ uq~sq~bsq~ uq~ppppq52sq~ uq~ppppppptbaseNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq52sq~ uq~ppppppptlocaleq~{xsq~ uq~pppppq~~q~q~~q~5pq~€xppq~!^sq~ uq~pppppt/** * Calculate the postixes along the search path from the base bundle to the * bundle specified by baseName and locale. * Method copied from java.util.ResourceBundle * @param baseName the base bundle name * @param locale the locale */ ptcalculatePostixesq~{xsq~ uq~pppppq~~q~q~~q~Ežpq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~d1xq~~t¡ final List result = new ArrayList(MAX_BUNDLES_SEARCHED); final String language = locale.getLanguage(); final int languageLength = language.length(); final String country = locale.getCountry(); final int countryLength = country.length(); final String variant = locale.getVariant(); final int variantLength = variant.length(); if (languageLength + countryLength + variantLength == 0) { //The locale is "", "", "". return result; } final StringBuffer temp = new StringBuffer(baseName); temp.append('_'); temp.append(language); if(languageLength > 0) result.add(temp.toString()); if (countryLength + variantLength == 0) return result; temp.append('_'); temp.append(country); if(countryLength > 0) result.add(temp.toString()); if(variantLength == 0) { return result; } else { temp.append('_'); temp.append(variant); result.add(temp.toString()); return result; } sq~ uq~ppppq~~q~~xsq~(sq~ uq~ppppsq~zsq~ uq~ q5Ssq~(sq~ uq~ppppq5Vsq~ uq~ppppptB/** * The position in the list of messages. */ ptiOrderq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxpppt 0q~fq~fq~fxsq~esq~ uq~sq~bsq~ uq~ppppq5gsq~ uq~ppppppptlistq~cxsq~ uq~pppppq~fq~gq~fq~Ežpq~hxsq~bsq~ uq~ppppq5gsq~ uq~ppppppptiOrderq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxppq5Vsq~ uq~ppppppptActionMessageItemq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftL this.list = list; this.iOrder = iOrder; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq5Vsq~ uq~ppppppptgetListq~cxsq~ uq~pppppq~fq~gq~fq~Ežpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft$ return list; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq5•sq~ uq~ppppppptlistq~cxsq~ uq~pppppq~fq~gq~fq~Ežpq~hxpppq5Vsq~ uq~ppppppptsetListq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft) this.list = list; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq5Vsq~ uq~ppppppptgetOrderq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft& return iOrder; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq5»sq~ uq~ppppppptiOrderq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxpppq5Vsq~ uq~ppppppptsetOrderq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft- this.iOrder = iOrder; sq~ uq~ppppq~fq~fxppq~Isq~ uq~pppppppq5|q~cxsq~ uq~ppppq~fsq~ uq~ppppsq~ uq~ppppq~fq~fpsq~ uq~pppppq~fsq~ uq~ppppsq~ uq~ppppq~!Wxq~fppxsq~ uq~ppppptß/** * This class is used to store a set of messages associated with a * property/key and the position it was initially added to list. */ /** * The list of ActionMessages. */ ptlistq~cxsq~ uq~pppppq~fq~gq~fq~Ežpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxpppt nullq~fq~fq~fxq5jq5†q5˜qñcq1ýsq~isq~ uq~sq~bsq~ uq~ppppq5ësq~ uq~ppppppptbaseNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq5ësq~ uq~ppppppptlocaleq~cxsq~ uq~pppppq~fq~gq~fq~5pq~hxppq~!^sq~ uq~pppppt/** * Calculate the postixes along the search path from the base bundle to the * bundle specified by baseName and locale. * Method copied from java.util.ResourceBundle * @param baseName the base bundle name * @param locale the locale */ ptcalculatePostixesq~cxsq~ uq~pppppq~fq~gq~fq~Ežpq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~·gxq~ft¡ final List result = new ArrayList(MAX_BUNDLES_SEARCHED); final String language = locale.getLanguage(); final int languageLength = language.length(); final String country = locale.getCountry(); final int countryLength = country.length(); final String variant = locale.getVariant(); final int variantLength = variant.length(); if (languageLength + countryLength + variantLength == 0) { //The locale is "", "", "". return result; } final StringBuffer temp = new StringBuffer(baseName); temp.append('_'); temp.append(language); if(languageLength > 0) result.add(temp.toString()); if (countryLength + variantLength == 0) return result; temp.append('_'); temp.append(country); if(countryLength > 0) result.add(temp.toString()); if(variantLength == 0) { return result; } else { temp.append('_'); temp.append(variant); result.add(temp.toString()); return result; } sq~ uq~ppppq~fq~fxppppq~Äxq~$ppxxsq~Csq~ uq~ppppq~Esq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq~Esq~ uq~ppppsq~#q~–xq~EŒsq~Csq~ uq~ppppq~Esq~ uq~ppppsq~#q~Drxpppq~:Ísq~ uq~pppppt ƒ/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/tiles/PutListTag.java,v 1.4 2003/02/27 19:18:55 cedric Exp $ * $Revision: 1.4 $ * $Date: 2003/02/27 19:18:55 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * PutList tag implementation. */ ptPutListTag.javaq~fxsq~ uq~ppppsq~ uq~qÝßpppq~fxsq~ uq~ppppsq~#q~Dóxqôþqìyppppppq~¥sq~ uq~sq~)sq~ uq~ppppq~CÝsq~ uq~ppppq~%sq~ uq~sq~$úsq~ uq~ppppq~CÝsq~ uq~ppppq~¢sq~ uq~ppppsq~ uq~ppppppxq6+q~Côpsq~4Ôuq~4×ÈÈuq~4×oq~¥xpppsq~ uq~ppppsq~B$ƒ‡öpxq~Dópppsq~ uq~ppppq~¥q~¥sq~Qsq~ uq~ppppq~sq~ uq~pppppt §/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/tiles/AttributeDefinition.java,v 1.2 2002/11/16 04:03:42 jmitchell Exp $ * $Revision: 1.2 $ * $Date: 2002/11/16 04:03:42 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Attribute definition used in a component definition. * */ ptAttributeDefinition.javaq~fxsq~ uq~ppppsq~ uq~q~Dópppq~fxsq~ uq~q~Drppppq~¥sq~ uq~ppppsq~ uq~ppppq~»xsq~ uq~pppppt)/** * Set role attribute. */ ptsetRoleq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~q~DÕpppq~¥q~»xq~¥psq~ uq~ppppq~¥q~¥xpppsq~ uq~ppppq~¥q~»xq~¥t this.role = role; sq~ uq~ppppq~¥q~¥xq~Esq~isq~ uq~sq~bsq~ uq~ppppq6esq~ uq~ppppppptvalueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xpppq~Drsq~ uq~pppppt/** * Set value. */ ptsetValueq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t this.value = value; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~Drsq~ uq~pppppt?/** * Get String representation of this object. */ pttoStringq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t$ return value.toString(); sq~ uq~ppppq~¥q~¥xsq~esq~ uq~sq~bsq~ uq~ppppq6sq~ uq~ppppppptvalueq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xpppq~Drsq~ uq~pppppt"/** * Constructor. */ pq~Dœq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t this.value = value; sq~ uq~ppppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppq6¤sq~ uq~ppppppptvalueq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~bsq~ uq~ppppq6¤sq~ uq~ppppppptroleq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xppq~Drsq~ uq~pppppt"/** * Constructor. */ pq~Dœq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t6 this.value = value; this.role = role; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~Drsq~ uq~pppppt/** * Get role. */ ptgetRoleq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return role; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq6Ósq~ uq~ppppppptroleq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~Drsq~ uq~pppppt/** * Set role. */ ptsetRoleq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t this.role = role; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~Drsq~ uq~pppppt/** * Get value. */ ptgetValueq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return value; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq6ûsq~ uq~ppppppptvalueq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xpppq~Drsq~ uq~pppppt/** * Set value. */ ptsetValueq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t this.value = value; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~Drsq~ uq~pppppt?/** * Get String representation of this object. */ pttoStringq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t$ return value.toString(); sq~ uq~ppppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppq7#sq~ uq~ppppppptvalueq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xpppq~Drsq~ uq~ppppptH/** * Constructor. * @param value Object to store. */ pq~Dœq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t this.value = value; sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq7:sq~ uq~ppppppptvalueq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~bsq~ uq~ppppq7:sq~ uq~ppppppptroleq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xppq~Drsq~ uq~ppppptl/** * Constructor. * @param value Object to store. * @param role Asociated role. */ pq~Dœq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t6 this.value = value; this.role = role; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~Drsq~ uq~pppppt/** * Get role. */ ptgetRoleq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t return role; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq7isq~ uq~ppppppptroleq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~Drsq~ uq~ppppptD/** * Set role. * @param role Associated role. */ ptsetRoleq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t this.role = role; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~Drsq~ uq~pppppt/** * Get value. */ ptgetValueq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t return value; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq7‘sq~ uq~ppppppptvalueq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xpppq~Drsq~ uq~pppppt:/** * Set value. * @param value New value. */ ptsetValueq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t this.value = value; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~Drsq~ uq~pppppt?/** * Get String representation of this object. */ pttoStringq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t$ return value.toString(); sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq7¹sq~ uq~ppppppptvalueq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxpppq~Drsq~ uq~ppppptH/** * Constructor. * @param value Object to store. */ pq~Dœq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft this.value = value; sq~ uq~ppppq~fq~fxsq~esq~ uq~sq~bsq~ uq~ppppq7Ðsq~ uq~ppppppptvalueq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~bsq~ uq~ppppq7Ðsq~ uq~ppppppptroleq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxppq~Drsq~ uq~ppppptl/** * Constructor. * @param value Object to store. * @param role Asociated role. */ pq~Dœq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft6 this.value = value; this.role = role; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~Drsq~ uq~pppppt/** * Get role. */ ptgetRoleq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft return role; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq7ÿsq~ uq~ppppppptroleq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~Drsq~ uq~ppppptD/** * Set role. * @param role Associated role. */ ptsetRoleq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft this.role = role; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~Drsq~ uq~pppppt/** * Get value. */ ptgetValueq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft return value; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq8'sq~ uq~ppppppptvalueq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxpppq~Drsq~ uq~pppppt:/** * Set value. * @param value New value. */ ptsetValueq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft this.value = value; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~Drsq~ uq~pppppt?/** * Get String representation of this object. */ pttoStringq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft$ return value.toString(); sq~ uq~ppppq~fq~fxppppq~sq~ uq~pppppppq~Dœq~¢xsq~ uq~ q6qõ qî™ppppppq~¥sq~ uq~q~Côpppsq~ uq~q~Dópppq~¥q~¥sq~Qsq~ uq~ppppq~sq~ uq~pppppt “/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/tiles/UntyppedAttribute.java,v 1.2 2003/02/27 19:20:50 cedric Exp $ * $Revision: 1.2 $ * $Date: 2003/02/27 19:20:50 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Common implementation of attribute definition. */ ptUntyppedAttribute.javaq~fxsq~ uq~ppppsq~ uq~q~Drpppq~fxsq~ uq~q~Dqì…qíqqîpq~¥sq~ uq~ppppsq~ uq~ppppq~»xq~¥ppxpppq~¥q~¥sq~Qsq~ uq~ppppq~sq~ uq~pppppt Ú/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/tiles/DefinitionAttribute.java,v 1.2 2003/01/05 01:24:48 martinc Exp $ * $Revision: 1.2 $ * $Date: 2003/01/05 01:24:48 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Attribute representing a Component Definition. * This attribute definition contains a Component definition. */ ptDefinitionAttribute.javaq~fxsq~ uq~ppppsq~ uq~q~Dpppq~fxsq~ uq~pppppq~¥sq~ uq~ppppsq~ uq~ppppq~»xq~¥ppxpsq~4Ôuq~4×_Èuq~4×Ûoq~¥xqîµqíâqîysq~ uq~q62pppsq~B‰fpxq~Drqæsq~1sq~ uq~ppppq~CÝsq~ uq~ppppq~¥sq~ uq~ppppsq~ uq~ppppsq~BddîÉpxq~![q,!q¬ñq­q6+qæPsq~)sq~ uq~ppppq~CÝsq~ uq~ppppq~%sq~ uq~ppppsq~ uq~ppppsq~B$Â=ïpxq~–sq~)sq~ uq~ppppq~CÝsq~ uq~ppppq~%sq~ uq~ppppsq~ uq~sq~$úsq~ uq~ppppq~CÝsq~ uq~ppppq~¢sq~ uq~ppppsq~ uq~ppppppxsq~)sq~ uq~ppppq~CÝsq~ uq~ppppq~%sq~ uq~q8œsq~$úsq~ uq~ppppq~CÝsq~ uq~ppppq~¢sq~ uq~ppppsq~ uq~ppppppxq8¥sq~)sq~ uq~ppppq~CÝsq~ uq~ppppq~%sq~ uq~ppppsq~ uq~q8¬pppsq~B$´þtpxq~7Bpsq~4Ôuq~4×X·uq~4׆q~¥xppsq~ uq~sq~$úsq~ uq~ppppq~CÝsq~ uq~ppppq~¢sq~ uq~ppppsq~ uq~ppppppxsq~)sq~ uq~ppppq~CÝsq~ uq~ppppq~%sq~ uq~q8Äpppsq~ uq~sq~$úsq~ uq~ppppq~CÝsq~ uq~ppppq~¢sq~ uq~ppppsq~ uq~ppppppxsq~)sq~ uq~ppppq~CÝsq~ uq~ppppq~%sq~ uq~q8Öpppsq~ uq~ppppsq~B$‰sNpxq~‚q8Ípsq~4Ôuq~4×··uq~4׳`q~¥xpppsq~Bj‚ªpxq~q8¥psq~4Ôuq~4×··uq~4׳q~¥xpppsq~B$ºZðpxq~q8“psq~4Ôuq~4×9·uq~4׆q~¥xpppsq~B$´ßtpxq~"q8¥q­q~Dqî¬q8Ísq~1sq~ uq~ppppq~CÝsq~ uq~ppppq~¥sq~ uq~ppppsq~ uq~ppppsq~BddêOpxsq~sq~ uq~ q~6Fq~'Rq~7÷sq~Qsq~ uq~sq~Csq~ uq~ppppq9sq~ uq~ppppsq~#q~9xsq~Csq~ uq~ppppq9sq~ uq~ppppsq~#q~¾xsq~Csq~ uq~ppppq9sq~ uq~ppppsq~#q~–xsq~Csq~ uq~ppppq9sq~ uq~ppppsq~#q~'lxsq~Csq~ uq~ppppq9sq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq9sq~ uq~ppppsq~#q~"xsq~Csq~ uq~ppppq9sq~ uq~ppppsq~#q~8Bxsq~Csq~ uq~ppppq9sq~ uq~ppppsq~#q~°xsq~Csq~ uq~ppppq9sq~ uq~ppppsq~#q~Öxsq~Csq~ uq~ppppq9sq~ uq~ppppsq~#q~¼xsq~Csq~ uq~ppppq9sq~ uq~ppppsq~#q~xpppq8ÿsq~ uq~pppppt K/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/tiles/definition/ComponentDefinitionsFactoryWrapper.java,v 1.5 2003/03/08 19:23:50 dgraham Exp $ * $Revision: 1.5 $ * $Date: 2003/03/08 19:23:50 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Wrapper from new definition factory interface to old interface. * This class provides mapping from the old interface's life cycle to the new life cycle. * @author Cedric Dumoulin * @since 20020708 */ pt'ComponentDefinitionsFactoryWrapper.javaq~fxsq~ uq~ppppsq~ uq~q~'Rpppq~fxpppppq~sq~ uq~pppppppt definitionq~¢xsq~ uq~ppppsq~/sq~ uq~ sq~)sq~ uq~ppppq9Tsq~ uq~ppppq~¥sq~ uq~ppppsq~ uq~sq~$úsq~ uq~ppppq9Tsq~ uq~ppppq~¢sq~ uq~ppppsq~ uq~ppppppxsq~)sq~ uq~ppppq9Tsq~ uq~ppppq~¥sq~ uq~q9`pppsq~ uq~ppppsq~Bddqqpxq~–q9Wpsq~4Ôuq~4×££uq~4×£q~¥xpppsq~BddqMpxq~6Fq9iq9`sq~)sq~ uq~ppppq9Tsq~ uq~ppppq~rsq~ uq~ppppsq~ uq~sq~$úsq~ uq~ppppq9Tsq~ uq~ppppq~rsq~ uq~ppppsq~ uq~ppppppxsq~)sq~ uq~ppppq9Tsq~ uq~ppppq~rsq~ uq~q9€pppsq~ uq~ppppsq~BddÿÿÿÎpxq~9q9wpsq~4Ôuq~4×PPuq~4×Pq~–xpppsq~Bddpxq~'Rq9‰q9€pppq~ sq~ uq~pppp. * *//** * A MenuItem implementation. * Used to read menu items in definitions. */ ptSimpleMenuItem.javaq~fxsq~ uq~ppppsq~ uq~q9Îpppq~fxsq~ uq~pppppq~¥sq~ uq~ppppsq~ uq~ppppq~»xq~¥ppxsq~ uq~pppppt(/** * Set value property */ ptsetValueq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~q9®pppsq~ uq~ppppq~¥q~»xq~¥t this.value = value; sq~ uq~ppppq~¥q~¥xpppq~¥q~»xq~¥psq~ uq~ppppq~¥q~¥xq:q:Cq:jq:‘q:¸q:ßq;sq~isq~ uq~sq~bsq~ uq~ppppq=·sq~ uq~ppppppptvalueq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq9«sq~ uq~pppppt(/** * Set value property */ ptsetValueq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–psq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq9«sq~ uq~pppppt(/** * Get value property */ ptgetValueq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–psq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq=Ýsq~ uq~ppppppptlinkq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq9«sq~ uq~pppppt'/** * Set link property */ ptsetLinkq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–psq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq9«sq~ uq~pppppt'/** * Get link property */ ptgetLinkq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–psq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq>sq~ uq~ppppppptlinkq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq9«sq~ uq~pppppt'/** * Set icon property */ ptsetIconq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–psq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq9«sq~ uq~pppppt'/** * Get icon property */ ptgetIconq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–psq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq>)sq~ uq~ppppppptlinkq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq9«sq~ uq~pppppt*/** * Set tooltip property */ pt setTooltipq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–psq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq9«sq~ uq~pppppt*/** * Get tooltip property */ pt getTooltipq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–psq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq>Osq~ uq~ppppppptvalueq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq9«sq~ uq~pppppt)/** * Set value property. */ ptsetValueq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq9«sq~ uq~pppppt)/** * Get value property. */ ptgetValueq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq>usq~ uq~ppppppptlinkq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq9«sq~ uq~pppppt(/** * Set link property. */ ptsetLinkq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq9«sq~ uq~pppppt(/** * Get link property. */ ptgetLinkq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq>›sq~ uq~ppppppptlinkq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq9«sq~ uq~pppppt(/** * Set icon property. */ ptsetIconq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq9«sq~ uq~pppppt(/** * Get icon property. */ ptgetIconq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq>Ásq~ uq~ppppppptlinkq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq9«sq~ uq~pppppt+/** * Set tooltip property. */ pt setTooltipq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq9«sq~ uq~pppppt+/** * Get tooltip property. */ pt getTooltipq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq>çsq~ uq~ppppppptvalueq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq9«sq~ uq~pppppt)/** * Set value property. */ ptsetValueq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fpsq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq9«sq~ uq~pppppt)/** * Get value property. */ ptgetValueq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fpsq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq? sq~ uq~ppppppptlinkq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq9«sq~ uq~pppppt(/** * Set link property. */ ptsetLinkq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fpsq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq9«sq~ uq~pppppt(/** * Get link property. */ ptgetLinkq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fpsq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq?3sq~ uq~ppppppptlinkq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq9«sq~ uq~pppppt(/** * Set icon property. */ ptsetIconq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fpsq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq9«sq~ uq~pppppt(/** * Get icon property. */ ptgetIconq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fpsq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq?Ysq~ uq~ppppppptlinkq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq9«sq~ uq~pppppt+/** * Set tooltip property. */ pt setTooltipq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fpsq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq9«sq~ uq~pppppt+/** * Get tooltip property. */ pt getTooltipq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fpsq~ uq~ppppq~fq~fxppq9¨sq~ uq~ppppppptMenuItemq~¢xsq~ uq~ppppq~¥sq~ uq~q=spppsq~ uq~ppppq~¥q~¥sq~Qsq~ uq~ppppq9¨sq~ uq~pppppt —/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/tiles/beans/MenuItem.java,v 1.2 2003/02/27 19:20:25 cedric Exp $ * $Revision: 1.2 $ * $Date: 2003/02/27 19:20:25 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Interface for MenuItems. * @see SimpleMenuItem */ pt MenuItem.javaq~fxsq~ uq~ppppsq~ uq~q9«pppq~fxsq~ uq~q9Îppppq~¥sq~ uq~ppppsq~ uq~ppppq~»xq9Îq?ˆq=—pppppq~sq~ uq~ppppppptbeansq~¢xsq~ uq~ppppq=psq~ uq~q9žpppq~¥ppxq62qæ}qæ„q,3q,*q¬úqæbqæYq8œq8Äq­ q~Cûqîµq8ßq8Öq8¬qíâqîyq¨ q¨—q~ÉQq~ÉHq®sq~)sq~ uq~ppppq~CÝsq~ uq~ppppq~%sq~ uq~ppppsq~ uq~ppppsq~B©aApxq~'lsq~)sq~ uq~ppppq~CÝsq~ uq~ppppq~%sq~ uq~ppppsq~ uq~ppppsq~B$‚löpxq~9q~Ѿq~ÑÐq~ÑÇqæŸqªÅqª×qª³qæ–qªÎqª¼sq~¤6sq~ uq~ppppq~CÝsq~ uq~ppppq~%sq~ uq~ppppsq~ uq~ppppsq~BZ+ pxsq~¤Bq~4× ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶¶ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿIIUÿ¶¶ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶¶ªÿÿÿÿÿ’’ªÿ¶¶ªÿÛ¶ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmmUÿÿ’’ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛ¶ªÿÛ¶ªÿÛ¶ªÿ’’UÿÿÿÿÿÿÿÿÿÛmUÿ¶IÿÿIÿ¶Iÿÿ$ÿÿmUÿÛÛªÿÿÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÿÿÿÿmmUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶¶ªÿ¶¶ªÿmIUÿ¶¶ªÿÛÛÿÿ’’ªÿÿÿ’UÿÛÿÿUÿÿÿ¶ÿÿIÿÛIÿÛIÿÿmÿÛ¶ªÿÿÿÿÿÿÛªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛ¶ªÿÿÿIIUÿÛÛÿÿÿÿÿÿÿÿÿÿmmUÿmmUÿ’’UÿÛÛÿÿÛIªÿÛªÿÿªÿ¶Uÿÿªÿ’UÿÿUÿÿÿÿÿÿÿmÿÿ$ÿÿIÿ¶Iÿ¶mUÿÿ¶ÿÛÛUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$$UÿÿÿÿÛ¶ªÿÛÛÿÿIIUÿIIUÿÛÛÿÿ’$ªÿmªÿÛªÿÿÿÿÛÿÿÿªÿÿªÿ¶Uÿÿªÿ¶UÿÿUÿÿÿmÿÿIÿÿIÿÛIÿÛ$ÿÿIÿÿIÿÛ¶ªÿÛÛªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛ¶ªÿ$$ÿÿÿÿÿIIUÿÛÛÿÿm$ªÿmªÿmªÿ¶ÿÿmªÿÛÿÿÿÿÿÛªÿ¶ªÿÿªÿÿªÿÛªÿÿUÿÿÿÿÿÛUÿÿUÿÿÿ¶ÿÿ$ÿÛIÿÛmUÿÿ¶UÿÛ¶ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÿÿÛÛÿÿmmUÿÿÿÿ$$UÿIªÿÿÿÿÿmÿÿmÿÿ’ÿÿmªÿÛÿÿ¶ªÿÿÿÿÿÿÿÛªÿÿªÿÿªÿ¶Uÿÿªÿÿªÿ¶UÿÿUÿÛÿÿÿÿ$ÿ’ÿÛ$ÿÿ$ÿÛmUÿÛ¶ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÿÿ’’ªÿÛ¶ªÿ¶¶ªÿ¶¶ªÿÿÿÿÿÿUÿÿÿ$ÿÿIÿÿªÿmÿÿmÿÿ’ÿÿmªÿÛÿÿÿÿÿÛªÿÛÿÿÿÿÿ’ªÿÿªÿÿªÿÛªÿÿUÿ¶UÿÿUÿÛÿÛÿÿÿ’ÿÛmÿÿ¶Uÿ¶’ªÿÿÛªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’’ªÿ’’ªÿIIUÿIIUÿmmUÿÛÛªÿ’’ªÿUÿÿÿÿÿÿÿÿÿÿIÿÿIÿÿmÿÿ’ÿÿ¶ÿÿmªÿ¶ÿÿÛÿÿÛÿÿÿÿÿ’ªÿÿÿÿ’ªÿÿªÿÿªÿÛªÿÿªÿ¶ÿÿ$ÿ’ÿÿÿÿ$ÿÛ$ÿ¶IÿÛÛUÿ¶’UÿÛmUÿÿ¶UÿÿÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’’ªÿ’’ªÿmIUÿ’’ªÿmIUÿ’’ªÿÛÛÿÿ¶ÿÿ’ÿÿmÿÿ$ÿÿUÿÿÿÿÿÿUÿ$ÿÿIÿÿIÿÿIÿÿIÿÿIªÿ’ÿÿmÿÿ¶ÿÿ¶ÿÿÛÿÿÛÿÿmªÿÿÿÿ¶UÿÿªÿmUÿÿªÿÿUÿmÿÿ$ÿ’ÿÛÿÿ$ÿÿ$ÿ¶IÿÛIÿÿmÿ¶Iÿÿÿÿ$ÿÛIÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶¶ªÿ’’ªÿmmUÿÛ¶ªÿÛ¶ªÿÛ¶ªÿÛÛÿÿÿmªÿÛªÿÿÿÿmªÿmÿÿmªÿIÿÿIªÿªÿÿÿÿÿÿUÿÿÿÿÿ$ÿÿIÿÿIªÿmÿÿIªÿmÿÿmÿÿ¶ÿÿmªÿÿÿÿ¶ªÿÿÿÿÿÿÿ¶UÿÿªÿmUÿÿªÿÿªÿ¶ÿÿÿÿ$ÿÿ$ÿ’UÿÿUÿÛÿÛ$ÿÿIÿÛIÿ¶IÿÿmUÿÿmUÿÛ¶ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’’ªÿ¶¶ªÿÛÛÿÿ’’ªÿÛÛÿÿÿmªÿ¶UÿÿªÿmUÿÿÿÿ¶ªÿ¶ÿÿmªÿ¶ÿÿIªÿIªÿªÿÿÿÿÿÿÿUÿÿÿÿÿ$ÿÿ$ÿÿªÿIÿÿmÿÿ¶ÿÿmªÿ¶ÿÿmªÿÿÿÿÛªÿÿÿÿÿÿÿ’UÿÿªÿÿªÿÛUÿ¶ªÿÿªÿmUÿÿUÿÿÿmÿÿUÿÿUÿmÿÛÿÿ$ÿÛÿÛmUÿÿ¶UÿÿÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛ¶ªÿÛÛÿÿÛÛÿÿÛ¶ªÿÿÿÿÿÿ¶UÿÛÿÿUÿ’Uÿÿªÿ’ªÿÿÿÿ¶ªÿÿÿÿ’ªÿmªÿ’ÿÿmªÿ’ÿÿmÿÿ$UÿÿÿÿÿÿÿUÿªÿªÿ$ÿÿªÿIÿÿmÿÿmÿÿ’ÿÿmªÿ’ÿÿmªÿÛÿÿÿÿÿÛªÿ¶ÿÿÛÿÿmªÿÿªÿÿªÿ’UÿÿªÿÛªÿ’Uÿÿªÿÿªÿ¶ÿÿÿÿ$ÿÛIÿÛÿÛÿ¶ÿÿÿÿmUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛ’Uÿÿ$ÿ¶ÿÿUÿ’UÿÿªÿÛªÿÿªÿ¶ªÿmªÿÛÿÿ’ÿÿÛÿÿ¶ÿÿ’ªÿ’ÿÿmÿÿmÿÿ$UÿÿÿÿÿÿÿÿUÿUÿ$ÿÿªÿ$ÿÿªÿmÿÿmÿÿmªÿIÿÿmÿÿmªÿÛÿÿÛÿÿ’ªÿÛÿÿ’ÿÿÛÿÿÿÿÿÿªÿ’Uÿÿªÿÿªÿ¶Uÿÿªÿ¶UÿÿªÿÿUÿÿªÿ¶Uÿ¶’ªÿÿÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛ¶ªÿÛmÿÿÿ¶ÿÿÿÛÿÿUÿ¶UÿÛªÿÿÿÿÿÿÿÿÿÿÿÿÿÛªÿÛÿÿÛÿÿ¶ÿÿ’ÿÿ¶ÿÿmªÿIªÿ$UÿÿÿÿÿÿÿÿÿUÿªÿUÿÿÿÿÿIªÿmÿÿIªÿIÿÿmÿÿIªÿ’ÿÿ’ÿÿ¶ÿÿmªÿÛÿÿÿÿÿ’ªÿÿÿÿ’ªÿÿÿÿÿÿÿ’ªÿÛUÿÿUÿÿÿÿÿ¶ÿÿIUÿÿIÿ¶IÿÛÛªÿÿIUÿÿmUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÿÿÛ¶ªÿÿmÿÛ$ÿÿ$ÿÿ$ÿ¶ÿÿÿÛªÿÿªÿ¶UÿÿªÿÿªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÿÿ¶ÿÿ’ÿÿmÿÿmªÿ¶ÿÿIUÿ$Uÿ$UÿÿÿÿÿÿÿÿÿÿUÿªÿUÿÿÿ$ÿÿIÿÿªÿmÿÿmÿÿIªÿmÿÿmÿÿmÿÿ’ÿÿmªÿÿÿÿÿÿÿÿªÿ’UÿÿªÿÿªÿÛUÿ’UÿÿªÿÿªÿÛUÿ¶mÿÛ¶ÿ¶’ÿÛÛUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÿÿÛÛÿÿÛÛÿÿÿmÿ¶Iÿ¶IÿÿIÿ¶ÿÿUÿ¶ÿÿUÿÿUÿÛªÿÿªÿ¶Uÿÿªÿ¶ªÿÿªÿ¶ªÿÿÿÿmªÿ’ÿÿÿÿÿ’ÿÿÛÿÿ’ÿÿÛÿÿmªÿ’ÿÿIUÿmªÿ$Uÿ$UÿÿÿÿÿÿÿÿÿÿÿÿUÿªÿªÿÿÿªÿmÿÿmÿÿmÿÿIªÿ’ÿÿ¶ÿÿmªÿ’ÿÿÛÿÿÛÿÿ¶IÿÛ¶ÿ¶’ÿÿÛÿÛ¶ÿ¶’ÿÿÛÿÿÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛ’UÿÛ¶UÿÛmÿÿÿÿÿÿÿÿÿÛÿÿUÿ’UÿÿUÿ’UÿÿUÿ’UÿÿªÿÛªÿÿÿÿÛªÿÿªÿ¶ªÿÿÿÿÛªÿÿÿÿÿÿÿÛÿÿÿÿÿÿÿÿ¶ªÿ¶ÿÿmªÿÛÿÿ’ªÿÛÿÿ’ªÿmªÿmªÿ$Uÿ$$ÿ$UÿÿÿÿÿÿÿÿÿUÿUÿªÿªÿIªÿmIUÿÿÛÿ¶’ÿÿÛÿÿÛÿ¶mÿÿÛÿ¶’ÿÛ¶ÿÿÛÿÿÛÿÛÛªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÿÿÛ¶ªÿÛ¶ªÿÿIÿ¶IÿÿIÿ¶Iÿÿ$ÿÿÿÿÿÿÿÿÿÿUÿÛUÿÿªÿÛªÿ¶UÿÿUÿ¶Uÿÿªÿ’Uÿÿªÿ’UÿÿªÿmUÿÿªÿÿÿÿ¶ªÿÿÿÿmªÿÿÿÿÛªÿÛÿÿ’ÿÿÛÿÿÛÿÿ’ÿÿÿÿÿÿÿÿmªÿ’ÿÿmªÿ¶ÿÿIUÿ’ÿÿmªÿmªÿmUÿÿ$$ÿÿÿÿÿÿÿmIÿmIÿÛ¶ÿÿÛÿ¶mÿÿÛÿ¶’ÿÿÛÿÿÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÿÿÛÛÿÿÛÛªÿÛ¶ªÿÿmÿÛmUÿÿIÿ¶IÿÿIÿ’ÿÿ$ÿ¶ÿÿÿmÿÿÿ¶ÿÿÿÛÿÿUÿÛÿÿUÿÛÿÿUÿmUÿÿUÿÿªÿ’Uÿÿÿÿ¶ªÿÿªÿ¶ªÿÿÿÿ¶ªÿÿªÿÿÿÿ’ªÿÿªÿÿÿÿmUÿÿÿÿ¶ªÿÿÿÿ’ªÿÿªÿÛªÿÛªÿÿÿÿmªÿÿÿÿ’ªÿÛ¶ÿ¶’ÿÿÛÿÛ¶ÿÿÛÿ¶’ÿ¶’ÿmIÿmIÿÿmIÿ$$ÿÛ¶ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛ¶ªÿÛÛÿÿÿ¶Uÿ¶¶ªÿÿmÿ¶IUÿÿIÿ¶Iÿÿ$ÿ¶IÿÛ$ÿÛ$ÿÿÿ¶ÿÛÿÿÿÿÿmÿÿÿÿUÿ’Uÿÿªÿ’UÿÿUÿÛUÿÿªÿ’Uÿÿªÿÿªÿ’Uÿÿªÿÿªÿ’UÿÿªÿÛªÿÿªÿ¶UÿÿUÿÛªÿ¶Uÿÿªÿ’Uÿÿÿÿÿÿÿ¶IUÿ¶’ÿÿÛÿÛ¶ÿÛ¶ÿ¶’ÿÿÛÿÛ¶ÿÛ¶ÿ¶’ÿÛ¶ÿÛ¶ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛmUÿÛÛªÿÛ’ªÿÛ¶ªÿÛmUÿÛ’UÿÿIÿ¶IÿÛ$ÿ¶IÿÿIÿ’ÿÛ$ÿÿ$ÿ¶UÿÿUÿ¶Uÿÿÿ¶ÿÿUÿ’UÿÿÿÿUÿmÿÿÿÿUÿ¶UÿÛUÿÛUÿÿªÿ’Uÿÿÿÿÿ¶ÿÿUÿÛUÿ¶Uÿÿªÿ’Uÿ¶’ÿÛ¶ÿÛ¶ÿ¶’ÿÛ¶ÿ¶’ÿÛÛUÿÛ¶ªÿÛ¶ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛ¶ªÿÛ¶ªÿÛ¶ªÿÛmÿmÿÿ$Uÿ¶UÿÛIÿÛ$ÿÛUÿÛUÿ¶ÿÿÿ¶ÿÛ$ÿÿÿmÿÿÿÛÿÿÿÿUÿmUÿ$$Uÿ$$UÿIIUÿmUÿ$$ÿÛIªÿÿ$ªÿÛ¶ªÿÛÛªÿÛ¶ªÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛªÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿpppppppppppppq~ sq~ uq~ppppKpppsq~ uq~q~Epppq~¥q~¥q~&,sq~ uq~pppppq~¥sq~ uq~ppppsq~ uq~ppppq~»xsq~#ppxsq~ uq~pppppt=/** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it). * Return an ActionForward instance describing where and how * control should be forwarded, or null if the response has * already been completed. * * @param servlet The ActionServlet making this request * @param mapping The ActionMapping used to select this instance * @param actionForm The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs */ ptperformq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ýpq~§xsq~ uq~q~< pppsq~ uq~ppppq~¥q~»xq~¥t¢ // Identify the request parameter containing the method name // If none defined, use "def" String parameter = mapping.getParameter(); if (parameter == null) { parameter = "def"; } // Identify the method name to be dispatched to String name = request.getParameter(parameter); if (name == null) { String msg = "Definition dispatcher action : can't get parameter '" + parameter + "'."; printError( response, msg ); return (null); } // Try to dispatch to requested definition try { // Read definition from factory, but we can create it here. ComponentDefinition definition = DefinitionsUtil.getDefinition( name, request, getServlet().getServletContext() ); System.out.println("get Definition " + definition ); DefinitionsUtil.setActionDefinition( request, definition); } catch( FactoryNotFoundException ex ) { printError( response, "Error - DefinitionDispatcherAction : Can't get definition factory."); return (mapping.findForward("error")); } catch( NoSuchDefinitionException ex ) { printError( response, "Error - DefinitionDispatcherAction : Can't get definition '" + name +"'."); return (mapping.findForward("error")); } catch( DefinitionsFactoryException ex ) { printError( response, "Error - DefinitionDispatcherAction : General Factory error '" + ex.getMessage() +"'."); return (mapping.findForward("error")); } catch( Exception ex ) { printError( response, "Error - DefinitionDispatcherAction : General error '" + ex.getMessage() +"'."); return (mapping.findForward("error")); } return (mapping.findForward("success")); sq~ uq~q~¦pppq~¥q~¥xq~=~q~>†q~?¼q~Bnq~;ßq[qÞpq~$q~Äxq~$tT return (null); // Override this method to provide functionality sq~ uq~q~¦pppq~$q~$xpppsq~ uq~qRpppq~$q~Äxq~$t5 // Identify the request parameter containing the method name String parameter = mapping.getParameter(); if (parameter == null) { String message = messages.getMessage("dispatch.handler", mapping.getPath()); log.error(message); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); return (null); } // Identify the method name to be dispatched to String name = request.getParameter(parameter); if (name == null) { String message = messages.getMessage("dispatch.parameter", mapping.getPath(), parameter); log.error(message); response.sendError(HttpServletResponse.SC_BAD_REQUEST, message); return (null); } // Invoke the named method, and return the result return dispatchMethod(mapping,form,request,response,name); sq~ uq~q~¦pppq~$q~$xq~;Psq~isq~ uq~ sq~bsq~ uq~ppppq?ñsq~ uq~ppppppptmappingq~¢xsq~ uq~pppppq~¥q~¦q~¥q~épq~§xsq~bsq~ uq~ppppq?ñsq~ uq~ppppppptformq~¢xsq~ uq~pppppq~¥q~¦q~¥q~wpq~§xsq~bsq~ uq~ppppq?ñsq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Œpq~§xsq~bsq~ uq~ppppq?ñsq~ uq~ppppppptresponseq~¢xsq~ uq~pppppq~¥q~¦q~¥q~’pq~§xsq~bsq~ uq~ppppq?ñsq~ uq~ppppppptnameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xppppq~;[sq~ uq~ppppptx/** * Dispatch to the specified method. * Added to class at Revision 1.3 * @since Struts 1.1 */ ptdispatchMethodq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ýpq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥t§ // Identify the method object to be dispatched to Method method = null; try { method = getMethod(name); } catch (NoSuchMethodException e) { String message = messages.getMessage("dispatch.method", mapping.getPath(), name); log.error(message, e); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); return (null); } ActionForward forward = null; try { Object args[] = { mapping, form, request, response }; forward = (ActionForward) method.invoke(this, args); } catch (ClassCastException e) { String message = messages.getMessage("dispatch.return", mapping.getPath(), name); log.error(message, e); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); return (null); } catch (IllegalAccessException e) { String message = messages.getMessage("dispatch.error", mapping.getPath(), name); log.error(message, e); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); return (null); } catch (InvocationTargetException e) { String message = messages.getMessage("dispatch.error", mapping.getPath(), name); log.error(message, e); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); return (null); } // Return the returned ActionForward instance return (forward); sq~ uq~q~‚pppq~¥q~¥xqãsq~isq~ uq~sq~bsq~ uq~ppppq@)sq~ uq~ppppppptnameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~;[sq~ uq~ppppptš// ----------------------------------------------------- Protected Methods /** * Introspect the current class to identify a method of the specified * name that accepts the same parameter types as the execute * method does. * * @param name Name of the method to be introspected * * @exception NoSuchMethodException if no such method can be found */ pt getMethodq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Üpq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥t$ synchronized (methods) { Method method = (Method) methods.get(name); if (method == null) { method = clazz.getMethod(name, types); methods.put(name, method); } return (method); } sq~ uq~q~;(pppq~¥q~¥xq#ssq~isq~ uq~sq~bsq~ uq~ppppq@Asq~ uq~ppppppptmappingq~rxsq~ uq~pppppq~–q~—q~–q~épq~˜xsq~bsq~ uq~ppppq@Asq~ uq~ppppppptformq~rxsq~ uq~pppppq~–q~—q~–q~wpq~˜xsq~bsq~ uq~ppppq@Asq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xsq~bsq~ uq~ppppq@Asq~ uq~ppppppptresponseq~rxsq~ uq~pppppq~–q~—q~–q~’pq~˜xq~;[sq~ uq~ppppptQ/** * Method which is dispatched to when there is no value for specified * request parameter included in the request. Subclasses of * DispatchAction should override this method if they wish * to provide default behavior different than producing an HTTP * "Bad Request" error. * */ pt unspecifiedq~rxsq~ uq~pppppq~–q~—q~–q~ýpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t' String message = messages.getMessage("dispatch.parameter", mapping.getPath(), mapping.getParameter()); log.error(message); response.sendError(HttpServletResponse.SC_BAD_REQUEST, message); return (null); sq~ uq~q~‚pppq~–q~–xsq~isq~ uq~ sq~bsq~ uq~ppppq@qsq~ uq~ppppppptmappingq~rxsq~ uq~pppppq~–q~—q~–q~épq~˜xsq~bsq~ uq~ppppq@qsq~ uq~ppppppptformq~rxsq~ uq~pppppq~–q~—q~–q~wpq~˜xsq~bsq~ uq~ppppq@qsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xsq~bsq~ uq~ppppq@qsq~ uq~ppppppptresponseq~rxsq~ uq~pppppq~–q~—q~–q~’pq~˜xsq~bsq~ uq~ppppq@qsq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xppppq~;[sq~ uq~ppppptÄ// ----------------------------------------------------- Protected Methods /** * Dispatch to the specified method. * Added to class at Revision 1.3 * @since Struts 1.1 */ ptdispatchMethodq~rxsq~ uq~pppppq~–q~—q~–q~ýpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–tã // Identify the method object to be dispatched to Method method = null; try { method = getMethod(name); } catch (NoSuchMethodException e) { String message = messages.getMessage("dispatch.method", mapping.getPath(), name); log.error(message, e); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); return (null); } ActionForward forward = null; try { Object args[] = { mapping, form, request, response }; forward = (ActionForward) method.invoke(this, args); } catch (ClassCastException e) { String message = messages.getMessage("dispatch.return", mapping.getPath(), name); log.error(message, e); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); return (null); } catch (IllegalAccessException e) { String message = messages.getMessage("dispatch.error", mapping.getPath(), name); log.error(message, e); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); return (null); } catch (InvocationTargetException e) { // Rethrow the target exception if possible so that the // exception handling machinery can deal with it Throwable t = e.getTargetException(); if (t instanceof Exception) { throw ((Exception) t); } else { String message = messages.getMessage("dispatch.error", mapping.getPath(), name); log.error(message, e); response.sendError (HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); return (null); } } // Return the returned ActionForward instance return (forward); sq~ uq~q~‚pppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq@©sq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~;[sq~ uq~ppppptN/** * Introspect the current class to identify a method of the specified * name that accepts the same parameter types as the execute * method does. * * @param name Name of the method to be introspected * * @exception NoSuchMethodException if no such method can be found */ pt getMethodq~rxsq~ uq~pppppq~–q~—q~–q~Üpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–t$ synchronized (methods) { Method method = (Method) methods.get(name); if (method == null) { method = clazz.getMethod(name, types); methods.put(name, method); } return (method); } sq~ uq~q~;(pppq~–q~–xq#£sq~isq~ uq~sq~bsq~ uq~ppppq@Ásq~ uq~ppppppptmappingq~{xsq~ uq~pppppq~~q~q~~q~épq~€xsq~bsq~ uq~ppppq@Ásq~ uq~ppppppptformq~{xsq~ uq~pppppq~~q~q~~q~wpq~€xsq~bsq~ uq~ppppq@Ásq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xsq~bsq~ uq~ppppq@Ásq~ uq~ppppppptresponseq~{xsq~ uq~pppppq~~q~q~~q~’pq~€xq~;[sq~ uq~ppppptQ/** * Method which is dispatched to when there is no value for specified * request parameter included in the request. Subclasses of * DispatchAction should override this method if they wish * to provide default behavior different than producing an HTTP * "Bad Request" error. * */ pt unspecifiedq~{xsq~ uq~pppppq~~q~q~~q~ýpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t' String message = messages.getMessage("dispatch.parameter", mapping.getPath(), mapping.getParameter()); log.error(message); response.sendError(HttpServletResponse.SC_BAD_REQUEST, message); return (null); sq~ uq~q~‚pppq~~q~~xsq~isq~ uq~ sq~bsq~ uq~ppppq@ñsq~ uq~ppppppptmappingq~{xsq~ uq~pppppq~~q~q~~q~épq~€xsq~bsq~ uq~ppppq@ñsq~ uq~ppppppptformq~{xsq~ uq~pppppq~~q~q~~q~wpq~€xsq~bsq~ uq~ppppq@ñsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xsq~bsq~ uq~ppppq@ñsq~ uq~ppppppptresponseq~{xsq~ uq~pppppq~~q~q~~q~’pq~€xsq~bsq~ uq~ppppq@ñsq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xppppq~;[sq~ uq~pppppt// ----------------------------------------------------- Protected Methods /** * Dispatch to the specified method. * @since Struts 1.1 */ ptdispatchMethodq~{xsq~ uq~pppppq~~q~q~~q~ýpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t  // Make sure we have a valid method name to call. // This may be null if the user hacks the query string. if (name == null) { return this.unspecified(mapping, form, request, response); } // Identify the method object to be dispatched to Method method = null; try { method = getMethod(name); } catch (NoSuchMethodException e) { String message = messages.getMessage("dispatch.method", mapping.getPath(), name); log.error(message, e); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); return (null); } ActionForward forward = null; try { Object args[] = { mapping, form, request, response }; forward = (ActionForward) method.invoke(this, args); } catch (ClassCastException e) { String message = messages.getMessage("dispatch.return", mapping.getPath(), name); log.error(message, e); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); return (null); } catch (IllegalAccessException e) { String message = messages.getMessage("dispatch.error", mapping.getPath(), name); log.error(message, e); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); return (null); } catch (InvocationTargetException e) { // Rethrow the target exception if possible so that the // exception handling machinery can deal with it Throwable t = e.getTargetException(); if (t instanceof Exception) { throw ((Exception) t); } else { String message = messages.getMessage("dispatch.error", mapping.getPath(), name); log.error(message, e); response.sendError (HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); return (null); } } // Return the returned ActionForward instance return (forward); sq~ uq~q~‚pppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqA)sq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~;[sq~ uq~ppppptN/** * Introspect the current class to identify a method of the specified * name that accepts the same parameter types as the execute * method does. * * @param name Name of the method to be introspected * * @exception NoSuchMethodException if no such method can be found */ pt getMethodq~{xsq~ uq~pppppq~~q~q~~q~Üpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t$ synchronized (methods) { Method method = (Method) methods.get(name); if (method == null) { method = clazz.getMethod(name, types); methods.put(name, method); } return (method); } sq~ uq~q~;(pppq~~q~~xq#Ósq~isq~ uq~sq~bsq~ uq~ppppqAAsq~ uq~ppppppptmappingq~cxsq~ uq~pppppq~fq~gq~fq~épq~hxsq~bsq~ uq~ppppqAAsq~ uq~ppppppptformq~cxsq~ uq~pppppq~fq~gq~fq~wpq~hxsq~bsq~ uq~ppppqAAsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppqAAsq~ uq~ppppppptresponseq~cxsq~ uq~pppppq~fq~gq~fq~’pq~hxq~;[sq~ uq~ppppptQ/** * Method which is dispatched to when there is no value for specified * request parameter included in the request. Subclasses of * DispatchAction should override this method if they wish * to provide default behavior different than producing an HTTP * "Bad Request" error. * */ pt unspecifiedq~cxsq~ uq~pppppq~fq~gq~fq~ýpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft' String message = messages.getMessage("dispatch.parameter", mapping.getPath(), mapping.getParameter()); log.error(message); response.sendError(HttpServletResponse.SC_BAD_REQUEST, message); return (null); sq~ uq~q~‚pppq~fq~fxsq~isq~ uq~ sq~bsq~ uq~ppppqAqsq~ uq~ppppppptmappingq~cxsq~ uq~pppppq~fq~gq~fq~épq~hxsq~bsq~ uq~ppppqAqsq~ uq~ppppppptformq~cxsq~ uq~pppppq~fq~gq~fq~wpq~hxsq~bsq~ uq~ppppqAqsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppqAqsq~ uq~ppppppptresponseq~cxsq~ uq~pppppq~fq~gq~fq~’pq~hxsq~bsq~ uq~ppppqAqsq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxppppq~;[sq~ uq~pppppt// ----------------------------------------------------- Protected Methods /** * Dispatch to the specified method. * @since Struts 1.1 */ ptdispatchMethodq~cxsq~ uq~pppppq~fq~gq~fq~ýpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft  // Make sure we have a valid method name to call. // This may be null if the user hacks the query string. if (name == null) { return this.unspecified(mapping, form, request, response); } // Identify the method object to be dispatched to Method method = null; try { method = getMethod(name); } catch (NoSuchMethodException e) { String message = messages.getMessage("dispatch.method", mapping.getPath(), name); log.error(message, e); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); return (null); } ActionForward forward = null; try { Object args[] = { mapping, form, request, response }; forward = (ActionForward) method.invoke(this, args); } catch (ClassCastException e) { String message = messages.getMessage("dispatch.return", mapping.getPath(), name); log.error(message, e); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); return (null); } catch (IllegalAccessException e) { String message = messages.getMessage("dispatch.error", mapping.getPath(), name); log.error(message, e); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); return (null); } catch (InvocationTargetException e) { // Rethrow the target exception if possible so that the // exception handling machinery can deal with it Throwable t = e.getTargetException(); if (t instanceof Exception) { throw ((Exception) t); } else { String message = messages.getMessage("dispatch.error", mapping.getPath(), name); log.error(message, e); response.sendError (HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); return (null); } } // Return the returned ActionForward instance return (forward); sq~ uq~q~‚pppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqA©sq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~;[sq~ uq~ppppptN/** * Introspect the current class to identify a method of the specified * name that accepts the same parameter types as the execute * method does. * * @param name Name of the method to be introspected * * @exception NoSuchMethodException if no such method can be found */ pt getMethodq~cxsq~ uq~pppppq~fq~gq~fq~Üpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft$ synchronized (methods) { Method method = (Method) methods.get(name); if (method == null) { method = clazz.getMethod(name, types); methods.put(name, method); } return (method); } sq~ uq~q~;(pppq~fq~fxpqFsq~ uq~ppppppptDispatchActionq~=xsq~ uq~ppppsq~#sq~ uq~q~pppsq~ uq~q~Epppq~$q~$q~çsq~ uq~q3ppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxsq~ uq~ppppptœ// ----------------------------------------------------- Protected Methods /** * Introspect the current class to identify a method of the specified * name that accepts the same parameter types as the perform() * method does. * * @param name Name of the method to be introspected * * @exception NoSuchMethodException if no such method can be found */ pt getMethodq~=xsq~ uq~pppppq~$q~yq~$q~Üpq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$t$ synchronized (methods) { Method method = (Method) methods.get(name); if (method == null) { method = clazz.getMethod(name, types); methods.put(name, method); } return (method); } sq~ uq~q~;(pppq~$q~$xq@)q~;q@©sq~isq~ uq~sq~bsq~ uq~ppppqAÞsq~ uq~ppppppptbeanq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~bsq~ uq~ppppqAÞsq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xppq~:Ósq~ uq~pppppt©/** * Return the value of the specified property of the specified bean, * no matter which property reference format is used, with no * type conversions. * * @param bean Bean whose property is to be extracted * @param name Possibly indexed and/or nested name of the property * to be extracted * * @exception IllegalAccessException if the caller does not have * access to the property accessor method * @exception InvocationTargetException if the property accessor method * throws an exception * @exception NoSuchMethodException if an accessor method for this * propety cannot be found */ pt getPropertyq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t< return (PropertyUtils.getProperty(bean, name)); sq~ uq~q~)aq~ðq~;(pq~–q~–xqA)sq~isq~ uq~sq~bsq~ uq~ppppqAÿsq~ uq~ppppppptbeanq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~bsq~ uq~ppppqAÿsq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xppq~:Ósq~ uq~pppppt«/** * Return the value of the specified property of the specified bean, * no matter which property reference format is used, with no * type conversions. * * @param bean Bean whose property is to be extracted. * @param name Possibly indexed and/or nested name of the property * to be extracted. * * @exception IllegalAccessException if the caller does not have * access to the property accessor method * @exception InvocationTargetException if the property accessor method * throws an exception * @exception NoSuchMethodException if an accessor method for this * propety cannot be found */ pt getPropertyq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t6 return PropertyUtils.getProperty(bean, name); sq~ uq~q~)aq~ðq~;(pq~~q~~xqA©sq~isq~ uq~sq~bsq~ uq~ppppqB sq~ uq~ppppppptbeanq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~bsq~ uq~ppppqB sq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxppq~:Ósq~ uq~pppppt«/** * Return the value of the specified property of the specified bean, * no matter which property reference format is used, with no * type conversions. * * @param bean Bean whose property is to be extracted. * @param name Possibly indexed and/or nested name of the property * to be extracted. * * @exception IllegalAccessException if the caller does not have * access to the property accessor method * @exception InvocationTargetException if the property accessor method * throws an exception * @exception NoSuchMethodException if an accessor method for this * propety cannot be found */ pt getPropertyq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft6 return PropertyUtils.getProperty(bean, name); sq~ uq~q~)aq~ðq~;(pq~fq~fxpq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqBAsq~ uq~ppppppptbeanNameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppqBAsq~ uq~pppppppt scopeNameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppqBAsq~ uq~pppppppt pageContextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xpq~:Ósq~ uq~ppppptÄ/** * Retrieve bean from page context, using specified scope. * If scope is not setted, use findAttribute. * * @param bean Name Name of bean to retrieve * @param scope Name Scope or null. If null, bean is searched using * findAttribute. * @param pageContext Current pageContext. * * @return requested bean or null if not found. * @throws JspException If scopeName is not recognize. */ pt retrieveBeanq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥t… if( scopeName == null ) { return findAttribute( beanName, pageContext ); } // end if // Default value doesn't matter because we have already check it int scope = getScope( scopeName, PageContext.PAGE_SCOPE ); //return pageContext.getAttribute( beanName, scope ); return getAttribute( beanName, scope, pageContext); sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqBjsq~ uq~ppppppptbeanNameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppqBjsq~ uq~pppppppt pageContextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xppq~:Ósq~ uq~pppppt$/** * Search attribute in different contexts. * First, check in component context, then use pageContext.findAttribute(). * @param beanName Name of bean to retrieve * @param pageContext Current pageContext. * @return requested bean or null if not found. */ pt findAttributeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥t§ Object attribute; ComponentContext compContext = ComponentContext.getContext(pageContext.getRequest()); if( compContext != null ) { attribute = compContext.findAttribute( beanName, pageContext ); if( attribute != null ) return attribute; } // end if // Search in pageContext scopes return pageContext.findAttribute( beanName ); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqB‹sq~ uq~ppppppptbeanNameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppqB‹sq~ uq~ppppppptscopeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~bsq~ uq~ppppqB‹sq~ uq~pppppppt pageContextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xpq~:Ósq~ uq~pppppta/** * Get object from requested context. Return null if not found. * Context can be "component" or normal jsp contexts. * @param beanName Name of bean to retrieve * @param scope Scope from which bean must be retrieved. * @param pageContext Current pageContext. * @return requested bean or null if not found. */ pt getAttributeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥t' if( scope == ComponentConstants.COMPONENT_SCOPE ) { ComponentContext compContext = ComponentContext.getContext(pageContext.getRequest()); return compContext.getAttribute( beanName ); } return pageContext.getAttribute( beanName, scope ); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqB´sq~ uq~ppppppptbeanNameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppqB´sq~ uq~pppppppt beanPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppqB´sq~ uq~pppppppt beanScopeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppqB´sq~ uq~pppppppt pageContextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xq~:Ósq~ uq~pppppt‰/** * Locate and return the specified property of the specified bean, from * an optionally specified scope, in the specified page context. * * @param pageContext Page context to be searched * @param beanName Name of the bean to be retrieved * @param beanProperty Name of the property to be retrieved, or * null to retrieve the bean itself * @param beanScope Scope to be searched (page, request, session, application) * or null to use findAttribute() instead * * @exception JspException if an invalid scope name * is requested * @exception JspException if the specified bean is not found * @exception JspException if accessing this property causes an * IllegalAccessException, IllegalArgumentException, * InvocationTargetException, or NoSuchMethodException */ ptgetRealValueFromBeanq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥t) try { Object realValue; Object bean = retrieveBean( beanName, beanScope, pageContext ); if( bean != null && beanProperty != null ) realValue = getProperty( bean, beanProperty ); else realValue = bean; // value can be null return realValue; } catch( NoSuchMethodException ex ) { throw new JspException( "Error - component.PutAttributeTag : Error while retrieving value from bean '" + beanName + "' with property '" + beanProperty + "' in scope '" + beanScope + "'. (exception : " + ex.getMessage() ); } catch( InvocationTargetException ex ) { throw new JspException( "Error - component.PutAttributeTag : Error while retrieving value from bean '" + beanName + "' with property '" + beanProperty + "' in scope '" + beanScope + "'. (exception : " + ex.getMessage() ); } catch( IllegalAccessException ex ) { throw new JspException( "Error - component.PutAttributeTag : Error while retrieving value from bean '" + beanName + "' with property '" + beanProperty + "' in scope '" + beanScope + "'. (exception : " + ex.getMessage() ); } sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqBåsq~ uq~pppppppt pageContextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~bsq~ uq~ppppqBåsq~ uq~ppppppptnameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppqBåsq~ uq~ppppppptvalueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~bsq~ uq~ppppqBåsq~ uq~ppppppptscopeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xq~:Ósq~ uq~ppppptï/** * Store bean in requested context. * If scope is null, save in REQUEST_SCOPE context. * * @param pageContext current pageContext * @param name Name of the bean * @param scope Scope under which bean is saved (page, request, session, application) * or null to store in request() instead * @param value Bean value to store * * @exception JspException if an invalid scope name * is requested */ pt setAttributeq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥tî if (scope == null) pageContext.setAttribute(name, value, PageContext.REQUEST_SCOPE); else if (scope.equalsIgnoreCase("page")) pageContext.setAttribute(name, value, PageContext.PAGE_SCOPE); else if (scope.equalsIgnoreCase("request")) pageContext.setAttribute(name, value, PageContext.REQUEST_SCOPE); else if (scope.equalsIgnoreCase("session")) pageContext.setAttribute(name, value, PageContext.SESSION_SCOPE); else if (scope.equalsIgnoreCase("application")) pageContext.setAttribute(name, value, PageContext.APPLICATION_SCOPE); else { throw new JspException( "Error - bad scope name '" + scope + "'"); } sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqCsq~ uq~pppppppt pageContextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~bsq~ uq~ppppqCsq~ uq~ppppppptnameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppqCsq~ uq~pppppppt beanValueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xpq~:Ósq~ uq~pppppt/** * Store bean in REQUEST_SCOPE context. * * @param pageContext current pageContext * @param name Name of the bean * @param value Bean value to store * * @exception JspException if an invalid scope name * is requested */ pt setAttributeq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥tQ pageContext.setAttribute(name, beanValue, PageContext.REQUEST_SCOPE); sq~ uq~q~pppq~¥q~¥xqËÈsq~isq~ uq~sq~bsq~ uq~ppppqC?sq~ uq~ppppppptnameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppqC?sq~ uq~pppppppt pageContextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xppq~:Ósq~ uq~pppppt¾/** * Get component definition by its name. * @param name Definition name * @param pageContext The PageContext for the current page * @throws JspException - */ ptgetComponentDefinitionq~¢xsq~ uq~pppppq~¥q~¦q~¥q~¾pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥t0 try { return DefinitionsUtil.getDefinition(name, pageContext); } catch( NoSuchDefinitionException ex ) { throw new JspException ( "Error : Can't get component definition for '" + name + "'. Check if this name exist in component definitions." ); } catch( FactoryNotFoundException ex ) { // factory not found. throw new JspException ( ex.getMessage() ); } // end catch catch( DefinitionsFactoryException ex ) { if(debug) ex.printStackTrace( ); // Save exception to be able to show it later saveException( pageContext, ex); throw new JspException ( ex.getMessage() ); } // end catch sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqC`sq~ uq~pppppppt scopeNameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqC`sq~ uq~pppppppt defaultValueq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xppq~:Ósq~ uq~pppppt%/** * Get scope value from string value * @param scopeName scope as a String * @param default returned value, if not found. * @return scope as an int, or defaultValue if scope is null. * @throws JspException Scope name is not recognize as a valid scope. */ ptgetScopeq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–tê if(scopeName==null) return defaultValue; else if( scopeName.equals("request") ) { return PageContext.REQUEST_SCOPE; } else if( scopeName.equals("page") ) { return PageContext.PAGE_SCOPE; } else if( scopeName.equals("session") ) { return PageContext.SESSION_SCOPE; } else if( scopeName.equals("application") ) { return PageContext.APPLICATION_SCOPE; } else if( scopeName.equals("component") ) { return ComponentConstants.COMPONENT_SCOPE; } else if( scopeName.equals("template") ) { return ComponentConstants.COMPONENT_SCOPE; } else if( scopeName.equals("tile") ) { return ComponentConstants.COMPONENT_SCOPE; } else { throw new JspException( "Error - scope translation tag : unrecognized scope '" + scopeName + "'" ); } sq~ uq~q~pppq~–q~–xqAÞsq~isq~ uq~sq~bsq~ uq~ppppqCsq~ uq~ppppppptbeanNameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqCsq~ uq~pppppppt scopeNameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqCsq~ uq~pppppppt pageContextq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xpq~:Ósq~ uq~ppppptÄ/** * Retrieve bean from page context, using specified scope. * If scope is not setted, use findAttribute. * * @param bean Name Name of bean to retrieve * @param scope Name Scope or null. If null, bean is searched using * findAttribute. * @param pageContext Current pageContext. * * @return requested bean or null if not found. * @throws JspException If scopeName is not recognize. */ pt retrieveBeanq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t… if( scopeName == null ) { return findAttribute( beanName, pageContext ); } // end if // Default value doesn't matter because we have already check it int scope = getScope( scopeName, PageContext.PAGE_SCOPE ); //return pageContext.getAttribute( beanName, scope ); return getAttribute( beanName, scope, pageContext); sq~ uq~q~pppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqCªsq~ uq~ppppppptbeanNameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqCªsq~ uq~pppppppt pageContextq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xppq~:Ósq~ uq~pppppt$/** * Search attribute in different contexts. * First, check in component context, then use pageContext.findAttribute(). * @param beanName Name of bean to retrieve * @param pageContext Current pageContext. * @return requested bean or null if not found. */ pt findAttributeq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t§ Object attribute; ComponentContext compContext = ComponentContext.getContext(pageContext.getRequest()); if( compContext != null ) { attribute = compContext.findAttribute( beanName, pageContext ); if( attribute != null ) return attribute; } // end if // Search in pageContext scopes return pageContext.findAttribute( beanName ); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqCËsq~ uq~ppppppptbeanNameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqCËsq~ uq~ppppppptscopeq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~bsq~ uq~ppppqCËsq~ uq~pppppppt pageContextq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xpq~:Ósq~ uq~pppppta/** * Get object from requested context. Return null if not found. * Context can be "component" or normal jsp contexts. * @param beanName Name of bean to retrieve * @param scope Scope from which bean must be retrieved. * @param pageContext Current pageContext. * @return requested bean or null if not found. */ pt getAttributeq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t' if( scope == ComponentConstants.COMPONENT_SCOPE ) { ComponentContext compContext = ComponentContext.getContext(pageContext.getRequest()); return compContext.getAttribute( beanName ); } return pageContext.getAttribute( beanName, scope ); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqCôsq~ uq~ppppppptbeanNameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqCôsq~ uq~pppppppt beanPropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqCôsq~ uq~pppppppt beanScopeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqCôsq~ uq~pppppppt pageContextq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xq~:Ósq~ uq~pppppt‰/** * Locate and return the specified property of the specified bean, from * an optionally specified scope, in the specified page context. * * @param pageContext Page context to be searched * @param beanName Name of the bean to be retrieved * @param beanProperty Name of the property to be retrieved, or * null to retrieve the bean itself * @param beanScope Scope to be searched (page, request, session, application) * or null to use findAttribute() instead * * @exception JspException if an invalid scope name * is requested * @exception JspException if the specified bean is not found * @exception JspException if accessing this property causes an * IllegalAccessException, IllegalArgumentException, * InvocationTargetException, or NoSuchMethodException */ ptgetRealValueFromBeanq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t) try { Object realValue; Object bean = retrieveBean( beanName, beanScope, pageContext ); if( bean != null && beanProperty != null ) realValue = getProperty( bean, beanProperty ); else realValue = bean; // value can be null return realValue; } catch( NoSuchMethodException ex ) { throw new JspException( "Error - component.PutAttributeTag : Error while retrieving value from bean '" + beanName + "' with property '" + beanProperty + "' in scope '" + beanScope + "'. (exception : " + ex.getMessage() ); } catch( InvocationTargetException ex ) { throw new JspException( "Error - component.PutAttributeTag : Error while retrieving value from bean '" + beanName + "' with property '" + beanProperty + "' in scope '" + beanScope + "'. (exception : " + ex.getMessage() ); } catch( IllegalAccessException ex ) { throw new JspException( "Error - component.PutAttributeTag : Error while retrieving value from bean '" + beanName + "' with property '" + beanProperty + "' in scope '" + beanScope + "'. (exception : " + ex.getMessage() ); } sq~ uq~q~pppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqD%sq~ uq~pppppppt pageContextq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~bsq~ uq~ppppqD%sq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqD%sq~ uq~ppppppptvalueq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~bsq~ uq~ppppqD%sq~ uq~ppppppptscopeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xq~:Ósq~ uq~ppppptï/** * Store bean in requested context. * If scope is null, save in REQUEST_SCOPE context. * * @param pageContext current pageContext * @param name Name of the bean * @param scope Scope under which bean is saved (page, request, session, application) * or null to store in request() instead * @param value Bean value to store * * @exception JspException if an invalid scope name * is requested */ pt setAttributeq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–tî if (scope == null) pageContext.setAttribute(name, value, PageContext.REQUEST_SCOPE); else if (scope.equalsIgnoreCase("page")) pageContext.setAttribute(name, value, PageContext.PAGE_SCOPE); else if (scope.equalsIgnoreCase("request")) pageContext.setAttribute(name, value, PageContext.REQUEST_SCOPE); else if (scope.equalsIgnoreCase("session")) pageContext.setAttribute(name, value, PageContext.SESSION_SCOPE); else if (scope.equalsIgnoreCase("application")) pageContext.setAttribute(name, value, PageContext.APPLICATION_SCOPE); else { throw new JspException( "Error - bad scope name '" + scope + "'"); } sq~ uq~q~pppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqDVsq~ uq~pppppppt pageContextq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~bsq~ uq~ppppqDVsq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqDVsq~ uq~pppppppt beanValueq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xpq~:Ósq~ uq~pppppt/** * Store bean in REQUEST_SCOPE context. * * @param pageContext current pageContext * @param name Name of the bean * @param value Bean value to store * * @exception JspException if an invalid scope name * is requested */ pt setAttributeq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–tQ pageContext.setAttribute(name, beanValue, PageContext.REQUEST_SCOPE); sq~ uq~q~pppq~–q~–xqÌBsq~isq~ uq~sq~bsq~ uq~ppppqDsq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqDsq~ uq~pppppppt pageContextq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xppq~:Ósq~ uq~pppppt¾/** * Get component definition by its name. * @param name Definition name * @param pageContext The PageContext for the current page * @throws JspException - */ ptgetComponentDefinitionq~rxsq~ uq~pppppq~–q~—q~–q~¾pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t0 try { return DefinitionsUtil.getDefinition(name, pageContext); } catch( NoSuchDefinitionException ex ) { throw new JspException ( "Error : Can't get component definition for '" + name + "'. Check if this name exist in component definitions." ); } catch( FactoryNotFoundException ex ) { // factory not found. throw new JspException ( ex.getMessage() ); } // end catch catch( DefinitionsFactoryException ex ) { if(debug) ex.printStackTrace( ); // Save exception to be able to show it later saveException( pageContext, ex); throw new JspException ( ex.getMessage() ); } // end catch sq~ uq~q~pppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqD sq~ uq~pppppppt scopeNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqD sq~ uq~pppppppt defaultValueq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xppq~:Ósq~ uq~ppppptU/** * Get scope value from string value * @param scopeName Scope as a String. * @param defaultValue Returned default value, if not found. * @return Scope as an int, or defaultValue if scope is null. * @throws JspException Scope name is not recognized as a valid scope. */ ptgetScopeq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t if (scopeName == null) { return defaultValue; } if (scopeName.equalsIgnoreCase("component")) { return ComponentConstants.COMPONENT_SCOPE; } else if (scopeName.equalsIgnoreCase("template")) { return ComponentConstants.COMPONENT_SCOPE; } else if (scopeName.equalsIgnoreCase("tile")) { return ComponentConstants.COMPONENT_SCOPE; } else { return RequestUtils.getScope(scopeName); } sq~ uq~q~pppq~~q~~xqAÿsq~isq~ uq~sq~bsq~ uq~ppppqDÁsq~ uq~ppppppptbeanNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqDÁsq~ uq~pppppppt scopeNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqDÁsq~ uq~pppppppt pageContextq~{xsq~ uq~pppppq~~q~q~~q~pq~€xpq~:Ósq~ uq~pppppt/** * Retrieve bean from page context, using specified scope. * If scope is not set, use findAttribute(). * * @param beanName Name of bean to retrieve. * @param scopeName Scope or null. If null, bean is searched using * findAttribute(). * @param pageContext Current pageContext. * @return Requested bean or null if not found. * @throws JspException Scope name is not recognized as a valid scope. */ pt retrieveBeanq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~tŠ if (scopeName == null) { return findAttribute(beanName, pageContext); } // Default value doesn't matter because we have already check it int scope = getScope(scopeName, PageContext.PAGE_SCOPE); //return pageContext.getAttribute( beanName, scope ); return getAttribute(beanName, scope, pageContext); sq~ uq~q~pppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqDêsq~ uq~ppppppptbeanNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqDêsq~ uq~pppppppt pageContextq~{xsq~ uq~pppppq~~q~q~~q~pq~€xppq~:Ósq~ uq~pppppt2/** * Search attribute in different contexts. * First, check in component context, then use pageContext.findAttribute(). * @param beanName Name of bean to retrieve. * @param pageContext Current pageContext. * @return Requested bean or null if not found. */ pt findAttributeq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t¨ ComponentContext compContext = ComponentContext.getContext(pageContext.getRequest()); if (compContext != null) { Object attribute = compContext.findAttribute(beanName, pageContext); if (attribute != null) { return attribute; } } // Search in pageContext scopes return pageContext.findAttribute(beanName); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqE sq~ uq~ppppppptbeanNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqE sq~ uq~ppppppptscopeq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~bsq~ uq~ppppqE sq~ uq~pppppppt pageContextq~{xsq~ uq~pppppq~~q~q~~q~pq~€xpq~:Ósq~ uq~pppppt|/** * Get object from requested context. Return null if not found. * Context can be "component" or normal JSP contexts. * @param beanName Name of bean to retrieve. * @param scope Scope from which bean must be retrieved. * @param pageContext Current pageContext. * @return Requested bean or null if not found. */ pt getAttributeq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t# if (scope == ComponentConstants.COMPONENT_SCOPE) { ComponentContext compContext = ComponentContext.getContext(pageContext.getRequest()); return compContext.getAttribute(beanName); } return pageContext.getAttribute(beanName, scope); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqE4sq~ uq~ppppppptbeanNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqE4sq~ uq~pppppppt beanPropertyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqE4sq~ uq~pppppppt beanScopeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqE4sq~ uq~pppppppt pageContextq~{xsq~ uq~pppppq~~q~q~~q~pq~€xq~:Ósq~ uq~ppppptŒ/** * Locate and return the specified property of the specified bean, from * an optionally specified scope, in the specified page context. * * @param pageContext Page context to be searched. * @param beanName Name of the bean to be retrieved. * @param beanProperty Name of the property to be retrieved, or * null to retrieve the bean itself. * @param beanScope Scope to be searched (page, request, session, application) * or null to use findAttribute() instead. * * @exception JspException Scope name is not recognized as a valid scope * @exception JspException if the specified bean is not found * @exception JspException if accessing this property causes an * IllegalAccessException, IllegalArgumentException, * InvocationTargetException, or NoSuchMethodException */ ptgetRealValueFromBeanq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~tÒ try { Object realValue; Object bean = retrieveBean(beanName, beanScope, pageContext); if (bean != null && beanProperty != null) { realValue = getProperty(bean, beanProperty); } else { realValue = bean; // value can be null } return realValue; } catch (NoSuchMethodException ex) { throw new JspException( "Error - component.PutAttributeTag : Error while retrieving value from bean '" + beanName + "' with property '" + beanProperty + "' in scope '" + beanScope + "'. (exception : " + ex.getMessage()); } catch (InvocationTargetException ex) { throw new JspException( "Error - component.PutAttributeTag : Error while retrieving value from bean '" + beanName + "' with property '" + beanProperty + "' in scope '" + beanScope + "'. (exception : " + ex.getMessage()); } catch (IllegalAccessException ex) { throw new JspException( "Error - component.PutAttributeTag : Error while retrieving value from bean '" + beanName + "' with property '" + beanProperty + "' in scope '" + beanScope + "'. (exception : " + ex.getMessage()); } sq~ uq~q~pppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqEesq~ uq~pppppppt pageContextq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~bsq~ uq~ppppqEesq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqEesq~ uq~ppppppptvalueq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~bsq~ uq~ppppqEesq~ uq~ppppppptscopeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xq~:Ósq~ uq~pppppt/** * Store bean in requested context. * If scope is null, save it in REQUEST_SCOPE context. * * @param pageContext Current pageContext. * @param name Name of the bean. * @param scope Scope under which bean is saved (page, request, session, application) * or null to store in request() instead. * @param value Bean value to store. * * @exception JspException Scope name is not recognized as a valid scope */ pt setAttributeq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~tû if (scope == null) pageContext.setAttribute(name, value, PageContext.REQUEST_SCOPE); else if (scope.equalsIgnoreCase("page")) pageContext.setAttribute(name, value, PageContext.PAGE_SCOPE); else if (scope.equalsIgnoreCase("request")) pageContext.setAttribute(name, value, PageContext.REQUEST_SCOPE); else if (scope.equalsIgnoreCase("session")) pageContext.setAttribute(name, value, PageContext.SESSION_SCOPE); else if (scope.equalsIgnoreCase("application")) pageContext.setAttribute(name, value, PageContext.APPLICATION_SCOPE); else { throw new JspException("Error - bad scope name '" + scope + "'"); } sq~ uq~q~pppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqE–sq~ uq~pppppppt pageContextq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~bsq~ uq~ppppqE–sq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqE–sq~ uq~pppppppt beanValueq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xpq~:Ósq~ uq~pppppt/** * Store bean in REQUEST_SCOPE context. * * @param pageContext Current pageContext. * @param name Name of the bean. * @param beanValue Bean value to store. * * @exception JspException Scope name is not recognized as a valid scope */ pt setAttributeq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~tU pageContext.setAttribute(name, beanValue, PageContext.REQUEST_SCOPE); sq~ uq~q~pppq~~q~~xq̼sq~isq~ uq~sq~bsq~ uq~ppppqE¿sq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqE¿sq~ uq~pppppppt pageContextq~{xsq~ uq~pppppq~~q~q~~q~pq~€xppq~:Ósq~ uq~ppppptÀ/** * Get component definition by its name. * @param name Definition name. * @param pageContext The PageContext for the current page. * @throws JspException - */ ptgetComponentDefinitionq~{xsq~ uq~pppppq~~q~q~~q~¾pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t‚ try { return TilesUtil.getDefinition( name, pageContext.getRequest(), pageContext.getServletContext()); } catch (NoSuchDefinitionException ex) { throw new JspException( "Error : Can't get component definition for '" + name + "'. Check if this name exist in component definitions."); } catch (FactoryNotFoundException ex) { // factory not found. throw new JspException(ex.getMessage()); } catch (DefinitionsFactoryException ex) { if (debug) ex.printStackTrace(); // Save exception to be able to show it later saveException(pageContext, ex); throw new JspException(ex.getMessage()); } sq~ uq~q~pppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqEàsq~ uq~pppppppt scopeNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqEàsq~ uq~pppppppt defaultValueq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxppq~:Ósq~ uq~ppppptU/** * Get scope value from string value * @param scopeName Scope as a String. * @param defaultValue Returned default value, if not found. * @return Scope as an int, or defaultValue if scope is null. * @throws JspException Scope name is not recognized as a valid scope. */ ptgetScopeq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft if (scopeName == null) { return defaultValue; } if (scopeName.equalsIgnoreCase("component")) { return ComponentConstants.COMPONENT_SCOPE; } else if (scopeName.equalsIgnoreCase("template")) { return ComponentConstants.COMPONENT_SCOPE; } else if (scopeName.equalsIgnoreCase("tile")) { return ComponentConstants.COMPONENT_SCOPE; } else { return RequestUtils.getScope(scopeName); } sq~ uq~q~pppq~fq~fxqB sq~isq~ uq~sq~bsq~ uq~ppppqFsq~ uq~ppppppptbeanNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqFsq~ uq~pppppppt scopeNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqFsq~ uq~pppppppt pageContextq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxpq~:Ósq~ uq~pppppt/** * Retrieve bean from page context, using specified scope. * If scope is not set, use findAttribute(). * * @param beanName Name of bean to retrieve. * @param scopeName Scope or null. If null, bean is searched using * findAttribute(). * @param pageContext Current pageContext. * @return Requested bean or null if not found. * @throws JspException Scope name is not recognized as a valid scope. */ pt retrieveBeanq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ftŠ if (scopeName == null) { return findAttribute(beanName, pageContext); } // Default value doesn't matter because we have already check it int scope = getScope(scopeName, PageContext.PAGE_SCOPE); //return pageContext.getAttribute( beanName, scope ); return getAttribute(beanName, scope, pageContext); sq~ uq~q~pppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqF*sq~ uq~ppppppptbeanNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqF*sq~ uq~pppppppt pageContextq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxppq~:Ósq~ uq~pppppt2/** * Search attribute in different contexts. * First, check in component context, then use pageContext.findAttribute(). * @param beanName Name of bean to retrieve. * @param pageContext Current pageContext. * @return Requested bean or null if not found. */ pt findAttributeq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft¨ ComponentContext compContext = ComponentContext.getContext(pageContext.getRequest()); if (compContext != null) { Object attribute = compContext.findAttribute(beanName, pageContext); if (attribute != null) { return attribute; } } // Search in pageContext scopes return pageContext.findAttribute(beanName); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqFKsq~ uq~ppppppptbeanNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqFKsq~ uq~ppppppptscopeq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~bsq~ uq~ppppqFKsq~ uq~pppppppt pageContextq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxpq~:Ósq~ uq~pppppt|/** * Get object from requested context. Return null if not found. * Context can be "component" or normal JSP contexts. * @param beanName Name of bean to retrieve. * @param scope Scope from which bean must be retrieved. * @param pageContext Current pageContext. * @return Requested bean or null if not found. */ pt getAttributeq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft# if (scope == ComponentConstants.COMPONENT_SCOPE) { ComponentContext compContext = ComponentContext.getContext(pageContext.getRequest()); return compContext.getAttribute(beanName); } return pageContext.getAttribute(beanName, scope); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqFtsq~ uq~ppppppptbeanNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqFtsq~ uq~pppppppt beanPropertyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqFtsq~ uq~pppppppt beanScopeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqFtsq~ uq~pppppppt pageContextq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxq~:Ósq~ uq~ppppptŒ/** * Locate and return the specified property of the specified bean, from * an optionally specified scope, in the specified page context. * * @param pageContext Page context to be searched. * @param beanName Name of the bean to be retrieved. * @param beanProperty Name of the property to be retrieved, or * null to retrieve the bean itself. * @param beanScope Scope to be searched (page, request, session, application) * or null to use findAttribute() instead. * * @exception JspException Scope name is not recognized as a valid scope * @exception JspException if the specified bean is not found * @exception JspException if accessing this property causes an * IllegalAccessException, IllegalArgumentException, * InvocationTargetException, or NoSuchMethodException */ ptgetRealValueFromBeanq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ftÒ try { Object realValue; Object bean = retrieveBean(beanName, beanScope, pageContext); if (bean != null && beanProperty != null) { realValue = getProperty(bean, beanProperty); } else { realValue = bean; // value can be null } return realValue; } catch (NoSuchMethodException ex) { throw new JspException( "Error - component.PutAttributeTag : Error while retrieving value from bean '" + beanName + "' with property '" + beanProperty + "' in scope '" + beanScope + "'. (exception : " + ex.getMessage()); } catch (InvocationTargetException ex) { throw new JspException( "Error - component.PutAttributeTag : Error while retrieving value from bean '" + beanName + "' with property '" + beanProperty + "' in scope '" + beanScope + "'. (exception : " + ex.getMessage()); } catch (IllegalAccessException ex) { throw new JspException( "Error - component.PutAttributeTag : Error while retrieving value from bean '" + beanName + "' with property '" + beanProperty + "' in scope '" + beanScope + "'. (exception : " + ex.getMessage()); } sq~ uq~q~pppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqF¥sq~ uq~pppppppt pageContextq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~bsq~ uq~ppppqF¥sq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqF¥sq~ uq~ppppppptvalueq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~bsq~ uq~ppppqF¥sq~ uq~ppppppptscopeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxq~:Ósq~ uq~pppppt/** * Store bean in requested context. * If scope is null, save it in REQUEST_SCOPE context. * * @param pageContext Current pageContext. * @param name Name of the bean. * @param scope Scope under which bean is saved (page, request, session, application) * or null to store in request() instead. * @param value Bean value to store. * * @exception JspException Scope name is not recognized as a valid scope */ pt setAttributeq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ftû if (scope == null) pageContext.setAttribute(name, value, PageContext.REQUEST_SCOPE); else if (scope.equalsIgnoreCase("page")) pageContext.setAttribute(name, value, PageContext.PAGE_SCOPE); else if (scope.equalsIgnoreCase("request")) pageContext.setAttribute(name, value, PageContext.REQUEST_SCOPE); else if (scope.equalsIgnoreCase("session")) pageContext.setAttribute(name, value, PageContext.SESSION_SCOPE); else if (scope.equalsIgnoreCase("application")) pageContext.setAttribute(name, value, PageContext.APPLICATION_SCOPE); else { throw new JspException("Error - bad scope name '" + scope + "'"); } sq~ uq~q~pppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqFÖsq~ uq~pppppppt pageContextq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~bsq~ uq~ppppqFÖsq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqFÖsq~ uq~pppppppt beanValueq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxpq~:Ósq~ uq~pppppt/** * Store bean in REQUEST_SCOPE context. * * @param pageContext Current pageContext. * @param name Name of the bean. * @param beanValue Bean value to store. * * @exception JspException Scope name is not recognized as a valid scope */ pt setAttributeq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ftU pageContext.setAttribute(name, beanValue, PageContext.REQUEST_SCOPE); sq~ uq~q~pppq~fq~fxqÍ6sq~isq~ uq~sq~bsq~ uq~ppppqFÿsq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqFÿsq~ uq~pppppppt pageContextq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxppq~:Ósq~ uq~ppppptÀ/** * Get component definition by its name. * @param name Definition name. * @param pageContext The PageContext for the current page. * @throws JspException - */ ptgetComponentDefinitionq~cxsq~ uq~pppppq~fq~gq~fq~¾pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft‚ try { return TilesUtil.getDefinition( name, pageContext.getRequest(), pageContext.getServletContext()); } catch (NoSuchDefinitionException ex) { throw new JspException( "Error : Can't get component definition for '" + name + "'. Check if this name exist in component definitions."); } catch (FactoryNotFoundException ex) { // factory not found. throw new JspException(ex.getMessage()); } catch (DefinitionsFactoryException ex) { if (debug) ex.printStackTrace(); // Save exception to be able to show it later saveException(pageContext, ex); throw new JspException(ex.getMessage()); } sq~ uq~q~pppq~fq~fxpppq~:Ðsq~ uq~ppppppptTagUtilsq~¢xsq~ uq~ q×Ðqôøqü"qøzqìspppppq~¥sq~ uq~sq~)sq~ uq~ppppsq~/sq~ uq~qG'pppq~ sq~ uq~pppp. * *//** * Init definitions factory. */ ptInitDefinitionsTag.javaq~fxsq~ uq~ppppsq~ uq~qêPpppq~fxsq~ uq~ppppsq~#q~9xq~?^q~C@q9pppppq~–sq~ uq~q?ªq9‰ppsq~ uq~ppppq~–q~–sq~Qsq~ uq~sq~Csq~ uq~ppppqG^sq~ uq~ppppsq~#q~Öxsq~Csq~ uq~ppppqG^sq~ uq~ppppsq~#q~°xppq~sq~ uq~pppppt /* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/tiles/DefinitionsFactory.java,v 1.2 2002/11/16 06:04:28 jmitchell Exp $ * $Revision: 1.2 $ * $Date: 2002/11/16 06:04:28 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Tiles Definition factory. * This interface replace old ComponentDefinitionsFactory. * Main method getDefinition() is exactly the same. Initialization method change. * This interface allows to retrieve a definition by its name, independently of * the factory implementation. * Object life cycle is as follow: *

        *
      • Constructor: create object
      • *
      • setConfig: set config and initialize factory. After first call to this * method, factory is operational.
      • *
      • destroy: factory is being shutdown.
      • *
      * Implementation must be Serializable, in order to be compliant with web Container * having this constraint (Weblogic 6.x). */ ptDefinitionsFactory.javaq~fxsq~ uq~ppppsq~ uq~q~9pppq~fxsq~ uq~q~'Rppppq~–sq~ uq~ppppsq~ /uq~2q']sq~isq~ uq~sq~bsq~ uq~ppppqG{sq~ uq~ppppppptservletContextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xsq~bsq~ uq~ppppqG{sq~ uq~pppppppt propertiesq~rxsq~ uq~pppppq~–q~—q~–q~¼pq~˜xsq~bsq~ uq~ppppqG{sq~ uq~pppppppt classnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpq~&wsq~ uq~ppppptv/** * Create Definition factory. * If a factory class name is provided, a factory of this class is created. Otherwise, * default factory is created. * @param classname Class name of the factory to create. * @param servletContext Servlet Context passed to newly created factory. * @param properties Map of name/property used to initialize factory configuration object. * @return newly created factory. * @throws DefinitionsFactoryException If an error occur while initializing factory * @deprecated Use createDefinitionsFactory(ServletContext servletContext, ServletConfig servletConfig) */ ptcreateDefinitionsFactoryq~rxsq~ uq~pppppq~–q~—q~–q~9pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–tP // Create config object DefinitionsFactoryConfig factoryConfig = new DefinitionsFactoryConfig(); // populate it from map. try { factoryConfig.populate( properties ); } catch(Exception ex ) { throw new DefinitionsFactoryException( "Error - createDefinitionsFactory : Can't populate config object from properties map", ex ); } // Add classname if( classname != null ) factoryConfig.setFactoryClassname(classname); // Create factory using config object return createDefinitionsFactory( servletContext, factoryConfig ); sq~ uq~q~pppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqG¤sq~ uq~ppppppptservletContextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xsq~bsq~ uq~ppppqG¤sq~ uq~pppppppt propertiesq~rxsq~ uq~pppppq~–q~—q~–q~¼pq~˜xppq~&wsq~ uq~pppppt‚/** * Create default Definition factory. * @param servletContext Servlet Context passed to newly created factory. * @param properties Map of name/property used to initialize factory configuration object. * @return newly created factory of type ConfigurableDefinitionsFactory. * @throws DefinitionsFactoryException If an error occur while initializing factory */ ptcreateDefinitionsFactoryq~rxsq~ uq~pppppq~–q~—q~–q~9pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–tL return createDefinitionsFactory( servletContext, properties, null ); sq~ uq~q~pppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqGÅsq~ uq~ppppppptservletContextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xsq~bsq~ uq~ppppqGÅsq~ uq~pppppppt servletConfigq~rxsq~ uq~pppppq~–q~—q~–q~' pq~˜xppq~&wsq~ uq~pppppt¨/** * Create Definition factory. * Create configuration object from servlet web.xml file, then create * ConfigurableDefinitionsFactory and initialized it with object. *

      * Convenience method. Calls createDefinitionsFactory(ServletContext servletContext, DefinitionsFactoryConfig factoryConfig) * * @param servletContext Servlet Context passed to newly created factory. * @param servletConfig Servlet config containing parameters to be passed to factory configuration object. * @return newly created factory of type ConfigurableDefinitionsFactory. * @throws DefinitionsFactoryException If an error occur while initializing factory */ ptcreateDefinitionsFactoryq~rxsq~ uq~pppppq~–q~—q~–q~9pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–tÞ // Read factory config DefinitionsFactoryConfig factoryConfig = readFactoryConfig(servletConfig); // Create factory using config object return createDefinitionsFactory( servletContext, factoryConfig ); sq~ uq~q~pppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqGæsq~ uq~ppppppptservletContextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xsq~bsq~ uq~ppppqGæsq~ uq~pppppppt servletConfigq~rxsq~ uq~pppppq~–q~—q~–q~' pq~˜xsq~bsq~ uq~ppppqGæsq~ uq~pppppppt checkIfExistq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xpq~&wsq~ uq~pppppt*/** * Create Definition factory. * Create configuration object from servlet web.xml file, then create * ConfigurableDefinitionsFactory and initialized it with object. *

      * If checkIfExist is true, start by checking if factory already exist. If yes, * return it. If no, create a new one. *

      * If checkIfExist is false, factory is always created. *

      * Convenience method. Calls createDefinitionsFactory(ServletContext servletContext, DefinitionsFactoryConfig factoryConfig) * * @param servletContext Servlet Context passed to newly created factory. * @param servletConfig Servlet config containing parameters to be passed to factory configuration object. * @param checkIfExist Check if factory already exist. If true and factory exist, return it. * If true and factory doesn't exist, create it. If false, create it in all cases. * @return newly created factory of type ConfigurableDefinitionsFactory. * @throws DefinitionsFactoryException If an error occur while initializing factory */ ptcreateDefinitionsFactoryq~rxsq~ uq~pppppq~–q~—q~–q~9pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t% if( checkIfExist ) { // Check if already exist in context DefinitionsFactory factory = getDefinitionsFactory( servletContext); if( factory != null ) return factory; } // creation return createDefinitionsFactory( servletContext, servletConfig); sq~ uq~q~pppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqHsq~ uq~ppppppptservletContextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xsq~bsq~ uq~ppppqHsq~ uq~pppppppt factoryConfigq~rxsq~ uq~pppppq~–q~—q~–q~'lpq~˜xppq~&wsq~ uq~pppppt¦/** * Create Definition factory from specified configuration object. * Create a ConfigurableDefinitionsFactory and initialize it with the configuration * object. This later can contains the factory classname to use. * Factory is made accessible from tags. *

      * Fallback of several factory creation methods. * * @param servletContext Servlet Context passed to newly created factory. * @param factoryConfig Configuration object passed to factory. * @return newly created factory of type ConfigurableDefinitionsFactory. * @throws DefinitionsFactoryException If an error occur while initializing factory */ ptcreateDefinitionsFactoryq~rxsq~ uq~pppppq~–q~—q~–q~9pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t´ // Set user debug level setUserDebugLevel( factoryConfig.getDebugLevel() ); // Create configurable factory DefinitionsFactory factory = createDefinitionFactoryInstance(factoryConfig.getFactoryClassname()); factory.init( factoryConfig, servletContext ); // Make factory accessible from jsp tags DefinitionsUtil.makeDefinitionsFactoryAccessible(factory, servletContext ); return factory; sq~ uq~q~pppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqH0sq~ uq~pppppppt classnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~&wsq~ uq~pppppt6/** * Create Definition factory from provided classname. * Factory class must extends TilesDefinitionsFactory. * @param classname Class name of the factory to create. * @return newly created factory. * @throws DefinitionsFactoryException If an error occur while initializing factory */ ptcreateDefinitionFactoryInstanceq~rxsq~ uq~pppppq~–q~—q~–q~9pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t try { Class factoryClass = Class.forName(classname); Object factory = factoryClass.newInstance(); // Backward compatibility : if factory classes implements old interface, // provide appropriate wrapper if( factory instanceof ComponentDefinitionsFactory ) { factory = new ComponentDefinitionsFactoryWrapper( (ComponentDefinitionsFactory)factory ); } // end if return (DefinitionsFactory)factory; } catch( ClassCastException ex ) { // Bad classname throw new DefinitionsFactoryException( "Error - createDefinitionsFactory : Factory class '" + classname +" must implements 'TilesDefinitionsFactory'.", ex ); } catch( ClassNotFoundException ex ) { // Bad classname throw new DefinitionsFactoryException( "Error - createDefinitionsFactory : Bad class name '" + classname +"'.", ex ); } catch( InstantiationException ex ) { // Bad constructor or error throw new DefinitionsFactoryException( ex ); } catch( IllegalAccessException ex ) { // throw new DefinitionsFactoryException( ex ); } sq~ uq~q~pppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqHIsq~ uq~ppppppptservletContextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xpppq~&wsq~ uq~pppppt˜/** * Get definition factory from appropriate servlet context. * @return Definitions factory or null if not found. * @since 20020708 */ ptgetDefinitionsFactoryq~rxsq~ uq~pppppq~–q~—q~–q~9pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–tT return (DefinitionsFactory)servletContext.getAttribute(DEFINITIONS_FACTORY); sq~ uq~ppppq~–q~–xsq~bsq~ uq~ppppsq~isq~ uq~qHbsq~bsq~ uq~ppppqHesq~ uq~ppppppptservletContextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xppq~&wsq~ uq~ppppptã/** * Make definition factory accessible to Tags. * Factory is stored in servlet context. * @param factory Factory to make accessible * @param servletContext Current servlet context * @since 20020708 */ pt makeDefinitionsFactoryAccessibleq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–tB servletContext.setAttribute(DEFINITIONS_FACTORY, factory); sq~ uq~ppppq~–q~–xsq~ uq~ppppppptfactoryq~rxsq~ uq~pppppq~–q~—q~–q~9pq~˜xq~Ï&q~¹›q§sq~isq~ uq~sq~bsq~ uq~ppppqHƒsq~ uq~ppppppptservletContextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xsq~bsq~ uq~ppppqHƒsq~ uq~pppppppt propertiesq~{xsq~ uq~pppppq~~q~q~~q~¼pq~€xsq~bsq~ uq~ppppqHƒsq~ uq~pppppppt classnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpq~&wsq~ uq~ppppptv/** * Create Definition factory. * If a factory class name is provided, a factory of this class is created. Otherwise, * default factory is created. * @param classname Class name of the factory to create. * @param servletContext Servlet Context passed to newly created factory. * @param properties Map of name/property used to initialize factory configuration object. * @return newly created factory. * @throws DefinitionsFactoryException If an error occur while initializing factory * @deprecated Use createDefinitionsFactory(ServletContext servletContext, ServletConfig servletConfig) */ ptcreateDefinitionsFactoryq~{xsq~ uq~pppppq~~q~q~~q~9pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~tP // Create config object DefinitionsFactoryConfig factoryConfig = new DefinitionsFactoryConfig(); // populate it from map. try { factoryConfig.populate( properties ); } catch(Exception ex ) { throw new DefinitionsFactoryException( "Error - createDefinitionsFactory : Can't populate config object from properties map", ex ); } // Add classname if( classname != null ) factoryConfig.setFactoryClassname(classname); // Create factory using config object return createDefinitionsFactory( servletContext, factoryConfig ); sq~ uq~q~pppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqH¬sq~ uq~ppppppptservletContextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xsq~bsq~ uq~ppppqH¬sq~ uq~pppppppt propertiesq~{xsq~ uq~pppppq~~q~q~~q~¼pq~€xppq~&wsq~ uq~pppppt‚/** * Create default Definition factory. * @param servletContext Servlet Context passed to newly created factory. * @param properties Map of name/property used to initialize factory configuration object. * @return newly created factory of type ConfigurableDefinitionsFactory. * @throws DefinitionsFactoryException If an error occur while initializing factory */ ptcreateDefinitionsFactoryq~{xsq~ uq~pppppq~~q~q~~q~9pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~tL return createDefinitionsFactory( servletContext, properties, null ); sq~ uq~q~pppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqHÍsq~ uq~ppppppptservletContextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xsq~bsq~ uq~ppppqHÍsq~ uq~pppppppt servletConfigq~{xsq~ uq~pppppq~~q~q~~q~' pq~€xppq~&wsq~ uq~pppppt¨/** * Create Definition factory. * Create configuration object from servlet web.xml file, then create * ConfigurableDefinitionsFactory and initialized it with object. *

      * Convenience method. Calls createDefinitionsFactory(ServletContext servletContext, DefinitionsFactoryConfig factoryConfig) * * @param servletContext Servlet Context passed to newly created factory. * @param servletConfig Servlet config containing parameters to be passed to factory configuration object. * @return newly created factory of type ConfigurableDefinitionsFactory. * @throws DefinitionsFactoryException If an error occur while initializing factory */ ptcreateDefinitionsFactoryq~{xsq~ uq~pppppq~~q~q~~q~9pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~tÞ // Read factory config DefinitionsFactoryConfig factoryConfig = readFactoryConfig(servletConfig); // Create factory using config object return createDefinitionsFactory( servletContext, factoryConfig ); sq~ uq~q~pppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqHîsq~ uq~ppppppptservletContextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xsq~bsq~ uq~ppppqHîsq~ uq~pppppppt servletConfigq~{xsq~ uq~pppppq~~q~q~~q~' pq~€xsq~bsq~ uq~ppppqHîsq~ uq~pppppppt checkIfExistq~{xsq~ uq~pppppq~~q~q~~q~pq~€xpq~&wsq~ uq~pppppt*/** * Create Definition factory. * Create configuration object from servlet web.xml file, then create * ConfigurableDefinitionsFactory and initialized it with object. *

      * If checkIfExist is true, start by checking if factory already exist. If yes, * return it. If no, create a new one. *

      * If checkIfExist is false, factory is always created. *

      * Convenience method. Calls createDefinitionsFactory(ServletContext servletContext, DefinitionsFactoryConfig factoryConfig) * * @param servletContext Servlet Context passed to newly created factory. * @param servletConfig Servlet config containing parameters to be passed to factory configuration object. * @param checkIfExist Check if factory already exist. If true and factory exist, return it. * If true and factory doesn't exist, create it. If false, create it in all cases. * @return newly created factory of type ConfigurableDefinitionsFactory. * @throws DefinitionsFactoryException If an error occur while initializing factory */ ptcreateDefinitionsFactoryq~{xsq~ uq~pppppq~~q~q~~q~9pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t% if( checkIfExist ) { // Check if already exist in context DefinitionsFactory factory = getDefinitionsFactory( servletContext); if( factory != null ) return factory; } // creation return createDefinitionsFactory( servletContext, servletConfig); sq~ uq~q~pppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqIsq~ uq~pppppppt classnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~&wsq~ uq~pppppt×/** * Create Definition factory from provided classname. * Factory class must extends TilesDefinitionsFactory. * @deprecated No direct replacement. Use createDefinitionFactory * {@link TilesUtil#createDefinitionsFactory(ServletContext, DefinitionsFactoryConfig)}. * @param classname Class name of the factory to create. * @return newly created factory. * @throws DefinitionsFactoryException If an error occur while initializing factory */ ptcreateDefinitionFactoryInstanceq~{xsq~ uq~pppppq~~q~q~~q~9pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~tÅ try { Class factoryClass = applicationClass(classname); Object factory = factoryClass.newInstance(); // Backward compatibility : if factory classes implements old interface, // provide appropriate wrapper if( factory instanceof ComponentDefinitionsFactory ) { factory = new ComponentDefinitionsFactoryWrapper( (ComponentDefinitionsFactory)factory ); } // end if return (DefinitionsFactory)factory; } catch( ClassCastException ex ) { // Bad classname throw new DefinitionsFactoryException( "Error - createDefinitionsFactory : Factory class '" + classname +" must implements 'TilesDefinitionsFactory'.", ex ); } catch( ClassNotFoundException ex ) { // Bad classname throw new DefinitionsFactoryException( "Error - createDefinitionsFactory : Bad class name '" + classname +"'.", ex ); } catch( InstantiationException ex ) { // Bad constructor or error throw new DefinitionsFactoryException( ex ); } catch( IllegalAccessException ex ) { // throw new DefinitionsFactoryException( ex ); } sq~ uq~q~pppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqI0sq~ uq~ppppppptservletContextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xpppq~&wsq~ uq~ppppptö/** * Get definition factory from appropriate servlet context. * @return Definitions factory or null if not found. * @deprecated Use {@link TilesUtil#getDefinitionsFactory(ServletRequest, ServletContext)} * @since 20020708 */ ptgetDefinitionsFactoryq~{xsq~ uq~pppppq~~q~q~~q~9pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~tT return (DefinitionsFactory)servletContext.getAttribute(DEFINITIONS_FACTORY); sq~ uq~ppppq~~q~~xsq~bsq~ uq~ppppsq~isq~ uq~qIIsq~bsq~ uq~ppppqILsq~ uq~ppppppptservletContextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xppq~&wsq~ uq~ppppptN/** * Make definition factory accessible to Tags. * Factory is stored in servlet context. * @deprecated Use {@link TilesUtil#createDefinitionsFactory(ServletContext, DefinitionsFactoryConfig)} * @param factory Factory to make accessible * @param servletContext Current servlet context * @since 20020708 */ pt makeDefinitionsFactoryAccessibleq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~tB servletContext.setAttribute(DEFINITIONS_FACTORY, factory); sq~ uq~ppppq~~q~~xsq~ uq~ppppppptfactoryq~{xsq~ uq~pppppq~~q~q~~q~9pq~€xq³¼q©,q©Lq©osq~isq~ uq~sq~bsq~ uq~ppppqIjsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~°pq~€xsq~bsq~ uq~ppppqIjsq~ uq~ppppppptservletContextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xppq~8Bsq~ uq~pppppt•/** * Get definition factory from appropriate servlet context. * @return Definitions factory or null if not found. */ ptgetDefinitionsFactoryq~{xsq~ uq~pppppq~~q~q~~q~9pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~tL return tilesUtilImpl.getDefinitionsFactory(request, servletContext); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqI‹sq~ uq~ppppppptservletContextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xsq~bsq~ uq~ppppqI‹sq~ uq~pppppppt factoryConfigq~{xsq~ uq~pppppq~~q~q~~q~'lpq~€xppq~8Bsq~ uq~pppppt¥/** * Create Definition factory from specified configuration object. * Create a ConfigurableDefinitionsFactory and initialize it with the configuration * object. This later can contain the factory classname to use. * Factory is made accessible from tags. *

      * Fallback of several factory creation methods. * * @param servletContext Servlet Context passed to newly created factory. * @param factoryConfig Configuration object passed to factory. * @return newly created factory of type ConfigurableDefinitionsFactory. * @throws DefinitionsFactoryException If an error occur while initializing factory */ ptcreateDefinitionsFactoryq~{xsq~ uq~pppppq~~q~q~~q~9pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~tU return tilesUtilImpl.createDefinitionsFactory(servletContext, factoryConfig); sq~ uq~q~pppq~~q~~xq~8ÿsq~isq~ uq~sq~bsq~ uq~ppppqI¬sq~ uq~ppppppptservletContextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xsq~bsq~ uq~ppppqI¬sq~ uq~pppppppt factoryConfigq~{xsq~ uq~pppppq~~q~q~~q~'lpq~€xppq~8]sq~ uq~pppppt/** * Create Definition factory from specified configuration object. * Create an instance of the factory with the class specified in the config * object. Then, initialize this factory and finally store the factory in * appropriate context by calling * {@link #makeDefinitionsFactoryAccessible(DefinitionsFactory, ServletContext)}. * Factory creation is done by {@link #createDefinitionFactoryInstance(String)}. *

      * * @param servletContext Servlet Context passed to newly created factory. * @param factoryConfig Configuration object passed to factory. * @return newly created factory of type specified in the config object. * @throws DefinitionsFactoryException If an error occur while initializing factory */ ptcreateDefinitionsFactoryq~{xsq~ uq~pppppq~~q~q~~q~9pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tm // Create configurable factory DefinitionsFactory factory = createDefinitionFactoryInstance(factoryConfig.getFactoryClassname()); factory.init( factoryConfig, servletContext ); // Make factory accessible from jsp tags (push it in appropriate context) makeDefinitionsFactoryAccessible(factory, servletContext ); return factory; sq~ uq~q~pppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqIÌsq~ uq~pppppppt classnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~8]sq~ uq~ppppptì/** * Create Definition factory of specified classname. * Factory class must extend the {@link DefinitionsFactory} class. * The factory is wrapped appropriately with {@link ComponentDefinitionsFactoryWrapper} * if it is an instance of the deprecated ComponentDefinitionsFactory class. * @param classname Class name of the factory to create. * @return newly created factory. * @throws DefinitionsFactoryException If an error occur while initializing factory */ ptcreateDefinitionFactoryInstanceq~{xsq~ uq~pppppq~~q~q~~q~9pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~tÄ try { Class factoryClass = applicationClass(classname); Object factory = factoryClass.newInstance(); // Backward compatibility : if factory classes implements old interface, // provide appropriate wrapper if( factory instanceof ComponentDefinitionsFactory ) { factory = new ComponentDefinitionsFactoryWrapper( (ComponentDefinitionsFactory)factory ); } // end if return (DefinitionsFactory)factory; } catch( ClassCastException ex ) { // Bad classname throw new DefinitionsFactoryException( "Error - createDefinitionsFactory : Factory class '" + classname +" must implement 'TilesDefinitionsFactory'.", ex ); } catch( ClassNotFoundException ex ) { // Bad classname throw new DefinitionsFactoryException( "Error - createDefinitionsFactory : Bad class name '" + classname +"'.", ex ); } catch( InstantiationException ex ) { // Bad constructor or error throw new DefinitionsFactoryException( ex ); } catch( IllegalAccessException ex ) { // throw new DefinitionsFactoryException( ex ); } sq~ uq~q~pppq~~q~~xsq~bsq~ uq~ppppsq~isq~ uq~qIäsq~bsq~ uq~ppppqIçsq~ uq~ppppppptservletContextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xppq~8]sq~ uq~ppppptÒ/** * Make definition factory accessible to Tags. * Factory is stored in servlet context. * @param factory Factory to be made accessible. * @param servletContext Current servlet context. */ pt makeDefinitionsFactoryAccessibleq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~tB servletContext.setAttribute(DEFINITIONS_FACTORY, factory); sq~ uq~ppppq~~q~~xsq~ uq~ppppppptfactoryq~{xsq~ uq~pppppq~~q~q~~q~9pq~€xq¨wsq~isq~ uq~sq~bsq~ uq~ppppqJsq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxsq~bsq~ uq~ppppqJsq~ uq~pppppppt propertiesq~cxsq~ uq~pppppq~fq~gq~fq~¼pq~hxsq~bsq~ uq~ppppqJsq~ uq~pppppppt classnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpq~&wsq~ uq~ppppptv/** * Create Definition factory. * If a factory class name is provided, a factory of this class is created. Otherwise, * default factory is created. * @param classname Class name of the factory to create. * @param servletContext Servlet Context passed to newly created factory. * @param properties Map of name/property used to initialize factory configuration object. * @return newly created factory. * @throws DefinitionsFactoryException If an error occur while initializing factory * @deprecated Use createDefinitionsFactory(ServletContext servletContext, ServletConfig servletConfig) */ ptcreateDefinitionsFactoryq~cxsq~ uq~pppppq~fq~gq~fq~9pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ftP // Create config object DefinitionsFactoryConfig factoryConfig = new DefinitionsFactoryConfig(); // populate it from map. try { factoryConfig.populate( properties ); } catch(Exception ex ) { throw new DefinitionsFactoryException( "Error - createDefinitionsFactory : Can't populate config object from properties map", ex ); } // Add classname if( classname != null ) factoryConfig.setFactoryClassname(classname); // Create factory using config object return createDefinitionsFactory( servletContext, factoryConfig ); sq~ uq~q~pppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqJ-sq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxsq~bsq~ uq~ppppqJ-sq~ uq~pppppppt propertiesq~cxsq~ uq~pppppq~fq~gq~fq~¼pq~hxppq~&wsq~ uq~pppppt‚/** * Create default Definition factory. * @param servletContext Servlet Context passed to newly created factory. * @param properties Map of name/property used to initialize factory configuration object. * @return newly created factory of type ConfigurableDefinitionsFactory. * @throws DefinitionsFactoryException If an error occur while initializing factory */ ptcreateDefinitionsFactoryq~cxsq~ uq~pppppq~fq~gq~fq~9pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ftL return createDefinitionsFactory( servletContext, properties, null ); sq~ uq~q~pppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqJNsq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxsq~bsq~ uq~ppppqJNsq~ uq~pppppppt servletConfigq~cxsq~ uq~pppppq~fq~gq~fq~' pq~hxppq~&wsq~ uq~pppppt¨/** * Create Definition factory. * Create configuration object from servlet web.xml file, then create * ConfigurableDefinitionsFactory and initialized it with object. *

      * Convenience method. Calls createDefinitionsFactory(ServletContext servletContext, DefinitionsFactoryConfig factoryConfig) * * @param servletContext Servlet Context passed to newly created factory. * @param servletConfig Servlet config containing parameters to be passed to factory configuration object. * @return newly created factory of type ConfigurableDefinitionsFactory. * @throws DefinitionsFactoryException If an error occur while initializing factory */ ptcreateDefinitionsFactoryq~cxsq~ uq~pppppq~fq~gq~fq~9pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ftÞ // Read factory config DefinitionsFactoryConfig factoryConfig = readFactoryConfig(servletConfig); // Create factory using config object return createDefinitionsFactory( servletContext, factoryConfig ); sq~ uq~q~pppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqJosq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxsq~bsq~ uq~ppppqJosq~ uq~pppppppt servletConfigq~cxsq~ uq~pppppq~fq~gq~fq~' pq~hxsq~bsq~ uq~ppppqJosq~ uq~pppppppt checkIfExistq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxpq~&wsq~ uq~pppppt*/** * Create Definition factory. * Create configuration object from servlet web.xml file, then create * ConfigurableDefinitionsFactory and initialized it with object. *

      * If checkIfExist is true, start by checking if factory already exist. If yes, * return it. If no, create a new one. *

      * If checkIfExist is false, factory is always created. *

      * Convenience method. Calls createDefinitionsFactory(ServletContext servletContext, DefinitionsFactoryConfig factoryConfig) * * @param servletContext Servlet Context passed to newly created factory. * @param servletConfig Servlet config containing parameters to be passed to factory configuration object. * @param checkIfExist Check if factory already exist. If true and factory exist, return it. * If true and factory doesn't exist, create it. If false, create it in all cases. * @return newly created factory of type ConfigurableDefinitionsFactory. * @throws DefinitionsFactoryException If an error occur while initializing factory */ ptcreateDefinitionsFactoryq~cxsq~ uq~pppppq~fq~gq~fq~9pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft% if( checkIfExist ) { // Check if already exist in context DefinitionsFactory factory = getDefinitionsFactory( servletContext); if( factory != null ) return factory; } // creation return createDefinitionsFactory( servletContext, servletConfig); sq~ uq~q~pppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqJ˜sq~ uq~pppppppt classnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~&wsq~ uq~pppppt×/** * Create Definition factory from provided classname. * Factory class must extends TilesDefinitionsFactory. * @deprecated No direct replacement. Use createDefinitionFactory * {@link TilesUtil#createDefinitionsFactory(ServletContext, DefinitionsFactoryConfig)}. * @param classname Class name of the factory to create. * @return newly created factory. * @throws DefinitionsFactoryException If an error occur while initializing factory */ ptcreateDefinitionFactoryInstanceq~cxsq~ uq~pppppq~fq~gq~fq~9pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ftÅ try { Class factoryClass = applicationClass(classname); Object factory = factoryClass.newInstance(); // Backward compatibility : if factory classes implements old interface, // provide appropriate wrapper if( factory instanceof ComponentDefinitionsFactory ) { factory = new ComponentDefinitionsFactoryWrapper( (ComponentDefinitionsFactory)factory ); } // end if return (DefinitionsFactory)factory; } catch( ClassCastException ex ) { // Bad classname throw new DefinitionsFactoryException( "Error - createDefinitionsFactory : Factory class '" + classname +" must implements 'TilesDefinitionsFactory'.", ex ); } catch( ClassNotFoundException ex ) { // Bad classname throw new DefinitionsFactoryException( "Error - createDefinitionsFactory : Bad class name '" + classname +"'.", ex ); } catch( InstantiationException ex ) { // Bad constructor or error throw new DefinitionsFactoryException( ex ); } catch( IllegalAccessException ex ) { // throw new DefinitionsFactoryException( ex ); } sq~ uq~q~pppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqJ±sq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxpppq~&wsq~ uq~ppppptö/** * Get definition factory from appropriate servlet context. * @return Definitions factory or null if not found. * @deprecated Use {@link TilesUtil#getDefinitionsFactory(ServletRequest, ServletContext)} * @since 20020708 */ ptgetDefinitionsFactoryq~cxsq~ uq~pppppq~fq~gq~fq~9pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ftT return (DefinitionsFactory)servletContext.getAttribute(DEFINITIONS_FACTORY); sq~ uq~ppppq~fq~fxsq~bsq~ uq~ppppsq~isq~ uq~qJÊsq~bsq~ uq~ppppqJÍsq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxppq~&wsq~ uq~ppppptN/** * Make definition factory accessible to Tags. * Factory is stored in servlet context. * @deprecated Use {@link TilesUtil#createDefinitionsFactory(ServletContext, DefinitionsFactoryConfig)} * @param factory Factory to make accessible * @param servletContext Current servlet context * @since 20020708 */ pt makeDefinitionsFactoryAccessibleq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ftB servletContext.setAttribute(DEFINITIONS_FACTORY, factory); sq~ uq~ppppq~fq~fxsq~ uq~ppppppptfactoryq~cxsq~ uq~pppppq~fq~gq~fq~9pq~hxq³Üqª qª,qªOsq~isq~ uq~sq~bsq~ uq~ppppqJësq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~°pq~hxsq~bsq~ uq~ppppqJësq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxppq~8Bsq~ uq~pppppt•/** * Get definition factory from appropriate servlet context. * @return Definitions factory or null if not found. */ ptgetDefinitionsFactoryq~cxsq~ uq~pppppq~fq~gq~fq~9pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ftL return tilesUtilImpl.getDefinitionsFactory(request, servletContext); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqK sq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxsq~bsq~ uq~ppppqK sq~ uq~pppppppt factoryConfigq~cxsq~ uq~pppppq~fq~gq~fq~'lpq~hxppq~8Bsq~ uq~pppppt¥/** * Create Definition factory from specified configuration object. * Create a ConfigurableDefinitionsFactory and initialize it with the configuration * object. This later can contain the factory classname to use. * Factory is made accessible from tags. *

      * Fallback of several factory creation methods. * * @param servletContext Servlet Context passed to newly created factory. * @param factoryConfig Configuration object passed to factory. * @return newly created factory of type ConfigurableDefinitionsFactory. * @throws DefinitionsFactoryException If an error occur while initializing factory */ ptcreateDefinitionsFactoryq~cxsq~ uq~pppppq~fq~gq~fq~9pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ftU return tilesUtilImpl.createDefinitionsFactory(servletContext, factoryConfig); sq~ uq~q~pppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqK-sq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~°pq~hxsq~bsq~ uq~ppppqK-sq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxppq~8]sq~ uq~pppppt•/** * Get definition factory from appropriate servlet context. * @return Definitions factory or null if not found. */ ptgetDefinitionsFactoryq~cxsq~ uq~pppppq~fq~gq~fq~9pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftT return (DefinitionsFactory)servletContext.getAttribute(DEFINITIONS_FACTORY); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqKMsq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxsq~bsq~ uq~ppppqKMsq~ uq~pppppppt factoryConfigq~cxsq~ uq~pppppq~fq~gq~fq~'lpq~hxppq~8]sq~ uq~pppppt/** * Create Definition factory from specified configuration object. * Create an instance of the factory with the class specified in the config * object. Then, initialize this factory and finally store the factory in * appropriate context by calling * {@link #makeDefinitionsFactoryAccessible(DefinitionsFactory, ServletContext)}. * Factory creation is done by {@link #createDefinitionFactoryInstance(String)}. *

      * * @param servletContext Servlet Context passed to newly created factory. * @param factoryConfig Configuration object passed to factory. * @return newly created factory of type specified in the config object. * @throws DefinitionsFactoryException If an error occur while initializing factory */ ptcreateDefinitionsFactoryq~cxsq~ uq~pppppq~fq~gq~fq~9pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftm // Create configurable factory DefinitionsFactory factory = createDefinitionFactoryInstance(factoryConfig.getFactoryClassname()); factory.init( factoryConfig, servletContext ); // Make factory accessible from jsp tags (push it in appropriate context) makeDefinitionsFactoryAccessible(factory, servletContext ); return factory; sq~ uq~q~pppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqKmsq~ uq~pppppppt classnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~8]sq~ uq~ppppptì/** * Create Definition factory of specified classname. * Factory class must extend the {@link DefinitionsFactory} class. * The factory is wrapped appropriately with {@link ComponentDefinitionsFactoryWrapper} * if it is an instance of the deprecated ComponentDefinitionsFactory class. * @param classname Class name of the factory to create. * @return newly created factory. * @throws DefinitionsFactoryException If an error occur while initializing factory */ ptcreateDefinitionFactoryInstanceq~cxsq~ uq~pppppq~fq~gq~fq~9pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ftÄ try { Class factoryClass = applicationClass(classname); Object factory = factoryClass.newInstance(); // Backward compatibility : if factory classes implements old interface, // provide appropriate wrapper if( factory instanceof ComponentDefinitionsFactory ) { factory = new ComponentDefinitionsFactoryWrapper( (ComponentDefinitionsFactory)factory ); } // end if return (DefinitionsFactory)factory; } catch( ClassCastException ex ) { // Bad classname throw new DefinitionsFactoryException( "Error - createDefinitionsFactory : Factory class '" + classname +" must implement 'TilesDefinitionsFactory'.", ex ); } catch( ClassNotFoundException ex ) { // Bad classname throw new DefinitionsFactoryException( "Error - createDefinitionsFactory : Bad class name '" + classname +"'.", ex ); } catch( InstantiationException ex ) { // Bad constructor or error throw new DefinitionsFactoryException( ex ); } catch( IllegalAccessException ex ) { // throw new DefinitionsFactoryException( ex ); } sq~ uq~q~pppq~fq~fxsq~bsq~ uq~ppppsq~isq~ uq~qK…sq~bsq~ uq~ppppqKˆsq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxppq~8]sq~ uq~ppppptÒ/** * Make definition factory accessible to Tags. * Factory is stored in servlet context. * @param factory Factory to be made accessible. * @param servletContext Current servlet context. */ pt makeDefinitionsFactoryAccessibleq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ftB servletContext.setAttribute(DEFINITIONS_FACTORY, factory); sq~ uq~ppppq~fq~fxsq~ uq~ppppppptfactoryq~cxsq~ uq~pppppq~fq~gq~fq~9pq~hxpppq~¢xpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tT return (DefinitionsFactory)servletContext.getAttribute(DEFINITIONS_FACTORY); sq~ uq~ppppq~~q~~xqI¬qIÌqIçq³)sq~isq~ uq~sq~bsq~ uq~ppppqK¬sq~ uq~pppppppturiq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqK¬sq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppqK¬sq~ uq~ppppppptresponseq~cxsq~ uq~pppppq~fq~gq~fq~’pq~hxsq~bsq~ uq~ppppqK¬sq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxq~8]sq~ uq~pppppt./** * Do a forward using request dispatcher. * * This method is used by the Tiles package anytime a forward is required. * @param uri Uri or Definition name to forward. * @param request Current page request. * @param servletContext Current servlet context. */ pt doForwardq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftG request.getRequestDispatcher( uri ).forward(request, response); sq~ uq~q~kq~¦ppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqKÜsq~ uq~pppppppturiq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqKÜsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppqKÜsq~ uq~ppppppptresponseq~cxsq~ uq~pppppq~fq~gq~fq~’pq~hxsq~bsq~ uq~ppppqKÜsq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxq~8]sq~ uq~pppppt¥/** * Do an include using request dispatcher. * * This method is used by the Tiles package when an include is required. * The Tiles package can use indifferently any form of this method. * @param uri Uri or Definition name to forward. * @param request Current page request. * @param response Current page response. * @param servletContext Current servlet context. */ pt doIncludeq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftG request.getRequestDispatcher( uri ).include(request, response); sq~ uq~q~kq~¦ppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqL sq~ uq~pppppppturiq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqL sq~ uq~pppppppt pageContextq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxppq~8]sq~ uq~pppppt¨/** * Do an include using PageContext.include(). * * This method is used by the Tiles package when an include is required. * The Tiles package can use indifferently any form of this method. * @param uri Uri or Definition name to forward. * @param request Current page request. * @param response Current page response. * @param servletContext Current servlet context. */ pt doIncludeq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft! pageContext.include(uri); sq~ uq~q~kq~¦ppq~fq~fxqK-qKMqKmqKˆq³‹pq~sq~ uq~pppppppt TilesUtilImplq~{xsq~ uq~ppppq~~sq~ uq~qª×pppsq~ uq~ppppq~~q~~sq~Qsq~ uq~sq~Csq~ uq~ppppqL6sq~ uq~ppppsq~#q~kxsq~Csq~ uq~ppppqL6sq~ uq~ppppsq~#q~Öxsq~Csq~ uq~ppppqL6sq~ uq~ppppsq~#q~¦xsq~Csq~ uq~ppppqL6sq~ uq~ppppsq~#q~°xsq~Csq~ uq~ppppqL6sq~ uq~ppppsq~#q~Œxsq~Csq~ uq~ppppqL6sq~ uq~ppppsq~#q~’xsq~Csq~ uq~ppppqL6sq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppqL6sq~ uq~ppppsq~#q~9xsq~Csq~ uq~ppppqL6sq~ uq~ppppsq~#q~?xsq~Csq~ uq~ppppqL6sq~ uq~ppppsq~#q~'Rxsq~Csq~ uq~ppppqL6sq~ uq~ppppsq~#q~%9xpppq~sq~ uq~pppppt /* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/tiles/TilesUtilImpl.java,v 1.4 2003/04/17 03:51:12 dgraham Exp $ * $Revision: 1.4 $ * $Date: 2003/04/17 03:51:12 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Default implementation of TilesUtil. * This class contains default implementation of utilities. This implementation * is intended to be used without Struts. */ ptTilesUtilImpl.javaq~fxsq~ uq~ppppsq~ uq~q~8]pppq~fxsq~ uq~qªåppppq~~sq~ uq~ppppsq~ uq~ q~8Tsq~isq~ uq~ppppq~8Bsq~ uq~pppppth/** * Get the real implementation. * @return The underlying implementation object. */ pt getTilesUtilq~{xsq~ uq~pppppq~~q~q~~q~8]pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t return tilesUtilImpl; sq~ uq~ppppq~~q~~xsq~bsq~ uq~ppppsq~isq~ uq~qLšpppq~8Bsq~ uq~pppppt·/** * Set the real implementation. * This method should be called only once. * Successive calls have no effect. * @param tilesUtil The implementaion. */ pt setTilesUtilq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t` if( implAlreadySet) return; tilesUtilImpl = tilesUtil; implAlreadySet = true; sq~ uq~ppppq~~q~~xsq~ uq~pppppppt tilesUtilq~{xsq~ uq~pppppq~~q~q~~q~8]pq~€xsq~isq~ uq~ppppq~8Bsq~ uq~pppppth/** * Get the real implementation. * @return The underlying implementation object. */ pt getTilesUtilq~cxsq~ uq~pppppq~fq~gq~fq~8]pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft return tilesUtilImpl; sq~ uq~ppppq~fq~fxsq~bsq~ uq~ppppsq~isq~ uq~qLÄpppq~8Bsq~ uq~pppppt·/** * Set the real implementation. * This method should be called only once. * Successive calls have no effect. * @param tilesUtil The implementaion. */ pt setTilesUtilq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft` if( implAlreadySet) return; tilesUtilImpl = tilesUtil; implAlreadySet = true; sq~ uq~ppppq~fq~fxsq~ uq~pppppppt tilesUtilq~cxsq~ uq~pppppq~fq~gq~fq~8]pq~hxppppq~Šxq~~ppxpq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~ xpppt new TilesUtilImpl()q~~q~~q~~xqL‰qLsq~isq~ uq~ppppq~8Bsq~ uq~ppppptÙ/** * Getter to know if the underlying implementation is already set to another * value than the default value. * @return true if {@link #setTilesUtil} has already been called. */ ptisTilesUtilImplSetq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Êxq~~t return implAlreadySet; sq~ uq~ppppq~~q~~xsq~(sq~ uq~ppppq~8Bsq~ uq~pppppt¢/** Flag to know if internal implementation has been set by the setter method */ /** Flag to know if internal implementation has been set by the setter method */ ptimplAlreadySetq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~d1xppptfalseq~~q~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqMsq~ uq~pppppppturiq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqMsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xsq~bsq~ uq~ppppqMsq~ uq~ppppppptresponseq~{xsq~ uq~pppppq~~q~q~~q~’pq~€xsq~bsq~ uq~ppppqMsq~ uq~ppppppptservletContextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xq~8Bsq~ uq~pppppt]/** * Do a forward using request dispatcher. * * This method is used by the Tiles package anytime a forward is required. * @param uri Uri or Definition name to forward. * @param request Current page request. * @param response Current page response. * @param servletContext Current servlet context. */ pt doForwardq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~tH tilesUtilImpl.doForward(uri, request, response, servletContext); sq~ uq~q~kq~¦ppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqM4sq~ uq~pppppppturiq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqM4sq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xsq~bsq~ uq~ppppqM4sq~ uq~ppppppptresponseq~{xsq~ uq~pppppq~~q~q~~q~’pq~€xsq~bsq~ uq~ppppqM4sq~ uq~ppppppptservletContextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xq~8Bsq~ uq~pppppt¥/** * Do an include using request dispatcher. * * This method is used by the Tiles package when an include is required. * The Tiles package can use indifferently any form of this method. * @param uri Uri or Definition name to forward. * @param request Current page request. * @param response Current page response. * @param servletContext Current servlet context. */ pt doIncludeq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~tH tilesUtilImpl.doInclude(uri, request, response, servletContext); sq~ uq~q~kq~¦ppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqMesq~ uq~pppppppturiq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqMesq~ uq~pppppppt pageContextq~{xsq~ uq~pppppq~~q~q~~q~pq~€xppq~8Bsq~ uq~pppppt¨/** * Do an include using PageContext.include(). * * This method is used by the Tiles package when an include is required. * The Tiles package can use indifferently any form of this method. * @param uri Uri or Definition name to forward. * @param request Current page request. * @param response Current page response. * @param servletContext Current servlet context. */ pt doIncludeq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t: TilesUtilImpl.doInclude(uri, pageContext); sq~ uq~q~kq~¦ppq~~q~~xqIjqI‹sq~isq~ uq~sq~bsq~ uq~ppppqM†sq~ uq~ppppppptdefinitionNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqM†sq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~°pq~€xsq~bsq~ uq~ppppqM†sq~ uq~ppppppptservletContextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xpq~8Bsq~ uq~pppppt_/** * Get a definition by its name. * First, retrieve definition factory and then get requested definition. * Throw appropriate exception if definition or definition factory is not found. * @param definitionName Name of requested definition. * @param request Current servelet request. * @param servletContext current servlet context. * @throws FactoryNotFoundException Can't find definition factory. * @throws DefinitionsFactoryException General error in factory while getting definition. * @throws NoSuchDefinitionException No definition found for specified name */ pt getDefinitionq~{xsq~ uq~pppppq~~q~q~~q~¾pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t¿ try { return getDefinitionsFactory(request, servletContext).getDefinition(definitionName, (HttpServletRequest)request, servletContext); } catch( NullPointerException ex ) { // Factory not found in context throw new FactoryNotFoundException( "Can't get definitions factory from context." ); } sq~ uq~q~7Bq~ppq~~q~~xq³sq~isq~ uq~ppppq~8Bsq~ uq~pppppt€/** * Reset internal state. * This method is used by test suites to reset the class to its original state. */ pt testResetq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~ xq~~tG implAlreadySet = false; tilesUtilImpl = new TilesUtilImpl(); sq~ uq~ppppq~~q~~xqL³qLÇsq~isq~ uq~ppppq~8Bsq~ uq~ppppptÙ/** * Getter to know if the underlying implementation is already set to another * value than the default value. * @return true if {@link #setTilesUtil} has already been called. */ ptisTilesUtilImplSetq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~Òxq~ft return implAlreadySet; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqMÑsq~ uq~pppppppturiq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqMÑsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppqMÑsq~ uq~ppppppptresponseq~cxsq~ uq~pppppq~fq~gq~fq~’pq~hxsq~bsq~ uq~ppppqMÑsq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxq~8Bsq~ uq~pppppt]/** * Do a forward using request dispatcher. * * This method is used by the Tiles package anytime a forward is required. * @param uri Uri or Definition name to forward. * @param request Current page request. * @param response Current page response. * @param servletContext Current servlet context. */ pt doForwardq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ftH tilesUtilImpl.doForward(uri, request, response, servletContext); sq~ uq~q~kq~¦ppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqNsq~ uq~pppppppturiq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqNsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppqNsq~ uq~ppppppptresponseq~cxsq~ uq~pppppq~fq~gq~fq~’pq~hxsq~bsq~ uq~ppppqNsq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxq~8Bsq~ uq~pppppt¥/** * Do an include using request dispatcher. * * This method is used by the Tiles package when an include is required. * The Tiles package can use indifferently any form of this method. * @param uri Uri or Definition name to forward. * @param request Current page request. * @param response Current page response. * @param servletContext Current servlet context. */ pt doIncludeq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ftH tilesUtilImpl.doInclude(uri, request, response, servletContext); sq~ uq~q~kq~¦ppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqN3sq~ uq~pppppppturiq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqN3sq~ uq~pppppppt pageContextq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxppq~8Bsq~ uq~pppppt¨/** * Do an include using PageContext.include(). * * This method is used by the Tiles package when an include is required. * The Tiles package can use indifferently any form of this method. * @param uri Uri or Definition name to forward. * @param request Current page request. * @param response Current page response. * @param servletContext Current servlet context. */ pt doIncludeq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft: TilesUtilImpl.doInclude(uri, pageContext); sq~ uq~q~kq~¦ppq~fq~fxqJëqK sq~isq~ uq~sq~bsq~ uq~ppppqNTsq~ uq~ppppppptdefinitionNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqNTsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~°pq~hxsq~bsq~ uq~ppppqNTsq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxpq~8Bsq~ uq~pppppt_/** * Get a definition by its name. * First, retrieve definition factory and then get requested definition. * Throw appropriate exception if definition or definition factory is not found. * @param definitionName Name of requested definition. * @param request Current servelet request. * @param servletContext current servlet context. * @throws FactoryNotFoundException Can't find definition factory. * @throws DefinitionsFactoryException General error in factory while getting definition. * @throws NoSuchDefinitionException No definition found for specified name */ pt getDefinitionq~cxsq~ uq~pppppq~fq~gq~fq~¾pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft¿ try { return getDefinitionsFactory(request, servletContext).getDefinition(definitionName, (HttpServletRequest)request, servletContext); } catch( NullPointerException ex ) { // Factory not found in context throw new FactoryNotFoundException( "Can't get definitions factory from context." ); } sq~ uq~q~7Bq~ppq~fq~fxq³rsq~isq~ uq~ppppq~8Bsq~ uq~pppppt€/** * Reset internal state. * This method is used by test suites to reset the class to its original state. */ pt testResetq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~!Wxq~ftG implAlreadySet = false; tilesUtilImpl = new TilesUtilImpl(); sq~ uq~ppppq~fq~fxppppq~sq~ uq~pppppppt TilesUtilq~{xsq~ uq~ q~:Çsq~Csq~ uq~ppppq~"­sq~ uq~ppppsq~#q~8Bxq~C:q~8. * *//** * Class containing utility methods for Tiles. * Methods of this class are static and thereby accessible from anywhere. * The underlying implementation can be changed with * {@link #setTilesUtil(TilesUtilImpl)}. *
      * Real implementation classes should derive from the {@link TilesUtilImpl} class. *
      * Some methods are specified to throw the UnsupportedOperationException * if the underlying implementation doesn't support the operation. */ ptTilesUtil.javaq~fxsq~ uq~ppppsq~ uq~q~8Bpppq~fxsq~ uq~q~&wppppq~~sq~ uq~ppppsq~ uq~ppppq~Šxq~~ppxxpq8ÿsq~ uq~pppppt ¨/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/tiles/definition/ReloadableDefinitionsFactory.java,v 1.6 2003/02/27 19:19:54 cedric Exp $ * $Revision: 1.6 $ * $Date: 2003/02/27 19:19:54 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * A reloadable factory. * This factory is the main entrance to any factory implementation. It takes in * charge real implementation instance, and allows reloading by creating a new * instance. * * @author Cedric Dumoulin * @since 1.1 * @version $Revision: 1.6 $ $Date: 2003/02/27 19:19:54 $ */ pt!ReloadableDefinitionsFactory.javaq~fxsq~ uq~ppppsq~ uq~q~6Fpppq~fxsq~ uq~ppppsq~#q~7Bxsq~Csq~ uq~ppppsq~Qsq~ uq~sq~Csq~ uq~ppppqNòsq~ uq~ppppsq~#q~–xsq~Csq~ uq~ppppqNòsq~ uq~ppppsq~#q~¾xsq~Csq~ uq~ppppqNòsq~ uq~ppppsq~#q~"xsq~Csq~ uq~ppppqNòsq~ uq~ppppsq~#q~xqNïsq~Csq~ uq~ppppqNòsq~ uq~ppppsq~#q~Öxsq~Csq~ uq~ppppqNòsq~ uq~ppppsq~#q~°xsq~Csq~ uq~ppppqNòsq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppqNòsq~ uq~ppppsq~#q~öxsq~Csq~ uq~ppppqNòsq~ uq~ppppsq~#q~¼xppppq~![sq~ uq~pppppt T/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/tiles/xmlDefinition/FactorySet.java,v 1.2 2003/02/27 19:19:42 cedric Exp $ * $Revision: 1.2 $ * $Date: 2003/02/27 19:19:42 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Component Definitions factory. * This factory contains several factories identified by a key. The * getDefinition() method first looks for the factory key, retrieves or creates this * factory and then calls its getDefinition(). */ ptFactorySet.javaq~fxsq~ uq~ppppsq~ uq~q~4Ûpppq~fxsq~ uq~ppppsq~#q~7Bxsq~Csq~ uq~ppppq~sq~ uq~ppppsq~#q~7Bxppppq~¥sq~ uq~q8µpppsq~ uq~q~pppq~¥q~¥sq~Qsq~ uq~ppppq~sq~ uq~pppppt ¦/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/tiles/FactoryNotFoundException.java,v 1.2 2003/02/27 19:20:51 cedric Exp $ * $Revision: 1.2 $ * $Date: 2003/02/27 19:20:51 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Exception thrown when definitions factory is not found. */ ptFactoryNotFoundException.javaq~fxsq~ uq~ppppsq~ uq~q~7Bpppq~fxsq~ uq~pppppq~¥sq~ uq~ppppsq~ uq~ppppq~»xq~¥ppxsq~ uq~sq~isq~ uq~sq~bsq~ uq~ppppqOSsq~ uq~ppppppptdefinitionNameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppqOSsq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~°pq~§xsq~bsq~ uq~ppppqOSsq~ uq~ppppppptservletContextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Öpq~§xpq~&wsq~ uq~ppppptT/** * Get a definition by its name. * First, retrieve definition factory, and then get requested definition. * Throw appropriate exception if definition or definition factory is not found. * @param name Name of requested definition. * @param request Current servelet request * @param servletContext current servlet context * @throws FactoryNotFoundException Can't find definition factory. * @throws DefinitionsFactoryException General error in factory while getting definition. * @throws NoSuchDefinitionException No definition found for specified name */ pt getDefinitionq~¢xsq~ uq~pppppq~¥q~¦q~¥q~¾pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥t¶ try { return getDefinitionsFactory(servletContext).getDefinition(definitionName, (HttpServletRequest)request, servletContext); } catch( NullPointerException ex ) { // Factory not found in context throw new FactoryNotFoundException( "Can't get definitions factory from context." ); } sq~ uq~q~7Bq~ppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqO|sq~ uq~ppppppptdefinitionNameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppqO|sq~ uq~pppppppt pageContextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xppq~&wsq~ uq~ppppptO/** * Get a component / template definition by its name. * First, retrieve instance factory, and then get requested instance. * Throw appropriate exception if definition is not found. * @param name Name of requested definition. * @param request Current servelet request * @param servletContext current servlet context * @throws FactoryNotFoundException Can't find definition factory. * @throws DefinitionsFactoryException General error in factory while getting definition. * @throws NoSuchDefinitionException No definition found for specified name */ pt getDefinitionq~¢xsq~ uq~pppppq~¥q~¦q~¥q~¾pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥t¯ return getDefinition( definitionName, (HttpServletRequest)pageContext.getRequest(), pageContext.getServletContext()); sq~ uq~q~7Bq~ppq~¥q~¥xq~7sq~isq~ uq~sq~bsq~ uq~ppppqOsq~ uq~ppppppptdefinitionNameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqOsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~°pq~˜xsq~bsq~ uq~ppppqOsq~ uq~ppppppptservletContextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xpq~&wsq~ uq~pppppt^/** * Get a definition by its name. * First, retrieve definition factory, and then get requested definition. * Throw appropriate exception if definition or definition factory is not found. * @param definitionName Name of requested definition. * @param request Current servelet request * @param servletContext current servlet context * @throws FactoryNotFoundException Can't find definition factory. * @throws DefinitionsFactoryException General error in factory while getting definition. * @throws NoSuchDefinitionException No definition found for specified name */ pt getDefinitionq~rxsq~ uq~pppppq~–q~—q~–q~¾pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t¶ try { return getDefinitionsFactory(servletContext).getDefinition(definitionName, (HttpServletRequest)request, servletContext); } catch( NullPointerException ex ) { // Factory not found in context throw new FactoryNotFoundException( "Can't get definitions factory from context." ); } sq~ uq~q~7Bq~ppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqOÆsq~ uq~ppppppptdefinitionNameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqOÆsq~ uq~pppppppt pageContextq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xppq~&wsq~ uq~pppppt$/** * Get a component / template definition by its name. * First, retrieve instance factory, and then get requested instance. * Throw appropriate exception if definition is not found. * @param definitionName Name of requested definition. * @param pageContext Current pageContext * @throws FactoryNotFoundException Can't find definition factory. * @throws DefinitionsFactoryException General error in factory while getting definition. * @throws NoSuchDefinitionException No definition found for specified name */ pt getDefinitionq~rxsq~ uq~pppppq~–q~—q~–q~¾pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t¯ return getDefinition( definitionName, (HttpServletRequest)pageContext.getRequest(), pageContext.getServletContext()); sq~ uq~q~7Bq~ppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqOçsq~ uq~ppppppptdefinitionNameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqOçsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~°pq~˜xsq~bsq~ uq~ppppqOçsq~ uq~ppppppptservletContextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xpq~6Fsq~ uq~ppppptE/** * Get a definition by its name. * Call appropriate method on underlying factory instance. * Throw appropriate exception if definition or definition factory is not found. * @param name Name of requested definition. * @param request Current servelet request * @param servletContext current servlet context * @throws FactoryNotFoundException Can't find definition factory. * @throws DefinitionsFactoryException General error in factory while getting definition. * @throws NoSuchDefinitionException No definition found for specified name */ pt getDefinitionq~rxsq~ uq~pppppq~–q~—q~–q~¾pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tb return factory.getDefinition(definitionName, (HttpServletRequest)request, servletContext); sq~ uq~q~q~7Bppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqPsq~ uq~ppppppptdefinitionNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqPsq~ uq~pppppppt pageContextq~{xsq~ uq~pppppq~~q~q~~q~pq~€xppq~&wsq~ uq~pppppt‚/** * Get a component / template definition by its name. * First, retrieve instance factory, and then get requested instance. * Throw appropriate exception if definition is not found. * @deprecated Use {@link TilesUtil#getDefinition(String, ServletRequest, ServletContext)} * @param definitionName Name of requested definition. * @param pageContext Current pageContext * @throws FactoryNotFoundException Can't find definition factory. * @throws DefinitionsFactoryException General error in factory while getting definition. * @throws NoSuchDefinitionException No definition found for specified name */ pt getDefinitionq~{xsq~ uq~pppppq~~q~q~~q~¾pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t¯ return getDefinition( definitionName, (HttpServletRequest)pageContext.getRequest(), pageContext.getServletContext()); sq~ uq~q~7Bq~ppq~~q~~xqM†sq~isq~ uq~sq~bsq~ uq~ppppqP0sq~ uq~ppppppptdefinitionNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqP0sq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~°pq~€xsq~bsq~ uq~ppppqP0sq~ uq~ppppppptservletContextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xpq~6Fsq~ uq~pppppt/** * Get a definition by its name. * Call appropriate method on underlying factory instance. * Throw appropriate exception if definition or definition factory is not found. * @param definitionName Name of requested definition. * @param request Current servlet request. * @param servletContext Current servlet context. * @throws FactoryNotFoundException Can't find definition factory. * @throws DefinitionsFactoryException General error in factory while getting definition. */ pt getDefinitionq~{xsq~ uq~pppppq~~q~q~~q~¾pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tb return factory.getDefinition(definitionName, (HttpServletRequest)request, servletContext); sq~ uq~q~7Bq~ppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqPXsq~ uq~ppppppptdefinitionNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqPXsq~ uq~pppppppt pageContextq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxppq~&wsq~ uq~pppppt‚/** * Get a component / template definition by its name. * First, retrieve instance factory, and then get requested instance. * Throw appropriate exception if definition is not found. * @deprecated Use {@link TilesUtil#getDefinition(String, ServletRequest, ServletContext)} * @param definitionName Name of requested definition. * @param pageContext Current pageContext * @throws FactoryNotFoundException Can't find definition factory. * @throws DefinitionsFactoryException General error in factory while getting definition. * @throws NoSuchDefinitionException No definition found for specified name */ pt getDefinitionq~cxsq~ uq~pppppq~fq~gq~fq~¾pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft¯ return getDefinition( definitionName, (HttpServletRequest)pageContext.getRequest(), pageContext.getServletContext()); sq~ uq~q~7Bq~ppq~fq~fxqNTsq~isq~ uq~sq~bsq~ uq~ppppqPysq~ uq~ppppppptdefinitionNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqPysq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~°pq~hxsq~bsq~ uq~ppppqPysq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxpq~6Fsq~ uq~pppppt/** * Get a definition by its name. * Call appropriate method on underlying factory instance. * Throw appropriate exception if definition or definition factory is not found. * @param definitionName Name of requested definition. * @param request Current servlet request. * @param servletContext Current servlet context. * @throws FactoryNotFoundException Can't find definition factory. * @throws DefinitionsFactoryException General error in factory while getting definition. */ pt getDefinitionq~cxsq~ uq~pppppq~fq~gq~fq~¾pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftb return factory.getDefinition(definitionName, (HttpServletRequest)request, servletContext); sq~ uq~q~7Bq~ppq~fq~fxppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqP¡sq~ uq~ppppppptservletContextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Öpq~§xpppq~6Fsq~ uq~pppppt9/** * Reload underlying factory. * Reload is done creating a new factory instance, and replacing old instance * by the new one. * @param request Current servelet request * @param servletContext current servlet context * @throws DefinitionsFactoryException If factory creation fail. */ ptreloadq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tw ComponentDefinitionsFactory newInstance = createFactory( servletContext, properties); factory = newInstance; sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~ppppq~6Fsq~ uq~pppppt2/** * Get underlying factory instance. */ pt getFactoryq~¢xsq~ uq~pppppq~¥q~¦q~¥q~–pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t return factory; sq~ uq~ppppq~¥q~¥xq~63sq~isq~ uq~ppppq~6Fsq~ uq~pppppt//** * Get this object as a String */ pttoStringq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t$ return factory.toString(); sq~ uq~ppppq~¥q~¥xsq~zsq~ uq~sq~esq~ uq~sq~bsq~ uq~ppppqPÜsq~ uq~ppppppptconfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~' pq~§xpppqPÙsq~ uq~pppppt/** * Inner class. * Wrapper for ServletContext init parameters. * Object of this class is an hashmap containing parameters and values * defined in the servlet config file (web.xml). */ /** * Constructor. */ // end inner class ptServletPropertiesMapq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q˜]xq~¥t~ // This implementation is very simple. // It is possible to avoid creation of a new structure, but this need // imply writing all Map interface. Enumeration enum = config.getInitParameterNames(); while( enum.hasMoreElements() ) { String key = (String)enum.nextElement(); put( key, config.getInitParameter( key ) ); } sq~ uq~ppppq~¥q~¥xsq~esq~ uq~sq~bsq~ uq~ppppqPôsq~ uq~ppppppptconfigq~rxsq~ uq~pppppq~–q~—q~–q~' pq~˜xpppqPÙsq~ uq~pppppt/** * Inner class. * Wrapper for ServletContext init parameters. * Object of this class is an hashmap containing parameters and values * defined in the servlet config file (web.xml). */ /** * Constructor. */ // end inner class pqPêq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q“xq~–t~ // This implementation is very simple. // It is possible to avoid creation of a new structure, but this need // imply writing all Map interface. Enumeration enum = config.getInitParameterNames(); while( enum.hasMoreElements() ) { String key = (String)enum.nextElement(); put( key, config.getInitParameter( key ) ); } sq~ uq~ppppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppqQ sq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~' pq~€xpppqPÙsq~ uq~pppppt/** * Inner class. * Wrapper for ServletContext init parameters. * Object of this class is an HashMap containing parameters and values * defined in the servlet config file (web.xml). */ /** * Constructor. */ // end inner class pqPêq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Êxq~~t† // This implementation is very simple. // It is possible to avoid creation of a new structure, but this would // imply writing all of the Map interface. Enumeration enum = config.getInitParameterNames(); while( enum.hasMoreElements() ) { String key = (String)enum.nextElement(); put( key, config.getInitParameter( key ) ); } sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppqQ"sq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~' pq~hxpppqPÙsq~ uq~pppppt/** * Inner class. * Wrapper for ServletContext init parameters. * Object of this class is an HashMap containing parameters and values * defined in the servlet config file (web.xml). */ /** * Constructor. */ // end inner class pqPêq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~Òxq~ft† // This implementation is very simple. // It is possible to avoid creation of a new structure, but this would // imply writing all of the Map interface. Enumeration enum = config.getInitParameterNames(); while( enum.hasMoreElements() ) { String key = (String)enum.nextElement(); put( key, config.getInitParameter( key ) ); } sq~ uq~ppppq~fq~fxq~6Fsq~ uq~pppppppqPêq~¢xsq~ uq~ppppq~¥sq~ uq~ppppsq~ uq~q~pppq~¥q~¢psq~ uq~pppppq~¥sq~ uq~ppppsq~ uq~ppppq˜]xq~¥ppxsq~esq~ uq~sq~bsq~ uq~ppppqQGsq~ uq~ppppppptservletContextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xsq~bsq~ uq~ppppqQGsq~ uq~pppppppt servletConfigq~rxsq~ uq~pppppq~–q~—q~–q~' pq~˜xppq~6Fsq~ uq~pppppt /** * Constructor. * Create a factory according to servlet settings. * @throws DefinitionsFactoryException If factory creation fail. */ pq~6‰q~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tx properties = new ServletPropertiesMap( servletConfig ); factory = createFactory( servletContext, properties); sq~ uq~q~pppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppqQfsq~ uq~ppppppptservletContextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xsq~bsq~ uq~ppppqQfsq~ uq~pppppppt propertiesq~rxsq~ uq~pppppq~–q~—q~–q~¼pq~˜xppq~6Fsq~ uq~pppppt /** * Constructor. * Create a factory according to servlet settings. * @throws DefinitionsFactoryException If factory creation fail. */ pq~6‰q~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t^ this.properties = properties; factory = createFactory( servletContext, properties); sq~ uq~q~pppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqQ…sq~ uq~ppppppptservletContextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xsq~bsq~ uq~ppppqQ…sq~ uq~pppppppt propertiesq~rxsq~ uq~pppppq~–q~—q~–q~¼pq~˜xsq~bsq~ uq~ppppqQ…sq~ uq~pppppppt classnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpq~6Fsq~ uq~pppppte/** * Create Definition factory from provided classname. * If a factory class name is provided, a factory of this class is created. Otherwise, * default factory is created. * Factory must have a constructor taking ServletContext and Map as parameter. * @param classname Class name of the factory to create. * @param servletContext Servlet Context passed to newly created factory. * @param properties Map of name/property passed to newly created factory. * @return newly created factory. * @throws DefinitionsFactoryException If an error occur while initializing factory */ ptcreateFactoryFromClassnameq~rxsq~ uq~pppppq~–q~—q~–q~–pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–ti if( classname == null ) return createFactory( servletContext, properties ); // Try to create from classname try { Class factoryClass = Class.forName(classname); ComponentDefinitionsFactory factory = (ComponentDefinitionsFactory)factoryClass.newInstance(); factory.initFactory( servletContext, properties); return factory; } catch( ClassCastException ex ) { // Bad classname throw new DefinitionsFactoryException( "Error - createDefinitionsFactory : Factory class '" + classname +" must implements 'ComponentDefinitionsFactory'.", ex ); } catch( ClassNotFoundException ex ) { // Bad classname throw new DefinitionsFactoryException( "Error - createDefinitionsFactory : Bad class name '" + classname +"'.", ex ); } catch( InstantiationException ex ) { // Bad constructor or error throw new DefinitionsFactoryException( ex ); } catch( IllegalAccessException ex ) { // throw new DefinitionsFactoryException( ex ); } sq~ uq~q~pppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqQ­sq~ uq~ppppppptservletContextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xsq~bsq~ uq~ppppqQ­sq~ uq~pppppppt propertiesq~rxsq~ uq~pppppq~–q~—q~–q~¼pq~˜xppq~6Fsq~ uq~ppppptæ/** * Create default Definition factory. * Factory must have a constructor taking ServletContext and Map as parameter. * In this implementation, default factory is of class I18nFactorySet * @param servletContext Servlet Context passed to newly created factory. * @param properties Map of name/property passed to newly created factory. * @return newly created factory. * @throws DefinitionsFactoryException If an error occur while initializing factory */ ptcreateDefaultFactoryq~rxsq~ uq~pppppq~–q~—q~–q~–pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tv ComponentDefinitionsFactory factory = new I18nFactorySet(servletContext, properties); ; return factory; sq~ uq~q~pppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqQÍsq~ uq~ppppppptservletContextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xsq~bsq~ uq~ppppqQÍsq~ uq~pppppppt propertiesq~rxsq~ uq~pppppq~–q~—q~–q~¼pq~˜xppq~6Fsq~ uq~ppppptÈ/** * Create Definition factory. * Convenience method. ServletConfig is wrapped into a Map allowing retrieval * of init parameters. Factory classname is also retrieved, as well as debug level. * Finally, approriate createDefinitionsFactory() is called. * @param servletContext Servlet Context passed to newly created factory. * @param servletConfig Servlet config containing parameters to be passed to newly created factory. */ pt createFactoryq~rxsq~ uq~pppppq~–q~—q~–q~–pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tþ String classname = (String)properties.get(DEFINITIONS_FACTORY_CLASSNAME); if(classname!=null) return createFactoryFromClassname( servletContext, properties, classname); return new I18nFactorySet( servletContext, properties ); sq~ uq~q~pppq~–q~–xqOçsq~isq~ uq~sq~bsq~ uq~ppppqQísq~ uq~ppppppptservletContextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xpppq~6Fsq~ uq~pppppt9/** * Reload underlying factory. * Reload is done creating a new factory instance, and replacing old instance * by the new one. * @param request Current servelet request * @param servletContext current servlet context * @throws DefinitionsFactoryException If factory creation fail. */ ptreloadq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tw ComponentDefinitionsFactory newInstance = createFactory( servletContext, properties); factory = newInstance; sq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq~6Fsq~ uq~pppppt2/** * Get underlying factory instance. */ pt getFactoryq~rxsq~ uq~pppppq~–q~—q~–q~–pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return factory; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqRsq~ uq~ppppppptservletContextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xsq~bsq~ uq~ppppqRsq~ uq~pppppppt propertiesq~rxsq~ uq~pppppq~–q~—q~–q~¼pq~˜xppq~6Fsq~ uq~pppppt/** * Init factory. * This method is required by interface ComponentDefinitionsFactory. It is * not used in this implementation, as it manage itself underlying creation * and initialization. * @param servletContext Servlet Context passed to newly created factory. * @param properties Map of name/property passed to newly created factory. * Map can contains more properties than requested. * @throws DefinitionsFactoryException An error occur during initialization. */ pt initFactoryq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t // do nothing sq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq~6Fsq~ uq~pppppt//** * Get this object as a String */ pttoStringq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t$ return factory.toString(); sq~ uq~ppppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppqREsq~ uq~ppppppptservletContextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xsq~bsq~ uq~ppppqREsq~ uq~pppppppt servletConfigq~{xsq~ uq~pppppq~~q~q~~q~' pq~€xppq~6Fsq~ uq~pppppt/** * Constructor. * Create a factory according to servlet settings. * @param servletContext Our servlet context. * @param servletConfig Our servlet config. * @throws DefinitionsFactoryException If factory creation fail. */ pq~6‰q~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tx properties = new ServletPropertiesMap( servletConfig ); factory = createFactory( servletContext, properties); sq~ uq~q~pppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppqRdsq~ uq~ppppppptservletContextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xsq~bsq~ uq~ppppqRdsq~ uq~pppppppt propertiesq~{xsq~ uq~pppppq~~q~q~~q~¼pq~€xppq~6Fsq~ uq~pppppt /** * Constructor. * Create a factory according to servlet settings. * @param servletContext Our servlet context. * @param properties Map containing all properties. * @throws DefinitionsFactoryException If factory creation fail. */ pq~6‰q~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t^ this.properties = properties; factory = createFactory( servletContext, properties); sq~ uq~q~pppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqRƒsq~ uq~ppppppptservletContextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xsq~bsq~ uq~ppppqRƒsq~ uq~pppppppt propertiesq~{xsq~ uq~pppppq~~q~q~~q~¼pq~€xsq~bsq~ uq~ppppqRƒsq~ uq~pppppppt classnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpq~6Fsq~ uq~ppppptg/** * Create Definition factory from provided classname. * If a factory class name is provided, a factory of this class is created. Otherwise, * a default factory is created. * Factory must have a constructor taking ServletContext and Map as parameter. * @param classname Class name of the factory to create. * @param servletContext Servlet Context passed to newly created factory. * @param properties Map of name/property passed to newly created factory. * @return newly created factory. * @throws DefinitionsFactoryException If an error occur while initializing factory */ ptcreateFactoryFromClassnameq~{xsq~ uq~pppppq~~q~q~~q~–pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tv if( classname == null ) return createFactory( servletContext, properties ); // Try to create from classname try { Class factoryClass = TilesUtil.applicationClass(classname); ComponentDefinitionsFactory factory = (ComponentDefinitionsFactory)factoryClass.newInstance(); factory.initFactory( servletContext, properties); return factory; } catch( ClassCastException ex ) { // Bad classname throw new DefinitionsFactoryException( "Error - createDefinitionsFactory : Factory class '" + classname +" must implements 'ComponentDefinitionsFactory'.", ex ); } catch( ClassNotFoundException ex ) { // Bad classname throw new DefinitionsFactoryException( "Error - createDefinitionsFactory : Bad class name '" + classname +"'.", ex ); } catch( InstantiationException ex ) { // Bad constructor or error throw new DefinitionsFactoryException( ex ); } catch( IllegalAccessException ex ) { // throw new DefinitionsFactoryException( ex ); } sq~ uq~q~pppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqR«sq~ uq~ppppppptservletContextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xsq~bsq~ uq~ppppqR«sq~ uq~pppppppt propertiesq~{xsq~ uq~pppppq~~q~q~~q~¼pq~€xppq~6Fsq~ uq~ppppptæ/** * Create default Definition factory. * Factory must have a constructor taking ServletContext and Map as parameter. * In this implementation, default factory is of class I18nFactorySet * @param servletContext Servlet Context passed to newly created factory. * @param properties Map of name/property passed to newly created factory. * @return newly created factory. * @throws DefinitionsFactoryException If an error occur while initializing factory */ ptcreateDefaultFactoryq~{xsq~ uq~pppppq~~q~q~~q~–pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tv ComponentDefinitionsFactory factory = new I18nFactorySet(servletContext, properties); ; return factory; sq~ uq~q~pppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqRËsq~ uq~ppppppptservletContextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xsq~bsq~ uq~ppppqRËsq~ uq~pppppppt propertiesq~{xsq~ uq~pppppq~~q~q~~q~¼pq~€xppq~6Fsq~ uq~pppppt˜/** * Create Definition factory. * Convenience method. ServletConfig is wrapped into a Map allowing retrieval * of init parameters. Factory classname is also retrieved, as well as debug level. * Finally, approriate createDefinitionsFactory() is called. * @param servletContext Servlet Context passed to newly created factory. * @param properties Map containing all properties. */ pt createFactoryq~{xsq~ uq~pppppq~~q~q~~q~–pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tþ String classname = (String)properties.get(DEFINITIONS_FACTORY_CLASSNAME); if(classname!=null) return createFactoryFromClassname( servletContext, properties, classname); return new I18nFactorySet( servletContext, properties ); sq~ uq~q~pppq~~q~~xqP0sq~isq~ uq~sq~bsq~ uq~ppppqRësq~ uq~ppppppptservletContextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xpppq~6Fsq~ uq~pppppt/** * Reload underlying factory. * Reload is done by creating a new factory instance, and replacing the old instance * with the new one. * @param servletContext Current servlet context. * @throws DefinitionsFactoryException If factory creation fails. */ ptreloadq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tw ComponentDefinitionsFactory newInstance = createFactory( servletContext, properties); factory = newInstance; sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~6Fsq~ uq~pppppt\/** * Get underlying factory instance. * @return ComponentDefinitionsFactory */ pt getFactoryq~{xsq~ uq~pppppq~~q~q~~q~–pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t return factory; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqSsq~ uq~ppppppptservletContextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xsq~bsq~ uq~ppppqSsq~ uq~pppppppt propertiesq~{xsq~ uq~pppppq~~q~q~~q~¼pq~€xppq~6Fsq~ uq~pppppt /** * Init factory. * This method is required by interface ComponentDefinitionsFactory. It is * not used in this implementation, as it manages itself the underlying creation * and initialization. * @param servletContext Servlet Context passed to newly created factory. * @param properties Map of name/property passed to newly created factory. * Map can contain more properties than requested. * @throws DefinitionsFactoryException An error occur during initialization. */ pt initFactoryq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t // do nothing sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~6Fsq~ uq~ppppptW/** * Return String representation. * @return String representation. */ pttoStringq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t$ return factory.toString(); sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppqSCsq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxsq~bsq~ uq~ppppqSCsq~ uq~pppppppt servletConfigq~cxsq~ uq~pppppq~fq~gq~fq~' pq~hxppq~6Fsq~ uq~pppppt/** * Constructor. * Create a factory according to servlet settings. * @param servletContext Our servlet context. * @param servletConfig Our servlet config. * @throws DefinitionsFactoryException If factory creation fail. */ pq~6‰q~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftx properties = new ServletPropertiesMap( servletConfig ); factory = createFactory( servletContext, properties); sq~ uq~q~pppq~fq~fxsq~esq~ uq~sq~bsq~ uq~ppppqSbsq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxsq~bsq~ uq~ppppqSbsq~ uq~pppppppt propertiesq~cxsq~ uq~pppppq~fq~gq~fq~¼pq~hxppq~6Fsq~ uq~pppppt /** * Constructor. * Create a factory according to servlet settings. * @param servletContext Our servlet context. * @param properties Map containing all properties. * @throws DefinitionsFactoryException If factory creation fail. */ pq~6‰q~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft^ this.properties = properties; factory = createFactory( servletContext, properties); sq~ uq~q~pppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqSsq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxsq~bsq~ uq~ppppqSsq~ uq~pppppppt propertiesq~cxsq~ uq~pppppq~fq~gq~fq~¼pq~hxsq~bsq~ uq~ppppqSsq~ uq~pppppppt classnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpq~6Fsq~ uq~ppppptg/** * Create Definition factory from provided classname. * If a factory class name is provided, a factory of this class is created. Otherwise, * a default factory is created. * Factory must have a constructor taking ServletContext and Map as parameter. * @param classname Class name of the factory to create. * @param servletContext Servlet Context passed to newly created factory. * @param properties Map of name/property passed to newly created factory. * @return newly created factory. * @throws DefinitionsFactoryException If an error occur while initializing factory */ ptcreateFactoryFromClassnameq~cxsq~ uq~pppppq~fq~gq~fq~–pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftv if( classname == null ) return createFactory( servletContext, properties ); // Try to create from classname try { Class factoryClass = TilesUtil.applicationClass(classname); ComponentDefinitionsFactory factory = (ComponentDefinitionsFactory)factoryClass.newInstance(); factory.initFactory( servletContext, properties); return factory; } catch( ClassCastException ex ) { // Bad classname throw new DefinitionsFactoryException( "Error - createDefinitionsFactory : Factory class '" + classname +" must implements 'ComponentDefinitionsFactory'.", ex ); } catch( ClassNotFoundException ex ) { // Bad classname throw new DefinitionsFactoryException( "Error - createDefinitionsFactory : Bad class name '" + classname +"'.", ex ); } catch( InstantiationException ex ) { // Bad constructor or error throw new DefinitionsFactoryException( ex ); } catch( IllegalAccessException ex ) { // throw new DefinitionsFactoryException( ex ); } sq~ uq~q~pppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqS©sq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxsq~bsq~ uq~ppppqS©sq~ uq~pppppppt propertiesq~cxsq~ uq~pppppq~fq~gq~fq~¼pq~hxppq~6Fsq~ uq~ppppptæ/** * Create default Definition factory. * Factory must have a constructor taking ServletContext and Map as parameter. * In this implementation, default factory is of class I18nFactorySet * @param servletContext Servlet Context passed to newly created factory. * @param properties Map of name/property passed to newly created factory. * @return newly created factory. * @throws DefinitionsFactoryException If an error occur while initializing factory */ ptcreateDefaultFactoryq~cxsq~ uq~pppppq~fq~gq~fq~–pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftv ComponentDefinitionsFactory factory = new I18nFactorySet(servletContext, properties); ; return factory; sq~ uq~q~pppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqSÉsq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxsq~bsq~ uq~ppppqSÉsq~ uq~pppppppt propertiesq~cxsq~ uq~pppppq~fq~gq~fq~¼pq~hxppq~6Fsq~ uq~pppppt˜/** * Create Definition factory. * Convenience method. ServletConfig is wrapped into a Map allowing retrieval * of init parameters. Factory classname is also retrieved, as well as debug level. * Finally, approriate createDefinitionsFactory() is called. * @param servletContext Servlet Context passed to newly created factory. * @param properties Map containing all properties. */ pt createFactoryq~cxsq~ uq~pppppq~fq~gq~fq~–pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftþ String classname = (String)properties.get(DEFINITIONS_FACTORY_CLASSNAME); if(classname!=null) return createFactoryFromClassname( servletContext, properties, classname); return new I18nFactorySet( servletContext, properties ); sq~ uq~q~pppq~fq~fxqPysq~isq~ uq~sq~bsq~ uq~ppppqSésq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxpppq~6Fsq~ uq~pppppt/** * Reload underlying factory. * Reload is done by creating a new factory instance, and replacing the old instance * with the new one. * @param servletContext Current servlet context. * @throws DefinitionsFactoryException If factory creation fails. */ ptreloadq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftw ComponentDefinitionsFactory newInstance = createFactory( servletContext, properties); factory = newInstance; sq~ uq~q~pppq~fq~fxsq~isq~ uq~ppppq~6Fsq~ uq~pppppt\/** * Get underlying factory instance. * @return ComponentDefinitionsFactory */ pt getFactoryq~cxsq~ uq~pppppq~fq~gq~fq~–pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft return factory; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqTsq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxsq~bsq~ uq~ppppqTsq~ uq~pppppppt propertiesq~cxsq~ uq~pppppq~fq~gq~fq~¼pq~hxppq~6Fsq~ uq~pppppt /** * Init factory. * This method is required by interface ComponentDefinitionsFactory. It is * not used in this implementation, as it manages itself the underlying creation * and initialization. * @param servletContext Servlet Context passed to newly created factory. * @param properties Map of name/property passed to newly created factory. * Map can contain more properties than requested. * @throws DefinitionsFactoryException An error occur during initialization. */ pt initFactoryq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft // do nothing sq~ uq~q~pppq~fq~fxsq~isq~ uq~ppppq~6Fsq~ uq~ppppptW/** * Return String representation. * @return String representation. */ pttoStringq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft$ return factory.toString(); sq~ uq~ppppq~fq~fxq8ÿsq~ uq~pppppppq~6‰q~¢xsq~ uq~ppppq~¥sq~ uq~q9Wpppsq~ uq~q~–pppq~¥q~¥q~7÷sq~ uq~pppppq~¥sq~ uq~ppppsq~ uq~ppppq~»xq~¥ppxsq~ uq~pppppt/** * Init factory. * This method is required by interface ComponentDefinitionsFactory. It is * not used in this implementation, as it manage itself underlying creation * and initialization. * @param servletContext Servlet Context passed to newly created factory. * @param properties Map of name/property passed to newly created factory. * Map can contains more properties than requested. * @throws DefinitionsFactoryException An error occur during initialization. */ pt initFactoryq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~q~6pppsq~ uq~ppppq~¥q~»xq~¥t // do nothing sq~ uq~q~pppq~¥q~¥xppq~¥q~»xq~¥psq~ uq~q~pppq~¥q~¥xpppsq~ uq~sq~isq~ uq~sq~bsq~ uq~ppppqT`sq~ uq~ppppppptservletContextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Öpq~§xsq~bsq~ uq~ppppqT`sq~ uq~pppppppt propertiesq~¢xsq~ uq~pppppq~¥q~¦q~¥q~¼pq~§xppq~!^sq~ uq~pppppt"/** * Initialization method. * Init the factory by reading appropriate configuration file. * This method is called exactly once immediately after factory creation in * case of internal creation (by DefinitionUtil). * @param servletContext Servlet Context passed to newly created factory. * @param properties Map of name/property passed to newly created factory. Map can contains * more properties than requested. * @throws DefinitionsFactoryException An error occur during initialization. */ pt initFactoryq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~q~5ûpppsq~ uq~ppppq~¥q~»xq~¥tÞ // Set some property values String value = (String)properties.get(PARSER_VALIDATE_PARAMETER_NAME); if( value != null ) { isValidatingParser = Boolean.valueOf( value ).booleanValue(); } // end if value = (String)properties.get(PARSER_DETAILS_PARAMETER_NAME); if( value != null ) { try { parserDetailLevel = Integer.valueOf( value ).intValue(); } catch( NumberFormatException ex ) { System.out.println( "Bad format for parameter '" + PARSER_DETAILS_PARAMETER_NAME + "'. Integer expected."); servletContext.log( "Tiles factory init : Bad format for parameter '" + PARSER_DETAILS_PARAMETER_NAME + "'. Integer expected."); } } // end if // init factory withappropriate configuration file // Try to use provided filename, if any. // If no filename are provided, try to use default ones. String filename = (String)properties.get(DEFINITIONS_CONFIG_PARAMETER_NAME); if( filename != null ) { // Use provided filename try { initFactory( servletContext, filename ); if( DefinitionsUtil.userDebugLevel > 0) System.out.println( "Factory initialized from file '" + filename + "'." ); } catch( FileNotFoundException ex ) { // A filename is specified, throw appropriate error. System.out.println( ex.getMessage() + " : Can't find file '" +filename + "'" ); throw new FactoryNotFoundException( ex.getMessage() + " : Can't find file '" +filename + "'" ) ; } // end catch } else { // try each default file names for( int i=0; i 0) { System.out.println( "Factory initialized from file '" + filename + "'." ); } } catch( FileNotFoundException ex ) { // Do nothing } // end catch } // end loop } // end if sq~ uq~q~pppq~¥q~¥xpppq~¥q~»xsq~#psq~ uq~q~pppq~¥q~¥xsq~esq~ uq~ppppq~4Ûsq~ uq~pppppt/** * */ pt FactorySetq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t" factories = new HashMap(); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~4Ûsq~ uq~pppppt/** * */ pttoStringq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t Iterator i = factories.values().iterator(); StringBuffer buff = new StringBuffer( "all FactorySet's factory : \n" ); while( i.hasNext() ) { buff.append( i.next().toString() ).append("\n"); } return buff.toString(); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqT£sq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqT£sq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~°pq~˜xsq~bsq~ uq~ppppqT£sq~ uq~ppppppptservletContextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xpq~4Ûsq~ uq~ppppptØ/** * Extract key that will be used to get the sub factory. * @param name Name of requested definition * @param request Current servlet request. * @param servletContext Current servlet context */ ptgetDefinitionsFactoryKeyq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xsq~#psq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~4Ûsq~ uq~ppppptD/** * Get default factory. * @return Default factory */ ptgetDefaultFactoryq~rxsq~ uq~pppppq~–q~—q~–q~!Ìpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xsq~#psq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqTÛsq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~bsq~ uq~ppppqTÛsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~°pq~˜xsq~bsq~ uq~ppppqTÛsq~ uq~ppppppptservletContextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xpq~4Ûsq~ uq~pppppt°/** * Get a factory by its key. * If key is null, return defaultFactory. * Search in loaded factory. If not found, call create factory, and store return value in * loaded factories. * @param key Key of requested definition * @param request Current servlet request. * @param servletContext Current servlet context * @throws DefinitionsFactoryException If an error occur while creating factory. */ pt getFactoryq~rxsq~ uq~pppppq~–q~—q~–q~!Ìpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–t if(key == null ) return getDefaultFactory(); Object factory = factories.get( key ); if( factory == null ) { // synchronize creation to avoid double creation by separate threads. // Also, check if factory hasn't been created while waiting for synchronized // section. synchronized(factories) { factory = factories.get( key ); if( factory == null ) { factory = createFactory( key, request, servletContext); factories.put( key, factory ); } // end if } // end synchronized } // end if return (DefinitionsFactory)factory; sq~ uq~q~pppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqUsq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqUsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~°pq~˜xsq~bsq~ uq~ppppqUsq~ uq~ppppppptservletContextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xpq~4Ûsq~ uq~pppppt¤/** * Get a definition by its name. * @throws DefinitionsFactoryException An error occur while getting * definition. * @param name Name of requested definition * @param request Current servlet request. * @param servletContext Current servlet context * @throws NoSuchDefinitionException No definition found for specified name * @throws DefinitionsFactoryException General exception */ pt getDefinitionq~rxsq~ uq~pppppq~–q~—q~–q~¾pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tE if( factories == null ) throw new FactoryNotFoundException( "No definitions factory defined" ); Object key = getDefinitionsFactoryKey( name, request, servletContext); DefinitionsFactory factory = getFactory( key, request, servletContext); return factory.getDefinition( name, request, servletContext ); sq~ uq~q~"q~ppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqU+sq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~bsq~ uq~ppppqU+sq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~°pq~˜xsq~bsq~ uq~ppppqU+sq~ uq~ppppppptservletContextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xpq~4Ûsq~ uq~ppppptÞ/** * Create a factory for specified key. * This method is called by getFactory() when the requested factory doesn't already exist. * Must return a factory, even a default one. * Real implementation need to provide this method. * @param key Key of requested definition * @param request Current servlet request. * @param servletContext Current servlet context * @throws DefinitionsFactoryException If an error occur while creating factory. */ pt createFactoryq~rxsq~ uq~pppppq~–q~—q~–q~!Ìpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xsq~#psq~ uq~q~pppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqUSsq~ uq~ppppppptservletContextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xsq~bsq~ uq~ppppqUSsq~ uq~pppppppt propertiesq~rxsq~ uq~pppppq~–q~—q~–q~¼pq~˜xppq~4Ûsq~ uq~pppppt›/** * Init factory set. * @param servletContext Current servlet context * @param properties properties used to initialized factory set; */ pt initFactoryq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xsq~#psq~ uq~q~pppq~–q~–xsq~esq~ uq~ppppq~4Ûsq~ uq~pppppt/** * */ pqT‰q~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t" factories = new HashMap(); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~4Ûsq~ uq~pppppt/** * */ pttoStringq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t Iterator i = factories.values().iterator(); StringBuffer buff = new StringBuffer( "all FactorySet's factory : \n" ); while( i.hasNext() ) { buff.append( i.next().toString() ).append("\n"); } return buff.toString(); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqU’sq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqU’sq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~°pq~€xsq~bsq~ uq~ppppqU’sq~ uq~ppppppptservletContextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xpq~4Ûsq~ uq~ppppptð/** * Extract key that will be used to get the sub factory. * @param name Name of requested definition. * @param request Current servlet request. * @param servletContext Current servlet context. * @return Object. */ ptgetDefinitionsFactoryKeyq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xsq~#psq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~4Ûsq~ uq~ppppptE/** * Get default factory. * @return Default factory. */ ptgetDefaultFactoryq~{xsq~ uq~pppppq~~q~q~~q~!Ìpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xsq~#psq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqUÊsq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~bsq~ uq~ppppqUÊsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~°pq~€xsq~bsq~ uq~ppppqUÊsq~ uq~ppppppptservletContextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xpq~4Ûsq~ uq~pppppt»/** * Get a factory by its key. * If key is null, return defaultFactory. * Search in loaded factories. If not found, create factory and store return value in * loaded factories. * @param key Key of requested definition. * @param request Current servlet request. * @param servletContext Current servlet context. * @throws DefinitionsFactoryException If an error occur while creating factory. */ pt getFactoryq~{xsq~ uq~pppppq~~q~q~~q~!Ìpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t if(key == null ) return getDefaultFactory(); Object factory = factories.get( key ); if( factory == null ) { // synchronize creation to avoid double creation by separate threads. // Also, check if factory hasn't been created while waiting for synchronized // section. synchronized(factories) { factory = factories.get( key ); if( factory == null ) { factory = createFactory( key, request, servletContext); factories.put( key, factory ); } // end if } // end synchronized } // end if return (DefinitionsFactory)factory; sq~ uq~q~pppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqUòsq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqUòsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~°pq~€xsq~bsq~ uq~ppppqUòsq~ uq~ppppppptservletContextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xpq~4Ûsq~ uq~ppppptS/** * Get a definition by its name. * * @param name Name of requested definition. * @param request Current servlet request. * @param servletContext Current servlet context. * @throws NoSuchDefinitionException No definition found for specified name * @throws DefinitionsFactoryException General exception */ pt getDefinitionq~{xsq~ uq~pppppq~~q~q~~q~¾pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tE if( factories == null ) throw new FactoryNotFoundException( "No definitions factory defined" ); Object key = getDefinitionsFactoryKey( name, request, servletContext); DefinitionsFactory factory = getFactory( key, request, servletContext); return factory.getDefinition( name, request, servletContext ); sq~ uq~q~"q~ppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqVsq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~bsq~ uq~ppppqVsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~°pq~€xsq~bsq~ uq~ppppqVsq~ uq~ppppppptservletContextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xpq~4Ûsq~ uq~ppppptÞ/** * Create a factory for specified key. * This method is called by getFactory() when the requested factory doesn't already exist. * Must return a factory, or a default one. * Real implementation needs to provide this method. * @param key Key of requested definition. * @param request Current servlet request. * @param servletContext Current servlet context * @throws DefinitionsFactoryException If an error occur while creating factory. */ pt createFactoryq~{xsq~ uq~pppppq~~q~q~~q~!Ìpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xsq~#psq~ uq~q~pppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqVBsq~ uq~ppppppptservletContextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xsq~bsq~ uq~ppppqVBsq~ uq~pppppppt propertiesq~{xsq~ uq~pppppq~~q~q~~q~¼pq~€xppq~4Ûsq~ uq~pppppt›/** * Init factory set. * @param servletContext Current servlet context * @param properties properties used to initialized factory set; */ pt initFactoryq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxsq~#psq~ uq~q~pppq~~q~~xsq~esq~ uq~ppppq~4Ûsq~ uq~pppppt/** * Constructor. */ pqT‰q~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t" factories = new HashMap(); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~4Ûsq~ uq~ppppptZ/** * Return String representation. * @return String representation. */ pttoStringq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t Iterator i = factories.values().iterator(); StringBuffer buff = new StringBuffer( "all FactorySet's factory : \n" ); while( i.hasNext() ) { buff.append( i.next().toString() ).append("\n"); } return buff.toString(); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqVsq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqVsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~°pq~hxsq~bsq~ uq~ppppqVsq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxpq~4Ûsq~ uq~ppppptð/** * Extract key that will be used to get the sub factory. * @param name Name of requested definition. * @param request Current servlet request. * @param servletContext Current servlet context. * @return Object. */ ptgetDefinitionsFactoryKeyq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxsq~#psq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~4Ûsq~ uq~ppppptE/** * Get default factory. * @return Default factory. */ ptgetDefaultFactoryq~cxsq~ uq~pppppq~fq~gq~fq~!Ìpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxsq~#psq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqV¹sq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~bsq~ uq~ppppqV¹sq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~°pq~hxsq~bsq~ uq~ppppqV¹sq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxpq~4Ûsq~ uq~pppppt»/** * Get a factory by its key. * If key is null, return defaultFactory. * Search in loaded factories. If not found, create factory and store return value in * loaded factories. * @param key Key of requested definition. * @param request Current servlet request. * @param servletContext Current servlet context. * @throws DefinitionsFactoryException If an error occur while creating factory. */ pt getFactoryq~cxsq~ uq~pppppq~fq~gq~fq~!Ìpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft if(key == null ) return getDefaultFactory(); Object factory = factories.get( key ); if( factory == null ) { // synchronize creation to avoid double creation by separate threads. // Also, check if factory hasn't been created while waiting for synchronized // section. synchronized(factories) { factory = factories.get( key ); if( factory == null ) { factory = createFactory( key, request, servletContext); factories.put( key, factory ); } // end if } // end synchronized } // end if return (DefinitionsFactory)factory; sq~ uq~q~pppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqVásq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqVásq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~°pq~hxsq~bsq~ uq~ppppqVásq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxpq~4Ûsq~ uq~ppppptS/** * Get a definition by its name. * * @param name Name of requested definition. * @param request Current servlet request. * @param servletContext Current servlet context. * @throws NoSuchDefinitionException No definition found for specified name * @throws DefinitionsFactoryException General exception */ pt getDefinitionq~cxsq~ uq~pppppq~fq~gq~fq~¾pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftE if( factories == null ) throw new FactoryNotFoundException( "No definitions factory defined" ); Object key = getDefinitionsFactoryKey( name, request, servletContext); DefinitionsFactory factory = getFactory( key, request, servletContext); return factory.getDefinition( name, request, servletContext ); sq~ uq~q~"q~ppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqW sq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~bsq~ uq~ppppqW sq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~°pq~hxsq~bsq~ uq~ppppqW sq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxpq~4Ûsq~ uq~ppppptÞ/** * Create a factory for specified key. * This method is called by getFactory() when the requested factory doesn't already exist. * Must return a factory, or a default one. * Real implementation needs to provide this method. * @param key Key of requested definition. * @param request Current servlet request. * @param servletContext Current servlet context * @throws DefinitionsFactoryException If an error occur while creating factory. */ pt createFactoryq~cxsq~ uq~pppppq~fq~gq~fq~!Ìpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxsq~#psq~ uq~q~pppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqW1sq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxsq~bsq~ uq~ppppqW1sq~ uq~pppppppt propertiesq~cxsq~ uq~pppppq~fq~gq~fq~¼pq~hxppq~4Ûsq~ uq~pppppt›/** * Init factory set. * @param servletContext Current servlet context * @param properties properties used to initialized factory set; */ pt initFactoryq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxsq~#psq~ uq~q~pppq~fq~fxsq~esq~ uq~ppppq~4Ûsq~ uq~pppppt/** * Constructor. */ pqT‰q~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft" factories = new HashMap(); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~4Ûsq~ uq~ppppptZ/** * Return String representation. * @return String representation. */ pttoStringq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft Iterator i = factories.values().iterator(); StringBuffer buff = new StringBuffer( "all FactorySet's factory : \n" ); while( i.hasNext() ) { buff.append( i.next().toString() ).append("\n"); } return buff.toString(); sq~ uq~ppppq~fq~fxpq~![sq~ uq~pppppppqT‰q~¢xsq~ uq~ppppsq~#sq~ uq~q~4¸pppsq~ uq~q~–pppq~¥q~¢qNòsq~ uq~q~!^ppppq~¥sq~ uq~ppppsq~ uq~ppppq~»xq~¥ppxq~4¦psq~4Ôuq~4×££uq~4×\q~¥xpppsq~Bddq*pxq~!^sq~)sq~ uq~ppppq~4£sq~ uq~ppppq~¥sq~ uq~ppppsq~ uq~sq~$úsq~ uq~ppppq~4£sq~ uq~ppppq~¢sq~ uq~ppppsq~ uq~ppppppxsq~)sq~ uq~ppppq~4£sq~ uq~ppppq~¥sq~ uq~qWŒpppsq~ uq~ppppsq~Bddqpxq~¾qWƒpsq~4Ôuq~4×MMuq~4×£q~¥xpppsq~BddMpxq~Òsq~)sq~ uq~ppppq~4£sq~ uq~ppppq~¥sq~ uq~ppppsq~ uq~ppppsq~BddFMpxq~!Ìq~4 q~4¸sq~)sq~ uq~ppppq~4£sq~ uq~ppppq~¥sq~ uq~ppppsq~ uq~ppppsq~BddÅqpxsq~zsq~ (uq~,sq~(sq~ uq~ppppqW·sq~ uq~ppppptn/** Associated digester */ /** Associated digester */ /** Associated digester. */ /** Associated digester. */ ptdigesterq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ Špq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xppppq~¥q~¥q~¥xsq~(sq~ uq~ppppqW·sq~ uq~ppppptî/** * Should we use a validating XML parser to read the configuration file. * Default is false. */ /** * Should we use a validating XML parser to read the configuration file. * Default is false. */ /** * Should we use a validating XML parser to read the configuration file. * Default is false. */ /** * Should we use a validating XML parser to read the configuration file. * Default is false. */ pt validatingq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xpppt falseq~¥q~¥q~¥xsq~(sq~ uq~ppppqW·sq~ uq~ppppptp/** * Digester debug level. DEfault = 0. */ /** * Digester debug level. DEfault = 0. */ ptdigesterDebugLevelq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xpppt 0q~¥q~¥q~¥xsq~(sq~ uq~ppppqW·sq~ uq~pppppt¼/** * The set of public identifiers, and corresponding resource names, for * the versions of the configuration file DTDs that we know about. There * MUST be an even number of Strings in this list! */ /** * The set of public identifiers, and corresponding resource names, for * the versions of the configuration file DTDs that we know about. There * MUST be an even number of Strings in this list! */ /** * The set of public identifiers, and corresponding resource names for * the versions of the configuration file DTDs we know about. There * MUST be an even number of Strings in this list! */ /** * The set of public identifiers, and corresponding resource names for * the versions of the configuration file DTDs we know about. There * MUST be an even number of Strings in this list! */ pt registrationsq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{t[]q~!¼xsq~ uq~ppppsq~ uq~ppppq~¥q~›xppptì { // pre 1.1 "-//Apache Software Foundation//DTD Tiles Configuration//EN", "/org/apache/struts/tiles/resources/tiles-config_1_1.dtd", "-//Apache Software Foundation//DTD Tiles Configuration//EN", "/org/apache/struts/resources/tiles-config_1_1.dtd", "-//Apache Software Foundation//DTD Components Configuration//EN", "/org/apache/struts/tiles/resources/tiles-config.dtd", // version 1.1 "-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN", "/org/apache/struts/tiles/resources/tiles-config_1_1.dtd", "-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN", "/org/apache/struts/resources/tiles-config_1_1.dtd", }q~¥q~¥q~¥xsq~esq~ uq~ppppqW·sq~ uq~ppppptd/** * Constructor. * Create a digester parser, and initialize syntax rules. */ pt XmlParserq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t# digester = new Digester(); digester.setDebug(digesterDebugLevel); digester.setValidating(validating); digester.setNamespaceAware(true); //digester.setUseContextClassLoader(true); // Register our local copy of the DTDs that we can find for (int i = 0; i < registrations.length; i += 2) { URL url = this.getClass().getResource(registrations[i+1]); if (url != null) { digester.register(registrations[i], url.toString()); } } // Init syntax rules initDigester( digester ); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqXsq~ uq~pppppppt validatingq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xpppqW·sq~ uq~pppppt3/** * Set digester validating flag. */ pt setValidatingq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t0 digester.setValidating( validating); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqXsq~ uq~pppppppt detailLevelq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xpppqW·sq~ uq~pppppt0/** * Set digester detail level. */ ptsetDetailLevelq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t, digester.setDebug( detailLevel); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqX2sq~ uq~ppppppptdigesterq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ Špq~§xpppqW·sq~ uq~pppppt†/** * Init digester for components syntax. * This is an old set of rules, left for backward compatibilities. * */ pt*initDigesterForComponentsDefinitionsSyntaxq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~xq~¥tW // Common constants String PACKAGE_NAME = "org.apache.struts.tiles.xmlDefinition"; String DEFINITION_TAG = "component-definitions/definition"; String definitionHandlerClass = PACKAGE_NAME + ".XmlDefinition"; String PUT_TAG = DEFINITION_TAG + "/put"; String putAttributeHandlerClass = PACKAGE_NAME + ".XmlAttribute"; String LIST_TAG = DEFINITION_TAG + "/putList"; String listHandlerClass = PACKAGE_NAME + ".XmlListAttribute"; String ADD_LIST_ELE_TAG = LIST_TAG + "/add"; // syntax rules digester.addObjectCreate( DEFINITION_TAG, definitionHandlerClass ); digester.addSetProperties( DEFINITION_TAG); digester.addSetNext( DEFINITION_TAG, "putDefinition", definitionHandlerClass); // put / putAttribute rules digester.addObjectCreate( PUT_TAG, putAttributeHandlerClass); digester.addSetNext( PUT_TAG, "addAttribute", putAttributeHandlerClass); digester.addSetProperties( PUT_TAG); digester.addCallMethod( PUT_TAG, "setBody", 0); // list rules digester.addObjectCreate( LIST_TAG, listHandlerClass); digester.addSetProperties( LIST_TAG); digester.addSetNext( LIST_TAG, "addAttribute", putAttributeHandlerClass); // list elements rules // We use Attribute class to avoid rewriting a new class. // Name part can't be used in listElement attribute. digester.addObjectCreate( ADD_LIST_ELE_TAG, putAttributeHandlerClass); digester.addSetNext( ADD_LIST_ELE_TAG, "add", putAttributeHandlerClass); digester.addSetProperties( ADD_LIST_ELE_TAG); digester.addCallMethod( ADD_LIST_ELE_TAG, "setBody", 0); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqXJsq~ uq~ppppppptdigesterq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ Špq~§xpppqW·sq~ uq~pppppt€/** * Init digester for tiles syntax. * Same as components, but with first element = tiles-definitions * */ pt%initDigesterForTilesDefinitionsSyntaxq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~xq~¥t Ä // Common constants String PACKAGE_NAME = "org.apache.struts.tiles.xmlDefinition"; String DEFINITION_TAG = "tiles-definitions/definition"; String definitionHandlerClass = PACKAGE_NAME + ".XmlDefinition"; String PUT_TAG = DEFINITION_TAG + "/put"; String putAttributeHandlerClass = PACKAGE_NAME + ".XmlAttribute"; //String LIST_TAG = DEFINITION_TAG + "/putList"; // List tag value String LIST_TAG = "putList"; String DEF_LIST_TAG = DEFINITION_TAG + "/" + LIST_TAG; String listHandlerClass = PACKAGE_NAME + ".XmlListAttribute"; // Tag value for adding an element in a list String ADD_LIST_ELE_TAG = "*/" + LIST_TAG + "/add"; // syntax rules digester.addObjectCreate( DEFINITION_TAG, definitionHandlerClass ); digester.addSetProperties( DEFINITION_TAG); digester.addSetNext( DEFINITION_TAG, "putDefinition", definitionHandlerClass); // put / putAttribute rules // Rules for a same pattern are called in order, but rule.end() are called // in reverse order. // SetNext and CallMethod use rule.end() method. So, placing SetNext in // first position ensure it will be called last (sic). digester.addObjectCreate( PUT_TAG, putAttributeHandlerClass); digester.addSetNext( PUT_TAG, "addAttribute", putAttributeHandlerClass); digester.addSetProperties( PUT_TAG); digester.addCallMethod( PUT_TAG, "setBody", 0); // Definition level list rules // This is rules for lists nested in a definition digester.addObjectCreate( DEF_LIST_TAG, listHandlerClass); digester.addSetProperties( DEF_LIST_TAG); digester.addSetNext( DEF_LIST_TAG, "addAttribute", putAttributeHandlerClass); // list elements rules // We use Attribute class to avoid rewriting a new class. // Name part can't be used in listElement attribute. digester.addObjectCreate( ADD_LIST_ELE_TAG, putAttributeHandlerClass); digester.addSetNext( ADD_LIST_ELE_TAG, "add", putAttributeHandlerClass); digester.addSetProperties( ADD_LIST_ELE_TAG); digester.addCallMethod( ADD_LIST_ELE_TAG, "setBody", 0); // nested list elements rules // Create a list handler, and add it to parent list String NESTED_LIST = "*/" + LIST_TAG + "/" + LIST_TAG; digester.addObjectCreate( NESTED_LIST, listHandlerClass); digester.addSetProperties( NESTED_LIST); digester.addSetNext( NESTED_LIST, "add", putAttributeHandlerClass); // bean elements rules // We use Attribute class to avoid rewriting a new class. // Name part can't be used in listElement attribute. //String ADD_WILDCARD = LIST_TAG + "/addItem"; // non String ADD_WILDCARD = LIST_TAG + "/addx*"; String ADD_WILDCARD = "*/item"; String menuItemDefaultClass = "org.apache.struts.tiles.beans.SimpleMenuItem"; digester.addObjectCreate( ADD_WILDCARD, menuItemDefaultClass, "classtype"); digester.addSetNext( ADD_WILDCARD, "add", "java.lang.Object"); digester.addSetProperties( ADD_WILDCARD); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqXbsq~ uq~ppppppptdigesterq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ Špq~§xpppqW·sq~ uq~ppppptÅ/** * Init digester in order to parse instances definition file syntax. * Instances is an old name for "definition". This method is left for * backward compatibility. * */ ptinitDigesterForInstancesSyntaxq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~xq~¥t8 // Build a digester to process our configuration resource String PACKAGE_NAME = "org.apache.struts.tiles.xmlDefinition"; String INSTANCE_TAG = "component-instances/instance"; String instanceHandlerClass = PACKAGE_NAME + ".XmlDefinition"; String PUT_TAG = INSTANCE_TAG + "/put"; String PUTATTRIBUTE_TAG = INSTANCE_TAG + "/putAttribute"; String putAttributeHandlerClass = PACKAGE_NAME + ".XmlAttribute"; String LIST_TAG = INSTANCE_TAG + "/putList"; String listHandlerClass = PACKAGE_NAME + ".XmlListAttribute"; String ADD_LIST_ELE_TAG = LIST_TAG + "/add"; // component instance rules digester.addObjectCreate( INSTANCE_TAG, instanceHandlerClass ); digester.addSetProperties( INSTANCE_TAG); digester.addSetNext( INSTANCE_TAG, "putDefinition", instanceHandlerClass); // put / putAttribute rules digester.addObjectCreate( PUTATTRIBUTE_TAG, putAttributeHandlerClass); digester.addSetProperties( PUTATTRIBUTE_TAG); digester.addSetNext( PUTATTRIBUTE_TAG, "addAttribute", putAttributeHandlerClass); // put / putAttribute rules digester.addObjectCreate( PUT_TAG, putAttributeHandlerClass); digester.addSetProperties( PUT_TAG); digester.addSetNext( PUT_TAG, "addAttribute", putAttributeHandlerClass); // list rules digester.addObjectCreate( LIST_TAG, listHandlerClass); digester.addSetProperties( LIST_TAG); digester.addSetNext( LIST_TAG, "addAttribute", putAttributeHandlerClass); // list elements rules // We use Attribute class to avoid rewriting a new class. // Name part can't be used in listElement attribute. digester.addObjectCreate( ADD_LIST_ELE_TAG, putAttributeHandlerClass); digester.addSetProperties( ADD_LIST_ELE_TAG); digester.addSetNext( ADD_LIST_ELE_TAG, "add", putAttributeHandlerClass); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqXzsq~ uq~ppppppptdigesterq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ Špq~§xpppqW·sq~ uq~pppppt)/** * Init digester. * */ pt initDigesterq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥t¤ initDigesterForTilesDefinitionsSyntax( digester ); initDigesterForComponentsDefinitionsSyntax( digester ); initDigesterForInstancesSyntax( digester ); sq~ uq~ppppq~¥q~¥xq~2Zsq~isq~ uq~sq~bsq~ uq~ppppqX’sq~ uq~ppppppptargsq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{t[]q~§xpppqW·sq~ uq~pppppt7/** * Main method to check file syntax. */ ptmainq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥t, //String filename = "E:/programs/jakarta-tomcat/webapps/wtiles-struts/WEB-INF/tiles-examples-defs.xml"; String filename = "E:/programs/jakarta-tomcat-4.0.3/webapps/wtiles-struts/WEB-INF/tiles-examples-defs.xml"; //String filename = "E:/programs/jakarta-tomcat/webapps/wtiles-struts/WEB-INF/tilesDefinitions.xml"; //String filename = "E:/programs/jakarta-tomcat/webapps/wtiles-channel/WEB-INF/componentDefinitions.xml"; //String filename2 = "E:/programs/jakarta-tomcat/webapps/wtiles-tutorial/WEB-INF/componentDefinitions.xml"; if( args.length > 1 ) { filename = args[1]; } // end if System.out.println( "Read file '" + filename +"'" ); InputStream input = null; InputStream input2 = null; // Open file try { input = new BufferedInputStream( new FileInputStream( filename) ); // input2 = new BufferedInputStream( // new FileInputStream( filename2) ); } catch( IOException ex ) { System.out.println( "can't open file '" + filename + "' : " + ex.getMessage() ); } // Check file syntax try { XmlParser parser = new XmlParser(); parser.setValidating(true); parser.setDetailLevel(2); XmlDefinitionsSet definitions = new XmlDefinitionsSet(); System.out.println( " Parse file" ); parser.parse( input, definitions); // System.out.println( " Check file 2" ); //parser.parse( input2, definitions); System.out.println( " done." ); System.out.println( " Result : " + definitions.toString() ); } catch( Exception ex ) { System.out.println( "Error during parsing '" + filename + "' : " + ex.getMessage() ); ex.printStackTrace(); } sq~ uq~ppppq~¥q~¥xsq~esq~ uq~ppppqW·sq~ uq~ppppptd/** * Constructor. * Create a digester parser, and initialize syntax rules. */ pqWøq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t# digester = new Digester(); digester.setDebug(digesterDebugLevel); digester.setValidating(validating); digester.setNamespaceAware(true); //digester.setUseContextClassLoader(true); // Register our local copy of the DTDs that we can find for (int i = 0; i < registrations.length; i += 2) { URL url = this.getClass().getResource(registrations[i+1]); if (url != null) { digester.register(registrations[i], url.toString()); } } // Init syntax rules initDigester( digester ); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqX»sq~ uq~pppppppt validatingq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xpppqW·sq~ uq~pppppt3/** * Set digester validating flag. */ pt setValidatingq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t0 digester.setValidating( validating); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqXÓsq~ uq~pppppppt detailLevelq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xpppqW·sq~ uq~pppppt0/** * Set digester detail level. */ ptsetDetailLevelq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t, digester.setDebug( detailLevel); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqXësq~ uq~ppppppptdigesterq~rxsq~ uq~pppppq~–q~—q~–q~ Špq~˜xpppqW·sq~ uq~pppppt†/** * Init digester for components syntax. * This is an old set of rules, left for backward compatibilities. * */ pt*initDigesterForComponentsDefinitionsSyntaxq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~'bxq~–tW // Common constants String PACKAGE_NAME = "org.apache.struts.tiles.xmlDefinition"; String DEFINITION_TAG = "component-definitions/definition"; String definitionHandlerClass = PACKAGE_NAME + ".XmlDefinition"; String PUT_TAG = DEFINITION_TAG + "/put"; String putAttributeHandlerClass = PACKAGE_NAME + ".XmlAttribute"; String LIST_TAG = DEFINITION_TAG + "/putList"; String listHandlerClass = PACKAGE_NAME + ".XmlListAttribute"; String ADD_LIST_ELE_TAG = LIST_TAG + "/add"; // syntax rules digester.addObjectCreate( DEFINITION_TAG, definitionHandlerClass ); digester.addSetProperties( DEFINITION_TAG); digester.addSetNext( DEFINITION_TAG, "putDefinition", definitionHandlerClass); // put / putAttribute rules digester.addObjectCreate( PUT_TAG, putAttributeHandlerClass); digester.addSetNext( PUT_TAG, "addAttribute", putAttributeHandlerClass); digester.addSetProperties( PUT_TAG); digester.addCallMethod( PUT_TAG, "setBody", 0); // list rules digester.addObjectCreate( LIST_TAG, listHandlerClass); digester.addSetProperties( LIST_TAG); digester.addSetNext( LIST_TAG, "addAttribute", putAttributeHandlerClass); // list elements rules // We use Attribute class to avoid rewriting a new class. // Name part can't be used in listElement attribute. digester.addObjectCreate( ADD_LIST_ELE_TAG, putAttributeHandlerClass); digester.addSetNext( ADD_LIST_ELE_TAG, "add", putAttributeHandlerClass); digester.addSetProperties( ADD_LIST_ELE_TAG); digester.addCallMethod( ADD_LIST_ELE_TAG, "setBody", 0); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqYsq~ uq~ppppppptdigesterq~rxsq~ uq~pppppq~–q~—q~–q~ Špq~˜xpppqW·sq~ uq~pppppt€/** * Init digester for tiles syntax. * Same as components, but with first element = tiles-definitions * */ pt%initDigesterForTilesDefinitionsSyntaxq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~'bxq~–t € // Common constants String PACKAGE_NAME = "org.apache.struts.tiles.xmlDefinition"; String DEFINITION_TAG = "tiles-definitions/definition"; String definitionHandlerClass = PACKAGE_NAME + ".XmlDefinition"; String PUT_TAG = DEFINITION_TAG + "/put"; String putAttributeHandlerClass = PACKAGE_NAME + ".XmlAttribute"; //String LIST_TAG = DEFINITION_TAG + "/putList"; // List tag value String LIST_TAG = "putList"; String DEF_LIST_TAG = DEFINITION_TAG + "/" + LIST_TAG; String listHandlerClass = PACKAGE_NAME + ".XmlListAttribute"; // Tag value for adding an element in a list String ADD_LIST_ELE_TAG = "*/" + LIST_TAG + "/add"; // syntax rules digester.addObjectCreate( DEFINITION_TAG, definitionHandlerClass ); digester.addSetProperties( DEFINITION_TAG); digester.addSetNext( DEFINITION_TAG, "putDefinition", definitionHandlerClass); // put / putAttribute rules // Rules for a same pattern are called in order, but rule.end() are called // in reverse order. // SetNext and CallMethod use rule.end() method. So, placing SetNext in // first position ensure it will be called last (sic). digester.addObjectCreate( PUT_TAG, putAttributeHandlerClass); digester.addSetNext( PUT_TAG, "addAttribute", putAttributeHandlerClass); digester.addSetProperties( PUT_TAG); digester.addCallMethod( PUT_TAG, "setBody", 0); // Definition level list rules // This is rules for lists nested in a definition digester.addObjectCreate( DEF_LIST_TAG, listHandlerClass); digester.addSetProperties( DEF_LIST_TAG); digester.addSetNext( DEF_LIST_TAG, "addAttribute", putAttributeHandlerClass); // list elements rules // We use Attribute class to avoid rewriting a new class. // Name part can't be used in listElement attribute. digester.addObjectCreate( ADD_LIST_ELE_TAG, putAttributeHandlerClass); digester.addSetNext( ADD_LIST_ELE_TAG, "add", putAttributeHandlerClass); digester.addSetProperties( ADD_LIST_ELE_TAG); digester.addCallMethod( ADD_LIST_ELE_TAG, "setBody", 0); // nested list elements rules // Create a list handler, and add it to parent list String NESTED_LIST = "*/" + LIST_TAG + "/" + LIST_TAG; digester.addObjectCreate( NESTED_LIST, listHandlerClass); digester.addSetProperties( NESTED_LIST); digester.addSetNext( NESTED_LIST, "add", putAttributeHandlerClass); // item elements rules // We use Attribute class to avoid rewriting a new class. // Name part can't be used in listElement attribute. //String ADD_WILDCARD = LIST_TAG + "/addItem"; // non String ADD_WILDCARD = LIST_TAG + "/addx*"; String ADD_WILDCARD = "*/item"; String menuItemDefaultClass = "org.apache.struts.tiles.beans.SimpleMenuItem"; digester.addObjectCreate( ADD_WILDCARD, menuItemDefaultClass, "classtype"); digester.addSetNext( ADD_WILDCARD, "add", "java.lang.Object"); digester.addSetProperties( ADD_WILDCARD); // bean elements rules String BEAN_TAG = "*/bean"; String beanDefaultClass = "org.apache.struts.tiles.beans.SimpleMenuItem"; digester.addObjectCreate( BEAN_TAG, menuItemDefaultClass, "classtype"); digester.addSetNext( BEAN_TAG, "add", "java.lang.Object"); digester.addSetProperties( BEAN_TAG); // Set properties to surrounding element digester.addSetProperty(BEAN_TAG+ "/set-property", "property", "value"); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqYsq~ uq~ppppppptdigesterq~rxsq~ uq~pppppq~–q~—q~–q~ Špq~˜xpppqW·sq~ uq~ppppptÅ/** * Init digester in order to parse instances definition file syntax. * Instances is an old name for "definition". This method is left for * backward compatibility. * */ ptinitDigesterForInstancesSyntaxq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~'bxq~–t8 // Build a digester to process our configuration resource String PACKAGE_NAME = "org.apache.struts.tiles.xmlDefinition"; String INSTANCE_TAG = "component-instances/instance"; String instanceHandlerClass = PACKAGE_NAME + ".XmlDefinition"; String PUT_TAG = INSTANCE_TAG + "/put"; String PUTATTRIBUTE_TAG = INSTANCE_TAG + "/putAttribute"; String putAttributeHandlerClass = PACKAGE_NAME + ".XmlAttribute"; String LIST_TAG = INSTANCE_TAG + "/putList"; String listHandlerClass = PACKAGE_NAME + ".XmlListAttribute"; String ADD_LIST_ELE_TAG = LIST_TAG + "/add"; // component instance rules digester.addObjectCreate( INSTANCE_TAG, instanceHandlerClass ); digester.addSetProperties( INSTANCE_TAG); digester.addSetNext( INSTANCE_TAG, "putDefinition", instanceHandlerClass); // put / putAttribute rules digester.addObjectCreate( PUTATTRIBUTE_TAG, putAttributeHandlerClass); digester.addSetProperties( PUTATTRIBUTE_TAG); digester.addSetNext( PUTATTRIBUTE_TAG, "addAttribute", putAttributeHandlerClass); // put / putAttribute rules digester.addObjectCreate( PUT_TAG, putAttributeHandlerClass); digester.addSetProperties( PUT_TAG); digester.addSetNext( PUT_TAG, "addAttribute", putAttributeHandlerClass); // list rules digester.addObjectCreate( LIST_TAG, listHandlerClass); digester.addSetProperties( LIST_TAG); digester.addSetNext( LIST_TAG, "addAttribute", putAttributeHandlerClass); // list elements rules // We use Attribute class to avoid rewriting a new class. // Name part can't be used in listElement attribute. digester.addObjectCreate( ADD_LIST_ELE_TAG, putAttributeHandlerClass); digester.addSetProperties( ADD_LIST_ELE_TAG); digester.addSetNext( ADD_LIST_ELE_TAG, "add", putAttributeHandlerClass); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqY3sq~ uq~ppppppptdigesterq~rxsq~ uq~pppppq~–q~—q~–q~ Špq~˜xpppqW·sq~ uq~pppppt)/** * Init digester. * */ pt initDigesterq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–t¤ initDigesterForTilesDefinitionsSyntax( digester ); initDigesterForComponentsDefinitionsSyntax( digester ); initDigesterForInstancesSyntax( digester ); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqYKsq~ uq~ppppppptinq~rxsq~ uq~pppppq~–q~—q~–q~Wpq~˜xsq~bsq~ uq~ppppqYKsq~ uq~pppppppt definitionsq~rxsq~ uq~pppppq~–q~—q~–q~2mpq~˜xppqW·sq~ uq~pppppt'/** * Parse input reader and add encounter definitions to definitions set. * @param in Input stream * @param definitions Xml Definitions set to which encountered definition are added. * @throws IOException If an error occur during file parsing. * @throws SAXException */ ptparseq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t2 try { // set first object in stack //digester.clear(); digester.push(definitions); // parse digester.parse(in); in.close(); } catch (SAXException e) { //throw new ServletException( "Error while parsing " + mappingConfig, e); throw e; } sq~ uq~q~kq~2*ppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqYksq~ uq~ppppppptargsq~rxsq~ uq~pppppq~–q~—q~–q~{t[]q~˜xpppqW·sq~ uq~pppppt7/** * Main method to check file syntax. */ ptmainq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t, //String filename = "E:/programs/jakarta-tomcat/webapps/wtiles-struts/WEB-INF/tiles-examples-defs.xml"; String filename = "E:/programs/jakarta-tomcat-4.0.3/webapps/wtiles-struts/WEB-INF/tiles-examples-defs.xml"; //String filename = "E:/programs/jakarta-tomcat/webapps/wtiles-struts/WEB-INF/tilesDefinitions.xml"; //String filename = "E:/programs/jakarta-tomcat/webapps/wtiles-channel/WEB-INF/componentDefinitions.xml"; //String filename2 = "E:/programs/jakarta-tomcat/webapps/wtiles-tutorial/WEB-INF/componentDefinitions.xml"; if( args.length > 1 ) { filename = args[1]; } // end if System.out.println( "Read file '" + filename +"'" ); InputStream input = null; InputStream input2 = null; // Open file try { input = new BufferedInputStream( new FileInputStream( filename) ); // input2 = new BufferedInputStream( // new FileInputStream( filename2) ); } catch( IOException ex ) { System.out.println( "can't open file '" + filename + "' : " + ex.getMessage() ); } // Check file syntax try { XmlParser parser = new XmlParser(); parser.setValidating(true); parser.setDetailLevel(2); XmlDefinitionsSet definitions = new XmlDefinitionsSet(); System.out.println( " Parse file" ); parser.parse( input, definitions); // System.out.println( " Check file 2" ); //parser.parse( input2, definitions); System.out.println( " done." ); System.out.println( " Result : " + definitions.toString() ); } catch( Exception ex ) { System.out.println( "Error during parsing '" + filename + "' : " + ex.getMessage() ); ex.printStackTrace(); } sq~ uq~ppppq~–q~–xsq~esq~ uq~ppppqW·sq~ uq~pppppte/** * Constructor. * Creates a digester parser and initializes syntax rules. */ pqWøq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t÷ digester = new Digester(); digester.setValidating(validating); digester.setNamespaceAware(true); digester.setUseContextClassLoader(true); // Register our local copy of the DTDs that we can find for (int i = 0; i < registrations.length; i += 2) { URL url = this.getClass().getResource(registrations[i+1]); if (url != null) { digester.register(registrations[i], url.toString()); } } // Init syntax rules initDigester( digester ); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqY”sq~ uq~pppppppt validatingq~{xsq~ uq~pppppq~~q~q~~q~pq~€xpppqW·sq~ uq~pppppt3/** * Set digester validating flag. */ pt setValidatingq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t0 digester.setValidating( validating); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqY¬sq~ uq~pppppppt detailLevelq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xpppqW·sq~ uq~pppppt{/** * Set digester detail level. * @deprecated Use the commons-logging to set digester debug level. */ ptsetDetailLevelq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqYÄsq~ uq~ppppppptdigesterq~{xsq~ uq~pppppq~~q~q~~q~ Špq~€xpppqW·sq~ uq~pppppt®/** * Init digester for components syntax. * This is an old set of rules, left for backward compatibility. * @param digester Digester instance to use. */ pt*initDigesterForComponentsDefinitionsSyntaxq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~d1xq~~tW // Common constants String PACKAGE_NAME = "org.apache.struts.tiles.xmlDefinition"; String DEFINITION_TAG = "component-definitions/definition"; String definitionHandlerClass = PACKAGE_NAME + ".XmlDefinition"; String PUT_TAG = DEFINITION_TAG + "/put"; String putAttributeHandlerClass = PACKAGE_NAME + ".XmlAttribute"; String LIST_TAG = DEFINITION_TAG + "/putList"; String listHandlerClass = PACKAGE_NAME + ".XmlListAttribute"; String ADD_LIST_ELE_TAG = LIST_TAG + "/add"; // syntax rules digester.addObjectCreate( DEFINITION_TAG, definitionHandlerClass ); digester.addSetProperties( DEFINITION_TAG); digester.addSetNext( DEFINITION_TAG, "putDefinition", definitionHandlerClass); // put / putAttribute rules digester.addObjectCreate( PUT_TAG, putAttributeHandlerClass); digester.addSetNext( PUT_TAG, "addAttribute", putAttributeHandlerClass); digester.addSetProperties( PUT_TAG); digester.addCallMethod( PUT_TAG, "setBody", 0); // list rules digester.addObjectCreate( LIST_TAG, listHandlerClass); digester.addSetProperties( LIST_TAG); digester.addSetNext( LIST_TAG, "addAttribute", putAttributeHandlerClass); // list elements rules // We use Attribute class to avoid rewriting a new class. // Name part can't be used in listElement attribute. digester.addObjectCreate( ADD_LIST_ELE_TAG, putAttributeHandlerClass); digester.addSetNext( ADD_LIST_ELE_TAG, "add", putAttributeHandlerClass); digester.addSetProperties( ADD_LIST_ELE_TAG); digester.addCallMethod( ADD_LIST_ELE_TAG, "setBody", 0); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqYÜsq~ uq~ppppppptdigesterq~{xsq~ uq~pppppq~~q~q~~q~ Špq~€xpppqW·sq~ uq~ppppptª/** * Init digester for Tiles syntax. * Same as components, but with first element = tiles-definitions * @param digester Digester instance to use. */ pt%initDigesterForTilesDefinitionsSyntaxq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~d1xq~~t | // Common constants String PACKAGE_NAME = "org.apache.struts.tiles.xmlDefinition"; String DEFINITION_TAG = "tiles-definitions/definition"; String definitionHandlerClass = PACKAGE_NAME + ".XmlDefinition"; String PUT_TAG = DEFINITION_TAG + "/put"; String putAttributeHandlerClass = PACKAGE_NAME + ".XmlAttribute"; //String LIST_TAG = DEFINITION_TAG + "/putList"; // List tag value String LIST_TAG = "putList"; String DEF_LIST_TAG = DEFINITION_TAG + "/" + LIST_TAG; String listHandlerClass = PACKAGE_NAME + ".XmlListAttribute"; // Tag value for adding an element in a list String ADD_LIST_ELE_TAG = "*/" + LIST_TAG + "/add"; // syntax rules digester.addObjectCreate( DEFINITION_TAG, definitionHandlerClass ); digester.addSetProperties( DEFINITION_TAG); digester.addSetNext( DEFINITION_TAG, "putDefinition", definitionHandlerClass); // put / putAttribute rules // Rules for a same pattern are called in order, but rule.end() are called // in reverse order. // SetNext and CallMethod use rule.end() method. So, placing SetNext in // first position ensure it will be called last (sic). digester.addObjectCreate( PUT_TAG, putAttributeHandlerClass); digester.addSetNext( PUT_TAG, "addAttribute", putAttributeHandlerClass); digester.addSetProperties( PUT_TAG); digester.addCallMethod( PUT_TAG, "setBody", 0); // Definition level list rules // This is rules for lists nested in a definition digester.addObjectCreate( DEF_LIST_TAG, listHandlerClass); digester.addSetProperties( DEF_LIST_TAG); digester.addSetNext( DEF_LIST_TAG, "addAttribute", putAttributeHandlerClass); // list elements rules // We use Attribute class to avoid rewriting a new class. // Name part can't be used in listElement attribute. digester.addObjectCreate( ADD_LIST_ELE_TAG, putAttributeHandlerClass); digester.addSetNext( ADD_LIST_ELE_TAG, "add", putAttributeHandlerClass); digester.addSetProperties( ADD_LIST_ELE_TAG); digester.addCallMethod( ADD_LIST_ELE_TAG, "setBody", 0); // nested list elements rules // Create a list handler, and add it to parent list String NESTED_LIST = "*/" + LIST_TAG + "/" + LIST_TAG; digester.addObjectCreate( NESTED_LIST, listHandlerClass); digester.addSetProperties( NESTED_LIST); digester.addSetNext( NESTED_LIST, "add", putAttributeHandlerClass); // item elements rules // We use Attribute class to avoid rewriting a new class. // Name part can't be used in listElement attribute. //String ADD_WILDCARD = LIST_TAG + "/addItem"; // non String ADD_WILDCARD = LIST_TAG + "/addx*"; String ADD_WILDCARD = "*/item"; String menuItemDefaultClass = "org.apache.struts.tiles.beans.SimpleMenuItem"; digester.addObjectCreate( ADD_WILDCARD, menuItemDefaultClass, "classtype"); digester.addSetNext( ADD_WILDCARD, "add", "java.lang.Object"); digester.addSetProperties( ADD_WILDCARD); // bean elements rules String BEAN_TAG = "*/bean"; String beanDefaultClass = "org.apache.struts.tiles.beans.SimpleMenuItem"; digester.addObjectCreate( BEAN_TAG, beanDefaultClass, "classtype"); digester.addSetNext( BEAN_TAG, "add", "java.lang.Object"); digester.addSetProperties( BEAN_TAG); // Set properties to surrounding element digester.addSetProperty(BEAN_TAG+ "/set-property", "property", "value"); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqYôsq~ uq~ppppppptdigesterq~{xsq~ uq~pppppq~~q~q~~q~ Špq~€xpppqW·sq~ uq~ppppptð/** * Init digester in order to parse instances definition file syntax. * Instances is an old name for "definition". This method is left for * backwards compatibility. * @param digester Digester instance to use. */ ptinitDigesterForInstancesSyntaxq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~d1xq~~t8 // Build a digester to process our configuration resource String PACKAGE_NAME = "org.apache.struts.tiles.xmlDefinition"; String INSTANCE_TAG = "component-instances/instance"; String instanceHandlerClass = PACKAGE_NAME + ".XmlDefinition"; String PUT_TAG = INSTANCE_TAG + "/put"; String PUTATTRIBUTE_TAG = INSTANCE_TAG + "/putAttribute"; String putAttributeHandlerClass = PACKAGE_NAME + ".XmlAttribute"; String LIST_TAG = INSTANCE_TAG + "/putList"; String listHandlerClass = PACKAGE_NAME + ".XmlListAttribute"; String ADD_LIST_ELE_TAG = LIST_TAG + "/add"; // component instance rules digester.addObjectCreate( INSTANCE_TAG, instanceHandlerClass ); digester.addSetProperties( INSTANCE_TAG); digester.addSetNext( INSTANCE_TAG, "putDefinition", instanceHandlerClass); // put / putAttribute rules digester.addObjectCreate( PUTATTRIBUTE_TAG, putAttributeHandlerClass); digester.addSetProperties( PUTATTRIBUTE_TAG); digester.addSetNext( PUTATTRIBUTE_TAG, "addAttribute", putAttributeHandlerClass); // put / putAttribute rules digester.addObjectCreate( PUT_TAG, putAttributeHandlerClass); digester.addSetProperties( PUT_TAG); digester.addSetNext( PUT_TAG, "addAttribute", putAttributeHandlerClass); // list rules digester.addObjectCreate( LIST_TAG, listHandlerClass); digester.addSetProperties( LIST_TAG); digester.addSetNext( LIST_TAG, "addAttribute", putAttributeHandlerClass); // list elements rules // We use Attribute class to avoid rewriting a new class. // Name part can't be used in listElement attribute. digester.addObjectCreate( ADD_LIST_ELE_TAG, putAttributeHandlerClass); digester.addSetProperties( ADD_LIST_ELE_TAG); digester.addSetNext( ADD_LIST_ELE_TAG, "add", putAttributeHandlerClass); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqZ sq~ uq~ppppppptdigesterq~{xsq~ uq~pppppq~~q~q~~q~ Špq~€xpppqW·sq~ uq~ppppptS/** * Init digester. * @param digester Digester instance to use. */ pt initDigesterq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t¤ initDigesterForTilesDefinitionsSyntax( digester ); initDigesterForComponentsDefinitionsSyntax( digester ); initDigesterForInstancesSyntax( digester ); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqZ$sq~ uq~ppppppptinq~{xsq~ uq~pppppq~~q~q~~q~Wpq~€xsq~bsq~ uq~ppppqZ$sq~ uq~pppppppt definitionsq~{xsq~ uq~pppppq~~q~q~~q~2mpq~€xppqW·sq~ uq~pppppt9/** * Parse input reader and add encountered definitions to definitions set. * @param in Input stream. * @param definitions Xml Definitions set to which encountered definition are added. * @throws IOException On errors during file parsing. * @throws SAXException On errors parsing XML. */ ptparseq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t2 try { // set first object in stack //digester.clear(); digester.push(definitions); // parse digester.parse(in); in.close(); } catch (SAXException e) { //throw new ServletException( "Error while parsing " + mappingConfig, e); throw e; } sq~ uq~q~kq~2*ppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqZDsq~ uq~ppppppptargsq~{xsq~ uq~pppppq~~q~q~~q~{t[]q~€xpppqW·sq~ uq~pppppt7/** * Main method to check file syntax. */ ptmainq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t/ //String filename = "E:/programs/jakarta-tomcat/webapps/wtiles-struts/WEB-INF/tiles-examples-defs.xml"; String filename = "E:/programs/jakarta-tomcat-4.0.3/webapps/wtiles-struts/WEB-INF/tiles-examples-defs.xml"; //String filename = "E:/programs/jakarta-tomcat/webapps/wtiles-struts/WEB-INF/tilesDefinitions.xml"; //String filename = "E:/programs/jakarta-tomcat/webapps/wtiles-channel/WEB-INF/componentDefinitions.xml"; //String filename2 = "E:/programs/jakarta-tomcat/webapps/wtiles-tutorial/WEB-INF/componentDefinitions.xml"; if( args.length > 1 ) { filename = args[1]; } // end if System.out.println( "Read file '" + filename +"'" ); InputStream input = null; // InputStream input2 = null; // Open file try { input = new BufferedInputStream( new FileInputStream( filename) ); // input2 = new BufferedInputStream( // new FileInputStream( filename2) ); } catch( IOException ex ) { System.out.println( "can't open file '" + filename + "' : " + ex.getMessage() ); } // Check file syntax try { XmlParser parser = new XmlParser(); parser.setValidating(true); parser.setDetailLevel(2); XmlDefinitionsSet definitions = new XmlDefinitionsSet(); System.out.println( " Parse file" ); parser.parse( input, definitions); // System.out.println( " Check file 2" ); //parser.parse( input2, definitions); System.out.println( " done." ); System.out.println( " Result : " + definitions.toString() ); } catch( Exception ex ) { System.out.println( "Error during parsing '" + filename + "' : " + ex.getMessage() ); ex.printStackTrace(); } sq~ uq~ppppq~~q~~xsq~esq~ uq~ppppqW·sq~ uq~pppppte/** * Constructor. * Creates a digester parser and initializes syntax rules. */ pqWøq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft÷ digester = new Digester(); digester.setValidating(validating); digester.setNamespaceAware(true); digester.setUseContextClassLoader(true); // Register our local copy of the DTDs that we can find for (int i = 0; i < registrations.length; i += 2) { URL url = this.getClass().getResource(registrations[i+1]); if (url != null) { digester.register(registrations[i], url.toString()); } } // Init syntax rules initDigester( digester ); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqZmsq~ uq~pppppppt validatingq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxpppqW·sq~ uq~pppppt3/** * Set digester validating flag. */ pt setValidatingq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft0 digester.setValidating( validating); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqZ…sq~ uq~pppppppt detailLevelq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxpppqW·sq~ uq~pppppt{/** * Set digester detail level. * @deprecated Use the commons-logging to set digester debug level. */ ptsetDetailLevelq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqZsq~ uq~ppppppptdigesterq~cxsq~ uq~pppppq~fq~gq~fq~ Špq~hxpppqW·sq~ uq~pppppt®/** * Init digester for components syntax. * This is an old set of rules, left for backward compatibility. * @param digester Digester instance to use. */ pt*initDigesterForComponentsDefinitionsSyntaxq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~·gxq~ftW // Common constants String PACKAGE_NAME = "org.apache.struts.tiles.xmlDefinition"; String DEFINITION_TAG = "component-definitions/definition"; String definitionHandlerClass = PACKAGE_NAME + ".XmlDefinition"; String PUT_TAG = DEFINITION_TAG + "/put"; String putAttributeHandlerClass = PACKAGE_NAME + ".XmlAttribute"; String LIST_TAG = DEFINITION_TAG + "/putList"; String listHandlerClass = PACKAGE_NAME + ".XmlListAttribute"; String ADD_LIST_ELE_TAG = LIST_TAG + "/add"; // syntax rules digester.addObjectCreate( DEFINITION_TAG, definitionHandlerClass ); digester.addSetProperties( DEFINITION_TAG); digester.addSetNext( DEFINITION_TAG, "putDefinition", definitionHandlerClass); // put / putAttribute rules digester.addObjectCreate( PUT_TAG, putAttributeHandlerClass); digester.addSetNext( PUT_TAG, "addAttribute", putAttributeHandlerClass); digester.addSetProperties( PUT_TAG); digester.addCallMethod( PUT_TAG, "setBody", 0); // list rules digester.addObjectCreate( LIST_TAG, listHandlerClass); digester.addSetProperties( LIST_TAG); digester.addSetNext( LIST_TAG, "addAttribute", putAttributeHandlerClass); // list elements rules // We use Attribute class to avoid rewriting a new class. // Name part can't be used in listElement attribute. digester.addObjectCreate( ADD_LIST_ELE_TAG, putAttributeHandlerClass); digester.addSetNext( ADD_LIST_ELE_TAG, "add", putAttributeHandlerClass); digester.addSetProperties( ADD_LIST_ELE_TAG); digester.addCallMethod( ADD_LIST_ELE_TAG, "setBody", 0); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqZµsq~ uq~ppppppptdigesterq~cxsq~ uq~pppppq~fq~gq~fq~ Špq~hxpppqW·sq~ uq~ppppptª/** * Init digester for Tiles syntax. * Same as components, but with first element = tiles-definitions * @param digester Digester instance to use. */ pt%initDigesterForTilesDefinitionsSyntaxq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~·gxq~ft | // Common constants String PACKAGE_NAME = "org.apache.struts.tiles.xmlDefinition"; String DEFINITION_TAG = "tiles-definitions/definition"; String definitionHandlerClass = PACKAGE_NAME + ".XmlDefinition"; String PUT_TAG = DEFINITION_TAG + "/put"; String putAttributeHandlerClass = PACKAGE_NAME + ".XmlAttribute"; //String LIST_TAG = DEFINITION_TAG + "/putList"; // List tag value String LIST_TAG = "putList"; String DEF_LIST_TAG = DEFINITION_TAG + "/" + LIST_TAG; String listHandlerClass = PACKAGE_NAME + ".XmlListAttribute"; // Tag value for adding an element in a list String ADD_LIST_ELE_TAG = "*/" + LIST_TAG + "/add"; // syntax rules digester.addObjectCreate( DEFINITION_TAG, definitionHandlerClass ); digester.addSetProperties( DEFINITION_TAG); digester.addSetNext( DEFINITION_TAG, "putDefinition", definitionHandlerClass); // put / putAttribute rules // Rules for a same pattern are called in order, but rule.end() are called // in reverse order. // SetNext and CallMethod use rule.end() method. So, placing SetNext in // first position ensure it will be called last (sic). digester.addObjectCreate( PUT_TAG, putAttributeHandlerClass); digester.addSetNext( PUT_TAG, "addAttribute", putAttributeHandlerClass); digester.addSetProperties( PUT_TAG); digester.addCallMethod( PUT_TAG, "setBody", 0); // Definition level list rules // This is rules for lists nested in a definition digester.addObjectCreate( DEF_LIST_TAG, listHandlerClass); digester.addSetProperties( DEF_LIST_TAG); digester.addSetNext( DEF_LIST_TAG, "addAttribute", putAttributeHandlerClass); // list elements rules // We use Attribute class to avoid rewriting a new class. // Name part can't be used in listElement attribute. digester.addObjectCreate( ADD_LIST_ELE_TAG, putAttributeHandlerClass); digester.addSetNext( ADD_LIST_ELE_TAG, "add", putAttributeHandlerClass); digester.addSetProperties( ADD_LIST_ELE_TAG); digester.addCallMethod( ADD_LIST_ELE_TAG, "setBody", 0); // nested list elements rules // Create a list handler, and add it to parent list String NESTED_LIST = "*/" + LIST_TAG + "/" + LIST_TAG; digester.addObjectCreate( NESTED_LIST, listHandlerClass); digester.addSetProperties( NESTED_LIST); digester.addSetNext( NESTED_LIST, "add", putAttributeHandlerClass); // item elements rules // We use Attribute class to avoid rewriting a new class. // Name part can't be used in listElement attribute. //String ADD_WILDCARD = LIST_TAG + "/addItem"; // non String ADD_WILDCARD = LIST_TAG + "/addx*"; String ADD_WILDCARD = "*/item"; String menuItemDefaultClass = "org.apache.struts.tiles.beans.SimpleMenuItem"; digester.addObjectCreate( ADD_WILDCARD, menuItemDefaultClass, "classtype"); digester.addSetNext( ADD_WILDCARD, "add", "java.lang.Object"); digester.addSetProperties( ADD_WILDCARD); // bean elements rules String BEAN_TAG = "*/bean"; String beanDefaultClass = "org.apache.struts.tiles.beans.SimpleMenuItem"; digester.addObjectCreate( BEAN_TAG, beanDefaultClass, "classtype"); digester.addSetNext( BEAN_TAG, "add", "java.lang.Object"); digester.addSetProperties( BEAN_TAG); // Set properties to surrounding element digester.addSetProperty(BEAN_TAG+ "/set-property", "property", "value"); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqZÍsq~ uq~ppppppptdigesterq~cxsq~ uq~pppppq~fq~gq~fq~ Špq~hxpppqW·sq~ uq~ppppptð/** * Init digester in order to parse instances definition file syntax. * Instances is an old name for "definition". This method is left for * backwards compatibility. * @param digester Digester instance to use. */ ptinitDigesterForInstancesSyntaxq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~·gxq~ft8 // Build a digester to process our configuration resource String PACKAGE_NAME = "org.apache.struts.tiles.xmlDefinition"; String INSTANCE_TAG = "component-instances/instance"; String instanceHandlerClass = PACKAGE_NAME + ".XmlDefinition"; String PUT_TAG = INSTANCE_TAG + "/put"; String PUTATTRIBUTE_TAG = INSTANCE_TAG + "/putAttribute"; String putAttributeHandlerClass = PACKAGE_NAME + ".XmlAttribute"; String LIST_TAG = INSTANCE_TAG + "/putList"; String listHandlerClass = PACKAGE_NAME + ".XmlListAttribute"; String ADD_LIST_ELE_TAG = LIST_TAG + "/add"; // component instance rules digester.addObjectCreate( INSTANCE_TAG, instanceHandlerClass ); digester.addSetProperties( INSTANCE_TAG); digester.addSetNext( INSTANCE_TAG, "putDefinition", instanceHandlerClass); // put / putAttribute rules digester.addObjectCreate( PUTATTRIBUTE_TAG, putAttributeHandlerClass); digester.addSetProperties( PUTATTRIBUTE_TAG); digester.addSetNext( PUTATTRIBUTE_TAG, "addAttribute", putAttributeHandlerClass); // put / putAttribute rules digester.addObjectCreate( PUT_TAG, putAttributeHandlerClass); digester.addSetProperties( PUT_TAG); digester.addSetNext( PUT_TAG, "addAttribute", putAttributeHandlerClass); // list rules digester.addObjectCreate( LIST_TAG, listHandlerClass); digester.addSetProperties( LIST_TAG); digester.addSetNext( LIST_TAG, "addAttribute", putAttributeHandlerClass); // list elements rules // We use Attribute class to avoid rewriting a new class. // Name part can't be used in listElement attribute. digester.addObjectCreate( ADD_LIST_ELE_TAG, putAttributeHandlerClass); digester.addSetProperties( ADD_LIST_ELE_TAG); digester.addSetNext( ADD_LIST_ELE_TAG, "add", putAttributeHandlerClass); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqZåsq~ uq~ppppppptdigesterq~cxsq~ uq~pppppq~fq~gq~fq~ Špq~hxpppqW·sq~ uq~ppppptS/** * Init digester. * @param digester Digester instance to use. */ pt initDigesterq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft¤ initDigesterForTilesDefinitionsSyntax( digester ); initDigesterForComponentsDefinitionsSyntax( digester ); initDigesterForInstancesSyntax( digester ); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqZýsq~ uq~ppppppptinq~cxsq~ uq~pppppq~fq~gq~fq~Wpq~hxsq~bsq~ uq~ppppqZýsq~ uq~pppppppt definitionsq~cxsq~ uq~pppppq~fq~gq~fq~2mpq~hxppqW·sq~ uq~pppppt9/** * Parse input reader and add encountered definitions to definitions set. * @param in Input stream. * @param definitions Xml Definitions set to which encountered definition are added. * @throws IOException On errors during file parsing. * @throws SAXException On errors parsing XML. */ ptparseq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft2 try { // set first object in stack //digester.clear(); digester.push(definitions); // parse digester.parse(in); in.close(); } catch (SAXException e) { //throw new ServletException( "Error while parsing " + mappingConfig, e); throw e; } sq~ uq~q~kq~2*ppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq[sq~ uq~ppppppptargsq~cxsq~ uq~pppppq~fq~gq~fq~{t[]q~hxpppqW·sq~ uq~pppppt7/** * Main method to check file syntax. */ ptmainq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft/ //String filename = "E:/programs/jakarta-tomcat/webapps/wtiles-struts/WEB-INF/tiles-examples-defs.xml"; String filename = "E:/programs/jakarta-tomcat-4.0.3/webapps/wtiles-struts/WEB-INF/tiles-examples-defs.xml"; //String filename = "E:/programs/jakarta-tomcat/webapps/wtiles-struts/WEB-INF/tilesDefinitions.xml"; //String filename = "E:/programs/jakarta-tomcat/webapps/wtiles-channel/WEB-INF/componentDefinitions.xml"; //String filename2 = "E:/programs/jakarta-tomcat/webapps/wtiles-tutorial/WEB-INF/componentDefinitions.xml"; if( args.length > 1 ) { filename = args[1]; } // end if System.out.println( "Read file '" + filename +"'" ); InputStream input = null; // InputStream input2 = null; // Open file try { input = new BufferedInputStream( new FileInputStream( filename) ); // input2 = new BufferedInputStream( // new FileInputStream( filename2) ); } catch( IOException ex ) { System.out.println( "can't open file '" + filename + "' : " + ex.getMessage() ); } // Check file syntax try { XmlParser parser = new XmlParser(); parser.setValidating(true); parser.setDetailLevel(2); XmlDefinitionsSet definitions = new XmlDefinitionsSet(); System.out.println( " Parse file" ); parser.parse( input, definitions); // System.out.println( " Check file 2" ); //parser.parse( input2, definitions); System.out.println( " done." ); System.out.println( " Result : " + definitions.toString() ); } catch( Exception ex ) { System.out.println( "Error during parsing '" + filename + "' : " + ex.getMessage() ); ex.printStackTrace(); } sq~ uq~ppppq~fq~fxppppq~![sq~ uq~pppppppqWøq~¢xsq~ uq~ppppq~¥sq~ uq~qW­pppsq~ uq~ppppq~¥q~¥q~%¹sq~ uq~pppppq~¥sq~ uq~ppppsq~ uq~sq~(sq~ uq~ppppq~!^sq~ uq~pppppt˜/** Xml parser used. * Attribute is transient to allow serialization. In this implementaiton, * xmlParser is created each time we need it ;-(. */ /** Xml parser used. * Attribute is transient to allow serialization. In this implementaiton, * xmlParser is created each time we need it ;-(. */ /** Xml parser used. * Attribute is transient to allow serialization. In this implementaiton, * xmlParser is created each time we need it ;-(. */ /** Xml parser used. * Attribute is transient to allow serialization. In this implementaiton, * xmlParser is created each time we need it ;-(. */ pt xmlParserq~¢xsq~ uq~pppppq~¥q~¦q~¥qW·pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xppppq~¥sq~#q~¥xpppq~»xq~¥ppxq2qq2_q~4¯qW•qWŒq~4Êq~4Áq2hpppppq~ sq~ uq~pppp. * *//** * A set of definitions read from XML definitions file. */ ptXmlDefinitionsSet.javaq~fxsq~ uq~ppppsq~ uq~q~2mpppq~fxsq~ uq~pppppq~¥sq~ uq~ppppsq~ uq~sq~bsq~ uq~ppppsq~esq~ uq~q[Špppq~!Ìsq~ uq~pppppth/** * Constructor. * Create a factory initialized with definitions from XmlDefinitionsSet. * @param xmlDefinitions resolved definition from XmlDefinitionSet. * @throws DefinitionsFactoryException If an error occurs while creating a definition. * @throws NoSuchDefinitionException If an error occurs while resolving inheritance */ ptDefinitionsFactoryq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t³ definitions = new HashMap(); // First, resolve inheritance xmlDefinitions.resolveInheritances(); // Walk thru xml set and copy each definitions. Iterator i = xmlDefinitions.getDefinitions().values().iterator(); while( i.hasNext() ) { XmlDefinition xmlDefinition = (XmlDefinition)i.next(); putDefinition( new ComponentDefinition( xmlDefinition) ); } // end loop sq~ uq~q~"pppq~¥q~¥xsq~ uq~ppppppptxmlDefinitionsq~¢xsq~ uq~pppppq~¥q~¦q~¥q~2mpq~§xsq~bsq~ uq~ppppsq~isq~ uq~q[¢pppq~Òsq~ uq~ppppptB/** * Resolve inheritance. * First, resolve parent's inheritance, then set path to the parent's path. * Also copy attributes setted in parent, and not set in child * If instance doesn't extends something, do nothing. * @throws NoSuchInstanceException If a inheritance can be solved. */ ptresolveInheritanceq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tw // Already done, or not needed ? if( isVisited || !isExtending() ) return; if( debug) System.out.println( "Resolve definition for child name='" + getName() + "' extends='" + getExtends() + "'." ); // Set as visited to avoid endless recurisvity. setIsVisited( true ); // Resolve parent before itself. XmlDefinition parent = definitionsSet.getDefinition( getExtends() ); if( parent == null ) { // error String msg = "Error while resolving definition inheritance: child '" + getName() + "' can't find its ancestor '" + getExtends() + "'. Please check your description file."; System.out.println( msg ); // to do : find better exception throw new NoSuchDefinitionException( msg ); } parent.resolveInheritance( definitionsSet ); // Iterate on each parent's attribute, and add it if not defined in child. Iterator parentAttributes = parent.getAttributes().keySet().iterator(); while( parentAttributes.hasNext() ) { String name = (String)parentAttributes.next(); if( !getAttributes().containsKey(name) ) putAttribute( name, parent.getAttribute(name) ); } // Set path and role if not setted if( path == null ) setPath( parent.getPath() ); if( role == null ) setRole( parent.getRole() ); if( controller==null ) { setController( parent.getController()); setControllerType( parent.getControllerType()); } sq~ uq~q~"pppq~¥q~¥xsq~ uq~ppppppptdefinitionsSetq~¢xsq~ uq~pppppq~¥q~¦q~¥q~2mpq~§xq~2àq~2eq~3gqYVsq~isq~ uq~sq~bsq~ uq~ppppq[ºsq~ uq~ppppppptservletContextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xsq~bsq~ uq~ppppq[ºsq~ uq~ppppppptpostfixq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq[ºsq~ uq~ppppppptxmlDefinitionsq~rxsq~ uq~pppppq~–q~—q~–q~2mpq~˜xpq~!^sq~ uq~pppppt­/** * Parse files associated to postix if they exist. * For each name in filenames, append postfix before file extension, * then try to load the corresponding file. * If file doesn't exist, try next one. Each file description is added to * the XmlDefinitionsSet description. * The XmlDefinitionsSet description is created only if there is a definition file. * Inheritance is not resolved in the returned XmlDefinitionsSet. * If no description file can be opened, and no definiion set is provided, return null. * @param postfix Postfix to add to each description file. * @param xmlDefinitions Definitions set to which definitions will be added. If null, a definitions * set is created on request. * @return XmlDefinitionsSet The definitions set created or passed as parameter. * @throws DefinitionsFactoryException If an error happen during file parsing. */ pt parseXmlFilesq~rxsq~ uq~pppppq~–q~—q~–q~2mpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~'bxq~–t” if( postfix != null && postfix.length() == 0 ) postfix = null; // Iterate throw each file name in list Iterator i = filenames.iterator(); while( i.hasNext() ) { String filename = concatPostfix((String)i.next(), postfix) ; xmlDefinitions = parseXmlFile( servletContext, filename, xmlDefinitions ); } // end loop return xmlDefinitions; sq~ uq~q~pppq~–q~–xq[Ísq~isq~ uq~sq~bsq~ uq~ppppq[âsq~ uq~ppppppptservletContextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xsq~bsq~ uq~ppppq[âsq~ uq~ppppppptfilenameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq[âsq~ uq~ppppppptxmlDefinitionsq~rxsq~ uq~pppppq~–q~—q~–q~2mpq~˜xpq~!^sq~ uq~ppppptê/** * Parse specified xml file and add definition to specified definitions set. * This method is used to load several description files in one instances list. * If filename exist and definition set is null, create a new set. Otherwise, return * passed definition set (can be null). * @param servletContext Current servlet context. Used to open file. * @param filename Name of file to parse. * @param xmlDefinitions Definitions set to which definitions will be added. If null, a definitions * set is created on request. * @return XmlDefinitionsSet The definitions set created or passed as parameter. * @throws DefinitionsFactoryException If an error happen during file parsing. */ pt parseXmlFileq~rxsq~ uq~pppppq~–q~—q~–q~2mpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~'bxq~–t­ try { InputStream input = servletContext.getResourceAsStream(filename); // Try to load using real path. // This allow to load config file under websphere 3.5.x // Patch proposed Houston, Stephen (LIT) on 5 Apr 2002 if (null == input) { try { input = new java.io.FileInputStream(servletContext.getRealPath(filename)); } catch (Exception e) { } } // If still nothing found, this mean no config file is associated if(input == null ) { if(log.isDebugEnabled()) log.debug( "Can't open file '" + filename + "'" ); return xmlDefinitions; } // Check if parser already exist. // Doesn't seem to work yet. //if( xmlParser == null ) if( true ) { // create it //if(log.isDebugEnabled()) //log.debug( "Create xmlParser"); xmlParser = new XmlParser(); xmlParser.setValidating(isValidatingParser); xmlParser.setDetailLevel(parserDetailLevel); } // Check if definition set already exist. if( xmlDefinitions == null ) { // create it //if(log.isDebugEnabled()) //log.debug( "Create xmlDefinitions"); xmlDefinitions = new XmlDefinitionsSet(); } xmlParser.parse( input, xmlDefinitions ); } catch( SAXException ex ) { if(log.isDebugEnabled()) { log.debug( "Error while parsing file '" + filename + "'."); ex.printStackTrace(); } throw new DefinitionsFactoryException( "Error while parsing file '" + filename + "'. " + ex.getMessage(), ex ); } catch( IOException ex ) { throw new DefinitionsFactoryException( "IO Error while parsing file '" + filename + "'. " + ex.getMessage(), ex); } return xmlDefinitions; sq~ uq~q~pppq~–q~–xq[õsq~bsq~ uq~ppppsq~isq~ uq~q\ pppq~Òsq~ uq~ppppptD/** * Resolve inheritance. * First, resolve parent's inheritance, then set path to the parent's path. * Also copy attributes setted in parent, and not set in child * If instance doesn't extends something, do nothing. * @throws NoSuchDefinitionException If a inheritance can be solved. */ ptresolveInheritanceq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tF // Already done, or not needed ? if( isVisited || !isExtending() ) return; if(log.isDebugEnabled()) log.debug( "Resolve definition for child name='" + getName() + "' extends='" + getExtends() + "'."); // Set as visited to avoid endless recurisvity. setIsVisited( true ); // Resolve parent before itself. XmlDefinition parent = definitionsSet.getDefinition( getExtends() ); if( parent == null ) { // error String msg = "Error while resolving definition inheritance: child '" + getName() + "' can't find its ancestor '" + getExtends() + "'. Please check your description file."; log.error( msg ); // to do : find better exception throw new NoSuchDefinitionException( msg ); } parent.resolveInheritance( definitionsSet ); // Iterate on each parent's attribute, and add it if not defined in child. Iterator parentAttributes = parent.getAttributes().keySet().iterator(); while( parentAttributes.hasNext() ) { String name = (String)parentAttributes.next(); if( !getAttributes().containsKey(name) ) putAttribute( name, parent.getAttribute(name) ); } // Set path and role if not setted if( path == null ) setPath( parent.getPath() ); if( role == null ) setRole( parent.getRole() ); if( controller==null ) { setController( parent.getController()); setControllerType( parent.getControllerType()); } sq~ uq~q~"pppq~–q~–xsq~ uq~ppppppptdefinitionsSetq~rxsq~ uq~pppppq~–q~—q~–q~2mpq~˜xsq~bsq~ uq~ppppsq~isq~ uq~q\"pppq~Òsq~ uq~ppppptG/** * Resolve inheritance. * First, resolve parent's inheritance, then set path to the parent's path. * Also copy attributes setted in parent, and not set in child * If instance doesn't extend anything, do nothing. * @throws NoSuchDefinitionException If an inheritance can not be solved. */ ptresolveInheritanceq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tE // Already done, or not needed ? if( isVisited || !isExtending() ) return; if(log.isDebugEnabled()) log.debug( "Resolve definition for child name='" + getName() + "' extends='" + getExtends() + "'."); // Set as visited to avoid endless recurisvity. setIsVisited( true ); // Resolve parent before itself. XmlDefinition parent = definitionsSet.getDefinition( getExtends() ); if( parent == null ) { // error String msg = "Error while resolving definition inheritance: child '" + getName() + "' can't find its ancestor '" + getExtends() + "'. Please check your description file."; log.error( msg ); // to do : find better exception throw new NoSuchDefinitionException( msg ); } parent.resolveInheritance( definitionsSet ); // Iterate on each parent's attribute and add it if not defined in child. Iterator parentAttributes = parent.getAttributes().keySet().iterator(); while( parentAttributes.hasNext() ) { String name = (String)parentAttributes.next(); if( !getAttributes().containsKey(name) ) putAttribute( name, parent.getAttribute(name) ); } // Set path and role if not setted if( path == null ) setPath( parent.getPath() ); if( role == null ) setRole( parent.getRole() ); if( controller==null ) { setController( parent.getController()); setControllerType( parent.getControllerType()); } sq~ uq~q~"pppq~~q~~xsq~ uq~ppppppptdefinitionsSetq~{xsq~ uq~pppppq~~q~q~~q~2mpq~€xq~3îqZ/sq~isq~ uq~sq~bsq~ uq~ppppq\:sq~ uq~ppppppptservletContextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xsq~bsq~ uq~ppppq\:sq~ uq~ppppppptpostfixq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq\:sq~ uq~ppppppptxmlDefinitionsq~{xsq~ uq~pppppq~~q~q~~q~2mpq~€xpq~!^sq~ uq~pppppt¶/** * Parse files associated to postix if they exist. * For each name in filenames, append postfix before file extension, * then try to load the corresponding file. * If file doesn't exist, try next one. Each file description is added to * the XmlDefinitionsSet description. * The XmlDefinitionsSet description is created only if there is a definition file. * Inheritance is not resolved in the returned XmlDefinitionsSet. * If no description file can be opened and no definiion set is provided, return null. * @param postfix Postfix to add to each description file. * @param xmlDefinitions Definitions set to which definitions will be added. If null, a definitions * set is created on request. * @return XmlDefinitionsSet The definitions set created or passed as parameter. * @throws DefinitionsFactoryException On errors parsing file. */ pt parseXmlFilesq~{xsq~ uq~pppppq~~q~q~~q~2mpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~d1xq~~t” if( postfix != null && postfix.length() == 0 ) postfix = null; // Iterate throw each file name in list Iterator i = filenames.iterator(); while( i.hasNext() ) { String filename = concatPostfix((String)i.next(), postfix) ; xmlDefinitions = parseXmlFile( servletContext, filename, xmlDefinitions ); } // end loop return xmlDefinitions; sq~ uq~q~pppq~~q~~xq\Msq~isq~ uq~sq~bsq~ uq~ppppq\bsq~ uq~ppppppptservletContextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xsq~bsq~ uq~ppppq\bsq~ uq~ppppppptfilenameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq\bsq~ uq~ppppppptxmlDefinitionsq~{xsq~ uq~pppppq~~q~q~~q~2mpq~€xpq~!^sq~ uq~ppppptõ/** * Parse specified xml file and add definition to specified definitions set. * This method is used to load several description files in one instances list. * If filename exists and definition set is null, create a new set. Otherwise, return * passed definition set (can be null). * @param servletContext Current servlet context. Used to open file. * @param filename Name of file to parse. * @param xmlDefinitions Definitions set to which definitions will be added. If null, a definitions * set is created on request. * @return XmlDefinitionsSet The definitions set created or passed as parameter. * @throws DefinitionsFactoryException On errors parsing file. */ pt parseXmlFileq~{xsq~ uq~pppppq~~q~q~~q~2mpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~d1xq~~t­ try { InputStream input = servletContext.getResourceAsStream(filename); // Try to load using real path. // This allow to load config file under websphere 3.5.x // Patch proposed Houston, Stephen (LIT) on 5 Apr 2002 if (null == input) { try { input = new java.io.FileInputStream(servletContext.getRealPath(filename)); } catch (Exception e) { } } // If still nothing found, this mean no config file is associated if(input == null ) { if(log.isDebugEnabled()) log.debug( "Can't open file '" + filename + "'" ); return xmlDefinitions; } // Check if parser already exist. // Doesn't seem to work yet. //if( xmlParser == null ) if( true ) { // create it //if(log.isDebugEnabled()) //log.debug( "Create xmlParser"); xmlParser = new XmlParser(); xmlParser.setValidating(isValidatingParser); xmlParser.setDetailLevel(parserDetailLevel); } // Check if definition set already exist. if( xmlDefinitions == null ) { // create it //if(log.isDebugEnabled()) //log.debug( "Create xmlDefinitions"); xmlDefinitions = new XmlDefinitionsSet(); } xmlParser.parse( input, xmlDefinitions ); } catch( SAXException ex ) { if(log.isDebugEnabled()) { log.debug( "Error while parsing file '" + filename + "'."); ex.printStackTrace(); } throw new DefinitionsFactoryException( "Error while parsing file '" + filename + "'. " + ex.getMessage(), ex ); } catch( IOException ex ) { throw new DefinitionsFactoryException( "IO Error while parsing file '" + filename + "'. " + ex.getMessage(), ex); } return xmlDefinitions; sq~ uq~q~pppq~~q~~xq\usq~bsq~ uq~ppppsq~isq~ uq~q\Špppq~Òsq~ uq~ppppptG/** * Resolve inheritance. * First, resolve parent's inheritance, then set path to the parent's path. * Also copy attributes setted in parent, and not set in child * If instance doesn't extend anything, do nothing. * @throws NoSuchDefinitionException If an inheritance can not be solved. */ ptresolveInheritanceq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftE // Already done, or not needed ? if( isVisited || !isExtending() ) return; if(log.isDebugEnabled()) log.debug( "Resolve definition for child name='" + getName() + "' extends='" + getExtends() + "'."); // Set as visited to avoid endless recurisvity. setIsVisited( true ); // Resolve parent before itself. XmlDefinition parent = definitionsSet.getDefinition( getExtends() ); if( parent == null ) { // error String msg = "Error while resolving definition inheritance: child '" + getName() + "' can't find its ancestor '" + getExtends() + "'. Please check your description file."; log.error( msg ); // to do : find better exception throw new NoSuchDefinitionException( msg ); } parent.resolveInheritance( definitionsSet ); // Iterate on each parent's attribute and add it if not defined in child. Iterator parentAttributes = parent.getAttributes().keySet().iterator(); while( parentAttributes.hasNext() ) { String name = (String)parentAttributes.next(); if( !getAttributes().containsKey(name) ) putAttribute( name, parent.getAttribute(name) ); } // Set path and role if not setted if( path == null ) setPath( parent.getPath() ); if( role == null ) setRole( parent.getRole() ); if( controller==null ) { setController( parent.getController()); setControllerType( parent.getControllerType()); } sq~ uq~q~"pppq~fq~fxsq~ uq~ppppppptdefinitionsSetq~cxsq~ uq~pppppq~fq~gq~fq~2mpq~hxq~4uq[sq~isq~ uq~sq~bsq~ uq~ppppq\¢sq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxsq~bsq~ uq~ppppq\¢sq~ uq~ppppppptpostfixq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq\¢sq~ uq~ppppppptxmlDefinitionsq~cxsq~ uq~pppppq~fq~gq~fq~2mpq~hxpq~!^sq~ uq~pppppt¶/** * Parse files associated to postix if they exist. * For each name in filenames, append postfix before file extension, * then try to load the corresponding file. * If file doesn't exist, try next one. Each file description is added to * the XmlDefinitionsSet description. * The XmlDefinitionsSet description is created only if there is a definition file. * Inheritance is not resolved in the returned XmlDefinitionsSet. * If no description file can be opened and no definiion set is provided, return null. * @param postfix Postfix to add to each description file. * @param xmlDefinitions Definitions set to which definitions will be added. If null, a definitions * set is created on request. * @return XmlDefinitionsSet The definitions set created or passed as parameter. * @throws DefinitionsFactoryException On errors parsing file. */ pt parseXmlFilesq~cxsq~ uq~pppppq~fq~gq~fq~2mpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~·gxq~ft” if( postfix != null && postfix.length() == 0 ) postfix = null; // Iterate throw each file name in list Iterator i = filenames.iterator(); while( i.hasNext() ) { String filename = concatPostfix((String)i.next(), postfix) ; xmlDefinitions = parseXmlFile( servletContext, filename, xmlDefinitions ); } // end loop return xmlDefinitions; sq~ uq~q~pppq~fq~fxq\µsq~isq~ uq~sq~bsq~ uq~ppppq\Êsq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxsq~bsq~ uq~ppppq\Êsq~ uq~ppppppptfilenameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq\Êsq~ uq~ppppppptxmlDefinitionsq~cxsq~ uq~pppppq~fq~gq~fq~2mpq~hxpq~!^sq~ uq~ppppptõ/** * Parse specified xml file and add definition to specified definitions set. * This method is used to load several description files in one instances list. * If filename exists and definition set is null, create a new set. Otherwise, return * passed definition set (can be null). * @param servletContext Current servlet context. Used to open file. * @param filename Name of file to parse. * @param xmlDefinitions Definitions set to which definitions will be added. If null, a definitions * set is created on request. * @return XmlDefinitionsSet The definitions set created or passed as parameter. * @throws DefinitionsFactoryException On errors parsing file. */ pt parseXmlFileq~cxsq~ uq~pppppq~fq~gq~fq~2mpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~·gxq~ft­ try { InputStream input = servletContext.getResourceAsStream(filename); // Try to load using real path. // This allow to load config file under websphere 3.5.x // Patch proposed Houston, Stephen (LIT) on 5 Apr 2002 if (null == input) { try { input = new java.io.FileInputStream(servletContext.getRealPath(filename)); } catch (Exception e) { } } // If still nothing found, this mean no config file is associated if(input == null ) { if(log.isDebugEnabled()) log.debug( "Can't open file '" + filename + "'" ); return xmlDefinitions; } // Check if parser already exist. // Doesn't seem to work yet. //if( xmlParser == null ) if( true ) { // create it //if(log.isDebugEnabled()) //log.debug( "Create xmlParser"); xmlParser = new XmlParser(); xmlParser.setValidating(isValidatingParser); xmlParser.setDetailLevel(parserDetailLevel); } // Check if definition set already exist. if( xmlDefinitions == null ) { // create it //if(log.isDebugEnabled()) //log.debug( "Create xmlDefinitions"); xmlDefinitions = new XmlDefinitionsSet(); } xmlParser.parse( input, xmlDefinitions ); } catch( SAXException ex ) { if(log.isDebugEnabled()) { log.debug( "Error while parsing file '" + filename + "'."); ex.printStackTrace(); } throw new DefinitionsFactoryException( "Error while parsing file '" + filename + "'. " + ex.getMessage(), ex ); } catch( IOException ex ) { throw new DefinitionsFactoryException( "IO Error while parsing file '" + filename + "'. " + ex.getMessage(), ex); } return xmlDefinitions; sq~ uq~q~pppq~fq~fxq\Ýppppq~»xq~¥ppxpq~§xppqW·sq~ uq~pppppt'/** * Parse input reader and add encounter definitions to definitions set. * @param in Input stream * @param definitions Xml Definitions set to which encountered definition are added. * @throws IOException If an error occur during file parsing. * @throws SAXException */ ptparseq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t2 try { // set first object in stack //digester.clear(); digester.push(definitions); // parse digester.parse(in); in.close(); } catch (SAXException e) { //throw new ServletException( "Error while parsing " + mappingConfig, e); throw e; } sq~ uq~q~2*pppq~¥q~¥xqYKqZ$qZýsq~)sq~ uq~ppppq~2sq~ uq~ppppq~rsq~ uq~ppppsq~ uq~ppppsq~Bddpxsq~zsq~ uq~ppppq~2sq~ uq~pppppq~ppt InputSourceq~rxsq~ uq~sq~Csq~ uq~ppppq~bsq~ uq~ppppsq~#q] xpppq~–sq~ uq~q\ÿpppsq~ uq~ppppq~–q~–sq~Qsq~ uq~ppppq~2sq~ uq~ppppppptInputSource.javaq~–xsq~ uq~ppppsq~ uq~q] pppq~–xsq~ uq~pppppq~–sq~ uq~ppppsq~ uq~ppppq~¢xq~–ppxpq~ sq~ uq~ppppnull for the default. * * @deprecated Look up data sources directly in servlet context attributes */ ptfindDataSourceq~=xsq~ uq~pppppq~$q~yq~$q~0çpq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t· if (key == null) return ((DataSource) dataSources.get(Action.DATA_SOURCE_KEY)); else return ((DataSource) dataSources.get(key)); sq~ uq~ppppq~$q~$xq-Hq-Ssq~isq~ uq~sq~bsq~ uq~ppppqaxsq~ uq~ppppppptkeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~ psq~ uq~ppppptE/** * Return a JDBC data source associated with this application, if any. * * @param key The servlet context attribute key under which this data * source is stored, or null for the default. * * @deprecated Look up data sources directly in servlet context attributes */ ptfindDataSourceq~¢xsq~ uq~pppppq~¥q~¦q~¥q~0çpq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t· if (key == null) return ((DataSource) dataSources.get(Action.DATA_SOURCE_KEY)); else return ((DataSource) dataSources.get(key)); sq~ uq~ppppq~¥q~¥xqMXqDsq~isq~ uq~sq~bsq~ uq~ppppqasq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~ psq~ uq~pppppt@/** * Return a JDBC data source associated with this module, if any. * * @param key The servlet context attribute key under which this data * source is stored, or null for the default. * * @deprecated Look up data sources directly in servlet context attributes */ ptfindDataSourceq~rxsq~ uq~pppppq~–q~—q~–q~0çpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t· if (key == null) return ((DataSource) dataSources.get(Action.DATA_SOURCE_KEY)); else return ((DataSource) dataSources.get(key)); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqa¨sq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xpppq~Esq~ uq~ppppptÁ/** * Return the default data source for the current application module. * * @param request The servlet request we are processing * * @since Struts 1.1b2 */ pt getDataSourceq~rxsq~ uq~pppppq~–q~—q~–q~0çpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–tE return (getDataSource(request, DATA_SOURCE_KEY)); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqaÀsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xsq~bsq~ uq~ppppqaÀsq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xppq~Esq~ uq~ppppptQ/** * Return the specified data source for the current application * module. * * @param request The servlet request we are processing * @param key The key specified in the * <message-resources> element for the * requested bundle * * @since Struts 1.1b2 */ pt getDataSourceq~rxsq~ uq~pppppq~–q~—q~–q~0çpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–ty // Identify the current application module ServletContext context = getServlet().getServletContext(); ApplicationConfig appConfig = RequestUtils.getApplicationConfig(request,context); // Return the requested data source instance return ((DataSource) context.getAttribute (key + appConfig.getPrefix())); sq~ uq~ppppq~–q~–xqMhqFYsq~isq~ uq~sq~bsq~ uq~ppppqaàsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xpppq~Esq~ uq~pppppt³/** * Return the default data source for the current module. * * @param request The servlet request we are processing * * @since Struts 1.1 */ pt getDataSourceq~{xsq~ uq~pppppq~~q~q~~q~0çpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~tE return (getDataSource(request, DATA_SOURCE_KEY)); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqaøsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xsq~bsq~ uq~ppppqaøsq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xppq~Esq~ uq~pppppt;/** * Return the specified data source for the current module. * * @param request The servlet request we are processing * @param key The key specified in the * <message-resources> element for the * requested bundle * * @since Struts 1.1 */ pt getDataSourceq~{xsq~ uq~pppppq~~q~q~~q~0çpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~tW // Identify the current module ServletContext context = getServlet().getServletContext(); ModuleConfig moduleConfig = RequestUtils.getModuleConfig(request,context); // Return the requested data source instance return ((DataSource) context.getAttribute(key + moduleConfig.getPrefix())); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqbsq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~ psq~ uq~pppppt@/** * Return a JDBC data source associated with this module, if any. * * @param key The servlet context attribute key under which this data * source is stored, or null for the default. * * @deprecated Look up data sources directly in servlet context attributes */ ptfindDataSourceq~{xsq~ uq~pppppq~~q~q~~q~0çpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tÅ if (key == null) { return ((DataSource) dataSources.get(Globals.DATA_SOURCE_KEY)); } else { return ((DataSource) dataSources.get(key)); } sq~ uq~ppppq~~q~~xqH›qMxsq~isq~ uq~sq~bsq~ uq~ppppqb0sq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxpppq~Esq~ uq~pppppt³/** * Return the default data source for the current module. * * @param request The servlet request we are processing * * @since Struts 1.1 */ pt getDataSourceq~cxsq~ uq~pppppq~fq~gq~fq~0çpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ftE return (getDataSource(request, DATA_SOURCE_KEY)); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqbHsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppqbHsq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxppq~Esq~ uq~pppppt;/** * Return the specified data source for the current module. * * @param request The servlet request we are processing * @param key The key specified in the * <message-resources> element for the * requested bundle * * @since Struts 1.1 */ pt getDataSourceq~cxsq~ uq~pppppq~fq~gq~fq~0çpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ftW // Identify the current module ServletContext context = getServlet().getServletContext(); ModuleConfig moduleConfig = RequestUtils.getModuleConfig(request,context); // Return the requested data source instance return ((DataSource) context.getAttribute(key + moduleConfig.getPrefix())); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqbhsq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~ psq~ uq~pppppt@/** * Return a JDBC data source associated with this module, if any. * * @param key The servlet context attribute key under which this data * source is stored, or null for the default. * * @deprecated Look up data sources directly in servlet context attributes */ ptfindDataSourceq~cxsq~ uq~pppppq~fq~gq~fq~0çpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftÅ if (key == null) { return ((DataSource) dataSources.get(Globals.DATA_SOURCE_KEY)); } else { return ((DataSource) dataSources.get(key)); } sq~ uq~ppppq~fq~fxqJÝqMˆpppq~Äxxq~RŒsq~Csq~ uq~ppppq~0Òsq~ uq~ppppsq~#q~éxq~0Ïsq~Csq~ uq~ppppq~0Òsq~ uq~ppppsq~#q~Ixsq~Csq~ uq~ppppq~0Òsq~ uq~ppppsq~#q~wxq.’q2“sq~Csq~ uq~ppppq~0Òsq~ uq~ppppsq~#q~ýxq5úq&øsq~Csq~ uq~ppppq~0Òsq~ uq~ppppsq~#q~-xq~ sq~ uq~pppppta/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/config/ConfigHelperInterface.java,v 1.5 2003/01/05 00:40:04 martinc Exp $ * $Revision: 1.5 $ * $Date: 2003/01/05 00:40:04 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * NOTE: THIS CLASS IS UNDER ACTIVE DEVELOPMENT. * THE CURRENT CODE IS WRITTEN FOR CLARITY NOT EFFICIENCY. * NOT EVERY API FUNCTION HAS BEEN IMPLEMENTED YET. * * A helper object to expose the Struts shared resources, * which are be stored in the application, session, or * request contexts, as appropriate. * * An instance should be created for each request * processed. The methods which return resources from * the request or session contexts are not thread-safe. * * Provided for use by other servlets in the application * so they can easily access the Struts shared resources. * * The resources are stored under attributes in the * application, session, or request contexts. * * The ActionConfig methods simply return the resources * from under the context and key used by the Struts * ActionServlet when the resources are created. * * @since 1.1 * @author Ted Husted * @author Luis Arias * @version $Revision: 1.5 $ $Date: 2003/01/05 00:40:04 $ */ ptConfigHelperInterface.javaq~fxsq~ uq~ppppsq~ uq~q-Vpppq~fxsq~ uq~ppppsq~#q~,_xsq~Csq~ uq~ppppq~ísq~ uq~ppppsq~#q~,_xppq~$sq~ uq~q].pppsq~ uq~ppppq~$q~=q~,Hsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~q6Êq6½q6ÚqD5q6êqFwqH¹q6úqJûq7 ppppq~Äxq~$ppxpppq~fxsq~ uq~ppppsq~#q~,=xsq~Csq~ uq~ppppq~bsq~ uq~ppppsq~#q~,=xq2°q6pppppq~$sq~ uq~q€4æpppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~,:sq~ uq~ppppppptFastHashMap.javaq~$xsq~ uq~ppppsq~ uq~q~,=pppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~q-¿q3bq~,bsq~(sq~ uq~ppppq~ psq~ uq~pppppt/** * The JDBC data sources that has been configured for this application, * if any, keyed by the servlet context attribute under which they are * stored. */ /** * The JDBC data sources that has been configured for this application, * if any, keyed by the servlet context attribute under which they are * stored. */ /** * The JDBC data sources that has been configured for this module, * if any, keyed by the servlet context attribute under which they are * stored. */ /** * The JDBC data sources that has been configured for this module, * if any, keyed by the servlet context attribute under which they are * stored. */ /** * The JDBC data sources that has been configured for this module, * if any, keyed by the servlet context attribute under which they are * stored. */ pt dataSourcesq~=xsq~ uq~pppppq~$q~yq~$q~,=pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt new FastHashMap()q~$q~$q~$xq~Äxq~$ppxqbÆq€4Êq€4þq~,7sq~ uq~pppppppt collectionsq~=xsq~ uq~ppppq€4ãsq~ uq~q Bpppq~$ppxq~"Ëq~ q~sq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxq~Gáq~%9q9q%®q~*?q~Fqi|qq*Þq~GÓq~H8qs_q-†q#9q~}êq~QAq~Eûq~Pñq-kq~}q%›q*«qòq~HÄq€êq"¸q~)øq~Oíq/zq~€>q~KDq~…Øpppppppppq~$Csq~ uq~ppppppptutilq~=xsq~ uq~pppppq~G¶sq~ uq~q(pppq~$ppxsq~ uq~pppppppt ResponseUtilsq~=xsq~ uq~#q~†Hq€IÖq€¹…q€€Ïq€½1q~*9q€ñgq€¨òq€ëŸq€€pq€éÔq€¤·q%q€­Œq€ÂŠsq~Csq~ uq~ppppq~"åsq~ uq~ppppsq~#q~*?xq€õùsq~Csq~ uq~ppppq~;sq~ uq~ppppsq~#q~*?xq~m@q€ó¯q€~cq€4vsq~Csq~ uq~ppppq~Usq~ uq~ppppsq~#q~*?xq~RÎq€÷jq€5qq#q~°òppppppq~$sq~ uq~q*Êpppsq~ uq~ppppq~$q~$q€êsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxxppppq~$Isq~ uq~pppppt ê/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/RewriteTag.java,v 1.9 2003/05/06 23:44:45 dgraham Exp $ * $Revision: 1.9 $ * $Date: 2003/05/06 23:44:45 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Generate a URL-encoded URI as a string. * * @author Craig R. McClanahan * @version $Revision: 1.9 $ $Date: 2003/05/06 23:44:45 $ */ ptRewriteTag.javaq~fxsq~ uq~ppppsq~ uq~q~hêpppq~fxsq~ uq~ppppsq~#q~* xq€4Rq€×q~*ppppppq~$sq~ uq~sq~)sq~ uq~ppppsq~/sq~ uq~ sq~)sq~ uq~ppppql?sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bddšqpxq~%”sq~)sq~ uq~ppppql?sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~BddÅqpxq~%šsq~)sq~ uq~ppppql?sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bddqpxsq~zsq~ uq~ppppq~%—sq~ uq~pppppq~‡pt URLConnectionq~=xsq~ uq~sq~Csq~ uq~ppppq~%¥sq~ uq~ppppsq~#ql`xpppq~$sq~ uq~qlVpppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~%—sq~ uq~ppppppptURLConnection.javaq~$xsq~ uq~ppppsq~ uq~ql`pppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxsq~)sq~ uq~ppppql?sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~BddFqpxsq~zsq~ uq~ppppq~%—sq~ uq~pppppq~‡pt URLEncoderq~=xsq~ uq~sq~Csq~ uq~ppppq~)øsq~ uq~ppppsq~#qlŒxpppppq~$sq~ uq~ql‚pppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~%—sq~ uq~ppppppptURLEncoder.javaq~$xsq~ uq~ppppsq~ uq~qlŒpppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxqlforward, * href, or page parameter that is not null. * The returned URL will have already been passed to * response.encodeURL() for adding a session identifier. * * @param pageContext PageContext for the tag making this call * * @param forward Logical forward name for which to look up * the context-relative URI (if specified) * @param href URL to be utilized unmodified (if specified) * @param page Application-relative page for which a URL should * be created (if specified) * * @param params Map of parameters to be dynamically included (if any) * @param anchor Anchor to be dynamically included (if any) * * @param redirect Is this URL for a response.sendRedirect()? * * @exception MalformedURLException if a URL cannot be created * for the specified parameters */ pt computeURLq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxq~$tv // Validate that exactly one specifier was included int n = 0; if (forward != null) { n++; } if (href != null) { n++; } if (page != null) { n++; } if (n != 1) { throw new MalformedURLException (messages.getMessage("computeURL.specifier")); } // Look up the application configuration for this request ApplicationConfig config = (ApplicationConfig) pageContext.getRequest().getAttribute(Action.APPLICATION_KEY); if (config == null) { // Backwards compatibility hack config = (ApplicationConfig) pageContext.getServletContext().getAttribute (Action.APPLICATION_KEY); } // Calculate the appropriate URL StringBuffer url = new StringBuffer(); HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); if (forward != null) { ActionForward af = (ActionForward) config.findForwardConfig(forward); if (af == null) { throw new MalformedURLException (messages.getMessage("computeURL.forward", forward)); } if (af.getRedirect()) { redirect = true; } if (af.getPath().startsWith("/")) { url.append(request.getContextPath()); if ((config != null) && !af.getContextRelative()) { url.append(config.getPrefix()); } } url.append(af.getPath()); } else if (href != null) { url.append(href); } else /* if (page != null) */ { url.append(request.getContextPath()); if (config != null) { url.append(config.getPrefix()); } url.append(page); } // Add anchor if requested (replacing any existing anchor) if (anchor != null) { String temp = url.toString(); int hash = temp.indexOf('#'); if (hash >= 0) { url.setLength(hash); } url.append('#'); url.append(URLEncoder.encode(anchor)); } // Add dynamic parameters if requested if ((params != null) && (params.size() > 0)) { // Save any existing anchor String temp = url.toString(); int hash = temp.indexOf('#'); if (hash >= 0) { anchor = temp.substring(hash + 1); url.setLength(hash); temp = url.toString(); } else { anchor = null; } // Add the required request parameters boolean question = temp.indexOf('?') >= 0; Iterator keys = params.keySet().iterator(); while (keys.hasNext()) { String key = (String) keys.next(); Object value = params.get(key); if (value == null) { if (!question) { url.append('?'); question = true; } else { url.append("&"); } url.append(URLEncoder.encode(key)); url.append('='); // Interpret null as "no value" } else if (value instanceof String) { if (!question) { url.append('?'); question = true; } else { url.append("&"); } url.append(URLEncoder.encode(key)); url.append('='); url.append(URLEncoder.encode((String) value)); } else if (value instanceof String[]) { String values[] = (String[]) value; for (int i = 0; i < values.length; i++) { if (!question) { url.append('?'); question = true; } else { url.append("&"); } url.append(URLEncoder.encode(key)); url.append('='); url.append(URLEncoder.encode(values[i])); } } else /* Convert other objects to a string */ { if (!question) { url.append('?'); question = true; } else { url.append("&"); } url.append(URLEncoder.encode(key)); url.append('='); url.append(URLEncoder.encode(value.toString())); } } // Re-add the saved anchor (if any) if (anchor != null) { url.append('#'); url.append(anchor); } } // Perform URL rewriting to include our session ID (if any) if (pageContext.getSession() != null) { HttpServletResponse response = (HttpServletResponse) pageContext.getResponse(); if (redirect) { return (response.encodeRedirectURL(url.toString())); } else { return (response.encodeURL(url.toString())); } } else { return (url.toString()); } sq~ uq~q~* pppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppqmsq~ uq~ppppppptrequestq~=xsq~ uq~pppppq~$q~yq~$q~Œpq~$xpppq~%9sq~ uq~pppppt6/** * Return the URL representing the current request. This is equivalent * to HttpServletRequest.getRequestURL() in Servlet 2.3. * * @param request The servlet request we are processing * * @exception MalformedURLException if a URL cannot be created */ pt requestURLq~=xsq~ uq~pppppq~$q~yq~$q~%”pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxq~$t^ StringBuffer url = new StringBuffer(); String scheme = request.getScheme(); int port = request.getServerPort(); if (port < 0) port = 80; // Work around java.net.URL bug url.append(scheme); url.append("://"); url.append(request.getServerName()); if ((scheme.equals("http") && (port != 80)) || (scheme.equals("https") && (port != 443))) { url.append(':'); url.append(port); } url.append(request.getRequestURI()); return (new URL(url.toString())); sq~ uq~q~* pppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppqm0sq~ uq~ppppppptrequestq~=xsq~ uq~pppppq~$q~yq~$q~Œpq~$xpppq~%9sq~ uq~pppppt}/** * Return the URL representing the scheme, server, and port number of * the current request. Server-relative URLs can be created by simply * appending the server-relative path (starting with '/') to this. * * @param request The servlet request we are processing * * @exception MalformedURLException if a URL cannot be created */ pt serverURLq~=xsq~ uq~pppppq~$q~yq~$q~%”pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxq~$t0 StringBuffer url = new StringBuffer(); String scheme = request.getScheme(); int port = request.getServerPort(); if (port < 0) port = 80; // Work around java.net.URL bug url.append(scheme); url.append("://"); url.append(request.getServerName()); if ((scheme.equals("http") && (port != 80)) || (scheme.equals("https") && (port != 443))) { url.append(':'); url.append(port); } return (new URL(url.toString())); sq~ uq~q~* pppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppqmIsq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Œpq~§xsq~bsq~ uq~ppppqmIsq~ uq~ppppppptpathq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xppq~%9sq~ uq~ppppptá// --------------------------------------------------------- Public Methods /** * Create and return an absolute URL for the specified context-relative * path, based on the server and context information in the specified * request. * * @param request The servlet request we are processing * @param path The context-relative path (must start with '/') * * @exception MalformedURLException if we cannot create an absolute URL */ pt absoluteURLq~¢xsq~ uq~pppppq~¥q~¦q~¥q~%”pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥tZ return (new URL(serverURL(request), request.getContextPath() + path)); sq~ uq~q~* pppq~¥q~¥xsq~isq~ uq~ sq~bsq~ uq~ppppqmjsq~ uq~pppppppt pageContextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~bsq~ uq~ppppqmjsq~ uq~ppppppptforwardq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppqmjsq~ uq~pppppppthrefq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppqmjsq~ uq~ppppppptpageq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppqmjsq~ uq~ppppppptparamsq~¢xsq~ uq~pppppq~¥q~¦q~¥q~¼pq~§xsq~bsq~ uq~ppppqmjsq~ uq~ppppppptanchorq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppqmjsq~ uq~ppppppptredirectq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xppq~%9sq~ uq~ppppptï/** * Compute a hyperlink URL based on the forward, * href, or page parameter that is not null. * The returned URL will have already been passed to * response.encodeURL() for adding a session identifier. * * @param pageContext PageContext for the tag making this call * * @param forward Logical forward name for which to look up * the context-relative URI (if specified) * @param href URL to be utilized unmodified (if specified) * @param page Application-relative page for which a URL should * be created (if specified) * * @param params Map of parameters to be dynamically included (if any) * @param anchor Anchor to be dynamically included (if any) * * @param redirect Is this URL for a response.sendRedirect()? * * @exception MalformedURLException if a URL cannot be created * for the specified parameters */ pt computeURLq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥tv // Validate that exactly one specifier was included int n = 0; if (forward != null) { n++; } if (href != null) { n++; } if (page != null) { n++; } if (n != 1) { throw new MalformedURLException (messages.getMessage("computeURL.specifier")); } // Look up the application configuration for this request ApplicationConfig config = (ApplicationConfig) pageContext.getRequest().getAttribute(Action.APPLICATION_KEY); if (config == null) { // Backwards compatibility hack config = (ApplicationConfig) pageContext.getServletContext().getAttribute (Action.APPLICATION_KEY); } // Calculate the appropriate URL StringBuffer url = new StringBuffer(); HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); if (forward != null) { ActionForward af = (ActionForward) config.findForwardConfig(forward); if (af == null) { throw new MalformedURLException (messages.getMessage("computeURL.forward", forward)); } if (af.getRedirect()) { redirect = true; } if (af.getPath().startsWith("/")) { url.append(request.getContextPath()); if ((config != null) && !af.getContextRelative()) { url.append(config.getPrefix()); } } url.append(af.getPath()); } else if (href != null) { url.append(href); } else /* if (page != null) */ { url.append(request.getContextPath()); if (config != null) { url.append(config.getPrefix()); } url.append(page); } // Add anchor if requested (replacing any existing anchor) if (anchor != null) { String temp = url.toString(); int hash = temp.indexOf('#'); if (hash >= 0) { url.setLength(hash); } url.append('#'); url.append(URLEncoder.encode(anchor)); } // Add dynamic parameters if requested if ((params != null) && (params.size() > 0)) { // Save any existing anchor String temp = url.toString(); int hash = temp.indexOf('#'); if (hash >= 0) { anchor = temp.substring(hash + 1); url.setLength(hash); temp = url.toString(); } else { anchor = null; } // Add the required request parameters boolean question = temp.indexOf('?') >= 0; Iterator keys = params.keySet().iterator(); while (keys.hasNext()) { String key = (String) keys.next(); Object value = params.get(key); if (value == null) { if (!question) { url.append('?'); question = true; } else { url.append("&"); } url.append(URLEncoder.encode(key)); url.append('='); // Interpret null as "no value" } else if (value instanceof String) { if (!question) { url.append('?'); question = true; } else { url.append("&"); } url.append(URLEncoder.encode(key)); url.append('='); url.append(URLEncoder.encode((String) value)); } else if (value instanceof String[]) { String values[] = (String[]) value; for (int i = 0; i < values.length; i++) { if (!question) { url.append('?'); question = true; } else { url.append("&"); } url.append(URLEncoder.encode(key)); url.append('='); url.append(URLEncoder.encode(values[i])); } } else /* Convert other objects to a string */ { if (!question) { url.append('?'); question = true; } else { url.append("&"); } url.append(URLEncoder.encode(key)); url.append('='); url.append(URLEncoder.encode(value.toString())); } } // Re-add the saved anchor (if any) if (anchor != null) { url.append('#'); url.append(anchor); } } // Perform URL rewriting to include our session ID (if any) if (pageContext.getSession() != null) { HttpServletResponse response = (HttpServletResponse) pageContext.getResponse(); if (redirect) { return (response.encodeRedirectURL(url.toString())); } else { return (response.encodeURL(url.toString())); } } else { return (url.toString()); } sq~ uq~q~* pppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqm³sq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Œpq~§xpppq~%9sq~ uq~pppppt6/** * Return the URL representing the current request. This is equivalent * to HttpServletRequest.getRequestURL() in Servlet 2.3. * * @param request The servlet request we are processing * * @exception MalformedURLException if a URL cannot be created */ pt requestURLq~¢xsq~ uq~pppppq~¥q~¦q~¥q~%”pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥t^ StringBuffer url = new StringBuffer(); String scheme = request.getScheme(); int port = request.getServerPort(); if (port < 0) port = 80; // Work around java.net.URL bug url.append(scheme); url.append("://"); url.append(request.getServerName()); if ((scheme.equals("http") && (port != 80)) || (scheme.equals("https") && (port != 443))) { url.append(':'); url.append(port); } url.append(request.getRequestURI()); return (new URL(url.toString())); sq~ uq~q~* pppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqmÌsq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Œpq~§xpppq~%9sq~ uq~pppppt}/** * Return the URL representing the scheme, server, and port number of * the current request. Server-relative URLs can be created by simply * appending the server-relative path (starting with '/') to this. * * @param request The servlet request we are processing * * @exception MalformedURLException if a URL cannot be created */ pt serverURLq~¢xsq~ uq~pppppq~¥q~¦q~¥q~%”pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥t0 StringBuffer url = new StringBuffer(); String scheme = request.getScheme(); int port = request.getServerPort(); if (port < 0) port = 80; // Work around java.net.URL bug url.append(scheme); url.append("://"); url.append(request.getServerName()); if ((scheme.equals("http") && (port != 80)) || (scheme.equals("https") && (port != 443))) { url.append(':'); url.append(port); } return (new URL(url.toString())); sq~ uq~q~* pppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqmåsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xsq~bsq~ uq~ppppqmåsq~ uq~ppppppptpathq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xppq~%9sq~ uq~pppppt// --------------------------------------------------------- Public Methods /** * Create and return an absolute URL for the specified context-relative * path, based on the server and context information in the specified * request. * * @param request The servlet request we are processing * @param path The context-relative path (must start with '/') * @return absolute URL based on context-relative path * @exception MalformedURLException if we cannot create an absolute URL */ pt absoluteURLq~rxsq~ uq~pppppq~–q~—q~–q~%”pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–tZ return (new URL(serverURL(request), request.getContextPath() + path)); sq~ uq~q~* pppq~–q~–xsq~isq~ uq~ sq~bsq~ uq~ppppqnsq~ uq~pppppppt pageContextq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~bsq~ uq~ppppqnsq~ uq~ppppppptforwardq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqnsq~ uq~pppppppthrefq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqnsq~ uq~ppppppptpageq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqnsq~ uq~ppppppptparamsq~rxsq~ uq~pppppq~–q~—q~–q~¼pq~˜xsq~bsq~ uq~ppppqnsq~ uq~ppppppptanchorq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqnsq~ uq~ppppppptredirectq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xppq~%9sq~ uq~pppppt/** * Compute a hyperlink URL based on the forward, * href, or page parameter that is not null. * The returned URL will have already been passed to * response.encodeURL() for adding a session identifier. * * @param pageContext PageContext for the tag making this call * * @param forward Logical forward name for which to look up * the context-relative URI (if specified) * @param href URL to be utilized unmodified (if specified) * @param page Module-relative page for which a URL should * be created (if specified) * * @param params Map of parameters to be dynamically included (if any) * @param anchor Anchor to be dynamically included (if any) * * @param redirect Is this URL for a response.sendRedirect()? * @return URL with session identifier * @exception MalformedURLException if a URL cannot be created * for the specified parameters */ pt computeURLq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t // Validate that exactly one specifier was included int n = 0; if (forward != null) { n++; } if (href != null) { n++; } if (page != null) { n++; } if (n != 1) { throw new MalformedURLException (messages.getMessage("computeURL.specifier")); } // Look up the application module configuration for this request ApplicationConfig config = (ApplicationConfig) pageContext.getRequest().getAttribute(Action.APPLICATION_KEY); if (config == null) { // Backwards compatibility hack config = (ApplicationConfig) pageContext.getServletContext().getAttribute (Action.APPLICATION_KEY); pageContext.getRequest().setAttribute(Action.APPLICATION_KEY, config); } // Calculate the appropriate URL StringBuffer url = new StringBuffer(); HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); if (forward != null) { ForwardConfig fc = config.findForwardConfig(forward); if (fc == null) { throw new MalformedURLException (messages.getMessage("computeURL.forward", forward)); } if (fc.getRedirect()) { redirect = true; } if (fc.getPath().startsWith("/")) { url.append(request.getContextPath()); url.append(forwardURL(request, fc)); } else { url.append(fc.getPath()); } } else if (href != null) { url.append(href); } else /* if (page != null) */ { url.append(request.getContextPath()); url.append(pageURL(request, page)); } // Add anchor if requested (replacing any existing anchor) if (anchor != null) { String temp = url.toString(); int hash = temp.indexOf('#'); if (hash >= 0) { url.setLength(hash); } url.append('#'); url.append(URLEncoder.encode(anchor)); } // Add dynamic parameters if requested if ((params != null) && (params.size() > 0)) { // Save any existing anchor String temp = url.toString(); int hash = temp.indexOf('#'); if (hash >= 0) { anchor = temp.substring(hash + 1); url.setLength(hash); temp = url.toString(); } else { anchor = null; } // Define the parameter separator String separator = "&"; if (redirect) { separator = "&"; } // Add the required request parameters boolean question = temp.indexOf('?') >= 0; Iterator keys = params.keySet().iterator(); while (keys.hasNext()) { String key = (String) keys.next(); Object value = params.get(key); if (value == null) { if (!question) { url.append('?'); question = true; } else { url.append(separator); } url.append(URLEncoder.encode(key)); url.append('='); // Interpret null as "no value" } else if (value instanceof String) { if (!question) { url.append('?'); question = true; } else { url.append(separator); } url.append(URLEncoder.encode(key)); url.append('='); url.append(URLEncoder.encode((String) value)); } else if (value instanceof String[]) { String values[] = (String[]) value; for (int i = 0; i < values.length; i++) { if (!question) { url.append('?'); question = true; } else { url.append(separator); } url.append(URLEncoder.encode(key)); url.append('='); url.append(URLEncoder.encode(values[i])); } } else /* Convert other objects to a string */ { if (!question) { url.append('?'); question = true; } else { url.append(separator); } url.append(URLEncoder.encode(key)); url.append('='); url.append(URLEncoder.encode(value.toString())); } } // Re-add the saved anchor (if any) if (anchor != null) { url.append('#'); url.append(URLEncoder.encode(anchor)); } } // Perform URL rewriting to include our session ID (if any) if (pageContext.getSession() != null) { HttpServletResponse response = (HttpServletResponse) pageContext.getResponse(); if (redirect) { return (response.encodeRedirectURL(url.toString())); } else { return (response.encodeURL(url.toString())); } } else { return (url.toString()); } sq~ uq~q~* pppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqnOsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xpppq~%9sq~ uq~ppppptc/** * Return the URL representing the current request. This is equivalent * to HttpServletRequest.getRequestURL() in Servlet 2.3. * * @param request The servlet request we are processing * @return URL representing the current request * @exception MalformedURLException if a URL cannot be created */ pt requestURLq~rxsq~ uq~pppppq~–q~—q~–q~%”pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t^ StringBuffer url = new StringBuffer(); String scheme = request.getScheme(); int port = request.getServerPort(); if (port < 0) port = 80; // Work around java.net.URL bug url.append(scheme); url.append("://"); url.append(request.getServerName()); if ((scheme.equals("http") && (port != 80)) || (scheme.equals("https") && (port != 443))) { url.append(':'); url.append(port); } url.append(request.getRequestURI()); return (new URL(url.toString())); sq~ uq~q~* pppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqnhsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xpppq~%9sq~ uq~ppppptÝ/** * Return the URL representing the scheme, server, and port number of * the current request. Server-relative URLs can be created by simply * appending the server-relative path (starting with '/') to this. * * @param request The servlet request we are processing * @return URL representing the scheme, server, and port number of * the current request * @exception MalformedURLException if a URL cannot be created */ pt serverURLq~rxsq~ uq~pppppq~–q~—q~–q~%”pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t0 StringBuffer url = new StringBuffer(); String scheme = request.getScheme(); int port = request.getServerPort(); if (port < 0) port = 80; // Work around java.net.URL bug url.append(scheme); url.append("://"); url.append(request.getServerName()); if ((scheme.equals("http") && (port != 80)) || (scheme.equals("https") && (port != 443))) { url.append(':'); url.append(port); } return (new URL(url.toString())); sq~ uq~q~* pppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqnsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xsq~bsq~ uq~ppppqnsq~ uq~ppppppptpathq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xppq~%9sq~ uq~pppppt—/** * Initialize the encode variable with the 1.4 method if available. Also set up the * scope map values. */ // --------------------------------------------------------- Public Methods /** * Create and return an absolute URL for the specified context-relative * path, based on the server and context information in the specified * request. * * @param request The servlet request we are processing * @param path The context-relative path (must start with '/') * @return absolute URL based on context-relative path * @exception MalformedURLException if we cannot create an absolute URL */ pt absoluteURLq~{xsq~ uq~pppppq~~q~q~~q~%”pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~tZ return (new URL(serverURL(request), request.getContextPath() + path)); sq~ uq~q~* pppq~~q~~xsq~isq~ uq~ sq~bsq~ uq~ppppqn¢sq~ uq~pppppppt pageContextq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~bsq~ uq~ppppqn¢sq~ uq~ppppppptforwardq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqn¢sq~ uq~pppppppthrefq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqn¢sq~ uq~ppppppptpageq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqn¢sq~ uq~ppppppptparamsq~{xsq~ uq~pppppq~~q~q~~q~¼pq~€xsq~bsq~ uq~ppppqn¢sq~ uq~ppppppptanchorq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqn¢sq~ uq~ppppppptredirectq~{xsq~ uq~pppppq~~q~q~~q~pq~€xppq~%9sq~ uq~ppppptB/** * Compute a hyperlink URL based on the forward, * href or page parameter * that is not null. * * @deprecated To be removed in Version 1.3. * Use {@link RequestUtils#computeURL(PageContext, String, String, String, String, Map, String, boolean)} instead. * * @param pageContext PageContext for the tag making this call * * @param forward Logical forward name for which to look up * the context-relative URI (if specified) * @param href URL to be utilized unmodified (if specified) * @param page Module-relative page for which a URL should * be created (if specified) * * @param params Map of parameters to be dynamically included (if any) * @param anchor Anchor to be dynamically included (if any) * * @param redirect Is this URL for a response.sendRedirect()? * @return URL with session identifier * @exception MalformedURLException if a URL cannot be created * for the specified parameters */ pt computeURLq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~te return computeURL(pageContext, forward, href, page, null, params, anchor, redirect); sq~ uq~q~* pppq~~q~~xsq~isq~ uq~ sq~bsq~ uq~ppppqnësq~ uq~pppppppt pageContextq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~bsq~ uq~ppppqnësq~ uq~ppppppptforwardq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqnësq~ uq~pppppppthrefq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqnësq~ uq~ppppppptpageq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqnësq~ uq~ppppppptactionq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqnësq~ uq~ppppppptparamsq~{xsq~ uq~pppppq~~q~q~~q~¼pq~€xsq~bsq~ uq~ppppqnësq~ uq~ppppppptanchorq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqnësq~ uq~ppppppptredirectq~{xsq~ uq~pppppq~~q~q~~q~pq~€xpq~%9sq~ uq~ppppptš/** * Compute a hyperlink URL based on the forward, * href, action or page parameter * that is not null. * The returned URL will have already been passed to * response.encodeURL() for adding a session identifier. * * @param pageContext PageContext for the tag making this call * * @param forward Logical forward name for which to look up * the context-relative URI (if specified) * @param href URL to be utilized unmodified (if specified) * @param page Module-relative page for which a URL should * be created (if specified) * @param action Logical action name for which to look up * the context-relative URI (if specified) * * @param params Map of parameters to be dynamically included (if any) * @param anchor Anchor to be dynamically included (if any) * * @param redirect Is this URL for a response.sendRedirect()? * @return URL with session identifier * @exception MalformedURLException if a URL cannot be created * for the specified parameters */ pt computeURLq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t„ // Validate that exactly one specifier was included int n = 0; if (forward != null) { n++; } if (href != null) { n++; } if (page != null) { n++; } if (action != null) { n++; } if (n != 1) { throw new MalformedURLException(messages.getMessage("computeURL.specifier")); } // Look up the module configuration for this request ModuleConfig config = (ModuleConfig) pageContext.getRequest().getAttribute(Globals.MODULE_KEY); if (config == null) { // Backwards compatibility hack config = (ModuleConfig) pageContext.getServletContext().getAttribute(Globals.MODULE_KEY); pageContext.getRequest().setAttribute(Globals.MODULE_KEY, config); } // Calculate the appropriate URL StringBuffer url = new StringBuffer(); HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); if (forward != null) { ForwardConfig fc = config.findForwardConfig(forward); if (fc == null) { throw new MalformedURLException(messages.getMessage("computeURL.forward", forward)); } if (fc.getRedirect()) { redirect = true; } if (fc.getPath().startsWith("/")) { url.append(request.getContextPath()); url.append(forwardURL(request, fc)); } else { url.append(fc.getPath()); } } else if (href != null) { url.append(href); } else if (action != null) { url.append(getActionMappingURL(action, pageContext)); } else /* if (page != null) */ { url.append(request.getContextPath()); url.append(pageURL(request, page)); } // Add anchor if requested (replacing any existing anchor) if (anchor != null) { String temp = url.toString(); int hash = temp.indexOf('#'); if (hash >= 0) { url.setLength(hash); } url.append('#'); url.append(encodeURL(anchor)); } // Add dynamic parameters if requested if ((params != null) && (params.size() > 0)) { // Save any existing anchor String temp = url.toString(); int hash = temp.indexOf('#'); if (hash >= 0) { anchor = temp.substring(hash + 1); url.setLength(hash); temp = url.toString(); } else { anchor = null; } // Define the parameter separator String separator = redirect ? "&" : "&"; // Add the required request parameters boolean question = temp.indexOf('?') >= 0; Iterator keys = params.keySet().iterator(); while (keys.hasNext()) { String key = (String) keys.next(); Object value = params.get(key); if (value == null) { if (!question) { url.append('?'); question = true; } else { url.append(separator); } url.append(encodeURL(key)); url.append('='); // Interpret null as "no value" } else if (value instanceof String) { if (!question) { url.append('?'); question = true; } else { url.append(separator); } url.append(encodeURL(key)); url.append('='); url.append(encodeURL((String) value)); } else if (value instanceof String[]) { String values[] = (String[]) value; for (int i = 0; i < values.length; i++) { if (!question) { url.append('?'); question = true; } else { url.append(separator); } url.append(encodeURL(key)); url.append('='); url.append(encodeURL(values[i])); } } else /* Convert other objects to a string */ { if (!question) { url.append('?'); question = true; } else { url.append(separator); } url.append(encodeURL(key)); url.append('='); url.append(encodeURL(value.toString())); } } // Re-add the saved anchor (if any) if (anchor != null) { url.append('#'); url.append(encodeURL(anchor)); } } // Perform URL rewriting to include our session ID (if any) if (pageContext.getSession() != null) { HttpServletResponse response = (HttpServletResponse) pageContext.getResponse(); if (redirect) { return (response.encodeRedirectURL(url.toString())); } else { return (response.encodeURL(url.toString())); } } else { return (url.toString()); } sq~ uq~q~* pppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqoHttpServletRequest.getRequestURL() in Servlet 2.3. * * @param request The servlet request we are processing * @return URL representing the current request * @exception MalformedURLException if a URL cannot be created */ pt requestURLq~{xsq~ uq~pppppq~~q~q~~q~%”pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t^ StringBuffer url = new StringBuffer(); String scheme = request.getScheme(); int port = request.getServerPort(); if (port < 0) { port = 80; // Work around java.net.URL bug } url.append(scheme); url.append("://"); url.append(request.getServerName()); if ((scheme.equals("http") && (port != 80)) || (scheme.equals("https") && (port != 443))) { url.append(':'); url.append(port); } url.append(request.getRequestURI()); return (new URL(url.toString())); sq~ uq~q~* pppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqoUsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xpppq~%9sq~ uq~ppppptÝ/** * Return the URL representing the scheme, server, and port number of * the current request. Server-relative URLs can be created by simply * appending the server-relative path (starting with '/') to this. * * @param request The servlet request we are processing * @return URL representing the scheme, server, and port number of * the current request * @exception MalformedURLException if a URL cannot be created */ pt serverURLq~{xsq~ uq~pppppq~~q~q~~q~%”pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t0 StringBuffer url = new StringBuffer(); String scheme = request.getScheme(); int port = request.getServerPort(); if (port < 0) { port = 80; // Work around java.net.URL bug } url.append(scheme); url.append("://"); url.append(request.getServerName()); if ((scheme.equals("http") && (port != 80)) || (scheme.equals("https") && (port != 443))) { url.append(':'); url.append(port); } return (new URL(url.toString())); sq~ uq~q~* pppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqonsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppqonsq~ uq~ppppppptpathq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxppq~%9sq~ uq~pppppt—/** * Initialize the encode variable with the 1.4 method if available. Also set up the * scope map values. */ // --------------------------------------------------------- Public Methods /** * Create and return an absolute URL for the specified context-relative * path, based on the server and context information in the specified * request. * * @param request The servlet request we are processing * @param path The context-relative path (must start with '/') * @return absolute URL based on context-relative path * @exception MalformedURLException if we cannot create an absolute URL */ pt absoluteURLq~cxsq~ uq~pppppq~fq~gq~fq~%”pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ftZ return (new URL(serverURL(request), request.getContextPath() + path)); sq~ uq~q~* pppq~fq~fxsq~isq~ uq~ sq~bsq~ uq~ppppqosq~ uq~pppppppt pageContextq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~bsq~ uq~ppppqosq~ uq~ppppppptforwardq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqosq~ uq~pppppppthrefq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqosq~ uq~ppppppptpageq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqosq~ uq~ppppppptparamsq~cxsq~ uq~pppppq~fq~gq~fq~¼pq~hxsq~bsq~ uq~ppppqosq~ uq~ppppppptanchorq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqosq~ uq~ppppppptredirectq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxppq~%9sq~ uq~ppppptB/** * Compute a hyperlink URL based on the forward, * href or page parameter * that is not null. * * @deprecated To be removed in Version 1.3. * Use {@link RequestUtils#computeURL(PageContext, String, String, String, String, Map, String, boolean)} instead. * * @param pageContext PageContext for the tag making this call * * @param forward Logical forward name for which to look up * the context-relative URI (if specified) * @param href URL to be utilized unmodified (if specified) * @param page Module-relative page for which a URL should * be created (if specified) * * @param params Map of parameters to be dynamically included (if any) * @param anchor Anchor to be dynamically included (if any) * * @param redirect Is this URL for a response.sendRedirect()? * @return URL with session identifier * @exception MalformedURLException if a URL cannot be created * for the specified parameters */ pt computeURLq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~fte return computeURL(pageContext, forward, href, page, null, params, anchor, redirect); sq~ uq~q~* pppq~fq~fxsq~isq~ uq~ sq~bsq~ uq~ppppqoØsq~ uq~pppppppt pageContextq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~bsq~ uq~ppppqoØsq~ uq~ppppppptforwardq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqoØsq~ uq~pppppppthrefq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqoØsq~ uq~ppppppptpageq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqoØsq~ uq~ppppppptactionq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqoØsq~ uq~ppppppptparamsq~cxsq~ uq~pppppq~fq~gq~fq~¼pq~hxsq~bsq~ uq~ppppqoØsq~ uq~ppppppptanchorq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqoØsq~ uq~ppppppptredirectq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxpq~%9sq~ uq~ppppptš/** * Compute a hyperlink URL based on the forward, * href, action or page parameter * that is not null. * The returned URL will have already been passed to * response.encodeURL() for adding a session identifier. * * @param pageContext PageContext for the tag making this call * * @param forward Logical forward name for which to look up * the context-relative URI (if specified) * @param href URL to be utilized unmodified (if specified) * @param page Module-relative page for which a URL should * be created (if specified) * @param action Logical action name for which to look up * the context-relative URI (if specified) * * @param params Map of parameters to be dynamically included (if any) * @param anchor Anchor to be dynamically included (if any) * * @param redirect Is this URL for a response.sendRedirect()? * @return URL with session identifier * @exception MalformedURLException if a URL cannot be created * for the specified parameters */ pt computeURLq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft„ // Validate that exactly one specifier was included int n = 0; if (forward != null) { n++; } if (href != null) { n++; } if (page != null) { n++; } if (action != null) { n++; } if (n != 1) { throw new MalformedURLException(messages.getMessage("computeURL.specifier")); } // Look up the module configuration for this request ModuleConfig config = (ModuleConfig) pageContext.getRequest().getAttribute(Globals.MODULE_KEY); if (config == null) { // Backwards compatibility hack config = (ModuleConfig) pageContext.getServletContext().getAttribute(Globals.MODULE_KEY); pageContext.getRequest().setAttribute(Globals.MODULE_KEY, config); } // Calculate the appropriate URL StringBuffer url = new StringBuffer(); HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); if (forward != null) { ForwardConfig fc = config.findForwardConfig(forward); if (fc == null) { throw new MalformedURLException(messages.getMessage("computeURL.forward", forward)); } if (fc.getRedirect()) { redirect = true; } if (fc.getPath().startsWith("/")) { url.append(request.getContextPath()); url.append(forwardURL(request, fc)); } else { url.append(fc.getPath()); } } else if (href != null) { url.append(href); } else if (action != null) { url.append(getActionMappingURL(action, pageContext)); } else /* if (page != null) */ { url.append(request.getContextPath()); url.append(pageURL(request, page)); } // Add anchor if requested (replacing any existing anchor) if (anchor != null) { String temp = url.toString(); int hash = temp.indexOf('#'); if (hash >= 0) { url.setLength(hash); } url.append('#'); url.append(encodeURL(anchor)); } // Add dynamic parameters if requested if ((params != null) && (params.size() > 0)) { // Save any existing anchor String temp = url.toString(); int hash = temp.indexOf('#'); if (hash >= 0) { anchor = temp.substring(hash + 1); url.setLength(hash); temp = url.toString(); } else { anchor = null; } // Define the parameter separator String separator = redirect ? "&" : "&"; // Add the required request parameters boolean question = temp.indexOf('?') >= 0; Iterator keys = params.keySet().iterator(); while (keys.hasNext()) { String key = (String) keys.next(); Object value = params.get(key); if (value == null) { if (!question) { url.append('?'); question = true; } else { url.append(separator); } url.append(encodeURL(key)); url.append('='); // Interpret null as "no value" } else if (value instanceof String) { if (!question) { url.append('?'); question = true; } else { url.append(separator); } url.append(encodeURL(key)); url.append('='); url.append(encodeURL((String) value)); } else if (value instanceof String[]) { String values[] = (String[]) value; for (int i = 0; i < values.length; i++) { if (!question) { url.append('?'); question = true; } else { url.append(separator); } url.append(encodeURL(key)); url.append('='); url.append(encodeURL(values[i])); } } else /* Convert other objects to a string */ { if (!question) { url.append('?'); question = true; } else { url.append(separator); } url.append(encodeURL(key)); url.append('='); url.append(encodeURL(value.toString())); } } // Re-add the saved anchor (if any) if (anchor != null) { url.append('#'); url.append(encodeURL(anchor)); } } // Perform URL rewriting to include our session ID (if any) if (pageContext.getSession() != null) { HttpServletResponse response = (HttpServletResponse) pageContext.getResponse(); if (redirect) { return (response.encodeRedirectURL(url.toString())); } else { return (response.encodeURL(url.toString())); } } else { return (url.toString()); } sq~ uq~q~* pppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqp)sq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxpppq~%9sq~ uq~ppppptc/** * Return the URL representing the current request. This is equivalent * to HttpServletRequest.getRequestURL() in Servlet 2.3. * * @param request The servlet request we are processing * @return URL representing the current request * @exception MalformedURLException if a URL cannot be created */ pt requestURLq~cxsq~ uq~pppppq~fq~gq~fq~%”pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft^ StringBuffer url = new StringBuffer(); String scheme = request.getScheme(); int port = request.getServerPort(); if (port < 0) { port = 80; // Work around java.net.URL bug } url.append(scheme); url.append("://"); url.append(request.getServerName()); if ((scheme.equals("http") && (port != 80)) || (scheme.equals("https") && (port != 443))) { url.append(':'); url.append(port); } url.append(request.getRequestURI()); return (new URL(url.toString())); sq~ uq~q~* pppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqpBsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxpppq~%9sq~ uq~ppppptÝ/** * Return the URL representing the scheme, server, and port number of * the current request. Server-relative URLs can be created by simply * appending the server-relative path (starting with '/') to this. * * @param request The servlet request we are processing * @return URL representing the scheme, server, and port number of * the current request * @exception MalformedURLException if a URL cannot be created */ pt serverURLq~cxsq~ uq~pppppq~fq~gq~fq~%”pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft0 StringBuffer url = new StringBuffer(); String scheme = request.getScheme(); int port = request.getServerPort(); if (port < 0) { port = 80; // Work around java.net.URL bug } url.append(scheme); url.append("://"); url.append(request.getServerName()); if ((scheme.equals("http") && (port != 80)) || (scheme.equals("https") && (port != 443))) { url.append(':'); url.append(port); } return (new URL(url.toString())); sq~ uq~q~* pppq~fq~fxppxsq~Csq~ uq~ppppq~)øsq~ uq~ppppsq~#q~%”xql”sq~Csq~ uq~ppppq~)øsq~ uq~ppppsq~#q~xq/ûsq~Csq~ uq~ppppq~)øsq~ uq~ppppsq~#q~jxsq~Csq~ uq~ppppq~)øsq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq~)øsq~ uq~ppppsq~#q~;xsq~Csq~ uq~ppppq~)øsq~ uq~ppppsq~#q~öxsq~Csq~ uq~ppppq~)øsq~ uq~ppppsq~#q~5xsq~Csq~ uq~ppppq~)øsq~ uq~ppppsq~#q~¼xsq~Csq~ uq~ppppq~)øsq~ uq~ppppsq~#q~Öxsq~Csq~ uq~ppppq~)øsq~ uq~ppppsq~#q~¦xsq~Csq~ uq~ppppq~)øsq~ uq~ppppsq~#q~Œxsq~Csq~ uq~ppppq~)øsq~ uq~ppppsq~#q~’xq€ë¼sq~Csq~ uq~ppppq~)øsq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq~)øsq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq~)øsq~ uq~ppppsq~#q~"Îxq~)õsq~Csq~ uq~ppppq~)øsq~ uq~ppppsq~#q~"Èxsq~Csq~ uq~ppppq~)øsq~ uq~ppppsq~#q~9xsq~Csq~ uq~ppppq~)øsq~ uq~ppppsq~#q~?xsq~Csq~ uq~ppppq~)øsq~ uq~ppppsq~#q~#xsq~Csq~ uq~ppppq~)øsq~ uq~ppppsq~#q~ßxqsq~Csq~ uq~ppppq~)øsq~ uq~ppppsq~#q~wxsq~Csq~ uq~ppppq~)øsq~ uq~ppppsq~#q~éxsq~Csq~ uq~ppppq~)øsq~ uq~ppppsq~#q~}xsq~Csq~ uq~ppppq~)øsq~ uq~ppppsq~#q~Ixsq~Csq~ uq~ppppq~)øsq~ uq~ppppsq~#q~ pxq\{q=sq~Csq~ uq~ppppq~)øsq~ uq~ppppsq~#q~)ŒxqÇ=sq~Csq~ uq~ppppq~)øsq~ uq~ppppsq~#q~+xsq~Csq~ uq~ppppq~)øsq~ uq~ppppsq~#q~#xq~À‰sq~Csq~ uq~ppppq~)øsq~ uq~ppppsq~#q~ºxsq~Csq~ uq~ppppq~)øsq~ uq~ppppsq~#q~$Lxsq~Csq~ uq~ppppq~)øsq~ uq~ppppsq~#q~’xq,Lq~,sq~ uq~pppppt |/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/util/RequestUtils.java,v 1.102 2003/05/17 01:56:51 dgraham Exp $ * $Revision: 1.102 $ * $Date: 2003/05/17 01:56:51 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * General purpose utility methods related to processing a servlet request * in the Struts controller framework. * * @author Craig R. McClanahan * @author Ted Husted * @author James Turner * @author David Graham * @version $Revision: 1.102 $ $Date: 2003/05/17 01:56:51 $ */ ptRequestUtils.javaq~fxsq~ uq~ppppsq~ uq~q~%9pppq~fxsq~ uq~ppppsq~#q~)çxqf&qfmpppppq~$sq~ uq~q~Æ^qYrqc¢psq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~"Ësq~ uq~pppppppt DynaBean.javaq~$xsq~ uq~ppppsq~ uq~q~)çpppq~$xsq~ uq~q~Ęq~êq~Ãêppq~$sq~ uq~ppppsq~ uq~ q~)‰q«‚q²cq²Œq²µppppq~Äxxq~Æq~)Õsq~Csq~ uq~ppppq~)Øsq~ uq~ppppsq~#q~#xsq~Csq~ uq~ppppq~)Øsq~ uq~ppppsq~#q~éxsq~Csq~ uq~ppppq~)Øsq~ uq~ppppsq~#q~ºxsq~Csq~ uq~ppppq~)Øsq~ uq~ppppsq~#q~%9xpq~Bsq~ uq~pppppt R/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/action/DynaActionFormClass.java,v 1.12 2002/12/16 03:48:27 craigmcc Exp $ * $Revision: 1.12 $ * $Date: 2002/12/16 03:48:27 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** *

      Implementation of DynaClass for * DynaActionForm classes that allow developers to define * ActionForms without having to individually code all of the classes. * NOTE - This class is only used in the internal * implementation of dynamic action form beans. Applications never need * to consult this documentation.

      * * @author Craig McClanahan * @version $Revision: 1.12 $ $Date: 2002/12/16 03:48:27 $ * @since Struts 1.1 */ ptDynaActionFormClass.javaq~fxsq~ uq~ppppsq~ uq~q~)Œpppq~fxsq~ uq~ppppsq~#q~)Íxsq~Csq~ uq~ppppq~Ísq~ uq~ppppsq~#q~)Íxppq~$sq~ uq~q~ÆTpppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~"Ësq~ uq~ppppppptDynaProperty.javaq~$xsq~ uq~ppppsq~ uq~q~)Ípppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~qaq~)Äsq~isq~ uq~sq~bsq~ uq~ppppqqqsq~ uq~ppppppptnameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~)Œsq~ uq~ppppptD/** * Return a property descriptor for the specified property, if it exists; * otherwise, return null. * * @param name Name of the dynamic property for which a descriptor * is requested * * @exception IllegalArgumentException if no property name is specified */ ptgetDynaPropertyq~=xsq~ uq~pppppq~$q~yq~$q~)Ípq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tÍ if (name == null) { throw new IllegalArgumentException ("No property name specified"); } return ((DynaProperty) propertiesMap.get(name)); sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~)Œsq~ uq~pppppt›/** *

      Return an array of DynaPropertys for the properties * currently defined in this DynaClass. If no properties are defined, a * zero-length array will be returned.

      * *

      FIXME - Should we really be implementing * getBeanInfo() instead, which returns property descriptors * and a bunch of other stuff?

      */ ptgetDynaPropertiesq~=xsq~ uq~pppppq~$q~yq~$q~)Ít[]q~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t( return (properties); sq~ uq~ppppq~$q~$xq˜asq~isq~ uq~sq~bsq~ uq~ppppqqšsq~ uq~ppppppptnameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~)Œsq~ uq~ppppptD/** * Return a property descriptor for the specified property, if it exists; * otherwise, return null. * * @param name Name of the dynamic property for which a descriptor * is requested * * @exception IllegalArgumentException if no property name is specified */ ptgetDynaPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~)Ípq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tÍ if (name == null) { throw new IllegalArgumentException ("No property name specified"); } return ((DynaProperty) propertiesMap.get(name)); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~)Œsq~ uq~pppppt›/** *

      Return an array of DynaPropertys for the properties * currently defined in this DynaClass. If no properties are defined, a * zero-length array will be returned.

      * *

      FIXME - Should we really be implementing * getBeanInfo() instead, which returns property descriptors * and a bunch of other stuff?

      */ ptgetDynaPropertiesq~¢xsq~ uq~pppppq~¥q~¦q~¥q~)Ít[]q~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t( return (properties); sq~ uq~ppppq~¥q~¥xq™Ésq~isq~ uq~sq~bsq~ uq~ppppqqÃsq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~)Œsq~ uq~ppppptD/** * Return a property descriptor for the specified property, if it exists; * otherwise, return null. * * @param name Name of the dynamic property for which a descriptor * is requested * * @exception IllegalArgumentException if no property name is specified */ ptgetDynaPropertyq~rxsq~ uq~pppppq~–q~—q~–q~)Ípq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tÍ if (name == null) { throw new IllegalArgumentException ("No property name specified"); } return ((DynaProperty) propertiesMap.get(name)); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~)Œsq~ uq~pppppt›/** *

      Return an array of DynaPropertys for the properties * currently defined in this DynaClass. If no properties are defined, a * zero-length array will be returned.

      * *

      FIXME - Should we really be implementing * getBeanInfo() instead, which returns property descriptors * and a bunch of other stuff?

      */ ptgetDynaPropertiesq~rxsq~ uq~pppppq~–q~—q~–q~)Ít[]q~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t( return (properties); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqqìsq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~)Œsq~ uq~ppppptD/** * Return a property descriptor for the specified property, if it exists; * otherwise, return null. * * @param name Name of the dynamic property for which a descriptor * is requested * * @exception IllegalArgumentException if no property name is specified */ ptgetDynaPropertyq~{xsq~ uq~pppppq~~q~q~~q~)Ípq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tÍ if (name == null) { throw new IllegalArgumentException ("No property name specified"); } return ((DynaProperty) propertiesMap.get(name)); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~)Œsq~ uq~pppppt›/** *

      Return an array of DynaPropertys for the properties * currently defined in this DynaClass. If no properties are defined, a * zero-length array will be returned.

      * *

      FIXME - Should we really be implementing * getBeanInfo() instead, which returns property descriptors * and a bunch of other stuff?

      */ ptgetDynaPropertiesq~{xsq~ uq~pppppq~~q~q~~q~)Ít[]q~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t( return (properties); sq~ uq~ppppq~~q~~xq›Ysq~isq~ uq~sq~bsq~ uq~ppppqrsq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~)Œsq~ uq~ppppptD/** * Return a property descriptor for the specified property, if it exists; * otherwise, return null. * * @param name Name of the dynamic property for which a descriptor * is requested * * @exception IllegalArgumentException if no property name is specified */ ptgetDynaPropertyq~cxsq~ uq~pppppq~fq~gq~fq~)Ípq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftÍ if (name == null) { throw new IllegalArgumentException ("No property name specified"); } return ((DynaProperty) propertiesMap.get(name)); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~)Œsq~ uq~pppppt›/** *

      Return an array of DynaPropertys for the properties * currently defined in this DynaClass. If no properties are defined, a * zero-length array will be returned.

      * *

      FIXME - Should we really be implementing * getBeanInfo() instead, which returns property descriptors * and a bunch of other stuff?

      */ ptgetDynaPropertiesq~cxsq~ uq~pppppq~fq~gq~fq~)Ít[]q~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft( return (properties); sq~ uq~ppppq~fq~fxqœépppq~Äxq~$ppxt[]q~xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq~)Œsq~ uq~pppppt’/** * The set of dynamic properties that are part of this DynaClass, * keyed by the property name. Individual descriptor instances will * be the same instances as those in the properties list. */ /** * The set of dynamic properties that are part of this DynaClass, * keyed by the property name. Individual descriptor instances will * be the same instances as those in the properties list. */ /** * The set of dynamic properties that are part of this DynaClass, * keyed by the property name. Individual descriptor instances will * be the same instances as those in the properties list. */ /** * The set of dynamic properties that are part of this DynaClass, * keyed by the property name. Individual descriptor instances will * be the same instances as those in the properties list. */ /** * The set of dynamic properties that are part of this DynaClass, * keyed by the property name. Individual descriptor instances will * be the same instances as those in the properties list. */ pt propertiesMapq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt new HashMap()q~$q~$q~$xsq~(sq~ uq~ppppq~)Œsq~ uq~ppppptB// ------------------------------------------------------- Static Variables /** * The set of DynaActionFormClass instances that have * ever been created, keyed by the form bean name. */ // ------------------------------------------------------- Static Variables /** * The set of DynaActionFormClass instances that have * ever been created, keyed by the form bean name. */ // ------------------------------------------------------- Static Variables /** * The set of DynaActionFormClass instances that have * ever been created, keyed by the form bean name. */ // ------------------------------------------------------- Static Variables /** * The set of DynaActionFormClass instances that have * ever been created, keyed by the form bean name. */ // ------------------------------------------------------- Static Variables /** * The set of DynaActionFormClass instances that have * ever been created, keyed by the form bean name. */ pt dynaClassesq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~;xpppt new HashMap()q~$sq~#q~$xsq~isq~ uq~ppppq~)Œsq~ uq~ppppptx// ------------------------------------------------------ DynaClass Methods /** * Return the name of this DynaClass (analogous to the * getName() method of java.lang.ClassDynaClass implementation class to support * different dynamic classes, with different sets of properties. */ ptgetNameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t' return (this.name); sq~ uq~ppppq~$q~$xqqqqq‰q~)‰sq~isq~ uq~ppppq~)Œsq~ uq~pppppt‘// --------------------------------------------------------- Public Methods /** * Render a String representation of this object. */ pttoStringq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tþ StringBuffer sb = new StringBuffer("DynaActionFormBean[name="); sb.append(name); DynaProperty props[] = getDynaProperties(); if (props == null) { props = new DynaProperty[0]; } for (int i = 0; i < props.length; i++) { sb.append(','); sb.append(props[i].getName()); sb.append('/'); sb.append(props[i].getType()); } sb.append("]"); return (sb.toString()); sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~)Œsq~ uq~pppppt”// --------------------------------------------------------- Static Methods /** * Clear our cache of DynaActionFormClass instances. */ ptclearq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxq~$t] synchronized (dynaClasses) { dynaClasses.clear(); } sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppqr“sq~ uq~ppppppptconfigq~=xsq~ uq~pppppq~$q~yq~$q~#pq~$xpppq~)Œsq~ uq~pppppt×/** * Create (if necessary) and return a new DynaActionFormClass * instance for the specified form bean configuration instance. * * @param config The FormBeanConfig instance describing the properties * of the bean to be created * * @exception IllegalArgumentException if the bean implementation class * specified in the configuration is not DynaActionForm (or a subclass * of DynaActionForm) */ ptcreateDynaActionFormClassq~=xsq~ uq~pppppq~$q~yq~$q~)Œpq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxq~$t… synchronized (dynaClasses) { DynaActionFormClass dynaClass = (DynaActionFormClass) dynaClasses.get(config.getName()); if (dynaClass == null) { dynaClass = new DynaActionFormClass(config); dynaClasses.put(config.getName(), dynaClass); } return (dynaClass); } sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppqr¬sq~ uq~ppppppptconfigq~=xsq~ uq~pppppq~$q~yq~$q~#pq~$xpppq~)Œsq~ uq~ppppptì// ------------------------------------------------------ Protected Methods /** * Introspect our form bean configuration to identify the supported * properties. * * @param config The FormBeanConfig instance describing the properties * of the bean to be created * * @exception IllegalArgumentException if the bean implementation class * specified in the configuration is not DynaActionForm (or a subclass * of DynaActionForm) */ pt introspectq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$t¢ // Validate the ActionFormBean implementation class try { beanClass = RequestUtils.applicationClass(config.getType()); } catch (Throwable t) { throw new IllegalArgumentException ("Cannot instantiate ActionFormBean class '" + config.getType() + "': " + t); } if (!DynaActionForm.class.isAssignableFrom(beanClass)) { throw new IllegalArgumentException ("Class '" + config.getType() + "' is not a subclass of " + "'org.apache.struts.action.DynaActionForm'"); } // Set the name we will know ourselves by from the form bean name this.name = config.getName(); // Look up the property descriptors for this bean class FormPropertyConfig descriptors[] = config.findFormPropertyConfigs(); if (descriptors == null) { descriptors = new FormPropertyConfig[0]; } // Create corresponding dynamic property definitions properties = new DynaProperty[descriptors.length]; for (int i = 0; i < descriptors.length; i++) { properties[i] = new DynaProperty(descriptors[i].getName(), descriptors[i].getTypeClass()); propertiesMap.put(properties[i].getName(), properties[i]); } sq~ uq~ppppq~$q~$xsq~esq~ uq~sq~bsq~ uq~ppppqrÄsq~ uq~ppppppptconfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~#pq~§xpppq~)Œsq~ uq~pppppt// ----------------------------------------------------------- Constructors /** * Construct a new DynaActionFormClass for the specified form bean * configuration. This constructor is private; DynaActionFormClass * instances will be created as needed via calls to the * static createDynaActionFormClass() method. * * @param config The FormBeanConfig instance describing the properties * of the bean to be created * * @exception IllegalArgumentException if the bean implementation class * specified in the configuration is not DynaActionForm (or a subclass * of DynaActionForm) */ pq~)q~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~xq~¥t' introspect(config); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~)Œsq~ uq~ppppptx// ------------------------------------------------------ DynaClass Methods /** * Return the name of this DynaClass (analogous to the * getName() method of java.lang.ClassDynaClass implementation class to support * different dynamic classes, with different sets of properties. */ ptgetNameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t' return (this.name); sq~ uq~ppppq~¥q~¥xqqšqq²q«‚sq~isq~ uq~ppppq~)Œsq~ uq~pppppt‘// --------------------------------------------------------- Public Methods /** * Render a String representation of this object. */ pttoStringq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tþ StringBuffer sb = new StringBuffer("DynaActionFormBean[name="); sb.append(name); DynaProperty props[] = getDynaProperties(); if (props == null) { props = new DynaProperty[0]; } for (int i = 0; i < props.length; i++) { sb.append(','); sb.append(props[i].getName()); sb.append('/'); sb.append(props[i].getType()); } sb.append("]"); return (sb.toString()); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~)Œsq~ uq~pppppt”// --------------------------------------------------------- Static Methods /** * Clear our cache of DynaActionFormClass instances. */ ptclearq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥t] synchronized (dynaClasses) { dynaClasses.clear(); } sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqs sq~ uq~ppppppptconfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~#pq~§xpppq~)Œsq~ uq~pppppt×/** * Create (if necessary) and return a new DynaActionFormClass * instance for the specified form bean configuration instance. * * @param config The FormBeanConfig instance describing the properties * of the bean to be created * * @exception IllegalArgumentException if the bean implementation class * specified in the configuration is not DynaActionForm (or a subclass * of DynaActionForm) */ ptcreateDynaActionFormClassq~¢xsq~ uq~pppppq~¥q~¦q~¥q~)Œpq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥t… synchronized (dynaClasses) { DynaActionFormClass dynaClass = (DynaActionFormClass) dynaClasses.get(config.getName()); if (dynaClass == null) { dynaClass = new DynaActionFormClass(config); dynaClasses.put(config.getName(), dynaClass); } return (dynaClass); } sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqs%sq~ uq~ppppppptconfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~#pq~§xpppq~)Œsq~ uq~ppppptì// ------------------------------------------------------ Protected Methods /** * Introspect our form bean configuration to identify the supported * properties. * * @param config The FormBeanConfig instance describing the properties * of the bean to be created * * @exception IllegalArgumentException if the bean implementation class * specified in the configuration is not DynaActionForm (or a subclass * of DynaActionForm) */ pt introspectq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥t¢ // Validate the ActionFormBean implementation class try { beanClass = RequestUtils.applicationClass(config.getType()); } catch (Throwable t) { throw new IllegalArgumentException ("Cannot instantiate ActionFormBean class '" + config.getType() + "': " + t); } if (!DynaActionForm.class.isAssignableFrom(beanClass)) { throw new IllegalArgumentException ("Class '" + config.getType() + "' is not a subclass of " + "'org.apache.struts.action.DynaActionForm'"); } // Set the name we will know ourselves by from the form bean name this.name = config.getName(); // Look up the property descriptors for this bean class FormPropertyConfig descriptors[] = config.findFormPropertyConfigs(); if (descriptors == null) { descriptors = new FormPropertyConfig[0]; } // Create corresponding dynamic property definitions properties = new DynaProperty[descriptors.length]; for (int i = 0; i < descriptors.length; i++) { properties[i] = new DynaProperty(descriptors[i].getName(), descriptors[i].getTypeClass()); propertiesMap.put(properties[i].getName(), properties[i]); } sq~ uq~ppppq~¥q~¥xsq~esq~ uq~sq~bsq~ uq~ppppqs=sq~ uq~ppppppptconfigq~rxsq~ uq~pppppq~–q~—q~–q~#pq~˜xpppq~)Œsq~ uq~pppppt// ----------------------------------------------------------- Constructors /** * Construct a new DynaActionFormClass for the specified form bean * configuration. This constructor is private; DynaActionFormClass * instances will be created as needed via calls to the * static createDynaActionFormClass() method. * * @param config The FormBeanConfig instance describing the properties * of the bean to be created * * @exception IllegalArgumentException if the bean implementation class * specified in the configuration is not DynaActionForm (or a subclass * of DynaActionForm) */ pq~)q~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~'bxq~–t' introspect(config); sq~ uq~ppppq~–q~–xsq~(sq~ uq~ppppq~)Œsq~ uq~ppppptç/** * The form bean configuration information for this class. */ /** * The form bean configuration information for this class. */ /** * The form bean configuration information for this class. */ ptconfigq~rxsq~ uq~pppppq~–q~—q~–q~#pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xpppt nullq~–q~–q~–xsq~(sq~ uq~ppppq~)Œsq~ uq~pppppt//** * The lockable object we can synchronize on, even if dynaClasses * is null, */ /** * The lockable object we can synchronize on, even if dynaClasses * is null, */ /** * The lockable object we can synchronize on, even if dynaClasses * is null, */ ptlockq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~ xpppt ""q~–q~–q~–xsq~isq~ uq~ppppq~)Œsq~ uq~ppppptx// ------------------------------------------------------ DynaClass Methods /** * Return the name of this DynaClass (analogous to the * getName() method of java.lang.ClassDynaClass implementation class to support * different dynamic classes, with different sets of properties. */ ptgetNameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t' return (this.name); sq~ uq~ppppq~–q~–xqqÃqqÛq²csq~isq~ uq~ppppq~)Œsq~ uq~pppppt‘// --------------------------------------------------------- Public Methods /** * Render a String representation of this object. */ pttoStringq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tþ StringBuffer sb = new StringBuffer("DynaActionFormBean[name="); sb.append(name); DynaProperty props[] = getDynaProperties(); if (props == null) { props = new DynaProperty[0]; } for (int i = 0; i < props.length; i++) { sb.append(','); sb.append(props[i].getName()); sb.append('/'); sb.append(props[i].getType()); } sb.append("]"); return (sb.toString()); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~)Œsq~ uq~pppppt”// --------------------------------------------------------- Static Methods /** * Clear our cache of DynaActionFormClass instances. */ ptclearq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t» synchronized (lock) { if (dynaClasses == null) { dynaClasses = new HashMap(); } dynaClasses.clear(); } sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqs¢sq~ uq~ppppppptconfigq~rxsq~ uq~pppppq~–q~—q~–q~#pq~˜xpppq~)Œsq~ uq~pppppt×/** * Create (if necessary) and return a new DynaActionFormClass * instance for the specified form bean configuration instance. * * @param config The FormBeanConfig instance describing the properties * of the bean to be created * * @exception IllegalArgumentException if the bean implementation class * specified in the configuration is not DynaActionForm (or a subclass * of DynaActionForm) */ ptcreateDynaActionFormClassq~rxsq~ uq~pppppq~–q~—q~–q~)Œpq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–tã synchronized (lock) { if (dynaClasses == null) { dynaClasses = new HashMap(); } DynaActionFormClass dynaClass = (DynaActionFormClass) dynaClasses.get(config.getName()); if (dynaClass == null) { dynaClass = new DynaActionFormClass(config); dynaClasses.put(config.getName(), dynaClass); } return (dynaClass); } sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqs»sq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~)Œsq~ uq~ppppptD/** * Return an existing DynaActionFormClass of the specified * name, if one has been configured previously. If no such instance has * been configured, return null instead. * * @param name Name of the DynaActionFormClass to be * returned */ ptgetDynaActionFormClassq~rxsq~ uq~pppppq~–q~—q~–q~)Œpq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–tè synchronized (lock) { if (dynaClasses == null) { return (null); } else { return ((DynaActionFormClass) dynaClasses.get(name)); } } sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~)Œsq~ uq~ppppptN// ------------------------------------------------------ Protected Methods /** * Return the implementation class we are using to construct new * instances, re-introspecting our {@link FormBeanConfig} if necessary * (i.e. after being deserialized, since beanClass is * marked transient. */ pt getBeanClassq~rxsq~ uq~pppppq~–q~—q~–q~½pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–tu if (beanClass == null) { introspect(config); } return (beanClass); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqsäsq~ uq~ppppppptconfigq~rxsq~ uq~pppppq~–q~—q~–q~#pq~˜xpppq~)Œsq~ uq~ppppptŸ/** * Introspect our form bean configuration to identify the supported * properties. * * @param config The FormBeanConfig instance describing the properties * of the bean to be created * * @exception IllegalArgumentException if the bean implementation class * specified in the configuration is not DynaActionForm (or a subclass * of DynaActionForm) */ pt introspectq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–tà this.config = config; // Validate the ActionFormBean implementation class try { beanClass = RequestUtils.applicationClass(config.getType()); } catch (Throwable t) { throw new IllegalArgumentException ("Cannot instantiate ActionFormBean class '" + config.getType() + "': " + t); } if (!DynaActionForm.class.isAssignableFrom(beanClass)) { throw new IllegalArgumentException ("Class '" + config.getType() + "' is not a subclass of " + "'org.apache.struts.action.DynaActionForm'"); } // Set the name we will know ourselves by from the form bean name this.name = config.getName(); // Look up the property descriptors for this bean class FormPropertyConfig descriptors[] = config.findFormPropertyConfigs(); if (descriptors == null) { descriptors = new FormPropertyConfig[0]; } // Create corresponding dynamic property definitions properties = new DynaProperty[descriptors.length]; for (int i = 0; i < descriptors.length; i++) { properties[i] = new DynaProperty(descriptors[i].getName(), descriptors[i].getTypeClass()); propertiesMap.put(properties[i].getName(), properties[i]); } sq~ uq~ppppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppqsüsq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~#pq~€xpppq~)Œsq~ uq~pppppt// ----------------------------------------------------------- Constructors /** * Construct a new DynaActionFormClass for the specified form bean * configuration. This constructor is private; DynaActionFormClass * instances will be created as needed via calls to the * static createDynaActionFormClass() method. * * @param config The FormBeanConfig instance describing the properties * of the bean to be created * * @exception IllegalArgumentException if the bean implementation class * specified in the configuration is not DynaActionForm (or a subclass * of DynaActionForm) */ pq~)q~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~d1xq~~t' introspect(config); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~)Œsq~ uq~ppppptx// ------------------------------------------------------ DynaClass Methods /** * Return the name of this DynaClass (analogous to the * getName() method of java.lang.ClassDynaClass implementation class to support * different dynamic classes, with different sets of properties. */ ptgetNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t' return (this.name); sq~ uq~ppppq~~q~~xqqìqrq²Œsq~isq~ uq~ppppq~)Œsq~ uq~pppppt‘// --------------------------------------------------------- Public Methods /** * Render a String representation of this object. */ pttoStringq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tþ StringBuffer sb = new StringBuffer("DynaActionFormBean[name="); sb.append(name); DynaProperty props[] = getDynaProperties(); if (props == null) { props = new DynaProperty[0]; } for (int i = 0; i < props.length; i++) { sb.append(','); sb.append(props[i].getName()); sb.append('/'); sb.append(props[i].getType()); } sb.append("]"); return (sb.toString()); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~)Œsq~ uq~pppppt”// --------------------------------------------------------- Static Methods /** * Clear our cache of DynaActionFormClass instances. */ ptclearq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t» synchronized (lock) { if (dynaClasses == null) { dynaClasses = new HashMap(); } dynaClasses.clear(); } sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqtDsq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~#pq~€xpppq~)Œsq~ uq~pppppt×/** * Create (if necessary) and return a new DynaActionFormClass * instance for the specified form bean configuration instance. * * @param config The FormBeanConfig instance describing the properties * of the bean to be created * * @exception IllegalArgumentException if the bean implementation class * specified in the configuration is not DynaActionForm (or a subclass * of DynaActionForm) */ ptcreateDynaActionFormClassq~{xsq~ uq~pppppq~~q~q~~q~)Œpq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t¢ synchronized (lock) { if (dynaClasses == null) { dynaClasses = new HashMap(); } ModuleConfig moduleConfig = config.getModuleConfig(); String key = config.getName(); if (moduleConfig != null) { key += moduleConfig.getPrefix(); } DynaActionFormClass dynaClass = (DynaActionFormClass) dynaClasses.get(key); if (dynaClass == null) { dynaClass = new DynaActionFormClass(config); dynaClasses.put(key, dynaClass); } return (dynaClass); } sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~)Œsq~ uq~ppppptR// ------------------------------------------------------ Protected Methods /** * Return the implementation class we are using to construct new * instances, re-introspecting our {@link FormBeanConfig} if necessary * (that is, after being deserialized, since beanClass is * marked transient. */ pt getBeanClassq~{xsq~ uq~pppppq~~q~q~~q~½pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~tu if (beanClass == null) { introspect(config); } return (beanClass); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqtmsq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~#pq~€xpppq~)Œsq~ uq~ppppptŸ/** * Introspect our form bean configuration to identify the supported * properties. * * @param config The FormBeanConfig instance describing the properties * of the bean to be created * * @exception IllegalArgumentException if the bean implementation class * specified in the configuration is not DynaActionForm (or a subclass * of DynaActionForm) */ pt introspectq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~tà this.config = config; // Validate the ActionFormBean implementation class try { beanClass = RequestUtils.applicationClass(config.getType()); } catch (Throwable t) { throw new IllegalArgumentException ("Cannot instantiate ActionFormBean class '" + config.getType() + "': " + t); } if (!DynaActionForm.class.isAssignableFrom(beanClass)) { throw new IllegalArgumentException ("Class '" + config.getType() + "' is not a subclass of " + "'org.apache.struts.action.DynaActionForm'"); } // Set the name we will know ourselves by from the form bean name this.name = config.getName(); // Look up the property descriptors for this bean class FormPropertyConfig descriptors[] = config.findFormPropertyConfigs(); if (descriptors == null) { descriptors = new FormPropertyConfig[0]; } // Create corresponding dynamic property definitions properties = new DynaProperty[descriptors.length]; for (int i = 0; i < descriptors.length; i++) { properties[i] = new DynaProperty(descriptors[i].getName(), descriptors[i].getTypeClass()); propertiesMap.put(properties[i].getName(), properties[i]); } sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppqt…sq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~#pq~hxpppq~)Œsq~ uq~pppppt// ----------------------------------------------------------- Constructors /** * Construct a new DynaActionFormClass for the specified form bean * configuration. This constructor is private; DynaActionFormClass * instances will be created as needed via calls to the * static createDynaActionFormClass() method. * * @param config The FormBeanConfig instance describing the properties * of the bean to be created * * @exception IllegalArgumentException if the bean implementation class * specified in the configuration is not DynaActionForm (or a subclass * of DynaActionForm) */ pq~)q~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~·gxq~ft' introspect(config); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~)Œsq~ uq~ppppptx// ------------------------------------------------------ DynaClass Methods /** * Return the name of this DynaClass (analogous to the * getName() method of java.lang.ClassDynaClass implementation class to support * different dynamic classes, with different sets of properties. */ ptgetNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft' return (this.name); sq~ uq~ppppq~fq~fxqrqr-q²µsq~isq~ uq~ppppq~)Œsq~ uq~pppppt‘// --------------------------------------------------------- Public Methods /** * Render a String representation of this object. */ pttoStringq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftþ StringBuffer sb = new StringBuffer("DynaActionFormBean[name="); sb.append(name); DynaProperty props[] = getDynaProperties(); if (props == null) { props = new DynaProperty[0]; } for (int i = 0; i < props.length; i++) { sb.append(','); sb.append(props[i].getName()); sb.append('/'); sb.append(props[i].getType()); } sb.append("]"); return (sb.toString()); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~)Œsq~ uq~pppppt”// --------------------------------------------------------- Static Methods /** * Clear our cache of DynaActionFormClass instances. */ ptclearq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft» synchronized (lock) { if (dynaClasses == null) { dynaClasses = new HashMap(); } dynaClasses.clear(); } sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqtÍsq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~#pq~hxpppq~)Œsq~ uq~pppppt×/** * Create (if necessary) and return a new DynaActionFormClass * instance for the specified form bean configuration instance. * * @param config The FormBeanConfig instance describing the properties * of the bean to be created * * @exception IllegalArgumentException if the bean implementation class * specified in the configuration is not DynaActionForm (or a subclass * of DynaActionForm) */ ptcreateDynaActionFormClassq~cxsq~ uq~pppppq~fq~gq~fq~)Œpq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft¢ synchronized (lock) { if (dynaClasses == null) { dynaClasses = new HashMap(); } ModuleConfig moduleConfig = config.getModuleConfig(); String key = config.getName(); if (moduleConfig != null) { key += moduleConfig.getPrefix(); } DynaActionFormClass dynaClass = (DynaActionFormClass) dynaClasses.get(key); if (dynaClass == null) { dynaClass = new DynaActionFormClass(config); dynaClasses.put(key, dynaClass); } return (dynaClass); } sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~)Œsq~ uq~ppppptR// ------------------------------------------------------ Protected Methods /** * Return the implementation class we are using to construct new * instances, re-introspecting our {@link FormBeanConfig} if necessary * (that is, after being deserialized, since beanClass is * marked transient. */ pt getBeanClassq~cxsq~ uq~pppppq~fq~gq~fq~½pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ftu if (beanClass == null) { introspect(config); } return (beanClass); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqtösq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~#pq~hxpppq~)Œsq~ uq~ppppptŸ/** * Introspect our form bean configuration to identify the supported * properties. * * @param config The FormBeanConfig instance describing the properties * of the bean to be created * * @exception IllegalArgumentException if the bean implementation class * specified in the configuration is not DynaActionForm (or a subclass * of DynaActionForm) */ pt introspectq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ftà this.config = config; // Validate the ActionFormBean implementation class try { beanClass = RequestUtils.applicationClass(config.getType()); } catch (Throwable t) { throw new IllegalArgumentException ("Cannot instantiate ActionFormBean class '" + config.getType() + "': " + t); } if (!DynaActionForm.class.isAssignableFrom(beanClass)) { throw new IllegalArgumentException ("Class '" + config.getType() + "' is not a subclass of " + "'org.apache.struts.action.DynaActionForm'"); } // Set the name we will know ourselves by from the form bean name this.name = config.getName(); // Look up the property descriptors for this bean class FormPropertyConfig descriptors[] = config.findFormPropertyConfigs(); if (descriptors == null) { descriptors = new FormPropertyConfig[0]; } // Create corresponding dynamic property definitions properties = new DynaProperty[descriptors.length]; for (int i = 0; i < descriptors.length; i++) { properties[i] = new DynaProperty(descriptors[i].getName(), descriptors[i].getTypeClass()); propertiesMap.put(properties[i].getName(), properties[i]); } sq~ uq~ppppq~fq~fxpq~Bsq~ uq~pppppppq~)q~=xsq~ uq~qpñpppq~$sq~ uq~q]Bpppsq~ uq~q~Åøpppq~$q~$q~)Øsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~q~Ä›q`ùqr“q˜Kqs q™´qs¢qs»qtDq›DqtÍqœÔppq~Äxq~$ppxsq~ uq~ppppptá/** *

      Instantiate and return a new DynaBean instance, associated * with this DynaClass. NOTE - This operation is not * supported, and throws an exception. You should create new * WrapDynaBean instances by calling its constructor:

      *
           *   Object javaBean = ...;
           *   DynaBean wrapper = new WrapDynaBean(javaBean);
           * 
      * * @exception IllegalAccessException if the Class or the appropriate * constructor is not accessible * @exception InstantiationException if this Class represents an abstract * class, an array class, a primitive type, or void; or if instantiation * fails for some other reason */ pt newInstanceq~=xsq~ uq~pppppq~$q~yq~$q~)çpq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t£ DynaActionForm dynaBean = (DynaActionForm) beanClass.newInstance(); dynaBean.setDynaActionFormClass(this); return (dynaBean); sq~ uq~q~)aq«Zppq~$q~$xq«Aq«‚q~;q²Jq²cqAÞq~)Isq~isq~ uq~sq~bsq~ uq~ppppqu)sq~ uq~pppppppt factoryConfigq~rxsq~ uq~pppppq~–q~—q~–q~'lpq~˜xsq~bsq~ uq~ppppqu)sq~ uq~pppppppt servletConfigq~rxsq~ uq~pppppq~–q~—q~–q~' pq~˜xppq~&wsq~ uq~pppppt/** * Populate Definition Factory Config from web.xml properties. * @param factoryConfig Definition Factory Config to populate. * @param servletConfig Current servlet config containing web.xml properties. * @exception IllegalAccessException if the caller does not have * access to the property accessor method * @exception java.lang.reflect.InvocationTargetException if the property accessor method * throws an exception * @see org.apache.commons.beanutils.BeanUtil * @since tiles 20020708 */ pt populateDefinitionsFactoryConfigq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t{ Map properties = new DefinitionsUtil.ServletPropertiesMap( servletConfig ); factoryConfig.populate( properties); sq~ uq~q~)aq~ðppq~–q~–xq²sq²ŒqAÿsq~isq~ uq~sq~bsq~ uq~ppppquJsq~ uq~pppppppt factoryConfigq~{xsq~ uq~pppppq~~q~q~~q~'lpq~€xsq~bsq~ uq~ppppquJsq~ uq~pppppppt servletConfigq~{xsq~ uq~pppppq~~q~q~~q~' pq~€xppq~&wsq~ uq~pppppt/** * Populate Definition Factory Config from web.xml properties. * @param factoryConfig Definition Factory Config to populate. * @param servletConfig Current servlet config containing web.xml properties. * @exception IllegalAccessException if the caller does not have * access to the property accessor method * @exception java.lang.reflect.InvocationTargetException if the property accessor method * throws an exception * @see org.apache.commons.beanutils.BeanUtils * @since tiles 20020708 */ pt populateDefinitionsFactoryConfigq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t{ Map properties = new DefinitionsUtil.ServletPropertiesMap( servletConfig ); factoryConfig.populate( properties); sq~ uq~q~)aq~ðppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppquksq~ uq~pppppppt propertiesq~{xsq~ uq~pppppq~~q~q~~q~¼pq~€xpppq~'lsq~ uq~pppppt¸/** * Populate this config object from properties map, based on * the specified name/value pairs. This method uses the populate() method from * org.apache.commons.beanutils.BeanUtil. *

      * Properties keys are scanned for old property names, and linked to the new name * if necessary. This modifies the properties map. *

      * The particular setter method to be called for each property is * determined using the usual JavaBeans introspection mechanisms. Thus, * you may identify custom setter methods using a BeanInfo class that is * associated with the class of the bean itself. If no such BeanInfo * class is available, the standard method name conversion ("set" plus * the capitalized name of the property in question) is used. *

      * NOTE: It is contrary to the JavaBeans Specification * to have more than one setter method (with different argument * signatures) for the same property. * * @param properties Map keyed by property name, with the * corresponding (String or String[]) value(s) to be set. * * @exception IllegalAccessException if the caller does not have * access to the property accessor method. * @exception java.lang.reflect.InvocationTargetException if the property accessor method * throws an exception. * @see org.apache.commons.beanutils.BeanUtils */ ptpopulateq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t¡ // link old parameter names for backward compatibility linkOldPropertyNames(properties); BeanUtils.populate( this, properties); sq~ uq~q~)aq~ðppq~~q~~xq²œq²µqB sq~isq~ uq~sq~bsq~ uq~ppppquƒsq~ uq~pppppppt factoryConfigq~cxsq~ uq~pppppq~fq~gq~fq~'lpq~hxsq~bsq~ uq~ppppquƒsq~ uq~pppppppt servletConfigq~cxsq~ uq~pppppq~fq~gq~fq~' pq~hxppq~&wsq~ uq~pppppt/** * Populate Definition Factory Config from web.xml properties. * @param factoryConfig Definition Factory Config to populate. * @param servletConfig Current servlet config containing web.xml properties. * @exception IllegalAccessException if the caller does not have * access to the property accessor method * @exception java.lang.reflect.InvocationTargetException if the property accessor method * throws an exception * @see org.apache.commons.beanutils.BeanUtils * @since tiles 20020708 */ pt populateDefinitionsFactoryConfigq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft{ Map properties = new DefinitionsUtil.ServletPropertiesMap( servletConfig ); factoryConfig.populate( properties); sq~ uq~q~)aq~ðppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqu¤sq~ uq~pppppppt propertiesq~cxsq~ uq~pppppq~fq~gq~fq~¼pq~hxpppq~'lsq~ uq~pppppt¸/** * Populate this config object from properties map, based on * the specified name/value pairs. This method uses the populate() method from * org.apache.commons.beanutils.BeanUtil. *

      * Properties keys are scanned for old property names, and linked to the new name * if necessary. This modifies the properties map. *

      * The particular setter method to be called for each property is * determined using the usual JavaBeans introspection mechanisms. Thus, * you may identify custom setter methods using a BeanInfo class that is * associated with the class of the bean itself. If no such BeanInfo * class is available, the standard method name conversion ("set" plus * the capitalized name of the property in question) is used. *

      * NOTE: It is contrary to the JavaBeans Specification * to have more than one setter method (with different argument * signatures) for the same property. * * @param properties Map keyed by property name, with the * corresponding (String or String[]) value(s) to be set. * * @exception IllegalAccessException if the caller does not have * access to the property accessor method. * @exception java.lang.reflect.InvocationTargetException if the property accessor method * throws an exception. * @see org.apache.commons.beanutils.BeanUtils */ ptpopulateq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft¡ // link old parameter names for backward compatibility linkOldPropertyNames(properties); BeanUtils.populate( this, properties); sq~ uq~q~)aq~ðppq~fq~fxq²Åppppq~ðppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqu¼sq~ uq~pppppppt propertiesq~rxsq~ uq~pppppq~–q~—q~–q~¼pq~˜xpppq~'lsq~ uq~ppppptÛ/** * Link old property names to new property names. * This modify the map. * @param properties Map keyed by property name, with the * corresponding (String or String[]) value(s) to be set * */ ptlinkOldPropertyNamesq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–tv Set entries = properties.entrySet(); Map toAdd = new HashMap(); Iterator i = entries.iterator(); while( i.hasNext() ) { Map.Entry entry = (Map.Entry)i.next(); if(DEFINITIONS_CONFIG_PARAMETER_NAME.equals(entry.getKey())) toAdd.put( "definitionConfigFiles", entry.getValue()); else if(FACTORY_CLASSNAME_PARAMETER_NAME.equals(entry.getKey())) toAdd.put( "factoryClassname", entry.getValue()); else if(PARSER_DETAILS_PARAMETER_NAME.equals(entry.getKey())) toAdd.put( "parserDebugLevel", entry.getValue()); else if(PARSER_VALIDATE_PARAMETER_NAME.equals(entry.getKey())) toAdd.put( "parserValidate", entry.getValue()); else if(TILES_DETAILS_PARAMETER_NAME.equals(entry.getKey())) toAdd.put( "debugLevel", entry.getValue()); } // end loop if( toAdd.size() > 0 ) properties.putAll( toAdd ); sq~ uq~ppppq~–q~–xsq~(sq~ uq~ppppq~'lsq~ uq~ppppptŒ/** * Specifies whether the factory is "module-aware". */ /** * Specifies whether the factory is "module-aware". */ pt moduleAwareq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xpppt trueq~~q~~q~~xsq~(sq~ uq~ppppq~'lsq~ uq~ppppptþ/** * The name associated to this factory. *
      * With Struts 1.1, this name is the module name to which this factory * belong. It is set by the system. *
      * In prior versions, this property is not used. */ /** * The name associated to this factory. *
      * With Struts 1.1, this name is the module name to which this factory * belong. It is set by the system. *
      * In prior versions, this property is not used. */ pt factoryNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xppppq~~q~~q~~xsq~esq~ uq~ppppq~'lsq~ uq~pppppt*/** * Default constructor. */ pq~(q~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppquÿsq~ uq~ppppppptinitParametersq~{xsq~ uq~pppppq~~q~q~~q~¼pq~€xpppq~'lsq~ uq~pppppt/** * Constructor. * Create configuration object, and initialize it with parameters from Map. * Parameters corresponding to an attribute are filtered and stored in appropriate * attribute. * @param initParameters Map. */ pq~(q~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~'lsq~ uq~ppppptØ/** * Get the module aware flag. * @return true: user wants a single factory instance, * false: user wants multiple factory instances (one per module with Struts) */ pt isModuleAwareq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t# return moduleAware; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqv&sq~ uq~pppppppt moduleAwareq~{xsq~ uq~pppppq~~q~q~~q~pq~€xpppq~'lsq~ uq~ppppptã/** * Set the module aware flag. * @param moduleAware true: user wants a single factory instance, * false: user wants multiple factory instances (one per module with Struts) */ ptsetModuleAwareq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t/ this.moduleAware = moduleAware; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~'lsq~ uq~ppppptR/** * Get the classname of the factory. * @return Classname. */ ptgetFactoryClassnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t( return factoryClassname; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqvNsq~ uq~ppppppptaFactoryClassnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~'lsq~ uq~pppppts/** * Set the classname of the factory.. * @param aFactoryClassname Classname of the factory. */ ptsetFactoryClassnameq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t5 factoryClassname = aFactoryClassname; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~'lsq~ uq~ppppptv/** * Get debug level. * @return Debug level. * @deprecated Use commons-logging mechanism. */ pt getDebugLevelq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t" return debugLevel; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqvvsq~ uq~pppppppt aDebugLevelq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xpppq~'lsq~ uq~pppppt/** * Set debug level. * @param aDebugLevel Debug level. * @deprecated Use commons-logging mechanism. */ pt setDebugLevelq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t) debugLevel = aDebugLevel; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~'lsq~ uq~pppppt‰/** * Get the debug level for the parser. * @return Debug level. * @deprecated Use commons-logging mechanism. */ ptgetParserDebugLevelq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t( return parserDebugLevel; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqvžsq~ uq~ppppppptaParserDebugLevelq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xpppq~'lsq~ uq~ppppptš/** * Set the debug level for the parser. * @param aParserDebugLevel Debug level. * @deprecated Use commons-logging mechanism. */ ptsetParserDebugLevelq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t5 parserDebugLevel = aParserDebugLevel; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~'lsq~ uq~ppppptw/** * Determines if the parser is validating. * @return true when in validating mode. */ ptgetParserValidateq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t& return parserValidate; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqvÆsq~ uq~ppppppptaParserValidateq~{xsq~ uq~pppppq~~q~q~~q~pq~€xpppq~'lsq~ uq~pppppt›/** * Set the validating mode for the parser. * @param aParserValidate true for validation, false otherwise */ ptsetParserValidateq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t1 parserValidate = aParserValidate; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~'lsq~ uq~pppppt]/** * Get the definition config files. * @return Defition config files. */ ptgetDefinitionConfigFilesq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t- return definitionConfigFiles; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqvîsq~ uq~ppppppptaDefinitionConfigFilesq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~'lsq~ uq~ppppptu/** * Set the definition config files. * @param aDefinitionConfigFiles Definition config files. */ ptsetDefinitionConfigFilesq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t? definitionConfigFiles = aDefinitionConfigFiles; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqwsq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqwsq~ uq~ppppppptvalueq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xppq~'lsq~ uq~pppppt“/** * Set value of an additional attribute. * @param name Name of the attribute. * @param value Value of the attribute. */ pt setAttributeq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t1 extraAttributes.put(name, value); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqw&sq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~'lsq~ uq~pppppt¤/** * Get value of an additional attribute. * @param name Name of the attribute. * @return Value of the attribute, or null if not found. */ pt getAttributeq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t1 return extraAttributes.get(name); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~'lsq~ uq~pppppt|/** * Get additional attributes as a Map. * @return Map A Map containing attribute name - value pairs. */ pt getAttributesq~{xsq~ uq~pppppq~~q~q~~q~¼pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t· Map map = new HashMap(extraAttributes); // Add property attributes using old names /* map.put(DEFINITIONS_CONFIG_PARAMETER_NAME, getDefinitionConfigFiles()); map.put(TILES_DETAILS_PARAMETER_NAME, Integer.toString(getDebugLevel()) ); map.put(PARSER_DETAILS_PARAMETER_NAME, Integer.toString(getParserDebugLevel()) ); map.put(PARSER_VALIDATE_PARAMETER_NAME, new Boolean(getParserValidate()).toString() ); if( ! "org.apache.struts.tiles.xmlDefinition.I18nFactorySet".equals(getFactoryClassname()) ) map.put(FACTORY_CLASSNAME_PARAMETER_NAME, getFactoryClassname()); */ return map; sq~ uq~ppppq~~q~~xquksq~isq~ uq~sq~bsq~ uq~ppppqwNsq~ uq~pppppppt propertiesq~{xsq~ uq~pppppq~~q~q~~q~¼pq~€xpppq~'lsq~ uq~ppppptâ/** * Link old property names to new property names. * This modifies the map. * @param properties Map keyed by property name, with the * corresponding (String or String[]) value(s) to be set. */ ptlinkOldPropertyNamesq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t8 Set entries = properties.entrySet(); Map toAdd = new HashMap(); Iterator i = entries.iterator(); while( i.hasNext() ) { Map.Entry entry = (Map.Entry)i.next(); if(DEFINITIONS_CONFIG_PARAMETER_NAME.equals(entry.getKey())) toAdd.put( "definitionConfigFiles", entry.getValue()); else if(FACTORY_CLASSNAME_PARAMETER_NAME.equals(entry.getKey())) toAdd.put( "factoryClassname", entry.getValue()); else if(PARSER_DETAILS_PARAMETER_NAME.equals(entry.getKey())) toAdd.put( "parserDebugLevel", entry.getValue()); else if(PARSER_VALIDATE_PARAMETER_NAME.equals(entry.getKey())) toAdd.put( "parserValidate", entry.getValue()); else if(TILES_DETAILS_PARAMETER_NAME.equals(entry.getKey())) toAdd.put( "debugLevel", entry.getValue()); } // end loop if( toAdd.size() > 0 ) properties.putAll( toAdd ); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~'lsq~ uq~pppppt+/** * Get the factory name. */ ptgetFactoryNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t# return factoryName; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqwwsq~ uq~pppppppt factoryNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~'lsq~ uq~pppppt[/** * Set the factory name. * @param factoryName Name of the factory. */ ptsetFactoryNameq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t/ this.factoryName = factoryName; sq~ uq~ppppq~~q~~xsq~esq~ uq~ppppq~'lsq~ uq~pppppt*/** * Default constructor. */ pq~(q~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft sq~ uq~ppppq~fq~fxsq~esq~ uq~sq~bsq~ uq~ppppqwžsq~ uq~ppppppptinitParametersq~cxsq~ uq~pppppq~fq~gq~fq~¼pq~hxpppq~'lsq~ uq~pppppt/** * Constructor. * Create configuration object, and initialize it with parameters from Map. * Parameters corresponding to an attribute are filtered and stored in appropriate * attribute. * @param initParameters Map. */ pq~(q~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~'lsq~ uq~ppppptØ/** * Get the module aware flag. * @return true: user wants a single factory instance, * false: user wants multiple factory instances (one per module with Struts) */ pt isModuleAwareq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft# return moduleAware; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqwÅsq~ uq~pppppppt moduleAwareq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxpppq~'lsq~ uq~ppppptã/** * Set the module aware flag. * @param moduleAware true: user wants a single factory instance, * false: user wants multiple factory instances (one per module with Struts) */ ptsetModuleAwareq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft/ this.moduleAware = moduleAware; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~'lsq~ uq~ppppptR/** * Get the classname of the factory. * @return Classname. */ ptgetFactoryClassnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft( return factoryClassname; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqwísq~ uq~ppppppptaFactoryClassnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~'lsq~ uq~pppppts/** * Set the classname of the factory.. * @param aFactoryClassname Classname of the factory. */ ptsetFactoryClassnameq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft5 factoryClassname = aFactoryClassname; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~'lsq~ uq~ppppptv/** * Get debug level. * @return Debug level. * @deprecated Use commons-logging mechanism. */ pt getDebugLevelq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft" return debugLevel; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqxsq~ uq~pppppppt aDebugLevelq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxpppq~'lsq~ uq~pppppt/** * Set debug level. * @param aDebugLevel Debug level. * @deprecated Use commons-logging mechanism. */ pt setDebugLevelq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft) debugLevel = aDebugLevel; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~'lsq~ uq~pppppt‰/** * Get the debug level for the parser. * @return Debug level. * @deprecated Use commons-logging mechanism. */ ptgetParserDebugLevelq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft( return parserDebugLevel; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqx=sq~ uq~ppppppptaParserDebugLevelq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxpppq~'lsq~ uq~ppppptš/** * Set the debug level for the parser. * @param aParserDebugLevel Debug level. * @deprecated Use commons-logging mechanism. */ ptsetParserDebugLevelq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft5 parserDebugLevel = aParserDebugLevel; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~'lsq~ uq~ppppptw/** * Determines if the parser is validating. * @return true when in validating mode. */ ptgetParserValidateq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft& return parserValidate; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqxesq~ uq~ppppppptaParserValidateq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxpppq~'lsq~ uq~pppppt›/** * Set the validating mode for the parser. * @param aParserValidate true for validation, false otherwise */ ptsetParserValidateq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft1 parserValidate = aParserValidate; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~'lsq~ uq~pppppt]/** * Get the definition config files. * @return Defition config files. */ ptgetDefinitionConfigFilesq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft- return definitionConfigFiles; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqxsq~ uq~ppppppptaDefinitionConfigFilesq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~'lsq~ uq~ppppptu/** * Set the definition config files. * @param aDefinitionConfigFiles Definition config files. */ ptsetDefinitionConfigFilesq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft? definitionConfigFiles = aDefinitionConfigFiles; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqx¥sq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqx¥sq~ uq~ppppppptvalueq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxppq~'lsq~ uq~pppppt“/** * Set value of an additional attribute. * @param name Name of the attribute. * @param value Value of the attribute. */ pt setAttributeq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft1 extraAttributes.put(name, value); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqxÅsq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~'lsq~ uq~pppppt¤/** * Get value of an additional attribute. * @param name Name of the attribute. * @return Value of the attribute, or null if not found. */ pt getAttributeq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft1 return extraAttributes.get(name); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~'lsq~ uq~pppppt|/** * Get additional attributes as a Map. * @return Map A Map containing attribute name - value pairs. */ pt getAttributesq~cxsq~ uq~pppppq~fq~gq~fq~¼pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft· Map map = new HashMap(extraAttributes); // Add property attributes using old names /* map.put(DEFINITIONS_CONFIG_PARAMETER_NAME, getDefinitionConfigFiles()); map.put(TILES_DETAILS_PARAMETER_NAME, Integer.toString(getDebugLevel()) ); map.put(PARSER_DETAILS_PARAMETER_NAME, Integer.toString(getParserDebugLevel()) ); map.put(PARSER_VALIDATE_PARAMETER_NAME, new Boolean(getParserValidate()).toString() ); if( ! "org.apache.struts.tiles.xmlDefinition.I18nFactorySet".equals(getFactoryClassname()) ) map.put(FACTORY_CLASSNAME_PARAMETER_NAME, getFactoryClassname()); */ return map; sq~ uq~ppppq~fq~fxqu¤sq~isq~ uq~sq~bsq~ uq~ppppqxísq~ uq~pppppppt propertiesq~cxsq~ uq~pppppq~fq~gq~fq~¼pq~hxpppq~'lsq~ uq~ppppptâ/** * Link old property names to new property names. * This modifies the map. * @param properties Map keyed by property name, with the * corresponding (String or String[]) value(s) to be set. */ ptlinkOldPropertyNamesq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft8 Set entries = properties.entrySet(); Map toAdd = new HashMap(); Iterator i = entries.iterator(); while( i.hasNext() ) { Map.Entry entry = (Map.Entry)i.next(); if(DEFINITIONS_CONFIG_PARAMETER_NAME.equals(entry.getKey())) toAdd.put( "definitionConfigFiles", entry.getValue()); else if(FACTORY_CLASSNAME_PARAMETER_NAME.equals(entry.getKey())) toAdd.put( "factoryClassname", entry.getValue()); else if(PARSER_DETAILS_PARAMETER_NAME.equals(entry.getKey())) toAdd.put( "parserDebugLevel", entry.getValue()); else if(PARSER_VALIDATE_PARAMETER_NAME.equals(entry.getKey())) toAdd.put( "parserValidate", entry.getValue()); else if(TILES_DETAILS_PARAMETER_NAME.equals(entry.getKey())) toAdd.put( "debugLevel", entry.getValue()); } // end loop if( toAdd.size() > 0 ) properties.putAll( toAdd ); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~'lsq~ uq~pppppt+/** * Get the factory name. */ ptgetFactoryNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft# return factoryName; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqysq~ uq~pppppppt factoryNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~'lsq~ uq~pppppt[/** * Set the factory name. * @param factoryName Name of the factory. */ ptsetFactoryNameq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft/ this.factoryName = factoryName; sq~ uq~ppppq~fq~fxppq~sq~ uq~pppppppq~(q~rxsq~ uq~q~:»q9ppq~–sq~ uq~q? pppsq~ uq~ppppq~–q~–qå6sq~ uq~pppppq~–sq~ uq~ppppsq~ $uq~'q~9Eq~9sq~9qHqu,sq~isq~ uq~sq~bsq~ uq~ppppqyPlugIn cannot * be successfully initialized */ ptreadFactoryConfigq~rxsq~ uq~pppppq~–q~—q~–q~'lpq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~ xq~–tå // Create tiles definitions config object DefinitionsFactoryConfig factoryConfig = new DefinitionsFactoryConfig(); // Get init parameters from web.xml files try { DefinitionsUtil.populateDefinitionsFactoryConfig(factoryConfig, servletConfig); } catch(Exception ex) { ex.printStackTrace(); throw new DefinitionsFactoryException( "Can't populate DefinitionsFactoryConfig class from 'web.xml'.", ex ); } return factoryConfig; sq~ uq~q~pppq~–q~–xq~Ïcq~'csq~bsq~ uq~ppppsq~isq~ uq~qyUsq~bsq~ uq~ppppqyXsq~ uq~ppppppptservletContextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xppq~'Rsq~ uq~pppppt:/** * Call underlying factory init method. */ ptinitq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tä this.config = config; // create factory and initialize it if( factory == null) factory = createFactoryInstance( config.getFactoryClassname()); factory.initFactory(servletContext, createConfigMap(config)); sq~ uq~q~pppq~–q~–xsq~ uq~ppppppptconfigq~rxsq~ uq~pppppq~–q~—q~–q~'lpq~˜xsq~bsq~ uq~ppppsq~isq~ uq~qyusq~bsq~ uq~ppppqyxsq~ uq~ppppppptservletContextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xppq~'Rsq~ uq~ppppptC/** * Set underlying factory configuration. * */ pt setConfigq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tò // create a new factory and initialize it ComponentDefinitionsFactory newFactory = createFactoryInstance( config.getFactoryClassname()); newFactory.initFactory(servletContext, createConfigMap(config)); factory = newFactory; sq~ uq~q~pppq~–q~–xsq~ uq~ppppppptconfigq~rxsq~ uq~pppppq~–q~—q~–q~'lpq~˜xsq~isq~ uq~ppppq~'Rsq~ uq~pppppt;/** * Get underlying factory configuration. */ pt getConfigq~rxsq~ uq~pppppq~–q~—q~–q~'lpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return config; sq~ uq~ppppq~–q~–xsq~bsq~ uq~ppppsq~isq~ uq~qy¥pppq~'Rsq~ uq~pppppt½/** * Create map of configuration attributes from configuration object. * Mapping is done between old names and new names. * @return Map Map of name/value pairs. */ ptcreateConfigMapq~rxsq~ uq~pppppq~–q~—q~–q~¼pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t½ Map map = new HashMap(config.getAttributes()); // Add property attributes using old names map.put(config.DEFINITIONS_CONFIG_PARAMETER_NAME, config.getDefinitionConfigFiles()); map.put(config.TILES_DETAILS_PARAMETER_NAME, Integer.toString(config.getDebugLevel()) ); map.put(config.PARSER_DETAILS_PARAMETER_NAME, Integer.toString(config.getParserDebugLevel()) ); map.put(config.PARSER_VALIDATE_PARAMETER_NAME, new Boolean(config.getParserValidate()).toString() ); if( ! "org.apache.struts.tiles.xmlDefinition.I18nFactorySet".equals(config.getFactoryClassname()) ) map.put(config.FACTORY_CLASSNAME_PARAMETER_NAME, config.getFactoryClassname()); return map; sq~ uq~ppppq~–q~–xsq~ uq~ppppppptconfigq~rxsq~ uq~pppppq~–q~—q~–q~'lpq~˜xquMsq~isq~ uq~sq~bsq~ uq~ppppqy¾sq~ uq~pppppppt servletConfigq~{xsq~ uq~pppppq~~q~q~~q~' pq~€xpppq~&wsq~ uq~pppppt$/** * Create FactoryConfig and initialize it from web.xml. * * @param servletConfig ServletConfig for the module with which * this plug in is associated * @exception DefinitionsFactoryException if this PlugIn cannot * be successfully initialized */ ptreadFactoryConfigq~{xsq~ uq~pppppq~~q~q~~q~'lpq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~ xq~~tå // Create tiles definitions config object DefinitionsFactoryConfig factoryConfig = new DefinitionsFactoryConfig(); // Get init parameters from web.xml files try { DefinitionsUtil.populateDefinitionsFactoryConfig(factoryConfig, servletConfig); } catch(Exception ex) { ex.printStackTrace(); throw new DefinitionsFactoryException( "Can't populate DefinitionsFactoryConfig class from 'web.xml'.", ex ); } return factoryConfig; sq~ uq~q~pppq~~q~~xq~Ð/qI–q~9Èq~9öq~:qI·sq~bsq~ uq~ppppsq~isq~ uq~qy×sq~bsq~ uq~ppppqyÚsq~ uq~ppppppptservletContextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xppq~'Rsq~ uq~pppppt/** * Call underlying factory init method. * @param config DefinitionsFactoryConfig. * @param servletContext Our servlet context. */ ptinitq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tä this.config = config; // create factory and initialize it if( factory == null) factory = createFactoryInstance( config.getFactoryClassname()); factory.initFactory(servletContext, createConfigMap(config)); sq~ uq~q~pppq~~q~~xsq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~'lpq~€xsq~bsq~ uq~ppppsq~isq~ uq~qy÷sq~bsq~ uq~ppppqyúsq~ uq~ppppppptservletContextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xppq~'Rsq~ uq~pppppt­/** * Set underlying factory configuration. * @param config DefinitionsFactoryConfig to use. * @param servletContext Our servlet context. * */ pt setConfigq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tò // create a new factory and initialize it ComponentDefinitionsFactory newFactory = createFactoryInstance( config.getFactoryClassname()); newFactory.initFactory(servletContext, createConfigMap(config)); factory = newFactory; sq~ uq~q~pppq~~q~~xsq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~'lpq~€xsq~isq~ uq~ppppq~'Rsq~ uq~pppppte/** * Get underlying factory configuration. * @return DefinitionsFactoryConfig. */ pt getConfigq~{xsq~ uq~pppppq~~q~q~~q~'lpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t return config; sq~ uq~ppppq~~q~~xsq~bsq~ uq~ppppsq~isq~ uq~qz'pppq~'Rsq~ uq~ppppptø/** * Create map of configuration attributes from configuration object. * Mapping is done between old names and new names. * @param config The DefinitionsFactoryConfig to use. * @return Map Map of name/value pairs. */ ptcreateConfigMapq~{xsq~ uq~pppppq~~q~q~~q~¼pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t Map map = new HashMap(config.getAttributes()); // Add property attributes using old names map.put(DefinitionsFactoryConfig.DEFINITIONS_CONFIG_PARAMETER_NAME, config.getDefinitionConfigFiles()); map.put(DefinitionsFactoryConfig.TILES_DETAILS_PARAMETER_NAME, Integer.toString(config.getDebugLevel()) ); map.put(DefinitionsFactoryConfig.PARSER_DETAILS_PARAMETER_NAME, Integer.toString(config.getParserDebugLevel()) ); map.put(DefinitionsFactoryConfig.PARSER_VALIDATE_PARAMETER_NAME, new Boolean(config.getParserValidate()).toString() ); if( ! "org.apache.struts.tiles.xmlDefinition.I18nFactorySet".equals(config.getFactoryClassname()) ) map.put(DefinitionsFactoryConfig.FACTORY_CLASSNAME_PARAMETER_NAME, config.getFactoryClassname()); return map; sq~ uq~ppppq~~q~~xsq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~'lpq~€xqu†sq~isq~ uq~sq~bsq~ uq~ppppqz@sq~ uq~pppppppt servletConfigq~cxsq~ uq~pppppq~fq~gq~fq~' pq~hxpppq~&wsq~ uq~pppppt$/** * Create FactoryConfig and initialize it from web.xml. * * @param servletConfig ServletConfig for the module with which * this plug in is associated * @exception DefinitionsFactoryException if this PlugIn cannot * be successfully initialized */ ptreadFactoryConfigq~cxsq~ uq~pppppq~fq~gq~fq~'lpq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~!Wxq~ftå // Create tiles definitions config object DefinitionsFactoryConfig factoryConfig = new DefinitionsFactoryConfig(); // Get init parameters from web.xml files try { DefinitionsUtil.populateDefinitionsFactoryConfig(factoryConfig, servletConfig); } catch(Exception ex) { ex.printStackTrace(); throw new DefinitionsFactoryException( "Can't populate DefinitionsFactoryConfig class from 'web.xml'.", ex ); } return factoryConfig; sq~ uq~q~pppq~fq~fxq~ÑqKq~:Kq~:yq~:•qKXsq~bsq~ uq~ppppsq~isq~ uq~qzYsq~bsq~ uq~ppppqz\sq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxppq~'Rsq~ uq~pppppt/** * Call underlying factory init method. * @param config DefinitionsFactoryConfig. * @param servletContext Our servlet context. */ ptinitq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftä this.config = config; // create factory and initialize it if( factory == null) factory = createFactoryInstance( config.getFactoryClassname()); factory.initFactory(servletContext, createConfigMap(config)); sq~ uq~q~pppq~fq~fxsq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~'lpq~hxsq~bsq~ uq~ppppsq~isq~ uq~qzysq~bsq~ uq~ppppqz|sq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxppq~'Rsq~ uq~pppppt­/** * Set underlying factory configuration. * @param config DefinitionsFactoryConfig to use. * @param servletContext Our servlet context. * */ pt setConfigq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftò // create a new factory and initialize it ComponentDefinitionsFactory newFactory = createFactoryInstance( config.getFactoryClassname()); newFactory.initFactory(servletContext, createConfigMap(config)); factory = newFactory; sq~ uq~q~pppq~fq~fxsq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~'lpq~hxsq~isq~ uq~ppppq~'Rsq~ uq~pppppte/** * Get underlying factory configuration. * @return DefinitionsFactoryConfig. */ pt getConfigq~cxsq~ uq~pppppq~fq~gq~fq~'lpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft return config; sq~ uq~ppppq~fq~fxsq~bsq~ uq~ppppsq~isq~ uq~qz©pppq~'Rsq~ uq~ppppptø/** * Create map of configuration attributes from configuration object. * Mapping is done between old names and new names. * @param config The DefinitionsFactoryConfig to use. * @return Map Map of name/value pairs. */ ptcreateConfigMapq~cxsq~ uq~pppppq~fq~gq~fq~¼pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft Map map = new HashMap(config.getAttributes()); // Add property attributes using old names map.put(DefinitionsFactoryConfig.DEFINITIONS_CONFIG_PARAMETER_NAME, config.getDefinitionConfigFiles()); map.put(DefinitionsFactoryConfig.TILES_DETAILS_PARAMETER_NAME, Integer.toString(config.getDebugLevel()) ); map.put(DefinitionsFactoryConfig.PARSER_DETAILS_PARAMETER_NAME, Integer.toString(config.getParserDebugLevel()) ); map.put(DefinitionsFactoryConfig.PARSER_VALIDATE_PARAMETER_NAME, new Boolean(config.getParserValidate()).toString() ); if( ! "org.apache.struts.tiles.xmlDefinition.I18nFactorySet".equals(config.getFactoryClassname()) ) map.put(DefinitionsFactoryConfig.FACTORY_CLASSNAME_PARAMETER_NAME, config.getFactoryClassname()); return map; sq~ uq~ppppq~fq~fxsq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~'lpq~hxpppq~¢xq~–ppxpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~'bxppppq~–q~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppqzÆsq~ uq~ppppppptfactoryq~rxsq~ uq~pppppq~–q~—q~–q~–pq~˜xpppq~'Rsq~ uq~ppppptT/** * Constructor. * Create new wrapper for specified factory. */ pt"ComponentDefinitionsFactoryWrapperq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t this.factory = factory; sq~ uq~ppppq~–q~–xsq~esq~ uq~ppppq~'Rsq~ uq~pppppt»/** * Constructor. * Create new wrapper. * The config object passed to init method should reference a factory implementing * ComponentDefinitionsFactory. */ pqzÔq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqzísq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqzísq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~°pq~˜xsq~bsq~ uq~ppppqzísq~ uq~ppppppptservletContextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xpq~'Rsq~ uq~pppppt//** * Get requested definition. */ pt getDefinitionq~rxsq~ uq~pppppq~–q~—q~–q~¾pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tD return factory.getDefinition(name, request, servletContext); sq~ uq~q~"q~ppq~–q~–xqyXsq~isq~ uq~ppppq~'Rsq~ uq~ppppptJ/** * Do nothing because old life cycle has no equivalent. */ ptdestroyq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t factory = null; sq~ uq~ppppq~–q~–xqyxqy•sq~isq~ uq~ppppq~'Rsq~ uq~pppppt(/** * Get internal factory */ ptgetInternalFactoryq~rxsq~ uq~pppppq~–q~—q~–q~–pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return factory; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq{5sq~ uq~pppppppt classnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~'Rsq~ uq~pppppth/** * Create Definition factory from provided classname which must implements ComponentDefinitionsFactory. * Factory class must extends TilesDefinitionsFactory. * @param classname Class name of the factory to create. * @return newly created factory. * @throws DefinitionsFactoryException If an error occur while initializing factory */ ptcreateFactoryInstanceq~rxsq~ uq~pppppq~–q~—q~–q~–pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–tž try { Class factoryClass = Class.forName(classname); Object factory = factoryClass.newInstance(); return (ComponentDefinitionsFactory)factory; } catch( ClassCastException ex ) { // Bad classname throw new DefinitionsFactoryException( "Error - createDefinitionsFactory : Factory class '" + classname +" must implements 'TilesDefinitionsFactory'.", ex ); } catch( ClassNotFoundException ex ) { // Bad classname throw new DefinitionsFactoryException( "Error - createDefinitionsFactory : Bad class name '" + classname +"'.", ex ); } catch( InstantiationException ex ) { // Bad constructor or error throw new DefinitionsFactoryException( ex ); } catch( IllegalAccessException ex ) { // throw new DefinitionsFactoryException( ex ); } sq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq~'Rsq~ uq~ppppptS/** * ToString method. * Call toString on underlying factory. */ pttoStringq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t/ return getInternalFactory().toString(); sq~ uq~ppppq~–q~–xqy¨sq~esq~ uq~sq~bsq~ uq~ppppq{]sq~ uq~ppppppptfactoryq~{xsq~ uq~pppppq~~q~q~~q~–pq~€xpppq~'Rsq~ uq~pppppt/** * Constructor. * Create new wrapper for specified factory. * @param factory The factory to create a wrapper for. */ pqzÔq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t this.factory = factory; sq~ uq~ppppq~~q~~xsq~esq~ uq~ppppq~'Rsq~ uq~ppppptÃ/** * Constructor. * Create new wrapper. * The config object passed to init method should reference a factory implementing * {@link ComponentDefinitionsFactory}. */ pqzÔq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq{ƒsq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq{ƒsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~°pq~€xsq~bsq~ uq~ppppq{ƒsq~ uq~ppppppptservletContextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xpq~'Rsq~ uq~ppppptæ/** * Get requested definition. * @param name Name of the definition. * @param request The request we are processing. * @param servletContext Our servlet context. * @return ComponentDefition */ pt getDefinitionq~{xsq~ uq~pppppq~~q~q~~q~¾pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tD return factory.getDefinition(name, request, servletContext); sq~ uq~q~"q~ppq~~q~~xqyÚsq~isq~ uq~ppppq~'Rsq~ uq~ppppptJ/** * Do nothing because old life cycle has no equivalent. */ ptdestroyq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t factory = null; sq~ uq~ppppq~~q~~xqyúqzsq~isq~ uq~ppppq~'Rsq~ uq~pppppt`/** * Get internal factory. * @return The internal ComponentDefitionsFactory. */ ptgetInternalFactoryq~{xsq~ uq~pppppq~~q~q~~q~–pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t return factory; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq{Ësq~ uq~pppppppt classnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~'Rsq~ uq~ppppptq/** * Create Definition factory from provided classname which must implement {@link ComponentDefinitionsFactory}. * Factory class must extend {@link DefinitionsFactory}. * @param classname Class name of the factory to create. * @return newly created factory. * @throws DefinitionsFactoryException If an error occur while initializing factory */ ptcreateFactoryInstanceq~{xsq~ uq~pppppq~~q~q~~q~–pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t¥ try { Class factoryClass = TilesUtil.applicationClass(classname); Object factory = factoryClass.newInstance(); return (ComponentDefinitionsFactory)factory; } catch( ClassCastException ex ) { // Bad classname throw new DefinitionsFactoryException( "Error - createDefinitionsFactory : Factory class '" + classname +" must implement 'DefinitionsFactory'.", ex ); } catch( ClassNotFoundException ex ) { // Bad classname throw new DefinitionsFactoryException( "Error - createDefinitionsFactory : Bad class name '" + classname +"'.", ex ); } catch( InstantiationException ex ) { // Bad constructor or error throw new DefinitionsFactoryException( ex ); } catch( IllegalAccessException ex ) { // throw new DefinitionsFactoryException( ex ); } sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~'Rsq~ uq~ppppptŠ/** * Return String representation. * Calls toString() on underlying factory. * @return String representation. */ pttoStringq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t/ return getInternalFactory().toString(); sq~ uq~ppppq~~q~~xqz*sq~esq~ uq~sq~bsq~ uq~ppppq{ósq~ uq~ppppppptfactoryq~cxsq~ uq~pppppq~fq~gq~fq~–pq~hxpppq~'Rsq~ uq~pppppt/** * Constructor. * Create new wrapper for specified factory. * @param factory The factory to create a wrapper for. */ pqzÔq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft this.factory = factory; sq~ uq~ppppq~fq~fxsq~esq~ uq~ppppq~'Rsq~ uq~ppppptÃ/** * Constructor. * Create new wrapper. * The config object passed to init method should reference a factory implementing * {@link ComponentDefinitionsFactory}. */ pqzÔq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq|sq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq|sq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~°pq~hxsq~bsq~ uq~ppppq|sq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxpq~'Rsq~ uq~ppppptæ/** * Get requested definition. * @param name Name of the definition. * @param request The request we are processing. * @param servletContext Our servlet context. * @return ComponentDefition */ pt getDefinitionq~cxsq~ uq~pppppq~fq~gq~fq~¾pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftD return factory.getDefinition(name, request, servletContext); sq~ uq~q~"q~ppq~fq~fxqz\sq~isq~ uq~ppppq~'Rsq~ uq~ppppptJ/** * Do nothing because old life cycle has no equivalent. */ ptdestroyq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft factory = null; sq~ uq~ppppq~fq~fxqz|qz™sq~isq~ uq~ppppq~'Rsq~ uq~pppppt`/** * Get internal factory. * @return The internal ComponentDefitionsFactory. */ ptgetInternalFactoryq~cxsq~ uq~pppppq~fq~gq~fq~–pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft return factory; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq|asq~ uq~pppppppt classnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~'Rsq~ uq~ppppptq/** * Create Definition factory from provided classname which must implement {@link ComponentDefinitionsFactory}. * Factory class must extend {@link DefinitionsFactory}. * @param classname Class name of the factory to create. * @return newly created factory. * @throws DefinitionsFactoryException If an error occur while initializing factory */ ptcreateFactoryInstanceq~cxsq~ uq~pppppq~fq~gq~fq~–pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft¥ try { Class factoryClass = TilesUtil.applicationClass(classname); Object factory = factoryClass.newInstance(); return (ComponentDefinitionsFactory)factory; } catch( ClassCastException ex ) { // Bad classname throw new DefinitionsFactoryException( "Error - createDefinitionsFactory : Factory class '" + classname +" must implement 'DefinitionsFactory'.", ex ); } catch( ClassNotFoundException ex ) { // Bad classname throw new DefinitionsFactoryException( "Error - createDefinitionsFactory : Bad class name '" + classname +"'.", ex ); } catch( InstantiationException ex ) { // Bad constructor or error throw new DefinitionsFactoryException( ex ); } catch( IllegalAccessException ex ) { // throw new DefinitionsFactoryException( ex ); } sq~ uq~q~pppq~fq~fxsq~isq~ uq~ppppq~'Rsq~ uq~ppppptŠ/** * Return String representation. * Calls toString() on underlying factory. * @return String representation. */ pttoStringq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft/ return getInternalFactory().toString(); sq~ uq~ppppq~fq~fxqz¬ppppq8ÿsq~ uq~pppppppqzÔq~rxsq~ uq~q~'LqLoppq~–sq~ uq~q9wpppsq~ uq~q~9pppq~–q~–q9sq~ uq~pppppq~–sq~ uq~ppppsq~ uq~ppppq~¢xq~–ppxxqåsq~Csq~ uq~ppppq~'sq~ uq~ppppsq~#q~9xsq~Csq~ uq~ppppq~'sq~ uq~ppppsq~#q~?xppq~sq~ uq~pppppt K/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/tiles/DefinitionsUtil.java,v 1.11 2003/01/12 20:31:20 dmkarr Exp $ * $Revision: 1.11 $ * $Date: 2003/01/12 20:31:20 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Utilities class for definitions factory. * Also define userDebugLevel property (to be moved from this class ?). * (to do). * @deprecated Use {@link TilesUtil#createDefinitionsFactory(ServletContext, DefinitionsFactoryConfig)} */ ptDefinitionsUtil.javaq~fxsq~ uq~ppppsq~ uq~q~&wpppq~fxsq~ uq~ppppsq~#q~' xq~8 ppppppq~¥sq~ uq~q~ˤpppsq~ uq~ppppq~¥q~¥sq~Qsq~ uq~ppppq~³sq~ uq~ppppppptServletConfig.javaq~¥xsq~ uq~ppppsq~ uq~q~' pppq~¥xsq~ uq~pppppq~¥sq~ uq~ppppsq~ uq~q~'sq~bsq~ uq~ppppsq~isq~ uq~sq~bsq~ uq~ppppq|Åsq~ uq~ppppppptservletContextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Öpq~§xq|Âppq~&wsq~ uq~ppppptÈ/** * Create Definition factory. * Convenience method. ServletConfig is wrapped into a Map allowing retrieval * of init parameters. Factory classname is also retrieved, as well as debug level. * Finally, approriate createDefinitionsFactory() is called. * @param servletContext Servlet Context passed to newly created factory. * @param servletConfig Servlet config containing parameters to be passed to newly created factory. */ ptcreateDefinitionsFactoryq~¢xsq~ uq~pppppq~¥q~¦q~¥q~–pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥tn // Check if already exist in context ComponentDefinitionsFactory factory = getDefinitionsFactory( servletContext); if( factory != null ) return factory; // Doesn' exist, create it and save it in context // Ensure that only one is created by synchronizing section. This imply a // second checking. // Todo : check that servletContext is unique for this servlet ! synchronized (servletContext) { // Check if someone has created it while we had wait for synchonized section factory = getDefinitionsFactory( servletContext); if( factory != null ) return factory; // Now really create it initUserDebugLevel(servletConfig); factory = new ReloadableDefinitionsFactory(servletContext, servletConfig); ; setDefinitionsFactory(factory, servletContext ); return factory; } // synchronized sq~ uq~q~pppq~¥q~¥xsq~ uq~pppppppt servletConfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~' pq~§xq~6~qPßsq~bsq~ uq~ppppsq~isq~ uq~q|ãpppq~&wsq~ uq~pppppt€/** * Init user debug level. * * @param servletConfig * @deprecated Use commons-logging package instead. */ ptinitUserDebugLevelq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t„ // Set user debug level try { String str = servletConfig.getInitParameter(DEFINITIONS_CONFIG_USER_DEBUG_LEVEL); if( str == null ) { // Check if we use old keyword str = servletConfig.getInitParameter(INSTANCES_CONFIG_USER_DEBUG_LEVEL); } if( str != null ) { int level = Integer.parseInt( str ); setUserDebugLevel( level ); if( userDebugLevel > 1 ) log.debug( "Component Definitions debug level = " + userDebugLevel ); } } catch(Exception ex) { // silently fail log.debug( "Set user level fail" ); ex.printStackTrace(); } sq~ uq~ppppq~–q~–xsq~ uq~pppppppt servletConfigq~rxsq~ uq~pppppq~–q~—q~–q~' pq~˜xqGÐqGñqu4qy?sq~bsq~ uq~ppppsq~esq~ uq~q|üpppsq~zsq~ uq~q|ÿsq~esq~ uq~sq~bsq~ uq~ppppq}sq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~' pq~€xpppq}sq~ uq~pppppt/** * Inner class. * Wrapper for ServletContext init parameters. * Object of this class is an hashmap containing parameters and values * defined in the servlet config file (web.xml). */ /** * Constructor. */ // end inner class ptServletPropertiesMapq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Êxq~~t~ // This implementation is very simple. // It is possible to avoid creation of a new structure, but this need // imply writing all Map interface. Enumeration enum = config.getInitParameterNames(); while( enum.hasMoreElements() ) { String key = (String)enum.nextElement(); put( key, config.getInitParameter( key ) ); } sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq}sq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~' pq~hxpppq}sq~ uq~pppppt/** * Inner class. * Wrapper for ServletContext init parameters. * Object of this class is an hashmap containing parameters and values * defined in the servlet config file (web.xml). */ /** * Constructor. */ // end inner class pq}q~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~Òxq~ft~ // This implementation is very simple. // It is possible to avoid creation of a new structure, but this need // imply writing all Map interface. Enumeration enum = config.getInitParameterNames(); while( enum.hasMoreElements() ) { String key = (String)enum.nextElement(); put( key, config.getInitParameter( key ) ); } sq~ uq~ppppq~fq~fxpq~&wsq~ uq~pppppppq}q~rxsq~ uq~ppppq~–sq~ uq~ppppsq~ uq~q~pppq~–q~rpsq~ uq~pppppsq~#sq~ uq~ppppsq~ uq~ppppq“xq~–ppxsq~ uq~pppppt/** * Inner class. * Wrapper for ServletContext init parameters. * Object of this class is an hashmap containing parameters and values * defined in the servlet config file (web.xml). */ /** * Constructor. */ // end inner class pq}q~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q“xq~–t~ // This implementation is very simple. // It is possible to avoid creation of a new structure, but this need // imply writing all Map interface. Enumeration enum = config.getInitParameterNames(); while( enum.hasMoreElements() ) { String key = (String)enum.nextElement(); put( key, config.getInitParameter( key ) ); } sq~ uq~ppppq~–q~–xsq~ uq~ppppppptconfigq~rxsq~ uq~pppppq~–q~—q~–q~' pq~˜xqQRqP÷sq~bsq~ uq~ppppsq~isq~ uq~q}Tpppq~&wsq~ uq~pppppt€/** * Init user debug level. * * @param servletConfig * @deprecated Use commons-logging package instead. */ ptinitUserDebugLevelq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t„ // Set user debug level try { String str = servletConfig.getInitParameter(DEFINITIONS_CONFIG_USER_DEBUG_LEVEL); if( str == null ) { // Check if we use old keyword str = servletConfig.getInitParameter(INSTANCES_CONFIG_USER_DEBUG_LEVEL); } if( str != null ) { int level = Integer.parseInt( str ); setUserDebugLevel( level ); if( userDebugLevel > 1 ) log.debug( "Component Definitions debug level = " + userDebugLevel ); } } catch(Exception ex) { // silently fail log.debug( "Set user level fail" ); ex.printStackTrace(); } sq~ uq~ppppq~~q~~xsq~ uq~pppppppt servletConfigq~{xsq~ uq~pppppq~~q~q~~q~' pq~€xqHØqHùquUqyÁq}qRPqQsq~bsq~ uq~ppppsq~isq~ uq~q}mpppq~&wsq~ uq~pppppt€/** * Init user debug level. * * @param servletConfig * @deprecated Use commons-logging package instead. */ ptinitUserDebugLevelq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft„ // Set user debug level try { String str = servletConfig.getInitParameter(DEFINITIONS_CONFIG_USER_DEBUG_LEVEL); if( str == null ) { // Check if we use old keyword str = servletConfig.getInitParameter(INSTANCES_CONFIG_USER_DEBUG_LEVEL); } if( str != null ) { int level = Integer.parseInt( str ); setUserDebugLevel( level ); if( userDebugLevel > 1 ) log.debug( "Component Definitions debug level = " + userDebugLevel ); } } catch(Exception ex) { // silently fail log.debug( "Set user level fail" ); ex.printStackTrace(); } sq~ uq~ppppq~fq~fxsq~ uq~pppppppt servletConfigq~cxsq~ uq~pppppq~fq~gq~fq~' pq~hxqJYqJzquŽqzCq} qSNqQ%pq~»xq~¥ppxpq~§xpppq~&wsq~ uq~ppppptÎ/** * Create Definition factory. * If * Create MapperCollection, and put it in appropriate servlet context. * This method is used to initialize Component Instances. It is usually * called by the initialization servlet. * @param servletContext * @return newly created MapperCollection. * @throws DefinitionsFactoryException If an error occur while initializing factory * @deprecated Use createDefinitionFactory instead. */ ptinitUserDebugLevelq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥t– // Set user debug level try { String str = servletConfig.getInitParameter(DEFINITIONS_CONFIG_USER_DEBUG_LEVEL); if( str == null ) { // Check if we use old keyword str = servletConfig.getInitParameter(INSTANCES_CONFIG_USER_DEBUG_LEVEL); } if( str != null ) { int level = Integer.parseInt( str ); setUserDebugLevel( level ); if( userDebugLevel > 1 ) System.out.println( "Component Definitions debug level = " + userDebugLevel ); } } catch(Exception ex) { // silently fail System.out.println( "Set user level fail" ); ex.printStackTrace(); } sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq}”sq~ uq~ppppppptservletContextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Öpq~§xsq~bsq~ uq~ppppq}”sq~ uq~pppppppt propertiesq~¢xsq~ uq~pppppq~¥q~¦q~¥q~¼pq~§xsq~bsq~ uq~ppppq}”sq~ uq~pppppppt classnameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpq~&wsq~ uq~pppppt«/** * Create Definition factory. * If a factory class name is provided, a factory of this class is created. Otherwise, * default factory is created. * Factory must have a constructor taking ServletContext and Map as parameter. * @param classname Class name of the factory to create. * @param servletContext Servlet Context passed to newly created factory. * @param properties Map of name/property passed to newly created factory. * @return newly created factory. * @throws DefinitionsFactoryException If an error occur while initializing factory * @deprecated Use createDefinitionsFactory(ServletContext servletContext, Map properties) */ ptcreateDefinitionsFactoryq~¢xsq~ uq~pppppq~¥q~¦q~¥q~–pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥t  properties.put( ReloadableDefinitionsFactory.DEFINITIONS_FACTORY_CLASSNAME, classname ); return createDefinitionsFactory(servletContext, properties); sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq}½sq~ uq~ppppppptservletContextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Öpq~§xsq~bsq~ uq~ppppq}½sq~ uq~pppppppt propertiesq~¢xsq~ uq~pppppq~¥q~¦q~¥q~¼pq~§xppq~&wsq~ uq~pppppt/** * Create default Definition factory. * Factory must have a constructor taking ServletContext and Map as parameter. * @param servletContext Servlet Context passed to newly created factory. * @param properties Map of name/property passed to newly created factory. * @return newly created factory. * @throws DefinitionsFactoryException If an error occur while initializing factory */ ptcreateDefinitionsFactoryq~¢xsq~ uq~pppppq~¥q~¦q~¥q~–pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥tÅ ComponentDefinitionsFactory factory = new ReloadableDefinitionsFactory(servletContext, properties); ; DefinitionsUtil.setDefinitionsFactory(factory, servletContext ); return factory; sq~ uq~q~pppq~¥q~¥xq|Åsq~isq~ uq~sq~bsq~ uq~ppppq}Þsq~ uq~ppppppptfactoryq~¢xsq~ uq~pppppq~¥q~¦q~¥q~–pq~§xsq~bsq~ uq~ppppq}Þsq~ uq~ppppppptservletContextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Öpq~§xppq~&wsq~ uq~pppppt³/** * Set definition factory in appropriate servlet context. * @param factory Factory to store. * @param servletContext Servlet context that will hold factory. */ ptsetDefinitionsFactoryq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~›xq~¥tB servletContext.setAttribute(DEFINITIONS_FACTORY, factory); sq~ uq~ppppq~¥q~¥xqOSqO|sq~isq~ uq~sq~bsq~ uq~ppppq}ÿsq~ uq~ppppppptservletContextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Öpq~§xpppq~&wsq~ uq~pppppt/** * Get instances factory from appropriate servlet context. * @return Definitions factory or null if not found. */ ptgetDefinitionsFactoryq~¢xsq~ uq~pppppq~¥q~¦q~¥q~–pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥t] return (ComponentDefinitionsFactory)servletContext.getAttribute(DEFINITIONS_FACTORY); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~sq~ uq~pppppppt pageContextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xpppq~&wsq~ uq~ppppptä/** * Get instances factory from appropriate servlet context. * @return Definitions factory or null if not found. * @deprecated since 020207, use getDefinitionsFactory(pageContext.getServletContext()) instead */ ptgetDefinitionsFactoryq~¢xsq~ uq~pppppq~¥q~¦q~¥q~–pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥tG return getDefinitionsFactory( pageContext.getServletContext()); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~1sq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~°pq~§xpppq~&wsq~ uq~pppppt|/** * Get Definition stored in jsp context by an action. * @return ComponentDefinition or null if not found. */ ptgetActionDefinitionq~¢xsq~ uq~pppppq~¥q~¦q~¥q~¾pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥tL return (ComponentDefinition)request.getAttribute(ACTION_DEFINITION); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~Jsq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~°pq~§xsq~bsq~ uq~ppppq~Jsq~ uq~pppppppt definitionq~¢xsq~ uq~pppppq~¥q~¦q~¥q~¾pq~§xppq~&wsq~ uq~ppppptˆ/** * Store definition in jsp context. * Mainly used by Struts to pass a definition defined in an Action to the forward. */ ptsetActionDefinitionq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥t< request.setAttribute(ACTION_DEFINITION, definition); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq~ksq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~°pq~§xsq~bsq~ uq~ppppq~ksq~ uq~pppppppt definitionq~¢xsq~ uq~pppppq~¥q~¦q~¥q~¾pq~§xppq~&wsq~ uq~pppppt/** * Remove Definition stored in jsp context. * Mainly used by Struts to pass a definition defined in an Action to the forward. */ ptremoveActionDefinitionq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥t3 request.removeAttribute(ACTION_DEFINITION); sq~ uq~ppppq~¥q~¥xsq~(sq~ uq~ppppq~&wsq~ uq~ppppptc/** Commons Logging instance. */ /** Commons Logging instance. */ /** Commons Logging instance. */ ptlogq~rxsq~ uq~pppppq~–q~—q~–q~9pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~ xpppt) LogFactory.getLog(DefinitionsUtil.class)q~–q~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~›sq~ uq~ppppppptlevelq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xpppq~&wsq~ uq~ppppptY/** * Set user debug level. This property control level of errors output. */ ptsetUserDebugLevelq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t# userDebugLevel = level; sq~ uq~ppppq~–q~–xq|æqG{qG¤qGÅqGæqHqH0sq~isq~ uq~sq~bsq~ uq~ppppq~´sq~ uq~ppppppptfactoryq~rxsq~ uq~pppppq~–q~—q~–q~–pq~˜xsq~bsq~ uq~ppppq~´sq~ uq~ppppppptservletContextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xppq~&wsq~ uq~ppppptù/** * Set definition factory in appropriate servlet context. * @param factory Factory to store. * @param servletContext Servlet context that will hold factory. * @deprecated since 20020708. Replaced by makeFactoryAccessible() */ ptsetDefinitionsFactoryq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~ xq~–tB servletContext.setAttribute(DEFINITIONS_FACTORY, factory); sq~ uq~ppppq~–q~–xqOqOÆqHIqHesq~isq~ uq~sq~bsq~ uq~ppppq~Õsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~°pq~˜xpppq~&wsq~ uq~pppppt|/** * Get Definition stored in jsp context by an action. * @return ComponentDefinition or null if not found. */ ptgetActionDefinitionq~rxsq~ uq~pppppq~–q~—q~–q~¾pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–tL return (ComponentDefinition)request.getAttribute(ACTION_DEFINITION); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq~îsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~°pq~˜xsq~bsq~ uq~ppppq~îsq~ uq~pppppppt definitionq~rxsq~ uq~pppppq~–q~—q~–q~¾pq~˜xppq~&wsq~ uq~ppppptˆ/** * Store definition in jsp context. * Mainly used by Struts to pass a definition defined in an Action to the forward. */ ptsetActionDefinitionq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t< request.setAttribute(ACTION_DEFINITION, definition); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~°pq~˜xsq~bsq~ uq~ppppqsq~ uq~pppppppt definitionq~rxsq~ uq~pppppq~–q~—q~–q~¾pq~˜xppq~&wsq~ uq~pppppt/** * Remove Definition stored in jsp context. * Mainly used by Struts to pass a definition defined in an Action to the forward. */ ptremoveActionDefinitionq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t3 request.removeAttribute(ACTION_DEFINITION); sq~ uq~ppppq~–q~–xqu)qy. * *//** *

      An Action that dispatches to a Tiles Definition * that is named by the request parameter whose name is specified * by the parameter property of the corresponding * ActionMapping. * This action is usefull in following situations : *

    • *
        To associate an Url to a definition
      *
        To use Struts <html:link> tag on a definition
      *
    • *

      To configure the use of this action in your * struts-config.xml file, create an entry like this:

      * * * <action path="/saveSubscription" * type="org.apache.struts.tiles.actions.DefinitionDispatcherAction" * parameter="def"/> * <forward name="success" path="anything" //> * <forward name="error" path="path.to.error.page" //> * * *

      which will use the value of the request parameter named "def" * to pick the appropriate definition name. *

      The value for success doesn't matter. The forward will forward to * appropriate definition. *

      The value for error should denote a valid jsp path or definition name. * * @author Niall Pemberton * @author Craig R. McClanahan * @author Cedric Dumoulin * @version $Revision: 1.6 $ $Date: 2003/02/04 02:23:08 $ */ptDefinitionDispatcherAction.javaq~fxsq~ uq~ppppsq~ uq~q~pppsq~ uq~ppppq~¥q~¥sq~Qsq~ uq~ppppq~Tsq~ uq~pppppppt Reader.javaq~¥xsq~ uq~ppppsq~ uq~qHpppq~¥xsq~ uq~pppppq~¥sq~ uq~ppppsq~ uq~ppppq~»xq~¥ppxsq~)sq~ uq~ppppq~& sq~ uq~ppppq~rsq~ uq~ppppsq~ uq~ppppsq~Bddpxq~kq~&pppq~ sq~ uq~pppp. * *//** * The MultipartIterator class is responsible for reading the * input data of a multipart request and splitting it up into * input elements, wrapped inside of a * {@link org.apache.struts.upload.MultipartElement MultipartElement} * for easy definition. To use this class, create a new instance * of MultipartIterator passing it a HttpServletRequest in the * constructor. Then use the {@link #getNextElement() getNextElement} * method until it returns null, then you're finished. Example:
      *

       *      MultipartIterator iterator = new MultipartIterator(request);
       *      MultipartElement element;
       *
       *      while ((element = iterator.getNextElement()) != null) {
       *           //do something with element
       *      }
       * 
      * * @see org.apache.struts.upload.MultipartElement * @author Mike Schachter */ptMultipartIterator.javaq~fxsq~ uq~ppppsq~ uq~q~øLpppq~fxsq~ uq~ppppsq~#q~%èxqÐq~%âppppppq~$sq~ uq~q€žpppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~Tsq~ uq~ppppppptByteArrayOutputStream.javaq~$xsq~ uq~ppppsq~ uq~q~%èpppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxxsq~Csq~ uq~ppppq~%Ísq~ uq~ppppsq~#q~ýxpppq~äÛsq~ uq~pppppt O/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/upload/DiskFile.java,v 1.4 2002/12/08 07:12:16 rleland Exp $ * $Revision: 1.4 $ * $Date: 2002/12/08 07:12:16 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * */pt DiskFile.javaq~fxsq~ uq~ppppsq~ uq~q~–pppq~fxsq~ uq~ppppsq~#q~%Âxppq~$sq~ uq~q€²pppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~Tsq~ uq~ppppppptFileInputStream.javaq~$xsq~ uq~ppppsq~ uq~q~%Âpppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxxsq~Csq~ uq~ppppq~%¹sq~ uq~ppppsq~#q~kxsq~Csq~ uq~ppppq~%¹sq~ uq~ppppsq~#q~Wxsq~Csq~ uq~ppppq~%¹sq~ uq~ppppsq~#q~%”xsq~Csq~ uq~ppppq~%¹sq~ uq~ppppsq~#q~ Šxq~28ppq~![sq~ uq~pppppt Š/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/tiles/xmlDefinition/XmlParser.java,v 1.10 2003/02/27 19:19:42 cedric Exp $ * $Revision: 1.10 $ * $Date: 2003/02/27 19:19:42 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Parse an XML definitions file. */ ptXmlParser.javaq~fxsq~ uq~ppppsq~ uq~qW·pppq~fxsq~ uq~ppppsq~#q~%®xq€h©ppppppq~$sq~ uq~q€”pppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~Tsq~ uq~ppppppptBufferedInputStream.javaq~$xsq~ uq~ppppsq~ uq~q~%®pppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxxq€Tq~%¢q~*sq~Csq~ uq~ppppq~%¥sq~ uq~ppppsq~#q~%”xqlhsq~Csq~ uq~ppppq~%¥sq~ uq~ppppsq~#q~¼xsq~Csq~ uq~ppppq~%¥sq~ uq~ppppsq~#q~Œxsq~Csq~ uq~ppppq~%¥sq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq~%¥sq~ uq~ppppsq~#q~–xsq~Csq~ uq~ppppq~%¥sq~ uq~ppppsq~#q~-xsq~Csq~ uq~ppppq~%¥sq~ uq~ppppsq~#q~%9xppq~êsq~ uq~pppppt ?/* * $Id: IncludeTag.java,v 1.19 2002/11/29 19:54:22 dgraham Exp $ * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * * [Additional notices, if required by prior licensing conditions] * *//** * Define the contents of a specified intra-application request as a * page scope attribute of type java.lang.String. If the * current request is part of a session, the session identifier will be * included in the generated request, so it will be part of the same * session. *

      * FIXME: In a servlet 2.3 environment, we can use a * wrapped response passed to RequestDispatcher.include(). * * @author Craig R. McClanahan * @version $Revision: 1.19 $ $Date: 2002/11/29 19:54:22 $ */ ptIncludeTag.javaq~fxsq~ uq~ppppsq~ uq~q~”…pppq~fxsq~ uq~ppppsq~#q~%šxpppq~$sq~ uq~qlLpppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~%—sq~ uq~ppppppptHttpURLConnection.javaq~$xsq~ uq~ppppsq~ uq~q~%špppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxql`qlŒq~* sq~Qsq~ uq~ppppq~%—sq~ uq~ppppppptURL.javaq~$xsq~ uq~ppppsq~ uq~q~%”pppq~$xq‚Xqlrqlžql¼ppppq~Çsq~ uq~ppppppptnetq~=xsq~ uq~ppppql?sq~ uq~q~„zpppq~$ppxsq~ uq~pppppq~‡ptURLq~=xsq~ uq~ sq~Csq~ uq~ppppq~bsq~ uq~ppppsq~#q~%”xq‚qôqp[pppppppq~$sq~ uq~qlBpppsq~ uq~ppppq~$q~$q‚hsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~q~%{sq~bsq~ uq~ppppsq~isq~ uq~q‚Žpppq~%9sq~ uq~ppppptQ/** * Compute the printable representation of a URL, leaving off the * scheme/host/port part if no host is specified. This will typically * be the case for URLs that were originally created from relative * or context-relative URIs. * * @param url URL to render in a printable representation */ pt printableURLq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxq~$t‡ if (url.getHost() != null) return (url.toString()); String file = url.getFile(); String ref = url.getRef(); if (ref == null) return (file); else { StringBuffer sb = new StringBuffer(file); sb.append('#'); sb.append(ref); return (sb.toString()); } sq~ uq~ppppq~$q~$xsq~ uq~pppppppturlq~=xsq~ uq~pppppq~$q~yq~$q~%”pq~$xqmqm0qmIsq~bsq~ uq~ppppsq~isq~ uq~q‚§pppq~%9sq~ uq~ppppptQ/** * Compute the printable representation of a URL, leaving off the * scheme/host/port part if no host is specified. This will typically * be the case for URLs that were originally created from relative * or context-relative URIs. * * @param url URL to render in a printable representation */ pt printableURLq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥t‡ if (url.getHost() != null) return (url.toString()); String file = url.getFile(); String ref = url.getRef(); if (ref == null) return (file); else { StringBuffer sb = new StringBuffer(file); sb.append('#'); sb.append(ref); return (sb.toString()); } sq~ uq~ppppq~¥q~¥xsq~ uq~pppppppturlq~¢xsq~ uq~pppppq~¥q~¦q~¥q~%”pq~§xqm³qmÌqmåsq~bsq~ uq~ppppsq~isq~ uq~q‚Àpppq~%9sq~ uq~ppppptƒ/** * Compute the printable representation of a URL, leaving off the * scheme/host/port part if no host is specified. This will typically * be the case for URLs that were originally created from relative * or context-relative URIs. * * @param url URL to render in a printable representation * @return printable representation of a URL */ pt printableURLq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t‡ if (url.getHost() != null) return (url.toString()); String file = url.getFile(); String ref = url.getRef(); if (ref == null) return (file); else { StringBuffer sb = new StringBuffer(file); sb.append('#'); sb.append(ref); return (sb.toString()); } sq~ uq~ppppq~–q~–xsq~ uq~pppppppturlq~rxsq~ uq~pppppq~–q~—q~–q~%”pq~˜xqnOqnhqnsq~bsq~ uq~ppppsq~isq~ uq~q‚Ùpppq~%9sq~ uq~ppppptƒ/** * Compute the printable representation of a URL, leaving off the * scheme/host/port part if no host is specified. This will typically * be the case for URLs that were originally created from relative * or context-relative URIs. * * @param url URL to render in a printable representation * @return printable representation of a URL */ pt printableURLq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t˜ if (url.getHost() != null) { return (url.toString()); } String file = url.getFile(); String ref = url.getRef(); if (ref == null) { return (file); } else { StringBuffer sb = new StringBuffer(file); sb.append('#'); sb.append(ref); return (sb.toString()); } sq~ uq~ppppq~~q~~xsq~ uq~pppppppturlq~{xsq~ uq~pppppq~~q~q~~q~%”pq~€xqo<html:link> tag. If no query parameters are * identified, return null. * * @param pageContext PageContext we are operating in * * @param paramId Single-value request parameter name (if any) * @param paramName Bean containing single-value parameter value * @param paramProperty Property (of bean named by paramName * containing single-value parameter value * @param paramScope Scope containing bean named by * paramScope * * @param name Bean containing multi-value parameters Map (if any) * @param property Property (of bean named by name * containing multi-value parameters Map * @param scope Scope containing bean named by * name * * @param transaction Should we add our transaction control token? * * @exception JspException if we cannot look up the required beans * @exception JspException if a class cast exception occurs on a * looked-up bean or property */ ptcomputeParametersq~=xsq~ uq~pppppq~$q~yq~$q~¼pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxq~$t ( // Short circuit if no parameters are specified if ((paramId == null) && (name == null) && !transaction) return (null); // Locate the Map containing our multi-value parameters map Map map = null; try { if (name != null) map = (Map) lookup(pageContext, name, property, scope); } catch (ClassCastException e) { saveException(pageContext, e); throw new JspException (messages.getMessage("parameters.multi", name, property, scope)); } catch (JspException e) { saveException(pageContext, e); throw e; } // Create a Map to contain our results from the multi-value parameters Map results = null; if (map != null) results = new HashMap(map); else results = new HashMap(); // Add the single-value parameter (if any) if ((paramId != null) && (paramName != null)) { Object paramValue = null; try { paramValue = lookup(pageContext, paramName, paramProperty, paramScope); } catch (JspException e) { saveException(pageContext, e); throw e; } if (paramValue != null) { String paramString = null; if (paramValue instanceof String) paramString = (String) paramValue; else paramString = paramValue.toString(); Object mapValue = results.get(paramId); if (mapValue == null) results.put(paramId, paramString); else if (mapValue instanceof String) { String newValues[] = new String[2]; newValues[0] = (String) mapValue; newValues[1] = paramString; results.put(paramId, newValues); } else /* if (mapValue instanceof String[]) */ { String oldValues[] = (String[]) mapValue; String newValues[] = new String[oldValues.length + 1]; System.arraycopy(oldValues, 0, newValues, 0, oldValues.length); newValues[oldValues.length] = paramString; results.put(paramId, newValues); } } } // Add our transaction control token (if requested) if (transaction) { HttpSession session = pageContext.getSession(); String token = null; if (session != null) token = (String) session.getAttribute(Action.TRANSACTION_TOKEN_KEY); if (token != null) results.put(Constants.TOKEN_KEY, token); } // Return the completed Map return (results); sq~ uq~q~pppq~$q~$xqlÎsq~isq~ uq~sq~bsq~ uq~ppppqƒlsq~ uq~ppppppptrequestq~=xsq~ uq~pppppq~$q~yq~$q~Œpq~$xsq~bsq~ uq~ppppqƒlsq~ uq~ppppppptmappingq~=xsq~ uq~pppppq~$q~yq~$q~épq~$xsq~bsq~ uq~ppppqƒlsq~ uq~pppppppt appConfigq~=xsq~ uq~pppppq~$q~yq~$q~bpq~$xsq~bsq~ uq~ppppqƒlsq~ uq~ppppppptservletq~=xsq~ uq~pppppq~$q~yq~$q~ ppq~$xq~%9sq~ uq~pppppt/** * Create (if necessary) and return an ActionForm instance appropriate * for this request. If no ActionForm instance is required, return * null. * * @param request The servlet request we are processing * @param mapping The action mapping for this request * @param appConfig The application configuration for this sub-application */ ptcreateActionFormq~=xsq~ uq~pppppq~$q~yq~$q~wpq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxq~$t ° // Is there a form bean associated with this mapping? String attribute = mapping.getAttribute(); if (attribute == null) { return (null); } // Look up the form bean configuration information to use String name = mapping.getName(); FormBeanConfig config = appConfig.findFormBeanConfig(name); if (config == null) { return (null); } // Look up any existing form bean instance if (appConfig.getControllerConfig().getDebug() >= 2) { LOG.info(" Looking for ActionForm bean instance in scope '" + mapping.getScope() + "' under attribute key '" + attribute + "'"); } ActionForm instance = null; HttpSession session = null; if ("request".equals(mapping.getScope())) { instance = (ActionForm) request.getAttribute(attribute); } else { session = request.getSession(); instance = (ActionForm) session.getAttribute(attribute); } // Can we recycle the existing form bean instance (if there is one)? if (instance != null) { if (config.getDynamic()) { String className = ((DynaBean) instance).getDynaClass().getName(); if (className.equals(config.getName())) { if (appConfig.getControllerConfig().getDebug() >= 2) { servlet.log (" Recycling existing DynaActionForm instance " + "of type '" + className + "'"); } return (instance); } } else { String className = instance.getClass().getName(); if (className.equals(config.getType())) { if (appConfig.getControllerConfig().getDebug() >= 2) { servlet.log (" Recycling existing ActionForm instance " + "of class '" + className + "'"); } return (instance); } } } // Create and return a new form bean instance if (config.getDynamic()) { try { DynaActionFormClass dynaClass = DynaActionFormClass.createDynaActionFormClass(config); instance = (ActionForm) dynaClass.newInstance(); } catch (Throwable t) { LOG.error(servlet.getInternal().getMessage ("formBean", config.getName()), t); return (null); } } else { try { instance = (ActionForm) applicationInstance(config.getType()); } catch (Throwable t) { LOG.error(servlet.getInternal().getMessage ("formBean", config.getType()), t); return (null); } } instance.setServlet(servlet); instance.reset(mapping, request); return (instance); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppqƒsq~ uq~pppppppt pageContextq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~bsq~ uq~ppppqƒsq~ uq~ppppppptnameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppqƒsq~ uq~ppppppptscopeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpq~%9sq~ uq~pppppt /** * Locate and return the specified bean, from an optionally specified * scope, in the specified page context. If no such bean is found, * return null instead. If an exception is thrown, it will * have already been saved via a call to saveException(). * * @param pageContext Page context to be searched * @param name Name of the bean to be retrieved * @param scope Scope to be searched (page, request, session, application) * or null to use findAttribute() instead * * @exception JspException if an invalid scope name * is requested */ ptlookupq~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxq~$t€ Object bean = null; if (scope == null) bean = pageContext.findAttribute(name); else if (scope.equalsIgnoreCase("page")) bean = pageContext.getAttribute(name, PageContext.PAGE_SCOPE); else if (scope.equalsIgnoreCase("request")) bean = pageContext.getAttribute(name, PageContext.REQUEST_SCOPE); else if (scope.equalsIgnoreCase("session")) bean = pageContext.getAttribute(name, PageContext.SESSION_SCOPE); else if (scope.equalsIgnoreCase("application")) bean = pageContext.getAttribute(name, PageContext.APPLICATION_SCOPE); else { JspException e = new JspException (messages.getMessage("lookup.scope", scope)); saveException(pageContext, e); throw e; } return (bean); sq~ uq~q~pppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppqƒÆsq~ uq~pppppppt pageContextq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~bsq~ uq~ppppqƒÆsq~ uq~ppppppptnameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppqƒÆsq~ uq~ppppppptpropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppqƒÆsq~ uq~ppppppptscopeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xq~%9sq~ uq~ppppptõ/** * Locate and return the specified property of the specified bean, from * an optionally specified scope, in the specified page context. If an * exception is thrown, it will have already been saved via a call to * saveException(). * * @param pageContext Page context to be searched * @param name Name of the bean to be retrieved * @param property Name of the property to be retrieved, or * null to retrieve the bean itself * @param scope Scope to be searched (page, request, session, application) * or null to use findAttribute() instead * * @exception JspException if an invalid scope name * is requested * @exception JspException if the specified bean is not found * @exception JspException if accessing this property causes an * IllegalAccessException, IllegalArgumentException, * InvocationTargetException, or NoSuchMethodException */ ptlookupq~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxq~$të // Look up the requested bean, and return if requested Object bean = lookup(pageContext, name, scope); if (bean == null) { JspException e = new JspException (messages.getMessage("lookup.bean", name, scope)); saveException(pageContext, e); throw e; } if (property == null) return (bean); // Locate and return the specified property try { return (PropertyUtils.getProperty(bean, property)); } catch (IllegalAccessException e) { saveException(pageContext, e); throw new JspException (messages.getMessage("lookup.access", property, name)); } catch (InvocationTargetException e) { Throwable t = e.getTargetException(); if (t == null) t = e; saveException(pageContext, t); throw new JspException (messages.getMessage("lookup.target", property, name)); } catch (NoSuchMethodException e) { saveException(pageContext, e); throw new JspException (messages.getMessage("lookup.method", property, name)); } sq~ uq~q~pppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppqƒ÷sq~ uq~pppppppt pageContextq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~bsq~ uq~ppppqƒ÷sq~ uq~ppppppptlocaleq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xppq~%9sq~ uq~ppppptû/** * Look up and return current user locale, based on the specified parameters. * * @param pageContext The PageContext associated with this request * @param locale Name of the session attribute for our user's Locale */ ptretrieveUserLocaleq~=xsq~ uq~pppppq~$q~yq~$q~5pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxq~$t" if (locale == null) locale = Action.LOCALE_KEY; Locale userLocale = (Locale) pageContext.getAttribute(locale, PageContext.SESSION_SCOPE); if (userLocale == null) userLocale = defaultLocale; return userLocale; sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq„sq~ uq~pppppppt pageContextq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~bsq~ uq~ppppq„sq~ uq~ppppppptbundleq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppq„sq~ uq~ppppppptlocaleq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppq„sq~ uq~ppppppptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xq~%9sq~ uq~pppppt/** * Look up and return a message string, based on the specified parameters. * * @param pageContext The PageContext associated with this request * @param bundle Name of the servlet context attribute for our * message resources bundle * @param locale Name of the session attribute for our user's Locale * @param key Message key to be looked up and returned * * @exception JspException if a lookup error occurs (will have been * saved in the request already) */ ptmessageq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxq~$tM return (message(pageContext, bundle, locale, key, null)); sq~ uq~q~pppq~$q~$xsq~isq~ uq~ sq~bsq~ uq~ppppq„Isq~ uq~pppppppt pageContextq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~bsq~ uq~ppppq„Isq~ uq~ppppppptbundleq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppq„Isq~ uq~ppppppptlocaleq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppq„Isq~ uq~ppppppptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppq„Isq~ uq~ppppppptargsq~=xsq~ uq~pppppq~$q~yq~$q~«t[]q~xppppq~%9sq~ uq~ppppptM/** * Look up and return a message string, based on the specified parameters. * * @param pageContext The PageContext associated with this request * @param bundle Name of the servlet context attribute for our * message resources bundle * @param locale Name of the session attribute for our user's Locale * @param key Message key to be looked up and returned * @param args Replacement parameters for this message * * @exception JspException if a lookup error occurs (will have been * saved in the request already) */ ptmessageq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxq~$t‘ MessageResources resources = null; // Look up the requested MessageResources if (bundle == null) { bundle = Action.MESSAGES_KEY; resources = (MessageResources) pageContext.getAttribute(bundle, PageContext.REQUEST_SCOPE); } if (resources == null) { resources = (MessageResources) pageContext.getAttribute(bundle, PageContext.APPLICATION_SCOPE); } if (resources == null) { JspException e = new JspException (messages.getMessage("message.bundle", bundle)); saveException(pageContext, e); throw e; } // Look up the requested Locale if (locale == null) locale = Action.LOCALE_KEY; Locale userLocale = retrieveUserLocale( pageContext, locale ); // Return the requested message if (args == null) { return (resources.getMessage(userLocale, key)); } else { return (resources.getMessage(userLocale, key, args)); } sq~ uq~q~pppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq„ƒsq~ uq~ppppppptbeanq~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xsq~bsq~ uq~ppppq„ƒsq~ uq~ppppppptrequestq~=xsq~ uq~pppppq~$q~yq~$q~Œpq~$xppq~%9sq~ uq~pppppt•/** * Populate the properties of the specified JavaBean from the specified * HTTP request, based on matching each parameter name against the * corresponding JavaBeans "property setter" methods in the bean's class. * Suitable conversion is done for argument types as described under * convert(). * * @param bean The JavaBean whose properties are to be set * @param request The HTTP request whose parameters are to be used * to populate bean properties * * @exception ServletException if an exception is thrown while setting * property values */ ptpopulateq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxq~$t8 populate(bean, null, null, request); sq~ uq~q~¦pppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq„¤sq~ uq~ppppppptbeanq~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xsq~bsq~ uq~ppppq„¤sq~ uq~ppppppptprefixq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppq„¤sq~ uq~ppppppptsuffixq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppq„¤sq~ uq~ppppppptrequestq~=xsq~ uq~pppppq~$q~yq~$q~Œpq~$xq~%9sq~ uq~pppppt…/** * Populate the properties of the specified JavaBean from the specified * HTTP request, based on matching each parameter name (plus an optional * prefix and/or suffix) against the corresponding JavaBeans "property * setter" methods in the bean's class. Suitable conversion is done for * argument types as described under setProperties(). *

      * If you specify a non-null prefix and a non-null * suffix, the parameter name must match both * conditions for its value(s) to be used in populating bean properties. * If the request's content type is "multipart/form-data" and the * method is "POST", the HttpServletRequest object will be wrapped in * a MultipartRequestWrapper object. * * @param bean The JavaBean whose properties are to be set * @param prefix The prefix (if any) to be prepend to bean property * names when looking for matching parameters * @param suffix The suffix (if any) to be appended to bean property * names when looking for matching parameters * @param request The HTTP request whose parameters are to be used * to populate bean properties * * @exception ServletException if an exception is thrown while setting * property values */ ptpopulateq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxq~$tS // Build a list of relevant request parameters from this request HashMap properties = new HashMap(); // Iterator of parameter names Enumeration names = null; // Hashtable for multipart values Hashtable multipartElements = null; String contentType = request.getContentType(); String method = request.getMethod(); boolean isMultipart = false; if ((contentType != null) && (contentType.startsWith("multipart/form-data")) && (method.equalsIgnoreCase("POST"))) { // Get the ActionServletWrapper from the form bean ActionServletWrapper servlet; if (bean instanceof ActionForm) { servlet = ((ActionForm) bean).getServletWrapper(); } else { throw new ServletException("bean that's supposed to be " + "populated from a multipart request is not of type " + "\"org.apache.struts.action.ActionForm\", but type " + "\"" + bean.getClass().getName() + "\""); } // Obtain a MultipartRequestHandler MultipartRequestHandler multipartHandler = getMultipartHandler(request, servlet); // Set the multipart request handler for our ActionForm. // If the bean isn't an ActionForm, an exception would have been // thrown earlier, so it's safe to assume that our bean is // in fact an ActionForm. ((ActionForm) bean).setMultipartRequestHandler(multipartHandler); if (multipartHandler != null) { isMultipart = true; // Set servlet and mapping info servlet.setServletFor(multipartHandler); multipartHandler.setMapping((ActionMapping) request.getAttribute(Action.MAPPING_KEY)); // Initialize multipart request class handler multipartHandler.handleRequest(request); //stop here if the maximum length has been exceeded Boolean maxLengthExceeded = (Boolean) request.getAttribute(MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED); if ((maxLengthExceeded != null) && (maxLengthExceeded.booleanValue())) { return; } //retrive form values and put into properties multipartElements = multipartHandler.getAllElements(); names = multipartElements.keys(); } request.removeAttribute(Action.MAPPING_KEY); } if (!isMultipart) { names = request.getParameterNames(); } while (names.hasMoreElements()) { String name = (String) names.nextElement(); String stripped = name; int subscript = stripped.lastIndexOf("["); if (prefix != null) { if (!stripped.startsWith(prefix)) continue; stripped = stripped.substring(prefix.length()); } if (suffix != null) { if (!stripped.endsWith(suffix)) continue; stripped = stripped.substring(0, stripped.length() - suffix.length()); } if (isMultipart) { properties.put(stripped, multipartElements.get(name)); } else { properties.put(stripped, request.getParameterValues(name)); } } // Set the corresponding properties of our bean try { BeanUtils.populate(bean, properties); } catch (Exception e) { throw new ServletException("BeanUtils.populate", e); } sq~ uq~q~¦pppq~$q~$xq\¯sq~isq~ uq~sq~bsq~ uq~ppppq„Õsq~ uq~pppppppt pageContextq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~bsq~ uq~ppppq„Õsq~ uq~ppppppptbundleq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppq„Õsq~ uq~ppppppptlocaleq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppq„Õsq~ uq~ppppppptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xq~%9sq~ uq~pppppt4/** * Return true if a message string for the specified message key * is present for the specified Locale. * * @param pageContext The PageContext associated with this request * @param bundle Name of the servlet context attribute for our * message resources bundle * @param locale Name of the session attribute for our user's Locale * @param key Message key to be looked up and returned * * @exception JspException if a lookup error occurs (will have been * saved in the request already) */ ptpresentq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxq~$tu MessageResources resources = null; // Look up the requested MessageResources if (bundle == null) { bundle = Action.MESSAGES_KEY; resources = (MessageResources) pageContext.getAttribute(bundle); } if (resources == null) { resources = (MessageResources) pageContext.getAttribute(bundle, PageContext.APPLICATION_SCOPE); } if (resources == null) { JspException e = new JspException (messages.getMessage("message.bundle", bundle)); saveException(pageContext, e); throw e; } // Look up the requested Locale if (locale == null) locale = Action.LOCALE_KEY; Locale userLocale = (Locale) pageContext.getAttribute(locale, PageContext.SESSION_SCOPE); if (userLocale == null) userLocale = defaultLocale; // Return the requested message presence indicator return (resources.isPresent(userLocale, key)); sq~ uq~q~pppq~$q~$xq‚‘qmqm0qËsq~isq~ uq~sq~bsq~ uq~ppppq…sq~ uq~ppppppptprefixq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppq…sq~ uq~ppppppptrequestq~=xsq~ uq~pppppq~$q~yq~$q~Œpq~$xsq~bsq~ uq~ppppq…sq~ uq~ppppppptcontextq~=xsq~ uq~pppppq~$q~yq~$q~Öpq~$xpq~%9sq~ uq~ppppptr/** * Select the sub-application to which the specified request belongs, and * add corresponding request attributes to this request. * * @param prefix The sub-application prefix of the desired sub-application * @param request The servlet request we are processing * @param context The ServletContext for this web application */ ptselectApplicationq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxq~$t´ // Expose the resources for this sub-application ApplicationConfig config = (ApplicationConfig) context.getAttribute(Action.APPLICATION_KEY + prefix); if (config != null) { request.setAttribute(Action.APPLICATION_KEY, config); } else { request.removeAttribute(Action.APPLICATION_KEY); } MessageResources resources = (MessageResources) context.getAttribute(Action.MESSAGES_KEY + prefix); if (resources != null) { request.setAttribute(Action.MESSAGES_KEY, resources); } else { request.removeAttribute(Action.MESSAGES_KEY); } sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq…/sq~ uq~ppppppptrequestq~=xsq~ uq~pppppq~$q~yq~$q~Œpq~$xsq~bsq~ uq~ppppq…/sq~ uq~ppppppptcontextq~=xsq~ uq~pppppq~$q~yq~$q~Öpq~$xppq~%9sq~ uq~pppppt"/** * Select the sub-application to which the specified request belongs, and * add corresponding request attributes to this request. * * @param request The servlet request we are processing * @param context The ServletContext for this web application */ ptselectApplicationq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxq~$tS // Acquire the path used to compute the sub-application String matchPath = request.getServletPath(); // Match against the list of sub-application prefixes String prefix = ""; String prefixes[] = getApplicationPrefixes(context); for (int i = 0; i < prefixes.length; i++) { if (matchPath.startsWith(prefixes[i])) { prefix = prefixes[i]; break; } } // Expose the resources for this sub-application selectApplication(prefix, request, context); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq…Psq~ uq~ppppppptcontextq~=xsq~ uq~pppppq~$q~yq~$q~Öpq~$xpppq~%9sq~ uq~ppppptB/** * Return the list of sub-application prefixes that are defined for * this web application, creating it if necessary. NOTE - * the "" prefix for the default application is not included in this list. * * @param context The ServletContext for this web application */ ptgetApplicationPrefixesq~=xsq~ uq~pppppq~$q~yq~$q~{t[]q~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxq~$t‰ String prefixes[] = (String[]) context.getAttribute(PREFIXES_KEY); if (prefixes != null) { return (prefixes); } ArrayList list = new ArrayList(); Enumeration names = context.getAttributeNames(); while (names.hasMoreElements()) { String name = (String) names.nextElement(); if (!name.startsWith(Action.APPLICATION_KEY)) { continue; } ApplicationConfig config = (ApplicationConfig) context.getAttribute(name); String prefix = name.substring(Action.APPLICATION_KEY.length()); if (prefix.length() > 0) { list.add(prefix); } } prefixes = (String[]) list.toArray(new String[list.size()]); context.setAttribute(PREFIXES_KEY, prefixes); return (prefixes); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq…jsq~ uq~pppppppt pageContextq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~bsq~ uq~ppppq…jsq~ uq~pppppppt paramNameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xppq~%9sq~ uq~pppppt/** * Retrieves the value from request scope and if it isn't already an ActionMessages * some classes are converted to one. * * @param pageContext The PageContext for the current page * @param paramName Key for parameter value */ ptgetActionMessagesq~=xsq~ uq~pppppq~$q~yq~$q~Ipq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxq~$t´ ActionMessages am = new ActionMessages(); Object value = pageContext.getAttribute(paramName, PageContext.REQUEST_SCOPE); try { if (value == null) { ; } else if (value instanceof String) { am.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage((String) value)); } else if (value instanceof String[]) { String keys[] = (String[]) value; for (int i = 0; i < keys.length; i++) am.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(keys[i])); } else if (value instanceof ErrorMessages) { String keys[] = ((ErrorMessages) value).getErrors(); if (keys == null) keys = new String[0]; for (int i = 0; i < keys.length; i++) am.add(ActionErrors.GLOBAL_ERROR, new ActionError(keys[i])); } else if (value instanceof ActionMessages) { am = (ActionMessages) value; } else { throw new JspException (messages.getMessage("actionMessages.errors", value.getClass().getName())); } } catch (JspException e) { throw e; } catch (Exception e) { ; } return am; sq~ uq~q~pppq~$q~$xqêqmIq²Þq²Jsq~isq~ uq~ sq~bsq~ uq~ppppq…‹sq~ uq~pppppppt pageContextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~bsq~ uq~ppppq…‹sq~ uq~ppppppptparamIdq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq…‹sq~ uq~pppppppt paramNameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq…‹sq~ uq~pppppppt paramPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq…‹sq~ uq~pppppppt paramScopeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq…‹sq~ uq~ppppppptnameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq…‹sq~ uq~ppppppptpropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq…‹sq~ uq~ppppppptscopeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq…‹sq~ uq~pppppppt transactionq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xq~%9sq~ uq~ppppptÆ/** * Compute a set of query parameters that will be dynamically added to * a generated URL. The returned Map is keyed by parameter name, and the * values are either null (no value specified), a String (single value * specified), or a String[] array (multiple values specified). Parameter * names correspond to the corresponding attributes of the * <html:link> tag. If no query parameters are * identified, return null. * * @param pageContext PageContext we are operating in * * @param paramId Single-value request parameter name (if any) * @param paramName Bean containing single-value parameter value * @param paramProperty Property (of bean named by paramName * containing single-value parameter value * @param paramScope Scope containing bean named by * paramScope * * @param name Bean containing multi-value parameters Map (if any) * @param property Property (of bean named by name * containing multi-value parameters Map * @param scope Scope containing bean named by * name * * @param transaction Should we add our transaction control token? * * @exception JspException if we cannot look up the required beans * @exception JspException if a class cast exception occurs on a * looked-up bean or property */ ptcomputeParametersq~¢xsq~ uq~pppppq~¥q~¦q~¥q~¼pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥t ( // Short circuit if no parameters are specified if ((paramId == null) && (name == null) && !transaction) return (null); // Locate the Map containing our multi-value parameters map Map map = null; try { if (name != null) map = (Map) lookup(pageContext, name, property, scope); } catch (ClassCastException e) { saveException(pageContext, e); throw new JspException (messages.getMessage("parameters.multi", name, property, scope)); } catch (JspException e) { saveException(pageContext, e); throw e; } // Create a Map to contain our results from the multi-value parameters Map results = null; if (map != null) results = new HashMap(map); else results = new HashMap(); // Add the single-value parameter (if any) if ((paramId != null) && (paramName != null)) { Object paramValue = null; try { paramValue = lookup(pageContext, paramName, paramProperty, paramScope); } catch (JspException e) { saveException(pageContext, e); throw e; } if (paramValue != null) { String paramString = null; if (paramValue instanceof String) paramString = (String) paramValue; else paramString = paramValue.toString(); Object mapValue = results.get(paramId); if (mapValue == null) results.put(paramId, paramString); else if (mapValue instanceof String) { String newValues[] = new String[2]; newValues[0] = (String) mapValue; newValues[1] = paramString; results.put(paramId, newValues); } else /* if (mapValue instanceof String[]) */ { String oldValues[] = (String[]) mapValue; String newValues[] = new String[oldValues.length + 1]; System.arraycopy(oldValues, 0, newValues, 0, oldValues.length); newValues[oldValues.length] = paramString; results.put(paramId, newValues); } } } // Add our transaction control token (if requested) if (transaction) { HttpSession session = pageContext.getSession(); String token = null; if (session != null) token = (String) session.getAttribute(Action.TRANSACTION_TOKEN_KEY); if (token != null) results.put(Constants.TOKEN_KEY, token); } // Return the completed Map return (results); sq~ uq~q~pppq~¥q~¥xqmjsq~isq~ uq~sq~bsq~ uq~ppppq…äsq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Œpq~§xsq~bsq~ uq~ppppq…äsq~ uq~ppppppptmappingq~¢xsq~ uq~pppppq~¥q~¦q~¥q~épq~§xsq~bsq~ uq~ppppq…äsq~ uq~pppppppt appConfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~bpq~§xsq~bsq~ uq~ppppq…äsq~ uq~ppppppptservletq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ ppq~§xq~%9sq~ uq~pppppt/** * Create (if necessary) and return an ActionForm instance appropriate * for this request. If no ActionForm instance is required, return * null. * * @param request The servlet request we are processing * @param mapping The action mapping for this request * @param appConfig The application configuration for this sub-application */ ptcreateActionFormq~¢xsq~ uq~pppppq~¥q~¦q~¥q~wpq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥tP // Is there a form bean associated with this mapping? String attribute = mapping.getAttribute(); if (attribute == null) { return (null); } // Look up the form bean configuration information to use String name = mapping.getName(); FormBeanConfig config = appConfig.findFormBeanConfig(name); if (config == null) { return (null); } // Look up any existing form bean instance if (LOG.isDebugEnabled()) { LOG.debug(" Looking for ActionForm bean instance in scope '" + mapping.getScope() + "' under attribute key '" + attribute + "'"); } ActionForm instance = null; HttpSession session = null; if ("request".equals(mapping.getScope())) { instance = (ActionForm) request.getAttribute(attribute); } else { session = request.getSession(); instance = (ActionForm) session.getAttribute(attribute); } // Can we recycle the existing form bean instance (if there is one)? if (instance != null) { if (config.getDynamic()) { String className = ((DynaBean) instance).getDynaClass().getName(); if (className.equals(config.getType())) { if (LOG.isDebugEnabled()) { LOG.debug (" Recycling existing DynaActionForm instance " + "of type '" + className + "'"); LOG.trace(" --> " + instance); } return (instance); } } else { try { Class configClass = applicationClass(config.getType()); if (configClass.isAssignableFrom(instance.getClass())) { if (LOG.isDebugEnabled()) { LOG.debug (" Recycling existing ActionForm instance " + "of class '" + instance.getClass().getName() + "'"); LOG.trace(" --> " + instance); } return (instance); } return (instance); } catch (Throwable t) { LOG.error(servlet.getInternal().getMessage ("formBean", config.getName()), t); return (null); } } } // Create and return a new form bean instance if (config.getDynamic()) { try { DynaActionFormClass dynaClass = DynaActionFormClass.createDynaActionFormClass(config); instance = (ActionForm) dynaClass.newInstance(); if (LOG.isDebugEnabled()) { LOG.debug (" Creating new DynaActionForm instance " + "of type '" + config.getType() + "'"); LOG.trace(" --> " + instance); } } catch (Throwable t) { LOG.error(servlet.getInternal().getMessage ("formBean", config.getName()), t); return (null); } } else { try { instance = (ActionForm) applicationInstance(config.getType()); if (LOG.isDebugEnabled()) { LOG.debug (" Creating new ActionForm instance " + "of type '" + config.getType() + "'"); LOG.trace(" --> " + instance); } } catch (Throwable t) { LOG.error(servlet.getInternal().getMessage ("formBean", config.getName()), t); return (null); } } instance.setServlet(servlet); return (instance); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq†sq~ uq~pppppppt pageContextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~bsq~ uq~ppppq†sq~ uq~ppppppptnameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq†sq~ uq~ppppppptscopeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpq~%9sq~ uq~pppppt /** * Locate and return the specified bean, from an optionally specified * scope, in the specified page context. If no such bean is found, * return null instead. If an exception is thrown, it will * have already been saved via a call to saveException(). * * @param pageContext Page context to be searched * @param name Name of the bean to be retrieved * @param scope Scope to be searched (page, request, session, application) * or null to use findAttribute() instead * * @exception JspException if an invalid scope name * is requested */ ptlookupq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥t€ Object bean = null; if (scope == null) bean = pageContext.findAttribute(name); else if (scope.equalsIgnoreCase("page")) bean = pageContext.getAttribute(name, PageContext.PAGE_SCOPE); else if (scope.equalsIgnoreCase("request")) bean = pageContext.getAttribute(name, PageContext.REQUEST_SCOPE); else if (scope.equalsIgnoreCase("session")) bean = pageContext.getAttribute(name, PageContext.SESSION_SCOPE); else if (scope.equalsIgnoreCase("application")) bean = pageContext.getAttribute(name, PageContext.APPLICATION_SCOPE); else { JspException e = new JspException (messages.getMessage("lookup.scope", scope)); saveException(pageContext, e); throw e; } return (bean); sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq†>sq~ uq~pppppppt pageContextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~bsq~ uq~ppppq†>sq~ uq~ppppppptnameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq†>sq~ uq~ppppppptpropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq†>sq~ uq~ppppppptscopeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xq~%9sq~ uq~ppppptõ/** * Locate and return the specified property of the specified bean, from * an optionally specified scope, in the specified page context. If an * exception is thrown, it will have already been saved via a call to * saveException(). * * @param pageContext Page context to be searched * @param name Name of the bean to be retrieved * @param property Name of the property to be retrieved, or * null to retrieve the bean itself * @param scope Scope to be searched (page, request, session, application) * or null to use findAttribute() instead * * @exception JspException if an invalid scope name * is requested * @exception JspException if the specified bean is not found * @exception JspException if accessing this property causes an * IllegalAccessException, IllegalArgumentException, * InvocationTargetException, or NoSuchMethodException */ ptlookupq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥të // Look up the requested bean, and return if requested Object bean = lookup(pageContext, name, scope); if (bean == null) { JspException e = new JspException (messages.getMessage("lookup.bean", name, scope)); saveException(pageContext, e); throw e; } if (property == null) return (bean); // Locate and return the specified property try { return (PropertyUtils.getProperty(bean, property)); } catch (IllegalAccessException e) { saveException(pageContext, e); throw new JspException (messages.getMessage("lookup.access", property, name)); } catch (InvocationTargetException e) { Throwable t = e.getTargetException(); if (t == null) t = e; saveException(pageContext, t); throw new JspException (messages.getMessage("lookup.target", property, name)); } catch (NoSuchMethodException e) { saveException(pageContext, e); throw new JspException (messages.getMessage("lookup.method", property, name)); } sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq†osq~ uq~pppppppt pageContextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~bsq~ uq~ppppq†osq~ uq~ppppppptlocaleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xppq~%9sq~ uq~ppppptû/** * Look up and return current user locale, based on the specified parameters. * * @param pageContext The PageContext associated with this request * @param locale Name of the session attribute for our user's Locale */ ptretrieveUserLocaleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~5pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥t" if (locale == null) locale = Action.LOCALE_KEY; Locale userLocale = (Locale) pageContext.getAttribute(locale, PageContext.SESSION_SCOPE); if (userLocale == null) userLocale = defaultLocale; return userLocale; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq†sq~ uq~pppppppt pageContextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~bsq~ uq~ppppq†sq~ uq~ppppppptbundleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq†sq~ uq~ppppppptlocaleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq†sq~ uq~ppppppptkeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xq~%9sq~ uq~pppppt/** * Look up and return a message string, based on the specified parameters. * * @param pageContext The PageContext associated with this request * @param bundle Name of the servlet context attribute for our * message resources bundle * @param locale Name of the session attribute for our user's Locale * @param key Message key to be looked up and returned * * @exception JspException if a lookup error occurs (will have been * saved in the request already) */ ptmessageq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥tM return (message(pageContext, bundle, locale, key, null)); sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~ sq~bsq~ uq~ppppq†Ásq~ uq~pppppppt pageContextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~bsq~ uq~ppppq†Ásq~ uq~ppppppptbundleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq†Ásq~ uq~ppppppptlocaleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq†Ásq~ uq~ppppppptkeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq†Ásq~ uq~ppppppptargsq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«t[]q~!¼xppppq~%9sq~ uq~ppppptM/** * Look up and return a message string, based on the specified parameters. * * @param pageContext The PageContext associated with this request * @param bundle Name of the servlet context attribute for our * message resources bundle * @param locale Name of the session attribute for our user's Locale * @param key Message key to be looked up and returned * @param args Replacement parameters for this message * * @exception JspException if a lookup error occurs (will have been * saved in the request already) */ ptmessageq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥t‘ MessageResources resources = null; // Look up the requested MessageResources if (bundle == null) { bundle = Action.MESSAGES_KEY; resources = (MessageResources) pageContext.getAttribute(bundle, PageContext.REQUEST_SCOPE); } if (resources == null) { resources = (MessageResources) pageContext.getAttribute(bundle, PageContext.APPLICATION_SCOPE); } if (resources == null) { JspException e = new JspException (messages.getMessage("message.bundle", bundle)); saveException(pageContext, e); throw e; } // Look up the requested Locale if (locale == null) locale = Action.LOCALE_KEY; Locale userLocale = retrieveUserLocale( pageContext, locale ); // Return the requested message if (args == null) { return (resources.getMessage(userLocale, key)); } else { return (resources.getMessage(userLocale, key, args)); } sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq†ûsq~ uq~ppppppptbeanq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~bsq~ uq~ppppq†ûsq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Œpq~§xppq~%9sq~ uq~pppppt•/** * Populate the properties of the specified JavaBean from the specified * HTTP request, based on matching each parameter name against the * corresponding JavaBeans "property setter" methods in the bean's class. * Suitable conversion is done for argument types as described under * convert(). * * @param bean The JavaBean whose properties are to be set * @param request The HTTP request whose parameters are to be used * to populate bean properties * * @exception ServletException if an exception is thrown while setting * property values */ ptpopulateq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥t8 populate(bean, null, null, request); sq~ uq~q~¦pppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‡sq~ uq~ppppppptbeanq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~bsq~ uq~ppppq‡sq~ uq~ppppppptprefixq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq‡sq~ uq~ppppppptsuffixq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq‡sq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Œpq~§xq~%9sq~ uq~pppppt…/** * Populate the properties of the specified JavaBean from the specified * HTTP request, based on matching each parameter name (plus an optional * prefix and/or suffix) against the corresponding JavaBeans "property * setter" methods in the bean's class. Suitable conversion is done for * argument types as described under setProperties(). *

      * If you specify a non-null prefix and a non-null * suffix, the parameter name must match both * conditions for its value(s) to be used in populating bean properties. * If the request's content type is "multipart/form-data" and the * method is "POST", the HttpServletRequest object will be wrapped in * a MultipartRequestWrapper object. * * @param bean The JavaBean whose properties are to be set * @param prefix The prefix (if any) to be prepend to bean property * names when looking for matching parameters * @param suffix The suffix (if any) to be appended to bean property * names when looking for matching parameters * @param request The HTTP request whose parameters are to be used * to populate bean properties * * @exception ServletException if an exception is thrown while setting * property values */ ptpopulateq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥tS // Build a list of relevant request parameters from this request HashMap properties = new HashMap(); // Iterator of parameter names Enumeration names = null; // Hashtable for multipart values Hashtable multipartElements = null; String contentType = request.getContentType(); String method = request.getMethod(); boolean isMultipart = false; if ((contentType != null) && (contentType.startsWith("multipart/form-data")) && (method.equalsIgnoreCase("POST"))) { // Get the ActionServletWrapper from the form bean ActionServletWrapper servlet; if (bean instanceof ActionForm) { servlet = ((ActionForm) bean).getServletWrapper(); } else { throw new ServletException("bean that's supposed to be " + "populated from a multipart request is not of type " + "\"org.apache.struts.action.ActionForm\", but type " + "\"" + bean.getClass().getName() + "\""); } // Obtain a MultipartRequestHandler MultipartRequestHandler multipartHandler = getMultipartHandler(request, servlet); // Set the multipart request handler for our ActionForm. // If the bean isn't an ActionForm, an exception would have been // thrown earlier, so it's safe to assume that our bean is // in fact an ActionForm. ((ActionForm) bean).setMultipartRequestHandler(multipartHandler); if (multipartHandler != null) { isMultipart = true; // Set servlet and mapping info servlet.setServletFor(multipartHandler); multipartHandler.setMapping((ActionMapping) request.getAttribute(Action.MAPPING_KEY)); // Initialize multipart request class handler multipartHandler.handleRequest(request); //stop here if the maximum length has been exceeded Boolean maxLengthExceeded = (Boolean) request.getAttribute(MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED); if ((maxLengthExceeded != null) && (maxLengthExceeded.booleanValue())) { return; } //retrive form values and put into properties multipartElements = multipartHandler.getAllElements(); names = multipartElements.keys(); } request.removeAttribute(Action.MAPPING_KEY); } if (!isMultipart) { names = request.getParameterNames(); } while (names.hasMoreElements()) { String name = (String) names.nextElement(); String stripped = name; int subscript = stripped.lastIndexOf("["); if (prefix != null) { if (!stripped.startsWith(prefix)) continue; stripped = stripped.substring(prefix.length()); } if (suffix != null) { if (!stripped.endsWith(suffix)) continue; stripped = stripped.substring(0, stripped.length() - suffix.length()); } if (isMultipart) { properties.put(stripped, multipartElements.get(name)); } else { properties.put(stripped, request.getParameterValues(name)); } } // Set the corresponding properties of our bean try { BeanUtils.populate(bean, properties); } catch (Exception e) { throw new ServletException("BeanUtils.populate", e); } sq~ uq~q~¦pppq~¥q~¥xq\àsq~isq~ uq~sq~bsq~ uq~ppppq‡Msq~ uq~pppppppt pageContextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~bsq~ uq~ppppq‡Msq~ uq~ppppppptbundleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq‡Msq~ uq~ppppppptlocaleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq‡Msq~ uq~ppppppptkeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xq~%9sq~ uq~pppppt4/** * Return true if a message string for the specified message key * is present for the specified Locale. * * @param pageContext The PageContext associated with this request * @param bundle Name of the servlet context attribute for our * message resources bundle * @param locale Name of the session attribute for our user's Locale * @param key Message key to be looked up and returned * * @exception JspException if a lookup error occurs (will have been * saved in the request already) */ ptpresentq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥tu MessageResources resources = null; // Look up the requested MessageResources if (bundle == null) { bundle = Action.MESSAGES_KEY; resources = (MessageResources) pageContext.getAttribute(bundle); } if (resources == null) { resources = (MessageResources) pageContext.getAttribute(bundle, PageContext.APPLICATION_SCOPE); } if (resources == null) { JspException e = new JspException (messages.getMessage("message.bundle", bundle)); saveException(pageContext, e); throw e; } // Look up the requested Locale if (locale == null) locale = Action.LOCALE_KEY; Locale userLocale = (Locale) pageContext.getAttribute(locale, PageContext.SESSION_SCOPE); if (userLocale == null) userLocale = defaultLocale; // Return the requested message presence indicator return (resources.isPresent(userLocale, key)); sq~ uq~q~pppq~¥q~¥xq‚ªqm³qmÌqÌ sq~isq~ uq~sq~bsq~ uq~ppppq‡~sq~ uq~ppppppptprefixq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq‡~sq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Œpq~§xsq~bsq~ uq~ppppq‡~sq~ uq~ppppppptcontextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Öpq~§xpq~%9sq~ uq~ppppptr/** * Select the sub-application to which the specified request belongs, and * add corresponding request attributes to this request. * * @param prefix The sub-application prefix of the desired sub-application * @param request The servlet request we are processing * @param context The ServletContext for this web application */ ptselectApplicationq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥t´ // Expose the resources for this sub-application ApplicationConfig config = (ApplicationConfig) context.getAttribute(Action.APPLICATION_KEY + prefix); if (config != null) { request.setAttribute(Action.APPLICATION_KEY, config); } else { request.removeAttribute(Action.APPLICATION_KEY); } MessageResources resources = (MessageResources) context.getAttribute(Action.MESSAGES_KEY + prefix); if (resources != null) { request.setAttribute(Action.MESSAGES_KEY, resources); } else { request.removeAttribute(Action.MESSAGES_KEY); } sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‡§sq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Œpq~§xsq~bsq~ uq~ppppq‡§sq~ uq~ppppppptcontextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Öpq~§xppq~%9sq~ uq~pppppt"/** * Select the sub-application to which the specified request belongs, and * add corresponding request attributes to this request. * * @param request The servlet request we are processing * @param context The ServletContext for this web application */ ptselectApplicationq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥tì // Acquire the path used to compute the sub-application String matchPath = (String) request.getAttribute(RequestProcessor.INCLUDE_SERVLET_PATH); if (matchPath == null) { matchPath = request.getServletPath(); } // Match against the list of sub-application prefixes String prefix = ""; String prefixes[] = getApplicationPrefixes(context); for (int i = 0; i < prefixes.length; i++) { if (matchPath.startsWith(prefixes[i])) { prefix = prefixes[i]; break; } } // Expose the resources for this sub-application selectApplication(prefix, request, context); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‡Èsq~ uq~ppppppptcontextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Öpq~§xpppq~%9sq~ uq~ppppptB/** * Return the list of sub-application prefixes that are defined for * this web application, creating it if necessary. NOTE - * the "" prefix for the default application is not included in this list. * * @param context The ServletContext for this web application */ ptgetApplicationPrefixesq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{t[]q~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥t‰ String prefixes[] = (String[]) context.getAttribute(PREFIXES_KEY); if (prefixes != null) { return (prefixes); } ArrayList list = new ArrayList(); Enumeration names = context.getAttributeNames(); while (names.hasMoreElements()) { String name = (String) names.nextElement(); if (!name.startsWith(Action.APPLICATION_KEY)) { continue; } ApplicationConfig config = (ApplicationConfig) context.getAttribute(name); String prefix = name.substring(Action.APPLICATION_KEY.length()); if (prefix.length() > 0) { list.add(prefix); } } prefixes = (String[]) list.toArray(new String[list.size()]); context.setAttribute(PREFIXES_KEY, prefixes); return (prefixes); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‡âsq~ uq~pppppppt pageContextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~bsq~ uq~ppppq‡âsq~ uq~pppppppt paramNameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xppq~%9sq~ uq~pppppt/** * Retrieves the value from request scope and if it isn't already an ActionMessages * some classes are converted to one. * * @param pageContext The PageContext for the current page * @param paramName Key for parameter value */ ptgetActionMessagesq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Ipq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥t´ ActionMessages am = new ActionMessages(); Object value = pageContext.getAttribute(paramName, PageContext.REQUEST_SCOPE); try { if (value == null) { ; } else if (value instanceof String) { am.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage((String) value)); } else if (value instanceof String[]) { String keys[] = (String[]) value; for (int i = 0; i < keys.length; i++) am.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(keys[i])); } else if (value instanceof ErrorMessages) { String keys[] = ((ErrorMessages) value).getErrors(); if (keys == null) keys = new String[0]; for (int i = 0; i < keys.length; i++) am.add(ActionErrors.GLOBAL_ERROR, new ActionError(keys[i])); } else if (value instanceof ActionMessages) { am = (ActionMessages) value; } else { throw new JspException (messages.getMessage("actionMessages.errors", value.getClass().getName())); } } catch (JspException e) { throw e; } catch (Exception e) { ; } return am; sq~ uq~q~pppq~¥q~¥xqkqmåq²÷q²ssq~isq~ uq~ sq~bsq~ uq~ppppqˆsq~ uq~pppppppt pageContextq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~bsq~ uq~ppppqˆsq~ uq~ppppppptparamIdq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqˆsq~ uq~pppppppt paramNameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqˆsq~ uq~pppppppt paramPropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqˆsq~ uq~pppppppt paramScopeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqˆsq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqˆsq~ uq~ppppppptpropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqˆsq~ uq~ppppppptscopeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqˆsq~ uq~pppppppt transactionq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xq~%9sq~ uq~ppppptß/** * Compute a set of query parameters that will be dynamically added to * a generated URL. The returned Map is keyed by parameter name, and the * values are either null (no value specified), a String (single value * specified), or a String[] array (multiple values specified). Parameter * names correspond to the corresponding attributes of the * <html:link> tag. If no query parameters are * identified, return null. * * @param pageContext PageContext we are operating in * @param paramId Single-value request parameter name (if any) * @param paramName Bean containing single-value parameter value * @param paramProperty Property (of bean named by paramName * containing single-value parameter value * @param paramScope Scope containing bean named by * paramName * * @param name Bean containing multi-value parameters Map (if any) * @param property Property (of bean named by name * containing multi-value parameters Map * @param scope Scope containing bean named by * name * * @param transaction Should we add our transaction control token? * @return Map of query parameters * @exception JspException if we cannot look up the required beans * @exception JspException if a class cast exception occurs on a * looked-up bean or property */ ptcomputeParametersq~rxsq~ uq~pppppq~–q~—q~–q~¼pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t ( // Short circuit if no parameters are specified if ((paramId == null) && (name == null) && !transaction) return (null); // Locate the Map containing our multi-value parameters map Map map = null; try { if (name != null) map = (Map) lookup(pageContext, name, property, scope); } catch (ClassCastException e) { saveException(pageContext, e); throw new JspException (messages.getMessage("parameters.multi", name, property, scope)); } catch (JspException e) { saveException(pageContext, e); throw e; } // Create a Map to contain our results from the multi-value parameters Map results = null; if (map != null) results = new HashMap(map); else results = new HashMap(); // Add the single-value parameter (if any) if ((paramId != null) && (paramName != null)) { Object paramValue = null; try { paramValue = lookup(pageContext, paramName, paramProperty, paramScope); } catch (JspException e) { saveException(pageContext, e); throw e; } if (paramValue != null) { String paramString = null; if (paramValue instanceof String) paramString = (String) paramValue; else paramString = paramValue.toString(); Object mapValue = results.get(paramId); if (mapValue == null) results.put(paramId, paramString); else if (mapValue instanceof String) { String newValues[] = new String[2]; newValues[0] = (String) mapValue; newValues[1] = paramString; results.put(paramId, newValues); } else /* if (mapValue instanceof String[]) */ { String oldValues[] = (String[]) mapValue; String newValues[] = new String[oldValues.length + 1]; System.arraycopy(oldValues, 0, newValues, 0, oldValues.length); newValues[oldValues.length] = paramString; results.put(paramId, newValues); } } } // Add our transaction control token (if requested) if (transaction) { HttpSession session = pageContext.getSession(); String token = null; if (session != null) token = (String) session.getAttribute(Action.TRANSACTION_TOKEN_KEY); if (token != null) results.put(Constants.TOKEN_KEY, token); } // Return the completed Map return (results); sq~ uq~q~pppq~–q~–xqnsq~isq~ uq~sq~bsq~ uq~ppppqˆ\sq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xsq~bsq~ uq~ppppqˆ\sq~ uq~ppppppptmappingq~rxsq~ uq~pppppq~–q~—q~–q~épq~˜xsq~bsq~ uq~ppppqˆ\sq~ uq~pppppppt appConfigq~rxsq~ uq~pppppq~–q~—q~–q~bpq~˜xsq~bsq~ uq~ppppqˆ\sq~ uq~ppppppptservletq~rxsq~ uq~pppppq~–q~—q~–q~ ppq~˜xq~%9sq~ uq~ppppptï/** * Create (if necessary) and return an ActionForm instance appropriate * for this request. If no ActionForm instance is required, return * null. * * @param request The servlet request we are processing * @param mapping The action mapping for this request * @param appConfig The application configuration for this module * @param servlet The action servlet * @return ActionForm instance associated with this request */ ptcreateActionFormq~rxsq~ uq~pppppq~–q~—q~–q~wpq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–tP // Is there a form bean associated with this mapping? String attribute = mapping.getAttribute(); if (attribute == null) { return (null); } // Look up the form bean configuration information to use String name = mapping.getName(); FormBeanConfig config = appConfig.findFormBeanConfig(name); if (config == null) { return (null); } // Look up any existing form bean instance if (LOG.isDebugEnabled()) { LOG.debug(" Looking for ActionForm bean instance in scope '" + mapping.getScope() + "' under attribute key '" + attribute + "'"); } ActionForm instance = null; HttpSession session = null; if ("request".equals(mapping.getScope())) { instance = (ActionForm) request.getAttribute(attribute); } else { session = request.getSession(); instance = (ActionForm) session.getAttribute(attribute); } // Can we recycle the existing form bean instance (if there is one)? if (instance != null) { if (config.getDynamic()) { String className = ((DynaBean) instance).getDynaClass().getName(); if (className.equals(config.getName())) { if (LOG.isDebugEnabled()) { LOG.debug (" Recycling existing DynaActionForm instance " + "of type '" + className + "'"); LOG.trace(" --> " + instance); } return (instance); } } else { try { Class configClass = applicationClass(config.getType()); if (configClass.isAssignableFrom(instance.getClass())) { if (LOG.isDebugEnabled()) { LOG.debug (" Recycling existing ActionForm instance " + "of class '" + instance.getClass().getName() + "'"); LOG.trace(" --> " + instance); } return (instance); } return (instance); } catch (Throwable t) { LOG.error(servlet.getInternal().getMessage ("formBean", config.getType()), t); return (null); } } } // Create and return a new form bean instance if (config.getDynamic()) { try { DynaActionFormClass dynaClass = DynaActionFormClass.createDynaActionFormClass(config); instance = (ActionForm) dynaClass.newInstance(); if (LOG.isDebugEnabled()) { LOG.debug (" Creating new DynaActionForm instance " + "of type '" + config.getType() + "'"); LOG.trace(" --> " + instance); } } catch (Throwable t) { LOG.error(servlet.getInternal().getMessage ("formBean", config.getType()), t); return (null); } } else { try { instance = (ActionForm) applicationInstance(config.getType()); if (LOG.isDebugEnabled()) { LOG.debug (" Creating new ActionForm instance " + "of type '" + config.getType() + "'"); LOG.trace(" --> " + instance); } } catch (Throwable t) { LOG.error(servlet.getInternal().getMessage ("formBean", config.getType()), t); return (null); } } instance.setServlet(servlet); return (instance); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqˆsq~ uq~pppppppt pageContextq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~bsq~ uq~ppppqˆsq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqˆsq~ uq~ppppppptscopeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpq~%9sq~ uq~ppppptÏ/** * Locate and return the specified bean, from an optionally specified * scope, in the specified page context. If no such bean is found, * return null instead. If an exception is thrown, it will * have already been saved via a call to saveException(). * * @param pageContext Page context to be searched * @param name Name of the bean to be retrieved * @param scope Scope to be searched (page, request, session, application) * or null to use findAttribute() instead * @return JavaBean in the specified page context * @exception JspException if an invalid scope name * is requested */ ptlookupq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t€ Object bean = null; if (scope == null) bean = pageContext.findAttribute(name); else if (scope.equalsIgnoreCase("page")) bean = pageContext.getAttribute(name, PageContext.PAGE_SCOPE); else if (scope.equalsIgnoreCase("request")) bean = pageContext.getAttribute(name, PageContext.REQUEST_SCOPE); else if (scope.equalsIgnoreCase("session")) bean = pageContext.getAttribute(name, PageContext.SESSION_SCOPE); else if (scope.equalsIgnoreCase("application")) bean = pageContext.getAttribute(name, PageContext.APPLICATION_SCOPE); else { JspException e = new JspException (messages.getMessage("lookup.scope", scope)); saveException(pageContext, e); throw e; } return (bean); sq~ uq~q~pppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqˆ¶sq~ uq~pppppppt pageContextq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~bsq~ uq~ppppqˆ¶sq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqˆ¶sq~ uq~ppppppptpropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqˆ¶sq~ uq~ppppppptscopeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xq~%9sq~ uq~pppppt$/** * Locate and return the specified property of the specified bean, from * an optionally specified scope, in the specified page context. If an * exception is thrown, it will have already been saved via a call to * saveException(). * * @param pageContext Page context to be searched * @param name Name of the bean to be retrieved * @param property Name of the property to be retrieved, or * null to retrieve the bean itself * @param scope Scope to be searched (page, request, session, application) * or null to use findAttribute() instead * @return property of specified JavaBean * * @exception JspException if an invalid scope name * is requested * @exception JspException if the specified bean is not found * @exception JspException if accessing this property causes an * IllegalAccessException, IllegalArgumentException, * InvocationTargetException, or NoSuchMethodException */ ptlookupq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t¼ // Look up the requested bean, and return if requested Object bean = lookup(pageContext, name, scope); if (bean == null) { JspException e = null; if (scope == null) { e = new JspException (messages.getMessage("lookup.bean.any", name)); } else { e = new JspException (messages.getMessage("lookup.bean", name, scope)); } saveException(pageContext, e); throw e; } if (property == null) return (bean); // Locate and return the specified property try { return (PropertyUtils.getProperty(bean, property)); } catch (IllegalAccessException e) { saveException(pageContext, e); throw new JspException (messages.getMessage("lookup.access", property, name)); } catch (InvocationTargetException e) { Throwable t = e.getTargetException(); if (t == null) t = e; saveException(pageContext, t); throw new JspException (messages.getMessage("lookup.target", property, name)); } catch (NoSuchMethodException e) { saveException(pageContext, e); throw new JspException (messages.getMessage("lookup.method", property, name)); } sq~ uq~q~pppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqˆçsq~ uq~pppppppt pageContextq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~bsq~ uq~ppppqˆçsq~ uq~ppppppptlocaleq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xppq~%9sq~ uq~pppppt/** * Look up and return current user locale, based on the specified parameters. * * @param pageContext The PageContext associated with this request * @param locale Name of the session attribute for our user's Locale * @return current user locale */ ptretrieveUserLocaleq~rxsq~ uq~pppppq~–q~—q~–q~5pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t" if (locale == null) locale = Action.LOCALE_KEY; Locale userLocale = (Locale) pageContext.getAttribute(locale, PageContext.SESSION_SCOPE); if (userLocale == null) userLocale = defaultLocale; return userLocale; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‰sq~ uq~pppppppt pageContextq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~bsq~ uq~ppppq‰sq~ uq~ppppppptbundleq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq‰sq~ uq~ppppppptlocaleq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq‰sq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xq~%9sq~ uq~pppppt0/** * Look up and return a message string, based on the specified parameters. * * @param pageContext The PageContext associated with this request * @param bundle Name of the servlet context attribute for our * message resources bundle * @param locale Name of the session attribute for our user's Locale * @param key Message key to be looked up and returned * @return message string * * @exception JspException if a lookup error occurs (will have been * saved in the request already) */ ptmessageq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–tM return (message(pageContext, bundle, locale, key, null)); sq~ uq~q~pppq~–q~–xsq~isq~ uq~ sq~bsq~ uq~ppppq‰9sq~ uq~pppppppt pageContextq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~bsq~ uq~ppppq‰9sq~ uq~ppppppptbundleq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq‰9sq~ uq~ppppppptlocaleq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq‰9sq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq‰9sq~ uq~ppppppptargsq~rxsq~ uq~pppppq~–q~—q~–q~«t[]q@ xppppq~%9sq~ uq~ppppptd/** * Look up and return a message string, based on the specified parameters. * * @param pageContext The PageContext associated with this request * @param bundle Name of the servlet context attribute for our * message resources bundle * @param locale Name of the session attribute for our user's Locale * @param key Message key to be looked up and returned * @param args Replacement parameters for this message * @return message string * @exception JspException if a lookup error occurs (will have been * saved in the request already) */ ptmessageq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t‘ MessageResources resources = null; // Look up the requested MessageResources if (bundle == null) { bundle = Action.MESSAGES_KEY; resources = (MessageResources) pageContext.getAttribute(bundle, PageContext.REQUEST_SCOPE); } if (resources == null) { resources = (MessageResources) pageContext.getAttribute(bundle, PageContext.APPLICATION_SCOPE); } if (resources == null) { JspException e = new JspException (messages.getMessage("message.bundle", bundle)); saveException(pageContext, e); throw e; } // Look up the requested Locale if (locale == null) locale = Action.LOCALE_KEY; Locale userLocale = retrieveUserLocale( pageContext, locale ); // Return the requested message if (args == null) { return (resources.getMessage(userLocale, key)); } else { return (resources.getMessage(userLocale, key, args)); } sq~ uq~q~pppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‰ssq~ uq~ppppppptbeanq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~bsq~ uq~ppppq‰ssq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xppq~%9sq~ uq~pppppt•/** * Populate the properties of the specified JavaBean from the specified * HTTP request, based on matching each parameter name against the * corresponding JavaBeans "property setter" methods in the bean's class. * Suitable conversion is done for argument types as described under * convert(). * * @param bean The JavaBean whose properties are to be set * @param request The HTTP request whose parameters are to be used * to populate bean properties * * @exception ServletException if an exception is thrown while setting * property values */ ptpopulateq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t8 populate(bean, null, null, request); sq~ uq~q~¦pppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‰”sq~ uq~ppppppptbeanq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~bsq~ uq~ppppq‰”sq~ uq~ppppppptprefixq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq‰”sq~ uq~ppppppptsuffixq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq‰”sq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xq~%9sq~ uq~pppppt…/** * Populate the properties of the specified JavaBean from the specified * HTTP request, based on matching each parameter name (plus an optional * prefix and/or suffix) against the corresponding JavaBeans "property * setter" methods in the bean's class. Suitable conversion is done for * argument types as described under setProperties(). *

      * If you specify a non-null prefix and a non-null * suffix, the parameter name must match both * conditions for its value(s) to be used in populating bean properties. * If the request's content type is "multipart/form-data" and the * method is "POST", the HttpServletRequest object will be wrapped in * a MultipartRequestWrapper object. * * @param bean The JavaBean whose properties are to be set * @param prefix The prefix (if any) to be prepend to bean property * names when looking for matching parameters * @param suffix The suffix (if any) to be appended to bean property * names when looking for matching parameters * @param request The HTTP request whose parameters are to be used * to populate bean properties * * @exception ServletException if an exception is thrown while setting * property values */ ptpopulateq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t // Build a list of relevant request parameters from this request HashMap properties = new HashMap(); // Iterator of parameter names Enumeration names = null; // Hashtable for multipart values Hashtable multipartElements = null; String contentType = request.getContentType(); String method = request.getMethod(); boolean isMultipart = false; if ((contentType != null) && (contentType.startsWith("multipart/form-data")) && (method.equalsIgnoreCase("POST"))) { // Get the ActionServletWrapper from the form bean ActionServletWrapper servlet; if (bean instanceof ActionForm) { servlet = ((ActionForm) bean).getServletWrapper(); } else { throw new ServletException("bean that's supposed to be " + "populated from a multipart request is not of type " + "\"org.apache.struts.action.ActionForm\", but type " + "\"" + bean.getClass().getName() + "\""); } // Obtain a MultipartRequestHandler MultipartRequestHandler multipartHandler = getMultipartHandler(request); // Set the multipart request handler for our ActionForm. // If the bean isn't an ActionForm, an exception would have been // thrown earlier, so it's safe to assume that our bean is // in fact an ActionForm. ((ActionForm) bean).setMultipartRequestHandler(multipartHandler); if (multipartHandler != null) { isMultipart = true; // Set servlet and mapping info servlet.setServletFor(multipartHandler); multipartHandler.setMapping((ActionMapping) request.getAttribute(Action.MAPPING_KEY)); // Initialize multipart request class handler multipartHandler.handleRequest(request); //stop here if the maximum length has been exceeded Boolean maxLengthExceeded = (Boolean) request.getAttribute(MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED); if ((maxLengthExceeded != null) && (maxLengthExceeded.booleanValue())) { return; } //retrive form values and put into properties multipartElements = multipartHandler.getAllElements(); names = multipartElements.keys(); } request.removeAttribute(Action.MAPPING_KEY); } if (!isMultipart) { names = request.getParameterNames(); } while (names.hasMoreElements()) { String name = (String) names.nextElement(); String stripped = name; if (prefix != null) { if (!stripped.startsWith(prefix)) continue; stripped = stripped.substring(prefix.length()); } if (suffix != null) { if (!stripped.endsWith(suffix)) continue; stripped = stripped.substring(0, stripped.length() - suffix.length()); } if (isMultipart) { properties.put(stripped, multipartElements.get(name)); } else { properties.put(stripped, request.getParameterValues(name)); } } // Set the corresponding properties of our bean try { BeanUtils.populate(bean, properties); } catch (Exception e) { throw new ServletException("BeanUtils.populate", e); } sq~ uq~q~¦pppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‰Åsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xpppq~%9sq~ uq~ppppptr/** * Try to locate a multipart request handler for this request. First, look * for a mapping-specific handler stored for us under an attribute. If one * is not present, use the global multipart handler, if there is one. * * @param request The HTTP request for which the multipart handler should * be found. * @return the multipart handler to use, or null if none is * found. * * @exception ServletException if any exception is thrown while attempting * to locate the multipart handler. */ ptgetMultipartHandlerq~rxsq~ uq~pppppq~–q~—q~–q~’pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~'bxq~–t y MultipartRequestHandler multipartHandler = null; String multipartClass = (String) request.getAttribute(Action.MULTIPART_KEY); request.removeAttribute(Action.MULTIPART_KEY); // Try to initialize the mapping specific request handler if (multipartClass != null) { try { multipartHandler = (MultipartRequestHandler) applicationInstance(multipartClass); } catch (ClassNotFoundException cnfe) { LOG.error("MultipartRequestHandler class \"" + multipartClass + "\" in mapping class not found, " + "defaulting to global multipart class"); } catch (InstantiationException ie) { LOG.error("InstantiaionException when instantiating " + "MultipartRequestHandler \"" + multipartClass + "\", " + "defaulting to global multipart class, exception: " + ie.getMessage()); } catch (IllegalAccessException iae) { LOG.error("IllegalAccessException when instantiating " + "MultipartRequestHandler \"" + multipartClass + "\", " + "defaulting to global multipart class, exception: " + iae.getMessage()); } if (multipartHandler != null) return multipartHandler; } ApplicationConfig appConfig = (ApplicationConfig) request.getAttribute(Action.APPLICATION_KEY); multipartClass = appConfig.getControllerConfig().getMultipartClass(); // Try to initialize the global request handler if (multipartClass != null) { try { multipartHandler = (MultipartRequestHandler) applicationInstance(multipartClass); } catch (ClassNotFoundException cnfe) { throw new ServletException("Cannot find multipart class \"" + multipartClass + "\"" + ", exception: " + cnfe.getMessage()); } catch (InstantiationException ie) { throw new ServletException( "InstantiaionException when instantiating " + "multipart class \"" + multipartClass + "\", exception: " + ie.getMessage()); } catch (IllegalAccessException iae) { throw new ServletException( "IllegalAccessException when instantiating " + "multipart class \"" + multipartClass + "\", exception: " + iae.getMessage()); } if (multipartHandler != null) return multipartHandler; } return multipartHandler; sq~ uq~q~¦pppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‰Þsq~ uq~pppppppt pageContextq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~bsq~ uq~ppppq‰Þsq~ uq~ppppppptbundleq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq‰Þsq~ uq~ppppppptlocaleq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq‰Þsq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xq~%9sq~ uq~ppppptl/** * Return true if a message string for the specified message key * is present for the specified Locale. * * @param pageContext The PageContext associated with this request * @param bundle Name of the servlet context attribute for our * message resources bundle * @param locale Name of the session attribute for our user's Locale * @param key Message key to be looked up and returned * @return true if a message string for message key exists * @exception JspException if a lookup error occurs (will have been * saved in the request already) */ ptpresentq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–tu MessageResources resources = null; // Look up the requested MessageResources if (bundle == null) { bundle = Action.MESSAGES_KEY; resources = (MessageResources) pageContext.getAttribute(bundle); } if (resources == null) { resources = (MessageResources) pageContext.getAttribute(bundle, PageContext.APPLICATION_SCOPE); } if (resources == null) { JspException e = new JspException (messages.getMessage("message.bundle", bundle)); saveException(pageContext, e); throw e; } // Look up the requested Locale if (locale == null) locale = Action.LOCALE_KEY; Locale userLocale = (Locale) pageContext.getAttribute(locale, PageContext.SESSION_SCOPE); if (userLocale == null) userLocale = defaultLocale; // Return the requested message presence indicator return (resources.isPresent(userLocale, key)); sq~ uq~q~pppq~–q~–xq‚Ãsq~isq~ uq~sq~bsq~ uq~ppppqŠsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xsq~bsq~ uq~ppppqŠsq~ uq~ppppppptactionq~rxsq~ uq~pppppq~–q~—q~–q~+pq~˜xsq~bsq~ uq~ppppqŠsq~ uq~ppppppptpatternq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpq~%9sq~ uq~pppppt /** * Return the context-relative URL that corresponds to the specified * {@link ActionConfig}, relative to the application module associated * with the current modules's {@link ApplicationConfig}. * * @param request The servlet request we are processing * @param action ActionConfig to be evaluated * @param pattern URL pattern used to map the controller servlet * @return context-relative URL relative to the application module * * @since Struts 1.1b2 */ pt actionURLq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t{ StringBuffer sb = new StringBuffer(); if (pattern.endsWith("/*")) { sb.append(pattern.substring(0, pattern.length() - 2)); sb.append(action.getPath()); } else if (pattern.startsWith("*.")) { ApplicationConfig appConfig = (ApplicationConfig) request.getAttribute(Action.APPLICATION_KEY); sb.append(appConfig.getPrefix()); sb.append(action.getPath()); sb.append(pattern.substring(1)); } else { throw new IllegalArgumentException(pattern); } return (sb.toString()); sq~ uq~ppppq~–q~–xq£þsq~isq~ uq~sq~bsq~ uq~ppppqŠ8sq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xsq~bsq~ uq~ppppqŠ8sq~ uq~ppppppptpageq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xppq~%9sq~ uq~pppppt/** * Return the context-relative URL that corresponds to the specified * page attribute value, calculated based on the * pagePattern property of the current module's * {@link ApplicationConfig}. * * @param request The servlet request we are processing * @param page The module-relative URL to be substituted in * to the pagePattern pattern for the current module. * @return context-relative URL * @since Struts 1.1b2 */ ptpageURLq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t2 StringBuffer sb = new StringBuffer(); ApplicationConfig appConfig = (ApplicationConfig) request.getAttribute(Action.APPLICATION_KEY); String pagePattern = appConfig.getControllerConfig().getPagePattern(); if (pagePattern == null) { sb.append(appConfig.getPrefix()); sb.append(page); } else { boolean dollar = false; for (int i = 0; i < pagePattern.length(); i++) { char ch = pagePattern.charAt(i); if (dollar) { switch (ch) { case 'M': sb.append(appConfig.getPrefix()); break; case 'P': sb.append(page); break; case '$': sb.append('$'); break; default: ; // Silently swallow } dollar = false; continue; } else if (ch == '$') { dollar = true; } else { sb.append(ch); } } } return (sb.toString()); sq~ uq~ppppq~–q~–xqnOqnhq̃sq~isq~ uq~sq~bsq~ uq~ppppqŠYsq~ uq~ppppppptprefixq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqŠYsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xsq~bsq~ uq~ppppqŠYsq~ uq~ppppppptcontextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xpq~%9sq~ uq~pppppto/** * Select the application module to which the specified request belongs, and * add corresponding request attributes to this request. * * @param prefix The module prefix of the desired application module * @param request The servlet request we are processing * @param context The ServletContext for this web application */ ptselectApplicationq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t· // Expose the resources for this application module ApplicationConfig config = (ApplicationConfig) context.getAttribute(Action.APPLICATION_KEY + prefix); if (config != null) { request.setAttribute(Action.APPLICATION_KEY, config); } else { request.removeAttribute(Action.APPLICATION_KEY); } MessageResources resources = (MessageResources) context.getAttribute(Action.MESSAGES_KEY + prefix); if (resources != null) { request.setAttribute(Action.MESSAGES_KEY, resources); } else { request.removeAttribute(Action.MESSAGES_KEY); } sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqŠ‚sq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xsq~bsq~ uq~ppppqŠ‚sq~ uq~ppppppptcontextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xppq~%9sq~ uq~pppppt/** * Select the module to which the specified request belongs, and * add corresponding request attributes to this request. * * @param request The servlet request we are processing * @param context The ServletContext for this web application */ ptselectApplicationq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–tã // Acquire the path used to compute the module String matchPath = (String) request.getAttribute(RequestProcessor.INCLUDE_SERVLET_PATH); if (matchPath == null) { matchPath = request.getServletPath(); } if (LOG.isDebugEnabled()) { LOG.debug("Selecting module for path " + matchPath); } String prefix = ""; // Initialize prefix before we try lookup String prefixes[] = getApplicationPrefixes(context); // Get all other possible prefixes int lastSlash = 0; // Initialize before loop while (prefix.equals("") && ((lastSlash = matchPath.lastIndexOf("/")) != 0)) { // We may be in a non-default module. Try to get it's prefix. matchPath = matchPath.substring(0, lastSlash); // Match against the list of module prefixes for (int i = 0; i < prefixes.length; i++) { if (matchPath.equals(prefixes[i])) { prefix = prefixes[i]; break; } } } if (LOG.isDebugEnabled()) { LOG.debug("Activating module " + (prefix.equals("") ? "default" : prefix)); } // Expose the resources for this module selectApplication(prefix, request, context); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqŠ£sq~ uq~pppppppt pageContextq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xpppq~%9sq~ uq~ppppptÆ/** * Return the ApplicationConfig object is it exists, null otherwise. * @param pageContext The page context. * @return the ApplicationConfig object * @since 1.1b3 */ ptgetApplicationConfigq~rxsq~ uq~pppppq~–q~—q~–q~bpq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–tr ApplicationConfig appConfig = (ApplicationConfig) pageContext.getRequest().getAttribute(Action.APPLICATION_KEY); if (appConfig == null) { // Backwards compatibility hack appConfig = (ApplicationConfig) pageContext.getServletContext().getAttribute(Action.APPLICATION_KEY); } return appConfig; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqмsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xsq~bsq~ uq~ppppqмsq~ uq~ppppppptcontextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xppq~%9sq~ uq~pppppt/** * Return the ApplicationConfig object is it exists, null otherwise. * @param request The servlet request we are processing * @param context The ServletContext for this web application * @return the ApplicationConfig object * @since 1.1b3 */ ptgetApplicationConfigq~rxsq~ uq~pppppq~–q~—q~–q~bpq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t/ ApplicationConfig appConfig = (ApplicationConfig) request.getAttribute(Action.APPLICATION_KEY); if (appConfig == null) { appConfig = (ApplicationConfig) context.getAttribute(Action.APPLICATION_KEY); } return appConfig; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqŠÝsq~ uq~ppppppptcontextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xpppq~%9sq~ uq~pppppt`/** * Return the list of module prefixes that are defined for * this web application, creating it if necessary. NOTE - * the "" prefix for the default module is not included in this list. * * @param context The ServletContext for this web application * @return an array of module prefixes */ ptgetApplicationPrefixesq~rxsq~ uq~pppppq~–q~—q~–q~{t[]q~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t String prefixes[] = (String[]) context.getAttribute(PREFIXES_KEY); if (prefixes != null) { return (prefixes); } ArrayList list = new ArrayList(); Enumeration names = context.getAttributeNames(); while (names.hasMoreElements()) { String name = (String) names.nextElement(); if (!name.startsWith(Action.APPLICATION_KEY)) { continue; } String prefix = name.substring(Action.APPLICATION_KEY.length()); if (prefix.length() > 0) { list.add(prefix); } } prefixes = (String[]) list.toArray(new String[list.size()]); context.setAttribute(PREFIXES_KEY, prefixes); return (prefixes); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqŠ÷sq~ uq~pppppppt pageContextq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~bsq~ uq~ppppqŠ÷sq~ uq~pppppppt paramNameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xppq~%9sq~ uq~ppppptj/** * Retrieves the value from request scope and if it isn't already an ActionMessages * some classes are converted to one. * * @param pageContext The PageContext for the current page * @param paramName Key for parameter value * @return ActionErros in page context. * @throws JspException if */ ptgetActionMessagesq~rxsq~ uq~pppppq~–q~—q~–q~Ipq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–tš ActionMessages am = new ActionMessages(); Object value = pageContext.findAttribute(paramName); try { if (value == null) { ; } else if (value instanceof String) { am.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage((String) value)); } else if (value instanceof String[]) { String keys[] = (String[]) value; for (int i = 0; i < keys.length; i++) am.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(keys[i])); } else if (value instanceof ErrorMessages) { String keys[] = ((ErrorMessages) value).getErrors(); if (keys == null) keys = new String[0]; for (int i = 0; i < keys.length; i++) am.add(ActionErrors.GLOBAL_ERROR, new ActionError(keys[i])); } else if (value instanceof ActionMessages) { am = (ActionMessages) value; } else { throw new JspException (messages.getMessage("actionMessages.errors", value.getClass().getName())); } } catch (JspException e) { throw e; } catch (Exception e) { ; } return am; sq~ uq~q~pppq~–q~–xqìsq~(sq~ uq~ppppq~%9sq~ uq~ppppptø// ------------------------------------------------------- Static Variables /** * Commons Logging instance. */ // ------------------------------------------------------- Static Variables /** * Commons Logging instance. */ ptlogq~{xsq~ uq~pppppq~~q~q~~q~9pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~ xpppt& LogFactory.getLog(RequestUtils.class)q~~q~~q~~xsq~(sq~ uq~ppppq~%9sq~ uq~pppppt¬/** * Java 1.4 encode method to use instead of deprecated 1.3 version. */ /** * Java 1.4 encode method to use instead of deprecated 1.3 version. */ ptencodeq~{xsq~ uq~pppppq~~q~q~~q~Üpq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~d1xpppt nullq~~q~~q~~xsq~(sq~ uq~ppppq~%9sq~ uq~ppppptÆ/** * Maps lowercase JSP scope names to their PageContext integer constant values. */ /** * Maps lowercase JSP scope names to their PageContext integer constant values. */ ptscopesq~{xsq~ uq~pppppq~~q~q~~q~¼pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~d1xpppt new HashMap()q~~q~~q~~xqnq³Aq²œsq~isq~ uq~ sq~bsq~ uq~ppppq‹Esq~ uq~pppppppt pageContextq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~bsq~ uq~ppppq‹Esq~ uq~ppppppptparamIdq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq‹Esq~ uq~pppppppt paramNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq‹Esq~ uq~pppppppt paramPropertyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq‹Esq~ uq~pppppppt paramScopeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq‹Esq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq‹Esq~ uq~ppppppptpropertyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq‹Esq~ uq~ppppppptscopeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq‹Esq~ uq~pppppppt transactionq~{xsq~ uq~pppppq~~q~q~~q~pq~€xq~%9sq~ uq~ppppptß/** * Compute a set of query parameters that will be dynamically added to * a generated URL. The returned Map is keyed by parameter name, and the * values are either null (no value specified), a String (single value * specified), or a String[] array (multiple values specified). Parameter * names correspond to the corresponding attributes of the * <html:link> tag. If no query parameters are * identified, return null. * * @param pageContext PageContext we are operating in * @param paramId Single-value request parameter name (if any) * @param paramName Bean containing single-value parameter value * @param paramProperty Property (of bean named by paramName * containing single-value parameter value * @param paramScope Scope containing bean named by * paramName * * @param name Bean containing multi-value parameters Map (if any) * @param property Property (of bean named by name * containing multi-value parameters Map * @param scope Scope containing bean named by * name * * @param transaction Should we add our transaction control token? * @return Map of query parameters * @exception JspException if we cannot look up the required beans * @exception JspException if a class cast exception occurs on a * looked-up bean or property */ ptcomputeParametersq~{xsq~ uq~pppppq~~q~q~~q~¼pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t ó // Short circuit if no parameters are specified if ((paramId == null) && (name == null) && !transaction) { return (null); } // Locate the Map containing our multi-value parameters map Map map = null; try { if (name != null) { map = (Map) lookup(pageContext, name, property, scope); } } catch (ClassCastException e) { saveException(pageContext, e); throw new JspException(messages.getMessage("parameters.multi", name, property, scope)); } catch (JspException e) { saveException(pageContext, e); throw e; } // Create a Map to contain our results from the multi-value parameters Map results = null; if (map != null) { results = new HashMap(map); } else { results = new HashMap(); } // Add the single-value parameter (if any) if ((paramId != null) && (paramName != null)) { Object paramValue = null; try { paramValue = lookup(pageContext, paramName, paramProperty, paramScope); } catch (JspException e) { saveException(pageContext, e); throw e; } if (paramValue != null) { String paramString = null; if (paramValue instanceof String) { paramString = (String) paramValue; } else { paramString = paramValue.toString(); } Object mapValue = results.get(paramId); if (mapValue == null) { results.put(paramId, paramString); } else if (mapValue instanceof String) { String newValues[] = new String[2]; newValues[0] = (String) mapValue; newValues[1] = paramString; results.put(paramId, newValues); } else /* if (mapValue instanceof String[]) */ { String oldValues[] = (String[]) mapValue; String newValues[] = new String[oldValues.length + 1]; System.arraycopy(oldValues, 0, newValues, 0, oldValues.length); newValues[oldValues.length] = paramString; results.put(paramId, newValues); } } } // Add our transaction control token (if requested) if (transaction) { HttpSession session = pageContext.getSession(); String token = null; if (session != null) { token = (String) session.getAttribute(Globals.TRANSACTION_TOKEN_KEY); } if (token != null) { results.put(Constants.TOKEN_KEY, token); } } // Return the completed Map return (results); sq~ uq~q~pppq~~q~~xqn¢qnësq~isq~ uq~sq~bsq~ uq~ppppq‹žsq~ uq~ppppppptactionq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~%9sq~ uq~ppppptù/** * Return the form action converted into an action mapping path. The * value of the action property is manipulated as follows in * computing the name of the requested mapping: *

        *
      • Any filename extension is removed (on the theory that extension * mapping is being used to select the controller servlet).
      • *
      • If the resulting value does not start with a slash, then a * slash is prepended.
      • *
      */ ptgetActionMappingNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~tý String value = action; int question = action.indexOf("?"); if (question >= 0) { value = value.substring(0, question); } int slash = value.lastIndexOf("/"); int period = value.lastIndexOf("."); if ((period >= 0) && (period > slash)) { value = value.substring(0, period); } if (value.startsWith("/")) { return (value); } else { return ("/" + value); } sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‹·sq~ uq~ppppppptactionq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq‹·sq~ uq~pppppppt pageContextq~{xsq~ uq~pppppq~~q~q~~q~pq~€xppq~%9sq~ uq~ppppptR/** * Return the form action converted into a server-relative URL. */ ptgetActionMappingURLq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); StringBuffer value = new StringBuffer(request.getContextPath()); ModuleConfig config = (ModuleConfig) pageContext.getRequest().getAttribute(Globals.MODULE_KEY); if (config != null) { value.append(config.getPrefix()); } // Use our servlet mapping, if one is specified String servletMapping = (String) pageContext.getAttribute(Globals.SERVLET_KEY, PageContext.APPLICATION_SCOPE); if (servletMapping != null) { String queryString = null; int question = action.indexOf("?"); if (question >= 0) { queryString = action.substring(question); } String actionMapping = getActionMappingName(action); if (servletMapping.startsWith("*.")) { value.append(actionMapping); value.append(servletMapping.substring(1)); } else if (servletMapping.endsWith("/*")) { value.append(servletMapping.substring(0, servletMapping.length() - 2)); value.append(actionMapping); } else if (servletMapping.equals("/")) { value.append(actionMapping); } if (queryString != null) { value.append(queryString); } } // Otherwise, assume extension mapping is in use and extension is // already included in the action property else { if (!action.startsWith("/")) { value.append("/"); } value.append(action); } // Return the completed value return (value.toString()); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‹Øsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xsq~bsq~ uq~ppppq‹Øsq~ uq~ppppppptmappingq~{xsq~ uq~pppppq~~q~q~~q~épq~€xsq~bsq~ uq~ppppq‹Øsq~ uq~pppppppt moduleConfigq~{xsq~ uq~pppppq~~q~q~~q~ºpq~€xsq~bsq~ uq~ppppq‹Øsq~ uq~ppppppptservletq~{xsq~ uq~pppppq~~q~q~~q~ ppq~€xq~%9sq~ uq~ppppptæ/** * Create (if necessary) and return an ActionForm instance appropriate * for this request. If no ActionForm instance is required, return * null. * * @param request The servlet request we are processing * @param mapping The action mapping for this request * @param moduleConfig The configuration for this module * @param servlet The action servlet * @return ActionForm instance associated with this request */ ptcreateActionFormq~{xsq~ uq~pppppq~~q~q~~q~wpq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t // Is there a form bean associated with this mapping? String attribute = mapping.getAttribute(); if (attribute == null) { return (null); } // Look up the form bean configuration information to use String name = mapping.getName(); FormBeanConfig config = moduleConfig.findFormBeanConfig(name); if (config == null) { return (null); } // Look up any existing form bean instance if (log.isDebugEnabled()) { log.debug( " Looking for ActionForm bean instance in scope '" + mapping.getScope() + "' under attribute key '" + attribute + "'"); } ActionForm instance = null; HttpSession session = null; if ("request".equals(mapping.getScope())) { instance = (ActionForm) request.getAttribute(attribute); } else { session = request.getSession(); instance = (ActionForm) session.getAttribute(attribute); } // Can we recycle the existing form bean instance (if there is one)? if (instance != null) { if (config.getDynamic()) { String className = ((DynaBean) instance).getDynaClass().getName(); if (className.equals(config.getName())) { if (log.isDebugEnabled()) { log.debug( " Recycling existing DynaActionForm instance " + "of type '" + className + "'"); log.trace(" --> " + instance); } return (instance); } } else { try { Class configClass = applicationClass(config.getType()); if (configClass.isAssignableFrom(instance.getClass())) { if (log.isDebugEnabled()) { log.debug( " Recycling existing ActionForm instance " + "of class '" + instance.getClass().getName() + "'"); log.trace(" --> " + instance); } return (instance); } } catch (Throwable t) { log.error(servlet.getInternal().getMessage("formBean", config.getType()), t); return (null); } } } // Create and return a new form bean instance if (config.getDynamic()) { try { DynaActionFormClass dynaClass = DynaActionFormClass.createDynaActionFormClass(config); instance = (ActionForm) dynaClass.newInstance(); ((DynaActionForm) instance).initialize(mapping); if (log.isDebugEnabled()) { log.debug( " Creating new DynaActionForm instance " + "of type '" + config.getType() + "'"); log.trace(" --> " + instance); } } catch (Throwable t) { log.error(servlet.getInternal().getMessage("formBean", config.getType()), t); return (null); } } else { try { instance = (ActionForm) applicationInstance(config.getType()); if (log.isDebugEnabled()) { log.debug( " Creating new ActionForm instance " + "of type '" + config.getType() + "'"); log.trace(" --> " + instance); } } catch (Throwable t) { log.error(servlet.getInternal().getMessage("formBean", config.getType()), t); return (null); } } instance.setServlet(servlet); return (instance); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqŒ sq~ uq~pppppppt pageContextq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~bsq~ uq~ppppqŒ sq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqŒ sq~ uq~pppppppt scopeNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpq~%9sq~ uq~ppppptÓ/** * Locate and return the specified bean, from an optionally specified * scope, in the specified page context. If no such bean is found, * return null instead. If an exception is thrown, it will * have already been saved via a call to saveException(). * * @param pageContext Page context to be searched * @param name Name of the bean to be retrieved * @param scopeName Scope to be searched (page, request, session, application) * or null to use findAttribute() instead * @return JavaBean in the specified page context * @exception JspException if an invalid scope name * is requested */ ptlookupq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~tI if (scopeName == null) { return pageContext.findAttribute(name); } try { return pageContext.getAttribute(name, getScope(scopeName)); } catch (JspException e) { saveException(pageContext, e); throw e; } sq~ uq~q~pppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqŒ2sq~ uq~pppppppt scopeNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~%9sq~ uq~ppppptv/** * Converts the scope name into its corresponding PageContext constant value. * @param scopeName Can be "page", "request", "session", or "application" in any * case. * @return The constant representing the scope (ie. PageContext.REQUEST_SCOPE). * @throws JspException if the scopeName is not a valid name. * @since Struts 1.1 */ ptgetScopeq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~tÍ Integer scope = (Integer) scopes.get(scopeName.toLowerCase()); if (scope == null) { throw new JspException(messages.getMessage("lookup.scope", scope)); } return scope.intValue(); sq~ uq~q~pppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqŒKsq~ uq~pppppppt pageContextq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~bsq~ uq~ppppqŒKsq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqŒKsq~ uq~ppppppptpropertyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqŒKsq~ uq~ppppppptscopeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xq~%9sq~ uq~pppppt$/** * Locate and return the specified property of the specified bean, from * an optionally specified scope, in the specified page context. If an * exception is thrown, it will have already been saved via a call to * saveException(). * * @param pageContext Page context to be searched * @param name Name of the bean to be retrieved * @param property Name of the property to be retrieved, or * null to retrieve the bean itself * @param scope Scope to be searched (page, request, session, application) * or null to use findAttribute() instead * @return property of specified JavaBean * * @exception JspException if an invalid scope name * is requested * @exception JspException if the specified bean is not found * @exception JspException if accessing this property causes an * IllegalAccessException, IllegalArgumentException, * InvocationTargetException, or NoSuchMethodException */ ptlookupq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t  // Look up the requested bean, and return if requested Object bean = lookup(pageContext, name, scope); if (bean == null) { JspException e = null; if (scope == null) { e = new JspException(messages.getMessage("lookup.bean.any", name)); } else { e = new JspException(messages.getMessage("lookup.bean", name, scope)); } saveException(pageContext, e); throw e; } if (property == null) { return bean; } // Locate and return the specified property try { return PropertyUtils.getProperty(bean, property); } catch (IllegalAccessException e) { saveException(pageContext, e); throw new JspException(messages.getMessage("lookup.access", property, name)); } catch (InvocationTargetException e) { Throwable t = e.getTargetException(); if (t == null) { t = e; } saveException(pageContext, t); throw new JspException(messages.getMessage("lookup.target", property, name)); } catch (NoSuchMethodException e) { saveException(pageContext, e); throw new JspException(messages.getMessage("lookup.method", property, name)); } sq~ uq~q~pppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqŒ|sq~ uq~pppppppt pageContextq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~bsq~ uq~ppppqŒ|sq~ uq~ppppppptlocaleq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xppq~%9sq~ uq~ppppptv/** * Look up and return current user locale, based on the specified parameters. * * @param pageContext The PageContext associated with this request * @param locale Name of the session attribute for our user's Locale. If this is * null, the default locale key is used for the lookup. * @return current user locale */ ptretrieveUserLocaleq~{xsq~ uq~pppppq~~q~q~~q~5pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~tA Locale userLocale = null; HttpSession session = pageContext.getSession(); if (locale == null) { locale = Globals.LOCALE_KEY; } // Only check session if sessions are enabled if (session != null) { userLocale = (Locale) session.getAttribute(locale); } if (userLocale == null) { // Returns Locale based on Accept-Language header or the server default userLocale = pageContext.getRequest().getLocale(); } return userLocale; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqŒsq~ uq~pppppppt pageContextq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~bsq~ uq~ppppqŒsq~ uq~ppppppptbundleq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqŒsq~ uq~ppppppptlocaleq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqŒsq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xq~%9sq~ uq~pppppt0/** * Look up and return a message string, based on the specified parameters. * * @param pageContext The PageContext associated with this request * @param bundle Name of the servlet context attribute for our * message resources bundle * @param locale Name of the session attribute for our user's Locale * @param key Message key to be looked up and returned * @return message string * * @exception JspException if a lookup error occurs (will have been * saved in the request already) */ ptmessageq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~tM return (message(pageContext, bundle, locale, key, null)); sq~ uq~q~pppq~~q~~xsq~isq~ uq~ sq~bsq~ uq~ppppqŒÎsq~ uq~pppppppt pageContextq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~bsq~ uq~ppppqŒÎsq~ uq~ppppppptbundleq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqŒÎsq~ uq~ppppppptlocaleq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqŒÎsq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqŒÎsq~ uq~ppppppptargsq~{xsq~ uq~pppppq~~q~q~~q~«t[]q~~­xppppq~%9sq~ uq~ppppptd/** * Look up and return a message string, based on the specified parameters. * * @param pageContext The PageContext associated with this request * @param bundle Name of the servlet context attribute for our * message resources bundle * @param locale Name of the session attribute for our user's Locale * @param key Message key to be looked up and returned * @param args Replacement parameters for this message * @return message string * @exception JspException if a lookup error occurs (will have been * saved in the request already) */ ptmessageq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~to MessageResources resources = retrieveMessageResources(pageContext, bundle); Locale userLocale = retrieveUserLocale(pageContext, locale); if (args == null) { return (resources.getMessage(userLocale, key)); } else { return (resources.getMessage(userLocale, key, args)); } sq~ uq~q~pppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqsq~ uq~pppppppt pageContextq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~bsq~ uq~ppppqsq~ uq~ppppppptbundleq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xppq~%9sq~ uq~ppppptc/** * Returns the appropriate MessageResources object for the current module and * the given bundle. * * @param pageContext Search the context's scopes for the resources. * @param bundle The bundle name to look for. If this is null, the * default bundle name is used. * @return MessageResources The bundle's resources stored in some scope. * @throws JspException if the MessageResources object could not be found. * * @FIXME The bundle name needs the module prefix appended to it before searching * to fix PR# 11932. */ ptretrieveMessageResourcesq~{xsq~ uq~pppppq~~q~q~~q~-pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~d1xq~~tÚ MessageResources resources = null; if (bundle == null) { bundle = Globals.MESSAGES_KEY; } resources = (MessageResources) pageContext.getAttribute( bundle, PageContext.PAGE_SCOPE); if (resources == null) { resources = (MessageResources) pageContext.getAttribute( bundle, PageContext.REQUEST_SCOPE); } if (resources == null) { resources = (MessageResources) pageContext.getAttribute( bundle, PageContext.APPLICATION_SCOPE); } if (resources == null) { JspException e = new JspException(messages.getMessage("message.bundle", bundle)); saveException(pageContext, e); throw e; } return resources; sq~ uq~q~pppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq)sq~ uq~ppppppptbeanq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~bsq~ uq~ppppq)sq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xppq~%9sq~ uq~pppppt•/** * Populate the properties of the specified JavaBean from the specified * HTTP request, based on matching each parameter name against the * corresponding JavaBeans "property setter" methods in the bean's class. * Suitable conversion is done for argument types as described under * convert(). * * @param bean The JavaBean whose properties are to be set * @param request The HTTP request whose parameters are to be used * to populate bean properties * * @exception ServletException if an exception is thrown while setting * property values */ ptpopulateq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t8 populate(bean, null, null, request); sq~ uq~q~¦pppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqJsq~ uq~ppppppptbeanq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~bsq~ uq~ppppqJsq~ uq~ppppppptprefixq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqJsq~ uq~ppppppptsuffixq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqJsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xq~%9sq~ uq~pppppt…/** * Populate the properties of the specified JavaBean from the specified * HTTP request, based on matching each parameter name (plus an optional * prefix and/or suffix) against the corresponding JavaBeans "property * setter" methods in the bean's class. Suitable conversion is done for * argument types as described under setProperties(). *

      * If you specify a non-null prefix and a non-null * suffix, the parameter name must match both * conditions for its value(s) to be used in populating bean properties. * If the request's content type is "multipart/form-data" and the * method is "POST", the HttpServletRequest object will be wrapped in * a MultipartRequestWrapper object. * * @param bean The JavaBean whose properties are to be set * @param prefix The prefix (if any) to be prepend to bean property * names when looking for matching parameters * @param suffix The suffix (if any) to be appended to bean property * names when looking for matching parameters * @param request The HTTP request whose parameters are to be used * to populate bean properties * * @exception ServletException if an exception is thrown while setting * property values */ ptpopulateq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t… // Build a list of relevant request parameters from this request HashMap properties = new HashMap(); // Iterator of parameter names Enumeration names = null; // Map for multipart parameters Map multipartParameters = null; String contentType = request.getContentType(); String method = request.getMethod(); boolean isMultipart = false; if ((contentType != null) && (contentType.startsWith("multipart/form-data")) && (method.equalsIgnoreCase("POST"))) { // Get the ActionServletWrapper from the form bean ActionServletWrapper servlet; if (bean instanceof ActionForm) { servlet = ((ActionForm) bean).getServletWrapper(); } else { throw new ServletException( "bean that's supposed to be " + "populated from a multipart request is not of type " + "\"org.apache.struts.action.ActionForm\", but type " + "\"" + bean.getClass().getName() + "\""); } // Obtain a MultipartRequestHandler MultipartRequestHandler multipartHandler = getMultipartHandler(request); // Set the multipart request handler for our ActionForm. // If the bean isn't an ActionForm, an exception would have been // thrown earlier, so it's safe to assume that our bean is // in fact an ActionForm. ((ActionForm) bean).setMultipartRequestHandler(multipartHandler); if (multipartHandler != null) { isMultipart = true; // Set servlet and mapping info servlet.setServletFor(multipartHandler); multipartHandler.setMapping( (ActionMapping) request.getAttribute(Globals.MAPPING_KEY)); // Initialize multipart request class handler multipartHandler.handleRequest(request); //stop here if the maximum length has been exceeded Boolean maxLengthExceeded = (Boolean) request.getAttribute( MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED); if ((maxLengthExceeded != null) && (maxLengthExceeded.booleanValue())) { return; } //retrive form values and put into properties multipartParameters = getAllParametersForMultipartRequest( request, multipartHandler); names = Collections.enumeration(multipartParameters.keySet()); } } if (!isMultipart) { names = request.getParameterNames(); } while (names.hasMoreElements()) { String name = (String) names.nextElement(); String stripped = name; if (prefix != null) { if (!stripped.startsWith(prefix)) { continue; } stripped = stripped.substring(prefix.length()); } if (suffix != null) { if (!stripped.endsWith(suffix)) { continue; } stripped = stripped.substring(0, stripped.length() - suffix.length()); } if (isMultipart) { properties.put(stripped, multipartParameters.get(name)); } else { properties.put(stripped, request.getParameterValues(name)); } } // Set the corresponding properties of our bean try { BeanUtils.populate(bean, properties); } catch (Exception e) { throw new ServletException("BeanUtils.populate", e); } sq~ uq~q~¦pppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq{sq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xpppq~%9sq~ uq~ppppptr/** * Try to locate a multipart request handler for this request. First, look * for a mapping-specific handler stored for us under an attribute. If one * is not present, use the global multipart handler, if there is one. * * @param request The HTTP request for which the multipart handler should * be found. * @return the multipart handler to use, or null if none is * found. * * @exception ServletException if any exception is thrown while attempting * to locate the multipart handler. */ ptgetMultipartHandlerq~{xsq~ uq~pppppq~~q~q~~q~’pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~d1xq~~t ¦ MultipartRequestHandler multipartHandler = null; String multipartClass = (String) request.getAttribute(Globals.MULTIPART_KEY); request.removeAttribute(Globals.MULTIPART_KEY); // Try to initialize the mapping specific request handler if (multipartClass != null) { try { multipartHandler = (MultipartRequestHandler) applicationInstance(multipartClass); } catch (ClassNotFoundException cnfe) { log.error( "MultipartRequestHandler class \"" + multipartClass + "\" in mapping class not found, " + "defaulting to global multipart class"); } catch (InstantiationException ie) { log.error( "InstantiaionException when instantiating " + "MultipartRequestHandler \"" + multipartClass + "\", " + "defaulting to global multipart class, exception: " + ie.getMessage()); } catch (IllegalAccessException iae) { log.error( "IllegalAccessException when instantiating " + "MultipartRequestHandler \"" + multipartClass + "\", " + "defaulting to global multipart class, exception: " + iae.getMessage()); } if (multipartHandler != null) { return multipartHandler; } } ModuleConfig moduleConfig = (ModuleConfig) request.getAttribute(Globals.MODULE_KEY); multipartClass = moduleConfig.getControllerConfig().getMultipartClass(); // Try to initialize the global request handler if (multipartClass != null) { try { multipartHandler = (MultipartRequestHandler) applicationInstance(multipartClass); } catch (ClassNotFoundException cnfe) { throw new ServletException( "Cannot find multipart class \"" + multipartClass + "\"" + ", exception: " + cnfe.getMessage()); } catch (InstantiationException ie) { throw new ServletException( "InstantiaionException when instantiating " + "multipart class \"" + multipartClass + "\", exception: " + ie.getMessage()); } catch (IllegalAccessException iae) { throw new ServletException( "IllegalAccessException when instantiating " + "multipart class \"" + multipartClass + "\", exception: " + iae.getMessage()); } if (multipartHandler != null) { return multipartHandler; } } return multipartHandler; sq~ uq~q~¦pppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq”sq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xsq~bsq~ uq~ppppq”sq~ uq~ppppppptmultipartHandlerq~{xsq~ uq~pppppq~~q~q~~q~’pq~€xppq~%9sq~ uq~pppppt /** * Create a map containing all of the parameters supplied for a multipart * request, keyed by parameter name. In addition to text and file elements * from the multipart body, query string parameters are included as well. * * @param request The (wrapped) HTTP request whose parameters are to be * added to the map. * @param multipartHandler The multipart handler used to parse the request. * * @return the map containing all parameters for this multipart request. */ pt#getAllParametersForMultipartRequestq~{xsq~ uq~pppppq~~q~q~~q~¼pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~d1xq~~tO Map parameters = new HashMap(); Enumeration enum; Hashtable elements = multipartHandler.getAllElements(); enum = elements.keys(); while (enum.hasMoreElements()) { String key = (String) enum.nextElement(); parameters.put(key, elements.get(key)); } if (request instanceof MultipartRequestWrapper) { request = ((MultipartRequestWrapper)request).getRequest(); enum = request.getParameterNames(); while (enum.hasMoreElements()) { String key = (String) enum.nextElement(); parameters.put(key, request.getParameterValues(key)); } } else { log.debug("Gathering multipart parameters for unwrapped request"); } return parameters; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqµsq~ uq~pppppppt pageContextq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~bsq~ uq~ppppqµsq~ uq~ppppppptbundleq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqµsq~ uq~ppppppptlocaleq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqµsq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xq~%9sq~ uq~ppppptl/** * Return true if a message string for the specified message key * is present for the specified Locale. * * @param pageContext The PageContext associated with this request * @param bundle Name of the servlet context attribute for our * message resources bundle * @param locale Name of the session attribute for our user's Locale * @param key Message key to be looked up and returned * @return true if a message string for message key exists * @exception JspException if a lookup error occurs (will have been * saved in the request already) */ ptpresentq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~tÎ MessageResources resources = retrieveMessageResources(pageContext, bundle); Locale userLocale = retrieveUserLocale(pageContext, locale); return (resources.isPresent(userLocale, key)); sq~ uq~q~pppq~~q~~xq‚Üsq~isq~ uq~sq~bsq~ uq~ppppqæsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xsq~bsq~ uq~ppppqæsq~ uq~ppppppptactionq~{xsq~ uq~pppppq~~q~q~~q~+pq~€xsq~bsq~ uq~ppppqæsq~ uq~ppppppptpatternq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpq~%9sq~ uq~ppppptí/** * Return the context-relative URL that corresponds to the specified * {@link ActionConfig}, relative to the module associated * with the current modules's {@link ModuleConfig}. * * @param request The servlet request we are processing * @param action ActionConfig to be evaluated * @param pattern URL pattern used to map the controller servlet * @return context-relative URL relative to the module * * @since Struts 1.1 */ pt actionURLq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t\ StringBuffer sb = new StringBuffer(); if (pattern.endsWith("/*")) { sb.append(pattern.substring(0, pattern.length() - 2)); sb.append(action.getPath()); } else if (pattern.startsWith("*.")) { ModuleConfig appConfig = (ModuleConfig) request.getAttribute(Globals.MODULE_KEY); sb.append(appConfig.getPrefix()); sb.append(action.getPath()); sb.append(pattern.substring(1)); } else { throw new IllegalArgumentException(pattern); } return (sb.toString()); sq~ uq~ppppq~~q~~xq¥sq~isq~ uq~sq~bsq~ uq~ppppqŽsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xsq~bsq~ uq~ppppqŽsq~ uq~ppppppptpageq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xppq~%9sq~ uq~ppppptB/** *

      Return the context-relative URL that corresponds to the specified * page attribute value, calculated based on the * pagePattern property of the current module's * {@link ModuleConfig}.

      * * @param request The servlet request we are processing * @param page The module-relative URL to be substituted in * to the pagePattern pattern for the current module * (MUST start with a slash) * @return context-relative URL * @since Struts 1.1 */ ptpageURLq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~tF StringBuffer sb = new StringBuffer(); ModuleConfig moduleConfig = (ModuleConfig) request.getAttribute(Globals.MODULE_KEY); String pagePattern = moduleConfig.getControllerConfig().getPagePattern(); if (pagePattern == null) { sb.append(moduleConfig.getPrefix()); sb.append(page); } else { boolean dollar = false; for (int i = 0; i < pagePattern.length(); i++) { char ch = pagePattern.charAt(i); if (dollar) { switch (ch) { case 'M' : sb.append(moduleConfig.getPrefix()); break; case 'P' : sb.append(page); break; case '$' : sb.append('$'); break; default : ; // Silently swallow } dollar = false; continue; } else if (ch == '$') { dollar = true; } else { sb.append(ch); } } } return (sb.toString()); sq~ uq~ppppq~~q~~xqo 0)) { // We may be in a non-default module. Try to get it's prefix. matchPath = matchPath.substring(0, lastSlash); // Match against the list of module prefixes for (int i = 0; i < prefixes.length; i++) { if (matchPath.equals(prefixes[i])) { prefix = prefixes[i]; break; } } } if (log.isDebugEnabled()) { log.debug("Module name found: " + (prefix.equals("") ? "default" : prefix)); } return prefix; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xpppq~%9sq~ uq~ppppptœ/** * Return the current ModuleConfig object stored in request, if it exists, * null otherwise. * This method can be used by plugin to retrieve the current module config * object. If no moduleConfig is found, this means that the request haven't * hit the server throught the struts servlet. The appropriate module config * can be set and found with * {@link RequestUtils#selectModule(HttpServletRequest, ServletContext)} . * @param request The servlet request we are processing * @return the ModuleConfig object from request, or null if none is set in * the request. * @since 1.1 */ ptgetRequestModuleConfigq~{xsq~ uq~pppppq~~q~q~~q~ºpq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~tO return (ModuleConfig) request.getAttribute(Globals.MODULE_KEY); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xsq~bsq~ uq~ppppqsq~ uq~ppppppptcontextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xppq~%9sq~ uq~pppppt /** * Return the ModuleConfig object is it exists, null otherwise. * @param request The servlet request we are processing * @param context The ServletContext for this web application * @return the ModuleConfig object * @since 1.1 */ ptgetModuleConfigq~{xsq~ uq~pppppq~~q~q~~q~ºpq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t ModuleConfig moduleConfig = (ModuleConfig) request.getAttribute(Globals.MODULE_KEY); if (moduleConfig == null) { moduleConfig = (ModuleConfig) context.getAttribute(Globals.MODULE_KEY); } return moduleConfig; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq@sq~ uq~pppppppt pageContextq~{xsq~ uq~pppppq~~q~q~~q~pq~€xpppq~%9sq~ uq~pppppt½/** * Return the ModuleConfig object if it exists, null if otherwise. * @param pageContext The page context. * @return the ModuleConfig object * @since 1.1 */ ptgetModuleConfigq~{xsq~ uq~pppppq~~q~q~~q~ºpq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t’ return getModuleConfig( (HttpServletRequest) pageContext.getRequest(), pageContext.getServletContext()); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqYsq~ uq~ppppppptcontextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xpppq~%9sq~ uq~pppppt£/** * Return the list of module prefixes that are defined for * this web application, creating it if necessary. NOTE - * the "" prefix for the default module is not included in this list. * * @param context The ServletContext for this web application * @return an array of module prefixes * @deprecated Use getModulePrefixes(ServletContext) instead. */ ptgetApplicationPrefixesq~{xsq~ uq~pppppq~~q~q~~q~{t[]q~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t4 return getModulePrefixes(context); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqssq~ uq~ppppppptcontextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xpppq~%9sq~ uq~ppppptz/** * Return the list of module prefixes that are defined for * this web application, creating it if necessary. NOTE - * the "" prefix for the default module is not included in this list. * * @param context The ServletContext for this web application * @return an array of module prefixes * @since Struts 1.1 */ ptgetModulePrefixesq~{xsq~ uq~pppppq~~q~q~~q~{t[]q~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t String prefixes[] = (String[]) context.getAttribute(PREFIXES_KEY); if (prefixes != null) { return (prefixes); } ArrayList list = new ArrayList(); Enumeration names = context.getAttributeNames(); while (names.hasMoreElements()) { String name = (String) names.nextElement(); if (!name.startsWith(Globals.MODULE_KEY)) { continue; } String prefix = name.substring(Globals.MODULE_KEY.length()); if (prefix.length() > 0) { list.add(prefix); } } prefixes = (String[]) list.toArray(new String[list.size()]); context.setAttribute(PREFIXES_KEY, prefixes); return (prefixes); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqsq~ uq~pppppppt pageContextq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~bsq~ uq~ppppqsq~ uq~pppppppt paramNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xppq~%9sq~ uq~ppppptj/** * Retrieves the value from request scope and if it isn't already an ActionMessages * some classes are converted to one. * * @param pageContext The PageContext for the current page * @param paramName Key for parameter value * @return ActionErros in page context. * @throws JspException if */ ptgetActionMessagesq~{xsq~ uq~pppppq~~q~q~~q~Ipq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~ti ActionMessages am = new ActionMessages(); Object value = pageContext.findAttribute(paramName); try { if (value == null) { ; } else if (value instanceof String) { am.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage((String) value)); } else if (value instanceof String[]) { String keys[] = (String[]) value; for (int i = 0; i < keys.length; i++) am.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(keys[i])); } else if (value instanceof ErrorMessages) { String keys[] = ((ErrorMessages) value).getErrors(); if (keys == null) { keys = new String[0]; } for (int i = 0; i < keys.length; i++) { am.add(ActionErrors.GLOBAL_ERROR, new ActionError(keys[i])); } } else if (value instanceof ActionMessages) { am = (ActionMessages) value; } else { throw new JspException( messages.getMessage("actionMessages.errors", value.getClass().getName())); } } catch (JspException e) { throw e; } catch (Exception e) { ; } return am; sq~ uq~q~pppq~~q~~xqmsq~isq~ uq~sq~bsq~ uq~ppppq®sq~ uq~pppppppturlq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~%9sq~ uq~ppppptu/** * Use the new URLEncoder.encode() method from java 1.4 if available, else * use the old deprecated version. This method uses reflection to find the appropriate * method; if the reflection operations throw exceptions, this will return the url * encoded with the old URLEncoder.encode() method. * @return String - the encoded url. */ pt encodeURLq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t5 try { // encode url with new 1.4 method and UTF-8 encoding if (encode != null) { return (String) encode.invoke(null, new Object[] { url, "UTF-8" }); } } catch (IllegalAccessException e) { log.debug("Could not find Java 1.4 encode method. Using deprecated version.", e); } catch (InvocationTargetException e) { log.debug("Could not find Java 1.4 encode method. Using deprecated version.", e); } return URLEncoder.encode(url); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqÇsq~ uq~pppppppt pageContextq~{xsq~ uq~pppppq~~q~q~~q~pq~€xpppq~%9sq~ uq~ppppptb/** * Returns true if the custom tags are in XHTML mode. * @since Struts 1.1 */ ptisXhtmlq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~tÎ String xhtml = (String) pageContext.getAttribute( Globals.XHTML_KEY, PageContext.PAGE_SCOPE); return "true".equalsIgnoreCase(xhtml); sq~ uq~ppppq~~q~~xqonq³£q²Åsq~isq~ uq~ sq~bsq~ uq~ppppqàsq~ uq~pppppppt pageContextq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~bsq~ uq~ppppqàsq~ uq~ppppppptparamIdq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqàsq~ uq~pppppppt paramNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqàsq~ uq~pppppppt paramPropertyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqàsq~ uq~pppppppt paramScopeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqàsq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqàsq~ uq~ppppppptpropertyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqàsq~ uq~ppppppptscopeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqàsq~ uq~pppppppt transactionq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxq~%9sq~ uq~ppppptß/** * Compute a set of query parameters that will be dynamically added to * a generated URL. The returned Map is keyed by parameter name, and the * values are either null (no value specified), a String (single value * specified), or a String[] array (multiple values specified). Parameter * names correspond to the corresponding attributes of the * <html:link> tag. If no query parameters are * identified, return null. * * @param pageContext PageContext we are operating in * @param paramId Single-value request parameter name (if any) * @param paramName Bean containing single-value parameter value * @param paramProperty Property (of bean named by paramName * containing single-value parameter value * @param paramScope Scope containing bean named by * paramName * * @param name Bean containing multi-value parameters Map (if any) * @param property Property (of bean named by name * containing multi-value parameters Map * @param scope Scope containing bean named by * name * * @param transaction Should we add our transaction control token? * @return Map of query parameters * @exception JspException if we cannot look up the required beans * @exception JspException if a class cast exception occurs on a * looked-up bean or property */ ptcomputeParametersq~cxsq~ uq~pppppq~fq~gq~fq~¼pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft ó // Short circuit if no parameters are specified if ((paramId == null) && (name == null) && !transaction) { return (null); } // Locate the Map containing our multi-value parameters map Map map = null; try { if (name != null) { map = (Map) lookup(pageContext, name, property, scope); } } catch (ClassCastException e) { saveException(pageContext, e); throw new JspException(messages.getMessage("parameters.multi", name, property, scope)); } catch (JspException e) { saveException(pageContext, e); throw e; } // Create a Map to contain our results from the multi-value parameters Map results = null; if (map != null) { results = new HashMap(map); } else { results = new HashMap(); } // Add the single-value parameter (if any) if ((paramId != null) && (paramName != null)) { Object paramValue = null; try { paramValue = lookup(pageContext, paramName, paramProperty, paramScope); } catch (JspException e) { saveException(pageContext, e); throw e; } if (paramValue != null) { String paramString = null; if (paramValue instanceof String) { paramString = (String) paramValue; } else { paramString = paramValue.toString(); } Object mapValue = results.get(paramId); if (mapValue == null) { results.put(paramId, paramString); } else if (mapValue instanceof String) { String newValues[] = new String[2]; newValues[0] = (String) mapValue; newValues[1] = paramString; results.put(paramId, newValues); } else /* if (mapValue instanceof String[]) */ { String oldValues[] = (String[]) mapValue; String newValues[] = new String[oldValues.length + 1]; System.arraycopy(oldValues, 0, newValues, 0, oldValues.length); newValues[oldValues.length] = paramString; results.put(paramId, newValues); } } } // Add our transaction control token (if requested) if (transaction) { HttpSession session = pageContext.getSession(); String token = null; if (session != null) { token = (String) session.getAttribute(Globals.TRANSACTION_TOKEN_KEY); } if (token != null) { results.put(Constants.TOKEN_KEY, token); } } // Return the completed Map return (results); sq~ uq~q~pppq~fq~fxqoqoØsq~isq~ uq~sq~bsq~ uq~ppppq9sq~ uq~ppppppptactionq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~%9sq~ uq~ppppptù/** * Return the form action converted into an action mapping path. The * value of the action property is manipulated as follows in * computing the name of the requested mapping: *
        *
      • Any filename extension is removed (on the theory that extension * mapping is being used to select the controller servlet).
      • *
      • If the resulting value does not start with a slash, then a * slash is prepended.
      • *
      */ ptgetActionMappingNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ftý String value = action; int question = action.indexOf("?"); if (question >= 0) { value = value.substring(0, question); } int slash = value.lastIndexOf("/"); int period = value.lastIndexOf("."); if ((period >= 0) && (period > slash)) { value = value.substring(0, period); } if (value.startsWith("/")) { return (value); } else { return ("/" + value); } sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqRsq~ uq~ppppppptactionq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqRsq~ uq~pppppppt pageContextq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxppq~%9sq~ uq~ppppptR/** * Return the form action converted into a server-relative URL. */ ptgetActionMappingURLq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); StringBuffer value = new StringBuffer(request.getContextPath()); ModuleConfig config = (ModuleConfig) pageContext.getRequest().getAttribute(Globals.MODULE_KEY); if (config != null) { value.append(config.getPrefix()); } // Use our servlet mapping, if one is specified String servletMapping = (String) pageContext.getAttribute(Globals.SERVLET_KEY, PageContext.APPLICATION_SCOPE); if (servletMapping != null) { String queryString = null; int question = action.indexOf("?"); if (question >= 0) { queryString = action.substring(question); } String actionMapping = getActionMappingName(action); if (servletMapping.startsWith("*.")) { value.append(actionMapping); value.append(servletMapping.substring(1)); } else if (servletMapping.endsWith("/*")) { value.append(servletMapping.substring(0, servletMapping.length() - 2)); value.append(actionMapping); } else if (servletMapping.equals("/")) { value.append(actionMapping); } if (queryString != null) { value.append(queryString); } } // Otherwise, assume extension mapping is in use and extension is // already included in the action property else { if (!action.startsWith("/")) { value.append("/"); } value.append(action); } // Return the completed value return (value.toString()); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqssq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppqssq~ uq~ppppppptmappingq~cxsq~ uq~pppppq~fq~gq~fq~épq~hxsq~bsq~ uq~ppppqssq~ uq~pppppppt moduleConfigq~cxsq~ uq~pppppq~fq~gq~fq~ºpq~hxsq~bsq~ uq~ppppqssq~ uq~ppppppptservletq~cxsq~ uq~pppppq~fq~gq~fq~ ppq~hxq~%9sq~ uq~ppppptæ/** * Create (if necessary) and return an ActionForm instance appropriate * for this request. If no ActionForm instance is required, return * null. * * @param request The servlet request we are processing * @param mapping The action mapping for this request * @param moduleConfig The configuration for this module * @param servlet The action servlet * @return ActionForm instance associated with this request */ ptcreateActionFormq~cxsq~ uq~pppppq~fq~gq~fq~wpq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft // Is there a form bean associated with this mapping? String attribute = mapping.getAttribute(); if (attribute == null) { return (null); } // Look up the form bean configuration information to use String name = mapping.getName(); FormBeanConfig config = moduleConfig.findFormBeanConfig(name); if (config == null) { return (null); } // Look up any existing form bean instance if (log.isDebugEnabled()) { log.debug( " Looking for ActionForm bean instance in scope '" + mapping.getScope() + "' under attribute key '" + attribute + "'"); } ActionForm instance = null; HttpSession session = null; if ("request".equals(mapping.getScope())) { instance = (ActionForm) request.getAttribute(attribute); } else { session = request.getSession(); instance = (ActionForm) session.getAttribute(attribute); } // Can we recycle the existing form bean instance (if there is one)? if (instance != null) { if (config.getDynamic()) { String className = ((DynaBean) instance).getDynaClass().getName(); if (className.equals(config.getName())) { if (log.isDebugEnabled()) { log.debug( " Recycling existing DynaActionForm instance " + "of type '" + className + "'"); log.trace(" --> " + instance); } return (instance); } } else { try { Class configClass = applicationClass(config.getType()); if (configClass.isAssignableFrom(instance.getClass())) { if (log.isDebugEnabled()) { log.debug( " Recycling existing ActionForm instance " + "of class '" + instance.getClass().getName() + "'"); log.trace(" --> " + instance); } return (instance); } } catch (Throwable t) { log.error(servlet.getInternal().getMessage("formBean", config.getType()), t); return (null); } } } // Create and return a new form bean instance if (config.getDynamic()) { try { DynaActionFormClass dynaClass = DynaActionFormClass.createDynaActionFormClass(config); instance = (ActionForm) dynaClass.newInstance(); ((DynaActionForm) instance).initialize(mapping); if (log.isDebugEnabled()) { log.debug( " Creating new DynaActionForm instance " + "of type '" + config.getType() + "'"); log.trace(" --> " + instance); } } catch (Throwable t) { log.error(servlet.getInternal().getMessage("formBean", config.getType()), t); return (null); } } else { try { instance = (ActionForm) applicationInstance(config.getType()); if (log.isDebugEnabled()) { log.debug( " Creating new ActionForm instance " + "of type '" + config.getType() + "'"); log.trace(" --> " + instance); } } catch (Throwable t) { log.error(servlet.getInternal().getMessage("formBean", config.getType()), t); return (null); } } instance.setServlet(servlet); return (instance); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq¤sq~ uq~pppppppt pageContextq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~bsq~ uq~ppppq¤sq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq¤sq~ uq~pppppppt scopeNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpq~%9sq~ uq~ppppptÓ/** * Locate and return the specified bean, from an optionally specified * scope, in the specified page context. If no such bean is found, * return null instead. If an exception is thrown, it will * have already been saved via a call to saveException(). * * @param pageContext Page context to be searched * @param name Name of the bean to be retrieved * @param scopeName Scope to be searched (page, request, session, application) * or null to use findAttribute() instead * @return JavaBean in the specified page context * @exception JspException if an invalid scope name * is requested */ ptlookupq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ftI if (scopeName == null) { return pageContext.findAttribute(name); } try { return pageContext.getAttribute(name, getScope(scopeName)); } catch (JspException e) { saveException(pageContext, e); throw e; } sq~ uq~q~pppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqÍsq~ uq~pppppppt scopeNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~%9sq~ uq~ppppptv/** * Converts the scope name into its corresponding PageContext constant value. * @param scopeName Can be "page", "request", "session", or "application" in any * case. * @return The constant representing the scope (ie. PageContext.REQUEST_SCOPE). * @throws JspException if the scopeName is not a valid name. * @since Struts 1.1 */ ptgetScopeq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ftÍ Integer scope = (Integer) scopes.get(scopeName.toLowerCase()); if (scope == null) { throw new JspException(messages.getMessage("lookup.scope", scope)); } return scope.intValue(); sq~ uq~q~pppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqæsq~ uq~pppppppt pageContextq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~bsq~ uq~ppppqæsq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqæsq~ uq~ppppppptpropertyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqæsq~ uq~ppppppptscopeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxq~%9sq~ uq~pppppt$/** * Locate and return the specified property of the specified bean, from * an optionally specified scope, in the specified page context. If an * exception is thrown, it will have already been saved via a call to * saveException(). * * @param pageContext Page context to be searched * @param name Name of the bean to be retrieved * @param property Name of the property to be retrieved, or * null to retrieve the bean itself * @param scope Scope to be searched (page, request, session, application) * or null to use findAttribute() instead * @return property of specified JavaBean * * @exception JspException if an invalid scope name * is requested * @exception JspException if the specified bean is not found * @exception JspException if accessing this property causes an * IllegalAccessException, IllegalArgumentException, * InvocationTargetException, or NoSuchMethodException */ ptlookupq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft  // Look up the requested bean, and return if requested Object bean = lookup(pageContext, name, scope); if (bean == null) { JspException e = null; if (scope == null) { e = new JspException(messages.getMessage("lookup.bean.any", name)); } else { e = new JspException(messages.getMessage("lookup.bean", name, scope)); } saveException(pageContext, e); throw e; } if (property == null) { return bean; } // Locate and return the specified property try { return PropertyUtils.getProperty(bean, property); } catch (IllegalAccessException e) { saveException(pageContext, e); throw new JspException(messages.getMessage("lookup.access", property, name)); } catch (InvocationTargetException e) { Throwable t = e.getTargetException(); if (t == null) { t = e; } saveException(pageContext, t); throw new JspException(messages.getMessage("lookup.target", property, name)); } catch (NoSuchMethodException e) { saveException(pageContext, e); throw new JspException(messages.getMessage("lookup.method", property, name)); } sq~ uq~q~pppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‘sq~ uq~pppppppt pageContextq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~bsq~ uq~ppppq‘sq~ uq~ppppppptlocaleq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxppq~%9sq~ uq~ppppptv/** * Look up and return current user locale, based on the specified parameters. * * @param pageContext The PageContext associated with this request * @param locale Name of the session attribute for our user's Locale. If this is * null, the default locale key is used for the lookup. * @return current user locale */ ptretrieveUserLocaleq~cxsq~ uq~pppppq~fq~gq~fq~5pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ftA Locale userLocale = null; HttpSession session = pageContext.getSession(); if (locale == null) { locale = Globals.LOCALE_KEY; } // Only check session if sessions are enabled if (session != null) { userLocale = (Locale) session.getAttribute(locale); } if (userLocale == null) { // Returns Locale based on Accept-Language header or the server default userLocale = pageContext.getRequest().getLocale(); } return userLocale; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‘8sq~ uq~pppppppt pageContextq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~bsq~ uq~ppppq‘8sq~ uq~ppppppptbundleq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq‘8sq~ uq~ppppppptlocaleq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq‘8sq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxq~%9sq~ uq~pppppt0/** * Look up and return a message string, based on the specified parameters. * * @param pageContext The PageContext associated with this request * @param bundle Name of the servlet context attribute for our * message resources bundle * @param locale Name of the session attribute for our user's Locale * @param key Message key to be looked up and returned * @return message string * * @exception JspException if a lookup error occurs (will have been * saved in the request already) */ ptmessageq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ftM return (message(pageContext, bundle, locale, key, null)); sq~ uq~q~pppq~fq~fxsq~isq~ uq~ sq~bsq~ uq~ppppq‘isq~ uq~pppppppt pageContextq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~bsq~ uq~ppppq‘isq~ uq~ppppppptbundleq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq‘isq~ uq~ppppppptlocaleq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq‘isq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq‘isq~ uq~ppppppptargsq~cxsq~ uq~pppppq~fq~gq~fq~«t[]q~kxppppq~%9sq~ uq~ppppptd/** * Look up and return a message string, based on the specified parameters. * * @param pageContext The PageContext associated with this request * @param bundle Name of the servlet context attribute for our * message resources bundle * @param locale Name of the session attribute for our user's Locale * @param key Message key to be looked up and returned * @param args Replacement parameters for this message * @return message string * @exception JspException if a lookup error occurs (will have been * saved in the request already) */ ptmessageq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~fto MessageResources resources = retrieveMessageResources(pageContext, bundle); Locale userLocale = retrieveUserLocale(pageContext, locale); if (args == null) { return (resources.getMessage(userLocale, key)); } else { return (resources.getMessage(userLocale, key, args)); } sq~ uq~q~pppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‘£sq~ uq~pppppppt pageContextq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~bsq~ uq~ppppq‘£sq~ uq~ppppppptbundleq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxppq~%9sq~ uq~ppppptc/** * Returns the appropriate MessageResources object for the current module and * the given bundle. * * @param pageContext Search the context's scopes for the resources. * @param bundle The bundle name to look for. If this is null, the * default bundle name is used. * @return MessageResources The bundle's resources stored in some scope. * @throws JspException if the MessageResources object could not be found. * * @FIXME The bundle name needs the module prefix appended to it before searching * to fix PR# 11932. */ ptretrieveMessageResourcesq~cxsq~ uq~pppppq~fq~gq~fq~-pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~·gxq~ftÚ MessageResources resources = null; if (bundle == null) { bundle = Globals.MESSAGES_KEY; } resources = (MessageResources) pageContext.getAttribute( bundle, PageContext.PAGE_SCOPE); if (resources == null) { resources = (MessageResources) pageContext.getAttribute( bundle, PageContext.REQUEST_SCOPE); } if (resources == null) { resources = (MessageResources) pageContext.getAttribute( bundle, PageContext.APPLICATION_SCOPE); } if (resources == null) { JspException e = new JspException(messages.getMessage("message.bundle", bundle)); saveException(pageContext, e); throw e; } return resources; sq~ uq~q~pppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‘Äsq~ uq~ppppppptbeanq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~bsq~ uq~ppppq‘Äsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxppq~%9sq~ uq~pppppt•/** * Populate the properties of the specified JavaBean from the specified * HTTP request, based on matching each parameter name against the * corresponding JavaBeans "property setter" methods in the bean's class. * Suitable conversion is done for argument types as described under * convert(). * * @param bean The JavaBean whose properties are to be set * @param request The HTTP request whose parameters are to be used * to populate bean properties * * @exception ServletException if an exception is thrown while setting * property values */ ptpopulateq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft8 populate(bean, null, null, request); sq~ uq~q~¦pppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‘åsq~ uq~ppppppptbeanq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~bsq~ uq~ppppq‘åsq~ uq~ppppppptprefixq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq‘åsq~ uq~ppppppptsuffixq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq‘åsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxq~%9sq~ uq~pppppt…/** * Populate the properties of the specified JavaBean from the specified * HTTP request, based on matching each parameter name (plus an optional * prefix and/or suffix) against the corresponding JavaBeans "property * setter" methods in the bean's class. Suitable conversion is done for * argument types as described under setProperties(). *

      * If you specify a non-null prefix and a non-null * suffix, the parameter name must match both * conditions for its value(s) to be used in populating bean properties. * If the request's content type is "multipart/form-data" and the * method is "POST", the HttpServletRequest object will be wrapped in * a MultipartRequestWrapper object. * * @param bean The JavaBean whose properties are to be set * @param prefix The prefix (if any) to be prepend to bean property * names when looking for matching parameters * @param suffix The suffix (if any) to be appended to bean property * names when looking for matching parameters * @param request The HTTP request whose parameters are to be used * to populate bean properties * * @exception ServletException if an exception is thrown while setting * property values */ ptpopulateq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft… // Build a list of relevant request parameters from this request HashMap properties = new HashMap(); // Iterator of parameter names Enumeration names = null; // Map for multipart parameters Map multipartParameters = null; String contentType = request.getContentType(); String method = request.getMethod(); boolean isMultipart = false; if ((contentType != null) && (contentType.startsWith("multipart/form-data")) && (method.equalsIgnoreCase("POST"))) { // Get the ActionServletWrapper from the form bean ActionServletWrapper servlet; if (bean instanceof ActionForm) { servlet = ((ActionForm) bean).getServletWrapper(); } else { throw new ServletException( "bean that's supposed to be " + "populated from a multipart request is not of type " + "\"org.apache.struts.action.ActionForm\", but type " + "\"" + bean.getClass().getName() + "\""); } // Obtain a MultipartRequestHandler MultipartRequestHandler multipartHandler = getMultipartHandler(request); // Set the multipart request handler for our ActionForm. // If the bean isn't an ActionForm, an exception would have been // thrown earlier, so it's safe to assume that our bean is // in fact an ActionForm. ((ActionForm) bean).setMultipartRequestHandler(multipartHandler); if (multipartHandler != null) { isMultipart = true; // Set servlet and mapping info servlet.setServletFor(multipartHandler); multipartHandler.setMapping( (ActionMapping) request.getAttribute(Globals.MAPPING_KEY)); // Initialize multipart request class handler multipartHandler.handleRequest(request); //stop here if the maximum length has been exceeded Boolean maxLengthExceeded = (Boolean) request.getAttribute( MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED); if ((maxLengthExceeded != null) && (maxLengthExceeded.booleanValue())) { return; } //retrive form values and put into properties multipartParameters = getAllParametersForMultipartRequest( request, multipartHandler); names = Collections.enumeration(multipartParameters.keySet()); } } if (!isMultipart) { names = request.getParameterNames(); } while (names.hasMoreElements()) { String name = (String) names.nextElement(); String stripped = name; if (prefix != null) { if (!stripped.startsWith(prefix)) { continue; } stripped = stripped.substring(prefix.length()); } if (suffix != null) { if (!stripped.endsWith(suffix)) { continue; } stripped = stripped.substring(0, stripped.length() - suffix.length()); } if (isMultipart) { properties.put(stripped, multipartParameters.get(name)); } else { properties.put(stripped, request.getParameterValues(name)); } } // Set the corresponding properties of our bean try { BeanUtils.populate(bean, properties); } catch (Exception e) { throw new ServletException("BeanUtils.populate", e); } sq~ uq~q~¦pppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq’sq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxpppq~%9sq~ uq~ppppptr/** * Try to locate a multipart request handler for this request. First, look * for a mapping-specific handler stored for us under an attribute. If one * is not present, use the global multipart handler, if there is one. * * @param request The HTTP request for which the multipart handler should * be found. * @return the multipart handler to use, or null if none is * found. * * @exception ServletException if any exception is thrown while attempting * to locate the multipart handler. */ ptgetMultipartHandlerq~cxsq~ uq~pppppq~fq~gq~fq~’pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~·gxq~ft ¦ MultipartRequestHandler multipartHandler = null; String multipartClass = (String) request.getAttribute(Globals.MULTIPART_KEY); request.removeAttribute(Globals.MULTIPART_KEY); // Try to initialize the mapping specific request handler if (multipartClass != null) { try { multipartHandler = (MultipartRequestHandler) applicationInstance(multipartClass); } catch (ClassNotFoundException cnfe) { log.error( "MultipartRequestHandler class \"" + multipartClass + "\" in mapping class not found, " + "defaulting to global multipart class"); } catch (InstantiationException ie) { log.error( "InstantiaionException when instantiating " + "MultipartRequestHandler \"" + multipartClass + "\", " + "defaulting to global multipart class, exception: " + ie.getMessage()); } catch (IllegalAccessException iae) { log.error( "IllegalAccessException when instantiating " + "MultipartRequestHandler \"" + multipartClass + "\", " + "defaulting to global multipart class, exception: " + iae.getMessage()); } if (multipartHandler != null) { return multipartHandler; } } ModuleConfig moduleConfig = (ModuleConfig) request.getAttribute(Globals.MODULE_KEY); multipartClass = moduleConfig.getControllerConfig().getMultipartClass(); // Try to initialize the global request handler if (multipartClass != null) { try { multipartHandler = (MultipartRequestHandler) applicationInstance(multipartClass); } catch (ClassNotFoundException cnfe) { throw new ServletException( "Cannot find multipart class \"" + multipartClass + "\"" + ", exception: " + cnfe.getMessage()); } catch (InstantiationException ie) { throw new ServletException( "InstantiaionException when instantiating " + "multipart class \"" + multipartClass + "\", exception: " + ie.getMessage()); } catch (IllegalAccessException iae) { throw new ServletException( "IllegalAccessException when instantiating " + "multipart class \"" + multipartClass + "\", exception: " + iae.getMessage()); } if (multipartHandler != null) { return multipartHandler; } } return multipartHandler; sq~ uq~q~¦pppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq’/sq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppq’/sq~ uq~ppppppptmultipartHandlerq~cxsq~ uq~pppppq~fq~gq~fq~’pq~hxppq~%9sq~ uq~pppppt /** * Create a map containing all of the parameters supplied for a multipart * request, keyed by parameter name. In addition to text and file elements * from the multipart body, query string parameters are included as well. * * @param request The (wrapped) HTTP request whose parameters are to be * added to the map. * @param multipartHandler The multipart handler used to parse the request. * * @return the map containing all parameters for this multipart request. */ pt#getAllParametersForMultipartRequestq~cxsq~ uq~pppppq~fq~gq~fq~¼pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~·gxq~ftO Map parameters = new HashMap(); Enumeration enum; Hashtable elements = multipartHandler.getAllElements(); enum = elements.keys(); while (enum.hasMoreElements()) { String key = (String) enum.nextElement(); parameters.put(key, elements.get(key)); } if (request instanceof MultipartRequestWrapper) { request = ((MultipartRequestWrapper)request).getRequest(); enum = request.getParameterNames(); while (enum.hasMoreElements()) { String key = (String) enum.nextElement(); parameters.put(key, request.getParameterValues(key)); } } else { log.debug("Gathering multipart parameters for unwrapped request"); } return parameters; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq’Psq~ uq~pppppppt pageContextq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~bsq~ uq~ppppq’Psq~ uq~ppppppptbundleq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq’Psq~ uq~ppppppptlocaleq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq’Psq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxq~%9sq~ uq~ppppptl/** * Return true if a message string for the specified message key * is present for the specified Locale. * * @param pageContext The PageContext associated with this request * @param bundle Name of the servlet context attribute for our * message resources bundle * @param locale Name of the session attribute for our user's Locale * @param key Message key to be looked up and returned * @return true if a message string for message key exists * @exception JspException if a lookup error occurs (will have been * saved in the request already) */ ptpresentq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ftÎ MessageResources resources = retrieveMessageResources(pageContext, bundle); Locale userLocale = retrieveUserLocale(pageContext, locale); return (resources.isPresent(userLocale, key)); sq~ uq~q~pppq~fq~fxq‚õsq~isq~ uq~sq~bsq~ uq~ppppq’sq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppq’sq~ uq~ppppppptactionq~cxsq~ uq~pppppq~fq~gq~fq~+pq~hxsq~bsq~ uq~ppppq’sq~ uq~ppppppptpatternq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpq~%9sq~ uq~ppppptí/** * Return the context-relative URL that corresponds to the specified * {@link ActionConfig}, relative to the module associated * with the current modules's {@link ModuleConfig}. * * @param request The servlet request we are processing * @param action ActionConfig to be evaluated * @param pattern URL pattern used to map the controller servlet * @return context-relative URL relative to the module * * @since Struts 1.1 */ pt actionURLq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft\ StringBuffer sb = new StringBuffer(); if (pattern.endsWith("/*")) { sb.append(pattern.substring(0, pattern.length() - 2)); sb.append(action.getPath()); } else if (pattern.startsWith("*.")) { ModuleConfig appConfig = (ModuleConfig) request.getAttribute(Globals.MODULE_KEY); sb.append(appConfig.getPrefix()); sb.append(action.getPath()); sb.append(pattern.substring(1)); } else { throw new IllegalArgumentException(pattern); } return (sb.toString()); sq~ uq~ppppq~fq~fxq¦Return the context-relative URL that corresponds to the specified * page attribute value, calculated based on the * pagePattern property of the current module's * {@link ModuleConfig}.

      * * @param request The servlet request we are processing * @param page The module-relative URL to be substituted in * to the pagePattern pattern for the current module * (MUST start with a slash) * @return context-relative URL * @since Struts 1.1 */ ptpageURLq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ftF StringBuffer sb = new StringBuffer(); ModuleConfig moduleConfig = (ModuleConfig) request.getAttribute(Globals.MODULE_KEY); String pagePattern = moduleConfig.getControllerConfig().getPagePattern(); if (pagePattern == null) { sb.append(moduleConfig.getPrefix()); sb.append(page); } else { boolean dollar = false; for (int i = 0; i < pagePattern.length(); i++) { char ch = pagePattern.charAt(i); if (dollar) { switch (ch) { case 'M' : sb.append(moduleConfig.getPrefix()); break; case 'P' : sb.append(page); break; case '$' : sb.append('$'); break; default : ; // Silently swallow } dollar = false; continue; } else if (ch == '$') { dollar = true; } else { sb.append(ch); } } } return (sb.toString()); sq~ uq~ppppq~fq~fxqp)qpBqÍWsq~isq~ uq~sq~bsq~ uq~ppppq’Ësq~ uq~ppppppptprefixq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq’Ësq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppq’Ësq~ uq~ppppppptcontextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxpq~%9sq~ uq~pppppt¯/** * Select the module to which the specified request belongs, and * add corresponding request attributes to this request. * * @param prefix The module prefix of the desired module * @param request The servlet request we are processing * @param context The ServletContext for this web application * @deprecated use {@link #selectModule(String,HttpServletRequest,ServletContext)} */ ptselectApplicationq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft7 selectModule(prefix, request, context); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq’ôsq~ uq~ppppppptprefixq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq’ôsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppq’ôsq~ uq~ppppppptcontextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxpq~%9sq~ uq~ppppptq/** * Select the module to which the specified request belongs, and * add corresponding request attributes to this request. * * @param prefix The module prefix of the desired module * @param request The servlet request we are processing * @param context The ServletContext for this web application * @since struts 1.1 */ pt selectModuleq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft‹ // Expose the resources for this module ModuleConfig config = (ModuleConfig) context.getAttribute(Globals.MODULE_KEY + prefix); if (config != null) { request.setAttribute(Globals.MODULE_KEY, config); } else { request.removeAttribute(Globals.MODULE_KEY); } MessageResources resources = (MessageResources) context.getAttribute(Globals.MESSAGES_KEY + prefix); if (resources != null) { request.setAttribute(Globals.MESSAGES_KEY, resources); } else { request.removeAttribute(Globals.MESSAGES_KEY); } sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq“sq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppq“sq~ uq~ppppppptcontextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxppq~%9sq~ uq~ppppptj/** * Select the module to which the specified request belongs, and * add corresponding request attributes to this request. * * @param request The servlet request we are processing * @param context The ServletContext for this web application * @deprecated use {@link #selectModule(HttpServletRequest,ServletContext)} */ ptselectApplicationq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft/ selectModule(request, context); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq“>sq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppq“>sq~ uq~ppppppptcontextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxppq~%9sq~ uq~pppppt/** * Select the module to which the specified request belongs, and * add corresponding request attributes to this request. * * @param request The servlet request we are processing * @param context The ServletContext for this web application */ pt selectModuleq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ftÄ // Compute module name String prefix = getModuleName(request, context); // Expose the resources for this module selectModule(prefix, request, context); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq“_sq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppq“_sq~ uq~ppppppptcontextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxppq~%9sq~ uq~ppppptø/** * Get the module name to which the specified request belong. * @param request The servlet request we are processing * @param context The ServletContext for this web application * @return The module prefix or "" */ pt getModuleNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft8 // Acquire the path used to compute the module String matchPath = (String) request.getAttribute(RequestProcessor.INCLUDE_SERVLET_PATH); if (matchPath == null) { matchPath = request.getServletPath(); } return getModuleName( matchPath, context); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq“€sq~ uq~pppppppt matchPathq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq“€sq~ uq~ppppppptcontextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxppq~%9sq~ uq~ppppptü/** * Get the module name to which the specified uri belong. * @param matchPath The uri from which we want the module name. * @param context The ServletContext for this web application * @return The module prefix or "" */ pt getModuleNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ftø if (log.isDebugEnabled()) { log.debug("Get module name for path " + matchPath); } String prefix = ""; // Initialize prefix before we try lookup String prefixes[] = getModulePrefixes(context); // Get all other possible prefixes int lastSlash = 0; // Initialize before loop while (prefix.equals("") && ((lastSlash = matchPath.lastIndexOf("/")) > 0)) { // We may be in a non-default module. Try to get it's prefix. matchPath = matchPath.substring(0, lastSlash); // Match against the list of module prefixes for (int i = 0; i < prefixes.length; i++) { if (matchPath.equals(prefixes[i])) { prefix = prefixes[i]; break; } } } if (log.isDebugEnabled()) { log.debug("Module name found: " + (prefix.equals("") ? "default" : prefix)); } return prefix; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq“¡sq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxpppq~%9sq~ uq~ppppptœ/** * Return the current ModuleConfig object stored in request, if it exists, * null otherwise. * This method can be used by plugin to retrieve the current module config * object. If no moduleConfig is found, this means that the request haven't * hit the server throught the struts servlet. The appropriate module config * can be set and found with * {@link RequestUtils#selectModule(HttpServletRequest, ServletContext)} . * @param request The servlet request we are processing * @return the ModuleConfig object from request, or null if none is set in * the request. * @since 1.1 */ ptgetRequestModuleConfigq~cxsq~ uq~pppppq~fq~gq~fq~ºpq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ftO return (ModuleConfig) request.getAttribute(Globals.MODULE_KEY); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq“ºsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppq“ºsq~ uq~ppppppptcontextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxppq~%9sq~ uq~pppppt /** * Return the ModuleConfig object is it exists, null otherwise. * @param request The servlet request we are processing * @param context The ServletContext for this web application * @return the ModuleConfig object * @since 1.1 */ ptgetModuleConfigq~cxsq~ uq~pppppq~fq~gq~fq~ºpq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft ModuleConfig moduleConfig = (ModuleConfig) request.getAttribute(Globals.MODULE_KEY); if (moduleConfig == null) { moduleConfig = (ModuleConfig) context.getAttribute(Globals.MODULE_KEY); } return moduleConfig; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq“Ûsq~ uq~pppppppt pageContextq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxpppq~%9sq~ uq~pppppt½/** * Return the ModuleConfig object if it exists, null if otherwise. * @param pageContext The page context. * @return the ModuleConfig object * @since 1.1 */ ptgetModuleConfigq~cxsq~ uq~pppppq~fq~gq~fq~ºpq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft’ return getModuleConfig( (HttpServletRequest) pageContext.getRequest(), pageContext.getServletContext()); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq“ôsq~ uq~ppppppptcontextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxpppq~%9sq~ uq~pppppt£/** * Return the list of module prefixes that are defined for * this web application, creating it if necessary. NOTE - * the "" prefix for the default module is not included in this list. * * @param context The ServletContext for this web application * @return an array of module prefixes * @deprecated Use getModulePrefixes(ServletContext) instead. */ ptgetApplicationPrefixesq~cxsq~ uq~pppppq~fq~gq~fq~{t[]q~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft4 return getModulePrefixes(context); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq”sq~ uq~ppppppptcontextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxpppq~%9sq~ uq~ppppptz/** * Return the list of module prefixes that are defined for * this web application, creating it if necessary. NOTE - * the "" prefix for the default module is not included in this list. * * @param context The ServletContext for this web application * @return an array of module prefixes * @since Struts 1.1 */ ptgetModulePrefixesq~cxsq~ uq~pppppq~fq~gq~fq~{t[]q~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft String prefixes[] = (String[]) context.getAttribute(PREFIXES_KEY); if (prefixes != null) { return (prefixes); } ArrayList list = new ArrayList(); Enumeration names = context.getAttributeNames(); while (names.hasMoreElements()) { String name = (String) names.nextElement(); if (!name.startsWith(Globals.MODULE_KEY)) { continue; } String prefix = name.substring(Globals.MODULE_KEY.length()); if (prefix.length() > 0) { list.add(prefix); } } prefixes = (String[]) list.toArray(new String[list.size()]); context.setAttribute(PREFIXES_KEY, prefixes); return (prefixes); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq”(sq~ uq~pppppppt pageContextq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~bsq~ uq~ppppq”(sq~ uq~pppppppt paramNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxppq~%9sq~ uq~ppppptj/** * Retrieves the value from request scope and if it isn't already an ActionMessages * some classes are converted to one. * * @param pageContext The PageContext for the current page * @param paramName Key for parameter value * @return ActionErros in page context. * @throws JspException if */ ptgetActionMessagesq~cxsq~ uq~pppppq~fq~gq~fq~Ipq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~fti ActionMessages am = new ActionMessages(); Object value = pageContext.findAttribute(paramName); try { if (value == null) { ; } else if (value instanceof String) { am.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage((String) value)); } else if (value instanceof String[]) { String keys[] = (String[]) value; for (int i = 0; i < keys.length; i++) am.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(keys[i])); } else if (value instanceof ErrorMessages) { String keys[] = ((ErrorMessages) value).getErrors(); if (keys == null) { keys = new String[0]; } for (int i = 0; i < keys.length; i++) { am.add(ActionErrors.GLOBAL_ERROR, new ActionError(keys[i])); } } else if (value instanceof ActionMessages) { am = (ActionMessages) value; } else { throw new JspException( messages.getMessage("actionMessages.errors", value.getClass().getName())); } } catch (JspException e) { throw e; } catch (Exception e) { ; } return am; sq~ uq~q~pppq~fq~fxqîsq~isq~ uq~sq~bsq~ uq~ppppq”Isq~ uq~pppppppturlq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~%9sq~ uq~ppppptu/** * Use the new URLEncoder.encode() method from java 1.4 if available, else * use the old deprecated version. This method uses reflection to find the appropriate * method; if the reflection operations throw exceptions, this will return the url * encoded with the old URLEncoder.encode() method. * @return String - the encoded url. */ pt encodeURLq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft5 try { // encode url with new 1.4 method and UTF-8 encoding if (encode != null) { return (String) encode.invoke(null, new Object[] { url, "UTF-8" }); } } catch (IllegalAccessException e) { log.debug("Could not find Java 1.4 encode method. Using deprecated version.", e); } catch (InvocationTargetException e) { log.debug("Could not find Java 1.4 encode method. Using deprecated version.", e); } return URLEncoder.encode(url); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq”bsq~ uq~pppppppt pageContextq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxpppq~%9sq~ uq~ppppptb/** * Returns true if the custom tags are in XHTML mode. * @since Struts 1.1 */ ptisXhtmlq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ftÎ String xhtml = (String) pageContext.getAttribute( Globals.XHTML_KEY, PageContext.PAGE_SCOPE); return "true".equalsIgnoreCase(xhtml); sq~ uq~ppppq~fq~fxpppppq~,sq~ uq~pppppppt RequestUtilsq~=xsq~ 6uq~?qqFsq~Csq~ uq~ppppq~xsq~ uq~ppppsq~#q~%9xsq~Csq~ uq~ppppq~Ásq~ uq~ppppsq~#q~%9xsq~Csq~ uq~ppppq~bsq~ uq~ppppsq~#q~%9xsq~Csq~ uq~ppppq~Vsq~ uq~ppppsq~#q~%9xq€* sq~Csq~ uq~ppppq~ ›sq~ uq~ppppsq~#q~%9xq~ɼsq~Csq~ uq~ppppq~{sq~ uq~ppppsq~#q~%9xq€Lhq€P’q€T>sq~Csq~ uq~ppppq~!sq~ uq~ppppsq~#q~%9xq€Xnq‚Cq~†Bq€IÐq~%3q€€Éq~*3q€ë™q€€jq€éÎq€¤±qq€­†q~]$sq~Csq~ uq~ppppq~ûsq~ uq~ppppsq~#q~%9xsq~Csq~ uq~ppppq~"åsq~ uq~ppppsq~#q~%9xq€õósq~Csq~ uq~ppppq~;sq~ uq~ppppsq~#q~%9xq€~]q€4psq~Csq~ uq~ppppq~Usq~ uq~ppppsq~#q~%9xq~RÈq0Kq€÷dq~Éñq~Êq€ûq€:q€5q€htq€ q€(ØqýÔqýOsq~Csq~ uq~ppppq~"­sq~ uq~ppppsq~#q~%9xsq~Csq~ uq~ppppsq~Qsq~ uq~ sq~Csq~ uq~ppppq”Ësq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq”Ësq~ uq~ppppsq~#q~¼xsq~Csq~ uq~ppppq”Ësq~ uq~ppppsq~#q~9xsq~Csq~ uq~ppppq”Ësq~ uq~ppppsq~#q~?xq”Èppppq~sq~ uq~pppppt 2/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/tiles/ComponentDefinition.java,v 1.7 2003/04/17 03:51:12 dgraham Exp $ * $Revision: 1.7 $ * $Date: 2003/04/17 03:51:12 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Definition of a template / component attributes. * Attributes of a component can be defined with the help of this class. * An instance of this class can be used as a bean, and passed to 'insert' tag. */ ptComponentDefinition.javaq~fxsq~ uq~ppppsq~ uq~q~¾pppq~fxsq~ uq~ppppsq~#q~%9xq~Òq´q´aqLuq¡pppppppppq~$sq~ uq~qpppsq~ uq~ppppq~$q~$q~)øsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$tJ try { // get version of encode method with two String args Class[] args = new Class[] { String.class, String.class }; encode = URLEncoder.class.getMethod("encode", args); } catch (NoSuchMethodException e) { log.debug("Could not find Java 1.4 encode method. Using deprecated version.", e); } scopes.put("page", new Integer(PageContext.PAGE_SCOPE)); scopes.put("request", new Integer(PageContext.REQUEST_SCOPE)); scopes.put("session", new Integer(PageContext.SESSION_SCOPE)); scopes.put("application", new Integer(PageContext.APPLICATION_SCOPE)); try { // get version of encode method with two String args Class[] args = new Class[] { String.class, String.class }; encode = URLEncoder.class.getMethod("encode", args); } catch (NoSuchMethodException e) { log.debug("Could not find Java 1.4 encode method. Using deprecated version.", e); } scopes.put("page", new Integer(PageContext.PAGE_SCOPE)); scopes.put("request", new Integer(PageContext.REQUEST_SCOPE)); scopes.put("session", new Integer(PageContext.SESSION_SCOPE)); scopes.put("application", new Integer(PageContext.APPLICATION_SCOPE)); pxxppppq~êsq~ uq~pppppt /* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/bean/DefineTag.java,v 1.20 2003/05/10 17:37:43 dgraham Exp $ * $Revision: 1.20 $ * $Date: 2003/05/10 17:37:43 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Define a scripting variable based on the value(s) of the specified * bean property. * * @author Craig R. McClanahan * @version $Revision: 1.20 $ $Date: 2003/05/10 17:37:43 $ */ ptDefineTag.javaq~fxsq~ uq~ppppsq~ uq~q~ˆÀpppq~fxsq~ uq~ppppsq~#q~%xq€€Ÿq€€Xsq~Csq~ uq~ppppq~ûsq~ uq~ppppsq~#q~%xq03q€4¾qúqq~°ìqý7qìmpppppq~$sq~ uq~ q€êâq€_'q€Êq~{nq~­qqÕ;q~% ppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~™sq~ uq~ppppppptBodyTagSupport.javaq~$xsq~ uq~ppppsq~ uq~q~%pppq~$xsq~ uq~q~ˆÀq~%q~{”q~r. * *//** *

      A simple helper class that does everything that needs to be done to get * the nested tag extension to work. The tags will pass in their relative * properties and this class will leverage the accessibility of the request * object to calculate the nested references and manage them from a central * place.

      * *

      The helper method {@link #setNestedProperties} takes a reference to the * tag itself so all the simpler tags can have their references managed from a * central location. From here, the reference to a provided name is also * preserved for use.

      * *

      With all tags keeping track of themselves, we only have to seek to the * next level, or parent tag, were a tag will append a dot and it's own * property.

      * * @author Arron Bates * @since Struts 1.1 * @version $Revision: 1.14 $ $Date: 2003/04/22 02:28:52 $ */ ptNestedPropertyHelper.javaq~fxsq~ uq~ppppsq~ uq~q~\pppq~fxsq~ uq~ppppsq~#q~$Lxq€Ò•q'Lq~}Üqq pppppq~$sq~ uq~q~[úpppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~$Isq~ uq~pppppt ƒ/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/Constants.java,v 1.3 2001/02/23 21:13:10 craigmcc Exp $ * $Revision: 1.3 $ * $Date: 2001/02/23 21:13:10 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Manifest constants for this package. */ ptConstants.javaq~fxsq~ uq~ppppsq~ uq~q~$Lpppq~fxsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxq~W[q~%q~V,q~]2q~Yq~jq~Vq~RÜq~\q~_gq~g q~Wq€æˆq~mq€Ãq~{”q~eq~r. * *//** *

      Global manifest constants for the entire Struts Framework.

      * *

      Many of these constants were initially defined in Action, * but were moved here so that they could be referenced without referencing * the Action class itself. For backwards compatibility, * constant references there point at this class, and the constant values * themselves have not changed.

      * * @author Craig R. McClanahan * @version $Revision: 1.5 $ $Date: 2003/02/16 02:51:32 $ */ pt Globals.javaq~fxsq~ uq~ppppsq~ uq~q~#pppq~fxpppq~1Œsq~ uq~ppppppptstrutsq~=xsq~ uq~ppppqsq~ uq~q~1Ípppq~$ppxsq~ uq~ppppppptGlobalsq~rxsq~ #uq~,sq~Csq~ uq~ppppq~sq~ uq~ppppsq~#q~#xsq~Csq~ uq~ppppq~xsq~ uq~ppppsq~#q~#xsq~Csq~ uq~ppppq~Ásq~ uq~ppppsq~#q~#xsq~Csq~ uq~ppppq~bsq~ uq~ppppsq~#q~#xsq~Csq~ uq~ppppq~Vsq~ uq~ppppsq~#q~#xqdsq~Csq~ uq~ppppsq~Qsq~ uq~ sq~Csq~ uq~ppppq•Ÿsq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq•Ÿsq~ uq~ppppsq~#q~öxsq~Csq~ uq~ppppq•Ÿsq~ uq~ppppsq~#q~¼xq•œpppppq~ sq~ uq~pppppt S/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/config/DataSourceConfig.java,v 1.7 2002/07/24 05:28:05 craigmcc Exp $ * $Revision: 1.7 $ * $Date: 2002/07/24 05:28:05 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** *

      A JavaBean representing the configuration information of a * <data-source> element from a Struts * configuration file.

      * *

      WARNING - The properties of this configuration bean * are recognized by the default data source implementation, but some or all * of them may be ignored by custom data source implementations.

      * * @author Craig R. McClanahan * @version $Revision: 1.7 $ $Date: 2002/07/24 05:28:05 $ * @since Struts 1.1 */ ptDataSourceConfig.javaq~fxsq~ uq~ppppsq~ uq~q~apppq~fxsq~ uq~ppppsq~#q~#xsq~Csq~ uq~ppppq~ísq~ uq~ppppsq~#q~#xq!€q€IÄq€€±q€ëoq€€^q€éÂq€¤Ÿq€­’q€ê]q~]sq~Csq~ uq~ppppq~ûsq~ uq~ppppsq~#q~#xq~"úq~R¶q09q€.q~³Wq~µqýCqæ¸sq~Csq~ uq~ppppq~"­sq~ uq~ppppsq~#q~#xq´Uq'(sq~Csq~ uq~ppppq~Hsq~ uq~ppppsq~#q~#xq èq~}ÖqpÇqipppppppppq~–sq~ uq~q$úpppsq~ uq~ppppq~–q~–q•gsq~ uq~pppppq~–sq~ uq~ppppsq~ uq~ppppq~¢xq~–ppxxsq~Csq~ uq~ppppq~"åsq~ uq~ppppsq~#q~-xq”°qlpq~$Isq~ uq~pppppt >/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/MultiboxTag.java,v 1.18 2002/12/16 03:41:43 craigmcc Exp $ * $Revision: 1.18 $ * $Date: 2002/12/16 03:41:43 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Tag for input fields of type "checkbox". This differs from CheckboxTag * because it assumes that the underlying property is an array getter (of any * supported primitive type, or String), and the checkbox is initialized to * "checked" if the value listed for the "value" attribute is present in the * values returned by the property getter. * * @author Ralph Schaer * @author Craig R. McClanahan * @version $Revision: 1.18 $ $Date: 2002/12/16 03:41:43 $ */ ptMultiboxTag.javaq~fxsq~ uq~ppppsq~ uq~q€­Âpppq~fxsq~ uq~ppppsq~#q~"Îxq€~QqåKqp¯pppppq~$sq~ uq~q~Æpppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~"Ësq~ uq~ppppppptBeanUtils.javaq~$xsq~ uq~ppppsq~ uq~q~"Îpppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxq~"Èq~Æ2q~)Íq~)çq~Åøq~Ærq•ösq~Qsq~ uq~ppppq~"Ësq~ uq~ppppppptPropertyUtils.javaq~$xsq~ uq~ppppsq~ uq~q~"Èpppq~$xq~ÆDqqaqq$q_ÿq~Æ›q~Ƶppppq~,7sq~ uq~pppppppt beanutilsq~=xsq~ uq~ppppq~Æsq~ uq~q Lpppq~$ppxsq~ uq~pppppq~‡pt PropertyUtilsq~=xsq~ uq~ sq~Csq~ uq~ppppq~bsq~ uq~ppppsq~#q~"Èxsq~Csq~ uq~ppppq~;sq~ uq~ppppsq~#q~"Èxsq~Csq~ uq~ppppq~Usq~ uq~ppppsq~#q~"Èxq~Éåq~"Âqpµppppppq~$sq~ uq~q~Æpppsq~ uq~ppppq~$q~$q–sq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxxq•Ëqåsq~Csq~ uq~ppppq~"­sq~ uq~ppppsq~#q~„xsq~Csq~ uq~ppppq~"­sq~ uq~ppppsq~#q~¾xsq~Csq~ uq~ppppq~"­sq~ uq~ppppsq~#q~xq~7èq~"ªqN“q”Âpq~:Ðsq~ uq~pppppt z/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/tiles/util/TagUtils.java,v 1.6 2003/05/10 17:37:44 dgraham Exp $ * $Revision: 1.6 $ * $Date: 2003/05/10 17:37:44 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Collection of utilities. * This class also serves as an interface between Components and Struts. If * you want to rip away Struts, simply reimplement some methods in this class. * You can copy them from Struts. * * @author Cedric Dumoulin * @author David Graham */ pt TagUtils.javaq~fxsq~ uq~ppppsq~ uq~q~:Ópppq~fxsq~ uq~ppppsq~#q~"xq€oq9#qOsq~Csq~ uq~ppppsq~Qsq~ uq~ sq~Csq~ uq~ppppq–Xsq~ uq~ppppsq~#q~¾xq–Usq~Csq~ uq~ppppq–Xsq~ uq~ppppsq~#q~9xsq~Csq~ uq~ppppq–Xsq~ uq~ppppsq~#q~?xsq~Csq~ uq~ppppq–Xsq~ uq~ppppsq~#q~öxppppq~![sq~ uq~pppppt ž/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/tiles/xmlDefinition/XmlDefinition.java,v 1.3 2003/02/27 19:19:42 cedric Exp $ * $Revision: 1.3 $ * $Date: 2003/02/27 19:19:42 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** *A definition read from an XML definitions file. */ ptXmlDefinition.javaq~fxsq~ uq~ppppsq~ uq~q~Òpppq~fxsq~ uq~ppppsq~#q~"xq[dpppppppq~¥sq~ uq~q8“pppsq~ uq~q~pppq~¥q~¥sq~Qsq~ uq~ppppq~sq~ uq~pppppt  /* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/tiles/NoSuchDefinitionException.java,v 1.2 2003/02/27 19:20:51 cedric Exp $ * $Revision: 1.2 $ * $Date: 2003/02/27 19:20:51 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Exception thrown when a definition is not found. */ ptNoSuchDefinitionException.javaq~fxsq~ uq~ppppsq~ uq~q~"pppq~fxsq~ uq~pppppq~¥sq~ uq~ppppsq~ uq~ppppq~»xq~¥ppxsq~ uq~q~™q~!Üq[q~5„q[¥q~2Ísq~isq~ uq~sq~bsq~ uq~ppppq–•sq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq–•sq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~°pq~˜xsq~bsq~ uq~ppppq–•sq~ uq~ppppppptservletContextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xpq~–sq~ uq~ppppptÈ/** * Get a definition by its name. * @param name Name of requested definition. * @param request Current servelet request * @param servletContext current servlet context * @throws DefinitionsFactoryException An error occur while getting definition. * @throws NoSuchDefinitionException No definition found for specified name * Implementation can throw more accurate exception as a subclass of this exception */ pt getDefinitionq~rxsq~ uq~pppppq~–q~—q~–q~¾pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–psq~ uq~q~"q~ppq~–q~–xq~9qzíqUq~3Tq\ q~9žsq~isq~ uq~sq~bsq~ uq~ppppq–¼sq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq–¼sq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~°pq~€xsq~bsq~ uq~ppppq–¼sq~ uq~ppppppptservletContextq~{xsq~ uq~pppppq~~q~q~~q~Öpq~€xpq~–sq~ uq~ppppptÈ/** * Get a definition by its name. * @param name Name of requested definition. * @param request Current servelet request * @param servletContext current servlet context * @throws DefinitionsFactoryException An error occur while getting definition. * @throws NoSuchDefinitionException No definition found for specified name * Implementation can throw more accurate exception as a subclass of this exception */ pt getDefinitionq~{xsq~ uq~pppppq~~q~q~~q~¾pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~psq~ uq~q~"q~ppq~~q~~xq{ƒqUòq\%q~3Ûq~:!sq~isq~ uq~sq~bsq~ uq~ppppq–ãsq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq–ãsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~°pq~hxsq~bsq~ uq~ppppq–ãsq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxpq~–sq~ uq~ppppptÈ/** * Get a definition by its name. * @param name Name of requested definition. * @param request Current servelet request * @param servletContext current servlet context * @throws DefinitionsFactoryException An error occur while getting definition. * @throws NoSuchDefinitionException No definition found for specified name * Implementation can throw more accurate exception as a subclass of this exception */ pt getDefinitionq~cxsq~ uq~pppppq~fq~gq~fq~¾pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fpsq~ uq~q~"q~ppq~fq~fxq|qVáq\q~4bq~ppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq— sq~ uq~pppppppt definitionq~¢xsq~ uq~pppppq~¥q~¦q~¥q~¾pq~§xpppq~!Ìsq~ uq~pppppt?/** * Put definition in set * @param definition */ pt putDefinitionq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t< definitions.put( definition.getName(), definition ); sq~ uq~ppppq~¥q~¥xq[sq~isq~ uq~ppppq~!Ìsq~ uq~pppppt/** * */ pttoStringq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t* return definitions.toString(); sq~ uq~ppppq~¥q~¥xppppq~![sq~ uq~pppppppq[“q~¢xsq~ uq~ppppq~¥sq~ uq~qW£pppsq~ uq~ppppq~¥q~¥q~Œsq~ uq~pppppq~¥sq~ uq~ppppsq~ uq~q~5 DefinitionsUtil.NO_DEBUG ) System.out.println( "factory loaded : " + factory ); return factory; sq~ uq~q~q~ýppq~¥q~¥xq~5ÑqTËqTÛqU+sq~isq~ uq~ppppq~!^sq~ uq~ppppptD/** * Get default factory. * @return Default factory */ ptgetDefaultFactoryq~rxsq~ uq~pppppq~–q~—q~–q~!Ìpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–t return defaultFactory; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq—hsq~ uq~ppppppptservletContextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xpppq~!^sq~ uq~ppppptØ/** * Create default factory . * Create InstancesMapper for specified Locale. * If creation failed, use default mapper, and output an error message in * console. * @param servletContext Current servlet context. Used to open file. * @return Created default definition factory. * @throws DefinitionsFactoryException If an error occur while creating factory. * @throws FileNotFoundException if factory can't be loaded from filenames. */ ptcreateDefaultFactoryq~rxsq~ uq~pppppq~–q~—q~–q~!Ìpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–tÅ XmlDefinitionsSet rootXmlConfig = parseXmlFiles( servletContext, "", null ); if( rootXmlConfig == null ) throw new FileNotFoundException(); rootXmlConfig.resolveInheritances(); if(log.isDebugEnabled()) log.debug( rootXmlConfig ); DefinitionsFactory factory = new DefinitionsFactory( rootXmlConfig ); if(log.isInfoEnabled()) log.info( "factory loaded : " + factory ); return factory; sq~ uq~q~q~ýppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq—€sq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~bsq~ uq~ppppq—€sq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~°pq~˜xsq~bsq~ uq~ppppq—€sq~ uq~ppppppptservletContextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xpq~!^sq~ uq~pppppt0/** * Create a factory for specified key. * If creation failed, return default factory, and output an error message in * console. * @param key * @return Definition factory for specified key. * @throws DefinitionsFactoryException If an error occur while creating factory. */ pt createFactoryq~rxsq~ uq~pppppq~–q~—q~–q~!Ìpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–tL if( key == null ) return getDefaultFactory(); // Build possible postfixes List possiblePostfixes = calculatePostixes( "", (Locale)key ); // Search last postix corresponding to a config file to load. // First check if something is loaded for this postfix. // If not, try to load its config. XmlDefinitionsSet lastXmlFile = null; DefinitionsFactory factory = null; String curPostfix = null; int i; for(i=possiblePostfixes.size()-1; i>=0; i-- ) { curPostfix = (String)possiblePostfixes.get(i); // Already loaded ? factory = (DefinitionsFactory)loaded.get( curPostfix ); if( factory != null ) { // yes, stop search return factory; } // end if // Try to load it. If success, stop search lastXmlFile = parseXmlFiles( servletContext, curPostfix, null ); if( lastXmlFile != null ) break; } // end loop // Have we found a description file ? // If no, return default one if( lastXmlFile == null ) { return getDefaultFactory(); } // We found something. Need to load base and intermediate files String lastPostfix = curPostfix; XmlDefinitionsSet rootXmlConfig = parseXmlFiles( servletContext, "", null ); for( int j=0; j=0; i-- ) { curPostfix = (String)possiblePostfixes.get(i); // Already loaded ? factory = (DefinitionsFactory)loaded.get( curPostfix ); if( factory != null ) { // yes, stop search return factory; } // end if // Try to load it. If success, stop search lastXmlFile = parseXmlFiles( servletContext, curPostfix, null ); if( lastXmlFile != null ) break; } // end loop // Have we found a description file ? // If no, return default one if( lastXmlFile == null ) { return getDefaultFactory(); } // We found something. Need to load base and intermediate files String lastPostfix = curPostfix; XmlDefinitionsSet rootXmlConfig = parseXmlFiles( servletContext, "", null ); for( int j=0; j=0; i-- ) { curPostfix = (String)possiblePostfixes.get(i); // Already loaded ? factory = (DefinitionsFactory)loaded.get( curPostfix ); if( factory != null ) { // yes, stop search return factory; } // end if // Try to load it. If success, stop search lastXmlFile = parseXmlFiles( servletContext, curPostfix, null ); if( lastXmlFile != null ) break; } // end loop // Have we found a description file ? // If no, return default one if( lastXmlFile == null ) { return getDefaultFactory(); } // We found something. Need to load base and intermediate files String lastPostfix = curPostfix; XmlDefinitionsSet rootXmlConfig = parseXmlFiles( servletContext, "", null ); for( int j=0; jfalse. * Can be set from servlet config file. */ /** Do we want validating parser. Default is false. * Can be set from servlet config file. */ ptisValidatingParserq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xpppt falseq~¥q~¥q~¥xsq~(sq~ uq~ppppq~!^sq~ uq~ppppptv/** Parser detail level. Default is 0. * Can be set from servlet config file */ /** Parser detail level. Default is 0. * Can be set from servlet config file */ /** Parser detail level. Default is 0. * Can be set from servlet config file. */ /** Parser detail level. Default is 0. * Can be set from servlet config file. */ ptparserDetailLevelq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xpppt 0q~¥q~¥q~¥xsq~(sq~ uq~ppppq~!^sq~ uq~ppppptÀ/** * Maximum length of one branch of the resource search path tree. * Used in getBundle. */ /** * Maximum length of one branch of the resource search path tree. * Used in getBundle. */ /** * Maximum length of one branch of the resource search path tree. * Used in getBundle(). */ /** * Maximum length of one branch of the resource search path tree. * Used in getBundle(). */ ptMAX_BUNDLES_SEARCHEDq~¢xsq~ uq~pppppsq~#q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~xpppt 2q~¥q~¥q~¥xsq~(sq~ uq~ppppq~!^sq~ uq~ppppptŽ/** Default filenames extension */ /** Default filenames extension */ /** Default filenames extension. */ /** Default filenames extension. */ ptFILENAME_EXTENSIONq~¢xsq~ uq~pppppsq~#q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xpppt ".xml"q~¥q~¥q~¥xq3Ôsq~(sq~ uq~ppppq~!^sq~ uq~ppppptD/** Collection of already loaded definitions set, referenced by their suffix. */ /** Collection of already loaded definitions set, referenced by their suffix. */ /** Collection of already loaded definitions set, referenced by their suffix. */ /** Collection of already loaded definitions set, referenced by their suffix. */ ptloadedq~¢xsq~ uq~pppppq~¥q~¦q~¥q~¼pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~xppppq~¥q~¥q~¥xsq~esq~ uq~ppppq~!^sq~ uq~pppppt/** * Parameterless Constructor. * Method initFactory must be called prior to any use of created factory. */ ptI18nFactorySetq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t sq~ uq~ppppq~¥q~¥xsq~esq~ uq~sq~bsq~ uq~ppppq˜¥sq~ uq~ppppppptservletContextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Öpq~§xsq~bsq~ uq~ppppq˜¥sq~ uq~pppppppt propertiesq~¢xsq~ uq~pppppq~¥q~¦q~¥q~¼pq~§xppq~!^sq~ uq~pppppt¶/** * Constructor. * Init the factory by reading appropriate configuration file. * @throws FactoryNotFoundException Can't find factory configuration file. */ pq˜›q~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t1 initFactory( servletContext, properties); sq~ uq~q~pppq~¥q~¥xqT`sq~isq~ uq~sq~bsq~ uq~ppppq˜Äsq~ uq~ppppppptservletContextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Öpq~§xsq~bsq~ uq~ppppq˜Äsq~ uq~ppppppptproposedFilenameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xppq~!^sq~ uq~ppppptò/** * Initialization method. * Init the factory by reading appropriate configuration file. * This method is called exactly once immediately after factory creation in * case of internal creation (by DefinitionUtil). * @param servletContext Servlet Context passed to newly created factory. * @param proposedFilename File names, comma separated, to use as base file names. * @throws DefinitionsFactoryException An error occur during initialization. */ pt initFactoryq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥tÓ // Init list of filenames StringTokenizer tokenizer = new StringTokenizer( proposedFilename, "," ); this.filenames = new ArrayList(tokenizer.countTokens()); while( tokenizer.hasMoreTokens() ) { this.filenames.add(tokenizer.nextToken().trim()); } loaded = new HashMap(); defaultFactory = createDefaultFactory( servletContext ); if(debug) System.out.println( "default factory:" + defaultFactory ); sq~ uq~q~q~ýppq~¥q~¥xq~5Iq—@q~5q~5Ñsq~(sq~ uq~ppppq~!^sq~ uq~ppppptc/** Commons Logging instance. */ /** Commons Logging instance. */ /** Commons Logging instance. */ ptlogq~rxsq~ uq~pppppq~–q~—q~–q~9pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~ xpppt( LogFactory.getLog(I18nFactorySet.class)q~–q~–q~–xsq~esq~ uq~ppppq~!^sq~ uq~pppppt/** * Parameterless Constructor. * Method initFactory must be called prior to any use of created factory. */ pq˜›q~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t sq~ uq~ppppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppq™sq~ uq~ppppppptservletContextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xsq~bsq~ uq~ppppq™sq~ uq~pppppppt propertiesq~rxsq~ uq~pppppq~–q~—q~–q~¼pq~˜xppq~!^sq~ uq~pppppt¶/** * Constructor. * Init the factory by reading appropriate configuration file. * @throws FactoryNotFoundException Can't find factory configuration file. */ pq˜›q~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t1 initFactory( servletContext, properties); sq~ uq~q~pppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq™!sq~ uq~ppppppptservletContextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xsq~bsq~ uq~ppppq™!sq~ uq~pppppppt propertiesq~rxsq~ uq~pppppq~–q~—q~–q~¼pq~˜xppq~!^sq~ uq~pppppt"/** * Initialization method. * Init the factory by reading appropriate configuration file. * This method is called exactly once immediately after factory creation in * case of internal creation (by DefinitionUtil). * @param servletContext Servlet Context passed to newly created factory. * @param properties Map of name/property passed to newly created factory. Map can contains * more properties than requested. * @throws DefinitionsFactoryException An error occur during initialization. */ pt initFactoryq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tà // Set some property values String value = (String)properties.get(PARSER_VALIDATE_PARAMETER_NAME); if( value != null ) { isValidatingParser = Boolean.valueOf( value ).booleanValue(); } // end if value = (String)properties.get(PARSER_DETAILS_PARAMETER_NAME); if( value != null ) { try { parserDetailLevel = Integer.valueOf( value ).intValue(); } catch( NumberFormatException ex ) { log.error( "Bad format for parameter '" + PARSER_DETAILS_PARAMETER_NAME + "'. Integer expected."); } } // end if // init factory withappropriate configuration file // Try to use provided filename, if any. // If no filename are provided, try to use default ones. String filename = (String)properties.get(DEFINITIONS_CONFIG_PARAMETER_NAME); if( filename != null ) { // Use provided filename try { initFactory( servletContext, filename ); if(log.isDebugEnabled()) log.debug( "Factory initialized from file '" + filename + "'." ); } catch( FileNotFoundException ex ) { // A filename is specified, throw appropriate error. log.error( ex.getMessage() + " : Can't find file '" +filename + "'" ); throw new FactoryNotFoundException( ex.getMessage() + " : Can't find file '" +filename + "'" ) ; } // end catch } else { // try each default file names for( int i=0; inull if not found. */ ptgetDefinitionsFactoryKeyq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t‚ Locale locale = null; try { HttpSession session = ((HttpServletRequest)request).getSession(false); if (session != null) locale = (Locale)session.getAttribute(DefinitionsUtil.LOCALE_KEY); } catch( ClassCastException ex ) { // log.error( "I18nFactorySet.getDefinitionsFactoryKey" ); ex.printStackTrace(); } return locale; sq~ uq~ppppq~~q~~xq—Ðq52q\:q\bsq~isq~ uq~sq~bsq~ uq~ppppqšOsq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqšOsq~ uq~ppppppptpostfixq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xppq~!^sq~ uq~ppppptN/** * Concat postfix to the name. Take care of existing filename extension. * Transform the given name "name.ext" to have "name" + "postfix" + "ext". * If there is no ext, return "name" + "postfix". * @param name Filename. * @param postfix Postfix to add. * @return Concatenated filename. */ pt concatPostfixq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~d1xq~~tÓ if( postfix == null ) return name; // Search file name extension. // take care of Unix files starting with . int dotIndex = name.lastIndexOf( "." ); int lastNameStart = name.lastIndexOf( java.io.File.pathSeparator ); if( dotIndex < 1 || dotIndex < lastNameStart ) return name + postfix; String ext = name.substring( dotIndex ); name = name.substring( 0, dotIndex); return name + postfix + ext; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~!^sq~ uq~ppppptZ/** * Return String representation. * @return String representation. */ pttoStringq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tš StringBuffer buff = new StringBuffer( "I18nFactorySet : \n" ); buff.append( "--- default factory ---\n" ); buff.append( defaultFactory.toString() ); buff.append( "\n--- other factories ---\n" ); Iterator i = factories.values().iterator(); while( i.hasNext() ) { buff.append( i.next().toString() ).append("---------- \n"); } return buff.toString(); sq~ uq~ppppq~~q~~xsq~esq~ uq~ppppq~!^sq~ uq~ppppptˆ/** * Parameterless Constructor. * Method {@link #initFactory} must be called prior to any use of created factory. */ pq˜›q~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft sq~ uq~ppppq~fq~fxsq~esq~ uq~sq~bsq~ uq~ppppqšŽsq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxsq~bsq~ uq~ppppqšŽsq~ uq~pppppppt propertiesq~cxsq~ uq~pppppq~fq~gq~fq~¼pq~hxppq~!^sq~ uq~pppppt/** * Constructor. * Init the factory by reading appropriate configuration file. * @param servletContext Servlet context. * @param properties Map containing all properties. * @throws FactoryNotFoundException Can't find factory configuration file. */ pq˜›q~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft1 initFactory( servletContext, properties); sq~ uq~q~pppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqš­sq~ uq~ppppppptservletContextq~cxsq~ uq~pppppq~fq~gq~fq~Öpq~hxsq~bsq~ uq~ppppqš­sq~ uq~pppppppt propertiesq~cxsq~ uq~pppppq~fq~gq~fq~¼pq~hxppq~!^sq~ uq~pppppt"/** * Initialization method. * Init the factory by reading appropriate configuration file. * This method is called exactly once immediately after factory creation in * case of internal creation (by DefinitionUtil). * @param servletContext Servlet Context passed to newly created factory. * @param properties Map of name/property passed to newly created factory. Map can contains * more properties than requested. * @throws DefinitionsFactoryException An error occur during initialization. */ pt initFactoryq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftà // Set some property values String value = (String)properties.get(PARSER_VALIDATE_PARAMETER_NAME); if( value != null ) { isValidatingParser = Boolean.valueOf( value ).booleanValue(); } // end if value = (String)properties.get(PARSER_DETAILS_PARAMETER_NAME); if( value != null ) { try { parserDetailLevel = Integer.valueOf( value ).intValue(); } catch( NumberFormatException ex ) { log.error( "Bad format for parameter '" + PARSER_DETAILS_PARAMETER_NAME + "'. Integer expected."); } } // end if // init factory withappropriate configuration file // Try to use provided filename, if any. // If no filename are provided, try to use default ones. String filename = (String)properties.get(DEFINITIONS_CONFIG_PARAMETER_NAME); if( filename != null ) { // Use provided filename try { initFactory( servletContext, filename ); if(log.isDebugEnabled()) log.debug( "Factory initialized from file '" + filename + "'." ); } catch( FileNotFoundException ex ) { // A filename is specified, throw appropriate error. log.error( ex.getMessage() + " : Can't find file '" +filename + "'" ); throw new FactoryNotFoundException( ex.getMessage() + " : Can't find file '" +filename + "'" ) ; } // end catch } else { // try each default file names for( int i=0; inull if not found. */ ptgetDefinitionsFactoryKeyq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft‚ Locale locale = null; try { HttpSession session = ((HttpServletRequest)request).getSession(false); if (session != null) locale = (Locale)session.getAttribute(DefinitionsUtil.LOCALE_KEY); } catch( ClassCastException ex ) { // log.error( "I18nFactorySet.getDefinitionsFactoryKey" ); ex.printStackTrace(); } return locale; sq~ uq~ppppq~fq~fxq˜ q5ëq\¢q\Êsq~isq~ uq~sq~bsq~ uq~ppppq›sq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq›sq~ uq~ppppppptpostfixq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxppq~!^sq~ uq~ppppptN/** * Concat postfix to the name. Take care of existing filename extension. * Transform the given name "name.ext" to have "name" + "postfix" + "ext". * If there is no ext, return "name" + "postfix". * @param name Filename. * @param postfix Postfix to add. * @return Concatenated filename. */ pt concatPostfixq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~·gxq~ftÓ if( postfix == null ) return name; // Search file name extension. // take care of Unix files starting with . int dotIndex = name.lastIndexOf( "." ); int lastNameStart = name.lastIndexOf( java.io.File.pathSeparator ); if( dotIndex < 1 || dotIndex < lastNameStart ) return name + postfix; String ext = name.substring( dotIndex ); name = name.substring( 0, dotIndex); return name + postfix + ext; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~!^sq~ uq~ppppptZ/** * Return String representation. * @return String representation. */ pttoStringq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftš StringBuffer buff = new StringBuffer( "I18nFactorySet : \n" ); buff.append( "--- default factory ---\n" ); buff.append( defaultFactory.toString() ); buff.append( "\n--- other factories ---\n" ); Iterator i = factories.values().iterator(); while( i.hasNext() ) { buff.append( i.next().toString() ).append("---------- \n"); } return buff.toString(); sq~ uq~ppppq~fq~fxpppq~![sq~ uq~pppppppq˜›q~¢xsq~ uq~q~86ppppq~¥sq~ uq~q~4¦pppsq~ uq~q~4Ûpppq~¥q~¢q~sq~ uq~pppppq~¥sq~ uq~ppppsq~ uq~ppppq~»xq~¥ppxq~Òq~Œq~!Ìq~4Ûq~ q~2mq0pqW·qíhqNòq–Xq[aq0_q~%¹q~ppppppq~sq~ uq~pppppppt xmlDefinitionq~¢xsq~ uq~ppppq~4£sq~ uq~q8pppq~¥ppxsq~ uq~pppppppq~eq~¢xsq~ uq~ppppq~¥sq~ uq~q2qpppsq~ uq~ppppq~¥q~¥qíhsq~ uq~q0pppppq~¥sq~ uq~ppppsq~ uq~ q~q0²q1(sq~bsq~ uq~ppppsq~isq~ uq~q›hpppq~Òsq~ uq~ppppptc/** * add an attribute to this component * * @param attribute Attribute to add. */ pt addAttributeq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tF putAttribute( attribute.getName(), attribute.getValue() ); sq~ uq~ppppq~–q~–xsq~ uq~pppppppt attributeq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~bsq~ uq~ppppsq~isq~ uq~q›€pppq~Òsq~ uq~ppppptd/** * Add an attribute to this component. * * @param attribute Attribute to add. */ pt addAttributeq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tF putAttribute( attribute.getName(), attribute.getValue() ); sq~ uq~ppppq~~q~~xsq~ uq~pppppppt attributeq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xq1žsq~bsq~ uq~ppppsq~isq~ uq~q›˜pppq~Òsq~ uq~ppppptd/** * Add an attribute to this component. * * @param attribute Attribute to add. */ pt addAttributeq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftF putAttribute( attribute.getName(), attribute.getValue() ); sq~ uq~ppppq~fq~fxsq~ uq~pppppppt attributeq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxq2pq~»xq~¥ppxpq~§xpppq~Òsq~ uq~ppppptc/** * add an attribute to this component * * @param attribute Attribute to add. */ pt addAttributeq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tF putAttribute( attribute.getName(), attribute.getValue() ); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq›½sq~ uq~ppppppptnameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~Òsq~ uq~pppppt}/** * Sets the value of the extend and path property. * * @param aPath the new value of the path property */ pt setExtendsq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t inherit = name; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~Òsq~ uq~pppppts/** * Access method for the path property. * * @return the current value of the path property */ pt getExtendsq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t return inherit; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~Òsq~ uq~ppppptq~&eq~8$q9 qNûq–[pppppppq~¥sq~ uq~q~CêqW•ppsq~ uq~ppppq~¥q~¥q”Ësq~ uq~q~Òppppq~¥sq~ uq~ppppsq~ 5uq~9qØpqC?q~¶qž»q~™qOSqO|q~1q~Uq~vq~7q~!Üq— q~5„qDsq~bsq~ uq~ppppsq~esq~ uq~q©8pppq~„sq~ uq~ppppptf/** * Constructor. * @deprecated Use ComponentContext( Map attributes ) instead. */ pq~©q~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t // try // { // instance's attributes map is never null. attributes = new HashMap(instance.getAttributes()); // } // catch( NullPointerException ex ) // { // no attributes in instance : silently fail. // } sq~ uq~ppppq~–q~–xsq~ uq~ppppppptinstanceq~rxsq~ uq~pppppq~–q~—q~–q~¾pq~˜xq–•q~9q¡wqOqOÆq~Õq~ùqqzíqOçqUqE¿q¤ qPqjqŽq¯qM†q~9žsq~bsq~ uq~ppppsq~esq~ uq~q©Opppq~„sq~ uq~ppppptm/** * Constructor. * @deprecated Use {@link #ComponentContext(Map attributes)} instead. */ pq~©q~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t // try // { // instance's attributes map is never null. attributes = new HashMap(instance.getAttributes()); // } // catch( NullPointerException ex ) // { // no attributes in instance : silently fail. // } sq~ uq~ppppq~~q~~xsq~ uq~ppppppptinstanceq~{xsq~ uq~pppppq~~q~q~~q~¾pq~€xq–¼qP0q{ƒqUòqFÿq¦¡qPXqÿq€#q€DqNTq~:!sq~bsq~ uq~ppppsq~esq~ uq~q©fpppq~„sq~ uq~ppppptm/** * Constructor. * @deprecated Use {@link #ComponentContext(Map attributes)} instead. */ pq~©q~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft // try // { // instance's attributes map is never null. attributes = new HashMap(instance.getAttributes()); // } // catch( NullPointerException ex ) // { // no attributes in instance : silently fail. // } sq~ uq~ppppq~fq~fxsq~ uq~ppppppptinstanceq~cxsq~ uq~pppppq~fq~gq~fq~¾pq~hxq–ãqPyq|qVáppppq~»xq~¥ppxpq~§xpppq~„sq~ uq~ppppptf/** * Constructor. * @deprecated Use ComponentContext( Map attributes ) instead. */ pq~©q~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t // try // { // instance's attributes map is never null. attributes = new HashMap(instance.getAttributes()); // } // catch( NullPointerException ex ) // { // no attributes in instance : silently fail. // } sq~ uq~ppppq~¥q~¥xsq~esq~ uq~sq~bsq~ uq~ppppq©‰sq~ uq~pppppppt attributesq~¢xsq~ uq~pppppq~¥q~¦q~¥q~¼pq~§xpppq~„sq~ uq~pppppt”/** * Constructor. * Create a context and set specified attributes. * @param attributes Attributes to initialize context */ pq~©q~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tV if( attributes != null ) this.attributes = new HashMap(attributes); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq© sq~ uq~pppppppt newAttributesq~¢xsq~ uq~pppppq~¥q~¦q~¥q~¼pq~§xpppq~„sq~ uq~pppppt9/** * Add all attributes to this context. * Copies all of the mappings from the specified attribute map to this context. * New attribute mappings will replace any mappings that this context had for any of the keys * currently in the specified attribute map. * @param attributes to add. */ ptaddAllq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t if( attributes == null ) { attributes = new HashMap(newAttributes); return; } attributes.putAll( newAttributes ); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq©¸sq~ uq~ppppppptdefaultAttributesq~¢xsq~ uq~pppppq~¥q~¦q~¥q~¼pq~§xpppq~„sq~ uq~pppppt/** * Add all missing attributes to this context. * Copies all of the mappings from the specified attributes map to this context. * New attribute mappings will be added only if they don't already exist in * this context. * @param attributes to add. */ pt addMissingq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tî if( defaultAttributes == null ) return; if( attributes == null ) { attributes = new HashMap(defaultAttributes); return; } Set entries = defaultAttributes.entrySet(); Iterator iterator = entries.iterator(); while( iterator.hasNext() ) { Map.Entry entry = (Map.Entry)iterator.next(); if( !attributes.containsKey( entry.getKey()) ) { attributes.put(entry.getKey(), entry.getValue()); } // end if } // end loop sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq©Ðsq~ uq~ppppppptnameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~„sq~ uq~ppppptZ/** * Get an attribute from context * @param name * @return <{Object}> */ pt getAttributeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tT if( attributes == null ) return null; return attributes.get( name ); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~„sq~ uq~ppppptX/** * Get names of all attributes * @param name * @return <{Object}> */ ptgetAttributeNamesq~¢xsq~ uq~pppppq~¥q~¦q~¥q~öpq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tf if( attributes == null ) return EMPTY_ITERATOR; return attributes.keySet().iterator(); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq©øsq~ uq~ppppppptnameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq©øsq~ uq~ppppppptvalueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xppq~„sq~ uq~pppppti/** * Put a new attribute to context. * @param name * @param value * @return void */ pt putAttributeq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥te if( attributes == null ) attributes = new HashMap(); attributes.put( name, value ); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqªsq~ uq~ppppppptbeanNameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppqªsq~ uq~pppppppt pageContextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xppq~„sq~ uq~pppppt¹/** * Find object in one of the contexts. * Order : component then pageContext.findAttribute() * @return requested bean or null if not found. * */ pt findAttributeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tÝ Object attribute = getAttribute(beanName); if( attribute == null ) { attribute = pageContext.findAttribute( beanName ); } // end if return attribute; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqª8sq~ uq~ppppppptbeanNameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppqª8sq~ uq~ppppppptscopeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~bsq~ uq~ppppqª8sq~ uq~pppppppt pageContextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xpq~„sq~ uq~pppppt£/** * Get object from requested context. * Context can be 'component'. * @return requested bean or null if not found. * */ pt getAttributeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t® if(scope == ComponentConstants.COMPONENT_SCOPE ) return getAttribute(beanName); return pageContext.getAttribute( beanName, scope ); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqª`sq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~°pq~§xpppq~„sq~ uq~pppppt9/** * Get component context from request. */ pt getContextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~„pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥t` return (ComponentContext)request.getAttribute(ComponentConstants.COMPONENT_CONTEXT); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqªysq~ uq~ppppppptcontextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~„pq~§xsq~bsq~ uq~ppppqªysq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~°pq~§xppq~„sq~ uq~pppppt;/** * Store component context into request. */ pt setContextq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥tP request.setAttribute(ComponentConstants.COMPONENT_CONTEXT, context); sq~ uq~ppppq~¥q~¥xsq~esq~ uq~ppppq~„sq~ uq~pppppt"/** * Constructor. */ pq~©q~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t sq~ uq~ppppq~–q~–xq©;sq~esq~ uq~sq~bsq~ uq~ppppqª©sq~ uq~pppppppt attributesq~rxsq~ uq~pppppq~–q~—q~–q~¼pq~˜xpppq~„sq~ uq~pppppt”/** * Constructor. * Create a context and set specified attributes. * @param attributes Attributes to initialize context */ pq~©q~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tV if( attributes != null ) this.attributes = new HashMap(attributes); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqªÀsq~ uq~pppppppt newAttributesq~rxsq~ uq~pppppq~–q~—q~–q~¼pq~˜xpppq~„sq~ uq~pppppt9/** * Add all attributes to this context. * Copies all of the mappings from the specified attribute map to this context. * New attribute mappings will replace any mappings that this context had for any of the keys * currently in the specified attribute map. * @param attributes to add. */ ptaddAllq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t if( attributes == null ) { attributes = new HashMap(newAttributes); return; } attributes.putAll( newAttributes ); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqªØsq~ uq~ppppppptdefaultAttributesq~rxsq~ uq~pppppq~–q~—q~–q~¼pq~˜xpppq~„sq~ uq~pppppt/** * Add all missing attributes to this context. * Copies all of the mappings from the specified attributes map to this context. * New attribute mappings will be added only if they don't already exist in * this context. * @param attributes to add. */ pt addMissingq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tî if( defaultAttributes == null ) return; if( attributes == null ) { attributes = new HashMap(defaultAttributes); return; } Set entries = defaultAttributes.entrySet(); Iterator iterator = entries.iterator(); while( iterator.hasNext() ) { Map.Entry entry = (Map.Entry)iterator.next(); if( !attributes.containsKey( entry.getKey()) ) { attributes.put(entry.getKey(), entry.getValue()); } // end if } // end loop sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqªðsq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~„sq~ uq~ppppptZ/** * Get an attribute from context * @param name * @return <{Object}> */ pt getAttributeq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tT if( attributes == null ) return null; return attributes.get( name ); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~„sq~ uq~ppppptX/** * Get names of all attributes * @param name * @return <{Object}> */ ptgetAttributeNamesq~rxsq~ uq~pppppq~–q~—q~–q~öpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tf if( attributes == null ) return EMPTY_ITERATOR; return attributes.keySet().iterator(); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq«sq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq«sq~ uq~ppppppptvalueq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xppq~„sq~ uq~pppppti/** * Put a new attribute to context. * @param name * @param value * @return void */ pt putAttributeq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–te if( attributes == null ) attributes = new HashMap(); attributes.put( name, value ); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq«8sq~ uq~ppppppptbeanNameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq«8sq~ uq~pppppppt pageContextq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xppq~„sq~ uq~pppppt¹/** * Find object in one of the contexts. * Order : component then pageContext.findAttribute() * @return requested bean or null if not found. * */ pt findAttributeq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tÝ Object attribute = getAttribute(beanName); if( attribute == null ) { attribute = pageContext.findAttribute( beanName ); } // end if return attribute; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq«Xsq~ uq~ppppppptbeanNameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq«Xsq~ uq~ppppppptscopeq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~bsq~ uq~ppppq«Xsq~ uq~pppppppt pageContextq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xpq~„sq~ uq~pppppt£/** * Get object from requested context. * Context can be 'component'. * @return requested bean or null if not found. * */ pt getAttributeq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t® if(scope == ComponentConstants.COMPONENT_SCOPE ) return getAttribute(beanName); return pageContext.getAttribute( beanName, scope ); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq«€sq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~°pq~˜xpppq~„sq~ uq~pppppt9/** * Get component context from request. */ pt getContextq~rxsq~ uq~pppppq~–q~—q~–q~„pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t` return (ComponentContext)request.getAttribute(ComponentConstants.COMPONENT_CONTEXT); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq«™sq~ uq~ppppppptcontextq~rxsq~ uq~pppppq~–q~—q~–q~„pq~˜xsq~bsq~ uq~ppppq«™sq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~°pq~˜xppq~„sq~ uq~pppppt;/** * Store component context into request. */ pt setContextq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–tP request.setAttribute(ComponentConstants.COMPONENT_CONTEXT, context); sq~ uq~ppppq~–q~–xsq~esq~ uq~ppppq~„sq~ uq~pppppt"/** * Constructor. */ pq~©q~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t sq~ uq~ppppq~~q~~xq©Rsq~esq~ uq~sq~bsq~ uq~ppppq«Ésq~ uq~pppppppt attributesq~{xsq~ uq~pppppq~~q~q~~q~¼pq~€xpppq~„sq~ uq~pppppt•/** * Constructor. * Create a context and set specified attributes. * @param attributes Attributes to initialize context. */ pq~©q~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tV if( attributes != null ) this.attributes = new HashMap(attributes); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq«àsq~ uq~pppppppt newAttributesq~{xsq~ uq~pppppq~~q~q~~q~¼pq~€xpppq~„sq~ uq~ppppptG/** * Add all attributes to this context. * Copies all of the mappings from the specified attribute map to this context. * New attribute mappings will replace any mappings that this context had for any of the keys * currently in the specified attribute map. * @param newAttributes Attributes to add. */ ptaddAllq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t if( attributes == null ) { attributes = new HashMap(newAttributes); return; } attributes.putAll( newAttributes ); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq«øsq~ uq~ppppppptdefaultAttributesq~{xsq~ uq~pppppq~~q~q~~q~¼pq~€xpppq~„sq~ uq~pppppt&/** * Add all missing attributes to this context. * Copies all of the mappings from the specified attributes map to this context. * New attribute mappings will be added only if they don't already exist in * this context. * @param defaultAttributes Attributes to add. */ pt addMissingq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tî if( defaultAttributes == null ) return; if( attributes == null ) { attributes = new HashMap(defaultAttributes); return; } Set entries = defaultAttributes.entrySet(); Iterator iterator = entries.iterator(); while( iterator.hasNext() ) { Map.Entry entry = (Map.Entry)iterator.next(); if( !attributes.containsKey( entry.getKey()) ) { attributes.put(entry.getKey(), entry.getValue()); } // end if } // end loop sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq¬sq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~„sq~ uq~ppppptr/** * Get an attribute from context. * @param name Name of the attribute. * @return <{Object}> */ pt getAttributeq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tT if( attributes == null ) return null; return attributes.get( name ); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~„sq~ uq~ppppptG/** * Get names of all attributes. * @return <{Object}> */ ptgetAttributeNamesq~{xsq~ uq~pppppq~~q~q~~q~öpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tf if( attributes == null ) return EMPTY_ITERATOR; return attributes.keySet().iterator(); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq¬8sq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq¬8sq~ uq~ppppppptvalueq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xppq~„sq~ uq~pppppt…/** * Put a new attribute to context. * @param name Name of the attribute. * @param value Value of the attribute. */ pt putAttributeq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~te if( attributes == null ) attributes = new HashMap(); attributes.put( name, value ); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq¬Xsq~ uq~ppppppptbeanNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq¬Xsq~ uq~pppppppt pageContextq~{xsq~ uq~pppppq~~q~q~~q~pq~€xppq~„sq~ uq~pppppt/** * Find object in one of the contexts. * Order : component then pageContext.findAttribute() * @param beanName Name of the bean to find. * @param pageContext Page context. * @return Requested bean or null if not found. */ pt findAttributeq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tÏ Object attribute = getAttribute(beanName); if( attribute == null ) { attribute = pageContext.findAttribute( beanName ); } // end if return attribute; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq¬xsq~ uq~ppppppptbeanNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq¬xsq~ uq~ppppppptscopeq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~bsq~ uq~ppppq¬xsq~ uq~pppppppt pageContextq~{xsq~ uq~pppppq~~q~q~~q~pq~€xpq~„sq~ uq~pppppt6/** * Get object from requested context. * Context can be 'component'. * @param beanName Name of the bean to find. * @param scope Search scope (see {@link PageContext}). * @param pageContext Page context. * @return requested bean or null if not found. */ pt getAttributeq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t¤ if(scope == ComponentConstants.COMPONENT_SCOPE ) return getAttribute(beanName); return pageContext.getAttribute( beanName, scope ); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq¬ sq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~°pq~€xpppq~„sq~ uq~pppppt/** * Get component context from request. * @param request ServletRequest. * @return ComponentContext */ pt getContextq~{xsq~ uq~pppppq~~q~q~~q~„pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t` return (ComponentContext)request.getAttribute(ComponentConstants.COMPONENT_CONTEXT); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq¬¹sq~ uq~ppppppptcontextq~{xsq~ uq~pppppq~~q~q~~q~„pq~€xsq~bsq~ uq~ppppq¬¹sq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~°pq~€xppq~„sq~ uq~pppppt§/** * Store component context into request. * @param context ComponentContext to store. * @param request Request to store ComponentContext. */ pt setContextq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~tP request.setAttribute(ComponentConstants.COMPONENT_CONTEXT, context); sq~ uq~ppppq~~q~~xsq~esq~ uq~ppppq~„sq~ uq~pppppt"/** * Constructor. */ pq~©q~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft sq~ uq~ppppq~fq~fxq©isq~esq~ uq~sq~bsq~ uq~ppppq¬ésq~ uq~pppppppt attributesq~cxsq~ uq~pppppq~fq~gq~fq~¼pq~hxpppq~„sq~ uq~pppppt•/** * Constructor. * Create a context and set specified attributes. * @param attributes Attributes to initialize context. */ pq~©q~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftV if( attributes != null ) this.attributes = new HashMap(attributes); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq­sq~ uq~pppppppt newAttributesq~cxsq~ uq~pppppq~fq~gq~fq~¼pq~hxpppq~„sq~ uq~ppppptG/** * Add all attributes to this context. * Copies all of the mappings from the specified attribute map to this context. * New attribute mappings will replace any mappings that this context had for any of the keys * currently in the specified attribute map. * @param newAttributes Attributes to add. */ ptaddAllq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft if( attributes == null ) { attributes = new HashMap(newAttributes); return; } attributes.putAll( newAttributes ); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq­sq~ uq~ppppppptdefaultAttributesq~cxsq~ uq~pppppq~fq~gq~fq~¼pq~hxpppq~„sq~ uq~pppppt&/** * Add all missing attributes to this context. * Copies all of the mappings from the specified attributes map to this context. * New attribute mappings will be added only if they don't already exist in * this context. * @param defaultAttributes Attributes to add. */ pt addMissingq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftî if( defaultAttributes == null ) return; if( attributes == null ) { attributes = new HashMap(defaultAttributes); return; } Set entries = defaultAttributes.entrySet(); Iterator iterator = entries.iterator(); while( iterator.hasNext() ) { Map.Entry entry = (Map.Entry)iterator.next(); if( !attributes.containsKey( entry.getKey()) ) { attributes.put(entry.getKey(), entry.getValue()); } // end if } // end loop sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq­0sq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~„sq~ uq~ppppptr/** * Get an attribute from context. * @param name Name of the attribute. * @return <{Object}> */ pt getAttributeq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftT if( attributes == null ) return null; return attributes.get( name ); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~„sq~ uq~ppppptG/** * Get names of all attributes. * @return <{Object}> */ ptgetAttributeNamesq~cxsq~ uq~pppppq~fq~gq~fq~öpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftf if( attributes == null ) return EMPTY_ITERATOR; return attributes.keySet().iterator(); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq­Xsq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq­Xsq~ uq~ppppppptvalueq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxppq~„sq~ uq~pppppt…/** * Put a new attribute to context. * @param name Name of the attribute. * @param value Value of the attribute. */ pt putAttributeq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fte if( attributes == null ) attributes = new HashMap(); attributes.put( name, value ); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq­xsq~ uq~ppppppptbeanNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq­xsq~ uq~pppppppt pageContextq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxppq~„sq~ uq~pppppt/** * Find object in one of the contexts. * Order : component then pageContext.findAttribute() * @param beanName Name of the bean to find. * @param pageContext Page context. * @return Requested bean or null if not found. */ pt findAttributeq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftÏ Object attribute = getAttribute(beanName); if( attribute == null ) { attribute = pageContext.findAttribute( beanName ); } // end if return attribute; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq­˜sq~ uq~ppppppptbeanNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq­˜sq~ uq~ppppppptscopeq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~bsq~ uq~ppppq­˜sq~ uq~pppppppt pageContextq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxpq~„sq~ uq~pppppt6/** * Get object from requested context. * Context can be 'component'. * @param beanName Name of the bean to find. * @param scope Search scope (see {@link PageContext}). * @param pageContext Page context. * @return requested bean or null if not found. */ pt getAttributeq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft¤ if(scope == ComponentConstants.COMPONENT_SCOPE ) return getAttribute(beanName); return pageContext.getAttribute( beanName, scope ); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq­Àsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~°pq~hxpppq~„sq~ uq~pppppt/** * Get component context from request. * @param request ServletRequest. * @return ComponentContext */ pt getContextq~cxsq~ uq~pppppq~fq~gq~fq~„pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft` return (ComponentContext)request.getAttribute(ComponentConstants.COMPONENT_CONTEXT); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq­Ùsq~ uq~ppppppptcontextq~cxsq~ uq~pppppq~fq~gq~fq~„pq~hxsq~bsq~ uq~ppppq­Ùsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~°pq~hxppq~„sq~ uq~pppppt§/** * Store component context into request. * @param context ComponentContext to store. * @param request Request to store ComponentContext. */ pt setContextq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ftP request.setAttribute(ComponentConstants.COMPONENT_CONTEXT, context); sq~ uq~ppppq~fq~fxq~sq~ uq~pppppppq~©q~¢xsq~ uq~ q×Öqü(qø€qê. * *//** * Root class for all Tiles-exceptions. * @author Cedric Dumoulin */ ptTilesException.javaq~fxsq~ uq~ppppsq~ uq~q~pppq~fxqO@q~ËÉqíñq–‚q~ÈÉq´q´.qNqG^q8Wq~}qåq'q¯usq~Qsq~ uq~ppppq~sq~ uq~pppppt Ö/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/tiles/DefinitionsFactoryException.java,v 1.2 2003/02/27 19:20:51 cedric Exp $ * $Revision: 1.2 $ * $Date: 2003/02/27 19:20:51 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Exception thrown when an error occurs while the factory tries to * create a new instance mapper. */ pt DefinitionsFactoryException.javaq~fxsq~ uq~ppppsq~ uq~q~pppq~fxqL6qå6sq~Qsq~ uq~sq~Csq~ uq~ppppq®sq~ uq~ppppsq~#q~¼xsq~Csq~ uq~ppppq®sq~ uq~ppppsq~#q~°xsq~Csq~ uq~ppppq®sq~ uq~ppppsq~#q~Öxpq~sq~ uq~pppppt ¯/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/tiles/ComponentDefinitionsFactory.java,v 1.3 2003/01/05 01:24:48 martinc Exp $ * $Revision: 1.3 $ * $Date: 2003/01/05 01:24:48 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Component repository interface. * This interface allows to retrieve an definition by its name, independently of the * factory implementation. * Implementation must be Serializable, in order to be compliant with web Container * having this constraint (Weblogic 6.x). * @deprecated Use DefinitionsFactory instead. */ pt ComponentDefinitionsFactory.javaq~fxsq~ uq~ppppsq~ uq~q~–pppq~fxq°Opppppppppppppq~$Csq~ uq~pppppppttilesq~¢xsq~ uq~pppppq~CÝsq~ uq~q$ðpppq~¥ppxsq~ uq~pppppppq~–q~¢xsq~ uq~ppppq~¥sq~ uq~q8Ípppsq~ uq~q~‚pppq~¥q~¥q®sq~ uq~q~ppppq~¥sq~ uq~ppppsq~ uq~ppppq~»xq~¥ppxsq~ uq~ppppptD/** * Return a detail message for this exception. * *

      If there is a embedded exception, and if the MapperFactoryException * has no detail message of its own, this method will return * the detail message from the embedded exception.

      * * @return The error or warning message. */ pt getMessageq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~q~qpppq~¥q~»xq~¥t´ String message = super.getMessage (); if (message == null && exception != null) { return exception.getMessage(); } else { return message; } sq~ uq~ppppq~¥q~¥xpppsq~ uq~ppppq~¥q~»xq~¥t´ String message = super.getMessage (); if (message == null && exception != null) { return exception.getMessage(); } else { return message; } sq~ uq~ppppq~¥q~¥xq~úsq~(sq~ uq~ppppq~sq~ uq~pppppt////////////////////////////////////////////////////////////////////// // Internal state. ////////////////////////////////////////////////////////////////////// /** * Any "wrapped" exception will be exposed when this is serialized. * @serial */ ////////////////////////////////////////////////////////////////////// // Internal state. ////////////////////////////////////////////////////////////////////// /** * Any "wrapped" exception will be exposed when this is serialized. * @serial */ ////////////////////////////////////////////////////////////////////// // Internal state. ////////////////////////////////////////////////////////////////////// /** * Any "wrapped" exception will be exposed when this is serialized. * @serial */ ////////////////////////////////////////////////////////////////////// // Internal state. ////////////////////////////////////////////////////////////////////// /** * Any "wrapped" exception will be exposed when this is serialized. * @serial */ pt exceptionq~¢xsq~ uq~pppppq~¥q~¦q~¥q~‚pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~xppppq~¥q~¥q~¥xsq~esq~ uq~ppppq~sq~ uq~ppppptˆ/** * Constructor. * Create a new MapperFactoryException. * * @param message The error or warning message. */ pq~q~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t. super(); this.exception = null; sq~ uq~ppppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppq®~sq~ uq~ppppppptmessageq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~sq~ uq~ppppptˆ/** * Constructor. * Create a new MapperFactoryException. * * @param message The error or warning message. */ pq~q~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t5 super(message); this.exception = null; sq~ uq~ppppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppq®•sq~ uq~pppppppteq~rxsq~ uq~pppppq~–q~—q~–q~‚pq~˜xpppq~sq~ uq~ppppptH/** * Create a new MapperFactoryException wrapping an existing exception. * *

      The existing exception will be embedded in the new * one, and its message will become the default message for * the MapperFactoryException.

      * * @param e The exception to be wrapped in a SAXException. */ pq~q~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t+ super(); this.exception = e; sq~ uq~ppppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppq®¬sq~ uq~ppppppptmessageq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq®¬sq~ uq~pppppppteq~rxsq~ uq~pppppq~–q~—q~–q~‚pq~˜xppq~sq~ uq~pppppt{/** * Create a new MapperFactoryException from an existing exception. * *

      The existing exception will be embedded in the new * one, but the new exception will have its own message.

      * * @param message The detail message. * @param e The exception to be wrapped in a MapperFactoryException. * @see org.xml.sax.Parser#setLocale */ pq~q~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t2 super(message); this.exception = e; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~sq~ uq~ppppptD/** * Return a detail message for this exception. * *

      If there is a embedded exception, and if the MapperFactoryException * has no detail message of its own, this method will return * the detail message from the embedded exception.

      * * @return The error or warning message. */ pt getMessageq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t´ String message = super.getMessage (); if (message == null && exception != null) { return exception.getMessage(); } else { return message; } sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~sq~ uq~pppppt‚/** * Return the embedded exception, if any. * * @return The embedded exception, or null if there is none. */ pt getExceptionq~rxsq~ uq~pppppq~–q~—q~–q~‚pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return exception; sq~ uq~ppppq~–q~–xsq~esq~ uq~ppppq~sq~ uq~pppppt /** * Constructor. */ pq~q~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t. super(); this.exception = null; sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq®úsq~ uq~ppppppptmessageq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~sq~ uq~ppppptT/** * Constructor. * @param message The error or warning message. */ pq~q~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t5 super(message); this.exception = null; sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq¯sq~ uq~pppppppteq~{xsq~ uq~pppppq~~q~q~~q~‚pq~€xpppq~sq~ uq~ppppptL/** * Create a new DefinitionsFactoryException wrapping an existing exception. * *

      The existing exception will be embedded in the new * one and its message will become the default message for * the DefinitionsFactoryException.

      * * @param e The exception to be wrapped. */ pq~q~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t+ super(); this.exception = e; sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq¯(sq~ uq~ppppppptmessageq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq¯(sq~ uq~pppppppteq~{xsq~ uq~pppppq~~q~q~~q~‚pq~€xppq~sq~ uq~ppppptH/** * Create a new DefinitionsFactoryException from an existing exception. * *

      The existing exception will be embedded in the new * one, but the new exception will have its own message.

      * * @param message The detail message. * @param e The exception to be wrapped. */ pq~q~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t2 super(message); this.exception = e; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~sq~ uq~ppppptI/** * Return a detail message for this exception. * *

      If there is a embedded exception, and if the DefinitionsFactoryException * has no detail message of its own, this method will return * the detail message from the embedded exception.

      * * @return The error or warning message. */ pt getMessageq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t´ String message = super.getMessage (); if (message == null && exception != null) { return exception.getMessage(); } else { return message; } sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~sq~ uq~ppppptˆ/** * Return the embedded exception, if any. * @return The embedded exception, or null if there is none. */ pt getExceptionq~{xsq~ uq~pppppq~~q~q~~q~‚pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t return exception; sq~ uq~ppppq~~q~~xsq~esq~ uq~ppppq~sq~ uq~pppppt /** * Constructor. */ pq~q~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft. super(); this.exception = null; sq~ uq~ppppq~fq~fxsq~esq~ uq~sq~bsq~ uq~ppppq¯vsq~ uq~ppppppptmessageq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~sq~ uq~ppppptT/** * Constructor. * @param message The error or warning message. */ pq~q~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft5 super(message); this.exception = null; sq~ uq~ppppq~fq~fxsq~esq~ uq~sq~bsq~ uq~ppppq¯sq~ uq~pppppppteq~cxsq~ uq~pppppq~fq~gq~fq~‚pq~hxpppq~sq~ uq~ppppptL/** * Create a new DefinitionsFactoryException wrapping an existing exception. * *

      The existing exception will be embedded in the new * one and its message will become the default message for * the DefinitionsFactoryException.

      * * @param e The exception to be wrapped. */ pq~q~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft+ super(); this.exception = e; sq~ uq~ppppq~fq~fxsq~esq~ uq~sq~bsq~ uq~ppppq¯¤sq~ uq~ppppppptmessageq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq¯¤sq~ uq~pppppppteq~cxsq~ uq~pppppq~fq~gq~fq~‚pq~hxppq~sq~ uq~ppppptH/** * Create a new DefinitionsFactoryException from an existing exception. * *

      The existing exception will be embedded in the new * one, but the new exception will have its own message.

      * * @param message The detail message. * @param e The exception to be wrapped. */ pq~q~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft2 super(message); this.exception = e; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~sq~ uq~ppppptI/** * Return a detail message for this exception. * *

      If there is a embedded exception, and if the DefinitionsFactoryException * has no detail message of its own, this method will return * the detail message from the embedded exception.

      * * @return The error or warning message. */ pt getMessageq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft´ String message = super.getMessage (); if (message == null && exception != null) { return exception.getMessage(); } else { return message; } sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~sq~ uq~ppppptˆ/** * Return the embedded exception, if any. * @return The embedded exception, or null if there is none. */ pt getExceptionq~cxsq~ uq~pppppq~fq~gq~fq~‚pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft return exception; sq~ uq~ppppq~fq~fxppppq~sq~ uq~pppppppq~q~¢xsq~ uq~ sq~Csq~ uq~ppppq~Œsq~ uq~ppppsq~#q~xq~:Áq–Dq~&kq~?Xq~80q9qOq~ ppppq~¥sq~ uq~q8¥pppsq~ uq~q~pppq~¥q~¥q®sq~ uq~q~7Bq~"pppq~¥sq~ uq~ppppsq~ uq~ppppq~»xq~¥ppxsq~ Œuq~›q~™q~6q}”q}½q|ÅqOSqO|q~6sq~6“q~6²q~6Úq~6úq~7qP¡q~63q~!Üq~5\q~5„q~5¬q~5ûq˜¥qT`q˜Äq—@q~5Ñq–•sq~isq~ uq~sq~bsq~ uq~ppppq¯ùsq~ uq~ppppppptservletContextq~rxsq~ uq~pppppq~–q~—q~–q~Öpq~˜xsq~bsq~ uq~ppppq¯ùsq~ uq~pppppppt propertiesq~rxsq~ uq~pppppq~–q~—q~–q~¼pq~˜xppq~–sq~ uq~ppppptÓ/** * Init factory. * This method is called exactly once immediately after factory creation in * case of internal creation (by DefinitionUtil). * @param servletContext Servlet Context passed to newly created factory. * @param properties Map of name/property passed to newly created factory. * Map can contains more properties than requested. * @throws DefinitionsFactoryException An error occur during initialization. */ pt initFactoryq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–psq~ uq~q~pppq~–q~–xq~9q~9Bq~9pqG{qG¤qGÅqGæqHqH0qOqOÆqyppppq~![sq~ uq~pppppt ¹/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/tiles/xmlDefinition/I18nFactorySet.java,v 1.7 2003/03/16 16:02:11 husted Exp $ * $Revision: 1.7 $ * $Date: 2003/03/16 16:02:11 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Definitions factory. * This implementation allows to have a set of definition factories. * There is a main factory and one factory for each file associated to a Locale. * * To retrieve a definition, we first search for the appropriate factory using * the Locale found in session context. If no factory is found, use the * default one. Then we ask the factory for the definition. * * A definition factory file is loaded using main filename extended with locale code * (ex : templateDefinitions_fr.xml). If no file is found under this name, use default file. */ ptI18nFactorySet.javaq~fxsq~ uq~ppppsq~ uq~q~!^pppq~fxsq~ uq~ppppsq~#q~ýxq bqèqÃppppppq~$sq~ uq~q€¼pppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~Tsq~ uq~ppppppptFileNotFoundException.javaq~$xsq~ uq~ppppsq~ uq~q~ýpppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxsq~ 'uq~'q~“q~äqòq£qåq˜Äq—@q±sq~isq~ uq~sq~bsq~ uq~ppppq°¿sq~ uq~pppppppt bufferSizeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xpppq~–sq~ uq~ppppptå/** * Attempts to read a file n bytes at a time, n being equal to "bufferSize". * Note that this method can be dangerous, and that the size of a file * can cause an OutOfMemoryError quite easily. You should use * {@link #getInputStream() getInputStream} and do your own thing. * * @param bufferSize The size in bytes that are read from the file at a time * @exception FileNotFoundException If the temp file no longer exists */ pt getFileDataq~¢xsq~ uq~pppppq~¥q~¦q~¥q~×t[]q~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tä ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); FileInputStream fis = new FileInputStream(filePath); int readLength = 0; int totalLength = 0; int offset = 0; byte[] bytes = new byte[bufferSize]; while ((readLength = fis.read(bytes, offset, bufferSize)) != -1) { byteStream.write(bytes, offset, bufferSize); totalLength += readLength; offset += readLength; } bytes = byteStream.toByteArray(); fis.close(); byteStream.close(); return bytes; sq~ uq~q~ýpppq~¥q~¥xqqÂqÒq™Aq—hqÂsq~isq~ uq~sq~bsq~ uq~ppppq°Øsq~ uq~pppppppt bufferSizeq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xpppq~–sq~ uq~ppppptÝ/** * Attempts to read a file n bytes at a time, n being equal to "bufferSize". * Note that this method can be dangerous, and that the size of a file * can cause an OutOfMemoryError quite easily. You should use * {@link #getInputStream() getInputStream} and do your own thing. * * @param bufferSize The size in bytes that are read from the file at a time * @exception FileNotFoundException If the temp file no longer exists */ pt getFileDataq~rxsq~ uq~pppppq~–q~—q~–q~×t[]q~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tÌ ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); FileInputStream fis = new FileInputStream(filePath); int readLength = 0; int totalLength = 0; int offset = 0; byte[] bytes = new byte[bufferSize]; while ((readLength = fis.read(bytes, offset, bufferSize)) != -1) { byteStream.write(bytes, offset, bufferSize); totalLength += readLength; offset += readLength; } bytes = byteStream.toByteArray(); fis.close(); byteStream.close(); return bytes; sq~ uq~q~ýq~kppq~–q~–xqqbqrq—qÚqšq—¸qqqqsq~isq~ uq~ppppq~–sq~ uq~ppppptÏ/** * Attempt to read the temporary file and get it's data in byte * array form. Tries to read the entire file (using a byte array * the size of getFileSize()) at once, in one call to FileInputStream.read(byte[]). * For buffered reading, see {@link #getFileData(int) getFileData(int)}. * Note that this method can be dangerous, and that the size of a file * can cause an OutOfMemoryError quite easily. You should use * {@link #getInputStream() getInputStream} and do your own thing. * * @exception FileNotFoundException If the temp file no longer exists * @exception IOException if there is some sort of IO problem. * @see #getFileData(int) */ pt getFileDataq~{xsq~ uq~pppppq~~q~q~~q~×t[]q~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tÐ byte[] bytes = new byte[getFileSize()]; FileInputStream fis = new FileInputStream(filePath); fis.read(bytes); fis.close(); return bytes; sq~ uq~q~ýq~kppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq±sq~ uq~pppppppt bufferSizeq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xpppq~–sq~ uq~ppppptÝ/** * Attempts to read a file n bytes at a time, n being equal to "bufferSize". * Note that this method can be dangerous, and that the size of a file * can cause an OutOfMemoryError quite easily. You should use * {@link #getInputStream() getInputStream} and do your own thing. * * @param bufferSize The size in bytes that are read from the file at a time * @exception FileNotFoundException If the temp file no longer exists */ pt getFileDataq~{xsq~ uq~pppppq~~q~q~~q~×t[]q~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tÌ ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); FileInputStream fis = new FileInputStream(filePath); int readLength = 0; int totalLength = 0; int offset = 0; byte[] bytes = new byte[bufferSize]; while ((readLength = fis.read(bytes, offset, bufferSize)) != -1) { byteStream.write(bytes, offset, bufferSize); totalLength += readLength; offset += readLength; } bytes = byteStream.toByteArray(); fis.close(); byteStream.close(); return bytes; sq~ uq~q~ýq~kppq~~q~~xsq~isq~ uq~ppppq~–sq~ uq~pppppt;/** * Returns a FileInputStream to the file */ ptgetInputStreamq~{xsq~ uq~pppppq~~q~q~~q~Wpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t5 return new FileInputStream(filePath); sq~ uq~q~ýq~kppq~~q~~xqšÍq˜qÙqêq¢q²sq~isq~ uq~ppppq~–sq~ uq~ppppptÏ/** * Attempt to read the temporary file and get it's data in byte * array form. Tries to read the entire file (using a byte array * the size of getFileSize()) at once, in one call to FileInputStream.read(byte[]). * For buffered reading, see {@link #getFileData(int) getFileData(int)}. * Note that this method can be dangerous, and that the size of a file * can cause an OutOfMemoryError quite easily. You should use * {@link #getInputStream() getInputStream} and do your own thing. * * @exception FileNotFoundException If the temp file no longer exists * @exception IOException if there is some sort of IO problem. * @see #getFileData(int) */ pt getFileDataq~cxsq~ uq~pppppq~fq~gq~fq~×t[]q~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftÐ byte[] bytes = new byte[getFileSize()]; FileInputStream fis = new FileInputStream(filePath); fis.read(bytes); fis.close(); return bytes; sq~ uq~q~ýq~kppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq±b with data up to * b.length bytes */ ptreadq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t4 return read(b, 0, b.length); sq~ uq~ppppq~¥q~¥xsq~ uq~ppppppptbq~¢xsq~ uq~pppppq~¥q~¦q~¥q~×t[]q~§xsq~bsq~ uq~ppppsq~isq~ uq~q³ksq~bsq~ uq~ppppq³nsq~ uq~ppppppptoffsetq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~bsq~ uq~ppppq³nsq~ uq~ppppppptlengthq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xpq~¾sq~ uq~ppppptŒ/** * This method populates the byte array b with data up to * length starting at b[offset] */ ptreadq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tQ int count = 0; int read = read(); if (read == -1) { return -1; } while ((read != -1) && (count < length)) { b[offset] = (byte) read; read = read(); count++; offset++; } return count; sq~ uq~ppppq~¥q~¥xsq~ uq~ppppppptbq~¢xsq~ uq~pppppq~¥q~¦q~¥q~×t[]q~§xsq~bsq~ uq~ppppsq~isq~ uq~q³”sq~bsq~ uq~ppppq³—sq~ uq~ppppppptoffsetq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~bsq~ uq~ppppq³—sq~ uq~ppppppptlengthq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xpq~¾sq~ uq~ppppptÑ/** * This method reads into the byte array b until * a newline ('\n') character is encountered or the number of bytes * specified by length have been read */ ptreadLineq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tˆ int count = 0; int read = read(); if (read == -1) { return -1; } while ((read != -1) && (count < length)) { if (read == '\n') break; b[offset] = (byte) read; count++; offset++; read = read(); } return count; sq~ uq~ppppq~¥q~¥xsq~ uq~ppppppptbq~¢xsq~ uq~pppppq~¥q~¦q~¥q~×t[]q~§xsq~isq~ uq~ppppq~¾sq~ uq~pppppty/** * This method reads a line, regardless of length. * @return A byte array representing the line. */ ptreadLineq~¢xsq~ uq~pppppq~¥q~¦q~¥q~×t[]q~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥ty int read = read(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); // return null if there are no more bytes to read if( -1 == read ) return null; while ((read != -1) && (read != '\n')) { baos.write(read); read = read(); } return baos.toByteArray(); sq~ uq~ppppq~¥q~¥xq±q°¿qÂq~ëßq~ë÷q~îvq~îq~ûÔq~üGq~ý"sq~bsq~ uq~ppppsq~isq~ uq~q³Îpppq~Esq~ uq~pppppt˜/** * Convert a byte array to a String of hexadecimal digits and return it. * * @param buffer The byte array to be converted */ pttoHexq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–tM StringBuffer sb = new StringBuffer(); String s = null; for (int i = 0; i < buffer.length; i++) { s = Integer.toHexString((int) buffer[i] & 0xff); if (s.length() < 2) sb.append('0'); sb.append(s); } return (sb.toString()); sq~ uq~ppppq~–q~–xsq~ uq~ppppppptbufferq~rxsq~ uq~pppppq~–q~—q~–q~×t[]q@ xsq~bsq~ uq~ppppsq~isq~ uq~q³çpppq~¾sq~ uq~pppppt}/** * This method populates the byte array b with data up to * b.length bytes */ ptreadq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t4 return read(b, 0, b.length); sq~ uq~q~kpppq~–q~–xsq~ uq~ppppppptbq~rxsq~ uq~pppppq~–q~—q~–q~×t[]q~˜xsq~bsq~ uq~ppppsq~isq~ uq~q´sq~bsq~ uq~ppppq´sq~ uq~ppppppptoffsetq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~bsq~ uq~ppppq´sq~ uq~ppppppptlengthq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xpq~¾sq~ uq~ppppptŒ/** * This method populates the byte array b with data up to * length starting at b[offset] */ ptreadq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tQ int count = 0; int read = read(); if (read == -1) { return -1; } while ((read != -1) && (count < length)) { b[offset] = (byte) read; read = read(); count++; offset++; } return count; sq~ uq~q~kpppq~–q~–xsq~ uq~ppppppptbq~rxsq~ uq~pppppq~–q~—q~–q~×t[]q~˜xsq~bsq~ uq~ppppsq~isq~ uq~q´)sq~bsq~ uq~ppppq´,sq~ uq~ppppppptoffsetq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~bsq~ uq~ppppq´,sq~ uq~ppppppptlengthq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xpq~¾sq~ uq~ppppptÑ/** * This method reads into the byte array b until * a newline ('\n') character is encountered or the number of bytes * specified by length have been read */ ptreadLineq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tˆ int count = 0; int read = read(); if (read == -1) { return -1; } while ((read != -1) && (count < length)) { if (read == '\n') break; b[offset] = (byte) read; count++; offset++; read = read(); } return count; sq~ uq~q~kpppq~–q~–xsq~ uq~ppppppptbq~rxsq~ uq~pppppq~–q~—q~–q~×t[]q~˜xsq~isq~ uq~ppppq~¾sq~ uq~pppppty/** * This method reads a line, regardless of length. * @return A byte array representing the line. */ ptreadLineq~rxsq~ uq~pppppq~–q~—q~–q~×t[]q~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–ty int read = read(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); // return null if there are no more bytes to read if( -1 == read ) return null; while ((read != -1) && (read != '\n')) { baos.write(read); read = read(); } return baos.toByteArray(); sq~ uq~q~kpppq~–q~–xqÂq°Øq~ïq~ïq~ñžq~ñ·q~ýSq~ýÆq~þ¡qbq—sq~bsq~ uq~ppppsq~isq~ uq~q´cpppq~Esq~ uq~ppppptç/** * Convert a byte array to a String of hexadecimal digits and return it. * * @param buffer The byte array to be converted * @deprecated This method will be removed in a release after Struts 1.1. */ pttoHexq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t+ return token.toHex(buffer); sq~ uq~ppppq~~q~~xsq~ uq~ppppppptbufferq~{xsq~ uq~pppppq~~q~q~~q~×t[]q~~­xqq~ò/q~òGq~ôÆq~ôßq~þÒq~ÿEq qsq~bsq~ uq~ppppsq~isq~ uq~q´|pppq~¾sq~ uq~pppppt}/** * This method populates the byte array b with data up to * b.length bytes */ ptreadq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t4 return read(b, 0, b.length); sq~ uq~q~kpppq~~q~~xsq~ uq~ppppppptbq~{xsq~ uq~pppppq~~q~q~~q~×t[]q~€xsq~bsq~ uq~ppppsq~isq~ uq~q´•sq~bsq~ uq~ppppq´˜sq~ uq~ppppppptoffsetq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~bsq~ uq~ppppq´˜sq~ uq~ppppppptlengthq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xpq~¾sq~ uq~ppppptŒ/** * This method populates the byte array b with data up to * length starting at b[offset] */ ptreadq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tQ int count = 0; int read = read(); if (read == -1) { return -1; } while ((read != -1) && (count < length)) { b[offset] = (byte) read; read = read(); count++; offset++; } return count; sq~ uq~q~kpppq~~q~~xsq~ uq~ppppppptbq~{xsq~ uq~pppppq~~q~q~~q~×t[]q~€xsq~bsq~ uq~ppppsq~isq~ uq~q´¾sq~bsq~ uq~ppppq´Ásq~ uq~ppppppptoffsetq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~bsq~ uq~ppppq´Ásq~ uq~ppppppptlengthq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xpq~¾sq~ uq~ppppptÑ/** * This method reads into the byte array b until * a newline ('\n') character is encountered or the number of bytes * specified by length have been read */ ptreadLineq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tˆ int count = 0; int read = read(); if (read == -1) { return -1; } while ((read != -1) && (count < length)) { if (read == '\n') break; b[offset] = (byte) read; count++; offset++; read = read(); } return count; sq~ uq~q~kpppq~~q~~xsq~ uq~ppppppptbq~{xsq~ uq~pppppq~~q~q~~q~×t[]q~€xsq~isq~ uq~ppppq~¾sq~ uq~pppppty/** * This method reads a line, regardless of length. * @return A byte array representing the line. */ ptreadLineq~{xsq~ uq~pppppq~~q~q~~q~×t[]q~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~ty int read = read(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); // return null if there are no more bytes to read if( -1 == read ) return null; while ((read != -1) && (read != '\n')) { baos.write(read); read = read(); } return baos.toByteArray(); sq~ uq~q~kpppq~~q~~xq°ñq±q~~¤sq~bsq~ uq~ppppsq~isq~ uq~q´øpppq~Esq~ uq~ppppptç/** * Convert a byte array to a String of hexadecimal digits and return it. * * @param buffer The byte array to be converted * @deprecated This method will be removed in a release after Struts 1.1. */ pttoHexq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft+ return token.toHex(buffer); sq~ uq~ppppq~fq~fxsq~ uq~ppppppptbufferq~cxsq~ uq~pppppq~fq~gq~fq~×t[]q~kxqÙq~õWq~õoq~÷îq~øqQqÄqŸq¢sq~bsq~ uq~ppppsq~isq~ uq~qµpppq~¾sq~ uq~pppppt}/** * This method populates the byte array b with data up to * b.length bytes */ ptreadq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft4 return read(b, 0, b.length); sq~ uq~q~kpppq~fq~fxsq~ uq~ppppppptbq~cxsq~ uq~pppppq~fq~gq~fq~×t[]q~hxsq~bsq~ uq~ppppsq~isq~ uq~qµ*sq~bsq~ uq~ppppqµ-sq~ uq~ppppppptoffsetq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~bsq~ uq~ppppqµ-sq~ uq~ppppppptlengthq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxpq~¾sq~ uq~ppppptŒ/** * This method populates the byte array b with data up to * length starting at b[offset] */ ptreadq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftQ int count = 0; int read = read(); if (read == -1) { return -1; } while ((read != -1) && (count < length)) { b[offset] = (byte) read; read = read(); count++; offset++; } return count; sq~ uq~q~kpppq~fq~fxsq~ uq~ppppppptbq~cxsq~ uq~pppppq~fq~gq~fq~×t[]q~hxsq~bsq~ uq~ppppsq~isq~ uq~qµSsq~bsq~ uq~ppppqµVsq~ uq~ppppppptoffsetq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~bsq~ uq~ppppqµVsq~ uq~ppppppptlengthq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxpq~¾sq~ uq~ppppptÑ/** * This method reads into the byte array b until * a newline ('\n') character is encountered or the number of bytes * specified by length have been read */ ptreadLineq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftˆ int count = 0; int read = read(); if (read == -1) { return -1; } while ((read != -1) && (count < length)) { if (read == '\n') break; b[offset] = (byte) read; count++; offset++; read = read(); } return count; sq~ uq~q~kpppq~fq~fxsq~ uq~ppppppptbq~cxsq~ uq~pppppq~fq~gq~fq~×t[]q~hxsq~isq~ uq~ppppq~¾sq~ uq~pppppty/** * This method reads a line, regardless of length. * @return A byte array representing the line. */ ptreadLineq~cxsq~ uq~pppppq~fq~gq~fq~×t[]q~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fty int read = read(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); // return null if there are no more bytes to read if( -1 == read ) return null; while ((read != -1) && (read != '\n')) { baos.write(read); read = read(); } return baos.toByteArray(); sq~ uq~q~kpppq~fq~fxq±+q± -1) && (bufferLength > -1)) { int length = Math.min(bufferSize, (((int) contentLength+1) - totalLength)); if (length == 0) { contentLengthMet = true; } if ((maxSize > -1) && (length > 0)){ length = Math.min(length, ((int) maxSize - totalLength)); if (length == 0) { maxLengthMet = true; } } int bytesRead = -1; if (length > 0) { bytesRead = inputStream.read(buffer, 0, length); } if (bytesRead == -1) { buffer = null; bufferOffset = -1; bufferLength = -1; } else { bufferLength = bytesRead; totalLength += bytesRead; bufferOffset = 0; } } sq~ uq~ppppq~$q~$xsq~esq~ uq~sq~bsq~ uq~ppppq¶¼sq~ uq~pppppppt inputStreamq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Wpq~§xsq~bsq~ uq~ppppq¶¼sq~ uq~pppppppt bufferSizeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~bsq~ uq~ppppq¶¼sq~ uq~pppppppt contentLengthq~¢xsq~ uq~pppppq~¥q~¦q~¥q~•pq~§xsq~bsq~ uq~ppppq¶¼sq~ uq~ppppppptmaxSizeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~•pq~§xq~¾sq~ uq~pppppt­/** * Public constructor for this class, just wraps the InputStream * given * @param inputStream The underlying stream to read from * @param bufferSize The size in bytes of the internal buffer * @param contentLength The content length for this request * @param maxSize The maximum size in bytes that this multipart * request can be, or -1 for an unlimited length */ pq¶q~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tV this.inputStream = inputStream; this.bufferSize = bufferSize; this.contentLength = contentLength; this.maxSize = maxSize; if (maxSize < contentLength) { throw new MaxLengthExceededException(maxSize); } buffer = new byte[bufferSize]; fill(); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~¾sq~ uq~pppppt‡/** * This method returns the number of available bytes left to read * in the buffer before it has to be refilled */ pt availableq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t3 return bufferLength - bufferOffset; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~¾sq~ uq~ppppptN/** * This method attempts to close the underlying InputStream */ ptcloseq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t$ inputStream.close(); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq· sq~ uq~ppppppptpositionq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xpppq~¾sq~ uq~ppppptZ/** * This method calls on the mark() method of the underlying InputStream */ ptmarkq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t- inputStream.mark(position); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~¾sq~ uq~pppppt®/** * This method calls on the markSupported() method of the underlying InputStream * @return Whether or not the underlying InputStream supports marking */ pt markSupportedq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t; return inputStream.markSupported(); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~¾sq~ uq~ppppptZ/** * @return true if the maximum length has been reached, false otherwise */ pt maxLengthMetq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t$ return maxLengthMet; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~¾sq~ uq~ppppptZ/** * @return true if the content length has been reached, false otherwise */ ptcontentLengthMetq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t( return contentLengthMet; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~¾sq~ uq~ppppptÕ/** * This method returns the next byte in the buffer, and refills it if necessary. * @return The next byte read in the buffer, or -1 if the end of the stream has * been reached */ ptreadq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tê if (maxLengthMet) { throw new MaxLengthExceededException(maxSize); } if (contentLengthMet) { throw new ContentLengthExceededException(contentLength); } if (buffer == null) { return -1; } if (bufferOffset < bufferLength) { return (int)(char) buffer[bufferOffset++]; } fill(); return read(); sq~ uq~ppppq~¥q~¥xq³Uq³nq³—q³½sq~isq~ uq~ppppq~¾sq~ uq~ppppptj/** * This method makes a call to the reset() method of the underlying * InputStream */ ptresetq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t, inputStream.reset(); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~¾sq~ uq~ppppptÍ/** * Fills the buffer with data from the underlying inputStream. If it can't * fill the entire buffer in one read, it will read as many times as necessary * to fill the buffer */ ptfillq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥tà if ((bufferOffset > -1) && (bufferLength > -1)) { int length = Math.min(bufferSize, (((int) contentLength+1) - totalLength)); if (length == 0) { contentLengthMet = true; } if ((maxSize > -1) && (length > 0)){ length = Math.min(length, ((int) maxSize - totalLength)); if (length == 0) { maxLengthMet = true; } } int bytesRead = -1; if (length > 0) { bytesRead = inputStream.read(buffer, 0, length); } if (bytesRead == -1) { buffer = null; bufferOffset = -1; bufferLength = -1; } else { bufferLength = bytesRead; totalLength += bytesRead; bufferOffset = 0; } } sq~ uq~ppppq~¥q~¥xsq~esq~ uq~sq~bsq~ uq~ppppq·ƒsq~ uq~pppppppt inputStreamq~rxsq~ uq~pppppq~–q~—q~–q~Wpq~˜xsq~bsq~ uq~ppppq·ƒsq~ uq~pppppppt bufferSizeq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~bsq~ uq~ppppq·ƒsq~ uq~pppppppt contentLengthq~rxsq~ uq~pppppq~–q~—q~–q~•pq~˜xsq~bsq~ uq~ppppq·ƒsq~ uq~ppppppptmaxSizeq~rxsq~ uq~pppppq~–q~—q~–q~•pq~˜xq~¾sq~ uq~pppppt­/** * Public constructor for this class, just wraps the InputStream * given * @param inputStream The underlying stream to read from * @param bufferSize The size in bytes of the internal buffer * @param contentLength The content length for this request * @param maxSize The maximum size in bytes that this multipart * request can be, or -1 for an unlimited length */ pq¶q~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tV this.inputStream = inputStream; this.bufferSize = bufferSize; this.contentLength = contentLength; this.maxSize = maxSize; if (maxSize < contentLength) { throw new MaxLengthExceededException(maxSize); } buffer = new byte[bufferSize]; fill(); sq~ uq~q~kpppq~–q~–xsq~isq~ uq~ppppq~¾sq~ uq~pppppt‡/** * This method returns the number of available bytes left to read * in the buffer before it has to be refilled */ pt availableq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t3 return bufferLength - bufferOffset; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~¾sq~ uq~ppppptN/** * This method attempts to close the underlying InputStream */ ptcloseq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t$ inputStream.close(); sq~ uq~q~kpppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq·Òsq~ uq~ppppppptpositionq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xpppq~¾sq~ uq~ppppptZ/** * This method calls on the mark() method of the underlying InputStream */ ptmarkq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t- inputStream.mark(position); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~¾sq~ uq~pppppt®/** * This method calls on the markSupported() method of the underlying InputStream * @return Whether or not the underlying InputStream supports marking */ pt markSupportedq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t; return inputStream.markSupported(); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~¾sq~ uq~ppppptZ/** * @return true if the maximum length has been reached, false otherwise */ pt maxLengthMetq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t$ return maxLengthMet; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~¾sq~ uq~ppppptZ/** * @return true if the content length has been reached, false otherwise */ ptcontentLengthMetq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t( return contentLengthMet; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~¾sq~ uq~ppppptÕ/** * This method returns the next byte in the buffer, and refills it if necessary. * @return The next byte read in the buffer, or -1 if the end of the stream has * been reached */ ptreadq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tê if (maxLengthMet) { throw new MaxLengthExceededException(maxSize); } if (contentLengthMet) { throw new ContentLengthExceededException(contentLength); } if (buffer == null) { return -1; } if (bufferOffset < bufferLength) { return (int)(char) buffer[bufferOffset++]; } fill(); return read(); sq~ uq~q~kpppq~–q~–xq³êq´q´,q´Rsq~isq~ uq~ppppq~¾sq~ uq~ppppptj/** * This method makes a call to the reset() method of the underlying * InputStream */ ptresetq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t, inputStream.reset(); sq~ uq~q~kpppq~–q~–xsq~isq~ uq~ppppq~¾sq~ uq~ppppptÍ/** * Fills the buffer with data from the underlying inputStream. If it can't * fill the entire buffer in one read, it will read as many times as necessary * to fill the buffer */ ptfillq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–tà if ((bufferOffset > -1) && (bufferLength > -1)) { int length = Math.min(bufferSize, (((int) contentLength+1) - totalLength)); if (length == 0) { contentLengthMet = true; } if ((maxSize > -1) && (length > 0)){ length = Math.min(length, ((int) maxSize - totalLength)); if (length == 0) { maxLengthMet = true; } } int bytesRead = -1; if (length > 0) { bytesRead = inputStream.read(buffer, 0, length); } if (bytesRead == -1) { buffer = null; bufferOffset = -1; bufferLength = -1; } else { bufferLength = bytesRead; totalLength += bytesRead; bufferOffset = 0; } } sq~ uq~q~kpppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppq¸Jsq~ uq~pppppppt inputStreamq~{xsq~ uq~pppppq~~q~q~~q~Wpq~€xsq~bsq~ uq~ppppq¸Jsq~ uq~pppppppt bufferSizeq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~bsq~ uq~ppppq¸Jsq~ uq~pppppppt contentLengthq~{xsq~ uq~pppppq~~q~q~~q~•pq~€xsq~bsq~ uq~ppppq¸Jsq~ uq~ppppppptmaxSizeq~{xsq~ uq~pppppq~~q~q~~q~•pq~€xq~¾sq~ uq~pppppt­/** * Public constructor for this class, just wraps the InputStream * given * @param inputStream The underlying stream to read from * @param bufferSize The size in bytes of the internal buffer * @param contentLength The content length for this request * @param maxSize The maximum size in bytes that this multipart * request can be, or -1 for an unlimited length */ pq¶q~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tk this.inputStream = inputStream; this.bufferSize = bufferSize; this.contentLength = contentLength; this.maxSize = maxSize; if ((maxSize != -1) && (maxSize < contentLength)) { throw new MaxLengthExceededException(maxSize); } buffer = new byte[bufferSize]; fill(); sq~ uq~q~kpppq~~q~~xsq~isq~ uq~ppppq~¾sq~ uq~pppppt‡/** * This method returns the number of available bytes left to read * in the buffer before it has to be refilled */ pt availableq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t3 return bufferLength - bufferOffset; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~¾sq~ uq~ppppptN/** * This method attempts to close the underlying InputStream */ ptcloseq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t$ inputStream.close(); sq~ uq~q~kpppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq¸™sq~ uq~ppppppptpositionq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xpppq~¾sq~ uq~ppppptZ/** * This method calls on the mark() method of the underlying InputStream */ ptmarkq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t- inputStream.mark(position); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~¾sq~ uq~pppppt®/** * This method calls on the markSupported() method of the underlying InputStream * @return Whether or not the underlying InputStream supports marking */ pt markSupportedq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t; return inputStream.markSupported(); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~¾sq~ uq~ppppptZ/** * @return true if the maximum length has been reached, false otherwise */ pt maxLengthMetq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t$ return maxLengthMet; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~¾sq~ uq~ppppptZ/** * @return true if the content length has been reached, false otherwise */ ptcontentLengthMetq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t( return contentLengthMet; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~¾sq~ uq~ppppptÕ/** * This method returns the next byte in the buffer, and refills it if necessary. * @return The next byte read in the buffer, or -1 if the end of the stream has * been reached */ ptreadq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tê if (maxLengthMet) { throw new MaxLengthExceededException(maxSize); } if (contentLengthMet) { throw new ContentLengthExceededException(contentLength); } if (buffer == null) { return -1; } if (bufferOffset < bufferLength) { return (int)(char) buffer[bufferOffset++]; } fill(); return read(); sq~ uq~q~kpppq~~q~~xq´q´˜q´Áq´çsq~isq~ uq~ppppq~¾sq~ uq~ppppptj/** * This method makes a call to the reset() method of the underlying * InputStream */ ptresetq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t, inputStream.reset(); sq~ uq~q~kpppq~~q~~xsq~isq~ uq~ppppq~¾sq~ uq~ppppptÍ/** * Fills the buffer with data from the underlying inputStream. If it can't * fill the entire buffer in one read, it will read as many times as necessary * to fill the buffer */ ptfillq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~tà if ((bufferOffset > -1) && (bufferLength > -1)) { int length = Math.min(bufferSize, (((int) contentLength+1) - totalLength)); if (length == 0) { contentLengthMet = true; } if ((maxSize > -1) && (length > 0)){ length = Math.min(length, ((int) maxSize - totalLength)); if (length == 0) { maxLengthMet = true; } } int bytesRead = -1; if (length > 0) { bytesRead = inputStream.read(buffer, 0, length); } if (bytesRead == -1) { buffer = null; bufferOffset = -1; bufferLength = -1; } else { bufferLength = bytesRead; totalLength += bytesRead; bufferOffset = 0; } } sq~ uq~q~kpppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq¹sq~ uq~pppppppt inputStreamq~cxsq~ uq~pppppq~fq~gq~fq~Wpq~hxsq~bsq~ uq~ppppq¹sq~ uq~pppppppt bufferSizeq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~bsq~ uq~ppppq¹sq~ uq~pppppppt contentLengthq~cxsq~ uq~pppppq~fq~gq~fq~•pq~hxsq~bsq~ uq~ppppq¹sq~ uq~ppppppptmaxSizeq~cxsq~ uq~pppppq~fq~gq~fq~•pq~hxq~¾sq~ uq~pppppt­/** * Public constructor for this class, just wraps the InputStream * given * @param inputStream The underlying stream to read from * @param bufferSize The size in bytes of the internal buffer * @param contentLength The content length for this request * @param maxSize The maximum size in bytes that this multipart * request can be, or -1 for an unlimited length */ pq¶q~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftk this.inputStream = inputStream; this.bufferSize = bufferSize; this.contentLength = contentLength; this.maxSize = maxSize; if ((maxSize != -1) && (maxSize < contentLength)) { throw new MaxLengthExceededException(maxSize); } buffer = new byte[bufferSize]; fill(); sq~ uq~q~kpppq~fq~fxsq~isq~ uq~ppppq~¾sq~ uq~pppppt‡/** * This method returns the number of available bytes left to read * in the buffer before it has to be refilled */ pt availableq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft3 return bufferLength - bufferOffset; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~¾sq~ uq~ppppptN/** * This method attempts to close the underlying InputStream */ ptcloseq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft$ inputStream.close(); sq~ uq~q~kpppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq¹`sq~ uq~ppppppptpositionq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxpppq~¾sq~ uq~ppppptZ/** * This method calls on the mark() method of the underlying InputStream */ ptmarkq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft- inputStream.mark(position); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~¾sq~ uq~pppppt®/** * This method calls on the markSupported() method of the underlying InputStream * @return Whether or not the underlying InputStream supports marking */ pt markSupportedq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft; return inputStream.markSupported(); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~¾sq~ uq~ppppptZ/** * @return true if the maximum length has been reached, false otherwise */ pt maxLengthMetq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft$ return maxLengthMet; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~¾sq~ uq~ppppptZ/** * @return true if the content length has been reached, false otherwise */ ptcontentLengthMetq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft( return contentLengthMet; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~¾sq~ uq~ppppptÕ/** * This method returns the next byte in the buffer, and refills it if necessary. * @return The next byte read in the buffer, or -1 if the end of the stream has * been reached */ ptreadq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftê if (maxLengthMet) { throw new MaxLengthExceededException(maxSize); } if (contentLengthMet) { throw new ContentLengthExceededException(contentLength); } if (buffer == null) { return -1; } if (bufferOffset < bufferLength) { return (int)(char) buffer[bufferOffset++]; } fill(); return read(); sq~ uq~q~kpppq~fq~fxqµqµ-qµVqµ|sq~isq~ uq~ppppq~¾sq~ uq~ppppptj/** * This method makes a call to the reset() method of the underlying * InputStream */ ptresetq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft, inputStream.reset(); sq~ uq~q~kpppq~fq~fxsq~isq~ uq~ppppq~¾sq~ uq~ppppptÍ/** * Fills the buffer with data from the underlying inputStream. If it can't * fill the entire buffer in one read, it will read as many times as necessary * to fill the buffer */ ptfillq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ftà if ((bufferOffset > -1) && (bufferLength > -1)) { int length = Math.min(bufferSize, (((int) contentLength+1) - totalLength)); if (length == 0) { contentLengthMet = true; } if ((maxSize > -1) && (length > 0)){ length = Math.min(length, ((int) maxSize - totalLength)); if (length == 0) { maxLengthMet = true; } } int bytesRead = -1; if (length > 0) { bytesRead = inputStream.read(buffer, 0, length); } if (bytesRead == -1) { buffer = null; bufferOffset = -1; bufferLength = -1; } else { bufferLength = bytesRead; totalLength += bytesRead; bufferOffset = 0; } } sq~ uq~q~kpppq~fq~fxppppq~äÛsq~ uq~pppppppq¶q~=xsq~ uq~ppppq~$sq~ uq~q~æpppsq~ uq~q~Wpppq~$q~$qÁsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxsq~ uq~pppppt6/** * The content length of the multipart data */ /** * The content length of the multipart data */ /** * The content length of the multipart data */ /** * The content length of the multipart data */ /** * The content length of the multipart data */ pt contentLengthq~=xsq~ uq~pppppq~$q~yq~$q~•pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xppppq~$q~$q~$xqµÊq¶q¶q~äÿsq~isq~ uq~sq~bsq~ uq~ppppq¹ðsq~ uq~pppppppt stringSizeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~Åsq~ uq~pppppt€/** * Gets the maximum post data size in bytes from the string * representation in the configuration file. */ pt getMaxSizeq~=xsq~ uq~pppppq~$q~yq~$q~•pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$tH long size = -1; int multiplier = 1; if (stringSize.endsWith("K")) { multiplier = 1024; stringSize = stringSize.substring(0, stringSize.length()-1); } if (stringSize.endsWith("M")) { multiplier = 1024*1024; stringSize = stringSize.substring(0, stringSize.length()-1); } else if (stringSize.endsWith("G")) { multiplier = 1024*1024*1024; stringSize = stringSize.substring(0, stringSize.length()-1); } try { size = Long.parseLong(stringSize); } catch (NumberFormatException nfe) { throw new ServletException("Invalid format for maximum file size"); } return (size * multiplier); sq~ uq~q~¦pppq~$q~$xqƒq~çËq~çåq~é!q~é6q~éüq~øÖq~ù~q~ù¥q6qKq~ÔÈqcþqd qdq>q÷q¶Ïq¶×q~å2sq~isq~ uq~sq~bsq~ uq~ppppqºsq~ uq~pppppppt stringSizeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~Åsq~ uq~pppppt€/** * Gets the maximum post data size in bytes from the string * representation in the configuration file. */ pt getMaxSizeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~•pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥tH long size = -1; int multiplier = 1; if (stringSize.endsWith("K")) { multiplier = 1024; stringSize = stringSize.substring(0, stringSize.length()-1); } if (stringSize.endsWith("M")) { multiplier = 1024*1024; stringSize = stringSize.substring(0, stringSize.length()-1); } else if (stringSize.endsWith("G")) { multiplier = 1024*1024*1024; stringSize = stringSize.substring(0, stringSize.length()-1); } try { size = Long.parseLong(stringSize); } catch (NumberFormatException nfe) { throw new ServletException("Invalid format for maximum file size"); } return (size * multiplier); sq~ uq~q~¦pppq~¥q~¥xq¶q~ìIq~ì^q~í$qæq qsqˆq~Ø`qfqfq©qbq·–q·žq~åesq~isq~ uq~sq~bsq~ uq~ppppqº sq~ uq~pppppppt stringSizeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~Åsq~ uq~pppppt€/** * Gets the maximum post data size in bytes from the string * representation in the configuration file. */ pt getMaxSizeq~rxsq~ uq~pppppq~–q~—q~–q~•pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–tH long size = -1; int multiplier = 1; if (stringSize.endsWith("K")) { multiplier = 1024; stringSize = stringSize.substring(0, stringSize.length()-1); } if (stringSize.endsWith("M")) { multiplier = 1024*1024; stringSize = stringSize.substring(0, stringSize.length()-1); } else if (stringSize.endsWith("G")) { multiplier = 1024*1024*1024; stringSize = stringSize.substring(0, stringSize.length()-1); } try { size = Long.parseLong(stringSize); } catch (NumberFormatException nfe) { throw new ServletException("Invalid format for maximum file size"); } return (size * multiplier); sq~ uq~q~¦pppq~–q~–xqéq~ïqq~ï†q~ðLq#qJq°qÅq~Ûøq~‹sq~isq~ uq~sq~bsq~ uq~ppppqº8sq~ uq~ppppppptacq~rxsq~ uq~pppppq~–q~—q~–q~bpq~˜xpppq~ˆsq~ uq~pppppt„// -------------------------------------------------------- Support Methods /** * Returns the maximum allowable size, in bytes, of an uploaded file. The * value is obtained from the current module's controller configuration. * * @param ac The current module's application configuration. * * @return The maximum allowable file size, in bytes. */ pt getSizeMaxq~rxsq~ uq~pppppq~–q~—q~–q~•pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–t³ String sizeString = ac.getControllerConfig().getMaxFileSize(); int multiplier = 1; if (sizeString.endsWith("K")) { multiplier = 1024; } else if (sizeString.endsWith("M")) { multiplier = 1024 * 1024; } else if (sizeString.endsWith("G")) { multiplier = 1024 * 1024 * 1024; } if (multiplier != 1) { sizeString = sizeString.substring(0, sizeString.length() - 1); } long size = 0; try { size = Long.parseLong(sizeString); } catch (NumberFormatException nfe) { log.warn("Invalid format for maximum file size ('" + ac.getControllerConfig().getMaxFileSize() + "'). Using default."); size = DEFAULT_SIZE_MAX; multiplier = 1; } return (size * multiplier); sq~ uq~ppppq~–q~–xqqÍqg¤qg¶sq~isq~ uq~sq~bsq~ uq~ppppqºPsq~ uq~pppppppt stringSizeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~Åsq~ uq~pppppt€/** * Gets the maximum post data size in bytes from the string * representation in the configuration file. */ pt getMaxSizeq~{xsq~ uq~pppppq~~q~q~~q~•pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t! long size = -1; int multiplier = 1; if (stringSize.endsWith("K")) { multiplier = 1024; stringSize = stringSize.substring(0, stringSize.length() - 1); } if (stringSize.endsWith("M")) { multiplier = 1024 * 1024; stringSize = stringSize.substring(0, stringSize.length() - 1); } else if (stringSize.endsWith("G")) { multiplier = 1024 * 1024 * 1024; stringSize = stringSize.substring(0, stringSize.length() - 1); } try { size = Long.parseLong(stringSize); } catch(NumberFormatException nfe) { throw new ServletException("Invalid format for maximum file size"); } return (size * multiplier); sq~ uq~q~¦pppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqºhsq~ uq~ppppppptmcq~{xsq~ uq~pppppq~~q~q~~q~ºpq~€xpppq~ˆsq~ uq~ppppptx// -------------------------------------------------------- Support Methods /** * Returns the maximum allowable size, in bytes, of an uploaded file. The * value is obtained from the current module's controller configuration. * * @param mc The current module's configuration. * * @return The maximum allowable file size, in bytes. */ pt getSizeMaxq~{xsq~ uq~pppppq~~q~q~~q~•pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~tŠ return convertSizeToBytes( mc.getControllerConfig().getMaxFileSize(), DEFAULT_SIZE_MAX); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqº€sq~ uq~ppppppptmcq~{xsq~ uq~pppppq~~q~q~~q~ºpq~€xpppq~ˆsq~ uq~pppppt/** * Returns the size threshold which determines whether an uploaded file * will be written to disk or cached in memory. * * @param mc The current module's configuration. * * @return The size threshold, in bytes. */ ptgetSizeThresholdq~{xsq~ uq~pppppq~~q~q~~q~•pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t return convertSizeToBytes( mc.getControllerConfig().getMemFileSize(), DEFAULT_SIZE_THRESHOLD); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqº˜sq~ uq~pppppppt sizeStringq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqº˜sq~ uq~pppppppt defaultSizeq~{xsq~ uq~pppppq~~q~q~~q~•pq~€xppq~ˆsq~ uq~pppppt¯/** * Converts a size value from a string representation to its numeric value. * The string must be of the form nnnm, where nnn is an arbitrary decimal * value, and m is a multiplier. The multiplier must be one of 'K', 'M' and * 'G', representing kilobytes, megabytes and gigabytes respectively. * * If the size value cannot be converted, for example due to invalid syntax, * the supplied default is returned instead. * * @param sizeString The string representation of the size to be converted. * @param defaultSize The value to be returned if the string is invalid. * * @return The actual size in bytes. */ ptconvertSizeToBytesq~{xsq~ uq~pppppq~~q~q~~q~•pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t( int multiplier = 1; if (sizeString.endsWith("K")) { multiplier = 1024; } else if (sizeString.endsWith("M")) { multiplier = 1024 * 1024; } else if (sizeString.endsWith("G")) { multiplier = 1024 * 1024 * 1024; } if (multiplier != 1) { sizeString = sizeString.substring(0, sizeString.length() - 1); } long size = 0; try { size = Long.parseLong(sizeString); } catch (NumberFormatException nfe) { log.warn("Invalid format for file size ('" + sizeString + "'). Using default."); size = defaultSize; multiplier = 1; } return (size * multiplier); sq~ uq~ppppq~~q~~xqº£q`q‡qíqq~å˜qq~ò™q~ò®q~ótq¸]q¸eq~ßqq8qiFqiXsq~isq~ uq~sq~bsq~ uq~ppppqº¸sq~ uq~pppppppt stringSizeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~Åsq~ uq~pppppt€/** * Gets the maximum post data size in bytes from the string * representation in the configuration file. */ pt getMaxSizeq~cxsq~ uq~pppppq~fq~gq~fq~•pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft! long size = -1; int multiplier = 1; if (stringSize.endsWith("K")) { multiplier = 1024; stringSize = stringSize.substring(0, stringSize.length() - 1); } if (stringSize.endsWith("M")) { multiplier = 1024 * 1024; stringSize = stringSize.substring(0, stringSize.length() - 1); } else if (stringSize.endsWith("G")) { multiplier = 1024 * 1024 * 1024; stringSize = stringSize.substring(0, stringSize.length() - 1); } try { size = Long.parseLong(stringSize); } catch(NumberFormatException nfe) { throw new ServletException("Invalid format for maximum file size"); } return (size * multiplier); sq~ uq~q~¦pppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqºÐsq~ uq~ppppppptmcq~cxsq~ uq~pppppq~fq~gq~fq~ºpq~hxpppq~ˆsq~ uq~ppppptx// -------------------------------------------------------- Support Methods /** * Returns the maximum allowable size, in bytes, of an uploaded file. The * value is obtained from the current module's controller configuration. * * @param mc The current module's configuration. * * @return The maximum allowable file size, in bytes. */ pt getSizeMaxq~cxsq~ uq~pppppq~fq~gq~fq~•pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ftŠ return convertSizeToBytes( mc.getControllerConfig().getMaxFileSize(), DEFAULT_SIZE_MAX); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqºèsq~ uq~ppppppptmcq~cxsq~ uq~pppppq~fq~gq~fq~ºpq~hxpppq~ˆsq~ uq~pppppt/** * Returns the size threshold which determines whether an uploaded file * will be written to disk or cached in memory. * * @param mc The current module's configuration. * * @return The size threshold, in bytes. */ ptgetSizeThresholdq~cxsq~ uq~pppppq~fq~gq~fq~•pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft return convertSizeToBytes( mc.getControllerConfig().getMemFileSize(), DEFAULT_SIZE_THRESHOLD); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq»sq~ uq~pppppppt sizeStringq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq»sq~ uq~pppppppt defaultSizeq~cxsq~ uq~pppppq~fq~gq~fq~•pq~hxppq~ˆsq~ uq~pppppt¯/** * Converts a size value from a string representation to its numeric value. * The string must be of the form nnnm, where nnn is an arbitrary decimal * value, and m is a multiplier. The multiplier must be one of 'K', 'M' and * 'G', representing kilobytes, megabytes and gigabytes respectively. * * If the size value cannot be converted, for example due to invalid syntax, * the supplied default is returned instead. * * @param sizeString The string representation of the size to be converted. * @param defaultSize The value to be returned if the string is invalid. * * @return The actual size in bytes. */ ptconvertSizeToBytesq~cxsq~ uq~pppppq~fq~gq~fq~•pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft( int multiplier = 1; if (sizeString.endsWith("K")) { multiplier = 1024; } else if (sizeString.endsWith("M")) { multiplier = 1024 * 1024; } else if (sizeString.endsWith("G")) { multiplier = 1024 * 1024 * 1024; } if (multiplier != 1) { sizeString = sizeString.substring(0, sizeString.length() - 1); } long size = 0; try { size = Long.parseLong(sizeString); } catch (NumberFormatException nfe) { log.warn("Invalid format for file size ('" + sizeString + "'). Using default."); size = defaultSize; multiplier = 1; } return (size * multiplier); sq~ uq~ppppq~fq~fxq» qqÄq *q ?q~åËqOq~õÁq~õÖq~öœq¹$q¹,q~ã(q êq!£qjèqjúppppppq~Äxpq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xpppt 250 * 1024 * 1024q~–q~–q~–xsq~(sq~ uq~ppppq~ˆsq~ uq~ppppptF/** * The default value for the threshold which determines whether an uploaded * file will be written to disk or cached in memory. The value is equivalent * to 250KB. */ /** * The default value for the threshold which determines whether an uploaded * file will be written to disk or cached in memory. The value is equivalent * to 250KB. */ /** * The default value for the threshold which determines whether an uploaded * file will be written to disk or cached in memory. The value is equivalent * to 250KB. */ ptDEFAULT_SIZE_THRESHOLDq~rxsq~ uq~pppppsq~#q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xpppt 256 * 1024q~–q~–q~–xsq~(sq~ uq~ppppq~ˆsq~ uq~ppppptt// ----------------------------------------------------- Instance Variables /** * Commons Logging instance. */ // ----------------------------------------------------- Instance Variables /** * Commons Logging instance. */ // ----------------------------------------------------- Instance Variables /** * Commons Logging instance. */ ptlogq~rxsq~ uq~pppppq~–q~—q~–q~9pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~ xppptF LogFactory.getLog( CommonsMultipartRequestHandler.class)q~–q~–q~–xsq~(sq~ uq~ppppq~ˆsq~ uq~ppppptÌ/** * The combined text and file request parameters. */ /** * The combined text and file request parameters. */ /** * The combined text and file request parameters. */ pt elementsAllq~rxsq~ uq~pppppq~–q~—q~–q~;pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~'bxppppq~–q~–q~–xsq~(sq~ uq~ppppq~ˆsq~ uq~pppppt–/** * The file request parameters. */ /** * The file request parameters. */ /** * The file request parameters. */ pt elementsFileq~rxsq~ uq~pppppq~–q~—q~–q~;pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~'bxppppq~–q~–q~–xsq~(sq~ uq~ppppq~ˆsq~ uq~pppppt–/** * The text request parameters. */ /** * The text request parameters. */ /** * The text request parameters. */ pt elementsTextq~rxsq~ uq~pppppq~–q~—q~–q~;pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~'bxppppq~–q~–q~–xsq~(sq~ uq~ppppq~ˆsq~ uq~ppppptð/** * The action mapping with which this handler is associated. */ /** * The action mapping with which this handler is associated. */ /** * The action mapping with which this handler is associated. */ ptmappingq~rxsq~ uq~pppppq~–q~—q~–q~épq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~'bxppppq~–q~–q~–xsq~(sq~ uq~ppppq~ˆsq~ uq~ppppptØ/** * The servlet with which this handler is associated. */ /** * The servlet with which this handler is associated. */ /** * The servlet with which this handler is associated. */ ptservletq~rxsq~ uq~pppppq~–q~—q~–q~ ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~'bxppppq~–q~–q~–xsq~isq~ uq~ppppq~ˆsq~ uq~ppppptÏ// ---------------------------------------- MultipartRequestHandler Methods /** * Retrieves the servlet with which this handler is associated. * * @return The associated servlet. */ pt getServletq~rxsq~ uq~pppppq~–q~—q~–q~ ppq~˜xsq~ uq~sq~isq~ uq~ppppq~’sq~ uq~pppppt4/** * Get the ActionServlet instance */ pt getServletq~=xsq~ uq~pppppq~$q~yq~$q~ ppq~$xsq~ uq~ppppsq~ uq~sq~isq~ uq~ppppq~Åsq~ uq~pppppppt getServletq~=xsq~ uq~pppppq~$q~yq~$q~ ppq~$xsq~ uq~q»‘pppsq~ uq~ppppq~$q~Äxq~$t return servlet; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~Åsq~ uq~pppppppt getServletq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ ppq~§xsq~ uq~q»‘pppsq~ uq~ppppq~¥q~»xq~¥t return servlet; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~Åsq~ uq~pppppppt getServletq~rxsq~ uq~pppppq~–q~—q~–q~ ppq~˜xsq~ uq~q»‘pppsq~ uq~ppppq~–q~¢xq~–t return servlet; sq~ uq~ppppq~–q~–xq»†q~$q~Äxq~$psq~ uq~ppppq~$q~$xpppsq~ uq~ppppq~–q~¢xq~–t$ return this.servlet; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq»Òsq~ uq~ppppppptservletq~rxsq~ uq~pppppq~–q~—q~–q~ ppq~˜xpppq~ˆsq~ uq~pppppt„/** * Sets the servlet with which this handler is associated. * * @param servlet The associated servlet. */ pt setServletq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~q~¥pppsq~ uq~ppppq~–q~¢xq~–t' this.servlet = servlet; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~ˆsq~ uq~pppppt/** * Retrieves the action mapping with which this handler is associated. * * @return The associated action mapping. */ pt getMappingq~rxsq~ uq~pppppq~–q~—q~–q~épq~˜xsq~ uq~sq~isq~ uq~ppppq~’sq~ uq~ppppptE/** * Get the ActionMapping instance for this request */ pt getMappingq~=xsq~ uq~pppppq~$q~yq~$q~épq~$xsq~ uq~ppppsq~ uq~sq~isq~ uq~ppppq~Åsq~ uq~pppppppt getMappingq~=xsq~ uq~pppppq~$q~yq~$q~épq~$xsq~ uq~q»õpppsq~ uq~ppppq~$q~Äxq~$t return mapping; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~Åsq~ uq~pppppppt getMappingq~¢xsq~ uq~pppppq~¥q~¦q~¥q~épq~§xsq~ uq~q»õpppsq~ uq~ppppq~¥q~»xq~¥t return mapping; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~Åsq~ uq~pppppppt getMappingq~rxsq~ uq~pppppq~–q~—q~–q~épq~˜xsq~ uq~q»õpppsq~ uq~ppppq~–q~¢xq~–t return mapping; sq~ uq~ppppq~–q~–xq»êq~$q~Äxq~$psq~ uq~ppppq~$q~$xpppsq~ uq~ppppq~–q~¢xq~–t$ return this.mapping; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq¼6sq~ uq~ppppppptmappingq~rxsq~ uq~pppppq~–q~—q~–q~épq~˜xpppq~ˆsq~ uq~pppppt’/** * Sets the action mapping with which this handler is associated. * * @param mapping The associated action mapping. */ pt setMappingq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~sq~isq~ uq~sq~bsq~ uq~ppppq¼Isq~ uq~ppppppptmappingq~=xsq~ uq~pppppq~$q~yq~$q~épq~$xpppq~’sq~ uq~pppppti/** * Convienience method to set a reference to a working * ActionMapping instance. */ pt setMappingq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~sq~isq~ uq~sq~bsq~ uq~ppppq¼^sq~ uq~ppppppptmappingq~=xsq~ uq~pppppq~$q~yq~$q~épq~$xpppq~Åsq~ uq~pppppppt setMappingq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~q¼Ipppsq~ uq~ppppq~$q~Äxq~$t' this.mapping = mapping; sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq¼usq~ uq~ppppppptmappingq~¢xsq~ uq~pppppq~¥q~¦q~¥q~épq~§xpppq~Åsq~ uq~pppppppt setMappingq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~q¼Ipppsq~ uq~ppppq~¥q~»xq~¥t' this.mapping = mapping; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq¼Œsq~ uq~ppppppptmappingq~rxsq~ uq~pppppq~–q~—q~–q~épq~˜xpppq~Åsq~ uq~pppppppt setMappingq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~q¼Ipppsq~ uq~ppppq~–q~¢xq~–t' this.mapping = mapping; sq~ uq~ppppq~–q~–xq¼6q~$q~Äxq~$psq~ uq~ppppq~$q~$xpppsq~ uq~ppppq~–q~¢xq~–t' this.mapping = mapping; sq~ uq~ppppq~–q~–xq~}sq~isq~ uq~ppppq~ˆsq~ uq~ppppptŸ/** * Returns a hash table containing the text (i.e. non-file) request * parameters. * * @return The text request parameters. */ ptgetTextElementsq~rxsq~ uq~pppppq~–q~—q~–q~;pq~˜xsq~ uq~sq~isq~ uq~ppppq~’sq~ uq~ppppptÞ/** * This method is called on to retrieve all the text * input elements of the request. * @return A Hashtable where the keys and values are the names and values of the request input parameters */ ptgetTextElementsq~=xsq~ uq~pppppq~$q~yq~$q~;pq~$xsq~ uq~ppppsq~ uq~sq~isq~ uq~ppppq~Åsq~ uq~ppppppptgetTextElementsq~=xsq~ uq~pppppq~$q~yq~$q~;pq~$xsq~ uq~q¼µpppsq~ uq~ppppq~$q~Äxq~$t$ return textElements; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~Åsq~ uq~ppppppptgetTextElementsq~¢xsq~ uq~pppppq~¥q~¦q~¥q~;pq~§xsq~ uq~q¼µpppsq~ uq~ppppq~¥q~»xq~¥t$ return textElements; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~Åsq~ uq~ppppppptgetTextElementsq~rxsq~ uq~pppppq~–q~—q~–q~;pq~˜xsq~ uq~q¼µpppsq~ uq~ppppq~–q~¢xq~–t$ return textElements; sq~ uq~ppppq~–q~–xq¼ªq~$q~Äxq~$psq~ uq~ppppq~$q~$xpppsq~ uq~ppppq~–q~¢xq~–t) return this.elementsText; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~ˆsq~ uq~ppppptŸ/** * Returns a hash table containing the file (i.e. non-text) request * parameters. * * @return The file request parameters. */ ptgetFileElementsq~rxsq~ uq~pppppq~–q~—q~–q~;pq~˜xsq~ uq~sq~isq~ uq~ppppq~’sq~ uq~pppppt/** * This method is called on to retrieve all the FormFile * input elements of the request. * @see org.apache.struts.upload.FormFile * @return A Hashtable where the keys are the input names of the files and the values are FormFile objects */ ptgetFileElementsq~=xsq~ uq~pppppq~$q~yq~$q~;pq~$xsq~ uq~ppppsq~ uq~sq~isq~ uq~ppppq~Åsq~ uq~ppppppptgetFileElementsq~=xsq~ uq~pppppq~$q~yq~$q~;pq~$xsq~ uq~q½pppsq~ uq~ppppq~$q~Äxq~$t$ return fileElements; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~Åsq~ uq~ppppppptgetFileElementsq~¢xsq~ uq~pppppq~¥q~¦q~¥q~;pq~§xsq~ uq~q½pppsq~ uq~ppppq~¥q~»xq~¥t$ return fileElements; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~Åsq~ uq~ppppppptgetFileElementsq~rxsq~ uq~pppppq~–q~—q~–q~;pq~˜xsq~ uq~q½pppsq~ uq~ppppq~–q~¢xq~–t$ return fileElements; sq~ uq~ppppq~–q~–xq¼öq~$q~Äxq~$psq~ uq~ppppq~$q~$xpppsq~ uq~ppppq~–q~¢xq~–t) return this.elementsFile; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~ˆsq~ uq~ppppptš/** * Returns a hash table containing both text and file request parameters. * * @return The text and file request parameters. */ ptgetAllElementsq~rxsq~ uq~pppppq~–q~—q~–q~;pq~˜xsq~ uq~sq~isq~ uq~ppppq~’sq~ uq~pppppt´/** * This method returns all elements of a multipart request. * @return A Hashtable where the keys are input names and values are either Strings or FormFiles */ ptgetAllElementsq~=xsq~ uq~pppppq~$q~yq~$q~;pq~$xsq~ uq~ppppsq~ uq~sq~isq~ uq~ppppq~Åsq~ uq~ppppppptgetAllElementsq~=xsq~ uq~pppppq~$q~yq~$q~;pq~$xsq~ uq~q½Mpppsq~ uq~ppppq~$q~Äxq~$t# return allElements; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~Åsq~ uq~ppppppptgetAllElementsq~¢xsq~ uq~pppppq~¥q~¦q~¥q~;pq~§xsq~ uq~q½Mpppsq~ uq~ppppq~¥q~»xq~¥t# return allElements; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~Åsq~ uq~ppppppptgetAllElementsq~rxsq~ uq~pppppq~–q~—q~–q~;pq~˜xsq~ uq~q½Mpppsq~ uq~ppppq~–q~¢xq~–t# return allElements; sq~ uq~ppppq~–q~–xq½Bq~$q~Äxq~$psq~ uq~ppppq~$q~$xpppsq~ uq~ppppq~–q~¢xq~–t( return this.elementsAll; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~ˆsq~ uq~ppppptP/** * Cleans up when a problem occurs during request processing. */ ptrollbackq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~sq~isq~ uq~ppppq~’sq~ uq~ppppptÿ/** * This method is called on when there's some sort of problem * and the form post needs to be rolled back. Providers * should remove any FormFiles used to hold information * by setting them to null and also physically delete * them if the implementation calls for writing directly * to disk. * NOTE: Currently implemented but not automatically * supported, ActionForm implementors must call rollback() * manually for rolling back file uploads. */ ptrollbackq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~sq~isq~ uq~ppppq~Åsq~ uq~pppppt3/** * Delete all the files uploaded */ ptrollbackq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~q½™pppsq~ uq~ppppq~$q~Äxq~$t Enumeration names = fileElements.keys(); while (names.hasMoreElements()) { String name = (String) names.nextElement(); DiskFile theFile = (DiskFile) fileElements.get(name); theFile.destroy(); } sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~Åsq~ uq~pppppt4/** * Delete all the files uploaded. */ ptrollbackq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~q½™pppsq~ uq~ppppq~¥q~»xq~¥t Enumeration names = fileElements.keys(); while (names.hasMoreElements()) { String name = (String) names.nextElement(); DiskFile theFile = (DiskFile) fileElements.get(name); theFile.destroy(); } sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~Åsq~ uq~pppppt4/** * Delete all the files uploaded. */ ptrollbackq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~q½™pppsq~ uq~ppppq~–q~¢xq~–t Enumeration names = fileElements.keys(); while (names.hasMoreElements()) { String name = (String) names.nextElement(); DiskFile theFile = (DiskFile) fileElements.get(name); theFile.destroy(); } sq~ uq~ppppq~–q~–xq½Žq~$q~Äxq~$psq~ uq~ppppq~$q~$xpppsq~ uq~ppppq~–q~¢xq~–tÌ Iterator iter = elementsFile.values().iterator(); while (iter.hasNext()) { FormFile formFile = (FormFile) iter.next(); formFile.destroy(); } sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~ˆsq~ uq~pppppt8/** * Cleans up at the end of a request. */ ptfinishq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~sq~isq~ uq~ppppq~’sq~ uq~ppppptã/** * This method is called on when a successful form post * has been made. Some implementations will use this * to destroy temporary files or write to a database * or something of that nature */ ptfinishq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~sq~isq~ uq~ppppq~Åsq~ uq~pppppt_/** * Calls on {@link #rollback() rollback()} to delete * temporary files */ ptfinishq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~q½èpppsq~ uq~ppppq~$q~Äxq~$t rollback(); sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~Åsq~ uq~pppppt`/** * Calls on {@link #rollback() rollback()} to delete * temporary files. */ ptfinishq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~q½èpppsq~ uq~ppppq~¥q~»xq~¥t rollback(); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~Åsq~ uq~pppppt`/** * Calls on {@link #rollback() rollback()} to delete * temporary files. */ ptfinishq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~q½èpppsq~ uq~ppppq~–q~¢xq~–t rollback(); sq~ uq~ppppq~–q~–xq½Ýq~$q~Äxq~$psq~ uq~ppppq~$q~$xpppsq~ uq~ppppq~–q~¢xq~–t rollback(); sq~ uq~ppppq~–q~–xqº8sq~isq~ uq~sq~bsq~ uq~ppppq¾,sq~ uq~ppppppptacq~rxsq~ uq~pppppq~–q~—q~–q~bpq~˜xpppq~ˆsq~ uq~pppppt/** * Returns the size threshold which determines whether an uploaded file * will be written to disk or cached in memory. * * @param ac The current module's application configuration. * * @return The size threshold, in bytes. */ ptgetSizeThresholdq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–t. return DEFAULT_SIZE_THRESHOLD; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq¾Dsq~ uq~ppppppptacq~rxsq~ uq~pppppq~–q~—q~–q~bpq~˜xpppq~ˆsq~ uq~pppppt±/** * Returns the path to the temporary directory to be used for uploaded * files which are written to disk. The directory used is determined from * the first of the following to be non-empty. *
        *
      1. A temp dir explicitly defined either using the tempDir * servlet init param, or the tempDir attribute of the * <controller> element in the Struts config file.
      2. *
      3. The container-specified temp dir, obtained from the * javax.servlet.context.tempdir servlet context * attribute.
      4. *
      5. The temp dir specified by the java.io.tmpdir system * property.
      6. * (/ol> * * @param ac The application config instance for which the path should be * determined. * * @return The path to the directory to be used to store uploaded files. */ ptgetRepositoryPathq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–tˆ // First, look for an explicitly defined temp dir. String tempDir = ac.getControllerConfig().getTempDir(); // If none, look for a container specified temp dir. if (tempDir == null || tempDir.length() == 0) { if (servlet != null) { ServletContext context = servlet.getServletContext(); File tempDirFile = (File) context.getAttribute( "javax.servlet.context.tempdir"); tempDir = tempDirFile.getAbsolutePath(); } // If none, pick up the system temp dir. if (tempDir == null || tempDir.length() == 0) { tempDir = System.getProperty("java.io.tmpdir"); } } if (log.isTraceEnabled()) { log.trace("File upload temp dir: " + tempDir); } return tempDir; sq~ uq~ppppq~–q~–xq œq ¼q sq~isq~ uq~ppppq~ˆsq~ uq~ppppptÏ// ---------------------------------------- MultipartRequestHandler Methods /** * Retrieves the servlet with which this handler is associated. * * @return The associated servlet. */ pt getServletq~{xsq~ uq~pppppq~~q~q~~q~ ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t$ return this.servlet; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq¾lsq~ uq~ppppppptservletq~{xsq~ uq~pppppq~~q~q~~q~ ppq~€xpppq~ˆsq~ uq~pppppt„/** * Sets the servlet with which this handler is associated. * * @param servlet The associated servlet. */ pt setServletq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t' this.servlet = servlet; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ˆsq~ uq~pppppt/** * Retrieves the action mapping with which this handler is associated. * * @return The associated action mapping. */ pt getMappingq~{xsq~ uq~pppppq~~q~q~~q~épq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t$ return this.mapping; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq¾”sq~ uq~ppppppptmappingq~{xsq~ uq~pppppq~~q~q~~q~épq~€xpppq~ˆsq~ uq~pppppt’/** * Sets the action mapping with which this handler is associated. * * @param mapping The associated action mapping. */ pt setMappingq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t' this.mapping = mapping; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq¾¬sq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xpppq~ˆsq~ uq~pppppt¼/** * Parses the input stream and partitions the parsed items into a set of * form fields and a set of file items. In the process, the parsed items * are translated from Commons FileUpload FileItem instances * to Struts FormFile instances. * * @param request The multipart request to be processed. * * @throws ServletException if an unrecoverable error occurs. */ pt handleRequestq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t // Get the app config for the current request. ModuleConfig ac = (ModuleConfig) request.getAttribute( Globals.MODULE_KEY); // Create and configure a DIskFileUpload instance. DiskFileUpload upload = new DiskFileUpload(); // Set the maximum size before a FileUploadException will be thrown. upload.setSizeMax((int) getSizeMax(ac)); // Set the maximum size that will be stored in memory. upload.setSizeThreshold((int) getSizeThreshold(ac)); // Set the the location for saving data on disk. upload.setRepositoryPath(getRepositoryPath(ac)); // Create the hash tables to be populated. elementsText = new Hashtable(); elementsFile = new Hashtable(); elementsAll = new Hashtable(); // Parse the request into file items. List items = null; try { items = upload.parseRequest(request); } catch (DiskFileUpload.SizeLimitExceededException e) { // Special handling for uploads that are too big. request.setAttribute( MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED, Boolean.TRUE); return; } catch (FileUploadException e) { log.error("Failed to parse multipart request", e); throw new ServletException(e); } // Partition the items into form fields and files. Iterator iter = items.iterator(); while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); if (item.isFormField()) { addTextParameter(request, item); } else { addFileParameter(item); } } sq~ uq~q~¦pppq~~q~~xsq~isq~ uq~ppppq~ˆsq~ uq~pppppt£/** * Returns a hash table containing the text (that is, non-file) request * parameters. * * @return The text request parameters. */ ptgetTextElementsq~{xsq~ uq~pppppq~~q~q~~q~;pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t) return this.elementsText; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ˆsq~ uq~pppppt£/** * Returns a hash table containing the file (that is, non-text) request * parameters. * * @return The file request parameters. */ ptgetFileElementsq~{xsq~ uq~pppppq~~q~q~~q~;pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t) return this.elementsFile; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ˆsq~ uq~ppppptš/** * Returns a hash table containing both text and file request parameters. * * @return The text and file request parameters. */ ptgetAllElementsq~{xsq~ uq~pppppq~~q~q~~q~;pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t( return this.elementsAll; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ˆsq~ uq~ppppptP/** * Cleans up when a problem occurs during request processing. */ ptrollbackq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tÌ Iterator iter = elementsFile.values().iterator(); while (iter.hasNext()) { FormFile formFile = (FormFile) iter.next(); formFile.destroy(); } sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ˆsq~ uq~pppppt8/** * Cleans up at the end of a request. */ ptfinishq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t rollback(); sq~ uq~ppppq~~q~~xqºhqº€qº˜sq~isq~ uq~sq~bsq~ uq~ppppq¿sq~ uq~ppppppptmcq~{xsq~ uq~pppppq~~q~q~~q~ºpq~€xpppq~ˆsq~ uq~pppppt¬/** * Returns the path to the temporary directory to be used for uploaded * files which are written to disk. The directory used is determined from * the first of the following to be non-empty. *
          *
        1. A temp dir explicitly defined either using the tempDir * servlet init param, or the tempDir attribute of the * <controller> element in the Struts config file.
        2. *
        3. The container-specified temp dir, obtained from the * javax.servlet.context.tempdir servlet context * attribute.
        4. *
        5. The temp dir specified by the java.io.tmpdir system * property.
        6. * (/ol> * * @param mc The module config instance for which the path should be * determined. * * @return The path to the directory to be used to store uploaded files. */ ptgetRepositoryPathq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t‡ // First, look for an explicitly defined temp dir. String tempDir = mc.getControllerConfig().getTempDir(); // If none, look for a container specified temp dir. if (tempDir == null || tempDir.length() == 0) { if (servlet != null) { ServletContext context = servlet.getServletContext(); File tempDirFile = (File) context.getAttribute( "javax.servlet.context.tempdir"); tempDir = tempDirFile.getAbsolutePath(); } // If none, pick up the system temp dir. if (tempDir == null || tempDir.length() == 0) { tempDir = System.getProperty("java.io.tmpdir"); } } if (log.isTraceEnabled()) { log.trace("File upload temp dir: " + tempDir); } return tempDir; sq~ uq~ppppq~~q~~xq ôqsq~isq~ uq~ppppq~ˆsq~ uq~ppppptÏ// ---------------------------------------- MultipartRequestHandler Methods /** * Retrieves the servlet with which this handler is associated. * * @return The associated servlet. */ pt getServletq~cxsq~ uq~pppppq~fq~gq~fq~ ppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft$ return this.servlet; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq¿FileItem instances * to Struts FormFile instances. * * @param request The multipart request to be processed. * * @throws ServletException if an unrecoverable error occurs. */ pt handleRequestq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft // Get the app config for the current request. ModuleConfig ac = (ModuleConfig) request.getAttribute( Globals.MODULE_KEY); // Create and configure a DIskFileUpload instance. DiskFileUpload upload = new DiskFileUpload(); // Set the maximum size before a FileUploadException will be thrown. upload.setSizeMax((int) getSizeMax(ac)); // Set the maximum size that will be stored in memory. upload.setSizeThreshold((int) getSizeThreshold(ac)); // Set the the location for saving data on disk. upload.setRepositoryPath(getRepositoryPath(ac)); // Create the hash tables to be populated. elementsText = new Hashtable(); elementsFile = new Hashtable(); elementsAll = new Hashtable(); // Parse the request into file items. List items = null; try { items = upload.parseRequest(request); } catch (DiskFileUpload.SizeLimitExceededException e) { // Special handling for uploads that are too big. request.setAttribute( MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED, Boolean.TRUE); return; } catch (FileUploadException e) { log.error("Failed to parse multipart request", e); throw new ServletException(e); } // Partition the items into form fields and files. Iterator iter = items.iterator(); while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); if (item.isFormField()) { addTextParameter(request, item); } else { addFileParameter(item); } } sq~ uq~q~¦pppq~fq~fxsq~isq~ uq~ppppq~ˆsq~ uq~pppppt£/** * Returns a hash table containing the text (that is, non-file) request * parameters. * * @return The text request parameters. */ ptgetTextElementsq~cxsq~ uq~pppppq~fq~gq~fq~;pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft) return this.elementsText; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ˆsq~ uq~pppppt£/** * Returns a hash table containing the file (that is, non-text) request * parameters. * * @return The file request parameters. */ ptgetFileElementsq~cxsq~ uq~pppppq~fq~gq~fq~;pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft) return this.elementsFile; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ˆsq~ uq~ppppptš/** * Returns a hash table containing both text and file request parameters. * * @return The text and file request parameters. */ ptgetAllElementsq~cxsq~ uq~pppppq~fq~gq~fq~;pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft( return this.elementsAll; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ˆsq~ uq~ppppptP/** * Cleans up when a problem occurs during request processing. */ ptrollbackq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftÌ Iterator iter = elementsFile.values().iterator(); while (iter.hasNext()) { FormFile formFile = (FormFile) iter.next(); formFile.destroy(); } sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ˆsq~ uq~pppppt8/** * Cleans up at the end of a request. */ ptfinishq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft rollback(); sq~ uq~ppppq~fq~fxqºÐqºèq»sq~isq~ uq~sq~bsq~ uq~ppppq¿äsq~ uq~ppppppptmcq~cxsq~ uq~pppppq~fq~gq~fq~ºpq~hxpppq~ˆsq~ uq~pppppt¬/** * Returns the path to the temporary directory to be used for uploaded * files which are written to disk. The directory used is determined from * the first of the following to be non-empty. *
            *
          1. A temp dir explicitly defined either using the tempDir * servlet init param, or the tempDir attribute of the * <controller> element in the Struts config file.
          2. *
          3. The container-specified temp dir, obtained from the * javax.servlet.context.tempdir servlet context * attribute.
          4. *
          5. The temp dir specified by the java.io.tmpdir system * property.
          6. * (/ol> * * @param mc The module config instance for which the path should be * determined. * * @return The path to the directory to be used to store uploaded files. */ ptgetRepositoryPathq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft‡ // First, look for an explicitly defined temp dir. String tempDir = mc.getControllerConfig().getTempDir(); // If none, look for a container specified temp dir. if (tempDir == null || tempDir.length() == 0) { if (servlet != null) { ServletContext context = servlet.getServletContext(); File tempDirFile = (File) context.getAttribute( "javax.servlet.context.tempdir"); tempDir = tempDirFile.getAbsolutePath(); } // If none, pick up the system temp dir. if (tempDir == null || tempDir.length() == 0) { tempDir = System.getProperty("java.io.tmpdir"); } } if (log.isTraceEnabled()) { log.trace("File upload temp dir: " + tempDir); } return tempDir; sq~ uq~ppppq~fq~fxqCqcpq~äÛsq~ uq~ppppppptCommonsMultipartRequestHandlerq~rxsq~ uq~ppppq~–sq~ uq~q"pppsq~ uq~q~’pppq~–q~–q Ysq~ uq~pppppq~–sq~ uq~ppppsq~ uq~ppppq~¢xq~–ppxsq~ uq~pppppt¼/** * Parses the input stream and partitions the parsed items into a set of * form fields and a set of file items. In the process, the parsed items * are translated from Commons FileUpload FileItem instances * to Struts FormFile instances. * * @param request The multipart request to be processed. * * @throws ServletException if an unrecoverable error occurs. */ pt handleRequestq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~q~8pppsq~ uq~ppppq~–q~¢xq~–t9 // Get the app config for the current request. ApplicationConfig ac = (ApplicationConfig) request.getAttribute( Action.APPLICATION_KEY); // Create and configure a FileUpload instance. FileUpload upload = new FileUpload(); // Set the maximum size before a FileUploadException will be thrown. upload.setSizeMax((int) getSizeMax(ac)); // Set the maximum size that will be stored in memory. upload.setSizeThreshold(getSizeThreshold(ac)); // Set the the location for saving data on disk. upload.setRepositoryPath(getRepositoryPath(ac)); // Create the hash tables to be populated. elementsText = new Hashtable(); elementsFile = new Hashtable(); elementsAll = new Hashtable(); // Parse the request into file items. List items = null; try { items = upload.parseRequest(request); } catch (FileUploadException e) { // Special handling for uploads that are too big. if (e.getMessage().endsWith("size exceeds allowed range")) { request.setAttribute( MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED, Boolean.TRUE); return; } log.error("Failed to parse multipart request", e); throw new ServletException(e); } // Partition the items into form fields and files. Iterator iter = items.iterator(); while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); if (item.isFormField()) { addTextParameter(request, item); } else { addFileParameter(request, item); } } sq~ uq~q~¦pppq~–q~–xq~$q~Äxq~$psq~ uq~q~¦pppq~$q~$xpppsq~ uq~ppppq~$q~Äxq~$tW ApplicationConfig appConfig = (ApplicationConfig) request.getAttribute(Action.APPLICATION_KEY); retrieveTempDir(appConfig); try { MultipartIterator iterator = new MultipartIterator(request, appConfig.getControllerConfig().getBufferSize(), getMaxSize(appConfig.getControllerConfig().getMaxFileSize()), tempDir); MultipartElement element; textElements = new Hashtable(); fileElements = new Hashtable(); allElements = new Hashtable(); while ((element = iterator.getNextElement()) != null) { if (!element.isFile()) { createTextElement(request, element); } else { createDiskFile(element); } } //take care of maximum length being exceeded if (iterator.isMaxLengthExceeded()) { request.setAttribute(MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED, Boolean.TRUE); } } catch (IOException ioe) { throw new ServletException(ioe); } sq~ uq~q~¦pppq~$q~$xqáqq½Zq¼Âq½q½¦q½õq~ºq¼^q»žq¼q¹ðsq~isq~ uq~sq~bsq~ uq~ppppqÀsq~ uq~pppppppt appConfigq~=xsq~ uq~pppppq~$q~yq~$q~bpq~$xpppq~Åsq~ uq~pppppt’/** * Retrieves the temporary directory from either ActionServlet, a context * property, or a system property, in that order */ ptretrieveTempDirq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$tM //attempt to retrieve the servlet container's temporary directory ServletContext context = getServlet().getServletContext(); try { tempDir = (String) context.getAttribute("javax.servlet.context.tempdir"); } catch (ClassCastException cce) { tempDir = ((File) context.getAttribute("javax.servlet.context.tempdir")).getAbsolutePath(); } if (tempDir == null) { //attempt to retrieve the temporary directory from the controller tempDir = appConfig.getControllerConfig().getTempDir(); if (tempDir == null) { //default to system-wide tempdir tempDir = System.getProperty("java.io.tmpdir"); if (getServlet().getDebug() > 1) { log.debug("DiskMultipartRequestHandler.handleRequest(): " + "defaulting to java.io.tmpdir directory \"" + tempDir); } } } sq~ uq~ppppq~$q~$xq~Mq?q^q½iq¼Ñq½q½¶q¾sq~isq~ uq~sq~bsq~ uq~ppppqÀ7sq~ uq~ppppppptservletq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ ppq~§xpppq~Åsq~ uq~pppppppt setServletq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~q~¥pppsq~ uq~ppppq~¥q~»xq~¥t' this.servlet = servlet; sq~ uq~ppppq~¥q~¥xq¼uq»­q¼qºsq~isq~ uq~sq~bsq~ uq~ppppqÀNsq~ uq~pppppppt appConfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~bpq~§xpppq~Åsq~ uq~pppppt“/** * Retrieves the temporary directory from either ActionServlet, a context * property, or a system property, in that order. */ ptretrieveTempDirq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥t //attempt to retrieve the servlet container's temporary directory ActionServlet servlet = getServlet(); if (servlet != null) { //attempt to retrieve the servlet container's temporary directory ServletContext context = servlet.getServletContext(); try { tempDir = (String) context.getAttribute("javax.servlet.context.tempdir"); } catch (ClassCastException cce) { tempDir = ((File) context.getAttribute("javax.servlet.context.tempdir")).getAbsolutePath(); } } if (tempDir == null) { //attempt to retrieve the temporary directory from the controller tempDir = appConfig.getControllerConfig().getTempDir(); if (tempDir == null) { //default to system-wide tempdir tempDir = System.getProperty("java.io.tmpdir"); if (getServlet().getDebug() > 1) { log.debug("DiskMultipartRequestHandler.handleRequest(): " + "defaulting to java.io.tmpdir directory \"" + tempDir); } } } sq~ uq~ppppq~¥q~¥xq~eq­qÌq½xq¼àq½,q½Æq¾sq~isq~ uq~sq~bsq~ uq~ppppqÀfsq~ uq~ppppppptservletq~rxsq~ uq~pppppq~–q~—q~–q~ ppq~˜xpppq~Åsq~ uq~pppppppt setServletq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~q~¥pppsq~ uq~ppppq~–q~¢xq~–t' this.servlet = servlet; sq~ uq~ppppq~–q~–xq¼Œq»¼q¼ qº sq~isq~ uq~sq~bsq~ uq~ppppqÀ}sq~ uq~pppppppt appConfigq~rxsq~ uq~pppppq~–q~—q~–q~bpq~˜xpppq~Åsq~ uq~pppppt“/** * Retrieves the temporary directory from either ActionServlet, a context * property, or a system property, in that order. */ ptretrieveTempDirq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–t //attempt to retrieve the servlet container's temporary directory ActionServlet servlet = getServlet(); if (servlet != null) { //attempt to retrieve the servlet container's temporary directory ServletContext context = servlet.getServletContext(); try { tempDir = (String) context.getAttribute("javax.servlet.context.tempdir"); } catch (ClassCastException cce) { tempDir = ((File) context.getAttribute("javax.servlet.context.tempdir")).getAbsolutePath(); } } if (tempDir == null) { //attempt to retrieve the temporary directory from the controller tempDir = appConfig.getControllerConfig().getTempDir(); if (tempDir == null) { //default to system-wide tempdir tempDir = System.getProperty("java.io.tmpdir"); if (getServlet().getDebug() > 1) { log.debug("DiskMultipartRequestHandler.handleRequest(): " + "defaulting to java.io.tmpdir directory \"" + tempDir); } } } sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqÀ•sq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xpppq~Åsq~ uq~ppppptâ/** * This method populates the internal hashtables with multipart request data. * If the request argument is an instance of MultipartRequestWrapper, * the request wrapper will be populated as well. */ pt handleRequestq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tì ModuleConfig moduleConfig = (ModuleConfig) request.getAttribute(Globals.MODULE_KEY); retrieveTempDir(moduleConfig); try { MultipartIterator iterator = new MultipartIterator(request, moduleConfig.getControllerConfig().getBufferSize(), getMaxSize(moduleConfig.getControllerConfig().getMaxFileSize()), tempDir); MultipartElement element; textElements = new Hashtable(); fileElements = new Hashtable(); allElements = new Hashtable(); while ((element = iterator.getNextElement()) != null) { if (!element.isFile()) { createTextElement(request, element); } else { createDiskFile(element); } } //take care of maximum length being exceeded if (iterator.isMaxLengthExceeded()) { request.setAttribute(MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED, Boolean.TRUE); } } catch(IOException ioe) { throw new ServletException(ioe); } sq~ uq~q~¦pppq~~q~~xqq:sq~isq~ uq~ppppq~Åsq~ uq~ppppppptgetAllElementsq~{xsq~ uq~pppppq~~q~q~~q~;pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t# return allElements; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~Åsq~ uq~ppppppptgetTextElementsq~{xsq~ uq~pppppq~~q~q~~q~;pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t$ return textElements; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~Åsq~ uq~ppppppptgetFileElementsq~{xsq~ uq~pppppq~~q~q~~q~;pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t$ return fileElements; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~Åsq~ uq~pppppt4/** * Delete all the files uploaded. */ ptrollbackq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t Enumeration names = fileElements.keys(); while (names.hasMoreElements()) { String name = (String) names.nextElement(); DiskFile theFile = (DiskFile) fileElements.get(name); theFile.destroy(); } sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~Åsq~ uq~pppppt`/** * Calls on {@link #rollback() rollback()} to delete * temporary files. */ ptfinishq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t rollback(); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqÀúsq~ uq~ppppppptservletq~{xsq~ uq~pppppq~~q~q~~q~ ppq~€xpppq~Åsq~ uq~pppppppt setServletq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t' this.servlet = servlet; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqÁsq~ uq~ppppppptmappingq~{xsq~ uq~pppppq~~q~q~~q~épq~€xpppq~Åsq~ uq~pppppppt setMappingq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t' this.mapping = mapping; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~Åsq~ uq~pppppppt getServletq~{xsq~ uq~pppppq~~q~q~~q~ ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t return servlet; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~Åsq~ uq~pppppppt getMappingq~{xsq~ uq~pppppq~~q~q~~q~épq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t return mapping; sq~ uq~ppppq~~q~~xqºPsq~isq~ uq~sq~bsq~ uq~ppppqÁFsq~ uq~pppppppt moduleConfigq~{xsq~ uq~pppppq~~q~q~~q~ºpq~€xpppq~Åsq~ uq~pppppt“/** * Retrieves the temporary directory from either ActionServlet, a context * property, or a system property, in that order. */ ptretrieveTempDirq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~tï //attempt to retrieve the servlet container's temporary directory ActionServlet servlet = getServlet(); if (servlet != null) { //attempt to retrieve the servlet container's temporary directory ServletContext context = servlet.getServletContext(); try { tempDir = (String) context.getAttribute("javax.servlet.context.tempdir"); } catch(ClassCastException cce) { tempDir = ((File) context.getAttribute("javax.servlet.context.tempdir")).getAbsolutePath(); } } if (tempDir == null) { //attempt to retrieve the temporary directory from the controller tempDir = moduleConfig.getControllerConfig().getTempDir(); if (tempDir == null) { //default to system-wide tempdir tempDir = System.getProperty("java.io.tmpdir"); if (getServlet().getDebug() > 1) { log.debug("DiskMultipartRequestHandler.handleRequest(): " + "defaulting to java.io.tmpdir directory \"" + tempDir); } } } sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqÁ^sq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxpppq~Åsq~ uq~ppppptâ/** * This method populates the internal hashtables with multipart request data. * If the request argument is an instance of MultipartRequestWrapper, * the request wrapper will be populated as well. */ pt handleRequestq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftì ModuleConfig moduleConfig = (ModuleConfig) request.getAttribute(Globals.MODULE_KEY); retrieveTempDir(moduleConfig); try { MultipartIterator iterator = new MultipartIterator(request, moduleConfig.getControllerConfig().getBufferSize(), getMaxSize(moduleConfig.getControllerConfig().getMaxFileSize()), tempDir); MultipartElement element; textElements = new Hashtable(); fileElements = new Hashtable(); allElements = new Hashtable(); while ((element = iterator.getNextElement()) != null) { if (!element.isFile()) { createTextElement(request, element); } else { createDiskFile(element); } } //take care of maximum length being exceeded if (iterator.isMaxLengthExceeded()) { request.setAttribute(MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED, Boolean.TRUE); } } catch(IOException ioe) { throw new ServletException(ioe); } sq~ uq~q~¦pppq~fq~fxq‰q¨sq~isq~ uq~ppppq~Åsq~ uq~ppppppptgetAllElementsq~cxsq~ uq~pppppq~fq~gq~fq~;pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft# return allElements; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~Åsq~ uq~ppppppptgetTextElementsq~cxsq~ uq~pppppq~fq~gq~fq~;pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft$ return textElements; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~Åsq~ uq~ppppppptgetFileElementsq~cxsq~ uq~pppppq~fq~gq~fq~;pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft$ return fileElements; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~Åsq~ uq~pppppt4/** * Delete all the files uploaded. */ ptrollbackq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft Enumeration names = fileElements.keys(); while (names.hasMoreElements()) { String name = (String) names.nextElement(); DiskFile theFile = (DiskFile) fileElements.get(name); theFile.destroy(); } sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~Åsq~ uq~pppppt`/** * Calls on {@link #rollback() rollback()} to delete * temporary files. */ ptfinishq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft rollback(); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqÁÃsq~ uq~ppppppptservletq~cxsq~ uq~pppppq~fq~gq~fq~ ppq~hxpppq~Åsq~ uq~pppppppt setServletq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft' this.servlet = servlet; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqÁÚsq~ uq~ppppppptmappingq~cxsq~ uq~pppppq~fq~gq~fq~épq~hxpppq~Åsq~ uq~pppppppt setMappingq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft' this.mapping = mapping; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~Åsq~ uq~pppppppt getServletq~cxsq~ uq~pppppq~fq~gq~fq~ ppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft return servlet; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~Åsq~ uq~pppppppt getMappingq~cxsq~ uq~pppppq~fq~gq~fq~épq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft return mapping; sq~ uq~ppppq~fq~fxqº¸sq~isq~ uq~sq~bsq~ uq~ppppqÂsq~ uq~pppppppt moduleConfigq~cxsq~ uq~pppppq~fq~gq~fq~ºpq~hxpppq~Åsq~ uq~pppppt“/** * Retrieves the temporary directory from either ActionServlet, a context * property, or a system property, in that order. */ ptretrieveTempDirq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ftï //attempt to retrieve the servlet container's temporary directory ActionServlet servlet = getServlet(); if (servlet != null) { //attempt to retrieve the servlet container's temporary directory ServletContext context = servlet.getServletContext(); try { tempDir = (String) context.getAttribute("javax.servlet.context.tempdir"); } catch(ClassCastException cce) { tempDir = ((File) context.getAttribute("javax.servlet.context.tempdir")).getAbsolutePath(); } } if (tempDir == null) { //attempt to retrieve the temporary directory from the controller tempDir = moduleConfig.getControllerConfig().getTempDir(); if (tempDir == null) { //default to system-wide tempdir tempDir = System.getProperty("java.io.tmpdir"); if (getServlet().getDebug() > 1) { log.debug("DiskMultipartRequestHandler.handleRequest(): " + "defaulting to java.io.tmpdir directory \"" + tempDir); } } } sq~ uq~ppppq~fq~fxpppppppq~äÛsq~ uq~ppppppptDiskMultipartRequestHandlerq~=xsq~ uq~ppppq~$sq~ uq~qpppsq~ uq~q~’pppq~$q~$q~Hsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxsq~ uq~pppppppt setServletq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~q~¥pppsq~ uq~ppppq~$q~Äxq~$t' this.servlet = servlet; sq~ uq~ppppq~$q~$xqÀ7qÀfq»Òq~$q~Äxq~$psq~ uq~ppppq~$q~$xq¼Iq»‘q»õq~8q¼µq½q½Mq½™q½èsq~isq~ uq~sq~bsq~ uq~ppppqÂDsq~ uq~ppppppptservletq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ ppq~§xpppq~’sq~ uq~ppppptl/** * Convienience method to set a reference to a working * ActionServlet instance. */ pt setServletq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥psq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqÂ[sq~ uq~ppppppptmappingq~¢xsq~ uq~pppppq~¥q~¦q~¥q~épq~§xpppq~’sq~ uq~ppppptl/** * Convienience method to set a reference to a working * ActionMapping instance. */ pt setMappingq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥psq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~’sq~ uq~pppppt6/** * Get the ActionServlet instance */ pt getServletq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥psq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~’sq~ uq~ppppptG/** * Get the ActionMapping instance for this request */ pt getMappingq~¢xsq~ uq~pppppq~¥q~¦q~¥q~épq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥psq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqÂsq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Œpq~§xpppq~’sq~ uq~pppppt/** * After constructed, this is the first method called on * by ActionServlet. Use this method for all your * data-parsing of the ServletInputStream in the request * * @exception ServletException thrown if something goes wrong */ pt handleRequestq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥psq~ uq~q~¦pppq~¥q~¥xsq~isq~ uq~ppppq~’sq~ uq~ppppptô/** * This method is called on to retrieve all the text * input elements of the request. * * @return A Hashtable where the keys and values are the names and * values of the request input parameters */ ptgetTextElementsq~¢xsq~ uq~pppppq~¥q~¦q~¥q~;pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥psq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~’sq~ uq~pppppt /** * This method is called on to retrieve all the FormFile * input elements of the request. * @see org.apache.struts.upload.FormFile * @return A Hashtable where the keys are the input names of the * files and the values are FormFile objects */ ptgetFileElementsq~¢xsq~ uq~pppppq~¥q~¦q~¥q~;pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥psq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~’sq~ uq~ppppptÂ/** * This method returns all elements of a multipart request. * @return A Hashtable where the keys are input names and values * are either Strings or FormFiles */ ptgetAllElementsq~¢xsq~ uq~pppppq~¥q~¦q~¥q~;pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥psq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~’sq~ uq~pppppt /** * This method is called on when there's some sort of problem * and the form post needs to be rolled back. Providers * should remove any FormFiles used to hold information * by setting them to null and also physically delete * them if the implementation calls for writing directly * to disk. * NOTE: Currently implemented but not automatically * supported, ActionForm implementors must call rollback() * manually for rolling back file uploads. */ ptrollbackq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥psq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~’sq~ uq~pppppté/** * This method is called on when a successful form post * has been made. Some implementations will use this * to destroy temporary files or write to a database * or something of that nature. */ ptfinishq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥psq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqÂòsq~ uq~ppppppptservletq~rxsq~ uq~pppppq~–q~—q~–q~ ppq~˜xpppq~’sq~ uq~pppppti/** * Convienience method to set a reference to a working * ActionServlet instance. */ pt setServletq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–psq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqà sq~ uq~ppppppptmappingq~rxsq~ uq~pppppq~–q~—q~–q~épq~˜xpppq~’sq~ uq~pppppti/** * Convienience method to set a reference to a working * ActionMapping instance. */ pt setMappingq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–psq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~’sq~ uq~pppppt4/** * Get the ActionServlet instance */ pt getServletq~rxsq~ uq~pppppq~–q~—q~–q~ ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–psq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~’sq~ uq~ppppptE/** * Get the ActionMapping instance for this request */ pt getMappingq~rxsq~ uq~pppppq~–q~—q~–q~épq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–psq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqÃ>sq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xpppq~’sq~ uq~pppppt/** * After constructed, this is the first method called on * by ActionServlet. Use this method for all your * data-parsing of the ServletInputStream in the request * * @exception ServletException thrown if something goes wrong */ pt handleRequestq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–psq~ uq~q~¦pppq~–q~–xsq~isq~ uq~ppppq~’sq~ uq~ppppptî/** * This method is called on to retrieve all the text * input elements of the request. * * @return A Hashtable where the keys and values are the names and * values of the request input parameters */ ptgetTextElementsq~rxsq~ uq~pppppq~–q~—q~–q~;pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–psq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~’sq~ uq~pppppt/** * This method is called on to retrieve all the FormFile * input elements of the request. * @see org.apache.struts.upload.FormFile * @return A Hashtable where the keys are the input names of the * files and the values are FormFile objects */ ptgetFileElementsq~rxsq~ uq~pppppq~–q~—q~–q~;pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–psq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~’sq~ uq~pppppt¾/** * This method returns all elements of a multipart request. * @return A Hashtable where the keys are input names and values * are either Strings or FormFiles */ ptgetAllElementsq~rxsq~ uq~pppppq~–q~—q~–q~;pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–psq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~’sq~ uq~ppppptÿ/** * This method is called on when there's some sort of problem * and the form post needs to be rolled back. Providers * should remove any FormFiles used to hold information * by setting them to null and also physically delete * them if the implementation calls for writing directly * to disk. * NOTE: Currently implemented but not automatically * supported, ActionForm implementors must call rollback() * manually for rolling back file uploads. */ ptrollbackq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–psq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~’sq~ uq~ppppptä/** * This method is called on when a successful form post * has been made. Some implementations will use this * to destroy temporary files or write to a database * or something of that nature. */ ptfinishq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–psq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqàsq~ uq~ppppppptservletq~{xsq~ uq~pppppq~~q~q~~q~ ppq~€xpppq~’sq~ uq~pppppti/** * Convienience method to set a reference to a working * ActionServlet instance. */ pt setServletq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq÷sq~ uq~ppppppptmappingq~{xsq~ uq~pppppq~~q~q~~q~épq~€xpppq~’sq~ uq~pppppti/** * Convienience method to set a reference to a working * ActionMapping instance. */ pt setMappingq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~’sq~ uq~pppppt4/** * Get the ActionServlet instance */ pt getServletq~{xsq~ uq~pppppq~~q~q~~q~ ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~’sq~ uq~ppppptE/** * Get the ActionMapping instance for this request */ pt getMappingq~{xsq~ uq~pppppq~~q~q~~q~épq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqÃìsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xpppq~’sq~ uq~pppppt/** * After constructed, this is the first method called on * by ActionServlet. Use this method for all your * data-parsing of the ServletInputStream in the request * * @exception ServletException thrown if something goes wrong */ pt handleRequestq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~psq~ uq~q~¦pppq~~q~~xsq~isq~ uq~ppppq~’sq~ uq~ppppptî/** * This method is called on to retrieve all the text * input elements of the request. * * @return A Hashtable where the keys and values are the names and * values of the request input parameters */ ptgetTextElementsq~{xsq~ uq~pppppq~~q~q~~q~;pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~’sq~ uq~pppppt/** * This method is called on to retrieve all the FormFile * input elements of the request. * @see org.apache.struts.upload.FormFile * @return A Hashtable where the keys are the input names of the * files and the values are FormFile objects */ ptgetFileElementsq~{xsq~ uq~pppppq~~q~q~~q~;pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~’sq~ uq~pppppt¾/** * This method returns all elements of a multipart request. * @return A Hashtable where the keys are input names and values * are either Strings or FormFiles */ ptgetAllElementsq~{xsq~ uq~pppppq~~q~q~~q~;pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~’sq~ uq~ppppptÿ/** * This method is called on when there's some sort of problem * and the form post needs to be rolled back. Providers * should remove any FormFiles used to hold information * by setting them to null and also physically delete * them if the implementation calls for writing directly * to disk. * NOTE: Currently implemented but not automatically * supported, ActionForm implementors must call rollback() * manually for rolling back file uploads. */ ptrollbackq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~’sq~ uq~ppppptä/** * This method is called on when a successful form post * has been made. Some implementations will use this * to destroy temporary files or write to a database * or something of that nature. */ ptfinishq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqÄNsq~ uq~ppppppptservletq~cxsq~ uq~pppppq~fq~gq~fq~ ppq~hxpppq~’sq~ uq~pppppti/** * Convienience method to set a reference to a working * ActionServlet instance. */ pt setServletq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fpsq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqÄesq~ uq~ppppppptmappingq~cxsq~ uq~pppppq~fq~gq~fq~épq~hxpppq~’sq~ uq~pppppti/** * Convienience method to set a reference to a working * ActionMapping instance. */ pt setMappingq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fpsq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~’sq~ uq~pppppt4/** * Get the ActionServlet instance */ pt getServletq~cxsq~ uq~pppppq~fq~gq~fq~ ppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fpsq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~’sq~ uq~ppppptE/** * Get the ActionMapping instance for this request */ pt getMappingq~cxsq~ uq~pppppq~fq~gq~fq~épq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fpsq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqÄšsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxpppq~’sq~ uq~pppppt/** * After constructed, this is the first method called on * by ActionServlet. Use this method for all your * data-parsing of the ServletInputStream in the request * * @exception ServletException thrown if something goes wrong */ pt handleRequestq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fpsq~ uq~q~¦pppq~fq~fxsq~isq~ uq~ppppq~’sq~ uq~ppppptî/** * This method is called on to retrieve all the text * input elements of the request. * * @return A Hashtable where the keys and values are the names and * values of the request input parameters */ ptgetTextElementsq~cxsq~ uq~pppppq~fq~gq~fq~;pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fpsq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~’sq~ uq~pppppt/** * This method is called on to retrieve all the FormFile * input elements of the request. * @see org.apache.struts.upload.FormFile * @return A Hashtable where the keys are the input names of the * files and the values are FormFile objects */ ptgetFileElementsq~cxsq~ uq~pppppq~fq~gq~fq~;pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fpsq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~’sq~ uq~pppppt¾/** * This method returns all elements of a multipart request. * @return A Hashtable where the keys are input names and values * are either Strings or FormFiles */ ptgetAllElementsq~cxsq~ uq~pppppq~fq~gq~fq~;pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fpsq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~’sq~ uq~ppppptÿ/** * This method is called on when there's some sort of problem * and the form post needs to be rolled back. Providers * should remove any FormFiles used to hold information * by setting them to null and also physically delete * them if the implementation calls for writing directly * to disk. * NOTE: Currently implemented but not automatically * supported, ActionForm implementors must call rollback() * manually for rolling back file uploads. */ ptrollbackq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fpsq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~’sq~ uq~ppppptä/** * This method is called on when a successful form post * has been made. Some implementations will use this * to destroy temporary files or write to a database * or something of that nature. */ ptfinishq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fpsq~ uq~ppppq~fq~fxppppppq~äÛsq~ uq~ppppppptMultipartRequestHandlerq~=xsq~ uq~ q\ˆsq~Csq~ uq~ppppsq~Qsq~ uq~sq~Csq~ uq~ppppqÅsq~ uq~ppppsq~#q~°xsq~Csq~ uq~ppppqÅsq~ uq~ppppsq~#q~ŒxqÅpq~Bsq~ uq~pppppt,/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/action/ActionForm.java,v 1.16 2003/05/01 16:16:49 rleland Exp $ * $Revision: 1.16 $ * $Date: 2003/05/01 16:16:49 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** *

            An ActionForm is a JavaBean optionally associated with * one or more ActionMappings. Such a bean will have had its * properties initialized from the corresponding request parameters before * the corresonding action's execute method is called.

            * *

            When the properties of this bean have been populated, but before the * execute method of the action is called, this bean's * validate method will be called, which gives the bean a chance * to verify that the properties submitted by the user are correct and valid. * If this method finds problems, it returns an error messages object that * encapsulates those problems, and the controller servlet will return control * to the corresponding input form. Otherwise, the validate * method returns null, indicating that everything is acceptable * and the corresponding Action's execute method should be * called.

            * *

            This class must be subclassed in order to be instantiated. Subclasses * should provide property getter and setter methods for all of the bean * properties they wish to expose, plus override any of the public or * protected methods for which they wish to provide modified functionality. *

            * *

            Because ActionForms are JavaBeans, subclasses should also implement * Serializable, as required by the JavaBean specification. * Some containers require that an object meet all JavaBean requirements * in order to use the introspection API upon which ActionForms rely.

            * * @author Craig R. McClanahan * @author Ted Husted * @version $Revision: 1.16 $ $Date: 2003/05/01 16:16:49 $ */ ptActionForm.javaq~fxsq~ uq~ppppsq~ uq~q~wpppq~fxsq~ uq~ppppsq~#q~’xqqppppppq~$sq~ uq~qpppsq~ uq~ppppq~$q~$qÞsq~ uq~q~Åq~ˆpppq~$sq~ uq~ppppsq~ uq~q~‰sq~isq~ uq~ppppq~wsq~ uq~ppppptÞ/** * Return the MultipartRequestHandler for this form * The reasoning behind this is to give form bean developers * control over the lifecycle of their multipart requests * through the use of the finish() and/or rollback() methods * of MultipartRequestHandler. This method will return * null if this form's enctype is not * "multipart/request-data". * @see org.apache.struts.upload.MultipartRequestHandler */ ptgetMultipartRequestHandlerq~=xsq~ uq~pppppq~$q~yq~$q~’pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t/ return multipartRequestHandler; sq~ uq~ppppq~$q~$xsq~bsq~ uq~ppppsq~isq~ uq~qÅ8pppq~wsq~ uq~ppppppptsetMultipartRequestHandlerq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tG this.multipartRequestHandler = multipartRequestHandler; sq~ uq~ppppq~$q~$xsq~ uq~ppppppptmultipartRequestHandlerq~=xsq~ uq~pppppq~$q~yq~$q~’pq~$xqZ¯q\¯sq~isq~ uq~ppppq~wsq~ uq~ppppptÞ/** * Return the MultipartRequestHandler for this form * The reasoning behind this is to give form bean developers * control over the lifecycle of their multipart requests * through the use of the finish() and/or rollback() methods * of MultipartRequestHandler. This method will return * null if this form's enctype is not * "multipart/request-data". * @see org.apache.struts.upload.MultipartRequestHandler */ ptgetMultipartRequestHandlerq~¢xsq~ uq~pppppq~¥q~¦q~¥q~’pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t/ return multipartRequestHandler; sq~ uq~ppppq~¥q~¥xsq~bsq~ uq~ppppsq~isq~ uq~qÅ_pppq~wsq~ uq~ppppppptsetMultipartRequestHandlerq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tG this.multipartRequestHandler = multipartRequestHandler; sq~ uq~ppppq~¥q~¥xsq~ uq~ppppppptmultipartRequestHandlerq~¢xsq~ uq~pppppq~¥q~¦q~¥q~’pq~§xq[q\àq[}sq~isq~ uq~ppppq~wsq~ uq~ppppptÞ/** * Return the MultipartRequestHandler for this form * The reasoning behind this is to give form bean developers * control over the lifecycle of their multipart requests * through the use of the finish() and/or rollback() methods * of MultipartRequestHandler. This method will return * null if this form's enctype is not * "multipart/request-data". * @see org.apache.struts.upload.MultipartRequestHandler */ ptgetMultipartRequestHandlerq~rxsq~ uq~pppppq~–q~—q~–q~’pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t/ return multipartRequestHandler; sq~ uq~ppppq~–q~–xsq~bsq~ uq~ppppsq~isq~ uq~qņpppq~wsq~ uq~ppppppptsetMultipartRequestHandlerq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tG this.multipartRequestHandler = multipartRequestHandler; sq~ uq~ppppq~–q~–xsq~ uq~ppppppptmultipartRequestHandlerq~rxsq~ uq~pppppq~–q~—q~–q~’pq~˜xq‰Åq[äsq~isq~ uq~ppppq~wsq~ uq~ppppptÞ/** * Return the MultipartRequestHandler for this form * The reasoning behind this is to give form bean developers * control over the lifecycle of their multipart requests * through the use of the finish() and/or rollback() methods * of MultipartRequestHandler. This method will return * null if this form's enctype is not * "multipart/request-data". * @see org.apache.struts.upload.MultipartRequestHandler */ ptgetMultipartRequestHandlerq~{xsq~ uq~pppppq~~q~q~~q~’pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t/ return multipartRequestHandler; sq~ uq~ppppq~~q~~xsq~bsq~ uq~ppppsq~isq~ uq~qÅ­pppq~wsq~ uq~pppppt /** * Set the Handler provides to use in dealing with file uploads. * @param multipartRequestHandler The Handler to use for fileuploads. */ ptsetMultipartRequestHandlerq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tG this.multipartRequestHandler = multipartRequestHandler; sq~ uq~ppppq~~q~~xsq~ uq~ppppppptmultipartRequestHandlerq~{xsq~ uq~pppppq~~q~q~~q~’pq~€xq{qŸq\Ksq~isq~ uq~ppppq~wsq~ uq~ppppptÞ/** * Return the MultipartRequestHandler for this form * The reasoning behind this is to give form bean developers * control over the lifecycle of their multipart requests * through the use of the finish() and/or rollback() methods * of MultipartRequestHandler. This method will return * null if this form's enctype is not * "multipart/request-data". * @see org.apache.struts.upload.MultipartRequestHandler */ ptgetMultipartRequestHandlerq~cxsq~ uq~pppppq~fq~gq~fq~’pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft/ return multipartRequestHandler; sq~ uq~ppppq~fq~fxsq~bsq~ uq~ppppsq~isq~ uq~qÅÕpppq~wsq~ uq~pppppt /** * Set the Handler provides to use in dealing with file uploads. * @param multipartRequestHandler The Handler to use for fileuploads. */ ptsetMultipartRequestHandlerq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftG this.multipartRequestHandler = multipartRequestHandler; sq~ uq~ppppq~fq~fxsq~ uq~ppppppptmultipartRequestHandlerq~cxsq~ uq~pppppq~fq~gq~fq~’pq~hxq’q’:pq~Äxpq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xppppq~$sq~#q~$xsq~isq~ uq~ppppq~wsq~ uq~pppppt£// ------------------------------------------------------------- Properties /** * Return the controller servlet instance to which we are attached. */ pt getServletq~=xsq~ uq~pppppq~$q~yq~$q~ ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$t* return (this.servlet); sq~ uq~ppppq~$q~$xq\œqÅ(sq~isq~ uq~sq~bsq~ uq~ppppqÆsq~ uq~ppppppptservletq~=xsq~ uq~pppppq~$q~yq~$q~ ppq~$xpppq~wsq~ uq~pppppt/** * Set the controller servlet instance to which we are attached (if * servlet is non-null), or release any allocated resources * (if servlet is null). * * @param servlet The new controller servlet, if any */ pt setServletq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t+ this.servlet = servlet; sq~ uq~ppppq~$q~$xqÅ;q~ÄÒqaaqÊqaôsq~isq~ uq~ppppq~wsq~ uq~pppppt£// ------------------------------------------------------------- Properties /** * Return the controller servlet instance to which we are attached. */ pt getServletq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥t* return (this.servlet); sq~ uq~ppppq~¥q~¥xq\ÍqÅOsq~isq~ uq~sq~bsq~ uq~ppppqÆ*sq~ uq~ppppppptservletq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ ppq~§xpppq~wsq~ uq~pppppt/** * Set the controller servlet instance to which we are attached (if * servlet is non-null), or release any allocated resources * (if servlet is null). * * @param servlet The new controller servlet, if any */ pt setServletq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t+ this.servlet = servlet; sq~ uq~ppppq~¥q~¥xqÅbsq~isq~ uq~sq~bsq~ uq~ppppqÆBsq~ uq~ppppppptmappingq~¢xsq~ uq~pppppq~¥q~¦q~¥q~épq~§xsq~bsq~ uq~ppppqÆBsq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~°pq~§xppq~wsq~ uq~ppppptè// --------------------------------------------------------- Public Methods /** * Reset all bean properties to their default state. This method is * called before the properties are repopulated by the controller servlet. *

            * The default implementation attempts to forward to the HTTP * version of this method. * * @param mapping The mapping used to select this instance * @param request The servlet request we are processing */ ptresetq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t˜ try { reset(mapping, (HttpServletRequest) request); } catch (ClassCastException e) { ; } sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqÆbsq~ uq~ppppppptmappingq~¢xsq~ uq~pppppq~¥q~¦q~¥q~épq~§xsq~bsq~ uq~ppppqÆbsq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Œpq~§xppq~wsq~ uq~ppppptÉ/** * Reset all bean properties to their default state. This method is * called before the properties are repopulated by the controller servlet. *

            * The default implementation does nothing. Subclasses should override * this method to reset all bean properties to default values. * * @param mapping The mapping used to select this instance * @param request The servlet request we are processing */ ptresetq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tB ; // Default implementation does nothing sq~ uq~ppppq~¥q~¥xq+qKsq~isq~ uq~ppppq~wsq~ uq~pppppt£// ------------------------------------------------------------- Properties /** * Return the controller servlet instance to which we are attached. */ pt getServletq~rxsq~ uq~pppppq~–q~—q~–q~ ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–t* return (this.servlet); sq~ uq~ppppq~–q~–xq\þqÅvsq~isq~ uq~sq~bsq~ uq~ppppqÆ’sq~ uq~ppppppptservletq~rxsq~ uq~pppppq~–q~—q~–q~ ppq~˜xpppq~wsq~ uq~pppppt/** * Set the controller servlet instance to which we are attached (if * servlet is non-null), or release any allocated resources * (if servlet is null). * * @param servlet The new controller servlet, if any */ pt setServletq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t+ this.servlet = servlet; sq~ uq~ppppq~–q~–xqʼnsq~isq~ uq~sq~bsq~ uq~ppppqƪsq~ uq~ppppppptmappingq~rxsq~ uq~pppppq~–q~—q~–q~épq~˜xsq~bsq~ uq~ppppqƪsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~°pq~˜xppq~wsq~ uq~ppppptè// --------------------------------------------------------- Public Methods /** * Reset all bean properties to their default state. This method is * called before the properties are repopulated by the controller servlet. *

            * The default implementation attempts to forward to the HTTP * version of this method. * * @param mapping The mapping used to select this instance * @param request The servlet request we are processing */ ptresetq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t˜ try { reset(mapping, (HttpServletRequest) request); } catch (ClassCastException e) { ; } sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqÆÊsq~ uq~ppppppptmappingq~rxsq~ uq~pppppq~–q~—q~–q~épq~˜xsq~bsq~ uq~ppppqÆÊsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xppq~wsq~ uq~ppppptÉ/** * Reset all bean properties to their default state. This method is * called before the properties are repopulated by the controller servlet. *

            * The default implementation does nothing. Subclasses should override * this method to reset all bean properties to default values. * * @param mapping The mapping used to select this instance * @param request The servlet request we are processing */ ptresetq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tB ; // Default implementation does nothing sq~ uq~ppppq~–q~–xqŒq¬sq~isq~ uq~ppppq~wsq~ uq~pppppt£// ------------------------------------------------------------- Properties /** * Return the controller servlet instance to which we are attached. */ pt getServletq~{xsq~ uq~pppppq~~q~q~~q~ ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t* return (this.servlet); sq~ uq~ppppq~~q~~xq]qÅsq~isq~ uq~sq~bsq~ uq~ppppqÆúsq~ uq~ppppppptservletq~{xsq~ uq~pppppq~~q~q~~q~ ppq~€xpppq~wsq~ uq~pppppt/** * Set the controller servlet instance to which we are attached (if * servlet is non-null), or release any allocated resources * (if servlet is null). * * @param servlet The new controller servlet, if any */ pt setServletq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t+ this.servlet = servlet; sq~ uq~ppppq~~q~~xqŰsq~isq~ uq~sq~bsq~ uq~ppppqÇsq~ uq~ppppppptmappingq~{xsq~ uq~pppppq~~q~q~~q~épq~€xsq~bsq~ uq~ppppqÇsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~°pq~€xppq~wsq~ uq~ppppptè// --------------------------------------------------------- Public Methods /** * Reset all bean properties to their default state. This method is * called before the properties are repopulated by the controller servlet. *

            * The default implementation attempts to forward to the HTTP * version of this method. * * @param mapping The mapping used to select this instance * @param request The servlet request we are processing */ ptresetq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t˜ try { reset(mapping, (HttpServletRequest) request); } catch (ClassCastException e) { ; } sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqÇ2sq~ uq~ppppppptmappingq~{xsq~ uq~pppppq~~q~q~~q~épq~€xsq~bsq~ uq~ppppqÇ2sq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xppq~wsq~ uq~pppppt"/** * Reset all bean properties to their default state. This method is * called before the properties are repopulated by the controller servlet. *

            * The default implementation does nothing. Subclasses should override * this method to reset all bean properties to default values. *

            *

            * This method is not the appropriate place to initialize form values * for an "update" type page (this should be done in a setup Action). You mainly * need to worry about setting checkbox values to false; most of the time you * can leave this method unimplemented. *

            * * @param mapping The mapping used to select this instance * @param request The servlet request we are processing */ ptresetq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tB ; // Default implementation does nothing sq~ uq~ppppq~~q~~xq-qMsq~isq~ uq~ppppq~wsq~ uq~pppppt£// ------------------------------------------------------------- Properties /** * Return the controller servlet instance to which we are attached. */ pt getServletq~cxsq~ uq~pppppq~fq~gq~fq~ ppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft* return (this.servlet); sq~ uq~ppppq~fq~fxq]qÅÅsq~isq~ uq~sq~bsq~ uq~ppppqÇbsq~ uq~ppppppptservletq~cxsq~ uq~pppppq~fq~gq~fq~ ppq~hxpppq~wsq~ uq~pppppt/** * Set the controller servlet instance to which we are attached (if * servlet is non-null), or release any allocated resources * (if servlet is null). * * @param servlet The new controller servlet, if any */ pt setServletq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft+ this.servlet = servlet; sq~ uq~ppppq~fq~fxqÅØsq~isq~ uq~sq~bsq~ uq~ppppqÇzsq~ uq~ppppppptmappingq~cxsq~ uq~pppppq~fq~gq~fq~épq~hxsq~bsq~ uq~ppppqÇzsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~°pq~hxppq~wsq~ uq~ppppptè// --------------------------------------------------------- Public Methods /** * Reset all bean properties to their default state. This method is * called before the properties are repopulated by the controller servlet. *

            * The default implementation attempts to forward to the HTTP * version of this method. * * @param mapping The mapping used to select this instance * @param request The servlet request we are processing */ ptresetq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft˜ try { reset(mapping, (HttpServletRequest) request); } catch (ClassCastException e) { ; } sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqÇšsq~ uq~ppppppptmappingq~cxsq~ uq~pppppq~fq~gq~fq~épq~hxsq~bsq~ uq~ppppqÇšsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxppq~wsq~ uq~pppppt"/** * Reset all bean properties to their default state. This method is * called before the properties are repopulated by the controller servlet. *

            * The default implementation does nothing. Subclasses should override * this method to reset all bean properties to default values. *

            *

            * This method is not the appropriate place to initialize form values * for an "update" type page (this should be done in a setup Action). You mainly * need to worry about setting checkbox values to false; most of the time you * can leave this method unimplemented. *

            * * @param mapping The mapping used to select this instance * @param request The servlet request we are processing */ ptresetq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftB ; // Default implementation does nothing sq~ uq~ppppq~fq~fxq®qÎpppq~Bsq~ uq~pppppppt ActionFormq~=xsq~ uq~sq~Csq~ uq~ppppq~csq~ uq~ppppsq~#q~wxq~qqjsq~Csq~ uq~ppppq~çsq~ uq~ppppsq~#q~wxq$¹qbŒsq~Csq~ uq~ppppq~ísq~ uq~ppppsq~#q~wxq€ëuq'4q~C²q~&Sq~?‚q~B5q~CdqpÓqfÉppppsq~#sq~ uq~qYPqcÞppsq~ uq~ppppq~$q~$qÅsq~ uq~q~Ęqa‘pppq~$sq~ uq~ppppsq~ …uq~‰sq~bsq~ uq~ppppsq~isq~ uq~sq~bsq~ uq~ppppqÇßsq~ uq~ppppppptmappingq~=xsq~ uq~pppppq~$q~yq~$q~épq~$xqÇÜsq~bsq~ uq~ppppqÇßsq~ uq~ppppppptrequestq~=xsq~ uq~pppppq~$q~yq~$q~°pq~$xsq~bsq~ uq~ppppqÇßsq~ uq~ppppppptresponseq~=xsq~ uq~pppppq~$q~yq~$q~¶pq~$xq~Esq~ uq~ppppptº// --------------------------------------------------------- Public Methods /** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it), * with provision for handling exceptions thrown by the business logic. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The non-HTTP request we are processing * @param response The non-HTTP response we are creating * * @exception Exception if the application business logic throws * an exception */ ptexecuteq~=xsq~ uq~pppppq~$q~yq~$q~ýpq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tŠ // Call the deprecated method for backwards compatibility return (perform(mapping, form, request, response)); sq~ uq~q~‚pppq~$q~$xsq~ uq~ppppppptformq~=xsq~ uq~pppppq~$q~yq~$q~wpq~$xqÁsq~bsq~ uq~ppppsq~isq~ uq~sq~bsq~ uq~ppppqÈsq~ uq~ppppppptmappingq~=xsq~ uq~pppppq~$q~yq~$q~épq~$xqÈ sq~bsq~ uq~ppppqÈsq~ uq~ppppppptrequestq~=xsq~ uq~pppppq~$q~yq~$q~°pq~$xsq~bsq~ uq~ppppqÈsq~ uq~ppppppptresponseq~=xsq~ uq~pppppq~$q~yq~$q~¶pq~$xq~Esq~ uq~ppppptÊ/** * Process the specified non-HTTP request, and create the corresponding * non-HTTP response (or forward to another web component that will create * it). Return an ActionForward instance describing where * and how control should be forwarded, or null if the * response has already been completed. *

            * The default implementation attempts to forward to the HTTP version of * this method. * * @param mapping The ActionMapping used to select this instance * @param actionForm The optional ActionForm bean for this request (if any) * @param request The non-HTTP request we are processing * @param response The non-HTTP response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs * * @deprecated Use the execute() method instead */ ptperformq~=xsq~ uq~pppppq~$q~yq~$q~ýpq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t try { return (perform(mapping, form, (HttpServletRequest) request, (HttpServletResponse) response)); } catch (ClassCastException e) { return (null); } sq~ uq~q~¦pppq~$q~$xsq~ uq~ppppppptformq~=xsq~ uq~pppppq~$q~yq~$q~wpq~$xq~<q]€q´ÚqµEqµq¶½q·5q~;²q~;êqfqéq]qq: q:“qƒlsq~bsq~ uq~ppppsq~isq~ uq~sq~bsq~ uq~ppppqÈ?sq~ uq~ppppppptmappingq~¢xsq~ uq~pppppq~¥q~¦q~¥q~épq~§xqÈActionForward instance describing where * and how control should be forwarded, or null if the * response has already been completed. *

            * The default implementation attempts to forward to the HTTP version of * this method. * * @param mapping The ActionMapping used to select this instance * @param actionForm The optional ActionForm bean for this request (if any) * @param request The non-HTTP request we are processing * @param response The non-HTTP response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs * * @deprecated Use the execute() method instead */ ptperformq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ýpq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t try { return (perform(mapping, form, (HttpServletRequest) request, (HttpServletResponse) response)); } catch (ClassCastException e) { return (null); } sq~ uq~q~¦pppq~¥q~¥xsq~ uq~ppppppptformq~¢xsq~ uq~pppppq~¥q~¦q~¥q~wpq~§xsq~bsq~ uq~ppppsq~isq~ uq~sq~bsq~ uq~ppppqÈÏsq~ uq~ppppppptmappingq~¢xsq~ uq~pppppq~¥q~¦q~¥q~épq~§xqÈÌsq~bsq~ uq~ppppqÈÏsq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Œpq~§xsq~bsq~ uq~ppppqÈÏsq~ uq~ppppppptresponseq~¢xsq~ uq~pppppq~¥q~¦q~¥q~’pq~§xq~Esq~ uq~ppppptJ/** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it). * Return an ActionForward instance describing where and how * control should be forwarded, or null if the response has * already been completed. * * @param mapping The ActionMapping used to select this instance * @param actionForm The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs * * @deprecated Use the execute() method instead */ ptperformq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ýpq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tT return (null); // Override this method to provide functionality sq~ uq~q~¦pppq~¥q~¥xsq~ uq~ppppppptformq~¢xsq~ uq~pppppq~¥q~¦q~¥q~wpq~§xq]øq¸q¸}q¸Õq¹õqºmq?üqîq–qqqOq:°qDÓq'­q'Ýq~‘q~?Çq~?ÿq~Byq…äq»ºq¼%q¼}q½q¾q^psq~bsq~ uq~ppppsq~isq~ uq~sq~bsq~ uq~ppppqÈÿsq~ uq~ppppppptmappingq~rxsq~ uq~pppppq~–q~—q~–q~épq~˜xqÈüsq~bsq~ uq~ppppqÈÿsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~°pq~˜xsq~bsq~ uq~ppppqÈÿsq~ uq~ppppppptresponseq~rxsq~ uq~pppppq~–q~—q~–q~¶pq~˜xq~Esq~ uq~ppppptŒ// --------------------------------------------------------- Public Methods /** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it), * with provision for handling exceptions thrown by the business logic. * Return an {@link ActionForward} instance describing where and how * control should be forwarded, or null if the response * has already been completed. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The non-HTTP request we are processing * @param response The non-HTTP response we are creating * * @exception Exception if the application business logic throws * an exception * @since Struts 1.1 */ ptexecuteq~rxsq~ uq~pppppq~–q~—q~–q~ýpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tŠ // Call the deprecated method for backwards compatibility return (perform(mapping, form, request, response)); sq~ uq~q~‚pppq~–q~–xsq~ uq~ppppppptformq~rxsq~ uq~pppppq~–q~—q~–q~wpq~˜xsq~bsq~ uq~ppppsq~isq~ uq~sq~bsq~ uq~ppppqÉ/sq~ uq~ppppppptmappingq~rxsq~ uq~pppppq~–q~—q~–q~épq~˜xqÉ,sq~bsq~ uq~ppppqÉ/sq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xsq~bsq~ uq~ppppqÉ/sq~ uq~ppppppptresponseq~rxsq~ uq~pppppq~–q~—q~–q~’pq~˜xq~Esq~ uq~pppppt7/** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it), * with provision for handling exceptions thrown by the business logic. * Return an {@link ActionForward} instance describing where and how * control should be forwarded, or null if the response * has already been completed. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception Exception if the application business logic throws * an exception * @since Struts 1.1 */ ptexecuteq~rxsq~ uq~pppppq~–q~—q~–q~ýpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tŠ // Call the deprecated method for backwards compatibility return (perform(mapping, form, request, response)); sq~ uq~q~‚pppq~–q~–xsq~ uq~ppppppptformq~rxsq~ uq~pppppq~–q~—q~–q~wpq~˜xsq~bsq~ uq~ppppsq~isq~ uq~sq~bsq~ uq~ppppqÉ_sq~ uq~ppppppptmappingq~rxsq~ uq~pppppq~–q~—q~–q~épq~˜xqÉ\sq~bsq~ uq~ppppqÉ_sq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~°pq~˜xsq~bsq~ uq~ppppqÉ_sq~ uq~ppppppptresponseq~rxsq~ uq~pppppq~–q~—q~–q~¶pq~˜xq~Esq~ uq~ppppptÄ/** * Process the specified non-HTTP request, and create the corresponding * non-HTTP response (or forward to another web component that will create * it). Return an ActionForward instance describing where * and how control should be forwarded, or null if the * response has already been completed. *

            * The default implementation attempts to forward to the HTTP version of * this method. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The non-HTTP request we are processing * @param response The non-HTTP response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs * * @deprecated Use the execute() method instead */ ptperformq~rxsq~ uq~pppppq~–q~—q~–q~ýpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t try { return (perform(mapping, form, (HttpServletRequest) request, (HttpServletResponse) response)); } catch (ClassCastException e) { return (null); } sq~ uq~q~kq~¦ppq~–q~–xsq~ uq~ppppppptformq~rxsq~ uq~pppppq~–q~—q~–q~wpq~˜xsq~bsq~ uq~ppppsq~isq~ uq~sq~bsq~ uq~ppppqÉsq~ uq~ppppppptmappingq~rxsq~ uq~pppppq~–q~—q~–q~épq~˜xqÉŒsq~bsq~ uq~ppppqÉsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xsq~bsq~ uq~ppppqÉsq~ uq~ppppppptresponseq~rxsq~ uq~pppppq~–q~—q~–q~’pq~˜xq~Esq~ uq~ppppptD/** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it). * Return an ActionForward instance describing where and how * control should be forwarded, or null if the response has * already been completed. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs * * @deprecated Use the execute() method instead */ ptperformq~rxsq~ uq~pppppq~–q~—q~–q~ýpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tT return (null); // Override this method to provide functionality sq~ uq~q~kq~¦ppq~–q~–xsq~ uq~ppppppptformq~rxsq~ uq~pppppq~–q~—q~–q~wpq~˜xq#~q@Lq@|qIq»qq$q:ÀqGq(Õq)q~>Áq~@/q~@gq~@Ÿq~B©q~<–q~=¹qˆ\q^èq¿ÀqÀ+qÀƒqÁ£qÂsq~bsq~ uq~ppppsq~isq~ uq~sq~bsq~ uq~ppppqÉ¿sq~ uq~ppppppptmappingq~{xsq~ uq~pppppq~~q~q~~q~épq~€xqɼsq~bsq~ uq~ppppqÉ¿sq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~°pq~€xsq~bsq~ uq~ppppqÉ¿sq~ uq~ppppppptresponseq~{xsq~ uq~pppppq~~q~q~~q~¶pq~€xq~Esq~ uq~pppppt // --------------------------------------------------------- Public Methods /** * Process the specified non-HTTP request, and create the * corresponding non-HTTP response (or forward to another web * component that will create it), with provision for handling * exceptions thrown by the business logic. * Return an {@link ActionForward} instance describing where and how * control should be forwarded, or null if the response has * already been completed. *

            * The default implementation attempts to forward to the HTTP * version of this method. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The non-HTTP request we are processing * @param response The non-HTTP response we are creating * * @exception Exception if the application business logic throws * an exception * @since Struts 1.1 */ ptexecuteq~{xsq~ uq~pppppq~~q~q~~q~ýpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tŠ // Call the deprecated method for backwards compatibility return (perform(mapping, form, request, response)); sq~ uq~q~‚pppq~~q~~xsq~ uq~ppppppptformq~{xsq~ uq~pppppq~~q~q~~q~wpq~€xsq~bsq~ uq~ppppsq~isq~ uq~sq~bsq~ uq~ppppqÉïsq~ uq~ppppppptmappingq~{xsq~ uq~pppppq~~q~q~~q~épq~€xqÉìsq~bsq~ uq~ppppqÉïsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xsq~bsq~ uq~ppppqÉïsq~ uq~ppppppptresponseq~{xsq~ uq~pppppq~~q~q~~q~’pq~€xq~Esq~ uq~pppppt7/** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it), * with provision for handling exceptions thrown by the business logic. * Return an {@link ActionForward} instance describing where and how * control should be forwarded, or null if the response * has already been completed. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception Exception if the application business logic throws * an exception * @since Struts 1.1 */ ptexecuteq~{xsq~ uq~pppppq~~q~q~~q~ýpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tŠ // Call the deprecated method for backwards compatibility return (perform(mapping, form, request, response)); sq~ uq~q~‚pppq~~q~~xsq~ uq~ppppppptformq~{xsq~ uq~pppppq~~q~q~~q~wpq~€xsq~bsq~ uq~ppppsq~isq~ uq~sq~bsq~ uq~ppppqÊsq~ uq~ppppppptmappingq~{xsq~ uq~pppppq~~q~q~~q~épq~€xqÊsq~bsq~ uq~ppppqÊsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~°pq~€xsq~bsq~ uq~ppppqÊsq~ uq~ppppppptresponseq~{xsq~ uq~pppppq~~q~q~~q~¶pq~€xq~Esq~ uq~ppppptÄ/** * Process the specified non-HTTP request, and create the corresponding * non-HTTP response (or forward to another web component that will create * it). Return an ActionForward instance describing where * and how control should be forwarded, or null if the * response has already been completed. *

            * The default implementation attempts to forward to the HTTP version of * this method. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The non-HTTP request we are processing * @param response The non-HTTP response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs * * @deprecated Use the execute() method instead */ ptperformq~{xsq~ uq~pppppq~~q~q~~q~ýpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t try { return (perform(mapping, form, (HttpServletRequest) request, (HttpServletResponse) response)); } catch (ClassCastException e) { return (null); } sq~ uq~q~kq~¦ppq~~q~~xsq~ uq~ppppppptformq~{xsq~ uq~pppppq~~q~q~~q~wpq~€xsq~bsq~ uq~ppppsq~isq~ uq~sq~bsq~ uq~ppppqÊOsq~ uq~ppppppptmappingq~{xsq~ uq~pppppq~~q~q~~q~épq~€xqÊLsq~bsq~ uq~ppppqÊOsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xsq~bsq~ uq~ppppqÊOsq~ uq~ppppppptresponseq~{xsq~ uq~pppppq~~q~q~~q~’pq~€xq~Esq~ uq~ppppptD/** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it). * Return an ActionForward instance describing where and how * control should be forwarded, or null if the response has * already been completed. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs * * @deprecated Use the execute() method instead */ ptperformq~{xsq~ uq~pppppq~~q~q~~q~ýpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tT return (null); // Override this method to provide functionality sq~ uq~q~kq~¦ppq~~q~~xsq~ uq~ppppppptformq~{xsq~ uq~pppppq~~q~q~~q~wpq~€xqyq¯qûq#®q@Ìq@üq$>qIWq:Ðq)ýq*-q~=éq~<åq~>ñq~@Ïq~Aq~A?q~BÙq‹Øq_`qøqÄ#qÄ{qÅ›qÆsq~bsq~ uq~ppppsq~isq~ uq~sq~bsq~ uq~ppppqÊsq~ uq~ppppppptmappingq~cxsq~ uq~pppppq~fq~gq~fq~épq~hxqÊ|sq~bsq~ uq~ppppqÊsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~°pq~hxsq~bsq~ uq~ppppqÊsq~ uq~ppppppptresponseq~cxsq~ uq~pppppq~fq~gq~fq~¶pq~hxq~Esq~ uq~pppppt // --------------------------------------------------------- Public Methods /** * Process the specified non-HTTP request, and create the * corresponding non-HTTP response (or forward to another web * component that will create it), with provision for handling * exceptions thrown by the business logic. * Return an {@link ActionForward} instance describing where and how * control should be forwarded, or null if the response has * already been completed. *

            * The default implementation attempts to forward to the HTTP * version of this method. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The non-HTTP request we are processing * @param response The non-HTTP response we are creating * * @exception Exception if the application business logic throws * an exception * @since Struts 1.1 */ ptexecuteq~cxsq~ uq~pppppq~fq~gq~fq~ýpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftŠ // Call the deprecated method for backwards compatibility return (perform(mapping, form, request, response)); sq~ uq~q~‚pppq~fq~fxsq~ uq~ppppppptformq~cxsq~ uq~pppppq~fq~gq~fq~wpq~hxsq~bsq~ uq~ppppsq~isq~ uq~sq~bsq~ uq~ppppqʯsq~ uq~ppppppptmappingq~cxsq~ uq~pppppq~fq~gq~fq~épq~hxqʬsq~bsq~ uq~ppppqʯsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppqʯsq~ uq~ppppppptresponseq~cxsq~ uq~pppppq~fq~gq~fq~’pq~hxq~Esq~ uq~pppppt7/** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it), * with provision for handling exceptions thrown by the business logic. * Return an {@link ActionForward} instance describing where and how * control should be forwarded, or null if the response * has already been completed. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception Exception if the application business logic throws * an exception * @since Struts 1.1 */ ptexecuteq~cxsq~ uq~pppppq~fq~gq~fq~ýpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftŠ // Call the deprecated method for backwards compatibility return (perform(mapping, form, request, response)); sq~ uq~q~‚pppq~fq~fxsq~ uq~ppppppptformq~cxsq~ uq~pppppq~fq~gq~fq~wpq~hxsq~bsq~ uq~ppppsq~isq~ uq~sq~bsq~ uq~ppppqÊßsq~ uq~ppppppptmappingq~cxsq~ uq~pppppq~fq~gq~fq~épq~hxqÊÜsq~bsq~ uq~ppppqÊßsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~°pq~hxsq~bsq~ uq~ppppqÊßsq~ uq~ppppppptresponseq~cxsq~ uq~pppppq~fq~gq~fq~¶pq~hxq~Esq~ uq~ppppptÄ/** * Process the specified non-HTTP request, and create the corresponding * non-HTTP response (or forward to another web component that will create * it). Return an ActionForward instance describing where * and how control should be forwarded, or null if the * response has already been completed. *

            * The default implementation attempts to forward to the HTTP version of * this method. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The non-HTTP request we are processing * @param response The non-HTTP response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs * * @deprecated Use the execute() method instead */ ptperformq~cxsq~ uq~pppppq~fq~gq~fq~ýpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft try { return (perform(mapping, form, (HttpServletRequest) request, (HttpServletResponse) response)); } catch (ClassCastException e) { return (null); } sq~ uq~q~kq~¦ppq~fq~fxsq~ uq~ppppppptformq~cxsq~ uq~pppppq~fq~gq~fq~wpq~hxsq~bsq~ uq~ppppsq~isq~ uq~sq~bsq~ uq~ppppqËsq~ uq~ppppppptmappingq~cxsq~ uq~pppppq~fq~gq~fq~épq~hxqË sq~bsq~ uq~ppppqËsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppqËsq~ uq~ppppppptresponseq~cxsq~ uq~pppppq~fq~gq~fq~’pq~hxq~Esq~ uq~ppppptD/** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it). * Return an ActionForward instance describing where and how * control should be forwarded, or null if the response has * already been completed. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs * * @deprecated Use the execute() method instead */ ptperformq~cxsq~ uq~pppppq~fq~gq~fq~ýpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftT return (null); // Override this method to provide functionality sq~ uq~q~kq~¦ppq~fq~fxsq~ uq~ppppppptformq~cxsq~ uq~pppppq~fq~gq~fq~wpq~hxq©qßq;q#ÞqALqA|q$nqK™q:àq+%q+Uq~>q~=4q~?!q~Aoq~A§q~Aßq~C qsppppq~Äxq~$ppxxsq~Csq~ uq~ppppq~Vsq~ uq~ppppsq~#q~ýxsq~Csq~ uq~ppppq~Vsq~ uq~ppppsq~#q~éxsq~Csq~ uq~ppppq~Vsq~ uq~ppppsq~#q~-xq”’q•–pppqFsq~ uq~ppppptÍ/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/actions/SwitchAction.java,v 1.9 2002/11/28 07:12:52 rleland Exp $ * $Revision: 1.9 $ * $Date: 2002/11/28 07:12:52 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** *

            A standard Action that switches to a new module * and then forwards control to a URI (specified in a number of possible ways) * within the new module.

            * *

            Valid request parameters for this Action are:

            *
              *
            • page - Module-relative URI (beginning with "/") * to which control should be forwarded after switching.
            • *
            • prefix - The module prefix (beginning with "/") * of the module to which control should be switched. Use a * zero-length string for the default module. The * appropriate ModuleConfig object will be stored as a * request attribute, so any subsequent logic will assume the new * module.
            • *
            * * @author Craig R. McClanahan * @version $Revision: 1.9 $ $Date: 2002/11/28 07:12:52 $ * @since Struts 1.1 */ ptSwitchAction.javaq~fxsq~ uq~ppppsq~ uq~qópppq~fxsq~ uq~ppppsq~#q~?xsq~Csq~ uq~ppppq~çsq~ uq~ppppsq~#q~?xq€*¬q€€«sq~Csq~ uq~ppppq~ûsq~ uq~ppppsq~#q~?xq~Àfq”àq|q~ËÞq~ÈÒqNÐqLiq~&Gq–gq°\sq~Csq~ uq~ppppq~Hsq~ uq~ppppsq~#q~?xq ÐqpÁqÕq~„q~KMq~…íqeúq€hÇqf2q¸qfyqf±ppppq~$sq~ uq~sq~)sq~ uq~ppppsq~/sq~ uq~sq~)sq~ uq~ppppqËpsq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bddqpxq~9qËmsq~)sq~ uq~ppppqËpsq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bddqqpxsq~zsq~ uq~ppppq~q~Èùq~Œq~Ïq~ºXq~<|q˜äqœ%q»6q~OKqr/q€*q~xfsq~(sq~ uq~ppppq~%sq~ uq~pppppt^/** * Commons Logging instance. */ /** * Commons Logging instance. */ ptlogq~{xsq~ uq~pppppq~~q~q~~q~9pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~d1xpppt( LogFactory.getLog(BaseHandlerTag.class)q~~q~~q~~xq~8Eq~8`q‹ppq~Äxq~$ppxpq~$xsq~ uq~ppppsq~ uq~q~OKpppsq~#q~;xpppt* LogFactory.getLog(MessageResources.class)q~$q~$q~$xsq~(sq~ uq~ppppq~-sq~ uq~ppppptÇ/** * The configuration parameter used to initialize this MessageResources. */ /** * The configuration parameter used to initialize this MessageResources. */ /** * The configuration parameter used to initialize this MessageResources. */ /** * The configuration parameter used to initialize this MessageResources. */ /** * The configuration parameter used to initialize this MessageResources. */ ptconfigq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~-sq~ uq~pppppppt getConfigq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t% return (this.config); sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~-sq~ uq~pppppt1/** * The default Locale for our environment. */ /** * The default Locale for our environment. */ /** * The default Locale for our environment. */ /** * The default Locale for our environment. */ /** * The default Locale for our environment. */ pt defaultLocaleq~=xsq~ uq~pppppq~$q~yq~$q~5pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt Locale.getDefault()q~$q~$q~$xq~Kaq~Kosq~(sq~ uq~ppppq~-sq~ uq~pppppt²/** * The set of previously created MessageFormat objects, keyed by the * key computed in messageKey(). */ /** * The set of previously created MessageFormat objects, keyed by the * key computed in messageKey(). */ /** * The set of previously created MessageFormat objects, keyed by the * key computed in messageKey(). */ /** * The set of previously created MessageFormat objects, keyed by the * key computed in messageKey(). */ /** * The set of previously created MessageFormat objects, keyed by the * key computed in messageKey(). */ ptformatsq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt new HashMap()q~$q~$q~$xsq~(sq~ uq~ppppq~-sq~ uq~ppppptâ/** * Should we return null instead of an error message string * if an unknown Locale or key is requested? */ /** * Should we return null instead of an error message string * if an unknown Locale or key is requested? */ /** * Indicate is a null is returned instead of an error message string * when an unknown Locale or key is requested. */ /** * Indicate is a null is returned instead of an error message string * when an unknown Locale or key is requested. */ /** * Indicate is a null is returned instead of an error message string * when an unknown Locale or key is requested. */ pt returnNullq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt falseq~$q~$q~$xsq~isq~ uq~ppppq~-sq~ uq~pppppppt getReturnNullq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t) return (this.returnNull); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppqÌysq~ uq~pppppppt returnNullq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xpppq~-sq~ uq~pppppppt setReturnNullq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t- this.returnNull = returnNull; sq~ uq~ppppq~$q~$xq~Kq~K¡sq~isq~ uq~sq~bsq~ uq~ppppqÌsq~ uq~ppppppptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~-sq~ uq~ppppptÞ// --------------------------------------------------------- Public Methods /** * Returns a text message for the specified key, for the default Locale. * * @param key The message key to look up */ pt getMessageq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t5 return (getMessage((Locale) null, key)); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq̨sq~ uq~ppppppptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppq̨sq~ uq~ppppppptargsq~=xsq~ uq~pppppq~$q~yq~$q~«t[]q~xppq~-sq~ uq~ppppptø/** * Returns a text message after parametric replacement of the specified * parameter placeholders. * * @param key The message key to look up * @param args An array of replacement parameters for placeholders */ pt getMessageq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t; return (getMessage((Locale) null, key, args)); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppqÌÉsq~ uq~ppppppptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppqÌÉsq~ uq~ppppppptarg0q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xppq~-sq~ uq~pppppt÷/** * Returns a text message after parametric replacement of the specified * parameter placeholders. * * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message */ pt getMessageq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t; return (getMessage((Locale) null, key, arg0)); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppqÌésq~ uq~ppppppptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppqÌésq~ uq~ppppppptarg0q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xsq~bsq~ uq~ppppqÌésq~ uq~ppppppptarg1q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xpq~-sq~ uq~pppppt>/** * Returns a text message after parametric replacement of the specified * parameter placeholders. * * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message * @param arg1 The replacement for placeholder {1} in the message */ pt getMessageq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tA return (getMessage((Locale) null, key, arg0, arg1)); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppqÍsq~ uq~ppppppptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppqÍsq~ uq~ppppppptarg0q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xsq~bsq~ uq~ppppqÍsq~ uq~ppppppptarg1q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xsq~bsq~ uq~ppppqÍsq~ uq~ppppppptarg2q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xq~-sq~ uq~pppppt…/** * Returns a text message after parametric replacement of the specified * parameter placeholders. * * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message * @param arg1 The replacement for placeholder {1} in the message * @param arg2 The replacement for placeholder {2} in the message */ pt getMessageq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tG return (getMessage((Locale) null, key, arg0, arg1, arg2)); sq~ uq~ppppq~$q~$xsq~isq~ uq~ sq~bsq~ uq~ppppqÍAsq~ uq~ppppppptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppqÍAsq~ uq~ppppppptarg0q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xsq~bsq~ uq~ppppqÍAsq~ uq~ppppppptarg1q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xsq~bsq~ uq~ppppqÍAsq~ uq~ppppppptarg2q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xsq~bsq~ uq~ppppqÍAsq~ uq~ppppppptarg3q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xppppq~-sq~ uq~ppppptÌ/** * Returns a text message after parametric replacement of the specified * parameter placeholders. * * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message * @param arg1 The replacement for placeholder {1} in the message * @param arg2 The replacement for placeholder {2} in the message * @param arg3 The replacement for placeholder {3} in the message */ pt getMessageq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tM return (getMessage((Locale) null, key, arg0, arg1, arg2, arg3)); sq~ uq~ppppq~$q~$xq~N¶sq~isq~ uq~sq~bsq~ uq~ppppqÍysq~ uq~ppppppptlocaleq~=xsq~ uq~pppppq~$q~yq~$q~5pq~$xsq~bsq~ uq~ppppqÍysq~ uq~ppppppptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppqÍysq~ uq~ppppppptargsq~=xsq~ uq~pppppq~$q~yq~$q~«t[]q~xpq~-sq~ uq~ppppptÑ/** * Returns a text message after parametric replacement of the specified * parameter placeholders. A null string result will be returned by * this method if no resource bundle has been configured. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up * @param args An array of replacement parameters for placeholders */ pt getMessageq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$ty // Cache MessageFormat instances as they are accessed if (locale == null) locale = defaultLocale; MessageFormat format = null; String formatKey = messageKey(locale, key); synchronized (formats) { format = (MessageFormat) formats.get(formatKey); if (format == null) { String formatString = getMessage(locale, key); if (formatString == null) { if (returnNull) return (null); else return ("???" + formatKey + "???"); } format = new MessageFormat(escape(formatString)); formats.put(formatKey, format); } } return (format.format(args)); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppqÍ¢sq~ uq~ppppppptlocaleq~=xsq~ uq~pppppq~$q~yq~$q~5pq~$xsq~bsq~ uq~ppppqÍ¢sq~ uq~ppppppptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppqÍ¢sq~ uq~ppppppptarg0q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xpq~-sq~ uq~pppppt¬/** * Returns a text message after parametric replacement of the specified * parameter placeholders. A null string result will never be returned * by this method. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message */ pt getMessageq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tg Object args[] = new Object[1]; args[0] = arg0; return (getMessage(locale, key, args)); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppqÍÊsq~ uq~ppppppptlocaleq~=xsq~ uq~pppppq~$q~yq~$q~5pq~$xsq~bsq~ uq~ppppqÍÊsq~ uq~ppppppptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppqÍÊsq~ uq~ppppppptarg0q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xsq~bsq~ uq~ppppqÍÊsq~ uq~ppppppptarg1q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xq~-sq~ uq~ppppptó/** * Returns a text message after parametric replacement of the specified * parameter placeholders. A null string result will never be returned * by this method. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message * @param arg1 The replacement for placeholder {1} in the message */ pt getMessageq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$ty Object args[] = new Object[2]; args[0] = arg0; args[1] = arg1; return (getMessage(locale, key, args)); sq~ uq~ppppq~$q~$xsq~isq~ uq~ sq~bsq~ uq~ppppqÍúsq~ uq~ppppppptlocaleq~=xsq~ uq~pppppq~$q~yq~$q~5pq~$xsq~bsq~ uq~ppppqÍúsq~ uq~ppppppptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppqÍúsq~ uq~ppppppptarg0q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xsq~bsq~ uq~ppppqÍúsq~ uq~ppppppptarg1q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xsq~bsq~ uq~ppppqÍúsq~ uq~ppppppptarg2q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xppppq~-sq~ uq~pppppt:/** * Returns a text message after parametric replacement of the specified * parameter placeholders. A null string result will never be returned * by this method. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message * @param arg1 The replacement for placeholder {1} in the message * @param arg2 The replacement for placeholder {2} in the message */ pt getMessageq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t‹ Object args[] = new Object[3]; args[0] = arg0; args[1] = arg1; args[2] = arg2; return (getMessage(locale, key, args)); sq~ uq~ppppq~$q~$xsq~isq~ uq~ sq~bsq~ uq~ppppqÎ2sq~ uq~ppppppptlocaleq~=xsq~ uq~pppppq~$q~yq~$q~5pq~$xsq~bsq~ uq~ppppqÎ2sq~ uq~ppppppptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppqÎ2sq~ uq~ppppppptarg0q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xsq~bsq~ uq~ppppqÎ2sq~ uq~ppppppptarg1q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xsq~bsq~ uq~ppppqÎ2sq~ uq~ppppppptarg2q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xsq~bsq~ uq~ppppqÎ2sq~ uq~ppppppptarg3q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xpppq~-sq~ uq~pppppt/** * Returns a text message after parametric replacement of the specified * parameter placeholders. A null string result will never be returned * by this method. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message * @param arg1 The replacement for placeholder {1} in the message * @param arg2 The replacement for placeholder {2} in the message * @param arg3 The replacement for placeholder {3} in the message */ pt getMessageq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t Object args[] = new Object[4]; args[0] = arg0; args[1] = arg1; args[2] = arg2; args[3] = arg3; return (getMessage(locale, key, args)); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppqÎrsq~ uq~ppppppptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~-sq~ uq~pppppt¾/** * Return true if there is a defined message for the specified * key in the system default locale. * * @param key The message key to look up */ pt isPresentq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t2 return (isPresent(null, key)); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppqΊsq~ uq~ppppppptlocaleq~=xsq~ uq~pppppq~$q~yq~$q~5pq~$xsq~bsq~ uq~ppppqΊsq~ uq~ppppppptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xppq~-sq~ uq~pppppt)/** * Return true if there is a defined message for the specified * key in the specified Locale. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up */ pt isPresentq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t8 String message = getMessage(locale, key); if (message == null) return (false); else if (message.startsWith("???") && message.endsWith("???")) return (false); // FIXME - Only valid for default implementation else return (true); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppqΪsq~ uq~ppppppptstringq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~-sq~ uq~pppppt÷// ------------------------------------------------------ Protected Methods /** * Escape any single quote characters that are included in the specified * message string. * * @param string The string to be escaped */ ptescapeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$tŽ if ((string == null) || (string.indexOf('\'') < 0)) return (string); int n = string.length(); StringBuffer sb = new StringBuffer(n); for (int i = 0; i < n; i++) { char ch = string.charAt(i); if (ch == '\'') sb.append('\''); sb.append(ch); } return (sb.toString()); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppqÎÂsq~ uq~ppppppptlocaleq~=xsq~ uq~pppppq~$q~yq~$q~5pq~$xpppq~-sq~ uq~pppppt/** * Compute and return a key to be used in caching information by a Locale. * NOTE - The locale key for the default Locale in our * environment is a zero length String. * * @param locale The locale for which a key is desired */ pt localeKeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$tÖ if (locale == null) return (""); // else if (locale.equals(defaultLocale)) // return (""); else return (locale.toString()); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppqÎÚsq~ uq~ppppppptlocaleq~=xsq~ uq~pppppq~$q~yq~$q~5pq~$xsq~bsq~ uq~ppppqÎÚsq~ uq~ppppppptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xppq~-sq~ uq~pppppt/** * Compute and return a key to be used in caching information * by Locale and message key. * * @param locale The Locale for which this format key is calculated * @param key The message key for which this format key is calculated */ pt messageKeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$t; return (localeKey(locale) + "." + key); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppqÎúsq~ uq~pppppppt localeKeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppqÎúsq~ uq~ppppppptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xppq~-sq~ uq~pppppt/** * Compute and return a key to be used in caching information * by locale key and message key. * * @param localeKey The locale key for which this cache key is calculated * @param key The message key for which this cache key is calculated */ pt messageKeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$t3 return (localeKey + "." + key); sq~ uq~ppppq~$q~$xq~KÅsq~isq~ uq~sq~bsq~ uq~ppppqÏsq~ uq~ppppppptconfigq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~-sq~ uq~ppppptð/** * Create and return an instance of MessageResources for the * created by the default MessageResourcesFactory. * * @param config Configuration parameter for this message bundle. */ ptgetMessageResourcesq~=xsq~ uq~pppppq~$q~yq~$q~-pq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~Äxq~$t® if (defaultFactory == null) defaultFactory = MessageResourcesFactory.createFactory(); return defaultFactory.createResources(config); sq~ uq~ppppq~$sq~#xsq~isq~ uq~sq~bsq~ uq~ppppqÏ4sq~ uq~ppppppptmessageq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~-sq~ uq~pppppt/** * Log a message to the Writer that has been configured for our use. * * @param message The message to be logged */ ptlogq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t# log.debug(message); sq~ uq~ppppq~$q~$xqËosq~isq~ uq~ppppq~-sq~ uq~pppppppt getConfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t% return (this.config); sq~ uq~ppppq~¥q~¥xq~Küsq~isq~ uq~ppppq~-sq~ uq~pppppppt getReturnNullq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t) return (this.returnNull); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqÏjsq~ uq~pppppppt returnNullq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xpppq~-sq~ uq~pppppppt setReturnNullq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t- this.returnNull = returnNull; sq~ uq~ppppq~¥q~¥xq~Lq~L-sq~isq~ uq~sq~bsq~ uq~ppppqÏsq~ uq~ppppppptkeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~-sq~ uq~ppppptÞ// --------------------------------------------------------- Public Methods /** * Returns a text message for the specified key, for the default Locale. * * @param key The message key to look up */ pt getMessageq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t5 return (getMessage((Locale) null, key)); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqÏ™sq~ uq~ppppppptkeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppqÏ™sq~ uq~ppppppptargsq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«t[]q~!¼xppq~-sq~ uq~ppppptø/** * Returns a text message after parametric replacement of the specified * parameter placeholders. * * @param key The message key to look up * @param args An array of replacement parameters for placeholders */ pt getMessageq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t; return (getMessage((Locale) null, key, args)); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqϺsq~ uq~ppppppptkeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppqϺsq~ uq~ppppppptarg0q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xppq~-sq~ uq~pppppt÷/** * Returns a text message after parametric replacement of the specified * parameter placeholders. * * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message */ pt getMessageq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t; return (getMessage((Locale) null, key, arg0)); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqÏÚsq~ uq~ppppppptkeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppqÏÚsq~ uq~ppppppptarg0q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~bsq~ uq~ppppqÏÚsq~ uq~ppppppptarg1q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xpq~-sq~ uq~pppppt>/** * Returns a text message after parametric replacement of the specified * parameter placeholders. * * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message * @param arg1 The replacement for placeholder {1} in the message */ pt getMessageq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tA return (getMessage((Locale) null, key, arg0, arg1)); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqÐsq~ uq~ppppppptkeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppqÐsq~ uq~ppppppptarg0q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~bsq~ uq~ppppqÐsq~ uq~ppppppptarg1q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~bsq~ uq~ppppqÐsq~ uq~ppppppptarg2q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xq~-sq~ uq~pppppt…/** * Returns a text message after parametric replacement of the specified * parameter placeholders. * * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message * @param arg1 The replacement for placeholder {1} in the message * @param arg2 The replacement for placeholder {2} in the message */ pt getMessageq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tG return (getMessage((Locale) null, key, arg0, arg1, arg2)); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ sq~bsq~ uq~ppppqÐ2sq~ uq~ppppppptkeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppqÐ2sq~ uq~ppppppptarg0q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~bsq~ uq~ppppqÐ2sq~ uq~ppppppptarg1q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~bsq~ uq~ppppqÐ2sq~ uq~ppppppptarg2q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~bsq~ uq~ppppqÐ2sq~ uq~ppppppptarg3q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xppppq~-sq~ uq~ppppptÌ/** * Returns a text message after parametric replacement of the specified * parameter placeholders. * * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message * @param arg1 The replacement for placeholder {1} in the message * @param arg2 The replacement for placeholder {2} in the message * @param arg3 The replacement for placeholder {3} in the message */ pt getMessageq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tM return (getMessage((Locale) null, key, arg0, arg1, arg2, arg3)); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqÐjsq~ uq~ppppppptlocaleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~5pq~§xsq~bsq~ uq~ppppqÐjsq~ uq~ppppppptkeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xppq~-sq~ uq~ppppptN/** * Returns a text message for the specified key, for the default Locale. * A null string result will be returned by this method if no relevant * message resource is found for this key or Locale, if the * returnNull property is set. Otherwise, an appropriate * error message will be returned. *

            * This method must be implemented by a concrete subclass. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up */ pt getMessageq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xsq~#psq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqЊsq~ uq~ppppppptlocaleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~5pq~§xsq~bsq~ uq~ppppqЊsq~ uq~ppppppptkeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppqЊsq~ uq~ppppppptargsq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«t[]q~!¼xpq~-sq~ uq~ppppptÑ/** * Returns a text message after parametric replacement of the specified * parameter placeholders. A null string result will be returned by * this method if no resource bundle has been configured. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up * @param args An array of replacement parameters for placeholders */ pt getMessageq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥ty // Cache MessageFormat instances as they are accessed if (locale == null) locale = defaultLocale; MessageFormat format = null; String formatKey = messageKey(locale, key); synchronized (formats) { format = (MessageFormat) formats.get(formatKey); if (format == null) { String formatString = getMessage(locale, key); if (formatString == null) { if (returnNull) return (null); else return ("???" + formatKey + "???"); } format = new MessageFormat(escape(formatString)); formats.put(formatKey, format); } } return (format.format(args)); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqгsq~ uq~ppppppptlocaleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~5pq~§xsq~bsq~ uq~ppppqгsq~ uq~ppppppptkeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppqгsq~ uq~ppppppptarg0q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xpq~-sq~ uq~pppppt¬/** * Returns a text message after parametric replacement of the specified * parameter placeholders. A null string result will never be returned * by this method. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message */ pt getMessageq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tg Object args[] = new Object[1]; args[0] = arg0; return (getMessage(locale, key, args)); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqÐÛsq~ uq~ppppppptlocaleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~5pq~§xsq~bsq~ uq~ppppqÐÛsq~ uq~ppppppptkeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppqÐÛsq~ uq~ppppppptarg0q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~bsq~ uq~ppppqÐÛsq~ uq~ppppppptarg1q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xq~-sq~ uq~ppppptó/** * Returns a text message after parametric replacement of the specified * parameter placeholders. A null string result will never be returned * by this method. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message * @param arg1 The replacement for placeholder {1} in the message */ pt getMessageq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥ty Object args[] = new Object[2]; args[0] = arg0; args[1] = arg1; return (getMessage(locale, key, args)); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ sq~bsq~ uq~ppppqÑ sq~ uq~ppppppptlocaleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~5pq~§xsq~bsq~ uq~ppppqÑ sq~ uq~ppppppptkeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppqÑ sq~ uq~ppppppptarg0q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~bsq~ uq~ppppqÑ sq~ uq~ppppppptarg1q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~bsq~ uq~ppppqÑ sq~ uq~ppppppptarg2q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xppppq~-sq~ uq~pppppt:/** * Returns a text message after parametric replacement of the specified * parameter placeholders. A null string result will never be returned * by this method. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message * @param arg1 The replacement for placeholder {1} in the message * @param arg2 The replacement for placeholder {2} in the message */ pt getMessageq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t‹ Object args[] = new Object[3]; args[0] = arg0; args[1] = arg1; args[2] = arg2; return (getMessage(locale, key, args)); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ sq~bsq~ uq~ppppqÑCsq~ uq~ppppppptlocaleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~5pq~§xsq~bsq~ uq~ppppqÑCsq~ uq~ppppppptkeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppqÑCsq~ uq~ppppppptarg0q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~bsq~ uq~ppppqÑCsq~ uq~ppppppptarg1q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~bsq~ uq~ppppqÑCsq~ uq~ppppppptarg2q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~bsq~ uq~ppppqÑCsq~ uq~ppppppptarg3q~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xpppq~-sq~ uq~pppppt/** * Returns a text message after parametric replacement of the specified * parameter placeholders. A null string result will never be returned * by this method. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message * @param arg1 The replacement for placeholder {1} in the message * @param arg2 The replacement for placeholder {2} in the message * @param arg3 The replacement for placeholder {3} in the message */ pt getMessageq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t Object args[] = new Object[4]; args[0] = arg0; args[1] = arg1; args[2] = arg2; args[3] = arg3; return (getMessage(locale, key, args)); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqуsq~ uq~ppppppptkeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~-sq~ uq~pppppt¾/** * Return true if there is a defined message for the specified * key in the system default locale. * * @param key The message key to look up */ pt isPresentq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t2 return (isPresent(null, key)); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqÑ›sq~ uq~ppppppptlocaleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~5pq~§xsq~bsq~ uq~ppppqÑ›sq~ uq~ppppppptkeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xppq~-sq~ uq~pppppt)/** * Return true if there is a defined message for the specified * key in the specified Locale. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up */ pt isPresentq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t8 String message = getMessage(locale, key); if (message == null) return (false); else if (message.startsWith("???") && message.endsWith("???")) return (false); // FIXME - Only valid for default implementation else return (true); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqÑ»sq~ uq~ppppppptstringq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~-sq~ uq~pppppt÷// ------------------------------------------------------ Protected Methods /** * Escape any single quote characters that are included in the specified * message string. * * @param string The string to be escaped */ ptescapeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥tŽ if ((string == null) || (string.indexOf('\'') < 0)) return (string); int n = string.length(); StringBuffer sb = new StringBuffer(n); for (int i = 0; i < n; i++) { char ch = string.charAt(i); if (ch == '\'') sb.append('\''); sb.append(ch); } return (sb.toString()); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqÑÓsq~ uq~ppppppptlocaleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~5pq~§xpppq~-sq~ uq~pppppt/** * Compute and return a key to be used in caching information by a Locale. * NOTE - The locale key for the default Locale in our * environment is a zero length String. * * @param locale The locale for which a key is desired */ pt localeKeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥tÖ if (locale == null) return (""); // else if (locale.equals(defaultLocale)) // return (""); else return (locale.toString()); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqÑësq~ uq~ppppppptlocaleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~5pq~§xsq~bsq~ uq~ppppqÑësq~ uq~ppppppptkeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xppq~-sq~ uq~pppppt/** * Compute and return a key to be used in caching information * by Locale and message key. * * @param locale The Locale for which this format key is calculated * @param key The message key for which this format key is calculated */ pt messageKeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥t; return (localeKey(locale) + "." + key); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqÒ sq~ uq~pppppppt localeKeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppqÒ sq~ uq~ppppppptkeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xppq~-sq~ uq~pppppt/** * Compute and return a key to be used in caching information * by locale key and message key. * * @param localeKey The locale key for which this cache key is calculated * @param key The message key for which this cache key is calculated */ pt messageKeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥t3 return (localeKey + "." + key); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqÒ+sq~ uq~ppppppptconfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~-sq~ uq~ppppptð/** * Create and return an instance of MessageResources for the * created by the default MessageResourcesFactory. * * @param config Configuration parameter for this message bundle. */ ptgetMessageResourcesq~¢xsq~ uq~pppppq~¥q~¦q~¥q~-pq~§xsq~ uq~ppppsq~ uq~ppppsq~#q~»xq~¥t® if (defaultFactory == null) defaultFactory = MessageResourcesFactory.createFactory(); return defaultFactory.createResources(config); sq~ uq~ppppq~¥sq~#xsq~isq~ uq~sq~bsq~ uq~ppppqÒEsq~ uq~ppppppptmessageq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~-sq~ uq~pppppt/** * Log a message to the Writer that has been configured for our use. * * @param message The message to be logged */ ptlogq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t# log.debug(message); sq~ uq~ppppq~¥q~¥xqËésq~isq~ uq~ppppq~-sq~ uq~ppppptž/** * The configuration parameter used to initialize this MessageResources. * @return parameter used to initialize this MessageResources */ pt getConfigq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t% return (this.config); sq~ uq~ppppq~–q~–xq~LÝsq~isq~ uq~ppppq~-sq~ uq~ppppptè/** * Indicates that a null is returned instead of an error message string * if an unknown Locale or key is requested. * @return true if null is returned if unknown key or locale is requested */ pt getReturnNullq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t) return (this.returnNull); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqÒ}sq~ uq~pppppppt returnNullq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xpppq~-sq~ uq~pppppt/** * Indicates that a null is returned instead of an error message string * if an unknown Locale or key is requested. * @param returnNull true Indicates that a null is returned * if an unknown Locale or key is requested. */ pt setReturnNullq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t- this.returnNull = returnNull; sq~ uq~ppppq~–q~–xq~Lðq~Msq~isq~ uq~sq~bsq~ uq~ppppqÒ•sq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~-sq~ uq~ppppptÞ// --------------------------------------------------------- Public Methods /** * Returns a text message for the specified key, for the default Locale. * * @param key The message key to look up */ pt getMessageq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t5 return (getMessage((Locale) null, key)); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqÒ­sq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqÒ­sq~ uq~ppppppptargsq~rxsq~ uq~pppppq~–q~—q~–q~«t[]q@ xppq~-sq~ uq~ppppptø/** * Returns a text message after parametric replacement of the specified * parameter placeholders. * * @param key The message key to look up * @param args An array of replacement parameters for placeholders */ pt getMessageq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t; return (getMessage((Locale) null, key, args)); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqÒÎsq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqÒÎsq~ uq~ppppppptarg0q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xppq~-sq~ uq~pppppt÷/** * Returns a text message after parametric replacement of the specified * parameter placeholders. * * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message */ pt getMessageq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t; return (getMessage((Locale) null, key, arg0)); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqÒîsq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqÒîsq~ uq~ppppppptarg0q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~bsq~ uq~ppppqÒîsq~ uq~ppppppptarg1q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xpq~-sq~ uq~pppppt>/** * Returns a text message after parametric replacement of the specified * parameter placeholders. * * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message * @param arg1 The replacement for placeholder {1} in the message */ pt getMessageq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tA return (getMessage((Locale) null, key, arg0, arg1)); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqÓsq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqÓsq~ uq~ppppppptarg0q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~bsq~ uq~ppppqÓsq~ uq~ppppppptarg1q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~bsq~ uq~ppppqÓsq~ uq~ppppppptarg2q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xq~-sq~ uq~pppppt…/** * Returns a text message after parametric replacement of the specified * parameter placeholders. * * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message * @param arg1 The replacement for placeholder {1} in the message * @param arg2 The replacement for placeholder {2} in the message */ pt getMessageq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tG return (getMessage((Locale) null, key, arg0, arg1, arg2)); sq~ uq~ppppq~–q~–xsq~isq~ uq~ sq~bsq~ uq~ppppqÓFsq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqÓFsq~ uq~ppppppptarg0q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~bsq~ uq~ppppqÓFsq~ uq~ppppppptarg1q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~bsq~ uq~ppppqÓFsq~ uq~ppppppptarg2q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~bsq~ uq~ppppqÓFsq~ uq~ppppppptarg3q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xppppq~-sq~ uq~ppppptÌ/** * Returns a text message after parametric replacement of the specified * parameter placeholders. * * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message * @param arg1 The replacement for placeholder {1} in the message * @param arg2 The replacement for placeholder {2} in the message * @param arg3 The replacement for placeholder {3} in the message */ pt getMessageq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tM return (getMessage((Locale) null, key, arg0, arg1, arg2, arg3)); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqÓ~sq~ uq~ppppppptlocaleq~rxsq~ uq~pppppq~–q~—q~–q~5pq~˜xsq~bsq~ uq~ppppqÓ~sq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xppq~-sq~ uq~ppppptN/** * Returns a text message for the specified key, for the default Locale. * A null string result will be returned by this method if no relevant * message resource is found for this key or Locale, if the * returnNull property is set. Otherwise, an appropriate * error message will be returned. *

            * This method must be implemented by a concrete subclass. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up */ pt getMessageq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xsq~#psq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqÓžsq~ uq~ppppppptlocaleq~rxsq~ uq~pppppq~–q~—q~–q~5pq~˜xsq~bsq~ uq~ppppqÓžsq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqÓžsq~ uq~ppppppptargsq~rxsq~ uq~pppppq~–q~—q~–q~«t[]q@ xpq~-sq~ uq~ppppptÑ/** * Returns a text message after parametric replacement of the specified * parameter placeholders. A null string result will be returned by * this method if no resource bundle has been configured. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up * @param args An array of replacement parameters for placeholders */ pt getMessageq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–ty // Cache MessageFormat instances as they are accessed if (locale == null) locale = defaultLocale; MessageFormat format = null; String formatKey = messageKey(locale, key); synchronized (formats) { format = (MessageFormat) formats.get(formatKey); if (format == null) { String formatString = getMessage(locale, key); if (formatString == null) { if (returnNull) return (null); else return ("???" + formatKey + "???"); } format = new MessageFormat(escape(formatString)); formats.put(formatKey, format); } } return (format.format(args)); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqÓÇsq~ uq~ppppppptlocaleq~rxsq~ uq~pppppq~–q~—q~–q~5pq~˜xsq~bsq~ uq~ppppqÓÇsq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqÓÇsq~ uq~ppppppptarg0q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xpq~-sq~ uq~pppppt¬/** * Returns a text message after parametric replacement of the specified * parameter placeholders. A null string result will never be returned * by this method. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message */ pt getMessageq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tg Object args[] = new Object[1]; args[0] = arg0; return (getMessage(locale, key, args)); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqÓïsq~ uq~ppppppptlocaleq~rxsq~ uq~pppppq~–q~—q~–q~5pq~˜xsq~bsq~ uq~ppppqÓïsq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqÓïsq~ uq~ppppppptarg0q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~bsq~ uq~ppppqÓïsq~ uq~ppppppptarg1q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xq~-sq~ uq~ppppptó/** * Returns a text message after parametric replacement of the specified * parameter placeholders. A null string result will never be returned * by this method. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message * @param arg1 The replacement for placeholder {1} in the message */ pt getMessageq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–ty Object args[] = new Object[2]; args[0] = arg0; args[1] = arg1; return (getMessage(locale, key, args)); sq~ uq~ppppq~–q~–xsq~isq~ uq~ sq~bsq~ uq~ppppqÔsq~ uq~ppppppptlocaleq~rxsq~ uq~pppppq~–q~—q~–q~5pq~˜xsq~bsq~ uq~ppppqÔsq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqÔsq~ uq~ppppppptarg0q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~bsq~ uq~ppppqÔsq~ uq~ppppppptarg1q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~bsq~ uq~ppppqÔsq~ uq~ppppppptarg2q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xppppq~-sq~ uq~pppppt:/** * Returns a text message after parametric replacement of the specified * parameter placeholders. A null string result will never be returned * by this method. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message * @param arg1 The replacement for placeholder {1} in the message * @param arg2 The replacement for placeholder {2} in the message */ pt getMessageq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t‹ Object args[] = new Object[3]; args[0] = arg0; args[1] = arg1; args[2] = arg2; return (getMessage(locale, key, args)); sq~ uq~ppppq~–q~–xsq~isq~ uq~ sq~bsq~ uq~ppppqÔWsq~ uq~ppppppptlocaleq~rxsq~ uq~pppppq~–q~—q~–q~5pq~˜xsq~bsq~ uq~ppppqÔWsq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqÔWsq~ uq~ppppppptarg0q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~bsq~ uq~ppppqÔWsq~ uq~ppppppptarg1q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~bsq~ uq~ppppqÔWsq~ uq~ppppppptarg2q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~bsq~ uq~ppppqÔWsq~ uq~ppppppptarg3q~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xpppq~-sq~ uq~pppppt/** * Returns a text message after parametric replacement of the specified * parameter placeholders. A null string result will never be returned * by this method. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message * @param arg1 The replacement for placeholder {1} in the message * @param arg2 The replacement for placeholder {2} in the message * @param arg3 The replacement for placeholder {3} in the message */ pt getMessageq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t Object args[] = new Object[4]; args[0] = arg0; args[1] = arg1; args[2] = arg2; args[3] = arg3; return (getMessage(locale, key, args)); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqÔ—sq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~-sq~ uq~pppppt¾/** * Return true if there is a defined message for the specified * key in the system default locale. * * @param key The message key to look up */ pt isPresentq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t2 return (isPresent(null, key)); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqÔ¯sq~ uq~ppppppptlocaleq~rxsq~ uq~pppppq~–q~—q~–q~5pq~˜xsq~bsq~ uq~ppppqÔ¯sq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xppq~-sq~ uq~pppppt)/** * Return true if there is a defined message for the specified * key in the specified Locale. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up */ pt isPresentq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t8 String message = getMessage(locale, key); if (message == null) return (false); else if (message.startsWith("???") && message.endsWith("???")) return (false); // FIXME - Only valid for default implementation else return (true); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqÔÏsq~ uq~ppppppptstringq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~-sq~ uq~pppppt÷// ------------------------------------------------------ Protected Methods /** * Escape any single quote characters that are included in the specified * message string. * * @param string The string to be escaped */ ptescapeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–tŽ if ((string == null) || (string.indexOf('\'') < 0)) return (string); int n = string.length(); StringBuffer sb = new StringBuffer(n); for (int i = 0; i < n; i++) { char ch = string.charAt(i); if (ch == '\'') sb.append('\''); sb.append(ch); } return (sb.toString()); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqÔçsq~ uq~ppppppptlocaleq~rxsq~ uq~pppppq~–q~—q~–q~5pq~˜xpppq~-sq~ uq~pppppt/** * Compute and return a key to be used in caching information by a Locale. * NOTE - The locale key for the default Locale in our * environment is a zero length String. * * @param locale The locale for which a key is desired */ pt localeKeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–tÖ if (locale == null) return (""); // else if (locale.equals(defaultLocale)) // return (""); else return (locale.toString()); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqÔÿsq~ uq~ppppppptlocaleq~rxsq~ uq~pppppq~–q~—q~–q~5pq~˜xsq~bsq~ uq~ppppqÔÿsq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xppq~-sq~ uq~pppppt/** * Compute and return a key to be used in caching information * by Locale and message key. * * @param locale The Locale for which this format key is calculated * @param key The message key for which this format key is calculated */ pt messageKeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–t; return (localeKey(locale) + "." + key); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqÕsq~ uq~pppppppt localeKeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqÕsq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xppq~-sq~ uq~pppppt/** * Compute and return a key to be used in caching information * by locale key and message key. * * @param localeKey The locale key for which this cache key is calculated * @param key The message key for which this cache key is calculated */ pt messageKeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–t3 return (localeKey + "." + key); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqÕ?sq~ uq~ppppppptconfigq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~-sq~ uq~ppppptð/** * Create and return an instance of MessageResources for the * created by the default MessageResourcesFactory. * * @param config Configuration parameter for this message bundle. */ ptgetMessageResourcesq~rxsq~ uq~pppppq~–q~—q~–q~-pq~˜xsq~ uq~ppppsq~ uq~ppppsq~#q~¢xq~–t® if (defaultFactory == null) defaultFactory = MessageResourcesFactory.createFactory(); return defaultFactory.createResources(config); sq~ uq~ppppq~–sq~#xsq~isq~ uq~sq~bsq~ uq~ppppqÕYsq~ uq~ppppppptmessageq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~-sq~ uq~pppppt/** * Log a message to the Writer that has been configured for our use. * * @param message The message to be logged */ ptlogq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t# log.debug(message); sq~ uq~ppppq~–q~–xqÌcsq~isq~ uq~ppppq~-sq~ uq~ppppptž/** * The configuration parameter used to initialize this MessageResources. * @return parameter used to initialize this MessageResources */ pt getConfigq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t% return (this.config); sq~ uq~ppppq~~q~~xq~Mysq~isq~ uq~ppppq~-sq~ uq~ppppptè/** * Indicates that a null is returned instead of an error message string * if an unknown Locale or key is requested. * @return true if null is returned if unknown key or locale is requested */ pt getReturnNullq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t) return (this.returnNull); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqÕ‘sq~ uq~pppppppt returnNullq~{xsq~ uq~pppppq~~q~q~~q~pq~€xpppq~-sq~ uq~pppppt/** * Indicates that a null is returned instead of an error message string * if an unknown Locale or key is requested. * @param returnNull true Indicates that a null is returned * if an unknown Locale or key is requested. */ pt setReturnNullq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t- this.returnNull = returnNull; sq~ uq~ppppq~~q~~xq~MŒq~M«sq~isq~ uq~sq~bsq~ uq~ppppqÕ©sq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~-sq~ uq~ppppptÞ// --------------------------------------------------------- Public Methods /** * Returns a text message for the specified key, for the default Locale. * * @param key The message key to look up */ pt getMessageq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t5 return (getMessage((Locale) null, key)); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqÕÁsq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqÕÁsq~ uq~ppppppptargsq~{xsq~ uq~pppppq~~q~q~~q~«t[]q~~­xppq~-sq~ uq~ppppptø/** * Returns a text message after parametric replacement of the specified * parameter placeholders. * * @param key The message key to look up * @param args An array of replacement parameters for placeholders */ pt getMessageq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t; return (getMessage((Locale) null, key, args)); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqÕâsq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqÕâsq~ uq~ppppppptarg0q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xppq~-sq~ uq~pppppt÷/** * Returns a text message after parametric replacement of the specified * parameter placeholders. * * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message */ pt getMessageq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t; return (getMessage((Locale) null, key, arg0)); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqÖsq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqÖsq~ uq~ppppppptarg0q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~bsq~ uq~ppppqÖsq~ uq~ppppppptarg1q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xpq~-sq~ uq~pppppt>/** * Returns a text message after parametric replacement of the specified * parameter placeholders. * * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message * @param arg1 The replacement for placeholder {1} in the message */ pt getMessageq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tA return (getMessage((Locale) null, key, arg0, arg1)); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqÖ*sq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqÖ*sq~ uq~ppppppptarg0q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~bsq~ uq~ppppqÖ*sq~ uq~ppppppptarg1q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~bsq~ uq~ppppqÖ*sq~ uq~ppppppptarg2q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xq~-sq~ uq~pppppt…/** * Returns a text message after parametric replacement of the specified * parameter placeholders. * * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message * @param arg1 The replacement for placeholder {1} in the message * @param arg2 The replacement for placeholder {2} in the message */ pt getMessageq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tG return (getMessage((Locale) null, key, arg0, arg1, arg2)); sq~ uq~ppppq~~q~~xsq~isq~ uq~ sq~bsq~ uq~ppppqÖZsq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqÖZsq~ uq~ppppppptarg0q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~bsq~ uq~ppppqÖZsq~ uq~ppppppptarg1q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~bsq~ uq~ppppqÖZsq~ uq~ppppppptarg2q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~bsq~ uq~ppppqÖZsq~ uq~ppppppptarg3q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xppppq~-sq~ uq~ppppptÌ/** * Returns a text message after parametric replacement of the specified * parameter placeholders. * * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message * @param arg1 The replacement for placeholder {1} in the message * @param arg2 The replacement for placeholder {2} in the message * @param arg3 The replacement for placeholder {3} in the message */ pt getMessageq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tM return (getMessage((Locale) null, key, arg0, arg1, arg2, arg3)); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqÖ’sq~ uq~ppppppptlocaleq~{xsq~ uq~pppppq~~q~q~~q~5pq~€xsq~bsq~ uq~ppppqÖ’sq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xppq~-sq~ uq~ppppptN/** * Returns a text message for the specified key, for the default Locale. * A null string result will be returned by this method if no relevant * message resource is found for this key or Locale, if the * returnNull property is set. Otherwise, an appropriate * error message will be returned. *

            * This method must be implemented by a concrete subclass. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up */ pt getMessageq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxsq~#psq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqÖ²sq~ uq~ppppppptlocaleq~{xsq~ uq~pppppq~~q~q~~q~5pq~€xsq~bsq~ uq~ppppqÖ²sq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqÖ²sq~ uq~ppppppptargsq~{xsq~ uq~pppppq~~q~q~~q~«t[]q~~­xpq~-sq~ uq~ppppptÑ/** * Returns a text message after parametric replacement of the specified * parameter placeholders. A null string result will be returned by * this method if no resource bundle has been configured. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up * @param args An array of replacement parameters for placeholders */ pt getMessageq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~ty // Cache MessageFormat instances as they are accessed if (locale == null) locale = defaultLocale; MessageFormat format = null; String formatKey = messageKey(locale, key); synchronized (formats) { format = (MessageFormat) formats.get(formatKey); if (format == null) { String formatString = getMessage(locale, key); if (formatString == null) { if (returnNull) return (null); else return ("???" + formatKey + "???"); } format = new MessageFormat(escape(formatString)); formats.put(formatKey, format); } } return (format.format(args)); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqÖÛsq~ uq~ppppppptlocaleq~{xsq~ uq~pppppq~~q~q~~q~5pq~€xsq~bsq~ uq~ppppqÖÛsq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqÖÛsq~ uq~ppppppptarg0q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xpq~-sq~ uq~pppppt¬/** * Returns a text message after parametric replacement of the specified * parameter placeholders. A null string result will never be returned * by this method. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message */ pt getMessageq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tg Object args[] = new Object[1]; args[0] = arg0; return (getMessage(locale, key, args)); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq×sq~ uq~ppppppptlocaleq~{xsq~ uq~pppppq~~q~q~~q~5pq~€xsq~bsq~ uq~ppppq×sq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq×sq~ uq~ppppppptarg0q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~bsq~ uq~ppppq×sq~ uq~ppppppptarg1q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xq~-sq~ uq~ppppptó/** * Returns a text message after parametric replacement of the specified * parameter placeholders. A null string result will never be returned * by this method. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message * @param arg1 The replacement for placeholder {1} in the message */ pt getMessageq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~ty Object args[] = new Object[2]; args[0] = arg0; args[1] = arg1; return (getMessage(locale, key, args)); sq~ uq~ppppq~~q~~xsq~isq~ uq~ sq~bsq~ uq~ppppq×3sq~ uq~ppppppptlocaleq~{xsq~ uq~pppppq~~q~q~~q~5pq~€xsq~bsq~ uq~ppppq×3sq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq×3sq~ uq~ppppppptarg0q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~bsq~ uq~ppppq×3sq~ uq~ppppppptarg1q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~bsq~ uq~ppppq×3sq~ uq~ppppppptarg2q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xppppq~-sq~ uq~pppppt:/** * Returns a text message after parametric replacement of the specified * parameter placeholders. A null string result will never be returned * by this method. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message * @param arg1 The replacement for placeholder {1} in the message * @param arg2 The replacement for placeholder {2} in the message */ pt getMessageq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t‹ Object args[] = new Object[3]; args[0] = arg0; args[1] = arg1; args[2] = arg2; return (getMessage(locale, key, args)); sq~ uq~ppppq~~q~~xsq~isq~ uq~ sq~bsq~ uq~ppppq×ksq~ uq~ppppppptlocaleq~{xsq~ uq~pppppq~~q~q~~q~5pq~€xsq~bsq~ uq~ppppq×ksq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq×ksq~ uq~ppppppptarg0q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~bsq~ uq~ppppq×ksq~ uq~ppppppptarg1q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~bsq~ uq~ppppq×ksq~ uq~ppppppptarg2q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~bsq~ uq~ppppq×ksq~ uq~ppppppptarg3q~{xsq~ uq~pppppq~~q~q~~q~«pq~€xpppq~-sq~ uq~pppppt/** * Returns a text message after parametric replacement of the specified * parameter placeholders. A null string result will never be returned * by this method. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message * @param arg1 The replacement for placeholder {1} in the message * @param arg2 The replacement for placeholder {2} in the message * @param arg3 The replacement for placeholder {3} in the message */ pt getMessageq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t Object args[] = new Object[4]; args[0] = arg0; args[1] = arg1; args[2] = arg2; args[3] = arg3; return (getMessage(locale, key, args)); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq׫sq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~-sq~ uq~pppppt¾/** * Return true if there is a defined message for the specified * key in the system default locale. * * @param key The message key to look up */ pt isPresentq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t2 return (isPresent(null, key)); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq×Ãsq~ uq~ppppppptlocaleq~{xsq~ uq~pppppq~~q~q~~q~5pq~€xsq~bsq~ uq~ppppq×Ãsq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xppq~-sq~ uq~pppppt)/** * Return true if there is a defined message for the specified * key in the specified Locale. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up */ pt isPresentq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t8 String message = getMessage(locale, key); if (message == null) return (false); else if (message.startsWith("???") && message.endsWith("???")) return (false); // FIXME - Only valid for default implementation else return (true); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq×ãsq~ uq~ppppppptstringq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~-sq~ uq~pppppt÷// ------------------------------------------------------ Protected Methods /** * Escape any single quote characters that are included in the specified * message string. * * @param string The string to be escaped */ ptescapeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~tŽ if ((string == null) || (string.indexOf('\'') < 0)) return (string); int n = string.length(); StringBuffer sb = new StringBuffer(n); for (int i = 0; i < n; i++) { char ch = string.charAt(i); if (ch == '\'') sb.append('\''); sb.append(ch); } return (sb.toString()); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq×ûsq~ uq~ppppppptlocaleq~{xsq~ uq~pppppq~~q~q~~q~5pq~€xpppq~-sq~ uq~pppppt/** * Compute and return a key to be used in caching information by a Locale. * NOTE - The locale key for the default Locale in our * environment is a zero length String. * * @param locale The locale for which a key is desired */ pt localeKeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~tÖ if (locale == null) return (""); // else if (locale.equals(defaultLocale)) // return (""); else return (locale.toString()); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqØsq~ uq~ppppppptlocaleq~{xsq~ uq~pppppq~~q~q~~q~5pq~€xsq~bsq~ uq~ppppqØsq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xppq~-sq~ uq~pppppt/** * Compute and return a key to be used in caching information * by Locale and message key. * * @param locale The Locale for which this format key is calculated * @param key The message key for which this format key is calculated */ pt messageKeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t; return (localeKey(locale) + "." + key); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqØ3sq~ uq~pppppppt localeKeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqØ3sq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xppq~-sq~ uq~pppppt/** * Compute and return a key to be used in caching information * by locale key and message key. * * @param localeKey The locale key for which this cache key is calculated * @param key The message key for which this cache key is calculated */ pt messageKeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t3 return (localeKey + "." + key); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqØSsq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~-sq~ uq~ppppptð/** * Create and return an instance of MessageResources for the * created by the default MessageResourcesFactory. * * @param config Configuration parameter for this message bundle. */ ptgetMessageResourcesq~{xsq~ uq~pppppq~~q~q~~q~-pq~€xsq~ uq~ppppsq~ uq~ppppsq~#q~Šxq~~t® if (defaultFactory == null) defaultFactory = MessageResourcesFactory.createFactory(); return defaultFactory.createResources(config); sq~ uq~ppppq~~sq~#xsq~isq~ uq~sq~bsq~ uq~ppppqØmsq~ uq~ppppppptmessageq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~-sq~ uq~pppppt/** * Log a message to the Writer that has been configured for our use. * * @param message The message to be logged */ ptlogq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t# log.debug(message); sq~ uq~ppppq~~q~~xqÌþsq~isq~ uq~ppppq~-sq~ uq~ppppptž/** * The configuration parameter used to initialize this MessageResources. * @return parameter used to initialize this MessageResources */ pt getConfigq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft% return (this.config); sq~ uq~ppppq~fq~fxq~Nsq~isq~ uq~ppppq~-sq~ uq~ppppptè/** * Indicates that a null is returned instead of an error message string * if an unknown Locale or key is requested. * @return true if null is returned if unknown key or locale is requested */ pt getReturnNullq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft) return (this.returnNull); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqØ¥sq~ uq~pppppppt returnNullq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxpppq~-sq~ uq~pppppt/** * Indicates that a null is returned instead of an error message string * if an unknown Locale or key is requested. * @param returnNull true Indicates that a null is returned * if an unknown Locale or key is requested. */ pt setReturnNullq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft- this.returnNull = returnNull; sq~ uq~ppppq~fq~fxq~N(q~NGsq~isq~ uq~sq~bsq~ uq~ppppqؽsq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~-sq~ uq~ppppptÞ// --------------------------------------------------------- Public Methods /** * Returns a text message for the specified key, for the default Locale. * * @param key The message key to look up */ pt getMessageq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft5 return (getMessage((Locale) null, key)); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqØÕsq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqØÕsq~ uq~ppppppptargsq~cxsq~ uq~pppppq~fq~gq~fq~«t[]q~kxppq~-sq~ uq~ppppptø/** * Returns a text message after parametric replacement of the specified * parameter placeholders. * * @param key The message key to look up * @param args An array of replacement parameters for placeholders */ pt getMessageq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft; return (getMessage((Locale) null, key, args)); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqØösq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqØösq~ uq~ppppppptarg0q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxppq~-sq~ uq~pppppt÷/** * Returns a text message after parametric replacement of the specified * parameter placeholders. * * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message */ pt getMessageq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft; return (getMessage((Locale) null, key, arg0)); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqÙsq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqÙsq~ uq~ppppppptarg0q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~bsq~ uq~ppppqÙsq~ uq~ppppppptarg1q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxpq~-sq~ uq~pppppt>/** * Returns a text message after parametric replacement of the specified * parameter placeholders. * * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message * @param arg1 The replacement for placeholder {1} in the message */ pt getMessageq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftA return (getMessage((Locale) null, key, arg0, arg1)); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqÙ>sq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqÙ>sq~ uq~ppppppptarg0q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~bsq~ uq~ppppqÙ>sq~ uq~ppppppptarg1q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~bsq~ uq~ppppqÙ>sq~ uq~ppppppptarg2q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxq~-sq~ uq~pppppt…/** * Returns a text message after parametric replacement of the specified * parameter placeholders. * * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message * @param arg1 The replacement for placeholder {1} in the message * @param arg2 The replacement for placeholder {2} in the message */ pt getMessageq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftG return (getMessage((Locale) null, key, arg0, arg1, arg2)); sq~ uq~ppppq~fq~fxsq~isq~ uq~ sq~bsq~ uq~ppppqÙnsq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqÙnsq~ uq~ppppppptarg0q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~bsq~ uq~ppppqÙnsq~ uq~ppppppptarg1q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~bsq~ uq~ppppqÙnsq~ uq~ppppppptarg2q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~bsq~ uq~ppppqÙnsq~ uq~ppppppptarg3q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxppppq~-sq~ uq~ppppptÌ/** * Returns a text message after parametric replacement of the specified * parameter placeholders. * * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message * @param arg1 The replacement for placeholder {1} in the message * @param arg2 The replacement for placeholder {2} in the message * @param arg3 The replacement for placeholder {3} in the message */ pt getMessageq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftM return (getMessage((Locale) null, key, arg0, arg1, arg2, arg3)); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqÙ¦sq~ uq~ppppppptlocaleq~cxsq~ uq~pppppq~fq~gq~fq~5pq~hxsq~bsq~ uq~ppppqÙ¦sq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxppq~-sq~ uq~ppppptN/** * Returns a text message for the specified key, for the default Locale. * A null string result will be returned by this method if no relevant * message resource is found for this key or Locale, if the * returnNull property is set. Otherwise, an appropriate * error message will be returned. *

            * This method must be implemented by a concrete subclass. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up */ pt getMessageq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxsq~#psq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqÙÆsq~ uq~ppppppptlocaleq~cxsq~ uq~pppppq~fq~gq~fq~5pq~hxsq~bsq~ uq~ppppqÙÆsq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqÙÆsq~ uq~ppppppptargsq~cxsq~ uq~pppppq~fq~gq~fq~«t[]q~kxpq~-sq~ uq~ppppptÑ/** * Returns a text message after parametric replacement of the specified * parameter placeholders. A null string result will be returned by * this method if no resource bundle has been configured. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up * @param args An array of replacement parameters for placeholders */ pt getMessageq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fty // Cache MessageFormat instances as they are accessed if (locale == null) locale = defaultLocale; MessageFormat format = null; String formatKey = messageKey(locale, key); synchronized (formats) { format = (MessageFormat) formats.get(formatKey); if (format == null) { String formatString = getMessage(locale, key); if (formatString == null) { if (returnNull) return (null); else return ("???" + formatKey + "???"); } format = new MessageFormat(escape(formatString)); formats.put(formatKey, format); } } return (format.format(args)); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqÙïsq~ uq~ppppppptlocaleq~cxsq~ uq~pppppq~fq~gq~fq~5pq~hxsq~bsq~ uq~ppppqÙïsq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqÙïsq~ uq~ppppppptarg0q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxpq~-sq~ uq~pppppt¬/** * Returns a text message after parametric replacement of the specified * parameter placeholders. A null string result will never be returned * by this method. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message */ pt getMessageq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftg Object args[] = new Object[1]; args[0] = arg0; return (getMessage(locale, key, args)); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqÚsq~ uq~ppppppptlocaleq~cxsq~ uq~pppppq~fq~gq~fq~5pq~hxsq~bsq~ uq~ppppqÚsq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqÚsq~ uq~ppppppptarg0q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~bsq~ uq~ppppqÚsq~ uq~ppppppptarg1q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxq~-sq~ uq~ppppptó/** * Returns a text message after parametric replacement of the specified * parameter placeholders. A null string result will never be returned * by this method. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message * @param arg1 The replacement for placeholder {1} in the message */ pt getMessageq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fty Object args[] = new Object[2]; args[0] = arg0; args[1] = arg1; return (getMessage(locale, key, args)); sq~ uq~ppppq~fq~fxsq~isq~ uq~ sq~bsq~ uq~ppppqÚGsq~ uq~ppppppptlocaleq~cxsq~ uq~pppppq~fq~gq~fq~5pq~hxsq~bsq~ uq~ppppqÚGsq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqÚGsq~ uq~ppppppptarg0q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~bsq~ uq~ppppqÚGsq~ uq~ppppppptarg1q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~bsq~ uq~ppppqÚGsq~ uq~ppppppptarg2q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxppppq~-sq~ uq~pppppt:/** * Returns a text message after parametric replacement of the specified * parameter placeholders. A null string result will never be returned * by this method. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message * @param arg1 The replacement for placeholder {1} in the message * @param arg2 The replacement for placeholder {2} in the message */ pt getMessageq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft‹ Object args[] = new Object[3]; args[0] = arg0; args[1] = arg1; args[2] = arg2; return (getMessage(locale, key, args)); sq~ uq~ppppq~fq~fxsq~isq~ uq~ sq~bsq~ uq~ppppqÚsq~ uq~ppppppptlocaleq~cxsq~ uq~pppppq~fq~gq~fq~5pq~hxsq~bsq~ uq~ppppqÚsq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqÚsq~ uq~ppppppptarg0q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~bsq~ uq~ppppqÚsq~ uq~ppppppptarg1q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~bsq~ uq~ppppqÚsq~ uq~ppppppptarg2q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~bsq~ uq~ppppqÚsq~ uq~ppppppptarg3q~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxpppq~-sq~ uq~pppppt/** * Returns a text message after parametric replacement of the specified * parameter placeholders. A null string result will never be returned * by this method. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up * @param arg0 The replacement for placeholder {0} in the message * @param arg1 The replacement for placeholder {1} in the message * @param arg2 The replacement for placeholder {2} in the message * @param arg3 The replacement for placeholder {3} in the message */ pt getMessageq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft Object args[] = new Object[4]; args[0] = arg0; args[1] = arg1; args[2] = arg2; args[3] = arg3; return (getMessage(locale, key, args)); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqÚ¿sq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~-sq~ uq~pppppt¾/** * Return true if there is a defined message for the specified * key in the system default locale. * * @param key The message key to look up */ pt isPresentq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft2 return (isPresent(null, key)); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqÚ×sq~ uq~ppppppptlocaleq~cxsq~ uq~pppppq~fq~gq~fq~5pq~hxsq~bsq~ uq~ppppqÚ×sq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxppq~-sq~ uq~pppppt)/** * Return true if there is a defined message for the specified * key in the specified Locale. * * @param locale The requested message Locale, or null * for the system default Locale * @param key The message key to look up */ pt isPresentq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft8 String message = getMessage(locale, key); if (message == null) return (false); else if (message.startsWith("???") && message.endsWith("???")) return (false); // FIXME - Only valid for default implementation else return (true); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqÚ÷sq~ uq~ppppppptstringq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~-sq~ uq~pppppt÷// ------------------------------------------------------ Protected Methods /** * Escape any single quote characters that are included in the specified * message string. * * @param string The string to be escaped */ ptescapeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ftŽ if ((string == null) || (string.indexOf('\'') < 0)) return (string); int n = string.length(); StringBuffer sb = new StringBuffer(n); for (int i = 0; i < n; i++) { char ch = string.charAt(i); if (ch == '\'') sb.append('\''); sb.append(ch); } return (sb.toString()); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqÛsq~ uq~ppppppptlocaleq~cxsq~ uq~pppppq~fq~gq~fq~5pq~hxpppq~-sq~ uq~pppppt/** * Compute and return a key to be used in caching information by a Locale. * NOTE - The locale key for the default Locale in our * environment is a zero length String. * * @param locale The locale for which a key is desired */ pt localeKeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ftÖ if (locale == null) return (""); // else if (locale.equals(defaultLocale)) // return (""); else return (locale.toString()); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqÛ'sq~ uq~ppppppptlocaleq~cxsq~ uq~pppppq~fq~gq~fq~5pq~hxsq~bsq~ uq~ppppqÛ'sq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxppq~-sq~ uq~pppppt/** * Compute and return a key to be used in caching information * by Locale and message key. * * @param locale The Locale for which this format key is calculated * @param key The message key for which this format key is calculated */ pt messageKeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft; return (localeKey(locale) + "." + key); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqÛGsq~ uq~pppppppt localeKeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqÛGsq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxppq~-sq~ uq~pppppt/** * Compute and return a key to be used in caching information * by locale key and message key. * * @param localeKey The locale key for which this cache key is calculated * @param key The message key for which this cache key is calculated */ pt messageKeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft3 return (localeKey + "." + key); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqÛgsq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~-sq~ uq~ppppptð/** * Create and return an instance of MessageResources for the * created by the default MessageResourcesFactory. * * @param config Configuration parameter for this message bundle. */ ptgetMessageResourcesq~cxsq~ uq~pppppq~fq~gq~fq~-pq~hxsq~ uq~ppppsq~ uq~ppppsq~#q~rxq~ft® if (defaultFactory == null) defaultFactory = MessageResourcesFactory.createFactory(); return defaultFactory.createResources(config); sq~ uq~ppppq~fsq~#xsq~isq~ uq~sq~bsq~ uq~ppppqÛsq~ uq~ppppppptmessageq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~-sq~ uq~pppppt/** * Log a message to the Writer that has been configured for our use. * * @param message The message to be logged */ ptlogq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft# log.debug(message); sq~ uq~ppppq~fq~fxqÍxpppppppppppppq~,sq~ uq~pppppppq~Kq~=xsq~ /uq~8sq~Csq~ uq~ppppq~xsq~ uq~ppppsq~#q~-xsq~Csq~ uq~ppppq~Ásq~ uq~ppppsq~#q~-xsq~Csq~ uq~ppppq~bsq~ uq~ppppsq~#q~-xsq~Csq~ uq~ppppq~csq~ uq~ppppsq~#q~-xqËHq#Osq~Csq~ uq~ppppq~çsq~ uq~ppppsq~#q~-xq$Ëqb˜sq~Csq~ uq~ppppq~ísq~ uq~ppppsq~#q~-xq~ɶsq~Csq~ uq~ppppq~{sq~ uq~ppppsq~#q~-xq€Lbq€PŒq€T8sq~Csq~ uq~ppppq~!sq~ uq~ppppsq~#q~-xq€Xhq‚=q~†MessageResources instance containing our * internal message strings. */ pt getInternalq~=xsq~ uq~pppppq~$q~yq~$q~-pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t+ return (this.internal); sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~ psq~ uq~pppppt//** *

            Return the application resources for the default sub-application, * if any. * * @deprecated Actions should call Action.getResources(HttpServletRequest) * instead of this method, in order to retrieve the resources for the * current sub-application */ pt getResourcesq~=xsq~ uq~pppppq~$q~yq~$q~-pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tx return ((MessageResources) getServletContext().getAttribute (Action.MESSAGES_KEY)); sq~ uq~ppppq~$q~$xq·bq~;{qLqÏqq7)q7q~$q~ˆÃq~µq~•hq€Bq€J7q€LÉq€Q7q~žLq€TŸq~†¹q~Vq~V)q~]5q~jq~Vq~SVq~_°q€æ‹q€’2q~eçq~r?q€­Óq€q€Ðq€pFq€³*q€¹²q€v–q~ntq~¥ïq~¥âq€q~§ºq€ÒqÏq~Hq~H-q~%\q~*BqiÓqiìqj!qjkqjÍsq~isq~ uq~ppppq~Esq~ uq~pppppt(/** * Return the message resources for the default sub-application. * * @deprecated This method can only return the resources for the default * sub-application. Use getResources(HttpServletRequest) to get the * resources for the current sub-application. */ pt getResourcesq~¢xsq~ uq~pppppq~¥q~¦q~¥q~-pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥t return ((MessageResources) servlet.getServletContext().getAttribute(Action.MESSAGES_KEY)); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqÜPsq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Œpq~§xpppq~Esq~ uq~pppppt²/** * Return the message resources for the current sub-application. * * @param request The servlet request we are processing * @since Struts 1.1 */ pt getResourcesq~¢xsq~ uq~pppppq~¥q~¦q~¥q~-pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥tZ return ((MessageResources) request.getAttribute(Action.MESSAGES_KEY)); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~ psq~ uq~pppppt’/** * Return the MessageResources instance containing our * internal message strings. * @since Struts 1.1 */ pt getInternalq~¢xsq~ uq~pppppq~¥q~¦q~¥q~-pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t+ return (this.internal); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~ psq~ uq~pppppt//** *

            Return the application resources for the default sub-application, * if any. * * @deprecated Actions should call Action.getResources(HttpServletRequest) * instead of this method, in order to retrieve the resources for the * current sub-application */ pt getResourcesq~¢xsq~ uq~pppppq~¥q~¦q~¥q~-pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tx return ((MessageResources) getServletContext().getAttribute (Action.MESSAGES_KEY)); sq~ uq~ppppq~¥q~¥xqºêq79qDDqÒ+q~Irq~H;qkWqkpqk¥qkïqlQsq~isq~ uq~ppppq~ psq~ uq~pppppt’/** * Return the MessageResources instance containing our * internal message strings. * @since Struts 1.1 */ pt getInternalq~rxsq~ uq~pppppq~–q~—q~–q~-pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t+ return (this.internal); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~ psq~ uq~pppppt6/** *

            Return the application resources for the default application module, * if any. * * @deprecated Actions should call Action.getResources(HttpServletRequest) * instead of this method, in order to retrieve the resources for the * current application module. */ pt getResourcesq~rxsq~ uq~pppppq~–q~—q~–q~-pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tx return ((MessageResources) getServletContext().getAttribute (Action.MESSAGES_KEY)); sq~ uq~ppppq~–q~–xq¾âsq~isq~ uq~ppppq~Esq~ uq~pppppt1/** * Return the message resources for the default application module. * * @deprecated This method can only return the resources for the default * application module. Use getResources(HttpServletRequest) to get the * resources for the current application module. */ pt getResourcesq~rxsq~ uq~pppppq~–q~—q~–q~-pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–t return ((MessageResources) servlet.getServletContext().getAttribute(Action.MESSAGES_KEY)); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqܸsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xpppq~Esq~ uq~pppppt½/** * Return the default message resources for the current application module. * * @param request The servlet request we are processing * @since Struts 1.1 */ pt getResourcesq~rxsq~ uq~pppppq~–q~—q~–q~-pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–tZ return ((MessageResources) request.getAttribute(Action.MESSAGES_KEY)); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqÜÐsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xsq~bsq~ uq~ppppqÜÐsq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xppq~Esq~ uq~ppppptW/** * Return the specified message resources for the current application * module. * * @param request The servlet request we are processing * @param key The key specified in the * <message-resources> element for the * requested bundle * * @since Struts 1.1b2 */ pt getResourcesq~rxsq~ uq~pppppq~–q~—q~–q~-pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–t… // Identify the current application module ServletContext context = getServlet().getServletContext(); ApplicationConfig appConfig = RequestUtils.getApplicationConfig(request,context); // Return the requested message resources instance return ((MessageResources) context.getAttribute (key + appConfig.getPrefix())); sq~ uq~ppppq~–q~–xq7IqF†q~HSqÕ?q~Iëqm=qmVqm‹qmÕqn7qdzqd“qdÈqeqetqÂèsq~isq~ uq~ppppq~Esq~ uq~pppppt /** * Return the message resources for the default module. * * @deprecated This method can only return the resources for the default * module. Use getResources(HttpServletRequest) to get the * resources for the current module. */ pt getResourcesq~{xsq~ uq~pppppq~~q~q~~q~-pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t€ return ((MessageResources) servlet.getServletContext().getAttribute(Globals.MESSAGES_KEY)); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqÝsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xpppq~Esq~ uq~pppppt±/** * Return the default message resources for the current module. * * @param request The servlet request we are processing * @since Struts 1.1 */ pt getResourcesq~{xsq~ uq~pppppq~~q~q~~q~-pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t[ return ((MessageResources) request.getAttribute(Globals.MESSAGES_KEY)); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqÝsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xsq~bsq~ uq~ppppqÝsq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xppq~Esq~ uq~ppppptA/** * Return the specified message resources for the current module. * * @param request The servlet request we are processing * @param key The key specified in the * <message-resources> element for the * requested bundle * * @since Struts 1.1 */ pt getResourcesq~{xsq~ uq~pppppq~~q~q~~q~-pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~tu // Identify the current module ServletContext context = getServlet().getServletContext(); ModuleConfig moduleConfig = RequestUtils.getModuleConfig(request,context); // Return the requested message resources instance return ((MessageResources) context.getAttribute (key + moduleConfig.getPrefix())); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ psq~ uq~pppppt’/** * Return the MessageResources instance containing our * internal message strings. * @since Struts 1.1 */ pt getInternalq~{xsq~ uq~pppppq~~q~q~~q~-pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t+ return (this.internal); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ psq~ uq~pppppt/** *

            Return the application resources for the default module, * if any. * * @deprecated Actions should call Action.getResources(HttpServletRequest) * instead of this method, in order to retrieve the resources for the * current module. */ pt getResourcesq~{xsq~ uq~pppppq~~q~q~~q~-pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~ty return ((MessageResources) getServletContext().getAttribute (Globals.MESSAGES_KEY)); sq~ uq~ppppq~~q~~xqHÈq7YqnÙqnòqo'qoqqoÓq~Hkqq~JfqØSq‘?q‘Xq‘q‘×q’9qÆàsq~isq~ uq~ppppq~Esq~ uq~pppppt /** * Return the message resources for the default module. * * @deprecated This method can only return the resources for the default * module. Use getResources(HttpServletRequest) to get the * resources for the current module. */ pt getResourcesq~cxsq~ uq~pppppq~fq~gq~fq~-pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft€ return ((MessageResources) servlet.getServletContext().getAttribute(Globals.MESSAGES_KEY)); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqÝhsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxpppq~Esq~ uq~pppppt±/** * Return the default message resources for the current module. * * @param request The servlet request we are processing * @since Struts 1.1 */ pt getResourcesq~cxsq~ uq~pppppq~fq~gq~fq~-pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft[ return ((MessageResources) request.getAttribute(Globals.MESSAGES_KEY)); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqÝ€sq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppqÝ€sq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxppq~Esq~ uq~ppppptA/** * Return the specified message resources for the current module. * * @param request The servlet request we are processing * @param key The key specified in the * <message-resources> element for the * requested bundle * * @since Struts 1.1 */ pt getResourcesq~cxsq~ uq~pppppq~fq~gq~fq~-pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ftu // Identify the current module ServletContext context = getServlet().getServletContext(); ModuleConfig moduleConfig = RequestUtils.getModuleConfig(request,context); // Return the requested message resources instance return ((MessageResources) context.getAttribute (key + moduleConfig.getPrefix())); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ psq~ uq~pppppt’/** * Return the MessageResources instance containing our * internal message strings. * @since Struts 1.1 */ pt getInternalq~cxsq~ uq~pppppq~fq~gq~fq~-pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft+ return (this.internal); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ psq~ uq~pppppt/** *

            Return the application resources for the default module, * if any. * * @deprecated Actions should call Action.getResources(HttpServletRequest) * instead of this method, in order to retrieve the resources for the * current module. */ pt getResourcesq~cxsq~ uq~pppppq~fq~gq~fq~-pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fty return ((MessageResources) getServletContext().getAttribute (Globals.MESSAGES_KEY)); sq~ uq~ppppq~fq~fxqK q7iqpuqpŽqpÃqq qqoq~Hƒq‘£q~JáqÛgq’šq’³q’èq“2q“”q~Äxq~$ppxpq~$xsq~ uq~ppppsq~ uq~ppppsq~#q~;xppptf MessageResources.getMessageResources ("org.apache.struts.taglib.bean.LocalStrings")q~$q~$q~$xsq~(sq~ uq~ppppq~ísq~ uq~pppppt®/** * Return an array of Cookies if multiple is non-null. */ /** * Return an array of Cookies if multiple is non-null. */ /** * Return an array of Cookies if multiple is non-null. */ /** * Return an array of Cookies if multiple is non-null. */ /** * Return an array of Cookies if multiple is non-null. */ ptmultipleq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~ísq~ uq~pppppppt getMultipleq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t' return (this.multiple); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppqÝãsq~ uq~ppppppptmultipleq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~ísq~ uq~pppppppt setMultipleq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t) this.multiple = multiple; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~ísq~ uq~ppppptr/** * The name of the cookie whose value is to be exposed. */ /** * The name of the cookie whose value is to be exposed. */ /** * The name of the cookie whose value is to be exposed. */ /** * The name of the cookie whose value is to be exposed. */ /** * The name of the cookie whose value is to be exposed. */ ptnameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~ísq~ uq~ppppppptgetNameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t# return (this.name); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppqÞsq~ uq~ppppppptnameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~ísq~ uq~ppppppptsetNameq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t! this.name = name; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~ísq~ uq~ppppptÖ/** * The default value to return if no cookie of the specified name is found. */ /** * The default value to return if no cookie of the specified name is found. */ /** * The default value to return if no cookie of the specified name is found. */ /** * The default value to return if no cookie of the specified name is found. */ /** * The default value to return if no cookie of the specified name is found. */ ptvalueq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~ísq~ uq~ppppppptgetValueq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t$ return (this.value); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppqÞKsq~ uq~ppppppptvalueq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~ísq~ uq~ppppppptsetValueq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t# this.value = value; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~ísq~ uq~ppppptð// --------------------------------------------------------- Public Methods /** * Retrieve the required property and expose it as a scripting variable. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tŠ // Retrieve the required cookie value(s) ArrayList values = new ArrayList(); Cookie cookies[] = ((HttpServletRequest) pageContext.getRequest()).getCookies(); if (cookies == null) cookies = new Cookie[0]; for (int i = 0; i < cookies.length; i++) { if (name.equals(cookies[i].getName())) values.add(cookies[i]); } if ((values.size() < 1) && (value != null)) values.add(new Cookie(name, value)); if (values.size() < 1) { JspException e = new JspException (messages.getMessage("cookie.get", name)); RequestUtils.saveException(pageContext, e); throw e; } // Expose an appropriate variable containing these results if (multiple == null) { Cookie cookie = (Cookie) values.get(0); pageContext.setAttribute(id, cookie); } else { cookies = new Cookie[values.size()]; pageContext.setAttribute(id, (Cookie[]) values.toArray(cookies)); } return (SKIP_BODY); sq~ uq~q~pppq~$q~$xsq~isq~ uq~ppppq~ísq~ uq~pppppt6/** * Release all allocated resources. */ ptreleaseq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t super.release(); id = null; multiple = null; name = null; value = null; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~ísq~ uq~ppppppptgetIdq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t! return (this.id); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqÞ‘sq~ uq~ppppppptidq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~ísq~ uq~ppppppptsetIdq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t this.id = id; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~ísq~ uq~pppppppt getMultipleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t' return (this.multiple); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqÞ·sq~ uq~ppppppptmultipleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~ísq~ uq~pppppppt setMultipleq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t) this.multiple = multiple; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~ísq~ uq~ppppppptgetNameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t# return (this.name); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqÞÝsq~ uq~ppppppptnameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~ísq~ uq~ppppppptsetNameq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t! this.name = name; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~ísq~ uq~ppppppptgetValueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t$ return (this.value); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqßsq~ uq~ppppppptvalueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~ísq~ uq~ppppppptsetValueq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t# this.value = value; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~ísq~ uq~ppppptð// --------------------------------------------------------- Public Methods /** * Retrieve the required property and expose it as a scripting variable. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tŠ // Retrieve the required cookie value(s) ArrayList values = new ArrayList(); Cookie cookies[] = ((HttpServletRequest) pageContext.getRequest()).getCookies(); if (cookies == null) cookies = new Cookie[0]; for (int i = 0; i < cookies.length; i++) { if (name.equals(cookies[i].getName())) values.add(cookies[i]); } if ((values.size() < 1) && (value != null)) values.add(new Cookie(name, value)); if (values.size() < 1) { JspException e = new JspException (messages.getMessage("cookie.get", name)); RequestUtils.saveException(pageContext, e); throw e; } // Expose an appropriate variable containing these results if (multiple == null) { Cookie cookie = (Cookie) values.get(0); pageContext.setAttribute(id, cookie); } else { cookies = new Cookie[values.size()]; pageContext.setAttribute(id, (Cookie[]) values.toArray(cookies)); } return (SKIP_BODY); sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~ppppq~ísq~ uq~pppppt6/** * Release all allocated resources. */ ptreleaseq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t super.release(); id = null; multiple = null; name = null; value = null; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~ísq~ uq~ppppppptgetIdq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t! return (this.id); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqßIsq~ uq~ppppppptidq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~ísq~ uq~ppppppptsetIdq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t this.id = id; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~ísq~ uq~pppppppt getMultipleq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t' return (this.multiple); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqßosq~ uq~ppppppptmultipleq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~ísq~ uq~pppppppt setMultipleq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t) this.multiple = multiple; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~ísq~ uq~ppppppptgetNameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t# return (this.name); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqß•sq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~ísq~ uq~ppppppptsetNameq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t! this.name = name; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~ísq~ uq~ppppppptgetValueq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t$ return (this.value); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqß»sq~ uq~ppppppptvalueq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~ísq~ uq~ppppppptsetValueq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t# this.value = value; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~ísq~ uq~ppppptð// --------------------------------------------------------- Public Methods /** * Retrieve the required property and expose it as a scripting variable. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tŠ // Retrieve the required cookie value(s) ArrayList values = new ArrayList(); Cookie cookies[] = ((HttpServletRequest) pageContext.getRequest()).getCookies(); if (cookies == null) cookies = new Cookie[0]; for (int i = 0; i < cookies.length; i++) { if (name.equals(cookies[i].getName())) values.add(cookies[i]); } if ((values.size() < 1) && (value != null)) values.add(new Cookie(name, value)); if (values.size() < 1) { JspException e = new JspException (messages.getMessage("cookie.get", name)); RequestUtils.saveException(pageContext, e); throw e; } // Expose an appropriate variable containing these results if (multiple == null) { Cookie cookie = (Cookie) values.get(0); pageContext.setAttribute(id, cookie); } else { cookies = new Cookie[values.size()]; pageContext.setAttribute(id, (Cookie[]) values.toArray(cookies)); } return (SKIP_BODY); sq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq~ísq~ uq~pppppt6/** * Release all allocated resources. */ ptreleaseq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t super.release(); id = null; multiple = null; name = null; value = null; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~ísq~ uq~ppppppptgetIdq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t! return (this.id); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqàsq~ uq~ppppppptidq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~ísq~ uq~ppppppptsetIdq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t this.id = id; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ísq~ uq~pppppppt getMultipleq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t' return (this.multiple); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqà'sq~ uq~ppppppptmultipleq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~ísq~ uq~pppppppt setMultipleq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t) this.multiple = multiple; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ísq~ uq~ppppppptgetNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t# return (this.name); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqàMsq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~ísq~ uq~ppppppptsetNameq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t! this.name = name; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ísq~ uq~ppppppptgetValueq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t$ return (this.value); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqàssq~ uq~ppppppptvalueq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~ísq~ uq~ppppppptsetValueq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t# this.value = value; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ísq~ uq~ppppptð// --------------------------------------------------------- Public Methods /** * Retrieve the required property and expose it as a scripting variable. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tŠ // Retrieve the required cookie value(s) ArrayList values = new ArrayList(); Cookie cookies[] = ((HttpServletRequest) pageContext.getRequest()).getCookies(); if (cookies == null) cookies = new Cookie[0]; for (int i = 0; i < cookies.length; i++) { if (name.equals(cookies[i].getName())) values.add(cookies[i]); } if ((values.size() < 1) && (value != null)) values.add(new Cookie(name, value)); if (values.size() < 1) { JspException e = new JspException (messages.getMessage("cookie.get", name)); RequestUtils.saveException(pageContext, e); throw e; } // Expose an appropriate variable containing these results if (multiple == null) { Cookie cookie = (Cookie) values.get(0); pageContext.setAttribute(id, cookie); } else { cookies = new Cookie[values.size()]; pageContext.setAttribute(id, (Cookie[]) values.toArray(cookies)); } return (SKIP_BODY); sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~ísq~ uq~pppppt6/** * Release all allocated resources. */ ptreleaseq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t super.release(); id = null; multiple = null; name = null; value = null; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ísq~ uq~ppppppptgetIdq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft! return (this.id); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqà¹sq~ uq~ppppppptidq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~ísq~ uq~ppppppptsetIdq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft this.id = id; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ísq~ uq~pppppppt getMultipleq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft' return (this.multiple); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqàßsq~ uq~ppppppptmultipleq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~ísq~ uq~pppppppt setMultipleq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft) this.multiple = multiple; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ísq~ uq~ppppppptgetNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft# return (this.name); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqásq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~ísq~ uq~ppppppptsetNameq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft! this.name = name; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ísq~ uq~ppppppptgetValueq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft$ return (this.value); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqá+sq~ uq~ppppppptvalueq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~ísq~ uq~ppppppptsetValueq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft# this.value = value; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ísq~ uq~ppppptð// --------------------------------------------------------- Public Methods /** * Retrieve the required property and expose it as a scripting variable. * * @exception JspException if a JSP exception has occurred */ pt doStartTagq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftŠ // Retrieve the required cookie value(s) ArrayList values = new ArrayList(); Cookie cookies[] = ((HttpServletRequest) pageContext.getRequest()).getCookies(); if (cookies == null) cookies = new Cookie[0]; for (int i = 0; i < cookies.length; i++) { if (name.equals(cookies[i].getName())) values.add(cookies[i]); } if ((values.size() < 1) && (value != null)) values.add(new Cookie(name, value)); if (values.size() < 1) { JspException e = new JspException (messages.getMessage("cookie.get", name)); RequestUtils.saveException(pageContext, e); throw e; } // Expose an appropriate variable containing these results if (multiple == null) { Cookie cookie = (Cookie) values.get(0); pageContext.setAttribute(id, cookie); } else { cookies = new Cookie[values.size()]; pageContext.setAttribute(id, (Cookie[]) values.toArray(cookies)); } return (SKIP_BODY); sq~ uq~q~pppq~fq~fxsq~isq~ uq~ppppq~ísq~ uq~pppppt6/** * Release all allocated resources. */ ptreleaseq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft super.release(); id = null; multiple = null; name = null; value = null; sq~ uq~ppppq~fq~fxppq~êsq~ uq~pppppppt CookieTagq~=xsq~ uq~ppppq~$sq~ uq~q~Rpppsq~ uq~q~–pppq~$q~$q~É›sq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxq€^{q~ˆÀq€XÎq~~q€Yq~”…q€Z5q~š¬q€Jq€ZÚq€L’q€[q€P¼q€\Aq~áq€]q€Thq€]Åq~†Vq~§q~»q~Ûq€\q€]Œq~É›q€_q~{q€LSq€P}q€Sëq€\Êq~!q€YWq€XSq~%¥q~„œq€^Nq€I¯q~%ppppppppppq~$Fsq~ uq~ppppppptbeanq~=xsq~ uq~ppppq~Osq~ uq~qýzpppq~$ppxsq~ uq~pppppt A/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/bean/PageTei.java,v 1.3 2001/02/12 01:26:57 craigmcc Exp $ * $Revision: 1.3 $ * $Date: 2001/02/12 01:26:57 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Implementation of TagExtraInfo for the page * tag, identifying the scripting object(s) to be made visible. * * @author Craig R. McClanahan * @version $Revision: 1.3 $ $Date: 2001/02/12 01:26:57 $ */ pt PageTei.javaq~fxsq~ uq~ppppsq~ uq~q€ZÚpppq~fxsq~ uq~ppppsq~#q~Êxq€\q€]›q€_q€\Ùq€Yfq€^]q€ñ0q€5kq~¤Éq€A(qüóppppq~$sq~ uq~q€êØpppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~™sq~ uq~ppppppptVariableInfo.javaq~$xsq~ uq~ppppsq~ uq~q~Êpppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ Buq~Jq€^~q€XÑq€Y“q€Z8q€ZÝq€[‚q€\Dq€]q€]Èq€ð›q~¤zq~¤ñq€^—q€Xêq€Y¬q€ZQq€Zöq€[›q€\]q€]q€]áq€ð´q€Acq~¤ÿqüxq€Yq€YÅq€Zjq€[q€[´q€]8q€]úq€^°q€\vq€ðÍq€A|q~¥qüq€YÞq€Zƒq€[(q€[Íq€]Qq€^Éq€\q€Yq€^q€ðæq€A•q~¤q~¥1qü©q€Y÷q€Zœq€[Aq€[æq€]jq€^âq€\¨q€Y5q€^,q€ðÿq€A®q~¤žq~¥JqüÂppppppppq~Äxq~$ppxxpq~êsq~ uq~pppppt G/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/bean/IncludeTei.java,v 1.3 2001/02/12 01:26:57 craigmcc Exp $ * $Revision: 1.3 $ * $Date: 2001/02/12 01:26:57 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Implementation of TagExtraInfo for the include * tag, identifying the scripting object(s) to be made visible. * * @author Craig R. McClanahan * @version $Revision: 1.3 $ $Date: 2001/02/12 01:26:57 $ */ ptIncludeTei.javaq~fxsq~ uq~ppppsq~ uq~q€Z5pppq~fxsq~ uq~ppppsq~#q~°xq~äq€\q€]•q€_ q€\Óq€Y`q€^Wq€ñ*q€5eqüíppppppq~$sq~ uq~ q€êÎq€X´q€ðŠq€%Øqügppppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~™sq~ uq~ppppppptTagExtraInfo.javaq~$xsq~ uq~ppppsq~ uq~q~°pppq~$xsq~ uq~q€^{q€XÎq€Yq€Z5q€ZÚq€[q€\Aq€]q€]Åq€ð˜q~¤wqüupppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxxq~Òpq~êsq~ uq~pppppt E/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/bean/HeaderTei.java,v 1.5 2001/10/04 03:26:44 craigmcc Exp $ * $Revision: 1.5 $ * $Date: 2001/10/04 03:26:44 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Implementation of TagExtraInfo for the header * tag, identifying the scripting object(s) to be made visible. * * @author Craig R. McClanahan * @version $Revision: 1.5 $ $Date: 2001/10/04 03:26:44 $ */ ptHeaderTei.javaq~fxsq~ uq~ppppsq~ uq~q€Ypppq~fxsq~ uq~ppppsq~#q~œxq~¾q~Þq€\ q€]q€_q€\Íq€YZq€^Qq€ñ$q€5_q~¤Ãq€A"qüçppppq~$sq~ uq~q€êÄpppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~™sq~ uq~pppppppt TagData.javaq~$xsq~ uq~ppppsq~ uq~q~œpppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ Buq~Jq€^q€XÔq€Y–q€Z;q€Zàq€[…q€\Gq€] q€]Ëq€ðžq~¤}q~¤ôq€^šq€Xíq€Y¯q€ZTq€Zùq€[žq€\`q€]"q€]äq€ð·q€Afq~¥qü{q€Yq€YÈq€Zmq€[q€[·q€];q€]ýq€^³q€\yq€ðÐq€Aq~¥qü“q€Yáq€Z†q€[+q€[Ðq€]Tq€^Ìq€\’q€Yq€^q€ðéq€A˜q~¤“q~¥4qü¬q€Yúq€ZŸq€[Dq€[éq€]mq€^åq€\«q€Y8q€^/q€ñq€A±q~¤¡q~¥MqüÅppppppppq~Äxq~$ppxq~°q~Êq~%q€êªsq~Qsq~ uq~ppppq~™sq~ uq~ppppppptTagSupport.javaq~$xsq~ uq~ppppsq~ uq~q~–pppq~$xqáÅqá¦qá‡q•q€ëq~$ápq~sq~ uq~pppppppttagextq~=xsq~ uq~pppppppq€ê·sq~ uq~q€ë1pppq~$ppxsq~ uq~pppppq~‡pt TagSupportq~=xsq~ uq~%q~ɰq~q€L\q€P†q€T2sq~Csq~ uq~ppppq~!sq~ uq~ppppsq~#q~–xq€X\q‚7q~†6q€I¾q€ëiq€é¼q€êWq~]sq~Csq~ uq~ppppq~;sq~ uq~ppppsq~#q~–xsq~Csq~ uq~ppppq~Usq~ uq~ppppsq~#q~–xq~R°q€57q€ïq€ñq~³Qq~µqý=q×Êq6qÝNqüqøtq~:µqê6pppppppq~$sq~ uq~ q€êºq~dq~_7q€ëqË.qÕ«pppsq~ uq~ppppq~$q~$qáÕsq~ uq~q~íq~~q~”…q~š¬q€Jq€L’q€P¼q~áq€Thq~†Vq~]2q~RÜq~_gq€æˆq€q€Ð q~¥wq€q€3q~·úqÇðqÕÅqØ‹qæÈqõ›qêPqÝßqø«q€éþpq~$sq~ uq~ppppsq~ uq~ qÑ*qÒ"qÓqÔqÕ ppppq~Äxq~$ppxxqÛÁq”žppq~êsq~ uq~pppppt +/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/bean/HeaderTag.java,v 1.9 2002/09/22 06:32:45 martinc Exp $ * $Revision: 1.9 $ * $Date: 2002/09/22 06:32:45 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Define a scripting variable based on the value(s) of the specified * header received with this request. * * @author Craig R. McClanahan * @version $Revision: 1.9 $ $Date: 2002/09/22 06:32:45 $ */ ptHeaderTag.javaq~fxsq~ uq~ppppsq~ uq~q~~pppq~fxsq~ uq~ppppsq~#q~jxsq~Csq~ uq~ppppq~;sq~ uq~ppppsq~#q~jxq~dq€4¦q~'Fq~7úsq~Csq~ uq~ppppq~Hsq~ uq~ppppsq~#q~jxq/Øqpgppppppq~$sq~ uq~q~P’pppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~8sq~ uq~ppppppptEnumeration.javaq~$xsq~ uq~ppppsq~ uq~q~jpppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~"q~Ê´q~Ëq~Ôlq~Ôöq~Õ qqq~ÖÉq~×q~×ôq~ØŽq~Ø¥qYq~Úaq~Ú±q~ÛŒq~Ü&q~Ü=qœq~Ýùq~ÞIq~ß$q~ß¾q~ßÕqßq~á‘q~ááq~â¼q~ãVq~ãmq"pppq~Äxq~$ppxxsq~Csq~ uq~ppppq~Usq~ uq~ppppsq~#q~öxsq~Csq~ uq~ppppq~Usq~ uq~ppppsq~#q~¼xsq~Csq~ uq~ppppq~Usq~ uq~ppppsq~#q~xqá÷q–(q€4ØqÛÙq”¼qlpq~$Isq~ uq~pppppt 4/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/OptionsTag.java,v 1.22 2003/02/01 05:30:28 dgraham Exp $ * $Revision: 1.22 $ * $Date: 2003/02/01 05:30:28 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Tag for creating multiple <select> options from a collection. The * associated values displayed to the user may optionally be specified by a * second collection, or will be the same as the values themselves. Each * collection may be an array of objects, a Collection, an Enumeration, * an Iterator, or a Map. * NOTE - This tag requires a Java2 (JDK 1.2 or later) platform. * * @author Florent Carpentier * @author Craig McClanahan */ ptOptionsTag.javaq~fxsq~ uq~ppppsq~ uq~q€Ð pppq~fxsq~ uq~ppppsq~#q~Jxq€4šppppppq~$sq~ uq~qÉpppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~8sq~ uq~pppppppt Arrays.javaq~$xsq~ uq~ppppsq~ uq~q~Jpppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxxq~8qâsq~Csq~ uq~ppppq~;sq~ uq~ppppsq~#q~öxsq~Csq~ uq~ppppq~;sq~ uq~ppppsq~#q~¼xsq~Csq~ uq~ppppq~;sq~ uq~ppppsq~#q~xqáñq–"q€4ÒqÛÓq”¶qlpq~$Isq~ uq~pppppt Ó/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/OptionsCollectionTag.java,v 1.9 2003/02/01 05:30:28 dgraham Exp $ * $Revision: 1.9 $ * $Date: 2003/02/01 05:30:28 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 2002-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Tag for creating multiple <select> options from a collection. The * collection may be part of the enclosing form, or may be independent of * the form. Each element of the collection must expose a 'label' and a * 'value', the property names of which are configurable by attributes of * this tag. *

            * The collection may be an array of objects, a Collection, an Enumeration, * an Iterator, or a Map. *

            * NOTE - This tag requires a Java2 (JDK 1.2 or later) platform. * * @author Martin Cooper * @version $Revision: 1.9 $ $Date: 2003/02/01 05:30:28 $ * @since Struts 1.1 */ ptOptionsCollectionTag.javaq~fxsq~ uq~ppppsq~ uq~q€pppq~fxsq~ uq~ppppsq~#q~0xq~^q€4 q€(Æq/Òpppppq~$sq~ uq~q~PÒpppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~8sq~ uq~ppppppptCollection.javaq~$xsq~ uq~ppppsq~ uq~q~0pppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxxsq~Csq~ uq~ppppq~!sq~ uq~ppppsq~#q~¼xsq~Csq~ uq~ppppq~!sq~ uq~ppppsq~#q~xq~qáëqÛÇq”¤pq~êsq~ uq~pppppt 7/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/bean/SizeTag.java,v 1.4 2002/10/25 05:28:46 dmkarr Exp $ * $Revision: 1.4 $ * $Date: 2002/10/25 05:28:46 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Define a scripting variable that will contain the number of elements * found in a specified array, Collection, or Map. * * @author Craig R. McClanahan * @version $Revision: 1.4 $ $Date: 2002/10/25 05:28:46 $ */ pt SizeTag.javaq~fxsq~ uq~ppppsq~ uq~q~ápppq~fxsq~ uq~ppppsq~#q~xq~%'q€ëcq€é¶q€êQq~] sq~Csq~ uq~ppppq~ûsq~ uq~ppppsq~#q~xq~"ôq0-q~³Kq~´ûqý1q~µJq×Äqüqønqê0q~"¼q~'"qNÄqå€qL]q€êžqp©pppppq~$sq~ uq~q€ë'pppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~sq~ uq~ppppppptPageContext.javaq~$xsq~ uq~ppppsq~ uq~q~pppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ ‘uq~›q~µ.q~µèq~¶q~¶"qƒqlÑqƒ qƒÉqƒúq„q„Lq„ØqË’q…mqíq~*mq~*Žq~µ|q~¶Iq~¶bq~¶ƒqBTqBuqBžqBÏqBèqCqËËqCJqª#qªKqO‡q~q…Žqmmq†q†Aq†rq†“q†Äq‡PqÌ q‡åqnq~*Èq~*éq~µ•q~¶ªq~¶Ãq~¶äqC”qCµqCÞqDqD(qDYqÌEqDŠq«Cq«kqOÑq~+#q~+Dqˆqn qˆqˆ¹qˆêq‰ q‰q­ƒq­«qLq~+Ùq~+úqãqo’qoÛq]q§qéq‘q‘;q‘lq‘¦q’SqÍZq“Þq”+qñq”eppppppppppq~Äxq~$ppxq~™q~q~\ìqâµsq~Qsq~ uq~ppppq~sq~ uq~ppppppptJspException.javaq~$xsq~ uq~ppppsq~ uq~q~pppq~$xq€ëSppq~³sq~ uq~ppppppptjspq~=xsq~ uq~pppppppq€ë$sq~ uq~q~Ëšpppq~$ppxsq~ uq~pppppq~‡pt JspExceptionq~=xsq~ tuq~˜q~ɪq~Šq€LVq€P€q€T,qâšq€XVq‚1q~†0q€I¸q~%!q€¹yq€€™q€½%q~*-q€ñaq€¨æq~\àq€€Rq€é°q€¤™qq€­zq€êKq~]q€ý q€Â„q~ q~"îq€õíqâoq~m4q€ó©q€~Kq€4dqâ>q~Rªq0'q€÷^q€51q€5Nq€&q€%¬q€ q€!óq€¬q€'µq€%xq€ kq€Ãq~Éßq~Êq€éq€(q€4¸q€hnq€ëq€(Òqôqq~°æq~-q€Añq~Ÿéq€_ðq€ïÃq€ïìq~\~q€Û"q€ðq€¥Íq€”ïq€Ã×q~tÎq€¯¼q€‚ïq€Òq€Œ{q€µ!q€y q€¤ðq€Éq€Žq€(¢q€&¨q€“q€xq€- q€µq€ ¦q€#Mq€ºq€.qþ˜q€$+q€ q€`q€ —q~³Eq~´õqý+q×¾q6 qá=qïqôòqüqøhqõgq~:¯qê*qßHq~"¶q€ê˜qp£qìgppppppppppppppppppppppppppppppppppppq~$sq~ uq~q€ë;pppsq~ uq~ppppq~$q~$qâÅsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxsq~ Juq~‘qÞbq~ˆ½q~Іq~‘`q~•÷q~œ©q€Jzq€Mtq€Qzq~žÙq€UJq~‡®q€a:q€aRq~Xsq~isq~ uq~sq~bsq~ uq~ppppqâçsq~ uq~ppppppptliteralq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppqâçsq~ uq~ppppppptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xppq~%sq~ uq~pppppt¯// ------------------------------------------------------ Protected Methods /** * Return the text specified by the literal value or the message resources * key, if any; otherwise return null. * * @param literal Literal text value or null * @param key Message resources key or null * * @exception JspException if both arguments are non-null */ ptmessageq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$tö if (literal != null) { if (key != null) { JspException e = new JspException (messages.getMessage("common.both")); RequestUtils.saveException(pageContext, e); throw e; } else { return (literal); } } else { return (RequestUtils.message(pageContext, getBundle(), getLocale(), key)); } sq~ uq~q~pppq~$q~$xq~sq~isq~ uq~ppppq~%sq~ uq~ppppptå/** * Prepares the style attributes for inclusion in the component's HTML tag. * @return The prepared String for inclusion in the HTML tag. * @exception JspException if invalid attributes are specified */ pt prepareStylesq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$t× String value = null; StringBuffer styles = new StringBuffer(); if (style != null) { styles.append(" style=\""); styles.append(getStyle()); styles.append("\""); } if (styleClass != null) { styles.append(" class=\""); styles.append(getStyleClass()); styles.append("\""); } if (styleId != null) { styles.append(" id=\""); styles.append(getStyleId()); styles.append("\""); } value = message(title, titleKey); if (value != null) { styles.append(" title=\""); styles.append(value); styles.append("\""); } value = message(alt, altKey); if (value != null) { styles.append(" alt=\""); styles.append(value); styles.append("\""); } return styles.toString(); sq~ uq~q~pppq~$q~$xq~Xq€ŠÕq~]xq~Y}q~Yq~Yq~j¨q~j¸q~jÈq~V q€þ/q€þ?q~Sãq~b‹q~bÞq€Ûxq~gq~hq~Wq€çq€çq~oq~s®q~uvq~tYq€®pq€°q€¯q€ßq€ƒñq€Ñq€Òq€Ó´q€qÏq€qßq€qïq€rq€³Õq€µq€´€q€º;q€ºKq€º[q~híq~hçq€wÁq€ykq€xlq~oGq€¦Šq~p8q~X`q~§7q€8Sq~¥tqÿØq~§*qþ4q€'Ùq~§Dq€Kq€[q€2q€q~©‡q~©çq€,Xq€Tq€ Eq~§q€6'q€8q€Cq€ŒqþAq€#Êq€ §q€ ®q€ ¹q€ Îq€µq€Åq_qoqqÈqØqèq~ˆ²q~žÎq~‡£q~Vq~SØq~b˜q~bÓq~Vøq~o1q~gq~s£q€®eq€Ôq€Ðøq€‹q€³Êq€w¶q~o”q€Œîq€ŽVq~¥iqÿBq€q€•q~©|q~©Üq€Òq€ Ãq€":q€·q€óqþµq€$Hq€ %q€}q€ ´q~¸qÈEqÈUqÐêqÑ qÑ*qƒqƒqƒÆq„q„Iq„Õq…jqêq~*jq~*‹qýq qqrq‚q’qßq~‹þq~Œq~Œq~’q~—q€D@q€Jæq€N,q€R q~¡q€Vq€bÀq€bÐq€bèq~X sq~isq~ uq~sq~bsq~ uq~ppppqãsq~ uq~ppppppptliteralq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppqãsq~ uq~ppppppptkeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xppq~%sq~ uq~pppppt¯// ------------------------------------------------------ Protected Methods /** * Return the text specified by the literal value or the message resources * key, if any; otherwise return null. * * @param literal Literal text value or null * @param key Message resources key or null * * @exception JspException if both arguments are non-null */ ptmessageq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥ta if (literal != null) { if (key != null) { JspException e = new JspException (messages.getMessage("common.both")); RequestUtils.saveException(pageContext, e); throw e; } else { return (literal); } } else { if (key != null) { return (RequestUtils.message(pageContext, getBundle(), getLocale(), key)); } else { return null; } } sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqã7sq~ uq~pppppppthandlersq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ùpq~§xsq~bsq~ uq~ppppqã7sq~ uq~ppppppptnameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xppq~%sq~ uq~pppppt/** * Appends bean name with index in brackets for tags with * 'true' value in 'indexed' attribute. * @param handlers The StringBuffer that output will be appended to. * @exception JspException if 'indexed' tag used outside of iterate tag. */ pt prepareIndexq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥tÅ // look for outer iterate tag IterateTag iterateTag = (IterateTag) findAncestorWithClass(this, IterateTag.class); if (iterateTag == null) { // this tag should only be nested in iteratetag, if it's not, throw exception JspException e = new JspException(messages.getMessage("indexed.noEnclosingIterate")); RequestUtils.saveException(pageContext, e); throw e; } if( name!=null ) handlers.append( name ); handlers.append("["); handlers.append(iterateTag.getIndex()); handlers.append("]"); if( name!=null ) handlers.append("."); sq~ uq~q~pppq~¥q~¥xsq~isq~ uq~ppppq~%sq~ uq~ppppptå/** * Prepares the style attributes for inclusion in the component's HTML tag. * @return The prepared String for inclusion in the HTML tag. * @exception JspException if invalid attributes are specified */ pt prepareStylesq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥t× String value = null; StringBuffer styles = new StringBuffer(); if (style != null) { styles.append(" style=\""); styles.append(getStyle()); styles.append("\""); } if (styleClass != null) { styles.append(" class=\""); styles.append(getStyleClass()); styles.append("\""); } if (styleId != null) { styles.append(" id=\""); styles.append(getStyleId()); styles.append("\""); } value = message(title, titleKey); if (value != null) { styles.append(" title=\""); styles.append(value); styles.append("\""); } value = message(alt, altKey); if (value != null) { styles.append(" alt=\""); styles.append(value); styles.append("\""); } return styles.toString(); sq~ uq~q~pppq~¥q~¥xq€ù°q€ùÀq~]®q~Yýq~Z q~Zq~k8q~kHq~kXq€þåq€þõq€ÿq q€Ýq€Ý q€Ýàq€¿q~h§q€óÕq€çŽq€çžq~oTq~puq€ªpq€™£q€™³q€™Óq€™ãq€j–q€Çˆq€Ç˜q€Ç¨q€ÇÈq~v¶q~vÆq~vÖq€° q€°°q€°Àq€…!q€…qq€Õq€Õq€Õdq€s)q€s9q€sIq€siq€¶q€¶q€¶%q€ºËq€ºÛq€ºëq~hýq~i q€zUq€zeq€zuq€¦êq€¦úq€§ q€ò«q€5Ÿq€8™q€;øq€<q€<(q€'ñq€(q~§Jq€¡q€±q€Bq€'q€/q€/q€//q€dq€ Uq€5ßq€6›q€Xq€˜q€¨qþGq€#Úq€ ·q€q€ æq€ öq€­q€½qequq…qqq!q~¯q€_gq~œžq~žæq~‡»qCq~Sðq€ŠOq~chq~bëq€÷ˆq€¥(q€“ìq€Â«q~s»q€®}q€ìq€Ñq€‹Kq€³âq€wÎq~oÍq€1q€Ž™q€@Ÿqÿmq€^q€Øq~©”q~©ôq€q€!q€"}q€úq€6q€'.q€$‹q€ hq€Àq€ ÷qÎqÈÍqÈÝqÑâqÒqÒ"qà[qàkqàwqÖ2qÖBqØ;qÝÔqò>qòNqçtqö>qöNqê½qêÍqÞ´qà=qï6qïFqß\qÞÇqØ&qùtqù„q~:æqBAqB´qBåqCqC?q…‹q†q†>q†q†Áq‡Mq‡âqkq~*Åq~*æqßÒq~Hq~Xq~hq~’Ðq~˜/q€Fq€KRq€Näq€Ržq€dfq€dvq€dŽq€Vºq~¡ïq€¶ñq€·q€·q~iq~i-q€»iq€»yq€»‰q€{oq€{q€{q~X0q€òáq€à2q€àBq€à‚q~Zq~Zq~Z­q~odq~p…q€«fq€q€)q€Iq€Yq~]äq~kÈq~kØq~kèq€À4q~h·q€ÿ‹q€ÿ›q€ÿ«q€±Vq€±fq€±vq€§zq€§Šq€§šq€l\sq~isq~ uq~sq~bsq~ uq~ppppqãgsq~ uq~ppppppptliteralq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqãgsq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xppq~%sq~ uq~pppppt¯// ------------------------------------------------------ Protected Methods /** * Return the text specified by the literal value or the message resources * key, if any; otherwise return null. * * @param literal Literal text value or null * @param key Message resources key or null * * @exception JspException if both arguments are non-null */ ptmessageq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–ta if (literal != null) { if (key != null) { JspException e = new JspException (messages.getMessage("common.both")); RequestUtils.saveException(pageContext, e); throw e; } else { return (literal); } } else { if (key != null) { return (RequestUtils.message(pageContext, getBundle(), getLocale(), key)); } else { return null; } } sq~ uq~q~pppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqã‡sq~ uq~pppppppthandlersq~rxsq~ uq~pppppq~–q~—q~–q~ùpq~˜xsq~bsq~ uq~ppppqã‡sq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xppq~%sq~ uq~pppppt/** * Appends bean name with index in brackets for tags with * 'true' value in 'indexed' attribute. * @param handlers The StringBuffer that output will be appended to. * @exception JspException if 'indexed' tag used outside of iterate tag. */ pt prepareIndexq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–tÅ // look for outer iterate tag IterateTag iterateTag = (IterateTag) findAncestorWithClass(this, IterateTag.class); if (iterateTag == null) { // this tag should only be nested in iteratetag, if it's not, throw exception JspException e = new JspException(messages.getMessage("indexed.noEnclosingIterate")); RequestUtils.saveException(pageContext, e); throw e; } if( name!=null ) handlers.append( name ); handlers.append("["); handlers.append(iterateTag.getIndex()); handlers.append("]"); if( name!=null ) handlers.append("."); sq~ uq~q~pppq~–q~–xsq~isq~ uq~ppppq~%sq~ uq~ppppptå/** * Prepares the style attributes for inclusion in the component's HTML tag. * @return The prepared String for inclusion in the HTML tag. * @exception JspException if invalid attributes are specified */ pt prepareStylesq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–t× String value = null; StringBuffer styles = new StringBuffer(); if (style != null) { styles.append(" style=\""); styles.append(getStyle()); styles.append("\""); } if (styleClass != null) { styles.append(" class=\""); styles.append(getStyleClass()); styles.append("\""); } if (styleId != null) { styles.append(" id=\""); styles.append(getStyleId()); styles.append("\""); } value = message(title, titleKey); if (value != null) { styles.append(" title=\""); styles.append(value); styles.append("\""); } value = message(alt, altKey); if (value != null) { styles.append(" alt=\""); styles.append(value); styles.append("\""); } return styles.toString(); sq~ uq~q~pppq~–q~–xq€úÀq€úÐq Øq€óåq€èq€è*q€Êq€Ê"q€Ê2q€ÊRq~x&q~x6q~xFq€t¹q€tÉq€tÙq€tùq€†“q€†ãq€Ö´q€ÖÄq€×q€=gq€=wq€=—q~§Zq€Rq€7q€tq€ eq€hqþWq€#êq€ Çq€q€5¯q€8ßq€0µq€0Åq€0Õq€5ïq€7q€q€q€ q€ q€¥q€µq€÷q€q€(q€()q~¯©qÍqÝqíqq q°q€_wq~œ¶q~žöq~‡ËqSq~Tq€Š’q€÷˜q€¥8q€”q€Â»q~sËq€®q€üq€Ñ q€‹sq€³òq€wÞq~oõq€Yq€ŽÁq~c­q~bûq€@¯qÿ•q€†q€q€=q€!.q€"¥q€"q€^q€'>q€$³q€ q€èq€ q~©¤q~ªqβqÉmqÉ}qÒÚqÒúqÓqá—qáQqàÖqÖ¢qÖ²qßîqàŒqïýqð qßlqÞÕqõ-që,qënull. * * @param literal Literal text value or null * @param key Message resources key or null * * @exception JspException if both arguments are non-null */ ptmessageq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t if (literal != null) { if (key != null) { JspException e = new JspException(messages.getMessage("common.both")); RequestUtils.saveException(pageContext, e); throw e; } else { return (literal); } } else { if (key != null) { return (RequestUtils.message(pageContext, getBundle(), getLocale(), key)); } else { return null; } } sq~ uq~q~pppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqã×sq~ uq~pppppppthandlersq~{xsq~ uq~pppppq~~q~q~~q~ùpq~€xsq~bsq~ uq~ppppqã×sq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xppq~%sq~ uq~pppppt/** * Appends bean name with index in brackets for tags with * 'true' value in 'indexed' attribute. * @param handlers The StringBuffer that output will be appended to. * @exception JspException if 'indexed' tag used outside of iterate tag. */ pt prepareIndexq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t­ int index = 0; boolean found = false; // look for outer iterate tag IterateTag iterateTag = (IterateTag) findAncestorWithClass(this, IterateTag.class); // Look for JSTL loops if (iterateTag == null) { Integer i = getJstlLoopIndex(); if (i != null) { index = i.intValue(); found = true; } } else { index = iterateTag.getIndex(); found = true; } if (!found) { // this tag should only be nested in iteratetag, if it's not, throw exception JspException e = new JspException(messages.getMessage("indexed.noEnclosingIterate")); RequestUtils.saveException(pageContext, e); throw e; } if (name != null) handlers.append(name); handlers.append("["); handlers.append(index); handlers.append("]"); if (name != null) handlers.append("."); sq~ uq~q~pppq~~q~~xsq~isq~ uq~ppppq~%sq~ uq~ppppptå/** * Prepares the style attributes for inclusion in the component's HTML tag. * @return The prepared String for inclusion in the HTML tag. * @exception JspException if invalid attributes are specified */ pt prepareStylesq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t× String value = null; StringBuffer styles = new StringBuffer(); if (style != null) { styles.append(" style=\""); styles.append(getStyle()); styles.append("\""); } if (styleClass != null) { styles.append(" class=\""); styles.append(getStyleClass()); styles.append("\""); } if (styleId != null) { styles.append(" id=\""); styles.append(getStyleId()); styles.append("\""); } value = message(title, titleKey); if (value != null) { styles.append(" title=\""); styles.append(value); styles.append("\""); } value = message(alt, altKey); if (value != null) { styles.append(" alt=\""); styles.append(value); styles.append("\""); } return styles.toString(); sq~ uq~q~pppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqäsq~ uq~ppppppptbeanNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqäsq~ uq~ppppppptpropertyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xppq~%sq~ uq~pppppt–/** * Searches all scopes for the bean and calls BeanUtils.getProperty() with the * given arguments and converts any exceptions into JspException. * * @param beanName The name of the object to get the property from. * @param property The name of the property to get. * @return The value of the property. * @throws JspException * @since Struts 1.1 */ ptlookupPropertyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~tP Object bean = RequestUtils.lookup(this.pageContext, beanName, null); if (bean == null) { throw new JspException(messages.getMessage("getter.bean", beanName)); } try { return BeanUtils.getProperty(bean, property); } catch (IllegalAccessException e) { throw new JspException( messages.getMessage("getter.access", property, beanName)); } catch (InvocationTargetException e) { Throwable t = e.getTargetException(); throw new JspException( messages.getMessage("getter.result", property, t.toString())); } catch (NoSuchMethodException e) { throw new JspException( messages.getMessage("getter.method", property, beanName)); } sq~ uq~q~pppq~~q~~xq€² q€²q€²,q~X@q€ˆq€ˆUq~lXq~lhq~lxq€óq€ó'q€ó7q€|‰q€|™q€|©q€|¹q€|Éq€ÌÐq€Ìàq€Ìðq€Íq€Ødq€Øtq€ØÄq Ÿq€nq€óõq€>Öq€>æq€?q~§jq€bq€Gq€„q€ uq€xqþgq€#úq€ ×q€'q€5¿q€9%q€5ÿq€7ƒq€q€­q€pq€€q€2[q€2kq€2{q€ 6q€ Fq€Mq€]q€(Aq€(Qq 5q Eq Uqq/q?q~°q~°)q€_‡q~Š“q~œÆq~!q~Ÿq~Ÿyq~‡Ûq~ˆNqcq€þLq~Tq q€Šºq€ŠÊq~cäq~c q€÷¨q€Šâq€¥Hq~pRq€”q€”oq€ÂËq€½hq~sÛq~tNq€®q€¯q€‚ q€‚q€Ñ0q€Òq€‹›q€‹q€´q€´uq€wîq€xaq~pq~p-q€Žéq€ŽPq€q€Œèq€@¿qÿåqÿ½qÿÍq€®q€q€(q€8q~©´q~ªq€,Mq€eq€uq€!Vq€!fq€"Íq€"Ýq€Jq€Zq€†q€–q€'Nq€&0q€$Ûq€$ëq€ ¸q€ Èq€q€ q€ Gq€ WqÊ qÊqÏJqÓÒqÓòqÔq×q×"qàqà¤qðÄqðÔqß|qàíqá¶qáaqónqß¾qóþqôqûqû$q÷Žq÷žqõDqë›që«qéqÞìqD qDÁqE4qEeqE–qE¿q~+{q~+œq‹EqŒ qŒ2qŒKqŒqŒÎqqµqqmqáBq~”@q€L*q€PTq€SÂq~£«q€X*q~šgq€g²q€gÂq€gÚq€I†q~Üq~ìq~üq€¸íq€¸ýq€¹ q€¹q€¹=q€¹Mq~{q~{%q~{5q€¼±q€¼Áq€¼Ñq€¼ñq~i]q~imq~[­q~[½q~[Íq€¨šq€¨ªq€¨ºq€å¥q€åµq€ååq€æq€àq€ðq€€q€€q€~wq€€0q€éBq€éRq€¤q€¤q€¤7q€¤Gq×qçq÷q~o„q~p¥q€­Rq€ê0q~^¶q€üàq€üðq€Âhq~h×sq~isq~ uq~sq~bsq~ uq~ppppqä'sq~ uq~ppppppptliteralq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqä'sq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxppq~%sq~ uq~pppppt¯// ------------------------------------------------------ Protected Methods /** * Return the text specified by the literal value or the message resources * key, if any; otherwise return null. * * @param literal Literal text value or null * @param key Message resources key or null * * @exception JspException if both arguments are non-null */ ptmessageq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft if (literal != null) { if (key != null) { JspException e = new JspException(messages.getMessage("common.both")); RequestUtils.saveException(pageContext, e); throw e; } else { return (literal); } } else { if (key != null) { return (RequestUtils.message(pageContext, getBundle(), getLocale(), key)); } else { return null; } } sq~ uq~q~pppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqäGsq~ uq~pppppppthandlersq~cxsq~ uq~pppppq~fq~gq~fq~ùpq~hxsq~bsq~ uq~ppppqäGsq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxppq~%sq~ uq~pppppt/** * Appends bean name with index in brackets for tags with * 'true' value in 'indexed' attribute. * @param handlers The StringBuffer that output will be appended to. * @exception JspException if 'indexed' tag used outside of iterate tag. */ pt prepareIndexq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft­ int index = 0; boolean found = false; // look for outer iterate tag IterateTag iterateTag = (IterateTag) findAncestorWithClass(this, IterateTag.class); // Look for JSTL loops if (iterateTag == null) { Integer i = getJstlLoopIndex(); if (i != null) { index = i.intValue(); found = true; } } else { index = iterateTag.getIndex(); found = true; } if (!found) { // this tag should only be nested in iteratetag, if it's not, throw exception JspException e = new JspException(messages.getMessage("indexed.noEnclosingIterate")); RequestUtils.saveException(pageContext, e); throw e; } if (name != null) handlers.append(name); handlers.append("["); handlers.append(index); handlers.append("]"); if (name != null) handlers.append("."); sq~ uq~q~pppq~fq~fxsq~isq~ uq~ppppq~%sq~ uq~ppppptå/** * Prepares the style attributes for inclusion in the component's HTML tag. * @return The prepared String for inclusion in the HTML tag. * @exception JspException if invalid attributes are specified */ pt prepareStylesq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft× String value = null; StringBuffer styles = new StringBuffer(); if (style != null) { styles.append(" style=\""); styles.append(getStyle()); styles.append("\""); } if (styleClass != null) { styles.append(" class=\""); styles.append(getStyleClass()); styles.append("\""); } if (styleId != null) { styles.append(" id=\""); styles.append(getStyleId()); styles.append("\""); } value = message(title, titleKey); if (value != null) { styles.append(" title=\""); styles.append(value); styles.append("\""); } value = message(alt, altKey); if (value != null) { styles.append(" alt=\""); styles.append(value); styles.append("\""); } return styles.toString(); sq~ uq~q~pppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqäwsq~ uq~ppppppptbeanNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqäwsq~ uq~ppppppptpropertyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxppq~%sq~ uq~pppppt–/** * Searches all scopes for the bean and calls BeanUtils.getProperty() with the * given arguments and converts any exceptions into JspException. * * @param beanName The name of the object to get the property from. * @param property The name of the property to get. * @return The value of the property. * @throws JspException * @since Struts 1.1 */ ptlookupPropertyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ftP Object bean = RequestUtils.lookup(this.pageContext, beanName, null); if (bean == null) { throw new JspException(messages.getMessage("getter.bean", beanName)); } try { return BeanUtils.getProperty(bean, property); } catch (IllegalAccessException e) { throw new JspException( messages.getMessage("getter.access", property, beanName)); } catch (InvocationTargetException e) { Throwable t = e.getTargetException(); throw new JspException( messages.getMessage("getter.result", property, t.toString())); } catch (NoSuchMethodException e) { throw new JspException( messages.getMessage("getter.method", property, beanName)); } sq~ uq~q~pppq~fq~fxq€²Âq€²Òq€²âq~XPq€‰wq€‰Çq~lèq~løq~mq€ómq€ó}q€óq€}Ãq€}Óq€}ãq€}óq€~q€Ï€q€Ïq€Ï q€ÏÀq€Úq€Ú$q€ÚtqWq€o>q€ôq€@Eq€@Uq€@uq~§zq€rq€Wq€”q€ …q€ˆqþwq€$ q€ çq€7q€5Ïq€9kq€6q€7÷q€•q€¥q€Üq€ìq€4q€4q€4!q€ ^q€ nq€£q€³q€(iq€(yq ·q Çq ×qÕqåqõq~°¥q~°µq€_—q~Š£q~œÖq~oq~Ÿq~ŸÇq~‡ëq~ˆœqsq€þ\q~T q Yq€lq€6q~dgq~cq€÷¸q€Šòq€¥Xq~pbq€”$q€”‡q€ÂÛq€½xq~sëq~tfq€®­q€¯(q€‚q€‚Íq€Ñ@q€Ò'q€‹Éq€‹Ùq€´q€´q€wþq€xyq~qmq~pµq€q€'q€¯q€¿q€@Ïqÿõq€&vq€q€Üq€ìq€fq€vq~©Äq~ª$q€,eq€£q€³q€!”q€!¤q€# q€#q€xq€ˆq€´q€Äq€'|q€&@q€%q€%)q€ öq€ q€Nq€^q€ …q€ •qÊ­qʽqÏâqÔÊqÔêqÕ qׂq×’qàqà¼qñ‹qñ›qߌqáqáÕqáqqîæqßÖqôÆqôÖqûäqûôqø6qøFqîñqì qìqéáqßqEàqFqFtqF¥qFÖqFÿq~+Öq~+÷qàq¤qÍqæq‘8q‘iq‘£q’Pq”(qîqäDqäTqädqätqä„qä”qä¤pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppxqâ«q•q~"ÜqËéqË_q•Åq€4FqÛÍq”ªpq~$Isq~ uq~pppppt å/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/BaseHandlerTag.java,v 1.25 2003/05/18 18:57:13 dgraham Exp $ * $Revision: 1.25 $ * $Date: 2003/05/18 18:57:13 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Base class for tags that render form elements capable of including JavaScript * event handlers and/or CSS Style attributes. This class does not implement * the doStartTag() or doEndTag() methods. Subclasses should provide * appropriate implementations of these. * * @author Don Clasen * @author James Turner * @version $Revision: 1.25 $ $Date: 2003/05/18 18:57:13 $ */ ptBaseHandlerTag.javaq~fxsq~ uq~ppppsq~ uq~q~%pppq~fxsq~ uq~ppppsq~#q~ðxq~"èq~>q€~Eq~Xq~ÉÓq~"°q~)ûqìapppppq~¥sq~ uq~sq~)sq~ uq~ppppsq~/sq~ uq~sq~)sq~ uq~ppppqä§sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bddqpxq~Ösq~)sq~ uq~ppppqä§sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bddqqpxq~Üqä¤pq~ sq~ uq~pppp. * *//** *

            An abstract Action that dispatches to a public * method that is named by the request parameter whose name is specified * by the parameter property of the corresponding * ActionMapping. This Action is useful for developers who prefer to * combine many similar actions into a single Action class, in order to * simplify their application design.

            * *

            To configure the use of this action in your * struts-config.xml file, create an entry like this:

            * * * <action path="/saveSubscription" * type="org.apache.struts.actions.DispatchAction" * name="subscriptionForm" * scope="request" * input="/subscription.jsp" * parameter="method"/> * * *

            which will use the value of the request parameter named "method" * to pick the appropriate "execute" method, which must have the same * signature (other than method name) of the standard Action.execute * method. For example, you might have the following three methods in the * same action:

            *
              *
            • public ActionForward delete(ActionMapping mapping, ActionForm form, * HttpServletRequest request, HttpServletResponse response) * throws Exception
            • *
            • public ActionForward insert(ActionMapping mapping, ActionForm form, * HttpServletRequest request, HttpServletResponse response) * throws Exception
            • *
            • public ActionForward update(ActionMapping mapping, ActionForm form, * HttpServletRequest request, HttpServletResponse response) * throws Exception
            • *
            *

            and call one of the methods with a URL like this:

            * * http://localhost:8080/myapp/saveSubscription.do?method=update * * *

            NOTE - All of the other mapping characteristics of * this action must be shared by the various handlers. This places some * constraints over what types of handlers may reasonably be packaged into * the same DispatchAction subclass.

            * * @author Niall Pemberton * @author Craig R. McClanahan * @author Ted Husted * @version $Revision: 1.14 $ $Date: 2003/02/18 04:01:07 $ */ptDispatchAction.javaq~fxsq~ uq~ppppsq~ uq~q~;[pppq~fxsq~ uq~ppppsq~#q~Üxq~þq~*pppq~$sq~ uq~qä´pppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~Ùsq~ uq~pppppppt Method.javaq~$xsq~ uq~ppppsq~ uq~q~Üpppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ q~;Pq@)q@©qA)sq~(sq~ uq~ppppq~%sq~ uq~ppppppptloopTagSupportGetStatusq~{xsq~ uq~pppppq~~q~q~~q~Üpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~d1xpppt nullq~~q~~q~~xsq~(sq~ uq~ppppq~%sq~ uq~ppppppptloopTagStatusGetIndexq~{xsq~ uq~pppppq~~q~q~~q~Üpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~d1xpppt nullq~~q~~q~~xq‹'qA©pq~Äxq~$ppxsq~Qsq~ uq~ppppq~Ùsq~ uq~pppppppt Array.javaq~$xsq~ uq~ppppsq~ uq~q~Öpppq~$xqäÌqåq~ðpppq~~sq~ uq~ppppppptreflectq~=xsq~ uq~ppppqä§sq~ uq~sq~1sq~ uq~ppppq~sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bdd Áqpxq~Ùpppq~$ppxsq~ uq~pppppq~‡ptArrayq~=xsq~ uq~ q~Ðq~Ɔq~$q€4Žpppppq~$sq~ uq~qäªpppsq~ uq~ppppq~$q~$qå;sq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxxsq~Csq~ uq~ppppq~Ísq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq~Ísq~ uq~ppppsq~#q~öxq~E¬q~Êsq~Csq~ uq~ppppq~Ísq~ uq~ppppsq~#q~°xsq~Csq~ uq~ppppq~Ísq~ uq~ppppsq~#q~Œxq~Æ:q~)ïq~ÆqqWsq~Csq~ uq~ppppq~Ísq~ uq~ppppsq~#q~#xsq~Csq~ uq~ppppq~Ísq~ uq~ppppsq~#q~éxpq~Bsq~ uq~ppppptV/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/action/DynaActionForm.java,v 1.8 2003/04/10 02:35:28 dgraham Exp $ * $Revision: 1.8 $ * $Date: 2003/04/10 02:35:28 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** *

            Specialized subclass of ActionForm that allows the creation * of form beans with dynamic sets of properties, without requiring the * developer to create a Java class for each type of form bean.

            * *

            USAGE NOTE - Since Struts 1.1, the * reset() method no longer initializes property values to those * specified in <form-property> elements in the Struts * module configuration file. If you wish to utilize that behavior, the * simplest solution is to subclass DynaActionForm and call * the initialize() method inside it.

            * * @author Craig R. McClanahan * @version $Revision: 1.8 $ $Date: 2003/04/10 02:35:28 $ * @since Struts 1.1 */ ptDynaActionForm.javaq~fxsq~ uq~ppppsq~ uq~q~Ępppq~fxsq~ uq~ppppsq~#q~¼xqLq•®q~Î[qâ”q‚%q~*'q€¤‡qâiq€4Xqâ8q0!q€Ýq€4²q€(Ìq”Ôq~':q~ËÌqåqåEq®!q~8q9;qO%q[jq°tq~EÞqp…qfqf[qf™ppppppq~$sq~ uq~q~PÈpppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~8sq~ uq~ppppppptMap.javaq~$xsq~ uq~ppppsq~ uq~q~¼pppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ ’uq~›q6qDq‚q~´q~Ìq~Ì‹q~ÊKq~Ö3qƒqlñq’sq~isq~ uq~ppppq~asq~ uq~pppppppt getPropertiesq~¢xsq~ uq~pppppq~¥q~¦q~¥q~¼pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t) return (this.properties); sq~ uq~ppppq~¥q~¥xq~Ìñq~‡q©Œq©£q©»qž-qž”qžâqŸ¾q~6!q}Ÿq}Èq~6Vq~6žq~6½q~6åq~7q~6>q~!Ïq~4Þq~6q˜ˆq˜°qTkq~2pq~2½q~ÙËq…‹qmqÿq”¬q¢qàq~ÍWsq~isq~ uq~ppppq~asq~ uq~pppppppt getPropertiesq~rxsq~ uq~pppppq~–q~—q~–q~¼pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t) return (this.properties); sq~ uq~ppppq~–q~–xqª¬qªÃqªÛq°q~(q~(%q~)9q~)Lqu¿q¡Pq¡žq¢zqG†qG¯q~σqy¨qQqqQqQ¸qQØqR qU^q~3Dq™ q™,q~Ýcqˆqn)qžoq•qunqwQq°#qRoqRŽqR¶qRÖqSqz*qVMq~3Ëq™Óq™òq~àûq‹6q‹EqnÅqoq”qŸq•ìqœ!q`sq~isq~ uq~ppppq~asq~ uq~pppppppt getPropertiesq~cxsq~ uq~pppppq~fq~gq~fq~¼pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft) return (this.properties); sq~ uq~ppppq~fq~fxq~Î#q¦Èq§¤qJqJ8q~Ñ?q¬ìq­q­qw¡qxÝqu§qxðq°BqSmqSŒqS´qSÔqTqz¬qWjavax.sql.DataSource * implementation class. */ /** * The fully qualified class name of the javax.sql.DataSource * implementation class. */ /** * The fully qualified class name of the javax.sql.DataSource * implementation class. */ /** * The fully qualified class name of the javax.sql.DataSource * implementation class. */ /** * The fully qualified class name of the javax.sql.DataSource * implementation class. */ pttypeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt+ "org.apache.struts.util.GenericDataSource"q~$q~$q~$xsq~isq~ uq~ppppq~asq~ uq~ppppppptgetTypeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t# return (this.type); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppqæsq~ uq~pppppppttypeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~asq~ uq~ppppppptsetTypeq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.type = type; sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppqæsq~ uq~ppppppptnameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppqæsq~ uq~ppppppptvalueq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xppq~asq~ uq~ppppptç// --------------------------------------------------------- Public Methods /** * Add a new custom configuration property. * * @param name Custom property name * @param value Custom property value */ pt addPropertyq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tŸ if (configured) { throw new IllegalStateException("Configuration is frozen"); } properties.put(name, value); sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~asq~ uq~ppppptC/** * Freeze the configuration of this data source. */ ptfreezeq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t& configured = true; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~asq~ uq~ppppptD/** * Return a String representation of this object. */ pttoStringq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t? StringBuffer sb = new StringBuffer("DataSourceConfig["); sb.append("key="); sb.append(key); sb.append(",type="); sb.append(type); Iterator names = properties.keySet().iterator(); while (names.hasNext()) { String name = (String) names.next(); String value = (String) properties.get(name); sb.append(','); sb.append(name); sb.append('='); sb.append(value); } sb.append("]"); return (sb.toString()); sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~asq~ uq~ppppppptgetKeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t" return (this.key); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqænsq~ uq~ppppppptkeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~asq~ uq~ppppppptsetKeyq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tŽ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.key = key; sq~ uq~ppppq~¥q~¥xqå¨sq~isq~ uq~ppppq~asq~ uq~ppppppptgetTypeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t# return (this.type); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqæ”sq~ uq~pppppppttypeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~asq~ uq~ppppppptsetTypeq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.type = type; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqæ«sq~ uq~ppppppptnameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppqæ«sq~ uq~ppppppptvalueq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xppq~asq~ uq~ppppptç// --------------------------------------------------------- Public Methods /** * Add a new custom configuration property. * * @param name Custom property name * @param value Custom property value */ pt addPropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tŸ if (configured) { throw new IllegalStateException("Configuration is frozen"); } properties.put(name, value); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~asq~ uq~ppppptC/** * Freeze the configuration of this data source. */ ptfreezeq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t& configured = true; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~asq~ uq~ppppptD/** * Return a String representation of this object. */ pttoStringq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t? StringBuffer sb = new StringBuffer("DataSourceConfig["); sb.append("key="); sb.append(key); sb.append(",type="); sb.append(type); Iterator names = properties.keySet().iterator(); while (names.hasNext()) { String name = (String) names.next(); String value = (String) properties.get(name); sb.append(','); sb.append(name); sb.append('='); sb.append(value); } sb.append("]"); return (sb.toString()); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~asq~ uq~ppppppptgetKeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t" return (this.key); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqæúsq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~asq~ uq~ppppppptsetKeyq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tŽ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.key = key; sq~ uq~ppppq~–q~–xqå·sq~isq~ uq~ppppq~asq~ uq~ppppppptgetTypeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t# return (this.type); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqç sq~ uq~pppppppttypeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~asq~ uq~ppppppptsetTypeq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.type = type; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqç7sq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqç7sq~ uq~ppppppptvalueq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xppq~asq~ uq~ppppptç// --------------------------------------------------------- Public Methods /** * Add a new custom configuration property. * * @param name Custom property name * @param value Custom property value */ pt addPropertyq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tŸ if (configured) { throw new IllegalStateException("Configuration is frozen"); } properties.put(name, value); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~asq~ uq~ppppptC/** * Freeze the configuration of this data source. */ ptfreezeq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t& configured = true; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~asq~ uq~ppppptD/** * Return a String representation of this object. */ pttoStringq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t? StringBuffer sb = new StringBuffer("DataSourceConfig["); sb.append("key="); sb.append(key); sb.append(",type="); sb.append(type); Iterator names = properties.keySet().iterator(); while (names.hasNext()) { String name = (String) names.next(); String value = (String) properties.get(name); sb.append(','); sb.append(name); sb.append('='); sb.append(value); } sb.append("]"); return (sb.toString()); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~asq~ uq~ppppppptgetKeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t" return (this.key); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqç†sq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~asq~ uq~ppppppptsetKeyq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tŽ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.key = key; sq~ uq~ppppq~~q~~xqåÆsq~isq~ uq~ppppq~asq~ uq~ppppppptgetTypeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t# return (this.type); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqç¬sq~ uq~pppppppttypeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~asq~ uq~ppppppptsetTypeq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.type = type; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqçÃsq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqçÃsq~ uq~ppppppptvalueq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xppq~asq~ uq~ppppptç// --------------------------------------------------------- Public Methods /** * Add a new custom configuration property. * * @param name Custom property name * @param value Custom property value */ pt addPropertyq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tŸ if (configured) { throw new IllegalStateException("Configuration is frozen"); } properties.put(name, value); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~asq~ uq~ppppptC/** * Freeze the configuration of this data source. */ ptfreezeq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t& configured = true; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~asq~ uq~ppppptD/** * Return a String representation of this object. */ pttoStringq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t? StringBuffer sb = new StringBuffer("DataSourceConfig["); sb.append("key="); sb.append(key); sb.append(",type="); sb.append(type); Iterator names = properties.keySet().iterator(); while (names.hasNext()) { String name = (String) names.next(); String value = (String) properties.get(name); sb.append(','); sb.append(name); sb.append('='); sb.append(value); } sb.append("]"); return (sb.toString()); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~asq~ uq~ppppppptgetKeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft" return (this.key); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqèsq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~asq~ uq~ppppppptsetKeyq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftŽ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.key = key; sq~ uq~ppppq~fq~fxqåÕsq~isq~ uq~ppppq~asq~ uq~ppppppptgetTypeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft# return (this.type); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqè8sq~ uq~pppppppttypeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~asq~ uq~ppppppptsetTypeq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.type = type; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqèOsq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqèOsq~ uq~ppppppptvalueq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxppq~asq~ uq~ppppptç// --------------------------------------------------------- Public Methods /** * Add a new custom configuration property. * * @param name Custom property name * @param value Custom property value */ pt addPropertyq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftŸ if (configured) { throw new IllegalStateException("Configuration is frozen"); } properties.put(name, value); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~asq~ uq~ppppptC/** * Freeze the configuration of this data source. */ ptfreezeq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft& configured = true; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~asq~ uq~ppppptD/** * Return a String representation of this object. */ pttoStringq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft? StringBuffer sb = new StringBuffer("DataSourceConfig["); sb.append("key="); sb.append(key); sb.append(",type="); sb.append(type); Iterator names = properties.keySet().iterator(); while (names.hasNext()) { String name = (String) names.next(); String value = (String) properties.get(name); sb.append(','); sb.append(name); sb.append('='); sb.append(value); } sb.append("]"); return (sb.toString()); sq~ uq~ppppq~fq~fxq~ sq~ uq~ppppppptDataSourceConfigq~=xsq~ uq~sq~Csq~ uq~ppppq~bsq~ uq~ppppsq~#q~axpppq~$sq~ uq~sq~)sq~ uq~ppppq~ åsq~ uq~ppppq~fsq~ uq~ppppsq~ uq~ppppsq~B~opxq~apppsq~ uq~ppppq~$q~$q•Ÿsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~sq~bsq~ uq~ppppsq~isq~ uq~qè®pppq~bsq~ uq~pppppt0/** * Add a new DataSourceConfig instance to the set associated * with this application. * * @param config The new configuration instance to be added * * @exception IllegalStateException if this application configuration * has been frozen */ ptaddDataSourceConfigq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t¬ if (configured) { throw new IllegalStateException("Configuration is frozen"); } dataSources.put(config.getKey(), config); sq~ uq~ppppq~$q~$xsq~ uq~ppppppptconfigq~=xsq~ uq~pppppq~$q~yq~$q~apq~$xsq~isq~ uq~sq~bsq~ uq~ppppqèÆsq~ uq~ppppppptkeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~bsq~ uq~ppppptÏ/** * Return the data source configuration for the specified key, if any; * otherwise return null. * * @param key Key of the data source configuration to return */ ptfindDataSourceConfigq~=xsq~ uq~pppppq~$q~yq~$q~apq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tE return ((DataSourceConfig) dataSources.get(key)); sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~bsq~ uq~ppppptŽ/** * Return the data source configurations for this application. If there * are none, a zero-length array is returned. */ ptfindDataSourceConfigsq~=xsq~ uq~pppppq~$q~yq~$q~at[]q~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t¨ DataSourceConfig results[] = new DataSourceConfig[dataSources.size()]; return ((DataSourceConfig[]) dataSources.values().toArray(results)); sq~ uq~ppppq~$q~$xsq~bsq~ uq~ppppsq~isq~ uq~qèïpppq~bsq~ uq~pppppt/** * Remove the specified data source configuration instance. * * @param config DataSourceConfig instance to be removed * * @exception IllegalStateException if this application configuration * has been frozen */ ptremoveDataSourceConfigq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t§ if (configured) { throw new IllegalStateException("Configuration is frozen"); } dataSources.remove(config.getKey()); sq~ uq~ppppq~$q~$xsq~ uq~ppppppptconfigq~=xsq~ uq~pppppq~$q~yq~$q~apq~$xsq~bsq~ uq~ppppsq~isq~ uq~qépppq~bsq~ uq~pppppt0/** * Add a new DataSourceConfig instance to the set associated * with this application. * * @param config The new configuration instance to be added * * @exception IllegalStateException if this application configuration * has been frozen */ ptaddDataSourceConfigq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t¬ if (configured) { throw new IllegalStateException("Configuration is frozen"); } dataSources.put(config.getKey(), config); sq~ uq~ppppq~¥q~¥xsq~ uq~ppppppptconfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~apq~§xsq~isq~ uq~sq~bsq~ uq~ppppqésq~ uq~ppppppptkeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~bsq~ uq~ppppptÏ/** * Return the data source configuration for the specified key, if any; * otherwise return null. * * @param key Key of the data source configuration to return */ ptfindDataSourceConfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~apq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tE return ((DataSourceConfig) dataSources.get(key)); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~bsq~ uq~ppppptŽ/** * Return the data source configurations for this application. If there * are none, a zero-length array is returned. */ ptfindDataSourceConfigsq~¢xsq~ uq~pppppq~¥q~¦q~¥q~at[]q~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t¨ DataSourceConfig results[] = new DataSourceConfig[dataSources.size()]; return ((DataSourceConfig[]) dataSources.values().toArray(results)); sq~ uq~ppppq~¥q~¥xsq~bsq~ uq~ppppsq~isq~ uq~qéHpppq~bsq~ uq~pppppt/** * Remove the specified data source configuration instance. * * @param config DataSourceConfig instance to be removed * * @exception IllegalStateException if this application configuration * has been frozen */ ptremoveDataSourceConfigq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t§ if (configured) { throw new IllegalStateException("Configuration is frozen"); } dataSources.remove(config.getKey()); sq~ uq~ppppq~¥q~¥xsq~ uq~ppppppptconfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~apq~§xsq~bsq~ uq~ppppsq~isq~ uq~qé`pppq~bsq~ uq~pppppt&/** * Add a new DataSourceConfig instance to the set associated * with this module. * * @param config The new configuration instance to be added * * @exception IllegalStateException if this module configuration * has been frozen */ ptaddDataSourceConfigq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t¬ if (configured) { throw new IllegalStateException("Configuration is frozen"); } dataSources.put(config.getKey(), config); sq~ uq~ppppq~–q~–xsq~ uq~ppppppptconfigq~rxsq~ uq~pppppq~–q~—q~–q~apq~˜xsq~isq~ uq~sq~bsq~ uq~ppppqéxsq~ uq~ppppppptkeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~bsq~ uq~ppppptÏ/** * Return the data source configuration for the specified key, if any; * otherwise return null. * * @param key Key of the data source configuration to return */ ptfindDataSourceConfigq~rxsq~ uq~pppppq~–q~—q~–q~apq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tE return ((DataSourceConfig) dataSources.get(key)); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~bsq~ uq~pppppt‰/** * Return the data source configurations for this module. If there * are none, a zero-length array is returned. */ ptfindDataSourceConfigsq~rxsq~ uq~pppppq~–q~—q~–q~at[]q~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t¨ DataSourceConfig results[] = new DataSourceConfig[dataSources.size()]; return ((DataSourceConfig[]) dataSources.values().toArray(results)); sq~ uq~ppppq~–q~–xsq~bsq~ uq~ppppsq~isq~ uq~qé¡pppq~bsq~ uq~ppppptû/** * Remove the specified data source configuration instance. * * @param config DataSourceConfig instance to be removed * * @exception IllegalStateException if this module configuration * has been frozen */ ptremoveDataSourceConfigq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t§ if (configured) { throw new IllegalStateException("Configuration is frozen"); } dataSources.remove(config.getKey()); sq~ uq~ppppq~–q~–xsq~ uq~ppppppptconfigq~rxsq~ uq~pppppq~–q~—q~–q~apq~˜xq~Ysq~isq~ uq~sq~bsq~ uq~ppppqé¹sq~ uq~ppppppptkeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~ºsq~ uq~ppppptÏ/** * Return the data source configuration for the specified key, if any; * otherwise return null. * * @param key Key of the data source configuration to return */ ptfindDataSourceConfigq~{xsq~ uq~pppppq~~q~q~~q~apq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Êxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ºsq~ uq~pppppt‰/** * Return the data source configurations for this module. If there * are none, a zero-length array is returned. */ ptfindDataSourceConfigsq~{xsq~ uq~pppppq~~q~q~~q~at[]q~€xsq~ uq~ppppsq~ uq~ppppq~~q~Êxq~~psq~ uq~ppppq~~q~~xsq~bsq~ uq~ppppsq~isq~ uq~qéàpppq~ºsq~ uq~pppppt/** * Remove the specified data source configuration instance. * * @param config DataSourceConfig instance to be removed * * @exception java.lang.IllegalStateException if this module configuration * has been frozen */ ptremoveDataSourceConfigq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Êxq~~psq~ uq~ppppq~~q~~xsq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~apq~€xsq~bsq~ uq~ppppsq~isq~ uq~qé÷pppq~ºsq~ uq~pppppt0/** * Add a new DataSourceConfig instance to the set associated * with this module. * * @param config The new configuration instance to be added * * @exception java.lang.IllegalStateException if this module configuration * has been frozen */ ptaddDataSourceConfigq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~Òxq~fpsq~ uq~ppppq~fq~fxsq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~apq~hxsq~isq~ uq~sq~bsq~ uq~ppppqêsq~ uq~ppppppptkeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~ºsq~ uq~ppppptÏ/** * Return the data source configuration for the specified key, if any; * otherwise return null. * * @param key Key of the data source configuration to return */ ptfindDataSourceConfigq~cxsq~ uq~pppppq~fq~gq~fq~apq~hxsq~ uq~ppppsq~ uq~ppppq~fq~Òxq~fpsq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ºsq~ uq~pppppt‰/** * Return the data source configurations for this module. If there * are none, a zero-length array is returned. */ ptfindDataSourceConfigsq~cxsq~ uq~pppppq~fq~gq~fq~at[]q~hxsq~ uq~ppppsq~ uq~ppppq~fq~Òxq~fpsq~ uq~ppppq~fq~fxsq~bsq~ uq~ppppsq~isq~ uq~qê5pppq~ºsq~ uq~pppppt/** * Remove the specified data source configuration instance. * * @param config DataSourceConfig instance to be removed * * @exception java.lang.IllegalStateException if this module configuration * has been frozen */ ptremoveDataSourceConfigq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~Òxq~fpsq~ uq~ppppq~fq~fxsq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~apq~hxpppppq~Äxq~$ppxpq~€xpppq~ºsq~ uq~pppppt0/** * Add a new DataSourceConfig instance to the set associated * with this module. * * @param config The new configuration instance to be added * * @exception java.lang.IllegalStateException if this module configuration * has been frozen */ ptaddDataSourceConfigq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Êxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqêXsq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~ òpq~€xpppq~ºsq~ uq~pppppt//** * Add a new ExceptionConfig instance to the set associated * with this module. * * @param config The new configuration instance to be added * * @exception java.lang.IllegalStateException if this module configuration * has been frozen */ ptaddExceptionConfigq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Êxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqêosq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~#pq~€xpppq~ºsq~ uq~pppppt./** * Add a new FormBeanConfig instance to the set associated * with this module. * * @param config The new configuration instance to be added * * @exception java.lang.IllegalStateException if this module configuration * has been frozen */ ptaddFormBeanConfigq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Êxq~~psq~ uq~ppppq~~q~~xq¤Gq"¢q~Îísq~isq~ uq~sq~bsq~ uq~ppppqê†sq~ uq~ppppppptpathq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~ºsq~ uq~ppppptÈ/** * Return the action configuration for the specified path, if any; * otherwise return null. * * @param path Path of the action configuration to return */ ptfindActionConfigq~{xsq~ uq~pppppq~~q~q~~q~+pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Êxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ºsq~ uq~pppppt„/** * Return the action configurations for this module. If there are * none, a zero-length array is returned. */ ptfindActionConfigsq~{xsq~ uq~pppppq~~q~q~~q~+t[]q~€xsq~ uq~ppppsq~ uq~ppppq~~q~Êxq~~psq~ uq~ppppq~~q~~xqé¹qéÐsq~isq~ uq~sq~bsq~ uq~ppppqê­sq~ uq~pppppppttypeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~ºsq~ uq~ppppptÑ/** * Return the exception configuration for the specified type, if any; * otherwise return null. * * @param type Exception class name to find a configuration for */ ptfindExceptionConfigq~{xsq~ uq~pppppq~~q~q~~q~ òpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Êxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ºsq~ uq~pppppt‡/** * Return the exception configurations for this module. If there * are none, a zero-length array is returned. */ ptfindExceptionConfigsq~{xsq~ uq~pppppq~~q~q~~q~ òt[]q~€xsq~ uq~ppppsq~ uq~ppppq~~q~Êxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqêÔsq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~ºsq~ uq~ppppptÍ/** * Return the form bean configuration for the specified key, if any; * otherwise return null. * * @param name Name of the form bean configuration to return */ ptfindFormBeanConfigq~{xsq~ uq~pppppq~~q~q~~q~#pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Êxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ºsq~ uq~pppppt‡/** * Return the form bean configurations for this module. If there * are none, a zero-length array is returned. */ ptfindFormBeanConfigsq~{xsq~ uq~pppppq~~q~q~~q~#t[]q~€xsq~ uq~ppppsq~ uq~ppppq~~q~Êxq~~psq~ uq~ppppq~~q~~xq¤[q¤rq"¶q"Íq~Ïsq~isq~ uq~ppppq~ºsq~ uq~pppppt¸/** * Freeze the configuration of this module. After this method * returns, any attempt to modify the configuration will return * an IllegalStateException. */ ptfreezeq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Êxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqë sq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~+pq~€xpppq~ºsq~ uq~ppppptü/** * Remove the specified action configuration instance. * * @param config ActionConfig instance to be removed * * @exception java.lang.IllegalStateException if this module configuration * has been frozen */ ptremoveActionConfigq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Êxq~~psq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqë!sq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~ òpq~€xpppq~ºsq~ uq~ppppptÿ/** * Remove the specified exception configuration instance. * * @param config ActionConfig instance to be removed * * @exception java.lang.IllegalStateException if this module configuration * has been frozen */ ptremoveExceptionConfigq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Êxq~~psq~ uq~ppppq~~q~~xqéãsq~isq~ uq~sq~bsq~ uq~ppppqë8sq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~#pq~€xpppq~ºsq~ uq~pppppt/** * Remove the specified form bean configuration instance. * * @param config FormBeanConfig instance to be removed * * @exception java.lang.IllegalStateException if this module configuration * has been frozen */ ptremoveFormBeanConfigq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Êxq~~psq~ uq~ppppq~~q~~xq¤…q"àsq~isq~ uq~ppppq~ºsq~ uq~ppppptÁ/** * Has this module been completely configured yet. Once this flag * has been set, any attempt to modify the configuration will return an * IllegalStateException. */ pt getConfiguredq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~Òxq~fpsq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ºsq~ uq~ppppptJ/** * The controller configuration object for this module. */ ptgetControllerConfigq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~Òxq~fpsq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqëmsq~ uq~ppppppptccq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxpppq~ºsq~ uq~pppppt“/** * The controller configuration object for this module. * @param cc The controller configuration object for this module. */ ptsetControllerConfigq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~Òxq~fpsq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ºsq~ uq~pppppt*/** * The prefix of the context-relative portion of the request URI, used to * select this configuration versus others supported by the controller * servlet. A configuration with a prefix of a zero-length String is the * default configuration for this web module. */ pt getPrefixq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~Òxq~fpsq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqë“sq~ uq~ppppppptprefixq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~ºsq~ uq~pppppt/** * The prefix of the context-relative portion of the request URI, used to * select this configuration versus others supported by the controller * servlet. A configuration with a prefix of a zero-length String is the * default configuration for this web module. * @param prefix The prefix of the context-relative portion of the request URI. */ pt setPrefixq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fpsq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ºsq~ uq~ppppptg/** * The default class name to be used when creating action mapping * instances. */ ptgetActionMappingClassq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~Òxq~fpsq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqë¹sq~ uq~ppppppptactionMappingClassq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~ºsq~ uq~ppppptØ/** * The default class name to be used when creating action mapping * instances. * @param actionMappingClass default class name to be used when creating action mapping * instances. */ ptsetActionMappingClassq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~Òxq~fpsq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqëÐsq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~+pq~hxpppq~ºsq~ uq~pppppt,/** * Add a new ActionConfig instance to the set associated * with this module. * * @param config The new configuration instance to be added * * @exception java.lang.IllegalStateException if this module configuration * has been frozen */ ptaddActionConfigq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~Òxq~fpsq~ uq~ppppq~fq~fxqéúsq~isq~ uq~sq~bsq~ uq~ppppqëçsq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~ òpq~hxpppq~ºsq~ uq~pppppt//** * Add a new ExceptionConfig instance to the set associated * with this module. * * @param config The new configuration instance to be added * * @exception java.lang.IllegalStateException if this module configuration * has been frozen */ ptaddExceptionConfigq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~Òxq~fpsq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqëþsq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~#pq~hxpppq~ºsq~ uq~pppppt./** * Add a new FormBeanConfig instance to the set associated * with this module. * * @param config The new configuration instance to be added * * @exception java.lang.IllegalStateException if this module configuration * has been frozen */ ptaddFormBeanConfigq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~Òxq~fpsq~ uq~ppppq~fq~fxq¥fq"÷q~Ñósq~isq~ uq~sq~bsq~ uq~ppppqìsq~ uq~ppppppptpathq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~ºsq~ uq~ppppptÈ/** * Return the action configuration for the specified path, if any; * otherwise return null. * * @param path Path of the action configuration to return */ ptfindActionConfigq~cxsq~ uq~pppppq~fq~gq~fq~+pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~Òxq~fpsq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ºsq~ uq~pppppt„/** * Return the action configurations for this module. If there are * none, a zero-length array is returned. */ ptfindActionConfigsq~cxsq~ uq~pppppq~fq~gq~fq~+t[]q~hxsq~ uq~ppppsq~ uq~ppppq~fq~Òxq~fpsq~ uq~ppppq~fq~fxqêqê%sq~isq~ uq~sq~bsq~ uq~ppppqìnull. * * @param type Exception class name to find a configuration for */ ptfindExceptionConfigq~cxsq~ uq~pppppq~fq~gq~fq~ òpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~Òxq~fpsq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ºsq~ uq~pppppt‡/** * Return the exception configurations for this module. If there * are none, a zero-length array is returned. */ ptfindExceptionConfigsq~cxsq~ uq~pppppq~fq~gq~fq~ òt[]q~hxsq~ uq~ppppsq~ uq~ppppq~fq~Òxq~fpsq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqìcsq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~ºsq~ uq~ppppptÍ/** * Return the form bean configuration for the specified key, if any; * otherwise return null. * * @param name Name of the form bean configuration to return */ ptfindFormBeanConfigq~cxsq~ uq~pppppq~fq~gq~fq~#pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~Òxq~fpsq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ºsq~ uq~pppppt‡/** * Return the form bean configurations for this module. If there * are none, a zero-length array is returned. */ ptfindFormBeanConfigsq~cxsq~ uq~pppppq~fq~gq~fq~#t[]q~hxsq~ uq~ppppsq~ uq~ppppq~fq~Òxq~fpsq~ uq~ppppq~fq~fxq¥zq¥‘q# q#"q~Òsq~isq~ uq~ppppq~ºsq~ uq~pppppt¸/** * Freeze the configuration of this module. After this method * returns, any attempt to modify the configuration will return * an IllegalStateException. */ ptfreezeq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~Òxq~fpsq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqì™sq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~+pq~hxpppq~ºsq~ uq~ppppptü/** * Remove the specified action configuration instance. * * @param config ActionConfig instance to be removed * * @exception java.lang.IllegalStateException if this module configuration * has been frozen */ ptremoveActionConfigq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~Òxq~fpsq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqì°sq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~ òpq~hxpppq~ºsq~ uq~ppppptÿ/** * Remove the specified exception configuration instance. * * @param config ActionConfig instance to be removed * * @exception java.lang.IllegalStateException if this module configuration * has been frozen */ ptremoveExceptionConfigq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~Òxq~fpsq~ uq~ppppq~fq~fxqê8sq~isq~ uq~sq~bsq~ uq~ppppqìÇsq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~#pq~hxpppq~ºsq~ uq~pppppt/** * Remove the specified form bean configuration instance. * * @param config FormBeanConfig instance to be removed * * @exception java.lang.IllegalStateException if this module configuration * has been frozen */ ptremoveFormBeanConfigq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~Òxq~fpsq~ uq~ppppq~fq~fxq¥¤q#5ppppppq~ sq~ uq~pppppppt ModuleConfigq~{xsq~ uq~q~´qq@sq~Csq~ uq~ppppq~xsq~ uq~ppppsq~#q~ºxsq~Csq~ uq~ppppq~Ásq~ uq~ppppsq~#q~ºxsq~Csq~ uq~ppppq~bsq~ uq~ppppsq~#q~ºxq#Iq€)„q€Xbq€ëq€¤¥q€­€q0?q€ýq~³]q~Àxq~Ëüq´q´[sq~Csq~ uq~ppppq~Hsq~ uq~ppppsq~#q~ºxq âqqq€hÿqiq¡‡pppppppq~~sq~ uq~sq~)sq~ uq~ppppq~ åsq~ uq~ppppq~{sq~ uq~ppppsq~ uq~ppppsq~B$f pxq~ºq€*Äppsq~ uq~ppppq~~q~~sq~Qsq~ uq~ppppq~ sq~ uq~pppppt £/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/config/ModuleConfig.java,v 1.3 2003/05/01 17:05:10 rleland Exp $ * $Revision: 1.3 $ * $Date: 2003/05/01 17:05:10 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** *

            The collection of static configuration information that describes a * Struts-based module. Multiple modules are identified by * a prefix at the beginning of the context * relative portion of the request URI. If no module prefix can be * matched, the default configuration (with a prefix equal to a zero-length * string) is selected, which is elegantly backwards compatible with the * previous Struts behavior that only supported one module.

            * * @author Rob Leland * @version $Revision: 1.3 $ $Date: 2003/05/01 17:05:10 $ * @since Struts 1.1 */ ptModuleConfig.javaq~fxsq~ uq~ppppsq~ uq~q~ºpppq~fxsq~ uq~pppppq~~sq~ uq~ppppsq~ ]uq~_q¡0q~¹-q¿:q¿csq~isq~ uq~sq~bsq~ uq~ppppqísq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xpppq~ psq~ uq~ppppptÆ/** * Return the module configuration object for the currently selected * module. * * @param request The servlet request we are processing * @since Struts 1.1 */ ptgetModuleConfigq~{xsq~ uq~pppppq~~q~q~~q~ºpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t ModuleConfig config = (ModuleConfig) request.getAttribute(Globals.MODULE_KEY); if (config == null) { config = (ModuleConfig) getServletContext().getAttribute(Globals.MODULE_KEY); } return (config); sq~ uq~ppppq~~q~~xqÇ©sq~isq~ uq~sq~bsq~ uq~ppppqí2sq~ uq~ppppppptprefixq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqí2sq~ uq~ppppppptpathsq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xppq~ psq~ uq~pppppt /** *

            Initialize the application configuration information for the * specified module.

            * * @param prefix Module prefix for this module * @param paths Comma-separated list of context-relative resource path(s) * for this modules's configuration resource(s) * * @exception ServletException if initialization cannot be performed * @since Struts 1.1 */ ptinitModuleConfigq~{xsq~ uq~pppppq~~q~q~~q~ºpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t ~ if (log.isDebugEnabled()) { log.debug( "Initializing module path '" + prefix + "' configuration from '" + paths + "'"); } // Parse the configuration for this module //@todo & FIXME replace with a FactoryMethod ModuleConfigFactory factoryObject = ModuleConfigFactory.createFactory(); ModuleConfig config = factoryObject.createModuleConfig(prefix); // Support for module-wide ActionMapping type override String mapping = getServletConfig().getInitParameter("mapping"); if (mapping != null) { config.setActionMappingClass(mapping); } // Configure the Digester instance we will use Digester digester = initConfigDigester(); // Process each specified resource path while (paths.length() > 0) { digester.push(config); String path = null; int comma = paths.indexOf(','); if (comma >= 0) { path = paths.substring(0, comma).trim(); paths = paths.substring(comma + 1); } else { path = paths.trim(); paths = ""; } if (path.length() < 1) { break; } this.parseModuleConfigFile(prefix, paths, config, digester, path); } // Force creation and registration of DynaActionFormClass instances // for all dynamic form beans we wil be using FormBeanConfig fbs[] = config.findFormBeanConfigs(); for (int i = 0; i < fbs.length; i++) { if (fbs[i].getDynamic()) { DynaActionFormClass.createDynaActionFormClass(fbs[i]); } } // Special handling for the default module (for // backwards compatibility only, will be removed later) if (prefix.length() < 1) { defaultControllerConfig(config); defaultMessageResourcesConfig(config); defaultFormBeansConfig(config); defaultForwardsConfig(config); defaultMappingsConfig(config); } // Return the completed configuration object //config.freeze(); // Now done after plugins init return (config); sq~ uq~q~¦pppq~~q~~xq~ÒXsq~bsq~ uq~ppppsq~isq~ uq~qíRpppq~ psq~ uq~ppppptA/** *

            Initialize the data sources for the specified module.

            * * @param config ModuleConfig information for this module * * @exception ServletException if initialization cannot be performed * @since Struts 1.1 * @deprecated use initModuleDataSources(ModuleConfig) */ ptinitApplicationDataSourcesq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t- initModuleDataSources(config); sq~ uq~q~¦pppq~~q~~xsq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~ºpq~€xsq~bsq~ uq~ppppsq~isq~ uq~qíjpppq~ psq~ uq~pppppt/** *

            Initialize the data sources for the specified module.

            * * @param config ModuleConfig information for this module * * @exception ServletException if initialization cannot be performed * @since Struts 1.1 */ ptinitModuleDataSourcesq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~tÚ if (log.isDebugEnabled()) { log.debug("Initializing module path '" + config.getPrefix() + "' data sources"); } ServletContextWriter scw = new ServletContextWriter(getServletContext()); DataSourceConfig dscs[] = config.findDataSourceConfigs(); if (dscs == null) { dscs = new DataSourceConfig[0]; } dataSources.setFast(false); for (int i = 0; i < dscs.length; i++) { if (log.isDebugEnabled()) { log.debug("Initializing module path '" + config.getPrefix() + "' data source '" + dscs[i].getKey() + "'"); } DataSource ds = null; try { ds = (DataSource) RequestUtils.applicationInstance(dscs[i].getType()); BeanUtils.populate(ds, dscs[i].getProperties()); if (ds instanceof GenericDataSource) { ((GenericDataSource) ds).open(); } ds.setLogWriter(scw); } catch (Exception e) { log.error(internal.getMessage("dataSource.init", dscs[i].getKey()), e); throw new UnavailableException (internal.getMessage("dataSource.init", dscs[i].getKey())); } getServletContext().setAttribute (dscs[i].getKey() + config.getPrefix(), ds); dataSources.put(dscs[i].getKey(), ds); } dataSources.setFast(true); // Call deprecated method for backwards compatibility if ("".equals(config.getPrefix())) { initDataSources(); } sq~ uq~q~¦pppq~~q~~xsq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~ºpq~€xsq~bsq~ uq~ppppsq~isq~ uq~qí‚pppq~ psq~ uq~ppppptB/** *

            Initialize the plug ins for the specified module.

            * * @param config ModuleConfig information for this module * * @exception ServletException if initialization cannot be performed * @deprecated use {@link #initModulePlugIns(ModuleConfig)} * @since Struts 1.1 */ ptinitApplicationPlugInsq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t* initModulePlugIns(config); sq~ uq~q~¦pppq~~q~~xsq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~ºpq~€xsq~bsq~ uq~ppppsq~isq~ uq~qíšpppq~ psq~ uq~pppppt/** *

            Initialize the plug ins for the specified module.

            * * @param config ModuleConfig information for this module * * @exception ServletException if initialization cannot be performed * @since Struts 1.1 */ ptinitModulePlugInsq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~tD if (log.isDebugEnabled()) { log.debug("Initializing module path '" + config.getPrefix() + "' plug ins"); } PlugInConfig plugInConfigs[] = config.findPlugInConfigs(); PlugIn plugIns[] = new PlugIn[plugInConfigs.length]; getServletContext().setAttribute(Globals.PLUG_INS_KEY + config.getPrefix(), plugIns); for (int i = 0; i < plugIns.length; i++) { try { plugIns[i] = (PlugIn)RequestUtils.applicationInstance(plugInConfigs[i].getClassName()); BeanUtils.populate(plugIns[i], plugInConfigs[i].getProperties()); // Pass the current plugIn config object to the PlugIn. // The property is set only if the plugin declares it. // This plugin config object is needed by Tiles try { PropertyUtils.setProperty( plugIns[i], "currentPlugInConfigObject", plugInConfigs[i]); } catch (Exception e) { // FIXME Whenever we fail silently, we must document a valid reason // for doing so. Why should we fail silently if a property can't be set on // the plugin? } plugIns[i].init(this, (ModuleConfig) config); } catch (ServletException e) { throw e; } catch (Exception e) { String errMsg = internal.getMessage( "plugIn.init", plugInConfigs[i].getClassName()); log(errMsg, e); throw new UnavailableException(errMsg); } } sq~ uq~q~¦pppq~~q~~xsq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~ºpq~€xsq~bsq~ uq~ppppsq~isq~ uq~qí²pppq~ psq~ uq~ppppptR/** *

            Initialize the application MessageResources for the specified * module.

            * * @param config ModuleConfig information for this module * * @exception ServletException if initialization cannot be performed * @since Struts 1.1 * @deprecated use initModuleMessageResources() */ ptinitApplicationMessageResourcesq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t2 initModuleMessageResources(config); sq~ uq~q~¦pppq~~q~~xsq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~ºpq~€xsq~bsq~ uq~ppppsq~isq~ uq~qíÊpppq~ psq~ uq~pppppt/** *

            Initialize the application MessageResources for the specified * module.

            * * @param config ModuleConfig information for this module * * @exception ServletException if initialization cannot be performed * @since Struts 1.1 */ ptinitModuleMessageResourcesq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t‹ MessageResourcesConfig mrcs[] = config.findMessageResourcesConfigs(); for (int i = 0; i < mrcs.length; i++) { if ((mrcs[i].getFactory() == null) || (mrcs[i].getParameter() == null)) { continue; } if (log.isDebugEnabled()) { log.debug( "Initializing module path '" + config.getPrefix() + "' message resources from '" + mrcs[i].getParameter() + "'"); } String factory = mrcs[i].getFactory(); MessageResourcesFactory.setFactoryClass(factory); MessageResourcesFactory factoryObject = MessageResourcesFactory.createFactory(); MessageResources resources = factoryObject.createResources(mrcs[i].getParameter()); resources.setReturnNull(mrcs[i].getNull()); getServletContext().setAttribute( mrcs[i].getKey() + config.getPrefix(), resources); } sq~ uq~q~¦pppq~~q~~xsq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~ºpq~€xsq~bsq~ uq~ppppsq~isq~ uq~qíâpppq~ psq~ uq~ppppptÅ// -------------------------------------------------------- Private Methods /** * Perform backwards-compatible configuration of the default module's * controller configuration from servlet initialization parameters (as * were used in Struts 1.0). * * @param config The ModuleConfig object for the default module * * @since Struts 1.1 * @deprecated Will be removed in a release after Struts 1.1. */ ptdefaultControllerConfigq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~d1xq~~t* String value = null; ControllerConfig cc = config.getControllerConfig(); value = getServletConfig().getInitParameter("bufferSize"); if (value != null) { cc.setBufferSize(Integer.parseInt(value)); } value = getServletConfig().getInitParameter("content"); if (value != null) { cc.setContentType(value); } value = getServletConfig().getInitParameter("locale"); // must check for null here if (value != null) { if ("true".equalsIgnoreCase(value) || "yes".equalsIgnoreCase(value)) { cc.setLocale(true); } else { cc.setLocale(false); } } value = getServletConfig().getInitParameter("maxFileSize"); if (value != null) { cc.setMaxFileSize(value); } value = getServletConfig().getInitParameter("nocache"); if (value != null) { if ("true".equalsIgnoreCase(value) || "yes".equalsIgnoreCase(value)) { cc.setNocache(true); } else { cc.setNocache(false); } } value = getServletConfig().getInitParameter("multipartClass"); if (value != null) { cc.setMultipartClass(value); } value = getServletConfig().getInitParameter("tempDir"); if (value != null) { cc.setTempDir(value); } sq~ uq~ppppq~~q~~xsq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~ºpq~€xsq~bsq~ uq~ppppsq~isq~ uq~qíúpppq~ psq~ uq~ppppptÝ/** * Perform backwards-compatible configuration of an ActionFormBeans * collection, and expose it as a servlet context attribute (as was * used in Struts 1.0). Note that the current controller code does * not (and should not) reference this attribute for any reason. * * @param config The ModuleConfig object for the default app * * @since Struts 1.1 * @deprecated Will be removed in a release after Struts 1.1. */ ptdefaultFormBeansConfigq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~d1xq~~ts FormBeanConfig fbcs[] = config.findFormBeanConfigs(); ActionFormBeans afb = new ActionFormBeans(); afb.setFast(false); for (int i = 0; i < fbcs.length; i++) { afb.addFormBean((ActionFormBean) fbcs[i]); } afb.setFast(true); getServletContext().setAttribute(Action.FORM_BEANS_KEY, afb); sq~ uq~ppppq~~q~~xsq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~ºpq~€xsq~bsq~ uq~ppppsq~isq~ uq~qîpppq~ psq~ uq~ppppptÜ/** * Perform backwards-compatible configuration of an ActionForwards * collection, and expose it as a servlet context attribute (as was * used in Struts 1.0). Note that the current controller code does * not (and should not) reference this attribute for any reason. * * @param config The ModuleConfig object for the default app * * @since Struts 1.1 * @deprecated Will be removed in a release after Struts 1.1. */ ptdefaultForwardsConfigq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~d1xq~~tc ForwardConfig fcs[] = config.findForwardConfigs(); ActionForwards af = new ActionForwards(); af.setFast(false); for (int i = 0; i < fcs.length; i++) { af.addForward((ActionForward) fcs[i]); } af.setFast(true); getServletContext().setAttribute(Action.FORWARDS_KEY, af); sq~ uq~ppppq~~q~~xsq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~ºpq~€xsq~bsq~ uq~ppppsq~isq~ uq~qî*pppq~ psq~ uq~ppppptÜ/** * Perform backwards-compatible configuration of an ActionMappings * collection, and expose it as a servlet context attribute (as was * used in Struts 1.0). Note that the current controller code does * not (and should not) reference this attribute for any reason. * * @param config The ModuleConfig object for the default app * * @since Struts 1.1 * @deprecated Will be removed in a release after Struts 1.1. */ ptdefaultMappingsConfigq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~d1xq~~t ActionConfig acs[] = config.findActionConfigs(); ActionMappings am = new ActionMappings(); am.setServlet(this); am.setFast(false); for (int i = 0; i < acs.length; i++) { am.addMapping((ActionMapping) acs[i]); } am.setFast(true); getServletContext().setAttribute(Action.MAPPINGS_KEY, am); sq~ uq~ppppq~~q~~xsq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~ºpq~€xsq~bsq~ uq~ppppsq~isq~ uq~qîBpppq~ psq~ uq~pppppt/** * Perform backwards-compatible configuration of the default module's * message resources configuration from servlet initialization parameters * (as were used in Struts 1.0). * * @param config The ModuleConfig object for the default module * * @since Struts 1.1 * @deprecated Will be removed in a release after Struts 1.1. */ ptdefaultMessageResourcesConfigq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~d1xq~~t¬ String value = null; MessageResourcesConfig mrc = config.findMessageResourcesConfig(Globals.MESSAGES_KEY); if (mrc == null) { mrc = new MessageResourcesConfig(); mrc.setKey(Globals.MESSAGES_KEY); config.addMessageResourcesConfig(mrc); } value = getServletConfig().getInitParameter("application"); if (value != null) { mrc.setParameter(value); } value= getServletConfig().getInitParameter("factory"); if (value != null) { mrc.setFactory(value); } value = getServletConfig().getInitParameter("null"); if (value != null) { if (value.equalsIgnoreCase("true") || value.equalsIgnoreCase("yes")) { mrc.setNull(true); } else { mrc.setNull(false); } } sq~ uq~ppppq~~q~~xsq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~ºpq~€xsq~(sq~ uq~ppppq~#sq~ uq~ppppptÔ/** * The {@link ModuleConfig} with which this form bean definition * is associated. */ /** * The {@link ModuleConfig} with which this form bean definition * is associated. */ pt moduleConfigq~{xsq~ uq~pppppq~~q~q~~q~ºpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xpppt nullq~~q~~q~~xsq~isq~ uq~ppppq~#sq~ uq~ppppptq/** * Return the {@link ModuleConfig} with which this form bean definition * is associated. */ ptgetModuleConfigq~{xsq~ uq~pppppq~~q~q~~q~ºpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t+ return (this.moduleConfig); sq~ uq~ppppq~~q~~xsq~bsq~ uq~ppppsq~isq~ uq~qîxpppq~#sq~ uq~pppppt /** * Set the {@link ModuleConfig} with which this form bean definition * is associated. * * @param moduleConfig The new {@link ModuleConfig} or null * to disassociate this form bean configuration from any module */ ptsetModuleConfigq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t  if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.moduleConfig = moduleConfig; sq~ uq~ppppq~~q~~xsq~ uq~pppppppt moduleConfigq~{xsq~ uq~pppppq~~q~q~~q~ºpq~€xsq~(sq~ uq~ppppq~+sq~ uq~pppppt2// ------------------------------------------------------------- Properties /** * The module configuration with which we are associated. */ // ------------------------------------------------------------- Properties /** * The module configuration with which we are associated. */ pt moduleConfigq~{xsq~ uq~pppppq~~q~q~~q~ºpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xpppt nullq~~q~~q~~xsq~isq~ uq~ppppq~+sq~ uq~pppppt|/** * The module configuration with which we are associated. * @deprecated {@link #getModuleConfig()} */ ptgetApplicationConfigq~{xsq~ uq~pppppq~~q~q~~q~ºpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t+ return (getModuleConfig()); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~+sq~ uq~ppppptL/** * The module configuration with which we are associated. */ ptgetModuleConfigq~{xsq~ uq~pppppq~~q~q~~q~ºpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t+ return (this.moduleConfig); sq~ uq~ppppq~~q~~xsq~bsq~ uq~ppppsq~isq~ uq~qî¾pppq~+sq~ uq~ppppptˆ/** * The module configuration with which we are associated. * @deprecated {@link #setModuleConfig(ModuleConfig)} */ ptsetApplicationConfigq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t- setModuleConfig(moduleConfig); sq~ uq~ppppq~~q~~xsq~ uq~pppppppt moduleConfigq~{xsq~ uq~pppppq~~q~q~~q~ºpq~€xsq~bsq~ uq~ppppsq~isq~ uq~qîÖpppq~+sq~ uq~ppppptL/** * The module configuration with which we are associated. */ ptsetModuleConfigq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t  if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.moduleConfig = moduleConfig; sq~ uq~ppppq~~q~~xsq~ uq~pppppppt moduleConfigq~{xsq~ uq~pppppq~~q~q~~q~ºpq~€xq€)Cq€)Xq€à’q¦Âq~Ð q~Ð:q~ÐZq~Ðrq³Çq©Wq©ŒqÁIqºkqºƒq¿q‹ëqqq@q~ÀÌq~Âêq%q%q¡^qÃ[sq~isq~ uq~sq~bsq~ uq~ppppqîîsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxpppq~ psq~ uq~ppppptÆ/** * Return the module configuration object for the currently selected * module. * * @param request The servlet request we are processing * @since Struts 1.1 */ ptgetModuleConfigq~cxsq~ uq~pppppq~fq~gq~fq~ºpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft ModuleConfig config = (ModuleConfig) request.getAttribute(Globals.MODULE_KEY); if (config == null) { config = (ModuleConfig) getServletContext().getAttribute(Globals.MODULE_KEY); } return (config); sq~ uq~ppppq~fq~fxqÇÂsq~isq~ uq~sq~bsq~ uq~ppppqïsq~ uq~ppppppptprefixq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqïsq~ uq~ppppppptpathsq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxppq~ psq~ uq~pppppt /** *

            Initialize the application configuration information for the * specified module.

            * * @param prefix Module prefix for this module * @param paths Comma-separated list of context-relative resource path(s) * for this modules's configuration resource(s) * * @exception ServletException if initialization cannot be performed * @since Struts 1.1 */ ptinitModuleConfigq~cxsq~ uq~pppppq~fq~gq~fq~ºpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft ~ if (log.isDebugEnabled()) { log.debug( "Initializing module path '" + prefix + "' configuration from '" + paths + "'"); } // Parse the configuration for this module //@todo & FIXME replace with a FactoryMethod ModuleConfigFactory factoryObject = ModuleConfigFactory.createFactory(); ModuleConfig config = factoryObject.createModuleConfig(prefix); // Support for module-wide ActionMapping type override String mapping = getServletConfig().getInitParameter("mapping"); if (mapping != null) { config.setActionMappingClass(mapping); } // Configure the Digester instance we will use Digester digester = initConfigDigester(); // Process each specified resource path while (paths.length() > 0) { digester.push(config); String path = null; int comma = paths.indexOf(','); if (comma >= 0) { path = paths.substring(0, comma).trim(); paths = paths.substring(comma + 1); } else { path = paths.trim(); paths = ""; } if (path.length() < 1) { break; } this.parseModuleConfigFile(prefix, paths, config, digester, path); } // Force creation and registration of DynaActionFormClass instances // for all dynamic form beans we wil be using FormBeanConfig fbs[] = config.findFormBeanConfigs(); for (int i = 0; i < fbs.length; i++) { if (fbs[i].getDynamic()) { DynaActionFormClass.createDynaActionFormClass(fbs[i]); } } // Special handling for the default module (for // backwards compatibility only, will be removed later) if (prefix.length() < 1) { defaultControllerConfig(config); defaultMessageResourcesConfig(config); defaultFormBeansConfig(config); defaultForwardsConfig(config); defaultMappingsConfig(config); } // Return the completed configuration object //config.freeze(); // Now done after plugins init return (config); sq~ uq~q~¦pppq~fq~fxq~Ò°sq~bsq~ uq~ppppsq~isq~ uq~qï&pppq~ psq~ uq~ppppptA/** *

            Initialize the data sources for the specified module.

            * * @param config ModuleConfig information for this module * * @exception ServletException if initialization cannot be performed * @since Struts 1.1 * @deprecated use initModuleDataSources(ModuleConfig) */ ptinitApplicationDataSourcesq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft- initModuleDataSources(config); sq~ uq~q~¦pppq~fq~fxsq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~ºpq~hxsq~bsq~ uq~ppppsq~isq~ uq~qï>pppq~ psq~ uq~pppppt/** *

            Initialize the data sources for the specified module.

            * * @param config ModuleConfig information for this module * * @exception ServletException if initialization cannot be performed * @since Struts 1.1 */ ptinitModuleDataSourcesq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ftÚ if (log.isDebugEnabled()) { log.debug("Initializing module path '" + config.getPrefix() + "' data sources"); } ServletContextWriter scw = new ServletContextWriter(getServletContext()); DataSourceConfig dscs[] = config.findDataSourceConfigs(); if (dscs == null) { dscs = new DataSourceConfig[0]; } dataSources.setFast(false); for (int i = 0; i < dscs.length; i++) { if (log.isDebugEnabled()) { log.debug("Initializing module path '" + config.getPrefix() + "' data source '" + dscs[i].getKey() + "'"); } DataSource ds = null; try { ds = (DataSource) RequestUtils.applicationInstance(dscs[i].getType()); BeanUtils.populate(ds, dscs[i].getProperties()); if (ds instanceof GenericDataSource) { ((GenericDataSource) ds).open(); } ds.setLogWriter(scw); } catch (Exception e) { log.error(internal.getMessage("dataSource.init", dscs[i].getKey()), e); throw new UnavailableException (internal.getMessage("dataSource.init", dscs[i].getKey())); } getServletContext().setAttribute (dscs[i].getKey() + config.getPrefix(), ds); dataSources.put(dscs[i].getKey(), ds); } dataSources.setFast(true); // Call deprecated method for backwards compatibility if ("".equals(config.getPrefix())) { initDataSources(); } sq~ uq~q~¦pppq~fq~fxsq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~ºpq~hxsq~bsq~ uq~ppppsq~isq~ uq~qïVpppq~ psq~ uq~ppppptB/** *

            Initialize the plug ins for the specified module.

            * * @param config ModuleConfig information for this module * * @exception ServletException if initialization cannot be performed * @deprecated use {@link #initModulePlugIns(ModuleConfig)} * @since Struts 1.1 */ ptinitApplicationPlugInsq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft* initModulePlugIns(config); sq~ uq~q~¦pppq~fq~fxsq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~ºpq~hxsq~bsq~ uq~ppppsq~isq~ uq~qïnpppq~ psq~ uq~pppppt/** *

            Initialize the plug ins for the specified module.

            * * @param config ModuleConfig information for this module * * @exception ServletException if initialization cannot be performed * @since Struts 1.1 */ ptinitModulePlugInsq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ftD if (log.isDebugEnabled()) { log.debug("Initializing module path '" + config.getPrefix() + "' plug ins"); } PlugInConfig plugInConfigs[] = config.findPlugInConfigs(); PlugIn plugIns[] = new PlugIn[plugInConfigs.length]; getServletContext().setAttribute(Globals.PLUG_INS_KEY + config.getPrefix(), plugIns); for (int i = 0; i < plugIns.length; i++) { try { plugIns[i] = (PlugIn)RequestUtils.applicationInstance(plugInConfigs[i].getClassName()); BeanUtils.populate(plugIns[i], plugInConfigs[i].getProperties()); // Pass the current plugIn config object to the PlugIn. // The property is set only if the plugin declares it. // This plugin config object is needed by Tiles try { PropertyUtils.setProperty( plugIns[i], "currentPlugInConfigObject", plugInConfigs[i]); } catch (Exception e) { // FIXME Whenever we fail silently, we must document a valid reason // for doing so. Why should we fail silently if a property can't be set on // the plugin? } plugIns[i].init(this, (ModuleConfig) config); } catch (ServletException e) { throw e; } catch (Exception e) { String errMsg = internal.getMessage( "plugIn.init", plugInConfigs[i].getClassName()); log(errMsg, e); throw new UnavailableException(errMsg); } } sq~ uq~q~¦pppq~fq~fxsq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~ºpq~hxsq~bsq~ uq~ppppsq~isq~ uq~qï†pppq~ psq~ uq~ppppptR/** *

            Initialize the application MessageResources for the specified * module.

            * * @param config ModuleConfig information for this module * * @exception ServletException if initialization cannot be performed * @since Struts 1.1 * @deprecated use initModuleMessageResources() */ ptinitApplicationMessageResourcesq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft2 initModuleMessageResources(config); sq~ uq~q~¦pppq~fq~fxsq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~ºpq~hxsq~bsq~ uq~ppppsq~isq~ uq~qïžpppq~ psq~ uq~pppppt/** *

            Initialize the application MessageResources for the specified * module.

            * * @param config ModuleConfig information for this module * * @exception ServletException if initialization cannot be performed * @since Struts 1.1 */ ptinitModuleMessageResourcesq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft‹ MessageResourcesConfig mrcs[] = config.findMessageResourcesConfigs(); for (int i = 0; i < mrcs.length; i++) { if ((mrcs[i].getFactory() == null) || (mrcs[i].getParameter() == null)) { continue; } if (log.isDebugEnabled()) { log.debug( "Initializing module path '" + config.getPrefix() + "' message resources from '" + mrcs[i].getParameter() + "'"); } String factory = mrcs[i].getFactory(); MessageResourcesFactory.setFactoryClass(factory); MessageResourcesFactory factoryObject = MessageResourcesFactory.createFactory(); MessageResources resources = factoryObject.createResources(mrcs[i].getParameter()); resources.setReturnNull(mrcs[i].getNull()); getServletContext().setAttribute( mrcs[i].getKey() + config.getPrefix(), resources); } sq~ uq~q~¦pppq~fq~fxsq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~ºpq~hxsq~bsq~ uq~ppppsq~isq~ uq~qï¶pppq~ psq~ uq~ppppptÅ// -------------------------------------------------------- Private Methods /** * Perform backwards-compatible configuration of the default module's * controller configuration from servlet initialization parameters (as * were used in Struts 1.0). * * @param config The ModuleConfig object for the default module * * @since Struts 1.1 * @deprecated Will be removed in a release after Struts 1.1. */ ptdefaultControllerConfigq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~·gxq~ft* String value = null; ControllerConfig cc = config.getControllerConfig(); value = getServletConfig().getInitParameter("bufferSize"); if (value != null) { cc.setBufferSize(Integer.parseInt(value)); } value = getServletConfig().getInitParameter("content"); if (value != null) { cc.setContentType(value); } value = getServletConfig().getInitParameter("locale"); // must check for null here if (value != null) { if ("true".equalsIgnoreCase(value) || "yes".equalsIgnoreCase(value)) { cc.setLocale(true); } else { cc.setLocale(false); } } value = getServletConfig().getInitParameter("maxFileSize"); if (value != null) { cc.setMaxFileSize(value); } value = getServletConfig().getInitParameter("nocache"); if (value != null) { if ("true".equalsIgnoreCase(value) || "yes".equalsIgnoreCase(value)) { cc.setNocache(true); } else { cc.setNocache(false); } } value = getServletConfig().getInitParameter("multipartClass"); if (value != null) { cc.setMultipartClass(value); } value = getServletConfig().getInitParameter("tempDir"); if (value != null) { cc.setTempDir(value); } sq~ uq~ppppq~fq~fxsq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~ºpq~hxsq~bsq~ uq~ppppsq~isq~ uq~qïÎpppq~ psq~ uq~ppppptÝ/** * Perform backwards-compatible configuration of an ActionFormBeans * collection, and expose it as a servlet context attribute (as was * used in Struts 1.0). Note that the current controller code does * not (and should not) reference this attribute for any reason. * * @param config The ModuleConfig object for the default app * * @since Struts 1.1 * @deprecated Will be removed in a release after Struts 1.1. */ ptdefaultFormBeansConfigq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~·gxq~fts FormBeanConfig fbcs[] = config.findFormBeanConfigs(); ActionFormBeans afb = new ActionFormBeans(); afb.setFast(false); for (int i = 0; i < fbcs.length; i++) { afb.addFormBean((ActionFormBean) fbcs[i]); } afb.setFast(true); getServletContext().setAttribute(Action.FORM_BEANS_KEY, afb); sq~ uq~ppppq~fq~fxsq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~ºpq~hxsq~bsq~ uq~ppppsq~isq~ uq~qïæpppq~ psq~ uq~ppppptÜ/** * Perform backwards-compatible configuration of an ActionForwards * collection, and expose it as a servlet context attribute (as was * used in Struts 1.0). Note that the current controller code does * not (and should not) reference this attribute for any reason. * * @param config The ModuleConfig object for the default app * * @since Struts 1.1 * @deprecated Will be removed in a release after Struts 1.1. */ ptdefaultForwardsConfigq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~·gxq~ftc ForwardConfig fcs[] = config.findForwardConfigs(); ActionForwards af = new ActionForwards(); af.setFast(false); for (int i = 0; i < fcs.length; i++) { af.addForward((ActionForward) fcs[i]); } af.setFast(true); getServletContext().setAttribute(Action.FORWARDS_KEY, af); sq~ uq~ppppq~fq~fxsq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~ºpq~hxsq~bsq~ uq~ppppsq~isq~ uq~qïþpppq~ psq~ uq~ppppptÜ/** * Perform backwards-compatible configuration of an ActionMappings * collection, and expose it as a servlet context attribute (as was * used in Struts 1.0). Note that the current controller code does * not (and should not) reference this attribute for any reason. * * @param config The ModuleConfig object for the default app * * @since Struts 1.1 * @deprecated Will be removed in a release after Struts 1.1. */ ptdefaultMappingsConfigq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~·gxq~ft ActionConfig acs[] = config.findActionConfigs(); ActionMappings am = new ActionMappings(); am.setServlet(this); am.setFast(false); for (int i = 0; i < acs.length; i++) { am.addMapping((ActionMapping) acs[i]); } am.setFast(true); getServletContext().setAttribute(Action.MAPPINGS_KEY, am); sq~ uq~ppppq~fq~fxsq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~ºpq~hxsq~bsq~ uq~ppppsq~isq~ uq~qðpppq~ psq~ uq~pppppt/** * Perform backwards-compatible configuration of the default module's * message resources configuration from servlet initialization parameters * (as were used in Struts 1.0). * * @param config The ModuleConfig object for the default module * * @since Struts 1.1 * @deprecated Will be removed in a release after Struts 1.1. */ ptdefaultMessageResourcesConfigq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~·gxq~ft¬ String value = null; MessageResourcesConfig mrc = config.findMessageResourcesConfig(Globals.MESSAGES_KEY); if (mrc == null) { mrc = new MessageResourcesConfig(); mrc.setKey(Globals.MESSAGES_KEY); config.addMessageResourcesConfig(mrc); } value = getServletConfig().getInitParameter("application"); if (value != null) { mrc.setParameter(value); } value= getServletConfig().getInitParameter("factory"); if (value != null) { mrc.setFactory(value); } value = getServletConfig().getInitParameter("null"); if (value != null) { if (value.equalsIgnoreCase("true") || value.equalsIgnoreCase("yes")) { mrc.setNull(true); } else { mrc.setNull(false); } } sq~ uq~ppppq~fq~fxsq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~ºpq~hxsq~isq~ uq~ppppq~#sq~ uq~ppppptq/** * Return the {@link ModuleConfig} with which this form bean definition * is associated. */ ptgetModuleConfigq~cxsq~ uq~pppppq~fq~gq~fq~ºpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft+ return (this.moduleConfig); sq~ uq~ppppq~fq~fxsq~bsq~ uq~ppppsq~isq~ uq~qð>pppq~#sq~ uq~pppppt /** * Set the {@link ModuleConfig} with which this form bean definition * is associated. * * @param moduleConfig The new {@link ModuleConfig} or null * to disassociate this form bean configuration from any module */ ptsetModuleConfigq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft  if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.moduleConfig = moduleConfig; sq~ uq~ppppq~fq~fxsq~ uq~pppppppt moduleConfigq~cxsq~ uq~pppppq~fq~gq~fq~ºpq~hxsq~isq~ uq~ppppq~+sq~ uq~pppppt|/** * The module configuration with which we are associated. * @deprecated {@link #getModuleConfig()} */ ptgetApplicationConfigq~cxsq~ uq~pppppq~fq~gq~fq~ºpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft+ return (getModuleConfig()); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~+sq~ uq~ppppptL/** * The module configuration with which we are associated. */ ptgetModuleConfigq~cxsq~ uq~pppppq~fq~gq~fq~ºpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft+ return (this.moduleConfig); sq~ uq~ppppq~fq~fxsq~bsq~ uq~ppppsq~isq~ uq~qðvpppq~+sq~ uq~ppppptˆ/** * The module configuration with which we are associated. * @deprecated {@link #setModuleConfig(ModuleConfig)} */ ptsetApplicationConfigq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft- setModuleConfig(moduleConfig); sq~ uq~ppppq~fq~fxsq~ uq~pppppppt moduleConfigq~cxsq~ uq~pppppq~fq~gq~fq~ºpq~hxsq~bsq~ uq~ppppsq~isq~ uq~qðŽpppq~+sq~ uq~ppppptL/** * The module configuration with which we are associated. */ ptsetModuleConfigq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft  if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.moduleConfig = moduleConfig; sq~ uq~ppppq~fq~fxsq~ uq~pppppppt moduleConfigq~cxsq~ uq~pppppq~fq~gq~fq~ºpq~hxq€*0q€)fq§ªq~Ðúq~Ñ*q~ÑJq~Ñbq³çqª7qªŒqÂqºÓqºëq¿çq†q“¡q“ºq“Ûq~Ãbq&1ppq~Šxxppq~Bsq~ uq~pppppt"/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/action/PlugIn.java,v 1.10 2003/04/15 00:18:45 dgraham Exp $ * $Revision: 1.10 $ * $Date: 2003/04/15 00:18:45 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** *

            A PlugIn is a configuration wrapper for a * module-specific resource or service that needs to be notified about * application startup and application shutdown events (corresponding to when * the container calls init() and destroy() on the * corresponding {@link ActionServlet} instance). PlugIn Actions can be * configured in the struts-config.xml file, without the need * to subclass {@link ActionServlet} simply to perform application lifecycle * activities.

            * *

            Implementations of this interface must supply a zero-argument constructor * for use by {@link ActionServlet}. Configuration can be accomplished by * providing standard JavaBeans property setter methods, which will all have * been called before the init() method is invoked.

            * * @author Craig R. McClanahan * @version $Revision: 1.10 $ $Date: 2003/04/15 00:18:45 $ * @since Struts 1.1 */ pt PlugIn.javaq~fxsq~ uq~ppppsq~ uq~q~À§pppq~fxsq~ uq~ppppsq~#q~¦xq~ sq~Csq~ uq~ppppq~xsq~ uq~ppppsq~#q~¦xsq~Csq~ uq~ppppq~Ásq~ uq~ppppsq~#q~¦xsq~Csq~ uq~ppppq~bsq~ uq~ppppsq~#q~¦xqRq~³?q~´éq­òq~ÀNq~ËÒq~ÈØq´=qN¬sq~Csq~ uq~ppppq~}sq~ uq~ppppsq~#q~¦xq'q¯–qLEq°Xq~Bsq~Csq~ uq~ppppq~Hsq~ uq~ppppsq~#q~¦xq Œqçq šqp‘q€h»q~À•ppppppq~$sq~ uq~q~Ë|pppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~³sq~ uq~ppppppptServletException.javaq~$xsq~ uq~ppppsq~ uq~q~¦pppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxsq~ Guq~fqÈq~< q'usq~isq~ uq~sq~bsq~ uq~ppppqðåsq~ uq~ppppppptrequestq~=xsq~ uq~pppppq~$q~yq~$q~Œpq~$xsq~bsq~ uq~ppppqðåsq~ uq~ppppppptresponseq~=xsq~ uq~pppppq~$q~yq~$q~’pq~$xppq~ psq~ uq~pppppt?/** * Process an HTTP "GET" request. * * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs */ ptdoGetq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t/ process(request, response); sq~ uq~q~¦pppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppqñsq~ uq~ppppppptrequestq~=xsq~ uq~pppppq~$q~yq~$q~Œpq~$xsq~bsq~ uq~ppppqñsq~ uq~ppppppptresponseq~=xsq~ uq~pppppq~$q~yq~$q~’pq~$xppq~ psq~ uq~pppppt@/** * Process an HTTP "POST" request. * * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs */ ptdoPostq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t/ process(request, response); sq~ uq~q~¦pppq~$q~$xqÇ[sq~isq~ uq~sq~bsq~ uq~ppppqñ%sq~ uq~ppppppptprefixq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppqñ%sq~ uq~ppppppptpathq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xppq~ psq~ uq~pppppt~/** *

            Initialize the application configuration information for the * specified sub-application.

            * * @param prefix Application prefix for this application * @param path Context-relative resource path for this application's * configuration resource * * @exception ServletException if initialization cannot be performed */ ptinitApplicationConfigq~=xsq~ uq~pppppq~$q~yq~$q~bpq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$t© if (log.isDebugEnabled()) { log.debug("Initializing application path '" + prefix + "' configuration from '" + path + "'"); } // Parse the application configuration for this application ApplicationConfig config = null; InputStream input = null; String mapping = null; try { config = new ApplicationConfig(prefix); // Support for application-wide ActionMapping override mapping = getServletConfig().getInitParameter("mapping"); if (mapping != null) { config.setActionMappingClass(mapping); } Digester digester = initConfigDigester(); digester.push(config); input = getServletContext().getResourceAsStream(path); digester.parse(input); input.close(); getServletContext().setAttribute (Action.APPLICATION_KEY + prefix, config); } catch (Throwable t) { log.error(internal.getMessage("configParse", path), t); throw new UnavailableException (internal.getMessage("configParse", path)); } finally { if (input != null) { try { input.close(); } catch (IOException e) { ; } } } // Special handling for the default sub-application (for // backwards compatibility only, will be removed later) if (prefix.length() < 1) { defaultControllerConfig(config); defaultMessageResourcesConfig(config); defaultFormBeansConfig(config); defaultForwardsConfig(config); defaultMappingsConfig(config); } // Return the completed configuration object config.freeze(); return (config); sq~ uq~q~¦pppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppqñEsq~ uq~ppppppptconfigq~=xsq~ uq~pppppq~$q~yq~$q~bpq~$xpppq~ psq~ uq~pppppt/** *

            Initialize the application data sources for the specified * sub-application.

            * * @param config ApplicationConfig information for this application * * @exception ServletException if initialization cannot be performed */ ptinitApplicationDataSourcesq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$tè if (log.isDebugEnabled()) { log.debug("Initializing application path '" + config.getPrefix() + "' data sources"); } ServletContextWriter scw = new ServletContextWriter(getServletContext()); DataSourceConfig dscs[] = config.findDataSourceConfigs(); if (dscs == null) { dscs = new DataSourceConfig[0]; } dataSources.setFast(false); for (int i = 0; i < dscs.length; i++) { if (log.isDebugEnabled()) { log.debug("Initializing application path '" + config.getPrefix() + "' data source '" + dscs[i].getKey() + "'"); } DataSource ds = null; try { ds = (DataSource) RequestUtils.applicationInstance(dscs[i].getType()); BeanUtils.populate(ds, dscs[i].getProperties()); if (ds instanceof GenericDataSource) { ((GenericDataSource) ds).open(); } ds.setLogWriter(scw); } catch (Throwable t) { log.error(internal.getMessage ("dataSource.init", dscs[i].getKey()), t); throw new UnavailableException (internal.getMessage("dataSource.init", dscs[i].getKey())); } getServletContext().setAttribute (dscs[i].getKey() + config.getPrefix(), ds); dataSources.put(dscs[i].getKey(), ds); } dataSources.setFast(true); // Call deprecated method for backwards compatibility if ("".equals(config.getPrefix())) { initDataSources(); } sq~ uq~q~¦pppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppqñ]sq~ uq~ppppppptconfigq~=xsq~ uq~pppppq~$q~yq~$q~bpq~$xpppq~ psq~ uq~ppppptú/** *

            Initialize the plug ins for the specified sub-application.

            * * @param config ApplicationConfig information for this application * * @exception ServletException if initialization cannot be performed */ ptinitApplicationPlugInsq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$psq~ uq~q~¦pppq~$q~$xq]eq~Áeq~¹hq´’qµqµ*qµ‚qµºqµâq¶ªq¶úq·"q~¹Ûq~º+q~;ßq[qÞqRq~%q¹ðq~8q wq„ƒq„¤q\¯q~ÁJq~ÁÉqÈŸqÈÏsq~isq~ uq~ppppq~ psq~ uq~pppppt"/** * Initialize this servlet. Most of the processing has been factored into * support methods so that you can override particular functionality at a * fairly granular level. * * @exception ServletException if we cannot configure ourselves correctly */ ptinitq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tê initInternal(); initOther(); initServlet(); // Initialize sub-applications as needed getServletContext().setAttribute(Action.ACTION_SERVLET_KEY, this); ApplicationConfig ac = initApplicationConfig("", config); initApplicationMessageResources(ac); initApplicationDataSources(ac); initApplicationPlugIns(ac); Enumeration names = getServletConfig().getInitParameterNames(); while (names.hasMoreElements()) { String name = (String) names.nextElement(); if (!name.startsWith("config/")) { continue; } String prefix = name.substring(6); ac = initApplicationConfig (prefix, getServletConfig().getInitParameter(name)); initApplicationMessageResources(ac); initApplicationDataSources(ac); initApplicationPlugIns(ac); } destroyConfigDigester(); sq~ uq~q~¦pppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqñ„sq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Œpq~§xsq~bsq~ uq~ppppqñ„sq~ uq~ppppppptresponseq~¢xsq~ uq~pppppq~¥q~¦q~¥q~’pq~§xppq~ psq~ uq~pppppt?/** * Process an HTTP "GET" request. * * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs */ ptdoGetq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t/ process(request, response); sq~ uq~q~¦pppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqñ¤sq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Œpq~§xsq~bsq~ uq~ppppqñ¤sq~ uq~ppppppptresponseq~¢xsq~ uq~pppppq~¥q~¦q~¥q~’pq~§xppq~ psq~ uq~pppppt@/** * Process an HTTP "POST" request. * * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs */ ptdoPostq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t/ process(request, response); sq~ uq~q~¦pppq~¥q~¥xqÇtsq~isq~ uq~sq~bsq~ uq~ppppqñÄsq~ uq~ppppppptprefixq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppqñÄsq~ uq~ppppppptpathq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xppq~ psq~ uq~pppppt˜/** *

            Initialize the application configuration information for the * specified sub-application.

            * * @param prefix Application prefix for this application * @param path Context-relative resource path for this application's * configuration resource * * @exception ServletException if initialization cannot be performed * @since Struts 1.1 */ ptinitApplicationConfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~bpq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥t© if (log.isDebugEnabled()) { log.debug("Initializing application path '" + prefix + "' configuration from '" + path + "'"); } // Parse the application configuration for this application ApplicationConfig config = null; InputStream input = null; String mapping = null; try { config = new ApplicationConfig(prefix); // Support for application-wide ActionMapping override mapping = getServletConfig().getInitParameter("mapping"); if (mapping != null) { config.setActionMappingClass(mapping); } Digester digester = initConfigDigester(); digester.push(config); input = getServletContext().getResourceAsStream(path); digester.parse(input); input.close(); getServletContext().setAttribute (Action.APPLICATION_KEY + prefix, config); } catch (Throwable t) { log.error(internal.getMessage("configParse", path), t); throw new UnavailableException (internal.getMessage("configParse", path)); } finally { if (input != null) { try { input.close(); } catch (IOException e) { ; } } } // Special handling for the default sub-application (for // backwards compatibility only, will be removed later) if (prefix.length() < 1) { defaultControllerConfig(config); defaultMessageResourcesConfig(config); defaultFormBeansConfig(config); defaultForwardsConfig(config); defaultMappingsConfig(config); } // Return the completed configuration object config.freeze(); return (config); sq~ uq~q~¦pppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqñäsq~ uq~ppppppptconfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~bpq~§xpppq~ psq~ uq~pppppt,/** *

            Initialize the application data sources for the specified * sub-application.

            * * @param config ApplicationConfig information for this application * * @exception ServletException if initialization cannot be performed * @since Struts 1.1 */ ptinitApplicationDataSourcesq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥tè if (log.isDebugEnabled()) { log.debug("Initializing application path '" + config.getPrefix() + "' data sources"); } ServletContextWriter scw = new ServletContextWriter(getServletContext()); DataSourceConfig dscs[] = config.findDataSourceConfigs(); if (dscs == null) { dscs = new DataSourceConfig[0]; } dataSources.setFast(false); for (int i = 0; i < dscs.length; i++) { if (log.isDebugEnabled()) { log.debug("Initializing application path '" + config.getPrefix() + "' data source '" + dscs[i].getKey() + "'"); } DataSource ds = null; try { ds = (DataSource) RequestUtils.applicationInstance(dscs[i].getType()); BeanUtils.populate(ds, dscs[i].getProperties()); if (ds instanceof GenericDataSource) { ((GenericDataSource) ds).open(); } ds.setLogWriter(scw); } catch (Throwable t) { log.error(internal.getMessage ("dataSource.init", dscs[i].getKey()), t); throw new UnavailableException (internal.getMessage("dataSource.init", dscs[i].getKey())); } getServletContext().setAttribute (dscs[i].getKey() + config.getPrefix(), ds); dataSources.put(dscs[i].getKey(), ds); } dataSources.setFast(true); // Call deprecated method for backwards compatibility if ("".equals(config.getPrefix())) { initDataSources(); } sq~ uq~q~¦pppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqñüsq~ uq~ppppppptconfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~bpq~§xpppq~ psq~ uq~pppppt/** *

            Initialize the plug ins for the specified sub-application.

            * * @param config ApplicationConfig information for this application * * @exception ServletException if initialization cannot be performed * @since Struts 1.1 */ ptinitApplicationPlugInsq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥t if (log.isDebugEnabled()) { log.debug("Initializing application path '" + config.getPrefix() + "' plug ins"); } PlugInConfig plugInConfigs[] = config.findPlugInConfigs(); PlugIn plugIns[] = new PlugIn[plugInConfigs.length]; for (int i = 0; i < plugIns.length; i++) { try { plugIns[i] = (PlugIn) RequestUtils.applicationInstance (plugInConfigs[i].getClassName()); BeanUtils.populate(plugIns[i], plugInConfigs[i].getProperties()); plugIns[i].init(this, config); } catch (Exception e) { throw new UnavailableException (internal.getMessage("plugIn.init", plugInConfigs[i].getClassName())); } } getServletContext().setAttribute (Action.PLUG_INS_KEY + config.getPrefix(), plugIns); sq~ uq~q~¦pppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqòsq~ uq~ppppppptconfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~bpq~§xpppq~ psq~ uq~pppppt0/** *

            Initialize the application MessageResources for the specified * sub-application.

            * * @param config ApplicationConfig information for this application * * @exception ServletException if initialization cannot be performed * @since Struts 1.1 */ ptinitApplicationMessageResourcesq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥t² MessageResourcesConfig mrcs[] = config.findMessageResourcesConfigs(); for (int i = 0; i < mrcs.length; i++) { if ((mrcs[i].getFactory() == null) || (mrcs[i].getParameter() == null)) { continue; } if (log.isDebugEnabled()) { log.debug("Initializing application path '" + config.getPrefix() + "' message resources from '" + mrcs[i].getParameter() + "'"); } try { String factory = mrcs[i].getFactory(); MessageResourcesFactory.setFactoryClass(factory); MessageResourcesFactory factoryObject = MessageResourcesFactory.createFactory(); MessageResources resources = factoryObject.createResources(mrcs[i].getParameter()); resources.setReturnNull(mrcs[i].getNull()); getServletContext().setAttribute (mrcs[i].getKey() + config.getPrefix(), resources); } catch (Throwable t) { log.error(internal.getMessage ("applicationResources", mrcs[i].getParameter()), t); throw new UnavailableException (internal.getMessage ("applicationResources", mrcs[i].getParameter())); } } sq~ uq~q~¦pppq~¥q~¥xsq~isq~ uq~ppppq~ psq~ uq~ppppptE/** * Initialize data sources for the default application. This method * signature is maintained only for backwards compatibility, and will * be removed in a subsequent release. * * @deprecated Replaced by initApplicationDataSources() that takes * an ApplicationConfig argument */ ptinitDataSourcesq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥tY ; // Implementation has been replaced in initApplicationDataSources() sq~ uq~q~¦pppq~¥q~¥xsq~isq~ uq~ppppq~ psq~ uq~ppppptš/** * Initialize our internal MessageResources bundle. * * @exception ServletException if we cannot initialize these resources */ pt initInternalq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥t‡ try { internal = MessageResources.getMessageResources(internalName); } catch (MissingResourceException e) { log.error("Cannot load internal resources from '" + internalName + "'", e); throw new UnavailableException ("Cannot load internal resources from '" + internalName + "'"); } sq~ uq~q~¦pppq~¥q~¥xsq~isq~ uq~ppppq~ psq~ uq~pppppt¬/** * Initialize other global characteristics of the controller servlet. * * @exception ServletException if we cannot initialize these resources */ pt initOtherq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥ts String value = null; value = getServletConfig().getInitParameter("config"); if (value != null) { config = value; } try { value = getServletConfig().getInitParameter("debug"); debug = Integer.parseInt(value); } catch (Throwable t) { debug = 0; } try { value = getServletConfig().getInitParameter("detail"); detail = Integer.parseInt(value); } catch (Throwable t) { detail = 0; } // Backwards compatibility hack for form beans of Java wrapper classes // Set to true for strict Struts 1.0 compatibility value = getServletConfig().getInitParameter("convertHack"); if (value != null) { if ("true".equalsIgnoreCase(value) || "yes".equalsIgnoreCase(value) || "on".equalsIgnoreCase(value) || "y".equalsIgnoreCase(value) || "1".equalsIgnoreCase(value)) { convertHack = true; } else { convertHack = false; } } if (convertHack) { ConvertUtils.deregister(); ConvertUtils.register(new BooleanConverter(null), Boolean.class); ConvertUtils.register(new ByteConverter(null), Byte.class); ConvertUtils.register(new CharacterConverter(null), Character.class); ConvertUtils.register(new DoubleConverter(null), Double.class); ConvertUtils.register(new FloatConverter(null), Float.class); ConvertUtils.register(new IntegerConverter(null), Integer.class); ConvertUtils.register(new LongConverter(null), Long.class); ConvertUtils.register(new ShortConverter(null), Short.class); } sq~ uq~q~¦pppq~¥q~¥xsq~isq~ uq~ppppq~ psq~ uq~ppppptï/** * Initialize the servlet mapping under which our controller servlet * is being accessed. This will be used in the &html:form> * tag to generate correct destination URLs for form submissions. */ pt initServletq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥tÀ // Remember our servlet name this.servletName = getServletConfig().getServletName(); // Prepare a Digester to scan the web application deployment descriptor Digester digester = new Digester(); digester.push(this); digester.setDebug(this.debug); digester.setNamespaceAware(true); digester.setValidating(false); // Register our local copy of the DTDs that we can find for (int i = 0; i < registrations.length; i += 2) { URL url = this.getClass().getResource(registrations[i+1]); if (url != null) digester.register(registrations[i], url.toString()); } // Configure the processing rules that we need digester.addCallMethod("web-app/servlet-mapping", "addServletMapping", 2); digester.addCallParam("web-app/servlet-mapping/servlet-name", 0); digester.addCallParam("web-app/servlet-mapping/url-pattern", 1); // Process the web application deployment descriptor if (log.isDebugEnabled()) { log.debug("Scanning web.xml for controller servlet mapping"); } InputStream input= null; try { input = getServletContext().getResourceAsStream("/WEB-INF/web.xml"); digester.parse(input); } catch (Throwable e) { log.error(internal.getMessage("configWebXml"), e); } finally { if (input != null) input = null; } // Record a servlet context attribute (if appropriate) if (log.isDebugEnabled()) { log.debug("Mapping for servlet '" + servletName + "' = '" + servletMapping + "'"); } if (servletMapping != null) getServletContext().setAttribute(Action.SERVLET_KEY, servletMapping); sq~ uq~q~¦pppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqòlsq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Œpq~§xsq~bsq~ uq~ppppqòlsq~ uq~ppppppptresponseq~¢xsq~ uq~pppppq~¥q~¦q~¥q~’pq~§xppq~ psq~ uq~ppppptŒ/** * Perform the standard request processing for this request, and create * the corresponding response. * * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception is thrown */ ptprocessq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥t· RequestUtils.selectApplication(request, getServletContext()); getRequestProcessor(getApplicationConfig(request)).process (request, response); sq~ uq~q~¦pppq~¥q~¥xq]Ýq Éq·ªq·Êq¸:q¸bq¸ºq¸òq¹q¹âqº2qºZqºŠqº²q'jq'Šq'šq'Òq(q(*q(Rq(zq«Ëq«žq­ q~¹…q~¹¨q~¹¸q~ºq~Èéq®Vq~<7q~=~q~>†q~?¼q~?ìq~Bnq~MqºqÂq ¶q†ûq‡q\àq~Á‚q~Â?sq~isq~ uq~ppppq~ psq~ uq~pppppt"/** * Initialize this servlet. Most of the processing has been factored into * support methods so that you can override particular functionality at a * fairly granular level. * * @exception ServletException if we cannot configure ourselves correctly */ ptinitq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t initInternal(); initOther(); initServlet(); // Initialize application modules as needed getServletContext().setAttribute(Action.ACTION_SERVLET_KEY, this); ApplicationConfig ac = initApplicationConfig("", config); initApplicationMessageResources(ac); initApplicationDataSources(ac); initApplicationPlugIns(ac); ac.freeze(); Enumeration names = getServletConfig().getInitParameterNames(); while (names.hasMoreElements()) { String name = (String) names.nextElement(); if (!name.startsWith("config/")) { continue; } String prefix = name.substring(6); ac = initApplicationConfig (prefix, getServletConfig().getInitParameter(name)); initApplicationMessageResources(ac); initApplicationDataSources(ac); initApplicationPlugIns(ac); ac.freeze(); } destroyConfigDigester(); sq~ uq~q~¦pppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqòœsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xsq~bsq~ uq~ppppqòœsq~ uq~ppppppptresponseq~rxsq~ uq~pppppq~–q~—q~–q~’pq~˜xppq~ psq~ uq~pppppt?/** * Process an HTTP "GET" request. * * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs */ ptdoGetq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t/ process(request, response); sq~ uq~q~kq~¦ppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqò¼sq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xsq~bsq~ uq~ppppqò¼sq~ uq~ppppppptresponseq~rxsq~ uq~pppppq~–q~—q~–q~’pq~˜xppq~ psq~ uq~pppppt@/** * Process an HTTP "POST" request. * * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs */ ptdoPostq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t/ process(request, response); sq~ uq~q~kq~¦ppq~–q~–xqÇsq~isq~ uq~sq~bsq~ uq~ppppqòÜsq~ uq~ppppppptprefixq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqòÜsq~ uq~ppppppptpathq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xppq~ psq~ uq~pppppt›/** *

            Initialize the application configuration information for the * specified application module.

            * * @param prefix Application prefix for this application * @param path Context-relative resource path for this application's * configuration resource * * @exception ServletException if initialization cannot be performed * @since Struts 1.1 */ ptinitApplicationConfigq~rxsq~ uq~pppppq~–q~—q~–q~bpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–t í if (log.isDebugEnabled()) { log.debug("Initializing application path '" + prefix + "' configuration from '" + path + "'"); } // Parse the application configuration for this module ApplicationConfig config = null; InputStream input = null; String mapping = null; try { config = new ApplicationConfig(prefix); // Support for module-wide ActionMapping type override mapping = getServletConfig().getInitParameter("mapping"); if (mapping != null) { config.setActionMappingClass(mapping); } Digester digester = initConfigDigester(); digester.push(config); URL url = getServletContext().getResource(path); InputSource is = new InputSource(url.toExternalForm()); input = getServletContext().getResourceAsStream(path); is.setByteStream(input); digester.parse(is); input.close(); getServletContext().setAttribute (Action.APPLICATION_KEY + prefix, config); } catch (Throwable t) { log.error(internal.getMessage("configParse", path), t); throw new UnavailableException (internal.getMessage("configParse", path)); } finally { if (input != null) { try { input.close(); } catch (IOException e) { ; } } } // Force creation and registration of DynaActionFormClass instances // for all dynamic form beans we wil be using FormBeanConfig fbs[] = config.findFormBeanConfigs(); for (int i = 0; i < fbs.length; i++) { if (fbs[i].getDynamic()) { DynaActionFormClass.createDynaActionFormClass(fbs[i]); } } // Special handling for the default application module (for // backwards compatibility only, will be removed later) if (prefix.length() < 1) { defaultControllerConfig(config); defaultMessageResourcesConfig(config); defaultFormBeansConfig(config); defaultForwardsConfig(config); defaultMappingsConfig(config); } // Return the completed configuration object //config.freeze(); // Now done after plugins init return (config); sq~ uq~q~¦pppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqòüsq~ uq~ppppppptconfigq~rxsq~ uq~pppppq~–q~—q~–q~bpq~˜xpppq~ psq~ uq~pppppt/** *

            Initialize the data sources for the specified application * module.

            * * @param config ApplicationConfig information for this module * * @exception ServletException if initialization cannot be performed * @since Struts 1.1 */ ptinitApplicationDataSourcesq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–tÞ if (log.isDebugEnabled()) { log.debug("Initializing module path '" + config.getPrefix() + "' data sources"); } ServletContextWriter scw = new ServletContextWriter(getServletContext()); DataSourceConfig dscs[] = config.findDataSourceConfigs(); if (dscs == null) { dscs = new DataSourceConfig[0]; } dataSources.setFast(false); for (int i = 0; i < dscs.length; i++) { if (log.isDebugEnabled()) { log.debug("Initializing module path '" + config.getPrefix() + "' data source '" + dscs[i].getKey() + "'"); } DataSource ds = null; try { ds = (DataSource) RequestUtils.applicationInstance(dscs[i].getType()); BeanUtils.populate(ds, dscs[i].getProperties()); if (ds instanceof GenericDataSource) { ((GenericDataSource) ds).open(); } ds.setLogWriter(scw); } catch (Throwable t) { log.error(internal.getMessage ("dataSource.init", dscs[i].getKey()), t); throw new UnavailableException (internal.getMessage("dataSource.init", dscs[i].getKey())); } getServletContext().setAttribute (dscs[i].getKey() + config.getPrefix(), ds); dataSources.put(dscs[i].getKey(), ds); } dataSources.setFast(true); // Call deprecated method for backwards compatibility if ("".equals(config.getPrefix())) { initDataSources(); } sq~ uq~q~¦pppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqósq~ uq~ppppppptconfigq~rxsq~ uq~pppppq~–q~—q~–q~bpq~˜xpppq~ psq~ uq~pppppt/** *

            Initialize the plug ins for the specified application module.

            * * @param config ApplicationConfig information for this module * * @exception ServletException if initialization cannot be performed * @since Struts 1.1 */ ptinitApplicationPlugInsq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–tž if (log.isDebugEnabled()) { log.debug("Initializing module path '" + config.getPrefix() + "' plug ins"); } PlugInConfig plugInConfigs[] = config.findPlugInConfigs(); PlugIn plugIns[] = new PlugIn[plugInConfigs.length]; getServletContext().setAttribute (Action.PLUG_INS_KEY + config.getPrefix(), plugIns); for (int i = 0; i < plugIns.length; i++) { try { plugIns[i] = (PlugIn) RequestUtils.applicationInstance (plugInConfigs[i].getClassName()); BeanUtils.populate(plugIns[i], plugInConfigs[i].getProperties()); plugIns[i].init(this, config); } catch (ServletException e) { // Lets propagate throw e; } catch (Exception e) { e.printStackTrace(); throw new UnavailableException (internal.getMessage("plugIn.init", plugInConfigs[i].getClassName())); } } sq~ uq~q~¦pppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqó,sq~ uq~ppppppptconfigq~rxsq~ uq~pppppq~–q~—q~–q~bpq~˜xpppq~ psq~ uq~pppppt./** *

            Initialize the application MessageResources for the specified * application module.

            * * @param config ApplicationConfig information for this module * * @exception ServletException if initialization cannot be performed * @since Struts 1.1 */ ptinitApplicationMessageResourcesq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–t² MessageResourcesConfig mrcs[] = config.findMessageResourcesConfigs(); for (int i = 0; i < mrcs.length; i++) { if ((mrcs[i].getFactory() == null) || (mrcs[i].getParameter() == null)) { continue; } if (log.isDebugEnabled()) { log.debug("Initializing application path '" + config.getPrefix() + "' message resources from '" + mrcs[i].getParameter() + "'"); } try { String factory = mrcs[i].getFactory(); MessageResourcesFactory.setFactoryClass(factory); MessageResourcesFactory factoryObject = MessageResourcesFactory.createFactory(); MessageResources resources = factoryObject.createResources(mrcs[i].getParameter()); resources.setReturnNull(mrcs[i].getNull()); getServletContext().setAttribute (mrcs[i].getKey() + config.getPrefix(), resources); } catch (Throwable t) { log.error(internal.getMessage ("applicationResources", mrcs[i].getParameter()), t); throw new UnavailableException (internal.getMessage ("applicationResources", mrcs[i].getParameter())); } } sq~ uq~q~¦pppq~–q~–xsq~isq~ uq~ppppq~ psq~ uq~ppppptš/** *

            Create (if needed) and return a new Digester instance that has been * initialized to process Struts module configuraiton files and * configure a corresponding ApplicationConfig object (which must be * pushed on to the evaluation stack before parsing begins).

            * * @exception ServletException if a Digester cannot be configured * @since Struts 1.1 */ ptinitConfigDigesterq~rxsq~ uq~pppppq~–q~—q~–q~ Špq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–t â // Do we have an existing instance? if (configDigester != null) { return (configDigester); } // Check the status of the "validating" initialization parameter boolean validating = true; String value = getServletConfig().getInitParameter("validating"); if (value != null) { if ("false".equalsIgnoreCase(value) || "no".equalsIgnoreCase(value) || "n".equalsIgnoreCase(value) || "0".equalsIgnoreCase(value)) { validating = false; } } // Create a new Digester instance with standard capabilities configDigester = new Digester(); configDigester.setDebug(detail); configDigester.setNamespaceAware(true); configDigester.setValidating(validating); configDigester.setUseContextClassLoader(true); configDigester.addRuleSet(new ConfigRuleSet()); for (int i = 0; i < registrations.length; i += 2) { URL url = this.getClass().getResource(registrations[i+1]); if (url != null) configDigester.register(registrations[i], url.toString()); } // Add any custom RuleSet instances that have been specified String rulesets = getServletConfig().getInitParameter("rulesets"); if (rulesets == null) { rulesets = ""; } rulesets = rulesets.trim(); String ruleset = null; while (rulesets.length() > 0) { int comma = rulesets.indexOf(","); if (comma < 0) { ruleset = rulesets.trim(); rulesets = ""; } else { ruleset = rulesets.substring(0, comma).trim(); rulesets = rulesets.substring(comma + 1).trim(); } if (log.isDebugEnabled()) { log.debug("Configuring custom Digester Ruleset of type " + ruleset); } try { RuleSet instance = (RuleSet) RequestUtils.applicationInstance(ruleset); configDigester.addRuleSet(instance); } catch (Exception e) { log.error("Exception configuring custom Digester RuleSet", e); throw new ServletException(e); } } // Return the completely configured Digester instance return (configDigester); sq~ uq~q~¦pppq~–q~–xsq~isq~ uq~ppppq~ psq~ uq~pppppt@/** * Initialize data sources for the default module. This method * signature is maintained only for backwards compatibility, and will * be removed in a subsequent release. * * @deprecated Replaced by initApplicationDataSources() that takes * an ApplicationConfig argument */ ptinitDataSourcesq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–tY ; // Implementation has been replaced in initApplicationDataSources() sq~ uq~q~¦pppq~–q~–xsq~isq~ uq~ppppq~ psq~ uq~ppppptš/** * Initialize our internal MessageResources bundle. * * @exception ServletException if we cannot initialize these resources */ pt initInternalq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–t‡ try { internal = MessageResources.getMessageResources(internalName); } catch (MissingResourceException e) { log.error("Cannot load internal resources from '" + internalName + "'", e); throw new UnavailableException ("Cannot load internal resources from '" + internalName + "'"); } sq~ uq~q~¦pppq~–q~–xsq~isq~ uq~ppppq~ psq~ uq~pppppt¬/** * Initialize other global characteristics of the controller servlet. * * @exception ServletException if we cannot initialize these resources */ pt initOtherq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–ts String value = null; value = getServletConfig().getInitParameter("config"); if (value != null) { config = value; } try { value = getServletConfig().getInitParameter("debug"); debug = Integer.parseInt(value); } catch (Throwable t) { debug = 0; } try { value = getServletConfig().getInitParameter("detail"); detail = Integer.parseInt(value); } catch (Throwable t) { detail = 0; } // Backwards compatibility hack for form beans of Java wrapper classes // Set to true for strict Struts 1.0 compatibility value = getServletConfig().getInitParameter("convertNull"); if (value != null) { if ("true".equalsIgnoreCase(value) || "yes".equalsIgnoreCase(value) || "on".equalsIgnoreCase(value) || "y".equalsIgnoreCase(value) || "1".equalsIgnoreCase(value)) { convertNull = true; } else { convertNull = false; } } if (convertNull) { ConvertUtils.deregister(); ConvertUtils.register(new BooleanConverter(null), Boolean.class); ConvertUtils.register(new ByteConverter(null), Byte.class); ConvertUtils.register(new CharacterConverter(null), Character.class); ConvertUtils.register(new DoubleConverter(null), Double.class); ConvertUtils.register(new FloatConverter(null), Float.class); ConvertUtils.register(new IntegerConverter(null), Integer.class); ConvertUtils.register(new LongConverter(null), Long.class); ConvertUtils.register(new ShortConverter(null), Short.class); } sq~ uq~q~¦pppq~–q~–xsq~isq~ uq~ppppq~ psq~ uq~pppppt/** * Initialize the servlet mapping under which our controller servlet * is being accessed. This will be used in the &html:form> * tag to generate correct destination URLs for form submissions. * @throws ServletException if error happens while scanning web.xml * FIXME throws ServletException Never thrown by this base method */ pt initServletq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–tB // Remember our servlet name this.servletName = getServletConfig().getServletName(); // Prepare a Digester to scan the web application deployment descriptor Digester digester = new Digester(); digester.push(this); digester.setDebug(this.debug); digester.setNamespaceAware(true); digester.setValidating(false); // Register our local copy of the DTDs that we can find for (int i = 0; i < registrations.length; i += 2) { URL url = this.getClass().getResource(registrations[i+1]); if (url != null) digester.register(registrations[i], url.toString()); } // Configure the processing rules that we need digester.addCallMethod("web-app/servlet-mapping", "addServletMapping", 2); digester.addCallParam("web-app/servlet-mapping/servlet-name", 0); digester.addCallParam("web-app/servlet-mapping/url-pattern", 1); // Process the web application deployment descriptor if (log.isDebugEnabled()) { log.debug("Scanning web.xml for controller servlet mapping"); } InputStream input= null; try { input = getServletContext().getResourceAsStream("/WEB-INF/web.xml"); digester.parse(input); } catch (Throwable e) { log.error(internal.getMessage("configWebXml"), e); } finally { if (input != null) { try { input.close(); } catch (IOException e) { ; } } } // Record a servlet context attribute (if appropriate) if (log.isDebugEnabled()) { log.debug("Mapping for servlet '" + servletName + "' = '" + servletMapping + "'"); } if (servletMapping != null) getServletContext().setAttribute(Action.SERVLET_KEY, servletMapping); sq~ uq~q~¦pppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqó”sq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xsq~bsq~ uq~ppppqó”sq~ uq~ppppppptresponseq~rxsq~ uq~pppppq~–q~—q~–q~’pq~˜xppq~ psq~ uq~ppppptŒ/** * Perform the standard request processing for this request, and create * the corresponding response. * * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception is thrown */ ptprocessq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–t· RequestUtils.selectApplication(request, getServletContext()); getRequestProcessor(getApplicationConfig(request)).process (request, response); sq~ uq~q~kq~¦ppq~–q~–xq ÷q»Rq»rq»âq£$q¼ q¼bq¼šq¼Âq½Šq½Úq¾q¾2q¾Zq¾‚q¾ªq^UqÉ_qÉq¬-q¯¹q­Pq®q(¢q(²q(Âq(úq)*q)Rq)zq)¢q~Éq~Ï3q~Ïcq~σq~Ï£q~ºgq~º‡q~º—q~ºÇq~ºïq¦gq¦q~@Œq~eqº qÃ>q õq~}q‰sq‰”q‰Åq~Á¢q~—q¡%q^Íq¿Xq¿xq¿èq¤qÀqÀhqÀ qÀÈqÁqÁàqÂqÂ8qÂ`qˆq°qÊqÊOsq~isq~ uq~ppppq~ psq~ uq~pppppt"/** * Initialize this servlet. Most of the processing has been factored into * support methods so that you can override particular functionality at a * fairly granular level. * * @exception ServletException if we cannot configure ourselves correctly */ ptinitq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tI initInternal(); initOther(); initServlet(); // Initialize modules as needed getServletContext().setAttribute(Globals.ACTION_SERVLET_KEY, this); ModuleConfig moduleConfig = initModuleConfig("", config); initModuleMessageResources(moduleConfig); initModuleDataSources(moduleConfig); initModulePlugIns(moduleConfig); moduleConfig.freeze(); Enumeration names = getServletConfig().getInitParameterNames(); while (names.hasMoreElements()) { String name = (String) names.nextElement(); if (!name.startsWith("config/")) { continue; } String prefix = name.substring(6); moduleConfig = initModuleConfig (prefix, getServletConfig().getInitParameter(name)); initModuleMessageResources(moduleConfig); initModuleDataSources(moduleConfig); initModulePlugIns(moduleConfig); moduleConfig.freeze(); } destroyConfigDigester(); sq~ uq~q~¦pppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqóÄsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xsq~bsq~ uq~ppppqóÄsq~ uq~ppppppptresponseq~{xsq~ uq~pppppq~~q~q~~q~’pq~€xppq~ psq~ uq~pppppt?/** * Process an HTTP "GET" request. * * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs */ ptdoGetq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t/ process(request, response); sq~ uq~q~kq~¦ppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqóäsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xsq~bsq~ uq~ppppqóäsq~ uq~ppppppptresponseq~{xsq~ uq~pppppq~~q~q~~q~’pq~€xppq~ psq~ uq~pppppt@/** * Process an HTTP "POST" request. * * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs */ ptdoPostq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t/ process(request, response); sq~ uq~q~kq~¦ppq~~q~~xqǦsq~isq~ uq~sq~bsq~ uq~ppppqôsq~ uq~ppppppptprefixq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppqôsq~ uq~ppppppptpathq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xppq~ psq~ uq~ppppptÂ/** *

            Initialize the application configuration information for the * specified module.

            * * @param prefix Module prefix for this module * @param path Context-relative resource path for this modules's * configuration resource * * @exception ServletException if initialization cannot be performed * @deprecated use {@link #initModuleConfig(String,String)} * @since Struts 1.1 */ ptinitApplicationConfigq~{xsq~ uq~pppppq~~q~q~~q~bpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t' /* FIXME for Struts 1.2 Since Struts 1.1 only has one implementation for ModuleConfig casting is safe here. Used only for transition purposes ! */ return new ApplicationConfig((ModuleConfigImpl)initModuleConfig(prefix,path)); sq~ uq~q~¦pppq~~q~~xqí2qíUqímqí…qíqíµqíÍsq~isq~ uq~ppppq~ psq~ uq~pppppt•/** *

            Create (if needed) and return a new Digester instance that has been * initialized to process Struts module configuraiton files and * configure a corresponding ModuleConfig object (which must be * pushed on to the evaluation stack before parsing begins).

            * * @exception ServletException if a Digester cannot be configured * @since Struts 1.1 */ ptinitConfigDigesterq~{xsq~ uq~pppppq~~q~q~~q~ Špq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t Z // Do we have an existing instance? if (configDigester != null) { return (configDigester); } // Check the status of the "validating" initialization parameter boolean validating = true; String value = getServletConfig().getInitParameter("validating"); if ("false".equalsIgnoreCase(value) || "no".equalsIgnoreCase(value) || "n".equalsIgnoreCase(value) || "0".equalsIgnoreCase(value)) { validating = false; } // Create a new Digester instance with standard capabilities configDigester = new Digester(); configDigester.setNamespaceAware(true); configDigester.setValidating(validating); configDigester.setUseContextClassLoader(true); configDigester.addRuleSet(new ConfigRuleSet()); for (int i = 0; i < registrations.length; i += 2) { URL url = this.getClass().getResource(registrations[i+1]); if (url != null) { configDigester.register(registrations[i], url.toString()); } } // Add any custom RuleSet instances that have been specified String rulesets = getServletConfig().getInitParameter("rulesets"); if (rulesets == null) { rulesets = ""; } rulesets = rulesets.trim(); String ruleset = null; while (rulesets.length() > 0) { int comma = rulesets.indexOf(","); if (comma < 0) { ruleset = rulesets.trim(); rulesets = ""; } else { ruleset = rulesets.substring(0, comma).trim(); rulesets = rulesets.substring(comma + 1).trim(); } if (log.isDebugEnabled()) { log.debug("Configuring custom Digester Ruleset of type " + ruleset); } try { RuleSet instance = (RuleSet) RequestUtils.applicationInstance(ruleset); configDigester.addRuleSet(instance); } catch (Exception e) { log.error("Exception configuring custom Digester RuleSet", e); throw new ServletException(e); } } // Return the completely configured Digester instance return (configDigester); sq~ uq~q~¦pppq~~q~~xsq~isq~ uq~ppppq~ psq~ uq~ppppptV/** * Initialize data sources for the default module. This method * signature is maintained only for backwards compatibility, and will * be removed in a subsequent release. * * @deprecated Replaced by initApplicationDataSources() that takes * an ModuleConfig argument. This method does nothing. */ ptinitDataSourcesq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~tY ; // Implementation has been replaced in initApplicationDataSources() sq~ uq~q~¦pppq~~q~~xsq~isq~ uq~ppppq~ psq~ uq~ppppptš/** * Initialize our internal MessageResources bundle. * * @exception ServletException if we cannot initialize these resources */ pt initInternalq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t‡ try { internal = MessageResources.getMessageResources(internalName); } catch (MissingResourceException e) { log.error("Cannot load internal resources from '" + internalName + "'", e); throw new UnavailableException ("Cannot load internal resources from '" + internalName + "'"); } sq~ uq~q~¦pppq~~q~~xsq~isq~ uq~ppppq~ psq~ uq~pppppt¬/** * Initialize other global characteristics of the controller servlet. * * @exception ServletException if we cannot initialize these resources */ pt initOtherq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~tÌ String value = null; value = getServletConfig().getInitParameter("config"); if (value != null) { config = value; } value = getServletConfig().getInitParameter("debug"); if (value != null) { try { debug = Integer.parseInt(value); } catch (NumberFormatException e) { // FIXME Why should we catch this? If the programmer has specified an // invalid integer we should probably let this RuntimeException bubble up. debug = 0; } } // Backwards compatibility for form beans of Java wrapper classes // Set to true for strict Struts 1.0 compatibility value = getServletConfig().getInitParameter("convertNull"); if ("true".equalsIgnoreCase(value) || "yes".equalsIgnoreCase(value) || "on".equalsIgnoreCase(value) || "y".equalsIgnoreCase(value) || "1".equalsIgnoreCase(value)) { convertNull = true; } if (convertNull) { ConvertUtils.deregister(); ConvertUtils.register(new BigDecimalConverter(null), BigDecimal.class); ConvertUtils.register(new BigIntegerConverter(null), BigInteger.class); ConvertUtils.register(new BooleanConverter(null), Boolean.class); ConvertUtils.register(new ByteConverter(null), Byte.class); ConvertUtils.register(new CharacterConverter(null), Character.class); ConvertUtils.register(new DoubleConverter(null), Double.class); ConvertUtils.register(new FloatConverter(null), Float.class); ConvertUtils.register(new IntegerConverter(null), Integer.class); ConvertUtils.register(new LongConverter(null), Long.class); ConvertUtils.register(new ShortConverter(null), Short.class); } sq~ uq~q~¦pppq~~q~~xsq~isq~ uq~ppppq~ psq~ uq~pppppt8/** * Initialize the servlet mapping under which our controller servlet * is being accessed. This will be used in the &html:form> * tag to generate correct destination URLs for form submissions. * @throws ServletException if error happens while scanning web.xml */ pt initServletq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t 4 // Remember our servlet name this.servletName = getServletConfig().getServletName(); // Prepare a Digester to scan the web application deployment descriptor Digester digester = new Digester(); digester.push(this); digester.setNamespaceAware(true); digester.setValidating(false); // Register our local copy of the DTDs that we can find for (int i = 0; i < registrations.length; i += 2) { URL url = this.getClass().getResource(registrations[i+1]); if (url != null) { digester.register(registrations[i], url.toString()); } } // Configure the processing rules that we need digester.addCallMethod("web-app/servlet-mapping", "addServletMapping", 2); digester.addCallParam("web-app/servlet-mapping/servlet-name", 0); digester.addCallParam("web-app/servlet-mapping/url-pattern", 1); // Process the web application deployment descriptor if (log.isDebugEnabled()) { log.debug("Scanning web.xml for controller servlet mapping"); } InputStream input = getServletContext().getResourceAsStream("/WEB-INF/web.xml"); try { digester.parse(input); } catch (IOException e) { log.error(internal.getMessage("configWebXml"), e); throw new ServletException(e); } catch (SAXException e) { log.error(internal.getMessage("configWebXml"), e); throw new ServletException(e); } finally { if (input != null) { try { input.close(); } catch (IOException e) { log.error(internal.getMessage("configWebXml"), e); throw new ServletException(e); } } } // Record a servlet context attribute (if appropriate) if (log.isDebugEnabled()) { log.debug("Mapping for servlet '" + servletName + "' = '" + servletMapping + "'"); } if (servletMapping != null) { getServletContext().setAttribute(Globals.SERVLET_KEY, servletMapping); } sq~ uq~q~¦pppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqôtsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xsq~bsq~ uq~ppppqôtsq~ uq~ppppppptresponseq~{xsq~ uq~pppppq~~q~q~~q~’pq~€xppq~ psq~ uq~ppppptŒ/** * Perform the standard request processing for this request, and create * the corresponding response. * * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception is thrown */ ptprocessq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t­ RequestUtils.selectModule(request, getServletContext()); getRequestProcessor(getModuleConfig(request)).process (request, response); sq~ uq~q~kq~¦ppq~~q~~xq­€q¦·q¦×q¦çq§q¤õq§?q§gq~Ïÿq~Ð/q~ÐOq~Ðoq~Éq¨Ìq¨üqMqM4qMeq®äq)Êq)Úq)êq*"q*Rq*zq*¢q*Êq¬tq~8~q~8®q~8Þq¯èq~A,qÀ•qºPq¾¬qÃìq 4q)qJq{q~Âßq~Ãq%vq¡Sq_EqÃPqÃpqÃàq¥>qÄqÄ`qĘqÄÀqňqÅØqÆqÆ0qÆXqÆ€qƨqÊßqËsq~isq~ uq~ppppq~ psq~ uq~pppppt"/** * Initialize this servlet. Most of the processing has been factored into * support methods so that you can override particular functionality at a * fairly granular level. * * @exception ServletException if we cannot configure ourselves correctly */ ptinitq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftI initInternal(); initOther(); initServlet(); // Initialize modules as needed getServletContext().setAttribute(Globals.ACTION_SERVLET_KEY, this); ModuleConfig moduleConfig = initModuleConfig("", config); initModuleMessageResources(moduleConfig); initModuleDataSources(moduleConfig); initModulePlugIns(moduleConfig); moduleConfig.freeze(); Enumeration names = getServletConfig().getInitParameterNames(); while (names.hasMoreElements()) { String name = (String) names.nextElement(); if (!name.startsWith("config/")) { continue; } String prefix = name.substring(6); moduleConfig = initModuleConfig (prefix, getServletConfig().getInitParameter(name)); initModuleMessageResources(moduleConfig); initModuleDataSources(moduleConfig); initModulePlugIns(moduleConfig); moduleConfig.freeze(); } destroyConfigDigester(); sq~ uq~q~¦pppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqô¤sq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppqô¤sq~ uq~ppppppptresponseq~cxsq~ uq~pppppq~fq~gq~fq~’pq~hxppq~ psq~ uq~pppppt?/** * Process an HTTP "GET" request. * * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs */ ptdoGetq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft/ process(request, response); sq~ uq~q~kq~¦ppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqôÄsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppqôÄsq~ uq~ppppppptresponseq~cxsq~ uq~pppppq~fq~gq~fq~’pq~hxppq~ psq~ uq~pppppt@/** * Process an HTTP "POST" request. * * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs */ ptdoPostq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft/ process(request, response); sq~ uq~q~kq~¦ppq~fq~fxqÇ¿sq~isq~ uq~sq~bsq~ uq~ppppqôäsq~ uq~ppppppptprefixq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppqôäsq~ uq~ppppppptpathq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxppq~ psq~ uq~ppppptÂ/** *

            Initialize the application configuration information for the * specified module.

            * * @param prefix Module prefix for this module * @param path Context-relative resource path for this modules's * configuration resource * * @exception ServletException if initialization cannot be performed * @deprecated use {@link #initModuleConfig(String,String)} * @since Struts 1.1 */ ptinitApplicationConfigq~cxsq~ uq~pppppq~fq~gq~fq~bpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft' /* FIXME for Struts 1.2 Since Struts 1.1 only has one implementation for ModuleConfig casting is safe here. Used only for transition purposes ! */ return new ApplicationConfig((ModuleConfigImpl)initModuleConfig(prefix,path)); sq~ uq~q~¦pppq~fq~fxqïqï)qïAqïYqïqqï‰qï¡sq~isq~ uq~ppppq~ psq~ uq~pppppt•/** *

            Create (if needed) and return a new Digester instance that has been * initialized to process Struts module configuraiton files and * configure a corresponding ModuleConfig object (which must be * pushed on to the evaluation stack before parsing begins).

            * * @exception ServletException if a Digester cannot be configured * @since Struts 1.1 */ ptinitConfigDigesterq~cxsq~ uq~pppppq~fq~gq~fq~ Špq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft Z // Do we have an existing instance? if (configDigester != null) { return (configDigester); } // Check the status of the "validating" initialization parameter boolean validating = true; String value = getServletConfig().getInitParameter("validating"); if ("false".equalsIgnoreCase(value) || "no".equalsIgnoreCase(value) || "n".equalsIgnoreCase(value) || "0".equalsIgnoreCase(value)) { validating = false; } // Create a new Digester instance with standard capabilities configDigester = new Digester(); configDigester.setNamespaceAware(true); configDigester.setValidating(validating); configDigester.setUseContextClassLoader(true); configDigester.addRuleSet(new ConfigRuleSet()); for (int i = 0; i < registrations.length; i += 2) { URL url = this.getClass().getResource(registrations[i+1]); if (url != null) { configDigester.register(registrations[i], url.toString()); } } // Add any custom RuleSet instances that have been specified String rulesets = getServletConfig().getInitParameter("rulesets"); if (rulesets == null) { rulesets = ""; } rulesets = rulesets.trim(); String ruleset = null; while (rulesets.length() > 0) { int comma = rulesets.indexOf(","); if (comma < 0) { ruleset = rulesets.trim(); rulesets = ""; } else { ruleset = rulesets.substring(0, comma).trim(); rulesets = rulesets.substring(comma + 1).trim(); } if (log.isDebugEnabled()) { log.debug("Configuring custom Digester Ruleset of type " + ruleset); } try { RuleSet instance = (RuleSet) RequestUtils.applicationInstance(ruleset); configDigester.addRuleSet(instance); } catch (Exception e) { log.error("Exception configuring custom Digester RuleSet", e); throw new ServletException(e); } } // Return the completely configured Digester instance return (configDigester); sq~ uq~q~¦pppq~fq~fxsq~isq~ uq~ppppq~ psq~ uq~ppppptV/** * Initialize data sources for the default module. This method * signature is maintained only for backwards compatibility, and will * be removed in a subsequent release. * * @deprecated Replaced by initApplicationDataSources() that takes * an ModuleConfig argument. This method does nothing. */ ptinitDataSourcesq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ftY ; // Implementation has been replaced in initApplicationDataSources() sq~ uq~q~¦pppq~fq~fxsq~isq~ uq~ppppq~ psq~ uq~ppppptš/** * Initialize our internal MessageResources bundle. * * @exception ServletException if we cannot initialize these resources */ pt initInternalq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft‡ try { internal = MessageResources.getMessageResources(internalName); } catch (MissingResourceException e) { log.error("Cannot load internal resources from '" + internalName + "'", e); throw new UnavailableException ("Cannot load internal resources from '" + internalName + "'"); } sq~ uq~q~¦pppq~fq~fxsq~isq~ uq~ppppq~ psq~ uq~pppppt¬/** * Initialize other global characteristics of the controller servlet. * * @exception ServletException if we cannot initialize these resources */ pt initOtherq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ftÌ String value = null; value = getServletConfig().getInitParameter("config"); if (value != null) { config = value; } value = getServletConfig().getInitParameter("debug"); if (value != null) { try { debug = Integer.parseInt(value); } catch (NumberFormatException e) { // FIXME Why should we catch this? If the programmer has specified an // invalid integer we should probably let this RuntimeException bubble up. debug = 0; } } // Backwards compatibility for form beans of Java wrapper classes // Set to true for strict Struts 1.0 compatibility value = getServletConfig().getInitParameter("convertNull"); if ("true".equalsIgnoreCase(value) || "yes".equalsIgnoreCase(value) || "on".equalsIgnoreCase(value) || "y".equalsIgnoreCase(value) || "1".equalsIgnoreCase(value)) { convertNull = true; } if (convertNull) { ConvertUtils.deregister(); ConvertUtils.register(new BigDecimalConverter(null), BigDecimal.class); ConvertUtils.register(new BigIntegerConverter(null), BigInteger.class); ConvertUtils.register(new BooleanConverter(null), Boolean.class); ConvertUtils.register(new ByteConverter(null), Byte.class); ConvertUtils.register(new CharacterConverter(null), Character.class); ConvertUtils.register(new DoubleConverter(null), Double.class); ConvertUtils.register(new FloatConverter(null), Float.class); ConvertUtils.register(new IntegerConverter(null), Integer.class); ConvertUtils.register(new LongConverter(null), Long.class); ConvertUtils.register(new ShortConverter(null), Short.class); } sq~ uq~q~¦pppq~fq~fxsq~isq~ uq~ppppq~ psq~ uq~pppppt8/** * Initialize the servlet mapping under which our controller servlet * is being accessed. This will be used in the &html:form> * tag to generate correct destination URLs for form submissions. * @throws ServletException if error happens while scanning web.xml */ pt initServletq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft 4 // Remember our servlet name this.servletName = getServletConfig().getServletName(); // Prepare a Digester to scan the web application deployment descriptor Digester digester = new Digester(); digester.push(this); digester.setNamespaceAware(true); digester.setValidating(false); // Register our local copy of the DTDs that we can find for (int i = 0; i < registrations.length; i += 2) { URL url = this.getClass().getResource(registrations[i+1]); if (url != null) { digester.register(registrations[i], url.toString()); } } // Configure the processing rules that we need digester.addCallMethod("web-app/servlet-mapping", "addServletMapping", 2); digester.addCallParam("web-app/servlet-mapping/servlet-name", 0); digester.addCallParam("web-app/servlet-mapping/url-pattern", 1); // Process the web application deployment descriptor if (log.isDebugEnabled()) { log.debug("Scanning web.xml for controller servlet mapping"); } InputStream input = getServletContext().getResourceAsStream("/WEB-INF/web.xml"); try { digester.parse(input); } catch (IOException e) { log.error(internal.getMessage("configWebXml"), e); throw new ServletException(e); } catch (SAXException e) { log.error(internal.getMessage("configWebXml"), e); throw new ServletException(e); } finally { if (input != null) { try { input.close(); } catch (IOException e) { log.error(internal.getMessage("configWebXml"), e); throw new ServletException(e); } } } // Record a servlet context attribute (if appropriate) if (log.isDebugEnabled()) { log.debug("Mapping for servlet '" + servletName + "' = '" + servletMapping + "'"); } if (servletMapping != null) { getServletContext().setAttribute(Globals.SERVLET_KEY, servletMapping); } sq~ uq~q~¦pppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqõTsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppqõTsq~ uq~ppppppptresponseq~cxsq~ uq~pppppq~fq~gq~fq~’pq~hxppq~ psq~ uq~ppppptŒ/** * Perform the standard request processing for this request, and create * the corresponding response. * * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception is thrown */ ptprocessq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft­ RequestUtils.selectModule(request, getServletContext()); getRequestProcessor(getModuleConfig(request)).process (request, response); sq~ uq~q~kq~¦ppq~fq~fxq­°q§Ÿq§¿q§Ïq§ÿq¦q¨'q¨Oq~Ðïq~Ñq~Ñ?q~Ñ_q~É(q©¬q©ÜqMÑqNqN3q¯+q*òq+q+q+Jq+zq+¢q+Êq+òq¬»qK¬qKÜqL q°q~AÌqÁ^qº¸q¿|qÄšq sq‘Äq‘åq’q~ÃWq~Çq&&pppppppppppppppppppppppppppppppxsq~Csq~ uq~ppppq~sq~ uq~ppppsq~#q~Œxq~šq•~sq~Csq~ uq~ppppq~sq~ uq~ppppsq~#q~ òxq%‘pppq~Bsq~ uq~pppppt /* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/action/ExceptionHandler.java,v 1.18 2003/04/19 01:20:32 dgraham Exp $ * $Revision: 1.18 $ * $Date: 2003/04/19 01:20:32 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * An ExceptionHandler is configured in the Struts configuration file to handle a specific * type of exception thrown by an Action's execute method. * * @since Struts 1.1 */ ptExceptionHandler.javaq~fxsq~ uq~ppppsq~ uq~q]bpppq~fxsq~ uq~ppppsq~#q~’xsq~Csq~ uq~ppppq~xsq~ uq~ppppsq~#q~’xsq~Csq~ uq~ppppq~Ásq~ uq~ppppsq~#q~’xsq~Csq~ uq~ppppq~bsq~ uq~ppppsq~#q~’xsq~Csq~ uq~ppppq~csq~ uq~ppppsq~#q~’xq~_q^qäêq$­sq~Csq~ uq~ppppq~ísq~ uq~ppppsq~#q~’xq~\Úq€¤“q€­tq€ãq€åq­þq~ÀZq´OqN¾sq~Csq~ uq~ppppq~}sq~ uq~ppppsq~#q~’xq'"q¯ŠqLWq°dq~C¦q~&;q~?vq~B)q~CXqpppppq~$sq~ uq~q~Érpppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~sq~ uq~ppppppptHttpServletResponse.javaq~$xsq~ uq~ppppsq~ uq~q~’pppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~qÑq~<%qððqñq]q´q´½q´åqµ qµ5qµmqµqµÅqµíq¶q¶5q¶uq¶•q¶µq¶åq·q·-q~¹îq~º>q~;Âq~;úqvqùqmq/q,Ôq,åq-3qN³qÈ‚qÈâqñqñ¯qòwq^q·Õq·õq¸q¸Eq¸mq¸¥q¸Åq¸ýq¹%q¹Mq¹mq¹­q¹Íq¹íqºqº=qºeqºqºÅq@ qþq¦q)q+q_qOqOQqPyq'½q'íq(q(=q(eq(q«Þq«±q­3q~¹Ëq~ºq®iq~¡q~?×q~@q~B‰qò§qòÇqóŸq»}q»q»Åq»íq£/q¼q¼Mq¼mq¼¥q¼Íq¼õq½q½Uq½uq½•q½Åq½åq¾ q¾Eq¾mq¾•q¾½q^€qÉBqÉ¢q#Žq@\q@ŒqYqËqq$qP×qQqR?q¬@q¯Ìq­cq®°q(åq)q)=q)eq)q)µq~º²q~ºÚq~ºúq¦zq¦¢q~>Ñq~@?q~@wq~@¯q~B¹q~<¦q~<¾q~=Éq^øq¿ƒq¿£q¿Ëq¿óq¤*qÀqÀSqÀsqÀ«qÀÓqÀûqÁqÁ[qÁ{qÁ›qÁËqÁëqÂqÂKqÂsq›qÂÃqÊqÊbqóÏqóïqôq‰q¿q q#¾q@ÜqA q$NqRqRÝqTq­“q§q§*q¥q§Rq§zq¨ßq©qMqMGq®÷q* q*=q*eq*q*µq*Ýq¬‡q~8‘q~8Áq¯ûq~=ùq~<õq~= q~?q~@ßq~Aq~AOq~Béq_pqÃ{qÛqÃÃqÃëq¥IqÄqÄKqÄkqÄ£qÄËqÄóqÅqÅSqÅsqÅ“qÅÃqÅãqÆ qÆCqÆkqÆ“qÆ»qÊÂqË"qô¯qôÏqõ_q¹qïqKq#îqA\qAŒq$~qTcqT£qUËq­Ãq§êq¨q¦q¨:q¨bq©¿q©ïqMäqNq¯>q+5q+eq+q+µq+Ýq,q¬ÎqK¿qKïq°*q~>)q~=Dq~=\q~?1q~Aq~A·q~Aïq~Cq~Äxq~$ppxq~\®q~ȸq~Éq~Œqõ³q€ëÆqVq~Ê5sq~Qsq~ uq~ppppq~sq~ uq~ppppppptHttpServletRequest.javaq~$xsq~ uq~ppppsq~ uq~q~Œpppq~$xppppq~³sq~ uq~pppppppthttpq~=xsq~ uq~pppppq~Éosq~ uq~q~Ërpppq~$ppxsq~ uq~pppppq~ûptHttpServletRequestq~=xsq~ fuq~}sq~Csq~ uq~ppppq~Œsq~ uq~ppppsq~#q~Œxq~,Qqõtsq~Csq~ uq~ppppq~xsq~ uq~ppppsq~#q~Œxqåwsq~Csq~ uq~ppppq~Ásq~ uq~ppppsq~#q~ŒxqÅ sq~Csq~ uq~ppppq~bsq~ uq~ppppsq~#q~Œxsq~Csq~ uq~ppppq~csq~ uq~ppppsq~#q~Œxq~YqXqääq$§sq~Csq~ uq~ppppq~ísq~ uq~ppppsq~#q~Œxq~ɤq~„q‚+q~\Ôq€é¤q€¤q€­nq~]q~ÉÙq~Êq€hhq€ßqîqq~°àq~$Õq~'q€Aëq~Ÿãq€_êq€ï½q€ïæq~\xq€Ûq€ðq€¥Çq€”éq€ÃÑq~tÈq€¯¶q€‚éq€Ò‰q€Œuq€µq€yq€¤êq€Ãq€Žq€(œq€&¢q€q€rq€-q€¯q€  q€#Gq€´q€(qþ’q€$%q€ q€Zq€ ‘q~´ïqý%qê$q­øq~ÀTq~'.q´IqN¸q~†q'q¯„qLQq°^q~C q~&5q~?pq~B#q~CRq~8q°nsq~Csq~ uq~ppppq~Hsq~ uq~ppppsq~#q~Œxq ’qžqíq/êq~QPq~Pôq~}Êqp—qeîqh¾qf q¬qfgqf¥pppppppppppppppppppppppq~$sq~ uq~qVq~æ ppsq~ uq~ppppq~$q~$qõÃsq~ uq~q~ÊHppppq~$sq~ uq~ppppsq~ àuq~4qÉq~<sq~bsq~ uq~ppppsq~isq~ uq~qö pppq~Esq~ uq~pppppt// ---------------------------------------------------- Protected Methods /** * Generate a new transaction token, to be used for enforcing a single * request for a particular transaction. * * @param request The request we are processing */ pt generateTokenq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$t/ HttpSession session = request.getSession(); try { byte id[] = session.getId().getBytes(); byte now[] = new Long(System.currentTimeMillis()).toString().getBytes(); MessageDigest md = MessageDigest.getInstance("MD5"); md.update(id); md.update(now); return (toHex(md.digest())); } catch (IllegalStateException e) { return (null); } catch (NoSuchAlgorithmException e) { return (null); } sq~ uq~ppppq~$q~$xsq~ uq~ppppppptrequestq~=xsq~ uq~pppppq~$q~yq~$q~Œpq~$xsq~bsq~ uq~ppppsq~isq~ uq~qö%pppq~Esq~ uq~pppppt/** * Return the user's currently selected Locale. * * @param request The request we are processing */ pt getLocaleq~=xsq~ uq~pppppq~$q~yq~$q~5pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$tß HttpSession session = request.getSession(); Locale locale = (Locale) session.getAttribute(LOCALE_KEY); if (locale == null) locale = defaultLocale; return (locale); sq~ uq~ppppq~$q~$xsq~ uq~ppppppptrequestq~=xsq~ uq~pppppq~$q~yq~$q~Œpq~$xqÛýsq~bsq~ uq~ppppsq~isq~ uq~qö=pppq~Esq~ uq~pppppt /** * Returns true if the current form's cancel button was * pressed. This method will check if the cancel button generated by * CancelTag was pressed by the user in the * current request. If true, validation performed by an * ActionForm validate() method will have been * skipped by the controller servlet. * * @param request The servlet request we are processing * @see org.apache.struts.taglib.html.CancelTag */ pt isCancelledq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$t£ return ((request.getParameter(Constants.CANCEL_PROPERTY) != null) || (request.getParameter(Constants.CANCEL_PROPERTY_X) != null)); sq~ uq~ppppq~$q~$xsq~ uq~ppppppptrequestq~=xsq~ uq~pppppq~$q~yq~$q~Œpq~$xsq~bsq~ uq~ppppsq~isq~ uq~qöUpppq~Esq~ uq~ppppptµ/** * Return true if there is a transaction token stored in * the user's current session, and the value submitted as a request * parameter with this action matches it. Returns false * under any of the following circumstances: *
              *
            • No session associated with this request
            • *
            • No transaction token saved in the session
            • *
            • No transaction token included as a request parameter
            • *
            • The included transaction token value does not match the * transaction token in the user's session
            • *
            * * @param request The servlet request we are processing */ pt isTokenValidq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$t: return (isTokenValid(request, false)); sq~ uq~ppppq~$q~$xsq~ uq~ppppppptrequestq~=xsq~ uq~pppppq~$q~yq~$q~Œpq~$xsq~bsq~ uq~ppppsq~isq~ uq~qömsq~bsq~ uq~ppppqöpsq~ uq~ppppppptresetq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xppq~Esq~ uq~ppppptÅ/** * Return true if there is a transaction token stored in * the user's current session, and the value submitted as a request * parameter with this action matches it. Returns false *
              *
            • No session associated with this request
            • *
            • No transaction token saved in the session
            • *
            • No transaction token included as a request parameter
            • *
            • The included transaction token value does not match the * transaction token in the user's session
            • *
            * * @param request The servlet request we are processing * @param reset Should we reset the token after checking it? */ pt isTokenValidq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$t‚ // Retrieve the current session for this request HttpSession session = request.getSession(false); if (session == null) return (false); synchronized (session) { // Retrieve the transaction token from this session, and // reset it if requested String saved = (String) session.getAttribute(TRANSACTION_TOKEN_KEY); if (saved == null) return (false); if (reset) session.removeAttribute(TRANSACTION_TOKEN_KEY); // Retrieve the transaction token included in this request String token = (String) request.getParameter(Constants.TOKEN_KEY); if (token == null) return (false); // Do the values match? return (saved.equals(token)); } sq~ uq~ppppq~$q~$xsq~ uq~ppppppptrequestq~=xsq~ uq~pppppq~$q~yq~$q~Œpq~$xsq~bsq~ uq~ppppsq~isq~ uq~qöpppq~Esq~ uq~pppppt/** * Reset the saved transaction token in the user's session. This * indicates that transactional token checking will not be needed * on the next request that is submitted. * * @param request The servlet request we are processing */ pt resetTokenq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$t° HttpSession session = request.getSession(false); if (session == null) return; session.removeAttribute(TRANSACTION_TOKEN_KEY); sq~ uq~ppppq~$q~$xsq~ uq~ppppppptrequestq~=xsq~ uq~pppppq~$q~yq~$q~Œpq~$xq°sq~bsq~ uq~ppppsq~isq~ uq~qö¥sq~bsq~ uq~ppppqö¨sq~ uq~ppppppptmessagesq~=xsq~ uq~pppppq~$q~yq~$q~Ipq~$xppq~Esq~ uq~pppppt‰/** * Save the specified messages keys into the appropriate request * attribute for use by the <struts:messages> tag (if * messages="true" is set), if any messages are required. Otherwise, * ensure that the request attribute is not created. * * @param request The servlet request we are processing * @param messages Messages object */ pt saveMessagesq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$t1 // Remove any messages attribute if none are required if ((messages == null) || messages.empty()) { request.removeAttribute(MESSAGE_KEY); return; } // Save the messages we need request.setAttribute(MESSAGE_KEY, messages); sq~ uq~ppppq~$q~$xsq~ uq~ppppppptrequestq~=xsq~ uq~pppppq~$q~yq~$q~Œpq~$xsq~bsq~ uq~ppppsq~isq~ uq~qöÅpppq~Esq~ uq~ppppptÃ/** * Save a new transaction token in the user's current session, creating * a new session if necessary. * * @param request The servlet request we are processing */ pt saveTokenq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$tÌ HttpSession session = request.getSession(); String token = generateToken(request); if (token != null) session.setAttribute(TRANSACTION_TOKEN_KEY, token); sq~ uq~ppppq~$q~$xsq~ uq~ppppppptrequestq~=xsq~ uq~pppppq~$q~yq~$q~Œpq~$xsq~bsq~ uq~ppppsq~isq~ uq~qöÝsq~bsq~ uq~ppppqöàsq~ uq~ppppppptlocaleq~=xsq~ uq~pppppq~$q~yq~$q~5pq~$xppq~Esq~ uq~ppppptï/** * Set the user's currently selected Locale. * * @param request The request we are processing * @param locale The user's selected Locale to be set, or null * to select the server's default Locale */ pt setLocaleq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$t´ HttpSession session = request.getSession(); if (locale == null) locale = defaultLocale; session.setAttribute(LOCALE_KEY, locale); sq~ uq~ppppq~$q~$xsq~ uq~ppppppptrequestq~=xsq~ uq~pppppq~$q~yq~$q~Œpq~$xqalqaÿq~,Ðqðèqñsq~bsq~ uq~ppppsq~isq~ uq~qöýpppq~ psq~ uq~ppppptº/** * Return the application configuration object for the currently selected * sub-application. * * @param request The servlet request we are processing */ ptgetApplicationConfigq~=xsq~ uq~pppppq~$q~yq~$q~bpq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$t6 ApplicationConfig config = (ApplicationConfig) request.getAttribute(Action.APPLICATION_KEY); if (config == null) { config = (ApplicationConfig) getServletContext().getAttribute(Action.APPLICATION_KEY); } return (config); sq~ uq~ppppq~$q~$xsq~ uq~ppppppptrequestq~=xsq~ uq~pppppq~$q~yq~$q~Œpq~$xq~Äq]ˆq]¨q´•q´µq´Ýqµqµ-qµeqµ…qµ½qµåq¶ q¶-q¶Rq¶Uq¶mq¶q¶­q¶Ýq¶ýq·%q~¹æq~º6q~;ºq~;òqnqñqeq'q,®q,¿q-+qN«q~(qäq~ø¼q~ù7q~ùOq~ùnq~ù•q~;q~ÊXq~Êhq~ÊÜq~%~qƒoq„Žq„¿q\²qmqm3q…q…2qs”qsÍqtqt?qtxqt±qtêqu#qu\qu•quÎqvqv@qvyqiïqjqjJqjœqidq~ÃÇq~Ãâq~Äuqb¡qaäqa‰qÈzqÈÚsq~bsq~ uq~ppppsq~isq~ uq~q÷pppq~Esq~ uq~pppppt// ---------------------------------------------------- Protected Methods /** * Generate a new transaction token, to be used for enforcing a single * request for a particular transaction. * * @param request The request we are processing */ pt generateTokenq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥t/ HttpSession session = request.getSession(); try { byte id[] = session.getId().getBytes(); byte now[] = new Long(System.currentTimeMillis()).toString().getBytes(); MessageDigest md = MessageDigest.getInstance("MD5"); md.update(id); md.update(now); return (toHex(md.digest())); } catch (IllegalStateException e) { return (null); } catch (NoSuchAlgorithmException e) { return (null); } sq~ uq~ppppq~¥q~¥xsq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Œpq~§xsq~bsq~ uq~ppppsq~isq~ uq~q÷-pppq~Esq~ uq~pppppt/** * Return the user's currently selected Locale. * * @param request The request we are processing */ pt getLocaleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~5pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥tß HttpSession session = request.getSession(); Locale locale = (Locale) session.getAttribute(LOCALE_KEY); if (locale == null) locale = defaultLocale; return (locale); sq~ uq~ppppq~¥q~¥xsq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Œpq~§xqÜSsq~bsq~ uq~ppppsq~isq~ uq~q÷Epppq~Esq~ uq~pppppt /** * Returns true if the current form's cancel button was * pressed. This method will check if the cancel button generated by * CancelTag was pressed by the user in the * current request. If true, validation performed by an * ActionForm validate() method will have been * skipped by the controller servlet. * * @param request The servlet request we are processing * @see org.apache.struts.taglib.html.CancelTag */ pt isCancelledq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥t£ return ((request.getParameter(Constants.CANCEL_PROPERTY) != null) || (request.getParameter(Constants.CANCEL_PROPERTY_X) != null)); sq~ uq~ppppq~¥q~¥xsq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Œpq~§xsq~bsq~ uq~ppppsq~isq~ uq~q÷]pppq~Esq~ uq~ppppptµ/** * Return true if there is a transaction token stored in * the user's current session, and the value submitted as a request * parameter with this action matches it. Returns false * under any of the following circumstances: *
              *
            • No session associated with this request
            • *
            • No transaction token saved in the session
            • *
            • No transaction token included as a request parameter
            • *
            • The included transaction token value does not match the * transaction token in the user's session
            • *
            * * @param request The servlet request we are processing */ pt isTokenValidq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥t: return (isTokenValid(request, false)); sq~ uq~ppppq~¥q~¥xsq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Œpq~§xsq~bsq~ uq~ppppsq~isq~ uq~q÷usq~bsq~ uq~ppppq÷xsq~ uq~ppppppptresetq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xppq~Esq~ uq~ppppptÅ/** * Return true if there is a transaction token stored in * the user's current session, and the value submitted as a request * parameter with this action matches it. Returns false *
              *
            • No session associated with this request
            • *
            • No transaction token saved in the session
            • *
            • No transaction token included as a request parameter
            • *
            • The included transaction token value does not match the * transaction token in the user's session
            • *
            * * @param request The servlet request we are processing * @param reset Should we reset the token after checking it? */ pt isTokenValidq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥t‚ // Retrieve the current session for this request HttpSession session = request.getSession(false); if (session == null) return (false); synchronized (session) { // Retrieve the transaction token from this session, and // reset it if requested String saved = (String) session.getAttribute(TRANSACTION_TOKEN_KEY); if (saved == null) return (false); if (reset) session.removeAttribute(TRANSACTION_TOKEN_KEY); // Retrieve the transaction token included in this request String token = (String) request.getParameter(Constants.TOKEN_KEY); if (token == null) return (false); // Do the values match? return (saved.equals(token)); } sq~ uq~ppppq~¥q~¥xsq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Œpq~§xsq~bsq~ uq~ppppsq~isq~ uq~q÷•pppq~Esq~ uq~pppppt/** * Reset the saved transaction token in the user's session. This * indicates that transactional token checking will not be needed * on the next request that is submitted. * * @param request The servlet request we are processing */ pt resetTokenq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥t° HttpSession session = request.getSession(false); if (session == null) return; session.removeAttribute(TRANSACTION_TOKEN_KEY); sq~ uq~ppppq~¥q~¥xsq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Œpq~§xqsq~bsq~ uq~ppppsq~isq~ uq~q÷­sq~bsq~ uq~ppppq÷°sq~ uq~ppppppptmessagesq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Ipq~§xppq~Esq~ uq~pppppt£/** * Save the specified messages keys into the appropriate request * attribute for use by the <struts:messages> tag (if * messages="true" is set), if any messages are required. Otherwise, * ensure that the request attribute is not created. * * @param request The servlet request we are processing * @param messages Messages object * @since Struts 1.1 */ pt saveMessagesq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥t1 // Remove any messages attribute if none are required if ((messages == null) || messages.empty()) { request.removeAttribute(MESSAGE_KEY); return; } // Save the messages we need request.setAttribute(MESSAGE_KEY, messages); sq~ uq~ppppq~¥q~¥xsq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Œpq~§xsq~bsq~ uq~ppppsq~isq~ uq~q÷Ípppq~Esq~ uq~ppppptÃ/** * Save a new transaction token in the user's current session, creating * a new session if necessary. * * @param request The servlet request we are processing */ pt saveTokenq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥tÌ HttpSession session = request.getSession(); String token = generateToken(request); if (token != null) session.setAttribute(TRANSACTION_TOKEN_KEY, token); sq~ uq~ppppq~¥q~¥xsq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Œpq~§xsq~bsq~ uq~ppppsq~isq~ uq~q÷åsq~bsq~ uq~ppppq÷èsq~ uq~ppppppptlocaleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~5pq~§xppq~Esq~ uq~ppppptï/** * Set the user's currently selected Locale. * * @param request The request we are processing * @param locale The user's selected Locale to be set, or null * to select the server's default Locale */ pt setLocaleq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥t´ HttpSession session = request.getSession(); if (locale == null) locale = defaultLocale; session.setAttribute(LOCALE_KEY, locale); sq~ uq~ppppq~¥q~¥xsq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Œpq~§xqÆmqVq~-©qñ‡qñ§sq~bsq~ uq~ppppsq~isq~ uq~qøpppq~ psq~ uq~ppppptÔ/** * Return the application configuration object for the currently selected * sub-application. * * @param request The servlet request we are processing * @since Struts 1.1 */ ptgetApplicationConfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~bpq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥t6 ApplicationConfig config = (ApplicationConfig) request.getAttribute(Action.APPLICATION_KEY); if (config == null) { config = (ApplicationConfig) getServletContext().getAttribute(Action.APPLICATION_KEY); } return (config); sq~ uq~ppppq~¥q~¥xsq~ uq~ppppppptrequestq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Œpq~§xqòoqaQq^q^ q·Íq·íq¸q¸=q¸eq¸q¸½q¸õq¹q¹Eq¹eq¹Šq¹q¹¥q¹Åq¹åqºqº5qº]qº•qº½q@qöqžq!q#qWqNùqOIqPqq'µq'åq( q(5q(]q(…q«Öq«©q­+q~¹Ãq~ºq®aq~™q~?Ïq~@q~Bq~PqBq q·qÖqýq“q~Ö~q~ÖñqmLq…çq‡q‡7q\ãqm¶qmÏq‡‰q‡ªqv²qvëqsWqw$qxÙqz¬q}ðq¥qZq“q{qÌq‚q‚>qksqkŒqkÎql qlÝq qbqbqbÆqb\q”—q–ÓqòŸqò¿sq~bsq~ uq~ppppsq~isq~ uq~qøpppq~ psq~ uq~pppppt×/** * Return the application configuration object for the currently selected * application module. * * @param request The servlet request we are processing * @since Struts 1.1 */ ptgetApplicationConfigq~rxsq~ uq~pppppq~–q~—q~–q~bpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–t6 ApplicationConfig config = (ApplicationConfig) request.getAttribute(Action.APPLICATION_KEY); if (config == null) { config = (ApplicationConfig) getServletContext().getAttribute(Action.APPLICATION_KEY); } return (config); sq~ uq~ppppq~–q~–xsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xqó—q~.‚q»uq»•q»½q»åq£'q¼ q¼Eq¼eq¼q¼Åq¼íq½ q½2q½5q½Mq½mq½q½½q½Ýq¾q¾=q¾eq¾q¾µqÆÕq·q^xq^˜qÉ:qÉšsq~bsq~ uq~ppppsq~isq~ uq~qø5pppq~Esq~ uq~pppppt// ---------------------------------------------------- Protected Methods /** * Generate a new transaction token, to be used for enforcing a single * request for a particular transaction. * * @param request The request we are processing */ pt generateTokenq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–t/ HttpSession session = request.getSession(); try { byte id[] = session.getId().getBytes(); byte now[] = new Long(System.currentTimeMillis()).toString().getBytes(); MessageDigest md = MessageDigest.getInstance("MD5"); md.update(id); md.update(now); return (toHex(md.digest())); } catch (IllegalStateException e) { return (null); } catch (NoSuchAlgorithmException e) { return (null); } sq~ uq~ppppq~–q~–xsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xqa«qaÃsq~bsq~ uq~ppppsq~isq~ uq~qøMpppq~Esq~ uq~pppppt/** * Return the user's currently selected Locale. * * @param request The request we are processing */ pt getLocaleq~rxsq~ uq~pppppq~–q~—q~–q~5pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–tß HttpSession session = request.getSession(); Locale locale = (Locale) session.getAttribute(LOCALE_KEY); if (locale == null) locale = defaultLocale; return (locale); sq~ uq~ppppq~–q~–xsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xqÜ»qÜÓsq~bsq~ uq~ppppsq~isq~ uq~qøepppq~Esq~ uq~pppppt /** * Returns true if the current form's cancel button was * pressed. This method will check if the cancel button generated by * CancelTag was pressed by the user in the * current request. If true, validation performed by an * ActionForm validate() method will have been * skipped by the controller servlet. * * @param request The servlet request we are processing * @see org.apache.struts.taglib.html.CancelTag */ pt isCancelledq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–t£ return ((request.getParameter(Constants.CANCEL_PROPERTY) != null) || (request.getParameter(Constants.CANCEL_PROPERTY_X) != null)); sq~ uq~ppppq~–q~–xsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xsq~bsq~ uq~ppppsq~isq~ uq~qø}pppq~Esq~ uq~ppppptµ/** * Return true if there is a transaction token stored in * the user's current session, and the value submitted as a request * parameter with this action matches it. Returns false * under any of the following circumstances: *
              *
            • No session associated with this request
            • *
            • No transaction token saved in the session
            • *
            • No transaction token included as a request parameter
            • *
            • The included transaction token value does not match the * transaction token in the user's session
            • *
            * * @param request The servlet request we are processing */ pt isTokenValidq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–t: return (isTokenValid(request, false)); sq~ uq~ppppq~–q~–xsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xsq~bsq~ uq~ppppsq~isq~ uq~qø•sq~bsq~ uq~ppppqø˜sq~ uq~ppppppptresetq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xppq~Esq~ uq~ppppptÅ/** * Return true if there is a transaction token stored in * the user's current session, and the value submitted as a request * parameter with this action matches it. Returns false *
              *
            • No session associated with this request
            • *
            • No transaction token saved in the session
            • *
            • No transaction token included as a request parameter
            • *
            • The included transaction token value does not match the * transaction token in the user's session
            • *
            * * @param request The servlet request we are processing * @param reset Should we reset the token after checking it? */ pt isTokenValidq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–ty // Retrieve the current session for this request HttpSession session = request.getSession(false); if (session == null) return (false); synchronized (session) { // Retrieve the transaction token from this session, and // reset it if requested String saved = (String) session.getAttribute(TRANSACTION_TOKEN_KEY); if (saved == null) return (false); if (reset) session.removeAttribute(TRANSACTION_TOKEN_KEY); // Retrieve the transaction token included in this request String token = request.getParameter(Constants.TOKEN_KEY); if (token == null) return (false); // Do the values match? return (saved.equals(token)); } sq~ uq~ppppq~–q~–xsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xsq~bsq~ uq~ppppsq~isq~ uq~qøµpppq~Esq~ uq~pppppt/** * Reset the saved transaction token in the user's session. This * indicates that transactional token checking will not be needed * on the next request that is submitted. * * @param request The servlet request we are processing */ pt resetTokenq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–t° HttpSession session = request.getSession(false); if (session == null) return; session.removeAttribute(TRANSACTION_TOKEN_KEY); sq~ uq~ppppq~–q~–xsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xqÒsq~bsq~ uq~ppppsq~isq~ uq~qøÍsq~bsq~ uq~ppppqøÐsq~ uq~ppppppptmessagesq~rxsq~ uq~pppppq~–q~—q~–q~Ipq~˜xppq~Esq~ uq~pppppt¡/** * Save the specified messages keys into the appropriate request * attribute for use by the <html:messages> tag (if * messages="true" is set), if any messages are required. Otherwise, * ensure that the request attribute is not created. * * @param request The servlet request we are processing * @param messages Messages object * @since Struts 1.1 */ pt saveMessagesq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–t3 // Remove any messages attribute if none are required if ((messages == null) || messages.isEmpty()) { request.removeAttribute(MESSAGE_KEY); return; } // Save the messages we need request.setAttribute(MESSAGE_KEY, messages); sq~ uq~ppppq~–q~–xsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xsq~bsq~ uq~ppppsq~isq~ uq~qøípppq~Esq~ uq~ppppptÃ/** * Save a new transaction token in the user's current session, creating * a new session if necessary. * * @param request The servlet request we are processing */ pt saveTokenq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–tÌ HttpSession session = request.getSession(); String token = generateToken(request); if (token != null) session.setAttribute(TRANSACTION_TOKEN_KEY, token); sq~ uq~ppppq~–q~–xsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xsq~bsq~ uq~ppppsq~isq~ uq~qùsq~bsq~ uq~ppppqùsq~ uq~ppppppptlocaleq~rxsq~ uq~pppppq~–q~—q~–q~5pq~˜xppq~Esq~ uq~ppppptï/** * Set the user's currently selected Locale. * * @param request The request we are processing * @param locale The user's selected Locale to be set, or null * to select the server's default Locale */ pt setLocaleq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–t´ HttpSession session = request.getSession(); if (locale == null) locale = defaultLocale; session.setAttribute(LOCALE_KEY, locale); sq~ uq~ppppq~–q~–xsq~ uq~ppppppptrequestq~rxsq~ uq~pppppq~–q~—q~–q~Œpq~˜xq#†q@Tq@„qQqÃq‡q$qP¿qQqR7q€+Šq¬8q¯Äq­[q®¨q(Ýq) q)5q)]q)…q)­q~ºªq~ºÒq~ºòq¦rq¦šq~>Éq~@7q~@oq~@§q~B±q~<žq~=Áq~hq°qÝqôqq:qÃAq~Úq~Ú‰q~€q Ÿq ¿qm'qmYqmrqm´qnqnyq‚¥q‚Þqƒqw{qy0q{Returns true if the current form's cancel button was * pressed. This method will check if the Globals.CANCEL_KEY * request attribute has been set, which normally occurs if the cancel * button generated by CancelTag was pressed by the user * in the current request. If true, validation performed * by an ActionForm's validate() method * will have been skipped by the controller servlet.

            * * @param request The servlet request we are processing * @see org.apache.struts.taglib.html.CancelTag */ pt isCancelledq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~tN return (request.getAttribute(Globals.CANCEL_KEY) != null); sq~ uq~ppppq~~q~~xsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xsq~bsq~ uq~ppppsq~isq~ uq~qùmpppq~Esq~ uq~ppppptµ/** * Return true if there is a transaction token stored in * the user's current session, and the value submitted as a request * parameter with this action matches it. Returns false * under any of the following circumstances: *
              *
            • No session associated with this request
            • *
            • No transaction token saved in the session
            • *
            • No transaction token included as a request parameter
            • *
            • The included transaction token value does not match the * transaction token in the user's session
            • *
            * * @param request The servlet request we are processing */ pt isTokenValidq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t> return token.isTokenValid(request, false); sq~ uq~ppppq~~q~~xsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xsq~bsq~ uq~ppppsq~isq~ uq~qù…sq~bsq~ uq~ppppqùˆsq~ uq~ppppppptresetq~{xsq~ uq~pppppq~~q~q~~q~pq~€xppq~Esq~ uq~ppppptÅ/** * Return true if there is a transaction token stored in * the user's current session, and the value submitted as a request * parameter with this action matches it. Returns false *
              *
            • No session associated with this request
            • *
            • No transaction token saved in the session
            • *
            • No transaction token included as a request parameter
            • *
            • The included transaction token value does not match the * transaction token in the user's session
            • *
            * * @param request The servlet request we are processing * @param reset Should we reset the token after checking it? */ pt isTokenValidq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t< return token.isTokenValid(request, reset); sq~ uq~ppppq~~q~~xsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xsq~bsq~ uq~ppppsq~isq~ uq~qù¥pppq~Esq~ uq~pppppt/** * Reset the saved transaction token in the user's session. This * indicates that transactional token checking will not be needed * on the next request that is submitted. * * @param request The servlet request we are processing */ pt resetTokenq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t* token.resetToken(request); sq~ uq~ppppq~~q~~xsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xqsq~bsq~ uq~ppppsq~isq~ uq~qù½sq~bsq~ uq~ppppqùÀsq~ uq~ppppppptmessagesq~{xsq~ uq~pppppq~~q~q~~q~Ipq~€xppq~Esq~ uq~pppppt¡/** * Save the specified messages keys into the appropriate request * attribute for use by the <html:messages> tag (if * messages="true" is set), if any messages are required. Otherwise, * ensure that the request attribute is not created. * * @param request The servlet request we are processing * @param messages Messages object * @since Struts 1.1 */ pt saveMessagesq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t3 // Remove any messages attribute if none are required if ((messages == null) || messages.isEmpty()) { request.removeAttribute(MESSAGE_KEY); return; } // Save the messages we need request.setAttribute(MESSAGE_KEY, messages); sq~ uq~ppppq~~q~~xsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xsq~bsq~ uq~ppppsq~isq~ uq~qùÝpppq~Esq~ uq~ppppptÃ/** * Save a new transaction token in the user's current session, creating * a new session if necessary. * * @param request The servlet request we are processing */ pt saveTokenq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t) token.saveToken(request); sq~ uq~ppppq~~q~~xsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xsq~bsq~ uq~ppppsq~isq~ uq~qùõsq~bsq~ uq~ppppqùøsq~ uq~ppppppptlocaleq~{xsq~ uq~pppppq~~q~q~~q~5pq~€xppq~Esq~ uq~ppppptï/** * Set the user's currently selected Locale. * * @param request The request we are processing * @param locale The user's selected Locale to be set, or null * to select the server's default Locale */ pt setLocaleq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~tÉ HttpSession session = request.getSession(); if (locale == null) { locale = defaultLocale; } session.setAttribute(Globals.LOCALE_KEY, locale); sq~ uq~ppppq~~q~~xsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xqÇ=qXqóÇqóçsq~bsq~ uq~ppppsq~isq~ uq~qúpppq~ psq~ uq~pppppt /** * Return the module configuration object for the currently selected * module. * * @param request The servlet request we are processing * @since Struts 1.1 * @deprecated use {@link #getModuleConfig(HttpServletRequest)} */ ptgetApplicationConfigq~{xsq~ uq~pppppq~~q~q~~q~bpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t" /* FIXME for Struts 1.2 Since Struts 1.1 only has one implementation for ModuleConfig casting is safe here. Used only for transition purposes ! */ return new ApplicationConfig((ModuleConfigImpl)getModuleConfig(request)); sq~ uq~ppppq~~q~~xsq~ uq~ppppppptrequestq~{xsq~ uq~pppppq~~q~q~~q~Œpq~€xqíqôwqq·qq#¶q@ÔqAq$FqR…qRÕqSýq€í¹q€íÓq€íõq€îq€î9q€î[q€îuq€+¸q­‹q¦úq§"q¤øq§Jq§rq¨×q©q¨¹q©qMqM?q®ïq*q*5q*]q*…q*­q*Õq¬q~8‰q~8¹q¯óq~=ñq~<íq~>ùq~@×q~Aq~AGq~BáqÀ˜qq¾¯q ÷qq1qPqwqÃïq~Ý®q~Þ!qnÃqnõqoqoPqo¢qpq„mq„¦q„ßqwíqy±q| q~¹q€nq…q…Qq|Yq…Šq…Ãq…üq~~ q~~9q~~Zq~~sq~~Œqn„q‹Ûq4qeq~q—qéq¥ qŽqo?qoXqŽ;qŽdqŽ…qަqŽÇq q"qcq‘)q‘[q‘tq‘¶q’q–q KqŠqŠÀqŠùqˆ$qx&qyêq|’q~òq€§q‹2q‹kq‹¤q‹ÝqŒq|ËqŒOqŒˆqŒÁqž²qŸ q•q•×q~04q_hq_ˆqÃsqÓqûqÃãq¥AqÄ qÄCqÄcqÄ›qÄÃqÄëqÅ qÅ0qÅ3qÅKqÅkqÅ‹qÅ»qÅÛqÆqÆ;qÆcqÆ‹qƳq—qʺqËsq~bsq~ uq~ppppsq~isq~ uq~qú-pppq~Esq~ uq~pppppt// ---------------------------------------------------- Protected Methods /** * Generate a new transaction token, to be used for enforcing a single * request for a particular transaction. * * @param request The request we are processing */ pt generateTokenq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft4 return token.generateToken(request); sq~ uq~ppppq~fq~fxsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxqb3qbKsq~bsq~ uq~ppppsq~isq~ uq~qúEpppq~Esq~ uq~pppppt/** * Return the user's currently selected Locale. * * @param request The request we are processing */ pt getLocaleq~cxsq~ uq~pppppq~fq~gq~fq~5pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ftô HttpSession session = request.getSession(); Locale locale = (Locale) session.getAttribute(Globals.LOCALE_KEY); if (locale == null) { locale = defaultLocale; } return (locale); sq~ uq~ppppq~fq~fxsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxqÝkq݃sq~bsq~ uq~ppppsq~isq~ uq~qú]pppq~Esq~ uq~pppppt”/** *

            Returns true if the current form's cancel button was * pressed. This method will check if the Globals.CANCEL_KEY * request attribute has been set, which normally occurs if the cancel * button generated by CancelTag was pressed by the user * in the current request. If true, validation performed * by an ActionForm's validate() method * will have been skipped by the controller servlet.

            * * @param request The servlet request we are processing * @see org.apache.struts.taglib.html.CancelTag */ pt isCancelledq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ftN return (request.getAttribute(Globals.CANCEL_KEY) != null); sq~ uq~ppppq~fq~fxsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppsq~isq~ uq~qúupppq~Esq~ uq~ppppptµ/** * Return true if there is a transaction token stored in * the user's current session, and the value submitted as a request * parameter with this action matches it. Returns false * under any of the following circumstances: *
              *
            • No session associated with this request
            • *
            • No transaction token saved in the session
            • *
            • No transaction token included as a request parameter
            • *
            • The included transaction token value does not match the * transaction token in the user's session
            • *
            * * @param request The servlet request we are processing */ pt isTokenValidq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft> return token.isTokenValid(request, false); sq~ uq~ppppq~fq~fxsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppsq~isq~ uq~qúsq~bsq~ uq~ppppqúsq~ uq~ppppppptresetq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxppq~Esq~ uq~ppppptÅ/** * Return true if there is a transaction token stored in * the user's current session, and the value submitted as a request * parameter with this action matches it. Returns false *
              *
            • No session associated with this request
            • *
            • No transaction token saved in the session
            • *
            • No transaction token included as a request parameter
            • *
            • The included transaction token value does not match the * transaction token in the user's session
            • *
            * * @param request The servlet request we are processing * @param reset Should we reset the token after checking it? */ pt isTokenValidq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft< return token.isTokenValid(request, reset); sq~ uq~ppppq~fq~fxsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppsq~isq~ uq~qú­pppq~Esq~ uq~pppppt/** * Reset the saved transaction token in the user's session. This * indicates that transactional token checking will not be needed * on the next request that is submitted. * * @param request The servlet request we are processing */ pt resetTokenq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft* token.resetToken(request); sq~ uq~ppppq~fq~fxsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxq”sq~bsq~ uq~ppppsq~isq~ uq~qúÅsq~bsq~ uq~ppppqúÈsq~ uq~ppppppptmessagesq~cxsq~ uq~pppppq~fq~gq~fq~Ipq~hxppq~Esq~ uq~pppppt¡/** * Save the specified messages keys into the appropriate request * attribute for use by the <html:messages> tag (if * messages="true" is set), if any messages are required. Otherwise, * ensure that the request attribute is not created. * * @param request The servlet request we are processing * @param messages Messages object * @since Struts 1.1 */ pt saveMessagesq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft3 // Remove any messages attribute if none are required if ((messages == null) || messages.isEmpty()) { request.removeAttribute(MESSAGE_KEY); return; } // Save the messages we need request.setAttribute(MESSAGE_KEY, messages); sq~ uq~ppppq~fq~fxsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppsq~isq~ uq~qúåpppq~Esq~ uq~ppppptÃ/** * Save a new transaction token in the user's current session, creating * a new session if necessary. * * @param request The servlet request we are processing */ pt saveTokenq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft) token.saveToken(request); sq~ uq~ppppq~fq~fxsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxsq~bsq~ uq~ppppsq~isq~ uq~qúýsq~bsq~ uq~ppppqûsq~ uq~ppppppptlocaleq~cxsq~ uq~pppppq~fq~gq~fq~5pq~hxppq~Esq~ uq~ppppptï/** * Set the user's currently selected Locale. * * @param request The request we are processing * @param locale The user's selected Locale to be set, or null * to select the server's default Locale */ pt setLocaleq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ftÉ HttpSession session = request.getSession(); if (locale == null) { locale = defaultLocale; } session.setAttribute(Globals.LOCALE_KEY, locale); sq~ uq~ppppq~fq~fxsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxqÇ¥qÙqô§qôÇsq~bsq~ uq~ppppsq~isq~ uq~qûpppq~ psq~ uq~pppppt /** * Return the module configuration object for the currently selected * module. * * @param request The servlet request we are processing * @since Struts 1.1 * @deprecated use {@link #getModuleConfig(HttpServletRequest)} */ ptgetApplicationConfigq~cxsq~ uq~pppppq~fq~gq~fq~bpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft" /* FIXME for Struts 1.2 Since Struts 1.1 only has one implementation for ModuleConfig casting is safe here. Used only for transition purposes ! */ return new ApplicationConfig((ModuleConfigImpl)getModuleConfig(request)); sq~ uq~ppppq~fq~fxsq~ uq~ppppppptrequestq~cxsq~ uq~pppppq~fq~gq~fq~Œpq~hxqîñqõWq±qçqCq#æqATqA„q$vqTKqT›qUÃq€î·q€îÑq€îóq€ïq€ï7q€ïYq€ïsq€+Òq­»q§âq¨ q¦q¨2q¨Zq©·q©çqªoqªqMÜqN q¯6q+-q+]q+…q+­q+Õq+ýq¬ÆqK·qKçq°"q~>!q~=qq±q†5q†nq†§qx_qz2q}q+q€àq†àq‡q}=q‡Rq‡‹q‡Äq~~Þq~~÷q~q~1q~Jqoqqvq‘Ïq’q’q’2q’„q¦?q’­qp,qpEq’Öq’ÿq“ q“Aq“bq“¤q“½qc&q’„q’¶q’Ïq“q“cq×q kqqTqqˆ]qx˜qzkq}vqdqqÆqÿqŽ8qŽqqŽªq}¯qŽãqqUqŸbqŸºq–/q–‡ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppq~Äxxqõ©sq~Csq~ uq~ppppq~}sq~ uq~ppppsq~#q~ÖxqðÃq~zpppq~sq~ uq~pppppt £/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/tiles/UrlController.java,v 1.3 2003/02/27 19:20:50 cedric Exp $ * $Revision: 1.3 $ * $Date: 2003/02/27 19:20:50 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * Tiles controller including a local URL. * @author Cedric Dumoulin */ ptUrlController.javaq~fxsq~ uq~ppppsq~ uq~q®.pppq~fxsq~ uq~ppppsq~#q~lxq'q/äpppppppq~$sq~ uq~q~ˆpppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~³sq~ uq~ppppppptRequestDispatcher.javaq~$xsq~ uq~ppppsq~ uq~q~lpppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ q~ÔŠq~Øq~Ûªq~ßBq~âÚppppq~Äxq~$ppxxqõñqõsq~Csq~ uq~ppppq~csq~ uq~ppppsq~#q~ExqÇ¿q~`sq~Csq~ uq~ppppq~csq~ uq~ppppsq~#q~éxq&òqÛ¯qFsq~ uq~pppppty/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/actions/IncludeAction.java,v 1.4 2002/09/22 05:58:46 martinc Exp $ * $Revision: 1.4 $ * $Date: 2002/09/22 05:58:46 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** *

            An Action that includes the context-relative * URI specified by the parameter property of our associated * ActionMapping. This can be used to integrate Struts with * other business logic components that are implemented as servlets (or JSP * pages), but still take advantage of the Struts controller servlet's * functionality (such as processing of form beans).

            * *

            To configure the use of this Action in your * struts-config.xml file, create an entry like this:

            * * * <action path="/saveSubscription" * type="org.apache.struts.actions.IncludeAction" * name="subscriptionForm" * scope="request" * input="/subscription.jsp" * parameter="/path/to/processing/servlet"> * * *

            which will include the context-relative URI specified by the * parameter attribute.

            * * @author Craig R. McClanahan * @version $Revision: 1.4 $ $Date: 2002/09/22 05:58:46 $ */ ptIncludeAction.javaq~fxsq~ uq~ppppsq~ uq~qÌpppq~fxsq~ uq~ppppsq~#q~ýxqËnull. * * @param name Logical name of the requested forwarding * * @deprecated Replaced by ApplicationConfig.findForwardConfig() */ pt findForwardq~=xsq~ uq~pppppq~$q~yq~$q~ýpq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tæ ActionForwards af = (ActionForwards) getServletContext().getAttribute(Action.FORWARDS_KEY); if (af == null) { return (null); } return (af.findForward(name)); sq~ uq~ppppq~$q~$xq]eq]Àqµqµ*qµ‚q~;§q~;ßq[qÞqRqq,úq- q;q:òqÈ?qÈoqÈŸqÈÏq4q41q4]sq~isq~ uq~sq~bsq~ uq~ppppqû™sq~ uq~ppppppptnameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~ésq~ uq~ppppptÈ/** *

            Find and return the ForwardConfig instance defining * how forwarding to the specified logical name should be handled. This is * performed by checking local and then global configurations for the * specified forwarding configuration. If no forwarding configuration * can be found, return null.

            * * @param name Logical name of the forwarding instance to be returned */ pt findForwardq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ýpq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tÝ ForwardConfig config = findForwardConfig(name); if (config == null) { config = getApplicationConfig().findForwardConfig(name); } return ((ActionForward) config); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqû±sq~ uq~ppppppptnameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~ psq~ uq~pppppt/** * Return the forwarding associated with the specified logical name, * if any; otherwise return null. * * @param name Logical name of the requested forwarding * * @deprecated Replaced by ApplicationConfig.findForwardConfig() */ pt findForwardq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ýpq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tæ ActionForwards af = (ActionForwards) getServletContext().getAttribute(Action.FORWARDS_KEY); if (af == null) { return (null); } return (af.findForward(name)); sq~ uq~ppppq~¥q~¥xq]Ýq^8q¸Mq¸bq¸ºq?ñqãq‹qqqDqO)q;qDâq'q~<7q~=~q~>†q~?¼q~?ìq~Bnsq~isq~ uq~sq~bsq~ uq~ppppqûÉsq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~ psq~ uq~pppppt/** * Return the forwarding associated with the specified logical name, * if any; otherwise return null. * * @param name Logical name of the requested forwarding * * @deprecated Replaced by ApplicationConfig.findForwardConfig() */ pt findForwardq~rxsq~ uq~pppppq~–q~—q~–q~ýpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tæ ActionForwards af = (ActionForwards) getServletContext().getAttribute(Action.FORWARDS_KEY); if (af == null) { return (null); } return (af.findForward(name)); sq~ uq~ppppq~–q~–xq4q4²q4Þsq~isq~ uq~sq~bsq~ uq~ppppqûásq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~ésq~ uq~ppppptÈ/** *

            Find and return the ForwardConfig instance defining * how forwarding to the specified logical name should be handled. This is * performed by checking local and then global configurations for the * specified forwarding configuration. If no forwarding configuration * can be found, return null.

            * * @param name Logical name of the forwarding instance to be returned */ pt findForwardq~rxsq~ uq~pppppq~–q~—q~–q~ýpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tÝ ForwardConfig config = findForwardConfig(name); if (config == null) { config = getApplicationConfig().findForwardConfig(name); } return ((ActionForward) config); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~ésq~ uq~ppppptÂ/** *

            Create (if necessary) and return an {@link ActionForward} that * corresponds to the input property of this Action. * * @since Struts 1.1b2 */ ptgetInputForwardq~rxsq~ uq~pppppq~–q~—q~–q~ýpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tÚ if (getApplicationConfig().getControllerConfig().getInputForward()) { return (findForward(getInput())); } else { return (new ActionForward(getInput())); } sq~ uq~ppppq~–q~–xq»õq¼ q¼bq^Uq^°qÈÿqÉ/qÉ_qÉq#sq@Aq@qq>q°qtq$qPïq;7qG$q(Åq~>¶q~@$q~@Tq~@Œq~Bžq~<‹q~=®q^Íq_(q¿ûqÀqÀhqÉ¿qÉïqÊqÊOsq~isq~ uq~sq~bsq~ uq~ppppqü sq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~ésq~ uq~ppppptÈ/** *

            Find and return the ForwardConfig instance defining * how forwarding to the specified logical name should be handled. This is * performed by checking local and then global configurations for the * specified forwarding configuration. If no forwarding configuration * can be found, return null.

            * * @param name Logical name of the forwarding instance to be returned */ pt findForwardq~{xsq~ uq~pppppq~~q~q~~q~ýpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tØ ForwardConfig config = findForwardConfig(name); if (config == null) { config = getModuleConfig().findForwardConfig(name); } return ((ActionForward) config); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ésq~ uq~ppppptÀ/** *

            Create (if necessary) and return an {@link ActionForward} that * corresponds to the input property of this Action. * * @since Struts 1.1 */ ptgetInputForwardq~{xsq~ uq~pppppq~~q~q~~q~ýpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tÕ if (getModuleConfig().getControllerConfig().getInputForward()) { return (findForward(getInput())); } else { return (new ActionForward(getInput())); } sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppqü1sq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~ psq~ uq~pppppt/** * Return the forwarding associated with the specified logical name, * if any; otherwise return null. * * @param name Logical name of the requested forwarding * * @deprecated Replaced by ModuleConfig.findForwardConfig() */ pt findForwardq~{xsq~ uq~pppppq~~q~q~~q~ýpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tæ ActionForwards af = (ActionForwards) getServletContext().getAttribute(Action.FORWARDS_KEY); if (af == null) { return (null); } return (af.findForward(name)); sq~ uq~ppppq~~q~~xq5q53q5_qnq¤qðq#£q@Áq@ñq$3qIfqRµq;Oq)íq~=Þq~<Úq~>æq~@Äq~@ôq~A,q~BÎq_Eq_ qÃóqÄqÄ`qÊqʯqÊßqËsq~isq~ uq~sq~bsq~ uq~ppppqüIsq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~ésq~ uq~ppppptÈ/** *

            Find and return the ForwardConfig instance defining * how forwarding to the specified logical name should be handled. This is * performed by checking local and then global configurations for the * specified forwarding configuration. If no forwarding configuration * can be found, return null.

            * * @param name Logical name of the forwarding instance to be returned */ pt findForwardq~cxsq~ uq~pppppq~fq~gq~fq~ýpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftØ ForwardConfig config = findForwardConfig(name); if (config == null) { config = getModuleConfig().findForwardConfig(name); } return ((ActionForward) config); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ésq~ uq~ppppptÀ/** *

            Create (if necessary) and return an {@link ActionForward} that * corresponds to the input property of this Action. * * @since Struts 1.1 */ ptgetInputForwardq~cxsq~ uq~pppppq~fq~gq~fq~ýpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftÕ if (getModuleConfig().getControllerConfig().getInputForward()) { return (findForward(getInput())); } else { return (new ActionForward(getInput())); } sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppqüqsq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~ psq~ uq~pppppt/** * Return the forwarding associated with the specified logical name, * if any; otherwise return null. * * @param name Logical name of the requested forwarding * * @deprecated Replaced by ModuleConfig.findForwardConfig() */ pt findForwardq~cxsq~ uq~pppppq~fq~gq~fq~ýpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftæ ActionForwards af = (ActionForwards) getServletContext().getAttribute(Action.FORWARDS_KEY); if (af == null) { return (null); } return (af.findForward(name)); sq~ uq~ppppq~fq~fxq5Ÿq5´q5àqžqÔq0q#ÓqAAqAqq$cqK¨qT{q;gq+q~>q~=)q~?q~Adq~A”q~AÌq~Bþppq~Äxq~$ppxpq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tÝ ForwardConfig config = findForwardConfig(name); if (config == null) { config = getApplicationConfig().findForwardConfig(name); } return ((ActionForward) config); sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~ésq~ uq~pppppt´/** *

            Return the logical names of all locally defined forwards for this * mapping. If there are no such forwards, a zero-length array * is returned. */ pt findForwardsq~=xsq~ uq~pppppq~$q~yq~$q~{t[]q~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t ArrayList results = new ArrayList(); ForwardConfig fcs[] = findForwardConfigs(); for (int i = 0; i < fcs.length; i++) { results.add(fcs[i].getName()); } return ((String[]) results.toArray(new String[results.size()])); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppqü¡sq~ uq~pppppppttypeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~½pq~§xpppq~ésq~ uq~pppppt//** *

            Find and return the ExceptionConfig instance defining * how exceptions of the specified type should be handled. This is * performed by checking local and then global configurations for the * specified exception's class, and then looking up the superclass chain * (again checking local and then global configurations). If no handler * configuration can be found, return null.

            * * @param type Exception class for which to find a handler * @since Struts 1.1 */ pt findExceptionq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ òpq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t9 // Check through the entire superclass hierarchy as needed ExceptionConfig config = null; while (true) { // Check for a locally defined handler String name = type.getName(); config = findExceptionConfig(name); if (config != null) { return (config); } // Check for a globally defined handler config = getApplicationConfig().findExceptionConfig(name); if (config != null) { return (config); } // Loop again for our superclass (if any) type = type.getSuperclass(); if (type == null) { break; } } return (null); // No handler has been configured sq~ uq~ppppq~¥q~¥xqû™sq~isq~ uq~ppppq~ésq~ uq~pppppt´/** *

            Return the logical names of all locally defined forwards for this * mapping. If there are no such forwards, a zero-length array * is returned. */ pt findForwardsq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{t[]q~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t ArrayList results = new ArrayList(); ForwardConfig fcs[] = findForwardConfigs(); for (int i = 0; i < fcs.length; i++) { results.add(fcs[i].getName()); } return ((String[]) results.toArray(new String[results.size()])); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqüÊsq~ uq~pppppppttypeq~rxsq~ uq~pppppq~–q~—q~–q~½pq~˜xpppq~ésq~ uq~pppppt//** *

            Find and return the ExceptionConfig instance defining * how exceptions of the specified type should be handled. This is * performed by checking local and then global configurations for the * specified exception's class, and then looking up the superclass chain * (again checking local and then global configurations). If no handler * configuration can be found, return null.

            * * @param type Exception class for which to find a handler * @since Struts 1.1 */ pt findExceptionq~rxsq~ uq~pppppq~–q~—q~–q~ òpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t9 // Check through the entire superclass hierarchy as needed ExceptionConfig config = null; while (true) { // Check for a locally defined handler String name = type.getName(); config = findExceptionConfig(name); if (config != null) { return (config); } // Check for a globally defined handler config = getApplicationConfig().findExceptionConfig(name); if (config != null) { return (config); } // Loop again for our superclass (if any) type = type.getSuperclass(); if (type == null) { break; } } return (null); // No handler has been configured sq~ uq~ppppq~–q~–xqûásq~isq~ uq~ppppq~ésq~ uq~pppppt´/** *

            Return the logical names of all locally defined forwards for this * mapping. If there are no such forwards, a zero-length array * is returned. */ pt findForwardsq~rxsq~ uq~pppppq~–q~—q~–q~{t[]q~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t ArrayList results = new ArrayList(); ForwardConfig fcs[] = findForwardConfigs(); for (int i = 0; i < fcs.length; i++) { results.add(fcs[i].getName()); } return ((String[]) results.toArray(new String[results.size()])); sq~ uq~ppppq~–q~–xqûùsq~isq~ uq~sq~bsq~ uq~ppppqüósq~ uq~pppppppttypeq~{xsq~ uq~pppppq~~q~q~~q~½pq~€xpppq~ésq~ uq~pppppt//** *

            Find and return the ExceptionConfig instance defining * how exceptions of the specified type should be handled. This is * performed by checking local and then global configurations for the * specified exception's class, and then looking up the superclass chain * (again checking local and then global configurations). If no handler * configuration can be found, return null.

            * * @param type Exception class for which to find a handler * @since Struts 1.1 */ pt findExceptionq~{xsq~ uq~pppppq~~q~q~~q~ òpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t4 // Check through the entire superclass hierarchy as needed ExceptionConfig config = null; while (true) { // Check for a locally defined handler String name = type.getName(); config = findExceptionConfig(name); if (config != null) { return (config); } // Check for a globally defined handler config = getModuleConfig().findExceptionConfig(name); if (config != null) { return (config); } // Loop again for our superclass (if any) type = type.getSuperclass(); if (type == null) { break; } } return (null); // No handler has been configured sq~ uq~ppppq~~q~~xqü sq~isq~ uq~ppppq~ésq~ uq~pppppt´/** *

            Return the logical names of all locally defined forwards for this * mapping. If there are no such forwards, a zero-length array * is returned. */ pt findForwardsq~{xsq~ uq~pppppq~~q~q~~q~{t[]q~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t ArrayList results = new ArrayList(); ForwardConfig fcs[] = findForwardConfigs(); for (int i = 0; i < fcs.length; i++) { results.add(fcs[i].getName()); } return ((String[]) results.toArray(new String[results.size()])); sq~ uq~ppppq~~q~~xqü!sq~isq~ uq~sq~bsq~ uq~ppppqýsq~ uq~pppppppttypeq~cxsq~ uq~pppppq~fq~gq~fq~½pq~hxpppq~ésq~ uq~pppppt//** *

            Find and return the ExceptionConfig instance defining * how exceptions of the specified type should be handled. This is * performed by checking local and then global configurations for the * specified exception's class, and then looking up the superclass chain * (again checking local and then global configurations). If no handler * configuration can be found, return null.

            * * @param type Exception class for which to find a handler * @since Struts 1.1 */ pt findExceptionq~cxsq~ uq~pppppq~fq~gq~fq~ òpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft4 // Check through the entire superclass hierarchy as needed ExceptionConfig config = null; while (true) { // Check for a locally defined handler String name = type.getName(); config = findExceptionConfig(name); if (config != null) { return (config); } // Check for a globally defined handler config = getModuleConfig().findExceptionConfig(name); if (config != null) { return (config); } // Loop again for our superclass (if any) type = type.getSuperclass(); if (type == null) { break; } } return (null); // No handler has been configured sq~ uq~ppppq~fq~fxqüIsq~isq~ uq~ppppq~ésq~ uq~pppppt´/** *

            Return the logical names of all locally defined forwards for this * mapping. If there are no such forwards, a zero-length array * is returned. */ pt findForwardsq~cxsq~ uq~pppppq~fq~gq~fq~{t[]q~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft ArrayList results = new ArrayList(); ForwardConfig fcs[] = findForwardConfigs(); for (int i = 0; i < fcs.length; i++) { results.add(fcs[i].getName()); } return ((String[]) results.toArray(new String[results.size()])); sq~ uq~ppppq~fq~fxqüapq~Bsq~ uq~pppppppt ActionMappingq~=xsq~ uq~qû`qËBqvqäüq$Åqb€sq~Csq~ uq~ppppq~ísq~ uq~ppppsq~#q~éxq€ë{q'@q~C¾q~&_q~?Žq~BAq~Cpsq~Csq~ uq~ppppq~Hsq~ uq~ppppsq~#q~éxq ÜqùqpÙqh›qfDqhfqfÏpppppppq~$sq~ uq~qX4pppsq~ uq~q~+pppq~$q~=q~"sq~ uq~qXNqXÌpppq~$sq~ uq~ppppsq~ *uq~>qÇâq¹qÈq~< q~ÄÕqadqÍqa÷q~,q~,µq~,Íq~-q~-%q~-Qsq~isq~ uq~sq~bsq~ uq~ppppqý`sq~ uq~ppppppptpathq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~ psq~ uq~pppppt/** * Return the ActionMapping for the specified path, for the default * sub-application. * * @param path Request path for which a mapping is requested * * @deprecated Replaced by ApplicationConfig.findActionConfig() */ pt findMappingq~=xsq~ uq~pppppq~$q~yq~$q~épq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tæ ActionMappings am = (ActionMappings) getServletContext().getAttribute(Action.MAPPINGS_KEY); if (am == null) { return (null); } return (am.findMapping(path)); sq~ uq~ppppq~$q~$xq~ĺq~Ĉq]xq´Åq´íqµMqµ¥qµÍqµõq¶*q¶Åq· q·=q~;ªq~;âq^qáqUqq9²q;–q9¥q;q~_¢q~äq¼aq¼q¼Lq»õqƒwq~ÿq~ÃÚq~Ämqb™qaÜqaqÈBqÈrqÈ¢qÈÒqÆEqÆeq.qNq~-Žq~-¦q~-éq~-þq~.*sq~isq~ uq~sq~bsq~ uq~ppppqýxsq~ uq~ppppppptpathq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~ psq~ uq~pppppt/** * Return the ActionMapping for the specified path, for the default * sub-application. * * @param path Request path for which a mapping is requested * * @deprecated Replaced by ApplicationConfig.findActionConfig() */ pt findMappingq~¢xsq~ uq~pppppq~¥q~¦q~¥q~épq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tæ ActionMappings am = (ActionMappings) getServletContext().getAttribute(Action.MAPPINGS_KEY); if (am == null) { return (null); } return (am.findMapping(path)); sq~ uq~ppppq~¥q~¥xq~ÄòqaIq]ðq·ýq¸%q¸…q¸Ýq¹q¹-q¹bq¹ýqºEqºuq?ôqæqŽqqqGq9Âq;®qD­qDùq'¥q'Õq(q(-q~<:q~=q~>‰q~?¿q~?÷q~Bqq¼xq¼qÂ^qÂq…ïqŸûqbqZqb¾qbTq”q~Åq–Ësq~isq~ uq~sq~bsq~ uq~ppppqýsq~ uq~ppppppptpathq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~ psq~ uq~pppppt /** * Return the ActionMapping for the specified path, for the default * application module. * * @param path Request path for which a mapping is requested * * @deprecated Replaced by ApplicationConfig.findActionConfig() */ pt findMappingq~rxsq~ uq~pppppq~–q~—q~–q~épq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tæ ActionMappings am = (ActionMappings) getServletContext().getAttribute(Action.MAPPINGS_KEY); if (am == null) { return (null); } return (am.findMapping(path)); sq~ uq~ppppq~–q~–xq~.gq~.q~.Âq~.×q~/q»¥q»Íq¼-q¼…q¼­q¼Õq½ q½¥q½íq¾qÆ­qÆÍqq¯q^hqÉqÉ2qÉbqÉ’q#vq@Dq@tqAq³qwq$q9Òq;ÆqFïqG;q(Íq(ýq)-q)Uq~>¹q~@'q~@_q~@—q~B¡q~<Žq~=±q¼q¼ qà qÃ/q»lq»êq¼9qˆgq qb4qzqbÞqbtq•q~/@q~/Xq~/›q~/°q~/Üq^àq¿«q¿ÓqÀ3qÀ‹qÀ³qÀÛqÁqÁ«qÁóqÂ#qšq~Å2q–ëqÉÂqÉòqÊ"qÊRqÇqÇ5q0qPsq~isq~ uq~sq~bsq~ uq~ppppqý¨sq~ uq~ppppppptpathq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~ psq~ uq~ppppptø/** * Return the ActionMapping for the specified path, for the default * module. * * @param path Request path for which a mapping is requested * * @deprecated Replaced by ModuleConfig.findActionConfig() */ pt findMappingq~{xsq~ uq~pppppq~~q~q~~q~épq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tæ ActionMappings am = (ActionMappings) getServletContext().getAttribute(Action.MAPPINGS_KEY); if (am == null) { return (null); } return (am.findMapping(path)); sq~ uq~ppppq~~q~~xqqq§qóq#¦q@Äq@ôq$6qI1qI}q9âq;Þq)õq*%q*Uq*}q~=áq~<Ýq~>éq~@Çq~@ÿq~A7q~BÑqÁqÁ7q¾„q¾—qúqÃÝq‹ãqbþq CqžªqŸq•wq•Ïq~0q~01q~0tq~0‰q~0µq_XqãqÃËqÄ+qăqÄ«qÄÓqÅqÅ£qÅëqÆq›”q~ÅRq— qÊ‚qʲqÊâqËqÇ}qÇq±qÑsq~isq~ uq~sq~bsq~ uq~ppppqýÀsq~ uq~ppppppptpathq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~ psq~ uq~ppppptø/** * Return the ActionMapping for the specified path, for the default * module. * * @param path Request path for which a mapping is requested * * @deprecated Replaced by ModuleConfig.findActionConfig() */ pt findMappingq~cxsq~ uq~pppppq~fq~gq~fq~épq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftæ ActionMappings am = (ActionMappings) getServletContext().getAttribute(Action.MAPPINGS_KEY); if (am == null) { return (null); } return (am.findMapping(path)); sq~ uq~ppppq~fq~fxq¡q×q3q#ÖqADqAtq$fqKsqK¿q9òq;öq+q+Mq+}q+¥q~>q~=,q~?q~Agq~AŸq~A×q~CqÁÝqÂq¿Tq¿gqÄhqÄ‹q~qcq cqŸZqŸ²q–'q–ppppppppppppppppppppq~Äxq~$ppxsq~ uq~pppppt/** *

            Find and return the ExceptionConfig instance defining * how exceptions of the specified type should be handled. This is * performed by checking local and then global configurations for the * specified exception's class, and then looking up the superclass chain * (again checking local and then global configurations). If no handler * configuration can be found, return null.

            * * @param type Exception class for which to find a handler */ pt findExceptionq~=xsq~ uq~pppppq~$q~yq~$q~ òpq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t9 // Check through the entire superclass hierarchy as needed ExceptionConfig config = null; while (true) { // Check for a locally defined handler String name = type.getName(); config = findExceptionConfig(name); if (config != null) { return (config); } // Check for a globally defined handler config = getApplicationConfig().findExceptionConfig(name); if (config != null) { return (config); } // Loop again for our superclass (if any) type = type.getSuperclass(); if (type == null) { break; } } return (null); // No handler has been configured sq~ uq~ppppq~$q~$xsq~ uq~pppppppttypeq~=xsq~ uq~pppppq~$q~yq~$q~½pq~$xqa)qa1q~)§q~;^q~;˜q~´q~Håq«(qü¤q˜|q˜„sq~isq~ uq~ppppq~ésq~ uq~ppppptæ/** * Return a Class corresponds to the value specified for the * type property, taking into account the trailing "[]" * for arrays (as well as the ability to specify primitive Java types). */ pt getTypeClassq~¢xsq~ uq~pppppq~¥q~¦q~¥q~½pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t // Identify the base class (in case an array was specified) String baseType = getType(); boolean indexed = false; if (baseType.endsWith("[]")) { baseType = baseType.substring(0, baseType.length() - 2); indexed = true; } // Construct an appropriate Class instance for the base class Class baseClass = null; if ("boolean".equals(baseType)) { baseClass = Boolean.TYPE; } else if ("byte".equals(baseType)) { baseClass = Byte.TYPE; } else if ("char".equals(baseType)) { baseClass = Character.TYPE; } else if ("double".equals(baseType)) { baseClass = Double.TYPE; } else if ("float".equals(baseType)) { baseClass = Float.TYPE; } else if ("int".equals(baseType)) { baseClass = Integer.TYPE; } else if ("long".equals(baseType)) { baseClass = Long.TYPE; } else if ("short".equals(baseType)) { baseClass = Short.TYPE; } else { // FIXME - thread context class loader? try { baseClass = Class.forName(baseType); } catch (Throwable t) { baseClass = null; } } // Return the base class or an array appropriately if (indexed) { return (Array.newInstance(baseClass, 0).getClass()); } else { return (baseClass); } sq~ uq~ppppq~¥q~¥xq²Þq™äq™ìqüÍqsÔsq~isq~ uq~ppppq~#sq~ uq~pppppt// ------------------------------------------------------ Protected Methods /** * Return the Class instance for the form bean implementation * configured by this FormBeanConfig instance. This method * uses the same algorithm as RequestUtils.applicationClass() * but is reproduced to avoid a runtime dependence. */ pt formBeanClassq~rxsq~ uq~pppppq~–q~—q~–q~½pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–te ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); if (classLoader == null) { classLoader = this.getClass().getClassLoader(); } try { return (classLoader.loadClass(getType())); } catch (Exception e) { return (null); } sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~ésq~ uq~ppppptæ/** * Return a Class corresponds to the value specified for the * type property, taking into account the trailing "[]" * for arrays (as well as the ability to specify primitive Java types). */ pt getTypeClassq~rxsq~ uq~pppppq~–q~—q~–q~½pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t¸ // Identify the base class (in case an array was specified) String baseType = getType(); boolean indexed = false; if (baseType.endsWith("[]")) { baseType = baseType.substring(0, baseType.length() - 2); indexed = true; } // Construct an appropriate Class instance for the base class Class baseClass = null; if ("boolean".equals(baseType)) { baseClass = Boolean.TYPE; } else if ("byte".equals(baseType)) { baseClass = Byte.TYPE; } else if ("char".equals(baseType)) { baseClass = Character.TYPE; } else if ("double".equals(baseType)) { baseClass = Double.TYPE; } else if ("float".equals(baseType)) { baseClass = Float.TYPE; } else if ("int".equals(baseType)) { baseClass = Integer.TYPE; } else if ("long".equals(baseType)) { baseClass = Long.TYPE; } else if ("short".equals(baseType)) { baseClass = Short.TYPE; } else { ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); if (classLoader == null) { classLoader = this.getClass().getClassLoader(); } try { baseClass = classLoader.loadClass(baseType); } catch (Throwable t) { baseClass = null; } } // Return the base class or an array appropriately if (indexed) { return (Array.newInstance(baseClass, 0).getClass()); } else { return (baseClass); } sq~ uq~ppppq~–q~–xq²÷qt]q›tq›|qüösq~isq~ uq~ppppq~#sq~ uq~pppppt// ------------------------------------------------------ Protected Methods /** * Return the Class instance for the form bean implementation * configured by this FormBeanConfig instance. This method * uses the same algorithm as RequestUtils.applicationClass() * but is reproduced to avoid a runtime dependence. */ pt formBeanClassq~{xsq~ uq~pppppq~~q~q~~q~½pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~te ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); if (classLoader == null) { classLoader = this.getClass().getClassLoader(); } try { return (classLoader.loadClass(getType())); } catch (Exception e) { return (null); } sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ésq~ uq~ppppptæ/** * Return a Class corresponds to the value specified for the * type property, taking into account the trailing "[]" * for arrays (as well as the ability to specify primitive Java types). */ pt getTypeClassq~{xsq~ uq~pppppq~~q~q~~q~½pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t¸ // Identify the base class (in case an array was specified) String baseType = getType(); boolean indexed = false; if (baseType.endsWith("[]")) { baseType = baseType.substring(0, baseType.length() - 2); indexed = true; } // Construct an appropriate Class instance for the base class Class baseClass = null; if ("boolean".equals(baseType)) { baseClass = Boolean.TYPE; } else if ("byte".equals(baseType)) { baseClass = Byte.TYPE; } else if ("char".equals(baseType)) { baseClass = Character.TYPE; } else if ("double".equals(baseType)) { baseClass = Double.TYPE; } else if ("float".equals(baseType)) { baseClass = Float.TYPE; } else if ("int".equals(baseType)) { baseClass = Integer.TYPE; } else if ("long".equals(baseType)) { baseClass = Long.TYPE; } else if ("short".equals(baseType)) { baseClass = Short.TYPE; } else { ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); if (classLoader == null) { classLoader = this.getClass().getClassLoader(); } try { baseClass = classLoader.loadClass(baseType); } catch (Throwable t) { baseClass = null; } } // Return the base class or an array appropriately if (indexed) { return (Array.newInstance(baseClass, 0).getClass()); } else { return (baseClass); } sq~ uq~ppppq~~q~~xq€*sq~(sq~ uq~ppppq~%sq~ uq~ppppppptloopTagSupportClassq~{xsq~ uq~pppppq~~q~q~~q~½pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~d1xpppt nullq~~q~~q~~xsq~(sq~ uq~ppppq~%sq~ uq~ppppppptloopTagStatusClassq~{xsq~ uq~pppppq~~q~q~~q~½pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~d1xpppt nullq~~q~~q~~xqªèq³q³)q³Aqtæqq qýsq~isq~ uq~ppppq~#sq~ uq~pppppt// ------------------------------------------------------ Protected Methods /** * Return the Class instance for the form bean implementation * configured by this FormBeanConfig instance. This method * uses the same algorithm as RequestUtils.applicationClass() * but is reproduced to avoid a runtime dependence. */ pt formBeanClassq~cxsq~ uq~pppppq~fq~gq~fq~½pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~fte ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); if (classLoader == null) { classLoader = this.getClass().getClassLoader(); } try { return (classLoader.loadClass(getType())); } catch (Exception e) { return (null); } sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ésq~ uq~ppppptæ/** * Return a Class corresponds to the value specified for the * type property, taking into account the trailing "[]" * for arrays (as well as the ability to specify primitive Java types). */ pt getTypeClassq~cxsq~ uq~pppppq~fq~gq~fq~½pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft¸ // Identify the base class (in case an array was specified) String baseType = getType(); boolean indexed = false; if (baseType.endsWith("[]")) { baseType = baseType.substring(0, baseType.length() - 2); indexed = true; } // Construct an appropriate Class instance for the base class Class baseClass = null; if ("boolean".equals(baseType)) { baseClass = Boolean.TYPE; } else if ("byte".equals(baseType)) { baseClass = Byte.TYPE; } else if ("char".equals(baseType)) { baseClass = Character.TYPE; } else if ("double".equals(baseType)) { baseClass = Double.TYPE; } else if ("float".equals(baseType)) { baseClass = Float.TYPE; } else if ("int".equals(baseType)) { baseClass = Integer.TYPE; } else if ("long".equals(baseType)) { baseClass = Long.TYPE; } else if ("short".equals(baseType)) { baseClass = Short.TYPE; } else { ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); if (classLoader == null) { classLoader = this.getClass().getClassLoader(); } try { baseClass = classLoader.loadClass(baseType); } catch (Throwable t) { baseClass = null; } } // Return the base class or an array appropriately if (indexed) { return (Array.newInstance(baseClass, 0).getClass()); } else { return (baseClass); } sq~ uq~ppppq~fq~fxq³Zq³rq³‹q³£q~Äxq~$ppxpq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t // Identify the base class (in case an array was specified) String baseType = getType(); boolean indexed = false; if (baseType.endsWith("[]")) { baseType = baseType.substring(0, baseType.length() - 2); indexed = true; } // Construct an appropriate Class instance for the base class Class baseClass = null; if ("boolean".equals(baseType)) { baseClass = Boolean.TYPE; } else if ("byte".equals(baseType)) { baseClass = Byte.TYPE; } else if ("char".equals(baseType)) { baseClass = Character.TYPE; } else if ("double".equals(baseType)) { baseClass = Double.TYPE; } else if ("float".equals(baseType)) { baseClass = Float.TYPE; } else if ("int".equals(baseType)) { baseClass = Integer.TYPE; } else if ("long".equals(baseType)) { baseClass = Long.TYPE; } else if ("short".equals(baseType)) { baseClass = Short.TYPE; } else { // FIXME - thread context class loader? try { baseClass = Class.forName(baseType); } catch (Throwable t) { baseClass = null; } } // Return the base class or an array appropriately if (indexed) { return (Array.newInstance(baseClass, 0).getClass()); } else { return (baseClass); } sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~ésq~ uq~pppppt¤// --------------------------------------------------------- Public Methods /** * Return an object representing the initial value of this property. */ ptinitialq~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tþ // Don't bother synchronizing, a race is basically harmless if (!initialized) { try { if (initial == null) { if ("boolean".equals(type)) { initialValue = Boolean.FALSE; } else if ("byte".equals(type)) { initialValue = new Byte((byte) 0); } else if ("char".equals(type)) { initialValue = new Character((char) 0); } else if ("double".equals(type)) { initialValue = new Double((double) 0.0); } else if ("float".equals(type)) { initialValue = new Float((float) 0.0); } else if ("int".equals(type)) { initialValue = new Integer(0); } else if ("long".equals(type)) { initialValue = new Long((long) 0); } else if ("short".equals(type)) { initialValue = new Short((short) 0); } else { initialValue = null; } } else { Class clazz = Class.forName(type); initialValue = ConvertUtils.convert(initial, clazz); } } catch (Throwable t) { initialValue = null; } initialized = true; } return (initialValue); sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~ésq~ uq~ppppptA/** * Freeze the configuration of this component. */ ptfreezeq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t& configured = true; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~ésq~ uq~ppppptD/** * Return a String representation of this object. */ pttoStringq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tD StringBuffer sb = new StringBuffer("FormPropertyConfig["); sb.append("name="); sb.append(this.name); sb.append(",type="); sb.append(this.type); sb.append(",initial="); sb.append(this.initial); sb.append("]"); return (sb.toString()); sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~ésq~ uq~pppppppt getInitialq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t& return (this.initial); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqþºsq~ uq~ppppppptinitialq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~ésq~ uq~pppppppt setInitialq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t– if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.initial = initial; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~ésq~ uq~ppppppptgetNameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t# return (this.name); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqþàsq~ uq~ppppppptnameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~ésq~ uq~ppppppptsetNameq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.name = name; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~ésq~ uq~ppppppptgetTypeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t# return (this.type); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppqÿsq~ uq~pppppppttypeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~ésq~ uq~ppppppptsetTypeq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.type = type; sq~ uq~ppppq~¥q~¥xqýêsq~isq~ uq~ppppq~ésq~ uq~pppppt¤// --------------------------------------------------------- Public Methods /** * Return an object representing the initial value of this property. */ ptinitialq~¢xsq~ uq~pppppq~¥q~¦q~¥q~«pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tþ // Don't bother synchronizing, a race is basically harmless if (!initialized) { try { if (initial == null) { if ("boolean".equals(type)) { initialValue = Boolean.FALSE; } else if ("byte".equals(type)) { initialValue = new Byte((byte) 0); } else if ("char".equals(type)) { initialValue = new Character((char) 0); } else if ("double".equals(type)) { initialValue = new Double((double) 0.0); } else if ("float".equals(type)) { initialValue = new Float((float) 0.0); } else if ("int".equals(type)) { initialValue = new Integer(0); } else if ("long".equals(type)) { initialValue = new Long((long) 0); } else if ("short".equals(type)) { initialValue = new Short((short) 0); } else { initialValue = null; } } else { Class clazz = Class.forName(type); initialValue = ConvertUtils.convert(initial, clazz); } } catch (Throwable t) { initialValue = null; } initialized = true; } return (initialValue); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~ésq~ uq~ppppptA/** * Freeze the configuration of this component. */ ptfreezeq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t& configured = true; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~ésq~ uq~ppppptD/** * Return a String representation of this object. */ pttoStringq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tD StringBuffer sb = new StringBuffer("FormPropertyConfig["); sb.append("name="); sb.append(this.name); sb.append(",type="); sb.append(this.type); sb.append(",initial="); sb.append(this.initial); sb.append("]"); return (sb.toString()); sq~ uq~ppppq~¥q~¥xsq~esq~ uq~ppppq~ésq~ uq~ppppptŸ// ----------------------------------------------------------- Constructors /** * Standard no-arguments constructor for dynamic instantiation. */ ptFormPropertyConfigq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t super(); sq~ uq~ppppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppqÿ]sq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqÿ]sq~ uq~pppppppttypeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppqÿ]sq~ uq~ppppppptinitialq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpq~ésq~ uq~ppppptþ/** * Constructor that preconfigures the relevant properties. * * @param name Name of this property * @param type Fully qualified class name of this property * @param initial Initial value of this property (if any) */ pqÿSq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tj super(); setName(name); setType(type); setInitial(initial); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~ésq~ uq~pppppppt getInitialq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t& return (this.initial); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqÿ“sq~ uq~ppppppptinitialq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~ésq~ uq~pppppppt setInitialq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t– if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.initial = initial; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~ésq~ uq~ppppppptgetNameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t# return (this.name); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqÿ¹sq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~ésq~ uq~ppppppptsetNameq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.name = name; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~ésq~ uq~ppppppptgetTypeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t# return (this.type); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppqÿßsq~ uq~pppppppttypeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~ésq~ uq~ppppppptsetTypeq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.type = type; sq~ uq~ppppq~–q~–xqþ sq~isq~ uq~ppppq~ésq~ uq~pppppt¤// --------------------------------------------------------- Public Methods /** * Return an object representing the initial value of this property. */ ptinitialq~rxsq~ uq~pppppq~–q~—q~–q~«pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t // Compute our initial value the first time it is requested // Don't bother synchronizing, a race is basically harmless if (!initialized) { try { Class clazz = getTypeClass(); initialValue = ConvertUtils.convert(initial, clazz); } catch (Throwable t) { initialValue = null; } initialized = true; } // Clone if the initial value is an array if ((initialValue != null) && (initialValue.getClass().isArray())) { int n = Array.getLength(initialValue); Class componentType = initialValue.getClass().getComponentType(); Object newValue = Array.newInstance(componentType, n); for (int j = 0; j < n; j++) { Array.set(newValue, j, Array.get(initialValue, j)); } return (newValue); } // Return the calculated value return (initialValue); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~ésq~ uq~ppppptA/** * Freeze the configuration of this component. */ ptfreezeq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t& configured = true; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~ésq~ uq~ppppptD/** * Return a String representation of this object. */ pttoStringq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tD StringBuffer sb = new StringBuffer("FormPropertyConfig["); sb.append("name="); sb.append(this.name); sb.append(",type="); sb.append(this.type); sb.append(",initial="); sb.append(this.initial); sb.append("]"); return (sb.toString()); sq~ uq~ppppq~–q~–xsq~esq~ uq~ppppq~ésq~ uq~ppppptŸ// ----------------------------------------------------------- Constructors /** * Standard no-arguments constructor for dynamic instantiation. */ pqÿSq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t super(); sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq‚5sq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq‚5sq~ uq~pppppppttypeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq‚5sq~ uq~ppppppptinitialq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpq~ésq~ uq~ppppptþ/** * Constructor that preconfigures the relevant properties. * * @param name Name of this property * @param type Fully qualified class name of this property * @param initial Initial value of this property (if any) */ pqÿSq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t1 this(name, type, initial, 0); sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq‚\sq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq‚\sq~ uq~pppppppttypeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq‚\sq~ uq~ppppppptinitialq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq‚\sq~ uq~ppppppptsizeq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xq~ésq~ uq~ppppptv/** * Constructor that preconfigures the relevant properties. * * @param name Name of this property * @param type Fully qualified class name of this property * @param initial Initial value of this property (if any) * @param size Size of the array to be created if this property is an * array with no defined initial value */ pqÿSq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t‚ super(); setName(name); setType(type); setInitial(initial); setSize(size); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ésq~ uq~pppppppt getInitialq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t& return (this.initial); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚šsq~ uq~ppppppptinitialq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~ésq~ uq~pppppppt setInitialq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t– if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.initial = initial; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ésq~ uq~ppppppptgetNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t# return (this.name); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚Àsq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~ésq~ uq~ppppppptsetNameq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.name = name; sq~ uq~ppppq~~q~~xsq~(sq~ uq~ppppq~ésq~ uq~ppppptØ/** *

            The size of the array to be created if this property is an array * type and there is no specified initial value. This * value must be non-negative.

            * * @since Struts 1.1 */ /** *

            The size of the array to be created if this property is an array * type and there is no specified initial value. This * value must be non-negative.

            * * @since Struts 1.1 */ ptsizeq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xpppt 0q~~q~~q~~xsq~isq~ uq~ppppq~ésq~ uq~ppppppptgetSizeq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t# return (this.size); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚ôsq~ uq~ppppppptsizeq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xpppq~ésq~ uq~ppppppptsetSizeq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tñ if (configured) { throw new IllegalStateException("Configuration is frozen"); } if (size < 0) { throw new IllegalArgumentException("size < 0"); } this.size = size; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ésq~ uq~ppppppptgetTypeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t# return (this.type); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚sq~ uq~pppppppttypeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~ésq~ uq~ppppppptsetTypeq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.type = type; sq~ uq~ppppq~~q~~xqþ*sq~isq~ uq~ppppq~ésq~ uq~ppppptç// --------------------------------------------------------- Public Methods /** *

            Return an object representing the initial value of this property. * This is calculated according to the following algorithm:

            *
              *
            • If the value you have specified for the type * property represents an array (i.e. it ends with "[]"): *
                *
              • If you have specified a value for the initial * property, ConvertUtils.convert() will be * called to convert it into an instance of the specified * array type.
              • *
              • If you have not specified a value for the initial * property, an array of the length specified by the * size property will be created. Each element * of the array will be instantiated via the zero-args constructor * on the specified class (if any). Otherwise, null * will be returned.
              • *
            • *
            • If the value you have specified for the type * property does not represent an array: *
                *
              • If you have specified a value for the initial * property, ConvertUtils.convert() * will be called to convert it into an object instance.
              • *
              • If you have not specified a value for the initial * attribute, Struts will instantiate an instance via the * zero-args constructor on the specified class (if any). * Otherwise, null will be returned.
              • *
            • *
            */ ptinitialq~{xsq~ uq~pppppq~~q~q~~q~«pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t± Object initialValue = null; try { Class clazz = getTypeClass(); if (clazz.isArray()) { if (initial != null) { initialValue = ConvertUtils.convert(initial, clazz); } else { initialValue = Array.newInstance(clazz.getComponentType(), size); for (int i = 0; i < size; i++) { try { Array.set(initialValue, i, clazz.getComponentType().newInstance()); } catch (Throwable t) { ; // Probably does not have a zero-args constructor } } } } else { if (initial != null) { initialValue = ConvertUtils.convert(initial, clazz); } else { initialValue = clazz.newInstance(); } } } catch (Throwable t) { initialValue = null; } return (initialValue); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ésq~ uq~ppppptA/** * Freeze the configuration of this component. */ ptfreezeq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t& configured = true; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ésq~ uq~ppppptD/** * Return a String representation of this object. */ pttoStringq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tD StringBuffer sb = new StringBuffer("FormPropertyConfig["); sb.append("name="); sb.append(this.name); sb.append(",type="); sb.append(this.type); sb.append(",initial="); sb.append(this.initial); sb.append("]"); return (sb.toString()); sq~ uq~ppppq~~q~~xsq~esq~ uq~ppppq~ésq~ uq~ppppptŸ// ----------------------------------------------------------- Constructors /** * Standard no-arguments constructor for dynamic instantiation. */ pqÿSq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft super(); sq~ uq~ppppq~fq~fxsq~esq~ uq~sq~bsq~ uq~ppppq‚psq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq‚psq~ uq~pppppppttypeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq‚psq~ uq~ppppppptinitialq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpq~ésq~ uq~ppppptþ/** * Constructor that preconfigures the relevant properties. * * @param name Name of this property * @param type Fully qualified class name of this property * @param initial Initial value of this property (if any) */ pqÿSq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft1 this(name, type, initial, 0); sq~ uq~ppppq~fq~fxsq~esq~ uq~sq~bsq~ uq~ppppq‚—sq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq‚—sq~ uq~pppppppttypeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq‚—sq~ uq~ppppppptinitialq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq‚—sq~ uq~ppppppptsizeq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxq~ésq~ uq~ppppptv/** * Constructor that preconfigures the relevant properties. * * @param name Name of this property * @param type Fully qualified class name of this property * @param initial Initial value of this property (if any) * @param size Size of the array to be created if this property is an * array with no defined initial value */ pqÿSq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft‚ super(); setName(name); setType(type); setInitial(initial); setSize(size); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ésq~ uq~pppppppt getInitialq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft& return (this.initial); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚Õsq~ uq~ppppppptinitialq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~ésq~ uq~pppppppt setInitialq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft– if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.initial = initial; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ésq~ uq~ppppppptgetNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft# return (this.name); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚ûsq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~ésq~ uq~ppppppptsetNameq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.name = name; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ésq~ uq~ppppppptgetSizeq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft# return (this.size); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚!sq~ uq~ppppppptsizeq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxpppq~ésq~ uq~ppppppptsetSizeq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftñ if (configured) { throw new IllegalStateException("Configuration is frozen"); } if (size < 0) { throw new IllegalArgumentException("size < 0"); } this.size = size; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ésq~ uq~ppppppptgetTypeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft# return (this.type); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚Gsq~ uq~pppppppttypeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~ésq~ uq~ppppppptsetTypeq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.type = type; sq~ uq~ppppq~fq~fxqþdsq~isq~ uq~ppppq~ésq~ uq~ppppptç// --------------------------------------------------------- Public Methods /** *

            Return an object representing the initial value of this property. * This is calculated according to the following algorithm:

            *
              *
            • If the value you have specified for the type * property represents an array (i.e. it ends with "[]"): *
                *
              • If you have specified a value for the initial * property, ConvertUtils.convert() will be * called to convert it into an instance of the specified * array type.
              • *
              • If you have not specified a value for the initial * property, an array of the length specified by the * size property will be created. Each element * of the array will be instantiated via the zero-args constructor * on the specified class (if any). Otherwise, null * will be returned.
              • *
            • *
            • If the value you have specified for the type * property does not represent an array: *
                *
              • If you have specified a value for the initial * property, ConvertUtils.convert() * will be called to convert it into an object instance.
              • *
              • If you have not specified a value for the initial * attribute, Struts will instantiate an instance via the * zero-args constructor on the specified class (if any). * Otherwise, null will be returned.
              • *
            • *
            */ ptinitialq~cxsq~ uq~pppppq~fq~gq~fq~«pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft± Object initialValue = null; try { Class clazz = getTypeClass(); if (clazz.isArray()) { if (initial != null) { initialValue = ConvertUtils.convert(initial, clazz); } else { initialValue = Array.newInstance(clazz.getComponentType(), size); for (int i = 0; i < size; i++) { try { Array.set(initialValue, i, clazz.getComponentType().newInstance()); } catch (Throwable t) { ; // Probably does not have a zero-args constructor } } } } else { if (initial != null) { initialValue = ConvertUtils.convert(initial, clazz); } else { initialValue = clazz.newInstance(); } } } catch (Throwable t) { initialValue = null; } return (initialValue); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ésq~ uq~ppppptA/** * Freeze the configuration of this component. */ ptfreezeq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft& configured = true; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ésq~ uq~ppppptD/** * Return a String representation of this object. */ pttoStringq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftD StringBuffer sb = new StringBuffer("FormPropertyConfig["); sb.append("name="); sb.append(this.name); sb.append(",type="); sb.append(this.type); sb.append(",initial="); sb.append(this.initial); sb.append("]"); return (sb.toString()); sq~ uq~ppppq~fq~fxpppppq~ sq~ uq~pppppppqÿSq~=xsq~ uq~qq:qåƒppq~$sq~ uq~sq~)sq~ uq~ppppq~ åsq~ uq~ppppq~csq~ uq~ppppsq~ uq~ppppsq~BŒºpxq~épppsq~ uq~ppppq~$q~$q~ƃsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~q~ásq~isq~ uq~sq~bsq~ uq~ppppq‚¦sq~ uq~ppppppptnameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~#sq~ uq~ppppptÜ/** * Return the form property configuration for the specified property * name, if any; otherwise return null. * * @param name Form property name to find a configuration for */ ptfindFormPropertyConfigq~=xsq~ uq~pppppq~$q~yq~$q~épq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tK return ((FormPropertyConfig) formProperties.get(name)); sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~#sq~ uq~pppppt/** * Return the form property configurations for this application. If there * are none, a zero-length array is returned. */ ptfindFormPropertyConfigsq~=xsq~ uq~pppppq~$q~yq~$q~ét[]q~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tÁ FormPropertyConfig results[] = new FormPropertyConfig[formProperties.size()]; return ((FormPropertyConfig[]) formProperties.values().toArray(results)); sq~ uq~ppppq~$q~$xsq~bsq~ uq~ppppsq~isq~ uq~q‚Ïpppq~#sq~ uq~pppppt˜/** * Remove the specified form property configuration instance. * * @param config FormPropertyConfig instance to be removed */ ptremoveFormPropertyConfigq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t« if (configured) { throw new IllegalStateException("Configuration is frozen"); } formProperties.remove(config.getName()); sq~ uq~ppppq~$q~$xsq~ uq~ppppppptconfigq~=xsq~ uq~pppppq~$q~yq~$q~épq~$xsq~bsq~ uq~ppppsq~isq~ uq~q‚çpppq~#sq~ uq~pppppt// --------------------------------------------------------- Public Methods /** * Add a new FormPropertyConfig instance to the set associated * with this application. * * @param config The new configuration instance to be added */ ptaddFormPropertyConfigq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t° if (configured) { throw new IllegalStateException("Configuration is frozen"); } formProperties.put(config.getName(), config); sq~ uq~ppppq~¥q~¥xsq~ uq~ppppppptconfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~épq~§xsq~isq~ uq~sq~bsq~ uq~ppppq‚ÿsq~ uq~ppppppptnameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~#sq~ uq~ppppptÜ/** * Return the form property configuration for the specified property * name, if any; otherwise return null. * * @param name Form property name to find a configuration for */ ptfindFormPropertyConfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~épq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tK return ((FormPropertyConfig) formProperties.get(name)); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~#sq~ uq~pppppt/** * Return the form property configurations for this application. If there * are none, a zero-length array is returned. */ ptfindFormPropertyConfigsq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ét[]q~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tÁ FormPropertyConfig results[] = new FormPropertyConfig[formProperties.size()]; return ((FormPropertyConfig[]) formProperties.values().toArray(results)); sq~ uq~ppppq~¥q~¥xsq~bsq~ uq~ppppsq~isq~ uq~q‚(pppq~#sq~ uq~pppppt˜/** * Remove the specified form property configuration instance. * * @param config FormPropertyConfig instance to be removed */ ptremoveFormPropertyConfigq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t« if (configured) { throw new IllegalStateException("Configuration is frozen"); } formProperties.remove(config.getName()); sq~ uq~ppppq~¥q~¥xsq~ uq~ppppppptconfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~épq~§xsq~bsq~ uq~ppppsq~isq~ uq~q‚@pppq~#sq~ uq~ppppptz// --------------------------------------------------------- Public Methods /** * Add a new FormPropertyConfig instance to the set associated * with this module. * * @param config The new configuration instance to be added * * @exception IllegalArgumentException if this property name has already * been defined */ ptaddFormPropertyConfigq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t¾ if (configured) { throw new IllegalStateException("Configuration is frozen"); } if (formProperties.containsKey(config.getName())) { throw new IllegalArgumentException("Property " + config.getName() + " already defined"); } formProperties.put(config.getName(), config); sq~ uq~ppppq~–q~–xsq~ uq~ppppppptconfigq~rxsq~ uq~pppppq~–q~—q~–q~épq~˜xsq~isq~ uq~sq~bsq~ uq~ppppq‚Xsq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~#sq~ uq~ppppptÜ/** * Return the form property configuration for the specified property * name, if any; otherwise return null. * * @param name Form property name to find a configuration for */ ptfindFormPropertyConfigq~rxsq~ uq~pppppq~–q~—q~–q~épq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tK return ((FormPropertyConfig) formProperties.get(name)); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~#sq~ uq~pppppt‹/** * Return the form property configurations for this module. If there * are none, a zero-length array is returned. */ ptfindFormPropertyConfigsq~rxsq~ uq~pppppq~–q~—q~–q~ét[]q~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tÁ FormPropertyConfig results[] = new FormPropertyConfig[formProperties.size()]; return ((FormPropertyConfig[]) formProperties.values().toArray(results)); sq~ uq~ppppq~–q~–xsq~bsq~ uq~ppppsq~isq~ uq~q‚pppq~#sq~ uq~pppppt˜/** * Remove the specified form property configuration instance. * * @param config FormPropertyConfig instance to be removed */ ptremoveFormPropertyConfigq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t« if (configured) { throw new IllegalStateException("Configuration is frozen"); } formProperties.remove(config.getName()); sq~ uq~ppppq~–q~–xsq~ uq~ppppppptconfigq~rxsq~ uq~pppppq~–q~—q~–q~épq~˜xsq~bsq~ uq~ppppsq~isq~ uq~q‚™pppq~#sq~ uq~ppppptz// --------------------------------------------------------- Public Methods /** * Add a new FormPropertyConfig instance to the set associated * with this module. * * @param config The new configuration instance to be added * * @exception IllegalArgumentException if this property name has already * been defined */ ptaddFormPropertyConfigq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t¾ if (configured) { throw new IllegalStateException("Configuration is frozen"); } if (formProperties.containsKey(config.getName())) { throw new IllegalArgumentException("Property " + config.getName() + " already defined"); } formProperties.put(config.getName(), config); sq~ uq~ppppq~~q~~xsq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~épq~€xsq~isq~ uq~sq~bsq~ uq~ppppq‚±sq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~#sq~ uq~ppppptÜ/** * Return the form property configuration for the specified property * name, if any; otherwise return null. * * @param name Form property name to find a configuration for */ ptfindFormPropertyConfigq~{xsq~ uq~pppppq~~q~q~~q~épq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tK return ((FormPropertyConfig) formProperties.get(name)); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~#sq~ uq~pppppt‹/** * Return the form property configurations for this module. If there * are none, a zero-length array is returned. */ ptfindFormPropertyConfigsq~{xsq~ uq~pppppq~~q~q~~q~ét[]q~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tÁ FormPropertyConfig results[] = new FormPropertyConfig[formProperties.size()]; return ((FormPropertyConfig[]) formProperties.values().toArray(results)); sq~ uq~ppppq~~q~~xsq~bsq~ uq~ppppsq~isq~ uq~q‚Úpppq~#sq~ uq~pppppt˜/** * Remove the specified form property configuration instance. * * @param config FormPropertyConfig instance to be removed */ ptremoveFormPropertyConfigq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t« if (configured) { throw new IllegalStateException("Configuration is frozen"); } formProperties.remove(config.getName()); sq~ uq~ppppq~~q~~xsq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~épq~€xsq~bsq~ uq~ppppsq~isq~ uq~q‚òpppq~#sq~ uq~ppppptz// --------------------------------------------------------- Public Methods /** * Add a new FormPropertyConfig instance to the set associated * with this module. * * @param config The new configuration instance to be added * * @exception IllegalArgumentException if this property name has already * been defined */ ptaddFormPropertyConfigq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft¾ if (configured) { throw new IllegalStateException("Configuration is frozen"); } if (formProperties.containsKey(config.getName())) { throw new IllegalArgumentException("Property " + config.getName() + " already defined"); } formProperties.put(config.getName(), config); sq~ uq~ppppq~fq~fxsq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~épq~hxsq~isq~ uq~sq~bsq~ uq~ppppq‚ sq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~#sq~ uq~ppppptÜ/** * Return the form property configuration for the specified property * name, if any; otherwise return null. * * @param name Form property name to find a configuration for */ ptfindFormPropertyConfigq~cxsq~ uq~pppppq~fq~gq~fq~épq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftK return ((FormPropertyConfig) formProperties.get(name)); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~#sq~ uq~pppppt‹/** * Return the form property configurations for this module. If there * are none, a zero-length array is returned. */ ptfindFormPropertyConfigsq~cxsq~ uq~pppppq~fq~gq~fq~ét[]q~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftÁ FormPropertyConfig results[] = new FormPropertyConfig[formProperties.size()]; return ((FormPropertyConfig[]) formProperties.values().toArray(results)); sq~ uq~ppppq~fq~fxsq~bsq~ uq~ppppsq~isq~ uq~q‚3pppq~#sq~ uq~pppppt˜/** * Remove the specified form property configuration instance. * * @param config FormPropertyConfig instance to be removed */ ptremoveFormPropertyConfigq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft« if (configured) { throw new IllegalStateException("Configuration is frozen"); } formProperties.remove(config.getName()); sq~ uq~ppppq~fq~fxsq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~épq~hxppppq~Äxq~$ppxpq~$xpppq~#sq~ uq~pppppt// --------------------------------------------------------- Public Methods /** * Add a new FormPropertyConfig instance to the set associated * with this application. * * @param config The new configuration instance to be added */ ptaddFormPropertyConfigq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t° if (configured) { throw new IllegalStateException("Configuration is frozen"); } formProperties.put(config.getName(), config); sq~ uq~ppppq~$q~$xq‚¦q‚¾sq~isq~ uq~ppppq~#sq~ uq~ppppptA/** * Freeze the configuration of this component. */ ptfreezeq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tÒ configured = true; FormPropertyConfig[] fpconfigs = findFormPropertyConfigs(); for (int i = 0; i < fpconfigs.length; i++) { fpconfigs[i].freeze(); } sq~ uq~ppppq~$q~$xq‚Òsq~isq~ uq~ppppq~#sq~ uq~ppppptD/** * Return a String representation of this object. */ pttoStringq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tý StringBuffer sb = new StringBuffer("FormBeanConfig["); sb.append("name="); sb.append(this.name); sb.append(",type="); sb.append(this.type); sb.append("]"); return (sb.toString()); sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~#sq~ uq~pppppppt getDynamicq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t& return (this.dynamic); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚‡sq~ uq~ppppppptdynamicq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xpppq~#sq~ uq~pppppppt setDynamicq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t– if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.dynamic = dynamic; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~#sq~ uq~ppppppptgetNameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t# return (this.name); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚­sq~ uq~ppppppptnameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~#sq~ uq~ppppppptsetNameq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.name = name; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~#sq~ uq~ppppppptgetTypeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t# return (this.type); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚Ósq~ uq~pppppppttypeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~#sq~ uq~ppppppptsetTypeq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.type = type; if ("org.apache.struts.action.DynaActionForm".equals(type)) { this.dynamic = true; } sq~ uq~ppppq~¥q~¥xq‚êq‚ÿq‚sq~isq~ uq~ppppq~#sq~ uq~ppppptA/** * Freeze the configuration of this component. */ ptfreezeq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tÒ configured = true; FormPropertyConfig[] fpconfigs = findFormPropertyConfigs(); for (int i = 0; i < fpconfigs.length; i++) { fpconfigs[i].freeze(); } sq~ uq~ppppq~¥q~¥xq‚+sq~isq~ uq~ppppq~#sq~ uq~ppppptD/** * Return a String representation of this object. */ pttoStringq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tý StringBuffer sb = new StringBuffer("FormBeanConfig["); sb.append("name="); sb.append(this.name); sb.append(",type="); sb.append(this.type); sb.append("]"); return (sb.toString()); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~#sq~ uq~pppppppt getDynamicq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t& return (this.dynamic); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚sq~ uq~ppppppptdynamicq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xpppq~#sq~ uq~pppppt—/** * @deprecated The value to be returned by getDynamic() * is now computed automatically in setType() */ pt setDynamicq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t— if (configured) { throw new IllegalStateException("Configuration is frozen"); } ; // No action required sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~#sq~ uq~ppppppptgetNameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t# return (this.name); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚@sq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~#sq~ uq~ppppppptsetNameq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.name = name; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~#sq~ uq~ppppppptgetTypeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t# return (this.type); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚fsq~ uq~pppppppttypeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~#sq~ uq~ppppppptsetTypeq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.type = type; Class dynaBeanClass = DynaActionForm.class; Class formBeanClass = formBeanClass(); if (formBeanClass != null) { if (dynaBeanClass.isAssignableFrom(formBeanClass)) { this.dynamic = true; } else { this.dynamic = false; } } else { this.dynamic = false; } sq~ uq~ppppq~–q~–xq‚Cq‚Xq‚psq~isq~ uq~ppppq~#sq~ uq~ppppptA/** * Freeze the configuration of this component. */ ptfreezeq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tÒ configured = true; FormPropertyConfig[] fpconfigs = findFormPropertyConfigs(); for (int i = 0; i < fpconfigs.length; i++) { fpconfigs[i].freeze(); } sq~ uq~ppppq~–q~–xq‚„sq~isq~ uq~ppppq~#sq~ uq~ppppptD/** * Return a String representation of this object. */ pttoStringq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tý StringBuffer sb = new StringBuffer("FormBeanConfig["); sb.append("name="); sb.append(this.name); sb.append(",type="); sb.append(this.type); sb.append("]"); return (sb.toString()); sq~ uq~ppppq~–q~–xqýúsq~isq~ uq~ppppq~#sq~ uq~pppppppt getDynamicq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t& return (this.dynamic); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚¬sq~ uq~ppppppptdynamicq~{xsq~ uq~pppppq~~q~q~~q~pq~€xpppq~#sq~ uq~pppppt—/** * @deprecated The value to be returned by getDynamic() * is now computed automatically in setType() */ pt setDynamicq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t— if (configured) { throw new IllegalStateException("Configuration is frozen"); } ; // No action required sq~ uq~ppppq~~q~~xqîZqîhqî{sq~isq~ uq~ppppq~#sq~ uq~ppppppptgetNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t# return (this.name); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚Ósq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~#sq~ uq~ppppppptsetNameq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.name = name; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~#sq~ uq~ppppppptgetTypeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t# return (this.type); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚ùsq~ uq~pppppppttypeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~#sq~ uq~ppppppptsetTypeq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.type = type; Class dynaBeanClass = DynaActionForm.class; Class formBeanClass = formBeanClass(); if (formBeanClass != null) { if (dynaBeanClass.isAssignableFrom(formBeanClass)) { this.dynamic = true; } else { this.dynamic = false; } } else { this.dynamic = false; } sq~ uq~ppppq~~q~~xq‚œq‚±q‚Ésq~isq~ uq~ppppq~#sq~ uq~ppppptA/** * Freeze the configuration of this component. */ ptfreezeq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tÒ configured = true; FormPropertyConfig[] fpconfigs = findFormPropertyConfigs(); for (int i = 0; i < fpconfigs.length; i++) { fpconfigs[i].freeze(); } sq~ uq~ppppq~~q~~xq‚Ýsq~isq~ uq~ppppq~#sq~ uq~ppppptD/** * Return a String representation of this object. */ pttoStringq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tý StringBuffer sb = new StringBuffer("FormBeanConfig["); sb.append("name="); sb.append(this.name); sb.append(",type="); sb.append(this.type); sb.append("]"); return (sb.toString()); sq~ uq~ppppq~~q~~xqþsq~isq~ uq~ppppq~#sq~ uq~pppppppt getDynamicq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft& return (this.dynamic); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚?sq~ uq~ppppppptdynamicq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxpppq~#sq~ uq~pppppt—/** * @deprecated The value to be returned by getDynamic() * is now computed automatically in setType() */ pt setDynamicq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft— if (configured) { throw new IllegalStateException("Configuration is frozen"); } ; // No action required sq~ uq~ppppq~fq~fxqð.qðAsq~isq~ uq~ppppq~#sq~ uq~ppppppptgetNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft# return (this.name); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚fsq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~#sq~ uq~ppppppptsetNameq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.name = name; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~#sq~ uq~ppppppptgetTypeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft# return (this.type); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚Œsq~ uq~pppppppttypeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~#sq~ uq~ppppppptsetTypeq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.type = type; Class dynaBeanClass = DynaActionForm.class; Class formBeanClass = formBeanClass(); if (formBeanClass != null) { if (dynaBeanClass.isAssignableFrom(formBeanClass)) { this.dynamic = true; } else { this.dynamic = false; } } else { this.dynamic = false; } sq~ uq~ppppq~fq~fxq‚õq‚ q‚"sq~isq~ uq~ppppq~#sq~ uq~ppppptA/** * Freeze the configuration of this component. */ ptfreezeq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftÒ configured = true; FormPropertyConfig[] fpconfigs = findFormPropertyConfigs(); for (int i = 0; i < fpconfigs.length; i++) { fpconfigs[i].freeze(); } sq~ uq~ppppq~fq~fxq‚6sq~isq~ uq~ppppq~#sq~ uq~ppppptD/** * Return a String representation of this object. */ pttoStringq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftý StringBuffer sb = new StringBuffer("FormBeanConfig["); sb.append("name="); sb.append(this.name); sb.append(",type="); sb.append(this.type); sb.append("]"); return (sb.toString()); sq~ uq~ppppq~fq~fxqþTpq~ sq~ uq~ppppppptFormBeanConfigq~=xsq~ uq~ qq4qå}sq~Csq~ uq~ppppq~bsq~ uq~ppppsq~#q~#xq.Åq€ë‡qpýppppppq~$sq~ uq~sq~)sq~ uq~ppppq~ åsq~ uq~ppppq~csq~ uq~ppppsq~ uq~ppppsq~Bvpxq~#q.²ppsq~ uq~ppppq~$q~$q)sq~ uq~q.ppppq~$sq~ uq~ppppsq~ $uq~,q~)’qr–qr¯sq~bsq~ uq~ppppsq~isq~ uq~q‚âpppq~bsq~ uq~pppppt./** * Add a new FormBeanConfig instance to the set associated * with this application. * * @param config The new configuration instance to be added * * @exception IllegalStateException if this application configuration * has been frozen */ ptaddFormBeanConfigq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t« if (configured) { throw new IllegalStateException("Configuration is frozen"); } formBeans.put(config.getName(), config); sq~ uq~ppppq~$q~$xsq~ uq~ppppppptconfigq~=xsq~ uq~pppppq~$q~yq~$q~#pq~$xsq~isq~ uq~sq~bsq~ uq~ppppq‚úsq~ uq~ppppppptnameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~bsq~ uq~ppppptÍ/** * Return the form bean configuration for the specified key, if any; * otherwise return null. * * @param name Name of the form bean configuration to return */ ptfindFormBeanConfigq~=xsq~ uq~pppppq~$q~yq~$q~#pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tB return ((FormBeanConfig) formBeans.get(name)); sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~bsq~ uq~ppppptŒ/** * Return the form bean configurations for this application. If there * are none, a zero-length array is returned. */ ptfindFormBeanConfigsq~=xsq~ uq~pppppq~$q~yq~$q~#t[]q~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tž FormBeanConfig results[] = new FormBeanConfig[formBeans.size()]; return ((FormBeanConfig[]) formBeans.values().toArray(results)); sq~ uq~ppppq~$q~$xsq~bsq~ uq~ppppsq~isq~ uq~q‚#pppq~bsq~ uq~ppppptü/** * Remove the specified form bean configuration instance. * * @param config FormBeanConfig instance to be removed * * @exception IllegalStateException if this application configuration * has been frozen */ ptremoveFormBeanConfigq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t¦ if (configured) { throw new IllegalStateException("Configuration is frozen"); } formBeans.remove(config.getName()); sq~ uq~ppppq~$q~$xsq~ uq~ppppppptconfigq~=xsq~ uq~pppppq~$q~yq~$q~#pq~$xqrÇqsqs(sq~bsq~ uq~ppppsq~isq~ uq~q‚;pppq~bsq~ uq~pppppt./** * Add a new FormBeanConfig instance to the set associated * with this application. * * @param config The new configuration instance to be added * * @exception IllegalStateException if this application configuration * has been frozen */ ptaddFormBeanConfigq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t« if (configured) { throw new IllegalStateException("Configuration is frozen"); } formBeans.put(config.getName(), config); sq~ uq~ppppq~¥q~¥xsq~ uq~ppppppptconfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~#pq~§xsq~isq~ uq~sq~bsq~ uq~ppppq‚Ssq~ uq~ppppppptnameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~bsq~ uq~ppppptÍ/** * Return the form bean configuration for the specified key, if any; * otherwise return null. * * @param name Name of the form bean configuration to return */ ptfindFormBeanConfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~#pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tB return ((FormBeanConfig) formBeans.get(name)); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~bsq~ uq~ppppptŒ/** * Return the form bean configurations for this application. If there * are none, a zero-length array is returned. */ ptfindFormBeanConfigsq~¢xsq~ uq~pppppq~¥q~¦q~¥q~#t[]q~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tž FormBeanConfig results[] = new FormBeanConfig[formBeans.size()]; return ((FormBeanConfig[]) formBeans.values().toArray(results)); sq~ uq~ppppq~¥q~¥xsq~bsq~ uq~ppppsq~isq~ uq~q‚|pppq~bsq~ uq~ppppptü/** * Remove the specified form bean configuration instance. * * @param config FormBeanConfig instance to be removed * * @exception IllegalStateException if this application configuration * has been frozen */ ptremoveFormBeanConfigq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t¦ if (configured) { throw new IllegalStateException("Configuration is frozen"); } formBeans.remove(config.getName()); sq~ uq~ppppq~¥q~¥xsq~ uq~ppppppptconfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~#pq~§xqs@qsTqs¥qsçsq~bsq~ uq~ppppsq~isq~ uq~q‚”pppq~bsq~ uq~pppppt$/** * Add a new FormBeanConfig instance to the set associated * with this module. * * @param config The new configuration instance to be added * * @exception IllegalStateException if this module configuration * has been frozen */ ptaddFormBeanConfigq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t« if (configured) { throw new IllegalStateException("Configuration is frozen"); } formBeans.put(config.getName(), config); sq~ uq~ppppq~–q~–xsq~ uq~ppppppptconfigq~rxsq~ uq~pppppq~–q~—q~–q~#pq~˜xsq~isq~ uq~sq~bsq~ uq~ppppq‚¬sq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~bsq~ uq~ppppptÍ/** * Return the form bean configuration for the specified key, if any; * otherwise return null. * * @param name Name of the form bean configuration to return */ ptfindFormBeanConfigq~rxsq~ uq~pppppq~–q~—q~–q~#pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tB return ((FormBeanConfig) formBeans.get(name)); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~bsq~ uq~pppppt‡/** * Return the form bean configurations for this module. If there * are none, a zero-length array is returned. */ ptfindFormBeanConfigsq~rxsq~ uq~pppppq~–q~—q~–q~#t[]q~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tž FormBeanConfig results[] = new FormBeanConfig[formBeans.size()]; return ((FormBeanConfig[]) formBeans.values().toArray(results)); sq~ uq~ppppq~–q~–xsq~bsq~ uq~ppppsq~isq~ uq~q‚Õpppq~bsq~ uq~pppppt÷/** * Remove the specified form bean configuration instance. * * @param config FormBeanConfig instance to be removed * * @exception IllegalStateException if this module configuration * has been frozen */ ptremoveFormBeanConfigq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t¦ if (configured) { throw new IllegalStateException("Configuration is frozen"); } formBeans.remove(config.getName()); sq~ uq~ppppq~–q~–xsq~ uq~ppppppptconfigq~rxsq~ uq~pppppq~–q~—q~–q~#pq~˜xqsÿqtGqtpqêrqêÔqêëqë;qtˆqtÐqtùqìqìcqìzqìÊppppppppq~Äxq~$ppxq~» q~+q~bsq~zsq~ uq~ sq~isq~ uq~sq~bsq~ uq~ppppq‚ðsq~ uq~ppppppptdigesterq~=xsq~ uq~pppppq~$q~yq~$q~ Špq~$xpppq‚ísq~ uq~ppppptl// --------------------------------------------------------- Public Methods /** *

            Add the set of Rule instances defined in this RuleSet to the * specified Digester instance, associating them with * our namespace URI (if any). This method should only be called * by a Digester instance. These rules assume that an instance of * org.apache.struts.config.ApplicationConfig is pushed * onto the evaluation stack before parsing begins.

            * * @param digester Digester instance to which the new Rule instances * should be added. */ ptaddRuleInstancesq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tJ digester.addObjectCreate ("struts-config/data-sources/data-source", "org.apache.struts.config.DataSourceConfig", "className"); digester.addSetProperties ("struts-config/data-sources/data-source"); digester.addSetNext ("struts-config/data-sources/data-source", "addDataSourceConfig", "org.apache.struts.config.DataSourceConfig"); digester.addRule ("struts-config/data-sources/data-source/set-property", new AddDataSourcePropertyRule(digester)); digester.addRule ("struts-config/action-mappings", new SetActionMappingClassRule(digester)); digester.addFactoryCreate ("struts-config/action-mappings/action", new ActionMappingFactory()); digester.addSetProperties ("struts-config/action-mappings/action"); digester.addSetNext ("struts-config/action-mappings/action", "addActionConfig", "org.apache.struts.config.ActionConfig"); digester.addSetProperty ("struts-config/action-mappings/action/set-property", "property", "value"); digester.addObjectCreate ("struts-config/action-mappings/action/exception", "org.apache.struts.config.ExceptionConfig", "className"); digester.addSetProperties ("struts-config/action-mappings/action/exception"); digester.addSetNext ("struts-config/action-mappings/action/exception", "addExceptionConfig", "org.apache.struts.config.ExceptionConfig"); digester.addSetProperty ("struts-config/action-mappings/action/exception/set-property", "property", "value"); digester.addObjectCreate ("struts-config/action-mappings/action/forward", // "org.apache.struts.config.ForwardConfig", "org.apache.struts.action.ActionForward", "className"); digester.addSetProperties ("struts-config/action-mappings/action/forward"); digester.addSetNext ("struts-config/action-mappings/action/forward", "addForwardConfig", "org.apache.struts.config.ForwardConfig"); digester.addSetProperty ("struts-config/action-mappings/action/forward/set-property", "property", "value"); digester.addObjectCreate ("struts-config/controller", "org.apache.struts.config.ControllerConfig", "className"); digester.addSetProperties ("struts-config/controller"); digester.addSetNext ("struts-config/controller", "setControllerConfig", "org.apache.struts.config.ControllerConfig"); digester.addSetProperty ("struts-config/controller/set-property", "property", "value"); digester.addObjectCreate ("struts-config/form-beans/form-bean", // "org.apache.struts.config.FormBeanConfig", "org.apache.struts.action.ActionFormBean", "className"); digester.addSetProperties ("struts-config/form-beans/form-bean"); digester.addSetNext ("struts-config/form-beans/form-bean", "addFormBeanConfig", "org.apache.struts.config.FormBeanConfig"); digester.addObjectCreate ("struts-config/form-beans/form-bean/form-property", "org.apache.struts.config.FormPropertyConfig", "className"); digester.addSetProperties ("struts-config/form-beans/form-bean/form-property"); digester.addSetNext ("struts-config/form-beans/form-bean/form-property", "addFormPropertyConfig", "org.apache.struts.config.FormPropertyConfig"); digester.addSetProperty ("struts-config/form-beans/form-bean/form-property/set-property", "property", "value"); digester.addSetProperty ("struts-config/form-beans/form-bean/set-property", "property", "value"); digester.addObjectCreate ("struts-config/global-exceptions/exception", "org.apache.struts.config.ExceptionConfig", "className"); digester.addSetProperties ("struts-config/global-exceptions/exception"); digester.addSetNext ("struts-config/global-exceptions/exception", "addExceptionConfig", "org.apache.struts.config.ExceptionConfig"); digester.addSetProperty ("struts-config/global-exceptions/exception/set-property", "property", "value"); digester.addObjectCreate ("struts-config/global-forwards/forward", // "org.apache.struts.config.ForwardConfig", "org.apache.struts.action.ActionForward", "className"); digester.addSetProperties ("struts-config/global-forwards/forward"); digester.addSetNext ("struts-config/global-forwards/forward", "addForwardConfig", "org.apache.struts.config.ForwardConfig"); digester.addSetProperty ("struts-config/global-forwards/forward/set-property", "property", "value"); digester.addObjectCreate ("struts-config/message-resources", "org.apache.struts.config.MessageResourcesConfig", "className"); digester.addSetProperties ("struts-config/message-resources"); digester.addSetNext ("struts-config/message-resources", "addMessageResourcesConfig", "org.apache.struts.config.MessageResourcesConfig"); digester.addSetProperty ("struts-config/message-resources/set-property", "property", "value"); digester.addObjectCreate ("struts-config/plug-in", "org.apache.struts.config.PlugInConfig"); digester.addSetProperties ("struts-config/plug-in"); digester.addSetNext ("struts-config/plug-in", "addPlugInConfig", "org.apache.struts.config.PlugInConfig"); digester.addRule ("struts-config/plug-in/set-property", new PlugInSetPropertyRule(digester)); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq‚sq~ uq~ppppppptdigesterq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ Špq~§xpppq‚ísq~ uq~ppppptl// --------------------------------------------------------- Public Methods /** *

            Add the set of Rule instances defined in this RuleSet to the * specified Digester instance, associating them with * our namespace URI (if any). This method should only be called * by a Digester instance. These rules assume that an instance of * org.apache.struts.config.ApplicationConfig is pushed * onto the evaluation stack before parsing begins.

            * * @param digester Digester instance to which the new Rule instances * should be added. */ ptaddRuleInstancesq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tJ digester.addObjectCreate ("struts-config/data-sources/data-source", "org.apache.struts.config.DataSourceConfig", "className"); digester.addSetProperties ("struts-config/data-sources/data-source"); digester.addSetNext ("struts-config/data-sources/data-source", "addDataSourceConfig", "org.apache.struts.config.DataSourceConfig"); digester.addRule ("struts-config/data-sources/data-source/set-property", new AddDataSourcePropertyRule(digester)); digester.addRule ("struts-config/action-mappings", new SetActionMappingClassRule(digester)); digester.addFactoryCreate ("struts-config/action-mappings/action", new ActionMappingFactory()); digester.addSetProperties ("struts-config/action-mappings/action"); digester.addSetNext ("struts-config/action-mappings/action", "addActionConfig", "org.apache.struts.config.ActionConfig"); digester.addSetProperty ("struts-config/action-mappings/action/set-property", "property", "value"); digester.addObjectCreate ("struts-config/action-mappings/action/exception", "org.apache.struts.config.ExceptionConfig", "className"); digester.addSetProperties ("struts-config/action-mappings/action/exception"); digester.addSetNext ("struts-config/action-mappings/action/exception", "addExceptionConfig", "org.apache.struts.config.ExceptionConfig"); digester.addSetProperty ("struts-config/action-mappings/action/exception/set-property", "property", "value"); digester.addObjectCreate ("struts-config/action-mappings/action/forward", // "org.apache.struts.config.ForwardConfig", "org.apache.struts.action.ActionForward", "className"); digester.addSetProperties ("struts-config/action-mappings/action/forward"); digester.addSetNext ("struts-config/action-mappings/action/forward", "addForwardConfig", "org.apache.struts.config.ForwardConfig"); digester.addSetProperty ("struts-config/action-mappings/action/forward/set-property", "property", "value"); digester.addObjectCreate ("struts-config/controller", "org.apache.struts.config.ControllerConfig", "className"); digester.addSetProperties ("struts-config/controller"); digester.addSetNext ("struts-config/controller", "setControllerConfig", "org.apache.struts.config.ControllerConfig"); digester.addSetProperty ("struts-config/controller/set-property", "property", "value"); digester.addObjectCreate ("struts-config/form-beans/form-bean", // "org.apache.struts.config.FormBeanConfig", "org.apache.struts.action.ActionFormBean", "className"); digester.addSetProperties ("struts-config/form-beans/form-bean"); digester.addSetNext ("struts-config/form-beans/form-bean", "addFormBeanConfig", "org.apache.struts.config.FormBeanConfig"); digester.addObjectCreate ("struts-config/form-beans/form-bean/form-property", "org.apache.struts.config.FormPropertyConfig", "className"); digester.addSetProperties ("struts-config/form-beans/form-bean/form-property"); digester.addSetNext ("struts-config/form-beans/form-bean/form-property", "addFormPropertyConfig", "org.apache.struts.config.FormPropertyConfig"); digester.addSetProperty ("struts-config/form-beans/form-bean/form-property/set-property", "property", "value"); digester.addSetProperty ("struts-config/form-beans/form-bean/set-property", "property", "value"); digester.addObjectCreate ("struts-config/global-exceptions/exception", "org.apache.struts.config.ExceptionConfig", "className"); digester.addSetProperties ("struts-config/global-exceptions/exception"); digester.addSetNext ("struts-config/global-exceptions/exception", "addExceptionConfig", "org.apache.struts.config.ExceptionConfig"); digester.addSetProperty ("struts-config/global-exceptions/exception/set-property", "property", "value"); digester.addObjectCreate ("struts-config/global-forwards/forward", // "org.apache.struts.config.ForwardConfig", "org.apache.struts.action.ActionForward", "className"); digester.addSetProperties ("struts-config/global-forwards/forward"); digester.addSetNext ("struts-config/global-forwards/forward", "addForwardConfig", "org.apache.struts.config.ForwardConfig"); digester.addSetProperty ("struts-config/global-forwards/forward/set-property", "property", "value"); digester.addObjectCreate ("struts-config/message-resources", "org.apache.struts.config.MessageResourcesConfig", "className"); digester.addSetProperties ("struts-config/message-resources"); digester.addSetNext ("struts-config/message-resources", "addMessageResourcesConfig", "org.apache.struts.config.MessageResourcesConfig"); digester.addSetProperty ("struts-config/message-resources/set-property", "property", "value"); digester.addObjectCreate ("struts-config/plug-in", "org.apache.struts.config.PlugInConfig"); digester.addSetProperties ("struts-config/plug-in"); digester.addSetNext ("struts-config/plug-in", "addPlugInConfig", "org.apache.struts.config.PlugInConfig"); digester.addRule ("struts-config/plug-in/set-property", new PlugInSetPropertyRule(digester)); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚ sq~ uq~ppppppptdigesterq~rxsq~ uq~pppppq~–q~—q~–q~ Špq~˜xpppq‚ísq~ uq~ppppptl// --------------------------------------------------------- Public Methods /** *

            Add the set of Rule instances defined in this RuleSet to the * specified Digester instance, associating them with * our namespace URI (if any). This method should only be called * by a Digester instance. These rules assume that an instance of * org.apache.struts.config.ApplicationConfig is pushed * onto the evaluation stack before parsing begins.

            * * @param digester Digester instance to which the new Rule instances * should be added. */ ptaddRuleInstancesq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tJ digester.addObjectCreate ("struts-config/data-sources/data-source", "org.apache.struts.config.DataSourceConfig", "className"); digester.addSetProperties ("struts-config/data-sources/data-source"); digester.addSetNext ("struts-config/data-sources/data-source", "addDataSourceConfig", "org.apache.struts.config.DataSourceConfig"); digester.addRule ("struts-config/data-sources/data-source/set-property", new AddDataSourcePropertyRule(digester)); digester.addRule ("struts-config/action-mappings", new SetActionMappingClassRule(digester)); digester.addFactoryCreate ("struts-config/action-mappings/action", new ActionMappingFactory()); digester.addSetProperties ("struts-config/action-mappings/action"); digester.addSetNext ("struts-config/action-mappings/action", "addActionConfig", "org.apache.struts.config.ActionConfig"); digester.addSetProperty ("struts-config/action-mappings/action/set-property", "property", "value"); digester.addObjectCreate ("struts-config/action-mappings/action/exception", "org.apache.struts.config.ExceptionConfig", "className"); digester.addSetProperties ("struts-config/action-mappings/action/exception"); digester.addSetNext ("struts-config/action-mappings/action/exception", "addExceptionConfig", "org.apache.struts.config.ExceptionConfig"); digester.addSetProperty ("struts-config/action-mappings/action/exception/set-property", "property", "value"); digester.addObjectCreate ("struts-config/action-mappings/action/forward", // "org.apache.struts.config.ForwardConfig", "org.apache.struts.action.ActionForward", "className"); digester.addSetProperties ("struts-config/action-mappings/action/forward"); digester.addSetNext ("struts-config/action-mappings/action/forward", "addForwardConfig", "org.apache.struts.config.ForwardConfig"); digester.addSetProperty ("struts-config/action-mappings/action/forward/set-property", "property", "value"); digester.addObjectCreate ("struts-config/controller", "org.apache.struts.config.ControllerConfig", "className"); digester.addSetProperties ("struts-config/controller"); digester.addSetNext ("struts-config/controller", "setControllerConfig", "org.apache.struts.config.ControllerConfig"); digester.addSetProperty ("struts-config/controller/set-property", "property", "value"); digester.addObjectCreate ("struts-config/form-beans/form-bean", // "org.apache.struts.config.FormBeanConfig", "org.apache.struts.action.ActionFormBean", "className"); digester.addSetProperties ("struts-config/form-beans/form-bean"); digester.addSetNext ("struts-config/form-beans/form-bean", "addFormBeanConfig", "org.apache.struts.config.FormBeanConfig"); digester.addObjectCreate ("struts-config/form-beans/form-bean/form-property", "org.apache.struts.config.FormPropertyConfig", "className"); digester.addSetProperties ("struts-config/form-beans/form-bean/form-property"); digester.addSetNext ("struts-config/form-beans/form-bean/form-property", "addFormPropertyConfig", "org.apache.struts.config.FormPropertyConfig"); digester.addSetProperty ("struts-config/form-beans/form-bean/form-property/set-property", "property", "value"); digester.addSetProperty ("struts-config/form-beans/form-bean/set-property", "property", "value"); digester.addObjectCreate ("struts-config/global-exceptions/exception", "org.apache.struts.config.ExceptionConfig", "className"); digester.addSetProperties ("struts-config/global-exceptions/exception"); digester.addSetNext ("struts-config/global-exceptions/exception", "addExceptionConfig", "org.apache.struts.config.ExceptionConfig"); digester.addSetProperty ("struts-config/global-exceptions/exception/set-property", "property", "value"); digester.addObjectCreate ("struts-config/global-forwards/forward", // "org.apache.struts.config.ForwardConfig", "org.apache.struts.action.ActionForward", "className"); digester.addSetProperties ("struts-config/global-forwards/forward"); digester.addSetNext ("struts-config/global-forwards/forward", "addForwardConfig", "org.apache.struts.config.ForwardConfig"); digester.addSetProperty ("struts-config/global-forwards/forward/set-property", "property", "value"); digester.addObjectCreate ("struts-config/message-resources", "org.apache.struts.config.MessageResourcesConfig", "className"); digester.addSetProperties ("struts-config/message-resources"); digester.addSetNext ("struts-config/message-resources", "addMessageResourcesConfig", "org.apache.struts.config.MessageResourcesConfig"); digester.addSetProperty ("struts-config/message-resources/set-property", "property", "value"); digester.addObjectCreate ("struts-config/plug-in", "org.apache.struts.config.PlugInConfig"); digester.addSetProperties ("struts-config/plug-in"); digester.addSetNext ("struts-config/plug-in", "addPlugInConfig", "org.apache.struts.config.PlugInConfig"); digester.addRule ("struts-config/plug-in/set-property", new PlugInSetPropertyRule(digester)); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚8sq~ uq~ppppppptdigesterq~{xsq~ uq~pppppq~~q~q~~q~ Špq~€xpppq‚ísq~ uq~ppppptg// --------------------------------------------------------- Public Methods /** *

            Add the set of Rule instances defined in this RuleSet to the * specified Digester instance, associating them with * our namespace URI (if any). This method should only be called * by a Digester instance. These rules assume that an instance of * org.apache.struts.config.ModuleConfig is pushed * onto the evaluation stack before parsing begins.

            * * @param digester Digester instance to which the new Rule instances * should be added. */ ptaddRuleInstancesq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t2 digester.addObjectCreate ("struts-config/data-sources/data-source", "org.apache.struts.config.DataSourceConfig", "className"); digester.addSetProperties ("struts-config/data-sources/data-source"); digester.addSetNext ("struts-config/data-sources/data-source", "addDataSourceConfig", "org.apache.struts.config.DataSourceConfig"); digester.addRule ("struts-config/data-sources/data-source/set-property", new AddDataSourcePropertyRule()); digester.addRule ("struts-config/action-mappings", new SetActionMappingClassRule()); digester.addFactoryCreate ("struts-config/action-mappings/action", new ActionMappingFactory()); digester.addSetProperties ("struts-config/action-mappings/action"); digester.addSetNext ("struts-config/action-mappings/action", "addActionConfig", "org.apache.struts.config.ActionConfig"); digester.addSetProperty ("struts-config/action-mappings/action/set-property", "property", "value"); digester.addObjectCreate ("struts-config/action-mappings/action/exception", "org.apache.struts.config.ExceptionConfig", "className"); digester.addSetProperties ("struts-config/action-mappings/action/exception"); digester.addSetNext ("struts-config/action-mappings/action/exception", "addExceptionConfig", "org.apache.struts.config.ExceptionConfig"); digester.addSetProperty ("struts-config/action-mappings/action/exception/set-property", "property", "value"); digester.addObjectCreate ("struts-config/action-mappings/action/forward", // "org.apache.struts.config.ForwardConfig", "org.apache.struts.action.ActionForward", "className"); digester.addSetProperties ("struts-config/action-mappings/action/forward"); digester.addSetNext ("struts-config/action-mappings/action/forward", "addForwardConfig", "org.apache.struts.config.ForwardConfig"); digester.addSetProperty ("struts-config/action-mappings/action/forward/set-property", "property", "value"); digester.addObjectCreate ("struts-config/controller", "org.apache.struts.config.ControllerConfig", "className"); digester.addSetProperties ("struts-config/controller"); digester.addSetNext ("struts-config/controller", "setControllerConfig", "org.apache.struts.config.ControllerConfig"); digester.addSetProperty ("struts-config/controller/set-property", "property", "value"); digester.addObjectCreate ("struts-config/form-beans/form-bean", // "org.apache.struts.config.FormBeanConfig", "org.apache.struts.action.ActionFormBean", "className"); digester.addSetProperties ("struts-config/form-beans/form-bean"); digester.addSetNext ("struts-config/form-beans/form-bean", "addFormBeanConfig", "org.apache.struts.config.FormBeanConfig"); digester.addObjectCreate ("struts-config/form-beans/form-bean/form-property", "org.apache.struts.config.FormPropertyConfig", "className"); digester.addSetProperties ("struts-config/form-beans/form-bean/form-property"); digester.addSetNext ("struts-config/form-beans/form-bean/form-property", "addFormPropertyConfig", "org.apache.struts.config.FormPropertyConfig"); digester.addSetProperty ("struts-config/form-beans/form-bean/form-property/set-property", "property", "value"); digester.addSetProperty ("struts-config/form-beans/form-bean/set-property", "property", "value"); digester.addObjectCreate ("struts-config/global-exceptions/exception", "org.apache.struts.config.ExceptionConfig", "className"); digester.addSetProperties ("struts-config/global-exceptions/exception"); digester.addSetNext ("struts-config/global-exceptions/exception", "addExceptionConfig", "org.apache.struts.config.ExceptionConfig"); digester.addSetProperty ("struts-config/global-exceptions/exception/set-property", "property", "value"); digester.addObjectCreate ("struts-config/global-forwards/forward", // "org.apache.struts.config.ForwardConfig", "org.apache.struts.action.ActionForward", "className"); digester.addSetProperties ("struts-config/global-forwards/forward"); digester.addSetNext ("struts-config/global-forwards/forward", "addForwardConfig", "org.apache.struts.config.ForwardConfig"); digester.addSetProperty ("struts-config/global-forwards/forward/set-property", "property", "value"); digester.addObjectCreate ("struts-config/message-resources", "org.apache.struts.config.MessageResourcesConfig", "className"); digester.addSetProperties ("struts-config/message-resources"); digester.addSetNext ("struts-config/message-resources", "addMessageResourcesConfig", "org.apache.struts.config.MessageResourcesConfig"); digester.addSetProperty ("struts-config/message-resources/set-property", "property", "value"); digester.addObjectCreate ("struts-config/plug-in", "org.apache.struts.config.PlugInConfig"); digester.addSetProperties ("struts-config/plug-in"); digester.addSetNext ("struts-config/plug-in", "addPlugInConfig", "org.apache.struts.config.PlugInConfig"); digester.addRule ("struts-config/plug-in/set-property", new PlugInSetPropertyRule()); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚Psq~ uq~ppppppptdigesterq~cxsq~ uq~pppppq~fq~gq~fq~ Špq~hxpppq‚ísq~ uq~ppppptg// --------------------------------------------------------- Public Methods /** *

            Add the set of Rule instances defined in this RuleSet to the * specified Digester instance, associating them with * our namespace URI (if any). This method should only be called * by a Digester instance. These rules assume that an instance of * org.apache.struts.config.ModuleConfig is pushed * onto the evaluation stack before parsing begins.

            * * @param digester Digester instance to which the new Rule instances * should be added. */ ptaddRuleInstancesq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft2 digester.addObjectCreate ("struts-config/data-sources/data-source", "org.apache.struts.config.DataSourceConfig", "className"); digester.addSetProperties ("struts-config/data-sources/data-source"); digester.addSetNext ("struts-config/data-sources/data-source", "addDataSourceConfig", "org.apache.struts.config.DataSourceConfig"); digester.addRule ("struts-config/data-sources/data-source/set-property", new AddDataSourcePropertyRule()); digester.addRule ("struts-config/action-mappings", new SetActionMappingClassRule()); digester.addFactoryCreate ("struts-config/action-mappings/action", new ActionMappingFactory()); digester.addSetProperties ("struts-config/action-mappings/action"); digester.addSetNext ("struts-config/action-mappings/action", "addActionConfig", "org.apache.struts.config.ActionConfig"); digester.addSetProperty ("struts-config/action-mappings/action/set-property", "property", "value"); digester.addObjectCreate ("struts-config/action-mappings/action/exception", "org.apache.struts.config.ExceptionConfig", "className"); digester.addSetProperties ("struts-config/action-mappings/action/exception"); digester.addSetNext ("struts-config/action-mappings/action/exception", "addExceptionConfig", "org.apache.struts.config.ExceptionConfig"); digester.addSetProperty ("struts-config/action-mappings/action/exception/set-property", "property", "value"); digester.addObjectCreate ("struts-config/action-mappings/action/forward", // "org.apache.struts.config.ForwardConfig", "org.apache.struts.action.ActionForward", "className"); digester.addSetProperties ("struts-config/action-mappings/action/forward"); digester.addSetNext ("struts-config/action-mappings/action/forward", "addForwardConfig", "org.apache.struts.config.ForwardConfig"); digester.addSetProperty ("struts-config/action-mappings/action/forward/set-property", "property", "value"); digester.addObjectCreate ("struts-config/controller", "org.apache.struts.config.ControllerConfig", "className"); digester.addSetProperties ("struts-config/controller"); digester.addSetNext ("struts-config/controller", "setControllerConfig", "org.apache.struts.config.ControllerConfig"); digester.addSetProperty ("struts-config/controller/set-property", "property", "value"); digester.addObjectCreate ("struts-config/form-beans/form-bean", // "org.apache.struts.config.FormBeanConfig", "org.apache.struts.action.ActionFormBean", "className"); digester.addSetProperties ("struts-config/form-beans/form-bean"); digester.addSetNext ("struts-config/form-beans/form-bean", "addFormBeanConfig", "org.apache.struts.config.FormBeanConfig"); digester.addObjectCreate ("struts-config/form-beans/form-bean/form-property", "org.apache.struts.config.FormPropertyConfig", "className"); digester.addSetProperties ("struts-config/form-beans/form-bean/form-property"); digester.addSetNext ("struts-config/form-beans/form-bean/form-property", "addFormPropertyConfig", "org.apache.struts.config.FormPropertyConfig"); digester.addSetProperty ("struts-config/form-beans/form-bean/form-property/set-property", "property", "value"); digester.addSetProperty ("struts-config/form-beans/form-bean/set-property", "property", "value"); digester.addObjectCreate ("struts-config/global-exceptions/exception", "org.apache.struts.config.ExceptionConfig", "className"); digester.addSetProperties ("struts-config/global-exceptions/exception"); digester.addSetNext ("struts-config/global-exceptions/exception", "addExceptionConfig", "org.apache.struts.config.ExceptionConfig"); digester.addSetProperty ("struts-config/global-exceptions/exception/set-property", "property", "value"); digester.addObjectCreate ("struts-config/global-forwards/forward", // "org.apache.struts.config.ForwardConfig", "org.apache.struts.action.ActionForward", "className"); digester.addSetProperties ("struts-config/global-forwards/forward"); digester.addSetNext ("struts-config/global-forwards/forward", "addForwardConfig", "org.apache.struts.config.ForwardConfig"); digester.addSetProperty ("struts-config/global-forwards/forward/set-property", "property", "value"); digester.addObjectCreate ("struts-config/message-resources", "org.apache.struts.config.MessageResourcesConfig", "className"); digester.addSetProperties ("struts-config/message-resources"); digester.addSetNext ("struts-config/message-resources", "addMessageResourcesConfig", "org.apache.struts.config.MessageResourcesConfig"); digester.addSetProperty ("struts-config/message-resources/set-property", "property", "value"); digester.addObjectCreate ("struts-config/plug-in", "org.apache.struts.config.PlugInConfig"); digester.addSetProperties ("struts-config/plug-in"); digester.addSetNext ("struts-config/plug-in", "addPlugInConfig", "org.apache.struts.config.PlugInConfig"); digester.addRule ("struts-config/plug-in/set-property", new PlugInSetPropertyRule()); sq~ uq~ppppq~fq~fxppppq~ sq~ uq~pppppppt ConfigRuleSetq~=xsq~ uq~sq~Csq~ uq~ppppq~bsq~ uq~ppppsq~#q‚íxpppq~$sq~ uq~sq~)sq~ uq~ppppq~ åsq~ uq~ppppq~±`sq~ uq~ppppsq~ uq~sq~$úsq~ uq~ppppq~ åsq~ uq~ppppq~=sq~ uq~ppppsq~ uq~ppppppxq~ âq‚upsq~4Ôuq~4×uq~4×&Àq~$xpppsq~Bgãpxq‚ípppsq~ uq~q~ Òpppq~$q~=q~ ›sq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxq~q~aq‚q~Ìq~éq,_q-Vq]Oq^?q_9q`Gq€)@q€)~q~ºsq~Qsq~ uq~ppppq~ sq~ uq~pppppt/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/config/ApplicationConfig.java,v 1.19 2002/11/07 05:18:26 rleland Exp $ * $Revision: 1.19 $ * $Date: 2002/11/07 05:18:26 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** *

            The collection of static configuration information that describes a * Struts-based application module. Multiple application modules * are identified by a prefix at the beginning of the context * relative portion of the request URI. If no application prefix can be * matched, the default configuration (with a prefix equal to a zero-length * string) is selected, which is elegantly backwards compatible with the * previous Struts behavior that only supported one application.

            * * @author Craig R. McClanahan * @version $Revision: 1.19 $ $Date: 2002/11/07 05:18:26 $ * @since Struts 1.1 * @deprecated Usage replaced by ModuleConfig Interface. */ ptApplicationConfig.javaq~fxsq~ uq~ppppsq~ uq~q~bpppq~fxq~0Òqí q)q•Ÿq~ƃq~ísq~Qsq~ uq~sq~Csq~ uq~ppppq‚žsq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq‚žsq~ uq~ppppsq~#q~xppq~ sq~ uq~pppppt p/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/config/ActionConfig.java,v 1.11 2003/05/01 16:45:33 rleland Exp $ * $Revision: 1.11 $ * $Date: 2003/05/01 16:45:33 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** *

            A JavaBean representing the configuration information of an * <action> element from a Struts * module configuration file.

            * * @author Craig R. McClanahan * @version $Revision: 1.11 $ $Date: 2003/05/01 16:45:33 $ * @since Struts 1.1 */ ptActionConfig.javaq~fxsq~ uq~ppppsq~ uq~q~+pppq~fxq¡¬q~ÎRsq~Qsq~ uq~ppppq~ sq~ uq~pppppt n/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/config/ControllerConfig.java,v 1.15 2003/02/25 04:47:38 dgraham Exp $ * $Revision: 1.15 $ * $Date: 2003/02/25 04:47:38 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** *

            A JavaBean representing the configuration information of a * <controller> element in a Struts * configuration file.

            * * @author Craig R. McClanahan * @version $Revision: 1.15 $ $Date: 2003/02/25 04:47:38 $ * @since Struts 1.1 */ ptControllerConfig.javaq~fxsq~ uq~ppppsq~ uq~q~pppq~fxq€*sq~Qsq~ uq~ppppq~ sq~ uq~pppppt m/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/config/ExceptionConfig.java,v 1.6 2003/02/08 23:31:29 craigmcc Exp $ * $Revision: 1.6 $ * $Date: 2003/02/08 23:31:29 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** *

            A JavaBean representing the configuration information of an * <exception> element from a Struts * configuration file.

            * * @author Craig R. McClanahan * @version $Revision: 1.6 $ $Date: 2003/02/08 23:31:29 $ * @since Struts 1.1 */ ptExceptionConfig.javaq~fxsq~ uq~ppppsq~ uq~q~ òpppq~fxq~ ›q!}ppppppppq~$Csq~ uq~ppppppptconfigq~=xsq~ uq~ppppq~ åsq~ uq~q2pppq~$ppxsq~ uq~ppppppptExceptionConfigq~=xsq~ uq~ qõzqZEsq~Csq~ uq~ppppq~xsq~ uq~ppppsq~#q~ òxsq~Csq~ uq~ppppq~"sq~ uq~ppppsq~#q~ òxppppppq~$sq~ uq~q~ èqYØppsq~ uq~ppppq~$q~$q‚Àsq~ uq~qYæppppq~$sq~ uq~ppppsq~ 2uq~Aq~æq]psq~bsq~ uq~ppppsq~isq~ uq~q‚ípppq~+sq~ uq~ppppptw// --------------------------------------------------------- Public Methods /** * Add a new ExceptionConfig instance to the set associated * with this action. * * @param config The new configuration instance to be added * * @exception IllegalStateException if this application configuration * has been frozen */ ptaddExceptionConfigq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t¬ if (configured) { throw new IllegalStateException("Configuration is frozen"); } exceptions.put(config.getType(), config); sq~ uq~ppppq~$q~$xsq~ uq~ppppppptconfigq~=xsq~ uq~pppppq~$q~yq~$q~ òpq~$xsq~isq~ uq~sq~bsq~ uq~ppppq‚ sq~ uq~pppppppttypeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~+sq~ uq~ppppptÑ/** * Return the exception configuration for the specified type, if any; * otherwise return null. * * @param type Exception class name to find a configuration for */ ptfindExceptionConfigq~=xsq~ uq~pppppq~$q~yq~$q~ òpq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tD return ((ExceptionConfig) exceptions.get(type)); sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~+sq~ uq~pppppt‡/** * Return the exception configurations for this action. If there * are none, a zero-length array is returned. */ ptfindExceptionConfigsq~=xsq~ uq~pppppq~$q~yq~$q~ òt[]q~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t£ ExceptionConfig results[] = new ExceptionConfig[exceptions.size()]; return ((ExceptionConfig[]) exceptions.values().toArray(results)); sq~ uq~ppppq~$q~$xsq~bsq~ uq~ppppsq~isq~ uq~q‚ .pppq~+sq~ uq~ppppptý/** * Remove the specified exception configuration instance. * * @param config ExceptionConfig instance to be removed * * @exception IllegalStateException if this application configuration * has been frozen */ ptremoveExceptionConfigq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t§ if (configured) { throw new IllegalStateException("Configuration is frozen"); } exceptions.remove(config.getType()); sq~ uq~ppppq~$q~$xsq~ uq~ppppppptconfigq~=xsq~ uq~pppppq~$q~yq~$q~ òpq~$xsq~bsq~ uq~ppppsq~isq~ uq~q‚ Fpppq~bsq~ uq~pppppt//** * Add a new ExceptionConfig instance to the set associated * with this application. * * @param config The new configuration instance to be added * * @exception IllegalStateException if this application configuration * has been frozen */ ptaddExceptionConfigq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t¬ if (configured) { throw new IllegalStateException("Configuration is frozen"); } exceptions.put(config.getType(), config); sq~ uq~ppppq~$q~$xsq~ uq~ppppppptconfigq~=xsq~ uq~pppppq~$q~yq~$q~ òpq~$xsq~isq~ uq~sq~bsq~ uq~ppppq‚ ^sq~ uq~pppppppttypeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~bsq~ uq~ppppptÑ/** * Return the exception configuration for the specified type, if any; * otherwise return null. * * @param type Exception class name to find a configuration for */ ptfindExceptionConfigq~=xsq~ uq~pppppq~$q~yq~$q~ òpq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tD return ((ExceptionConfig) exceptions.get(type)); sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~bsq~ uq~ppppptŒ/** * Return the exception configurations for this application. If there * are none, a zero-length array is returned. */ ptfindExceptionConfigsq~=xsq~ uq~pppppq~$q~yq~$q~ òt[]q~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t£ ExceptionConfig results[] = new ExceptionConfig[exceptions.size()]; return ((ExceptionConfig[]) exceptions.values().toArray(results)); sq~ uq~ppppq~$q~$xsq~bsq~ uq~ppppsq~isq~ uq~q‚ ‡pppq~bsq~ uq~ppppptú/** * Remove the specified exception configuration instance. * * @param config ActionConfig instance to be removed * * @exception IllegalStateException if this application configuration * has been frozen */ ptremoveExceptionConfigq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t§ if (configured) { throw new IllegalStateException("Configuration is frozen"); } exceptions.remove(config.getType()); sq~ uq~ppppq~$q~$xsq~ uq~ppppppptconfigq~=xsq~ uq~pppppq~$q~yq~$q~ òpq~$xqü¡q]èsq~bsq~ uq~ppppsq~isq~ uq~q‚ Ÿpppq~+sq~ uq~ppppptw// --------------------------------------------------------- Public Methods /** * Add a new ExceptionConfig instance to the set associated * with this action. * * @param config The new configuration instance to be added * * @exception IllegalStateException if this application configuration * has been frozen */ ptaddExceptionConfigq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t¬ if (configured) { throw new IllegalStateException("Configuration is frozen"); } exceptions.put(config.getType(), config); sq~ uq~ppppq~¥q~¥xsq~ uq~ppppppptconfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ òpq~§xsq~isq~ uq~sq~bsq~ uq~ppppq‚ ·sq~ uq~pppppppttypeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~+sq~ uq~ppppptÑ/** * Return the exception configuration for the specified type, if any; * otherwise return null. * * @param type Exception class name to find a configuration for */ ptfindExceptionConfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ òpq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tD return ((ExceptionConfig) exceptions.get(type)); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~+sq~ uq~pppppt‡/** * Return the exception configurations for this action. If there * are none, a zero-length array is returned. */ ptfindExceptionConfigsq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ òt[]q~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t£ ExceptionConfig results[] = new ExceptionConfig[exceptions.size()]; return ((ExceptionConfig[]) exceptions.values().toArray(results)); sq~ uq~ppppq~¥q~¥xsq~bsq~ uq~ppppsq~isq~ uq~q‚ àpppq~+sq~ uq~ppppptý/** * Remove the specified exception configuration instance. * * @param config ExceptionConfig instance to be removed * * @exception IllegalStateException if this application configuration * has been frozen */ ptremoveExceptionConfigq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t§ if (configured) { throw new IllegalStateException("Configuration is frozen"); } exceptions.remove(config.getType()); sq~ uq~ppppq~¥q~¥xsq~ uq~ppppppptconfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ òpq~§xsq~bsq~ uq~ppppsq~isq~ uq~q‚ øpppq~bsq~ uq~pppppt//** * Add a new ExceptionConfig instance to the set associated * with this application. * * @param config The new configuration instance to be added * * @exception IllegalStateException if this application configuration * has been frozen */ ptaddExceptionConfigq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t¬ if (configured) { throw new IllegalStateException("Configuration is frozen"); } exceptions.put(config.getType(), config); sq~ uq~ppppq~¥q~¥xsq~ uq~ppppppptconfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ òpq~§xsq~isq~ uq~sq~bsq~ uq~ppppq‚ sq~ uq~pppppppttypeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~bsq~ uq~ppppptÑ/** * Return the exception configuration for the specified type, if any; * otherwise return null. * * @param type Exception class name to find a configuration for */ ptfindExceptionConfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ òpq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tD return ((ExceptionConfig) exceptions.get(type)); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~bsq~ uq~ppppptŒ/** * Return the exception configurations for this application. If there * are none, a zero-length array is returned. */ ptfindExceptionConfigsq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ òt[]q~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t£ ExceptionConfig results[] = new ExceptionConfig[exceptions.size()]; return ((ExceptionConfig[]) exceptions.values().toArray(results)); sq~ uq~ppppq~¥q~¥xsq~bsq~ uq~ppppsq~isq~ uq~q‚ 9pppq~bsq~ uq~ppppptú/** * Remove the specified exception configuration instance. * * @param config ActionConfig instance to be removed * * @exception IllegalStateException if this application configuration * has been frozen */ ptremoveExceptionConfigq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t§ if (configured) { throw new IllegalStateException("Configuration is frozen"); } exceptions.remove(config.getType()); sq~ uq~ppppq~¥q~¥xsq~ uq~ppppppptconfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ òpq~§xqüÊq^`sq~bsq~ uq~ppppsq~isq~ uq~q‚ Qpppq~+sq~ uq~ppppptr// --------------------------------------------------------- Public Methods /** * Add a new ExceptionConfig instance to the set associated * with this action. * * @param config The new configuration instance to be added * * @exception IllegalStateException if this module configuration * has been frozen */ ptaddExceptionConfigq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t¬ if (configured) { throw new IllegalStateException("Configuration is frozen"); } exceptions.put(config.getType(), config); sq~ uq~ppppq~–q~–xsq~ uq~ppppppptconfigq~rxsq~ uq~pppppq~–q~—q~–q~ òpq~˜xsq~isq~ uq~sq~bsq~ uq~ppppq‚ isq~ uq~pppppppttypeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~+sq~ uq~ppppptÑ/** * Return the exception configuration for the specified type, if any; * otherwise return null. * * @param type Exception class name to find a configuration for */ ptfindExceptionConfigq~rxsq~ uq~pppppq~–q~—q~–q~ òpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tD return ((ExceptionConfig) exceptions.get(type)); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~+sq~ uq~pppppt‡/** * Return the exception configurations for this action. If there * are none, a zero-length array is returned. */ ptfindExceptionConfigsq~rxsq~ uq~pppppq~–q~—q~–q~ òt[]q~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t£ ExceptionConfig results[] = new ExceptionConfig[exceptions.size()]; return ((ExceptionConfig[]) exceptions.values().toArray(results)); sq~ uq~ppppq~–q~–xsq~bsq~ uq~ppppsq~isq~ uq~q‚ ’pppq~+sq~ uq~ppppptý/** * Remove the specified exception configuration instance. * * @param config ExceptionConfig instance to be removed * * @exception IllegalStateException if this application configuration * has been frozen */ ptremoveExceptionConfigq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t§ if (configured) { throw new IllegalStateException("Configuration is frozen"); } exceptions.remove(config.getType()); sq~ uq~ppppq~–q~–xsq~ uq~ppppppptconfigq~rxsq~ uq~pppppq~–q~—q~–q~ òpq~˜xsq~bsq~ uq~ppppsq~isq~ uq~q‚ ªpppq~bsq~ uq~pppppt*/** * Add a new ExceptionConfig instance to the set associated * with this application. * * @param config The new configuration instance to be added * * @exception IllegalStateException if this module configuration * has been frozen */ ptaddExceptionConfigq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t¬ if (configured) { throw new IllegalStateException("Configuration is frozen"); } exceptions.put(config.getType(), config); sq~ uq~ppppq~–q~–xsq~ uq~ppppppptconfigq~rxsq~ uq~pppppq~–q~—q~–q~ òpq~˜xsq~isq~ uq~sq~bsq~ uq~ppppq‚ Âsq~ uq~pppppppttypeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~bsq~ uq~ppppptÑ/** * Return the exception configuration for the specified type, if any; * otherwise return null. * * @param type Exception class name to find a configuration for */ ptfindExceptionConfigq~rxsq~ uq~pppppq~–q~—q~–q~ òpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tD return ((ExceptionConfig) exceptions.get(type)); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~bsq~ uq~pppppt‡/** * Return the exception configurations for this module. If there * are none, a zero-length array is returned. */ ptfindExceptionConfigsq~rxsq~ uq~pppppq~–q~—q~–q~ òt[]q~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t£ ExceptionConfig results[] = new ExceptionConfig[exceptions.size()]; return ((ExceptionConfig[]) exceptions.values().toArray(results)); sq~ uq~ppppq~–q~–xsq~bsq~ uq~ppppsq~isq~ uq~q‚ ëpppq~bsq~ uq~ppppptõ/** * Remove the specified exception configuration instance. * * @param config ActionConfig instance to be removed * * @exception IllegalStateException if this module configuration * has been frozen */ ptremoveExceptionConfigq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t§ if (configured) { throw new IllegalStateException("Configuration is frozen"); } exceptions.remove(config.getType()); sq~ uq~ppppq~–q~–xsq~ uq~ppppppptconfigq~rxsq~ uq~pppppq~–q~—q~–q~ òpq~˜xq^Øqüóqê[qê­qêÄqë$sq~bsq~ uq~ppppsq~isq~ uq~q‚ pppq~+sq~ uq~ppppptr// --------------------------------------------------------- Public Methods /** * Add a new ExceptionConfig instance to the set associated * with this action. * * @param config The new configuration instance to be added * * @exception IllegalStateException if this module configuration * has been frozen */ ptaddExceptionConfigq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t¬ if (configured) { throw new IllegalStateException("Configuration is frozen"); } exceptions.put(config.getType(), config); sq~ uq~ppppq~~q~~xsq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~ òpq~€xsq~isq~ uq~sq~bsq~ uq~ppppq‚ sq~ uq~pppppppttypeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~+sq~ uq~ppppptÑ/** * Return the exception configuration for the specified type, if any; * otherwise return null. * * @param type Exception class name to find a configuration for */ ptfindExceptionConfigq~{xsq~ uq~pppppq~~q~q~~q~ òpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tD return ((ExceptionConfig) exceptions.get(type)); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~+sq~ uq~pppppt‡/** * Return the exception configurations for this action. If there * are none, a zero-length array is returned. */ ptfindExceptionConfigsq~{xsq~ uq~pppppq~~q~q~~q~ òt[]q~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t£ ExceptionConfig results[] = new ExceptionConfig[exceptions.size()]; return ((ExceptionConfig[]) exceptions.values().toArray(results)); sq~ uq~ppppq~~q~~xsq~bsq~ uq~ppppsq~isq~ uq~q‚ Dpppq~+sq~ uq~ppppptø/** * Remove the specified exception configuration instance. * * @param config ExceptionConfig instance to be removed * * @exception IllegalStateException if this module configuration * has been frozen */ ptremoveExceptionConfigq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t§ if (configured) { throw new IllegalStateException("Configuration is frozen"); } exceptions.remove(config.getType()); sq~ uq~ppppq~~q~~xsq~ uq~ppppppptconfigq~{xsq~ uq~pppppq~~q~q~~q~ òpq~€xq_PqýqëêqìExceptionConfig instance to the set associated * with this action. * * @param config The new configuration instance to be added * * @exception IllegalStateException if this module configuration * has been frozen */ ptaddExceptionConfigq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft¬ if (configured) { throw new IllegalStateException("Configuration is frozen"); } exceptions.put(config.getType(), config); sq~ uq~ppppq~fq~fxsq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~ òpq~hxsq~isq~ uq~sq~bsq~ uq~ppppq‚ tsq~ uq~pppppppttypeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~+sq~ uq~ppppptÑ/** * Return the exception configuration for the specified type, if any; * otherwise return null. * * @param type Exception class name to find a configuration for */ ptfindExceptionConfigq~cxsq~ uq~pppppq~fq~gq~fq~ òpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftD return ((ExceptionConfig) exceptions.get(type)); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~+sq~ uq~pppppt‡/** * Return the exception configurations for this action. If there * are none, a zero-length array is returned. */ ptfindExceptionConfigsq~cxsq~ uq~pppppq~fq~gq~fq~ òt[]q~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft£ ExceptionConfig results[] = new ExceptionConfig[exceptions.size()]; return ((ExceptionConfig[]) exceptions.values().toArray(results)); sq~ uq~ppppq~fq~fxsq~bsq~ uq~ppppsq~isq~ uq~q‚ pppq~+sq~ uq~ppppptø/** * Remove the specified exception configuration instance. * * @param config ExceptionConfig instance to be removed * * @exception IllegalStateException if this module configuration * has been frozen */ ptremoveExceptionConfigq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft§ if (configured) { throw new IllegalStateException("Configuration is frozen"); } exceptions.remove(config.getType()); sq~ uq~ppppq~fq~fxsq~ uq~ppppppptconfigq~cxsq~ uq~pppppq~fq~gq~fq~ òpq~hxpppppppppppppppq~Äxq~$ppxq‚Ðq¡ sq~)sq~ uq~ppppq~ åsq~ uq~ppppq~±`sq~ uq~ppppsq~ uq~ppppsq~Ba>pxq~+sq~)sq~ uq~ppppq~ åsq~ uq~ppppq~±`sq~ uq~ppppsq~ uq~ppppsq~B{NJpxq~bq‚usq~)sq~ uq~ppppq~ åsq~ uq~ppppq~csq~ uq~ppppsq~ uq~ppppsq~BtWpxq~qèœq!qq~ÎFq‚”qM6qM&q^q^5q_/q`­q~ âq‚~qM-q^%q^q^,q_&q`¿q`¶sq~¤6sq~ uq~ppppq~ åsq~ uq~ppppq~esq~ uq~ppppsq~ uq~ppppsq~BZ6Žpxsq~¤Bq~4× ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶¶ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿIIUÿ¶¶ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶¶ªÿÿÿÿÿ’’ªÿ¶¶ªÿÛ¶ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmmUÿÿ’’ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛ¶ªÿÛ¶ªÿÛ¶ªÿ’’UÿÿÿÿÿÿÿÿÿÛmUÿ¶IÿÿIÿ¶Iÿÿ$ÿÿmUÿÛÛªÿÿÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÿÿÿÿmmUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶¶ªÿ¶¶ªÿmIUÿ¶¶ªÿÛÛÿÿ’’ªÿÿÿ’UÿÛÿÿUÿÿÿ¶ÿÿIÿÛIÿÛIÿÿmÿÛ¶ªÿÿÿÿÿÿÛªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛ¶ªÿÿÿIIUÿÛÛÿÿÿÿÿÿÿÿÿÿmmUÿmmUÿ’’UÿÛÛÿÿÛIªÿÛªÿÿªÿ¶Uÿÿªÿ’UÿÿUÿÿÿÿÿÿÿmÿÿ$ÿÿIÿ¶Iÿ¶mUÿÿ¶ÿÛÛUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$$UÿÿÿÿÛ¶ªÿÛÛÿÿIIUÿIIUÿÛÛÿÿ’$ªÿmªÿÛªÿÿÿÿÛÿÿÿªÿÿªÿ¶Uÿÿªÿ¶UÿÿUÿÿÿmÿÿIÿÿIÿÛIÿÛ$ÿÿIÿÿIÿÛ¶ªÿÛÛªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛ¶ªÿ$$ÿÿÿÿÿIIUÿÛÛÿÿm$ªÿmªÿmªÿ¶ÿÿmªÿÛÿÿÿÿÿÛªÿ¶ªÿÿªÿÿªÿÛªÿÿUÿÿÿÿÿÛUÿÿUÿÿÿ¶ÿÿ$ÿÛIÿÛmUÿÿ¶UÿÛ¶ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÿÿÛÛÿÿmmUÿÿÿÿ$$UÿIªÿÿÿÿÿmÿÿmÿÿ’ÿÿmªÿÛÿÿ¶ªÿÿÿÿÿÿÿÛªÿÿªÿÿªÿ¶Uÿÿªÿÿªÿ¶UÿÿUÿÛÿÿÿÿ$ÿ’ÿÛ$ÿÿ$ÿÛmUÿÛ¶ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÿÿ’’ªÿÛ¶ªÿ¶¶ªÿ¶¶ªÿÿÿÿÿÿUÿÿÿ$ÿÿIÿÿªÿmÿÿmÿÿ’ÿÿmªÿÛÿÿÿÿÿÛªÿÛÿÿÿÿÿ’ªÿÿªÿÿªÿÛªÿÿUÿ¶UÿÿUÿÛÿÛÿÿÿ’ÿÛmÿÿ¶Uÿ¶’ªÿÿÛªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’’ªÿ’’ªÿIIUÿIIUÿmmUÿÛÛªÿ’’ªÿUÿÿÿÿÿÿÿÿÿÿIÿÿIÿÿmÿÿ’ÿÿ¶ÿÿmªÿ¶ÿÿÛÿÿÛÿÿÿÿÿ’ªÿÿÿÿ’ªÿÿªÿÿªÿÛªÿÿªÿ¶ÿÿ$ÿ’ÿÿÿÿ$ÿÛ$ÿ¶IÿÛÛUÿ¶’UÿÛmUÿÿ¶UÿÿÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’’ªÿ’’ªÿmIUÿ’’ªÿmIUÿ’’ªÿÛÛÿÿ¶ÿÿ’ÿÿmÿÿ$ÿÿUÿÿÿÿÿÿUÿ$ÿÿIÿÿIÿÿIÿÿIÿÿIªÿ’ÿÿmÿÿ¶ÿÿ¶ÿÿÛÿÿÛÿÿmªÿÿÿÿ¶UÿÿªÿmUÿÿªÿÿUÿmÿÿ$ÿ’ÿÛÿÿ$ÿÿ$ÿ¶IÿÛIÿÿmÿ¶Iÿÿÿÿ$ÿÛIÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶¶ªÿ’’ªÿmmUÿÛ¶ªÿÛ¶ªÿÛ¶ªÿÛÛÿÿÿmªÿÛªÿÿÿÿmªÿmÿÿmªÿIÿÿIªÿªÿÿÿÿÿÿUÿÿÿÿÿ$ÿÿIÿÿIªÿmÿÿIªÿmÿÿmÿÿ¶ÿÿmªÿÿÿÿ¶ªÿÿÿÿÿÿÿ¶UÿÿªÿmUÿÿªÿÿªÿ¶ÿÿÿÿ$ÿÿ$ÿ’UÿÿUÿÛÿÛ$ÿÿIÿÛIÿ¶IÿÿmUÿÿmUÿÛ¶ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’’ªÿ¶¶ªÿÛÛÿÿ’’ªÿÛÛÿÿÿmªÿ¶UÿÿªÿmUÿÿÿÿ¶ªÿ¶ÿÿmªÿ¶ÿÿIªÿIªÿªÿÿÿÿÿÿÿUÿÿÿÿÿ$ÿÿ$ÿÿªÿIÿÿmÿÿ¶ÿÿmªÿ¶ÿÿmªÿÿÿÿÛªÿÿÿÿÿÿÿ’UÿÿªÿÿªÿÛUÿ¶ªÿÿªÿmUÿÿUÿÿÿmÿÿUÿÿUÿmÿÛÿÿ$ÿÛÿÛmUÿÿ¶UÿÿÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛ¶ªÿÛÛÿÿÛÛÿÿÛ¶ªÿÿÿÿÿÿ¶UÿÛÿÿUÿ’Uÿÿªÿ’ªÿÿÿÿ¶ªÿÿÿÿ’ªÿmªÿ’ÿÿmªÿ’ÿÿmÿÿ$UÿÿÿÿÿÿÿUÿªÿªÿ$ÿÿªÿIÿÿmÿÿmÿÿ’ÿÿmªÿ’ÿÿmªÿÛÿÿÿÿÿÛªÿ¶ÿÿÛÿÿmªÿÿªÿÿªÿ’UÿÿªÿÛªÿ’Uÿÿªÿÿªÿ¶ÿÿÿÿ$ÿÛIÿÛÿÛÿ¶ÿÿÿÿmUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛ’Uÿÿ$ÿ¶ÿÿUÿ’UÿÿªÿÛªÿÿªÿ¶ªÿmªÿÛÿÿ’ÿÿÛÿÿ¶ÿÿ’ªÿ’ÿÿmÿÿmÿÿ$UÿÿÿÿÿÿÿÿUÿUÿ$ÿÿªÿ$ÿÿªÿmÿÿmÿÿmªÿIÿÿmÿÿmªÿÛÿÿÛÿÿ’ªÿÛÿÿ’ÿÿÛÿÿÿÿÿÿªÿ’Uÿÿªÿÿªÿ¶Uÿÿªÿ¶UÿÿªÿÿUÿÿªÿ¶Uÿ¶’ªÿÿÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛ¶ªÿÛmÿÿÿ¶ÿÿÿÛÿÿUÿ¶UÿÛªÿÿÿÿÿÿÿÿÿÿÿÿÿÛªÿÛÿÿÛÿÿ¶ÿÿ’ÿÿ¶ÿÿmªÿIªÿ$UÿÿÿÿÿÿÿÿÿUÿªÿUÿÿÿÿÿIªÿmÿÿIªÿIÿÿmÿÿIªÿ’ÿÿ’ÿÿ¶ÿÿmªÿÛÿÿÿÿÿ’ªÿÿÿÿ’ªÿÿÿÿÿÿÿ’ªÿÛUÿÿUÿÿÿÿÿ¶ÿÿIUÿÿIÿ¶IÿÛÛªÿÿIUÿÿmUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÿÿÛ¶ªÿÿmÿÛ$ÿÿ$ÿÿ$ÿ¶ÿÿÿÛªÿÿªÿ¶UÿÿªÿÿªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÿÿ¶ÿÿ’ÿÿmÿÿmªÿ¶ÿÿIUÿ$Uÿ$UÿÿÿÿÿÿÿÿÿÿUÿªÿUÿÿÿ$ÿÿIÿÿªÿmÿÿmÿÿIªÿmÿÿmÿÿmÿÿ’ÿÿmªÿÿÿÿÿÿÿÿªÿ’UÿÿªÿÿªÿÛUÿ’UÿÿªÿÿªÿÛUÿ¶mÿÛ¶ÿ¶’ÿÛÛUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÿÿÛÛÿÿÛÛÿÿÿmÿ¶Iÿ¶IÿÿIÿ¶ÿÿUÿ¶ÿÿUÿÿUÿÛªÿÿªÿ¶Uÿÿªÿ¶ªÿÿªÿ¶ªÿÿÿÿmªÿ’ÿÿÿÿÿ’ÿÿÛÿÿ’ÿÿÛÿÿmªÿ’ÿÿIUÿmªÿ$Uÿ$UÿÿÿÿÿÿÿÿÿÿÿÿUÿªÿªÿÿÿªÿmÿÿmÿÿmÿÿIªÿ’ÿÿ¶ÿÿmªÿ’ÿÿÛÿÿÛÿÿ¶IÿÛ¶ÿ¶’ÿÿÛÿÛ¶ÿ¶’ÿÿÛÿÿÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛ’UÿÛ¶UÿÛmÿÿÿÿÿÿÿÿÿÛÿÿUÿ’UÿÿUÿ’UÿÿUÿ’UÿÿªÿÛªÿÿÿÿÛªÿÿªÿ¶ªÿÿÿÿÛªÿÿÿÿÿÿÿÛÿÿÿÿÿÿÿÿ¶ªÿ¶ÿÿmªÿÛÿÿ’ªÿÛÿÿ’ªÿmªÿmªÿ$Uÿ$$ÿ$UÿÿÿÿÿÿÿÿÿUÿUÿªÿªÿIªÿmIUÿÿÛÿ¶’ÿÿÛÿÿÛÿ¶mÿÿÛÿ¶’ÿÛ¶ÿÿÛÿÿÛÿÛÛªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÿÿÛ¶ªÿÛ¶ªÿÿIÿ¶IÿÿIÿ¶Iÿÿ$ÿÿÿÿÿÿÿÿÿÿUÿÛUÿÿªÿÛªÿ¶UÿÿUÿ¶Uÿÿªÿ’Uÿÿªÿ’UÿÿªÿmUÿÿªÿÿÿÿ¶ªÿÿÿÿmªÿÿÿÿÛªÿÛÿÿ’ÿÿÛÿÿÛÿÿ’ÿÿÿÿÿÿÿÿmªÿ’ÿÿmªÿ¶ÿÿIUÿ’ÿÿmªÿmªÿmUÿÿ$$ÿÿÿÿÿÿÿmIÿmIÿÛ¶ÿÿÛÿ¶mÿÿÛÿ¶’ÿÿÛÿÿÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÿÿÛÛÿÿÛÛªÿÛ¶ªÿÿmÿÛmUÿÿIÿ¶IÿÿIÿ’ÿÿ$ÿ¶ÿÿÿmÿÿÿ¶ÿÿÿÛÿÿUÿÛÿÿUÿÛÿÿUÿmUÿÿUÿÿªÿ’Uÿÿÿÿ¶ªÿÿªÿ¶ªÿÿÿÿ¶ªÿÿªÿÿÿÿ’ªÿÿªÿÿÿÿmUÿÿÿÿ¶ªÿÿÿÿ’ªÿÿªÿÛªÿÛªÿÿÿÿmªÿÿÿÿ’ªÿÛ¶ÿ¶’ÿÿÛÿÛ¶ÿÿÛÿ¶’ÿ¶’ÿmIÿmIÿÿmIÿ$$ÿÛ¶ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛ¶ªÿÛÛÿÿÿ¶Uÿ¶¶ªÿÿmÿ¶IUÿÿIÿ¶Iÿÿ$ÿ¶IÿÛ$ÿÛ$ÿÿÿ¶ÿÛÿÿÿÿÿmÿÿÿÿUÿ’Uÿÿªÿ’UÿÿUÿÛUÿÿªÿ’Uÿÿªÿÿªÿ’Uÿÿªÿÿªÿ’UÿÿªÿÛªÿÿªÿ¶UÿÿUÿÛªÿ¶Uÿÿªÿ’Uÿÿÿÿÿÿÿ¶IUÿ¶’ÿÿÛÿÛ¶ÿÛ¶ÿ¶’ÿÿÛÿÛ¶ÿÛ¶ÿ¶’ÿÛ¶ÿÛ¶ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛmUÿÛÛªÿÛ’ªÿÛ¶ªÿÛmUÿÛ’UÿÿIÿ¶IÿÛ$ÿ¶IÿÿIÿ’ÿÛ$ÿÿ$ÿ¶UÿÿUÿ¶Uÿÿÿ¶ÿÿUÿ’UÿÿÿÿUÿmÿÿÿÿUÿ¶UÿÛUÿÛUÿÿªÿ’Uÿÿÿÿÿ¶ÿÿUÿÛUÿ¶Uÿÿªÿ’Uÿ¶’ÿÛ¶ÿÛ¶ÿ¶’ÿÛ¶ÿ¶’ÿÛÛUÿÛ¶ªÿÛ¶ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛ¶ªÿÛ¶ªÿÛ¶ªÿÛmÿmÿÿ$Uÿ¶UÿÛIÿÛ$ÿÛUÿÛUÿ¶ÿÿÿ¶ÿÛ$ÿÿÿmÿÿÿÛÿÿÿÿUÿmUÿ$$Uÿ$$UÿIIUÿmUÿ$$ÿÛIªÿÿ$ªÿÛ¶ªÿÛÛªÿÛ¶ªÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛªÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÛÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿpq€*‘q€)Ÿqìýsq_ãsq~ uq~ppppq~ åsq~ uq~ppppq~csq~ uq~ppppsq~ uq~ppppsq~BU'pxsq~±]tTimes New Romant¤--------------------------------------------------------------------- Deprecated -----------------------------------------------------------------------------------pppq~ sq~ uq~ppppdq~ sq~1sq~1@„@@ˆÀ@ƒ @}@@R@Rpsq~1dq~±Xxsq~ uq~ppppq~±`sq~ uq~q‚~pppsq~ uq~ppppsq~B ’·pxq~ Òppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~ sq~ uq~ppppppptRuleSetBase.javaq~$xsq~ uq~ppppsq~ uq~q~ Òpppq~$xsq~ uq~q‚íppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxsq~)sq~ uq~ppppq~ ±sq~ uq~ppppq~rsq~ uq~ppppsq~ uq~ppppsq~Bddpxsq~zsq~ uq~ppppq~ sq~ uq~pppppq~pptRuleSetq~rxsq~ uq~sq~Csq~ uq~ppppq~bsq~ uq~ppppsq~#q‚ xpppq~–sq~ uq~q‚ pppsq~ uq~ppppq~–q~–sq~Qsq~ uq~ppppq~ sq~ uq~pppppppt RuleSet.javaq~–xsq~ uq~ppppsq~ uq~q‚ pppq~–xsq~ uq~pppppq~–sq~ uq~ppppsq~ uq~ppppq~¢xq~–ppxppppq~ sq~ uq~pppp. * *//** *

            The set of Digester rules required to parse a Struts * configuration file (struts-config.xml).

            * * @author Craig R. McClanahan * @version $Revision: 1.14 $ $Date: 2002/12/21 04:42:20 $ * @since Struts 1.1 */ /** * Class that calls addProperty() for the top object * on the stack, which must be a * org.apache.struts.config.DataSourceConfig. */ /** * Class that records the name and value of a configuration property to be * used in configuring a PlugIn instance when instantiated. */ /** * Class that sets the name of the class to use when creating action mapping * instances. The value is set on the object on the top of the stack, which * must be a org.apache.struts.config.ModuleConfig. */ /** * An object creation factory which creates action mapping instances, taking * into account the default class name, which may have been specified on the * parent element and which is made available through the object on the top * of the stack, which must be a * org.apache.struts.config.ModuleConfig. */ ptConfigRuleSet.javaq~fxsq~ uq~ppppsq~ uq~ q‚íq]Oq^?q_9q`Gppppq~fxsq~ uq~ppppsq~#q~ xpppq~$sq~ uq~q~ ¾q^%ppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~ sq~ uq~pppppppt Rule.javaq~$xsq~ uq~ppppsq~ uq~q~ pppq~$xsq~ uq~q]Oq^?q_9ppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxq~ ¤q~ Òsq~Qsq~ uq~ppppq~ sq~ uq~pppppppt Digester.javaq~$xsq~ uq~ppppsq~ uq~q~ Špppq~$xq‚ iq‚ Dq‚ úq‚ q‚ &ppppq~,7sq~ uq~ppppppptdigesterq~=xsq~ uq~ppppq~ ±sq~ uq~q Vpppq~$ppxsq~ uq~pppppq~‡ptDigesterq~=xsq~ uq~ sq~Csq~ uq~ppppq~bsq~ uq~ppppsq~#q~ Šxq‚ Tqúppppppq~$sq~ uq~q~ ´pppsq~ uq~ppppq~$q~$q‚ ysq~ uq~pppppq~$sq~ uq~ppppsq~ &uq~'q~ q‚óq]Uq^Eq_?sq~isq~ uq~ppppq~ psq~ uq~ppppptX/** *

            Create (if needed) and return a new Digester instance that has been * initialized to process Struts application configuraiton files and * configure a corresponding ApplicationConfig object (which must be * pushed on to the evaluation stack before parsing begins).

            * * @since Struts 1.1 */ ptinitConfigDigesterq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ Špq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥t // Do we have an existing instance? if (configDigester != null) { return (configDigester); } // Create and return a new Digester instance configDigester = new Digester(); configDigester.setDebug(detail); configDigester.setNamespaceAware(true); configDigester.setValidating(true); configDigester.setUseContextClassLoader(true); configDigester.addRuleSet(new ConfigRuleSet()); for (int i = 0; i < registrations.length; i += 2) { URL url = this.getClass().getResource(registrations[i+1]); if (url != null) configDigester.register(registrations[i], url.toString()); } return (configDigester); sq~ uq~ppppq~¥q~¥xq‚ q]lq^sq_mqWºqX5qXMqXeqX}qóDq‚#q]™q^ q_šqXîqYqYqY6q~Ò`qô$q‚;qYÇqYßqY÷qZq~Ò¸qõq‚SqZ qZ¸qZÐqZèpq~Äxq~$ppxpq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xqbÖsq~(sq~ uq~ppppq~ psq~ uq~ppppptJ/** * The debugging detail level for this servlet. */ /** * The debugging detail level for this servlet. */ /** * The debugging detail level for this servlet. */ /** * The debugging detail level for this servlet. */ /** * The debugging detail level for this servlet. */ ptdebugq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt 0q~$q~$q~$xsq~(sq~ uq~ppppq~ psq~ uq~ppppptð/** * The debugging detail level for configuration file parsing. */ /** * The debugging detail level for configuration file parsing. */ /** * The debugging detail level for configuration file parsing. */ ptdetailq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt 0q~$q~$q~$xqÜsq~(sq~ uq~ppppq~ psq~ uq~pppppt·/** * The Java base name of our internal resources. */ /** * The Java base name of our internal resources. * @since Struts 1.1 */ /** * The Java base name of our internal resources. * @since Struts 1.1 */ /** * The Java base name of our internal resources. * @since Struts 1.1 */ /** * The Java base name of our internal resources. * @since Struts 1.1 */ pt internalNameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt+ "org.apache.struts.action.ActionResources"q~$q~$q~$xqËÿqÇMsq~(sq~ uq~ppppq~ psq~ uq~ppppptº/** * The set of public identifiers, and corresponding resource names, for * the versions of the configuration file DTDs that we know about. There * MUST be an even number of Strings in this list! */ /** * The set of public identifiers, and corresponding resource names, for * the versions of the configuration file DTDs that we know about. There * MUST be an even number of Strings in this list! */ /** * The set of public identifiers, and corresponding resource names, for * the versions of the configuration file DTDs that we know about. There * MUST be an even number of Strings in this list! */ /** * The set of public identifiers, and corresponding resource names, for * the versions of the configuration file DTDs that we know about. There * MUST be an even number of Strings in this list! */ /** * The set of public identifiers, and corresponding resource names, for * the versions of the configuration file DTDs that we know about. There * MUST be an even number of Strings in this list! */ pt registrationsq~=xsq~ uq~pppppq~$q~yq~$q~{t[]q~xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt { "-//Apache Software Foundation//DTD Struts Configuration 1.0//EN", "/org/apache/struts/resources/struts-config_1_0.dtd", "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN", "/org/apache/struts/resources/struts-config_1_1.dtd", "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN", "/org/apache/struts/resources/web-app_2_2.dtd", "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN", "/org/apache/struts/resources/web-app_2_3.dtd" }q~$q~$q~$xsq~(sq~ uq~ppppq~ psq~ uq~pppppt¨/** * The URL pattern to which we are mapped in our web application * deployment descriptor. FIXME - multiples??? */ /** * The URL pattern to which we are mapped in our web application * deployment descriptor. FIXME - multiples??? */ /** * The URL pattern to which we are mapped in our web application * deployment descriptor. FIXME - multiples??? */ /** * The URL pattern to which we are mapped in our web application * deployment descriptor. FIXME - multiples??? */ /** * The URL pattern to which we are mapped in our web application * deployment descriptor. FIXME - multiples??? */ ptservletMappingq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq~ psq~ uq~ppppptb/** * The servlet name under which we are registered in our web application * deployment descriptor. */ /** * The servlet name under which we are registered in our web application * deployment descriptor. */ /** * The servlet name under which we are registered in our web application * deployment descriptor. */ /** * The servlet name under which we are registered in our web application * deployment descriptor. */ /** * The servlet name under which we are registered in our web application * deployment descriptor. */ pt servletNameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~(sq~ uq~ppppq~ psq~ uq~pppppt[/** * Should we use a validating XML parser to read the configuration file? */ pt validatingq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt trueq~$q~$q~$xsq~isq~ uq~ppppq~ psq~ uq~pppppt×// ---------------------------------------------------- HttpServlet Methods /** * Gracefully shut down this controller servlet, releasing any resources * that were allocated at initialization. */ ptdestroyq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tj if (log.isDebugEnabled()) { log.debug(internal.getMessage("finalizing")); } destroyApplications(); destroyDataSources(); destroyInternal(); getServletContext().removeAttribute(Action.ACTION_SERVLET_KEY); // FIXME - destroy ApplicationConfig and message resource instances sq~ uq~ppppq~$q~$xq'uqðåqñsq~isq~ uq~sq~bsq~ uq~ppppq‚ 'sq~ uq~pppppppt servletNameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppq‚ 'sq~ uq~pppppppt urlPatternq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xppq~ psq~ uq~ppppptb// --------------------------------------------------------- Public Methods /** * Remember a servlet mapping from our web application deployment * descriptor, if it is for this servlet. * * @param servletName The name of the servlet being mapped * @param urlPattern The URL pattern to which this servlet is mapped */ ptaddServletMappingq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$ta if (log.isDebugEnabled()) { log.debug("Process servletName=" + servletName + ", urlPattern=" + urlPattern); } if (servletName == null) { return; } if (servletName.equals(this.servletName)) { this.servletMapping = urlPattern; } sq~ uq~ppppq~$q~$xqa`q/ qûqý`sq~isq~ uq~ppppq~ psq~ uq~ppppptI/** * Return the debugging detail level for this servlet. */ ptgetDebugq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t( return (this.debug); sq~ uq~ppppq~$q~$xqÜ qÜ0sq~isq~ uq~sq~bsq~ uq~ppppq‚ Wsq~ uq~ppppppptmessageq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~bsq~ uq~ppppq‚ Wsq~ uq~ppppppptlevelq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xppq~ psq~ uq~pppppt1/** * Log the specified message if the current debugging detail level for * this servlet has been set to an equal or higher value. Otherwise, * ignore this message. * * @param message Message to be logged * @param level Debugging detail level of this message */ ptlogq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tO if (debug >= level) { log(message); } sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~ psq~ uq~ppppptÆ// ------------------------------------------------------ Protected Methods /** * Gracefully terminate use of any sub-applications associated with this * application (if any). */ ptdestroyApplicationsq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$t„ ArrayList values = new ArrayList(); Enumeration names = getServletContext().getAttributeNames(); while (names.hasMoreElements()) { values.add(names.nextElement()); } Iterator keys = values.iterator(); while (keys.hasNext()) { String name = (String) keys.next(); Object value = getServletContext().getAttribute(name); if (value instanceof ApplicationConfig) { ApplicationConfig config = (ApplicationConfig) value; try { getRequestProcessor(config).destroy(); } catch (Throwable t) { ; } PlugIn plugIns[] = (PlugIn[]) getServletContext().getAttribute (Action.PLUG_INS_KEY + config.getPrefix()); if (plugIns != null) { for (int i = 0; i < plugIns.length; i++) { int j = plugIns.length - (i + 1); plugIns[j].destroy(); } } } } sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~ psq~ uq~ppppptZ/** * Gracefully release any configDigester instance that we have created. */ ptdestroyConfigDigesterq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$t* configDigester = null; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~ psq~ uq~ppppptÊ/** * Gracefully terminate use of the data source associated with this * application (if any). * * @deprecated Will no longer be required with multi-application support */ ptdestroyDataSourcesq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$tg synchronized (dataSources) { Iterator keys = dataSources.keySet().iterator(); while (keys.hasNext()) { String key = (String) keys.next(); getServletContext().removeAttribute(key); DataSource dataSource = findDataSource(key); if (dataSource instanceof GenericDataSource) { if (log.isDebugEnabled()) { log.debug(internal.getMessage("dataSource.destroy", key)); } try { ((GenericDataSource) dataSource).close(); } catch (SQLException e) { log.error(internal.getMessage("destroyDataSource", key), e); } } } dataSources.clear(); } sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~ psq~ uq~ppppptP/** * Gracefully terminate use of the internal MessageResources. */ ptdestroyInternalq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$t$ internal = null; sq~ uq~ppppq~$q~$xq÷qÇ[qñ%qñEqñ]sq~(sq~ uq~ppppq~ psq~ uq~pppppt¦/** * The flag to request backwards-compatible conversions for form bean * properties of the Java wrapper class types. * @since Struts 1.1 */ pt convertHackq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xpppt falseq~¥q~¥q~¥xsq~isq~ uq~ppppq~ psq~ uq~pppppt×// ---------------------------------------------------- HttpServlet Methods /** * Gracefully shut down this controller servlet, releasing any resources * that were allocated at initialization. */ ptdestroyq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tj if (log.isDebugEnabled()) { log.debug(internal.getMessage("finalizing")); } destroyApplications(); destroyDataSources(); destroyInternal(); getServletContext().removeAttribute(Action.ACTION_SERVLET_KEY); // FIXME - destroy ApplicationConfig and message resource instances sq~ uq~ppppq~¥q~¥xqñtqñ„qñ¤sq~isq~ uq~sq~bsq~ uq~ppppq‚ Õsq~ uq~pppppppt servletNameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq‚ Õsq~ uq~pppppppt urlPatternq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xppq~ psq~ uq~ppppptb// --------------------------------------------------------- Public Methods /** * Remember a servlet mapping from our web application deployment * descriptor, if it is for this servlet. * * @param servletName The name of the servlet being mapped * @param urlPattern The URL pattern to which this servlet is mapped */ ptaddServletMappingq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥ta if (log.isDebugEnabled()) { log.debug("Process servletName=" + servletName + ", urlPattern=" + urlPattern); } if (servletName == null) { return; } if (servletName.equals(this.servletName)) { this.servletMapping = urlPattern; } sq~ uq~ppppq~¥q~¥xqaxq/øqû±qýxsq~isq~ uq~ppppq~ psq~ uq~ppppptI/** * Return the debugging detail level for this servlet. */ ptgetDebugq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t( return (this.debug); sq~ uq~ppppq~¥q~¥xqÜhqÜxsq~isq~ uq~sq~bsq~ uq~ppppq‚sq~ uq~ppppppptmessageq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~bsq~ uq~ppppq‚sq~ uq~ppppppptlevelq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xppq~ psq~ uq~pppppt1/** * Log the specified message if the current debugging detail level for * this servlet has been set to an equal or higher value. Otherwise, * ignore this message. * * @param message Message to be logged * @param level Debugging detail level of this message */ ptlogq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tO if (debug >= level) { log(message); } sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~ psq~ uq~ppppptà// ------------------------------------------------------ Protected Methods /** * Gracefully terminate use of any sub-applications associated with this * application (if any). * @since Struts 1.1 */ ptdestroyApplicationsq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥t„ ArrayList values = new ArrayList(); Enumeration names = getServletContext().getAttributeNames(); while (names.hasMoreElements()) { values.add(names.nextElement()); } Iterator keys = values.iterator(); while (keys.hasNext()) { String name = (String) keys.next(); Object value = getServletContext().getAttribute(name); if (value instanceof ApplicationConfig) { ApplicationConfig config = (ApplicationConfig) value; try { getRequestProcessor(config).destroy(); } catch (Throwable t) { ; } PlugIn plugIns[] = (PlugIn[]) getServletContext().getAttribute (Action.PLUG_INS_KEY + config.getPrefix()); if (plugIns != null) { for (int i = 0; i < plugIns.length; i++) { int j = plugIns.length - (i + 1); plugIns[j].destroy(); } } } } sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~ psq~ uq~ppppptt/** * Gracefully release any configDigester instance that we have created. * @since Struts 1.1 */ ptdestroyConfigDigesterq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥t* configDigester = null; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~ psq~ uq~ppppptÊ/** * Gracefully terminate use of the data source associated with this * application (if any). * * @deprecated Will no longer be required with multi-application support */ ptdestroyDataSourcesq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥tg synchronized (dataSources) { Iterator keys = dataSources.keySet().iterator(); while (keys.hasNext()) { String key = (String) keys.next(); getServletContext().removeAttribute(key); DataSource dataSource = findDataSource(key); if (dataSource instanceof GenericDataSource) { if (log.isDebugEnabled()) { log.debug(internal.getMessage("dataSource.destroy", key)); } try { ((GenericDataSource) dataSource).close(); } catch (SQLException e) { log.error(internal.getMessage("destroyDataSource", key), e); } } } dataSources.clear(); } sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~ psq~ uq~ppppptP/** * Gracefully terminate use of the internal MessageResources. */ ptdestroyInternalq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥t$ internal = null; sq~ uq~ppppq~¥q~¥xqøqÇtqñÄqñäqñüqòq‚ Ÿqò,qò String value = null; ControllerConfig cc = config.getControllerConfig(); value = getServletConfig().getInitParameter("bufferSize"); if (value != null) { cc.setBufferSize(Integer.parseInt(value)); } value = getServletConfig().getInitParameter("content"); if (value != null) { cc.setContentType(value); } value = getServletConfig().getInitParameter("locale"); if (value != null) { if (value.equalsIgnoreCase("true") || value.equalsIgnoreCase("yes")) { cc.setLocale(true); } else { cc.setLocale(false); } } value = getServletConfig().getInitParameter("maxFileSize"); if (value != null) { cc.setMaxFileSize(value); } value = getServletConfig().getInitParameter("nocache"); if (value != null) { if (value.equalsIgnoreCase("true") || value.equalsIgnoreCase("yes")) { cc.setNocache(true); } else { cc.setNocache(false); } } value = getServletConfig().getInitParameter("tempDir"); if (value != null) { cc.setTempDir(value); } sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚}sq~ uq~ppppppptconfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~bpq~§xpppq~ psq~ uq~ppppptâ/** * Perform backwards-compatible configuration of an ActionFormBeans * collection, and expose it as a servlet context attribute (as was * used in Struts 1.0). Note that the current controller code does * not (and should not) reference this attribute for any reason. * * @param config The ApplicationConfig object for the default app * * @since Struts 1.1 * @deprecated Will be removed in a release after Struts 1.1. */ ptdefaultFormBeansConfigq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~xq~¥ts FormBeanConfig fbcs[] = config.findFormBeanConfigs(); ActionFormBeans afb = new ActionFormBeans(); afb.setFast(false); for (int i = 0; i < fbcs.length; i++) { afb.addFormBean((ActionFormBean) fbcs[i]); } afb.setFast(true); getServletContext().setAttribute(Action.FORM_BEANS_KEY, afb); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚•sq~ uq~ppppppptconfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~bpq~§xpppq~ psq~ uq~ppppptá/** * Perform backwards-compatible configuration of an ActionForwards * collection, and expose it as a servlet context attribute (as was * used in Struts 1.0). Note that the current controller code does * not (and should not) reference this attribute for any reason. * * @param config The ApplicationConfig object for the default app * * @since Struts 1.1 * @deprecated Will be removed in a release after Struts 1.1. */ ptdefaultForwardsConfigq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~xq~¥tc ForwardConfig fcs[] = config.findForwardConfigs(); ActionForwards af = new ActionForwards(); af.setFast(false); for (int i = 0; i < fcs.length; i++) { af.addForward((ActionForward) fcs[i]); } af.setFast(true); getServletContext().setAttribute(Action.FORWARDS_KEY, af); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚­sq~ uq~ppppppptconfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~bpq~§xpppq~ psq~ uq~ppppptá/** * Perform backwards-compatible configuration of an ActionMappings * collection, and expose it as a servlet context attribute (as was * used in Struts 1.0). Note that the current controller code does * not (and should not) reference this attribute for any reason. * * @param config The ApplicationConfig object for the default app * * @since Struts 1.1 * @deprecated Will be removed in a release after Struts 1.1. */ ptdefaultMappingsConfigq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~xq~¥t ActionConfig acs[] = config.findActionConfigs(); ActionMappings am = new ActionMappings(); am.setServlet(this); am.setFast(false); for (int i = 0; i < acs.length; i++) { am.addMapping((ActionMapping) acs[i]); } am.setFast(true); getServletContext().setAttribute(Action.MAPPINGS_KEY, am); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚Åsq~ uq~ppppppptconfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~bpq~§xpppq~ psq~ uq~pppppt†/** * Perform backwards-compatible configuration of the default application's * message resources configuration from servlet initialization parameters * (as were used in Struts 1.0). * * @param config The ApplicationConfig object for the default app * * @since Struts 1.1 * @deprecated Will be removed in a release after Struts 1.1. */ ptdefaultMessageResourcesConfigq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~xq~¥tª String value = null; MessageResourcesConfig mrc = config.findMessageResourcesConfig(Action.MESSAGES_KEY); if (mrc == null) { mrc = new MessageResourcesConfig(); mrc.setKey(Action.MESSAGES_KEY); config.addMessageResourcesConfig(mrc); } value = getServletConfig().getInitParameter("application"); if (value != null) { mrc.setParameter(value); } value= getServletConfig().getInitParameter("factory"); if (value != null) { mrc.setFactory(value); } value = getServletConfig().getInitParameter("null"); if (value != null) { if (value.equalsIgnoreCase("true") || value.equalsIgnoreCase("yes")) { mrc.setNull(true); } else { mrc.setNull(false); } } sq~ uq~ppppq~¥q~¥xsq~(sq~ uq~ppppq~ psq~ uq~ppppptò/** * The flag to request backwards-compatible conversions for form bean * properties of the Java wrapper class types. * @since Struts 1.1 */ /** * The flag to request backwards-compatible conversions for form bean * properties of the Java wrapper class types. * @since Struts 1.1 */ /** * The flag to request backwards-compatible conversions for form bean * properties of the Java wrapper class types. * @since Struts 1.1 */ pt convertNullq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xpppt falseq~–q~–q~–xsq~isq~ uq~ppppq~ psq~ uq~pppppt×// ---------------------------------------------------- HttpServlet Methods /** * Gracefully shut down this controller servlet, releasing any resources * that were allocated at initialization. */ ptdestroyq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tj if (log.isDebugEnabled()) { log.debug(internal.getMessage("finalizing")); } destroyApplications(); destroyDataSources(); destroyInternal(); getServletContext().removeAttribute(Action.ACTION_SERVLET_KEY); // FIXME - destroy ApplicationConfig and message resource instances sq~ uq~ppppq~–q~–xqòŒqòœqò¼sq~isq~ uq~sq~bsq~ uq~ppppq‚ûsq~ uq~pppppppt servletNameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq‚ûsq~ uq~pppppppt urlPatternq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xppq~ psq~ uq~ppppptb// --------------------------------------------------------- Public Methods /** * Remember a servlet mapping from our web application deployment * descriptor, if it is for this servlet. * * @param servletName The name of the servlet being mapped * @param urlPattern The URL pattern to which this servlet is mapped */ ptaddServletMappingq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–ta if (log.isDebugEnabled()) { log.debug("Process servletName=" + servletName + ", urlPattern=" + urlPattern); } if (servletName == null) { return; } if (servletName.equals(this.servletName)) { this.servletMapping = urlPattern; } sq~ uq~ppppq~–q~–xqaq0'qûÉqýsq~isq~ uq~ppppq~ psq~ uq~ppppptI/** * Return the debugging detail level for this servlet. */ ptgetDebugq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t( return (this.debug); sq~ uq~ppppq~–q~–xq܈qܘsq~isq~ uq~sq~bsq~ uq~ppppq‚+sq~ uq~ppppppptmessageq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~bsq~ uq~ppppq‚+sq~ uq~ppppppptlevelq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xppq~ psq~ uq~pppppt1/** * Log the specified message if the current debugging detail level for * this servlet has been set to an equal or higher value. Otherwise, * ignore this message. * * @param message Message to be logged * @param level Debugging detail level of this message */ ptlogq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tO if (debug >= level) { log(message); } sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~ psq~ uq~ppppptã// ------------------------------------------------------ Protected Methods /** * Gracefully terminate use of any application modules associated with this * application (if any). * @since Struts 1.1 */ ptdestroyApplicationsq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–t„ ArrayList values = new ArrayList(); Enumeration names = getServletContext().getAttributeNames(); while (names.hasMoreElements()) { values.add(names.nextElement()); } Iterator keys = values.iterator(); while (keys.hasNext()) { String name = (String) keys.next(); Object value = getServletContext().getAttribute(name); if (value instanceof ApplicationConfig) { ApplicationConfig config = (ApplicationConfig) value; try { getRequestProcessor(config).destroy(); } catch (Throwable t) { ; } PlugIn plugIns[] = (PlugIn[]) getServletContext().getAttribute (Action.PLUG_INS_KEY + config.getPrefix()); if (plugIns != null) { for (int i = 0; i < plugIns.length; i++) { int j = plugIns.length - (i + 1); plugIns[j].destroy(); } } } } sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~ psq~ uq~ppppptt/** * Gracefully release any configDigester instance that we have created. * @since Struts 1.1 */ ptdestroyConfigDigesterq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–t* configDigester = null; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~ psq~ uq~pppppt¿/** * Gracefully terminate use of the data source associated with this * application (if any). * * @deprecated Will no longer be required with module support */ ptdestroyDataSourcesq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–tg synchronized (dataSources) { Iterator keys = dataSources.keySet().iterator(); while (keys.hasNext()) { String key = (String) keys.next(); getServletContext().removeAttribute(key); DataSource dataSource = findDataSource(key); if (dataSource instanceof GenericDataSource) { if (log.isDebugEnabled()) { log.debug(internal.getMessage("dataSource.destroy", key)); } try { ((GenericDataSource) dataSource).close(); } catch (SQLException e) { log.error(internal.getMessage("destroyDataSource", key), e); } } } dataSources.clear(); } sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~ psq~ uq~ppppptP/** * Gracefully terminate use of the internal MessageResources. */ ptdestroyInternalq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–t$ internal = null; sq~ uq~ppppq~–q~–xqø qÇqòÜqòüqóqó,qóDqóTqódqótqó„qó”sq~isq~ uq~sq~bsq~ uq~ppppq‚‹sq~ uq~ppppppptconfigq~rxsq~ uq~pppppq~–q~—q~–q~bpq~˜xpppq~ psq~ uq~ppppptÊ// -------------------------------------------------------- Private Methods /** * Perform backwards-compatible configuration of the default module's * controller configuration from servlet initialization parameters (as * were used in Struts 1.0). * * @param config The ApplicationConfig object for the default module * * @since Struts 1.1 * @deprecated Will be removed in a release after Struts 1.1. */ ptdefaultControllerConfigq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~'bxq~–tÙ String value = null; ControllerConfig cc = config.getControllerConfig(); value = getServletConfig().getInitParameter("bufferSize"); if (value != null) { cc.setBufferSize(Integer.parseInt(value)); } value = getServletConfig().getInitParameter("content"); if (value != null) { cc.setContentType(value); } value = getServletConfig().getInitParameter("locale"); if (value != null) { if (value.equalsIgnoreCase("true") || value.equalsIgnoreCase("yes")) { cc.setLocale(true); } else { cc.setLocale(false); } } value = getServletConfig().getInitParameter("maxFileSize"); if (value != null) { cc.setMaxFileSize(value); } value = getServletConfig().getInitParameter("nocache"); if (value != null) { if (value.equalsIgnoreCase("true") || value.equalsIgnoreCase("yes")) { cc.setNocache(true); } else { cc.setNocache(false); } } value = getServletConfig().getInitParameter("multipartClass"); if (value != null) { cc.setMultipartClass(value); } value = getServletConfig().getInitParameter("tempDir"); if (value != null) { cc.setTempDir(value); } sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚£sq~ uq~ppppppptconfigq~rxsq~ uq~pppppq~–q~—q~–q~bpq~˜xpppq~ psq~ uq~ppppptâ/** * Perform backwards-compatible configuration of an ActionFormBeans * collection, and expose it as a servlet context attribute (as was * used in Struts 1.0). Note that the current controller code does * not (and should not) reference this attribute for any reason. * * @param config The ApplicationConfig object for the default app * * @since Struts 1.1 * @deprecated Will be removed in a release after Struts 1.1. */ ptdefaultFormBeansConfigq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~'bxq~–ts FormBeanConfig fbcs[] = config.findFormBeanConfigs(); ActionFormBeans afb = new ActionFormBeans(); afb.setFast(false); for (int i = 0; i < fbcs.length; i++) { afb.addFormBean((ActionFormBean) fbcs[i]); } afb.setFast(true); getServletContext().setAttribute(Action.FORM_BEANS_KEY, afb); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚»sq~ uq~ppppppptconfigq~rxsq~ uq~pppppq~–q~—q~–q~bpq~˜xpppq~ psq~ uq~ppppptá/** * Perform backwards-compatible configuration of an ActionForwards * collection, and expose it as a servlet context attribute (as was * used in Struts 1.0). Note that the current controller code does * not (and should not) reference this attribute for any reason. * * @param config The ApplicationConfig object for the default app * * @since Struts 1.1 * @deprecated Will be removed in a release after Struts 1.1. */ ptdefaultForwardsConfigq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~'bxq~–tc ForwardConfig fcs[] = config.findForwardConfigs(); ActionForwards af = new ActionForwards(); af.setFast(false); for (int i = 0; i < fcs.length; i++) { af.addForward((ActionForward) fcs[i]); } af.setFast(true); getServletContext().setAttribute(Action.FORWARDS_KEY, af); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚Ósq~ uq~ppppppptconfigq~rxsq~ uq~pppppq~–q~—q~–q~bpq~˜xpppq~ psq~ uq~ppppptá/** * Perform backwards-compatible configuration of an ActionMappings * collection, and expose it as a servlet context attribute (as was * used in Struts 1.0). Note that the current controller code does * not (and should not) reference this attribute for any reason. * * @param config The ApplicationConfig object for the default app * * @since Struts 1.1 * @deprecated Will be removed in a release after Struts 1.1. */ ptdefaultMappingsConfigq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~'bxq~–t ActionConfig acs[] = config.findActionConfigs(); ActionMappings am = new ActionMappings(); am.setServlet(this); am.setFast(false); for (int i = 0; i < acs.length; i++) { am.addMapping((ActionMapping) acs[i]); } am.setFast(true); getServletContext().setAttribute(Action.MAPPINGS_KEY, am); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚ësq~ uq~ppppppptconfigq~rxsq~ uq~pppppq~–q~—q~–q~bpq~˜xpppq~ psq~ uq~pppppt„/** * Perform backwards-compatible configuration of the default module's * message resources configuration from servlet initialization parameters * (as were used in Struts 1.0). * * @param config The ApplicationConfig object for the default module * * @since Struts 1.1 * @deprecated Will be removed in a release after Struts 1.1. */ ptdefaultMessageResourcesConfigq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~'bxq~–tª String value = null; MessageResourcesConfig mrc = config.findMessageResourcesConfig(Action.MESSAGES_KEY); if (mrc == null) { mrc = new MessageResourcesConfig(); mrc.setKey(Action.MESSAGES_KEY); config.addMessageResourcesConfig(mrc); } value = getServletConfig().getInitParameter("application"); if (value != null) { mrc.setParameter(value); } value= getServletConfig().getInitParameter("factory"); if (value != null) { mrc.setFactory(value); } value = getServletConfig().getInitParameter("null"); if (value != null) { if (value.equalsIgnoreCase("true") || value.equalsIgnoreCase("yes")) { mrc.setNull(true); } else { mrc.setNull(false); } } sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~ psq~ uq~pppppt×// ---------------------------------------------------- HttpServlet Methods /** * Gracefully shut down this controller servlet, releasing any resources * that were allocated at initialization. */ ptdestroyq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tü if (log.isDebugEnabled()) { log.debug(internal.getMessage("finalizing")); } destroyModules(); destroyDataSources(); destroyInternal(); getServletContext().removeAttribute(Globals.ACTION_SERVLET_KEY); // FIXME - destroy ModuleConfig and message resource instances // Release our LogFactory and Log instances (if any) ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); if (classLoader == null) { classLoader = ActionServlet.class.getClassLoader(); } try { LogFactory.release(classLoader); } catch (Throwable t) { ; // Servlet container doesn't have the latest version ; // of commons-logging-api.jar installed // FIXME Why is this dependent on the container's version of commons-logging? // Shouldn't this depend on the version packaged with Struts? } sq~ uq~ppppq~~q~~xqó´qóÄqóäsq~isq~ uq~sq~bsq~ uq~ppppq‚sq~ uq~pppppppt servletNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq‚sq~ uq~pppppppt urlPatternq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xppq~ psq~ uq~ppppptb// --------------------------------------------------------- Public Methods /** * Remember a servlet mapping from our web application deployment * descriptor, if it is for this servlet. * * @param servletName The name of the servlet being mapped * @param urlPattern The URL pattern to which this servlet is mapped */ ptaddServletMappingq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~ta if (log.isDebugEnabled()) { log.debug("Process servletName=" + servletName + ", urlPattern=" + urlPattern); } if (servletName == null) { return; } if (servletName.equals(this.servletName)) { this.servletMapping = urlPattern; } sq~ uq~ppppq~~q~~xqbq0žqü1qý¨sq~isq~ uq~ppppq~ psq~ uq~pppppt»/** * Return the debugging detail level for this servlet. * * @deprecated Configure the logging detail level in your underlying * logging implementation */ ptgetDebugq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t( return (this.debug); sq~ uq~ppppq~~q~~xqÝ8qÝHsq~isq~ uq~sq~bsq~ uq~ppppq‚Csq~ uq~ppppppptmessageq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~bsq~ uq~ppppq‚Csq~ uq~ppppppptlevelq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xppq~ psq~ uq~pppppt1/** * Log the specified message if the current debugging detail level for * this servlet has been set to an equal or higher value. Otherwise, * ignore this message. * * @param message Message to be logged * @param level Debugging detail level of this message */ ptlogq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tO if (debug >= level) { log(message); } sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ psq~ uq~pppppt// ------------------------------------------------------ Protected Methods /** * Gracefully terminate use of any modules associated with this * application (if any). * @since Struts 1.1 * @deprecated replaced by destroyModules() */ ptdestroyApplicationsq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t! destroyModules(); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ psq~ uq~ppppptŠ/** * Gracefully terminate use of any modules associated with this * application (if any). * @since Struts 1.1 */ ptdestroyModulesq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~tv ArrayList values = new ArrayList(); Enumeration names = getServletContext().getAttributeNames(); while (names.hasMoreElements()) { values.add(names.nextElement()); } Iterator keys = values.iterator(); while (keys.hasNext()) { String name = (String) keys.next(); Object value = getServletContext().getAttribute(name); if (value instanceof ModuleConfig) { ModuleConfig config = (ModuleConfig) value; try { getRequestProcessor(config).destroy(); } catch (ServletException e) { log.error(e); } getServletContext().removeAttribute(name); PlugIn plugIns[] = (PlugIn[]) getServletContext().getAttribute( Globals.PLUG_INS_KEY + config.getPrefix()); if (plugIns != null) { for (int i = 0; i < plugIns.length; i++) { int j = plugIns.length - (i + 1); plugIns[j].destroy(); } getServletContext().removeAttribute (Globals.PLUG_INS_KEY + config.getPrefix()); } } } sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ psq~ uq~ppppptt/** * Gracefully release any configDigester instance that we have created. * @since Struts 1.1 */ ptdestroyConfigDigesterq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t* configDigester = null; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ psq~ uq~pppppt¿/** * Gracefully terminate use of the data source associated with this * application (if any). * * @deprecated Will no longer be required with module support */ ptdestroyDataSourcesq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~tg synchronized (dataSources) { Iterator keys = dataSources.keySet().iterator(); while (keys.hasNext()) { String key = (String) keys.next(); getServletContext().removeAttribute(key); DataSource dataSource = findDataSource(key); if (dataSource instanceof GenericDataSource) { if (log.isDebugEnabled()) { log.debug(internal.getMessage("dataSource.destroy", key)); } try { ((GenericDataSource) dataSource).close(); } catch (SQLException e) { log.error(internal.getMessage("destroyDataSource", key), e); } } } dataSources.clear(); } sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~ psq~ uq~ppppptP/** * Gracefully terminate use of the internal MessageResources. */ ptdestroyInternalq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t$ internal = null; sq~ uq~ppppq~~q~~xqúqíqǦqôqí2q~ÒEq~Ò}qíUqímqí…qíqíµqíÍqô$qô4qôDqôTqôdqôtqíåqíýqîqî-qîEsq~isq~ uq~ppppq~ psq~ uq~pppppt×// ---------------------------------------------------- HttpServlet Methods /** * Gracefully shut down this controller servlet, releasing any resources * that were allocated at initialization. */ ptdestroyq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftü if (log.isDebugEnabled()) { log.debug(internal.getMessage("finalizing")); } destroyModules(); destroyDataSources(); destroyInternal(); getServletContext().removeAttribute(Globals.ACTION_SERVLET_KEY); // FIXME - destroy ModuleConfig and message resource instances // Release our LogFactory and Log instances (if any) ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); if (classLoader == null) { classLoader = ActionServlet.class.getClassLoader(); } try { LogFactory.release(classLoader); } catch (Throwable t) { ; // Servlet container doesn't have the latest version ; // of commons-logging-api.jar installed // FIXME Why is this dependent on the container's version of commons-logging? // Shouldn't this depend on the version packaged with Struts? } sq~ uq~ppppq~fq~fxqô”qô¤qôÄsq~isq~ uq~sq~bsq~ uq~ppppq‚Ãsq~ uq~pppppppt servletNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq‚Ãsq~ uq~pppppppt urlPatternq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxppq~ psq~ uq~ppppptb// --------------------------------------------------------- Public Methods /** * Remember a servlet mapping from our web application deployment * descriptor, if it is for this servlet. * * @param servletName The name of the servlet being mapped * @param urlPattern The URL pattern to which this servlet is mapped */ ptaddServletMappingq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fta if (log.isDebugEnabled()) { log.debug("Process servletName=" + servletName + ", urlPattern=" + urlPattern); } if (servletName == null) { return; } if (servletName.equals(this.servletName)) { this.servletMapping = urlPattern; } sq~ uq~ppppq~fq~fxqbhq1qüqqýÀsq~isq~ uq~ppppq~ psq~ uq~pppppt»/** * Return the debugging detail level for this servlet. * * @deprecated Configure the logging detail level in your underlying * logging implementation */ ptgetDebugq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft( return (this.debug); sq~ uq~ppppq~fq~fxqÝ qݰsq~isq~ uq~sq~bsq~ uq~ppppq‚ósq~ uq~ppppppptmessageq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~bsq~ uq~ppppq‚ósq~ uq~ppppppptlevelq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxppq~ psq~ uq~pppppt1/** * Log the specified message if the current debugging detail level for * this servlet has been set to an equal or higher value. Otherwise, * ignore this message. * * @param message Message to be logged * @param level Debugging detail level of this message */ ptlogq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftO if (debug >= level) { log(message); } sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ psq~ uq~pppppt// ------------------------------------------------------ Protected Methods /** * Gracefully terminate use of any modules associated with this * application (if any). * @since Struts 1.1 * @deprecated replaced by destroyModules() */ ptdestroyApplicationsq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft! destroyModules(); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ psq~ uq~ppppptŠ/** * Gracefully terminate use of any modules associated with this * application (if any). * @since Struts 1.1 */ ptdestroyModulesq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ftv ArrayList values = new ArrayList(); Enumeration names = getServletContext().getAttributeNames(); while (names.hasMoreElements()) { values.add(names.nextElement()); } Iterator keys = values.iterator(); while (keys.hasNext()) { String name = (String) keys.next(); Object value = getServletContext().getAttribute(name); if (value instanceof ModuleConfig) { ModuleConfig config = (ModuleConfig) value; try { getRequestProcessor(config).destroy(); } catch (ServletException e) { log.error(e); } getServletContext().removeAttribute(name); PlugIn plugIns[] = (PlugIn[]) getServletContext().getAttribute( Globals.PLUG_INS_KEY + config.getPrefix()); if (plugIns != null) { for (int i = 0; i < plugIns.length; i++) { int j = plugIns.length - (i + 1); plugIns[j].destroy(); } getServletContext().removeAttribute (Globals.PLUG_INS_KEY + config.getPrefix()); } } } sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ psq~ uq~ppppptt/** * Gracefully release any configDigester instance that we have created. * @since Struts 1.1 */ ptdestroyConfigDigesterq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft* configDigester = null; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ psq~ uq~pppppt¿/** * Gracefully terminate use of the data source associated with this * application (if any). * * @deprecated Will no longer be required with module support */ ptdestroyDataSourcesq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ftg synchronized (dataSources) { Iterator keys = dataSources.keySet().iterator(); while (keys.hasNext()) { String key = (String) keys.next(); getServletContext().removeAttribute(key); DataSource dataSource = findDataSource(key); if (dataSource instanceof GenericDataSource) { if (log.isDebugEnabled()) { log.debug(internal.getMessage("dataSource.destroy", key)); } try { ((GenericDataSource) dataSource).close(); } catch (SQLException e) { log.error(internal.getMessage("destroyDataSource", key), e); } } } dataSources.clear(); } sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~ psq~ uq~ppppptP/** * Gracefully terminate use of the internal MessageResources. */ ptdestroyInternalq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft$ internal = null; sq~ uq~ppppq~fq~fxqû qîîqÇ¿qôäqïq~Òq~ÒÕqï)qïAqïYqïqqï‰qï¡qõqõqõ$qõ4qõDqõTqï¹qïÑqïéqðqðppppppppq~Bsq~ uq~pppppppt ActionServletq~=xsq~ uq~q€ëq~Àlq~Ëäq'Fsq~Csq~ uq~ppppq~Hsq~ uq~ppppsq~#q~ pxq Öqóqpëq€hùq~À›ppppppq~$sq~ uq~q~Èœq,3ppsq~ uq~q~ȸpppq~$q~$q~bsq~ uq~q'Zppppq~$sq~ uq~ppppsq~ juq~kq~ gsq~isq~ uq~ppppq~Esq~ uq~pppppt£// ------------------------------------------------------------- Properties /** * Return the controller servlet instance to which we are attached. */ pt getServletq~=xsq~ uq~pppppq~$q~yq~$q~ ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t* return (this.servlet); sq~ uq~ppppq~$q~$xsq~bsq~ uq~ppppsq~isq~ uq~q‚ˆpppq~Esq~ uq~pppppt/** * Set the controller servlet instance to which we are attached (if * servlet is non-null), or release any allocated resources * (if servlet is null). * * @param servlet The new controller servlet, if any */ pt setServletq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t+ this.servlet = servlet; sq~ uq~ppppq~$q~$xsq~ uq~ppppppptservletq~=xsq~ uq~pppppq~$q~yq~$q~ ppq~$xq~zqÅòqÆq~,pq~,åq~,øqZfqZÇq~Áhq~¹Jq~¹kq~`q~×q~½q»žq~¨q»‘qƒ‡q~ÀÚq~ÁMsq~isq~ uq~ppppq~Esq~ uq~pppppt£// ------------------------------------------------------------- Properties /** * Return the controller servlet instance to which we are attached. */ pt getServletq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t* return (this.servlet); sq~ uq~ppppq~¥q~¥xsq~bsq~ uq~ppppsq~isq~ uq~q‚°pppq~Esq~ uq~pppppt/** * Set the controller servlet instance to which we are attached (if * servlet is non-null), or release any allocated resources * (if servlet is null). * * @param servlet The new controller servlet, if any */ pt setServletq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t+ this.servlet = servlet; sq~ uq~ppppq~¥q~¥xsq~ uq~ppppppptservletq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ ppq~§xqÆqÆ-q~-¾q~-Ñq[.q Ìq·­q~¹ˆqÀ:q»­qÂGqÂrq…ÿq~Á…q[•q úq~.—q~.ªq»UqÆ‚qÆ•sq~isq~ uq~ppppq~Esq~ uq~pppppt£// ------------------------------------------------------------- Properties /** * Return the controller servlet instance to which we are attached. */ pt getServletq~rxsq~ uq~pppppq~–q~—q~–q~ ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t* return (this.servlet); sq~ uq~ppppq~–q~–xsq~bsq~ uq~ppppsq~isq~ uq~q‚Øpppq~Esq~ uq~pppppt/** * Set the controller servlet instance to which we are attached (if * servlet is non-null), or release any allocated resources * (if servlet is null). * * @param servlet The new controller servlet, if any */ pt setServletq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t+ this.servlet = servlet; sq~ uq~ppppq~–q~–xsq~ uq~ppppppptservletq~rxsq~ uq~pppppq~–q~—q~–q~ ppq~˜xq~Ï6q~Ïfq~φq~ºjqÀiq»¼qÂõqà q»yq»†q»Õqˆwq~Á¥q¡(q[üq~/pq~/ƒq¿[sq~isq~ uq~ppppq~Esq~ uq~pppppt£// ------------------------------------------------------------- Properties /** * Return the controller servlet instance to which we are attached. */ pt getServletq~{xsq~ uq~pppppq~~q~q~~q~ ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t* return (this.servlet); sq~ uq~ppppq~~q~~xsq~bsq~ uq~ppppsq~isq~ uq~q‚pppq~Esq~ uq~pppppt/** * Set the controller servlet instance to which we are attached (if * servlet is non-null), or release any allocated resources * (if servlet is null). * * @param servlet The new controller servlet, if any */ pt setServletq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t+ this.servlet = servlet; sq~ uq~ppppq~~q~~xsq~ uq~ppppppptservletq~{xsq~ uq~pppppq~~q~q~~q~ ppq~€xqÆêqÆýq¦ºq~Ðq~Ð2q~ÐRqÀýqÁ(q¾\q¾oqãqÃÎq‹óq~Ââq%"q%yq¡Vq\cq~0Iq~0\qÃSsq~isq~ uq~ppppq~Esq~ uq~pppppt£// ------------------------------------------------------------- Properties /** * Return the controller servlet instance to which we are attached. */ pt getServletq~cxsq~ uq~pppppq~fq~gq~fq~ ppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft* return (this.servlet); sq~ uq~ppppq~fq~fxsq~bsq~ uq~ppppsq~isq~ uq~q‚(pppq~Esq~ uq~pppppt/** * Set the controller servlet instance to which we are attached (if * servlet is non-null), or release any allocated resources * (if servlet is null). * * @param servlet The new controller servlet, if any */ pt setServletq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft+ this.servlet = servlet; sq~ uq~ppppq~fq~fxsq~ uq~ppppppptservletq~cxsq~ uq~pppppq~fq~gq~fq~ ppq~hxqÇRqÇeq§¢q~Ðòq~Ñ"q~ÑBqÁÆqÁñq¿,q¿?qÄQqÄ|qŽq~ÃZq&)pq~Äxq~$ppxpq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xq‚xq‚‹qÇßq¶qÈq~< qöqö(qÛêqÛúqö@qöXqöpqöq­qö¨qöÈqöàq~q‚ q‚³qÈ?qÈoqÈŸqÈÏq÷q÷0qÜ@qÜPq÷Hq÷`q÷xq÷˜qq÷°q÷Ðq÷èq³]psq~ uq~ppppq~$q~$q~Ásq~ uq~ q~;[qIqÌqóq~ƒq~?¹q~Bkpq~$sq~ uq~ppppsq~ uq~q´²qµ=q·êq¸uq«ñq¬q»’q¼q¬q¿˜qÀ#q¬`qÃqÄq¬§ppppq~Äxq~$ppxq~ßq~QbqYæq~wq.q-¼q~ýq3_q~éq~,_q~}q~Iq~ pqZcq~Ęq~)Œq]bqVLq~À§qW=qXNq~¸üqXÌq~±q™q\…q~,Hsq~Qsq~ uq~ppppq~Bsq~ uq~pppppt V/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/action/ActionMessage.java,v 1.6 2003/04/15 00:18:45 dgraham Exp $ * $Revision: 1.6 $ * $Date: 2003/04/15 00:18:45 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** *

            An encapsulation of an individual message returned by the * validate() method of an ActionForm, consisting * of a message key (to be used to look up message text in an appropriate * message resources database) plus up to four placeholder objects that can * be used for parametric replacement in the message text.

            * * @author Craig R. McClanahan * @author David Winterfeldt * @version $Revision: 1.6 $ $Date: 2003/04/15 00:18:45 $ * @since Struts 1.1 */ ptActionMessage.javaq~fxsq~ uq~ppppsq~ uq~q~}pppq~fxq~q~)ØqZBq~xqY#q~q~Íq~ÁqX¥q~À(sq~Qsq~ uq~ppppq~Bsq~ uq~ppppptY/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/action/ActionError.java,v 1.9 2003/04/15 00:18:45 dgraham Exp $ * $Revision: 1.9 $ * $Date: 2003/04/15 00:18:45 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** *

            An encapsulation of an individual error message returned by the * validate() method of an ActionForm, consisting * of a message key (to be used to look up message text in an appropriate * message resources database) plus up to four placeholder objects that can * be used for parametric replacement in the message text.

            * *

            The placeholder objects are referenced in the message text using the same * syntax used by the JDK MessageFormat class. Thus, the first * placeholder is '{0}', the second is '{1}', etc.

            * *

            Since Struts 1.1 ActionError extends ActionMessage. * * @author Craig R. McClanahan * @version $Revision: 1.9 $ $Date: 2003/04/15 00:18:45 $ */ ptActionError.javaq~fxsq~ uq~ppppsq~ uq~q~ßpppq~fxq~"qÅqWq~bq.Âq2­qXq6pppppppppq~$Csq~ uq~ppppppptactionq~=xsq~ uq~ppppq~ÈŽsq~ uq~qpppq~$ppxsq~ uq~pppppppq~ðq~=xsq~ uq~ sq~Csq~ uq~ppppq~ísq~ uq~ppppsq~#q~ßxq~R¼q~QVq%žqpÍqipppppq~$sq~ uq~qY¦pppsq~ uq~q~}pppq~$q~$q‚esq~ uq~pppppq~$sq~ uq~ppppsq~ uq~"q~Q€qYéq]¸q%¾q&·qj™q~Q qYùq^0q'²qlqZ q~Qçq^¨qnq(Íqe@q~R-q_ qZqoŸq#Iq$bq’q~Rsq_˜qZ)qq;q%}q“`ppppq~Äxq~$ppxsq~ uq~ppppptÂ/** * Construct an action error with the specified replacement values. * * @param key Message key for this error message * @param value0 First replacement value */ pq~ðq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t' super(key, value0); sq~ uq~ppppq~$q~$xsq~ uq~ppppppptvalue0q~=xsq~ uq~pppppq~$q~yq~$q~«pq~$xq~q~ q~,q~4q~q†äq†þq‡qÁqzqv’qvËqs7qwqx¹qzŒq}Ðq…q:qsqzãq¬qåq‚qlÍq~±q~Ðq~Øq~÷q~ÿq~q~&q~.q~6q~>q~]q˜¹q˜Ñq˜ñq™true if there are no messages recorded * in this collection, or false otherwise. */ ptemptyq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t2 return (messages.size() == 0); sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~Isq~ uq~ppppptÜ/** * Return the set of all recorded messages, without distinction * by which property the messages are associated with. If there are * no messages recorded, an empty enumeration is returned. */ ptgetq~=xsq~ uq~pppppq~$q~yq~$q~öpq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tâ if (messages.size() == 0) return (Collections.EMPTY_LIST.iterator()); ArrayList results = new ArrayList(); ArrayList actionItems = new ArrayList(); for (Iterator i = messages.values().iterator(); i.hasNext(); ) actionItems.add(i.next()); // Sort ActionMessageItems based on the initial order the // property/key was added to ActionMessages. Collections.sort(actionItems, new Comparator() { public int compare(Object o1, Object o2) { return ((ActionMessageItem) o1).getOrder() - ((ActionMessageItem) o2).getOrder(); } }); for (Iterator i = actionItems.iterator(); i.hasNext(); ) { ActionMessageItem ami = (ActionMessageItem)i.next(); for (Iterator messages = ami.getList().iterator(); messages.hasNext(); ) results.add(messages.next()); } return (results.iterator()); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq‚nsq~ uq~ppppppptpropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~Isq~ uq~ppppptê/** * Return the set of messages related to a specific property. * If there are no such messages, an empty enumeration is returned. * * @param property Property name (or ActionMessages.GLOBAL_MESSAGE) */ ptgetq~=xsq~ uq~pppppq~$q~yq~$q~öpq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tè ActionMessageItem ami = (ActionMessageItem) messages.get(property); if (ami == null) return (Collections.EMPTY_LIST.iterator()); else return (ami.getList().iterator()); sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~Isq~ uq~ppppptS/** * Return the set of property names for which at least one message has * been recorded. If there are no messages, an empty Iterator is returned. * If you have recorded global messages, the String value of * ActionMessages.GLOBAL_MESSAGE will be one of the returned * property names. */ pt propertiesq~=xsq~ uq~pppppq~$q~yq~$q~öpq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t: return (messages.keySet().iterator()); sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~Isq~ uq~pppppt/** * Return the number of messages recorded for all properties (including * global messages). NOTE - it is more efficient to call * empty() if all you care about is whether or not there are * any messages at all. */ ptsizeq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t int total = 0; for (Iterator i = messages.values().iterator(); i.hasNext(); ) { ActionMessageItem ami = (ActionMessageItem) i.next(); total += ami.getList().size(); } return (total); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq‚¦sq~ uq~ppppppptpropertyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~Isq~ uq~pppppt¬/** * Return the number of messages associated with the specified property. * * @param property Property name (or ActionMessages.GLOBAL_MESSAGE) */ ptsizeq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tÆ ActionMessageItem ami = (ActionMessageItem) messages.get(property); if (ami == null) return (0); else return (ami.getList().size()); sq~ uq~ppppq~$q~$xq2§q‚´sq~isq~ uq~ppppq~Isq~ uq~ppppptA/** * Clear all messages recorded by this object. */ ptclearq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t% messages.clear(); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~Isq~ uq~pppppt/** * Return true if there are no messages recorded * in this collection, or false otherwise. */ ptemptyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t2 return (messages.size() == 0); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~Isq~ uq~ppppptÜ/** * Return the set of all recorded messages, without distinction * by which property the messages are associated with. If there are * no messages recorded, an empty enumeration is returned. */ ptgetq~¢xsq~ uq~pppppq~¥q~¦q~¥q~öpq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tâ if (messages.size() == 0) return (Collections.EMPTY_LIST.iterator()); ArrayList results = new ArrayList(); ArrayList actionItems = new ArrayList(); for (Iterator i = messages.values().iterator(); i.hasNext(); ) actionItems.add(i.next()); // Sort ActionMessageItems based on the initial order the // property/key was added to ActionMessages. Collections.sort(actionItems, new Comparator() { public int compare(Object o1, Object o2) { return ((ActionMessageItem) o1).getOrder() - ((ActionMessageItem) o2).getOrder(); } }); for (Iterator i = actionItems.iterator(); i.hasNext(); ) { ActionMessageItem ami = (ActionMessageItem)i.next(); for (Iterator messages = ami.getList().iterator(); messages.hasNext(); ) results.add(messages.next()); } return (results.iterator()); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚îsq~ uq~ppppppptpropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~Isq~ uq~ppppptê/** * Return the set of messages related to a specific property. * If there are no such messages, an empty enumeration is returned. * * @param property Property name (or ActionMessages.GLOBAL_MESSAGE) */ ptgetq~¢xsq~ uq~pppppq~¥q~¦q~¥q~öpq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tè ActionMessageItem ami = (ActionMessageItem) messages.get(property); if (ami == null) return (Collections.EMPTY_LIST.iterator()); else return (ami.getList().iterator()); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~Isq~ uq~ppppptS/** * Return the set of property names for which at least one message has * been recorded. If there are no messages, an empty Iterator is returned. * If you have recorded global messages, the String value of * ActionMessages.GLOBAL_MESSAGE will be one of the returned * property names. */ pt propertiesq~¢xsq~ uq~pppppq~¥q~¦q~¥q~öpq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t: return (messages.keySet().iterator()); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~Isq~ uq~pppppt/** * Return the number of messages recorded for all properties (including * global messages). NOTE - it is more efficient to call * empty() if all you care about is whether or not there are * any messages at all. */ ptsizeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t int total = 0; for (Iterator i = messages.values().iterator(); i.hasNext(); ) { ActionMessageItem ami = (ActionMessageItem) i.next(); total += ami.getList().size(); } return (total); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚&sq~ uq~ppppppptpropertyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~Isq~ uq~pppppt¬/** * Return the number of messages associated with the specified property. * * @param property Property name (or ActionMessages.GLOBAL_MESSAGE) */ ptsizeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tÆ ActionMessageItem ami = (ActionMessageItem) messages.get(property); if (ami == null) return (0); else return (ami.getList().size()); sq~ uq~ppppq~¥q~¥xq3?sq~esq~ uq~ppppq~Isq~ uq~pppppt// --------------------------------------------------------- Public Methods /** * Create an empty ActionMessages object. */ ptActionMessagesq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t super(); sq~ uq~ppppq~–q~–xsq~esq~ uq~sq~bsq~ uq~ppppq‚Nsq~ uq~ppppppptmessagesq~rxsq~ uq~pppppq~–q~—q~–q~Ipq~˜xpppq~Isq~ uq~ppppptÌ/** * Create an ActionMessages object initialized with the given * messages. * * @param messages The messages to be initially added to this object. * @since Struts 1.1 */ pq‚Dq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t& super(); this.add(messages); sq~ uq~ppppq~–q~–xq‚Ôsq~isq~ uq~sq~bsq~ uq~ppppq‚esq~ uq~ppppppptmessagesq~rxsq~ uq~pppppq~–q~—q~–q~Ipq~˜xpppq~Isq~ uq~pppppt,/** * Adds the messages from the given ActionMessages object to * this set of messages. The messages are added in the order they are returned from * the properties() method. If a message's property is already in the current * ActionMessages object it is added to the end of the list for that * property. If a message's property is not in the current list it is added to the end * of the properties. * * @param messages The ActionMessages object to be added. * @since Struts 1.1 */ ptaddq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tk // loop over properties Iterator props = messages.properties(); while (props.hasNext()) { String property = (String) props.next(); // loop over messages for each property Iterator msgs = messages.get(property); while (msgs.hasNext()) { ActionMessage msg = (ActionMessage) msgs.next(); this.add(property, msg); } } sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~Isq~ uq~pppppt;/** * Clear all messages recorded by this object. */ ptclearq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t messages.clear(); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~Isq~ uq~ppppptª/** * Return true if there are no messages recorded * in this collection, or false otherwise. * @deprecated Use isEmpty instead. */ ptemptyq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return (this.isEmpty()); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~Isq~ uq~pppppt›/** * Return true if there are no messages recorded * in this collection, or false otherwise. * @since Struts 1.1 */ ptisEmptyq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t$ return (messages.isEmpty()); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~Isq~ uq~ppppptÐ/** * Return the set of all recorded messages, without distinction * by which property the messages are associated with. If there are * no messages recorded, an empty enumeration is returned. */ ptgetq~rxsq~ uq~pppppq~–q~—q~–q~öpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–ti if (messages.size() == 0) { return (Collections.EMPTY_LIST.iterator()); } ArrayList results = new ArrayList(); ArrayList actionItems = new ArrayList(); for (Iterator i = messages.values().iterator(); i.hasNext();) { actionItems.add(i.next()); } // Sort ActionMessageItems based on the initial order the // property/key was added to ActionMessages. Collections.sort(actionItems, new Comparator() { public int compare(Object o1, Object o2) { return ((ActionMessageItem) o1).getOrder() - ((ActionMessageItem) o2).getOrder(); } }); for (Iterator i = actionItems.iterator(); i.hasNext();) { ActionMessageItem ami = (ActionMessageItem) i.next(); for (Iterator messages = ami.getList().iterator(); messages.hasNext();) { results.add(messages.next()); } } return (results.iterator()); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚½sq~ uq~ppppppptpropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~Isq~ uq~ppppptÛ/** * Return the set of messages related to a specific property. * If there are no such messages, an empty enumeration is returned. * * @param property Property name (or ActionMessages.GLOBAL_MESSAGE) */ ptgetq~rxsq~ uq~pppppq~–q~—q~–q~öpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tÓ ActionMessageItem item = (ActionMessageItem) messages.get(property); if (item == null) { return (Collections.EMPTY_LIST.iterator()); } else { return (item.getList().iterator()); } sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~Isq~ uq~ppppptA/** * Return the set of property names for which at least one message has * been recorded. If there are no messages, an empty Iterator is returned. * If you have recorded global messages, the String value of * ActionMessages.GLOBAL_MESSAGE will be one of the returned * property names. */ pt propertiesq~rxsq~ uq~pppppq~–q~—q~–q~öpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t1 return (messages.keySet().iterator()); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~Isq~ uq~pppppt/** * Return the number of messages recorded for all properties (including * global messages). NOTE - it is more efficient to call * empty() if all you care about is whether or not there are * any messages at all. */ ptsizeq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tÕ int total = 0; for (Iterator i = messages.values().iterator(); i.hasNext();) { ActionMessageItem ami = (ActionMessageItem) i.next(); total += ami.getList().size(); } return (total); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚õsq~ uq~ppppppptpropertyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~Isq~ uq~pppppt /** * Return the number of messages associated with the specified property. * * @param property Property name (or ActionMessages.GLOBAL_MESSAGE) */ ptsizeq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tŸ ActionMessageItem ami = (ActionMessageItem) messages.get(property); if (ami == null) return (0); else return (ami.getList().size()); sq~ uq~ppppq~–q~–xq3äsq~esq~ uq~ppppq~Isq~ uq~pppppt–// --------------------------------------------------------- Public Methods /** * Create an empty ActionMessages object. */ pq‚Dq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t super(); sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq‚sq~ uq~ppppppptmessagesq~{xsq~ uq~pppppq~~q~q~~q~Ipq~€xpppq~Isq~ uq~pppppt/** * Create an ActionMessages object initialized with the given * messages. * * @param messages The messages to be initially added to this object. * This parameter can be null. * @since Struts 1.1 */ pq‚Dq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t5 super(); this.add(messages); sq~ uq~ppppq~~q~~xq‚ôsq~isq~ uq~sq~bsq~ uq~ppppq‚3sq~ uq~ppppppptmessagesq~{xsq~ uq~pppppq~~q~q~~q~Ipq~€xpppq~Isq~ uq~pppppt}/** * Adds the messages from the given ActionMessages object to * this set of messages. The messages are added in the order they are returned from * the properties() method. If a message's property is already in the current * ActionMessages object it is added to the end of the list for that * property. If a message's property is not in the current list it is added to the end * of the properties. * * @param messages The ActionMessages object to be added. * This parameter can be null. * @since Struts 1.1 */ ptaddq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t if (messages == null) { return; } // loop over properties Iterator props = messages.properties(); while (props.hasNext()) { String property = (String) props.next(); // loop over messages for each property Iterator msgs = messages.get(property); while (msgs.hasNext()) { ActionMessage msg = (ActionMessage) msgs.next(); this.add(property, msg); } } sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~Isq~ uq~ppppptA/** * Clear all messages recorded by this object. */ ptclearq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t% messages.clear(); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~Isq~ uq~pppppt¶/** * Return true if there are no messages recorded * in this collection, or false otherwise. * @deprecated Use isEmpty instead. */ ptemptyq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t( return (this.isEmpty()); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~Isq~ uq~pppppt§/** * Return true if there are no messages recorded * in this collection, or false otherwise. * @since Struts 1.1 */ ptisEmptyq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t0 return (messages.isEmpty()); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~Isq~ uq~ppppptÜ/** * Return the set of all recorded messages, without distinction * by which property the messages are associated with. If there are * no messages recorded, an empty enumeration is returned. */ ptgetq~{xsq~ uq~pppppq~~q~q~~q~öpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t if (messages.isEmpty()) { return (Collections.EMPTY_LIST.iterator()); } ArrayList results = new ArrayList(); ArrayList actionItems = new ArrayList(); for (Iterator i = messages.values().iterator(); i.hasNext();) { actionItems.add(i.next()); } // Sort ActionMessageItems based on the initial order the // property/key was added to ActionMessages. Collections.sort(actionItems, new Comparator() { public int compare(Object o1, Object o2) { return ((ActionMessageItem) o1).getOrder() - ((ActionMessageItem) o2).getOrder(); } }); for (Iterator i = actionItems.iterator(); i.hasNext();) { ActionMessageItem ami = (ActionMessageItem) i.next(); for (Iterator messages = ami.getList().iterator(); messages.hasNext();) { results.add(messages.next()); } } return (results.iterator()); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚‹sq~ uq~ppppppptpropertyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~Isq~ uq~ppppptê/** * Return the set of messages related to a specific property. * If there are no such messages, an empty enumeration is returned. * * @param property Property name (or ActionMessages.GLOBAL_MESSAGE) */ ptgetq~{xsq~ uq~pppppq~~q~q~~q~öpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t ActionMessageItem item = (ActionMessageItem) messages.get(property); if (item == null) { return (Collections.EMPTY_LIST.iterator()); } else { return (item.getList().iterator()); } sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~Isq~ uq~ppppptS/** * Return the set of property names for which at least one message has * been recorded. If there are no messages, an empty Iterator is returned. * If you have recorded global messages, the String value of * ActionMessages.GLOBAL_MESSAGE will be one of the returned * property names. */ pt propertiesq~{xsq~ uq~pppppq~~q~q~~q~öpq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t: return (messages.keySet().iterator()); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~Isq~ uq~pppppt/** * Return the number of messages recorded for all properties (including * global messages). NOTE - it is more efficient to call * empty() if all you care about is whether or not there are * any messages at all. */ ptsizeq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t int total = 0; for (Iterator i = messages.values().iterator(); i.hasNext();) { ActionMessageItem ami = (ActionMessageItem) i.next(); total += ami.getList().size(); } return (total); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚Ãsq~ uq~ppppppptpropertyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~Isq~ uq~pppppt¬/** * Return the number of messages associated with the specified property. * * @param property Property name (or ActionMessages.GLOBAL_MESSAGE) */ ptsizeq~{xsq~ uq~pppppq~~q~q~~q~ pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t× ActionMessageItem ami = (ActionMessageItem) messages.get(property); if (ami == null) { return (0); } else { return (ami.getList().size()); } sq~ uq~ppppq~~q~~xq4sq~esq~ uq~ppppq~Isq~ uq~pppppt–// --------------------------------------------------------- Public Methods /** * Create an empty ActionMessages object. */ pq‚Dq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft super(); sq~ uq~ppppq~fq~fxsq~esq~ uq~sq~bsq~ uq~ppppq‚êsq~ uq~ppppppptmessagesq~cxsq~ uq~pppppq~fq~gq~fq~Ipq~hxpppq~Isq~ uq~pppppt/** * Create an ActionMessages object initialized with the given * messages. * * @param messages The messages to be initially added to this object. * This parameter can be null. * @since Struts 1.1 */ pq‚Dq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft5 super(); this.add(messages); sq~ uq~ppppq~fq~fxq‚sq~isq~ uq~sq~bsq~ uq~ppppq‚sq~ uq~ppppppptmessagesq~cxsq~ uq~pppppq~fq~gq~fq~Ipq~hxpppq~Isq~ uq~pppppt}/** * Adds the messages from the given ActionMessages object to * this set of messages. The messages are added in the order they are returned from * the properties() method. If a message's property is already in the current * ActionMessages object it is added to the end of the list for that * property. If a message's property is not in the current list it is added to the end * of the properties. * * @param messages The ActionMessages object to be added. * This parameter can be null. * @since Struts 1.1 */ ptaddq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft if (messages == null) { return; } // loop over properties Iterator props = messages.properties(); while (props.hasNext()) { String property = (String) props.next(); // loop over messages for each property Iterator msgs = messages.get(property); while (msgs.hasNext()) { ActionMessage msg = (ActionMessage) msgs.next(); this.add(property, msg); } } sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~Isq~ uq~ppppptA/** * Clear all messages recorded by this object. */ ptclearq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft% messages.clear(); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~Isq~ uq~pppppt¶/** * Return true if there are no messages recorded * in this collection, or false otherwise. * @deprecated Use isEmpty instead. */ ptemptyq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft( return (this.isEmpty()); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~Isq~ uq~pppppt§/** * Return true if there are no messages recorded * in this collection, or false otherwise. * @since Struts 1.1 */ ptisEmptyq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft0 return (messages.isEmpty()); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~Isq~ uq~ppppptÜ/** * Return the set of all recorded messages, without distinction * by which property the messages are associated with. If there are * no messages recorded, an empty enumeration is returned. */ ptgetq~cxsq~ uq~pppppq~fq~gq~fq~öpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft if (messages.isEmpty()) { return (Collections.EMPTY_LIST.iterator()); } ArrayList results = new ArrayList(); ArrayList actionItems = new ArrayList(); for (Iterator i = messages.values().iterator(); i.hasNext();) { actionItems.add(i.next()); } // Sort ActionMessageItems based on the initial order the // property/key was added to ActionMessages. Collections.sort(actionItems, new Comparator() { public int compare(Object o1, Object o2) { return ((ActionMessageItem) o1).getOrder() - ((ActionMessageItem) o2).getOrder(); } }); for (Iterator i = actionItems.iterator(); i.hasNext();) { ActionMessageItem ami = (ActionMessageItem) i.next(); for (Iterator messages = ami.getList().iterator(); messages.hasNext();) { results.add(messages.next()); } } return (results.iterator()); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚Ysq~ uq~ppppppptpropertyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~Isq~ uq~ppppptê/** * Return the set of messages related to a specific property. * If there are no such messages, an empty enumeration is returned. * * @param property Property name (or ActionMessages.GLOBAL_MESSAGE) */ ptgetq~cxsq~ uq~pppppq~fq~gq~fq~öpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft ActionMessageItem item = (ActionMessageItem) messages.get(property); if (item == null) { return (Collections.EMPTY_LIST.iterator()); } else { return (item.getList().iterator()); } sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~Isq~ uq~ppppptS/** * Return the set of property names for which at least one message has * been recorded. If there are no messages, an empty Iterator is returned. * If you have recorded global messages, the String value of * ActionMessages.GLOBAL_MESSAGE will be one of the returned * property names. */ pt propertiesq~cxsq~ uq~pppppq~fq~gq~fq~öpq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft: return (messages.keySet().iterator()); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~Isq~ uq~pppppt/** * Return the number of messages recorded for all properties (including * global messages). NOTE - it is more efficient to call * empty() if all you care about is whether or not there are * any messages at all. */ ptsizeq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft int total = 0; for (Iterator i = messages.values().iterator(); i.hasNext();) { ActionMessageItem ami = (ActionMessageItem) i.next(); total += ami.getList().size(); } return (total); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚‘sq~ uq~ppppppptpropertyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~Isq~ uq~pppppt¬/** * Return the number of messages associated with the specified property. * * @param property Property name (or ActionMessages.GLOBAL_MESSAGE) */ ptsizeq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft× ActionMessageItem ami = (ActionMessageItem) messages.get(property); if (ami == null) { return (0); } else { return (ami.getList().size()); } sq~ uq~ppppq~fq~fxq5Vpppppq~Bsq~ uq~pppppppq‚Dq~=xsq~ uq~ qb†sq~Csq~ uq~ppppq~ísq~ uq~ppppsq~#q~Ixq€€½q€4qpåpppppq~$sq~ uq~qY˜pppsq~ uq~ppppq~$q~$q~sq~ uq~q~Qbppppq~$sq~ uq~ppppsq~ uq~qö«q-fq-Yq…jq÷³q-uqD&q‡âq‚Qq‚hqøÓq-„qFhqŠ÷q‚q‚6qùÃqHªq-“qq‚íq‚qúËqJìq-¢q”(pppq~Äxq~$ppxsq~ uq~ppppptŸ/** * The current number of the property/key being added. This is used * to maintain the order messages are added. */ /** * The current number of the property/key being added. This is used * to maintain the order messages are added. */ /** * The current number of the property/key being added. This is used * to maintain the order messages are added. */ /** * The current number of the property/key being added. This is used * to maintain the order messages are added. */ /** * The current number of the property/key being added. This is used * to maintain the order messages are added. */ ptiCountq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt 0q~$q~$q~$xq‚–q‚¦q2ªq2Ãq2ýq3q‚ ´q‚ Âq‚ Gq‚ bqZ€q~źq`¡q·Rq@ûqBqNqNPq@îqBjq~sq~isq~ uq~ppppq~sq~ uq~pppppppt getBufferSizeq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t) return (this.bufferSize); sq~ uq~ppppq~$q~$xsq~bsq~ uq~ppppsq~isq~ uq~q‚×pppq~sq~ uq~pppppppt setBufferSizeq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tœ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.bufferSize = bufferSize; sq~ uq~ppppq~$q~$xsq~ uq~pppppppt bufferSizeq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~(sq~ uq~ppppq~sq~ uq~ppppptq/** * The debugging detail level that determines logging verbosity. */ /** * The debugging detail level that determines logging verbosity. */ /** * The debugging detail level that determines logging verbosity. */ /** * The debugging detail level that determines logging verbosity. * @deprecated Configure the logging detail level in your underlying * logging implemenation */ /** * The debugging detail level that determines logging verbosity. * @deprecated Configure the logging detail level in your underlying * logging implemenation */ ptdebugq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt 0q~$q~$q~$xsq~isq~ uq~ppppq~sq~ uq~ppppppptgetDebugq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t$ return (this.debug); sq~ uq~ppppq~$q~$xsq~bsq~ uq~ppppsq~isq~ uq~q‚ pppq~sq~ uq~ppppppptsetDebugq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t’ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.debug = debug; sq~ uq~ppppq~$q~$xsq~ uq~ppppppptdebugq~=xsq~ uq~pppppq~$q~yq~$q~ pq~$xqÞbq~ˆ½q~Іq~‘`q~”ˆq~•÷q~œ©q€Jzq€Mtq€P¿q€Qzq~žÙq€UJq~‡®q~Xq~Xq€ŠÕq~]xq~Y}q~Yq~Yq~j¨q~j¸q~jÈq~V q€þ/q€þ?q~Sãq~b‹q~bÞq~g¿q~gÍq~gßq~góq~hq~hq~gq~hq~Wq€çq€çq~oq~\q~_q~gq~³q~çq…q#qqpq~æ†q~èq~è%q~èIq~è¤q~è´q~èÌq~èØq~èàq~è÷q~éèq~êÛq~êëq~ëWq~ë_q~ø_q~øäq~øñq~øÿq~ùWq~ùvq~ùqq#q~Ë"q~Óƒq~Õq öq q q gq~F2q~FXqc–qc¤qc¶qcÊqcØqcêqd2qd@qdRq~€«q~€Îq&qßqgq¡q©qáqéqitq~Ãüq~Ä q~Äqa£qa±qaÄqýq qqrq‚q’q‚q‚&q3Bq3[q3•q3§q‚ õq‚qZçq—sq—óqºÚqA qB—qOÏqPqEØqFsq~isq~ uq~ppppq~sq~ uq~pppppppt getBufferSizeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t) return (this.bufferSize); sq~ uq~ppppq~¥q~¥xsq~bsq~ uq~ppppsq~isq~ uq~q‚9pppq~sq~ uq~pppppppt setBufferSizeq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tœ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.bufferSize = bufferSize; sq~ uq~ppppq~¥q~¥xsq~ uq~pppppppt bufferSizeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~isq~ uq~ppppq~sq~ uq~ppppppptgetDebugq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t$ return (this.debug); sq~ uq~ppppq~¥q~¥xsq~bsq~ uq~ppppsq~isq~ uq~q‚_pppq~sq~ uq~ppppppptsetDebugq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t’ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.debug = debug; sq~ uq~ppppq~¥q~¥xsq~ uq~ppppppptdebugq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ pq~§xqßq~‹þq~Œq~Œq~’q~—q€D@q€Jæq€N,q€R q~¡q€Vq€bÀq~X q€ù°q€ùÀq~]®q~Yýq~Z q~Zq~k8q~kHq~kXq€þåq€þõq€ÿq q€Ýq€Ý q€¾‚q€¾”q€¾¨q€¾ºq€¿q~h§q€óÕq€çŽq€çžq~oTq~puq€™£q€™³q€iÎq€iáq€j–q€jÿq€Çˆq€Ç˜q€Ç¨q~v¶q~vÆq~vÖq€° q€°°q€°Àq€…!q€Õq€Õq€s)q€s9q€sIq€¶q€¶q€¶%q€ºËq€ºÛq€ºëq~hýq~i q€zUq€zeq€zuq€¦êq€¦úq€§ q€ò«q€8œq€8¤q€;øq€<q€¡q€±q€-õq€/q€/q€//q€­q€½qequq…qqq!q~¯q€_gq~œžq~žæq~‡»qCq~Sðq€ŠOq~chq~bëq€÷ˆq€¥(q€“ìq€Â«q~s»q€®}q€ìq€Ñq€‹Kq€³âq€wÎq~oÍq€1q€Ž™q€@Ÿqÿmq€^q€Øq~©”q~©ôq€q€!q€"}q€úq€6q€'.q€$‹q€ hq€Àq€ ÷qÎqÈÍqÈÝqÑâqÕÖqÖ2qÖBqäÏqò>qòNqçtqõºqö>qöNqê½qêÍqï6qïFqøÊqùtqù„q~:æq~:ñqB–qªCq~&zq~&‰q~&ìq˜Zq˜hqWÕqXq¶Çq¶ëq·q·Sq³Uq³nq³qq³yq³—q³šq³¢q°Âqq3qvqˆq~ëÌq~ëÜq~ëôq~ìq~ìq~ìq~íq~îq~îq~îq~î‡q¿qÞqqKq`q~×7q~ׂq~Ø´q ¦q~Fƒq~F©qe¶qeÈqeÜqeîqf(qf:q~\q~q‘qJqÒq qqLqTqlíqŸq²q”,q”?q[Mq˜Üq™\q‚q‚6q¾Òq‚åq‚õq3çq4q4:q4Lsq~isq~ uq~ppppq~sq~ uq~pppppppt getBufferSizeq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t) return (this.bufferSize); sq~ uq~ppppq~–q~–xsq~bsq~ uq~ppppsq~isq~ uq~q‚…pppq~sq~ uq~pppppppt setBufferSizeq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tœ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.bufferSize = bufferSize; sq~ uq~ppppq~–q~–xsq~ uq~pppppppt bufferSizeq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~isq~ uq~ppppq~sq~ uq~ppppppptgetDebugq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t$ return (this.debug); sq~ uq~ppppq~–q~–xsq~bsq~ uq~ppppsq~isq~ uq~q‚«pppq~sq~ uq~ppppppptsetDebugq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t’ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.debug = debug; sq~ uq~ppppq~–q~–xsq~ uq~ppppppptdebugq~rxsq~ uq~pppppq~–q~—q~–q~ pq~˜xqAqB¯qQ•qQÝqHqHVqßÒq~Hq~Xq~hq~’Ðq~˜/q€Fq€KRq€Näq€Ržq€dfq€Vºq~¡ïq€¶ñq€·q€·q~iq~i-q€»iq€»yq€»‰q€{oq€{q€{q~X0q€òáq€à2q€àBq~Zq~Zq~Z­q~odq~p…q€q€)q~]äq~kÈq~kØq~kèq€¿œq€¿®q€¿Âq€¿Ôq€À4q~h·q€ÿ‹q€ÿ›q€ÿ«q€±Vq€±fq€±vq€§zq€§Šq€§šq€klq€kq€l\q€lÅq€úÀq€úÐq Øq€óåq€èq€è*q€Êq€Ê"q€Ê2q~x&q~x6q~xFq€t¹q€tÉq€tÙq€†“q€Ö´q€ÖÄq€=gq€=wq€8âq€8êq€/›q€0µq€0Åq€0Õq€¥q€µq€÷q€q~¯©qÍqÝqíqq q°q€_wq~œ¶q~žöq~‡ËqSq~Tq€Š’q€÷˜q€¥8q€”q€Â»q~sËq€®q€üq€Ñ q€‹sq€³òq€wÞq~oõq€Yq€ŽÁq~c­q~bûq€@¯qÿ•q€†q€q€=q€!.q€"¥q€"q€^q€'>q€$³q€ q€èq€ q~©¤q~ªqβqÉmqÉ}qÒÚqÖ¢qÖ²qïýqð që,qëÖq€>æq€9(q€90q€q€­q€1Aq€2[q€2kq€2{q€Mq€]q 5q Eq Uqq/q?q~°q~°)q€_‡q~Š“q~œÆq~!q~Ÿq~Ÿyq~‡Ûq~ˆNqcq€þLq~Tq q€Šºq€ŠÊq~cäq~c q€÷¨q€Šâq€¥Hq~pRq€”q€”oq€ÂËq€½hq~sÛq~tNq€®q€¯q€‚ q€‚q€Ñ0q€Òq€‹›q€‹q€´q€´uq€wîq€xaq~pq~p-q€Žéq€ŽPq€q€Œèq€@¿qÿåqÿ½qÿÍq€®q€q€(q€8q~©´q~ªq€,Mq€eq€uq€!Vq€!fq€"Íq€"Ýq€Jq€Zq€†q€–q€'Nq€&0q€$Ûq€$ëq€ ¸q€ Èq€q€ q€ Gq€ WqÊ qÊqÏJqÓÒq×q×"qðÄqðÔqóþqôqûqû$q÷Žq÷žqë›që«qéqD qD«qEq3q¬ƒqvfqvyqvŽqv¡qY¯q¸qËq9qXqqÅqÚq~òq~ò,q~òDq~òPq~òXq~òoq~ó`q~ôSq~ôcq~ôÏq~ô×q¶qÈq¸Uq¸yq¸œq¸áq´q´˜q´›q´£q´Áq´Äq´Ìq±q²*q²_q~Þgq~Þ²q~ßäq $qp%q~G%q~GKqgq q¨qâqêq "q *qŒ2qhúqi qi qi2qilqi~q~‚¾q~‚áq¦qžqž’q•Lq•_q\qÆÐq‚q‚‘q5Yq5rq5¬q5¾q›ìqœ|q‚ãq‚þqLžqLÚq‚²q‚q‚$qA;qBßqU!qUisq~isq~ uq~ppppq~sq~ uq~pppppppt getBufferSizeq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft) return (this.bufferSize); sq~ uq~ppppq~fq~fxsq~bsq~ uq~ppppsq~isq~ uq~q‚pppq~sq~ uq~pppppppt setBufferSizeq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftœ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.bufferSize = bufferSize; sq~ uq~ppppq~fq~fxsq~ uq~pppppppt bufferSizeq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~isq~ uq~ppppq~sq~ uq~ppppppptgetDebugq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft$ return (this.debug); sq~ uq~ppppq~fq~fxsq~bsq~ uq~ppppsq~isq~ uq~q‚Cpppq~sq~ uq~ppppppptsetDebugq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft’ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.debug = debug; sq~ uq~ppppq~fq~fxsq~ uq~ppppppptdebugq~cxsq~ uq~pppppq~fq~gq~fq~ pq~hxqáBq~”@q€L*q€PTq€SÂq~£«q€X*q~šgq€g²q€I†q~Üq~ìq~üq€¸íq€¹=q€¹Mq~{q~{%q~{5q€¼±q€¼Áq€¼Ñq~i]q~imq~[­q~[½q~[Íq€¨šq€¨ªq€¨ºq€å¥q€ååq€àq€ðq€€q€éBq€éRq€¤q€¤q×qçq÷q~o„q~p¥q€ê0q~^¶q~^Ùq€üàq€üðq€ÁÐq€Áâq€Áöq€Âq€Âhq~h×q€²Âq€²Òq€²âq~XPq€‰wq~lèq~løq~mq€ómq€}Ãq€}óq€~q€Ï€q€Ïq€Ï q€Úq€Ú$qWq€nNq€naq€o>q€o©q€ôq€@Eq€@Uq€9nq€9vq€•q€¥q€2çq€4q€4q€4!q€£q€³q ·q Çq ×qÕqåqõq~°¥q~°µq€_—q~Š£q~œÖq~oq~Ÿq~ŸÇq~‡ëq~ˆœqsq€þ\q~T q Yq€lq€6q~dgq~cq€÷¸q€Šòq€¥Xq~pbq€”$q€”‡q€ÂÛq€½xq~sëq~tfq€®­q€¯(q€‚q€‚Íq€Ñ@q€Ò'q€‹Éq€‹Ùq€´q€´q€wþq€xyq~qmq~pµq€q€'q€¯q€¿q€@Ïqÿõq€&vq€q€Üq€ìq€fq€vq~©Äq~ª$q€,eq€£q€³q€!”q€!¤q€# q€#q€xq€ˆq€´q€Äq€'|q€&@q€%q€%)q€ öq€ q€Nq€^q€ …q€ •qÊ­qʽqÏâqÔÊqׂq×’qñ‹qñ›qôÆqôÖqûäqûôqø6qøFqì qìqéáqEàqEëqFVqÈq­£qxqxqx-qx@qZˆq‰qœqvq•q¼q q q~õDq~õTq~õlq~õxq~õ€q~õ—q~öˆq~÷{q~÷‹q~÷÷q~÷ÿqVqhq¹q¹@q¹cq¹¨qµqµ-qµ0qµ8qµVqµYqµaq±?q²Øq³ q~áÿq~âJq~ã|q cqqÁq~Gvq~Gœq Òq!‹q"q"Mq"Uq"q"•qÍqjœqj®qjÂqjÔqkqk q~ƒoq~ƒ’qçqŸ/qŸBq•üq–qätqä„pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppq~Äxpq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt 4096q~$q~$q~$xq‚Èq‚Úsq~(sq~ uq~ppppq~sq~ uq~pppppt½/** * The content type and character encoding to be set on each response. */ /** * The content type and character encoding to be set on each response. */ /** * The content type and character encoding to be set on each response. */ /** * The content type and character encoding to be set on each response. */ /** * The content type and character encoding to be set on each response. */ pt contentTypeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt "text/html"q~$q~$q~$xsq~isq~ uq~ppppq~sq~ uq~ppppppptgetContentTypeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t* return (this.contentType); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq‚|sq~ uq~pppppppt contentTypeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~sq~ uq~ppppppptsetContentTypeq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tž if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.contentType = contentType; sq~ uq~ppppq~$q~$xq‚îq‚üq‚sq~(sq~ uq~ppppq~sq~ uq~pppppt®/** * Should we store a Locale object in the user's session if needed? */ /** * Should we store a Locale object in the user's session if needed? */ /** * Should we store a Locale object in the user's session if needed? */ /** * Should we store a Locale object in the user's session if needed? */ /** * Should we store a Locale object in the user's session if needed? */ ptlocaleq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt trueq~$q~$q~$xsq~isq~ uq~ppppq~sq~ uq~pppppppt getLocaleq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t% return (this.locale); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq‚°sq~ uq~ppppppptlocaleq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xpppq~sq~ uq~pppppppt setLocaleq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t” if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.locale = locale; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~sq~ uq~pppppth/** * The maximum file size to process for file uploads. */ /** * The maximum file size to process for file uploads. */ /** * The maximum file size to process for file uploads. */ /** * The maximum file size to process for file uploads. */ /** * The maximum file size to process for file uploads. */ pt maxFileSizeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt "250M"q~$q~$q~$xsq~isq~ uq~ppppq~sq~ uq~ppppppptgetMaxFileSizeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t* return (this.maxFileSize); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq‚äsq~ uq~pppppppt maxFileSizeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~sq~ uq~ppppppptsetMaxFileSizeq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tž if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.maxFileSize = maxFileSize; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~sq~ uq~pppppt:/** * The fully qualified Java class name of the MultipartRequestHandler * class to be used. */ /** * The fully qualified Java class name of the MultipartRequestHandler * class to be used. */ /** * The fully qualified Java class name of the MultipartRequestHandler * class to be used. */ /** * The fully qualified Java class name of the MultipartRequestHandler * class to be used. */ /** * The fully qualified Java class name of the MultipartRequestHandler * class to be used. */ ptmultipartClassq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xppptC "org.apache.struts.upload.CommonsMultipartRequestHandler"q~$q~$q~$xsq~isq~ uq~ppppq~sq~ uq~ppppppptgetMultipartClassq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t- return (this.multipartClass); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq‚sq~ uq~ppppppptmultipartClassq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~sq~ uq~ppppppptsetMultipartClassq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t¤ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.multipartClass = multipartClass; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~sq~ uq~ppppptw/** * Should we set no-cache HTTP headers on each response? */ /** * Should we set no-cache HTTP headers on each response? */ /** * Should we set no-cache HTTP headers on each response? */ /** * Should we set no-cache HTTP headers on each response? */ /** * Should we set no-cache HTTP headers on each response? */ ptnocacheq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt falseq~$q~$q~$xsq~isq~ uq~ppppq~sq~ uq~pppppppt getNocacheq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t& return (this.nocache); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq‚Lsq~ uq~ppppppptnocacheq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xpppq~sq~ uq~pppppppt setNocacheq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t– if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.nocache = nocache; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~sq~ uq~pppppt£/** * The fully qualified class name of the RequestProcessor implementation * class to be used for this application. */ /** * The fully qualified class name of the RequestProcessor implementation * class to be used for this application. */ /** * The fully qualified class name of the RequestProcessor implementation * class to be used for this module. */ /** * The fully qualified class name of the RequestProcessor implementation * class to be used for this module. */ /** * The fully qualified class name of the RequestProcessor implementation * class to be used for this module. */ ptprocessorClassq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt5 "org.apache.struts.action.RequestProcessor"q~$q~$q~$xsq~isq~ uq~ppppq~sq~ uq~ppppppptgetProcessorClassq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t- return (this.processorClass); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq‚€sq~ uq~ppppppptprocessorClassq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~sq~ uq~ppppppptsetProcessorClassq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t¤ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.processorClass = processorClass; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~sq~ uq~pppppt†/** * The temporary working directory to use for file uploads. */ /** * The temporary working directory to use for file uploads. */ /** * The temporary working directory to use for file uploads. */ /** * The temporary working directory to use for file uploads. */ /** * The temporary working directory to use for file uploads. */ pttempDirq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~sq~ uq~pppppppt getTempDirq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t& return (this.tempDir); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq‚´sq~ uq~pppppppttempDirq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~sq~ uq~pppppppt setTempDirq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t– if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.tempDir = tempDir; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~sq~ uq~ppppptŽ// --------------------------------------------------------- Public Methods /** * Freeze the configuration of this component. */ ptfreezeq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t& configured = true; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~sq~ uq~ppppptD/** * Return a String representation of this object. */ pttoStringq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t, StringBuffer sb = new StringBuffer("ControllerConfig["); sb.append("bufferSize="); sb.append(this.bufferSize); if (this.contentType != null) { sb.append(",contentType="); sb.append(this.contentType); } sb.append(",locale="); sb.append(this.locale); if (this.maxFileSize != null) { sb.append(",maxFileSzie="); sb.append(this.maxFileSize); } sb.append(",nocache="); sb.append(this.nocache); sb.append(",processorClass="); sb.append(this.processorClass); if (this.tempDir != null) { sb.append(",tempDir="); sb.append(this.tempDir); } sb.append("]"); return (sb.toString()); sq~ uq~ppppq~$q~$xq‚*q‚The replacement pattern used to determine a context-relative URL * from a {@link ForwardConfig} element. The pattern may consist of any * combination of the following markers and characters:

            *
              *
            • $M - Replaced by the module * prefix for the current application module.
            • *
            • $P - Replaced by the path * property of a {@link ForwardConfig} instance.
            • *
            • $$ - Renders a literal dollar sign * ("$") character in the resulting URL.
            • *
            • A dollar sign followed by any other character is reserved for * future use, and both characters are silently swallowed.
            • *
            • All other characters in the pattern are passed through unchanged. *
            • *
            * *

            If this property is set to null, a default pattern of * $M$P is utilized, which is backwards compatible with * the hard coded functionality in prior versions.

            */ /** *

            The replacement pattern used to determine a context-relative URL * from a {@link ForwardConfig} element. The pattern may consist of any * combination of the following markers and characters:

            *
              *
            • $M - Replaced by the module * prefix for the current module.
            • *
            • $P - Replaced by the path * property of a {@link ForwardConfig} instance.
            • *
            • $$ - Renders a literal dollar sign * ("$") character in the resulting URL.
            • *
            • A dollar sign followed by any other character is reserved for * future use, and both characters are silently swallowed.
            • *
            • All other characters in the pattern are passed through unchanged. *
            • *
            * *

            If this property is set to null, a default pattern of * $M$P is utilized, which is backwards compatible with * the hard coded functionality in prior versions.

            */ /** *

            The replacement pattern used to determine a context-relative URL * from a {@link ForwardConfig} element. The pattern may consist of any * combination of the following markers and characters:

            *
              *
            • $M - Replaced by the module * prefix for the current module.
            • *
            • $P - Replaced by the path * property of a {@link ForwardConfig} instance.
            • *
            • $$ - Renders a literal dollar sign * ("$") character in the resulting URL.
            • *
            • A dollar sign followed by any other character is reserved for * future use, and both characters are silently swallowed.
            • *
            • All other characters in the pattern are passed through unchanged. *
            • *
            * *

            If this property is set to null, a default pattern of * $M$P is utilized, which is backwards compatible with * the hard coded functionality in prior versions.

            */ ptforwardPatternq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xpppt nullq~–q~–q~–xsq~isq~ uq~ppppq~sq~ uq~ppppppptgetForwardPatternq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t- return (this.forwardPattern); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚ Xsq~ uq~ppppppptforwardPatternq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~sq~ uq~ppppppptsetForwardPatternq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t5 this.forwardPattern = forwardPattern; sq~ uq~ppppq~–q~–xsq~(sq~ uq~ppppq~sq~ uq~pppppt¬/** *

            Should the input property of {@link ActionConfig} * instances associated with this module be treated as the * name of a corresponding {@link ForwardConfig}. A false * value treats them as a module-relative path (consistent * with the hard coded behavior of earlier versions of Struts.

            * * @since Struts 1.1b2 */ /** *

            Should the input property of {@link ActionConfig} * instances associated with this module be treated as the * name of a corresponding {@link ForwardConfig}. A false * value treats them as a module-relative path (consistent * with the hard coded behavior of earlier versions of Struts.

            * * @since Struts 1.1 */ /** *

            Should the input property of {@link ActionConfig} * instances associated with this module be treated as the * name of a corresponding {@link ForwardConfig}. A false * value treats them as a module-relative path (consistent * with the hard coded behavior of earlier versions of Struts.

            * * @since Struts 1.1 */ pt inputForwardq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xpppt falseq~–q~–q~–xsq~isq~ uq~ppppq~sq~ uq~ppppppptgetInputForwardq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t+ return (this.inputForward); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚ Œsq~ uq~pppppppt inputForwardq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xpppq~sq~ uq~ppppppptsetInputForwardq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t1 this.inputForward = inputForward; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~sq~ uq~pppppppt getLocaleq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t% return (this.locale); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚ ²sq~ uq~ppppppptlocaleq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xpppq~sq~ uq~pppppppt setLocaleq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t” if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.locale = locale; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~sq~ uq~ppppppptgetMaxFileSizeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t* return (this.maxFileSize); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚ Øsq~ uq~pppppppt maxFileSizeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~sq~ uq~ppppppptsetMaxFileSizeq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tž if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.maxFileSize = maxFileSize; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~sq~ uq~ppppppptgetMultipartClassq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t- return (this.multipartClass); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚ þsq~ uq~ppppppptmultipartClassq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~sq~ uq~ppppppptsetMultipartClassq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t¤ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.multipartClass = multipartClass; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~sq~ uq~pppppppt getNocacheq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t& return (this.nocache); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚!$sq~ uq~ppppppptnocacheq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xpppq~sq~ uq~pppppppt setNocacheq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t– if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.nocache = nocache; sq~ uq~ppppq~–q~–xsq~(sq~ uq~ppppq~sq~ uq~pppppt •/** *

            The replacement pattern used to determine a context-relative URL * from the page attribute of Struts tags and configuration * properties. The pattern may consist of any combination of the * following markers and characters:

            *
              *
            • $M - Replaced by the module * prefix for the current application module.
            • *
            • $P - Replaced by the page * attribute value being evaluated.
            • *
            • $$ - Renders a literal dollar sign * ("$") character in the resulting URL.
            • *
            • A dollar sign followed by any other character is reserved for * future use, and both characters are silently swallowed.
            • *
            • All other characters in the pattern are passed through unchanged. *
            • *
            * *

            If this property is set to null, a default pattern of * $M$P is utilized, which is backwards compatible with * the hard coded functionality in prior versions.

            */ /** *

            The replacement pattern used to determine a context-relative URL * from the page attribute of Struts tags and configuration * properties. The pattern may consist of any combination of the * following markers and characters:

            *
              *
            • $M - Replaced by the module * prefix for the current module.
            • *
            • $P - Replaced by the page * attribute value being evaluated.
            • *
            • $$ - Renders a literal dollar sign * ("$") character in the resulting URL.
            • *
            • A dollar sign followed by any other character is reserved for * future use, and both characters are silently swallowed.
            • *
            • All other characters in the pattern are passed through unchanged. *
            • *
            * *

            If this property is set to null, a default pattern of * $M$P is utilized, which is backwards compatible with * the hard coded functionality in prior versions.

            */ /** *

            The replacement pattern used to determine a context-relative URL * from the page attribute of Struts tags and configuration * properties. The pattern may consist of any combination of the * following markers and characters:

            *
              *
            • $M - Replaced by the module * prefix for the current module.
            • *
            • $P - Replaced by the page * attribute value being evaluated.
            • *
            • $$ - Renders a literal dollar sign * ("$") character in the resulting URL.
            • *
            • A dollar sign followed by any other character is reserved for * future use, and both characters are silently swallowed.
            • *
            • All other characters in the pattern are passed through unchanged. *
            • *
            * *

            If this property is set to null, a default pattern of * $M$P is utilized, which is backwards compatible with * the hard coded functionality in prior versions.

            */ pt pagePatternq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xpppt nullq~–q~–q~–xsq~isq~ uq~ppppq~sq~ uq~ppppppptgetPagePatternq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t* return (this.pagePattern); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚!Xsq~ uq~pppppppt pagePatternq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~sq~ uq~ppppppptsetPagePatternq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t/ this.pagePattern = pagePattern; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~sq~ uq~ppppppptgetProcessorClassq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t- return (this.processorClass); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚!~sq~ uq~ppppppptprocessorClassq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~sq~ uq~ppppppptsetProcessorClassq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t¤ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.processorClass = processorClass; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~sq~ uq~pppppppt getTempDirq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t& return (this.tempDir); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚!¤sq~ uq~pppppppttempDirq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~sq~ uq~pppppppt setTempDirq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t– if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.tempDir = tempDir; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~sq~ uq~ppppptŽ// --------------------------------------------------------- Public Methods /** * Freeze the configuration of this component. */ ptfreezeq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t& configured = true; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~sq~ uq~ppppptD/** * Return a String representation of this object. */ pttoStringq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tá StringBuffer sb = new StringBuffer("ControllerConfig["); sb.append("bufferSize="); sb.append(this.bufferSize); if (this.contentType != null) { sb.append(",contentType="); sb.append(this.contentType); } if (this.forwardPattern != null) { sb.append(",forwardPattern="); sb.append(this.forwardPattern); } sb.append(",inputForward="); sb.append(this.inputForward); sb.append(",locale="); sb.append(this.locale); if (this.maxFileSize != null) { sb.append(",maxFileSzie="); sb.append(this.maxFileSize); } sb.append(",multipartClass="); sb.append(this.multipartClass); sb.append(",nocache="); sb.append(this.nocache); if (this.pagePattern != null) { sb.append(",pagePattern="); sb.append(this.pagePattern); } sb.append(",processorClass="); sb.append(this.processorClass); if (this.tempDir != null) { sb.append(",tempDir="); sb.append(this.tempDir); } sb.append("]"); return (sb.toString()); sq~ uq~ppppq~–q~–xq‚Âq‚Ôsq~isq~ uq~ppppq~sq~ uq~ppppppptgetContentTypeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t* return (this.contentType); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚!êsq~ uq~pppppppt contentTypeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~sq~ uq~ppppppptsetContentTypeq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tž if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.contentType = contentType; sq~ uq~ppppq~~q~~xq‚èq‚úsq~isq~ uq~ppppq~sq~ uq~ppppppptgetForwardPatternq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t- return (this.forwardPattern); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚"sq~ uq~ppppppptforwardPatternq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~sq~ uq~ppppppptsetForwardPatternq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t5 this.forwardPattern = forwardPattern; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~sq~ uq~ppppppptgetInputForwardq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t+ return (this.inputForward); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚"6sq~ uq~pppppppt inputForwardq~{xsq~ uq~pppppq~~q~q~~q~pq~€xpppq~sq~ uq~ppppppptsetInputForwardq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t1 this.inputForward = inputForward; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~sq~ uq~pppppppt getLocaleq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t% return (this.locale); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚"\sq~ uq~ppppppptlocaleq~{xsq~ uq~pppppq~~q~q~~q~pq~€xpppq~sq~ uq~pppppppt setLocaleq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t” if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.locale = locale; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~sq~ uq~ppppppptgetMaxFileSizeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t* return (this.maxFileSize); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚"‚sq~ uq~pppppppt maxFileSizeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~sq~ uq~ppppppptsetMaxFileSizeq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tž if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.maxFileSize = maxFileSize; sq~ uq~ppppq~~q~~xsq~(sq~ uq~ppppq~sq~ uq~pppppt€/** * The maximum file size to retain in memory. */ /** * The maximum file size to retain in memory. */ pt memFileSizeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xpppt "256K"q~~q~~q~~xsq~isq~ uq~ppppq~sq~ uq~ppppppptgetMemFileSizeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t* return (this.memFileSize); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚"¶sq~ uq~pppppppt memFileSizeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~sq~ uq~ppppppptsetMemFileSizeq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tž if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.memFileSize = memFileSize; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~sq~ uq~ppppppptgetMultipartClassq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t- return (this.multipartClass); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚"Üsq~ uq~ppppppptmultipartClassq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~sq~ uq~ppppppptsetMultipartClassq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t¤ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.multipartClass = multipartClass; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~sq~ uq~pppppppt getNocacheq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t& return (this.nocache); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚#sq~ uq~ppppppptnocacheq~{xsq~ uq~pppppq~~q~q~~q~pq~€xpppq~sq~ uq~pppppppt setNocacheq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t– if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.nocache = nocache; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~sq~ uq~ppppppptgetPagePatternq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t* return (this.pagePattern); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚#(sq~ uq~pppppppt pagePatternq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~sq~ uq~ppppppptsetPagePatternq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t/ this.pagePattern = pagePattern; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~sq~ uq~ppppppptgetProcessorClassq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t- return (this.processorClass); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚#Nsq~ uq~ppppppptprocessorClassq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~sq~ uq~ppppppptsetProcessorClassq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t¤ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.processorClass = processorClass; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~sq~ uq~pppppppt getTempDirq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t& return (this.tempDir); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚#tsq~ uq~pppppppttempDirq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~sq~ uq~pppppppt setTempDirq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t– if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.tempDir = tempDir; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~sq~ uq~ppppptŽ// --------------------------------------------------------- Public Methods /** * Freeze the configuration of this component. */ ptfreezeq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t& configured = true; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~sq~ uq~ppppptD/** * Return a String representation of this object. */ pttoStringq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~th StringBuffer sb = new StringBuffer("ControllerConfig["); sb.append("bufferSize="); sb.append(this.bufferSize); if (this.contentType != null) { sb.append(",contentType="); sb.append(this.contentType); } if (this.forwardPattern != null) { sb.append(",forwardPattern="); sb.append(this.forwardPattern); } sb.append(",inputForward="); sb.append(this.inputForward); sb.append(",locale="); sb.append(this.locale); if (this.maxFileSize != null) { sb.append(",maxFileSize="); sb.append(this.maxFileSize); } if (this.memFileSize != null) { sb.append(",memFileSize="); sb.append(this.memFileSize); } sb.append(",multipartClass="); sb.append(this.multipartClass); sb.append(",nocache="); sb.append(this.nocache); if (this.pagePattern != null) { sb.append(",pagePattern="); sb.append(this.pagePattern); } sb.append(",processorClass="); sb.append(this.processorClass); if (this.tempDir != null) { sb.append(",tempDir="); sb.append(this.tempDir); } sb.append("]"); return (sb.toString()); sq~ uq~ppppq~~q~~xq‚q‚ sq~isq~ uq~ppppq~sq~ uq~ppppppptgetContentTypeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft* return (this.contentType); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚#ºsq~ uq~pppppppt contentTypeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~sq~ uq~ppppppptsetContentTypeq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftž if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.contentType = contentType; sq~ uq~ppppq~fq~fxq‚4q‚Fsq~isq~ uq~ppppq~sq~ uq~ppppppptgetForwardPatternq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft- return (this.forwardPattern); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚#àsq~ uq~ppppppptforwardPatternq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~sq~ uq~ppppppptsetForwardPatternq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft5 this.forwardPattern = forwardPattern; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~sq~ uq~ppppppptgetInputForwardq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft+ return (this.inputForward); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚$sq~ uq~pppppppt inputForwardq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxpppq~sq~ uq~ppppppptsetInputForwardq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft1 this.inputForward = inputForward; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~sq~ uq~pppppppt getLocaleq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft% return (this.locale); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚$,sq~ uq~ppppppptlocaleq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxpppq~sq~ uq~pppppppt setLocaleq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft” if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.locale = locale; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~sq~ uq~ppppppptgetMaxFileSizeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft* return (this.maxFileSize); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚$Rsq~ uq~pppppppt maxFileSizeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~sq~ uq~ppppppptsetMaxFileSizeq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftž if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.maxFileSize = maxFileSize; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~sq~ uq~ppppppptgetMemFileSizeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft* return (this.memFileSize); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚$xsq~ uq~pppppppt memFileSizeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~sq~ uq~ppppppptsetMemFileSizeq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftž if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.memFileSize = memFileSize; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~sq~ uq~ppppppptgetMultipartClassq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft- return (this.multipartClass); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚$žsq~ uq~ppppppptmultipartClassq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~sq~ uq~ppppppptsetMultipartClassq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft¤ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.multipartClass = multipartClass; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~sq~ uq~pppppppt getNocacheq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft& return (this.nocache); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚$Äsq~ uq~ppppppptnocacheq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxpppq~sq~ uq~pppppppt setNocacheq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft– if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.nocache = nocache; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~sq~ uq~ppppppptgetPagePatternq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft* return (this.pagePattern); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚$êsq~ uq~pppppppt pagePatternq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~sq~ uq~ppppppptsetPagePatternq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft/ this.pagePattern = pagePattern; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~sq~ uq~ppppppptgetProcessorClassq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft- return (this.processorClass); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚%sq~ uq~ppppppptprocessorClassq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~sq~ uq~ppppppptsetProcessorClassq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft¤ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.processorClass = processorClass; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~sq~ uq~pppppppt getTempDirq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft& return (this.tempDir); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚%6sq~ uq~pppppppttempDirq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~sq~ uq~pppppppt setTempDirq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft– if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.tempDir = tempDir; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~sq~ uq~ppppptŽ// --------------------------------------------------------- Public Methods /** * Freeze the configuration of this component. */ ptfreezeq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft& configured = true; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~sq~ uq~ppppptD/** * Return a String representation of this object. */ pttoStringq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fth StringBuffer sb = new StringBuffer("ControllerConfig["); sb.append("bufferSize="); sb.append(this.bufferSize); if (this.contentType != null) { sb.append(",contentType="); sb.append(this.contentType); } if (this.forwardPattern != null) { sb.append(",forwardPattern="); sb.append(this.forwardPattern); } sb.append(",inputForward="); sb.append(this.inputForward); sb.append(",locale="); sb.append(this.locale); if (this.maxFileSize != null) { sb.append(",maxFileSize="); sb.append(this.maxFileSize); } if (this.memFileSize != null) { sb.append(",memFileSize="); sb.append(this.memFileSize); } sb.append(",multipartClass="); sb.append(this.multipartClass); sb.append(",nocache="); sb.append(this.nocache); if (this.pagePattern != null) { sb.append(",pagePattern="); sb.append(this.pagePattern); } sb.append(",processorClass="); sb.append(this.processorClass); if (this.tempDir != null) { sb.append(",tempDir="); sb.append(this.tempDir); } sb.append("]"); return (sb.toString()); sq~ uq~ppppq~fq~fxpq~ sq~ uq~ppppppptControllerConfigq~=xsq~ uq~ sq~Csq~ uq~ppppq~bsq~ uq~ppppsq~#q~xq~Ëöpppppppq~$sq~ uq~q‚ Épppsq~ uq~ppppq~$q~$q‚µsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~q~ýsq~isq~ uq~ppppq~bsq~ uq~ppppppptgetControllerConfigq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t¥ if (this.controllerConfig == null) { this.controllerConfig = new ControllerConfig(); } return (this.controllerConfig); sq~ uq~ppppq~$q~$xsq~bsq~ uq~ppppsq~isq~ uq~q‚%‘pppq~bsq~ uq~ppppppptsetControllerConfigq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tš if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.controllerConfig = cc; sq~ uq~ppppq~$q~$xsq~ uq~ppppppptccq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~isq~ uq~ppppq~bsq~ uq~ppppppptgetControllerConfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t¥ if (this.controllerConfig == null) { this.controllerConfig = new ControllerConfig(); } return (this.controllerConfig); sq~ uq~ppppq~¥q~¥xsq~bsq~ uq~ppppsq~isq~ uq~q‚%·pppq~bsq~ uq~ppppppptsetControllerConfigq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tš if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.controllerConfig = cc; sq~ uq~ppppq~¥q~¥xsq~ uq~ppppppptccq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~isq~ uq~ppppq~bsq~ uq~ppppppptgetControllerConfigq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t¥ if (this.controllerConfig == null) { this.controllerConfig = new ControllerConfig(); } return (this.controllerConfig); sq~ uq~ppppq~–q~–xsq~bsq~ uq~ppppsq~isq~ uq~q‚%Ýpppq~bsq~ uq~ppppppptsetControllerConfigq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tš if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.controllerConfig = cc; sq~ uq~ppppq~–q~–xsq~ uq~ppppppptccq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xq~Íq~ßqë^qëpppppq~Äxq~$ppxpq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xq‚%‚q‚%”sq~(sq~ uq~ppppq~bsq~ uq~pppppt/** * The prefix of the context-relative portion of the request URI, used to * select this configuration versus others supported by the controller * servlet. A configuration with a prefix of a zero-length String is the * default configuration for this web application. */ /** * The prefix of the context-relative portion of the request URI, used to * select this configuration versus others supported by the controller * servlet. A configuration with a prefix of a zero-length String is the * default configuration for this web application. */ /** * The prefix of the context-relative portion of the request URI, used to * select this configuration versus others supported by the controller * servlet. A configuration with a prefix of a zero-length String is the * default configuration for this web application. */ ptprefixq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~bsq~ uq~pppppppt getPrefixq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t% return (this.prefix); sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~bsq~ uq~pppppt5/** * The default class name to be used when creating action mapping * instances. */ /** * The default class name to be used when creating action mapping * instances. */ /** * The default class name to be used when creating action mapping * instances. */ ptactionMappingClassq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt2 "org.apache.struts.action.ActionMapping"q~$q~$q~$xsq~isq~ uq~ppppq~bsq~ uq~ppppppptgetActionMappingClassq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t/ return this.actionMappingClass; sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq‚&3sq~ uq~ppppppptactionMappingClassq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~bsq~ uq~ppppppptsetActionMappingClassq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t= this.actionMappingClass = actionMappingClass; sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq‚&Jsq~ uq~ppppppptconfigq~=xsq~ uq~pppppq~$q~yq~$q~+pq~$xpppq~bsq~ uq~pppppty// --------------------------------------------------------- Public Methods /** * Add a new ActionConfig instance to the set associated * with this application. * * @param config The new configuration instance to be added * * @exception IllegalStateException if this application configuration * has been frozen */ ptaddActionConfigq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tÛ if (configured) { throw new IllegalStateException("Configuration is frozen"); } config.setApplicationConfig(this); actionConfigs.put(config.getPath(), config); sq~ uq~ppppq~$q~$xqè±q‚ Iq‚åq¢q!—q~Îrsq~isq~ uq~sq~bsq~ uq~ppppq‚&bsq~ uq~ppppppptpathq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~bsq~ uq~ppppptÈ/** * Return the action configuration for the specified path, if any; * otherwise return null. * * @param path Path of the action configuration to return */ ptfindActionConfigq~=xsq~ uq~pppppq~$q~yq~$q~+pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tD return ((ActionConfig) actionConfigs.get(path)); sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~bsq~ uq~pppppt‰/** * Return the action configurations for this application. If there are * none, a zero-length array is returned. */ ptfindActionConfigsq~=xsq~ uq~pppppq~$q~yq~$q~+t[]q~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t  ActionConfig results[] = new ActionConfig[actionConfigs.size()]; return ((ActionConfig[]) actionConfigs.values().toArray(results)); sq~ uq~ppppq~$q~$xqèÆqèÞq‚ ^q‚ vq‚úq‚q¢.q¢Fq!¬q!Äq~·sq~isq~ uq~ppppq~bsq~ uq~pppppt½/** * Freeze the configuration of this application. After this method * returns, any attempt to modify the configuration will return * an IllegalStateException. */ ptfreezeq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tÕ this.configured = true; ActionConfig[] aconfigs = findActionConfigs(); for (int i = 0; i < aconfigs.length; i++) { aconfigs[i].freeze(); } getControllerConfig().freeze(); DataSourceConfig[] dsconfigs = findDataSourceConfigs(); for (int i = 0; i < dsconfigs.length; i++) { dsconfigs[i].freeze(); } ExceptionConfig[] econfigs = findExceptionConfigs(); for (int i = 0; i < econfigs.length; i++) { econfigs[i].freeze(); } FormBeanConfig[] fbconfigs = findFormBeanConfigs(); for (int i = 0; i < fbconfigs.length; i++) { fbconfigs[i].freeze(); } ForwardConfig[] fconfigs = findForwardConfigs(); for (int i = 0; i < fconfigs.length; i++) { fconfigs[i].freeze(); } MessageResourcesConfig[] mrconfigs = findMessageResourcesConfigs(); for (int i = 0; i < mrconfigs.length; i++) { mrconfigs[i].freeze(); } PlugInConfig[] piconfigs = findPlugInConfigs(); for (int i = 0; i < piconfigs.length; i++) { piconfigs[i].freeze(); } sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq‚&›sq~ uq~ppppppptconfigq~=xsq~ uq~pppppq~$q~yq~$q~+pq~$xpppq~bsq~ uq~pppppt÷/** * Remove the specified action configuration instance. * * @param config ActionConfig instance to be removed * * @exception IllegalStateException if this application configuration * has been frozen */ ptremoveActionConfigq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tÖ if (configured) { throw new IllegalStateException("Configuration is frozen"); } config.setApplicationConfig(null); actionConfigs.remove(config.getPath()); sq~ uq~ppppq~$q~$xq‚ Šqèòq‚&q¢Zq!Øsq~esq~ uq~sq~bsq~ uq~ppppq‚&³sq~ uq~ppppppptprefixq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~bsq~ uq~pppppt // ----------------------------------------------------------- Constructors /** * Construct an ApplicationConfig object according to the specified * parameter values. * * @param prefix Context-relative URI prefix for this application */ pq~tq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t; super(); this.prefix = prefix; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~bsq~ uq~pppppppt getConfiguredq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t) return (this.configured); sq~ uq~ppppq~¥q~¥xq‚%¨q‚%ºsq~isq~ uq~ppppq~bsq~ uq~pppppppt getPrefixq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t% return (this.prefix); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~bsq~ uq~ppppppptgetActionMappingClassq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t/ return this.actionMappingClass; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚&÷sq~ uq~ppppppptactionMappingClassq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~bsq~ uq~ppppppptsetActionMappingClassq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t= this.actionMappingClass = actionMappingClass; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚'sq~ uq~ppppppptconfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~+pq~§xpppq~bsq~ uq~pppppty// --------------------------------------------------------- Public Methods /** * Add a new ActionConfig instance to the set associated * with this application. * * @param config The new configuration instance to be added * * @exception IllegalStateException if this application configuration * has been frozen */ ptaddActionConfigq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tÛ if (configured) { throw new IllegalStateException("Configuration is frozen"); } config.setApplicationConfig(this); actionConfigs.put(config.getPath(), config); sq~ uq~ppppq~¥q~¥xqé q‚ ûq‚>q¢Ëq!ðq~Λsq~isq~ uq~sq~bsq~ uq~ppppq‚'&sq~ uq~ppppppptpathq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~bsq~ uq~ppppptÈ/** * Return the action configuration for the specified path, if any; * otherwise return null. * * @param path Path of the action configuration to return */ ptfindActionConfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~+pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tD return ((ActionConfig) actionConfigs.get(path)); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~bsq~ uq~pppppt‰/** * Return the action configurations for this application. If there are * none, a zero-length array is returned. */ ptfindActionConfigsq~¢xsq~ uq~pppppq~¥q~¦q~¥q~+t[]q~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t  ActionConfig results[] = new ActionConfig[actionConfigs.size()]; return ((ActionConfig[]) actionConfigs.values().toArray(results)); sq~ uq~ppppq~¥q~¥xqéqé7q‚ q‚ (q‚Sq‚kq¢àq¢øq"q"q~ΰsq~isq~ uq~ppppq~bsq~ uq~pppppt½/** * Freeze the configuration of this application. After this method * returns, any attempt to modify the configuration will return * an IllegalStateException. */ ptfreezeq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tÕ this.configured = true; ActionConfig[] aconfigs = findActionConfigs(); for (int i = 0; i < aconfigs.length; i++) { aconfigs[i].freeze(); } getControllerConfig().freeze(); DataSourceConfig[] dsconfigs = findDataSourceConfigs(); for (int i = 0; i < dsconfigs.length; i++) { dsconfigs[i].freeze(); } ExceptionConfig[] econfigs = findExceptionConfigs(); for (int i = 0; i < econfigs.length; i++) { econfigs[i].freeze(); } FormBeanConfig[] fbconfigs = findFormBeanConfigs(); for (int i = 0; i < fbconfigs.length; i++) { fbconfigs[i].freeze(); } ForwardConfig[] fconfigs = findForwardConfigs(); for (int i = 0; i < fconfigs.length; i++) { fconfigs[i].freeze(); } MessageResourcesConfig[] mrconfigs = findMessageResourcesConfigs(); for (int i = 0; i < mrconfigs.length; i++) { mrconfigs[i].freeze(); } PlugInConfig[] piconfigs = findPlugInConfigs(); for (int i = 0; i < piconfigs.length; i++) { piconfigs[i].freeze(); } sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚'_sq~ uq~ppppppptconfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~+pq~§xpppq~bsq~ uq~pppppt÷/** * Remove the specified action configuration instance. * * @param config ActionConfig instance to be removed * * @exception IllegalStateException if this application configuration * has been frozen */ ptremoveActionConfigq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tÖ if (configured) { throw new IllegalStateException("Configuration is frozen"); } config.setApplicationConfig(null); actionConfigs.remove(config.getPath()); sq~ uq~ppppq~¥q~¥xq‚ ActionConfig instance to the set associated * with this module. * * @param config The new configuration instance to be added * * @exception IllegalStateException if this module configuration * has been frozen */ ptaddActionConfigq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tÛ if (configured) { throw new IllegalStateException("Configuration is frozen"); } config.setApplicationConfig(this); actionConfigs.put(config.getPath(), config); sq~ uq~ppppq~–q~–xqécq‚ ­q‚—q£¥q"Iq~ÎÄsq~isq~ uq~sq~bsq~ uq~ppppq‚'êsq~ uq~ppppppptpathq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~bsq~ uq~ppppptÈ/** * Return the action configuration for the specified path, if any; * otherwise return null. * * @param path Path of the action configuration to return */ ptfindActionConfigq~rxsq~ uq~pppppq~–q~—q~–q~+pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tD return ((ActionConfig) actionConfigs.get(path)); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~bsq~ uq~pppppt„/** * Return the action configurations for this module. If there are * none, a zero-length array is returned. */ ptfindActionConfigsq~rxsq~ uq~pppppq~–q~—q~–q~+t[]q~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t  ActionConfig results[] = new ActionConfig[actionConfigs.size()]; return ((ActionConfig[]) actionConfigs.values().toArray(results)); sq~ uq~ppppq~–q~–xqéxqéq‚ Âq‚ Úq‚¬q‚Äq£ºq£Òq"^q"vq~ÎÙsq~isq~ uq~ppppq~bsq~ uq~pppppt¸/** * Freeze the configuration of this module. After this method * returns, any attempt to modify the configuration will return * an IllegalStateException. */ ptfreezeq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tÕ this.configured = true; ActionConfig[] aconfigs = findActionConfigs(); for (int i = 0; i < aconfigs.length; i++) { aconfigs[i].freeze(); } getControllerConfig().freeze(); DataSourceConfig[] dsconfigs = findDataSourceConfigs(); for (int i = 0; i < dsconfigs.length; i++) { dsconfigs[i].freeze(); } ExceptionConfig[] econfigs = findExceptionConfigs(); for (int i = 0; i < econfigs.length; i++) { econfigs[i].freeze(); } FormBeanConfig[] fbconfigs = findFormBeanConfigs(); for (int i = 0; i < fbconfigs.length; i++) { fbconfigs[i].freeze(); } ForwardConfig[] fconfigs = findForwardConfigs(); for (int i = 0; i < fconfigs.length; i++) { fconfigs[i].freeze(); } MessageResourcesConfig[] mrconfigs = findMessageResourcesConfigs(); for (int i = 0; i < mrconfigs.length; i++) { mrconfigs[i].freeze(); } PlugInConfig[] piconfigs = findPlugInConfigs(); for (int i = 0; i < piconfigs.length; i++) { piconfigs[i].freeze(); } sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚(#sq~ uq~ppppppptconfigq~rxsq~ uq~pppppq~–q~—q~–q~+pq~˜xpppq~bsq~ uq~ppppptò/** * Remove the specified action configuration instance. * * @param config ActionConfig instance to be removed * * @exception IllegalStateException if this module configuration * has been frozen */ ptremoveActionConfigq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tÖ if (configured) { throw new IllegalStateException("Configuration is frozen"); } config.setApplicationConfig(null); actionConfigs.remove(config.getPath()); sq~ uq~ppppq~–q~–xq‚ îqé¤q‚Øq£æq"Šsq~esq~ uq~sq~bsq~ uq~ppppq‚(;sq~ uq~ppppppptprefixq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~bsq~ uq~pppppt// ----------------------------------------------------------- Constructors /** * Construct an ApplicationConfig object according to the specified * parameter values. * * @param prefix Context-relative URI prefix for this module */ pq~tq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tA super(prefix); this.prefix = prefix; sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq‚(Rsq~ uq~pppppppt moduleConfigq~{xsq~ uq~pppppq~~q~q~~ppq~€xpppq~bsq~ uq~pppppt“/** * Only used while we are deprecating ApplicationConfig. * performs a shallow copy to ensure that any operations * performed on an ApplicationConfig object is * performed on the same underlying * ModuleConfigImpl sub objects * @param moduleConfig * @deprecated Only used while we are deprecating ApplicationConfig to insure maximum compatability. */ pq~tq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t# super(moduleConfig); sq~ uq~ppppq~~q~~xsq~esq~ uq~sq~bsq~ uq~ppppq‚(isq~ uq~ppppppptprefixq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~bsq~ uq~pppppt// ----------------------------------------------------------- Constructors /** * Construct an ApplicationConfig object according to the specified * parameter values. * * @param prefix Context-relative URI prefix for this module */ pq~tq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftA super(prefix); this.prefix = prefix; sq~ uq~ppppq~fq~fxsq~esq~ uq~sq~bsq~ uq~ppppq‚(€sq~ uq~pppppppt moduleConfigq~cxsq~ uq~pppppq~fq~gq~fppq~hxpppq~bsq~ uq~pppppt“/** * Only used while we are deprecating ApplicationConfig. * performs a shallow copy to ensure that any operations * performed on an ApplicationConfig object is * performed on the same underlying * ModuleConfigImpl sub objects * @param moduleConfig * @deprecated Only used while we are deprecating ApplicationConfig to insure maximum compatability. */ pq~tq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft# super(moduleConfig); sq~ uq~ppppq~fq~fxppppq~ sq~ uq~ppppptÎ// -------------------------------------------------------- Package Methods // ------------------------------------------------------ Protected Methods // -------------------------------------------------------- Package Methods // ------------------------------------------------------ Protected Methods // -------------------------------------------------------- Package Methods // ------------------------------------------------------ Protected Methods pq~tq~=xsq~ uq~sq~Csq~ uq~ppppq~bsq~ uq~ppppsq~#q~bxpppppppq~$sq~ uq~q‚ ¿pppsq~ uq~ppppq~$q~$q‚“sq~ uq~pppppq~$sq~ uq~ppppsq~ Auq~Aq÷qÇ^qñ%qñHqñ`q~Ápq~¹sq~Ysq~isq~ uq~ppppq~+sq~ uq~ppppppptgetApplicationConfigq~=xsq~ uq~pppppq~$q~yq~$q~bpq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t0 return (this.applicationConfig); sq~ uq~ppppq~$q~$xsq~bsq~ uq~ppppsq~isq~ uq~q‚(»pppq~+sq~ uq~ppppppptsetApplicationConfigq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tª if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.applicationConfig = applicationConfig; sq~ uq~ppppq~$q~$xsq~ uq~ppppppptapplicationConfigq~=xsq~ uq~pppppq~$q~yq~$q~bpq~$xq~_xqÀ"qƒq~ÁUqøqÇwqñÄqñçqñÿqòq‚hq‚€q‚˜q‚°q‚Èq Ôq·µsq~isq~ uq~ppppq~+sq~ uq~ppppppptgetApplicationConfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~bpq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t0 return (this.applicationConfig); sq~ uq~ppppq~¥q~¥xsq~bsq~ uq~ppppsq~isq~ uq~q‚(ápppq~+sq~ uq~ppppppptsetApplicationConfigq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tª if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.applicationConfig = applicationConfig; sq~ uq~ppppq~¥q~¥xsq~ uq~ppppppptapplicationConfigq~¢xsq~ uq~pppppq~¥q~¦q~¥q~bpq~§xq~¹qÀQq…÷q~Áqø qÇqòÜqòÿqóqó/q‚Žq‚¦q‚¾q‚Öq‚îq¡q»]sq~isq~ uq~ppppq~+sq~ uq~ppppppptgetApplicationConfigq~rxsq~ uq~pppppq~–q~—q~–q~bpq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t0 return (this.applicationConfig); sq~ uq~ppppq~–q~–xsq~bsq~ uq~ppppsq~isq~ uq~q‚)pppq~+sq~ uq~ppppppptsetApplicationConfigq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tª if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.applicationConfig = applicationConfig; sq~ uq~ppppq~–q~–xsq~ uq~ppppppptapplicationConfigq~rxsq~ uq~pppppq~–q~—q~–q~bpq~˜xq~Ï>q~Ïnq~ÏŽq~Ϧq~ºrqÀ€qº;q¾/q¾GqˆoqŠ£qмq~Á­qúqôqû qôäq~Äxq~$ppxpq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xq‚(¬q‚(¾sq~(sq~ uq~ppppq~+sq~ uq~ppppptÏ/** * The request-scope or session-scope attribute name under which our * form bean is accessed, if it is different from the form bean's * specified name. */ /** * The request-scope or session-scope attribute name under which our * form bean is accessed, if it is different from the form bean's * specified name. */ /** * The request-scope or session-scope attribute name under which our * form bean is accessed, if it is different from the form bean's * specified name. */ /** * The request-scope or session-scope attribute name under which our * form bean is accessed, if it is different from the form bean's * specified name. */ /** * The request-scope or session-scope attribute name under which our * form bean is accessed, if it is different from the form bean's * specified name. */ pt attributeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~+sq~ uq~pppppppt getAttributeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t‘ if (this.attribute == null) { return (this.name); } else { return (this.attribute); } sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq‚)@sq~ uq~pppppppt attributeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~+sq~ uq~pppppppt setAttributeq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tš if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.attribute = attribute; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~+sq~ uq~ppppptþ/** * Context-relative path of the web application resource that will process * this request via RequestDispatcher.forward(), instead of instantiating * and calling the Action class specified by "type". * Exactly one of forward, include, or * type must be specified. */ /** * Context-relative path of the web application resource that will process * this request via RequestDispatcher.forward(), instead of instantiating * and calling the Action class specified by "type". * Exactly one of forward, include, or * type must be specified. */ /** * Context-relative path of the web application resource that will process * this request via RequestDispatcher.forward(), instead of instantiating * and calling the Action class specified by "type". * Exactly one of forward, include, or * type must be specified. */ /** * Context-relative path of the web application resource that will process * this request via RequestDispatcher.forward(), instead of instantiating * and calling the Action class specified by "type". * Exactly one of forward, include, or * type must be specified. */ /** * Context-relative path of the web application resource that will process * this request via RequestDispatcher.forward(), instead of instantiating * and calling the Action class specified by "type". * Exactly one of forward, include, or * type must be specified. */ ptforwardq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~+sq~ uq~pppppppt getForwardq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t& return (this.forward); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq‚)tsq~ uq~ppppppptforwardq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~+sq~ uq~pppppppt setForwardq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t– if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.forward = forward; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~+sq~ uq~ppppptþ/** * Context-relative path of the web application resource that will process * this request via RequestDispatcher.include(), instead of instantiating * and calling the Action class specified by "type". * Exactly one of forward, include, or * type must be specified. */ /** * Context-relative path of the web application resource that will process * this request via RequestDispatcher.include(), instead of instantiating * and calling the Action class specified by "type". * Exactly one of forward, include, or * type must be specified. */ /** * Context-relative path of the web application resource that will process * this request via RequestDispatcher.include(), instead of instantiating * and calling the Action class specified by "type". * Exactly one of forward, include, or * type must be specified. */ /** * Context-relative path of the web application resource that will process * this request via RequestDispatcher.include(), instead of instantiating * and calling the Action class specified by "type". * Exactly one of forward, include, or * type must be specified. */ /** * Context-relative path of the web application resource that will process * this request via RequestDispatcher.include(), instead of instantiating * and calling the Action class specified by "type". * Exactly one of forward, include, or * type must be specified. */ ptincludeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~+sq~ uq~pppppppt getIncludeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t& return (this.include); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq‚)¨sq~ uq~ppppppptincludeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~+sq~ uq~pppppppt setIncludeq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t– if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.include = include; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~+sq~ uq~pppppt~/** * Context-relative path of the input form to which control should be * returned if a validation error is encountered. Required if "name" * is specified and the input bean returns validation errors. */ /** * Context-relative path of the input form to which control should be * returned if a validation error is encountered. Required if "name" * is specified and the input bean returns validation errors. */ /** * Context-relative path of the input form to which control should be * returned if a validation error is encountered. Required if "name" * is specified and the input bean returns validation errors. */ /** * Context-relative path of the input form to which control should be * returned if a validation error is encountered. Required if "name" * is specified and the input bean returns validation errors. */ /** * Context-relative path of the input form to which control should be * returned if a validation error is encountered. Required if "name" * is specified and the input bean returns validation errors. */ ptinputq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~+sq~ uq~ppppppptgetInputq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t$ return (this.input); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq‚)Üsq~ uq~ppppppptinputq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~+sq~ uq~ppppppptsetInputq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t’ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.input = input; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~+sq~ uq~pppppt»/** * Fully qualified Java class name of the * MultipartRequestHandler implementation class used to * process multi-part request data for this Action. */ /** * Fully qualified Java class name of the * MultipartRequestHandler implementation class used to * process multi-part request data for this Action. */ /** * Fully qualified Java class name of the * MultipartRequestHandler implementation class used to * process multi-part request data for this Action. */ /** * Fully qualified Java class name of the * MultipartRequestHandler implementation class used to * process multi-part request data for this Action. */ /** * Fully qualified Java class name of the * MultipartRequestHandler implementation class used to * process multi-part request data for this Action. */ ptmultipartClassq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~+sq~ uq~ppppppptgetMultipartClassq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t- return (this.multipartClass); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq‚*sq~ uq~ppppppptmultipartClassq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~+sq~ uq~ppppppptsetMultipartClassq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t¤ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.multipartClass = multipartClass; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~+sq~ uq~pppppt•/** * Name of the form bean, if any, associated with this Action. */ /** * Name of the form bean, if any, associated with this Action. */ /** * Name of the form bean, if any, associated with this Action. */ /** * Name of the form bean, if any, associated with this Action. */ /** * Name of the form bean, if any, associated with this Action. */ ptnameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~+sq~ uq~ppppppptgetNameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t# return (this.name); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq‚*Dsq~ uq~ppppppptnameq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~+sq~ uq~ppppppptsetNameq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.name = name; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~+sq~ uq~ppppptE/** * General purpose configuration parameter that can be used to pass * extra iunformation to the Action instance selected by this Action. * Struts does not itself use this value in any way. */ /** * General purpose configuration parameter that can be used to pass * extra iunformation to the Action instance selected by this Action. * Struts does not itself use this value in any way. */ /** * General purpose configuration parameter that can be used to pass * extra iunformation to the Action instance selected by this Action. * Struts does not itself use this value in any way. */ /** * General purpose configuration parameter that can be used to pass * extra information to the Action instance selected by this Action. * Struts does not itself use this value in any way. */ /** * General purpose configuration parameter that can be used to pass * extra information to the Action instance selected by this Action. * Struts does not itself use this value in any way. */ pt parameterq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~+sq~ uq~pppppppt getParameterq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t( return (this.parameter); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq‚*xsq~ uq~pppppppq~ê[q~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~+sq~ uq~pppppppt setParameterq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tš if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.parameter = parameter; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~+sq~ uq~ppppptÔ/** * Context-relative path of the submitted request, starting with a * slash ("/") character, and omitting any filename extension if * extension mapping is being used. */ /** * Context-relative path of the submitted request, starting with a * slash ("/") character, and omitting any filename extension if * extension mapping is being used. */ /** * Context-relative path of the submitted request, starting with a * slash ("/") character, and omitting any filename extension if * extension mapping is being used. */ /** * Context-relative path of the submitted request, starting with a * slash ("/") character, and omitting any filename extension if * extension mapping is being used. */ /** * Context-relative path of the submitted request, starting with a * slash ("/") character, and omitting any filename extension if * extension mapping is being used. */ ptpathq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~+sq~ uq~ppppppptgetPathq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t# return (this.path); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq‚*«sq~ uq~ppppppptpathq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~+sq~ uq~ppppppptsetPathq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.path = path; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~+sq~ uq~pppppt(/** * Prefix used to match request parameter names to form ben property * names, if any. */ /** * Prefix used to match request parameter names to form ben property * names, if any. */ /** * Prefix used to match request parameter names to form ben property * names, if any. */ /** * Prefix used to match request parameter names to form bean property * names, if any. */ /** * Prefix used to match request parameter names to form bean property * names, if any. */ ptprefixq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~+sq~ uq~pppppppt getPrefixq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t% return (this.prefix); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq‚*ßsq~ uq~ppppppptprefixq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~+sq~ uq~pppppppt setPrefixq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t” if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.prefix = prefix; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~+sq~ uq~pppppt /** * Comma-delimited list of security role names allowed to request * this Action. */ /** * Comma-delimited list of security role names allowed to request * this Action. */ /** * Comma-delimited list of security role names allowed to request * this Action. */ /** * Comma-delimited list of security role names allowed to request * this Action. */ /** * Comma-delimited list of security role names allowed to request * this Action. */ ptrolesq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~+sq~ uq~ppppppptgetRolesq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t$ return (this.roles); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq‚+sq~ uq~ppppppptrolesq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~+sq~ uq~ppppppptsetRolesq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t¶ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.roles = roles; if (roles == null) { roleNames = new String[0]; return; } ArrayList list = new ArrayList(); while (true) { int comma = roles.indexOf(','); if (comma < 0) break; list.add(roles.substring(1, comma).trim()); roles = roles.substring(comma + 1); } roles = roles.trim(); if (roles.length() > 0) list.add(roles); roleNames = (String[]) list.toArray(new String[list.size()]); sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~+sq~ uq~pppppt”/** * The set of security role names used to authorize access to this * Action, as an array for faster access. */ /** * The set of security role names used to authorize access to this * Action, as an array for faster access. */ /** * The set of security role names used to authorize access to this * Action, as an array for faster access. */ /** * The set of security role names used to authorize access to this * Action, as an array for faster access. */ /** * The set of security role names used to authorize access to this * Action, as an array for faster access. */ pt roleNamesq~=xsq~ uq~pppppq~$q~yq~$q~{t[]q~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt new String[0]q~$q~$q~$xsq~isq~ uq~ppppq~+sq~ uq~pppppppt getRoleNamesq~=xsq~ uq~pppppq~$q~yq~$q~{t[]q~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t( return (this.roleNames); sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~+sq~ uq~ppppptv/** * Identifier of the scope ("request" or "session") within which * our form bean is accessed, if any. */ /** * Identifier of the scope ("request" or "session") within which * our form bean is accessed, if any. */ /** * Identifier of the scope ("request" or "session") within which * our form bean is accessed, if any. */ /** * Identifier of the scope ("request" or "session") within which * our form bean is accessed, if any. */ /** * Identifier of the scope ("request" or "session") within which * our form bean is accessed, if any. */ ptscopeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt "session"q~$q~$q~$xsq~isq~ uq~ppppq~+sq~ uq~ppppppptgetScopeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t$ return (this.scope); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq‚+fsq~ uq~ppppppptscopeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~+sq~ uq~ppppppptsetScopeq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t’ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.scope = scope; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~+sq~ uq~pppppt+/** * Suffix used to match request parameter names to form bean property * names, if any. */ /** * Suffix used to match request parameter names to form bean property * names, if any. */ /** * Suffix used to match request parameter names to form bean property * names, if any. */ /** * Suffix used to match request parameter names to form bean property * names, if any. */ /** * Suffix used to match request parameter names to form bean property * names, if any. */ ptsuffixq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~+sq~ uq~pppppppt getSuffixq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t% return (this.suffix); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq‚+šsq~ uq~ppppppptsuffixq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~+sq~ uq~pppppppt setSuffixq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t” if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.suffix = suffix; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~+sq~ uq~pppppt®/** * Fully qualified Java class name of the Action class * to be used to process requests for this mapping if the * forward and include properties are not set. * Exactly one of forward, include, or * type must be specified. */ /** * Fully qualified Java class name of the Action class * to be used to process requests for this mapping if the * forward and include properties are not set. * Exactly one of forward, include, or * type must be specified. */ /** * Fully qualified Java class name of the Action class * to be used to process requests for this mapping if the * forward and include properties are not set. * Exactly one of forward, include, or * type must be specified. */ /** * Fully qualified Java class name of the Action class * to be used to process requests for this mapping if the * forward and include properties are not set. * Exactly one of forward, include, or * type must be specified. */ /** * Fully qualified Java class name of the Action class * to be used to process requests for this mapping if the * forward and include properties are not set. * Exactly one of forward, include, or * type must be specified. */ pttypeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt nullq~$q~$q~$xsq~isq~ uq~ppppq~+sq~ uq~ppppppptgetTypeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t# return (this.type); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq‚+Îsq~ uq~pppppppttypeq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~+sq~ uq~ppppppptsetTypeq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.type = type; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~+sq~ uq~pppppt/** * Should this Action be configured as the default one for this * application? */ /** * Should this Action be configured as the default one for this * application? */ /** * Should this Action be configured as the default one for this * application? */ /** * Indicates Action be configured as the default one for this * application, when true. */ /** * Indicates Action be configured as the default one for this * application, when true. */ ptunknownq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt falseq~$q~$q~$xsq~isq~ uq~ppppq~+sq~ uq~pppppppt getUnknownq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t& return (this.unknown); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq‚,sq~ uq~ppppppptunknownq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xpppq~+sq~ uq~pppppppt setUnknownq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t– if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.unknown = unknown; sq~ uq~ppppq~$q~$xsq~(sq~ uq~ppppq~+sq~ uq~pppppt{/** * Should the validate() method of the form bean associated * with this action be called? */ /** * Should the validate() method of the form bean associated * with this action be called? */ /** * Should the validate() method of the form bean associated * with this action be called? */ /** * Should the validate() method of the form bean associated * with this action be called? */ /** * Should the validate() method of the form bean associated * with this action be called? */ ptvalidateq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xpppt trueq~$q~$q~$xsq~isq~ uq~ppppq~+sq~ uq~pppppppt getValidateq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t' return (this.validate); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq‚,6sq~ uq~ppppppptvalidateq~=xsq~ uq~pppppq~$q~yq~$q~pq~$xpppq~+sq~ uq~pppppppt setValidateq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t˜ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.validate = validate; sq~ uq~ppppq~$q~$xq‚ðq¡Àq‚ q‚ q¡Õq¡ísq~isq~ uq~ppppq~+sq~ uq~pppppt>/** * Freeze the configuration of this action. */ ptfreezeq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$th configured = true; ExceptionConfig[] econfigs = findExceptionConfigs(); for (int i = 0; i < econfigs.length; i++) { econfigs[i].freeze(); } ForwardConfig[] fconfigs = findForwardConfigs(); for (int i = 0; i < fconfigs.length; i++) { fconfigs[i].freeze(); } sq~ uq~ppppq~$q~$xq‚ 1q¢sq~isq~ uq~ppppq~+sq~ uq~ppppptD/** * Return a String representation of this object. */ pttoStringq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$tã StringBuffer sb = new StringBuffer("ActionConfig["); sb.append("path="); sb.append(path); if (attribute != null) { sb.append(",attribute="); sb.append(attribute); } if (forward != null) { sb.append(",forward="); sb.append(forward); } if (include != null) { sb.append(",include="); sb.append(include); } if (input != null) { sb.append(",input="); sb.append(input); } if (multipartClass != null) { sb.append(",multipartClass="); sb.append(multipartClass); } if (name != null) { sb.append(",name="); sb.append(name); } if (parameter != null) { sb.append(",parameter="); sb.append(parameter); } if (prefix != null) { sb.append(",prefix="); sb.append(prefix); } if (roles != null) { sb.append(",roles="); sb.append(roles); } if (scope != null) { sb.append(",scope="); sb.append(scope); } if (suffix != null) { sb.append(",suffix="); sb.append(suffix); } if (type != null) { sb.append(",type="); sb.append(type); } return (sb.toString()); sq~ uq~ppppq~$q~$xq‚(Òq‚(äsq~isq~ uq~ppppq~+sq~ uq~pppppppt getAttributeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t‘ if (this.attribute == null) { return (this.name); } else { return (this.attribute); } sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚,|sq~ uq~pppppppt attributeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~+sq~ uq~pppppppt setAttributeq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tš if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.attribute = attribute; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~+sq~ uq~pppppppt getForwardq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t& return (this.forward); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚,¢sq~ uq~ppppppptforwardq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~+sq~ uq~pppppppt setForwardq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t– if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.forward = forward; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~+sq~ uq~pppppppt getIncludeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t& return (this.include); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚,Èsq~ uq~ppppppptincludeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~+sq~ uq~pppppppt setIncludeq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t– if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.include = include; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~+sq~ uq~ppppppptgetInputq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t$ return (this.input); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚,îsq~ uq~ppppppptinputq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~+sq~ uq~ppppppptsetInputq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t’ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.input = input; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~+sq~ uq~ppppppptgetMultipartClassq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t- return (this.multipartClass); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚-sq~ uq~ppppppptmultipartClassq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~+sq~ uq~ppppppptsetMultipartClassq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t¤ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.multipartClass = multipartClass; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~+sq~ uq~ppppppptgetNameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t# return (this.name); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚-:sq~ uq~ppppppptnameq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~+sq~ uq~ppppppptsetNameq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.name = name; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~+sq~ uq~pppppppt getParameterq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t( return (this.parameter); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚-`sq~ uq~pppppppq~íƒq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~+sq~ uq~pppppppt setParameterq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tš if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.parameter = parameter; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~+sq~ uq~ppppppptgetPathq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t# return (this.path); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚-…sq~ uq~ppppppptpathq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~+sq~ uq~ppppppptsetPathq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.path = path; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~+sq~ uq~pppppppt getPrefixq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t% return (this.prefix); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚-«sq~ uq~ppppppptprefixq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~+sq~ uq~pppppppt setPrefixq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t” if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.prefix = prefix; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~+sq~ uq~ppppppptgetRolesq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t$ return (this.roles); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚-Ñsq~ uq~ppppppptrolesq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~+sq~ uq~ppppppptsetRolesq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t¶ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.roles = roles; if (roles == null) { roleNames = new String[0]; return; } ArrayList list = new ArrayList(); while (true) { int comma = roles.indexOf(','); if (comma < 0) break; list.add(roles.substring(0, comma).trim()); roles = roles.substring(comma + 1); } roles = roles.trim(); if (roles.length() > 0) list.add(roles); roleNames = (String[]) list.toArray(new String[list.size()]); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~+sq~ uq~pppppppt getRoleNamesq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{t[]q~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t( return (this.roleNames); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~+sq~ uq~ppppppptgetScopeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t$ return (this.scope); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚.sq~ uq~ppppppptscopeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~+sq~ uq~ppppppptsetScopeq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t’ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.scope = scope; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~+sq~ uq~pppppppt getSuffixq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t% return (this.suffix); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚.-sq~ uq~ppppppptsuffixq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~+sq~ uq~pppppppt setSuffixq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t” if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.suffix = suffix; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~+sq~ uq~ppppppptgetTypeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t# return (this.type); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚.Ssq~ uq~pppppppttypeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~+sq~ uq~ppppppptsetTypeq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.type = type; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~+sq~ uq~pppppppt getUnknownq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t& return (this.unknown); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚.ysq~ uq~ppppppptunknownq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xpppq~+sq~ uq~pppppppt setUnknownq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t– if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.unknown = unknown; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~+sq~ uq~pppppppt getValidateq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t' return (this.validate); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚.Ÿsq~ uq~ppppppptvalidateq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xpppq~+sq~ uq~pppppppt setValidateq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t˜ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.validate = validate; sq~ uq~ppppq~¥q~¥xq‚ ¢q¢rq‚ ·q‚ Ïq¢‡q¢Ÿsq~isq~ uq~ppppq~+sq~ uq~pppppt>/** * Freeze the configuration of this action. */ ptfreezeq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥th configured = true; ExceptionConfig[] econfigs = findExceptionConfigs(); for (int i = 0; i < econfigs.length; i++) { econfigs[i].freeze(); } ForwardConfig[] fconfigs = findForwardConfigs(); for (int i = 0; i < fconfigs.length; i++) { fconfigs[i].freeze(); } sq~ uq~ppppq~¥q~¥xq‚ ãq¢³sq~isq~ uq~ppppq~+sq~ uq~ppppptD/** * Return a String representation of this object. */ pttoStringq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥tã StringBuffer sb = new StringBuffer("ActionConfig["); sb.append("path="); sb.append(path); if (attribute != null) { sb.append(",attribute="); sb.append(attribute); } if (forward != null) { sb.append(",forward="); sb.append(forward); } if (include != null) { sb.append(",include="); sb.append(include); } if (input != null) { sb.append(",input="); sb.append(input); } if (multipartClass != null) { sb.append(",multipartClass="); sb.append(multipartClass); } if (name != null) { sb.append(",name="); sb.append(name); } if (parameter != null) { sb.append(",parameter="); sb.append(parameter); } if (prefix != null) { sb.append(",prefix="); sb.append(prefix); } if (roles != null) { sb.append(",roles="); sb.append(roles); } if (scope != null) { sb.append(",scope="); sb.append(scope); } if (suffix != null) { sb.append(",suffix="); sb.append(suffix); } if (type != null) { sb.append(",type="); sb.append(type); } return (sb.toString()); sq~ uq~ppppq~¥q~¥xq‚(øq‚) sq~isq~ uq~ppppq~+sq~ uq~pppppppt getAttributeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t‘ if (this.attribute == null) { return (this.name); } else { return (this.attribute); } sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚.åsq~ uq~pppppppt attributeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~+sq~ uq~pppppppt setAttributeq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tš if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.attribute = attribute; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~+sq~ uq~pppppppt getForwardq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t& return (this.forward); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚/ sq~ uq~ppppppptforwardq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~+sq~ uq~pppppppt setForwardq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t– if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.forward = forward; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~+sq~ uq~pppppppt getIncludeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t& return (this.include); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚/1sq~ uq~ppppppptincludeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~+sq~ uq~pppppppt setIncludeq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t– if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.include = include; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~+sq~ uq~ppppppptgetInputq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t$ return (this.input); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚/Wsq~ uq~ppppppptinputq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~+sq~ uq~ppppppptsetInputq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t’ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.input = input; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~+sq~ uq~ppppppptgetMultipartClassq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t- return (this.multipartClass); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚/}sq~ uq~ppppppptmultipartClassq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~+sq~ uq~ppppppptsetMultipartClassq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t¤ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.multipartClass = multipartClass; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~+sq~ uq~ppppppptgetNameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t# return (this.name); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚/£sq~ uq~ppppppptnameq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~+sq~ uq~ppppppptsetNameq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.name = name; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~+sq~ uq~pppppppt getParameterq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t( return (this.parameter); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚/Ésq~ uq~pppppppq~ð«q~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~+sq~ uq~pppppppt setParameterq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tš if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.parameter = parameter; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~+sq~ uq~ppppppptgetPathq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t# return (this.path); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚/îsq~ uq~ppppppptpathq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~+sq~ uq~ppppppptsetPathq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.path = path; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~+sq~ uq~pppppppt getPrefixq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t% return (this.prefix); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚0sq~ uq~ppppppptprefixq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~+sq~ uq~pppppppt setPrefixq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t” if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.prefix = prefix; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~+sq~ uq~ppppppptgetRolesq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t$ return (this.roles); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚0:sq~ uq~ppppppptrolesq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~+sq~ uq~ppppppptsetRolesq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t¶ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.roles = roles; if (roles == null) { roleNames = new String[0]; return; } ArrayList list = new ArrayList(); while (true) { int comma = roles.indexOf(','); if (comma < 0) break; list.add(roles.substring(0, comma).trim()); roles = roles.substring(comma + 1); } roles = roles.trim(); if (roles.length() > 0) list.add(roles); roleNames = (String[]) list.toArray(new String[list.size()]); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~+sq~ uq~pppppppt getRoleNamesq~rxsq~ uq~pppppq~–q~—q~–q~{t[]q~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t( return (this.roleNames); sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~+sq~ uq~ppppppptgetScopeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t$ return (this.scope); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚0psq~ uq~ppppppptscopeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~+sq~ uq~ppppppptsetScopeq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t’ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.scope = scope; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~+sq~ uq~pppppppt getSuffixq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t% return (this.suffix); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚0–sq~ uq~ppppppptsuffixq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~+sq~ uq~pppppppt setSuffixq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t” if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.suffix = suffix; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~+sq~ uq~ppppppptgetTypeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t# return (this.type); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚0¼sq~ uq~pppppppttypeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~+sq~ uq~ppppppptsetTypeq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.type = type; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~+sq~ uq~pppppppt getUnknownq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t& return (this.unknown); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚0âsq~ uq~ppppppptunknownq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xpppq~+sq~ uq~pppppppt setUnknownq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t– if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.unknown = unknown; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~+sq~ uq~pppppppt getValidateq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t' return (this.validate); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚1sq~ uq~ppppppptvalidateq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xpppq~+sq~ uq~pppppppt setValidateq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t˜ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.validate = validate; sq~ uq~ppppq~–q~–xq‚ Tq£Lq‚ iq‚ q£aq£ysq~isq~ uq~ppppq~+sq~ uq~pppppt>/** * Freeze the configuration of this action. */ ptfreezeq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–th configured = true; ExceptionConfig[] econfigs = findExceptionConfigs(); for (int i = 0; i < econfigs.length; i++) { econfigs[i].freeze(); } ForwardConfig[] fconfigs = findForwardConfigs(); for (int i = 0; i < fconfigs.length; i++) { fconfigs[i].freeze(); } sq~ uq~ppppq~–q~–xq‚ •q£sq~isq~ uq~ppppq~+sq~ uq~ppppptD/** * Return a String representation of this object. */ pttoStringq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–tã StringBuffer sb = new StringBuffer("ActionConfig["); sb.append("path="); sb.append(path); if (attribute != null) { sb.append(",attribute="); sb.append(attribute); } if (forward != null) { sb.append(",forward="); sb.append(forward); } if (include != null) { sb.append(",include="); sb.append(include); } if (input != null) { sb.append(",input="); sb.append(input); } if (multipartClass != null) { sb.append(",multipartClass="); sb.append(multipartClass); } if (name != null) { sb.append(",name="); sb.append(name); } if (parameter != null) { sb.append(",parameter="); sb.append(parameter); } if (prefix != null) { sb.append(",prefix="); sb.append(prefix); } if (roles != null) { sb.append(",roles="); sb.append(roles); } if (scope != null) { sb.append(",scope="); sb.append(scope); } if (suffix != null) { sb.append(",suffix="); sb.append(suffix); } if (type != null) { sb.append(",type="); sb.append(type); } return (sb.toString()); sq~ uq~ppppq~–q~–xqîqîžqî®qîÁqîÙsq~isq~ uq~ppppq~+sq~ uq~pppppt/** * Returns the request-scope or session-scope attribute name under which our * form bean is accessed, if it is different from the form bean's * specified name. * @return attribute name under which our form bean is accessed. */ pt getAttributeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t‘ if (this.attribute == null) { return (this.name); } else { return (this.attribute); } sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚1Osq~ uq~pppppppt attributeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~+sq~ uq~ppppptA/** * Set the request-scope or session-scope attribute name under which our * form bean is accessed, if it is different from the form bean's * specified name. * @param attribute the request-scope or session-scope attribute name under which our * form bean is access. */ pt setAttributeq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tš if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.attribute = attribute; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~+sq~ uq~ppppptê/** * Returns context-relative path of the web application resource that will process * this request. * @return context-relative path of the web application resource that will process * this request. */ pt getForwardq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t& return (this.forward); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚1wsq~ uq~ppppppptforwardq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~+sq~ uq~ppppptc/** * Set the context-relative path of the web application resource that will process * this request. * Exactly one of forward, include, or * type must be specified. * @param forward context-relative path of the web application resource that will process * this request. */ pt setForwardq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t– if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.forward = forward; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~+sq~ uq~ppppptâ/** * Context-relative path of the web application resource that will process * this request. * @return Context-relative path of the web application resource that will process * this request. */ pt getIncludeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t& return (this.include); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚1Ÿsq~ uq~ppppppptincludeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~+sq~ uq~pppppt_/** * Set context-relative path of the web application resource that will process * this request. * Exactly one of forward, include, or * type must be specified. * @param include context-relative path of the web application resource that will process * this request. */ pt setIncludeq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t– if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.include = include; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~+sq~ uq~pppppt"/** * Get the context-relative path of the input form to which control should be * returned if a validation error is encountered. * @return context-relative path of the input form to which control should be * returned if a validation error is encountered. */ ptgetInputq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t$ return (this.input); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚1Çsq~ uq~ppppppptinputq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~+sq~ uq~pppppt}/** * Set the context-relative path of the input form to which control should be * returned if a validation error is encountered. Required if "name" * is specified and the input bean returns validation errors. * @param input context-relative path of the input form to which control should be * returned if a validation error is encountered. */ ptsetInputq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t’ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.input = input; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~+sq~ uq~ppppptÊ/** * Return the fully qualified Java class name of the * MultipartRequestHandler implementation class used to * process multi-part request data for this Action. */ ptgetMultipartClassq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t- return (this.multipartClass); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚1ïsq~ uq~ppppppptmultipartClassq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~+sq~ uq~ppppptJ/** * Set the fully qualified Java class name of the * MultipartRequestHandler implementation class used to * process multi-part request data for this Action. * @param multipartClass fully qualified class name of the * MultipartRequestHandler implementation class. */ ptsetMultipartClassq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t¤ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.multipartClass = multipartClass; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~+sq~ uq~ppppptX/** * Return name of the form bean, if any, associated with this Action. */ ptgetNameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t# return (this.name); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚2sq~ uq~ppppppptnameq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~+sq~ uq~ppppptT/** * @param name name of the form bean associated with this Action. */ ptsetNameq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.name = name; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~+sq~ uq~ppppptå/** * Return general purpose configuration parameter that can be used to pass * extra information to the Action instance selected by this Action. * Struts does not itself use this value in any way. */ pt getParameterq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t( return (this.parameter); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚2?sq~ uq~pppppppq~óÓq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~+sq~ uq~pppppt"/** * General purpose configuration parameter that can be used to pass * extra information to the Action instance selected by this Action. * Struts does not itself use this value in any way. * @param parameter General purpose configuration parameter. */ pt setParameterq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tš if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.parameter = parameter; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~+sq~ uq~ppppptË/** * Return context-relative path of the submitted request, starting with a * slash ("/") character, and omitting any filename extension if * extension mapping is being used. */ ptgetPathq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t# return (this.path); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚2fsq~ uq~ppppppptpathq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~+sq~ uq~pppppt /** * Set context-relative path of the submitted request, starting with a * slash ("/") character, and omitting any filename extension if * extension mapping is being used. * @param path context-relative path of the submitted request. */ ptsetPathq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.path = path; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~+sq~ uq~ppppptw/** * Retruns prefix used to match request parameter names to form bean property * names, if any. */ pt getPrefixq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t% return (this.prefix); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚2Žsq~ uq~ppppppptprefixq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~+sq~ uq~pppppt}/** * @param prefix Prefix used to match request parameter names to * form bean property names, if any. */ pt setPrefixq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t” if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.prefix = prefix; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~+sq~ uq~ppppppptgetRolesq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t$ return (this.roles); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚2µsq~ uq~ppppppptrolesq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~+sq~ uq~ppppppptsetRolesq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t¶ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.roles = roles; if (roles == null) { roleNames = new String[0]; return; } ArrayList list = new ArrayList(); while (true) { int comma = roles.indexOf(','); if (comma < 0) break; list.add(roles.substring(0, comma).trim()); roles = roles.substring(comma + 1); } roles = roles.trim(); if (roles.length() > 0) list.add(roles); roleNames = (String[]) list.toArray(new String[list.size()]); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~+sq~ uq~ppppptg/** * Get array of security role names used to authorize access to this * Action. */ pt getRoleNamesq~{xsq~ uq~pppppq~~q~q~~q~{t[]q~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t( return (this.roleNames); sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~+sq~ uq~ppppptt/** * Get the scope ("request" or "session") within which * our form bean is accessed, if any. */ ptgetScopeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t$ return (this.scope); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚2ísq~ uq~ppppppptscopeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~+sq~ uq~pppppty/** * @param scope scope ("request" or "session") within which * our form bean is accessed, if any. */ ptsetScopeq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t’ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.scope = scope; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~+sq~ uq~ppppptv/** * Return suffix used to match request parameter names to form bean property * names, if any. */ pt getSuffixq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t% return (this.suffix); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚3sq~ uq~ppppppptsuffixq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~+sq~ uq~pppppt}/** * @param suffix Suffix used to match request parameter names to form bean property * names, if any. */ pt setSuffixq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t” if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.suffix = suffix; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~+sq~ uq~ppppppptgetTypeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t# return (this.type); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚3/** * Freeze the configuration of this action. */ ptfreezeq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~th configured = true; ExceptionConfig[] econfigs = findExceptionConfigs(); for (int i = 0; i < econfigs.length; i++) { econfigs[i].freeze(); } ForwardConfig[] fconfigs = findForwardConfigs(); for (int i = 0; i < fconfigs.length; i++) { fconfigs[i].freeze(); } sq~ uq~ppppq~~q~~xq‚ Gq¤Ýsq~isq~ uq~ppppq~+sq~ uq~ppppptD/** * Return a String representation of this object. */ pttoStringq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~tã StringBuffer sb = new StringBuffer("ActionConfig["); sb.append("path="); sb.append(path); if (attribute != null) { sb.append(",attribute="); sb.append(attribute); } if (forward != null) { sb.append(",forward="); sb.append(forward); } if (include != null) { sb.append(",include="); sb.append(include); } if (input != null) { sb.append(",input="); sb.append(input); } if (multipartClass != null) { sb.append(",multipartClass="); sb.append(multipartClass); } if (name != null) { sb.append(",name="); sb.append(name); } if (parameter != null) { sb.append(",parameter="); sb.append(parameter); } if (prefix != null) { sb.append(",prefix="); sb.append(prefix); } if (roles != null) { sb.append(",roles="); sb.append(roles); } if (scope != null) { sb.append(",scope="); sb.append(scope); } if (suffix != null) { sb.append(",suffix="); sb.append(suffix); } if (type != null) { sb.append(",type="); sb.append(type); } return (sb.toString()); sq~ uq~ppppq~~q~~xqðVqðfqðyqð‘sq~isq~ uq~ppppq~+sq~ uq~pppppt/** * Returns the request-scope or session-scope attribute name under which our * form bean is accessed, if it is different from the form bean's * specified name. * @return attribute name under which our form bean is accessed. */ pt getAttributeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft‘ if (this.attribute == null) { return (this.name); } else { return (this.attribute); } sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚3Ñsq~ uq~pppppppt attributeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~+sq~ uq~ppppptA/** * Set the request-scope or session-scope attribute name under which our * form bean is accessed, if it is different from the form bean's * specified name. * @param attribute the request-scope or session-scope attribute name under which our * form bean is access. */ pt setAttributeq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftš if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.attribute = attribute; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~+sq~ uq~ppppptê/** * Returns context-relative path of the web application resource that will process * this request. * @return context-relative path of the web application resource that will process * this request. */ pt getForwardq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft& return (this.forward); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚3ùsq~ uq~ppppppptforwardq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~+sq~ uq~ppppptc/** * Set the context-relative path of the web application resource that will process * this request. * Exactly one of forward, include, or * type must be specified. * @param forward context-relative path of the web application resource that will process * this request. */ pt setForwardq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft– if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.forward = forward; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~+sq~ uq~ppppptâ/** * Context-relative path of the web application resource that will process * this request. * @return Context-relative path of the web application resource that will process * this request. */ pt getIncludeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft& return (this.include); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚4!sq~ uq~ppppppptincludeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~+sq~ uq~pppppt_/** * Set context-relative path of the web application resource that will process * this request. * Exactly one of forward, include, or * type must be specified. * @param include context-relative path of the web application resource that will process * this request. */ pt setIncludeq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft– if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.include = include; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~+sq~ uq~pppppt"/** * Get the context-relative path of the input form to which control should be * returned if a validation error is encountered. * @return context-relative path of the input form to which control should be * returned if a validation error is encountered. */ ptgetInputq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft$ return (this.input); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚4Isq~ uq~ppppppptinputq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~+sq~ uq~pppppt}/** * Set the context-relative path of the input form to which control should be * returned if a validation error is encountered. Required if "name" * is specified and the input bean returns validation errors. * @param input context-relative path of the input form to which control should be * returned if a validation error is encountered. */ ptsetInputq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft’ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.input = input; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~+sq~ uq~ppppptÊ/** * Return the fully qualified Java class name of the * MultipartRequestHandler implementation class used to * process multi-part request data for this Action. */ ptgetMultipartClassq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft- return (this.multipartClass); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚4qsq~ uq~ppppppptmultipartClassq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~+sq~ uq~ppppptJ/** * Set the fully qualified Java class name of the * MultipartRequestHandler implementation class used to * process multi-part request data for this Action. * @param multipartClass fully qualified class name of the * MultipartRequestHandler implementation class. */ ptsetMultipartClassq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft¤ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.multipartClass = multipartClass; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~+sq~ uq~ppppptX/** * Return name of the form bean, if any, associated with this Action. */ ptgetNameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft# return (this.name); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚4™sq~ uq~ppppppptnameq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~+sq~ uq~ppppptT/** * @param name name of the form bean associated with this Action. */ ptsetNameq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.name = name; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~+sq~ uq~ppppptå/** * Return general purpose configuration parameter that can be used to pass * extra information to the Action instance selected by this Action. * Struts does not itself use this value in any way. */ pt getParameterq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft( return (this.parameter); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚4Ásq~ uq~pppppppq~öûq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~+sq~ uq~pppppt"/** * General purpose configuration parameter that can be used to pass * extra information to the Action instance selected by this Action. * Struts does not itself use this value in any way. * @param parameter General purpose configuration parameter. */ pt setParameterq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftš if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.parameter = parameter; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~+sq~ uq~ppppptË/** * Return context-relative path of the submitted request, starting with a * slash ("/") character, and omitting any filename extension if * extension mapping is being used. */ ptgetPathq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft# return (this.path); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚4èsq~ uq~ppppppptpathq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~+sq~ uq~pppppt /** * Set context-relative path of the submitted request, starting with a * slash ("/") character, and omitting any filename extension if * extension mapping is being used. * @param path context-relative path of the submitted request. */ ptsetPathq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.path = path; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~+sq~ uq~ppppptw/** * Retruns prefix used to match request parameter names to form bean property * names, if any. */ pt getPrefixq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft% return (this.prefix); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚5sq~ uq~ppppppptprefixq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~+sq~ uq~pppppt}/** * @param prefix Prefix used to match request parameter names to * form bean property names, if any. */ pt setPrefixq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft” if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.prefix = prefix; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~+sq~ uq~ppppppptgetRolesq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft$ return (this.roles); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚57sq~ uq~ppppppptrolesq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~+sq~ uq~ppppppptsetRolesq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft¶ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.roles = roles; if (roles == null) { roleNames = new String[0]; return; } ArrayList list = new ArrayList(); while (true) { int comma = roles.indexOf(','); if (comma < 0) break; list.add(roles.substring(0, comma).trim()); roles = roles.substring(comma + 1); } roles = roles.trim(); if (roles.length() > 0) list.add(roles); roleNames = (String[]) list.toArray(new String[list.size()]); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~+sq~ uq~ppppptg/** * Get array of security role names used to authorize access to this * Action. */ pt getRoleNamesq~cxsq~ uq~pppppq~fq~gq~fq~{t[]q~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft( return (this.roleNames); sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~+sq~ uq~ppppptt/** * Get the scope ("request" or "session") within which * our form bean is accessed, if any. */ ptgetScopeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft$ return (this.scope); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚5osq~ uq~ppppppptscopeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~+sq~ uq~pppppty/** * @param scope scope ("request" or "session") within which * our form bean is accessed, if any. */ ptsetScopeq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft’ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.scope = scope; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~+sq~ uq~ppppptv/** * Return suffix used to match request parameter names to form bean property * names, if any. */ pt getSuffixq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft% return (this.suffix); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚5—sq~ uq~ppppppptsuffixq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~+sq~ uq~pppppt}/** * @param suffix Suffix used to match request parameter names to form bean property * names, if any. */ pt setSuffixq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft” if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.suffix = suffix; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~+sq~ uq~ppppppptgetTypeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft# return (this.type); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚5¾sq~ uq~pppppppttypeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~+sq~ uq~ppppppptsetTypeq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.type = type; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~+sq~ uq~ppppptp/** * Determine whether Action is configured as the default one for this * application. */ pt getUnknownq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft& return (this.unknown); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚5åsq~ uq~ppppppptunknownq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxpppq~+sq~ uq~pppppt‚/** * @param unknown Indicates Action is configured as the default one for this * application, when true. */ pt setUnknownq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft– if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.unknown = unknown; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~+sq~ uq~pppppppt getValidateq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft' return (this.validate); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚6 sq~ uq~ppppppptvalidateq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxpppq~+sq~ uq~pppppppt setValidateq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft˜ if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.validate = validate; sq~ uq~ppppq~fq~fxq‚ _q¥»q‚ tq‚ Œq¥Ðq¥èsq~isq~ uq~ppppq~+sq~ uq~pppppt>/** * Freeze the configuration of this action. */ ptfreezeq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~fth configured = true; ExceptionConfig[] econfigs = findExceptionConfigs(); for (int i = 0; i < econfigs.length; i++) { econfigs[i].freeze(); } ForwardConfig[] fconfigs = findForwardConfigs(); for (int i = 0; i < fconfigs.length; i++) { fconfigs[i].freeze(); } sq~ uq~ppppq~fq~fxq‚  q¥üsq~isq~ uq~ppppq~+sq~ uq~ppppptD/** * Return a String representation of this object. */ pttoStringq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ftã StringBuffer sb = new StringBuffer("ActionConfig["); sb.append("path="); sb.append(path); if (attribute != null) { sb.append(",attribute="); sb.append(attribute); } if (forward != null) { sb.append(",forward="); sb.append(forward); } if (include != null) { sb.append(",include="); sb.append(include); } if (input != null) { sb.append(",input="); sb.append(input); } if (multipartClass != null) { sb.append(",multipartClass="); sb.append(multipartClass); } if (name != null) { sb.append(",name="); sb.append(name); } if (parameter != null) { sb.append(",parameter="); sb.append(parameter); } if (prefix != null) { sb.append(",prefix="); sb.append(prefix); } if (roles != null) { sb.append(",roles="); sb.append(roles); } if (scope != null) { sb.append(",scope="); sb.append(scope); } if (suffix != null) { sb.append(",suffix="); sb.append(suffix); } if (type != null) { sb.append(",type="); sb.append(type); } return (sb.toString()); sq~ uq~ppppq~fq~fxppppppppppq~ sq~ uq~pppppppt ActionConfigq~=xsq~ uq~ sq~Csq~ uq~ppppq~xsq~ uq~ppppsq~#q~+xq~%sq~Csq~ uq~ppppq~bsq~ uq~ppppsq~#q~+xqp÷ppppppq~$sq~ uq~q‚ µqYBppsq~ uq~ppppq~$q~$q‚žsq~ uq~q~éppppq~$sq~ uq~ppppsq~ uq~q‚&Mq‚&bq‚&zq‚&žq‚'q‚'&q‚'>q‚'bq‚'Õq‚'êq‚(q‚(&qŠq~Bqê†qêqë qñqëÓqìqì,qìœq’Œpppppppq~Äxq~$ppxxq‚Ýq~À6q~Bsq~ uq~pppppt·/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/action/ActionMapping.java,v 1.27 2003/02/25 04:58:29 dgraham Exp $ * $Revision: 1.27 $ * $Date: 2003/02/25 04:58:29 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** *

            An ActionMapping represents the information that the * controller servlet, ActionServlet, knows about the mapping * of a particular request to an instance of a particular action class. * The ActionMapping instance used to select a particular Action is passed * on to that Action, thereby providing access to any custom configuration * information included with the ActionMapping object.

            * *

            Since Struts 1.1 this class extends ActionConfig. * *

            NOTE - This class would have been deprecated and * replaced by org.apache.struts.config.ActionConfig except * for the fact that it is part of the public API that existing applications * are using.

            * * @author Craig R. McClanahan * @version $Revision: 1.27 $ $Date: 2003/02/25 04:58:29 $ */ ptActionMapping.javaq~fxsq~ uq~ppppsq~ uq~q~épppq~fxsq~ uq~ppppsq~#q~xsq~Csq~ uq~ppppq~bsq~ uq~ppppsq~#q~xq‚¡q~Éžq~~q~E¾q€4”q~E’q0bq°€qpapppppppq~$sq~ uq~q~P8pppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~8sq~ uq~ppppppptArrayList.javaq~$xsq~ uq~ppppsq~ uq~q~pppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~q~Òpppq~Äxq~$ppxxq~EÒq~Phq~ sq~Csq~ uq~ppppq~sq~ uq~ppppsq~#q~xq~E¦pppq~Bsq~ uq~ppppptÇ/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/action/ActionMessages.java,v 1.9 2003/04/15 00:14:28 dgraham Exp $ * $Revision: 1.9 $ * $Date: 2003/04/15 00:14:28 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** *

            A class that encapsulates messages. Messages can be either global * or they are specific to a particular bean property.

            * *

            Each individual message is described by an ActionMessage * object, which contains a message key (to be looked up in an appropriate * message resources database), and up to four placeholder arguments used for * parametric substitution in the resulting message.

            * *

            IMPLEMENTATION NOTE - It is assumed that these objects * are created and manipulated only within the context of a single thread. * Therefore, no synchronization is required for access to internal * collections.

            * * @author David Geary * @author Craig R. McClanahan * @author David Winterfeldt * @author David Graham * @version $Revision: 1.9 $ $Date: 2003/04/15 00:14:28 $ * @since Struts 1.1 */ ptActionMessages.javaq~fxsq~ uq~ppppsq~ uq~q~Ipppq~fxsq~ uq~ppppsq~#q~öxqåksq~Csq~ uq~ppppq~bsq~ uq~ppppsq~#q~öxq@q~0Õq•¨q~ðq€€“q€¤qâcqâ2q~Ržq0q€"q€4¬qøbqåqå?qOq–mq[vq°Œq zq/Ìqõqpyq~Pppppq~$sq~ uq~q§qzqæbpsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~8sq~ uq~pppppppt Iterator.javaq~$xsq~ uq~ppppsq~ uq~q~öpppq~$xsq~ uq~qqåŽpppq~$sq~ uq~ppppsq~ >uq~Aq‚^q‚nq‚†qA¹qCqN(qN8qA¬qCˆq~rNq€ƒñq€Ó´q~§q‚Þq‚îq‚qAÉqCµqOïqOÿqEöqFBq€…qq€Õdq~”q©èq‚­q‚½q‚ÕqAÙqCÍqQµqQÅqH8qH„q€†ãq€×q«q‚{q‚‹q‚£qJzqJÆqAéqCåqS{qS‹q€ˆUq€ØÄq¬(q‚Iq‚Yq‚qqL¼qMqAùqCýqUAqUQq€‰Çq€Útq­Hpppq~Äxxsq~Csq~ uq~ppppq~ísq~ uq~ppppsq~#q~5xq~êqõ÷qõ£q~\ÂqaPq•¿q‚Jq‚{q~R’qÇËq.˜q2™qûqq6qýJqb©q‚­q&þqÛ»pppq~ sq~ uq~ppppptX/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/config/ConfigHelper.java,v 1.5 2003/05/04 22:41:13 dgraham Exp $ * $Revision: 1.5 $ * $Date: 2003/05/04 22:41:13 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * NOTE: THIS CLASS IS UNDER ACTIVE DEVELOPMENT. * THE CURRENT CODE IS WRITTEN FOR CLARITY NOT EFFICIENCY. * NOT EVERY API FUNCTION HAS BEEN IMPLEMENTED YET. * * A helper object to expose the Struts shared resources, * which are be stored in the application, session, or * request contexts, as appropriate. * * An instance should be created for each request * processed. The methods which return resources from * the request or session contexts are not thread-safe. * * Provided for use by other servlets in the application * so they can easily access the Struts shared resources. * * The resources are stored under attributes in the * application, session, or request contexts. * * The ActionConfig methods simply return the resources * from under the context and key used by the Struts * ActionServlet when the resources are created. * * @since 1.1 * @author Ted Husted * @author Luis Arias * @version $Revision: 1.5 $ $Date: 2003/05/04 22:41:13 $ */ ptConfigHelper.javaq~fxsq~ uq~ppppsq~ uq~q,_pppq~fxsq~ uq~ppppsq~#q~Öxq®q~'(q´q´7qN¦qGaqû5q¯qL?q®-q°jq~?jq~CLq~8q95qO q°hsq~Csq~ uq~ppppq~Hsq~ uq~ppppsq~#q~Öxq †q~QJq"íqp‹qeèqh¸qfqfaqfŸpppppppq~$sq~ uq~q~Ëpppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~³sq~ uq~ppppppptServletContext.javaq~$xsq~ uq~ppppsq~ uq~q~Öpppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~q·rq,bq,sq-#qN£q…q…:q…Sq?qbqi½qiÖqj÷qkqi\qºúqNÉqOAqPiq«æsq~bsq~ uq~ppppq~™sq~ uq~ppppppptservletContextq~¢xsq~ uq~pppppq~¥q~¦q~¥q~Öpq~§xq~6q«¹q­;q}—q}Àq|Èq}éqOfq~q®qq~6vq~6–q~6µq~6Ýq~6ýq~7-qP¤q~66q~!ïq~4ÿq~5oq~5—q~5¿q~5þq˜¨qTcq˜Çq—Cq~5$q~5äq‡‘q‡²q‡ËqqkAqkZql{qlœqlÕq¾òqPqQqR/q¬Hq¯Ôq­kq®¸q–¨q¯üq~9.q~9Mq~9{qG~qG§qGÈqGéqHq~¿qO°qHLqHhq{qy[qy{qQJqQiqQˆqQ°qQÐqOúqQðqRqT¶qTîqUqU>qUVq™q™$q™Dq—kq™tq—“q[½q[åqlqmqmqm@qnqqŠlqŠqŠÇqŠàqdCqd\qd}qe®qÂøqRUqRÍqSõq­›qH†qH¯qHÐqHñqTqI3qIOq³¿q¨çq©q©7q©Oq©wq¨Áq©—qMqMOqIuqIŽqM™q~9±q~9Ðq~9þq®ÿq¬q~8™q~8Éq~9 qI¯qIêq–Ïq°q°qRHqRgqR†qR®qRÎqPCqRîqSq{–qyÝqyýqU¥qUÝqVqV-qVEq™Ëq™êqš q—»qš:q—ãq\=q\eqn¢qn»qnÜqp q×qŽCqŽlqŽqŽ®qŽÏqŽðq*q\qvq‘q‘!q‘BqŽqÆðqTqT“qU»q­ËqJqJ0qJQqJrqéqJ´qJÐq³ßq©Çq©÷qªqª/qªWqªwqª—qMìqNqJöqKqNgq~:4q~:Sq~:q¯Fq¬ÖqKÇqK÷qK8qKPqK‹q–öq°:q°2qSFqSeqS„qS¬qSÌqPŒqSìqTq|,qz_qzqV”qVÌqVôqWqW4qš‘qš°qšÐq˜ q›q˜3q\¥q\Íqp>qpWqpxqq©q Bq’Þq“q“(q“Iq“jq“‹q“Åq“÷q”q’cq’|q’qÏpppq~Äxq~$ppxxqð·sq~Csq~ uq~ppppq~Ásq~ uq~ppppsq~#q~°xq~¾qõåqõ‘q~\¼qaDq•ŠqìéqÛ£q”†q~}ppppq~Bsq~ uq~pppppt/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/action/Action.java,v 1.60 2003/04/25 04:23:28 dgraham Exp $ * $Revision: 1.60 $ * $Date: 2003/04/25 04:23:28 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * An Action is an adapter between the contents of an incoming * HTTP request and the corresponding business logic that should be executed to * process this request. The controller (ActionServlet) will select an * appropriate Action for each request, create an instance (if necessary), * and call the perform method.

            * *

            Actions must be programmed in a thread-safe manner, because the * controller will share the same instance for multiple simultaneous * requests. This means you should design with the following items in mind: *

            *
              *
            • Instance and static variables MUST NOT be used to store information * related to the state of a particular request. They MAY be used to * share global resources across requests for the same action.
            • *
            • Access to other resources (JavaBeans, session variables, etc.) MUST * be synchronized if those resources require protection. (Generally, * however, resource classes should be designed to provide their own * protection where necessary.
            • *
            * *

            When an Action instance is first created, the controller * servlet will call setServlet() with a non-null argument to * identify the controller servlet instance to which this Action is attached. * When the controller servlet is to be shut down (or restarted), the * setServlet() method will be called with a null * argument, which can be used to clean up any allocated resources in use * by this Action.

            * * @author Craig R. McClanahan * @author David Graham * @version $Revision: 1.60 $ $Date: 2003/04/25 04:23:28 $ */ pt Action.javaq~fxsq~ uq~ppppsq~ uq~q~Epppq~fxsq~ uq~ppppsq~#q~¶xpppq~$sq~ uq~q~Ëhpppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~³sq~ uq~ppppppptServletResponse.javaq~$xsq~ uq~ppppsq~ uq~q~¶pppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~qÇòqÈ"qÈRqȲqÉqÉrqÉÒqÊ2qÊ’qÊòppppq~Äxq~$ppxq~q~¦q~lq~Öq~q~ËHsq~Qsq~ uq~ppppq~³sq~ uq~ppppppptServletRequest.javaq~$xsq~ uq~ppppsq~ uq~q~°pppq~$xq‚6öqðÓqûJq~Ò3q‚6Éq~Óq~' q|²q~˸pq~0÷sq~ uq~ppppppptservletq~=xsq~ uq~pppppq~Ë[sq~ uq~q~1pppq~$ppxsq~ uq~pppppq~‡ptServletRequestq~=xsq~ uq~sq~Csq~ uq~ppppq~Œsq~ uq~ppppsq~#q~°xq~,Kqåqq‚6áqÅq~'4q´CqN²qGgqåzqLKq®'q~8q9/qOq°bpppppppq~$sq~ uq~q~Ë^pppsq~ uq~ppppq~$q~$q‚7sq~ uq~pppppq~$sq~ uq~ppppsq~ cuq~kqÇêqÈq~ÄÝqÕq~,¸q~ÄÂqÈJqȪqÆMq6q~-‘q~Äúqªcqª„q~¨qO^q~4q~Mq~nq~7%q~!çq~4÷q~5gq~5q~5·q~5q~5Üq~Åq~.jqƵq—qÉ qÉjq«ƒq«¤q– q~9&qO¨q~Øq~ñqqzøqOòqT®qTæqUqU6q™lq—‹q~/Cq~Å:qÉÊqÊ*qÇq8qmq†q§q©/qImqM‘q~9©q¬£q¬Äq~9q–ÇqP;q{ŽqUqUÕqUýqV%qš2q—Ûq~0q~ÅZqÊŠqÊêqÇ…q¹q€q€q€. * *//** * A factory for definitions. * This factory allows to retrieve definitions by their keys. */ ptDefinitionsFactory.javaq~¥xsq~ uq~ppppsq~ uq~q~!Ìpppq~¥xsq~ uq~ppppsq~#q~xq~)Ûq~{q‚6ƒqåeq:qäÞq,q•¢q‚§q~ÎUq€4^qýÀq”Îq~'@qåqå9q~8q9AqOq[pq°†q/Æqpmq~Oüq~…Ûppppq~$sq~ uq~q~PLpppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~8sq~ uq~pppppppt HashMap.javaq~$xsq~ uq~ppppsq~ uq~q~pppq~$xsq~ uq~qPÙq}pppq~$sq~ uq~ppppsq~ uq~q~\q~Ä©qrDqrRq~¹q~;Šq~=q~Kq~~q~Œq~šq~¨q~¶q~Äq~¦q~4q~³{qÌNq~Nq~Npppppq~Äxq~$ppxxq~sq~Csq~ uq~ppppq~xsq~ uq~ppppsq~#q~5xq~tq~äqð±qõßqõ‹q~\¶qË×q~Gq•„q‚6Hq‚×q~Àqìãq~$Äq&ìqÛq”€pppq~Bsq~ uq~pppppt L/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/action/RequestProcessor.java,v 1.30 2003/04/19 01:16:29 dgraham Exp $ * $Revision: 1.30 $ * $Date: 2003/04/19 01:16:29 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** *

            RequestProcessor contains the processing logic that * the Struts controller servlet performs as it receives each servlet request * from the container. You can customize the request processing behavior by * subclassing this class and overriding the method(s) whose behavior you are * interested in changing.

            * * @author Craig R. McClanahan * @author Cedric Dumoulin * @version $Revision: 1.30 $ $Date: 2003/04/19 01:16:29 $ * @since Struts 1.1 */ ptRequestProcessor.javaq~fxsq~ uq~ppppsq~ uq~q~¸üpppq~fxsq~ uq~ppppsq~#q~kxq~Äq~eq€Sîq~\Îq~\úq~E¸q€Ñq~³9q~´ãqêq­ìq~ÀHq´1qN q~€q' q¯~qL9q°Rq~&/q~Bqèq°˜sq~Csq~ uq~ppppq~Hsq~ uq~ppppsq~#q~kxq nq’q­q|q~ø/qâqÄq~%Üq/Þq Žq€ê’q~Oðq€hµppppppq~–sq~ uq~qdqHppsq~ uq~ppppq~–q~–sq~Qsq~ uq~ppppq~Tsq~ uq~ppppppptIOException.javaq~–xsq~ uq~ppppsq~ uq~q~kpppq~–xsq~ uq~q~äÞqbpppq~–sq~ uq~ppppsq~ uq~ppppq~¢xq~–ppxsq~ uq~qòœqò¼qó”q»rq»’q»âq£$q¼ q¼bq¼šq¼Âq½ q½jq½Úq¾q¾2q¾Zq¾‚q¾ªqÉ_qÉq¬-q¯¹q­Pq®q(Âq(úq)*q)Rq)zq)¢q~º—q~ºÇq~ºïq¦gq¦q~@Œq~<»qYKq·ƒq·Âq¸q³êq´q´,q´Rq¸*q¸:qÂq°Øqq~îÌq~îÜq~îôq~ïq~ïq~ï]q~ð[q~ðkq~ð{q~ðÃq~ðëq~ñq~ñ+q~ñKq~ñkqÚqñqq7qeqàqðqqåqq~Ó"q~ÓÕq Æq åqbqrq—qÚq~—q¿xq¿˜q¿èq¤qÀqÀhqÀ qÀÈqÁqÁpqÁàqÂqÂ8qÂ`qˆq°qÊqÊOqóÄqóäqôtq­€q¦çq§q¤õq§?q§gq¨Ìq¨üqMqM4qMeq®äq)êq*"q*Rq*zq*¢q*Êq¬tq~8~q~8®q~8Þq¯èq~= q~A,qZ$qqqq.qMqtq¢qNq^qvq"qDq~ñôq~òq~òq~ò,q~òDq~ò…q~óƒq~ó“q~ó£q~óëq~ôq~ôCq~ôSq~ôsq~ô“qqq¸Jq¸‰q¸áq´q´˜q´Áq´çq¸ñq¹q°ñq±q±q~Ó1q~Óäq q $q~ÃqÃpqÃqÃàq¥>qÄqÄ`qĘqÄÀqÅqÅhqÅØqÆqÆ0qÆXqÆ€qƨqÊßqËqô¤qôÄqõTq­°q§Ïq§ÿq¦q¨'q¨Oq©¬q©ÜqMÑqNqN3q¯+q+q+Jq+zq+¢q+Êq+òq¬»qK¬qKÜqL q°q~=Yq~AÌqZýqÙqêqTqkqŠq±qßq¼qÌqäq _q q~õq~õ,q~õDq~õTq~õlq~õ­q~ö«q~ö»q~öËq~÷q~÷;q~÷kq~÷{q~÷›q~÷»q¢q²q¹q¹Pq¹¨qµqµ-qµVqµ|q¹¸q¹Èq±+q±. * *//** *

            ActionServlet represents the "controller" in the * Model-View-Controller (MVC) design pattern for web applications that is * commonly known as "Model 2". This nomenclature originated with a * description in the JavaServerPages Specification, version 0.92, and has * persisted ever since (in the absence of a better name).

            * *

            Generally, a "Model 2" application is architected as follows:

            *
              *
            • The user interface will generally be created with JSP pages, which * will not themselves contain any business logic. These pages represent * the "view" component of an MVC architecture.
            • *
            • Forms and hyperlinks in the user interface that require business logic * to be executed will be submitted to a request URI that is mapped to the * controller servlet.
            • *
            • There will be one instance of this servlet class, * which receives and processes all requests that change the state of * a user's interaction with the application. This component represents * the "controller" component of an MVC architecture.
            • *
            • The controller servlet will select and invoke an action class to perform * the requested business logic.
            • *
            • The action classes will manipulate the state of the application's * interaction with the user, typically by creating or modifying JavaBeans * that are stored as request or session attributes (depending on how long * they need to be available). Such JavaBeans represent the "model" * component of an MVC architecture.
            • *
            • Instead of producing the next page of the user interface directly, * action classes will generally use the * RequestDispatcher.forward() facility of the servlet API * to pass control to an appropriate JSP page to produce the next page * of the user interface.
            • *
            * *

            The standard version of ActionServlet implements the * following logic for each incoming HTTP request. You can override * some or all of this functionality by subclassing this servlet and * implementing your own version of the processing.

            *
              *
            • Identify, from the incoming request URI, the substring that will be * used to select an action procedure.
            • *
            • Use this substring to map to the Java class name of the corresponding * action class (an implementation of the Action interface). *
            • *
            • If this is the first request for a particular action class, instantiate * an instance of that class and cache it for future use.
            • *
            • Optionally populate the properties of an ActionForm bean * associated with this mapping.
            • *
            • Call the execute method of this action class, passing * on a reference to the mapping that was used (thereby providing access * to the underlying ActionServlet and ServletContext, as well as any * specialized properties of the mapping itself), and the request and * response that were passed to the controller by the servlet container. *
            • *
            * *

            The standard version of ActionServlet is configured based * on the following servlet initialization parameters, which you will specify * in the web application deployment descriptor (/WEB-INF/web.xml) * for your application. Subclasses that specialize this servlet are free to * define additional initialization parameters. Several of these were * deprecated between the 1.0 and 1.1 releases. The deprecated parameters * are listed after the nominal parameters.

            *
              *
            • config - Comma-separated list of context-relative * path(s) to the XML resource(s) containing the configuration information * for the default module. (Multiple files support since Struts 1.1) * [/WEB-INF/struts-config.xml].
            • *
            • config/${module} - Comma-separated list of * Context-relative path(s) to the XML resource(s) * containing the configuration information for the module that * will use the specified prefix (/${module}). This can be repeated as many * times as required for multiple modules. (Since Struts 1.1)
            • *
            • convertNull - Force simulation of the Struts 1.0 behavior * when populating forms. If set to true, the numeric Java wrapper class types * (like java.lang.Integer) will default to null (rather than 0). * (Since Struts 1.1) [false]
            • *
            • rulesets - Comma-delimited list of fully qualified * classnames of additional org.apache.commons.digester.RuleSet * instances that should be added to the Digester that will * be processing struts-config.xml files. By default, only * the RuleSet for the standard configuration elements is * loaded. (Since Struts 1.1)
            • *
            • validating - Should we use a validating XML parser to * process the configuration file (strongly recommended)? [true]
            • *
            *

            The following parameters may still be used with the Struts 1.1 release but * are deprecated. *

              *
            • application - Java class name of the application * resources bundle base class. [NONE] * DEPRECATED - Configure this using the "parameter" attribute * of the <message-resources> element.
            • *
            • bufferSize - The size of the input buffer used when * processing file uploads. [4096] * DEPRECATED - Configure this using the "bufferSize" attribute * of the <controller> element.
            • *
            • content - Default content type and character encoding * to be set on each response; may be overridden by a forwarded-to * servlet or JSP page. [text/html] * DEPRECATED - Configure this using the "contentType" attribute * of the <controller> element.
            • *
            • debug - TThe debugging detail level that controls how much * information is logged for this servlet. Accepts values 0 (off) and from * 1 (least serious) through 6 (most serious). [0] * DEPRECATED - Configure the logging detail level in your * underlying logging implementation.
            • *
            • factory - The Java class name of the * MessageResourcesFactory used to create the application * MessageResources object. * [org.apache.struts.util.PropertyMessageResourcesFactory] * DEPRECATED - Configure this using the "factory" attribute * of the <message-resources> element.
            • *
            • formBean - The Java class name of the ActionFormBean * implementation to use [org.apache.struts.action.ActionFormBean]. * DEPRECATED - Configure this using the "className" attribute * of each <form-bean> element.
            • *
            • forward - The Java class name of the ActionForward * implementation to use [org.apache.struts.action.ActionForward]. * Two convenient classes you may wish to use are: *
                *
              • org.apache.struts.action.ForwardingActionForward - * Subclass of org.apache.struts.action.ActionForward * that defaults the redirect property to * false (same as the ActionForward default value). *
              • org.apache.struts.action.RedirectingActionForward - * Subclass of org.apache.struts.action.ActionForward * that defaults the redirect property to * true. *
              * DEPRECATED - Configure this using the "className" attribute of * each <forward> element.
            • *
            • locale - If set to true, and there is a * user session, identify and store an appropriate * java.util.Locale object (under the standard key * identified by Globals.LOCALE_KEY) in the user's session * if there is not a Locale object there already. [true] * DEPRECATED - Configure this using the "locale" attribute of * the <controller> element.
            • *
            • mapping - The Java class name of the ActionMapping * implementation to use [org.apache.struts.action.ActionMapping]. * Two convenient classes you may wish to use are: *
                *
              • org.apache.struts.action.RequestActionMapping - Subclass * of org.apache.struts.action.ActionMapping that * defaults the scope property to "request". *
              • org.apache.struts.action.SessionActionMapping - Subclass * of org.apache.struts.action.ActionMapping that * defaults the scope property to "session". (Same * as the ActionMapping default value). *
              * DEPRECATED - Configure this using the "className" attribute of * each <action> element, or globally for a module by using the * "type" attribute of the <action-mappings> element.
            • *
            • maxFileSize - The maximum size (in bytes) of a file * to be accepted as a file upload. Can be expressed as a number followed * by a "K" "M", or "G", which are interpreted to mean kilobytes, * megabytes, or gigabytes, respectively. [250M] * DEPRECATED - Configure this using the "maxFileSize" attribute of * the <controller> element.
            • *
            • multipartClass - The fully qualified name of the * MultipartRequestHandler implementation class to be used for processing * file uploads. If set to none, disables Struts multipart * request handling. [org.apache.struts.upload.CommonsMultipartRequestHandler] * DEPRECATED - Configure this using the "multipartClass" attribute of * the <controller> element.
            • *
            • nocache - If set to true, add HTTP headers * to every response intended to defeat browser caching of any response we * generate or forward to. [false] * DEPRECATED - Configure this using the "nocache" attribute of * the <controller> element.
            • *
            • null - If set to true, set our application * resources to return null if an unknown message key is used. * Otherwise, an error message including the offending message key will * be returned. [true] * DEPRECATED - Configure this using the "null" attribute of * the <message-resources> element.
            • *
            • tempDir - The temporary working directory to use when * processing file uploads. [The working directory provided to this web * application as a servlet context attribute] * DEPRECATED - Configure this using the "tempDir" attribute of * the <controller> element.
            • *
            * * @author Craig R. McClanahan * @author Ted Husted * @author Martin Cooper * @author David Graham * @version $Revision: 1.148 $ $Date: 2003/04/19 00:01:28 $ */ ptActionServlet.javaq~fxsq~ uq~ppppsq~ uq~q~ ppppq~fxsq~ uq~ppppsq~#q~Wxq€Sôqîq°’q hq˜q~ø)qÜqÊq~%Öq ”q~Oöq€h¯pppppq~$sq~ uq~q~& q~æ,ppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~Tsq~ uq~ppppppptInputStream.javaq~$xsq~ uq~ppppsq~ uq~q~Wpppq~$xsq~ uq~q~¾q~æFq Éppq~$sq~ uq~ppppsq~ #uq~'q~Áqµ÷qòqåq~çIq~èq Jq~2]q¶¿qqÒq~ë·q ŠqYNq·†qq~îßq Ûq ÉqrqÚqZ'qq~òqq¸Mq±q q[qêq~õ/q²q¹q±Uq Gppppq~Äxq~$ppxq~&!q~%®q€Tq~%èq~Qq~%Âq~ýq€Ðq€üq"q~Óšq"Çq‚7¢q€„q‚q€Tq³sq~Qsq~ uq~ppppq~Tsq~ uq~pppppppt File.javaq~$xsq~ uq~ppppsq~ uq~q~Qpppq~$xqØq°­q€âqq.q~Ó¶q"ÝqHqTq~kq‚7q~%üq|ppppppppq~Çsq~ uq~ppppppptioq~=xsq~ uq~pppppq~& sq~ uq~q~„Rpppq~$ppxsq~ uq~pppppq~‡ptFileq~=xsq~ uq~ q~Kq \qŒq~ø5qÊq~%Ðpppppq~$sq~ uq~q€¨pppsq~ uq~ppppq~$q~$q‚7²sq~ uq~pppppq~$sq~ uq~ppppsq~ uq~q~ù÷q~ú…q~úÙq~ûqq~üq~üXq~ü›qÊq~ýƒq~ý×q~þqqDq~ÿq~ÿVq~ÿ™q qqÕqpppq~Äxq~$ppxxq‚7wq~Eqâq‚6¿qðÉqõýqËïqËeq‚hqýPqìõq•Ñpq~äÛsq~ uq~pppppt ô/* * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/upload/DiskMultipartRequestHandler.java,v 1.22 2003/04/21 02:28:20 rleland Exp $ * $Revision: 1.22 $ * $Date: 2003/04/21 02:28:20 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Struts", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * *//** * This is a MultipartRequestHandler that writes file data directly to * to temporary files on disk. * * @author Mike Schachter */ pt DiskMultipartRequestHandler.javaq~fxsq~ uq~ppppsq~ uq~q~Åpppq~fxsq~ uq~ppppsq~#q~;xq tqáqpsppppppq~$sq~ uq~q~P.pppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~8sq~ uq~ppppppptHashtable.javaq~$xsq~ uq~ppppsq~ uq~q~;pppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ -uq~2q~ñq~þq~ q½Zq¼Âq½q¼µq½q½Mq½iq¼Ñq½q§q¶qÂÅq½xq¼àq½,qÃUqÃdqÃsq»Eq»Rq»_q¼ªq¼öq½BqÀ­qÀ¼qÀËq¾Äq¾Ôq¾äqÄqÄqÄ!qÁvqÁ…qÁ”q¿”q¿¤q¿´qıqÄÀqÄÏpppppq~Äxq~$ppxq~q~EÊq~q~P`q~Ežq~jq~P¦q~¼q~0q~Pæq~}Zq~Jq~µ/** Sets the name of the session attribute for our locale. */ pt setLocaleq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t% this.locale = locale; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~%sq~ uq~pppppt-/** Returns the advisory title attribute. */ ptgetTitleq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t return title; sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq‚=¿sq~ uq~pppppppttitleq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~%sq~ uq~pppppt*/** Sets the advisory title attribute. */ ptsetTitleq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t# this.title = title; sq~ uq~ppppq~$q~$xsq~isq~ uq~ppppq~%sq~ uq~pppppt@/** Returns the message resources key of the advisory title. */ pt getTitleKeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t return titleKey; sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq‚=çsq~ uq~pppppppttitleKeyq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xpppq~%sq~ uq~pppppt=/** Sets the message resources key of the advisory title. */ pt setTitleKeyq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~Äxq~$t) this.titleKey = titleKey; sq~ uq~ppppq~$q~$xq~X°qâçq~qãsq~isq~ uq~ppppq~%sq~ uq~ppppptŸ/** * Prepares the event handlers for inclusion in the component's HTML tag. * @return The prepared String for inclusion in the HTML tag. */ ptprepareEventHandlersq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$tù StringBuffer handlers = new StringBuffer(); prepareMouseEvents(handlers); prepareKeyEvents(handlers); prepareTextEvents(handlers); prepareFocusEvents(handlers); return handlers.toString(); sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq‚>sq~ uq~pppppppthandlersq~=xsq~ uq~pppppq~$q~yq~$q~ùpq~$xpppq~%sq~ uq~pppppt¸/** * Prepares the mouse event handlers, appending them to the the given * StringBuffer. * @param handlers The StringBuffer that output will be appended to. */ ptprepareMouseEventsq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$tæ if (onclick != null) { handlers.append(" onclick=\""); handlers.append(getOnclick()); handlers.append("\""); } if (ondblclick != null) { handlers.append(" ondblclick=\""); handlers.append(getOndblclick()); handlers.append("\""); } if (onmouseover != null) { handlers.append(" onmouseover=\""); handlers.append(getOnmouseover()); handlers.append("\""); } if (onmouseout != null) { handlers.append(" onmouseout=\""); handlers.append(getOnmouseout()); handlers.append("\""); } if (onmousemove != null) { handlers.append(" onmousemove=\""); handlers.append(getOnmousemove()); handlers.append("\""); } if (onmousedown != null) { handlers.append(" onmousedown=\""); handlers.append(getOnmousedown()); handlers.append("\""); } if (onmouseup != null) { handlers.append(" onmouseup=\""); handlers.append(getOnmouseup()); handlers.append("\""); } sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq‚>'sq~ uq~pppppppthandlersq~=xsq~ uq~pppppq~$q~yq~$q~ùpq~$xpppq~%sq~ uq~pppppt»/** * Prepares the keyboard event handlers, appending them to the the given * StringBuffer. * @param handlers The StringBuffer that output will be appended to. */ ptprepareKeyEventsq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$t if (onkeydown != null) { handlers.append(" onkeydown=\""); handlers.append(getOnkeydown()); handlers.append("\""); } if (onkeyup != null) { handlers.append(" onkeyup=\""); handlers.append(getOnkeyup()); handlers.append("\""); } if (onkeypress != null) { handlers.append(" onkeypress=\""); handlers.append(getOnkeypress()); handlers.append("\""); } sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq‚>?sq~ uq~pppppppthandlersq~=xsq~ uq~pppppq~$q~yq~$q~ùpq~$xpppq~%sq~ uq~pppppt·/** * Prepares the text event handlers, appending them to the the given * StringBuffer. * @param handlers The StringBuffer that output will be appended to. */ ptprepareTextEventsq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$t` if (onselect != null) { handlers.append(" onselect=\""); handlers.append(getOnselect()); handlers.append("\""); } if (onchange != null) { handlers.append(" onchange=\""); handlers.append(getOnchange()); handlers.append("\""); } sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq‚>Wsq~ uq~pppppppthandlersq~=xsq~ uq~pppppq~$q~yq~$q~ùpq~$xpppq~%sq~ uq~pppppt¸/** * Prepares the focus event handlers, appending them to the the given * StringBuffer. * @param handlers The StringBuffer that output will be appended to. */ ptprepareFocusEventsq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$t if (onblur != null) { handlers.append(" onblur=\""); handlers.append(getOnblur()); handlers.append("\""); } if (onfocus != null) { handlers.append(" onfocus=\""); handlers.append(getOnfocus()); handlers.append("\""); } if (disabled) { handlers.append(" disabled=\"disabled\""); } if (readonly) { handlers.append(" readonly=\"readonly\""); } sq~ uq~ppppq~$q~$xsq~isq~ uq~sq~bsq~ uq~ppppq‚>osq~ uq~pppppppt accessKeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~%sq~ uq~pppppt// ------------------------------------------------------------- Properties // Navigation Management /** Sets the accessKey character. */ pt setAccesskeyq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t+ this.accesskey = accessKey; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~%sq~ uq~pppppt(/** Returns the accessKey character. */ pt getAccesskeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t( return (this.accesskey); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚>—sq~ uq~pppppppttabIndexq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~%sq~ uq~pppppt /** Sets the tabIndex value. */ pt setTabindexq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t) this.tabindex = tabIndex; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~%sq~ uq~pppppt#/** Returns the tabIndex value. */ pt getTabindexq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t' return (this.tabindex); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚>¿sq~ uq~ppppppptindexedq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xpppq~%sq~ uq~ppppptv// Indexing ability for Iterate [since Struts 1.1] /** Sets the indexed value. * @since Struts 1.1 */ pt setIndexedq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t' this.indexed = indexed; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~%sq~ uq~ppppptD/** Returns the indexed value. * @since Struts 1.1 */ pt getIndexedq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t& return (this.indexed); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚>çsq~ uq~ppppppptonClickq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~%sq~ uq~pppppt8// Mouse Events /** Sets the onClick event handler. */ pt setOnclickq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t' this.onclick = onClick; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~%sq~ uq~pppppt*/** Returns the onClick event handler. */ pt getOnclickq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t return onclick; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚?sq~ uq~pppppppt onDblClickq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~%sq~ uq~pppppt*/** Sets the onDblClick event handler. */ pt setOndblclickq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t- this.ondblclick = onDblClick; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~%sq~ uq~pppppt-/** Returns the onDblClick event handler. */ pt getOndblclickq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t" return ondblclick; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚?7sq~ uq~pppppppt onMouseDownq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~%sq~ uq~pppppt+/** Sets the onMouseDown event handler. */ ptsetOnmousedownq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t/ this.onmousedown = onMouseDown; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~%sq~ uq~pppppt./** Returns the onMouseDown event handler. */ ptgetOnmousedownq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t# return onmousedown; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚?_sq~ uq~pppppppt onMouseUpq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~%sq~ uq~pppppt)/** Sets the onMouseUp event handler. */ pt setOnmouseupq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t+ this.onmouseup = onMouseUp; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~%sq~ uq~pppppt,/** Returns the onMouseUp event handler. */ pt getOnmouseupq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t! return onmouseup; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚?‡sq~ uq~pppppppt onMouseMoveq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~%sq~ uq~pppppt+/** Sets the onMouseMove event handler. */ ptsetOnmousemoveq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t/ this.onmousemove = onMouseMove; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~%sq~ uq~pppppt./** Returns the onMouseMove event handler. */ ptgetOnmousemoveq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t# return onmousemove; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚?¯sq~ uq~pppppppt onMouseOverq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~%sq~ uq~pppppt+/** Sets the onMouseOver event handler. */ ptsetOnmouseoverq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t/ this.onmouseover = onMouseOver; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~%sq~ uq~pppppt./** Returns the onMouseOver event handler. */ ptgetOnmouseoverq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t# return onmouseover; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚?×sq~ uq~pppppppt onMouseOutq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~%sq~ uq~pppppt*/** Sets the onMouseOut event handler. */ pt setOnmouseoutq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t- this.onmouseout = onMouseOut; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~%sq~ uq~pppppt-/** Returns the onMouseOut event handler. */ pt getOnmouseoutq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t" return onmouseout; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚?ÿsq~ uq~pppppppt onKeyDownq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~%sq~ uq~pppppt=// Keyboard Events /** Sets the onKeyDown event handler. */ pt setOnkeydownq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t+ this.onkeydown = onKeyDown; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~%sq~ uq~pppppt,/** Returns the onKeyDown event handler. */ pt getOnkeydownq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t! return onkeydown; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚@'sq~ uq~ppppppptonKeyUpq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~%sq~ uq~pppppt'/** Sets the onKeyUp event handler. */ pt setOnkeyupq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t' this.onkeyup = onKeyUp; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~%sq~ uq~pppppt*/** Returns the onKeyUp event handler. */ pt getOnkeyupq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t return onkeyup; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚@Osq~ uq~pppppppt onKeyPressq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~%sq~ uq~pppppt*/** Sets the onKeyPress event handler. */ pt setOnkeypressq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t- this.onkeypress = onKeyPress; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~%sq~ uq~pppppt-/** Returns the onKeyPress event handler. */ pt getOnkeypressq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t" return onkeypress; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚@wsq~ uq~ppppppptonChangeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~%sq~ uq~pppppt8// Text Events /** Sets the onChange event handler. */ pt setOnchangeq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t) this.onchange = onChange; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~%sq~ uq~pppppt+/** Returns the onChange event handler. */ pt getOnchangeq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t return onchange; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚@Ÿsq~ uq~ppppppptonSelectq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~%sq~ uq~pppppt(/** Sets the onSelect event handler. */ pt setOnselectq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t) this.onselect = onSelect; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~%sq~ uq~pppppt+/** Returns the onSelect event handler. */ pt getOnselectq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t return onselect; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚@Çsq~ uq~ppppppptonBlurq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~%sq~ uq~ppppptB// Focus Events and States /** Sets the onBlur event handler. */ pt setOnblurq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t% this.onblur = onBlur; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~%sq~ uq~pppppt)/** Returns the onBlur event handler. */ pt getOnblurq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t return onblur; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚@ïsq~ uq~ppppppptonFocusq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~%sq~ uq~pppppt'/** Sets the onFocus event handler. */ pt setOnfocusq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t' this.onfocus = onFocus; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~%sq~ uq~pppppt*/** Returns the onFocus event handler. */ pt getOnfocusq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t return onfocus; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚Asq~ uq~ppppppptdisabledq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xpppq~%sq~ uq~pppppt(/** Sets the disabled event handler. */ pt setDisabledq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t) this.disabled = disabled; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~%sq~ uq~pppppt+/** Returns the disabled event handler. */ pt getDisabledq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t return disabled; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚A?sq~ uq~ppppppptreadonlyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xpppq~%sq~ uq~pppppt(/** Sets the readonly event handler. */ pt setReadonlyq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t) this.readonly = readonly; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~%sq~ uq~pppppt+/** Returns the readonly event handler. */ pt getReadonlyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t return readonly; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚Agsq~ uq~ppppppptstyleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~%sq~ uq~pppppt7// CSS Style Support /** Sets the style attribute. */ ptsetStyleq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t# this.style = style; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~%sq~ uq~pppppt$/** Returns the style attribute. */ ptgetStyleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t return style; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚Asq~ uq~pppppppt styleClassq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~%sq~ uq~pppppt'/** Sets the style class attribute. */ pt setStyleClassq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t- this.styleClass = styleClass; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~%sq~ uq~pppppt*/** Returns the style class attribute. */ pt getStyleClassq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t" return styleClass; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚A·sq~ uq~ppppppptstyleIdq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~%sq~ uq~pppppt%/** Sets the style id attribute. */ pt setStyleIdq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t' this.styleId = styleId; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~%sq~ uq~pppppt(/** Returns the style id attribute. */ pt getStyleIdq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t return styleId; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~%sq~ uq~ppppptG// Other Common Elements /** Returns the alternate text attribute. */ ptgetAltq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t return alt; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚Aïsq~ uq~ppppppptaltq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~%sq~ uq~pppppt*/** Sets the alternate text attribute. */ ptsetAltq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t this.alt = alt; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~%sq~ uq~pppppt@/** Returns the message resources key of the alternate text. */ pt getAltKeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t return altKey; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚Bsq~ uq~ppppppptaltKeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~%sq~ uq~pppppt=/** Sets the message resources key of the alternate text. */ pt setAltKeyq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t% this.altKey = altKey; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~%sq~ uq~pppppt@/** Returns the name of the message resources bundle to use. */ pt getBundleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t return bundle; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚B?sq~ uq~ppppppptbundleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~%sq~ uq~pppppt=/** Sets the name of the message resources bundle to use. */ pt setBundleq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t% this.bundle = bundle; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~%sq~ uq~ppppptA/** Returns the name of the session attribute for our locale. */ pt getLocaleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t return locale; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚Bgsq~ uq~ppppppptlocaleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~%sq~ uq~pppppt>/** Sets the name of the session attribute for our locale. */ pt setLocaleq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t% this.locale = locale; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~%sq~ uq~pppppt-/** Returns the advisory title attribute. */ ptgetTitleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t return title; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚Bsq~ uq~pppppppttitleq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~%sq~ uq~pppppt*/** Sets the advisory title attribute. */ ptsetTitleq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t# this.title = title; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~%sq~ uq~pppppt@/** Returns the message resources key of the advisory title. */ pt getTitleKeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t return titleKey; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚B·sq~ uq~pppppppttitleKeyq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xpppq~%sq~ uq~pppppt=/** Sets the message resources key of the advisory title. */ pt setTitleKeyq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t) this.titleKey = titleKey; sq~ uq~ppppq~¥q~¥xsq~isq~ uq~ppppq~%sq~ uq~pppppt‚// --------------------------------------------------------- Public Methods /** * Release any acquired resources. */ ptreleaseq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~»xq~¥t super.release(); accesskey = null; alt = null; altKey = null; bundle = null; indexed = false; locale = Action.LOCALE_KEY; onclick = null; ondblclick = null; onmouseover = null; onmouseout = null; onmousemove = null; onmousedown = null; onmouseup = null; onkeydown = null; onkeyup = null; onkeypress = null; onselect = null; onchange = null; onblur = null; onfocus = null; disabled = false; readonly = false; style = null; styleClass = null; styleId = null; tabindex = null; title = null; titleKey = null; sq~ uq~ppppq~¥q~¥xqãqã7qãWsq~isq~ uq~ppppq~%sq~ uq~ppppptŸ/** * Prepares the event handlers for inclusion in the component's HTML tag. * @return The prepared String for inclusion in the HTML tag. */ ptprepareEventHandlersq~¢xsq~ uq~pppppq~¥q~¦q~¥q~{pq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥tù StringBuffer handlers = new StringBuffer(); prepareMouseEvents(handlers); prepareKeyEvents(handlers); prepareTextEvents(handlers); prepareFocusEvents(handlers); return handlers.toString(); sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚Bïsq~ uq~pppppppthandlersq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ùpq~§xpppq~%sq~ uq~pppppt¸/** * Prepares the mouse event handlers, appending them to the the given * StringBuffer. * @param handlers The StringBuffer that output will be appended to. */ ptprepareMouseEventsq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥tæ if (onclick != null) { handlers.append(" onclick=\""); handlers.append(getOnclick()); handlers.append("\""); } if (ondblclick != null) { handlers.append(" ondblclick=\""); handlers.append(getOndblclick()); handlers.append("\""); } if (onmouseover != null) { handlers.append(" onmouseover=\""); handlers.append(getOnmouseover()); handlers.append("\""); } if (onmouseout != null) { handlers.append(" onmouseout=\""); handlers.append(getOnmouseout()); handlers.append("\""); } if (onmousemove != null) { handlers.append(" onmousemove=\""); handlers.append(getOnmousemove()); handlers.append("\""); } if (onmousedown != null) { handlers.append(" onmousedown=\""); handlers.append(getOnmousedown()); handlers.append("\""); } if (onmouseup != null) { handlers.append(" onmouseup=\""); handlers.append(getOnmouseup()); handlers.append("\""); } sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚Csq~ uq~pppppppthandlersq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ùpq~§xpppq~%sq~ uq~pppppt»/** * Prepares the keyboard event handlers, appending them to the the given * StringBuffer. * @param handlers The StringBuffer that output will be appended to. */ ptprepareKeyEventsq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥t if (onkeydown != null) { handlers.append(" onkeydown=\""); handlers.append(getOnkeydown()); handlers.append("\""); } if (onkeyup != null) { handlers.append(" onkeyup=\""); handlers.append(getOnkeyup()); handlers.append("\""); } if (onkeypress != null) { handlers.append(" onkeypress=\""); handlers.append(getOnkeypress()); handlers.append("\""); } sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚Csq~ uq~pppppppthandlersq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ùpq~§xpppq~%sq~ uq~pppppt·/** * Prepares the text event handlers, appending them to the the given * StringBuffer. * @param handlers The StringBuffer that output will be appended to. */ ptprepareTextEventsq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥t` if (onselect != null) { handlers.append(" onselect=\""); handlers.append(getOnselect()); handlers.append("\""); } if (onchange != null) { handlers.append(" onchange=\""); handlers.append(getOnchange()); handlers.append("\""); } sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚C7sq~ uq~pppppppthandlersq~¢xsq~ uq~pppppq~¥q~¦q~¥q~ùpq~§xpppq~%sq~ uq~pppppt¸/** * Prepares the focus event handlers, appending them to the the given * StringBuffer. * @param handlers The StringBuffer that output will be appended to. */ ptprepareFocusEventsq~¢xsq~ uq~pppppq~¥q~¦q~¥ppq~§xsq~ uq~ppppsq~ uq~ppppq~¥q~›xq~¥t if (onblur != null) { handlers.append(" onblur=\""); handlers.append(getOnblur()); handlers.append("\""); } if (onfocus != null) { handlers.append(" onfocus=\""); handlers.append(getOnfocus()); handlers.append("\""); } if (disabled) { handlers.append(" disabled=\"disabled\""); } if (readonly) { handlers.append(" readonly=\"readonly\""); } sq~ uq~ppppq~¥q~¥xsq~isq~ uq~sq~bsq~ uq~ppppq‚COsq~ uq~pppppppt accessKeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~%sq~ uq~pppppt// ------------------------------------------------------------- Properties // Navigation Management /** Sets the accessKey character. */ pt setAccesskeyq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t+ this.accesskey = accessKey; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~%sq~ uq~pppppt(/** Returns the accessKey character. */ pt getAccesskeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t( return (this.accesskey); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚Cwsq~ uq~pppppppttabIndexq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~%sq~ uq~pppppt /** Sets the tabIndex value. */ pt setTabindexq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t) this.tabindex = tabIndex; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~%sq~ uq~pppppt#/** Returns the tabIndex value. */ pt getTabindexq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t' return (this.tabindex); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚CŸsq~ uq~ppppppptindexedq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xpppq~%sq~ uq~ppppptv// Indexing ability for Iterate [since Struts 1.1] /** Sets the indexed value. * @since Struts 1.1 */ pt setIndexedq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t' this.indexed = indexed; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~%sq~ uq~ppppptD/** Returns the indexed value. * @since Struts 1.1 */ pt getIndexedq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t& return (this.indexed); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚CÇsq~ uq~ppppppptonClickq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~%sq~ uq~pppppt8// Mouse Events /** Sets the onClick event handler. */ pt setOnclickq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t' this.onclick = onClick; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~%sq~ uq~pppppt*/** Returns the onClick event handler. */ pt getOnclickq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return onclick; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚Cïsq~ uq~pppppppt onDblClickq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~%sq~ uq~pppppt*/** Sets the onDblClick event handler. */ pt setOndblclickq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t- this.ondblclick = onDblClick; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~%sq~ uq~pppppt-/** Returns the onDblClick event handler. */ pt getOndblclickq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t" return ondblclick; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚Dsq~ uq~pppppppt onMouseDownq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~%sq~ uq~pppppt+/** Sets the onMouseDown event handler. */ ptsetOnmousedownq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t/ this.onmousedown = onMouseDown; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~%sq~ uq~pppppt./** Returns the onMouseDown event handler. */ ptgetOnmousedownq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t# return onmousedown; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚D?sq~ uq~pppppppt onMouseUpq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~%sq~ uq~pppppt)/** Sets the onMouseUp event handler. */ pt setOnmouseupq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t+ this.onmouseup = onMouseUp; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~%sq~ uq~pppppt,/** Returns the onMouseUp event handler. */ pt getOnmouseupq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t! return onmouseup; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚Dgsq~ uq~pppppppt onMouseMoveq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~%sq~ uq~pppppt+/** Sets the onMouseMove event handler. */ ptsetOnmousemoveq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t/ this.onmousemove = onMouseMove; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~%sq~ uq~pppppt./** Returns the onMouseMove event handler. */ ptgetOnmousemoveq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t# return onmousemove; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚Dsq~ uq~pppppppt onMouseOverq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~%sq~ uq~pppppt+/** Sets the onMouseOver event handler. */ ptsetOnmouseoverq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t/ this.onmouseover = onMouseOver; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~%sq~ uq~pppppt./** Returns the onMouseOver event handler. */ ptgetOnmouseoverq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t# return onmouseover; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚D·sq~ uq~pppppppt onMouseOutq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~%sq~ uq~pppppt*/** Sets the onMouseOut event handler. */ pt setOnmouseoutq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t- this.onmouseout = onMouseOut; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~%sq~ uq~pppppt-/** Returns the onMouseOut event handler. */ pt getOnmouseoutq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t" return onmouseout; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚Dßsq~ uq~pppppppt onKeyDownq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~%sq~ uq~pppppt=// Keyboard Events /** Sets the onKeyDown event handler. */ pt setOnkeydownq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t+ this.onkeydown = onKeyDown; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~%sq~ uq~pppppt,/** Returns the onKeyDown event handler. */ pt getOnkeydownq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t! return onkeydown; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚Esq~ uq~ppppppptonKeyUpq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~%sq~ uq~pppppt'/** Sets the onKeyUp event handler. */ pt setOnkeyupq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t' this.onkeyup = onKeyUp; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~%sq~ uq~pppppt*/** Returns the onKeyUp event handler. */ pt getOnkeyupq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return onkeyup; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚E/sq~ uq~pppppppt onKeyPressq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~%sq~ uq~pppppt*/** Sets the onKeyPress event handler. */ pt setOnkeypressq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t- this.onkeypress = onKeyPress; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~%sq~ uq~pppppt-/** Returns the onKeyPress event handler. */ pt getOnkeypressq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t" return onkeypress; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚EWsq~ uq~ppppppptonChangeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~%sq~ uq~pppppt8// Text Events /** Sets the onChange event handler. */ pt setOnchangeq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t) this.onchange = onChange; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~%sq~ uq~pppppt+/** Returns the onChange event handler. */ pt getOnchangeq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return onchange; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚Esq~ uq~ppppppptonSelectq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~%sq~ uq~pppppt(/** Sets the onSelect event handler. */ pt setOnselectq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t) this.onselect = onSelect; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~%sq~ uq~pppppt+/** Returns the onSelect event handler. */ pt getOnselectq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return onselect; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚E§sq~ uq~ppppppptonBlurq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~%sq~ uq~ppppptB// Focus Events and States /** Sets the onBlur event handler. */ pt setOnblurq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t% this.onblur = onBlur; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~%sq~ uq~pppppt)/** Returns the onBlur event handler. */ pt getOnblurq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return onblur; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚EÏsq~ uq~ppppppptonFocusq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~%sq~ uq~pppppt'/** Sets the onFocus event handler. */ pt setOnfocusq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t' this.onfocus = onFocus; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~%sq~ uq~pppppt*/** Returns the onFocus event handler. */ pt getOnfocusq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return onfocus; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚E÷sq~ uq~ppppppptdisabledq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xpppq~%sq~ uq~pppppt(/** Sets the disabled event handler. */ pt setDisabledq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t) this.disabled = disabled; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~%sq~ uq~pppppt+/** Returns the disabled event handler. */ pt getDisabledq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return disabled; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚Fsq~ uq~ppppppptreadonlyq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xpppq~%sq~ uq~pppppt(/** Sets the readonly event handler. */ pt setReadonlyq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t) this.readonly = readonly; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~%sq~ uq~pppppt+/** Returns the readonly event handler. */ pt getReadonlyq~rxsq~ uq~pppppq~–q~—q~–q~pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return readonly; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚FGsq~ uq~ppppppptstyleq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~%sq~ uq~pppppt7// CSS Style Support /** Sets the style attribute. */ ptsetStyleq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t# this.style = style; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~%sq~ uq~pppppt$/** Returns the style attribute. */ ptgetStyleq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return style; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚Fosq~ uq~pppppppt styleClassq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~%sq~ uq~pppppt'/** Sets the style class attribute. */ pt setStyleClassq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t- this.styleClass = styleClass; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~%sq~ uq~pppppt*/** Returns the style class attribute. */ pt getStyleClassq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t" return styleClass; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚F—sq~ uq~ppppppptstyleIdq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~%sq~ uq~pppppt%/** Sets the style id attribute. */ pt setStyleIdq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t' this.styleId = styleId; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~%sq~ uq~pppppt(/** Returns the style id attribute. */ pt getStyleIdq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return styleId; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~%sq~ uq~ppppptG// Other Common Elements /** Returns the alternate text attribute. */ ptgetAltq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return alt; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚FÏsq~ uq~ppppppptaltq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~%sq~ uq~pppppt*/** Sets the alternate text attribute. */ ptsetAltq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t this.alt = alt; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~%sq~ uq~pppppt@/** Returns the message resources key of the alternate text. */ pt getAltKeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return altKey; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚F÷sq~ uq~ppppppptaltKeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~%sq~ uq~pppppt=/** Sets the message resources key of the alternate text. */ pt setAltKeyq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t% this.altKey = altKey; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~%sq~ uq~pppppt@/** Returns the name of the message resources bundle to use. */ pt getBundleq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return bundle; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚Gsq~ uq~ppppppptbundleq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~%sq~ uq~pppppt=/** Sets the name of the message resources bundle to use. */ pt setBundleq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t% this.bundle = bundle; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~%sq~ uq~ppppptA/** Returns the name of the session attribute for our locale. */ pt getLocaleq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return locale; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚GGsq~ uq~ppppppptlocaleq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~%sq~ uq~pppppt>/** Sets the name of the session attribute for our locale. */ pt setLocaleq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t% this.locale = locale; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~%sq~ uq~pppppt-/** Returns the advisory title attribute. */ ptgetTitleq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return title; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚Gosq~ uq~pppppppttitleq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~%sq~ uq~pppppt*/** Sets the advisory title attribute. */ ptsetTitleq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t# this.title = title; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~%sq~ uq~pppppt@/** Returns the message resources key of the advisory title. */ pt getTitleKeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t return titleKey; sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚G—sq~ uq~pppppppttitleKeyq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xpppq~%sq~ uq~pppppt=/** Sets the message resources key of the advisory title. */ pt setTitleKeyq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t) this.titleKey = titleKey; sq~ uq~ppppq~–q~–xsq~isq~ uq~ppppq~%sq~ uq~pppppt‚// --------------------------------------------------------- Public Methods /** * Release any acquired resources. */ ptreleaseq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~¢xq~–t super.release(); accesskey = null; alt = null; altKey = null; bundle = null; indexed = false; locale = Action.LOCALE_KEY; onclick = null; ondblclick = null; onmouseover = null; onmouseout = null; onmousemove = null; onmousedown = null; onmouseup = null; onkeydown = null; onkeyup = null; onkeypress = null; onselect = null; onchange = null; onblur = null; onfocus = null; disabled = false; readonly = false; style = null; styleClass = null; styleId = null; tabindex = null; title = null; titleKey = null; sq~ uq~ppppq~–q~–xqãgqã‡qã§sq~isq~ uq~ppppq~%sq~ uq~ppppptŸ/** * Prepares the event handlers for inclusion in the component's HTML tag. * @return The prepared String for inclusion in the HTML tag. */ ptprepareEventHandlersq~rxsq~ uq~pppppq~–q~—q~–q~{pq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–tù StringBuffer handlers = new StringBuffer(); prepareMouseEvents(handlers); prepareKeyEvents(handlers); prepareTextEvents(handlers); prepareFocusEvents(handlers); return handlers.toString(); sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚GÏsq~ uq~pppppppthandlersq~rxsq~ uq~pppppq~–q~—q~–q~ùpq~˜xpppq~%sq~ uq~pppppt¸/** * Prepares the mouse event handlers, appending them to the the given * StringBuffer. * @param handlers The StringBuffer that output will be appended to. */ ptprepareMouseEventsq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–tæ if (onclick != null) { handlers.append(" onclick=\""); handlers.append(getOnclick()); handlers.append("\""); } if (ondblclick != null) { handlers.append(" ondblclick=\""); handlers.append(getOndblclick()); handlers.append("\""); } if (onmouseover != null) { handlers.append(" onmouseover=\""); handlers.append(getOnmouseover()); handlers.append("\""); } if (onmouseout != null) { handlers.append(" onmouseout=\""); handlers.append(getOnmouseout()); handlers.append("\""); } if (onmousemove != null) { handlers.append(" onmousemove=\""); handlers.append(getOnmousemove()); handlers.append("\""); } if (onmousedown != null) { handlers.append(" onmousedown=\""); handlers.append(getOnmousedown()); handlers.append("\""); } if (onmouseup != null) { handlers.append(" onmouseup=\""); handlers.append(getOnmouseup()); handlers.append("\""); } sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚Gçsq~ uq~pppppppthandlersq~rxsq~ uq~pppppq~–q~—q~–q~ùpq~˜xpppq~%sq~ uq~pppppt»/** * Prepares the keyboard event handlers, appending them to the the given * StringBuffer. * @param handlers The StringBuffer that output will be appended to. */ ptprepareKeyEventsq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–t if (onkeydown != null) { handlers.append(" onkeydown=\""); handlers.append(getOnkeydown()); handlers.append("\""); } if (onkeyup != null) { handlers.append(" onkeyup=\""); handlers.append(getOnkeyup()); handlers.append("\""); } if (onkeypress != null) { handlers.append(" onkeypress=\""); handlers.append(getOnkeypress()); handlers.append("\""); } sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚Gÿsq~ uq~pppppppthandlersq~rxsq~ uq~pppppq~–q~—q~–q~ùpq~˜xpppq~%sq~ uq~pppppt·/** * Prepares the text event handlers, appending them to the the given * StringBuffer. * @param handlers The StringBuffer that output will be appended to. */ ptprepareTextEventsq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–t` if (onselect != null) { handlers.append(" onselect=\""); handlers.append(getOnselect()); handlers.append("\""); } if (onchange != null) { handlers.append(" onchange=\""); handlers.append(getOnchange()); handlers.append("\""); } sq~ uq~ppppq~–q~–xsq~isq~ uq~sq~bsq~ uq~ppppq‚Hsq~ uq~pppppppthandlersq~rxsq~ uq~pppppq~–q~—q~–q~ùpq~˜xpppq~%sq~ uq~pppppt¸/** * Prepares the focus event handlers, appending them to the the given * StringBuffer. * @param handlers The StringBuffer that output will be appended to. */ ptprepareFocusEventsq~rxsq~ uq~pppppq~–q~—q~–ppq~˜xsq~ uq~ppppsq~ uq~ppppq~–q~ xq~–t if (onblur != null) { handlers.append(" onblur=\""); handlers.append(getOnblur()); handlers.append("\""); } if (onfocus != null) { handlers.append(" onfocus=\""); handlers.append(getOnfocus()); handlers.append("\""); } if (disabled) { handlers.append(" disabled=\"disabled\""); } if (readonly) { handlers.append(" readonly=\"readonly\""); } sq~ uq~ppppq~–q~–xqÌsq~isq~ uq~sq~bsq~ uq~ppppq‚H/sq~ uq~pppppppt accessKeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~%sq~ uq~pppppt// ------------------------------------------------------------- Properties // Navigation Management /** Sets the accessKey character. */ pt setAccesskeyq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t+ this.accesskey = accessKey; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~%sq~ uq~pppppt(/** Returns the accessKey character. */ pt getAccesskeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t( return (this.accesskey); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚HWsq~ uq~pppppppttabIndexq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~%sq~ uq~pppppt /** Sets the tabIndex value. */ pt setTabindexq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t) this.tabindex = tabIndex; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~%sq~ uq~pppppt#/** Returns the tabIndex value. */ pt getTabindexq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t' return (this.tabindex); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚Hsq~ uq~ppppppptindexedq~{xsq~ uq~pppppq~~q~q~~q~pq~€xpppq~%sq~ uq~ppppptv// Indexing ability for Iterate [since Struts 1.1] /** Sets the indexed value. * @since Struts 1.1 */ pt setIndexedq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t' this.indexed = indexed; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~%sq~ uq~ppppptD/** Returns the indexed value. * @since Struts 1.1 */ pt getIndexedq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t& return (this.indexed); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚H§sq~ uq~ppppppptonClickq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~%sq~ uq~pppppt8// Mouse Events /** Sets the onClick event handler. */ pt setOnclickq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t' this.onclick = onClick; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~%sq~ uq~pppppt*/** Returns the onClick event handler. */ pt getOnclickq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t return onclick; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚HÏsq~ uq~pppppppt onDblClickq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~%sq~ uq~pppppt*/** Sets the onDblClick event handler. */ pt setOndblclickq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t- this.ondblclick = onDblClick; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~%sq~ uq~pppppt-/** Returns the onDblClick event handler. */ pt getOndblclickq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t" return ondblclick; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚H÷sq~ uq~pppppppt onMouseDownq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~%sq~ uq~pppppt+/** Sets the onMouseDown event handler. */ ptsetOnmousedownq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t/ this.onmousedown = onMouseDown; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~%sq~ uq~pppppt./** Returns the onMouseDown event handler. */ ptgetOnmousedownq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t# return onmousedown; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚Isq~ uq~pppppppt onMouseUpq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~%sq~ uq~pppppt)/** Sets the onMouseUp event handler. */ pt setOnmouseupq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t+ this.onmouseup = onMouseUp; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~%sq~ uq~pppppt,/** Returns the onMouseUp event handler. */ pt getOnmouseupq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t! return onmouseup; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚IGsq~ uq~pppppppt onMouseMoveq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~%sq~ uq~pppppt+/** Sets the onMouseMove event handler. */ ptsetOnmousemoveq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t/ this.onmousemove = onMouseMove; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~%sq~ uq~pppppt./** Returns the onMouseMove event handler. */ ptgetOnmousemoveq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t# return onmousemove; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚Iosq~ uq~pppppppt onMouseOverq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~%sq~ uq~pppppt+/** Sets the onMouseOver event handler. */ ptsetOnmouseoverq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t/ this.onmouseover = onMouseOver; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~%sq~ uq~pppppt./** Returns the onMouseOver event handler. */ ptgetOnmouseoverq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t# return onmouseover; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚I—sq~ uq~pppppppt onMouseOutq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~%sq~ uq~pppppt*/** Sets the onMouseOut event handler. */ pt setOnmouseoutq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t- this.onmouseout = onMouseOut; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~%sq~ uq~pppppt-/** Returns the onMouseOut event handler. */ pt getOnmouseoutq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t" return onmouseout; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚I¿sq~ uq~pppppppt onKeyDownq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~%sq~ uq~pppppt=// Keyboard Events /** Sets the onKeyDown event handler. */ pt setOnkeydownq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t+ this.onkeydown = onKeyDown; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~%sq~ uq~pppppt,/** Returns the onKeyDown event handler. */ pt getOnkeydownq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t! return onkeydown; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚Içsq~ uq~ppppppptonKeyUpq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~%sq~ uq~pppppt'/** Sets the onKeyUp event handler. */ pt setOnkeyupq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t' this.onkeyup = onKeyUp; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~%sq~ uq~pppppt*/** Returns the onKeyUp event handler. */ pt getOnkeyupq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t return onkeyup; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚Jsq~ uq~pppppppt onKeyPressq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~%sq~ uq~pppppt*/** Sets the onKeyPress event handler. */ pt setOnkeypressq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t- this.onkeypress = onKeyPress; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~%sq~ uq~pppppt-/** Returns the onKeyPress event handler. */ pt getOnkeypressq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t" return onkeypress; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚J7sq~ uq~ppppppptonChangeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~%sq~ uq~pppppt8// Text Events /** Sets the onChange event handler. */ pt setOnchangeq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t) this.onchange = onChange; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~%sq~ uq~pppppt+/** Returns the onChange event handler. */ pt getOnchangeq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t return onchange; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚J_sq~ uq~ppppppptonSelectq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~%sq~ uq~pppppt(/** Sets the onSelect event handler. */ pt setOnselectq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t) this.onselect = onSelect; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~%sq~ uq~pppppt+/** Returns the onSelect event handler. */ pt getOnselectq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t return onselect; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚J‡sq~ uq~ppppppptonBlurq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~%sq~ uq~ppppptB// Focus Events and States /** Sets the onBlur event handler. */ pt setOnblurq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t% this.onblur = onBlur; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~%sq~ uq~pppppt)/** Returns the onBlur event handler. */ pt getOnblurq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t return onblur; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚J¯sq~ uq~ppppppptonFocusq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~%sq~ uq~pppppt'/** Sets the onFocus event handler. */ pt setOnfocusq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t' this.onfocus = onFocus; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~%sq~ uq~pppppt*/** Returns the onFocus event handler. */ pt getOnfocusq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t return onfocus; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚J×sq~ uq~ppppppptdisabledq~{xsq~ uq~pppppq~~q~q~~q~pq~€xpppq~%sq~ uq~pppppt(/** Sets the disabled event handler. */ pt setDisabledq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t) this.disabled = disabled; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~%sq~ uq~pppppt+/** Returns the disabled event handler. */ pt getDisabledq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t return disabled; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚Jÿsq~ uq~ppppppptreadonlyq~{xsq~ uq~pppppq~~q~q~~q~pq~€xpppq~%sq~ uq~pppppt(/** Sets the readonly event handler. */ pt setReadonlyq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t) this.readonly = readonly; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~%sq~ uq~pppppt+/** Returns the readonly event handler. */ pt getReadonlyq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t return readonly; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚K'sq~ uq~ppppppptstyleq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~%sq~ uq~pppppt7// CSS Style Support /** Sets the style attribute. */ ptsetStyleq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t# this.style = style; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~%sq~ uq~pppppt$/** Returns the style attribute. */ ptgetStyleq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t return style; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚KOsq~ uq~pppppppt styleClassq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~%sq~ uq~pppppt'/** Sets the style class attribute. */ pt setStyleClassq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t- this.styleClass = styleClass; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~%sq~ uq~pppppt*/** Returns the style class attribute. */ pt getStyleClassq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t" return styleClass; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚Kwsq~ uq~ppppppptstyleIdq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~%sq~ uq~pppppt%/** Sets the style id attribute. */ pt setStyleIdq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t' this.styleId = styleId; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~%sq~ uq~pppppt(/** Returns the style id attribute. */ pt getStyleIdq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t return styleId; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~%sq~ uq~ppppptG// Other Common Elements /** Returns the alternate text attribute. */ ptgetAltq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t return alt; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚K¯sq~ uq~ppppppptaltq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~%sq~ uq~pppppt*/** Sets the alternate text attribute. */ ptsetAltq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t this.alt = alt; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~%sq~ uq~pppppt@/** Returns the message resources key of the alternate text. */ pt getAltKeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t return altKey; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚K×sq~ uq~ppppppptaltKeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~%sq~ uq~pppppt=/** Sets the message resources key of the alternate text. */ pt setAltKeyq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t% this.altKey = altKey; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~%sq~ uq~pppppt@/** Returns the name of the message resources bundle to use. */ pt getBundleq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t return bundle; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚Kÿsq~ uq~ppppppptbundleq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~%sq~ uq~pppppt=/** Sets the name of the message resources bundle to use. */ pt setBundleq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t% this.bundle = bundle; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~%sq~ uq~ppppptA/** Returns the name of the session attribute for our locale. */ pt getLocaleq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t return locale; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚L'sq~ uq~ppppppptlocaleq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~%sq~ uq~pppppt>/** Sets the name of the session attribute for our locale. */ pt setLocaleq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t% this.locale = locale; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~%sq~ uq~pppppt-/** Returns the advisory title attribute. */ ptgetTitleq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t return title; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚LOsq~ uq~pppppppttitleq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~%sq~ uq~pppppt*/** Sets the advisory title attribute. */ ptsetTitleq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t# this.title = title; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~%sq~ uq~pppppt@/** Returns the message resources key of the advisory title. */ pt getTitleKeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t return titleKey; sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚Lwsq~ uq~pppppppttitleKeyq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xpppq~%sq~ uq~pppppt=/** Sets the message resources key of the advisory title. */ pt setTitleKeyq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t) this.titleKey = titleKey; sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~%sq~ uq~pppppt‚// --------------------------------------------------------- Public Methods /** * Release any acquired resources. */ ptreleaseq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~Šxq~~t super.release(); accesskey = null; alt = null; altKey = null; bundle = null; indexed = false; locale = Globals.LOCALE_KEY; onclick = null; ondblclick = null; onmouseover = null; onmouseout = null; onmousemove = null; onmousedown = null; onmouseup = null; onkeydown = null; onkeyup = null; onkeypress = null; onselect = null; onchange = null; onblur = null; onfocus = null; disabled = false; readonly = false; style = null; styleClass = null; styleId = null; tabindex = null; title = null; titleKey = null; sq~ uq~ppppq~~q~~xqã·qþ:qå!qþGqå.sq~(sq~ uq~ppppq~%sq~ uq~pppppppt triedJstlInitq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~d1xpppt falseq~~q~~q~~xsq~(sq~ uq~ppppq~%sq~ uq~pppppppttriedJstlSuccessq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~d1xpppt falseq~~q~~q~~xqyqã×qã÷sq~isq~ uq~ppppq~%sq~ uq~ppppptŸ/** * Prepares the event handlers for inclusion in the component's HTML tag. * @return The prepared String for inclusion in the HTML tag. */ ptprepareEventHandlersq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~tù StringBuffer handlers = new StringBuffer(); prepareMouseEvents(handlers); prepareKeyEvents(handlers); prepareTextEvents(handlers); prepareFocusEvents(handlers); return handlers.toString(); sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚LÉsq~ uq~pppppppthandlersq~{xsq~ uq~pppppq~~q~q~~q~ùpq~€xpppq~%sq~ uq~pppppt¸/** * Prepares the mouse event handlers, appending them to the the given * StringBuffer. * @param handlers The StringBuffer that output will be appended to. */ ptprepareMouseEventsq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~tæ if (onclick != null) { handlers.append(" onclick=\""); handlers.append(getOnclick()); handlers.append("\""); } if (ondblclick != null) { handlers.append(" ondblclick=\""); handlers.append(getOndblclick()); handlers.append("\""); } if (onmouseover != null) { handlers.append(" onmouseover=\""); handlers.append(getOnmouseover()); handlers.append("\""); } if (onmouseout != null) { handlers.append(" onmouseout=\""); handlers.append(getOnmouseout()); handlers.append("\""); } if (onmousemove != null) { handlers.append(" onmousemove=\""); handlers.append(getOnmousemove()); handlers.append("\""); } if (onmousedown != null) { handlers.append(" onmousedown=\""); handlers.append(getOnmousedown()); handlers.append("\""); } if (onmouseup != null) { handlers.append(" onmouseup=\""); handlers.append(getOnmouseup()); handlers.append("\""); } sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚Lásq~ uq~pppppppthandlersq~{xsq~ uq~pppppq~~q~q~~q~ùpq~€xpppq~%sq~ uq~pppppt»/** * Prepares the keyboard event handlers, appending them to the the given * StringBuffer. * @param handlers The StringBuffer that output will be appended to. */ ptprepareKeyEventsq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t if (onkeydown != null) { handlers.append(" onkeydown=\""); handlers.append(getOnkeydown()); handlers.append("\""); } if (onkeyup != null) { handlers.append(" onkeyup=\""); handlers.append(getOnkeyup()); handlers.append("\""); } if (onkeypress != null) { handlers.append(" onkeypress=\""); handlers.append(getOnkeypress()); handlers.append("\""); } sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚Lùsq~ uq~pppppppthandlersq~{xsq~ uq~pppppq~~q~q~~q~ùpq~€xpppq~%sq~ uq~pppppt·/** * Prepares the text event handlers, appending them to the the given * StringBuffer. * @param handlers The StringBuffer that output will be appended to. */ ptprepareTextEventsq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t` if (onselect != null) { handlers.append(" onselect=\""); handlers.append(getOnselect()); handlers.append("\""); } if (onchange != null) { handlers.append(" onchange=\""); handlers.append(getOnchange()); handlers.append("\""); } sq~ uq~ppppq~~q~~xsq~isq~ uq~sq~bsq~ uq~ppppq‚Msq~ uq~pppppppthandlersq~{xsq~ uq~pppppq~~q~q~~q~ùpq~€xpppq~%sq~ uq~pppppt¸/** * Prepares the focus event handlers, appending them to the the given * StringBuffer. * @param handlers The StringBuffer that output will be appended to. */ ptprepareFocusEventsq~{xsq~ uq~pppppq~~q~q~~ppq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t if (onblur != null) { handlers.append(" onblur=\""); handlers.append(getOnblur()); handlers.append("\""); } if (onfocus != null) { handlers.append(" onfocus=\""); handlers.append(getOnfocus()); handlers.append("\""); } if (disabled) { handlers.append(" disabled=\"disabled\""); } if (readonly) { handlers.append(" readonly=\"readonly\""); } sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~%sq~ uq~pppppt/** * Allows HTML tags to find out if they're nested within an %lt;html:html> tag that * has xhtml set to true. * @return true if the tag is nested within an html tag with xhtml set to true, false * otherwise. * @since Struts 1.1 */ ptisXhtmlq~{xsq~ uq~pppppq~~q~q~~q~pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~t String xhtml = (String) this.pageContext.getAttribute(Globals.XHTML_KEY, PageContext.PAGE_SCOPE); if ("true".equalsIgnoreCase(xhtml)) { return true; } else { return false; } sq~ uq~ppppq~~q~~xsq~isq~ uq~ppppq~%sq~ uq~pppppt/** * Returns the closing brace for an input element depending on xhtml status. The tag * must be nested within an %lt;html:html> tag that has xhtml set to true. * @return String - > if xhtml is false, /> if xhtml is true * @since Struts 1.1 */ ptgetElementCloseq~{xsq~ uq~pppppq~~q~q~~q~{pq~€xsq~ uq~ppppsq~ uq~ppppq~~q~ xq~~tv if (this.isXhtml()) { return " />"; } else { return ">"; } sq~ uq~ppppq~~q~~xqäsq~isq~ uq~sq~bsq~ uq~ppppq‚MIsq~ uq~pppppppt accessKeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~%sq~ uq~pppppt// ------------------------------------------------------------- Properties // Navigation Management /** Sets the accessKey character. */ pt setAccesskeyq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft+ this.accesskey = accessKey; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~%sq~ uq~pppppt(/** Returns the accessKey character. */ pt getAccesskeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft( return (this.accesskey); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚Mqsq~ uq~pppppppttabIndexq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~%sq~ uq~pppppt /** Sets the tabIndex value. */ pt setTabindexq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft) this.tabindex = tabIndex; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~%sq~ uq~pppppt#/** Returns the tabIndex value. */ pt getTabindexq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft' return (this.tabindex); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚M™sq~ uq~ppppppptindexedq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxpppq~%sq~ uq~ppppptv// Indexing ability for Iterate [since Struts 1.1] /** Sets the indexed value. * @since Struts 1.1 */ pt setIndexedq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft' this.indexed = indexed; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~%sq~ uq~ppppptD/** Returns the indexed value. * @since Struts 1.1 */ pt getIndexedq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft& return (this.indexed); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚MÁsq~ uq~ppppppptonClickq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~%sq~ uq~pppppt8// Mouse Events /** Sets the onClick event handler. */ pt setOnclickq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft' this.onclick = onClick; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~%sq~ uq~pppppt*/** Returns the onClick event handler. */ pt getOnclickq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft return onclick; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚Mésq~ uq~pppppppt onDblClickq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~%sq~ uq~pppppt*/** Sets the onDblClick event handler. */ pt setOndblclickq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft- this.ondblclick = onDblClick; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~%sq~ uq~pppppt-/** Returns the onDblClick event handler. */ pt getOndblclickq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft" return ondblclick; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚Nsq~ uq~pppppppt onMouseDownq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~%sq~ uq~pppppt+/** Sets the onMouseDown event handler. */ ptsetOnmousedownq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft/ this.onmousedown = onMouseDown; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~%sq~ uq~pppppt./** Returns the onMouseDown event handler. */ ptgetOnmousedownq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft# return onmousedown; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚N9sq~ uq~pppppppt onMouseUpq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~%sq~ uq~pppppt)/** Sets the onMouseUp event handler. */ pt setOnmouseupq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft+ this.onmouseup = onMouseUp; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~%sq~ uq~pppppt,/** Returns the onMouseUp event handler. */ pt getOnmouseupq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft! return onmouseup; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚Nasq~ uq~pppppppt onMouseMoveq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~%sq~ uq~pppppt+/** Sets the onMouseMove event handler. */ ptsetOnmousemoveq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft/ this.onmousemove = onMouseMove; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~%sq~ uq~pppppt./** Returns the onMouseMove event handler. */ ptgetOnmousemoveq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft# return onmousemove; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚N‰sq~ uq~pppppppt onMouseOverq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~%sq~ uq~pppppt+/** Sets the onMouseOver event handler. */ ptsetOnmouseoverq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft/ this.onmouseover = onMouseOver; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~%sq~ uq~pppppt./** Returns the onMouseOver event handler. */ ptgetOnmouseoverq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft# return onmouseover; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚N±sq~ uq~pppppppt onMouseOutq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~%sq~ uq~pppppt*/** Sets the onMouseOut event handler. */ pt setOnmouseoutq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft- this.onmouseout = onMouseOut; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~%sq~ uq~pppppt-/** Returns the onMouseOut event handler. */ pt getOnmouseoutq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft" return onmouseout; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚NÙsq~ uq~pppppppt onKeyDownq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~%sq~ uq~pppppt=// Keyboard Events /** Sets the onKeyDown event handler. */ pt setOnkeydownq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft+ this.onkeydown = onKeyDown; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~%sq~ uq~pppppt,/** Returns the onKeyDown event handler. */ pt getOnkeydownq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft! return onkeydown; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚Osq~ uq~ppppppptonKeyUpq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~%sq~ uq~pppppt'/** Sets the onKeyUp event handler. */ pt setOnkeyupq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft' this.onkeyup = onKeyUp; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~%sq~ uq~pppppt*/** Returns the onKeyUp event handler. */ pt getOnkeyupq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft return onkeyup; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚O)sq~ uq~pppppppt onKeyPressq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~%sq~ uq~pppppt*/** Sets the onKeyPress event handler. */ pt setOnkeypressq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft- this.onkeypress = onKeyPress; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~%sq~ uq~pppppt-/** Returns the onKeyPress event handler. */ pt getOnkeypressq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft" return onkeypress; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚OQsq~ uq~ppppppptonChangeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~%sq~ uq~pppppt8// Text Events /** Sets the onChange event handler. */ pt setOnchangeq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft) this.onchange = onChange; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~%sq~ uq~pppppt+/** Returns the onChange event handler. */ pt getOnchangeq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft return onchange; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚Oysq~ uq~ppppppptonSelectq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~%sq~ uq~pppppt(/** Sets the onSelect event handler. */ pt setOnselectq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft) this.onselect = onSelect; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~%sq~ uq~pppppt+/** Returns the onSelect event handler. */ pt getOnselectq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft return onselect; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚O¡sq~ uq~ppppppptonBlurq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~%sq~ uq~ppppptB// Focus Events and States /** Sets the onBlur event handler. */ pt setOnblurq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft% this.onblur = onBlur; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~%sq~ uq~pppppt)/** Returns the onBlur event handler. */ pt getOnblurq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft return onblur; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚OÉsq~ uq~ppppppptonFocusq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~%sq~ uq~pppppt'/** Sets the onFocus event handler. */ pt setOnfocusq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft' this.onfocus = onFocus; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~%sq~ uq~pppppt*/** Returns the onFocus event handler. */ pt getOnfocusq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft return onfocus; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚Oñsq~ uq~ppppppptdisabledq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxpppq~%sq~ uq~pppppt(/** Sets the disabled event handler. */ pt setDisabledq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft) this.disabled = disabled; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~%sq~ uq~pppppt+/** Returns the disabled event handler. */ pt getDisabledq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft return disabled; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚Psq~ uq~ppppppptreadonlyq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxpppq~%sq~ uq~pppppt(/** Sets the readonly event handler. */ pt setReadonlyq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft) this.readonly = readonly; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~%sq~ uq~pppppt+/** Returns the readonly event handler. */ pt getReadonlyq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft return readonly; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚PAsq~ uq~ppppppptstyleq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~%sq~ uq~pppppt7// CSS Style Support /** Sets the style attribute. */ ptsetStyleq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft# this.style = style; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~%sq~ uq~pppppt$/** Returns the style attribute. */ ptgetStyleq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft return style; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚Pisq~ uq~pppppppt styleClassq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~%sq~ uq~pppppt'/** Sets the style class attribute. */ pt setStyleClassq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft- this.styleClass = styleClass; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~%sq~ uq~pppppt*/** Returns the style class attribute. */ pt getStyleClassq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft" return styleClass; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚P‘sq~ uq~ppppppptstyleIdq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~%sq~ uq~pppppt%/** Sets the style id attribute. */ pt setStyleIdq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft' this.styleId = styleId; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~%sq~ uq~pppppt(/** Returns the style id attribute. */ pt getStyleIdq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft return styleId; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~%sq~ uq~ppppptG// Other Common Elements /** Returns the alternate text attribute. */ ptgetAltq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft return alt; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚PÉsq~ uq~ppppppptaltq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~%sq~ uq~pppppt*/** Sets the alternate text attribute. */ ptsetAltq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft this.alt = alt; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~%sq~ uq~pppppt@/** Returns the message resources key of the alternate text. */ pt getAltKeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft return altKey; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚Pñsq~ uq~ppppppptaltKeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~%sq~ uq~pppppt=/** Sets the message resources key of the alternate text. */ pt setAltKeyq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft% this.altKey = altKey; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~%sq~ uq~pppppt@/** Returns the name of the message resources bundle to use. */ pt getBundleq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft return bundle; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚Qsq~ uq~ppppppptbundleq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~%sq~ uq~pppppt=/** Sets the name of the message resources bundle to use. */ pt setBundleq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft% this.bundle = bundle; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~%sq~ uq~ppppptA/** Returns the name of the session attribute for our locale. */ pt getLocaleq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft return locale; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚QAsq~ uq~ppppppptlocaleq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~%sq~ uq~pppppt>/** Sets the name of the session attribute for our locale. */ pt setLocaleq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft% this.locale = locale; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~%sq~ uq~pppppt-/** Returns the advisory title attribute. */ ptgetTitleq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft return title; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚Qisq~ uq~pppppppttitleq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~%sq~ uq~pppppt*/** Sets the advisory title attribute. */ ptsetTitleq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft# this.title = title; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~%sq~ uq~pppppt@/** Returns the message resources key of the advisory title. */ pt getTitleKeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft return titleKey; sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚Q‘sq~ uq~pppppppttitleKeyq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxpppq~%sq~ uq~pppppt=/** Sets the message resources key of the advisory title. */ pt setTitleKeyq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft) this.titleKey = titleKey; sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~%sq~ uq~pppppt‚// --------------------------------------------------------- Public Methods /** * Release any acquired resources. */ ptreleaseq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~rxq~ft super.release(); accesskey = null; alt = null; altKey = null; bundle = null; indexed = false; locale = Globals.LOCALE_KEY; onclick = null; ondblclick = null; onmouseover = null; onmouseout = null; onmousemove = null; onmousedown = null; onmouseup = null; onkeydown = null; onkeyup = null; onkeypress = null; onselect = null; onchange = null; onblur = null; onfocus = null; disabled = false; readonly = false; style = null; styleClass = null; styleId = null; tabindex = null; title = null; titleKey = null; sq~ uq~ppppq~fq~fxqä'qzqäGqägsq~isq~ uq~ppppq~%sq~ uq~ppppptŸ/** * Prepares the event handlers for inclusion in the component's HTML tag. * @return The prepared String for inclusion in the HTML tag. */ ptprepareEventHandlersq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ftù StringBuffer handlers = new StringBuffer(); prepareMouseEvents(handlers); prepareKeyEvents(handlers); prepareTextEvents(handlers); prepareFocusEvents(handlers); return handlers.toString(); sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚QÉsq~ uq~pppppppthandlersq~cxsq~ uq~pppppq~fq~gq~fq~ùpq~hxpppq~%sq~ uq~pppppt¸/** * Prepares the mouse event handlers, appending them to the the given * StringBuffer. * @param handlers The StringBuffer that output will be appended to. */ ptprepareMouseEventsq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ftæ if (onclick != null) { handlers.append(" onclick=\""); handlers.append(getOnclick()); handlers.append("\""); } if (ondblclick != null) { handlers.append(" ondblclick=\""); handlers.append(getOndblclick()); handlers.append("\""); } if (onmouseover != null) { handlers.append(" onmouseover=\""); handlers.append(getOnmouseover()); handlers.append("\""); } if (onmouseout != null) { handlers.append(" onmouseout=\""); handlers.append(getOnmouseout()); handlers.append("\""); } if (onmousemove != null) { handlers.append(" onmousemove=\""); handlers.append(getOnmousemove()); handlers.append("\""); } if (onmousedown != null) { handlers.append(" onmousedown=\""); handlers.append(getOnmousedown()); handlers.append("\""); } if (onmouseup != null) { handlers.append(" onmouseup=\""); handlers.append(getOnmouseup()); handlers.append("\""); } sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚Qásq~ uq~pppppppthandlersq~cxsq~ uq~pppppq~fq~gq~fq~ùpq~hxpppq~%sq~ uq~pppppt»/** * Prepares the keyboard event handlers, appending them to the the given * StringBuffer. * @param handlers The StringBuffer that output will be appended to. */ ptprepareKeyEventsq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft if (onkeydown != null) { handlers.append(" onkeydown=\""); handlers.append(getOnkeydown()); handlers.append("\""); } if (onkeyup != null) { handlers.append(" onkeyup=\""); handlers.append(getOnkeyup()); handlers.append("\""); } if (onkeypress != null) { handlers.append(" onkeypress=\""); handlers.append(getOnkeypress()); handlers.append("\""); } sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚Qùsq~ uq~pppppppthandlersq~cxsq~ uq~pppppq~fq~gq~fq~ùpq~hxpppq~%sq~ uq~pppppt·/** * Prepares the text event handlers, appending them to the the given * StringBuffer. * @param handlers The StringBuffer that output will be appended to. */ ptprepareTextEventsq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft` if (onselect != null) { handlers.append(" onselect=\""); handlers.append(getOnselect()); handlers.append("\""); } if (onchange != null) { handlers.append(" onchange=\""); handlers.append(getOnchange()); handlers.append("\""); } sq~ uq~ppppq~fq~fxsq~isq~ uq~sq~bsq~ uq~ppppq‚Rsq~ uq~pppppppthandlersq~cxsq~ uq~pppppq~fq~gq~fq~ùpq~hxpppq~%sq~ uq~pppppt¸/** * Prepares the focus event handlers, appending them to the the given * StringBuffer. * @param handlers The StringBuffer that output will be appended to. */ ptprepareFocusEventsq~cxsq~ uq~pppppq~fq~gq~fppq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft if (onblur != null) { handlers.append(" onblur=\""); handlers.append(getOnblur()); handlers.append("\""); } if (onfocus != null) { handlers.append(" onfocus=\""); handlers.append(getOnfocus()); handlers.append("\""); } if (disabled) { handlers.append(" disabled=\"disabled\""); } if (readonly) { handlers.append(" readonly=\"readonly\""); } sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~%sq~ uq~pppppt/** * Allows HTML tags to find out if they're nested within an %lt;html:html> tag that * has xhtml set to true. * @return true if the tag is nested within an html tag with xhtml set to true, false * otherwise. * @since Struts 1.1 */ ptisXhtmlq~cxsq~ uq~pppppq~fq~gq~fq~pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ft String xhtml = (String) this.pageContext.getAttribute(Globals.XHTML_KEY, PageContext.PAGE_SCOPE); if ("true".equalsIgnoreCase(xhtml)) { return true; } else { return false; } sq~ uq~ppppq~fq~fxsq~isq~ uq~ppppq~%sq~ uq~pppppt/** * Returns the closing brace for an input element depending on xhtml status. The tag * must be nested within an %lt;html:html> tag that has xhtml set to true. * @return String - > if xhtml is false, /> if xhtml is true * @since Struts 1.1 */ ptgetElementCloseq~cxsq~ uq~pppppq~fq~gq~fq~{pq~hxsq~ uq~ppppsq~ uq~ppppq~fq~!Wxq~ftv if (this.isXhtml()) { return " />"; } else { return ">"; } sq~ uq~ppppq~fq~fxqäwpppppppppppppppppppppppppppppppppq~$Isq~ uq~ppppppptBaseHandlerTagq~=xsq~ uq~ppppsq~#sq~ uq~q~i¾pppsq~ uq~q~%pppq~$q~$q~ûsq~ uq~q~V,q~Yq~jq~Vq€Ãq~eq€­Âq€³'q€¹¯q€v„q~nqppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxsq~ uq~pppppt/** * Appends bean name with index in brackets for tags with * 'true' value in 'indexed' attribute. * @param handlers The StringBuffer that output will be appended to. * @exception JspException if 'indexed' tag used outside of iterate tag. */ pt prepareIndexq~=xsq~ uq~pppppq~$q~yq~$ppq~$xsq~ uq~ppppsq~ uq~ppppq~$q~;xq~$tÅ // look for outer iterate tag IterateTag iterateTag = (IterateTag) findAncestorWithClass(this, IterateTag.class); if (iterateTag == null) { // this tag should only be nested in iteratetag, if it's not, throw exception JspException e = new JspException(messages.getMessage("indexed.noEnclosingIterate")); RequestUtils.saveException(pageContext, e); throw e; } if( name!=null ) handlers.append( name ); handlers.append("["); handlers.append(iterateTag.getIndex()); handlers.append("]"); if( name!=null ) handlers.append("."); sq~ uq~q~pppq~$q~$xsq~ uq~pppppppthandlersq~=xsq~ uq~pppppq~$q~yq~$q~ùpq~$xq‚>q‚>*q‚>Bq‚>Zq€ƒÄq€Ó‡q~Ö[qTqã:q‚Bòq‚C q‚C"q‚C:q€…Dq€Õ7q~ÙóqãŠq‚GÒq‚Gêq‚Hq‚Hq€†¶q€Öçq~Ý‹qãÚq‚LÌq‚Läq‚Lüq‚Mq€ˆ(q€Ø—q~á#qäJq‚QÌq‚Qäq‚Qüq‚Rq€‰šq€ÚGq~ä»pppq~Äxq~$ppxq~µq~Çq~¸ÒqåLsq~)sq~ uq~ppppq~sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bdd ìqpxsq~zsq~ uq~ppppq~~sq~ uq~pppppq~‡ptBooleanq~=xsq~ uq~ppppq~$sq~ uq~q‚Rkpppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~~sq~ uq~pppppppt Boolean.javaq~$xsq~ uq~ppppsq~ uq~q‚Rupppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxqssq~)sq~ uq~ppppq~sq~ uq~ppppq~$sq~ uq~ppppsq~ uq~ppppsq~Bdd Bqpxsq~zsq~ uq~ppppq~~sq~ uq~pppppq~‡pt Characterq~=xsq~ uq~ppppq~$sq~ uq~q‚R‘pppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~~sq~ uq~ppppppptCharacter.javaq~$xsq~ uq~ppppsq~ uq~q‚R›pppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~$ppxq½q~qxñqzÄqwq~]q~úq®bq~‚q~ºq~Ùq~íq¼uq^Xq®˜q®·q®Ûq~6q~Uq~yq^ÐqÀ{q~Òˆq~²q~Ñq~õq¯q¯3q¯Wq_HqÄsq~Òàq~.q~Mq~qq¯q¯¯q¯Ópq~Äxq~$ppxsq~ Guq~JqÇßq¶qq]Lq^Yq_SqÈ?qÈoq?ñqãq‹qqqDq]q^†q_€qÈÿqÉ/q#sq@Aq@qq>q°qtq$q]¬q^³q_­q~>¶q~@$q~@Tq~Bžq~<‹q~=®qÉ¿qÉïqnq¤qðq#£q@Áq@ñq$3q]Ñq^Øq_Òq~=Þq~<Úq~>æq~@Äq~@ôq~BÎqÊqʯqžqÔq0q#ÓqAAqAqq$cq]öq^ýq_÷q~>q~=)q~?q~Adq~A”q~Bþpppq~§q~Ñq~ùq~«q~½q~¸Èq~Ùq‚Ruqsq‚R›q³q}þqxçqzºqw2q~)aq«Zq~;(q‚RÁq‚Rçq‚Sq«q‚S7sq~Qsq~ uq~ppppq~~sq~ uq~pppppppt String.javaq~$xsq~ uq~ppppsq~ uq~q~{pppq~$xq‚S±q~³q~Ýq~q~Áq~Óq~¸Þq‚Rqs$q‚R§qÉq~qxýqzÐqwHq~)wq«pq~;>q‚RÍq‚Róq‚Sq«q‚SCq‚S]q‚Siq‚S…q‚S‘ppppq~Çsq~ uq~ppppppptlangq~=xsq~ uq~ppppq~sq~ uq~q~„ppppq~$ppxsq~ uq~pppppq~‡ptStringq~=xsq~ uq~ppppq~$sq~ uq~q~“pppsq~ uq~ppppq~$q~$q‚SÃsq~ uq~pppppq~$sq~ uq~ppppsq~ (uq~(q~Hq~Xq~hq~xq~ˆq~˜q~¨q~¸q~Èq~Øq~èq~øq~ q~ q~ (q~ 8q~ Hqöq~q~åq~×q~ýq~$q~Sq~Šq~Qeq~Qxq.Üq1™q~q~*q3³q3Èq~ïqüq~-(q~-=q~ƒq~›q‚¢q‚Éq‚øq‚/q‚éq‚÷q~Lq~mq‚qq‚©q~ sq‚ Ðq‚ Þq‚ íq‚ ûq‚ *q‚ 2qacq/ qû„qýcq‚ Zqñ(qñ0qZxqZ˜q~Åzq~Å‚q~Åšq~Ųq~ÅÒq~ÅÚq`Yq`aq`yq`™q`Áq`Éq`æqaq~)¶qrbqqtqrrq]°q]ÈqVbqWSq~¸ÿq~¹q¶=q¶Šq~¹Þq~º.q·…q~¸ôq~;Êq~;Sq‚)#q‚)1q‚)Cq‚)Wq‚)eq‚)wq‚)‹q‚)™q‚)«q‚)¿q‚)Íq‚)ßq‚)óq‚*q‚*q‚*'q‚*5q‚*Gq‚*[q‚*iq‚*{q‚*Žq‚*œq‚*®q‚*Âq‚*Ðq‚*âq‚*öq‚+q‚+q‚+*q‚+9q‚+Iq‚+Wq‚+iq‚+}q‚+‹q‚+q‚+±q‚+¿q‚+Ñq‚ q¡Øq‚,]q~iq‚%ùq‚&q‚&q‚&$q‚&6q‚&eqèÉq‚ aq‚ýq¢1q!¯q7ˆq8Fq:q/$q; q;™q<%q<(q<´q<·q=Cq=Fq=Êq>)q>q>“q?q?"q?·q?ºq@tq@wqC qB‚qCqCqBqMŸqM¢qM·qMºqMÏqMÒqMðqMóqN;qNSqNhqNkqN€q7{q89q:q/7q:õq;„q<q<q<Ÿq<¢q=.q=1q=½q>q>{q>~q? q? q?™q?œq@_q@bqB qBmqBùqBüqC‹q‚_q‚mq‚q‚Çq‚Õq‚çq‚ûq‚ q‚q‚cq‚qq‚ƒq‚—q‚¥q‚·q‚Ûq~rq~€q~’qåëqåùqæ qæ"qæ*qæOq~ q~ q~ #q~ 7q~ Eq~ Wq~ kq~ yq~ ‹q~ Ÿq~ ­q~ ¿q~ Óq~ áq~ óq~ q~vq~„q~–q~ªq~¸q~Êq‚©q‚hq~q~&q~8q~Lq~Zq~lq~€q~Žq~ qþ›q~»Oq~»]q~»oq~»ƒq~»‘q~»£q~»ûq“q¡q³qÇqÕqçq/q=qOqrq~Ì'q~Ì5q~ÌGq~Ì^q~Ìfq~ðq~þq~qÝÆqÝÔqÝæqÝúqÞqÞqÞ.qÞq~ŠRq~Š`q~Šrq~q~q~¡q~Äq~Òq~äq~øq~‘q~‘q~‘,q~‘:q~‘Lq~”˜q~”¦q~”¸q~”Ìq~”Úq~”ìq~•q~•q~• q~•4q~•Bq~•Tq~•zq~•q~•q~•¯q~š¯q~š½q~šÏq~šãq~šñq~›q~›q~›%q~›7q~›Kq~›Yq~›kq~›q~›q~›Ÿq~›³q~›Áq~›Óq~›÷q~œq~œq~œ+q~œ9q~œKq~œ_q~œmq~œq€B'q€B5q€BGq€B[q€Biq€B{q€Jq€Jq€J#q€JFq€JTq€Jfq€L•q€L£q€Lµq€LØq€Læq€Løq€M q€Mq€M,q€M@q€MNq€M`q€PÏq€PÝq€Pïq€Qq€Qq€Q#q€QFq€QTq€Qfq~žq~ž&q~ž8q~ž[q~žiq~ž{q~žq~žq~ž¯q~ q~ -q~ ?q€Tkq€Tyq€T‹q€T®q€T¼q€TÎq€Tâq€Tðq€Uq€Uq€U$q€U6q~†Yq~†iq~†yq~†‰q~†™q~†©q~‡0q~‡>q~‡Pq~‡dq~‡rq~‡„q€`6q€`Dq€`Vq€`jq€`xq€`Šq€`žq€`¬q€`¾q€`Òq€`àq€`òq€aq€aq€a&q€a:q€a=q€aRq~W^q~Wlq~W~q~W’q~W q~W²q~Wúq‚8q‚8%q‚8Aq‚8Oq‚8]q‚8kq‚8yq‚8‡q‚8•q‚8£q‚8±q‚8¿q‚8Íq‚8Ûq‚8éq‚8÷q‚9!q‚9/q‚9=q‚9Kq‚9Yq‚9gq‚9uq‚9ƒq‚9‘q‚9¢q‚9·q‚9Êq‚9ßq‚:q‚:/q‚:Bq‚:Wq‚:jq‚:q‚:’q‚:§q‚:ºq‚:Ïq‚:âq‚:÷q‚; q‚;q‚;2q‚;Gq‚;Zq‚;oq‚;‚q‚;—q‚;ªq‚;¿q‚;Òq‚;çq‚;úq‚<q‚<"q‚<7q‚<šq‚<¯q‚<Âq‚<×q‚<êq‚<ÿq‚=q‚="q‚=7q‚=Jq‚=_q‚=rq‚=‡q‚=šq‚=¯q‚=Âq‚=×q‚=êqâçqâêqâòq~qãq‚=ÿq~V/q~V=q~VKq~VYq~Vgq~Vuq~Vˆq~Vq~V°q~VÅq~VØq€øHq€ø[q€øpq€øƒq€ø˜q€ø«q~]Dq~]Rq~]dq~Yq~Yq~Yq~Y-q~Y@q~YUq~Yhq~j.q~jq~rjq~rxq~r†q~r”q~r¢q~r°q~r¾q~rÌq~rÚq~rìq~sq~sq~s&q~s8q~sLq~s^q~srq~s„q~uq~uq~u*q~uq~êSq~êVq~ê^q~êƒq~ê†q~êËq~ùÜq~úq~úq~úq~úqƒFqƒNqlÎqlÙqláqléqlùqƒ¨qƒ°qƒÑqƒÙqƒáq„q„q„#q„+q„3q„Iq„Tq„\q„dq„¯q„·q„àq„èq„ðq‚‘q… q…Pq…uqõq~*Qq~*Tq~*uq~*–qnq'qÁqÙqiqiŽqiqjqj1qjGqjRqjhqjÂqjÅqjÿqk qiLq~Ä5q~ÄMq“÷q”q~Àèq~Áq~Á"q~Á5q3qEq~U¬q€ìYq€ì\q€ìzq~®Hq€ì¬q€ì¯q€ì·q q 'qÕqèq q~Tàqaq~ªïq~ª÷q~« q~«q~«3q~«Fq#q6qJq]q‘q÷q³9q>¨q>«q?7q?:q?Øq?Ûq@Œq@qC¸qBšqC&qC)qB(qOfqOiqO~qOqO–qO™qO·qOºqPqPqP/qP2qPGqDSqDqqD¿q0qDåqDüqEqEqE'qE*qE>qEAqEUqEdqEsqEvqEŠqEqE¡qE¤qEÁqEÄqFqFqF+qF.qFEq‚ëq‚ýq‚7q‚Iq‚]q‚oq‚©q‚»q‚Ïq‚áq‚ qæ_qæqqæ…qæ—qæ®qæ¶qæÛq~ 'q~ 9q~ Mq~ _q~ sq~ …q~ ™q~ «q~ ¿q~ Ñq~ õq‚žq‚°q‚Äq‚Öq‚q‚úqþ«qþ½qþÑqþãqþ÷qÿ qÿ=q~¼1q~¼Cq~¼Wq~¼iq~¼³q‚q”q¨qºqôqq)q~Ì›q~Ì­q~ÌÄq~ÌÌqÞ‚qÞ”qÞ¨qÞºqÞÎqÞàqÞôqßq~Šæq~Šôq~‹q~‹q~‹,q~‹@q~‹Rq~‹fq~‹xq~‹Œq~‹žq~‹²q~‹Äq~‹Øq~‹êq~‘€q~‘’q~‘¦q~‘¸q~‘Ìq~‘Þq~‘òq~’q~–q~–)q~–=q~–Oq~–cq~–uq~–‰q~–›q~–²q~–Çq~–Ùq€Bžq€B°q€BÄq€BÖq€Bêq€Büq€Cq€C"q€C6q€CHq€C\q€Cnq€C‚q€C”q€C¨q€Cºq€CÎq€Càq€Côq€Dq€Dq€D,q€Jšq€J¬q€JÀq€JÒq€M”q€M¦q€Mºq€MÌq€Màq€Mòq€Nq€Nq€Qšq€Q¬q€QÀq€QÒq€Qæq€Qøq~ yq~ ‹q~ Ÿq~ ±q~ Åq~ ×q~ ëq~ ýq€Ujq€U|q€Uq€U¢q€U¶q€UÈq€UÜq€Uîq€a¶q€aÈq€aÜq€aîq€bq€bq€b(q€b:q€bNq€b`q€btq€b†q€bšq€b¬q€bÐq€bÓq€bèq€ôq€ô*q€ô>q€ôPq‚>rq‚>‡q‚>šq‚>¯q‚>êq‚>ÿq‚?q‚?'q‚?:q‚?Oq‚?bq‚?wq‚?Šq‚?Ÿq‚?²q‚?Çq‚?Úq‚?ïq‚@q‚@q‚@*q‚@?q‚@Rq‚@gq‚@zq‚@q‚@¢q‚@·q‚@Êq‚@ßq‚@òq‚Aq‚Ajq‚Aq‚A’q‚A§q‚Aºq‚AÏq‚Aßq‚Aòq‚Bq‚Bq‚B/q‚BBq‚BWq‚Bjq‚Bq‚B’q‚B§q‚Bºqãqãqã"qãBqãWq‚Bßq€øÀq€øÓq€øèq€øûq€ùq€ù#q€ù8q€ùKq€ù`q€ùsq€ùˆq€ù›q~]ˆq~]šq~Y­q~YÀq~YÕq~Yèq~jèq~jûq~kq~k#q€þoq€þq€þ•q€þ¨q€þ½q€þÐq ˆq šq ®q Àq Ôq æq úq q€Ûˆq€Û›q€Û°q€ÛÃq€ÛØq€Ûëq€Üq€Üq€Ü(q€Ü;q€ÜPq€Ücq€Üxq€Ü‹q€Ü q€Ü³q€ÜÈq€ÜÛq€Üðq€Ýq€Ýq€Ý+q€Ý@q€ÝSq€Ýhq€Ý{q€ÝÀq€ÝÐq€¾q€¾"q€¾6q€¾Hq€¾\q€¾nq€¾ôq€¿q€©Œq€©žq€©²q€©Äq€©Øq€©êq€©þq€ªq~n»q€¦q€ª$q€ª6q€ªJq€ª\q€ªpq€–…q€–—q€–«q€–½q€–Ñq€–ãq€–÷q€— q€—q€—/q€—Cq€—Uq€—iq€—{q€—q€—¡q€—µq€—Çq€—Ûq€—íq€˜q€˜q€˜'q€˜9q€˜Mq€˜_q€˜sq€˜…q€˜™q€˜«q€˜¿q€˜Ñq€˜åq€˜÷q€™ q€™q€™1q€™Cq€™Wq€™iq€™}q€™q€™Óq€™ãq€™æq€i¦q€i¹q€iöq€j q€jq€j1q€jFq€jYq€jnq€jq€j¶q€j¹q€i1q€jÍq€jÜq€jßq€jôq€j÷q€ÅNq€Å`q€Åtq€Å†q€Åšq€Å¬q€ÅÀq€ÅÒq€Åæq€Åøq€Æ q€Æq€Æ2q€ÆDq€ÆXq€Æjq€Æ~q€Æq€Æ¤q€Æ¶q€ÆÊq€ÆÜq€Æðq€Çq€Çq€Ç(q€Çbq€Çtq€ÇÈq~u†q~u˜q~u¬q~u¾q~uÒq~uäq~uøq~v q~vq~v0q~vDq~vVq~vjq~v|q~vq~v¢q€°*q€°qmTq²áq²Mq…–q…žq…¦q…®q…¶q…¾q…Æqmjqmuqm}qm…qm•q† q†(q†Iq†Qq†Yq†zq†q†›q†£q†«q†Áq†Ìq†Ôq†Üq‡'q‡/q‡Xq‡`q‡hq‚ªq‡q‡Èq‡íqvq~*¬q~*¯q~*Ðq~*ñqÙq’q,qDqk¢qkµqkËqkÖqkìqlFqlIqlƒql¤qlÅqÊqâq”Wq”oq~Áéq~Áùq~Âq~Âq~#q~#q~##q~#3q~#Cq~#Sq~#cq~#sq~#ƒq~#“q~#£q~#³q~#Ãq~#Óq~#ãq~#óq~$q~Žq~©q~Èq~ïq~q~Uq[Eq[eq˜œq˜¤q˜¼q˜Ôq˜ôq˜üq™q™q™4q™Tq™|q™„q™¡q™Ìq‚þq‚qa“q0*qûÌqý“q‚.qòßqòçq0Zq2 q4µq4Êq‚1q‚Lq‚kq‚’q‚Áq‚øq‚EqV®qWŸqûäqüâq.q.q~q~´q~Óq~Ûq~úq~qsbqsqqqÆqsqs¾q~.Úq~.ïq½q½jq¾5q¾]q¾…q¾­q¿q¿q~Qßq‚×q‚Àq‚øq^ q^¸qø8qaËqÜÛq³Ñq@”q@¬q~ q~ q~ &q~ :q~ Lq~ `q~ rq~ †q~ ˜q~ ¬q~ ¾q~ Òq~ äq~ q‚1q‚Cq‚Wq‚iq‚[q‚qÿ`qÿhqÿpqÿ„qÿ–qÿªqÿ¼qÿÐqÿâq‚q~Íq~Íq~Í*q~Í2qæëqæýqçqç#qç:qçBqçgq9qKq_qqq«q½qàq‚ q‚ 'q‚ ;q‚ Iq‚ [q‚ Éq‚ Ûq‚ ïq‚!q‚!;q‚!Iq‚![q‚!oq‚!q‚!•q‚!§q‚!Ëq‚.Öq‚.èq‚.üq‚/q‚/"q‚/4q‚/Hq‚/Zq‚/nq‚/€q‚/”q‚/¦q‚/ºq‚/Ìq‚/ßq‚/ñq‚0q‚0q‚0+q‚0=q‚0Qq‚0aq‚0sq‚0‡q‚0™q‚0­q‚0¿q‚ lq£dq‚1/q‚'zq‚'q‚'¬q‚'¾q‚'íqé{q‚ Åq‚¯q£½q"aq7¨q8fq:Lq/dq;:q;ÉqIq>Àq>Ãq?Oq?Rq?ùq?üq@¤q@§qCÐqB²qC>qCAqB8qQ,qQ/qQDqQGqQ\qQ_qQ}qQ€qQÈqQàqQõqQøqR qF•qF³qGq0ŠqG'qG>qGRqGUqGiqGlqG€qGƒqG—qG¦qGµqG¸qGÌqGÏqGãqGæqHqHqHGqHYqHmqHpqH‡q~¼Öq~¼Þq~¼ýq~½q~½Oq~½aq~½uq~½‡q~½Ñqß:qßLqß`qßrq߆qߘq߬qß¾q~Œ>q~ŒPq~Œdq~Œvq~ŒŠq~Œœq~Œ°q~ŒÂq~ŒÖq~Œèq~Œüq~q~"q~4q~’8q~’Jq~’^q~’pq~’„q~’–q~’ªq~’¼q~—3q~—Eq~—Yq~—kq~—q~—‘q~—¥q~—·q~—Îq~—ãq~—õq€D`q€Drq€D†q€D˜q€D¬q€D¾q€DÒq€Däq€Døq€E q€Eq€E0q€EDq€EVq€Ejq€E|q€Eq€E¢q€E¶q€EÈq€EÜq€Eîq€Kq€Kq€K,q€K>q€NLq€N^q€Nrq€N„q€N˜q€Nªq€N¾q€NÐq€R,q€R>q€RRq€Rdq€Rxq€RŠq€c\q€cnq€c‚q€c”q€c¨q€cºq€cÎq€càq€côq€dq€dq€d,q€d@q€dRq€dvq€dyq€dŽq€V"q€V4q€VHq€VZq€Vnq€V€q€V”q€V¦q~¡Wq~¡iq~¡}q~¡q~¡£q~¡µq~¡Éq~¡Ûq€¶Eq€¶Wq€¶kq€¶yq€¶Œq€¶¡q€¶´q€¶Éq€¶Üq€» q€»q€»,q€»Aq€»Tq€z•q€z§q€z»q€zÍq€záq€zóq€{ q€{q€{2q€{Gq€{Zq€ôŠq€ôœq€ô°q€ôÂq€ò»q€òÍq€Ýðq€Ýþq€Þ q€Þq€Þ*q€Þ=q€ÞRq€Þeq€Þzq€Þq€Þ¢q€Þµq€ÞÊq€ÞÝq€Þòq€ßq€ßq€ß-q€ßBq€ßUq€ßjq€ß}q€ß’q€ß¥q€ßºq€ßÍq€ßâq€ßõq€à q€àq€àbq€àrq~Z=q~ZPq~Zeq~Zxq€ª€q€ª“q€ª¨q€ªºq€ªÎq€ªàq€ªôq€«q~nÊq€¦q€«q€«,q€«@q€«Rq€«fq€™ûq€š q€š!q€š3q€šGq€šYq€šmq€šq€š“q€š¥q€š¹q€šËq€šßq€šñq€›q€›q€›+q€›=q€›Qq€›cq€›wq€›‰q€›q€›¯q€›Ãq€›Õq€›éq€›ûq€œq€œ!q€œ5q€œGq€œ[q€œmq€œq€œ“q€œ§q€œ¹q€œÍq€œßq€œóq€q€Iq€Yq€\q~]¾q~]Ðq~kxq~k‹q~k q~k³q€¿*q€¿q>q>,q>@q;qnqnqnqn!qn1qˆ˜qˆ qˆÁqˆÉqˆÑqˆòq‰q‰q‰q‰#q‰9q‰Dq‰Lq‰Tq‰Ÿq‰§q‰éq‰ñq‰ùq‚ÃqŠqŠ"q£þqŠ8qŠCqŠ\qŠÝq‹q÷q'Åq'Üq'ûq("q(Qq(ˆq(¥q(¸qž:qžRq”çq”ÿqr>qrMqr\qdqdqd#qdÅqdØqdîqdùqeqeiqelqežq~Â_q~Ârq~$q~$#q~$3q~R%q[¬q[Ìq~/³q~/Èq‚Xq‚)q‚Hq‚oq‚žq‚Õq‚lq_q_0qtqqïqt#qÁ#qÁpqÂ;qÂcq‹q³qà qÃ#q‚÷q‚Žq‚Æqšqš$qšqH×qHõqICq1qIiqI€qI”qI—qI«qI®qIÂqIÅqIÙqIèqI÷qIúqJqJqJ%qJ(qJEqJHqJ‰qJ›qJ¯qJ²qJÉq~óq~q~q~+qê‰qé¼qê°qê×q¤^q"¹q‚Äq‚Öq‚êq‚üq‚´q‚ qçwqç‰qçqç¯qçÆqçÎqçóq‚8q‚@q‚Hq‚_q‚gq‚oq‚‹q‚q‚±q‚Ãq‚ q‚q‚Qq7¸q8vq:dq/|q;Rq;áqYq>Øq>Ûq?gq?jq@q@q@¼q@¿qCèqBÊqCVqCYqBHqRòqRõqS qS qS"qS%qSCqSFqSŽqS¦qS»qS¾qSÓq‚1?q‚1Rq‚1gq‚1zq‚1q‚1¢q‚1·q‚1Êq‚1ßq‚1òq‚2q‚2q‚2/q‚2Bq‚2Vq‚2iq‚2~q‚2‘q‚2¦q‚2¸q‚2Ìq‚2Ýq‚2ðq‚3q‚3q‚3-q‚3?q‚ q¤´q‚3±q~½óq~½ûq~¾q~¾"q~¾lq~¾~q~¾’q~¾¤q~¾îq~Ígq~Íyq~Íq~͘q‚!Ûq‚!íq‚"q‚"q‚"sq‚"…q‚"™q‚"§q‚"¹q‚"Íq‚"ßq‚#q‚#+q‚#?q‚#Qq‚#eq‚#wq‚#›q€)Fq€)Èq€)Üq€*!q~ q~ *q~ >q~ Pq~ dq~ vq~ Šq~ œq~ °q~ Âq~ Öq~ èq~ qðq q q (q bq tq —q€)[qßòqàqàqà*qà>qàPqàdqàvq~’ðq~“q~“q~“(q~“q€GRq€Gdq€Gxq€GŠq€Gžq€G°q~ˆq~šq~®q~Àq~Ôq~æq~úq~Ž q~Ž q~Ž2q~ŽFq~ŽXq~Žlq~Ž~q€·1q€·Cq€·Wq€·jq€·q€·’q€·§q€·ºq€·ßq€·ïq€·ÿq€¸q€¸ q~xuq~x‡q~x›q~x­q~xÁq~xÓq~xçq~xùq~y q~yq~y3q~yEq~yYq~ykq~yq~y‘q€»©q€»¼q€»Ñq€»äq€¼)q€¼9q€¼q€ØPq€ØŸq€Ø§q€ØÇq€ØÏq øq q q -q ?q Sq eq yq ‹q€lâq€lñq€lÿq€mq€mOq€mbq€mwq€mŠq€mŸq€m²q€mÇq€mÚq€mïq€nq€=§q€=¹q€=Íq€=ßq€=óq€>q€>q€>+q€>>q€>Pq€>dq€>vq€>Šq€>œq€>°q€>Âq€8ÿq€9q€7'q€79q€7Mq€7_q€Õq€çq€ûq€ q€!q€3q€Gq€Yq€mq€q€“q€¥q€¹q€Ëq€ßq€ñq€q€q€+q€=q€Qq€cq€Jq€\q€1q€1-q€1Qq€1cq€1wq€1‰q€1q€1¯q€1Ãq€1Õq€1éq€1ûq€2q€2!q€25q€2Gq€'q€9q¥q·q~UÙq ‡q ™q:q~U-q q q uq ‚qÐqãq÷q q_qlqyq~¯Éq~¯Üq~°Hq~¬Jq~¬Rq~¬fq~¬yq~¬Žq~¬¡q€í¶q€íÐq€íòq€íýq€îq€îAq€î“q€î–q€îžq€_Êq~aq~Ÿ¹q~ˆŽq¦q Kq€^q~c½q~cÐq~d$q~d3q€øq€”Ïq€Ãªq€Ã¸q~t®q€¯pq€‚¿q€Òoq€‹»q€´Õq€xÁq€ q€¡q€Aq€&hq€Îq€Xq€,=q€,­q€,»q€,Éq€,×q€•q€!†q€"ýq€jq€¦q€'nq€% q€ èq€@q€ wqÉØqÉíqÊ0qÎíqÏqÏ*qÏ:qÓ5qÓMqÓeqÓ}qÓ’qÓ¢qÓ²qÓÂqÓòqÔq~²”q~²œq~²°q~²Ðq~´^q~´~qÖÒqÖåqÖýqðOqðdqðwqðŒqóQqó†qó™qó®qóÁqóÙqóîqÛqÛ"qÛ5qÛMqÛeqÛ}qÛ•qÛªqÛ½qÛÕqÛêqÛúqÜ qútqú‡qúŸqú´qúÇqúÜq÷q÷)q÷Aq÷Vqënqë†qèuqèŠqèqè²qèíqéqD£qB qDÄqDÌqDíqEqE7qE?qEGqEpqE€qE¡qEÂq~DAq~EMq¦êq§q§Bq§jq¤#q¤+q¤Gq¤Zq¤oq¤‚q¤—q¤ªq¤¿q¤Òq¤çq¤úq¥"q¥:q¥Zq¥zq¥¢q¥ºq¥Òq¥âq¥êq¥ÿq¦q¦"q¦:q¦Rq¦gq¦zq±šq±¢q±»qìøqíqíqî;qH–qIqPq~›q~Éq~åq~7¤q~ÏÉq~Њq~Пqí¤q~"fqªëq¨Ïq¨ÿqMqM7qMhqM‰q³q~9¡q7Eq7Yq7lq7©q®Ðq¬q¬;q¬[q¬{q*¥q*Íq®ýq¯+q¯Gq~8nq~8q~8±q~8áqIÏq³,quãqv>qvQqvÞqvñqw qw)qwgqwzq–¿q~=q>Rq>fq>xq>Œq>žq>²q>Äq>Øq;ûq<q<#q<8qq×kq×vq×®q×Îq×ãq׿q×ûqØqØqØ3qØ6qØ>qØVqØpqÍq~·q~ÂÊq‘Šq‘q‘³q‘¾q‘Ôq’.q’1q~qžÊqžâq•—q•¯q%™q~Rkq\q\3q~0Œq~0¡q‚q‚q‚%q‚Lq‚{q‚²q‚“q_q_¨qtœqrqt¬qÅqÅhqÆ3qÆ[qƃqÆ«qÇqÇq‚q‚\q‚”q›¬q›´q›Ìq›äqœqœ qœ4qœ q>iq>ðq>óq?q?‚q@q€­Rq~^q~^¢q~^Æq~^Éq~^Ñq~^áq~^öq~_ q€ûðq€üq€üq€ü+q€ü@q€üSq€ühq€ü{q€üq€ü£q€ü¸q€üËq€Á^q€Ápq€Á„q€Á–q€Áªq€Á¼q€ÂBq€ÂTq‚MLq‚Maq‚Mtq‚M‰q‚MÄq‚MÙq‚Mìq‚Nq‚Nq‚N)q‚NqñSqô1qôNqôaqôvqô‰qô¡qô¶qÜ2qÜBqÜUqÜmqÜ…qÜqܵqÜÊqÜÝqÜõqÝ qÝqÝ-qûDqûWqûoqû„qû—qû¬q÷¾q÷Ñq÷éq÷þqëÝqëõqéDqéYqélqéqé¼qéÑqEãqB+qFqF qF-qFNqFwqFqF‡qF°qFÀqFáqGq~DWq~Esq§Òq¨q¨*q¨Rq¦¸q¦Àq¦Üq¦ïq§q§q§,q§?q§Tq§gq§|q§q§·q§Ïq§ïq¨q¨7q¨Oq¨gq¨wq¨q¨”q¨¤q¨·q¨Ïq¨çq¨üq©q² q²q²-qí.qíEqíMqîQqJqJ›qP[q~q~Eq~aq~7Êq~Ñzq~Ñqíºq~"Œq³]q©¯q©ßqMÔqNqN6qNWq³uq~:$q7Ûq7ïq8q8?q¯q­3q­[q­{q­›q+Íq+õq¯yq¯§q¯ÃqK¯qKßqLqKpq³ŽqwÝqwðqx}qxqx¨qxÈqyqyq–æq~=dq>êq>þq?q?$q?6q?Jq?\q?pq<ºq<Ïq<âq<÷q= q=q=2q=Gq=WqS”qP|qT1q|q|dq|yq~ .q~ Jq~ ]q~ rq~ …q~ šq~ ­q~!q~!q~!5qV„qVäqW`q4qIq~4=q~4Šq1õq[ qšØqšðq5îq\­q\Õq›q›q› q›5qº»q»q¿äqaqtq±qÄq q q"qÌqïqÏq~åÞqbq~õq~õõq~öq~öq~ö%q~ö5q~öÛq~öÞq~öóq~ööq~öþq~÷#q~÷&q~÷kq9qAqIqiqqqyq˜q q´qåqõqq0qHq`qˆq0qBq|qŽq²rq²•q²¨q²Àq²íq²ýq~á\q~ádq~áyq~á|q~á¡q~á¤q~áÌq~áðq~âq~âq~â,q~â;q~âYq~âhq~âzq~â™q~âÝq~âñq~âôq~ãq~ã+q~ã?q~ãBq~ãYq~ãq~ã“q~ã¢q~ã±q~ãÀq~ãÏq~ãÞq~ãðq~äq~ä"q~ä1q~ä¦q OqpÀqpÓqpéqpôqq qqdqqgqq™q~G^q~Gsq~G‹q,ëq,óq-q-q--q-?q-Sq~Gq~_q$uq$Œq$«q$Òq%q%8q%Uq%hq)Ãq)Úq)ùq* q*Oq*†q~H†q~+½q~+Àq~+áq~,q!q!Óq"mq"…qoyq³¦q²Èqëqóqûqq qqqoqošqo¢qoªqoºqoØqoãqoëqoóqoûqp q9qq/bqjvqjˆqk4qkFqkZqklqk¦qk¸qkÌqkÞq~ƒRq~ƒZq~Jäq~Jùq~K qØ…q~N+q~NJqؽqØÀqØÕqØØqØöqØùqÙqÙqÙ>qÙAqÙnqÙqqÙ¦qÙ±qÙÆqÙÑqÙïqÙúqÚqÚ"qÚGqÚRqÚqÚŠqÚÂqÚâqÚ÷qÚúqÛqÛ'qÛ2qÛGqÛJqÛRqÛjqÛ„qÍ{q~Ã/q~ÃBq’åq’øq“q“q“/q“‰q“Œq¿qŸzqŸ’q–Gq–_q&Iqáðqâqâqâ-qâ;qâIqâWqâ§qâ¼qâÏqâäqã'qãString */ pt replaceCharq~=xsq~ uq~pppppq~$q~yq~$q~{pq~$xsq~ uq~ppppsq~ uq~ppppq~$q~%Zxq~$t* if (pos == 0) { return c + input.substring(pos, input.length()); } else if (pos == input.length()) { return input.substring(0, pos) + c; } else { return input.substring(0, pos) + c + input.substring(pos, input.length() - 1); } sq~ uq~ppppq~$q~$xsq~ uq~ppppppptcq~=xsq~ uq~pppppq~$q~yq~$q~Epq~$xq~æ¤q~æ³q~æÂq~æÑqÉqáq®qÆqOqq˜q€kq`qxqq1qºqêqq€lÍqËqãq„qœq%qUqnq6qNqïqqqÀqÙq€o±q ¡q ¹q!Zq!rq!ûq"+q"Dpq~Äxq~ásq~)sq~ uq~ppppq~5sq~ uq~ppppq~=sq~ uq~ppppsq~ uq~ppppsq~Bddpxsq~sq~ uq~ppppq~sq~ uq~ppppppptshortq~$xsq~ uq~ppppq~$sq~ uq~q‚Sõpppsq~ uq~ppppq~$q~$sq~Qsq~ uq~ppppq~sq~ uq~pppppppt short.javaq~$xsq~ uq~ppppsq~ uq~q‚Sÿpppq~$xsq~ uq~pppppq~$sq~ uq~ppppsq~ uq~ppppq~Äxq~*q~Ÿq"q pq~ sq~ uq~ppppq€´8q€x$q~oÀq€$q€ŽŒq€@õqÿ`q€Qq€Ëq~ªJq€q€ ùq€"pq€íq€)q€'!q€$~q€ [q€³q€ êq~·ýq~¸(q~¸mqÑq~±ÓqµØqµæq¶\q¶lq¶|q~çcq~çpq~ç}q~çØq~è1q~è=q~éEq~é¥q~éµq~éÅq~éÕq~êsq~ëKq~ú+q~ûyq~ù'q[q~Ô{q~Õq~Õãq~Öq~Öq~Ö$q~Ökq +q 9q wqc.qcÂq‚>×q‚Aq‚A/q‚ABq‚AWq€¾Îq€¾àq€öŽq€ö q€çBq€çTq€çhq€çzq€Çq~JQqÕqÕ”q~M¶q׫q×ÃqŠ\qŠ•qŠÖq‹Hq‹q‹ºq‹óqŒ,qŒeqŒžqŒ×q%0q%>q%Qq%®q%¾q%Îq%Þq~/ñq~0qĘqÄÀqŸqÅØqÆq‚)q‚9q›©qqú`qúxqúqú“q~òq~q~@q~Hq2Uq2hq5tq5‡qK‚qL­qëOq‚0q‚Bq:yqAšqU1q‚5Õq‚5èq‚5ýq‚6q~¿ q~¿Gq~¿Oq~¿cq~¿uq~¿Õq~¿çq‚#÷q‚$ q‚$q‚$/q‚$µq‚$Çq óq!q~šAq~šSq€f\q€fnq€f‚q€f”q€æ%q€~Ôq€~æq€èöq€éq€éq€é.q€Âq€Â.q‚Mœq‚M±q‚Oôq‚P q‚Pq‚P1q‚R)q€õºq€õÌq€ˆmq€ˆq€‰²q€}[q€Ï4q€ÏFq€Ù q€Ùq€Ú_q€oÖq€÷-q€÷?q€@uq~§zq€rq€Wq€”q€ …q€ˆqþwq€$ q€ çq€7q€5Ïq€9kq€6q€7÷q€7úq€oq€q€Üq€ìq€ïq€ ^q€ nq€ qq€(iq€(yq€(|q~°}q~°qÏmqϲqÔúq~³qû¿qûÔqøqø&qé”qé©q§Ïq§Úq¨q¨GqJ‚q~ÐÇq~ÐÚqMÀqæq+Jq+zq+¢qwµqwÈqxUqxhqYqlqZpq Oq~õåq~öEq~öUq~öeq~öuq~÷q~÷ëquq¹xq¹ˆq¹˜q~âËq~ãíq~äCq~äfq~äuq~ä„q~äËq sq†q†Kq†öq‡/q‡hq‡¡q~~Ûq~~ôq~~ÿq5q Vq ‰q!Bq#qoÂqpq’Pq”bq~Müq/RqjPqjbqk€qk’q~J¹q~JÌqØ•qبq~NRqÚ¿qÚ×qŒðq)qjqÜqŽqŽNqއqŽÀqŽùq2qkq%îq&q&^q&nq&~q&Žpppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppq~Äxq~Eq~×q‚Sÿq~ q~•qqq‚T)q~Rq~íq‚T q~6q~«q.qpppq~ sq~ uq~ppppppptprimitiveTypesPackageq~$xsq~ uq~ppppq~5sq~ uq~ppppq~=q~ pxsq~±Usq~ uq~ppppq~ sq~ uq~ppppsq~±] t SansSerifq~=sq~±apptAsq~±dÿq~$q~$pq~=q~$sq~±dÿq~$q~$q~=sq~±dÿÿÿÿsq~±dÿq~$q~$sq~±] t SansSerifq~=sq~±dÿsq~±dÿq~$q~$sq~ uq~ppppsq~ uq~ppppsq~±dÿÿÿÿsq~±dÿq~$q~$sq~±] t SansSerifsq~±dÿsq~±] t SansSerifq~=sq~±apptFsq~ uq~ppppsq~±appt~sq~±appt*sq~±dÿq~$q~$q~$q~$sq~±] t SansSerifq~$q~$q~=sq~±] t SansSerifsq~±dÿÿÿÿsq~±dÿq~$q~$sq~±] t SansSerifsq~±dÿsq~±apptiq~=sq~±] t SansSerifq~$tNormalq~=q~=q~=q~=sq~±appq‚Tasq~±dÿÿÿÿsq~±dÿq~$q~$q~=sq~±dÿsq~±] t SansSerifsq~±apptq~=sq~±appt-q~=sq~±appt=q~=sq~±appt+q~ q~=sq~±appt$sq~±] t SansSerifq~=sq~±apptTxq~1%q~5q~12q~1‰q~Çq~0÷q~$îq~1÷q~1Êqq~ÈŽq~„Oq~& q~}•q~P!q~0ÿq~Ë[q~Éoqýmq~[÷q~G¶q~åöq~q~ åq ?q€4ãql?q~Úqa+q~Æq~ ±qËpqä§q{q`ñq~2q~Oq€ë$q€ê·q~…8q~„Êq€µq~QqcEq~­Hq=pq 7q€)!q&¨ppppppppsq~ uq~ppppppptStrutsq~=xt 30 June 2003pppppt1.1pq‚T@q~1%pq~libstruts1.2-java-1.2.9/doc/uml/sequence-diagram-action.gif0000644000175000017500000005366210404045242024211 0ustar arnaudarnaud00000000000000GIF89a öóÿÿÿƒ10ƒƒƒƒ, öþÈI«½8ëÍ»ÿ`(Ždižhª®lë¾p,Ïtmßx®ï|ïÿÀ pH,ȤrÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn»ßð¸|N¯Ûïø¼~Ïïûÿ€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡G¤¥¦§¨©ª«¬­®¬*¯²³´µ¯)¶¹º»·(¼¿À¹+ÁÄÅ®,ÆÉÊˤ¸ÌÏÁÎÐÓÔºlfظÙÛhÚ'ßcáàÞȆã$èâÝ‹êeî^ð!ò\ôö]øúXüûåÃÎ±ãæ«‘¿zÙ(øN!9oM¬ âÄ  ª˜±ÄÄ+þ/* ™æã’1ŠlØ1J†/aBébË&óÐ$Hf'Θ5ÏøœÔ£ÍXç,-*"'ž¡ëXÊõƒÓ“JJ*.«ÑBUï•ôJ”QX0WŸœíÖÉÚ m¡¼Õ—É\¸G5º‹¡®[² üÆá«_3§$ ¢€-1Nx†¶P /bŽ›Bî+Yì„Êtó}ÙéáÀÙÆ:ÝWt­?³¾ m6]S7XÃŽ-wÚ¾/¯dl:õ¿Þ¶ïm–<ôdÆÆ-Ÿ>üM^æyËÙ ’mãêße3¯¹oä›Z‰[ÿ8½»æÜ?«¿ý¼`¶ÑûjîšG|ÆóeþÀ}¯…ó€ä 7uÀ­&`qè•ÕÞcæ‘7`b8Î ºÆàƒ ö^‡ qàIÞ•˜ u*2\p¾áœ€ùéç¡}ß5Ãà‡Ršv¥½˜£:Š×žŽ•íØ ’A"wã“Â!i¤5ò&QxNÊ($”±T)à”.6Éd”$:)fmýÅø#–ŠyùåŠ[>Ù#ŒIÖ f“d†©&8š ]„Ï%·'iƒžIÛšdŽ©¤nnbØ_‹IÙ¢™@ª¥…„"zä’}úÙ& T¥8ㄈá™&–›*()\:JœªœB‰dx£ÆZâ¥yÒÖª|²Ú*鬉Yê´J ¬±Œ‚ê8¨þúÚli“z´+‚¹òÙ+´«ÂzkŽQÞ™èŸHÁ©í±ÎŽK"²Äv{í·¿²‰á´ÃÖº®¡Õ¢Ãg±§šû®²ªm«-¶Âbú/½íÞY°÷Ö;0bð¢¸ç¢ i¾¢›+«üökð†åΩ&—èZ«kÆ–)üªÂÖ6¶íÁ±Šœìpö(°Ëu8¬É3wŒëªäê Þ£ “¬1¤²|-i#k`ÄŸlôÈ9&ržOÛFó¿Šn/ÄM{ŒèÅ!;ûñ·9­[™6GaØÒ³ªÞ<ãéyS5]6ÎgâJ5Üî‚›Ò¼ë\ê³Uã‹w‘û-¬/Þà4|³Ý›í4›:ÞòÏþ*¦½ô©;.õ×Çé1ã÷Ú õß>ëvç>JN´¸~z¾™×©ºÜ‰þ:žW{ÍuìB8i¶¼¾:ÛìÄg´L©´Ø{™\>¶†œ ýfóÇ ¾·á…£ŒöÖûåαëÊßã8×}?ýÔMù÷Ö—ìoö®ûøìúÝËùÉ”ß:ýrJô9Ji-~´‘Þýô½ùN` új×·Ï8Nm‹Ûð¸¸ÞÔ. Ûù<2ŽÇ{Õ{ÈìPˆB„qªX¸ •H™Ä€5;'ø´ýytih¥*]Ú]ºÇBâ Q…?cŸ¦l…Ã*²ð‰3âþ‹ÀfB61Š:ãž !—6¹ÜfSÄQ§Îæ>Rˆ®â ©Ú¥»ÌŒÍ‹cŠâHE'X)Qb‹ú"ÖÜ…¸+aJ‹ºÃ…ý5ÇfýQCús£øŒ7Ãp­móc§‚…¹¡‘sî3` Qgǯá1N+[c(y·ÊOA‚›˜(O˜ÇlaR”©d.±ž„)eÙÎø–õ2ÔuŽqÜ W°ãŸûÌÃB¦UœIƒòIä‚f4O5’A#dhÛ„ð´ÎrbOšé¨†/iÎvêè‚ls§¼ÚV¡î²q%ìBåŠÁµ²5³’(fëAÙÃ’ªšeê]ËÊÙlV±‘õë`- ÚÔ’–³Žíi_ûYºþS·»­-W [áÊÖ¸Ç-ìhUþk[@Tõ¬{µqmºUÚŠV®¹},n};ÜØv7¬y]BvÐØèZɳÇá-uÍ+ÝË®½|¥jx•0Þ”¾í5mo™ ×ë*µ¡åor7«Xö&¿oŠæ{½;àÉn,Ëupsÿð\½"8ÁúÅ©zÓ›áýúW°Žðm'ì‡ ‹×À5¼ðLb+ج¾äÝ(„ÜáøÂÄôEq2§ëá7¸0¥åqqCLc!s8±%Ñ1µjœ_#ÛØÇ1ˆK,â-–»õ@K|âÈ^9µNé–C÷éDz¿ÁÞqÿ”üêV×8Ó—Îõ;àxß`ûÏtºc\é÷~0ªñž÷¶W{ã£àwÙw`î»ÜØØ­nÆéPø/žå>¯»ÝïlÃË›ò§BKÓÍw¼ë‘GûãÎlÑKíÒ¶|åAßù­·žõ™6ýéïwµ}^.g'=ÎÕ^{ܯ÷N?:Ô«>zÉG\÷¥'>ÕŸyÍßþï^·°ðÃ>óáËè×O¾êïöçÛþ÷Y¾Øån|šWŸúszúÕßôæcüÿùÑ_~ëþ#òÑîý_ôNà׿_ÿrðvÇOáB¸M[s€å”€ 8 çÓ€ÕO8®À€ø xÈ €— ñ ‚"8‚$X‚&x‚(h‚+‚,Ø‚.ø‚(¨08ƒ4Xƒ1˜6˜ƒ:ƒ,°ƒ>øƒ'Ø@8„DX„œe„H¸ƒ2˜„LØ„4ØN…7ˆƒRX…#¸„V˜…!ˆ…Zh…=Ø…](„`8†?È…d(…fx†j¨ƒ—0x±1”à†¹6‡¢°pè\q¸‡’@‡ÚÖ‡wÈXyHa|¨‡“à‡¡b‡(ˆØY„8ˆ†ˆÐˆu¸ˆä‰…Uˆ(‰@‰h‰þ‡‰å¦‰%¦ˆX žˆ©øu›ØŠ®xŠ“ˆŠ x‰‘XŠ¢˜‰‡ «ˆ³h_·Hk¤ˆ‹œè»(P½èŘcµh‹¿hº(‹ÇèÍøÁ8й‹¦Ú¸ÜØÞøàŽâ8ŽäXŽæxŽè˜Žê¸ŽìØŽîøŽðòèˆÌXöxÄøŒÙ8'7Éwˈ¡×ÈËWmÓHÕèŒØXY|n—¹í@Ãø³€‰9ù‘‰}:±‘uðÊx‘ é!)’ ùŠÖH’Ñ(¹’HGg0ér¨’)9“4i~#/ ”)“ Ù“>Ù’ þŒùPE™FÉ~H)Œ.”D¹“Mù”00Z)ZÙ•\Ù•^)–[É•–gi–X¹–lÙ–n¹j –`9s¹•^I—w™—bI–oÙ—~ù—€é{™—v©—0˜…y–¹˜ŒÙ˜‹‰˜ˆY˜|–jY–d‰–Ž™™š¹™æ¨‰—†©˜À—‰‰‡B©”7VWi•lé™u™¯I˜u)™ i&x©©‘:Y‘ûØš‚Y–µi™i™–—Y™ÂÉq¹ ·‰œ»é‘½¹–ž©›S‰š§É›°ØœOƒ‘œo°œ¸É“LùœXé+€™«'ÓIUiài”ä©@þ@™—W’K9‘íycÐø–ï™ñ)ŸJ™¤‰ŒwŸ™Ÿ1‰î‰ÿ  *Ÿô •ø™ž?‰ `±Ÿ=) º¡Ú¡ú¡ ¢"Ê•Z¢–² žRI¡áy† j¢ó‰™1Z¡,:¡ëéœ Ê7ú3 ¡z”öÇ™Fz¤Hú†»gÿ9¤JI¥R:¥'©}T`žKJ~Tº¥\Ú¥:ð£Ê ‘^:¦dZ¦QÖŸ "¦n€¦AÀ¦m*ž-ú¢ð¦Ý©¦mাh  ê”=:tº¦vz zZ }z¡pjz§ºxŠŒÌ²©´à*}rúމ*¨Yª¨þÜY¤òhMý8¨†º ›šf¥Ê¨¢Z“!©2±£CIªù‰O ¨ ¥)1SFUJ“™Šª§z*Šu~ê©¿ZìÉ«‹*«ª©ÆZ¬íh ¹ªŸ‡ê£Éšˆ±*+ZŸŸz|9ª—ꎽ ¬DZ§µÚo@bs˜ÇãéÚ­¡f/hŸÓ:¬ÎÊ‹õZ¦ÐÊ}Vª¬º¬ãú¯/@$f:°ÿ5«YÆ’»g#"B–“b„´#^Ô°!‚4´´®"”$'$±ñBA§Tµ ÔB±ï‘°$ m•ÚáZ²K&°»H¸Ú²€Ä+¸Z4-Kt"³5ä±»³ñ³ªb³5 ³A;³®¢þ³¶z²*ËŽ³à¨PÍ“´òs®A[<7û8è¯V;vF ´Z‹³B´Y ¶Xûµ^KµE •H µ˜Z®â•dµ°/›µekTû#e‹U˳xK}>˳}K·6k·S»·!»®ûJ¬©š“ü¹P‹“嚯q·[ë·˵:›·!G¹w»³™ëµ•ë¹sË·Þ&¹«ªqºšŠë¸Üª£ÙŠU,Ë"–K¶Së³´+ºr‹¹½Æª¸;ºµû¹=Ë»µ ¼¶ú¸Zšº® «rк§+¯Íµ¥ô8F[µÕËG¾[· ²¦;¼’±Â{½”½»½Ë1)ªl»ã9þ{¯Ìš£‡Û¾ê½ºÚ—iKï+¬„j¿ÏÛ–Q¿ò+­‹«û«­ë¿ۚё¿ßù­ÔЬ¯a¹šùl›»ê›f0Á繜™¬º<ê–œì~m »üËÀ$s‚8¯+ ÃÂk“!ì˜#¼¼Çª¶4à¼>̈æ¿ýÒq¦ÄJŒ­ëºKü¦­z­ò¥-̈øÄXì6œÅ¡È?¾ËFk<ö#gc¾ Æs%(lãÅk$ßÇÅpǵè²Ä«»ž›·4kÇÖû·ir¶a+´Á 4guÅr Q°Å6@Ã2 È‹,x¼f|¼»<¸’,¶Æ{´þ¤{»\« LÂÊkÈMÄŽªÀè™RxL'´+5%¼z+KÀ«Ê™ü6± 1›¼Õ:À{ ÀJÐÄ&²¾Ø*»“»¹”\ɯ||–̽۹¬l¶¾wËIÉš lˆ<ʸ\Êo«ÉCÉ•ËÊ¿›ÉÜ\˺›Êu ¶œüž|¿\ÍLÊF7Û[9~$ËÄÌm,ÆçKÏÛ¯î|Ïa’¼ieÎ<\ºÓÜËì¼ÎœПL¿= ʖʾÁšvü¹Ð.zηÊírÏì¶U<žͧL¯LìÄRÀÈ0€Ò)¯0Ò¯:ÒÛ:íZÍÂmÂ. Í"=Ð00Óô8–#þÔzÒ‰‹¼ ÐÍÐ[êÓY0 0àÔéܘI\ÈeÊÔZÕ.€Õ<-Õ„LÕKmÒf Õ, ÖÐ)©f}Ö¿ÐÕ^m¤V-£7@Öm¹†r=×týk=°±Ñõ ° YMÔ¾\ׂ=ØaHÄýÒ[½¼|°EÊXŠpÃÐ"ÐÖñ‹ØJÑ`Ù…1«ô@™Ê‘mГM®• Ö8ŠÙIÍ6ý§Z¢b=ÚBìË¿|œmÍ=¼Ú]·ž ÔA Û¢ Ø¥M«(ÜÛ¸-Йýã ×—]¤aI£&:¢Ä­Î ÌÛÎ]Ô­ÓÙYÃÙÍ©¨‹  -ÝóiŒ´ý[ÈíÑÊþ­ÛO™ÞÊêÏköÚ*Û]ÓwàÞTÉÝú½º©ÝØ0ÞôÍŠÖÝ­«ÒPÌÞûmlà+•²ÄiÞÅ}¢ÌàyŠà¹ýMáÃåà¦ádÂÞžÞò¸Ø¿Èáw-øâ,.+nܯ{¼-þß=ã6Ž¿¿]X=›0ÚŽ‘&~ãKŒÖËиDÞ ãð­_9š#àãùâB¾¥!.ˆ8²âö•ƒ)—ÅùàtiœXÚä_Ô‰ižZšgþå\Næw æÅùãÊ6R^儇ѹ á¹äiŠê—c)›¡ù™¡Yæ„N›†.™± œ´‰ ‰Žèè,%çR.ãþ ]é Þé·¯‘㇉æµÉã…Nš¢îé¢9›¦>ès£êN˜xÎ5îÛMÀ0MÓ庹Áé¢yè‚®æ•æ¿¡“‰ê~êl^æ˜ÙëÀ 箓¹ÜÞj¯çؽ¹ÎçÐëÊ^š°êÛÞèÆnìsîÅÞê•XÏnØù}áªíÛ訹×Þ¿æç…nèáNêv9ì‰~ïn˜Œèü.¾Ò…íïb.‚±‘®çÉÌ:¶ñ®ä}®è¥ ì^~ìÇ9ìo–{ù뤛ÁþçâîæÌÞìLäTœðÚíám®‰xÄKérDzÿ¯{‡-ͨ-þ,Þý0÷°ðêÎ[”Ïkœ±dŒ6Kôö\·D’ô~[ÆoÔ/•¨'_ÝöýÐ=O‹µ¾î;=ð Ω|ÌÇ\¼´cöÚ,Èä<´ K¼Vó¿ †âï½ó\ßõI.í.ö‘Lß²›Ì¹Ã¼“¬ÇãìÇ ×Íh¼Ù…åR,ô@o*ÿÀz?à‘¯Á~/³3RøËìÊHC±rKËŒÍPt1³‚[ókt_Èé>å7.ñø¡ËàöȃøÄ¼c¸ß·øLéŽåøó»Ä¯ûÆ/û—ü³µoøœÌ£ÿ÷ÛLöÙìö¤ïߌí)^ðÆ¿ý–%¹€ û±õ,Dâøàþ«ÏJ¿ùßÏ?ê2³ld/KÂ/÷P;ùÜÿ©ç®Ÿ€Vó¿ÀÖjù䤳”šõæÝ/G²4O4S¶ußs…gº†e;oñ—×`p'ú$Æ R¸Œ1Oeêò¤V¢U,4»Å^¹_|—ÍP1¼‹ÏÅwœãþ\0ò5^¯Ú÷Gt??À@6BÃÀ´¤¶Ã AG8»»ÈKKHÌ-ÍͯNGPÏÑ™DµFQRŠUV”ΩWØÙ>×ZTܽ[A]ß0ż$ÕߦbɺÊcÞåçOè²æ]ikæà\Æë¹îR»ïêñ?s§rtrhÈ«€øÖ[%ûxùwõÒþl›Tvë&ðs†Dœ@o—T€aÃíZ+t¤ƒŒ®ì%´È,¢C<¦Uœ§ða1² n[‰¬%¸—ÂŽ¹s˜ñã@óœx$¾ŽF€ZÜY“'½£C&-:ÔiÇ8"eö,‰ðä¯*c’Ü ³«‹« ÂÙGô&ÏŸ¢…º4©Ï p{¦«Ön]šQýÕX{QìW ¿á#\Øðaĉ/fÜØñcÈ‘%O¦|øÕX«oÚäªMŸ Ù.ÝøÖôæÏ¡wzv;º­©Ú† ‘’@̵3åÖÝûUÎVîºJ¸îëšt]w.8NÖyßÄþÇ•£osZqc™“ûþ÷HÒƒ?7ͼµsóËS“Î9hég¨óµ^¼/í+yß×ãœÿÿé: µÓX+¯-ó”-½‘;/ªäÛ‹†¾®ðÁ¶ÚïBùÎâðÃ,hjj¥” ÍŠÕà#Q=Õ’(q56šJñ¸é&ôJ8Ú¶['CbÆÙD²" H¿ Êq!I’,Ép¯*ÇÉï‰ì&½!­|r&(Óù‘¯/Chò™--D'L*¦¤¥J+«(Þ Ò#*|@sM-Ûä2O[Æ˾Ù2[†Ç?ÙŒ¨´tœäN}ª*<>õD)Ò]ü¼¤L@ûå6Ù®®¬ä˜ò NdÕ)½û)/;ÑþZÕ»¸TÝG¨T[-uÖC% Ô\{ ”F5[&XJ“°”… 3õ5)4‡¹öF‹Î?º¦=.#låBÅõ4ê[o T®¸kËÂ%%Ò–bÓ…Øv:–Lë5t“fGº7Ú»øe°ÛæÖ{ð5U4—¸„ 4×Ö¹†¸Kuû‹^}ã•ð”êìø^Ge‚âD¡WÚ€Ù3nàpùuK§§PÞŒÔäÂ=¸D‘¦ÇÄ"Í iba-žf^<7zÙC<Öb_‡I>ØföJxeY,øW—~oá¤å„X±êÙg&1¦OãuŸ-Z.ºF’`¥½UøÜªýWÈ©¥ž›m¸þ¡Ž›ÜeÎùïÛU{l°Ç˜ÏY²£6£çÔïY¾;'\¦Ùò¤I›1fÌ{EÊï”7—'ô›™yŒ]Á¿.œ )ú¬AvhŸ½Û¡]öØ'á´vrÏ`wÜ‹—&· ý³xðÕ‡m>ìŠ_oKø¨Áz°ÇƒxàM0Z{àµ?{ãUÿ-Dæ‡ûùb+sÿ}øã—~ÊZ7!Ù-m=÷Þkï]ÿþ…Oàÿú·?°€ ÿÆ÷pÜ㸻"Ð ä_÷ÈAjP€”`x Ђ4û¬q8R* 3¤a mxCæP‡;äaþ}øC QˆAŒ^Ù~UA J°{ôŸ1èD.1Š„bWˆÀý‰ðƒR¬b»8 0QŒJ´â¹(Æ$6‘‹gœb‘Ø‹Ä~qÐíxG<æQ{äã ‹¨¸#Œ]œb!­èÁ(2Œ^<$àYE6"x”`¢$#¹FF¦“$¨÷FIVRbtœÉÖ>RF0ø $3ÉÉE„‹Ô '˜Å#=r“—@À¨Ë,ŠDá0 iKM 3‘¸<¤ð‚ ÇTú†ÓàY4a³JeÁ.–¡”¥EIÈnV{Á, 3—¹MM²‘ç\#;Np"RÉD§8•þdM]L³…©Ãç>»ÂJ=QÐð¼$(ZÏ]:ÒǼÀ;zÐM¾s Í)Õ«Æmu‹éáÉØÀµ5™X’MO…Oµpe_\ﮃחº5×r×]qÿœõã¶z^`+zëµ´‘Eã@g›³Ï†È°¯m틲Úàömwš­hµÄÛô:u©WL¥´½›Û²_ޱq“›ÞÌþµ³ªnÊ»Í@SGÙ-pƒåÞ„c²¾¿Íowk{­¹47ÇLD³T%öroA¬^]Õ™8þ»ÈÌŠl™¡U¹ºÉÕ´ky¨:®«÷îYÕ”«Ã“O¯»ÜÁ>„1l×Ϫì´n-ä†\t½ÅVZ /WÊGÌ7•)=´Ø˜y¼³ksòú:â‘ÆÅ¡!®h†YøÈ‡ŠùÏ ä4ÿºÃ!]Ÿ¾·zçXæân8Öï‡m$ëüî¸ÅSÔ²²«—m.àA÷ ë™ÍKÛÛ|Ñ^žÅ7òs§vÝížuœŸ»Æ|‡¶¿ëÑð:Îëã×îß·™ÝñŒz;L⪷:ß—çOΣ-oÚ‹'½fO<êÏÎz¤“¹jlÿ=ðó¶^Þÿaá´g~ç+}{#6_R‡ÑÙ_ÔûUþßsÚZùȹ:þL÷Ü‚¹õZ–‚iŸòÒg?‡lïyË6_ﯣÂÚ~üëæýèŽ?óçƒý…ãš¶ü+@Ü‹6¯{²y{0è3ÀX¾LË“ÿ’ Ä·çƒ?ž 8t@T€Àv«9”8aÓ¼ L7çÛ¼ü´5Ë Á d¸è‹ÁIá¼nÓÀ|ÀØ ‘ãÀ\¶ ä¿ lÀ¼A YAúK¶ìÁ5ì:­ÊŠC9œC:¬C;"*DB+TÃ<7ì;8¼CADB,DþCÄ¡<”@"ÔÂ#Ì»(dÄFÔ?„È,¤Àt@H|¸DÁ;AßÈÄò¢Ä%üP¤9)|ÃM,Áþ;E…0/V|EVÜ?N4AXlQ¬E\,@YTÅ ÌE_üE`lÃ~£Å®ZEuèÃ`ì†[LFfƯ“Átq;hä¹cüCOì t°ÓC4ÄD>´Æ˜ã>–;»0•\Á8^)?dDîÐ;WÄ.E¼:otµ­5:2¨ËGú’: ËBZ»u[FÙÓ’R´º=¤ÇT´1¥a¯Ö³•¨s:Zü ðÀ4„G‚¼D,Ƚ«Ç{¼~ÜÇ<¹‹™Ò«Ç(iÇŽA`©ÂnÌÈoäþ¼‡;¢ó*ß+›u¼FI$„Š ndÉ4DÈi¬X1²#ã½l¡/ˆ\EÌÉ>ØIUêI¨tI ôÇ29J£Ièú ÑÊÀª³›¬Á‰lJ•ÌŸŒJ]|Éœ¸´;µ—8-Ì-§ÜÓþ?RQ7ÝÏ3íE åÑoàÍÁÌÓÚ›PC…SÈtÑ-†(eÃGuÔ Ôç´QªäR5Ý”ÝH6ÝTHm?N5¢>5’ Õ,mT<%TýDÕC5ÌùœSV`TÔÔúäÕËKÕ‘šT9 UO¸TÌ‹Õ2uÏ7UPaõÓ}V õÕLÕRC¨RjEÎQ½VmÝVkÝÖxUo ×'íVqµOc-WtMrMW8Wv}×ÿÖåjVV]S\EÖh-TZ•ÔͤT-wT•V]Q~]Ëz½W.×0ÓW‘WœGfí×aUÔ/`XtØx=UöƒØu½·zJ{­‚€M|mÓYíØZ=þÀ Y®éÕ (Ù$Xb=Ù}Ø­‰ ¦*' º *±²Ø˜•Yƒ,Õ‡åX=]Ù²&4ê¦'R#—Õ5#ÅV¢ Úö´Ùd=HœU(dB¨‡J$SœÚ¨Ú•JÙUÖHÝZA#¤"(Ÿ²ÈšÛ«[£MÚƒåZC&¯}Û%‹Û Û—ÕØi5[xEÐOUÍ]êZ§[ÚÃØÂ}\ÈMMÝ m¢ÜÅ*}ÓUÈÝ\Îý7dŒÚWÜÎ]j•\Ò=]ÔXµES…†ÿ<Ö ]L€ØQDÙº•?¥mB弓ÏsÜ[¥Y¡½]ÿË]LMS×4ßàMXá•[º•صKPþM^B+4ŽÝwA[Så^•½Ûì¹2ñ_ò-_ó=_ôM_õ½²ë}1.+Œ°Œ/ÅÚ³Üâ_ÖMTg4-c¦UÍKÂ-XûÍ=ã]ÊÝ_åµÿ=̆Ùè%Ïé5à-ÈÞ}ÝíTYUÝþÕžào°`ÚœßÎÚ ¶;ÝÂÞÌM ­ÞÎ×ƺF¶ôTDõR%Þ£M]“¥ÞX¤WþáÑýØe]a .âÍâ´%b#^âwEâ›Ub&ŽbŠáfavlQ}^ná$¦a VáfÙÍaúµ]éõâF^Í_Îàö^»]ÝvÂ?¥]îÞ2Æcì`0öbþ1¾Ë7Îc2ÞcücgÄ`Ýe`nÕE6a>Îb?žF+d.vcFcÞHNäva nd~äIîT6žEAfd-7*îRS^cC>àO¦dP¶¹UÒve[íd3¶äJ–â›»`)Lc_æ,ub\N¸ @d“abnft5æó")ؽS µcg¾æ‚æ\, ƒ¹Ž£rì–Œ»Jaµfl>g©ÅIaÖ_vÈÊ©#=û"­xVº´´cs>ÃX>eG.ä\n]Ú@>ÔÛ8±“Æ”)gè•e„ÖçPæç?Î'ôÈ…I÷Ç‚¦X{†ãÁe‡«e`ÖåÞû°ä#¾Ñ«èz>h^öþäT¶6ŽæanT®ŒèôÚ=¾êœ’Þâ„&aÖ·•þbHî«ìfv ›•8½èFe…¦eQ¾å+.eÝeœNiiÛéuvè:6é©>é›bL¦XgíãWk”æj³þ^9îgvÆÉ†nå|Þê^Žã¾j:†Ö;vê®–ê·FgXeiq]e£k¾lÎÌÌå½_„%lÅþÌ÷;l´†âÅŽì&µ,+»Îñª2Ë.*éÜN)ËìêlÎÖÎì´ÎÐ&íÑÆNbíÔ&§î”l×.ku&ÇVc›þS=Þë¼~â¯î’Ù>d¿µíAÆí³–ëÝîDöíáým¸†má~ìâÆb²þÞdDfn½ÎmçÆeÁÞ^¥Öjê¾mªì¦niåžîêöî¥ÞèðVäñãáÎèï.6«ÎdÚî§Žk÷>oNo®oî.ïà~ï[‹o°vÞä.ðæ®ßfj†–dïoéöoÏitÖæ×®p ŸËì¾p ßðïhÿpë q·pOlMvðcnoNpô^pNöçÚ¶kó^në&nì–o§o¶fq>pÜ…ñãÝq_q¯q Gì¹Öñµ.rþ¾ñû¶o%n¨Öî‘5p(oq Weýãwò(ïî#¿nþqR¸çïé$ÿñ,'`!¿ëÝUXïp§óÍñóþõ~p$‡p?ŸrÿoDOõKnuènð‡uYs1Çñ2gr¬¾ò9_õ>ŸuOë¶Fîa/ôQöf_hdgp=ÇrTÇ 2¼vlÏölÿr2í<ŸôjWs]G5˜Ùo7ö4v9Ïõ'¯j8wVÿõoôqçövïwõngöG«C¯÷QÆ÷|W÷WôMxN‹ƒŸô~_ø€‡ïdwxhbe‰¿×((ÆdÖiV»!3ÅB4'l ïþYÛl§Š·òÏêE…·F:ÀxWß¹ ùü.uð"ñÁ\«e÷XcºŠ3¬üÒh¬o¹¹ªYA³pD•p†¼QÁ³:z&ü4‚?c[”¥¢\,&úY¸¥öOï{$J~ô+kiz Û0ÔâÉ“g}ì±Ñz¶‚”yXæw7|Zoz$ob¤¢Ýs#GŘd/‘é±[­šD<Ž G§)ÆÖ#›R”ûèïŽV\’·zêúeuø<<~¼Âë1ø˜<’üHÍW.õp¼ÈK¿°ó눿'­]rŠc[¦mÙ¶ý¦½÷z„oé¿'²4;²ƒçu™I†1.²{é þêLt|\§û×þÏ[ç_¨u [ï{@„Ð~ì/|‡;ÿ±¾˜Fá&×íª¯»¯(A‚ÚÊÍùpøê÷*ð>Ô¯œ ×ÊøGúlAý¨ùùß+ê› I„:ÃÌšÖî?¶‰#Yš'*†)Ûº/Ë3}®5žëÔx“þd0 %Â"qˆÔ‰Fep7J«ÖõªÝþ¸Þo& “ËW±Y‹N³ÛnÓú-ÏÆy¥¥\ß³ê|¾ßŸ[ `¡¡L€À¡á¢ãcd ÕždLc&×&ç–ç§T¨hé[¢¢i ©jk«ëjOell-ÌméÑop ªðp1ròଲó3äÁ%ôþœ5ö¨@jv·÷÷e38y¹”ôtú%¦9cûûÏ6ü<=½8\}¾~Pzõ¾\ßhð ®{wÖ1lèð!Ĉ'R¬hñ"ÆŒ7rìè‘¢¿ÿ„€(y ™§)Çt‡O*ÒÕ²˜ÂHkj¸MäÈ&1KøôµKCqŠJ`ÚTž3§<•ÌÉlçÔ¦àІÖÀTZ¸0V+²bÕ6-kö¬[@ÎÊ CwÞ¸ÚÒ¡[W«^·c×ÚQÉÁîÐUP•IÍú§±+«*æAƹu@D ŽiøpáÏ…ÑŠöA–ô…ž¥I¯öŒvôdÐxÛ¢f]»ìiØqsþKVÙñ5ÎW7ÃûÌø^²Æ›º¶îç°Ÿ‹i=ûëkëÔ·÷¼ªú÷èà±,ö r›Ã5›K_˽zæûœóÅÍ=ïÞÄøe¯oú­}ãÉ%˜`Þù×߀á}vÝu-ÌdÞyÐÀ—‰düÜ„œÔ‘á#ô%æÚtsu7"wÓYø!ƒ%ÆvhÒµˆ`Š 6ØGy(E(aUëéH‡¦ôɆ¹Xâ‚CŠ7cˆ©›‚0(c‘Æ8å&ÚxcT9ÆöVYýØ!XÍaÇ—]®Õ™l»Ö`~cþE~û½eŠmÚ ™Jz àšäõv%–†µã‰í|ùÉ¡‹9è7Àþõ‹ŸÏ$è“ R!‰†bHÓ¢b6j‹@^ìi–”êi¡ì•c)œ†9Ÿ©8ÕhY¬µ¶º%q¶êÙ«ú°º« V;,±˜ºI,²Žt k²¥Û,´X+]´Õ汬¯ÖR8«¶ÝºŠ«ªÞŠ+j¯ùü:.Ü¢ í¹×ši{›"„­¹¼Öq„|ν@ªkÔº‡´\ªïz30Uó–[T/6S]¨~¨ì¿ œ0£ƒ»ª¼Zrɬ“ͶÛ^ƒ•9Yg%Ï ’y¦Å¦ËwÝå²À¿wq!/³1Ïàè|é·gk¤™Ô½˜[k_M)e”cž3ƒ zØî³Çá ´þký©c?ï,t½D©¤”ÔÊ8b“Š XZÂl¶¢6Çâµµt›1m¿wt® Ÿ]v¿Ö àÑ€›è$Û~úöÊqÿIëÕ{ØýŠÁpóØqÖ}x’ Ž=1ç·}.âxpqÞrÞÉÍkä’{ oåÙLNpæáÚã4m#™vàGžžwŒzæÎ¸çJ­ÞÊìÍ&Þ sí%ß¶S¦š}"/ §‹$£—gBwò½3ZÐâà4ÿ¸0Ë#«>¹=Ã~ùÞ Ë·yì­ãP5ÀöÓî÷±õ[Ã~ã0Üé}0è¿JO\ ¤ê÷@Ò`€™² Ä8= °ü †$þBY¯.&ë]jT6³À8/X »ÝáÁÒ0g"¬aBš&µÔM ióÍý^¸A‚b†D<â$nˆDÂM‡?(`ð’VA!^h‰VÀŸ_Ç?Ëmí`˜ÃBöŠÆC´ý®x½˜_زÈ@ôYM£Ð" ø¼©°"Š|º á¤xF VÑ…-”ÞºfDD¹ñµ‹cÿà=DDIŒ £OÚr3 *vÉA{dž Ù˜¿B‚êcL¤Ï¾èB>MEõ¡“±D4&0…4jØB§7½Ì•o:aÌ„HÊ 2„œìdÆäÊ9ò¤ŽÊ¦æÒ(›ûìðoGkfԘƶOòR“ûå*ƒ9þÌmvc‚d0æ¥Ú4IVÂPxÎ\›ÙR©»Ñý±šÄæ8µ¹KjÊN”[t_»—Ÿ¥H?$Jšàö¹oª¡—‚gÅš7cîq¹Ð¨êT¹»½îp';7èF7”Æí-¾¬[Ì’þV»¬c.x§øÝ!b—¼œb,|ã+ßùÒ·¾ö½/~ó«ßýz ¸6„nz/ÉMê"×½ãÎ6¬à3¸Á~0„#,á S¸Â¾0†3 a’fפ¸eïÅ[ “¸Ä&>1ŠS¬âs¸¼¦—tClà]u´6Þß°\Õ|¸»ŒÙñmmåMì⮎AÛE˜þ¸½N«*ˆüÕd%yÆV®õäåRùD.òL×Ç]ù-™Àc>3B¤Œæ5ó”¡Uf3œa æ8Ó¹œX~só¬/ƒYÏ~.n™³üçA{ùÆ„Fò‹)YOGÊ`˜su» àD““˜\f´·ÀgïJ½”¾ê¢­LæbYÒ1Î1¢m cNo¹Ñ4&µòR}ÛU[ÚÕ¶Î4 L bTOZÕŠn(¦=Œë|Ù±Ãî°¯+íÅ`Û£.еBaíédƒØ¢v­ÐíK‹¹×³þu¤[=j^O`ÓÒ:²·£íæ]ßÛÎÀ¶#„çÊZÝQw *c[IßüŠõ¡YÝcþ|]æ.8»ÅÚ„3¼ñn8ÄÉ}çˆ'üῸĎñ?{ãwÉ·•MUfyù¹>íW;Üû~¹9NYGwÙ,Oæ©ÛÝlh\&ÒîöÊíýas[ÜÏy6_­r› Ö˾öÎktßf¼ê²%89>r¨—¼=ÏêÏÃ^[¬+Pë¡6zÔ91uLZ]éA¿çбZt˜«½ÏŠ;Í™w³“ ‚=ßaÀϽðX{luEö¿]ß÷–AàÉŠ‚Á§€òJF{×xgÝoóãE ¹’Hpmœ úÑ£^(¨O(ÝǽC; ïnÿø&'¾¿G~þõF`ÂïƒÏ{á÷>ò½Ç=ÏiüåƒuỂê}W¯œ>øÒ¯¾ðÏüb|}ûÞǦóµ¿z€¿¯Ö7þ^­¯þïGYùì?øC }éK>úÑÇöË/þõÃöîï?úȧáÜðÝ_öÍ_þAŸþ]ÿ©× tßÙ)žçéãÅŒž]±•ýÝßH‘ŸúµÞéYÞÌaæÚÿåܻ՜‹QÎÕ_“Åž»¥ÀæMà±ÙÞk-žíÀØhi™ ¦t™©èàÚ™ÆÎ%Ãëé ¦`æÝˆ‚B½í¸Å á=:ôà –þ`Ê±àØ `OY› W¨öþ¡¼U` Þ\º\:CŠ®@ Ê^ç-]6Ýä}„ "!¢!""&¢">Pà!I|@”¶Ý$~Þ•%¡Ü-!2ÜaHß=àúáºàb¡&¢a'bÖ'ž!oÁa6U MášmaêÞ+Þ"….B-Êß.þbºa"0žW£1––.cí¡œ26ãsÉ¡ÿ˜"ab+ŠâÕ‘a4¶X"á6vc‚+šc)‚¡ºb6’â7þÉ)a¾c– @ê?ªc(Šþa;B£qdB^"BÎà:b#CjcFJ£Gfâ[Ö£[R"\Ú¤XºdIöã]ò¤ZVä8rdè…å®e:‚e^æ@^à\~¥AºMÄôe5–àbN¦`â%gÅ%EfZ2fKjM(h&æf¦&Myæ#]¡_z’ÌF‘ÈÒðÀ’Òœ øèSnâR²feþV¢8>f>º&DnY€0 ñS_¼Ô:%gµù&fÞ ^žkZ¥ÀÞÛLTð|&;­E™Q,§xN'2òåe¾&TÅÉw¨' H$õ“Ú€§-®àí½åVRx&œDÝGP*MTJ=ç}h YçŸe'"Ž9Òz2“Rå'F(¨Ÿá&€|PqÏ Õ-5NŸÈ§0J¨ˆ^ …Ž(㦉¦(ìA&qÒå`^çhjf]ª&BUçSÂèK²Z¢æŒöhš'“¡ç ¤eÊè‹¶egé'Tq©]ffŽÎdpš% ¢ÑBŽjd‘F)aÚgyvåˆ\©‹Š¦bv$:)þ®–’NŸÞUb±©a)ÖßÁ)bAÄ ¼)ž¶•œÆ)¶i^éiŸ~  æ©›ª¡êCÐ×xö!Mî%˜~…˜Ž©‘"&}.j}Ré@ M¤¶Qšâ¨t2ê”^d•jP/b)š䥂ª—’–%¥i t>U¨ª(᦭檮®$„þªf•(°+±.‘°+²&+Pžå–†æ¤&yJéª~V«ö*ªr)5Vꧦ*¯Ž*Š )Üa«´n«¥Öä£i“’)‘ª*¹¶+u®éâÍj³¾ª=N«¬V!‹f%¸fk¬–%»:&¦æ«TJ¦¸f¹Ö+Hš+³žgº>뵺«¿rþ«Âz+”:kÁ®«¶þ«Ä:ꢫ¤^¬ŽB츬¨fê·6,ÈÊ£Èvi´*«\¶¨ËƬÌ*ÜάÍÞ¬·+Îî,ÏZêiö,Э Ù ®>ì™Òë½¶lÒZ"Lþ,§f©§j¬B&,ÇR¬™¦’ìÊ6æÆ¾ë¹šÊþ%9nmÖ²lÉ ìÉ~¬Øj­Ô"l£zmÇ‚­Ú-´’lÆví—ÆíÐb-g²íÝNíÛæ­ÕÆ(Á®-Æ.Þ"®p¬ÓæÞ©–iâšmäzVµÎ§ÑöëØ¶íÒÖêÄšlÅšªº†¬æFìÁެΠ-ê¦.¼ª.ë¶n«5®ëÆ®ìZ,ìήíšhå†(äþ¦,Ò’®ÛrnÕzîÕ>íãêäèŽìä&é×î-ñ†®Ê¯ä–®à /áZ¬áŠîßþ®½*¯ÞÆkÙb¯â’-òv.Ú~.ßvj­IïøŠofåîº=/æúmøBïæ.nÓ¬õÒíåÎoöÒ/÷/Ô¦/ûðõR–ûíîpï®oý*íÿRo¡0©  ` ;°ïmªW Þúa°Ç‚¯öð÷«.’p¿ À ï_X0 Çðó5`ßñŸ ß.Oïûf_›1n CŽ ö¡ÿž Òßù=1úñžï j+Á÷0ãßùŸ þþ›jŸë) àþ¥1w`Wñ'`§ýßv±Ÿ-®.`“1w  øqÃñ ßq!ÿ×ñ" ¯ñïðO².ï  »ñü ^!Ÿràõe2"?²aÑñ&Óð'o²#o±ùîï û¯ûðpÊG'ò'w²ýÖœ–r 2|ð"Ÿ+“ñ-2 ÿq$ãoGo,'o°®î3$# &Ï!S³äaÀ—ò,³6ƒ3úy &ó#¿òË2ú2°S%03›³˱kð.»>ï[3]°[©•#Ïs=»± ñð5rÚšð«3×’þo-Œ$‹Â×ÂòrômC?³úR«4Ó3N4Eó‡F§°ó–4wtÝ:l:÷¯ïÒC©2s;«4,ó+¬j4NÃ4fÄôðþ¨%+tæêïI³´5p"Ÿ¢³šþ4üÞt¸2tñB'úCâëC/Ä"^5VgµVo5WwµW5X‡µX5Y—µF4b*€¢îìéR²[“ATw…Ël[¿µ]sQ«¢L«h]ßµ_W-R°åÎl_ÿµaãOë.G+u3uPó/dÏ2óª‘;×îv¡tc›4QÛ´¼îëîZ61>5;õPGag‡­Ž‚6òhvM¿´káiÏ­<ªöf­óÖþm/fG]lnjïµã–vKGöB÷¼Reûö5Ù6ÑntF;s ÿÒqë+jÇïáæôkÇãnçïl#÷3ðmCpn›v·Jpq7ïf¶KK6vwùötr{÷r£0p7õsçja6~³ÝÀêê}ç·PBówÍþ7?–tûj¸‚¯hõrRtï7èž÷“Ú­p7·ÜÆc¯4ïj¸|Kxugw„3.w_¶r›!x—8½‚¸“7ÃÊ6SÛ4q[7l³wU#uw‹ö„C3Šsx‹cx÷:vuÓw…«÷ª¸y‹øó6u¹…9­uð¶wƒ¯ø|Gmz;÷•S.M·¿¸“‡7þŽ÷–ï’/µŒcù/ö›9Œ·ù—ïøcö€/8×¹ޏç9%'¸ž÷¹[ó¹Ÿz…޹•{¹üžy“#zKy9;·ö›Ã·¡·/¡£÷¤39k?z˜»Ñƒxˆk:™§y¢Ç8Üpyÿ¶‡Ç7i§ú¥§t†Cz»9šÏ:©Ó2’C8•³º–®ú†Kzuº“¸¯“$¯ƒº®;å«s¹¬Çz¤oz«7_¥çx¯+ûuzµ/z»÷W¹¥+:˜s»}Ϲ û]:¹Ÿ»ëš;º¯;êª;»¿;ߺ§çú´‡º·Ãù¡«¹©÷¸v?;gy¦ƒ»˜'»½/;¦{™#þ0{~óBA7`A„ò鋟úr›–s¾þì³S_=ϳ>ž»|ÊS¶J *ã1.C1/µ2Osà]²í±ð‡³äÿ(G²97¿+5×_ð¿7û³7Oÿ5Ûqã=ÕŠü½WÜãJ6£2?›6ß°0«ñr7¿6û2òë2#ëò0_fìý¿?€(ÒÖz±î—ËD¤MÕ•mÝŽeôœíÏõ¶Þý¤ ‰Eã)ë%™É¥æ©Z–,+õ#’\±Úéª WÇ“©u“îdGÜ‘˜Œ^ƒIêyîÇ©õ{/‹N-„mËïN®Kð"ª)R2rÒòÒSsŠÓóô¥24´r´³ÐήOU/dþpÖ‹ñ0 ’6ÏÏmÅwvU7om8¸8QX…U£6w¹8Ú9“ÔºèôZ&{Û[ô;\\¨{œÉ<Õ¸W¹§ÏÚŒYýPþ ß~ ‘ØÄ=díª¬øª^À~Ͳ)gnÜCˆÛ$NüVÑbÆ‹/¡s1Å˘8ù9ã÷î=9dnµp´JdÌ|„þ¬LQÂ&…ÀfÅ2Ó'5–)éкQΚir]”Èè#Ž1NåTÕê'¬Y¹vìzNJ:=__ÌûZk/¡[÷qR{„-YIqå"¡[,^½W÷’ ûÑdß}fÏJK{SäÝcšÞQ,8ÈcÈ:$OöQÙrfþTšoxäÁù3h ˜9“Ö+²³h¯ª5™fývµ!€c×¶};ÜáöýxpØžY¸~¹mÝ»™Jþzté¥þ†ž~{ðå̹ïî|xñãe{( }zõëÙ·wÿ~|ùóé×·~ýûù÷÷?¿»¹»"€ <ð@ò\ð7ãÈ"n-’°/ +„n;y£ 5óÐ6œDDªª+· OE2ôî»ò"±EÖjÑ®ç <1¶³òñG a´)…iÄE$å2"|IÁ‹RÔ¬KrA*-ÓRɸ¤èÉÙBœ’E%dðKÁÒì2µäv,þ2E2åÄñÌ,ÙóN«Ö´æM<{œ»=ƒ¤ÍÎ<+ÔPBëÓ¼8³C4H¥¼’Òe{åyØ™Ʋ¶˜s4j޵%éHœ¾Œæ1‡V¹e +Æôê¯O^zÆšçmRêjáÍAk@0Ú6–;ç­ï ûåà6Æ»h¥ÑÆšìNŸ°ðí¸Õp¯óf“ïªÅÙÛñO(Ü„‹µüPÌ ¬üò%6ÏdòUÍ}sÎ)—úóÊß¶|pÙRŸÜsÍeïŠÒC¯{ôÈuß=߬ynõjzžãá…žrãIçñôä›wúâW}~yé·^óèKï;÷ß½ÿþÈÁ÷MùÓG"yÑ©¥íóµ7·üÙZ·~3ô¯wõ™.{üþýÇD|ÿÓUólwþ¾Ï™/¤; ÿb·Àû­îuLý^gÀìM°| š âD'@ÏgÛBœ¢¶‰øM~)Ä  ë×Aåµ0§H*ìCÎ~Ýã áJ(³¶il"¢j™HÝ~3¼à )½Ü½Ðyï{àýlˆ¼ë-qŠUä.ˆä_ÓzØ*v™+ñˆF'ÊhxÛc]æl'Ç:*PŽtL£é8W½6V\˜Å¾¨„Šqm[*ããz–8j\‹SX!mPÄJúNW]üŠˆs£/Er‘b£äý†È1”)«÷4IµQ’2Œ<”%h,ùƒZÚ²kûÙ_ ËþTr–¥I¥Ùˆ¶Ã³¹²—ÆÔÚƒù¡a.³˜º%Ì’)ÈL6óDRÓ3ɸ3V’—Õ”fƒ0™ZróšSã¯Â)NIž)Fî”gF@9O{‚oc²¨IzL¢ž~òsŸèù§@ªO>4)=¨s ÊÐ…~‡=EhD ÑõHÔ¡ èE+ŠŠ>Ô£iSüÙQ’t¤¯©FÑ6—Þòž1u&0‹O™Þ§9Õ)Ëh*#›î¨Aê/c©ÃSZi›v‹X;sIÍœÂÔ—ØTåRÑIUÆR¦PY=Ï©Ô1Õ›‰Òj)…Àn³•wsªXu:VÅqU˜^…Ž[yzU°þÞ“®ë4*3»ŠVp"³©j}ê!¥JÌ¿úu’‚eë`ɺWS’P®„µëdÓ¼† ®3EìWKÙµÞô²#ÌlfBÕÃ*6±­dõÇ׸nv®wæg‡J¾rÖ·¹ÕíNͺ[ßþ¸Éìmp‰[\ãzo¸ÇUîr™»©¢¶ö±¨ŒlcS[]ÚZ–µì©fÓzZφµ²xÍîh9ÝçöhªÍêx­Y^Øf¼èµ.v©«]×r×»V½nzÃkÏÒ>–¼“ùï7Ë*ÛUª—¾ç 0d¬L¢îw¶¨]o}œÔ÷Ö7¾þ®x)Ü^WJV§„üàÂB3¿œíïW,Ï·þ¶Â2¯‰7á7W/ÉÅñŽyÜcC·™>ò‰¬ßÉIV2ìØ%?Ê¿}±}c¼—)'„?¶ñ|9¬`3Äm±Ç,Î)ëXº>¯†·,ßyžù¶bo<â:»Îۥ땷[`-³Âof/Ý;gÚÎ\öï LÚ0§ÑdŽ´™=NH§8¶N´›]\i½†xÆ~.ó.5gOc̡֛ˆ%Mâ.3Ù¾Ñ Ÿï+êI“zÔQÞˆžuÝk_ÿzIqö°‰]lXñÚØÉVö²M&k'3ÚÑ®Zžï»çGÏšÕì,5¥;Lè«:˹–$§MÝíFþÓðå/¹ÛÜis[Ûà&ç¶q}kឺÏè¦ó¾Ù]oW/úÝŸ–sº1¼n6÷ûÞGµ… iq_»àåö²·S­fX|Ó—8¬E¥Mz¦,;ðxc~A¤$!“ ¹!°r®ÐÚKönõ«m}d—/æ :hÌÍ[2#$#<§øadüpyO³Ä5vypr¤°" *uº ʰ£”$5¨z¬^ˆ®ï$Q 4°>¤b@ìKÉI™¢R··¢.0Ø¿.íw!» ÆðÇÉÑY TçÉL •FäýzoHCzb‚>ÿ°ûä)I¼^ð’—†Ðoò ’¬ƒðþ{ð /È^ú„8Þ0o1|êO? e€¼ò±—=ŒeE‹—ô# ®Ðù>Å`õÛ·žëhç} 0ÏPžDÝ÷@‡ PV|µ'î³—>åÍJv‚¿nàÿùÍ;~ô¨/¾çCOr´`ŸüÎG¿-¢?}÷O‹ÚÎfºæû~ýóÃåOEß|Ó¿ïô„b"óôðBîr`é&Ûª)þl.$NŠ$B*%P¢ðzïí²nùT!tb»šB®(¾ïùÊ.6ÙÎç.Åè,.ã6NéšlþTÃä.ó`ÏvüZŽáènÛWíò<2ÐÀG8ÏU  °žþaéîŒÛ&îܾM09ãì‰ {)—.Öâm ÃMæppH|°Áhµ.ß´°áÔcãE6ä åÐ’Ž õÐÚŽnªí6î°;~ª Žæú°™þƒÑ#Q'‘+Ñ/3Ñ=4D@ä¥à¦î^i mð_k#n}ƒ„C¾Œß kMßíS7î0£H± ‡îýéÈzn lƒ‘O„Í“ñðò”±dÐÌ£‘axQ›«q‰³ðMåàÖ Ç-ÈÎp”F±ÓÑÑѰ¬0ÕÑ) «,Ç Î…ÐâŠÞŠþ 1hâ1C‘I‘h]±èjñâÆ1jôQà` ÷ñ_q ‡ðrá é ·Qí¿Ü‘"ɰ ?h#³°â²á%ÅÐõp²qÆ02Ïñ%ËCRëð"i’ç­Ú²"SRãÒ&¿‘· !—Ò)‘ñ)¥å£’*%’%«2X¦+·’ “’+G*¿’+éQ,0"Ò [²A’3ÒáÞð,ݲG2€)ísR$gñ-Õ² Éq/ýRõ’ ù²(‘-ûR.W2áâò&ƒ'Ò'#Ó+u'c& “1/)³3]3-2Û22þg0 S05’0¯r4³4µÍ4335¿¨$­2&gÅSG>2/C30Oò’!-Ò8AÓ1•²5s-?Ó#‰³,E«)£“:«sY´Ò:³S;;·Ó;¿³ÆÈ<Ç“<ƒóÒº’(7³9U7eÒ WóÝó¬Ò.‡99n:;²>A­ í6',9eS8_s=}ó/Ù“6á3={’Aó99àT4Ò?…’>å³==¨6Ѳ¯2ô/ÔC ô2%Ô<)TDm‹ÞÔ@ï3%Å3ØösàtC+t05”4stE´@ÝDot9ÕÓBññ?‰4;»³<“TI%‡7›´þ2—J£TJ§”J«ÔJ¯«t´A!Ô5ôDOó7C4-itAmÑLwtDÉt>Õ47F»"ÙôCå´.½TK‹3(…t&á”9U46Ñ´FÅ´CétNeTPû4P õ<ïtK‹O'“E•Kõ´LôMU5gtQù”R/uR5LuL¿tOõP;õ=5uT%:ÏôOAKcUVg•VkÕVoWsUWw•W™­•GqÔN9REÑSoST7ÕT“STU•TÛtX›õX‘«Zw’U?ÕUÕM5Z 5[{´X¯U[Cõ[ùóT'²[ÓU2¯Y?2\‡ÔPßµQõYÕþ•XÛÕRïUI’\ƒ´^åu]éU_“`±5_[u_ÙUa ö\c4^Q´?–b{Õb/c3Vc7–c;Öc?dCvPVX©uMçµb6RUVbIa—5eMVCÿÕD#¶R_•[§õ€•_áÕfiödQÖ_{V3¶eÔOÇÕ[¶Ne\uÖhÁÔa™öi]‘VjqÖ\©öjcZÖk£ÖY]¶fYV`¡¶`µvjͶTûµia5ksÖG¶dݶjá6XVd÷–oûÖoÿpWp—p 7y–lË–móömñ6MöhÓV\·Õß„vf‰öeí¶kÁ–kévw×sþVl1÷fÕve­vU·m•6qK×^[W?I7sY7tõ6U·q%÷la¶s!÷w@×wgwtaws9÷r‰÷Ee·ni7x'wkq÷n‡7w¶v]÷q{7uQWYWym×p¿|ÃW|Ç—|Ë×|Ï}Ó×x!V{¿{Û·\©7U‘é7yA´zW×]›Wq5—}yzí—]€÷}Ý7€ù7h×wgv.»·™·€ý·ø€ÿ~u×õ÷y/8r6~åÖtAx#Yø)7iQøt%_9¸„Xzói(Ø……ƒ7z!øxeø~y8U}‡˜ˆ‹Øˆ‰“Xþ‰—˜‰Å—†Y¸…kxwå7ƒg˜cW€7 ˆ¯XˆçÖ„±Ø‡{Ør¥xŠ›ØŒÏÓX×˜ÛØßŽãXŽç˜ŽëØŽïóX÷˜ûØÿY™ Ù‘Y‘™‘Ù‘’#Y’'™’+Ù’/“3Y“7™“;Ù“?”CY”G™”KÙ”O•SY•W™•[Ù•_–cY–g™–kÙ–o—sY—w™—{Ù—˜ƒY˜‡™˜‹Ù˜™“Y™—™™›Ù™Ÿš£Yš§™š«Ù𝛳Y›·™›»Ù›¿œÃYœÇ™œËÙœÏÓY×™ÛÙßžãYžçþ™žëÙžïŸóYŸ÷™ŸûÙŸÿ Z š  Ú ¡Z¡š¡Ú¡¢#Z¢'š¢+Ú¢/£3Z£7š£;Ú£?¤CZ¤Gš¤KÚ¤O¥SZ¥Wš¥[Ú¥_¦cZ¦gš¦kÚ¦o§sZ§wš§{Ú§¨ƒZ¨‡š¨‹Ú¨©“Z©—š©›Ú©Ÿª£Zª§šª«Úª¯«³Z«·š«»Ú«¿¬ÃZ¬Çš¬ËڬϭÓZ­×š­ÛÚ­ß®ãZ®çš®ëÚ®ï¯óZ¯÷š¯ûÚ¯ÿ°[°›° Û°±[±›±Û±²#[²'›²+Û²/³3[³7›³þ;Û³?´C[´G›´KÛ´OµS[µW›µ[Ûµ_¶c[¶g›¶kÛ¶o·s[·w›·{Û·¸ƒ[¸‡›¸‹Û¸¹“[¹—›¹›Û¹Ÿº£[º§›º«Ûº¯»³[»·›»»Û»¿¼Ã[¼Ç›¼ËۼϽÓ[½×›½Û۽߾ã[¾ç›¾ëÛ¾ï¿ó[¿÷›¿ûÛ¿ÿÀ\ÀœÀ ÜÀÁ\ÁœÁÜÁÂ#\Â'œÂ+ÜÂ/Ã3\Ã7œÃ;ÜÃ?ÄC\ÄGœÄKÜÄOÅS\ÅWœÅ[ÜÅ_Æc\ÆgœÆkÜÆoÇs\ÇwœÇ{ÜÇȃ\ȇœÈ‹ÜþÈÉ“\É—œÉ›ÜÉŸÊ£\ʧœÊ«Üʯ˳\Ë·œË»ÜË¿ÌÃ\ÌÇœÌËÜÌÏÍÓ\ÍלÍÛÜÍßÎã\ÎçœÎëÜÎïÏó\Ï÷œÏûÜÏÿÐ]ÐÐ ÝÐÑ]ÑÑÝÑÒ#]Ò'Ò+ÝÒ/Ó3]Ó7Ó;ÝÓ?ÔC]ÔGÔKÝÔOÕS]ÕWÕ[ÝÕ_Öc]ÖgÖkÝÖo×s]×w×{Ý×؃]Ø‡Ø‹ÝØÙ“]Ù—Ù›ÝÙŸÚ£]Ú§Ú«ÝÚ¯Û³]Û·Û»ÝÛ¿ÜÃ]ÜÇÜËÝÜÏÝÓ]Ý×ÝÛÝÝß¾Þã]ÞçÞëÝÞïßó]ß÷ßûÝßÿà^àžà Þàá^ážáÞáâ#^â'žâ+Þâ/ã3^ã7žã;Þã?äC^äGžäKÞäOåS^åWžå[Þå_æc^ægžækÞæoçs^çwžç{Þçèƒ^臞è‹Þèé“^é—žé›ÞéŸê£^ê§žê«Þê¯ë³^ë·žë»Þë¿ìÃ^ìÇžìËÞìÏíÓ^í×Ë#;libstruts1.2-java-1.2.9/doc/userGuide/0000755000175000017500000000000010423130300020147 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/doc/userGuide/building_controller.xml0000644000175000017500000015211210404045204024742 0ustar arnaudarnaud00000000000000 The Struts User Guide - Building Controller Components Craig R. McClanahan Mike Schachter Ted Husted Martin Cooper Ed Burns Donald Ball Eddie Bush Yann Cebron David Graham Tim O'Brien Phil Steitz

            Now that we understand how to construct the Model and View components of your application, it is time to focus on the Controller components. Struts includes a servlet that implements the primary function of mapping a request URI to an Action class. Therefore, your primary responsibilities related to the Controller are:

            • Write an ActionForm class to mediate between the Model and the View. (See also Building an ActionForm).
            • Write an Action class for each logical request that may be received (extend org.apache.struts.action.Action).
            • Configure a ActionMapping (in XML) for each logical request that may be submitted. The XML configuration file is usually named struts-config.xml.

            To deploy your application, you will also need to:

            • Update the web application deployment descriptor file (in XML) for your application to include the necessary Struts components.
            • Add the appropriate Struts components to your application.

            The latter two items are covered in the "Configuring Applications" chapter.

            For those of you familiar with MVC architecture, the ActionServlet represents the C - the controller. The job of the controller is to:

            • process user requests,
            • determine what the user is trying to achieve according to the request,
            • pull data from the model (if necessary) to be given to the appropriate view, and
            • select the proper view to respond to the user.

            The Struts controller delegates most of this grunt work to the Request Processor and Action classes.

            In addition to being the front controller for your application, the ActionServlet instance also is responsible for initialization and clean-up of resources. When the controller initializes, it first loads the application config corresponding to the "config" init-param. It then goes through an enumeration of all init-param elements, looking for those elements who's name starts with config/. For each of these elements, Struts loads the configuration file specified by the value of that init-param, and assigns a "prefix" value to that module's ModuleConfig instance consisting of the piece of the init-param name following "config/". For example, the module prefix specified by the init-param config/foo would be "foo". This is important to know, since this is how the controller determines which module will be given control of processing the request. To access the module foo, you would use a URL like:

            http://localhost:8080/myApp/foo/someAction.do

            For each request made of the controller, the method process(HttpServletRequest, HttpServletResponse) will be called. This method simply determines which module should service the request and then invokes that module's RequestProcessor's process method, passing the same request and response.

            The RequestProcessor is where the majority of the core processing occurs for each request. Let's take a look at the helper functions the process method invokes in-turn:

            processPath Determine the path that invoked us. This will be used later to retrieve an ActionMapping.
            processLocale Select a locale for this request, if one hasn't already been selected, and place it in the request.
            processContent Set the default content type (with optional character encoding) for all responses if requested.
            processNoCache If appropriate, set the following response headers: "Pragma", "Cache-Control", and "Expires".
            processPreprocess This is one of the "hooks" the RequestProcessor makes available for subclasses to override. The default implementation simply returns true. If you subclass RequestProcessor and override processPreprocess you should either return true (indicating process should continue processing the request) or false (indicating you have handled the request and the process should return)
            processMapping Determine the ActionMapping associated with this path.
            processRoles If the mapping has a role associated with it, ensure the requesting user is has the specified role. If they do not, raise an error and stop processing of the request.
            processActionForm Instantiate (if necessary) the ActionForm associated with this mapping (if any) and place it into the appropriate scope.
            processPopulate Populate the ActionForm associated with this request, if any.
            processValidate Perform validation (if requested) on the ActionForm associated with this request (if any).
            processForward If this mapping represents a forward, forward to the path specified by the mapping.
            processInclude If this mapping represents an include, include the result of invoking the path in this request.
            processActionCreate Instantiate an instance of the class specified by the current ActionMapping (if necessary).
            processActionPerform This is the point at which your action's perform or execute method will be called.
            processForwardConfig Finally, the process method of the RequestProcessor takes the ActionForward returned by your Action class, and uses to select the next resource (if any). Most often the ActionForward leads to the presentation page that renders the response.

            An ActionForm represents an HTML form that the user interacts with over one or more pages. You will provide properties to hold the state of the form with getters and setters to access them. ActionForms can be stored in either the session (default) or request scopes. If they're in the session it's important to implement the form's reset method to initialize the form before each use. Struts sets the ActionForm's properties from the request parameters and sends the validated form to the appropriate Action's execute method.

            When you code your ActionForm beans, keep the following principles in mind:

            • The ActionForm class itself requires no specific methods to be implemented. It is used to identify the role these particular beans play in the overall architecture. Typically, an ActionForm bean will have only property getter and property setter methods, with no business logic.
            • The ActionForm object also offers a standard validation mechanism. If you override a "stub" method, and provide error messages in the standard application resource, Struts will automatically validate the input from the form (using your method). See "Automatic Form Validation" for details. Of course, you can also ignore the ActionForm validation and provide your own in the Action object.
            • Define a property (with associated getXxx and setXxx methods) for each field that is present in the form. The field name and property name must match according to the usual JavaBeans conventions (see the Javadoc for the java.beans.Introspector class for a start on information about this). For example, an input field named username will cause the setUsername method to be called.
            • Buttons and other controls on your form can also be defined as properties. This can help determine which button or control was selected when the form was submitted. Remember, the ActionForm is meant to represent your data-entry form, not just the data beans.
            • Think of your ActionForm beans as a firewall between HTTP and the Action. Use the validate method to ensure all required properties are present, and that they contain reasonable values. An ActionForm that fails validation will not even be presented to the Action for handling.
            • You may also place a bean instance on your form, and use nested property references. For example, you might have a "customer" bean on your ActionForm, and then refer to the property "customer.name" in your presentation page. This would correspond to the methods customer.getName() and customer.setName(string Name) on your customer bean. See the Tag Library Developer Guides for more about using nested syntax with the Struts JSP tags.
            • Caution: If you nest an existing bean instance on your form, think about the properties it exposes. Any public property on an ActionForm that accepts a single String value can be set with a query string. It may be useful to place beans that can affect the business state inside a thin "wrapper" that exposes only the properties required. This wrapper can also provide a filter to be sure runtime properties are not set to inappropriate values.

            Maintaining a separate concrete ActionForm class for each form in your Struts application is time-consuming. It is particularly frustrating when all the ActionForm does is gather and validate simple properties that are passed along to a business JavaBean.

            This bottleneck can be alleviated through the use of DynaActionForm classes. Instead of creating a new ActionForm subclass and new get/set methods for each of your bean's properties, you can list its properties, type, and defaults in the Struts configuration file.

            For example, add the following to struts-config.xml for a UserForm bean that stores a user's given and family names:

            
                
                
            
            ]]>

            The types supported by DynaActionForm include:

            • java.math.BigDecimal
            • java.math.BigInteger
            • boolean and java.lang.Boolean
            • byte and java.lang.Byte
            • char and java.lang.Character
            • java.lang.Class
            • double and java.lang.Double
            • float and java.lang.Float
            • int and java.lang.Integer
            • long and java.lang.Long
            • short and java.lang.Short
            • java.lang.String
            • java.sql.Date
            • java.sql.Time
            • java.sql.Timestamp

            You may also specify Arrays of these types (e.g. String[]). You may also specify a concrete implementation of the Map Interface, such as java.util.HashMap, or a List implementation, such as java.util.ArrayList.

            If you do not supply an initial attribute, numbers will be initialized to 0 and objects to null.

            In JSP pages using the original Struts custom tags, attributes of DynaActionForm objects can be referenced just like ordinary ActionForm objects. Wherever a Struts tag refers to a "property", the tags will automatically use the DynaActionForm properties just like those of a conventional JavaBean. You can even expose DynaActionForm properties using bean:define. (Although, tou can't use bean:define to instantiate a DynaActionForm, since it needs to be setup with the appropriate dyna-properties).

            If you are using the Struts JSTL EL taglib, the references are different, however. Only properties of ordinary ActionForm objects can be directly accessed through the JSTL expression language syntax. The DynaActionForm properties must be accessed through a slightly different syntax. The JSTL EL syntax for referencing a property of an ActionForm goes like this:

            ${formbean.prop}

            The syntax for referencing a property of a DynaActionForm would be:

            ${dynabean.map.prop}

            The map property is a property of DynaActionForm which represents the HashMap containing the DynaActionForm properties.

            DynaActionForms are meant as an easy solution to a common problem: Your ActionForms use simple properties and standard validations, and you just pass these properties over to another JavaBean (say using BeanUtils.copyProperties(myBusinessBean,form)).

            DynaActionForms are not a drop-in replacement for ActionForms. If you need to access ActionForm properties in your Action, you will need to use the map-style accessor, like myForm.get("name"). If you actively use the ActionForm object in your Action, then you may want to use conventional ActionForms instead.

            DynaActionForms cannot be instantiated using a no-argument constructor. In order to simulate the extra properties, there is a lot of machinery involved in their construction. You must rely on Struts to instantiate a DynaActionForm for you, via the ActionMapping.

            If need be, you can extend the DynaActionForm to add custom validate and reset methods you might need. Simply specify your subclass in the struts-config instead. However, you cannot mix conventional properties and DynaProperties. A conventional getter or setter on a DynaActionForm won't be found by the reflection utilities.

            To use DynaActionForms with the Struts Validator, specify org.apache.struts.validator.ValidatorActionForm (or your subclass) as the form-bean class.

            And, of course, while the DynaActionForm may support various binary types, properties used with the html:text tag should still be String properties.

            DynaActionForms relieve developers of maintaining simple ActionForms. For even less maintenance, try Niall Pemberton's LazyActionForm.

            The DynaActionForm classes offer the ability to create ActionForm beans at initialization time, based on a list of properties enumerated in the Struts configuration file. However, many HTML forms are generated dynamically at request time. Since the properties of these forms' ActionForm beans are not all known ahead of time, we need a new approach.

            Struts allows you to make one or more of your ActionForm's properties' values a Map instead of a traditional atomic object. You can then store the data from your form's dynamic fields in that Map. Here is an example of a map-backed ActionForm class:

            In its corresponding JSP page, you can access objects stored in the values map using a special notation: mapname(keyname). The parentheses in the bean property name indicate that:

            • The bean property named mapname is indexed using Strings (probably backed by a Map), and that
            • Struts should look for get/set methods that take a String key parameter to find the correct sub-property value. Struts will, of course, use the keyname value from the parentheses when it calls the get/set methods.

            Here is a simple example:

            ]]>

            This will call the getValue method on FooForm with a key value of "foo" to find the property value. To create a form with dynamic field names, you could do the following:

            
            		
            		
            <% } %> ]]>

            Note that there is nothing special about the name value. Your map-backed property could instead be named property, thingy, or any other bean property name you prefer. You can even have multiple map-backed properties on the same bean.

            In addition to map-backed properties, you can also create list-backed properties. You do so by creating indexed get/set methods on your bean:

            In your presentation pages, you access individual entries in a list-backed property by using a different special notation: listname[index]. The braces in the bean property name indicate that the bean property named listname is indexed (probably backed by a List), and that Struts should look for get/set methods that take an index parameter in order to find the correct sub-property value.

            While map-backed ActionForms provide you with more flexibility, they do not support the same range of syntax available to conventional or DynaActionForms. You might have difficulty referencing indexed or mapped properties using a map-backed ActionForm. The validwhen validator (since Struts 1.2.1) also does not support map-backed ActionForms.

            The Action class defines two methods that could be executed depending on your servlet environment:

            public ActionForward execute(ActionMapping mapping,
                                 ActionForm form,
                                 ServletRequest request,
                                 ServletResponse response)
            throws Exception;
            
            public ActionForward execute(ActionMapping mapping,
                                 ActionForm form,
                                 HttpServletRequest request,
                                 HttpServletResponse response)
            throws Exception;
            

            Since the majority of Struts projects are focused on building web applications, most projects will only use the "HttpServletRequest" version. A non-HTTP execute() method has been provided for applications that are not specifically geared towards the HTTP protocol.

            The goal of an Action class is to process a request, via its execute method, and return an ActionForward object that identifies where control should be forwarded (e.g. a JSP, Tile definition, Velocity template, or another Action) to provide the appropriate response. In the MVC/Model 2 design pattern, a typical Action class will often implement logic like the following in its execute method:

            • Validate the current state of the user's session (for example, checking that the user has successfully logged on). If the Action class finds that no logon exists, the request can be forwarded to the presentation page that displays the username and password prompts for logging on. This could occur because a user tried to enter an application "in the middle" (say, from a bookmark), or because the session has timed out, and the servlet container created a new one.
            • If validation is not complete, validate the form bean properties as needed. If a problem is found, store the appropriate error message keys as a request attribute, and forward control back to the input form so that the errors can be corrected.
            • Perform the processing required to deal with this request (such as saving a row into a database). This can be done by logic code embedded within the Action class itself, but should generally be performed by calling an appropriate method of a business logic bean.
            • Update the server-side objects that will be used to create the next page of the user interface (typically request scope or session scope beans, depending on how long you need to keep these items available).
            • Return an appropriate ActionForward object that identifies the presentation page to be used to generate this response, based on the newly updated beans. Typically, you will acquire a reference to such an object by calling findForward on either the ActionMapping object you received (if you are using a logical name local to this mapping), or on the controller servlet itself (if you are using a logical name global to the application).

            In Struts 1.0, Actions called a perform method instead of the now-preferred execute method. These methods use the same parameters and differ only in which exceptions they throw. The elder perform method throws SerlvetException and IOException. The new execute method simply throws Exception. The change was to facilitate the Declarative Exception handling feature introduced in Struts 1.1.

            The perform method may still be used in Struts 1.1 but is deprecated. The Struts 1.1 method simply calls the new execute method and wraps any Exception thrown as a ServletException.

            Remember the following design guidelines when coding Action classes:

            • Write code for a multi-threaded environment - The controller servlet creates only one instance of your Action class, and uses this one instance to service all requests. Thus, you need to write thread-safe Action classes. Follow the same guidelines you would use to write thread-safe Servlets. Here are two general guidelines that will help you write scalable, thread-safe Action classes:
              • Only Use Local Variables - The most important principle that aids in thread-safe coding is to use only local variables, not instance variables, in your Action class. Local variables are created on a stack that is assigned (by your JVM) to each request thread, so there is no need to worry about sharing them. An Action can be factored into several local methods, so long as all variables needed are passed as method parameters. This assures thread safety, as the JVM handles such variables internally using the call stack which is associated with a single Thread.
              • Conserve Resources - As a general rule, allocating scarce resources and keeping them across requests from the same user (in the user's session) can cause scalability problems. For example, if your application uses JDBC and you allocate a separate JDBC connection for every user, you are probably going to run in some scalability issues when your site suddenly shows up on Slashdot. You should strive to use pools and release resources (such as database connections) prior to forwarding control to the appropriate View component -- even if a bean method you have called throws an exception.
            • Don't throw it, catch it! - Ever used a commercial website only to have a stack trace or exception thrown in your face after you've already typed in your credit card number and clicked the purchase button? Let's just say it doesn't inspire confidence. Now is your chance to deal with these application errors - in the Action class. If your application specific code throws expections you should catch these exceptions in your Action class, log them in your application's log (servlet.log("Error message", exception)) and return the appropriate ActionForward.

            It is wise to avoid creating lengthy and complex Action classes. If you start to embed too much logic in the Action class itself, you will begin to find the Action class hard to understand, maintain, and impossible to reuse. Rather than creating overly complex Action classes, it is generally a good practice to move most of the persistence, and "business logic" to a separate application layer. When an Action class becomes lengthy and procedural, it may be a good time to refactor your application architecture and move some of this logic to another conceptual layer; otherwise, you may be left with an inflexible application which can only be accessed in a web-application environment. Struts should be viewed as simply the foundation for implementing MVC in your applications. Struts provides you with a useful control layer, but it is not a fully featured platform for building MVC applications, soup to nuts.

            The MailReader example application included with Struts stretches this design principle somewhat, because the business logic itself is embedded in the Action classes. This should be considered something of a bug in the design of the example, rather than an intrinsic feature of the Struts architecture, or an approach to be emulated. In order to demonstrate, in simple terms, the different ways Struts can be used, the MailReader application does not always follow best practices.

            You can define an ExceptionHandler to execute when an Action's execute method throws an Exception. First, you need to subclass org.apache.struts.action.ExceptionHandler and override the execute method. Your execute method should process the Exception and return an ActionForward object to tell Struts where to forward to next. Then you configure your handler in struts-config.xml like this:

            
                
            
            ]]>

            This configuration element says that com.yourcorp.ExceptionHandler.execute will be called when any IOException is thrown by an Action. The key is a key into your message resources properties file that can be used to retrieve an error message.

            You can override global exception handlers by defining a handler inside an action definition.

            A common use of ExceptionHandlers is to configure one for java.lang.Exception so it's called for any exception and log the exception to some data store.

            The PlugIn interface extends Action and so that applications can easily hook into the ActionServlet lifecycle. This interface defines two methods, init() and destroy(), which are called at application startup and shutdown, respectively. A common use of a Plugin Action is to configure or load application-specific data as the web application is starting up.

            At runtime, any resource setup by init would be accessed by Actions or business tier classes. The PlugIn interface allows you to setup resources, but does not provide any special way to access them. Most often, the resource would be stored in application context, under a known key, where other components can find it.

            PlugIns are configured using <plug-in> elements within the Struts configuration file. See PlugIn Configuration for details.

            In order to operate successfully, the Struts controller servlet needs to know several things about how each request URI should be mapped to an appropriate Action class. The required knowledge has been encapsulated in a Java class named ActionMapping, the most important properties are as follows:

            • type - Fully qualified Java class name of the Action implementation class used by this mapping.
            • name - The name of the form bean defined in the config file that this action will use.
            • path - The request URI path that is matched to select this mapping. See below for examples of how matching works and how to use wildcards to match multiple request URIs.
            • unknown - Set to true if this action should be configured as the default for this application, to handle all requests not handled by another action. Only one action can be defined as a default within a single application.
            • validate - Set to true if the validate method of the action associated with this mapping should be called.
            • forward - The request URI path to which control is passed when this mapping is invoked. This is an alternative to declaring a type property.

            How does the controller servlet learn about the mappings you want? It would be possible (but tedious) to write a small Java class that simply instantiated new ActionMapping instances, and called all of the appropriate setter methods. To make this process easier, Struts uses the Jakarta Commons Digester component to parse an XML-based description of the desired mappings and create the appropriate objects initialized to the appropriate default values. See the Jakarta Commons website for more information about the Digester.

            The developer's responsibility is to create an XML file named struts-config.xml and place it in the WEB-INF directory of your application. This format of this document is described by the Document Type Definition (DTD) maintained at http://struts.apache.org/dtds/struts-config_1_2.dtd. This chapter covers the configuration elements that you will typically write as part of developing your application. There are several other elements that can be placed in the struts-config file to customize your application. See "Configuring Applications" for more about the other elements in the Struts configuration file.

            The controller uses an internal copy of this document to parse the configuration; an Internet connection is not required for operation.

            The outermost XML element must be <struts-config>. Inside of the <struts-config> element, there are three important elements that are used to describe your actions:

            • <form-beans>
            • <global-forwards>
            • <action-mappings>

            <form-beans>
            This section contains your form bean definitions. Form beans are descriptors that are used to create ActionForm instances at runtime. You use a <form-bean> element for each form bean, which has the following important attributes:

            • name: A unique identifier for this bean, which will be used to reference it in corresponding action mappings. Usually, this is also the name of the request or session attribute under which this form bean will be stored.
            • type: The fully-qualified Java classname of the ActionForm subclass to use with this form bean.

            <global-forwards>
            This section contains your global forward definitions. Forwards are instances of the ActionForward class returned from an ActionForm's execute method. These map logical names to specific resources (typically JSPs), allowing you to change the resource without changing references to it throughout your application. You use a <forward> element for each forward definition, which has the following important attributes:

            • name: The logical name for this forward. This is used in your ActionForm's execute method to forward to the next appropriate resource. Example: homepage
            • path: The context relative path to the resource. Example: /index.jsp or /index.do
            • redirect: True or false (default). Should the ActionServlet redirect to the resource instead of forward?

            <action-mappings>
            This section contains your action definitions. You use an <action> element for each of the mappings you would like to define. Most action elements will define at least the following attributes:

            • path: The application context-relative path to the action.
            • type: The fully qualified java classname of your Action class.
            • name: The name of your <form-bean> element to use with this action

            Other often-used attributes include:

            • parameter: A general-purpose attribute often used by "standard" Actions to pass a required property.
            • roles: A comma-delimited list of the user security roles that can access this mapping.

            For a complete description of the elements that can be used with the action element, see the Struts Configuration DTD and the ActionMapping documentation.

            Here's a mapping entry based on the MailReader example application. The MailReader application now uses DynaActionForms. But in this example, we'll show a conventinal ActionForm instead, to illustrate the usual workflow. Note that the entries for all the other actions are left out:

            
                
                    
                 
                
                    
                
                
                    
                
            
            ]]>

            First the form bean is defined. A basic bean of class "org.apache.struts.webapp.example.LogonForm" is mapped to the logical name "logonForm". This name is used as a request attribute name for the form bean.

            The "global-forwards" section is used to create logical name mappings for commonly used presentation pages. Each of these forwards is available through a call to your action mapping instance, i.e. mapping.findForward("logicalName").

            As you can see, this mapping matches the path /logon (actually, because the MailReader example application uses extension mapping, the request URI you specify in a JSP page would end in /logon.do). When a request that matches this path is received, an instance of the LogonAction class will be created (the first time only) and used. The controller servlet will look for a bean in request scope under key logonForm, creating and saving a bean of the specified class if needed.

            Optional but very useful are the local "forward" elements. In the MailReader example application, many actions include a local "success" and/or "failure" forward as part of an action mapping.

            
            
                
                
            
            ]]>

            Using just these two extra properties, the Action classes are almost totally independent of the actual names of the presentation pages. The pages can be renamed (for example) during a redesign, with negligible impact on the Action classes themselves. If the names of the "next" pages were hard coded into the Action classes, all of these classes would also need to be modified. Of course, you can define whatever local forward properties makes sense for your own application.

            The Struts configuration file includes several other elements that you can use to customize your application. See "Configuring Applications" for details.

            Fronting your pages with ActionMappings is essential when using modules, since doing so is the only way you involve the controller in the request -- and you want to! The controller puts the application configuration in the request, which makes available all of your module-specific configuration data (including which message resources you are using, request-processor, datasources, and so forth).

            The simplest way to do this is to use the forward property of the ActionMapping:

            <action path="/view" forward="/view.jsp"/>

            [Since Struts 1.2.0] As a Struts application grows in size, so will the number of action mappings. Wildcards can be used to combine similiar mappings into one more generic mapping.

            The best way to explain wildcards is to show an example and walk through how it works. This example modifies the previous mapping in the ActionMapping Example section to use wildcards to match all pages that start with /edit:

            
            
                
                
            
            ]]>

            The "*" in the path attribute allows the mapping to match the request URIs /editSubscription, editRegistration, or any other URI that starts with /edit, however /editSubscription/add would not be matched. The part of the URI matched by the wildcard will then be substituted into various attributes of the action mapping and its action forwards replacing {1}. For the rest of the request, Struts will see the action mapping and its action forwards containing the new values.

            Wildcard patterns can contain one or more of the following special tokens:

            * Matches zero or more characters excluding the slash ('/') character.
            ** Matches zero or more characters including the slash ('/') character.
            \character The backslash character is used as an escape sequence. Thus \* matches the character asterisk ('*'), and \\ matches the character backslash ('\').

            In the action mapping and action forwards, the wildcard-matched values can be accessed with the token {N} where N is a number from 1 to 9 indicating which wildcard-matched value to substitute. The whole request URI can be accessed with the {0} token.

            The action mapping attributes that will accept wildcard-matched strings are:

            • type
            • name
            • roles
            • parameter
            • attribute
            • forward
            • include
            • input

            The action forward attributes that will accept wildcard-matched strings are:

            • path

            Struts doesn't configure logging itself -- it's all done by commons-logging under the covers. The default algorithm is a search:

            • If Log4J is there, use it.
            • If JDK 1.4 is there, use it.
            • Otherwise, use SimpleLog.

            The commons-logging interface is an ultra-thin bridge to many different logging implementations. The intent is to remove compile- and run-time dependencies on any single logging implementation. For more information about the currently-supported implementations, please refer to the the description for the org.apache.commons.logging package.

            Because Struts uses commons-logging and, therefore, includes the necessary JAR files for you to use commons-logging, you've probably had the occasional fleeting thought, "Should I use commons-logging?" The answer (surprise!) depends on the requirements for your particular project. If one of your requirements is the ability to easily change logging implementations with zero impact on your application, then commons-logging is a very good option.

            "Great! What do I do to get started using commons-logging in my own code?"

            Using commons-logging in your own code is very simple - all you need are two imports and a declaration for a logger. Let's take a look:

            package com.foo;
            // ...
            import org.apache.commons.logging.Log;
            import org.apache.commons.logging.LogFactory;
            ...
            public class Foo {
                // ...
                private static Log log = LogFactory.getLog(Foo.class);
                // ...
                public void setBar(Bar bar) {
                    if (log.isTraceEnabled()) { 
                        log.trace("Setting bar to " + bar);
                    }
                    this.bar = bar;
                }
            // ...
            }
            

            The general idea is to instantiate a single logger per class and to use a name for the logger which reflects where it's being used. The example is constructed with the class itself. This gives the logger the name of com.foo.Foo. Doing things this way lets you easily see where the output is coming from, so you can quickly pin-point problem areas. In addition, you are able to enable/disable logging in a very fine-grained way.

            For examples of using logging in Struts classes, see the Action classes in the Struts MailReader example application.

            Next: Configuring Applications

            libstruts1.2-java-1.2.9/doc/userGuide/building_model.xml0000644000175000017500000002550710404045210023663 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Mike Schachter Ted Husted Martin Cooper Phil Steitz The Struts User's Guide - Building Model Components

            Many requirements documents used for building web applications focus on the View. However, you should ensure that the processing required for each submitted request is also clearly defined from the Model's perspective. In general, the developer of the Model components will be focusing on the creation of JavaBeans classes that support all of the functional requirements. The precise nature of the beans required by a particular application will vary widely depending on those requirements, but they can generally be classified into several categories discussed below. However, a brief review of the concept of "scope" as it relates to beans and JSP is useful first.

            Within a web-based application, JavaBeans can be stored in (and accessed from) a number of different collections of "attributes". Each collection has different rules for the lifetime of that collection, and the visibility of the beans stored there. Together, the rules defining lifetime and visibility are called the scope of those beans. The JavaServer Pages (JSP) Specification defines scope choices using the following terms (with the equivalent servlet API concept defined in parentheses):

            • page - Beans that are visible within a single JSP page, for the lifetime of the current request. (Local variables of the service method)
            • request - Beans that are visible within a single JSP page, as well as to any page or servlet that is included in this page, or forwarded to by this page. (Request attributes)
            • session - Beans that are visible to all JSP pages and servlets that participate in a particular user session, across one or more requests. (Session attributes)
            • application - Beans that are visible to all JSP pages and servlets that are part of a web application. (Servlet context attributes)

            It is important to remember that JSP pages and servlets in the same web application share the same sets of bean collections. For example, a bean stored as a request attribute in a servlet like this:

            MyCart mycart = new MyCart(...);
            request.setAttribute("cart", mycart);

            is immediately visible to a JSP page which this servlet forwards to, using a standard action tag like this:

            <jsp:useBean id="cart" scope="request"
            class="com.mycompany.MyApp.MyCart"/>

            Note: While ActionForm beans often have properties that correspond to properties in your Model beans, the form beans themselves should be considered a Controller component. As such, they are able to transfer data between the Model and View layers.

            The Struts framework generally assumes that you have defined an ActionForm bean (that is, a Java class extending the ActionForm class) for the input forms in your application. ActionForm beans are sometimes just called "form beans". These may be finely-grained objects, so that there is one bean for each form, or coarsely-grained so that one bean serves several forms, or even an entire application.

            If you declare such beans in your Struts configuration file (see " Building the Controller Components"), the Struts controller servlet will automatically perform the following services for you, before invoking the appropriate Action method:

            • Check for an instance of a bean of the appropriate class, under the appropriate key, in the appropriate scope (request or session).
            • If there is no such bean instance available, a new one is automatically created and added to the appropriate scope (request or session).
            • For every request parameter whose name corresponds to the name of a property in the bean, the corresponding setter method will be called. This operates in a manner similar to the standard JSP action <jsp:setProperty> when you use the asterisk wildcard to select all properties.
            • The updated ActionForm bean will be passed to the execute method of an Action class [org.apache.struts.Action], so that the values can be made available to your system state and business logic beans.

            For more about coding Actions and ActionForm beans, see the "Building Controller Components" chapter.

            You should note that a "form", in the sense discussed here, does not necessarily correspond to a single JSP page in the user interface. It is common in many applications to have a "form" (from the user's perspective) that extends over multiple pages. Think, for example, of the wizard style user interface that is commonly used when installing new applications. Struts encourages you to define a single ActionForm bean that contains properties for all of the fields, no matter which page the field is actually displayed on. Likewise, the various pages of the same form should all be submitted to the same Action Class. If you follow these suggestions, the page designers can rearrange the fields among the various pages, often without requiring changes to the processing logic.

            Smaller applications may only need a single ActionForm to service all of its input forms. Others applications might use a single ActionForm for each major subsystem of the application. Some teams might prefer to have a separate ActionForm class for each distinct input form or workflow. How many or how few ActionForms to use is entirely up to you. The framework doesn't care.

            The actual state of a system is normally represented as a set of one or more JavaBeans classes, whose properties define the current state. A shopping cart system, for example, will include a bean that represents the cart being maintained for each individual shopper, and will (among other things) include the set of items that the shopper has currently selected for purchase. Separately, the system will also include different beans for the user's profile information (including their credit card and ship-to addresses), as well as the catalog of available items and their current inventory levels.

            For small scale systems, or for state information that need not be kept for a long period of time, a set of system state beans may contain all the knowledge that the system ever has of these particular details. Or, as is often the case, the system state beans will represent information that is stored permanently in some external database (such as a CustomerBean object that corresponds to a particular row in the CUSTOMERS table), and are created or removed from the server's memory as needed. Entity Enterprise JavaBeans are also used for this purpose in large scale applications.

            You should encapsulate the functional logic of your application as method calls on JavaBeans designed for this purpose. These methods may be part of the same classes used for the system state beans, or they may be in separate classes dedicated to performing the logic. In the latter case, you will usually need to pass the system state beans to be manipulated to these methods as arguments.

            For maximum code re-use, business logic beans should be designed and implemented so that they do not know they are being executed in a web application environment. If you find yourself having to import a javax.servlet.* class in your bean, you are tying this business logic to the web application environment. Consider rearranging things so that your Action classes (part of the Controller role, as described below) translate all required information from the HTTP request being processed into property setter calls on your business logic beans, after which a call to an execute method can be made. Such a business logic class can be reused in environments other than the web application for which they were initially constructed.

            Depending on the complexity and scope of your application, business logic beans might be ordinary JavaBeans that interact with system state beans passed as arguments, or ordinary JavaBeans that access a database using JDBC calls. For larger applications, these beans will often be stateful or stateless Enterprise JavaBeans (EJBs) instead.

            For more about using a database with your application, see the Accessing a Database HowTo.

            Next: Building View Components

            libstruts1.2-java-1.2.9/doc/userGuide/building_view.xml0000644000175000017500000007635410404045204023546 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Mike Schachter Ted Husted Martin Cooper Ed Burns James DeVries David Graham The Struts User's Guide - Building View Components

            This chapter focuses on the task of building the View components for use with the Struts framework. Many applications rely on JavaServer Pages (JSP) technology to create the presentation layer. The Struts distribution includes a comprehensive JSP tag library that provides support for building internationalized applications, as well as for interacting with input forms. Several other topics related to the View components are briefly discussed.

            A few years ago, application developers could count on having to support only residents of their own country, who are used to only one (or sometimes two) languages, and one way to represent numeric quantities like dates, numbers, and monetary values. However, the explosion of application development based on web technologies, as well as the deployment of such applications on the Internet and other broadly accessible networks, have rendered national boundaries invisible in many cases. This has translated (if you will pardon the pun) into a need for applications to support internationalization (often called "i18n" because 18 is the number of letters in between the "i" and the "n") and localization.

            Struts builds upon the standard classes available on the Java platform to build internationalized and localized applications. The key concepts to become familiar with are:

            • Locale - The fundamental Java class that supports internationalization is Locale. Each Locale represents a particular choice of country and language (plus an optional language variant), and also a set of formatting assumptions for things like numbers and dates.
            • ResourceBundle - The java.util.ResourceBundle class provides the fundamental tools for supporting messages in multiple languages. See the Javadocs for the ResourceBundle class, and the information on Internationalization in the documentation bundle for your JDK release, for more information.
            • PropertyResourceBundle - One of the standard implementations of ResourceBundle allows you to define resources using the same "name=value" syntax used to initialize properties files. This is very convenient for preparing resource bundles with messages that are used in a web application, because these messages are generally text oriented.
            • MessageFormat - The java.text.MessageFormat class allows you to replace portions of a message string (in this case, one retrieved from a resource bundle) with arguments specified at run time. This is useful in cases where you are creating a sentence, but the words would appear in a different order in different languages. The placeholder string {0} in the message is replaced by the first runtime argument, {1} is replaced by the second argument, and so on.
            • MessageResources - The Struts class org.apache.struts.util.MessageResources lets you treat a set of resource bundles like a database, and allows you to request a particular message string for a particular Locale (normally one associated with the current user) instead of for the default Locale the server itself is running in.

            Please note that the i18n support in a framework like Struts is limited to the presentation of internationalized text and images to the user. Support for Locale specific input methods (used with languages such as Japanese, Chinese, and Korean) is left up to the client device, whichis usually a web browser.

            For an internationalized application, follow the steps described in the Internationalization document in the JDK documentation bundle for your platform to create a properties file containing the messages for each language. An example will illustrate this further:

            Assume that your source code is created in package com.mycompany.mypackage, so it is stored in a directory (relative to your source directory) named com/mycompany/mypackage. To create a resource bundle called com.mycompany.mypackage.MyApplication, you would create the following files in the com/mycompany/mypackage directory:

            • MyApplication.properties - Contains the messages in the default language for your server. If your default language is English, you might have an entry like this: prompt.hello=Hello
            • MyApplication_xx.properties - Contains the same messages in the language whose ISO language code is "xx" (See the ResourceBundle Javadoc page for a link to the current list). For a French version of the message shown above, you would have this entry: prompt.hello=Bonjour You can have resource bundle files for as many languages as you need.

            When you configure the controller servlet in the web application deployment descriptor, one of the things you will need to define in an initialization parameter is the base name of the resource bundle for the application. In the case described above, it would be com.mycompany.mypackage.MyApplication.

            
            action
            
            org.apache.struts.action.ActionServlet
            
            
            application
            
                com.mycompany.mypackage.MyResources
            
            
            
            
            ]]>

            The important thing is for the resource bundle to be found on the class path for your application. Another approach is to store the MyResources.properties file in your application's classes folder. You can then simply specify "myResources" as the application value. Just be careful it is not deleted if your build script deletes classes as part of a "clean" target.

            If it does, here is an Ant task to run when compiling your application that copies the contents of a src/conf directory to the classes directory:

            
            
            
            
            ]]>

            Note: While the examples given here use JSP and custom tags, the ActionForm beans and the other Struts controller components are View neutral. Struts can be used with Velocity Templates, XSL, and any other presentation technology that can be rendered via a Java servlet.

            At one time or another, most web developers have built forms using the standard capabilities of HTML, such as the <input> tag. Users have come to expect interactive applications to have certain behaviors, and one of these expectations relates to error handling -- if the user makes an error, the application should allow them to fix just what needs to be changed -- without having to re-enter any of the rest of the information on the current page or form.

            Fulfilling this expectation is tedious and cumbersome when coding with standard HTML and JSP pages. For example, an input element for a username field might look like this (in JSP):

            "/>
            ]]>

            which is difficult to type correctly, confuses HTML developers who are not knowledgeable about programming concepts, and can cause problems with HTML editors. Instead, Struts provides a comprehensive facility for building forms, based on the Custom Tag Library facility of JSP 1.1. The case above would be rendered like this using Struts:

            ;
            ]]>

            with no need to explicitly refer to the JavaBean from which the initial value is retrieved. That is handled automatically by the JSP tag, using facilities provided by the framework.

            HTML forms are sometimes used to upload other files. Most browsers support this through a <input type="file"> element, that generates a file browse button, but it's up to the developer to handle the incoming files. Struts handles these "multipart" forms in a way identical to building normal forms.

            For an example of using Struts to create a simple login form, see the " Buiding an ActionForm Howto".

            Property references in JSP pages using the Struts framework can reference Java Bean properties as described in the JavaBeans specification. Most of these references refer to "scalar" bean properties, referring to primitive or single Object properties. However, Struts, along with the Jakarta Commons Beanutils library, allow you to use property references which refer to individual items in an array, collection, or map, which are represented by bean methods using well-defined naming and signature schemes.

            Documentation on the Beanutils package can be found at http://jakarta.apache.org/commons/beanutils/api/index.html. More information about using indexed and mapped properties in Struts can be found in the FAQ describing Indexed Properties, Mapped Properties, and Indexed Tags.

            Struts defines HTML tags for all of the following types of input fields, with hyperlinks to the corresponding reference information.

            In every case, a field tag must be nested within a form tag, so that the field knows what bean to use for initializing displayed values.

            There are several tags useful for creating presentations, consult the documentation on each specific tag library, along with the Tag Developers Guides, for more information:

            • [logic] iterate repeats its tag body once for each element of a specified collection (which can be an Enumeration, a Hashtable, a Vector, or an array of objects).
            • [logic] present 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 is present. Only one of the attributes may be used in one occurrence of this tag, unless you use the property attribute, in which case the name attribute is also required. The attributes include cookie, header, name, parameter, property, role, scope, and user.
            • [logic] notPresent the companion tag to present, notPresent provides the same functionality when the specified attribute is not present.
            • [html] link generates a HTML <a> element as an anchor definition or a hyperlink to the specified URL, and automatically applies URL encoding to maintain session state in the absence of cookie support.
            • [html] img generates a HTML <img> element with the ability to dynamically modify the URLs specified by the "src" and "lowsrc" attributes in the same manner that <html:link> can.
            • [bean] parameter retrieves the value of the specified request parameter, and defines the result as a page scope attribute of type String or String[].

            In addition to the form and bean interactions described above, Struts offers an additional facility to validate the input fields it has received. To utilize this feature, override the following method in your ActionForm class:

            The validate method is called by the controller servlet after the bean properties have been populated, but before the corresponding action class's execute method is invoked. The validate method has the following options:

            • Perform the appropriate validations and find no problems -- Return either null or a zero-length ActionErrors instance, and the controller servlet will proceed to call the perform method of the appropriate Action class.
            • Perform the appropriate validations and find problems -- Return an ActionErrors instance containing ActionError's, which are classes that contain the error message keys (into the application's MessageResources bundle) that should be displayed. The controller servlet will store this array as a request attribute suitable for use by the <html:errors> tag, and will forward control back to the input form (identified by the input property for this ActionMapping).

            As mentioned earlier, this feature is entirely optional. The default implementation of the validate method returns null, and the controller servlet will assume that any required validation is done by the action class.

            One common approach is to perform simple, prima facia validations using the ActionForm validate method, and then handle the "business logic" validation from the Action.

            The Struts Validator, covered in the next section, may be used to easily validate ActionForms.

            Configuring the Validator to perform form validation is easy.

            1. The ActionForm bean must extend ValidatorForm
            2. The form's JSP must include the <html:javascript> tag for client side validation.
            3. You must define the validation rules in an xml file like this:
              
                           
              
              ]]>
              The msg element points to the message resource key to use when generating the error message.
            4. Lastly, you must enable the ValidatorPlugin in the struts-config.xml file like this:
              
              
              
              ]]>

            Note: If your required form property is one of the Java object representations of primitive types (ie. java.lang.Integer), you must set the ActionServlet's convertNull init. parameter to true. Failing to do this will result in the required validation not being performed on that field because it will default to 0.

            For more about the Struts Validator, see the Developers Guide.

            Although the look and feel of your application can be completely constructed based on the standard capabilities of JSP and the Struts custom tag library, you should consider employing other techniques that will improve component reuse, reduce maintenance efforts, and/or reduce errors. Several options are discussed in the following sections.

            Beyond using the custom tags provided by the Struts library, it is easy to create tags that are specific to the application you are building, to assist in creating the user interface. The MailReader example application included with Struts illustrates this principle by creating the following tags unique to the implementation of this application:

            • checkLogon - Checks for the existence of a particular session object, and forwards control to the logon page if it is missing. This is used to catch cases where a user has bookmarked a page in the middle of your application and tries to bypass logging on, or if the user's session has been timed out. (Note that there are better ways to authenticate users; the checkLogon tag is simply meant to demonstrate writing your own custom tags.)
            • linkSubscription - Generates a hyperlink to a details page for a Subscription, which passes the required primary key values as request attributes. This is used when listing the subscriptions associated with a user, and providing links to edit or delete them.
            • linkUser - Generates a hyperlink to a details page for a User, which passes the required primary key values as request attributes.

            The source code for these tags is in the src/example directory, in package org.apache.struts.example, along with the other Java classes that are used in this application.

            Creating the entire presentation of a page in one JSP file (with custom tags and beans to access the required dynamic data) is a very common design approach, and was employed in the example application included with Struts. However, many applications require the display of multiple logically distinct portions of your application together on a single page.

            For example, a portal application might have some or all of the following functional capabilities available on the portal's "home" page:

            • Access to a search engine for this portal.
            • One or more "news feed" displays, with the topics of interest customizedfrom the user's registration profile.
            • Access to discussion topics related to this portal.
            • A "mail waiting" indicator if your portal provides free email accounts.

            The development of the various segments of this site is easier if you can divide up the work, and assign different developers to the different segments. Then, you can use the include capability of JavaServer Pages technology to combine the results into a single result page, or use the include tag provided with Struts. There are three types of include available, depending on when you w ant the combination of output to occur:

            • An <%@ include file="xxxxx" %> directive can include a file that contains Java code or JSP tags. The code in the included file can even reference variables declared earlier in the outer jsp page. The code is inlined into the other JavaServer Page before it is compiled so it can definitely contain more than just HTML.
            • The include action (<jsp:include page="xxxxx" flush="true" />) is processed at request time, and is handled transparently by the server. Among other things, that means you can conditionally perform the include by nesting it within a tag like equal by using it's parameter attribute.
            • The bean:include tag takes either a an argument "forward" representing a logical name mapped to the jsp to include, or the "id" argument, which represents a page context String variable to print out to the jsp page.

            Tiles is a powerful templating library that allows you to construct views by combining various "tiles". Here's a quick setup guide:

            1. Create a /layout/layout.jsp file that contains your app's common look and feel:
              
              
              
              
              
              ]]>
            2. Create your /index.jsp homepage file:
              This is my homepage
              ]]>
            3. Create a /WEB-INF/tiles-defs.xml file that looks like this:
              
              
                  
              
              
                  
              
              
              ]]>
            4. Setup the TilesPlugin in the struts-config.xml file:
              
                  
              
              ]]>
            5. Setup an action mapping in struts-config.xml to point to your homepage tile:
              
              ]]>

            The TilesPlugin configures a special RequestProcessor that determines if the requested view is a tile and processes it accordingly. Note that we made the homepage tile extend our root layout tile and changed the body attribute. Tiles inserts the file named in the body attribute into the main layout.

            See the tiles-documentation webapp for in-depth examples.

            Some applications require dynamically generated images, like the price charts on a stock reporting site. Two different approaches are commonly used to meet these requirements:

            • Render a hyperlink with a URL that executes a servlet request. The servlet will use a graphics library to render the graphical image, set the content type appropriately (such as to image/gif), and send back the bytes of that image to the browser, which will display them just as if it had received a static file.
            • Render the HTML code necessary to download a Java applet that creates the required graph. You can configure the graph by setting appropriate initialization parameters for the applet in the rendered code, or you can have the applet make its own connection to the server to receive these parameters.

            Some applications require dynamically generated text or markup, such as XML. If a complete page is being rendered, and can be output using a PrintWriter, this is very easy to do from an Action:

            The Struts-EL tag library is a contributed library in the Struts distribution. It represents an integration of the Struts tag library with the JavaServer Pages Standard Tag Library, or at least the "expression evaluation" engine that is used by the JSTL.

            The base Struts tag library contains tags which rely on the evaluation of "rtexprvalue"s (runtime scriptlet expressions) to evaluate dynamic attribute values. For instance, to print a message from a properties file based on a resource key, you would use the bean:write tag, perhaps like this:

            
                '/>]]>
                

            This assumes that stringvar exists as a JSP scripting variable. If you're using the Struts-EL library, the reference looks very similar, but slightly different, like this:

            
                ]]>
                

            If you want to know how to properly use the Struts-EL tag library, there are two important things you need to know:

            • The Struts tag library
            • The JavaServer Pages Standard tag library

            Once you understand how to use these two, consider Struts tag attribute values being evaluated the same way the JSTL tag attribute values are. Past that, there is very little else you need to know to effectively use the Struts-EL tag library.

            Although the Struts-EL tag library is a direct "port" of the tags from the Struts tag library, not all of the tags in the Struts tag library were implemented in the Struts-EL tag library. This was the case if it was clear that the functionality of a particular Struts tag could be entirely fulfilled by a tag in the JSTL. It is assumed that developers will want to use the Struts-EL tag library along with the JSTL, so it is reasonable to assume that they will use tags from the JSTL if they fill their needs.

            For more see, Struts-El Extension in the FAQ/HOWTO section.

            Next: Building Controller Components

            libstruts1.2-java-1.2.9/doc/userGuide/configuration.xml0000644000175000017500000011547410404045236023570 0ustar arnaudarnaud00000000000000 The Struts User's Guide - Configuring Applications Craig R. McClanahan Mike Schachter Ted Husted Martin Cooper Ed Burns Donald Ball Eddie Bush Yann Cebron David Graham Tim O'Brien

            Before you can build an application, you need to lay a solid foundation. There are several setup tasks you need to perform before deploying your Struts application. These include components in the Struts configuration file and in the Web Application Deployment Descriptor.

            The Building Controller Components chapter covered writing the <form-bean> and <action-mapping> portions of the Struts configuration file. These elements usually play an important role in the development of a Struts application. The other elements in Struts configuration file tend to be static: you set them once and leave them alone.

            These "static" configuration elements are:

            • <controller>
            • <message-resources>
            • <plug-in>
            • <data-sources>

            The <controller> element allows you to configure the ActionServlet. Many of the controller parameters were previously defined by servlet initialization parameters in your web.xml file but have been moved to this section of struts-config.xml in order to allow different modules in the same web application to be configured differently. For full details on available parameters see the struts-config_1_2.dtd or the list below.

            • bufferSize - The size (in bytes) of the input buffer used when processing file uploads. [4096] (optional)
            • className - Classname of configuration bean. [org.apache.struts.config.ControllerConfig] (optional)
            • contentType - Default content type (and optional character encoding) to be set on each response. May be overridden by the Action, JSP, or other resource to which the request is forwarded. [text/html] (optional)
            • forwardPattern - Replacement pattern defining how the "path" attribute of a <forward> element is mapped to a context-relative URL when it starts with a slash (and when the contextRelative property is false). This value may consist of any combination of the following:
              • $M - Replaced by the module prefix of this module.
              • $P - Replaced by the "path" attribute of the selected <forward> element.
              • $$ - Causes a literal dollar sign to be rendered.
              • $x - (Where "x" is any character not defined above) Silently swallowed, reserved for future use.
              If not specified, the default forwardPattern is consistent with the previous behavior of forwards. [$M$P] (optional)
            • inputForward - Set to true if you want the input attribute of <action> elements to be the name of a local or global ActionForward, which will then be used to calculate the ultimate URL. Set to false to treat the input parameter of <action> elements as a module-relative path to the resource to be used as the input form. [false] (optional)
            • locale - Set to true if you want a Locale object stored in the user's session if not already present. [true] (optional)
            • maxFileSize - The maximum size (in bytes) of a file to be accepted as a file upload. Can be expressed as a number followed by a "K", "M", or "G", which are interpreted to mean kilobytes, megabytes, or gigabytes, respectively. [250M] (optional)
            • multipartClass - The fully qualified Java class name of the multipart request handler class to be used with this module. [org.apache.struts.upload.CommonsMultipartRequestHandler] (optional)
            • nocache - Set to true if you want the controller to add HTTP headers for defeating caching to every response from this module. [false] (optional)
            • pagePattern - Replacement pattern defining how the page attribute of custom tags using it is mapped to a context-relative URL of the corresponding resource. This value may consist of any combination of the following:
              • $M - Replaced by the module prefix of this module.
              • $P - Replaced by the "path" attribute of the selected <forward> element.
              • $$ - Causes a literal dollar sign to be rendered.
              • $x - (Where "x" is any character not defined above) Silently swallowed, reserved for future use.
              If not specified, the default pagePattern is consistent with the previous behavior of URL calculation. [$M$P] (optional)
            • processorClass - The fully qualified Java class name of the RequestProcessor subclass to be used with this module. [org.apache.struts.action.RequestProcessor] (optional)
            • tempDir - Temporary working directory to use when processing file uploads. [{the directory provided by the servlet container}]

            This example uses the default values for several controller parameters. If you only want default behavior you can omit the controller section altogether.

            ;
            ]]>

            Struts has built in support for internationalization (I18N). You can define one or more <message-resources> elements for your webapp; modules can define their own resource bundles. Different bundles can be used simultaneously in your application, the 'key' attribute is used to specify the desired bundle.

            • className - Classname of configuration bean. [org.apache.struts.config.MessageResourcesConfig] (optional)
            • factory - Classname of MessageResourcesFactory. [org.apache.struts.util.PropertyMessageResourcesFactory] (optional)
            • key - ServletContext attribute key to store this bundle. [org.apache.struts.action.MESSAGE] (optional)
            • null - Set to false to display missing resource keys in your application like '???keyname???' instead of null. [true] (optional)
            • parameter - Name of the resource bundle. (required)

            Example configuration:

            
            ]]>

            This would set up a message resource bundle provided in the file MyWebAppResources.properties under the default key. Missing resource keys would be displayed as '???keyname???'.

            Struts PlugIns are configured using the <plug-in> element within the Struts configuration file. This element has only one valid attribute, 'className', which is the fully qualified name of the Java class which implements the org.apache.struts.action.PlugIn interface.

            For PlugIns that require configuration themselves, the nested <set-property> element is available.

            This is an example using the Tiles plugin:

            
                
            
            ]]>

            Besides the objects related to defining ActionMappings, the Struts configuration may contain elements that create other useful objects.

            The <data-sources> section can be used to specify a collection of DataSources [javax.sql.DataSource] for the use of your application. Typically, a DataSource represents a connection pool to a database or other persistent store. As a convenience, the Struts DataSource manager can be used to instantiate whatever standard pool your application may need. Of course, if your persistence layer provides for its own connections, then you do not need to specify a data-sources element.

            Since DataSource implementations vary in what properties need to be set, unlike other Struts configuration elements, the <data-source> element does not pre-define a slate of properties. Instead, the generic <set-property> feature is used to set whatever properties your implementation may require. Typically, these settings would include:

            • A driver class name
            • A url to access the driver
            • A description

            And other sundry properties.

            
            
            
            ]]>

            Since Struts 1.2.0, the GenericDataSource has been removed, and it is recommended that you use the Commons BasicDataSource or other DataSource implementations instead. In practice, if you need to use the DataSource manager, you should use whatever DataSource implementation works best with your container or database.

            For examples of specifying a <data-sources> element and using the DataSource with an Action, see the Accessing a Database HowTo.

            Very little is required in order to start taking advantage of the Struts module feature. Just go through the following steps:

            1. Prepare a configuration file for each module.
            2. Inform the controller of your module.
            3. Use Actions to refer to your pages.

            Back in Struts 1.0, a few "boot-strap" options were placed in the web.xml file, and the bulk of the configuration was done in a single struts-config.xml file. Obviously, this wasn't ideal for a team environment, since multiple users had to share the same configuration file.

            Since Struts 1.1, you have two options: you can list multiple struts-config files as a comma-delimited list, or you can subdivide a larger application into modules.

            With the advent of modules, a given module has its own configuration file. This means each team (each module would presumably be developed by a single team) has their own configuration file, and there should be a lot less contention when trying to modify it.

            Since Struts 1.0, you listed your configuration file as an initialization parameter to the action servlet in web.xml. This is still done since Struts 1.1, but the parameter can be extended. In order to tell the Struts machinery about your different modules, you specify multiple 'config' initialization parameters, with a slight twist. You'll still use 'config' to tell the ActionServlet about your "default" module, however, for each additional module, you will list an initialization parameter named "config/module", where /module is the prefix for your module (this gets used when determining which URIs fall under a given module, so choose something meaningful!). For example:

            
                    config
                    /WEB-INF/conf/struts-default.xml
                
                
                    config/module1
                    /WEB-INF/conf/struts-module1.xml
                
                ...
            ]]>

            Here we have two modules. One happens to be the "default" module, identified by the param-name of "config", and the other will be using the module prefix "/module1" based on the param-name it was given ("config/module1"). The controller is configured to find the respective configuration files under /WEB-INF/conf/ (which is the recommended place to put all configuration files). Pretty simple!

            (The struts-default.xml would be equivalent to what most folks call struts-config.xml. I just like the symmetry of having all my Struts module configuration files being named struts-module.xml)

            If you'd like to vary where the pages for each module are stored, see the forwardPattern setting for the Controller.

            There are three approaches for switching from one module to another. You can use the built-in org.apache.struts.actions.SwitchAction, you can use a <forward> (global or local) and specify the contextRelative attribute with a value of true, or you can specify the "module" parameter as part of any of the Struts hyperlink tags (Include, Img, Link, Rewrite, or Forward).

            You can use org.apache.struts.actions.SwitchAction like so:

            
                
                ...
                
                ...
            ]]>

            Now, to change to ModuleB, we would use a URI like this:

            
                http://localhost:8080/toModule.do?prefix=/moduleB&page=/index.do
                

            If you are using the "default" module as well as "named" modules (like "/moduleB"), you can switch back to the "default" module with a URI like this:

            
                http://localhost:8080/toModule.do?prefix=&page=/index.do
                

            Here's an example of a global forward:

            
                
               ...
            
            ]]>

            You could do the same thing with a local forward declared in an ActionMapping:

            
               
                   
               
               ...
               
               ]]>

            Or, you can use org.apache.struts.actions.SwitchAction:

            
               
               ...
               
               ]]>

            Now, to change to ModuleB, we would use a URI like this:

            
               http://localhost:8080/toModule.do?prefix=/moduleB&page=/index.do
                

            Using the module parameter with a hyperlink tag is even simpler:

            
                ]]>

            That's all there is to it! Happy module-switching!

            The final step in setting up the application is to configure the application deployment descriptor (stored in file WEB-INF/web.xml) to include all the Struts components that are required. Using the deployment descriptor for the example application as a guide, we see that the following entries need to be created or modified.

            Add an entry defining the action servlet itself, along with the appropriate initialization parameters. Such an entry might look like this:

            
                action
                
                    org.apache.struts.action.ActionServlet
                
                
                    config
                    
                     /WEB-INF/struts-config.xml
                    
                
                1
            
            ]]>

            The initialization parameters supported by the action servlet are described below. (You can also find these details in the Javadocs for the ActionServlet class.) Square brackets describe the default values that are assumed if you do not provide a value for that initialization parameter.

            • config - Context-relative path to the XML resource containing the configuration information for the default module. This may also be a comma-delimited list of configuration files. Each file is loaded in turn, and its objects are appended to the internal data structure. [/WEB-INF/struts-config.xml].
              WARNING - If you define an object of the same name in more than one configuration file, the last one loaded quietly wins.
            • config/${module} - Context-relative path to the XML resource containing the configuration information for the application module that will use the specified prefix (/${module}). This can be repeated as many times as required for multiple application modules. (Since Struts 1.1)
            • convertNull - Force simulation of the Struts 1.0 behavior when populating forms. If set to "true", the numeric Java wrapper class types (like java.lang.Integer) will default to null (rather than 0). (Since Struts 1.1) [false]
            • rulesets - Comma-delimited list of fully qualified classnames of additional org.apache.commons.digester.RuleSet instances that should be added to the Digester that will be processing struts-config.xml files. By default, only the RuleSet for the standard configuration elements is loaded. (Since Struts 1.1)
            • validating - Should we use a validating XML parser to process the configuration file (strongly recommended)? [true]
            • configFactory - The Java class name of the ModuleConfigFactory used to create the implementation of the ModuleConfig interface. [org.apache.struts.config.impl.DefaultModuleConfigFactory]

            WARNING - Struts will not operate correctly if you define more than one <servlet> element for a controller servlet, or a subclass of the standard controller servlet class. The controller servlet MUST be a web application wide singleton.

            Note: The material in this section is not specific to Struts. The configuration of servlet mappings is defined in the Java Servlet Specification. This section describes the most common means of configuring a Struts application.

            There are two common approaches to defining the URLs that will be processed by the controller servlet -- prefix matching and extension matching. An appropriate mapping entry for each approach will be described below.

            Prefix matching means that you want all URLs that start (after the context path part) with a particular value to be passed to this servlet. Such an entry might look like this:

            
                action
                /do/*
            
            ]]>

            which means that a request URI to match the /logon path described earlier might look like this:

            http://www.mycompany.com/myapplication/do/logon

            where /myapplication is the context path under which your application is deployed.

            Extension mapping, on the other hand, matches request URIs to the action servlet based on the fact that the URI ends with a period followed by a defined set of characters. For example, the JSP processing servlet is mapped to the *.jsp pattern so that it is called to process every JSP page that is requested. To use the *.do extension (which implies "do something"), the mapping entry would look like this:

            
                action
                *.do
            
            ]]>

            and a request URI to match the /logon path described earlier might look like this:

            http://www.mycompany.com/myapplication/logon.do

            WARNING - Struts will not operate correctly if you define more than one <servlet-mapping> element for the controller servlet.

            WARNING - If you are using the new module support since Struts 1.1, you should be aware that only extension mapping is supported.

            Next, you must add an entry defining the Struts tag libraries.

            The struts-bean taglib 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.

            The struts-html taglib contains tags used to create Struts input forms, as well as other tags generally useful in the creation of HTML-based user interfaces.

            The struts-logic taglib 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.

            The struts-tiles taglib contains tags used for combining various view components, called "tiles", into a final composite view.

            The struts-nested taglib is an extension of other struts taglibs that allows the use of nested beans.

            Below is how you would define all Struts taglibs for use within your application. In practice, you would only specify the taglibs that your application uses:

            
                 
                 http://struts.apache.org/tags-bean
                 
                 
                 /WEB-INF/struts-bean.tld
                 
            
            
                 
                 http://struts.apache.org/tags-html
                 
                 
                 /WEB-INF/struts-html.tld
                 
            
            
                 
                 http://struts.apache.org/tags-logic
                 
                 
                 /WEB-INF/struts-logic.tld
                 
            
            
                 
                 http://struts.apache.org/tags-tiles
                 
                 
                 /WEB-INF/struts-tiles.tld
                 
            
            
                 
                 http://struts.apache.org/tags-nested
                 
                 
                 /WEB-INF/struts-nested.tld
                 
            
            ]]>

            This tells the JSP system where to find the tag library descriptor for this library (in your application's WEB-INF directory, instead of out on the Internet somewhere).

            Servlet 2.3/2.4 users only: The Servlet 2.3 and 2.4 specifications simplify the deployment and configuration of tag libraries. The instructions above will work on older containers as well as 2.3 and 2.4 containers (Struts only requires a servlet 2.2 container); however, if you're using a 2.3/2.4 container such as Tomcat 4.x/5.x, you can take advantage of a simplified deployment.

            All that's required to install the Struts tag libraries is to copy struts.jar into your /WEB-INF/lib directory and reference the tags in your code like this:

            
                <%@ taglib
                    uri="http://struts.apache.org/tags-html"
                    prefix="html" %>
                

            Note that you must use the full uri defined in the various tlds (see the example configuration for reference) so that the container knows where to find the tag's class files. You don't have to alter your web.xml file or copy tlds into any application directories.

            To use Struts, you must copy the .tld files that you require into your WEB-INF directory, and copy struts.jar (and all of the commons-*.jar files) into your WEB-INF/lib directory.

            Servlet 2.3/2.4 Users: See section 4.5.3.1 for how to avoid copying the tlds into your application.

            Sidebar: Sharing JAR Files Across Web Applications

            Many servlet containers and application servers provide facilities for sharing JAR files across multiple web applications that depend on them. For example, Tomcat 4.1 allows you to put JAR files into the $CATALINA_HOME/shared/lib or $CATALINA_HOME/common/lib directories, and the classes in those JAR files will be available in all applications, without the need to place them in every web application's /WEB-INF/lib directory. Usually, the sharing is accomplished by creating a separate class loader that is the parent of the class loader (created by your container) for each individual web application.

            If you have multiple Struts-based web applications, it is tempting to consider taking advantage of this container feature, and placing struts.jar and the various commons-*.jar files in the shared directory, rather than in each web application. However, there are several potential, and actual, problems with this approach:

            • Classes loaded from the shared class loader cannot see classes in the web application's class loader, unless they are specifically programmed to use the Thread context class loader. For example, Struts dynamically loads your action and form bean classes, and normally would not be able to find those classes. Struts has been programmed to deal with this in most scenarios, but it has not been thoroughly audited to ensure that it works in all scenarios. The Commons libraries that Struts uses have NOT been audited to catch all possible scenarios where this might become a problem.
            • When a class is loaded from a shared class loader, static variables used within that class become global as well. This can cause inter-webapp conflicts when the underlying code assumes that the statics are global only within a particular web applicaiton (which would be true if the class was loaded from the webapp class loader). There are many cases where Struts, and the Commons libraries it relies on, use static variables to maintain information that is presumed to be visible only within a single web applicaiton. Sharing these JAR files can cause unwanted interactions, and probably cause incorrect behavior.
            • When JAR files are shared like this, it is not possible to update the JAR file versions employed by a single web application without updating all of them. In addition, because updating a Struts version normally requires recompilation of the applications that use it, you will have to recompile all of your applications as well, instead of being able to manage them independently.

            In spite of these difficulties, it is possible that sharing the Struts and Commons JAR files might appear to work for you. However, this is NOT a supported configuration.

            If you file a bug report for ClassNotFoundException or NoClassDefFoundError exceptions, or similar situations where it appears that the wrong version of a class is being loaded, the bug report will NOT be processed unless the problem exists with the JAR files in their recommended location, in the /WEB-INF/lib subdirectory of your webapp.

            Since Struts 1.0, the logging functionality was fairly limited. You could set a debugging detail level with a servlet initialization parameter, and all log messages were written to wherever ServletContext.log() output is sent by your servlet container. With Struts 1.1, however, all logging messages written by Struts itself, as well as the commons libraries that it utilizes, flow through an abstract wrapper called Commons Logging, which can be used as a wrapper around any logging implementation. The most common implementations used are simple logging to System.err, the Apache Log4J package, or the built-in logging capabilities of JDK 1.4 or later in the java.util.logging package.

            This section does not attempt to fully explain how Commons Logging is configured and used. Instead, it focuses on pertinent details of using Commons Logging in a Struts based environment. For complete documentation on using Commons Logging, consult the documentation for the logging system you are using, plus the Commons Logging Javadocs.

            Commons Logging provides fine-grained control over the logging messages created by a Log instance. By convention, the Log instances for Struts (and the Commons packages in general) are named the fully qualified class name of the class whose messages are being logged. Therefore, log messages created by the RequestProcessor class are, naturally enough, directed to a logger named org.apache.struts.action.RequestProcessor.

            The advantage of this approach is that you can configure the level of detail in the output you want from each class, individually. However, it would be a burden to be required to maintain such settings for every possible class, so the logging environment supports the notion of logging hierarchies as well. If a detail level configuration for a particular class has not been set, the logging system looks up the hierarchy until it finds a configuration setting to use, or else uses the default detail level if no configuration for any level of the hierarchy has been explicitly set. In the case of our messages from RequestProcessor, the logging system will look for explicit settings of the following loggers, in this order, until it finds one:

            • org.apache.struts.action.RequestProcessor
            • org.apache.struts.action
            • org.apache.struts
            • org.apache
            • org
            • The default logging detail level for your log implementation.

            In a similar manner, the detail level for messages from PropertyUtils (from the Commons BeanUtils library) is set by a search for configuration settings for:

            • org.apache.commons.beanutils.PropertyUtils
            • org.apache.commons.beanutils
            • org.apache.commons
            • org.apache
            • org
            • The default logging detail level for your log implementation.

            You can seamlessly integrate logging from your own components into the same logging implementation that Struts and the Commons libraries use, by following the instructions in Section 4.10. If you do this, you are strongly encouraged to follow the same naming convention for loggers (based on the class name of the messages being logged) for maximum configuration flexibility.

            For more about putting it all together, see the Building Applications HowTo.

            Next: Release Notes

            libstruts1.2-java-1.2.9/doc/userGuide/dev_bean.xml0000644000175000017500000000345310404045242022452 0ustar arnaudarnaud00000000000000 Craig R. McClanahan The Struts User's Guide - Bean Taglib Guide

            Note: - Some of the features in this taglib are also available in the JavaServer Pages Standard Tag Library (JSTL). The Struts team encourages the use of the standard tags over the Struts specific tags when possible.

            The "struts-bean" tag library contains JSP custom tags useful in defining new beans (in any desired scope) from a variety of possible sources, as well as a tag to render a particular bean (or bean property) to the output response.

            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.

            libstruts1.2-java-1.2.9/doc/userGuide/dev_html.xml0000644000175000017500000000241210404045230022500 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Ted Husted Martin Cooper Mike Schachter The Struts User's Guide - HTML Taglib Guide

            The tags in the Struts HTML library form a bridge between a JSP view and the other components of a Web application. Since a dynamic Web application often depends on gathering data from a user, input forms play an important role in the Struts framework. Consequently, the majority of the HTML tags involve HTML forms.

            The HTML taglib contains tags used to create Struts input forms, as well as other tags generally useful in the creation of HTML-based user interfaces. The output is HTML 4.01 compliant or XHTML 1.0 when in XHTML mode.

            libstruts1.2-java-1.2.9/doc/userGuide/dev_logic.xml0000644000175000017500000000227610404045212022641 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Mike Schachter The Struts User's Guide - Logic Taglib Guide

            Note: - Many of the features in this taglib are also available in the JavaServer Pages Standard Tag Library (JSTL). The Struts team encourages the use of the standard tags over the Struts specific tags when possible.

            The "struts-logic" 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

            libstruts1.2-java-1.2.9/doc/userGuide/dev_nested.xml0000644000175000017500000000165210404045204023024 0ustar arnaudarnaud00000000000000 Arron Bates The Struts User's Guide - Nested Taglib Guide

            Nested tags & supporting classes extend the base struts tags to allow them to relate to each other in a nested nature. The fundamental logic of the original tags don't change, except in that all references to beans and bean properties will be managed in a nested context.

            libstruts1.2-java-1.2.9/doc/userGuide/dev_tiles.xml0000644000175000017500000001747110404045216022673 0ustar arnaudarnaud00000000000000 Cedric Dumoulin The Struts User's Guide - Tiles Guide

            Tiles builds on the "include" feature provided by the JavaServer Pages specification to provide a full-featured, robust framework for assembling presentation pages from component parts. Each part ("Tile") can be reused as often as needed throughout your application. This reduces the amount of markup that needs to be maintained and makes it easier to change the look and feel of a website.

            • Screen definitions
              • Create a screen by assembling Tiles, e.g. header, footer, menu, body
              • Definitions can take place:
                • in a centralized XML file
                • directly in JSP pages
                • in Struts Actions
              • Definitions provide an inheritance mechanism: a definition can extend another one and override some (or all) of its parameters
            • Layouts
              • Define common page layouts and reuse them across your web site
              • Define menu layouts and pass lists of items and links
              • Define a portal layout, use it by passing list of Tiles (pages) to show
              • Reuse existing layouts, or define your own ones
            • Dynamic page building
              • Tiles are gathered dynamically during page reload. It is possible to change any attributes: layout, list of Tiles in portal, list of menu items, ...
            • Reuse of Tiles/Components
              • If well defined, a Tile can be reused in different locations
              • Dynamic attributes are used to parameterize Tiles
              • It is possible to define libraries of reusable Tiles .
              • Build a page by assembling predefined components, give them appropriate parameters
            • Internationalization (I18N)
              • It is possible to load different Tiles according to the user's Locale
              • A mechanism similar to Java properties files is used for definition files: you can have one definition file per Locale, the appropriate definition is loaded according to the current Locale
            • Multi-channels
              • It is possible to load different Tiles according to a key stored e.g. in session context
              • The key could hold e.g. user privileges, browser type, ...
              • A mechanism similar to Java properties files is used for definition files: you can have one definition file per key, the appropriate definition is loaded according to the key

            The Tiles framework is bundled with Struts but not enabled by default. To enable Tiles you need to:

            • Setup the struts-tiles taglib in your WEB-INF/web.xml file to include the following tag library declaration:
            <taglib>
            <taglib-uri>/WEB-INF/struts-tiles.tld</taglib-uri>
            <taglib-location>/WEB-INF/struts-tiles.tld</taglib-location>
            </taglib>
            • At the top of each JSP page that will use the Tiles custom tags, add the following line declaring the Tiles custom tag library for use on the page:
            <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
            Servlet 2.3: You can omit the declaration in WEB-INF/web.xml and replace above line with the full URI:
            <%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>
            • If you plan to use Tiles definitions defined in a centralized file, you need to create this file and instruct Struts to load the Tiles plugin which will create the factory corresponding to the file. You can have more than one definitions file.
              • Create a file containing your definitions (e.g. WEB-INF/tiles-defs.xml). You can use the tiles-defs.xml file from the Tiles application for a detailed example of the required syntax.
              • Setup the Tiles plugin in each struts-config.xml file corresponding to a module:
              <plug-in className="org.apache.struts.tiles.TilesPlugin" >
                <set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml,
              /WEB-INF/tiles-tests-defs.xml" />
                <set-property property="definitions-parser-validate" value="true" />
                <set-property property="moduleAware" value="true" />
              </plug-in>
              • Note: This plugin creates one factory for each Struts modules. The plugin first reads the factory parameters from web.xml and then overloads them with the ones defined in the first struts-config.xml file.
            • Note: The Tiles framework now uses the commons-logging package to output different information or debug statements. Please refer to this package documentation to enable it. The simplest way to enable logging is to create two files in WEB-INF/classes:
              commons-logging.properties
              org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog
              simplelog.properties
              # Logging detail level,
              # Must be one of ("trace", "debug", "info", "warn", "error", or "fatal").
              org.apache.commons.logging.simplelog.defaultlog=trace

            Reuse Tiles and Simplify UI by James Holmes. Howto article in Oracle Magazine.

            Developing applications with Tiles by Cedric Dumoulin and Ted Husted. Sample chapter from Struts in Action; available as a free download (PDF).

            Using Tiles Sample beta chapter from Programming Jakarta Struts; available as a free download (PDF).

            Struts and Tiles aid component-based development by Wellie Chao.

            UI design with Tiles and Struts by Prakash Malani.

            Tiles 101/201 by Patrick Peak.

            Tiles Advanced Features by Cedric Dumoulin.

            libstruts1.2-java-1.2.9/doc/userGuide/dev_util.xml0000644000175000017500000000132210404045234022514 0ustar arnaudarnaud00000000000000 Craig R. McClanahan The Struts User's Guide - Utilities Guide

            The Utilities package provides a variety of families of classes, to solve problems that are commonly encountered in building web applications.

            libstruts1.2-java-1.2.9/doc/userGuide/dev_validator.xml0000644000175000017500000011500610404045246023534 0ustar arnaudarnaud00000000000000 David Winterfeldt James Turner Rob Leland Niall Pemberton The Struts User's Guide - Validator Guide

            The Struts Validator, in some form, has been available since the days of Struts 0.5. It was orignally packaged as a developer contribution. Later, the core code was moved to the Jakarta Commons and a Struts specific extension became part of Struts since 1.1.

            For the convenience of the many developers who have been using the Struts Validator all along, this document first overviews the core functionality and then covers the changes and new functionality added since Struts 1.1.

            Once you have configured the Validator Plug-In, so that it can load your Validator Resources you just have to extend org.apache.struts.validator.action.ValidatorForm instead of org.apache.struts.action.ActionForm. Then when the validate method is called, the action's name attribute from the Struts Configuration is used to load the validations for the current form. The form element's name attribute in the Validator configuration should match the action element's name attribute.

            An alternative approach is to use the action mapping path attribute. In this case, you extend the ValidatorActionForm instead of the ValidatorForm. The ValidatorActionForm uses the action element's path attribute from the Struts configuration which should match the form element's name attribute in the Validator configuration.

            Then a separate action mapping can be defined for each page in a multi-page form, and the validation form can be associated with the action rather than a page number (as shown in the example of a multi-page form in the validator example).

            Each validator form is grouped within a FormSet element in the Validator configuration file. The FormSet has language, country, and variant attributes that correspond with the java.util.Locale class. If these attributes are not specified, the FormSet will be set to the default locale. A FormSet can also have constants associated with it. On the same level as a FormSet there can be a global element which can also have constants and have validator actions that perform validations.

            Note: You must declare a default FormSet without internationalization before your internationalized FormSets. This allows the Validator to fall back to the default version if no locale is found.

            The default error message for a pluggable validator can be overriden with the msg element. So instead of using the msg attribute for the mask validator to generate the error message the msg attribute from the field will be used if the name of the field's name attribute matches the validator's name attribute.

            The arguments for error messages can be set with the arg0-arg3 elements. If the arg0-arg3 elements' name attribute isn't set, it will become the default arg value for the different error messages constructed. If the name attribute is set, you can specify the argument for a specific pluggable validator and then this will be used for constructing the error message.

            
                
                
                
                    mask
                    ^[a-zA-Z]*$
                
            
            ]]>

            By default the arg0-arg3 elements will try to look up the key attribute in the message resources. If the resource attribute is set to false, it will pass in the value directly without retrieving the value from the message resources.

            Note that since Struts 1.1, you must explicitly define your message resource in any module that is going to use the Validator, due to a problem accessing the top-level resource. This only effects applications which are using modules.

            
                
                
                
                
                    min
                    10
                
                
                    max
                    20
                
                
            ]]>

            Validator ships with a set of pre-defined validators, as follows:

            • required - mandatory field validation. Has no variables.
              
                      
                  
                  ]]>
            • requiredif - field dependant validator
              Deprecated, use validwhen.
            • validwhen - validator for checking one field against another.
              see later section titled Designing "Complex Validations with validwhen".
            • minlength - validate input data isn't less than a specified minimum length. Requires a minlength variable.
              
                      
                      
                      minlength3
                  
                  ]]>
            • maxlength - validate input data doesn't exceed a specified maximum length. Requires a maxlength variable.
              
                      
                      
                      maxlength30
                  
                  ]]>
            • mask - validate format according to a regular expression. Requires a mask variable to specify the regular expression. Since version 1.1, the regular expression must start with a ^ and end with a $ (see example below).
              
                      
                      
                      mask^[a-zA-Z]*$
                  
                  ]]>
            • byte - validates that a field can be converted to a Byte.
              
                      
                  
                  ]]>
            • short - validates that a field can be converted to a Short.
              
                      
                  
                  ]]>
            • integer - validates that a field can be converted to an Integer.
              
                      
                  
                  ]]>
            • long - validates that a field can be converted to a Long.
              
                      
                  
                  ]]>
            • float - validates that a field can be converted to a Float.
              
                      
                  
                  ]]>
            • double - validates that a field can be converted to a Double.
              
                      
                  
                  ]]>
            • date - validates that a field can be converted to a Date. This validator uses java.text.SimpleDateFormat to parse the date and optionally either a datePattern or datePatternStrict variable can be used. If no pattern is specified the default short date format is assumed. The difference between using the datePatternStrict and datePattern variables is that datePatternStrict checks additionally that the input data is the same length as the pattern specified (so for example 1/1/2004 would fail with a pattern of MM/dd/yyyy).
              
                      
                      datePatternMM/dd/yyyy
                  
                  ]]>
              
                      
                      datePatternStrictMM/dd/yyyy
                  
                  ]]>
            • range - validate number range.
              Deprecated, use intRange, floatRange or doubleRange.
            • intRange - validates that an integer field is within a specified range. Requires min and max variables to specify the range. This validator depends on the integer validator which must also be in the field's depends attribute.
              
                      
                      
                      
                      min18
                      max65
                  
                  ]]>
            • floatRange - validates that a float field is within a specified range Requires min and max variables to specify the range. This validator depends on the float validator which must also be in the field's depends attribute.
              
                      
                      
                      
                      min100
                      max4.99
                  
                  ]]>
            • doubleRange - validates that a double field is within a specified range Requires min and max variables to specify the range. This validator depends on the double validator which must also be in the field's depends attribute.
              
                      
                      
                      
                      min100
                      max4.99
                  
                  ]]>
            • creditCard - validate credit card number format
              
                      
                  
                  ]]>
            • email - validate email address format
              
                      
                  
                  ]]>
            • url - validates url format. Has four optional variables (allowallschemes, allow2slashes, nofragments and schemes) which can be used to configure this validator.
              • allowallschemes specifies whether all schemes are allowed. Valid values are true or false (default is false). If this is set to true then the schemes variable is ignored.
              • allow2slashes specifies whether double '/' characters are allowed. Valid values are true or false (default is false).
              • nofragments specifies whether fragements are allowed. Valid values are true or false (default is false - i.e. fragments are allowed).
              • schemes - use to specify a comma separated list of valid schemes. If not specified then the defaults are used which are http, https and ftp.
              
                      
                  
              
                  
                      
                      
                         nofragments
                         true
                      
                      
                         schemes
                         http,https,telnet,file
                      
                  
                  ]]>

            Global constants can be inside the global tags and FormSet/Locale constants can be created in the formset tags. Constants are currently only replaced in the Field's property attribute, the Field's var element value attribute, the Field's msg element key attribute, and Field's arg0-arg3 element's key attribute. A Field's variables can also be substituted in the arg0-arg3 elements (ex: ${var:min}). The order of replacement is FormSet/Locale constants are replaced first, Global constants second, and for the arg elements variables are replaced last.

            
                
                    zip
                    ^\d{5}(-\d{4})?$
                
            
            
            
            
            
             mask
             ${zip}
            
            
            ]]>

            The var element under a field can be used to store variables for use by a pluggable validator. These variables are available through the Field's getVar(String key) method.

            
                
                
                
                
                    min
                    10
                
                
                    max
                    20
                
                
            ]]>

            [Since Struts 1.2.0] A frequent requirement in validation design is to validate one field against another (for example, if you have asked the user to type in a password twice for confirmation, to make sure that the values match.) In addition, there are fields in a form that may only be required if other fields have certain values. The validwhen validator is designed to handle these cases.

            The validwhen validator takes a single var field, called test. The value of this var is a boolean expression which must be true in order for the validation to success. The values which are allowed in the expression are:

            • Single or double-quoted string literals.
            • Integer literals in decimal, hex or octal format
            • The value null which will match against either null or an empty string
            • Other fields in the form referenced by field name, such as customerAge
            • Indexed fields in the form referenced by an explicit integer, such as childLastName[2]
            • Indexed fields in the form referenced by an implicit integer, such as childLastName[], which will use the same index into the array as the index of the field being tested.
            • Properties of an indexed fields in the form referenced by an explicit or implicit integer, such as child[].lastName, which will use the same index into the array as the index of the field being tested.
            • The literal *this*, which contains the value of the field currently being tested

            As an example of how this would work, consider a form with fields sendNewsletter and emailAddress. The emailAddress field is only required if the sendNewsletter field is not null. You could code this using validwhen as:

            
                  
                    
                      test
                      ((sendNewsletter == null) or (*this* != null))
                    
                  
            ]]>

            Which reads as: this field is valid if sendNewsletter is null or the field value is not null.

            Here's a slightly more complicated example using indexed fields. Assume a form with a number of lines to allow the user to enter part numbers and quantities they wish to order. An array of beans of class orderLine is used to hold the entries in a property called orderLines. If you wished to verify that every line with part number also had a quantity entered, you could do it with:

            
                  
                    
                      test
                      ((orderLines[].partNumber == null) or (*this* != null))
                    
                  
            ]]>

            Which reads as: This field is value if the corresponding partNumber field is null, or this field is not null.

            As a final example, imagine a form where the user must enter their height in inches, and if they are under 60 inches in height, it is an error to have checked off nbaPointGuard as a career.

            
                  
                    
                      test
                      ((heightInInches >= 60) or (*this* == null))
                    
                  
            ]]>

            A few quick notes on the grammer.

            • All comparisons must be enclosed in parens.
            • Only two items may be joined with and or or
            • If both items to be compared are convertable to ints, a numeric comparison is done, otherwise a string comparison is done.

            By convention, the validators your application uses can beloaded through a file named "validator-rules.xml", and the validator forms (or "validations") can be configured separately (say, in a "validations.xml" file). This approach separates the validators, that you might reuse in another application, from the validations that are specific to each application.

            The Validator comes bundled with several ready-to-use validators. The bundled validators include: required, mask ,byte, short, int, long, float, double, date (without locale support), and a numeric range.

            The 'mask' validator depends on 'required' in the default setup. That means that 'required' has to complete successfully before 'mask' will run. The 'required' and 'mask' validators are partially built into the framework. Any field that isn't 'required' will skip other validations if the field is null or has a length of zero. Regardless, the implementations of 'required' and 'mask' are still plugged in through the configuration file, like all the others.

            If the Javascript Tag is used, the client side Javascript generation looks for a value in the validator's javascript attribute and generates an object that the supplied method can use to validate the form. For a more detailed explanation of how the Javascript Validator Tag works, see the html taglib API reference.

            The 'mask' validator lets you validate a regular expression mask to the field. It uses the Regular Expression Package from the Apache Jakarta site.

            The main class used is org.apache.regexp.RE.

            Example Validator Configuration from the default validator-rules.xml.

            
            
            
            ]]>

            Creating Pluggable Validators

            The methodParams attribute takes a comma separated list of class names. The method attribute needs to have a signature complying with the above list. The list can be comprised of any combination of the following:

            • java.lang.Object - Bean validation is being performed on.
            • org.apache.commons.validator.ValidatorAction - The current ValidatorAction being performed.
            • org.apache.commons.validator.Field - Field object being validated.
            • org.apache.struts.action.ActionErrors - The errors objects to add an ActionError to if the validation fails.
            • javax.servlet.http.HttpServletRequest - Current request object.
            • javax.servlet.ServletContext - The application's ServletContext.
            • org.apache.commons.validator.Validator - The current org.apache.commons.validator.Validator instance.
            • java.util.Locale - The Locale of the current user.

            Multi Page Forms

            The field element has an optional page attribute. It can be set to an integer. All validation for any field on a page less than or equal to the current page is performed server side. All validation for any field on a page equal to the current page is generated for the client side Javascript. A mutli-part form expects the page attribute to be set.

            
            ]]>

            Comparing Two Fields

            This is an example of how you could compare two fields to see if they have the same value. A good example of this is when you are validating a user changing their password and there is the main password field and a confirmation field.

            
            
            
                      
                      
                         secondProperty
                         password2
                      
            
            ]]>

            Since the Struts Validator relies on the Commons Validator, problem reports and enhancement requests may be listed against either product.

            You can define logic like "only validate this field if field X is non-null and field Y equals 'male'". The recommended way to do this will be with the validwhen validator, described above, and available since Struts 1.2.0. The requiredif validator, which was added since Struts 1.1, will be deprecated in favor of validwhen, and requiredif will be removed in a future release. However, if you are using requiredif, here is a brief tutorial.

            Let's assume you have a medical information form with three fields, sex, pregnancyTest, and testResult. If sex is 'f' or 'F', pregnancyTest is required. If pregnancyTest is not blank, testResult is required. The entry in your Validator configuration would look like this:

            
            
            
              
              
                field[0]
                sex
              
              
                fieldTest[0]
                EQUAL
              
              
                fieldValue[0]
                F
              
              
                field[1]
                sex
              
              
                fieldTest[1]
                EQUAL
              
              
                fieldValue[1]
                f
              
              
                fieldJoin
                OR
              
            
            
            
              
              
                field[0]
                pregnancyTest
              
              
                fieldTest[0]
                NOTNULL
              
            
            
            ]]>

            Here's a more complex example using indexed properties.

            If you have this in your Struts configuration

            
                
                
            
            ]]>

            Where dependent is a bean that has properties lastName, firstName, dob, coverageType

            You can define a validation:

            
            
            
              
              
                field[0]
                lastName
              
              
                fieldIndexed[0]
                true
              
              
                fieldTest[0]
                NOTNULL
              
            
            
            
              
              
                field[0]
                lastName
              
              
                fieldIndexed[0]
                true
              
              
                fieldTest[0]
                NOTNULL
              
            
            
            
              
              
                field[0]
                lastName
              
              
                fieldIndexed[0]
                true
              
              
                fieldTest[0]
                NOTNULL
              
              
                field[1]
                insureDependents
              
              
                fieldTest[1]
                EQUAL
              
              
                fieldValue[1]
                true
              
              
                fieldJoin
                AND
              
            
            
            
            
            ]]>

            Which is read as follows: The firstName field is only required if the lastName field is non-null. Since fieldIndexed is true, it means that lastName must be a property of the same indexed field as firstName. Same thing for dob, except that we validate for date if not blank.

            The coverageType is only required if the lastName for the same indexed bean is not null, and also if the non-indexed field insureDependents is true.

            You can have an arbitrary number of fields by using the [n] syntax, the only restriction is that they must all be AND or OR, you can't mix.

            [Since Struts 1.2.0] You can force the clientside Javascript validation to check all constraints, instead of stopping at the first error. By setting a new property, stopOnFirstError, on the Validator PlugIn to false.

            Here's a sample configuration block that you could use in your Struts configuration file:

            
            
              
              
              
              ]]>
            
            
            

            A concise Struts Validator API Guide is available to help you get started.

            Check Your Form with Validator by James Holmes. Howto article in Oracle Magazine.

            Struts Validator: Validating Two Fields Match by Matt Raible. Howto article.

            DynaForms and the Validator by James Turner and Kevin Bedell. Sample chapter from Struts Kickstart; available as a free download (PDF).

            Validating user input by David Winterfeldt and Ted Husted. Sample chapter from Struts in Action; available as a free download (PDF).

            libstruts1.2-java-1.2.9/doc/userGuide/index.xml0000644000175000017500000003007610404045212022014 0ustar arnaudarnaud00000000000000 Craig R. McClanahan David Geary Mike Schachter Ted Husted Martin Cooper Arron Bates Cedric Dumoulin David Winterfeldt Chris Assenza dIon Gillard Dominique Plante Ed Burns Eric Wu James DeVries John Rousseau John Ueltzhoeffer Larry McCay Mark Budai Matthias Kerkhoff Paul Runyan Robert Hayden Robert Leland Stanley Santiago Wong Kok Kai Donald Ball Dan Walker Eddie Bush Yann Cebron David Graham The Struts User's Guide - Table of Contents

            Next: Preface

            libstruts1.2-java-1.2.9/doc/userGuide/installation-1.0.xml0000644000175000017500000003664410404045204023712 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Martin Cooper Ted Husted The Struts Framework Project - Installation (1.0)

            The Struts binary distribution needs three other software packages installed to operate. You may already have these installed on your system. To build Struts from source you may need to acquire and install several others. The complete list is as follows:

            • Java Development Kit - You must download and install a Java2 (version 1.2 or later) Java Development Kit implementation for your operating system platform. A good starting point for locating Java Development Kit distributions is http://java.sun.com/j2se.
            • Servlet Container - You must download and install a servlet container that is compatible with the Servlet API Specification, version 2.2 or later, and the JavaServer Pages (JSP) Specification, version 1.1 or later. One popular choice is to download Apache's Tomcat (version 3.1 or later required, version 3.2 or later recommended).
            • XML Parser - Struts requires the presence of an XML parser that is compatible with the Java API for XML Parsing (JAXP) specification, 1.0 or later. You can download and install the JAXP reference implementation, which is required for building the Struts source distribution. In Struts-based web applications, you may replace the reference implementation classes with any other JAXP compliant parser, such as Xerces. See detailed instructions related to the parser in the instructions for building and installing Struts, below.
            • Ant Build System - If you are building Struts from the source distribution, you must download and install version 1.3 or later of the Ant build system. This package is also strongly recommended for use in developing your own web applications based on Struts.
              • If you are using the release version of Ant version 1.3, you will also need to download the "optional.jar" file that contains the implementation of Ant's <style> command.
              • Make sure that the "ant" and "ant.bat" scripts are executable, by adding the $ANT_HOME/bin directory to your PATH environment variable.
            • JDBC 2.0 Optional Package Classes - Struts supports an optional implementation of javax.sql.DataSource, so it requires the API classes to be compiled. They can be downloaded from http://java.sun.com/products/jdbc/download.html.
            • Xalan XSLT Processor - If you are building Struts from the source distribution, you must download and install version 1.2 (problems have been reported with current versions of Xalan 2.0) of the Xalan XSLT processor (which also includes the Xerces XML parser), or use the version of Xalan included in the JAXP 1.1 release. This processor is used to convert the Struts documentation from its internal XML-based format into the HTML that is presented in the Struts documentation application.

            First, download a binary distribution of Struts by following the instructions here. Then, make sure you have downloaded and installed the prerequisite software packages described above.

            Unpack the Struts binary distribution into a convenient directory. (If you build Struts from the source distribution, the result of the build will already be an unpacked binary distribution for you). The distribution consists of the following contents:

            • lib/struts.jar - This JAR file contains all of the Java classes included in Struts. It should be copied into the WEB-INF/lib directory of your web application. WARNING - If you are going to be hosting multiple Struts based applications on the same servlet container, you will be tempted to place the struts.jar file into the shared repository supported by your container. Be advised that this will like cause you to encounter ClassNotFoundException problems unless all of your application classes are stored in the shared repository.
            • lib/struts*.tld - These are the "tag library descriptor" files that describe the custom tags in the various Struts tag libraries. They should be copied into the WEB-INF directory of your web application.
            • webapps/struts-blank.war - This is a simple "web application archive" file containing a basic starting point for building your own Struts-based applications.
            • webapps/struts-documentation.war - This is a "web application archive" file containing all of the Struts documentation found on the Struts web site (including these pages). You can install this web application on any servlet container compatible with Servlet API 2.2 or later.
            • webapps/struts-example.war - This is an example web application that uses a large percentage of Struts features. You can install this web application on any servlet container compatible with the Servlet 2.2 (or later) and JSP 1.1 (or later) specifications. If an XML parser is not made available to web applications by your container, you will need to add one to the WEB-INF/lib directory of this web application.
            • webapps/struts-exercise-taglib.war - This web application contains test pages for the various custom tags supported by Struts. It is primarily of use to developers who are enhancing the Struts custom tag libraries, but may also be useful as simple examples of the usage of various Struts tags.
            • webapps/struts-template.war - This web application both introduces and demonstrates the Struts template tags.
            • webapps/struts-upload.war - This web application is a quick example of uploading files using the Struts framework.

            To use Struts in your own application, you will need to follow these steps:

            • Copy the file lib/struts.jar from the Struts distribution into the WEB-INF/lib directory of your web application.
            • Copy the all of the files that match lib/struts*.tld from the Struts distribution into the WEB-INF directory of your web application.
            • Modify the WEB-INF/web.xml file for your web application to include a <servlet> element to define the controller servlet, and a <servlet-mapping> element to establish which request URIs are mapped to this servlet. Use the WEB-INF/web.xml file from the Struts example application for a detailed example of the required syntax.
            • Modify the WEB-INF/web.xml file of your web application to include the following tag library declarations:
            <taglib>
              <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
              <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
            </taglib>
            
            <taglib>
              <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
              <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
            </taglib>
            
            <taglib>
              <taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
              <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
            </taglib>
            
            <taglib>
              <taglib-uri>/WEB-INF/struts-template.tld</taglib-uri>
              <taglib-location>/WEB-INF/struts-template.tld</taglib-location>
            </taglib>
            
            • Create a file WEB-INF/struts-config.xml that defines the action mappings and other characteristics of your specific application. You can use the struts-config.xml file from the Struts example application for a detailed example of the required syntax.
            • At the top of each JSP page that will use the Struts custom tags, add line(s) declaring the Struts custom tag libraries used on this particular page, like this:
            <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
            <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
            <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
            <%@ taglib uri="/WEB-INF/struts-template.tld" prefix="template" %>
            
            • When compiling the Java classes that comprise your application, be sure to include the struts.jar file (copied earlier) on the CLASSPATH that is submitted to the compiler.

            WARNING - Do NOT add struts.jar to the classpath of your servlet container in an attempt to avoid placing it in the /WEB-INF/lib directory of each individual web app! Doing so will cause problems with ClassNotFoundException exceptions.

            For most containers, you need only to:

            • Copy the WAR files in your Struts /webapp directory to your containers webapps directory.
            • In some cases, you may need to restart your container if it is running.

            Status of various containers

            First, download a source distribution of Struts by following the instructions here. Then, make sure you have downloaded and installed all of the prerequisite software packages described above.

            To build Struts, you will need to customize the build process to the details of your development environment as follows:

            • The Struts source distribution uses a file named build.properties (in the top-level directory of the distribution) to identify the location of external components that Struts depends on.
            • There is no build.properties file included with the source distribution. However, there is an example file named build.properties.example that you can copy to build.properties and then customize.
            • The properties you must configure in build.properties are:
              • catalina.home - Pathname to the directory of your binary distribution of Tomcat 4.0 (required only if you wish to use the deploy.catalina target).
              • servletapi.home - Pathname to the directory of your binary distribution of the Servlet API classes.
              • tomcat.home - Pathname to the directory of your binary distribution of Tomcat 3.2 (required only if you wish to use the deploy.tomcat target).
              • xerces.home - Pathname to the directory of your binary distribution of the Xerces parser, version 1.2 or 1.3 (required only if you wish to use the deploy.catalina target).
            • If you are a Struts developer with write access to the CVS repository, be sure that you do NOT check in a copy of the build.properties file, since it will be different for each individual developer.

            To build a "distribution" version of Struts, first change your current directory to the directory in which you have unpacked the Struts source distribution, and (if necessary) create or customize the build.properties file as described above. Then, type:

                    ant dist
            

            This command will create a binary distribution of Struts, in a directory named dist (relative to where you are compiling from). This directory contains an exact replica of the files included in a binary distribution of Struts, as described in the preceding section.

            libstruts1.2-java-1.2.9/doc/userGuide/installation-ip.xml0000644000175000017500000000352010404045230024006 0ustar arnaudarnaud00000000000000 Stanley Santiago The Struts Framework Project - Installation - iPlanet

            iPlanet Application Server 6.0

            Service Pack 2 is recommended.

            NOTE: At present, the Struts example application still uses a non-Serializable servlet context attribute, and will not run in an environment that requires them, like iPlanet Application Server.

            iPlanet Web Server 4.2

            Here are the issues I ran into while moving my struts based application from Tomcat (supports WebApps and WAR) to iWS 4.1 (does NOT support Webapps and WAR).

            Webapps and WAR will be supported in iWS 5.0, as mentioned in iWS5.0 roadmap.

            Classpath issues.

            This s pretty straightforward. Since there is no notion of WEB-INF/lib and WEB-INF/classes the classpath has to be explicitly set in $SERVER_ROOT/config/jvm12.conf.

            Context relative paths

            All URLs should be visible from the document root. In my case I just created a symbolic link from $DOCROOT/myapp to webapps/myapp.

            Extension mapping

            The config file $SERVER_ROOT/config/rules.properties has a similar mechanism as in web.xml.

            I have this in my rules.properties which forwards all urls ending with "do" to the servlet whose logical name is action.

            ####
                @.*[.]do$=action
            ####

            Back to Installation

            libstruts1.2-java-1.2.9/doc/userGuide/installation-ipas.xml0000644000175000017500000001722010404045242024337 0ustar arnaudarnaud00000000000000 John Ueltzhoeffer The Struts Framework Project - Installation - iPortal Application Server

            iPortal Application Server 1.3

            Tested with: Windows 2000

            Important Note:

            At the moment, iPAS 1.3 is not fully compliant with the JSP 1.1/1.2 specification.

            Specifically, the automatic type conversions for custom tag parameters specified in "Issue 7" of the JSP 1.1 Errata and in the JSP 1.2 Proposed Final Draft have not yet been implemented.

            As it stands, JSP pages that make use of Struts taglibs whose parameters require conversion (such as booleans) will not compile under JRun. This includes the Struts Example Application. Attempting to run the example application will result in an exception similar to the following being thrown:

            /struts-example/index.jsp:
            
            Compilation failed [IT_Builder:1000]
             at com.iona.j2ee.builder.JavaBuilder.build(JavaBuilder.java:84)
             at com.iona.j2ee.builder.JspBuilder.build(JspBuilder.java:51)
             at com.iona.j2ee.builder.WarBuilder.build(WarBuilder.java:111)
             at com.iona.j2ee.builder.EarBuilder.build(EarBuilder.java:99)
             at com.iona.j2ee.builder.EarBuilder.main(EarBuilder.java:223)
             at iportal.build.main(build.java:14)
             ocale(boolean) in org.apache.struts.taglib.html.HtmlTag
               cannot be applied to (java.lang.String)
                   _x0.setLocale("true");
                        ^
             1 error
            

            (For more details see refer to:
            http://www.mail-archive.com/struts-user@jakarta.apache.org/msg01860.html )

            The following instructions describe how to install the Struts Example Application under iPAS 1.3. A subsequent section describes how the Struts Example Application can be patched to work with Struts.

            The following instructions assume the following:

            • iPortal Application Server 1.3 has been installed.
            • Both the Strut and XML Parser libraries are in your classpath.

            Installing the struts example application

            • Start iPAS Services by clicking on the [Start iPAS Services] menu item.
            • Start the iPortal Application Server by clicking on the [iPortal Application Server] menu item.
            • Start a command shell. Change to the $INSTALLDIR\IONA and run the setenvs.bat file.
            • Create a directory called jars.

            Now run the EARSCO tool. Type java iportal.earsco and at the prompts do:

            • Next
            • Type in the application name of struts-example then click next.
            • In step three click the check box and enter the name of the WAR struts-example.Then click next.
            • Click on Finish.

            Now you must copy the contents of the struts-example war into the EARSCO directory structure as follows:

            Under $INSTALLDIR\IONA\jars\struts-examples\src\struts-example.war you copy contents into the following directories: etc, lib, src and web.

            • Copy all files in the root directory
              $INSTALLDIR\jakarta-tomcat-3.2.1\webapps\struts-example\WEB-INF
              into the earsco directory
              $INSTALLDIR\IONA\jars\struts-examples\src\struts-example.war\etc
              Do not copy in the classes or lib directories.
            • Copy the directory
              $INSTALLDIR\jakarta-tomcat-3.2.1\webapps\struts-example\WEB-INF\lib
              into the earsco directory
              $INSTALLDIR\IONA\jars\struts-examples\src\struts-example.war\lib
            • Copy the directory
              $INSTALLDIR\jakarta-tomcat-3.2.1\webapps\struts-example\WEB-INF\classes
              into the earsco directory
              $INSTALLDIR\IONA\jars\struts-examples\src\struts-example.war\src
            • Copy the directory
              $INSTALLDIR\jakarta-tomcat-3.2.1\webapps\struts-example
              into the earsco directory
              $INSTALLDIR\IONA\jars\struts-examples\src\struts-example.war\web
            • Next modify the application.xml in the
              $INSTALLDIR\IONA\jars\struts-examples\etc directory to this:
                 <application>
            
                 <!-- Add display name -->
                       <display-name>Struts Example</display-name>
                             .......
            
            • Last update the cc.xml in the
              $INSTALLDIR\IONA\jars\struts-examples directory as follows:
                 <configuration>
                   <web-app>
                     <context-root>struts-example</context-root>
                   </web-app>
                 </configuration>
            

            Now you are ready to compile and deploy the struts-example.

            To compile the source from the $INSTALLDIR\IONA\jars\struts-examples type

            java iportal.build

            Next, type

            java iportal.deploy

            The first time you deploy you will be prompted by a Deploy wizard and asked to supply both locations of the struts-example.ear file and of the cc.xml file. Once both elements have been satisfied continue until the finish button and click it. The EAR file should deploy successfully.

            Test the sample application by using the following URL in the browser:

            http://hostname:9000/struts-example/index.jsp

            The struts-documentation.war can be installed using the same procedure.

            Patching the struts example application

            As mentioned at the beginning of these notes, the Struts Example Application will not run under iPAS 1.3 without modification. The following changes will need to be made:

            • index.jsp, logon.jsp: Change <html:html locale="true"> to
              <html:html locale=<%= true %>>
            • registration.jsp, subscription.jsp: Change all instances of filter="true" to
              filter=<%= true %>

            Back to Installation

            libstruts1.2-java-1.2.9/doc/userGuide/installation-jetty.xml0000644000175000017500000001013010404045212024530 0ustar arnaudarnaud00000000000000 Paul Runyan The Struts Framework Project - Installation - Jetty

            Jetty Java HTTP Servlet Server

            Jetty is a small, pure-Java, open source HTTP server that supports the 2.3 Servlet spec and JSP 1.2. Jetty can be downloaded from http://www.mortbay.com/jetty.

            Struts WAR files run nearly straight out of the box when placed underneath Jetty's webapps directory. The one additional step needed is to add an entry for each WAR file to the Jetty server configuration file in order to map the appropriate request paths to the added Struts web applications (using "<Call name="addWebApplication">...").

            So for example, if you have copied the WAR files that come with the Struts binary distribution into a subdirectory of the "%JETTY_HOME%/webapps" called "%JETTY_HOME%/webapps/struts" so that you have:

            - %JETTY_HOME%/webapps/struts/struts-documentation.war
            - %JETTY_HOME%/webapps/struts/struts-example.war
            - %JETTY_HOME%/webapps/struts/struts-exercise-taglib.war
            - %JETTY_HOME%/webapps/struts/struts-upload.war
            - %JETTY_HOME%/webapps/struts/struts-blank.war
            

            And you want to run Jetty using the demo.xml configuration file that comes with Jetty, just add the following block to demo.xml, anywhere after the Listeners are declared.

            <!-- Jetty config for Struts BEGIN -->
            
              <Call name="addWebApplication">
                <Arg>/struts/struts-documentation/*</Arg>
                <Arg><SystemProperty name="jetty.home"
                    default="."/>/webapps/struts/struts-documentation.war</Arg>
                <Arg><SystemProperty name="jetty.home"
                    default="."/>/etc/webdefault.xml</Arg>
                <Arg type="boolean">false</Arg> <!-- if true,
                    expand war in temp dir -->
              </Call>
            
              <Call name="addWebApplication">
                <Arg>/struts/struts-example/*</Arg>
                <Arg><SystemProperty name="jetty.home"
                    default="."/>/webapps/struts/struts-example.war</Arg>
                <Arg><SystemProperty name="jetty.home"
                    default="."/>/etc/webdefault.xml</Arg>
                <Arg type="boolean">true</Arg> <!-- if true,
                    expand war in temp dir -->
              </Call>
            
              <Call name="addWebApplication">
                <Arg>/struts/struts-exercise-taglib/*</Arg>
                <Arg><SystemProperty name="jetty.home"
                    default="."/>/webapps/struts/struts-exercise-taglib.war</Arg>
                <Arg><SystemProperty name="jetty.home"
                    default="."/>/etc/webdefault.xml</Arg>
                <Arg type="boolean">false</Arg> <!-- if true,
                    expand war in temp dir -->
              </Call>
            
              <Call name="addWebApplication">
                <Arg>/struts/struts-upload/*</Arg>
                <Arg><SystemProperty name="jetty.home"
                    default="."/>/webapps/struts/struts-upload.war</Arg>
                <Arg><SystemProperty name="jetty.home"
                    default="."/>/etc/webdefault.xml</Arg>
                <Arg type="boolean">true</Arg> <!-- if true,
                    expand war in temp dir -->
              </Call>
            
              <Call name="addWebApplication">
                <Arg>/struts/struts-blank/*</Arg>
                <Arg><SystemProperty name="jetty.home"
                    default="."/>/webapps/struts/struts-blank.war</Arg>
                <Arg><SystemProperty name="jetty.home"
                    default="."/>/etc/webdefault.xml</Arg>
                <Arg type="boolean">true</Arg> <!-- if true,
                    expand war in temp dir -->
              </Call>
            
            <!-- Jetty config for Struts END -->
            

            Back to Installation

            libstruts1.2-java-1.2.9/doc/userGuide/installation-jr30.xml0000644000175000017500000001574410404045236024175 0ustar arnaudarnaud00000000000000 Eric Wu Mark Budai The Struts Framework Project - Installation - JRun 3.0

            JRUN 3.0 SP2A, VERSION 3.02A.11614

            Tested with: Microsoft IIS 5.0, Windows 2000

            Important Note:

            At the moment, JRun is not fully compliant with the JSP 1.1/1.2 specification.

            Specifically, the automatic type conversions for custom tag parameters specified in "Issue 7" of the JSP 1.1 Errata and in the JSP 1.2 Proposed Final Draft have not yet been implemented.

            As it stands, JSP pages that make use of Struts taglibs whose parameters require conversion (such as booleans) will not compile under JRun. This includes the Struts Example Application. Attempting to run the example application will result in an exception similar to the following being thrown:

            /struts-example/index.jsp:
            
            javax.servlet.ServletException: Compilation error occurred:
            
            allaire.jrun.scripting.DefaultCFE:
            
            Errors reported by compiler:
            c:/JRun/servers/default/Struts
              Example/WEB-INF/jsp/jrun__index2ejspa.java:41:1:41:27:
            
            Error: No match was found for method "setLocale(java.lang.String)".
            

            (For more details see refer to:
            http://www.mail-archive.com/struts-user@jakarta.apache.org/msg01860.html)

            The following instructions describe how to install the Struts Example Application under JRun. A subsequent section describes how the Struts Example Application can be patched to work with Struts

            The following instructions assume the following:

            • JRun has been installed and integrated with the web server of choice.
            • $APP_SERVER_NAME is the name of the application server used to host the application. (When JRun is first installed, it creates an application server called JRun Default Server).
            • $APP_SERVER_DIR is the directory used to hold applications hosted by $APP_SERVER_NAME. For the JRun Default Server, the directory is $JRUN_HOME/servers/default where $JRUN_HOME is the directory where JRun is installed.

            Installing the struts example application

            • Login to the JRun Management Console.
            • On the left pane, select $APP_SERVER_NAME. A page showing the current server status will be shown on the right pane.
            • On the right pane, click on the WAR Deployment link. A page containing a list of the currently deployed web applications will be shown.
            • On the right pane, click on Deploy an Application. Complete the Web Application Information form as follows:
              • Servlet War File or Directory: Enter the full path where struts-example.war is found or click on Browse to select the path.
              • JRun Server Name: $APP_SERVER_NAME
              • Application Name: Struts Example
              • Application Hosts: All Hosts
              • Application URL: /struts-example
              • Application Deploy Directory: will default to $APP_SERVER_NAME/Struts Example (or the name as specified for Application Name).
            • Once the form is complete, click on the Deploy button.
            • If deployment is successful, restart the application server by clicking on $APP_SERVER_NAME on the left pane. A page showing the current server status will be shown on the right pane. Click the Restart Server button to restart the application server.
            • Test the sample application by using the following URL in the browser:
              http://hostname/struts-example/index.jsp
              The struts-documentation.war can be installed using the same procedure.

            Installing unpacked web applications

            The above steps should be followed for applications deployed as *.war files.

            For unpacked web applications, configuration involves the following steps:

            • From the JRun Management Console, select $APP_SERVER_NAME (on the left pane) and click on WAR Deployment (on the right pane).
            • On the right pane, click on Create an Application and complete the Web Application Information form as follows:
            • JRun Server Name: $APP_SERVER_NAME
              • Application Name: myApplication
              • Application Hosts: All Hosts
              • Application URL: /myApplication
              • Application Deploy Directory: will default to
                $APP_SERVER_NAME/myApplication
            • Click on Create to submit the form.
            • Once the web application is created, install and configure the struts components (struts.jar, struts*.tld, etc) for the web application under $APP_SERVER_NAME/myApplication/WEB-INF
            • Install the remaining components of the application: .class files, JSP pages,.properties files etc as required.
            • To configure the extension mapping of the request URI (ie *.do) to the action servlet, expand $APP_SERVER_NAME on the left pane, expand the Web Applications branch and click on myApplication. The right pane will display the configuration options for myApplication. Click on Servlet URL Mappings. A list of existing mappings will be shown. Click the Edit button and create the following entry:
              • Virtual Path/Extension: *.do
              • Servlet Invoked: action
            • Click on the Update button to save the changes.
            • Restart the application server.
            • The application should now be accessible from the browser.

            The JRun application server will need to be restarted each time one of the following changes are made to the web application:

            • .class or .jar files are modified
            • .properties files are modified
            • .xml files are modified

            Patching the struts example application

            As mentioned at the beginning of these notes, the Struts Example Application will not run under JRun without modification. The following changes will need to be made:

            • index.jsp, logon.jsp: Change <html:html locale="true"> to
              <html:html locale=<%= true %>>
            • logon.jsp: Change <html:html redisplay="true"> to
              <html:html redisplay=<%= true %>>
            • registration.jsp, subscription.jsp: Change all instances of filter="true" to
              filter=<%= true %>

            • Author: Eric Wu, Mark Budai

            Back to Installation

            libstruts1.2-java-1.2.9/doc/userGuide/installation-novell.xml0000644000175000017500000000744610404045222024711 0ustar arnaudarnaud00000000000000 John Berry The Struts Framework Project - Installation - Novell ExteNd Application Server

            Novell ExteNd Application Server 4.0

            Using the ExteNd Workbench to deploy a WAR to the Novell ExteNd application server:
            • Start the Novell ExteNd application server.
            • Using the ExteNd Workbench, create a new project:
              1. File > New Project
              2. Select Deploy-Only and click OK
              3. Under Archive File select the appropriate Struts WAR file
              4. Indicate the type of file (i.e. WAR 1.2)
              5. Give the Deploy-Only project a name (i.e. struts-example)
              6. Give the Deploy-Only project a location (i.e. D:\Struts)
              7. Click Next
              8. Review the material to be sure everything is correct
              9. Click Finish
            • Setting up a deployment plan and server profile:
              1. Right click on the project icon you just created and select Deployment Plan
              2. Select OK when asked to create a new deployment plan
              3. Save the deployment plan
              4. Create a server profile: Projects > Deployment Settings
              5. Click on the Server Profiles tab
              6. Select a server profile and click OK
            • Deploy the project:
              1. Project > Deploy Archive
            Deploying a WAR from a command line using SilverCmd:
            • Start the SilverStream application server.
            • Create an XML deployment plan for the struts-example.war application.
            • Call the file struts-example-depl-plan.xml. You can use the following contents for the file:
              
              
              
                
                  struts-example.war
                  true
                  
                    struts-example
                  
                
              
              ]]>
            • Create an XML deployment plan for the struts-documentation.war application.
            • Call the file struts-documentation-depl-plan.xml. You can use the following contents for the file:
              
              
              
                
                  struts-documentation.war
                  true
                  
                    struts-documentation
                  
                
              
              ]]>
            • Run the following "SilverCmd DeployWAR" commands to deploy the applications. You can change 'localhost' to whatever server you are deploying to. You can change 'Silvermaster' to whatever database you are deploying to.

            Back to Installation

            libstruts1.2-java-1.2.9/doc/userGuide/installation-oas.xml0000644000175000017500000000733210404045224024170 0ustar arnaudarnaud00000000000000 The Struts Framework Project - Installation - Orion Application Server

            Orion Application Server

            In the steps below, $ORION_HOME refers to the directory in which you have installed Orion, and $STRUTS_HOME is the directory in which you unpacked the Struts binary distribution.

            • Modify the file $ORION_HOME/config/application.xml to define the two new applications, by adding the following declarations, immediately following the web-module directive for the default web application:
            <web-module id="strutsDoc"
            path="$STRUTS_HOME/webapps/struts-documentation.war"/>
            <web-module id="strutsExample"
            path="$STRUTS_HOME/webapps/struts-example.war"/>
            
            • Modify the file $ORION_HOME/config/default-web-site.xml (or the configuration file for any other Orion web site) to include the following declarations, after the declaration for the <default-web-app> if any:
            <web-app application="default" name="strutsDoc"
              root="/struts-documentation"/>
            <web-app application="default" name="strutsExample"
              root="/struts-example"/>
            
            • After you start Orion, you should now be able to access these applications (assuming you haven't changed the port number from the default of 80) at:
            http://localhost/struts-documentation
            http://localhost/struts-example
            
            • Versions of Orion up to at least 1.0.3 have a bug related to ServletContext.getResource() calls that prevent the Struts example application from working out of the box. This manifests itself as a JSP error when you try to access the example application, with the following message:
              javax.servlet.jsp.JspException: Missing resources attributeorg.apache.struts.action.MESSAGE
              followed by an error traceback. There will also be an initialization error message in the ORION_HOME/log/global-application.log log file. To work around this problem, you can take the following steps:
              • Go to the $STRUTS_HOME/webapps directory, where you will note that Orion has automatically expanded each web application into an unpacked directory structure.
              • Go to the $STRUTS_HOME/webapps/struts-example/WEB-INF directory, and copy the file struts-config.xml one directory up (that is, into $STRUTS_HOME/webapps/struts-example.
              • Modify the $STRUTS_HOME/webapps/struts-example/WEB-INF/web.xm file, changing the value of the "config" initialization parameter (for the action servlet) from /WEB-INF/struts-config.xml to /action.xml.
              • Restart Orion, and you should be able to access the example application.
              • Note that this workaround has a negative security-related side effect: your struts-conifig.xml file can now be retrieved by remote clients at the following URL:
                http://localhost/struts-example/struts-config.xml
                Therefore, you should be sure you do not store sensitive information (such as database passwords) in this file.

            Back to Installation

            libstruts1.2-java-1.2.9/doc/userGuide/installation-sas.xml0000644000175000017500000000535210404045174024200 0ustar arnaudarnaud00000000000000 John Rousseau The Struts Framework Project - Installation - Silverstream Application Server

            SilverStream Application Server 3.7.1 and later

            • Start the SilverStream application server.
            • Create an XML deployment plan for the "struts-example.war" application. Call the file "struts-example-depl-plan.xml". You can use the following contents for the file

            ----- cut here -----

            <?xml version="1.0" encoding="UTF-8"?>
            <!DOCTYPE warJarOptions PUBLIC
              "-//SilverStream Software, Inc.//DTD J2EE WAR Deployment Plan//EN"
              "deploy_war.dtd">
            <warJarOptions>
            <warJar>
            <warJarName>struts-example.war</warJarName>
            <isEnabled>true</isEnabled>
            <urls><el>struts-example</el></urls>
            </warJar>
            </warJarOptions>
            

            ----- cut here -----


            Create an XML deployment plan for the "struts-documentation.war" application. Call the file "struts-documentation-depl-plan.xml". You can use the following contents for the file:


            ----- cut here -----

            <?xml version="1.0" encoding="UTF-8"?>
            <!DOCTYPE warJarOptions PUBLIC
              "-//SilverStream Software, Inc.//DTD J2EE WAR Deployment Plan//EN"
              "deploy_war.dtd">
            <warJarOptions>
            <warJar>
            <warJarName>struts-documentation.war</warJarName>
            <isEnabled>true</isEnabled>
            <urls><el>struts-documentation</el></urls>
            </warJar>
            </warJarOptions>
            

            ----- cut here -----


            Run the following "SilverCmd DeployWAR" commands to deploy the applications. You can change 'localhost' to whatever server you are deploying to. You can change 'Silvermaster' to whatever database you are deploying to.

            • SilverCmd DeployWar localhost Silvermaster struts-example.war -f struts-example-depl-plan.xml
            • SilverCmd DeployWar localhost Silvermaster struts-documentation.war -f struts-documentation-depl-plan.xml

            • Author: John Rousseau

            Back to Installation

            libstruts1.2-java-1.2.9/doc/userGuide/installation-tc.xml0000644000175000017500000000740010404045204024006 0ustar arnaudarnaud00000000000000 Craig R. McClanahan The Struts Framework Project - Installation - Tomcat with Apache

            Tomcat 3.2.1 With Apache

            Note that the instructions for Tomcat 4 will be different than those for Tomcat 3, but the Tomcat 4.0 web connector is still under development. Versions of Tomcat prior to 3.2.1 are not recommend for use with Struts.

            • These instructions assume you have successfully integrated Tomcat with Apache according to the Tomcat documentation.
            • Copy "struts-documentation.war" and "struts-example.war" to your $TOMCAT_HOME/webapps directory
            • Restart Tomcat if it is already running
            • Tomcat will generate a file "$TOMCAT_HOME/conf/tomcat-apache.conf" that will be used by Apache. This file is regenerated every time you start Tomcat, so copy this file to a safe place (such as your Apache configuration directory; on Unix systems this is usually /usr/local/apache/conf.
            • If you are running Tomcat 3.1, Tomcat will not have generated the entries for your new applications. Add the following lines to the tomcat-apache.conf file that you have saved, replacing $TOMCAT_HOME with the path to your Tomcat home directory:
            Alias /struts-documentation "$TOMCAT_HOME/webapps/struts-documentation
              <Directory "$TOMCAT_HOME/webapps/struts-documentation>
                Options Indexes FollowSymLinks
              </Directory>
                ApJServMount /struts-documentation/servlet /struts-documentation
              <Location "/struts-documentation/WEB-INF/">
                AllowOverride None
                deny from all
              </Location>
            Alias /struts-example "$TOMCAT_HOME/webapps/struts-example"
              <Directory "$TOMCAT_HOME/webapps/struts-example>
                Options Indexes FollowSymLinks
              </Directory>
                ApJServMount /struts-example/servlet /struts-example
              <Location "/struts-example/WEB-INF/">
                AllowOverride None
                deny from all
              </Location>
            
            • The generated file above does not know anything about extension mappings defined in a web.xml file, so the "*.do" URIs that go to the controller servlet will not be recognized. To fix this, add the following line to the saved version of "tomcat-apache.conf", after the corresponding line for the .jsp extension:
              AddHandler jserv-servlet .do
            • Ensure that the saved version of "tomcat-apache.conf" is referenced in your Apache "httpd.conf" configuration file. A typical use would have the following line at the bottom of "httpd.conf":
              Include /usr/local/apache/conf/tomcat-apache.conf
            • In order to recognize "index.jsp" as a default page for web applications, search in your "httpd.conf" for a "DirectoryIndex" directive. If you have one, add "index.jsp" to the end of the list, so that it might look like this:
              DirectoryIndex index.html index.jsp
              If you do not have such an entry, add one like this:
              DirectoryIndex index.jsp
            • Restart Apache to make it aware of the new applications. You should now be able to access the applications from a browser like this:
              http://localhost/struts-documentation
              http://localhost/struts-example

            • Author: Craig R. McClanahan

            Back to Installation

            libstruts1.2-java-1.2.9/doc/userGuide/installation-ubs72.xml0000644000175000017500000000462010404045172024347 0ustar arnaudarnaud00000000000000 Mike Schachter The Struts Framework Project - Installation - Bluestone UBS 7.2

            Bluestone Universal Business Server 7.2

            • You need UBS version 7.2 to run war file applications. The UBS 7.2.2 evaluation is located here. If you're using version 7.2.1, you need to download the WAR file patch, located in the product enhancement section of Bluestone's website here
            • After installation of the correct version and/or patch of UBS 7.2, you need to modify your apserver.txt file to point to the correct directory for your war file applications. Look for the section that says something similar to the following:
                [SaServletEngine.class]
                session_affinity=1
                type=1
                program=/SaServletEngine.class
                file_path=f:\webapps
                host=localhost:20000
              
            • Use the directory specified by the "file_path" variable, or modify it to point to your own custom webapp directory. Copy the "struts-documention.war" and "struts-example.war" files into that webapp directory, and start the UBS (read documentation distributed with UBS for information on how to start it if necessary). Your webapps are now accessible from the following URL:

              http://localhost/<PLUGIN>/SaServletEngine.class/struts-example/
              http://localhost/<PLUGIN>/SaServletEngine.class/struts-documentation/

            • Note: "<PLUGIN>" represents the plugin you are using for your specific webserver. For Apache on Windows, it might be "cgi-bin/SaCGI.exe", for IIS on Windows, it might be "scripts/SaCGI.exe" or "scripts/ISAPI.dll". Consult the UBS documentation for more information.

            • Author: Mike Schachter

            Back to Installation

            libstruts1.2-java-1.2.9/doc/userGuide/installation-was352-x.xml0000644000175000017500000001016310404045246024677 0ustar arnaudarnaud00000000000000 Chris Assenza The Struts Framework Project - Installation - WebSphere 3.5.2

            WebSphere Application Server 3.5 and the Example Application

            Server: Windows 2000 Server with WebSphere 3.5.3 Advanced

            1. Start up the adminserver.
            2. Start up Admin Console.
            3. Use the Convert War file task to convert the struts-example.war from the struts-b1 distrib as-is.
            4. Convert to the default_server, default servlet engine and standard install directory (c:\websphere\appserver\hosts\default_host).
            5. Create a WEB-INF directory in the servlets dir and copy struts-config.xml, database.xml AND web.xml into it (Keep WEB-INF with all the TLD's under web - both WEB-INF directories must be present).
            6. Copy jaxp 1.0.1's (NOT 1.1.1's) jaxp.jar and parser.jar to the servlets directory of the strut-example webapp.
            7. In the servlets directory, open struts.jar with WinZip. Extract the three DTD's (struts-config_1_0.dtd, web-app_2_2.dtd and web-app_2_3.dtd) into the servlets directory making sure you use folder names (so the files extract to servlets/org/apache/struts/resources).
            8. Click on struts-example in the Admin Console under Default Server/Default Servlet Engine and click the advanced tab on the right hand side of the screen.
            9. Down where it says Default Error Page, enter /ErrorReporter and then click Apply.
            10. Start the Default Server via the Admin Console. You should see a whole bunch of ActionServlet messages in the default_host_stdout.log file with no exceptions.
            11. Via a browser accessed the app using http://localhost/struts-example/index.jsp.
            12. If it returns "Application not Available" then go back to the Admin Console, right-click on struts-example and select Restart WebApp.
            13. Once it reports success, go back to the URL above and try again - it should work flawlessly.

            For whatever reason, some installations do not like XML files that reference PUBLIC DTD's - if in looking at the default_host_stdout.log file you see errors about invalid public URL references during DTD registrations, or if your pages say "cannot find //logon or //saveRegistration (ie. action mappings) then do the following:

            1. Stop Default Server
            2. Go to servlets\WEB-INF\ and edit web.xml and struts_config.xml.
            3. In the DOCTYPE declaration, change the word PUBLIC to SYSTEM and completely remove the line that reads "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" from web.xml and remove "-//Apache Software Foundation//DTD Struts Configuration 1.0//EN" from struts-config.xml.
            4. Save these changes and go back to step 10 above.

            Just as a troubleshooting guide -

            If you are getting errors like "Cannot find ActionMappings, etc..." or "Cannot find key org.apache.struts.MESSAGE" then your application is most likely still bombing on the struts-config issue that Richard discovered. The above steps SHOULD correct that leaving nothing out. If you are getting 404 errors about //logon or something not found, then you are still having XML config troubles and it is not initializing the Action servlet properly. Follow the steps above in regards to DTD's and it should work.

            As a final thought, I obviously haven't gotten to test too much but I don't believe that there are ANY coding changes that need to be made to the actual struts source. Everything about getting it to work in WebSphere has been a WebSphere configuration issue thus far (and I don't think I'll be having any more).

            If changing the DTD's to SYSTEM, do so ONLY AFTER using the Convert a War util. Ant doesn't seem to like it the other way! :)


            Back to Installation

            libstruts1.2-java-1.2.9/doc/userGuide/installation-was352.xml0000644000175000017500000001254510404045224024434 0ustar arnaudarnaud00000000000000 dIon Gillard The Struts Framework Project - Installation - WebSphere 3.5.2

            WebSphere Application Server 3.5 FixPack 2

            • In the steps below, $WAS_HOME refers to the directory in which you have installed WebSphere Application Server, and $STRUTS_HOME is the directory in which you unpacked the Struts binary distribution.
            • WebSphere before 3.5.2 did not support JSP 1.1 and Servlet 2.2, which made it difficult to get Struts functioning without massive code changes. Please upgrade to 3.5.2 (3.5 with FixPack 2) before attempting to use Struts. See http://www.ibm.com/software/webservers/appserv/efix.html for download and install instructions on FixPack 2 for WebSphere 3.5
            • Warning: Struts will not work with WebSphere 3.5.2 out of the box. Fixes expected to be in WebSphere 3.5.3 (not released at time of writing) should correct this. However, you can successfully get WebSphere 3.5.2 working with Struts.
            • Make sure the WebSphere Application Server is started. Under Windows NT/2000, it's the "IBM WS AdminServer" service.
            • Start the WebSphere Administrative Console.
            • Once it's started, select "Convert a War File" from the tasks toolbar option, or from the Console->Tasks menu. This will cause a "Convert War File" Wizard dialog to appear.
            • Select a Servlet Engine to host the web application that will result from converting the War file, e.g. "Default Servlet Engine", by expanding the tree control under Nodes. Press the Next button.
            • Select a Virtual Host to associate the resulting web application with, e.g. "default host". Press the Next button.
            • Press the Browse button and choose the $STRUTS_HOME/webapps/struts-example.war. Press the Next button
            • Select a destination directory for the resulting web application, e.g. $WAS_HOME/hosts/default_host. Press the Next button
            • Enter a "Web Application Web Path", e.g. struts-example, and a "Web Application Name", e.g. struts-example. Press the Finish button.
            • You should, after a lengthy pause, get a message box with the text Command "convert war file" completed successfully. Press Ok.
            • You now need to add jaxp.jar and a jaxp compatible parser, e.g. parser.jar from JAXP 1.0.1 to the struts-example web application's servlets directory, e.g. $WAS_HOME/AppServer/hosts/default_host/struts-example/servlets
            • At this point, if WAS 3.5.2 correctly implemented Servlet 2.2, all would be fine. However, WAS 3.5.2 returns null for calls to ServletContext.getResource(String) or ServletContext.getResourceAsStream(String). This manifests itself as an exception in the application server stdout log, e.g. default_server_stdout.log.
            • Warning: Don't be fooled by the fact that the web application starts successfully from the Admin Console. It actually doesn't. The Admin Console is lying. If you try to access the webapp e.g. http://localhost/struts-example/ it will fail.
            • At this point, you need to patch the Struts source. There are three places getResourceAsStream is called:
                ResourceTag.doStartTag()
                ActionServlet.initMapping()
                PropertyMessageResources.loadLocale(String)
            

            of these, ActionServlet is the most important.

            • Change the source from
                // Acquire an input stream to our configuration resource
                InputStream input = getServletContext().getResourceAsStream(config);
            

            to

                // Acquire an input stream to our configuration resource
                InputStream input = new
                  java.io.FileInputStream(getServletContext().getRealPath(config));
             
            • Make similar changes to the other classes if necessary.
            • Recompile ActionServlet and copy the .class file to
              $WAS_HOME/AppServer/hosts/default_host/struts-example/servlets/
              org/apache/struts/action/ActionServlet.class
            • Another bug with WAS 3.5.2's classloaders is that Class.getResource() wont load a resource from a jar, so you must copy
              $STRUTS_HOME/lib/struts-config_1_0.dtd
              to
              $WAS_HOME/AppServer/hosts/default_host/struts-example/servlets/org/apache/struts/resources/struts-config_1_0.dtd
              or be connected to the Internet to fetch the dtd from the Jakarta web site.
            • Start your webapp in the Admin Console
            • Test the example application by loading the following URL in your browser of choice: http://localhost/struts-example/" >http://localhost/struts-example/

            • Author: dIon Gillard

            Back to Installation

            libstruts1.2-java-1.2.9/doc/userGuide/installation-wls5.xml0000644000175000017500000001451510404045246024305 0ustar arnaudarnaud00000000000000 Robert Hayden Wong Kok Kai The Struts Framework Project - Installation - Weblogic 5.1 sp8

            Weblogic 5.1 (service pack 8)

            • Obtain and install the Xerces XML parser (problems have been reported with the Sun reference implementation). Put xerces.jar in your WebLogic system path.
            • Obtain and unpack the Struts binary distribution (this procedure assumes it was extracted to c:\jakarta-struts).
            • Add an entry to weblogic.properties for each of the Struts web applications that you would like to configure. For example, to make the struts-example application available, add the following line to weblogic.properties:
              weblogic.httpd.webApp.strutsexample=
              c:/jakarta-struts/webapps/struts-example.war
            • You do not need to include struts.jar or any of the application specific classes in the WebLogic classpath, since this will be done automatically (unless deploying an unpacked web archive- see below).
            • Start WebLogic server and point your web browser to the struts application. For example, to connect to the example application added in step 3:
              http://localhost:7001/strutsexample
            • This example application depends on the Struts specific resource file ApplicationResources.properties to be present on the classpath. However, WebLogic only extracts *.class files from the archive so this file will not be found, resulting in an error the first time it is needed- something similar to: javax.servlet.ServletException: runtime failure in custom tag 'message'. Steps 6 & 7 will need to be performed for this application, and any other that relies on ApplicationResources.properties.
            • Extract ApplicationResources.properties from the *.war file, and manually copy it to the respective package in the _tmp_war_ directory WebLogic created for this application. Again referring to the struts-example application, this would be:
              c:\jakarta-struts\webapps\WEB-INF\_tmp_war_strutsexample
            • Restart WebLogic. You will now be able to run the application:
              http://localhost:7001/strutsexample

            The above steps should be followed for applications deployed as *.war files. For unpacked web applications, configuration involves adding both struts.jar and /WEB-INF/classes to the WebLogic classpath. For this reason, I would suggest deploying applications as war files to WebLogic. However, the same example application can be successfully deployed in extracted format by modifying weblogic.properties (assuming the war was extracted to directory webapps/struts-example):

            weblogic.httpd.webApp.strutsexample=
            c:/jakarta-struts/webapps/struts-example/

            And starting WebLogic with the updated WebLogic classpath. For example:

            c:\jdk1.3\bin\java -ms16m -mx64m
            -classpath c:\weblogic\lib\weblogic510sp8boot.jar;


            Additional Recommendations

            • Servlet and JSP-Reloading should be turned off. First, you pay a performance penalty. Depending on the number of JSPs, the number of requests and the configured checking interval, the server will slow down. Second, with JSP- and Servlet reloading, one opens the door for various Weblogic classloader problems, that are difficult to diagnose, difficult to handle and often lead to lost HTTP-sessions.
            • Set the name of the sessionid to JSESSIONID, if cookies are used for session tracking and to jsessionid, if sessions are URL-based. (There are additional problems related to URL-based sessions, caused from BEA's way to encode the session id (J2EE-incompatible) as query-param. Especially <bean:include> will not work with URL-based sessions yet. However, using the correct session name solves at least some problems.)
            • Configure the JSP-Servlet registration in weblogic.properties for maximum J2EE-compliance and/or for maximum performance.

            The JSP-Servlet supports some initialization parameters that can be customized to get best performance, maximum compliance or (as shown below) easier debugging:

              weblogic.httpd.initArgs.*.jsp=\
                   pageCheckSeconds=-1,\
                    setEmptyStrings=false,\
                     compileCommand=./_jspCompiler_.cmd,\
                         workingDir=/weblogic/myserver/tmp_classfiles,\
                      keepgenerated=true,\
                              debug=true,\
                            verbose=true
            

            In the above example, the batch file (_jspCompiler_.cmd) invokes jikes which results dramatically reduced startup times (jikes is about three times faster than javac.) The batchfile contains only a single line:

            @jikes -g -nowarn %*

            The next configuration could be used when all tests have been done and speed is the major concern ...

              weblogic.httpd.initArgs.*.jsp=\
                   pageCheckSeconds=-1,\
                    setEmptyStrings=false,\
                     compileCommand=./_jspCompiler_.cmd,\
                         workingDir=/weblogic/myserver/tmp_classfiles,\
                      keepgenerated=false,\
                              debug=false,\
                            verbose=false
            

            ... together with ...

            @jikes -O -nowarn %*

            Weblogic supports similar settings through <context-params> in web.xml (Please read the latest documentation at the BEA website for details.)

            For additional issues, see also More fixes for WLS 5.1 SP8 from the Struts Developer mailing list


            • Author: Robert Hayden
            • Author: Wong Kok Kai
            • Author: Matthias Kerkhoff

            Back to Installation

            libstruts1.2-java-1.2.9/doc/userGuide/installation.xml0000644000175000017500000005250110404045230023403 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Mike Schachter Ted Husted Martin Cooper Chris Assenza dIon Gillard Eric Wu John Rousseau John Ueltzhoeffer Mark Budai Paul Runyan Robert Hayden Stanley Santiago Wong Kok Kai Rob Leland John Berry The Struts Framework Project - Installation (1.1)

            The Struts binary distribution needs three other software packages installed to operate. You may already have these installed on your system. To build Struts from source you may need to acquire and install several others. The complete list is as follows:

            • Java Development Kit - You must download and install a Java2 (version 1.2 or later) Java Development Kit implementation for your operating system platform. A good starting point for locating Java Development Kit distributions is http://java.sun.com/j2se. To build Struts, Java 1.4.2 (the latest production JDK) is suggested.
            • Servlet Container - You must download and install a servlet container that is compatible with the Servlet API Specification, version 2.2 or later, and the JavaServer Pages (JSP) Specification, version 1.1 or later. One popular choice is to download Apache's Tomcat, but any compliant container should work well with Struts.
            • XML Parser - Struts requires the presence of an XML parser that is compatible with the Java API for XML Parsing (JAXP) specification, 1.1 or later. This is bundled with J2SE 1.4 and later. For earlier versions of Java, the easiest way to obtain JAXP is probably by downloading the Web Services Developers Kit (1.1 or later!). See the Sun JAXP FAQ for more information.) In Struts-based web applications, you may replace the reference implementation classes with any other JAXP compliant parser, such as Xerces. See detailed instructions related to the parser in the instructions for building and installing Struts, below.
            • Ant Build System - If you are building Struts from the source distribution, you must download and install version 1.5.4 (or later) of the Ant build system.
              • Make sure that the "ant" and "ant.bat" scripts are executable, by adding the $ANT_HOME/bin directory to your PATH environment variable.
              • Copy and review either the "build.properties.sample" or "build.properties.sample.lib" file as "build.properties". The latter is recommended if you are not active in Jakarta Commons development.
              • Maven property files are also provided, but the Maven build is still experimental. New developers may find Maven easier to use, since it acquires the appropriate JARs automatically.
            • Servlet API Classes - In order to compile Struts itself, or applications that use Struts, you will need a servlet.jar file containing the Servlet and JSP API classes. Most servlet containers include this JAR file. Otherwise, you can get the Servlet API classes distribution from here.
            • JDBC 2.0 Optional Package Classes - Struts supports an optional implementation of javax.sql.DataSource, so it requires the API classes to be compiled. They can be downloaded from http://java.sun.com/products/jdbc/download.html.
            • Other Packages - Struts utilizes several packages from other open source projects, especially the Jakarta Commons Project. These are the packages which must be available if you wish to build Struts from source: ANTLR is a public domain library; all other libraries are distributed under the Apache Software License. For your convenience, the requisite JARs are provided as a single download under the lib sub-directory with each release distribution. Please note that the minimum requirements may change between releases, and some JARs may need to be updated to use the latest Nightly Build.
            • Xalan XSLT Processor - If you are building Struts from the source distribution, you will need a version of Xalan to perform XSLT transformations. If you are using the JAXP/1.1 XML parser, you should use the version of xalan.jar shipped with it. Otherwise, download and install version 1.2 of Xalan from here.
            • Unit tests - To verify your build against the JUnit and Cactus unit tests, three other packages must be available:

            First, download a binary distribution of Struts by following the instructions here. Then, make sure you have downloaded and installed the prerequisite software packages described above.

            Unpack the Struts binary distribution into a convenient directory. (If you build Struts from the source distribution, the result of the build will already be an unpacked binary distribution for you). The distribution consists of the following contents:

            • lib/*.jar - The struts.jar contains the Java classes distributed by the Struts project. The other JAR files contain packages from other projects that are imported by Struts. When you launch a Struts-based application, these JARs need to be available to your application, usually by copying them to the application's WEB-INF/lib directory.
              WARNING - If you are going to be hosting multiple Struts based applications on the same servlet container, you will be tempted to place the struts.jar file into the shared repository supported by your container. Be advised that this may cause ClassNotFoundException problems unless all of your application classes are stored in the shared repository.
            • lib/*.tld - These are the "tag library descriptor" files that describe the custom tags in the various Struts tag libraries. The tld file for any Struts taglibs that you use should be copied into the WEB-INF directory of your web application. (Applications under Servlet 2.3 containers can omit this step if the standard uri is referenced.)
            • webapps/struts-blank.war - This is a simple "web application archive" file containing a basic starting point for building your own Struts-based applications.
            • webapps/struts-documentation.war - This is a "web application archive" file containing all of the Struts documentation found on the Struts web site (including these pages). You can install this web application on any servlet container compatible with Servlet API 2.2 or later.
            • webapps/struts-examples.war - This "modular" applications combines several usefule demonstrations:
              • Exercise-Taglib - This application module contains test pages for the various custom tags distributed with Struts. It is primarily of use to developers who are enhancing the Struts custom tag libraries, but may also be useful as simple examples of the usage of various Struts tags.
              • Upload - This application module is a quick example of uploading files using the Struts framework.
              • Validator - This application module is an example of using the validator framework, using both the server-side and optional client-side validation.
            • webapps/struts-mailreader.war - This is an example web application that uses a large percentage of Struts features. You can install this web application on any servlet container compatible with the Servlet 2.2 (or later) and JSP 1.1 (or later) specifications. If an XML parser is not made available to web applications by your container, you will need to add one to the WEB-INF/lib directory of this web application.
            • webapps/tiles-documentation.war - This web application documents how to use tiles, and was developed using tiles.

            To use Struts in your own application, you will need to follow these steps:

            • Copy the lib/*.jar files from the Struts distribution into the WEB-INF/lib directory of your web application.
            • Copy the lib/*.tld files for any Struts taglibs you use from the Struts distribution into the WEB-INF directory of your web application.
            • Modify the WEB-INF/web.xml file for your web application to include a <servlet> element to define the controller servlet, and a <servlet-mapping> element to establish which request URIs are mapped to this servlet. Use the WEB-INF/web.xml file from the Struts example application for a detailed example of the required syntax.
            • Modify the WEB-INF/web.xml file of your web application to include the following tag library declarations (Servlet 2.3 can omit this step if the standard uri is referenced):
            <taglib>
              <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
              <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
            </taglib>
            
            <taglib>
              <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
              <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
            </taglib>
            
            <taglib>
              <taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
              <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
            </taglib>
            
            • Create a file WEB-INF/struts-config.xml that defines the action mappings and other characteristics of your specific application. You can use the struts-config.xml file from the Struts example application for a detailed example of the required syntax.
            • At the top of each JSP page that will use the Struts custom tags, add line(s) declaring the Struts custom tag libraries used on this particular page, like this:
            <%@ taglib uri="/tags/struts-bean" prefix="bean" %>
            <%@ taglib uri="/tags/struts-html" prefix="html" %>
            <%@ taglib uri="/tags/struts-logic" prefix="logic" %>
            
            • When compiling the Java classes that comprise your application, be sure to include the JAR files (copied earlier) on the CLASSPATH that is submitted to the compiler.

            For most containers, you need only to:

            • Copy the WAR files in your Struts /webapp directory to your containers webapps directory.
            • In some cases, you may need to restart your container if it is running.

            Running Struts Applications Under A Security Manager

            Many application servers execute web applications under the control of a Java security manager, with restricted permissions on what classes in the web application can do. If you utilize form beans with mapped properties, you may encounter security exceptions unless you add the following permission to the set of permissions granted to your Struts application's codebase:

              permission java.lang.RuntimePermission "accessDeclaredMembers";
            

            Consult the documentation on your application server for more information about how to configure additional security manager permissions.

            Installing Struts on Various Containers

            First, download a source distribution of Struts by following the instructions here. Then, make sure you have downloaded and installed all of the prerequisite software packages described above.

            To build Struts, you will need to customize the build process to the details of your development environment as follows:

            • The Struts source distribution uses a file named build.properties (in the top-level directory of the distribution) to identify the location of external components that Struts depends on.
            • There is no build.properties file included with the source distribution. However, there is an example file named build.properties.example that you can copy to build.properties and then customize.
            • The properties you must configure in build.properties are:
              • catalina.home - Pathname to the directory of your binary distribution of Tomcat 4.0 (required only if you wish to use the deploy.catalina target).
              • commons-beanutils.jar - Pathname of the BeanUtils package JAR file from the Jakarta Commons project.
              • commons-collections.jar - Pathname of the Collections package JAR file from the Jakarta Commons project.
              • commons-digester.jar - Pathname of the Digester package JAR file from the Jakarta Commons project.
              • commons-fileupload.jar - Pathname of the Fileupload package JAR file from the Jakarta Commons project.
              • commons-lang.jar - Pathname of the Lang package JAR file from the Jakarta Commons project.
              • commons-logging.jar - Pathname of the Logging package JAR file from the Jakarta Commons project.
              • commons-validator.jar - Pathname of the Validator package JAR file from the Jakarta Commons project.
              • servletapi.home - Pathname to the directory of your binary distribution of the Servlet API classes.
              • tomcat.home - Pathname to the directory of your binary distribution of Tomcat 3.2 (required only if you wish to use the deploy.tomcat target).
              • xerces.home - Pathname to the directory of your binary distribution of the Xerces parser, version 1.2 or 1.3 (required only if you wish to use the deploy.catalina target).
            • If you are a Struts developer with write access to the CVS repository, be sure that you do NOT check in a copy of the build.properties file, since it will be different for each individual developer.

            To build a "distribution" version of Struts, first change your current directory to the directory in which you have unpacked the Struts source distribution, and (if necessary) create or customize the build.properties file as described above. Then, type:

                    ant dist
            

            This command will create a binary distribution of Struts, in a directory named dist (relative to where you are compiling from). This directory contains an exact replica of the files included in a binary distribution of Struts, as described in the preceding section.

            IMPORTANT NOTE: The struts.jar, as well as the JAR files from the Jakarta Commons project, must be in your classpath when compiling Struts. The build.xml provided does this automatically. If you use your development machine to test Struts application locally, be sure that the struts.jar is NOT on your classpath when your container is running.

            Next: FAQs and HowTos

            libstruts1.2-java-1.2.9/doc/userGuide/introduction.xml0000644000175000017500000005336710404045204023437 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Mike Schachter Larry McCay Ted Husted Martin Cooper Ed Burns Dominique Plante The Struts User's Guide - Introduction

            When Java servlets were first invented, many programmers quickly realized that they were a Good Thing. They were faster and more powerful that standard CGI, portable, and infinitely extensible.

            But writing HTML to send to the browser in endless println() statements was tiresome and problematic. The answer to that was JavaServer Pages, which turned Servlet writing inside-out. Now developers could easily mix HTML with Java code, and have all the advantages of servlets. The sky was the limit!

            Java web applications quickly became "JSP-centric". This in-and-of itself was not a Bad Thing, but it did little to resolve flow control issues and other problems endemic to web applications.

            Another model was clearly needed ...

            Many clever developers realized that JavaServer Pages AND servlets could be used together to deploy web applications. The servlets could help with the control-flow, and the JSPs could focus on the nasty business of writing HTML. In due course, using JSPs and servlets together became known as Model 2 (meaning, presumably, that using JSPs alone was Model 1).

            Of course, there is nothing new under the Sun ... and many have been quick to point out that JSP's Model 2 follows the classic Model-View-Controller design pattern abstracted from the venerable Smalltalk MVC framework. Java Web developers now tend to use the terms Model 2 and MVC interchangeably. In this guide, we use the MVC paradigm to describe the Struts architecture, which might be best termed a Model 2/MVC design.

            The Struts project was launched in May 2000 by Craig R. McClanahan to provide a standard MVC framework to the Java community. In July 2001, Struts 1.0 was released, and IOHO, Java Model 2 development will never be quite the same.

            In the MVC design pattern, application flow is mediated by a central Controller. The Controller delegates requests - in our case, HTTP requests - to an appropriate handler. The handlers are tied to a Model, and each handler acts as an adapter between the request and the Model. The Model represents, or encapsulates, an application's business logic or state. Control is usually then forwarded back through the Controller to the appropriate View. The forwarding can be determined by consulting a set of mappings, usually loaded from a database or configuration file. This provides a loose coupling between the View and Model, which can make applications significantly easier to create and maintain.

            The Model portion of an MVC-based system can be often be divided into two major subsystems -- the internal state of the system and the actions that can be taken to change that state.

            In grammatical terms, we might think about state information as nouns (things) and actions as verbs (changes to the state of those things).

            Many applications represent the internal state of the system as a set of one or more JavaBeans. The bean properties represent the details of the system' state. Depending on your application's complexity, these beans may be self contained (and know how to persist their own state), or they may be facades that know how to retrieve the system's state from another component. This component may be a database, a search engine, an Entity Enterprise JavaBean, a LDAP server, or something else entirely.

            Large-scale applications will often represent the set of possible business operations as methods that can be called on the bean or beans maintaining the state information. For example, you might have a shopping cart bean, stored in session scope for each current user, with properties that represent the current set of items that the user has decided to purchase. This bean might also have a checkOut() method that authorizes the user's credit card and sends the order to the warehouse to be picked and shipped. Other systems will represent the available operations separately, perhaps as Session Enterprise JavaBeans (Session EJBs).

            In a smaller scale application, on the other hand, the available operations might be embedded within the Action classes that are part of the Struts control layer. This can be useful when the logic is very simple or where reuse of the business logic in other environments is not contemplated.

            The Struts framework architecture is flexible enough to support most any approach to accessing the Model, but we strongly recommend that you separate the business logic ("how it's done") from the role that Action classes play ("what to do"). 'nuff said.

            For more about adapting your application's Model to Struts, see the Building Model Components chapter.

            The View portion of a Struts-based application is most often constructed using JavaServer Pages (JSP) technology. JSP pages can contain static HTML (or XML) text called "template text", plus the ability to insert dynamic content based on the interpretation (at page request time) of special action tags. The JSP environment includes a set of standard action tags, such as <jsp:useBean> whose purpose is described in the JavaServer Pages Specification. In addition to the built-in actions, there is a standard facility to define your own tags, which are organized into "custom tag libraries."

            Struts includes a set of custom tag libraries that facilitate creating user interfaces that are fully internationalized and interact gracefully with ActionForm beans. ActionForms capture and validate whatever input is required by the application.

            For more about the Struts taglibs and using presentation pages with the framework, see the "Building View Components" chapter. Additional documentation regarding the taglibs is also available in the Developer Guides (see menu).

            The Controller portion of the application is focused on receiving requests from the client (typically a user running a web browser), deciding what business logic function is to be performed, and then delegating responsibility for producing the next phase of the user interface to an appropriate View component. In Struts, the primary component of the Controller is a servlet of class ActionServlet. This servlet is configured by defining a set of ActionMappings. An ActionMapping defines a path that is matched against the request URI of the incoming request and usually specifies the fully qualified class name of an Action class. All Actions are subclassed from org.apache.struts.action.Action. Actions encapsulate calls to business logic classes, interpret the outcome, and ultimately dispatch control to the appropriate View component to create the response.

            Struts also supports the ability to use ActionMapping classes that have additional properties beyond the standard ones required to operate the framework. This allows you to store additional information specific to your application and still utilize the remaining features of the framework. In addition, Struts lets you define logical "names" to which control should be forwarded so that an action method can ask for the "Main Menu" page (for example), without knowing the location of the corresponding JSP page. These features greatly assist you in separating the control logic (what to do) with the view logic (how it's rendered).

            For more about the Struts control layer, see the Building Controller Components chapter.

            The Struts framework provides several components that make up the Control layer of a MVC-style application. These include a controller servlet, developer-defined request handlers, and several supporting objects.

            The Struts custom tag libraries provide direct support for the View layer of a MVC application. Some of these access the control-layer objects. Others are generic tags found convenient when writing applications. Other taglibs, including JSTL, can also be used with Struts. Other presentation technologies, like Velocity Templates and XSLT can also be used with Struts.

            The Model layer in a MVC application is often project-specific. Struts is designed to make it easy to access the business-end of your application, but leaves that part of the programming to other products, like JDBC, Enterprise Java Beans, Object Relational Bridge, or Simper, to name a few.

            Let's step through how this all fits together.

            When initialized, the controller parses a configuration file (struts-config.xml) and uses it to deploy other control layer objects. Together, these objects form the Struts Configuration. The Struts Configuration defines (among other things) the ActionMappings [org.apache.struts.action.ActionMappings] for an application.

            The Struts controller servlet consults the ActionMappings as it routes HTTP requests to other components in the framework. Requests may be forwarded to JavaServer Pages or Action [org.apache.struts.action.Action] subclasses provided by the Struts developer. Often, a request is first forwarded to an Action and then to a JSP (or other presentation page). The mappings help the controller turn HTTP requests into application actions.

            An individual ActionMapping [org.apache.struts.action.ActionMapping] will usually contain a number of properties including:

            • a request path (or "URI"),
            • the object type (Action subclass) to act upon the request, and
            • other properties as needed.

            The Action object can handle the request and respond to the client (usually a Web browser) or indicate that control should be forwarded elsewhere. For example, if a login succeeds, a login action may wish to forward the request onto the mainMenu page.

            Action objects have access to the application's controller servlet, and so have access to that servlet's methods. When forwarding control, an Action object can indirectly forward one or more shared objects, including JavaBeans, by placing them in one of the standard contexts shared by Java Servlets.

            For example, an Action object can create a shopping cart bean, add an item to the cart, place the bean in the session context, and then forward control to another mapping. That mapping may use a JavaServer Page to display the contents of the user's cart. Since each client has their own session, they will each also have their own shopping cart.

            In a Struts application, most of the business logic can be represented using JavaBeans. An Action can call the properties of a JavaBean without knowing how it actually works. This encapsulates the business logic, so that the Action can focus on error handling and where to forward control.

            JavaBeans can also be used to manage input forms. A key problem in designing Web applications is retaining and validating what a user has entered between requests. With Struts, you can define your own set of input bean classes, by subclassing ActionForm [org.apache.struts.action.ActionForm]. The ActionForm class makes it easy to store and validate the data for your application's input forms. The ActionForm bean is automatically saved in one of the standard, shared context collections, so that it can be used by other objects, like an Action object or another JSP.

            The form bean can be used by a JSP to collect data from the user ... by an Action object to validate the user-entered data ... and then by the JSP again to re-populate the form fields. In the case of validation errors, Struts has a shared mechanism for raising and displaying error messages.

            Another element of the Struts Configuration are the ActionFormBeans [org.apache.struts.action.ActionFormBeans]. This is a collection of descriptor objects that are used to create instances of the ActionForm objects at runtime. When a mapping needs an ActionForm, the servlet looks up the form-bean descriptor by name and uses it to create an ActionForm instance of the specified type.

            Here is the sequence of events that occur when a request calls for an mapping that uses an ActionForm:

            • The controller servlet either retrieves or creates the ActionForm bean instance.
            • The controller servlet passes the bean to the Action object.
            • If the request is being used to submit an input page, the Action object can examine the data. If necessary, the data can be sent back to the input form along with a list of messages to display on the page. Otherwise the data can be passed along to the business tier.
            • If the request is being used to create an input page, the Action object can populate the bean with any data that the input page might need.

            The Struts framework includes custom tags that can automatically populate fields from a JavaBean. All most JavaServer Pages really need to know about the rest of the framework is the field names to use and where to submit the form.

            Other Struts tags can automatically output messages queued by an Action or ActionForm and simply need to be integrated into the page's markup. The messages are designed for localization and will render the best available message for a user's locale.

            The Struts framework and its custom tag libraries were designed from the ground-up to support the internationalization features built into the Java platform. All the field labels and messages can be retrieved from a message resource. To provide messages for another language, simply add another file to the resource bundle.

            Internationalism aside, other benefits to the message resources approach are consistent labeling between forms, and the ability to review all labels and messages from a central location.

            For the simplest applications, an Action object may sometimes handle the business logic associated with a request. However, in most cases, an Action object should invoke another object, usually a JavaBean, to perform the actual business logic. This lets the Action focus on error handling and control flow, rather than business logic. To allow reuse on other platforms, business-logic JavaBeans should not refer to any Web application objects. The Action object should translate needed details from the HTTP request and pass those along to the business-logic beans as regular Java variables.

            In a database application, for example:

            • A business-logic bean will connect to and query the database,
            • The business-logic bean returns the result to the Action,
            • The Action stores the result in a form bean in the request,
            • The JavaServer Page displays the result in a HTML form.

            Neither the Action nor the JSP need to know (or care) from where the result comes. They just need to know how to package and display it.

            Other chapters in this document cover the various Struts components in greater detail. The Struts release also includes several Developer Guides covering various aspects of the frameworks, along with sample applications, the standard Javadoc API, and, of course, the complete source code!

            Struts is distributed under the Apache Software Foundation license. The code is copyrighted, but is free to use in any application.

            Next: Building Model Components

            libstruts1.2-java-1.2.9/doc/userGuide/preface.xml0000644000175000017500000012005310404045222022306 0ustar arnaudarnaud00000000000000 Ted Husted Ed Burns Craig R. McClanahan The Struts User's Guide - Preface: Core Technologies

            This User Guide is written for active web developers and assumes a working knowledge about how Java web applications are built. Before getting started, you should understand the basics of several core technologies:

            This chapter briefly defines each of these technologies but does not describe them in detail. For your convenience, links to further information are provided if you would like to learn more about a technology.

            If you are familiar with Java, but not these technologies, the best overall starting point is The Java Web Services Tutorial. This document is also available for download in PDF format.

            If you've created web applications for other platforms, you may be able to follow along and visit the other references as needed. The core technologies used by Struts are also used by most other Java web development products, so the background information will be useful in any Java project.

            If you are not familiar with the Java language generally, then the best starting point is The Java Tutorial. This overlaps with the Java Web Services Tutorial in some places, but the two work well together.

            For more about building Java application in general, see the New to Java tutorial.

            The World Wide Web was built over the Hypertext Transfer Protocol (HTTP) and the Hypertext Markup Language (HTML). A User Agent, like a web browser, uses HTTP to request a HTML document. The browser then formats and displays the document to its user. HTTP is used to transport more than HTML, but HTML is the lingua franca of the Web and web applications.

            While building web applications, some Java developers will write their own HTML. Others leave that responsibility to the page designers.

            For more about HTTP, HTML, and User Agents, see:

            A very important part of HTTP for the web developer is the request/response cycle. To use HTTP you have to make a request. A HTTP server, like a web server, is then obliged to respond. When you build your web application, you design it to react to a HTTP request by returning a HTTP response. Frameworks like Struts abstract much of these nuts and bolts, but it is important to understand what is happening behind the scenes.

            If you are not familiar with the HTTP request/response cycle, we strongly recommend the HTTP Overview in the Java Web Services Tutorial.

            Struts is written in the popular and versatile Java programming language. Java is an object-orientated language, and Struts makes good use of many object-orientated techniques. In addition, Java natively supports the concept of threads, which allows more than one task to be performed at the same time. A good understanding of Java, and especially object-orientated programming (OOP) and threading, will help you get the most out of Struts and this User Guide.

            For more about Java and threads, see

            Even if you have worked with Java and OOP before, it can also help to be aware of the programming challenges specific to creating and using application frameworks. For more about application frameworks, see the classic white papers

            These papers can be especially helpful if you are fact-finding or reviewing server-side frameworks.

            Like many Java applications, most of the Struts objects are designed as JavaBeans. Following the JavaBean design patterns makes the Struts classes easier to use -- both by Java developers and by Java development tools.

            Although JavaBeans were first created for visual elements, these object design patterns have been found to be useful as the basis for any reusable component, like those used by the Struts framework.

            For more about JavaBeans, see:

            Reflection is the process of determining which member fields and methods are available on an object. Introspection is a specialized form of reflection used by the JavaBean API. Using Introspection, we can determine which methods of a JavaBean are intended to be accessed by other objects. (The getters and the setters, for example.)

            The Struts framework uses Introspection to convert HTTP parameters into JavaBean properties and to populate HTML fields from JavaBean properties. This technique makes it easy to "roundtrip" properties between HTML forms and JavaBeans.

            For more about Reflection and Introspection, see

            JavaBeans store data as properties and may act on that data through other methods. JavaBeans are flexible and powerful objects but are not the only object that programmers use to store data. Another popular object is the Map [java.util.Map]. A Map is a simple collection of name and value pairs. Maps are often used "behind the scenes" as a flexible way to store dynamic data.

            DynaBeans combine the extensibility of JavaBeans with the flexibility of a Map. Defining even the simplest JavaBean requires defining a new class and coding a field and two methods for each property. The properties of a DynaBean can be configured via an XML descriptor. The virtual properties of a DynaBean can't be called by standard Java methods, but work well with components that rely on reflection and introspection.

            In a Struts application, you can use DynaBeans to describe your HTML forms. This strategy can avoid creating a formal JavaBean subclass to store a few simple properties.

            For more about DynaBeans, see

            Java applications, including web applications, are often configured using Properties files. Properties files are the basis for the ResourceBundles that Struts uses to provide message resources to an application.

            For more about Properties files, see:

            Java ResourceBundles use one or more Properties files to provide internationalized messages to users based their Locale. Support for localizing an application was built into Struts from the ground-up.

            For more about localization and ResourceBundles, see

            Since Java is an object-orientated language, the Java Servlet platform strives to cast HTTP into an object-orientated form. This strategy makes it easier for Java developers to concentrate on what they need their application to do -- rather than the mechanics of HTTP.

            HTTP provides a standard mechanism for extending servers called the Common Gateway Interface, or CGI. The server can pass a request to a CGI-aware program, and the program will pass back a response. Likewise, a Java-aware server can pass a request to a servlet container. The container can fulfill the request or it can pass the request back to the HTTP server. The container decides whether it can handle the request by checking its list of servlets. If there is a servlet registered for the request, the container passes the request to the servlet.

            When a request comes in, the container checks to see if there is a servlet registered for that request. If there is a match, the request is given to the servlet. If not, the request is returned to the HTTP server.

            It's the container's job to manages the servlet lifecycle. The container creates the servlets, invokes the servlets, and ultimately disposes the servlets.

            A servlet is generally a subclass of javax.servlet.http.HttpServlet. A servlet must implement four methods, which are invoked by the container as needed:

            • public void init(ServletConfig config) - Called by the servlet container when the servlet instance is first created, and before any request is processed.
            • public void doGet(HttpServletRequest request, HttpServletResponse response) - Called to process a specific request received using the HTTP GET protocol, which generates a corresponding dynamic response.
            • public void doPost(HttpServletRequest request, HttpServletResponse response) - Called to process a specific request received using the HTTP POST protocol, which generates a corresponding dynamic response.
            • public void destroy() - Called by the servlet container when it takes this servlet instance out of service, such as when a web application is being undeployed or when the entire container is being shut down.

            Struts provides a ready-to-use servlet for your application [org.apache.struts.action.ActionServlet]. As a Struts developer, you can then just write objects that the Struts ActionServlet calls when needed. But it is still helpful to understand the basics of what servlets are, and the role they play in a Java web application.

            For more about Java Servlets, see:

            To boost performance, the container can multi-thread servlets. Only one instance of a particular servlet is created, and each request for that servlet passes through the same object. This strategy helps the container make the best use of available resources. The tradeoff is that the servlet's doGet() and doPost() methods must be programmed in a thread-safe manner.

            For more about servlets and thread-safety, see:

            The ServletContext interface [javax.servlet.ServletContext] defines a servlet's view of the web application within which the servlet is running. It is accessible in a servlet via the getServletConfig() method, and in a JSP page as the application implicit variable. Servlet contexts provide several APIs that are very useful in building Struts based web applications:

            • Access To Web Application Resources - A servlet can access static resource files within the web application using the getResource() and getResourceAsStream() methods.
            • Servlet Context Attributes - The context makes available a storage place for Java objects, identified by string-valued keys. These attributes are global to the entire web application, and may be accessed by a servlet using the getAttribute(), getAttributeNames(), removeAttribute(), and setAttribute() methods. From a JSP page, servlet context attributes are also known as "application scope beans".

            For more about the servlet context, see:

            Each request processed by a servlet is represented by a Java interface, normally a HttpServletRequest [javax.servlet.http.HttpServletRequest]. The request interface provides an object-oriented mechanism to access all of the information that was included in the underlying HTTP request, including:

            • Cookies - The set of cookies included with this request are available via the getCookies() method.
            • Headers - HTTP headers that were included with the request are accessible by name. You can enumerate the names of all included headers.
            • Parameters - Request parameters, including those from the query string portion of the URL and from the embedded content of the request (POST only) are available by name.
            • Request Characteristics - Many other characteristics of the incoming HTTP request, such as the method used (normally GET or POST) the protocol scheme used ("http" or "https"), and similar values.
            • Request URI Information - The original request URI being processed is available via getRequestURI(). In addition, the constituent parts into which the servlet container parses the request URI (contextPath, servletPath, and pathInfo) are available separately.
            • User Information - If you are using Container Managed Security, you can ask for the username of the authenticated user, retrieve a Principal object representing the current user, and whether the current user is authorized for a specified role.

            In addition, servlet requests support request attributes (from JSP, these are "request scope beans"), analogous to the servlet context attributes described above. Request attributes are often used to communicate state information from a business logic class that generates it to a view component (such as a JSP page) that will use the information to produce the corresponding response.

            The servlet container guarantees that a particular request will be processed by a servlet on a single thread. Therefore, you do not generally have to worry about the thread safety of your access to request properties and attributes.

            For more about the servlet request, see:

            The primary purpose of a servlet is to process an incoming Servlet Request [javax.servlet.http.HttpServletRequest] and convert it into a corresponding response. This is performed by calling appropriate methods on the servlet response [javax.servlet.http.HttpServletResponse] interface. Available methods let you:

            • Set Headers - You can set HTTP headers that will be included in the response. The most important header is the Content-Type header, which tells your client what kind of information is included in the body of this response. This is typically set to text/html for an HTML page, or text/xml for an XML document.
            • Set Cookies - You can add cookies to the current response.
            • Send Error Responses - You can send an HTTP error status (instead of a usual page of content) using sendError().
            • Redirect To Another Resource - You can use the sendRedirect() method to redirect the client to some other URL that you specify.

            An important principle in using the servlet response APIs is that any methods you call to manipulate headers or cookies MUST be performed before the first buffer-full of content has been flushed to the client. The reason for this restriction is that such information is transmitted at the beginning of the HTTP response, so trying things like adding a header after the headers have already been sent will not be effective.

            When you are using presentation pages in a Model 2 application, you will not generally use the servlet response APIs directly. In the case of JavaServerPages, the JSP page compiler in your servlet container will convert your page into a servlet. The JSP servlet renders the response, interspersing dynamic information where you have interposed JSP custom tags.

            Other presentation systems, like Velocity Tools for Struts, may delegate rendering the response to a specialized servlet, but the same pattern holds true. You create a template, and the dynamic response is generated automatically from the template.

            For more about the servlet response, see:

            If you are using a servlet container based on version 2.3 or later of the Servlet Specification (such as Tomcat 4.x), you can take advantage of the new Filter APIs [javax.servlet.Filter] that let you compose a set of components that will process a request or response. Filters are aggregated into a chain in which each filter has a chance to process the request and response before and after it is processed by subsequent filters (and the servlet that is ultimately called).

            The Struts 1.x series (versions 1.0, 1.1, and so forth) require only version 2.2 or later of the Servlet Specification to be implemented by your servlet container, so Struts does not itself utilize Filters at this time. The next generation of Struts (the 2.x series) will be based on Servlet 2.3 or later. It is likely that the Struts 2.x release series will utilize filters.

            For more about filters, see:

            One of the key characteristics of HTTP is that it is stateless. In other words, there is nothing built in to HTTP that identifies a subsequent request from the same user as being related to a previous request from that user. This makes building an application that wants to engage in a conversation with the user over several requests to be somewhat difficult.

            To alleviate this difficulty, the servlet API provides a programmatic concept called a session, represented as an object that implements the javax.servlet.http.HttpSession interface. The servlet container will use one of two techniques (cookies or URL rewriting) to ensure that the next request from the same user will include the session id for this session, so that state information saved in the session can be associated with multiple requests. This state information is stored in session attributes (in JSP, they are known as "session scope beans").

            To avoid occupying resources forever when a user fails to complete an interaction, sessions have a configurable timeout interval. If the time gap between two requests exceeds this interval, the session will be timed out, and all session attributes removed. You define a default session timeout in your web application deployment descriptor, and you can dynamically change it for a particular session by calling the setMaxInactiveInterval() method.

            Unlike requests, you need to be concerned about thread safety on your session attributes (the methods these beans provide, not the getAttribute() and setAttribute() methods of the session itself). It is surprisingly easy for there to be multiple simultaneous requests from the same user, which will therefore access the same session.

            Another important consideration is that session attributes occupy memory in your server in between requests. This can have an impact on the number of simultaneous users that your application can support. If your application requirements include very large numbers of simultaneous users, you will likely want to minimize your use of session attributes, in an effort to control the overall amount of memory required to support your application.

            For more about sessions, see:

            The Java Servlet specification extends the HTTP request/response cycle by allowing the request to be dispatched, or forwarded, between resources. Struts uses this feature to pass a request through specialized components, each handling one aspect of the response. In the normal course, a request may pass through a controller object, a model object, and finally to a view object as part of a single request/response cycle.

            Just as a HTTP server can be used to host several distinct web sites, a servlet container can be used to host more than one web application. The Java servlet platform provides a well-defined mechanism for organizing and deploying web applications. Each application runs in its own namespace so that they can be developed and deployed separately. A web application can be assembled into a Web Application Archive, or WAR file. The single WAR can be uploaded to the server and automatically deployed.

            For more about web applications, see:

            Most aspects of an application's lifecycle are configured through an XML document called the Web application deployment descriptor. The schema of the descriptor, or web.xml, is given by the Java servlet specification.

            For more about the web.xml and application lifecycle events, see:

            One detail that can be configured in the Web application deployment descriptor is container-managed security. Declarative security can be used to protect requests for URIs that match given patterns. Pragmatic security can be used to fine-tune security make authorization decisions based on the time of day, the parameters of a call, or the internal state of a Web component. It can also be used to restrict authentication based on information in a database.

            For more information about container-managed security, see:

            JavaServer Pages (JSPs) are "inside-out servlets" that make it easier to create and maintain dynamic web pages. Instead of putting what you want to write to the HTTP response inside of a Java print statement, everything in a JavaServer Page is written to the response, except what is placed within special Java statements.

            With JavaServer Pages you can start by writing the page in standard HTML and then add the dynamic features using statements in the Java language or by using JSP tags. The Struts distribution includes several JSP tags that make it easy to access the framework's features from a JavaServer Page.

            For more about JavaServerPages and Custom JSP Tag Libraries see

            Many times, JSP tags work hand-in-hand with JavaBeans. The application sends a JavaBean to the JSP, and the JSP tag uses the bean to customize the page for the instant user. For more, see JavaBeans Components in JSP Pages in the Java Web Services Tutorial.

            Struts also works well with the new JavaServer Pages Standard Tag Library (JSTL) and taglibs from other sources, like JSP Tags and Jakarta Taglibs.

            One of the contributed libraries available for Struts is Struts-EL. This taglib is specifically designed to work well with JSTL. In particular, it uses the same "expression language" engine for evaluating tag attribute values as JSTL. This is in contrast to the original Struts tag library, which can only use "rtexprvalue"s (runtime scriptlet expressions) for dynamic attribute values.

            There are also toolkits available that make Struts easy to use with XSLT and Velocity Templates.

            The newest star on the Java horizon is Java Server Faces. JavaServer Faces technology simplifies building user interfaces for JavaServer applications, both for the web and for the desktop. The JSF specification is still under development, although an early-release reference implementation is available through the Java Web Services Developer Pack. Likewise, an early-release JavaServer Faces taglib for Struts, Struts-Faces, is also in early release and available through the nightly build.

            Java Server Faces is very compatible with Struts. Additional Struts/JSF integration tools are sure to appear as the specification is finalized and comes into widespread use.

            For more about JSTL and JavaServer Faces see

            The features provided by the Struts framework relies on a number of objects that are usually deployed using a configuration file written in Extensible Markup Language. XML is also used to configure Java web applications; so, this is yet another familiar approach.

            For more about XML configuration files and Java web applications, see

            For more about how XML is used with Java applications generally, see Java API for XML Processing in the Java Web Services Tutorial. While the framework makes good use of this API internally, it is not something most Struts developers would use when writing their own applications.

            When Java applications use XML configuration files, the elements are most often used as descriptors. The application does not use the XML elements directly. The elements are used to create and configure (or deploy) Java objects.

            The Java Servlet platform uses an XML configuration file to deploy servlets (among other things). Likewise, Struts uses an XML configuration file to deploy objects used by the framework.

            Struts provides the control layer for a web application. Developers can use this layer with other standard technologies to provide the data access and presentation layers. Some popular Data access technologies include:

            Presentation layer technologies include:

            While Struts can work with any approach to user authentication and authorization, Struts 1.1 and later offers direct support for the standard Java Authentication and Authorization Service (JAAS). You can now specify security roles on an action-by-action basis.

            For more about JAAS, see the Javasoft product page and the Web Application Security chapter of the Java Web Services Tutorial.

            Next: Introduction

            libstruts1.2-java-1.2.9/doc/userGuide/project.xml0000644000175000017500000000404510404045174022357 0ustar arnaudarnaud00000000000000 Getting Started libstruts1.2-java-1.2.9/doc/userGuide/release-notes-1.0-b1.xml0000644000175000017500000005755510404045206024265 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Martin Cooper Struts Release Notes (Version 1.0-beta-1)

            This document contains the release notes for Version 1.0-beta-1 of the Struts Framework. The following sections cover New Features and Changes since the Version 0.5 of Struts was made available.

            One global new feature to take note of is that Struts 1.0 requires a Java2 (JDK 1.2 or later) platform on which to run.

            The following major new features have been added to the controller servlet and associated classes (package org.apache.struts.action):

            • A new configuration file format, including the Document Type Definition (DTD) it is based on, is available for configuring the Struts controller servlet. Support for the previous format is still present, but will be phased out by the 1.0 release.
            • If enabled by setting the locale servlet initialization parameter to true, the controller servlet will now calculate a Locale for this user (based on the Locale returned by the servlet container, or by the HTTP headers included with the request) and store it in the user's session, unless the application has stored one there already.
            • Application Action instances now have lifecycle support. The controller servlet will call setServlet() with a non-null argument when the instance is first created, and call it with a null argument when the instance is being shut down.
            • The collection of "standard" Struts actions (in package org.apache.struts.actions) is kicked off with a set of simple actions that allow on-the-fly changes in the form bean, forward, and mapping definitions registered with the controller servlet. These actions would normally be configured behind security constraints to prevent interference with the operation of your application but can be very useful during development.
            • A new representation of error messages (ActionError and ActionErrors) has been created that allows errors to be associated with individual fields, and stores parameter replacement values along with the messages keys.
            • The ActionForm interface has been converted to a base class, with default implementations of some useful functionality. In addition, the new class provides two validate() methods that take the current mapping and current request as arguments, in order to provide access to more context information than just the properties of this particular form bean.
            • The new ActionForm class also provides two reset() methods that take the current mapping and current request as arguments, in order to provide access to more context information (particularly important on multi-page forms so that the form bean knows which properties to reset). Among other things, use of the reset() methods can prevent problems with checkbox fields -- simply reset boolean fields to false and they will be set to true (during auto-population of the form bean properties) only if the checkbox was actually checked.
            • All servlet context attributes created by the Struts controller servlet itself (but not the Struts Example application) now implement java.io.Serializable.
            • The Action class now includes support for "transactional tokens", so that you can detect cases where the user submitted a form, then went back and resubmitted the form again.

            The following major new features have been added to the struts-bean custom tag library (package org.apache.struts.taglib.bean):

            • A new custom tag, <bean:page>, is available to expose key items from the page context associated with the current page as scripting variables, and as page-scope beans. For example, you can use the following sequence to render the server information string returned by our servlet context:
                    <bean:page id="app" property="application"/>
                    <bean:write name="app" property="serverInfo"/>
                    
            • A new custom tag, <bean:struts>, is available to expose internal Struts configuration objects (form bean, forward, and mapping definitions) as scripting variables and page-scope beans. For example, you can use the following sequence to render the actual context-relative path of an ActionForward object:
                    <bean:struts id="link" forward="success"/>
                    <bean:write name="link" property="path"/>
                    
            • All of the tags in this library that accept a name attribute referring to a JSP bean now also accept an optional scope attribute to define the scope in which to search for that bean. If not specified, all scopes are searched.
            • The <bean:size> tag will create a bean that stores the number of elements of an array, Collection, or Map.

            The struts-html custom tag library has been created (package org.apache.struts.taglib.html), based on the old tags that were related to HTML form presentation. The following differences from the old tags are notable:

            • You must now reference the "struts-html.tld" TLD to access these tags.
            • All attribute names matching JavaScript event handlers are now all lower case (onClick --> onclick) to conform to XHTML.
            • The options1 tag has been eliminated since Struts is now based on Java2.
            • All tag implementation classes have had their final modifiers removed, and private instance variables changed to protected. This makes it possible to easily subclass these tags to provide specialized functionality.
            • The <html:link> tag has been enhanced to support a new page attribute that allows you to use context-relative URIs in a portable manner.
            • A new <html:html> tag has been created that renders an HTML <html> element with appropriate lang and xml:lang attributes, based on the locale stored for the user's session (if there is one).
            • A new <rewrite> tag has been created that renders a request URI, possibly encoded with a session identifier, based on exactly the same rules used by the <link> tag that generates hyperlinks. These constants can be useful when you are creating JavaScript code that needs to be aware of Struts addressing concepts.
            • The options tag now supports a new collection attribute, which can be used to specify a collection whose beans have properties that return the value (to be returned to the server) and the label (to be displayed to the user) from a single collection. The previous support for processing parallel collections is still available.
            • The form tag has been enhanced to look up the name of the form bean, it's Java class, and the scope in which the bean should be created or accessed, from the corresponding action mapping entry in the "struts-config.xml" file, if the name, scope, and type attributes are not specified. This removes the need to make changes in two places when these values are changed.
            • A new <image> tag has been added, to create HTML input tags of type "image".
            • The form tag has been enhanced to read its configuration from a corresponding action mapping entry in the "struts-config.xml" file, if the name, scope, and type attributes are not specified. It can look up the name of the form bean, its Java class, the scope in which the bean should be created or accessed, plus the path to which the form should be submitted. This removes the need to make changes in two places when these values are changed. It works for cases where the controller servlet is extension mapped or path mapped.
            • The <html:img> tag has been added, to render an HTML <img> tag.

            A new package of Actions and associated classes for handling file uploads has been created (package org.apache.struts.upload):

            • The basic package of file upload handling actions has been created.
            • An example application illustrating the use of the new features has been added (webapps/struts-upload.war).

            The following major new features have been added to the utility classes library (package org.apache.struts.util):

            • Initial implementation of a JDBC data source that implements the javax.sql.DataSource interface from the JDBC 2.0 Standard Extensions API. This implementation may be configured based on new extensions to the Struts configuration file DTD, and the configured data sources / connection pools are made available to application components as a servlet context attribute (i.e. an application scope bean).
            • The previous implementation of MessageResources, which was ultimately based on java.util.ResourceBundle, has been completely replaced and re-implemented. The primary features of the new implementation are:
              • All components stored as servlet context attributes now implement the java.io.Serializable interface, to better integrate with application servers that prefer this.
              • The MessageResources and MessageResourcesFactory classes have been abstracted so that you can easily create your own implementations that derive their message strings from resources other than property files.
            • Property gets and sets made through PropertyUtils can now use a new syntax for indexed and nested properties.
            • Conversion to and from numeric types now support a configurable default value to use when conversion fails.

            The following major new features have been added to the Struts Example Application:

            • The form beans used in the example application now use request scope rather than session scope. This is the preferred approach for single page forms that contain all of your relevant properties, because there is no need to maintain such form beans across requests. Note that the action classes have been coded so that they work with either request scope or session scope beans.
            • The Struts Example Application has been updated to utilize the new (separated) custom tag libraries, rather than the old combined one, as well as the latest features of the tags being used.
            • A "Walking Tour of the Struts Example Application" has been added, to highlight features for newcomers to Struts.

            The following major new documentation updates have been added to Struts:

            • All documentation is generated from XML input files, using a standard stylesheet to create a common look and feel.
            • Developer Guides for the Java classes in the org.apache.struts.digester and org.apache.struts.util packages.
            • Developer Guides for the following Struts custom tag libraries have been added: struts-bean, struts-html, struts-logic, and struts-template.
            • The Struts Users Guide has been brought up to date with respect to all of the changes since Struts 0.5, and separated into multiple HTML pages for easy reading.
            • Installation information has been updated to include platform-specific notes, issues, and workarounds.
            • A new resources page now points at external information and resources related to Struts.
            • A new example application, struts-blank, is included as a quick starting point for new application development.

            The following changes and bug fixes to the controller servlet and associated classes (package org.apache.struts.action) have occurred:

            • The ActionMapping interface has been converted to a base class instead, to reduce the impact of future enhancements. Anyone who has extended the ActionMappingBase convenience base class (which has been deprecated) should extend ActionMapping instead.
            • In conjunction with the new configuration file format mentioned above, the properties of ActionMapping have been substantially updated. See the API Documentation for more information
            • The Action interface has been converted to a base class instead, to reduce the impact of future enhancements. Anyone who has extended the ActionBase convenience base class (which has been deprecated) should extend Action instead.
            • In conjunction with the above change, the servlet argument has been removed from the parameter list for the perform() method, because it is now redundant -- the associated servlet is set via the setServlet() method when the Action instance is first created.
            • Responsibility for creating Action instances has been moved from ActionMapping to the controller servlet, so that instance lifecycle management can be performed. As a side effect of this change, if you had two actions that used the same Action class name, there will now be only one (shared) instance of the Action class, rather than two.
            • New log(String, int) method that logs the associated message only if you have configured the debugging detail level for the servlet to an equal or higher value.
            • In ActionServlet, the functionality to populate form bean parameters from a request, and the functionality to validate the form bean's contents, has been separated into two methods that can be overridden individually if required.
            • The ActionServlet functionality to call the validate() method of a form bean is skipped if the user pressed the Cancel key (i.e. the submit button created by the <html:cancel> custom tag), or if the selected mapping does not define an input form to return control to.
            • The controller servlet may now be used as the target of a RequestDispatcher.include() or <jsp:include/> call. Previously, it would mistakenly use the original request URI, rather than the included path, to calculate which action class to execute.
            • The ActionMappings.getUnknown() method now takes the current request as an parameter, so that context-sensitive decisions can be made.
            • When the controller servlet processes an ActionForward that has the redirect property set, it now performs URL rewriting to maintain session state even if cookies are not being used.
            • The ActionErrors class now includes a method that will return an Iterator over the error messages related to a particular input field.

            The following changes and bug fixes to the Digester module (package org.apache.struts.digester) have occurred:

            • The Digester.resolveEntity() method has been enhanced to correctly handle local URIs so that it works with resources loaded via Class.getResource().
            • The input source handed to the Digester is now closed, even if a parsing exception is throw.

            The following changes and bug fixes to the struts-bean custom tag library (package org.apache.struts.taglib.bean) have occurred:

            • By default, the <bean:write> tag will filter output for characters sensitive to HTML. You can turn this off by adding a filter="false" attribute.
            • When performing a <bean:include> in a page that is part of a session, pass the session identifier along on the generated request so that it will be part of the same session.
            • The <bean:define> tag can now create beans directly from the value attribute, if desired.
            • The <bean:define> tag now accepts an optional toScope attribute, to declare which scope the new bean should be created in. The default remains page scope.
            • Default values can now be specified on <bean:cookie>, <bean:header>, and <bean:parameter> tags, which are used when the corresponding value is not present in the current request.

            The following changes and bug fixes to the struts-html custom tag library (package org.apache.struts.taglib.html) have occurred:

            • WARNING - When the Struts 0.5 tag library was originally split into separate libraries, this library was named struts-form, to reflect the fact that the majority of tags related to creating input forms. It has been renamed to struts-html to reflect the fact that all of the tags in this library are relevant only when building HTML-based user interfaces.
            • The <html:html> tag now supports a locale="true" attribute that requests the same Locale negotiation (based on the presence of an Accept-Language header) that is performed by the controller servlet.
            • The <html:link> tag now supports the ability to add a single request parameter (based on a bean property) in addition to the ability to add request parameters from a Map.
            • The <html:errors> tag lets you select only the error messages related to a particular input field, or all errors.
            • The <html:password> tag now optionally redisplays the previous value of the input field.
            • The value returned by a <html:multibox> tag can now be specified in the body of the tag, as well as via the value attribute.

            The following changes and bug fixes to the struts-logic custom tag library (package org.apache.struts.taglib.logic) have occurred:

            • The <logic:present> and <logic:notPresent> tags now accept a role attribute that allows you to detect whether the currently authenticated user does, or does not, possess a particular security role.

            The following changes and bug fixes to the struts-template custom tag library (package org.apache.struts.taglib.template) have occurred:

            • The <template:put> tag now accepts a direct attribute that causes the content being put to be rendered directly, rather than being included.

            The following changes and bug fixes to the Utilities package (package org.apache.struts.util) have occurred:

            • Fixed PropertyUtils.getPropertyType() to correctly return the underlying element type even if there was a non-indexed property getter method.
            • Added a missing "return" statement to PropertyUtils.setIndexedProperty().
            • Functionality in BeanUtils that previously duplicated functionality that was earlier moved to PropertyUtils has been removed.
            • Fixed PropertyUtils.copyProperties() to skip cases where the origin bean has a getter method but the destination bean does not have a setter method.
            • Added BeanUtils.cloneBean() to create a new instance of an existing bean, and copy all known properties, even if the bean class does not implement Cloneable.
            • The BeanUtils class has been refactored so that it, and the associated ConvertUtils and PropertyUtils classes, can easily be used without having to have the servlet API classes available on the classpath.
            • Property introspection is now smarter, so that you can access public methods declared in an implemented interface, even if the class itself is not public.

            The following changes and bug fixes to the Struts Example Application (package org.apache.struts.example and the corresponding web components) have occurred:

            • Used the reset() methods defined by the ActionForm interface to reset form bean properties to default values. This is particularly important to make boolean properties (represented visually by checkboxes) work correctly.
            • Eliminate the special-case handling of null String values in the form beans. Such handling is not necessary because the custom tags correctly deal with null String values.
            • Use the PropertyUtils.copyProperties() method to initially populate form beans from underlying data objects, and to update date objects when a transaction is successfully completed. Note that using this approach dramatically lessens an action class's dependence on the specific properties of the form bean and corresponding data object in many use cases.
            • Added an autoConnect boolean property to the Subscription data object, primarily to illustrate that representing a boolean property with a checkbox now works correctly if you set the property to false in the reset() method of your form beans.
            libstruts1.2-java-1.2.9/doc/userGuide/release-notes-1.0-b2.xml0000644000175000017500000004201510404045240024245 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Struts Release Notes (Version 1.0-beta-2)

            This document contains the release notes for Version 1.0-beta-2 of the Struts Framework, and covers changes that have taken place since Version 1.0-beta-1 was released. The following sections cover New Features and Changes to Struts.

            The binary distribution of this release includes the following files relevant to Struts 1.0:

            • INSTALL - Brief installation instructions. See the Struts Documentation Application, or online at http://jakarta.apache.org/struts/ for more information.
            • LICENSE - The Apache Software Foundation license that defines the terms under which you can use Struts (and other software licensed by Apache).
            • README - A brief introduction to Struts.
            • lib/ - Directory containing files you will need in your own applications. The individual files of interest are:
              • struts.jar - JAR file that contains the compiled Java classes for both version 0.5 and 1.0 of Struts. You must place this file in the /WEB-INF/lib directory of your web application.
              • struts-xxxxx.tld - The tag library descriptor files for the Struts 1.0 tag libraries (bean, html, logic, and template). You must place these files in the /WEB-INF directory of your web application, and reference them with appropriate <taglib> directives in your web.xml file. NOTE - The struts-form.tld file is deprecated; you should use the struts-html.tld file instead.
              • jdbc2_0-stdext.jar - The JDBC 2.0 Optional Package API classes (package javax.sql). You will need to include this file in the /WEB-INF/lib directory of your application, if it is not already made visible to web applications by your servlet container.
              • struts-config_1_0.dtd - The document type descriptor (DTD) for the Struts configuration file (which is typically named /WEB-INF/struts-config.xml. Your configuration file will be validated against an internal copy of this DTD -- this copy is available for reference purposes only.
              • web-app_2_2.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.2 specification. This copy is for reference purposes only.
              • web-app_2_3.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.3 specification. This copy is for reference purposes only.
            • webapps/ - Web Application Archive (WAR) files for the web applications that are included with Struts.

            For backwards compatibility only, the binary distribution also includes the following files that conform to the Struts 0.5 milestone release APIs. Usage of these files and APIs is deprecated, and they will be removed from releases after Struts 1.0:

            • lib/ - Directory containing files you will need in your own applications. The individual files of interest are:
              • struts.jar - JAR file that contains the compiled Java classes for both version 0.5 and 1.0 of Struts. You must place this file in the /WEB-INF/lib directory of your web application.
              • struts.tld - The tag library descriptor file for the 0.5 version of the Struts tags. You must place this file in the /WEB-INF directory of your web application, and reference it with appropriate <taglib> directives in your web.xml file.

            DEPRECATIONS - The entire custom tag library that is documented in struts.tld has been deprecated. These tags correspond to the Struts 0.5 functionality that is also deprecated, and have been replaced (and considerably enhanced) in the various individual tag libraries.

            The build procedure for compiling the Struts source distribution has been revised, and now depends on having Ant 1.2 (or later) installed, with the $ANT_HOME/bin directory on your path. Further information can be found in the Installation documentation.

            The following new features have been added to the basic controller framework (package org.apache.struts.action):

            • You can now specify that an <action> element should invoke an existing servlet or JSP page resource, rather than calling an Action class, by using the include attribute rather than the type attribute. The standard form bean processing provided by the controller is still performed first, if you have configured it, so the included resource can benefit from this processing if it wishes to.
            • The initDataSources() method can now throw a ServletException to report that an initialization error has occurred. Previously, such errors were logged but otherwise ignored.
            • It is now possible to integrate business logic that is already encapsulated as a servlet or JSP page, via use of two new standard actions: org.apache.struts.actions.ForwardAction and org.apache.struts.actions.IncludeAction. These actions let you take advantage of the standard processing performed by the controller servlet (including form bean population and calling the validate() method), but not have to write Java code to perform (or wrap) the required business logic.
            • A wrapper class has been added around the standard HttpServletRequest for handling multipart requests as identically as possible to standard requests, including processing request parameters, populating form beans, transaction tokens, and checking for cancellations.

            The following new features have been added to the utility classes (package org.apache.struts.util):

            • PropertyUtils can now correctly locate public methods defined in a nested interface that is implemented by a bean.
            • PropertyUtils methods now throw IllegalArgumentException when you pass a null bean reference or property name.
            • DEPRECATIONS - The following classes have been deprecated in their entirety, because they will be replaced by corresponding classes (with identical functionality) from the Jakarta Commons Project at some point after Struts 1.0 final release. The only change that will ultimately be required in user code is to change the package names on the import clauses:
              • org.apache.struts.util.FastArrayList
              • org.apache.struts.util.FastHashMap
              • org.apache.struts.util.FastTreeMap
              • org.apache.struts.util.BeanUtils
              • org.apache.struts.util.ConvertUtils
              • org.apache.struts.util.PropertyUtils

            The following new features have been added to the struts-html custom tag library (package org.apache.struts.taglib.html):

            • The <html:link> tag now accepts an optional anchor attribute, to allow the inclusion of a (possibly calculated) anchor ("#xxx") in the generated hyperlink.
            • The <html:base> tag now accepts an optional target attribute.
            • The <html:image> tag now accepts an optional border attribute, to define the border with around this image.
            • You can now request that the <html:link> tag include any current transaction control token in the generated hyperlink, by specifying the transaction attribute with a value of true.
            • The <html:options> tag now supports Enumeration for the collection property.
            • The <html:form> tag now creates attributes for the tag itself, and the form bean, in request scope instead of page scope. Among other benefits, this allows you to nest the fields of a form inside a separate page that is accessed via a template or a <jsp:include> tag.
            • The styleId attribute has been added to all of the tags where the corresponding id tag is relevant, to identify a specific tag for the purposes of stylesheet references.
            • The <html:file> tag now supports the size attribute to set the size of the file list field.

            The following new features have been added to the struts-logic custom tag library (package org.apache.struts.taglib.logic):

            • The <logic:iterate> tag now supports Enumeration for the collection property.
            • The <logic:iterate> tag now exposes the current iteration index to nested tags, through a call to the getIndex() method.

            The following new features have been added to the struts-template custom tag library (package org.apache.struts.taglib.template):

            • Attribute getter methods have been added to all of the custom tag implementation classes to facilitate reuse.
            • The <template:get> tag now has an optional "flush" attribute that causes the response to be committed prior to performing the include, if set to "true". This allows working around problems on broken servlet containers.

            The following new features have been added to the Struts Documentation application (and corresponding contents on the Struts web site):

            • Platform specific installation notes for a wide variety of application server and servlet container environments have been accumulated and published.

            The following changes and bug fixes have occurred in the basic controller framework (package org.apache.struts.action):

            • DiskMultipartRequestHandler now tries to retrieve the temporary directory provided by the servlet container before all other possible temporary directories.

            The following changes and bug fixes have occurred in the utilities (package org.apache.struts.util):

            • The computeURL() method now returns a MalformedURLException if a URL cannot be created. Previously, this case returned null with no error message, making some problems difficult to track down.

            The following changes and bug fixes have occurred in the struts-html custom tag library (package org.apache.struts.taglib.html):

            • The <html:image> tag now correctly generates a closing double quote on the name attribute.
            • The <html:form> tag now generates a hyperlink that includes any query parameters that were included in the original hyperlink value.
            • The <html:link> tag now correctly places any specified anchor ("#xxx") in the generated hyperlink.
            • The JavaScript code generated to implement the focus attribute of the <html:form> tag now works even when you use nested or indexed property expressions. Previously, this would generate an invalid JavaScript reference to the field.
            • The <html:checkbox> tag now conforms to its documentation, and sends the specified value to the server if this checkbox is checked at submit time. In addition, a default value of on is sent if no value attribute is specified.
            • The hyperlinks created by the <html:link> and <html:redirect> tags now properly omit the port number if it is the default port for the current request scheme (80 for http, or 443 for https). Among other things, this corrects session management behavior on the standard port numbers.
            • The focus attribute of the <html:form> tag now works when the corresponding input field is a radio button, or is otherwise indexed.
            • The disabled and readonly attributes have been added to all HTML-rendering tags where they are relevant.

            The following changes and bug fixes have occurred in the struts-logic custom tag library (package org.apache.struts.taglib.logic):

            • Hyperlink processing in the <logic:forward> tag is now identical to that performed by the Struts Controller Servlet when it processes an ActionForward that is returned by an Action.

            The following changes and bug fixes to the Struts Documentation application (and corresponding contents on the Struts web site) have occurred:

            • The Java types of collections (and arrays) over which the <logic:iterate> tag can run are now documented.
            • The <bean:define> documentation now mentions the JSP 1.1 Specification restriction on using more than one id attribute with the same value in the same page.

            The following changes and bug fixes to the Struts Example Application have occurred:

            • The Java source code of these applications is now included in the corresponding WAR files, in subdirectory WEB-INF/src.
            • Excessive filter() calls in LinkSubscriptionTag have been eliminated.
            • Calls to the deprecated BeanUtils.filter() have been replaced by calls to ResponseUtils.filter().
            • Removed any attempt to save the pseudo-database at application shutdown, because there is no portable mechanism to accomplish this task.

            The following changes and bug fixes to the Struts Template Example Application have occurred:

            • Refactored the example pages to eliminate the creation of redundant <html>, <head>, and <body> tags.
            • If <template:get> or <template:insert> throws an exception, do not overwrite any "real" exception that has already been saved.
            • The text of the various pages in the example has been updated so that they are not identical.
            libstruts1.2-java-1.2.9/doc/userGuide/release-notes-1.0-b3.xml0000644000175000017500000002771210404045222024255 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Struts Release Notes (Version 1.0-beta-3)

            This document contains the release notes for Version 1.0-beta-3 of the Struts Framework, and covers changes that have taken place since Version 1.0-beta-2 was released. The following sections cover New Features and Changes to Struts.

            The binary distribution of this release includes the following files relevant to Struts 1.0:

            • INSTALL - Brief installation instructions. See the Struts Documentation Application, or online at http://jakarta.apache.org/struts/ for more information.
            • LICENSE - The Apache Software Foundation license that defines the terms under which you can use Struts (and other software licensed by Apache).
            • README - A brief introduction to Struts.
            • lib/ - Directory containing files you will need in your own applications. The individual files of interest are:
              • struts.jar - JAR file that contains the compiled Java classes for both version 0.5 and 1.0 of Struts. You must place this file in the /WEB-INF/lib directory of your web application.
              • struts-xxxxx.tld - The tag library descriptor files for the Struts 1.0 tag libraries (bean, html, logic, and template). You must place these files in the /WEB-INF directory of your web application, and reference them with appropriate <taglib> directives in your web.xml file. NOTE - The struts-form.tld file is deprecated; you should use the struts-html.tld file instead.
              • jdbc2_0-stdext.jar - The JDBC 2.0 Optional Package API classes (package javax.sql). You will need to include this file in the /WEB-INF/lib directory of your application, if it is not already made visible to web applications by your servlet container.
              • struts-config_1_0.dtd - The document type descriptor (DTD) for the Struts configuration file (which is typically named /WEB-INF/struts-config.xml. Your configuration file will be validated against an internal copy of this DTD -- this copy is available for reference purposes only.
              • web-app_2_2.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.2 specification. This copy is for reference purposes only.
              • web-app_2_3.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.3 specification. This copy is for reference purposes only.
            • webapps/ - Web Application Archive (WAR) files for the web applications that are included with Struts.

            For backwards compatibility only, the binary distribution also includes the following files that conform to the Struts 0.5 milestone release APIs. Usage of these files and APIs is deprecated, and they will be removed from releases after Struts 1.0:

            • lib/ - Directory containing files you will need in your own applications. The individual files of interest are:
              • struts.jar - JAR file that contains the compiled Java classes for both version 0.5 and 1.0 of Struts. You must place this file in the /WEB-INF/lib directory of your web application.
              • struts.tld - The tag library descriptor file for the 0.5 version of the Struts tags. You must place this file in the /WEB-INF directory of your web application, and reference it with appropriate <taglib> directives in your web.xml file.

            DEPRECATIONS - The entire custom tag library that is documented in struts.tld has been deprecated. These tags correspond to the Struts 0.5 functionality that is also deprecated, and have been replaced (and considerably enhanced) in the various individual tag libraries.

            DEPRECATIONS - The entire custom tag library that is documented in struts-form.tld has been deprecated because this library has been renamed struts-html.tld instead.

            DEPRECATIONS - Several classes in the org.apache.struts.util package have been marked as deprecated in their entirety, because they will be replaced by versions from the Jakarta Commons project once those packages are released. These deprecated classes will not be removed until a release after Struts 1.1. In general, the only change required inside user code using these classes will be to update the import statement. The following classes are involved:

            • ArrayStack
            • BeanUtils
            • ConvertUtils
            • FastArrayList
            • FastHashMap
            • FastTreeMap
            • GenericConnection
            • GenericDataSource
            • PropertyUtils

            The following new features have been added to the basic controller framework (package org.apache.struts.action):

            The following new features have been added to the utility classes (package org.apache.struts.util):

            • GenericDataSource can now be configured with a "ping" type command (via the pingCommand and pingQuery properties) that will be executed before returning a connection from getConnection(). This can be used to detect stale connections due to timeouts or a database server restart. If the ping command fails, the corresponding connection will be thrown away, and a new one allocated.

            The following new features have been added to the struts-html custom tag library (package org.apache.struts.taglib.html):

            • It is now possible to use any object in the values and labels collections for the <html:options> tag.
            • Added the missing tabindex attribute to the <html:radio> tag.
            • On the <html:img>, <html:link>, and <html:rewrite> tags, you can now specify arbitrary object values in the Map used to include dynamic request attributes, as long as the toString() method renders the values appropriately.
            • In all cases where "minimized" attributes were being generated (checked, disabled, multiple, readonly, and selected), the generated attribute has a value (such as selected="true") for XML syntax compatibility.

            The following new features have been added to the struts-logic custom tag library (package org.apache.struts.taglib.logic):

            The following new features have been added to the struts-template custom tag library (package org.apache.struts.taglib.template):

            The following new features have been added to the Struts Documentation application (and corresponding contents on the Struts web site):

            The following changes and bug fixes have occurred in the configuration files related to Struts:

            • The DTD for struts-config.xml files had an incorrect ENTITY declaration for the Location element.
            • The DTD for version 2.3 web application deployment descriptors has been updated to the most recent (Proposed Final Draft 2) version.

            The following changes and bug fixes have occurred in the basic controller framework (package org.apache.struts.action):

            The following changes and bug fixes have occurred in the utilities (package org.apache.struts.util):

            • The FastArrayMap(), FastHashMap(), and FastTreeMap() classes not correctly implement the clone(), equals(), and hashCode() methods consistent with the requirements of the Java standard Collections APIs.
            • PropertyUtils can now access public methods defined in nested interfaces.
            • A misleading error message returned by BeanUtils has been corrected.
            • Work around a problem compiling the FastXxxxx classes with the VAJ compiler, because the superclass already includes a private class named Iterator.
            • Remove a JDK 1.3 dependency that prevented compiling BeanUtils under JDK 1.2.
            • Generate "&amp;" instead of "&" in query strings that contain more than one name/value pair.

            The following changes and bug fixes have occurred in the struts-html custom tag library (package org.apache.struts.taglib.html):

            • Restore the ability of the <html:button> tag to retrieve the button text from the nested body content (so that it can be easily internationalized).
            • If the property name used in the labelProperty attribute of an <html:options> tag is invalid, report the correct property name in the error message.

            The following changes and bug fixes have occurred in the struts-logic custom tag library (package org.apache.struts.taglib.logic):

            The following changes and bug fixes to the Struts Documentation application (and corresponding contents on the Struts web site) have occurred:

            • Fix a reference to an old Struts 0.5 tag in one of the User's Guide examples.
            • Fix the stylesheet used to transform XML into HTML documentation so that nested <body> tags are not created.
            • The DTD for Struts configuration files has been refined to highlight the fact that you should use <set-property> elements to configure your data source implementation.

            The following changes and bug fixes to the Struts Example Application have occurred:

            The following changes and bug fixes to the Struts Template Example Application have occurred:

            libstruts1.2-java-1.2.9/doc/userGuide/release-notes-1.0.1.xml0000644000175000017500000002425510404045236024116 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Robert Leland Ted Husted Martin Cooper Struts Release Notes (Version 1.0.1)

            This document contains the release notes for Version 1.0.1 of the Struts Framework, and covers changes that have taken place since Version 1.0 was released. The following sections cover New Features and Changes to Struts.

            This version covers bug-fixes only; no new functionality.

            The binary distribution of this release includes the following files relevant to Struts 1.0.1:

            • INSTALL - Brief installation instructions. See the Struts Documentation Application, or online at http://jakarta.apache.org/struts/ for more information.
            • LICENSE - The Apache Software Foundation license that defines the terms under which you can use Struts (and other software licensed by Apache).
            • README - A brief introduction to Struts.
            • lib/ - Directory containing files you will need in your own applications. The individual files of interest are:
              • struts.jar - JAR file that contains the compiled Java classes for version 1.0 of Struts. You must place this file in the /WEB-INF/lib directory of your web application.
              • struts-xxxxx.tld - The tag library descriptor files for the Struts 1.0.1 tag libraries (bean, html, logic, and template). You must place these files in the /WEB-INF directory of your web application, and reference them with appropriate <taglib> directives in your web.xml file.
              • jdbc2_0-stdext.jar - The JDBC 2.0 Optional Package API classes (package javax.sql). You will need to include this file in the /WEB-INF/lib directory of your application, if it is not already made visible to web applications by your servlet container.
              • struts-config_1_0.dtd - The document type descriptor (DTD) for the Struts configuration file (which is typically named /WEB-INF/struts-config.xml. Your configuration file will be validated against an internal copy of this DTD -- this copy is available for reference purposes only.
              • web-app_2_2.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.2 specification. This copy is for reference purposes only.
              • web-app_2_3.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.3 specification. This copy is for reference purposes only.
            • webapps/ - Web Application Archive (WAR) files for the web applications that are included with Struts.

            The struts 0.5 milestone API release is no longer supported, and has been removed as of Struts 1.1.

            The following new features have been added to the basic controller framework (package org.apache.struts.action):

            The following new features have been added to the utility classes (package org.apache.struts.util):

            • LocalStrings: Correct message regarding replaceable parameter so that it does not append an extraneous character.
            • MessageResources: Escape any single quote characters that are included in the specified message string.
            • Allow a transaction token to be the only parameter in computeParameters().
            • Change RequestUtils to encode ampersands when building a query string.

            The following new features have been added to the struts-html custom tag library (package org.apache.struts.taglib.html):

            The following new features have been added to the struts-logic custom tag library (package org.apache.struts.taglib.logic):

            The following new features have been added to the struts-template custom tag library (package org.apache.struts.taglib.template):

            The following new features have been added to the Struts Documentation application (and corresponding contents on the Struts web site):

            The following changes and bug fixes have occurred in the configuration files related to Struts:

            The following changes and bug fixes have occurred in the basic controller framework (package org.apache.struts.action):

            • Modify ActionForm class to use ActionServletWrapper rather than expose ActionServlet.
            • Add ActionServletWrapper class. Used by ActionForm to prevent the Public String properties of ActionServlet from being changed via a query string.
            • Unconditionally pass the selected mapping as a request attribute under key Action.MAPPING_KEY, even if no form bean is specified.
            • Avoid a NullPointerException in corner cases caused by failed initialization of ActionServlet.

            The following changes and bug fixes have occurred in the file upload package (package org.apache.struts.upload):

            • Fixed lost byte problem in BufferedMultipartInputStream
            • Fixed ArrayIndexOutOfBoundsException situations
            • Better reporting for premature closing of input streams while reading multipart requests.
            • Additional fix for file corruption problem with uploads and new line characters.

            The following changes and bug fixes have occurred in the utilities (package org.apache.struts.util):

            • Modify RequestUtils class to use ActionServletWrapper rather than expose ActionServlet.
            • ConvertUtils.convertCharacter() will now detect empty strings and return the default value.

            The following changes and bug fixes have occurred in the struts-bean custom tag library (package org.apache.struts.taglib.bean):

            • Correct the generated scripting variable type when the <bean:cookie>, <bean:header>, or <bean:parameter> tag is used with the "multiple" attribute.

            The following changes and bug fixes have occurred in the struts-html custom tag library (package org.apache.struts.taglib.html):

            • Fixed FormTag to exclude query string when identifying action mapping name.
            • Correct MultiboxTagdoAfterBody() to return SKIP_BODY instead of SKIP_PAGE.
            • Added the 'align' attribute to the <html:image> tag.
            • On the Options tag, if the property specified by the "property" attribute returns null, it now throws an error message that indicates what the real problem is, rather than causing an NPE.
            • Added 'style' and 'styleClass' attributes for <html:option> and <html:options> tags.
            • Correctly URLEncode the query string parameter value on ImgTag, even if there is only a single parameter.

            The following changes and bug fixes have occurred in the struts-logic custom tag library (package org.apache.struts.taglib.logic):

            • The <html:errors> when the property tag is specified, errors are no longer printed if the specified property has no errors. Previously errors were always printed! Future enhancements would include additional attributes to always turn off the header or footer.

            The following changes and bug fixes to the Struts Documentation application (and corresponding contents on the Struts web site) have occurred:

            • Add installation notes for Jetty.
            • In the Tag Developers Guide, add more detail regarding file upload requirements.
            • In the Introduction, added references to basic background material.
            • In Building View Components, clarify that additional i18n support may be provided by the browser, and is outside the scope of the framework.
            • In Building Controller Components, document 'validating' init-param, add defaults for various parameters, clarify that some web.xml settings are not Struts-specific.
            • Correct the example page in the User's Guide (Building View Components) to reflect current practice.
            • Revised installation instructions for SilverStream and Resin.

            The following changes and bug fixes to the Struts Example Application have occurred:

            • Remove references to saving database data from "tour" document, since this functionality was removed.

            The following changes and bug fixes to the Struts Template Example Application have occurred:

            The following changes and bug fixes to the Struts Exercise Taglib Example Application have occurred:

            • Added test case for <html:select> using <html:options> based on a collection saved in the page context.
            libstruts1.2-java-1.2.9/doc/userGuide/release-notes-1.0.2.xml0000644000175000017500000001052710404045220024105 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Robert Leland Ted Husted Martin Cooper Struts Release Notes (Version 1.0.2)

            This document contains the release notes for Version 1.0.2 of the Struts Framework, and covers changes that have taken place since Version 1.0.1 was released. The following sections cover New Features and Changes to Struts.

            This version covers bug-fixes only; no new functionality.

            The binary distribution of this release includes the following files relevant to Struts 1.0.2:

            • INSTALL - Brief installation instructions. See the Struts Documentation Application, or online at http://jakarta.apache.org/struts/ for more information.
            • LICENSE - The Apache Software Foundation license that defines the terms under which you can use Struts (and other software licensed by Apache).
            • README - A brief introduction to Struts.
            • lib/ - Directory containing files you will need in your own applications. The individual files of interest are:
              • struts.jar - JAR file that contains the compiled Java classes for version 1.0.2 of Struts. You must place this file in the /WEB-INF/lib directory of your web application.
              • struts-xxxxx.tld - The tag library descriptor files for the Struts 1.0.2 tag libraries (bean, html, logic, and template). You must place these files in the /WEB-INF directory of your web application, and reference them with appropriate <taglib> directives in your web.xml file.
              • jdbc2_0-stdext.jar - The JDBC 2.0 Optional Package API classes (package javax.sql). You will need to include this file in the /WEB-INF/lib directory of your application, if it is not already made visible to web applications by your servlet container.
              • struts-config_1_0.dtd - The document type descriptor (DTD) for the Struts configuration file (which is typically named /WEB-INF/struts-config.xml. Your configuration file will be validated against an internal copy of this DTD -- this copy is available for reference purposes only.
              • web-app_2_2.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.2 specification. This copy is for reference purposes only.
              • web-app_2_3.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.3 specification. This copy is for reference purposes only.
            • webapps/ - Web Application Archive (WAR) files for the web applications that are included with Struts.

            The struts 0.5 milestone API release is no longer supported, and will be removed as of Struts 1.1.

            No new features have been added in this release.

            The following changes and bug fixes have occurred in the basic controller framework (package org.apache.struts.action):

            • The ActionForm.getMultipartRequestHandler() method is now public rather than protected, to restore compatibility with the Tiles extension.
            libstruts1.2-java-1.2.9/doc/userGuide/release-notes-1.0.xml0000644000175000017500000003221510404045242023747 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Struts Release Notes (Version 1.0)

            This document contains the release notes for Version 1.0 of the Struts Framework, and covers changes that have taken place since Version 1.0-beta-3 was released. The following sections cover New Features and Changes to Struts.

            The binary distribution of this release includes the following files relevant to Struts 1.0:

            • INSTALL - Brief installation instructions. See the Struts Documentation Application, or online at http://jakarta.apache.org/struts/ for more information.
            • LICENSE - The Apache Software Foundation license that defines the terms under which you can use Struts (and other software licensed by Apache).
            • README - A brief introduction to Struts.
            • lib/ - Directory containing files you will need in your own applications. The individual files of interest are:
              • struts.jar - JAR file that contains the compiled Java classes for both version 0.5 and 1.0 of Struts. You must place this file in the /WEB-INF/lib directory of your web application.
              • struts-xxxxx.tld - The tag library descriptor files for the Struts 1.0 tag libraries (bean, html, logic, and template). You must place these files in the /WEB-INF directory of your web application, and reference them with appropriate <taglib> directives in your web.xml file. NOTE - The struts-form.tld file is deprecated; you should use the struts-html.tld file instead.
              • jdbc2_0-stdext.jar - The JDBC 2.0 Optional Package API classes (package javax.sql). You will need to include this file in the /WEB-INF/lib directory of your application, if it is not already made visible to web applications by your servlet container.
              • struts-config_1_0.dtd - The document type descriptor (DTD) for the Struts configuration file (which is typically named /WEB-INF/struts-config.xml. Your configuration file will be validated against an internal copy of this DTD -- this copy is available for reference purposes only.
              • web-app_2_2.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.2 specification. This copy is for reference purposes only.
              • web-app_2_3.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.3 specification. This copy is for reference purposes only.
            • webapps/ - Web Application Archive (WAR) files for the web applications that are included with Struts.

            For backwards compatibility only, the binary distribution also includes the following files that conform to the Struts 0.5 milestone release APIs. Usage of these files and APIs is deprecated, and they will be removed from releases after Struts 1.0:

            • lib/ - Directory containing files you will need in your own applications. The individual files of interest are:
              • struts.jar - JAR file that contains the compiled Java classes for both version 0.5 and 1.0 of Struts. You must place this file in the /WEB-INF/lib directory of your web application.
              • struts.tld - The tag library descriptor file for the 0.5 version of the Struts tags. You must place this file in the /WEB-INF directory of your web application, and reference it with appropriate <taglib> directives in your web.xml file.

            DEPRECATIONS - The entire custom tag library that is documented in struts.tld has been deprecated. These tags correspond to the Struts 0.5 functionality that is also deprecated, and have been replaced (and considerably enhanced) in the various individual tag libraries.

            DEPRECATIONS - The entire custom tag library that is documented in struts-form.tld has been deprecated because this library has been renamed struts-html.tld instead.

            DEPRECATIONS - Several classes in the org.apache.struts.util package have been marked as deprecated in their entirety, because they will be replaced by versions from the Jakarta Commons project once those packages are released. These deprecated classes will not be removed until a release after Struts 1.1. In general, the only change required inside user code using these classes will be to update the import statement. The following classes are involved:

            • ArrayStack
            • BeanUtils
            • ConvertUtils
            • FastArrayList
            • FastHashMap
            • FastTreeMap
            • GenericConnection
            • GenericDataSource
            • PropertyUtils

            The following new features have been added to the basic controller framework (package org.apache.struts.action):

            The following new features have been added to the utility classes (package org.apache.struts.util):

            The following new features have been added to the struts-html custom tag library (package org.apache.struts.taglib.html):

            • The <html:link> tag now supports the optional title attribute, that causes some browsers to display alternate text when the mouse is hovered over a hyperlink.

            The following new features have been added to the struts-logic custom tag library (package org.apache.struts.taglib.logic):

            • The <logic:iterate> tag now supports a new attribute, indexId. This attribute names a page scope attribute (and corresponding scripting variable) that will be exposed in the nested body of the iteration, which will contain the current loop index as a java.lang.Integer.

            The following new features have been added to the struts-template custom tag library (package org.apache.struts.taglib.template):

            The following new features have been added to the Struts Documentation application (and corresponding contents on the Struts web site):

            The following changes and bug fixes have occurred in the configuration files related to Struts:

            • The documentation about configuring a data source element in the struts-config.xml file has been updated to emphasize the use of <set-property> elements nested inside the <data-source> element. No further additional attributes will be added to the <data-source> element in the DTD to support custom properties of particular data source implementations.

            The following changes and bug fixes have occurred in the basic controller framework (package org.apache.struts.action):

            • Several issues introduced with the internal wrapping of multipart requests have been fixed.
            • The instance variables in the ActionForm base class are now transient, so that ActionForm instances can actually be serialized. WARNING - If you deserialize such an ActionForm instance and attempt to use it within the Struts framework, be sure to call setServlet() (and setMultipartRequestHander() if appropriate) first.

            The following changes and bug fixes have occurred in the file upload package (package org.apache.struts.upload):

            • Fixed a bug that could cause corruption in the uploaded file, by converting sequences of \r\n\n into \r\n\r\n.

            The following changes and bug fixes have occurred in the utilities (package org.apache.struts.util):

            • Corrected a cut-and-paste typo that caused NullPointerException on attempts to use the new pingQuery property that was added in Struts 1.0-b3.
            • Fix operation ordering so that RequestUtils.lookup() will throw a JspException when the specified bean is missing, in accordance with its JavaDoc documentation.
            • Digester calls to Rule.body() methods will now trim leading and trailing whitespace first, consistent with the behavior of other body processing performed within the rules.
            • Correct the calculation of an absolute URL from a context-relative path in RequestUtils.absoluteURL().

            The following changes and bug fixes have occurred in the struts-bean custom tag library (package org.apache.struts.taglib.bean):

            • The <bean:include> tag will now pass a session identifier on to the included request (assuming that it is part of the same web application), even if the current request is maintaining session identity with cookies. Previously, this only worked if you were using URL rewriting.

            The following changes and bug fixes have occurred in the struts-html custom tag library (package org.apache.struts.taglib.html):

            • For all tags where Struts generates attributes that are allowed to be minimized in the HTML specification (i.e. checked, disabled, multiple, readonly, and selected), generate attribute values equal to the attribute name, as required by HTML 4.01, section 3.3.4. For example, generate checked="checked" instead of checked="true" for the "checked" attribute.
            • Correctly generate a <a name="my name"><> element when the linkName attribute is used on the <html:link> tag.

            The following changes and bug fixes have occurred in the struts-logic custom tag library (package org.apache.struts.taglib.logic):

            • Update the processing performed by the <logic:present> and <logic:notPresent> tags to reflect the changed behavior of RequestUtils.lookup().

            The following changes and bug fixes to the Struts Documentation application (and corresponding contents on the Struts web site) have occurred:

            • Links to subscribe and unsubscribe from the STRUTS-DEV and STRUTS-USER mailing lists have been added to the home page.
            • Miscellaneous corrections to typos and hyperlinks.
            • Cleaned up problems in the stylesheets used to create documentation pages that formerly emitted <project> tags in the generated HTML, and generated incorrect references to link colors in the navigation bar.
            • Added a "Who We Are" page to the documentation.

            The following changes and bug fixes to the Struts Example Application have occurred:

            • The name and page attributes of the <app:checkLogon> tag now accept runtime expressions.

            The following changes and bug fixes to the Struts Template Example Application have occurred:

            libstruts1.2-java-1.2.9/doc/userGuide/release-notes-1.1-b1.xml0000644000175000017500000004340010404045230024243 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Robert Leland Ted Husted Struts Release Notes (current nightly build)

            This document contains the release notes for Version 1.1 Beta 1 of the Struts Framework, and covers changes that have taken place since Version 1.0.1 was released. The following sections cover New Features and Changes to Struts.

            The binary distribution of this release includes the following files relevant to Struts:

            • INSTALL - Brief installation instructions. See the Struts Documentation Application, or online at http://jakarta.apache.org/struts/ for more information.
            • LICENSE - The Apache Software Foundation license that defines the terms under which you can use Struts (and other software licensed by Apache).
            • README - A brief introduction to Struts.
            • lib/ - Directory containing files you will need in your own applications. The individual files of interest are:
              • commons-*.jar - Release packages from the Jakarta Commons Project that Struts relies on. You are welcome to use these classes in your own applications. These JAR files should be copied into the /WEB-INF/lib directory of your web application.
              • struts.jar - JAR file that contains the compiled Java classes of Struts. You must place this file in the /WEB-INF/lib directory of your web application.
              • struts-xxxxx.tld - The tag library descriptor files for the Struts 1.0 tag libraries (bean, html, logic, and template). You must place these files in the /WEB-INF directory of your web application, and reference them with appropriate <taglib> directives in your web.xml file. NOTE - The struts-form.tld file is deprecated; you should use the struts-html.tld file instead.
              • jdbc2_0-stdext.jar - The JDBC 2.0 Optional Package API classes (package javax.sql). You will need to include this file in the /WEB-INF/lib directory of your application, if it is not already made visible to web applications by your servlet container.
              • struts-config_1_1.dtd - The document type descriptor (DTD) for the Struts configuration file (which is typically named /WEB-INF/struts-config.xml. Your configuration file will be validated against an internal copy of this DTD -- this copy is available for reference purposes only.
              • web-app_2_2.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.2 specification. This copy is for reference purposes only.
              • web-app_2_3.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.3 specification. This copy is for reference purposes only.
            • webapps/ - Web Application Archive (WAR) files for the web applications that are included with Struts.

            DEPRECATIONS:

            • struts-config.dtd in favor of struts-config_1_1.dtd.

            COMMONS PACKAGES: Several components of Struts 1.0 have been found to be useful in general Java development (and not just useful for building Struts-based web applications), and have been migrated into the Jakarta Commons Project. As a result, the current development version of Struts has been modified to rely on the Commons packages containing these classes, rather than the Struts internal versions. In nearly every case, this involved changing only the import statements at the top of your classes. Any applications that utilize these classes will need to be modified in the same way. The following Commons packages contain the replacements for the corresponding Struts 1.0 classes:

            • BeanUtils Package (org.apache.commons.beanutils) - org.apache.struts.utils.BeanUtils, org.apache.struts.utils.ConvertUtils, and org.apache.struts.utils.PropertyUtils.
            • Collections Package (org.apache.commons.collections) - org.apache.struts.util.ArrayStack, org.apache.struts.util.FastArrayList, org.apache.struts.util.FastHashMap, org.apache.struts.util.FastTreeMap.
            • Digester Package - (org.apache.commons.digester) - org.apache.struts.digester.*.

            XML PARSER PREREQUISITE UPDATED: Struts now depends on an XML parser that conforms to the JAXP/1.1 (rather than JAXP/1.0) APIs. Parser known to work include the JAXP/1.1 reference implementation, and Xerces 1.3.1.

            CONTRIB Directory: A new directory (contrib) in the CVS source repository has been added to accumulate Struts add-on extensions that are generally useful but have not yet been integrated into the standard code base.

            • ValidatorForm - Client and Server-side validation library.
            • Tiles - Advanced templating library (see Struts-Tiles.war).
            • Service Manager - Add custom services without subclassing controller.

            UNIT TESTING SUPPORT: Support for running unit tests on Struts components and custom tags is being added, utilizing the Jakarta Cactus product.

            The following new features have been added to the basic controller framework (package org.apache.struts.action):

            • The new ActionMessages class will support a superset of the capabilities of ActionErrors, and will be useful as a collection of general purpose messages, not just errors.

            The following new features have been added to the utility classes (package org.apache.struts.util):

            • LocalStrings: Correct message regarding replaceable parameter so that it does not append an extraneous character.
            • Add LabelValueBean class. This defines a collection of name/value pairs that can be used with the <html:options> tag, and elsewhere.
            • MessageResources: Escape any single quote characters that are included in the specified message string.
            • Allow a transaction token to be the only parameter in computeParameters().
            • Change RequestUtils to encode ampersands when building a query string.

            The following new features have been added to the struts-bean custom tag library (package org.apache.struts.taglib.bean):

            • Add format, locale and bundle attributes to bean:write to support values formatting according to current user locale, format string from attribute or format string from string resources.
            • Correct the generated scripting variable type when the <bean:cookie>, <bean:header>, or <bean:parameter> tag is used with the "multiple" attribute.
            • Added name, property, and scope attributes to the <bean:message> tag, so that the message source key can be obtained dynamically from a bean or bean property.

            The following new features have been added to the struts-html custom tag library (package org.apache.struts.taglib.html):

            • On the Options tag, if the property specified by the "property" attribute returns null, it now throws an error message that indicates what the real problem is, rather than causing an NPE.
            • Added 'style' and 'styleClass' attributes for <html:option> and <html:options> tags.
            • Added 'name', 'property' and 'scope' attributes to <bean:message> so that the message resource key can be obtained dynamically from a bean.
            • Added a new <html:messages> tag to iterate through a message collection in the new ActionMessages class.
            • ActionForm will now call reset() if it instantiates the ActionForm bean.
            • Added indexed property to the SubmitTag, SelectTag, LinkTag.java, CheckboxTag, ButtonTag, ImageTag, RadioTag, and TextArea.Tag.

            The following new features have been added to the struts-logic custom tag library (package org.apache.struts.taglib.logic):

            • Added <logic:empty> and <logic:notEmpty> tags, which are similar to <logic:present> and <logic:notPresent> except for the treatment of empty strings.

            The following new features have been added to the struts-template custom tag library (package org.apache.struts.taglib.template):

            • None.

            The following new features have been added to the Struts Documentation application (and corresponding contents on the Struts web site):

            • Move Tag Library documentation into User's Guide.
            • Added Kickstart FAQ.
            • Added Reference copy of 1.0 JavaDoc.
            • Revised the example page in the User's Guide (Building View Components) to reflect current practice.
            • Revised installation instructions for SilverStream and Resin.

            The following changes and bug fixes have occurred in the configuration files related to Struts:

            • Remove deprecated support for the old (Struts 0.5) configuration file format.

            The following changes and bug fixes have occurred in the basic controller framework (package org.apache.struts.action):

            • Add InvokeAction and CreateActionForm methods to allow direct chaining of Actions.
            • Add ContextHelper to expose framework elements to alternate presentation layers.
            • ActionForms and related classes now use a StringBuffer when responding a toString request in order to conserve resources.
            • Add standard LookupDispatchAction to help select between internationalized buttons.
            • Modify ActionForm class to use ActionServletWrapper rather than expose ActionServlet.
            • Add ActionServletWrapper class. Used by ActionForm to prevent the Public String properties of ActionServlet from being changed via a query string.
            • Unconditionally pass the selected mapping as a request attribute under key Action.MAPPING_KEY, even if no form bean is specified.
            • Avoid a NullPointerException in corner cases caused by failed initialization of ActionServlet.
            • The ActionForm class is now truly serializable, because the two non-serializable instance variables (servlet and multipartRequestHandler) have been made transient. However, if you actually do serialize and deserialize such instances, it is your responsibility to reset these two properties.
            • Removed deprecated Struts 0.5 methods, and support for the Struts 0.5 configuration file format.
            • The initial order a property/key is added in is now maintained by ActionMessages class.

            The following changes and bug fixes have occurred in the file upload package (package org.apache.struts.upload):

            • Correct MultiboxTagdoAfterBody() to return SKIP_BODY instead of SKIP_PAGE.
            • Fixed lost byte problem in BufferedMultipartInputStream
            • Fixed ArrayIndexOutOfBoundsException situations
            • Better reporting for premature closing of input streams while reading multipart requests.
            • Additional fix for file corruption problem with uploads and new line characters.

            The following changes and bug fixes have occurred in the utilities (package org.apache.struts.util):

            • Modify RequestUtils class to use ActionServletWrapper rather than expose ActionServlet.
            • Added error message for the getActionErrors and getActionMessages method.
            • Added a getActionErrors and getActionMessages methods to generate the correct corresponding object based on the object retrieved from request scope based on the key passed in.
            • The logic for creating an ActionErrors or ActionMessages object has been moved to a utility method in RequestUtils. The JspException message is also generated in RequestUtils.
            • ConvertUtils.convertCharacter() will now detect empty strings and return the default value.

            The following changes and bug fixes have occurred in the struts-bean custom tag library (package org.apache.struts.taglib.bean):

            • The <html:errors> when the property tag is specified, errors are no longer printed if the specified property has no errors. Previously errors were always printed ! Future enhancements would include additional attributes to always turn off the header or footer.
            • Made the remaining helper methods "protected" rather than "private".

            The following changes and bug fixes have occurred in the struts-html custom tag library (package org.apache.struts.taglib.html):

            • Fixed FormTag to exclude query string when identifying action mapping name.
            • Added the 'align' attribute to the <html:image> tag.
            • Added indexed attribute to ImageTag, RadioTag, and TextAreaTag.
            • Added MessagesTag.
            • Correctly URLEncode the query string parameter value on ImgTag, even if there is only a single parameter.

            The following changes and bug fixes have occurred in the struts-logic custom tag library (package org.apache.struts.taglib.logic):

            • None.

            The following changes and bug fixes to the Struts Documentation application (and corresponding contents on the Struts web site) have occurred:

            • In the HTML tag documentation, expand to cover using indexed properties with iterate.
            • Add installation notes for Jetty.
            • In the Tag Developers Guide, add more detail regarding file upload requirements.
            • In the Introduction, added references to basic background material.
            • In Building View Components, clarify that additional i18n support may be provided by the browser, and is outside the scope of the framework.
            • In Building Controller Components, document 'validating' init-param, add defaults for various parameters, clarify that some web.xml settings are not Struts-specific.
            • Reorganized to separate 1.0 material from nightly build material.
            • Expanded Resources section.
            • Various updates regarding other release notes.

            The following changes and bug fixes to the Struts Example Application have occurred:

            • Add Russian and Japanese translations of the application resources and set the character set for the example JSP pages to "UTF-8" so that it can display either English or Japanese.
            • Exchange "name" for "attribute" properties for Edit mappings in Struts configuration file.
            • Remove references to saving database data from "tour" document, since this functionality was removed.

            The following changes and bug fixes to the Struts Template Example Application have occurred:

            • None.

            The following changes and bug fixes to the Struts Exercise Taglib Example Application have occurred:

            • Added test case for <html:select> using <html:options> based on a collection saved in the page context.

            Next: Installation

            libstruts1.2-java-1.2.9/doc/userGuide/release-notes-1.1-b2.xml0000644000175000017500000010565710404045214024263 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Robert Leland Ted Husted Martin Cooper Struts Release Notes (Version 1.1 Beta 2)

            This document contains the release notes for Version 1.1 Beta 2 of the Struts Framework, and covers changes that have taken place since Version 1.0.2 was released. The following sections cover New Features and Changes to Struts.

            The binary distribution of this release includes the following files relevant to Struts:

            • INSTALL - Brief installation instructions. See the Struts Documentation Application, or online at http://jakarta.apache.org/struts/ for more information.
            • LICENSE - The Apache Software Foundation license that defines the terms under which you can use Struts (and other software licensed by Apache).
            • README - A brief introduction to Struts.
            • lib/ - Directory containing files you will need in your own applications. The individual files of interest are:
              • commons-*.jar - Release packages from the Jakarta Commons Project that Struts relies on. You are welcome to use these classes in your own applications. These JAR files should be copied into the /WEB-INF/lib directory of your web application.
              • struts.jar - JAR file that contains the compiled Java classes of Struts. You must place this file in the /WEB-INF/lib directory of your web application.
              • struts-xxxxx.tld - The tag library descriptor files for the Struts 1.1 tag libraries (bean, html, logic, and template). You must place these files in the /WEB-INF directory of your web application, and reference them with appropriate <taglib> directives in your web.xml file.
              • jdbc2_0-stdext.jar - The JDBC 2.0 Optional Package API classes (package javax.sql). You will need to include this file in the /WEB-INF/lib directory of your application, if it is not already made visible to web applications by your servlet container.
              • struts-config_1_1.dtd - The document type descriptor (DTD) for the Struts 1.1 configuration file (which is typically named /WEB-INF/struts-config.xml. Your configuration file will be validated against an internal copy of this DTD -- this copy is available for reference purposes only.
              • struts-config_1_0.dtd - The document type descriptor (DTD) for the Struts 1.0 configuration file (which is typically named /WEB-INF/struts-config.xml. Your configuration file will be validated against an internal copy of this DTD -- this copy is available for reference purposes only.
              • web-app_2_2.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.2 specification. This copy is for reference purposes only.
              • web-app_2_3.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.3 specification. This copy is for reference purposes only.
            • webapps/ - Web Application Archive (WAR) files for the web applications that are included with Struts.

            Following are highlights of the new features. In the next section, we provide links to the JavaDocs for the affected classes.

            New Configuration DTD

            The Struts Configuration 1.0 DTD has been deprecated in favor of the struts-config_1_1.dtd. In the Struts 1.1 release, existing Struts configuration files can be loaded using either DTD version.

            New Dependencies on Commons packages

            Several components of Struts 1.0 have been found to be useful in general Java development (and not just useful for building Struts-based web applications), and have been migrated into the Jakarta Commons Project. As a result, the current development version of Struts has been modified to rely on the Commons packages containing these classes, rather than the Struts internal versions. In nearly every case, this involved changing only the import statements at the top of your classes. Any applications that utilize these classes will need to be modified in the same way.

            The following Commons packages contain the replacements for the corresponding Struts 1.0 classes:

            • BeanUtils Package [org.apache.commons.beanutils] - org.apache.struts.utils.BeanUtils, org.apache.struts.utils.ConvertUtils, and org.apache.struts.utils.PropertyUtils.
            • Collections Package [org.apache.commons.collections] - org.apache.struts.util.ArrayStack, org.apache.struts.util.FastArrayList, org.apache.struts.util.FastHashMap, org.apache.struts.util.FastTreeMap.
            • Digester Package - [org.apache.commons.digester] - org.apache.struts.digester.*.

            The following Commons packages are also now used by various components of the Struts framework:

            NOTE! XML Parser Prerequisite Updated

            Struts now depends on an XML parser that conforms to the JAXP/1.1 (rather than JAXP/1.0) APIs. Parsers known to work include the JAXP/1.1 reference implementation, and Xerces 1.3.1.

            SOURCE DEVELOPERS NOTE! Ant Prerequisite Updated

            To build Struts from source Ant 1.4 or later is now required. This does not affect developers that use Struts from the binary distribution.

            Struts Validator Integration

            The new Commons-Validator is now integrated with Struts and exposed through the new Validator package.

            Tiles - An advanced templating taglib

            The Tiles JSP assembly framework has been integrated with Struts.

            Nested - An very cool taglib extension

            The Nested taglib is bundled with Struts and enhances the functionality of the existing Struts tags.

            New Example Applications

            New example applications for the Validator and Tiles are now part of the Struts distribution.

            New Contrib directory for optional components

            A new directory (contrib) in the CVS source repository has been added to accumulate Struts add-on extensions that are generally useful but have not yet been integrated into the standard code base.

            • Scaffold - Library of reusable classes for building web applications.
            • Service Manager - Add custom services without subclassing controller.

            The source for these components is available in the Struts source distribution. Binary distributions may also be made available with the Struts download area. As optional components, these products have their own release cycles.

            Action Package Additions

            The following new features have been added to the basic controller framework [org.apache.struts.action]:

            • The ActionServlet now provides support for modular Struts applications and sports several new extension points.
            • The new ActionMessages class will support a superset of the capabilities of ActionErrors, and will be useful as a collection of general purpose messages, not just errors.

            Upload Package Additions

            The following new features have been added to the file upload classes [org.apache.struts.upload]:

            • CommonsMultipartRequestHandler: New class that implements file upload using the Jakarta Commons FileUpload package.

            Util Package Additions

            The following new features have been added to the utility classes [org.apache.struts.util]:

            • LocalStrings: Correct message regarding replaceable parameter so that it does not append an extraneous character.
            • LabelValueBean: New class that defines a collection of name/value pairs that can be used with the <html:options> tag, and elsewhere.
            • MessageResources: Escape any single quote characters that are included in the specified message string.
            • computeParameters: Allow a transaction token to be the only parameter in .
            • RequestUtils: Change to encode ampersands when building a query string.

            Bean Taglib Package Additions

            The following new features have been added to the struts-bean custom tag library [org.apache.struts.taglib.bean]:

            • <bean:write>: Add format, locale and bundle attributes to support formatting values according to current user locale, format string from attribute or format string from string resources.
            • <bean:cookie>, <bean:header>, or <bean:parameter>: Correct the generated scripting variable type when tag is used with the "multiple" attribute.
            • <bean:message>: Added name, property, and scope attributes to the tag, so that the message source key can be obtained dynamically from a bean or bean property.

            HTML Taglib Package Additions

            The following new features have been added to the struts-html custom tag library [org.apache.struts.taglib.html]:

            • <options>: If the property specified by the 'property' attribute returns null, tag now throws an error message that indicates what the real problem is, rather than causing an NPE.
            • <html:option> and <html:options>: Added 'style' and 'styleClass' attributes.
            • <html:optionsCollection>: New tag providing a cleaner way of populating HTML options from a collection.
            • <bean:message>: Added 'name', 'property' and 'scope' attributes so that the message resource key can be obtained dynamically from a bean.
            • <html:messages>: New tag to iterate through a message collection in the new ActionMessages class.
            • ActionForm: Tag will now call reset() if it instantiates the ActionForm bean. This also requires that the bean instantiated by the tag to be an ActionForm subclass.
            • <html:image>: Added the 'align' attribute.
            • <html:img>: Added the mouse event attributes ('onclick', 'ondblclick', 'onmousedown', 'onmouseup', 'onmouseover', 'onmousemove', 'onmouseout').
            • SubmitTag, SelectTag, LinkTag.java, CheckboxTag, ButtonTag, ImageTag, RadioTag, and TextArea tags: Added indexed property.

            Logic Taglib Package Additions

            The following new features have been added to the struts-logic custom tag library [org.apache.struts.taglib.logic]:

            • <logic:empty> and <logic:notEmpty>: New tags that are similar to <logic:present> and <logic:notPresent> except for the treatment of empty strings.

            Template Taglib Package Additions

            The following new features have been added to the struts-template custom tag library [org.apache.struts.taglib.template]:

            • None.

            Documentation Additions

            The following new features have been added to the Struts Documentation application (and corresponding contents on the Struts web site):

            • Version Differences: New section in Release Notes to link to the JavaDocs for all Struts classes and members added or changed between versions.
            • User Guide Preface: New section to overview the enabling technologies behind Struts.
            • Developer Guides: Added "cover page" to guides. These then link to the Package Descriptions and the API guides.
            • HTML tag documentation: expanded to cover using indexed properties with iterate.
            • Site Menu: Removed separate links to taglib documentation, since these are now in the Developer Guide.
            • Newbie FAQ: The questions most likely to be asked by new developers using Struts. Still under development.
            • Kickstart FAQ: The questions most likely to be asked when selecting Struts.
            • 1.0 JavaDoc: Added archival copy to web site for future reference.
            • The UserGuide "Building" pages: General revisions to reflect new features and current practices.
            • Installation: Updated instructions for SilverStream and Resin. Add installation notes for Jetty. Added RexIP to list of nominal containers.
            • JavaDocs: New @since Struts 1.1 tag to indicate new packages, classes, and members added after the Struts 1.0.x version

            Struts Configuration Changes

            The following changes and bug fixes have occurred in the configuration files related to Struts:

            • Deprecated (Struts 0.5) configuration file format: Remove support.
            • Deprecated (Struts 0.5) methods: Remove from codebase.

            Added Config Package

            • ControllerConfig: Added inputForward property to indicate that ActionMapping.input is a forward rather than a URI.
            • ControllerConfig: Added forwardPattern and inputPattern to help manage page directories in application modules.
            • Added package to provide more flexibility in configuring the controller and to provide support for modular applications

            Action Package Changes

            The following changes and bug fixes have occurred in the basic controller framework (package org.apache.struts.action):

            • ActionMapping: input property may now refer to an ActionForward rather than a module-relative path if inputForward is set to true on the module's ControllerConfig bean [org.apache.struts.config.ControllerConfig.
            • ActionServlet: Added convertNull parameter to simulate the Struts 1.0 behavior when populating forms. If set to true, the numeric Java wrapper class types (like java.lang.Integer) will default to null (rather than 0).
            • ActionServlet: Added "config/$foo" parameter and deprecated several others in favor of components in the new config package.
            • ActionForms and related classes: now use a StringBuffer when responding a toString request in order to conserve resources.
            • LookupDispatchAction: Added standard Action to help select between internationalized buttons.
            • ActionForm class: Modified to use ActionServletWrapper rather than expose ActionServlet.
            • ActionServletWrapper class: Added for use by ActionForm to prevent the Public String properties of ActionServlet from being changed via a query string.
            • Action.MAPPING_KEY request attribute: Unconditionally pass the selected mapping as a request attribute ("org.apache.struts.action.mapping.instance") even if no form bean is specified.
            • ActionServlet: Avoid a NullPointerException in corner cases caused by failed initialization of servlet.
            • ActionForm class: Now truly serializable, because the two non-serializable instance variables (servlet and multipartRequestHandler) have been made transient. However, if you actually do serialize and deserialize such instances, it is your responsibility to reset these two properties.
            • ActionMessages and ActionErrors: The initial order a property/key is added in is now retained.

            Upload Package Changes

            The following changes and bug fixes have occurred in the file upload package (package org.apache.struts.upload):

            • CommonsMultipartRequestHandler: New implementation of file upload based on the Jakarta Commons FileUpload package. This new implementation is now the default.
            • BufferedMultipartInputStream: Fixed lost byte problem.
            • ArrayIndexOutOfBoundsException: Fixed situations where this was known to occur.
            • Multipart requests: Better reporting for premature closing of input streams while reading multipart requests.
            • New line characters: Additional fix for file corruption problem with uploads and new line characters.

            Utility Package Changes

            The following changes and bug fixes have occurred in the utilities (package org.apache.struts.util):

            • RequestUtils: Added support for forwardPattern, pagePattern, and inputForward properties on ControllerConfig.
            • GenericDataSource: Deprecated and modified to act as a thin wrapper around [org.apache.commons.dbpc.BasicDataSource]. Replaced by direct use of BasicDataSource or other compatible component.
            • RequestUtils class: Modify to use ActionServletWrapper rather than expose ActionServlet.
            • Added error message for the getActionErrors and getActionMessages method.
            • getActionErrors and getActionMessages: Added methods to generate the correct corresponding object based on the object retrieved from request scope based on the key passed in.
            • ActionErrors or ActionMessages: The logic for creating one of these objects has been moved to a utility method in RequestUtils.
            • JspException message: Now generated in RequestUtils.
            • ConvertUtils.convertCharacter(): Will now detect empty strings and return the default value.

            Bean Taglib Package Changes

            The following changes and bug fixes have occurred in the struts-bean custom tag library [org.apache.struts.taglib.bean]:

            • <html:errors>: When the property tag is specified, errors are no longer printed if the specified property has no errors. Previously errors were always printed ! Future enhancements would include additional attributes to always turn off the header or footer.
            • Made the remaining helper methods "protected" rather than "private".

            HTML Taglib Package Changes

            The following changes and bug fixes have occurred in the struts-html custom tag library (package org.apache.struts.taglib.html):

            • FormTag: Fixed to exclude query string when identifying action mapping name.
            • ImgTag: Correctly URLEncode the query string parameter value even if there is only a single parameter.
            • MultiboxTag.doAfterBody(): Corrected to return SKIP_BODY instead of SKIP_PAGE.

            Logic Taglib Package Changes

            The following changes and bug fixes have occurred in the struts-logic custom tag library (package org.apache.struts.taglib.logic):

            • None.

            Documentation Application Changes

            The following changes and bug fixes to the Struts Documentation application (and corresponding contents on the Struts web site) have occurred:

            • Reorganized Resources into separate pages..
            • In the Tag Developers Guide, add more detail regarding file upload requirements.
            • In Building View Components, clarify that additional i18n support may be provided by the browser, and is outside the scope of the framework.
            • In Building Controller Components, document 'validating' init-param, add defaults for various parameters, clarify that some web.xml settings are not Struts-specific.
            • Tag library documentation: Moved under User's Guide.
            • Reorganized to separate 1.0 material from nightly build material.

            MailReader Example Application Changes

            The following changes and bug fixes to the Struts MailReader Example Application have occurred:

            • Add Russian and Japanese translations of the application resources and set the character set for the example JSP pages to "UTF-8" so that it can display either English or Japanese.
            • Exchange "name" for "attribute" properties for Edit mappings in Struts configuration file.
            • Remove references to saving database data from "tour" document, since this functionality was removed.

            Template Example Application Changes

            The following changes and bug fixes to the Struts Template Example Application have occurred:

            • None.

            Exercise Taglib Example Application Changes

            The following changes and bug fixes to the Struts Exercise Taglib Example Application have occurred:

            • Added test case for <html:select> using <html:options> based on a collection saved in the page context.

            This section provides links to the Struts JavaDoc for any classes that have been added or deprecated since the Struts 1.0 release.

            Previously deprecated classes and packages removed in Struts 1.1

            • Removed: org.apache.struts.utils.BeanUtils, org.apache.struts.utils.ConvertUtils, and org.apache.struts.utils.PropertyUtils - replaced by org.apache.commons.beanutils
            • Removed: org.apache.struts.util.ArrayStack, org.apache.struts.util.FastArrayList, org.apache.struts.util.FastHashMap, org.apache.struts.util.FastTreeMap - replaced by org.apache.commons.collections
            • Removed: org.apache.struts.digester.* - replaced by org.apache.commons.digester
            • Removed: The struts-config.dtd - Replaced by struts-config_1_1.dtd.
            • Removed: The omnibus "struts" taglib and its associated TLD - replaced by separate bean, logic, and html taglibs.
            • Removed: The "form" taglib and its associated TLD - replaced by (renamed as) the html taglib.

            Packages added in Struts 1.1

            Classes added in Struts 1.1

            action

            actions

            taglib.html

            taglib.logic

            upload

            util

            Classes with members added in Struts 1.1

            action.Action

            • ACTION_SERVLET_KEY
            • APPLICATION_KEY
            • MESSAGE_KEY
            • PLUG_INS_KEY
            • REQUEST_PROCESSOR_KEY
            • execute
            • getResources(javax.servlet.http.HttpServletRequest)
            • saveMessages

            action.ActionServlet

            • configDigester
            • convertHack
            • log
            • processor
            • getInternal
            • destroyApplications
            • destroyConfigDigester
            • getApplicationConfig
            • getRequestProcessor
            • initApplicationConfig
            • initApplicationDataSources
            • initApplicationPlugIns
            • initApplicationMessageResources
            • initConfigDigester
            • methods created for backward-compatiblity only
              • defaultControllerConfig
              • defaultFormBeansConfig
              • defaultForwardsConfig
              • defaultMappingsConfig
              • defaultMessageResourcesConfig

            taglib.html.BaseHandlerTag

            • indexed
            • setIndexed
            • getIndexed

            Classes deprecated between Struts 1.0 and Struts 1.1

            action

            • ActionException
            • ActionFormBeans
            • ActionForwards
            • ActionMappings

            Classes with members deprecated between Struts 1.0 and Struts 1.1

            action.Action

            • FORM_BEANS_KEY
            • FORWARDS_KEY
            • MAPPINGS_KEY
            • getResources()
            • perform

            ActionServlet

            • findDataSource
            • findFormBean
            • findForward
            • findMapping
            • initDataSources
            • methods created for backward-compatiblity only
              • defaultControllerConfig
              • defaultFormBeansConfig
              • defaultForwardsConfig
              • defaultMappingsConfig
              • defaultMessageResourcesConfig

            Next: Installation

            The following known issues will be addressed before Final Release of Struts 1.1. The numbers in parentheses are for the corresponding entries in the Bugzilla bug tracking system.

            Custom Tags
            • The <html:form> tag generates incorrect JavaScript when the focus is to be set on a radio button. (#1586)
            Documentation
            • Some parts of the documentation are incomplete, especially for new features in this release. These sections are marked TODO. (#10537)
            Example Webapps
            • The struts-blank sample webapp fails to run due to problems accessing message resources. (#10955)
            Validator Framework
            • Validator generates incorrect JavaScript for the <select> element. (#7353)
            • Validator range checking supports only integer values, and not other numeric values such as floats and doubles. (#10191)
            • Validator does not work with Struts application modules other than the default module. (#10348)
            • Validator does not successfully validate empty date fields. (#10349)
            • Validator does not validate data when using DynaValidatorActionForm. (#10432)
            • Validator plugin does not correctly configure multiple validation files. (#10584)

            Next: Installation

            libstruts1.2-java-1.2.9/doc/userGuide/release-notes-1.1-b3.xml0000644000175000017500000010347310404045250024256 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Robert Leland Ted Husted Martin Cooper Struts Release Notes (Version 1.1 Beta 3)

            This section contains the release notes for nightly build of the Struts Framework, for changes that have taken place since Version 1.1 beta 2 was released. For a complete list of changes since the last production release, see the Introduction

            ApplicationConfig: In Struts 1.1. beta 3, the ApplicationConfig class is renamed to ModuleConfig, to conform with the venacular.

            Dyna*Form: In Struts 1.1. beta 3, the reset method was changed so that it conforms to the original ActionForm implementation.

            Blank application: Fixed configuration problem with Struts Blank application.

            The remainder of this document contains the release notes for nightly build of the Struts Framework, and covers changes that have taken place since Version 1.0.2 was released. The following sections cover New Features and Changes to Struts.

            The binary distribution of this release includes the following files relevant to Struts:

            • INSTALL - Brief installation instructions. See the Struts Documentation Application, or online at http://jakarta.apache.org/struts/ for more information.
            • LICENSE - The Apache Software Foundation license that defines the terms under which you can use Struts (and other software licensed by Apache).
            • README - A brief introduction to Struts.
            • lib/ - Directory containing files you will need in your own applications. The individual files of interest are:
              • commons-*.jar - Release packages from the Jakarta Commons Project that Struts relies on. You are welcome to use these classes in your own applications. These JAR files should be copied into the /WEB-INF/lib directory of your web application.
              • struts.jar - JAR file that contains the compiled Java classes of Struts. You must place this file in the /WEB-INF/lib directory of your web application.
              • struts-xxxxx.tld - The tag library descriptor files for the Struts 1.1 tag libraries (bean, html, logic, and template). You must place these files in the /WEB-INF directory of your web application, and reference them with appropriate <taglib> directives in your web.xml file.
              • jdbc2_0-stdext.jar - The JDBC 2.0 Optional Package API classes (package javax.sql). You will need to include this file in the /WEB-INF/lib directory of your application, if it is not already made visible to web applications by your servlet container.
              • struts-config_1_1.dtd - The document type descriptor (DTD) for the Struts 1.1 configuration file (which is typically named /WEB-INF/struts-config.xml. Your configuration file will be validated against an internal copy of this DTD -- this copy is available for reference purposes only.
              • struts-config_1_0.dtd - The document type descriptor (DTD) for the Struts 1.0 configuration file (which is typically named /WEB-INF/struts-config.xml. Your configuration file will be validated against an internal copy of this DTD -- this copy is available for reference purposes only.
              • web-app_2_2.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.2 specification. This copy is for reference purposes only.
              • web-app_2_3.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.3 specification. This copy is for reference purposes only.
            • webapps/ - Web Application Archive (WAR) files for the web applications that are included with Struts.

            Following are highlights of the new features. In the next section, we provide links to the JavaDocs for the affected classes.

            New Configuration DTD

            The Struts Configuration 1.0 DTD has been deprecated in favor of the struts-config_1_1.dtd. In the Struts 1.1 release, existing Struts configuration files can be loaded using either DTD version.

            New Dependencies on Commons packages

            Several components of Struts 1.0 have been found to be useful in general Java development (and not just useful for building Struts-based web applications), and have been migrated into the Jakarta Commons Project. As a result, the current development version of Struts has been modified to rely on the Commons packages containing these classes, rather than the Struts internal versions. In nearly every case, this involved changing only the import statements at the top of your classes. Any applications that utilize these classes will need to be modified in the same way.

            The following Commons packages contain the replacements for the corresponding Struts 1.0 classes:

            • BeanUtils Package [org.apache.commons.beanutils] - org.apache.struts.utils.BeanUtils, org.apache.struts.utils.ConvertUtils, and org.apache.struts.utils.PropertyUtils.
            • Collections Package [org.apache.commons.collections] - org.apache.struts.util.ArrayStack, org.apache.struts.util.FastArrayList, org.apache.struts.util.FastHashMap, org.apache.struts.util.FastTreeMap.
            • Digester Package - [org.apache.commons.digester] - org.apache.struts.digester.*.

            The following Commons packages are also now used by various components of the Struts framework:

            NOTE! XML Parser Prerequisite Updated

            Struts now depends on an XML parser that conforms to the JAXP/1.1 (rather than JAXP/1.0) APIs. Parsers known to work include the JAXP/1.1 reference implementation, and Xerces 1.3.1.

            SOURCE DEVELOPERS NOTE! Ant Prerequisite Updated

            To build Struts from source Ant 1.4 or later is now required. This does not affect developers that use Struts from the binary distribution.

            Struts Validator Integration

            The new Commons-Validator is now integrated with Struts and exposed through the new Validator package.

            Tiles - An advanced templating taglib

            The Tiles JSP assembly framework has been integrated with Struts.

            Nested - An very cool taglib extension

            The Nested taglib is bundled with Struts and enhances the functionality of the existing Struts tags.

            New Example Applications

            New example applications for the Validator and Tiles are now part of the Struts distribution.

            New Contrib directory for optional components

            A new directory (contrib) in the CVS source repository has been added to accumulate Struts add-on extensions that are generally useful but have not yet been integrated into the standard code base.

            • Scaffold - An extension of the Commons Scaffold toolkit of reusable classes for building web applications.
            • Struts-el - The optional Struts-el taglib makes it easy to use Struts with JSTL (container with servlet 2.3 support required).

            The source for these components is available in the Struts source distribution. Binary distributions may also be made available with the Struts download area. As optional components, these products have their own release cycles.

            Action Package Additions

            The following new features have been added to the basic controller framework [org.apache.struts.action]:

            • The ActionServlet now provides support for modular Struts applications and sports several new extension points.
            • The new ActionMessages class will support a superset of the capabilities of ActionErrors, and will be useful as a collection of general purpose messages, not just errors.

            Upload Package Additions

            The following new features have been added to the file upload classes [org.apache.struts.upload]:

            • CommonsMultipartRequestHandler: New class that implements file upload using the Jakarta Commons FileUpload package.

            Util Package Additions

            The following new features have been added to the utility classes [org.apache.struts.util]:

            • LocalStrings: Correct message regarding replaceable parameter so that it does not append an extraneous character.
            • LabelValueBean: New class that defines a collection of name/value pairs that can be used with the <html:options> tag, and elsewhere.
            • MessageResources: Escape any single quote characters that are included in the specified message string.
            • computeParameters: Allow a transaction token to be the only parameter in .
            • RequestUtils: Change to encode ampersands when building a query string.

            Bean Taglib Package Additions

            The following new features have been added to the struts-bean custom tag library [org.apache.struts.taglib.bean]:

            • <bean:write>: Add format, locale and bundle attributes to support formatting values according to current user locale, format string from attribute or format string from string resources.
            • <bean:cookie>, <bean:header>, or <bean:parameter>: Correct the generated scripting variable type when tag is used with the "multiple" attribute.
            • <bean:message>: Added name, property, and scope attributes to the tag, so that the message source key can be obtained dynamically from a bean or bean property.

            HTML Taglib Package Additions

            The following new features have been added to the struts-html custom tag library [org.apache.struts.taglib.html]:

            • <html:link>: Added 'action' attribute.
            • <html:options>: If the property specified by the 'property' attribute returns null, tag now throws an error message that indicates what the real problem is, rather than causing an NPE.
            • <html:option> and <html:options>: Added 'style' and 'styleClass' attributes.
            • <html:optionsCollection>: New tag providing a cleaner way of populating HTML options from a collection.
            • <bean:message>: Added 'name', 'property' and 'scope' attributes so that the message resource key can be obtained dynamically from a bean.
            • <html:messages>: New tag to iterate through a message collection in the new ActionMessages class.
            • ActionForm: Tag will now call reset() if it instantiates the ActionForm bean. This also requires that the bean instantiated by the tag to be an ActionForm subclass.
            • <html:image>: Added the 'align' attribute.
            • <html:img>: Added the mouse event attributes ('onclick', 'ondblclick', 'onmousedown', 'onmouseup', 'onmouseover', 'onmousemove', 'onmouseout').
            • SubmitTag, SelectTag, LinkTag.java, CheckboxTag, ButtonTag, ImageTag, RadioTag, and TextArea tags: Added indexed property.

            Logic Taglib Package Additions

            The following new features have been added to the struts-logic custom tag library [org.apache.struts.taglib.logic]:

            • <logic:empty> and <logic:notEmpty>: New tags that are similar to <logic:present> and <logic:notPresent> except for the treatment of empty strings.

            Template Taglib Package Additions

            The following new features have been added to the struts-template custom tag library [org.apache.struts.taglib.template]:

            • None.

            Documentation Additions

            The following new features have been added to the Struts Documentation application (and corresponding contents on the Struts web site):

            • Version Differences: New section in Release Notes to link to the JavaDocs for all Struts classes and members added or changed between versions.
            • FAQ/HowTos: New documentation category organizes our FAQs and example-driven howTos. New HowTos include "Building Applications", "Using SSL", and using Struts with Eclipse or NetBeans.
            • User Guide Preface: New section to overview the enabling technologies behind Struts.
            • Developer Guides: Added "cover page" to guides. These then link to the Package Descriptions and the API guides.
            • HTML tag documentation: expanded to cover using indexed properties with iterate.
            • Site Menu: Removed separate links to taglib documentation, since these are now in the Developer Guide.
            • Newbie FAQ: The questions most likely to be asked by new developers using Struts. Still under development.
            • Kickstart FAQ: The questions most likely to be asked when selecting Struts.
            • 1.0 JavaDoc: Added archival copy to web site for future reference.
            • The UserGuide "Building" pages: General revisions to reflect new features and current practices.
            • Installation: Updated instructions for SilverStream and Resin. Add installation notes for Jetty. Added RexIP to list of nominal containers.
            • JavaDocs: New @since Struts 1.1 tag to indicate new packages, classes, and members added after the Struts 1.0.x version

            Struts Configuration Changes

            The following changes and bug fixes have occurred in the configuration files related to Struts:

            • Deprecated (Struts 0.5) configuration file format: Remove support.
            • Deprecated (Struts 0.5) methods: Remove from codebase.

            Added Config Package

            • ControllerConfig: Added inputForward property to indicate that ActionMapping.input is a forward rather than a URI.
            • ControllerConfig: Added forwardPattern and inputPattern to help manage page directories in application modules.
            • Added package to provide more flexibility in configuring the controller and to provide support for modular applications

            Action Package Changes

            The following changes and bug fixes have occurred in the basic controller framework (package org.apache.struts.action):

            • ActionMapping: input property may now refer to an ActionForward rather than a module-relative path if inputForward is set to true on the module's ControllerConfig bean [org.apache.struts.config.ControllerConfig.
            • ActionServlet: Added convertNull parameter to simulate the Struts 1.0 behavior when populating forms. If set to true, the numeric Java wrapper class types (like java.lang.Integer) will default to null (rather than 0).
            • ActionServlet: Added "config/$foo" parameter and deprecated several others in favor of components in the new config package.
            • ActionForms and related classes: now use a StringBuffer when responding a toString request in order to conserve resources.
            • LookupDispatchAction: Added standard Action to help select between internationalized buttons.
            • ActionForm class: Modified to use ActionServletWrapper rather than expose ActionServlet.
            • ActionServletWrapper class: Added for use by ActionForm to prevent the Public String properties of ActionServlet from being changed via a query string.
            • Action.MAPPING_KEY request attribute: Unconditionally pass the selected mapping as a request attribute ("org.apache.struts.action.mapping.instance") even if no form bean is specified.
            • ActionServlet: Avoid a NullPointerException in corner cases caused by failed initialization of servlet.
            • ActionForm class: Now truly serializable, because the two non-serializable instance variables (servlet and multipartRequestHandler) have been made transient. However, if you actually do serialize and deserialize such instances, it is your responsibility to reset these two properties.
            • ActionMessages and ActionErrors: The initial order a property/key is added in is now retained.

            Upload Package Changes

            The following changes and bug fixes have occurred in the file upload package (package org.apache.struts.upload):

            • CommonsMultipartRequestHandler: New implementation of file upload based on the Jakarta Commons FileUpload package. This new implementation is now the default.
            • BufferedMultipartInputStream: Fixed lost byte problem.
            • ArrayIndexOutOfBoundsException: Fixed situations where this was known to occur.
            • Multipart requests: Better reporting for premature closing of input streams while reading multipart requests.
            • New line characters: Additional fix for file corruption problem with uploads and new line characters.

            Utility Package Changes

            The following changes and bug fixes have occurred in the utilities (package org.apache.struts.util):

            • RequestUtils: Added support for forwardPattern, pagePattern, and inputForward properties on ControllerConfig.
            • GenericDataSource: Deprecated and modified to act as a thin wrapper around [org.apache.commons.dbpc.BasicDataSource]. Replaced by direct use of BasicDataSource or other compatible component.
            • RequestUtils class: Modify to use ActionServletWrapper rather than expose ActionServlet.
            • Added error message for the getActionErrors and getActionMessages method.
            • getActionErrors and getActionMessages: Added methods to generate the correct corresponding object based on the object retrieved from request scope based on the key passed in.
            • ActionErrors or ActionMessages: The logic for creating one of these objects has been moved to a utility method in RequestUtils.
            • JspException message: Now generated in RequestUtils.
            • ConvertUtils.convertCharacter(): Will now detect empty strings and return the default value.

            Bean Taglib Package Changes

            The following changes and bug fixes have occurred in the struts-bean custom tag library [org.apache.struts.taglib.bean]:

            • <html:errors>: When the property tag is specified, errors are no longer printed if the specified property has no errors. Previously errors were always printed ! Future enhancements would include additional attributes to always turn off the header or footer.
            • Made the remaining helper methods "protected" rather than "private".

            HTML Taglib Package Changes

            The following changes and bug fixes have occurred in the struts-html custom tag library (package org.apache.struts.taglib.html):

            • FormTag: Fixed to exclude query string when identifying action mapping name.
            • ImgTag: Correctly URLEncode the query string parameter value even if there is only a single parameter.
            • MultiboxTag.doAfterBody(): Corrected to return SKIP_BODY instead of SKIP_PAGE.

            Logic Taglib Package Changes

            The following changes and bug fixes have occurred in the struts-logic custom tag library (package org.apache.struts.taglib.logic):

            • None.

            Documentation Application Changes

            The following changes and bug fixes to the Struts Documentation application (and corresponding contents on the Struts web site) have occurred:

            • Reorganized Resources into separate pages..
            • In the Tag Developers Guide, add more detail regarding file upload requirements.
            • In Building View Components, clarify that additional i18n support may be provided by the browser, and is outside the scope of the framework.
            • In Building Controller Components, document 'validating' init-param, add defaults for various parameters, clarify that some web.xml settings are not Struts-specific.
            • Tag library documentation: Moved under User's Guide.
            • Reorganized to separate 1.0 material from nightly build material.

            MailReader Example Application Changes

            The following changes and bug fixes to the Struts MailReader Example Application have occurred:

            • Add Russian and Japanese translations of the application resources and set the character set for the example JSP pages to "UTF-8" so that it can display either English or Japanese.
            • Exchange "name" for "attribute" properties for Edit mappings in Struts configuration file.
            • Remove references to saving database data from "tour" document, since this functionality was removed.

            Template Example Application Changes

            The following changes and bug fixes to the Struts Template Example Application have occurred:

            • None.

            Exercise Taglib Example Application Changes

            The following changes and bug fixes to the Struts Exercise Taglib Example Application have occurred:

            • Added test case for <html:link> using "action" attribute.
            • Added test case for <html:select> using <html:options> based on a collection saved in the page context.

            This section provides links to the Struts JavaDoc for any classes that have been added or deprecated since the Struts 1.0 release.

            Previously deprecated classes and packages removed in Struts 1.1

            • Removed: org.apache.struts.utils.BeanUtils, org.apache.struts.utils.ConvertUtils, and org.apache.struts.utils.PropertyUtils - replaced by org.apache.commons.beanutils
            • Removed: org.apache.struts.util.ArrayStack, org.apache.struts.util.FastArrayList, org.apache.struts.util.FastHashMap, org.apache.struts.util.FastTreeMap - replaced by org.apache.commons.collections
            • Removed: org.apache.struts.digester.* - replaced by org.apache.commons.digester
            • Removed: The struts-config.dtd - Replaced by struts-config_1_1.dtd.
            • Removed: The omnibus "struts" taglib and its associated TLD - replaced by separate bean, logic, and html taglibs.
            • Removed: The "form" taglib and its associated TLD - replaced by (renamed as) the html taglib.

            Packages added in Struts 1.1

            Classes added in Struts 1.1

            action

            actions

            taglib.html

            taglib.logic

            upload

            util

            Classes with members added in Struts 1.1

            action.Action

            • ACTION_SERVLET_KEY
            • APPLICATION_KEY
            • MESSAGE_KEY
            • PLUG_INS_KEY
            • REQUEST_PROCESSOR_KEY
            • execute
            • getResources(javax.servlet.http.HttpServletRequest)
            • saveMessages

            action.ActionServlet

            • configDigester
            • convertHack
            • log
            • processor
            • getInternal
            • destroyApplications
            • destroyConfigDigester
            • getApplicationConfig
            • getRequestProcessor
            • initApplicationConfig
            • initApplicationDataSources
            • initApplicationPlugIns
            • initApplicationMessageResources
            • initConfigDigester
            • methods created for backward-compatiblity only
              • defaultControllerConfig
              • defaultFormBeansConfig
              • defaultForwardsConfig
              • defaultMappingsConfig
              • defaultMessageResourcesConfig

            taglib.html.BaseHandlerTag

            • indexed
            • setIndexed
            • getIndexed

            Classes deprecated between Struts 1.0 and Struts 1.1

            action

            • ActionException
            • ActionFormBeans
            • ActionForwards
            • ActionMappings

            Classes with members deprecated between Struts 1.0 and Struts 1.1

            action.Action

            • FORM_BEANS_KEY
            • FORWARDS_KEY
            • MAPPINGS_KEY
            • getResources()
            • perform

            ActionServlet

            • findDataSource
            • findFormBean
            • findForward
            • findMapping
            • initDataSources
            • methods created for backward-compatiblity only
              • defaultControllerConfig
              • defaultFormBeansConfig
              • defaultForwardsConfig
              • defaultMappingsConfig
              • defaultMessageResourcesConfig

            Next: Installation

            libstruts1.2-java-1.2.9/doc/userGuide/release-notes-1.1-rc1.xml0000644000175000017500000010351110404045240024427 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Robert Leland Ted Husted Martin Cooper Struts Release Notes (Version 1.1 Release Candidate 1)

            This section contains the release notes for nightly build of the Struts Framework, for changes that have taken place since Version 1.1 beta 2 was released. For a complete list of changes since the last production release, see the Introduction

            ApplicationConfig: In Struts 1.1. beta 3, the ApplicationConfig class is renamed to ModuleConfig, to conform with the venacular.

            Dyna*Form: In Struts 1.1. beta 3, the reset method was changed so that it conforms to the original ActionForm implementation.

            Blank application: Fixed configuration problem with Struts Blank application.

            The remainder of this document contains the release notes for nightly build of the Struts Framework, and covers changes that have taken place since Version 1.0.2 was released. The following sections cover New Features and Changes to Struts.

            The binary distribution of this release includes the following files relevant to Struts:

            • INSTALL - Brief installation instructions. See the Struts Documentation Application, or online at http://jakarta.apache.org/struts/ for more information.
            • LICENSE - The Apache Software Foundation license that defines the terms under which you can use Struts (and other software licensed by Apache).
            • README - A brief introduction to Struts.
            • lib/ - Directory containing files you will need in your own applications. The individual files of interest are:
              • commons-*.jar - Release packages from the Jakarta Commons Project that Struts relies on. You are welcome to use these classes in your own applications. These JAR files should be copied into the /WEB-INF/lib directory of your web application.
              • struts.jar - JAR file that contains the compiled Java classes of Struts. You must place this file in the /WEB-INF/lib directory of your web application.
              • struts-xxxxx.tld - The tag library descriptor files for the Struts 1.1 tag libraries (bean, html, logic, and template). You must place these files in the /WEB-INF directory of your web application, and reference them with appropriate <taglib> directives in your web.xml file.
              • jdbc2_0-stdext.jar - The JDBC 2.0 Optional Package API classes (package javax.sql). You will need to include this file in the /WEB-INF/lib directory of your application, if it is not already made visible to web applications by your servlet container.
              • struts-config_1_1.dtd - The document type descriptor (DTD) for the Struts 1.1 configuration file (which is typically named /WEB-INF/struts-config.xml. Your configuration file will be validated against an internal copy of this DTD -- this copy is available for reference purposes only.
              • struts-config_1_0.dtd - The document type descriptor (DTD) for the Struts 1.0 configuration file (which is typically named /WEB-INF/struts-config.xml. Your configuration file will be validated against an internal copy of this DTD -- this copy is available for reference purposes only.
              • web-app_2_2.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.2 specification. This copy is for reference purposes only.
              • web-app_2_3.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.3 specification. This copy is for reference purposes only.
            • webapps/ - Web Application Archive (WAR) files for the web applications that are included with Struts.

            Following are highlights of the new features. In the next section, we provide links to the JavaDocs for the affected classes.

            New Configuration DTD

            The Struts Configuration 1.0 DTD has been deprecated in favor of the struts-config_1_1.dtd. In the Struts 1.1 release, existing Struts configuration files can be loaded using either DTD version.

            New Dependencies on Commons packages

            Several components of Struts 1.0 have been found to be useful in general Java development (and not just useful for building Struts-based web applications), and have been migrated into the Jakarta Commons Project. As a result, the current development version of Struts has been modified to rely on the Commons packages containing these classes, rather than the Struts internal versions. In nearly every case, this involved changing only the import statements at the top of your classes. Any applications that utilize these classes will need to be modified in the same way.

            The following Commons packages contain the replacements for the corresponding Struts 1.0 classes:

            • BeanUtils Package [org.apache.commons.beanutils] - org.apache.struts.utils.BeanUtils, org.apache.struts.utils.ConvertUtils, and org.apache.struts.utils.PropertyUtils.
            • Collections Package [org.apache.commons.collections] - org.apache.struts.util.ArrayStack, org.apache.struts.util.FastArrayList, org.apache.struts.util.FastHashMap, org.apache.struts.util.FastTreeMap.
            • Digester Package - [org.apache.commons.digester] - org.apache.struts.digester.*.

            The following Commons packages are also now used by various components of the Struts framework:

            NOTE! XML Parser Prerequisite Updated

            Struts now depends on an XML parser that conforms to the JAXP/1.1 (rather than JAXP/1.0) APIs. Parsers known to work include the JAXP/1.1 reference implementation, and Xerces 1.3.1.

            SOURCE DEVELOPERS NOTE! Ant Prerequisite Updated

            To build Struts from source Ant 1.4 or later is now required. This does not affect developers that use Struts from the binary distribution.

            Struts Validator Integration

            The new Commons-Validator is now integrated with Struts and exposed through the new Validator package.

            Tiles - An advanced templating taglib

            The Tiles JSP assembly framework has been integrated with Struts.

            Nested - An very cool taglib extension

            The Nested taglib is bundled with Struts and enhances the functionality of the existing Struts tags.

            New Example Applications

            New example applications for the Validator and Tiles are now part of the Struts distribution.

            New Contrib directory for optional components

            A new directory (contrib) in the CVS source repository has been added to accumulate Struts add-on extensions that are generally useful but have not yet been integrated into the standard code base.

            • Scaffold - An extension of the Commons Scaffold toolkit of reusable classes for building web applications.
            • Struts-el - The optional Struts-el taglib makes it easy to use Struts with JSTL (container with servlet 2.3 support required).

            The source for these components is available in the Struts source distribution. Binary distributions may also be made available with the Struts download area. As optional components, these products have their own release cycles.

            Action Package Additions

            The following new features have been added to the basic controller framework [org.apache.struts.action]:

            • The ActionServlet now provides support for modular Struts applications and sports several new extension points.
            • The new ActionMessages class will support a superset of the capabilities of ActionErrors, and will be useful as a collection of general purpose messages, not just errors.

            Upload Package Additions

            The following new features have been added to the file upload classes [org.apache.struts.upload]:

            • CommonsMultipartRequestHandler: New class that implements file upload using the Jakarta Commons FileUpload package.

            Util Package Additions

            The following new features have been added to the utility classes [org.apache.struts.util]:

            • LocalStrings: Correct message regarding replaceable parameter so that it does not append an extraneous character.
            • LabelValueBean: New class that defines a collection of name/value pairs that can be used with the <html:options> tag, and elsewhere.
            • MessageResources: Escape any single quote characters that are included in the specified message string.
            • computeParameters: Allow a transaction token to be the only parameter in .
            • RequestUtils: Change to encode ampersands when building a query string.

            Bean Taglib Package Additions

            The following new features have been added to the struts-bean custom tag library [org.apache.struts.taglib.bean]:

            • <bean:write>: Add format, locale and bundle attributes to support formatting values according to current user locale, format string from attribute or format string from string resources.
            • <bean:cookie>, <bean:header>, or <bean:parameter>: Correct the generated scripting variable type when tag is used with the "multiple" attribute.
            • <bean:message>: Added name, property, and scope attributes to the tag, so that the message source key can be obtained dynamically from a bean or bean property.

            HTML Taglib Package Additions

            The following new features have been added to the struts-html custom tag library [org.apache.struts.taglib.html]:

            • <html:link>: Added 'action' attribute.
            • <html:options>: If the property specified by the 'property' attribute returns null, tag now throws an error message that indicates what the real problem is, rather than causing an NPE.
            • <html:option> and <html:options>: Added 'style' and 'styleClass' attributes.
            • <html:optionsCollection>: New tag providing a cleaner way of populating HTML options from a collection.
            • <bean:message>: Added 'name', 'property' and 'scope' attributes so that the message resource key can be obtained dynamically from a bean.
            • <html:messages>: New tag to iterate through a message collection in the new ActionMessages class.
            • ActionForm: Tag will now call reset() if it instantiates the ActionForm bean. This also requires that the bean instantiated by the tag to be an ActionForm subclass.
            • <html:image>: Added the 'align' attribute.
            • <html:img>: Added the mouse event attributes ('onclick', 'ondblclick', 'onmousedown', 'onmouseup', 'onmouseover', 'onmousemove', 'onmouseout').
            • SubmitTag, SelectTag, LinkTag.java, CheckboxTag, ButtonTag, ImageTag, RadioTag, and TextArea tags: Added indexed property.

            Logic Taglib Package Additions

            The following new features have been added to the struts-logic custom tag library [org.apache.struts.taglib.logic]:

            • <logic:empty> and <logic:notEmpty>: New tags that are similar to <logic:present> and <logic:notPresent> except for the treatment of empty strings.

            Template Taglib Package Additions

            The following new features have been added to the struts-template custom tag library [org.apache.struts.taglib.template]:

            • None.

            Documentation Additions

            The following new features have been added to the Struts Documentation application (and corresponding contents on the Struts web site):

            • Version Differences: New section in Release Notes to link to the JavaDocs for all Struts classes and members added or changed between versions.
            • FAQ/HowTos: New documentation category organizes our FAQs and example-driven howTos. New HowTos include "Building Applications", "Using SSL", and using Struts with Eclipse or NetBeans.
            • User Guide Preface: New section to overview the enabling technologies behind Struts.
            • Developer Guides: Added "cover page" to guides. These then link to the Package Descriptions and the API guides.
            • HTML tag documentation: expanded to cover using indexed properties with iterate.
            • Site Menu: Removed separate links to taglib documentation, since these are now in the Developer Guide.
            • Newbie FAQ: The questions most likely to be asked by new developers using Struts. Still under development.
            • Kickstart FAQ: The questions most likely to be asked when selecting Struts.
            • 1.0 JavaDoc: Added archival copy to web site for future reference.
            • The UserGuide "Building" pages: General revisions to reflect new features and current practices.
            • Installation: Updated instructions for SilverStream and Resin. Add installation notes for Jetty. Added RexIP to list of nominal containers.
            • JavaDocs: New @since Struts 1.1 tag to indicate new packages, classes, and members added after the Struts 1.0.x version

            Struts Configuration Changes

            The following changes and bug fixes have occurred in the configuration files related to Struts:

            • Deprecated (Struts 0.5) configuration file format: Remove support.
            • Deprecated (Struts 0.5) methods: Remove from codebase.

            Added Config Package

            • ControllerConfig: Added inputForward property to indicate that ActionMapping.input is a forward rather than a URI.
            • ControllerConfig: Added forwardPattern and inputPattern to help manage page directories in application modules.
            • Added package to provide more flexibility in configuring the controller and to provide support for modular applications

            Action Package Changes

            The following changes and bug fixes have occurred in the basic controller framework (package org.apache.struts.action):

            • ActionMapping: input property may now refer to an ActionForward rather than a module-relative path if inputForward is set to true on the module's ControllerConfig bean [org.apache.struts.config.ControllerConfig.
            • ActionServlet: Added convertNull parameter to simulate the Struts 1.0 behavior when populating forms. If set to true, the numeric Java wrapper class types (like java.lang.Integer) will default to null (rather than 0).
            • ActionServlet: Added "config/$foo" parameter and deprecated several others in favor of components in the new config package.
            • ActionForms and related classes: now use a StringBuffer when responding a toString request in order to conserve resources.
            • LookupDispatchAction: Added standard Action to help select between internationalized buttons.
            • ActionForm class: Modified to use ActionServletWrapper rather than expose ActionServlet.
            • ActionServletWrapper class: Added for use by ActionForm to prevent the Public String properties of ActionServlet from being changed via a query string.
            • Action.MAPPING_KEY request attribute: Unconditionally pass the selected mapping as a request attribute ("org.apache.struts.action.mapping.instance") even if no form bean is specified.
            • ActionServlet: Avoid a NullPointerException in corner cases caused by failed initialization of servlet.
            • ActionForm class: Now truly serializable, because the two non-serializable instance variables (servlet and multipartRequestHandler) have been made transient. However, if you actually do serialize and deserialize such instances, it is your responsibility to reset these two properties.
            • ActionMessages and ActionErrors: The initial order a property/key is added in is now retained.

            Upload Package Changes

            The following changes and bug fixes have occurred in the file upload package (package org.apache.struts.upload):

            • CommonsMultipartRequestHandler: New implementation of file upload based on the Jakarta Commons FileUpload package. This new implementation is now the default.
            • BufferedMultipartInputStream: Fixed lost byte problem.
            • ArrayIndexOutOfBoundsException: Fixed situations where this was known to occur.
            • Multipart requests: Better reporting for premature closing of input streams while reading multipart requests.
            • New line characters: Additional fix for file corruption problem with uploads and new line characters.

            Utility Package Changes

            The following changes and bug fixes have occurred in the utilities (package org.apache.struts.util):

            • RequestUtils: Added support for forwardPattern, pagePattern, and inputForward properties on ControllerConfig.
            • GenericDataSource: Deprecated and modified to act as a thin wrapper around [org.apache.commons.dbpc.BasicDataSource]. Replaced by direct use of BasicDataSource or other compatible component.
            • RequestUtils class: Modify to use ActionServletWrapper rather than expose ActionServlet.
            • Added error message for the getActionErrors and getActionMessages method.
            • getActionErrors and getActionMessages: Added methods to generate the correct corresponding object based on the object retrieved from request scope based on the key passed in.
            • ActionErrors or ActionMessages: The logic for creating one of these objects has been moved to a utility method in RequestUtils.
            • JspException message: Now generated in RequestUtils.
            • ConvertUtils.convertCharacter(): Will now detect empty strings and return the default value.

            Bean Taglib Package Changes

            The following changes and bug fixes have occurred in the struts-bean custom tag library [org.apache.struts.taglib.bean]:

            • <html:errors>: When the property tag is specified, errors are no longer printed if the specified property has no errors. Previously errors were always printed ! Future enhancements would include additional attributes to always turn off the header or footer.
            • Made the remaining helper methods "protected" rather than "private".

            HTML Taglib Package Changes

            The following changes and bug fixes have occurred in the struts-html custom tag library (package org.apache.struts.taglib.html):

            • FormTag: Fixed to exclude query string when identifying action mapping name.
            • ImgTag: Correctly URLEncode the query string parameter value even if there is only a single parameter.
            • MultiboxTag.doAfterBody(): Corrected to return SKIP_BODY instead of SKIP_PAGE.

            Logic Taglib Package Changes

            The following changes and bug fixes have occurred in the struts-logic custom tag library (package org.apache.struts.taglib.logic):

            • None.

            Documentation Application Changes

            The following changes and bug fixes to the Struts Documentation application (and corresponding contents on the Struts web site) have occurred:

            • Reorganized Resources into separate pages..
            • In the Tag Developers Guide, add more detail regarding file upload requirements.
            • In Building View Components, clarify that additional i18n support may be provided by the browser, and is outside the scope of the framework.
            • In Building Controller Components, document 'validating' init-param, add defaults for various parameters, clarify that some web.xml settings are not Struts-specific.
            • Tag library documentation: Moved under User's Guide.
            • Reorganized to separate 1.0 material from nightly build material.

            MailReader Example Application Changes

            The following changes and bug fixes to the Struts MailReader Example Application have occurred:

            • Add Russian and Japanese translations of the application resources and set the character set for the example JSP pages to "UTF-8" so that it can display either English or Japanese.
            • Exchange "name" for "attribute" properties for Edit mappings in Struts configuration file.
            • Remove references to saving database data from "tour" document, since this functionality was removed.

            Template Example Application Changes

            The following changes and bug fixes to the Struts Template Example Application have occurred:

            • None.

            Exercise Taglib Example Application Changes

            The following changes and bug fixes to the Struts Exercise Taglib Example Application have occurred:

            • Added test case for <html:link> using "action" attribute.
            • Added test case for <html:select> using <html:options> based on a collection saved in the page context.

            This section provides links to the Struts JavaDoc for any classes that have been added or deprecated since the Struts 1.0 release.

            Previously deprecated classes and packages removed in Struts 1.1

            • Removed: org.apache.struts.utils.BeanUtils, org.apache.struts.utils.ConvertUtils, and org.apache.struts.utils.PropertyUtils - replaced by org.apache.commons.beanutils
            • Removed: org.apache.struts.util.ArrayStack, org.apache.struts.util.FastArrayList, org.apache.struts.util.FastHashMap, org.apache.struts.util.FastTreeMap - replaced by org.apache.commons.collections
            • Removed: org.apache.struts.digester.* - replaced by org.apache.commons.digester
            • Removed: The struts-config.dtd - Replaced by struts-config_1_1.dtd.
            • Removed: The omnibus "struts" taglib and its associated TLD - replaced by separate bean, logic, and html taglibs.
            • Removed: The "form" taglib and its associated TLD - replaced by (renamed as) the html taglib.

            Packages added in Struts 1.1

            Classes added in Struts 1.1

            action

            actions

            taglib.html

            taglib.logic

            upload

            util

            Classes with members added in Struts 1.1

            action.Action

            • ACTION_SERVLET_KEY
            • APPLICATION_KEY
            • MESSAGE_KEY
            • PLUG_INS_KEY
            • REQUEST_PROCESSOR_KEY
            • execute
            • getResources(javax.servlet.http.HttpServletRequest)
            • saveMessages

            action.ActionServlet

            • configDigester
            • convertHack
            • log
            • processor
            • getInternal
            • destroyApplications
            • destroyConfigDigester
            • getApplicationConfig
            • getRequestProcessor
            • initApplicationConfig
            • initApplicationDataSources
            • initApplicationPlugIns
            • initApplicationMessageResources
            • initConfigDigester
            • methods created for backward-compatiblity only
              • defaultControllerConfig
              • defaultFormBeansConfig
              • defaultForwardsConfig
              • defaultMappingsConfig
              • defaultMessageResourcesConfig

            taglib.html.BaseHandlerTag

            • indexed
            • setIndexed
            • getIndexed

            Classes deprecated between Struts 1.0 and Struts 1.1

            action

            • ActionException
            • ActionFormBeans
            • ActionForwards
            • ActionMappings

            Classes with members deprecated between Struts 1.0 and Struts 1.1

            action.Action

            • FORM_BEANS_KEY
            • FORWARDS_KEY
            • MAPPINGS_KEY
            • getResources()
            • perform

            ActionServlet

            • findDataSource
            • findFormBean
            • findForward
            • findMapping
            • initDataSources
            • methods created for backward-compatiblity only
              • defaultControllerConfig
              • defaultFormBeansConfig
              • defaultForwardsConfig
              • defaultMappingsConfig
              • defaultMessageResourcesConfig

            Next: Installation

            libstruts1.2-java-1.2.9/doc/userGuide/release-notes-1.1-rc2.xml0000644000175000017500000013370610404045222024441 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Robert Leland Ted Husted Martin Cooper Struts Release Notes (Version 1.1 Release Candidate 1)

            This section contains the release notes for the Version 1.1 Release Candidate 2 build of the Struts Framework, for changes that have taken place since Version 1.1 Release Candidate 1 was issued. For a complete list of changes since the last production release, see the Introduction

            In RC2, the Commons-DBCP and Commons-Pool dependencies have been removed. These are replaced with a dependency on the Struts-Legacy package, containing the GenericDataSource and GenericConnection classes from Struts 1.0.2. These are distributed for J2SE 1.3 but may be recompiled for J2SE 1.4. Other DataSource implementations may be plugged in (recommended).

            RC2 is dependent upon Commons FileUpload RC1. The final release of Struts 1.1 cannot happen until this dependency is updated to a final release of FileUpload. All other dependencies are in their final release.

            Other changes since RC1 have been routine fixes and refactorings.

            OTHER CHANGES:

            Action package: Deprecated processActionForward() because ActionForward is a subclass of ForwardConfig so there's no reason we can't use processForwardConfig() instead. Updated to use processForwardConfig instead of deprecated processActionForward. Deprecated the rest of the Action constants in favor of Globals. Refactored some of initModuleConfig into a separate method and cleaned up. Improved exception handling in ActionServlet and RequestProcessor; generally, we limited the scope of try/catch blocks and caught specific exceptions rather than Throwable.

            Documentation: Document the <html:html> tag's locale attribute behaviour of creating a session if needed. Added note to validator section regarding the converNull servlet parameter and required validations of java.lang.Integer fields. Moved sites and consultants page to Struts Wiki. Other minor tweaks.

            EL package: Fixed mapping of "onkeypress" attribute. Separated "expr" attribute into "expr" and "exprValue", being the original attribute value and the evaluated value. Fixed probably long-standing bug in notMatch tag that made it behave identically to the "match" tag (instead of the reverse).

            Example applicattions: Added Multi-config files for the example app.

            Legacy package: Added package under contrib to host old GenericDataSource and GenericConnection classes.

            Taglibs packages: Fixed several import statements. Refactored converting a scope name into its integer constant into a new method RequestUtils.getScope(String), and changed the DefineTag, EmptyTag, and TagUtils classes to use the new method.

            faces taglib. Added early release to contrib area.

            html taglib. Reset the 'processed' flag at the beginning of each usage of the tag. Use a local copy of the 'name' attribute to avoid modifying the attribute value itself. Fixed references to static members. For FrameTag and HiddenTag, conform TLD with implementations. In ErrorsTag, render a platform-independent line ending instead of hard coded "\r\n". In JavaScriptValidatorTag, make the line-end generation platform independent so that Cactus tests work properly. In FormTag, refactored code into smaller reusable methods. In RewriteTag, encode the ampersand character in XHTML mode only, otherwise write the ampersand as is so the URL will work in JavaScript scripts. Refactored form bean initialization out of doStartTag() into its own method. Refactored doStartTag() 'if' statement to avoid having long nested 'if' logic. In ErrorTag, fixed formatting and deprecated unused defaultLocale variable. Refactored doStartTag() and doEndTag() into smaller methods. Moved xhtml check to RequestUtils instead of duplicating the logic in many different classes. Added lookupProperty() method to BaseHandlerTag because both RadioTag and TextareaTag used the same code. Refactored TextareaTag into smaller methods. In JavaScriptValidatorTag, replaced duplicated code with call to RequestUtils.retrieveUserLocale() and simplified an 'if' statement.

            logic taglib. Set 'iterator' to null in doEndTag() so that we release the iterator reference as early as possible. We cannot do the same for 'collection' since it is a tag attribute, and needs to remain unchanged to comply with the JSP spec. Don't create empty cookies array if null, just don't run the loop at all. In ForwardTag, remove unnecessary test for null.

            nested tablibs. Improved support for Tomcat 4.1.18. Replace EVAL_BODY_AGAIN with EVAL_BODY_TAG so that the code compiles against the JSP 1.1 API. Changed the <nested:define> tag's tei class to reference a new custom tei class for the nested tags.

            tiles taglib. Fixed references to static members. Deprecated outdated Tiles TextTag. For InsertTag, only include page if it's non-null. For InserTag, remove page check before including for more investigation.

            Test packages: Added several new tests for the bean, html, and logic taglibs to the suite setup at the tail-end of RC1. Note: We cannot resolve request.getServerPort() in the Cactus 1.4.x environment, so for now, our tests will only run on Cactus 1.3

            Tiles package: Deprecated TilesUtil.applicationClass() in favor of RequestUtils.applicationClass()

            Util package: retrieveUserLocale now uses the request.getLocale() method for finding the user's preferred locale. If user has not specified this with Accept-Language header, the server default locale is used. Change encodeURL() to not use reflection on every call. In RequestUtils, simplified separator logic in computeURL().

            Validator package: Deprecate logging methods and indicate that commons-logging should be used. Logic simplification and minor formatting fixes to Resources class.

            build files:

            • (build.properties.sample) Add an entry for http-unit.
            • Remove dependency on Commons Resources for Struts 1.1 release. (This migration will happen later).
            • Make it possible to build Struts against the Servlet 2.4 and JSP 2.0 APIs, where the JSP classes have been pulled out into their own JAR file (jsp.jar). On an earlier platform, you can leave the "jsp.jar" property unset and thing will continue to operate as they have before.

            Bugzilla Problem Report fixes:

            • Fixed #17312 - retrieveUserLocale throws exception without sessions.
            • Fixed #17254 - If body text is empty and there's no resource key to lookup, display nothing in the option.
            • Fixed #17371- The tag now uses RequestUtils.retrieveUserLocale for looking up the appropriate locale. Using that method protects us from needlessly creating a session.
            • Fixed #17375 - Problem in ELErrorsTag because the "name" attribute of ErrorsTag has a non-null default value.
            • Fixed #17622 - validator-rules.xml issues.
            • Fixed #17299 - Set page variable from dyna map before validating.
            • Fixed #17838 - Help debug specific user errors by showing quotes around the key that is in error (missing or mispelled).
            • Fixed #17833 - validateShort and isAllDigits for negative numbers.
            • Fixed #17328 - Synchronized loadLocale.
            • Fixed #18018 - Changed field-* variables to camel case and no "-".
            • Fixed #16548 - validateMinLength and validateMaxLength are now independent of the required check.
            • Fixed #17389 - Splice in the I18nFactorySet.calculatePostixes from the attachment, rebuild, and ran the unit tests successfully.
            • Fixed #17273 - Removed extra return statement (RequestUtils).
            • Fixed #17592 - Tag should support a "naked" collection that is not a property of a bean.
            • Fixed #17592 - Made "property" attribute of "optionsCollection" tag be not required, to match same change made for #17592 in base tag.
            • Fixed #17562 - Change the InsertTag to let it use PageContext.include() instead of RequestDispatcher.include(). We are no back to the same mechanism used in the 1.1b3 release.
            • Fixed #18186 - Use temp variable instead of overwriting tag attribute variable.
            • Fixed #18394 - Changed error to info log if DefinitionsFactory is not supplied.
            • Fixed #18538 - Changed shortname to "tiles".
            • Fixed #18591 - Braces placement in message().
            • Fixed #18018 - Don't output requiredif field* javascript variables because they're not used and break other validations.
            • Fixed #18794 -Check ServletContext for ModuleConfig instead of request.
            • Fixed #18864 - Changed Class-Path to conform to jar spec. The previous patch fixing a bug in WebLogic caused warnings in Resin.
            • Fixed #18991 - Allow messages object passed to add(ActionMessages) to be null.
            • Fixed #19040 - Added null checks back to ActionServlet.
            • Fixed #19157 - Implement Serializable in NestedReference.
            • Fixed #18869 - Added display-name to web.xml files.
            • Fixed #19223 - Synchronized token methods for PR. Post 1.1 these methods should be moved to some kind of TokenProcessor class for reusability by other components such as the RequestProcessor (#16743).
            • Fixed #19236 - Added "action" attribute to "html-el:frame" tag.
            • Fixed #11932 - Factored common code out of message() and present() into a new private method retrieveMessageResources.
            • Fixed #11922 - Moved Action's token methods to this new class to fix synchronization issues and allow Action to be more focused.
            • Fixed #19594 - Fixed minlength javascript for PR. Also, removed password field checking from validateMask.
            • Fixed #19773 - EmptyTag and added test to exercise-taglib webapp.
            • Fixed #19835 - Add check against -1 to maxSize.
            • Fixed #20034 - Call releaseInternal() in release() so if error occurs between begin/end of tag next user/request will not be working with old parameters.
            • Fixed #20455 - validateRequiredIf() fails on Strings of whitespace.

            The remainder of this document contains the release notes for 1.1 Release Candidate 2 build of the Struts Framework, and covers changes that have taken place since Version 1.0.2 was released. The following sections cover New Features and Changes to Struts.

            The binary distribution of this release includes the following files relevant to Struts:

            • INSTALL - Brief installation instructions. See the Struts Documentation Application, or online at http://jakarta.apache.org/struts/, for more information.
            • LICENSE - The Apache Software Foundation license that defines the terms under which you can use Struts (and other software licensed by Apache).
            • README - A brief introduction to Struts.
            • lib/ - Directory containing files you will need in your own applications. The individual files of interest are:
              • commons-*.jar - Release packages from the Jakarta Commons Project that Struts relies on. You are welcome to use these classes in your own applications. These JAR files should be copied into the /WEB-INF/lib directory of your web application. See below for the version of each Commons library that is included.
              • struts.jar - JAR file that contains the compiled Java classes of Struts. You must place this file in the /WEB-INF/lib directory of your web application.
              • struts-xxxxx.tld - The tag library descriptor files for the Struts 1.1 tag libraries (bean, html, logic, and template). You must place these files in the /WEB-INF directory of your web application, and reference them with appropriate <taglib> directives in your web.xml file.
              • jdbc2_0-stdext.jar - The JDBC 2.0 Optional Package API classes (package javax.sql). You will need to include this file in the /WEB-INF/lib directory of your application, if it is not already made visible to web applications by your servlet container.
              • struts-config_1_1.dtd - The document type descriptor (DTD) for the Struts 1.1 configuration file (which is typically named /WEB-INF/struts-config.xml). Your configuration file will be validated against an internal copy of this DTD -- this copy is available for reference purposes only.
              • struts-config_1_0.dtd - The document type descriptor (DTD) for the Struts 1.0 configuration file (which is typically named /WEB-INF/struts-config.xml). Your configuration file will be validated against an internal copy of this DTD -- this copy is available for reference purposes only.
              • web-app_2_2.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.2 specification. This copy is for reference purposes only.
              • web-app_2_3.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.3 specification. This copy is for reference purposes only.
            • webapps/ - Web Application Archive (WAR) files for the web applications that are included with Struts.

            The following Jakarta Commons libraries are included with this release of Struts:

            • Commons BeanUtils 1.6.1
            • Commons Collections 2.1
            • Commons Digester 1.5
            • Commons FileUpload 1.0 RC1
            • Commons Lang 1.0.1
            • Commons Logging 1.0.3
            • Commons Validator 1.0.2

            Following are highlights of the new features. In the next section, we provide links to the JavaDocs for the affected classes.

            New Configuration DTD

            The Struts Configuration 1.0 DTD has been deprecated in favor of the struts-config_1_1.dtd. In the Struts 1.1 release, existing Struts configuration files can be loaded using either DTD version.

            New Dependencies on Commons packages

            Several components of Struts 1.0 have been found to be useful in general Java development (and not just useful for building Struts-based web applications), and have been migrated into the Jakarta Commons Project. As a result, this release of Struts has been modified to rely on the Commons packages containing these classes, rather than the Struts internal versions. In nearly every case, this involved changing only the import statements at the top of the classes. Any of your applications that utilize these classes will need to be modified in the same way.

            The following Commons packages contain the replacements for the corresponding Struts 1.0 classes:

            • BeanUtils Package [org.apache.commons.beanutils] - org.apache.struts.utils.BeanUtils, org.apache.struts.utils.ConvertUtils, and org.apache.struts.utils.PropertyUtils.
            • Collections Package [org.apache.commons.collections] - org.apache.struts.util.ArrayStack, org.apache.struts.util.FastArrayList, org.apache.struts.util.FastHashMap, org.apache.struts.util.FastTreeMap.
            • Digester Package - [org.apache.commons.digester] - org.apache.struts.digester.*.

            The following Commons packages are also now used by various components of the Struts framework:

            NOTE! XML Parser Prerequisite Updated

            Struts now depends on an XML parser that conforms to the JAXP/1.1 (rather than JAXP/1.0) APIs. Parsers known to work include the JAXP/1.1 reference implementation, and Xerces 1.3.1.

            SOURCE DEVELOPERS NOTE! Ant Prerequisite Updated

            To build Struts from source Ant 1.4 or later is now required. This does not affect developers that use Struts from the binary distribution.

            Struts Validator Integration

            The new Commons Validator is now integrated with Struts and exposed through the new Validator package.

            Tiles - An advanced templating taglib

            The Tiles JSP assembly framework has been integrated with Struts.

            Nested - An very cool taglib extension

            The Nested taglib is bundled with Struts and enhances the functionality of the existing Struts tags.

            New Example Applications

            New example applications for the Validator and Tiles are now part of the Struts distribution.

            New Contrib directory for optional components

            A new directory (contrib) in the CVS source repository has been added to accumulate Struts add-on extensions that are generally useful but have not yet been integrated into the standard code base.

            • Scaffold - An extension of the Commons Scaffold toolkit of reusable classes for building web applications.
            • Struts-EL - The optional Struts-EL taglib makes it easy to use Struts with JSTL. (Container with Servlet 2.3 support required.)

            The source for these components is available in the Struts source distribution. Binary distributions may also be made available in the Struts download area. As optional components, these products have their own release cycles.

            Action Package Additions

            The following new features have been added to the basic controller framework [org.apache.struts.action]:

            • The ActionServlet now provides support for modular Struts applications and sports several new extension points.
            • The new ActionMessages class will support a superset of the capabilities of ActionErrors, and will be useful as a collection of general purpose messages, not just errors.

            Upload Package Additions

            The following new features have been added to the file upload classes [org.apache.struts.upload]:

            • CommonsMultipartRequestHandler: New class that implements file upload using the Jakarta Commons FileUpload package. This is now the default file upload implementation for Struts.

            Util Package Additions

            The following new features have been added to the utility classes [org.apache.struts.util]:

            • LocalStrings: Correct message regarding replaceable parameter so that it does not append an extraneous character.
            • LabelValueBean: New class that defines a collection of name/value pairs that can be used with the <html:options> and <html:optionsCollection> tags, and elsewhere.
            • MessageResources: Escape any single quote characters that are included in the specified message string.
            • computeParameters: Allow a transaction token to be the only parameter.
            • RequestUtils: Change to encode ampersands when building a query string.

            Bean Taglib Package Additions

            The following new features have been added to the struts-bean custom tag library [org.apache.struts.taglib.bean]:

            • <bean:write>: Add format, locale and bundle attributes to support formatting values according to current user locale, format string from attribute or format string from string resources.
            • <bean:cookie>, <bean:header>, or <bean:parameter>: Correct the generated scripting variable type when tag is used with the "multiple" attribute.
            • <bean:message>: Added name, property, and scope attributes to the tag, so that the message source key can be obtained dynamically from a bean or bean property.

            HTML Taglib Package Additions

            The following new features have been added to the struts-html custom tag library [org.apache.struts.taglib.html]:

            • <html:link>: Added 'action' attribute.
            • <html:options>: If the property specified by the 'property' attribute returns null, tag now throws an error message that indicates what the real problem is, rather than causing an NPE.
            • <html:option> and <html:options>: Added 'style' and 'styleClass' attributes.
            • <html:optionsCollection>: New tag providing a cleaner way of populating HTML options from a collection.
            • <bean:message>: Added 'name', 'property' and 'scope' attributes so that the message resource key can be obtained dynamically from a bean.
            • <html:messages>: New tag to iterate through a message collection in the new ActionMessages class.
            • ActionForm: Tag will now call reset() if it instantiates the ActionForm bean. This also requires that the bean instantiated by the tag to be an ActionForm subclass.
            • <html:image>: Added the 'align' attribute.
            • <html:img>: Added the mouse event attributes ('onclick', 'ondblclick', 'onmousedown', 'onmouseup', 'onmouseover', 'onmousemove', 'onmouseout').
            • SubmitTag, SelectTag, LinkTag.java, CheckboxTag, ButtonTag, ImageTag, RadioTag, and TextArea tags: Added indexed property.

            Logic Taglib Package Additions

            The following new features have been added to the struts-logic custom tag library [org.apache.struts.taglib.logic]:

            • <logic:empty> and <logic:notEmpty>: New tags that are similar to <logic:present> and <logic:notPresent> except for the treatment of empty strings.

            Template Taglib Package Additions

            The following new features have been added to the struts-template custom tag library [org.apache.struts.taglib.template]:

            • None.

            Documentation Additions

            The following new features have been added to the Struts Documentation application (and corresponding contents on the Struts web site):

            • Version Differences: New section in Release Notes to link to the JavaDocs for all Struts classes and members added or changed between versions.
            • FAQ/HowTos: New documentation category organizes our FAQs and example-driven howTos. New HowTos include "Building Applications", "Using SSL", and using Struts with Eclipse or NetBeans.
            • User Guide Preface: New section to overview the enabling technologies behind Struts.
            • Developer Guides: Added "cover page" to guides. These then link to the Package Descriptions and the API guides.
            • HTML tag documentation: expanded to cover using indexed properties with iterate.
            • Site Menu: Removed separate links to taglib documentation, since these are now in the Developer Guide.
            • Newbie FAQ: The questions most likely to be asked by new developers using Struts. Still under development.
            • Kickstart FAQ: The questions most likely to be asked when selecting Struts.
            • 1.0.2 JavaDoc: Added archival copy to web site for future reference.
            • The UserGuide "Building" pages: General revisions to reflect new features and current practices.
            • Installation: Updated instructions for SilverStream and Resin. Add installation notes for Jetty. Added RexIP to list of nominal containers.
            • JavaDocs: New @since Struts 1.1 tag to indicate new packages, classes, and members added after the Struts 1.0.x version

            Struts Configuration Changes

            The following changes and bug fixes have occurred in the configuration files related to Struts:

            • Deprecated (Struts 0.5) configuration file format: Remove support.
            • Deprecated (Struts 0.5) methods: Remove from codebase.

            Added Config Package

            • ControllerConfig: Added inputForward property to indicate that ActionMapping.input is a forward rather than a URI.
            • ControllerConfig: Added forwardPattern and inputPattern to help manage page directories in application modules.
            • Added package to provide more flexibility in configuring the controller and to provide support for modular applications

            Action Package Changes

            The following changes and bug fixes have occurred in the basic controller framework (package org.apache.struts.action):

            • All constants in the Action class: Deprecated in favor of equivalents in new Globals class.
            • ActionMapping: input property may now refer to an ActionForward rather than a module-relative path if inputForward is set to true on the module's ControllerConfig bean [org.apache.struts.config.ControllerConfig.
            • ActionServlet: Added convertNull parameter to simulate the Struts 1.0 behavior when populating forms. If set to true, the numeric Java wrapper class types (like java.lang.Integer) will default to null (rather than 0).
            • ActionServlet: Added "config/$foo" parameter and deprecated several others in favor of components in the new config package.
            • ActionForms and related classes: Now use a StringBuffer when responding to a toString request in order to conserve resources.
            • LookupDispatchAction: Added standard Action to help select between internationalized buttons.
            • ActionForm class: Modified to use ActionServletWrapper rather than expose ActionServlet.
            • ActionServletWrapper class: Added for use by ActionForm to prevent the Public String properties of ActionServlet from being changed via a query string.
            • Action.MAPPING_KEY request attribute: Unconditionally pass the selected mapping as a request attribute ("org.apache.struts.action.mapping.instance") even if no form bean is specified.
            • ActionServlet: Avoid a NullPointerException in corner cases caused by failed initialization of servlet.
            • ActionForm class: Now truly serializable, because the two non-serializable instance variables (servlet and multipartRequestHandler) have been made transient. However, if you actually do serialize and deserialize such instances, it is your responsibility to reset these two properties.
            • ActionMessages and ActionErrors: The initial order a property/key is added in is now retained.
            • processActionForward(): Deprecated in favor of processForwardConfig

            Upload Package Changes

            The following changes and bug fixes have occurred in the file upload package (package org.apache.struts.upload) [part of the Upload webapp]:

            • CommonsMultipartRequestHandler: New implementation of file upload based on the Jakarta Commons FileUpload package. This new implementation is now the default.
            • BufferedMultipartInputStream: Fixed lost byte problem.
            • ArrayIndexOutOfBoundsException: Fixed situations where this was known to occur.
            • Multipart requests: Better reporting for premature closing of input streams while reading multipart requests.
            • New line characters: Additional fix for file corruption problem with uploads and new line characters.

            Utility Package Changes

            The following changes and bug fixes have occurred in the utilities (package org.apache.struts.util):

            • RequestUtils: Added support for forwardPattern, pagePattern, and inputForward properties on ControllerConfig.
            • GenericDataSource: Deprecated and modified to act as a thin wrapper around [org.apache.commons.dbpc.BasicDataSource]. Replaced by direct use of BasicDataSource or other compatible component.
            • RequestUtils class: Modify to use ActionServletWrapper rather than expose ActionServlet.
            • Added error message for the getActionErrors and getActionMessages method.
            • getActionErrors and getActionMessages: Added methods to generate the correct corresponding object based on the object retrieved from request scope based on the key passed in.
            • ActionErrors or ActionMessages: The logic for creating one of these objects has been moved to a utility method in RequestUtils.
            • JspException message: Now generated in RequestUtils.
            • ConvertUtils.convertCharacter(): Will now detect empty strings and return the default value.

            Bean Taglib Package Changes

            The following changes and bug fixes have occurred in the struts-bean custom tag library [org.apache.struts.taglib.bean]:

            • <html:errors>: When the property tag is specified, errors are no longer printed if the specified property has no errors. Previously errors were always printed ! Future enhancements would include additional attributes to always turn off the header or footer.
            • Made the remaining helper methods "protected" rather than "private".

            HTML Taglib Package Changes

            The following changes and bug fixes have occurred in the struts-html custom tag library (package org.apache.struts.taglib.html):

            • FormTag: Fixed to exclude query string when identifying action mapping name.
            • ImgTag: Correctly URLEncode the query string parameter value even if there is only a single parameter.
            • MultiboxTag.doAfterBody(): Corrected to return SKIP_BODY instead of SKIP_PAGE.
            • Errortag: defaultLocale method is deprecated as it is unused.

            Logic Taglib Package Changes

            The following changes and bug fixes have occurred in the struts-logic custom tag library (package org.apache.struts.taglib.logic):

            • None.

            Documentation Application Changes

            The following changes and bug fixes to the Struts Documentation application (and corresponding contents on the Struts web site) have occurred:

            • Reorganized Resources into separate pages..
            • In the Tag Developers Guide, add more detail regarding file upload requirements.
            • In Building View Components, clarify that additional i18n support may be provided by the browser, and is outside the scope of the framework.
            • In Building Controller Components, document 'validating' init-param, add defaults for various parameters, clarify that some web.xml settings are not Struts-specific.
            • Tag library documentation: Moved under User's Guide.
            • Reorganized to separate 1.0 material from nightly build material.

            MailReader Example Application Changes

            The following changes and bug fixes to the Struts MailReader Example Application have occurred:

            • Add Russian and Japanese translations of the application resources and set the character set for the example JSP pages to "UTF-8" so that it can display either English or Japanese.
            • Exchange "name" for "attribute" properties for Edit mappings in Struts configuration file.
            • Remove references to saving database data from "tour" document, since this functionality was removed.

            Template Example Application Changes

            The following changes and bug fixes to the Struts Template Example Application have occurred:

            • None.

            Exercise Taglib Example Application Changes

            The following changes and bug fixes to the Struts Exercise Taglib Example Application have occurred:

            • Added test case for <html:link> using "action" attribute.
            • Added test cases for <html:select> using <html:options> and <html:optionsCollection> based on a collection saved in the page context.

            This section provides links to the Struts JavaDoc for any classes that have been added or deprecated since the Struts 1.0 release.

            Previously deprecated classes and packages removed in Struts 1.1

            • Removed: org.apache.struts.utils.BeanUtils, org.apache.struts.utils.ConvertUtils, and org.apache.struts.utils.PropertyUtils - replaced by org.apache.commons.beanutils
            • Removed: org.apache.struts.util.ArrayStack, org.apache.struts.util.FastArrayList, org.apache.struts.util.FastHashMap, org.apache.struts.util.FastTreeMap - replaced by org.apache.commons.collections
            • Removed: org.apache.struts.digester.* - replaced by org.apache.commons.digester
            • Removed: The struts-config.dtd - Replaced by struts-config_1_1.dtd.
            • Removed: The omnibus "struts" taglib and its associated TLD - replaced by separate bean, logic, and html taglibs.
            • Removed: The "form" taglib and its associated TLD - replaced by (renamed as) the html taglib.

            Packages added in Struts 1.1

            Classes added in Struts 1.1

            action

            actions

            taglib.html

            taglib.logic

            upload

            util

            Classes with members added in Struts 1.1

            action.Action

            • ACTION_SERVLET_KEY
            • APPLICATION_KEY
            • MESSAGE_KEY
            • PLUG_INS_KEY
            • REQUEST_PROCESSOR_KEY
            • execute
            • getResources(javax.servlet.http.HttpServletRequest)
            • saveMessages

            action.ActionServlet

            • configDigester
            • convertHack
            • log
            • processor
            • getInternal
            • destroyApplications
            • destroyConfigDigester
            • getApplicationConfig
            • getRequestProcessor
            • initApplicationConfig
            • initApplicationDataSources
            • initApplicationPlugIns
            • initApplicationMessageResources
            • initConfigDigester
            • methods created for backward-compatiblity only
              • defaultControllerConfig
              • defaultFormBeansConfig
              • defaultForwardsConfig
              • defaultMappingsConfig
              • defaultMessageResourcesConfig

            taglib.html.BaseHandlerTag

            • indexed
            • setIndexed
            • getIndexed

            Classes deprecated between Struts 1.0 and Struts 1.1

            action

            • ActionException
            • ActionFormBeans
            • ActionForwards
            • ActionMappings

            Classes with members deprecated between Struts 1.0 and Struts 1.1

            action.Action

            • FORM_BEANS_KEY
            • FORWARDS_KEY
            • MAPPINGS_KEY
            • getResources()
            • perform

            ActionServlet

            • findDataSource
            • findFormBean
            • findForward
            • findMapping
            • initDataSources
            • methods created for backward-compatiblity only
              • defaultControllerConfig
              • defaultFormBeansConfig
              • defaultForwardsConfig
              • defaultMappingsConfig
              • defaultMessageResourcesConfig

            Next: Installation

            libstruts1.2-java-1.2.9/doc/userGuide/release-notes-1.1.xml0000644000175000017500000013465210404045224023760 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Robert Leland Ted Husted Martin Cooper Struts Release Notes (Version 1.1)

            This section contains the release notes for the Version 1.1 build of the Struts Framework, for changes that have taken place since Version 1.1 Release Candidate 2 was issued. For a complete list of changes since the last production release, see the Introduction

            In RC2, the Commons-DBCP and Commons-Pool dependencies have been removed. These are replaced with a dependency on the Struts-Legacy package, containing the GenericDataSource and GenericConnection classes from Struts 1.0.2. These are distributed for J2SE 1.3 but may be recompiled for J2SE 1.4. Other DataSource implementations may be plugged in (recommended).

            Other changes since RC1 have been routine fixes and refactorings.

            OTHER CHANGES:

            Action package: Deprecated processActionForward() because ActionForward is a subclass of ForwardConfig so there's no reason we can't use processForwardConfig() instead. Updated to use processForwardConfig instead of deprecated processActionForward. Deprecated the rest of the Action constants in favor of Globals. Refactored some of initModuleConfig into a separate method and cleaned up. Improved exception handling in ActionServlet and RequestProcessor; generally, we limited the scope of try/catch blocks and caught specific exceptions rather than Throwable.

            Documentation: Document the <html:html> tag's locale attribute behaviour of creating a session if needed. Added note to validator section regarding the converNull servlet parameter and required validations of java.lang.Integer fields. Moved sites and consultants page to Struts Wiki. Other minor tweaks.

            EL package: Fixed mapping of "onkeypress" attribute. Separated "expr" attribute into "expr" and "exprValue", being the original attribute value and the evaluated value. Fixed probably long-standing bug in notMatch tag that made it behave identically to the "match" tag (instead of the reverse).

            Example applicattions: Added Multi-config files for the example app.

            Legacy package: Added package under contrib to host old GenericDataSource and GenericConnection classes.

            Taglibs packages: Fixed several import statements. Refactored converting a scope name into its integer constant into a new method RequestUtils.getScope(String), and changed the DefineTag, EmptyTag, and TagUtils classes to use the new method.

            faces taglib. Added early release to contrib area.

            html taglib. Reset the 'processed' flag at the beginning of each usage of the tag. Use a local copy of the 'name' attribute to avoid modifying the attribute value itself. Fixed references to static members. For FrameTag and HiddenTag, conform TLD with implementations. In ErrorsTag, render a platform-independent line ending instead of hard coded "\r\n". In JavaScriptValidatorTag, make the line-end generation platform independent so that Cactus tests work properly. In FormTag, refactored code into smaller reusable methods. In RewriteTag, encode the ampersand character in XHTML mode only, otherwise write the ampersand as is so the URL will work in JavaScript scripts. Refactored form bean initialization out of doStartTag() into its own method. Refactored doStartTag() 'if' statement to avoid having long nested 'if' logic. In ErrorTag, fixed formatting and deprecated unused defaultLocale variable. Refactored doStartTag() and doEndTag() into smaller methods. Moved xhtml check to RequestUtils instead of duplicating the logic in many different classes. Added lookupProperty() method to BaseHandlerTag because both RadioTag and TextareaTag used the same code. Refactored TextareaTag into smaller methods. In JavaScriptValidatorTag, replaced duplicated code with call to RequestUtils.retrieveUserLocale() and simplified an 'if' statement.

            logic taglib. Set 'iterator' to null in doEndTag() so that we release the iterator reference as early as possible. We cannot do the same for 'collection' since it is a tag attribute, and needs to remain unchanged to comply with the JSP spec. Don't create empty cookies array if null, just don't run the loop at all. In ForwardTag, remove unnecessary test for null.

            nested tablibs. Improved support for Tomcat 4.1.18. Replace EVAL_BODY_AGAIN with EVAL_BODY_TAG so that the code compiles against the JSP 1.1 API. Changed the <nested:define> tag's tei class to reference a new custom tei class for the nested tags.

            tiles taglib. Fixed references to static members. Deprecated outdated Tiles TextTag. For InsertTag, only include page if it's non-null. For InserTag, remove page check before including for more investigation.

            Test packages: Added several new tests for the bean, html, and logic taglibs to the suite setup at the tail-end of RC1. Note: We cannot resolve request.getServerPort() in the Cactus 1.4.x environment, so for now, our tests will only run on Cactus 1.3

            Tiles package: Deprecated TilesUtil.applicationClass() in favor of RequestUtils.applicationClass()

            Util package: retrieveUserLocale now uses the request.getLocale() method for finding the user's preferred locale. If user has not specified this with Accept-Language header, the server default locale is used. Change encodeURL() to not use reflection on every call. In RequestUtils, simplified separator logic in computeURL().

            Validator package: Deprecate logging methods and indicate that commons-logging should be used. Logic simplification and minor formatting fixes to Resources class.

            build files:

            • (build.properties.sample) Add an entry for http-unit.
            • Remove dependency on Commons Resources for Struts 1.1 release. (This migration will happen later).
            • Make it possible to build Struts against the Servlet 2.4 and JSP 2.0 APIs, where the JSP classes have been pulled out into their own JAR file (jsp.jar). On an earlier platform, you can leave the "jsp.jar" property unset and thing will continue to operate as they have before.

            Bugzilla Problem Report fixes:

            • Fixed #17312 - retrieveUserLocale throws exception without sessions.
            • Fixed #17254 - If body text is empty and there's no resource key to lookup, display nothing in the option.
            • Fixed #17371- The tag now uses RequestUtils.retrieveUserLocale for looking up the appropriate locale. Using that method protects us from needlessly creating a session.
            • Fixed #17375 - Problem in ELErrorsTag because the "name" attribute of ErrorsTag has a non-null default value.
            • Fixed #17622 - validator-rules.xml issues.
            • Fixed #17299 - Set page variable from dyna map before validating.
            • Fixed #17838 - Help debug specific user errors by showing quotes around the key that is in error (missing or mispelled).
            • Fixed #17833 - validateShort and isAllDigits for negative numbers.
            • Fixed #17328 - Synchronized loadLocale.
            • Fixed #18018 - Changed field-* variables to camel case and no "-".
            • Fixed #16548 - validateMinLength and validateMaxLength are now independent of the required check.
            • Fixed #17389 - Splice in the I18nFactorySet.calculatePostixes from the attachment, rebuild, and ran the unit tests successfully.
            • Fixed #17273 - Removed extra return statement (RequestUtils).
            • Fixed #17592 - Tag should support a "naked" collection that is not a property of a bean.
            • Fixed #17592 - Made "property" attribute of "optionsCollection" tag be not required, to match same change made for #17592 in base tag.
            • Fixed #17562 - Change the InsertTag to let it use PageContext.include() instead of RequestDispatcher.include(). We are no back to the same mechanism used in the 1.1b3 release.
            • Fixed #18186 - Use temp variable instead of overwriting tag attribute variable.
            • Fixed #18394 - Changed error to info log if DefinitionsFactory is not supplied.
            • Fixed #18538 - Changed shortname to "tiles".
            • Fixed #18591 - Braces placement in message().
            • Fixed #18018 - Don't output requiredif field* javascript variables because they're not used and break other validations.
            • Fixed #18794 -Check ServletContext for ModuleConfig instead of request.
            • Fixed #18864 - Changed Class-Path to conform to jar spec. The previous patch fixing a bug in WebLogic caused warnings in Resin.
            • Fixed #18991 - Allow messages object passed to add(ActionMessages) to be null.
            • Fixed #19040 - Added null checks back to ActionServlet.
            • Fixed #19157 - Implement Serializable in NestedReference.
            • Fixed #18869 - Added display-name to web.xml files.
            • Fixed #19223 - Synchronized token methods for PR. Post 1.1 these methods should be moved to some kind of TokenProcessor class for reusability by other components such as the RequestProcessor (#16743).
            • Fixed #19236 - Added "action" attribute to "html-el:frame" tag.
            • Fixed #11932 - Factored common code out of message() and present() into a new private method retrieveMessageResources.
            • Fixed #11922 - Moved Action's token methods to this new class to fix synchronization issues and allow Action to be more focused.
            • Fixed #19594 - Fixed minlength javascript for PR. Also, removed password field checking from validateMask.
            • Fixed #19773 - EmptyTag and added test to exercise-taglib webapp.
            • Fixed #19835 - Add check against -1 to maxSize.
            • Fixed #20034 - Call releaseInternal() in release() so if error occurs between begin/end of tag next user/request will not be working with old parameters.
            • Fixed #20455 - validateRequiredIf() fails on Strings of whitespace.
            • Fixed #20678 - Struts data-souce pingQuery parameter
            • Fixed #20750 - RequestUtils.retrieveMessageResources (really an RC2 bug)
            • Fixed #20835 - <html:rewrite> tag using page attribute bug
            • Fixed #20877 - MessagesTag has incorrect assignment in release()
            • Fixed #20949 - Tag <html:select> doesn't work well on RC2
            • Fixed #21051 - javascript required validator accepts fields containing only whitespace
            • Fixed #21119 - typo in struts-doc-config.xml

            The remainder of this document contains the release notes for 1.1 Release Candidate 2 build of the Struts Framework, and covers changes that have taken place since Version 1.0.2 was released. The following sections cover New Features and Changes to Struts.

            The binary distribution of this release includes the following files relevant to Struts:

            • INSTALL - Brief installation instructions. See the Struts Documentation Application, or online at http://jakarta.apache.org/struts/, for more information.
            • LICENSE - The Apache Software Foundation license that defines the terms under which you can use Struts (and other software licensed by Apache).
            • README - A brief introduction to Struts.
            • lib/ - Directory containing files you will need in your own applications. The individual files of interest are:
              • commons-*.jar - Release packages from the Jakarta Commons Project that Struts relies on. You are welcome to use these classes in your own applications. These JAR files should be copied into the /WEB-INF/lib directory of your web application. See below for the version of each Commons library that is included.
              • struts.jar - JAR file that contains the compiled Java classes of Struts. You must place this file in the /WEB-INF/lib directory of your web application.
              • struts-xxxxx.tld - The tag library descriptor files for the Struts 1.1 tag libraries (bean, html, logic, and template). You must place these files in the /WEB-INF directory of your web application, and reference them with appropriate <taglib> directives in your web.xml file.
              • jdbc2_0-stdext.jar - The JDBC 2.0 Optional Package API classes (package javax.sql). You will need to include this file in the /WEB-INF/lib directory of your application, if it is not already made visible to web applications by your servlet container.
              • struts-config_1_1.dtd - The Document Type Definition (DTD) for the Struts 1.1 configuration file (which is typically named /WEB-INF/struts-config.xml). Your configuration file will be validated against an internal copy of this DTD -- this copy is available for reference purposes only.
              • struts-config_1_0.dtd - The Document Type Definition (DTD) for the Struts 1.0 configuration file (which is typically named /WEB-INF/struts-config.xml). Your configuration file will be validated against an internal copy of this DTD -- this copy is available for reference purposes only.
              • web-app_2_2.dtd - The Document Type Definition (DTD) for web.xml files conforming to the Servlet 2.2 specification. This copy is for reference purposes only.
              • web-app_2_3.dtd - The Document Type Definition (DTD) for web.xml files conforming to the Servlet 2.3 specification. This copy is for reference purposes only.
            • webapps/ - Web Application Archive (WAR) files for the web applications that are included with Struts.

            The following Jakarta Commons libraries are included with this release of Struts:

            • Commons BeanUtils 1.6.1
            • Commons Collections 2.1
            • Commons Digester 1.5
            • Commons FileUpload 1.0
            • Commons Lang 1.0.1
            • Commons Logging 1.0.3
            • Commons Validator 1.0.2

            Following are highlights of the new features. In the next section, we provide links to the JavaDocs for the affected classes.

            New Configuration DTD

            The Struts Configuration 1.0 DTD has been deprecated in favor of the struts-config_1_1.dtd. In the Struts 1.1 release, existing Struts configuration files can be loaded using either DTD version.

            New Dependencies on Commons packages

            Several components of Struts 1.0 have been found to be useful in general Java development (and not just useful for building Struts-based web applications), and have been migrated into the Jakarta Commons Project. As a result, this release of Struts has been modified to rely on the Commons packages containing these classes, rather than the Struts internal versions. In nearly every case, this involved changing only the import statements at the top of the classes. Any of your applications that utilize these classes will need to be modified in the same way.

            The following Commons packages contain the replacements for the corresponding Struts 1.0 classes:

            • BeanUtils Package [org.apache.commons.beanutils] - org.apache.struts.utils.BeanUtils, org.apache.struts.utils.ConvertUtils, and org.apache.struts.utils.PropertyUtils.
            • Collections Package [org.apache.commons.collections] - org.apache.struts.util.ArrayStack, org.apache.struts.util.FastArrayList, org.apache.struts.util.FastHashMap, org.apache.struts.util.FastTreeMap.
            • Digester Package - [org.apache.commons.digester] - org.apache.struts.digester.*.

            The following Commons packages are also now used by various components of the Struts framework:

            NOTE! XML Parser Prerequisite Updated

            Struts now depends on an XML parser that conforms to the JAXP/1.1 (rather than JAXP/1.0) APIs. Parsers known to work include the JAXP/1.1 reference implementation, and Xerces 1.3.1.

            SOURCE DEVELOPERS NOTE! Ant Prerequisite Updated

            To build Struts from source Ant 1.4 or later is now required. This does not affect developers that use Struts from the binary distribution.

            Struts Validator Integration

            The new Commons Validator is now integrated with Struts and exposed through the new Validator package.

            Tiles - An advanced templating taglib

            The Tiles JSP assembly framework has been integrated with Struts.

            Nested - An very cool taglib extension

            The Nested taglib is bundled with Struts and enhances the functionality of the existing Struts tags.

            New Example Applications

            New example applications for the Validator and Tiles are now part of the Struts distribution.

            New Contrib directory for optional components

            A new directory (contrib) in the CVS source repository has been added to accumulate Struts add-on extensions that are generally useful but have not yet been integrated into the standard code base.

            • Scaffold - An extension of the Commons Scaffold toolkit of reusable classes for building web applications.
            • Struts-EL - The optional Struts-EL taglib makes it easy to use Struts with JSTL. (Container with Servlet 2.3 support required.)

            The source for these components is available in the Struts source distribution. Binary distributions may also be made available in the Struts download area. As optional components, these products have their own release cycles.

            Action Package Additions

            The following new features have been added to the basic controller framework [org.apache.struts.action]:

            • The ActionServlet now provides support for modular Struts applications and sports several new extension points.
            • The new ActionMessages class will support a superset of the capabilities of ActionErrors, and will be useful as a collection of general purpose messages, not just errors.

            Upload Package Additions

            The following new features have been added to the file upload classes [org.apache.struts.upload]:

            • CommonsMultipartRequestHandler: New class that implements file upload using the Jakarta Commons FileUpload package. This is now the default file upload implementation for Struts.

            Util Package Additions

            The following new features have been added to the utility classes [org.apache.struts.util]:

            • LocalStrings: Correct message regarding replaceable parameter so that it does not append an extraneous character.
            • LabelValueBean: New class that defines a collection of name/value pairs that can be used with the <html:options> and <html:optionsCollection> tags, and elsewhere.
            • MessageResources: Escape any single quote characters that are included in the specified message string.
            • computeParameters: Allow a transaction token to be the only parameter.
            • RequestUtils: Change to encode ampersands when building a query string.

            Bean Taglib Package Additions

            The following new features have been added to the struts-bean custom tag library [org.apache.struts.taglib.bean]:

            • <bean:write>: Add format, locale and bundle attributes to support formatting values according to current user locale, format string from attribute or format string from string resources.
            • <bean:cookie>, <bean:header>, or <bean:parameter>: Correct the generated scripting variable type when tag is used with the "multiple" attribute.
            • <bean:message>: Added name, property, and scope attributes to the tag, so that the message source key can be obtained dynamically from a bean or bean property.

            HTML Taglib Package Additions

            The following new features have been added to the struts-html custom tag library [org.apache.struts.taglib.html]:

            • <html:link>: Added 'action' attribute.
            • <html:options>: If the property specified by the 'property' attribute returns null, tag now throws an error message that indicates what the real problem is, rather than causing an NPE.
            • <html:option> and <html:options>: Added 'style' and 'styleClass' attributes.
            • <html:optionsCollection>: New tag providing a cleaner way of populating HTML options from a collection.
            • <bean:message>: Added 'name', 'property' and 'scope' attributes so that the message resource key can be obtained dynamically from a bean.
            • <html:messages>: New tag to iterate through a message collection in the new ActionMessages class.
            • ActionForm: Tag will now call reset() if it instantiates the ActionForm bean. This also requires that the bean instantiated by the tag to be an ActionForm subclass.
            • <html:image>: Added the 'align' attribute.
            • <html:img>: Added the mouse event attributes ('onclick', 'ondblclick', 'onmousedown', 'onmouseup', 'onmouseover', 'onmousemove', 'onmouseout').
            • SubmitTag, SelectTag, LinkTag.java, CheckboxTag, ButtonTag, ImageTag, RadioTag, and TextArea tags: Added indexed property.

            Logic Taglib Package Additions

            The following new features have been added to the struts-logic custom tag library [org.apache.struts.taglib.logic]:

            • <logic:empty> and <logic:notEmpty>: New tags that are similar to <logic:present> and <logic:notPresent> except for the treatment of empty strings.

            Template Taglib Package Additions

            The following new features have been added to the struts-template custom tag library [org.apache.struts.taglib.template]:

            • None.

            Documentation Additions

            The following new features have been added to the Struts Documentation application (and corresponding contents on the Struts web site):

            • Version Differences: New section in Release Notes to link to the JavaDocs for all Struts classes and members added or changed between versions.
            • FAQ/HowTos: New documentation category organizes our FAQs and example-driven howTos. New HowTos include "Building Applications", "Using SSL", and using Struts with Eclipse or NetBeans.
            • User Guide Preface: New section to overview the enabling technologies behind Struts.
            • Developer Guides: Added "cover page" to guides. These then link to the Package Descriptions and the API guides.
            • HTML tag documentation: expanded to cover using indexed properties with iterate.
            • Site Menu: Removed separate links to taglib documentation, since these are now in the Developer Guide.
            • Newbie FAQ: The questions most likely to be asked by new developers using Struts. Still under development.
            • Kickstart FAQ: The questions most likely to be asked when selecting Struts.
            • 1.0.2 JavaDoc: Added archival copy to web site for future reference.
            • The UserGuide "Building" pages: General revisions to reflect new features and current practices.
            • Installation: Updated instructions for SilverStream and Resin. Add installation notes for Jetty. Added RexIP to list of nominal containers.
            • JavaDocs: New @since Struts 1.1 tag to indicate new packages, classes, and members added after the Struts 1.0.x version

            Struts Configuration Changes

            The following changes and bug fixes have occurred in the configuration files related to Struts:

            • Deprecated (Struts 0.5) configuration file format: Remove support.
            • Deprecated (Struts 0.5) methods: Remove from codebase.

            Added Config Package

            • ControllerConfig: Added inputForward property to indicate that ActionMapping.input is a forward rather than a URI.
            • ControllerConfig: Added forwardPattern and inputPattern to help manage page directories in application modules.
            • Added package to provide more flexibility in configuring the controller and to provide support for modular applications

            Action Package Changes

            The following changes and bug fixes have occurred in the basic controller framework (package org.apache.struts.action):

            • All constants in the Action class: Deprecated in favor of equivalents in new Globals class.
            • ActionMapping: input property may now refer to an ActionForward rather than a module-relative path if inputForward is set to true on the module's ControllerConfig bean [org.apache.struts.config.ControllerConfig.
            • ActionServlet: Added convertNull parameter to simulate the Struts 1.0 behavior when populating forms. If set to true, the numeric Java wrapper class types (like java.lang.Integer) will default to null (rather than 0).
            • ActionServlet: Added "config/$foo" parameter and deprecated several others in favor of components in the new config package.
            • ActionForms and related classes: Now use a StringBuffer when responding to a toString request in order to conserve resources.
            • LookupDispatchAction: Added standard Action to help select between internationalized buttons.
            • ActionForm class: Modified to use ActionServletWrapper rather than expose ActionServlet.
            • ActionServletWrapper class: Added for use by ActionForm to prevent the Public String properties of ActionServlet from being changed via a query string.
            • Action.MAPPING_KEY request attribute: Unconditionally pass the selected mapping as a request attribute ("org.apache.struts.action.mapping.instance") even if no form bean is specified.
            • ActionServlet: Avoid a NullPointerException in corner cases caused by failed initialization of servlet.
            • ActionForm class: Now truly serializable, because the two non-serializable instance variables (servlet and multipartRequestHandler) have been made transient. However, if you actually do serialize and deserialize such instances, it is your responsibility to reset these two properties.
            • ActionMessages and ActionErrors: The initial order a property/key is added in is now retained.
            • processActionForward(): Deprecated in favor of processForwardConfig

            Upload Package Changes

            The following changes and bug fixes have occurred in the file upload package (package org.apache.struts.upload) [part of the Upload webapp]:

            • CommonsMultipartRequestHandler: New implementation of file upload based on the Jakarta Commons FileUpload package. This new implementation is now the default.
            • BufferedMultipartInputStream: Fixed lost byte problem.
            • ArrayIndexOutOfBoundsException: Fixed situations where this was known to occur.
            • Multipart requests: Better reporting for premature closing of input streams while reading multipart requests.
            • New line characters: Additional fix for file corruption problem with uploads and new line characters.

            Utility Package Changes

            The following changes and bug fixes have occurred in the utilities (package org.apache.struts.util):

            • RequestUtils: Added support for forwardPattern, pagePattern, and inputForward properties on ControllerConfig.
            • GenericDataSource: Deprecated and modified to act as a thin wrapper around [org.apache.commons.dbpc.BasicDataSource]. Replaced by direct use of BasicDataSource or other compatible component.
            • RequestUtils class: Modify to use ActionServletWrapper rather than expose ActionServlet.
            • Added error message for the getActionErrors and getActionMessages method.
            • getActionErrors and getActionMessages: Added methods to generate the correct corresponding object based on the object retrieved from request scope based on the key passed in.
            • ActionErrors or ActionMessages: The logic for creating one of these objects has been moved to a utility method in RequestUtils.
            • JspException message: Now generated in RequestUtils.
            • ConvertUtils.convertCharacter(): Will now detect empty strings and return the default value.

            Bean Taglib Package Changes

            The following changes and bug fixes have occurred in the struts-bean custom tag library [org.apache.struts.taglib.bean]:

            • <html:errors>: When the property tag is specified, errors are no longer printed if the specified property has no errors. Previously errors were always printed ! Future enhancements would include additional attributes to always turn off the header or footer.
            • Made the remaining helper methods "protected" rather than "private".

            HTML Taglib Package Changes

            The following changes and bug fixes have occurred in the struts-html custom tag library (package org.apache.struts.taglib.html):

            • FormTag: Fixed to exclude query string when identifying action mapping name.
            • ImgTag: Correctly URLEncode the query string parameter value even if there is only a single parameter.
            • MultiboxTag.doAfterBody(): Corrected to return SKIP_BODY instead of SKIP_PAGE.
            • Errortag: defaultLocale method is deprecated as it is unused.

            Logic Taglib Package Changes

            The following changes and bug fixes have occurred in the struts-logic custom tag library (package org.apache.struts.taglib.logic):

            • None.

            Documentation Application Changes

            The following changes and bug fixes to the Struts Documentation application (and corresponding contents on the Struts web site) have occurred:

            • Reorganized Resources into separate pages..
            • In the Tag Developers Guide, add more detail regarding file upload requirements.
            • In Building View Components, clarify that additional i18n support may be provided by the browser, and is outside the scope of the framework.
            • In Building Controller Components, document 'validating' init-param, add defaults for various parameters, clarify that some web.xml settings are not Struts-specific.
            • Tag library documentation: Moved under User's Guide.
            • Reorganized to separate 1.0 material from nightly build material.

            MailReader Example Application Changes

            The following changes and bug fixes to the Struts MailReader Example Application have occurred:

            • Add Russian and Japanese translations of the application resources and set the character set for the example JSP pages to "UTF-8" so that it can display either English or Japanese.
            • Exchange "name" for "attribute" properties for Edit mappings in Struts configuration file.
            • Remove references to saving database data from "tour" document, since this functionality was removed.

            Template Example Application Changes

            The following changes and bug fixes to the Struts Template Example Application have occurred:

            • None.

            Exercise Taglib Example Application Changes

            The following changes and bug fixes to the Struts Exercise Taglib Example Application have occurred:

            • Added test case for <html:link> using "action" attribute.
            • Added test cases for <html:select> using <html:options> and <html:optionsCollection> based on a collection saved in the page context.

            This section provides links to the Struts JavaDoc for any classes that have been added or deprecated since the Struts 1.0 release.

            Previously deprecated classes and packages removed in Struts 1.1

            • Removed: org.apache.struts.utils.BeanUtils, org.apache.struts.utils.ConvertUtils, and org.apache.struts.utils.PropertyUtils - replaced by org.apache.commons.beanutils
            • Removed: org.apache.struts.util.ArrayStack, org.apache.struts.util.FastArrayList, org.apache.struts.util.FastHashMap, org.apache.struts.util.FastTreeMap - replaced by org.apache.commons.collections
            • Removed: org.apache.struts.digester.* - replaced by org.apache.commons.digester
            • Removed: The struts-config.dtd - Replaced by struts-config_1_1.dtd.
            • Removed: The omnibus "struts" taglib and its associated TLD - replaced by separate bean, logic, and html taglibs.
            • Removed: The "form" taglib and its associated TLD - replaced by (renamed as) the html taglib.

            Packages added in Struts 1.1

            Classes added in Struts 1.1

            action

            actions

            taglib.html

            taglib.logic

            upload

            util

            Classes with members added in Struts 1.1

            action.Action

            • ACTION_SERVLET_KEY
            • APPLICATION_KEY
            • MESSAGE_KEY
            • PLUG_INS_KEY
            • REQUEST_PROCESSOR_KEY
            • execute
            • getResources(javax.servlet.http.HttpServletRequest)
            • saveMessages

            action.ActionServlet

            • configDigester
            • convertHack
            • log
            • processor
            • getInternal
            • destroyApplications
            • destroyConfigDigester
            • getApplicationConfig
            • getRequestProcessor
            • initApplicationConfig
            • initApplicationDataSources
            • initApplicationPlugIns
            • initApplicationMessageResources
            • initConfigDigester
            • methods created for backward-compatiblity only
              • defaultControllerConfig
              • defaultFormBeansConfig
              • defaultForwardsConfig
              • defaultMappingsConfig
              • defaultMessageResourcesConfig

            taglib.html.BaseHandlerTag

            • indexed
            • setIndexed
            • getIndexed

            Classes deprecated between Struts 1.0 and Struts 1.1

            action

            • ActionException
            • ActionFormBeans
            • ActionForwards
            • ActionMappings

            Classes with members deprecated between Struts 1.0 and Struts 1.1

            action.Action

            • FORM_BEANS_KEY
            • FORWARDS_KEY
            • MAPPINGS_KEY
            • getResources()
            • perform

            ActionServlet

            • findDataSource
            • findFormBean
            • findForward
            • findMapping
            • initDataSources
            • methods created for backward-compatiblity only
              • defaultControllerConfig
              • defaultFormBeansConfig
              • defaultForwardsConfig
              • defaultMappingsConfig
              • defaultMessageResourcesConfig

            Next: Installation

            libstruts1.2-java-1.2.9/doc/userGuide/release-notes-1.2.4.xml0000644000175000017500000013564010404045236024124 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Robert Leland Ted Husted Martin Cooper Struts Release Notes (since 1.1)

            This section contains release notes for changes that have taken place since Version 1.1 was released.

            The binary distribution of this release includes the following files relevant to Struts:

            • INSTALL.txt - Brief installation instructions. For more detail, see the Struts User Guide, either through the Struts Documentation application or online at http://struts.apache.org/.
            • LICENSE.txt - The Apache Software Foundation license that defines the terms under which you can use Struts (and other software licensed by Apache).
            • contrib/ - Additional libraries developed by the Struts team which are not yet part of the core distribution.
            • lib/ - Directory containing files you will need in your own applications. The individual files of interest are:
              • antlr-#.#.jar - ANTLR, ANother Tool for Language Recognition, a public domain library made available by antlr.org.
              • commons-*-#.#.jar - Various packages from the Jakarta Commons Project that Struts relies on. You are welcome to use these classes in your own applications. These JAR files should be copied into the /WEB-INF/lib directory of your web application.
              • jakarta-oro-#.#.jar - JAR file containing the Jakarta ORO package, utilitied by the Struts Valdiator. You must place this file in the /WEB-INF/lib directory of your web application to use the Struts Validator package.
              • struts-#.#.jar - JAR file that contains the compiled Java classes of Struts. You must place this file in the /WEB-INF/lib directory of your web application.
              • struts-*.tld - The tag library descriptor files for the Struts tag libraries (bean, html, logic, and nested). When these taglibs are used, you must place these files in the /WEB-INF directory of your web application and reference them with appropriate <taglib> directives in your web.xml file.
              • struts-config_1_2.dtd - The Document Type Definition (DTD) for the Struts 1.2 configuration file (which is typically named /WEB-INF/struts-config.xml). Your configuration file will be validated against an internal copy of this DTD -- this copy is available for reference purposes only.
              • struts-config_1_1.dtd - The Document Type Definition (DTD) for the Struts 1.1 configuration file (which is typically named /WEB-INF/struts-config.xml). Your configuration file will be validated against an internal copy of this DTD -- this copy is available for reference purposes only.
              • struts-config_1_0.dtd - The Document Type Definition (DTD) for the Struts 1.0 configuration file (which is typically named /WEB-INF/struts-config.xml. Your configuration file will be validated against an internal copy of this DTD -- this copy is available for reference purposes only.
              • web-app_2_2.dtd - The Document Type Definition (DTD) for web.xml files conforming to the Servlet 2.2 specification. This copy is for reference purposes only.
              • web-app_2_3.dtd - The Document Type Definition (DTD) for web.xml files conforming to the Servlet 2.3 specification. This copy is for reference purposes only.
            • webapps/ - Web Application Archive (WAR) files for the web applications that are included with Struts.

            For the version requirements of each library, see the Installation chapter.

            This section highlights new features added and critical changes made since the last release. Other interesting changes are listed in the What Changed? section. Subscribers to the struts-dev mailing list, receive reports of all changes as they are made.

            Deprecations - Many constructs were deprecated for the Struts 1.1 release, most of which have now been removed. Before moving to this release, you should clean-compile your application with deprecation warnings enabled. Alternatives should be available for all decprecated constructs. You are strongly advised to resolve all Struts 1.1. deprecations before moving to this release. Removed constructs most likely to affect developers are:

            • org.apache.struts.Action statics: Use org.apache.struts.Global statics instead.
            • Action.perform: Use Action.execute instead.

            Although not removed or deprecated, in many cases you should replace the ActionErrors with the preferred ActionMessages to ensure correct operation.

            TagUtils and ModuleUtils - Many utility methods previously found in org.apache.struts.utils.RequestUtils have been moved to org.apache.struts.taglibs.TagUtils or org.apache.struts.utils.ModuleUtils.

            GenericDataSource / GenericConnection implementations removed - The datasources manager is still supported, but our own datasource implementationis not. You are welcome to plug in your own DataSource implementation, but we do not have the resources to maintain one of our own. If your container does not supply a DataSource implementation, the DBCP package from the Jakarta Commons is suggested.

            Validator enhancements

            • ValidWhen - The Struts Validator now supports a ValidWhen rule, so that one validation can be dependant on another. Details ...
            • IntRange now checks select-one and radio fields. Example: This allows populating combo boxes with valid choices plus one additional choice with a caption something like "Choose one" and a value 0f "-1". Then when the user attempts to submit the form, you can look for the value of "-1" and advise if nothing was selected.
            • You can now force the clientside Javascript validation to check all constraints, instead of stopping at the first error. By setting a new property, stopOnFirstError, on the Validator PlugIn to false. Details ...
            • The "required" validation can now handle checkboxes, radio,select-one, and select-multiple field types. See the updated Validator example application to see these new features in action.
            • A standard validateUrl rule lets you check if a property contains a well-formed URL.

            DigestingPlugIn - A new standard PlugIn that helps you create your own object graph in application scope. This is handy way to create business objects for Actions to call. Check the latest MailReader eaxmple application to see the DigestingPlugin in action.

            ModuleConfigVerifier - While not exactly new, a standard class for verifying module configurations is also available in the PlugIn packages. As it stands, the ModuleConfigVerifier mainly confirms that various components of the Struts object graph were loaded. However, ambitious developers could extend this class with additional checks to ensure the Struts configuration is internally consistent.

            Maven project files - While still under development, significant progress has been made toward putting the Struts build process under Maven. The core JAR and TLDs can be built using Maven, leveraging the shared Maven repository for our many dependencies. You can find the current maven.xml and project.xml in the root directory of the Struts source distribution. However, at this time, the original Ant build files are still the official mechanism for building Struts.

            New Configuration DTD - The struts-config_1_2.dtd is preferred to the deprecated Struts Configuration 1.1 DTD. The new DTD adds two new elements <display-name> and <description> to the struts-config element. These elements are for use by struts config file tools and document generation. In the Struts 1.2.x series, existing Struts configuration files can be loaded using either DTD version.

            New Taglib URIs - The URIs for the tag libraries have been changed to reflect the move of Struts from Jakarta to an Apache top level project. For compatibility purposes, TLDs with the old URIs are still available, but users are encouraged to update their usage accordingly.

            New Committers - We are pleased to welcome Steve Raeburn, Don Brown, Joe Germuska and Niall Pemberton to the team of Struts Committers.

            Struts-Chain - Still experimental, this new "contrib" package utilizes the new Chain of Responsibilty package in the Jakarta Sandbox to create a new breed of RequestProcessor. Look for this to become the default implementation in a future release.

            MappingDispatchAction - A new standard Action that dispatches to a method named by the ActionMapping parameter.

            Cancel handlers - DispatchAction, LookupDispatchAction, and MappingDispatchAction - Now provide default cancel handler that can be overridden. It also also possible to specify the default handler name.

            Session-scoped ActionMessages - You can now save ActionMessages in the session and have them cleaned up after the first use. There is now an alternate form of Action.saveMessages() that stores messages in the session. ActionMessages.isAccessed() returns true after the messages have been retrieved one time. RequestProcessor.processCachedMessages() queries isAccessed() to determine if it should remove the messages from the session.

            JA Mailreader - The Struts Mailreader Example application now includes a Japanese resource file.

            Tiles EL - The Tiles tags are now avaiable through the Struts EL taglib, which is based on JSTL.

            Wildcard Mappings - You can now use wildcards in your action-mappings. For details see Using Wildcards in ActionMappings as well as the Struts Mailreader Example application.

            Action attributes - An Action attribute has been added to the html img tag, to match what's available on the html link tag now.

            Module attribute - A new "module" attribute is available on the forward element as well as several of the core tags. This attribute allows you to specify another module by name (or "prefix") to create direct links between modules. The new module attribute is preferered to the contextRelative attribute and can often be used in lieu of a "SwitchAction".

            This section highlights some of the changes that have taken place since the last release. Subscribers to the struts-dev mailing list, receive reports of all changes as they are made.

            General Changes

            • 2004-09-02 - URI for Struts DTD changed to reflect move to an Apache top level project.
            • 2004-08-31 - Code changes to re-enable building with JDK 1.3.
            • 2003-03-14 - Move license on all source code files to ASL 2.0.
            • 2003-12-30 - Add inital STATUS LOG.

            Build Changes

            • 2004-07-09: struts.xsl: Give each "src" variable a distinct name to follow XSL rules.
            • 2004-07-08: build.properties.sample.lib: Add a simplified build.properties file for use by developers who are not actively involved in Jakarta development. This template assumes the developer is using JARS from our "lib" distribution.
            • 2004-04-14 - project.properties: Adjust properties to use alternate repo for nightly builds.
            • 2003-08-09 - build.xml: Adjust loading order of properties files to go from most local (current directory) to most global (${user.home}/build.properties).
            • 2003-08-08 - maven.xml,project.xml - Maven build files.

            Configuration Changes [ /conf/shared]

            • 2003-08-09 - Add two new elements <description-short%gt; and <description-long> for use by struts config file tools and document generation.
            • 2003-07-04 - struts-config_1_2.dtd: Added 1.2 struts-config.dtd. This is a copy of the 1.1 DTD except that the <data-source> "type" attribute is now required because Struts does not supply a default DataSource implementation.

            Project-wide Changes

            • 2004-01-14 - Update License format to please Maven Checkstyle reports.
            • 2004-01-10 - Removed @author javadoc tags from all classes; updated volunteers.xml to list missing people.

            Default Package Changes [ org.apache.struts]

            • 2003-07-04 - Globals: Removed deprecated APPLICATION_KEY.
            • 2003-07-03 - Globals,ActionServlet,RequestUtils: Moved initialization of module prefix list to the new ActionServlet.initModulePrefixes() method from RequestUtils.getModulePrefixes() because of a potential race condition documented in PR# 21091. This also required a move of the RequestUtils.PREFIXES constant to Globals.MODULE_PREFIXES_KEY.

            Action Package Changes [ org.apache.struts.action]

            • 2004-09-10 - Corrected Japanese translation of message resources.
            • 2004-09-07 - Action: Use ActionMessages instead of ActionErrors.
            • 2004-09-03 - ActionServlet: Eliminate performance bottleneck in obtaining request processor.
            • 2004-09-03 - ActionForward: New copy constructor that takes module parameter; deprecate copy constructor missing this parameter.
            • 2004-09-02 - Correct javadoc for ActionErrors.
            • 2004-08-10 - DynaActionForm: Change Map's key from String to Object in toString().
            • 2004-07-01 - TestDynaActionFormClass: Correct operation of static method calls.
            • 2004-06-26 - Action: Add getErrors, getMessages, addErrors, and AddMessages methods, to better manage error handling.
            • 2004-04-01 - ActionConfigMatcher: Added support for multiple wildcard replacements.
            • 2004-03-16 - ActionForward: Add "copy constructor".
            • 2004-01-24 - DynaActionForm: Enhance so that it can be initialized using a FormBeanConfig object. Add corresponding method to RequestUtils to create an ActionForm by passing only a FormBeanConfig and an ActionServlet object.
            • 2004-01-19 - ActionMapping, ActionConfig: Push "findException" from ActionMapping up to ActionConfig so that everyone can take advantage of the superclass search logic.
            • 2003-09-29 - RequestProcessor,ActionMappingMatcher,WildcardHelper: Added optional wildcard support for action mappings.
            • 2003-09-11 - Action,ActionMessages,RequestProcessor: Added ability to save ActionMessages in the session and have them cleaned up after the first use.
            • 2003-08-23 - Action: Deprecate saveErrors(HttpServletRequest, ActionErrors) in favor of saveErrors(HttpServletRequest, ActionMessages).
            • 2003-08-23 - RequestProcessor: Replaced ActionErrors reference with ActionMessages.
            • 2003-08-23 - ActionMessages, ActionErrors: Deprecated ActionErrors.GLOBAL_ERROR in favor of ActionMessages.GLOBAL_MESSAGE.
            • 2003-08-16 - ExceptionHandler: Added storeException() method that takes an ActionMessage instead of ActionError.
            • 2003-08-13 - ActionError: Deprecate ActionError in favor of ActionMessage
            • 2003-08-08 - ActionServlet,ActionFormBeans,ActionForwards,ActionMappings.java v 1.13 : Removed references to ActionMappings, ActionFormBeans, and ActionForwards.
            • 2003-07-26 - Action: getLocale() now calls RequestUtils.getUserLocale() to prevent session creation.
            • 2003-07-04 - Action,ActionException: Removed deprecated getResources() method.
            • 2003-07-04 - Action: Removed deprecated perform() methods.
            • 2003-07-03 - ActionServlet: Removed support for some of the deprecated servlet init parameters.
            • 2003-07-03 - Globals,ActionServlet,RequestUtils: Moved initialization of module prefix list to the new ActionServlet.initModulePrefixes() method from RequestUtils.getModulePrefixes() because of a potential race condition documented in PR# 21091. This also required a move of the RequestUtils.PREFIXES constant to Globals.MODULE_PREFIXES_KEY.
            • 2003-07-02 - RequestProcessor: Deprecated log() methods in favor of commons-logging.
            • 2003-07-02 - ActionSerlvet: Removed deprecated method.
            • 2003-07-02 - ActionServlet: Removed references to deprecated ApplicationConfig class.
            • 2003-07-02 - ActionServlet,NoOpAction: Removed deprecated ActionServlet debug level and logging methods.
            • 2003-07-02 - RequestProcessor: Changed processRoles() to send a 403 Forbidden response if the role check fails. Also removed deprecated methods.
            • 2003-07-01 - Action: Removed deprecated constants and toHex() method.

            Actions Package Changes [ org.apache.struts.actions]

            • 2004-06-24 - RedeployableActionServlet: Provides support for WebLogi hot-deploy.
            • 2003-12-22 - DispatchAction: Add detection of recursive calls.
            • 2003-08-13 - DispatchAction,LookupDispatchAction: Add 'default' and a 'cancel' handlers to DispatchAction and LookupDispatchAction.
            • 2003-08-12 - MappingDispatchAction: Addition of MappingDispatchAction that dispatches to a method named by the ActionMapping parameter.
            • 2003-07-11 - DispatchAction,ForwardAction,IncludeAction,SwitchAction: Throw exceptions from execute() method instead of sending a failure response to the client. This allows the exception handling mechanism to respond to the error gracefully.
            • 2003-07-03 - LookupDispatchAction: Fixed synchronization problem (PR# 21224). Also refactored some code into a new initLookupMap() method.

            Config Package [ org.apache.struts.config]

            • 2004-07-31 - Enhance support for "lazy" dynabeans or POJO beans. "Lazy" DynaBeans will hopefully soon be released with Beanutils 1.7.0. These changes will make it easier to plug either a regular JavaBean or a "lazy" DynaBean into struts as an ActionForm. * FormBeanConfig now sets up the properties of DynaBeans which use a MutableDynaClass. * FormBeanConfig now handles POJO beans by wrapping the specified bean using WrapDynaBean and the new BeanValidatorForm. * RequestUtils has been changed so that properties starting with "org.apache.struts" are not attempted to be populated in the ActionForm.
            • 2004-04-14 - ModuleConfig.java: Local, as well as global, ActionForwards now observe pluggable classes.
            • 2004-04-08 - ModuleConfigImpl: Added a list to store ActionConfigs to ensure when enumerated, they are in the order in which they were added.
            • 2004-02-17 - Undeprecate and Restore the functionality for the 'type' attribute on form-beans and global-forwards elements in the config file.
            • 2004-02-13 - Add module property to ForwardConfig to support direct cross-linking between modules.
            • 2004-01-10 - Changed WildcardHelper methods from statics to instance methods to allow subclasses to override and customize behavior. Changed WildcardHelper.match() to accept a generic Map parameter rather than HashMap.
            • 2003-08-08 - ConfigHelper,ConfigHelperInterface: Removed references to ActionMappings, ActionFormBeans, and ActionForwards.
            • 2003-07-27 - ConfigHelper: Deprecate methods() since they return objects that have been deprecated. The ModuleConfig object should be used to lookup these items.
            • 2003-07-16 - ModuleConfigFactory: Catch only relevant exceptions instead of Throwable and made LOG final.
            • 2003-07-04 - struts-config_1_2.dtd, ControllerConfig.java: Removed deprecated debug controller attribute.
            • 2003-07-04 - ActionConfig: Removed deprecated perform() methods.
            • ApplicationConfig: removed in favor of ModuleConfig.

            Contrib Packages [ /contrib]

            • 2004-06-29 - struts-chain: Wrap HttpServletRequest to ensure correct handling of URIs.
            • 2004-02-29 - struts-chain: Fix problem with large uploads being deleted if validation failed.
            • 2004-01-15 - struts-chain: Add Tiles support. Add null check for type, to support forward actions; also add commons loggging
            • 2004-01-14 - struts-chain: Add support for 'unknown' actions.
            • 2004-07-07 - struts-faces: correct operation of <s:base> tag and add portlet specific version.
            • 2004-03-08 - struts-faces: updated for JSF 1.0 final release.
            • 2003-12-31 - struts-faces: Initial support for Tiles; partial "Tilesization" of example app; *not* ready for prime time but comments definately welcome.
            • 2003-12-29 - struts-faces: Various updates regarding the JSF Final Draft and to prepare for Tiles support.
            • 2003-12-17 - struts-jericho: Whiteboard directory for Struts-Jericho, a working proposal for Struts 2.x.
            • 2003-09-07 - strutsel.taglib.tiles: Addition of "tiles-el" library
            • 2004-08-10 - TilesUtilImpl: Remove "static" modifier from doInclude() method.
            • 2003-08-11 - struts-chain: Initial check-in of an experimental library that decomposes the Struts 1.1 request procoessor, using the newly checked in Commons Sandbox project called "chain" supporting the Chain of Responsibility pattern.
            • 2003-08-10 - strutsel: Added action attribute added in base class
            • 2003-08-10 - strutsel: Removed deprecated FormTag attributes: name, scope, type.
            • 2003-08-10 - struts-legacy: Removed package (GenericDataSource and GenericConnection).
            • 2003-07-26 - strutsel: Updated tags to match recent attribute changes to tags in base library.

            Plugins Package [ org.apache.struts.plugins]

            • 2003-08-07 - DigestingPlugIn.java: Added DigestingPlugIn.

            Taglib Package Changes [ org.apache.struts.taglib]

            • 2004-06-26 - EmptyTag: Add support for arrays.
            • 2004-02-24 - createDynamicJavascript: Move test for null validator form inside "createDynamicJavascript" so that those who use the tag to generate static javascript don't get a JspException.
            • 2003-09-09 - TagUtils: Log error message when keys or bundles are missing.
            • 2003-08-23 - TagUtils: Deprecated getActionErrors() in favor of getActionMessages().
            • 2003-08-16 - TagUtils: Replaced ActionError with ActionMessage.
            • 2003-08-02 - LocalStrings.properties,TagUtils: Move message resources from util package.
            • 2003-07-26 - TagUtils,RequestUtils: Added TagUtils class for taglibs to use instead of RequestUtils. We should migrate any method in RequestUtils that takes a PageContext parameter and/or throws JspException. A clean separation will help keep RequestUtils smaller and allow the taglibs to be easily split off of the core Struts distribution.

            Bean Taglib Package Changes [ org.apache.struts.taglib.bean]

            • 2004-01-14 - WriteTag: Use client locale when applying date format.
            • 2004-01-01 - WriteTag: Add notes regarding discovering localized notations.
            • 2003-08-28 - IncludeTag: Rename setCookie to addCookie since it isn't a bean setter
            • 2003-07-13 - MessageTag: Simplified args[] creation, deprecated unused defaultLocale variable.

            HTML Taglib Package Changes [ org.apache.struts.taglib.html]:

            • 2004-08-24 - ImgTag: Correct usage in a module environment.
            • 2004-07-21 - Add accept-charset attribute to the FormTag.
            • 2004-07-01 - JavascriptValidatorTag - Correct naming of JS methods when multiple forms are used.
            • 2004-05-17 - OptionsCollectionTag,OptionsTag: Filter values as well as labels.
            • 2004-03-08 - JavascriptValidatorTag - Allow multiple forms to be on the same page by generating a unique variable name based on form name.
            • 2004-02-14 - Substitute "-" for "/" in JavaScript function name when form is subclass of ValidatorActionForm.
            • 2004-02-07 - Add "module" attribute to IncludeTag, ImgTag, LinkTag, and RewriteTag, as well as to Forward. This permits a module to be referenced by name (or "prefix) for direct cross-linking between modules.
            • 2004-02-04 - Run validator messages through a routine to escape quote marks so that the emitted JavaScript is syntactically correct.
            • 2004-02-04 - Throw JspException when no form is found in the ValidatorResources under the specified 'name'.
            • 2004-01-18 - Add "action" attribute to img tag.
            • 2004-01-09 - Add disabled element to TLD.
            • 2004-01-03 - Add 10 new tests that cover "some" of the functionality provided by html:options. More to come.
            • 2004-01-01 - In link-related tags, allow LocalCharacterEncoding to be specified conditionally.
            • 2003-11-28 - JavascriptValidatorTag - Removed getNextVar() and replaceChar() methods and use a simpler javascript identifier naming scheme. All variables with be named a0, a1, etc. to prevent using reserved words as variable names.
            • 2003-08-19 - Remove "request scope" references from messages tag. The messages are searched for in all scopes.
            • 2003-08-10 - struts-html.xml,RewriteTag.java: Added action attribute to rewrite tag.
            • 2003-08-10 - Removed deprecated FormTag attributes: name, scope, type.
            • 2003-07-08 - struts-html.xml,FormTag,JavascriptValidatorTag: Added scriptLanguage property to the form and javascript tags for PR# 17234. This property is ignored in XHTML mode but allows developers to turn off the "language" attribute of <script> tags in HTML.
            • 2003-07-03 - FormTag: Added disabled check to focus JavaScript
            • 2003-07-02 - HtmlTag: Removed deprecated method.
            • 2003-07-02 - BaseHandlerTag: Use RequestUtils.isXhtml() instead of duplicating logic.
            • 2003-07-02 - ErrorsTag: Don't render new lines

            Logic Taglib Package Changes [ org.apache.struts.taglib.logic]:

            • 2004-01-16 - logic:redirect - Add action attribute.
            • 2003-07-31 - PresentTag,RedirectTag: Replace depricated method calls with non-deprecated ones.

            Nested Taglib Package Changes [ org.apache.struts.taglib.nested]:

            • 2004-03-22 - Add missing filter attribute to nested:options and nested:optionsCollection.
            • 2004-01-01 - Correct operation of NestedMessage* tags by implementing NestedPropertySupport rather than NestedNameSupport.
            • 2003-08-10 - Removed deprecated FormTag attributes: name, scope, type.
            • 2003-07-03 - struts-nested.xml: Added styleId to nested:hidden

            Tiles Taglib Package Changes [ org.apache.struts.taglib.tiles]:

            • 2004-05-17 - PutTag: Manage tag body content more carefully to ensure pooled tags do not display old content with empty tiles.
            • 2003-09-07 - ImportAttributeTag,UseAttributeTag: Removing "final" from class declaration, to allow class to be extended in "tiles-el" (or other classes).
            • 2003-07-27 - xmlDefinition/XmlParser: Remove deprecated/non functional digester logging method.
            • 2003-07-10 - TagUtils: Deprecated getProperty() because it provided no value over calling PropertyUtils.getProperty() directly.
            • 2003-07-08 - TilesServlet,ActionComponentServlet: Formatted code, removed deprecated constant.
            • 2003-07-04 - ActionController: Call Action.execute() instead of perform().

            Tiles Package Changes [ org.apache.struts.tiles]:

            • 2003-09-13 - Controller: Added execute() method to Tiles Controller interface.
            • 2003-08-16 - portal.UserMenuAction: Replaced hardcoded debugging with commons logging.
            • 2003-07-31 - xmlDefinition/I18nFactorySet: Replace deprecated constant reference with it's base interface equal.
            • 2003-07-31 - actions/DefinitionDispatcherAction: Replace deprecated method with current one. Still one method DefinitionUtil.setActionDefinition that doesn't have a replacement. It's a simple method but I don't know where a good place to move it would be.
            • 2003-07-31 - actions/ReloadDefinitionsAction: Use TilesUtil.createDefinitionsFactory(request,context) instead of deprecated method().
            • 2003-07-21 - struts-*config.xml: Remove the use of the deprecated action NoOpAction. Replace by ForwardAction.
            • 2003-07-21 - *Action: Replace the deprecated perform(..) method by the new execute(...) method.
            • 2003-07-12 - DefinitionDispatcherAction: Use commons-logging to record error messages instead of printing them to the response.
            • 2003-07-10 - TilesAction: Removed deprecated perform() method.
            • 2003-07-09 - Removed deprecated TilesUtil.applicationClass() method.
            • 2003-07-08 - DefinitionsUtil.java: Deprecated debug level constants, removed some deprecated methods.
            • 2003-07-08 - ChannelFactorySet: Use commons-logging instead of printing to stdout.
            • 2003-07-07 - InsertTag: Fixed exception handling. Instead of swallowing exceptions or printing the stack trace on the page, the exceptions are logged and rethrown as JspException for the page error handling mechanism to deal with.
            • 2003-07-07 - InsertTag: More code cleanup, removed deprecated method, deprecated ROLE_DELIMITER because it is only used internally to this class
            • 2003-07-04 - ComponentContext: Removed deprecated constructor
            • 2003-07-02 - Changed UntyppedAttribute class name to UntypedAttribute (spelling error).

            Upload Package Changes [ org.apache.struts.upload]:

            • 2004-04-08 - CommonsMultipartRequestHandler: Made CommonsFormFile serializable since it gets put into the session
            • 2004-03-22 - Allow MultipartPost with latin1 characters over Linux.
            • 2004-01-21 - Add support for an "EncodingFilter" to handle multibyte file names.
            • 2003-11-26 - DiskMultipartRequestHandler: Deprecate DiskMultipartRequestHandler and friends, which is the buggy old upload implementation, no longer used as the default as of Struts 1.1. This will be removed after 1.2 (meaning as of 1.3/2.0).
            • 2003-07-31 - MultipartElement: Remove deprecated methods.

            Utility Package Changes [ org.apache.struts.util]:

            • 2004-07-21 - ModuleUtil: Add module support to the bundle attribute. 2004-07-07 - TokenProcessor: Ensure that tokens returned differ even if called quickly by tracking last value used.
            • 2004-04-08 - RequestUtils: Fixed inappropriate serialization of ModuleConfig when a DynaActionForm was put in the session.
            • 2003-09-22 - LabelValueBean: Implement Comparable interface.
            • 2003-08-16 - ModuleException: Added getActionMessage() to replace the getError() method.
            • 2003-08-02 - LocalStrings.properties: Move message resources to taglib TagUtil package.
            • 2003-08-02 - ModuleUtils.java,RequestUtils.java: Moved module related methods to new ModuleUtils class.
            • 2003-07-26 - TagUtils,RequestUtils: Added TagUtils class for taglibs to use instead of RequestUtils. We should migrate any method in RequestUtils that takes a PageContext parameter and/or throws JspException. A clean separation will help keep RequestUtils smaller and allow the taglibs to be easily split off of the core Struts distribution.
            • 2003-07-25 - RequestUtils: Backwards compatibility fix. Changed ModuleConfig lookups to use getModuleConfig so that default module config is returned if one is not already present in the request
            • 2003-07-16 - RequestUtils: Make retrieveMessageResources() module-aware by adding the module prefix to the bundle name when retrieving from application context.
            • 2003-07-03 - LabelValueBean: Added equals and hashCode() methods.
            • 2003-07-03 - Globals,ActionServlet,RequestUtils: Moved initialization of module prefix list to the new ActionServlet.initModulePrefixes() method from RequestUtils.getModulePrefixes() because of a potential race condition documented in PR# 21091. This also required a move of the RequestUtils.PREFIXES constant to Globals.MODULE_PREFIXES_KEY.
            • 2003-07-02 - RequestUtils,TestRequestUtils: Removed deprecated "application" methods in favor of "module" methods.
            • 2003-07-02 - LabelValueBean: Added default constructor.

            Validator Package Changes [ org.apache.struts.validator]

            • 2004-09-03 - ValidWhen: Added new test cases.
            • 2004-09-03 - ValidWhen: Correct parsing of integer values.
            • 2004-06-24 - ValidWhen: "allow '_' (underscore) in identifiers.
            • 2004-04-16 - FieldChecks: Add optional variables to configure various aspects of URL validation.
            • 2004-04-03 - ValidatorPlugIn: Modify Validator PlugIn to validate XML file and errros now throw an exception to loudly flag an error. Remove deprecated classes, now in Commons Validator.
            • 2004-04-02 - Add a getValidationKey method to make it eaiser for subclasses to use different rules for finding the Validator form.
            • 2004-02-20 - Changed FieldCheck so that it examines all indexed fields and does not stop on the first failure.
            • 2004-01-17 - Changed initValidator() to accept an ActionMessages object instead of ActionErrors; changed ACTION_ERRORS_PARAM name to ACTION_MESSAGES_PARAM.
            • 2004-01-17 - Add section to Validator User Guide listing standard validations.
            • 2003-12-21 - Add rest of form to fr.CA formset to correct operation; Use action form of html:link;
            • 2003-10-06 - FieldChecks - Add validateUrl. Remove deprecated validateRange.
            • 2003-09-26 - FieldChecks,ValidWhen: Changed validator signatures to use ActionMessages rather than ActionErrors, was breaking validations.
            • 2003-09-26 - validator-rules.xml: Modify JavaScript to honor datePattern option.
            • 2003-09-24 - validator-rules.xml: Add ability of required to handle checkboxes, radio,select-one, and select-multiple field types.
            • 2003-07-30 - validator-rules.xml: Remove deprecated range() method. Use intRange() instead.
            • 2003-07-30 - validator-rules.xml: Allow intRange validation of select-one and radio fields. In some form combo boxes you might have the combo boxes populated with valid choices plus one additional choice with a caption something like "Choose one" and a value 0f "-1". Then when the user attempts to submit the form, you can look for the value of "-1" and yell at them if they failed to pick something.
            • 2003-07-28 - JavascriptValidatorTag.java,ValidatorPlugIn.java: Enhancement to allow checking of all constraints instead of aborting. The default is same as struts 1.1.
            • 2003-07-26 - Resources: Deprecated Resources.getLocale() because it created sessions. Use RequestUtils.getUserLocale() instead.
            • 2003-07-02 - Resources: Rewrote getArgs() method to use arrays and loops, which removes limitation of 4 args.
            • 2003-07-02 - Resources: Remove deprecated methods
            • 2003-07-02 - Validator,ValdiatorUtils: Changed processRoles() to send a 403 Forbidden response if the role check fails. Also removed deprecated methods.
            • 2003-07-01 - Add validwhen validation to package.

            Documentation Application Changes [ struts-documentation.war]:

            • 2004-08-31 - Added a Struts download page, reflecting the move to an Apache top level project.
            • 2004-08-24 - Fix build script errors on Eclipse HOW-TO page.
            • 2004-07-11 - Add links to development releases.
            • 2004-07-07 - Rename "status.xml" to "roadmap.xml" to avoid confusion with STATUS.txt file.
            • 2004-07-07 - Extend prior draft of bylaws page with additional material from Jakarta site and link to main menu.
            • 2004-03-28 - Added Trifork server to Installing Struts on Various Containers section.
            • 2004-03-24 - Document new exception-throwing behavior in html:javascript when dynamicJavascript is true but no form can be identified.

            MailReader Example Application Changes [ struts-example.war]:

            • 2004-03-07 - Various refactorings to JSP pages, welcome and login action.
            • 2004-01-08 - Use (new) DigestingPlugIn to create the menu of server types.
            • 2003-12-21 - Change to use typical welcome.do - welcome.jsp approach; Use "name" rather than "attribute" in configuration, per documented and common practice; Use action form of html:link
            • 2003-10-25 - Updated to include the usage of wildcards in action mappings.
            • 2003-08-30 - AlternateApplicationResources_ja.properties,ApplicationResources_ja.properties: Provide Japanese resources.
            • 2003-08-16 - Changed ActionError to ActionMessage.

            Combined Examples Application [ struts-examples.war]

            • 2004-09-07 - Fix problems with running the application while not connected to the internet.
            • 2004-09-03 - Change Commons Validator DTD to version 1.1.3.
            • 2004-01-17 - Add tests to to hmlt:link page for forwards, actions, and pages.
            • 2004-01-16 - exercises: Add test pages for html:img and logic:forward,redirect. Add test pages for html:img and logic:forward,redirect tags
            • 2004-01-08 - Convert Taglib-Exercises, Upload, and Validator example applications into modules of a combined examples application.

            Exercise module Changes:

            • 2004-01-09 - Enable inputForward.
            • 2004-01-01 - Add several tests to bean:write: localized numbers; date format pattern; localization.
            • 2003-07-23 - html-messages.jsp: Updated to reference Globals constants.

            Upload Example module Changes

            • 2004-01-09 - Enable inputForward; use message tags for validation errors; refine markup on display page.
            • 2004-01-08 - Convert to Upload example application to module under the "examples" application.
            • 2003-08-16 - Changed ActionError to ActionMessage.

            Validator Example module Changes

            • 2004-06-25 - Update arg elements to use new dynamic feature, that does not requiring numbering.
            • 2004-03-25 - Modify example to test proper behaviour is a property is named 'name'.
            • 2004-01-09 - Enable inputForward.
            • 2004-01-08 - Convert to Validator Example application to module under the "examples" application.
            • 2003-12-21 - Add rest of form to fr.CA formset to correct operation.
            • 2003-09-24 - Modify Validator example to show use of 'required' for checkboxes, radio,select-one, and select-multiple field types.

            Next: Installation

            libstruts1.2-java-1.2.9/doc/userGuide/release-notes-1.2.7.xml0000644000175000017500000013612610404045236024127 0ustar arnaudarnaud00000000000000 Struts Release Notes (since 1.2.4)

            This section contains release notes for changes that have taken place since Version 1.2.4. To keep up-to-date on all changes to Struts, subscribe to the dev@ list.

            Notes on upgrading are maintained in the Wiki Upgrade pages. The wiki is a community maintained resource - please feel free to add your input so that everyone can benefit from the collective experience.

            For the version requirements of each library, see the Installation chapter.

            The purpose of this section is to highlight the new features since the Version 1.2.4 release. For detailed information concerning changes see the Detailed Changes section.

            Dependencies

            Struts has changed its dependencies on the following software components:

            • Commons BeanUtils dependency changed to Version 1.7.0
            • Commons Digester dependency changed to Version 1.6
            • Commons Validator dependency changed to Version 1.1.4
            • Dependency on Commons Collections has been removed
            • Dependency on Commons Lang has been removed

            Core Struts

            Saving Messages in the Session

            A new method to store errors in the Session [saveErrors(HttpSession, ActionMessages)] has been added to Action along with the automatic removal of these errors once they have been accessed. This is equivalent to the facility for messages that was included in the Version 1.2.4 release.

            Re-directing ActionForward

            ActionRedirect is a subclass of ActionForward which is designed for use in redirecting requests, with support for adding parameters at runtime. See the javadoc for more details.

            Download Action

            DownloadAction is an abstract action that provides the nuts and bolts for downloading files. See the javadocs and Wiki for further information.

            Dispatch Helper

            ActionDispatcher is a helper class for providing DispatchAction type behaviour without having to inherit from DispatchAction. See the javadoc for more details.

            Lazy Validator Form

            A DynaBean flavour ActionForm which doesn't need its properties to be defined and provides Lazy List and Lazy Map behaviours.

            Config Files in jars

            Config files (i.e. Struts config, Validator config and Tiles config files) can now be stored in jars. Struts checks the servlet context, as before but if not found Struts now tries the classloader to try and get them.

            Tag Library Changes

            Highlighting Errors

            Struts can now automatically highlight error fields using the new errorKey, errorStyle, errorStyleClass and errorStyleId attributes on the HTML Input Tags. See the User Guide for details of these attributes.

            Readonly / Disabled Forms

            It is now possible to either disable or make read only all fields for a form using the new readonly and disabled attributes on the <html:form> tag. N.B.The readonly attribute only affects <html:text>, <html:textarea> and <html:password> as per the HTML 4 specification. See the User Guide for details of these attributes.

            HTML Tag Refactoring

            Many of the HTML tags have been refactored to make them easier to extend.

            • A prepareOtherAttributes() method was added - called just before the closing tag element, it provides a place to render additional attributes.
            • The name attribute rendering is now in a prepareName() method to make it easier to provide custom behaviour.
            • The value attribute rendering is now in a prepareValue() method to make it easier to provide custom behaviour.
            • When rendering an attribute, these tags now use the getter for the property rather than the actual property - that means that if you wanted, for example to override the TextTag's styleClass then one option is to override the getStyleClass() method.
            • Rendering of attributes now uses a simple prepareAttribute() method to generate the name="attribute" format, making most attribute rendering a one line statement.

            Bundle Attribute

            The bundle attribute has been added to the following HTML tags: ButtonTag, CancelTag, CheckboxTag, FileTag, FrameTag, HiddenTag, LinkTag, MultiboxTag, PasswordTag, RadioTag, ResetTag, SelectTag, SubmitTag, TextTag, TextareaTag. See the User Guide for details of the bundle attribute for these tags.

            ErrorTag

            Now has header, footer, prefix, suffix attributes. See the User Guide for details of these attributes.

            Validator

            Resource Bundle Support

            The bundle attribute for the <msg> and <arg> elements in the Validator configuration file (e.g. validation.xml) are now supported along with the resource attribute on the <msg> element.

            New pages have been added to the struts-examples webapp showing the new Resource Bundle Support and a page for validwhen examples.

            Subversion

            Struts has migrated it's source repository from CVS to Subversion, following which the repository has been refactored into subprojects. The subproject re-factoring does not however affect the 1.2.x series which is released from the STRUTS_1_2 branch.

            People

            On the people front, in addition to Martin Cooper being appointed the new PMC chair, one new committer, Hubert Rabago, accepted an invitation to join us, and we welcome back David Geary from emeritus to active status.

            This section contains the details of changes since version 1.2.4 with links to bugzilla tickets and Subversion Revision details. It is split into the following sub-sections.

            Version 1.2.7

            After Version 1.2.6 was tagged the 1.2 Branch was created and work started on the next version (1.3.x series). Work has continued on both versions and Revision numbers shown in brackets are where a change has been ported from the current development version into the 1.2 Branch.

            ModificationRevisionBugzillaDescription
            2005-05-05 168223 n/a Fix 1.2.x Build - remove duplicate "el" directory from "contrib".
            2005-05-05 168218 n/a Fix 1.2.x build to include struts-chain in the "contrib" directory (from sandbox STRUTS_1_2_BRANCH).
            2005-05-03 168011 (168012) n/a Prevent NullPointerException when toString() is called before dynaClass is initialized.
            2005-04-29 165304 (165305) n/a Retrieve FormTag stored in Request scope, rather than the TagSupport's findAncestorWithClass() .
            2005-04-29 165186 (165208) n/a Fixing value escape so that both backslashes and quotes are escaped correctly.
            2005-04-28 165158 (165160) 20034 Additional fix to "Invalid cache in InsertTag" for a problem on Orion.
            2005-04-28 165097 33989 Fix cactus tests to work with Cactus 1.7.
            2005-04-27 164922 (164927) 23127 Page attribute of img and image tags doesn't use pagePattern setting.
            2005-04-26 164814 (164831) 34624 BeanValidatorForm's getValidationKey method should call mapping.getAttribute().
            2005-04-26 164745 (164746) 31270 Add ActionDispatcher to provide dispatch behavior to classes that do not extend DispatchAction.
            2005-04-26 164729 (164862) 19901 Add a check for null page value and throwing more informative exception.
            2005-04-26 164723 (164860) 16653 Add a check for missing Validator Resources and throw a more useful error message.
            2005-04-26 164718 (164858) 31658 LogonAction does not check errors in appropriate place.
            2005-04-25 164734 (164703) 34314 Add TilesRequestProcessor handling for NoSuchDefinitionException.
            2005-04-25 (164684) 33132 Implement Servlet 2.3/2.4 methods using reflection in MultipartRequestWrapper.
            2005-04-25 164591 (164590) n/a Synchronize the Nested tag attributes for changes made in Bug #17708 and Bug #21603.
            2005-04-23 164343 (164340) 33122 Resolve <html:link> ClassCastException when a non String paramId value already exists in the params map.
            2005-04-21 162109 (164337) 33918 Allow saving errors to the session in the same way that messages are.
            2005-04-21 162094 (164334) 33238 Change JavascriptValidatorTag to escape double quotes in variable values.
            2005-04-12 161093 (164336) n/a Change DigestingPlugIn to give an explicit message when configSource/configPath yields a null URL.
            2005-04-06 160261 (160262) 21603 Automatic readonly/disabled settings using new <html:form> tag attributes.
            2005-04-06 160255 (160256) 32778 Resolve HTML Link Tag not working with JSTL Loop Tag.
            2005-03-31 159608 (159609) n/a Improve ValidWhen Exception Handling - exceptions are now logged and validation fails returning an error message with details of the error.
            2005-03-31 159583 (159606) n/a A validwhen examples page and validation resource/bundles example pages (Server Side and JavaScript) have been added to the struts-examples webapp.
            2005-03-29 159342 n/a Commons Validator dependency changed to version 1.1.4.
            2005-03-28 159292 n/a Add "bundle" attribute to El version of JavascriptValidatorTag.
            2005-03-28 159269 & 159268 (159291) 21760 18169 Resolve #21760 Support for non-default resource bundles in validation. Resolve #18169 Resource attribute of msg tag in the validation.xml doesn't work.
            2005-03-22 158622 (158617) 34120 Fix invalid XML in the struts-doc-config.xml file in the Tiles Documentation webapp.
            2005-03-20 158267 (158730) 27089 Add doubleRange validator to the validator-rules.xml
            2005-03-19 158216 (158727) 34027 Name attribute is no longer rendered in the <html:form> tag if the rendering mode is XHTML.
            2005-03-14 157398 (157399) 33876 JavaDoc corrections.
            2005-03-14 157395 (157397) 33998 Fix @link() tags
            2005-02-15 153901 (164747) 866 Add ActionRedirect class to allow adding request parameters to redirecting forwards.
            2005-02-09 153065 (158605) 14042 Resolve memory leaks with JBoss 3.x +(Tomcat/Jetty).
            2005-01-06 124417 (124418) n/a Change DownloadAction to use supplied buffer size.
            2004-12-28 123473 32490 Sync up the EL tags with their non-EL counterparts. This adds the 'bundle' attribute to many tags, and also the 'error*' attributes, and 'header', 'footer', 'prefix' and 'suffix' for the Errors tag.
            2004-12-27 123447, 123444 & 123442 (123587) 32504 32016 Change ModuleException to ensure all constructors invoke super. Resolve #32504 - document the means used to format values in the <bean:write> tag. Resolve #32016 - wrap the hidden token field in a <div> element for HTML 4.01 Strict compliance.
            2004-12-12 111630 (159674) n/a Remove use of "enum" as its a keyword in Java 5.
            2004-11-20 106043 n/a 1.2.x Branch created

            Version 1.2.6

            ModificationRevisionBugzillaDescription
            2004-11-20 106041 n/a Version 1.2.6 tagged
            2004-11-20 105966 31642 Resolve <bean:include> always include Session id (if any) even for external Urls (href attribute)
            2004-11-20 105965 32283 Two slashes created by TagUtils.getActionMappingURL for webapps in root context
            2004-11-20 105963 32265 Add a warning to reset FormFile
            2004-11-20 105907 32323 Shale mailreader example should define the servlet version as 2.4
            2004-11-19 105888 n/a Changes to update maven build after SVN layout re-org.
            2004-11-19 105881 n/a Remove redundant definitions of maven.repo.central and maven.repo.central.directory
            2004-11-19 105785 n/a Added ability to load struts, validator, and tiles config files from classloader if not found in the servlet context.
            2004-11-19 105787 n/a Better handling of servlet initialization errors to mark the servlet as unavailable and notify the developer of the probable cause.
            2004-11-18 76271 n/a Add missing base class for Shale test cases.
            2004-11-17 76098 32134 Must use contextRelative to forward to Actions in Default module.
            2004-11-13 57587 - 65927
            (not consecutive)
            Subversion repository rearranged into separate core, el, faces and sandbox subprojects.
            2004-11-09 57108 31983 Validator validwhen documentation typo.
            2004-11-09 57099 32123 DigestingPlugIn can't load a digester rule file.
            2004-11-06 56770 32047 "Created" boolean in FacesRequestProcessor.doForward() not being set
            2004-11-05 56678 23924 Improve TagUtils.filter() performance.
            2004-11-03 56532 n/a Add LazyValidatorForm
            2004-10-30 56018, 56513, 56520 n/a Change BeanUtils dependency to 1.7.0, Digester dependency to 1.6 and remove Collections Dependency
            2004-10-30 56011 n/a Add "actions/DownloadAction.java", an abstract action that provides the nuts and bolts for downloading files.
            2004-10-29 55980 n/a Document that if a link to a forward is used to switch modules, the path must point to an action.
            2004-10-26 55577 31399 Message resources file in Struts Blank is misplaced. [55584] Update README with new layout.
            2004-10-26 55576 31348 Using a tiles definition as errorPage causes infinite looping
            2004-10-24 55416 31761 NullPointerException in ActionServlet
            2004-10-22 55318 31850 Implement Serializable on ActionServletWrapper
            2004-10-20 55110 n/a Add documentation to base chain-config.xml to help Tiles users.
            2004-10-18 55025 31755 Document the default value for "scope" on an <action> element in the DTD for a struts-config.xml file (along with all the other documentation).

            Version 1.2.5

            ModificationRevisionBugzillaDescription
            2004-10-17 54947 n/a Version 1.2.5 tagged
            2004-10-16 54936 n/a Update several Javadoc parameter names to resolve Javadoc generation warnings
            2004-10-16 54892 n/a Remove dependency on commons-lang.
            2004-10-16 54889 n/a Update roadmap for 1.2.4 / 1.2.5 releases.
            2004-10-09 54187 n/a Move Struts-Faces from "contrib" to the trunk.
            2004-10-03 51829 n/a Add header,footer,prefix,suffix attributes to ErrorsTag.
            2004-10-03 51825 31481 Have Tiles ControllerSupport execute() call perform() for backward compatibility. To be removed after version 1.2.
            2004-10-03 51824 n/a Add validwhen test to compare two Strings containing numbers.
            2004-10-03 51823 31514 validwhen validator should do numeric compare when both items convertable to Integer.
            2004-10-01 51759 n/a Move repository to Subversion.
            2004-09-23 cvs 17708 Better i18n and alternate bundle support for html tags. Add missing "bundle" attribute to tld for html tags. Tags affected are ButtonTag, CancelTag, CheckboxTag, FileTag, FrameTag, HiddenTag, LinkTag, MultiboxTag, PasswordTag, RadioTag, ResetTag, SelectTag, SubmitTag,TextTag, TextareaTag. Also added a test for the bundle attribute for each of the above tags.
            2004-09-23 cvs 31212 20417 Add missing nested tag attributes. Resolve #31212 "nested:link module attribute not specified in tld". Resolve #20417 "Attribute idName not declared for NestedRadioTag".
            2004-09-23 cvs 31374 Forward path in Validator struts-config.xml in struts-examples incorrect
            2004-09-23 cvs n/a Refactor some of the HTML tags make extending them easier.
            • added prepareOtherAttributes() method
            • added prepareName() method
            • use getters rather than instance variables
            • refactored SubmitTag - ButtonTag, CancelTag and ResetTag now inherit from SubmitTag.

            Next: Installation

            libstruts1.2-java-1.2.9/doc/userGuide/release-notes-1.2.8.xml0000644000175000017500000002435110404045220024115 0ustar arnaudarnaud00000000000000 Struts Release Notes (since 1.2.7)

            The main motivation for releasing Struts 1.2.8 is to fix a Cross Site Scripting (XSS) vulnerability which has been identified by Hacktics.com. More details available on the Wiki.

            This section contains release notes for changes that have taken place since Version 1.2.7. To keep up-to-date on all changes to Struts, subscribe to the dev@ list.

            Notes on upgrading are maintained in the Wiki Upgrade pages. The wiki is a community maintained resource - please feel free to add your input so that everyone can benefit from the collective experience.

            For the version requirements of each library, see the Installation chapter.

            Version 1.2.8

            After Version 1.2.6 was tagged the 1.2 Branch was created and work started on the next version (1.3.x series). Work has continued on both versions and Revision numbers shown in brackets are where a change has been ported from the current development version into the 1.2 Branch.

            ModificationRevisionBugzillaDescription
            2005-11-07 331261 (331265) 37131 Escape newlines in Validator variables.
            2005-11-05 191272 and 192949 (331056) 35127 Changing rendering of the form name to use the 'id' attribute when in XHTML strict mode.
            2005-11-05 331060 (331055) n/a Fix for Struts XSS Vulnerability - remove uri from error messages.
            2005-08-31 265661 (265658) n/a Remove I18nFactorySet copied code.
            2005-08-29 264694 (264684) 32584 Provide config option to turn off MessageResources escape processing.
            2005-08-29 226545 (264662) 35833 Fix bug where non-resource action messages only work for the first message in the messages list.
            2005-06-20 191474 (191475) 35421 Correct link on the acquiring page to the maven generated nightly builds.
            2005-06-17 190794 (191170) n/a Update TagUtils to provide a more specific error message where properties on a formbean are not found.
            2005-06-16 191011 34460 Update to the HTML tag library docs.
            2005-06-16 191001 (191002) 32313 Update tag library configuration docs for Servlet 2.4.
            2005-06-15 190634 (190779) 23864 Filter html sensitive characters in the <html:radio> tag's value.
            2005-06-15 190804 (190807) 3202 <html:options> tag logic updated to be more efficient with use of iterators.
            2005-06-15 190631 (190780) 27861 Add better error reporting to <bean:define> tag.
            2005-06-04 180002 (180001) n/a Add warning to ActionMapping.findForward() method if not found.
            2005-05-27 178799 35108 Add comment regarding jdbc20ext.jar and JDK to build.properties.sample.
            2005-05-18 170859 (170858) 34949 Add no-arg constructor to ModuleConfigImpl.

            Next: Installation

            libstruts1.2-java-1.2.9/doc/userGuide/release-notes.xml0000644000175000017500000001437710404045220023460 0ustar arnaudarnaud00000000000000 Struts Release Notes (since 1.2.8)

            The main motivation for releasing Struts 1.2.9 is to fix three security issues which have been identified:

            • Bug 38374 - Validation always skipped with Globals.CANCEL_KEY.
            • Bug 38534 - DOS attack, application hack.
            • Bug 38749 - XSS vulnerability in LookupDispatchAction.

            This section contains release notes for changes that have taken place since Version 1.2.8. To keep up-to-date on all changes to Struts, subscribe to the dev@ list.

            Notes on upgrading are maintained in the Wiki Upgrade pages. The wiki is a community maintained resource - please feel free to add your input so that everyone can benefit from the collective experience.

            For the version requirements of each library, see the Installation chapter.

            Version 1.2.9

            After Version 1.2.6 was tagged the 1.2 Branch was created and work started on the next version (1.3.x series). Work has continued on both versions and Revision numbers shown in brackets are where a change has been ported from the current development version into the 1.2 Branch.

            ModificationRevisionBugzillaDescription
            2006-03-08 384234 (384235) 37817 TagUtils doesn't create XHTML compliant URLs using forwards defined with redirect="true".
            2006-03-08 384090 (384092) 38343 Add EventDispatchAction and EventActionDispatcher.
            2006-03-07 383907 (383908) 37685 Javascript tag does not work on Mozilla.
            2006-03-07 383718 (383720) 38749 XSS vulnerability in LookupDispatchAction.
            2006-02-15 379661 (377929) 38534 DOS attack, application hack.
            2006-02-14 377562 (377805) 38374 Validation always skipped with Globals.CANCEL_KEY.
            2006-01-31 373798 (373801) 38461 struts-el html tag library errorKey not using documented default value.

            Next: Installation

            libstruts1.2-java-1.2.9/doc/userGuide/struts-bean.xml0000644000175000017500000011723310404045210023153 0ustar arnaudarnaud00000000000000 Craig R. McClanahan The Struts Framework Project - Bean Tags 1.2 1.1 bean Struts Bean Tags http://struts.apache.org/tags-bean

            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.

            Many of the tags in this tag library will throw a JspException 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 <%@ page %> 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 org.apache.struts.action.EXCEPTION.

            If you are viewing this page from within the Struts Documentation Application (or online at http://struts.apache.org/), you can learn more about using these tags in the Bean Tags Developer's Guide.

            cookie Define a scripting variable based on the value(s) of the specified request cookie. org.apache.struts.taglib.bean.CookieTag org.apache.struts.taglib.bean.CookieTei empty

            Retrieve the value of the specified request cookie (as a single value or multiple values, depending on the multiple attribute), and define the result as a page scope attribute of type Cookie (if multiple is not specified) or Cookie[] (if multiple is specified).

            If no cookie with the specified name can be located, and no default value is specified, a request time exception will be thrown.

            id true false

            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.

            multiple false true

            If any arbitrary value for this attribute is specified, causes all matching cookies to be accumulated and stored into a bean of type Cookie[]. If not specified, the first value for the specified cookie will be retrieved as a value of type Cookie.

            name true true

            Specifies the name of the request cookie whose value, or values, is to be retrieved.

            value false true

            The default cookie value to return if no cookie with the specified name was included in this request.

            define Define a scripting variable based on the value(s) of the specified bean property. org.apache.struts.taglib.bean.DefineTag org.apache.struts.taglib.bean.DefineTei JSP

            Create a new attribute (in the scope specified by the toScope property, if any), and a corresponding scripting variable, both of which are named by the value of the id 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):

            • Specify a name attribute (plus optional property and scope 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).
            • Specify a value attribute - The created attribute and scripting variable will be of type java.lang.String, set to the value of this attribute.
            • Specify nested body content - The created attribute and scripting variable will be of type java.lang.String, set to the value of the nested body content.

            If a problem occurs while retrieving the specified bean property, a request time exception will be thrown.

            The <bean:define> tag differs from <jsp:useBean> in several ways, including:

            • Unconditionally creates (or replaces) a bean under the specified identifier.
            • 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).
            • Can create a bean whose contents is a literal string (or the result of a runtime expression) specified by the value attribute.
            • Does not support nested content (such as <jsp:setProperty> tags) that are only executed if a bean was actually created.

            USAGE NOTE - There is a restriction in the JSP 1.1 Specification that disallows using the same value for an id attribute more than once in a single JSP page. Therefore, you will not be able to use <bean:define> for the same bean name more than once in a single page.

            USAGE NOTE - 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.

            USAGE NOTE - You cannot use bean:define to instantiate 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.

            See the Bean Developer's Guide section on bean creation for more information about these differences, as well as alternative approaches to introducing beans into a JSP page.

            id true false

            Specifies the name of the scripting variable (and associated page scope attribute) that will be made available with the value of the specified property.

            name false true

            Specifies the attribute name of the bean whose property is accessed to define a new page scope attribute (if property is also specified) or the attribute name of the bean that is duplicated with the new reference created by this tag (if property is not also specified). This attribute is required unless you specify a value attribute or nested body content.

            property false true

            Specifies the name of the property to be accessed on the bean specified by name. This value may be a simple, indexed, or nested property reference expression. If not specified, the bean identified by name is given a new reference identified by id.

            scope false true

            Specifies the variable scope searched to retrieve the bean specified by name. If not specified, the default rules applied by PageContext.findAttribute() are applied.

            toScope false true

            Specifies the variable scope into which the newly defined bean will be created. If not specified, the bean will be created in page scope.

            type false true

            Specifies the fully qualified class name of the value to be exposed as the id attribute.

            java.lang.String (if you specify a value attribute) or java.lang.Object otherwise.
            value false true

            The java.lang.String value to which the exposed bean should be set. This attribute is required unless you specify the name attribute or nested body content.

            header Define a scripting variable based on the value(s) of the specified request header. org.apache.struts.taglib.bean.HeaderTag org.apache.struts.taglib.bean.HeaderTei empty

            Retrieve the value of the specified request header (as a single value or multiple values, depending on the multiple attribute), and define the result as a page scope attribute of type String (if multiple is not specified) or String[] (if multiple is specified).

            If no header with the specified name can be located, and no default value is specified, a request time exception will be thrown.

            id true false

            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.

            multiple false true

            If any arbitrary value for this attribute is specified, causes a call to HttpServletRequest.getHeaders() and a definition of the result as a bean of type String[]. Otherwise, HttpServletRequest.getHeader() will be called, and a definition of the result as a bean of type String will be performed.

            name true true

            Specifies the name of the request header whose value, or values, is to be retrieved.

            value false true

            The default header value to return if no header with the specified name was included in this request.

            include Load the response from a dynamic application request and make it available as a bean. org.apache.struts.taglib.bean.IncludeTag org.apache.struts.taglib.bean.IncludeTei empty

            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 String. This tag has a function similar to that of the standard <jsp:include> 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).

            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):

            • forward - Use the value of this attribute as the name of a global ActionForward to be looked up, and use the module-relative or context-relative URI found there.
            • href - Use the value of this attribute unchanged (since this might link to a resource external to the application, the session identifier is not included.
            • page - Use the value of this attribute as an module-relative URI to the desired resource.

            WARNING - Accessing resources protected by security constraints, or resources under the /WEB-INF subdirectory, with this tag is not supported. Consider using the <jsp:include ... flush="false"> tag on a JSP 1.2 or later container, or the <c:import> tag from the JSP Standard Tag Library to accomplish this.

            anchor false true

            Optional anchor tag ("#xxx") to be added to the generated hyperlink. Specify this value without any "#" character.

            forward false true

            Logical name of a global ActionForward that contains the actual content-relative URI of the resource to be included.

            href false true

            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 not be included in the request.

            id true false

            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.

            name false true

            Module-relative name (starting with a '/') of the web application resource to be dispatched, and whose response data is to be made available as a bean.

            Use the "page" attribute instead.
            page false true

            Module-relative URI (starting with a '/') of the web application resource to be included.

            transaction false true

            Set to true if you want the current transaction control token included in the generated URL for this include.

            message Render an internationalized message string to the response. org.apache.struts.taglib.bean.MessageTag empty

            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.

            The message key may be specified directly, using the key attribute, or indirectly, using the name and property attributes to obtain it from a bean.

            JSTL: The equivalent JSTL tag is <fmt:message>. For example,
            <fmt:message key="my.msg.key"> <fmt:param value="replacement text"/> </fmt:message>

            arg0 false true

            First parametric replacement value, if any.

            arg1 false true

            Second parametric replacement value, if any.

            arg2 false true

            Third parametric replacement value, if any.

            arg3 false true

            Fourth parametric replacement value, if any.

            arg4 false true

            Fifth parametric replacement value, if any.

            bundle false true

            The name of the application scope bean under which the MessageResources object containing our messages is stored.

            Globals.MESSAGES_KEY
            key false true

            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 name and property attributes.

            locale false true

            The name of the session scope bean under which our currently selected Locale object is stored.

            Globals.LOCALE_KEY
            name false true

            Specifies the attribute name of the bean whose property is accessed to retrieve the value specified by property (if specified). If property is not specified, the value of this bean itself will be used as the message resource key.

            property false true

            Specifies the name of the property to be accessed on the bean specified by name. This value may be a simple, indexed, or nested property reference expression. If not specified, the value of the bean identified by name will itself be used as the message resource key.

            scope false true

            Specifies the variable scope searched to retrieve the bean specified by name. If not specified, the default rules applied by PageContext.findAttribute() are applied.

            page Expose a specified item from the page context as a bean. org.apache.struts.taglib.bean.PageTag org.apache.struts.taglib.bean.PageTei empty

            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.

            If a problem occurs while retrieving the specified configuration object, a request time exception will be thrown.

            id true false

            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.

            property true true

            Name of the property from our page context to be retrieved and exposed. Must be one of application, config, request, response, or session.

            parameter Define a scripting variable based on the value(s) of the specified request parameter. org.apache.struts.taglib.bean.ParameterTag org.apache.struts.taglib.bean.ParameterTei empty

            Retrieve the value of the specified request parameter (as a single value or multiple values, depending on the multiple attribute), and define the result as a page scope attribute of type String (if multiple is not specified) or String[] (if multiple is specified).

            If no request parameter with the specified name can be located, and no default value is specified, a request time exception will be thrown.

            id true false

            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.

            multiple false true

            If any arbitrary value for this attribute is specified, causes a call to ServletRequest.getParameterValues() and a definition of the result as a bean of type String[]. Otherwise, ServletRequest.getParameter() will be called, and a definition of the result as a bean of type String will be performed.

            name true true

            Specifies the name of the request parameter whose value, or values, is to be retrieved.

            value false true

            The default parameter value to return if no parameter with the specified name was included in this request.

            resource Load a web application resource and make it available as a bean. org.apache.struts.taglib.bean.ResourceTag org.apache.struts.taglib.bean.ResourceTei empty

            Retrieve the value of the specified web application resource, and make it available as either a InputStream or a String, depending on the value of the input attribute.

            If a problem occurs while retrieving the specified resource, a request time exception will be thrown.

            id true false

            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.

            input false true

            If any arbitrary value for this attribute is specified, the resource will be made available as an InputStream. If this attribute is not specified, the resource will be made available as a String.

            name true true

            Module-relative name (starting with a '/') of the web application resource to be loaded and made available.

            size Define a bean containing the number of elements in a Collection or Map. org.apache.struts.taglib.bean.SizeTag org.apache.struts.taglib.bean.SizeTei empty

            Given a reference to an array, Collection or Map, creates a new bean, of type java.lang.Integer, 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:

            • As a runtime expression specified as the value of the collection attribute.
            • As a JSP bean specified by the name attribute.
            • As the property, specified by the property attribute, of the JSP bean specified by the name attribute.
            collection false true

            A runtime expression that evaluates to an array, a Collection, or a Map.

            id true false

            The name of a page scope JSP bean, of type java.lang.Integer, that will be created to contain the size of the underlying collection being counted.

            name false true

            The name of the JSP bean (optionally constrained to the scope specified by the scope attribute) that contains the collection to be counted (if property is not specified), or whose property getter is called to return the collection to be counted (if property is specified.

            property false true

            The name of the property, of the bean specified by the name attribute, whose getter method will return the collection to be counted.

            scope false true

            The bean scope within which to search for the JSP bean specified by the name attribute. If not specified, the available scopes are searched in ascending sequence.

            struts Expose a named Struts internal configuration object as a bean. org.apache.struts.taglib.bean.StrutsTag org.apache.struts.taglib.bean.StrutsTei empty

            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 formBean, forward, and mapping attributes to select the configuration object to be exposed.

            If a problem occurs while retrieving the specified configuration object, a request time exception will be thrown.

            id true false

            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.

            formBean false true

            Specifies the name of the Struts ActionFormBean definition object to be exposed.

            forward false true

            Specifies the name of the global Struts ActionForward definition object to be exposed.

            mapping false true

            Specifies the matching path of the Struts ActionMapping definition object to be exposed.

            write Render the value of the specified bean property to the current JspWriter. org.apache.struts.taglib.bean.WriteTag empty

            Retrieve the value of the specified bean property, and render it to the current JspWriter as a String by the ways:

            • If format attribute exists then value will be formatted on base of format string from format attribute and default system locale.
            • If in resources exists format string for value data type (view format attribute description) then value will be formatted on base of format string from resources. Resources bundle and target locale can be specified with bundle and locale attributes. If nothing specified then default resource bundle and current user locale will be used.
            • If there is a PropertyEditor configured for the property value's class, the getAsText() method will be called.
            • Otherwise, the usual toString() conversions will be applied.

            When a format string is provided, numeric values are formatted using the java.text.DecimalFormat class; if the format string came from a resource, the applyLocalisedPattern() method is used, and applyPattern() is used otherwise. Dates are formatted using the SimpleDateFormat class. For details of the specific format patterns, please see the Javadocs for those classes.

            If a problem occurs while retrieving the specified bean property, a request time exception will be thrown.

            bundle false true

            The name of the application scope bean under which the MessageResources object containing our messages is stored.

            Globals.MESSAGES_KEY
            filter false true

            If this attribute is set to true, 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.

            true
            format false true

            Specifies the format string to use to convert bean or property value to the String. If nothing specified, then default format string for value data type will be searched in message resources by according key.

            formatKey false true

            Specifies the key to search format string in application resources.

            ignore false true

            If this attribute is set to true, and the bean specified by the name and scope attributes does not exist, simply return without writing anything. If this attribute is set to false, a runtime exception to be thrown, consistent with the other tags in this tag library.

            false
            locale false true

            The name of the session scope bean under which our currently selected Locale object is stored.

            Globals.LOCALE_KEY
            name true true

            Specifies the attribute name of the bean whose property is accessed to retrieve the value specified by property (if specified). If property is not specified, the value of this bean itself will be rendered.

            property false true

            Specifies the name of the property to be accessed on the bean specified by name. This value may be a simple, indexed, or nested property reference expression. If not specified, the bean identified by name will itself be rendered. If the specified property returns null, no output will be rendered.

            scope false true

            Specifies the variable scope searched to retrieve the bean specified by name. If not specified, the default rules applied by PageContext.findAttribute() are applied.

            libstruts1.2-java-1.2.9/doc/userGuide/struts-html.xml0000644000175000017500000112721210404045246023222 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Martin Cooper Mike Schachter James Turner David Graham The Struts Framework Project - HTML Tags 1.2 1.1 html Page Construction Tags http://struts.apache.org/tags-html

            This taglib contains tags used to create struts input forms, as well as other tags generally useful in the creation of HTML-based user interfaces.

            Many of the tags in this tag library will throw a JspException 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 <%@ page %> 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 org.apache.struts.action.EXCEPTION.

            base Render an HTML <base> Element org.apache.struts.taglib.html.BaseTag empty

            Renders an HTML <base> element with an href attribute pointing to the absolute location of the enclosing JSP page. This tag is valid only when nested inside an HTML <head> element.

            This tag is useful because it allows you to use relative URL references in the page that are calculated based on the URL of the page itself, rather than the URL to which the most recent submit took place (which is where the browser would normally resolve relative references against).

            target false true

            The window target for this base reference.

            server false true

            The server name to use instead of request.getServerName().

            button Render A Button Input Field org.apache.struts.taglib.html.ButtonTag

            Renders an HTML <input> element of type button, populated from the specified value or the content of this tag body. This tag is only valid when nested inside a form tag body.

            If a graphical button is needed (a button with an image), then the image tag is more appropriate.

            accesskey false true The keyboard character used to move focus immediately to this element. alt false true

            The alternate text for this element.

            altKey false true

            The message resources key of the alternate text for this element.

            bundle false true The servlet context attributes key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. Struts 1.2.5 disabled false true Set to true if this input field should be disabled. indexed false true Valid only inside of logic:iterate tag. If true then name of the html tag will be rendered as "propertyName[34]". Number in brackets will be generated for every iteration and taken from ancestor logic:iterate tag. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. property true true Name of the request parameter that will be included with this submission, set to the specified value. style false true CSS styles to be applied to this HTML element. styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). tabindex false true The tab order (ascending positive integers) for this element. title false true

            The advisory title for this element.

            titleKey false true

            The message resources key for the advisory title for this element.

            value false true Value of the label to be placed on this button. This value will also be submitted as the value of the specified request parameter. [Body of this tag (if any), or "Click"]
            cancel Render a Cancel Button org.apache.struts.taglib.html.CancelTag

            Renders an HTML <input> element of type submit. This tag is only valid when nested inside a form tag body. Pressing of this submit button causes the action servlet to bypass calling the associated form bean validate() method. The action is called normally.

            accesskey false true The keyboard character used to move focus immediately to this element. alt false true

            The alternate text for this element.

            altKey false true

            The message resources key of the alternate text for this element.

            bundle false true The servlet context attributes key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. Struts 1.2.5 disabled false true Set to true if this input field should be disabled. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. property false true Name of the request parameter that will be included with this submission, set to the specified value. WARNING - If you set this attribute to a value other than the default, this will NOT be recognized as the cancel key by the Struts controller servlet or the Action.isCancelled() method. You will need to do your own cancel detection. style false true CSS styles to be applied to this HTML element. styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). tabindex false true The tab order (ascending positive integers) for this element. title false true

            The advisory title for this element.

            titleKey false true

            The message resources key for the advisory title for this element.

            value false true Value of the label to be placed on this button. This value will also be submitted as the value of the specified request parameter. [Body of this tag (if any), or "Cancel"]
            checkbox Render A Checkbox Input Field org.apache.struts.taglib.html.CheckboxTag

            Renders an HTML <input> element of type checkbox, populated from the specified value or the specified property of the bean associated with our current form. This tag is only valid when nested inside a form tag body.

            NOTE: The underlying property value associated with this field should be of type boolean, and any value you specify should correspond to one of the Strings that indicate a true value ("true", "yes", or "on"). If you wish to utilize a set of related String values, consider using the multibox tag.

            WARNING: In order to correctly recognize unchecked checkboxes, the ActionForm bean associated with this form must include a statement setting the corresponding boolean property to false in the reset() method.

            accesskey false true The keyboard character used to move focus immediately to this element. alt false true

            The alternate text for this element.

            altKey false true

            The message resources key of the alternate text for this element.

            bundle false true The servlet context attributes key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. Struts 1.2.5 disabled false true Set to true if this input field should be disabled. errorKey false true

            Name of the request scope bean under which our error messages have been stored. If not present, the name specified by the Globals.ERROR_KEY constant string will be used.

            N.B. This is used in conjunction with the errorStyle, errorStyleClass and errorStyleId attributes and should be set to the same value as the name attribute on the <html:errors/> tag.

            Struts 1.2.5
            errorStyle false true

            CSS styles to be applied to this HTML element if an error exists for it.

            N.B. If present, this overrides the style attribute in the event of an error.

            Struts 1.2.5
            errorStyleClass false true

            CSS stylesheet class to be applied to this HTML element if an error exists for it (renders a "class" attribute).

            N.B. If present, this overrides the styleClass attribute in the event of an error.

            Struts 1.2.5
            errorStyleId false true

            Identifier to be assigned to this HTML element if an error exists for it (renders an "id" attribute).

            N.B. If present, this overrides the styleId attribute in the event of an error.

            Struts 1.2.5
            indexed false true Valid only inside of logic:iterate tag. If true then name of the html tag will be rendered as "id[34].propertyName". Number in brackets will be generated for every iteration and taken from ancestor logic:iterate tag. name false true The attribute name of the bean whose properties are consulted when rendering the current value of this input field. If not specified, the bean associated with the form tag we are nested within is utilized. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. property true true Name of the request parameter that will be included with this submission, set to the specified value. style false true

            CSS styles to be applied to this HTML element.

            N.B. If present, the errorStyle overrides this attribute in the event of an error for the element.

            styleClass false true

            CSS stylesheet class to be applied to this HTML element (renders a "class" attribute).

            N.B. If present, the errorStyleClass overrides this attribute in the event of an error for the element.

            styleId false true

            Identifier to be assigned to this HTML element (renders an "id" attribute).

            N.B. If present, the errorStyleId overrides this attribute in the event of an error for the element.

            tabindex false true The tab order (ascending positive integers) for this element. title false true

            The advisory title for this element.

            titleKey false true

            The message resources key for the advisory title for this element.

            value false true The value to be transmitted if this checkbox is checked when the form is submitted. If not specified, the value "on" will be returned.
            errors Conditionally display a set of accumulated error messages. org.apache.struts.taglib.html.ErrorsTag empty

            Displays a set of error messages prepared by a business logic component and stored as an ActionErrors object, a String, or a String array in request scope. If such a bean is not found, nothing will be rendered.

            In order to use this tag successfully, you must have defined an application scope MessageResources bean under the default attribute name, with optional definitions of message keys specified in the following attributes:

            • header - Text that will be rendered before the error messages list. Typically, this message text will end with <ul> to start the error messages list (default "errors.header").
            • footer - Text that will be rendered after the error messages list. Typically, this message text will begin with </ul> to end the error messages list (default "errors.footer").
            • prefix - Text that will be rendered before each individual error in the list (default "errors.prefix").
            • suffix - Text that will be rendered after each individual error in the list (default "errors.suffix").
            bundle false true The servlet context attribute key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. footer false true This value is an optional message resource key that will be printed after the iteration of error messages has finished. Defaults to "errors.footer" if not specified. Struts 1.2.5 header false true This value is an optional message resource key that will be printed before the iteration of error messages begins. Defaults to "errors.header" if not specified. Struts 1.2.5 locale false true The session attribute key for the Locale used to select messages to be displayed. If not specified, defaults to the Struts standard value. name false true Name of the request scope bean under which our error messages have been stored. If not present, the name specified by the Globals.ERROR_KEY constant string will be used. prefix false true This value is an optional message resource key that will be printed before an error message. Defaults to "errors.prefix" if not specified. Struts 1.2.5 property false true Name of the property for which error messages should be displayed. If not specified, all error messages (regardless of property) are displayed. suffix false true This value is an optional message resource key that will be printed after an error message. Defaults to "errors.suffix" if not specified. Struts 1.2.5
            file Render A File Select Input Field org.apache.struts.taglib.html.FileTag

            Renders an HTML <input> element of type file, defaulting to the specified value or the specified property of the bean associated with our current form. This tag is only valid when nested inside a form tag body.

            As with the corresponding HTML <input> element, the enclosing form element must specify "POST" for the method attribute, and "multipart/form-data" for the enctype attribute. For example:

                <html:form method="POST" enctype="multipart/form-data">
                    <html:file property="theFile" />
                </html:form>

            WARNING: In order to correctly recognize uploaded files, the ActionForm bean associated with this form must include a statement setting the corresponding org.apache.struts.upload.FormFile property to null in the reset() method.

            accesskey false true The keyboard character used to move focus immediately to this element. accept false true Comma-delimited set of content types that the server you submit to knows how to process. This list can be used by the client browser to limit the set of file options that is made available for selection. If not specified, no content type list will be sent. alt false true

            The alternate text for this element.

            altKey false true

            The message resources key of the alternate text for this element.

            bundle false true The servlet context attributes key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. Struts 1.2.5 disabled false true Set to true if this input field should be disabled. errorKey false true

            Name of the request scope bean under which our error messages have been stored. If not present, the name specified by the Globals.ERROR_KEY constant string will be used.

            N.B. This is used in conjunction with the errorStyle, errorStyleClass and errorStyleId attributes and should be set to the same value as the name attribute on the <html:errors/> tag.

            Struts 1.2.5
            errorStyle false true

            CSS styles to be applied to this HTML element if an error exists for it.

            N.B. If present, this overrides the style attribute in the event of an error.

            Struts 1.2.5
            errorStyleClass false true

            CSS stylesheet class to be applied to this HTML element if an error exists for it (renders a "class" attribute).

            N.B. If present, this overrides the styleClass attribute in the event of an error.

            Struts 1.2.5
            errorStyleId false true

            Identifier to be assigned to this HTML element if an error exists for it (renders an "id" attribute).

            N.B. If present, this overrides the styleId attribute in the event of an error.

            Struts 1.2.5
            indexed false true Valid only inside of logic:iterate tag. If true then name of the html tag will be rendered as "id[34].propertyName". Number in brackets will be generated for every iteration and taken from ancestor logic:iterate tag. maxlength false true Maximum number of input characters to accept. This is ignored by most browsers. [No limit] name false true The attribute name of the bean whose properties are consulted when rendering the current value of this input field. If not specified, the bean associated with the form tag we are nested within is utilized. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. property true true Name of the request parameter that will be included with this submission, set to the specified value. size false true Size of the file selection box to be displayed. style false true

            CSS styles to be applied to this HTML element.

            N.B. If present, the errorStyle overrides this attribute in the event of an error for the element.

            styleClass false true

            CSS stylesheet class to be applied to this HTML element (renders a "class" attribute).

            N.B. If present, the errorStyleClass overrides this attribute in the event of an error for the element.

            styleId false true

            Identifier to be assigned to this HTML element (renders an "id" attribute).

            N.B. If present, the errorStyleId overrides this attribute in the event of an error for the element.

            tabindex false true The tab order (ascending positive integers) for this element. title false true

            The advisory title for this element.

            titleKey false true

            The message resources key for the advisory title for this element.

            value false true

            NOTE: When setting this to some value, whether intentional or as the result (for example) of validation errors forcing the user back to the original jsp, this value is ignored by most browsers (for security reasons). This means that your users will have to re-select any previously selected files when submitting the form. Opera web browser will prompt the user so they have a chance to abort the submit.

            Value to which this field should be initialized. [Use the corresponding bean property value or body content (if any) if property is not specified]
            form Define An Input Form org.apache.struts.taglib.html.FormTag JSP

            Renders an HTML <form> element whose contents are described by the body content of this tag. The form implicitly interacts with the specified request scope or session scope bean to populate the input fields with the current property values from the bean.

            The form bean is located, and created if necessary, based on the form bean specification for the associated ActionMapping.

            action true true

            The URL to which this form will be submitted. This value is also used to select the ActionMapping we are assumed to be processing, from which we can identify the appropriate form bean and scope.

            If you are using extension mapping for selecting the controller servlet, this value should be equal to the path attribute of the corresponding <action> element, optionally followed by the correct extension suffix.

            If you are using path mapping to select the controller servlet, this value should be exactly equal to the path attribute of the corresponding <action> element.

            acceptCharset false true The list of character encodings for input data that the server should accept. Struts 1.2.2 disabled false true Set to true if the Form's input fields should be disabled. Struts 1.2.7 enctype false true The content encoding to be used to submit this form, if the method is POST. This must be set to "multipart/form-data" if you are using the file tag to enable file upload. If not specified, the browser default (normally "application/x-www-form-urlencoded") is used. focus false true The field name (among the fields on this form) to which initial focus will be assigned with a JavaScript function. If not specified, no special JavaScript for this purpose will be rendered. focusIndex false true If the focus field is a field array, such as a radio button group, you can specify the index in the array to receive focus. Struts 1.1 method false true The HTTP method that will be used to submit this request (GET, POST). [POST] onreset false true JavaScript event handler executed if the form is reset. onsubmit false true JavaScript event handler executed if the form is submitted. readonly false true Set to true if the Form's input fields should be read only. Struts 1.2.7 scriptLanguage false true The form's focus <script> element will not contain a language attribute when this is set to false. The default is true but this property is ignored in XHMTL mode. Struts 1.2 style false true CSS styles to be applied to this HTML element. styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). target false true Window target to which this form is submitted, such as for use in framed presentations.
            frame Render an HTML frame element org.apache.struts.taglib.html.FrameTag

            Renders an HTML <frame> element with processing for the src attribute that is identical to that performed by the <html:link> tag for the href attribute. URL rewriting will be applied automatically, to maintain session state in the absence of cookies.

            The base URL for this frame is calculated based on which of the following attributes you specify (you must specify exactly one of them):

            • forward - Use the value of this attribute as the name of a global ActionForward to be looked up, and use the module-relative or context-relative URI found there.
            • href - Use the value of this attribute unchanged.
            • page - Use the value of this attribute as a module-relative URI, and generate a server-relative URI by including the context path and application prefix.
            • action - Use the value of this attribute as the logical name of a global Action that contains the actual content-relative URI of the destination of this transfer.

            Normally, the hyperlink 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 paramId attribute (and its associated attributes to select the value), or specify the name (and optional property) attributes to select a java.util.Map bean that contains one or more parameter ids and corresponding values.

            To specify a single parameter, use the paramId attribute to define the name of the request parameter to be submitted. To specify the corresponding value, use one of the following approaches:

            • Specify only the paramName attribute - The named JSP bean (optionally scoped by the value of the paramScope attribute) must identify a value that can be converted to a String.
            • Specify both the paramName and paramProperty attributes - The specified property getter method will be called on the JSP bean identified by the paramName (and optional paramScope) attributes, in order to select a value that can be converted to a String.

            If you prefer to specify a java.util.Map that contains all of the request parameters to be added to the hyperlink, use one of the following techniques:

            • Specify only the name attribute - The named JSP bean (optionally scoped by the value of the scope attribute) must identify a java.util.Map containing the parameters.
            • Specify both name and property attributes - The specified property getter method will be called on the bean identified by the name (and optional scope) attributes, in order to return the java.util.Map containing the parameters.

            As the Map 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), or an object whose toString() method will be called. If a String array is specified, more than one value for the same query parameter name will be created.

            Additionally, you can request that the current transaction control token, if any, be included in the generated hyperlink by setting the transaction attribute to true. You can also request that an anchor ("#xxx") be added to the end of the URL that is created by any of the above mechanisms, by using the anchor attribute.

            bundle false true The servlet context attributes key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. Struts 1.2.5 action false true

            Logical name of a global Action 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 must specify exactly one of the action attribute, the forward attribute, the href attribute, or the page attribute.

            Additionally, you can specify a module prefix for linking to other modules.

            module false true

            Prefix name of a Module that contains the action mapping for the Action that is specified by the action attribute. You must specify an action attribute for this to have an effect.

            Note: Use "" to map to the default module.

            anchor false true

            Optional anchor tag ("#xxx") to be added to the generated hyperlink. Specify this value without any "#" character.

            forward false true

            Logical name of a global ActionForward 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 must specify exactly one of the action attribute, the forward attribute, the href attribute, or the page attribute.

            frameborder false true

            Should a frame border be generated around this frame (1) or not (0)?

            frameName false true

            Value for the name attribute of the rendered <frame> element.

            href false true

            The URL 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 must specify exactly one of the action attribute, the forward attribute, the href attribute, or the page attribute.

            longdesc false true

            URI of a long description of the frame. This description should supplement the short description provided by the title attribute, and may be particularly useful for non-visual user agents.

            marginheight false true

            The amount of space (in pixels) to be left between the frame's contents and its top and bottom margins.

            marginwidth false true

            The amount of space (in pixels) to be left between the frame's contents and its left and right margins.

            name false true

            The name of a JSP bean that contains a Map representing the query parameters (if property is not specified), or a JSP bean whose property getter is called to return a Map (if property is specified).

            noresize false true

            Should users be disallowed from resizing the frame? (true, false).

            page false true

            The module-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 must specify exactly one of the action attribute, the forward attribute, the href attribute, or the page attribute.

            paramId false true

            The name of the request parameter that will be dynamically added to the generated hyperlink. The corresponding value is defined by the paramName and (optional) paramProperty attributes, optionally scoped by the paramScope attribute

            paramName false true

            The name of a JSP bean that is a String containing the value for the request parameter named by paramId (if paramProperty is not specified), or a JSP bean whose property getter is called to return a String (if paramProperty is specified). The JSP bean is constrained to the bean scope specified by the paramScope property, if it is specified.

            paramProperty false true

            The name of a property of the bean specified by the paramName attribute, whose return value must be a String containing the value of the request parameter (named by the paramId attribute) that will be dynamically added to this hyperlink.

            paramScope false true

            The scope within which to search for the bean specified by the paramName attribute. If not specified, all scopes are searched.

            property false true

            The name of a property of the bean specified by the name attribute, whose return value must be a java.util.Map containing the query parameters to be added to the hyperlink. You must specify the name attribute if you specify this attribute.

            scope false true

            The scope within which to search for the bean specified by the name attribute. If not specified, all scopes are searched.

            scrolling false true

            Should scroll bars be created unconditionally (yes), never (no), or only when needed (auto)?

            style false true

            CSS styles to be applied to this element.

            styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). title false true

            The advisory title for this element.

            titleKey false true

            The message resources key for the advisory title for this element.

            transaction false true

            If set to true, any current transaction control token will be included in the generated hyperlink, so that it will pass an isTokenValid() test in the receiving Action.

            hidden Render A Hidden Field org.apache.struts.taglib.html.HiddenTag empty

            Renders an HTML <input> element of type hidden, populated from the specified value or the specified property of the bean associated with our current form. This tag is only valid when nested inside a form tag body.

            accesskey false true The keyboard character used to move focus immediately to this element. alt false true

            The alternate text for this element.

            altKey false true

            The message resources key of the alternate text for this element.

            bundle false true The servlet context attributes key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. Struts 1.2.5 disabled false true Set to true if this input field should be disabled. indexed false true Valid only inside of logic:iterate tag. If true then name of the html tag will be rendered as "id[34].propertyName". Number in brackets will be generated for every iteration and taken from ancestor logic:iterate tag. name false true The attribute name of the bean whose properties are consulted when rendering the current value of this input field. If not specified, the bean associated with the form tag we are nested within is utilized. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. property true true Name of this input field, and the name of the corresponding bean property if value is not specified. The corresponding bean property (if any) must be of type String. style false true CSS styles to be applied to this HTML element. styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). title false true

            The advisory title for this element.

            titleKey false true

            The message resources key for the advisory title for this element.

            value false true Value to which this field should be initialized. [Use the corresponding bean property value] write false true Should the value of this field also be rendered to the response page to make it visible, in addition to creating an HTML type="hidden" element? By default, only the hidden element is created.
            html Render an HTML <html> Element org.apache.struts.taglib.html.HtmlTag JSP

            Renders an HTML <html> element with language attributes extracted from the user's current Locale object, if there is one.

            lang false true Renders a lang attribute with the locale stored in the user's session. If not found in the session, the language from the Accept-Language HTTP header is used. If still not found, the default language for the server is used. Struts 1.2 locale false true

            Set to true in order to store a Locale in the session based on the current request's Accept-Language header (if any) if none has currently been set. This attribute will create a session if one does not already exist. The lang attribute is rendered with the appropriate language code.

            Creating a session is undesirable for apps that don't support them. Use the lang attribute to achieve the same functionality without creating a session.
            xhtml false true

            Set to true in order to render xml:lang and xmlns attributes on the generated html element. This also causes all other html tags to render as XHTML 1.0 (the <html:xhtml/> tag has a similar purpose).

            Struts 1.1
            image Render an input tag of type "image" org.apache.struts.taglib.html.ImageTag

            Renders an HTML <input> tag of type "image". The base URL for this image is calculated directly based on the value specified in the src or page attributes, or indirectly by looking up a message resource string based on the srcKey or pageKey attributes. You must specify exactly one of these attributes.

            If you would like to obtain the coordinates of the mouse click that submitted this request, see the information below on the property attribute.

            This tag is only valid when nested inside a form tag body.

            accesskey false true

            The keyboard character used to move focus immediately to this element.

            align false true

            The alignment option for this image.

            The align attribute is deprecated in HTML 4.x. The suggested alternative is to use CSS. Please see http://www.w3.org/TR/REC-html40/struct/objects.html#h-13.7.4 for more details.
            alt false true

            The alternate text for this image.

            altKey false true

            The message resources key of the alternate text for this image.

            border false true

            The width (in pixels) of the border around this image.

            bundle false true

            The servlet context attribute key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet.

            disabled false true Set to true if this input field should be disabled. indexed false true Valid only inside of logic:iterate tag. If true then name of the html tag will be rendered as "propertyName[34]". Number in brackets will be generated for every iteration and taken from ancestor logic:iterate tag. locale false true

            The session attribute key for the Locale used to select internationalized messages. If not specified, defaults to the Struts standard value.

            onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. page false true

            The module-relative path of the image for this input tag.

            pageKey false true

            The key of the message resources string specifying the module-relative path of the image for this input tag.

            property false true

            The property name of this image tag. The parameter names for the request will appear as "property.x" and "property.y", the x and y representing the coordinates of the mouse click for the image. A way of retrieving these values through a form bean is to define getX(), getY(), setX(), and setY() methods, and specify your property as a blank string (property="").

            src false true

            The source URL of the image for this input tag.

            srcKey false true

            The key of the message resources string specifying the source URL of the image for this input tag.

            style false true CSS styles to be applied to this HTML element. styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). tabindex false true The tab order (ascending positive integers) for this element. title false true

            The advisory title for this element.

            titleKey false true

            The message resources key for the advisory title for this element.

            value false true

            The value that will be submitted if this image button is pressed.

            img Render an HTML img tag org.apache.struts.taglib.html.ImgTag empty

            Renders an HTML <img> element with the image at the specified URL. Like the link tag, URL rewriting will be applied automatically to the value specified in src, page, or action to maintain session state in the absence of cookies. This will allow dynamic generation of an image where the content displayed for this image will be taken from the attributes of this tag.

            The base URL for this image is calculated directly based on the value specified in src, page, or action or page, or indirectly by looking up a message resource string based on the srcKey or pageKey attributes. You must specify exactly one of these attributes.

            Normally, the src, page, or action that you specify 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 src URL -- specify a single parameter with the paramId attribute (at its associated attributes to select the value), or specify the name (and optional property) attributes to select a java.util.Map bean that contains one or more parameter ids and corresponding values.

            To specify a single parameter, use the paramId attribute to define the name of the request parameter to be submitted. To specify the corresponding value, use one of the following approaches:

            • Specify only the paramName attribute - The named JSP bean (optionally scoped by the value of the paramScope attribute) must identify a value that can be converted to a String.
            • Specify both the paramName and paramProperty attributes - The specified property getter will be called on the JSP bean identified by the paramName (and optional paramScope) attributes, in order to select a value that can be converted to a String.

            If you prefer to specify a java.util.Map that contains all of the request parameters to be added to the hyperlink, use one of the following techniques:

            • Specify only the name attribute - The named JSP bean (optionally scoped by the value of the scope attribute) must identify a java.util.Map containing the parameters.
            • Specify both name and property attributes - The specified property getter method will be called on the bean identified by the name (and optional scope) attributes, in order to return the java.util.Map containing the parameters.

            As the Map is processed, the keys are assumed to be the names of query parameters to be appended to the src URL. The value associated with each key must be either a String or a String array representing the parameter value(s), or an object whose toString() method will be called. If a String array is specified, more than one value for the same query parameter name will be created.

            You can specify the alternate text for this image (which most browsers display as pop-up text block when the user hovers the mouse over this image) either directly, through the alt attribute, or indirectly from a message resources bundle, using the bundle and altKey attributes.

            align false true

            Where the image is aligned to. Can be one of the following attributes:

            • left - left justify, wrapping text on right
            • right -right justify, wrapping test on left
            • top - aligns the image with the top of the text on the same row
            • middle - aligns the image's vertical center with the text base line
            • bottom - aligns the image with the bottom of the text's base line
            • texttop - aligns the image's top with that of the text font on the same line
            • absmiddle - aligns the image's vertical center with the absolute center of the text
            • absbottom - aligns the image with the absolute bottom of the text font on the same row
            alt false true

            And alternative text to be displayed in browsers that don't support graphics. Also used often as type of context help over images.

            altKey false true

            The message resources key of the alternate text for this element.

            border false true

            The width of the border surrounding the image.

            bundle false true

            The servlet context attribute key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet.

            contextRelative false true Use module attribute instead; will be removed in a release afer 1.2.0.

            If set to "true", this "anchors" the image src at the application context rather than the module context when the 'page' attribute is used to specify an image path.

            height false true

            The height of the image being displayed. This parameter is very nice to specify (along with width) to help the browser render the page faster.

            hspace false true

            The amount of horizontal spacing between the icon and the text. The text may be in the same paragraph, or be wrapped around the image.

            imageName false true

            The scriptable name to be defined within this page, so that you can reference it with intra-page scripts. In other words, the value specified here will render a "name" element in the generated image tag.

            ismap false true

            The name of the server-side map that this image belongs to.

            locale false true

            The name of the request or session Locale attribute used to look up internationalized messages.

            lowsrc false true

            An image for people with low resolution graphics cards.

            This attribute is not defined in the HTML 4.01 spec and will be removed in a future version of Struts.
            name false true

            The name of a JSP bean that contains a Map representing the query parameters (if property is not specified), or a JSP bean whose property getter is called to return a Map (if property is specified).

            onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onkeydown false true

            JavaScript event handler that is executed when this element receives a key down event.

            onkeypress false true

            JavaScript event handler that is executed when this element receives a key press event.

            onkeyup false true

            JavaScript event handler that is executed when this element receives a key up event.

            onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. paramId false true

            The name of the request parameter that will be dynamically added to the generated src URL. The corresponding value is defined by the paramName and (optional) paramProperty attributes, optionally scoped by the paramScope attribute

            page false true

            The module-relative path, starting with a slash, of the image to be displayed by this tag. The rendered URL for this image will automatically prepend the context path of this web application (in the same manner as the page attribute on the link tag works), in addition to any necessary URL rewriting. You must specify either the page attribute or the src attribute.

            pageKey false true

            The message key, in the message resources bundle named by the bundle attribute, of the String to be used as the module-relative path for this image.

            action false true

            The action, starting with a slash, that will render the image to be displayed by this tag. The rendered URL for this image will automatically prepend the context path of this web application (in the same manner as the action attribute on the link tag works), in addition to any necessary URL rewriting. You must specify the action, page attribute or the src attribute.

            Additionally, you can specify a module prefix for linking to other modules.

            module false true

            Prefix name of a Module that contains the action mapping for the Action that is specified by the action attribute. You must specify an action attribute for this to have an effect.

            Note: Use "" to map to the default module.

            paramName false true

            The name of a JSP bean that is a String containing the value for the request parameter named by paramId (if paramProperty is not specified), or a JSP bean whose property getter is called to return a String (if paramProperty is specified). The JSP bean is constrained to the bean scope specified by the paramScope property, if it is specified.

            paramProperty false true

            The name of a property of the bean specified by the paramName attribute, whose return value must be a String containing the value of the request parameter (named by the paramId attribute) that will be dynamically added to this src URL.

            paramScope false true

            The scope within which to search for the bean specified by the paramName attribute. If not specified, all scopes are searched.

            property false true

            The name of a property of the bean specified by the name attribute, whose return value must be a java.util.Map containing the query parameters to be added to the src URL. You must specify the name attribute if you specify this attribute.

            scope false true

            The scope within which to search for the bean specified by the name attribute. If not specified, all scopes are searched.

            src false true

            The URL to which this image will be transferred from This image may be dynamically modified by the inclusion of query parameters, as described in the tag description. This value will be used unmodified (other than potential URL rewriting) as the value of the "src" attribute in the rendered tag. You must specify either the page attribute or the src attribute.

            srcKey false true

            The message key, in the message resources bundle named by the bundle attribute, of the String to be used as the URL of this image.

            style false true

            CSS styles to be applied to this element.

            styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). title false true

            The advisory title for this element.

            titleKey false true

            The message resources key for the advisory title for this element.

            useLocalEncoding false true

            If set to true, 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.

            usemap false true

            The name of the map as defined within this page for mapping hot-spot areas of this image.

            vspace false true

            The amount of vertical spacing between the icon and the text, above and below.

            width false true

            The width of the image being displayed. This parameter is very nice to specify (along with height) to help the browser render the page faster.

            javascript Render JavaScript validation based on the validation rules loaded by the ValidatorPlugIn. org.apache.struts.taglib.html.JavascriptValidatorTag empty

            Render JavaScript validation based on the validation rules loaded by the ValidatorPlugIn. The set of validation rules that should be generated is based on the formName attribute passed in, which should match the name attribute of the form element in the xml file.

            The dynamicJavascript and staticJavascript attributes default to true, but if dynamicJavascript is set to true and staticJavascript is set to false then only the dynamic JavaScript will be rendered. If dynamicJavascript is set to false and staticJavascript is set to true then only the static JavaScript will be rendered which can then be put in separate JSP page so the browser can cache the static JavaScript.

            cdata false true

            If set to "true" and XHTML has been enabled, the JavaScript will be wrapped in a CDATA section to prevent XML parsing. The default is "true" to comply with the W3C's recommendation.

            Struts 1.1
            dynamicJavascript false false

            Whether or not to render the dynamic JavaScript. Defaults to true.

            formName false true

            The key (form name) to retrieve a specific set of validation rules. If "dynamicJavascript" is set to true and formName is missing or is not recognized by the ValidatorPlugIn, a JspException will be thrown.

            method false true

            The alternate JavaScript method name to be used instead of the of the default. The default is 'validate' concatenated in front of the key (form name) passed in (ex: validateRegistrationForm).

            page false true

            The current page of a set of validation rules if the page attribute for the field element in the xml file is in use.

            scriptLanguage false true The <script> element will not contain a language attribute when this is set to false. The default is true but this property is ignored in XHTML mode. Struts 1.2 src false true

            The src attribute's value when defining the html script element.

            staticJavascript false false

            Whether or not to render the static JavaScript. Defaults to true.

            htmlComment false true

            Whether or not to enclose the javascript with HTML comments. This attribute is ignored in XHTML mode because the script would be deleted by the XML parser. See the cdata attribute for details on hiding scripts from XML parsers. Defaults to true.

            bundle false true The servlet context attributes key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. Struts 1.2.7
            link Render an HTML anchor or hyperlink org.apache.struts.taglib.html.LinkTag

            Renders an HTML <a> element as an anchor definition (if "linkName" is specified) or as a hyperlink to the specified URL. URL rewriting will be applied automatically, to maintain session state in the absence of cookies. The content displayed for this hyperlink will be taken from the body of this tag.

            The base URL for this hyperlink is calculated based on which of the following attributes you specify (you must specify exactly one of them):

            • forward - Use the value of this attribute as the name of a global ActionForward to be looked up, and use the module-relative or context-relative URI found there. If the forward is module-relative then it must point to an action and NOT to a page.
            • action - Use the value of this attribute as the name of a Action to be looked up, and use the module-relative or context-relative URI found there.
            • href - Use the value of this attribute unchanged.
            • page - Use the value of this attribute as a module-relative URI, and generate a server-relative URI by including the context path and module prefix.

            Normally, the hyperlink 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 paramId attribute (and its associated attributes to select the value), or specify the name (and optional property) attributes to select a java.util.Map bean that contains one or more parameter ids and corresponding values.

            To specify a single parameter, use the paramId attribute to define the name of the request parameter to be submitted. To specify the corresponding value, use one of the following approaches:

            • Specify only the paramName attribute - The named JSP bean (optionally scoped by the value of the paramScope attribute) must identify a value that can be converted to a String.
            • Specify both the paramName and paramProperty attributes - The specified property getter method will be called on the JSP bean identified by the paramName (and optional paramScope) attributes, in order to select a value that can be converted to a String.

            If you prefer to specify a java.util.Map that contains all of the request parameters to be added to the hyperlink, use one of the following techniques:

            • Specify only the name attribute - The named JSP bean (optionally scoped by the value of the scope attribute) must identify a java.util.Map containing the parameters.
            • Specify both name and property attributes - The specified property getter method will be called on the bean identified by the name (and optional scope) attributes, in order to return the java.util.Map containing the parameters.

            As the Map 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), or an object whose toString() method will be called. If a String array is specified, more than one value for the same query parameter name will be created.

            Additionally, you can request that the current transaction control token, if any, be included in the generated hyperlink by setting the transaction attribute to true. You can also request that an anchor ("#xxx") be added to the end of the URL that is created by any of the above mechanisms, by using the anchor attribute.

            accesskey false true

            The keyboard character used to move focus immediately to this element.

            action false true

            Logical name of a Action 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 must specify exactly one of the action attribute, the forward attribute, the href attribute, the linkName attribute, or the page attribute.

            Additionally, you can specify a module prefix for linking to other modules.

            module false true

            Prefix name of a Module that contains the action mapping for the Action that is specified by the action attribute. You must specify an action attribute for this to have an effect.

            Note: Use "" to map to the default module.

            anchor false true

            Optional anchor tag ("#xxx") to be added to the generated hyperlink. Specify this value without any "#" character.

            forward false true

            Logical name of a global ActionForward 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 must specify exactly one of the action attribute, the forward attribute, the href attribute, the linkName attribute, or the page attribute.

            href false true

            The URL 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 must specify exactly one of the action attribute, the forward attribute, the href attribute, the linkName attribute, or the page attribute.

            indexed false true Valid only inside of logic:iterate tag. If true then indexed parameter with name from indexId attribute will be added to the query string. Indexed parameter looks like "index[32]". Number in brackets will be generated for every iteration and taken from ancestor logic:iterate tag. indexId false true By this attribute different name for the indexed parameter can be specified. Take a look to the "indexed" attribute for details. bundle false true The servlet context attributes key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. Struts 1.2.5 linkName false true

            The anchor name to be defined within this page, so that you can reference it with intra-page hyperlinks. In other words, the value specified here will render a "name" element in the generated anchor tag.

            name false true

            The name of a JSP bean that contains a Map representing the query parameters (if property is not specified), or a JSP bean whose property getter is called to return a Map (if property is specified).

            onblur false true

            JavaScript event handler that is executed when this element loses input focus.

            onclick false true

            JavaScript event handler that is executed when this element receives a mouse click.

            ondblclick false true

            JavaScript event handler that is executed when this element receives a mouse double click.

            onfocus false true

            JavaScript event handler that is executed when this element receives input focus.

            onkeydown false true

            JavaScript event handler that is executed when this element receives a key down event.

            onkeypress false true

            JavaScript event handler that is executed when this element receives a key press event.

            onkeyup false true

            JavaScript event handler that is executed when this element receives a key up event.

            onmousedown false true

            JavaScript event handler that is executed when this element receives a mouse down event.

            onmousemove false true

            JavaScript event handler that is executed when this element receives a mouse move event.

            onmouseout false true

            JavaScript event handler that is executed when this element receives a mouse out event.

            onmouseover false true

            JavaScript event handler that is executed when this element receives a mouse over event.

            onmouseup false true

            JavaScript event handler that is executed when this element receives a mouse up event.

            page false true

            The module-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 must specify exactly one of the action attribute, forward attribute, the href attribute, the linkName attribute, or the page attribute.

            paramId false true

            The name of the request parameter that will be dynamically added to the generated hyperlink. The corresponding value is defined by the paramName and (optional) paramProperty attributes, optionally scoped by the paramScope attribute

            paramName false true

            The name of a JSP bean that is a String containing the value for the request parameter named by paramId (if paramProperty is not specified), or a JSP bean whose property getter is called to return a String (if paramProperty is specified). The JSP bean is constrained to the bean scope specified by the paramScope property, if it is specified.

            paramProperty false true

            The name of a property of the bean specified by the paramName attribute, whose return value must be a String containing the value of the request parameter (named by the paramId attribute) that will be dynamically added to this hyperlink.

            paramScope false true

            The scope within which to search for the bean specified by the paramName attribute. If not specified, all scopes are searched.

            property false true

            The name of a property of the bean specified by the name attribute, whose return value must be a java.util.Map containing the query parameters to be added to the hyperlink. You must specify the name attribute if you specify this attribute.

            scope false true

            The scope within which to search for the bean specified by the name attribute. If not specified, all scopes are searched.

            style false true

            CSS styles to be applied to this element.

            styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). tabindex false true

            The tab order (ascending positive integers) for this element.

            target false true

            The window target in which the resource requested by this hyperlink will be displayed, for example in a framed presentation.

            title false true

            The advisory title for this hyperlink.

            titleKey false true

            The message resources key for the advisory title for this element.

            transaction false true

            If set to true, any current transaction control token will be included in the generated hyperlink, so that it will pass an isTokenValid() test in the receiving Action.

            useLocalEncoding false true

            If set to true, 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.

            messages Conditionally display a set of accumulated messages. org.apache.struts.taglib.html.MessagesTag org.apache.struts.taglib.html.MessagesTei JSP

            Displays a set of messages prepared by a business logic component and stored as an ActionMessages object, ActionErrors object, a String, or a String array in any scope. If such a bean is not found, nothing will be rendered.

            In order to use this tag successfully, you must have defined an application scope MessageResources bean under the default attribute name.

            id true false The name of a page scope JSP bean that will contain the current element of the collection of messages on each iteration, if it is not null. bundle false true The servlet context attribute key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. locale false true The session attribute key for the Locale used to select messages to be displayed. If not specified, defaults to the Struts standard value. name false true Name of the bean in any scope under which our messages have been stored. If not present, the name specified by the Globals.ERROR_KEY constant string will be used. property false true Name of the property for which messages should be displayed. If not specified, all messages (regardless of property) are displayed. header false true This value is an optional message resource key that will be printed before the iteration of messages begins. footer false true This value is an optional message resource key that will be printed after the iteration of messages has finished. message false true By default the tag will retrieve the bean it will iterate over from the Globals.ERROR_KEY constant string, but if this attribute is set to 'true' the bean will be retrieved from the Globals.MESSAGE_KEY constant string. Also if this is set to 'true', any value assigned to the name attribute will be ignored.
            multibox Render A Checkbox Input Field org.apache.struts.taglib.html.MultiboxTag

            Renders an HTML <input> element of type checkbox, whose "checked" status is initialized based on whether the specified value matches one of the elements of the underlying property's array of current values. This element is useful when you have large numbers of checkboxes, and prefer to combine the values into a single array-valued property instead of multiple boolean properties. This tag is only valid when nested inside a form tag body.

            WARNING: In order to correctly recognize cases where none of the associated checkboxes are selected, the ActionForm bean associated with this form must include a statement setting the corresponding array to zero length in the reset() method.

            The value to be returned to the server, if this checkbox is selected, must be defined by one of the following methods:

            • Specify a value attribute, whose contents will be used literally as the value to be returned.
            • Specify no value attribute, and the nested body content of this tag will be used as the value to be returned.
            accesskey false true The keyboard character used to move focus immediately to this element. alt false true

            The alternate text for this element.

            altKey false true

            The message resources key of the alternate text for this element.

            bundle false true The servlet context attributes key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. Struts 1.2.5 disabled false true Set to true if this input field should be disabled. errorKey false true

            Name of the request scope bean under which our error messages have been stored. If not present, the name specified by the Globals.ERROR_KEY constant string will be used.

            N.B. This is used in conjunction with the errorStyle, errorStyleClass and errorStyleId attributes and should be set to the same value as the name attribute on the <html:errors/> tag.

            Struts 1.2.5
            errorStyle false true

            CSS styles to be applied to this HTML element if an error exists for it.

            N.B. If present, this overrides the style attribute in the event of an error.

            Struts 1.2.5
            errorStyleClass false true

            CSS stylesheet class to be applied to this HTML element if an error exists for it (renders a "class" attribute).

            N.B. If present, this overrides the styleClass attribute in the event of an error.

            Struts 1.2.5
            errorStyleId false true

            Identifier to be assigned to this HTML element if an error exists for it (renders an "id" attribute).

            N.B. If present, this overrides the styleId attribute in the event of an error.

            Struts 1.2.5
            name false true The attribute name of the bean whose properties are consulted when rendering the current value of this input field. If not specified, the bean associated with the form tag we are nested within is utilized. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. property true true Name of the request parameter that will be included with this submission, set to the specified value. style false true

            CSS styles to be applied to this HTML element.

            N.B. If present, the errorStyle overrides this attribute in the event of an error for the element.

            styleClass false true

            CSS stylesheet class to be applied to this HTML element (renders a "class" attribute).

            N.B. If present, the errorStyleClass overrides this attribute in the event of an error for the element.

            styleId false true

            Identifier to be assigned to this HTML element (renders an "id" attribute).

            N.B. If present, the errorStyleId overrides this attribute in the event of an error for the element.

            tabindex false true The tab order (ascending positive integers) for this element. title false true

            The advisory title for this element.

            titleKey false true

            The message resources key for the advisory title for this element.

            value false true The value to be transmitted if this checkbox is checked when the form is submitted.
            option Render A Select Option org.apache.struts.taglib.html.OptionTag

            Render an HTML <option> element, representing one of the choices for an enclosing <select> element. The text displayed to the user comes from either the body of this tag, or from a message string looked up based on the bundle, locale, and key attributes.

            If the value of the corresponding bean property matches the specified value, this option will be marked selected. This tag is only valid when nested inside a <html:select> tag body.

            bundle false true The servlet context attributes key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. disabled false true Set to true if this option should be disabled. key false true If specified, defines the message key to be looked up in the resource bundle specified by bundle for the text displayed to the user for this option. If not specified, the text to be displayed is taken from the body content of this tag. locale false true The session attributes key for the Locale instance to use for looking up the message specified by the key attribute. If not specified, uses the standard Struts session attribute name. style false true CSS styles to be applied to this HTML element. styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). value true true Value to be submitted for this field if this option is selected by the user.
            options Render a Collection of Select Options org.apache.struts.taglib.html.OptionsTag empty

            Renders a set of HTML <option> elements, representing possible choices for a <select> element. This tag can be used multiple times within a single <html:select> element, either in conjunction with or instead of one or more <html:option> or <html:optionsCollection> elements.

            This tag operates in one of two major modes, depending on whether or not the collection attribute is specified. If the collection attribute is included, the following rules apply:

            • The collection attribute is interpreted as the name of a JSP bean, in some scope, that itself represents a collection of individual beans, one per option value to be rendered.
            • The property attribute is interpreted as the name of a property of the individual beans included in the collection, and is used to retrieve the value that will be returned to the server if this option is selected.
            • The labelProperty attribute is interpreted as the name of a property of the individual beans included in the collection, and is used to retrieve the label that will be displayed to the user for this option. If the labelProperty attribute is not specified, the property named by the property attribute will be used to select both the value returned to the server and the label displayed to the user for this option.

            If the collection attribute is not specified, the rules described in the remainder of this section apply.

            The collection of values actually selected depends on the presence or absence of the name and property attributes. The following combinations are allowed:

            • Only name is specified - The value of this attribute is the name of a JSP bean in some scope that is the collection.
            • Only property is specified - The value of this attribute is the name of a property of the ActionForm bean associated with our form, which will return the collection.
            • Both name and property are specified - The value of the name attribute identifies a JSP bean in some scope. The value of the property attribute is the name of some property of that bean which will return the collection.

            The collection of labels displayed to the user can be the same as the option values themselves, or can be different, depending on the presence or absence of the labelName and labelProperty attributes. If this feature is used, the collection of labels must contain the same number of elements as the corresponding collection of values. The following combinations are allowed:

            • Neither labelName nor labelProperty is specified - The labels will be the same as the option values themselves.
            • Only labelName is specified - The value of this attribute is the name of a JSP bean in some scope that is the collection.
            • Only labelProperty is specified - The value of this attribute is the name of a property of the ActionForm bean associated with our form, which will return the collection.
            • Both labelName and labelProperty are specified - The value of the labelName attribute identifies a JSP bean in some scope. The value of the labelProperty attribute is the name of some property of that bean which will return the collection.

            Note that this tag does not support a styleId attribute, as it would have to apply the value to all the option elements created by this element, which would mean that more than one id element might have the same value, which the HTML specification says is illegal.

            collection false true Name of the JSP bean (in some scope) which is itself a Collection of other beans, each of which has properties named by the "property" and "labelProperty" attributes that are used to retrieve the value and label for each option, respectively. filter false true Set to false if you do NOT want the option labels filtered for sensitive characters in HTML. By default, such values are filtered. labelName false true Name of the JSP bean (in some scope) containing the collection of labels to be displayed to the user for these options. labelProperty false true Property of the form bean, or the bean specified by the labelName attribute, that will return the collection of labels to be displayed to the user for these options. name false true Name of the JSP bean (in some scope) containing the collection of values to be returned to the server for these options. If not specified, the form bean associated with our form is assumed. property false true Property of the form bean, or the bean specified by the name attribute, that will return the collection of values to returned to the server for these options. style false true CSS styles to be applied to this HTML element. styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute).
            optionsCollection Render a Collection of Select Options org.apache.struts.taglib.html.OptionsCollectionTag empty

            Renders a set of HTML <option> elements, representing possible choices for a <select> element. This tag can be used multiple times within a single <html:select> element, either in conjunction with or instead of one or more <html:option> or <html:options> elements.

            This tag operates on a collection of beans, where each bean has a label property and a value property. The actual names of these properties can be configured using the label and value attributes of this tag.

            This tag differs from the <html:options> tag in that it makes more consistent use of the name and property attributes, and allows the collection to be more easily obtained from the enclosing form bean.

            Note that this tag does not support a styleId attribute, as it would have to apply the value to all the option elements created by this element, which would mean that more than one id element might have the same value, which the HTML specification says is illegal.

            filter false true Set to false if you do NOT want the option labels filtered for sensitive characters in HTML. By default, such values are filtered. label false true The property of the bean within the collection which represents the label to be rendered for each option. Defaults to "label". name false true The attribute name of the bean whose properties are consulted when rendering the current value of this input field. If not specified, the bean associated with the form tag we are nested within is utilized. property false true The property of the form bean, or the bean specified by the name attribute, that will return the collection of objects to be rendered for these options. style false true CSS styles to be applied to this HTML element. styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). value false true The property of the bean within the collection which represents the value to be rendered for each option. Defaults to "value".
            password Render A Password Input Field org.apache.struts.taglib.html.PasswordTag Renders an HTML <input> element of type password, populated from the specified value or the specified property of the bean associated with our current form. This tag is only valid when nested inside a form tag body. accesskey false true The keyboard character used to move focus immediately to this element. alt false true

            The alternate text for this element.

            altKey false true

            The message resources key of the alternate text for this element.

            bundle false true The servlet context attributes key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. Struts 1.2.5 disabled false true Set to true if this input field should be disabled. errorKey false true

            Name of the request scope bean under which our error messages have been stored. If not present, the name specified by the Globals.ERROR_KEY constant string will be used.

            N.B. This is used in conjunction with the errorStyle, errorStyleClass and errorStyleId attributes and should be set to the same value as the name attribute on the <html:errors/> tag.

            Struts 1.2.5
            errorStyle false true

            CSS styles to be applied to this HTML element if an error exists for it.

            N.B. If present, this overrides the style attribute in the event of an error.

            Struts 1.2.5
            errorStyleClass false true

            CSS stylesheet class to be applied to this HTML element if an error exists for it (renders a "class" attribute).

            N.B. If present, this overrides the styleClass attribute in the event of an error.

            Struts 1.2.5
            errorStyleId false true

            Identifier to be assigned to this HTML element if an error exists for it (renders an "id" attribute).

            N.B. If present, this overrides the styleId attribute in the event of an error.

            Struts 1.2.5
            indexed false true Valid only inside of logic:iterate tag. If true then name of the html tag will be rendered as "id[34].propertyName". Number in brackets will be generated for every iteration and taken from ancestor logic:iterate tag. maxlength false true Maximum number of input characters to accept. [No limit] name false true The attribute name of the bean whose properties are consulted when rendering the current value of this input field. If not specified, the bean associated with the form tag we are nested within is utilized. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. property true true Name of the request parameter that will be included with this submission, set to the specified value. readonly false true Set to true if this input field should be read only. redisplay false true Boolean flag indicating whether or not existing values will be redisplayed if they exist. Even though the redisplayed value will be shown as asterisks on the visible HTML page, the cleartext of the actual password value will be visible though the "Show Page Source" menu option of the client browser. You may wish to set this value to false on login pages. Defaults to true for consistency with all other form tags that redisplay their contents. style false true

            CSS styles to be applied to this HTML element.

            N.B. If present, the errorStyle overrides this attribute in the event of an error for the element.

            styleClass false true

            CSS stylesheet class to be applied to this HTML element (renders a "class" attribute).

            N.B. If present, the errorStyleClass overrides this attribute in the event of an error for the element.

            styleId false true

            Identifier to be assigned to this HTML element (renders an "id" attribute).

            N.B. If present, the errorStyleId overrides this attribute in the event of an error for the element.

            size false true Number of character positions to allocate. [Browser default] tabindex false true The tab order (ascending positive integers) for this element. title false true

            The advisory title for this element.

            titleKey false true

            The message resources key for the advisory title for this element.

            value false true Value of the label to be placed on this button. This value will also be submitted as the value of the specified request parameter. [Body of this tag (if any)]
            radio Render A Radio Button Input Field org.apache.struts.taglib.html.RadioTag

            Renders an HTML <input> element of type radio, populated from the specified property of the bean associated with our current form. This tag is only valid when nested inside a form tag body.

            If an iterator is used to render a series of radio tags, the idName attribute may be used to specify the name of the bean exposed by the iterator. In this case, the value attribute is used as the name of a property on the idName bean that returns the value of the radio tag in this iteration.

            accesskey false true The keyboard character used to move focus immediately to this element. alt false true

            The alternate text for this element.

            altKey false true

            The message resources key of the alternate text for this element.

            bundle false true The servlet context attributes key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. Struts 1.2.5 disabled false true Set to true if this input field should be disabled. errorKey false true

            Name of the request scope bean under which our error messages have been stored. If not present, the name specified by the Globals.ERROR_KEY constant string will be used.

            N.B. This is used in conjunction with the errorStyle, errorStyleClass and errorStyleId attributes and should be set to the same value as the name attribute on the <html:errors/> tag.

            Struts 1.2.5
            errorStyle false true

            CSS styles to be applied to this HTML element if an error exists for it.

            N.B. If present, this overrides the style attribute in the event of an error.

            Struts 1.2.5
            errorStyleClass false true

            CSS stylesheet class to be applied to this HTML element if an error exists for it (renders a "class" attribute).

            N.B. If present, this overrides the styleClass attribute in the event of an error.

            Struts 1.2.5
            errorStyleId false true

            Identifier to be assigned to this HTML element if an error exists for it (renders an "id" attribute).

            N.B. If present, this overrides the styleId attribute in the event of an error.

            Struts 1.2.5
            indexed false true Valid only inside of logic:iterate tag. If true then name of the html tag will be rendered as "id[34].propertyName". Number in brackets will be generated for every iteration and taken from ancestor logic:iterate tag. name false true The attribute name of the bean whose properties are consulted when rendering the current value of this input field. If not specified, the bean associated with the form tag we are nested within is utilized. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. property true true The corresponding bean property for this radio tag. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. style false true

            CSS styles to be applied to this HTML element.

            N.B. If present, the errorStyle overrides this attribute in the event of an error for the element.

            styleClass false true

            CSS stylesheet class to be applied to this HTML element (renders a "class" attribute).

            N.B. If present, the errorStyleClass overrides this attribute in the event of an error for the element.

            styleId false true

            Identifier to be assigned to this HTML element (renders an "id" attribute).

            N.B. If present, the errorStyleId overrides this attribute in the event of an error for the element.

            tabindex false true The tab order (ascending positive integers) for this element. title false true

            The advisory title for this element.

            titleKey false true

            The message resources key for the advisory title for this element.

            value true true The value of the radio tag. idName false true

            Name of the bean (in some scope) that will return the value of the radio tag. Usually exposed by an iterator. When the idName attribute is present, the value attribute is used as the name of the property on the idName bean that will return the value of the radio tag for this iteration.

            Struts 1.1
            reset Render A Reset Button Input Field org.apache.struts.taglib.html.ResetTag Renders an HTML <input> element of type reset. accesskey false true The keyboard character used to move focus immediately to this element. alt false true

            The alternate text for this element.

            altKey false true

            The message resources key of the alternate text for this element.

            bundle false true The servlet context attributes key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. Struts 1.2.5 disabled false true Set to true if this input field should be disabled. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. property false true Name of the input field that will be generated. style false true CSS styles to be applied to this HTML element. styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). tabindex false true The tab order (ascending positive integers) for this element. title false true

            The advisory title for this element.

            titleKey false true

            The message resources key for the advisory title for this element.

            value false true Value of the label to be placed on this button. [Body of this tag (if any), or "Reset"]
            rewrite Render an URI org.apache.struts.taglib.html.RewriteTag empty

            Renders a request URI based on exactly the same rules as the link tag does, but without creating the <a> hyperlink. This value is useful when you want to generate a string constant for use by a JavaScript procedure.

            action false true

            Logical name of a Action 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 must specify exactly one of the action attribute, the forward attribute, the href attribute, or the page attribute.

            Additionally, you can specify a module prefix for linking to other modules.

            Struts 1.2.0
            module false true

            Prefix name of a Module that contains the action mapping for the Action that is specified by the action attribute. You must specify an action attribute for this to have an effect.

            Note: Use "" to map to the default module.

            anchor false true

            Optional anchor tag ("#xxx") to be added to the generated hyperlink. Specify this value without any "#" character.

            forward false true

            Logical name of a global ActionForward 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 must specify exactly one of the action attribute, the forward attribute, the href attribute, or the page attribute.

            href false true

            The URL 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 must specify exactly one of the action attribute, the forward attribute, the href attribute, or the page attribute.

            name false true

            The name of a JSP bean that contains a Map representing the query parameters (if property is not specified), or a JSP bean whose property getter is called to return a Map (if property is specified).

            page false true

            The module-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 must specify exactly one of the action attribute, the forward attribute, the href attribute, or the page attribute.

            paramId false true

            The name of the request parameter that will be dynamically added to the generated hyperlink. The corresponding value is defined by the paramName and (optional) paramProperty attributes, optionally scoped by the paramScope attribute

            paramName false true

            The name of a JSP bean that is a String containing the value for the request parameter named by paramId (if paramProperty is not specified), or a JSP bean whose property getter is called to return a String (if paramProperty is specified). The JSP bean is constrained to the bean scope specified by the paramScope property, if it is specified.

            paramProperty false true

            The name of a property of the bean specified by the paramName attribute, whose return value must be a String containing the value of the request parameter (named by the paramId attribute) that will be dynamically added to this hyperlink.

            paramScope false true

            The scope within which to search for the bean specified by the paramName attribute. If not specified, all scopes are searched.

            property false true

            The name of a property of the bean specified by the name attribute, whose return value must be a java.util.Map containing the query parameters to be added to the hyperlink. You must specify the name attribute if you specify this attribute.

            scope false true

            The scope within which to search for the bean specified by the name attribute. If not specified, all scopes are searched.

            transaction false true

            If set to true, any current transaction control token will be included in the generated hyperlink, so that it will pass an isTokenValid() test in the receiving Action.

            useLocalEncoding false true

            If set to true, 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.

            select Render A Select Element org.apache.struts.taglib.html.SelectTag JSP

            Renders an HTML <select> element, associated with a bean property specified by our attributes. This tag is only valid when nested inside a form tag body.

            This tag operates in two modes, depending upon the state of the multiple attribute, which affects the data type of the associated property you should use:

            • multiple="true" IS NOT selected - The corresponding property should be a scalar value of any supported data type.
            • multiple="true" IS selected - The corresponding property should be an array of any supported data type.

            WARNING: In order to correctly recognize cases where no selection at all is made, the ActionForm bean associated with this form must include a statement resetting the scalar property to a default value (if multiple is not set), or the array property to zero length (if multiple is set) in the reset() method.

            alt false true

            The alternate text for this element.

            altKey false true

            The message resources key of the alternate text for this element.

            bundle false true The servlet context attributes key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. Struts 1.2.5 disabled false true Set to true if this input field should be disabled. errorKey false true

            Name of the request scope bean under which our error messages have been stored. If not present, the name specified by the Globals.ERROR_KEY constant string will be used.

            N.B. This is used in conjunction with the errorStyle, errorStyleClass and errorStyleId attributes and should be set to the same value as the name attribute on the <html:errors/> tag.

            Struts 1.2.5
            errorStyle false true

            CSS styles to be applied to this HTML element if an error exists for it.

            N.B. If present, this overrides the style attribute in the event of an error.

            Struts 1.2.5
            errorStyleClass false true

            CSS stylesheet class to be applied to this HTML element if an error exists for it (renders a "class" attribute).

            N.B. If present, this overrides the styleClass attribute in the event of an error.

            Struts 1.2.5
            errorStyleId false true

            Identifier to be assigned to this HTML element if an error exists for it (renders an "id" attribute).

            N.B. If present, this overrides the styleId attribute in the event of an error.

            Struts 1.2.5
            indexed false true Valid only inside of logic:iterate tag. If true then name of the html tag will be rendered as "id[34].propertyName". Number in brackets will be generated for every iteration and taken from ancestor logic:iterate tag. multiple false true If set to any arbitrary value, the rendered select element will support multiple selections. name false true The attribute name of the bean whose properties are consulted to determine which option should be pre-selected when rendering this input field. If not specified, the bean associated with the enclosing <html:form> tag is utilized. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. property true true Name of the request parameter that will be included with this submission, set to the specified value. style false true

            CSS styles to be applied to this HTML element.

            N.B. If present, the errorStyle overrides this attribute in the event of an error for the element.

            styleClass false true

            CSS stylesheet class to be applied to this HTML element (renders a "class" attribute).

            N.B. If present, the errorStyleClass overrides this attribute in the event of an error for the element.

            styleId false true

            Identifier to be assigned to this HTML element (renders an "id" attribute).

            N.B. If present, the errorStyleId overrides this attribute in the event of an error for the element.

            tabindex false true The tab order (ascending positive integers) for this element. size false true The number of available options displayed at one time. title false true

            The advisory title for this element.

            titleKey false true

            The message resources key for the advisory title for this element.

            value false true The value to compare with for marking an option selected.
            submit Render A Submit Button org.apache.struts.taglib.html.SubmitTag Renders an HTML <input> element of type submit.

            If a graphical button is needed (a button with an image), then the image tag is more appropriate.

            accesskey false true The keyboard character used to move focus immediately to this element. alt false true

            The alternate text for this element.

            altKey false true

            The message resources key of the alternate text for this element.

            bundle false true The servlet context attributes key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. Struts 1.2.5 disabled false true Set to true if this input field should be disabled. indexed false true Valid only inside of logic:iterate tag. If true then name of the html tag will be rendered as "propertyName[34]". Number in brackets will be generated for every iteration and taken from ancestor logic:iterate tag. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. property false true Name of the request parameter that will be included with this submission, set to the specified value. style false true CSS styles to be applied to this HTML element. styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). tabindex false true The tab order (ascending positive integers) for this element. title false true

            The advisory title for this element.

            titleKey false true

            The message resources key for the advisory title for this element.

            value false true The value of the button label.
            text Render An Input Field of Type text org.apache.struts.taglib.html.TextTag Render an input button of type text. This tag is only valid when nested inside a form tag body. accesskey false true The keyboard character used to move focus immediately to this element. alt false true

            The alternate text for this element.

            altKey false true

            The message resources key of the alternate text for this element.

            bundle false true The servlet context attributes key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. Struts 1.2.5 disabled false true Set to true if this input field should be disabled. errorKey false true

            Name of the request scope bean under which our error messages have been stored. If not present, the name specified by the Globals.ERROR_KEY constant string will be used.

            N.B. This is used in conjunction with the errorStyle, errorStyleClass and errorStyleId attributes and should be set to the same value as the name attribute on the <html:errors/> tag.

            Struts 1.2.5
            errorStyle false true

            CSS styles to be applied to this HTML element if an error exists for it.

            N.B. If present, this overrides the style attribute in the event of an error.

            Struts 1.2.5
            errorStyleClass false true

            CSS stylesheet class to be applied to this HTML element if an error exists for it (renders a "class" attribute).

            N.B. If present, this overrides the styleClass attribute in the event of an error.

            Struts 1.2.5
            errorStyleId false true

            Identifier to be assigned to this HTML element if an error exists for it (renders an "id" attribute).

            N.B. If present, this overrides the styleId attribute in the event of an error.

            Struts 1.2.5
            indexed false true Valid only inside of logic:iterate tag. If true then name of the html tag will be rendered as "id[34].propertyName". Number in brackets will be generated for every iteration and taken from ancestor logic:iterate tag. maxlength false true Maximum number of input characters to accept. [No limit] name false true The attribute name of the bean whose properties are consulted when rendering the current value of this input field. If not specified, the bean associated with the form tag we are nested within is utilized. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. property true true Name of this input field, and the name of the corresponding bean property if value is not specified. The corresponding bean property (if any) must be of type String. readonly false true Set to true if this input field should be read only. size false true Number of character positions to allocate. [Browser default] style false true

            CSS styles to be applied to this HTML element.

            N.B. If present, the errorStyle overrides this attribute in the event of an error for the element.

            styleClass false true

            CSS stylesheet class to be applied to this HTML element (renders a "class" attribute).

            N.B. If present, the errorStyleClass overrides this attribute in the event of an error for the element.

            styleId false true

            Identifier to be assigned to this HTML element (renders an "id" attribute).

            N.B. If present, the errorStyleId overrides this attribute in the event of an error for the element.

            tabindex false true The tab order (ascending positive integers) for this element. title false true

            The advisory title for this element.

            titleKey false true

            The message resources key for the advisory title for this element.

            value false true Value to which this field should be initialized. [Use the corresponding bean property value]
            textarea Render A Textarea org.apache.struts.taglib.html.TextareaTag Render a textarea element. This tag is only valid when nested inside a form tag body. accesskey false true The keyboard character used to move focus immediately to this element. alt false true

            The alternate text for this element.

            altKey false true

            The message resources key of the alternate text for this element.

            bundle false true The servlet context attributes key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. Struts 1.2.5 cols false true The number of columns to display. disabled false true Set to true if this input field should be disabled. errorKey false true

            Name of the request scope bean under which our error messages have been stored. If not present, the name specified by the Globals.ERROR_KEY constant string will be used.

            N.B. This is used in conjunction with the errorStyle, errorStyleClass and errorStyleId attributes and should be set to the same value as the name attribute on the <html:errors/> tag.

            Struts 1.2.5
            errorStyle false true

            CSS styles to be applied to this HTML element if an error exists for it.

            N.B. If present, this overrides the style attribute in the event of an error.

            Struts 1.2.5
            errorStyleClass false true

            CSS stylesheet class to be applied to this HTML element if an error exists for it (renders a "class" attribute).

            N.B. If present, this overrides the styleClass attribute in the event of an error.

            Struts 1.2.5
            errorStyleId false true

            Identifier to be assigned to this HTML element if an error exists for it (renders an "id" attribute).

            N.B. If present, this overrides the styleId attribute in the event of an error.

            Struts 1.2.5
            indexed false true Valid only inside of logic:iterate tag. If true then name of the html tag will be rendered as "id[34].propertyName". Number in brackets will be generated for every iteration and taken from ancestor logic:iterate tag. name false true The attribute name of the bean whose properties are consulted when rendering the current value of this input field. If not specified, the bean associated with the form tag we are nested within is utilized. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. property true true Name of this input field, and the name of the corresponding bean property if value is not specified. The corresponding bean property (if any) must be of type String. readonly false true Set to true if this input field should be read only. rows false true The number of rows to display. style false true

            CSS styles to be applied to this HTML element.

            N.B. If present, the errorStyle overrides this attribute in the event of an error for the element.

            styleClass false true

            CSS stylesheet class to be applied to this HTML element (renders a "class" attribute).

            N.B. If present, the errorStyleClass overrides this attribute in the event of an error for the element.

            styleId false true

            Identifier to be assigned to this HTML element (renders an "id" attribute).

            N.B. If present, the errorStyleId overrides this attribute in the event of an error for the element.

            tabindex false true The tab order (ascending positive integers) for this element. title false true

            The advisory title for this element.

            titleKey false true

            The message resources key for the advisory title for this element.

            value false true Value to which this field should be initialized. [Use the corresponding bean property value]
            xhtml Render HTML tags as XHTML org.apache.struts.taglib.html.XhtmlTag empty

            Using this tag in a page tells all other html taglib tags to render themselves as XHTML 1.0. This is useful when composing pages with JSP includes or Tiles. <html:html xhtml="true"> has a similar effect. This tag has no attributes; you use it like this: <html:xhtml/>.

            Note: Included pages do not inherit the rendering style of the including page. Each JSP fragment or Tile must use this tag to render as XHTML.

            libstruts1.2-java-1.2.9/doc/userGuide/struts-logic.xml0000644000175000017500000017476110404045246023365 0ustar arnaudarnaud00000000000000 Craig R. McClanahan The Struts Framework Project - Logic Tags 1.2 1.1 logic Struts Logic Tags http://struts.apache.org/tags-logic

            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.

            For tags that do value comparisons (equal, greaterEqual, greaterThan, lessEqual, lessThan, notEqual), the following rules apply:

            • The specified value is examined. If it can be converted successfully to a double or a long, it is assumed that the ultimate comparison will be numeric (either floating point or integer). Otherwise, a String comparison will be performed.
            • The variable to be compared to is retrieved, based on the selector attribute(s) (cookie, header, name, parameter, property) present on this tag. It will be converted to the appropriate type for the comparison, as determined above.
            • If the specified variable or property returns null, it will be coerced to a zero-length string before the comparison occurs.
            • 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 true result.

            For tags that do substring matching (match, notMatch), the following rules apply:

            • The specified variable is retrieved, based on the selector attribute(s) (cookie, header, name, parameter, property) present on this tag. The variable is converted to a String, if necessary.
            • A request time exception will be thrown if the specified variable cannot be retrieved, or has a null value.
            • The specified value is checked for existence as a substring of the variable, in the position specified by the location attribute, as follows: at the beginning (if location is set to start), at the end (if location is set to end), or anywhere (if location is not specified).

            Many of the tags in this tag library will throw a JspException 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 <%@ page %> 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 org.apache.struts.action.EXCEPTION.

            empty Evaluate the nested body content of this tag if the requested variable is either null or an empty string. org.apache.struts.taglib.logic.EmptyTag JSP Struts 1.1

            This tag evaluates its nested body content only if the specified value is either absent (i.e. null), an empty string (i.e. a java.lang.String with a length of zero), or an empty java.util.Collection or java.util.Map (tested by the .isEmpty() method on the respective interface).

            JSTL: The equivalent JSTL tag is <c:if> using the empty operator. For example,
            <c:if test="${empty sessionScope.myBean.myProperty}"> do something </c:if>

            name false true

            The variable to be compared is the JSP bean specified by this attribute, if property is not specified, or the value of the specified property of this bean, if property is specified.

            property false true

            The variable to be compared is the property (of the bean specified by the name attribute) specified by this attribute. The property reference can be simple, nested, and/or indexed.

            scope false true

            The bean scope within which to search for the bean named by the name property, or "any scope" if not specified.

            equal Evaluate the nested body content of this tag if the requested variable is equal to the specified value. org.apache.struts.taglib.logic.EqualTag JSP

            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 equal.

            cookie false true

            The variable to be compared is the value of the cookie whose name is specified by this attribute.

            header false true

            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.

            name false true

            The variable to be compared is the JSP bean specified by this attribute, if property is not specified, or the value of the specified property of this bean, if property is specified.

            parameter false true

            The variable to be compared is the first, or only, value of the request parameter specified by this attribute.

            property false true

            The variable to be compared is the property (of the bean specified by the name attribute) specified by this attribute. The property reference can be simple, nested, and/or indexed.

            scope false true

            The bean scope within which to search for the bean named by the name property, or "any scope" if not specified.

            value true true

            The constant value to which the variable, specified by other attribute(s) of this tag, will be compared.

            forward Forward control to the page specified by the specified ActionForward entry. org.apache.struts.taglib.logic.ForwardTag empty

            Performs a PageContext.forward() or HttpServletResponse.sendRedirect() call for the global ActionForward entry for the specified name. URL rewriting will occur automatically if a redirect is performed.

            name true true

            The logical name of the global ActionForward entry that identifies the destination, and forwarding approach, to be used. Note: forwarding to Tiles definitions is not supported from this tag. You should forward to them from an Action subclass.

            greaterEqual Evaluate the nested body content of this tag if the requested variable is greater than or equal to the specified value. org.apache.struts.taglib.logic.GreaterEqualTag JSP

            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 greater than or equal to the value.

            cookie false true

            The variable to be compared is the value of the cookie whose name is specified by this attribute.

            header false true

            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.

            name false true

            The variable to be compared is the JSP bean specified by this attribute, if property is not specified, or the value of the specified property of this bean, if property is specified.

            parameter false true

            The variable to be compared is the first, or only, value of the request parameter specified by this attribute.

            property false true

            The variable to be compared is the property (of the bean specified by the name attribute) specified by this attribute. The property reference can be simple, nested, and/or indexed.

            scope false true

            The bean scope within which to search for the bean named by the name property, or "any scope" if not specified.

            value true true

            The constant value to which the variable, specified by other attribute(s) of this tag, will be compared.

            greaterThan Evaluate the nested body content of this tag if the requested variable is greater than the specified value. org.apache.struts.taglib.logic.GreaterThanTag JSP

            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 greater than the value.

            cookie false true

            The variable to be compared is the value of the cookie whose name is specified by this attribute.

            header false true

            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.

            name false true

            The variable to be compared is the JSP bean specified by this attribute, if property is not specified, or the value of the specified property of this bean, if property is specified.

            parameter false true

            The variable to be compared is the first, or only, value of the request parameter specified by this attribute.

            property false true

            The variable to be compared is the property (of the bean specified by the name attribute) specified by this attribute. The property reference can be simple, nested, or indexed.

            scope false true

            The bean scope within which to search for the bean named by the name property, or "any scope" if not specified.

            value true true

            The constant value to which the variable, specified by other attribute(s) of this tag, will be compared.

            iterate Repeat the nested body content of this tag over a specified collection. org.apache.struts.taglib.logic.IterateTag org.apache.struts.taglib.logic.IterateTei JSP

            Repeats the nested body content of this tag once for every element of the specified collection, which must be an Iterator, a Collection, a Map (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:

            • As a runtime expression specified as the value of the collection attribute.
            • As a JSP bean specified by the name attribute.
            • As the property, specified by the property, of the JSP bean specified by the name attribute.

            The collection to be iterated over MUST conform to one of the following requirements in order for iteration to be successful:

            • An array of Java objects or primitives.
            • An implementation of java.util.Collection, including ArrayList and Vector.
            • An implementation of java.util.Enumeration.
            • An implementation of java.util.Iterator.
            • An implementation of java.util.Map, including HashMap, Hashtable, and TreeMap. NOTE - See below for additional information about accessing Maps.

            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 Map, the exposed object is of type Map.Entry that has two properties:

            • key - The key under which this item is stored in the underlying Map.
            • value - The value that corresponds to this key.

            So, if you wish to iterate over the values of a Hashtable, you would implement code like the following:

            <logic:iterate id="element" name="myhashtable">
            Next element is <bean:write name="element" property="value"/>
            </logic:iterate>

            If the collection you are iterating over can contain null values, the loop will still be performed but no page scope attribute (named by the id attribute) will be created for that loop iteration. You can use the <logic:present> and <logic:notPresent> tags to test for this case.

            collection false true

            A runtime expression that evaluates to a collection (conforming to the requirements listed above) to be iterated over.

            id true false

            The name of a page scope JSP bean that will contain the current element of the collection on each iteration, if it is not null.

            indexId false false

            The name of a page scope JSP bean that will contain the current index of the collection on each iteration.

            length false true

            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 java.lang.Integer that defines the desired value. If not present, there will be no limit on the number of iterations performed.

            name false true

            The name of the JSP bean containing the collection to be iterated (if property is not specified), or the JSP bean whose property getter returns the collection to be iterated (if property is specified).

            offset false true

            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 java.lang.Integer that defines the desired value. If not present, zero is assumed (meaning that the collection will be iterated from the beginning.

            property false true

            Name of the property, of the JSP bean specified by name, whose getter returns the collection to be iterated.

            scope false true

            The bean scope within which to search for the bean named by the name property, or "any scope" if not specified.

            type false true

            Fully qualified Java class name of the element to be exposed through the JSP bean named from the id 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.

            lessEqual Evaluate the nested body content of this tag if the requested variable is less than or equal to the specified value. org.apache.struts.taglib.logic.LessEqualTag JSP

            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 less than or equal to the value.

            cookie false true

            The variable to be compared is the value of the cookie whose name is specified by this attribute.

            header false true

            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.

            name false true

            The variable to be compared is the JSP bean specified by this attribute, if property is not specified, or the value of the specified property of this bean, if property is specified.

            parameter false true

            The variable to be compared is the first, or only, value of the request parameter specified by this attribute.

            property false true

            The variable to be compared is the property (of the bean specified by the name attribute) specified by this attribute. The property reference can be simple, nested, or indexed.

            scope false true

            The bean scope within which to search for the bean named by the name property, or "any scope" if not specified.

            value true true

            The constant value to which the variable, specified by other attribute(s) of this tag, will be compared.

            lessThan Evaluate the nested body content of this tag if the requested variable is less than the specified value. org.apache.struts.taglib.logic.LessThanTag JSP

            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 less than the value.

            cookie false true

            The variable to be compared is the value of the cookie whose name is specified by this attribute.

            header false true

            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.

            name false true

            The variable to be compared is the JSP bean specified by this attribute, if property is not specified, or the value of the specified property of this bean, if property is specified.

            parameter false true

            The variable to be compared is the first, or only, value of the request parameter specified by this attribute.

            property false true

            The variable to be compared is the property (of the bean specified by the name attribute) specified by this attribute. The property reference can be simple, nested, and/or indexed.

            scope false true

            The bean scope within which to search for the bean named by the name property, or "any scope" if not specified.

            value true true

            The constant value to which the variable, specified by other attribute(s) of this tag, will be compared.

            match Evaluate the nested body content of this tag if the specified value is an appropriate substring of the requested variable. org.apache.struts.taglib.logic.MatchTag JSP

            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 location attribute), the nested body content of this tag is evaluated.

            cookie false true

            The variable to be matched is the value of the cookie whose name is specified by this attribute.

            header false true

            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.

            location false true

            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 start or end) of the variable string.

            name false true

            The variable to be matched is the JSP bean specified by this attribute, if property is not specified, or the value of the specified property of this bean, if property is specified.

            parameter false true

            The variable to be matched is the first, or only, value of the request parameter specified by this attribute.

            property false true

            The variable to be matched is the property (of the bean specified by the name attribute) specified by this attribute. The property reference can be simple, nested, and/or indexed.

            scope false true

            The bean scope within which to search for the bean named by the name property, or "any scope" if not specified.

            value true true

            The constant value which is checked for existence as a substring of the specified variable.

            messagesNotPresent Generate the nested body content of this tag if the specified message is not present in this request. org.apache.struts.taglib.logic.MessagesNotPresentTag JSP Struts 1.1

            Evaluates the nested body content of this tag if an ActionMessages object, ActionErrors object, a String, or a String array is not in request scope. If such a bean is not found, nothing will be rendered.

            name false true

            The parameter key to retrieve the message from request scope.

            property false true

            Name of the property for which messages should be retrieved. If not specified, all messages (regardless of property) are retrieved.

            message false true

            By default the tag will retrieve the request scope bean it will iterate over from the Globals.ERROR_KEY constant string, but if this attribute is set to 'true' the request scope bean will be retrieved from the Globals.MESSAGE_KEY constant string. Also if this is set to 'true', any value assigned to the name attribute will be ignored.

            messagesPresent Generate the nested body content of this tag if the specified message is present in this request. org.apache.struts.taglib.logic.MessagesPresentTag JSP Struts 1.1

            Evaluates the nested body content of this tag if an ActionMessages object, ActionErrors object, a String, or a String array is in request scope. If such a bean is not found, nothing will be rendered.

            name false true

            The parameter key to retrieve the message from request scope.

            property false true

            Name of the property for which messages should be retrieved. If not specified, all messages (regardless of property) are retrieved.

            message false true

            By default the tag will retrieve the request scope bean it will iterate over from the Globals.ERROR_KEY constant string, but if this attribute is set to 'true' the request scope bean will be retrieved from the Globals.MESSAGE_KEY constant string. Also if this is set to 'true', any value assigned to the name attribute will be ignored.

            notEmpty 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). org.apache.struts.taglib.logic.NotEmptyTag JSP

            This tag evaluates its nested body content only if the specified value is present (i.e. not null) and is not an empty string (i.e. a java.lang.String with a length of zero).

            JSTL: The equivalent JSTL tag is <c:if> using the ! empty operator. For example,
            <c:if test="${ ! empty sessionScope.myBean.myProperty}"> do something </c:if>

            name false true

            The variable to be compared is the JSP bean specified by this attribute, if property is not specified, or the value of the specified property of this bean, if property is specified.

            property false true

            The variable to be compared is the property (of the bean specified by the name attribute) specified by this attribute. The property reference can be simple, nested, and/or indexed.

            scope false true

            The bean scope within which to search for the bean named by the name property, or "any scope" if not specified.

            notEqual Evaluate the nested body content of this tag if the requested variable is not equal to the specified value. org.apache.struts.taglib.logic.NotEqualTag JSP

            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 not equal.

            cookie false true

            The variable to be compared is the value of the cookie whose name is specified by this attribute.

            header false true

            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.

            name false true

            The variable to be compared is the JSP bean specified by this attribute, if property is not specified, or the value of the specified property of this bean, if property is specified.

            parameter false true

            The variable to be compared is the first, or only, value of the request parameter specified by this attribute.

            property false true

            The variable to be compared is the property (of the bean specified by the name attribute) specified by this attribute. The property reference can be simple, nested, and/or indexed.

            scope false true

            The bean scope within which to search for the bean named by the name property, or "any scope" if not specified.

            value true true

            The constant value to which the variable, specified by other attribute(s) of this tag, will be compared.

            notMatch Evaluate the nested body content of this tag if the specified value is not an appropriate substring of the requested variable. org.apache.struts.taglib.logic.NotMatchTag JSP

            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 location attribute), the nested body content of this tag is evaluated.

            cookie false true

            The variable to be matched is the value of the cookie whose name is specified by this attribute.

            header false true

            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.

            location false true

            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 start or end) of the variable string.

            name false true

            The variable to be matched is the JSP bean specified by this attribute, if property is not specified, or the value of the specified property of this bean, if property is specified.

            parameter false true

            The variable to be matched is the first, or only, value of the request parameter specified by this attribute.

            property false true

            The variable to be matched is the property (of the bean specified by the name attribute) specified by this attribute. The property reference can be simple, nested, and/or indexed.

            scope false true

            The bean scope within which to search for the bean named by the name property, or "any scope" if not specified.

            value true true

            The constant value which is checked for existence as a substring of the specified variable.

            notPresent Generate the nested body content of this tag if the specified value is not present in this request. org.apache.struts.taglib.logic.NotPresentTag JSP

            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 is not present. Only one of the attributes may be used in one occurrence of this tag, unless you use the property attribute, in which case the name attribute is also required.

            cookie false true

            Checks for the existence of a cookie with the specified name.

            header false true

            Checks for the existence of an HTTP header with the specified name. The name match is performed in a case insensitive manner.

            name false true

            Checks for the existence of a JSP bean, in any scope, with the specified name. If property is also specified, checks for a non-null property value for the specified property.

            parameter false true

            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.

            property false true

            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 name attribute. Property references can be simple, nested, and/or indexed.

            role false true

            Checks whether the currently authenticated user (if any) has been associated with the specified security role.

            scope false true

            The bean scope within which to search for the bean named by the name property, or "any scope" if not specified.

            user false true

            Checks whether the currently authenticated user principal has the specified name.

            present Generate the nested body content of this tag if the specified value is present in this request. org.apache.struts.taglib.logic.PresentTag JSP

            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 is present. Only one of the attributes may be used in one occurrence of this tag, unless you use the property attribute, in which case the name attribute is also required.

            cookie false true

            Checks for the existence of a cookie with the specified name.

            header false true

            Checks for the existence of an HTTP header with the specified name. The name match is performed in a case insensitive manner.

            name false true

            Checks for the existence of a JSP bean, in any scope, with the specified name. If property is also specified, checks for a non-null property value for the specified property.

            parameter false true

            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.

            property false true

            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 name attribute. Property references can be simple, nested, and/or indexed.

            role false true

            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: <logic:present role="role1,role2,role3"> code..... </logic:present>

            scope false true

            The bean scope within which to search for the bean named by the name property, or "any scope" if not specified.

            user false true

            Checks whether the currently authenticated user principal has the specified name.

            redirect Render an HTTP Redirect org.apache.struts.taglib.logic.RedirectTag empty

            Performs an HttpServletResponse.sendRedirect() 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.

            The base URL for this redirect is calculated based on which of the following attributes you specify (you must specify exactly one of them):

            • forward - Use the value of this attribute as the name of a global ActionForward to be looked up, and use the module-relative or context-relative URI found there.
            • href - Use the value of this attribute unchanged.
            • page - Use the value of this attribute as an module-relative URI, and generate a server-relative URI by including the context path.

            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 paramId attribute (and its associated attributes to select the value), or specify the name (and optional property) attributes to select a java.util.Map bean that contains one or more parameter ids and corresponding values.

            To specify a single parameter, use the paramId attribute to define the name of the request parameter to be submitted. To specify the corresponding value, use one of the following approaches:

            • Specify only the paramName attribute - The named JSP bean (optionally scoped by the value of the paramScope attribute) must identify a value that can be converted to a String.
            • Specify both the paramName and paramProperty attributes - The specified property getter method will be called on the JSP bean identified by the paramName (and optional paramScope) attributes, in order to select a value that can be converted to a String.

            If you prefer to specify a java.util.Map that contains all of the request parameters to be added to the hyperlink, use one of the following techniques:

            • Specify only the name attribute - The named JSP bean (optionally scoped by the value of the scope attribute) must identify a java.util.Map containing the parameters.
            • Specify both name and property attributes - The specified property getter method will be called on the bean identified by the name (and optional scope) attributes, in order to return the java.util.Map containing the parameters.

            As the Map 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.

            action false true

            Logical name of a global Action 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 must specify exactly one of the action attribute, the forward attribute, the href attribute, or the page attribute.

            anchor false true

            Optional anchor tag ("#xxx") to be added to the generated hyperlink. Specify this value without any "#" character.

            forward false true

            Logical name of a global ActionForward 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 must specify exactly one of the forward attribute, the href attribute, the linkName attribute, or the page attribute.

            href false true

            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 must specify exactly one of the forward attribute, the href attribute, the linkName attribute, or the page attribute.

            name false true

            The name of a JSP bean that contains a Map representing the query parameters (if property is not specified), or a JSP bean whose property getter is called to return a Map (if property is specified).

            page false true

            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 must specify exactly one of the forward attribute, the href attribute, the linkName attribute, or the page attribute.

            paramId false true

            The name of the request parameter that will be dynamically added to the generated hyperlink. The corresponding value is defined by the paramName and (optional) paramProperty attributes, optionally scoped by the paramScope attribute

            paramName false true

            The name of a JSP bean that is a String containing the value for the request parameter named by paramId (if paramProperty is not specified), or a JSP bean whose property getter is called to return a String (if paramProperty is specified). The JSP bean is constrained to the bean scope specified by the paramScope property, if it is specified.

            paramProperty false true

            The name of a property of the bean specified by the paramName attribute, whose return value must be a String containing the value of the request parameter (named by the paramId attribute) that will be dynamically added to this hyperlink.

            paramScope false true

            The scope within which to search for the bean specified by the paramName attribute. If not specified, all scopes are searched.

            property false true

            The name of a property of the bean specified by the name attribute, whose return value must be a java.util.Map containing the query parameters to be added to the hyperlink. You must specify the name attribute if you specify this attribute.

            scope false true

            The scope within which to search for the bean specified by the name attribute. If not specified, all scopes are searched.

            transaction false true

            Set to true if you want the current transaction control token included in the generated URL for this redirect.

            useLocalEncoding false true

            If set to true, 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.

            libstruts1.2-java-1.2.9/doc/userGuide/struts-nested.xml0000644000175000017500000034020010404045210023520 0ustar arnaudarnaud00000000000000 Arron Bates The Struts Framework Project - Nested Tags 1.2 1.1 nested Struts Nested Tags http://struts.apache.org/tags-nested

            [Since Struts 1.1]

            This tag library brings a nested context to the functionality of the Struts custom tag library.

            It's written in a layer that extends the current Struts tags, building on their logic and functionality. The layer enables the tags to be aware of the tags which surround them so they can correctly provide the nesting property reference to the Struts system.

            It's all about nesting beans...
            A bean holds a reference to another bean internally, and all access to that bean is handled through the current bean. This act of having one bean's access go through another bean is known as "nesting beans". The first bean is known as the parent bean. The bean which it references, is known as a child bean. The terms "parent" and "child" are commonly used to describe the model's hierarchy.

            A simple example...
            Take an object which represents a monkey. The monkey's job is to pick bunches of bananas. On each bunch picked hangs many bananas. If this case was translated to bean objects, the monkey object would have a reference to the bunch objects he picked, and each bunch object would hold a reference to the bananas hanging in the bunch.

            To describe this...
            The monkey object is the parent to the bunch object, and the bunch object is a child of the monkey object. The bunch object is parent to its child banana objects, and the child banana objects children of the bunch object. The monkey is higher in the hierarchy than the bananas, and the bananas lower in the hierarchy to the bunches.

            One special term to remember is for the most parent class, which is known as the "root" object which starts the hierarchy.

            Nested tags are all about efficiently managing this style of hierarchy structure within your JSP markup.

            Important Note: Nearly all these tags extend tags from other libraries to bring their functionality into the nested context. Nesting relies on the tags working against the one bean model, and managing the properties so that they become relative to the properties they are nested within. In doing so, the tags will set the "name" attribute internally (where applicable), and in many cases will rely on the "property" attribute being set so it can be updated internally to become nested. The original tags on occasion provide options that don't use the "name" and "property" attributes. These uses will then fall outside the nested context, and will most likely cause error. To take advantage of these options, markup using the original tag for these cases. For an example see the <nested:options> tag.

            nest Defines a new level of nesting for child tags to reference to org.apache.struts.taglib.nested.NestedPropertyTag JSP

            This tag provides a simple method of defining a logical nesting level in the nested hierarchy. It run no explicit logic, is simply a place holder. It also means you can remove the need for explicit setting of level properties in child tags.

            Just as the iterate tag provide a parent to other tags, this does the same but there is no logic for iterating or otherwise.

            Example...

            <nested:write property="myNestedLevel.propertyOne" />
            <nested:write property="myNestedLevel.propertyTwo" />
            <nested:write property="myNestedLevel.propertyThree" />
                  

            Can instead become...

            <nested:nest property="myNestedLevel" >
              <nested:write property="propertyOne" />
              <nested:write property="propertyTwo" />
              <nested:write property="propertyThree" />
            </nested:nest >
                  
            property false true This specifies the property by which this tag and all child tags will be relative to.
            writeNesting Writes or makes a scripting variable of the current nesting level. org.apache.struts.taglib.nested.NestedWriteNestingTag org.apache.struts.taglib.nested.NestedWriteNestingTei JSP This tag provides a way of accessing the nested property reference used by the nested tags. Can expose a scripting variable, or simply write out the value. property false true If not supplied, will simply write out as if "./" or "this/" was supplied. id false true If id is supplied, then what would have been written out into the response stream, will instead be made available as a String object defined by the variable name provided. filter false true true/false value, describing to the tag if the result if to be URLEncoded. Helps JavaScript along if the result is required for URL hacking. root To start off a nested hierarchy without the need for a form org.apache.struts.taglib.nested.NestedRootTag JSP

            This tag is provided to allow the nested tags to find a common bean reference without the need for a form and its relative overhead. As long as the name attribute of this tag matches the name of a bean in scope of the JSP (ie: Struts tags can find it via usual means). For example you can load a bean for use with the jsp:useBean tag.

            The tag can also be used without specifying the name attribute, but this is only in the case that the current JSP is a dynamic include specified in another file. You will not be able to run the tag without a name unless this inclusion is in place. Otherwise the nested tags will not have the bean and property references that they need to provide their logic.

            Note: The access to a bean via the name attribute takes priority over looking for the reference from other parent tags. So if a name is specified, a bean will have to be there waiting for it. It was made this way so that you could use separate beans within a JSP that itself is an inclusion into another.

            name false true The name of the bean by which all child nested tags will derive their bean reference from.
            define Nested Extension - Define a scripting variable based on the value(s) of the specified bean property. org.apache.struts.taglib.nested.bean.NestedDefineTag org.apache.struts.taglib.nested.bean.NestedDefineTei empty

            This tag is an extension of the <bean:define> tag. Please consult its documentation for information on tag attributes and usage details.

            id true true name false true property false true scope false true toScope false true type false true value false true
            message Nested Extension - Render an internationalized message string to the response. org.apache.struts.taglib.nested.bean.NestedMessageTag empty

            This tag is an extension of the <bean:message> tag. Please consult its documentation for information on tag attributes and usage details.

            arg0 false true arg1 false true arg2 false true arg3 false true arg4 false true bundle false true key false true locale false true name false true property false true scope false true
            size Nested Extension - Define a bean containing the number of elements in a Collection or Map. org.apache.struts.taglib.nested.bean.NestedSizeTag org.apache.struts.taglib.bean.SizeTei empty

            This tag is an extension of the <bean:size> tag. Please consult its documentation for information on tag attributes and usage details.

            collection false true id true true name false true property false true scope false true
            write Nested Extension - Render the value of the specified bean property to the current JspWriter. org.apache.struts.taglib.nested.bean.NestedWriteTag empty

            This tag is an extension of the <bean:write> tag. Please consult its documentation for information on tag attributes and usage details.

            bundle false true filter false true format false true formatKey false true ignore false true locale false true name false true property false true scope false true
            checkbox Nested Extension - Render A Checkbox Input Field org.apache.struts.taglib.nested.html.NestedCheckboxTag

            This tag is an extension of the <html:checkbox> tag. Please consult its documentation for information on tag attributes and usage details.

            accesskey false true alt false true altKey false true bundle false true Struts 1.2.7 disabled false true errorKey false true Struts 1.2.5 errorStyle false true Struts 1.2.5 errorStyleClass false true Struts 1.2.5 errorStyleId false true Struts 1.2.5 indexed false true name false true onblur false true onchange false true onclick false true ondblclick false true onfocus false true onkeydown false true onkeypress false true onkeyup false true onmousedown false true onmousemove false true onmouseout false true onmouseover false true onmouseup false true property true true style false true styleClass false true styleId false true tabindex false true title false true titleKey false true value false true
            errors Nested Extension - Conditionally display a set of accumulated error messages. org.apache.struts.taglib.nested.html.NestedErrorsTag empty

            This tag is an extension of the <html:errors> tag. Please consult its documentation for information on tag attributes and usage details.

            bundle false true footer false true Struts 1.2.5 header false true Struts 1.2.5 locale false true name false true prefix false true Struts 1.2.5 property false true suffix false true Struts 1.2.5
            file Nested Extension - Render A File Select Input Field org.apache.struts.taglib.nested.html.NestedFileTag

            This tag is an extension of the <html:file> tag. Please consult its documentation for information on tag attributes and usage details.

            accesskey false true accept false true alt false true altKey false true bundle false true Struts 1.2.7 disabled false true errorKey false true Struts 1.2.5 errorStyle false true Struts 1.2.5 errorStyleClass false true Struts 1.2.5 errorStyleId false true Struts 1.2.5 indexed false true maxlength false true name false true onblur false true onchange false true onclick false true ondblclick false true onfocus false true onkeydown false true onkeypress false true onkeyup false true onmousedown false true onmousemove false true onmouseout false true onmouseover false true onmouseup false true property true true size false true style false true styleClass false true styleId false true tabindex false true title false true titleKey false true value false true
            form Nested Extension - Define An Input Form org.apache.struts.taglib.nested.html.NestedFormTag JSP

            This tag is an extension of the <html:form> tag. Please consult its documentation for information on tag attributes and usage details.

            action true true acceptCharset false true disabled false true Struts 1.2.7 enctype false true focus false true focusIndex false true method false true onreset false true onsubmit false true readonly false true Struts 1.2.7 scriptLanguage false true style false true styleClass false true styleId false true target false true
            hidden Nested Extension - Render A Hidden Field org.apache.struts.taglib.nested.html.NestedHiddenTag

            This tag is an extension of the <html:hidden> tag. Please consult its documentation for information on tag attributes and usage details.

            alt false true altKey false true indexed false true name false true property true true title false true titleKey false true styleClass false true styleId false true value false true write false true
            image Nested Extension - Render an input tag of type "image" org.apache.struts.taglib.nested.html.NestedImageTag

            This tag is an extension of the <html:image> tag. Please consult its documentation for information on tag attributes and usage details.

            accesskey false true align false true alt false true altKey false true border false true bundle false true disabled false true indexed false true locale false true onblur false true onchange false true onclick false true ondblclick false true onfocus false true onkeydown false true onkeypress false true onkeyup false true onmousedown false true onmousemove false true onmouseout false true onmouseover false true onmouseup false true page false true pageKey false true property false true src false true srcKey false true style false true styleClass false true tabindex false true title false true titleKey false true value false true
            img Nested Extension - Render an HTML "img" tag org.apache.struts.taglib.nested.html.NestedImgTag empty

            This tag is an extension of the <html:img> tag. Please consult its documentation for information on tag attributes and usage details.

            accesskey false true align false true alt false true altKey false true border false true bundle false true height false true hspace false true imageName false true ismap false true locale false true lowsrc false true name false true onkeydown false true onkeypress false true onkeyup false true paramId false true page false true pageKey false true action false true module false true paramName false true paramProperty false true paramScope false true property false true scope false true src false true srcKey false true style false true styleClass false true styleId false true title false true titleKey false true useLocalEncoding false true usemap false true vspace false true width false true
            link Nested Extension - Render an HTML anchor or hyperlink org.apache.struts.taglib.nested.html.NestedLinkTag

            This tag is an extension of the <html:link> tag. Please consult its documentation for information on tag attributes and usage details.

            accesskey false true action false true module false true anchor false true forward false true href false true indexed false true indexId false true bundle false true Struts 1.2.7 linkName false true name false true onblur false true onclick false true ondblclick false true onfocus false true onkeydown false true onkeypress false true onkeyup false true onmousedown false true onmousemove false true onmouseout false true onmouseover false true onmouseup false true page false true paramId false true paramName false true paramProperty false true paramScope false true property false true scope false true style false true styleClass false true styleId false true tabindex false true target false true title false true titleKey false true transaction false true useLocalEncoding false true
            messages Nested Extension - Conditionally display a set of accumulated messages. org.apache.struts.taglib.nested.html.NestedMessagesTag org.apache.struts.taglib.html.MessagesTei JSP

            This tag is an extension of the <html:messages> tag. Please consult its documentation for information on tag attributes and usage details.

            id true true bundle false true locale false true name false true property false true header false true footer false true message false true
            multibox Nested Extension - Render A Checkbox Input Field org.apache.struts.taglib.nested.html.NestedMultiboxTag

            This tag is an extension of the <html:multibox> tag. Please consult its documentation for information on tag attributes and usage details.

            accesskey false true alt false true altKey false true bundle false true Struts 1.2.7 disabled false true errorKey false true Struts 1.2.5 errorStyle false true Struts 1.2.5 errorStyleClass false true Struts 1.2.5 errorStyleId false true Struts 1.2.5 name false true onblur false true onchange false true onclick false true ondblclick false true onfocus false true onkeydown false true onkeypress false true onkeyup false true onmousedown false true onmousemove false true onmouseout false true onmouseover false true onmouseup false true property true true style false true styleClass false true styleId false true tabindex false true title false true titleKey false true value false true
            options Nested Extension - Render a Collection of Select Options org.apache.struts.taglib.nested.html.NestedOptionsTag empty

            This tag is an extension of the <html:options> tag. Please consult its documentation for information on tag attributes and usage details.

            Note: The nested context of this tag relies on the use of the "property" property, and the internal use of the "name" property. The nested tags rely on these properties and will attempt to set them itself. The <html:options> tag this tag extended allows other options for the tag which don't use these properties. To take advantage of these options, markup using the <html:options> tag instead of the nested tag.

            For example, the "collections" option allows you to specify a separate bean reference which itself is a list of objects with properties to access the title and value parts of the html option tag. You can use this in a nested context (the list is a property of a nested bean) by using the nested define tag and the original options tag.

            <nested:nest property="myNestedLevel" />
              <nested:define property="collectionList" />
              <html:options collection="collectionList"
                              property="labelProperty"
                         valueProperty="valueProperty" />
            </nested:nest >
            
            collection false true filter false true labelName false true labelProperty false true name false true property false true style false true styleClass false true
            optionsCollection Nested Extension - Render a Collection of Select Options org.apache.struts.taglib.nested.html.NestedOptionsCollectionTag empty

            This tag is an extension of the <html:optionsCollection> tag. Please consult its documentation for information on tag attributes and usage details.

            filter false true label false true name false true property true true style false true styleClass false true value false true
            password Nested Extension - Render A Password Input Field org.apache.struts.taglib.nested.html.NestedPasswordTag

            This tag is an extension of the <html:password> tag. Please consult its documentation for information on tag attributes and usage details.

            accesskey false true alt false true altKey false true bundle false true Struts 1.2.7 disabled false true errorKey false true Struts 1.2.5 errorStyle false true Struts 1.2.5 errorStyleClass false true Struts 1.2.5 errorStyleId false true Struts 1.2.5 indexed false true maxlength false true name false true onblur false true onchange false true onclick false true ondblclick false true onfocus false true onkeydown false true onkeypress false true onkeyup false true onmousedown false true onmousemove false true onmouseout false true onmouseover false true onmouseup false true property true true readonly false true redisplay false true style false true styleClass false true styleId false true size false true tabindex false true title false true titleKey false true value false true
            radio Nested Extension - Render A Radio Button Input Field org.apache.struts.taglib.nested.html.NestedRadioTag

            This tag is an extension of the <html:radio> tag. Please consult its documentation for information on tag attributes and usage details.

            accesskey false true alt false true altKey false true bundle false true Struts 1.2.7 disabled false true errorKey false true Struts 1.2.5 errorStyle false true Struts 1.2.5 errorStyleClass false true Struts 1.2.5 errorStyleId false true Struts 1.2.5 indexed false true name false true onblur false true onchange false true onclick false true ondblclick false true onfocus false true onkeydown false true onkeypress false true onkeyup false true property true true onmousedown false true style false true styleClass false true styleId false true tabindex false true title false true titleKey false true value true true idName false true
            select Nested Extension - Render A Select Element org.apache.struts.taglib.nested.html.NestedSelectTag JSP

            This tag is an extension of the <html:select> tag. Please consult its documentation for information on tag attributes and usage details.

            accesskey false true alt false true altKey false true bundle false true Struts 1.2.7 disabled false true errorKey false true Struts 1.2.5 errorStyle false true Struts 1.2.5 errorStyleClass false true Struts 1.2.5 errorStyleId false true Struts 1.2.5 indexed false true multiple false true name false true onblur false true onchange false true onclick false true ondblclick false true onfocus false true onkeydown false true onkeypress false true onkeyup false true onmousedown false true onmousemove false true onmouseout false true onmouseover false true onmouseup false true property true true style false true styleClass false true styleId false true tabindex false true size false true title false true titleKey false true value false true
            submit Nested Extension - Render A Submit Button org.apache.struts.taglib.nested.html.NestedSubmitTag

            This tag is an extension of the <html:submit> tag. Please consult its documentation for information on tag attributes and usage details.

            accesskey false true alt false true altKey false true bundle false true Struts 1.2.7 disabled false true indexed false true onblur false true onchange false true onclick false true ondblclick false true onfocus false true onkeydown false true onkeypress false true onkeyup false true onmousedown false true onmousemove false true onmouseout false true onmouseover false true onmouseup false true property false true style false true styleClass false true styleId false true tabindex false true title false true titleKey false true value false true
            text Nested Extension - Render An Input Field of Type text org.apache.struts.taglib.nested.html.NestedTextTag

            This tag is an extension of the <html:text> tag. Please consult its documentation for information on tag attributes and usage details.

            accesskey false true alt false true altKey false true bundle false true Struts 1.2.7 disabled false true errorKey false true Struts 1.2.5 errorStyle false true Struts 1.2.5 errorStyleClass false true Struts 1.2.5 errorStyleId false true Struts 1.2.5 indexed false true maxlength false true name false true onblur false true onchange false true onclick false true ondblclick false true onfocus false true onkeydown false true onkeypress false true onkeyup false true onmousedown false true onmousemove false true onmouseout false true onmouseover false true onmouseup false true property true true readonly false true size false true style false true styleClass false true styleId false true tabindex false true title false true titleKey false true value false true
            textarea Nested Extension - Render A Textarea org.apache.struts.taglib.nested.html.NestedTextareaTag

            This tag is an extension of the <html:textarea> tag. Please consult its documentation for information on tag attributes and usage details.

            accesskey false true alt false true altKey false true bundle false true Struts 1.2.7 cols false true disabled false true errorKey false true Struts 1.2.5 errorStyle false true Struts 1.2.5 errorStyleClass false true Struts 1.2.5 errorStyleId false true Struts 1.2.5 indexed false true name false true onblur false true onchange false true onclick false true ondblclick false true onfocus false true onkeydown false true onkeypress false true onkeyup false true onmousedown false true onmousemove false true onmouseout false true onmouseover false true onmouseup false true property true true readonly false true rows false true style false true styleClass false true styleId false true tabindex false true title false true titleKey false true value false true
            empty Nested Extension - Evaluate the nested body content of this tag if the requested variable is either null or an empty string. org.apache.struts.taglib.nested.logic.NestedEmptyTag JSP

            This tag is an extension of the <logic:empty> tag. Please consult its documentation for information on tag attributes and usage details.

            name false true property false true scope false true
            equal Nested Extension - Evaluate the nested body content of this tag if the requested variable is equal to the specified value. org.apache.struts.taglib.nested.logic.NestedEqualTag JSP

            This tag is an extension of the <logic:equal> tag. Please consult its documentation for information on tag attributes and usage details.

            cookie false true header false true name false true parameter false true property false true scope false true value true true
            greaterEqual Nested Extension - Evaluate the nested body content of this tag if the requested variable is greater than or equal to the specified value. org.apache.struts.taglib.nested.logic.NestedGreaterEqualTag JSP

            This tag is an extension of the <logic:greaterEqual> tag. Please consult its documentation for information on tag attributes and usage details.

            cookie false true header false true name false true parameter false true property false true scope false true value true true
            greaterThan Nested Extension - Evaluate the nested body content of this tag if the requested variable is greater than the specified value. org.apache.struts.taglib.nested.logic.NestedGreaterThanTag JSP

            This tag is an extension of the <logic:greaterThan> tag. Please consult its documentation for information on tag attributes and usage details.

            cookie false true header false true name false true parameter false true property false true scope false true value true true
            iterate Nested Extension - Repeat the nested body content of this tag over a specified collection. org.apache.struts.taglib.nested.logic.NestedIterateTag org.apache.struts.taglib.nested.logic.NestedIterateTei JSP

            This tag is an extension of the <logic:iterate> tag. Please consult its documentation for information on tag attributes and usage details.

            collection false true id false true indexId false true length false true name false true offset false true property false true scope false true type false true
            lessEqual Nested Extension - Evaluate the nested body content of this tag if the requested variable is greater than or equal to the specified value. org.apache.struts.taglib.nested.logic.NestedLessEqualTag JSP

            This tag is an extension of the <logic:lessEqual> tag. Please consult its documentation for information on tag attributes and usage details.

            cookie false true header false true name false true parameter false true property false true scope false true value true true
            lessThan Nested Extension - Evaluate the nested body content of this tag if the requested variable is less than the specified value. org.apache.struts.taglib.nested.logic.NestedLessThanTag JSP

            This tag is an extension of the <logic:lessThan> tag. Please consult its documentation for information on tag attributes and usage details.

            cookie false true header false true name false true parameter false true property false true scope false true value true true
            match Nested Extension - Evaluate the nested body content of this tag if the specified value is an appropriate substring of the requested variable. org.apache.struts.taglib.nested.logic.NestedMatchTag JSP

            This tag is an extension of the <logic:match> tag. Please consult its documentation for information on tag attributes and usage details.

            cookie false true header false true location false true name false true parameter false true property false true scope false true value true true
            messagesNotPresent Nested Extension - Generate the nested body content of this tag if the specified message is not present in this request. org.apache.struts.taglib.nested.logic.NestedMessagesNotPresentTag JSP

            This tag is an extension of the <logic:messagesNotPresent> tag. Please consult its documentation for information on tag attributes and usage details.

            name false true property false true message false true
            messagesPresent Nested Extension - Generate the nested body content of this tag if the specified message is present in this request. org.apache.struts.taglib.nested.logic.NestedMessagesPresentTag JSP

            This tag is an extension of the <logic:messagesPresent> tag. Please consult its documentation for information on tag attributes and usage details.

            name false true property false true message false true
            notEmpty Nested Extension - Evaluate the nested body content of this tag if the requested variable is neither null nor an empty string. org.apache.struts.taglib.nested.logic.NestedNotEmptyTag JSP

            This tag is an extension of the <logic:notEmpty> tag. Please consult its documentation for information on tag attributes and usage details.

            name false true property false true scope false true
            notEqual Nested Extension - Evaluate the nested body content of this tag if the requested variable is not equal to the specified value. org.apache.struts.taglib.nested.logic.NestedNotEqualTag JSP

            This tag is an extension of the <logic:notEqual> tag. Please consult its documentation for information on tag attributes and usage details.

            cookie false true header false true name false true parameter false true property false true scope false true value true true
            notMatch Nested Extension - Evaluate the nested body content of this tag if the specified value is not an appropriate substring of the requested variable. org.apache.struts.taglib.nested.logic.NestedNotMatchTag JSP

            This tag is an extension of the <logic:notMatch> tag. Please consult its documentation for information on tag attributes and usage details.

            cookie false true header false true location false true name false true parameter false true property false true scope false true value true true
            notPresent Nested Extension - Generate the nested body content of this tag if the specified value is not present in this request. org.apache.struts.taglib.nested.logic.NestedNotPresentTag JSP

            This tag is an extension of the <logic:notPresent> tag. Please consult its documentation for information on tag attributes and usage details.

            cookie false true header false true name false true parameter false true property false true role false true scope false true user false true
            present Nested Extension - Generate the nested body content of this tag if the specified value is present in this request. org.apache.struts.taglib.nested.logic.NestedPresentTag JSP

            This tag is an extension of the <logic:present> tag. Please consult its documentation for information on tag attributes and usage details.

            cookie false true header false true name false true parameter false true property false true role false true scope false true user false true
            libstruts1.2-java-1.2.9/doc/userGuide/struts-tiles.xml0000644000175000017500000006710510404045204023373 0ustar arnaudarnaud00000000000000 Cedric Dumoulin Tiles Tag Library 1.2 1.1 tiles Tiles Tag Library http://struts.apache.org/tags-tiles

            This tag library provides tiles tags.

            Tiles were previously called Components. For historical reasons, names, pages, components and templates are used indifferently to design a tile. Also, a lot of tags and attribute names are left for backward compatibility.

            To know more about tags defined in this library, check the associated documentation: tiles-doc.

            insert Insert a tiles/component/template.

            Insert a tiles/component/template with the possibility to pass parameters (called attribute). A tile can be seen as a procedure that can take parameters or attributes. <tiles:insert> allows to define these attributes and pass them to the inserted jsp page, called template. Attributes are defined using nested tag <tiles:put> or <tiles:putList>.

            You must specify one of this tag attribute :

            • template, for inserting a tiles/component/template page,
            • component, for inserting a tiles/component/template page, (same as template)
            • page for inserting a JSP page, (same as template)
            • definition, for inserting a definition from definitions factory
            • attribute, surrounding tiles's attribute name whose value is used.
              If attribute is associated to 'direct' flag (see put), and flag is true, write attribute value (no insertion).
            • name, to let 'insert' determine the type of entities to insert. In this later case, search is done in this order : definitions, tiles/components/templates, pages.

            In fact, Page, component and template, are equivalent as a tile, component or template are jsp page.

            Example :

            
                      <tiles:insert page="/basic/myLayout.jsp" flush="true">
                        <tiles:put name="title"  value="My first page" />
                        <tiles:put name="header" value="/common/header.jsp" />
                        <tiles:put name="footer" value="/common/footer.jsp" />
                        <tiles:put name="menu"   value="/basic/menu.jsp" />
                        <tiles:put name="body"   value="/basic/helloBody.jsp" />
                      </tiles:insert>
            org.apache.struts.taglib.tiles.InsertTag JSP template false true

            A string representing the URI of a tile or template (a JSP page).

            'page', 'component' and 'template' are synonyms : they have exactly the same behavior.

            component false true

            Path (relative or absolute to webapps) of the component to insert.

            'page', 'component' and 'template' are synonyms : they have exactly the same behavior.

            page false true

            Path (relative or absolute to webapps) of the page to insert.

            'page', 'component' and 'template' are synonyms : they have exactly the same behavior.

            definition false true Name of the definition to insert. Definition are defined in a centralized file. For now, only definition from factory can be inserted with this attribute. To insert a definition defined with tag <tiles:definition>, use beanName="". attribute false false Name of an attribute in current tile/component context. Value of this attribute is passed to 'name' (see attribute 'name'). name false true Name of an entity to insert. Search is done in this order : definition, attribute, [tile/component/template/page]. beanName false true

            Name of the bean used as value. Bean is retrieved from specified context, if any. Otherwise, method pageContext.findAttribute is used. If beanProperty is also specified, retrieve value from the corresponding bean property.

            If found bean (or property value) is instance of one of Attribute class (Direct, Instance, ...), insertion is done according to the class type. Otherwise, the toString method is called on the bean, and returned String is used as name to insert (see 'name' attribute).

            beanProperty false true Bean property name. If specified, value is retrieve from this property. Support nested/indexed properties. beanScope false false Scope into which bean is searched. If not specified, method pageContext.findAttribute is used. Scope can be any JSP scope, 'component', or 'template'. In these two later cases, bean is search in tile/component/template context. flush false false True or false. If true, current page out stream is flushed before insertion. ignore false true If this attribute is set to true, and the attribute specified by the name does not exist, simply return without writing anything. The default value is false, which will cause a runtime exception to be thrown. role false true If the user is in the specified role, the tag is taken into account; otherwise, the tag is ignored (skipped). controllerUrl false true

            Url of a controller called immediately before page is inserted.

            Url usually denote a Struts action. Controller (action) is used to prepare data to be render by inserted Tile.

            See also controlerClass. Only one of controllerUrl or controllerClass should be used.

            controllerClass false true

            Class type of a controller called immediately before page is inserted.

            Controller is used to prepare data to be render by inserted Tile.

            See also controlerUrl

            Class must implements or extends one of the following :

            • org.apache.struts.tiles.Controller
            • org.apache.struts.tiles.ControllerSupport
            • org.apache.struts.action.Action (wrapper org.apache.struts.action.ActionController is used)

            See also controllerUrl. Only one of controllerUrl or controllerClass should be used.

            definition Create a tile /component / template definition bean. Create a tile/component/template definition as a bean. Newly created bean will be saved under specified "id", in the requested "scope". Definition tag has same syntax as insert tag. The new definition can extends a definition described in factory (XML file), and overload any previously defined parameters. org.apache.struts.taglib.tiles.DefinitionTag JSP id true false Specifies the name under which the newly created definition bean will be saved. scope false false Specifies the variable scope into which the newly defined bean will be created. If not specified, the bean will be created in page scope. template false true A string representing the URI of a tile/component/template (a JSP page). page false true URL of the template / component to insert. Same as "template". role false true Role to check before inserting this definition. If role is not defined for current user, definition is not inserted. Checking is done at insert time, not during definition process. extends false true Name of a parent definition that is used to initialize this new definition. Parent definition is searched in definitions factory. put Put an attribute into tile/component/template context. Define an attribute to pass to tile/component/template. This tag can only be used inside 'insert' or 'definition' tag. Value (or content) is specified using attribute 'value' (or 'content'), or using the tag body. It is also possible to specify the type of the value :
            • string : Content is written directly.
            • page | template : Content is included from specified URL. Name is used as an URL.
            • definition : Content come from specified definition (from factory). Name is used as definition name.
            If type is specified, it is taken into account by 'get' or 'insert' inside the inserted tile.

            If 'type' attribute is not specified, content is 'untyped', unless it comes from a typed bean.

            Note that using 'direct="true"' is equivalent to 'type="string"'.

            org.apache.struts.taglib.tiles.PutTag JSP name false false Name of the attribute. value false true Attribute value. Could be a String or an Object. Value can come from a direct assignment (value="aValue") or from a bean. One of 'value' 'content' or 'beanName' must be present. content false true Content that's put into tile scope. Synonym to value. Attribute added for compatibility with JSP Template. direct false false Determines how content is handled: true means content is printed directly; false, the default, means content is included. This is another way to specify content type. If 'direct=true' content is 'string', if 'direct=false', content is 'page'. Attribute added for compatibility with JSP Template. type false false Specify content type: string, page, template or definition.
            • String : Content is printed directly.
            • page | template : Content is included from specified URL. Name is used as an URL.
            • definition : Value is the name of a definition defined in factory (xml file). Definition will be searched in the inserted tile, in a <tiles:insert attribute="attributeName"> tag, where 'attributeName' is the name used for this tag.
            If 'type' attribute is not specified, content is 'untyped', unless it comes from a typed bean.
            beanName false true Name of the bean used as value. Bean is retrieved from specified context, if any. Otherwise, method pageContext.findAttribute is used. If beanProperty is specified, retrieve value from the corresponding bean property. beanProperty false true Bean property name. If specified, value is retrieve from this property. Support nested/indexed properties. beanScope false false Scope into which bean is searched. If not specified, method pageContext.findAttribute is used. Scope can be any JSP scope, 'tile', 'component', or 'template'. In these three later cases, bean is search in tile/component/template context. role false true If the user is in the specified role, the tag is taken into account; otherwise, the tag is ignored (skipped).
            putList Declare a list that will be pass as attribute to tile. Declare a list that will be pass as attribute to tile. List elements are added using the tag 'add'. This tag can only be used inside 'insert' or 'definition' tag. org.apache.struts.taglib.tiles.PutListTag JSP name true false Name of the list. add Add an element to the surrounding list. Equivalent to 'put', but for list element. Add an element to the surrounding list. This tag can only be used inside putList tag. Value can come from a direct assignment (value="aValue") or from a bean. One of 'value' or 'beanName' must be present. org.apache.struts.taglib.tiles.AddTag JSP value false false Element value. Can be a String or Object. content false true Element value. Can be a String or Object. Synonym to value. Attribute added for compatibility with JSP Template. direct false false Determines how content is handled: true means content is printed directly; false, the default, means content is included. This is another way to specify content type. If 'direct=true' content is 'string', if 'direct=false', content is 'page'. Attribute added for compatibility with JSP Template. type false false Specify content type: string, page, template or instance.
            • String : Content is printed directly.
            • page | template : Content is included from specified URL. Name is used as an URL.
            • definition : Value denote a definition defined in factory (xml file). Definition will be searched in the inserted tile, in a <insert attribute="attributeName"> tag, where 'attributeName' is the name used for this tag.
            If 'type' attribute is not specified, content is 'untyped', unless it comes from a typed bean.
            beanName false true Name of the bean used as value. Bean is retrieved from specified context, if any. Otherwise, method pageContext.findAttribute is used. If beanProperty is specified, retrieve value from the corresponding bean property. beanProperty false true Bean property name. If specified, value is retrieve from this property. Support nested/indexed properties. beanScope false false Scope into which bean is searched. If not specified, method pageContext.findAttribute is used. Scope can be any JSP scope, 'component', or 'template'. In these two later cases, bean is search in tile/component/template context. role false true

            If the user is in the specified role, the tag is taken into account; otherwise, the tag is ignored (skipped).

            The role isn't taken into account if <add> tag is used in a definition.

            get Gets the content from request scope that was put there by a put tag. org.apache.struts.taglib.tiles.GetTag empty

            Retrieve content from tile context and include it.

            Take into account the 'type' attribute.

            name true true The name of the content to get from tile/component scope. ignore false true If this attribute is set to true, and the attribute specified by the name does not exist, simply return without writing anything. The default value is false, which will cause a runtime exception to be thrown. flush false false True or false. If true, current page out stream is flushed before insertion. role false true If the user is in the specified role, the tag is taken into account; otherwise, the tag is ignored (skipped).
            getAsString Render the value of the specified tile/component/template attribute to the current JspWriter Retrieve the value of the specified tile/component/template attribute property, and render it to the current JspWriter as a String. The usual toString() conversions is applied on found value.

            Throw a JSPException if named value is not found.

            org.apache.struts.taglib.tiles.GetAttributeTag empty name true true Attribute name. ignore false true If this attribute is set to true, and the attribute specified by the name does not exist, simply return without writing anything. The default value is false, which will cause a runtime exception to be thrown. role false true If the user is in the specified role, the tag is taken into account; otherwise, the tag is ignored (skipped).
            useAttribute Use attribute value inside page.

            Declare a Java variable, and an attribute in the specified scope, using tile attribute value.

            Java variable and attribute will have the name specified by 'id', or the original name if not specified.

            org.apache.struts.taglib.tiles.UseAttributeTag org.apache.struts.taglib.tiles.UseAttributeTei empty id false false Declared attribute and variable name. classname false false Class of the declared variable. scope false false Scope of the declared attribute. Default to 'page'. name true true Tile's attribute name. ignore false true If this attribute is set to true, and the attribute specified by the name does not exist, simply return without error. The default value is false, which will cause a runtime exception to be thrown.
            importAttribute Import Tile's attribute in specified context. Import attribute from tile to requested scope. Attribute name and scope are optional. If not specified, all tile attributes are imported in page scope. Once imported, an attribute can be used as any other beans from jsp contexts. org.apache.struts.taglib.tiles.ImportAttributeTag empty name false true Tile's attribute name. If not specified, all attributes are imported. scope false false Scope into which attribute is imported. Default to page. ignore false true If this attribute is set to true, and the attribute specified by the name does not exist, simply return without error. The default value is false, which will cause a runtime exception to be thrown. initComponentDefinitions Initialize Tile/Component definitions factory.

            Initialize Tile/Components definitions factory.

            In order to use Tile/Component definitions factory, you need to initialize the factory. This is generally done in a initializing servlet. In particular, it is done in "ComponentActionServlet" if you use it. If you don't initialize factory in a servlet, you can initialize it using this tag. You need to provide the description file name, and optionally the factory classname. Initialization is done only once, at the first call of this tag. Subsequent calls are ignored (tag checks existence of the factory.

            org.apache.struts.taglib.tiles.InitDefinitionsTag empty file true false Definition file name. classname false false If specified, classname of the factory to create and initialized.
            libstruts1.2-java-1.2.9/doc/acquiring.xml0000644000175000017500000001052410404045246020736 0ustar arnaudarnaud00000000000000 Acquiring - The Apache Struts Web Application Framework Craig R. McClanahan Ted Husted Martin Cooper James Holmes James Mitchell

            Struts is available in a convenient binary distribution and also with complete source code. You may choose to download a production release or one of the development builds. All downloads are available to the general public at no charge and are distributed under the Apache License.

            In addition to a Struts distribution, you will need to ensure that you have downloaded and installed all of the prerequisite software applications. Then, follow the appropriate instructions to install and use a Struts binary distribution in your web application or for building Struts from the source distribution.

            The latest development build of Struts is available here in a convenient binary distribution and also with complete source code.

            Development builds are being reviewed for quality by the Struts community. When a build is judged "ready for prime time", it is promoted to "General Availability" status and may be made the "Best Available" release.

            For developers who are helping to develop Struts, or who just want "the latest bits", the latest development version is made available each morning. Use at your own risk!

            If you are building Struts from source, be sure to refer to the Installation page in the User Guide for prerequisites. There are several JARs from the Jakarta Commons project that are required to build Struts.

            If you are interested in the Tag Library Descriptor (TLD) files, they are maintained in the /conf/share folder of the main repository.

            Also be sure to check the Release Notes for the nightly builds so you know what you are getting!

            Access to the source repository for Struts is available through both web browser and Subversion client interfaces.

            Next: Using Struts

            libstruts1.2-java-1.2.9/doc/announce.xml0000644000175000017500000004103410404045212020553 0ustar arnaudarnaud00000000000000 Announcements

            31 March 2005 - New Struts PMC Chair

            Martin Cooper has been appointed Struts PMC Chair by the ASF Board at their February 2005 meeting.

            Craig McClanahan stepped down as the Struts PMC Chair in February 2005. In Craig's words "I will continue to be active, but it's time for someone else to take the administrative responsibilities.".

            The Struts PMC nominated Martin Cooper as their preferred choice for the Struts PMC Chair to the ASF Board which was approved unanimously. Minutes of the ASF Board meeting should be available here in due course.


            12 Dec 2004 - Struts 1.2.6 (Beta)

            The Struts team is pleased to announce the release of Struts 1.2.6 Beta. This release includes minor new functionality, and a number of fixes for bugs which were reported against previous versions.

            The binary, source and library distributions are available from the Struts download page. The Release Notes are available on the Struts web site.


            19 Sep 2004 - Struts 1.2.4 (General Availability)

            The Struts team is pleased to announce the release of Struts 1.2.4 for General Availability. This release includes significant new functionality, as well as numerous fixes for bugs which were reported against the previous release, and supersedes the earlier 1.1 version as the latest official release of Struts from The Apache Software Foundation.

            The binary, source and library distributions are available from the Struts download page. The Release Notes are available on the Struts web site.


            31 Aug 2004 - Struts 1.2.2 (General Availability)

            The Apache Struts team is proud to announce the release of Struts 1.2.2. This release includes many new enhancements and features as well as numerous bug fixes since the last generally available release (1.1). This release supersedes the earlier 1.1 version as the latest official release of The Apache Struts framework.

            The binary, source, and library distributions are available at

            The library distribution contains only the requisite JARs, without the documentation or example applications.

            We invite your comments on how well this release works with your own applications. Based on feedback from the Struts community, this release may be dubbed "ready for prime time" and promoted to "General Availabilty" quality.

            Please note that Struts now uses "Tomcat-style" releases. If the feedback on this release were positive, Struts 1.2.1 may be promoted directly to "GA", without creating yet-another distribution. If a serious problem were found and fixed, then we will issue Struts 1.2.2 and try again.

            11 Jul 2004 - Struts 1.2.1 (Beta) Available

            The Struts team announces the release of Struts 1.2.1, currently ranked at Beta quality.

            This release removes many features deprecated in prior releases (Struts 1.1 and Struts 1.0.2) and also provides several new features. Fixes to known problems have been applied. More detail is available at:

            The binary, source, and library distributions are available at

            The library distribution contains only the requisite JARs, without the documentation or example applications.

            We invite your comments on how well this release works with your own applications. Based on feedback from the Struts community, this release may be dubbed "ready for prime time" and promoted to "General Availabilty" quality.

            Please note that Struts now uses "Tomcat-style" releases. If the feedback on this release were positive, Struts 1.2.1 may be promoted directly to "GA", without creating yet-another distribution. If a serious problem were found and fixed, then we will issue Struts 1.2.2 and try again.

            30 Jun 2003 - Struts 1.1 Final released

            The Struts team is proud, and extremely pleased, to announce the Final release of Struts 1.1. This release includes significant new functionality, as well as numerous fixes for bugs which were reported against the previous release, and supersedes the earlier 1.0.2 version as the latest official release of Struts from the Apache Software Foundation.

            The binary distribution is available at: http://www.apache.org/dist/jakarta/struts/binaries/

            and the source distribution is available at: http://www.apache.org/dist/jakarta/struts/source/

            In addition, the library distribution, which contains updated binaries without the sample applications, is available at:

            http://www.apache.org/dist/jakarta/struts/library/

            Details of the changes in this release are available in the Release Notes,which can be found here:

            http://jakarta.apache.org/struts/userGuide/release-notes-1.1.html


            23 Feb 2003 - Struts 1.1 Release Candidate 1 Released

            The Struts team is proud to announce the release of Struts 1.1 Release Candidate 1. This release includes some new functionality, as well as fixes for a number of bugs which were reported against earlier versions. The Struts Team believes that this release is ready for prime time, hence its designation as a release candidate.

            The binary distribution is available at:

            http://www.apache.org/dist/jakarta/struts/binaries/

            and the source distribution is available at:

            http://www.apache.org/dist/jakarta/struts/source/

            In addition, the library distribution, which contains updated binaries without the sample applications, is available at:

            http://www.apache.org/dist/jakarta/struts/library/

            Details of the changes in this release are available in the Release Notes, which can be found here:

            http://jakarta.apache.org/struts/userGuide/release-notes-1.1-rc1.html


            31 Dec 2002 - Struts 1.1 Beta 3 Released

            The Struts team is proud to announce the release of Struts 1.1 Beta 3. This release includes significant new functionality, while retaining full backwards compatibility with earlier versions of Struts. It also incorporates fixes for a number of bugs which were reported against earlier versions.

            The binary distribution is available at:

            http://www.apache.org/dist/jakarta/struts/binaries/

            and the source distribution is available at:

            http://www.apache.org/dist/jakarta/struts/source/

            In addition, the library distribution, which contains updated binaries without the sample applications, is available at:

            http://www.apache.org/dist/jakarta/struts/library/

            Details of the changes in this release are available in the Release Notes, which can be found here:

            http://jakarta.apache.org/struts/userGuide/release-notes-1.1-b3.html


            12 Aug 2002 - Struts 1.1 Beta 2 Released

            The Struts team is proud to announce the release of Struts 1.1 Beta 2. This release includes significant new functionality, while retaining full backwards compatibility with earlier versions of Struts. It also incorporates fixes for a number of bugs which were reported against earlier versions.

            The binary distribution is available at:

            http://jakarta.apache.org/builds/jakarta-struts/release/v1.1-b2/

            and the source distribution is available at:

            http://jakarta.apache.org/builds/jakarta-struts/release/v1.1-b2/src/

            In addition, the library distribution, which contains updated binaries without the sample applications, is available at:

            http://jakarta.apache.org/builds/jakarta-struts/release/v1.1-b2/lib/

            Details of the changes in this release are available in the Release Notes, which can be found here:

            http://jakarta.apache.org/struts/userGuide/release-notes-1.1-b2.html


            19 Mar 2002 - Struts 1.1 Beta 1 Released

            The Struts team announces the release of Struts 1.1 Beta 1. This release includes substantial new functionality, while retaining full backwards compatibility with earlier versions of Struts. It also incorporates fixes for a number of bugs which were reported against earlier versions.

            The binary distribution for this release is available here and the source distribution is available here. In addition, a library distribution, which consists of a minimal binary distribution, without sample web applications or additional code, is available here.


            11 Feb 2002 - Struts 1.0.2 Released

            The Struts team announces the release of Struts 1.0.2. This release is a bug fix only release, which fixes a compatibility problem inadvertently introduced with the previous 1.0.1 release.

            The binary distribution for this release is available here and the source distribution is available here. In addition, a library distribution, which consists of a minimal binary distribution, without sample web applications or additional code, is available here.


            12 Jan 2002 - Struts 1.0.1 Released

            The Struts team is proud to announce the release of Struts 1.0.1. This release is primarily a bug fix release, which fixes a number of known problems with the previous 1.0 release.

            The binary distribution for this release is available here and the source distribution is available here. In addition, a library distribution, which consists of a minimal binary distribution, without sample web applications or additional code, is available here.


            15 Jun 2001 - Struts 1.0 Released

            The production release of Struts 1.0, an open source framework for building Web applications, is now available for download at jakarta.apache.org. Struts encourages application architectures based on the Model-View-Controller (MVC) pattern and provides services common to most Web applications. Struts helps developers deploy products that are reliable, scaleable, and easier to maintain.

            The Struts framework offers services in three primary areas:

            * A controller servlet to dispatch requests to specific Action classes (provided by the application developer).
            * JSP custom tags to help developers create interactive form-based applications.
            * Utility classes for XML parsing, automatic JavaBean population, and internationalization of prompts and messages.

            Struts' support for internationalization builds on top of the Java Locale API, and have made it a popular choice for applications worldwide. Struts contributors include developers from Australia, France, Russia, and other parts of the globe.

            In addition to the Struts official distribution, several third-party libraries are already available, which offer enhanced support for JSP templates, HTML form validation, and automatic JavaBean creation. Struts has also been integrated with the Expresso Framework distributed by JCorporate Ltd. (jcorporate.com).

            Struts can be used with a J2EE Application server to deploy distributed applications, but will run under any compliant Servlet container (Servlet API 2.2+, JSP 1.1+), including Tomcat 3.2 or later. In fact, Struts is already used as an informal compliance test for Java Servlet containers and J2EE Application servers

            The Struts project was founded in May 2000 by Craig McClanahan. McClanahan is also the lead developer of Tomcat 4.0, Sun's reference implementation for Java Servlet and ServerPage containers. Both Tomcat and Struts are open source available under the Apache Software License, and may be downloaded at jakarta.apache.org.

            Twenty-six independent developers contributed to the creation of Struts 1.0, with the help of over 1300 subscribers to the Struts mailing lists.


            Next: User and Developer Guides

            libstruts1.2-java-1.2.9/doc/bylaws.xml0000644000175000017500000002517610404045226020264 0ustar arnaudarnaud00000000000000 Project Management Committee Bylaws

            Struts is a Project of the Apache Software Foundation (ASF), formed by a resolution of the ASF Board of Directors. As an ASF Project, Struts is subject to the ASF Bylaws and the direction of the ASF Board.

            The roles and responsibilities that people can assume in the project are based on merit. Everybody can help no matter what their role. Those who have been longterm or valuable contributors to the project can earn the right to commit directly to the source repository and to cast binding votes during the decision-making process.

            Users. Users are the people who use the products of the Project. People in this role aren't contributing code, but they are using the products, reporting bugs, making feature requests, and such. This is by far the most important category of people as, without users, there is no reason for the Project. When a user starts to contribute code or documentation patches, they become a Contributor.

            Contributors. Contributors are the people who write code or documentation patches or contribute positively to the project in other ways. When a volunteer's patch is applied, the contribution is recognized in the version control log.

            Committers. Contributors who give frequent and valuable contributions to a subproject of the Project can have their status promoted to that of a "Committer" for that subproject. A Committer has write access to the source code repository. Committer status is granted by the Project Management Committee by majority vote.

            Project Management Committee (PMC). Committers and other volunteers who frequently participate with valuable contributions may have their status promoted to that of a "Project Management Committee Member". The PMC is responsible for the day-to-day management of the Project.

            The Vice President is appointed by the ASF Board. The Vice President is assisted by the Project Management Committee (PMC) and also serves as the PMC chair. The PMC may nominate new members. Nominees may then be approved with a 3/4 majority vote of the PMC. Membership can be revoked by a unanimous vote of all the active PMC members other than the member in question. The list of active PMC members can be found on our Volunteers page.

            The PMC is responsible for the day-to-day management of the Struts Project. The PMC oversees all changes made to the codebase. The PMC must ensure that all code under a Apache Struts repository is the lawful property of the Foundation and may be distributed under the Apache Software License. All releases of a Struts subproject must be sanctioned by the Project Management Committee.

            Subprojects are the Project's unit of release. Each subproject should represent an implementation of the Struts core or a related component. Each subproject should focus on creating, maintaining, and releasing a single software product or "deliverable".

            All PMC Members have voting rights in all subprojects. Members not familiar with a subproject codebase may abstain from any given vote. All Committers have write access to all subprojects. Subprojects are units of release, not units of work.

            PMC members may propose the creation of new subprojects. Proposals are to contain the scope of the project, identify the initial source from which the project is to be populated, identify any mailing lists or repositories, if any, which are to be created. Creation of a new subproject requires approval by a 3/4 majority vote of the PMC.

            All Volunteers are encouraged to participate in decisions, but the decision itself is made by the Project Management Committee. The Project is a "Minimum Threshod Meritocracy".

            Any subscriber to the list may vote on any issue or action item. Votes from Contributors and Committers are especially welcome. However, the only binding votes are those cast by a PMC Member.

            The act of voting carries certain obligations. Voters are not only stating their opinion, they are also agreeing to help do the work.

            Each vote can be made in one of three flavors:

            +1 "Yes," "Agree," or "the action should be performed." On some issues this is only binding if the voter has tested the action on their own system(s).
            +/-0 "Abstain," "no opinion". An abstention may have detrimental effects if too many people abstain.
            -1

            "No." On issues where consensus is required, this vote counts as a veto. All vetos must contain an explanation of why the veto is appropriate. Vetos with no explanation are void. A veto cannot be overruled. If you disagree with the veto, you should lobby the person who cast the veto. Voters intending to veto an action item should make their opinions known to the group immediately so that the problem can be remedied as early as possible.

            If a Committer tries to "override" a veto by restoring a vetoed change, the PMC may ask the infrastructure team to revoke that Committer's write privileges.

            An action requiring consensus approval must receive at least 3 binding +1 votes and no binding vetos. An action requiring majority approval must receive at least 3 binding +1 votes and more +1 votes than -1 votes. All other action items are considered to have lazy approval until somebody votes -1, after which point they are decided by either consensus or majority vote, depending on the type of action item.

            Voting represent consensus and votes are never final. Circumstances change, and so may votes. A veto may be converted to a +1 after discussion, and likewise a +1 may be converted to a -1. By convention, Committers should allow a vote to circulate for 72 hours before taking action.

            All decisions revolve around "Action Items." Action Items consist of the following:

            • Long Term Plans
            • Short Term Plans
            • Product Changes
            • Showstoppers
            • Release Plan
            • Release Grade

            Long term plans are simply announcements that group members are working on particular issues related to the Project. These are not voted on, but Committers and PMC Members who do not agree with a particular plan, or think that an alternative plan would be better, are obligated to inform the group of their feelings.

            Short term plans are announcements that a volunteer is working on a particular set of documentation or code files with the implication that other volunteers should avoid them or try to coordinate their changes.

            All product changes to the repository are subject to lazy consensus.

            Showstoppers are issues that require a fix be in place before the next public release. They are listed in the status file in order to focus special attention on these problems. An issue becomes a showstopper when it is listed as such in the status file and remains so by lazy consensus.

            A release plan must be used to keep all volunteers aware of when a release is desired, whether it will be a major, minor, or milestone release, who will be the release manager, when the repository will be tagged to create the distribution, and other assorted information to keep volunteers from tripping over each other. A release plan must be announced to the DEV list. Lazy majority decides each issue in a release plan.

            After a proposed release is built, it must be tested and classified before being released to the general public. The proposed release may be assigned "Alpha", "Beta" or "General Availability" classifications by majority vote. Once a release is classified by the PMC Members, it may be distributed to the general public on behalf of the Foundation. Distributions may be reclassified or withdrawn by majority vote, but the release number may not be reused by another distribution.

            Next: Release Guidelines

            libstruts1.2-java-1.2.9/doc/download.cgi0000644000175000017500000000036210404045204020516 0ustar arnaudarnaud00000000000000#!/bin/sh # Wrapper script around mirrors.cgi script # (we must change to that directory in order for python to pick up the # python includes correctly) cd /www/www.apache.org/dyn/mirrors /www/www.apache.org/dyn/mirrors/mirrors.cgi $* libstruts1.2-java-1.2.9/doc/download.xml0000644000175000017500000001416310404045240020560 0ustar arnaudarnaud00000000000000 Downloading - The Apache Struts Web Application Framework Martin Cooper

            Use the links below to download Apache Struts from one of our mirrors. You must verify the integrity of the downloaded files using signatures downloaded from our main distribution directory.

            [if-any logo] logo [end] The currently selected mirror is [preferred]. If you encounter a problem with this mirror, please select another mirror. If all mirrors are failing, there are backup mirrors (at the end of the mirrors list) that should be available.

            Other mirrors:

            You may also consult the complete list of mirrors.

            Struts 1.2.8 is the latest production release of Struts. It is available in a binary distribution, a source distribution, and a minimal library distribution.

            It is essential that you verify the integrity of the downloaded files using the PGP or MD5 signatures.

            The PGP signatures can be verified using PGP or GPG. First download the KEYS as well as the asc signature file for the particular distribution. Make sure you get these files from the main distribution directory, rather than from a mirror. Then verify the signatures using

            % pgpk -a KEYS
            % pgpv ${filename}.tar.gz.asc
            or
            % pgp -ka KEYS
            % pgp ${filename}.tar.gz.asc
            or
            % gpg --import KEYS
            % gpg --verify ${filename}.tar.gz.asc

            Alternatively, you can verify the MD5 signature on the files. A Unix program called md5 or md5sum is included in many Unix distributions. It is also available as part of GNU Textutils. Windows users can get binary md5 programs from here, here, or here.

            libstruts1.2-java-1.2.9/doc/index.xml0000644000175000017500000002021510404045210020050 0ustar arnaudarnaud00000000000000 The Apache Struts Web Application Framework Craig R. McClanahan Ted Husted Martin Cooper James Holmes David Graham James Mitchell

            Welcome to Struts! The goal of this project is to provide an open source framework for building Java web applications.

            The core of the Struts framework is a flexible control layer based on standard technologies like Java Servlets, JavaBeans, ResourceBundles, and XML, as well as various Jakarta Commons packages. Struts encourages application architectures based on the Model 2 approach, a variation of the classic Model-View-Controller (MVC) design paradigm.

            Struts provides its own Controller component and integrates with other technologies to provide the Model and the View. For the Model, Struts can interact with standard data access technologies, like JDBC and EJB, as well as most any third-party packages, like Hibernate, iBATIS, or Object Relational Bridge. For the View, Struts works well with JavaServer Pages, including JSTL and JSF, as well as Velocity Templates, XSLT, and other presentation systems.

            The Struts framework provides the invisible underpinnings every professional web application needs to survive. Struts helps you create an extensible development environment for your application, based on published standards and proven design patterns.

            Struts is a project of the The Apache Software Foundation. The official Struts home page is at http://struts.apache.org/.

            Struts is a volunteer project and all support for the framework is provided by unpaid volunteers. This documentation bundle and the mailing lists are the primary ways to learn how to use Struts. The next few pages are devoted to helping you understand what resources are available to you. Since Struts is a volunteer project, and our resources are limited, it is important that we first help you help yourself.

            A web application uses a deployment descriptor to initialize resources like servlets and taglibs. The deployment descriptor is formatted as a XML document and named "web.xml". Likewise, Struts uses a configuration file to initialize its own resources. These resources include ActionForms to collect input from users, ActionMappings to direct input to server-side Actions, and ActionForwards to select output pages.

            Here's a simple Struts configuration (struts-config.xml) for a login workflow:

            
                
                
                    
                        
                    
                    
                        
                        
                        
                            
                            
                        
                        
                            
                        
                    
                    
                
                ]]>

            There are several other resources you can specify in Struts configuration files. You can specify validations for the ActionForms in an XML descriptor, using the Struts Validator. Another extension, Tiles, helps you build pages from smaller fragments.

            Struts is an extensible framework. Every class deployed by Struts can be replaced by your own default class. The properties of your default class can be set using the Digester's set-property feature. This is one reason why there are so many contributor extensions for Struts. Struts provides a base framework, but you can still write your application your way.

            For more about Struts and its underlying technologies, see the User Guide and the Developer Guides.

            No. If you need to write a very simple application, with a handful of pages, then you might consider a "Model 1" solution that uses only server pages.

            But, if you are writing a more complicated application, with dozens of pages, that need to be maintained over time, then Struts can help. For more about whether Model 1 or or MVC/Model 2 is right for you, see Understanding JavaServer Pages Model 2 architecture and Issues in Struts Adoption.

            Next: Learning About Struts

            What about JSTL and JavaServer Faces?

            libstruts1.2-java-1.2.9/doc/learning.xml0000644000175000017500000002660410404045204020553 0ustar arnaudarnaud00000000000000 Learning - The Apache Struts Web Application Framework Craig R. McClanahan Ted Husted Martin Cooper James Holmes

            The official documentation for the framework is provided both online and as a self-installing WAR in the distribution. The struts-documentation.war includes our

            You are invited to preview the documentation online and then install the application locally for closer study.

            NOTE: If you are previewing the documentation on the website, most of the links in this section will refer to the Nightly Build. When learning about Struts, be sure to refer to the documentation for the version you are actually using. The documentation is bundled with each distribution as an application that you can install and use locally.

            The concise Struts User Guide introduces the Model-View-Controller architecture, and how it relates to the major components of Struts. If you want to find out "How Struts works", this is the place to start. Along with an architectural overview, the User Guide also includes detailed installation instructions and release notes for each version of the framework.

            Our Developer Guides are detailed technical references to the extensions and components provided in the Struts distribution. Included are package overviews and API reference for each of the Struts taglibs, along with guides to the Struts Utilities and the Struts Validator. The Developer Guides are designed as a day-to-day reference to help you get the most out of the standard packages. Links to the various Developer Guides are provided as part of User Guide menu.

            For more detail about a specific class or package, the Struts Javadocs are surprisingly comprehensive and carefully maintained. It is strongly recommended that you refer to the Javadoc for each class as you begin to use it. This will help ensure that important features and options are not overlooked. What you don't know, can't help you.

            The Struts FAQs are designed to fill in any small gaps left by the Javadocs or the User and Developer Guides.

            • The Kickstart FAQ answers the most common non-technical questions people first ask about Struts.
            • The Struts Newbie FAQ answers the most common technical questions asked by first-timer Struts developers.
            • The How to Help FAQ answers the most common questions about contributing to the Apache Struts project.

            The Howto Guides are designed to help you get started with some of the optional extensions and components available for Struts. These include topics like using the Secure Socket Layer (SSL) protocol with Struts and how to unit test your Struts applications.

            The Struts Wiki is a relatively new addition to the Struts documentation. All members of the Struts Community are invited to post comments to the Wiki, as well as the User List. The Wiki is best suited for threads that you think are of lasting importance, while the mailing lists are best suited for incidental questions.

            If you have any comments on the pages you see here, they can be posted to the Wiki by following the link on the bottom of any page.

            For more help, you might try the JGuru Struts knowledgebase at the JGuru FAQ and Forum.

            Of course, the only true documentation is the code itself. If you have any questions about how Struts actually works, do not hesitate to use the source. For the complete, buildable source code to the entire Struts framework, see the "src" folder in your source distribution.

            To help you see how it all fits together, several example applications are bundled with the Struts distribution:

            • Blank - A simple template for starting new Struts applications.
            • Documentation - The Struts documentation bundle, as seen on the website.
            • MailReader - The original Struts example application. Try me first!
            • Examples - Various demonstration applications combined as separate modules:
              • Exercise-Taglib - A set of test pages that also demonstrate use of the custom tags.
              • Tiles-Doc - Extensive demonstration of Tiles extension.
              • Upload - Demonstrates using the file upload facilities. (Based on Commons Upload.)
              • Validator - Demonstrates using the Validator extension.

            These applications are provided as standalone WARs in the binary distribution. The source code for each application is available under WEB-INF/src in the binaries and under the web package in the source distribution.

            There are also many third-party example applications available for study, including these:

            • AppFuse - Demonstrates using XDoclet with Struts, along with different security packages and Hibernate for database persistence.
            • JPetStore - A streamlined version of the Java Petstore application implemented with Struts and iBATIS database layer.
            • LogWeb - A Struts webapp for configuring Log4J at runtime within a servlet container.

            The Struts Mailing Lists are a treasure trove of useful, interactive information. The user list tends to carry a high volume, so always check the published documentation and the MAILING LIST ARCHIVE before posting a new question. Like as not, it's already been asked and answered.

            If you really can't find the answer to your question in the FAQs or list archive, you can post your query to the Struts User list -- BUT YOU MUST SUBSCRIBE TO THE USER LIST OR THE USER LIST DIGEST BEFORE POSTING.

            Please note that the Struts User list enjoys a "casual friday" policy. More off-topic messages are tolerated on Fridays so long as the message is prefixed with the token [FRIDAY]. If you'd rather not be troubled by these postings, please set your mail filter accordingly. Posting [FRIDAY] articles on any other weekday is strongly discouraged. We thank you for your cooperation.

            The Struts Wiki is a relatively new addition to our documentation. Any member of the community (that means you!) is invited to post new material to the Wiki. However, the Wiki is not the place to ask incidental questions. All support questions should be directed to the Struts User list or other support forum.

            There is also a set of Wiki pages devoted to comments on the documentation. To comment on the documentation, follow the "Comments?" link at the bottom of any page.

            The Roadmap page outlines our tentative plans for future development.

            Struts has attracted a large and robust community of developers, which have created a vast number of Struts related resources. Several pages on our wiki are devoted to listing Struts resources.

            The Apache Software Foundation does not provide printed manuals, but several third-party books about Struts are available. A current list of books about Struts is maintained as a wiki page.

            Next: Acquiring Struts

            libstruts1.2-java-1.2.9/doc/mail.xml0000644000175000017500000002071610404045224017676 0ustar arnaudarnaud00000000000000 Mailing List Guidelines

            A mailing list is an electronic discussion forum that anyone can subscribe to. When someone sends an email message to the mailing list, a copy of that message is broadcast to everyone who is subscribed to that mailing list. Mailing lists provide a simple and effective communication mechanism. With potentially thousands of subscribers, there is a common set of etiquette guidelines that you should observe. Please keep on reading.

            Respect the mailing list type

            • The "User" list is where you can send questions and comments about configuration, setup, usage and other "user" types of questions.
            • The "Developer" (or "Dev") list is where you can send questions and comments about the actual software source code and general "development" types of questions.

            Some questions are appropriate for posting on both the "user" and the "developer" lists. In this case, pick one and only one. Do not cross post.

            Asking a configuration question on the developers list is frowned upon because developers' time is as precious as yours. By contacting them directly instead of the user base you are abusing resources. In fact, it is unlikely that you will get a quicker answer, if at all.

            Join the lists that are appropriate for your discussion.
            Please make sure that you are joining the list that is appropriate for the topic or product that you would like to discuss. For example, please do not join the Struts mailing list and ask questions about Tomcat. Instead, you should join the Tomcat User list and ask your questions there.

            Ask smart questions.
            Every volunteer project obtains its strength from the people involved in it. You are welcome to join any of our mailing lists. You can choose to lurk, or actively participate; it's up to you. The level of community responsiveness to specific questions is generally directly proportional to the amount of effort you spend formulating your question. Eric Raymond and Rick Moen have even written an essay entitled "Asking Smart Questions" precisely on this topic.

            Keep your email short and to the point.
            If your email is more than about a page of text, chances are that it won't get read by very many people. It is much better to try to pack a lot of informative information (see above about asking smart questions) into as small of an email as possible. If you are replying to a previous email, it is a good idea to only quote the parts that you are replying to and to remove the unnecessary bits. This makes it easier for people to follow a thread as well as making the email archives easier to search and read.

            Do your best to ensure that you are not sending HTML or "Stylelized" email to the list.
            If you are using Outlook or Outlook Express or Eudora, chances are that you are sending HTML email by default. There is usually a setting that will allow you to send "Plain Text" email. If you are using Microsoft products to send email, there are several bugs in the software that prevent you from turning off the sending of HTML email. Please read this page as well...

            Do not cross post messages.
            In other words, pick a mailing list and send your messages to that mailing list only. Do not send your messages to multiple mailing lists. The reason is that people may be subscribed to one list and not to the other. Therefore, some people will only see part of the conversation.

            Watch where you are sending email.. The majority of our mailing lists have set the Reply-To to go back to the list. That means that when you Reply to a message, it will go to the list and not to the original author directly. The reason is because it helps facilitate discussion on the list for everyone to benefit from. Be careful of this as sometimes you may intend to reply to a message directly to someone instead of the entire list. The appropriate contents of the Reply-To header is an age-old debate that should not be brought up on the mailing lists. You can examine opposing points of view condemning our convention and condoning it. Bringing this up for debate on a mailing list will add nothing new and is considered off-topic.

            Archives Carrying Struts Lists

            Now that you've read the guidelines (you have read the rest of the page, haven't you?), please subscribe to whichever Struts lists are of interest.

            • STRUTS-ANNOUNCE Mailing List - Subscribe to this list to receiving only major announcements regarding Struts. This is a low-volume, read-only list.
              [Subscribe]
              [Unsubscribe]
            • STRUTS-USER Mailing List - Subscribe to this list to communicate with other developers that are using Struts for their own applications, including questions about the installation of Struts, and the usage of particular Struts features.
              [Subscribe]
              [Unsubscribe]
            • STRUTS-DEV Mailing List - Subscribe to this mailing list to communicate with other developers interested in expanding and improving the functionality supported by Struts itself.
              [Subscribe]
              [Unsubscribe]
            • STRUTS-USER Digest - Subscribe to this list to receive a daily digest of the Struts USER list.
              [Subscribe]
              [Unsubscribe]
              If you subscribe to the Digest, you can also post to the User list. (Just don't quote the entire Digest mailing in a reply!)
            • STRUTS-USER Newsgroup - The User list is also mirrored online, so that you can participate without subscribing to the regular mailing list.
              [Struts Newsgroup]
              This is another way to post to the User list without subscribing to the regular list.

            Back to: Using Struts

            libstruts1.2-java-1.2.9/doc/project.xml0000644000175000017500000000554310404045220020417 0ustar arnaudarnaud00000000000000 Apache Struts Web Application Framework libstruts1.2-java-1.2.9/doc/release-checklist.xml0000644000175000017500000000772410404045222022345 0ustar arnaudarnaud00000000000000 Release Checklist - The Apache Struts Web Application Framework
                  = Struts x.x.x Release =
            
                  == Info ==
            
                   1. Struts [http://struts.apache.org/releases.html#Releases 
                      Release Guidelines]
                   
                   2. [http://nagoya.apache.org/wiki/apachewiki.cgi?SigningReleasesHow 
                      Signing Releases]
             
                   3. Apache [http://apache.org/dev/mirrors.html Mirroring Guidelines]
                   
                  == Release Manager ==
            
                  The release manager is '''${RELEASE_MANAGER}'''
            
                  == Special Issues ==
            
                   1. ${ISSUES}
            
                  == Outstanding Bug Review ==
            
                  || '''ID''' || '''Summary''' || '''Component''' || '''Status''' ||
                  || ${ID} || ${SUMMARY} || $COMPONENT} || ${STATUS} ||
            
                  == Preparation Checklist ==
            
                  || '''#''' || '''Description''' || '''Status''' ||
                  || 1. || ${DESCRIPTION} || ${STATUS} ||
                  
                  The Commons [http://jakarta.apache.org/commons/releases/prepare.html 
                  Preparation Guide] is a helpful preparation backgrounder, but Commons
                  uses the "beta/release-candidate/final" process.
            
                  Likewise, the [http://httpd.apache.org/dev/release.html 
                  HTTPD Release Guidelines] is a helpful "overall process" backgrounder,
                  but HTTPD does not use a test-build stage.
            
                  Dependency versions for this release:
            
                  || '''Dependency''' || '''Version''' || '''Status''' ||
                  || ${DEPENDENCY} || ${VERSION} || ${STATUS} ||
            
                  == Testing Checklist ==
            
                  === Testing Summary ===
            
                  || '''#''' || '''Description''' || '''Completed''' ||
                  || 1. || Run Unit Test targets  || ${STATUS} ||
                  || 2. || Run Cactus Tests (see below) || ${STATUS} ||
                  || 3. || Play test bundled applications (TC 4.x) || ${STATUS} ||
                  
                  TODO: A Canoo WebTest for the applications would be great!
            
                  === Cactus Tests ===
            
                  || '''#''' || '''J2SE Version''' || '''Tomcat Version''' ||  '''Status''' ||
                  || 1. || J2SE 1.3.x || Tomcat 4.x || ${STATUS} ||
                  || 2. || J2SE 1.4.x || Tomcat 4.x || ${STATUS} ||
                  || 3. || J2SE 1.3.x || Tomcat 5.x || ${STATUS} ||
                  || 4. || J2SE 1.4.x || Tomcat 5.x || ${STATUS} ||
            
                  == Test Build Checklist (A) ==
            
                  See also Commons [http://jakarta.apache.org/commons/releases/release.html 
                  Step-by-Step Guide]
            
                  || '''#''' || '''Description''' || '''Completed''' ||
                  || A1. || Tag release in cvs: ${STRUTS_x_x_x} || ${STATUS} ||
                  || A2. || Run Distribution Target || ${STATUS} ||
                  || A3. || Upload Distribution to cvs.apache.org:/www/cvs.apache.org/dist/struts/x.x.x || ${STATUS} ||
                  || A4. || Post release-quality vote on dev@ and user@ lists || ${STATUS ||
            
                  == Vote (A) ==
            
                  || ${PMC_MEMBER} || ${GRADE} ||
                  
                  If release vote fails, including for a lack of quorum, remove from dist 
                  folder.      
            
                  == Point Release Checklist (B) ==
            
                  || B1. || Create Sums and Sign Distributions [2] || ${STATUS} ||
                  || B2. || Request new Bugzilla version level (x.x.x) || ${STATUS} ||
                  || B3. || Update "Acquiring" page on website and Test Downloads || ${STATUS} ||
            
                  == Vote (B) ==
            
                  || ${PMC_MEMBER} || ${GRADE} ||
                  
                  Voting continues until a GA or "withdraw" vote passes, or there is a
                  subsequent release.
            
                  == General Availability Checklist (C) ==
            
                  || '''#''' || '''Description''' || '''Completed''' ||
                  || C1. || Copy Distribution to Mirrored Directories [3] || ${STATUS} ||
                  || C2. || Deploy JAR to Apache Java-Repository || ${STATUS} ||
                  || C3. || After 24 hours, update "Acquiring" page on website || ${STATUS} ||
                  || C4. || Post an announcement to lists and website || ${STATUS} ||
                  ----
              
            libstruts1.2-java-1.2.9/doc/releases.xml0000644000175000017500000002364110404045230020554 0ustar arnaudarnaud00000000000000 Release Guidelines - The Apache Struts Web Application Framework Ted Husted

            This document describes the Struts release process and our coding conventions. Both stable and development releases are available for download.

            A point release should be made before and after any product change that is not a "fully-compatible change" (see link). This includes moving a dependency from an internal package to an external product, including products distributed through the Jakarta Commons. We should place any fully-compatible changes in the hands of the community before starting on a change that is only "interface" or "external-interface" compatible.

            Any release should follow the same general process used by the Jakarta Tomcat team and must observe the Apache Mirroring guidelines. See also Signing Releases.

            Additional remarks:

            • Every committer is encouraged to participate in the release process, either as the release manager or a helper. Committers may also share the release manager role.
            • The release process can seem daunting when you review it for the first time. But, essentially, it breaks down into four phases of just a few steps each:
              • Rolling - Bugzilla, dependencies, release notes, JAR manifest, licenses, copyrights, and build (using the release target).
              • Testing - JUnit, Cactus, web apps (for all "supported" containers).
              • Voting - Upload test build to internal directory, post majority vote on DEV list as to release grade: Alpha, Beta, General Availability.
              • Distributing - Checksum, sign, mirror, update download page, announce.
            • Committers are required to post a release plan before tagging the repository and should wait the traditional 72 hours before proceeding.
            • A checklist format can be used for the release plan, to help step through the process. The plan may be maintained in the repository or on the Struts wiki.
            • Our dependencies on external JARs (including Commons JARs) should be in line with our own release status. Our nightly build can be dependant on another nightly build. Our beta can be dependant on another beta (or "release candidate"), but should avoid a dependance on a nightly build. Our General Availability release may only have dependencies on other GA, final, or stable releases.
            • Use your own discretion as to detail needed by the Release Notes. A high-level description of the changes is more important than providing uninterpreted detail. At a minimum, new features and deprecations should be summarized, since these are commonly asked questions. Ideally, the release notes should be maintained continuously for the nightly build so that we they do not need to be assembled at the last minute.
            • Try building the distribution under prior version of J2SE, if possible, to ensure that we are still backwardly-compatible. But, our distributions should be built using the latest production release of J2SE, to take advantage of all available compiler enhancements.
            • If you have multiple J2SE versions configured, run the JUnit and Cactus tests using the same configuration that will be used to build the distribution.
            • There is a "release" target in the buildfile that will zip and tar the distribution. Before uploading the distribution, extract the sample web applications and deploy the WARs under each of the "supported" containers (if you can). Play test each application under each container to be sure they operate nominally.
            • The test build can be posted to the internal distribution directory (cvs.apache.org/struts/) and announced to the Struts DEV and PMC lists (only!). Do not announce a test build on any other Apache lists or link to it from an Apache website.
            • If the test build is voted to Alpha, Beta, or GA status, the release can announced to the User list and linked from the website.
            • Any formal release may be submitted for mirroring. All GA releases must be mirrored.
            • After announcing a release, remember to update the Acquiring and Announcements pages. If the release is to be mirrored, wait at least 24 hours after submittal before making public announcements (as stated in the Apache Mirroring guidelines).
            • If a serious flaw if found in a test build or release, it may be withdrawn by a majority vote of the PMC and removed from ASF distribution channels.

            Source code and documentation contributed to the Struts repositories should observe the:

            as core references regarding the formatting of code and documentation.

            Clarifications

            • First, "Observe the style of the original". Resist the temptation to make stylistic changes for their own sake. But, if you must reformat code, commit style changes separately from code changes. Either change the style, commit, and then change the code, or vice- versa.
            • Set editors to replace tabs with spaces and do not trim trailing spaces. Tabs confound the version control alerts. Trimming trailing spaces creates unnecessary changes.
            • Specify imported classes (do not use .*).
            • Write all if/else statements as full blocks with each clause within braces, unless the entire statement fits on the same line.
            • Use FIXME:and TODO:tokens to mark follow up notes in code. You may also include your Apache username and the date.
            • Omit @authortags.
            • Use @sinceto document changes between Struts versions, as in @since Struts 1.1.
            • Wrap lines of code and JavaDoc at column 78. You can include a "comment rule" in the source to help with this.
              // ------------------------------------------------------------------------ 78
            • Please do your best to provide high-quality Javadocs for all source code elements. Package overviews (aka "Developer Guides") are also encouraged.
            • When working on a bugfix, please first write a JUnit test that proves the bug exists, and then use the test to prove the bug is fixed. =:0)
            • When working on an enhancement, please feel free to use test-driven design and write the test first <head-slap/>. For more about TDD, see the MockObjects project.
            • As files are updated from year to year, the copyright on each file should be extended to include the current year. You do not need to change the copyright year unless you change the file.Every source file should include the ASF copyright notice and current Apache License and copyright.
            • Provide high-level API compatibility for any changes made within the same major release series (#.x.x). Changes which adversely affect compatibility should be slotted for the next major release series (++#.x.x).
            • Our favorite books about programming are Design Patterns, Refactoring, and Code Complete (2d).
            • Our favorite book about open source development is the The Cathedral and the Bazaar.
            • Our favorite science fiction author is Robert Heinlein. TANSTAAFL.
              (Except on Friday, when we favor Douglas Adams. SLATFATF.)

            Next: Roadmap

            libstruts1.2-java-1.2.9/doc/roadmap.xml0000644000175000017500000005210110404045250020367 0ustar arnaudarnaud00000000000000 Roadmap - The Apache Struts Web Application Framework Craig R. McClanahan Ted Husted Steve Byrne

            This document outlines some of changes we expect to see in future releases of Struts.

            This document is provided for discussion purposes only. All releases and changes to the codebase are subject to a vote of the Struts PMC.

            The Struts development teams uses the Apache Bug Database (Bugzilla) to manage problem reports and enhancement requests. For your convenience, here are some common Bugzilla queries:

            Releases in the 1.x series will focus on refactoring of existing functionality, with a continued emphasis on backward compatibility.

            New features are being added to the Struts 1.x series, but only if backward compatability with the prior release can be retained. The 1.x API is evolving through a deprecate/replace/remove protocol. Developers are encouraged to stay current with the "best available" release and to observe deprecation warnings. Features are deprecated before removal, and deprecated features are ultimately removed.

            The 1.x series is being refactored into the Struts subproject and several dependant subprojects. Each subproject is expected to be dependant on the Struts core for necessary functionality. Otherwise, the subproject should be hosted in another venue, such as Jakarta Commons or Jakarta Taglibs.

            Popular third-party extensions that are in active use by the Struts Community may be considered as subprojects, such as those distributed through the Struts SourceForge site.

            Throughout the 1.x series, there will be a continued emphasis on expanding unit test coverage for the framework. Bug reports should include a failing test case when possible. Proposals for new features should include a working test suite. (Creating features through Test Driven Development is strongly encouraged.)

            Enhancement requests are logged in Bugzilla as they are suggested. The listing of an enhancement in Bugzilla does not imply that is being "planned", merely that some member of the community has suggested it, and the idea hasn't been ruled out (yet).

            Future release milestones are provided for enhancements which are being actively planned or developed but may not be ready for the very next release. If a report has not been tagged for a specific milestone by a working developer, then it may never be implemented. When developers (including non-Committers) are actually working on an enhancement, they should re-tag it for a specific release milestone, such as "1.3.1" or "1.3.2".

            If an enhancement has not been tagged for a specific target, feel free to start working on it yourself. Many of our best features have been contributed by developers, just like you. If you are working on an enhancement, post a note on the ticket that you are working on an enhancement and then post a patch as soon as possible. If the development effort doesn't succeed, post a note to the ticket explaining what problem you had creating the enhancement, so that other developers can explore alternatives.

            These are some general ideas we have about what may happen in the Struts 1.x series. This is a whiteboard and everything here is subject to change.

            • Struts 1.0.0 (complete) - Major refactoring of Struts internals to provide support for modules and a new "config" object series. Bundles Struts Tiles and Struts Validator into main distribution. The initial release of Struts EL is provided as an optional package.
            • Struts 1.2.4 (complete) - Continued refactorings of the Struts 1.x product series.
              • Removed deprecations created in the 1.0 to 1.1 timeframe, and prior
              • Added support for wildcard mappings.
              • Other minor enhancements, improvements, and refactorings
            • Struts 1.2.6 (complete) - Migrated repository to Subversion; update website.
            • Struts 1.2.x (pending) - Minor enhancements, improvements, and refactorings only, as needed. New features should be added to the 1.3.x series.
            • Struts 1.3.x (pending) - Enhancements to product base, based on existing features or codebases.
              • Divide distribution into subprojects
              • Complete support for Maven builds (pending)
              • Move core to "Struts Chain" Request Processor (now in Contrib)
              • Move to Commons Resources (if available)
              • Enhance all configs to extend one configuration element from another, as is done with Tiles Definitions
            • Struts 1.4.x - Enhancements to product base, based on undeveloped code.
              • Consider adding support for an Action context (which also might be based on the Commons Chain of Responsibility package).
              • Consider adding support for Porlets by specifying an alternate Request Processor catalog.
            • Other potential enhancements for the 1.x.x series

            Struts 2.x (aka Struts "Next Generation") will include broader enhancements. We anticipate that the implementation will utilize the Servlet 2.4 / JSP 2.0 platform, and perhaps Java 1.5, but may optionally support earlier platforms.

            We anticipate that Struts 2.x will rely on JSTL and the JavaServer Faces API as supporting technologies. However, the focus of the Struts framework will remain on the Controller aspect of a Model 2/MVC architecture. The core framework will continue to be both Model and View independent.

            Development of Struts 2.x will include taking a completely fresh look at the internal architecture. The goal for 2.x will be to incorporate everything we've learned in the past years of Struts usage, and create something even better. Development will follow current best practices, like Test Driven Development, and rely on technologies like Maven for project management.

            Of course, it is anticipated that the Struts team will continue to support the 1.x codebase for a long time with bugfixes and incremental enhancements. (Mainly because many of us will still be using it on our production sites!) Accordingly, it is anticipated that the development of the 2.x and 1.x series will occur in tandem. At some point, 2.x milestones may appear alongside new 1.x releases.

            As Struts 1.x evolves, some (or all) target features may overlap. Target features for Struts 2.x include:

            • Comprehensive unit test coverage for all core features
            • Enhanced support for using Struts in large team environments.
            • Transparent support for a portlet environment (JSR 168), with minimal-to-no changes in your business logic and pages.
            • Direct support for JSTL/JSF taglibs and the JSF API
            • Enhanced support for other presentation layers, such as XLST
            • Enhanced support for scriptable Actions, using technologies like BSF or Jelly
            • Refactoring for new technologies available on the Servlet 2.4/ JSP 2.0 platform

            An early proposal for one possible implementation of Struts 2.x, "Struts Jericho", is available in the contrib folder.

            There are three major issues with supporting JSR-168 (and I'm sure a bunch of smaller ones as well):

            • Struts APIs assume servlet API objects (ServletContext, ServletRequest, ServletResponse), whereas JSR-168 talks aboutPortletContext, PortletRequest, and PortletResponse. We'd either need to change the calling sequence for Action.execute() -- problematic for backwards compatibility -- or fake it somehow in a portlet environment.
            • The lifecycle of a portlet request is actually divided into two chunks -- processing and then rendering. From a Struts perspective, that means making sure that the first part of the request processor pipeline need to happen in the "process" part, and the forwarding to the resulting page needs to happen in the "render" part.
            • Today, Struts owns the process of calculating URLs for pages and actions. Because it's in a webapp, it knows exactly what to do for the developer. However, in a portlet container it's actually the portal server that manages URLs, so a Struts-based portlet would need to interact with the portlet APIs for this purpose.

            A strong goal should be that a Struts application should be usable either as a webapp or as a portlet, with little (ideally no) changes. Therefore, we should build whatever it takes to support this into the standard Struts distribution, which would then be used in both environments.

            Struts is providing support for JavaServer Faces through the Struts Faces Integration Library. The Struts Faces tablib allows developers to migrate pages to JSF but retain use of their Actions. Pages can be migrated on a one-by-one basis. The Struts Faces taglib is still under development, and a 1.0.x release is forthcoming.

            As JSF comes into broader use, it is expected that Struts developers will continue to offer enhancements to make it even easier to use Struts with JSF.

            The SourceForge MyFaces team is in the process of joining the Apache Software Founcation. Once the Apache MyFaces team has access to the Apache TCK, it is expected to be recognized as a certified JSF implementation.

            For more about Struts and JavaServer faces, see:

            Next: Source Repository

            Website updated from repository: 2004 OCT 23 by husted.

            Javadocs updated from repository: 2004 OCT 15 by husted.

            libstruts1.2-java-1.2.9/doc/struts.css0000644000175000017500000000623410404045216020310 0ustar arnaudarnaud00000000000000a { color: #023264; } body { background: #FFFFFF; color: #000000; margin: 0; padding: 20px 15px; } div.authors{ width: 150px; background: #EEEEFF; border: 1px solid #CCCCFF; color: #333333; margin: 2em 0 0; padding-bottom: 0.5em; } div.authors li { color: #023264; line-height: 1; margin: 0; padding: 0; } div.authors ul { list-style: none; margin: 0; padding: 0; } div.indent { padding: 0 4%; } div.notice { background: #00FFFF; border: 1px solid #000000; margin-left: 8%; padding: 0 2%; width: 80%; } h1, h2 , h3 { color: #FFFFFF; font-family: Arial, Helvetica, sans-serif; margin: 1em 0; } h1 a, h2 a, h3 a { color: #FFFFFF; } h1 { background: #023264; font-size: 1.2em; font-weight: bold; padding: 5px; } h2 { background: #023264; font-size: 1.1em; font-weight: normal; padding: 3px 5px; } h3 { background: #023264; font-size: 1em; font-weight: normal; padding: 2px 5px; } h4 { font-size: 1.1em; } hr { background: #CCCCCC; border: none; height: 1px; } hr.section { background: #023264; border: none; height: 1px; } img { border: none; } img.book { margin: 10px; } q { font-family: Arial, Helvetica, sans-serif; } table { border: 2px solid #CCCCCC; border-collapse: collapse; } table.noborder, table.noborder td, table.noborder td th { border: none; } table.tag-attributes{ width: 100%; } table.taglib-summary { width: 100%; } table.task-list { width: 100%; } td,th { border: 1px solid #CCCCCC; padding: 3px; } th.attribute { width: 15%; } thead { border: 2px solid #CCCCCC; background: #DDDDDD; color: #333333; font-family: Arial, Helvetica, sans-serif; } tr.evenRow { background: #F6F6F6; } .center { text-align: center; } .clear{ clear: both; } .deprecated { color: #FF0000; } .float-left { float: left; } .float-right { float: right; } .left { text-align: left; } .right{ text-align: right; } .since { font-style: italic; } .version { color: #999999; font: 0.7em Arial, Helvetica, sans-serif; margin: 0; } .warning { color: #FF0000; font-weight: bold; } #footer { border-top: 1px solid #333333; clear: both; color: #023264; font-size: 0.83em; font-style: italic; padding-top: 10px; text-align: center; } #heading { border-bottom: 1px solid #333333; height: 100px; margin-bottom: 0.5em; position: relative; } #jakarta-logo { left: 0; position: absolute; top: 0; } #main { margin-left: 22%; } #menu { width: 21%; float: left; } #menu li { font-size: 0.84em; font-weight: normal; margin: 0 0 0.5em 2em; } #menu p { color: #023264; font-weight: bold; margin: 0.5em; } #menu ul { list-style: none; margin: 0 0 1em; padding: 0; } #powered-logo { float: right; margin-bottom: 20px; } #struts-logo { position: absolute; right: 0; top: 0; } @media print { .noprint, #menu, #jakarta-logo { display: none; } #main { margin-left: 0; } h1, h2, h3 { background: #fff; color: #000; font-weight: bold; } } libstruts1.2-java-1.2.9/doc/using.xml0000644000175000017500000001201410404045226020073 0ustar arnaudarnaud00000000000000 Using - The Apache Struts Web Application Framework Craig R. McClanahan Ted Husted Martin Cooper James Holmes

            In the normal course of using an application framework like Struts, you may wish to

            Tracking of bug reports and enhancement requests for Struts is handled through the Apache Bug Database. Please select Struts from the product list, along with the details of which component of Struts you feel this report relates to, and details of your operating environment. You will automatically be notified by email as the status of your bug or enhancement report changes. Please be sure to read How to Report Bugs Effectively before posting.

            You can upload a proposed patch to either the code or documentation by creating a feature request in Bugzilla. After creating the ticket, you can go back and upload a file containing your patch.

            The documentation is maintained in the doc folder of the repository in a XML format. In the Nightly Build, there is a "compile.website" target in the build.xml file, which renders the XML into the HTML we post to the Website. If you would like to help with the documentation, it is important to provide patches and new pages in the XML source. Otherwise, some other volunteer will have to do this for you, and it may never get done. (Sad but true.) If you are submitting new material, it is important to decide exactly where you would put this in relation to the rest of the documentation. Someone has to figure that out before it can be added, and that someone might as well be you.

            If you have comments on existing material, you can make comments via the Struts Wiki. Just follow the "Comments?" link on any page. If you are making a substantial contribution, such as a new HOW-TO, please consider submitting a document in the XML format we use. This will make it easier to add your contribution to the official documentation so that it becomes part of the WAR distributed with Struts.

            For more, see the How to Help FAQ.

            Before joining any Apache mailing list, please be sure to read the Mailing List Guidelines. If you have read and understood these guidelines, you are welcome to join the Struts mailing lists.

            Before posting a new question, be sure to consult the MAILING LIST ARCHIVE and the very excellent How To Ask Questions The Smart Way by Eric Raymond.

            Please do be sure to turn off HTML in your email client before posting.

            All work on Struts (and other Apache projects) is provided on an all-volunteer basis. For more about what you can do, see the Apache Jakarta Getting Involved Overview and the Struts How to Help FAQ.

            Next: Who We Are

            libstruts1.2-java-1.2.9/doc/volunteers.xml0000644000175000017500000005650010404045212021157 0ustar arnaudarnaud00000000000000 Who We Are - The Apache Struts Web Application Framework Ted Husted

            In July 2004, there were almost 2700 subscribers to STRUTS-USER (including the digest version). It's the largest user mailing list at Jakarta, exceeding the TOMCAT-USER list of about 2400 subscribers. In addition to the regular subscribers, an unknown number of developers read the lists through newsfeed mirrors and through several list archives.

            According to recently released statistics, Struts downloads range around 15,000 a month.

            • Craig R. McClanahan (craigmcc at apache.org)
            • Ted Husted (husted at apache.org)
            • Rob Leland (rleland at apache.org)
            • Cedric Dumoulin (cedric.dumoulin at lifl.fr)
            • Martin Cooper, Vice President and Chair (martinc at apache.org)
            • Arron Bates (arron at apache.org)
            • James Holmes (jholmes at apache.org)
            • David M. Karr (dmkarr at apache.org)
            • David Graham (dgraham at apache.org)
            • James Mitchell (jmitchell at apache.org)
            • Steve Raeburn (sraeburn at apache.org)
            • Don Brown (mrdon at apache.org)
            • Joe Germuska (germuska at apache.org)
            • Niall Pemberton (niallp at apache.org)
            • Eddie Bush (ekbush at apache.org)
            • James Turner (turner at blackbear.com)
            • Hubert Rabago (hrabago at apache.org)
            • David Geary (dgeary at apache.org)
            • Luis Arias
            • Pierre Delilse
            • Michael Schachter
            • Vincent Massol
            • David Winterfeldt
            • Oleg Alexeev

            Craig R. McClanahan -- PMC Member

            I've been involved with servlet and JSP technology since around 1998. It started out that I needed a way to build some web applications for several projects, and liked Java a lot better than the alternatives. I also liked the price tag of open source software, and started using Apache JServ -- later, getting involved in the project (like many people, I was whining about the twelve months it took to get from version 0.9 to version 1.0, and my son said "Dad, you know Java -- go help them finish it!" -- so I did :-).

            For quite a while, I was participating a lot the JSP-INTEREST and SERVLET-INTEREST mailing lists , especially the topic of good architectures for web applications. I was disgusted with the hash that many beginners created when they used (or abused) scriptlets in JSP pages, and built (for my former employer) a pretty comprehensive framework that could considered ("Struts 0.01 without the custom tags"). It was proprietary code, but I was able to describe the concepts, and there started to a feeling the lists that this "Model 2" thing was pretty cool -- but there were no good examples to look at, so it was mostly hand waving types of discussions.

            Over the same time period, I got involved as an individual contributor in the Java Community Process , and joined the expert group that defined the servlet 2.2 and JSP 1.1 specs. Sun was impressed enough to offer me a job as the technical lead the team within Sun (currently five other individuals) that works Tomcat -- the architecture for Catalina, which is the servlet container part of Tomcat 4.0, is also mine -- so I am in the really nice position of getting paid to work open source software :-). And, participate the expert groups for Servlet 2.3 and JSP 1.2. And, speak at various conferences, including ApacheCon and JavaOne. And, talk to groups within Sun about using Struts and JSP/servlet technology. And ... (there's some really interesting things being considered for the future).

            The original design of what came to Struts has been in my head for a long time, since those interesting mailing list discussions, but the first version of the actual code was written my laptop a Memorial Day weekend vacation trip (end of May, 2000) to the Oregon coast -- in between watching the surf and having the house shaken by a windstorm at night. Since then, it has gathered attention and popularity as we approach our first official release, and it delights me to see my "baby" grow up so well :-). Of course, it is no longer just me -- there have been incredible numbers of good ideas from all over, and a peek at the TODO list for 1.1 says that even more good stuff is coming in the future.

            One motivation factor was Jason Hunter's article about the Problems with JSP. Jason and I get along fine, even though we have different preferences about presentation technologies. Besides being the author of a very popular book about servlets, with a second edition coming soon, Jason is also the representative for the Apache Software Foundation the Executive Committee of the Java Community Process.

            Personally, I live in Portland, Oregon (even though my team at Sun is mostly in Cupertino, CA -- staying here was part of the job deal :-). I like to support Oregon sports teams (Oregon State Beavers, Oregon Ducks, Portland Trailblazers) and work cool software.

            I figured out I was getting pretty old when I realized that 2000 was the 25th year I had been paid to work in some aspect of software development :-). I've got a son who is a full-time software developer (primarily in PHP so far, but I'm going to corrupt him with Java eventually :-), and a daughter in college. I'll happily let the other committers speak for themselves.

            Mike Schachter -- Emeritus Committer

            I'm currently a student of computer science at Drexel University in Philadelphia, PA. I've been working at HP Middleware, formerly Bluestone Software for 3 years programming in Java and recently J2EE technologies. I'm a full time worker from September until April and a student and part time worker from April until August. In my spare time I've been known to run monkey-knife fights in a shady south philly warehouse. Err... I mean... nothing.

            Ted Husted -- PMC Member

            Ted Husted is a developer, author, and mentor. He is a Member of the Apache Software Foundation and Struts Project Management Committee. Ted's books include JUnit in Action, Struts in Action, and Professional JSP Site Design. He has consulted with teams throughout the United States, including CitiGroup, Nationwide Insurance, and PepsiCo. Ted is currently working with the Oklahoma State Department of Environmental Services to improve their permitting system.

            Cedric Dumoulin -- PMC Member

            As a dreamer / researcher I have thought a lot about a framework like Struts. But, as a lazy developer I have first checked what already exists, and I have found Struts. Struts goals fulfilled nearly all I needed for my (now old) portal project, except the capability to reuse and assemble easily pieces of pages or components. So, I have proposed the Components framework. This framework can seen as a superset of the Templates tag library contributed by David Geary, and contains lot of interesting features.

            From a professional point of view, I have a Ph.D. in computer science. I have worked for 3 years in the R&D department of a worldwide company developing Internet banking solutions. I am now a researcher at a university, and work European research projects. My main research interest is WWW, Distributed Systems and Object Oriented Design. When developing code, I always try to first propose reusable pieces of code.

            Martin Cooper -- PMC Chair

            Early in the year 2000, I was asked, by my employer at that time, to investigate the best way to develop a new web-based application for the administration and management of an existing product. After exploring a number of technologies, I settled on Java, along with servlets and JSP, as the way to go. Then I started looking for methodologies and "best practices", since others must surely have been down that path before me.

            In addition to rummaging around on the web, I subscribed to the SERVLET-INTEREST and JSP-INTEREST mailing lists, along with several others, and monitored the discussions for a while. It was clear that others were seeking the same answers as I was, and it was also clear that many people were building their applications in truly horrible ways.

            At some point -- I don't recall when, exactly -- the concept of "Model 1" versus "Model 2" applications came up, and there was a great deal of discussion around that. Model 2 seemed very much like A Good Thing to me, and I paid it close attention.

            Then, in May of 2000, I saw a message from Craig McClanahan about a new framework called Struts that was designed to ease the process of building Model 2 applications, and provide solutions for some of the important issues at the same time. I hopped on over to the web site and took a look around. This was exactly what I had been looking for.

            My first postings to the Struts mailing list were, of course, questions to help me understand how to do things and why Struts is the way it is. Over time, I became more involved in both the user and developer communities, started submitting bug reports, patches and change requests, and eventually became a committer. Not long after that, I volunteered to take on the release process, and became the release manager for Struts 1.0.1 and beyond. Little did I know what I was letting myself in for!

            A large majority of the people who contribute to Apache projects are volunteers who are not paid for their contributions. Like most of those volunteers, I also have a "day job" to put bread on the table. Currently, I am a UI Architect at Informatica, where I work on the architecture, design and implementation of web applications. Working with, and on, Struts has provided me with an excellent perspective with which to do that!

            David Winterfeldt -- Emeritus Committer

            As I worked web based projects I started looking for something that would really help save time during development. I ran across Struts in the Summer of 2000 and decided it was a good solution for web development. As I used Struts it really helped to remove a lot of the repetitive work, but validation still seemed very repetitive. I had an idea to create validation rules in an xml file and have them easily integrated with Struts. It started out simple and continued to develop over time. The validation project was eventually incorporated into Struts and the core was moved to Jakarta Commons. I'm happy to see Struts continue to grow and develop.

            I currently am employed at Forbes.com. I occasionally get to do some internal projects using Struts. The last interesting project was a publishing system using Message Driven EJBs in JBoss and Struts was used to display the status of each publishing process.

            Rob Leland -- PMC Member

            I have gone from Unix -to- Windows -to- Unix based development about ever 6 years now. When moving to Windows I was amazed at how primitive the OS was compared to Unix. While developing for Win32 I had the pleasure of discovering Delphi and developed many GUI/databases, telephony, Internet enabled applications. I remain impressed with its design. Delphi, always enabled development of a simple elegant solution, much like the language itself. I was convinced after 10 years of development with C/C++ that it was a kinder gentler language.

            Then in July 2000 I decided to move into Java, and Web development. This is after using the Internet since 1985 and occasionally teaching classes about it. I was hired as a consultant to take over a JSP based application. I realized it had been written with the equivalent of "goto's"(Model 1) and had to be redesigned. I searched for a better way to design the code and by late August I had found Struts. It is also a simple elegant solution.

            To date I have mainly served to pitch in where needed. I continue to amazed at the Struts committers' generous contributions of time, insight, and good will. I feel fortunate to part of the struts team.

            David Graham -- PMC Member

            I, like many others, discovered Struts when contemplating writing my own MVC Java framework for the web. Struts had everything I needed and more so I scrapped plans for my own and joined the mailing lists. After playing with it for several months I started submitting documentation and a few source patches. I'm excited about helping Struts evolve and am continually amazed by the framework and the community surrounding it.

            James Mitchell -- PMC Member

            James has been so busy answering users questions and adding test cases that he hasn't taken the time to brag about himself. I thought that I would add a place marker for him until and if he does decide to --blow his own horn-- ! -Rob :-D !

            James Turner -- Committer

            I discovered Struts somewhat by accident. In 2001 I began writing a book for SAMS on JSP web development (MySQL and JSP Web Development), and as part of it, I decided to write a chapter on Struts in the advanced section. In the process of learning enough about Struts to write about it, I realized that it could simplify some of the projects that I was working on for clients.

            After a half a year of working with Struts, I was asked by SAMS to write another book, this time concentrating on Struts specifically. That book, co-authored with a former co-worker named Kevin Bedell, became Struts Kick Start.

            In the process of writing that book, I began to realize that there were things I could do to contribute to Struts beyond writing about it. One thing in particular was to clean up and add some functionality to the Commons Validator project, which eventually led to me release-managing (with a lot of help!) the Commons Validator 1.0 release.

            More generally, I've been a software developer for over 22 years, starting with work as a Research Specialist at the MIT AI Lab. I spent nearly a decade working in LISP, before moving on to C/Unix, a stint managing the Web Site for the Christian Science Monitor, and finally Java based e-Commerce development, which has kept me busy for the last five years.

            In addition to the two books mentioned above, I also write for a number of publications, including WIRED and the aforementioned Christian Science Monitor. You can get a look at my portfolio here. I'm also working on a third book with a bunch of other folks for O'Reilly, which will cover Apache Axis. I also edit the OpenSolaris.org site for Sun.

            Eddie Bush -- Committer

            My first experiences with Java made me wince. The language was young-ish still and growing by leaps and bounds all the time. To me, it seemed unintelligent to invest any significant intellectual resources in learning it because I perceived it as such a "moving target". Of course, that has changed.

            I'd been looking for a way to really do heavy-duty processing of web requests that was higher-level than CGI. In particular, I was on a quest to find somethiong that did not involve using Microsoft (tm) technologies. A friend of mine started chatting up the idea of Java servlets and JSP pages. I didn't really like the idea of using Java because of my previously formed opinion, but, having a great deal of respect for my friend's opinion, I set out on an exursion to delve into the world of Java-driven dynamic web page generation.

            The language (and myself) had matured considerably by this time, and I found my previous inhibitions were no longer well founded. However, as much as I liked the technology, I was dissatisfied. There just had to be a better way! I loved the concept of having a controller servlet, but, lacking experience in building externally-configurable Java "thingies", I was hard-coding a lot, and, after a point, that started to really rub me wrong. At this point, I started buying books and really "studying" the technology more seriously.

            I honestly don't recall where I stumbled onto Struts, but I do recall having toyed with a number of different frameworks - none of which I really recall now. I quickly fell in love with Struts -- partially because it was an Apache project, and partially because it was evident to me that the project had a really great user-base.

            As time rocked along, I found myself becoming more deeply involved in the project. I studied the source and learned a great deal about architecting configurable Java "thingies", and learned a fantastic amount about actually using the framework.

            In time, I got comfortable enough with how Struts was structured that I began submitting patches - mostly documentation, which Ted Husted "massaged" and applied. I enjoyed the feeling of gratification I got from helping to make Struts better, even if minorly.

            My last patch submitted as a non-committer was for ActionServlet. This was back when Struts 1.1 was working toward GA release. It was the first patch I hadn't had applied within a few days of submission and I grew impatient. Modules did not work properly without it and they did with it! "How can they not apply that patch when it's so critical to Struts?" I thought to myself.

            Well, to keep this book from becoming a novel, I started a campaign to have the patch applied which resulted in my gaining committer status and applying the patch myself! I should note that Steve Ditlinger and myself collaborated on the patch. I submitted a version, he made some suggestions and submitted an altered patch, and then we, collectively, decided to make a couple of other modifications, which I applied just before committing the patch.

            Niall Pemberton -- PMC Member

            I've worked as a developer since 1988 using various technologies/platforms. In the late nineties I kept meaning to learn java but never found the time until 2000. I bought a couple of books (Java in 30 Days and a Certification Study Guide), passed the Sun certification exam and got my first java job.

            Early in 2001 I was investigating writing the first web app for the company I was working for and came across Struts - just before the 1.0 beta was released. After a while I came off the user list because of the volume of traffic and just monitored the developers list. Late in 2003 I migrated to Struts 1.1, re-joined the user list and started submitting a few patches. Was invited to become a Struts Committer in May 2004 and PMC member in September 2004.

            Next: Announcements

            libstruts1.2-java-1.2.9/legacy/0000755000175000017500000000000010404045172016725 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.0/0000755000175000017500000000000010423130300017757 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.0/org/0000755000175000017500000000000010404045172020561 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/0000755000175000017500000000000010404045172022002 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/0000755000175000017500000000000010404045172023346 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/action/0000755000175000017500000000000010423130300024610 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/action/Action.html0000644000175000017500000013321710404045236026736 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class Action

            org.apache.struts.action
            Class Action

            java.lang.Object
              |
              +--org.apache.struts.action.Action
            
            Direct Known Subclasses:
            ActionBase, AddFormBeanAction, AddForwardAction, AddMappingAction, DispatchAction, ForwardAction, IncludeAction, ReloadAction, RemoveFormBeanAction, RemoveForwardAction, RemoveMappingAction

            public class Action
            extends java.lang.Object

            An Action is an adapter between the contents of an incoming HTTP request and the corresponding business logic that should be executed to process this request. The controller (ActionServlet) will select an appropriate Action for each request, create an instance (if necessary), and call the perform method.

            Actions must be programmed in a thread-safe manner, because the controller will share the same instance for multiple simultaneous requests. In this means you should design with the following items in mind:

            • Instance and static variables MUST NOT be used to store information related to the state of a particular request. They MAY be used to share global resources across requests for the same action.
            • Access to other resources (JavaBeans, session variables, etc.) MUST be synchronized if those resources require protection. (Generally, however, resource classes should be designed to provide their own protection where necessary.

            When an Action instance is first created, the controller servlet will call setServlet() with a non-null argument to identify the controller servlet instance to which this Action is attached. When the controller servlet is to be shut down (or restarted), the setServlet() method will be called with a null argument, which can be used to clean up any allocated resources in use by this Action.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan

            Field Summary
            static java.lang.String DATA_SOURCE_KEY
                      The context attributes key under which our default configured data source (which must implement javax.sql.DataSource) is stored, if one is configured for this application.
            protected static java.util.Locale defaultLocale
                      The system default Locale.
            static java.lang.String ERROR_KEY
                      The request attributes key under which your action should store an org.apache.struts.action.ActionErrors object, if you are using the corresponding custom tag library elements.
            static java.lang.String EXCEPTION_KEY
                      The request attributes key under which Struts custom tags might store a Throwable that caused them to report a JspException at runtime.
            static java.lang.String FORM_BEANS_KEY
                      The context attributes key under which our org.apache.struts.action.ActionFormBeans collection is normally stored, unless overridden when initializing our ActionServlet.
            static java.lang.String FORWARDS_KEY
                      The context attributes key under which our org.apache.struts.action.ActionForwards collection is normally stored, unless overridden when initializing our ActionServlet.
            static java.lang.String LOCALE_KEY
                      The session attributes key under which the user's selected java.util.Locale is stored, if any.
            static java.lang.String MAPPING_KEY
                      The request attributes key under which our org.apache.struts.ActionMapping instance is passed.
            static java.lang.String MAPPINGS_KEY
                      The context attributes key under which our org.apache.struts.action.ActionMappings collection is normally stored, unless overridden when initializing our ActionServlet.
            static java.lang.String MESSAGES_KEY
                      The context attributes key under which our application resources are normally stored, unless overridden when initializing our ActionServlet.
            static java.lang.String MULTIPART_KEY
                      The request attributes key under which our multipart class is stored.
            protected  ActionServlet servlet
                      The controller servlet to which we are attached.
            static java.lang.String SERVLET_KEY
                      The context attributes key under which we store the mapping defined for our controller serlet, which will be either a path-mapped pattern (/action/*) or an extension mapped pattern (*.do).
            static java.lang.String TRANSACTION_TOKEN_KEY
                      The session attributes key under which our transaction token is stored, if it is used.
             
            Constructor Summary
            Action()
                       
             
            Method Summary
            protected  java.lang.String generateToken(javax.servlet.http.HttpServletRequest request)
                      Generate a new transaction token, to be used for enforcing a single request for a particular transaction.
            protected  java.util.Locale getLocale(javax.servlet.http.HttpServletRequest request)
                      Return the user's currently selected Locale.
            protected  MessageResources getResources()
                      Return the message resources for this application.
             ActionServlet getServlet()
                      Return the controller servlet instance to which we are attached.
            protected  boolean isCancelled(javax.servlet.http.HttpServletRequest request)
                      Returns true if the current form's cancel button was pressed.
            protected  boolean isTokenValid(javax.servlet.http.HttpServletRequest request)
                      Return true if there is a transaction token stored in the user's current session, and the value submitted as a request parameter with this action matches it.
             ActionForward perform(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
             ActionForward perform(ActionMapping mapping, ActionForm form, javax.servlet.ServletRequest request, javax.servlet.ServletResponse response)
                      Process the specified non-HTTP request, and create the corresponding non-HTTP response (or forward to another web component that will create it).
             ActionForward perform(ActionServlet servlet, ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Deprecated. Use the new perform() method without a servlet argument
             ActionForward perform(ActionServlet servlet, ActionMapping mapping, ActionForm form, javax.servlet.ServletRequest request, javax.servlet.ServletResponse response)
                      Deprecated. Use the new perform() method without a servlet argument
            protected  void resetToken(javax.servlet.http.HttpServletRequest request)
                      Reset the saved transaction token in the user's session.
            protected  void saveErrors(javax.servlet.http.HttpServletRequest request, ActionErrors errors)
                      Save the specified error messages keys into the appropriate request attribute for use by the <struts:errors> tag, if any messages are required.
            protected  void saveToken(javax.servlet.http.HttpServletRequest request)
                      Save a new transaction token in the user's current session, creating a new session if necessary.
            protected  void setLocale(javax.servlet.http.HttpServletRequest request, java.util.Locale locale)
                      Set the user's currently selected Locale.
             void setServlet(ActionServlet servlet)
                      Set the controller servlet instance to which we are attached (if servlet is non-null), or release any allocated resources (if servlet is null).
            protected  java.lang.String toHex(byte[] buffer)
                      Convert a byte array to a String of hexadecimal digits and return it.
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            DATA_SOURCE_KEY

            public static final java.lang.String DATA_SOURCE_KEY
            The context attributes key under which our default configured data source (which must implement javax.sql.DataSource) is stored, if one is configured for this application.

            ERROR_KEY

            public static final java.lang.String ERROR_KEY
            The request attributes key under which your action should store an org.apache.struts.action.ActionErrors object, if you are using the corresponding custom tag library elements.

            EXCEPTION_KEY

            public static final java.lang.String EXCEPTION_KEY
            The request attributes key under which Struts custom tags might store a Throwable that caused them to report a JspException at runtime. This value can be used on an error page to provide more detailed information about what really went wrong.

            FORM_BEANS_KEY

            public static final java.lang.String FORM_BEANS_KEY
            The context attributes key under which our org.apache.struts.action.ActionFormBeans collection is normally stored, unless overridden when initializing our ActionServlet.

            FORWARDS_KEY

            public static final java.lang.String FORWARDS_KEY
            The context attributes key under which our org.apache.struts.action.ActionForwards collection is normally stored, unless overridden when initializing our ActionServlet.

            LOCALE_KEY

            public static final java.lang.String LOCALE_KEY
            The session attributes key under which the user's selected java.util.Locale is stored, if any. If no such attribute is found, the system default locale will be used when retrieving internationalized messages. If used, this attribute is typically set during user login processing.

            MAPPING_KEY

            public static final java.lang.String MAPPING_KEY
            The request attributes key under which our org.apache.struts.ActionMapping instance is passed.

            MAPPINGS_KEY

            public static final java.lang.String MAPPINGS_KEY
            The context attributes key under which our org.apache.struts.action.ActionMappings collection is normally stored, unless overridden when initializing our ActionServlet.

            MESSAGES_KEY

            public static final java.lang.String MESSAGES_KEY
            The context attributes key under which our application resources are normally stored, unless overridden when initializing our ActionServlet.

            MULTIPART_KEY

            public static final java.lang.String MULTIPART_KEY
            The request attributes key under which our multipart class is stored.

            SERVLET_KEY

            public static final java.lang.String SERVLET_KEY
            The context attributes key under which we store the mapping defined for our controller serlet, which will be either a path-mapped pattern (/action/*) or an extension mapped pattern (*.do).

            TRANSACTION_TOKEN_KEY

            public static final java.lang.String TRANSACTION_TOKEN_KEY
            The session attributes key under which our transaction token is stored, if it is used.

            defaultLocale

            protected static java.util.Locale defaultLocale
            The system default Locale.

            servlet

            protected ActionServlet servlet
            The controller servlet to which we are attached.
            Constructor Detail

            Action

            public Action()
            Method Detail

            getServlet

            public ActionServlet getServlet()
            Return the controller servlet instance to which we are attached.

            setServlet

            public void setServlet(ActionServlet servlet)
            Set the controller servlet instance to which we are attached (if servlet is non-null), or release any allocated resources (if servlet is null).
            Parameters:
            servlet - The new controller servlet, if any

            perform

            public ActionForward perform(ActionServlet servlet,
                                         ActionMapping mapping,
                                         ActionForm form,
                                         javax.servlet.ServletRequest request,
                                         javax.servlet.ServletResponse response)
                                  throws java.io.IOException,
                                         javax.servlet.ServletException
            Deprecated. Use the new perform() method without a servlet argument

            Process the specified non-HTTP request, and create the corresponding non-HTTP response (or forward to another web component that will create it). Return an ActionForward instance describing where and how control should be forwarded, or null if the response has already been completed.
            Parameters:
            servlet - The ActionServlet instance owning this Action
            mapping - The ActionMapping used to select this instance
            actionForm - The optional ActionForm bean for this request (if any)
            request - The servlet request we are processing
            response - The servlet response we are processing
            Throws:
            java.io.IOException - if an input/output error occurs
            javax.servlet.ServletException - if a servlet exception occurs

            perform

            public ActionForward perform(ActionMapping mapping,
                                         ActionForm form,
                                         javax.servlet.ServletRequest request,
                                         javax.servlet.ServletResponse response)
                                  throws java.io.IOException,
                                         javax.servlet.ServletException
            Process the specified non-HTTP request, and create the corresponding non-HTTP response (or forward to another web component that will create it). Return an ActionForward instance describing where and how control should be forwarded, or null if the response has already been completed.

            The default implementation attempts to forward to the HTTP version of this method.

            Parameters:
            mapping - The ActionMapping used to select this instance
            actionForm - The optional ActionForm bean for this request (if any)
            request - The non-HTTP request we are processing
            response - The non-HTTP response we are creating
            Throws:
            java.io.IOException - if an input/output error occurs
            javax.servlet.ServletException - if a servlet exception occurs

            perform

            public ActionForward perform(ActionServlet servlet,
                                         ActionMapping mapping,
                                         ActionForm form,
                                         javax.servlet.http.HttpServletRequest request,
                                         javax.servlet.http.HttpServletResponse response)
                                  throws java.io.IOException,
                                         javax.servlet.ServletException
            Deprecated. Use the new perform() method without a servlet argument

            Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it). Return an ActionForward instance describing where and how control should be forwarded, or null if the response has already been completed.
            Parameters:
            servlet - The ActionServlet instance owning this Action
            mapping - The ActionMapping used to select this instance
            actionForm - The optional ActionForm bean for this request (if any)
            request - The servlet request we are processing
            response - The servlet response we are processing
            Throws:
            java.io.IOException - if an input/output error occurs
            javax.servlet.ServletException - if a servlet exception occurs

            perform

            public ActionForward perform(ActionMapping mapping,
                                         ActionForm form,
                                         javax.servlet.http.HttpServletRequest request,
                                         javax.servlet.http.HttpServletResponse response)
                                  throws java.io.IOException,
                                         javax.servlet.ServletException
            Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it). Return an ActionForward instance describing where and how control should be forwarded, or null if the response has already been completed.
            Parameters:
            mapping - The ActionMapping used to select this instance
            actionForm - The optional ActionForm bean for this request (if any)
            request - The HTTP request we are processing
            response - The HTTP response we are creating
            Throws:
            java.io.IOException - if an input/output error occurs
            javax.servlet.ServletException - if a servlet exception occurs

            generateToken

            protected java.lang.String generateToken(javax.servlet.http.HttpServletRequest request)
            Generate a new transaction token, to be used for enforcing a single request for a particular transaction.
            Parameters:
            request - The request we are processing

            getLocale

            protected java.util.Locale getLocale(javax.servlet.http.HttpServletRequest request)
            Return the user's currently selected Locale.
            Parameters:
            request - The request we are processing

            getResources

            protected MessageResources getResources()
            Return the message resources for this application.

            isCancelled

            protected boolean isCancelled(javax.servlet.http.HttpServletRequest request)
            Returns true if the current form's cancel button was pressed. This method will check if the cancel button generated by CancelTag was pressed by the user in the current request. If true, validation performed by an ActionForm validate() method will have been skipped by the controller servlet.
            Parameters:
            request - The servlet request we are processing
            See Also:
            CancelTag, ValidatingActionForm

            isTokenValid

            protected boolean isTokenValid(javax.servlet.http.HttpServletRequest request)
            Return true if there is a transaction token stored in the user's current session, and the value submitted as a request parameter with this action matches it. Returns false under any of the following circumstances:
            • No session associated with this request
            • No transaction token saved in the session
            • No transaction token included as a request parameter
            • The included transaction token value does not match the transaction token in the user's session
            Parameters:
            request - The servlet request we are processing

            resetToken

            protected void resetToken(javax.servlet.http.HttpServletRequest request)
            Reset the saved transaction token in the user's session. This indicates that transactional token checking will not be needed on the next request that is submitted.
            Parameters:
            request - The servlet request we are processing

            saveErrors

            protected void saveErrors(javax.servlet.http.HttpServletRequest request,
                                      ActionErrors errors)
            Save the specified error messages keys into the appropriate request attribute for use by the <struts:errors> tag, if any messages are required. Otherwise, ensure that the request attribute is not created.
            Parameters:
            request - The servlet request we are processing
            errors - Error messages object

            saveToken

            protected void saveToken(javax.servlet.http.HttpServletRequest request)
            Save a new transaction token in the user's current session, creating a new session if necessary.
            Parameters:
            request - The servlet request we are processing

            setLocale

            protected void setLocale(javax.servlet.http.HttpServletRequest request,
                                     java.util.Locale locale)
            Set the user's currently selected Locale.
            Parameters:
            request - The request we are processing
            locale - The user's selected Locale to be set, or null to select the server's default Locale

            toHex

            protected java.lang.String toHex(byte[] buffer)
            Convert a byte array to a String of hexadecimal digits and return it.
            Parameters:
            buffer - The byte array to be converted


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/action/ActionBase.html0000644000175000017500000003074010404045232027522 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class ActionBase

            org.apache.struts.action
            Class ActionBase

            java.lang.Object
              |
              +--org.apache.struts.action.Action
                    |
                    +--org.apache.struts.action.ActionBase
            

            Deprecated. Application action classes should now extend Action directly, rather than this class.

            public class ActionBase
            extends Action

            Abstract basic implementation of Action that provides useful utility methods for use by Action classes.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan

            Fields inherited from class org.apache.struts.action.Action
            DATA_SOURCE_KEY, defaultLocale, ERROR_KEY, EXCEPTION_KEY, FORM_BEANS_KEY, FORWARDS_KEY, LOCALE_KEY, MAPPING_KEY, MAPPINGS_KEY, MESSAGES_KEY, MULTIPART_KEY, servlet, SERVLET_KEY, TRANSACTION_TOKEN_KEY
             
            Constructor Summary
            ActionBase()
                      Deprecated.  
             
            Methods inherited from class org.apache.struts.action.Action
            generateToken, getLocale, getResources, getServlet, isCancelled, isTokenValid, perform, perform, perform, perform, resetToken, saveErrors, saveToken, setLocale, setServlet, toHex
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Constructor Detail

            ActionBase

            public ActionBase()
            Deprecated. 


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/action/ActionError.html0000644000175000017500000003770610404045242027753 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class ActionError

            org.apache.struts.action
            Class ActionError

            java.lang.Object
              |
              +--org.apache.struts.action.ActionError
            
            All Implemented Interfaces:
            java.io.Serializable

            public class ActionError
            extends java.lang.Object
            implements java.io.Serializable

            An encapsulation of an individual error message returned by the validate() method of an ActionForm, consisting of a message key (to be used to look up message text in an appropriate message resources database) plus up to four placeholder objects that can be used for parametric replacement in the message text.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            private  java.lang.String key
                      The message key for this error message.
            private  java.lang.Object[] values
                      The replacement values for this error mesasge.
             
            Constructor Summary
            ActionError(java.lang.String key)
                      Construct an action error with no replacement values.
            ActionError(java.lang.String key, java.lang.Object value0)
                      Construct an action error with the specified replacement values.
            ActionError(java.lang.String key, java.lang.Object value0, java.lang.Object value1)
                      Construct an action error with the specified replacement values.
            ActionError(java.lang.String key, java.lang.Object value0, java.lang.Object value1, java.lang.Object value2)
                      Construct an action error with the specified replacement values.
            ActionError(java.lang.String key, java.lang.Object value0, java.lang.Object value1, java.lang.Object value2, java.lang.Object value3)
                      Construct an action error with the specified replacement values.
             
            Method Summary
             java.lang.String getKey()
                      Get the message key for this error message.
             java.lang.Object[] getValues()
                      Get the replacement values for this error message.
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            key

            private java.lang.String key
            The message key for this error message.

            values

            private java.lang.Object[] values
            The replacement values for this error mesasge.
            Constructor Detail

            ActionError

            public ActionError(java.lang.String key)
            Construct an action error with no replacement values.
            Parameters:
            key - Message key for this error message

            ActionError

            public ActionError(java.lang.String key,
                               java.lang.Object value0)
            Construct an action error with the specified replacement values.
            Parameters:
            key - Message key for this error message
            value0 - First replacement value

            ActionError

            public ActionError(java.lang.String key,
                               java.lang.Object value0,
                               java.lang.Object value1)
            Construct an action error with the specified replacement values.
            Parameters:
            key - Message key for this error message
            value0 - First replacement value
            value1 - Second replacement value

            ActionError

            public ActionError(java.lang.String key,
                               java.lang.Object value0,
                               java.lang.Object value1,
                               java.lang.Object value2)
            Construct an action error with the specified replacement values.
            Parameters:
            key - Message key for this error message
            value0 - First replacement value
            value1 - Second replacement value
            value2 - Third replacement value

            ActionError

            public ActionError(java.lang.String key,
                               java.lang.Object value0,
                               java.lang.Object value1,
                               java.lang.Object value2,
                               java.lang.Object value3)
            Construct an action error with the specified replacement values.
            Parameters:
            key - Message key for this error message
            value0 - First replacement value
            value1 - Second replacement value
            value2 - Third replacement value
            value3 - Fourth replacement value
            Method Detail

            getKey

            public java.lang.String getKey()
            Get the message key for this error message.

            getValues

            public java.lang.Object[] getValues()
            Get the replacement values for this error message.


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/action/ActionErrors.html0000644000175000017500000004252110404045210030120 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class ActionErrors

            org.apache.struts.action
            Class ActionErrors

            java.lang.Object
              |
              +--org.apache.struts.action.ActionErrors
            
            All Implemented Interfaces:
            java.io.Serializable

            public class ActionErrors
            extends java.lang.Object
            implements java.io.Serializable

            A class that encapsulates the error messages being reported by the validate() method of an ActionForm. Validation errors are either global to the entire ActionForm bean they are associated with, or they are specific to a particular bean property (and, therefore, a particular input field on the corresponding form).

            Each individual error is described by an ActionError object, which contains a message key (to be looked up in an appropriate message resources database), and up to four placeholder arguments used for parametric substitution in the resulting message.

            IMPLEMENTATION NOTE - It is assumed that these objects are created and manipulated only within the context of a single thread. Therefore, no synchronization is required for access to internal collections.

            Author:
            David Geary, Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  java.util.HashMap errors
                      The accumulated set of ActionError objects (represented as an ArrayList) for each property, keyed by property name.
            static java.lang.String GLOBAL_ERROR
                      The "property name" marker to use for global errors, as opposed to those related to a specific property.
             
            Constructor Summary
            ActionErrors()
                       
             
            Method Summary
             void add(java.lang.String property, ActionError error)
                      Add an error message to the set of errors for the specified property.
             void clear()
                      Clear all error messages recorded by this object.
             boolean empty()
                      Return true if there are no error messages recorded in this collection, or false otherwise.
             java.util.Iterator get()
                      Return the set of all recorded error messages, without distinction by which property the messages are associated with.
             java.util.Iterator get(java.lang.String property)
                      Return the set of error messages related to a specific property.
             java.util.Iterator properties()
                      Return the set of property names for which at least one error has been recorded.
             int size()
                      Return the number of errors recorded for all properties (including global errors).
             int size(java.lang.String property)
                      Return the number of errors associated with the specified property.
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            GLOBAL_ERROR

            public static final java.lang.String GLOBAL_ERROR
            The "property name" marker to use for global errors, as opposed to those related to a specific property.

            errors

            protected java.util.HashMap errors
            The accumulated set of ActionError objects (represented as an ArrayList) for each property, keyed by property name.
            Constructor Detail

            ActionErrors

            public ActionErrors()
            Method Detail

            add

            public void add(java.lang.String property,
                            ActionError error)
            Add an error message to the set of errors for the specified property.
            Parameters:
            property - Property name (or ActionErrors.GLOBAL_ERROR)
            error - The error message to be added

            clear

            public void clear()
            Clear all error messages recorded by this object.

            empty

            public boolean empty()
            Return true if there are no error messages recorded in this collection, or false otherwise.

            get

            public java.util.Iterator get()
            Return the set of all recorded error messages, without distinction by which property the messages are associated with. If there are no error messages recorded, an empty enumeration is returned.

            get

            public java.util.Iterator get(java.lang.String property)
            Return the set of error messages related to a specific property. If there are no such errors, an empty enumeration is returned.
            Parameters:
            property - Property name (or ActionErrors.GLOBAL_ERROR)

            properties

            public java.util.Iterator properties()
            Return the set of property names for which at least one error has been recorded. If there are no errors, an empty Iterator is returned. If you have recorded global errors, the String value of ActionErrors.GLOBAL_ERROR will be one of the returned property names.

            size

            public int size()
            Return the number of errors recorded for all properties (including global errors). NOTE - it is more efficient to call empty() if all you care about is whether or not there are any error messages at all.

            size

            public int size(java.lang.String property)
            Return the number of errors associated with the specified property.
            Parameters:
            property - Property name (or ActionErrors.GLOBAL_ERROR)


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/action/ActionForm.html0000644000175000017500000005714110404045230027555 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class ActionForm

            org.apache.struts.action
            Class ActionForm

            java.lang.Object
              |
              +--org.apache.struts.action.ActionForm
            
            All Implemented Interfaces:
            java.io.Serializable
            Direct Known Subclasses:
            ValidatingActionForm

            public abstract class ActionForm
            extends java.lang.Object
            implements java.io.Serializable

            An ActionForm is a JavaBean optionally associated with one or more ActionMappings. Such a bean will have had its properties initialized from the corresponding request parameters before the corresonding action's perform() method is called.

            When the properties of this bean have been populated, but before the perform() method of the action is called, this bean's validate() method will be called, which gives the bean a chance to verify that the properties submitted by the user are correct and valid. If this method finds problems, it returns an error messages object that encapsulates those problems, and the controller servlet will return control to the corresponding input form. Otherwise, the validate() method returns null(), indicating that everything is acceptable and the corresponding Action's perform() method should be called.

            This class must be subclassed in order to be instantiated. Subclasses should provide property getter and setter methods for all of the bean properties they wish to expose, plus override any of the public or protected methods for which they wish to provide modified functionality.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  MultipartRequestHandler multipartRequestHandler
                      The MultipartRequestHandler for this form, can be null
            protected  ActionServlet servlet
                      The controller servlet instance to which we are attached.
             
            Constructor Summary
            ActionForm()
                       
             
            Method Summary
             MultipartRequestHandler getMultipartRequestHandler()
                      Return the MultipartRequestHandler for this form The reasoning behind this is to give form bean developers control over the lifecycle of their multipart requests through the use of the finish() and/or rollback() methods of MultipartRequestHandler.
             ActionServlet getServlet()
                      Return the controller servlet instance to which we are attached.
             void reset(ActionMapping mapping, javax.servlet.http.HttpServletRequest request)
                      Reset all bean properties to their default state.
             void reset(ActionMapping mapping, javax.servlet.ServletRequest request)
                      Reset all bean properties to their default state.
             void setMultipartRequestHandler(MultipartRequestHandler multipartRequestHandler)
                       
             void setServlet(ActionServlet servlet)
                      Set the controller servlet instance to which we are attached (if servlet is non-null), or release any allocated resources (if servlet is null).
             java.lang.String[] validate()
                      Deprecated. This is the Struts 0.5 version of validation -- use the validate(ActionMapping,HttpServletRequest) method instead
             ActionErrors validate(ActionMapping mapping, javax.servlet.http.HttpServletRequest request)
                      Validate the properties that have been set for this HTTP request, and return an ActionErrors object that encapsulates any validation errors that have been found.
             ActionErrors validate(ActionMapping mapping, javax.servlet.ServletRequest request)
                      Validate the properties that have been set for this non-HTTP request, and return an ActionErrors object that encapsulates any validation errors that have been found.
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            servlet

            protected transient ActionServlet servlet
            The controller servlet instance to which we are attached.

            multipartRequestHandler

            protected transient MultipartRequestHandler multipartRequestHandler
            The MultipartRequestHandler for this form, can be null
            Constructor Detail

            ActionForm

            public ActionForm()
            Method Detail

            getServlet

            public ActionServlet getServlet()
            Return the controller servlet instance to which we are attached.

            getMultipartRequestHandler

            public MultipartRequestHandler getMultipartRequestHandler()
            Return the MultipartRequestHandler for this form The reasoning behind this is to give form bean developers control over the lifecycle of their multipart requests through the use of the finish() and/or rollback() methods of MultipartRequestHandler. This method will return null if this form's enctype is not "multipart/request-data".
            See Also:
            MultipartRequestHandler

            setServlet

            public void setServlet(ActionServlet servlet)
            Set the controller servlet instance to which we are attached (if servlet is non-null), or release any allocated resources (if servlet is null).
            Parameters:
            servlet - The new controller servlet, if any

            setMultipartRequestHandler

            public void setMultipartRequestHandler(MultipartRequestHandler multipartRequestHandler)

            reset

            public void reset(ActionMapping mapping,
                              javax.servlet.ServletRequest request)
            Reset all bean properties to their default state. This method is called before the properties are repopulated by the controller servlet.

            The default implementation attempts to forward to the HTTP version of this method.

            Parameters:
            mapping - The mapping used to select this instance
            request - The servlet request we are processing

            reset

            public void reset(ActionMapping mapping,
                              javax.servlet.http.HttpServletRequest request)
            Reset all bean properties to their default state. This method is called before the properties are repopulated by the controller servlet.

            The default implementation does nothing. Subclasses should override this method to reset all bean properties to default values.

            Parameters:
            mapping - The mapping used to select this instance
            request - The servlet request we are processing

            validate

            public ActionErrors validate(ActionMapping mapping,
                                         javax.servlet.ServletRequest request)
            Validate the properties that have been set for this non-HTTP request, and return an ActionErrors object that encapsulates any validation errors that have been found. If no errors are found, return null or an ActionErrors object with no recorded error messages.

            The default implementation attempts to forward to the HTTP version of this method.

            Parameters:
            mapping - The mapping used to select this instance
            request - The servlet request we are processing

            validate

            public java.lang.String[] validate()
            Deprecated. This is the Struts 0.5 version of validation -- use the validate(ActionMapping,HttpServletRequest) method instead

            Perform validations on the form input values included in this form bean. If validation errors occur, return a String array containing the message keys of corresponding error messages (in our application MessageResources) to be displayed. If no validation errors occur, return null.

            validate

            public ActionErrors validate(ActionMapping mapping,
                                         javax.servlet.http.HttpServletRequest request)
            Validate the properties that have been set for this HTTP request, and return an ActionErrors object that encapsulates any validation errors that have been found. If no errors are found, return null or an ActionErrors object with no recorded error messages.

            The default ipmlementation performs no validation and returns null. Subclasses must override this method to provide any validation they wish to perform.

            Parameters:
            mapping - The mapping used to select this instance
            request - The servlet request we are processing


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/action/ActionFormBean.html0000644000175000017500000003246210404045222030343 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class ActionFormBean

            org.apache.struts.action
            Class ActionFormBean

            java.lang.Object
              |
              +--org.apache.struts.action.ActionFormBean
            
            All Implemented Interfaces:
            java.io.Serializable

            public class ActionFormBean
            extends java.lang.Object
            implements java.io.Serializable

            An ActionFormBean is the definition of a form bean that is loaded from a <form-bean> element in the Struts configuration file. It can be subclassed as necessary to add additional properties.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            private  java.lang.String name
                      The bean name of this action form bean.
            private  java.lang.String type
                      The Java class name of this action form bean.
             
            Constructor Summary
            ActionFormBean()
                       
             
            Method Summary
             java.lang.String getName()
                      Return the bean name of this action form bean.
             java.lang.String getType()
                      Return the Java class name of this action form bean.
             void setName(java.lang.String name)
                      Set the bean name of this action form bean.
             void setType(java.lang.String type)
                      Set the Java class name of this action form bean.
             java.lang.String toString()
                      Return a string representation of this object.
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, wait, wait, wait
             

            Field Detail

            name

            private java.lang.String name
            The bean name of this action form bean.

            type

            private java.lang.String type
            The Java class name of this action form bean.
            Constructor Detail

            ActionFormBean

            public ActionFormBean()
            Method Detail

            getName

            public java.lang.String getName()
            Return the bean name of this action form bean.

            setName

            public void setName(java.lang.String name)
            Set the bean name of this action form bean.
            Parameters:
            name - The new bean name

            getType

            public java.lang.String getType()
            Return the Java class name of this action form bean.

            setType

            public void setType(java.lang.String type)
            Set the Java class name of this action form bean.
            Parameters:
            type - The new Java class name

            toString

            public java.lang.String toString()
            Return a string representation of this object.
            Overrides:
            toString in class java.lang.Object


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/action/ActionFormBeans.html0000644000175000017500000003477410404045244030542 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class ActionFormBeans

            org.apache.struts.action
            Class ActionFormBeans

            java.lang.Object
              |
              +--org.apache.struts.action.ActionFormBeans
            
            All Implemented Interfaces:
            java.io.Serializable

            public class ActionFormBeans
            extends java.lang.Object
            implements java.io.Serializable

            Encapsulate a collection of ActionFormBean objects that can be administered and searched, while hiding the internal implementation.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  FastHashMap formBeans
                      The collection of ActionFormBean instances, keyed by name.
             
            Constructor Summary
            ActionFormBeans()
                       
             
            Method Summary
             void addFormBean(ActionFormBean formBean)
                      Register a form bean to the set configured for this servlet.
             ActionFormBean findFormBean(java.lang.String name)
                      Return the formBean associated with the specified logical name, if any; otherwise return null.
             java.lang.String[] findFormBeans()
                      Return the set of names for form beans defined in this collection.
             boolean getFast()
                      Return the "fast" mode flag.
             void removeFormBean(ActionFormBean formBean)
                      Deregister a formBean from the set configured for this servlet.
             void setFast(boolean fast)
                      Set the "fast" mode flag.
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            formBeans

            protected FastHashMap formBeans
            The collection of ActionFormBean instances, keyed by name.
            Constructor Detail

            ActionFormBeans

            public ActionFormBeans()
            Method Detail

            getFast

            public boolean getFast()
            Return the "fast" mode flag.

            setFast

            public void setFast(boolean fast)
            Set the "fast" mode flag.
            Parameters:
            fast - The new fast mode flag

            addFormBean

            public void addFormBean(ActionFormBean formBean)
            Register a form bean to the set configured for this servlet.
            Parameters:
            formBean - The formBean to be added

            findFormBean

            public ActionFormBean findFormBean(java.lang.String name)
            Return the formBean associated with the specified logical name, if any; otherwise return null.
            Parameters:
            name - Logical name of the desired form bean

            findFormBeans

            public java.lang.String[] findFormBeans()
            Return the set of names for form beans defined in this collection. If there are no such formBeans, a zero-length array is returned.

            removeFormBean

            public void removeFormBean(ActionFormBean formBean)
            Deregister a formBean from the set configured for this servlet.
            Parameters:
            formBean - The formBean to be deregistered


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/action/ActionForward.html0000644000175000017500000004336210404045206030261 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class ActionForward

            org.apache.struts.action
            Class ActionForward

            java.lang.Object
              |
              +--org.apache.struts.action.ActionForward
            
            All Implemented Interfaces:
            java.io.Serializable
            Direct Known Subclasses:
            ForwardingActionForward, RedirectingActionForward

            public class ActionForward
            extends java.lang.Object
            implements java.io.Serializable

            An ActionForward represents a destination to which the controller servlet, ActionServlet, might be directed to perform a RequestDispatcher.forward() or HttpServletResponse.sendRedirect() to, as a result of processing activities of an Action class. Instances of this class may be created dynamically as necessary, or configured in association with an ActionMapping instance for named lookup of potentially multiple destinations for a particular mapping instance.

            An ActionForward has the following minimal set of properties. Additional properties can be provided as needed by subclassses.

            • name - Logical name by which this instance may be looked up in relationship to a particular ActionMapping.
            • path - Context-relative URI to which control should be forwarded, or an absolute or relative URI to which control should be redirected.
            • redirect - Set to true if the controller servlet should call HttpServletResponse.sendRedirect() on the associated path; otherwise false. [false]

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  java.lang.String name
                      The logical name of this forward.
            protected  java.lang.String path
                      The context-relative (for a forward) or relative or absolute (for a redirect) URI path to be forwarded to.
            protected  boolean redirect
                      Should this be a redirect instead of a forward?
             
            Constructor Summary
            ActionForward()
                      Construct a new instance with default values.
            ActionForward(java.lang.String path)
                      Construct a new instance with the specified path.
            ActionForward(java.lang.String path, boolean redirect)
                      Construct a new instance with the specified path and redirect flag.
             
            Method Summary
             java.lang.String getName()
                      Return the name.
             java.lang.String getPath()
                      Return the path.
             boolean getRedirect()
                      Return the redirect flag.
             void setName(java.lang.String name)
                      Set the name.
             void setPath(java.lang.String path)
                      Set the path.
             void setRedirect(boolean redirect)
                      Set the redirect flag.
             java.lang.String toString()
                      Return a String version of this mapping.
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, wait, wait, wait
             

            Field Detail

            name

            protected java.lang.String name
            The logical name of this forward.

            path

            protected java.lang.String path
            The context-relative (for a forward) or relative or absolute (for a redirect) URI path to be forwarded to.

            redirect

            protected boolean redirect
            Should this be a redirect instead of a forward?
            Constructor Detail

            ActionForward

            public ActionForward()
            Construct a new instance with default values.

            ActionForward

            public ActionForward(java.lang.String path)
            Construct a new instance with the specified path.
            Parameters:
            path - Path for this instance

            ActionForward

            public ActionForward(java.lang.String path,
                                 boolean redirect)
            Construct a new instance with the specified path and redirect flag.
            Parameters:
            path - Path for this instance
            redirect - Redirect flag for this instance
            Method Detail

            getName

            public java.lang.String getName()
            Return the name.

            setName

            public void setName(java.lang.String name)
            Set the name.
            Parameters:
            name - The new name

            getPath

            public java.lang.String getPath()
            Return the path.

            setPath

            public void setPath(java.lang.String path)
            Set the path.
            Parameters:
            path - The new path

            getRedirect

            public boolean getRedirect()
            Return the redirect flag.

            setRedirect

            public void setRedirect(boolean redirect)
            Set the redirect flag.
            Parameters:
            redirect - The new redirect flag

            toString

            public java.lang.String toString()
            Return a String version of this mapping.
            Overrides:
            toString in class java.lang.Object


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/action/ActionForwards.html0000644000175000017500000003475410404045220030445 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class ActionForwards

            org.apache.struts.action
            Class ActionForwards

            java.lang.Object
              |
              +--org.apache.struts.action.ActionForwards
            
            All Implemented Interfaces:
            java.io.Serializable

            public class ActionForwards
            extends java.lang.Object
            implements java.io.Serializable

            Encapsulate a collection of ActionForward objects that can be administered and searched, while hiding the internal implementation.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            private  FastHashMap forwards
                      The collection of ActionForward instances, keyed by logical name.
             
            Constructor Summary
            ActionForwards()
                       
             
            Method Summary
             void addForward(ActionForward forward)
                      Register a logical forwarding to the set configured for this servlet.
             ActionForward findForward(java.lang.String name)
                      Return the forwarding associated with the specified logical name, if any; otherwise return null.
             java.lang.String[] findForwards()
                      Return the set of logical names for forwards defined in this collection.
             boolean getFast()
                      Return the "fast" mode flag.
             void removeForward(ActionForward forward)
                      Deregister a forwarding from the set configured for this servlet.
             void setFast(boolean fast)
                      Set the "fast" mode flag.
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            forwards

            private FastHashMap forwards
            The collection of ActionForward instances, keyed by logical name.
            Constructor Detail

            ActionForwards

            public ActionForwards()
            Method Detail

            getFast

            public boolean getFast()
            Return the "fast" mode flag.

            setFast

            public void setFast(boolean fast)
            Set the "fast" mode flag.
            Parameters:
            fast - The new fast mode flag

            addForward

            public void addForward(ActionForward forward)
            Register a logical forwarding to the set configured for this servlet.
            Parameters:
            forward - The forwarding to be added

            findForward

            public ActionForward findForward(java.lang.String name)
            Return the forwarding associated with the specified logical name, if any; otherwise return null.
            Parameters:
            name - Logical name of the requested forwarding

            findForwards

            public java.lang.String[] findForwards()
            Return the set of logical names for forwards defined in this collection. If there are no such forwards, a zero-length array is returned.

            removeForward

            public void removeForward(ActionForward forward)
            Deregister a forwarding from the set configured for this servlet.
            Parameters:
            forward - The forwarding to be deregistered


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/action/ActionMapping.html0000644000175000017500000020062510404045174030251 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class ActionMapping

            org.apache.struts.action
            Class ActionMapping

            java.lang.Object
              |
              +--org.apache.struts.action.ActionMapping
            
            All Implemented Interfaces:
            java.io.Serializable
            Direct Known Subclasses:
            ActionMappingBase, RequestActionMapping, SessionActionMapping

            public class ActionMapping
            extends java.lang.Object
            implements java.io.Serializable

            An ActionMapping represents the information that the controller servlet, ActionServlet, knows about the mapping of a particular request to an instance of a particular action class. The mapping is passed to the perform() method of the action class itself, enabling access to this information directly.

            An ActionMapping has the following minimal set of properties. Additional properties can be added by a subclass, simply by providing appropriate public "getter" and "setter" methods.

            • actionClass - Fully qualified Java class name of the Action implementation class used by this mapping. This property is required. DEPRECATED - use type instead.
            • attribute - Name of the request-scope or session-scope attribute under which our form bean is accessed, if it is other than the bean's specified name. Replaces the old formAttribute property.
            • formAttribute - Name of the session attribute under which an ActionForm bean is created and/or updated for this mapping. If not present, no ActionForm bean will be maintained automatically. DEPRECATED - use attribute instead.
            • formClass - Fully qualified Java class name of the ActionForm implementation class used by this mapping (if any). DEPRECATED - use the name attribute to look up the corresponding ActionFormBean information.
            • formPrefix - Prefix used to match request parameter names when populating the properties of our ActionForm bean (if any). DEPRECATED - use prefix instead.
            • formScope - Scope within which the form bean associated with this mapping will be created or looked for. Valid values are "request" or "session". DEPRECATED - use scope instead.
            • formSuffix - Suffix used to match request parameter names when populating the properties of our ActionForm bean (if any). DEPRECATED - use suffix instead.
            • forward - Context-relative path of the resource that should serve this request (via a call to RequestDispatcher.forward()) instead of instantiating the Action class specified by the type property. Exactly one of the forward, include, or type properties must be specified.
            • forwards - The set of ActionForwards locally associated with this mapping.
            • include - Context-relative path of the resource that should serve this request (via a call to RequestDispatcher.include()) instead of instantiating the Action class specified by the type property. Exactly one of the forward, include, or type properties must be specified.
            • input - Context-relative path of the input form to which control should be returned if a validation error is encountered. Replaces the old inputForm property.
            • inputForm - Context-relative path of the input form to which control should be returned if a validation error is encountered. DEPRECATED - use input instead.
            • mappings - The ActionMappings collection of which we are a part.
            • name - Name of the form bean, if any, associated with this action.
            • parameter - General purpose configuration parameter that can be used to pass extra information to the Action selected by this ActionMapping.
            • path - Request URI path used to select this mapping. If extension mapping is used for the controller servlet, the extension will be stripped before comparisons against this value are made.
            • prefix - Prefix used to match request parameter names to form bean property names, if any. Replaces the old formPrefix property.
            • scope - Identifier of the scope ("request" or "session" within which the form bean, if any, associated with this action will be created. Replaces the old formScope attribute.
            • suffix - Suffix used to match request parameter names when populating the properties of our ActionForm bean (if any). Replaces the old formSuffix property.
            • type - Fully qualified Java class name of the Action implementation class used by this mapping. Replaces the old actionClass property. Exactly one of the forward, include, or type properties must be specified.
            • unknown - Set to true if this action should be configured as the default for this application, to handle all requests not handled by another action. Only one action can be defined as a default within a single application.
            • validate - Set to true if the validate() method of the form bean (if any) associated with this mapping should be called.

            Version:
            $Revision: 1.2 $ $Date: 2001-11-04 07:42:21 +0000 (Sun, 04 Nov 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  java.lang.String attribute
                      The name of the request-scope or session-scope attribute under which our form bean, if any, will be created.
            protected  java.lang.String forward
                      The context relative path of the servlet or JSP resource (to be called via RequestDispatcher.forward()) that will process this request, rather than instantiating and calling the Action class that is specified by the type attribute.
            protected  ActionForwards forwards
                      The set of ActionForward objects associated with this mapping.
            protected  java.lang.String include
                      The context relative path of the servlet or JSP resource (to be called via RequestDispatcher.include()) that will process this request, rather than instantiating and calling the Action class that is specified by the type attribute.
            protected  java.lang.String input
                      The context-relative path of the input form to which control should be returned if a validation error is encountered.
            protected  Action instance
                      The initialized Action instance for this mapping.
            protected  ActionMappings mappings
                      The ActionMappings collection of which we are a part.
            protected  java.lang.String multipartClass
                      The fully qualified class name of the MultipartRequestHandler implementation class used to process multipart request data for this mapping
            protected  java.lang.String name
                      The name of the form bean, if any, associated with this action.
            protected  java.lang.String parameter
                      General purpose configuration parameter for this mapping.
            protected  java.lang.String path
                      The context-relative path of the submitted request, starting with a "/" character, and without the filename extension (if any), that is mapped to this action.
            protected  java.lang.String prefix
                      The parameter name prefix used to select parameters for this action.
            protected  java.lang.String scope
                      The identifier of the scope ("request" or "session") under which the form bean associated with this mapping, if any, should be created.
            protected  java.lang.String suffix
                      The parameter name suffix used to select parameters for this action.
            protected  java.lang.String type
                      The fully qualified Java class name of the Action implementation class to be used to process requests for this mapping.
            protected  boolean unknown
                      Should this action be the default for this application?
            protected  boolean validate
                      Should the validate() method of our form bean be called?
             
            Constructor Summary
            ActionMapping()
                       
             
            Method Summary
             void addForward(ActionForward forward)
                      Add a new ActionForward associated with this mapping.
             ActionForm createFormInstance()
                      Deprecated. Creation of ActionForm instances is now the responsibility of the controller servlet
             ActionForward findForward(java.lang.String name)
                      Return the ActionForward with the specified name, if any; otherwise return null.
             java.lang.String[] findForwards()
                      Return the logical names of all locally defined forwards for this mapping.
             java.lang.String getActionClass()
                      Deprecated. Use getType() instead
             java.lang.String getAttribute()
                      Return the attribute name for our form bean.
             java.lang.String getFormAttribute()
                      Deprecated. Use getAttribute() instead
             java.lang.String getFormClass()
                      Deprecated. Use the bean name to look up the corresponding ActionFormBean instead
             java.lang.String getFormPrefix()
                      Deprecated. Use getPrefix() instead
             java.lang.String getFormScope()
                      Deprecated. Use getScope() instead
             java.lang.String getFormSuffix()
                      Deprecated. Use getSuffix() instead
             java.lang.String getForward()
                      Return the forward path for this mapping.
             java.lang.String getInclude()
                      Return the include path for this mapping.
             java.lang.String getInput()
                      Return the input form path for this mapping.
             java.lang.String getInputForm()
                      Deprecated. Use getInput() instead
             ActionMappings getMappings()
                      Return the ActionMappings collection of which we are a part.
             java.lang.String getMultipartClass()
                      Get the name of the class used to handle multipart request data
             java.lang.String getName()
                      Return the name of the form bean for this mapping.
             java.lang.String getParameter()
                      Return the general purpose configuation parameter for this mapping.
             java.lang.String getPath()
                      Return the request URI path used to select this mapping.
             java.lang.String getPrefix()
                      Return the parameter name prefix for this mapping.
             java.lang.String getScope()
                      Return the attribute scope for this mapping.
             java.lang.String getSuffix()
                      Return the parameter name suffix for this mapping.
             java.lang.String getType()
                      Return the fully qualified Action class name.
             boolean getUnknown()
                      Return the unknown flag for this mapping.
             boolean getValidate()
                      Return the validate flag for this mapping.
             void removeForward(ActionForward forward)
                      Remove a ActionForward associated with this mapping.
             void setActionClass(java.lang.String actionClass)
                      Deprecated. Use setType(String) instead
             void setAttribute(java.lang.String attribute)
                      Set the attribute name for our form bean.
             void setFormAttribute(java.lang.String formAttribute)
                      Deprecated. Use setAttribute(String) instead
             void setFormClass(java.lang.String formClass)
                      Deprecated. Modify the corresponding ActionFormBean instead
             void setFormPrefix(java.lang.String formPrefix)
                      Deprecated. Use setPrefix(String) instead
             void setFormScope(java.lang.String formScope)
                      Deprecated. Use setScope(String) instead
             void setFormSuffix(java.lang.String formSuffix)
                      Deprecated. Use setSuffix(String) instead
             void setForward(java.lang.String forward)
                      Set the forward path for this mapping.
             void setInclude(java.lang.String include)
                      Set the include path for this mapping.
             void setInput(java.lang.String input)
                      Set the input form path for this mapping.
             void setInputForm(java.lang.String inputForm)
                      Deprecated. Use setInput(String) instead
             void setMappings(ActionMappings mappings)
                      Set the ActionMappings collection of which we are a part.
             void setMultipartClass(java.lang.String multipartClass)
                      Set the name of the class used to handle multipart request data
             void setName(java.lang.String name)
                      Set the name of the form bean for this mapping.
             void setParameter(java.lang.String parameter)
                      Set the general purpose configuration parameter for this mapping.
             void setPath(java.lang.String path)
                      Set the request URI path used to select this mapping.
             void setPrefix(java.lang.String prefix)
                      Set the parameter name prefix for this mapping.
             void setScope(java.lang.String scope)
                      Set the attribute scope for this mapping.
             void setSuffix(java.lang.String suffix)
                      Set the parameter name suffix for this mapping.
             void setType(java.lang.String type)
                      Set the fully qualified Action class name.
             void setUnknown(boolean unknown)
                      Set the unknown flag for this mapping.
             void setValidate(boolean validate)
                      Set the validate flag for this mapping.
             java.lang.String toString()
                      Return a String version of this mapping.
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, wait, wait, wait
             

            Field Detail

            attribute

            protected java.lang.String attribute
            The name of the request-scope or session-scope attribute under which our form bean, if any, will be created.

            forward

            protected java.lang.String forward
            The context relative path of the servlet or JSP resource (to be called via RequestDispatcher.forward()) that will process this request, rather than instantiating and calling the Action class that is specified by the type attribute.

            forwards

            protected ActionForwards forwards
            The set of ActionForward objects associated with this mapping.

            include

            protected java.lang.String include
            The context relative path of the servlet or JSP resource (to be called via RequestDispatcher.include()) that will process this request, rather than instantiating and calling the Action class that is specified by the type attribute.

            input

            protected java.lang.String input
            The context-relative path of the input form to which control should be returned if a validation error is encountered.

            instance

            protected Action instance
            The initialized Action instance for this mapping.

            mappings

            protected ActionMappings mappings
            The ActionMappings collection of which we are a part.

            multipartClass

            protected java.lang.String multipartClass
            The fully qualified class name of the MultipartRequestHandler implementation class used to process multipart request data for this mapping

            name

            protected java.lang.String name
            The name of the form bean, if any, associated with this action.

            parameter

            protected java.lang.String parameter
            General purpose configuration parameter for this mapping.

            path

            protected java.lang.String path
            The context-relative path of the submitted request, starting with a "/" character, and without the filename extension (if any), that is mapped to this action.

            prefix

            protected java.lang.String prefix
            The parameter name prefix used to select parameters for this action.

            scope

            protected java.lang.String scope
            The identifier of the scope ("request" or "session") under which the form bean associated with this mapping, if any, should be created.

            suffix

            protected java.lang.String suffix
            The parameter name suffix used to select parameters for this action.

            type

            protected java.lang.String type
            The fully qualified Java class name of the Action implementation class to be used to process requests for this mapping.

            unknown

            protected boolean unknown
            Should this action be the default for this application?

            validate

            protected boolean validate
            Should the validate() method of our form bean be called?
            Constructor Detail

            ActionMapping

            public ActionMapping()
            Method Detail

            getActionClass

            public java.lang.String getActionClass()
            Deprecated. Use getType() instead

            Return the action class name for this mapping.

            setActionClass

            public void setActionClass(java.lang.String actionClass)
            Deprecated. Use setType(String) instead

            Set the action class name for this mapping.
            Parameters:
            actionClass - The new action class name

            getAttribute

            public java.lang.String getAttribute()
            Return the attribute name for our form bean.

            setAttribute

            public void setAttribute(java.lang.String attribute)
            Set the attribute name for our form bean.
            Parameters:
            attribute - The new attribute name

            getFormAttribute

            public java.lang.String getFormAttribute()
            Deprecated. Use getAttribute() instead

            Return the form session attribute key for this mapping, if any.

            setFormAttribute

            public void setFormAttribute(java.lang.String formAttribute)
            Deprecated. Use setAttribute(String) instead

            Set the form session attribute key for this mapping.
            Parameters:
            formAttribute - The new form session attribute key

            getFormClass

            public java.lang.String getFormClass()
            Deprecated. Use the bean name to look up the corresponding ActionFormBean instead

            Return the form class name for this mapping.

            setFormClass

            public void setFormClass(java.lang.String formClass)
            Deprecated. Modify the corresponding ActionFormBean instead

            Set the form class name for this mapping.
            Parameters:
            formClass - The new form class name

            getFormPrefix

            public java.lang.String getFormPrefix()
            Deprecated. Use getPrefix() instead

            Return the form parameter name prefix for this mapping.

            setFormPrefix

            public void setFormPrefix(java.lang.String formPrefix)
            Deprecated. Use setPrefix(String) instead

            Set the form parameter name prefix for this mapping.
            Parameters:
            formPrefix - The new form prefix

            getFormScope

            public java.lang.String getFormScope()
            Deprecated. Use getScope() instead

            Return the scope within which our form bean will be accessed.

            setFormScope

            public void setFormScope(java.lang.String formScope)
            Deprecated. Use setScope(String) instead

            Set the scope within which our form bean will be accessed.
            Parameters:
            formScope - The new scope ("request" or "session")

            getFormSuffix

            public java.lang.String getFormSuffix()
            Deprecated. Use getSuffix() instead

            Return the form parameter name suffix for this mapping.

            setFormSuffix

            public void setFormSuffix(java.lang.String formSuffix)
            Deprecated. Use setSuffix(String) instead

            Set the form parameter name suffix for this mapping.
            Parameters:
            formSuffix - The new form suffix

            getForward

            public java.lang.String getForward()
            Return the forward path for this mapping.

            setForward

            public void setForward(java.lang.String forward)
            Set the forward path for this mapping.
            Parameters:
            forward - The forward path for this mapping

            getInclude

            public java.lang.String getInclude()
            Return the include path for this mapping.

            setInclude

            public void setInclude(java.lang.String include)
            Set the include path for this mapping.
            Parameters:
            include - The include path for this mapping

            getInput

            public java.lang.String getInput()
            Return the input form path for this mapping.

            setInput

            public void setInput(java.lang.String input)
            Set the input form path for this mapping.
            Parameters:
            input - The new input form path

            getInputForm

            public java.lang.String getInputForm()
            Deprecated. Use getInput() instead

            Return the input form URI for this mapping.

            setInputForm

            public void setInputForm(java.lang.String inputForm)
            Deprecated. Use setInput(String) instead

            Set the input form URI for this mapping.
            Parameters:
            inputForm - The new input form URI

            getMappings

            public ActionMappings getMappings()
            Return the ActionMappings collection of which we are a part.

            getMultipartClass

            public java.lang.String getMultipartClass()
            Get the name of the class used to handle multipart request data
            Returns:
            A fully qualified java class name representing the implementation of MultipartRequestHandler to use.

            setMappings

            public void setMappings(ActionMappings mappings)
            Set the ActionMappings collection of which we are a part.
            Parameters:
            mappings - The new ActionMappings collection

            setMultipartClass

            public void setMultipartClass(java.lang.String multipartClass)
            Set the name of the class used to handle multipart request data
            Parameters:
            multipartClass - The fully qualified class name representing the MultipartRequestHandler class to use. If null, the global class specified in "web.xml" will be used.

            getName

            public java.lang.String getName()
            Return the name of the form bean for this mapping.

            setName

            public void setName(java.lang.String name)
            Set the name of the form bean for this mapping.
            Parameters:
            name - The new name

            getParameter

            public java.lang.String getParameter()
            Return the general purpose configuation parameter for this mapping.

            setParameter

            public void setParameter(java.lang.String parameter)
            Set the general purpose configuration parameter for this mapping.
            Parameters:
            parameter - The new configuration parameter

            getPath

            public java.lang.String getPath()
            Return the request URI path used to select this mapping.

            setPath

            public void setPath(java.lang.String path)
            Set the request URI path used to select this mapping.
            Parameters:
            path - The new request URI path

            getPrefix

            public java.lang.String getPrefix()
            Return the parameter name prefix for this mapping.

            setPrefix

            public void setPrefix(java.lang.String prefix)
            Set the parameter name prefix for this mapping.
            Parameters:
            prefix - The new parameter name prefix

            getScope

            public java.lang.String getScope()
            Return the attribute scope for this mapping.

            setScope

            public void setScope(java.lang.String scope)
            Set the attribute scope for this mapping.
            Parameters:
            scope - The new attribute scope

            getSuffix

            public java.lang.String getSuffix()
            Return the parameter name suffix for this mapping.

            setSuffix

            public void setSuffix(java.lang.String suffix)
            Set the parameter name suffix for this mapping.
            Parameters:
            suffix - The new parameter name suffix

            getType

            public java.lang.String getType()
            Return the fully qualified Action class name.

            setType

            public void setType(java.lang.String type)
            Set the fully qualified Action class name.
            Parameters:
            type - The new class name

            getUnknown

            public boolean getUnknown()
            Return the unknown flag for this mapping.

            setUnknown

            public void setUnknown(boolean unknown)
            Set the unknown flag for this mapping.
            Parameters:
            unknown - The new unknown flag

            getValidate

            public boolean getValidate()
            Return the validate flag for this mapping.

            setValidate

            public void setValidate(boolean validate)
            Set the validate flag for this mapping.
            Parameters:
            validate - The new validate flag

            addForward

            public void addForward(ActionForward forward)
            Add a new ActionForward associated with this mapping.
            Parameters:
            forward - The ActionForward to be added

            createFormInstance

            public ActionForm createFormInstance()
            Deprecated. Creation of ActionForm instances is now the responsibility of the controller servlet

            Create and return an initialized instance of our form class. If instantiation fails for any reason, null is returned.

            findForward

            public ActionForward findForward(java.lang.String name)
            Return the ActionForward with the specified name, if any; otherwise return null. If there is no locally defined forwarding for the specified name, but a global forwards collection has been associated with this mapping, the global collection will also be searched before returning.
            Parameters:
            name - Name of the forward entry to be returned

            findForwards

            public java.lang.String[] findForwards()
            Return the logical names of all locally defined forwards for this mapping. If there are no such forwards, a zero-length array is returned.

            removeForward

            public void removeForward(ActionForward forward)
            Remove a ActionForward associated with this mapping.
            Parameters:
            forward - The ActionForward to be removed

            toString

            public java.lang.String toString()
            Return a String version of this mapping.
            Overrides:
            toString in class java.lang.Object


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/action/ActionMappingBase.html0000644000175000017500000003766710404045212031053 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class ActionMappingBase

            org.apache.struts.action
            Class ActionMappingBase

            java.lang.Object
              |
              +--org.apache.struts.action.ActionMapping
                    |
                    +--org.apache.struts.action.ActionMappingBase
            
            All Implemented Interfaces:
            java.io.Serializable

            Deprecated. Now that ActionMapping is a class, you should use it intead

            public class ActionMappingBase
            extends ActionMapping

            A minimal implementation of ActionMapping that contains only the required properties. Additional properties can be provided by subclassing this class and adding new "getter" and "setter" methods.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Fields inherited from class org.apache.struts.action.ActionMapping
            attribute, forward, forwards, include, input, instance, mappings, multipartClass, name, parameter, path, prefix, scope, suffix, type, unknown, validate
             
            Constructor Summary
            ActionMappingBase()
                      Deprecated.  
             
            Methods inherited from class org.apache.struts.action.ActionMapping
            addForward, createFormInstance, findForward, findForwards, getActionClass, getAttribute, getFormAttribute, getFormClass, getFormPrefix, getFormScope, getFormSuffix, getForward, getInclude, getInput, getInputForm, getMappings, getMultipartClass, getName, getParameter, getPath, getPrefix, getScope, getSuffix, getType, getUnknown, getValidate, removeForward, setActionClass, setAttribute, setFormAttribute, setFormClass, setFormPrefix, setFormScope, setFormSuffix, setForward, setInclude, setInput, setInputForm, setMappings, setMultipartClass, setName, setParameter, setPath, setPrefix, setScope, setSuffix, setType, setUnknown, setValidate, toString
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, wait, wait, wait
             

            Constructor Detail

            ActionMappingBase

            public ActionMappingBase()
            Deprecated. 


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/action/ActionMappings.html0000644000175000017500000004757210404045232030441 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class ActionMappings

            org.apache.struts.action
            Class ActionMappings

            java.lang.Object
              |
              +--org.apache.struts.action.ActionMappings
            
            All Implemented Interfaces:
            java.io.Serializable

            public class ActionMappings
            extends java.lang.Object
            implements java.io.Serializable

            Encapsulate a collection of ActionMapping objects that can be administered and searched, while hiding the internal implementation.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  FastHashMap mappings
                      The collection of ActionMapping instances, keyed by request path.
            protected  ActionServlet servlet
                      The ActionServlet instance of our owning application.
            protected  ActionMapping unknown
                      The ActionMapping that should handle unknown request paths, if any.
             
            Constructor Summary
            ActionMappings()
                       
             
            Method Summary
             void addMapping(ActionMapping mapping)
                      Register a logical mapping to the set configured for this servlet.
             ActionMapping findMapping(java.lang.String path)
                      Return the mapping associated with the specified logical name, if any; otherwise return null.
             java.lang.String[] findMappings()
                      Return the set of paths for mappings defined in this collection.
             boolean getFast()
                      Return the "fast" mode flag.
             ActionServlet getServlet()
                      Return the ActionServlet instance of our owning application.
             ActionMapping getUnknown(javax.servlet.http.HttpServletRequest request)
                      Return the Action that should handle unknown request paths, if any.
             ActionMapping getUnknown(javax.servlet.ServletRequest request)
                      Return the Action that should handle unknown request paths, if any.
             void removeMapping(ActionMapping mapping)
                      Deregister a mapping from the set configured for this servlet.
             void setFast(boolean fast)
                      Set the "fast" mode flag.
             void setServlet(ActionServlet servlet)
                      Set the ActionServlet instance of our owning application.
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            mappings

            protected FastHashMap mappings
            The collection of ActionMapping instances, keyed by request path.

            servlet

            protected transient ActionServlet servlet
            The ActionServlet instance of our owning application.

            unknown

            protected ActionMapping unknown
            The ActionMapping that should handle unknown request paths, if any.
            Constructor Detail

            ActionMappings

            public ActionMappings()
            Method Detail

            getFast

            public boolean getFast()
            Return the "fast" mode flag.

            setFast

            public void setFast(boolean fast)
            Set the "fast" mode flag.
            Parameters:
            fast - The new fast mode flag

            getUnknown

            public ActionMapping getUnknown(javax.servlet.ServletRequest request)
            Return the Action that should handle unknown request paths, if any. The default implementation casts the request to HttpServletRequest and calls the corresponding version of this method.
            Parameters:
            request - The servlet request we are processing

            getUnknown

            public ActionMapping getUnknown(javax.servlet.http.HttpServletRequest request)
            Return the Action that should handle unknown request paths, if any.
            Parameters:
            request - The servlet request we are processing

            getServlet

            public ActionServlet getServlet()
            Return the ActionServlet instance of our owning application.

            setServlet

            public void setServlet(ActionServlet servlet)
            Set the ActionServlet instance of our owning application.
            Parameters:
            servlet - The new servlet instance

            addMapping

            public void addMapping(ActionMapping mapping)
            Register a logical mapping to the set configured for this servlet.
            Parameters:
            mapping - The mapping to be added

            findMapping

            public ActionMapping findMapping(java.lang.String path)
            Return the mapping associated with the specified logical name, if any; otherwise return null.
            Parameters:
            path - The request path for which to retrieve a mapping

            findMappings

            public java.lang.String[] findMappings()
            Return the set of paths for mappings defined in this collection. If there are no such mappings, a zero-length array is returned.

            removeMapping

            public void removeMapping(ActionMapping mapping)
            Deregister a mapping from the set configured for this servlet.
            Parameters:
            mapping - The mapping to be deregistered


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/action/ActionServlet.html0000644000175000017500000032364610404045242030307 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class ActionServlet

            org.apache.struts.action
            Class ActionServlet

            java.lang.Object
              |
              +--javax.servlet.GenericServlet
                    |
                    +--javax.servlet.http.HttpServlet
                          |
                          +--org.apache.struts.action.ActionServlet
            
            All Implemented Interfaces:
            java.io.Serializable, javax.servlet.Servlet, javax.servlet.ServletConfig

            public class ActionServlet
            extends javax.servlet.http.HttpServlet

            ActionServlet represents the "controller" in the Model-View-Controller (MVC) design pattern for web applications that is commonly known as "Model 2". This nomenclature originated with a description in the JavaServerPages Specification, version 0.92, and has persisted ever since (in the absence of a better name).

            Generally, a "Model 2" application is architected as follows:

            • The user interface will generally be created with JSP pages, which will not themselves contain any business logic. These pages represent the "view" component of an MVC architecture.
            • Forms and hyperlinks in the user interface that require business logic to be executed will be submitted to a request URI that is mapped to the controller servlet.
            • There will be one instance of this servlet class, which receives and processes all requests that change the state of a user's interaction with the application. This component represents the "controller" component of an MVC architecture.
            • The controller servlet will select and invoke an action class to perform the requested business logic.
            • The action classes will manipulate the state of the application's interaction with the user, typically by creating or modifying JavaBeans that are stored as request or session attributes (depending on how long they need to be available). Such JavaBeans represent the "model" component of an MVC architecture.
            • Instead of producing the next page of the user interface directly, action classes will generally use the RequestDispatcher.forward() facility of the servlet API to pass control to an appropriate JSP page to produce the next page of the user interface.

            The standard version of ActionServlet implements the following logic for each incoming HTTP request. You can override some or all of this functionality by subclassing this servlet and implementing your own version of the processing.

            • Identify, from the incoming request URI, the substring that will be used to select an action procedure.
            • Use this substring to map to the Java class name of the corresponding action class (an implementation of the Action interface).
            • If this is the first request for a particular action class, instantiate an instance of that class and cache it for future use.
            • Optionally populate the properties of an ActionForm bean associated with this mapping.
            • Call the perform() method of this action class, passing on a reference to the mapping that was used (thereby providing access to the underlying ActionServlet and ServletContext, as well as any specialized properties of the mapping itself), and the request and response that were passed to the controller by the servlet container.

            The standard version of ActionServlet is configured based on the following servlet initialization parameters, which you will specify in the web application deployment descriptor (/WEB-INF/web.xml) for your application. Subclasses that specialize this servlet are free to define additional initialization parameters.

            • application - Java class name of the application resources bundle base class. [NONE]
            • bufferSize - The size of the input buffer used when processing file uploads. [4096]
            • config - Context-relative path to the XML resource containing our configuration information. [/WEB-INF/struts-config.xml]
            • content - Default content type and character encoding to be set on each response; may be overridden by a forwarded-to servlet or JSP page. [text/html]
            • debug - The debugging detail level for this servlet, which controls how much information is logged. [0]
            • detail - The debugging detail level for the Digester we utilize in initMapping(), which logs to System.out instead of the servlet log. [0]
            • factory - The Java class name of the MessageResourcesFactory used to create the application MessageResources object.
            • formBean - The Java class name of the ActionFormBean implementation to use [org.apache.struts.action.ActionFormBean].
            • forward - The Java class name of the ActionForward implementation to use [org.apache.struts.action.ActionForward]. Two convenient classes you may wish to use are:
              • org.apache.struts.action.ForwardingActionForward - Subclass of org.apache.struts.action.ActionForward that defaults the redirect property to false (same as the ActionForward default value).
              • org.apache.struts.action.RedirectingActionForward - Subclass of org.apache.struts.action.ActionForward that defaults the redirect property to true.
            • locale - If set to true, and there is a user session, identify and store an appropriate java.util.Locale object (under the standard key identified by Action.LOCALE_KEY) in the user's session if there is not a Locale object there already.
            • mapping - The Java class name of the ActionMapping implementation to use [org.apache.struts.action.ActionMapping]. Two convenient classes you may wish to use are:
              • org.apache.struts.action.RequestActionMapping - Subclass of org.apache.struts.action.ActionMapping that defaults the scope property to "request".
              • org.apache.struts.action.SessionActionMapping - Subclass of org.apache.struts.action.ActionMapping that defaults the scope property to "session". (Same as the ActionMapping default value).
            • maxFileSize - The maximum size (in bytes) of a file to be accepted as a file upload. Can be expressed as a number followed by a "K" "M", or "G", which are interpreted to mean kilobytes, megabytes, or gigabytes, respectively. [250M]
            • multipartClass - The fully qualified name of the MultiplartRequestHandler implementation class to be used for processing file uploads. [org.apache.struts.upload.DiskMultipartRequestHandler]
            • nocache - If set to true, add HTTP headers to every response intended to defeat browser caching of any response we generate or forward to. [false]
            • null - If set to true, set our application resources to return null if an unknown message key is used. Otherwise, an error message including the offending message key will be returned. [true]
            • tempDir - The temporary working directory to use when processing file uploads. [The working directory provided to this web application as a servlet context attribute]
            • validate - Are we using the new configuration file format? [true]
            • validating - Should we use a validating XML parse to process the configuration file (strongly recommended)? [true]

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  FastHashMap actions
                      The set of Action instances that have been created and initialized, keyed by the fully qualified Java class name.
            protected  MessageResources application
                      The resources object for our application resources (if any).
            protected  int bufferSize
                      The size in bytes of the buffer used to read files from a client upload
            protected  java.lang.String config
                      The context-relative path to our configuration resource.
            protected  java.lang.String content
                      The default content type and character encoding to be set on each response (may be overridden by forwarded-to resources).
            protected  FastHashMap dataSources
                      The JDBC data sources that has been configured for this application, if any, keyed by the servlet context attribute under which they are stored.
            protected  int debug
                      The debugging detail level for this servlet.
            protected  java.util.Locale defaultLocale
                      The default Locale for this server.
            protected  java.lang.String factoryClass
                      The Java class name of the MessageResourcesFactory class for the application message resources bundle.
            protected  java.lang.String formBeanClass
                      The Java class name of the ActionFormBean implementation class to use.
            protected  ActionFormBeans formBeans
                      The global ActionFormBean collection for this controller.
            protected  java.lang.String forwardClass
                      The Java class name of the ActionForward implementation class to use.
            protected  ActionForwards forwards
                      The global ActionForward collection for this controller.
            protected  MessageResources internal
                      The resources object for our internal resources.
            protected  java.lang.String internalName
                      The Java base name of our internal resources.
            protected  boolean locale
                      Should we create a java.util.Locale for this user, based on the HTTP headers of the request, if one is not present?
            protected  java.lang.String mappingClass
                      The Java class name of our ActionMapping implementation class.
            protected  ActionMappings mappings
                      The configured mappings for this web application, keyed by path.
            protected  java.lang.String maxFileSize
                      The maximum size allowed for a client upload.
            protected  java.lang.String multipartClass
                      The MultipartRequestHandler class name used for handling multipart form requests.
            protected  boolean nocache
                      Include the no-caching headers in our response?
            protected  java.lang.String[] registrations
                      The set of public identifiers, and corresponding resource names, for the versions of the configuration file DTDs that we know about.
            protected  java.lang.String servletMapping
                      The URL pattern to which we are mapped in our web application deployment descriptor.
            protected  java.lang.String servletName
                      The servlet name under which we are registered in our web application deployment descriptor.
            protected  java.lang.String tempDir
                      The directory used to store temporary files for the DiskMultipartRequestHandler multipart implementation
            protected  boolean validate
                      Are we using the new configuration file format?
            protected  boolean validating
                      Should we use a validating XML parser to read the configuration file?
             
            Fields inherited from class javax.servlet.http.HttpServlet
            HEADER_IFMODSINCE, HEADER_LASTMOD, LSTRING_FILE, lStrings, METHOD_DELETE, METHOD_GET, METHOD_HEAD, METHOD_OPTIONS, METHOD_POST, METHOD_PUT, METHOD_TRACE
             
            Constructor Summary
            ActionServlet()
                       
             
            Method Summary
             void addDataSource(java.lang.String key, javax.sql.DataSource dataSource)
                      Add a data source object to be used by this application.
             void addFormBean(ActionFormBean formBean)
                      Register a form bean definition to the set configured for this servlet.
             void addForward(ActionForward forward)
                      Register a logical forwarding to the set configured for this servlet.
             void addMapping(ActionMapping mapping)
                      Register a mapping to the set configured for this servlet.
             void addServletMapping(java.lang.String servletName, java.lang.String urlPattern)
                      Remember a servlet mapping from our web application deployment descriptor, if it is for this servlet.
             void destroy()
                      Gracefully shut down this controller servlet, releasing any resources that were allocated at initialization.
            protected  void destroyActions()
                      Gracefully shut down any action instances we have created.
            protected  void destroyApplication()
                      Gracefully terminate use of the application MessageResources (if any).
            protected  void destroyDataSources()
                      Gracefully terminate use of the data source associated with this application (if any).
            protected  void destroyInternal()
                      Gracefully terminate use of the internal MessageResources.
             void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process an HTTP "GET" request.
             void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process an HTTP "POST" request.
             javax.sql.DataSource findDataSource(java.lang.String key)
                      Return a JDBC data source associated with this application, if any.
             ActionFormBean findFormBean(java.lang.String name)
                      Return the form bean definition associated with the specified logical name, if any; otherwise return null.
             ActionForward findForward(java.lang.String name)
                      Return the forwarding associated with the specified logical name, if any; otherwise return null.
             ActionMapping findMapping(java.lang.String path)
                      Return the mapping associated with the specified request path, if any; otherwise return null.
             int getBufferSize()
                      Get the buffer size (how large of a chunk of data is recieved by the input stream at once) used for file uploading.
             int getDebug()
                      Return the debugging detail level for this servlet.
             java.lang.String getFormBeanClass()
                      Return the Java class name of the class used to instantiate ActionFormBean objects.
             java.lang.String getForwardClass()
                      Return the Java class name of the class used to instantiate ActionForward objects.
             java.lang.String getMappingClass()
                      Return the Java class name of the class used to instantiate ActionMapping objects.
             java.lang.String getMaxFileSize()
                      Get the maximum file size.
             java.lang.String getMultipartClass()
                      Get the class name of the MultipartRequestHandler implementation
             MessageResources getResources()
                      Return the application resources for this web application, if any.
             java.lang.String getTempDir()
                      Get the directory used to temporarily store form files
             void init()
                      Initialize this servlet.
            protected  void initActions()
                      Initialize the collection of previously instantiated Action instances.
            protected  void initApplication()
                      Initialize the MessageResources bundle for this application, if any.
            protected  void initDataSources()
                      Initialize use of the data sources associated with this application (if any).
            protected  void initDebug()
                      Initialize the debugging detail level for this application.
            protected  Digester initDigester(int detail)
                      Construct and return a digester that uses the new configuration file format.
            protected  Digester initDigesterOld(int detail)
                      Construct and return a digester that uses the old configuration file format.
            protected  void initInternal()
                      Initialize our internal MessageResources bundle.
            protected  void initMapping()
                      Initialize the mapping information for this application.
            protected  void initOther()
                      Initialize other configuration parameters that have not yet been processed.
            protected  void initServlet()
                      Initialize the servlet mapping under which our controller servlet is being accessed.
            protected  void initUpload()
                      Initialize upload parameters and "bufferSize", "multipartClass", "maxFileSize", "tempDir"
             void log(java.lang.String message, int level)
                      Log the specified message if the current debugging detail level for this servlet has been set to an equal or higher value.
            protected  void process(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process an HTTP request.
            protected  Action processActionCreate(ActionMapping mapping, javax.servlet.http.HttpServletRequest request)
                      Create or retrieve the Action instance that will process this request, or null if no such Action instance can be created.
            protected  ActionForm processActionForm(ActionMapping mapping, javax.servlet.http.HttpServletRequest request)
                      Retrieve and return the ActionForm bean associated with this mapping, creating and stashing one if necessary.
            protected  void processActionForward(ActionForward forward, ActionMapping mapping, ActionForm formInstance, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Forward to the specified destination, by the specified mechanism, if an ActionForward instance was returned by the Action.
            protected  ActionForward processActionPerform(Action action, ActionMapping mapping, ActionForm formInstance, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Ask the specified Action instance to handle this request.
            protected  void processContent(javax.servlet.http.HttpServletResponse response)
                      Set the default content type (with optional character encoding) for all responses.
            protected  boolean processForward(ActionMapping mapping, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process a forward requested by this mapping, if any.
            protected  boolean processInclude(ActionMapping mapping, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process an include requested by this mapping, if any.
            protected  void processLocale(javax.servlet.http.HttpServletRequest request)
                      Automatically calculate an appropriate java.util.Locale for this user, and store it in their session, if there is no such Locale object present already.
            protected  ActionMapping processMapping(java.lang.String path, javax.servlet.http.HttpServletRequest request)
                      Identify and return an appropriate ActionMapping for the specified path.
            protected  void processNoCache(javax.servlet.http.HttpServletResponse response)
                      Render the HTTP headers to defeat browser caching if requested.
            protected  java.lang.String processPath(javax.servlet.http.HttpServletRequest request)
                      Identify and return the path component (from the request URI) that we will use to select an ActionMapping to dispatch with.
            protected  void processPopulate(ActionForm formInstance, ActionMapping mapping, javax.servlet.http.HttpServletRequest request)
                      Populate the properties of the specified ActionForm from the request parameters included with this request.
            protected  boolean processPreprocess(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      General purpose preprocessing hook that can be overridden to support application specific preprocessing activity.
            protected  boolean processValidate(ActionMapping mapping, ActionForm formInstance, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Call the validate() method of the specified ActionForm, and forward back to the input form if there are any errors.
             void reload()
                      Reload the configuration of this controller servlet from our underlying configuration files.
             void removeFormBean(ActionFormBean formBean)
                      Deregister a form bean definition from the set configured for this servlet.
             void removeForward(ActionForward forward)
                      Deregister a forwarding from the set configured for this servlet.
             void removeMapping(ActionMapping mapping)
                      Deregister a mapping from the set configured for this servlet.
             void setBufferSize(int bufferSize)
                      Set the buffer size (how large of a chunk of data is recieved by the input stream at once) used for file uploading.
             void setFormBeanClass(java.lang.String formBeanClass)
                      Set the Java class name of the class used to instantiate ActionFormBean objects.
             void setForwardClass(java.lang.String forwardClass)
                      Set the Java class name of the class used to instantiate ActionForward objects.
             void setMappingClass(java.lang.String mappingClass)
                      Set the Java class name of the class used to instantiate ActionMapping objects.
             void setMaxFileSize(java.lang.String maxFileSize)
                      Set the maximum file size that a client can upload, number String with a trailing letter indicating the size.
             void setMultipartClass(java.lang.String multipartClass)
                      Set the class name of the MultipartRequestHandler implementation
             void setTempDir(java.lang.String tempDir)
                      Set the directory used to temporarily store files for MultipartRequestHandler implementations that write to the disk
             
            Methods inherited from class javax.servlet.http.HttpServlet
            , doDelete, doHead, doOptions, doPut, doTrace, getAllDeclaredMethods, getLastModified, maybeSetLastModified, service, service
             
            Methods inherited from class javax.servlet.GenericServlet
            getInitParameter, getInitParameterNames, getServletConfig, getServletContext, getServletInfo, getServletName, init, log, log
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            actions

            protected FastHashMap actions
            The set of Action instances that have been created and initialized, keyed by the fully qualified Java class name.

            application

            protected MessageResources application
            The resources object for our application resources (if any).

            config

            protected java.lang.String config
            The context-relative path to our configuration resource.

            content

            protected java.lang.String content
            The default content type and character encoding to be set on each response (may be overridden by forwarded-to resources).

            dataSources

            protected FastHashMap dataSources
            The JDBC data sources that has been configured for this application, if any, keyed by the servlet context attribute under which they are stored.

            debug

            protected int debug
            The debugging detail level for this servlet.

            defaultLocale

            protected final java.util.Locale defaultLocale
            The default Locale for this server.

            factoryClass

            protected java.lang.String factoryClass
            The Java class name of the MessageResourcesFactory class for the application message resources bundle.

            formBeanClass

            protected java.lang.String formBeanClass
            The Java class name of the ActionFormBean implementation class to use.

            formBeans

            protected ActionFormBeans formBeans
            The global ActionFormBean collection for this controller.

            forwardClass

            protected java.lang.String forwardClass
            The Java class name of the ActionForward implementation class to use.

            forwards

            protected ActionForwards forwards
            The global ActionForward collection for this controller.

            internal

            protected MessageResources internal
            The resources object for our internal resources.

            internalName

            protected java.lang.String internalName
            The Java base name of our internal resources.

            locale

            protected boolean locale
            Should we create a java.util.Locale for this user, based on the HTTP headers of the request, if one is not present?

            mappingClass

            protected java.lang.String mappingClass
            The Java class name of our ActionMapping implementation class.

            mappings

            protected ActionMappings mappings
            The configured mappings for this web application, keyed by path.

            nocache

            protected boolean nocache
            Include the no-caching headers in our response?

            registrations

            protected java.lang.String[] registrations
            The set of public identifiers, and corresponding resource names, for the versions of the configuration file DTDs that we know about. There MUST be an even number of Strings in this list!

            servletMapping

            protected java.lang.String servletMapping
            The URL pattern to which we are mapped in our web application deployment descriptor.

            servletName

            protected java.lang.String servletName
            The servlet name under which we are registered in our web application deployment descriptor.

            validate

            protected boolean validate
            Are we using the new configuration file format?

            validating

            protected boolean validating
            Should we use a validating XML parser to read the configuration file?

            bufferSize

            protected int bufferSize
            The size in bytes of the buffer used to read files from a client upload

            maxFileSize

            protected java.lang.String maxFileSize
            The maximum size allowed for a client upload. A suffix of "K" represents Kilobytes, a suffix of "M" represents "Megabytes", a suffix of "G" represents Gigabytes, and no suffix is taken as bytes.

            multipartClass

            protected java.lang.String multipartClass
            The MultipartRequestHandler class name used for handling multipart form requests. This is the global default value, the handler can also be set in individual mapping entries

            tempDir

            protected java.lang.String tempDir
            The directory used to store temporary files for the DiskMultipartRequestHandler multipart implementation
            Constructor Detail

            ActionServlet

            public ActionServlet()
            Method Detail

            destroy

            public void destroy()
            Gracefully shut down this controller servlet, releasing any resources that were allocated at initialization.
            Overrides:
            destroy in class javax.servlet.GenericServlet

            init

            public void init()
                      throws javax.servlet.ServletException
            Initialize this servlet. Most of the processing has been factored into support methods so that you can override particular functionality at a fairly granular level.
            Overrides:
            init in class javax.servlet.GenericServlet
            Throws:
            javax.servlet.ServletException - if we cannot configure ourselves correctly

            doGet

            public void doGet(javax.servlet.http.HttpServletRequest request,
                              javax.servlet.http.HttpServletResponse response)
                       throws java.io.IOException,
                              javax.servlet.ServletException
            Process an HTTP "GET" request.
            Overrides:
            doGet in class javax.servlet.http.HttpServlet
            Parameters:
            request - The servlet request we are processing
            response - The servlet response we are creating
            Throws:
            java.io.IOException - if an input/output error occurs
            javax.servlet.ServletException - if a servlet exception occurs

            doPost

            public void doPost(javax.servlet.http.HttpServletRequest request,
                               javax.servlet.http.HttpServletResponse response)
                        throws java.io.IOException,
                               javax.servlet.ServletException
            Process an HTTP "POST" request.
            Overrides:
            doPost in class javax.servlet.http.HttpServlet
            Parameters:
            request - The servlet request we are processing
            response - The servlet response we are creating
            Throws:
            java.io.IOException - if an input/output error occurs
            javax.servlet.ServletException - if a servlet exception occurs

            addDataSource

            public void addDataSource(java.lang.String key,
                                      javax.sql.DataSource dataSource)
            Add a data source object to be used by this application.
            Parameters:
            key - The servlet context attribute key under which to store this data source, or null for the default
            dataSource - The data source to be used

            addFormBean

            public void addFormBean(ActionFormBean formBean)
            Register a form bean definition to the set configured for this servlet.
            Parameters:
            formBean - The form bean definition to be added

            addForward

            public void addForward(ActionForward forward)
            Register a logical forwarding to the set configured for this servlet.
            Parameters:
            forward - The forwarding to be added

            addMapping

            public void addMapping(ActionMapping mapping)
            Register a mapping to the set configured for this servlet.
            Parameters:
            mapping - The mapping to be added

            addServletMapping

            public void addServletMapping(java.lang.String servletName,
                                          java.lang.String urlPattern)
            Remember a servlet mapping from our web application deployment descriptor, if it is for this servlet.
            Parameters:
            servletName - The name of the servlet being mapped
            urlPattern - The URL pattern to which this servlet is mapped

            findDataSource

            public javax.sql.DataSource findDataSource(java.lang.String key)
            Return a JDBC data source associated with this application, if any.
            Parameters:
            key - The servlet context attribute key under which this data source is stored, or null for the default.

            findFormBean

            public ActionFormBean findFormBean(java.lang.String name)
            Return the form bean definition associated with the specified logical name, if any; otherwise return null.
            Parameters:
            name - Logical name of the requested form bean definition

            findForward

            public ActionForward findForward(java.lang.String name)
            Return the forwarding associated with the specified logical name, if any; otherwise return null.
            Parameters:
            name - Logical name of the requested forwarding

            findMapping

            public ActionMapping findMapping(java.lang.String path)
            Return the mapping associated with the specified request path, if any; otherwise return null.
            Parameters:
            path - Request path for which a mapping is requested

            getBufferSize

            public int getBufferSize()
            Get the buffer size (how large of a chunk of data is recieved by the input stream at once) used for file uploading.
            Returns:
            The size in bytes of the buffer

            getDebug

            public int getDebug()
            Return the debugging detail level for this servlet.

            getFormBeanClass

            public java.lang.String getFormBeanClass()
            Return the Java class name of the class used to instantiate ActionFormBean objects.

            getForwardClass

            public java.lang.String getForwardClass()
            Return the Java class name of the class used to instantiate ActionForward objects.

            getMappingClass

            public java.lang.String getMappingClass()
            Return the Java class name of the class used to instantiate ActionMapping objects.

            getMaxFileSize

            public java.lang.String getMaxFileSize()
            Get the maximum file size. See setMaxFileSize for information on the number format used.

            getMultipartClass

            public java.lang.String getMultipartClass()
            Get the class name of the MultipartRequestHandler implementation
            Returns:
            A qualified classname of the MultipartRequestHandler implementation

            getResources

            public MessageResources getResources()
            Return the application resources for this web application, if any.

            getTempDir

            public java.lang.String getTempDir()
            Get the directory used to temporarily store form files
            Returns:
            A platform-dependant String representing the path to the temporary directory

            log

            public void log(java.lang.String message,
                            int level)
            Log the specified message if the current debugging detail level for this servlet has been set to an equal or higher value. Otherwise, ignore this message.
            Parameters:
            message - Message to be logged
            level - Debugging detail level of this message

            reload

            public void reload()
                        throws java.io.IOException,
                               javax.servlet.ServletException
            Reload the configuration of this controller servlet from our underlying configuration files.
            Throws:
            java.io.IOException - if an input/output error occurs
            javax.servlet.ServletException - if a servlet exception occurs

            removeFormBean

            public void removeFormBean(ActionFormBean formBean)
            Deregister a form bean definition from the set configured for this servlet.
            Parameters:
            formBean - The form bean definition to be deregistered

            removeForward

            public void removeForward(ActionForward forward)
            Deregister a forwarding from the set configured for this servlet.
            Parameters:
            forward - The forwarding to be deregistered

            removeMapping

            public void removeMapping(ActionMapping mapping)
            Deregister a mapping from the set configured for this servlet.
            Parameters:
            mapping - The mapping to be deregistered

            setBufferSize

            public void setBufferSize(int bufferSize)
            Set the buffer size (how large of a chunk of data is recieved by the input stream at once) used for file uploading.
            Parameters:
            bufferSize - The size in bytes of the buffer

            setFormBeanClass

            public void setFormBeanClass(java.lang.String formBeanClass)
            Set the Java class name of the class used to instantiate ActionFormBean objects.
            Parameters:
            formBeanClass - The new class name

            setForwardClass

            public void setForwardClass(java.lang.String forwardClass)
            Set the Java class name of the class used to instantiate ActionForward objects.
            Parameters:
            forwardClass - The new class name

            setMappingClass

            public void setMappingClass(java.lang.String mappingClass)
            Set the Java class name of the class used to instantiate ActionMapping objects.
            Parameters:
            mappingClass - The new class name

            setMaxFileSize

            public void setMaxFileSize(java.lang.String maxFileSize)
            Set the maximum file size that a client can upload, number String with a trailing letter indicating the size. "K" indicates "kilobytes", "M" indicates "megabytes", "G" indicates "gigabytes". If there's no trailing letter the suffix is assumed to indicate the number is in bytes. For example, to set a maximum file size of 500 megabytes, you'd call setMaxFileSize("500M").
            Parameters:
            maxFileSize - A String representing the maximum file size.

            setMultipartClass

            public void setMultipartClass(java.lang.String multipartClass)
            Set the class name of the MultipartRequestHandler implementation
            Parameters:
            multipartClass - A qualified classname of the MultipartRequestHandler implementation

            setTempDir

            public void setTempDir(java.lang.String tempDir)
            Set the directory used to temporarily store files for MultipartRequestHandler implementations that write to the disk
            Parameters:
            tempDir - A platform-dependant String representing the path to the temporary directory

            destroyActions

            protected void destroyActions()
            Gracefully shut down any action instances we have created.

            destroyApplication

            protected void destroyApplication()
            Gracefully terminate use of the application MessageResources (if any).

            destroyDataSources

            protected void destroyDataSources()
            Gracefully terminate use of the data source associated with this application (if any).

            destroyInternal

            protected void destroyInternal()
            Gracefully terminate use of the internal MessageResources.

            initActions

            protected void initActions()
            Initialize the collection of previously instantiated Action instances.

            initApplication

            protected void initApplication()
                                    throws javax.servlet.ServletException
            Initialize the MessageResources bundle for this application, if any.
            Throws:
            javax.servlet.ServletException - if we cannot initialize these resources

            initDataSources

            protected void initDataSources()
                                    throws javax.servlet.ServletException
            Initialize use of the data sources associated with this application (if any).
            Throws:
            javax.servlet.ServletException - if a fatal initialization error occurs

            initDebug

            protected void initDebug()
                              throws javax.servlet.ServletException
            Initialize the debugging detail level for this application.
            Throws:
            javax.servlet.ServletException - if we cannot initialize these resources

            initDigester

            protected Digester initDigester(int detail)
            Construct and return a digester that uses the new configuration file format.

            initDigesterOld

            protected Digester initDigesterOld(int detail)
            Construct and return a digester that uses the old configuration file format.

            initInternal

            protected void initInternal()
                                 throws javax.servlet.ServletException
            Initialize our internal MessageResources bundle.
            Throws:
            javax.servlet.ServletException - if we cannot initialize these resources

            initMapping

            protected void initMapping()
                                throws java.io.IOException,
                                       javax.servlet.ServletException
            Initialize the mapping information for this application.
            Throws:
            java.io.IOException - if an input/output error is encountered
            javax.servlet.ServletException - if we cannot initialize these resources

            initOther

            protected void initOther()
                              throws javax.servlet.ServletException
            Initialize other configuration parameters that have not yet been processed.
            Throws:
            javax.servlet.ServletException - if we cannot initialize these resources

            initServlet

            protected void initServlet()
                                throws javax.servlet.ServletException
            Initialize the servlet mapping under which our controller servlet is being accessed. This will be used in the &html:form> tag to generate correct destination URLs for form submissions.

            initUpload

            protected void initUpload()
                               throws javax.servlet.ServletException
            Initialize upload parameters and "bufferSize", "multipartClass", "maxFileSize", "tempDir"
            Throws:
            javax.servlet.ServletException - if there are invalid parameters

            process

            protected void process(javax.servlet.http.HttpServletRequest request,
                                   javax.servlet.http.HttpServletResponse response)
                            throws java.io.IOException,
                                   javax.servlet.ServletException
            Process an HTTP request.
            Parameters:
            request - The servlet request we are processing
            response - The servlet response we are creating
            Throws:
            java.io.IOException - if an input/output error occurs
            javax.servlet.ServletException - if a servlet exception occurs

            processActionCreate

            protected Action processActionCreate(ActionMapping mapping,
                                                 javax.servlet.http.HttpServletRequest request)
            Create or retrieve the Action instance that will process this request, or null if no such Action instance can be created.
            Parameters:
            mapping - The ActionMapping we are processing
            request - The servlet request we are processing

            processActionForm

            protected ActionForm processActionForm(ActionMapping mapping,
                                                   javax.servlet.http.HttpServletRequest request)
            Retrieve and return the ActionForm bean associated with this mapping, creating and stashing one if necessary. If there is no form bean associated with this mapping, return null.
            Parameters:
            mapping - The ActionMapping we are processing
            request - The servlet request we are processing

            processActionForward

            protected void processActionForward(ActionForward forward,
                                                ActionMapping mapping,
                                                ActionForm formInstance,
                                                javax.servlet.http.HttpServletRequest request,
                                                javax.servlet.http.HttpServletResponse response)
                                         throws java.io.IOException,
                                                javax.servlet.ServletException
            Forward to the specified destination, by the specified mechanism, if an ActionForward instance was returned by the Action.
            Parameters:
            forward - The ActionForward returned by our action
            mapping - The ActionMapping we are processing
            formInstance - The ActionForm we are processing
            request - The servlet request we are processing
            response - The servlet response we are creating
            Throws:
            java.io.IOException - if an input/output error occurs
            javax.servlet.ServletException - if a servlet exception occurs

            processActionPerform

            protected ActionForward processActionPerform(Action action,
                                                         ActionMapping mapping,
                                                         ActionForm formInstance,
                                                         javax.servlet.http.HttpServletRequest request,
                                                         javax.servlet.http.HttpServletResponse response)
                                                  throws java.io.IOException,
                                                         javax.servlet.ServletException
            Ask the specified Action instance to handle this request. Return the ActionForward instance (if any) returned by the called Action.
            Parameters:
            action - The Action to process this request
            mapping - The ActionMapping we are processing
            formInstance - The ActionForm we are processing
            request - The servlet request we are processing
            response - The servlet response we are creating
            Throws:
            java.io.IOException - if an input/output error occurs
            javax.servlet.ServletException - if a servlet exception occurs

            processContent

            protected void processContent(javax.servlet.http.HttpServletResponse response)
            Set the default content type (with optional character encoding) for all responses. This value may be overridden by forwarded-to servlets or JSP pages.
            Parameters:
            response - The response we are processing

            processForward

            protected boolean processForward(ActionMapping mapping,
                                             javax.servlet.http.HttpServletRequest request,
                                             javax.servlet.http.HttpServletResponse response)
                                      throws java.io.IOException,
                                             javax.servlet.ServletException
            Process a forward requested by this mapping, if any. Return true if processing of this request should continue (i.e. be processed by an Action class), or false if we have already handled this request.
            Parameters:
            mapping - The ActionMapping we are processing
            request - The request we are processing
            response - The response we are processing
            Throws:
            java.io.IOException - if the included resource throws an exception
            javax.servlet.ServletException - if the included resource throws an exception

            processInclude

            protected boolean processInclude(ActionMapping mapping,
                                             javax.servlet.http.HttpServletRequest request,
                                             javax.servlet.http.HttpServletResponse response)
                                      throws java.io.IOException,
                                             javax.servlet.ServletException
            Process an include requested by this mapping, if any. Return true if processing of this request should continue (i.e. be processed by an Action class), or false if we have already handled this request.
            Parameters:
            mapping - The ActionMapping we are processing
            request - The request we are processing
            response - The response we are processing
            Throws:
            java.io.IOException - if the included resource throws an exception
            javax.servlet.ServletException - if the included resource throws an exception

            processLocale

            protected void processLocale(javax.servlet.http.HttpServletRequest request)
            Automatically calculate an appropriate java.util.Locale for this user, and store it in their session, if there is no such Locale object present already.
            Parameters:
            request - The request we are processing

            processMapping

            protected ActionMapping processMapping(java.lang.String path,
                                                   javax.servlet.http.HttpServletRequest request)
            Identify and return an appropriate ActionMapping for the specified path. If no such mapping can be identified, return null. The request parameter is available if you need to make decisions on available mappings (such as checking permissions) based on request parameters or other properties, but it is not used in the default implementation.
            Parameters:
            path - Path component used to select a mapping
            request - The request we are processing

            processNoCache

            protected void processNoCache(javax.servlet.http.HttpServletResponse response)
                                   throws java.io.IOException,
                                          javax.servlet.ServletException
            Render the HTTP headers to defeat browser caching if requested.
            Parameters:
            response - The servlet response we are creating
            Throws:
            java.io.IOException - if an input/output error occurs
            javax.servlet.ServletException - if a servlet exception occurs

            processPath

            protected java.lang.String processPath(javax.servlet.http.HttpServletRequest request)
            Identify and return the path component (from the request URI) that we will use to select an ActionMapping to dispatch with. If no such path can be identified, return null.
            Parameters:
            request - The servlet request we are processing

            processPreprocess

            protected boolean processPreprocess(javax.servlet.http.HttpServletRequest request,
                                                javax.servlet.http.HttpServletResponse response)
                                         throws java.io.IOException,
                                                javax.servlet.ServletException
            General purpose preprocessing hook that can be overridden to support application specific preprocessing activity. This hook can examine and/or modify the properties of the request and response objects, and optionally complete the response if it wishes.

            The default implementation does nothing.

            Parameters:
            request - The servlet request we are processing
            response - The servlet response we are generating
            Returns:
            true if the remainder of the standard processing should be performed, or false if the response has already been created so the calling method should immediately exit
            Throws:
            java.io.IOException - if an input/output error occurs
            javax.servlet.ServletException - if a servlet exception occurs

            processPopulate

            protected void processPopulate(ActionForm formInstance,
                                           ActionMapping mapping,
                                           javax.servlet.http.HttpServletRequest request)
                                    throws javax.servlet.ServletException
            Populate the properties of the specified ActionForm from the request parameters included with this request.
            Parameters:
            formInstance - The ActionForm we are processing
            mapping - The ActionMapping we are processing
            request - The servlet request we are processing
            Throws:
            javax.servlet.ServletException - if thrown by RequestUtils.populate()

            processValidate

            protected boolean processValidate(ActionMapping mapping,
                                              ActionForm formInstance,
                                              javax.servlet.http.HttpServletRequest request,
                                              javax.servlet.http.HttpServletResponse response)
                                       throws java.io.IOException,
                                              javax.servlet.ServletException
            Call the validate() method of the specified ActionForm, and forward back to the input form if there are any errors. Return true if we should continue processing (and call the Action class perform() method), or return false if we have already forwarded control back to the input form.
            Parameters:
            mapping - The ActionMapping we are processing
            formInstance - The ActionForm we are processing
            request - The servlet request we are processing
            response - The servlet response we are processing
            Throws:
            java.io.IOException - if an input/output error occurs
            javax.servlet.ServletException - if a servlet exception occurs


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/action/AddDataSourceRule.html0000644000175000017500000002620710404045234031012 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class AddDataSourceRule

            org.apache.struts.action
            Class AddDataSourceRule

            java.lang.Object
              |
              +--org.apache.struts.digester.Rule
                    |
                    +--org.apache.struts.action.AddDataSourceRule
            

            final class AddDataSourceRule
            extends Rule

            Private digester Rule that adds a data source to the underlying ActionServlet instance. The servlet context attributes key is specified by the "key" attribute on the data source element, and defaults to the value of Action.DATA_SOURCE_KEY if not specified.


            Fields inherited from class org.apache.struts.digester.Rule
            digester
             
            Constructor Summary
            AddDataSourceRule(Digester digester)
                       
             
            Method Summary
             void begin(org.xml.sax.AttributeList attributes)
                      This method is called when the beginning of a matching XML element is encountered.
             
            Methods inherited from class org.apache.struts.digester.Rule
            body, end, finish
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Constructor Detail

            AddDataSourceRule

            public AddDataSourceRule(Digester digester)
            Method Detail

            begin

            public void begin(org.xml.sax.AttributeList attributes)
                       throws java.lang.Exception
            Description copied from class: Rule
            This method is called when the beginning of a matching XML element is encountered.
            Overrides:
            begin in class Rule
            Following copied from class: org.apache.struts.digester.Rule
            Parameters:
            attributes - The attribute list of this element


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/action/ForwardingActionForward.html0000644000175000017500000002556710404045206032313 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class ForwardingActionForward

            org.apache.struts.action
            Class ForwardingActionForward

            java.lang.Object
              |
              +--org.apache.struts.action.ActionForward
                    |
                    +--org.apache.struts.action.ForwardingActionForward
            
            All Implemented Interfaces:
            java.io.Serializable

            public class ForwardingActionForward
            extends ActionForward

            A subclass of ActionForward that defaults the redirect attribute to false.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Fields inherited from class org.apache.struts.action.ActionForward
            name, path, redirect
             
            Constructor Summary
            ForwardingActionForward()
                      Construct a new instance with default values.
            ForwardingActionForward(java.lang.String path)
                      Construct a new instance with the specified path.
             
            Methods inherited from class org.apache.struts.action.ActionForward
            getName, getPath, getRedirect, setName, setPath, setRedirect, toString
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, wait, wait, wait
             

            Constructor Detail

            ForwardingActionForward

            public ForwardingActionForward()
            Construct a new instance with default values.

            ForwardingActionForward

            public ForwardingActionForward(java.lang.String path)
            Construct a new instance with the specified path.
            Parameters:
            path - Path for this instance


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/action/RedirectingActionForward.html0000644000175000017500000002561510404045216032443 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class RedirectingActionForward

            org.apache.struts.action
            Class RedirectingActionForward

            java.lang.Object
              |
              +--org.apache.struts.action.ActionForward
                    |
                    +--org.apache.struts.action.RedirectingActionForward
            
            All Implemented Interfaces:
            java.io.Serializable

            public class RedirectingActionForward
            extends ActionForward

            A subclass of ActionForward that defaults the redirect attribute to true.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Fields inherited from class org.apache.struts.action.ActionForward
            name, path, redirect
             
            Constructor Summary
            RedirectingActionForward()
                      Construct a new instance with default values.
            RedirectingActionForward(java.lang.String path)
                      Construct a new instance with the specified path.
             
            Methods inherited from class org.apache.struts.action.ActionForward
            getName, getPath, getRedirect, setName, setPath, setRedirect, toString
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, wait, wait, wait
             

            Constructor Detail

            RedirectingActionForward

            public RedirectingActionForward()
            Construct a new instance with default values.

            RedirectingActionForward

            public RedirectingActionForward(java.lang.String path)
            Construct a new instance with the specified path.
            Parameters:
            path - Path for this instance


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/action/RequestActionMapping.html0000644000175000017500000003762710404045240031626 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class RequestActionMapping

            org.apache.struts.action
            Class RequestActionMapping

            java.lang.Object
              |
              +--org.apache.struts.action.ActionMapping
                    |
                    +--org.apache.struts.action.RequestActionMapping
            
            All Implemented Interfaces:
            java.io.Serializable

            public class RequestActionMapping
            extends ActionMapping

            Subclass of ActionMapping that defaults the form bean scope to request.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Fields inherited from class org.apache.struts.action.ActionMapping
            attribute, forward, forwards, include, input, instance, mappings, multipartClass, name, parameter, path, prefix, scope, suffix, type, unknown, validate
             
            Constructor Summary
            RequestActionMapping()
                      Construct a new instance of this class with the desired default form bean scope.
             
            Methods inherited from class org.apache.struts.action.ActionMapping
            addForward, createFormInstance, findForward, findForwards, getActionClass, getAttribute, getFormAttribute, getFormClass, getFormPrefix, getFormScope, getFormSuffix, getForward, getInclude, getInput, getInputForm, getMappings, getMultipartClass, getName, getParameter, getPath, getPrefix, getScope, getSuffix, getType, getUnknown, getValidate, removeForward, setActionClass, setAttribute, setFormAttribute, setFormClass, setFormPrefix, setFormScope, setFormSuffix, setForward, setInclude, setInput, setInputForm, setMappings, setMultipartClass, setName, setParameter, setPath, setPrefix, setScope, setSuffix, setType, setUnknown, setValidate, toString
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, wait, wait, wait
             

            Constructor Detail

            RequestActionMapping

            public RequestActionMapping()
            Construct a new instance of this class with the desired default form bean scope.


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/action/SessionActionMapping.html0000644000175000017500000003761710404045226031624 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class SessionActionMapping

            org.apache.struts.action
            Class SessionActionMapping

            java.lang.Object
              |
              +--org.apache.struts.action.ActionMapping
                    |
                    +--org.apache.struts.action.SessionActionMapping
            
            All Implemented Interfaces:
            java.io.Serializable

            public class SessionActionMapping
            extends ActionMapping

            Subclass of ActionMapping that defaults the form bean scope to session.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Fields inherited from class org.apache.struts.action.ActionMapping
            attribute, forward, forwards, include, input, instance, mappings, multipartClass, name, parameter, path, prefix, scope, suffix, type, unknown, validate
             
            Constructor Summary
            SessionActionMapping()
                      Construct a new instance of this class with the desired default form bean scope.
             
            Methods inherited from class org.apache.struts.action.ActionMapping
            addForward, createFormInstance, findForward, findForwards, getActionClass, getAttribute, getFormAttribute, getFormClass, getFormPrefix, getFormScope, getFormSuffix, getForward, getInclude, getInput, getInputForm, getMappings, getMultipartClass, getName, getParameter, getPath, getPrefix, getScope, getSuffix, getType, getUnknown, getValidate, removeForward, setActionClass, setAttribute, setFormAttribute, setFormClass, setFormPrefix, setFormScope, setFormSuffix, setForward, setInclude, setInput, setInputForm, setMappings, setMultipartClass, setName, setParameter, setPath, setPrefix, setScope, setSuffix, setType, setUnknown, setValidate, toString
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, wait, wait, wait
             

            Constructor Detail

            SessionActionMapping

            public SessionActionMapping()
            Construct a new instance of this class with the desired default form bean scope.


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/action/ValidatingActionForm.html0000644000175000017500000003033010404045230031547 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class ValidatingActionForm

            org.apache.struts.action
            Class ValidatingActionForm

            java.lang.Object
              |
              +--org.apache.struts.action.ActionForm
                    |
                    +--org.apache.struts.action.ValidatingActionForm
            
            All Implemented Interfaces:
            java.io.Serializable

            Deprecated. Application ActionForm beans should now extend ActionForm directly, and override the validate() method if they wish to provide such services

            public class ValidatingActionForm
            extends ActionForm

            An ValidatingActionForm is a JavaBean optionally associated with one or more ActionMappings. Such a bean will have had its properties initialized from the corresponding request parameters before the action's perform() method is called.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Jeff Hutchison
            See Also:
            Serialized Form

            Fields inherited from class org.apache.struts.action.ActionForm
            multipartRequestHandler, servlet
             
            Constructor Summary
            ValidatingActionForm()
                      Deprecated.  
             
            Method Summary
             java.lang.String[] validate()
                      Deprecated. Perform validations on the form input values included in this form bean.
             
            Methods inherited from class org.apache.struts.action.ActionForm
            getMultipartRequestHandler, getServlet, reset, reset, setMultipartRequestHandler, setServlet, validate, validate
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Constructor Detail

            ValidatingActionForm

            public ValidatingActionForm()
            Deprecated. 
            Method Detail

            validate

            public java.lang.String[] validate()
            Deprecated. 
            Perform validations on the form input values included in this form bean. If validation errors occur, return a String array containing the message keys of corresponding error messages (in our application MessageResources) to be displayed. If no validation errors occur, return null.
            Overrides:
            validate in class ActionForm


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/action/package-frame.html0000644000175000017500000000432010404045226030173 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Package org.apache.struts.action org.apache.struts.action
            Classes 
            Action
            ActionBase
            ActionError
            ActionErrors
            ActionForm
            ActionFormBean
            ActionFormBeans
            ActionForward
            ActionForwards
            ActionMapping
            ActionMappingBase
            ActionMappings
            ActionServlet
            AddDataSourceRule
            ForwardingActionForward
            RedirectingActionForward
            RequestActionMapping
            SessionActionMapping
            ValidatingActionForm
            libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/action/package-summary.html0000644000175000017500000002374310404045222030604 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Package org.apache.struts.action

            Package org.apache.struts.action

            Class Summary
            Action An Action is an adapter between the contents of an incoming HTTP request and the corresponding business logic that should be executed to process this request.
            ActionBase Deprecated. Application action classes should now extend Action directly, rather than this class.
            ActionError An encapsulation of an individual error message returned by the validate() method of an ActionForm, consisting of a message key (to be used to look up message text in an appropriate message resources database) plus up to four placeholder objects that can be used for parametric replacement in the message text.
            ActionErrors A class that encapsulates the error messages being reported by the validate() method of an ActionForm.
            ActionForm An ActionForm is a JavaBean optionally associated with one or more ActionMappings.
            ActionFormBean An ActionFormBean is the definition of a form bean that is loaded from a <form-bean> element in the Struts configuration file.
            ActionFormBeans Encapsulate a collection of ActionFormBean objects that can be administered and searched, while hiding the internal implementation.
            ActionForward An ActionForward represents a destination to which the controller servlet, ActionServlet, might be directed to perform a RequestDispatcher.forward() or HttpServletResponse.sendRedirect() to, as a result of processing activities of an Action class.
            ActionForwards Encapsulate a collection of ActionForward objects that can be administered and searched, while hiding the internal implementation.
            ActionMapping An ActionMapping represents the information that the controller servlet, ActionServlet, knows about the mapping of a particular request to an instance of a particular action class.
            ActionMappingBase Deprecated. Now that ActionMapping is a class, you should use it intead
            ActionMappings Encapsulate a collection of ActionMapping objects that can be administered and searched, while hiding the internal implementation.
            ActionServlet ActionServlet represents the "controller" in the Model-View-Controller (MVC) design pattern for web applications that is commonly known as "Model 2".
            AddDataSourceRule Private digester Rule that adds a data source to the underlying ActionServlet instance.
            ForwardingActionForward A subclass of ActionForward that defaults the redirect attribute to false.
            RedirectingActionForward A subclass of ActionForward that defaults the redirect attribute to true.
            RequestActionMapping Subclass of ActionMapping that defaults the form bean scope to request.
            SessionActionMapping Subclass of ActionMapping that defaults the form bean scope to session.
            ValidatingActionForm Deprecated. Application ActionForm beans should now extend ActionForm directly, and override the validate() method if they wish to provide such services
             



            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/action/package-tree.html0000644000175000017500000001753110404045214030045 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: org.apache.struts.action Class Hierarchy

            Hierarchy For Package org.apache.struts.action

            Package Hierarchies:
            All Packages

            Class Hierarchy

            • class java.lang.Object


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/actions/0000755000175000017500000000000010423130300024773 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/actions/AddFormBeanAction.html0000644000175000017500000003727310404045250031145 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class AddFormBeanAction

            org.apache.struts.actions
            Class AddFormBeanAction

            java.lang.Object
              |
              +--org.apache.struts.action.Action
                    |
                    +--org.apache.struts.actions.AddFormBeanAction
            

            public class AddFormBeanAction
            extends Action

            A standard Action that calls the addFormBean() method of our controller servlet to add a new action form definition dynamically. The new definition replaces any existing definition for the same bean name. This action expects request parameters whose names match the properties of ActionFormBean.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan

            Fields inherited from class org.apache.struts.action.Action
            DATA_SOURCE_KEY, defaultLocale, ERROR_KEY, EXCEPTION_KEY, FORM_BEANS_KEY, FORWARDS_KEY, LOCALE_KEY, MAPPING_KEY, MAPPINGS_KEY, MESSAGES_KEY, MULTIPART_KEY, servlet, SERVLET_KEY, TRANSACTION_TOKEN_KEY
             
            Constructor Summary
            AddFormBeanAction()
                       
             
            Method Summary
             ActionForward perform(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
             
            Methods inherited from class org.apache.struts.action.Action
            generateToken, getLocale, getResources, getServlet, isCancelled, isTokenValid, perform, perform, perform, resetToken, saveErrors, saveToken, setLocale, setServlet, toHex
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Constructor Detail

            AddFormBeanAction

            public AddFormBeanAction()
            Method Detail

            perform

            public ActionForward perform(ActionMapping mapping,
                                         ActionForm form,
                                         javax.servlet.http.HttpServletRequest request,
                                         javax.servlet.http.HttpServletResponse response)
                                  throws java.io.IOException,
                                         javax.servlet.ServletException
            Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it). Return an ActionForward instance describing where and how control should be forwarded, or null if the response has already been completed.
            Overrides:
            perform in class Action
            Parameters:
            mapping - The ActionMapping used to select this instance
            actionForm - The optional ActionForm bean for this request (if any)
            request - The HTTP request we are processing
            response - The HTTP response we are creating
            Throws:
            java.io.IOException - if an input/output error occurs
            javax.servlet.ServletException - if a servlet exception occurs


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/actions/AddForwardAction.html0000644000175000017500000003750710404045250031060 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class AddForwardAction

            org.apache.struts.actions
            Class AddForwardAction

            java.lang.Object
              |
              +--org.apache.struts.action.Action
                    |
                    +--org.apache.struts.actions.AddForwardAction
            

            public class AddForwardAction
            extends Action

            A standard Action that calls the addForward() method of our controller servlet to add a new action forward definition dynamically. The new definition replaces any existing definition for the same name. This action expects request parameters whose names match the properties of ActionForward.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan

            Fields inherited from class org.apache.struts.action.Action
            DATA_SOURCE_KEY, defaultLocale, ERROR_KEY, EXCEPTION_KEY, FORM_BEANS_KEY, FORWARDS_KEY, LOCALE_KEY, MAPPING_KEY, MAPPINGS_KEY, MESSAGES_KEY, MULTIPART_KEY, servlet, SERVLET_KEY, TRANSACTION_TOKEN_KEY
             
            Constructor Summary
            AddForwardAction()
                       
             
            Method Summary
             ActionForward perform(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
             
            Methods inherited from class org.apache.struts.action.Action
            generateToken, getLocale, getResources, getServlet, isCancelled, isTokenValid, perform, perform, perform, resetToken, saveErrors, saveToken, setLocale, setServlet, toHex
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Constructor Detail

            AddForwardAction

            public AddForwardAction()
            Method Detail

            perform

            public ActionForward perform(ActionMapping mapping,
                                         ActionForm form,
                                         javax.servlet.http.HttpServletRequest request,
                                         javax.servlet.http.HttpServletResponse response)
                                  throws java.io.IOException,
                                         javax.servlet.ServletException
            Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it). Return an ActionForward instance describing where and how control should be forwarded, or null if the response has already been completed.
            Overrides:
            perform in class Action
            Parameters:
            mapping - The ActionMapping used to select this instance
            actionForm - The optional ActionForm bean for this request (if any)
            request - The HTTP request we are processing
            response - The HTTP response we are creating
            Throws:
            java.io.IOException - if an input/output error occurs
            javax.servlet.ServletException - if a servlet exception occurs


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/actions/AddMappingAction.html0000644000175000017500000003750110404045210031035 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class AddMappingAction

            org.apache.struts.actions
            Class AddMappingAction

            java.lang.Object
              |
              +--org.apache.struts.action.Action
                    |
                    +--org.apache.struts.actions.AddMappingAction
            

            public class AddMappingAction
            extends Action

            A standard Action that calls the addMapping() method of our controller servlet to add a new action mapping definition dynamically. The new definition replaces any existing definition for the same name. This action expects request parameters whose names match the properties of ActionMapping.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan

            Fields inherited from class org.apache.struts.action.Action
            DATA_SOURCE_KEY, defaultLocale, ERROR_KEY, EXCEPTION_KEY, FORM_BEANS_KEY, FORWARDS_KEY, LOCALE_KEY, MAPPING_KEY, MAPPINGS_KEY, MESSAGES_KEY, MULTIPART_KEY, servlet, SERVLET_KEY, TRANSACTION_TOKEN_KEY
             
            Constructor Summary
            AddMappingAction()
                       
             
            Method Summary
             ActionForward perform(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
             
            Methods inherited from class org.apache.struts.action.Action
            generateToken, getLocale, getResources, getServlet, isCancelled, isTokenValid, perform, perform, perform, resetToken, saveErrors, saveToken, setLocale, setServlet, toHex
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Constructor Detail

            AddMappingAction

            public AddMappingAction()
            Method Detail

            perform

            public ActionForward perform(ActionMapping mapping,
                                         ActionForm form,
                                         javax.servlet.http.HttpServletRequest request,
                                         javax.servlet.http.HttpServletResponse response)
                                  throws java.io.IOException,
                                         javax.servlet.ServletException
            Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it). Return an ActionForward instance describing where and how control should be forwarded, or null if the response has already been completed.
            Overrides:
            perform in class Action
            Parameters:
            mapping - The ActionMapping used to select this instance
            actionForm - The optional ActionForm bean for this request (if any)
            request - The HTTP request we are processing
            response - The HTTP response we are creating
            Throws:
            java.io.IOException - if an input/output error occurs
            javax.servlet.ServletException - if a servlet exception occurs


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/actions/DispatchAction.html0000644000175000017500000005352410404045226030602 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class DispatchAction

            org.apache.struts.actions
            Class DispatchAction

            java.lang.Object
              |
              +--org.apache.struts.action.Action
                    |
                    +--org.apache.struts.actions.DispatchAction
            

            public abstract class DispatchAction
            extends Action

            An abstract Action that dispatches to a public method that is named by the request parameter whose name is specified by the parameter property of the corresponding ActionMapping. This Action is useful for developers who prefer to combine many similar actions into a single Action class, in order to simplify their application design.

            To configure the use of this action in your struts-config.xml file, create an entry like this:

            <action path="/saveSubscription" type="org.apache.struts.actions.DispatchAction" name="subscriptionForm" scope="request" input="/subscription.jsp" parameter="method"/>

            which will use the value of the request parameter named "method" to pick the appropriate "perform" method, which must have the same signature (other than method name) of the standard Action.perform() method. For example, you might have the following three methods in the same action:

            • public ActionForward delete(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
            • public ActionForward insert(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
            • public ActionForward update(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException

            and call one of the methods with a URL like this:

            http://localhost:8080/myapp/saveSubscription.do?method=update

            NOTE - All of the other mapping characteristics of this action must be shared by the various handlers. This places some constraints over what types of handlers may reasonably be packaged into the same DispatchAction subclass.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Niall Pemberton , Craig R. McClanahan

            Field Summary
            protected  java.lang.Class clazz
                      The Class instance of this DispatchAction class.
            protected static MessageResources messages
                      The message resources for this package.
            protected  java.util.HashMap methods
                      The set of Method objects we have introspected for this class, keyed by method name.
            protected  java.lang.Class[] types
                      The set of argument type classes for the reflected method call.
             
            Fields inherited from class org.apache.struts.action.Action
            DATA_SOURCE_KEY, defaultLocale, ERROR_KEY, EXCEPTION_KEY, FORM_BEANS_KEY, FORWARDS_KEY, LOCALE_KEY, MAPPING_KEY, MAPPINGS_KEY, MESSAGES_KEY, MULTIPART_KEY, servlet, SERVLET_KEY, TRANSACTION_TOKEN_KEY
             
            Constructor Summary
            DispatchAction()
                       
             
            Method Summary
            protected  java.lang.reflect.Method getMethod(java.lang.String name)
                      Introspect the current class to identify a method of the specified name that accepts the same parameter types as the perform() method does.
             ActionForward perform(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
             
            Methods inherited from class org.apache.struts.action.Action
            generateToken, getLocale, getResources, getServlet, isCancelled, isTokenValid, perform, perform, perform, resetToken, saveErrors, saveToken, setLocale, setServlet, toHex
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            clazz

            protected java.lang.Class clazz
            The Class instance of this DispatchAction class.

            messages

            protected static MessageResources messages
            The message resources for this package.

            methods

            protected java.util.HashMap methods
            The set of Method objects we have introspected for this class, keyed by method name. This collection is populated as different methods are called, so that introspection needs to occur only once per method name.

            types

            protected java.lang.Class[] types
            The set of argument type classes for the reflected method call. These are the same for all calls, so calculate them only once.
            Constructor Detail

            DispatchAction

            public DispatchAction()
            Method Detail

            perform

            public ActionForward perform(ActionMapping mapping,
                                         ActionForm form,
                                         javax.servlet.http.HttpServletRequest request,
                                         javax.servlet.http.HttpServletResponse response)
                                  throws java.io.IOException,
                                         javax.servlet.ServletException
            Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it). Return an ActionForward instance describing where and how control should be forwarded, or null if the response has already been completed.
            Overrides:
            perform in class Action
            Parameters:
            mapping - The ActionMapping used to select this instance
            actionForm - The optional ActionForm bean for this request (if any)
            request - The HTTP request we are processing
            response - The HTTP response we are creating
            Throws:
            java.io.IOException - if an input/output error occurs
            javax.servlet.ServletException - if a servlet exception occurs

            getMethod

            protected java.lang.reflect.Method getMethod(java.lang.String name)
                                                  throws java.lang.NoSuchMethodException
            Introspect the current class to identify a method of the specified name that accepts the same parameter types as the perform() method does.
            Parameters:
            name - Name of the method to be introspected
            Throws:
            java.lang.NoSuchMethodException - if no such method can be found


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/actions/ForwardAction.html0000644000175000017500000004273610404045220030444 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class ForwardAction

            org.apache.struts.actions
            Class ForwardAction

            java.lang.Object
              |
              +--org.apache.struts.action.Action
                    |
                    +--org.apache.struts.actions.ForwardAction
            

            public class ForwardAction
            extends Action

            An Action that forwards to the context-relative URI specified by the parameter property of our associated ActionMapping. This can be used to integrate Struts with other business logic components that are implemented as servlets (or JSP pages), but still take advantage of the Struts controller servlet's functionality (such as processing of form beans).

            To configure the use of this Action in your struts-config.xml file, create an entry like this:

            <action path="/saveSubscription" type="org.apache.struts.actions.ForwardAction" name="subscriptionForm" scope="request" input="/subscription.jsp" parameter="/path/to/processing/servlet">

            which will forward control to the context-relative URI specified by the parameter attribute.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan

            Field Summary
            protected static MessageResources messages
                      The message resources for this package.
             
            Fields inherited from class org.apache.struts.action.Action
            DATA_SOURCE_KEY, defaultLocale, ERROR_KEY, EXCEPTION_KEY, FORM_BEANS_KEY, FORWARDS_KEY, LOCALE_KEY, MAPPING_KEY, MAPPINGS_KEY, MESSAGES_KEY, MULTIPART_KEY, servlet, SERVLET_KEY, TRANSACTION_TOKEN_KEY
             
            Constructor Summary
            ForwardAction()
                       
             
            Method Summary
             ActionForward perform(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
             
            Methods inherited from class org.apache.struts.action.Action
            generateToken, getLocale, getResources, getServlet, isCancelled, isTokenValid, perform, perform, perform, resetToken, saveErrors, saveToken, setLocale, setServlet, toHex
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            messages

            protected static MessageResources messages
            The message resources for this package.
            Constructor Detail

            ForwardAction

            public ForwardAction()
            Method Detail

            perform

            public ActionForward perform(ActionMapping mapping,
                                         ActionForm form,
                                         javax.servlet.http.HttpServletRequest request,
                                         javax.servlet.http.HttpServletResponse response)
                                  throws java.io.IOException,
                                         javax.servlet.ServletException
            Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it). Return an ActionForward instance describing where and how control should be forwarded, or null if the response has already been completed.
            Overrides:
            perform in class Action
            Parameters:
            mapping - The ActionMapping used to select this instance
            actionForm - The optional ActionForm bean for this request (if any)
            request - The HTTP request we are processing
            response - The HTTP response we are creating
            Throws:
            java.io.IOException - if an input/output error occurs
            javax.servlet.ServletException - if a servlet exception occurs


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/actions/IncludeAction.html0000644000175000017500000004271410404045206030423 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class IncludeAction

            org.apache.struts.actions
            Class IncludeAction

            java.lang.Object
              |
              +--org.apache.struts.action.Action
                    |
                    +--org.apache.struts.actions.IncludeAction
            

            public class IncludeAction
            extends Action

            An Action that includes the context-relative URI specified by the parameter property of our associated ActionMapping. This can be used to integrate Struts with other business logic components that are implemented as servlets (or JSP pages), but still take advantage of the Struts controller servlet's functionality (such as processing of form beans).

            To configure the use of this Action in your struts-config.xml file, create an entry like this:

            <action path="/saveSubscription" type="org.apache.struts.actions.IncludeAction" name="subscriptionForm" scope="request" input="/subscription.jsp" parameter="/path/to/processing/servlet">

            which will include the context-relative URI specified by the parameter attribute.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan

            Field Summary
            protected static MessageResources messages
                      The message resources for this package.
             
            Fields inherited from class org.apache.struts.action.Action
            DATA_SOURCE_KEY, defaultLocale, ERROR_KEY, EXCEPTION_KEY, FORM_BEANS_KEY, FORWARDS_KEY, LOCALE_KEY, MAPPING_KEY, MAPPINGS_KEY, MESSAGES_KEY, MULTIPART_KEY, servlet, SERVLET_KEY, TRANSACTION_TOKEN_KEY
             
            Constructor Summary
            IncludeAction()
                       
             
            Method Summary
             ActionForward perform(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
             
            Methods inherited from class org.apache.struts.action.Action
            generateToken, getLocale, getResources, getServlet, isCancelled, isTokenValid, perform, perform, perform, resetToken, saveErrors, saveToken, setLocale, setServlet, toHex
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            messages

            protected static MessageResources messages
            The message resources for this package.
            Constructor Detail

            IncludeAction

            public IncludeAction()
            Method Detail

            perform

            public ActionForward perform(ActionMapping mapping,
                                         ActionForm form,
                                         javax.servlet.http.HttpServletRequest request,
                                         javax.servlet.http.HttpServletResponse response)
                                  throws java.io.IOException,
                                         javax.servlet.ServletException
            Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it). Return an ActionForward instance describing where and how control should be forwarded, or null if the response has already been completed.
            Overrides:
            perform in class Action
            Parameters:
            mapping - The ActionMapping used to select this instance
            actionForm - The optional ActionForm bean for this request (if any)
            request - The HTTP request we are processing
            response - The HTTP response we are creating
            Throws:
            java.io.IOException - if an input/output error occurs
            javax.servlet.ServletException - if a servlet exception occurs


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/actions/ReloadAction.html0000644000175000017500000003724410404045204030246 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class ReloadAction

            org.apache.struts.actions
            Class ReloadAction

            java.lang.Object
              |
              +--org.apache.struts.action.Action
                    |
                    +--org.apache.struts.actions.ReloadAction
            

            public class ReloadAction
            extends Action

            A standard Action that calls the reload() method of our controller servlet to reload its configuration information from the configuration files (which have presumably been updated) dynamically.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan

            Fields inherited from class org.apache.struts.action.Action
            DATA_SOURCE_KEY, defaultLocale, ERROR_KEY, EXCEPTION_KEY, FORM_BEANS_KEY, FORWARDS_KEY, LOCALE_KEY, MAPPING_KEY, MAPPINGS_KEY, MESSAGES_KEY, MULTIPART_KEY, servlet, SERVLET_KEY, TRANSACTION_TOKEN_KEY
             
            Constructor Summary
            ReloadAction()
                       
             
            Method Summary
             ActionForward perform(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
             
            Methods inherited from class org.apache.struts.action.Action
            generateToken, getLocale, getResources, getServlet, isCancelled, isTokenValid, perform, perform, perform, resetToken, saveErrors, saveToken, setLocale, setServlet, toHex
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Constructor Detail

            ReloadAction

            public ReloadAction()
            Method Detail

            perform

            public ActionForward perform(ActionMapping mapping,
                                         ActionForm form,
                                         javax.servlet.http.HttpServletRequest request,
                                         javax.servlet.http.HttpServletResponse response)
                                  throws java.io.IOException,
                                         javax.servlet.ServletException
            Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it). Return an ActionForward instance describing where and how control should be forwarded, or null if the response has already been completed.
            Overrides:
            perform in class Action
            Parameters:
            mapping - The ActionMapping used to select this instance
            actionForm - The optional ActionForm bean for this request (if any)
            request - The HTTP request we are processing
            response - The HTTP response we are creating
            Throws:
            java.io.IOException - if an input/output error occurs
            javax.servlet.ServletException - if a servlet exception occurs


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/actions/RemoveFormBeanAction.html0000644000175000017500000003744010404045242031707 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class RemoveFormBeanAction

            org.apache.struts.actions
            Class RemoveFormBeanAction

            java.lang.Object
              |
              +--org.apache.struts.action.Action
                    |
                    +--org.apache.struts.actions.RemoveFormBeanAction
            

            public class RemoveFormBeanAction
            extends Action

            A standard Action that calls the removeFormBean() method of our controller servlet to remove an action form definition dynamically. The definition to be removed is specified by the name requestparameter.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan

            Fields inherited from class org.apache.struts.action.Action
            DATA_SOURCE_KEY, defaultLocale, ERROR_KEY, EXCEPTION_KEY, FORM_BEANS_KEY, FORWARDS_KEY, LOCALE_KEY, MAPPING_KEY, MAPPINGS_KEY, MESSAGES_KEY, MULTIPART_KEY, servlet, SERVLET_KEY, TRANSACTION_TOKEN_KEY
             
            Constructor Summary
            RemoveFormBeanAction()
                       
             
            Method Summary
             ActionForward perform(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
             
            Methods inherited from class org.apache.struts.action.Action
            generateToken, getLocale, getResources, getServlet, isCancelled, isTokenValid, perform, perform, perform, resetToken, saveErrors, saveToken, setLocale, setServlet, toHex
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Constructor Detail

            RemoveFormBeanAction

            public RemoveFormBeanAction()
            Method Detail

            perform

            public ActionForward perform(ActionMapping mapping,
                                         ActionForm form,
                                         javax.servlet.http.HttpServletRequest request,
                                         javax.servlet.http.HttpServletResponse response)
                                  throws java.io.IOException,
                                         javax.servlet.ServletException
            Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it). Return an ActionForward instance describing where and how control should be forwarded, or null if the response has already been completed.
            Overrides:
            perform in class Action
            Parameters:
            mapping - The ActionMapping used to select this instance
            actionForm - The optional ActionForm bean for this request (if any)
            request - The HTTP request we are processing
            response - The HTTP response we are creating
            Throws:
            java.io.IOException - if an input/output error occurs
            javax.servlet.ServletException - if a servlet exception occurs


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/actions/RemoveForwardAction.html0000644000175000017500000003744510404045244031631 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class RemoveForwardAction

            org.apache.struts.actions
            Class RemoveForwardAction

            java.lang.Object
              |
              +--org.apache.struts.action.Action
                    |
                    +--org.apache.struts.actions.RemoveForwardAction
            

            public class RemoveForwardAction
            extends Action

            A standard Action that calls the removeForward() method of our controller servlet to remove an action forward definition dynamically. The definition to be removed is specified by the name requestparameter.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan

            Fields inherited from class org.apache.struts.action.Action
            DATA_SOURCE_KEY, defaultLocale, ERROR_KEY, EXCEPTION_KEY, FORM_BEANS_KEY, FORWARDS_KEY, LOCALE_KEY, MAPPING_KEY, MAPPINGS_KEY, MESSAGES_KEY, MULTIPART_KEY, servlet, SERVLET_KEY, TRANSACTION_TOKEN_KEY
             
            Constructor Summary
            RemoveForwardAction()
                       
             
            Method Summary
             ActionForward perform(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
             
            Methods inherited from class org.apache.struts.action.Action
            generateToken, getLocale, getResources, getServlet, isCancelled, isTokenValid, perform, perform, perform, resetToken, saveErrors, saveToken, setLocale, setServlet, toHex
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Constructor Detail

            RemoveForwardAction

            public RemoveForwardAction()
            Method Detail

            perform

            public ActionForward perform(ActionMapping mapping,
                                         ActionForm form,
                                         javax.servlet.http.HttpServletRequest request,
                                         javax.servlet.http.HttpServletResponse response)
                                  throws java.io.IOException,
                                         javax.servlet.ServletException
            Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it). Return an ActionForward instance describing where and how control should be forwarded, or null if the response has already been completed.
            Overrides:
            perform in class Action
            Parameters:
            mapping - The ActionMapping used to select this instance
            actionForm - The optional ActionForm bean for this request (if any)
            request - The HTTP request we are processing
            response - The HTTP response we are creating
            Throws:
            java.io.IOException - if an input/output error occurs
            javax.servlet.ServletException - if a servlet exception occurs


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/actions/RemoveMappingAction.html0000644000175000017500000003717310404045244031616 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class RemoveMappingAction

            org.apache.struts.actions
            Class RemoveMappingAction

            java.lang.Object
              |
              +--org.apache.struts.action.Action
                    |
                    +--org.apache.struts.actions.RemoveMappingAction
            

            public class RemoveMappingAction
            extends Action

            A standard Action that calls the removeMapping() method of our controller servlet to remove an action mapping definition dynamically. The definition to be removed is specified by the path requestparameter.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan

            Fields inherited from class org.apache.struts.action.Action
            DATA_SOURCE_KEY, defaultLocale, ERROR_KEY, EXCEPTION_KEY, FORM_BEANS_KEY, FORWARDS_KEY, LOCALE_KEY, MAPPING_KEY, MAPPINGS_KEY, MESSAGES_KEY, MULTIPART_KEY, servlet, SERVLET_KEY, TRANSACTION_TOKEN_KEY
             
            Constructor Summary
            RemoveMappingAction()
                       
             
            Method Summary
             ActionForward perform(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
             
            Methods inherited from class org.apache.struts.action.Action
            generateToken, getLocale, getResources, getServlet, isCancelled, isTokenValid, perform, perform, perform, resetToken, saveErrors, saveToken, setLocale, setServlet, toHex
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Constructor Detail

            RemoveMappingAction

            public RemoveMappingAction()
            Method Detail

            perform

            public ActionForward perform(ActionMapping mapping,
                                         ActionForm form,
                                         javax.servlet.http.HttpServletRequest request,
                                         javax.servlet.http.HttpServletResponse response)
                                  throws java.io.IOException,
                                         javax.servlet.ServletException
            Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it). Return an ActionForward instance describing where and how control should be forwarded, or null if the response has already been completed.
            Overrides:
            perform in class Action
            Parameters:
            mapping - The ActionMapping used to select this instance
            actionForm - The optional ActionForm bean for this request (if any)
            request - The HTTP request we are processing
            response - The HTTP response we are creating
            Throws:
            java.io.IOException - if an input/output error occurs
            javax.servlet.ServletException - if a servlet exception occurs


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/actions/package-frame.html0000644000175000017500000000304510404045216030360 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Package org.apache.struts.actions org.apache.struts.actions
            Classes 
            AddFormBeanAction
            AddForwardAction
            AddMappingAction
            DispatchAction
            ForwardAction
            IncludeAction
            ReloadAction
            RemoveFormBeanAction
            RemoveForwardAction
            RemoveMappingAction
            libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/actions/package-summary.html0000644000175000017500000001733510404045214030770 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Package org.apache.struts.actions

            Package org.apache.struts.actions

            Class Summary
            AddFormBeanAction A standard Action that calls the addFormBean() method of our controller servlet to add a new action form definition dynamically.
            AddForwardAction A standard Action that calls the addForward() method of our controller servlet to add a new action forward definition dynamically.
            AddMappingAction A standard Action that calls the addMapping() method of our controller servlet to add a new action mapping definition dynamically.
            DispatchAction An abstract Action that dispatches to a public method that is named by the request parameter whose name is specified by the parameter property of the corresponding ActionMapping.
            ForwardAction An Action that forwards to the context-relative URI specified by the parameter property of our associated ActionMapping.
            IncludeAction An Action that includes the context-relative URI specified by the parameter property of our associated ActionMapping.
            ReloadAction A standard Action that calls the reload() method of our controller servlet to reload its configuration information from the configuration files (which have presumably been updated) dynamically.
            RemoveFormBeanAction A standard Action that calls the removeFormBean() method of our controller servlet to remove an action form definition dynamically.
            RemoveForwardAction A standard Action that calls the removeForward() method of our controller servlet to remove an action forward definition dynamically.
            RemoveMappingAction A standard Action that calls the removeMapping() method of our controller servlet to remove an action mapping definition dynamically.
             



            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/actions/package-tree.html0000644000175000017500000001423210404045246030230 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: org.apache.struts.actions Class Hierarchy

            Hierarchy For Package org.apache.struts.actions

            Package Hierarchies:
            All Packages

            Class Hierarchy



            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/digester/0000755000175000017500000000000010423130300025141 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/digester/CallMethodRule.html0000644000175000017500000004664710404045240030723 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class CallMethodRule

            org.apache.struts.digester
            Class CallMethodRule

            java.lang.Object
              |
              +--org.apache.struts.digester.Rule
                    |
                    +--org.apache.struts.digester.CallMethodRule
            

            public class CallMethodRule
            extends Rule

            Rule implementation that calls a method on the top (parent) object, passing arguments collected from subsequent CallParamRule rules or from the body of this element.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig McClanahan

            Field Summary
            protected  java.lang.String bodyText
                      The body text collected from this element.
            protected  java.lang.String methodName
                      The method name to call on the parent object.
            protected  int paramCount
                      The number of parameters to collect from MethodParam rules.
            protected  java.lang.Class[] paramTypes
                      The parameter types of the parameters to be collected.
             
            Fields inherited from class org.apache.struts.digester.Rule
            digester
             
            Constructor Summary
            CallMethodRule(Digester digester, java.lang.String methodName, int paramCount)
                      Construct a "call method" rule with the specified method name.
            CallMethodRule(Digester digester, java.lang.String methodName, int paramCount, java.lang.Class[] paramTypes)
                      Construct a "call method" rule with the specified method name.
            CallMethodRule(Digester digester, java.lang.String methodName, int paramCount, java.lang.String[] paramTypes)
                      Construct a "call method" rule with the specified method name.
             
            Method Summary
             void begin(org.xml.sax.AttributeList attributes)
                      Process the start of this element.
             void body(java.lang.String bodyText)
                      Process the body text of this element.
             void end()
                      Process the end of this element.
             void finish()
                      Clean up after parsing is complete.
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            bodyText

            protected java.lang.String bodyText
            The body text collected from this element.

            methodName

            protected java.lang.String methodName
            The method name to call on the parent object.

            paramCount

            protected int paramCount
            The number of parameters to collect from MethodParam rules. If this value is zero, a single parameter will be collected from the body of this element.

            paramTypes

            protected java.lang.Class[] paramTypes
            The parameter types of the parameters to be collected.
            Constructor Detail

            CallMethodRule

            public CallMethodRule(Digester digester,
                                  java.lang.String methodName,
                                  int paramCount)
            Construct a "call method" rule with the specified method name. The parameter types (if any) default to java.lang.String.
            Parameters:
            digester - The associated Digester
            methodName - Method name of the parent method to call
            paramCount - The number of parameters to collect, or zero for a single argument from the body of this element.

            CallMethodRule

            public CallMethodRule(Digester digester,
                                  java.lang.String methodName,
                                  int paramCount,
                                  java.lang.String[] paramTypes)
            Construct a "call method" rule with the specified method name.
            Parameters:
            digester - The associated Digester
            methodName - Method name of the parent method to call
            paramCount - The number of parameters to collect, or zero for a single argument from the body of ths element
            paramTypes - The Java class names of the arguments (if you wish to use a primitive type, specify the corresonding Java wrapper class instead, such as java.lang.Boolean for a boolean parameter)

            CallMethodRule

            public CallMethodRule(Digester digester,
                                  java.lang.String methodName,
                                  int paramCount,
                                  java.lang.Class[] paramTypes)
            Construct a "call method" rule with the specified method name.
            Parameters:
            digester - The associated Digester
            methodName - Method name of the parent method to call
            paramCount - The number of parameters to collect, or zero for a single argument from the body of ths element
            paramTypes - The Java classes that represent the parameter types of the method arguments (if you wish to use a primitive type, specify the corresonding Java wrapper class instead, such as java.lang.Boolean.TYPE for a boolean parameter)
            Method Detail

            begin

            public void begin(org.xml.sax.AttributeList attributes)
                       throws java.lang.Exception
            Process the start of this element.
            Overrides:
            begin in class Rule
            Parameters:
            attributes - The attribute list for this element

            body

            public void body(java.lang.String bodyText)
                      throws java.lang.Exception
            Process the body text of this element.
            Overrides:
            body in class Rule
            Parameters:
            bodyText - The body text of this element

            end

            public void end()
                     throws java.lang.Exception
            Process the end of this element.
            Overrides:
            end in class Rule

            finish

            public void finish()
                        throws java.lang.Exception
            Clean up after parsing is complete.
            Overrides:
            finish in class Rule


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/digester/CallParamRule.html0000644000175000017500000004104710404045236030535 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class CallParamRule

            org.apache.struts.digester
            Class CallParamRule

            java.lang.Object
              |
              +--org.apache.struts.digester.Rule
                    |
                    +--org.apache.struts.digester.CallParamRule
            

            public class CallParamRule
            extends Rule

            Rule implementation that saves a parameter from either an attribute of this element, or from the element body, to be used in a call generated by a surrounding CallMethodRule rule.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig McClanahan

            Field Summary
            protected  java.lang.String attributeName
                      The attribute from which to save the parameter value
            protected  java.lang.String bodyText
                      The body text collected from this element.
            protected  int paramIndex
                      The zero-relative index of the parameter we are saving.
             
            Fields inherited from class org.apache.struts.digester.Rule
            digester
             
            Constructor Summary
            CallParamRule(Digester digester, int paramIndex)
                      Construct a "call parameter" rule that will save the body text of this element as the parameter value.
            CallParamRule(Digester digester, int paramIndex, java.lang.String attributeName)
                      Construct a "call parameter" rule that will save the value of the specified attribute as the parameter value.
             
            Method Summary
             void begin(org.xml.sax.AttributeList attributes)
                      Process the start of this element.
             void body(java.lang.String bodyText)
                      Process the body text of this element.
             void end()
                      Process the end of this element.
             void finish()
                      Clean up after parsing is complete.
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            attributeName

            protected java.lang.String attributeName
            The attribute from which to save the parameter value

            bodyText

            protected java.lang.String bodyText
            The body text collected from this element.

            paramIndex

            protected int paramIndex
            The zero-relative index of the parameter we are saving.
            Constructor Detail

            CallParamRule

            public CallParamRule(Digester digester,
                                 int paramIndex)
            Construct a "call parameter" rule that will save the body text of this element as the parameter value.
            Parameters:
            digester - The associated Digester
            paramIndex - The zero-relative parameter number

            CallParamRule

            public CallParamRule(Digester digester,
                                 int paramIndex,
                                 java.lang.String attributeName)
            Construct a "call parameter" rule that will save the value of the specified attribute as the parameter value.
            Parameters:
            digester - The associated Digester
            paramIndex - The zero-relative parameter number
            attributeName - The name of the attribute to save
            Method Detail

            begin

            public void begin(org.xml.sax.AttributeList attributes)
                       throws java.lang.Exception
            Process the start of this element.
            Overrides:
            begin in class Rule
            Parameters:
            attributes - The attribute list for this element

            body

            public void body(java.lang.String bodyText)
                      throws java.lang.Exception
            Process the body text of this element.
            Overrides:
            body in class Rule
            Parameters:
            bodyText - The body text of this element

            end

            public void end()
                     throws java.lang.Exception
            Process the end of this element.
            Overrides:
            end in class Rule

            finish

            public void finish()
                        throws java.lang.Exception
            Clean up after parsing is complete.
            Overrides:
            finish in class Rule


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/digester/Digester.html0000644000175000017500000017734110404045230027620 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class Digester

            org.apache.struts.digester
            Class Digester

            org.apache.struts.digester.Digester
            

            public class Digester

            A Digester processes an XML input stream by matching a series of element nesting patterns to execute Rules that have been added prior to the start of parsing. This package was inspired by the XmlMapper class that was part of Tomcat 3.0 and 3.1, but is organized somewhat differently.

            See the Digester Developer Guide for more information.

            IMPLEMENTATION NOTE - A single Digester instance may only be used within the context of a single thread at a time, and a call to parse() must be completed before another can be initiated even from the same thread.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig McClanahan

            Field Summary
            protected  java.lang.StringBuffer bodyText
                      The body text of the current element.
            protected  ArrayStack bodyTexts
                      The stack of body text string buffers for surrounding elements.
            protected  int debug
                      The debugging detail level of this component.
            protected  java.util.HashMap dtds
                      The URLs of DTDs that have been registered, keyed by the public identifier that corresponds.
            protected  org.xml.sax.ErrorHandler errorHandler
                      The application-supplied error handler that is notified when parsing warnings, errors, or fatal errors occur.
            protected  org.xml.sax.Locator locator
                      The Locator associated with our parser.
            protected  java.lang.String match
                      The current match pattern for nested element processing.
            protected  javax.xml.parsers.SAXParser parser
                      The SAXParser we will use to parse the input stream.
            protected  java.lang.Object root
                      The "root" element of the stack (in other words, the last object that was popped.
            protected  java.util.HashMap rules
                      The set of Rules that have been registered with this Digester.
            protected  ArrayStack stack
                      The object stack being constructed.
            protected  boolean validating
                      Do we want to use a validating parser?
             
            Constructor Summary
            Digester()
                      Construct a new Digester with default properties.
             
            Method Summary
             void addCallMethod(java.lang.String pattern, java.lang.String methodName, int paramCount)
                      Add an "call method" rule for the specified parameters.
             void addCallMethod(java.lang.String pattern, java.lang.String methodName, int paramCount, java.lang.Class[] paramTypes)
                      Add an "call method" rule for the specified parameters.
             void addCallMethod(java.lang.String pattern, java.lang.String methodName, int paramCount, java.lang.String[] paramTypes)
                      Add an "call method" rule for the specified parameters.
             void addCallParam(java.lang.String pattern, int paramIndex)
                      Add a "call parameter" rule for the specified parameters.
             void addCallParam(java.lang.String pattern, int paramIndex, java.lang.String attributeName)
                      Add a "call parameter" rule for the specified parameters.
             void addObjectCreate(java.lang.String pattern, java.lang.String className)
                      Add an "object create" rule for the specified parameters.
             void addObjectCreate(java.lang.String pattern, java.lang.String className, java.lang.String attributeName)
                      Add an "object create" rule for the specified parameters.
             void addRule(java.lang.String pattern, Rule rule)
                      Register a new Rule matching the specified pattern.
             void addSetNext(java.lang.String pattern, java.lang.String methodName)
                      Add a "set next" rule for the specified parameters.
             void addSetNext(java.lang.String pattern, java.lang.String methodName, java.lang.String paramType)
                      Add a "set next" rule for the specified parameters.
             void addSetProperties(java.lang.String pattern)
                      Add a "set properties" rule for the specified parameters.
             void addSetProperty(java.lang.String pattern, java.lang.String name, java.lang.String value)
                      Add a "set property" rule for the specified parameters.
             void addSetTop(java.lang.String pattern, java.lang.String methodName)
                      Add a "set top" rule for the specified parameters.
             void addSetTop(java.lang.String pattern, java.lang.String methodName, java.lang.String paramType)
                      Add a "set top" rule for the specified parameters.
             void characters(char[] buffer, int start, int length)
                      Process notification of character data received from the body of an XML element.
             void clear()
                      Clear the current contents of the object stack.
             void endDocument()
                      Process notification of the end of the document being reached.
             void endElement(java.lang.String name)
                      Process notification of the end of an XML element being reached.
             void error(org.xml.sax.SAXParseException exception)
                      Forward notification of a parsing error to the application supplied error handler (if any).
             void fatalError(org.xml.sax.SAXParseException exception)
                      Forward notification of a fatal parsing error to the application supplied error handler (if any).
             int getCount()
                      Return the current depth of the element stack.
             int getDebug()
                      Return the debugging detail level of this Digester.
             org.xml.sax.ErrorHandler getErrorHandler()
                      Return the error handler for this Digester.
             javax.xml.parsers.SAXParser getParser()
                      Return the SAXParser we will use to parse the input stream.
            protected  java.util.List getRules(java.lang.String match)
                      Return the set of rules that apply to the specified match position.
             boolean getValidating()
                      Return the validating parser flag.
             void ignorableWhitespace(char[] buffer, int start, int len)
                      Process notification of ignorable whitespace received from the body of an XML element.
             void log(java.lang.String message)
                      Log a message to the log writer associated with this context.
             void log(java.lang.String message, java.lang.Throwable exception)
                      Log a message and associated exception to the log writer associated with this context.
             void notationDecl(java.lang.String name, java.lang.String publicId, java.lang.String systemId)
                      Receive notification of a notation declaration event.
             java.lang.Object parse(java.io.File file)
                      Parse the content of the specified file using this Digester.
             java.lang.Object parse(org.xml.sax.InputSource input)
                      Parse the content of the specified input source using this Digester.
             java.lang.Object parse(java.io.InputStream input)
                      Parse the content of the specified input stream using this Digester.
             java.lang.Object parse(java.lang.String uri)
                      Parse the content of the specified URI using this Digester.
             java.lang.Object peek()
                      Return the top object on the stack without removing it.
             java.lang.Object peek(int n)
                      Return the n'th object down the stack, where 0 is the top element and [getCount()-1] is the bottom element.
             java.lang.Object pop()
                      Pop the top object off of the stack, and return it.
             void processingInstruction(java.lang.String target, java.lang.String data)
                      Process notification of a processing instruction that was encountered.
             void push(java.lang.Object object)
                      Push a new object onto the top of the object stack.
             void register(java.lang.String publicId, java.lang.String dtdURL)
                      Register the specified DTD URL for the specified public identifier.
             org.xml.sax.InputSource resolveEntity(java.lang.String publicId, java.lang.String systemId)
                      Resolve the requested external entity.
             void setDebug(int debug)
                      Set the debugging detail level of this Digester.
             void setDocumentLocator(org.xml.sax.Locator locator)
                      Set the document locator associated with our parser.
             void setErrorHandler(org.xml.sax.ErrorHandler errorHandler)
                      Set the error handler for this Digester.
             void setValidating(boolean validating)
                      Set the validating parser flag.
             void startDocument()
                      Process notification of the beginning of the document being reached.
             void startElement(java.lang.String name, org.xml.sax.AttributeList list)
                      Process notification of the start of an XML element being reached.
             void unparsedEntityDecl(java.lang.String name, java.lang.String publicId, java.lang.String systemId, java.lang.String notation)
                      Receive notification of an unparsed entity declaration event.
             void warning(org.xml.sax.SAXParseException exception)
                      Forward notification of a parse warning to the application supplied error handler (if any).
             

            Field Detail

            bodyText

            protected java.lang.StringBuffer bodyText
            The body text of the current element.

            bodyTexts

            protected ArrayStack bodyTexts
            The stack of body text string buffers for surrounding elements.

            debug

            protected int debug
            The debugging detail level of this component.

            dtds

            protected java.util.HashMap dtds
            The URLs of DTDs that have been registered, keyed by the public identifier that corresponds.

            errorHandler

            protected org.xml.sax.ErrorHandler errorHandler
            The application-supplied error handler that is notified when parsing warnings, errors, or fatal errors occur.

            locator

            protected org.xml.sax.Locator locator
            The Locator associated with our parser.

            match

            protected java.lang.String match
            The current match pattern for nested element processing.

            parser

            protected javax.xml.parsers.SAXParser parser
            The SAXParser we will use to parse the input stream.

            root

            protected java.lang.Object root
            The "root" element of the stack (in other words, the last object that was popped.

            rules

            protected java.util.HashMap rules
            The set of Rules that have been registered with this Digester. The key is the matching pattern against the current element stack, and the value is a List containing the Rules for that pattern, in the order that they were registered.

            stack

            protected ArrayStack stack
            The object stack being constructed.

            validating

            protected boolean validating
            Do we want to use a validating parser?
            Constructor Detail

            Digester

            public Digester()
            Construct a new Digester with default properties.
            Method Detail

            getCount

            public int getCount()
            Return the current depth of the element stack.

            getDebug

            public int getDebug()
            Return the debugging detail level of this Digester.

            setDebug

            public void setDebug(int debug)
            Set the debugging detail level of this Digester.
            Parameters:
            debug - The new debugging detail level

            getErrorHandler

            public org.xml.sax.ErrorHandler getErrorHandler()
            Return the error handler for this Digester.

            setErrorHandler

            public void setErrorHandler(org.xml.sax.ErrorHandler errorHandler)
            Set the error handler for this Digester.
            Parameters:
            errorHandler - The new error handler

            getParser

            public javax.xml.parsers.SAXParser getParser()
            Return the SAXParser we will use to parse the input stream. If there is a problem creating the parser, return null.

            getValidating

            public boolean getValidating()
            Return the validating parser flag.

            setValidating

            public void setValidating(boolean validating)
            Set the validating parser flag. This must be called before parse() is called the first time.
            Parameters:
            validating - The new validating parser flag.

            characters

            public void characters(char[] buffer,
                                   int start,
                                   int length)
                            throws org.xml.sax.SAXException
            Process notification of character data received from the body of an XML element.
            Parameters:
            buffer - The characters from the XML document
            start - Starting offset into the buffer
            length - Number of characters from the buffer
            Throws:
            SAXException - if a parsing error is to be reported

            endDocument

            public void endDocument()
                             throws org.xml.sax.SAXException
            Process notification of the end of the document being reached.
            Throws:
            SAXException - if a parsing error is to be reported

            endElement

            public void endElement(java.lang.String name)
                            throws org.xml.sax.SAXException
            Process notification of the end of an XML element being reached.
            Parameters:
            name - Name of the element that is ending
            Throws:
            SAXException - if a parsing error is to be reported

            ignorableWhitespace

            public void ignorableWhitespace(char[] buffer,
                                            int start,
                                            int len)
                                     throws org.xml.sax.SAXException
            Process notification of ignorable whitespace received from the body of an XML element.
            Parameters:
            buffer - The characters from the XML document
            start - Starting offset into the buffer
            length - Number of characters from the buffer
            Throws:
            SAXException - if a parsing error is to be reported

            processingInstruction

            public void processingInstruction(java.lang.String target,
                                              java.lang.String data)
                                       throws org.xml.sax.SAXException
            Process notification of a processing instruction that was encountered.
            Parameters:
            target - The processing instruction target
            data - The processing instruction data (if any)
            Throws:
            SAXException - if a parsing error is to be reported

            setDocumentLocator

            public void setDocumentLocator(org.xml.sax.Locator locator)
            Set the document locator associated with our parser.
            Parameters:
            locator - The new locator

            startDocument

            public void startDocument()
                               throws org.xml.sax.SAXException
            Process notification of the beginning of the document being reached.
            Throws:
            SAXException - if a parsing error is to be reported

            startElement

            public void startElement(java.lang.String name,
                                     org.xml.sax.AttributeList list)
                              throws org.xml.sax.SAXException
            Process notification of the start of an XML element being reached.
            Parameters:
            name - Name of the element that is starting
            list - The attributes associated with this element
            Throws:
            SAXException - if a parsing error is to be reported

            notationDecl

            public void notationDecl(java.lang.String name,
                                     java.lang.String publicId,
                                     java.lang.String systemId)
            Receive notification of a notation declaration event.
            Parameters:
            name - The notation name
            publicId - The public identifier (if any)
            systemId - The system identifier (if any)

            unparsedEntityDecl

            public void unparsedEntityDecl(java.lang.String name,
                                           java.lang.String publicId,
                                           java.lang.String systemId,
                                           java.lang.String notation)
            Receive notification of an unparsed entity declaration event.
            Parameters:
            name - The unparsed entity name
            publicId - The public identifier (if any)
            systemId - The system identifier (if any)
            notation - The name of the associated notation

            resolveEntity

            public org.xml.sax.InputSource resolveEntity(java.lang.String publicId,
                                                         java.lang.String systemId)
                                                  throws org.xml.sax.SAXException
            Resolve the requested external entity.
            Parameters:
            publicId - The public identifier of the entity being referenced
            systemId - The system identifier of the entity being referenced
            Throws:
            SAXException - if a parsing exception occurs

            error

            public void error(org.xml.sax.SAXParseException exception)
                       throws org.xml.sax.SAXException
            Forward notification of a parsing error to the application supplied error handler (if any).
            Parameters:
            exception - The error information
            Throws:
            SAXException - if a parsing exception occurs

            fatalError

            public void fatalError(org.xml.sax.SAXParseException exception)
                            throws org.xml.sax.SAXException
            Forward notification of a fatal parsing error to the application supplied error handler (if any).
            Parameters:
            exception - The fatal error information
            Throws:
            SAXException - if a parsing exception occurs

            warning

            public void warning(org.xml.sax.SAXParseException exception)
                         throws org.xml.sax.SAXException
            Forward notification of a parse warning to the application supplied error handler (if any).
            Parameters:
            exception - The warning information
            Throws:
            SAXException - if a parsing exception occurs

            log

            public void log(java.lang.String message)
            Log a message to the log writer associated with this context.
            Parameters:
            message - The message to be logged

            log

            public void log(java.lang.String message,
                            java.lang.Throwable exception)
            Log a message and associated exception to the log writer associated with this context.
            Parameters:
            message - The message to be logged
            exception - The associated exception to be logged

            parse

            public java.lang.Object parse(java.io.File file)
                                   throws java.io.IOException,
                                          org.xml.sax.SAXException
            Parse the content of the specified file using this Digester. Returns the root element from the object stack (if any).
            Parameters:
            file - File containing the XML data to be parsed
            Throws:
            java.io.IOException - if an input/output error occurs
            SAXException - if a parsing exception occurs

            parse

            public java.lang.Object parse(org.xml.sax.InputSource input)
                                   throws java.io.IOException,
                                          org.xml.sax.SAXException
            Parse the content of the specified input source using this Digester. Returns the root element from the object stack (if any).
            Parameters:
            input - Input source containing the XML data to be parsed
            Throws:
            java.io.IOException - if an input/output error occurs
            SAXException - if a parsing exception occurs

            parse

            public java.lang.Object parse(java.io.InputStream input)
                                   throws java.io.IOException,
                                          org.xml.sax.SAXException
            Parse the content of the specified input stream using this Digester. Returns the root element from the object stack (if any).
            Parameters:
            input - Input stream containing the XML data to be parsed
            Throws:
            java.io.IOException - if an input/output error occurs
            SAXException - if a parsing exception occurs

            parse

            public java.lang.Object parse(java.lang.String uri)
                                   throws java.io.IOException,
                                          org.xml.sax.SAXException
            Parse the content of the specified URI using this Digester. Returns the root element from the object stack (if any).
            Parameters:
            uri - URI containing the XML data to be parsed
            Throws:
            java.io.IOException - if an input/output error occurs
            SAXException - if a parsing exception occurs

            register

            public void register(java.lang.String publicId,
                                 java.lang.String dtdURL)
            Register the specified DTD URL for the specified public identifier. This must be called before the first call to parse().
            Parameters:
            publicId - Public identifier of the DTD to be resolved
            dtdURL - The URL to use for reading this DTD

            addRule

            public void addRule(java.lang.String pattern,
                                Rule rule)
            Register a new Rule matching the specified pattern.
            Parameters:
            pattern - Element matching pattern
            rule - Rule to be registered

            addCallMethod

            public void addCallMethod(java.lang.String pattern,
                                      java.lang.String methodName,
                                      int paramCount)
            Add an "call method" rule for the specified parameters.
            Parameters:
            pattern - Element matching pattern
            methodName - Method name to be called
            paramCount - Number of expected parameters (or zero for a single parameter from the body of this element)

            addCallMethod

            public void addCallMethod(java.lang.String pattern,
                                      java.lang.String methodName,
                                      int paramCount,
                                      java.lang.String[] paramTypes)
            Add an "call method" rule for the specified parameters.
            Parameters:
            pattern - Element matching pattern
            methodName - Method name to be called
            paramCount - Number of expected parameters (or zero for a single parameter from the body of this element)
            paramTypes - Set of Java class names for the types of the expected parameters (if you wish to use a primitive type, specify the corresonding Java wrapper class instead, such as java.lang.Boolean for a boolean parameter)

            addCallMethod

            public void addCallMethod(java.lang.String pattern,
                                      java.lang.String methodName,
                                      int paramCount,
                                      java.lang.Class[] paramTypes)
            Add an "call method" rule for the specified parameters.
            Parameters:
            pattern - Element matching pattern
            methodName - Method name to be called
            paramCount - Number of expected parameters (or zero for a single parameter from the body of this element)
            paramTypes - The Java class names of the arguments (if you wish to use a primitive type, specify the corresonding Java wrapper class instead, such as java.lang.Boolean for a boolean parameter)

            addCallParam

            public void addCallParam(java.lang.String pattern,
                                     int paramIndex)
            Add a "call parameter" rule for the specified parameters.
            Parameters:
            pattern - Element matching pattern
            paramIndex - Zero-relative parameter index to set (from the body of this element)

            addCallParam

            public void addCallParam(java.lang.String pattern,
                                     int paramIndex,
                                     java.lang.String attributeName)
            Add a "call parameter" rule for the specified parameters.
            Parameters:
            pattern - Element matching pattern
            paramIndex - Zero-relative parameter index to set (from the specified attribute)
            attributeName - Attribute whose value is used as the parameter value

            addObjectCreate

            public void addObjectCreate(java.lang.String pattern,
                                        java.lang.String className)
            Add an "object create" rule for the specified parameters.
            Parameters:
            pattern - Element matching pattern
            className - Java class name to be created

            addObjectCreate

            public void addObjectCreate(java.lang.String pattern,
                                        java.lang.String className,
                                        java.lang.String attributeName)
            Add an "object create" rule for the specified parameters.
            Parameters:
            pattern - Element matching pattern
            className - Default Java class name to be created
            attributeName - Attribute name that optionally overrides the default Java class name to be created

            addSetNext

            public void addSetNext(java.lang.String pattern,
                                   java.lang.String methodName)
            Add a "set next" rule for the specified parameters.
            Parameters:
            pattern - Element matching pattern
            methodName - Method name to call on the parent element

            addSetNext

            public void addSetNext(java.lang.String pattern,
                                   java.lang.String methodName,
                                   java.lang.String paramType)
            Add a "set next" rule for the specified parameters.
            Parameters:
            pattern - Element matching pattern
            methodName - Method name to call on the parent element
            paramType - Java class name of the expected parameter type (if you wish to use a primitive type, specify the corresonding Java wrapper class instead, such as java.lang.Boolean for a boolean parameter)

            addSetProperties

            public void addSetProperties(java.lang.String pattern)
            Add a "set properties" rule for the specified parameters.
            Parameters:
            pattern - Element matching pattern

            addSetProperty

            public void addSetProperty(java.lang.String pattern,
                                       java.lang.String name,
                                       java.lang.String value)
            Add a "set property" rule for the specified parameters.
            Parameters:
            pattern - Element matching pattern
            name - Attribute name containing the property name to be set
            value - Attribute name containing the property value to set

            addSetTop

            public void addSetTop(java.lang.String pattern,
                                  java.lang.String methodName)
            Add a "set top" rule for the specified parameters.
            Parameters:
            pattern - Element matching pattern
            methodName - Method name to call on the parent element

            addSetTop

            public void addSetTop(java.lang.String pattern,
                                  java.lang.String methodName,
                                  java.lang.String paramType)
            Add a "set top" rule for the specified parameters.
            Parameters:
            pattern - Element matching pattern
            methodName - Method name to call on the parent element
            paramType - Java class name of the expected parameter type (if you wish to use a primitive type, specify the corresonding Java wrapper class instead, such as java.lang.Boolean for a boolean parameter)

            clear

            public void clear()
            Clear the current contents of the object stack.

            peek

            public java.lang.Object peek()
            Return the top object on the stack without removing it. If there are no objects on the stack, return null.

            peek

            public java.lang.Object peek(int n)
            Return the n'th object down the stack, where 0 is the top element and [getCount()-1] is the bottom element. If the specified index is out of range, return null.
            Parameters:
            n - Index of the desired element, where 0 is the top of the stack, 1 is the next element down, and so on.

            pop

            public java.lang.Object pop()
            Pop the top object off of the stack, and return it. If there are no objects on the stack, return null.

            push

            public void push(java.lang.Object object)
            Push a new object onto the top of the object stack.
            Parameters:
            object - The new object

            getRules

            protected java.util.List getRules(java.lang.String match)
            Return the set of rules that apply to the specified match position. The selected rules are those that match exactly, or those rules that specify a suffix match and the tail of the rule matches the current match position. Exact matches have precedence over suffix matches, then (among suffix matches) the longest match is preferred.
            Parameters:
            match - The current match position


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/digester/ObjectCreateRule.html0000644000175000017500000003727210404045224031235 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class ObjectCreateRule

            org.apache.struts.digester
            Class ObjectCreateRule

            java.lang.Object
              |
              +--org.apache.struts.digester.Rule
                    |
                    +--org.apache.struts.digester.ObjectCreateRule
            

            public class ObjectCreateRule
            extends Rule

            Rule implementation that creates a new object and pushes it onto the object stack. When the element is complete, the object will be popped

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig McClanahan

            Field Summary
            protected  java.lang.String attributeName
                      The attribute containing an override class name if it is present.
            protected  java.lang.String className
                      The Java class name of the object to be created.
             
            Fields inherited from class org.apache.struts.digester.Rule
            digester
             
            Constructor Summary
            ObjectCreateRule(Digester digester, java.lang.String className)
                      Construct an object create rule with the specified class name.
            ObjectCreateRule(Digester digester, java.lang.String className, java.lang.String attributeName)
                      Construct an object create rule with the specified class name and an optional attribute name containing an override.
             
            Method Summary
             void begin(org.xml.sax.AttributeList attributes)
                      Process the beginning of this element.
             void end()
                      Process the end of this element.
             void finish()
                      Clean up after parsing is complete.
             
            Methods inherited from class org.apache.struts.digester.Rule
            body
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            attributeName

            protected java.lang.String attributeName
            The attribute containing an override class name if it is present.

            className

            protected java.lang.String className
            The Java class name of the object to be created.
            Constructor Detail

            ObjectCreateRule

            public ObjectCreateRule(Digester digester,
                                    java.lang.String className)
            Construct an object create rule with the specified class name.
            Parameters:
            digester - The associated Digester
            className - Java class name of the object to be created

            ObjectCreateRule

            public ObjectCreateRule(Digester digester,
                                    java.lang.String className,
                                    java.lang.String attributeName)
            Construct an object create rule with the specified class name and an optional attribute name containing an override.
            Parameters:
            digester - The associated Digester
            className - Java class name of the object to be created
            attributeName - Attribute name which, if present, contains an override of the class name to create
            Method Detail

            begin

            public void begin(org.xml.sax.AttributeList attributes)
                       throws java.lang.Exception
            Process the beginning of this element.
            Overrides:
            begin in class Rule
            Parameters:
            attributes - The attribute list of this element

            end

            public void end()
                     throws java.lang.Exception
            Process the end of this element.
            Overrides:
            end in class Rule

            finish

            public void finish()
                        throws java.lang.Exception
            Clean up after parsing is complete.
            Overrides:
            finish in class Rule


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/digester/Rule.html0000644000175000017500000003266210404045214026757 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class Rule

            org.apache.struts.digester
            Class Rule

            java.lang.Object
              |
              +--org.apache.struts.digester.Rule
            
            Direct Known Subclasses:
            AddDataSourceRule, CallMethodRule, CallParamRule, ObjectCreateRule, SetNextRule, SetPropertiesRule, SetPropertyRule, SetTopRule

            public abstract class Rule
            extends java.lang.Object

            Concrete implementations of this class implement actions to be taken when a corresponding nested pattern of XML elements has been matched.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig McClanahan

            Field Summary
            protected  Digester digester
                      The Digester with which this Rule is associated.
             
            Constructor Summary
            Rule(Digester digester)
                      Default constructor sets only the the associated Digester.
             
            Method Summary
             void begin(org.xml.sax.AttributeList attributes)
                      This method is called when the beginning of a matching XML element is encountered.
             void body(java.lang.String text)
                      This method is called when the body of a matching XML element is encountered.
             void end()
                      This method is called when the end of a matching XML element is encountered.
             void finish()
                      This method is called after all parsing methods have been called, to allow Rules to remove temporary data.
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            digester

            protected Digester digester
            The Digester with which this Rule is associated.
            Constructor Detail

            Rule

            public Rule(Digester digester)
            Default constructor sets only the the associated Digester.
            Parameters:
            digester - The digester with which this rule is associated
            Method Detail

            begin

            public void begin(org.xml.sax.AttributeList attributes)
                       throws java.lang.Exception
            This method is called when the beginning of a matching XML element is encountered.
            Parameters:
            attributes - The attribute list of this element

            body

            public void body(java.lang.String text)
                      throws java.lang.Exception
            This method is called when the body of a matching XML element is encountered. If the element has no body, this method is not called at all.
            Parameters:
            text - The text of the body of this element

            end

            public void end()
                     throws java.lang.Exception
            This method is called when the end of a matching XML element is encountered.

            finish

            public void finish()
                        throws java.lang.Exception
            This method is called after all parsing methods have been called, to allow Rules to remove temporary data.


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/digester/SetNextRule.html0000644000175000017500000003534210404045222030267 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class SetNextRule

            org.apache.struts.digester
            Class SetNextRule

            java.lang.Object
              |
              +--org.apache.struts.digester.Rule
                    |
                    +--org.apache.struts.digester.SetNextRule
            

            public class SetNextRule
            extends Rule

            Rule implementation that calls a method on the (top-1) (parent) object, passing the top object (child) as an argument. It is commonly used to establish parent-child relationships.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig McClanahan

            Field Summary
            protected  java.lang.String methodName
                      The method name to call on the parent object.
            protected  java.lang.String paramType
                      The Java class name of the parameter type expected by the method.
             
            Fields inherited from class org.apache.struts.digester.Rule
            digester
             
            Constructor Summary
            SetNextRule(Digester digester, java.lang.String methodName)
                      Construct a "set next" rule with the specified method name.
            SetNextRule(Digester digester, java.lang.String methodName, java.lang.String paramType)
                      Construct a "set next" rule with the specified method name.
             
            Method Summary
             void end()
                      Process the end of this element.
             void finish()
                      Clean up after parsing is complete.
             
            Methods inherited from class org.apache.struts.digester.Rule
            begin, body
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            methodName

            protected java.lang.String methodName
            The method name to call on the parent object.

            paramType

            protected java.lang.String paramType
            The Java class name of the parameter type expected by the method.
            Constructor Detail

            SetNextRule

            public SetNextRule(Digester digester,
                               java.lang.String methodName)
            Construct a "set next" rule with the specified method name. The method's argument type is assumed to be the class of the child object.
            Parameters:
            digester - The associated Digester
            methodName - Method name of the parent method to call

            SetNextRule

            public SetNextRule(Digester digester,
                               java.lang.String methodName,
                               java.lang.String paramType)
            Construct a "set next" rule with the specified method name.
            Parameters:
            digester - The associated Digester
            methodName - Method name of the parent method to call
            paramType - Java class of the parent method's argument (if you wish to use a primitive type, specify the corresonding Java wrapper class instead, such as java.lang.Boolean for a boolean parameter)
            Method Detail

            end

            public void end()
                     throws java.lang.Exception
            Process the end of this element.
            Overrides:
            end in class Rule

            finish

            public void finish()
                        throws java.lang.Exception
            Clean up after parsing is complete.
            Overrides:
            finish in class Rule


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/digester/SetPropertiesRule.html0000644000175000017500000002614010404045244031505 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class SetPropertiesRule

            org.apache.struts.digester
            Class SetPropertiesRule

            java.lang.Object
              |
              +--org.apache.struts.digester.Rule
                    |
                    +--org.apache.struts.digester.SetPropertiesRule
            

            public class SetPropertiesRule
            extends Rule

            Rule implementation that sets properties on the object at the top of the stack, based on attributes with corresponding names.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig McClanahan

            Fields inherited from class org.apache.struts.digester.Rule
            digester
             
            Constructor Summary
            SetPropertiesRule(Digester digester)
                      Default constructor sets only the the associated Digester.
             
            Method Summary
             void begin(org.xml.sax.AttributeList attributes)
                      Process the beginning of this element.
             
            Methods inherited from class org.apache.struts.digester.Rule
            body, end, finish
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Constructor Detail

            SetPropertiesRule

            public SetPropertiesRule(Digester digester)
            Default constructor sets only the the associated Digester.
            Parameters:
            digester - The digester with which this rule is associated
            Method Detail

            begin

            public void begin(org.xml.sax.AttributeList attributes)
                       throws java.lang.Exception
            Process the beginning of this element.
            Overrides:
            begin in class Rule
            Parameters:
            context - The associated context
            attributes - The attribute list of this element


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/digester/SetPropertyRule.html0000644000175000017500000003222510404045250031173 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class SetPropertyRule

            org.apache.struts.digester
            Class SetPropertyRule

            java.lang.Object
              |
              +--org.apache.struts.digester.Rule
                    |
                    +--org.apache.struts.digester.SetPropertyRule
            

            public class SetPropertyRule
            extends Rule

            Rule implementation that sets an individual property on the object at the top of the stack, based on attributes with specified names.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig McClanahan

            Field Summary
            protected  java.lang.String name
                      The attribute that will contain the property name.
            protected  java.lang.String value
                      The attribute that will contain the property value.
             
            Fields inherited from class org.apache.struts.digester.Rule
            digester
             
            Constructor Summary
            SetPropertyRule(Digester digester, java.lang.String name, java.lang.String value)
                      Construct a "set property" rule with the specified name and value attributes.
             
            Method Summary
             void begin(org.xml.sax.AttributeList attributes)
                      Process the beginning of this element.
             
            Methods inherited from class org.apache.struts.digester.Rule
            body, end, finish
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            name

            protected java.lang.String name
            The attribute that will contain the property name.

            value

            protected java.lang.String value
            The attribute that will contain the property value.
            Constructor Detail

            SetPropertyRule

            public SetPropertyRule(Digester digester,
                                   java.lang.String name,
                                   java.lang.String value)
            Construct a "set property" rule with the specified name and value attributes.
            Parameters:
            digester - The digester with which this rule is associated
            name - Name of the attribute that will contain the name of the property to be set
            value - Name of the attribute that will contain the value to which the property should be set
            Method Detail

            begin

            public void begin(org.xml.sax.AttributeList attributes)
                       throws java.lang.Exception
            Process the beginning of this element.
            Overrides:
            begin in class Rule
            Parameters:
            context - The associated context
            attributes - The attribute list of this element


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/digester/SetTopRule.html0000644000175000017500000003500510404045244030113 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class SetTopRule

            org.apache.struts.digester
            Class SetTopRule

            java.lang.Object
              |
              +--org.apache.struts.digester.Rule
                    |
                    +--org.apache.struts.digester.SetTopRule
            

            public class SetTopRule
            extends Rule

            Rule implementation that calls a method on the top (parent) object, passing the (top-1) (child) object as an argument.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig McClanahan

            Field Summary
            protected  java.lang.String methodName
                      The method name to call on the parent object.
            protected  java.lang.String paramType
                      The Java class name of the parameter type expected by the method.
             
            Fields inherited from class org.apache.struts.digester.Rule
            digester
             
            Constructor Summary
            SetTopRule(Digester digester, java.lang.String methodName)
                      Construct a "set parent" rule with the specified method name.
            SetTopRule(Digester digester, java.lang.String methodName, java.lang.String paramType)
                      Construct a "set parent" rule with the specified method name.
             
            Method Summary
             void end()
                      Process the end of this element.
             void finish()
                      Clean up after parsing is complete.
             
            Methods inherited from class org.apache.struts.digester.Rule
            begin, body
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            methodName

            protected java.lang.String methodName
            The method name to call on the parent object.

            paramType

            protected java.lang.String paramType
            The Java class name of the parameter type expected by the method.
            Constructor Detail

            SetTopRule

            public SetTopRule(Digester digester,
                              java.lang.String methodName)
            Construct a "set parent" rule with the specified method name. The parent method's argument type is assumed to be the class of the child object.
            Parameters:
            digester - The associated Digester
            methodName - Method name of the parent method to call

            SetTopRule

            public SetTopRule(Digester digester,
                              java.lang.String methodName,
                              java.lang.String paramType)
            Construct a "set parent" rule with the specified method name.
            Parameters:
            digester - The associated Digester
            methodName - Method name of the parent method to call
            paramType - Java class of the parent method's argument (if you wish to use a primitive type, specify the corresonding Java wrapper class instead, such as java.lang.Boolean for a boolean parameter)
            Method Detail

            end

            public void end()
                     throws java.lang.Exception
            Process the end of this element.
            Overrides:
            end in class Rule

            finish

            public void finish()
                        throws java.lang.Exception
            Clean up after parsing is complete.
            Overrides:
            finish in class Rule


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/digester/package-frame.html0000644000175000017500000000262210404045214030524 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Package org.apache.struts.digester org.apache.struts.digester
            Classes 
            CallMethodRule
            CallParamRule
            Digester
            ObjectCreateRule
            Rule
            SetNextRule
            SetPropertiesRule
            SetPropertyRule
            SetTopRule
            libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/digester/package-summary.html0000644000175000017500000010515310404045222031131 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Package org.apache.struts.digester

            Package org.apache.struts.digester

            The Digester package provides for rules-based processing of arbitrary XML documents.

            See:
                      Description

            Class Summary
            CallMethodRule Rule implementation that calls a method on the top (parent) object, passing arguments collected from subsequent CallParamRule rules or from the body of this element.
            CallParamRule Rule implementation that saves a parameter from either an attribute of this element, or from the element body, to be used in a call generated by a surrounding CallMethodRule rule.
            Digester A Digester processes an XML input stream by matching a series of element nesting patterns to execute Rules that have been added prior to the start of parsing.
            ObjectCreateRule Rule implementation that creates a new object and pushes it onto the object stack.
            Rule Concrete implementations of this class implement actions to be taken when a corresponding nested pattern of XML elements has been matched.
            SetNextRule Rule implementation that calls a method on the (top-1) (parent) object, passing the top object (child) as an argument.
            SetPropertiesRule Rule implementation that sets properties on the object at the top of the stack, based on attributes with corresponding names.
            SetPropertyRule Rule implementation that sets an individual property on the object at the top of the stack, based on attributes with specified names.
            SetTopRule Rule implementation that calls a method on the top (parent) object, passing the (top-1) (child) object as an argument.
             

            Package org.apache.struts.digester Description

            The Digester package provides for rules-based processing of arbitrary XML documents.

            Introduction

            In many application environments that deal with XML-formatted data, it is useful to be able to process an XML document in an "event driven" manner, where particular Java objects are created (or methods of existing objects are invoked) when particular patterns of nested XML elements have been recognized. Developers familiar with the Simple API for XML Parsing (SAX) approach to processing XML documents will recognize that the Digester provides a higher level, more developer-friendly interface to SAX events, because most of the details of navigating the XML element hierarchy are hidden -- allowing the developer to focus on the processing to be performed.

            In order to use a Digester, the following basic steps are required:

            • Create a new instance of the org.apache.struts.digester.Digester class. Previously created Digester instances may be safely reused, as long as you have completed any previously requested parse, and you do not try to utilize a particular Digester instance from more than one thread at a time.
            • Set any desired configuration properties that will customize the operation of the Digester when you next initiate a parse operation.
            • Push any desired initial object(s) onto the Digester's object stack.
            • Register all of the element matching patterns for which you wish to have processing rules fired when this pattern is recognized in an input document. You may register as many rules as you like for any particular pattern. If there is more than one rule for a given pattern, the rules will be executed in the order that they were listed.
            • Call the digester.parse() method, passing a reference to the XML document to be parsed in one of a variety of forms. See the Digester.parse() documentation for details. Note that you will need to be prepared to catch any IOException or SAXException that is thrown by the parser, or any runtime expression that is thrown by one of the processing rules.

            Digester Configuration Properties

            A org.apache.struts.digester.Digester instance contains several configuration properties that can be used to customize its operation. These properties must be configured before you call one of the parse() variants, in order for them to take effect on that parse.

            Property Description
            debug An integer defining the amount of debugging output that will be written to System.out() as the parse progresses. This is useful when tracking down where parsing problems are occurring. The default value of zero means no debugging output will be generated -- increasing values generally cause the generation of more verbose and detailed debugging information.
            validating A boolean that is set to true if you wish to validate the XML document against a Document Type Definition (DTD) that is specified in its DOCTYPE declaration. The default value of false requests a parse that only detects "well formed" XML documents, rather than "valid" ones.

            In addition to the scalar properties defined above, you can also register a local copy of a Document Type Definition (DTD) that is referenced in a DOCTYPE declaration. Such a registration tells the XML parser that, whenever it encounters a DOCTYPE declaration with the specified public identifier, it should utilize the actual DTD content at the registered system identifier (a URL), rather than the one in the DOCTYPE declaration.

            For example, the Struts framework controller servlet uses the following registration in order to tell Struts to use a local copy of the DTD for the Struts configuration file. This allows usage of Struts in environments that are not connected to the Internet, and speeds up processing even at Internet connected sites (because it avoids the need to go across the network).

                digester.register
                  ("-//Apache Software Foundation//DTD Struts Configuration 1.0//EN",
                   "/org/apache/struts/resources/struts-config_1_0.dtd");
            

            As a side note, the system identifier used in this example is the path that would be passed to java.lang.ClassLoader.getResource() or java.lang.ClassLoader.getResourceAsStream(). The actual DTD resource is loaded through the same class loader that loads all of the Struts classes -- typically from the struts.jar file.

            The Object Stack

            One very common use of org.apache.struts.digester.Digester technology is to dynamically construct a tree of Java objects, whose internal organization, as well as the details of property settings on these objects, are configured based on the contents of the XML document. In fact, the primary reason that the Digester package was created was to facilitate the way that the Struts controller servlet configures itself based on the contents of your application's struts-config.xml file.

            To facilitate this usage, the Digester exposes a stack that can be manipulated by processing rules that are fired when element matching patterns are satisfied. The usual stack-related operations are made available, including the following:

            • clear() - Clear the current contents of the object stack.
            • peek() - Return a reference to the top object on the stack, without removing it.
            • pop() - Remove the top object from the stack and return it.
            • push() - Push a new object onto the top of the stack.

            A typical design pattern, then, is to fire a rule that creates a new object and pushes it on the stack when the beginning of a particular XML element is encountered. The object will remain there while the nested content of this element is processed, and it will be popped off when the end of the element is encountered. As we will see, the standard "object create" processing rule supports exactly this functionalility in a very convenient way.

            Several potential issues with this design pattern are addressed by other features of the Digester functionality:

            • How do I relate the objects being created to each other? - The Digester supports standard processing rules that pass the top object on the stack as an argument to a named method on the next-to-top object on the stack (or vice versa). This rule makes it easy to establish parent-child relationships between these objects. One-to-one and one-to-many relationships are both easy to construct.
            • How do I retain a reference to the first object that was created? As you review the description of what the "object create" processing rule does, it would appear that the first object you create (i.e. the object created by the outermost XML element you process) will disappear from the stack by the time that XML parsing is completed, because the end of the element would have been encountered. To deal with this, the normal approach is to push a reference to some application global object onto the stack before the parse begins, and arrange that a parent-child relationship be created (by appropriate processing rules) between this manually pushed object and the one that is dynamically created. In this way, the pushed object will retain a reference to the dynamically created object (and therefore all of its children) after the parse finishes.

            Element Matching Patterns

            A primary feature of the org.apache.struts.digester.Digester parser is that the Digester automatically navigates the element hierarchy of the XML document you are parsing for you, without requiring any developer attention to this process. Instead, you focus on deciding what functions you would like to have performed whenver a certain arrangement of nested elements is encountered in the XML document being parsed. The mechanism for specifying such arrangements are called element matching patterns.

            A very simple element matching pattern is a simple string like "a". This pattern is matched whenever an <a> top-level element is encountered in the XML document, no matter how many times it occurs. Note that nested <a> elements will not match this pattern -- we will describe means to support this kind of matching later.

            The next step up in matching pattern complexity is "a/b". This pattern will be matched when a <b> element is found nested inside a top-level <a> element. Again, this match can occur as many times as desired, depending on the content of the XML document being parsed. You can use multiple slashes to define a hierarchy of any desired depth that will be matched appropriately.

            For example, assume you have registered processing rules that match patterns "a", "a/b", and "a/b/c". For an input XML document with the following contents, the indicated patterns will be matched when the corresponding element is parsed:

              <a>         -- Matches pattern "a"
                <b>       -- Matches pattern "a/b"
                  <c/>    -- Matches pattern "a/b/c"
                  <c/>    -- Matches pattern "a/b/c"
                </b>
                <b>       -- Matches pattern "a/b"
                  <c/>    -- Matches pattern "a/b/c"
                  <c/>    -- Matches pattern "a/b/c"
                  <c/>    -- Matches pattern "a/b/c"
                </b>
              </a>
            

            It is also possible to match a particular XML element, no matter how it is nested (or not nested) in the XML document, by using the "*" wildcard character in your matching pattern strings. For example, an element matching pattern of "*/a" will match an <a> element at any nesting position within the document.

            It is quite possible that, when a particular XML element is being parsed, the pattern for more than one registered processing rule will be matched (either because you registered more than one processing rule with the same matching pattern, or because one more more exact pattern matches and wildcard pattern matches are satisfied by the same element. When this occurs, the corresponding processing rules will all be fired, in the order that they were initially registered with the Digester.

            Processing Rules

            The previous section documented how you identify when you wish to have certain actions take place. The purpose of processing rules is to define what should happen when the patterns are matched.

            Formally, a processing rule is a Java class that subclasses the org.apache.struts.digester.Rule interface. Each Rule implements one or more of the following event methods that are called at well-defined times when the matching patterns corresponding to this rule trigger it:

            • begin() - Called when the beginning of the matched XML element is encountered. A data structure containing all of the attributes corresponding to this element are passed as well.
            • body() - Called when nested content (that is not itself XML elements) of the matched element is encountered. Any leading or trailing whitespace will have been removed as part of the parsing process.
            • end() - Called when the ending of the matched XML element is encountered. If nested XML elements that matched other processing rules was included in the body of this element, the appropriate processing rules for the matched rules will have already been completed before this method is called.
            • finish() - Called when the parse has been completed, to give each rule a chance to clean up any temporary data they might have created and cached.

            As you are configuring your digester, you can call the addRule() method to register a specific element matching pattern, along with an instance of a Rule class that will have its event handling methods called at the appropriate times, as described above. This mechanism allows you to create Rule implementation classes dynamically, to implement any desired application specific functionality.

            In addition, a set of processing rule implementation classes are provided, which deal with many common programming scenarios. These classes include the following:

            • ObjectCreateRule - When the begin() method is called, this rule instantiates a new instance of a specified Java class, and pushes it on the stack. The class name to be used is defaulted according to a parameter passed to this rule's constructor, but can optionally be overridden by a classname passed via the specified attribute to the XML element being processed. When the end() method is called, the top object on the stack (presumably, the one we added in the begin() method) will be popped, and any reference to it (within the Digester) will be discarded.
            • SetPropertiesRule - When the begin() method is called, the digester uses the standard Java Reflection API to identify any JavaBeans property setter methods (on the object at the top of the digester's stack) who have property names that match the attributes specified on this XML element, and then call them individually, passing the corresponding attribute values. A very common idiom is to define an object create rule, followed by a set properties rule, with the same element matching pattern. This causes the creation of a new Java object, followed by "configuration" of that object's properties based on the attributes of the same XML element that created this object.
            • SetPropertyRule - When the begin() method is called, the digester calls a specified property setter (where the property itself is named by an attribute) with a specified value (where the value is named by another attribute), on the object at the top of the digester's stack. This is useful when your XML file conforms to a particular DTD, and you wish to configure a particular property that does not have a corresponding attribute in the DTD.
            • SetNextRule - When the begin() method is called, the digester analyzes the next-to-top element on the stack, looking for a property setter method for a specified property. It then calls this method, passing the object at the top of the stack as an argument. This rule is commonly used to establish one-to-many relationships between the two objects, with the method name commonly being something like "addChild".
            • SetTopRule - When the begin() method is called, the digester analyzes the top element on the stack, looking for a property setter method for a specified property. It then calls this method, passing the next-to-top object on the stack as an argument. This rule would be used as an alternative to a SetNextRule, with a typical method name "setParent", if the API supported by your object classes prefers this approach.
            • CallMethodRule - This rule sets up a method call to a named method of the top object on the digester's stack, which will actually take place when the end() method is called. You configure this rule by specifying the name of the method to be called, the number of arguments it takes, and (optionally) the Java class name(s) defining the type(s) of the method's arguments. The actual parameter values, if any, will typically be accumulated from the body content of nested elements within the element that triggered this rule, using the CallParamRule discussed next.
            • CallParamRule - This rule identifies the source of a particular numbered (zero-relative) parameter for a CallMethodRule within which we are nested. You can specify that the parameter value be taken from a particular named attribute, or from the nested body content of this element.

            You can create instances of the standard Rule classes and register them by calling digester.addRule(), as described above. However, because their usage is so common, shorthand registration methods are defined for each of the standard rules, directly on the Digester class. For example, the following code sequence:

                Rule rule = new SetNextRule(digester, "addChild",
                                            "com.mycompany.mypackage.MyChildClass");
                digester.addRule("a/b/c", rule);
            

            can be replaced by:

                digester.addSetNext("a/b/c", "addChild",
                                    "com.mycompany.mypackage.MyChildClass");
            

            Usage Examples

            Processing The Struts Configuration File

            As stated earlier, the primary reason that the org.apache.struts.digester.Digester package exists is because the Struts controller servlet itself needed a robust, flexible, easy to extend mechanism for processing the contents of the struts-config.xml configuration that describes nearly every aspect of a Struts-based application. Because of this, the controller servlet contains a comprehensive, real world, example of how the Digester can be employed for this type of a use case. See the initDigester() method of class org.apache.struts.action.ActionServlet for the code that creates and configures the Digester to be used, and the initMapping() method for where the parsing actually takes place.

            The following discussion highlights a few of the matching patterns and processing rules that are configured, to illustrate the use of some of the Digester features. First, let's look at how the Digester instance is created and initialized:

                Digester digester = new Digester();
                digester.push(this);
                digester.setDebug(detail);
                digester.setValidating(true);
            

            We see that a new Digester instance is created, and is configured to use a validating parser. Validation will occur against the struts-config_1_0.dtd DTD that is included with Struts (as discussed earlier). In order to provide a means of tracking the configured objects, the controller servlet instance itself will be added to the digester's stack.

                digester.addObjectCreate("struts-config/global-forwards/forward",
                                         forwardClass, "className");
                digester.addSetProperties("struts-config/global-forwards/forward");
                digester.addSetNext("struts-config/global-forwards/forward",
                                    "addForward",
                                    "org.apache.struts.action.ActionForward");
                digester.addSetProperty
                  ("struts-config/global-forwards/forward/set-property",
                   "property", "value");
            

            The rules created by these lines are used to process the global forward declarations. When a <forward> element is encountered, the following actions take place:

            • A new object instance is created -- the ActionForward instance that will represent this definition. The Java class name defaults to that specified as an initialization parameter (which we have stored in the String variable forwardClass), but can be overridden by using the "className" attribute (if it is present in the XML element we are currently parsing). The new ActionForward instance is pushed onto the stack.
            • The properties of the ActionForward instance (at the top of the stack) are configured based on the attributes of the <forward> element.
            • Nested occurrences of the <set-property> element cause calls to additional property setter methods to occur. This is required only if you have provided a custom implementation of the ActionForward class with additional properties that are not included in the DTD.
            • The addForward() method of the next-to-top object on the stack (i.e. the controller servlet itself) will be called, passing the object at the top of the stack (i.e. the ActionForward instance) as an argument. This causes the global forward to be registered, and as a result of this it will be remembered even after the stack is popped.
            • At the end of the <forward> element, the top element (i.e. the ActionForward instance) will be popped off the stack.

            Later on, the digester is actually executed as follows:

                InputStream input =
                  getServletContext().getResourceAsStream(config);
                ...
                try {
                    digester.parse(input);
                    input.close();
                } catch (SAXException e) {
                    ... deal with the problem ...
                }
            

            As a result of the call to parse(), all of the configuration information that was defined in the struts-config.xml file is now represented as collections of objects cached within the Struts controller servlet, as well as being exposed as servlet context attributes.

            Parsing Body Text In XML Files

            The Digester module also allows you to process the nested body text in an XML file, not just the elements and attributes that are encountered. The following example is based on an assumed need to parse the web application deployment descriptor (/WEB-INF/web.xml) for the current web application, and record the configuration information for a particular servlet. To record this information, assume the existence of a bean class with the following method signatures (among others):

              package com.mycompany;
              public class ServletBean {
                public void setServletName(String servletName);
                public void setServletClass(String servletClass);
                public void addInitParam(String name, String value);
              }
            

            We are going to process the web.xml file that declares the controller servlet in a typical Struts-based application (abridged for brevity in this example):

              <web-app>
                ...
                <servlet>
                  <servlet-name>action</servlet-name>
                  <servlet-class>org.apache.struts.action.ActionServlet<servlet-class>
                  <init-param>
                    <param-name>application</param-name>
                    <param-value>org.apache.struts.example.ApplicationResources<param-value>
                  </init-param>
                  <init-param>
                    <param-name>config</param-name>
                    <param-value>/WEB-INF/struts-config.xml<param-value>
                  </init-param>
                </servlet>
                ...
              </web-app>
            

            Next, lets define some Digester processing rules for this input file:

              digester.addObjectCreate("web-app/servlet",
                                       "com.mycompany.ServletBean");
              digester.addCallMethod("web-app/servlet/servlet-name", "setServletName", 0);
              digester.addCallMethod("web-app/servlet/servlet-class",
                                     "setServletClass", 0);
              digester.addCallMethod("web-app/servlet/init-param",
                                     "addInitParam", 2);
              digester.addCallParam("web-app/servlet/init-param/param-name", 0);
              digester.addCallParam("web-app/servlet/init-param/param-value", 1);
            

            Now, as elements are parsed, the following processing occurs:

            • <servlet> - A new com.mycompany.ServletBean object is created, and pushed on to the object stack.
            • <servlet-name> - The setServletName() method of the top object on the stack (our ServletBean) is called, passing the body content of this element as a single parameter.
            • <servlet-class> - The setServletClass() method of the top object on the stack (our ServletBean) is called, passing the body content of this element as a single parameter.
            • <init-param> - A call to the addInitParam method of the top object on the stack (our ServletBean) is set up, but it is not called yet. The call will be expecting two String parameters, which must be set up by subsequent call parameter rules.
            • <param-name> - The body content of this element is assigned as the first (zero-relative) argument to the call we are setting up.
            • <param-value> - The body content of this element is assigned as the second (zero-relative) argument to the call we are setting up.
            • </init-param> - The call to addInitParam() that we have set up is now executed, which will cause a new name-value combination to be recorded in our bean.
            • <init-param> - The same set of processing rules are fired again, causing a second call to addInitParam() with the second parameter's name and value.
            • </servlet> - The element on the top of the object stack (which should be the ServletBean we pushed earlier) is popped off the object stack.



            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/digester/package-tree.html0000644000175000017500000001352610404045242030377 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: org.apache.struts.digester Class Hierarchy

            Hierarchy For Package org.apache.struts.digester

            Package Hierarchies:
            All Packages

            Class Hierarchy



            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/0000755000175000017500000000000010404045174024612 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/bean/0000755000175000017500000000000010423130300025502 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/bean/CookieTag.html0000644000175000017500000004671410404045210030255 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class CookieTag

            org.apache.struts.taglib.bean
            Class CookieTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--org.apache.struts.taglib.bean.CookieTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class CookieTag
            extends javax.servlet.jsp.tagext.TagSupport

            Define a scripting variable based on the value(s) of the specified cookie received with this request.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  java.lang.String id
                      The name of the scripting variable that will be exposed as a page scope attribute.
            protected static MessageResources messages
                      The message resources for this package.
            protected  java.lang.String multiple
                      Return an array of Cookies if multiple is non-null.
            protected  java.lang.String name
                      The name of the cookie whose value is to be exposed.
            protected  java.lang.String value
                      The default value to return if no cookie of the specified name is found.
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            CookieTag()
                       
             
            Method Summary
             int doStartTag()
                      Retrieve the required property and expose it as a scripting variable.
             java.lang.String getId()
                       
             java.lang.String getMultiple()
                       
             java.lang.String getName()
                       
             java.lang.String getValue()
                       
             void release()
                      Release all allocated resources.
             void setId(java.lang.String id)
                       
             void setMultiple(java.lang.String multiple)
                       
             void setName(java.lang.String name)
                       
             void setValue(java.lang.String value)
                       
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            doAfterBody, doEndTag, findAncestorWithClass, getParent, getValue, getValues, removeValue, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            id

            protected java.lang.String id
            The name of the scripting variable that will be exposed as a page scope attribute.

            messages

            protected static MessageResources messages
            The message resources for this package.

            multiple

            protected java.lang.String multiple
            Return an array of Cookies if multiple is non-null.

            name

            protected java.lang.String name
            The name of the cookie whose value is to be exposed.

            value

            protected java.lang.String value
            The default value to return if no cookie of the specified name is found.
            Constructor Detail

            CookieTag

            public CookieTag()
            Method Detail

            getId

            public java.lang.String getId()
            Overrides:
            getId in class javax.servlet.jsp.tagext.TagSupport

            setId

            public void setId(java.lang.String id)
            Overrides:
            setId in class javax.servlet.jsp.tagext.TagSupport

            getMultiple

            public java.lang.String getMultiple()

            setMultiple

            public void setMultiple(java.lang.String multiple)

            getName

            public java.lang.String getName()

            setName

            public void setName(java.lang.String name)

            getValue

            public java.lang.String getValue()

            setValue

            public void setValue(java.lang.String value)

            doStartTag

            public int doStartTag()
                           throws javax.servlet.jsp.JspException
            Retrieve the required property and expose it as a scripting variable.
            Overrides:
            doStartTag in class javax.servlet.jsp.tagext.TagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            release

            public void release()
            Release all allocated resources.
            Overrides:
            release in class javax.servlet.jsp.tagext.TagSupport


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/bean/CookieTei.html0000644000175000017500000002400510404045240030253 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class CookieTei

            org.apache.struts.taglib.bean
            Class CookieTei

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagExtraInfo
                    |
                    +--org.apache.struts.taglib.bean.CookieTei
            

            public class CookieTei
            extends javax.servlet.jsp.tagext.TagExtraInfo

            Implementation of TagExtraInfo for the cookie tag, identifying the scripting object(s) to be made visible.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan

            Fields inherited from class javax.servlet.jsp.tagext.TagExtraInfo
            tagInfo
             
            Constructor Summary
            CookieTei()
                       
             
            Method Summary
             javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
                      Return information about the scripting variables to be created.
             
            Methods inherited from class javax.servlet.jsp.tagext.TagExtraInfo
            getTagInfo, isValid, setTagInfo
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Constructor Detail

            CookieTei

            public CookieTei()
            Method Detail

            getVariableInfo

            public javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
            Return information about the scripting variables to be created.
            Overrides:
            getVariableInfo in class javax.servlet.jsp.tagext.TagExtraInfo


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/bean/DefineTag.html0000644000175000017500000005723110404045242030237 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class DefineTag

            org.apache.struts.taglib.bean
            Class DefineTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--org.apache.struts.taglib.bean.DefineTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class DefineTag
            extends javax.servlet.jsp.tagext.TagSupport

            Define a scripting variable based on the value(s) of the specified bean property.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  java.lang.String id
                      The name of the scripting variable that will be exposed as a page scope attribute.
            protected  java.lang.String name
                      The name of the bean owning the property to be exposed.
            protected  java.lang.String property
                      The name of the property to be retrieved.
            protected  java.lang.String scope
                      The scope within which to search for the specified bean.
            protected  java.lang.String toScope
                      The scope within which the newly defined bean will be creatd.
            protected  java.lang.String type
                      The fully qualified Java class name of the value to be exposed.
            protected  java.lang.String value
                      The (String) value to which the defined bean will be set.
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            DefineTag()
                       
             
            Method Summary
             int doStartTag()
                      Retrieve the required property and expose it as a scripting variable.
             java.lang.String getId()
                       
             java.lang.String getName()
                       
             java.lang.String getProperty()
                       
             java.lang.String getScope()
                       
             java.lang.String getToScope()
                       
             java.lang.String getType()
                       
             java.lang.String getValue()
                       
             void release()
                      Release all allocated resources.
             void setId(java.lang.String id)
                       
             void setName(java.lang.String name)
                       
             void setProperty(java.lang.String property)
                       
             void setScope(java.lang.String scope)
                       
             void setToScope(java.lang.String toScope)
                       
             void setType(java.lang.String type)
                       
             void setValue(java.lang.String value)
                       
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            doAfterBody, doEndTag, findAncestorWithClass, getParent, getValue, getValues, removeValue, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            id

            protected java.lang.String id
            The name of the scripting variable that will be exposed as a page scope attribute.

            name

            protected java.lang.String name
            The name of the bean owning the property to be exposed.

            property

            protected java.lang.String property
            The name of the property to be retrieved.

            scope

            protected java.lang.String scope
            The scope within which to search for the specified bean.

            toScope

            protected java.lang.String toScope
            The scope within which the newly defined bean will be creatd.

            type

            protected java.lang.String type
            The fully qualified Java class name of the value to be exposed.

            value

            protected java.lang.String value
            The (String) value to which the defined bean will be set.
            Constructor Detail

            DefineTag

            public DefineTag()
            Method Detail

            getId

            public java.lang.String getId()
            Overrides:
            getId in class javax.servlet.jsp.tagext.TagSupport

            setId

            public void setId(java.lang.String id)
            Overrides:
            setId in class javax.servlet.jsp.tagext.TagSupport

            getName

            public java.lang.String getName()

            setName

            public void setName(java.lang.String name)

            getProperty

            public java.lang.String getProperty()

            setProperty

            public void setProperty(java.lang.String property)

            getScope

            public java.lang.String getScope()

            setScope

            public void setScope(java.lang.String scope)

            getToScope

            public java.lang.String getToScope()

            setToScope

            public void setToScope(java.lang.String toScope)

            getType

            public java.lang.String getType()

            setType

            public void setType(java.lang.String type)

            getValue

            public java.lang.String getValue()

            setValue

            public void setValue(java.lang.String value)

            doStartTag

            public int doStartTag()
                           throws javax.servlet.jsp.JspException
            Retrieve the required property and expose it as a scripting variable.
            Overrides:
            doStartTag in class javax.servlet.jsp.tagext.TagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            release

            public void release()
            Release all allocated resources.
            Overrides:
            release in class javax.servlet.jsp.tagext.TagSupport


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/bean/DefineTei.html0000644000175000017500000002400510404045222030234 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class DefineTei

            org.apache.struts.taglib.bean
            Class DefineTei

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagExtraInfo
                    |
                    +--org.apache.struts.taglib.bean.DefineTei
            

            public class DefineTei
            extends javax.servlet.jsp.tagext.TagExtraInfo

            Implementation of TagExtraInfo for the define tag, identifying the scripting object(s) to be made visible.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan

            Fields inherited from class javax.servlet.jsp.tagext.TagExtraInfo
            tagInfo
             
            Constructor Summary
            DefineTei()
                       
             
            Method Summary
             javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
                      Return information about the scripting variables to be created.
             
            Methods inherited from class javax.servlet.jsp.tagext.TagExtraInfo
            getTagInfo, isValid, setTagInfo
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Constructor Detail

            DefineTei

            public DefineTei()
            Method Detail

            getVariableInfo

            public javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
            Return information about the scripting variables to be created.
            Overrides:
            getVariableInfo in class javax.servlet.jsp.tagext.TagExtraInfo


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/bean/HeaderTag.html0000644000175000017500000004717210404045214030237 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class HeaderTag

            org.apache.struts.taglib.bean
            Class HeaderTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--org.apache.struts.taglib.bean.HeaderTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class HeaderTag
            extends javax.servlet.jsp.tagext.TagSupport

            Define a scripting variable based on the value(s) of the specified header received with this request.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  java.lang.String id
                      The name of the scripting variable that will be exposed as a page scope attribute.
            protected static MessageResources messages
                      The message resources for this package.
            protected  java.lang.String multiple
                      Return an array of header values if multiple is non-null.
            protected  java.lang.String name
                      The name of the header whose value is to be exposed.
            protected  java.lang.String value
                      The default value to return if no header of the specified name is found.
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            HeaderTag()
                       
             
            Method Summary
             int doStartTag()
                      Retrieve the required property and expose it as a scripting variable.
             java.lang.String getId()
                       
             java.lang.String getMultiple()
                       
             java.lang.String getName()
                       
             java.lang.String getValue()
                       
             void release()
                      Release all allocated resources.
             void setId(java.lang.String id)
                       
             void setMultiple(java.lang.String multiple)
                       
             void setName(java.lang.String name)
                       
             void setValue(java.lang.String value)
                       
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            doAfterBody, doEndTag, findAncestorWithClass, getParent, getValue, getValues, removeValue, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            id

            protected java.lang.String id
            The name of the scripting variable that will be exposed as a page scope attribute.

            messages

            protected static MessageResources messages
            The message resources for this package.

            multiple

            protected java.lang.String multiple
            Return an array of header values if multiple is non-null.

            name

            protected java.lang.String name
            The name of the header whose value is to be exposed.

            value

            protected java.lang.String value
            The default value to return if no header of the specified name is found.
            Constructor Detail

            HeaderTag

            public HeaderTag()
            Method Detail

            getId

            public java.lang.String getId()
            Overrides:
            getId in class javax.servlet.jsp.tagext.TagSupport

            setId

            public void setId(java.lang.String id)
            Overrides:
            setId in class javax.servlet.jsp.tagext.TagSupport

            getMultiple

            public java.lang.String getMultiple()

            setMultiple

            public void setMultiple(java.lang.String multiple)

            getName

            public java.lang.String getName()

            setName

            public void setName(java.lang.String name)

            getValue

            public java.lang.String getValue()

            setValue

            public void setValue(java.lang.String value)

            doStartTag

            public int doStartTag()
                           throws javax.servlet.jsp.JspException
            Retrieve the required property and expose it as a scripting variable.
            Overrides:
            doStartTag in class javax.servlet.jsp.tagext.TagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            release

            public void release()
            Release all allocated resources.
            Overrides:
            release in class javax.servlet.jsp.tagext.TagSupport


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/bean/HeaderTei.html0000644000175000017500000002400710404045246030242 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class HeaderTei

            org.apache.struts.taglib.bean
            Class HeaderTei

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagExtraInfo
                    |
                    +--org.apache.struts.taglib.bean.HeaderTei
            

            public class HeaderTei
            extends javax.servlet.jsp.tagext.TagExtraInfo

            Implementation of TagExtraInfo for the header tag, identifying the scripting object(s) to be made visible.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan

            Fields inherited from class javax.servlet.jsp.tagext.TagExtraInfo
            tagInfo
             
            Constructor Summary
            HeaderTei()
                       
             
            Method Summary
             javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
                      Return information about the scripting variables to be created.
             
            Methods inherited from class javax.servlet.jsp.tagext.TagExtraInfo
            getTagInfo, isValid, setTagInfo
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Constructor Detail

            HeaderTei

            public HeaderTei()
            Method Detail

            getVariableInfo

            public javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
            Return information about the scripting variables to be created.
            Overrides:
            getVariableInfo in class javax.servlet.jsp.tagext.TagExtraInfo


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/bean/IncludeTag.html0000644000175000017500000006111510404045224030424 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class IncludeTag

            org.apache.struts.taglib.bean
            Class IncludeTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--org.apache.struts.taglib.bean.IncludeTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class IncludeTag
            extends javax.servlet.jsp.tagext.TagSupport

            Define the contents of a specified intra-application request as a page scope attribute of type java.lang.String. If the current request is part of a session, the session identifier will be included in the generated request, so it will be part of the same session.

            FIXME: In a servlet 2.3 environment, we can use a wrapped response passed to RequestDispatcher.include().

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  java.lang.String anchor
                      The anchor to be added to the end of the generated hyperlink.
            protected static int BUFFER_SIZE
                      Buffer size to use when reading the input stream.
            protected  java.lang.String forward
                      The name of the global ActionForward that contains a path to our requested resource.
            protected  java.lang.String href
                      The absolute URL to the resource to be included.
            protected  java.lang.String id
                      The name of the scripting variable that will be exposed as a page scope attribute.
            protected static MessageResources messages
                      The message resources for this package.
            protected  java.lang.String page
                      The context-relative URI of the page or servlet to be included.
            protected  boolean transaction
                      Include transaction token (if any) in the hyperlink?
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            IncludeTag()
                       
             
            Method Summary
             int doStartTag()
                      Define the contents returned for the specified resource as a page scope attribute.
             java.lang.String getAnchor()
                       
             java.lang.String getForward()
                       
             java.lang.String getHref()
                       
             java.lang.String getId()
                       
             java.lang.String getPage()
                       
             boolean getTransaction()
                       
             void release()
                      Release all allocated resources.
             void setAnchor(java.lang.String anchor)
                       
             void setForward(java.lang.String forward)
                       
             void setHref(java.lang.String href)
                       
             void setId(java.lang.String id)
                       
             void setName(java.lang.String name)
                      Deprecated. use setPage(String) instead
             void setPage(java.lang.String page)
                       
             void setTransaction(boolean transaction)
                       
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            doAfterBody, doEndTag, findAncestorWithClass, getParent, getValue, getValues, removeValue, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            BUFFER_SIZE

            protected static final int BUFFER_SIZE
            Buffer size to use when reading the input stream.

            anchor

            protected java.lang.String anchor
            The anchor to be added to the end of the generated hyperlink.

            forward

            protected java.lang.String forward
            The name of the global ActionForward that contains a path to our requested resource.

            href

            protected java.lang.String href
            The absolute URL to the resource to be included.

            id

            protected java.lang.String id
            The name of the scripting variable that will be exposed as a page scope attribute.

            messages

            protected static MessageResources messages
            The message resources for this package.

            page

            protected java.lang.String page
            The context-relative URI of the page or servlet to be included.

            transaction

            protected boolean transaction
            Include transaction token (if any) in the hyperlink?
            Constructor Detail

            IncludeTag

            public IncludeTag()
            Method Detail

            getAnchor

            public java.lang.String getAnchor()

            setAnchor

            public void setAnchor(java.lang.String anchor)

            getForward

            public java.lang.String getForward()

            setForward

            public void setForward(java.lang.String forward)

            getHref

            public java.lang.String getHref()

            setHref

            public void setHref(java.lang.String href)

            getId

            public java.lang.String getId()
            Overrides:
            getId in class javax.servlet.jsp.tagext.TagSupport

            setId

            public void setId(java.lang.String id)
            Overrides:
            setId in class javax.servlet.jsp.tagext.TagSupport

            setName

            public void setName(java.lang.String name)
            Deprecated. use setPage(String) instead

            Deprecated method to set the "name" attribute, which has been replaced by the "page" attribute.

            getPage

            public java.lang.String getPage()

            setPage

            public void setPage(java.lang.String page)

            getTransaction

            public boolean getTransaction()

            setTransaction

            public void setTransaction(boolean transaction)

            doStartTag

            public int doStartTag()
                           throws javax.servlet.jsp.JspException
            Define the contents returned for the specified resource as a page scope attribute.
            Overrides:
            doStartTag in class javax.servlet.jsp.tagext.TagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP error occurs

            release

            public void release()
            Release all allocated resources.
            Overrides:
            release in class javax.servlet.jsp.tagext.TagSupport


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/bean/IncludeTei.html0000644000175000017500000002402710404045210030426 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class IncludeTei

            org.apache.struts.taglib.bean
            Class IncludeTei

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagExtraInfo
                    |
                    +--org.apache.struts.taglib.bean.IncludeTei
            

            public class IncludeTei
            extends javax.servlet.jsp.tagext.TagExtraInfo

            Implementation of TagExtraInfo for the include tag, identifying the scripting object(s) to be made visible.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan

            Fields inherited from class javax.servlet.jsp.tagext.TagExtraInfo
            tagInfo
             
            Constructor Summary
            IncludeTei()
                       
             
            Method Summary
             javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
                      Return information about the scripting variables to be created.
             
            Methods inherited from class javax.servlet.jsp.tagext.TagExtraInfo
            getTagInfo, isValid, setTagInfo
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Constructor Detail

            IncludeTei

            public IncludeTei()
            Method Detail

            getVariableInfo

            public javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
            Return information about the scripting variables to be created.
            Overrides:
            getVariableInfo in class javax.servlet.jsp.tagext.TagExtraInfo


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/bean/MessageTag.html0000644000175000017500000006403610404045222030430 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class MessageTag

            org.apache.struts.taglib.bean
            Class MessageTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--org.apache.struts.taglib.bean.MessageTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class MessageTag
            extends javax.servlet.jsp.tagext.TagSupport

            Custom tag that retrieves an internationalized messages string (with optional parametric replacement) from the ActionResources object stored as a context attribute by our associated ActionServlet implementation.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  java.lang.String arg0
                      The first optional argument.
            protected  java.lang.String arg1
                      The second optional argument.
            protected  java.lang.String arg2
                      The third optional argument.
            protected  java.lang.String arg3
                      The fourth optional argument.
            protected  java.lang.String arg4
                      The fifth optional argument.
            protected  java.lang.String bundle
                      The servlet context attribute key for our resources.
            protected static java.util.Locale defaultLocale
                      The default Locale for our server.
            protected  java.lang.String key
                      The message key of the message to be retrieved.
            protected  java.lang.String localeKey
                      The session scope key under which our Locale is stored.
            protected static MessageResources messages
                      The message resources for this package.
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            MessageTag()
                       
             
            Method Summary
             int doStartTag()
                      Process the start tag.
             java.lang.String getArg0()
                       
             java.lang.String getArg1()
                       
             java.lang.String getArg2()
                       
             java.lang.String getArg3()
                       
             java.lang.String getArg4()
                       
             java.lang.String getBundle()
                       
             java.lang.String getKey()
                       
             java.lang.String getLocale()
                       
             void release()
                      Release any acquired resources.
             void setArg0(java.lang.String arg0)
                       
             void setArg1(java.lang.String arg1)
                       
             void setArg2(java.lang.String arg2)
                       
             void setArg3(java.lang.String arg3)
                       
             void setArg4(java.lang.String arg4)
                       
             void setBundle(java.lang.String bundle)
                       
             void setKey(java.lang.String key)
                       
             void setLocale(java.lang.String localeKey)
                       
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            doAfterBody, doEndTag, findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            arg0

            protected java.lang.String arg0
            The first optional argument.

            arg1

            protected java.lang.String arg1
            The second optional argument.

            arg2

            protected java.lang.String arg2
            The third optional argument.

            arg3

            protected java.lang.String arg3
            The fourth optional argument.

            arg4

            protected java.lang.String arg4
            The fifth optional argument.

            bundle

            protected java.lang.String bundle
            The servlet context attribute key for our resources.

            defaultLocale

            protected static final java.util.Locale defaultLocale
            The default Locale for our server.

            key

            protected java.lang.String key
            The message key of the message to be retrieved.

            localeKey

            protected java.lang.String localeKey
            The session scope key under which our Locale is stored.

            messages

            protected static MessageResources messages
            The message resources for this package.
            Constructor Detail

            MessageTag

            public MessageTag()
            Method Detail

            getArg0

            public java.lang.String getArg0()

            setArg0

            public void setArg0(java.lang.String arg0)

            getArg1

            public java.lang.String getArg1()

            setArg1

            public void setArg1(java.lang.String arg1)

            getArg2

            public java.lang.String getArg2()

            setArg2

            public void setArg2(java.lang.String arg2)

            getArg3

            public java.lang.String getArg3()

            setArg3

            public void setArg3(java.lang.String arg3)

            getArg4

            public java.lang.String getArg4()

            setArg4

            public void setArg4(java.lang.String arg4)

            getBundle

            public java.lang.String getBundle()

            setBundle

            public void setBundle(java.lang.String bundle)

            getKey

            public java.lang.String getKey()

            setKey

            public void setKey(java.lang.String key)

            getLocale

            public java.lang.String getLocale()

            setLocale

            public void setLocale(java.lang.String localeKey)

            doStartTag

            public int doStartTag()
                           throws javax.servlet.jsp.JspException
            Process the start tag.
            Overrides:
            doStartTag in class javax.servlet.jsp.tagext.TagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            release

            public void release()
            Release any acquired resources.
            Overrides:
            release in class javax.servlet.jsp.tagext.TagSupport


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/bean/PageTag.html0000644000175000017500000004060110404045222027710 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class PageTag

            org.apache.struts.taglib.bean
            Class PageTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--org.apache.struts.taglib.bean.PageTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class PageTag
            extends javax.servlet.jsp.tagext.TagSupport

            Define a scripting variable that exposes the requested page context item as a scripting variable and a page scope bean.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  java.lang.String id
                      The name of the scripting variable that will be exposed as a page scope attribute.
            protected static MessageResources messages
                      The message resources for this package.
            protected  java.lang.String property
                      The name of the page context property to be retrieved.
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            PageTag()
                       
             
            Method Summary
             int doStartTag()
                      Retrieve the required configuration object and expose it as a scripting variable.
             java.lang.String getId()
                       
             java.lang.String getProperty()
                       
             void release()
                      Release all allocated resources.
             void setId(java.lang.String id)
                       
             void setProperty(java.lang.String property)
                       
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            doAfterBody, doEndTag, findAncestorWithClass, getParent, getValue, getValues, removeValue, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            id

            protected java.lang.String id
            The name of the scripting variable that will be exposed as a page scope attribute.

            messages

            protected static MessageResources messages
            The message resources for this package.

            property

            protected java.lang.String property
            The name of the page context property to be retrieved.
            Constructor Detail

            PageTag

            public PageTag()
            Method Detail

            getId

            public java.lang.String getId()
            Overrides:
            getId in class javax.servlet.jsp.tagext.TagSupport

            setId

            public void setId(java.lang.String id)
            Overrides:
            setId in class javax.servlet.jsp.tagext.TagSupport

            getProperty

            public java.lang.String getProperty()

            setProperty

            public void setProperty(java.lang.String property)

            doStartTag

            public int doStartTag()
                           throws javax.servlet.jsp.JspException
            Retrieve the required configuration object and expose it as a scripting variable.
            Overrides:
            doStartTag in class javax.servlet.jsp.tagext.TagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            release

            public void release()
            Release all allocated resources.
            Overrides:
            release in class javax.servlet.jsp.tagext.TagSupport


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/bean/PageTei.html0000644000175000017500000002375310404045242027731 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class PageTei

            org.apache.struts.taglib.bean
            Class PageTei

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagExtraInfo
                    |
                    +--org.apache.struts.taglib.bean.PageTei
            

            public class PageTei
            extends javax.servlet.jsp.tagext.TagExtraInfo

            Implementation of TagExtraInfo for the page tag, identifying the scripting object(s) to be made visible.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan

            Fields inherited from class javax.servlet.jsp.tagext.TagExtraInfo
            tagInfo
             
            Constructor Summary
            PageTei()
                       
             
            Method Summary
             javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
                      Return information about the scripting variables to be created.
             
            Methods inherited from class javax.servlet.jsp.tagext.TagExtraInfo
            getTagInfo, isValid, setTagInfo
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Constructor Detail

            PageTei

            public PageTei()
            Method Detail

            getVariableInfo

            public javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
            Return information about the scripting variables to be created.
            Overrides:
            getVariableInfo in class javax.servlet.jsp.tagext.TagExtraInfo


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/bean/ParameterTag.html0000644000175000017500000004735510404045220030767 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class ParameterTag

            org.apache.struts.taglib.bean
            Class ParameterTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--org.apache.struts.taglib.bean.ParameterTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class ParameterTag
            extends javax.servlet.jsp.tagext.TagSupport

            Define a scripting variable based on the value(s) of the specified parameter received with this request.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  java.lang.String id
                      The name of the scripting variable that will be exposed as a page scope attribute.
            protected static MessageResources messages
                      The message resources for this package.
            protected  java.lang.String multiple
                      Return an array of parameter values if multiple is non-null.
            protected  java.lang.String name
                      The name of the parameter whose value is to be exposed.
            protected  java.lang.String value
                      The default value to return if no parameter of the specified name is found.
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            ParameterTag()
                       
             
            Method Summary
             int doStartTag()
                      Retrieve the required property and expose it as a scripting variable.
             java.lang.String getId()
                       
             java.lang.String getMultiple()
                       
             java.lang.String getName()
                       
             java.lang.String getValue()
                       
             void release()
                      Release all allocated resources.
             void setId(java.lang.String id)
                       
             void setMultiple(java.lang.String multiple)
                       
             void setName(java.lang.String name)
                       
             void setValue(java.lang.String value)
                       
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            doAfterBody, doEndTag, findAncestorWithClass, getParent, getValue, getValues, removeValue, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            id

            protected java.lang.String id
            The name of the scripting variable that will be exposed as a page scope attribute.

            messages

            protected static MessageResources messages
            The message resources for this package.

            multiple

            protected java.lang.String multiple
            Return an array of parameter values if multiple is non-null.

            name

            protected java.lang.String name
            The name of the parameter whose value is to be exposed.

            value

            protected java.lang.String value
            The default value to return if no parameter of the specified name is found.
            Constructor Detail

            ParameterTag

            public ParameterTag()
            Method Detail

            getId

            public java.lang.String getId()
            Overrides:
            getId in class javax.servlet.jsp.tagext.TagSupport

            setId

            public void setId(java.lang.String id)
            Overrides:
            setId in class javax.servlet.jsp.tagext.TagSupport

            getMultiple

            public java.lang.String getMultiple()

            setMultiple

            public void setMultiple(java.lang.String multiple)

            getName

            public java.lang.String getName()

            setName

            public void setName(java.lang.String name)

            getValue

            public java.lang.String getValue()

            setValue

            public void setValue(java.lang.String value)

            doStartTag

            public int doStartTag()
                           throws javax.servlet.jsp.JspException
            Retrieve the required property and expose it as a scripting variable.
            Overrides:
            doStartTag in class javax.servlet.jsp.tagext.TagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            release

            public void release()
            Release all allocated resources.
            Overrides:
            release in class javax.servlet.jsp.tagext.TagSupport


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/bean/ParameterTei.html0000644000175000017500000002407110404045242030767 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class ParameterTei

            org.apache.struts.taglib.bean
            Class ParameterTei

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagExtraInfo
                    |
                    +--org.apache.struts.taglib.bean.ParameterTei
            

            public class ParameterTei
            extends javax.servlet.jsp.tagext.TagExtraInfo

            Implementation of TagExtraInfo for the parameter tag, identifying the scripting object(s) to be made visible.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan

            Fields inherited from class javax.servlet.jsp.tagext.TagExtraInfo
            tagInfo
             
            Constructor Summary
            ParameterTei()
                       
             
            Method Summary
             javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
                      Return information about the scripting variables to be created.
             
            Methods inherited from class javax.servlet.jsp.tagext.TagExtraInfo
            getTagInfo, isValid, setTagInfo
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Constructor Detail

            ParameterTei

            public ParameterTei()
            Method Detail

            getVariableInfo

            public javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
            Return information about the scripting variables to be created.
            Overrides:
            getVariableInfo in class javax.servlet.jsp.tagext.TagExtraInfo


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/bean/ResourceTag.html0000644000175000017500000004512510404045230030630 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class ResourceTag

            org.apache.struts.taglib.bean
            Class ResourceTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--org.apache.struts.taglib.bean.ResourceTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class ResourceTag
            extends javax.servlet.jsp.tagext.TagSupport

            Define a scripting variable based on the contents of the specified web application resource.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected static int BUFFER_SIZE
                      Buffer size to use when reading the input stream.
            protected  java.lang.String id
                      The name of the scripting variable that will be exposed as a page scope attribute.
            protected  java.lang.String input
                      Return an InputStream to the specified resource if this is non-null.
            protected static MessageResources messages
                      The message resources for this package.
            protected  java.lang.String name
                      The name of the resource whose contents are to be exposed.
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            ResourceTag()
                       
             
            Method Summary
             int doStartTag()
                      Retrieve the required property and expose it as a scripting variable.
             java.lang.String getId()
                       
             java.lang.String getInput()
                       
             java.lang.String getName()
                       
             void release()
                      Release all allocated resources.
             void setId(java.lang.String id)
                       
             void setInput(java.lang.String input)
                       
             void setName(java.lang.String name)
                       
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            doAfterBody, doEndTag, findAncestorWithClass, getParent, getValue, getValues, removeValue, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            BUFFER_SIZE

            protected static final int BUFFER_SIZE
            Buffer size to use when reading the input stream.

            id

            protected java.lang.String id
            The name of the scripting variable that will be exposed as a page scope attribute.

            input

            protected java.lang.String input
            Return an InputStream to the specified resource if this is non-null.

            messages

            protected static MessageResources messages
            The message resources for this package.

            name

            protected java.lang.String name
            The name of the resource whose contents are to be exposed.
            Constructor Detail

            ResourceTag

            public ResourceTag()
            Method Detail

            getId

            public java.lang.String getId()
            Overrides:
            getId in class javax.servlet.jsp.tagext.TagSupport

            setId

            public void setId(java.lang.String id)
            Overrides:
            setId in class javax.servlet.jsp.tagext.TagSupport

            getInput

            public java.lang.String getInput()

            setInput

            public void setInput(java.lang.String input)

            getName

            public java.lang.String getName()

            setName

            public void setName(java.lang.String name)

            doStartTag

            public int doStartTag()
                           throws javax.servlet.jsp.JspException
            Retrieve the required property and expose it as a scripting variable.
            Overrides:
            doStartTag in class javax.servlet.jsp.tagext.TagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            release

            public void release()
            Release all allocated resources.
            Overrides:
            release in class javax.servlet.jsp.tagext.TagSupport


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/bean/ResourceTei.html0000644000175000017500000002404110404045212030630 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class ResourceTei

            org.apache.struts.taglib.bean
            Class ResourceTei

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagExtraInfo
                    |
                    +--org.apache.struts.taglib.bean.ResourceTei
            

            public class ResourceTei
            extends javax.servlet.jsp.tagext.TagExtraInfo

            Implementation of TagExtraInfo for the resource tag, identifying the scripting object(s) to be made visible.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan

            Fields inherited from class javax.servlet.jsp.tagext.TagExtraInfo
            tagInfo
             
            Constructor Summary
            ResourceTei()
                       
             
            Method Summary
             javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
                      Return information about the scripting variables to be created.
             
            Methods inherited from class javax.servlet.jsp.tagext.TagExtraInfo
            getTagInfo, isValid, setTagInfo
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Constructor Detail

            ResourceTei

            public ResourceTei()
            Method Detail

            getVariableInfo

            public javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
            Return information about the scripting variables to be created.
            Overrides:
            getVariableInfo in class javax.servlet.jsp.tagext.TagExtraInfo


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/bean/SizeTag.html0000644000175000017500000005221510404045232027753 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class SizeTag

            org.apache.struts.taglib.bean
            Class SizeTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--org.apache.struts.taglib.bean.SizeTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class SizeTag
            extends javax.servlet.jsp.tagext.TagSupport

            Define a scripting variable that will contain the number of elements found in a specified array, Collection, or Map.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  java.lang.Object collection
                      The actual collection to be counted.
            protected  java.lang.String id
                      The name of the scripting variable that will be exposed as a page scope attribute.
            protected static MessageResources messages
                      The message resources for this package.
            protected  java.lang.String name
                      The name of the bean owning the property to be counted.
            protected  java.lang.String property
                      The name of the property to be retrieved.
            protected  java.lang.String scope
                      The scope within which to search for the specified bean.
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            SizeTag()
                       
             
            Method Summary
             int doStartTag()
                      Retrieve the required property and expose it as a scripting variable.
             java.lang.Object getCollection()
                       
             java.lang.String getId()
                       
             java.lang.String getName()
                       
             java.lang.String getProperty()
                       
             java.lang.String getScope()
                       
             void release()
                      Release all allocated resources.
             void setCollection(java.lang.Object collection)
                       
             void setId(java.lang.String id)
                       
             void setName(java.lang.String name)
                       
             void setProperty(java.lang.String property)
                       
             void setScope(java.lang.String scope)
                       
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            doAfterBody, doEndTag, findAncestorWithClass, getParent, getValue, getValues, removeValue, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            collection

            protected java.lang.Object collection
            The actual collection to be counted.

            id

            protected java.lang.String id
            The name of the scripting variable that will be exposed as a page scope attribute.

            messages

            protected static MessageResources messages
            The message resources for this package.

            name

            protected java.lang.String name
            The name of the bean owning the property to be counted.

            property

            protected java.lang.String property
            The name of the property to be retrieved.

            scope

            protected java.lang.String scope
            The scope within which to search for the specified bean.
            Constructor Detail

            SizeTag

            public SizeTag()
            Method Detail

            getCollection

            public java.lang.Object getCollection()

            setCollection

            public void setCollection(java.lang.Object collection)

            getId

            public java.lang.String getId()
            Overrides:
            getId in class javax.servlet.jsp.tagext.TagSupport

            setId

            public void setId(java.lang.String id)
            Overrides:
            setId in class javax.servlet.jsp.tagext.TagSupport

            getName

            public java.lang.String getName()

            setName

            public void setName(java.lang.String name)

            getProperty

            public java.lang.String getProperty()

            setProperty

            public void setProperty(java.lang.String property)

            getScope

            public java.lang.String getScope()

            setScope

            public void setScope(java.lang.String scope)

            doStartTag

            public int doStartTag()
                           throws javax.servlet.jsp.JspException
            Retrieve the required property and expose it as a scripting variable.
            Overrides:
            doStartTag in class javax.servlet.jsp.tagext.TagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            release

            public void release()
            Release all allocated resources.
            Overrides:
            release in class javax.servlet.jsp.tagext.TagSupport


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/bean/SizeTei.html0000644000175000017500000002374510404045204027766 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class SizeTei

            org.apache.struts.taglib.bean
            Class SizeTei

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagExtraInfo
                    |
                    +--org.apache.struts.taglib.bean.SizeTei
            

            public class SizeTei
            extends javax.servlet.jsp.tagext.TagExtraInfo

            Implementation of TagExtraInfo for the size tag, identifying the scripting object(s) to be made visible.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan

            Fields inherited from class javax.servlet.jsp.tagext.TagExtraInfo
            tagInfo
             
            Constructor Summary
            SizeTei()
                       
             
            Method Summary
             javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
                      Return information about the scripting variables to be created.
             
            Methods inherited from class javax.servlet.jsp.tagext.TagExtraInfo
            getTagInfo, isValid, setTagInfo
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Constructor Detail

            SizeTei

            public SizeTei()
            Method Detail

            getVariableInfo

            public javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
            Return information about the scripting variables to be created.
            Overrides:
            getVariableInfo in class javax.servlet.jsp.tagext.TagExtraInfo


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/bean/StrutsTag.html0000644000175000017500000004733310404045214030352 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class StrutsTag

            org.apache.struts.taglib.bean
            Class StrutsTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--org.apache.struts.taglib.bean.StrutsTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class StrutsTag
            extends javax.servlet.jsp.tagext.TagSupport

            Define a scripting variable that exposes the requested Struts internal configuraton object.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  java.lang.String formBean
                      The name of the ActionFormBean object to be exposed.
            protected  java.lang.String forward
                      The name of the ActionForward object to be exposed.
            protected  java.lang.String id
                      The name of the scripting variable that will be exposed as a page scope attribute.
            protected  java.lang.String mapping
                      The name of the ActionMapping object to be exposed.
            protected static MessageResources messages
                      The message resources for this package.
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            StrutsTag()
                       
             
            Method Summary
             int doStartTag()
                      Retrieve the required configuration object and expose it as a scripting variable.
             java.lang.String getFormBean()
                       
             java.lang.String getForward()
                       
             java.lang.String getId()
                       
             java.lang.String getMapping()
                       
             void release()
                      Release all allocated resources.
             void setFormBean(java.lang.String formBean)
                       
             void setForward(java.lang.String forward)
                       
             void setId(java.lang.String id)
                       
             void setMapping(java.lang.String mapping)
                       
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            doAfterBody, doEndTag, findAncestorWithClass, getParent, getValue, getValues, removeValue, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            id

            protected java.lang.String id
            The name of the scripting variable that will be exposed as a page scope attribute.

            messages

            protected static MessageResources messages
            The message resources for this package.

            formBean

            protected java.lang.String formBean
            The name of the ActionFormBean object to be exposed.

            forward

            protected java.lang.String forward
            The name of the ActionForward object to be exposed.

            mapping

            protected java.lang.String mapping
            The name of the ActionMapping object to be exposed.
            Constructor Detail

            StrutsTag

            public StrutsTag()
            Method Detail

            getId

            public java.lang.String getId()
            Overrides:
            getId in class javax.servlet.jsp.tagext.TagSupport

            setId

            public void setId(java.lang.String id)
            Overrides:
            setId in class javax.servlet.jsp.tagext.TagSupport

            getFormBean

            public java.lang.String getFormBean()

            setFormBean

            public void setFormBean(java.lang.String formBean)

            getForward

            public java.lang.String getForward()

            setForward

            public void setForward(java.lang.String forward)

            getMapping

            public java.lang.String getMapping()

            setMapping

            public void setMapping(java.lang.String mapping)

            doStartTag

            public int doStartTag()
                           throws javax.servlet.jsp.JspException
            Retrieve the required configuration object and expose it as a scripting variable.
            Overrides:
            doStartTag in class javax.servlet.jsp.tagext.TagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            release

            public void release()
            Release all allocated resources.
            Overrides:
            release in class javax.servlet.jsp.tagext.TagSupport


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/bean/StrutsTei.html0000644000175000017500000002400310404045246030352 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class StrutsTei

            org.apache.struts.taglib.bean
            Class StrutsTei

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagExtraInfo
                    |
                    +--org.apache.struts.taglib.bean.StrutsTei
            

            public class StrutsTei
            extends javax.servlet.jsp.tagext.TagExtraInfo

            Implementation of TagExtraInfo for the struts tag, identifying the scripting object(s) to be made visible.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan

            Fields inherited from class javax.servlet.jsp.tagext.TagExtraInfo
            tagInfo
             
            Constructor Summary
            StrutsTei()
                       
             
            Method Summary
             javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
                      Return information about the scripting variables to be created.
             
            Methods inherited from class javax.servlet.jsp.tagext.TagExtraInfo
            getTagInfo, isValid, setTagInfo
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Constructor Detail

            StrutsTei

            public StrutsTei()
            Method Detail

            getVariableInfo

            public javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
            Return information about the scripting variables to be created.
            Overrides:
            getVariableInfo in class javax.servlet.jsp.tagext.TagExtraInfo


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/bean/WriteTag.html0000644000175000017500000004777510404045204030151 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class WriteTag

            org.apache.struts.taglib.bean
            Class WriteTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--org.apache.struts.taglib.bean.WriteTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class WriteTag
            extends javax.servlet.jsp.tagext.TagSupport

            Tag that retrieves the specified property of the specified bean, converts it to a String representation (if necessary), and writes it to the current output stream, optionally filtering characters that are sensitive in HTML.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  boolean filter
                      Filter the rendered output for characters that are sensitive in HTML?
            protected  boolean ignore
                      Should we ignore missing beans and simply output nothing?
            protected  java.lang.String name
                      Name of the bean that contains the data we will be rendering.
            protected  java.lang.String property
                      Name of the property to be accessed on the specified bean.
            protected  java.lang.String scope
                      The scope to be searched to retrieve the specified bean.
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            WriteTag()
                       
             
            Method Summary
             int doStartTag()
                      Process the start tag.
             boolean getFilter()
                       
             boolean getIgnore()
                       
             java.lang.String getName()
                       
             java.lang.String getProperty()
                       
             java.lang.String getScope()
                       
             void release()
                      Release all allocated resources.
             void setFilter(boolean filter)
                       
             void setIgnore(boolean ignore)
                       
             void setName(java.lang.String name)
                       
             void setProperty(java.lang.String property)
                       
             void setScope(java.lang.String scope)
                       
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            doAfterBody, doEndTag, findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            filter

            protected boolean filter
            Filter the rendered output for characters that are sensitive in HTML?

            ignore

            protected boolean ignore
            Should we ignore missing beans and simply output nothing?

            name

            protected java.lang.String name
            Name of the bean that contains the data we will be rendering.

            property

            protected java.lang.String property
            Name of the property to be accessed on the specified bean.

            scope

            protected java.lang.String scope
            The scope to be searched to retrieve the specified bean.
            Constructor Detail

            WriteTag

            public WriteTag()
            Method Detail

            getFilter

            public boolean getFilter()

            setFilter

            public void setFilter(boolean filter)

            getIgnore

            public boolean getIgnore()

            setIgnore

            public void setIgnore(boolean ignore)

            getName

            public java.lang.String getName()

            setName

            public void setName(java.lang.String name)

            getProperty

            public java.lang.String getProperty()

            setProperty

            public void setProperty(java.lang.String property)

            getScope

            public java.lang.String getScope()

            setScope

            public void setScope(java.lang.String scope)

            doStartTag

            public int doStartTag()
                           throws javax.servlet.jsp.JspException
            Process the start tag.
            Overrides:
            doStartTag in class javax.servlet.jsp.tagext.TagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            release

            public void release()
            Release all allocated resources.
            Overrides:
            release in class javax.servlet.jsp.tagext.TagSupport


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/bean/package-frame.html0000644000175000017500000000411110404045234031062 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Package org.apache.struts.taglib.bean org.apache.struts.taglib.bean
            Classes 
            CookieTag
            CookieTei
            DefineTag
            DefineTei
            HeaderTag
            HeaderTei
            IncludeTag
            IncludeTei
            MessageTag
            PageTag
            PageTei
            ParameterTag
            ParameterTei
            ResourceTag
            ResourceTei
            SizeTag
            SizeTei
            StrutsTag
            StrutsTei
            WriteTag
            libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/bean/package-summary.html0000644000175000017500000007735410404045230031504 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Package org.apache.struts.taglib.bean

            Package org.apache.struts.taglib.bean

            The "struts-bean" tag library contains JSP custom tags useful in defining new beans (in any desired scope) from a variety of possible sources, as well as a tag to render a particular bean (or bean property) to the output response.

            See:
                      Description

            Class Summary
            CookieTag Define a scripting variable based on the value(s) of the specified cookie received with this request.
            CookieTei Implementation of TagExtraInfo for the cookie tag, identifying the scripting object(s) to be made visible.
            DefineTag Define a scripting variable based on the value(s) of the specified bean property.
            DefineTei Implementation of TagExtraInfo for the define tag, identifying the scripting object(s) to be made visible.
            HeaderTag Define a scripting variable based on the value(s) of the specified header received with this request.
            HeaderTei Implementation of TagExtraInfo for the header tag, identifying the scripting object(s) to be made visible.
            IncludeTag Define the contents of a specified intra-application request as a page scope attribute of type java.lang.String.
            IncludeTei Implementation of TagExtraInfo for the include tag, identifying the scripting object(s) to be made visible.
            MessageTag Custom tag that retrieves an internationalized messages string (with optional parametric replacement) from the ActionResources object stored as a context attribute by our associated ActionServlet implementation.
            PageTag Define a scripting variable that exposes the requested page context item as a scripting variable and a page scope bean.
            PageTei Implementation of TagExtraInfo for the page tag, identifying the scripting object(s) to be made visible.
            ParameterTag Define a scripting variable based on the value(s) of the specified parameter received with this request.
            ParameterTei Implementation of TagExtraInfo for the parameter tag, identifying the scripting object(s) to be made visible.
            ResourceTag Define a scripting variable based on the contents of the specified web application resource.
            ResourceTei Implementation of TagExtraInfo for the resource tag, identifying the scripting object(s) to be made visible.
            SizeTag Define a scripting variable that will contain the number of elements found in a specified array, Collection, or Map.
            SizeTei Implementation of TagExtraInfo for the size tag, identifying the scripting object(s) to be made visible.
            StrutsTag Define a scripting variable that exposes the requested Struts internal configuraton object.
            StrutsTei Implementation of TagExtraInfo for the struts tag, identifying the scripting object(s) to be made visible.
            WriteTag Tag that retrieves the specified property of the specified bean, converts it to a String representation (if necessary), and writes it to the current output stream, optionally filtering characters that are sensitive in HTML.
             

            Package org.apache.struts.taglib.bean Description

            The "struts-bean" tag library contains JSP custom tags useful in defining new beans (in any desired scope) from a variety of possible sources, as well as a tag to render a particular bean (or bean property) to the output response.


            Introduction

            Much of the power of JavaServer Pages (JSP) technology comes from the simple and powerful mechanisms by which the servlet that is generated automatically from your JSP source page can interact with JavaBeans that represent the computational state of your application. In standard JSP pages, the <jsp:useBean> tag is used create a bean (if necessary), as well as a "scripting variable" that can be used within scriptlets to refer to these beans.

            The "struts-bean" tag library provides substantial enhancements to the basic capability provided by <jsp:useBean>, as discussed in the following sections:

            • Bean Properties - Extended syntax to refer to JavaBean properties with simple names (same as the standard JSP tags <jsp:getProperty> and <jsp:setProperty>), nested names (a property named address.city returns the value retrieved by the Java expression getAddress().getCity()), and indexed names (a property named address[3] retrieves the fourth address from the indexed "address" property of a bean).
            • Bean Creation - New JSP beans, in any scope, can be created from a variety of objects and APIs associated with the current request, or with the servlet container in which this page is running.
            • Bean Output - Supports the rendering of textual output from a bean (or bean property), which will be included in the response being created by your JSP page.

            See the Bean Tags Reference for detailed information about the available tags in this tag library, and the valid attributes for each tag.

            Bean Properties

            Common Tag Attributes

            The tags in the "struts-bean" tag library (and, generally, in all tag libraries included with the Struts framework) share a common set of tag attributes that have the same meaning, no matter what tag they are used on. These common attributes include:

            • id - Names the scripting variable that will be created by this custom tag, as well as the key value used to locate this bean in the scope defined by the scope attribute.
            • name - Defines the key value by which an existing bean will be looked up in the scope defined by the scope attribute (if any), or by searching through the various scopes in the standard order (page, request, session, application).
            • property - Defines the name of a JavaBeans property, of the JSP bean identified by the name and (optional) scope attributes, whose value is to be used by this custom tag. If not specified, the bean identified by name is itself used as the value of interest. See below for more discussion about how a property can be referenced.
            • scope - Identifies the JSP scope ("page", "request", "session", or "application" within which a particular bean will be searched for (under the key specified by the name attribute) or created (under the key specified by the id attribute). If not specified, beans will generally be searched for in the order listed above, or created in page scope.
            Property References

            Struts tags that support the property tag generally also recognize a rich syntax for getting and setting properties. There are three types of references supported: simple, nested, and indexed.

            Simple References - These are equivalent to the syntax you use with the standard <jsp:getProperty> and <jsp:setProperty> tags. A reference to a property named "foo" is converted into a method call to getFoo() or setFoo(value) (as appropriate), using the standard JavaBeans Specification naming conventions for bean properties. Struts uses the standard Java introspection APIs to identify the names of the actual property getter and setter methods, so your beans can provided customized method names through the use of a BeanInfo class. See the JavaBeans Specification, available at http://java.sun.com/products/javabeans/, for more information.

            Nested References - Nested references are used to access a property through a hierarchy of property names separated by periods ("."), similar to the way that nested properties are accessed in JavaScript. For example, the following property reference in a getter (such as the <bean:define> tag discussed below):

                property="foo.bar.baz"
            

            is translated into the equivalent the Java expression:

                getFoo().getBar().getBaz()
            

            If a nested reference is used in a setter (such as when an input form is processed), the property setter is called on the last property in the chain. For the above property reference, the equivalent Java expression would be:

                getFoo().getBar().setBaz(value)
            

            Indexed References - Subscripts can be used to access individual elements of properties whose value is actually an array, or whose underlying JavaBean offers indexed getter and setter methods. For example, the following property reference in a getter (such as the <bean:define> tag discussed below):

                property="foo[2]"
            

            is translated into the equivalent of the Java expression:

                getFoo(2);
            

            while the same property reference in a setter would call the equivalent of:

                setFoo(2, value)
            

            As you can see from the above translations, the subscripts used in indexed references are zero relative (that is, the first element in an array is foo[0]), just as is true in the Java language.

            Combined References - Nesting and indexing can be combined in arbitrary ways, so that expressions like foo.bar[0].baz[2] are legal. You must be careful, of course, to ensure that the actual beans being accessed by these references have properties of the appropriate names and types. Otherwise, JSP runtime exceptions will be thrown.

            See the JavaDocs for PropertyUtils for more detailed information about the mechanisms that Struts uses to access properties in a general way, through Java reflection APIs.


            Bean Creation

            Introduction

            New beans can be created, and introduced into one of the four standard JSP scopes (page, request, session, and application) through a variety of techniques. The following subsections describe the use of the following approaches:

            • Java Code in Action Classes
            • Java Code in Scriptlets
            • The Standard <jsp:useBean> Tag
            • The Struts <bean:define> Tag
            • Other Struts Copying Tags
            Java Code in Action Classes

            Because the JSP pages are compiled into Servlets, your Action classes that are invoked by the Struts controller servlet have convenient access to three of the four standard JSP scopes (request, session, and application). It is very common practice for the business logic contained in your Action class to create results that are stored in request or session scope, which will be used by a JSP page you forward control to in rendering the next page of the user interface.

            Request Scope - To store a bean in request scope under name "cust", your Action class would execute code similar to this:

                Customer customer = ... create or acquire a customer reference ...;
                request.setAttribute("cust", customer);
            

            Session Scope - To store a bean in session scope under name "user" (perhaps in a logon action), your Action class would execute code similar to this:

                User user = ... look up valid user in the database ...;
                HttpSession session = request.getSession();
                session.setAttribute("user", user);
            

            Application Scope - Generally, application scope beans are initialized in the init() method of a startup servlet. However, it is legal for an Action class to create such beans, if this is appropriate, like this:

                Foo foo = ... create a Foo ...;
                servlet.getServletContext().setAttribute("foo", foo);
            
            Java Code in Scriptlets

            While it is not a recommended practice in Struts-based applications (because developers will be tempted to mix business logic and presentation logic in their JSP pages), it is legal for scriptlet code in a JSP page to create new JavaBeans dynamically, and add them to any of the four possible scopes, as demonstrated in the code examples below:

            Page Scope - To store a bean in page scope under name "foo", your scriptlet must execute code like this:

            <%
                Foo foo = ... create a foo ...;
                pageContext.setAttribute("foo", foo, PageContext.PAGE_SCOPE);
            %>
            

            Request Scope - To store a bean in request scope under name "cust", your scriplet must execute code like this:

            <%
                Customer customer = ... create or acquire a customer reference ...;
                pageContext.setAttribute("cust", customer, PageContext.REQUEST_SCOPE);
            %>
            

            Session Scope - To store a bean in session scope under name "user", (perhaps as a result of a validated login), your scriplet must execute code like this:

            <%
                User user = ... look up valid user in the database ...;
                pageContext.setAttribute("user", user, PageContext.SESSION_SCOPE);
            %>
            

            Application Scope - Generally, application scope beans are initialized in the init() method of a startup servlet. However, a scriptlet can create such beans, if appropriate, like this:

            <%
                Foo foo = ... create a Foo ...;
                pageContext.setAttribute("foo", foo, PageContext.APPLICATION_SCOPE);
            %>
            

            NOTE - As mentioned above, using scriptlets in your JSP pages is strongly discouraged in a Struts based application, unless you are executing code that is only related to presentation of existing data. In general, your application's processing logic should be encapsulated in Action classes (or in beans or EJBs called by those classes), rather than being intermixed in your JSP pages.

            The Standard <jsp:useBean> Tag

            JavaServer Pages (JSP) offers a standard tag, <jsp:useBean> that can be used to create a new bean, or introduce a reference to an existing bean, into a JSP page. Beans (or bean references) introduced through this mechanism are completely interoperable with beans created by any of the Struts creation techniques described in this section.

            You must use <jsp:useBean> to introduce a reference to an existing bean, if you wish to reference that bean with other standard JSP tags (such as <jsp:getProperty> or <jsp:setProperty>). If you only wish to reference such beans with other Struts tags, use of <jsp:useBean> is not required.

            For more information about the <jsp:useBean> tag, see the JavaServer Pages Specification, available at http://java.sun.com/products/jsp/download.html.

            The Struts <bean:define> Tag

            Struts provides a powerful, general purpose, tag (<bean:define>) that can be used to create a new bean, in any scope, by copying another bean (or the value of the property of another bean). This tag supports the "property" attribute, and therefore all the power of property references, as discused above. It can be used in a variety of different ways, described further below. Unless you specify the "toScope" attribute, all defined beans will be created in page scope.

            Introduce A String Constant - You can create a new bean that has a constant String value (or the result of calculating a runtime expression):

                <bean:define id="foo" value="This is a new String"/>
                <bean:define id="bar" value='<%= "Hello, " + user.getName() %>'/>
                <bean:define id="last" scope="session"
                             value='<%= request.getRequestURI() %>'/>
            

            Copy An Existing Bean - You can create a new reference to an existing bean object. You can specify the Java class or interface the new bean is expected to conform to with the "type" attribute, or accept the default type of java.lang.Object (this only affects the scripting variable that is exposed to scriptlets, so it is not generally meaningful in Struts-based applications).

                <bean:define id="foo" name="bar"/>
                <bean:define id="baz" name="bop" type="com.mycompany.MyBopClass"/>
            

            Copy An Existing Bean Property - You can create a new bean that is initialized to the value returned by a property getter. The value of the "property" attribute can be any simple, nested, or indexed property reference that follows the rules described earlier. In the first example below, we also illustrate accessing the property of a request scope bean, and creating the new bean in session scope (rather than the default page scope).

                <bean:define id="foo" name="bar" property="baz" scope="request"
                 toScope="session"/>
                <bean:define id="bop" name="user" property="role[3].name"/>
            
            Other Struts Copying Tags

            Struts offers a variety of bean creation tags that copy existing beans (or bean properties) from the environment within which this page is running, and the request that is currently being processed. Not all of the attributes for each tag are illustrated in the examples below - see the Bean Tags Reference for more information. Any bean created by these tags exists only in page scope, for the remainder of the current page.

            Copy A Cookie - You can create a new bean containing a javax.servlet.http.Cookie that was included in the current request. If no cookie of the specified name was included, a request time expression will be thrown - therefore, it is common to nest the use of this tag inside a <logic:present cookie="xxx"> tag to ensure that the cookie was really included. If there is the possibility that more than one cookie of the same name was included, specify the "multiple" attribute (and the resulting bean will be an array of Cookies, instead of a single Cookie).

                <bean:cookie id="foo" name="cookiename"/>
                <bean:cookie id="all" name="JSESSIONID" multiple="true"/>
            

            Copy A Request Header - You can create a new bean containing the value of an HTTP header included in this request. If no header of the specified name was included, a request time exception will be thrown - therefore, it is common to nest the use of this tag inside a <logic:present header="xxx"> tag to ensure that the header was really included. If there is the possibility that more than one header of the same name was included, specify the "multiple" attribute (and the resulting value bean will be an array of String values, instead of a single String).

                <bean:header id="agent" name="User-Agent"/>
                <bean:header id="languages" name="Accept-Language" multiple="true"/>
            

            Copy A Dynamically Created Response - You can generate an internal request to the application you are running, and turn the response data that is returned from that request into a bean (of type String). One possible use for this technique is to acquire dynamically created XML formatted data that will be stored in a bean and later manipulated (such as by applying an XSLT stylesheet). If the current request is part of a session, the generated request for the include will also include the session identifier (and thus be considered part of the same session).

                <bean:include id="text" name="/generateXml?param1=a¶m2=b"/>
            

            Copy A JSP Implicitly Defined Object - You can create a bean that is one of the JSP implicitly defined objects (see the JSP spec for more details). This is useful if you wish to perform property getter actions against the implicit object with a custom tag instead of a scriptlet.

                <bean:page id="app" property="application"/>
                <bean:page id="sess" property="session"/>
            

            Copy A Request Parameter - You can create a new bean containing the value of a parameter included in this request. If no parameter of the specified name was included, a request time exception will be thrown - therefore, it is common to nest the use of this tag inside a <logic:present parameter="xxx"> tag to ensure that the parameter was really included. If there is the possibility that more than one parameter of the same name was included, specify the "multiple" attribute (and the resulting value bean will be an array of String values, instead of a single String).

                <bean:parameter id="name" name="name"/>
                <bean:header id="options" name="option" multiple="true"/>
            

            Copy a Web Application Resource - You can create a new bean containing either the value of a web application resource as a String, or a java.io.InputStream for reading the content of that resource. The resource is accessed with a context-relative path (beginning with "/"), using the ServletContext.getResource() or ServletContext.getResourceAsStream() methods on the underlying application object.

                <bean:resource id="deployment" name="/WEB-INF/web.xml"/>
                <bean:resource id="stream" name="/WEB-INF/web.xml"
                               input="true"/>
            

            Copy A Struts Configuration Object - You can create a new bean containing one of the standard Struts framework configuration objects. Doing this gives you access to the properties of the configuration object, if needed.

                <bean:struts id="form" formBean="CustomerForm"/>
                <bean:struts id="fwd" forward="success"/>
                <bean:struts id="map" mapping="/saveCustomer"/>
            

            Bean Output

            None of the Struts Bean tags discussed so far render any output to the response page that is being generated from this JSP page. They are executed in order to make relevant Java objects visible as beans for further manipulation. The following tags cause output to be written to the response, and therefore made visible to the ultimate requester.

            Render An Internationalized Message - You can specify a message key (with optional parameter replacement objects) that are passed to a MessageResources object that returns the corresponding message text. The message text will be copied to the response currently being created. By default, messages are looked up in the application resources bundle that is initialized for you (as an application scope bean) by the Struts controller servlet, using the Locale must recently stored in the user's session. These defaults can be overridden by setting values for the "bundle" and "locale" attributes, as described in the Bean Tags Reference.

                <bean:message key="label.Cancel"/>
                <bean:message key="message.hello" arg0='<%= user.getFullName() %>'/>
            

            Render A Bean or Bean Property - The contents of a bean, or bean property, are converted to a String and then copied to the response currently being created. This tag understands the syntax for simple, nested, and indexed property references described above. Beans from any scope can be requested - by default, the scopes are searched in expanding visibility order (page, request, session, and application) to locate the requested bean.

                <bean:write name="username"/>
                <bean:write name="user" property="fullName"/>
                <bean:write name="customer" property="orders[2].partNumber"
                            scope="session"/>
            



            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/bean/package-tree.html0000644000175000017500000001726710404045216030747 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: org.apache.struts.taglib.bean Class Hierarchy

            Hierarchy For Package org.apache.struts.taglib.bean

            Package Hierarchies:
            All Packages

            Class Hierarchy

            • class java.lang.Object
              • class javax.servlet.jsp.tagext.TagExtraInfo
              • class javax.servlet.jsp.tagext.TagSupport (implements javax.servlet.jsp.tagext.IterationTag, java.io.Serializable)


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/html/0000755000175000017500000000000010423130300025541 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/html/BaseFieldTag.html0000644000175000017500000010007510404045216030716 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class BaseFieldTag

            org.apache.struts.taglib.html
            Class BaseFieldTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--javax.servlet.jsp.tagext.BodyTagSupport
                          |
                          +--org.apache.struts.taglib.html.BaseHandlerTag
                                |
                                +--org.apache.struts.taglib.html.BaseInputTag
                                      |
                                      +--org.apache.struts.taglib.html.BaseFieldTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.BodyTag, javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag
            Direct Known Subclasses:
            FileTag, HiddenTag, PasswordTag, TextTag

            public abstract class BaseFieldTag
            extends BaseInputTag

            Convenience base class for the various input tags for text fields.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  java.lang.String accept
                      Comma-delimited list of content types that a server processing this form will handle correctly.
            protected  java.lang.String name
                      The name of the bean containing our underlying property.
            protected  boolean redisplay
                      The "redisplay contents" flag (used only on password).
            protected  java.lang.String type
                      The type of input field represented by this tag (text, password, or hidden).
             
            Fields inherited from class org.apache.struts.taglib.html.BaseInputTag
            cols, maxlength, messages, property, rows, value
             
            Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
            accesskey, disabled, onblur, onchange, onclick, ondblclick, onfocus, onkeydown, onkeypress, onkeyup, onmousedown, onmousemove, onmouseout, onmouseover, onmouseup, onselect, readonly, style, styleClass, styleId, tabindex, title
             
            Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            bodyContent
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
            EVAL_BODY_BUFFERED, EVAL_BODY_TAG
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            BaseFieldTag()
                       
             
            Method Summary
             int doStartTag()
                      Generate the required input tag.
             java.lang.String getAccept()
                       
             java.lang.String getName()
                       
             boolean getRedisplay()
                       
             void release()
                      Release any acquired resources.
             void setAccept(java.lang.String accept)
                       
             void setName(java.lang.String name)
                       
             void setRedisplay(boolean redisplay)
                       
             
            Methods inherited from class org.apache.struts.taglib.html.BaseInputTag
            doEndTag, getCols, getMaxlength, getProperty, getRows, getSize, getValue, setCols, setMaxlength, setProperty, setRows, setSize, setValue
             
            Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
            getAccesskey, getDisabled, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, prepareEventHandlers, prepareFocusEvents, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setDisabled, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle
             
            Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            doAfterBody, doInitBody, getBodyContent, getPreviousOut, setBodyContent
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             
            Methods inherited from interface javax.servlet.jsp.tagext.Tag
            getParent, setPageContext, setParent
             

            Field Detail

            accept

            protected java.lang.String accept
            Comma-delimited list of content types that a server processing this form will handle correctly. This property is defined only for the file tag, but is implemented here because it affects the rendered HTML of the corresponding <input> tag.

            name

            protected java.lang.String name
            The name of the bean containing our underlying property.

            redisplay

            protected boolean redisplay
            The "redisplay contents" flag (used only on password).

            type

            protected java.lang.String type
            The type of input field represented by this tag (text, password, or hidden).
            Constructor Detail

            BaseFieldTag

            public BaseFieldTag()
            Method Detail

            getAccept

            public java.lang.String getAccept()

            setAccept

            public void setAccept(java.lang.String accept)

            getName

            public java.lang.String getName()

            setName

            public void setName(java.lang.String name)

            getRedisplay

            public boolean getRedisplay()

            setRedisplay

            public void setRedisplay(boolean redisplay)

            doStartTag

            public int doStartTag()
                           throws javax.servlet.jsp.JspException
            Generate the required input tag.
            Overrides:
            doStartTag in class BaseInputTag
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            release

            public void release()
            Release any acquired resources.
            Overrides:
            release in class BaseInputTag


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/html/BaseHandlerTag.html0000644000175000017500000016467210404045240031262 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class BaseHandlerTag

            org.apache.struts.taglib.html
            Class BaseHandlerTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--javax.servlet.jsp.tagext.BodyTagSupport
                          |
                          +--org.apache.struts.taglib.html.BaseHandlerTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.BodyTag, javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag
            Direct Known Subclasses:
            BaseInputTag, ButtonTag, CancelTag, CheckboxTag, ImgTag, LinkTag, MultiboxTag, RadioTag, ResetTag, SelectTag, SubmitTag

            public abstract class BaseHandlerTag
            extends javax.servlet.jsp.tagext.BodyTagSupport

            Base class for tags that render form elements capable of including JavaScript event handlers and/or CSS Style attributes. This class does not implement the doStartTag() or doEndTag() methods. Subclasses should provide appropriate implementations of these.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Don Clasen
            See Also:
            Serialized Form

            Field Summary
            protected  java.lang.String accesskey
                      Access key character.
            private  boolean disabled
                      Component is disabled.
            protected static MessageResources messages
                      The message resources for this package.
            private  java.lang.String onblur
                      Component lost focus event.
            private  java.lang.String onchange
                      Content changed after component lost focus event.
            private  java.lang.String onclick
                      Mouse click event.
            private  java.lang.String ondblclick
                      Mouse double click event.
            private  java.lang.String onfocus
                      Component has received focus event.
            private  java.lang.String onkeydown
                      Key down in component event.
            private  java.lang.String onkeypress
                      Key down and up together in component event.
            private  java.lang.String onkeyup
                      Key released in component event.
            private  java.lang.String onmousedown
                      Mouse pressed on component event.
            private  java.lang.String onmousemove
                      Mouse moved over component event.
            private  java.lang.String onmouseout
                      Mouse exit component event.
            private  java.lang.String onmouseover
                      Mouse over component event.
            private  java.lang.String onmouseup
                      Mouse released on component event.
            private  java.lang.String onselect
                      Text selected in component event.
            private  boolean readonly
                      Component is readonly.
            private  java.lang.String style
                      Style attribute associated with component.
            private  java.lang.String styleClass
                      Named Style class associated with component.
            private  java.lang.String styleId
                      Identifier associated with component.
            protected  java.lang.String tabindex
                      Tab index value.
            private  java.lang.String title
                      The advisory title of this element.
             
            Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            bodyContent
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
            EVAL_BODY_BUFFERED, EVAL_BODY_TAG
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            BaseHandlerTag()
                       
             
            Method Summary
             java.lang.String getAccesskey()
                      Returns the accessKey character.
             boolean getDisabled()
                      Returns the disabled event handler.
             java.lang.String getOnblur()
                      Returns the onBlur event handler.
             java.lang.String getOnchange()
                      Returns the onChange event handler.
             java.lang.String getOnclick()
                      Returns the onClick event handler.
             java.lang.String getOndblclick()
                      Returns the onDblClick event handler.
             java.lang.String getOnfocus()
                      Returns the onFocus event handler.
             java.lang.String getOnkeydown()
                      Returns the onKeyDown event handler.
             java.lang.String getOnkeypress()
                      Returns the onKeyPress event handler.
             java.lang.String getOnkeyup()
                      Returns the onKeyUp event handler.
             java.lang.String getOnmousedown()
                      Returns the onMouseDown event handler.
             java.lang.String getOnmousemove()
                      Returns the onMouseMove event handler.
             java.lang.String getOnmouseout()
                      Returns the onMouseOut event handler.
             java.lang.String getOnmouseover()
                      Returns the onMouseOver event handler.
             java.lang.String getOnmouseup()
                      Returns the onMouseUp event handler.
             java.lang.String getOnselect()
                      Returns the onSelect event handler.
             boolean getReadonly()
                      Returns the readonly event handler.
             java.lang.String getStyle()
                      Returns the style attribute.
             java.lang.String getStyleClass()
                      Returns the style class attribute.
             java.lang.String getStyleId()
                      Returns the style id attribute.
             java.lang.String getTabindex()
                      Returns the tabIndex value.
             java.lang.String getTitle()
                      Returns the advisory title attribute.
            protected  java.lang.String prepareEventHandlers()
                      Prepares the event handlers for inclusion in the component's HTML tag.
            private  void prepareFocusEvents(java.lang.StringBuffer handlers)
                      Prepares the focus event handlers, appending them to the the given StringBuffer.
            private  void prepareKeyEvents(java.lang.StringBuffer handlers)
                      Prepares the keyboard event handlers, appending them to the the given StringBuffer.
            private  void prepareMouseEvents(java.lang.StringBuffer handlers)
                      Prepares the mouse event handlers, appending them to the the given StringBuffer.
            protected  java.lang.String prepareStyles()
                      Prepares the style attributes for inclusion in the component's HTML tag.
            private  void prepareTextEvents(java.lang.StringBuffer handlers)
                      Prepares the text event handlers, appending them to the the given StringBuffer.
             void release()
                      Release any acquired resources.
             void setAccesskey(java.lang.String accessKey)
                      Sets the accessKey character.
             void setDisabled(boolean disabled)
                      Sets the disabled event handler.
             void setOnblur(java.lang.String onBlur)
                      Sets the onBlur event handler.
             void setOnchange(java.lang.String onChange)
                      Sets the onChange event handler.
             void setOnclick(java.lang.String onClick)
                      Sets the onClick event handler.
             void setOndblclick(java.lang.String onDblClick)
                      Sets the onDblClick event handler.
             void setOnfocus(java.lang.String onFocus)
                      Sets the onFocus event handler.
             void setOnkeydown(java.lang.String onKeyDown)
                      Sets the onKeyDown event handler.
             void setOnkeypress(java.lang.String onKeyPress)
                      Sets the onKeyPress event handler.
             void setOnkeyup(java.lang.String onKeyUp)
                      Sets the onKeyUp event handler.
             void setOnmousedown(java.lang.String onMouseDown)
                      Sets the onMouseDown event handler.
             void setOnmousemove(java.lang.String onMouseMove)
                      Sets the onMouseMove event handler.
             void setOnmouseout(java.lang.String onMouseOut)
                      Sets the onMouseOut event handler.
             void setOnmouseover(java.lang.String onMouseOver)
                      Sets the onMouseOver event handler.
             void setOnmouseup(java.lang.String onMouseUp)
                      Sets the onMouseUp event handler.
             void setOnselect(java.lang.String onSelect)
                      Sets the onSelect event handler.
             void setReadonly(boolean readonly)
                      Sets the readonly event handler.
             void setStyle(java.lang.String style)
                      Sets the style attribute.
             void setStyleClass(java.lang.String styleClass)
                      Sets the style class attribute.
             void setStyleId(java.lang.String styleId)
                      Sets the style id attribute.
             void setTabindex(java.lang.String tabIndex)
                      Sets the tabIndex value.
             void setTitle(java.lang.String title)
                      Sets the advisory title attribute.
             
            Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            doAfterBody, doEndTag, doInitBody, doStartTag, getBodyContent, getPreviousOut, setBodyContent
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             
            Methods inherited from interface javax.servlet.jsp.tagext.Tag
            getParent, setPageContext, setParent
             

            Field Detail

            messages

            protected static MessageResources messages
            The message resources for this package.

            accesskey

            protected java.lang.String accesskey
            Access key character.

            tabindex

            protected java.lang.String tabindex
            Tab index value.

            onclick

            private java.lang.String onclick
            Mouse click event.

            ondblclick

            private java.lang.String ondblclick
            Mouse double click event.

            onmouseover

            private java.lang.String onmouseover
            Mouse over component event.

            onmouseout

            private java.lang.String onmouseout
            Mouse exit component event.

            onmousemove

            private java.lang.String onmousemove
            Mouse moved over component event.

            onmousedown

            private java.lang.String onmousedown
            Mouse pressed on component event.

            onmouseup

            private java.lang.String onmouseup
            Mouse released on component event.

            onkeydown

            private java.lang.String onkeydown
            Key down in component event.

            onkeyup

            private java.lang.String onkeyup
            Key released in component event.

            onkeypress

            private java.lang.String onkeypress
            Key down and up together in component event.

            onselect

            private java.lang.String onselect
            Text selected in component event.

            onchange

            private java.lang.String onchange
            Content changed after component lost focus event.

            onblur

            private java.lang.String onblur
            Component lost focus event.

            onfocus

            private java.lang.String onfocus
            Component has received focus event.

            disabled

            private boolean disabled
            Component is disabled.

            readonly

            private boolean readonly
            Component is readonly.

            style

            private java.lang.String style
            Style attribute associated with component.

            styleClass

            private java.lang.String styleClass
            Named Style class associated with component.

            styleId

            private java.lang.String styleId
            Identifier associated with component.

            title

            private java.lang.String title
            The advisory title of this element.
            Constructor Detail

            BaseHandlerTag

            public BaseHandlerTag()
            Method Detail

            setAccesskey

            public void setAccesskey(java.lang.String accessKey)
            Sets the accessKey character.

            getAccesskey

            public java.lang.String getAccesskey()
            Returns the accessKey character.

            setTabindex

            public void setTabindex(java.lang.String tabIndex)
            Sets the tabIndex value.

            getTabindex

            public java.lang.String getTabindex()
            Returns the tabIndex value.

            setOnclick

            public void setOnclick(java.lang.String onClick)
            Sets the onClick event handler.

            getOnclick

            public java.lang.String getOnclick()
            Returns the onClick event handler.

            setOndblclick

            public void setOndblclick(java.lang.String onDblClick)
            Sets the onDblClick event handler.

            getOndblclick

            public java.lang.String getOndblclick()
            Returns the onDblClick event handler.

            setOnmousedown

            public void setOnmousedown(java.lang.String onMouseDown)
            Sets the onMouseDown event handler.

            getOnmousedown

            public java.lang.String getOnmousedown()
            Returns the onMouseDown event handler.

            setOnmouseup

            public void setOnmouseup(java.lang.String onMouseUp)
            Sets the onMouseUp event handler.

            getOnmouseup

            public java.lang.String getOnmouseup()
            Returns the onMouseUp event handler.

            setOnmousemove

            public void setOnmousemove(java.lang.String onMouseMove)
            Sets the onMouseMove event handler.

            getOnmousemove

            public java.lang.String getOnmousemove()
            Returns the onMouseMove event handler.

            setOnmouseover

            public void setOnmouseover(java.lang.String onMouseOver)
            Sets the onMouseOver event handler.

            getOnmouseover

            public java.lang.String getOnmouseover()
            Returns the onMouseOver event handler.

            setOnmouseout

            public void setOnmouseout(java.lang.String onMouseOut)
            Sets the onMouseOut event handler.

            getOnmouseout

            public java.lang.String getOnmouseout()
            Returns the onMouseOut event handler.

            setOnkeydown

            public void setOnkeydown(java.lang.String onKeyDown)
            Sets the onKeyDown event handler.

            getOnkeydown

            public java.lang.String getOnkeydown()
            Returns the onKeyDown event handler.

            setOnkeyup

            public void setOnkeyup(java.lang.String onKeyUp)
            Sets the onKeyUp event handler.

            getOnkeyup

            public java.lang.String getOnkeyup()
            Returns the onKeyUp event handler.

            setOnkeypress

            public void setOnkeypress(java.lang.String onKeyPress)
            Sets the onKeyPress event handler.

            getOnkeypress

            public java.lang.String getOnkeypress()
            Returns the onKeyPress event handler.

            setOnchange

            public void setOnchange(java.lang.String onChange)
            Sets the onChange event handler.

            getOnchange

            public java.lang.String getOnchange()
            Returns the onChange event handler.

            setOnselect

            public void setOnselect(java.lang.String onSelect)
            Sets the onSelect event handler.

            getOnselect

            public java.lang.String getOnselect()
            Returns the onSelect event handler.

            setOnblur

            public void setOnblur(java.lang.String onBlur)
            Sets the onBlur event handler.

            getOnblur

            public java.lang.String getOnblur()
            Returns the onBlur event handler.

            setOnfocus

            public void setOnfocus(java.lang.String onFocus)
            Sets the onFocus event handler.

            getOnfocus

            public java.lang.String getOnfocus()
            Returns the onFocus event handler.

            setDisabled

            public void setDisabled(boolean disabled)
            Sets the disabled event handler.

            getDisabled

            public boolean getDisabled()
            Returns the disabled event handler.

            setReadonly

            public void setReadonly(boolean readonly)
            Sets the readonly event handler.

            getReadonly

            public boolean getReadonly()
            Returns the readonly event handler.

            setStyle

            public void setStyle(java.lang.String style)
            Sets the style attribute.

            getStyle

            public java.lang.String getStyle()
            Returns the style attribute.

            setStyleClass

            public void setStyleClass(java.lang.String styleClass)
            Sets the style class attribute.

            getStyleClass

            public java.lang.String getStyleClass()
            Returns the style class attribute.

            setStyleId

            public void setStyleId(java.lang.String styleId)
            Sets the style id attribute.

            getStyleId

            public java.lang.String getStyleId()
            Returns the style id attribute.

            getTitle

            public java.lang.String getTitle()
            Returns the advisory title attribute.

            setTitle

            public void setTitle(java.lang.String title)
            Sets the advisory title attribute.

            release

            public void release()
            Release any acquired resources.
            Overrides:
            release in class javax.servlet.jsp.tagext.BodyTagSupport

            prepareStyles

            protected java.lang.String prepareStyles()
            Prepares the style attributes for inclusion in the component's HTML tag.
            Returns:
            The prepared String for inclusion in the HTML tag.

            prepareEventHandlers

            protected java.lang.String prepareEventHandlers()
            Prepares the event handlers for inclusion in the component's HTML tag.
            Returns:
            The prepared String for inclusion in the HTML tag.

            prepareMouseEvents

            private void prepareMouseEvents(java.lang.StringBuffer handlers)
            Prepares the mouse event handlers, appending them to the the given StringBuffer.
            Parameters:
            handlers - The StringBuffer that output will be appended to.

            prepareKeyEvents

            private void prepareKeyEvents(java.lang.StringBuffer handlers)
            Prepares the keyboard event handlers, appending them to the the given StringBuffer.
            Parameters:
            handlers - The StringBuffer that output will be appended to.

            prepareTextEvents

            private void prepareTextEvents(java.lang.StringBuffer handlers)
            Prepares the text event handlers, appending them to the the given StringBuffer.
            Parameters:
            handlers - The StringBuffer that output will be appended to.

            prepareFocusEvents

            private void prepareFocusEvents(java.lang.StringBuffer handlers)
            Prepares the focus event handlers, appending them to the the given StringBuffer.
            Parameters:
            handlers - The StringBuffer that output will be appended to.


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/html/BaseInputTag.html0000644000175000017500000010725410404045236031002 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class BaseInputTag

            org.apache.struts.taglib.html
            Class BaseInputTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--javax.servlet.jsp.tagext.BodyTagSupport
                          |
                          +--org.apache.struts.taglib.html.BaseHandlerTag
                                |
                                +--org.apache.struts.taglib.html.BaseInputTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.BodyTag, javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag
            Direct Known Subclasses:
            BaseFieldTag, TextareaTag

            public abstract class BaseInputTag
            extends BaseHandlerTag

            Abstract base class for the various input tags.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  java.lang.String cols
                      The number of character columns for this field, or negative for no limit.
            protected  java.lang.String maxlength
                      The maximum number of characters allowed, or negative for no limit.
            protected static MessageResources messages
                      The message resources for this package.
            protected  java.lang.String property
                      The name of the field (and associated property) being processed.
            protected  java.lang.String rows
                      The number of rows for this field, or negative for no limit.
            protected  java.lang.String value
                      The value for this field, or null to retrieve the corresponding property from our associated bean.
             
            Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
            accesskey, disabled, onblur, onchange, onclick, ondblclick, onfocus, onkeydown, onkeypress, onkeyup, onmousedown, onmousemove, onmouseout, onmouseover, onmouseup, onselect, readonly, style, styleClass, styleId, tabindex, title
             
            Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            bodyContent
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
            EVAL_BODY_BUFFERED, EVAL_BODY_TAG
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            BaseInputTag()
                       
             
            Method Summary
             int doEndTag()
                      Process the end of this tag.
             int doStartTag()
                      Process the start of this tag.
             java.lang.String getCols()
                      Return the number of columns for this field.
             java.lang.String getMaxlength()
                      Return the maximum length allowed.
             java.lang.String getProperty()
                      Return the property name.
             java.lang.String getRows()
                      Return the number of rows for this field.
             java.lang.String getSize()
                      Return the size of this field (synonym for getCols()).
             java.lang.String getValue()
                      Return the field value (if any).
             void release()
                      Release any acquired resources.
             void setCols(java.lang.String cols)
                      Set the number of columns for this field.
             void setMaxlength(java.lang.String maxlength)
                      Set the maximum length allowed.
             void setProperty(java.lang.String property)
                      Set the property name.
             void setRows(java.lang.String rows)
                      Set the number of rows for this field.
             void setSize(java.lang.String size)
                      Set the size of this field (synonym for setCols()).
             void setValue(java.lang.String value)
                      Set the field value (if any).
             
            Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
            getAccesskey, getDisabled, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, prepareEventHandlers, prepareFocusEvents, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setDisabled, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle
             
            Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            doAfterBody, doInitBody, getBodyContent, getPreviousOut, setBodyContent
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             
            Methods inherited from interface javax.servlet.jsp.tagext.Tag
            getParent, setPageContext, setParent
             

            Field Detail

            cols

            protected java.lang.String cols
            The number of character columns for this field, or negative for no limit.

            maxlength

            protected java.lang.String maxlength
            The maximum number of characters allowed, or negative for no limit.

            messages

            protected static MessageResources messages
            The message resources for this package.

            property

            protected java.lang.String property
            The name of the field (and associated property) being processed.

            rows

            protected java.lang.String rows
            The number of rows for this field, or negative for no limit.

            value

            protected java.lang.String value
            The value for this field, or null to retrieve the corresponding property from our associated bean.
            Constructor Detail

            BaseInputTag

            public BaseInputTag()
            Method Detail

            getCols

            public java.lang.String getCols()
            Return the number of columns for this field.

            setCols

            public void setCols(java.lang.String cols)
            Set the number of columns for this field.
            Parameters:
            cols - The new number of columns

            getMaxlength

            public java.lang.String getMaxlength()
            Return the maximum length allowed.

            setMaxlength

            public void setMaxlength(java.lang.String maxlength)
            Set the maximum length allowed.
            Parameters:
            maxlength - The new maximum length

            getProperty

            public java.lang.String getProperty()
            Return the property name.

            setProperty

            public void setProperty(java.lang.String property)
            Set the property name.
            Parameters:
            property - The new property name

            getRows

            public java.lang.String getRows()
            Return the number of rows for this field.

            setRows

            public void setRows(java.lang.String rows)
            Set the number of rows for this field.
            Parameters:
            rows - The new number of rows

            getSize

            public java.lang.String getSize()
            Return the size of this field (synonym for getCols()).

            setSize

            public void setSize(java.lang.String size)
            Set the size of this field (synonym for setCols()).
            Parameters:
            size - The new size

            getValue

            public java.lang.String getValue()
            Return the field value (if any).

            setValue

            public void setValue(java.lang.String value)
            Set the field value (if any).
            Parameters:
            value - The new field value, or null to retrieve the corresponding property from the bean

            doStartTag

            public int doStartTag()
                           throws javax.servlet.jsp.JspException
            Process the start of this tag. The default implementation does nothing.
            Overrides:
            doStartTag in class javax.servlet.jsp.tagext.BodyTagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            doEndTag

            public int doEndTag()
                         throws javax.servlet.jsp.JspException
            Process the end of this tag. The default implementation does nothing.
            Overrides:
            doEndTag in class javax.servlet.jsp.tagext.BodyTagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            release

            public void release()
            Release any acquired resources.
            Overrides:
            release in class BaseHandlerTag


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/html/BaseTag.html0000644000175000017500000003411310404045210027743 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class BaseTag

            org.apache.struts.taglib.html
            Class BaseTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--org.apache.struts.taglib.html.BaseTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class BaseTag
            extends javax.servlet.jsp.tagext.TagSupport

            Renders an HTML element with an href attribute pointing to the absolute location of the enclosing JSP page. This tag is only valid when nested inside a head tag body. The presence of this tag allows the browser to resolve relative URL's to images, CSS stylesheets and other resources in a manner independent of the URL used to call the ActionServlet. There are no attributes associated with this tag.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Luis Arias
            See Also:
            Serialized Form

            Field Summary
            protected static MessageResources messages
                      The message resources for this package.
            protected  java.lang.String target
                      The target window for this base reference.
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            BaseTag()
                       
             
            Method Summary
             int doStartTag()
                      Process the start of this tag.
             java.lang.String getTarget()
                       
             void setTarget(java.lang.String target)
                       
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            doAfterBody, doEndTag, findAncestorWithClass, getId, getParent, getValue, getValues, release, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            messages

            protected static MessageResources messages
            The message resources for this package.

            target

            protected java.lang.String target
            The target window for this base reference.
            Constructor Detail

            BaseTag

            public BaseTag()
            Method Detail

            getTarget

            public java.lang.String getTarget()

            setTarget

            public void setTarget(java.lang.String target)

            doStartTag

            public int doStartTag()
                           throws javax.servlet.jsp.JspException
            Process the start of this tag.
            Overrides:
            doStartTag in class javax.servlet.jsp.tagext.TagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/html/ButtonTag.html0000644000175000017500000007135610404045236030366 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class ButtonTag

            org.apache.struts.taglib.html
            Class ButtonTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--javax.servlet.jsp.tagext.BodyTagSupport
                          |
                          +--org.apache.struts.taglib.html.BaseHandlerTag
                                |
                                +--org.apache.struts.taglib.html.ButtonTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.BodyTag, javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class ButtonTag
            extends BaseHandlerTag

            Renders an HTML BUTTON tag within the Struts framework.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Don Clasen
            See Also:
            Serialized Form

            Field Summary
            protected  java.lang.String property
                      The property name of the generated button.
            protected  java.lang.String text
                      The body content of this tag (if any).
            protected  java.lang.String value
                      The value of the button label.
             
            Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
            accesskey, disabled, messages, onblur, onchange, onclick, ondblclick, onfocus, onkeydown, onkeypress, onkeyup, onmousedown, onmousemove, onmouseout, onmouseover, onmouseup, onselect, readonly, style, styleClass, styleId, tabindex, title
             
            Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            bodyContent
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
            EVAL_BODY_BUFFERED, EVAL_BODY_TAG
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            ButtonTag()
                       
             
            Method Summary
             int doAfterBody()
                      Save the associated label from the body content (if any).
             int doEndTag()
                      Process the end of this tag.
             int doStartTag()
                      Process the start of this tag.
             java.lang.String getProperty()
                      Return the property name.
             java.lang.String getValue()
                      Return the label value.
             void release()
                      Release any acquired resources.
             void setProperty(java.lang.String property)
                      Set the property name.
             void setValue(java.lang.String value)
                      Set the label value.
             
            Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
            getAccesskey, getDisabled, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, prepareEventHandlers, prepareFocusEvents, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setDisabled, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle
             
            Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            doInitBody, getBodyContent, getPreviousOut, setBodyContent
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             
            Methods inherited from interface javax.servlet.jsp.tagext.Tag
            getParent, setPageContext, setParent
             

            Field Detail

            property

            protected java.lang.String property
            The property name of the generated button.

            text

            protected java.lang.String text
            The body content of this tag (if any).

            value

            protected java.lang.String value
            The value of the button label.
            Constructor Detail

            ButtonTag

            public ButtonTag()
            Method Detail

            getProperty

            public java.lang.String getProperty()
            Return the property name.

            setProperty

            public void setProperty(java.lang.String property)
            Set the property name.
            Parameters:
            name - The property name

            getValue

            public java.lang.String getValue()
            Return the label value.

            setValue

            public void setValue(java.lang.String value)
            Set the label value.
            Parameters:
            value - The label value

            doStartTag

            public int doStartTag()
                           throws javax.servlet.jsp.JspException
            Process the start of this tag.
            Overrides:
            doStartTag in class javax.servlet.jsp.tagext.BodyTagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            doAfterBody

            public int doAfterBody()
                            throws javax.servlet.jsp.JspException
            Save the associated label from the body content (if any).
            Overrides:
            doAfterBody in class javax.servlet.jsp.tagext.BodyTagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            doEndTag

            public int doEndTag()
                         throws javax.servlet.jsp.JspException
            Process the end of this tag.
            Overrides:
            doEndTag in class javax.servlet.jsp.tagext.BodyTagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            release

            public void release()
            Release any acquired resources.
            Overrides:
            release in class BaseHandlerTag


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/html/CancelTag.html0000644000175000017500000007252510404045204030272 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class CancelTag

            org.apache.struts.taglib.html
            Class CancelTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--javax.servlet.jsp.tagext.BodyTagSupport
                          |
                          +--org.apache.struts.taglib.html.BaseHandlerTag
                                |
                                +--org.apache.struts.taglib.html.CancelTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.BodyTag, javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class CancelTag
            extends BaseHandlerTag

            Tag for input fields of type "cancel".

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Jeff Hutchinson
            See Also:
            Serialized Form

            Field Summary
            protected static MessageResources messages
                      The message resources for this package.
            protected  java.lang.String property
                      The property name of the generated button.
            protected  java.lang.String text
                      The body content of this tag (if any).
            protected  java.lang.String value
                      The value of the button label.
             
            Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
            accesskey, disabled, onblur, onchange, onclick, ondblclick, onfocus, onkeydown, onkeypress, onkeyup, onmousedown, onmousemove, onmouseout, onmouseover, onmouseup, onselect, readonly, style, styleClass, styleId, tabindex, title
             
            Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            bodyContent
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
            EVAL_BODY_BUFFERED, EVAL_BODY_TAG
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            CancelTag()
                       
             
            Method Summary
             int doAfterBody()
                      Save the associated label from the body content.
             int doEndTag()
                      Process the end of this tag.
             int doStartTag()
                      Process the start of this tag.
             java.lang.String getProperty()
                      Return the property name.
             java.lang.String getValue()
                      Return the label value.
             void release()
                      Release any acquired resources.
             void setProperty(java.lang.String property)
                      Set the property name.
             void setValue(java.lang.String value)
                      Set the label value.
             
            Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
            getAccesskey, getDisabled, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, prepareEventHandlers, prepareFocusEvents, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setDisabled, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle
             
            Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            doInitBody, getBodyContent, getPreviousOut, setBodyContent
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             
            Methods inherited from interface javax.servlet.jsp.tagext.Tag
            getParent, setPageContext, setParent
             

            Field Detail

            messages

            protected static MessageResources messages
            The message resources for this package.

            property

            protected java.lang.String property
            The property name of the generated button.

            text

            protected java.lang.String text
            The body content of this tag (if any).

            value

            protected java.lang.String value
            The value of the button label.
            Constructor Detail

            CancelTag

            public CancelTag()
            Method Detail

            getProperty

            public java.lang.String getProperty()
            Return the property name.

            setProperty

            public void setProperty(java.lang.String property)
            Set the property name.
            Parameters:
            name - The property name

            getValue

            public java.lang.String getValue()
            Return the label value.

            setValue

            public void setValue(java.lang.String value)
            Set the label value.
            Parameters:
            value - The label value

            doStartTag

            public int doStartTag()
                           throws javax.servlet.jsp.JspException
            Process the start of this tag.
            Overrides:
            doStartTag in class javax.servlet.jsp.tagext.BodyTagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            doAfterBody

            public int doAfterBody()
                            throws javax.servlet.jsp.JspException
            Save the associated label from the body content.
            Overrides:
            doAfterBody in class javax.servlet.jsp.tagext.BodyTagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            doEndTag

            public int doEndTag()
                         throws javax.servlet.jsp.JspException
            Process the end of this tag.
            Overrides:
            doEndTag in class javax.servlet.jsp.tagext.BodyTagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            release

            public void release()
            Release any acquired resources.
            Overrides:
            release in class BaseHandlerTag


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/html/CheckboxTag.html0000644000175000017500000007602010404045206030627 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class CheckboxTag

            org.apache.struts.taglib.html
            Class CheckboxTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--javax.servlet.jsp.tagext.BodyTagSupport
                          |
                          +--org.apache.struts.taglib.html.BaseHandlerTag
                                |
                                +--org.apache.struts.taglib.html.CheckboxTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.BodyTag, javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class CheckboxTag
            extends BaseHandlerTag

            Tag for input fields of type "checkbox".

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected static MessageResources messages
                      The message resources for this package.
            protected  java.lang.String name
                      The name of the bean containing our underlying property.
            protected  java.lang.String property
                      The property name for this field.
            protected  java.lang.String text
                      The body content of this tag (if any).
            protected  java.lang.String value
                      The server value for this option.
             
            Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
            accesskey, disabled, onblur, onchange, onclick, ondblclick, onfocus, onkeydown, onkeypress, onkeyup, onmousedown, onmousemove, onmouseout, onmouseover, onmouseup, onselect, readonly, style, styleClass, styleId, tabindex, title
             
            Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            bodyContent
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
            EVAL_BODY_BUFFERED, EVAL_BODY_TAG
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            CheckboxTag()
                       
             
            Method Summary
             int doAfterBody()
                      Save the associated label from the body content.
             int doEndTag()
                      Process the remainder of this page normally.
             int doStartTag()
                      Generate the required input tag.
             java.lang.String getName()
                       
             java.lang.String getProperty()
                      Return the property name.
             java.lang.String getValue()
                      Return the server value.
             void release()
                      Release any acquired resources.
             void setName(java.lang.String name)
                       
             void setProperty(java.lang.String property)
                      Set the property name.
             void setValue(java.lang.String value)
                      Set the server value.
             
            Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
            getAccesskey, getDisabled, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, prepareEventHandlers, prepareFocusEvents, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setDisabled, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle
             
            Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            doInitBody, getBodyContent, getPreviousOut, setBodyContent
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             
            Methods inherited from interface javax.servlet.jsp.tagext.Tag
            getParent, setPageContext, setParent
             

            Field Detail

            messages

            protected static MessageResources messages
            The message resources for this package.

            name

            protected java.lang.String name
            The name of the bean containing our underlying property.

            property

            protected java.lang.String property
            The property name for this field.

            text

            protected java.lang.String text
            The body content of this tag (if any).

            value

            protected java.lang.String value
            The server value for this option.
            Constructor Detail

            CheckboxTag

            public CheckboxTag()
            Method Detail

            getName

            public java.lang.String getName()

            setName

            public void setName(java.lang.String name)

            getProperty

            public java.lang.String getProperty()
            Return the property name.

            setProperty

            public void setProperty(java.lang.String property)
            Set the property name.
            Parameters:
            property - The new property name

            getValue

            public java.lang.String getValue()
            Return the server value.

            setValue

            public void setValue(java.lang.String value)
            Set the server value.
            Parameters:
            value - The new server value

            doStartTag

            public int doStartTag()
                           throws javax.servlet.jsp.JspException
            Generate the required input tag.
            Overrides:
            doStartTag in class javax.servlet.jsp.tagext.BodyTagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            doAfterBody

            public int doAfterBody()
                            throws javax.servlet.jsp.JspException
            Save the associated label from the body content.
            Overrides:
            doAfterBody in class javax.servlet.jsp.tagext.BodyTagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            doEndTag

            public int doEndTag()
                         throws javax.servlet.jsp.JspException
            Process the remainder of this page normally.
            Overrides:
            doEndTag in class javax.servlet.jsp.tagext.BodyTagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            release

            public void release()
            Release any acquired resources.
            Overrides:
            release in class BaseHandlerTag


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/html/Constants.html0000644000175000017500000003023310404045232030414 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class Constants

            org.apache.struts.taglib.html
            Class Constants

            java.lang.Object
              |
              +--org.apache.struts.taglib.html.Constants
            

            public class Constants
            extends java.lang.Object

            Manifest constants for this package.


            Field Summary
            static java.lang.String BEAN_KEY
                      The attribute key for the bean our form is related to.
            static java.lang.String CANCEL_PROPERTY
                      The property under which a Cancel button press is reported.
            static java.lang.String CANCEL_PROPERTY_X
                      The property under which a Cancel button press is reported, if the Cancel button is rendered as an image.
            static java.lang.String FORM_KEY
                      The attribute key for the form tag itself.
            static java.lang.String Package
                      The name of this package.
            static java.lang.String SELECT_KEY
                      The attribute key for the select tag itself.
            static java.lang.String TOKEN_KEY
                      The property under which a transaction token is reported.
             
            Constructor Summary
            Constants()
                       
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            Package

            public static final java.lang.String Package
            The name of this package.

            BEAN_KEY

            public static final java.lang.String BEAN_KEY
            The attribute key for the bean our form is related to.

            CANCEL_PROPERTY

            public static final java.lang.String CANCEL_PROPERTY
            The property under which a Cancel button press is reported.

            CANCEL_PROPERTY_X

            public static final java.lang.String CANCEL_PROPERTY_X
            The property under which a Cancel button press is reported, if the Cancel button is rendered as an image.

            FORM_KEY

            public static final java.lang.String FORM_KEY
            The attribute key for the form tag itself.

            SELECT_KEY

            public static final java.lang.String SELECT_KEY
            The attribute key for the select tag itself.

            TOKEN_KEY

            public static final java.lang.String TOKEN_KEY
            The property under which a transaction token is reported.
            Constructor Detail

            Constants

            public Constants()


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/html/ErrorsTag.html0000644000175000017500000005127410404045222030357 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class ErrorsTag

            org.apache.struts.taglib.html
            Class ErrorsTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--org.apache.struts.taglib.html.ErrorsTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class ErrorsTag
            extends javax.servlet.jsp.tagext.TagSupport

            Custom tag that renders error messages if an appropriate request attribute has been created. The tag looks for a request attribute with a reserved key, and assumes that it is either a String, a String array, containing message keys to be looked up in the application's MessageResources, or an object of type org.apache.struts.action.ActionErrors.

            The following optional message keys will be utilized if corresponding messages exist for them in the application resources:

            • errors.header - If present, the corresponding message will be rendered prior to the individual list of error messages.
            • errors.footer - If present, the corresponding message will be rendered following the individual list of error messages.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  java.lang.String bundle
                      The servlet context attribute key for our resources.
            protected static java.util.Locale defaultLocale
                      The default locale on our server.
            protected  java.lang.String locale
                      The session attribute key for our locale.
            protected static MessageResources messages
                      The message resources for this package.
            protected  java.lang.String name
                      The request attribute key for our error messages (if any).
            protected  java.lang.String property
                      The name of the property for which error messages should be returned, or null to return all errors.
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            ErrorsTag()
                       
             
            Method Summary
             int doStartTag()
                      Render the specified error messages if there are any.
             java.lang.String getBundle()
                       
             java.lang.String getLocale()
                       
             java.lang.String getName()
                       
             java.lang.String getProperty()
                       
             void release()
                      Release any acquired resources.
             void setBundle(java.lang.String bundle)
                       
             void setLocale(java.lang.String locale)
                       
             void setName(java.lang.String name)
                       
             void setProperty(java.lang.String property)
                       
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            doAfterBody, doEndTag, findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            bundle

            protected java.lang.String bundle
            The servlet context attribute key for our resources.

            defaultLocale

            protected static java.util.Locale defaultLocale
            The default locale on our server.

            locale

            protected java.lang.String locale
            The session attribute key for our locale.

            messages

            protected static MessageResources messages
            The message resources for this package.

            name

            protected java.lang.String name
            The request attribute key for our error messages (if any).

            property

            protected java.lang.String property
            The name of the property for which error messages should be returned, or null to return all errors.
            Constructor Detail

            ErrorsTag

            public ErrorsTag()
            Method Detail

            getBundle

            public java.lang.String getBundle()

            setBundle

            public void setBundle(java.lang.String bundle)

            getLocale

            public java.lang.String getLocale()

            setLocale

            public void setLocale(java.lang.String locale)

            getName

            public java.lang.String getName()

            setName

            public void setName(java.lang.String name)

            getProperty

            public java.lang.String getProperty()

            setProperty

            public void setProperty(java.lang.String property)

            doStartTag

            public int doStartTag()
                           throws javax.servlet.jsp.JspException
            Render the specified error messages if there are any.
            Overrides:
            doStartTag in class javax.servlet.jsp.tagext.TagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            release

            public void release()
            Release any acquired resources.
            Overrides:
            release in class javax.servlet.jsp.tagext.TagSupport


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/html/FileTag.html0000644000175000017500000006350410404045216027764 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class FileTag

            org.apache.struts.taglib.html
            Class FileTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--javax.servlet.jsp.tagext.BodyTagSupport
                          |
                          +--org.apache.struts.taglib.html.BaseHandlerTag
                                |
                                +--org.apache.struts.taglib.html.BaseInputTag
                                      |
                                      +--org.apache.struts.taglib.html.BaseFieldTag
                                            |
                                            +--org.apache.struts.taglib.html.FileTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.BodyTag, javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class FileTag
            extends BaseFieldTag

            Custom tag for input fields of type "file".

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Fields inherited from class org.apache.struts.taglib.html.BaseFieldTag
            accept, name, redisplay, type
             
            Fields inherited from class org.apache.struts.taglib.html.BaseInputTag
            cols, maxlength, messages, property, rows, value
             
            Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
            accesskey, disabled, onblur, onchange, onclick, ondblclick, onfocus, onkeydown, onkeypress, onkeyup, onmousedown, onmousemove, onmouseout, onmouseover, onmouseup, onselect, readonly, style, styleClass, styleId, tabindex, title
             
            Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            bodyContent
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
            EVAL_BODY_BUFFERED, EVAL_BODY_TAG
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            FileTag()
                      Construct a new instance of this tag.
             
            Methods inherited from class org.apache.struts.taglib.html.BaseFieldTag
            doStartTag, getAccept, getName, getRedisplay, release, setAccept, setName, setRedisplay
             
            Methods inherited from class org.apache.struts.taglib.html.BaseInputTag
            doEndTag, getCols, getMaxlength, getProperty, getRows, getSize, getValue, setCols, setMaxlength, setProperty, setRows, setSize, setValue
             
            Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
            getAccesskey, getDisabled, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, prepareEventHandlers, prepareFocusEvents, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setDisabled, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle
             
            Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            doAfterBody, doInitBody, getBodyContent, getPreviousOut, setBodyContent
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             
            Methods inherited from interface javax.servlet.jsp.tagext.Tag
            getParent, setPageContext, setParent
             

            Constructor Detail

            FileTag

            public FileTag()
            Construct a new instance of this tag.


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/html/FormTag.html0000644000175000017500000012125710404045250030006 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class FormTag

            org.apache.struts.taglib.html
            Class FormTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--org.apache.struts.taglib.html.FormTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class FormTag
            extends javax.servlet.jsp.tagext.TagSupport

            Custom tag that represents an input form, associated with a bean whose properties correspond to the various fields of the form.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  java.lang.String action
                      The action URL to which this form should be submitted, if any.
            protected  java.lang.String enctype
                      The content encoding to be used on a POST submit.
            protected  java.lang.String focus
                      The name of the field to receive focus, if any.
            protected static MessageResources messages
                      The message resources for this package.
            protected  java.lang.String method
                      The request method used when submitting this form.
            protected  java.lang.String name
                      The attribute key under which our associated bean is stored.
            protected  java.lang.String onreset
                      The onReset event script.
            protected  java.lang.String onsubmit
                      The onSubmit event script.
            protected  java.lang.String scope
                      The scope (request or session) under which our associated bean is stored.
            protected  ActionServlet servlet
                      The ActionServlet instance we are associated with (so that we can initialize the servlet property on any form bean that we create).
            protected  java.lang.String style
                      The style attribute associated with this tag.
            protected  java.lang.String styleClass
                      The style class associated with this tag.
            protected  java.lang.String styleId
                      The identifier associated with this tag.
            protected  java.lang.String target
                      The window target.
            protected  java.lang.String type
                      The Java class name of the bean to be created, if necessary.
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            FormTag()
                       
             
            Method Summary
             int doEndTag()
                      Render the end of this form.
             int doStartTag()
                      Render the beginning of this form.
             java.lang.String getAction()
                      Return the action URL to which this form should be submitted.
            protected  java.lang.String getActionMappingName()
                      Return the form action converted into an action mapping path.
            protected  java.lang.String getActionMappingURL()
                      Return the form action converted into a server-relative URL.
             java.lang.String getEnctype()
                       
             java.lang.String getFocus()
                      Return the focus field name for this form.
             java.lang.String getMethod()
                      Return the request method used when submitting this form.
             java.lang.String getName()
                      Return the attribute key name of our bean.
             java.lang.String getOnreset()
                      Return the onReset event script.
             java.lang.String getOnsubmit()
                      Return the onSubmit event script.
             java.lang.String getScope()
                      Return the attribute scope of our bean.
             java.lang.String getStyle()
                      Return the style attribute for this tag.
             java.lang.String getStyleClass()
                      Return the style class for this tag.
             java.lang.String getStyleId()
                      Return the style identifier for this tag.
             java.lang.String getTarget()
                      Return the window target.
             java.lang.String getType()
                      Return the Java class of our bean.
            protected  void lookup()
                      Look up values for the name, scope, and type properties if necessary.
             void release()
                      Release any acquired resources.
             void setAction(java.lang.String action)
                      Set the action URL to which this form should be submitted.
             void setEnctype(java.lang.String enctype)
                       
             void setFocus(java.lang.String focus)
                      Set the focus field name for this form.
             void setMethod(java.lang.String method)
                      Set the request method used when submitting this form.
             void setName(java.lang.String name)
                      Set the attribute key name of our bean.
             void setOnreset(java.lang.String onReset)
                      Set the onReset event script.
             void setOnsubmit(java.lang.String onSubmit)
                      Set the onSubmit event script.
             void setScope(java.lang.String scope)
                      Set the attribute scope of our bean.
             void setStyle(java.lang.String style)
                      Set the style attribute for this tag.
             void setStyleClass(java.lang.String styleClass)
                      Set the style class for this tag.
             void setStyleId(java.lang.String styleId)
                      Set the style identifier for this tag.
             void setTarget(java.lang.String target)
                      Set the window target.
             void setType(java.lang.String type)
                      Set the Java class of our bean.
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            doAfterBody, findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            action

            protected java.lang.String action
            The action URL to which this form should be submitted, if any.

            enctype

            protected java.lang.String enctype
            The content encoding to be used on a POST submit.

            focus

            protected java.lang.String focus
            The name of the field to receive focus, if any.

            messages

            protected static MessageResources messages
            The message resources for this package.

            method

            protected java.lang.String method
            The request method used when submitting this form.

            name

            protected java.lang.String name
            The attribute key under which our associated bean is stored.

            onreset

            protected java.lang.String onreset
            The onReset event script.

            onsubmit

            protected java.lang.String onsubmit
            The onSubmit event script.

            scope

            protected java.lang.String scope
            The scope (request or session) under which our associated bean is stored.

            servlet

            protected ActionServlet servlet
            The ActionServlet instance we are associated with (so that we can initialize the servlet property on any form bean that we create).

            style

            protected java.lang.String style
            The style attribute associated with this tag.

            styleClass

            protected java.lang.String styleClass
            The style class associated with this tag.

            styleId

            protected java.lang.String styleId
            The identifier associated with this tag.

            target

            protected java.lang.String target
            The window target.

            type

            protected java.lang.String type
            The Java class name of the bean to be created, if necessary.
            Constructor Detail

            FormTag

            public FormTag()
            Method Detail

            getEnctype

            public java.lang.String getEnctype()

            setEnctype

            public void setEnctype(java.lang.String enctype)

            getAction

            public java.lang.String getAction()
            Return the action URL to which this form should be submitted.

            setAction

            public void setAction(java.lang.String action)
            Set the action URL to which this form should be submitted.
            Parameters:
            action - The new action URL

            getFocus

            public java.lang.String getFocus()
            Return the focus field name for this form.

            setFocus

            public void setFocus(java.lang.String focus)
            Set the focus field name for this form.
            Parameters:
            focus - The new focus field name

            getMethod

            public java.lang.String getMethod()
            Return the request method used when submitting this form.

            setMethod

            public void setMethod(java.lang.String method)
            Set the request method used when submitting this form.
            Parameters:
            method - The new request method

            getName

            public java.lang.String getName()
            Return the attribute key name of our bean.

            setName

            public void setName(java.lang.String name)
            Set the attribute key name of our bean.
            Parameters:
            name - The new attribute key name

            getOnreset

            public java.lang.String getOnreset()
            Return the onReset event script.

            setOnreset

            public void setOnreset(java.lang.String onReset)
            Set the onReset event script.
            Parameters:
            onReset - The new event script

            getOnsubmit

            public java.lang.String getOnsubmit()
            Return the onSubmit event script.

            setOnsubmit

            public void setOnsubmit(java.lang.String onSubmit)
            Set the onSubmit event script.
            Parameters:
            onSubmit - The new event script

            getScope

            public java.lang.String getScope()
            Return the attribute scope of our bean.

            setScope

            public void setScope(java.lang.String scope)
            Set the attribute scope of our bean.
            Parameters:
            scope - The new attribute scope

            getStyle

            public java.lang.String getStyle()
            Return the style attribute for this tag.

            setStyle

            public void setStyle(java.lang.String style)
            Set the style attribute for this tag.
            Parameters:
            style - The new style attribute

            getStyleClass

            public java.lang.String getStyleClass()
            Return the style class for this tag.

            setStyleClass

            public void setStyleClass(java.lang.String styleClass)
            Set the style class for this tag.
            Parameters:
            styleClass - The new style class

            getStyleId

            public java.lang.String getStyleId()
            Return the style identifier for this tag.

            setStyleId

            public void setStyleId(java.lang.String styleId)
            Set the style identifier for this tag.
            Parameters:
            styleId - The new style identifier

            getTarget

            public java.lang.String getTarget()
            Return the window target.

            setTarget

            public void setTarget(java.lang.String target)
            Set the window target.
            Parameters:
            target - The new window target

            getType

            public java.lang.String getType()
            Return the Java class of our bean.

            setType

            public void setType(java.lang.String type)
            Set the Java class of our bean.
            Parameters:
            type - The new Java class

            doStartTag

            public int doStartTag()
                           throws javax.servlet.jsp.JspException
            Render the beginning of this form.
            Overrides:
            doStartTag in class javax.servlet.jsp.tagext.TagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            doEndTag

            public int doEndTag()
                         throws javax.servlet.jsp.JspException
            Render the end of this form.
            Overrides:
            doEndTag in class javax.servlet.jsp.tagext.TagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            release

            public void release()
            Release any acquired resources.
            Overrides:
            release in class javax.servlet.jsp.tagext.TagSupport

            getActionMappingName

            protected java.lang.String getActionMappingName()
            Return the form action converted into an action mapping path. The value of the action property is manipulated as follows in computing the name of the requested mapping:
            • Any filename extension is removed (on the theory that extension mapping is being used to select the controller servlet).
            • If the resulting value does not start with a slash, then a slash is prepended.

            getActionMappingURL

            protected java.lang.String getActionMappingURL()
            Return the form action converted into a server-relative URL.

            lookup

            protected void lookup()
                           throws javax.servlet.jsp.JspException
            Look up values for the name, scope, and type properties if necessary.
            Throws:
            javax.servlet.jsp.JspException - if a required value cannot be looked up


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/html/HiddenTag.html0000644000175000017500000006353210404045232030277 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class HiddenTag

            org.apache.struts.taglib.html
            Class HiddenTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--javax.servlet.jsp.tagext.BodyTagSupport
                          |
                          +--org.apache.struts.taglib.html.BaseHandlerTag
                                |
                                +--org.apache.struts.taglib.html.BaseInputTag
                                      |
                                      +--org.apache.struts.taglib.html.BaseFieldTag
                                            |
                                            +--org.apache.struts.taglib.html.HiddenTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.BodyTag, javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class HiddenTag
            extends BaseFieldTag

            Custom tag for input fields of type "text".

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Fields inherited from class org.apache.struts.taglib.html.BaseFieldTag
            accept, name, redisplay, type
             
            Fields inherited from class org.apache.struts.taglib.html.BaseInputTag
            cols, maxlength, messages, property, rows, value
             
            Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
            accesskey, disabled, onblur, onchange, onclick, ondblclick, onfocus, onkeydown, onkeypress, onkeyup, onmousedown, onmousemove, onmouseout, onmouseover, onmouseup, onselect, readonly, style, styleClass, styleId, tabindex, title
             
            Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            bodyContent
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
            EVAL_BODY_BUFFERED, EVAL_BODY_TAG
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            HiddenTag()
                      Construct a new instance of this tag.
             
            Methods inherited from class org.apache.struts.taglib.html.BaseFieldTag
            doStartTag, getAccept, getName, getRedisplay, release, setAccept, setName, setRedisplay
             
            Methods inherited from class org.apache.struts.taglib.html.BaseInputTag
            doEndTag, getCols, getMaxlength, getProperty, getRows, getSize, getValue, setCols, setMaxlength, setProperty, setRows, setSize, setValue
             
            Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
            getAccesskey, getDisabled, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, prepareEventHandlers, prepareFocusEvents, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setDisabled, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle
             
            Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            doAfterBody, doInitBody, getBodyContent, getPreviousOut, setBodyContent
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             
            Methods inherited from interface javax.servlet.jsp.tagext.Tag
            getParent, setPageContext, setParent
             

            Constructor Detail

            HiddenTag

            public HiddenTag()
            Construct a new instance of this tag.


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/html/HtmlTag.html0000644000175000017500000004261410404045204030005 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class HtmlTag

            org.apache.struts.taglib.html
            Class HtmlTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--org.apache.struts.taglib.html.HtmlTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class HtmlTag
            extends javax.servlet.jsp.tagext.TagSupport

            Renders an HTML element with appropriate language attributes if there is a current Locale available in the user's session.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  boolean locale
                      Should we set the current Locale for this user if needed?
            protected static MessageResources messages
                      The message resources for this package.
            protected  boolean xhtml
                      Are we rendering an xhtml page?
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            HtmlTag()
                       
             
            Method Summary
            protected  java.util.Locale currentLocale()
                      Return the current Locale for this request, creating a new one if necessary.
             int doEndTag()
                      Process the end of this tag.
             int doStartTag()
                      Process the start of this tag.
             boolean getLocale()
                       
             boolean getXhtml()
                       
             void release()
                      Release any acquired resources.
             void setLocale(boolean locale)
                       
             void setXhtml(boolean xhtml)
                       
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            doAfterBody, findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            messages

            protected static MessageResources messages
            The message resources for this package.

            locale

            protected boolean locale
            Should we set the current Locale for this user if needed?

            xhtml

            protected boolean xhtml
            Are we rendering an xhtml page?
            Constructor Detail

            HtmlTag

            public HtmlTag()
            Method Detail

            getLocale

            public boolean getLocale()

            setLocale

            public void setLocale(boolean locale)

            getXhtml

            public boolean getXhtml()

            setXhtml

            public void setXhtml(boolean xhtml)

            doStartTag

            public int doStartTag()
                           throws javax.servlet.jsp.JspException
            Process the start of this tag.
            Overrides:
            doStartTag in class javax.servlet.jsp.tagext.TagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            doEndTag

            public int doEndTag()
                         throws javax.servlet.jsp.JspException
            Process the end of this tag.
            Overrides:
            doEndTag in class javax.servlet.jsp.tagext.TagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            release

            public void release()
            Release any acquired resources.
            Overrides:
            release in class javax.servlet.jsp.tagext.TagSupport

            currentLocale

            protected java.util.Locale currentLocale()
            Return the current Locale for this request, creating a new one if necessary. If there is no current Locale, and locale support is not requested, return null.


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/html/ImageTag.html0000644000175000017500000013156010404045222030122 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class ImageTag

            org.apache.struts.taglib.html
            Class ImageTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--javax.servlet.jsp.tagext.BodyTagSupport
                          |
                          +--org.apache.struts.taglib.html.BaseHandlerTag
                                |
                                +--org.apache.struts.taglib.html.SubmitTag
                                      |
                                      +--org.apache.struts.taglib.html.ImageTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.BodyTag, javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class ImageTag
            extends SubmitTag

            Tag for input fields of type "image".

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Oleg V Alexeev
            See Also:
            Serialized Form

            Field Summary
            protected  java.lang.String alt
                      The alternate text for this image.
            protected  java.lang.String altKey
                      The message resources key for the alternate text for this image.
            protected  java.lang.String border
                      The border size around the image.
            protected  java.lang.String bundle
                      The servlet context attribute key for our resources.
            protected static java.util.Locale defaultLocale
                      The default Locale for our server.
            protected  java.lang.String locale
                      The session attribute key for our locale.
            protected  java.lang.String page
                      The context-relative URI of the image.
            protected  java.lang.String pageKey
                      The message resources key of the context-relative URI of the image.
            protected  java.lang.String property
                      The name attribute for the image button.
            protected  java.lang.String src
                      The URL of this image.
            protected  java.lang.String srcKey
                      The message resources key for the URL of this image.
             
            Fields inherited from class org.apache.struts.taglib.html.SubmitTag
            messages, text, value
             
            Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
            accesskey, disabled, onblur, onchange, onclick, ondblclick, onfocus, onkeydown, onkeypress, onkeyup, onmousedown, onmousemove, onmouseout, onmouseover, onmouseup, onselect, readonly, style, styleClass, styleId, tabindex, title
             
            Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            bodyContent
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
            EVAL_BODY_BUFFERED, EVAL_BODY_TAG
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            ImageTag()
                       
             
            Method Summary
            protected  java.lang.String alt()
                      Return the alternate text to be included on this generated element, or null if there is no such text.
             int doEndTag()
                      Process the end of this tag.
             int doStartTag()
                      Process the start of this tag.
             java.lang.String getAlt()
                       
             java.lang.String getAltKey()
                       
             java.lang.String getBorder()
                       
             java.lang.String getBundle()
                       
             java.lang.String getLocale()
                       
             java.lang.String getPage()
                       
             java.lang.String getPageKey()
                       
             java.lang.String getProperty()
                      Return the property.
             java.lang.String getSrc()
                       
             java.lang.String getSrcKey()
                       
             void release()
                      Release any acquired resources.
             void setAlt(java.lang.String alt)
                       
             void setAltKey(java.lang.String altKey)
                       
             void setBorder(java.lang.String border)
                       
             void setBundle(java.lang.String bundle)
                       
             void setLocale(java.lang.String locale)
                       
             void setPage(java.lang.String page)
                       
             void setPageKey(java.lang.String pageKey)
                       
             void setProperty(java.lang.String property)
                      Set the property name.
             void setSrc(java.lang.String src)
                       
             void setSrcKey(java.lang.String srcKey)
                       
            protected  java.lang.String src()
                      Return the base source URL that will be rendered in the src property for this generated element, or null if there is no such URL.
             
            Methods inherited from class org.apache.struts.taglib.html.SubmitTag
            doAfterBody, getValue, setValue
             
            Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
            getAccesskey, getDisabled, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, prepareEventHandlers, prepareFocusEvents, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setDisabled, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle
             
            Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            doInitBody, getBodyContent, getPreviousOut, setBodyContent
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             
            Methods inherited from interface javax.servlet.jsp.tagext.Tag
            getParent, setPageContext, setParent
             

            Field Detail

            defaultLocale

            protected static final java.util.Locale defaultLocale
            The default Locale for our server.

            alt

            protected java.lang.String alt
            The alternate text for this image.

            altKey

            protected java.lang.String altKey
            The message resources key for the alternate text for this image.

            border

            protected java.lang.String border
            The border size around the image.

            bundle

            protected java.lang.String bundle
            The servlet context attribute key for our resources.

            locale

            protected java.lang.String locale
            The session attribute key for our locale.

            page

            protected java.lang.String page
            The context-relative URI of the image.

            pageKey

            protected java.lang.String pageKey
            The message resources key of the context-relative URI of the image.

            property

            protected java.lang.String property
            The name attribute for the image button.

            src

            protected java.lang.String src
            The URL of this image.

            srcKey

            protected java.lang.String srcKey
            The message resources key for the URL of this image.
            Constructor Detail

            ImageTag

            public ImageTag()
            Method Detail

            getAlt

            public java.lang.String getAlt()

            setAlt

            public void setAlt(java.lang.String alt)

            getAltKey

            public java.lang.String getAltKey()

            setAltKey

            public void setAltKey(java.lang.String altKey)

            getBorder

            public java.lang.String getBorder()

            setBorder

            public void setBorder(java.lang.String border)

            getBundle

            public java.lang.String getBundle()

            setBundle

            public void setBundle(java.lang.String bundle)

            getLocale

            public java.lang.String getLocale()

            setLocale

            public void setLocale(java.lang.String locale)

            getPage

            public java.lang.String getPage()

            setPage

            public void setPage(java.lang.String page)

            getPageKey

            public java.lang.String getPageKey()

            setPageKey

            public void setPageKey(java.lang.String pageKey)

            getProperty

            public java.lang.String getProperty()
            Description copied from class: SubmitTag
            Return the property.
            Overrides:
            getProperty in class SubmitTag

            setProperty

            public void setProperty(java.lang.String property)
            Description copied from class: SubmitTag
            Set the property name.
            Overrides:
            setProperty in class SubmitTag
            Following copied from class: org.apache.struts.taglib.html.SubmitTag
            Parameters:
            property - The property name

            getSrc

            public java.lang.String getSrc()

            setSrc

            public void setSrc(java.lang.String src)

            getSrcKey

            public java.lang.String getSrcKey()

            setSrcKey

            public void setSrcKey(java.lang.String srcKey)

            doStartTag

            public int doStartTag()
                           throws javax.servlet.jsp.JspException
            Process the start of this tag.
            Overrides:
            doStartTag in class SubmitTag
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            doEndTag

            public int doEndTag()
                         throws javax.servlet.jsp.JspException
            Process the end of this tag.
            Overrides:
            doEndTag in class SubmitTag
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            release

            public void release()
            Release any acquired resources.
            Overrides:
            release in class SubmitTag

            alt

            protected java.lang.String alt()
                                    throws javax.servlet.jsp.JspException
            Return the alternate text to be included on this generated element, or null if there is no such text.
            Throws:
            javax.servlet.jsp.JspException - if an error occurs

            src

            protected java.lang.String src()
                                    throws javax.servlet.jsp.JspException
            Return the base source URL that will be rendered in the src property for this generated element, or null if there is no such URL.
            Throws:
            javax.servlet.jsp.JspException - if an error occurs


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/html/ImgTag.html0000644000175000017500000021150510404045216027615 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class ImgTag

            org.apache.struts.taglib.html
            Class ImgTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--javax.servlet.jsp.tagext.BodyTagSupport
                          |
                          +--org.apache.struts.taglib.html.BaseHandlerTag
                                |
                                +--org.apache.struts.taglib.html.ImgTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.BodyTag, javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class ImgTag
            extends BaseHandlerTag

            Generate an IMG tag to the specified image URI.

            TODO:

            • make the alt, src, and lowsrc settable from properties (for i18n)
            • handle onLoad, onAbort, and onError events (my JavaScript book is very old, there may be more unsupported events in the past couple of IE versions)

            Version:
            $Revision: 1.1 $
            Author:
            Michael Westbay, Craig McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  java.lang.String align
                      The property to specify where to align the image.
            protected  java.lang.String alt
                      The alternate text to display for the image.
            protected  java.lang.String altKey
                      The message lookup key used to look up internationalized messages.
            protected  java.lang.String border
                      The border size around the image.
            protected  java.lang.String bundle
                      The name of the servlet context attribute containing our message resources.
            protected static java.util.Locale defaultLocale
                      The default Locale for our server.
            protected  java.lang.String height
                      The image height.
            protected  java.lang.String hspace
                      The horizontal spacing around the image.
            protected  java.lang.String imageName
                      The image name for named images.
            protected  java.lang.String ismap
                      Server-side image map declaration.
            protected  java.lang.String locale
                      The name of the attribute containing the Locale to be used for looking up internationalized messages.
            protected  java.lang.String lowsrc
                      The low resolution image source URI.
            protected static MessageResources messages
                      The message resources for this package.
            protected  java.lang.String name
                      The JSP bean name for query parameters.
            protected  java.lang.String page
                      The context-relative path, starting with a slash character, of the image to be displayed by this rendered tag.
            protected  java.lang.String pageKey
                      The message resources key under which we should look up the page attribute for this generated tag, if any.
            protected  java.lang.String paramId
                      In situations where an image is dynamically generated (such as to create a chart graph), this specifies the single-parameter request parameter name to generate.
            protected  java.lang.String paramName
                      The single-parameter JSP bean name.
            protected  java.lang.String paramProperty
                      The single-parameter JSP bean property.
            protected  java.lang.String paramScope
                      The single-parameter JSP bean scope.
            protected  java.lang.String property
                      The JSP bean property name for query parameters.
            protected  java.lang.String scope
                      The scope of the bean specified by the name property, if any.
            protected  java.lang.String src
                      The image source URI.
            protected  java.lang.String srcKey
                      The message resources key under which we should look up the src attribute for this generated tag, if any.
            protected  java.lang.String usemap
                      Client-side image map declaration.
            protected  java.lang.String vspace
                      The vertical spacing around the image.
            protected  java.lang.String width
                      The image width.
             
            Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
            accesskey, disabled, onblur, onchange, onclick, ondblclick, onfocus, onkeydown, onkeypress, onkeyup, onmousedown, onmousemove, onmouseout, onmouseover, onmouseup, onselect, readonly, style, styleClass, styleId, tabindex, title
             
            Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            bodyContent
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
            EVAL_BODY_BUFFERED, EVAL_BODY_TAG
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            ImgTag()
                       
             
            Method Summary
            protected  java.lang.String alt()
                      Return the alternate text to be included on this generated element, or null if there is no such text.
             int doEndTag()
                      Render the end of the IMG tag.
             int doStartTag()
                      Render the beginning of the IMG tag.
             java.lang.String getAlign()
                       
             java.lang.String getAlt()
                       
             java.lang.String getAltKey()
                       
             java.lang.String getBorder()
                       
             java.lang.String getBundle()
                       
             java.lang.String getHeight()
                       
             java.lang.String getHspace()
                       
             java.lang.String getImageName()
                       
             java.lang.String getIsmap()
                       
             java.lang.String getLocale()
                       
             java.lang.String getLowsrc()
                       
             java.lang.String getName()
                       
             java.lang.String getPage()
                       
             java.lang.String getPageKey()
                       
             java.lang.String getParamId()
                       
             java.lang.String getParamName()
                       
             java.lang.String getParamProperty()
                       
             java.lang.String getParamScope()
                       
             java.lang.String getProperty()
                       
             java.lang.String getScope()
                       
             java.lang.String getSrc()
                       
             java.lang.String getSrcKey()
                       
             java.lang.String getUsemap()
                       
             java.lang.String getVspace()
                       
             java.lang.String getWidth()
                       
             void release()
                      Release any acquired resources.
             void setAlign(java.lang.String align)
                       
             void setAlt(java.lang.String alt)
                       
             void setAltKey(java.lang.String altKey)
                       
             void setBorder(java.lang.String border)
                       
             void setBundle(java.lang.String bundle)
                       
             void setHeight(java.lang.String height)
                       
             void setHspace(java.lang.String hspace)
                       
             void setImageName(java.lang.String imageName)
                       
             void setIsmap(java.lang.String ismap)
                       
             void setLocale(java.lang.String locale)
                       
             void setLowsrc(java.lang.String lowsrc)
                       
             void setName(java.lang.String name)
                       
             void setPage(java.lang.String page)
                       
             void setPageKey(java.lang.String pageKey)
                       
             void setParamId(java.lang.String paramId)
                       
             void setParamName(java.lang.String paramName)
                       
             void setParamProperty(java.lang.String paramProperty)
                       
             void setParamScope(java.lang.String paramScope)
                       
             void setProperty(java.lang.String property)
                       
             void setScope(java.lang.String scope)
                       
             void setSrc(java.lang.String src)
                       
             void setSrcKey(java.lang.String srcKey)
                       
             void setUsemap(java.lang.String usemap)
                       
             void setVspace(java.lang.String vspace)
                       
             void setWidth(java.lang.String width)
                       
            protected  java.lang.String src()
                      Return the base source URL that will be rendered in the src property for this generated element, or null if there is no such URL.
            protected  java.lang.String url(java.lang.String url)
                      Return the specified src URL, modified as necessary with optional request parameters.
             
            Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
            getAccesskey, getDisabled, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, prepareEventHandlers, prepareFocusEvents, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setDisabled, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle
             
            Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            doAfterBody, doInitBody, getBodyContent, getPreviousOut, setBodyContent
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             
            Methods inherited from interface javax.servlet.jsp.tagext.Tag
            getParent, setPageContext, setParent
             

            Field Detail

            align

            protected java.lang.String align
            The property to specify where to align the image.

            alt

            protected java.lang.String alt
            The alternate text to display for the image. This is used for text based browsers and/or as a "tool-tip" for the image.

            altKey

            protected java.lang.String altKey
            The message lookup key used to look up internationalized messages.

            border

            protected java.lang.String border
            The border size around the image.

            bundle

            protected java.lang.String bundle
            The name of the servlet context attribute containing our message resources.

            defaultLocale

            protected static final java.util.Locale defaultLocale
            The default Locale for our server.

            height

            protected java.lang.String height
            The image height.

            hspace

            protected java.lang.String hspace
            The horizontal spacing around the image.

            imageName

            protected java.lang.String imageName
            The image name for named images.

            ismap

            protected java.lang.String ismap
            Server-side image map declaration.

            locale

            protected java.lang.String locale
            The name of the attribute containing the Locale to be used for looking up internationalized messages.

            lowsrc

            protected java.lang.String lowsrc
            The low resolution image source URI.

            messages

            protected static MessageResources messages
            The message resources for this package.

            name

            protected java.lang.String name
            The JSP bean name for query parameters.

            page

            protected java.lang.String page
            The context-relative path, starting with a slash character, of the image to be displayed by this rendered tag.

            pageKey

            protected java.lang.String pageKey
            The message resources key under which we should look up the page attribute for this generated tag, if any.

            paramId

            protected java.lang.String paramId
            In situations where an image is dynamically generated (such as to create a chart graph), this specifies the single-parameter request parameter name to generate.

            paramName

            protected java.lang.String paramName
            The single-parameter JSP bean name.

            paramProperty

            protected java.lang.String paramProperty
            The single-parameter JSP bean property.

            paramScope

            protected java.lang.String paramScope
            The single-parameter JSP bean scope.

            property

            protected java.lang.String property
            The JSP bean property name for query parameters.

            scope

            protected java.lang.String scope
            The scope of the bean specified by the name property, if any.

            src

            protected java.lang.String src
            The image source URI.

            srcKey

            protected java.lang.String srcKey
            The message resources key under which we should look up the src attribute for this generated tag, if any.

            usemap

            protected java.lang.String usemap
            Client-side image map declaration.

            vspace

            protected java.lang.String vspace
            The vertical spacing around the image.

            width

            protected java.lang.String width
            The image width.
            Constructor Detail

            ImgTag

            public ImgTag()
            Method Detail

            getAlign

            public java.lang.String getAlign()

            setAlign

            public void setAlign(java.lang.String align)

            getAlt

            public java.lang.String getAlt()

            setAlt

            public void setAlt(java.lang.String alt)

            getAltKey

            public java.lang.String getAltKey()

            setAltKey

            public void setAltKey(java.lang.String altKey)

            getBorder

            public java.lang.String getBorder()

            setBorder

            public void setBorder(java.lang.String border)

            getBundle

            public java.lang.String getBundle()

            setBundle

            public void setBundle(java.lang.String bundle)

            getHeight

            public java.lang.String getHeight()

            setHeight

            public void setHeight(java.lang.String height)

            getHspace

            public java.lang.String getHspace()

            setHspace

            public void setHspace(java.lang.String hspace)

            getImageName

            public java.lang.String getImageName()

            setImageName

            public void setImageName(java.lang.String imageName)

            getIsmap

            public java.lang.String getIsmap()

            setIsmap

            public void setIsmap(java.lang.String ismap)

            getLocale

            public java.lang.String getLocale()

            setLocale

            public void setLocale(java.lang.String locale)

            getLowsrc

            public java.lang.String getLowsrc()

            setLowsrc

            public void setLowsrc(java.lang.String lowsrc)

            getName

            public java.lang.String getName()

            setName

            public void setName(java.lang.String name)

            getPage

            public java.lang.String getPage()

            setPage

            public void setPage(java.lang.String page)

            getPageKey

            public java.lang.String getPageKey()

            setPageKey

            public void setPageKey(java.lang.String pageKey)

            getParamId

            public java.lang.String getParamId()

            setParamId

            public void setParamId(java.lang.String paramId)

            getParamName

            public java.lang.String getParamName()

            setParamName

            public void setParamName(java.lang.String paramName)

            getParamProperty

            public java.lang.String getParamProperty()

            setParamProperty

            public void setParamProperty(java.lang.String paramProperty)

            getParamScope

            public java.lang.String getParamScope()

            setParamScope

            public void setParamScope(java.lang.String paramScope)

            getProperty

            public java.lang.String getProperty()

            setProperty

            public void setProperty(java.lang.String property)

            getScope

            public java.lang.String getScope()

            setScope

            public void setScope(java.lang.String scope)

            getSrc

            public java.lang.String getSrc()

            setSrc

            public void setSrc(java.lang.String src)

            getSrcKey

            public java.lang.String getSrcKey()

            setSrcKey

            public void setSrcKey(java.lang.String srcKey)

            getUsemap

            public java.lang.String getUsemap()

            setUsemap

            public void setUsemap(java.lang.String usemap)

            getVspace

            public java.lang.String getVspace()

            setVspace

            public void setVspace(java.lang.String vspace)

            getWidth

            public java.lang.String getWidth()

            setWidth

            public void setWidth(java.lang.String width)

            doStartTag

            public int doStartTag()
                           throws javax.servlet.jsp.JspException
            Render the beginning of the IMG tag.
            Overrides:
            doStartTag in class javax.servlet.jsp.tagext.BodyTagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            doEndTag

            public int doEndTag()
                         throws javax.servlet.jsp.JspException
            Render the end of the IMG tag.
            Overrides:
            doEndTag in class javax.servlet.jsp.tagext.BodyTagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            release

            public void release()
            Release any acquired resources.
            Overrides:
            release in class BaseHandlerTag

            alt

            protected java.lang.String alt()
                                    throws javax.servlet.jsp.JspException
            Return the alternate text to be included on this generated element, or null if there is no such text.
            Throws:
            javax.servlet.jsp.JspException - if an error occurs

            src

            protected java.lang.String src()
                                    throws javax.servlet.jsp.JspException
            Return the base source URL that will be rendered in the src property for this generated element, or null if there is no such URL.
            Throws:
            javax.servlet.jsp.JspException - if an error occurs

            url

            protected java.lang.String url(java.lang.String url)
                                    throws javax.servlet.jsp.JspException
            Return the specified src URL, modified as necessary with optional request parameters.

            This is based on the way a hyperlink is generated for the LinkTag.

            Parameters:
            url - The URL to be modified (or null if this url will not be used)
            Throws:
            javax.servlet.jsp.JspException - if an error occurs preparing the URL
            See Also:
            LinkTag#hyperlink


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/html/LinkTag.html0000644000175000017500000014103410404045226027776 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class LinkTag

            org.apache.struts.taglib.html
            Class LinkTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--javax.servlet.jsp.tagext.BodyTagSupport
                          |
                          +--org.apache.struts.taglib.html.BaseHandlerTag
                                |
                                +--org.apache.struts.taglib.html.LinkTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.BodyTag, javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag
            Direct Known Subclasses:
            RewriteTag

            public class LinkTag
            extends BaseHandlerTag

            Generate a URL-encoded hyperlink to the specified URI.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  java.lang.String anchor
                      The anchor to be added to the end of the generated hyperlink.
            protected  java.lang.String forward
                      The logical forward name from which to retrieve the hyperlink URI.
            protected  java.lang.String href
                      The hyperlink URI.
            protected  java.lang.String linkName
                      The link name for named links.
            protected static MessageResources messages
                      The message resources for this package.
            protected  java.lang.String name
                      The JSP bean name for query parameters.
            protected  java.lang.String page
                      The context-relative page URL (beginning with a slash) to which this hyperlink will be rendered.
            protected  java.lang.String paramId
                      The single-parameter request parameter name to generate.
            protected  java.lang.String paramName
                      The single-parameter JSP bean name.
            protected  java.lang.String paramProperty
                      The single-parameter JSP bean property.
            protected  java.lang.String paramScope
                      The single-parameter JSP bean scope.
            protected  java.lang.String property
                      The JSP bean property name for query parameters.
            protected  java.lang.String scope
                      The scope of the bean specified by the name property, if any.
            protected  java.lang.String target
                      The window target.
            protected  java.lang.String text
                      The body content of this tag (if any).
            protected  boolean transaction
                      Include transaction token (if any) in the hyperlink?
             
            Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
            accesskey, disabled, onblur, onchange, onclick, ondblclick, onfocus, onkeydown, onkeypress, onkeyup, onmousedown, onmousemove, onmouseout, onmouseover, onmouseup, onselect, readonly, style, styleClass, styleId, tabindex, title
             
            Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            bodyContent
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
            EVAL_BODY_BUFFERED, EVAL_BODY_TAG
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            LinkTag()
                       
             
            Method Summary
             int doAfterBody()
                      Save the associated label from the body content.
             int doEndTag()
                      Render the end of the hyperlink.
             int doStartTag()
                      Render the beginning of the hyperlink.
             java.lang.String getAnchor()
                       
             java.lang.String getForward()
                       
             java.lang.String getHref()
                       
             java.lang.String getLinkName()
                       
             java.lang.String getName()
                       
             java.lang.String getPage()
                       
             java.lang.String getParamId()
                       
             java.lang.String getParamName()
                       
             java.lang.String getParamProperty()
                       
             java.lang.String getParamScope()
                       
             java.lang.String getProperty()
                       
             java.lang.String getScope()
                       
             java.lang.String getTarget()
                       
             boolean getTransaction()
                       
             void release()
                      Release any acquired resources.
             void setAnchor(java.lang.String anchor)
                       
             void setForward(java.lang.String forward)
                       
             void setHref(java.lang.String href)
                       
             void setLinkName(java.lang.String linkName)
                       
             void setName(java.lang.String name)
                       
             void setPage(java.lang.String page)
                       
             void setParamId(java.lang.String paramId)
                       
             void setParamName(java.lang.String paramName)
                       
             void setParamProperty(java.lang.String paramProperty)
                       
             void setParamScope(java.lang.String paramScope)
                       
             void setProperty(java.lang.String property)
                       
             void setScope(java.lang.String scope)
                       
             void setTarget(java.lang.String target)
                       
             void setTransaction(boolean transaction)
                       
             
            Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
            getAccesskey, getDisabled, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, prepareEventHandlers, prepareFocusEvents, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setDisabled, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle
             
            Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            doInitBody, getBodyContent, getPreviousOut, setBodyContent
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             
            Methods inherited from interface javax.servlet.jsp.tagext.Tag
            getParent, setPageContext, setParent
             

            Field Detail

            text

            protected java.lang.String text
            The body content of this tag (if any).

            anchor

            protected java.lang.String anchor
            The anchor to be added to the end of the generated hyperlink.

            forward

            protected java.lang.String forward
            The logical forward name from which to retrieve the hyperlink URI.

            href

            protected java.lang.String href
            The hyperlink URI.

            linkName

            protected java.lang.String linkName
            The link name for named links.

            messages

            protected static MessageResources messages
            The message resources for this package.

            name

            protected java.lang.String name
            The JSP bean name for query parameters.

            page

            protected java.lang.String page
            The context-relative page URL (beginning with a slash) to which this hyperlink will be rendered.

            paramId

            protected java.lang.String paramId
            The single-parameter request parameter name to generate.

            paramName

            protected java.lang.String paramName
            The single-parameter JSP bean name.

            paramProperty

            protected java.lang.String paramProperty
            The single-parameter JSP bean property.

            paramScope

            protected java.lang.String paramScope
            The single-parameter JSP bean scope.

            property

            protected java.lang.String property
            The JSP bean property name for query parameters.

            scope

            protected java.lang.String scope
            The scope of the bean specified by the name property, if any.

            target

            protected java.lang.String target
            The window target.

            transaction

            protected boolean transaction
            Include transaction token (if any) in the hyperlink?
            Constructor Detail

            LinkTag

            public LinkTag()
            Method Detail

            getAnchor

            public java.lang.String getAnchor()

            setAnchor

            public void setAnchor(java.lang.String anchor)

            getForward

            public java.lang.String getForward()

            setForward

            public void setForward(java.lang.String forward)

            getHref

            public java.lang.String getHref()

            setHref

            public void setHref(java.lang.String href)

            getLinkName

            public java.lang.String getLinkName()

            setLinkName

            public void setLinkName(java.lang.String linkName)

            getName

            public java.lang.String getName()

            setName

            public void setName(java.lang.String name)

            getPage

            public java.lang.String getPage()

            setPage

            public void setPage(java.lang.String page)

            getParamId

            public java.lang.String getParamId()

            setParamId

            public void setParamId(java.lang.String paramId)

            getParamName

            public java.lang.String getParamName()

            setParamName

            public void setParamName(java.lang.String paramName)

            getParamProperty

            public java.lang.String getParamProperty()

            setParamProperty

            public void setParamProperty(java.lang.String paramProperty)

            getParamScope

            public java.lang.String getParamScope()

            setParamScope

            public void setParamScope(java.lang.String paramScope)

            getProperty

            public java.lang.String getProperty()

            setProperty

            public void setProperty(java.lang.String property)

            getScope

            public java.lang.String getScope()

            setScope

            public void setScope(java.lang.String scope)

            getTarget

            public java.lang.String getTarget()

            setTarget

            public void setTarget(java.lang.String target)

            getTransaction

            public boolean getTransaction()

            setTransaction

            public void setTransaction(boolean transaction)

            doStartTag

            public int doStartTag()
                           throws javax.servlet.jsp.JspException
            Render the beginning of the hyperlink.
            Overrides:
            doStartTag in class javax.servlet.jsp.tagext.BodyTagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            doAfterBody

            public int doAfterBody()
                            throws javax.servlet.jsp.JspException
            Save the associated label from the body content.
            Overrides:
            doAfterBody in class javax.servlet.jsp.tagext.BodyTagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            doEndTag

            public int doEndTag()
                         throws javax.servlet.jsp.JspException
            Render the end of the hyperlink.
            Overrides:
            doEndTag in class javax.servlet.jsp.tagext.BodyTagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            release

            public void release()
            Release any acquired resources.
            Overrides:
            release in class BaseHandlerTag


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/html/MultiboxTag.html0000644000175000017500000007725110404045220030707 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class MultiboxTag

            org.apache.struts.taglib.html
            Class MultiboxTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--javax.servlet.jsp.tagext.BodyTagSupport
                          |
                          +--org.apache.struts.taglib.html.BaseHandlerTag
                                |
                                +--org.apache.struts.taglib.html.MultiboxTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.BodyTag, javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class MultiboxTag
            extends BaseHandlerTag

            Tag for input fields of type "checkbox". This differs from CheckboxTag because it assumes that the underlying property is an array getter (of any supported primitive type, or String), and the checkbox is initialized to "checked" if the value listed for the "value" attribute is present in the values returned by the property getter.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Ralph Schaer, Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  java.lang.String constant
                      The constant String value to be returned when this checkbox is selected and the form is submitted.
            protected static MessageResources messages
                      The message resources for this package.
            protected  java.lang.String name
                      The name of the bean containing our underlying property.
            protected  java.lang.String property
                      The property name for this field.
            protected  java.lang.String value
                      The value which will mark this checkbox as "checked" if present in the array returned by our property getter.
             
            Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
            accesskey, disabled, onblur, onchange, onclick, ondblclick, onfocus, onkeydown, onkeypress, onkeyup, onmousedown, onmousemove, onmouseout, onmouseover, onmouseup, onselect, readonly, style, styleClass, styleId, tabindex, title
             
            Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            bodyContent
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
            EVAL_BODY_BUFFERED, EVAL_BODY_TAG
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            MultiboxTag()
                       
             
            Method Summary
             int doAfterBody()
                      Save the body contents of this tag as the constant that we will be returning.
             int doEndTag()
                      Render an input element for this tag.
             int doStartTag()
                      Process the beginning of this tag.
             java.lang.String getName()
                       
             java.lang.String getProperty()
                      Return the property name.
             java.lang.String getValue()
                      Return the server value.
             void release()
                      Release any acquired resources.
             void setName(java.lang.String name)
                       
             void setProperty(java.lang.String property)
                      Set the property name.
             void setValue(java.lang.String value)
                      Set the server value.
             
            Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
            getAccesskey, getDisabled, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, prepareEventHandlers, prepareFocusEvents, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setDisabled, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle
             
            Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            doInitBody, getBodyContent, getPreviousOut, setBodyContent
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             
            Methods inherited from interface javax.servlet.jsp.tagext.Tag
            getParent, setPageContext, setParent
             

            Field Detail

            constant

            protected java.lang.String constant
            The constant String value to be returned when this checkbox is selected and the form is submitted.

            messages

            protected static MessageResources messages
            The message resources for this package.

            name

            protected java.lang.String name
            The name of the bean containing our underlying property.

            property

            protected java.lang.String property
            The property name for this field.

            value

            protected java.lang.String value
            The value which will mark this checkbox as "checked" if present in the array returned by our property getter.
            Constructor Detail

            MultiboxTag

            public MultiboxTag()
            Method Detail

            getName

            public java.lang.String getName()

            setName

            public void setName(java.lang.String name)

            getProperty

            public java.lang.String getProperty()
            Return the property name.

            setProperty

            public void setProperty(java.lang.String property)
            Set the property name.
            Parameters:
            property - The new property name

            getValue

            public java.lang.String getValue()
            Return the server value.

            setValue

            public void setValue(java.lang.String value)
            Set the server value.
            Parameters:
            value - The new server value

            doStartTag

            public int doStartTag()
                           throws javax.servlet.jsp.JspException
            Process the beginning of this tag.
            Overrides:
            doStartTag in class javax.servlet.jsp.tagext.BodyTagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            doAfterBody

            public int doAfterBody()
                            throws javax.servlet.jsp.JspException
            Save the body contents of this tag as the constant that we will be returning.
            Overrides:
            doAfterBody in class javax.servlet.jsp.tagext.BodyTagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            doEndTag

            public int doEndTag()
                         throws javax.servlet.jsp.JspException
            Render an input element for this tag.
            Overrides:
            doEndTag in class javax.servlet.jsp.tagext.BodyTagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            release

            public void release()
            Release any acquired resources.
            Overrides:
            release in class BaseHandlerTag


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/html/OptionTag.html0000644000175000017500000006511710404045250030355 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class OptionTag

            org.apache.struts.taglib.html
            Class OptionTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--javax.servlet.jsp.tagext.BodyTagSupport
                          |
                          +--org.apache.struts.taglib.html.OptionTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.BodyTag, javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class OptionTag
            extends javax.servlet.jsp.tagext.BodyTagSupport

            Tag for select options. The body of this tag is presented to the user in the option list, while the value attribute is the value returned to the server if this option is selected.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  java.lang.String bundle
                      The name of the servlet context attribute containing our message resources.
            protected static java.util.Locale defaultLocale
                      The default locale for our server.
            protected  boolean disabled
                      Is this option disabled?
            protected  java.lang.String key
                      The key used to look up the text displayed to the user for this option, if any.
            protected  java.lang.String locale
                      The name of the attribute containing the Locale to be used for looking up internationalized messages.
            protected static MessageResources messages
                      The message resources for this package.
            protected  java.lang.String text
                      The message text to be displayed to the user for this tag (if any)
            protected  java.lang.String value
                      The server value for this option, also used to match against the current property value to determine whether this option should be marked as selected.
             
            Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            bodyContent
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
            EVAL_BODY_BUFFERED, EVAL_BODY_TAG
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            OptionTag()
                       
             
            Method Summary
             int doAfterBody()
                      Process the body text of this tag (if any).
             int doEndTag()
                      Process the end of this tag.
             int doStartTag()
                      Process the start of this tag.
             java.lang.String getBundle()
                       
             boolean getDisabled()
                       
             java.lang.String getKey()
                       
             java.lang.String getLocale()
                       
             java.lang.String getValue()
                       
             void release()
                      Release any acquired resources.
             void setBundle(java.lang.String bundle)
                       
             void setDisabled(boolean disabled)
                       
             void setKey(java.lang.String key)
                       
             void setLocale(java.lang.String locale)
                       
             void setValue(java.lang.String value)
                       
            protected  java.lang.String text()
                      Return the text to be displayed to the user for this option (if any).
             
            Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            doInitBody, getBodyContent, getPreviousOut, setBodyContent
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             
            Methods inherited from interface javax.servlet.jsp.tagext.Tag
            getParent, setPageContext, setParent
             

            Field Detail

            defaultLocale

            protected static final java.util.Locale defaultLocale
            The default locale for our server.

            messages

            protected static MessageResources messages
            The message resources for this package.

            text

            protected java.lang.String text
            The message text to be displayed to the user for this tag (if any)

            bundle

            protected java.lang.String bundle
            The name of the servlet context attribute containing our message resources.

            disabled

            protected boolean disabled
            Is this option disabled?

            key

            protected java.lang.String key
            The key used to look up the text displayed to the user for this option, if any.

            locale

            protected java.lang.String locale
            The name of the attribute containing the Locale to be used for looking up internationalized messages.

            value

            protected java.lang.String value
            The server value for this option, also used to match against the current property value to determine whether this option should be marked as selected.
            Constructor Detail

            OptionTag

            public OptionTag()
            Method Detail

            getBundle

            public java.lang.String getBundle()

            setBundle

            public void setBundle(java.lang.String bundle)

            getDisabled

            public boolean getDisabled()

            setDisabled

            public void setDisabled(boolean disabled)

            getKey

            public java.lang.String getKey()

            setKey

            public void setKey(java.lang.String key)

            getLocale

            public java.lang.String getLocale()

            setLocale

            public void setLocale(java.lang.String locale)

            getValue

            public java.lang.String getValue()

            setValue

            public void setValue(java.lang.String value)

            doStartTag

            public int doStartTag()
                           throws javax.servlet.jsp.JspException
            Process the start of this tag.
            Overrides:
            doStartTag in class javax.servlet.jsp.tagext.BodyTagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            doAfterBody

            public int doAfterBody()
                            throws javax.servlet.jsp.JspException
            Process the body text of this tag (if any).
            Overrides:
            doAfterBody in class javax.servlet.jsp.tagext.BodyTagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            doEndTag

            public int doEndTag()
                         throws javax.servlet.jsp.JspException
            Process the end of this tag.
            Overrides:
            doEndTag in class javax.servlet.jsp.tagext.BodyTagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            release

            public void release()
            Release any acquired resources.
            Overrides:
            release in class javax.servlet.jsp.tagext.BodyTagSupport

            text

            protected java.lang.String text()
                                     throws javax.servlet.jsp.JspException
            Return the text to be displayed to the user for this option (if any).
            Throws:
            javax.servlet.jsp.JspException - if an error occurs


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/html/OptionsTag.html0000644000175000017500000006212610404045224030536 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class OptionsTag

            org.apache.struts.taglib.html
            Class OptionsTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--org.apache.struts.taglib.html.OptionsTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class OptionsTag
            extends javax.servlet.jsp.tagext.TagSupport

            Tag for creating multiple <select> options from a collection. The associated values displayed to the user may optionally be specified by a second collection, or will be the same as the values themselves. Each collection may be an array of objects, a Collection, an Enumeration, an Iterator, or a Map. NOTE - This tag requires a Java2 (JDK 1.2 or later) platform.

            Author:
            Florent Carpentier, Craig McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  java.lang.String collection
                      The name of the collection containing beans that have properties to provide both the values and the labels (identified by the property and labelProperty attributes).
            protected  java.lang.String labelName
                      The name of the bean containing the labels collection.
            protected  java.lang.String labelProperty
                      The bean property containing the labels collection.
            protected static MessageResources messages
                      The message resources for this package.
            protected  java.lang.String name
                      The name of the bean containing the values collection.
            protected  java.lang.String property
                      The name of the property to use to build the values collection.
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            OptionsTag()
                       
             
            Method Summary
            protected  void addOption(java.lang.StringBuffer sb, java.lang.String value, java.lang.String label, boolean matched)
                      Add an option element to the specified StringBuffer based on the specified parameters.
             int doEndTag()
                      Process the end of this tag.
             int doStartTag()
                      Process the start of this tag.
             java.lang.String getCollection()
                       
            protected  java.util.Iterator getIterator(java.lang.String name, java.lang.String property)
                      Return an iterator for the option labels or values, based on our configured properties.
             java.lang.String getLabelName()
                       
             java.lang.String getLabelProperty()
                       
             java.lang.String getName()
                       
             java.lang.String getProperty()
                       
             void release()
                      Release any acquired resources.
             void setCollection(java.lang.String collection)
                       
             void setLabelName(java.lang.String labelName)
                       
             void setLabelProperty(java.lang.String labelProperty)
                       
             void setName(java.lang.String name)
                       
             void setProperty(java.lang.String property)
                       
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            doAfterBody, findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            messages

            protected static MessageResources messages
            The message resources for this package.

            collection

            protected java.lang.String collection
            The name of the collection containing beans that have properties to provide both the values and the labels (identified by the property and labelProperty attributes).

            labelName

            protected java.lang.String labelName
            The name of the bean containing the labels collection.

            labelProperty

            protected java.lang.String labelProperty
            The bean property containing the labels collection.

            name

            protected java.lang.String name
            The name of the bean containing the values collection.

            property

            protected java.lang.String property
            The name of the property to use to build the values collection.
            Constructor Detail

            OptionsTag

            public OptionsTag()
            Method Detail

            getCollection

            public java.lang.String getCollection()

            setCollection

            public void setCollection(java.lang.String collection)

            getLabelName

            public java.lang.String getLabelName()

            setLabelName

            public void setLabelName(java.lang.String labelName)

            getLabelProperty

            public java.lang.String getLabelProperty()

            setLabelProperty

            public void setLabelProperty(java.lang.String labelProperty)

            getName

            public java.lang.String getName()

            setName

            public void setName(java.lang.String name)

            getProperty

            public java.lang.String getProperty()

            setProperty

            public void setProperty(java.lang.String property)

            doStartTag

            public int doStartTag()
                           throws javax.servlet.jsp.JspException
            Process the start of this tag.
            Overrides:
            doStartTag in class javax.servlet.jsp.tagext.TagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            doEndTag

            public int doEndTag()
                         throws javax.servlet.jsp.JspException
            Process the end of this tag.
            Overrides:
            doEndTag in class javax.servlet.jsp.tagext.TagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            release

            public void release()
            Release any acquired resources.
            Overrides:
            release in class javax.servlet.jsp.tagext.TagSupport

            addOption

            protected void addOption(java.lang.StringBuffer sb,
                                     java.lang.String value,
                                     java.lang.String label,
                                     boolean matched)
            Add an option element to the specified StringBuffer based on the specified parameters.
            Parameters:
            sb - StringBuffer accumulating our results
            value - Value to be returned to the server for this option
            label - Value to be shown to the user for this option
            matched - Should this value be marked as selected?

            getIterator

            protected java.util.Iterator getIterator(java.lang.String name,
                                                     java.lang.String property)
                                              throws javax.servlet.jsp.JspException
            Return an iterator for the option labels or values, based on our configured properties.
            Parameters:
            name - Name of the bean attribute (if any)
            property - Name of the bean property (if any)
            Throws:
            javax.servlet.jsp.JspException - if an error occurs


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/html/PasswordTag.html0000644000175000017500000006357210404045232030712 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class PasswordTag

            org.apache.struts.taglib.html
            Class PasswordTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--javax.servlet.jsp.tagext.BodyTagSupport
                          |
                          +--org.apache.struts.taglib.html.BaseHandlerTag
                                |
                                +--org.apache.struts.taglib.html.BaseInputTag
                                      |
                                      +--org.apache.struts.taglib.html.BaseFieldTag
                                            |
                                            +--org.apache.struts.taglib.html.PasswordTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.BodyTag, javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class PasswordTag
            extends BaseFieldTag

            Custom tag for input fields of type "text".

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Fields inherited from class org.apache.struts.taglib.html.BaseFieldTag
            accept, name, redisplay, type
             
            Fields inherited from class org.apache.struts.taglib.html.BaseInputTag
            cols, maxlength, messages, property, rows, value
             
            Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
            accesskey, disabled, onblur, onchange, onclick, ondblclick, onfocus, onkeydown, onkeypress, onkeyup, onmousedown, onmousemove, onmouseout, onmouseover, onmouseup, onselect, readonly, style, styleClass, styleId, tabindex, title
             
            Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            bodyContent
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
            EVAL_BODY_BUFFERED, EVAL_BODY_TAG
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            PasswordTag()
                      Construct a new instance of this tag.
             
            Methods inherited from class org.apache.struts.taglib.html.BaseFieldTag
            doStartTag, getAccept, getName, getRedisplay, release, setAccept, setName, setRedisplay
             
            Methods inherited from class org.apache.struts.taglib.html.BaseInputTag
            doEndTag, getCols, getMaxlength, getProperty, getRows, getSize, getValue, setCols, setMaxlength, setProperty, setRows, setSize, setValue
             
            Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
            getAccesskey, getDisabled, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, prepareEventHandlers, prepareFocusEvents, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setDisabled, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle
             
            Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            doAfterBody, doInitBody, getBodyContent, getPreviousOut, setBodyContent
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             
            Methods inherited from interface javax.servlet.jsp.tagext.Tag
            getParent, setPageContext, setParent
             

            Constructor Detail

            PasswordTag

            public PasswordTag()
            Construct a new instance of this tag.


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/html/RadioTag.html0000644000175000017500000007573110404045210030142 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class RadioTag

            org.apache.struts.taglib.html
            Class RadioTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--javax.servlet.jsp.tagext.BodyTagSupport
                          |
                          +--org.apache.struts.taglib.html.BaseHandlerTag
                                |
                                +--org.apache.struts.taglib.html.RadioTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.BodyTag, javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class RadioTag
            extends BaseHandlerTag

            Tag for input fields of type "radio".

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected static MessageResources messages
                      The message resources for this package.
            protected  java.lang.String name
                      The name of the bean containing our underlying property.
            protected  java.lang.String property
                      The property name for this field.
            protected  java.lang.String text
                      The body content of this tag (if any).
            protected  java.lang.String value
                      The server value for this option.
             
            Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
            accesskey, disabled, onblur, onchange, onclick, ondblclick, onfocus, onkeydown, onkeypress, onkeyup, onmousedown, onmousemove, onmouseout, onmouseover, onmouseup, onselect, readonly, style, styleClass, styleId, tabindex, title
             
            Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            bodyContent
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
            EVAL_BODY_BUFFERED, EVAL_BODY_TAG
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            RadioTag()
                       
             
            Method Summary
             int doAfterBody()
                      Save the associated label from the body content.
             int doEndTag()
                      Optionally render the associated label from the body content.
             int doStartTag()
                      Generate the required input tag.
             java.lang.String getName()
                       
             java.lang.String getProperty()
                      Return the property name.
             java.lang.String getValue()
                      Return the server value.
             void release()
                      Release any acquired resources.
             void setName(java.lang.String name)
                       
             void setProperty(java.lang.String property)
                      Set the property name.
             void setValue(java.lang.String value)
                      Set the server value.
             
            Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
            getAccesskey, getDisabled, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, prepareEventHandlers, prepareFocusEvents, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setDisabled, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle
             
            Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            doInitBody, getBodyContent, getPreviousOut, setBodyContent
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             
            Methods inherited from interface javax.servlet.jsp.tagext.Tag
            getParent, setPageContext, setParent
             

            Field Detail

            messages

            protected static MessageResources messages
            The message resources for this package.

            name

            protected java.lang.String name
            The name of the bean containing our underlying property.

            property

            protected java.lang.String property
            The property name for this field.

            text

            protected java.lang.String text
            The body content of this tag (if any).

            value

            protected java.lang.String value
            The server value for this option.
            Constructor Detail

            RadioTag

            public RadioTag()
            Method Detail

            getName

            public java.lang.String getName()

            setName

            public void setName(java.lang.String name)

            getProperty

            public java.lang.String getProperty()
            Return the property name.

            setProperty

            public void setProperty(java.lang.String property)
            Set the property name.
            Parameters:
            name - The new property name

            getValue

            public java.lang.String getValue()
            Return the server value.

            setValue

            public void setValue(java.lang.String value)
            Set the server value.
            Parameters:
            value - The new server value

            doStartTag

            public int doStartTag()
                           throws javax.servlet.jsp.JspException
            Generate the required input tag.
            Overrides:
            doStartTag in class javax.servlet.jsp.tagext.BodyTagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            doAfterBody

            public int doAfterBody()
                            throws javax.servlet.jsp.JspException
            Save the associated label from the body content.
            Overrides:
            doAfterBody in class javax.servlet.jsp.tagext.BodyTagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            doEndTag

            public int doEndTag()
                         throws javax.servlet.jsp.JspException
            Optionally render the associated label from the body content.
            Overrides:
            doEndTag in class javax.servlet.jsp.tagext.BodyTagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            release

            public void release()
            Release any acquired resources.
            Overrides:
            release in class BaseHandlerTag


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/html/ResetTag.html0000644000175000017500000007234010404045216030165 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class ResetTag

            org.apache.struts.taglib.html
            Class ResetTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--javax.servlet.jsp.tagext.BodyTagSupport
                          |
                          +--org.apache.struts.taglib.html.BaseHandlerTag
                                |
                                +--org.apache.struts.taglib.html.ResetTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.BodyTag, javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class ResetTag
            extends BaseHandlerTag

            Tag for input fields of type "reset".

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected static MessageResources messages
                      The message resources for this package.
            protected  java.lang.String name
                      The name of the generated input field.
            protected  java.lang.String text
                      The body content of this tag (if any).
            protected  java.lang.String value
                      The value of the button label.
             
            Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
            accesskey, disabled, onblur, onchange, onclick, ondblclick, onfocus, onkeydown, onkeypress, onkeyup, onmousedown, onmousemove, onmouseout, onmouseover, onmouseup, onselect, readonly, style, styleClass, styleId, tabindex, title
             
            Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            bodyContent
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
            EVAL_BODY_BUFFERED, EVAL_BODY_TAG
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            ResetTag()
                       
             
            Method Summary
             int doAfterBody()
                      Save the associated label from the body content.
             int doEndTag()
                      Process the end of this tag.
             int doStartTag()
                      Process the start of this tag.
             java.lang.String getName()
                      Return the field name.
             java.lang.String getValue()
                      Return the label value.
             void release()
                      Release any acquired resources.
             void setName(java.lang.String name)
                      Set the field name.
             void setValue(java.lang.String value)
                      Set the label value.
             
            Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
            getAccesskey, getDisabled, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, prepareEventHandlers, prepareFocusEvents, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setDisabled, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle
             
            Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            doInitBody, getBodyContent, getPreviousOut, setBodyContent
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             
            Methods inherited from interface javax.servlet.jsp.tagext.Tag
            getParent, setPageContext, setParent
             

            Field Detail

            messages

            protected static MessageResources messages
            The message resources for this package.

            name

            protected java.lang.String name
            The name of the generated input field.

            text

            protected java.lang.String text
            The body content of this tag (if any).

            value

            protected java.lang.String value
            The value of the button label.
            Constructor Detail

            ResetTag

            public ResetTag()
            Method Detail

            getName

            public java.lang.String getName()
            Return the field name.

            setName

            public void setName(java.lang.String name)
            Set the field name.
            Parameters:
            name - The field name

            getValue

            public java.lang.String getValue()
            Return the label value.

            setValue

            public void setValue(java.lang.String value)
            Set the label value.
            Parameters:
            value - The label value

            doStartTag

            public int doStartTag()
                           throws javax.servlet.jsp.JspException
            Process the start of this tag.
            Overrides:
            doStartTag in class javax.servlet.jsp.tagext.BodyTagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            doAfterBody

            public int doAfterBody()
                            throws javax.servlet.jsp.JspException
            Save the associated label from the body content.
            Overrides:
            doAfterBody in class javax.servlet.jsp.tagext.BodyTagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            doEndTag

            public int doEndTag()
                         throws javax.servlet.jsp.JspException
            Process the end of this tag.
            Overrides:
            doEndTag in class javax.servlet.jsp.tagext.BodyTagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            release

            public void release()
            Release any acquired resources.
            Overrides:
            release in class BaseHandlerTag


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/html/RewriteTag.html0000644000175000017500000007043510404045216030527 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class RewriteTag

            org.apache.struts.taglib.html
            Class RewriteTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--javax.servlet.jsp.tagext.BodyTagSupport
                          |
                          +--org.apache.struts.taglib.html.BaseHandlerTag
                                |
                                +--org.apache.struts.taglib.html.LinkTag
                                      |
                                      +--org.apache.struts.taglib.html.RewriteTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.BodyTag, javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class RewriteTag
            extends LinkTag

            Generate a URL-encoded URI as a string.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Fields inherited from class org.apache.struts.taglib.html.LinkTag
            anchor, forward, href, linkName, messages, name, page, paramId, paramName, paramProperty, paramScope, property, scope, target, text, transaction
             
            Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
            accesskey, disabled, onblur, onchange, onclick, ondblclick, onfocus, onkeydown, onkeypress, onkeyup, onmousedown, onmousemove, onmouseout, onmouseover, onmouseup, onselect, readonly, style, styleClass, styleId, tabindex, title
             
            Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            bodyContent
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
            EVAL_BODY_BUFFERED, EVAL_BODY_TAG
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            RewriteTag()
                       
             
            Method Summary
             int doEndTag()
                      Ignore the end of this tag.
             int doStartTag()
                      Render the appropriately encoded URI.
             
            Methods inherited from class org.apache.struts.taglib.html.LinkTag
            doAfterBody, getAnchor, getForward, getHref, getLinkName, getName, getPage, getParamId, getParamName, getParamProperty, getParamScope, getProperty, getScope, getTarget, getTransaction, release, setAnchor, setForward, setHref, setLinkName, setName, setPage, setParamId, setParamName, setParamProperty, setParamScope, setProperty, setScope, setTarget, setTransaction
             
            Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
            getAccesskey, getDisabled, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, prepareEventHandlers, prepareFocusEvents, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setDisabled, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle
             
            Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            doInitBody, getBodyContent, getPreviousOut, setBodyContent
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             
            Methods inherited from interface javax.servlet.jsp.tagext.Tag
            getParent, setPageContext, setParent
             

            Constructor Detail

            RewriteTag

            public RewriteTag()
            Method Detail

            doStartTag

            public int doStartTag()
                           throws javax.servlet.jsp.JspException
            Render the appropriately encoded URI.
            Overrides:
            doStartTag in class LinkTag
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            doEndTag

            public int doEndTag()
                         throws javax.servlet.jsp.JspException
            Ignore the end of this tag.
            Overrides:
            doEndTag in class LinkTag
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/html/SelectTag.html0000644000175000017500000011000710404045212030307 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class SelectTag

            org.apache.struts.taglib.html
            Class SelectTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--javax.servlet.jsp.tagext.BodyTagSupport
                          |
                          +--org.apache.struts.taglib.html.BaseHandlerTag
                                |
                                +--org.apache.struts.taglib.html.SelectTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.BodyTag, javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class SelectTag
            extends BaseHandlerTag

            Custom tag that represents an HTML select element, associated with a bean property specified by our attributes. This tag must be nested inside a form tag.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  java.lang.String[] match
                      The actual values we will match against, calculated in doStartTag().
            protected static MessageResources messages
                      The message resources for this package.
            protected  java.lang.String multiple
                      Should multiple selections be allowed? Any non-null value will trigger rendering this.
            protected  java.lang.String name
                      The name of the bean containing our underlying property.
            protected  java.lang.String property
                      The property name we are associated with.
            protected  java.lang.String saveBody
                      The saved body content of this tag.
            protected  java.lang.String size
                      How many available options should be displayed when this element is rendered?
            protected  java.lang.String value
                      The value to compare with for marking an option selected.
             
            Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
            accesskey, disabled, onblur, onchange, onclick, ondblclick, onfocus, onkeydown, onkeypress, onkeyup, onmousedown, onmousemove, onmouseout, onmouseover, onmouseup, onselect, readonly, style, styleClass, styleId, tabindex, title
             
            Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            bodyContent
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
            EVAL_BODY_BUFFERED, EVAL_BODY_TAG
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            SelectTag()
                       
             
            Method Summary
             int doAfterBody()
                      Save any body content of this tag, which will generally be the option(s) representing the values displayed to the user.
             int doEndTag()
                      Render the end of this form.
             int doStartTag()
                      Render the beginning of this form.
             java.lang.String getMultiple()
                       
             java.lang.String getName()
                       
             java.lang.String getProperty()
                      Return the property name.
             java.lang.String getSize()
                       
             java.lang.String getValue()
                      Return the comparison value.
             boolean isMatched(java.lang.String value)
                      Does the specified value match one of those we are looking for?
             void release()
                      Release any acquired resources.
             void setMultiple(java.lang.String multiple)
                       
             void setName(java.lang.String name)
                       
             void setProperty(java.lang.String property)
                      Set the property name.
             void setSize(java.lang.String size)
                       
             void setValue(java.lang.String value)
                      Set the comparison value.
             
            Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
            getAccesskey, getDisabled, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, prepareEventHandlers, prepareFocusEvents, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setDisabled, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle
             
            Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            doInitBody, getBodyContent, getPreviousOut, setBodyContent
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             
            Methods inherited from interface javax.servlet.jsp.tagext.Tag
            getParent, setPageContext, setParent
             

            Field Detail

            match

            protected java.lang.String[] match
            The actual values we will match against, calculated in doStartTag().

            messages

            protected static MessageResources messages
            The message resources for this package.

            multiple

            protected java.lang.String multiple
            Should multiple selections be allowed? Any non-null value will trigger rendering this.

            name

            protected java.lang.String name
            The name of the bean containing our underlying property.

            property

            protected java.lang.String property
            The property name we are associated with.

            saveBody

            protected java.lang.String saveBody
            The saved body content of this tag.

            size

            protected java.lang.String size
            How many available options should be displayed when this element is rendered?

            value

            protected java.lang.String value
            The value to compare with for marking an option selected.
            Constructor Detail

            SelectTag

            public SelectTag()
            Method Detail

            getMultiple

            public java.lang.String getMultiple()

            setMultiple

            public void setMultiple(java.lang.String multiple)

            getName

            public java.lang.String getName()

            setName

            public void setName(java.lang.String name)

            getSize

            public java.lang.String getSize()

            setSize

            public void setSize(java.lang.String size)

            isMatched

            public boolean isMatched(java.lang.String value)
            Does the specified value match one of those we are looking for?
            Parameters:
            value - Value to be compared

            getProperty

            public java.lang.String getProperty()
            Return the property name.

            setProperty

            public void setProperty(java.lang.String property)
            Set the property name.
            Parameters:
            property - The new property name

            getValue

            public java.lang.String getValue()
            Return the comparison value.

            setValue

            public void setValue(java.lang.String value)
            Set the comparison value.
            Parameters:
            value - The new comparison value

            doStartTag

            public int doStartTag()
                           throws javax.servlet.jsp.JspException
            Render the beginning of this form.
            Overrides:
            doStartTag in class javax.servlet.jsp.tagext.BodyTagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            doAfterBody

            public int doAfterBody()
                            throws javax.servlet.jsp.JspException
            Save any body content of this tag, which will generally be the option(s) representing the values displayed to the user.
            Overrides:
            doAfterBody in class javax.servlet.jsp.tagext.BodyTagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            doEndTag

            public int doEndTag()
                         throws javax.servlet.jsp.JspException
            Render the end of this form.
            Overrides:
            doEndTag in class javax.servlet.jsp.tagext.BodyTagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            release

            public void release()
            Release any acquired resources.
            Overrides:
            release in class BaseHandlerTag


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/html/SubmitTag.html0000644000175000017500000007273010404045234030351 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class SubmitTag

            org.apache.struts.taglib.html
            Class SubmitTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--javax.servlet.jsp.tagext.BodyTagSupport
                          |
                          +--org.apache.struts.taglib.html.BaseHandlerTag
                                |
                                +--org.apache.struts.taglib.html.SubmitTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.BodyTag, javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag
            Direct Known Subclasses:
            ImageTag

            public class SubmitTag
            extends BaseHandlerTag

            Tag for input fields of type "submit".

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected static MessageResources messages
                      The message resources for this package.
            protected  java.lang.String property
                      The name of the generated input field.
            protected  java.lang.String text
                      The body content of this tag (if any).
            protected  java.lang.String value
                      The value of the button label.
             
            Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
            accesskey, disabled, onblur, onchange, onclick, ondblclick, onfocus, onkeydown, onkeypress, onkeyup, onmousedown, onmousemove, onmouseout, onmouseover, onmouseup, onselect, readonly, style, styleClass, styleId, tabindex, title
             
            Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            bodyContent
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
            EVAL_BODY_BUFFERED, EVAL_BODY_TAG
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            SubmitTag()
                       
             
            Method Summary
             int doAfterBody()
                      Save the associated label from the body content.
             int doEndTag()
                      Process the end of this tag.
             int doStartTag()
                      Process the start of this tag.
             java.lang.String getProperty()
                      Return the property.
             java.lang.String getValue()
                      Return the label value.
             void release()
                      Release any acquired resources.
             void setProperty(java.lang.String property)
                      Set the property name.
             void setValue(java.lang.String value)
                      Set the label value.
             
            Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
            getAccesskey, getDisabled, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, prepareEventHandlers, prepareFocusEvents, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setDisabled, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle
             
            Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            doInitBody, getBodyContent, getPreviousOut, setBodyContent
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             
            Methods inherited from interface javax.servlet.jsp.tagext.Tag
            getParent, setPageContext, setParent
             

            Field Detail

            messages

            protected static MessageResources messages
            The message resources for this package.

            property

            protected java.lang.String property
            The name of the generated input field.

            text

            protected java.lang.String text
            The body content of this tag (if any).

            value

            protected java.lang.String value
            The value of the button label.
            Constructor Detail

            SubmitTag

            public SubmitTag()
            Method Detail

            getProperty

            public java.lang.String getProperty()
            Return the property.

            setProperty

            public void setProperty(java.lang.String property)
            Set the property name.
            Parameters:
            property - The property name

            getValue

            public java.lang.String getValue()
            Return the label value.

            setValue

            public void setValue(java.lang.String value)
            Set the label value.
            Parameters:
            value - The label value

            doStartTag

            public int doStartTag()
                           throws javax.servlet.jsp.JspException
            Process the start of this tag.
            Overrides:
            doStartTag in class javax.servlet.jsp.tagext.BodyTagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            doAfterBody

            public int doAfterBody()
                            throws javax.servlet.jsp.JspException
            Save the associated label from the body content.
            Overrides:
            doAfterBody in class javax.servlet.jsp.tagext.BodyTagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            doEndTag

            public int doEndTag()
                         throws javax.servlet.jsp.JspException
            Process the end of this tag.
            Overrides:
            doEndTag in class javax.servlet.jsp.tagext.BodyTagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            release

            public void release()
            Release any acquired resources.
            Overrides:
            release in class BaseHandlerTag


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/html/TextTag.html0000644000175000017500000006325210404045242030030 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class TextTag

            org.apache.struts.taglib.html
            Class TextTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--javax.servlet.jsp.tagext.BodyTagSupport
                          |
                          +--org.apache.struts.taglib.html.BaseHandlerTag
                                |
                                +--org.apache.struts.taglib.html.BaseInputTag
                                      |
                                      +--org.apache.struts.taglib.html.BaseFieldTag
                                            |
                                            +--org.apache.struts.taglib.html.TextTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.BodyTag, javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class TextTag
            extends BaseFieldTag

            Custom tag for input fields of type "text".

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Fields inherited from class org.apache.struts.taglib.html.BaseFieldTag
            accept, name, redisplay, type
             
            Fields inherited from class org.apache.struts.taglib.html.BaseInputTag
            cols, maxlength, messages, property, rows, value
             
            Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
            accesskey, disabled, onblur, onchange, onclick, ondblclick, onfocus, onkeydown, onkeypress, onkeyup, onmousedown, onmousemove, onmouseout, onmouseover, onmouseup, onselect, readonly, style, styleClass, styleId, tabindex, title
             
            Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            bodyContent
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
            EVAL_BODY_BUFFERED, EVAL_BODY_TAG
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            TextTag()
                      Construct a new instance of this tag.
             
            Methods inherited from class org.apache.struts.taglib.html.BaseFieldTag
            doStartTag, getAccept, getName, getRedisplay, release, setAccept, setName, setRedisplay
             
            Methods inherited from class org.apache.struts.taglib.html.BaseInputTag
            doEndTag, getCols, getMaxlength, getProperty, getRows, getSize, getValue, setCols, setMaxlength, setProperty, setRows, setSize, setValue
             
            Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
            getAccesskey, getDisabled, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, prepareEventHandlers, prepareFocusEvents, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setDisabled, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle
             
            Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            doAfterBody, doInitBody, getBodyContent, getPreviousOut, setBodyContent
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             
            Methods inherited from interface javax.servlet.jsp.tagext.Tag
            getParent, setPageContext, setParent
             

            Constructor Detail

            TextTag

            public TextTag()
            Construct a new instance of this tag.


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/html/TextareaTag.html0000644000175000017500000006723610404045212030664 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class TextareaTag

            org.apache.struts.taglib.html
            Class TextareaTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--javax.servlet.jsp.tagext.BodyTagSupport
                          |
                          +--org.apache.struts.taglib.html.BaseHandlerTag
                                |
                                +--org.apache.struts.taglib.html.BaseInputTag
                                      |
                                      +--org.apache.struts.taglib.html.TextareaTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.BodyTag, javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class TextareaTag
            extends BaseInputTag

            Custom tag for input fields of type "textarea".

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  java.lang.String name
                      The name of the bean containing our underlying property.
             
            Fields inherited from class org.apache.struts.taglib.html.BaseInputTag
            cols, maxlength, messages, property, rows, value
             
            Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
            accesskey, disabled, onblur, onchange, onclick, ondblclick, onfocus, onkeydown, onkeypress, onkeyup, onmousedown, onmousemove, onmouseout, onmouseover, onmouseup, onselect, readonly, style, styleClass, styleId, tabindex, title
             
            Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            bodyContent
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
            EVAL_BODY_BUFFERED, EVAL_BODY_TAG
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            TextareaTag()
                       
             
            Method Summary
             int doStartTag()
                      Generate the required input tag.
             java.lang.String getName()
                       
             void release()
                      Release any acquired resources.
             void setName(java.lang.String name)
                       
             
            Methods inherited from class org.apache.struts.taglib.html.BaseInputTag
            doEndTag, getCols, getMaxlength, getProperty, getRows, getSize, getValue, setCols, setMaxlength, setProperty, setRows, setSize, setValue
             
            Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
            getAccesskey, getDisabled, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, prepareEventHandlers, prepareFocusEvents, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setDisabled, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle
             
            Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            doAfterBody, doInitBody, getBodyContent, getPreviousOut, setBodyContent
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             
            Methods inherited from interface javax.servlet.jsp.tagext.Tag
            getParent, setPageContext, setParent
             

            Field Detail

            name

            protected java.lang.String name
            The name of the bean containing our underlying property.
            Constructor Detail

            TextareaTag

            public TextareaTag()
            Method Detail

            getName

            public java.lang.String getName()

            setName

            public void setName(java.lang.String name)

            doStartTag

            public int doStartTag()
                           throws javax.servlet.jsp.JspException
            Generate the required input tag.
            Overrides:
            doStartTag in class BaseInputTag
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            release

            public void release()
            Release any acquired resources.
            Overrides:
            release in class BaseInputTag


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/html/package-frame.html0000644000175000017500000000502510404045216031126 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Package org.apache.struts.taglib.html org.apache.struts.taglib.html
            Classes 
            BaseFieldTag
            BaseHandlerTag
            BaseInputTag
            BaseTag
            ButtonTag
            CancelTag
            CheckboxTag
            Constants
            ErrorsTag
            FileTag
            FormTag
            HiddenTag
            HtmlTag
            ImageTag
            ImgTag
            LinkTag
            MultiboxTag
            OptionsTag
            OptionTag
            PasswordTag
            RadioTag
            ResetTag
            RewriteTag
            SelectTag
            SubmitTag
            TextareaTag
            TextTag
            libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/html/package-summary.html0000644000175000017500000010664110404045220031532 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Package org.apache.struts.taglib.html

            Package org.apache.struts.taglib.html

            The "struts-html" tag library contains JSP custom tags useful in creating dynamic HTML user interfaces, including input forms.

            See:
                      Description

            Class Summary
            BaseFieldTag Convenience base class for the various input tags for text fields.
            BaseHandlerTag Base class for tags that render form elements capable of including JavaScript event handlers and/or CSS Style attributes.
            BaseInputTag Abstract base class for the various input tags.
            BaseTag Renders an HTML element with an href attribute pointing to the absolute location of the enclosing JSP page.
            ButtonTag Renders an HTML BUTTON tag within the Struts framework.
            CancelTag Tag for input fields of type "cancel".
            CheckboxTag Tag for input fields of type "checkbox".
            Constants Manifest constants for this package.
            ErrorsTag Custom tag that renders error messages if an appropriate request attribute has been created.
            FileTag Custom tag for input fields of type "file".
            FormTag Custom tag that represents an input form, associated with a bean whose properties correspond to the various fields of the form.
            HiddenTag Custom tag for input fields of type "text".
            HtmlTag Renders an HTML element with appropriate language attributes if there is a current Locale available in the user's session.
            ImageTag Tag for input fields of type "image".
            ImgTag Generate an IMG tag to the specified image URI.
            LinkTag Generate a URL-encoded hyperlink to the specified URI.
            MultiboxTag Tag for input fields of type "checkbox".
            OptionsTag Tag for creating multiple <select> options from a collection.
            OptionTag Tag for select options.
            PasswordTag Custom tag for input fields of type "text".
            RadioTag Tag for input fields of type "radio".
            ResetTag Tag for input fields of type "reset".
            RewriteTag Generate a URL-encoded URI as a string.
            SelectTag Custom tag that represents an HTML select element, associated with a bean property specified by our attributes.
            SubmitTag Tag for input fields of type "submit".
            TextareaTag Custom tag for input fields of type "textarea".
            TextTag Custom tag for input fields of type "text".
             

            Package org.apache.struts.taglib.html Description

            The "struts-html" tag library contains JSP custom tags useful in creating dynamic HTML user interfaces, including input forms.


            Introduction

            The tags in the Struts HTML library form a bridge between a JSP view and the other components of a Web application. Since a dynamic Web application often depends on gathering data from a user, input forms play an important role in the Struts framework. Consequently, the majority of the HTML tags involve HTML forms. Other important issues addressed by the Struts-HTML tags are error messages, hyperlinking and internationalization.


            HTML "form" tags

            Each of these tags must be nested within a <html:form> tag.

            About the form tag

            The Struts form tag outputs a standard HTML form tag, and also links the input form with a JavaBean subclassed from the Struts ActionForm object (see Javadoc). Each field in the form should correspond to a property of the form's bean. When a field and property correspond, the bean is first used to populate the form, and then to store the user's input when the form is submitted to the controller servlet.

            The name of the bean and its class can be specified as a property to the form tag, but may also be omitted. If omitted, the ActionMappings database (loaded from the struts-config.xml file) is consulted. If the current page is specified as the input property for an action, the name of the action is used. The type property for the bean is also then taken from the configuration, via a Form Bean definition.

            Here's a clip from the Struts Example configuration:

            <action-mappings>
              <!-- Process a user logon -->
              <action path="/logon"
                type="org.apache.struts.example.LogonAction"
                name="logonForm"
                scope="request"
                input="/logon.jsp">
              </action>
              < ... />
            </action-mappings>
            <form-beans>
              <!-- Logon form bean -->
              <form-bean name="logonForm"
                type="org.apache.struts.example.LogonForm"/>
              < ... />
              </form-beans>
            </pre>
            

            Given this configuration, the HTML form tag for logon.jsp will default to using "logonForm" as its name property and "org.apache.struts.example.LogonForm" as the attribute's type. This way you can manage the namespace for your framework components from the configuration file.

            If the form tag does not find the form bean in any of the scopes (page, request, session, application), it creates one using the specified type.

            The Struts ActionForm class is equipped with standard reset() and validate() methods, that can be used by the controller to enable automatic data validation. See the Users Guide for more about Form Validation. An important aspect of validation is reporting errors to the user. This can be handled by the Struts errors tag, which is discussed later in this document.


            Common Form Tag Attributes

            The form "field" tags in the Struts-HTML tag library share a common set of tag attributes that have the same meaning, no matter what field tag they are used with. These properties also accept Runtime Expressions, meaning you can set them with a scriptlet. The common attributes fall into four categories: Struts Common, HTML Navigation, Javascript, and CSS.

            Struts Common
            name The attribute name of the ActionForm bean whose properties are consulted when rendering the current value of this input field. If not specified, the bean associated with the form tag we are nested within is utilized.
            property Name of the request parameter that will be included with this submission, set to the specified value.
            value Value of the label to be used with this element. This value will also be submitted as the value of the specified request parameter. [Body of this tag (if any), or "Click"] 

             

            Like Struts-Bean tags, the property attribute for the Struts-HTML tags accept simple, nested, and indexed expressions. For example, this tag:

              <html:text property="mailingAddress.street"/>
            

            corresponds to:

              getMailingAddress().getStreet()
            

            For more about using simple, nested, and indexed expressions with Struts, see the Struts-Bean Developers Guide.

            Javascript Event Handlers
            onblur Executed when this element loses input focus.
            onchange Executed when this element loses input focus and its value has changed.
            onclick Executed when this element receives a mouse click.
            ondblclick Executed when this element receives a mouse - double click.
            onfocus Executed when this element receives input focus.
            onkeydown Executed when this element has focus and a key is depressed. 
            onkeypress Executed when this element has focus and a key is depressed and released
            onkeyup Executed when this element has focus and a key is released
            onmousedown Executed when this element is under the mouse pointer and a mouse button is depressed.
            onmousemove Executed when this element is under the mouse pointer and the pointer is moved.
            onmouseout Executed when this element was under the mouse pointer but the pointer was moved outside the element.
            onmouseover Executed when this element was not under the mouse pointer but the pointer is moved inside the element.
            onmouseup Executed when this element is under the mouse pointer and a mouse button is released. 
              "parent" form tag only
            onreset Executed if the form is reset.
            onsubmit Executed if the form is submitted. 
             
            HTML Navigation Attributes
            accesskey The keyboard character used to move focus immediately to this element.
            tabindex The tab order (ascending positive integers) for this element.
             
            CSS Attributes
            style CSS styles to be applied to this HTML element.
            styleClass CSS stylesheet class to be applied to this HTML element.

             

            See the HTML Tags Reference for detailed information about the available tags in this tag library, and the complete list of valid attributes for each tag.


            Other HTML tags

            Aside from form processing, the Struts-HTML offers several other tags or tag properties to help with displaying error messages, maintaining hyperlinks, and with internationalizing your application.

            Displaying Error Messages

            Error handling is an important part of any application, and curing an error often involves getting the user's help. Struts provides a generalized method for communicating runtime messages to users, based on the same technology used to provide internationalization.

            In a Web application, it is common to reuse the input page to display error messages. The Struts error message tag can be placed wherever you would like the messages to display. If no messages are pending, nothing is printed.

            By default, the errors tag will print all pending messages. You can also specify a property when queuing a message, and then refer to that property in the errors tag. In that case, only the message for that property will be displayed. This is helpful when you would like to place the message for a field next to the actual field.

            Error messages are often queued in the ActionForm validate method. Here's a snippet from the Struts Example application:

              ActionErrors errors = new ActionErrors();
              if ((username == null) || (username.length() < 1))
                  errors.add("username", new ActionError("error.username.required"));
              if ((password == null) || (password.length() < 1))
                  errors.add("password",
                    new ActionError("error.password.required"));
            

            This queues two error messages, one for the "username" field and another for the "password" field. To print all the messages together, simply place the error tag anywhere in your JSP.

              <body bgcolor="white">
              <html:errors/>
            

            Or, you can place specific error messages at different locations

              <td align="left">
                <html:text property="username" size="16" maxlength="16"/>
                <html:errors property="username"/>
              </td>
              </tr><tr>
              <td align="left">
                <html:text property="password" size="16" maxlength="16"/>
                <html:errors property="password"/>
              </td>
            

            By default, the actual error message is retrieved from the application's standard message resource. This gives you a master list of the error messages used by your application, and provides for internationalization. In the code snippet, the message corresponding to "error.username.required" would be retrieved and displayed to the user at runtime.

              error.username.required=<li>Username is required</li>
            

            Most often, error messages are displayed in a particular way. To make it easy to format your messages, you can also specific an errors.header and errors.footer string in your message resource. Typically, you might want to render the messages in a different color, or set them up to appear in an unordered list. Using the errors.header and errors.footer strings keeps the setup codes out of your JSP until a message actually prints.

              errors.header=<h3><font color="red">Validation Error</font></h3>
                You must correct the following error(s) before proceeding:<UL>
              errors.footer=</ul><hr>
            

            Maintaining Hyperlinks

            When implementing a Web application, it is usually a good idea to use relative references to other files in the same application. But in a dynamic application, the controller servlet often returns a completely different file than the one requested. (Often, the requested "file" doesn't actually exist, but represents an action for the controller to interpret.) Since relative references are resolved by the browser, they often won't work in a dynamic application.

            To accommodate this, the Struts-HTML taglib provides a <base> tag that renders an HTML element with an href attribute pointing to the absolute location of its page.

            As a rule, you should place the Struts-HTML base tag in the <head> section of any JSP that uses relative references to other files.

              <head>
                <html:base/>
              </head>
            

            Session Tracking

            The Java Servlet framework has built-in support for tracking a client through a session. Sessions are a useful way to compensate for the stateless nature of HTTP. Tracking a client can be done with either cookies or URL rewriting, cookies being preferred when available. Struts offers three tags that make it easy to write "session-aware" hyperlink references:

            • link - Renders an HTML anchor or hyperlink.
            • rewrite - Renders a request URI, but without creating the <a> hyperlink. This tag is useful when you want to generate a string constant for use by a JavaScript procedure.
            • img - Renders an HTML <img> element with the image at the specified URL.

            Each of these tags will automatically apply URL rewriting, to maintain session state in the absence of cookies. The content displayed for the hyperlink will be taken from the body of the tag. The base URL for the hyperlink is calculated based on properties given with the tag.

            Normally, the hyperlink or URI you specify is left unchanged. If you would like to include dynamic parameters to the hyperlink or URI, you can pass those to the tags via a JavaBean. If there may be naming conflicts, you can also specify the scope that the tag searches (request, page, session, application).

            To pass a single dynamic parameter, specify the parameter's name using the paramId attribute. You can then specify the name of the JavaBean holding the value using the paramName attribute, and a particular property using paramProperty.

            So, a tag like

               <html:link paramId="target"
                 paramName="linkParams" 
            paramProperty="target" paramScope="request"
            >detail.html</html:link>

            would correspond to something like

              <A HREF="detail.html?<%= 
            request.getParameter("linkParams").getTarget() %>"></A>

            To search all scopes (request, page, session, and application), omit paramScope.

            The paramProperty attribute may also be omitted, so long as the named bean identifies a value that can be converted to a String.

            To pass multiple dynamic parameters, you can store them in a java.util.Map, and use the name of the map for the paramName. The map must then contain one or more paramIds and their corresponding values. As the Map is processed, the keys are assumed to be the names of query parameters to be appended. 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.

            The HTML session tracking tags use several common attributes, that can be organized into three groups, as follows. All of these attributes are not used by all three tags (link, rewrite, and img), and so the tags using each attribute is given.

             
            forward, href, and page
            forward [ link rewrite ] - Logical name of a global ActionForward 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 must specify exactly one of the forward attribute, the href attribute, the linkName attribute, or the page attribute
            href [ link rewrite ] - The URL 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 must specify exactly one of the forward attribute, the href attribute, the linkName attribute, or the page attribute.
            page [ link rewrite ] - The context-relative path, starting with a slash, of the image to be displayed by this tag. The rendered URL for this image will automatically prepend the context path of this web application (in the same manner as the page attribute on the link tag works), in addition to any necessary URL rewriting. You must specify either the page attribute or the src attribute.

             
            linkName, Target , and src
            linkName

            [ link ] - The anchor name to be defined within this page, so that you can reference it with intra-page hyperlinks. In other words, the value specified here will render a "name" element in the generated anchor tag.

            target [ link img ] - The window target in which the resource requested by this hyperlink will be displayed, for example in a framed presentation.
            src [ img ] - The URL to which this image will be transferred from This image may be dynamically modified by the inclusion of query parameters, as described in the tag description. This value will be used unmodified (other than potential URL rewriting) as the value of the "src" attribute in the rendered tag. You must specify either the page attribute or the the src attribute.

             
            paramId, paramName, paramProperty, paramScope
            paramId [ link img ] - The name of the request parameter that will be dynamically added to the generated src URL. The corresponding value is defined by the paramName and (optional) paramProperty attributes, optionally scoped by the paramScope attribute
            paramName [ link img ] - The name of a JSP bean that is a String containing the value for the request parameter named by paramId (if paramProperty is not specified), or a JSP bean whose property getter is called to return a String (if paramProperty is specified). The JSP bean is constrained to the bean scope specified by the paramScope property, if it is specified.
            paramProperty [ link img ] - The name of a property of the bean specified by the paramName attribute, whose return value must be a String containing the value of the request parameter (named by the paramId attribute) that will be dynamically added to this hyperlink or src URL
            paramScope [ link img ] - The scope within which to search for the bean specified by the paramName attribute. If not specified, all scopes are searched.

             

            name, property, scope

            name [ link rewrite img ] - The name of a JSP bean that contains a Map representing the query parameters (if property is not specified), or a JSP bean whose property getter is called to return a Map (if property is specified).
            property [ link rewrite img ] - The name of a property of the bean specified by the name attribute, whose return value must be a Map containing the query parameters to be added to the src URL. You must specify the name attribute if you specify this attribute
            scope [ link rewrite img ] - The scope within which to search for the bean specified by the name attribute. If not specified, all scopes are searched.

            See the HTML Tags Reference for the complete list of valid attributes for each tag..

            Internationalization

            Internationalization is automatically supported by the HTML tags where appropriate.

            Errors - By default, the text for your messages will be returned by the default message resource, which will select the appropriate language for the user. You may also specify another message resource using the bundle attribute.

            HTML - Renders an HTML element with language attributes extracted from the user's current Locale object, if there is one.

            image and img - Can optionally retrieve the value for its binary source and alt text from the message resource, so that different images and/or text can be provided for different locales. See the tag's altKey, srcKey, and bundle attributes in the HTML Tags Reference.

            See the Users Guide for more on how Struts helps you internationalize your applications.

             



            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/html/package-tree.html0000644000175000017500000002144410404045236031000 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: org.apache.struts.taglib.html Class Hierarchy

            Hierarchy For Package org.apache.struts.taglib.html

            Package Hierarchies:
            All Packages

            Class Hierarchy

            • class java.lang.Object
              • class org.apache.struts.taglib.html.Constants
              • class javax.servlet.jsp.tagext.TagSupport (implements javax.servlet.jsp.tagext.IterationTag, java.io.Serializable)
                • class org.apache.struts.taglib.html.BaseTag
                • class javax.servlet.jsp.tagext.BodyTagSupport (implements javax.servlet.jsp.tagext.BodyTag)
                • class org.apache.struts.taglib.html.ErrorsTag
                • class org.apache.struts.taglib.html.FormTag
                • class org.apache.struts.taglib.html.HtmlTag
                • class org.apache.struts.taglib.html.OptionsTag


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/logic/0000755000175000017500000000000010423130300025672 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/logic/CompareTagBase.html0000644000175000017500000005565210404045224031423 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class CompareTagBase

            org.apache.struts.taglib.logic
            Class CompareTagBase

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--org.apache.struts.taglib.logic.ConditionalTagBase
                          |
                          +--org.apache.struts.taglib.logic.CompareTagBase
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag
            Direct Known Subclasses:
            EqualTag, GreaterEqualTag, GreaterThanTag, LessEqualTag, LessThanTag, NotEqualTag

            public abstract class CompareTagBase
            extends ConditionalTagBase

            Abstract base class for comparison tags. Concrete subclasses need only define values for desired1 and desired2.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected static int DOUBLE_COMPARE
                      We will do a double/float comparison.
            protected static int LONG_COMPARE
                      We will do a long/int comparison.
            protected static MessageResources messages
                      The message resources for this package.
            protected static int STRING_COMPARE
                      We will do a String comparison.
             java.lang.String value
                      The value to which the variable specified by other attributes of this tag will be compared.
             
            Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
            cookie, header, name, parameter, property, role, scope, user
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            CompareTagBase()
                       
             
            Method Summary
            protected abstract  boolean condition()
                      Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
            protected  boolean condition(int desired1, int desired2)
                      Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
             java.lang.String getValue()
                       
             void release()
                      Release all allocated resources.
             void setValue(java.lang.String value)
                       
             
            Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
            doEndTag, doStartTag, getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            doAfterBody, findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            DOUBLE_COMPARE

            protected static final int DOUBLE_COMPARE
            We will do a double/float comparison.

            LONG_COMPARE

            protected static final int LONG_COMPARE
            We will do a long/int comparison.

            STRING_COMPARE

            protected static final int STRING_COMPARE
            We will do a String comparison.

            messages

            protected static MessageResources messages
            The message resources for this package.

            value

            public java.lang.String value
            The value to which the variable specified by other attributes of this tag will be compared.
            Constructor Detail

            CompareTagBase

            public CompareTagBase()
            Method Detail

            getValue

            public java.lang.String getValue()

            setValue

            public void setValue(java.lang.String value)

            release

            public void release()
            Release all allocated resources.
            Overrides:
            release in class ConditionalTagBase

            condition

            protected abstract boolean condition()
                                          throws javax.servlet.jsp.JspException
            Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped. This method must be implemented by concrete subclasses.
            Overrides:
            condition in class ConditionalTagBase
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception occurs

            condition

            protected boolean condition(int desired1,
                                        int desired2)
                                 throws javax.servlet.jsp.JspException
            Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped. This method must be implemented by concrete subclasses.
            Parameters:
            desired1 - First desired value for a true result (-1, 0, +1)
            desired2 - Second desired value for a true result (-1, 0, +1)
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception occurs


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/logic/ConditionalTagBase.html0000644000175000017500000007147110404045232032274 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class ConditionalTagBase

            org.apache.struts.taglib.logic
            Class ConditionalTagBase

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--org.apache.struts.taglib.logic.ConditionalTagBase
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag
            Direct Known Subclasses:
            CompareTagBase, MatchTag, PresentTag

            public abstract class ConditionalTagBase
            extends javax.servlet.jsp.tagext.TagSupport

            Abstract base class for the various conditional evaluation tags.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  java.lang.String cookie
                      The name of the cookie to be used as a variable.
            protected  java.lang.String header
                      The name of the HTTP request header to be used as a variable.
            protected static MessageResources messages
                      The message resources for this package.
            protected  java.lang.String name
                      The name of the JSP bean to be used as a variable (if property is not specified), or whose property is to be accessed (if property is specified).
            protected  java.lang.String parameter
                      The name of the HTTP request parameter to be used as a variable.
            protected  java.lang.String property
                      The name of the bean property to be used as a variable.
            protected  java.lang.String role
                      The name of the security role to be checked for.
            protected  java.lang.String scope
                      The scope to search for the bean named by the name property, or "any scope" if null.
            protected  java.lang.String user
                      The user principal name to be checked for.
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            ConditionalTagBase()
                       
             
            Method Summary
            protected abstract  boolean condition()
                      Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
             int doEndTag()
                      Evaluate the remainder of the current page normally.
             int doStartTag()
                      Perform the test required for this particular tag, and either evaluate or skip the body of this tag.
             java.lang.String getCookie()
                       
             java.lang.String getHeader()
                       
             java.lang.String getName()
                       
             java.lang.String getParameter()
                       
             java.lang.String getProperty()
                       
             java.lang.String getRole()
                       
             java.lang.String getScope()
                       
             java.lang.String getUser()
                       
             void release()
                      Release all allocated resources.
             void setCookie(java.lang.String cookie)
                       
             void setHeader(java.lang.String header)
                       
             void setName(java.lang.String name)
                       
             void setParameter(java.lang.String parameter)
                       
             void setProperty(java.lang.String property)
                       
             void setRole(java.lang.String role)
                       
             void setScope(java.lang.String scope)
                       
             void setUser(java.lang.String user)
                       
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            doAfterBody, findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            cookie

            protected java.lang.String cookie
            The name of the cookie to be used as a variable.

            header

            protected java.lang.String header
            The name of the HTTP request header to be used as a variable.

            messages

            protected static MessageResources messages
            The message resources for this package.

            name

            protected java.lang.String name
            The name of the JSP bean to be used as a variable (if property is not specified), or whose property is to be accessed (if property is specified).

            parameter

            protected java.lang.String parameter
            The name of the HTTP request parameter to be used as a variable.

            property

            protected java.lang.String property
            The name of the bean property to be used as a variable.

            role

            protected java.lang.String role
            The name of the security role to be checked for.

            scope

            protected java.lang.String scope
            The scope to search for the bean named by the name property, or "any scope" if null.

            user

            protected java.lang.String user
            The user principal name to be checked for.
            Constructor Detail

            ConditionalTagBase

            public ConditionalTagBase()
            Method Detail

            getCookie

            public java.lang.String getCookie()

            setCookie

            public void setCookie(java.lang.String cookie)

            getHeader

            public java.lang.String getHeader()

            setHeader

            public void setHeader(java.lang.String header)

            getName

            public java.lang.String getName()

            setName

            public void setName(java.lang.String name)

            getParameter

            public java.lang.String getParameter()

            setParameter

            public void setParameter(java.lang.String parameter)

            getProperty

            public java.lang.String getProperty()

            setProperty

            public void setProperty(java.lang.String property)

            getRole

            public java.lang.String getRole()

            setRole

            public void setRole(java.lang.String role)

            getScope

            public java.lang.String getScope()

            setScope

            public void setScope(java.lang.String scope)

            getUser

            public java.lang.String getUser()

            setUser

            public void setUser(java.lang.String user)

            doStartTag

            public int doStartTag()
                           throws javax.servlet.jsp.JspException
            Perform the test required for this particular tag, and either evaluate or skip the body of this tag.
            Overrides:
            doStartTag in class javax.servlet.jsp.tagext.TagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception occurs

            doEndTag

            public int doEndTag()
                         throws javax.servlet.jsp.JspException
            Evaluate the remainder of the current page normally.
            Overrides:
            doEndTag in class javax.servlet.jsp.tagext.TagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception occurs

            release

            public void release()
            Release all allocated resources.
            Overrides:
            release in class javax.servlet.jsp.tagext.TagSupport

            condition

            protected abstract boolean condition()
                                          throws javax.servlet.jsp.JspException
            Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped. This method must be implemented by concrete subclasses.
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception occurs


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/logic/EqualTag.html0000644000175000017500000004320010404045174030277 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class EqualTag

            org.apache.struts.taglib.logic
            Class EqualTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--org.apache.struts.taglib.logic.ConditionalTagBase
                          |
                          +--org.apache.struts.taglib.logic.CompareTagBase
                                |
                                +--org.apache.struts.taglib.logic.EqualTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class EqualTag
            extends CompareTagBase

            Evaluate the nested body content of this tag if the specified variable and value are equal.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Fields inherited from class org.apache.struts.taglib.logic.CompareTagBase
            DOUBLE_COMPARE, LONG_COMPARE, messages, STRING_COMPARE, value
             
            Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
            cookie, header, name, parameter, property, role, scope, user
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            EqualTag()
                       
             
            Method Summary
            protected  boolean condition()
                      Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
             
            Methods inherited from class org.apache.struts.taglib.logic.CompareTagBase
            condition, getValue, release, setValue
             
            Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
            doEndTag, doStartTag, getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            doAfterBody, findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Constructor Detail

            EqualTag

            public EqualTag()
            Method Detail

            condition

            protected boolean condition()
                                 throws javax.servlet.jsp.JspException
            Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped. This method must be implemented by concrete subclasses.
            Overrides:
            condition in class CompareTagBase
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception occurs


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/logic/ForwardTag.html0000644000175000017500000003706310404045246030646 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class ForwardTag

            org.apache.struts.taglib.logic
            Class ForwardTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--org.apache.struts.taglib.logic.ForwardTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class ForwardTag
            extends javax.servlet.jsp.tagext.TagSupport

            Perform a forward or redirect to a page that is looked up in the global ActionForwards collection associated with our application.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected static MessageResources messages
                      The message resources for this package.
            protected  java.lang.String name
                      The logical name of the ActionForward entry to be looked up.
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            ForwardTag()
                       
             
            Method Summary
             int doEndTag()
                      Look up the ActionForward associated with the specified name, and perform a forward or redirect to that path as indicated.
             int doStartTag()
                      Defer processing until the end of this tag is encountered.
             java.lang.String getName()
                       
             void release()
                      Release all allocated resources.
             void setName(java.lang.String name)
                       
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            doAfterBody, findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            messages

            protected static MessageResources messages
            The message resources for this package.

            name

            protected java.lang.String name
            The logical name of the ActionForward entry to be looked up.
            Constructor Detail

            ForwardTag

            public ForwardTag()
            Method Detail

            getName

            public java.lang.String getName()

            setName

            public void setName(java.lang.String name)

            doStartTag

            public int doStartTag()
                           throws javax.servlet.jsp.JspException
            Defer processing until the end of this tag is encountered.
            Overrides:
            doStartTag in class javax.servlet.jsp.tagext.TagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            doEndTag

            public int doEndTag()
                         throws javax.servlet.jsp.JspException
            Look up the ActionForward associated with the specified name, and perform a forward or redirect to that path as indicated.
            Overrides:
            doEndTag in class javax.servlet.jsp.tagext.TagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            release

            public void release()
            Release all allocated resources.
            Overrides:
            release in class javax.servlet.jsp.tagext.TagSupport


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/logic/GreaterEqualTag.html0000644000175000017500000004336610404045246031626 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class GreaterEqualTag

            org.apache.struts.taglib.logic
            Class GreaterEqualTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--org.apache.struts.taglib.logic.ConditionalTagBase
                          |
                          +--org.apache.struts.taglib.logic.CompareTagBase
                                |
                                +--org.apache.struts.taglib.logic.GreaterEqualTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class GreaterEqualTag
            extends CompareTagBase

            Evaluate the nested body content of this tag if the specified variable is greater than or equal to the specified value.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Fields inherited from class org.apache.struts.taglib.logic.CompareTagBase
            DOUBLE_COMPARE, LONG_COMPARE, messages, STRING_COMPARE, value
             
            Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
            cookie, header, name, parameter, property, role, scope, user
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            GreaterEqualTag()
                       
             
            Method Summary
            protected  boolean condition()
                      Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
             
            Methods inherited from class org.apache.struts.taglib.logic.CompareTagBase
            condition, getValue, release, setValue
             
            Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
            doEndTag, doStartTag, getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            doAfterBody, findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Constructor Detail

            GreaterEqualTag

            public GreaterEqualTag()
            Method Detail

            condition

            protected boolean condition()
                                 throws javax.servlet.jsp.JspException
            Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped. This method must be implemented by concrete subclasses.
            Overrides:
            condition in class CompareTagBase
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception occurs


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/logic/GreaterThanTag.html0000644000175000017500000004333610404045210031435 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class GreaterThanTag

            org.apache.struts.taglib.logic
            Class GreaterThanTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--org.apache.struts.taglib.logic.ConditionalTagBase
                          |
                          +--org.apache.struts.taglib.logic.CompareTagBase
                                |
                                +--org.apache.struts.taglib.logic.GreaterThanTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class GreaterThanTag
            extends CompareTagBase

            Evaluate the nested body content of this tag if the specified variable is greater than the specified value.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Fields inherited from class org.apache.struts.taglib.logic.CompareTagBase
            DOUBLE_COMPARE, LONG_COMPARE, messages, STRING_COMPARE, value
             
            Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
            cookie, header, name, parameter, property, role, scope, user
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            GreaterThanTag()
                       
             
            Method Summary
            protected  boolean condition()
                      Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
             
            Methods inherited from class org.apache.struts.taglib.logic.CompareTagBase
            condition, getValue, release, setValue
             
            Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
            doEndTag, doStartTag, getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            doAfterBody, findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Constructor Detail

            GreaterThanTag

            public GreaterThanTag()
            Method Detail

            condition

            protected boolean condition()
                                 throws javax.servlet.jsp.JspException
            Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped. This method must be implemented by concrete subclasses.
            Overrides:
            condition in class CompareTagBase
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception occurs


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/logic/IterateTag.html0000644000175000017500000010670210404045246030634 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class IterateTag

            org.apache.struts.taglib.logic
            Class IterateTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--javax.servlet.jsp.tagext.BodyTagSupport
                          |
                          +--org.apache.struts.taglib.logic.IterateTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.BodyTag, javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class IterateTag
            extends javax.servlet.jsp.tagext.BodyTagSupport

            Custom tag that iterates the elements of a collection, which can be either an attribute or the property of an attribute. The collection can be any of the following: an array of objects, an Enumeration, an Iterator, a Collection (which includes Lists, Sets and Vectors), or a Map (which includes Hashtables) whose elements will be iterated over.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  java.lang.Object collection
                      The collection over which we will be iterating.
            protected  java.lang.String id
                      The name of the scripting variable to be exposed.
            protected  java.lang.String indexId
                      The name of the scripting variable to be exposed as the current index.
            protected  java.util.Iterator iterator
                      Iterator of the elements of this collection, while we are actually running.
            protected  java.lang.String length
                      The length value or attribute name (<=0 means no limit).
            protected  int lengthCount
                      The number of elements we have already rendered.
            protected  int lengthValue
                      The actual length value (calculated in the start tag).
            protected static MessageResources messages
                      The message resources for this package.
            protected  java.lang.String name
                      The name of the collection or owning bean.
            protected  java.lang.String offset
                      The starting offset (zero relative).
            protected  int offsetValue
                      The actual offset value (calculated in the start tag).
            protected  java.lang.String property
                      The property name containing the collection.
            protected  java.lang.String scope
                      The scope of the bean specified by the name property, if any.
            protected  boolean started
                      Has this tag instance been started?
            protected  java.lang.String type
                      The Java class of each exposed element of the collection.
             
            Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            bodyContent
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
            EVAL_BODY_BUFFERED, EVAL_BODY_TAG
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            IterateTag()
                       
             
            Method Summary
             int doAfterBody()
                      Make the next collection element available and loop, or finish the iterations if there are no more elements.
             int doEndTag()
                      Clean up after processing this enumeration.
             int doStartTag()
                      Construct an iterator for the specified collection, and begin looping through the body once per element.
             java.lang.Object getCollection()
                       
             java.lang.String getId()
                       
             int getIndex()
                      Return the zero-relative index of the current iteration through the loop.
             java.lang.String getIndexId()
                       
             java.lang.String getLength()
                       
             java.lang.String getName()
                       
             java.lang.String getOffset()
                       
             java.lang.String getProperty()
                       
             java.lang.String getScope()
                       
             java.lang.String getType()
                       
             void release()
                      Release all allocated resources.
             void setCollection(java.lang.Object collection)
                       
             void setId(java.lang.String id)
                       
             void setIndexId(java.lang.String indexId)
                       
             void setLength(java.lang.String length)
                       
             void setName(java.lang.String name)
                       
             void setOffset(java.lang.String offset)
                       
             void setProperty(java.lang.String property)
                       
             void setScope(java.lang.String scope)
                       
             void setType(java.lang.String type)
                       
             
            Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            doInitBody, getBodyContent, getPreviousOut, setBodyContent
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            findAncestorWithClass, getParent, getValue, getValues, removeValue, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             
            Methods inherited from interface javax.servlet.jsp.tagext.Tag
            getParent, setPageContext, setParent
             

            Field Detail

            iterator

            protected java.util.Iterator iterator
            Iterator of the elements of this collection, while we are actually running.

            lengthCount

            protected int lengthCount
            The number of elements we have already rendered.

            lengthValue

            protected int lengthValue
            The actual length value (calculated in the start tag).

            messages

            protected static MessageResources messages
            The message resources for this package.

            offsetValue

            protected int offsetValue
            The actual offset value (calculated in the start tag).

            started

            protected boolean started
            Has this tag instance been started?

            collection

            protected java.lang.Object collection
            The collection over which we will be iterating.

            id

            protected java.lang.String id
            The name of the scripting variable to be exposed.

            indexId

            protected java.lang.String indexId
            The name of the scripting variable to be exposed as the current index.

            length

            protected java.lang.String length
            The length value or attribute name (<=0 means no limit).

            name

            protected java.lang.String name
            The name of the collection or owning bean.

            offset

            protected java.lang.String offset
            The starting offset (zero relative).

            property

            protected java.lang.String property
            The property name containing the collection.

            scope

            protected java.lang.String scope
            The scope of the bean specified by the name property, if any.

            type

            protected java.lang.String type
            The Java class of each exposed element of the collection.
            Constructor Detail

            IterateTag

            public IterateTag()
            Method Detail

            getCollection

            public java.lang.Object getCollection()

            setCollection

            public void setCollection(java.lang.Object collection)

            getId

            public java.lang.String getId()
            Overrides:
            getId in class javax.servlet.jsp.tagext.TagSupport

            setId

            public void setId(java.lang.String id)
            Overrides:
            setId in class javax.servlet.jsp.tagext.TagSupport

            getIndex

            public int getIndex()

            Return the zero-relative index of the current iteration through the loop. If you specify an offset, the first iteration through the loop will have that value; otherwise, the first iteration will return zero.

            This property is read-only, and gives nested custom tags access to this information. Therefore, it is only valid in between calls to doStartTag() and doEndTag().


            getIndexId

            public java.lang.String getIndexId()

            setIndexId

            public void setIndexId(java.lang.String indexId)

            getLength

            public java.lang.String getLength()

            setLength

            public void setLength(java.lang.String length)

            getName

            public java.lang.String getName()

            setName

            public void setName(java.lang.String name)

            getOffset

            public java.lang.String getOffset()

            setOffset

            public void setOffset(java.lang.String offset)

            getProperty

            public java.lang.String getProperty()

            setProperty

            public void setProperty(java.lang.String property)

            getScope

            public java.lang.String getScope()

            setScope

            public void setScope(java.lang.String scope)

            getType

            public java.lang.String getType()

            setType

            public void setType(java.lang.String type)

            doStartTag

            public int doStartTag()
                           throws javax.servlet.jsp.JspException
            Construct an iterator for the specified collection, and begin looping through the body once per element.
            Overrides:
            doStartTag in class javax.servlet.jsp.tagext.BodyTagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            doAfterBody

            public int doAfterBody()
                            throws javax.servlet.jsp.JspException
            Make the next collection element available and loop, or finish the iterations if there are no more elements.
            Overrides:
            doAfterBody in class javax.servlet.jsp.tagext.BodyTagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            doEndTag

            public int doEndTag()
                         throws javax.servlet.jsp.JspException
            Clean up after processing this enumeration.
            Overrides:
            doEndTag in class javax.servlet.jsp.tagext.BodyTagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            release

            public void release()
            Release all allocated resources.
            Overrides:
            release in class javax.servlet.jsp.tagext.BodyTagSupport


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/logic/IterateTei.html0000644000175000017500000002404310404045226030635 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class IterateTei

            org.apache.struts.taglib.logic
            Class IterateTei

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagExtraInfo
                    |
                    +--org.apache.struts.taglib.logic.IterateTei
            

            public class IterateTei
            extends javax.servlet.jsp.tagext.TagExtraInfo

            Implementation of TagExtraInfo for the iterate tag, identifying the scripting object(s) to be made visible.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan

            Fields inherited from class javax.servlet.jsp.tagext.TagExtraInfo
            tagInfo
             
            Constructor Summary
            IterateTei()
                       
             
            Method Summary
             javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
                      Return information about the scripting variables to be created.
             
            Methods inherited from class javax.servlet.jsp.tagext.TagExtraInfo
            getTagInfo, isValid, setTagInfo
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Constructor Detail

            IterateTei

            public IterateTei()
            Method Detail

            getVariableInfo

            public javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
            Return information about the scripting variables to be created.
            Overrides:
            getVariableInfo in class javax.servlet.jsp.tagext.TagExtraInfo


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/logic/LessEqualTag.html0000644000175000017500000004330310404045240031124 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class LessEqualTag

            org.apache.struts.taglib.logic
            Class LessEqualTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--org.apache.struts.taglib.logic.ConditionalTagBase
                          |
                          +--org.apache.struts.taglib.logic.CompareTagBase
                                |
                                +--org.apache.struts.taglib.logic.LessEqualTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class LessEqualTag
            extends CompareTagBase

            Evaluate the nested body content of this tag if the specified variable is less than or equal to the specified value.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Fields inherited from class org.apache.struts.taglib.logic.CompareTagBase
            DOUBLE_COMPARE, LONG_COMPARE, messages, STRING_COMPARE, value
             
            Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
            cookie, header, name, parameter, property, role, scope, user
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            LessEqualTag()
                       
             
            Method Summary
            protected  boolean condition()
                      Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
             
            Methods inherited from class org.apache.struts.taglib.logic.CompareTagBase
            condition, getValue, release, setValue
             
            Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
            doEndTag, doStartTag, getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            doAfterBody, findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Constructor Detail

            LessEqualTag

            public LessEqualTag()
            Method Detail

            condition

            protected boolean condition()
                                 throws javax.servlet.jsp.JspException
            Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped. This method must be implemented by concrete subclasses.
            Overrides:
            condition in class CompareTagBase
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception occurs


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/logic/LessThanTag.html0000644000175000017500000004324710404045204030756 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class LessThanTag

            org.apache.struts.taglib.logic
            Class LessThanTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--org.apache.struts.taglib.logic.ConditionalTagBase
                          |
                          +--org.apache.struts.taglib.logic.CompareTagBase
                                |
                                +--org.apache.struts.taglib.logic.LessThanTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class LessThanTag
            extends CompareTagBase

            Evaluate the nested body content of this tag if the specified variable is less than the specified value.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Fields inherited from class org.apache.struts.taglib.logic.CompareTagBase
            DOUBLE_COMPARE, LONG_COMPARE, messages, STRING_COMPARE, value
             
            Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
            cookie, header, name, parameter, property, role, scope, user
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            LessThanTag()
                       
             
            Method Summary
            protected  boolean condition()
                      Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
             
            Methods inherited from class org.apache.struts.taglib.logic.CompareTagBase
            condition, getValue, release, setValue
             
            Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
            doEndTag, doStartTag, getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            doAfterBody, findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Constructor Detail

            LessThanTag

            public LessThanTag()
            Method Detail

            condition

            protected boolean condition()
                                 throws javax.servlet.jsp.JspException
            Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped. This method must be implemented by concrete subclasses.
            Overrides:
            condition in class CompareTagBase
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception occurs


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/logic/MatchTag.html0000644000175000017500000005336110404045212030266 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class MatchTag

            org.apache.struts.taglib.logic
            Class MatchTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--org.apache.struts.taglib.logic.ConditionalTagBase
                          |
                          +--org.apache.struts.taglib.logic.MatchTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag
            Direct Known Subclasses:
            NotMatchTag

            public class MatchTag
            extends ConditionalTagBase

            Evalute the nested body content of this tag if the specified value is a substring of the specified variable.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  java.lang.String location
                      The location where the match must exist (start or end), or null for anywhere.
            protected  java.lang.String value
                      The value to which the variable specified by other attributes of this tag will be matched.
             
            Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
            cookie, header, messages, name, parameter, property, role, scope, user
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            MatchTag()
                       
             
            Method Summary
            protected  boolean condition()
                      Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
            protected  boolean condition(boolean desired)
                      Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
             java.lang.String getLocation()
                       
             java.lang.String getValue()
                       
             void release()
                      Release all allocated resources.
             void setLocation(java.lang.String location)
                       
             void setValue(java.lang.String value)
                       
             
            Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
            doEndTag, doStartTag, getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            doAfterBody, findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            location

            protected java.lang.String location
            The location where the match must exist (start or end), or null for anywhere.

            value

            protected java.lang.String value
            The value to which the variable specified by other attributes of this tag will be matched.
            Constructor Detail

            MatchTag

            public MatchTag()
            Method Detail

            getLocation

            public java.lang.String getLocation()

            setLocation

            public void setLocation(java.lang.String location)

            getValue

            public java.lang.String getValue()

            setValue

            public void setValue(java.lang.String value)

            release

            public void release()
            Release all allocated resources.
            Overrides:
            release in class ConditionalTagBase

            condition

            protected boolean condition()
                                 throws javax.servlet.jsp.JspException
            Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped. This method must be implemented by concrete subclasses.
            Overrides:
            condition in class ConditionalTagBase
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception occurs

            condition

            protected boolean condition(boolean desired)
                                 throws javax.servlet.jsp.JspException
            Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped. This method must be implemented by concrete subclasses.
            Parameters:
            desired - Desired value for a true result
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception occurs


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/logic/NotEqualTag.html0000644000175000017500000004323410404045210030756 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class NotEqualTag

            org.apache.struts.taglib.logic
            Class NotEqualTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--org.apache.struts.taglib.logic.ConditionalTagBase
                          |
                          +--org.apache.struts.taglib.logic.CompareTagBase
                                |
                                +--org.apache.struts.taglib.logic.NotEqualTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class NotEqualTag
            extends CompareTagBase

            Evaluate the nested body content of this tag if the specified variable and value are not equal.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Fields inherited from class org.apache.struts.taglib.logic.CompareTagBase
            DOUBLE_COMPARE, LONG_COMPARE, messages, STRING_COMPARE, value
             
            Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
            cookie, header, name, parameter, property, role, scope, user
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            NotEqualTag()
                       
             
            Method Summary
            protected  boolean condition()
                      Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
             
            Methods inherited from class org.apache.struts.taglib.logic.CompareTagBase
            condition, getValue, release, setValue
             
            Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
            doEndTag, doStartTag, getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            doAfterBody, findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Constructor Detail

            NotEqualTag

            public NotEqualTag()
            Method Detail

            condition

            protected boolean condition()
                                 throws javax.servlet.jsp.JspException
            Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped. This method must be implemented by concrete subclasses.
            Overrides:
            condition in class CompareTagBase
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception occurs


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/logic/NotMatchTag.html0000644000175000017500000004306010404045220030741 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class NotMatchTag

            org.apache.struts.taglib.logic
            Class NotMatchTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--org.apache.struts.taglib.logic.ConditionalTagBase
                          |
                          +--org.apache.struts.taglib.logic.MatchTag
                                |
                                +--org.apache.struts.taglib.logic.NotMatchTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class NotMatchTag
            extends MatchTag

            Evalute the nested body content of this tag if the specified value is not a substring of the specified variable.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Fields inherited from class org.apache.struts.taglib.logic.MatchTag
            location, value
             
            Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
            cookie, header, messages, name, parameter, property, role, scope, user
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            NotMatchTag()
                       
             
            Method Summary
            protected  boolean condition()
                      Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
             
            Methods inherited from class org.apache.struts.taglib.logic.MatchTag
            condition, getLocation, getValue, release, setLocation, setValue
             
            Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
            doEndTag, doStartTag, getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            doAfterBody, findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Constructor Detail

            NotMatchTag

            public NotMatchTag()
            Method Detail

            condition

            protected boolean condition()
                                 throws javax.servlet.jsp.JspException
            Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped. This method must be implemented by concrete subclasses.
            Overrides:
            condition in class MatchTag
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception occurs


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/logic/NotPresentTag.html0000644000175000017500000004110010404045220031316 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class NotPresentTag

            org.apache.struts.taglib.logic
            Class NotPresentTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--org.apache.struts.taglib.logic.ConditionalTagBase
                          |
                          +--org.apache.struts.taglib.logic.PresentTag
                                |
                                +--org.apache.struts.taglib.logic.NotPresentTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class NotPresentTag
            extends PresentTag

            Evalute the nested body content of this tag if the specified value is not present for this request.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
            cookie, header, messages, name, parameter, property, role, scope, user
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            NotPresentTag()
                       
             
            Method Summary
            protected  boolean condition()
                      Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
             
            Methods inherited from class org.apache.struts.taglib.logic.PresentTag
            condition
             
            Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
            doEndTag, doStartTag, getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, release, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            doAfterBody, findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Constructor Detail

            NotPresentTag

            public NotPresentTag()
            Method Detail

            condition

            protected boolean condition()
                                 throws javax.servlet.jsp.JspException
            Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped. This method must be implemented by concrete subclasses.
            Overrides:
            condition in class PresentTag
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception occurs


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/logic/PresentTag.html0000644000175000017500000004235610404045236030662 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class PresentTag

            org.apache.struts.taglib.logic
            Class PresentTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--org.apache.struts.taglib.logic.ConditionalTagBase
                          |
                          +--org.apache.struts.taglib.logic.PresentTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag
            Direct Known Subclasses:
            NotPresentTag

            public class PresentTag
            extends ConditionalTagBase

            Evalute the nested body content of this tag if the specified value is present for this request.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
            cookie, header, messages, name, parameter, property, role, scope, user
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            PresentTag()
                       
             
            Method Summary
            protected  boolean condition()
                      Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
            protected  boolean condition(boolean desired)
                      Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
             
            Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
            doEndTag, doStartTag, getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, release, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            doAfterBody, findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Constructor Detail

            PresentTag

            public PresentTag()
            Method Detail

            condition

            protected boolean condition()
                                 throws javax.servlet.jsp.JspException
            Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped. This method must be implemented by concrete subclasses.
            Overrides:
            condition in class ConditionalTagBase
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception occurs

            condition

            protected boolean condition(boolean desired)
                                 throws javax.servlet.jsp.JspException
            Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped. This method must be implemented by concrete subclasses.
            Parameters:
            desired - Desired outcome for a true result
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception occurs


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/logic/RedirectTag.html0000644000175000017500000010220710404045174030774 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class RedirectTag

            org.apache.struts.taglib.logic
            Class RedirectTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--org.apache.struts.taglib.logic.RedirectTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class RedirectTag
            extends javax.servlet.jsp.tagext.TagSupport

            Generate a URL-encoded redirect to the specified URI.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  java.lang.String anchor
                      The anchor to be added to the end of the generated hyperlink.
            protected  java.lang.String forward
                      The logical forward name from which to retrieve the redirect URI.
            protected  java.lang.String href
                      The redirect URI.
            protected static MessageResources messages
                      The message resources for this package.
            protected  java.lang.String name
                      The JSP bean name for query parameters.
            protected  java.lang.String page
                      The context-relative page URL (beginning with a slash) to which this redirect will be rendered.
            protected  java.lang.String paramId
                      The single-parameter request parameter name to generate.
            protected  java.lang.String paramName
                      The single-parameter JSP bean name.
            protected  java.lang.String paramProperty
                      The single-parameter JSP bean property.
            protected  java.lang.String paramScope
                      The single-parameter JSP bean scope.
            protected  java.lang.String property
                      The JSP bean property name for query parameters.
            protected  java.lang.String scope
                      The scope of the bean specified by the name property, if any.
            protected  boolean transaction
                      Include our transaction control token?
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            RedirectTag()
                       
             
            Method Summary
             int doEndTag()
                      Render the redirect and skip the remainder of this page.
             int doStartTag()
                      Defer generation until the end of this tag is encountered.
             java.lang.String getAnchor()
                       
             java.lang.String getForward()
                       
             java.lang.String getHref()
                       
             java.lang.String getName()
                       
             java.lang.String getPage()
                       
             java.lang.String getParamId()
                       
             java.lang.String getParamName()
                       
             java.lang.String getParamProperty()
                       
             java.lang.String getParamScope()
                       
             java.lang.String getProperty()
                       
             java.lang.String getScope()
                       
             boolean getTransaction()
                       
             void release()
                      Release any acquired resources.
             void setAnchor(java.lang.String anchor)
                       
             void setForward(java.lang.String forward)
                       
             void setHref(java.lang.String href)
                       
             void setName(java.lang.String name)
                       
             void setPage(java.lang.String page)
                       
             void setParamId(java.lang.String paramId)
                       
             void setParamName(java.lang.String paramName)
                       
             void setParamProperty(java.lang.String paramProperty)
                       
             void setParamScope(java.lang.String paramScope)
                       
             void setProperty(java.lang.String property)
                       
             void setScope(java.lang.String scope)
                       
             void setTransaction(boolean transaction)
                       
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            doAfterBody, findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            anchor

            protected java.lang.String anchor
            The anchor to be added to the end of the generated hyperlink.

            forward

            protected java.lang.String forward
            The logical forward name from which to retrieve the redirect URI.

            href

            protected java.lang.String href
            The redirect URI.

            messages

            protected static MessageResources messages
            The message resources for this package.

            name

            protected java.lang.String name
            The JSP bean name for query parameters.

            page

            protected java.lang.String page
            The context-relative page URL (beginning with a slash) to which this redirect will be rendered.

            paramId

            protected java.lang.String paramId
            The single-parameter request parameter name to generate.

            paramName

            protected java.lang.String paramName
            The single-parameter JSP bean name.

            paramProperty

            protected java.lang.String paramProperty
            The single-parameter JSP bean property.

            paramScope

            protected java.lang.String paramScope
            The single-parameter JSP bean scope.

            property

            protected java.lang.String property
            The JSP bean property name for query parameters.

            scope

            protected java.lang.String scope
            The scope of the bean specified by the name property, if any.

            transaction

            protected boolean transaction
            Include our transaction control token?
            Constructor Detail

            RedirectTag

            public RedirectTag()
            Method Detail

            getAnchor

            public java.lang.String getAnchor()

            setAnchor

            public void setAnchor(java.lang.String anchor)

            getForward

            public java.lang.String getForward()

            setForward

            public void setForward(java.lang.String forward)

            getHref

            public java.lang.String getHref()

            setHref

            public void setHref(java.lang.String href)

            getName

            public java.lang.String getName()

            setName

            public void setName(java.lang.String name)

            getPage

            public java.lang.String getPage()

            setPage

            public void setPage(java.lang.String page)

            getParamId

            public java.lang.String getParamId()

            setParamId

            public void setParamId(java.lang.String paramId)

            getParamName

            public java.lang.String getParamName()

            setParamName

            public void setParamName(java.lang.String paramName)

            getParamProperty

            public java.lang.String getParamProperty()

            setParamProperty

            public void setParamProperty(java.lang.String paramProperty)

            getParamScope

            public java.lang.String getParamScope()

            setParamScope

            public void setParamScope(java.lang.String paramScope)

            getProperty

            public java.lang.String getProperty()

            setProperty

            public void setProperty(java.lang.String property)

            getScope

            public java.lang.String getScope()

            setScope

            public void setScope(java.lang.String scope)

            getTransaction

            public boolean getTransaction()

            setTransaction

            public void setTransaction(boolean transaction)

            doStartTag

            public int doStartTag()
                           throws javax.servlet.jsp.JspException
            Defer generation until the end of this tag is encountered.
            Overrides:
            doStartTag in class javax.servlet.jsp.tagext.TagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            doEndTag

            public int doEndTag()
                         throws javax.servlet.jsp.JspException
            Render the redirect and skip the remainder of this page.
            Overrides:
            doEndTag in class javax.servlet.jsp.tagext.TagSupport
            Throws:
            javax.servlet.jsp.JspException - if a JSP exception has occurred

            release

            public void release()
            Release any acquired resources.
            Overrides:
            release in class javax.servlet.jsp.tagext.TagSupport


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/logic/package-frame.html0000644000175000017500000000362010404045214031254 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Package org.apache.struts.taglib.logic org.apache.struts.taglib.logic
            Classes 
            CompareTagBase
            ConditionalTagBase
            EqualTag
            ForwardTag
            GreaterEqualTag
            GreaterThanTag
            IterateTag
            IterateTei
            LessEqualTag
            LessThanTag
            MatchTag
            NotEqualTag
            NotMatchTag
            NotPresentTag
            PresentTag
            RedirectTag
            libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/logic/package-summary.html0000644000175000017500000007054610404045210031666 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Package org.apache.struts.taglib.logic

            Package org.apache.struts.taglib.logic

            The "struts-logic" 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

            See:
                      Description

            Class Summary
            CompareTagBase Abstract base class for comparison tags.
            ConditionalTagBase Abstract base class for the various conditional evaluation tags.
            EqualTag Evaluate the nested body content of this tag if the specified variable and value are equal.
            ForwardTag Perform a forward or redirect to a page that is looked up in the global ActionForwards collection associated with our application.
            GreaterEqualTag Evaluate the nested body content of this tag if the specified variable is greater than or equal to the specified value.
            GreaterThanTag Evaluate the nested body content of this tag if the specified variable is greater than the specified value.
            IterateTag Custom tag that iterates the elements of a collection, which can be either an attribute or the property of an attribute.
            IterateTei Implementation of TagExtraInfo for the iterate tag, identifying the scripting object(s) to be made visible.
            LessEqualTag Evaluate the nested body content of this tag if the specified variable is less than or equal to the specified value.
            LessThanTag Evaluate the nested body content of this tag if the specified variable is less than the specified value.
            MatchTag Evalute the nested body content of this tag if the specified value is a substring of the specified variable.
            NotEqualTag Evaluate the nested body content of this tag if the specified variable and value are not equal.
            NotMatchTag Evalute the nested body content of this tag if the specified value is not a substring of the specified variable.
            NotPresentTag Evalute the nested body content of this tag if the specified value is not present for this request.
            PresentTag Evalute the nested body content of this tag if the specified value is present for this request.
            RedirectTag Generate a URL-encoded redirect to the specified URI.
             

            Package org.apache.struts.taglib.logic Description

            The "struts-logic" 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


            Introduction

            The Logic library supplies tags that are useful for manipulating presentation logic without the use of scriptlets.

            Logic Tag Functionality

            The functionality of the logic tags can be divided into four groups:

            Value Comparisons - The purpose of these tags is to print out the body of the tag if the comparison evaluates to true.

            Substring Matching - The purpose of these tags is to match substrings inside of other Strings

            Presentation Location - The purpose of these tags is to change the location of the presentation page

            Collection Utilities -The purpose of these tags is to handle Collections

            Logic Tag Properties

            Each of the four groups of logic tags have a common set of attributes associated with them. :

            Value Comparisons (equal, notEqual, greaterEqual, lessEqual, greaterThan, lessThan, present, notPresent)

            Each of the value comparison tags takes a value and compares it to the value of a comparison attribute. If the value given can be successfully converted to a float or double, then a number comparison is performed on the value given and the value of the comparison attribute. Otherwise a String comparison is performed. You have to specify one of the comparison attributes: cookie, header, parameter, property or name. For each of the examples, the tag "someComparisonTag"can be replaced by any of the value comparison tags.

            • value - the value to which this tag is going to compare, used in conjunction with one of the comparison attributes: cookie, header, parameter, and property and/or name.
            • cookie - the name of the cookie to compare to value
              • example:
                <logic:someComparisonTag value="someUserName" cookie="userName">
                  User Logged In
                </logic:someComparisonTag>
                
            • header - the name of the HTTP header to compare to value
              • example:
                <logic:someComparisonTag value="en_US" header="Accept-Language">
                  Welcome English-speaking User*
                </logic:someComparisonTag>
                
              • *Note: See the section in the user's guide on Internationalized Messages to do things like this better.

            • name - the variable to be compared to value is the JSP bean specified by this attribute, if property is not specified, or the value of the specified property of this bean, if property is specified.
              • example:
                <%
                  String testString = "pantalones";
                  pageContext.setAttribute("testString", testString, PageContext.PAGE_SCOPE);
                %>
                <jsp:useBean id="testString" scope="page" type="java.lang.String" />
                <logic:someComparisonTag name="testString" value="pantalones">
                  Usted tiene pantalones!
                </logic:someComparison>
                
            • parameter - the name of the request parameter to compare to value
              • example:
                <logic:someComparisonTag value="" parameter="username">
                  Error: a username must be specified
                </logic:someComparisonTag>
                
            • property - the variable to be compared with value is the property (of the bean specified by the name attribute) specified by this attribute. The property reference can be simple, nested, and/or indexed. property is used in conjunction with name to specify a property in the bean specified by name. For the type of syntax used for property, see the users guide on the Bean Tags.
            • scope - the bean scope within which to search for the bean named by the name property, or "any scope" if not specified. Possible values are "page", "request", "session", "application", or "any scope"

            Substring Matching (match, notMatch)

            The substring matching tags take all the same arguments as the value comparison tags. You compare the String specified by value to any of the comparison values you give it, specified by cookie, header, parameter, property or name. Note that in the examples, matchTag corresponds either the match or notMatch tag. Matching tags also have an additional location attribute added:

            • location - has two possible values, "start" and "end". If "start", the substring is attempted to be matched at the beginning of the String, if "end", then the substring is attempted to be matched to the end of the String.
              • example:
                <logic:matchTag parameter="action" value="processLogin" location="start">
                  Processing Login....
                </logic:matchTag>
                
                In this example, a request parameter "action" was compared to see if
                its value started with the String "processLogin". In this case,
                matchTag would have to be <logic:match>.
                

            Presentation Location (forward, redirect)

            The redirect tag is resposible for sending a re-direct to the client's browser, complete with URL-rewriting if it's supported by the container. Its attributes are consistent with the Struts HTML link tag. The base URL is calculated based on which of the following attributes you specify (you must specify exactly one of them):

            • forward - Use the value of this attribute as the name of a global ActionForward to be looked up, and use the context-relative URI found there.
            • href - Use the value of this attribute unchanged.
            • page - Use the value of this attribute as a context-relative URI, and generate a server-relative URI by including the context path.

            The forward tag is responsible for either redirecting or forwarding to a specified global action forward. To define a global ActionForward, see The Action Mappings Configuration File. You can specify whether the forward re-directs or forwards when executed in the config file. The forward tag has one attribute:

            • name - The logical name of the ActionForward to use

            Collection Utilities (iterate)

            The iterate tag is responsible for executing its body content once for every element inside of the specified Collection. There is one required attribute:

            • id - The name of a page scope JSP bean that will contain the current element of the collection on each iteration

            The other attributes allow for more flexibility on which Collection to iterate and how to do it:

            • collection - a runtime expression that evaluates to a Collection to be iterated
              • example:
                <%
                  java.util.Vector vector = new java.util.Vector();
                  vector.add(new Integer(12));
                  vector.add(new Integer(5));
                 %>
                
            <logic:iterate id="myCollectionElement" collection="<%= vector %>">
             Do something with myCollectionElement
            </logic:iterate>
            
            • length - 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 java.lang.Integer that defines the desired value. If not present, there will be no limit on the number of iterations performed
            • name - The name of the JSP bean containing the collection to be iterated (if property is not specified), or the JSP bean whose property getter returns the collection to be iterated (if property is specified).
              • example:
                <%
                java.util.ArrayList list = new java.util.ArrayList(); list.add("First"); list.add("Second"); list.add("Third"); list.add("Fourth"); list.add("Fifth"); pageContext.setAttribute("list", list, PageContext.PAGE_SCOPE); %> <logic:iterate id="myCollectionElement" name="list"> Do something with myCollectionElement </logic:iterate>
            • offset - 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 java.lang.Integer that defines the desired value. If not present, zero is assumed (meaning that the collection will be iterated from the beginning.
            • property - Name of the property, of the JSP bean specified by name, whose getter returns the collection to be iterated. See the user's guide for the bean tag library for the syntax of the property attribute
            • scope - The bean scope within which to search for the bean named by the name property, or "any scope" if not specified. Possible values are "page", "request", "session", "application", or "any scope"
            • type - Fully qualified Java class name of the element to be exposed through the JSP bean named from the id 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.
              • example:
                <%    java.util.ArrayList list = new java.util.ArrayList();
                list.add("First");
                list.add("Second");
                list.add("Third");
                list.add("Fourth");
                list.add("Fifth");
                    pageContext.setAttribute("list", list, PageContext.PAGE_SCOPE);
                 %>
                
                <logic:iterate id="myCollectionElement" name="list" type="java.lang.String">
                  Do something with myCollectionElement
                </logic:iterate>

            Logic Examples

            Value Comparisons

            Logic Equivalence Tags (equal, notEqual, greaterEqual, lessEqual, lessThan, greaterThan)

            You can compare these tags to the "==", "!=" ,">=", "<=", "<", and ">"logic operators in most languages. Their usage is fairly straightforward for numbers. For an example, we'll create a small "Guess That Number" game that uses request parameters from a form input to play. The number will be hardcoded as "7", because this is just an example. Note that this is actually putting application logic inside of jsp pages, and isn't the recommended development method for Struts. It's just an easy way to show how these tags are used:

            The first step is to develop the form that will call on the processing jsp page. This form will use the "GET" method so that you can see the request parameter in the URL. The POST method can also be used with no problem or changes.

            [numberGuess.jsp]

            <form action="numberProcess.jsp" method="GET">
            Please Enter a Number From 1-10: <input type="text" name="number" /><br />
              <center>
                <input type="submit" name="Guess Number" />
              </center>
            </form>
            
            The next step is to create the processing page. It uses the struts-logic taglib. For information on how to set this tag library up in your application to use, see The Web Application Deployment Descriptor

            [numberProcess.jsp]

            <%@ page language="java" %>
            <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
            
            <!-- Is the number guess right? -->
            <logic:equal parameter="number" value="7">
              You guessed right! You win a high speed blender!
            </logic:equal>
            
            <!-- If the number guessed was wrong -->
            <logic:notEqual parameter="number" value="7">
              <!-- Less Than -->
              <logic:lessThan parameter="number" value="7">
                     A little higher...
              </logic:lessThan>
              <!-- Greater Than -->
              <logic:greaterThan parameter="number" value="7">
                     A little lower...
              </logic:greaterThan>
            </logic:notEqual>
            

            Basically, the numberProcess.jsp page uses the equal tag to check if the guess is 7, and if so, prints out a congratulatory message. If the number isn't equal, specified by the use of the <logic:notEqual> tag, it uses the greaterThan and lessThan tags to check if the number is higher or lower than 7, and prints out a hint. As said before, this is a horribly designed small application, with no validity checks on the number input, but shows the basic usage of the logic equal tags

            For String comparisons, the equal tags use the java.lang.String.compareTo() method. See the javadocs on the compareTo() method for more information, located here.

            Match and Present Tags (match, notMatch, present, notPresent)

            You use the match tags in conjunction with the present tags in order to do substring matches. For an example using this we'll use headers, specifically the "Referer" header. The HTTP referer header gives the URL of the document that refers to the requested URL. We'll use this to check if the user is coming from a link specified by a Google search, and offer a personalized greeting, frightening users that find our site through the search engine with our amazing intimate knowledge of their browsing habits:

            [sneaky.jsp]

            <%@ page language="java" %>
            <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
            
            
            <!-- Check to see if the "Referer" header is present -->
            <logic:present header="Referer">
              <logic:match header="Referer" value="google.com">
                I see you found our site through Google... interesting.
              </logic:match>
              <logic:notMatch header="Referer" value="google.com">
                Welcome to the site, we're secretly logging what site you came from,
                because we're shady...
              </logic:notMatch>
            </logic:present>
            
            <!-- If the header is not present -->
            <logic:notPresent header="Referer">
              Hi, welcome to our site.  Please fill out our
              <a href="nonExistantForm.jsp">Form</a> and
              tell us where you're coming from.
            </logic:notPresent>

            Note: Another interesting usage of these tags and headers would be to use the "User-Agent" header to display browser-specific javascript.

            Collection Utilities (iterate)

            For an example of using the <logic:iterate> tag, we'll use one of the previous examples given, in it's entirety. This example uses the <bean:write> tag from the Bean Tag Library, see the User's Guide on the bean tag library for more information on it's usage:

            [iterate.jsp]

            <%@ page language="java" %>
            <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
            <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
            
            <%
            java.util.ArrayList list = new java.util.ArrayList();
              list.add("First");
              list.add("Second");
              list.add("Third");
              list.add("Fourth");
              list.add("Fifth");
              pageContext.setAttribute("list", list, PageContext.PAGE_SCOPE);
            %>
            
            <logic:iterate id="myCollectionElement" name="list">
              Element Value: <bean:write name="myCollectionElement" /><br />
            </logic:iterate>



            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/logic/package-tree.html0000644000175000017500000001664710404045216031140 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: org.apache.struts.taglib.logic Class Hierarchy

            Hierarchy For Package org.apache.struts.taglib.logic

            Package Hierarchies:
            All Packages

            Class Hierarchy

            • class java.lang.Object
              • class javax.servlet.jsp.tagext.TagExtraInfo
              • class javax.servlet.jsp.tagext.TagSupport (implements javax.servlet.jsp.tagext.IterationTag, java.io.Serializable)


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/template/0000755000175000017500000000000010423130300026410 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/template/util/0000755000175000017500000000000010423130300027365 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/template/util/Content.html0000644000175000017500000003206110404045242031700 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class Content

            org.apache.struts.taglib.template.util
            Class Content

            java.lang.Object
              |
              +--org.apache.struts.taglib.template.util.Content
            
            All Implemented Interfaces:
            java.io.Serializable

            public class Content
            extends java.lang.Object
            implements java.io.Serializable

            A utility file for templates.

            This represents template content, which is included by templates. Templates can also treat content as plain text and print it to the implicit out variable. This simple class maintain two properties:

            • content: A string representing either a URI or text.
            • direct: If true, content is printed; otherwise content is included (default is false).

            Author:
            David Geary
            See Also:
            Serialized Form

            Field Summary
            private  java.lang.String content
                      Templates regard this as content to be either included or printed directly.
            This is a blank final that is set at construction.
            private  java.lang.String direct
                      Represents a boolean; if true, content is included, otherwise content is printed.
            This is a blank final that is set at construction.
            This is a string instead of a boolean as a convenience for the tags, whose corresponding attribute is a string.
             
            Constructor Summary
            Content(java.lang.String content, java.lang.String direct)
                      The only constructor.
             
            Method Summary
             java.lang.String getContent()
                      Return content
             boolean isDirect()
                      Is content to be printed directly (isDirect() == true)
            instead of included (isDirect() == false)?
             java.lang.String toString()
                      Returns a string representation of the content
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, wait, wait, wait
             

            Field Detail

            content

            private final java.lang.String content
            Templates regard this as content to be either included or printed directly.
            This is a blank final that is set at construction.

            direct

            private final java.lang.String direct
            Represents a boolean; if true, content is included, otherwise content is printed.
            This is a blank final that is set at construction.
            This is a string instead of a boolean as a convenience for the tags, whose corresponding attribute is a string.
            Constructor Detail

            Content

            public Content(java.lang.String content,
                           java.lang.String direct)
            The only constructor.
            Parameters:
            content - The content's URI
            direct - Is content printed directly (true) or included (false)?
            Method Detail

            getContent

            public java.lang.String getContent()
            Return content

            isDirect

            public boolean isDirect()
            Is content to be printed directly (isDirect() == true)
            instead of included (isDirect() == false)?

            toString

            public java.lang.String toString()
            Returns a string representation of the content
            Overrides:
            toString in class java.lang.Object


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/template/util/ContentMap.html0000644000175000017500000002657410404045220032346 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class ContentMap

            org.apache.struts.taglib.template.util
            Class ContentMap

            java.lang.Object
              |
              +--org.apache.struts.taglib.template.util.ContentMap
            
            All Implemented Interfaces:
            java.io.Serializable

            public class ContentMap
            extends java.lang.Object
            implements java.io.Serializable

            A simple facade for a hash map. This class restricts operations that can be performed on a hash map of contents.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            David Geary
            See Also:
            Serialized Form

            Field Summary
            private  java.util.HashMap map
                      The map.
             
            Constructor Summary
            ContentMap()
                      Explicitly declare a do-nothing, no-arg constructor.
             
            Method Summary
             Content get(java.lang.String name)
                      Returns the content associated with name
             void put(java.lang.String name, Content content)
                      Put named content into map.
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            map

            private java.util.HashMap map
            The map.
            Constructor Detail

            ContentMap

            public ContentMap()
            Explicitly declare a do-nothing, no-arg constructor.
            Method Detail

            put

            public void put(java.lang.String name,
                            Content content)
            Put named content into map.
            Parameters:
            name - The content's name
            content - The content

            get

            public Content get(java.lang.String name)
            Returns the content associated with name


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/template/util/ContentMapStack.html0000644000175000017500000003012610404045240033322 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class ContentMapStack

            org.apache.struts.taglib.template.util
            Class ContentMapStack

            java.lang.Object
              |
              +--org.apache.struts.taglib.template.util.ContentMapStack
            

            public class ContentMapStack
            extends java.lang.Object

            This class provides access to a stack of ContentMaps in request scope through static methods.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            David Geary

            Constructor Summary
            private ContentMapStack()
                      No instantiations of this class are allowed.
             
            Method Summary
            static java.util.Stack getStack(javax.servlet.jsp.PageContext pc)
                      Return a reference to the stack.
            static ContentMap peek(javax.servlet.jsp.PageContext pc)
                      Peek at the map on top of the stack.
            static ContentMap pop(javax.servlet.jsp.PageContext pc)
                       
            static void push(javax.servlet.jsp.PageContext pc, ContentMap map)
                      Push a content map onto the stack.
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Constructor Detail

            ContentMapStack

            private ContentMapStack()
            No instantiations of this class are allowed.
            Method Detail

            getStack

            public static java.util.Stack getStack(javax.servlet.jsp.PageContext pc)
            Return a reference to the stack. If there is no stack, one is created and placed into request scope associated with the page context.
            Parameters:
            pc - The page context associated with a custom tag.

            peek

            public static ContentMap peek(javax.servlet.jsp.PageContext pc)
            Peek at the map on top of the stack.
            Parameters:
            pc - The page context associated with a custom tag.

            push

            public static void push(javax.servlet.jsp.PageContext pc,
                                    ContentMap map)
            Push a content map onto the stack.
            Parameters:
            pc - The page context associated with a custom tag.
            map - A content map that gets pushed onto the stack.

            pop

            public static ContentMap pop(javax.servlet.jsp.PageContext pc)
            Parameters:
            pc - The page context associated with a custom tag.


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/template/util/package-frame.html0000644000175000017500000000201210404045220032736 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Package org.apache.struts.taglib.template.util org.apache.struts.taglib.template.util
            Classes 
            Content
            ContentMap
            ContentMapStack
            libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/template/util/package-summary.html0000644000175000017500000001241110404045214033350 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Package org.apache.struts.taglib.template.util

            Package org.apache.struts.taglib.template.util

            Class Summary
            Content A utility file for templates.
            ContentMap A simple facade for a hash map.
            ContentMapStack This class provides access to a stack of ContentMaps in request scope through static methods.
             



            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/template/util/package-tree.html0000644000175000017500000001243510404045240032617 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: org.apache.struts.taglib.template.util Class Hierarchy

            Hierarchy For Package org.apache.struts.taglib.template.util

            Package Hierarchies:
            All Packages

            Class Hierarchy

            • class java.lang.Object
              • class org.apache.struts.taglib.template.util.Content (implements java.io.Serializable)
              • class org.apache.struts.taglib.template.util.ContentMap (implements java.io.Serializable)
              • class org.apache.struts.taglib.template.util.ContentMapStack


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/template/GetTag.html0000644000175000017500000004444010404045204030466 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class GetTag

            org.apache.struts.taglib.template
            Class GetTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--org.apache.struts.taglib.template.GetTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class GetTag
            extends javax.servlet.jsp.tagext.TagSupport

            This is the tag handler for <template:get>, which gets content from the request scope and either includes the content or prints it, depending upon the value of the content's direct attribute.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            David Geary
            See Also:
            Serialized Form

            Field Summary
            private  boolean flush
                      Should we flush before including this text?
            private  java.lang.String name
                      The name of the content that this tag includes (or prints).
            private  java.lang.String role
                      The role that the user must be in to retrieve content.
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            GetTag()
                       
             
            Method Summary
             int doStartTag()
                      Print content named by setName() or include it, depending on the content's direct attribute.
             boolean getFlush()
                      Get the flush-before-include attribute.
             java.lang.String getName()
                      Get the name attribute.
             java.lang.String getRole()
                      Get the role attribute.
             void release()
                      Reset member values for reuse.
            private  void saveException(java.lang.Throwable exception)
                      Save the specified exception in request scope if there is not already one present.
             void setFlush(boolean flush)
                      Set the flush-before-include property
             void setName(java.lang.String name)
                      Set the name attribute
             void setRole(java.lang.String role)
                      Set the role attribute
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            doAfterBody, doEndTag, findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            flush

            private boolean flush
            Should we flush before including this text?

            name

            private java.lang.String name
            The name of the content that this tag includes (or prints).

            role

            private java.lang.String role
            The role that the user must be in to retrieve content.
            Constructor Detail

            GetTag

            public GetTag()
            Method Detail

            setFlush

            public void setFlush(boolean flush)
            Set the flush-before-include property
            Parameters:
            flush - The new flush property

            setName

            public void setName(java.lang.String name)
            Set the name attribute
            Parameters:
            name - The name of the content to get.

            setRole

            public void setRole(java.lang.String role)
            Set the role attribute
            Parameters:
            name - The role the user must be in to retrieve content.

            getFlush

            public boolean getFlush()
            Get the flush-before-include attribute.

            getName

            public java.lang.String getName()
            Get the name attribute.

            getRole

            public java.lang.String getRole()
            Get the role attribute.

            doStartTag

            public int doStartTag()
                           throws javax.servlet.jsp.JspException
            Print content named by setName() or include it, depending on the content's direct attribute.
            Overrides:
            doStartTag in class javax.servlet.jsp.tagext.TagSupport

            release

            public void release()
            Reset member values for reuse. This method calls super.release(), which invokes TagSupport.release(), which typically does nothing.
            Overrides:
            release in class javax.servlet.jsp.tagext.TagSupport

            saveException

            private void saveException(java.lang.Throwable exception)
            Save the specified exception in request scope if there is not already one present.
            Parameters:
            exception - Exception to be conditionally saved


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/template/InsertTag.html0000644000175000017500000004404510404045204031214 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class InsertTag

            org.apache.struts.taglib.template
            Class InsertTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--org.apache.struts.taglib.template.InsertTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class InsertTag
            extends javax.servlet.jsp.tagext.TagSupport

            This is the tag handler for <template:insert>, which includes a template. The tag's body content consists of <template:put> tags, which are accessed by <template:get> in the template.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            David Geary
            See Also:
            Serialized Form

            Field Summary
            private  ContentMap map
                      Each insert tag has a map of content.
            private  java.lang.String template
                      The URI of the template.
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            InsertTag()
                       
             
            Method Summary
             int doEndTag()
                      Process the end tag by including the template.
             int doStartTag()
                      Process the start tag by pushing this tag's map onto the content map stack.
             ContentMap getContentMap()
                      Get the map attribute.
             java.lang.String getTemplate()
                      Get the template attribute.
             void put(java.lang.String name, Content content)
                      This method is a convenience for <template:put> tags for putting content into the map.
             void release()
                      Reset member values for reuse.
            private  void saveException(java.lang.Throwable exception)
                      Save the specified exception in request scope if there is not already one present.
             void setTemplate(java.lang.String template)
                      Set the template attribute.
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            doAfterBody, findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            map

            private ContentMap map
            Each insert tag has a map of content.

            template

            private java.lang.String template
            The URI of the template.
            Constructor Detail

            InsertTag

            public InsertTag()
            Method Detail

            setTemplate

            public void setTemplate(java.lang.String template)
            Set the template attribute.

            getTemplate

            public java.lang.String getTemplate()
            Get the template attribute.

            getContentMap

            public ContentMap getContentMap()
            Get the map attribute.

            doStartTag

            public int doStartTag()
                           throws javax.servlet.jsp.JspException
            Process the start tag by pushing this tag's map onto the content map stack. See org.apache.struts.taglib.template.util.ContentMapStack.
            Overrides:
            doStartTag in class javax.servlet.jsp.tagext.TagSupport

            doEndTag

            public int doEndTag()
                         throws javax.servlet.jsp.JspException
            Process the end tag by including the template.
            Overrides:
            doEndTag in class javax.servlet.jsp.tagext.TagSupport

            put

            public void put(java.lang.String name,
                            Content content)
            This method is a convenience for <template:put> tags for putting content into the map.

            release

            public void release()
            Reset member values for reuse. This method calls super.release(), which invokes TagSupport.release(), which typically does nothing.
            Overrides:
            release in class javax.servlet.jsp.tagext.TagSupport

            saveException

            private void saveException(java.lang.Throwable exception)
            Save the specified exception in request scope if there is not already one present.
            Parameters:
            exception - Exception to be conditionally saved


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/template/PutTag.html0000644000175000017500000005621510404045232030523 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class PutTag

            org.apache.struts.taglib.template
            Class PutTag

            java.lang.Object
              |
              +--javax.servlet.jsp.tagext.TagSupport
                    |
                    +--javax.servlet.jsp.tagext.BodyTagSupport
                          |
                          +--org.apache.struts.taglib.template.PutTag
            
            All Implemented Interfaces:
            javax.servlet.jsp.tagext.BodyTag, javax.servlet.jsp.tagext.IterationTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

            public class PutTag
            extends javax.servlet.jsp.tagext.BodyTagSupport

            Tag handler for <template:put>, which puts content into request scope.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            David Geary
            See Also:
            Serialized Form

            Field Summary
            private  java.lang.String content
                      The content's URI (or text).
            private  java.lang.String direct
                      Determines whether content is included (false) or printed (true).
            private  java.lang.String name
                      The content's name.
            private  java.lang.String role
                      The role that the user must be in to store content.
             
            Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            bodyContent
             
            Fields inherited from class javax.servlet.jsp.tagext.TagSupport
            id, pageContext, parent, values
             
            Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
            EVAL_BODY_BUFFERED, EVAL_BODY_TAG
             
            Fields inherited from interface javax.servlet.jsp.tagext.IterationTag
            EVAL_BODY_AGAIN
             
            Fields inherited from interface javax.servlet.jsp.tagext.Tag
            EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
             
            Constructor Summary
            PutTag()
                       
             
            Method Summary
             int doEndTag()
                      Process the end tag by putting content into the enclosing insert tag.
            private  java.lang.String getActualContent()
                      Returns the content associated with this tag.
            private  javax.servlet.jsp.tagext.TagSupport getAncestor(java.lang.String className)
                      Convenience method for locating ancestor tags by class name.
             java.lang.String getContent()
                      Get the content attribute.
             java.lang.String getDirect()
                      Returns the direct attribute associated with this tag.
             java.lang.String getName()
                      Get the name attribute.
             java.lang.String getRole()
                      Get the role attribute.
            private  boolean hasBody()
                      Returns a boolean indicating whether this tag has a body.
             void release()
                      Reset member values for reuse.
             void setContent(java.lang.String content)
                      Set the content's URI (if it's to be included) or text (if it's to be printed).
             void setDirect(java.lang.String direct)
                      Set direct to true, and content will be printed directly, instead of included (direct == false).
             void setName(java.lang.String name)
                      Set the content name.
             void setRole(java.lang.String role)
                       
             
            Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
            doAfterBody, doInitBody, doStartTag, getBodyContent, getPreviousOut, setBodyContent
             
            Methods inherited from class javax.servlet.jsp.tagext.TagSupport
            findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             
            Methods inherited from interface javax.servlet.jsp.tagext.Tag
            getParent, setPageContext, setParent
             

            Field Detail

            name

            private java.lang.String name
            The content's name.

            role

            private java.lang.String role
            The role that the user must be in to store content.

            content

            private java.lang.String content
            The content's URI (or text).

            direct

            private java.lang.String direct
            Determines whether content is included (false) or printed (true). Content is included (false) by default.
            Constructor Detail

            PutTag

            public PutTag()
            Method Detail

            setName

            public void setName(java.lang.String name)
            Set the content name.

            setRole

            public void setRole(java.lang.String role)
            Parameters:
            name - The role the user must be in to store content.

            setContent

            public void setContent(java.lang.String content)
            Set the content's URI (if it's to be included) or text (if it's to be printed).

            setDirect

            public void setDirect(java.lang.String direct)
            Set direct to true, and content will be printed directly, instead of included (direct == false).

            getName

            public java.lang.String getName()
            Get the name attribute.

            getRole

            public java.lang.String getRole()
            Get the role attribute.

            getContent

            public java.lang.String getContent()
            Get the content attribute.

            getDirect

            public java.lang.String getDirect()
            Returns the direct attribute associated with this tag.

            doEndTag

            public int doEndTag()
                         throws javax.servlet.jsp.JspException
            Process the end tag by putting content into the enclosing insert tag.
            Overrides:
            doEndTag in class javax.servlet.jsp.tagext.BodyTagSupport
            Throws:
            javax.servlet.jsp.JspException - if this tag is not enclosed by <template:insert>.

            release

            public void release()
            Reset member values for reuse. This method calls super.release(), which invokes TagSupport.release(), which typically does nothing.
            Overrides:
            release in class javax.servlet.jsp.tagext.BodyTagSupport

            getActualContent

            private java.lang.String getActualContent()
                                               throws javax.servlet.jsp.JspException
            Returns the content associated with this tag.

            hasBody

            private boolean hasBody()
            Returns a boolean indicating whether this tag has a body.

            getAncestor

            private javax.servlet.jsp.tagext.TagSupport getAncestor(java.lang.String className)
                                                             throws javax.servlet.jsp.JspException
            Convenience method for locating ancestor tags by class name.
            Parameters:
            className - The name of the ancestor class.


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/template/package-frame.html0000644000175000017500000000173710404045250032001 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Package org.apache.struts.taglib.template org.apache.struts.taglib.template
            Classes 
            GetTag
            InsertTag
            PutTag
            libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/template/package-summary.html0000644000175000017500000003115010404045216032376 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Package org.apache.struts.taglib.template

            Package org.apache.struts.taglib.template

            The "struts-template" tag library contains tags that are useful in creating dynamic JSP templates for pages which share a common format.

            See:
                      Description

            Class Summary
            GetTag This is the tag handler for <template:get>, which gets content from the request scope and either includes the content or prints it, depending upon the value of the content's direct attribute.
            InsertTag This is the tag handler for <template:insert>, which includes a template.
            PutTag Tag handler for <template:put>, which puts content into request scope.
             

            Package org.apache.struts.taglib.template Description

            The "struts-template" tag library contains tags that are useful in creating dynamic JSP templates for pages which share a common format. These templates are best used when it is likely that a layout shared by several pages in your application will change. The functionality provided by these tags is similar to what can be achieved using standard JSP include directive, but are dynamic rather than static.


            Introduction

            The Template library supplies tags that are useful for creating dynamic JSP templates for pages which share a common format.

            Template Tag Functionality

            Each of the three template tags has a specific, interelated function:

            • get - Retrieves content from a request scope bean, for use in the template layout.
            • insert - Retrieves (or includes) the specified template file, and then inserts the specified content into the template's layout. By changing the layout defined in the template file, any other file that inserts the template will automatically use the new layout.
            • put - Creates a request scope bean that specifies the content to be used by the get tag. Content can be printed directly or included from a JSP or HTML file.

            Template Tag Properties

            The three template tags use very simple attributes :

            get - Requires a single property, the name of the content to be inserted. This tag is used in the template file to indicate where in the layout to insert the content. This name matches the name property used by a put tag.

            insert - Requires a single property, the name of the template. This tag is the parent to one or more put tags. The put tags indicate the content to be inserted into the template. The layout of the content is determined by get tags placed in the template.

            put - Requires a name property, which should match a name used in the template file. The content property indicates the source of the content. The optional direct attribute indicates whether the content should be included or printed directly (as a literal string). The default is false, meaning content is included.

            Template Tag Examples

            A sample template file


            <%@ taglib uri='/WEB-INF/tlds/struts-template.tld' prefix='template' %>
            <html><head><title><template:get name='title'/></title></head>
            <body background='graphics/blueAndWhiteBackground.gif'> <table>
            <tr valign='top'><td><template:get name='sidebar'/></td>
            <td><table>
            <tr><td><template:get name='header'/></td></tr>
            <tr><td><template:get name='content'/></td></tr>
            <tr><td><template:get name='footer'/></td></tr>
            </table>
            </td>
            </tr> </table>
            </body></html> <%
            /*
            "chapterTemplate.jsp" Display a "sidebar" in a column along the left side of the page.
            Display a "header" over the right column.
            Display the page "content" below the header.
            Display a "footer" at below the content.
            If we change the layout of the elements on this page, all pages
            inserting this page will also change to use the new layout.
            */
            %>

            A sample JSP using the template


            <%@ taglib uri='/WEB-INF/tlds/struts-template.tld' prefix='template' %>
            <template:insert template='/chapterTemplate.jsp'>
            <template:put name='title' content='Templates' direct='true'/>
            <template:put name='header' content='/header.html' />
            <template:put name='sidebar' content='/sidebar.jsp' />
            <template:put name='content' content='/introduction.html'/>
            <template:put name='footer' content='/footer.html' /> </template:insert> <%
            /*
            "introduction.jsp" Specify template for this page (chapterTemplate.jsp).
            The chapterTemplate.jsp defines the layout positions for five
            elements: title, header, sidebar, content, and footer.
            Specify the source file (html or jsp) for each element.
            */
            %>

            A sample HTML content file ("header.html") used by "introduction.jsp", and others.


            <table>
            <tr>
            <td><img src='graphics/java.gif'/></td>
            <td><img src='graphics/templates.gif'/></td>
            </tr>
            </table>

            A sample JSP content file ("sidebar.jsp") used by "introduction.jsp", and others.


            <font size='5'><a name="top">Topics</a></font><p>
            <table width='145'>
            <tr><td><a href='introduction.jsp'>
            Introduction </a></td></tr>
            <tr><td><a href='using.jsp'>
            Using Templates </a></td></tr>
            <tr><td><a href='optional.jsp'>
            Optional Content </a></td></tr>
            <tr><td><a href='more.jsp'>
            ... and more ...</a></td></tr>
            </table></p>
            <%
            /*
            Specify navigational links for this application.
            */
            %>

            A sample HTML content file used by "introduction.jsp" only.


            <html>
            <head>
            <link rel="stylesheet" href="css/templates.css"
            charset="ISO-8859-1" type="text/css">
            </head>
            <body> <h3 class="ChapTitle">Introduction</h3>
            <p class="Paragraph">Window toolkits typically provide a layout mechanism < ... />



            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/taglib/template/package-tree.html0000644000175000017500000001260310404045210031634 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: org.apache.struts.taglib.template Class Hierarchy

            Hierarchy For Package org.apache.struts.taglib.template

            Package Hierarchies:
            All Packages

            Class Hierarchy

            • class java.lang.Object
              • class javax.servlet.jsp.tagext.TagSupport (implements javax.servlet.jsp.tagext.IterationTag, java.io.Serializable)
                • class javax.servlet.jsp.tagext.BodyTagSupport (implements javax.servlet.jsp.tagext.BodyTag)
                  • class org.apache.struts.taglib.template.PutTag
                • class org.apache.struts.taglib.template.GetTag
                • class org.apache.struts.taglib.template.InsertTag


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/upload/0000755000175000017500000000000010423130300024617 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/upload/BufferedMultipartInputStream.html0000644000175000017500000006760110404045246033354 0ustar arnaudarnaud00000000000000 BufferedMultipartInputStream (Apache Struts API Documentation)

            org.apache.struts.upload
            Class BufferedMultipartInputStream

            java.lang.Object
              |
              +--java.io.InputStream
                    |
                    +--org.apache.struts.upload.BufferedMultipartInputStream
            

            public class BufferedMultipartInputStream
            extends java.io.InputStream

            This class implements buffering for an InputStream as well as a readLine method. The purpose of this is to provide a reliable readLine() method.


            Field Summary
            protected  byte[] buffer
                      The byte array used to hold buffered data
            protected  int bufferLength
                      The number of bytes read from the underlying InputStream that are in the buffer
            protected  int bufferOffset
                      The current offset we're at in the buffer's byte array
            protected  int bufferSize
                      The size of the byte array buffer
            protected  long contentLength
                      The content length of the multipart data
            protected  boolean contentLengthMet
                      Whether or not bytes up to the Content-Length have been read
            protected  java.io.InputStream inputStream
                      The underlying InputStream used by this class
            protected  boolean maxLengthMet
                      Whether or not bytes up to the maximum length have been read
            protected  long maxSize
                      The maximum allowed size for the multipart data, or -1 for an unlimited maximum file length
            protected  int totalLength
                      The total number of bytes read so far
             
            Fields inherited from class java.io.InputStream
             
            Constructor Summary
            BufferedMultipartInputStream(java.io.InputStream inputStream, int bufferSize, long contentLength, long maxSize)
                      Public constructor for this class, just wraps the InputStream given
             
            Method Summary
             int available()
                      This method returns the number of available bytes left to read in the buffer before it has to be refilled
             void close()
                      This method attempts to close the underlying InputStream
             boolean contentLengthMet()
                       
            protected  void fill()
                      Fills the buffer with data from the underlying inputStream.
             void mark(int position)
                      This method calls on the mark() method of the underlying InputStream
             boolean markSupported()
                      This method calls on the markSupported() method of the underlying InputStream
             boolean maxLengthMet()
                       
             int read()
                      This method returns the next byte in the buffer, and refills it if necessary.
             int read(byte[] b)
                      This method populates the byte array b with data up to b.length bytes
             int read(byte[] b, int offset, int length)
                      This method populates the byte array b with data up to length starting at b[offset]
             byte[] readLine()
                      This method reads a line, regardless of length.
             int readLine(byte[] b, int offset, int length)
                      This method reads into the byte array b until a newline ('\n') character is encountered or the number of bytes specified by length have been read
             void reset()
                      This method makes a call to the reset() method of the underlying InputStream
             
            Methods inherited from class java.io.InputStream
            skip
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
             

            Field Detail

            inputStream

            protected java.io.InputStream inputStream
            The underlying InputStream used by this class


            buffer

            protected byte[] buffer
            The byte array used to hold buffered data


            bufferOffset

            protected int bufferOffset
            The current offset we're at in the buffer's byte array


            bufferSize

            protected int bufferSize
            The size of the byte array buffer


            bufferLength

            protected int bufferLength
            The number of bytes read from the underlying InputStream that are in the buffer


            totalLength

            protected int totalLength
            The total number of bytes read so far


            contentLength

            protected long contentLength
            The content length of the multipart data


            maxSize

            protected long maxSize
            The maximum allowed size for the multipart data, or -1 for an unlimited maximum file length


            contentLengthMet

            protected boolean contentLengthMet
            Whether or not bytes up to the Content-Length have been read


            maxLengthMet

            protected boolean maxLengthMet
            Whether or not bytes up to the maximum length have been read

            Constructor Detail

            BufferedMultipartInputStream

            public BufferedMultipartInputStream(java.io.InputStream inputStream,
                                                int bufferSize,
                                                long contentLength,
                                                long maxSize)
                                         throws java.io.IOException
            Public constructor for this class, just wraps the InputStream given

            Parameters:
            inputStream - The underlying stream to read from
            bufferSize - The size in bytes of the internal buffer
            contentLength - The content length for this request
            maxSize - The maximum size in bytes that this multipart request can be, or -1 for an unlimited length
            Method Detail

            available

            public int available()
            This method returns the number of available bytes left to read in the buffer before it has to be refilled

            Overrides:
            available in class java.io.InputStream

            close

            public void close()
                       throws java.io.IOException
            This method attempts to close the underlying InputStream

            Overrides:
            close in class java.io.InputStream
            java.io.IOException

            mark

            public void mark(int position)
            This method calls on the mark() method of the underlying InputStream

            Overrides:
            mark in class java.io.InputStream

            markSupported

            public boolean markSupported()
            This method calls on the markSupported() method of the underlying InputStream

            Overrides:
            markSupported in class java.io.InputStream
            Returns:
            Whether or not the underlying InputStream supports marking

            maxLengthMet

            public boolean maxLengthMet()
            Returns:
            true if the maximum length has been reached, false otherwise

            contentLengthMet

            public boolean contentLengthMet()
            Returns:
            true if the content length has been reached, false otherwise

            read

            public int read()
                     throws java.io.IOException
            This method returns the next byte in the buffer, and refills it if necessary.

            Specified by:
            read in class java.io.InputStream
            Returns:
            The next byte read in the buffer, or -1 if the end of the stream has been reached
            java.io.IOException

            read

            public int read(byte[] b)
                     throws java.io.IOException
            This method populates the byte array b with data up to b.length bytes

            Overrides:
            read in class java.io.InputStream
            java.io.IOException

            read

            public int read(byte[] b,
                            int offset,
                            int length)
                     throws java.io.IOException
            This method populates the byte array b with data up to length starting at b[offset]

            Overrides:
            read in class java.io.InputStream
            java.io.IOException

            readLine

            public int readLine(byte[] b,
                                int offset,
                                int length)
                         throws java.io.IOException
            This method reads into the byte array b until a newline ('\n') character is encountered or the number of bytes specified by length have been read

            java.io.IOException

            readLine

            public byte[] readLine()
                            throws java.io.IOException
            This method reads a line, regardless of length.

            Returns:
            A byte array representing the line.
            java.io.IOException

            reset

            public void reset()
                       throws java.io.IOException
            This method makes a call to the reset() method of the underlying InputStream

            Overrides:
            reset in class java.io.InputStream
            java.io.IOException

            fill

            protected void fill()
                         throws java.io.IOException
            Fills the buffer with data from the underlying inputStream. If it can't fill the entire buffer in one read, it will read as many times as necessary to fill the buffer

            java.io.IOException


            Copyright © 2000-2002 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/upload/ContentLengthExceededException.html0000644000175000017500000003102410404045172033602 0ustar arnaudarnaud00000000000000 ContentLengthExceededException (Apache Struts API Documentation)

            org.apache.struts.upload
            Class ContentLengthExceededException

            java.lang.Object
              |
              +--java.lang.Throwable
                    |
                    +--java.lang.Exception
                          |
                          +--java.io.IOException
                                |
                                +--org.apache.struts.upload.ContentLengthExceededException
            
            All Implemented Interfaces:
            java.io.Serializable

            public class ContentLengthExceededException
            extends java.io.IOException

            This exception is thrown when multipart post data exceeds the value given by the Content-Length header

            See Also:
            Serialized Form

            Field Summary
            protected  java.lang.String message
                       
             
            Fields inherited from class java.lang.Exception
             
            Fields inherited from class java.lang.Throwable
             
            Constructor Summary
            ContentLengthExceededException()
                       
            ContentLengthExceededException(long contentLength)
                       
             
            Method Summary
             java.lang.String getMessage()
                       
             
            Methods inherited from class java.lang.Throwable
            fillInStackTrace, getCause, getLocalizedMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
             

            Field Detail

            message

            protected java.lang.String message
            Constructor Detail

            ContentLengthExceededException

            public ContentLengthExceededException()

            ContentLengthExceededException

            public ContentLengthExceededException(long contentLength)
            Method Detail

            getMessage

            public java.lang.String getMessage()
            Overrides:
            getMessage in class java.lang.Throwable


            Copyright © 2000-2002 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/upload/DiskFile.html0000644000175000017500000005540210404045216027217 0ustar arnaudarnaud00000000000000 DiskFile (Apache Struts API Documentation)

            org.apache.struts.upload
            Class DiskFile

            java.lang.Object
              |
              +--org.apache.struts.upload.DiskFile
            
            All Implemented Interfaces:
            FormFile

            public class DiskFile
            extends java.lang.Object
            implements FormFile


            Field Summary
            protected  java.lang.String contentType
                      The content type of the file
            protected  java.lang.String fileName
                      The name of the file
            protected  java.lang.String filePath
                      The filepath to the temporary file
            protected  int fileSize
                      The size in bytes of the file
             
            Constructor Summary
            DiskFile(java.lang.String filePath)
                       
             
            Method Summary
             void destroy()
                      Delete the temporary file.
             java.lang.String getContentType()
                      Get the content type
             byte[] getFileData()
                      Attempt to read the temporary file and get it's data in byte array form.
             byte[] getFileData(int bufferSize)
                      Attempts to read a file n bytes at a time, n being equal to "bufferSize".
             java.lang.String getFileName()
                      Get the file name
             java.lang.String getFilePath()
                      Get the temporary file path for this form file
             int getFileSize()
                      Get the file size
             java.io.InputStream getInputStream()
                      Returns a FileInputStream to the file
             void setContentType(java.lang.String contentType)
                      Set the content type
             void setFileName(java.lang.String filename)
                      Set the file name
             void setFileSize(int fileSize)
                      Set the file size
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
             

            Field Detail

            filePath

            protected java.lang.String filePath
            The filepath to the temporary file


            contentType

            protected java.lang.String contentType
            The content type of the file


            fileSize

            protected int fileSize
            The size in bytes of the file


            fileName

            protected java.lang.String fileName
            The name of the file

            Constructor Detail

            DiskFile

            public DiskFile(java.lang.String filePath)
            Method Detail

            getFileData

            public byte[] getFileData()
                               throws java.io.FileNotFoundException,
                                      java.io.IOException
            Attempt to read the temporary file and get it's data in byte array form. Tries to read the entire file (using a byte array the size of getFileSize()) at once, in one call to FileInputStream.read(byte[]). For buffered reading, see getFileData(int). Note that this method can be dangerous, and that the size of a file can cause an OutOfMemoryError quite easily. You should use getInputStream and do your own thing.

            Specified by:
            getFileData in interface FormFile
            Returns:
            The file data as a byte array.
            Throws:
            java.io.FileNotFoundException - If the temp file no longer exists
            java.io.IOException - if there is some sort of IO problem.
            See Also:
            getFileData(int)

            getFileData

            public byte[] getFileData(int bufferSize)
                               throws java.io.FileNotFoundException,
                                      java.io.IOException
            Attempts to read a file n bytes at a time, n being equal to "bufferSize". Note that this method can be dangerous, and that the size of a file can cause an OutOfMemoryError quite easily. You should use getInputStream and do your own thing.

            Parameters:
            bufferSize - The size in bytes that are read from the file at a time
            Throws:
            java.io.FileNotFoundException - If the temp file no longer exists
            java.io.IOException

            destroy

            public void destroy()
            Delete the temporary file.

            Specified by:
            destroy in interface FormFile

            getFilePath

            public java.lang.String getFilePath()
            Get the temporary file path for this form file

            Returns:
            A filepath to the temporary file

            setFileName

            public void setFileName(java.lang.String filename)
            Set the file name

            Specified by:
            setFileName in interface FormFile
            Parameters:
            filename - The base file name.

            setContentType

            public void setContentType(java.lang.String contentType)
            Set the content type

            Specified by:
            setContentType in interface FormFile
            Parameters:
            contentType - The content type for the file.

            setFileSize

            public void setFileSize(int fileSize)
            Set the file size

            Specified by:
            setFileSize in interface FormFile
            Parameters:
            fileSize - The size of the file in bytes

            getFileName

            public java.lang.String getFileName()
            Get the file name

            Specified by:
            getFileName in interface FormFile
            Returns:
            The base file name.

            getContentType

            public java.lang.String getContentType()
            Get the content type

            Specified by:
            getContentType in interface FormFile
            Returns:
            A String representing content type.

            getFileSize

            public int getFileSize()
            Get the file size

            Specified by:
            getFileSize in interface FormFile
            Returns:
            The size of this file in bytes

            getInputStream

            public java.io.InputStream getInputStream()
                                               throws java.io.FileNotFoundException,
                                                      java.io.IOException
            Returns a FileInputStream to the file

            Specified by:
            getInputStream in interface FormFile
            Throws:
            java.io.IOException - if an error occurred while reading the file.
            java.io.FileNotFoundException - if the uploaded file is not found.


            Copyright © 2000-2002 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/upload/DiskMultipartRequestHandler.html0000644000175000017500000007451510404045232033174 0ustar arnaudarnaud00000000000000 DiskMultipartRequestHandler (Apache Struts API Documentation)

            org.apache.struts.upload
            Class DiskMultipartRequestHandler

            java.lang.Object
              |
              +--org.apache.struts.upload.DiskMultipartRequestHandler
            
            All Implemented Interfaces:
            MultipartRequestHandler

            public class DiskMultipartRequestHandler
            extends java.lang.Object
            implements MultipartRequestHandler

            This is a MultipartRequestHandler that writes file data directly to to temporary files on disk.

            Author:
            Mike Schachter

            Field Summary
            protected  java.util.Hashtable allElements
                      A Hashtable representing all elemnents.
            protected  java.util.Hashtable fileElements
                      A Hashtable representing the form files uploaded.
            protected  ActionMapping mapping
                      The ActionMapping instance used for this class.
            protected  ActionServlet servlet
                      The ActionServlet instance used for this class.
            protected  java.lang.String tempDir
                      The temporary directory.
            protected  java.util.Hashtable textElements
                      A Hashtable representing the form text input names and values.
             
            Fields inherited from interface org.apache.struts.upload.MultipartRequestHandler
            ATTRIBUTE_MAX_LENGTH_EXCEEDED
             
            Constructor Summary
            DiskMultipartRequestHandler()
                       
             
            Method Summary
            protected  void createDiskFile(MultipartElement element)
                       
            protected  void createTextElement(javax.servlet.http.HttpServletRequest request, MultipartElement element)
                       
             void finish()
                      Calls on rollback() to delete temporary files.
             java.util.Hashtable getAllElements()
                      This method returns all elements of a multipart request.
             java.util.Hashtable getFileElements()
                      This method is called on to retrieve all the FormFile input elements of the request.
             ActionMapping getMapping()
                      Get the ActionMapping instance for this request
            protected  long getMaxSize()
                      Gets the maximum post data size in bytes from the string representation in the configuration file.
             ActionServlet getServlet()
                      Get the ActionServlet instance
             java.util.Hashtable getTextElements()
                      This method is called on to retrieve all the text input elements of the request.
             void handleRequest(javax.servlet.http.HttpServletRequest request)
                      This method populates the internal hashtables with multipart request data.
            protected  void retrieveTempDir()
                      Retrieves the temporary directory from either ActionServlet, a context property, or a system property, in that order.
             void rollback()
                      Delete all the files uploaded.
             void setMapping(ActionMapping mapping)
                      Convienience method to set a reference to a working ActionMapping instance.
             void setServlet(ActionServlet servlet)
                      Convienience method to set a reference to a working ActionServlet instance.
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
             

            Field Detail

            servlet

            protected ActionServlet servlet
            The ActionServlet instance used for this class.


            mapping

            protected ActionMapping mapping
            The ActionMapping instance used for this class.


            fileElements

            protected java.util.Hashtable fileElements
            A Hashtable representing the form files uploaded.


            textElements

            protected java.util.Hashtable textElements
            A Hashtable representing the form text input names and values.


            allElements

            protected java.util.Hashtable allElements
            A Hashtable representing all elemnents.


            tempDir

            protected java.lang.String tempDir
            The temporary directory.

            Constructor Detail

            DiskMultipartRequestHandler

            public DiskMultipartRequestHandler()
            Method Detail

            handleRequest

            public void handleRequest(javax.servlet.http.HttpServletRequest request)
                               throws javax.servlet.ServletException
            This method populates the internal hashtables with multipart request data. If the request argument is an instance of MultipartRequestWrapper, the request wrapper will be populated as well.

            Specified by:
            handleRequest in interface MultipartRequestHandler
            Throws:
            javax.servlet.ServletException - thrown if something goes wrong

            createTextElement

            protected void createTextElement(javax.servlet.http.HttpServletRequest request,
                                             MultipartElement element)

            createDiskFile

            protected void createDiskFile(MultipartElement element)

            getAllElements

            public java.util.Hashtable getAllElements()
            Description copied from interface: MultipartRequestHandler
            This method returns all elements of a multipart request.

            Specified by:
            getAllElements in interface MultipartRequestHandler
            Returns:
            A Hashtable where the keys are input names and values are either Strings or FormFiles

            getTextElements

            public java.util.Hashtable getTextElements()
            Description copied from interface: MultipartRequestHandler
            This method is called on to retrieve all the text input elements of the request.

            Specified by:
            getTextElements in interface MultipartRequestHandler
            Returns:
            A Hashtable where the keys and values are the names and values of the request input parameters

            getFileElements

            public java.util.Hashtable getFileElements()
            Description copied from interface: MultipartRequestHandler
            This method is called on to retrieve all the FormFile input elements of the request.

            Specified by:
            getFileElements in interface MultipartRequestHandler
            Returns:
            A Hashtable where the keys are the input names of the files and the values are FormFile objects
            See Also:
            FormFile

            rollback

            public void rollback()
            Delete all the files uploaded.

            Specified by:
            rollback in interface MultipartRequestHandler

            finish

            public void finish()
            Calls on rollback() to delete temporary files.

            Specified by:
            finish in interface MultipartRequestHandler

            setServlet

            public void setServlet(ActionServlet servlet)
            Description copied from interface: MultipartRequestHandler
            Convienience method to set a reference to a working ActionServlet instance.

            Specified by:
            setServlet in interface MultipartRequestHandler

            setMapping

            public void setMapping(ActionMapping mapping)
            Description copied from interface: MultipartRequestHandler
            Convienience method to set a reference to a working ActionMapping instance.

            Specified by:
            setMapping in interface MultipartRequestHandler

            getServlet

            public ActionServlet getServlet()
            Description copied from interface: MultipartRequestHandler
            Get the ActionServlet instance

            Specified by:
            getServlet in interface MultipartRequestHandler

            getMapping

            public ActionMapping getMapping()
            Description copied from interface: MultipartRequestHandler
            Get the ActionMapping instance for this request

            Specified by:
            getMapping in interface MultipartRequestHandler

            getMaxSize

            protected long getMaxSize()
                               throws javax.servlet.ServletException
            Gets the maximum post data size in bytes from the string representation in the configuration file.

            javax.servlet.ServletException

            retrieveTempDir

            protected void retrieveTempDir()
            Retrieves the temporary directory from either ActionServlet, a context property, or a system property, in that order.



            Copyright © 2000-2002 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/upload/FormFile.html0000644000175000017500000003412210404045224027223 0ustar arnaudarnaud00000000000000 FormFile (Apache Struts API Documentation)

            org.apache.struts.upload
            Interface FormFile

            All Known Implementing Classes:
            DiskFile

            public interface FormFile

            This interface represents a file that has been uploaded by a client. It is the only interface or class in upload package which is typically referenced directly by a Struts application.


            Method Summary
             void destroy()
                      Destroys all content for the uploaded file, including any underlying data files.
             java.lang.String getContentType()
                      Returns the content type for this file.
             byte[] getFileData()
                      Returns the data for the entire file as byte array.
             java.lang.String getFileName()
                      Returns the file name of this file.
             int getFileSize()
                      Returns the size of this file.
             java.io.InputStream getInputStream()
                      Returns an input stream for this file.
             void setContentType(java.lang.String contentType)
                      Sets the content type for this file.
             void setFileName(java.lang.String fileName)
                      Sets the file name of this file.
             void setFileSize(int fileSize)
                      Sets the file size.
             

            Method Detail

            getContentType

            public java.lang.String getContentType()
            Returns the content type for this file.

            Returns:
            A String representing content type.

            setContentType

            public void setContentType(java.lang.String contentType)
            Sets the content type for this file.

            Parameters:
            contentType - The content type for the file.

            getFileSize

            public int getFileSize()
            Returns the size of this file.

            Returns:
            The size of the file, in bytes.

            setFileSize

            public void setFileSize(int fileSize)
            Sets the file size.

            Parameters:
            fileSize - The size of the file, in bytes,

            getFileName

            public java.lang.String getFileName()
            Returns the file name of this file. This is the base name of the file, as supplied by the user when the file was uploaded.

            Returns:
            The base file name.

            setFileName

            public void setFileName(java.lang.String fileName)
            Sets the file name of this file.

            Parameters:
            fileName - The base file name.

            getFileData

            public byte[] getFileData()
                               throws java.io.FileNotFoundException,
                                      java.io.IOException
            Returns the data for the entire file as byte array. Care is needed when using this method, since a large upload could easily exhaust available memory. The preferred method for accessing the file data is getInputStream.

            Returns:
            The file data as a byte array.
            Throws:
            java.io.FileNotFoundException - if the uploaded file is not found.
            java.io.IOException - if an error occurred while reading the file.

            getInputStream

            public java.io.InputStream getInputStream()
                                               throws java.io.FileNotFoundException,
                                                      java.io.IOException
            Returns an input stream for this file. The caller must close the stream when it is no longer needed.

            Throws:
            java.io.FileNotFoundException - if the uploaded file is not found.
            java.io.IOException - if an error occurred while reading the file.

            destroy

            public void destroy()
            Destroys all content for the uploaded file, including any underlying data files.



            Copyright © 2000-2002 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/upload/MaxLengthExceededException.html0000644000175000017500000003063510404045240032720 0ustar arnaudarnaud00000000000000 MaxLengthExceededException (Apache Struts API Documentation)

            org.apache.struts.upload
            Class MaxLengthExceededException

            java.lang.Object
              |
              +--java.lang.Throwable
                    |
                    +--java.lang.Exception
                          |
                          +--java.io.IOException
                                |
                                +--org.apache.struts.upload.MaxLengthExceededException
            
            All Implemented Interfaces:
            java.io.Serializable

            public class MaxLengthExceededException
            extends java.io.IOException

            This exception is thrown when multipart post data exceeds the maximum value set

            See Also:
            Serialized Form

            Field Summary
            protected  java.lang.String message
                       
             
            Fields inherited from class java.lang.Exception
             
            Fields inherited from class java.lang.Throwable
             
            Constructor Summary
            MaxLengthExceededException()
                       
            MaxLengthExceededException(long maxLength)
                       
             
            Method Summary
             java.lang.String getMessage()
                       
             
            Methods inherited from class java.lang.Throwable
            fillInStackTrace, getCause, getLocalizedMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
             

            Field Detail

            message

            protected java.lang.String message
            Constructor Detail

            MaxLengthExceededException

            public MaxLengthExceededException()

            MaxLengthExceededException

            public MaxLengthExceededException(long maxLength)
            Method Detail

            getMessage

            public java.lang.String getMessage()
            Overrides:
            getMessage in class java.lang.Throwable


            Copyright © 2000-2002 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/upload/MultipartBoundaryInputStream.html0000644000175000017500000017573510404045220033415 0ustar arnaudarnaud00000000000000 MultipartBoundaryInputStream (Apache Struts API Documentation)

            org.apache.struts.upload
            Class MultipartBoundaryInputStream

            java.lang.Object
              |
              +--java.io.InputStream
                    |
                    +--org.apache.struts.upload.MultipartBoundaryInputStream
            

            public class MultipartBoundaryInputStream
            extends java.io.InputStream

            This class encapsulates parsing functionality for RFC1867, multipart/form-data. See MultipartBoundaryInputStreamTest and MultipartIterator for usage examples.

            Author:
            Mike Schachter

            Field Summary
            protected  java.lang.String boundary
                      The boundary.
            private  byte[] boundaryBytes
                       
            protected  boolean boundaryEncountered
                      Whether or not the boundary has been encountered.
            protected  long bytesRead
                      The total number of bytes read so far.
            private static byte CARRIAGE_RETURN
                       
            private static java.lang.String CONTENT_TYPE_APPLICATION_OCTET_STREAM
                       
            private static java.lang.String CONTENT_TYPE_TEXT_PLAIN
                       
            private static byte[] CRLF
                       
            private static java.lang.String DEFAULT_CONTENT_DISPOSITION
                       
            private static int DEFAULT_LINE_SIZE
                       
            private static java.lang.String DOUBLE_DASH_STRING
                       
            protected  java.lang.String elementCharset
                      The character encoding of the element, specified in the element's Content-Type header.
            protected  java.lang.String elementContentDisposition
                      The Content-Disposition for the current form element being read.
            protected  java.lang.String elementContentType
                      The Content-Type of the current form element being read.
            protected  java.lang.String elementFileName
                      The filename of the current form element being read, null if the current form element is text data.
            protected  java.lang.String elementName
                      The name of the current form element being read.
            protected  boolean endOfStream
                      Whether or not the end of the stream has been read.
            private  byte[] finalBoundaryBytes
                       
            protected  boolean finalBoundaryEncountered
                      Whether or not the final boundary has been encountered.
            protected  java.io.InputStream inputStream
                      The InputStream to read from.
            private  byte[] line
                       
            private  boolean lineHasCarriage
                       
            private  boolean lineHasNewline
                       
            private  int lineIndex
                       
            private  int lineLength
                       
            private  int lineSize
                       
            protected  long maxLength
                      The maximum length in bytes to read from the stream at a time, or -1 for unlimited length.
            protected  boolean maxLengthMet
                      Whether or not the maximum length has been met.
            private static java.lang.String MESSAGE_INVALID_START
                       
            private static byte NEWLINE_BYTE
                       
            private static java.lang.String PARAMETER_CHARSET
                       
            private static java.lang.String PARAMETER_FILENAME
                       
            private static java.lang.String PARAMETER_NAME
                       
            private static char TOKEN_COLON
                       
            private static java.lang.String TOKEN_EQUALS
                       
            private static char TOKEN_QUOTE
                       
            private static char TOKEN_SEMI_COLON
                       
            private static char TOKEN_SPACE
                       
             
            Fields inherited from class java.io.InputStream
             
            Constructor Summary
            MultipartBoundaryInputStream()
                       
             
            Method Summary
            private  int availableInLine()
                       
            private  void byteRead()
                       
            private  java.lang.String checkAndFixFilename(java.lang.String filename)
                       
            private  void checkForBoundary()
                       
            private  boolean equals(byte[] comp, int offset, int length, byte[] source)
                      Checks bytes for equality.
            private  void fillLine()
                       
            private  void fillLineBuffer()
                       
             long getBytesRead()
                       
             java.lang.String getElementCharset()
                      Gets the character encoding of the current element.
             java.lang.String getElementContentDisposition()
                      Gets the value for the "Content-Dispositio" header for the current multipart element.
             java.lang.String getElementContentType()
                      Gets the "Content-Type" of the current element.
             java.lang.String getElementFileName()
                      Gets the filename of the current element, which will be null if the current element isn't a file.
             java.lang.String getElementName()
                      Gets the name of the current element.
             long getMaxLength()
                       
             boolean isBoundaryEncountered()
                      Returns whether or not the boundary has been encountered while reading data.
             boolean isElementFile()
                      Gets whether or not the current form element being read is a file.
             boolean isEndOfStream()
                      Whether or not an EOF has been read on the stream.
             boolean isFinalBoundaryEncountered()
                      Returns whether or not the final boundary has been encountered.
             boolean isMaxLengthMet()
                      Whether or not the maximum length has been met.
             void mark(int i)
                      Marks the underlying stream.
            private  java.lang.String parseForParameter(java.lang.String parameter, java.lang.String parseString)
                       
            private  java.lang.String parseHeaderValue(java.lang.String headerLine)
                       
             int read()
                      Reads from the stream.
             int read(byte[] buffer)
                       
             int read(byte[] buffer, int offset, int length)
                       
            private  void readContentDisposition()
                       
            private  boolean readContentType()
                       
            private  void readElementHeaders()
                       
            private  void readFirstElement()
                       
            private  int readFromLine()
                       
            private  java.lang.String readLine()
                       
             void reset()
                      Resets the underlying input stream.
            private  void resetCrlf()
                       
             void resetForNextBoundary()
                      Resets this stream for use with the next element, to be used after a boundary is encountered.
            private  void resetLine()
                       
            private  void resetStream()
                       
             void setBoundary(java.lang.String boundary)
                      Sets the boundary that terminates the data for the stream, after adding the prefix "--"
             void setInputStream(java.io.InputStream stream)
                      Sets the input stream used to read multipart data.
             void setLineSize(int size)
                       
             void setMaxLength(long maxLength)
                      Set the maximum length in bytes to read, or -1 for an unlimited length.
            private  void skipCurrentLineIfBlank()
                       
             
            Methods inherited from class java.io.InputStream
            available, close, markSupported, skip
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
             

            Field Detail

            NEWLINE_BYTE

            private static final byte NEWLINE_BYTE
            See Also:
            Constant Field Values

            CARRIAGE_RETURN

            private static final byte CARRIAGE_RETURN
            See Also:
            Constant Field Values

            CRLF

            private static final byte[] CRLF

            DOUBLE_DASH_STRING

            private static final java.lang.String DOUBLE_DASH_STRING
            See Also:
            Constant Field Values

            DEFAULT_LINE_SIZE

            private static final int DEFAULT_LINE_SIZE
            See Also:
            Constant Field Values

            TOKEN_EQUALS

            private static final java.lang.String TOKEN_EQUALS
            See Also:
            Constant Field Values

            TOKEN_QUOTE

            private static final char TOKEN_QUOTE
            See Also:
            Constant Field Values

            TOKEN_COLON

            private static final char TOKEN_COLON
            See Also:
            Constant Field Values

            TOKEN_SEMI_COLON

            private static final char TOKEN_SEMI_COLON
            See Also:
            Constant Field Values

            TOKEN_SPACE

            private static final char TOKEN_SPACE
            See Also:
            Constant Field Values

            DEFAULT_CONTENT_DISPOSITION

            private static final java.lang.String DEFAULT_CONTENT_DISPOSITION
            See Also:
            Constant Field Values

            PARAMETER_NAME

            private static final java.lang.String PARAMETER_NAME
            See Also:
            Constant Field Values

            PARAMETER_FILENAME

            private static final java.lang.String PARAMETER_FILENAME
            See Also:
            Constant Field Values

            PARAMETER_CHARSET

            private static final java.lang.String PARAMETER_CHARSET
            See Also:
            Constant Field Values

            CONTENT_TYPE_TEXT_PLAIN

            private static final java.lang.String CONTENT_TYPE_TEXT_PLAIN
            See Also:
            Constant Field Values

            CONTENT_TYPE_APPLICATION_OCTET_STREAM

            private static final java.lang.String CONTENT_TYPE_APPLICATION_OCTET_STREAM
            See Also:
            Constant Field Values

            MESSAGE_INVALID_START

            private static final java.lang.String MESSAGE_INVALID_START
            See Also:
            Constant Field Values

            inputStream

            protected java.io.InputStream inputStream
            The InputStream to read from.


            boundary

            protected java.lang.String boundary
            The boundary.


            boundaryEncountered

            protected boolean boundaryEncountered
            Whether or not the boundary has been encountered.


            finalBoundaryEncountered

            protected boolean finalBoundaryEncountered
            Whether or not the final boundary has been encountered.


            endOfStream

            protected boolean endOfStream
            Whether or not the end of the stream has been read.


            elementContentDisposition

            protected java.lang.String elementContentDisposition
            The Content-Disposition for the current form element being read.


            elementName

            protected java.lang.String elementName
            The name of the current form element being read.


            elementContentType

            protected java.lang.String elementContentType
            The Content-Type of the current form element being read.


            elementFileName

            protected java.lang.String elementFileName
            The filename of the current form element being read, null if the current form element is text data.


            elementCharset

            protected java.lang.String elementCharset
            The character encoding of the element, specified in the element's Content-Type header.


            maxLength

            protected long maxLength
            The maximum length in bytes to read from the stream at a time, or -1 for unlimited length.


            maxLengthMet

            protected boolean maxLengthMet
            Whether or not the maximum length has been met.


            bytesRead

            protected long bytesRead
            The total number of bytes read so far.


            boundaryBytes

            private byte[] boundaryBytes

            finalBoundaryBytes

            private byte[] finalBoundaryBytes

            line

            private byte[] line

            lineSize

            private int lineSize

            lineLength

            private int lineLength

            lineHasNewline

            private boolean lineHasNewline

            lineHasCarriage

            private boolean lineHasCarriage

            lineIndex

            private int lineIndex
            Constructor Detail

            MultipartBoundaryInputStream

            public MultipartBoundaryInputStream()
            Method Detail

            setBoundary

            public void setBoundary(java.lang.String boundary)
            Sets the boundary that terminates the data for the stream, after adding the prefix "--"


            resetForNextBoundary

            public void resetForNextBoundary()
                                      throws java.io.IOException
            Resets this stream for use with the next element, to be used after a boundary is encountered.

            java.io.IOException

            setInputStream

            public void setInputStream(java.io.InputStream stream)
                                throws java.io.IOException
            Sets the input stream used to read multipart data. For efficiency purposes, make sure that the stream you set on this class is buffered. The way this class reads lines is that it continually calls the read() method until it reaches a newline character. That would be terrible if you were to set a socket's input stream here, but not as bad on a buffered stream.

            java.io.IOException

            read

            public int read()
                     throws java.io.IOException
            Reads from the stream. Returns -1 if it's the end of the stream or if a boundary is encountered.

            Specified by:
            read in class java.io.InputStream
            java.io.IOException

            read

            public int read(byte[] buffer)
                     throws java.io.IOException
            Overrides:
            read in class java.io.InputStream
            java.io.IOException

            read

            public int read(byte[] buffer,
                            int offset,
                            int length)
                     throws java.io.IOException
            Overrides:
            read in class java.io.InputStream
            java.io.IOException

            mark

            public void mark(int i)
            Marks the underlying stream.

            Overrides:
            mark in class java.io.InputStream

            reset

            public void reset()
                       throws java.io.IOException
            Resets the underlying input stream.

            Overrides:
            reset in class java.io.InputStream
            java.io.IOException

            setMaxLength

            public void setMaxLength(long maxLength)
            Set the maximum length in bytes to read, or -1 for an unlimited length.


            getMaxLength

            public long getMaxLength()

            isMaxLengthMet

            public boolean isMaxLengthMet()
            Whether or not the maximum length has been met.


            getElementContentDisposition

            public java.lang.String getElementContentDisposition()
            Gets the value for the "Content-Dispositio" header for the current multipart element. Usually "form-data".


            getElementName

            public java.lang.String getElementName()
            Gets the name of the current element. The name corresponds to the value of the "name" attribute of the form element.


            getElementCharset

            public java.lang.String getElementCharset()
            Gets the character encoding of the current element. The character encoding would have been specified in the Content-Type header for this element, if it wasn't this is null.


            getElementContentType

            public java.lang.String getElementContentType()
            Gets the "Content-Type" of the current element. If this is a text element, the content type will probably be "text/plain", otherwise it will be the content type of the file element.


            getElementFileName

            public java.lang.String getElementFileName()
            Gets the filename of the current element, which will be null if the current element isn't a file.


            isElementFile

            public boolean isElementFile()
            Gets whether or not the current form element being read is a file.


            isBoundaryEncountered

            public boolean isBoundaryEncountered()
            Returns whether or not the boundary has been encountered while reading data.


            isFinalBoundaryEncountered

            public boolean isFinalBoundaryEncountered()
            Returns whether or not the final boundary has been encountered.


            isEndOfStream

            public boolean isEndOfStream()
            Whether or not an EOF has been read on the stream.


            setLineSize

            public void setLineSize(int size)

            getBytesRead

            public long getBytesRead()

            readFirstElement

            private final void readFirstElement()
                                         throws java.io.IOException
            java.io.IOException

            readElementHeaders

            private final void readElementHeaders()
                                           throws java.io.IOException
            java.io.IOException

            readContentDisposition

            private final void readContentDisposition()
                                               throws java.io.IOException
            java.io.IOException

            checkAndFixFilename

            private final java.lang.String checkAndFixFilename(java.lang.String filename)

            parseForParameter

            private final java.lang.String parseForParameter(java.lang.String parameter,
                                                             java.lang.String parseString)

            readContentType

            private final boolean readContentType()
                                           throws java.io.IOException
            java.io.IOException

            parseHeaderValue

            private final java.lang.String parseHeaderValue(java.lang.String headerLine)

            skipCurrentLineIfBlank

            private final void skipCurrentLineIfBlank()
                                               throws java.io.IOException
            java.io.IOException

            resetCrlf

            private final void resetCrlf()

            resetStream

            private final void resetStream()

            readLine

            private final java.lang.String readLine()
                                             throws java.io.IOException
            java.io.IOException

            readFromLine

            private final int readFromLine()
                                    throws java.io.IOException
            java.io.IOException

            availableInLine

            private final int availableInLine()

            fillLine

            private final void fillLine()
                                 throws java.io.IOException
            java.io.IOException

            resetLine

            private final void resetLine()

            fillLineBuffer

            private final void fillLineBuffer()
                                       throws java.io.IOException
            java.io.IOException

            byteRead

            private final void byteRead()

            checkForBoundary

            private final void checkForBoundary()

            equals

            private final boolean equals(byte[] comp,
                                         int offset,
                                         int length,
                                         byte[] source)
            Checks bytes for equality. Two byte arrays are equal if each of their elements are the same. This method checks comp[offset] with source[0] to source[length-1] with comp[offset + length - 1]

            Parameters:
            comp - The byte to compare to source
            offset - The offset to start at in comp
            length - The length of comp to compare to
            source - The reference byte array to test for equality


            Copyright © 2000-2002 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/upload/MultipartElement.html0000644000175000017500000006125710404045232031023 0ustar arnaudarnaud00000000000000 MultipartElement (Apache Struts API Documentation)

            org.apache.struts.upload
            Class MultipartElement

            java.lang.Object
              |
              +--org.apache.struts.upload.MultipartElement
            

            public class MultipartElement
            extends java.lang.Object

            This class represents an element in a multipart request. It has a few methods for determining * whether or not the element is a String or a file, and methods to retrieve the data of the aforementioned element. Text input elements have a null content type, files have a non-null content type.

            Author:
            Mike Schachter

            Field Summary
            protected  java.lang.String contentType
                      The content type of this element.
            protected  byte[] data
                      Deprecated. This should never be used.
            protected  java.io.File file
                      The element's data represented in a (possibly temporary) file.
            protected  java.lang.String fileName
                      The element's filename, null for text elements.
            protected  boolean isFile
                      Whether or not this element is a file.
            protected  java.lang.String name
                      The element name.
            protected  java.lang.String value
                      The element's text value, null for file elements
             
            Constructor Summary
            MultipartElement(java.lang.String name, java.lang.String value)
                      Constructor for a text element.
            MultipartElement(java.lang.String name, java.lang.String fileName, java.lang.String contentType, byte[] data)
                      Deprecated. Use the constructor that takes an File as an argument as opposed to a byte array argument, which can cause memory problems.
            MultipartElement(java.lang.String name, java.lang.String fileName, java.lang.String contentType, java.io.File file)
                      Constructor for a file element.
             
            Method Summary
             java.lang.String getContentType()
                      Retrieve the content type.
             byte[] getData()
                      Deprecated. Use the getFile method to get a File representing the data for this element
             java.io.File getFile()
                      Get the File that holds the data for this element.
             java.lang.String getFileName()
                      Retrieve the filename, can return null for text elements.
             java.lang.String getName()
                      Retrieve the name.
             java.lang.String getValue()
                      Returns the value of this multipart element.
             boolean isFile()
                      Is this element a file.
             void setContentType(java.lang.String contentType)
                      Set the content type.
             void setData(byte[] data)
                      Deprecated. Use the setFile method to set the file that represents the data of this element
             void setFile(java.io.File file)
                      Set the file that represents this element.
             void setFileName(java.lang.String fileName)
                      Set the file name for this element.
             void setName(java.lang.String name)
                      Set the name for this element.
             void setValue(java.lang.String value)
                       
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
             

            Field Detail

            contentType

            protected java.lang.String contentType
            The content type of this element.


            data

            protected byte[] data
            Deprecated. This should never be used.

            The element data.


            file

            protected java.io.File file
            The element's data represented in a (possibly temporary) file.


            name

            protected java.lang.String name
            The element name.


            fileName

            protected java.lang.String fileName
            The element's filename, null for text elements.


            value

            protected java.lang.String value
            The element's text value, null for file elements


            isFile

            protected boolean isFile
            Whether or not this element is a file.

            Constructor Detail

            MultipartElement

            public MultipartElement(java.lang.String name,
                                    java.lang.String fileName,
                                    java.lang.String contentType,
                                    byte[] data)
            Deprecated. Use the constructor that takes an File as an argument as opposed to a byte array argument, which can cause memory problems.


            MultipartElement

            public MultipartElement(java.lang.String name,
                                    java.lang.String fileName,
                                    java.lang.String contentType,
                                    java.io.File file)
            Constructor for a file element.

            Parameters:
            name - The form name of the element
            fileName - The file name of the element if this element is a file
            contentType - The content type of the element if a file
            file - The (possibly temporary) file representing this element if it's a file

            MultipartElement

            public MultipartElement(java.lang.String name,
                                    java.lang.String value)
            Constructor for a text element.

            Parameters:
            name - The name of the element
            value - The value of the element
            Method Detail

            getContentType

            public java.lang.String getContentType()
            Retrieve the content type.


            getData

            public byte[] getData()
            Deprecated. Use the getFile method to get a File representing the data for this element

            Retrieve the data.


            getFile

            public java.io.File getFile()
            Get the File that holds the data for this element.


            getName

            public java.lang.String getName()
            Retrieve the name.


            getFileName

            public java.lang.String getFileName()
            Retrieve the filename, can return null for text elements.


            getValue

            public java.lang.String getValue()
            Returns the value of this multipart element.

            Returns:
            A String if the element is a text element, null otherwise

            setFile

            public void setFile(java.io.File file)
            Set the file that represents this element.


            setFileName

            public void setFileName(java.lang.String fileName)
            Set the file name for this element.


            setName

            public void setName(java.lang.String name)
            Set the name for this element.


            setContentType

            public void setContentType(java.lang.String contentType)
            Set the content type.


            isFile

            public boolean isFile()
            Is this element a file.


            setValue

            public void setValue(java.lang.String value)

            setData

            public void setData(byte[] data)
            Deprecated. Use the setFile method to set the file that represents the data of this element

            Set the data.



            Copyright © 2000-2002 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/upload/MultipartIterator.html0000644000175000017500000011021410404045210031203 0ustar arnaudarnaud00000000000000 MultipartIterator (Apache Struts API Documentation)

            org.apache.struts.upload
            Class MultipartIterator

            java.lang.Object
              |
              +--org.apache.struts.upload.MultipartIterator
            

            public class MultipartIterator
            extends java.lang.Object

            The MultipartIterator class is responsible for reading the input data of a multipart request and splitting it up into input elements, wrapped inside of a MultipartElement for easy definition. To use this class, create a new instance of MultipartIterator passing it a HttpServletRequest in the constructor. Then use the getNextElement method until it returns null, then you're finished. Example:

                  MultipartIterator iterator = new MultipartIterator(request);
                  MultipartElement element;
            
                  while ((element = iterator.getNextElement()) != null) {
                       //do something with element
                  }
             

            Author:
            Mike Schachter
            See Also:
            MultipartElement

            Field Summary
            protected  java.lang.String boundary
                      The boundary for this multipart request
            protected  int bufferSize
                      The amount of data read from a request at a time.
            protected  int contentLength
                      The content length of this request
            protected  java.lang.String contentType
                      The content-type.
            private static java.lang.String DEFAULT_ENCODING
                      The default encoding of a text element if none is specified.
            protected  int diskBufferSize
                      The size in bytes written to the filesystem at a time [20K]
            private static java.lang.String FILE_PREFIX
                       
            static java.lang.String HEADER_CONTENT_DISPOSITION
                      The name of the Content-Disposition header.
            static java.lang.String HEADER_CONTENT_TYPE
                      The name of the Content-Type header.
            protected  MultipartBoundaryInputStream inputStream
                      The InputStream to use to read the multipart data.
            protected  boolean maxLengthExceeded
                      Whether the maximum length has been exceeded.
            protected  long maxSize
                      The maximum file size in bytes allowed.
            static java.lang.String MESSAGE_CANNOT_RETRIEVE_BOUNDARY
                      The exception message for when the boundary of a multipart request can't be determined.
            private static java.lang.String PARAMETER_BOUNDARY
                       
            protected  javax.servlet.http.HttpServletRequest request
                      The request instance for this class
            protected  java.lang.String tempDir
                      The temporary directory to store files
            private static int TEXT_BUFFER_SIZE
                      The size in bytes to copy of text data at a time.
             
            Constructor Summary
            MultipartIterator(javax.servlet.http.HttpServletRequest request)
                      Constructs a MultipartIterator with a default buffer size and no file size limit
            MultipartIterator(javax.servlet.http.HttpServletRequest request, int bufferSize)
                      Constructs a MultipartIterator with the specified buffer size and no file size limit
            MultipartIterator(javax.servlet.http.HttpServletRequest request, int bufferSize, long maxSize)
                      Constructs a MultipartIterator with the specified buffer size and the specified file size limit in bytes
            MultipartIterator(javax.servlet.http.HttpServletRequest request, int bufferSize, long maxSize, java.lang.String tempDir)
                       
             
            Method Summary
            protected  MultipartElement createFileMultipartElement()
                      Create a multipart element instance representing the file in the stream.
            protected  java.io.File createLocalFile()
                      Creates a file on disk from the current mulitpart element.
            protected  MultipartElement createTextMultipartElement(java.lang.String encoding)
                      Create a text element from the data in the body of the element.
            private  void getBoundaryFromContentType()
                      Parses a content-type String for the boundary.
             int getBufferSize()
                      Get the maximum amount of bytes read from a line at one time
            private  void getContentTypeOfRequest()
                      Gets the value of the Content-Type header of the request.
            protected  java.lang.String getElementEncoding()
                      Get the character encoding used for this current multipart element.
             long getMaxSize()
                      Get the maximum post data size allowed for a multipart request
             MultipartElement getNextElement()
                      Retrieves the next element in the iterator if one exists.
             boolean isMaxLengthExceeded()
                      Whether or not the maximum length has been exceeded by the client.
            protected  void parseRequest()
                      Handles retrieving the boundary and setting the input stream
             void setBufferSize(int bufferSize)
                      Set the maximum amount of bytes read from a line at one time
             void setMaxSize(long maxSize)
                      Set the maximum post data size allowed for a multipart request
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
             

            Field Detail

            DEFAULT_ENCODING

            private static final java.lang.String DEFAULT_ENCODING
            The default encoding of a text element if none is specified.

            See Also:
            Constant Field Values

            TEXT_BUFFER_SIZE

            private static final int TEXT_BUFFER_SIZE
            The size in bytes to copy of text data at a time.

            See Also:
            Constant Field Values

            HEADER_CONTENT_TYPE

            public static java.lang.String HEADER_CONTENT_TYPE
            The name of the Content-Type header.


            HEADER_CONTENT_DISPOSITION

            public static final java.lang.String HEADER_CONTENT_DISPOSITION
            The name of the Content-Disposition header.

            See Also:
            Constant Field Values

            MESSAGE_CANNOT_RETRIEVE_BOUNDARY

            public static final java.lang.String MESSAGE_CANNOT_RETRIEVE_BOUNDARY
            The exception message for when the boundary of a multipart request can't be determined.

            See Also:
            Constant Field Values

            PARAMETER_BOUNDARY

            private static final java.lang.String PARAMETER_BOUNDARY
            See Also:
            Constant Field Values

            FILE_PREFIX

            private static final java.lang.String FILE_PREFIX
            See Also:
            Constant Field Values

            request

            protected javax.servlet.http.HttpServletRequest request
            The request instance for this class


            inputStream

            protected MultipartBoundaryInputStream inputStream
            The InputStream to use to read the multipart data.


            boundary

            protected java.lang.String boundary
            The boundary for this multipart request


            maxSize

            protected long maxSize
            The maximum file size in bytes allowed. Ignored if -1


            contentLength

            protected int contentLength
            The content length of this request


            diskBufferSize

            protected int diskBufferSize
            The size in bytes written to the filesystem at a time [20K]


            bufferSize

            protected int bufferSize
            The amount of data read from a request at a time. This also represents the maximum size in bytes of a line read from the request [4KB]


            tempDir

            protected java.lang.String tempDir
            The temporary directory to store files


            contentType

            protected java.lang.String contentType
            The content-type.


            maxLengthExceeded

            protected boolean maxLengthExceeded
            Whether the maximum length has been exceeded.

            Constructor Detail

            MultipartIterator

            public MultipartIterator(javax.servlet.http.HttpServletRequest request)
                              throws java.io.IOException
            Constructs a MultipartIterator with a default buffer size and no file size limit

            Parameters:
            request - The multipart request to iterate

            MultipartIterator

            public MultipartIterator(javax.servlet.http.HttpServletRequest request,
                                     int bufferSize)
                              throws java.io.IOException
            Constructs a MultipartIterator with the specified buffer size and no file size limit

            Parameters:
            request - The multipart request to iterate
            bufferSize - The size in bytes that should be read from the input stream at a times

            MultipartIterator

            public MultipartIterator(javax.servlet.http.HttpServletRequest request,
                                     int bufferSize,
                                     long maxSize)
                              throws java.io.IOException
            Constructs a MultipartIterator with the specified buffer size and the specified file size limit in bytes

            Parameters:
            request - The multipart request to iterate
            bufferSize - The size in bytes that should be read from the input stream at a times
            maxSize - The maximum size in bytes allowed for a multipart element's data

            MultipartIterator

            public MultipartIterator(javax.servlet.http.HttpServletRequest request,
                                     int bufferSize,
                                     long maxSize,
                                     java.lang.String tempDir)
                              throws java.io.IOException
            Method Detail

            parseRequest

            protected void parseRequest()
                                 throws java.io.IOException
            Handles retrieving the boundary and setting the input stream

            java.io.IOException

            getNextElement

            public MultipartElement getNextElement()
                                            throws java.io.IOException
            Retrieves the next element in the iterator if one exists.

            Returns:
            a MultipartElement representing the next element in the request data
            Throws:
            java.io.IOException - if the post size exceeds the maximum file size passed in the 3 argument constructor or if the "ISO-8859-1" encoding isn't found

            getElementEncoding

            protected java.lang.String getElementEncoding()
            Get the character encoding used for this current multipart element.


            createTextMultipartElement

            protected MultipartElement createTextMultipartElement(java.lang.String encoding)
                                                           throws java.io.IOException
            Create a text element from the data in the body of the element.

            Parameters:
            encoding - The character encoding of the string.
            java.io.IOException

            createFileMultipartElement

            protected MultipartElement createFileMultipartElement()
                                                           throws java.io.IOException
            Create a multipart element instance representing the file in the stream.

            java.io.IOException

            setBufferSize

            public void setBufferSize(int bufferSize)
            Set the maximum amount of bytes read from a line at one time

            See Also:
            ServletInputStream.readLine(byte[], int, int)

            getBufferSize

            public int getBufferSize()
            Get the maximum amount of bytes read from a line at one time

            See Also:
            ServletInputStream.readLine(byte[], int, int)

            setMaxSize

            public void setMaxSize(long maxSize)
            Set the maximum post data size allowed for a multipart request

            Parameters:
            maxSize - The maximum post data size in bytes, set to -1 for no limit

            getMaxSize

            public long getMaxSize()
            Get the maximum post data size allowed for a multipart request

            Returns:
            The maximum post data size in bytes

            isMaxLengthExceeded

            public boolean isMaxLengthExceeded()
            Whether or not the maximum length has been exceeded by the client.


            getBoundaryFromContentType

            private final void getBoundaryFromContentType()
                                                   throws java.io.IOException
            Parses a content-type String for the boundary.

            java.io.IOException

            getContentTypeOfRequest

            private final void getContentTypeOfRequest()
            Gets the value of the Content-Type header of the request.


            createLocalFile

            protected java.io.File createLocalFile()
                                            throws java.io.IOException
            Creates a file on disk from the current mulitpart element.

            java.io.IOException


            Copyright © 2000-2002 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/upload/MultipartRequestHandler.html0000644000175000017500000004356610404045234032365 0ustar arnaudarnaud00000000000000 MultipartRequestHandler (Apache Struts API Documentation)

            org.apache.struts.upload
            Interface MultipartRequestHandler

            All Known Implementing Classes:
            DiskMultipartRequestHandler

            public interface MultipartRequestHandler

            MultipartRequestHandler provides an standard interface for struts to deal with file uploads from forms with enctypes of "multipart/form-data". Providers must provide a no-argument constructor for initialization.

            Author:
            Mike Schachter

            Field Summary
            static java.lang.String ATTRIBUTE_MAX_LENGTH_EXCEEDED
                      This is the ServletRequest attribute that should be set when a multipart request is being read and the maximum length is exceeded.
             
            Method Summary
             void finish()
                      This method is called on when a successful form post has been made.
             java.util.Hashtable getAllElements()
                      This method returns all elements of a multipart request.
             java.util.Hashtable getFileElements()
                      This method is called on to retrieve all the FormFile input elements of the request.
             ActionMapping getMapping()
                      Get the ActionMapping instance for this request
             ActionServlet getServlet()
                      Get the ActionServlet instance
             java.util.Hashtable getTextElements()
                      This method is called on to retrieve all the text input elements of the request.
             void handleRequest(javax.servlet.http.HttpServletRequest request)
                      After constructed, this is the first method called on by ActionServlet.
             void rollback()
                      This method is called on when there's some sort of problem and the form post needs to be rolled back.
             void setMapping(ActionMapping mapping)
                      Convienience method to set a reference to a working ActionMapping instance.
             void setServlet(ActionServlet servlet)
                      Convienience method to set a reference to a working ActionServlet instance.
             

            Field Detail

            ATTRIBUTE_MAX_LENGTH_EXCEEDED

            public static final java.lang.String ATTRIBUTE_MAX_LENGTH_EXCEEDED
            This is the ServletRequest attribute that should be set when a multipart request is being read and the maximum length is exceeded. The value is a Boolean. If the maximum length isn't exceeded, this attribute shouldn't be put in the ServletRequest. It's the job of the implementation to put this attribute in the request if the maximum length is exceeded; in the handleRequest(HttpServletRequest) method.

            See Also:
            Constant Field Values
            Method Detail

            setServlet

            public void setServlet(ActionServlet servlet)
            Convienience method to set a reference to a working ActionServlet instance.


            setMapping

            public void setMapping(ActionMapping mapping)
            Convienience method to set a reference to a working ActionMapping instance.


            getServlet

            public ActionServlet getServlet()
            Get the ActionServlet instance


            getMapping

            public ActionMapping getMapping()
            Get the ActionMapping instance for this request


            handleRequest

            public void handleRequest(javax.servlet.http.HttpServletRequest request)
                               throws javax.servlet.ServletException
            After constructed, this is the first method called on by ActionServlet. Use this method for all your data-parsing of the ServletInputStream in the request

            Throws:
            javax.servlet.ServletException - thrown if something goes wrong

            getTextElements

            public java.util.Hashtable getTextElements()
            This method is called on to retrieve all the text input elements of the request.

            Returns:
            A Hashtable where the keys and values are the names and values of the request input parameters

            getFileElements

            public java.util.Hashtable getFileElements()
            This method is called on to retrieve all the FormFile input elements of the request.

            Returns:
            A Hashtable where the keys are the input names of the files and the values are FormFile objects
            See Also:
            FormFile

            getAllElements

            public java.util.Hashtable getAllElements()
            This method returns all elements of a multipart request.

            Returns:
            A Hashtable where the keys are input names and values are either Strings or FormFiles

            rollback

            public void rollback()
            This method is called on when there's some sort of problem and the form post needs to be rolled back. Providers should remove any FormFiles used to hold information by setting them to null and also physically delete them if the implementation calls for writing directly to disk. NOTE: Currently implemented but not automatically supported, ActionForm implementors must call rollback() manually for rolling back file uploads.


            finish

            public void finish()
            This method is called on when a successful form post has been made. Some implementations will use this to destroy temporary files or write to a database or something of that nature.



            Copyright © 2000-2002 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/upload/MultipartRequestWrapper.html0000644000175000017500000014316510404045172032425 0ustar arnaudarnaud00000000000000 MultipartRequestWrapper (Apache Struts API Documentation)

            org.apache.struts.upload
            Class MultipartRequestWrapper

            java.lang.Object
              |
              +--org.apache.struts.upload.MultipartRequestWrapper
            
            All Implemented Interfaces:
            javax.servlet.http.HttpServletRequest, javax.servlet.ServletRequest

            public class MultipartRequestWrapper
            extends java.lang.Object
            implements javax.servlet.http.HttpServletRequest

            This class functions as a wrapper around HttpServletRequest to provide working getParameter methods for multipart requests. Once Struts requires Servlet 2.3, this class will definately be changed to extend javax.servlet.http.HttpServletRequestWrapper instead of implementing HttpServletRequest. Servlet 2.3 methods are implemented to return null or do nothing if called on. Use getRequest to retrieve the underlying HttpServletRequest object and call on the 2.3 method there, the empty methods are here only so that this will compile with the Servlet 2.3 jar. This class exists temporarily in the process() method of ActionServlet, just before the ActionForward is processed and just after the Action is performed, the request is set back to the original HttpServletRequest object.


            Field Summary
            protected  java.util.Map parameters
                      The parameters for this multipart request
            protected  javax.servlet.http.HttpServletRequest request
                      The underlying HttpServletRequest
             
            Constructor Summary
            MultipartRequestWrapper(javax.servlet.http.HttpServletRequest request)
                       
             
            Method Summary
             java.lang.Object getAttribute(java.lang.String name)
                       
             java.util.Enumeration getAttributeNames()
                       
             java.lang.String getAuthType()
                       
             java.lang.String getCharacterEncoding()
                       
             int getContentLength()
                       
             java.lang.String getContentType()
                       
             java.lang.String getContextPath()
                       
             javax.servlet.http.Cookie[] getCookies()
                       
             long getDateHeader(java.lang.String name)
                       
             java.lang.String getHeader(java.lang.String name)
                       
             java.util.Enumeration getHeaderNames()
                       
             java.util.Enumeration getHeaders(java.lang.String name)
                       
             javax.servlet.ServletInputStream getInputStream()
                       
             int getIntHeader(java.lang.String name)
                       
             java.util.Locale getLocale()
                       
             java.util.Enumeration getLocales()
                       
             java.lang.String getMethod()
                       
             java.lang.String getParameter(java.lang.String name)
                      Attempts to get a parameter for this request.
             java.util.Map getParameterMap()
                      This method returns null.
             java.util.Enumeration getParameterNames()
                      Returns the names of the parameters for this request.
             java.lang.String[] getParameterValues(java.lang.String name)
                       
             java.lang.String getPathInfo()
                       
             java.lang.String getPathTranslated()
                       
             java.lang.String getProtocol()
                       
             java.lang.String getQueryString()
                       
             java.io.BufferedReader getReader()
                       
             java.lang.String getRealPath(java.lang.String path)
                       
             java.lang.String getRemoteAddr()
                       
             java.lang.String getRemoteHost()
                       
             java.lang.String getRemoteUser()
                       
             javax.servlet.http.HttpServletRequest getRequest()
                      Returns the underlying HttpServletRequest for this wrapper
             javax.servlet.RequestDispatcher getRequestDispatcher(java.lang.String path)
                       
             java.lang.String getRequestedSessionId()
                       
             java.lang.String getRequestURI()
                       
             java.lang.StringBuffer getRequestURL()
                      This method returns null.
             java.lang.String getScheme()
                       
             java.lang.String getServerName()
                       
             int getServerPort()
                       
             java.lang.String getServletPath()
                       
             javax.servlet.http.HttpSession getSession()
                       
             javax.servlet.http.HttpSession getSession(boolean create)
                       
             java.security.Principal getUserPrincipal()
                       
             boolean isRequestedSessionIdFromCookie()
                      This method returns false.
             boolean isRequestedSessionIdFromUrl()
                       
             boolean isRequestedSessionIdFromURL()
                       
             boolean isRequestedSessionIdValid()
                       
             boolean isSecure()
                       
             boolean isUserInRole(java.lang.String user)
                       
             void removeAttribute(java.lang.String name)
                       
             void setAttribute(java.lang.String name, java.lang.Object o)
                       
             void setCharacterEncoding(java.lang.String encoding)
                      This method does nothing.
             void setParameter(java.lang.String name, java.lang.String value)
                      Sets a parameter for this request.
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
             

            Field Detail

            parameters

            protected java.util.Map parameters
            The parameters for this multipart request


            request

            protected javax.servlet.http.HttpServletRequest request
            The underlying HttpServletRequest

            Constructor Detail

            MultipartRequestWrapper

            public MultipartRequestWrapper(javax.servlet.http.HttpServletRequest request)
            Method Detail

            setParameter

            public void setParameter(java.lang.String name,
                                     java.lang.String value)
            Sets a parameter for this request. The parameter is actually separate from the request parameters, but calling on the getParameter() methods of this class will work as if they weren't.


            getParameter

            public java.lang.String getParameter(java.lang.String name)
            Attempts to get a parameter for this request. It first looks in the underlying HttpServletRequest object for the parameter, and if that doesn't exist it looks for the parameters retrieved from the multipart request

            Specified by:
            getParameter in interface javax.servlet.ServletRequest

            getParameterNames

            public java.util.Enumeration getParameterNames()
            Returns the names of the parameters for this request. The enumeration consists of the normal request parameter names plus the parameters read from the multipart request

            Specified by:
            getParameterNames in interface javax.servlet.ServletRequest

            getParameterValues

            public java.lang.String[] getParameterValues(java.lang.String name)
            Specified by:
            getParameterValues in interface javax.servlet.ServletRequest

            getRequest

            public javax.servlet.http.HttpServletRequest getRequest()
            Returns the underlying HttpServletRequest for this wrapper


            getAttribute

            public java.lang.Object getAttribute(java.lang.String name)
            Specified by:
            getAttribute in interface javax.servlet.ServletRequest

            getAttributeNames

            public java.util.Enumeration getAttributeNames()
            Specified by:
            getAttributeNames in interface javax.servlet.ServletRequest

            getCharacterEncoding

            public java.lang.String getCharacterEncoding()
            Specified by:
            getCharacterEncoding in interface javax.servlet.ServletRequest

            getContentLength

            public int getContentLength()
            Specified by:
            getContentLength in interface javax.servlet.ServletRequest

            getContentType

            public java.lang.String getContentType()
            Specified by:
            getContentType in interface javax.servlet.ServletRequest

            getInputStream

            public javax.servlet.ServletInputStream getInputStream()
                                                            throws java.io.IOException
            Specified by:
            getInputStream in interface javax.servlet.ServletRequest
            java.io.IOException

            getProtocol

            public java.lang.String getProtocol()
            Specified by:
            getProtocol in interface javax.servlet.ServletRequest

            getScheme

            public java.lang.String getScheme()
            Specified by:
            getScheme in interface javax.servlet.ServletRequest

            getServerName

            public java.lang.String getServerName()
            Specified by:
            getServerName in interface javax.servlet.ServletRequest

            getServerPort

            public int getServerPort()
            Specified by:
            getServerPort in interface javax.servlet.ServletRequest

            getReader

            public java.io.BufferedReader getReader()
                                             throws java.io.IOException
            Specified by:
            getReader in interface javax.servlet.ServletRequest
            java.io.IOException

            getRemoteAddr

            public java.lang.String getRemoteAddr()
            Specified by:
            getRemoteAddr in interface javax.servlet.ServletRequest

            getRemoteHost

            public java.lang.String getRemoteHost()
            Specified by:
            getRemoteHost in interface javax.servlet.ServletRequest

            setAttribute

            public void setAttribute(java.lang.String name,
                                     java.lang.Object o)
            Specified by:
            setAttribute in interface javax.servlet.ServletRequest

            removeAttribute

            public void removeAttribute(java.lang.String name)
            Specified by:
            removeAttribute in interface javax.servlet.ServletRequest

            getLocale

            public java.util.Locale getLocale()
            Specified by:
            getLocale in interface javax.servlet.ServletRequest

            getLocales

            public java.util.Enumeration getLocales()
            Specified by:
            getLocales in interface javax.servlet.ServletRequest

            isSecure

            public boolean isSecure()
            Specified by:
            isSecure in interface javax.servlet.ServletRequest

            getRequestDispatcher

            public javax.servlet.RequestDispatcher getRequestDispatcher(java.lang.String path)
            Specified by:
            getRequestDispatcher in interface javax.servlet.ServletRequest

            getRealPath

            public java.lang.String getRealPath(java.lang.String path)
            Specified by:
            getRealPath in interface javax.servlet.ServletRequest

            getAuthType

            public java.lang.String getAuthType()
            Specified by:
            getAuthType in interface javax.servlet.http.HttpServletRequest

            getCookies

            public javax.servlet.http.Cookie[] getCookies()
            Specified by:
            getCookies in interface javax.servlet.http.HttpServletRequest

            getDateHeader

            public long getDateHeader(java.lang.String name)
            Specified by:
            getDateHeader in interface javax.servlet.http.HttpServletRequest

            getHeader

            public java.lang.String getHeader(java.lang.String name)
            Specified by:
            getHeader in interface javax.servlet.http.HttpServletRequest

            getHeaders

            public java.util.Enumeration getHeaders(java.lang.String name)
            Specified by:
            getHeaders in interface javax.servlet.http.HttpServletRequest

            getHeaderNames

            public java.util.Enumeration getHeaderNames()
            Specified by:
            getHeaderNames in interface javax.servlet.http.HttpServletRequest

            getIntHeader

            public int getIntHeader(java.lang.String name)
            Specified by:
            getIntHeader in interface javax.servlet.http.HttpServletRequest

            getMethod

            public java.lang.String getMethod()
            Specified by:
            getMethod in interface javax.servlet.http.HttpServletRequest

            getPathInfo

            public java.lang.String getPathInfo()
            Specified by:
            getPathInfo in interface javax.servlet.http.HttpServletRequest

            getPathTranslated

            public java.lang.String getPathTranslated()
            Specified by:
            getPathTranslated in interface javax.servlet.http.HttpServletRequest

            getContextPath

            public java.lang.String getContextPath()
            Specified by:
            getContextPath in interface javax.servlet.http.HttpServletRequest

            getQueryString

            public java.lang.String getQueryString()
            Specified by:
            getQueryString in interface javax.servlet.http.HttpServletRequest

            getRemoteUser

            public java.lang.String getRemoteUser()
            Specified by:
            getRemoteUser in interface javax.servlet.http.HttpServletRequest

            isUserInRole

            public boolean isUserInRole(java.lang.String user)
            Specified by:
            isUserInRole in interface javax.servlet.http.HttpServletRequest

            getUserPrincipal

            public java.security.Principal getUserPrincipal()
            Specified by:
            getUserPrincipal in interface javax.servlet.http.HttpServletRequest

            getRequestedSessionId

            public java.lang.String getRequestedSessionId()
            Specified by:
            getRequestedSessionId in interface javax.servlet.http.HttpServletRequest

            getRequestURI

            public java.lang.String getRequestURI()
            Specified by:
            getRequestURI in interface javax.servlet.http.HttpServletRequest

            getServletPath

            public java.lang.String getServletPath()
            Specified by:
            getServletPath in interface javax.servlet.http.HttpServletRequest

            getSession

            public javax.servlet.http.HttpSession getSession(boolean create)
            Specified by:
            getSession in interface javax.servlet.http.HttpServletRequest

            getSession

            public javax.servlet.http.HttpSession getSession()
            Specified by:
            getSession in interface javax.servlet.http.HttpServletRequest

            isRequestedSessionIdValid

            public boolean isRequestedSessionIdValid()
            Specified by:
            isRequestedSessionIdValid in interface javax.servlet.http.HttpServletRequest

            isRequestedSessionIdFromURL

            public boolean isRequestedSessionIdFromURL()
            Specified by:
            isRequestedSessionIdFromURL in interface javax.servlet.http.HttpServletRequest

            isRequestedSessionIdFromUrl

            public boolean isRequestedSessionIdFromUrl()
            Specified by:
            isRequestedSessionIdFromUrl in interface javax.servlet.http.HttpServletRequest

            getParameterMap

            public java.util.Map getParameterMap()
            This method returns null. To use any Servlet 2.3 methods, call on getRequest() and use that request object. Once Servlet 2.3 is required to build Struts, this will no longer be an issue.


            setCharacterEncoding

            public void setCharacterEncoding(java.lang.String encoding)
            This method does nothing. To use any Servlet 2.3 methods, call on getRequest() and use that request object. Once Servlet 2.3 is required to build Struts, this will no longer be an issue.


            getRequestURL

            public java.lang.StringBuffer getRequestURL()
            This method returns null. To use any Servlet 2.3 methods, call on getRequest() and use that request object. Once Servlet 2.3 is required to build Struts, this will no longer be an issue.


            isRequestedSessionIdFromCookie

            public boolean isRequestedSessionIdFromCookie()
            This method returns false. To use any Servlet 2.3 methods, call on getRequest() and use that request object. Once Servlet 2.3 is required to build Struts, this will no longer be an issue.

            Specified by:
            isRequestedSessionIdFromCookie in interface javax.servlet.http.HttpServletRequest


            Copyright © 2000-2002 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/upload/MultipartValueStream.html0000644000175000017500000004353510404045222031660 0ustar arnaudarnaud00000000000000 MultipartValueStream (Apache Struts API Documentation)

            org.apache.struts.upload
            Class MultipartValueStream

            java.lang.Object
              |
              +--java.io.InputStream
                    |
                    +--org.apache.struts.upload.MultipartValueStream
            

            class MultipartValueStream
            extends java.io.InputStream

            This class implements an inputStream that reads another stream until a multipart boundary is found. The class reports eof when boundary found. The undelying stream is not closed.

            See RFC 1867 (http://info.internet.isi.edu:80/in-notes/rfc/files/rfc1867.txt) for details about the protocol.

            Author:
            Jimmy Larsson

            Field Summary
            private  byte[] boundaryBytes
                      byte buffer with the boundary
            private  boolean boundaryReached
                      have we reached the boundary?
            private  boolean finalBoundaryReached
                      is the boundary found a final boundary?
            static java.lang.String HEADER_ENCODING
                       
            private  java.io.InputStream in
                      the underlying stream
            private  int matchedBoundaryBytes
                      how many curretly matched boundary bytes?
            private  int readAheadBufferEndI
                      The end index for the read ahead cyclic buffer (points to the last byte)
            private  int readAheadBufferStartI
                      The start index for the read ahead cyclic buffer (points to the first byte)
            private  byte[] readAheadBytes
                      the read ahead buffer (cyclic)
             
            Fields inherited from class java.io.InputStream
             
            Constructor Summary
            MultipartValueStream(java.io.InputStream in, java.lang.String boundary)
                      Create a stream that stops reading at the boundary NOTE: the boundary parameter is without the trailing dashes "--".
             
            Method Summary
             boolean encounteredFinalBoundary()
                       
             int read()
                      Read the next byte
             
            Methods inherited from class java.io.InputStream
            available, close, mark, markSupported, read, read, reset, skip
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
             

            Field Detail

            HEADER_ENCODING

            public static final java.lang.String HEADER_ENCODING
            See Also:
            Constant Field Values

            in

            private java.io.InputStream in
            the underlying stream


            boundaryBytes

            private byte[] boundaryBytes
            byte buffer with the boundary


            matchedBoundaryBytes

            private int matchedBoundaryBytes
            how many curretly matched boundary bytes?


            readAheadBytes

            private byte[] readAheadBytes
            the read ahead buffer (cyclic)


            readAheadBufferStartI

            private int readAheadBufferStartI
            The start index for the read ahead cyclic buffer (points to the first byte)


            readAheadBufferEndI

            private int readAheadBufferEndI
            The end index for the read ahead cyclic buffer (points to the last byte)


            boundaryReached

            private boolean boundaryReached
            have we reached the boundary?


            finalBoundaryReached

            private boolean finalBoundaryReached
            is the boundary found a final boundary?

            Constructor Detail

            MultipartValueStream

            public MultipartValueStream(java.io.InputStream in,
                                        java.lang.String boundary)
                                 throws java.io.IOException
            Create a stream that stops reading at the boundary NOTE: the boundary parameter is without the trailing dashes "--".

            Method Detail

            read

            public int read()
                     throws java.io.IOException
            Read the next byte

            Specified by:
            read in class java.io.InputStream
            Returns:
            -1 on boundary reached
            Throws:
            java.io.IOException - if the ending boundary is never found

            encounteredFinalBoundary

            public boolean encounteredFinalBoundary()
                                             throws javax.servlet.ServletException
            Returns:
            true if we are the last stream, ie. we encountered a final boundary
            Throws:
            javax.servlet.ServletException - if the boundary has not yet been reached


            Copyright © 2000-2002 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/upload/package-frame.html0000644000175000017500000000460510404045232030205 0ustar arnaudarnaud00000000000000 org.apache.struts.upload (Apache Struts API Documentation) org.apache.struts.upload
            Interfaces 
            FormFile
            MultipartRequestHandler
            Classes 
            BufferedMultipartInputStream
            DiskFile
            DiskMultipartRequestHandler
            MultipartBoundaryInputStream
            MultipartElement
            MultipartIterator
            MultipartRequestWrapper
            MultipartValueStream
            Exceptions 
            ContentLengthExceededException
            MaxLengthExceededException
            libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/upload/package-summary.html0000644000175000017500000002346710404045212030615 0ustar arnaudarnaud00000000000000 org.apache.struts.upload (Apache Struts API Documentation)

            Package org.apache.struts.upload

            The upload package facilities to upload files using multi-part requests.

            See:
                      Description

            Interface Summary
            FormFile This interface represents a file that has been uploaded by a client.
            MultipartRequestHandler MultipartRequestHandler provides an standard interface for struts to deal with file uploads from forms with enctypes of "multipart/form-data".
             

            Class Summary
            BufferedMultipartInputStream This class implements buffering for an InputStream as well as a readLine method.
            DiskFile  
            DiskMultipartRequestHandler This is a MultipartRequestHandler that writes file data directly to to temporary files on disk.
            MultipartBoundaryInputStream This class encapsulates parsing functionality for RFC1867, multipart/form-data.
            MultipartElement This class represents an element in a multipart request.
            MultipartIterator The MultipartIterator class is responsible for reading the input data of a multipart request and splitting it up into input elements, wrapped inside of a MultipartElement for easy definition.
            MultipartRequestWrapper This class functions as a wrapper around HttpServletRequest to provide working getParameter methods for multipart requests.
            MultipartValueStream This class implements an inputStream that reads another stream until a multipart boundary is found.
             

            Exception Summary
            ContentLengthExceededException This exception is thrown when multipart post data exceeds the value given by the Content-Length header
            MaxLengthExceededException This exception is thrown when multipart post data exceeds the maximum value set
             

            Package org.apache.struts.upload Description

            The upload package facilities to upload files using multi-part requests.



            Upload Package UML

            Package Specification

            ##### FILL IN ANY SPECS NEEDED BY JAVA COMPATIBILITY KIT #####

            Related Documentation

            For overviews, tutorials, examples, guides, and tool documentation, please see:



            Copyright © 2000-2002 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/upload/package-tree.html0000644000175000017500000001741110404045204030050 0ustar arnaudarnaud00000000000000 org.apache.struts.upload Class Hierarchy (Apache Struts API Documentation)

            Hierarchy For Package org.apache.struts.upload

            Package Hierarchies:
            All Packages

            Class Hierarchy

            Interface Hierarchy



            Copyright © 2000-2002 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/util/0000755000175000017500000000000010423130300024310 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/util/ArrayStack.html0000644000175000017500000003422310404045236027262 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class ArrayStack

            org.apache.struts.util
            Class ArrayStack

            java.lang.Object
              |
              +--org.apache.struts.util.ArrayStack
            
            All Implemented Interfaces:
            java.io.Serializable

            public class ArrayStack
            extends java.lang.Object
            implements java.io.Serializable

            Implementation of the java.util.Stack API that is based on an ArrayList rather than a Vector. This means no synchronization locks are utilized internally, so you must synchronize externally if an instance is referenced from multiple threads.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  java.util.ArrayList list
                      The underlying collection class.
             
            Constructor Summary
            ArrayStack()
                       
             
            Method Summary
             void clear()
                      Remove all elements from this stack.
             boolean empty()
                      Return true if this stack is currently empty.
             java.lang.Object peek()
                      Return the top item off of this stack without removing it.
             java.lang.Object peek(int n)
                      Return the n'th item down (zero-relative) from the top of this stack without removing it.
             java.lang.Object pop()
                      Pop the top item off of this stack and return it.
             java.lang.Object push(java.lang.Object item)
                      Push a new item onto the top of this stack.
             int size()
                      Return the number of items on this stack.
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            list

            protected java.util.ArrayList list
            The underlying collection class.
            Constructor Detail

            ArrayStack

            public ArrayStack()
            Method Detail

            clear

            public void clear()
            Remove all elements from this stack. After this call, the stack will be empty.

            empty

            public boolean empty()
            Return true if this stack is currently empty.

            peek

            public java.lang.Object peek()
                                  throws java.util.EmptyStackException
            Return the top item off of this stack without removing it.
            Throws:
            EmptyStackExceptino - if the stack is empty

            peek

            public java.lang.Object peek(int n)
                                  throws java.util.EmptyStackException
            Return the n'th item down (zero-relative) from the top of this stack without removing it.
            Parameters:
            n - Number of items down to go
            Throws:
            java.util.EmptyStackException - if there are not enough items on the stack to satisfy this request

            pop

            public java.lang.Object pop()
                                 throws java.util.EmptyStackException
            Pop the top item off of this stack and return it.
            Throws:
            java.util.EmptyStackException - if the stack is empty

            push

            public java.lang.Object push(java.lang.Object item)
            Push a new item onto the top of this stack. The pushed item is also returned.
            Parameters:
            item - Item to be added

            size

            public int size()
            Return the number of items on this stack.


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/util/BeanUtils.html0000644000175000017500000006703110404045230027101 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class BeanUtils

            org.apache.struts.util
            Class BeanUtils

            java.lang.Object
              |
              +--org.apache.struts.util.BeanUtils
            

            Deprecated. At some point after Struts 1.0 final, will be replaced by an equivalent class in the Jakarta Commons Beanutils package.

            public class BeanUtils
            extends java.lang.Object

            Utility methods for populating JavaBeans properties via reflection.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan, Ralph Schaer, Chris Audley

            Field Summary
            private static int debug
                      Deprecated. The debugging detail level for this component.
             
            Constructor Summary
            BeanUtils()
                      Deprecated.  
             
            Method Summary
            static java.lang.Object cloneBean(java.lang.Object bean)
                      Deprecated. Clone a bean based on the available property getters and setters, even if the bean class itself does not implement Cloneable.
            static java.util.Map describe(java.lang.Object bean)
                      Deprecated. Return the entire set of properties for which the specified bean provides a read method.
            static java.lang.String[] getArrayProperty(java.lang.Object bean, java.lang.String name)
                      Deprecated. Return the value of the specified array property of the specified bean, as a String array.
            static int getDebug()
                      Deprecated.  
            static java.lang.String getIndexedProperty(java.lang.Object bean, java.lang.String name)
                      Deprecated. Return the value of the specified indexed property of the specified bean, as a String.
            static java.lang.String getIndexedProperty(java.lang.Object bean, java.lang.String name, int index)
                      Deprecated. Return the value of the specified indexed property of the specified bean, as a String.
            static java.lang.String getNestedProperty(java.lang.Object bean, java.lang.String name)
                      Deprecated. Return the value of the (possibly nested) property of the specified name, for the specified bean, as a String.
            static java.lang.String getProperty(java.lang.Object bean, java.lang.String name)
                      Deprecated. Return the value of the specified property of the specified bean, no matter which property reference format is used, as a String.
            static java.lang.String getSimpleProperty(java.lang.Object bean, java.lang.String name)
                      Deprecated. Return the value of the specified simple property of the specified bean, converted to a String.
            static void populate(java.lang.Object bean, java.util.Map properties)
                      Deprecated. Populate the JavaBeans properties of the specified bean, based on the specified name/value pairs.
            static void setDebug(int newDebug)
                      Deprecated.  
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            debug

            private static int debug
            Deprecated. 
            The debugging detail level for this component.
            Constructor Detail

            BeanUtils

            public BeanUtils()
            Deprecated. 
            Method Detail

            getDebug

            public static int getDebug()
            Deprecated. 

            setDebug

            public static void setDebug(int newDebug)
            Deprecated. 

            cloneBean

            public static java.lang.Object cloneBean(java.lang.Object bean)
                                              throws java.lang.IllegalAccessException,
                                                     java.lang.InstantiationException,
                                                     java.lang.reflect.InvocationTargetException,
                                                     java.lang.NoSuchMethodException
            Deprecated. 
            Clone a bean based on the available property getters and setters, even if the bean class itself does not implement Cloneable.
            Parameters:
            bean - Bean to be cloned
            Throws:
            java.lang.IllegalAccessException - if the caller does not have access to the property accessor method
            java.lang.InstantiationException - if a new instance of the bean's class cannot be instantiated
            java.lang.reflect.InvocationTargetException - if the property accessor method throws an exception
            java.lang.NoSuchMethodException - if an accessor method for this propety cannot be found

            describe

            public static java.util.Map describe(java.lang.Object bean)
                                          throws java.lang.IllegalAccessException,
                                                 java.lang.reflect.InvocationTargetException,
                                                 java.lang.NoSuchMethodException
            Deprecated. 
            Return the entire set of properties for which the specified bean provides a read method. This map can be fed back to a call to BeanUtils.populate() to reconsitute the same set of properties, modulo differences for read-only and write-only properties.
            Parameters:
            bean - Bean whose properties are to be extracted
            Throws:
            java.lang.IllegalAccessException - if the caller does not have access to the property accessor method
            java.lang.reflect.InvocationTargetException - if the property accessor method throws an exception
            java.lang.NoSuchMethodException - if an accessor method for this propety cannot be found

            getArrayProperty

            public static java.lang.String[] getArrayProperty(java.lang.Object bean,
                                                              java.lang.String name)
                                                       throws java.lang.IllegalAccessException,
                                                              java.lang.reflect.InvocationTargetException,
                                                              java.lang.NoSuchMethodException
            Deprecated. 
            Return the value of the specified array property of the specified bean, as a String array.
            Parameters:
            bean - Bean whose property is to be extracted
            name - Name of the property to be extracted
            Throws:
            java.lang.IllegalAccessException - if the caller does not have access to the property accessor method
            java.lang.reflect.InvocationTargetException - if the property accessor method throws an exception
            java.lang.NoSuchMethodException - if an accessor method for this propety cannot be found

            getIndexedProperty

            public static java.lang.String getIndexedProperty(java.lang.Object bean,
                                                              java.lang.String name)
                                                       throws java.lang.IllegalAccessException,
                                                              java.lang.reflect.InvocationTargetException,
                                                              java.lang.NoSuchMethodException
            Deprecated. 
            Return the value of the specified indexed property of the specified bean, as a String. The zero-relative index of the required value must be included (in square brackets) as a suffix to the property name, or IllegalArgumentException will be thrown.
            Parameters:
            bean - Bean whose property is to be extracted
            name - propertyname[index] of the property value to be extracted
            Throws:
            java.lang.IllegalAccessException - if the caller does not have access to the property accessor method
            java.lang.reflect.InvocationTargetException - if the property accessor method throws an exception
            java.lang.NoSuchMethodException - if an accessor method for this propety cannot be found

            getIndexedProperty

            public static java.lang.String getIndexedProperty(java.lang.Object bean,
                                                              java.lang.String name,
                                                              int index)
                                                       throws java.lang.IllegalAccessException,
                                                              java.lang.reflect.InvocationTargetException,
                                                              java.lang.NoSuchMethodException
            Deprecated. 
            Return the value of the specified indexed property of the specified bean, as a String. The index is specified as a method parameter and must *not* be included in the property name expression
            Parameters:
            bean - Bean whose property is to be extracted
            name - Simple property name of the property value to be extracted
            index - Index of the property value to be extracted
            Throws:
            java.lang.IllegalAccessException - if the caller does not have access to the property accessor method
            java.lang.reflect.InvocationTargetException - if the property accessor method throws an exception
            java.lang.NoSuchMethodException - if an accessor method for this propety cannot be found

            getNestedProperty

            public static java.lang.String getNestedProperty(java.lang.Object bean,
                                                             java.lang.String name)
                                                      throws java.lang.IllegalAccessException,
                                                             java.lang.reflect.InvocationTargetException,
                                                             java.lang.NoSuchMethodException
            Deprecated. 
            Return the value of the (possibly nested) property of the specified name, for the specified bean, as a String.
            Parameters:
            bean - Bean whose property is to be extracted
            name - Possibly nested name of the property to be extracted
            Throws:
            java.lang.IllegalAccessException - if the caller does not have access to the property accessor method
            java.lang.IllegalArgumentException - if a nested reference to a property returns null
            java.lang.reflect.InvocationTargetException - if the property accessor method throws an exception
            java.lang.NoSuchMethodException - if an accessor method for this propety cannot be found

            getProperty

            public static java.lang.String getProperty(java.lang.Object bean,
                                                       java.lang.String name)
                                                throws java.lang.IllegalAccessException,
                                                       java.lang.reflect.InvocationTargetException,
                                                       java.lang.NoSuchMethodException
            Deprecated. 
            Return the value of the specified property of the specified bean, no matter which property reference format is used, as a String.
            Parameters:
            bean - Bean whose property is to be extracted
            name - Possibly indexed and/or nested name of the property to be extracted
            Throws:
            java.lang.IllegalAccessException - if the caller does not have access to the property accessor method
            java.lang.reflect.InvocationTargetException - if the property accessor method throws an exception
            java.lang.NoSuchMethodException - if an accessor method for this propety cannot be found

            getSimpleProperty

            public static java.lang.String getSimpleProperty(java.lang.Object bean,
                                                             java.lang.String name)
                                                      throws java.lang.IllegalAccessException,
                                                             java.lang.reflect.InvocationTargetException,
                                                             java.lang.NoSuchMethodException
            Deprecated. 
            Return the value of the specified simple property of the specified bean, converted to a String.
            Parameters:
            bean - Bean whose property is to be extracted
            name - Name of the property to be extracted
            Throws:
            java.lang.IllegalAccessException - if the caller does not have access to the property accessor method
            java.lang.reflect.InvocationTargetException - if the property accessor method throws an exception
            java.lang.NoSuchMethodException - if an accessor method for this propety cannot be found

            populate

            public static void populate(java.lang.Object bean,
                                        java.util.Map properties)
                                 throws java.lang.IllegalAccessException,
                                        java.lang.reflect.InvocationTargetException
            Deprecated. 
            Populate the JavaBeans properties of the specified bean, based on the specified name/value pairs. This method uses Java reflection APIs to identify corresponding "property setter" method names, and deals with setter arguments of type String, boolean, int, long, float, and double. In addition, array setters for these types (or the corresponding primitive types) can also be identified.

            The particular setter method to be called for each property is determined using the usual JavaBeans introspection mechanisms. Thus, you may identify custom setter methods using a BeanInfo class that is associated with the class of the bean itself. If no such BeanInfo class is available, the standard method name conversion ("set" plus the capitalized name of the property in question) is used.

            NOTE: It is contrary to the JavaBeans Specification to have more than one setter method (with different argument signatures) for the same property.

            Parameters:
            bean - JavaBean whose properties are being populated
            properties - Map keyed by property name, with the corresponding (String or String[]) value(s) to be set
            Throws:
            java.lang.IllegalAccessException - if the caller does not have access to the property accessor method
            java.lang.reflect.InvocationTargetException - if the property accessor method throws an exception


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/util/ConvertUtils.html0000644000175000017500000011056210404045206027655 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class ConvertUtils

            org.apache.struts.util
            Class ConvertUtils

            java.lang.Object
              |
              +--org.apache.struts.util.ConvertUtils
            

            Deprecated. At some point after Struts 1.0 final, will be replaced by an equivalent class in the Jakarta Commons Beanutils package.

            public class ConvertUtils
            extends java.lang.Object

            Utility methods for converting String values to objects of the specified class. If you specify a Java primitive type, or an array of a Java primitive type, as a destination type, a scalar or array of the coresponding Java wrapper class will be created instead. If you attempt to convert an Object or Object array of a non-String and non-primitive type, it will be converted to a scalar String or array of Strings, as appropriate.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan, Ralph Schaer, Chris Audley

            Field Summary
            private static java.lang.Boolean defaultBoolean
                      Deprecated. The default value for Boolean conversions.
            private static java.lang.Byte defaultByte
                      Deprecated. The default value for Byte conversions.
            private static java.lang.Character defaultCharacter
                      Deprecated. The default value for Character conversions.
            private static java.lang.Double defaultDouble
                      Deprecated. The default value for Double conversions.
            private static java.lang.Float defaultFloat
                      Deprecated. The default value for Float conversions.
            private static java.lang.Integer defaultInteger
                      Deprecated. The default value for Integer conversions.
            private static java.lang.Long defaultLong
                      Deprecated. The default value for Long conversions.
            private static java.lang.Short defaultShort
                      Deprecated. The default value for Short conversions.
            private static java.lang.Class stringClass
                      Deprecated. The Class object for java.lang.String.
             
            Constructor Summary
            ConvertUtils()
                      Deprecated.  
             
            Method Summary
            static java.lang.String convert(java.lang.Object value)
                      Deprecated. Convert the specified value into a String.
            static java.lang.Object convert(java.lang.String[] values, java.lang.Class clazz)
                      Deprecated. Convert an array of specified values to an array of objects of the specified class (if possible).
            static java.lang.Object convert(java.lang.String value, java.lang.Class clazz)
                      Deprecated. Convert the specified value to an object of the specified class (if possible).
            private static java.lang.Boolean convertBoolean(java.lang.String value, java.lang.Boolean defaultValue)
                      Deprecated. Convert a String value to a corresponding Boolean value.
            private static java.lang.Byte convertByte(java.lang.String value, java.lang.Byte defaultValue)
                      Deprecated. Convert a String value to a corresponding Byte value.
            private static java.lang.Character convertCharacter(java.lang.String value, java.lang.Character defaultValue)
                      Deprecated. Convert a String value to a corresponding Character value.
            private static java.lang.Double convertDouble(java.lang.String value, java.lang.Double defaultValue)
                      Deprecated. Convert a String value to a corresponding Double value.
            private static java.lang.Float convertFloat(java.lang.String value, java.lang.Float defaultValue)
                      Deprecated. Convert a String value to a corresponding Float value.
            private static java.lang.Integer convertInteger(java.lang.String value, java.lang.Integer defaultValue)
                      Deprecated. Convert a String value to a corresponding Integer value.
            private static java.lang.Long convertLong(java.lang.String value, java.lang.Long defaultValue)
                      Deprecated. Convert a String value to a corresponding Long value.
            private static java.lang.Short convertShort(java.lang.String value, java.lang.Short defaultValue)
                      Deprecated. Convert a String value to a corresponding Short value.
             boolean getDefaultBoolean()
                      Deprecated.  
             byte getDefaultByte()
                      Deprecated.  
             char getDefaultCharacter()
                      Deprecated.  
             double getDefaultDouble()
                      Deprecated.  
             float getDefaultFloat()
                      Deprecated.  
             int getDefaultInteger()
                      Deprecated.  
             long getDefaultLong()
                      Deprecated.  
             short getDefaultShort()
                      Deprecated.  
             void setDefaultBoolean(boolean defaultBoolean)
                      Deprecated.  
             void setDefaultByte(byte defaultByte)
                      Deprecated.  
             void setDefaultCharacter(char defaultCharacter)
                      Deprecated.  
             void setDefaultDouble(double defaultDouble)
                      Deprecated.  
             void setDefaultFloat(float defaultFloat)
                      Deprecated.  
             void setDefaultInteger(int defaultInteger)
                      Deprecated.  
             void setDefaultLong(long defaultLong)
                      Deprecated.  
             void setDefaultShort(short defaultShort)
                      Deprecated.  
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            defaultBoolean

            private static java.lang.Boolean defaultBoolean
            Deprecated. 
            The default value for Boolean conversions.

            defaultByte

            private static java.lang.Byte defaultByte
            Deprecated. 
            The default value for Byte conversions.

            defaultCharacter

            private static java.lang.Character defaultCharacter
            Deprecated. 
            The default value for Character conversions.

            defaultDouble

            private static java.lang.Double defaultDouble
            Deprecated. 
            The default value for Double conversions.

            defaultFloat

            private static java.lang.Float defaultFloat
            Deprecated. 
            The default value for Float conversions.

            defaultInteger

            private static java.lang.Integer defaultInteger
            Deprecated. 
            The default value for Integer conversions.

            defaultLong

            private static java.lang.Long defaultLong
            Deprecated. 
            The default value for Long conversions.

            defaultShort

            private static java.lang.Short defaultShort
            Deprecated. 
            The default value for Short conversions.

            stringClass

            private static java.lang.Class stringClass
            Deprecated. 
            The Class object for java.lang.String.
            Constructor Detail

            ConvertUtils

            public ConvertUtils()
            Deprecated. 
            Method Detail

            getDefaultBoolean

            public boolean getDefaultBoolean()
            Deprecated. 

            setDefaultBoolean

            public void setDefaultBoolean(boolean defaultBoolean)
            Deprecated. 

            getDefaultByte

            public byte getDefaultByte()
            Deprecated. 

            setDefaultByte

            public void setDefaultByte(byte defaultByte)
            Deprecated. 

            getDefaultCharacter

            public char getDefaultCharacter()
            Deprecated. 

            setDefaultCharacter

            public void setDefaultCharacter(char defaultCharacter)
            Deprecated. 

            getDefaultDouble

            public double getDefaultDouble()
            Deprecated. 

            setDefaultDouble

            public void setDefaultDouble(double defaultDouble)
            Deprecated. 

            getDefaultFloat

            public float getDefaultFloat()
            Deprecated. 

            setDefaultFloat

            public void setDefaultFloat(float defaultFloat)
            Deprecated. 

            getDefaultInteger

            public int getDefaultInteger()
            Deprecated. 

            setDefaultInteger

            public void setDefaultInteger(int defaultInteger)
            Deprecated. 

            getDefaultLong

            public long getDefaultLong()
            Deprecated. 

            setDefaultLong

            public void setDefaultLong(long defaultLong)
            Deprecated. 

            getDefaultShort

            public short getDefaultShort()
            Deprecated. 

            setDefaultShort

            public void setDefaultShort(short defaultShort)
            Deprecated. 

            convert

            public static java.lang.String convert(java.lang.Object value)
            Deprecated. 
            Convert the specified value into a String. If the specified value is an array, the first element (converted to a String) will be returned.
            Parameters:
            value - Value to be converted (may be null)

            convert

            public static java.lang.Object convert(java.lang.String value,
                                                   java.lang.Class clazz)
            Deprecated. 
            Convert the specified value to an object of the specified class (if possible). Otherwise, return a String representation of the value. If you specify type as the name of a Java primitive type, an instance of the corresponding wrapper class (initialized to the correct value) is returned instead.
            Parameters:
            value - Value to be converted (may be null)
            clazz - Java class to be converted to (must be java.lang.String or one of the primitive type wrappers)

            convert

            public static java.lang.Object convert(java.lang.String[] values,
                                                   java.lang.Class clazz)
            Deprecated. 
            Convert an array of specified values to an array of objects of the specified class (if possible). If you specify type as one of the Java primitive types, an array of that type will be returned; otherwise an array of the requested type (must be String or a Java wrapper class for the primitive types) will be returned.
            Parameters:
            value - Value to be converted (may be null)
            clazz - Java array class to be converted to (must be String[], or an array of one of the Java primitive types)

            convertBoolean

            private static java.lang.Boolean convertBoolean(java.lang.String value,
                                                            java.lang.Boolean defaultValue)
            Deprecated. 
            Convert a String value to a corresponding Boolean value.
            Parameters:
            value - The string value to convert
            defaultValue - Default value to return on a conversion error

            convertByte

            private static java.lang.Byte convertByte(java.lang.String value,
                                                      java.lang.Byte defaultValue)
            Deprecated. 
            Convert a String value to a corresponding Byte value.
            Parameters:
            value - The string value to convert
            defaultValue - Default value to return on a conversion error

            convertCharacter

            private static java.lang.Character convertCharacter(java.lang.String value,
                                                                java.lang.Character defaultValue)
            Deprecated. 
            Convert a String value to a corresponding Character value.
            Parameters:
            value - The string value to convert
            defaultValue - Default value to return on a conversion error

            convertDouble

            private static java.lang.Double convertDouble(java.lang.String value,
                                                          java.lang.Double defaultValue)
            Deprecated. 
            Convert a String value to a corresponding Double value.
            Parameters:
            value - The string value to convert
            defaultValue - Default value to return on a conversion error

            convertFloat

            private static java.lang.Float convertFloat(java.lang.String value,
                                                        java.lang.Float defaultValue)
            Deprecated. 
            Convert a String value to a corresponding Float value.
            Parameters:
            value - The string value to convert
            defaultValue - Default value to return on a conversion error

            convertInteger

            private static java.lang.Integer convertInteger(java.lang.String value,
                                                            java.lang.Integer defaultValue)
            Deprecated. 
            Convert a String value to a corresponding Integer value.
            Parameters:
            value - The string value to convert
            defaultValue - Default value to return on a conversion error

            convertLong

            private static java.lang.Long convertLong(java.lang.String value,
                                                      java.lang.Long defaultValue)
            Deprecated. 
            Convert a String value to a corresponding Long value.
            Parameters:
            value - The string value to convert
            defaultValue - Default value to return on a conversion error

            convertShort

            private static java.lang.Short convertShort(java.lang.String value,
                                                        java.lang.Short defaultValue)
            Deprecated. 
            Convert a String value to a corresponding Short value.
            Parameters:
            value - The string value to convert
            defaultValue - Default value to return on a conversion error


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/util/ErrorMessages.html0000644000175000017500000003070110404045206027771 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class ErrorMessages

            org.apache.struts.util
            Class ErrorMessages

            java.lang.Object
              |
              +--org.apache.struts.util.ErrorMessages
            

            Deprecated. Use org.apache.struts.action.ActionErrors instead

            public class ErrorMessages
            extends java.lang.Object

            Utility class that is useful for accumulating error message keys in action classes or validation methods. Use this class as follows:

            • At the beginning of your action class or validation method, instantiate an instance of this class in a local variable.
            • Whenever you wish to add a new error message key, call the addError() method to add it.
            • To return the String array of error message keys required by other Struts components, call getErrors().

            Author:
            David Geary

            Field Summary
            private  java.util.Vector errors
                      Deprecated. The accumulated set of error message keys.
             
            Constructor Summary
            ErrorMessages()
                      Deprecated.  
             
            Method Summary
             void addError(java.lang.String key)
                      Deprecated. Add an error message key to the accumulated set of errors.
             java.lang.String getError(int index)
                      Deprecated. Return the error message key at the specified zero-relative index.
             java.lang.String[] getErrors()
                      Deprecated. Return the set of error message keys we have accumulated.
             int getSize()
                      Deprecated. Return the number of error message keys we have accumulated so far.
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            errors

            private java.util.Vector errors
            Deprecated. 
            The accumulated set of error message keys.
            Constructor Detail

            ErrorMessages

            public ErrorMessages()
            Deprecated. 
            Method Detail

            addError

            public void addError(java.lang.String key)
            Deprecated. 
            Add an error message key to the accumulated set of errors.
            Parameters:
            key - The error message key to be added

            getError

            public java.lang.String getError(int index)
            Deprecated. 
            Return the error message key at the specified zero-relative index.
            Parameters:
            index - Zero-relative index of the error message key to return

            getErrors

            public java.lang.String[] getErrors()
            Deprecated. 
            Return the set of error message keys we have accumulated.

            getSize

            public int getSize()
            Deprecated. 
            Return the number of error message keys we have accumulated so far.


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/util/FastArrayList.html0000644000175000017500000013230210404045220027734 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class FastArrayList

            org.apache.struts.util
            Class FastArrayList

            java.lang.Object
              |
              +--java.util.AbstractCollection
                    |
                    +--java.util.AbstractList
                          |
                          +--java.util.ArrayList
                                |
                                +--org.apache.struts.util.FastArrayList
            
            All Implemented Interfaces:
            java.lang.Cloneable, java.util.Collection, java.util.List, java.io.Serializable

            Deprecated. At some point after Struts 1.0 final, will be replaced by an equivalent class in the Jakarta Commons Collections package.

            public class FastArrayList
            extends java.util.ArrayList

            A customized implementation of java.util.ArrayList designed to operate in a multithreaded environment where the large majority of method calls are read-only, instead of structural changes. When operating in "fast" mode, read calls are non-synchronized and write calls perform the following steps:

            • Clone the existing collection
            • Perform the modification on the clone
            • Replace the existing collection with the (modified) clone

            When first created, objects of this class default to "slow" mode, where all accesses of any type are synchronized but no cloning takes place. This is appropriate for initially populating the collection, followed by a switch to "fast" mode (by calling setFast(true)) after initialization is complete.

            NOTE: If you are creating and accessing an ArrayList only within a single thread, you should use java.util.ArrayList directly (with no synchronization), for maximum performance.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  boolean fast
                      Deprecated. Are we operating in "fast" mode?
            protected  java.util.ArrayList list
                      Deprecated. The underlying list we are managing.
             
            Fields inherited from class java.util.ArrayList
            elementData, size
             
            Fields inherited from class java.util.AbstractList
            modCount
             
            Constructor Summary
            FastArrayList()
                      Deprecated. Construct a an empty list.
            FastArrayList(java.util.Collection collection)
                      Deprecated. Construct a list containing the elements of the specified collection, in the order they are returned by the collection's iterator.
            FastArrayList(int capacity)
                      Deprecated. Construct an empty list with the specified capacity.
             
            Method Summary
             void add(int index, java.lang.Object element)
                      Deprecated. Insert the specified element at the specified position in this list, and shift all remaining elements up one position.
             boolean add(java.lang.Object element)
                      Deprecated. Appends the specified element to the end of this list.
             boolean addAll(java.util.Collection collection)
                      Deprecated. Append all of the elements in the specified Collection to the end of this list, in the order that they are returned by the specified Collection's Iterator.
             boolean addAll(int index, java.util.Collection collection)
                      Deprecated. Insert all of the elements in the specified Collection at the specified position in this list, and shift any previous elements upwards as needed.
             void clear()
                      Deprecated. Remove all of the elements from this list.
             java.lang.Object clone()
                      Deprecated. Return a shallow copy of this FastArrayList instance.
             boolean contains(java.lang.Object element)
                      Deprecated. Return true if this list contains the specified element.
             boolean containsAll(java.util.Collection collection)
                      Deprecated. Return true if this list contains all of the elements in the specified Collection.
             void ensureCapacity(int capacity)
                      Deprecated. Increase the capacity of this ArrayList instance, if necessary, to ensure that it can hold at least the number of elements specified by the minimum capacity argument.
             boolean equals(java.lang.Object o)
                      Deprecated. Compare the specified object with this list for equality.
             java.lang.Object get(int index)
                      Deprecated. Return the element at the specified position in the list.
             boolean getFast()
                      Deprecated.  
             int hashCode()
                      Deprecated. Return the hash code value for this list.
             int indexOf(java.lang.Object element)
                      Deprecated. Search for the first occurrence of the given argument, testing for equality using the equals() method, and return the corresponding index, or -1 if the object is not found.
             boolean isEmpty()
                      Deprecated. Test if this list has no elements.
             java.util.Iterator iterator()
                      Deprecated. Return an iterator over the elements in this list in proper sequence.
             int lastIndexOf(java.lang.Object element)
                      Deprecated. Search for the last occurrence of the given argument, testing for equality using the equals() method, and return the corresponding index, or -1 if the object is not found.
             java.util.ListIterator listIterator()
                      Deprecated. Return an iterator of the elements of this list, in proper sequence.
             java.util.ListIterator listIterator(int index)
                      Deprecated. Return an iterator of the elements of this list, in proper sequence, starting at the specified position.
             java.lang.Object remove(int index)
                      Deprecated. Remove the element at the specified position in the list, and shift any subsequent elements down one position.
             boolean remove(java.lang.Object element)
                      Deprecated. Remove the first occurrence of the specified element from the list, and shift any subsequent elements down one position.
             boolean removeAll(java.util.Collection collection)
                      Deprecated. Remove from this collection all of its elements that are contained in the specified collection.
             boolean retainAll(java.util.Collection collection)
                      Deprecated. Remove from this collection all of its elements except those that are contained in the specified collection.
             java.lang.Object set(int index, java.lang.Object element)
                      Deprecated. Replace the element at the specified position in this list with the specified element.
             void setFast(boolean fast)
                      Deprecated.  
             int size()
                      Deprecated. Return the number of elements in this list.
             java.util.List subList(int fromIndex, int toIndex)
                      Deprecated. Return a view of the portion of this list between fromIndex (inclusive) and toIndex (exclusive).
             java.lang.Object[] toArray()
                      Deprecated. Return an array containing all of the elements in this list in the correct order.
             java.lang.Object[] toArray(java.lang.Object[] array)
                      Deprecated. Return an array containing all of the elements in this list in the correct order.
             java.lang.String toString()
                      Deprecated. Return a String representation of this object.
             void trimToSize()
                      Deprecated. Trim the capacity of this ArrayList instance to be the list's current size.
             
            Methods inherited from class java.util.ArrayList
            RangeCheck, readObject, removeRange, writeObject
             
            Methods inherited from class java.lang.Object
            , finalize, getClass, notify, notifyAll, registerNatives, wait, wait, wait
             

            Field Detail

            list

            protected java.util.ArrayList list
            Deprecated. 
            The underlying list we are managing.

            fast

            protected boolean fast
            Deprecated. 
            Are we operating in "fast" mode?
            Constructor Detail

            FastArrayList

            public FastArrayList()
            Deprecated. 
            Construct a an empty list.

            FastArrayList

            public FastArrayList(int capacity)
            Deprecated. 
            Construct an empty list with the specified capacity.
            Parameters:
            capacity - The initial capacity of the empty list

            FastArrayList

            public FastArrayList(java.util.Collection collection)
            Deprecated. 
            Construct a list containing the elements of the specified collection, in the order they are returned by the collection's iterator.
            Parameters:
            collection - The collection whose elements initialize the contents of this list
            Method Detail

            getFast

            public boolean getFast()
            Deprecated. 

            setFast

            public void setFast(boolean fast)
            Deprecated. 

            add

            public boolean add(java.lang.Object element)
            Deprecated. 
            Appends the specified element to the end of this list.
            Overrides:
            add in class java.util.ArrayList
            Parameters:
            element - The element to be appended

            add

            public void add(int index,
                            java.lang.Object element)
            Deprecated. 
            Insert the specified element at the specified position in this list, and shift all remaining elements up one position.
            Overrides:
            add in class java.util.ArrayList
            Parameters:
            index - Index at which to insert this element
            element - The element to be inserted
            Throws:
            java.lang.IndexOutOfBoundsException - if the index is out of range

            addAll

            public boolean addAll(java.util.Collection collection)
            Deprecated. 
            Append all of the elements in the specified Collection to the end of this list, in the order that they are returned by the specified Collection's Iterator.
            Overrides:
            addAll in class java.util.ArrayList
            Parameters:
            collection - The collection to be appended

            addAll

            public boolean addAll(int index,
                                  java.util.Collection collection)
            Deprecated. 
            Insert all of the elements in the specified Collection at the specified position in this list, and shift any previous elements upwards as needed.
            Overrides:
            addAll in class java.util.ArrayList
            Parameters:
            index - Index at which insertion takes place
            collection - The collection to be added
            Throws:
            java.lang.IndexOutOfBoundsException - if the index is out of range

            clear

            public void clear()
            Deprecated. 
            Remove all of the elements from this list. The list will be empty after this call returns.
            Overrides:
            clear in class java.util.ArrayList
            Throws:
            UnsupportedOperationException - if clear() is not supported by this list

            clone

            public java.lang.Object clone()
            Deprecated. 
            Return a shallow copy of this FastArrayList instance. The elements themselves are not copied.
            Overrides:
            clone in class java.util.ArrayList

            contains

            public boolean contains(java.lang.Object element)
            Deprecated. 
            Return true if this list contains the specified element.
            Overrides:
            contains in class java.util.ArrayList
            Parameters:
            element - The element to test for

            containsAll

            public boolean containsAll(java.util.Collection collection)
            Deprecated. 
            Return true if this list contains all of the elements in the specified Collection.
            Overrides:
            containsAll in class java.util.AbstractCollection
            Parameters:
            collection - Collection whose elements are to be checked

            ensureCapacity

            public void ensureCapacity(int capacity)
            Deprecated. 
            Increase the capacity of this ArrayList instance, if necessary, to ensure that it can hold at least the number of elements specified by the minimum capacity argument.
            Overrides:
            ensureCapacity in class java.util.ArrayList
            Parameters:
            capacity - The new minimum capacity

            equals

            public boolean equals(java.lang.Object o)
            Deprecated. 
            Compare the specified object with this list for equality. This implementation uses exactly the code that is used to define the list equals function in the documentation for the List.equals method.
            Overrides:
            equals in class java.util.AbstractList
            Parameters:
            o - Object to be compared to this list

            get

            public java.lang.Object get(int index)
            Deprecated. 
            Return the element at the specified position in the list.
            Overrides:
            get in class java.util.ArrayList
            Parameters:
            index - The index of the element to return
            Throws:
            java.lang.IndexOutOfBoundsException - if the index is out of range

            hashCode

            public int hashCode()
            Deprecated. 
            Return the hash code value for this list. This implementation uses exactly the code that is used to define the list hash function in the documentation for the List.hashCode method.
            Overrides:
            hashCode in class java.util.AbstractList

            indexOf

            public int indexOf(java.lang.Object element)
            Deprecated. 
            Search for the first occurrence of the given argument, testing for equality using the equals() method, and return the corresponding index, or -1 if the object is not found.
            Overrides:
            indexOf in class java.util.ArrayList
            Parameters:
            element - The element to search for

            isEmpty

            public boolean isEmpty()
            Deprecated. 
            Test if this list has no elements.
            Overrides:
            isEmpty in class java.util.ArrayList

            iterator

            public java.util.Iterator iterator()
            Deprecated. 
            Return an iterator over the elements in this list in proper sequence.

            IMPLEMENTATION NOTE - If the list is operating in fast mode, an Iterator is returned, and a structural modification to the list is made, then the Iterator will continue over the previous contents of the list (at the time that the Iterator was created), rather than failing due to concurrent modifications.
            Overrides:
            iterator in class java.util.AbstractList

            lastIndexOf

            public int lastIndexOf(java.lang.Object element)
            Deprecated. 
            Search for the last occurrence of the given argument, testing for equality using the equals() method, and return the corresponding index, or -1 if the object is not found.
            Overrides:
            lastIndexOf in class java.util.ArrayList
            Parameters:
            element - The element to search for

            listIterator

            public java.util.ListIterator listIterator()
            Deprecated. 
            Return an iterator of the elements of this list, in proper sequence. See the implementation note on iterator().
            Overrides:
            listIterator in class java.util.AbstractList

            listIterator

            public java.util.ListIterator listIterator(int index)
            Deprecated. 
            Return an iterator of the elements of this list, in proper sequence, starting at the specified position. See the implementation note on iterator().
            Overrides:
            listIterator in class java.util.AbstractList
            Parameters:
            index - The starting position of the iterator to return
            Throws:
            java.lang.IndexOutOfBoundsException - if the index is out of range

            remove

            public java.lang.Object remove(int index)
            Deprecated. 
            Remove the element at the specified position in the list, and shift any subsequent elements down one position.
            Overrides:
            remove in class java.util.ArrayList
            Parameters:
            index - Index of the element to be removed
            Throws:
            java.lang.IndexOutOfBoundsException - if the index is out of range

            remove

            public boolean remove(java.lang.Object element)
            Deprecated. 
            Remove the first occurrence of the specified element from the list, and shift any subsequent elements down one position.
            Overrides:
            remove in class java.util.AbstractCollection
            Parameters:
            element - Element to be removed

            removeAll

            public boolean removeAll(java.util.Collection collection)
            Deprecated. 
            Remove from this collection all of its elements that are contained in the specified collection.
            Overrides:
            removeAll in class java.util.AbstractCollection
            Parameters:
            collection - Collection containing elements to be removed
            Throws:
            UnsupportedOperationException - if this optional operation is not supported by this list

            retainAll

            public boolean retainAll(java.util.Collection collection)
            Deprecated. 
            Remove from this collection all of its elements except those that are contained in the specified collection.
            Overrides:
            retainAll in class java.util.AbstractCollection
            Parameters:
            collection - Collection containing elements to be retained
            Throws:
            UnsupportedOperationException - if this optional operation is not supported by this list

            set

            public java.lang.Object set(int index,
                                        java.lang.Object element)
            Deprecated. 
            Replace the element at the specified position in this list with the specified element. Returns the previous object at that position.

            IMPLEMENTATION NOTE - This operation is specifically documented to not be a structural change, so it is safe to be performed without cloning.
            Overrides:
            set in class java.util.ArrayList
            Parameters:
            index - Index of the element to replace
            element - The new element to be stored
            Throws:
            java.lang.IndexOutOfBoundsException - if the index is out of range

            size

            public int size()
            Deprecated. 
            Return the number of elements in this list.
            Overrides:
            size in class java.util.ArrayList

            subList

            public java.util.List subList(int fromIndex,
                                          int toIndex)
            Deprecated. 
            Return a view of the portion of this list between fromIndex (inclusive) and toIndex (exclusive). The returned list is backed by this list, so non-structural changes in the returned list are reflected in this list. The returned list supports all of the optional list operations supported by this list.
            Overrides:
            subList in class java.util.AbstractList
            Parameters:
            fromIndex - The starting index of the sublist view
            toIndex - The index after the end of the sublist view
            Throws:
            java.lang.IndexOutOfBoundsException - if an index is out of range

            toArray

            public java.lang.Object[] toArray()
            Deprecated. 
            Return an array containing all of the elements in this list in the correct order.
            Overrides:
            toArray in class java.util.ArrayList

            toArray

            public java.lang.Object[] toArray(java.lang.Object[] array)
            Deprecated. 
            Return an array containing all of the elements in this list in the correct order. The runtime type of the returned array is that of the specified array. If the list fits in the specified array, it is returned therein. Otherwise, a new array is allocated with the runtime type of the specified array, and the size of this list.
            Overrides:
            toArray in class java.util.ArrayList
            Parameters:
            array - Array defining the element type of the returned list
            Throws:
            ArrayStoreException - if the runtime type of array is not a supertype of the runtime type of every element in this list

            toString

            public java.lang.String toString()
            Deprecated. 
            Return a String representation of this object.
            Overrides:
            toString in class java.util.AbstractCollection

            trimToSize

            public void trimToSize()
            Deprecated. 
            Trim the capacity of this ArrayList instance to be the list's current size. An application can use this operation to minimize the storage of an ArrayList instance.
            Overrides:
            trimToSize in class java.util.ArrayList


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/util/FastHashMap.html0000644000175000017500000007220310404045172027354 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class FastHashMap

            org.apache.struts.util
            Class FastHashMap

            java.lang.Object
              |
              +--java.util.AbstractMap
                    |
                    +--java.util.HashMap
                          |
                          +--org.apache.struts.util.FastHashMap
            
            All Implemented Interfaces:
            java.lang.Cloneable, java.util.Map, java.io.Serializable

            Deprecated. At some point after Struts 1.0 final, will be replaced by an equivalent class in the Jakarta Commons Collections package.

            public class FastHashMap
            extends java.util.HashMap

            A customized implementation of java.util.HashMap designed to operate in a multithreaded environment where the large majority of method calls are read-only, instead of structural changes. When operating in "fast" mode, read calls are non-synchronized and write calls perform the following steps:

            • Clone the existing collection
            • Perform the modification on the clone
            • Replace the existing collection with the (modified) clone

            When first created, objects of this class default to "slow" mode, where all accesses of any type are synchronized but no cloning takes place. This is appropriate for initially populating the collection, followed by a switch to "fast" mode (by calling setFast(true)) after initialization is complete.

            NOTE: If you are creating and accessing a HashMap only within a single thread, you should use java.util.HashMap directly (with no synchronization), for maximum performance.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Inner classes inherited from class java.util.Map
            java.util.Map.Entry
             
            Field Summary
            protected  boolean fast
                      Deprecated. Are we operating in "fast" mode?
            protected  java.util.HashMap map
                      Deprecated. The underlying map we are managing.
             
            Fields inherited from class java.util.HashMap
            count, emptyHashIterator, ENTRIES, entrySet, KEYS, keySet, loadFactor, modCount, serialVersionUID, table, threshold, values, VALUES
             
            Constructor Summary
            FastHashMap()
                      Deprecated. Construct a an empty map.
            FastHashMap(int capacity)
                      Deprecated. Construct an empty map with the specified capacity.
            FastHashMap(int capacity, float factor)
                      Deprecated. Construct an empty map with the specified capacity and load factor.
            FastHashMap(java.util.Map map)
                      Deprecated. Construct a new map with the same mappings as the specified map.
             
            Method Summary
             void clear()
                      Deprecated. Remove all mappings from this map.
             java.lang.Object clone()
                      Deprecated. Return a shallow copy of this FastHashMap instance.
             boolean containsKey(java.lang.Object key)
                      Deprecated. Return true if this map contains a mapping for the specified key.
             boolean containsValue(java.lang.Object value)
                      Deprecated. Return true if this map contains one or more keys mapping to the specified value.
             java.util.Set entrySet()
                      Deprecated. Return a collection view of the mappings contained in this map.
             boolean equals(java.lang.Object o)
                      Deprecated. Compare the specified object with this list for equality.
             java.lang.Object get(java.lang.Object key)
                      Deprecated. Return the value to which this map maps the specified key.
             boolean getFast()
                      Deprecated.  
             int hashCode()
                      Deprecated. Return the hash code value for this map.
             boolean isEmpty()
                      Deprecated. Return true if this map contains no mappings.
             java.util.Set keySet()
                      Deprecated. Return a set view of the keys contained in this map.
             java.lang.Object put(java.lang.Object key, java.lang.Object value)
                      Deprecated. Associate the specified value with the specified key in this map.
             void putAll(java.util.Map in)
                      Deprecated. Copy all of the mappings from the specified map to this one, replacing any mappings with the same keys.
             java.lang.Object remove(java.lang.Object key)
                      Deprecated. Remove any mapping for this key, and return any previously mapped value.
             void setFast(boolean fast)
                      Deprecated.  
             int size()
                      Deprecated. Return the number of key-value mappings in this map.
             java.util.Collection values()
                      Deprecated. Return a collection view of the values contained in this map.
             
            Methods inherited from class java.util.HashMap
            , capacity, getHashIterator, loadFactor, readObject, rehash, writeObject
             
            Methods inherited from class java.util.AbstractMap
            toString
             
            Methods inherited from class java.lang.Object
            finalize, getClass, notify, notifyAll, registerNatives, wait, wait, wait
             

            Field Detail

            map

            protected java.util.HashMap map
            Deprecated. 
            The underlying map we are managing.

            fast

            protected boolean fast
            Deprecated. 
            Are we operating in "fast" mode?
            Constructor Detail

            FastHashMap

            public FastHashMap()
            Deprecated. 
            Construct a an empty map.

            FastHashMap

            public FastHashMap(int capacity)
            Deprecated. 
            Construct an empty map with the specified capacity.
            Parameters:
            capacity - The initial capacity of the empty map

            FastHashMap

            public FastHashMap(int capacity,
                               float factor)
            Deprecated. 
            Construct an empty map with the specified capacity and load factor.
            Parameters:
            capacity - The initial capacity of the empty map
            factor - The load factor of the new map

            FastHashMap

            public FastHashMap(java.util.Map map)
            Deprecated. 
            Construct a new map with the same mappings as the specified map.
            Parameters:
            map - The map whose mappings are to be copied
            Method Detail

            getFast

            public boolean getFast()
            Deprecated. 

            setFast

            public void setFast(boolean fast)
            Deprecated. 

            clear

            public void clear()
            Deprecated. 
            Remove all mappings from this map.
            Overrides:
            clear in class java.util.HashMap

            clone

            public java.lang.Object clone()
            Deprecated. 
            Return a shallow copy of this FastHashMap instance. The keys and values themselves are not copied.
            Overrides:
            clone in class java.util.HashMap

            containsKey

            public boolean containsKey(java.lang.Object key)
            Deprecated. 
            Return true if this map contains a mapping for the specified key.
            Overrides:
            containsKey in class java.util.HashMap
            Parameters:
            key - Key to be searched for

            containsValue

            public boolean containsValue(java.lang.Object value)
            Deprecated. 
            Return true if this map contains one or more keys mapping to the specified value.
            Overrides:
            containsValue in class java.util.HashMap
            Parameters:
            value - Value to be searched for

            entrySet

            public java.util.Set entrySet()
            Deprecated. 
            Return a collection view of the mappings contained in this map. Each element in the returned collection is a Map.Entry.
            Overrides:
            entrySet in class java.util.HashMap

            equals

            public boolean equals(java.lang.Object o)
            Deprecated. 
            Compare the specified object with this list for equality. This implementation uses exactly the code that is used to define the list equals function in the documentation for the Map.equals method.
            Overrides:
            equals in class java.util.AbstractMap
            Parameters:
            o - Object to be compared to this list

            get

            public java.lang.Object get(java.lang.Object key)
            Deprecated. 
            Return the value to which this map maps the specified key. Returns null if the map contains no mapping for this key, or if there is a mapping with a value of null. Use the containsKey() method to disambiguate these cases.
            Overrides:
            get in class java.util.HashMap
            Parameters:
            key - Key whose value is to be returned

            hashCode

            public int hashCode()
            Deprecated. 
            Return the hash code value for this map. This implementation uses exactly the code that is used to define the list hash function in the documentation for the Map.hashCode method.
            Overrides:
            hashCode in class java.util.AbstractMap

            isEmpty

            public boolean isEmpty()
            Deprecated. 
            Return true if this map contains no mappings.
            Overrides:
            isEmpty in class java.util.HashMap

            keySet

            public java.util.Set keySet()
            Deprecated. 
            Return a set view of the keys contained in this map.
            Overrides:
            keySet in class java.util.HashMap

            put

            public java.lang.Object put(java.lang.Object key,
                                        java.lang.Object value)
            Deprecated. 
            Associate the specified value with the specified key in this map. If the map previously contained a mapping for this key, the old value is replaced and returned.
            Overrides:
            put in class java.util.HashMap
            Parameters:
            key - The key with which the value is to be associated
            value - The value to be associated with this key

            putAll

            public void putAll(java.util.Map in)
            Deprecated. 
            Copy all of the mappings from the specified map to this one, replacing any mappings with the same keys.
            Overrides:
            putAll in class java.util.HashMap
            Parameters:
            in - Map whose mappings are to be copied

            remove

            public java.lang.Object remove(java.lang.Object key)
            Deprecated. 
            Remove any mapping for this key, and return any previously mapped value.
            Overrides:
            remove in class java.util.HashMap
            Parameters:
            key - Key whose mapping is to be removed

            size

            public int size()
            Deprecated. 
            Return the number of key-value mappings in this map.
            Overrides:
            size in class java.util.HashMap

            values

            public java.util.Collection values()
            Deprecated. 
            Return a collection view of the values contained in this map.
            Overrides:
            values in class java.util.HashMap


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/util/FastTreeMap.html0000644000175000017500000010732510404045216027373 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class FastTreeMap

            org.apache.struts.util
            Class FastTreeMap

            java.lang.Object
              |
              +--java.util.AbstractMap
                    |
                    +--java.util.TreeMap
                          |
                          +--org.apache.struts.util.FastTreeMap
            
            All Implemented Interfaces:
            java.lang.Cloneable, java.util.Map, java.io.Serializable, java.util.SortedMap

            Deprecated. At some point after Struts 1.0 final, will be replaced by an equivalent class in the Jakarta Commons Collections package.

            public class FastTreeMap
            extends java.util.TreeMap

            A customized implementation of java.util.TreeMap designed to operate in a multithreaded environment where the large majority of method calls are read-only, instead of structural changes. When operating in "fast" mode, read calls are non-synchronized and write calls perform the following steps:

            • Clone the existing collection
            • Perform the modification on the clone
            • Replace the existing collection with the (modified) clone

            When first created, objects of this class default to "slow" mode, where all accesses of any type are synchronized but no cloning takes place. This is appropriate for initially populating the collection, followed by a switch to "fast" mode (by calling setFast(true)) after initialization is complete.

            NOTE: If you are creating and accessing a TreeMap only within a single thread, you should use java.util.TreeMap directly (with no synchronization), for maximum performance.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Inner classes inherited from class java.util.TreeMap
            java.util.TreeMap.Entry
             
            Inner classes inherited from class java.util.Map
            java.util.Map.Entry
             
            Field Summary
            protected  boolean fast
                      Deprecated. Are we operating in "fast" mode?
            protected  java.util.TreeMap map
                      Deprecated. The underlying map we are managing.
             
            Fields inherited from class java.util.TreeMap
            BLACK, comparator, ENTRIES, entrySet, KEYS, keySet, modCount, RED, root, serialVersionUID, size, values, VALUES
             
            Constructor Summary
            FastTreeMap()
                      Deprecated. Construct a an empty map.
            FastTreeMap(java.util.Comparator comparator)
                      Deprecated. Construct an empty map with the specified comparator.
            FastTreeMap(java.util.Map map)
                      Deprecated. Construct a new map with the same mappings as the specified map, sorted according to the keys's natural order
            FastTreeMap(java.util.SortedMap map)
                      Deprecated. Construct a new map with the same mappings as the specified map, sorted according to the same ordering
             
            Method Summary
             void clear()
                      Deprecated. Remove all mappings from this map.
             java.lang.Object clone()
                      Deprecated. Return a shallow copy of this FastTreeMap instance.
             java.util.Comparator comparator()
                      Deprecated. Return the comparator used to order this map, or null if this map uses its keys' natural order.
             boolean containsKey(java.lang.Object key)
                      Deprecated. Return true if this map contains a mapping for the specified key.
             boolean containsValue(java.lang.Object value)
                      Deprecated. Return true if this map contains one or more keys mapping to the specified value.
             java.util.Set entrySet()
                      Deprecated. Return a collection view of the mappings contained in this map.
             boolean equals(java.lang.Object o)
                      Deprecated. Compare the specified object with this list for equality.
             java.lang.Object firstKey()
                      Deprecated. Return the first (lowest) key currently in this sorted map.
             java.lang.Object get(java.lang.Object key)
                      Deprecated. Return the value to which this map maps the specified key.
             boolean getFast()
                      Deprecated.  
             int hashCode()
                      Deprecated. Return the hash code value for this map.
             java.util.SortedMap headMap(java.lang.Object key)
                      Deprecated. Return a view of the portion of this map whose keys are strictly less than the specified key.
             boolean isEmpty()
                      Deprecated. Test if this list has no elements.
             java.util.Set keySet()
                      Deprecated. Return a set view of the keys contained in this map.
             java.lang.Object lastKey()
                      Deprecated. Return the last (highest) key currently in this sorted map.
             java.lang.Object put(java.lang.Object key, java.lang.Object value)
                      Deprecated. Associate the specified value with the specified key in this map.
             void putAll(java.util.Map in)
                      Deprecated. Copy all of the mappings from the specified map to this one, replacing any mappings with the same keys.
             java.lang.Object remove(java.lang.Object key)
                      Deprecated. Remove any mapping for this key, and return any previously mapped value.
             void setFast(boolean fast)
                      Deprecated.  
             int size()
                      Deprecated. Return the number of key-value mappings in this map.
             java.util.SortedMap subMap(java.lang.Object fromKey, java.lang.Object toKey)
                      Deprecated. Return a view of the portion of this map whose keys are in the range fromKey (inclusive) to toKey (exclusive).
             java.util.SortedMap tailMap(java.lang.Object key)
                      Deprecated. Return a view of the portion of this map whose keys are greater than or equal to the specified key.
             java.util.Collection values()
                      Deprecated. Return a collection view of the values contained in this map.
             
            Methods inherited from class java.util.TreeMap
            addAllForTreeSet, buildFromSorted, buildFromSorted, colorOf, compare, computeRedLevel, decrementSize, deleteEntry, firstEntry, fixAfterDeletion, fixAfterInsertion, getCeilEntry, getEntry, getPrecedingEntry, incrementSize, key, lastEntry, leftOf, parentOf, readObject, readTreeSet, rightOf, rotateLeft, rotateRight, setColor, successor, swapPosition, valEquals, valueSearchNonNull, valueSearchNull, writeObject
             
            Methods inherited from class java.util.AbstractMap
            toString
             
            Methods inherited from class java.lang.Object
            , finalize, getClass, notify, notifyAll, registerNatives, wait, wait, wait
             

            Field Detail

            map

            protected java.util.TreeMap map
            Deprecated. 
            The underlying map we are managing.

            fast

            protected boolean fast
            Deprecated. 
            Are we operating in "fast" mode?
            Constructor Detail

            FastTreeMap

            public FastTreeMap()
            Deprecated. 
            Construct a an empty map.

            FastTreeMap

            public FastTreeMap(java.util.Comparator comparator)
            Deprecated. 
            Construct an empty map with the specified comparator.
            Parameters:
            comparator - The comparator to use for ordering tree elements

            FastTreeMap

            public FastTreeMap(java.util.Map map)
            Deprecated. 
            Construct a new map with the same mappings as the specified map, sorted according to the keys's natural order
            Parameters:
            map - The map whose mappings are to be copied

            FastTreeMap

            public FastTreeMap(java.util.SortedMap map)
            Deprecated. 
            Construct a new map with the same mappings as the specified map, sorted according to the same ordering
            Parameters:
            map - The map whose mappings are to be copied
            Method Detail

            getFast

            public boolean getFast()
            Deprecated. 

            setFast

            public void setFast(boolean fast)
            Deprecated. 

            clear

            public void clear()
            Deprecated. 
            Remove all mappings from this map.
            Overrides:
            clear in class java.util.TreeMap

            clone

            public java.lang.Object clone()
            Deprecated. 
            Return a shallow copy of this FastTreeMap instance. The keys and values themselves are not copied.
            Overrides:
            clone in class java.util.TreeMap

            comparator

            public java.util.Comparator comparator()
            Deprecated. 
            Return the comparator used to order this map, or null if this map uses its keys' natural order.
            Overrides:
            comparator in class java.util.TreeMap

            containsKey

            public boolean containsKey(java.lang.Object key)
            Deprecated. 
            Return true if this map contains a mapping for the specified key.
            Overrides:
            containsKey in class java.util.TreeMap
            Parameters:
            key - Key to be searched for

            containsValue

            public boolean containsValue(java.lang.Object value)
            Deprecated. 
            Return true if this map contains one or more keys mapping to the specified value.
            Overrides:
            containsValue in class java.util.TreeMap
            Parameters:
            value - Value to be searched for

            entrySet

            public java.util.Set entrySet()
            Deprecated. 
            Return a collection view of the mappings contained in this map. Each element in the returned collection is a Map.Entry.
            Overrides:
            entrySet in class java.util.TreeMap

            equals

            public boolean equals(java.lang.Object o)
            Deprecated. 
            Compare the specified object with this list for equality. This implementation uses exactly the code that is used to define the list equals function in the documentation for the Map.equals method.
            Overrides:
            equals in class java.util.AbstractMap
            Parameters:
            o - Object to be compared to this list

            firstKey

            public java.lang.Object firstKey()
            Deprecated. 
            Return the first (lowest) key currently in this sorted map.
            Overrides:
            firstKey in class java.util.TreeMap

            get

            public java.lang.Object get(java.lang.Object key)
            Deprecated. 
            Return the value to which this map maps the specified key. Returns null if the map contains no mapping for this key, or if there is a mapping with a value of null. Use the containsKey() method to disambiguate these cases.
            Overrides:
            get in class java.util.TreeMap
            Parameters:
            key - Key whose value is to be returned

            hashCode

            public int hashCode()
            Deprecated. 
            Return the hash code value for this map. This implementation uses exactly the code that is used to define the list hash function in the documentation for the Map.hashCode method.
            Overrides:
            hashCode in class java.util.AbstractMap

            headMap

            public java.util.SortedMap headMap(java.lang.Object key)
            Deprecated. 
            Return a view of the portion of this map whose keys are strictly less than the specified key.
            Overrides:
            headMap in class java.util.TreeMap
            Parameters:
            key - Key higher than any in the returned map

            isEmpty

            public boolean isEmpty()
            Deprecated. 
            Test if this list has no elements.
            Overrides:
            isEmpty in class java.util.AbstractMap

            keySet

            public java.util.Set keySet()
            Deprecated. 
            Return a set view of the keys contained in this map.
            Overrides:
            keySet in class java.util.TreeMap

            lastKey

            public java.lang.Object lastKey()
            Deprecated. 
            Return the last (highest) key currently in this sorted map.
            Overrides:
            lastKey in class java.util.TreeMap

            put

            public java.lang.Object put(java.lang.Object key,
                                        java.lang.Object value)
            Deprecated. 
            Associate the specified value with the specified key in this map. If the map previously contained a mapping for this key, the old value is replaced and returned.
            Overrides:
            put in class java.util.TreeMap
            Parameters:
            key - The key with which the value is to be associated
            value - The value to be associated with this key

            putAll

            public void putAll(java.util.Map in)
            Deprecated. 
            Copy all of the mappings from the specified map to this one, replacing any mappings with the same keys.
            Overrides:
            putAll in class java.util.TreeMap
            Parameters:
            in - Map whose mappings are to be copied

            remove

            public java.lang.Object remove(java.lang.Object key)
            Deprecated. 
            Remove any mapping for this key, and return any previously mapped value.
            Overrides:
            remove in class java.util.TreeMap
            Parameters:
            key - Key whose mapping is to be removed

            size

            public int size()
            Deprecated. 
            Return the number of key-value mappings in this map.
            Overrides:
            size in class java.util.TreeMap

            subMap

            public java.util.SortedMap subMap(java.lang.Object fromKey,
                                              java.lang.Object toKey)
            Deprecated. 
            Return a view of the portion of this map whose keys are in the range fromKey (inclusive) to toKey (exclusive).
            Overrides:
            subMap in class java.util.TreeMap
            Parameters:
            fromKey - Lower limit of keys for the returned map
            toKey - Upper limit of keys for the returned map

            tailMap

            public java.util.SortedMap tailMap(java.lang.Object key)
            Deprecated. 
            Return a view of the portion of this map whose keys are greater than or equal to the specified key.
            Overrides:
            tailMap in class java.util.TreeMap
            Parameters:
            key - Key less than or equal to any in the returned map

            values

            public java.util.Collection values()
            Deprecated. 
            Return a collection view of the values contained in this map.
            Overrides:
            values in class java.util.TreeMap


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/util/GenericConnection.html0000644000175000017500000012462410404045236030617 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class GenericConnection

            org.apache.struts.util
            Class GenericConnection

            java.lang.Object
              |
              +--org.apache.struts.util.GenericConnection
            
            All Implemented Interfaces:
            java.sql.Connection

            public class GenericConnection
            extends java.lang.Object
            implements java.sql.Connection

            Generic wrapper implementation of a Connection that works with GenericDataSource to wrap connections for any JDBC driver.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan, Ted Husted

            Field Summary
            protected  boolean autoCommit
                      The initial auto-commit state to which we should return after release.
            protected  java.lang.String catalog
                      The initial catalog to which we should return after release.
            private  boolean closed
                      The closed flag for this wrapped connection.
            protected  java.sql.Connection conn
                      The Connection that is being wrapped.
            protected  int level
                      The initial transaction isolation level to which we should return after release.
            protected  java.util.Map map
                      The initial type map to which we should return after release.
            protected  boolean readOnly
                      The initial read-only state to which we should return after release.
            protected  GenericDataSource source
                      The GenericDataSource that owns this connection.
            private static java.lang.String SQLEXCEPTION_CLOSED
                       
             
            Fields inherited from interface java.sql.Connection
            TRANSACTION_NONE, TRANSACTION_READ_COMMITTED, TRANSACTION_READ_UNCOMMITTED, TRANSACTION_REPEATABLE_READ, TRANSACTION_SERIALIZABLE
             
            Constructor Summary
            GenericConnection(GenericDataSource source, java.sql.Connection conn, boolean autoCommit, boolean readOnly)
                      Construct a new GenericConnection wrapping the specified connection.
             
            Method Summary
             void clearWarnings()
                      Clear all warnings reported for this Connection.
             void close()
                      Return this wrapped Connection to our data source connection pool.
             void commit()
                      Make all changes made since the previous commit or rollback permanent, and releases any database locks currently held.
             java.sql.Statement createStatement()
                      Create a Statement for sending SQL statements to the database.
             java.sql.Statement createStatement(int resultSetType, int resultSetConcurrency)
                      (JDBC 2.0) Create a Statement that will create a ResultSet of the specified type and concurrency.
             boolean getAutoCommit()
                      Return the current auto-commit state.
             java.lang.String getCatalog()
                      Return the current catalog name for this Connection.
            (package private)  java.sql.Connection getConnection()
                      Return the actual connection that we are wrapping.
            (package private)  javax.sql.DataSource getDataSource()
                      Return the data source that owns this connection.
             java.sql.DatabaseMetaData getMetaData()
                      Get the metadata regarding this connection's database.
             int getTransactionIsolation()
                      Return this Connection's current transaction isolation level.
             java.util.Map getTypeMap()
                      (JDBC 2.0) Return the type map for this connection.
             java.sql.SQLWarning getWarnings()
                      Return the first warning reported by calls to this Connection.
             boolean isClosed()
                      Return true if this Connection is closed.
             boolean isReadOnly()
                      Return true if this Connection is in read-only mode.
             java.lang.String nativeSQL(java.lang.String sql)
                      Convert the given SQL statement into the system's native SQL grammer.
             java.sql.CallableStatement prepareCall(java.lang.String sql)
                      Create a CallableStatement object for calling database stored procedures.
             java.sql.CallableStatement prepareCall(java.lang.String sql, int resultSetType, int resultSetConcurrency)
                      (JDBC 2.0) Create a CallableStatement object that will generate ResultSet objects with the given type and concurrency.
             java.sql.PreparedStatement prepareStatement(java.lang.String sql)
                      Create a PreparedStatement object for sending parameterized SQL statements to the database.
             java.sql.PreparedStatement prepareStatement(java.lang.String sql, int resultSetType, int resultSetConcurrency)
                      (JDBC 2.0) Create a PreparedStatement object that will generate ResultSet objects with the given type and concurrency.
             void rollback()
                      Drop all changes made since the previous commit or rollback.
             void setAutoCommit(boolean autoCommit)
                      Sets this connection's auto-commit mode.
             void setCatalog(java.lang.String catalog)
                      Set the catalog name for this Connection.
            (package private)  void setClosed(boolean closed)
                      Set the closed status of this connection wrapper.
             void setReadOnly(boolean readOnly)
                      Set the read-only mode of this connection.
             void setTransactionIsolation(int level)
                      Set the transaction isolation level for this Connection.
             void setTypeMap(java.util.Map map)
                      (JDBC 2.0) Set the type map for this connection.
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            SQLEXCEPTION_CLOSED

            private static final java.lang.String SQLEXCEPTION_CLOSED

            autoCommit

            protected boolean autoCommit
            The initial auto-commit state to which we should return after release.

            catalog

            protected java.lang.String catalog
            The initial catalog to which we should return after release.

            closed

            private boolean closed
            The closed flag for this wrapped connection.

            conn

            protected java.sql.Connection conn
            The Connection that is being wrapped.

            level

            protected int level
            The initial transaction isolation level to which we should return after release.

            map

            protected java.util.Map map
            The initial type map to which we should return after release.

            readOnly

            protected boolean readOnly
            The initial read-only state to which we should return after release.

            source

            protected GenericDataSource source
            The GenericDataSource that owns this connection.
            Constructor Detail

            GenericConnection

            public GenericConnection(GenericDataSource source,
                                     java.sql.Connection conn,
                                     boolean autoCommit,
                                     boolean readOnly)
                              throws java.sql.SQLException
            Construct a new GenericConnection wrapping the specified connection.
            Parameters:
            source - The data source that owns this connection
            conn - The connection to wrap
            autoCommit - Desired auto-commit state for this connection
            readOnly - Desired read-only state for this connection
            Throws:
            java.sql.SQLException - if an SQL processing error occurs
            Method Detail

            clearWarnings

            public void clearWarnings()
                               throws java.sql.SQLException
            Clear all warnings reported for this Connection.
            Specified by:
            clearWarnings in interface java.sql.Connection
            Throws:
            java.sql.SQLException - if a database access error occurs

            close

            public void close()
                       throws java.sql.SQLException
            Return this wrapped Connection to our data source connection pool.
            Specified by:
            close in interface java.sql.Connection
            Throws:
            java.sql.SQLException - if a database access error occurs

            commit

            public void commit()
                        throws java.sql.SQLException
            Make all changes made since the previous commit or rollback permanent, and releases any database locks currently held.
            Specified by:
            commit in interface java.sql.Connection
            Throws:
            java.sql.SQLException - if a database access error occurs

            createStatement

            public java.sql.Statement createStatement()
                                               throws java.sql.SQLException
            Create a Statement for sending SQL statements to the database.
            Specified by:
            createStatement in interface java.sql.Connection
            Throws:
            java.sql.SQLException - if a database access error occurs

            createStatement

            public java.sql.Statement createStatement(int resultSetType,
                                                      int resultSetConcurrency)
                                               throws java.sql.SQLException
            (JDBC 2.0) Create a Statement that will create a ResultSet of the specified type and concurrency.
            Specified by:
            createStatement in interface java.sql.Connection
            Parameters:
            resultSetType - A result set type
            resultSetConcurrency - A result set concurrency
            Throws:
            java.sql.SQLException - if a database access error occurs

            getAutoCommit

            public boolean getAutoCommit()
                                  throws java.sql.SQLException
            Return the current auto-commit state.
            Specified by:
            getAutoCommit in interface java.sql.Connection
            Throws:
            java.sql.SQLException - if a database access error occurs

            getCatalog

            public java.lang.String getCatalog()
                                        throws java.sql.SQLException
            Return the current catalog name for this Connection.
            Specified by:
            getCatalog in interface java.sql.Connection
            Throws:
            java.sql.SQLException - if a database access error occurs

            getMetaData

            public java.sql.DatabaseMetaData getMetaData()
                                                  throws java.sql.SQLException
            Get the metadata regarding this connection's database.
            Specified by:
            getMetaData in interface java.sql.Connection
            Throws:
            java.sql.SQLException - if a database access error occurs

            getTransactionIsolation

            public int getTransactionIsolation()
                                        throws java.sql.SQLException
            Return this Connection's current transaction isolation level.
            Specified by:
            getTransactionIsolation in interface java.sql.Connection
            Throws:
            java.sql.SQLException - if a database access error occurs

            getTypeMap

            public java.util.Map getTypeMap()
                                     throws java.sql.SQLException
            (JDBC 2.0) Return the type map for this connection.
            Specified by:
            getTypeMap in interface java.sql.Connection
            Throws:
            java.sql.SQLException - if a database access error occurs

            getWarnings

            public java.sql.SQLWarning getWarnings()
                                            throws java.sql.SQLException
            Return the first warning reported by calls to this Connection.
            Specified by:
            getWarnings in interface java.sql.Connection
            Throws:
            java.sql.SQLException - if a database access error occurs

            isClosed

            public boolean isClosed()
                             throws java.sql.SQLException
            Return true if this Connection is closed. The GenericConnection.isClosed() method is only guaranteed to return true after GenericConnection.closed() has been called. This method cannot be called, in general, to determine if a database connection is valid or invalid. A typical JDBC client can determine that a connection is invalid by catching the exception that is thrown when a JDBC operation is attempted.
            Specified by:
            isClosed in interface java.sql.Connection
            Throws:
            java.sql.SQLException - if a database access error occurs

            isReadOnly

            public boolean isReadOnly()
                               throws java.sql.SQLException
            Return true if this Connection is in read-only mode.
            Specified by:
            isReadOnly in interface java.sql.Connection
            Throws:
            java.sql.SQLException - if a database access error occurs

            nativeSQL

            public java.lang.String nativeSQL(java.lang.String sql)
                                       throws java.sql.SQLException
            Convert the given SQL statement into the system's native SQL grammer.
            Specified by:
            nativeSQL in interface java.sql.Connection
            Parameters:
            sql - Statement to be processed

            prepareCall

            public java.sql.CallableStatement prepareCall(java.lang.String sql)
                                                   throws java.sql.SQLException
            Create a CallableStatement object for calling database stored procedures.
            Specified by:
            prepareCall in interface java.sql.Connection
            Parameters:
            sql - Statement to be processed
            Throws:
            java.sql.SQLException - if a database access error occurs

            prepareCall

            public java.sql.CallableStatement prepareCall(java.lang.String sql,
                                                          int resultSetType,
                                                          int resultSetConcurrency)
                                                   throws java.sql.SQLException
            (JDBC 2.0) Create a CallableStatement object that will generate ResultSet objects with the given type and concurrency.
            Specified by:
            prepareCall in interface java.sql.Connection
            Parameters:
            sql - Statement to be processed
            resultSetType - A result set type
            resultSetConcurrency - A result set concurrency
            Throws:
            java.sql.SQLException - if a database access error occurs

            prepareStatement

            public java.sql.PreparedStatement prepareStatement(java.lang.String sql)
                                                        throws java.sql.SQLException
            Create a PreparedStatement object for sending parameterized SQL statements to the database.
            Specified by:
            prepareStatement in interface java.sql.Connection
            Parameters:
            sql - Statement to be processed
            Throws:
            java.sql.SQLException - if a database access error occurs

            prepareStatement

            public java.sql.PreparedStatement prepareStatement(java.lang.String sql,
                                                               int resultSetType,
                                                               int resultSetConcurrency)
                                                        throws java.sql.SQLException
            (JDBC 2.0) Create a PreparedStatement object that will generate ResultSet objects with the given type and concurrency.
            Specified by:
            prepareStatement in interface java.sql.Connection
            Parameters:
            sql - Statement to be processed
            resultSetType - A result set type
            resultSetConcurrency - A result set concurrency
            Throws:
            java.sql.SQLException - if a database access error occurs

            rollback

            public void rollback()
                          throws java.sql.SQLException
            Drop all changes made since the previous commit or rollback.
            Specified by:
            rollback in interface java.sql.Connection
            Throws:
            java.sql.SQLException - if a database access error occurs

            setAutoCommit

            public void setAutoCommit(boolean autoCommit)
                               throws java.sql.SQLException
            Sets this connection's auto-commit mode.
            Specified by:
            setAutoCommit in interface java.sql.Connection
            Parameters:
            autoCommit - The new auto-commit mode.
            Throws:
            java.sql.SQLException - if a database access error occurs

            setCatalog

            public void setCatalog(java.lang.String catalog)
                            throws java.sql.SQLException
            Set the catalog name for this Connection.
            Specified by:
            setCatalog in interface java.sql.Connection
            Parameters:
            catalog - The new catalog name
            Throws:
            java.sql.SQLException - if a database access error occurs

            setReadOnly

            public void setReadOnly(boolean readOnly)
                             throws java.sql.SQLException
            Set the read-only mode of this connection.
            Specified by:
            setReadOnly in interface java.sql.Connection
            Parameters:
            readOnly - The new read-only mode
            Throws:
            java.sql.SQLException - if a database access error occurs

            setTransactionIsolation

            public void setTransactionIsolation(int level)
                                         throws java.sql.SQLException
            Set the transaction isolation level for this Connection.
            Specified by:
            setTransactionIsolation in interface java.sql.Connection
            Parameters:
            level - The new transaction isolation level
            Throws:
            java.sql.SQLException - if a database access error occurs

            setTypeMap

            public void setTypeMap(java.util.Map map)
                            throws java.sql.SQLException
            (JDBC 2.0) Set the type map for this connection.
            Specified by:
            setTypeMap in interface java.sql.Connection
            Parameters:
            map - The new type map
            Throws:
            java.sql.SQLException - if a database access error occurs

            getConnection

            java.sql.Connection getConnection()
            Return the actual connection that we are wrapping.

            getDataSource

            javax.sql.DataSource getDataSource()
            Return the data source that owns this connection.

            setClosed

            void setClosed(boolean closed)
            Set the closed status of this connection wrapper. Would usually only be called by the owning DataSource (source), with setClosed(false), when a pooled connection is being recycled.


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/util/GenericDataSource.html0000644000175000017500000015250410404045234030546 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class GenericDataSource

            org.apache.struts.util
            Class GenericDataSource

            java.lang.Object
              |
              +--org.apache.struts.util.GenericDataSource
            
            All Implemented Interfaces:
            javax.sql.DataSource

            public class GenericDataSource
            extends java.lang.Object
            implements javax.sql.DataSource

            Generic data source implementation of the DataSource interface. WARNING - This implementation does not know how to provide connections with different username/password combinations. Calling this version of the implementation using the getConnection(username,password) signature will throw an exception.

            The following properties are supported by the standard GenericDataSource implementation:

            Property Description
            autoCommit Set to true if you want the connections returned to you by calling getConnection() to be configured in "auto-commit after every statement" mode. The default value is true, to conform to JDBC standard conventions.
            description A short textual description of this data source. This property is required by the javax.sql.DataSource interface, but is not used within this implementation.
            driverClass The fully qualified class name of the JDBC driver to be utilized for the connections created by this data source. Consult the documentation for your JDBC driver to identify the value to be configured for this property.
            maxCount The maximum number of JDBC connections that will be created by this data source. This value must be greater than or equal to the value specified for the minCount property.
            minCount The minimum number of JDBC connections to establish when this data source is first opened. This value must be less than or equal to the value specified for the maxCount property.
            password The database password used to establish the connections created by this connection pool, in conjunction with the username specified in the user property.
            pingCommand A non-query SQL command that, if specified, will be executed before a connection is returned by a call to getConnection(). If any SQLException is thrown by the execution of this statement, it is assumed that this connection is stale and it will be discarded. Because this happens on every connection allocation, you should ensure that the statement executes very quickly.
            pingQuery A query SQL command (i.e. a SELECT) that, if specified, will be executed before a connection is returned by a call to getConnection(). If any SQLException is thrown by the execution of this query (or by the subsequent processing of the entire returned ResultSet), it is assumed that this connection is stale and it will be discarded. Because this happens on every connection allocation, you should ensure that the statement executes very quickly.
            readOnly Set to true if you want the connections returned to you by calling getConnection() to be configured for read only operations. This can result in more efficient database access, because the database will know it does not need to retain undo logs for rolling back the transaction. The default value is false.
            url The connection URL to be passed to our JDBC driver when establishing a new connection. The value specified typically starts with jdbc:, and includes a reference to the host (and, optionally, the port number) at which the database server is listening for connections, plus the name of the database to be opened. Consult the documentation for your JDBC driver to identify the value to be configured for this property.
            user The database username used to establish the connections created by this connection pool, in conjunction with the password specified in the password property.

            In addition, you can add to the set of Properties passed to the JDBC driver by calling addProperty().

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan, Ted Husted

            Field Summary
            protected  int activeCount
                      The number of connections that have been created by this data source.
            protected  boolean autoCommit
                      The default auto-commit state for newly created connections.
            protected  boolean closed
                      Has this data source been closed?
            protected  java.util.LinkedList connections
                      The list of Connections (wrapped in our associated wrapper class) that have been created but are not currently in use.
            protected  int debug
                      The debugging detail level for this data source.
            protected  java.lang.String description
                      The description of this data source.
            protected  java.sql.Driver driver
                      The JDBC driver that we use as a connection factory.
            protected  java.lang.String driverClass
                      The Java class name of the JDBC driver to use.
            protected  int loginTimeout
                      The login timeout for this data source.
            protected  java.io.PrintWriter logWriter
                      The log writer for this data source.
            protected  int maxCount
                      The maximum number of connections to be created.
            protected  int minCount
                      The minimum number of connections to be created.
            protected  java.lang.String password
                      The database password for use in establishing a connection.
            protected  java.lang.String pingCommand
                      The non-query SQL command used to ping an allocated connection.
            protected  java.lang.String pingQuery
                      The query SQL command used to ping an allocated connection.
            protected  java.util.Properties properties
                      The connection properties for use in establishing connections.
            protected  boolean readOnly
                      The default read-only state for newly created connections.
            private static java.lang.String SQLEXCEPTION_GETCONNECTION
                       
            protected  java.lang.String url
                      The JDBC URL for the database connection to be opened.
            protected  int useCount
                      The number of connections created by this data source that are currently in use.
            protected  java.lang.String user
                      The database username for use in establishing a connection.
             
            Constructor Summary
            GenericDataSource()
                       
             
            Method Summary
             void addProperty(java.lang.String name, java.lang.String value)
                      Add a generic property to the list of connection properties to be used.
             void close()
                      Close all connections that have been created by this data source.
            protected  java.sql.Connection createConnection()
                      Create, configure, and return a new JDBC Connection that has been wrapped in our corresponding wrapper.
             int getActiveCount()
                       
             boolean getAutoCommit()
                       
             java.sql.Connection getConnection()
                      Attempt to establish a database connection.
             java.sql.Connection getConnection(java.lang.String username, java.lang.String password)
                      Attempt to establish a database connection.
             int getDebug()
                       
             java.lang.String getDescription()
                       
             java.lang.String getDriverClass()
                       
             int getLoginTimeout()
                      Return the login timeout for this data source.
             java.io.PrintWriter getLogWriter()
                      Return the log writer for this data source.
             int getMaxCount()
                       
             int getMinCount()
                       
             java.lang.String getPassword()
                       
             java.lang.String getPingCommand()
                       
             java.lang.String getPingQuery()
                       
             boolean getReadOnly()
                       
             java.lang.String getUrl()
                       
             int getUseCount()
                       
             java.lang.String getUser()
                       
            protected  void log(java.lang.String message)
                      Log the specified message to our log writer, if we have one.
            protected  void log(java.lang.String message, java.lang.Throwable throwable)
                      Log the specified message and exception to our log writer, if we have one.
             void open()
                      Open the initial connections that are appropriate for this data source.
            protected  void ping(java.sql.Connection conn)
                      Perform any configured pingCommand and/or pingQuery on the specified connection, returning any SQLException that is encountered along the way.
            (package private)  void returnConnection(GenericConnection conn)
                      Return this connection to the available connection pool.
             void setAutoCommit(boolean autoCommit)
                       
             void setDebug(int debug)
                       
             void setDescription(java.lang.String description)
                       
             void setDriverClass(java.lang.String driverClass)
                       
             void setLoginTimeout(int loginTimeout)
                      Set the login timeout for this data source.
             void setLogWriter(java.io.PrintWriter logWriter)
                      Set the log writer for this data source.
             void setMaxCount(int maxCount)
                       
             void setMinCount(int minCount)
                       
             void setPassword(java.lang.String password)
                       
             void setPingCommand(java.lang.String pingCommand)
                       
             void setPingQuery(java.lang.String pingQuery)
                       
             void setReadOnly(boolean readOnly)
                       
             void setUrl(java.lang.String url)
                       
             void setUser(java.lang.String user)
                       
             java.lang.String toString()
                      Return a string representation of this component.
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, wait, wait, wait
             

            Field Detail

            SQLEXCEPTION_GETCONNECTION

            private static final java.lang.String SQLEXCEPTION_GETCONNECTION

            closed

            protected boolean closed
            Has this data source been closed?

            connections

            protected java.util.LinkedList connections
            The list of Connections (wrapped in our associated wrapper class) that have been created but are not currently in use.

            driver

            protected java.sql.Driver driver
            The JDBC driver that we use as a connection factory.

            loginTimeout

            protected int loginTimeout
            The login timeout for this data source.

            logWriter

            protected java.io.PrintWriter logWriter
            The log writer for this data source.

            activeCount

            protected int activeCount
            The number of connections that have been created by this data source.

            autoCommit

            protected boolean autoCommit
            The default auto-commit state for newly created connections.

            debug

            protected int debug
            The debugging detail level for this data source.

            description

            protected java.lang.String description
            The description of this data source.

            driverClass

            protected java.lang.String driverClass
            The Java class name of the JDBC driver to use.

            maxCount

            protected int maxCount
            The maximum number of connections to be created.

            minCount

            protected int minCount
            The minimum number of connections to be created.

            password

            protected java.lang.String password
            The database password for use in establishing a connection.

            pingCommand

            protected java.lang.String pingCommand
            The non-query SQL command used to ping an allocated connection.

            pingQuery

            protected java.lang.String pingQuery
            The query SQL command used to ping an allocated connection.

            properties

            protected java.util.Properties properties
            The connection properties for use in establishing connections.

            readOnly

            protected boolean readOnly
            The default read-only state for newly created connections.

            url

            protected java.lang.String url
            The JDBC URL for the database connection to be opened.

            useCount

            protected int useCount
            The number of connections created by this data source that are currently in use.

            user

            protected java.lang.String user
            The database username for use in establishing a connection.
            Constructor Detail

            GenericDataSource

            public GenericDataSource()
            Method Detail

            addProperty

            public void addProperty(java.lang.String name,
                                    java.lang.String value)
            Add a generic property to the list of connection properties to be used.
            Parameters:
            name - Name of the generic property
            value - Corresponding generic property value

            getActiveCount

            public int getActiveCount()

            getAutoCommit

            public boolean getAutoCommit()

            setAutoCommit

            public void setAutoCommit(boolean autoCommit)

            getDebug

            public int getDebug()

            setDebug

            public void setDebug(int debug)

            getDescription

            public java.lang.String getDescription()

            setDescription

            public void setDescription(java.lang.String description)

            getDriverClass

            public java.lang.String getDriverClass()

            setDriverClass

            public void setDriverClass(java.lang.String driverClass)

            getMaxCount

            public int getMaxCount()

            setMaxCount

            public void setMaxCount(int maxCount)

            getMinCount

            public int getMinCount()

            setMinCount

            public void setMinCount(int minCount)

            getPassword

            public java.lang.String getPassword()

            setPassword

            public void setPassword(java.lang.String password)

            getPingCommand

            public java.lang.String getPingCommand()

            setPingCommand

            public void setPingCommand(java.lang.String pingCommand)

            getPingQuery

            public java.lang.String getPingQuery()

            setPingQuery

            public void setPingQuery(java.lang.String pingQuery)

            getReadOnly

            public boolean getReadOnly()

            setReadOnly

            public void setReadOnly(boolean readOnly)

            getUrl

            public java.lang.String getUrl()

            setUrl

            public void setUrl(java.lang.String url)

            getUseCount

            public int getUseCount()

            getUser

            public java.lang.String getUser()

            setUser

            public void setUser(java.lang.String user)

            getConnection

            public java.sql.Connection getConnection()
                                              throws java.sql.SQLException
            Attempt to establish a database connection.
            Specified by:
            getConnection in interface javax.sql.DataSource
            Throws:
            java.sql.SQLException - if a database access error occurs

            getConnection

            public java.sql.Connection getConnection(java.lang.String username,
                                                     java.lang.String password)
                                              throws java.sql.SQLException
            Attempt to establish a database connection. WARNING - The specified username and password are not supported by this implementation.
            Specified by:
            getConnection in interface javax.sql.DataSource
            Parameters:
            username - Database username for this connection
            password - Database password for this connection
            Throws:
            java.sql.SQLException - if a database access error occurs

            getLoginTimeout

            public int getLoginTimeout()
                                throws java.sql.SQLException
            Return the login timeout for this data source.
            Specified by:
            getLoginTimeout in interface javax.sql.DataSource
            Throws:
            java.sql.SQLException - if a database access error occurs

            getLogWriter

            public java.io.PrintWriter getLogWriter()
                                             throws java.sql.SQLException
            Return the log writer for this data source.
            Specified by:
            getLogWriter in interface javax.sql.DataSource
            Throws:
            java.sql.SQLException - if a database access error occurs

            setLoginTimeout

            public void setLoginTimeout(int loginTimeout)
                                 throws java.sql.SQLException
            Set the login timeout for this data source.
            Specified by:
            setLoginTimeout in interface javax.sql.DataSource
            Parameters:
            loginTimeout - The new login timeout
            Throws:
            java.sql.SQLException - if a database access error occurs

            setLogWriter

            public void setLogWriter(java.io.PrintWriter logWriter)
                              throws java.sql.SQLException
            Set the log writer for this data source.
            Specified by:
            setLogWriter in interface javax.sql.DataSource
            Parameters:
            logWriter - The new log writer
            Throws:
            java.sql.SQLException - if a database access error occurs

            close

            public void close()
                       throws java.sql.SQLException
            Close all connections that have been created by this data source.
            Throws:
            java.sql.SQLException - if a database access error occurs

            open

            public void open()
                      throws java.sql.SQLException
            Open the initial connections that are appropriate for this data source.
            Throws:
            java.sql.SQLException - if a database access error occurs

            toString

            public java.lang.String toString()
            Return a string representation of this component.
            Overrides:
            toString in class java.lang.Object

            createConnection

            protected java.sql.Connection createConnection()
                                                    throws java.sql.SQLException
            Create, configure, and return a new JDBC Connection that has been wrapped in our corresponding wrapper.
            Throws:
            java.sql.SQLException - if a database access error occurs

            log

            protected void log(java.lang.String message)
            Log the specified message to our log writer, if we have one.
            Parameters:
            message - The message to be logged

            log

            protected void log(java.lang.String message,
                               java.lang.Throwable throwable)
            Log the specified message and exception to our log writer, if we have one.
            Parameters:
            message - The message to be logged
            throwable - The exception to be logged

            ping

            protected void ping(java.sql.Connection conn)
                         throws java.sql.SQLException
            Perform any configured pingCommand and/or pingQuery on the specified connection, returning any SQLException that is encountered along the way.
            Parameters:
            conn - The connection to be pinged

            returnConnection

            void returnConnection(GenericConnection conn)
            Return this connection to the available connection pool.
            Parameters:
            conn - The connection being returned


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/util/IteratorAdapter.html0000644000175000017500000002610410404045212030301 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class IteratorAdapter

            org.apache.struts.util
            Class IteratorAdapter

            java.lang.Object
              |
              +--org.apache.struts.util.IteratorAdapter
            
            All Implemented Interfaces:
            java.util.Iterator

            public class IteratorAdapter
            extends java.lang.Object
            implements java.util.Iterator

            Utility method for converting Enumeration to an Iterator class. If you attempt to remove() an Object from the iterator, it will throw an UnsupportedOperationException. Added for use by TagLib so Enumeration can be supported

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Sean Kelly, Rob Leland

            Field Summary
            private  java.util.Enumeration enum
                       
             
            Constructor Summary
            IteratorAdapter(java.util.Enumeration enum)
                       
             
            Method Summary
             boolean hasNext()
                       
             java.lang.Object next()
                       
             void remove()
                       
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            enum

            private java.util.Enumeration enum
            Constructor Detail

            IteratorAdapter

            public IteratorAdapter(java.util.Enumeration enum)
            Method Detail

            hasNext

            public boolean hasNext()
            Specified by:
            hasNext in interface java.util.Iterator

            next

            public java.lang.Object next()
            Specified by:
            next in interface java.util.Iterator

            remove

            public void remove()
            Specified by:
            remove in interface java.util.Iterator


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/util/MessageResources.html0000644000175000017500000012700610404045204030472 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class MessageResources

            org.apache.struts.util
            Class MessageResources

            java.lang.Object
              |
              +--org.apache.struts.util.MessageResources
            
            All Implemented Interfaces:
            java.io.Serializable
            Direct Known Subclasses:
            PropertyMessageResources

            public abstract class MessageResources
            extends java.lang.Object
            implements java.io.Serializable

            General purpose abstract class that describes an API for retrieving Locale-sensitive messages from underlying resource locations of an unspecified design, and optionally utilizing the MessageFormat class to produce internationalized messages with parametric replacement.

            Calls to getMessage() variants without a Locale argument are presumed to be requesting a message string in the default Locale for this JVM.

            Calls to getMessage() with an unknown key, or an unknown Locale will return null if the returnNull property is set to true. Otherwise, a suitable error message will be returned instead.

            IMPLEMENTATION NOTE - Classes that extend this class must be Serializable so that instances may be used in distributable application server environments.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  java.lang.String config
                      The configuration parameter used to initialize this MessageResources.
            protected static MessageResourcesFactory defaultFactory
                      The default MessageResourcesFactory used to create MessageResources instances.
            protected  java.util.Locale defaultLocale
                      The default Locale for our environment.
            protected  MessageResourcesFactory factory
                      The MessageResourcesFactory that created this instance.
            protected  java.util.HashMap formats
                      The set of previously created MessageFormat objects, keyed by the key computed in messageKey().
            protected  boolean returnNull
                      Should we return null instead of an error message string if an unknown Locale or key is requested?
             
            Constructor Summary
            MessageResources(MessageResourcesFactory factory, java.lang.String config)
                      Construct a new MessageResources according to the specified parameters.
            MessageResources(MessageResourcesFactory factory, java.lang.String config, boolean returnNull)
                      Construct a new MessageResources according to the specified parameters.
             
            Method Summary
             java.lang.String getConfig()
                       
             MessageResourcesFactory getFactory()
                       
            abstract  java.lang.String getMessage(java.util.Locale locale, java.lang.String key)
                      Returns a text message for the specified key, for the default Locale.
             java.lang.String getMessage(java.util.Locale locale, java.lang.String key, java.lang.Object arg0)
                      Returns a text message after parametric replacement of the specified parameter placeholders.
             java.lang.String getMessage(java.util.Locale locale, java.lang.String key, java.lang.Object[] args)
                      Returns a text message after parametric replacement of the specified parameter placeholders.
             java.lang.String getMessage(java.util.Locale locale, java.lang.String key, java.lang.Object arg0, java.lang.Object arg1)
                      Returns a text message after parametric replacement of the specified parameter placeholders.
             java.lang.String getMessage(java.util.Locale locale, java.lang.String key, java.lang.Object arg0, java.lang.Object arg1, java.lang.Object arg2)
                      Returns a text message after parametric replacement of the specified parameter placeholders.
             java.lang.String getMessage(java.util.Locale locale, java.lang.String key, java.lang.Object arg0, java.lang.Object arg1, java.lang.Object arg2, java.lang.Object arg3)
                      Returns a text message after parametric replacement of the specified parameter placeholders.
             java.lang.String getMessage(java.lang.String key)
                      Returns a text message for the specified key, for the default Locale.
             java.lang.String getMessage(java.lang.String key, java.lang.Object arg0)
                      Returns a text message after parametric replacement of the specified parameter placeholders.
             java.lang.String getMessage(java.lang.String key, java.lang.Object[] args)
                      Returns a text message after parametric replacement of the specified parameter placeholders.
             java.lang.String getMessage(java.lang.String key, java.lang.Object arg0, java.lang.Object arg1)
                      Returns a text message after parametric replacement of the specified parameter placeholders.
             java.lang.String getMessage(java.lang.String key, java.lang.Object arg0, java.lang.Object arg1, java.lang.Object arg2)
                      Returns a text message after parametric replacement of the specified parameter placeholders.
             java.lang.String getMessage(java.lang.String key, java.lang.Object arg0, java.lang.Object arg1, java.lang.Object arg2, java.lang.Object arg3)
                      Returns a text message after parametric replacement of the specified parameter placeholders.
            static MessageResources getMessageResources(java.lang.String config)
                      Create and return an instance of MessageResources for the created by the default MessageResourcesFactory.
             boolean getReturnNull()
                       
             boolean isPresent(java.util.Locale locale, java.lang.String key)
                      Return true if there is a defined message for the specified key in the specified Locale.
             boolean isPresent(java.lang.String key)
                      Return true if there is a defined message for the specified key in the system default locale.
            protected  java.lang.String localeKey(java.util.Locale locale)
                      Compute and return a key to be used in caching information by a Locale.
             void log(java.lang.String message)
                      Log a message to the Writer that has been configured for our use.
             void log(java.lang.String message, java.lang.Throwable throwable)
                      Log a message and exception to the Writer that has been configured for our use.
            protected  java.lang.String messageKey(java.util.Locale locale, java.lang.String key)
                      Compute and return a key to be used in caching information by Locale and message key.
            protected  java.lang.String messageKey(java.lang.String localeKey, java.lang.String key)
                      Compute and return a key to be used in caching information by locale key and message key.
             void setReturnNull(boolean returnNull)
                       
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            config

            protected java.lang.String config
            The configuration parameter used to initialize this MessageResources.

            defaultLocale

            protected java.util.Locale defaultLocale
            The default Locale for our environment.

            factory

            protected MessageResourcesFactory factory
            The MessageResourcesFactory that created this instance.

            formats

            protected java.util.HashMap formats
            The set of previously created MessageFormat objects, keyed by the key computed in messageKey().

            returnNull

            protected boolean returnNull
            Should we return null instead of an error message string if an unknown Locale or key is requested?

            defaultFactory

            protected static MessageResourcesFactory defaultFactory
            The default MessageResourcesFactory used to create MessageResources instances.
            Constructor Detail

            MessageResources

            public MessageResources(MessageResourcesFactory factory,
                                    java.lang.String config)
            Construct a new MessageResources according to the specified parameters.
            Parameters:
            factory - The MessageResourcesFactory that created us
            config - The configuration parameter for this MessageResources

            MessageResources

            public MessageResources(MessageResourcesFactory factory,
                                    java.lang.String config,
                                    boolean returnNull)
            Construct a new MessageResources according to the specified parameters.
            Parameters:
            factory - The MessageResourcesFactory that created us
            config - The configuration parameter for this MessageResources
            returnNull - The returnNull property we should initialize with
            Method Detail

            getConfig

            public java.lang.String getConfig()

            getFactory

            public MessageResourcesFactory getFactory()

            getReturnNull

            public boolean getReturnNull()

            setReturnNull

            public void setReturnNull(boolean returnNull)

            getMessage

            public java.lang.String getMessage(java.lang.String key)
            Returns a text message for the specified key, for the default Locale.
            Parameters:
            key - The message key to look up

            getMessage

            public java.lang.String getMessage(java.lang.String key,
                                               java.lang.Object[] args)
            Returns a text message after parametric replacement of the specified parameter placeholders.
            Parameters:
            key - The message key to look up
            args - An array of replacement parameters for placeholders

            getMessage

            public java.lang.String getMessage(java.lang.String key,
                                               java.lang.Object arg0)
            Returns a text message after parametric replacement of the specified parameter placeholders.
            Parameters:
            key - The message key to look up
            arg0 - The replacement for placeholder {0} in the message

            getMessage

            public java.lang.String getMessage(java.lang.String key,
                                               java.lang.Object arg0,
                                               java.lang.Object arg1)
            Returns a text message after parametric replacement of the specified parameter placeholders.
            Parameters:
            key - The message key to look up
            arg0 - The replacement for placeholder {0} in the message
            arg1 - The replacement for placeholder {1} in the message

            getMessage

            public java.lang.String getMessage(java.lang.String key,
                                               java.lang.Object arg0,
                                               java.lang.Object arg1,
                                               java.lang.Object arg2)
            Returns a text message after parametric replacement of the specified parameter placeholders.
            Parameters:
            key - The message key to look up
            arg0 - The replacement for placeholder {0} in the message
            arg1 - The replacement for placeholder {1} in the message
            arg2 - The replacement for placeholder {2} in the message

            getMessage

            public java.lang.String getMessage(java.lang.String key,
                                               java.lang.Object arg0,
                                               java.lang.Object arg1,
                                               java.lang.Object arg2,
                                               java.lang.Object arg3)
            Returns a text message after parametric replacement of the specified parameter placeholders.
            Parameters:
            key - The message key to look up
            arg0 - The replacement for placeholder {0} in the message
            arg1 - The replacement for placeholder {1} in the message
            arg2 - The replacement for placeholder {2} in the message
            arg3 - The replacement for placeholder {3} in the message

            getMessage

            public abstract java.lang.String getMessage(java.util.Locale locale,
                                                        java.lang.String key)
            Returns a text message for the specified key, for the default Locale. A null string result will be returned by this method if no relevant message resource is found for this key or Locale, if the returnNull property is set. Otherwise, an appropriate error message will be returned.

            This method must be implemented by a concrete subclass.

            Parameters:
            locale - The requested message Locale, or null for the system default Locale
            key - The message key to look up

            getMessage

            public java.lang.String getMessage(java.util.Locale locale,
                                               java.lang.String key,
                                               java.lang.Object[] args)
            Returns a text message after parametric replacement of the specified parameter placeholders. A null string result will be returned by this method if no resource bundle has been configured.
            Parameters:
            locale - The requested message Locale, or null for the system default Locale
            key - The message key to look up
            args - An array of replacement parameters for placeholders

            getMessage

            public java.lang.String getMessage(java.util.Locale locale,
                                               java.lang.String key,
                                               java.lang.Object arg0)
            Returns a text message after parametric replacement of the specified parameter placeholders. A null string result will never be returned by this method.
            Parameters:
            locale - The requested message Locale, or null for the system default Locale
            key - The message key to look up
            arg0 - The replacement for placeholder {0} in the message

            getMessage

            public java.lang.String getMessage(java.util.Locale locale,
                                               java.lang.String key,
                                               java.lang.Object arg0,
                                               java.lang.Object arg1)
            Returns a text message after parametric replacement of the specified parameter placeholders. A null string result will never be returned by this method.
            Parameters:
            locale - The requested message Locale, or null for the system default Locale
            key - The message key to look up
            arg0 - The replacement for placeholder {0} in the message
            arg1 - The replacement for placeholder {1} in the message

            getMessage

            public java.lang.String getMessage(java.util.Locale locale,
                                               java.lang.String key,
                                               java.lang.Object arg0,
                                               java.lang.Object arg1,
                                               java.lang.Object arg2)
            Returns a text message after parametric replacement of the specified parameter placeholders. A null string result will never be returned by this method.
            Parameters:
            locale - The requested message Locale, or null for the system default Locale
            key - The message key to look up
            arg0 - The replacement for placeholder {0} in the message
            arg1 - The replacement for placeholder {1} in the message
            arg2 - The replacement for placeholder {2} in the message

            getMessage

            public java.lang.String getMessage(java.util.Locale locale,
                                               java.lang.String key,
                                               java.lang.Object arg0,
                                               java.lang.Object arg1,
                                               java.lang.Object arg2,
                                               java.lang.Object arg3)
            Returns a text message after parametric replacement of the specified parameter placeholders. A null string result will never be returned by this method.
            Parameters:
            locale - The requested message Locale, or null for the system default Locale
            key - The message key to look up
            arg0 - The replacement for placeholder {0} in the message
            arg1 - The replacement for placeholder {1} in the message
            arg2 - The replacement for placeholder {2} in the message
            arg3 - The replacement for placeholder {3} in the message

            isPresent

            public boolean isPresent(java.lang.String key)
            Return true if there is a defined message for the specified key in the system default locale.
            Parameters:
            key - The message key to look up

            isPresent

            public boolean isPresent(java.util.Locale locale,
                                     java.lang.String key)
            Return true if there is a defined message for the specified key in the specified Locale.
            Parameters:
            locale - The requested message Locale, or null for the system default Locale
            key - The message key to look up

            localeKey

            protected java.lang.String localeKey(java.util.Locale locale)
            Compute and return a key to be used in caching information by a Locale. NOTE - The locale key for the default Locale in our environment is a zero length String.
            Parameters:
            locale - The locale for which a key is desired

            messageKey

            protected java.lang.String messageKey(java.util.Locale locale,
                                                  java.lang.String key)
            Compute and return a key to be used in caching information by Locale and message key.
            Parameters:
            locale - The Locale for which this format key is calculated
            key - The message key for which this format key is calculated

            messageKey

            protected java.lang.String messageKey(java.lang.String localeKey,
                                                  java.lang.String key)
            Compute and return a key to be used in caching information by locale key and message key.
            Parameters:
            localeKey - The locale key for which this cache key is calculated
            key - The message key for which this cache key is calculated

            getMessageResources

            public static MessageResources getMessageResources(java.lang.String config)
            Create and return an instance of MessageResources for the created by the default MessageResourcesFactory.
            Parameters:
            config - Configuration parameter for this message bundle.

            log

            public void log(java.lang.String message)
            Log a message to the Writer that has been configured for our use.
            Parameters:
            message - The message to be logged

            log

            public void log(java.lang.String message,
                            java.lang.Throwable throwable)
            Log a message and exception to the Writer that has been configured for our use.
            Parameters:
            message - The message to be logged
            throwable - The exception to be logged


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/util/MessageResourcesFactory.html0000644000175000017500000004010610404045216032020 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class MessageResourcesFactory

            org.apache.struts.util
            Class MessageResourcesFactory

            java.lang.Object
              |
              +--org.apache.struts.util.MessageResourcesFactory
            
            All Implemented Interfaces:
            java.io.Serializable
            Direct Known Subclasses:
            PropertyMessageResourcesFactory

            public abstract class MessageResourcesFactory
            extends java.lang.Object
            implements java.io.Serializable

            Factory for MessageResources instances. The general usage pattern for this class is:

            • Call MessageResourcesFactory().createFactory() to retrieve a MessageResourcesFactory instance.
            • Set properties as required to configure this factory instance to create MessageResources instances with desired characteristics.
            • Call the createResources() method of the factory to retrieve a newly instantiated MessageResources instance.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected static java.lang.Class clazz
                      The Java class to be used for MessageResourcesFactory instances.
            protected static java.lang.String factoryClass
                      The fully qualified class name to be used for MessageResourcesFactory instances.
            protected  boolean returnNull
                      The "return null" property value to which newly created MessageResourcess should be initialized.
             
            Constructor Summary
            MessageResourcesFactory()
                       
             
            Method Summary
            static MessageResourcesFactory createFactory()
                      Create and return a MessageResourcesFactory instance of the appropriate class, which can be used to create customized MessageResources instances.
            abstract  MessageResources createResources(java.lang.String config)
                      Create and return a newly instansiated MessageResources.
            static java.lang.String getFactoryClass()
                       
             boolean getReturnNull()
                       
            static void setFactoryClass(java.lang.String factoryClass)
                       
             void setReturnNull(boolean returnNull)
                       
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            returnNull

            protected boolean returnNull
            The "return null" property value to which newly created MessageResourcess should be initialized.

            clazz

            protected static transient java.lang.Class clazz
            The Java class to be used for MessageResourcesFactory instances.

            factoryClass

            protected static java.lang.String factoryClass
            The fully qualified class name to be used for MessageResourcesFactory instances.
            Constructor Detail

            MessageResourcesFactory

            public MessageResourcesFactory()
            Method Detail

            getReturnNull

            public boolean getReturnNull()

            setReturnNull

            public void setReturnNull(boolean returnNull)

            createResources

            public abstract MessageResources createResources(java.lang.String config)
            Create and return a newly instansiated MessageResources. This method must be implemented by concrete subclasses.
            Parameters:
            config - Configuration parameter(s) for the requested bundle

            getFactoryClass

            public static java.lang.String getFactoryClass()

            setFactoryClass

            public static void setFactoryClass(java.lang.String factoryClass)

            createFactory

            public static MessageResourcesFactory createFactory()
            Create and return a MessageResourcesFactory instance of the appropriate class, which can be used to create customized MessageResources instances. If no such factory can be created, return null instead.


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/util/PropertyMessageResources.html0000644000175000017500000005125010404045214032235 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class PropertyMessageResources

            org.apache.struts.util
            Class PropertyMessageResources

            java.lang.Object
              |
              +--org.apache.struts.util.MessageResources
                    |
                    +--org.apache.struts.util.PropertyMessageResources
            
            All Implemented Interfaces:
            java.io.Serializable

            public class PropertyMessageResources
            extends MessageResources

            Concrete subclass of MessageResources that reads message keys and corresponding strings from named property resources in the same manner that java.util.PropertyResourceBundle does. The base property defines the base property resource name, and must be specified.

            IMPLEMENTATION NOTE - This class trades memory for speed by caching all messages located via generalizing the Locale under the original locale as well. This results in specific messages being stored in the message cache more than once, but improves response time on subsequent requests for the same locale + key combination.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  java.util.HashMap locales
                      The set of locale keys for which we have already loaded messages, keyed by the value calculated in localeKey().
            protected  java.util.HashMap messages
                      The cache of messages we have accumulated over time, keyed by the value calculated in messageKey().
             
            Fields inherited from class org.apache.struts.util.MessageResources
            config, defaultFactory, defaultLocale, factory, formats, returnNull
             
            Constructor Summary
            PropertyMessageResources(MessageResourcesFactory factory, java.lang.String config)
                      Construct a new PropertyMessageResources according to the specified parameters.
            PropertyMessageResources(MessageResourcesFactory factory, java.lang.String config, boolean returnNull)
                      Construct a new PropertyMessageResources according to the specified parameters.
             
            Method Summary
             java.lang.String getMessage(java.util.Locale locale, java.lang.String key)
                      Returns a text message for the specified key, for the default Locale.
            protected  void loadLocale(java.lang.String localeKey)
                      Load the messages associated with the specified Locale key.
             
            Methods inherited from class org.apache.struts.util.MessageResources
            getConfig, getFactory, getMessage, getMessage, getMessage, getMessage, getMessage, getMessage, getMessage, getMessage, getMessage, getMessage, getMessage, getMessageResources, getReturnNull, isPresent, isPresent, localeKey, log, log, messageKey, messageKey, setReturnNull
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            locales

            protected java.util.HashMap locales
            The set of locale keys for which we have already loaded messages, keyed by the value calculated in localeKey().

            messages

            protected java.util.HashMap messages
            The cache of messages we have accumulated over time, keyed by the value calculated in messageKey().
            Constructor Detail

            PropertyMessageResources

            public PropertyMessageResources(MessageResourcesFactory factory,
                                            java.lang.String config)
            Construct a new PropertyMessageResources according to the specified parameters.
            Parameters:
            factory - The MessageResourcesFactory that created us
            config - The configuration parameter for this MessageResources

            PropertyMessageResources

            public PropertyMessageResources(MessageResourcesFactory factory,
                                            java.lang.String config,
                                            boolean returnNull)
            Construct a new PropertyMessageResources according to the specified parameters.
            Parameters:
            factory - The MessageResourcesFactory that created us
            config - The configuration parameter for this MessageResources
            returnNull - The returnNull property we should initialize with
            Method Detail

            getMessage

            public java.lang.String getMessage(java.util.Locale locale,
                                               java.lang.String key)
            Returns a text message for the specified key, for the default Locale. A null string result will be returned by this method if no relevant message resource is found for this key or Locale, if the returnNull property is set. Otherwise, an appropriate error message will be returned.

            This method must be implemented by a concrete subclass.

            Overrides:
            getMessage in class MessageResources
            Parameters:
            locale - The requested message Locale, or null for the system default Locale
            key - The message key to look up

            loadLocale

            protected void loadLocale(java.lang.String localeKey)
            Load the messages associated with the specified Locale key. For this implementation, the config property should contain a fully qualified package and resource name, separated by periods, of a series of property resources to be loaded from the class loader that created this PropertyMessageResources instance. This is exactly the same name format you would use when utilizing the java.util.PropertyResourceBundle class.
            Parameters:
            localeKey - Locale key for the messages to be retrieved


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/util/PropertyMessageResourcesFactory.html0000644000175000017500000003012310404045236033565 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class PropertyMessageResourcesFactory

            org.apache.struts.util
            Class PropertyMessageResourcesFactory

            java.lang.Object
              |
              +--org.apache.struts.util.MessageResourcesFactory
                    |
                    +--org.apache.struts.util.PropertyMessageResourcesFactory
            
            All Implemented Interfaces:
            java.io.Serializable

            public class PropertyMessageResourcesFactory
            extends MessageResourcesFactory

            Factory for PropertyMessageResources instances. The configuration paramter for such instances is the base Java package name of the resources entries from which our keys and values will be loaded.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Fields inherited from class org.apache.struts.util.MessageResourcesFactory
            clazz, factoryClass, returnNull
             
            Constructor Summary
            PropertyMessageResourcesFactory()
                       
             
            Method Summary
             MessageResources createResources(java.lang.String config)
                      Create and return a newly instansiated MessageResources.
             
            Methods inherited from class org.apache.struts.util.MessageResourcesFactory
            createFactory, getFactoryClass, getReturnNull, setFactoryClass, setReturnNull
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Constructor Detail

            PropertyMessageResourcesFactory

            public PropertyMessageResourcesFactory()
            Method Detail

            createResources

            public MessageResources createResources(java.lang.String config)
            Create and return a newly instansiated MessageResources. This method must be implemented by concrete subclasses.
            Overrides:
            createResources in class MessageResourcesFactory
            Parameters:
            config - Configuration parameter(s) for the requested bundle


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/util/PropertyUtils.html0000644000175000017500000015641410404045246030073 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class PropertyUtils

            org.apache.struts.util
            Class PropertyUtils

            java.lang.Object
              |
              +--org.apache.struts.util.PropertyUtils
            

            Deprecated. At some point after Struts 1.0 final, will be replaced by an equivalent class in the Jakarta Commons Beanutils package.

            public class PropertyUtils
            extends java.lang.Object

            Utility methods for using Java Reflection APIs to facilitate generic property getter and setter operations on Java objects. Much of this code was originally included in BeanUtils, but has been separated because of the volume of code involved.

            In general, the objects that are examined and modified using these methods are expected to conform to the property getter and setter method naming conventions described in the JavaBeans Specification (Version 1.0.1). No data type conversions are performed, and there are no usage of any PropertyEditor classes that have been registered, although a convenient way to access the registered classes themselves is included.

            For the purposes of this class, three formats for referencing a particular property value of a bean are defined, with the layout of an identifying String in parentheses:

            • Simple (name) - The specified name identifies an individual property of a particular JavaBean. The name of the actual getter or setter method to be used is determined using standard JavaBeans instrospection, so that (unless overridden by a BeanInfo class, a property named "xyz" will have a getter method named getXyz() or (for boolean properties only) isXyz(), and a setter method named setXyz().
            • Nested (name1.name2.name3) The first name element is used to select a property getter, as for simple references above. The object returned for this property is then consulted, using the same approach, for a property getter for a property named name2, and so on. The property value that is ultimately retrieved or modified is the one identified by the last name element.
            • Indexed (name[index]) - The underlying property value is assumed to be an array, or this JavaBean is assumed to have indexed property getter and setter methods. The appropriate (zero-relative) entry in the array is selected.
            • Combined (name1.name2[index].name3 - Various forms combining nested and indexed references are also supported.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan, Ralph Schaer, Chris Audley

            Field Summary
            private static int debug
                      Deprecated. The debugging detail level for this component.
            private static FastHashMap descriptorsCache
                      Deprecated. The cache of PropertyDescriptor arrays for beans we have already introspected, keyed by the fully qualified class name of this object.
            static char INDEXED_DELIM
                      Deprecated. The delimiter that preceeds the zero-relative subscript for an indexed reference.
            static char INDEXED_DELIM2
                      Deprecated. The delimiter that follows the zero-relative subscript for an indexed reference.
            static char NESTED_DELIM
                      Deprecated. The delimiter that separates the components of a nested reference.
             
            Constructor Summary
            PropertyUtils()
                      Deprecated.  
             
            Method Summary
            (package private) static void ()
                      Deprecated.  
            static void copyProperties(java.lang.Object dest, java.lang.Object orig)
                      Deprecated. Copy property values from the "origin" bean to the "destination" bean for all cases where the property names are the same (even though the actual getter and setter methods might have been customized via BeanInfo classes).
            static java.util.Map describe(java.lang.Object bean)
                      Deprecated. Return the entire set of properties for which the specified bean provides a read method.
            private static java.lang.reflect.Method getAccessibleMethod(java.lang.reflect.Method method)
                      Deprecated. Return an accessible method (that is, one that can be invoked via reflection) that implements the specified Method.
            private static java.lang.reflect.Method getAccessibleMethodFromInterfaceNest(java.lang.Class clazz, java.lang.String methodName, java.lang.Class[] parameterTypes)
                      Deprecated. Return an accessible method (that is, one that can be invoked via reflection) that implements the specified method, by scanning through all implemented interfaces and subinterfaces.
            static int getDebug()
                      Deprecated.  
            static java.lang.Object getIndexedProperty(java.lang.Object bean, java.lang.String name)
                      Deprecated. Return the value of the specified indexed property of the specified bean, with no type conversions.
            static java.lang.Object getIndexedProperty(java.lang.Object bean, java.lang.String name, int index)
                      Deprecated. Return the value of the specified indexed property of the specified bean, with no type conversions.
            static java.lang.Object getNestedProperty(java.lang.Object bean, java.lang.String name)
                      Deprecated. Return the value of the (possibly nested) property of the specified name, for the specified bean, with no type conversions.
            static java.lang.Object getProperty(java.lang.Object bean, java.lang.String name)
                      Deprecated. Return the value of the specified property of the specified bean, no matter which property reference format is used, with no type conversions.
            static java.beans.PropertyDescriptor getPropertyDescriptor(java.lang.Object bean, java.lang.String name)
                      Deprecated. Retrieve the property descriptor for the specified property of the specified bean, or return null if there is no such descriptor.
            static java.beans.PropertyDescriptor[] getPropertyDescriptors(java.lang.Object bean)
                      Deprecated. Retrieve the property descriptors for the specified bean, introspecting and caching them the first time a particular bean class is encountered.
            static java.lang.Class getPropertyEditorClass(java.lang.Object bean, java.lang.String name)
                      Deprecated. Return the Java Class repesenting the property editor class that has been registered for this property (if any).
            static java.lang.Class getPropertyType(java.lang.Object bean, java.lang.String name)
                      Deprecated. Return the Java Class representing the property type of the specified property, or null if there is no such property for the specified bean.
            static java.lang.reflect.Method getReadMethod(java.beans.PropertyDescriptor descriptor)
                      Deprecated. Return an accessible property getter method for this property, if there is one; otherwise return null.
            static java.lang.Object getSimpleProperty(java.lang.Object bean, java.lang.String name)
                      Deprecated. Return the value of the specified simple property of the specified bean, with no type conversions.
            static java.lang.reflect.Method getWriteMethod(java.beans.PropertyDescriptor descriptor)
                      Deprecated. Return an accessible property setter method for this property, if there is one; otherwise return null.
            static void setDebug(int newDebug)
                      Deprecated.  
            static void setIndexedProperty(java.lang.Object bean, java.lang.String name, int index, java.lang.Object value)
                      Deprecated. Set the value of the specified indexed property of the specified bean, with no type conversions.
            static void setIndexedProperty(java.lang.Object bean, java.lang.String name, java.lang.Object value)
                      Deprecated. Set the value of the specified indexed property of the specified bean, with no type conversions.
            static void setNestedProperty(java.lang.Object bean, java.lang.String name, java.lang.Object value)
                      Deprecated. Set the value of the (possibly nested) property of the specified name, for the specified bean, with no type conversions.
            static void setProperty(java.lang.Object bean, java.lang.String name, java.lang.Object value)
                      Deprecated. Set the value of the specified property of the specified bean, no matter which property reference format is used, with no type conversions.
            static void setSimpleProperty(java.lang.Object bean, java.lang.String name, java.lang.Object value)
                      Deprecated. Set the value of the specified simple property of the specified bean, with no type conversions.
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            INDEXED_DELIM

            public static final char INDEXED_DELIM
            Deprecated. 
            The delimiter that preceeds the zero-relative subscript for an indexed reference.

            INDEXED_DELIM2

            public static final char INDEXED_DELIM2
            Deprecated. 
            The delimiter that follows the zero-relative subscript for an indexed reference.

            NESTED_DELIM

            public static final char NESTED_DELIM
            Deprecated. 
            The delimiter that separates the components of a nested reference.

            debug

            private static int debug
            Deprecated. 
            The debugging detail level for this component.

            descriptorsCache

            private static FastHashMap descriptorsCache
            Deprecated. 
            The cache of PropertyDescriptor arrays for beans we have already introspected, keyed by the fully qualified class name of this object.
            Constructor Detail

            PropertyUtils

            public PropertyUtils()
            Deprecated. 
            Method Detail

            getDebug

            public static int getDebug()
            Deprecated. 

            setDebug

            public static void setDebug(int newDebug)
            Deprecated. 

            static void ()
            Deprecated. 

            copyProperties

            public static void copyProperties(java.lang.Object dest,
                                              java.lang.Object orig)
                                       throws java.lang.IllegalAccessException,
                                              java.lang.reflect.InvocationTargetException,
                                              java.lang.NoSuchMethodException
            Deprecated. 
            Copy property values from the "origin" bean to the "destination" bean for all cases where the property names are the same (even though the actual getter and setter methods might have been customized via BeanInfo classes). No conversions are performed on the actual property values -- it is assumed that the values retrieved from the origin bean are assignment-compatible with the types expected by the destination bean.
            Parameters:
            dest - Destination bean whose properties are modified
            orig - Origin bean whose properties are retrieved
            Throws:
            java.lang.IllegalAccessException - if the caller does not have access to the property accessor method
            java.lang.IllegalArgumentException - if the dest or orig argument is null
            java.lang.reflect.InvocationTargetException - if the property accessor method throws an exception
            java.lang.NoSuchMethodException - if an accessor method for this propety cannot be found

            describe

            public static java.util.Map describe(java.lang.Object bean)
                                          throws java.lang.IllegalAccessException,
                                                 java.lang.reflect.InvocationTargetException,
                                                 java.lang.NoSuchMethodException
            Deprecated. 
            Return the entire set of properties for which the specified bean provides a read method. This map contains the unconverted property values for all properties for which a read method is provided (i.e. where the getReadMethod() returns non-null).
            Parameters:
            bean - Bean whose properties are to be extracted
            Throws:
            java.lang.IllegalAccessException - if the caller does not have access to the property accessor method
            java.lang.IllegalArgumentException - if bean is null
            java.lang.reflect.InvocationTargetException - if the property accessor method throws an exception
            java.lang.NoSuchMethodException - if an accessor method for this propety cannot be found

            getIndexedProperty

            public static java.lang.Object getIndexedProperty(java.lang.Object bean,
                                                              java.lang.String name)
                                                       throws java.lang.IllegalAccessException,
                                                              java.lang.reflect.InvocationTargetException,
                                                              java.lang.NoSuchMethodException
            Deprecated. 
            Return the value of the specified indexed property of the specified bean, with no type conversions. The zero-relative index of the required value must be included (in square brackets) as a suffix to the property name, or IllegalArgumentException will be thrown.
            Parameters:
            bean - Bean whose property is to be extracted
            name - propertyname[index] of the property value to be extracted
            Throws:
            java.lang.IllegalAccessException - if the caller does not have access to the property accessor method
            java.lang.IllegalArgumentException - if bean or name is null
            java.lang.reflect.InvocationTargetException - if the property accessor method throws an exception
            java.lang.NoSuchMethodException - if an accessor method for this propety cannot be found

            getIndexedProperty

            public static java.lang.Object getIndexedProperty(java.lang.Object bean,
                                                              java.lang.String name,
                                                              int index)
                                                       throws java.lang.IllegalAccessException,
                                                              java.lang.reflect.InvocationTargetException,
                                                              java.lang.NoSuchMethodException
            Deprecated. 
            Return the value of the specified indexed property of the specified bean, with no type conversions.
            Parameters:
            bean - Bean whose property is to be extracted
            name - Simple property name of the property value to be extracted
            index - Index of the property value to be extracted
            Throws:
            java.lang.IllegalAccessException - if the caller does not have access to the property accessor method
            java.lang.IllegalArgumentException - if bean or name is null
            java.lang.reflect.InvocationTargetException - if the property accessor method throws an exception
            java.lang.NoSuchMethodException - if an accessor method for this propety cannot be found

            getNestedProperty

            public static java.lang.Object getNestedProperty(java.lang.Object bean,
                                                             java.lang.String name)
                                                      throws java.lang.IllegalAccessException,
                                                             java.lang.reflect.InvocationTargetException,
                                                             java.lang.NoSuchMethodException
            Deprecated. 
            Return the value of the (possibly nested) property of the specified name, for the specified bean, with no type conversions.
            Parameters:
            bean - Bean whose property is to be extracted
            name - Possibly nested name of the property to be extracted
            Throws:
            java.lang.IllegalAccessException - if the caller does not have access to the property accessor method
            java.lang.IllegalArgumentException - if bean or name is null
            java.lang.IllegalArgumentException - if a nested reference to a property returns null
            java.lang.reflect.InvocationTargetException - if the property accessor method throws an exception
            java.lang.NoSuchMethodException - if an accessor method for this propety cannot be found

            getProperty

            public static java.lang.Object getProperty(java.lang.Object bean,
                                                       java.lang.String name)
                                                throws java.lang.IllegalAccessException,
                                                       java.lang.reflect.InvocationTargetException,
                                                       java.lang.NoSuchMethodException
            Deprecated. 
            Return the value of the specified property of the specified bean, no matter which property reference format is used, with no type conversions.
            Parameters:
            bean - Bean whose property is to be extracted
            name - Possibly indexed and/or nested name of the property to be extracted
            Throws:
            java.lang.IllegalAccessException - if the caller does not have access to the property accessor method
            java.lang.IllegalArgumentException - if bean or name is null
            java.lang.reflect.InvocationTargetException - if the property accessor method throws an exception
            java.lang.NoSuchMethodException - if an accessor method for this propety cannot be found

            getPropertyDescriptor

            public static java.beans.PropertyDescriptor getPropertyDescriptor(java.lang.Object bean,
                                                                              java.lang.String name)
                                                                       throws java.lang.IllegalAccessException,
                                                                              java.lang.reflect.InvocationTargetException,
                                                                              java.lang.NoSuchMethodException
            Deprecated. 
            Retrieve the property descriptor for the specified property of the specified bean, or return null if there is no such descriptor. This method resolves indexed and nested property references in the same manner as other methods in this class, except that if the last (or only) name element is indexed, the descriptor for the last resolved property itself is returned.
            Parameters:
            bean - Bean for which a property descriptor is requested
            name - Possibly indexed and/or nested name of the property for which a property descriptor is requested
            Throws:
            java.lang.IllegalAccessException - if the caller does not have access to the property accessor method
            java.lang.IllegalArgumentException - if bean or name is null
            java.lang.IllegalArgumentException - if a nested reference to a property returns null
            java.lang.reflect.InvocationTargetException - if the property accessor method throws an exception
            java.lang.NoSuchMethodException - if an accessor method for this propety cannot be found

            getPropertyDescriptors

            public static java.beans.PropertyDescriptor[] getPropertyDescriptors(java.lang.Object bean)
            Deprecated. 
            Retrieve the property descriptors for the specified bean, introspecting and caching them the first time a particular bean class is encountered.
            Parameters:
            bean - Bean for which property descriptors are requested
            Throws:
            java.lang.IllegalArgumentException - if bean is null

            getPropertyEditorClass

            public static java.lang.Class getPropertyEditorClass(java.lang.Object bean,
                                                                 java.lang.String name)
                                                          throws java.lang.IllegalAccessException,
                                                                 java.lang.reflect.InvocationTargetException,
                                                                 java.lang.NoSuchMethodException
            Deprecated. 
            Return the Java Class repesenting the property editor class that has been registered for this property (if any). This method follows the same name resolution rules used by getPropertyDescriptor(), so if the last element of a name reference is indexed, the property editor for the underlying property's class is returned.

            Note that null will be returned if there is no property, or if there is no registered property editor class. Because this return value is ambiguous, you should determine the existence of the property itself by other means.

            Parameters:
            bean - Bean for which a property descriptor is requested
            name - Possibly indexed and/or nested name of the property for which a property descriptor is requested
            Throws:
            java.lang.IllegalAccessException - if the caller does not have access to the property accessor method
            java.lang.IllegalArgumentException - if bean or name is null
            java.lang.IllegalArgumentException - if a nested reference to a property returns null
            java.lang.reflect.InvocationTargetException - if the property accessor method throws an exception
            java.lang.NoSuchMethodException - if an accessor method for this propety cannot be found

            getPropertyType

            public static java.lang.Class getPropertyType(java.lang.Object bean,
                                                          java.lang.String name)
                                                   throws java.lang.IllegalAccessException,
                                                          java.lang.reflect.InvocationTargetException,
                                                          java.lang.NoSuchMethodException
            Deprecated. 
            Return the Java Class representing the property type of the specified property, or null if there is no such property for the specified bean. This method follows the same name resolution rules used by getPropertyDescriptor(), so if the last element of a name reference is indexed, the type of the property itself will be returned. If the last (or only) element has no property with the specified name, null is returned.
            Parameters:
            bean - Bean for which a property descriptor is requested
            name - Possibly indexed and/or nested name of the property for which a property descriptor is requested
            Throws:
            java.lang.IllegalAccessException - if the caller does not have access to the property accessor method
            java.lang.IllegalArgumentException - if bean or name is null
            java.lang.IllegalArgumentException - if a nested reference to a property returns null
            java.lang.reflect.InvocationTargetException - if the property accessor method throws an exception
            java.lang.NoSuchMethodException - if an accessor method for this propety cannot be found

            getReadMethod

            public static java.lang.reflect.Method getReadMethod(java.beans.PropertyDescriptor descriptor)
            Deprecated. 
            Return an accessible property getter method for this property, if there is one; otherwise return null.
            Parameters:
            descriptor - Property descriptor to return a getter for

            getSimpleProperty

            public static java.lang.Object getSimpleProperty(java.lang.Object bean,
                                                             java.lang.String name)
                                                      throws java.lang.IllegalAccessException,
                                                             java.lang.reflect.InvocationTargetException,
                                                             java.lang.NoSuchMethodException
            Deprecated. 
            Return the value of the specified simple property of the specified bean, with no type conversions.
            Parameters:
            bean - Bean whose property is to be extracted
            name - Name of the property to be extracted
            Throws:
            java.lang.IllegalAccessException - if the caller does not have access to the property accessor method
            java.lang.IllegalArgumentException - if bean or name is null
            java.lang.IllegalArgumentException - if the property name is nested or indexed
            java.lang.reflect.InvocationTargetException - if the property accessor method throws an exception
            java.lang.NoSuchMethodException - if an accessor method for this propety cannot be found

            getWriteMethod

            public static java.lang.reflect.Method getWriteMethod(java.beans.PropertyDescriptor descriptor)
            Deprecated. 
            Return an accessible property setter method for this property, if there is one; otherwise return null.
            Parameters:
            descriptor - Property descriptor to return a setter for

            setIndexedProperty

            public static void setIndexedProperty(java.lang.Object bean,
                                                  java.lang.String name,
                                                  java.lang.Object value)
                                           throws java.lang.IllegalAccessException,
                                                  java.lang.reflect.InvocationTargetException,
                                                  java.lang.NoSuchMethodException
            Deprecated. 
            Set the value of the specified indexed property of the specified bean, with no type conversions. The zero-relative index of the required value must be included (in square brackets) as a suffix to the property name, or IllegalArgumentException will be thrown.
            Parameters:
            bean - Bean whose property is to be modified
            name - propertyname[index] of the property value to be modified
            value - Value to which the specified property element should be set
            Throws:
            java.lang.IllegalAccessException - if the caller does not have access to the property accessor method
            java.lang.IllegalArgumentException - if bean or name is null
            java.lang.reflect.InvocationTargetException - if the property accessor method throws an exception
            java.lang.NoSuchMethodException - if an accessor method for this propety cannot be found

            setIndexedProperty

            public static void setIndexedProperty(java.lang.Object bean,
                                                  java.lang.String name,
                                                  int index,
                                                  java.lang.Object value)
                                           throws java.lang.IllegalAccessException,
                                                  java.lang.reflect.InvocationTargetException,
                                                  java.lang.NoSuchMethodException
            Deprecated. 
            Set the value of the specified indexed property of the specified bean, with no type conversions.
            Parameters:
            bean - Bean whose property is to be set
            name - Simple property name of the property value to be set
            index - Index of the property value to be set
            value - Value to which the indexed property element is to be set
            Throws:
            java.lang.IllegalAccessException - if the caller does not have access to the property accessor method
            java.lang.IllegalArgumentException - if bean or name is null
            java.lang.reflect.InvocationTargetException - if the property accessor method throws an exception
            java.lang.NoSuchMethodException - if an accessor method for this propety cannot be found

            setNestedProperty

            public static void setNestedProperty(java.lang.Object bean,
                                                 java.lang.String name,
                                                 java.lang.Object value)
                                          throws java.lang.IllegalAccessException,
                                                 java.lang.reflect.InvocationTargetException,
                                                 java.lang.NoSuchMethodException
            Deprecated. 
            Set the value of the (possibly nested) property of the specified name, for the specified bean, with no type conversions.
            Parameters:
            bean - Bean whose property is to be modified
            name - Possibly nested name of the property to be modified
            value - Value to which the property is to be set
            Throws:
            java.lang.IllegalAccessException - if the caller does not have access to the property accessor method
            java.lang.IllegalArgumentException - if bean or name is null
            java.lang.IllegalArgumentException - if a nested reference to a property returns null
            java.lang.reflect.InvocationTargetException - if the property accessor method throws an exception
            java.lang.NoSuchMethodException - if an accessor method for this propety cannot be found

            setProperty

            public static void setProperty(java.lang.Object bean,
                                           java.lang.String name,
                                           java.lang.Object value)
                                    throws java.lang.IllegalAccessException,
                                           java.lang.reflect.InvocationTargetException,
                                           java.lang.NoSuchMethodException
            Deprecated. 
            Set the value of the specified property of the specified bean, no matter which property reference format is used, with no type conversions.
            Parameters:
            bean - Bean whose property is to be modified
            name - Possibly indexed and/or nested name of the property to be modified
            value - Value to which this property is to be set
            Throws:
            java.lang.IllegalAccessException - if the caller does not have access to the property accessor method
            java.lang.IllegalArgumentException - if bean or name is null
            java.lang.reflect.InvocationTargetException - if the property accessor method throws an exception
            java.lang.NoSuchMethodException - if an accessor method for this propety cannot be found

            setSimpleProperty

            public static void setSimpleProperty(java.lang.Object bean,
                                                 java.lang.String name,
                                                 java.lang.Object value)
                                          throws java.lang.IllegalAccessException,
                                                 java.lang.reflect.InvocationTargetException,
                                                 java.lang.NoSuchMethodException
            Deprecated. 
            Set the value of the specified simple property of the specified bean, with no type conversions.
            Parameters:
            bean - Bean whose property is to be modified
            name - Name of the property to be modified
            value - Value to which the property should be set
            Throws:
            java.lang.IllegalAccessException - if the caller does not have access to the property accessor method
            java.lang.IllegalArgumentException - if bean or name is null
            java.lang.IllegalArgumentException - if the property name is nested or indexed
            java.lang.reflect.InvocationTargetException - if the property accessor method throws an exception
            java.lang.NoSuchMethodException - if an accessor method for this propety cannot be found

            getAccessibleMethod

            private static java.lang.reflect.Method getAccessibleMethod(java.lang.reflect.Method method)
            Deprecated. 
            Return an accessible method (that is, one that can be invoked via reflection) that implements the specified Method. If no such method can be found, return null.
            Parameters:
            method - The method that we wish to call

            getAccessibleMethodFromInterfaceNest

            private static java.lang.reflect.Method getAccessibleMethodFromInterfaceNest(java.lang.Class clazz,
                                                                                         java.lang.String methodName,
                                                                                         java.lang.Class[] parameterTypes)
            Deprecated. 
            Return an accessible method (that is, one that can be invoked via reflection) that implements the specified method, by scanning through all implemented interfaces and subinterfaces. If no such Method can be found, return null.
            Parameters:
            clazz - Parent class for the interfaces to be checked
            methodName - Method name of the method we wish to call
            parameterTypes - The parameter type signatures


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/util/RequestUtils.html0000644000175000017500000010717310404045224027671 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class RequestUtils

            org.apache.struts.util
            Class RequestUtils

            java.lang.Object
              |
              +--org.apache.struts.util.RequestUtils
            

            public class RequestUtils
            extends java.lang.Object

            General purpose utility methods related to processing a servlet request in the Struts controller framework.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan

            Field Summary
            private static java.util.Locale defaultLocale
                      The default Locale for our server.
            private static MessageResources messages
                      The message resources for this package.
             
            Constructor Summary
            RequestUtils()
                       
             
            Method Summary
            static java.net.URL absoluteURL(javax.servlet.http.HttpServletRequest request, java.lang.String path)
                      Create and return an absolute URL for the specified context-relative path, based on the server and context information in the specified request.
            static java.util.Map computeParameters(javax.servlet.jsp.PageContext pageContext, java.lang.String paramId, java.lang.String paramName, java.lang.String paramProperty, java.lang.String paramScope, java.lang.String name, java.lang.String property, java.lang.String scope, boolean transaction)
                      Compute a set of query parameters that will be dynamically added to a generated URL.
            static java.lang.String computeURL(javax.servlet.jsp.PageContext pageContext, java.lang.String forward, java.lang.String href, java.lang.String page, java.util.Map params, java.lang.String anchor, boolean redirect)
                      Compute a hyperlink URL based on the forward, href, or page parameter that is not null.
            static java.lang.Object lookup(javax.servlet.jsp.PageContext pageContext, java.lang.String name, java.lang.String scope)
                      Locate and return the specified bean, from an optionally specified scope, in the specified page context.
            static java.lang.Object lookup(javax.servlet.jsp.PageContext pageContext, java.lang.String name, java.lang.String property, java.lang.String scope)
                      Locate and return the specified property of the specified bean, from an optionally specified scope, in the specified page context.
            static java.lang.String message(javax.servlet.jsp.PageContext pageContext, java.lang.String bundle, java.lang.String locale, java.lang.String key)
                      Look up and return a message string, based on the specified parameters.
            static java.lang.String message(javax.servlet.jsp.PageContext pageContext, java.lang.String bundle, java.lang.String locale, java.lang.String key, java.lang.Object[] args)
                      Look up and return a message string, based on the specified parameters.
            static void populate(java.lang.Object bean, javax.servlet.http.HttpServletRequest request)
                      Populate the properties of the specified JavaBean from the specified HTTP request, based on matching each parameter name against the corresponding JavaBeans "property setter" methods in the bean's class.
            static void populate(java.lang.Object bean, java.lang.String prefix, java.lang.String suffix, javax.servlet.http.HttpServletRequest request)
                      Populate the properties of the specified JavaBean from the specified HTTP request, based on matching each parameter name (plus an optional prefix and/or suffix) against the corresponding JavaBeans "property setter" methods in the bean's class.
            static boolean present(javax.servlet.jsp.PageContext pageContext, java.lang.String bundle, java.lang.String locale, java.lang.String key)
                      Return true if a message string for the specified message key is present for the specified Locale.
            static java.lang.String printableURL(java.net.URL url)
                      Compute the printable representation of a URL, leaving off the scheme/host/port part if no host is specified.
            static java.net.URL requestURL(javax.servlet.http.HttpServletRequest request)
                      Return the URL representing the current request.
            static void saveException(javax.servlet.jsp.PageContext pageContext, java.lang.Throwable exception)
                      Save the specified exception as a request attribute for later use.
            static java.net.URL serverURL(javax.servlet.http.HttpServletRequest request)
                      Return the URL representing the scheme, server, and port number of the current request.
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            defaultLocale

            private static final java.util.Locale defaultLocale
            The default Locale for our server.

            messages

            private static MessageResources messages
            The message resources for this package.
            Constructor Detail

            RequestUtils

            public RequestUtils()
            Method Detail

            absoluteURL

            public static java.net.URL absoluteURL(javax.servlet.http.HttpServletRequest request,
                                                   java.lang.String path)
                                            throws java.net.MalformedURLException
            Create and return an absolute URL for the specified context-relative path, based on the server and context information in the specified request.
            Parameters:
            request - The servlet request we are processing
            path - The context-relative path (must start with '/')
            Throws:
            java.net.MalformedURLException - if we cannot create an absolute URL

            computeParameters

            public static java.util.Map computeParameters(javax.servlet.jsp.PageContext pageContext,
                                                          java.lang.String paramId,
                                                          java.lang.String paramName,
                                                          java.lang.String paramProperty,
                                                          java.lang.String paramScope,
                                                          java.lang.String name,
                                                          java.lang.String property,
                                                          java.lang.String scope,
                                                          boolean transaction)
                                                   throws javax.servlet.jsp.JspException
            Compute a set of query parameters that will be dynamically added to a generated URL. The returned Map is keyed by parameter name, and the values are either null (no value specified), a String (single value specified), or a String[] array (multiple values specified). Parameter names correspond to the corresponding attributes of the <html:link> tag. If no query parameters are identified, return null.
            Parameters:
            pageContext - PageContext we are operating in
            paramId - Single-value request parameter name (if any)
            paramName - Bean containing single-value parameter value
            paramProperty - Property (of bean named by paramName containing single-value parameter value
            paramScope - Scope containing bean named by paramScope
            name - Bean containing multi-value parameters Map (if any)
            property - Property (of bean named by name containing multi-value parameters Map
            scope - Scope containing bean named by name
            transaction - Should we add our transaction control token?
            Throws:
            javax.servlet.jsp.JspException - if we cannot look up the required beans
            javax.servlet.jsp.JspException - if a class cast exception occurs on a looked-up bean or property

            computeURL

            public static java.lang.String computeURL(javax.servlet.jsp.PageContext pageContext,
                                                      java.lang.String forward,
                                                      java.lang.String href,
                                                      java.lang.String page,
                                                      java.util.Map params,
                                                      java.lang.String anchor,
                                                      boolean redirect)
                                               throws java.net.MalformedURLException
            Compute a hyperlink URL based on the forward, href, or page parameter that is not null. The returned URL will have already been passed to response.encodeURL() for adding a session identifier.
            Parameters:
            pageContext - PageContext for the tag making this call
            forward - Logical forward name for which to look up the context-relative URI (if specified)
            href - URL to be utilized unmodified (if specified)
            page - Context-relative page for which a URL should be created (if specified)
            params - Map of parameters to be dynamically included (if any)
            anchor - Anchor to be dynamically included (if any)
            redirect - Is this URL for a response.sendRedirect()?
            Throws:
            java.net.MalformedURLException - if a URL cannot be created for the specified parameters

            lookup

            public static java.lang.Object lookup(javax.servlet.jsp.PageContext pageContext,
                                                  java.lang.String name,
                                                  java.lang.String scope)
                                           throws javax.servlet.jsp.JspException
            Locate and return the specified bean, from an optionally specified scope, in the specified page context. If no such bean is found, return null instead. If an exception is thrown, it will have already been saved via a call to saveException().
            Parameters:
            pageContext - Page context to be searched
            name - Name of the bean to be retrieved
            scope - Scope to be searched (page, request, session, application) or null to use findAttribute() instead
            Throws:
            javax.servlet.jsp.JspException - if an invalid scope name is requested

            lookup

            public static java.lang.Object lookup(javax.servlet.jsp.PageContext pageContext,
                                                  java.lang.String name,
                                                  java.lang.String property,
                                                  java.lang.String scope)
                                           throws javax.servlet.jsp.JspException
            Locate and return the specified property of the specified bean, from an optionally specified scope, in the specified page context. If an exception is thrown, it will have already been saved via a call to saveException().
            Parameters:
            pageContext - Page context to be searched
            name - Name of the bean to be retrieved
            property - Name of the property to be retrieved, or null to retrieve the bean itself
            scope - Scope to be searched (page, request, session, application) or null to use findAttribute() instead
            Throws:
            javax.servlet.jsp.JspException - if an invalid scope name is requested
            javax.servlet.jsp.JspException - if the specified bean is not found
            javax.servlet.jsp.JspException - if accessing this property causes an IllegalAccessException, IllegalArgumentException, InvocationTargetException, or NoSuchMethodException

            message

            public static java.lang.String message(javax.servlet.jsp.PageContext pageContext,
                                                   java.lang.String bundle,
                                                   java.lang.String locale,
                                                   java.lang.String key)
                                            throws javax.servlet.jsp.JspException
            Look up and return a message string, based on the specified parameters.
            Parameters:
            pageContext - The PageContext associated with this request
            bundle - Name of the servlet context attribute for our message resources bundle
            locale - Name of the session attribute for our user's Locale
            key - Message key to be looked up and returned
            Throws:
            javax.servlet.jsp.JspException - if a lookup error occurs (will have been saved in the request already)

            message

            public static java.lang.String message(javax.servlet.jsp.PageContext pageContext,
                                                   java.lang.String bundle,
                                                   java.lang.String locale,
                                                   java.lang.String key,
                                                   java.lang.Object[] args)
                                            throws javax.servlet.jsp.JspException
            Look up and return a message string, based on the specified parameters.
            Parameters:
            pageContext - The PageContext associated with this request
            bundle - Name of the servlet context attribute for our message resources bundle
            locale - Name of the session attribute for our user's Locale
            key - Message key to be looked up and returned
            args - Replacement parameters for this message
            Throws:
            javax.servlet.jsp.JspException - if a lookup error occurs (will have been saved in the request already)

            populate

            public static void populate(java.lang.Object bean,
                                        javax.servlet.http.HttpServletRequest request)
                                 throws javax.servlet.ServletException
            Populate the properties of the specified JavaBean from the specified HTTP request, based on matching each parameter name against the corresponding JavaBeans "property setter" methods in the bean's class. Suitable conversion is done for argument types as described under convert().
            Parameters:
            bean - The JavaBean whose properties are to be set
            request - The HTTP request whose parameters are to be used to populate bean properties
            Throws:
            javax.servlet.ServletException - if an exception is thrown while setting property values

            populate

            public static void populate(java.lang.Object bean,
                                        java.lang.String prefix,
                                        java.lang.String suffix,
                                        javax.servlet.http.HttpServletRequest request)
                                 throws javax.servlet.ServletException
            Populate the properties of the specified JavaBean from the specified HTTP request, based on matching each parameter name (plus an optional prefix and/or suffix) against the corresponding JavaBeans "property setter" methods in the bean's class. Suitable conversion is done for argument types as described under setProperties().

            If you specify a non-null prefix and a non-null suffix, the parameter name must match both conditions for its value(s) to be used in populating bean properties. If the request's content type is "multipart/form-data" and the method is "POST", the HttpServletRequest object will be wrapped in a MultipartRequestWrapper object.

            Parameters:
            bean - The JavaBean whose properties are to be set
            prefix - The prefix (if any) to be prepend to bean property names when looking for matching parameters
            suffix - The suffix (if any) to be appended to bean property names when looking for matching parameters
            request - The HTTP request whose parameters are to be used to populate bean properties
            Throws:
            javax.servlet.ServletException - if an exception is thrown while setting property values

            present

            public static boolean present(javax.servlet.jsp.PageContext pageContext,
                                          java.lang.String bundle,
                                          java.lang.String locale,
                                          java.lang.String key)
                                   throws javax.servlet.jsp.JspException
            Return true if a message string for the specified message key is present for the specified Locale.
            Parameters:
            pageContext - The PageContext associated with this request
            bundle - Name of the servlet context attribute for our message resources bundle
            locale - Name of the session attribute for our user's Locale
            key - Message key to be looked up and returned
            Throws:
            javax.servlet.jsp.JspException - if a lookup error occurs (will have been saved in the request already)

            printableURL

            public static java.lang.String printableURL(java.net.URL url)
            Compute the printable representation of a URL, leaving off the scheme/host/port part if no host is specified. This will typically be the case for URLs that were originally created from relative or context-relative URIs.
            Parameters:
            url - URL to render in a printable representation

            requestURL

            public static java.net.URL requestURL(javax.servlet.http.HttpServletRequest request)
                                           throws java.net.MalformedURLException
            Return the URL representing the current request. This is equivalent to HttpServletRequest.getRequestURL() in Servlet 2.3.
            Parameters:
            request - The servlet request we are processing
            Throws:
            java.net.MalformedURLException - if a URL cannot be created

            serverURL

            public static java.net.URL serverURL(javax.servlet.http.HttpServletRequest request)
                                          throws java.net.MalformedURLException
            Return the URL representing the scheme, server, and port number of the current request. Server-relative URLs can be created by simply appending the server-relative path (starting with '/') to this.
            Parameters:
            request - The servlet request we are processing
            Throws:
            java.net.MalformedURLException - if a URL cannot be created

            saveException

            public static void saveException(javax.servlet.jsp.PageContext pageContext,
                                             java.lang.Throwable exception)
            Save the specified exception as a request attribute for later use.
            Parameters:
            pageContext - The PageContext for the current page
            exception - The exception to be saved


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/util/ResponseUtils.html0000644000175000017500000003210010404045216030023 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class ResponseUtils

            org.apache.struts.util
            Class ResponseUtils

            java.lang.Object
              |
              +--org.apache.struts.util.ResponseUtils
            

            public class ResponseUtils
            extends java.lang.Object

            General purpose utility methods related to generating a servlet response in the Struts controller framework.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan

            Field Summary
            protected static MessageResources messages
                      The message resources for this package.
             
            Constructor Summary
            ResponseUtils()
                       
             
            Method Summary
            static java.lang.String filter(java.lang.String value)
                      Filter the specified string for characters that are senstive to HTML interpreters, returning the string with these characters replaced by the corresponding character entities.
            static void write(javax.servlet.jsp.PageContext pageContext, java.lang.String text)
                      Write the specified text as the response to the writer associated with this page.
            static void writePrevious(javax.servlet.jsp.PageContext pageContext, java.lang.String text)
                      Write the specified text as the response to the writer associated with the body content for the tag within which we are currently nested.
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            messages

            protected static MessageResources messages
            The message resources for this package.
            Constructor Detail

            ResponseUtils

            public ResponseUtils()
            Method Detail

            filter

            public static java.lang.String filter(java.lang.String value)
            Filter the specified string for characters that are senstive to HTML interpreters, returning the string with these characters replaced by the corresponding character entities.
            Parameters:
            value - The string to be filtered and returned

            write

            public static void write(javax.servlet.jsp.PageContext pageContext,
                                     java.lang.String text)
                              throws javax.servlet.jsp.JspException
            Write the specified text as the response to the writer associated with this page. WARNING - If you are writing body content from the doAfterBody() method of a custom tag class that implements BodyTag, you should be calling writePrevious() instead.
            Parameters:
            pageContext - The PageContext object for this page
            text - The text to be written
            Throws:
            javax.servlet.jsp.JspException - if an input/output error occurs (already saved)

            writePrevious

            public static void writePrevious(javax.servlet.jsp.PageContext pageContext,
                                             java.lang.String text)
                                      throws javax.servlet.jsp.JspException
            Write the specified text as the response to the writer associated with the body content for the tag within which we are currently nested.
            Parameters:
            pageContext - The PageContext object for this page
            text - The text to be written
            Throws:
            javax.servlet.jsp.JspException - if an input/output error occurs (already saved)


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/util/ServletContextWriter.html0000644000175000017500000010371210404045232031400 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class ServletContextWriter

            org.apache.struts.util
            Class ServletContextWriter

            java.lang.Object
              |
              +--java.io.Writer
                    |
                    +--java.io.PrintWriter
                          |
                          +--org.apache.struts.util.ServletContextWriter
            

            public class ServletContextWriter
            extends java.io.PrintWriter

            A PrintWriter implementation that uses the logging facilities of a javax.servlet.ServletContext to output its results. Output will be buffered until a newline character is output, flush() is called, or until one of the println() methods is called. Along the way, carriage return characters are skipped.

            Version:
            $Revision: 1.1 $ $Date: 2001-09-17 21:13:30 +0100 (Mon, 17 Sep 2001) $
            Author:
            Craig R. McClanahan

            Field Summary
            protected  java.lang.StringBuffer buffer
                      The buffer into which we accumulate lines to be logged.
            protected  javax.servlet.ServletContext context
                      The servlet context with which we are associated.
            protected  boolean error
                      The error state for this stream.
             
            Fields inherited from class java.io.PrintWriter
            autoFlush, lineSeparator, out, trouble
             
            Fields inherited from class java.io.Writer
            lock, writeBuffer, writeBufferSize
             
            Constructor Summary
            ServletContextWriter(javax.servlet.ServletContext context)
                      Construct a ServletContextWriter associated with the specified ServletContext instance.
             
            Method Summary
             boolean checkError()
                      Flush the stream and check for its error state.
             void close()
                      Close the stream.
             void flush()
                      Flush the stream.
             void print(boolean b)
                      Print a boolean value.
             void print(char c)
                      Print a character value.
             void print(char[] c)
                      Print a character array.
             void print(double d)
                      Print a double value.
             void print(float f)
                      Print a float value.
             void print(int i)
                      Print an integer value.
             void print(long l)
                      Print a long value.
             void print(java.lang.Object o)
                      Print an object.
             void print(java.lang.String s)
                      Print a String value.
             void println()
                      Terminate the current line and flush the buffer.
             void println(boolean b)
                      Print a boolean value and terminate the line.
             void println(char c)
                      Print a character value and terminate the line.
             void println(char[] c)
                      Print a character array and terminate the line.
             void println(double d)
                      Print a double value and terminate the line.
             void println(float f)
                      Print a float value and terminate the line.
             void println(int i)
                      Print an integer value and terminate the line.
             void println(long l)
                      Print a long value and terminate the line.
             void println(java.lang.Object o)
                      Print an object and terminate the line.
             void println(java.lang.String s)
                      Print a String value and terminate the line.
             void setError()
                      Set the error state for this stream.
             void write(char c)
                      Write a single character to this stream.
             void write(char[] buf)
                      Write an array of charaters to this stream.
             void write(char[] buf, int off, int len)
                      Write the specified subset of an array of characters to this stream.
             void write(int c)
                      Write a single character to this stream.
             void write(java.lang.String s)
                      Write a String to this stream.
             void write(java.lang.String s, int off, int len)
                      Write the specified portion of a String to this stream.
             
            Methods inherited from class java.io.PrintWriter
            ensureOpen, newLine
             
            Methods inherited from class java.lang.Object
            , clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
             

            Field Detail

            buffer

            protected java.lang.StringBuffer buffer
            The buffer into which we accumulate lines to be logged.

            context

            protected javax.servlet.ServletContext context
            The servlet context with which we are associated.

            error

            protected boolean error
            The error state for this stream.
            Constructor Detail

            ServletContextWriter

            public ServletContextWriter(javax.servlet.ServletContext context)
            Construct a ServletContextWriter associated with the specified ServletContext instance.
            Parameters:
            context - The associated servlet context
            Method Detail

            checkError

            public boolean checkError()
            Flush the stream and check for its error state. IMPLEMENTATION NOTE - our associated servlet context gives no indication of problems with logging, so the only way this method will return true is if setError() is called.
            Overrides:
            checkError in class java.io.PrintWriter

            close

            public void close()
            Close the stream.
            Overrides:
            close in class java.io.PrintWriter

            flush

            public void flush()
            Flush the stream.
            Overrides:
            flush in class java.io.PrintWriter

            print

            public void print(boolean b)
            Print a boolean value.
            Overrides:
            print in class java.io.PrintWriter
            Parameters:
            b - The value to be printed

            print

            public void print(char c)
            Print a character value.
            Overrides:
            print in class java.io.PrintWriter
            Parameters:
            c - The value to be printed

            print

            public void print(char[] c)
            Print a character array.
            Overrides:
            print in class java.io.PrintWriter
            Parameters:
            c - The character array to be printed

            print

            public void print(double d)
            Print a double value.
            Overrides:
            print in class java.io.PrintWriter
            Parameters:
            d - The value to be printed

            print

            public void print(float f)
            Print a float value.
            Overrides:
            print in class java.io.PrintWriter
            Parameters:
            f - The value to be printed

            print

            public void print(int i)
            Print an integer value.
            Overrides:
            print in class java.io.PrintWriter
            Parameters:
            i - The value to be printed

            print

            public void print(long l)
            Print a long value.
            Overrides:
            print in class java.io.PrintWriter
            Parameters:
            l - The value to be printed

            print

            public void print(java.lang.Object o)
            Print an object.
            Overrides:
            print in class java.io.PrintWriter
            Parameters:
            o - The value to be printed

            print

            public void print(java.lang.String s)
            Print a String value.
            Overrides:
            print in class java.io.PrintWriter
            Parameters:
            s - The value to be printed

            println

            public void println()
            Terminate the current line and flush the buffer.
            Overrides:
            println in class java.io.PrintWriter

            println

            public void println(boolean b)
            Print a boolean value and terminate the line.
            Overrides:
            println in class java.io.PrintWriter
            Parameters:
            b - The value to be printed

            println

            public void println(char c)
            Print a character value and terminate the line.
            Overrides:
            println in class java.io.PrintWriter
            Parameters:
            c - The value to be printed

            println

            public void println(char[] c)
            Print a character array and terminate the line.
            Overrides:
            println in class java.io.PrintWriter
            Parameters:
            c - The character array to be printed

            println

            public void println(double d)
            Print a double value and terminate the line.
            Overrides:
            println in class java.io.PrintWriter
            Parameters:
            d - The value to be printed

            println

            public void println(float f)
            Print a float value and terminate the line.
            Overrides:
            println in class java.io.PrintWriter
            Parameters:
            f - The value to be printed

            println

            public void println(int i)
            Print an integer value and terminate the line.
            Overrides:
            println in class java.io.PrintWriter
            Parameters:
            i - The value to be printed

            println

            public void println(long l)
            Print a long value and terminate the line.
            Overrides:
            println in class java.io.PrintWriter
            Parameters:
            l - The value to be printed

            println

            public void println(java.lang.Object o)
            Print an object and terminate the line.
            Overrides:
            println in class java.io.PrintWriter
            Parameters:
            o - The value to be printed

            println

            public void println(java.lang.String s)
            Print a String value and terminate the line.
            Overrides:
            println in class java.io.PrintWriter
            Parameters:
            s - The value to be printed

            setError

            public void setError()
            Set the error state for this stream.
            Overrides:
            setError in class java.io.PrintWriter

            write

            public void write(char c)
            Write a single character to this stream.
            Parameters:
            c - The character to be written

            write

            public void write(int c)
            Write a single character to this stream.
            Overrides:
            write in class java.io.PrintWriter
            Parameters:
            c - The character to be written

            write

            public void write(char[] buf)
            Write an array of charaters to this stream.
            Overrides:
            write in class java.io.PrintWriter
            Parameters:
            buf - The character array to be written

            write

            public void write(char[] buf,
                              int off,
                              int len)
            Write the specified subset of an array of characters to this stream.
            Overrides:
            write in class java.io.PrintWriter
            Parameters:
            buf - The character array from which to write
            off - The zero-relative starting offset to write
            len - The number of characters to write

            write

            public void write(java.lang.String s)
            Write a String to this stream.
            Overrides:
            write in class java.io.PrintWriter
            Parameters:
            s - The string to be written

            write

            public void write(java.lang.String s,
                              int off,
                              int len)
            Write the specified portion of a String to this stream.
            Overrides:
            write in class java.io.PrintWriter
            Parameters:
            s - The String from which to write
            off - The zero-relative starting offset to write
            len - The number of characters to write


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/util/package-frame.html0000644000175000017500000000421610404045210027670 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Package org.apache.struts.util org.apache.struts.util
            Classes 
            ArrayStack
            BeanUtils
            ConvertUtils
            ErrorMessages
            FastArrayList
            FastHashMap
            FastTreeMap
            GenericConnection
            GenericDataSource
            IteratorAdapter
            MessageResources
            MessageResourcesFactory
            PropertyMessageResources
            PropertyMessageResourcesFactory
            PropertyUtils
            RequestUtils
            ResponseUtils
            ServletContextWriter
            libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/util/package-summary.html0000644000175000017500000012445310404045246030312 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Package org.apache.struts.util

            Package org.apache.struts.util

            The Utilities package provides a variety of families of classes, to solve problems that are commonly encountered in building web applications.

            See:
                      Description

            Class Summary
            ArrayStack Implementation of the java.util.Stack API that is based on an ArrayList rather than a Vector.
            BeanUtils Deprecated. At some point after Struts 1.0 final, will be replaced by an equivalent class in the Jakarta Commons Beanutils package.
            ConvertUtils Deprecated. At some point after Struts 1.0 final, will be replaced by an equivalent class in the Jakarta Commons Beanutils package.
            ErrorMessages Deprecated. Use org.apache.struts.action.ActionErrors instead
            FastArrayList Deprecated. At some point after Struts 1.0 final, will be replaced by an equivalent class in the Jakarta Commons Collections package.
            FastHashMap Deprecated. At some point after Struts 1.0 final, will be replaced by an equivalent class in the Jakarta Commons Collections package.
            FastTreeMap Deprecated. At some point after Struts 1.0 final, will be replaced by an equivalent class in the Jakarta Commons Collections package.
            GenericConnection Generic wrapper implementation of a Connection that works with GenericDataSource to wrap connections for any JDBC driver.
            GenericDataSource Generic data source implementation of the DataSource interface.
            IteratorAdapter Utility method for converting Enumeration to an Iterator class.
            MessageResources General purpose abstract class that describes an API for retrieving Locale-sensitive messages from underlying resource locations of an unspecified design, and optionally utilizing the MessageFormat class to produce internationalized messages with parametric replacement.
            MessageResourcesFactory Factory for MessageResources instances.
            PropertyMessageResources Concrete subclass of MessageResources that reads message keys and corresponding strings from named property resources in the same manner that java.util.PropertyResourceBundle does.
            PropertyMessageResourcesFactory Factory for PropertyMessageResources instances.
            PropertyUtils Deprecated. At some point after Struts 1.0 final, will be replaced by an equivalent class in the Jakarta Commons Beanutils package.
            RequestUtils General purpose utility methods related to processing a servlet request in the Struts controller framework.
            ResponseUtils General purpose utility methods related to generating a servlet response in the Struts controller framework.
            ServletContextWriter A PrintWriter implementation that uses the logging facilities of a javax.servlet.ServletContext to output its results.
             

            Package org.apache.struts.util Description

            The Utilities package provides a variety of families of classes, to solve problems that are commonly encountered in building web applications.


            Introduction

            The Struts Utilities Package offers several families of classes that assist in solving commonly encountered problems when building web applications. Most of the classes in this package do not rely on the controller servlet framework, or the custom tag libraries, so they are also suitable for general Java application programming. The following families are included:

            • Beans and Properties - A family of utility classes for manipulating JavaBeans, as well as getting and setting properties, without hard coding the names or data types of the property getter and setter methods.
            • Collection Classes - A family of specialized classes supporting the Collections API, designed for use in multithread environments where the vast majority of accesses are read only.
            • JDBC Connection Pool - A very simple connection pool that can be utilized in web applications or other environments that need to share a limited number of JDBC Connections across a much larger number of active users.
            • Message Resources - A family of classes that features access to internationalized message strings based on a message key coupled with a java.util.Locale object representing a particular user's preferred language.

            Beans and Properties

            FIXME

            FIXME some parts of this might me moved to Taglibs

            The BeanUtils and PropertyUtils utilities are used through out struts including the IteratorTag, WriteTag. Much of these utilities rely on and make use of Java reflection, to manipulate Java beans . Creating a valid Java bean is essential ! Briefly referring to the example class ProductBean below would follow these rules :

            • The class must a null constructor, or no constructor
            • It's class declaration must be public
            • The name for the property say 'value' would have a 'get' method of getValue()
            • The 'get' and 'set' methods to be visible must be public.
            • If desired the 'is' prefix can be used in place if 'get' for a boolean.
            • Other requirements can be found here.
                    public class ProductBean() {
                       private String value;
                       public String getvalue() (return this.value}
                       public void setvalue(String value) (this.value = value}
                    }
                

            Observing these conventions will avoid unnecessary errors and save time.

            This makes it possible to create a JSP page such as:

                    <logic:iterate id="product" name="receivedForm" property="receivedList">
                          <bean:write name="product" property="description" />
                          <bean:write name="product" property="value" />
                    </logic:iterate>
                
            In this case receiveForm is an ActionForm, with a definition such as
                    public class ReceivedForm extends ActionForm  {
                     private ProductList productList;
                     public void setReceivedList(Enumeration enum) {
                         productList = new ProductList(enum,Limits.ARRAY_SIZE_MIN);
                     }
                     /**
                      * Defined so java.bean reflection will see getReceivedList
                      * as a getter for receivedList
                      */
                     public void setReceivedList(ProductList productlist) {
            
                     }
            
                     /**
                      * Returns an Array list of ProductBeans.
                      */
                     public ProductList getReceivedList() {
                       return productList;
                     };
                   } //ReceiveForm
            

            Collection Classes

            Background

            Version 1.2 of the Java 2 Standard Edition (J2SE) introduced a powerful set of collection classes that are generally useful in Java programming, based on the fundamental interfaces java.util.Collection, java.util.List, java.util.Map, and java.util.Set. Compared to the collection classes available in JDK 1.1 (principally java.util.Hashtable and java.util.Vector), the new classes offer much richer functionality as well as the opportunity to improve performance.

            The performance increase potential comes from the fact that none of the methods used to access the new collection classes are synchronized as were the methods of Hashtable and Vector. In a single thread application, this means that method calls can execute much more quickly because synchronization is never necessary. In a multiple thread environment, though, it is up to the developer to ensure that any method calls made while another thread is modifying the collection must be synchronized.

            There are many cases in multithreaded server environments (such as a web application) where data structures are initialized at application startup time, and are then predominantly accessed in a read-only manner. An example of this is the Struts controller application, which initializes its collection of ActionMapping instances (each corresponding to an <action> element in the struts-config.xml file) at startup time. However, it is legal for an application to dynamically change the set of available mappings while the application is running -- so, to be safe, it would normally be necessary to synchronize access to such collections, even though 99% of those accesses are read only and would not otherwise require synchronization.

            To deal with such scenarios, the Struts utility package includes a series of specialized collection classes designed to operate in a multithread environment where the large majority of accesses are read only, without requiring synchronization on every operation, but still protecting against the possibility of runtime modifications to the underlying collection.

            Theory of Operation

            Each of the available collection classes operates in one of two modes: fast or slow. When first created, the collection operates in slow mode, which is appropriate for initially populating the contents of the collection. Once the initial population is complete, switch to fast mode by calling setFast(true) for maximum performance when most accesses are read-only.

            When operating in slow mode, all methods that access this collection, even read-only methods, are synchronized - resulting in impacts on performance similar to that always performed by the Hashtable and Vector classes. This mode is appropriate when you are initializing the content of the collection, or when you need to perform a large series of updates.

            Using fast mode, on the other hand, causes method calls to operate in the following manner:

            • Method calls that access information from the collection, but do not modify it, are executed without synchronization.
            • Method calls that modify the structure of a collection do so by synchronizing, cloning the existing collection instance, modifying the cloned instance, and then replacing the current collection instance.

            As you can see, modification operations are much more expensive when operating in fast mode, but doing things in this way allows read only operations, which should be the vast majority, to operate at maximum speed.

            If your collection will never be accessed in a multithread environment, you should use one of the standard collection classes instead, without synchronization, for maximum performance.

            Available Collection Classes

            The following collection classes, with the ability to operate in either fast or slow mode, are included:

            JDBC Connection Pool

            Background

            A large number of web applications require interaction with a relational database to access or update persistently stored information. In a typical client-server application, each concurrent user opens their own database connection at program initialization, and uses this connection throughout the period of time the application is open.

            While this approach can work well in an environment where the number of active users is reasonably fixed, it does not scale well to a web application where the number of simultaneous users could be very large. In addition, open database connections (even when not actively used) do impose some overhead costs, and most web application users (at a given instant) are reviewing the contents of a previously generated page (or typing in their next set of input information), rather than actively accessing the database.

            To deal with this situation, several basic strategies are possible:

            1. Open a connection on each request, do whatever processing is required, and then close the connection.
            2. Open a connection for each user, and store it in the user's session.
            3. Share a "pool" of open connections between all of the application's current users.

            The first strategy has the virtue of simplicity - you merely need to open a database connection any time you need one, perform the appropriate data accesses and updates, and close the connection. However, it suffers from a major disadvantage: on most databases, establishing a connection can be very time consuming (often requiring multiple seconds of clock time), in order to perform a database transaction that might take milliseconds.

            Opening a connection per user, as the second strategy suggests, is similar to the approach taken with client-server applications described earlier. As long as the number of simultaneous users can be controlled at a manageable number (such as with many intranet-based applications), this approach is feasible. However, it becomes unmanageable when the number of users can climb rapidly to very large numbers (as is typical of many Internet-hosted public applications), and still requires more overhead than a strategy that would share a smaller number of connections.

            Connection pooling is an implementation of the third strategy. It is based on the assumption that most users of a web application will be interacting locally with the last page that was sent to their browser. The number of users actually performing a request at any given time is usually a very small percentage of the total number of active users, and during request processing is the only time that a database connection is required.

            Struts provides a simple connection pool class called org.apache.struts.util.GenericDataSource. It allows you to configure a set of connections (with identical connection parameters) to a particular database, using a particular JDBC driver, and then share those connections among a number of simultaneously operating threads (such as the various request threads that are concurrently active in a servlet container). The GenericDataSource class implements the javax.sql.DataSource interface from the Java Database Connectivity (version 2.0) Standard Extension API, so any programs you use to access it should reference this interface, rather than the class name directly. That way, you can migrate to a more advanced connection pool implementation later, with little or no impact on your application.

            For more information about the JDBC 2.0 Standard Extension API, you can download the spec (and the corresponding API classes), from http://java.sun.com/products/jdbc. You can also find pointers to a substantial amount of other information about available JDBC drivers, programming tutorials, and so on, at this web address.

            Initializing and Finalizing the Connection Pool

            The following instructions show you how to configure the connection pool class and use it, from any Java application. As you will see below, the Struts controller servlet offers you convenient mechanisms to configure one or more connection pools, and make them available to Action classes and JSP pages by storing the connection pool instances as servlet context attributes (in JSP terms, application-scope beans).

            To configure a GenericDataSource instance, you must first create one:

                GenericDataSource dataSource =
                  new GenericDataSource();
            

            Next, you must set the appropriate properties, by calling the corresponding JavaBeans property setter methods provided by this class. (See the Javadoc API for the GenericDataSource class for more details on the available properties). An example of configuring the connection pool object to a Postgres database might look like this:

                dataSource.setAutoCommit(false);
                dataSource.setDescription("My Database Connection Pool");
                dataSource.setDriverClass("org.postgresql.Driver");
                dataSource.setMaxCount(4);
                dataSource.setMinCount(1);
                dataSource.setPassword("mypassword");
                dataSource.setUrl("jdbc:postgresql://localhost/mydatabase");
                dataSource.setUser("myusername");
            

            Finally, you must open() the connection pool. This will establish the initial connections to the database (based on the value you have configured for the minCount property). As you use connections from the pool in multiple threads, additional connections (up to the number you specify with the maxCount property) will be created as needed.

                try {
                    dataSource.open();
                } catch (SQLException e) {
                    ... deal with exception ...
                }
            

            When you are completely through with the connection pool, you can gracefully close all of the currently open database connections by executing

                try {
                    dataSource.close();
                } catch (SQLException e) {
                    ... deal with exception ...
                }
            
            Using the Generic Connection Pool

            To access the database from within an application class, you must follow a simple four-step procedure each time you need a connection:

            1. Acquire a connection from the connection pool.
            2. Perform the database operations required by your application.
            3. Cause the last database transaction to be committed or rolled back (commits are required on many databases to ensure that the database operations you just performed are permanently stored or not).
            4. "Close" the connection, which returns it to the connection pool for reuse later.

            An example code sequence that performs this procedure might look like this:

                DataSource dataSource = ... acquire reference to dataSource ...
                Connection conn = null;
                PreparedStatement stmt = null;
                ResultSet rs = null;
                try {
                    conn = dataSource.getConnection();
                    stmt = conn.prepareStatement("SELECT cust_id, name FROM customers" +
                      " WHERE (last_purchase_date >= ?)" +
                      " ORDER BY name");
                    stmt.setDate(1, lastPurchaseDate);
                    rs = stmt.executeQuery();
                    while ((row = rs.next()) != null) {
                        ... process this row ...
                    }
                    rs.close();
                    rs = null;
                    stmt.close();
                    stmt = null;
                    conn.commit();
                    conn.close();
                    conn = null;
                } catch (SQLException e) {
                    if (rs != null) {
                        try {
                            rs.close();
                        } catch (SQLException f) {
                            ;
                        }
                        rs = null;
                    }
                    if (stmt != null) {
                        try {
                            stmt.close();
                        } catch (SQLException f) {
                            ;
                        }
                        stmt = null;
                    }
                    if (conn != null) {
                        try {
                            conn.rollback();
                        } catch (SQLException f) {
                            ... deal with exception ...
                        }
                    }
                    ... deal with exception ...
                } finally {
                    if (conn != null) {
                        try {
                            conn.close();
                        } catch (SQLException f) {
                            ... deal with exception ...
                        }
                        conn = null;
                    }
                }
            

            One aspect of the above code example that might surprise developers who have previously used JDBC connections individually is the idea of calling close() on the Connection. Normally, this call will sever the Connection's underlying link to the database, and render that Connection unuseable for any further operations. However, when used in a connection pool environment, the actual Connection you receive by calling getConnection() is a customized "wrapper" around a real JDBC Connection instance. Calling close() on this wrapper simply causes this connection to be returned to the pool.

            What would happen if your application failed to return a connection to the pool when it was through? As you might expect, that particular connection becomes "lost" to the server, and can never again be used (even though it remains connected to the database throughout the life of the connection pool itself). If this happens repeatedly, you will eventually exhaust the pool of available connections, and application processing will stop.

            To avoid this problem, your application logic must ensure that it ALWAYS returns allocated connections to the pool, no matter what problems might happen in the interim. The Java language provides one convenient mechanism to achieve this - using a finally block, as in the code example above. This is not the only way to ensure that a connection is always returned, but it is very convenient.

            Using Connection Pools with the Struts Controller Servlet

            If your application is running underneath the Struts controller servlet (org.apache.struts.action.ActionServlet), you can take advantage of the servlet's ability to preconfigure one or more connection pools for you, based on information included in the struts-config.xml file. Simply include a section that looks like this:

                <data-sources>
                  <data-source>
                    <set-property property="autoCommit"
                                  value="false"/>
                    <set-property property="description"
                                  value="Example Data Source Configuration"/>
                    <set-property property="driverClass"
                                  value="org.postgresql.Driver"/>
                    <set-property property="maxCount"
                                  value="4"/>
                    <set-property property="minCount"
                                  value="2"/>
                    <set-property property="password"
                                  value="mypassword"/>
                    <set-property property="url"
                                  value="jdbc:postgresql://localhost/mydatabase"/>
                    <set-property property="user"
                                  value="myusername"/>
                  </data-source>
                </data-sources>
            

            After being initialized, the connection pools will be stored as servlet context attributes under the bean name specified by the key attribute. If you did not specify a key, the default key is the value of the string constant Action.DATA_SOURCE_KEY. Thus, you can access and utilize a connection, from within an Action class, like this (for the default data source):

                DataSource dataSource = (DataSource)
                  servlet.getServletContext().getAttribute(Action.DATA_SOURCE_KEY);
                conn = dataSource.getConnection();
                ... perform required functions as in the previous example ...
                conn.close();
            

            Message Resources

            Background

            Modern applications often include the requirement to support multiple languages, for users who prefer to interact in a language other than the default language configured on the server platform. In addition, sentences often need to be constructed, with dynamic content whose placement in the message depends on the standard sentence structure in that particular language.

            The standard Java platform includes a family of classes (java.util.ResourceBundle) designed to support looking up message strings based on a standard "key". The resource bundle classes automatically access a Java class (or properties file) that is named with a naming convention that includes the Locale to which messages in that class (or file) pertain. However, this selection is based only on the default Locale of the server platform, and cannot be adjusted on a per-user basis as required for an internationalized web application.

            Struts includes a family of classes (org.apache.struts.util.MessageResources) that extends the basic approach to looking up message strings by key, allowing you to optionally specify a Locale along with the key. In this way, you can build applications that let your users select which Locale they wish to operate within, and then look up messages in that language - using the same message keys no matter what language is selected.

            In addition to supporting dynamic selection of a Locale for message lookup, the MessageResources family of classes optionally allow you to specify up to four parameter replacement objects, which are used to replace the parameter placeholders "{0}" through "{3}" in the retrieved message. This replacement uses the facilities of the standard Java java.text.MessageFormat class, which supports many extended formatting capabilities as well.

            For more information about internationalized messages, consult the following resources in your Java Development Kit documentation bundle:

            • Internationalization Info - General information on Java's standard support for internationalized applications can be found at <$JAVA_HOME/docs/guide/internat/index.html>. The "Internationalization Overview" section includes useful information about Locales, localized resources, message formatting, and other relevant topics.
            • Internationalization Tutorial - The Java Language Tutorial has a comprehensive trail covering internationalization, available at: http://java.sun.com/docs/books/tutorial/i18n/index.html.
            • Javadoc APIs - You will want to consult the Javadoc API documentation for the following standard Java classes:
              • java.text.MessageFormat
              • java.util.ResourceBundle
              • java.util.PropertyResourceBundle
              • java.util.Properties - See the documentation for the load() method for the valid syntax of properties files that you prepare.
            Using the Standard MessageResources Implementation

            The standard MessageResources implementation provided by the Struts library uses Java properties files to initialize message strings, in a manner very similar to that supported by the java.util.PropertyResourceBundle class. The following steps are required to use these facilities in your Java application.

            First, prepare a Java properties file for each language (or Locale) in which you wish to support your messages. The filenames you use must conform to the naming convention for property resource bundles, as described in the documentation referenced above. Be sure you use the same message keys in each file to identify the same message.

            For example, you might prepare files in French, Spanish, and English that contain language-specific versions of the word "Hello". The French file would be named Messages_fr.properties and contain the following:

                hi=Bonjour
            

            while the Spanish and English files would be named Messages_es.properties and Messages_en.properties respectively. The corresponding message string definitions would say hi=Hola and hi=Hello in these files.

            Second, place these properties files into the class path for your application, exactly as you would with class files themselves. The name actually used to load resources will look like a fully qualified Java class name (with appropriate package prefixes), so the file should be nested inside a directory structure that matches the packaging (either in an unpacked directory, or within a JAR file, as appropriate). For example, assume you place directory "foo" on your classpath, and stored the above properties files in directory "foo/com/mycompany/mypackage". (If you were using a JAR file like "foo.jar" instead, the files would be in directory "com/mycompany/mypackage" within the JAR file).

            Third, initialize a MessageResources object that corresponds to the set of properties files for a particular name, within a particular package. The easiest way to do this is to initialize a variable in your main application class, like this:

                public static MessageResources messages =
                 MessageResources.getMessageResources("com.mycompany.mypackage.Messages");
            

            Note that the "com.mycompany.mypackage" part of the name matches the package directory into which you placed your properties files, and "Messages" is the filename prefix for the particular family of properties files supported by this MessageResources instance. Depending on your development process, you might find it convenient to store all message strings for an entire application in a single properties file family, or to have several families - in Struts, for example, there is a family of properties files for each Java package.

            To access a message string with a particular Locale, execute a statement like this:

                Locale locale = ... select the locale to be used ...
                String message = messages.getMessage(locale, "hi");
            

            In this case, the variable message will contain the message string corresponding to the key "hi", in the language that corresponds to the locale that was selected.

            For an example of message formatting with replaceable parameters, assume that the message strings looked like this, instead (only the English version is shown - corresponding changes would be made in the other files):

                hi=Hello {0}
            

            Now, you can personalize the retrieved message like this:

                Locale locale = ... select the locale to be used ...
                String name = "Joe";
                String message = messages.getMessage(locale, "hi", name);
            

            and the marker "{0}" will have been replaced by the specified name (Joe), no matter which language is in use. See the JavaDoc API documentation for the java.text.MessageFormat class for more advanced uses of the parameter replacement mechanism.

            Developing Your Own MessageResources Implementation

            In the above example, we were using the default MessageResources implementation supplied by Struts, which uses property files to store the message strings. It is also possible to create customized mechanisms to retrieve messages (such as loading them on demand from a database). The steps required are as follows:

            • Create a customized subclass of org.apache.struts.util.MessageResources that implements message lookup operations as you require.
            • Create a customized subclass of org.apache.struts.util.MessageResourcesFactory that will create an instance of your custom MessageResources class when the createResources method is called. Note that the "config" argument to this method can be used to select families of messages in any manner appropriate to your needs - you are not required to emulate the "fully qualified Java class name" approach that is used by the standard PropertyMessageResourcesFactory class.
            • Tell the MessageResourcesFactory class the name of the customized MessageResourcesFactory implementation to use when creating new factory instances.
            • Create a new factory instance.
            • Ask the new factory instance to create a MessageResources instance for you.

            A code example that illustrates this technique is:

                MessageResourcesFactory.setFactoryClass("com.mycompany.mypkg.MyFactory");
                MessageResourcesFactory factory = MessageResourcesFactory.createFactory();
                MessageResources resources =
                 factory.createResources("configuration information");
            

            Once you have created your custom MessageResources instance, you utilize it to access message strings (with or without parameter replacement objects), exactly as we illustrated with the standard implementation in the previous section.

            Using MessageResources With Struts

            If your application uses the Struts controller servlet, you can optionally configure Struts to load an application-specific message resources instance for you, and make it available as a servlet context attribute (in JSP terms, an application-scope bean). This mechanism is managed by setting the following servlet initialization parameters in the web application deployment descriptor:

            • application - The configuration string that will be passed to the createResources() method of the message resources factory, in order to identify the family of resources to be supported. If you use the standard message resources factory, this must be the base fully qualified name of the property resources files used to contain these messages, as illustrated above.
            • factory - Fully qualified Java class name of the MessageResourcesFactory to be used. By default, the standard implementation provided by Struts (org.apache.struts.util.PropertyMessageResourcesFactory) will be used.

            Struts provides several JSP custom tags that assume the existence of a java.util.Locale attribute in the user's session, under the key named by the constant string value of Action.LOCALE_KEY. Your own application logic can set this attribute at any time, or you can ask Struts to set it automatically (if not already set) based on the Accept-Language HTTP header included with the request. There are two mechanisms by which you request Struts to perform this service:

            • To have this service performed on every request submitted to the controller servlet, set the servlet initialization parameter locale to the value true in the application deployment descriptor.
            • To have this service performed by a JSP page when it is accessed directly by a user, utilize a <form:html ... locale="true" ... /> tag at the top of each page.



            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/org/apache/struts/util/package-tree.html0000644000175000017500000001757610404045224027557 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: org.apache.struts.util Class Hierarchy

            Hierarchy For Package org.apache.struts.util

            Package Hierarchies:
            All Packages

            Class Hierarchy

            • class java.lang.Object
              • class java.util.AbstractCollection (implements java.util.Collection)
                • class java.util.AbstractList (implements java.util.List)
                  • class java.util.ArrayList (implements java.lang.Cloneable, java.util.List, java.io.Serializable)
              • class java.util.AbstractMap (implements java.util.Map)
                • class java.util.HashMap (implements java.lang.Cloneable, java.util.Map, java.io.Serializable)
                • class java.util.TreeMap (implements java.lang.Cloneable, java.io.Serializable, java.util.SortedMap)
              • class org.apache.struts.util.ArrayStack (implements java.io.Serializable)
              • class org.apache.struts.util.BeanUtils
              • class org.apache.struts.util.ConvertUtils
              • class org.apache.struts.util.ErrorMessages
              • class org.apache.struts.util.GenericConnection (implements java.sql.Connection)
              • class org.apache.struts.util.GenericDataSource (implements javax.sql.DataSource)
              • class org.apache.struts.util.IteratorAdapter (implements java.util.Iterator)
              • class org.apache.struts.util.MessageResources (implements java.io.Serializable)
              • class org.apache.struts.util.MessageResourcesFactory (implements java.io.Serializable)
              • class org.apache.struts.util.PropertyUtils
              • class org.apache.struts.util.RequestUtils
              • class org.apache.struts.util.ResponseUtils
              • class java.io.Writer


            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/allclasses-frame.html0000644000175000017500000004525010404045210024075 0ustar arnaudarnaud00000000000000 All Classes All Classes
            Action
            ActionBase
            ActionError
            ActionErrors
            ActionForm
            ActionFormBean
            ActionFormBeans
            ActionForward
            ActionForwards
            ActionMapping
            ActionMappingBase
            ActionMappings
            ActionServlet
            AddDataSourceRule
            AddFormBeanAction
            AddForwardAction
            AddMappingAction
            ArrayStack
            BaseAttributeTag
            BaseFieldTag
            BaseFieldTag
            BaseHandlerTag
            BaseHandlerTag
            BaseInputTag
            BaseInputTag
            BaseTag
            BaseTag
            BeanUtils
            BufferedMultipartInputStream
            ButtonTag
            ButtonTag
            CallMethodRule
            CallParamRule
            CancelTag
            CancelTag
            CheckboxTag
            CheckboxTag
            CompareTagBase
            ConditionalTagBase
            Constants
            Constants
            Content
            ContentLengthExceededException
            ContentMap
            ContentMapStack
            ConvertUtils
            CookieTag
            CookieTei
            DefineTag
            DefineTei
            Digester
            DiskFile
            DiskMultipartRequestHandler
            DispatchAction
            EncodeRedirectURLTag
            EncodeURLTag
            EnumerateTag
            EnumerateTei
            EqualTag
            ErrorMessages
            ErrorsTag
            ErrorsTag
            FastArrayList
            FastHashMap
            FastTreeMap
            FileTag
            FileTag
            FormFile
            FormTag
            FormTag
            ForwardAction
            ForwardingActionForward
            ForwardTag
            ForwardTag
            GenericConnection
            GenericDataSource
            GetPropertyTag
            GetPropertyTei
            GetTag
            GreaterEqualTag
            GreaterThanTag
            HeaderTag
            HeaderTei
            HiddenTag
            HiddenTag
            HtmlPropertyTag
            HtmlTag
            IfAttributeExistsTag
            IfAttributeMissingTag
            IfParameterEqualsTag
            IfParameterNotEqualsTag
            IfParameterNotNullTag
            IfParameterNullTag
            IfPropertyEqualsTag
            IfPropertyNotEqualsTag
            ImageTag
            ImgTag
            IncludeAction
            IncludeTag
            IncludeTag
            IncludeTei
            InsertTag
            IterateTag
            IterateTag
            IterateTei
            IterateTei
            IteratorAdapter
            LessEqualTag
            LessThanTag
            Link1Tag
            LinkTag
            LinkTag
            MatchTag
            MaxLengthExceededException
            MessageResources
            MessageResourcesFactory
            MessageTag
            MessageTag
            MultiboxTag
            MultiboxTag
            MultipartElement
            MultipartIterator
            MultipartRequestHandler
            MultipartRequestWrapper
            MultipartValueStream
            NotEqualTag
            NotMatchTag
            NotPresentTag
            ObjectCreateRule
            Options1Tag
            OptionsTag
            OptionsTag
            OptionTag
            OptionTag
            PageTag
            PageTei
            ParameterTag
            ParameterTag
            ParameterTei
            PasswordTag
            PasswordTag
            PresentTag
            PropertyMessageResources
            PropertyMessageResourcesFactory
            PropertyTag
            PropertyUtils
            PutTag
            RadioTag
            RadioTag
            RedirectingActionForward
            RedirectTag
            RedirectTag
            ReloadAction
            RemoveFormBeanAction
            RemoveForwardAction
            RemoveMappingAction
            RequestActionMapping
            RequestUtils
            ResetTag
            ResetTag
            ResourceTag
            ResourceTei
            ResponseUtils
            RewriteTag
            Rule
            SelectTag
            SelectTag
            ServletContextWriter
            SessionActionMapping
            SetNextRule
            SetPropertiesRule
            SetPropertyRule
            SetTopRule
            SizeTag
            SizeTei
            StrutsTag
            StrutsTei
            SubmitTag
            SubmitTag
            TextareaTag
            TextareaTag
            TextTag
            TextTag
            ValidatingActionForm
            WriteTag
            libstruts1.2-java-1.2.9/legacy/api-1.0/deprecated-list.html0000644000175000017500000003764210404045212023740 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Deprecated List

            Deprecated API

            Deprecated Classes
            org.apache.struts.action.ActionBase
                      Application action classes should now extend Action directly, rather than this class. 
            org.apache.struts.action.ActionMappingBase
                      Now that ActionMapping is a class, you should use it intead 
            org.apache.struts.util.BeanUtils
                      At some point after Struts 1.0 final, will be replaced by an equivalent class in the Jakarta Commons Beanutils package. 
            org.apache.struts.util.ConvertUtils
                      At some point after Struts 1.0 final, will be replaced by an equivalent class in the Jakarta Commons Beanutils package. 
            org.apache.struts.util.ErrorMessages
                      Use org.apache.struts.action.ActionErrors instead 
            org.apache.struts.util.FastArrayList
                      At some point after Struts 1.0 final, will be replaced by an equivalent class in the Jakarta Commons Collections package. 
            org.apache.struts.util.FastHashMap
                      At some point after Struts 1.0 final, will be replaced by an equivalent class in the Jakarta Commons Collections package. 
            org.apache.struts.util.FastTreeMap
                      At some point after Struts 1.0 final, will be replaced by an equivalent class in the Jakarta Commons Collections package. 
            org.apache.struts.util.PropertyUtils
                      At some point after Struts 1.0 final, will be replaced by an equivalent class in the Jakarta Commons Beanutils package. 
            org.apache.struts.action.ValidatingActionForm
                      Application ActionForm beans should now extend ActionForm directly, and override the validate() method if they wish to provide such services 
             

            Deprecated Fields
            org.apache.struts.upload.MultipartElement.data
                      This should never be used. 
             

            Deprecated Methods
            org.apache.struts.action.ActionMapping.createFormInstance()
                      Creation of ActionForm instances is now the responsibility of the controller servlet 
            org.apache.struts.action.ActionMapping.getActionClass()
                      Use getType() instead 
            org.apache.struts.upload.MultipartElement.getData()
                      Use the getFile method to get a File representing the data for this element 
            org.apache.struts.action.ActionMapping.getFormAttribute()
                      Use getAttribute() instead 
            org.apache.struts.action.ActionMapping.getFormClass()
                      Use the bean name to look up the corresponding ActionFormBean instead 
            org.apache.struts.action.ActionMapping.getFormPrefix()
                      Use getPrefix() instead 
            org.apache.struts.action.ActionMapping.getFormScope()
                      Use getScope() instead 
            org.apache.struts.action.ActionMapping.getFormSuffix()
                      Use getSuffix() instead 
            org.apache.struts.action.ActionMapping.getInputForm()
                      Use getInput() instead 
            org.apache.struts.action.Action.perform(ActionServlet, ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse)
                      Use the new perform() method without a servlet argument 
            org.apache.struts.action.Action.perform(ActionServlet, ActionMapping, ActionForm, ServletRequest, ServletResponse)
                      Use the new perform() method without a servlet argument 
            org.apache.struts.action.ActionMapping.setActionClass(String)
                      Use setType(String) instead 
            org.apache.struts.upload.MultipartElement.setData(byte[])
                      Use the setFile method to set the file that represents the data of this element 
            org.apache.struts.action.ActionMapping.setFormAttribute(String)
                      Use setAttribute(String) instead 
            org.apache.struts.action.ActionMapping.setFormClass(String)
                      Modify the corresponding ActionFormBean instead 
            org.apache.struts.action.ActionMapping.setFormPrefix(String)
                      Use setPrefix(String) instead 
            org.apache.struts.action.ActionMapping.setFormScope(String)
                      Use setScope(String) instead 
            org.apache.struts.action.ActionMapping.setFormSuffix(String)
                      Use setSuffix(String) instead 
            org.apache.struts.action.ActionMapping.setInputForm(String)
                      Use setInput(String) instead 
            org.apache.struts.taglib.bean.IncludeTag.setName(String)
                      use setPage(String) instead 
            org.apache.struts.action.ActionForm.validate()
                      This is the Struts 0.5 version of validation -- use the validate(ActionMapping,HttpServletRequest) method instead 
             

            Deprecated Constructors
            org.apache.struts.upload.MultipartElement(String, String, String, byte[])
                      Use the constructor that takes an File as an argument as opposed to a byte array argument, which can cause memory problems 
             



            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/help-doc.html0000644000175000017500000001641010404045230022350 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: API Help

            How This API Document Is Organized

            This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.

            Overview

            The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

            Package

            Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain four categories:

            • Interfaces (italic)
            • Classes
            • Exceptions
            • Errors

            Class/Interface

            Each class, interface, inner class and inner interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

            • Class inheritance diagram
            • Direct Subclasses
            • All Known Subinterfaces
            • All Known Implementing Classes
            • Class/interface declaration
            • Class/interface description

            • Inner Class Summary
            • Field Summary
            • Constructor Summary
            • Method Summary

            • Field Detail
            • Constructor Detail
            • Method Detail
            Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

            Tree (Class Hierarchy)

            There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.
            • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
            • When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.

            Deprecated API

            The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.

            Index

            The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.

            Prev/Next

            These links take you to the next or previous class, interface, package, or related page.

            Frames/No Frames

            These links show and hide the HTML frames. All pages are available with or without frames.

            Serialized Form

            Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.

            This help file applies to API documentation generated using the standard doclet.



            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/index-all.html0000644000175000017500000301027410404045220022536 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Index
            < A B C D E F G H I K L M N O P R S T U V W X

            <

            () - Static method in class org.apache.struts.util.PropertyUtils
            Deprecated.  

            A

            absoluteURL(HttpServletRequest, String) - Static method in class org.apache.struts.util.RequestUtils
            Create and return an absolute URL for the specified context-relative path, based on the server and context information in the specified request.
            accept - Variable in class org.apache.struts.taglib.BaseFieldTag
            Comma-delimited list of content types that a server processing this form will handle correctly.
            accept - Variable in class org.apache.struts.taglib.html.BaseFieldTag
            Comma-delimited list of content types that a server processing this form will handle correctly.
            accesskey - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
            Access key character.
            accessKey - Variable in class org.apache.struts.taglib.BaseHandlerTag
            Access key character.
            action - Variable in class org.apache.struts.taglib.FormTag
            The action URL to which this form should be submitted, if any.
            action - Variable in class org.apache.struts.taglib.html.FormTag
            The action URL to which this form should be submitted, if any.
            Action - class org.apache.struts.action.Action.
            An Action is an adapter between the contents of an incoming HTTP request and the corresponding business logic that should be executed to process this request.
            Action() - Constructor for class org.apache.struts.action.Action
             
            ActionBase - class org.apache.struts.action.ActionBase.
            Deprecated. Application action classes should now extend Action directly, rather than this class.
            ActionBase() - Constructor for class org.apache.struts.action.ActionBase
            Deprecated.  
            ActionError - class org.apache.struts.action.ActionError.
            An encapsulation of an individual error message returned by the validate() method of an ActionForm, consisting of a message key (to be used to look up message text in an appropriate message resources database) plus up to four placeholder objects that can be used for parametric replacement in the message text.
            ActionError(String) - Constructor for class org.apache.struts.action.ActionError
            Construct an action error with no replacement values.
            ActionError(String, Object) - Constructor for class org.apache.struts.action.ActionError
            Construct an action error with the specified replacement values.
            ActionError(String, Object, Object) - Constructor for class org.apache.struts.action.ActionError
            Construct an action error with the specified replacement values.
            ActionError(String, Object, Object, Object) - Constructor for class org.apache.struts.action.ActionError
            Construct an action error with the specified replacement values.
            ActionError(String, Object, Object, Object, Object) - Constructor for class org.apache.struts.action.ActionError
            Construct an action error with the specified replacement values.
            ActionErrors - class org.apache.struts.action.ActionErrors.
            A class that encapsulates the error messages being reported by the validate() method of an ActionForm.
            ActionErrors() - Constructor for class org.apache.struts.action.ActionErrors
             
            ActionForm - class org.apache.struts.action.ActionForm.
            An ActionForm is a JavaBean optionally associated with one or more ActionMappings.
            ActionForm() - Constructor for class org.apache.struts.action.ActionForm
             
            ActionFormBean - class org.apache.struts.action.ActionFormBean.
            An ActionFormBean is the definition of a form bean that is loaded from a <form-bean> element in the Struts configuration file.
            ActionFormBean() - Constructor for class org.apache.struts.action.ActionFormBean
             
            ActionFormBeans - class org.apache.struts.action.ActionFormBeans.
            Encapsulate a collection of ActionFormBean objects that can be administered and searched, while hiding the internal implementation.
            ActionFormBeans() - Constructor for class org.apache.struts.action.ActionFormBeans
             
            ActionForward - class org.apache.struts.action.ActionForward.
            An ActionForward represents a destination to which the controller servlet, ActionServlet, might be directed to perform a RequestDispatcher.forward() or HttpServletResponse.sendRedirect() to, as a result of processing activities of an Action class.
            ActionForward() - Constructor for class org.apache.struts.action.ActionForward
            Construct a new instance with default values.
            ActionForward(String) - Constructor for class org.apache.struts.action.ActionForward
            Construct a new instance with the specified path.
            ActionForward(String, boolean) - Constructor for class org.apache.struts.action.ActionForward
            Construct a new instance with the specified path and redirect flag.
            ActionForwards - class org.apache.struts.action.ActionForwards.
            Encapsulate a collection of ActionForward objects that can be administered and searched, while hiding the internal implementation.
            ActionForwards() - Constructor for class org.apache.struts.action.ActionForwards
             
            ActionMapping - class org.apache.struts.action.ActionMapping.
            An ActionMapping represents the information that the controller servlet, ActionServlet, knows about the mapping of a particular request to an instance of a particular action class.
            ActionMapping() - Constructor for class org.apache.struts.action.ActionMapping
             
            ActionMappingBase - class org.apache.struts.action.ActionMappingBase.
            Deprecated. Now that ActionMapping is a class, you should use it intead
            ActionMappingBase() - Constructor for class org.apache.struts.action.ActionMappingBase
            Deprecated.  
            ActionMappings - class org.apache.struts.action.ActionMappings.
            Encapsulate a collection of ActionMapping objects that can be administered and searched, while hiding the internal implementation.
            ActionMappings() - Constructor for class org.apache.struts.action.ActionMappings
             
            actions - Variable in class org.apache.struts.action.ActionServlet
            The set of Action instances that have been created and initialized, keyed by the fully qualified Java class name.
            ActionServlet - class org.apache.struts.action.ActionServlet.
            ActionServlet represents the "controller" in the Model-View-Controller (MVC) design pattern for web applications that is commonly known as "Model 2".
            ActionServlet() - Constructor for class org.apache.struts.action.ActionServlet
             
            activeCount - Variable in class org.apache.struts.util.GenericDataSource
            The number of connections that have been created by this data source.
            add(int, Object) - Method in class org.apache.struts.util.FastArrayList
            Deprecated. Insert the specified element at the specified position in this list, and shift all remaining elements up one position.
            add(Object) - Method in class org.apache.struts.util.FastArrayList
            Deprecated. Appends the specified element to the end of this list.
            add(String, ActionError) - Method in class org.apache.struts.action.ActionErrors
            Add an error message to the set of errors for the specified property.
            addAll(Collection) - Method in class org.apache.struts.util.FastArrayList
            Deprecated. Append all of the elements in the specified Collection to the end of this list, in the order that they are returned by the specified Collection's Iterator.
            addAll(int, Collection) - Method in class org.apache.struts.util.FastArrayList
            Deprecated. Insert all of the elements in the specified Collection at the specified position in this list, and shift any previous elements upwards as needed.
            addCallMethod(String, String, int) - Method in class org.apache.struts.digester.Digester
            Add an "call method" rule for the specified parameters.
            addCallMethod(String, String, int, Class[]) - Method in class org.apache.struts.digester.Digester
            Add an "call method" rule for the specified parameters.
            addCallMethod(String, String, int, String[]) - Method in class org.apache.struts.digester.Digester
            Add an "call method" rule for the specified parameters.
            addCallParam(String, int) - Method in class org.apache.struts.digester.Digester
            Add a "call parameter" rule for the specified parameters.
            addCallParam(String, int, String) - Method in class org.apache.struts.digester.Digester
            Add a "call parameter" rule for the specified parameters.
            addDataSource(String, DataSource) - Method in class org.apache.struts.action.ActionServlet
            Add a data source object to be used by this application.
            AddDataSourceRule - class org.apache.struts.action.AddDataSourceRule.
            Private digester Rule that adds a data source to the underlying ActionServlet instance.
            AddDataSourceRule(Digester) - Constructor for class org.apache.struts.action.AddDataSourceRule
             
            addError(String) - Method in class org.apache.struts.util.ErrorMessages
            Deprecated. Add an error message key to the accumulated set of errors.
            addFormBean(ActionFormBean) - Method in class org.apache.struts.action.ActionServlet
            Register a form bean definition to the set configured for this servlet.
            addFormBean(ActionFormBean) - Method in class org.apache.struts.action.ActionFormBeans
            Register a form bean to the set configured for this servlet.
            AddFormBeanAction - class org.apache.struts.actions.AddFormBeanAction.
            A standard Action that calls the addFormBean() method of our controller servlet to add a new action form definition dynamically.
            AddFormBeanAction() - Constructor for class org.apache.struts.actions.AddFormBeanAction
             
            addForward(ActionForward) - Method in class org.apache.struts.action.ActionMapping
            Add a new ActionForward associated with this mapping.
            addForward(ActionForward) - Method in class org.apache.struts.action.ActionServlet
            Register a logical forwarding to the set configured for this servlet.
            addForward(ActionForward) - Method in class org.apache.struts.action.ActionForwards
            Register a logical forwarding to the set configured for this servlet.
            AddForwardAction - class org.apache.struts.actions.AddForwardAction.
            A standard Action that calls the addForward() method of our controller servlet to add a new action forward definition dynamically.
            AddForwardAction() - Constructor for class org.apache.struts.actions.AddForwardAction
             
            addMapping(ActionMapping) - Method in class org.apache.struts.action.ActionServlet
            Register a mapping to the set configured for this servlet.
            addMapping(ActionMapping) - Method in class org.apache.struts.action.ActionMappings
            Register a logical mapping to the set configured for this servlet.
            AddMappingAction - class org.apache.struts.actions.AddMappingAction.
            A standard Action that calls the addMapping() method of our controller servlet to add a new action mapping definition dynamically.
            AddMappingAction() - Constructor for class org.apache.struts.actions.AddMappingAction
             
            addObjectCreate(String, String) - Method in class org.apache.struts.digester.Digester
            Add an "object create" rule for the specified parameters.
            addObjectCreate(String, String, String) - Method in class org.apache.struts.digester.Digester
            Add an "object create" rule for the specified parameters.
            addOption(StringBuffer, String, String, boolean) - Method in class org.apache.struts.taglib.html.OptionsTag
            Add an option element to the specified StringBuffer based on the specified parameters.
            addProperty(String, String) - Method in class org.apache.struts.util.GenericDataSource
            Add a generic property to the list of connection properties to be used.
            addRule(String, Rule) - Method in class org.apache.struts.digester.Digester
            Register a new Rule matching the specified pattern.
            addServletMapping(String, String) - Method in class org.apache.struts.action.ActionServlet
            Remember a servlet mapping from our web application deployment descriptor, if it is for this servlet.
            addSetNext(String, String) - Method in class org.apache.struts.digester.Digester
            Add a "set next" rule for the specified parameters.
            addSetNext(String, String, String) - Method in class org.apache.struts.digester.Digester
            Add a "set next" rule for the specified parameters.
            addSetProperties(String) - Method in class org.apache.struts.digester.Digester
            Add a "set properties" rule for the specified parameters.
            addSetProperty(String, String, String) - Method in class org.apache.struts.digester.Digester
            Add a "set property" rule for the specified parameters.
            addSetTop(String, String) - Method in class org.apache.struts.digester.Digester
            Add a "set top" rule for the specified parameters.
            addSetTop(String, String, String) - Method in class org.apache.struts.digester.Digester
            Add a "set top" rule for the specified parameters.
            align - Variable in class org.apache.struts.taglib.html.ImgTag
            The property to specify where to align the image.
            allElements - Variable in class org.apache.struts.upload.DiskMultipartRequestHandler
            A Hashtable representing all elemnents
            alt - Variable in class org.apache.struts.taglib.html.ImgTag
            The alternate text to display for the image.
            alt - Variable in class org.apache.struts.taglib.html.ImageTag
            The alternate text for this image.
            alt() - Method in class org.apache.struts.taglib.html.ImgTag
            Return the alternate text to be included on this generated element, or null if there is no such text.
            alt() - Method in class org.apache.struts.taglib.html.ImageTag
            Return the alternate text to be included on this generated element, or null if there is no such text.
            altKey - Variable in class org.apache.struts.taglib.html.ImgTag
            The message lookup key used to look up internationalized messages.
            altKey - Variable in class org.apache.struts.taglib.html.ImageTag
            The message resources key for the alternate text for this image.
            anchor - Variable in class org.apache.struts.taglib.bean.IncludeTag
            The anchor to be added to the end of the generated hyperlink.
            anchor - Variable in class org.apache.struts.taglib.html.LinkTag
            The anchor to be added to the end of the generated hyperlink.
            anchor - Variable in class org.apache.struts.taglib.logic.RedirectTag
            The anchor to be added to the end of the generated hyperlink.
            application - Variable in class org.apache.struts.action.ActionServlet
            The resources object for our application resources (if any).
            arg0 - Variable in class org.apache.struts.taglib.MessageTag
            The first optional argument.
            arg0 - Variable in class org.apache.struts.taglib.bean.MessageTag
            The first optional argument.
            arg1 - Variable in class org.apache.struts.taglib.MessageTag
            The second optional argument.
            arg1 - Variable in class org.apache.struts.taglib.bean.MessageTag
            The second optional argument.
            arg2 - Variable in class org.apache.struts.taglib.MessageTag
            The third optional argument.
            arg2 - Variable in class org.apache.struts.taglib.bean.MessageTag
            The third optional argument.
            arg3 - Variable in class org.apache.struts.taglib.MessageTag
            The fourth optional argument.
            arg3 - Variable in class org.apache.struts.taglib.bean.MessageTag
            The fourth optional argument.
            arg4 - Variable in class org.apache.struts.taglib.MessageTag
            The fifth optional argument.
            arg4 - Variable in class org.apache.struts.taglib.bean.MessageTag
            The fifth optional argument.
            ArrayStack - class org.apache.struts.util.ArrayStack.
            Implementation of the java.util.Stack API that is based on an ArrayList rather than a Vector.
            ArrayStack() - Constructor for class org.apache.struts.util.ArrayStack
             
            attribute - Variable in class org.apache.struts.action.ActionMapping
            The name of the request-scope or session-scope attribute under which our form bean, if any, will be created.
            attributeName - Variable in class org.apache.struts.digester.ObjectCreateRule
            The attribute containing an override class name if it is present.
            attributeName - Variable in class org.apache.struts.digester.CallParamRule
            The attribute from which to save the parameter value
            autoCommit - Variable in class org.apache.struts.util.GenericConnection
            The initial auto-commit state to which we should return after release.
            autoCommit - Variable in class org.apache.struts.util.GenericDataSource
            The default auto-commit state for newly created connections.
            available() - Method in class org.apache.struts.upload.BufferedMultipartInputStream
            This method returns the number of available bytes left to read in the buffer before it has to be refilled

            B

            BaseAttributeTag - class org.apache.struts.taglib.BaseAttributeTag.
            Base class for conditionals based on the presence or absence of attributes in some appropriate scope (default=session).
            BaseAttributeTag() - Constructor for class org.apache.struts.taglib.BaseAttributeTag
             
            BaseFieldTag - class org.apache.struts.taglib.BaseFieldTag.
            Convenience base class for the various input tags for text fields.
            BaseFieldTag - class org.apache.struts.taglib.html.BaseFieldTag.
            Convenience base class for the various input tags for text fields.
            BaseFieldTag() - Constructor for class org.apache.struts.taglib.BaseFieldTag
             
            BaseFieldTag() - Constructor for class org.apache.struts.taglib.html.BaseFieldTag
             
            BaseHandlerTag - class org.apache.struts.taglib.BaseHandlerTag.
            Base class for tags that render form elements capable of including JavaScript event handlers and/or CSS Style attributes.
            BaseHandlerTag - class org.apache.struts.taglib.html.BaseHandlerTag.
            Base class for tags that render form elements capable of including JavaScript event handlers and/or CSS Style attributes.
            BaseHandlerTag() - Constructor for class org.apache.struts.taglib.BaseHandlerTag
             
            BaseHandlerTag() - Constructor for class org.apache.struts.taglib.html.BaseHandlerTag
             
            BaseInputTag - class org.apache.struts.taglib.BaseInputTag.
            Abstract base class for the various input tags.
            BaseInputTag - class org.apache.struts.taglib.html.BaseInputTag.
            Abstract base class for the various input tags.
            BaseInputTag() - Constructor for class org.apache.struts.taglib.BaseInputTag
             
            BaseInputTag() - Constructor for class org.apache.struts.taglib.html.BaseInputTag
             
            BaseTag - class org.apache.struts.taglib.BaseTag.
            Renders an HTML element with an href attribute pointing to the absolute location of the enclosing JSP page.
            BaseTag - class org.apache.struts.taglib.html.BaseTag.
            Renders an HTML element with an href attribute pointing to the absolute location of the enclosing JSP page.
            BaseTag() - Constructor for class org.apache.struts.taglib.BaseTag
             
            BaseTag() - Constructor for class org.apache.struts.taglib.html.BaseTag
             
            BEAN_KEY - Static variable in class org.apache.struts.taglib.Constants
            The attribute key for the bean our form is related to.
            BEAN_KEY - Static variable in class org.apache.struts.taglib.html.Constants
            The attribute key for the bean our form is related to.
            BeanUtils - class org.apache.struts.util.BeanUtils.
            Deprecated. At some point after Struts 1.0 final, will be replaced by an equivalent class in the Jakarta Commons Beanutils package.
            BeanUtils() - Constructor for class org.apache.struts.util.BeanUtils
            Deprecated.  
            begin(AttributeList) - Method in class org.apache.struts.action.AddDataSourceRule
             
            begin(AttributeList) - Method in class org.apache.struts.digester.Rule
            This method is called when the beginning of a matching XML element is encountered.
            begin(AttributeList) - Method in class org.apache.struts.digester.SetPropertiesRule
            Process the beginning of this element.
            begin(AttributeList) - Method in class org.apache.struts.digester.ObjectCreateRule
            Process the beginning of this element.
            begin(AttributeList) - Method in class org.apache.struts.digester.SetPropertyRule
            Process the beginning of this element.
            begin(AttributeList) - Method in class org.apache.struts.digester.CallParamRule
            Process the start of this element.
            begin(AttributeList) - Method in class org.apache.struts.digester.CallMethodRule
            Process the start of this element.
            body(String) - Method in class org.apache.struts.digester.Rule
            This method is called when the body of a matching XML element is encountered.
            body(String) - Method in class org.apache.struts.digester.CallParamRule
            Process the body text of this element.
            body(String) - Method in class org.apache.struts.digester.CallMethodRule
            Process the body text of this element.
            bodyText - Variable in class org.apache.struts.digester.Digester
            The body text of the current element.
            bodyText - Variable in class org.apache.struts.digester.CallParamRule
            The body text collected from this element.
            bodyText - Variable in class org.apache.struts.digester.CallMethodRule
            The body text collected from this element.
            bodyTexts - Variable in class org.apache.struts.digester.Digester
            The stack of body text string buffers for surrounding elements.
            border - Variable in class org.apache.struts.taglib.html.ImgTag
            The border size around the image.
            border - Variable in class org.apache.struts.taglib.html.ImageTag
            The border size around the image.
            boundary - Variable in class org.apache.struts.upload.MultipartIterator
            The boundary for this multipart request
            boundaryBytes - Variable in class org.apache.struts.upload.MultipartValueStream
            byte buffer with the boundary
            boundaryBytes - Variable in class org.apache.struts.upload.MultipartIterator
            The byte array representing the boundary for this multipart request
            boundaryReached - Variable in class org.apache.struts.upload.MultipartValueStream
            have we reached the boundary?
            buffer - Variable in class org.apache.struts.upload.BufferedMultipartInputStream
            The byte array used to hold buffered data
            buffer - Variable in class org.apache.struts.util.ServletContextWriter
            The buffer into which we accumulate lines to be logged.
            BUFFER_SIZE - Static variable in class org.apache.struts.taglib.bean.ResourceTag
            Buffer size to use when reading the input stream.
            BUFFER_SIZE - Static variable in class org.apache.struts.taglib.bean.IncludeTag
            Buffer size to use when reading the input stream.
            BufferedMultipartInputStream - class org.apache.struts.upload.BufferedMultipartInputStream.
            This class implements buffering for an InputStream as well as a readLine method.
            BufferedMultipartInputStream(InputStream, int, long, long) - Constructor for class org.apache.struts.upload.BufferedMultipartInputStream
            Public constructor for this class, just wraps the InputStream given
            bufferLength - Variable in class org.apache.struts.upload.BufferedMultipartInputStream
            The number of bytes read from the underlying InputStream that are in the buffer
            bufferOffset - Variable in class org.apache.struts.upload.BufferedMultipartInputStream
            The current offset we're at in the buffer's byte array
            bufferSize - Variable in class org.apache.struts.action.ActionServlet
            The size in bytes of the buffer used to read files from a client upload
            bufferSize - Variable in class org.apache.struts.upload.BufferedMultipartInputStream
            The size of the byte array buffer
            bufferSize - Variable in class org.apache.struts.upload.MultipartIterator
            The amount of data read from a request at a time.
            bundle - Variable in class org.apache.struts.taglib.MessageTag
            The servlet context attribute key for our resources.
            bundle - Variable in class org.apache.struts.taglib.bean.MessageTag
            The servlet context attribute key for our resources.
            bundle - Variable in class org.apache.struts.taglib.html.ImgTag
            The name of the servlet context attribute containing our message resources.
            bundle - Variable in class org.apache.struts.taglib.html.ErrorsTag
            The servlet context attribute key for our resources.
            bundle - Variable in class org.apache.struts.taglib.html.ImageTag
            The servlet context attribute key for our resources.
            bundle - Variable in class org.apache.struts.taglib.html.OptionTag
            The name of the servlet context attribute containing our message resources.
            ButtonTag - class org.apache.struts.taglib.ButtonTag.
            Renders an HTML BUTTON tag within the Struts framework.
            ButtonTag - class org.apache.struts.taglib.html.ButtonTag.
            Renders an HTML BUTTON tag within the Struts framework.
            ButtonTag() - Constructor for class org.apache.struts.taglib.ButtonTag
             
            ButtonTag() - Constructor for class org.apache.struts.taglib.html.ButtonTag
             

            C

            CallMethodRule - class org.apache.struts.digester.CallMethodRule.
            Rule implementation that calls a method on the top (parent) object, passing arguments collected from subsequent CallParamRule rules or from the body of this element.
            CallMethodRule(Digester, String, int) - Constructor for class org.apache.struts.digester.CallMethodRule
            Construct a "call method" rule with the specified method name.
            CallMethodRule(Digester, String, int, Class[]) - Constructor for class org.apache.struts.digester.CallMethodRule
            Construct a "call method" rule with the specified method name.
            CallMethodRule(Digester, String, int, String[]) - Constructor for class org.apache.struts.digester.CallMethodRule
            Construct a "call method" rule with the specified method name.
            CallParamRule - class org.apache.struts.digester.CallParamRule.
            Rule implementation that saves a parameter from either an attribute of this element, or from the element body, to be used in a call generated by a surrounding CallMethodRule rule.
            CallParamRule(Digester, int) - Constructor for class org.apache.struts.digester.CallParamRule
            Construct a "call parameter" rule that will save the body text of this element as the parameter value.
            CallParamRule(Digester, int, String) - Constructor for class org.apache.struts.digester.CallParamRule
            Construct a "call parameter" rule that will save the value of the specified attribute as the parameter value.
            CANCEL_PROPERTY - Static variable in class org.apache.struts.taglib.Constants
            The property under which a Cancel button press is reported.
            CANCEL_PROPERTY - Static variable in class org.apache.struts.taglib.html.Constants
            The property under which a Cancel button press is reported.
            CANCEL_PROPERTY_X - Static variable in class org.apache.struts.taglib.html.Constants
            The property under which a Cancel button press is reported, if the Cancel button is rendered as an image.
            CancelTag - class org.apache.struts.taglib.CancelTag.
            Tag for input fields of type "cancel".
            CancelTag - class org.apache.struts.taglib.html.CancelTag.
            Tag for input fields of type "cancel".
            CancelTag() - Constructor for class org.apache.struts.taglib.CancelTag
             
            CancelTag() - Constructor for class org.apache.struts.taglib.html.CancelTag
             
            catalog - Variable in class org.apache.struts.util.GenericConnection
            The initial catalog to which we should return after release.
            characters(char[], int, int) - Method in class org.apache.struts.digester.Digester
            Process notification of character data received from the body of an XML element.
            CheckboxTag - class org.apache.struts.taglib.CheckboxTag.
            Tag for input fields of type "checkbox".
            CheckboxTag - class org.apache.struts.taglib.html.CheckboxTag.
            Tag for input fields of type "checkbox".
            CheckboxTag() - Constructor for class org.apache.struts.taglib.CheckboxTag
             
            CheckboxTag() - Constructor for class org.apache.struts.taglib.html.CheckboxTag
             
            checkError() - Method in class org.apache.struts.util.ServletContextWriter
            Flush the stream and check for its error state.
            className - Variable in class org.apache.struts.digester.ObjectCreateRule
            The Java class name of the object to be created.
            clazz - Variable in class org.apache.struts.actions.DispatchAction
            The Class instance of this DispatchAction class.
            clazz - Static variable in class org.apache.struts.util.MessageResourcesFactory
            The Java class to be used for MessageResourcesFactory instances.
            clear() - Method in class org.apache.struts.action.ActionErrors
            Clear all error messages recorded by this object.
            clear() - Method in class org.apache.struts.digester.Digester
            Clear the current contents of the object stack.
            clear() - Method in class org.apache.struts.util.FastHashMap
            Deprecated. Remove all mappings from this map.
            clear() - Method in class org.apache.struts.util.ArrayStack
            Remove all elements from this stack.
            clear() - Method in class org.apache.struts.util.FastArrayList
            Deprecated. Remove all of the elements from this list.
            clear() - Method in class org.apache.struts.util.FastTreeMap
            Deprecated. Remove all mappings from this map.
            clearWarnings() - Method in class org.apache.struts.util.GenericConnection
            Clear all warnings reported for this Connection.
            clone() - Method in class org.apache.struts.util.FastHashMap
            Deprecated. Return a shallow copy of this FastHashMap instance.
            clone() - Method in class org.apache.struts.util.FastArrayList
            Deprecated. Return a shallow copy of this FastArrayList instance.
            clone() - Method in class org.apache.struts.util.FastTreeMap
            Deprecated. Return a shallow copy of this FastTreeMap instance.
            cloneBean(Object) - Static method in class org.apache.struts.util.BeanUtils
            Deprecated. Clone a bean based on the available property getters and setters, even if the bean class itself does not implement Cloneable.
            close() - Method in class org.apache.struts.upload.BufferedMultipartInputStream
            This method attempts to close the underlying InputStream
            close() - Method in class org.apache.struts.util.ServletContextWriter
            Close the stream.
            close() - Method in class org.apache.struts.util.GenericConnection
            Return this wrapped Connection to our data source connection pool.
            close() - Method in class org.apache.struts.util.GenericDataSource
            Close all connections that have been created by this data source.
            closed - Variable in class org.apache.struts.util.GenericConnection
            The closed flag for this wrapped connection.
            closed - Variable in class org.apache.struts.util.GenericDataSource
            Has this data source been closed?
            collection - Variable in class org.apache.struts.taglib.EnumerateTag
            The collection over which we will be iterating.
            collection - Variable in class org.apache.struts.taglib.IterateTag
            The collection over which we will be iterating.
            collection - Variable in class org.apache.struts.taglib.bean.SizeTag
            The actual collection to be counted.
            collection - Variable in class org.apache.struts.taglib.html.OptionsTag
            The name of the collection containing beans that have properties to provide both the values and the labels (identified by the property and labelProperty attributes).
            collection - Variable in class org.apache.struts.taglib.logic.IterateTag
            The collection over which we will be iterating.
            cols - Variable in class org.apache.struts.taglib.BaseInputTag
            The number of character columns for this field, or negative for no limit.
            cols - Variable in class org.apache.struts.taglib.html.BaseInputTag
            The number of character columns for this field, or negative for no limit.
            commit() - Method in class org.apache.struts.util.GenericConnection
            Make all changes made since the previous commit or rollback permanent, and releases any database locks currently held.
            comparator() - Method in class org.apache.struts.util.FastTreeMap
            Deprecated. Return the comparator used to order this map, or null if this map uses its keys' natural order.
            CompareTagBase - class org.apache.struts.taglib.logic.CompareTagBase.
            Abstract base class for comparison tags.
            CompareTagBase() - Constructor for class org.apache.struts.taglib.logic.CompareTagBase
             
            computeParameters(PageContext, String, String, String, String, String, String, String, boolean) - Static method in class org.apache.struts.util.RequestUtils
            Compute a set of query parameters that will be dynamically added to a generated URL.
            computeURL(PageContext, String, String, String, Map, String, boolean) - Static method in class org.apache.struts.util.RequestUtils
            Compute a hyperlink URL based on the forward, href, or page parameter that is not null.
            condition() - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
            Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
            condition() - Method in class org.apache.struts.taglib.logic.PresentTag
            Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
            condition() - Method in class org.apache.struts.taglib.logic.MatchTag
            Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
            condition() - Method in class org.apache.struts.taglib.logic.NotMatchTag
            Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
            condition() - Method in class org.apache.struts.taglib.logic.CompareTagBase
            Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
            condition() - Method in class org.apache.struts.taglib.logic.EqualTag
            Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
            condition() - Method in class org.apache.struts.taglib.logic.GreaterEqualTag
            Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
            condition() - Method in class org.apache.struts.taglib.logic.NotEqualTag
            Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
            condition() - Method in class org.apache.struts.taglib.logic.NotPresentTag
            Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
            condition() - Method in class org.apache.struts.taglib.logic.LessEqualTag
            Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
            condition() - Method in class org.apache.struts.taglib.logic.GreaterThanTag
            Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
            condition() - Method in class org.apache.struts.taglib.logic.LessThanTag
            Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
            condition(boolean) - Method in class org.apache.struts.taglib.logic.PresentTag
            Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
            condition(boolean) - Method in class org.apache.struts.taglib.logic.MatchTag
            Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
            condition(int, int) - Method in class org.apache.struts.taglib.logic.CompareTagBase
            Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
            ConditionalTagBase - class org.apache.struts.taglib.logic.ConditionalTagBase.
            Abstract base class for the various conditional evaluation tags.
            ConditionalTagBase() - Constructor for class org.apache.struts.taglib.logic.ConditionalTagBase
             
            config - Variable in class org.apache.struts.action.ActionServlet
            The context-relative path to our configuration resource.
            config - Variable in class org.apache.struts.util.MessageResources
            The configuration parameter used to initialize this MessageResources.
            conn - Variable in class org.apache.struts.util.GenericConnection
            The Connection that is being wrapped.
            connections - Variable in class org.apache.struts.util.GenericDataSource
            The list of Connections (wrapped in our associated wrapper class) that have been created but are not currently in use.
            constant - Variable in class org.apache.struts.taglib.html.MultiboxTag
            The constant String value to be returned when this checkbox is selected and the form is submitted.
            Constants - class org.apache.struts.taglib.Constants.
            Manifest constants for this package.
            Constants - class org.apache.struts.taglib.html.Constants.
            Manifest constants for this package.
            Constants() - Constructor for class org.apache.struts.taglib.Constants
             
            Constants() - Constructor for class org.apache.struts.taglib.html.Constants
             
            contains(Object) - Method in class org.apache.struts.util.FastArrayList
            Deprecated. Return true if this list contains the specified element.
            containsAll(Collection) - Method in class org.apache.struts.util.FastArrayList
            Deprecated. Return true if this list contains all of the elements in the specified Collection.
            containsKey(Object) - Method in class org.apache.struts.util.FastHashMap
            Deprecated. Return true if this map contains a mapping for the specified key.
            containsKey(Object) - Method in class org.apache.struts.util.FastTreeMap
            Deprecated. Return true if this map contains a mapping for the specified key.
            containsValue(Object) - Method in class org.apache.struts.util.FastHashMap
            Deprecated. Return true if this map contains one or more keys mapping to the specified value.
            containsValue(Object) - Method in class org.apache.struts.util.FastTreeMap
            Deprecated. Return true if this map contains one or more keys mapping to the specified value.
            content - Variable in class org.apache.struts.action.ActionServlet
            The default content type and character encoding to be set on each response (may be overridden by forwarded-to resources).
            content - Variable in class org.apache.struts.taglib.template.PutTag
            The content's URI (or text).
            content - Variable in class org.apache.struts.taglib.template.util.Content
            Templates regard this as content to be either included or printed directly.
            This is a blank final that is set at construction.
            Content - class org.apache.struts.taglib.template.util.Content.
            A utility file for templates.
            Content(String, String) - Constructor for class org.apache.struts.taglib.template.util.Content
            The only constructor.
            contentLength - Variable in class org.apache.struts.upload.BufferedMultipartInputStream
            The content length of the multipart data
            contentLength - Variable in class org.apache.struts.upload.MultipartIterator
            The content length of this request
            ContentLengthExceededException - exception org.apache.struts.upload.ContentLengthExceededException.
            This exception is thrown when multipart post data exceeds the value given by the Content-Length header
            ContentLengthExceededException() - Constructor for class org.apache.struts.upload.ContentLengthExceededException
             
            ContentLengthExceededException(long) - Constructor for class org.apache.struts.upload.ContentLengthExceededException
             
            contentLengthMet - Variable in class org.apache.struts.upload.BufferedMultipartInputStream
            Whether or not bytes up to the Content-Length have been read
            contentLengthMet() - Method in class org.apache.struts.upload.BufferedMultipartInputStream
             
            ContentMap - class org.apache.struts.taglib.template.util.ContentMap.
            A simple facade for a hash map.
            ContentMap() - Constructor for class org.apache.struts.taglib.template.util.ContentMap
            Explicitly declare a do-nothing, no-arg constructor.
            ContentMapStack - class org.apache.struts.taglib.template.util.ContentMapStack.
            This class provides access to a stack of ContentMaps in request scope through static methods.
            ContentMapStack() - Constructor for class org.apache.struts.taglib.template.util.ContentMapStack
            No instantiations of this class are allowed.
            contentRead - Variable in class org.apache.struts.upload.MultipartIterator
            Whether or not the input stream is finished
            contentType - Variable in class org.apache.struts.upload.DiskFile
            The content type of the file
            contentType - Variable in class org.apache.struts.upload.MultipartElement
            The content type of this element
            context - Variable in class org.apache.struts.util.ServletContextWriter
            The servlet context with which we are associated.
            convert(Object) - Static method in class org.apache.struts.util.ConvertUtils
            Deprecated. Convert the specified value into a String.
            convert(String[], Class) - Static method in class org.apache.struts.util.ConvertUtils
            Deprecated. Convert an array of specified values to an array of objects of the specified class (if possible).
            convert(String, Class) - Static method in class org.apache.struts.util.ConvertUtils
            Deprecated. Convert the specified value to an object of the specified class (if possible).
            convertBoolean(String, Boolean) - Static method in class org.apache.struts.util.ConvertUtils
            Deprecated. Convert a String value to a corresponding Boolean value.
            convertByte(String, Byte) - Static method in class org.apache.struts.util.ConvertUtils
            Deprecated. Convert a String value to a corresponding Byte value.
            convertCharacter(String, Character) - Static method in class org.apache.struts.util.ConvertUtils
            Deprecated. Convert a String value to a corresponding Character value.
            convertDouble(String, Double) - Static method in class org.apache.struts.util.ConvertUtils
            Deprecated. Convert a String value to a corresponding Double value.
            convertFloat(String, Float) - Static method in class org.apache.struts.util.ConvertUtils
            Deprecated. Convert a String value to a corresponding Float value.
            convertInteger(String, Integer) - Static method in class org.apache.struts.util.ConvertUtils
            Deprecated. Convert a String value to a corresponding Integer value.
            convertLong(String, Long) - Static method in class org.apache.struts.util.ConvertUtils
            Deprecated. Convert a String value to a corresponding Long value.
            convertShort(String, Short) - Static method in class org.apache.struts.util.ConvertUtils
            Deprecated. Convert a String value to a corresponding Short value.
            ConvertUtils - class org.apache.struts.util.ConvertUtils.
            Deprecated. At some point after Struts 1.0 final, will be replaced by an equivalent class in the Jakarta Commons Beanutils package.
            ConvertUtils() - Constructor for class org.apache.struts.util.ConvertUtils
            Deprecated.  
            cookie - Variable in class org.apache.struts.taglib.logic.ConditionalTagBase
            The name of the cookie to be used as a variable.
            CookieTag - class org.apache.struts.taglib.bean.CookieTag.
            Define a scripting variable based on the value(s) of the specified cookie received with this request.
            CookieTag() - Constructor for class org.apache.struts.taglib.bean.CookieTag
             
            CookieTei - class org.apache.struts.taglib.bean.CookieTei.
            Implementation of TagExtraInfo for the cookie tag, identifying the scripting object(s) to be made visible.
            CookieTei() - Constructor for class org.apache.struts.taglib.bean.CookieTei
             
            copyProperties(Object, Object) - Static method in class org.apache.struts.util.PropertyUtils
            Deprecated. Copy property values from the "origin" bean to the "destination" bean for all cases where the property names are the same (even though the actual getter and setter methods might have been customized via BeanInfo classes).
            createConnection() - Method in class org.apache.struts.util.GenericDataSource
            Create, configure, and return a new JDBC Connection that has been wrapped in our corresponding wrapper.
            createFactory() - Static method in class org.apache.struts.util.MessageResourcesFactory
            Create and return a MessageResourcesFactory instance of the appropriate class, which can be used to create customized MessageResources instances.
            createFormInstance() - Method in class org.apache.struts.action.ActionMapping
            Deprecated. Creation of ActionForm instances is now the responsibility of the controller servlet
            createLocalFile() - Method in class org.apache.struts.upload.MultipartIterator
            Creates a file on disk from the current mulitpart element
            createResources(String) - Method in class org.apache.struts.util.MessageResourcesFactory
            Create and return a newly instansiated MessageResources.
            createResources(String) - Method in class org.apache.struts.util.PropertyMessageResourcesFactory
            Create and return a newly instansiated MessageResources.
            createStatement() - Method in class org.apache.struts.util.GenericConnection
            Create a Statement for sending SQL statements to the database.
            createStatement(int, int) - Method in class org.apache.struts.util.GenericConnection
            (JDBC 2.0) Create a Statement that will create a ResultSet of the specified type and concurrency.
            currentLocale() - Method in class org.apache.struts.taglib.html.HtmlTag
            Return the current Locale for this request, creating a new one if necessary.

            D

            data - Variable in class org.apache.struts.upload.MultipartElement
            Deprecated. This should never be used.
            DATA_SOURCE_KEY - Static variable in class org.apache.struts.action.Action
            The context attributes key under which our default configured data source (which must implement javax.sql.DataSource) is stored, if one is configured for this application.
            dataSources - Variable in class org.apache.struts.action.ActionServlet
            The JDBC data sources that has been configured for this application, if any, keyed by the servlet context attribute under which they are stored.
            debug - Variable in class org.apache.struts.action.ActionServlet
            The debugging detail level for this servlet.
            debug - Variable in class org.apache.struts.digester.Digester
            The debugging detail level of this component.
            debug - Static variable in class org.apache.struts.util.PropertyUtils
            Deprecated. The debugging detail level for this component.
            debug - Static variable in class org.apache.struts.util.BeanUtils
            Deprecated. The debugging detail level for this component.
            debug - Variable in class org.apache.struts.util.GenericDataSource
            The debugging detail level for this data source.
            defaultBoolean - Static variable in class org.apache.struts.util.ConvertUtils
            Deprecated. The default value for Boolean conversions.
            defaultByte - Static variable in class org.apache.struts.util.ConvertUtils
            Deprecated. The default value for Byte conversions.
            defaultCharacter - Static variable in class org.apache.struts.util.ConvertUtils
            Deprecated. The default value for Character conversions.
            defaultDouble - Static variable in class org.apache.struts.util.ConvertUtils
            Deprecated. The default value for Double conversions.
            defaultFactory - Static variable in class org.apache.struts.util.MessageResources
            The default MessageResourcesFactory used to create MessageResources instances.
            defaultFloat - Static variable in class org.apache.struts.util.ConvertUtils
            Deprecated. The default value for Float conversions.
            defaultInteger - Static variable in class org.apache.struts.util.ConvertUtils
            Deprecated. The default value for Integer conversions.
            defaultLocale - Static variable in class org.apache.struts.action.Action
            The system default Locale.
            defaultLocale - Variable in class org.apache.struts.action.ActionServlet
            The default Locale for this server.
            defaultLocale - Static variable in class org.apache.struts.taglib.MessageTag
            The default Locale for our server.
            defaultLocale - Static variable in class org.apache.struts.taglib.ErrorsTag
            The default locale on our server.
            defaultLocale - Static variable in class org.apache.struts.taglib.bean.MessageTag
            The default Locale for our server.
            defaultLocale - Static variable in class org.apache.struts.taglib.html.ImgTag
            The default Locale for our server.
            defaultLocale - Static variable in class org.apache.struts.taglib.html.ErrorsTag
            The default locale on our server.
            defaultLocale - Static variable in class org.apache.struts.taglib.html.ImageTag
            The default Locale for our server.
            defaultLocale - Static variable in class org.apache.struts.taglib.html.OptionTag
            The default locale for our server.
            defaultLocale - Variable in class org.apache.struts.util.MessageResources
            The default Locale for our environment.
            defaultLocale - Static variable in class org.apache.struts.util.RequestUtils
            The default Locale for our server.
            defaultLong - Static variable in class org.apache.struts.util.ConvertUtils
            Deprecated. The default value for Long conversions.
            defaultShort - Static variable in class org.apache.struts.util.ConvertUtils
            Deprecated. The default value for Short conversions.
            DefineTag - class org.apache.struts.taglib.bean.DefineTag.
            Define a scripting variable based on the value(s) of the specified bean property.
            DefineTag() - Constructor for class org.apache.struts.taglib.bean.DefineTag
             
            DefineTei - class org.apache.struts.taglib.bean.DefineTei.
            Implementation of TagExtraInfo for the define tag, identifying the scripting object(s) to be made visible.
            DefineTei() - Constructor for class org.apache.struts.taglib.bean.DefineTei
             
            describe(Object) - Static method in class org.apache.struts.util.PropertyUtils
            Deprecated. Return the entire set of properties for which the specified bean provides a read method.
            describe(Object) - Static method in class org.apache.struts.util.BeanUtils
            Deprecated. Return the entire set of properties for which the specified bean provides a read method.
            description - Variable in class org.apache.struts.util.GenericDataSource
            The description of this data source.
            descriptorsCache - Static variable in class org.apache.struts.util.PropertyUtils
            Deprecated. The cache of PropertyDescriptor arrays for beans we have already introspected, keyed by the fully qualified class name of this object.
            destroy() - Method in class org.apache.struts.action.ActionServlet
            Gracefully shut down this controller servlet, releasing any resources that were allocated at initialization.
            destroy() - Method in class org.apache.struts.upload.DiskFile
            Delete the temporary file.
            destroy() - Method in interface org.apache.struts.upload.FormFile
            Destroy all content for this form file.
            destroyActions() - Method in class org.apache.struts.action.ActionServlet
            Gracefully shut down any action instances we have created.
            destroyApplication() - Method in class org.apache.struts.action.ActionServlet
            Gracefully terminate use of the application MessageResources (if any).
            destroyDataSources() - Method in class org.apache.struts.action.ActionServlet
            Gracefully terminate use of the data source associated with this application (if any).
            destroyInternal() - Method in class org.apache.struts.action.ActionServlet
            Gracefully terminate use of the internal MessageResources.
            digester - Variable in class org.apache.struts.digester.Rule
            The Digester with which this Rule is associated.
            Digester - class org.apache.struts.digester.Digester.
            A Digester processes an XML input stream by matching a series of element nesting patterns to execute Rules that have been added prior to the start of parsing.
            Digester() - Constructor for class org.apache.struts.digester.Digester
            Construct a new Digester with default properties.
            direct - Variable in class org.apache.struts.taglib.template.PutTag
            Determines whether content is included (false) or printed (true).
            direct - Variable in class org.apache.struts.taglib.template.util.Content
            Represents a boolean; if true, content is included, otherwise content is printed.
            This is a blank final that is set at construction.
            This is a string instead of a boolean as a convenience for the tags, whose corresponding attribute is a string.
            disabled - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
            Component is disabled.
            disabled - Variable in class org.apache.struts.taglib.html.OptionTag
            Is this option disabled?
            diskBufferSize - Variable in class org.apache.struts.upload.MultipartIterator
            The size in bytes written to the filesystem at a time [20K]
            DiskFile - class org.apache.struts.upload.DiskFile.
             
            DiskFile(String) - Constructor for class org.apache.struts.upload.DiskFile
             
            DiskMultipartRequestHandler - class org.apache.struts.upload.DiskMultipartRequestHandler.
            This is a MultipartRequestHandler that writes file data directly to to temporary files on disk.
            DiskMultipartRequestHandler() - Constructor for class org.apache.struts.upload.DiskMultipartRequestHandler
             
            DispatchAction - class org.apache.struts.actions.DispatchAction.
            An abstract Action that dispatches to a public method that is named by the request parameter whose name is specified by the parameter property of the corresponding ActionMapping.
            DispatchAction() - Constructor for class org.apache.struts.actions.DispatchAction
             
            doAfterBody() - Method in class org.apache.struts.taglib.EnumerateTag
            Make the next collection element available and loop, or finish the iterations if there are no more elements.
            doAfterBody() - Method in class org.apache.struts.taglib.IterateTag
            Make the next collection element available and loop, or finish the iterations if there are no more elements.
            doAfterBody() - Method in class org.apache.struts.taglib.html.RadioTag
            Save the associated label from the body content.
            doAfterBody() - Method in class org.apache.struts.taglib.html.CancelTag
            Save the associated label from the body content.
            doAfterBody() - Method in class org.apache.struts.taglib.html.MultiboxTag
            Save the body contents of this tag as the constant that we will be returning.
            doAfterBody() - Method in class org.apache.struts.taglib.html.ResetTag
            Save the associated label from the body content.
            doAfterBody() - Method in class org.apache.struts.taglib.html.ButtonTag
            Save the associated label from the body content (if any).
            doAfterBody() - Method in class org.apache.struts.taglib.html.SubmitTag
            Save the associated label from the body content.
            doAfterBody() - Method in class org.apache.struts.taglib.html.LinkTag
            Save the associated label from the body content.
            doAfterBody() - Method in class org.apache.struts.taglib.html.SelectTag
            Save any body content of this tag, which will generally be the option(s) representing the values displayed to the user.
            doAfterBody() - Method in class org.apache.struts.taglib.html.OptionTag
            Process the body text of this tag (if any).
            doAfterBody() - Method in class org.apache.struts.taglib.html.CheckboxTag
            Save the associated label from the body content.
            doAfterBody() - Method in class org.apache.struts.taglib.logic.IterateTag
            Make the next collection element available and loop, or finish the iterations if there are no more elements.
            doEndTag() - Method in class org.apache.struts.taglib.LinkTag
            Render the end of the hyperlink.
            doEndTag() - Method in class org.apache.struts.taglib.FormTag
            Render the end of this form.
            doEndTag() - Method in class org.apache.struts.taglib.MultiboxTag
            Optionally render the associated label from the body content.
            doEndTag() - Method in class org.apache.struts.taglib.Options1Tag
            Process the end of this tag.
            doEndTag() - Method in class org.apache.struts.taglib.EnumerateTag
            Clean up after processing this enumeration.
            doEndTag() - Method in class org.apache.struts.taglib.OptionsTag
            Process the end of this tag.
            doEndTag() - Method in class org.apache.struts.taglib.RadioTag
            Optionally render the associated label from the body content.
            doEndTag() - Method in class org.apache.struts.taglib.ResetTag
            Process the end of this tag.
            doEndTag() - Method in class org.apache.struts.taglib.IncludeTag
            Look up the ActionForward associated with the specified name, and perform an include of the corresponding actual path.
            doEndTag() - Method in class org.apache.struts.taglib.BaseInputTag
            Process the end of this tag.
            doEndTag() - Method in class org.apache.struts.taglib.ForwardTag
            Look up the ActionForward associated with the specified name, and perform a forward or redirect to that path as indicated.
            doEndTag() - Method in class org.apache.struts.taglib.RedirectTag
            Render a redirect to the specified hyperlink, and skip the remainder of the current page.
            doEndTag() - Method in class org.apache.struts.taglib.SubmitTag
            Process the end of this tag.
            doEndTag() - Method in class org.apache.struts.taglib.CheckboxTag
            Optionally render the associated label from the body content.
            doEndTag() - Method in class org.apache.struts.taglib.ButtonTag
            Process the end of this tag.
            doEndTag() - Method in class org.apache.struts.taglib.CancelTag
            Process the end of this tag.
            doEndTag() - Method in class org.apache.struts.taglib.OptionTag
            Process the end of this tag.
            doEndTag() - Method in class org.apache.struts.taglib.Link1Tag
            Render the end of the hyperlink.
            doEndTag() - Method in class org.apache.struts.taglib.IterateTag
            Clean up after processing this enumeration.
            doEndTag() - Method in class org.apache.struts.taglib.SelectTag
            Render the end of this form.
            doEndTag() - Method in class org.apache.struts.taglib.html.HtmlTag
            Process the end of this tag.
            doEndTag() - Method in class org.apache.struts.taglib.html.ImgTag
            Render the end of the IMG tag.
            doEndTag() - Method in class org.apache.struts.taglib.html.OptionsTag
            Process the end of this tag.
            doEndTag() - Method in class org.apache.struts.taglib.html.BaseInputTag
            Process the end of this tag.
            doEndTag() - Method in class org.apache.struts.taglib.html.RadioTag
            Optionally render the associated label from the body content.
            doEndTag() - Method in class org.apache.struts.taglib.html.CancelTag
            Process the end of this tag.
            doEndTag() - Method in class org.apache.struts.taglib.html.MultiboxTag
            Render an input element for this tag.
            doEndTag() - Method in class org.apache.struts.taglib.html.ResetTag
            Process the end of this tag.
            doEndTag() - Method in class org.apache.struts.taglib.html.ButtonTag
            Process the end of this tag.
            doEndTag() - Method in class org.apache.struts.taglib.html.SubmitTag
            Process the end of this tag.
            doEndTag() - Method in class org.apache.struts.taglib.html.ImageTag
            Process the end of this tag.
            doEndTag() - Method in class org.apache.struts.taglib.html.LinkTag
            Render the end of the hyperlink.
            doEndTag() - Method in class org.apache.struts.taglib.html.RewriteTag
            Ignore the end of this tag.
            doEndTag() - Method in class org.apache.struts.taglib.html.SelectTag
            Render the end of this form.
            doEndTag() - Method in class org.apache.struts.taglib.html.OptionTag
            Process the end of this tag.
            doEndTag() - Method in class org.apache.struts.taglib.html.CheckboxTag
            Process the remainder of this page normally.
            doEndTag() - Method in class org.apache.struts.taglib.html.FormTag
            Render the end of this form.
            doEndTag() - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
            Evaluate the remainder of the current page normally.
            doEndTag() - Method in class org.apache.struts.taglib.logic.IterateTag
            Clean up after processing this enumeration.
            doEndTag() - Method in class org.apache.struts.taglib.logic.ForwardTag
            Look up the ActionForward associated with the specified name, and perform a forward or redirect to that path as indicated.
            doEndTag() - Method in class org.apache.struts.taglib.logic.RedirectTag
            Render the redirect and skip the remainder of this page.
            doEndTag() - Method in class org.apache.struts.taglib.template.PutTag
            Process the end tag by putting content into the enclosing insert tag.
            doEndTag() - Method in class org.apache.struts.taglib.template.InsertTag
            Process the end tag by including the template.
            doGet(HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.action.ActionServlet
            Process an HTTP "GET" request.
            doPost(HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.action.ActionServlet
            Process an HTTP "POST" request.
            doStartTag() - Method in class org.apache.struts.taglib.LinkTag
            Render the beginning of the hyperlink.
            doStartTag() - Method in class org.apache.struts.taglib.HtmlPropertyTag
            Process the start tag.
            doStartTag() - Method in class org.apache.struts.taglib.IfParameterEqualsTag
            Compare the specified parameter to the specified value, and decide whether or not to include the body content.
            doStartTag() - Method in class org.apache.struts.taglib.FormTag
            Render the beginning of this form.
            doStartTag() - Method in class org.apache.struts.taglib.MultiboxTag
            Generate the required input tag.
            doStartTag() - Method in class org.apache.struts.taglib.ParameterTag
            Generate the required value.
            doStartTag() - Method in class org.apache.struts.taglib.Options1Tag
            Process the start of this tag.
            doStartTag() - Method in class org.apache.struts.taglib.MessageTag
            Process the start tag.
            doStartTag() - Method in class org.apache.struts.taglib.ErrorsTag
            Render the specified error messages if there are any.
            doStartTag() - Method in class org.apache.struts.taglib.EnumerateTag
            Construct an enumeration for the specified collection, and begin looping through the body once per element.
            doStartTag() - Method in class org.apache.struts.taglib.OptionsTag
            Process the start of this tag.
            doStartTag() - Method in class org.apache.struts.taglib.GetPropertyTag
            Retrieve the required property and expose it as a scripting variable.
            doStartTag() - Method in class org.apache.struts.taglib.IfParameterNullTag
            Retrieve the specified parameter, and decide whether or not to include the body content.
            doStartTag() - Method in class org.apache.struts.taglib.RadioTag
            Generate the required input tag.
            doStartTag() - Method in class org.apache.struts.taglib.ResetTag
            Process the start of this tag.
            doStartTag() - Method in class org.apache.struts.taglib.EncodeRedirectURLTag
            Process the start tag.
            doStartTag() - Method in class org.apache.struts.taglib.IncludeTag
            Defer generation until the end of this tag is encountered.
            doStartTag() - Method in class org.apache.struts.taglib.BaseInputTag
            Process the start of this tag.
            doStartTag() - Method in class org.apache.struts.taglib.BaseFieldTag
            Generate the required input tag.
            doStartTag() - Method in class org.apache.struts.taglib.IfAttributeMissingTag
            Conditionally evaluate the body content of this tag.
            doStartTag() - Method in class org.apache.struts.taglib.ForwardTag
            Defer generation until the end of this tag is encountered.
            doStartTag() - Method in class org.apache.struts.taglib.IfParameterNotEqualsTag
            Compare the specified parameter to the specified value, and decide whether or not to include the body content.
            doStartTag() - Method in class org.apache.struts.taglib.RedirectTag
            Defer generation until the end of this tag is encountered.
            doStartTag() - Method in class org.apache.struts.taglib.SubmitTag
            Process the start of this tag.
            doStartTag() - Method in class org.apache.struts.taglib.TextareaTag
            Generate the required input tag.
            doStartTag() - Method in class org.apache.struts.taglib.CheckboxTag
            Generate the required input tag.
            doStartTag() - Method in class org.apache.struts.taglib.ButtonTag
            Process the start of this tag.
            doStartTag() - Method in class org.apache.struts.taglib.IfParameterNotNullTag
            Retrieve the specified parameter, and decide whether or not to include the body content.
            doStartTag() - Method in class org.apache.struts.taglib.BaseTag
            Process the start of this tag.
            doStartTag() - Method in class org.apache.struts.taglib.CancelTag
            Process the start of this tag.
            doStartTag() - Method in class org.apache.struts.taglib.OptionTag
            Process the start of this tag.
            doStartTag() - Method in class org.apache.struts.taglib.Link1Tag
            Render the beginning of the hyperlink.
            doStartTag() - Method in class org.apache.struts.taglib.PropertyTag
            Generate the required input tag.
            doStartTag() - Method in class org.apache.struts.taglib.IfPropertyEqualsTag
            Conditionally evaluate the body content of this tag.
            doStartTag() - Method in class org.apache.struts.taglib.IfAttributeExistsTag
            Conditionally evaluate the body content of this tag.
            doStartTag() - Method in class org.apache.struts.taglib.IterateTag
            Construct an iterator for the specified collection, and begin looping through the body once per element.
            doStartTag() - Method in class org.apache.struts.taglib.IfPropertyNotEqualsTag
            Conditionally evaluate the body content of this tag.
            doStartTag() - Method in class org.apache.struts.taglib.SelectTag
            Render the beginning of this form.
            doStartTag() - Method in class org.apache.struts.taglib.EncodeURLTag
            Process the start tag.
            doStartTag() - Method in class org.apache.struts.taglib.bean.HeaderTag
            Retrieve the required property and expose it as a scripting variable.
            doStartTag() - Method in class org.apache.struts.taglib.bean.WriteTag
            Process the start tag.
            doStartTag() - Method in class org.apache.struts.taglib.bean.DefineTag
            Retrieve the required property and expose it as a scripting variable.
            doStartTag() - Method in class org.apache.struts.taglib.bean.SizeTag
            Retrieve the required property and expose it as a scripting variable.
            doStartTag() - Method in class org.apache.struts.taglib.bean.CookieTag
            Retrieve the required property and expose it as a scripting variable.
            doStartTag() - Method in class org.apache.struts.taglib.bean.ParameterTag
            Retrieve the required property and expose it as a scripting variable.
            doStartTag() - Method in class org.apache.struts.taglib.bean.ResourceTag
            Retrieve the required property and expose it as a scripting variable.
            doStartTag() - Method in class org.apache.struts.taglib.bean.IncludeTag
            Define the contents returned for the specified resource as a page scope attribute.
            doStartTag() - Method in class org.apache.struts.taglib.bean.StrutsTag
            Retrieve the required configuration object and expose it as a scripting variable.
            doStartTag() - Method in class org.apache.struts.taglib.bean.PageTag
            Retrieve the required configuration object and expose it as a scripting variable.
            doStartTag() - Method in class org.apache.struts.taglib.bean.MessageTag
            Process the start tag.
            doStartTag() - Method in class org.apache.struts.taglib.html.HtmlTag
            Process the start of this tag.
            doStartTag() - Method in class org.apache.struts.taglib.html.ImgTag
            Render the beginning of the IMG tag.
            doStartTag() - Method in class org.apache.struts.taglib.html.OptionsTag
            Process the start of this tag.
            doStartTag() - Method in class org.apache.struts.taglib.html.BaseInputTag
            Process the start of this tag.
            doStartTag() - Method in class org.apache.struts.taglib.html.BaseFieldTag
            Generate the required input tag.
            doStartTag() - Method in class org.apache.struts.taglib.html.BaseTag
            Process the start of this tag.
            doStartTag() - Method in class org.apache.struts.taglib.html.RadioTag
            Generate the required input tag.
            doStartTag() - Method in class org.apache.struts.taglib.html.CancelTag
            Process the start of this tag.
            doStartTag() - Method in class org.apache.struts.taglib.html.ErrorsTag
            Render the specified error messages if there are any.
            doStartTag() - Method in class org.apache.struts.taglib.html.MultiboxTag
            Process the beginning of this tag.
            doStartTag() - Method in class org.apache.struts.taglib.html.ResetTag
            Process the start of this tag.
            doStartTag() - Method in class org.apache.struts.taglib.html.ButtonTag
            Process the start of this tag.
            doStartTag() - Method in class org.apache.struts.taglib.html.SubmitTag
            Process the start of this tag.
            doStartTag() - Method in class org.apache.struts.taglib.html.ImageTag
            Process the start of this tag.
            doStartTag() - Method in class org.apache.struts.taglib.html.LinkTag
            Render the beginning of the hyperlink.
            doStartTag() - Method in class org.apache.struts.taglib.html.RewriteTag
            Render the appropriately encoded URI.
            doStartTag() - Method in class org.apache.struts.taglib.html.SelectTag
            Render the beginning of this form.
            doStartTag() - Method in class org.apache.struts.taglib.html.OptionTag
            Process the start of this tag.
            doStartTag() - Method in class org.apache.struts.taglib.html.CheckboxTag
            Generate the required input tag.
            doStartTag() - Method in class org.apache.struts.taglib.html.FormTag
            Render the beginning of this form.
            doStartTag() - Method in class org.apache.struts.taglib.html.TextareaTag
            Generate the required input tag.
            doStartTag() - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
            Perform the test required for this particular tag, and either evaluate or skip the body of this tag.
            doStartTag() - Method in class org.apache.struts.taglib.logic.IterateTag
            Construct an iterator for the specified collection, and begin looping through the body once per element.
            doStartTag() - Method in class org.apache.struts.taglib.logic.ForwardTag
            Defer processing until the end of this tag is encountered.
            doStartTag() - Method in class org.apache.struts.taglib.logic.RedirectTag
            Defer generation until the end of this tag is encountered.
            doStartTag() - Method in class org.apache.struts.taglib.template.GetTag
            Print content named by setName() or include it, depending on the content's direct attribute.
            doStartTag() - Method in class org.apache.struts.taglib.template.InsertTag
            Process the start tag by pushing this tag's map onto the content map stack.
            DOUBLE_COMPARE - Static variable in class org.apache.struts.taglib.logic.CompareTagBase
            We will do a double/float comparison.
            driver - Variable in class org.apache.struts.util.GenericDataSource
            The JDBC driver that we use as a connection factory.
            driverClass - Variable in class org.apache.struts.util.GenericDataSource
            The Java class name of the JDBC driver to use.
            dtds - Variable in class org.apache.struts.digester.Digester
            The URLs of DTDs that have been registered, keyed by the public identifier that corresponds.

            E

            empty() - Method in class org.apache.struts.action.ActionErrors
            Return true if there are no error messages recorded in this collection, or false otherwise.
            empty() - Method in class org.apache.struts.util.ArrayStack
            Return true if this stack is currently empty.
            EncodeRedirectURLTag - class org.apache.struts.taglib.EncodeRedirectURLTag.
            Custom tag implementation that acts like <jsp:getProperty> but encodes the output stream so that HTML-related characters do not cause difficulties.
            EncodeRedirectURLTag() - Constructor for class org.apache.struts.taglib.EncodeRedirectURLTag
            Construct a new instance of this tag.
            EncodeURLTag - class org.apache.struts.taglib.EncodeURLTag.
            Custom tag implementation that acts like <jsp:getProperty> but encodes the output stream so that HTML-related characters do not cause difficulties.
            EncodeURLTag() - Constructor for class org.apache.struts.taglib.EncodeURLTag
            Construct a new instance of this tag.
            encounteredFinalBoundary() - Method in class org.apache.struts.upload.MultipartValueStream
             
            enctype - Variable in class org.apache.struts.taglib.FormTag
            The content encoding to be used on a POST submit.
            enctype - Variable in class org.apache.struts.taglib.html.FormTag
            The content encoding to be used on a POST submit.
            end() - Method in class org.apache.struts.digester.Rule
            This method is called when the end of a matching XML element is encountered.
            end() - Method in class org.apache.struts.digester.ObjectCreateRule
            Process the end of this element.
            end() - Method in class org.apache.struts.digester.SetTopRule
            Process the end of this element.
            end() - Method in class org.apache.struts.digester.SetNextRule
            Process the end of this element.
            end() - Method in class org.apache.struts.digester.CallParamRule
            Process the end of this element.
            end() - Method in class org.apache.struts.digester.CallMethodRule
            Process the end of this element.
            endDocument() - Method in class org.apache.struts.digester.Digester
            Process notification of the end of the document being reached.
            endElement(String) - Method in class org.apache.struts.digester.Digester
            Process notification of the end of an XML element being reached.
            ensureCapacity(int) - Method in class org.apache.struts.util.FastArrayList
            Deprecated. Increase the capacity of this ArrayList instance, if necessary, to ensure that it can hold at least the number of elements specified by the minimum capacity argument.
            entrySet() - Method in class org.apache.struts.util.FastHashMap
            Deprecated. Return a collection view of the mappings contained in this map.
            entrySet() - Method in class org.apache.struts.util.FastTreeMap
            Deprecated. Return a collection view of the mappings contained in this map.
            enum - Variable in class org.apache.struts.util.IteratorAdapter
             
            EnumerateTag - class org.apache.struts.taglib.EnumerateTag.
            Custom tag that enumerates the elements of a collection, which can be either an attribute or the property of an attribute.
            EnumerateTag() - Constructor for class org.apache.struts.taglib.EnumerateTag
             
            EnumerateTei - class org.apache.struts.taglib.EnumerateTei.
            Implementation of TagExtraInfo for the enumerate tag, identifying the scripting object(s) to be made visible.
            EnumerateTei() - Constructor for class org.apache.struts.taglib.EnumerateTei
             
            enumeration - Variable in class org.apache.struts.taglib.EnumerateTag
            Enumeration of the elements of this collection.
            equals(byte[], int, int, byte[]) - Static method in class org.apache.struts.upload.MultipartIterator
            Checks bytes for equality.
            equals(Object) - Method in class org.apache.struts.util.FastHashMap
            Deprecated. Compare the specified object with this list for equality.
            equals(Object) - Method in class org.apache.struts.util.FastArrayList
            Deprecated. Compare the specified object with this list for equality.
            equals(Object) - Method in class org.apache.struts.util.FastTreeMap
            Deprecated. Compare the specified object with this list for equality.
            EqualTag - class org.apache.struts.taglib.logic.EqualTag.
            Evaluate the nested body content of this tag if the specified variable and value are equal.
            EqualTag() - Constructor for class org.apache.struts.taglib.logic.EqualTag
             
            error - Variable in class org.apache.struts.util.ServletContextWriter
            The error state for this stream.
            ERROR_KEY - Static variable in class org.apache.struts.action.Action
            The request attributes key under which your action should store an org.apache.struts.action.ActionErrors object, if you are using the corresponding custom tag library elements.
            error(SAXParseException) - Method in class org.apache.struts.digester.Digester
            Forward notification of a parsing error to the application supplied error handler (if any).
            errorHandler - Variable in class org.apache.struts.digester.Digester
            The application-supplied error handler that is notified when parsing warnings, errors, or fatal errors occur.
            ErrorMessages - class org.apache.struts.util.ErrorMessages.
            Deprecated. Use org.apache.struts.action.ActionErrors instead
            ErrorMessages() - Constructor for class org.apache.struts.util.ErrorMessages
            Deprecated.  
            errors - Variable in class org.apache.struts.action.ActionErrors
            The accumulated set of ActionError objects (represented as an ArrayList) for each property, keyed by property name.
            errors - Variable in class org.apache.struts.util.ErrorMessages
            Deprecated. The accumulated set of error message keys.
            ErrorsTag - class org.apache.struts.taglib.ErrorsTag.
            Custom tag that renders error messages if an appropriate request attribute has been created.
            ErrorsTag - class org.apache.struts.taglib.html.ErrorsTag.
            Custom tag that renders error messages if an appropriate request attribute has been created.
            ErrorsTag() - Constructor for class org.apache.struts.taglib.ErrorsTag
             
            ErrorsTag() - Constructor for class org.apache.struts.taglib.html.ErrorsTag
             
            EXCEPTION_KEY - Static variable in class org.apache.struts.action.Action
            The request attributes key under which Struts custom tags might store a Throwable that caused them to report a JspException at runtime.

            F

            factory - Variable in class org.apache.struts.util.MessageResources
            The MessageResourcesFactory that created this instance.
            factoryClass - Variable in class org.apache.struts.action.ActionServlet
            The Java class name of the MessageResourcesFactory class for the application message resources bundle.
            factoryClass - Static variable in class org.apache.struts.util.MessageResourcesFactory
            The fully qualified class name to be used for MessageResourcesFactory instances.
            fast - Variable in class org.apache.struts.util.FastHashMap
            Deprecated. Are we operating in "fast" mode?
            fast - Variable in class org.apache.struts.util.FastArrayList
            Deprecated. Are we operating in "fast" mode?
            fast - Variable in class org.apache.struts.util.FastTreeMap
            Deprecated. Are we operating in "fast" mode?
            FastArrayList - class org.apache.struts.util.FastArrayList.
            Deprecated. At some point after Struts 1.0 final, will be replaced by an equivalent class in the Jakarta Commons Collections package.
            FastArrayList() - Constructor for class org.apache.struts.util.FastArrayList
            Deprecated. Construct a an empty list.
            FastArrayList(Collection) - Constructor for class org.apache.struts.util.FastArrayList
            Deprecated. Construct a list containing the elements of the specified collection, in the order they are returned by the collection's iterator.
            FastArrayList(int) - Constructor for class org.apache.struts.util.FastArrayList
            Deprecated. Construct an empty list with the specified capacity.
            FastHashMap - class org.apache.struts.util.FastHashMap.
            Deprecated. At some point after Struts 1.0 final, will be replaced by an equivalent class in the Jakarta Commons Collections package.
            FastHashMap() - Constructor for class org.apache.struts.util.FastHashMap
            Deprecated. Construct a an empty map.
            FastHashMap(int) - Constructor for class org.apache.struts.util.FastHashMap
            Deprecated. Construct an empty map with the specified capacity.
            FastHashMap(int, float) - Constructor for class org.apache.struts.util.FastHashMap
            Deprecated. Construct an empty map with the specified capacity and load factor.
            FastHashMap(Map) - Constructor for class org.apache.struts.util.FastHashMap
            Deprecated. Construct a new map with the same mappings as the specified map.
            FastTreeMap - class org.apache.struts.util.FastTreeMap.
            Deprecated. At some point after Struts 1.0 final, will be replaced by an equivalent class in the Jakarta Commons Collections package.
            FastTreeMap() - Constructor for class org.apache.struts.util.FastTreeMap
            Deprecated. Construct a an empty map.
            FastTreeMap(Comparator) - Constructor for class org.apache.struts.util.FastTreeMap
            Deprecated. Construct an empty map with the specified comparator.
            FastTreeMap(Map) - Constructor for class org.apache.struts.util.FastTreeMap
            Deprecated. Construct a new map with the same mappings as the specified map, sorted according to the keys's natural order
            FastTreeMap(SortedMap) - Constructor for class org.apache.struts.util.FastTreeMap
            Deprecated. Construct a new map with the same mappings as the specified map, sorted according to the same ordering
            fatalError(SAXParseException) - Method in class org.apache.struts.digester.Digester
            Forward notification of a fatal parsing error to the application supplied error handler (if any).
            file - Variable in class org.apache.struts.upload.MultipartElement
            The element's data represented in a (possibly temporary) file
            fileElements - Variable in class org.apache.struts.upload.DiskMultipartRequestHandler
            A Hashtable representing the form files uploaded
            fileName - Variable in class org.apache.struts.upload.DiskFile
            The name of the file
            fileName - Variable in class org.apache.struts.upload.MultipartElement
            The element's filename, null for text elements
            filePath - Variable in class org.apache.struts.upload.DiskFile
            The filepath to the temporary file
            fileSize - Variable in class org.apache.struts.upload.DiskFile
            The size in bytes of the file
            FileTag - class org.apache.struts.taglib.FileTag.
            Custom tag for input fields of type "file".
            FileTag - class org.apache.struts.taglib.html.FileTag.
            Custom tag for input fields of type "file".
            FileTag() - Constructor for class org.apache.struts.taglib.FileTag
            Construct a new instance of this tag.
            FileTag() - Constructor for class org.apache.struts.taglib.html.FileTag
            Construct a new instance of this tag.
            fill() - Method in class org.apache.struts.upload.BufferedMultipartInputStream
            Fills the buffer with data from the underlying inputStream.
            filter - Variable in class org.apache.struts.taglib.bean.WriteTag
            Filter the rendered output for characters that are sensitive in HTML?
            filter(String) - Static method in class org.apache.struts.util.ResponseUtils
            Filter the specified string for characters that are senstive to HTML interpreters, returning the string with these characters replaced by the corresponding character entities.
            finalBoundaryReached - Variable in class org.apache.struts.upload.MultipartValueStream
            is the boundary found a final boundary?
            findDataSource(String) - Method in class org.apache.struts.action.ActionServlet
            Return a JDBC data source associated with this application, if any.
            findFormBean(String) - Method in class org.apache.struts.action.ActionServlet
            Return the form bean definition associated with the specified logical name, if any; otherwise return null.
            findFormBean(String) - Method in class org.apache.struts.action.ActionFormBeans
            Return the formBean associated with the specified logical name, if any; otherwise return null.
            findFormBeans() - Method in class org.apache.struts.action.ActionFormBeans
            Return the set of names for form beans defined in this collection.
            findForward(String) - Method in class org.apache.struts.action.ActionMapping
            Return the ActionForward with the specified name, if any; otherwise return null.
            findForward(String) - Method in class org.apache.struts.action.ActionServlet
            Return the forwarding associated with the specified logical name, if any; otherwise return null.
            findForward(String) - Method in class org.apache.struts.action.ActionForwards
            Return the forwarding associated with the specified logical name, if any; otherwise return null.
            findForwards() - Method in class org.apache.struts.action.ActionMapping
            Return the logical names of all locally defined forwards for this mapping.
            findForwards() - Method in class org.apache.struts.action.ActionForwards
            Return the set of logical names for forwards defined in this collection.
            findMapping(String) - Method in class org.apache.struts.action.ActionServlet
            Return the mapping associated with the specified request path, if any; otherwise return null.
            findMapping(String) - Method in class org.apache.struts.action.ActionMappings
            Return the mapping associated with the specified logical name, if any; otherwise return null.
            findMappings() - Method in class org.apache.struts.action.ActionMappings
            Return the set of paths for mappings defined in this collection.
            finish() - Method in class org.apache.struts.digester.Rule
            This method is called after all parsing methods have been called, to allow Rules to remove temporary data.
            finish() - Method in class org.apache.struts.digester.ObjectCreateRule
            Clean up after parsing is complete.
            finish() - Method in class org.apache.struts.digester.SetTopRule
            Clean up after parsing is complete.
            finish() - Method in class org.apache.struts.digester.SetNextRule
            Clean up after parsing is complete.
            finish() - Method in class org.apache.struts.digester.CallParamRule
            Clean up after parsing is complete.
            finish() - Method in class org.apache.struts.digester.CallMethodRule
            Clean up after parsing is complete.
            finish() - Method in interface org.apache.struts.upload.MultipartRequestHandler
            This method is called on when a successful form post has been made.
            finish() - Method in class org.apache.struts.upload.DiskMultipartRequestHandler
            Calls on rollback() to delete temporary files
            firstKey() - Method in class org.apache.struts.util.FastTreeMap
            Deprecated. Return the first (lowest) key currently in this sorted map.
            flush - Variable in class org.apache.struts.taglib.template.GetTag
            Should we flush before including this text?
            flush() - Method in class org.apache.struts.util.ServletContextWriter
            Flush the stream.
            focus - Variable in class org.apache.struts.taglib.FormTag
            The name of the field to receive focus, if any.
            focus - Variable in class org.apache.struts.taglib.html.FormTag
            The name of the field to receive focus, if any.
            FORM_BEANS_KEY - Static variable in class org.apache.struts.action.Action
            The context attributes key under which our org.apache.struts.action.ActionFormBeans collection is normally stored, unless overridden when initializing our ActionServlet.
            FORM_KEY - Static variable in class org.apache.struts.taglib.Constants
            The attribute key for the form tag itself.
            FORM_KEY - Static variable in class org.apache.struts.taglib.html.Constants
            The attribute key for the form tag itself.
            formats - Variable in class org.apache.struts.util.MessageResources
            The set of previously created MessageFormat objects, keyed by the key computed in messageKey().
            formBean - Variable in class org.apache.struts.taglib.bean.StrutsTag
            The name of the ActionFormBean object to be exposed.
            formBeanClass - Variable in class org.apache.struts.action.ActionServlet
            The Java class name of the ActionFormBean implementation class to use.
            formBeans - Variable in class org.apache.struts.action.ActionServlet
            The global ActionFormBean collection for this controller.
            formBeans - Variable in class org.apache.struts.action.ActionFormBeans
            The collection of ActionFormBean instances, keyed by name.
            FormFile - interface org.apache.struts.upload.FormFile.
            This interface is used to define a file uploaded by a client.
            FormTag - class org.apache.struts.taglib.FormTag.
            Custom tag that represents an input form, associated with a bean whose properties correspond to the various fields of the form.
            FormTag - class org.apache.struts.taglib.html.FormTag.
            Custom tag that represents an input form, associated with a bean whose properties correspond to the various fields of the form.
            FormTag() - Constructor for class org.apache.struts.taglib.FormTag
             
            FormTag() - Constructor for class org.apache.struts.taglib.html.FormTag
             
            forward - Variable in class org.apache.struts.action.ActionMapping
            The context relative path of the servlet or JSP resource (to be called via RequestDispatcher.forward()) that will process this request, rather than instantiating and calling the Action class that is specified by the type attribute.
            forward - Variable in class org.apache.struts.taglib.LinkTag
            The logical forward name from which to retrieve the hyperlink URI.
            forward - Variable in class org.apache.struts.taglib.Link1Tag
            The logical forward name from which to retrieve the hyperlink URI.
            forward - Variable in class org.apache.struts.taglib.bean.IncludeTag
            The name of the global ActionForward that contains a path to our requested resource.
            forward - Variable in class org.apache.struts.taglib.bean.StrutsTag
            The name of the ActionForward object to be exposed.
            forward - Variable in class org.apache.struts.taglib.html.LinkTag
            The logical forward name from which to retrieve the hyperlink URI.
            forward - Variable in class org.apache.struts.taglib.logic.RedirectTag
            The logical forward name from which to retrieve the redirect URI.
            ForwardAction - class org.apache.struts.actions.ForwardAction.
            An Action that forwards to the context-relative URI specified by the parameter property of our associated ActionMapping.
            ForwardAction() - Constructor for class org.apache.struts.actions.ForwardAction
             
            forwardClass - Variable in class org.apache.struts.action.ActionServlet
            The Java class name of the ActionForward implementation class to use.
            ForwardingActionForward - class org.apache.struts.action.ForwardingActionForward.
            A subclass of ActionForward that defaults the redirect attribute to false.
            ForwardingActionForward() - Constructor for class org.apache.struts.action.ForwardingActionForward
            Construct a new instance with default values.
            ForwardingActionForward(String) - Constructor for class org.apache.struts.action.ForwardingActionForward
            Construct a new instance with the specified path.
            forwards - Variable in class org.apache.struts.action.ActionMapping
            The set of ActionForward objects associated with this mapping.
            forwards - Variable in class org.apache.struts.action.ActionServlet
            The global ActionForward collection for this controller.
            forwards - Variable in class org.apache.struts.action.ActionForwards
            The collection of ActionForward instances, keyed by logical name.
            FORWARDS_KEY - Static variable in class org.apache.struts.action.Action
            The context attributes key under which our org.apache.struts.action.ActionForwards collection is normally stored, unless overridden when initializing our ActionServlet.
            ForwardTag - class org.apache.struts.taglib.ForwardTag.
            Perform a forward or redirect to a page that is looked up in the global ActionForwards collection associated with our application.
            ForwardTag - class org.apache.struts.taglib.logic.ForwardTag.
            Perform a forward or redirect to a page that is looked up in the global ActionForwards collection associated with our application.
            ForwardTag() - Constructor for class org.apache.struts.taglib.ForwardTag
             
            ForwardTag() - Constructor for class org.apache.struts.taglib.logic.ForwardTag
             

            G

            generateToken(HttpServletRequest) - Method in class org.apache.struts.action.Action
            Generate a new transaction token, to be used for enforcing a single request for a particular transaction.
            GenericConnection - class org.apache.struts.util.GenericConnection.
            Generic wrapper implementation of a Connection that works with GenericDataSource to wrap connections for any JDBC driver.
            GenericConnection(GenericDataSource, Connection, boolean, boolean) - Constructor for class org.apache.struts.util.GenericConnection
            Construct a new GenericConnection wrapping the specified connection.
            GenericDataSource - class org.apache.struts.util.GenericDataSource.
            Generic data source implementation of the DataSource interface.
            GenericDataSource() - Constructor for class org.apache.struts.util.GenericDataSource
             
            get() - Method in class org.apache.struts.action.ActionErrors
            Return the set of all recorded error messages, without distinction by which property the messages are associated with.
            get(int) - Method in class org.apache.struts.util.FastArrayList
            Deprecated. Return the element at the specified position in the list.
            get(Object) - Method in class org.apache.struts.util.FastHashMap
            Deprecated. Return the value to which this map maps the specified key.
            get(Object) - Method in class org.apache.struts.util.FastTreeMap
            Deprecated. Return the value to which this map maps the specified key.
            get(String) - Method in class org.apache.struts.action.ActionErrors
            Return the set of error messages related to a specific property.
            get(String) - Method in class org.apache.struts.taglib.template.util.ContentMap
            Returns the content associated with name
            getAccept() - Method in class org.apache.struts.taglib.BaseFieldTag
             
            getAccept() - Method in class org.apache.struts.taglib.html.BaseFieldTag
             
            getAccessibleMethod(Method) - Static method in class org.apache.struts.util.PropertyUtils
            Deprecated. Return an accessible method (that is, one that can be invoked via reflection) that implements the specified Method.
            getAccessibleMethodFromInterfaceNest(Class, String, Class[]) - Static method in class org.apache.struts.util.PropertyUtils
            Deprecated. Return an accessible method (that is, one that can be invoked via reflection) that implements the specified method, by scanning through all implemented interfaces and subinterfaces.
            getAccesskey() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Returns the accessKey character.
            getAccessKey() - Method in class org.apache.struts.taglib.BaseHandlerTag
            Returns the accessKey character.
            getAction() - Method in class org.apache.struts.taglib.FormTag
            Return the action URL to which this form should be submitted.
            getAction() - Method in class org.apache.struts.taglib.html.FormTag
            Return the action URL to which this form should be submitted.
            getActionClass() - Method in class org.apache.struts.action.ActionMapping
            Deprecated. Use getType() instead
            getActionMappingName() - Method in class org.apache.struts.taglib.html.FormTag
            Return the form action converted into an action mapping path.
            getActionMappingURL() - Method in class org.apache.struts.taglib.html.FormTag
            Return the form action converted into a server-relative URL.
            getActiveCount() - Method in class org.apache.struts.util.GenericDataSource
             
            getActualContent() - Method in class org.apache.struts.taglib.template.PutTag
            Returns the content associated with this tag.
            getAlign() - Method in class org.apache.struts.taglib.html.ImgTag
             
            getAllElements() - Method in interface org.apache.struts.upload.MultipartRequestHandler
            This method returns all elements of a multipart request.
            getAllElements() - Method in class org.apache.struts.upload.DiskMultipartRequestHandler
             
            getAlt() - Method in class org.apache.struts.taglib.html.ImgTag
             
            getAlt() - Method in class org.apache.struts.taglib.html.ImageTag
             
            getAltKey() - Method in class org.apache.struts.taglib.html.ImgTag
             
            getAltKey() - Method in class org.apache.struts.taglib.html.ImageTag
             
            getAncestor(String) - Method in class org.apache.struts.taglib.template.PutTag
            Convenience method for locating ancestor tags by class name.
            getAnchor() - Method in class org.apache.struts.taglib.bean.IncludeTag
             
            getAnchor() - Method in class org.apache.struts.taglib.html.LinkTag
             
            getAnchor() - Method in class org.apache.struts.taglib.logic.RedirectTag
             
            getArg0() - Method in class org.apache.struts.taglib.MessageTag
            Return the first optional argument.
            getArg0() - Method in class org.apache.struts.taglib.bean.MessageTag
             
            getArg1() - Method in class org.apache.struts.taglib.MessageTag
            Return the second optional argument.
            getArg1() - Method in class org.apache.struts.taglib.bean.MessageTag
             
            getArg2() - Method in class org.apache.struts.taglib.MessageTag
            Return the third optional argument.
            getArg2() - Method in class org.apache.struts.taglib.bean.MessageTag
             
            getArg3() - Method in class org.apache.struts.taglib.MessageTag
            Return the fourth optional argument.
            getArg3() - Method in class org.apache.struts.taglib.bean.MessageTag
             
            getArg4() - Method in class org.apache.struts.taglib.MessageTag
            Return the fifth optional argument.
            getArg4() - Method in class org.apache.struts.taglib.bean.MessageTag
             
            getArrayProperty(Object, String) - Static method in class org.apache.struts.util.BeanUtils
            Deprecated. Return the value of the specified array property of the specified bean, as a String array.
            getAttribute() - Method in class org.apache.struts.action.ActionMapping
            Return the attribute name for our form bean.
            getAttribute(String) - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            getAttributeNames() - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            getAuthType() - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            getAutoCommit() - Method in class org.apache.struts.util.GenericConnection
            Return the current auto-commit state.
            getAutoCommit() - Method in class org.apache.struts.util.GenericDataSource
             
            getBorder() - Method in class org.apache.struts.taglib.html.ImgTag
             
            getBorder() - Method in class org.apache.struts.taglib.html.ImageTag
             
            getBufferSize() - Method in class org.apache.struts.action.ActionServlet
            Get the buffer size (how large of a chunk of data is recieved by the input stream at once) used for file uploading.
            getBufferSize() - Method in class org.apache.struts.upload.MultipartIterator
            Get the maximum amount of bytes read from a line at one time
            getBundle() - Method in class org.apache.struts.taglib.MessageTag
            Return the bundle key.
            getBundle() - Method in class org.apache.struts.taglib.bean.MessageTag
             
            getBundle() - Method in class org.apache.struts.taglib.html.ImgTag
             
            getBundle() - Method in class org.apache.struts.taglib.html.ErrorsTag
             
            getBundle() - Method in class org.apache.struts.taglib.html.ImageTag
             
            getBundle() - Method in class org.apache.struts.taglib.html.OptionTag
             
            getCatalog() - Method in class org.apache.struts.util.GenericConnection
            Return the current catalog name for this Connection.
            getCharacterEncoding() - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            getCollection() - Method in class org.apache.struts.taglib.EnumerateTag
            Return the collection over which we will be enumerating.
            getCollection() - Method in class org.apache.struts.taglib.IterateTag
            Return the collection over which we will be iterating.
            getCollection() - Method in class org.apache.struts.taglib.bean.SizeTag
             
            getCollection() - Method in class org.apache.struts.taglib.html.OptionsTag
             
            getCollection() - Method in class org.apache.struts.taglib.logic.IterateTag
             
            getCols() - Method in class org.apache.struts.taglib.BaseInputTag
            Return the number of columns for this field.
            getCols() - Method in class org.apache.struts.taglib.html.BaseInputTag
            Return the number of columns for this field.
            getConfig() - Method in class org.apache.struts.util.MessageResources
             
            getConnection() - Method in class org.apache.struts.util.GenericConnection
            Return the actual connection that we are wrapping.
            getConnection() - Method in class org.apache.struts.util.GenericDataSource
            Attempt to establish a database connection.
            getConnection(String, String) - Method in class org.apache.struts.util.GenericDataSource
            Attempt to establish a database connection.
            getContent() - Method in class org.apache.struts.taglib.template.PutTag
            Get the content attribute.
            getContent() - Method in class org.apache.struts.taglib.template.util.Content
            Return content
            getContentLength() - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            getContentMap() - Method in class org.apache.struts.taglib.template.InsertTag
            Get the map attribute.
            getContentType() - Method in class org.apache.struts.upload.DiskFile
            Get the content type
            getContentType() - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            getContentType() - Method in interface org.apache.struts.upload.FormFile
            Get the content type for this file.
            getContentType() - Method in class org.apache.struts.upload.MultipartElement
            Retrieve the content type
            getContextPath() - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            getCookie() - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
             
            getCookies() - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            getCount() - Method in class org.apache.struts.digester.Digester
            Return the current depth of the element stack.
            getData() - Method in class org.apache.struts.upload.MultipartElement
            Deprecated. Use the getFile method to get a File representing the data for this element
            getDataSource() - Method in class org.apache.struts.util.GenericConnection
            Return the data source that owns this connection.
            getDateHeader(String) - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            getDebug() - Method in class org.apache.struts.action.ActionServlet
            Return the debugging detail level for this servlet.
            getDebug() - Method in class org.apache.struts.digester.Digester
            Return the debugging detail level of this Digester.
            getDebug() - Static method in class org.apache.struts.util.PropertyUtils
            Deprecated.  
            getDebug() - Static method in class org.apache.struts.util.BeanUtils
            Deprecated.  
            getDebug() - Method in class org.apache.struts.util.GenericDataSource
             
            getDefaultBoolean() - Method in class org.apache.struts.util.ConvertUtils
            Deprecated.  
            getDefaultByte() - Method in class org.apache.struts.util.ConvertUtils
            Deprecated.  
            getDefaultCharacter() - Method in class org.apache.struts.util.ConvertUtils
            Deprecated.  
            getDefaultDouble() - Method in class org.apache.struts.util.ConvertUtils
            Deprecated.  
            getDefaultFloat() - Method in class org.apache.struts.util.ConvertUtils
            Deprecated.  
            getDefaultInteger() - Method in class org.apache.struts.util.ConvertUtils
            Deprecated.  
            getDefaultLong() - Method in class org.apache.struts.util.ConvertUtils
            Deprecated.  
            getDefaultShort() - Method in class org.apache.struts.util.ConvertUtils
            Deprecated.  
            getDescription() - Method in class org.apache.struts.util.GenericDataSource
             
            getDirect() - Method in class org.apache.struts.taglib.template.PutTag
            Returns the direct attribute associated with this tag.
            getDisabled() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Returns the disabled event handler.
            getDisabled() - Method in class org.apache.struts.taglib.html.OptionTag
             
            getDriverClass() - Method in class org.apache.struts.util.GenericDataSource
             
            getEnctype() - Method in class org.apache.struts.taglib.FormTag
             
            getEnctype() - Method in class org.apache.struts.taglib.html.FormTag
             
            getEnumeration(String, String) - Method in class org.apache.struts.taglib.Options1Tag
            Return an enumeration for the option labels or values, based on our configured properties.
            getError(int) - Method in class org.apache.struts.util.ErrorMessages
            Deprecated. Return the error message key at the specified zero-relative index.
            getErrorHandler() - Method in class org.apache.struts.digester.Digester
            Return the error handler for this Digester.
            getErrors() - Method in class org.apache.struts.util.ErrorMessages
            Deprecated. Return the set of error message keys we have accumulated.
            getFactory() - Method in class org.apache.struts.util.MessageResources
             
            getFactoryClass() - Static method in class org.apache.struts.util.MessageResourcesFactory
             
            getFast() - Method in class org.apache.struts.action.ActionForwards
            Return the "fast" mode flag.
            getFast() - Method in class org.apache.struts.action.ActionFormBeans
            Return the "fast" mode flag.
            getFast() - Method in class org.apache.struts.action.ActionMappings
            Return the "fast" mode flag.
            getFast() - Method in class org.apache.struts.util.FastHashMap
            Deprecated.  
            getFast() - Method in class org.apache.struts.util.FastArrayList
            Deprecated.  
            getFast() - Method in class org.apache.struts.util.FastTreeMap
            Deprecated.  
            getFile() - Method in class org.apache.struts.upload.MultipartElement
            Get the File that holds the data for this element.
            getFileData() - Method in class org.apache.struts.upload.DiskFile
            Attempt to read the temporary file and get it's data in byte array form.
            getFileData() - Method in interface org.apache.struts.upload.FormFile
            Get the data in byte array for for this file.
            getFileData(int) - Method in class org.apache.struts.upload.DiskFile
            Attempts to read a file n bytes at a time, n being equal to "bufferSize".
            getFileElements() - Method in interface org.apache.struts.upload.MultipartRequestHandler
            This method is called on to retrieve all the FormFile input elements of the request.
            getFileElements() - Method in class org.apache.struts.upload.DiskMultipartRequestHandler
             
            getFileName() - Method in class org.apache.struts.upload.DiskFile
            Get the file name
            getFileName() - Method in interface org.apache.struts.upload.FormFile
            Get the file name of this file.
            getFileName() - Method in class org.apache.struts.upload.MultipartElement
            Retrieve the filename, can return null for text elements
            getFilePath() - Method in class org.apache.struts.upload.DiskFile
            Get the temporary file path for this form file
            getFileSize() - Method in class org.apache.struts.upload.DiskFile
            Get the file size
            getFileSize() - Method in interface org.apache.struts.upload.FormFile
            Get the size of this file
            getFilter() - Method in class org.apache.struts.taglib.bean.WriteTag
             
            getFlush() - Method in class org.apache.struts.taglib.template.GetTag
            Get the flush-before-include attribute.
            getFocus() - Method in class org.apache.struts.taglib.FormTag
            Return the focus field name for this form.
            getFocus() - Method in class org.apache.struts.taglib.html.FormTag
            Return the focus field name for this form.
            getFormAttribute() - Method in class org.apache.struts.action.ActionMapping
            Deprecated. Use getAttribute() instead
            getFormBean() - Method in class org.apache.struts.taglib.bean.StrutsTag
             
            getFormBeanClass() - Method in class org.apache.struts.action.ActionServlet
            Return the Java class name of the class used to instantiate ActionFormBean objects.
            getFormClass() - Method in class org.apache.struts.action.ActionMapping
            Deprecated. Use the bean name to look up the corresponding ActionFormBean instead
            getFormPrefix() - Method in class org.apache.struts.action.ActionMapping
            Deprecated. Use getPrefix() instead
            getFormScope() - Method in class org.apache.struts.action.ActionMapping
            Deprecated. Use getScope() instead
            getFormSuffix() - Method in class org.apache.struts.action.ActionMapping
            Deprecated. Use getSuffix() instead
            getForward() - Method in class org.apache.struts.action.ActionMapping
            Return the forward path for this mapping.
            getForward() - Method in class org.apache.struts.taglib.LinkTag
            Return the logical forward name.
            getForward() - Method in class org.apache.struts.taglib.Link1Tag
            Return the logical forward name.
            getForward() - Method in class org.apache.struts.taglib.bean.IncludeTag
             
            getForward() - Method in class org.apache.struts.taglib.bean.StrutsTag
             
            getForward() - Method in class org.apache.struts.taglib.html.LinkTag
             
            getForward() - Method in class org.apache.struts.taglib.logic.RedirectTag
             
            getForwardClass() - Method in class org.apache.struts.action.ActionServlet
            Return the Java class name of the class used to instantiate ActionForward objects.
            getHeader() - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
             
            getHeader(String) - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            getHeaderNames() - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            getHeaders(String) - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            getHeight() - Method in class org.apache.struts.taglib.html.ImgTag
             
            getHref() - Method in class org.apache.struts.taglib.LinkTag
            Return the hyperlink URI.
            getHref() - Method in class org.apache.struts.taglib.RedirectTag
            Return the hyperlink URI.
            getHref() - Method in class org.apache.struts.taglib.Link1Tag
            Return the hyperlink URI.
            getHref() - Method in class org.apache.struts.taglib.bean.IncludeTag
             
            getHref() - Method in class org.apache.struts.taglib.html.LinkTag
             
            getHref() - Method in class org.apache.struts.taglib.logic.RedirectTag
             
            getHspace() - Method in class org.apache.struts.taglib.html.ImgTag
             
            getId() - Method in class org.apache.struts.taglib.EnumerateTag
            Return the name of the scripting variable.
            getId() - Method in class org.apache.struts.taglib.GetPropertyTag
            Return the name of the scripting variable.
            getId() - Method in class org.apache.struts.taglib.IterateTag
            Return the name of the scripting variable.
            getId() - Method in class org.apache.struts.taglib.bean.HeaderTag
             
            getId() - Method in class org.apache.struts.taglib.bean.DefineTag
             
            getId() - Method in class org.apache.struts.taglib.bean.SizeTag
             
            getId() - Method in class org.apache.struts.taglib.bean.CookieTag
             
            getId() - Method in class org.apache.struts.taglib.bean.ParameterTag
             
            getId() - Method in class org.apache.struts.taglib.bean.ResourceTag
             
            getId() - Method in class org.apache.struts.taglib.bean.IncludeTag
             
            getId() - Method in class org.apache.struts.taglib.bean.StrutsTag
             
            getId() - Method in class org.apache.struts.taglib.bean.PageTag
             
            getId() - Method in class org.apache.struts.taglib.logic.IterateTag
             
            getIgnore() - Method in class org.apache.struts.taglib.bean.WriteTag
             
            getImageName() - Method in class org.apache.struts.taglib.html.ImgTag
             
            getInclude() - Method in class org.apache.struts.action.ActionMapping
            Return the include path for this mapping.
            getIndex() - Method in class org.apache.struts.taglib.logic.IterateTag
            Return the zero-relative index of the current iteration through the loop.
            getIndexedProperty(Object, String) - Static method in class org.apache.struts.util.PropertyUtils
            Deprecated. Return the value of the specified indexed property of the specified bean, with no type conversions.
            getIndexedProperty(Object, String) - Static method in class org.apache.struts.util.BeanUtils
            Deprecated. Return the value of the specified indexed property of the specified bean, as a String.
            getIndexedProperty(Object, String, int) - Static method in class org.apache.struts.util.PropertyUtils
            Deprecated. Return the value of the specified indexed property of the specified bean, with no type conversions.
            getIndexedProperty(Object, String, int) - Static method in class org.apache.struts.util.BeanUtils
            Deprecated. Return the value of the specified indexed property of the specified bean, as a String.
            getIndexId() - Method in class org.apache.struts.taglib.logic.IterateTag
             
            getInput() - Method in class org.apache.struts.action.ActionMapping
            Return the input form path for this mapping.
            getInput() - Method in class org.apache.struts.taglib.bean.ResourceTag
             
            getInputForm() - Method in class org.apache.struts.action.ActionMapping
            Deprecated. Use getInput() instead
            getInputStream() - Method in class org.apache.struts.upload.DiskFile
            Returns a FileInputStream to the file
            getInputStream() - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            getInputStream() - Method in interface org.apache.struts.upload.FormFile
            Get an InputStream that represents this file.
            getIntHeader(String) - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            getIsmap() - Method in class org.apache.struts.taglib.html.ImgTag
             
            getIterator(String, String) - Method in class org.apache.struts.taglib.OptionsTag
            Return an iterator for the option labels or values, based on our configured properties.
            getIterator(String, String) - Method in class org.apache.struts.taglib.html.OptionsTag
            Return an iterator for the option labels or values, based on our configured properties.
            getKey() - Method in class org.apache.struts.action.ActionError
            Get the message key for this error message.
            getKey() - Method in class org.apache.struts.taglib.MessageTag
            Return the message key.
            getKey() - Method in class org.apache.struts.taglib.bean.MessageTag
             
            getKey() - Method in class org.apache.struts.taglib.html.OptionTag
             
            getLabelName() - Method in class org.apache.struts.taglib.Options1Tag
             
            getLabelName() - Method in class org.apache.struts.taglib.OptionsTag
             
            getLabelName() - Method in class org.apache.struts.taglib.html.OptionsTag
             
            getLabelProperty() - Method in class org.apache.struts.taglib.Options1Tag
             
            getLabelProperty() - Method in class org.apache.struts.taglib.OptionsTag
             
            getLabelProperty() - Method in class org.apache.struts.taglib.html.OptionsTag
             
            getLength() - Method in class org.apache.struts.taglib.EnumerateTag
            Return the length.
            getLength() - Method in class org.apache.struts.taglib.IterateTag
            Return the length.
            getLength() - Method in class org.apache.struts.taglib.logic.IterateTag
             
            getLinkName() - Method in class org.apache.struts.taglib.html.LinkTag
             
            getLocale() - Method in class org.apache.struts.taglib.MessageTag
            Return the locale key.
            getLocale() - Method in class org.apache.struts.taglib.bean.MessageTag
             
            getLocale() - Method in class org.apache.struts.taglib.html.HtmlTag
             
            getLocale() - Method in class org.apache.struts.taglib.html.ImgTag
             
            getLocale() - Method in class org.apache.struts.taglib.html.ErrorsTag
             
            getLocale() - Method in class org.apache.struts.taglib.html.ImageTag
             
            getLocale() - Method in class org.apache.struts.taglib.html.OptionTag
             
            getLocale() - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            getLocale(HttpServletRequest) - Method in class org.apache.struts.action.Action
            Return the user's currently selected Locale.
            getLocales() - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            getLocation() - Method in class org.apache.struts.taglib.logic.MatchTag
             
            getLoginTimeout() - Method in class org.apache.struts.util.GenericDataSource
            Return the login timeout for this data source.
            getLogWriter() - Method in class org.apache.struts.util.GenericDataSource
            Return the log writer for this data source.
            getLowsrc() - Method in class org.apache.struts.taglib.html.ImgTag
             
            getMapping() - Method in class org.apache.struts.taglib.bean.StrutsTag
             
            getMapping() - Method in interface org.apache.struts.upload.MultipartRequestHandler
            Get the ActionMapping instance for this request
            getMapping() - Method in class org.apache.struts.upload.DiskMultipartRequestHandler
             
            getMappingClass() - Method in class org.apache.struts.action.ActionServlet
            Return the Java class name of the class used to instantiate ActionMapping objects.
            getMappings() - Method in class org.apache.struts.action.ActionMapping
            Return the ActionMappings collection of which we are a part.
            getMatch() - Method in class org.apache.struts.taglib.SelectTag
            Return the actual match value (only valid from nested tags).
            getMaxCount() - Method in class org.apache.struts.util.GenericDataSource
             
            getMaxFileSize() - Method in class org.apache.struts.action.ActionServlet
            Get the maximum file size.
            getMaxlength() - Method in class org.apache.struts.taglib.BaseInputTag
            Return the maximum length allowed.
            getMaxlength() - Method in class org.apache.struts.taglib.html.BaseInputTag
            Return the maximum length allowed.
            getMaxSize() - Method in class org.apache.struts.upload.MultipartIterator
            Get the maximum post data size allowed for a multipart request
            getMaxSizeFromServlet() - Method in class org.apache.struts.upload.DiskMultipartRequestHandler
            Gets the maximum post data size in bytes from the string representation in ActionServlet
            getMessage() - Method in class org.apache.struts.upload.MaxLengthExceededException
             
            getMessage() - Method in class org.apache.struts.upload.ContentLengthExceededException
             
            getMessage(Locale, String) - Method in class org.apache.struts.util.MessageResources
            Returns a text message for the specified key, for the default Locale.
            getMessage(Locale, String) - Method in class org.apache.struts.util.PropertyMessageResources
            Returns a text message for the specified key, for the default Locale.
            getMessage(Locale, String, Object) - Method in class org.apache.struts.util.MessageResources
            Returns a text message after parametric replacement of the specified parameter placeholders.
            getMessage(Locale, String, Object[]) - Method in class org.apache.struts.util.MessageResources
            Returns a text message after parametric replacement of the specified parameter placeholders.
            getMessage(Locale, String, Object, Object) - Method in class org.apache.struts.util.MessageResources
            Returns a text message after parametric replacement of the specified parameter placeholders.
            getMessage(Locale, String, Object, Object, Object) - Method in class org.apache.struts.util.MessageResources
            Returns a text message after parametric replacement of the specified parameter placeholders.
            getMessage(Locale, String, Object, Object, Object, Object) - Method in class org.apache.struts.util.MessageResources
            Returns a text message after parametric replacement of the specified parameter placeholders.
            getMessage(String) - Method in class org.apache.struts.util.MessageResources
            Returns a text message for the specified key, for the default Locale.
            getMessage(String, Object) - Method in class org.apache.struts.util.MessageResources
            Returns a text message after parametric replacement of the specified parameter placeholders.
            getMessage(String, Object[]) - Method in class org.apache.struts.util.MessageResources
            Returns a text message after parametric replacement of the specified parameter placeholders.
            getMessage(String, Object, Object) - Method in class org.apache.struts.util.MessageResources
            Returns a text message after parametric replacement of the specified parameter placeholders.
            getMessage(String, Object, Object, Object) - Method in class org.apache.struts.util.MessageResources
            Returns a text message after parametric replacement of the specified parameter placeholders.
            getMessage(String, Object, Object, Object, Object) - Method in class org.apache.struts.util.MessageResources
            Returns a text message after parametric replacement of the specified parameter placeholders.
            getMessageResources(String) - Static method in class org.apache.struts.util.MessageResources
            Create and return an instance of MessageResources for the created by the default MessageResourcesFactory.
            getMetaData() - Method in class org.apache.struts.util.GenericConnection
            Get the metadata regarding this connection's database.
            getMethod() - Method in class org.apache.struts.taglib.FormTag
            Return the request method used when submitting this form.
            getMethod() - Method in class org.apache.struts.taglib.html.FormTag
            Return the request method used when submitting this form.
            getMethod() - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            getMethod(String) - Method in class org.apache.struts.actions.DispatchAction
            Introspect the current class to identify a method of the specified name that accepts the same parameter types as the perform() method does.
            getMinCount() - Method in class org.apache.struts.util.GenericDataSource
             
            getMultipartClass() - Method in class org.apache.struts.action.ActionMapping
            Get the name of the class used to handle multipart request data
            getMultipartClass() - Method in class org.apache.struts.action.ActionServlet
            Get the class name of the MultipartRequestHandler implementation
            getMultipartRequestHandler() - Method in class org.apache.struts.action.ActionForm
            Return the MultipartRequestHandler for this form The reasoning behind this is to give form bean developers control over the lifecycle of their multipart requests through the use of the finish() and/or rollback() methods of MultipartRequestHandler.
            getMultiple() - Method in class org.apache.struts.taglib.SelectTag
             
            getMultiple() - Method in class org.apache.struts.taglib.bean.HeaderTag
             
            getMultiple() - Method in class org.apache.struts.taglib.bean.CookieTag
             
            getMultiple() - Method in class org.apache.struts.taglib.bean.ParameterTag
             
            getMultiple() - Method in class org.apache.struts.taglib.html.SelectTag
             
            getName() - Method in class org.apache.struts.action.ActionMapping
            Return the name of the form bean for this mapping.
            getName() - Method in class org.apache.struts.action.ActionFormBean
            Return the bean name of this action form bean.
            getName() - Method in class org.apache.struts.action.ActionForward
            Return the name.
            getName() - Method in class org.apache.struts.taglib.LinkTag
            Return the bean name.
            getName() - Method in class org.apache.struts.taglib.HtmlPropertyTag
            Return the object name.
            getName() - Method in class org.apache.struts.taglib.IfParameterEqualsTag
            Return the parameter name.
            getName() - Method in class org.apache.struts.taglib.FormTag
            Return the attribute key name of our bean.
            getName() - Method in class org.apache.struts.taglib.MultiboxTag
             
            getName() - Method in class org.apache.struts.taglib.ParameterTag
            Return the parameter name.
            getName() - Method in class org.apache.struts.taglib.Options1Tag
             
            getName() - Method in class org.apache.struts.taglib.ErrorsTag
            Return the errors attribute name.
            getName() - Method in class org.apache.struts.taglib.EnumerateTag
            Return the name of the collection or owning bean.
            getName() - Method in class org.apache.struts.taglib.OptionsTag
             
            getName() - Method in class org.apache.struts.taglib.GetPropertyTag
            Return the name of the bean.
            getName() - Method in class org.apache.struts.taglib.IfParameterNullTag
            Return the parameter name.
            getName() - Method in class org.apache.struts.taglib.RadioTag
             
            getName() - Method in class org.apache.struts.taglib.ResetTag
            Return the field name.
            getName() - Method in class org.apache.struts.taglib.IncludeTag
            Return the logical name.
            getName() - Method in class org.apache.struts.taglib.BaseFieldTag
             
            getName() - Method in class org.apache.struts.taglib.BaseAttributeTag
            Return the attribute name.
            getName() - Method in class org.apache.struts.taglib.ForwardTag
            Return the logical name.
            getName() - Method in class org.apache.struts.taglib.IfParameterNotEqualsTag
            Return the parameter name.
            getName() - Method in class org.apache.struts.taglib.TextareaTag
             
            getName() - Method in class org.apache.struts.taglib.CheckboxTag
             
            getName() - Method in class org.apache.struts.taglib.IfParameterNotNullTag
            Return the parameter name.
            getName() - Method in class org.apache.struts.taglib.Link1Tag
            Return the bean name.
            getName() - Method in class org.apache.struts.taglib.PropertyTag
             
            getName() - Method in class org.apache.struts.taglib.IterateTag
            Return the name of the collection or owning bean.
            getName() - Method in class org.apache.struts.taglib.SelectTag
             
            getName() - Method in class org.apache.struts.taglib.bean.HeaderTag
             
            getName() - Method in class org.apache.struts.taglib.bean.WriteTag
             
            getName() - Method in class org.apache.struts.taglib.bean.DefineTag
             
            getName() - Method in class org.apache.struts.taglib.bean.SizeTag
             
            getName() - Method in class org.apache.struts.taglib.bean.CookieTag
             
            getName() - Method in class org.apache.struts.taglib.bean.ParameterTag
             
            getName() - Method in class org.apache.struts.taglib.bean.ResourceTag
             
            getName() - Method in class org.apache.struts.taglib.html.ImgTag
             
            getName() - Method in class org.apache.struts.taglib.html.OptionsTag
             
            getName() - Method in class org.apache.struts.taglib.html.BaseFieldTag
             
            getName() - Method in class org.apache.struts.taglib.html.RadioTag
             
            getName() - Method in class org.apache.struts.taglib.html.ErrorsTag
             
            getName() - Method in class org.apache.struts.taglib.html.MultiboxTag
             
            getName() - Method in class org.apache.struts.taglib.html.ResetTag
            Return the field name.
            getName() - Method in class org.apache.struts.taglib.html.LinkTag
             
            getName() - Method in class org.apache.struts.taglib.html.SelectTag
             
            getName() - Method in class org.apache.struts.taglib.html.CheckboxTag
             
            getName() - Method in class org.apache.struts.taglib.html.FormTag
            Return the attribute key name of our bean.
            getName() - Method in class org.apache.struts.taglib.html.TextareaTag
             
            getName() - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
             
            getName() - Method in class org.apache.struts.taglib.logic.IterateTag
             
            getName() - Method in class org.apache.struts.taglib.logic.ForwardTag
             
            getName() - Method in class org.apache.struts.taglib.logic.RedirectTag
             
            getName() - Method in class org.apache.struts.taglib.template.PutTag
            Get the name attribute.
            getName() - Method in class org.apache.struts.taglib.template.GetTag
            Get the name attribute.
            getName() - Method in class org.apache.struts.upload.MultipartElement
            Retrieve the name
            getNestedProperty(Object, String) - Static method in class org.apache.struts.util.PropertyUtils
            Deprecated. Return the value of the (possibly nested) property of the specified name, for the specified bean, with no type conversions.
            getNestedProperty(Object, String) - Static method in class org.apache.struts.util.BeanUtils
            Deprecated. Return the value of the (possibly nested) property of the specified name, for the specified bean, as a String.
            getNextElement() - Method in class org.apache.struts.upload.MultipartIterator
            Retrieves the next element in the iterator if one exists.
            getOffset() - Method in class org.apache.struts.taglib.EnumerateTag
            Return the offset.
            getOffset() - Method in class org.apache.struts.taglib.IterateTag
            Return the offset.
            getOffset() - Method in class org.apache.struts.taglib.logic.IterateTag
             
            getOnblur() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Returns the onBlur event handler.
            getOnBlur() - Method in class org.apache.struts.taglib.BaseHandlerTag
            Returns the onBlur event handler.
            getOnchange() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Returns the onChange event handler.
            getOnChange() - Method in class org.apache.struts.taglib.BaseHandlerTag
            Returns the onChange event handler.
            getOnclick() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Returns the onClick event handler.
            getOnClick() - Method in class org.apache.struts.taglib.BaseHandlerTag
            Returns the onClick event handler.
            getOndblclick() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Returns the onDblClick event handler.
            getOnDblClick() - Method in class org.apache.struts.taglib.BaseHandlerTag
            Returns the onDblClick event handler.
            getOnfocus() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Returns the onFocus event handler.
            getOnFocus() - Method in class org.apache.struts.taglib.BaseHandlerTag
            Returns the onFocus event handler.
            getOnkeydown() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Returns the onKeyDown event handler.
            getOnKeyDown() - Method in class org.apache.struts.taglib.BaseHandlerTag
            Returns the onKeyDown event handler.
            getOnkeypress() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Returns the onKeyPress event handler.
            getOnKeyPress() - Method in class org.apache.struts.taglib.BaseHandlerTag
            Returns the onKeyPress event handler.
            getOnkeyup() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Returns the onKeyUp event handler.
            getOnKeyUp() - Method in class org.apache.struts.taglib.BaseHandlerTag
            Returns the onKeyUp event handler.
            getOnmousedown() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Returns the onMouseDown event handler.
            getOnMouseDown() - Method in class org.apache.struts.taglib.BaseHandlerTag
            Returns the onMouseDown event handler.
            getOnmousemove() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Returns the onMouseMove event handler.
            getOnMouseMove() - Method in class org.apache.struts.taglib.BaseHandlerTag
            Returns the onMouseMove event handler.
            getOnmouseout() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Returns the onMouseOut event handler.
            getOnMouseOut() - Method in class org.apache.struts.taglib.BaseHandlerTag
            Returns the onMouseOut event handler.
            getOnmouseover() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Returns the onMouseOver event handler.
            getOnMouseOver() - Method in class org.apache.struts.taglib.BaseHandlerTag
            Returns the onMouseOver event handler.
            getOnmouseup() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Returns the onMouseUp event handler.
            getOnMouseUp() - Method in class org.apache.struts.taglib.BaseHandlerTag
            Returns the onMouseUp event handler.
            getOnreset() - Method in class org.apache.struts.taglib.html.FormTag
            Return the onReset event script.
            getOnReset() - Method in class org.apache.struts.taglib.FormTag
            Return the onReset event script.
            getOnselect() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Returns the onSelect event handler.
            getOnSelect() - Method in class org.apache.struts.taglib.BaseHandlerTag
            Returns the onSelect event handler.
            getOnsubmit() - Method in class org.apache.struts.taglib.html.FormTag
            Return the onSubmit event script.
            getOnSubmit() - Method in class org.apache.struts.taglib.FormTag
            Return the onSubmit event script.
            getPage() - Method in class org.apache.struts.taglib.bean.IncludeTag
             
            getPage() - Method in class org.apache.struts.taglib.html.ImgTag
             
            getPage() - Method in class org.apache.struts.taglib.html.ImageTag
             
            getPage() - Method in class org.apache.struts.taglib.html.LinkTag
             
            getPage() - Method in class org.apache.struts.taglib.logic.RedirectTag
             
            getPageKey() - Method in class org.apache.struts.taglib.html.ImgTag
             
            getPageKey() - Method in class org.apache.struts.taglib.html.ImageTag
             
            getParameter() - Method in class org.apache.struts.action.ActionMapping
            Return the general purpose configuation parameter for this mapping.
            getParameter() - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
             
            getParameter(String) - Method in class org.apache.struts.upload.MultipartRequestWrapper
            Attempts to get a parameter for this request.
            getParameterMap() - Method in class org.apache.struts.upload.MultipartRequestWrapper
            This method returns null.
            getParameterNames() - Method in class org.apache.struts.upload.MultipartRequestWrapper
            Returns the names of the parameters for this request.
            getParameterValues(String) - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            getParamId() - Method in class org.apache.struts.taglib.html.ImgTag
             
            getParamId() - Method in class org.apache.struts.taglib.html.LinkTag
             
            getParamId() - Method in class org.apache.struts.taglib.logic.RedirectTag
             
            getParamName() - Method in class org.apache.struts.taglib.html.ImgTag
             
            getParamName() - Method in class org.apache.struts.taglib.html.LinkTag
             
            getParamName() - Method in class org.apache.struts.taglib.logic.RedirectTag
             
            getParamProperty() - Method in class org.apache.struts.taglib.html.ImgTag
             
            getParamProperty() - Method in class org.apache.struts.taglib.html.LinkTag
             
            getParamProperty() - Method in class org.apache.struts.taglib.logic.RedirectTag
             
            getParamScope() - Method in class org.apache.struts.taglib.html.ImgTag
             
            getParamScope() - Method in class org.apache.struts.taglib.html.LinkTag
             
            getParamScope() - Method in class org.apache.struts.taglib.logic.RedirectTag
             
            getParser() - Method in class org.apache.struts.digester.Digester
            Return the SAXParser we will use to parse the input stream.
            getPassword() - Method in class org.apache.struts.util.GenericDataSource
             
            getPath() - Method in class org.apache.struts.action.ActionMapping
            Return the request URI path used to select this mapping.
            getPath() - Method in class org.apache.struts.action.ActionForward
            Return the path.
            getPathInfo() - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            getPathTranslated() - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            getPingCommand() - Method in class org.apache.struts.util.GenericDataSource
             
            getPingQuery() - Method in class org.apache.struts.util.GenericDataSource
             
            getPrefix() - Method in class org.apache.struts.action.ActionMapping
            Return the parameter name prefix for this mapping.
            getProperty() - Method in class org.apache.struts.taglib.LinkTag
            Return the property name.
            getProperty() - Method in class org.apache.struts.taglib.HtmlPropertyTag
            Return the property name.
            getProperty() - Method in class org.apache.struts.taglib.MultiboxTag
            Return the property name.
            getProperty() - Method in class org.apache.struts.taglib.Options1Tag
             
            getProperty() - Method in class org.apache.struts.taglib.EnumerateTag
            Return the property name.
            getProperty() - Method in class org.apache.struts.taglib.OptionsTag
             
            getProperty() - Method in class org.apache.struts.taglib.GetPropertyTag
            Return the property name.
            getProperty() - Method in class org.apache.struts.taglib.RadioTag
            Return the property name.
            getProperty() - Method in class org.apache.struts.taglib.BaseInputTag
            Return the property name.
            getProperty() - Method in class org.apache.struts.taglib.SubmitTag
            Return the property.
            getProperty() - Method in class org.apache.struts.taglib.CheckboxTag
            Return the property name.
            getProperty() - Method in class org.apache.struts.taglib.ButtonTag
            Return the property name.
            getProperty() - Method in class org.apache.struts.taglib.CancelTag
            Return the property name.
            getProperty() - Method in class org.apache.struts.taglib.Link1Tag
            Return the property name.
            getProperty() - Method in class org.apache.struts.taglib.IfPropertyEqualsTag
            Return the property name.
            getProperty() - Method in class org.apache.struts.taglib.IterateTag
            Return the property name.
            getProperty() - Method in class org.apache.struts.taglib.IfPropertyNotEqualsTag
            Return the property name.
            getProperty() - Method in class org.apache.struts.taglib.SelectTag
            Return the property name.
            getProperty() - Method in class org.apache.struts.taglib.bean.WriteTag
             
            getProperty() - Method in class org.apache.struts.taglib.bean.DefineTag
             
            getProperty() - Method in class org.apache.struts.taglib.bean.SizeTag
             
            getProperty() - Method in class org.apache.struts.taglib.bean.PageTag
             
            getProperty() - Method in class org.apache.struts.taglib.html.ImgTag
             
            getProperty() - Method in class org.apache.struts.taglib.html.OptionsTag
             
            getProperty() - Method in class org.apache.struts.taglib.html.BaseInputTag
            Return the property name.
            getProperty() - Method in class org.apache.struts.taglib.html.RadioTag
            Return the property name.
            getProperty() - Method in class org.apache.struts.taglib.html.CancelTag
            Return the property name.
            getProperty() - Method in class org.apache.struts.taglib.html.ErrorsTag
             
            getProperty() - Method in class org.apache.struts.taglib.html.MultiboxTag
            Return the property name.
            getProperty() - Method in class org.apache.struts.taglib.html.ButtonTag
            Return the property name.
            getProperty() - Method in class org.apache.struts.taglib.html.SubmitTag
            Return the property.
            getProperty() - Method in class org.apache.struts.taglib.html.ImageTag
             
            getProperty() - Method in class org.apache.struts.taglib.html.LinkTag
             
            getProperty() - Method in class org.apache.struts.taglib.html.SelectTag
            Return the property name.
            getProperty() - Method in class org.apache.struts.taglib.html.CheckboxTag
            Return the property name.
            getProperty() - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
             
            getProperty() - Method in class org.apache.struts.taglib.logic.IterateTag
             
            getProperty() - Method in class org.apache.struts.taglib.logic.RedirectTag
             
            getProperty(Object, String) - Static method in class org.apache.struts.util.PropertyUtils
            Deprecated. Return the value of the specified property of the specified bean, no matter which property reference format is used, with no type conversions.
            getProperty(Object, String) - Static method in class org.apache.struts.util.BeanUtils
            Deprecated. Return the value of the specified property of the specified bean, no matter which property reference format is used, as a String.
            getPropertyDescriptor(Object, String) - Static method in class org.apache.struts.util.PropertyUtils
            Deprecated. Retrieve the property descriptor for the specified property of the specified bean, or return null if there is no such descriptor.
            getPropertyDescriptors(Object) - Static method in class org.apache.struts.util.PropertyUtils
            Deprecated. Retrieve the property descriptors for the specified bean, introspecting and caching them the first time a particular bean class is encountered.
            getPropertyEditorClass(Object, String) - Static method in class org.apache.struts.util.PropertyUtils
            Deprecated. Return the Java Class repesenting the property editor class that has been registered for this property (if any).
            GetPropertyTag - class org.apache.struts.taglib.GetPropertyTag.
            Expose the value of a bean property as a scripting variable.
            GetPropertyTag() - Constructor for class org.apache.struts.taglib.GetPropertyTag
             
            GetPropertyTei - class org.apache.struts.taglib.GetPropertyTei.
            Implementation of TagExtraInfo for the getProperty tag, identifying the scripting object(s) to be made visible.
            GetPropertyTei() - Constructor for class org.apache.struts.taglib.GetPropertyTei
             
            getPropertyType(Object, String) - Static method in class org.apache.struts.util.PropertyUtils
            Deprecated. Return the Java Class representing the property type of the specified property, or null if there is no such property for the specified bean.
            getProtocol() - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            getQueryString() - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            getReader() - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            getReadMethod(PropertyDescriptor) - Static method in class org.apache.struts.util.PropertyUtils
            Deprecated. Return an accessible property getter method for this property, if there is one; otherwise return null.
            getReadonly() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Returns the readonly event handler.
            getReadOnly() - Method in class org.apache.struts.util.GenericDataSource
             
            getRealPath(String) - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            getRedirect() - Method in class org.apache.struts.action.ActionForward
            Return the redirect flag.
            getRedisplay() - Method in class org.apache.struts.taglib.html.BaseFieldTag
             
            getRemoteAddr() - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            getRemoteHost() - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            getRemoteUser() - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            getRequest() - Method in class org.apache.struts.upload.MultipartRequestWrapper
            Returns the underlying HttpServletRequest for this wrapper
            getRequestDispatcher(String) - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            getRequestedSessionId() - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            getRequestURI() - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            getRequestURL() - Method in class org.apache.struts.upload.MultipartRequestWrapper
            This method returns null.
            getResources() - Method in class org.apache.struts.action.Action
            Return the message resources for this application.
            getResources() - Method in class org.apache.struts.action.ActionServlet
            Return the application resources for this web application, if any.
            getReturnNull() - Method in class org.apache.struts.util.MessageResources
             
            getReturnNull() - Method in class org.apache.struts.util.MessageResourcesFactory
             
            getRole() - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
             
            getRole() - Method in class org.apache.struts.taglib.template.PutTag
            Get the role attribute.
            getRole() - Method in class org.apache.struts.taglib.template.GetTag
            Get the role attribute.
            getRows() - Method in class org.apache.struts.taglib.BaseInputTag
            Return the number of rows for this field.
            getRows() - Method in class org.apache.struts.taglib.html.BaseInputTag
            Return the number of rows for this field.
            getRules(String) - Method in class org.apache.struts.digester.Digester
            Return the set of rules that apply to the specified match position.
            getScheme() - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            getScope() - Method in class org.apache.struts.action.ActionMapping
            Return the attribute scope for this mapping.
            getScope() - Method in class org.apache.struts.taglib.FormTag
            Return the attribute scope of our bean.
            getScope() - Method in class org.apache.struts.taglib.BaseAttributeTag
            Return the attribute scope.
            getScope() - Method in class org.apache.struts.taglib.bean.WriteTag
             
            getScope() - Method in class org.apache.struts.taglib.bean.DefineTag
             
            getScope() - Method in class org.apache.struts.taglib.bean.SizeTag
             
            getScope() - Method in class org.apache.struts.taglib.html.ImgTag
             
            getScope() - Method in class org.apache.struts.taglib.html.LinkTag
             
            getScope() - Method in class org.apache.struts.taglib.html.FormTag
            Return the attribute scope of our bean.
            getScope() - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
             
            getScope() - Method in class org.apache.struts.taglib.logic.IterateTag
             
            getScope() - Method in class org.apache.struts.taglib.logic.RedirectTag
             
            getScopeId() - Method in class org.apache.struts.taglib.BaseAttributeTag
            Return the scope identifier of the scope we are requesting.
            getServerName() - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            getServerPort() - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            getServlet() - Method in class org.apache.struts.action.Action
            Return the controller servlet instance to which we are attached.
            getServlet() - Method in class org.apache.struts.action.ActionForm
            Return the controller servlet instance to which we are attached.
            getServlet() - Method in class org.apache.struts.action.ActionMappings
            Return the ActionServlet instance of our owning application.
            getServlet() - Method in interface org.apache.struts.upload.MultipartRequestHandler
            Get the ActionServlet instance
            getServlet() - Method in class org.apache.struts.upload.DiskMultipartRequestHandler
             
            getServletPath() - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            getSession() - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            getSession(boolean) - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            getSimpleProperty(Object, String) - Static method in class org.apache.struts.util.PropertyUtils
            Deprecated. Return the value of the specified simple property of the specified bean, with no type conversions.
            getSimpleProperty(Object, String) - Static method in class org.apache.struts.util.BeanUtils
            Deprecated. Return the value of the specified simple property of the specified bean, converted to a String.
            getSize() - Method in class org.apache.struts.taglib.BaseInputTag
            Return the size of this field (synonym for getCols()).
            getSize() - Method in class org.apache.struts.taglib.SelectTag
             
            getSize() - Method in class org.apache.struts.taglib.html.BaseInputTag
            Return the size of this field (synonym for getCols()).
            getSize() - Method in class org.apache.struts.taglib.html.SelectTag
             
            getSize() - Method in class org.apache.struts.util.ErrorMessages
            Deprecated. Return the number of error message keys we have accumulated so far.
            getSrc() - Method in class org.apache.struts.taglib.html.ImgTag
             
            getSrc() - Method in class org.apache.struts.taglib.html.ImageTag
             
            getSrcKey() - Method in class org.apache.struts.taglib.html.ImgTag
             
            getSrcKey() - Method in class org.apache.struts.taglib.html.ImageTag
             
            getStack(PageContext) - Static method in class org.apache.struts.taglib.template.util.ContentMapStack
            Return a reference to the stack.
            getStyle() - Method in class org.apache.struts.taglib.FormTag
            Return the style attribute for this tag.
            getStyle() - Method in class org.apache.struts.taglib.BaseHandlerTag
            Returns the style attribute.
            getStyle() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Returns the style attribute.
            getStyle() - Method in class org.apache.struts.taglib.html.FormTag
            Return the style attribute for this tag.
            getStyleClass() - Method in class org.apache.struts.taglib.FormTag
            Return the style class for this tag.
            getStyleClass() - Method in class org.apache.struts.taglib.BaseHandlerTag
            Returns the style class attribute.
            getStyleClass() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Returns the style class attribute.
            getStyleClass() - Method in class org.apache.struts.taglib.html.FormTag
            Return the style class for this tag.
            getStyleId() - Method in class org.apache.struts.taglib.FormTag
            Return the style id for this tag.
            getStyleId() - Method in class org.apache.struts.taglib.BaseHandlerTag
            Returns the style id attribute.
            getStyleId() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Returns the style id attribute.
            getStyleId() - Method in class org.apache.struts.taglib.html.FormTag
            Return the style identifier for this tag.
            getSuffix() - Method in class org.apache.struts.action.ActionMapping
            Return the parameter name suffix for this mapping.
            getTabindex() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Returns the tabIndex value.
            getTabIndex() - Method in class org.apache.struts.taglib.BaseHandlerTag
            Returns the tabIndex value.
            GetTag - class org.apache.struts.taglib.template.GetTag.
            This is the tag handler for <template:get>, which gets content from the request scope and either includes the content or prints it, depending upon the value of the content's direct attribute.
            GetTag() - Constructor for class org.apache.struts.taglib.template.GetTag
             
            getTarget() - Method in class org.apache.struts.taglib.LinkTag
            Return the window target.
            getTarget() - Method in class org.apache.struts.taglib.FormTag
            Return the window target.
            getTarget() - Method in class org.apache.struts.taglib.Link1Tag
            Return the window target.
            getTarget() - Method in class org.apache.struts.taglib.html.BaseTag
             
            getTarget() - Method in class org.apache.struts.taglib.html.LinkTag
             
            getTarget() - Method in class org.apache.struts.taglib.html.FormTag
            Return the window target.
            getTempDir() - Method in class org.apache.struts.action.ActionServlet
            Get the directory used to temporarily store form files
            getTemplate() - Method in class org.apache.struts.taglib.template.InsertTag
            Get the template attribute.
            getTextElements() - Method in interface org.apache.struts.upload.MultipartRequestHandler
            This method is called on to retrieve all the text input elements of the request.
            getTextElements() - Method in class org.apache.struts.upload.DiskMultipartRequestHandler
             
            getTitle() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Returns the advisory title attribute.
            getToScope() - Method in class org.apache.struts.taglib.bean.DefineTag
             
            getTransaction() - Method in class org.apache.struts.taglib.bean.IncludeTag
             
            getTransaction() - Method in class org.apache.struts.taglib.html.LinkTag
             
            getTransaction() - Method in class org.apache.struts.taglib.logic.RedirectTag
             
            getTransactionIsolation() - Method in class org.apache.struts.util.GenericConnection
            Return this Connection's current transaction isolation level.
            getType() - Method in class org.apache.struts.action.ActionMapping
            Return the fully qualified Action class name.
            getType() - Method in class org.apache.struts.action.ActionFormBean
            Return the Java class name of this action form bean.
            getType() - Method in class org.apache.struts.taglib.FormTag
            Return the Java class of our bean.
            getType() - Method in class org.apache.struts.taglib.bean.DefineTag
             
            getType() - Method in class org.apache.struts.taglib.html.FormTag
            Return the Java class of our bean.
            getType() - Method in class org.apache.struts.taglib.logic.IterateTag
             
            getTypeMap() - Method in class org.apache.struts.util.GenericConnection
            (JDBC 2.0) Return the type map for this connection.
            getUnknown() - Method in class org.apache.struts.action.ActionMapping
            Return the unknown flag for this mapping.
            getUnknown(HttpServletRequest) - Method in class org.apache.struts.action.ActionMappings
            Return the Action that should handle unknown request paths, if any.
            getUnknown(ServletRequest) - Method in class org.apache.struts.action.ActionMappings
            Return the Action that should handle unknown request paths, if any.
            getUrl() - Method in class org.apache.struts.taglib.EncodeRedirectURLTag
            Return the URL to be encoded.
            getUrl() - Method in class org.apache.struts.taglib.EncodeURLTag
            Return the URL to be encoded.
            getUrl() - Method in class org.apache.struts.util.GenericDataSource
             
            getUseCount() - Method in class org.apache.struts.util.GenericDataSource
             
            getUsemap() - Method in class org.apache.struts.taglib.html.ImgTag
             
            getUser() - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
             
            getUser() - Method in class org.apache.struts.util.GenericDataSource
             
            getUserPrincipal() - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            getValidate() - Method in class org.apache.struts.action.ActionMapping
            Return the validate flag for this mapping.
            getValidating() - Method in class org.apache.struts.digester.Digester
            Return the validating parser flag.
            getValue() - Method in class org.apache.struts.taglib.IfParameterEqualsTag
            Return the comparison value.
            getValue() - Method in class org.apache.struts.taglib.MultiboxTag
            Return the server value.
            getValue() - Method in class org.apache.struts.taglib.RadioTag
            Return the server value.
            getValue() - Method in class org.apache.struts.taglib.ResetTag
            Return the label value.
            getValue() - Method in class org.apache.struts.taglib.BaseInputTag
            Return the field value (if any).
            getValue() - Method in class org.apache.struts.taglib.IfParameterNotEqualsTag
            Return the comparison value.
            getValue() - Method in class org.apache.struts.taglib.SubmitTag
            Return the label value.
            getValue() - Method in class org.apache.struts.taglib.CheckboxTag
            Return the server value.
            getValue() - Method in class org.apache.struts.taglib.ButtonTag
            Return the label value.
            getValue() - Method in class org.apache.struts.taglib.CancelTag
            Return the label value.
            getValue() - Method in class org.apache.struts.taglib.OptionTag
            Return the server value.
            getValue() - Method in class org.apache.struts.taglib.IfPropertyEqualsTag
            Return the matching value.
            getValue() - Method in class org.apache.struts.taglib.IfPropertyNotEqualsTag
            Return the matching value.
            getValue() - Method in class org.apache.struts.taglib.SelectTag
            Return the comparison value.
            getValue() - Method in class org.apache.struts.taglib.bean.HeaderTag
             
            getValue() - Method in class org.apache.struts.taglib.bean.DefineTag
             
            getValue() - Method in class org.apache.struts.taglib.bean.CookieTag
             
            getValue() - Method in class org.apache.struts.taglib.bean.ParameterTag
             
            getValue() - Method in class org.apache.struts.taglib.html.BaseInputTag
            Return the field value (if any).
            getValue() - Method in class org.apache.struts.taglib.html.RadioTag
            Return the server value.
            getValue() - Method in class org.apache.struts.taglib.html.CancelTag
            Return the label value.
            getValue() - Method in class org.apache.struts.taglib.html.MultiboxTag
            Return the server value.
            getValue() - Method in class org.apache.struts.taglib.html.ResetTag
            Return the label value.
            getValue() - Method in class org.apache.struts.taglib.html.ButtonTag
            Return the label value.
            getValue() - Method in class org.apache.struts.taglib.html.SubmitTag
            Return the label value.
            getValue() - Method in class org.apache.struts.taglib.html.SelectTag
            Return the comparison value.
            getValue() - Method in class org.apache.struts.taglib.html.OptionTag
             
            getValue() - Method in class org.apache.struts.taglib.html.CheckboxTag
            Return the server value.
            getValue() - Method in class org.apache.struts.taglib.logic.MatchTag
             
            getValue() - Method in class org.apache.struts.taglib.logic.CompareTagBase
             
            getValue() - Method in class org.apache.struts.upload.MultipartElement
            Returns the value of this multipart element
            getValues() - Method in class org.apache.struts.action.ActionError
            Get the replacement values for this error message.
            getVariableInfo(TagData) - Method in class org.apache.struts.taglib.EnumerateTei
            Return information about the scripting variables to be created.
            getVariableInfo(TagData) - Method in class org.apache.struts.taglib.GetPropertyTei
            Return information about the scripting variables to be created.
            getVariableInfo(TagData) - Method in class org.apache.struts.taglib.IterateTei
            Return information about the scripting variables to be created.
            getVariableInfo(TagData) - Method in class org.apache.struts.taglib.bean.SizeTei
            Return information about the scripting variables to be created.
            getVariableInfo(TagData) - Method in class org.apache.struts.taglib.bean.CookieTei
            Return information about the scripting variables to be created.
            getVariableInfo(TagData) - Method in class org.apache.struts.taglib.bean.ParameterTei
            Return information about the scripting variables to be created.
            getVariableInfo(TagData) - Method in class org.apache.struts.taglib.bean.PageTei
            Return information about the scripting variables to be created.
            getVariableInfo(TagData) - Method in class org.apache.struts.taglib.bean.ResourceTei
            Return information about the scripting variables to be created.
            getVariableInfo(TagData) - Method in class org.apache.struts.taglib.bean.IncludeTei
            Return information about the scripting variables to be created.
            getVariableInfo(TagData) - Method in class org.apache.struts.taglib.bean.DefineTei
            Return information about the scripting variables to be created.
            getVariableInfo(TagData) - Method in class org.apache.struts.taglib.bean.StrutsTei
            Return information about the scripting variables to be created.
            getVariableInfo(TagData) - Method in class org.apache.struts.taglib.bean.HeaderTei
            Return information about the scripting variables to be created.
            getVariableInfo(TagData) - Method in class org.apache.struts.taglib.logic.IterateTei
            Return information about the scripting variables to be created.
            getVspace() - Method in class org.apache.struts.taglib.html.ImgTag
             
            getWarnings() - Method in class org.apache.struts.util.GenericConnection
            Return the first warning reported by calls to this Connection.
            getWidth() - Method in class org.apache.struts.taglib.html.ImgTag
             
            getWriteMethod(PropertyDescriptor) - Static method in class org.apache.struts.util.PropertyUtils
            Deprecated. Return an accessible property setter method for this property, if there is one; otherwise return null.
            getXhtml() - Method in class org.apache.struts.taglib.html.HtmlTag
             
            GLOBAL_ERROR - Static variable in class org.apache.struts.action.ActionErrors
            The "property name" marker to use for global errors, as opposed to those related to a specific property.
            GreaterEqualTag - class org.apache.struts.taglib.logic.GreaterEqualTag.
            Evaluate the nested body content of this tag if the specified variable is greater than or equal to the specified value.
            GreaterEqualTag() - Constructor for class org.apache.struts.taglib.logic.GreaterEqualTag
             
            GreaterThanTag - class org.apache.struts.taglib.logic.GreaterThanTag.
            Evaluate the nested body content of this tag if the specified variable is greater than the specified value.
            GreaterThanTag() - Constructor for class org.apache.struts.taglib.logic.GreaterThanTag
             

            H

            handleRequest(HttpServletRequest) - Method in interface org.apache.struts.upload.MultipartRequestHandler
            After constructed, this is the first method called on by ActionServlet.
            handleRequest(HttpServletRequest) - Method in class org.apache.struts.upload.DiskMultipartRequestHandler
            This method populates the internal hashtables with multipart request data.
            hasBody() - Method in class org.apache.struts.taglib.template.PutTag
            Returns a boolean indicating whether this tag has a body.
            hashCode() - Method in class org.apache.struts.util.FastHashMap
            Deprecated. Return the hash code value for this map.
            hashCode() - Method in class org.apache.struts.util.FastArrayList
            Deprecated. Return the hash code value for this list.
            hashCode() - Method in class org.apache.struts.util.FastTreeMap
            Deprecated. Return the hash code value for this map.
            hasNext() - Method in class org.apache.struts.util.IteratorAdapter
             
            header - Variable in class org.apache.struts.taglib.logic.ConditionalTagBase
            The name of the HTTP request header to be used as a variable.
            HEADER_ENCODING - Static variable in class org.apache.struts.upload.MultipartValueStream
             
            HeaderTag - class org.apache.struts.taglib.bean.HeaderTag.
            Define a scripting variable based on the value(s) of the specified header received with this request.
            HeaderTag() - Constructor for class org.apache.struts.taglib.bean.HeaderTag
             
            HeaderTei - class org.apache.struts.taglib.bean.HeaderTei.
            Implementation of TagExtraInfo for the header tag, identifying the scripting object(s) to be made visible.
            HeaderTei() - Constructor for class org.apache.struts.taglib.bean.HeaderTei
             
            headMap(Object) - Method in class org.apache.struts.util.FastTreeMap
            Deprecated. Return a view of the portion of this map whose keys are strictly less than the specified key.
            height - Variable in class org.apache.struts.taglib.html.ImgTag
            The image height.
            HiddenTag - class org.apache.struts.taglib.HiddenTag.
            Custom tag for input fields of type "text".
            HiddenTag - class org.apache.struts.taglib.html.HiddenTag.
            Custom tag for input fields of type "text".
            HiddenTag() - Constructor for class org.apache.struts.taglib.HiddenTag
            Construct a new instance of this tag.
            HiddenTag() - Constructor for class org.apache.struts.taglib.html.HiddenTag
            Construct a new instance of this tag.
            href - Variable in class org.apache.struts.taglib.LinkTag
            The hyperlink URI.
            href - Variable in class org.apache.struts.taglib.RedirectTag
            The hyperlink URI.
            href - Variable in class org.apache.struts.taglib.Link1Tag
            The hyperlink URI.
            href - Variable in class org.apache.struts.taglib.bean.IncludeTag
            The absolute URL to the resource to be included.
            href - Variable in class org.apache.struts.taglib.html.LinkTag
            The hyperlink URI.
            href - Variable in class org.apache.struts.taglib.logic.RedirectTag
            The redirect URI.
            hspace - Variable in class org.apache.struts.taglib.html.ImgTag
            The horizontal spacing around the image.
            HtmlPropertyTag - class org.apache.struts.taglib.HtmlPropertyTag.
            Custom tag implementation that acts like <jsp:getProperty> but encodes the output stream so that HTML-related characters do not cause difficulties.
            HtmlPropertyTag() - Constructor for class org.apache.struts.taglib.HtmlPropertyTag
            Construct a new instance of this tag.
            HtmlTag - class org.apache.struts.taglib.html.HtmlTag.
            Renders an HTML element with appropriate language attributes if there is a current Locale available in the user's session.
            HtmlTag() - Constructor for class org.apache.struts.taglib.html.HtmlTag
             
            hyperlink() - Method in class org.apache.struts.taglib.LinkTag
            Return the specified hyperlink, modified as necessary with optional request parameters.
            hyperlink() - Method in class org.apache.struts.taglib.Link1Tag
            Return the specified hyperlink, modified as necessary with optional request parameters.

            I

            id - Variable in class org.apache.struts.taglib.EnumerateTag
            The name of the scripting variable to be exposed.
            id - Variable in class org.apache.struts.taglib.GetPropertyTag
            The name of the scripting variable to be exposed.
            id - Variable in class org.apache.struts.taglib.IterateTag
            The name of the scripting variable to be exposed.
            id - Variable in class org.apache.struts.taglib.bean.HeaderTag
            The name of the scripting variable that will be exposed as a page scope attribute.
            id - Variable in class org.apache.struts.taglib.bean.DefineTag
            The name of the scripting variable that will be exposed as a page scope attribute.
            id - Variable in class org.apache.struts.taglib.bean.SizeTag
            The name of the scripting variable that will be exposed as a page scope attribute.
            id - Variable in class org.apache.struts.taglib.bean.CookieTag
            The name of the scripting variable that will be exposed as a page scope attribute.
            id - Variable in class org.apache.struts.taglib.bean.ParameterTag
            The name of the scripting variable that will be exposed as a page scope attribute.
            id - Variable in class org.apache.struts.taglib.bean.ResourceTag
            The name of the scripting variable that will be exposed as a page scope attribute.
            id - Variable in class org.apache.struts.taglib.bean.IncludeTag
            The name of the scripting variable that will be exposed as a page scope attribute.
            id - Variable in class org.apache.struts.taglib.bean.StrutsTag
            The name of the scripting variable that will be exposed as a page scope attribute.
            id - Variable in class org.apache.struts.taglib.bean.PageTag
            The name of the scripting variable that will be exposed as a page scope attribute.
            id - Variable in class org.apache.struts.taglib.logic.IterateTag
            The name of the scripting variable to be exposed.
            IfAttributeExistsTag - class org.apache.struts.taglib.IfAttributeExistsTag.
            Conditionally include the body of this tag if the specified attribute exists in the specified scope.
            IfAttributeExistsTag() - Constructor for class org.apache.struts.taglib.IfAttributeExistsTag
             
            IfAttributeMissingTag - class org.apache.struts.taglib.IfAttributeMissingTag.
            Conditionally include the body of this tag if the specified attribute does not exist in the specified scope.
            IfAttributeMissingTag() - Constructor for class org.apache.struts.taglib.IfAttributeMissingTag
             
            IfParameterEqualsTag - class org.apache.struts.taglib.IfParameterEqualsTag.
            Conditionally include the body of this tag if the specified parameter matches the specified value.
            IfParameterEqualsTag() - Constructor for class org.apache.struts.taglib.IfParameterEqualsTag
             
            IfParameterNotEqualsTag - class org.apache.struts.taglib.IfParameterNotEqualsTag.
            Conditionally include the body of this tag if the specified parameter does not match the specified value.
            IfParameterNotEqualsTag() - Constructor for class org.apache.struts.taglib.IfParameterNotEqualsTag
             
            IfParameterNotNullTag - class org.apache.struts.taglib.IfParameterNotNullTag.
            Conditionally include the body of this tag if the specified parameter is present in the current request, and has a length greather than zero.
            IfParameterNotNullTag() - Constructor for class org.apache.struts.taglib.IfParameterNotNullTag
             
            IfParameterNullTag - class org.apache.struts.taglib.IfParameterNullTag.
            Conditionally include the body of this tag if the specified parameter is not present in the current request, or it is present as a zero length string.
            IfParameterNullTag() - Constructor for class org.apache.struts.taglib.IfParameterNullTag
             
            IfPropertyEqualsTag - class org.apache.struts.taglib.IfPropertyEqualsTag.
            Conditionally include the body of this tag if the specified property of the specified attribute (in any scope) has the specified value.
            IfPropertyEqualsTag() - Constructor for class org.apache.struts.taglib.IfPropertyEqualsTag
             
            IfPropertyNotEqualsTag - class org.apache.struts.taglib.IfPropertyNotEqualsTag.
            Conditionally include the body of this tag if the specified property of the specified attribute (in any scope) has the specified value.
            IfPropertyNotEqualsTag() - Constructor for class org.apache.struts.taglib.IfPropertyNotEqualsTag
             
            ignorableWhitespace(char[], int, int) - Method in class org.apache.struts.digester.Digester
            Process notification of ignorable whitespace received from the body of an XML element.
            ignore - Variable in class org.apache.struts.taglib.bean.WriteTag
            Should we ignore missing beans and simply output nothing?
            imageName - Variable in class org.apache.struts.taglib.html.ImgTag
            The image name for named images.
            ImageTag - class org.apache.struts.taglib.html.ImageTag.
            Tag for input fields of type "image".
            ImageTag() - Constructor for class org.apache.struts.taglib.html.ImageTag
             
            ImgTag - class org.apache.struts.taglib.html.ImgTag.
            Generate an IMG tag to the specified image URI.
            ImgTag() - Constructor for class org.apache.struts.taglib.html.ImgTag
             
            in - Variable in class org.apache.struts.upload.MultipartValueStream
            the underlying stream
            include - Variable in class org.apache.struts.action.ActionMapping
            The context relative path of the servlet or JSP resource (to be called via RequestDispatcher.include()) that will process this request, rather than instantiating and calling the Action class that is specified by the type attribute.
            IncludeAction - class org.apache.struts.actions.IncludeAction.
            An Action that includes the context-relative URI specified by the parameter property of our associated ActionMapping.
            IncludeAction() - Constructor for class org.apache.struts.actions.IncludeAction
             
            IncludeTag - class org.apache.struts.taglib.IncludeTag.
            Perform an include of a page that is looked up in the global ActionForwards collection associated with our application.
            IncludeTag - class org.apache.struts.taglib.bean.IncludeTag.
            Define the contents of a specified intra-application request as a page scope attribute of type java.lang.String.
            IncludeTag() - Constructor for class org.apache.struts.taglib.IncludeTag
             
            IncludeTag() - Constructor for class org.apache.struts.taglib.bean.IncludeTag
             
            IncludeTei - class org.apache.struts.taglib.bean.IncludeTei.
            Implementation of TagExtraInfo for the include tag, identifying the scripting object(s) to be made visible.
            IncludeTei() - Constructor for class org.apache.struts.taglib.bean.IncludeTei
             
            INDEXED_DELIM - Static variable in class org.apache.struts.util.PropertyUtils
            Deprecated. The delimiter that preceeds the zero-relative subscript for an indexed reference.
            INDEXED_DELIM2 - Static variable in class org.apache.struts.util.PropertyUtils
            Deprecated. The delimiter that follows the zero-relative subscript for an indexed reference.
            indexId - Variable in class org.apache.struts.taglib.logic.IterateTag
            The name of the scripting variable to be exposed as the current index.
            indexOf(Object) - Method in class org.apache.struts.util.FastArrayList
            Deprecated. Search for the first occurrence of the given argument, testing for equality using the equals() method, and return the corresponding index, or -1 if the object is not found.
            init() - Method in class org.apache.struts.action.ActionServlet
            Initialize this servlet.
            initActions() - Method in class org.apache.struts.action.ActionServlet
            Initialize the collection of previously instantiated Action instances.
            initApplication() - Method in class org.apache.struts.action.ActionServlet
            Initialize the MessageResources bundle for this application, if any.
            initDataSources() - Method in class org.apache.struts.action.ActionServlet
            Initialize use of the data sources associated with this application (if any).
            initDebug() - Method in class org.apache.struts.action.ActionServlet
            Initialize the debugging detail level for this application.
            initDigester(int) - Method in class org.apache.struts.action.ActionServlet
            Construct and return a digester that uses the new configuration file format.
            initDigesterOld(int) - Method in class org.apache.struts.action.ActionServlet
            Construct and return a digester that uses the old configuration file format.
            initInternal() - Method in class org.apache.struts.action.ActionServlet
            Initialize our internal MessageResources bundle.
            initMapping() - Method in class org.apache.struts.action.ActionServlet
            Initialize the mapping information for this application.
            initOther() - Method in class org.apache.struts.action.ActionServlet
            Initialize other configuration parameters that have not yet been processed.
            initServlet() - Method in class org.apache.struts.action.ActionServlet
            Initialize the servlet mapping under which our controller servlet is being accessed.
            initUpload() - Method in class org.apache.struts.action.ActionServlet
            Initialize upload parameters and "bufferSize", "multipartClass", "maxFileSize", "tempDir"
            input - Variable in class org.apache.struts.action.ActionMapping
            The context-relative path of the input form to which control should be returned if a validation error is encountered.
            input - Variable in class org.apache.struts.taglib.bean.ResourceTag
            Return an InputStream to the specified resource if this is non-null.
            inputStream - Variable in class org.apache.struts.upload.BufferedMultipartInputStream
            The underlying InputStream used by this class
            inputStream - Variable in class org.apache.struts.upload.MultipartIterator
            The input stream instance for this class
            InsertTag - class org.apache.struts.taglib.template.InsertTag.
            This is the tag handler for <template:insert>, which includes a template.
            InsertTag() - Constructor for class org.apache.struts.taglib.template.InsertTag
             
            instance - Variable in class org.apache.struts.action.ActionMapping
            The initialized Action instance for this mapping.
            internal - Variable in class org.apache.struts.action.ActionServlet
            The resources object for our internal resources.
            internalName - Variable in class org.apache.struts.action.ActionServlet
            The Java base name of our internal resources.
            isCancelled(HttpServletRequest) - Method in class org.apache.struts.action.Action
            Returns true if the current form's cancel button was pressed.
            isClosed() - Method in class org.apache.struts.util.GenericConnection
            Return true if this Connection is closed.
            isDirect() - Method in class org.apache.struts.taglib.template.util.Content
            Is content to be printed directly (isDirect() == true)
            instead of included (isDirect() == false)?
            isEmpty() - Method in class org.apache.struts.util.FastHashMap
            Deprecated. Return true if this map contains no mappings.
            isEmpty() - Method in class org.apache.struts.util.FastArrayList
            Deprecated. Test if this list has no elements.
            isEmpty() - Method in class org.apache.struts.util.FastTreeMap
            Deprecated. Test if this list has no elements.
            isFile - Variable in class org.apache.struts.upload.MultipartElement
            Whether or not this element is a file
            isFile() - Method in class org.apache.struts.upload.MultipartElement
            Is this element a file?
            ismap - Variable in class org.apache.struts.taglib.html.ImgTag
            Server-side image map declaration.
            isMatched(String) - Method in class org.apache.struts.taglib.html.SelectTag
            Does the specified value match one of those we are looking for?
            isPresent(Locale, String) - Method in class org.apache.struts.util.MessageResources
            Return true if there is a defined message for the specified key in the specified Locale.
            isPresent(String) - Method in class org.apache.struts.util.MessageResources
            Return true if there is a defined message for the specified key in the system default locale.
            isReadOnly() - Method in class org.apache.struts.util.GenericConnection
            Return true if this Connection is in read-only mode.
            isRequestedSessionIdFromCookie() - Method in class org.apache.struts.upload.MultipartRequestWrapper
            This method returns false.
            isRequestedSessionIdFromUrl() - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            isRequestedSessionIdFromURL() - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            isRequestedSessionIdValid() - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            isSecure() - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            isTokenValid(HttpServletRequest) - Method in class org.apache.struts.action.Action
            Return true if there is a transaction token stored in the user's current session, and the value submitted as a request parameter with this action matches it.
            isUserInRole(String) - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            IterateTag - class org.apache.struts.taglib.IterateTag.
            Custom tag that iterates the elements of a collection, which can be either an attribute or the property of an attribute.
            IterateTag - class org.apache.struts.taglib.logic.IterateTag.
            Custom tag that iterates the elements of a collection, which can be either an attribute or the property of an attribute.
            IterateTag() - Constructor for class org.apache.struts.taglib.IterateTag
             
            IterateTag() - Constructor for class org.apache.struts.taglib.logic.IterateTag
             
            IterateTei - class org.apache.struts.taglib.IterateTei.
            Implementation of TagExtraInfo for the iterate tag, identifying the scripting object(s) to be made visible.
            IterateTei - class org.apache.struts.taglib.logic.IterateTei.
            Implementation of TagExtraInfo for the iterate tag, identifying the scripting object(s) to be made visible.
            IterateTei() - Constructor for class org.apache.struts.taglib.IterateTei
             
            IterateTei() - Constructor for class org.apache.struts.taglib.logic.IterateTei
             
            iterator - Variable in class org.apache.struts.taglib.IterateTag
            Iterator of the elements of this collection.
            iterator - Variable in class org.apache.struts.taglib.logic.IterateTag
            Iterator of the elements of this collection, while we are actually running.
            iterator() - Method in class org.apache.struts.util.FastArrayList
            Deprecated. Return an iterator over the elements in this list in proper sequence.
            IteratorAdapter - class org.apache.struts.util.IteratorAdapter.
            Utility method for converting Enumeration to an Iterator class.
            IteratorAdapter(Enumeration) - Constructor for class org.apache.struts.util.IteratorAdapter
             

            K

            key - Variable in class org.apache.struts.action.ActionError
            The message key for this error message.
            key - Variable in class org.apache.struts.taglib.MessageTag
            The message key of the message to be retrieved.
            key - Variable in class org.apache.struts.taglib.bean.MessageTag
            The message key of the message to be retrieved.
            key - Variable in class org.apache.struts.taglib.html.OptionTag
            The key used to look up the text displayed to the user for this option, if any.
            keySet() - Method in class org.apache.struts.util.FastHashMap
            Deprecated. Return a set view of the keys contained in this map.
            keySet() - Method in class org.apache.struts.util.FastTreeMap
            Deprecated. Return a set view of the keys contained in this map.

            L

            labelName - Variable in class org.apache.struts.taglib.Options1Tag
            The name of the bean containing the labels collection.
            labelName - Variable in class org.apache.struts.taglib.OptionsTag
            The name of the bean containing the labels collection.
            labelName - Variable in class org.apache.struts.taglib.html.OptionsTag
            The name of the bean containing the labels collection.
            labelProperty - Variable in class org.apache.struts.taglib.Options1Tag
            The bean property containing the labels collection.
            labelProperty - Variable in class org.apache.struts.taglib.OptionsTag
            The bean property containing the labels collection.
            labelProperty - Variable in class org.apache.struts.taglib.html.OptionsTag
            The bean property containing the labels collection.
            lastIndexOf(Object) - Method in class org.apache.struts.util.FastArrayList
            Deprecated. Search for the last occurrence of the given argument, testing for equality using the equals() method, and return the corresponding index, or -1 if the object is not found.
            lastKey() - Method in class org.apache.struts.util.FastTreeMap
            Deprecated. Return the last (highest) key currently in this sorted map.
            length - Variable in class org.apache.struts.taglib.EnumerateTag
            The length value or attribute name (<=0 means no limit).
            length - Variable in class org.apache.struts.taglib.IterateTag
            The length value or attribute name (<=0 means no limit).
            length - Variable in class org.apache.struts.taglib.logic.IterateTag
            The length value or attribute name (<=0 means no limit).
            lengthCount - Variable in class org.apache.struts.taglib.EnumerateTag
            The number of elements we have already rendered.
            lengthCount - Variable in class org.apache.struts.taglib.IterateTag
            The number of elements we have already rendered.
            lengthCount - Variable in class org.apache.struts.taglib.logic.IterateTag
            The number of elements we have already rendered.
            lengthValue - Variable in class org.apache.struts.taglib.EnumerateTag
            The actual length value (calculated in the start tag).
            lengthValue - Variable in class org.apache.struts.taglib.IterateTag
            The actual length value (calculated in the start tag).
            lengthValue - Variable in class org.apache.struts.taglib.logic.IterateTag
            The actual length value (calculated in the start tag).
            LessEqualTag - class org.apache.struts.taglib.logic.LessEqualTag.
            Evaluate the nested body content of this tag if the specified variable is less than or equal to the specified value.
            LessEqualTag() - Constructor for class org.apache.struts.taglib.logic.LessEqualTag
             
            LessThanTag - class org.apache.struts.taglib.logic.LessThanTag.
            Evaluate the nested body content of this tag if the specified variable is less than the specified value.
            LessThanTag() - Constructor for class org.apache.struts.taglib.logic.LessThanTag
             
            level - Variable in class org.apache.struts.util.GenericConnection
            The initial transaction isolation level to which we should return after release.
            Link1Tag - class org.apache.struts.taglib.Link1Tag.
            Generate a URL-encoded hyperlink to the specified URI.
            Link1Tag() - Constructor for class org.apache.struts.taglib.Link1Tag
             
            linkName - Variable in class org.apache.struts.taglib.html.LinkTag
            The link name for named links.
            LinkTag - class org.apache.struts.taglib.LinkTag.
            Generate a URL-encoded hyperlink to the specified URI.
            LinkTag - class org.apache.struts.taglib.html.LinkTag.
            Generate a URL-encoded hyperlink to the specified URI.
            LinkTag() - Constructor for class org.apache.struts.taglib.LinkTag
             
            LinkTag() - Constructor for class org.apache.struts.taglib.html.LinkTag
             
            list - Variable in class org.apache.struts.util.ArrayStack
            The underlying collection class.
            list - Variable in class org.apache.struts.util.FastArrayList
            Deprecated. The underlying list we are managing.
            listIterator() - Method in class org.apache.struts.util.FastArrayList
            Deprecated. Return an iterator of the elements of this list, in proper sequence.
            listIterator(int) - Method in class org.apache.struts.util.FastArrayList
            Deprecated. Return an iterator of the elements of this list, in proper sequence, starting at the specified position.
            loadLocale(String) - Method in class org.apache.struts.util.PropertyMessageResources
            Load the messages associated with the specified Locale key.
            locale - Variable in class org.apache.struts.action.ActionServlet
            Should we create a java.util.Locale for this user, based on the HTTP headers of the request, if one is not present?
            locale - Variable in class org.apache.struts.taglib.html.HtmlTag
            Should we set the current Locale for this user if needed?
            locale - Variable in class org.apache.struts.taglib.html.ImgTag
            The name of the attribute containing the Locale to be used for looking up internationalized messages.
            locale - Variable in class org.apache.struts.taglib.html.ErrorsTag
            The session attribute key for our locale.
            locale - Variable in class org.apache.struts.taglib.html.ImageTag
            The session attribute key for our locale.
            locale - Variable in class org.apache.struts.taglib.html.OptionTag
            The name of the attribute containing the Locale to be used for looking up internationalized messages.
            LOCALE_KEY - Static variable in class org.apache.struts.action.Action
            The session attributes key under which the user's selected java.util.Locale is stored, if any.
            localeKey - Variable in class org.apache.struts.taglib.MessageTag
            The session scope key under which our Locale is stored.
            localeKey - Variable in class org.apache.struts.taglib.bean.MessageTag
            The session scope key under which our Locale is stored.
            localeKey(Locale) - Method in class org.apache.struts.util.MessageResources
            Compute and return a key to be used in caching information by a Locale.
            locales - Variable in class org.apache.struts.util.PropertyMessageResources
            The set of locale keys for which we have already loaded messages, keyed by the value calculated in localeKey().
            location - Variable in class org.apache.struts.taglib.logic.MatchTag
            The location where the match must exist (start or end), or null for anywhere.
            locator - Variable in class org.apache.struts.digester.Digester
            The Locator associated with our parser.
            log(String) - Method in class org.apache.struts.digester.Digester
            Log a message to the log writer associated with this context.
            log(String) - Method in class org.apache.struts.util.MessageResources
            Log a message to the Writer that has been configured for our use.
            log(String) - Method in class org.apache.struts.util.GenericDataSource
            Log the specified message to our log writer, if we have one.
            log(String, int) - Method in class org.apache.struts.action.ActionServlet
            Log the specified message if the current debugging detail level for this servlet has been set to an equal or higher value.
            log(String, Throwable) - Method in class org.apache.struts.digester.Digester
            Log a message and associated exception to the log writer associated with this context.
            log(String, Throwable) - Method in class org.apache.struts.util.MessageResources
            Log a message and exception to the Writer that has been configured for our use.
            log(String, Throwable) - Method in class org.apache.struts.util.GenericDataSource
            Log the specified message and exception to our log writer, if we have one.
            loginTimeout - Variable in class org.apache.struts.util.GenericDataSource
            The login timeout for this data source.
            logWriter - Variable in class org.apache.struts.util.GenericDataSource
            The log writer for this data source.
            LONG_COMPARE - Static variable in class org.apache.struts.taglib.logic.CompareTagBase
            We will do a long/int comparison.
            lookup() - Method in class org.apache.struts.taglib.html.FormTag
            Look up values for the name, scope, and type properties if necessary.
            lookup(PageContext, String, String) - Static method in class org.apache.struts.util.RequestUtils
            Locate and return the specified bean, from an optionally specified scope, in the specified page context.
            lookup(PageContext, String, String, String) - Static method in class org.apache.struts.util.RequestUtils
            Locate and return the specified property of the specified bean, from an optionally specified scope, in the specified page context.
            lowsrc - Variable in class org.apache.struts.taglib.html.ImgTag
            The low resolution image source URI.

            M

            map - Variable in class org.apache.struts.taglib.template.InsertTag
            Each insert tag has a map of content.
            map - Variable in class org.apache.struts.taglib.template.util.ContentMap
            The map.
            map - Variable in class org.apache.struts.util.FastHashMap
            Deprecated. The underlying map we are managing.
            map - Variable in class org.apache.struts.util.FastTreeMap
            Deprecated. The underlying map we are managing.
            map - Variable in class org.apache.struts.util.GenericConnection
            The initial type map to which we should return after release.
            mapping - Variable in class org.apache.struts.taglib.bean.StrutsTag
            The name of the ActionMapping object to be exposed.
            mapping - Variable in class org.apache.struts.upload.DiskMultipartRequestHandler
            The ActionMapping instance used for this class
            MAPPING_KEY - Static variable in class org.apache.struts.action.Action
            The request attributes key under which our org.apache.struts.ActionMapping instance is passed.
            mappingClass - Variable in class org.apache.struts.action.ActionServlet
            The Java class name of our ActionMapping implementation class.
            mappings - Variable in class org.apache.struts.action.ActionMapping
            The ActionMappings collection of which we are a part.
            mappings - Variable in class org.apache.struts.action.ActionServlet
            The configured mappings for this web application, keyed by path.
            mappings - Variable in class org.apache.struts.action.ActionMappings
            The collection of ActionMapping instances, keyed by request path.
            MAPPINGS_KEY - Static variable in class org.apache.struts.action.Action
            The context attributes key under which our org.apache.struts.action.ActionMappings collection is normally stored, unless overridden when initializing our ActionServlet.
            mark(int) - Method in class org.apache.struts.upload.BufferedMultipartInputStream
            This method calls on the mark() method of the underlying InputStream
            markSupported() - Method in class org.apache.struts.upload.BufferedMultipartInputStream
            This method calls on the markSupported() method of the underlying InputStream
            match - Variable in class org.apache.struts.digester.Digester
            The current match pattern for nested element processing.
            match - Variable in class org.apache.struts.taglib.SelectTag
            The actual value we will match against, calculated in doStartTag().
            match - Variable in class org.apache.struts.taglib.html.SelectTag
            The actual values we will match against, calculated in doStartTag().
            matchedBoundaryBytes - Variable in class org.apache.struts.upload.MultipartValueStream
            how many curretly matched boundary bytes?
            MatchTag - class org.apache.struts.taglib.logic.MatchTag.
            Evalute the nested body content of this tag if the specified value is a substring of the specified variable.
            MatchTag() - Constructor for class org.apache.struts.taglib.logic.MatchTag
             
            MAX_LINE_SIZE - Static variable in class org.apache.struts.upload.MultipartIterator
            The maximum size in bytes of the buffer used to read lines [4K]
            maxCount - Variable in class org.apache.struts.util.GenericDataSource
            The maximum number of connections to be created.
            maxFileSize - Variable in class org.apache.struts.action.ActionServlet
            The maximum size allowed for a client upload.
            maxlength - Variable in class org.apache.struts.taglib.BaseInputTag
            The maximum number of characters allowed, or negative for no limit.
            maxlength - Variable in class org.apache.struts.taglib.html.BaseInputTag
            The maximum number of characters allowed, or negative for no limit.
            MaxLengthExceededException - exception org.apache.struts.upload.MaxLengthExceededException.
            This exception is thrown when multipart post data exceeds the maximum value set
            MaxLengthExceededException() - Constructor for class org.apache.struts.upload.MaxLengthExceededException
             
            MaxLengthExceededException(long) - Constructor for class org.apache.struts.upload.MaxLengthExceededException
             
            maxLengthMet - Variable in class org.apache.struts.upload.BufferedMultipartInputStream
            Whether or not bytes up to the maximum length have been read
            maxLengthMet() - Method in class org.apache.struts.upload.BufferedMultipartInputStream
             
            maxSize - Variable in class org.apache.struts.upload.BufferedMultipartInputStream
            The maximum allowed size for the multipart data, or -1 for an unlimited maximum file length
            maxSize - Variable in class org.apache.struts.upload.MultipartIterator
            The maximum file size in bytes allowed.
            message - Variable in class org.apache.struts.upload.MaxLengthExceededException
             
            message - Variable in class org.apache.struts.upload.ContentLengthExceededException
             
            message(PageContext, String, String, String) - Static method in class org.apache.struts.util.RequestUtils
            Look up and return a message string, based on the specified parameters.
            message(PageContext, String, String, String, Object[]) - Static method in class org.apache.struts.util.RequestUtils
            Look up and return a message string, based on the specified parameters.
            messageKey(Locale, String) - Method in class org.apache.struts.util.MessageResources
            Compute and return a key to be used in caching information by Locale and message key.
            messageKey(String, String) - Method in class org.apache.struts.util.MessageResources
            Compute and return a key to be used in caching information by locale key and message key.
            MessageResources - class org.apache.struts.util.MessageResources.
            General purpose abstract class that describes an API for retrieving Locale-sensitive messages from underlying resource locations of an unspecified design, and optionally utilizing the MessageFormat class to produce internationalized messages with parametric replacement.
            MessageResources(MessageResourcesFactory, String) - Constructor for class org.apache.struts.util.MessageResources
            Construct a new MessageResources according to the specified parameters.
            MessageResources(MessageResourcesFactory, String, boolean) - Constructor for class org.apache.struts.util.MessageResources
            Construct a new MessageResources according to the specified parameters.
            MessageResourcesFactory - class org.apache.struts.util.MessageResourcesFactory.
            Factory for MessageResources instances.
            MessageResourcesFactory() - Constructor for class org.apache.struts.util.MessageResourcesFactory
             
            messages - Static variable in class org.apache.struts.actions.DispatchAction
            The message resources for this package.
            messages - Static variable in class org.apache.struts.actions.ForwardAction
            The message resources for this package.
            messages - Static variable in class org.apache.struts.actions.IncludeAction
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.LinkTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.HtmlPropertyTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.FormTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.BaseHandlerTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.MultiboxTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.ParameterTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.Options1Tag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.MessageTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.EnumerateTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.OptionsTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.GetPropertyTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.RadioTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.ResetTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.EncodeRedirectURLTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.IncludeTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.BaseInputTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.ForwardTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.RedirectTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.SubmitTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.CheckboxTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.BaseTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.CancelTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.OptionTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.Link1Tag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.IfPropertyEqualsTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.IterateTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.IfPropertyNotEqualsTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.SelectTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.EncodeURLTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.bean.HeaderTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.bean.SizeTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.bean.CookieTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.bean.ParameterTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.bean.ResourceTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.bean.IncludeTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.bean.StrutsTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.bean.PageTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.bean.MessageTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.html.HtmlTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.html.BaseHandlerTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.html.ImgTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.html.OptionsTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.html.BaseInputTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.html.BaseTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.html.RadioTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.html.CancelTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.html.ErrorsTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.html.MultiboxTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.html.ResetTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.html.SubmitTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.html.LinkTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.html.SelectTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.html.OptionTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.html.CheckboxTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.html.FormTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.logic.ConditionalTagBase
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.logic.CompareTagBase
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.logic.IterateTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.logic.ForwardTag
            The message resources for this package.
            messages - Static variable in class org.apache.struts.taglib.logic.RedirectTag
            The message resources for this package.
            messages - Variable in class org.apache.struts.util.PropertyMessageResources
            The cache of messages we have accumulated over time, keyed by the value calculated in messageKey().
            messages - Static variable in class org.apache.struts.util.ResponseUtils
            The message resources for this package.
            messages - Static variable in class org.apache.struts.util.RequestUtils
            The message resources for this package.
            MESSAGES_KEY - Static variable in class org.apache.struts.action.Action
            The context attributes key under which our application resources are normally stored, unless overridden when initializing our ActionServlet.
            MessageTag - class org.apache.struts.taglib.MessageTag.
            Custom tag that retrieves an internationalized messages string (with optional parametric replacement) from the ActionResources object stored as a context attribute by our associated ActionServlet implementation.
            MessageTag - class org.apache.struts.taglib.bean.MessageTag.
            Custom tag that retrieves an internationalized messages string (with optional parametric replacement) from the ActionResources object stored as a context attribute by our associated ActionServlet implementation.
            MessageTag() - Constructor for class org.apache.struts.taglib.MessageTag
            Construct a new instance of this tag.
            MessageTag() - Constructor for class org.apache.struts.taglib.bean.MessageTag
             
            method - Variable in class org.apache.struts.taglib.FormTag
            The request method used when submitting this form.
            method - Variable in class org.apache.struts.taglib.html.FormTag
            The request method used when submitting this form.
            methodName - Variable in class org.apache.struts.digester.SetTopRule
            The method name to call on the parent object.
            methodName - Variable in class org.apache.struts.digester.SetNextRule
            The method name to call on the parent object.
            methodName - Variable in class org.apache.struts.digester.CallMethodRule
            The method name to call on the parent object.
            methods - Variable in class org.apache.struts.actions.DispatchAction
            The set of Method objects we have introspected for this class, keyed by method name.
            minCount - Variable in class org.apache.struts.util.GenericDataSource
            The minimum number of connections to be created.
            MultiboxTag - class org.apache.struts.taglib.MultiboxTag.
            Tag for input fields of type "checkbox".
            MultiboxTag - class org.apache.struts.taglib.html.MultiboxTag.
            Tag for input fields of type "checkbox".
            MultiboxTag() - Constructor for class org.apache.struts.taglib.MultiboxTag
             
            MultiboxTag() - Constructor for class org.apache.struts.taglib.html.MultiboxTag
             
            MULTIPART_KEY - Static variable in class org.apache.struts.action.Action
            The request attributes key under which our multipart class is stored.
            multipartClass - Variable in class org.apache.struts.action.ActionMapping
            The fully qualified class name of the MultipartRequestHandler implementation class used to process multipart request data for this mapping
            multipartClass - Variable in class org.apache.struts.action.ActionServlet
            The MultipartRequestHandler class name used for handling multipart form requests.
            MultipartElement - class org.apache.struts.upload.MultipartElement.
            This class represents an element in a multipart request.
            MultipartElement(String, String) - Constructor for class org.apache.struts.upload.MultipartElement
            Constructor for a text element
            MultipartElement(String, String, String, byte[]) - Constructor for class org.apache.struts.upload.MultipartElement
            Deprecated. Use the constructor that takes an File as an argument as opposed to a byte array argument, which can cause memory problems
            MultipartElement(String, String, String, File) - Constructor for class org.apache.struts.upload.MultipartElement
            Constructor for a file element
            MultipartIterator - class org.apache.struts.upload.MultipartIterator.
            The MultipartIterator class is responsible for reading the input data of a multipart request and splitting it up into input elements, wrapped inside of a MultipartElement for easy definition.
            MultipartIterator(HttpServletRequest) - Constructor for class org.apache.struts.upload.MultipartIterator
            Constructs a MultipartIterator with a default buffer size and no file size limit
            MultipartIterator(HttpServletRequest, int) - Constructor for class org.apache.struts.upload.MultipartIterator
            Constructs a MultipartIterator with the specified buffer size and no file size limit
            MultipartIterator(HttpServletRequest, int, long) - Constructor for class org.apache.struts.upload.MultipartIterator
            Constructs a MultipartIterator with the specified buffer size and the specified file size limit in bytes
            MultipartIterator(HttpServletRequest, int, long, String) - Constructor for class org.apache.struts.upload.MultipartIterator
             
            multipartRequestHandler - Variable in class org.apache.struts.action.ActionForm
            The MultipartRequestHandler for this form, can be null
            MultipartRequestHandler - interface org.apache.struts.upload.MultipartRequestHandler.
            MultipartRequestHandler provides an standard interface for struts to deal with file uploads from forms with enctypes of "multipart/form-data".
            MultipartRequestWrapper - class org.apache.struts.upload.MultipartRequestWrapper.
            This class functions as a wrapper around HttpServletRequest to provide working getParameter methods for multipart requests.
            MultipartRequestWrapper(HttpServletRequest) - Constructor for class org.apache.struts.upload.MultipartRequestWrapper
             
            MultipartValueStream - class org.apache.struts.upload.MultipartValueStream.
            This class implements an inputStream that reads another stream until a multipart boundary is found.
            MultipartValueStream(InputStream, String) - Constructor for class org.apache.struts.upload.MultipartValueStream
            Create a stream that stops reading at the boundary NOTE: the boundary parameter is without the trailing dashes "--".
            multiple - Variable in class org.apache.struts.taglib.SelectTag
            Should multiple selections be allowed? Any non-null value will trigger rendering this.
            multiple - Variable in class org.apache.struts.taglib.bean.HeaderTag
            Return an array of header values if multiple is non-null.
            multiple - Variable in class org.apache.struts.taglib.bean.CookieTag
            Return an array of Cookies if multiple is non-null.
            multiple - Variable in class org.apache.struts.taglib.bean.ParameterTag
            Return an array of parameter values if multiple is non-null.
            multiple - Variable in class org.apache.struts.taglib.html.SelectTag
            Should multiple selections be allowed? Any non-null value will trigger rendering this.

            N

            name - Variable in class org.apache.struts.action.ActionMapping
            The name of the form bean, if any, associated with this action.
            name - Variable in class org.apache.struts.action.ActionFormBean
            The bean name of this action form bean.
            name - Variable in class org.apache.struts.action.ActionForward
            The logical name of this forward.
            name - Variable in class org.apache.struts.digester.SetPropertyRule
            The attribute that will contain the property name.
            name - Variable in class org.apache.struts.taglib.LinkTag
            The JSP bean name for query parameters.
            name - Variable in class org.apache.struts.taglib.HtmlPropertyTag
            The name of the object instance from which the property is obtained.
            name - Variable in class org.apache.struts.taglib.IfParameterEqualsTag
            The name of the parameter being compared.
            name - Variable in class org.apache.struts.taglib.FormTag
            The attribute key under which our associated bean is stored.
            name - Variable in class org.apache.struts.taglib.MultiboxTag
            The name of the bean containing our underlying property.
            name - Variable in class org.apache.struts.taglib.ParameterTag
            The name of the desired parameter.
            name - Variable in class org.apache.struts.taglib.Options1Tag
            The name of the bean containing the values collection.
            name - Variable in class org.apache.struts.taglib.ErrorsTag
            Name of the request scope attribute containing our error messages, if any.
            name - Variable in class org.apache.struts.taglib.EnumerateTag
            The name of the collection or owning bean.
            name - Variable in class org.apache.struts.taglib.OptionsTag
            The name of the bean containing the values collection.
            name - Variable in class org.apache.struts.taglib.GetPropertyTag
            The name of the bean owning the property.
            name - Variable in class org.apache.struts.taglib.IfParameterNullTag
            The name of the parameter being compared.
            name - Variable in class org.apache.struts.taglib.RadioTag
            The name of the bean containing our underlying property.
            name - Variable in class org.apache.struts.taglib.ResetTag
            The name of the generated input field.
            name - Variable in class org.apache.struts.taglib.IncludeTag
            The logical name of the global ActionForward we will look up
            name - Variable in class org.apache.struts.taglib.BaseFieldTag
            The name of the bean containing our underlying property.
            name - Variable in class org.apache.struts.taglib.BaseAttributeTag
            The name of the attribute being tested.
            name - Variable in class org.apache.struts.taglib.ForwardTag
            The logical name of the global ActionForward we will look up
            name - Variable in class org.apache.struts.taglib.IfParameterNotEqualsTag
            The name of the parameter being compared.
            name - Variable in class org.apache.struts.taglib.TextareaTag
            The name of the bean containing our underlying property.
            name - Variable in class org.apache.struts.taglib.CheckboxTag
            The name of the bean containing our underlying property.
            name - Variable in class org.apache.struts.taglib.IfParameterNotNullTag
            The name of the parameter being compared.
            name - Variable in class org.apache.struts.taglib.Link1Tag
            The JSP bean name for query parameters.
            name - Variable in class org.apache.struts.taglib.PropertyTag
            The name of the bean containing our underlying property.
            name - Variable in class org.apache.struts.taglib.IterateTag
            The name of the collection or owning bean.
            name - Variable in class org.apache.struts.taglib.SelectTag
            The name of the bean containing our underlying property.
            name - Variable in class org.apache.struts.taglib.bean.HeaderTag
            The name of the header whose value is to be exposed.
            name - Variable in class org.apache.struts.taglib.bean.WriteTag
            Name of the bean that contains the data we will be rendering.
            name - Variable in class org.apache.struts.taglib.bean.DefineTag
            The name of the bean owning the property to be exposed.
            name - Variable in class org.apache.struts.taglib.bean.SizeTag
            The name of the bean owning the property to be counted.
            name - Variable in class org.apache.struts.taglib.bean.CookieTag
            The name of the cookie whose value is to be exposed.
            name - Variable in class org.apache.struts.taglib.bean.ParameterTag
            The name of the parameter whose value is to be exposed.
            name - Variable in class org.apache.struts.taglib.bean.ResourceTag
            The name of the resource whose contents are to be exposed.
            name - Variable in class org.apache.struts.taglib.html.ImgTag
            The JSP bean name for query parameters.
            name - Variable in class org.apache.struts.taglib.html.OptionsTag
            The name of the bean containing the values collection.
            name - Variable in class org.apache.struts.taglib.html.BaseFieldTag
            The name of the bean containing our underlying property.
            name - Variable in class org.apache.struts.taglib.html.RadioTag
            The name of the bean containing our underlying property.
            name - Variable in class org.apache.struts.taglib.html.ErrorsTag
            The request attribute key for our error messages (if any).
            name - Variable in class org.apache.struts.taglib.html.MultiboxTag
            The name of the bean containing our underlying property.
            name - Variable in class org.apache.struts.taglib.html.ResetTag
            The name of the generated input field.
            name - Variable in class org.apache.struts.taglib.html.LinkTag
            The JSP bean name for query parameters.
            name - Variable in class org.apache.struts.taglib.html.SelectTag
            The name of the bean containing our underlying property.
            name - Variable in class org.apache.struts.taglib.html.CheckboxTag
            The name of the bean containing our underlying property.
            name - Variable in class org.apache.struts.taglib.html.FormTag
            The attribute key under which our associated bean is stored.
            name - Variable in class org.apache.struts.taglib.html.TextareaTag
            The name of the bean containing our underlying property.
            name - Variable in class org.apache.struts.taglib.logic.ConditionalTagBase
            The name of the JSP bean to be used as a variable (if property is not specified), or whose property is to be accessed (if property is specified).
            name - Variable in class org.apache.struts.taglib.logic.IterateTag
            The name of the collection or owning bean.
            name - Variable in class org.apache.struts.taglib.logic.ForwardTag
            The logical name of the ActionForward entry to be looked up.
            name - Variable in class org.apache.struts.taglib.logic.RedirectTag
            The JSP bean name for query parameters.
            name - Variable in class org.apache.struts.taglib.template.PutTag
            The content's name.
            name - Variable in class org.apache.struts.taglib.template.GetTag
            The name of the content that this tag includes (or prints).
            name - Variable in class org.apache.struts.upload.MultipartElement
            The element name
            nativeSQL(String) - Method in class org.apache.struts.util.GenericConnection
            Convert the given SQL statement into the system's native SQL grammer.
            NESTED_DELIM - Static variable in class org.apache.struts.util.PropertyUtils
            Deprecated. The delimiter that separates the components of a nested reference.
            next() - Method in class org.apache.struts.util.IteratorAdapter
             
            nocache - Variable in class org.apache.struts.action.ActionServlet
            Include the no-caching headers in our response?
            notationDecl(String, String, String) - Method in class org.apache.struts.digester.Digester
            Receive notification of a notation declaration event.
            NotEqualTag - class org.apache.struts.taglib.logic.NotEqualTag.
            Evaluate the nested body content of this tag if the specified variable and value are not equal.
            NotEqualTag() - Constructor for class org.apache.struts.taglib.logic.NotEqualTag
             
            NotMatchTag - class org.apache.struts.taglib.logic.NotMatchTag.
            Evalute the nested body content of this tag if the specified value is not a substring of the specified variable.
            NotMatchTag() - Constructor for class org.apache.struts.taglib.logic.NotMatchTag
             
            NotPresentTag - class org.apache.struts.taglib.logic.NotPresentTag.
            Evalute the nested body content of this tag if the specified value is not present for this request.
            NotPresentTag() - Constructor for class org.apache.struts.taglib.logic.NotPresentTag
             

            O

            ObjectCreateRule - class org.apache.struts.digester.ObjectCreateRule.
            Rule implementation that creates a new object and pushes it onto the object stack.
            ObjectCreateRule(Digester, String) - Constructor for class org.apache.struts.digester.ObjectCreateRule
            Construct an object create rule with the specified class name.
            ObjectCreateRule(Digester, String, String) - Constructor for class org.apache.struts.digester.ObjectCreateRule
            Construct an object create rule with the specified class name and an optional attribute name containing an override.
            offset - Variable in class org.apache.struts.taglib.EnumerateTag
            The starting offset (zero relative).
            offset - Variable in class org.apache.struts.taglib.IterateTag
            The starting offset (zero relative).
            offset - Variable in class org.apache.struts.taglib.logic.IterateTag
            The starting offset (zero relative).
            offsetValue - Variable in class org.apache.struts.taglib.EnumerateTag
            The actual offset value (calculated in the start tag).
            offsetValue - Variable in class org.apache.struts.taglib.IterateTag
            The actual offset value (calculated in the start tag).
            offsetValue - Variable in class org.apache.struts.taglib.logic.IterateTag
            The actual offset value (calculated in the start tag).
            onblur - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
            Component lost focus event.
            onBlur - Variable in class org.apache.struts.taglib.BaseHandlerTag
            Component lost focus event.
            onchange - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
            Content changed after component lost focus event.
            onChange - Variable in class org.apache.struts.taglib.BaseHandlerTag
            Content changed after component lost focus event.
            onclick - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
            Mouse click event.
            onClick - Variable in class org.apache.struts.taglib.BaseHandlerTag
            Mouse click event.
            ondblclick - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
            Mouse double click event.
            onDblClick - Variable in class org.apache.struts.taglib.BaseHandlerTag
            Mouse double click event.
            onfocus - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
            Component has received focus event.
            onFocus - Variable in class org.apache.struts.taglib.BaseHandlerTag
            Component has received focus event.
            onkeydown - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
            Key down in component event.
            onKeyDown - Variable in class org.apache.struts.taglib.BaseHandlerTag
            Key down in component event.
            onkeypress - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
            Key down and up together in component event.
            onKeyPress - Variable in class org.apache.struts.taglib.BaseHandlerTag
            Key down and up together in component event.
            onkeyup - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
            Key released in component event.
            onKeyUp - Variable in class org.apache.struts.taglib.BaseHandlerTag
            Key released in component event.
            onmousedown - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
            Mouse pressed on component event.
            onMouseDown - Variable in class org.apache.struts.taglib.BaseHandlerTag
            Mouse pressed on component event.
            onmousemove - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
            Mouse moved over component event.
            onMouseMove - Variable in class org.apache.struts.taglib.BaseHandlerTag
            Mouse moved over component event.
            onmouseout - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
            Mouse exit component event.
            onMouseOut - Variable in class org.apache.struts.taglib.BaseHandlerTag
            Mouse exit component event.
            onmouseover - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
            Mouse over component event.
            onMouseOver - Variable in class org.apache.struts.taglib.BaseHandlerTag
            Mouse over component event.
            onmouseup - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
            Mouse released on component event.
            onMouseUp - Variable in class org.apache.struts.taglib.BaseHandlerTag
            Mouse released on component event.
            onreset - Variable in class org.apache.struts.taglib.html.FormTag
            The onReset event script.
            onReset - Variable in class org.apache.struts.taglib.FormTag
            The onReset event script.
            onselect - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
            Text selected in component event.
            onSelect - Variable in class org.apache.struts.taglib.BaseHandlerTag
            Text selected in component event.
            onsubmit - Variable in class org.apache.struts.taglib.html.FormTag
            The onSubmit event script.
            onSubmit - Variable in class org.apache.struts.taglib.FormTag
            The onSubmit event script.
            open() - Method in class org.apache.struts.util.GenericDataSource
            Open the initial connections that are appropriate for this data source.
            Options1Tag - class org.apache.struts.taglib.Options1Tag.
            Tag for creating multiple <select> options from a collection.
            Options1Tag() - Constructor for class org.apache.struts.taglib.Options1Tag
             
            OptionsTag - class org.apache.struts.taglib.OptionsTag.
            Tag for creating multiple <select> options from a collection.
            OptionsTag - class org.apache.struts.taglib.html.OptionsTag.
            Tag for creating multiple <select> options from a collection.
            OptionsTag() - Constructor for class org.apache.struts.taglib.OptionsTag
             
            OptionsTag() - Constructor for class org.apache.struts.taglib.html.OptionsTag
             
            OptionTag - class org.apache.struts.taglib.OptionTag.
            Tag for select options.
            OptionTag - class org.apache.struts.taglib.html.OptionTag.
            Tag for select options.
            OptionTag() - Constructor for class org.apache.struts.taglib.OptionTag
             
            OptionTag() - Constructor for class org.apache.struts.taglib.html.OptionTag
             
            org.apache.struts.action - package org.apache.struts.action
             
            org.apache.struts.actions - package org.apache.struts.actions
             
            org.apache.struts.digester - package org.apache.struts.digester
            The Digester package provides for rules-based processing of arbitrary XML documents.
            org.apache.struts.taglib - package org.apache.struts.taglib
             
            org.apache.struts.taglib.bean - package org.apache.struts.taglib.bean
            The "struts-bean" tag library contains JSP custom tags useful in defining new beans (in any desired scope) from a variety of possible sources, as well as a tag to render a particular bean (or bean property) to the output response.
            org.apache.struts.taglib.html - package org.apache.struts.taglib.html
            The "struts-html" tag library contains JSP custom tags useful in creating dynamic HTML user interfaces, including input forms.
            org.apache.struts.taglib.logic - package org.apache.struts.taglib.logic
            The "struts-logic" 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
            org.apache.struts.taglib.template - package org.apache.struts.taglib.template
            The "struts-template" tag library contains tags that are useful in creating dynamic JSP templates for pages which share a common format.
            org.apache.struts.taglib.template.util - package org.apache.struts.taglib.template.util
             
            org.apache.struts.upload - package org.apache.struts.upload
             
            org.apache.struts.util - package org.apache.struts.util
            The Utilities package provides a variety of families of classes, to solve problems that are commonly encountered in building web applications.

            P

            Package - Static variable in class org.apache.struts.taglib.Constants
            The name of this package.
            Package - Static variable in class org.apache.struts.taglib.html.Constants
            The name of this package.
            page - Variable in class org.apache.struts.taglib.bean.IncludeTag
            The context-relative URI of the page or servlet to be included.
            page - Variable in class org.apache.struts.taglib.html.ImgTag
            The context-relative path, starting with a slash character, of the image to be displayed by this rendered tag.
            page - Variable in class org.apache.struts.taglib.html.ImageTag
            The context-relative URI of the image.
            page - Variable in class org.apache.struts.taglib.html.LinkTag
            The context-relative page URL (beginning with a slash) to which this hyperlink will be rendered.
            page - Variable in class org.apache.struts.taglib.logic.RedirectTag
            The context-relative page URL (beginning with a slash) to which this redirect will be rendered.
            pageKey - Variable in class org.apache.struts.taglib.html.ImgTag
            The message resources key under which we should look up the page attribute for this generated tag, if any.
            pageKey - Variable in class org.apache.struts.taglib.html.ImageTag
            The message resources key of the context-relative URI of the image.
            PageTag - class org.apache.struts.taglib.bean.PageTag.
            Define a scripting variable that exposes the requested page context item as a scripting variable and a page scope bean.
            PageTag() - Constructor for class org.apache.struts.taglib.bean.PageTag
             
            PageTei - class org.apache.struts.taglib.bean.PageTei.
            Implementation of TagExtraInfo for the page tag, identifying the scripting object(s) to be made visible.
            PageTei() - Constructor for class org.apache.struts.taglib.bean.PageTei
             
            paramCount - Variable in class org.apache.struts.digester.CallMethodRule
            The number of parameters to collect from MethodParam rules.
            parameter - Variable in class org.apache.struts.action.ActionMapping
            General purpose configuration parameter for this mapping.
            parameter - Variable in class org.apache.struts.taglib.logic.ConditionalTagBase
            The name of the HTTP request parameter to be used as a variable.
            parameters - Variable in class org.apache.struts.upload.MultipartRequestWrapper
            The parameters for this multipart request
            ParameterTag - class org.apache.struts.taglib.ParameterTag.
            Display the value of the specified query parameter as read-only HTML text.
            ParameterTag - class org.apache.struts.taglib.bean.ParameterTag.
            Define a scripting variable based on the value(s) of the specified parameter received with this request.
            ParameterTag() - Constructor for class org.apache.struts.taglib.ParameterTag
             
            ParameterTag() - Constructor for class org.apache.struts.taglib.bean.ParameterTag
             
            ParameterTei - class org.apache.struts.taglib.bean.ParameterTei.
            Implementation of TagExtraInfo for the parameter tag, identifying the scripting object(s) to be made visible.
            ParameterTei() - Constructor for class org.apache.struts.taglib.bean.ParameterTei
             
            paramId - Variable in class org.apache.struts.taglib.html.ImgTag
            In situations where an image is dynamically generated (such as to create a chart graph), this specifies the single-parameter request parameter name to generate.
            paramId - Variable in class org.apache.struts.taglib.html.LinkTag
            The single-parameter request parameter name to generate.
            paramId - Variable in class org.apache.struts.taglib.logic.RedirectTag
            The single-parameter request parameter name to generate.
            paramIndex - Variable in class org.apache.struts.digester.CallParamRule
            The zero-relative index of the parameter we are saving.
            paramName - Variable in class org.apache.struts.taglib.html.ImgTag
            The single-parameter JSP bean name.
            paramName - Variable in class org.apache.struts.taglib.html.LinkTag
            The single-parameter JSP bean name.
            paramName - Variable in class org.apache.struts.taglib.logic.RedirectTag
            The single-parameter JSP bean name.
            paramProperty - Variable in class org.apache.struts.taglib.html.ImgTag
            The single-parameter JSP bean property.
            paramProperty - Variable in class org.apache.struts.taglib.html.LinkTag
            The single-parameter JSP bean property.
            paramProperty - Variable in class org.apache.struts.taglib.logic.RedirectTag
            The single-parameter JSP bean property.
            paramScope - Variable in class org.apache.struts.taglib.html.ImgTag
            The single-parameter JSP bean scope.
            paramScope - Variable in class org.apache.struts.taglib.html.LinkTag
            The single-parameter JSP bean scope.
            paramScope - Variable in class org.apache.struts.taglib.logic.RedirectTag
            The single-parameter JSP bean scope.
            paramType - Variable in class org.apache.struts.digester.SetTopRule
            The Java class name of the parameter type expected by the method.
            paramType - Variable in class org.apache.struts.digester.SetNextRule
            The Java class name of the parameter type expected by the method.
            paramTypes - Variable in class org.apache.struts.digester.CallMethodRule
            The parameter types of the parameters to be collected.
            parse(File) - Method in class org.apache.struts.digester.Digester
            Parse the content of the specified file using this Digester.
            parse(InputSource) - Method in class org.apache.struts.digester.Digester
            Parse the content of the specified input source using this Digester.
            parse(InputStream) - Method in class org.apache.struts.digester.Digester
            Parse the content of the specified input stream using this Digester.
            parse(String) - Method in class org.apache.struts.digester.Digester
            Parse the content of the specified URI using this Digester.
            parseBoundary(String) - Static method in class org.apache.struts.upload.MultipartIterator
            Parses a content-type String for the boundary.
            parseContentType(String) - Static method in class org.apache.struts.upload.MultipartIterator
            Parses the "Content-Type" line of a multipart form for a content type
            parseDispositionFilename(String) - Static method in class org.apache.struts.upload.MultipartIterator
            Retrieves the "filename" attribute from a content disposition line
            parseDispositionName(String) - Static method in class org.apache.struts.upload.MultipartIterator
            Retrieves the "name" attribute from a content disposition line
            parseForAttribute(String, String) - Static method in class org.apache.struts.upload.MultipartIterator
            Parses a string looking for a attribute-value pair, and returns the value.
            parser - Variable in class org.apache.struts.digester.Digester
            The SAXParser we will use to parse the input stream.
            parseRequest() - Method in class org.apache.struts.upload.MultipartIterator
            Handles retrieving the boundary and setting the input stream
            password - Variable in class org.apache.struts.util.GenericDataSource
            The database password for use in establishing a connection.
            PasswordTag - class org.apache.struts.taglib.PasswordTag.
            Custom tag for input fields of type "text".
            PasswordTag - class org.apache.struts.taglib.html.PasswordTag.
            Custom tag for input fields of type "text".
            PasswordTag() - Constructor for class org.apache.struts.taglib.PasswordTag
            Construct a new instance of this tag.
            PasswordTag() - Constructor for class org.apache.struts.taglib.html.PasswordTag
            Construct a new instance of this tag.
            path - Variable in class org.apache.struts.action.ActionMapping
            The context-relative path of the submitted request, starting with a "/" character, and without the filename extension (if any), that is mapped to this action.
            path - Variable in class org.apache.struts.action.ActionForward
            The context-relative (for a forward) or relative or absolute (for a redirect) URI path to be forwarded to.
            peek() - Method in class org.apache.struts.digester.Digester
            Return the top object on the stack without removing it.
            peek() - Method in class org.apache.struts.util.ArrayStack
            Return the top item off of this stack without removing it.
            peek(int) - Method in class org.apache.struts.digester.Digester
            Return the n'th object down the stack, where 0 is the top element and [getCount()-1] is the bottom element.
            peek(int) - Method in class org.apache.struts.util.ArrayStack
            Return the n'th item down (zero-relative) from the top of this stack without removing it.
            peek(PageContext) - Static method in class org.apache.struts.taglib.template.util.ContentMapStack
            Peek at the map on top of the stack.
            perform(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.action.Action
            Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
            perform(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.actions.DispatchAction
            Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
            perform(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.actions.AddForwardAction
            Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
            perform(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.actions.RemoveMappingAction
            Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
            perform(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.actions.ReloadAction
            Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
            perform(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.actions.ForwardAction
            Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
            perform(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.actions.AddMappingAction
            Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
            perform(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.actions.RemoveForwardAction
            Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
            perform(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.actions.RemoveFormBeanAction
            Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
            perform(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.actions.IncludeAction
            Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
            perform(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.actions.AddFormBeanAction
            Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
            perform(ActionMapping, ActionForm, ServletRequest, ServletResponse) - Method in class org.apache.struts.action.Action
            Process the specified non-HTTP request, and create the corresponding non-HTTP response (or forward to another web component that will create it).
            perform(ActionServlet, ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.action.Action
            Deprecated. Use the new perform() method without a servlet argument
            perform(ActionServlet, ActionMapping, ActionForm, ServletRequest, ServletResponse) - Method in class org.apache.struts.action.Action
            Deprecated. Use the new perform() method without a servlet argument
            ping(Connection) - Method in class org.apache.struts.util.GenericDataSource
            Perform any configured pingCommand and/or pingQuery on the specified connection, returning any SQLException that is encountered along the way.
            pingCommand - Variable in class org.apache.struts.util.GenericDataSource
            The non-query SQL command used to ping an allocated connection.
            pingQuery - Variable in class org.apache.struts.util.GenericDataSource
            The query SQL command used to ping an allocated connection.
            pop() - Method in class org.apache.struts.digester.Digester
            Pop the top object off of the stack, and return it.
            pop() - Method in class org.apache.struts.util.ArrayStack
            Pop the top item off of this stack and return it.
            pop(PageContext) - Static method in class org.apache.struts.taglib.template.util.ContentMapStack
             
            populate(Object, HttpServletRequest) - Static method in class org.apache.struts.util.RequestUtils
            Populate the properties of the specified JavaBean from the specified HTTP request, based on matching each parameter name against the corresponding JavaBeans "property setter" methods in the bean's class.
            populate(Object, Map) - Static method in class org.apache.struts.util.BeanUtils
            Deprecated. Populate the JavaBeans properties of the specified bean, based on the specified name/value pairs.
            populate(Object, String, String, HttpServletRequest) - Static method in class org.apache.struts.util.RequestUtils
            Populate the properties of the specified JavaBean from the specified HTTP request, based on matching each parameter name (plus an optional prefix and/or suffix) against the corresponding JavaBeans "property setter" methods in the bean's class.
            prefix - Variable in class org.apache.struts.action.ActionMapping
            The parameter name prefix used to select parameters for this action.
            prepareCall(String) - Method in class org.apache.struts.util.GenericConnection
            Create a CallableStatement object for calling database stored procedures.
            prepareCall(String, int, int) - Method in class org.apache.struts.util.GenericConnection
            (JDBC 2.0) Create a CallableStatement object that will generate ResultSet objects with the given type and concurrency.
            prepareEventHandlers() - Method in class org.apache.struts.taglib.BaseHandlerTag
            Prepares the event handlers for inclusion in the component's HTML tag.
            prepareEventHandlers() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Prepares the event handlers for inclusion in the component's HTML tag.
            prepareFocusEvents(StringBuffer) - Method in class org.apache.struts.taglib.BaseHandlerTag
            Prepares the focus event handlers, appending them to the the given StringBuffer.
            prepareFocusEvents(StringBuffer) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Prepares the focus event handlers, appending them to the the given StringBuffer.
            prepareKeyEvents(StringBuffer) - Method in class org.apache.struts.taglib.BaseHandlerTag
            Prepares the keyboard event handlers, appending them to the the given StringBuffer.
            prepareKeyEvents(StringBuffer) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Prepares the keyboard event handlers, appending them to the the given StringBuffer.
            prepareMouseEvents(StringBuffer) - Method in class org.apache.struts.taglib.BaseHandlerTag
            Prepares the mouse event handlers, appending them to the the given StringBuffer.
            prepareMouseEvents(StringBuffer) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Prepares the mouse event handlers, appending them to the the given StringBuffer.
            prepareStatement(String) - Method in class org.apache.struts.util.GenericConnection
            Create a PreparedStatement object for sending parameterized SQL statements to the database.
            prepareStatement(String, int, int) - Method in class org.apache.struts.util.GenericConnection
            (JDBC 2.0) Create a PreparedStatement object that will generate ResultSet objects with the given type and concurrency.
            prepareStyles() - Method in class org.apache.struts.taglib.BaseHandlerTag
            Prepares the style attributes for inclusion in the component's HTML tag.
            prepareStyles() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Prepares the style attributes for inclusion in the component's HTML tag.
            prepareTextEvents(StringBuffer) - Method in class org.apache.struts.taglib.BaseHandlerTag
            Prepares the text event handlers, appending them to the the given StringBuffer.
            prepareTextEvents(StringBuffer) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Prepares the text event handlers, appending them to the the given StringBuffer.
            present(PageContext, String, String, String) - Static method in class org.apache.struts.util.RequestUtils
            Return true if a message string for the specified message key is present for the specified Locale.
            PresentTag - class org.apache.struts.taglib.logic.PresentTag.
            Evalute the nested body content of this tag if the specified value is present for this request.
            PresentTag() - Constructor for class org.apache.struts.taglib.logic.PresentTag
             
            print(boolean) - Method in class org.apache.struts.util.ServletContextWriter
            Print a boolean value.
            print(char) - Method in class org.apache.struts.util.ServletContextWriter
            Print a character value.
            print(char[]) - Method in class org.apache.struts.util.ServletContextWriter
            Print a character array.
            print(double) - Method in class org.apache.struts.util.ServletContextWriter
            Print a double value.
            print(float) - Method in class org.apache.struts.util.ServletContextWriter
            Print a float value.
            print(int) - Method in class org.apache.struts.util.ServletContextWriter
            Print an integer value.
            print(long) - Method in class org.apache.struts.util.ServletContextWriter
            Print a long value.
            print(Object) - Method in class org.apache.struts.util.ServletContextWriter
            Print an object.
            print(String) - Method in class org.apache.struts.util.ServletContextWriter
            Print a String value.
            printableURL(URL) - Static method in class org.apache.struts.util.RequestUtils
            Compute the printable representation of a URL, leaving off the scheme/host/port part if no host is specified.
            println() - Method in class org.apache.struts.util.ServletContextWriter
            Terminate the current line and flush the buffer.
            println(boolean) - Method in class org.apache.struts.util.ServletContextWriter
            Print a boolean value and terminate the line.
            println(char) - Method in class org.apache.struts.util.ServletContextWriter
            Print a character value and terminate the line.
            println(char[]) - Method in class org.apache.struts.util.ServletContextWriter
            Print a character array and terminate the line.
            println(double) - Method in class org.apache.struts.util.ServletContextWriter
            Print a double value and terminate the line.
            println(float) - Method in class org.apache.struts.util.ServletContextWriter
            Print a float value and terminate the line.
            println(int) - Method in class org.apache.struts.util.ServletContextWriter
            Print an integer value and terminate the line.
            println(long) - Method in class org.apache.struts.util.ServletContextWriter
            Print a long value and terminate the line.
            println(Object) - Method in class org.apache.struts.util.ServletContextWriter
            Print an object and terminate the line.
            println(String) - Method in class org.apache.struts.util.ServletContextWriter
            Print a String value and terminate the line.
            process(HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.action.ActionServlet
            Process an HTTP request.
            processActionCreate(ActionMapping, HttpServletRequest) - Method in class org.apache.struts.action.ActionServlet
            Create or retrieve the Action instance that will process this request, or null if no such Action instance can be created.
            processActionForm(ActionMapping, HttpServletRequest) - Method in class org.apache.struts.action.ActionServlet
            Retrieve and return the ActionForm bean associated with this mapping, creating and stashing one if necessary.
            processActionForward(ActionForward, ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.action.ActionServlet
            Forward to the specified destination, by the specified mechanism, if an ActionForward instance was returned by the Action.
            processActionPerform(Action, ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.action.ActionServlet
            Ask the specified Action instance to handle this request.
            processContent(HttpServletResponse) - Method in class org.apache.struts.action.ActionServlet
            Set the default content type (with optional character encoding) for all responses.
            processForward(ActionMapping, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.action.ActionServlet
            Process a forward requested by this mapping, if any.
            processInclude(ActionMapping, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.action.ActionServlet
            Process an include requested by this mapping, if any.
            processingInstruction(String, String) - Method in class org.apache.struts.digester.Digester
            Process notification of a processing instruction that was encountered.
            processLocale(HttpServletRequest) - Method in class org.apache.struts.action.ActionServlet
            Automatically calculate an appropriate java.util.Locale for this user, and store it in their session, if there is no such Locale object present already.
            processMapping(String, HttpServletRequest) - Method in class org.apache.struts.action.ActionServlet
            Identify and return an appropriate ActionMapping for the specified path.
            processNoCache(HttpServletResponse) - Method in class org.apache.struts.action.ActionServlet
            Render the HTTP headers to defeat browser caching if requested.
            processPath(HttpServletRequest) - Method in class org.apache.struts.action.ActionServlet
            Identify and return the path component (from the request URI) that we will use to select an ActionMapping to dispatch with.
            processPopulate(ActionForm, ActionMapping, HttpServletRequest) - Method in class org.apache.struts.action.ActionServlet
            Populate the properties of the specified ActionForm from the request parameters included with this request.
            processPreprocess(HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.action.ActionServlet
            General purpose preprocessing hook that can be overridden to support application specific preprocessing activity.
            processValidate(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.action.ActionServlet
            Call the validate() method of the specified ActionForm, and forward back to the input form if there are any errors.
            properties - Variable in class org.apache.struts.util.GenericDataSource
            The connection properties for use in establishing connections.
            properties() - Method in class org.apache.struts.action.ActionErrors
            Return the set of property names for which at least one error has been recorded.
            property - Variable in class org.apache.struts.taglib.LinkTag
            The JSP bean property name for query parameters.
            property - Variable in class org.apache.struts.taglib.HtmlPropertyTag
            The name of the property to get.
            property - Variable in class org.apache.struts.taglib.MultiboxTag
            The property name for this field.
            property - Variable in class org.apache.struts.taglib.Options1Tag
            The name of the property to use to build the values collection.
            property - Variable in class org.apache.struts.taglib.EnumerateTag
            The property name containing the collection.
            property - Variable in class org.apache.struts.taglib.OptionsTag
            The name of the property to use to build the values collection.
            property - Variable in class org.apache.struts.taglib.GetPropertyTag
            The property name to be exposed.
            property - Variable in class org.apache.struts.taglib.RadioTag
            The property name for this field.
            property - Variable in class org.apache.struts.taglib.BaseInputTag
            The name of the field (and associated property) being processed.
            property - Variable in class org.apache.struts.taglib.SubmitTag
            The name of the generated input field.
            property - Variable in class org.apache.struts.taglib.CheckboxTag
            The property name for this field.
            property - Variable in class org.apache.struts.taglib.ButtonTag
            The property name of the generated button.
            property - Variable in class org.apache.struts.taglib.CancelTag
            The property name of the generated button.
            property - Variable in class org.apache.struts.taglib.Link1Tag
            The JSP bean property name for query parameters.
            property - Variable in class org.apache.struts.taglib.IfPropertyEqualsTag
            The name of the property to get.
            property - Variable in class org.apache.struts.taglib.IterateTag
            The property name containing the collection.
            property - Variable in class org.apache.struts.taglib.IfPropertyNotEqualsTag
            The name of the property to get.
            property - Variable in class org.apache.struts.taglib.SelectTag
            The property name we are associated with.
            property - Variable in class org.apache.struts.taglib.bean.WriteTag
            Name of the property to be accessed on the specified bean.
            property - Variable in class org.apache.struts.taglib.bean.DefineTag
            The name of the property to be retrieved.
            property - Variable in class org.apache.struts.taglib.bean.SizeTag
            The name of the property to be retrieved.
            property - Variable in class org.apache.struts.taglib.bean.PageTag
            The name of the page context property to be retrieved.
            property - Variable in class org.apache.struts.taglib.html.ImgTag
            The JSP bean property name for query parameters.
            property - Variable in class org.apache.struts.taglib.html.OptionsTag
            The name of the property to use to build the values collection.
            property - Variable in class org.apache.struts.taglib.html.BaseInputTag
            The name of the field (and associated property) being processed.
            property - Variable in class org.apache.struts.taglib.html.RadioTag
            The property name for this field.
            property - Variable in class org.apache.struts.taglib.html.CancelTag
            The property name of the generated button.
            property - Variable in class org.apache.struts.taglib.html.ErrorsTag
            The name of the property for which error messages should be returned, or null to return all errors.
            property - Variable in class org.apache.struts.taglib.html.MultiboxTag
            The property name for this field.
            property - Variable in class org.apache.struts.taglib.html.ButtonTag
            The property name of the generated button.
            property - Variable in class org.apache.struts.taglib.html.SubmitTag
            The name of the generated input field.
            property - Variable in class org.apache.struts.taglib.html.ImageTag
            The name attribute for the image button.
            property - Variable in class org.apache.struts.taglib.html.LinkTag
            The JSP bean property name for query parameters.
            property - Variable in class org.apache.struts.taglib.html.SelectTag
            The property name we are associated with.
            property - Variable in class org.apache.struts.taglib.html.CheckboxTag
            The property name for this field.
            property - Variable in class org.apache.struts.taglib.logic.ConditionalTagBase
            The name of the bean property to be used as a variable.
            property - Variable in class org.apache.struts.taglib.logic.IterateTag
            The property name containing the collection.
            property - Variable in class org.apache.struts.taglib.logic.RedirectTag
            The JSP bean property name for query parameters.
            PropertyMessageResources - class org.apache.struts.util.PropertyMessageResources.
            Concrete subclass of MessageResources that reads message keys and corresponding strings from named property resources in the same manner that java.util.PropertyResourceBundle does.
            PropertyMessageResources(MessageResourcesFactory, String) - Constructor for class org.apache.struts.util.PropertyMessageResources
            Construct a new PropertyMessageResources according to the specified parameters.
            PropertyMessageResources(MessageResourcesFactory, String, boolean) - Constructor for class org.apache.struts.util.PropertyMessageResources
            Construct a new PropertyMessageResources according to the specified parameters.
            PropertyMessageResourcesFactory - class org.apache.struts.util.PropertyMessageResourcesFactory.
            Factory for PropertyMessageResources instances.
            PropertyMessageResourcesFactory() - Constructor for class org.apache.struts.util.PropertyMessageResourcesFactory
             
            PropertyTag - class org.apache.struts.taglib.PropertyTag.
            Display the value of the specified bean property as read-only HTML text.
            PropertyTag() - Constructor for class org.apache.struts.taglib.PropertyTag
             
            PropertyUtils - class org.apache.struts.util.PropertyUtils.
            Deprecated. At some point after Struts 1.0 final, will be replaced by an equivalent class in the Jakarta Commons Beanutils package.
            PropertyUtils() - Constructor for class org.apache.struts.util.PropertyUtils
            Deprecated.  
            push(Object) - Method in class org.apache.struts.digester.Digester
            Push a new object onto the top of the object stack.
            push(Object) - Method in class org.apache.struts.util.ArrayStack
            Push a new item onto the top of this stack.
            push(PageContext, ContentMap) - Static method in class org.apache.struts.taglib.template.util.ContentMapStack
            Push a content map onto the stack.
            put(Object, Object) - Method in class org.apache.struts.util.FastHashMap
            Deprecated. Associate the specified value with the specified key in this map.
            put(Object, Object) - Method in class org.apache.struts.util.FastTreeMap
            Deprecated. Associate the specified value with the specified key in this map.
            put(String, Content) - Method in class org.apache.struts.taglib.template.InsertTag
            This method is a convenience for <template:put> tags for putting content into the map.
            put(String, Content) - Method in class org.apache.struts.taglib.template.util.ContentMap
            Put named content into map.
            putAll(Map) - Method in class org.apache.struts.util.FastHashMap
            Deprecated. Copy all of the mappings from the specified map to this one, replacing any mappings with the same keys.
            putAll(Map) - Method in class org.apache.struts.util.FastTreeMap
            Deprecated. Copy all of the mappings from the specified map to this one, replacing any mappings with the same keys.
            PutTag - class org.apache.struts.taglib.template.PutTag.
            Tag handler for <template:put>, which puts content into request scope.
            PutTag() - Constructor for class org.apache.struts.taglib.template.PutTag
             

            R

            RadioTag - class org.apache.struts.taglib.RadioTag.
            Tag for input fields of type "radio".
            RadioTag - class org.apache.struts.taglib.html.RadioTag.
            Tag for input fields of type "radio".
            RadioTag() - Constructor for class org.apache.struts.taglib.RadioTag
             
            RadioTag() - Constructor for class org.apache.struts.taglib.html.RadioTag
             
            read() - Method in class org.apache.struts.upload.MultipartValueStream
            Read the next byte
            read() - Method in class org.apache.struts.upload.BufferedMultipartInputStream
            This method returns the next byte in the buffer, and refills it if necessary.
            read(byte[]) - Method in class org.apache.struts.upload.BufferedMultipartInputStream
            This method populates the byte array b with data up to b.length bytes
            read(byte[], int, int) - Method in class org.apache.struts.upload.BufferedMultipartInputStream
            This method populates the byte array b with data up to length starting at b[offset]
            readAheadBufferEndI - Variable in class org.apache.struts.upload.MultipartValueStream
            The end index for the read ahead cyclic buffer (points to the last byte)
            readAheadBufferStartI - Variable in class org.apache.struts.upload.MultipartValueStream
            The start index for the read ahead cyclic buffer (points to the first byte)
            readAheadBytes - Variable in class org.apache.struts.upload.MultipartValueStream
            the read ahead buffer (cyclic)
            readLine() - Method in class org.apache.struts.upload.MultipartIterator
            Reads the input stream until it reaches a new line
            readLine(byte[], int, int) - Method in class org.apache.struts.upload.BufferedMultipartInputStream
            This method reads into the byte array b until a newline ('\n') character is encountered or the number of bytes specified by length have been read
            readonly - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
            Component is readonly.
            readOnly - Variable in class org.apache.struts.util.GenericConnection
            The initial read-only state to which we should return after release.
            readOnly - Variable in class org.apache.struts.util.GenericDataSource
            The default read-only state for newly created connections.
            redirect - Variable in class org.apache.struts.action.ActionForward
            Should this be a redirect instead of a forward?
            RedirectingActionForward - class org.apache.struts.action.RedirectingActionForward.
            A subclass of ActionForward that defaults the redirect attribute to true.
            RedirectingActionForward() - Constructor for class org.apache.struts.action.RedirectingActionForward
            Construct a new instance with default values.
            RedirectingActionForward(String) - Constructor for class org.apache.struts.action.RedirectingActionForward
            Construct a new instance with the specified path.
            RedirectTag - class org.apache.struts.taglib.RedirectTag.
            Perform a sendRedirect() to the specified URL, and skip evaluating the remainder of the current page.
            RedirectTag - class org.apache.struts.taglib.logic.RedirectTag.
            Generate a URL-encoded redirect to the specified URI.
            RedirectTag() - Constructor for class org.apache.struts.taglib.RedirectTag
             
            RedirectTag() - Constructor for class org.apache.struts.taglib.logic.RedirectTag
             
            redisplay - Variable in class org.apache.struts.taglib.html.BaseFieldTag
            The "redisplay contents" flag (used only on password).
            register(String, String) - Method in class org.apache.struts.digester.Digester
            Register the specified DTD URL for the specified public identifier.
            registrations - Variable in class org.apache.struts.action.ActionServlet
            The set of public identifiers, and corresponding resource names, for the versions of the configuration file DTDs that we know about.
            release() - Method in class org.apache.struts.taglib.LinkTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.HtmlPropertyTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.IfParameterEqualsTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.FormTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.BaseHandlerTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.MultiboxTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.ParameterTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.Options1Tag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.MessageTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.ErrorsTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.EnumerateTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.OptionsTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.GetPropertyTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.RadioTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.ResetTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.EncodeRedirectURLTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.IncludeTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.BaseInputTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.BaseFieldTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.BaseAttributeTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.ForwardTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.IfParameterNotEqualsTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.RedirectTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.SubmitTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.TextareaTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.CheckboxTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.ButtonTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.IfParameterNotNullTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.CancelTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.OptionTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.Link1Tag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.PropertyTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.IfPropertyEqualsTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.IterateTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.IfPropertyNotEqualsTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.SelectTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.EncodeURLTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.bean.HeaderTag
            Release all allocated resources.
            release() - Method in class org.apache.struts.taglib.bean.WriteTag
            Release all allocated resources.
            release() - Method in class org.apache.struts.taglib.bean.DefineTag
            Release all allocated resources.
            release() - Method in class org.apache.struts.taglib.bean.SizeTag
            Release all allocated resources.
            release() - Method in class org.apache.struts.taglib.bean.CookieTag
            Release all allocated resources.
            release() - Method in class org.apache.struts.taglib.bean.ParameterTag
            Release all allocated resources.
            release() - Method in class org.apache.struts.taglib.bean.ResourceTag
            Release all allocated resources.
            release() - Method in class org.apache.struts.taglib.bean.IncludeTag
            Release all allocated resources.
            release() - Method in class org.apache.struts.taglib.bean.StrutsTag
            Release all allocated resources.
            release() - Method in class org.apache.struts.taglib.bean.PageTag
            Release all allocated resources.
            release() - Method in class org.apache.struts.taglib.bean.MessageTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.html.HtmlTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.html.ImgTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.html.OptionsTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.html.BaseInputTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.html.BaseFieldTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.html.RadioTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.html.CancelTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.html.ErrorsTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.html.MultiboxTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.html.ResetTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.html.ButtonTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.html.SubmitTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.html.ImageTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.html.LinkTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.html.SelectTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.html.OptionTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.html.CheckboxTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.html.FormTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.html.TextareaTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
            Release all allocated resources.
            release() - Method in class org.apache.struts.taglib.logic.MatchTag
            Release all allocated resources.
            release() - Method in class org.apache.struts.taglib.logic.CompareTagBase
            Release all allocated resources.
            release() - Method in class org.apache.struts.taglib.logic.IterateTag
            Release all allocated resources.
            release() - Method in class org.apache.struts.taglib.logic.ForwardTag
            Release all allocated resources.
            release() - Method in class org.apache.struts.taglib.logic.RedirectTag
            Release any acquired resources.
            release() - Method in class org.apache.struts.taglib.template.PutTag
            Reset member values for reuse.
            release() - Method in class org.apache.struts.taglib.template.GetTag
            Reset member values for reuse.
            release() - Method in class org.apache.struts.taglib.template.InsertTag
            Reset member values for reuse.
            reload() - Method in class org.apache.struts.action.ActionServlet
            Reload the configuration of this controller servlet from our underlying configuration files.
            ReloadAction - class org.apache.struts.actions.ReloadAction.
            A standard Action that calls the reload() method of our controller servlet to reload its configuration information from the configuration files (which have presumably been updated) dynamically.
            ReloadAction() - Constructor for class org.apache.struts.actions.ReloadAction
             
            remove() - Method in class org.apache.struts.util.IteratorAdapter
             
            remove(int) - Method in class org.apache.struts.util.FastArrayList
            Deprecated. Remove the element at the specified position in the list, and shift any subsequent elements down one position.
            remove(Object) - Method in class org.apache.struts.util.FastHashMap
            Deprecated. Remove any mapping for this key, and return any previously mapped value.
            remove(Object) - Method in class org.apache.struts.util.FastArrayList
            Deprecated. Remove the first occurrence of the specified element from the list, and shift any subsequent elements down one position.
            remove(Object) - Method in class org.apache.struts.util.FastTreeMap
            Deprecated. Remove any mapping for this key, and return any previously mapped value.
            removeAll(Collection) - Method in class org.apache.struts.util.FastArrayList
            Deprecated. Remove from this collection all of its elements that are contained in the specified collection.
            removeAttribute(String) - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            removeFormBean(ActionFormBean) - Method in class org.apache.struts.action.ActionServlet
            Deregister a form bean definition from the set configured for this servlet.
            removeFormBean(ActionFormBean) - Method in class org.apache.struts.action.ActionFormBeans
            Deregister a formBean from the set configured for this servlet.
            RemoveFormBeanAction - class org.apache.struts.actions.RemoveFormBeanAction.
            A standard Action that calls the removeFormBean() method of our controller servlet to remove an action form definition dynamically.
            RemoveFormBeanAction() - Constructor for class org.apache.struts.actions.RemoveFormBeanAction
             
            removeForward(ActionForward) - Method in class org.apache.struts.action.ActionMapping
            Remove a ActionForward associated with this mapping.
            removeForward(ActionForward) - Method in class org.apache.struts.action.ActionServlet
            Deregister a forwarding from the set configured for this servlet.
            removeForward(ActionForward) - Method in class org.apache.struts.action.ActionForwards
            Deregister a forwarding from the set configured for this servlet.
            RemoveForwardAction - class org.apache.struts.actions.RemoveForwardAction.
            A standard Action that calls the removeForward() method of our controller servlet to remove an action forward definition dynamically.
            RemoveForwardAction() - Constructor for class org.apache.struts.actions.RemoveForwardAction
             
            removeMapping(ActionMapping) - Method in class org.apache.struts.action.ActionServlet
            Deregister a mapping from the set configured for this servlet.
            removeMapping(ActionMapping) - Method in class org.apache.struts.action.ActionMappings
            Deregister a mapping from the set configured for this servlet.
            RemoveMappingAction - class org.apache.struts.actions.RemoveMappingAction.
            A standard Action that calls the removeMapping() method of our controller servlet to remove an action mapping definition dynamically.
            RemoveMappingAction() - Constructor for class org.apache.struts.actions.RemoveMappingAction
             
            request - Variable in class org.apache.struts.upload.MultipartIterator
            The request instance for this class
            request - Variable in class org.apache.struts.upload.MultipartRequestWrapper
            The underlying HttpServletRequest
            RequestActionMapping - class org.apache.struts.action.RequestActionMapping.
            Subclass of ActionMapping that defaults the form bean scope to request.
            RequestActionMapping() - Constructor for class org.apache.struts.action.RequestActionMapping
            Construct a new instance of this class with the desired default form bean scope.
            requestURL(HttpServletRequest) - Static method in class org.apache.struts.util.RequestUtils
            Return the URL representing the current request.
            RequestUtils - class org.apache.struts.util.RequestUtils.
            General purpose utility methods related to processing a servlet request in the Struts controller framework.
            RequestUtils() - Constructor for class org.apache.struts.util.RequestUtils
             
            reset() - Method in class org.apache.struts.upload.BufferedMultipartInputStream
            This method makes a call to the reset() method of the underlying InputStream
            reset(ActionMapping, HttpServletRequest) - Method in class org.apache.struts.action.ActionForm
            Reset all bean properties to their default state.
            reset(ActionMapping, ServletRequest) - Method in class org.apache.struts.action.ActionForm
            Reset all bean properties to their default state.
            ResetTag - class org.apache.struts.taglib.ResetTag.
            Tag for input fields of type "reset".
            ResetTag - class org.apache.struts.taglib.html.ResetTag.
            Tag for input fields of type "reset".
            ResetTag() - Constructor for class org.apache.struts.taglib.ResetTag
             
            ResetTag() - Constructor for class org.apache.struts.taglib.html.ResetTag
             
            resetToken(HttpServletRequest) - Method in class org.apache.struts.action.Action
            Reset the saved transaction token in the user's session.
            resolveEntity(String, String) - Method in class org.apache.struts.digester.Digester
            Resolve the requested external entity.
            ResourceTag - class org.apache.struts.taglib.bean.ResourceTag.
            Define a scripting variable based on the contents of the specified web application resource.
            ResourceTag() - Constructor for class org.apache.struts.taglib.bean.ResourceTag
             
            ResourceTei - class org.apache.struts.taglib.bean.ResourceTei.
            Implementation of TagExtraInfo for the resource tag, identifying the scripting object(s) to be made visible.
            ResourceTei() - Constructor for class org.apache.struts.taglib.bean.ResourceTei
             
            ResponseUtils - class org.apache.struts.util.ResponseUtils.
            General purpose utility methods related to generating a servlet response in the Struts controller framework.
            ResponseUtils() - Constructor for class org.apache.struts.util.ResponseUtils
             
            retainAll(Collection) - Method in class org.apache.struts.util.FastArrayList
            Deprecated. Remove from this collection all of its elements except those that are contained in the specified collection.
            retrieveTempDir() - Method in class org.apache.struts.upload.DiskMultipartRequestHandler
            Retrieves the temporary directory from either ActionServlet, a context property, or a system property, in that order
            returnConnection(GenericConnection) - Method in class org.apache.struts.util.GenericDataSource
            Return this connection to the available connection pool.
            returnNull - Variable in class org.apache.struts.util.MessageResources
            Should we return null instead of an error message string if an unknown Locale or key is requested?
            returnNull - Variable in class org.apache.struts.util.MessageResourcesFactory
            The "return null" property value to which newly created MessageResourcess should be initialized.
            RewriteTag - class org.apache.struts.taglib.html.RewriteTag.
            Generate a URL-encoded URI as a string.
            RewriteTag() - Constructor for class org.apache.struts.taglib.html.RewriteTag
             
            role - Variable in class org.apache.struts.taglib.logic.ConditionalTagBase
            The name of the security role to be checked for.
            role - Variable in class org.apache.struts.taglib.template.PutTag
            The role that the user must be in to store content.
            role - Variable in class org.apache.struts.taglib.template.GetTag
            The role that the user must be in to retrieve content.
            rollback() - Method in interface org.apache.struts.upload.MultipartRequestHandler
            This method is called on when there's some sort of problem and the form post needs to be rolled back.
            rollback() - Method in class org.apache.struts.upload.DiskMultipartRequestHandler
            Delete all the files uploaded
            rollback() - Method in class org.apache.struts.util.GenericConnection
            Drop all changes made since the previous commit or rollback.
            root - Variable in class org.apache.struts.digester.Digester
            The "root" element of the stack (in other words, the last object that was popped.
            rows - Variable in class org.apache.struts.taglib.BaseInputTag
            The number of rows for this field, or negative for no limit.
            rows - Variable in class org.apache.struts.taglib.html.BaseInputTag
            The number of rows for this field, or negative for no limit.
            Rule - class org.apache.struts.digester.Rule.
            Concrete implementations of this class implement actions to be taken when a corresponding nested pattern of XML elements has been matched.
            Rule(Digester) - Constructor for class org.apache.struts.digester.Rule
            Default constructor sets only the the associated Digester.
            rules - Variable in class org.apache.struts.digester.Digester
            The set of Rules that have been registered with this Digester.

            S

            saveBody - Variable in class org.apache.struts.taglib.html.SelectTag
            The saved body content of this tag.
            saveErrors(HttpServletRequest, ActionErrors) - Method in class org.apache.struts.action.Action
            Save the specified error messages keys into the appropriate request attribute for use by the <struts:errors> tag, if any messages are required.
            saveException(PageContext, Throwable) - Static method in class org.apache.struts.util.RequestUtils
            Save the specified exception as a request attribute for later use.
            saveException(Throwable) - Method in class org.apache.struts.taglib.template.GetTag
            Save the specified exception in request scope if there is not already one present.
            saveException(Throwable) - Method in class org.apache.struts.taglib.template.InsertTag
            Save the specified exception in request scope if there is not already one present.
            saveToken(HttpServletRequest) - Method in class org.apache.struts.action.Action
            Save a new transaction token in the user's current session, creating a new session if necessary.
            scope - Variable in class org.apache.struts.action.ActionMapping
            The identifier of the scope ("request" or "session") under which the form bean associated with this mapping, if any, should be created.
            scope - Variable in class org.apache.struts.taglib.FormTag
            The scope (request or session) under which our associated bean is stored.
            scope - Variable in class org.apache.struts.taglib.BaseAttributeTag
            The scope of the attribute being tested.
            scope - Variable in class org.apache.struts.taglib.bean.WriteTag
            The scope to be searched to retrieve the specified bean.
            scope - Variable in class org.apache.struts.taglib.bean.DefineTag
            The scope within which to search for the specified bean.
            scope - Variable in class org.apache.struts.taglib.bean.SizeTag
            The scope within which to search for the specified bean.
            scope - Variable in class org.apache.struts.taglib.html.ImgTag
            The scope of the bean specified by the name property, if any.
            scope - Variable in class org.apache.struts.taglib.html.LinkTag
            The scope of the bean specified by the name property, if any.
            scope - Variable in class org.apache.struts.taglib.html.FormTag
            The scope (request or session) under which our associated bean is stored.
            scope - Variable in class org.apache.struts.taglib.logic.ConditionalTagBase
            The scope to search for the bean named by the name property, or "any scope" if null.
            scope - Variable in class org.apache.struts.taglib.logic.IterateTag
            The scope of the bean specified by the name property, if any.
            scope - Variable in class org.apache.struts.taglib.logic.RedirectTag
            The scope of the bean specified by the name property, if any.
            SELECT_KEY - Static variable in class org.apache.struts.taglib.Constants
            The attribute key for the select tag itself.
            SELECT_KEY - Static variable in class org.apache.struts.taglib.html.Constants
            The attribute key for the select tag itself.
            SelectTag - class org.apache.struts.taglib.SelectTag.
            Custom tag that represents an HTML select element, associated with a bean property specified by our attributes.
            SelectTag - class org.apache.struts.taglib.html.SelectTag.
            Custom tag that represents an HTML select element, associated with a bean property specified by our attributes.
            SelectTag() - Constructor for class org.apache.struts.taglib.SelectTag
             
            SelectTag() - Constructor for class org.apache.struts.taglib.html.SelectTag
             
            serverURL(HttpServletRequest) - Static method in class org.apache.struts.util.RequestUtils
            Return the URL representing the scheme, server, and port number of the current request.
            servlet - Variable in class org.apache.struts.action.Action
            The controller servlet to which we are attached.
            servlet - Variable in class org.apache.struts.action.ActionForm
            The controller servlet instance to which we are attached.
            servlet - Variable in class org.apache.struts.action.ActionMappings
            The ActionServlet instance of our owning application.
            servlet - Variable in class org.apache.struts.taglib.html.FormTag
            The ActionServlet instance we are associated with (so that we can initialize the servlet property on any form bean that we create).
            servlet - Variable in class org.apache.struts.upload.DiskMultipartRequestHandler
            The ActionServlet instance used for this class
            SERVLET_KEY - Static variable in class org.apache.struts.action.Action
            The context attributes key under which we store the mapping defined for our controller serlet, which will be either a path-mapped pattern (/action/*) or an extension mapped pattern (*.do).
            ServletContextWriter - class org.apache.struts.util.ServletContextWriter.
            A PrintWriter implementation that uses the logging facilities of a javax.servlet.ServletContext to output its results.
            ServletContextWriter(ServletContext) - Constructor for class org.apache.struts.util.ServletContextWriter
            Construct a ServletContextWriter associated with the specified ServletContext instance.
            servletMapping - Variable in class org.apache.struts.action.ActionServlet
            The URL pattern to which we are mapped in our web application deployment descriptor.
            servletName - Variable in class org.apache.struts.action.ActionServlet
            The servlet name under which we are registered in our web application deployment descriptor.
            SessionActionMapping - class org.apache.struts.action.SessionActionMapping.
            Subclass of ActionMapping that defaults the form bean scope to session.
            SessionActionMapping() - Constructor for class org.apache.struts.action.SessionActionMapping
            Construct a new instance of this class with the desired default form bean scope.
            set(int, Object) - Method in class org.apache.struts.util.FastArrayList
            Deprecated. Replace the element at the specified position in this list with the specified element.
            setAccept(String) - Method in class org.apache.struts.taglib.BaseFieldTag
             
            setAccept(String) - Method in class org.apache.struts.taglib.html.BaseFieldTag
             
            setAccesskey(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Sets the accessKey character.
            setAccessKey(String) - Method in class org.apache.struts.taglib.BaseHandlerTag
            Sets the accessKey character.
            setAction(String) - Method in class org.apache.struts.taglib.FormTag
            Set the action URL to which this form should be submitted.
            setAction(String) - Method in class org.apache.struts.taglib.html.FormTag
            Set the action URL to which this form should be submitted.
            setActionClass(String) - Method in class org.apache.struts.action.ActionMapping
            Deprecated. Use setType(String) instead
            setAlign(String) - Method in class org.apache.struts.taglib.html.ImgTag
             
            setAlt(String) - Method in class org.apache.struts.taglib.html.ImgTag
             
            setAlt(String) - Method in class org.apache.struts.taglib.html.ImageTag
             
            setAltKey(String) - Method in class org.apache.struts.taglib.html.ImgTag
             
            setAltKey(String) - Method in class org.apache.struts.taglib.html.ImageTag
             
            setAnchor(String) - Method in class org.apache.struts.taglib.bean.IncludeTag
             
            setAnchor(String) - Method in class org.apache.struts.taglib.html.LinkTag
             
            setAnchor(String) - Method in class org.apache.struts.taglib.logic.RedirectTag
             
            setArg0(String) - Method in class org.apache.struts.taglib.MessageTag
            Set the first optional argument.
            setArg0(String) - Method in class org.apache.struts.taglib.bean.MessageTag
             
            setArg1(String) - Method in class org.apache.struts.taglib.MessageTag
            Set the second optional argument.
            setArg1(String) - Method in class org.apache.struts.taglib.bean.MessageTag
             
            setArg2(String) - Method in class org.apache.struts.taglib.MessageTag
            Set the third optional argument.
            setArg2(String) - Method in class org.apache.struts.taglib.bean.MessageTag
             
            setArg3(String) - Method in class org.apache.struts.taglib.MessageTag
            Set the fourth optional argument.
            setArg3(String) - Method in class org.apache.struts.taglib.bean.MessageTag
             
            setArg4(String) - Method in class org.apache.struts.taglib.MessageTag
            Set the fifth optional argument.
            setArg4(String) - Method in class org.apache.struts.taglib.bean.MessageTag
             
            setAttribute(String) - Method in class org.apache.struts.action.ActionMapping
            Set the attribute name for our form bean.
            setAttribute(String, Object) - Method in class org.apache.struts.upload.MultipartRequestWrapper
             
            setAutoCommit(boolean) - Method in class org.apache.struts.util.GenericConnection
            Sets this connection's auto-commit mode.
            setAutoCommit(boolean) - Method in class org.apache.struts.util.GenericDataSource
             
            setBorder(String) - Method in class org.apache.struts.taglib.html.ImgTag
             
            setBorder(String) - Method in class org.apache.struts.taglib.html.ImageTag
             
            setBufferSize(int) - Method in class org.apache.struts.action.ActionServlet
            Set the buffer size (how large of a chunk of data is recieved by the input stream at once) used for file uploading.
            setBufferSize(int) - Method in class org.apache.struts.upload.MultipartIterator
            Set the maximum amount of bytes read from a line at one time
            setBundle(String) - Method in class org.apache.struts.taglib.MessageTag
            Set the bundle key.
            setBundle(String) - Method in class org.apache.struts.taglib.bean.MessageTag
             
            setBundle(String) - Method in class org.apache.struts.taglib.html.ImgTag
             
            setBundle(String) - Method in class org.apache.struts.taglib.html.ErrorsTag
             
            setBundle(String) - Method in class org.apache.struts.taglib.html.ImageTag
             
            setBundle(String) - Method in class org.apache.struts.taglib.html.OptionTag
             
            setCatalog(String) - Method in class org.apache.struts.util.GenericConnection
            Set the catalog name for this Connection.
            setCharacterEncoding(String) - Method in class org.apache.struts.upload.MultipartRequestWrapper
            This method does nothing.
            setClosed(boolean) - Method in class org.apache.struts.util.GenericConnection
            Set the closed status of this connection wrapper.
            setCollection(Object) - Method in class org.apache.struts.taglib.EnumerateTag
            Set the collection over which we will be enumerating.
            setCollection(Object) - Method in class org.apache.struts.taglib.IterateTag
            Set the collection over which we will be iterating.
            setCollection(Object) - Method in class org.apache.struts.taglib.bean.SizeTag
             
            setCollection(Object) - Method in class org.apache.struts.taglib.logic.IterateTag
             
            setCollection(String) - Method in class org.apache.struts.taglib.html.OptionsTag
             
            setCols(String) - Method in class org.apache.struts.taglib.BaseInputTag
            Set the number of columns for this field.
            setCols(String) - Method in class org.apache.struts.taglib.html.BaseInputTag
            Set the number of columns for this field.
            setContent(String) - Method in class org.apache.struts.taglib.template.PutTag
            Set the content's URI (if it's to be included) or text (if it's to be printed).
            setContentType(String) - Method in class org.apache.struts.upload.DiskFile
            Set the content type
            setContentType(String) - Method in interface org.apache.struts.upload.FormFile
            Set the content type for this file
            setContentType(String) - Method in class org.apache.struts.upload.MultipartElement
            Set the content type
            setCookie(String) - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
             
            setData(byte[]) - Method in class org.apache.struts.upload.MultipartElement
            Deprecated. Use the setFile method to set the file that represents the data of this element
            setDebug(int) - Method in class org.apache.struts.digester.Digester
            Set the debugging detail level of this Digester.
            setDebug(int) - Static method in class org.apache.struts.util.PropertyUtils
            Deprecated.  
            setDebug(int) - Static method in class org.apache.struts.util.BeanUtils
            Deprecated.  
            setDebug(int) - Method in class org.apache.struts.util.GenericDataSource
             
            setDefaultBoolean(boolean) - Method in class org.apache.struts.util.ConvertUtils
            Deprecated.  
            setDefaultByte(byte) - Method in class org.apache.struts.util.ConvertUtils
            Deprecated.  
            setDefaultCharacter(char) - Method in class org.apache.struts.util.ConvertUtils
            Deprecated.  
            setDefaultDouble(double) - Method in class org.apache.struts.util.ConvertUtils
            Deprecated.  
            setDefaultFloat(float) - Method in class org.apache.struts.util.ConvertUtils
            Deprecated.  
            setDefaultInteger(int) - Method in class org.apache.struts.util.ConvertUtils
            Deprecated.  
            setDefaultLong(long) - Method in class org.apache.struts.util.ConvertUtils
            Deprecated.  
            setDefaultShort(short) - Method in class org.apache.struts.util.ConvertUtils
            Deprecated.  
            setDescription(String) - Method in class org.apache.struts.util.GenericDataSource
             
            setDirect(String) - Method in class org.apache.struts.taglib.template.PutTag
            Set direct to true, and content will be printed directly, instead of included (direct == false).
            setDisabled(boolean) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Sets the disabled event handler.
            setDisabled(boolean) - Method in class org.apache.struts.taglib.html.OptionTag
             
            setDocumentLocator(Locator) - Method in class org.apache.struts.digester.Digester
            Set the document locator associated with our parser.
            setDriverClass(String) - Method in class org.apache.struts.util.GenericDataSource
             
            setEnctype(String) - Method in class org.apache.struts.taglib.FormTag
             
            setEnctype(String) - Method in class org.apache.struts.taglib.html.FormTag
             
            setError() - Method in class org.apache.struts.util.ServletContextWriter
            Set the error state for this stream.
            setErrorHandler(ErrorHandler) - Method in class org.apache.struts.digester.Digester
            Set the error handler for this Digester.
            setFactoryClass(String) - Static method in class org.apache.struts.util.MessageResourcesFactory
             
            setFast(boolean) - Method in class org.apache.struts.action.ActionForwards
            Set the "fast" mode flag.
            setFast(boolean) - Method in class org.apache.struts.action.ActionFormBeans
            Set the "fast" mode flag.
            setFast(boolean) - Method in class org.apache.struts.action.ActionMappings
            Set the "fast" mode flag.
            setFast(boolean) - Method in class org.apache.struts.util.FastHashMap
            Deprecated.  
            setFast(boolean) - Method in class org.apache.struts.util.FastArrayList
            Deprecated.  
            setFast(boolean) - Method in class org.apache.struts.util.FastTreeMap
            Deprecated.  
            setFile(File) - Method in class org.apache.struts.upload.MultipartElement
            Set the file that represents this element
            setFileName(String) - Method in class org.apache.struts.upload.DiskFile
            Set the file name
            setFileName(String) - Method in interface org.apache.struts.upload.FormFile
            Set the filename of this file
            setFileName(String) - Method in class org.apache.struts.upload.MultipartElement
            Set the file name for this element
            setFileSize(int) - Method in class org.apache.struts.upload.DiskFile
            Set the file size
            setFileSize(int) - Method in interface org.apache.struts.upload.FormFile
            Set the file size
            setFilter(boolean) - Method in class org.apache.struts.taglib.bean.WriteTag
             
            setFlush(boolean) - Method in class org.apache.struts.taglib.template.GetTag
            Set the flush-before-include property
            setFocus(String) - Method in class org.apache.struts.taglib.FormTag
            Set the focus field name for this form.
            setFocus(String) - Method in class org.apache.struts.taglib.html.FormTag
            Set the focus field name for this form.
            setFormAttribute(String) - Method in class org.apache.struts.action.ActionMapping
            Deprecated. Use setAttribute(String) instead
            setFormBean(String) - Method in class org.apache.struts.taglib.bean.StrutsTag
             
            setFormBeanClass(String) - Method in class org.apache.struts.action.ActionServlet
            Set the Java class name of the class used to instantiate ActionFormBean objects.
            setFormClass(String) - Method in class org.apache.struts.action.ActionMapping
            Deprecated. Modify the corresponding ActionFormBean instead
            setFormPrefix(String) - Method in class org.apache.struts.action.ActionMapping
            Deprecated. Use setPrefix(String) instead
            setFormScope(String) - Method in class org.apache.struts.action.ActionMapping
            Deprecated. Use setScope(String) instead
            setFormSuffix(String) - Method in class org.apache.struts.action.ActionMapping
            Deprecated. Use setSuffix(String) instead
            setForward(String) - Method in class org.apache.struts.action.ActionMapping
            Set the forward path for this mapping.
            setForward(String) - Method in class org.apache.struts.taglib.LinkTag
            Set the logical forward name.
            setForward(String) - Method in class org.apache.struts.taglib.Link1Tag
            Set the logical forward name.
            setForward(String) - Method in class org.apache.struts.taglib.bean.IncludeTag
             
            setForward(String) - Method in class org.apache.struts.taglib.bean.StrutsTag
             
            setForward(String) - Method in class org.apache.struts.taglib.html.LinkTag
             
            setForward(String) - Method in class org.apache.struts.taglib.logic.RedirectTag
             
            setForwardClass(String) - Method in class org.apache.struts.action.ActionServlet
            Set the Java class name of the class used to instantiate ActionForward objects.
            setHeader(String) - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
             
            setHeight(String) - Method in class org.apache.struts.taglib.html.ImgTag
             
            setHref(String) - Method in class org.apache.struts.taglib.LinkTag
            Set the hyperlink URI.
            setHref(String) - Method in class org.apache.struts.taglib.RedirectTag
            Set the hyperlink URI.
            setHref(String) - Method in class org.apache.struts.taglib.Link1Tag
            Set the hyperlink URI.
            setHref(String) - Method in class org.apache.struts.taglib.bean.IncludeTag
             
            setHref(String) - Method in class org.apache.struts.taglib.html.LinkTag
             
            setHref(String) - Method in class org.apache.struts.taglib.logic.RedirectTag
             
            setHspace(String) - Method in class org.apache.struts.taglib.html.ImgTag
             
            setId(String) - Method in class org.apache.struts.taglib.EnumerateTag
            Set the name of the scripting variable.
            setId(String) - Method in class org.apache.struts.taglib.GetPropertyTag
            Set the name of the scripting variable.
            setId(String) - Method in class org.apache.struts.taglib.IterateTag
            Set the name of the scripting variable.
            setId(String) - Method in class org.apache.struts.taglib.bean.HeaderTag
             
            setId(String) - Method in class org.apache.struts.taglib.bean.DefineTag
             
            setId(String) - Method in class org.apache.struts.taglib.bean.SizeTag
             
            setId(String) - Method in class org.apache.struts.taglib.bean.CookieTag
             
            setId(String) - Method in class org.apache.struts.taglib.bean.ParameterTag
             
            setId(String) - Method in class org.apache.struts.taglib.bean.ResourceTag
             
            setId(String) - Method in class org.apache.struts.taglib.bean.IncludeTag
             
            setId(String) - Method in class org.apache.struts.taglib.bean.StrutsTag
             
            setId(String) - Method in class org.apache.struts.taglib.bean.PageTag
             
            setId(String) - Method in class org.apache.struts.taglib.logic.IterateTag
             
            setIgnore(boolean) - Method in class org.apache.struts.taglib.bean.WriteTag
             
            setImageName(String) - Method in class org.apache.struts.taglib.html.ImgTag
             
            setInclude(String) - Method in class org.apache.struts.action.ActionMapping
            Set the include path for this mapping.
            setIndexedProperty(Object, String, int, Object) - Static method in class org.apache.struts.util.PropertyUtils
            Deprecated. Set the value of the specified indexed property of the specified bean, with no type conversions.
            setIndexedProperty(Object, String, Object) - Static method in class org.apache.struts.util.PropertyUtils
            Deprecated. Set the value of the specified indexed property of the specified bean, with no type conversions.
            setIndexId(String) - Method in class org.apache.struts.taglib.logic.IterateTag
             
            setInput(String) - Method in class org.apache.struts.action.ActionMapping
            Set the input form path for this mapping.
            setInput(String) - Method in class org.apache.struts.taglib.bean.ResourceTag
             
            setInputForm(String) - Method in class org.apache.struts.action.ActionMapping
            Deprecated. Use setInput(String) instead
            setIsmap(String) - Method in class org.apache.struts.taglib.html.ImgTag
             
            setKey(String) - Method in class org.apache.struts.taglib.MessageTag
            Set the message key.
            setKey(String) - Method in class org.apache.struts.taglib.bean.MessageTag
             
            setKey(String) - Method in class org.apache.struts.taglib.html.OptionTag
             
            setLabelName(String) - Method in class org.apache.struts.taglib.Options1Tag
             
            setLabelName(String) - Method in class org.apache.struts.taglib.OptionsTag
             
            setLabelName(String) - Method in class org.apache.struts.taglib.html.OptionsTag
             
            setLabelProperty(String) - Method in class org.apache.struts.taglib.Options1Tag
             
            setLabelProperty(String) - Method in class org.apache.struts.taglib.OptionsTag
             
            setLabelProperty(String) - Method in class org.apache.struts.taglib.html.OptionsTag
             
            setLength(String) - Method in class org.apache.struts.taglib.EnumerateTag
            Set the length.
            setLength(String) - Method in class org.apache.struts.taglib.IterateTag
            Set the length.
            setLength(String) - Method in class org.apache.struts.taglib.logic.IterateTag
             
            setLinkName(String) - Method in class org.apache.struts.taglib.html.LinkTag
             
            setLocale(boolean) - Method in class org.apache.struts.taglib.html.HtmlTag
             
            setLocale(HttpServletRequest, Locale) - Method in class org.apache.struts.action.Action
            Set the user's currently selected Locale.
            setLocale(String) - Method in class org.apache.struts.taglib.MessageTag
            Set the locale key.
            setLocale(String) - Method in class org.apache.struts.taglib.bean.MessageTag
             
            setLocale(String) - Method in class org.apache.struts.taglib.html.ImgTag
             
            setLocale(String) - Method in class org.apache.struts.taglib.html.ErrorsTag
             
            setLocale(String) - Method in class org.apache.struts.taglib.html.ImageTag
             
            setLocale(String) - Method in class org.apache.struts.taglib.html.OptionTag
             
            setLocation(String) - Method in class org.apache.struts.taglib.logic.MatchTag
             
            setLoginTimeout(int) - Method in class org.apache.struts.util.GenericDataSource
            Set the login timeout for this data source.
            setLogWriter(PrintWriter) - Method in class org.apache.struts.util.GenericDataSource
            Set the log writer for this data source.
            setLowsrc(String) - Method in class org.apache.struts.taglib.html.ImgTag
             
            setMapping(ActionMapping) - Method in interface org.apache.struts.upload.MultipartRequestHandler
            Convienience method to set a reference to a working ActionMapping instance.
            setMapping(ActionMapping) - Method in class org.apache.struts.upload.DiskMultipartRequestHandler
             
            setMapping(String) - Method in class org.apache.struts.taglib.bean.StrutsTag
             
            setMappingClass(String) - Method in class org.apache.struts.action.ActionServlet
            Set the Java class name of the class used to instantiate ActionMapping objects.
            setMappings(ActionMappings) - Method in class org.apache.struts.action.ActionMapping
            Set the ActionMappings collection of which we are a part.
            setMaxCount(int) - Method in class org.apache.struts.util.GenericDataSource
             
            setMaxFileSize(String) - Method in class org.apache.struts.action.ActionServlet
            Set the maximum file size that a client can upload, number String with a trailing letter indicating the size.
            setMaxlength(String) - Method in class org.apache.struts.taglib.BaseInputTag
            Set the maximum length allowed.
            setMaxlength(String) - Method in class org.apache.struts.taglib.html.BaseInputTag
            Set the maximum length allowed.
            setMaxSize(long) - Method in class org.apache.struts.upload.MultipartIterator
            Set the maximum post data size allowed for a multipart request
            setMethod(String) - Method in class org.apache.struts.taglib.FormTag
            Set the request method used when submitting this form.
            setMethod(String) - Method in class org.apache.struts.taglib.html.FormTag
            Set the request method used when submitting this form.
            setMinCount(int) - Method in class org.apache.struts.util.GenericDataSource
             
            setMultipartClass(String) - Method in class org.apache.struts.action.ActionMapping
            Set the name of the class used to handle multipart request data
            setMultipartClass(String) - Method in class org.apache.struts.action.ActionServlet
            Set the class name of the MultipartRequestHandler implementation
            setMultipartRequestHandler(MultipartRequestHandler) - Method in class org.apache.struts.action.ActionForm
             
            setMultiple(String) - Method in class org.apache.struts.taglib.SelectTag
             
            setMultiple(String) - Method in class org.apache.struts.taglib.bean.HeaderTag
             
            setMultiple(String) - Method in class org.apache.struts.taglib.bean.CookieTag
             
            setMultiple(String) - Method in class org.apache.struts.taglib.bean.ParameterTag
             
            setMultiple(String) - Method in class org.apache.struts.taglib.html.SelectTag
             
            setName(String) - Method in class org.apache.struts.action.ActionMapping
            Set the name of the form bean for this mapping.
            setName(String) - Method in class org.apache.struts.action.ActionFormBean
            Set the bean name of this action form bean.
            setName(String) - Method in class org.apache.struts.action.ActionForward
            Set the name.
            setName(String) - Method in class org.apache.struts.taglib.LinkTag
            Set the bean name.
            setName(String) - Method in class org.apache.struts.taglib.HtmlPropertyTag
            Set the object name.
            setName(String) - Method in class org.apache.struts.taglib.IfParameterEqualsTag
            Set the parameter name.
            setName(String) - Method in class org.apache.struts.taglib.FormTag
            Set the attribute key name of our bean.
            setName(String) - Method in class org.apache.struts.taglib.MultiboxTag
             
            setName(String) - Method in class org.apache.struts.taglib.ParameterTag
            Set the parameter name.
            setName(String) - Method in class org.apache.struts.taglib.Options1Tag
             
            setName(String) - Method in class org.apache.struts.taglib.ErrorsTag
            Set the errors attribute name.
            setName(String) - Method in class org.apache.struts.taglib.EnumerateTag
            Set the name of the collection or owning bean.
            setName(String) - Method in class org.apache.struts.taglib.OptionsTag
             
            setName(String) - Method in class org.apache.struts.taglib.GetPropertyTag
            Set the name of the bean.
            setName(String) - Method in class org.apache.struts.taglib.IfParameterNullTag
            Set the parameter name.
            setName(String) - Method in class org.apache.struts.taglib.RadioTag
             
            setName(String) - Method in class org.apache.struts.taglib.ResetTag
            Set the field name.
            setName(String) - Method in class org.apache.struts.taglib.IncludeTag
            Set the logicl name.
            setName(String) - Method in class org.apache.struts.taglib.BaseFieldTag
             
            setName(String) - Method in class org.apache.struts.taglib.BaseAttributeTag
            Set the attribute name.
            setName(String) - Method in class org.apache.struts.taglib.ForwardTag
            Set the logicl name.
            setName(String) - Method in class org.apache.struts.taglib.IfParameterNotEqualsTag
            Set the parameter name.
            setName(String) - Method in class org.apache.struts.taglib.TextareaTag
             
            setName(String) - Method in class org.apache.struts.taglib.CheckboxTag
             
            setName(String) - Method in class org.apache.struts.taglib.IfParameterNotNullTag
            Set the parameter name.
            setName(String) - Method in class org.apache.struts.taglib.Link1Tag
            Set the bean name.
            setName(String) - Method in class org.apache.struts.taglib.PropertyTag
             
            setName(String) - Method in class org.apache.struts.taglib.IterateTag
            Set the name of the collection or owning bean.
            setName(String) - Method in class org.apache.struts.taglib.SelectTag
             
            setName(String) - Method in class org.apache.struts.taglib.bean.HeaderTag
             
            setName(String) - Method in class org.apache.struts.taglib.bean.WriteTag
             
            setName(String) - Method in class org.apache.struts.taglib.bean.DefineTag
             
            setName(String) - Method in class org.apache.struts.taglib.bean.SizeTag
             
            setName(String) - Method in class org.apache.struts.taglib.bean.CookieTag
             
            setName(String) - Method in class org.apache.struts.taglib.bean.ParameterTag
             
            setName(String) - Method in class org.apache.struts.taglib.bean.ResourceTag
             
            setName(String) - Method in class org.apache.struts.taglib.bean.IncludeTag
            Deprecated. use setPage(String) instead
            setName(String) - Method in class org.apache.struts.taglib.html.ImgTag
             
            setName(String) - Method in class org.apache.struts.taglib.html.OptionsTag
             
            setName(String) - Method in class org.apache.struts.taglib.html.BaseFieldTag
             
            setName(String) - Method in class org.apache.struts.taglib.html.RadioTag
             
            setName(String) - Method in class org.apache.struts.taglib.html.ErrorsTag
             
            setName(String) - Method in class org.apache.struts.taglib.html.MultiboxTag
             
            setName(String) - Method in class org.apache.struts.taglib.html.ResetTag
            Set the field name.
            setName(String) - Method in class org.apache.struts.taglib.html.LinkTag
             
            setName(String) - Method in class org.apache.struts.taglib.html.SelectTag
             
            setName(String) - Method in class org.apache.struts.taglib.html.CheckboxTag
             
            setName(String) - Method in class org.apache.struts.taglib.html.FormTag
            Set the attribute key name of our bean.
            setName(String) - Method in class org.apache.struts.taglib.html.TextareaTag
             
            setName(String) - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
             
            setName(String) - Method in class org.apache.struts.taglib.logic.IterateTag
             
            setName(String) - Method in class org.apache.struts.taglib.logic.ForwardTag
             
            setName(String) - Method in class org.apache.struts.taglib.logic.RedirectTag
             
            setName(String) - Method in class org.apache.struts.taglib.template.PutTag
            Set the content name.
            setName(String) - Method in class org.apache.struts.taglib.template.GetTag
            Set the name attribute
            setName(String) - Method in class org.apache.struts.upload.MultipartElement
            Set the name for this element
            setNestedProperty(Object, String, Object) - Static method in class org.apache.struts.util.PropertyUtils
            Deprecated. Set the value of the (possibly nested) property of the specified name, for the specified bean, with no type conversions.
            SetNextRule - class org.apache.struts.digester.SetNextRule.
            Rule implementation that calls a method on the (top-1) (parent) object, passing the top object (child) as an argument.
            SetNextRule(Digester, String) - Constructor for class org.apache.struts.digester.SetNextRule
            Construct a "set next" rule with the specified method name.
            SetNextRule(Digester, String, String) - Constructor for class org.apache.struts.digester.SetNextRule
            Construct a "set next" rule with the specified method name.
            setOffset(String) - Method in class org.apache.struts.taglib.EnumerateTag
            Set the offset.
            setOffset(String) - Method in class org.apache.struts.taglib.IterateTag
            Set the offset.
            setOffset(String) - Method in class org.apache.struts.taglib.logic.IterateTag
             
            setOnblur(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Sets the onBlur event handler.
            setOnBlur(String) - Method in class org.apache.struts.taglib.BaseHandlerTag
            Sets the onBlur event handler.
            setOnchange(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Sets the onChange event handler.
            setOnChange(String) - Method in class org.apache.struts.taglib.BaseHandlerTag
            Sets the onChange event handler.
            setOnclick(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Sets the onClick event handler.
            setOnClick(String) - Method in class org.apache.struts.taglib.BaseHandlerTag
            Sets the onClick event handler.
            setOndblclick(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Sets the onDblClick event handler.
            setOnDblClick(String) - Method in class org.apache.struts.taglib.BaseHandlerTag
            Sets the onDblClick event handler.
            setOnfocus(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Sets the onFocus event handler.
            setOnFocus(String) - Method in class org.apache.struts.taglib.BaseHandlerTag
            Sets the onFocus event handler.
            setOnkeydown(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Sets the onKeyDown event handler.
            setOnKeyDown(String) - Method in class org.apache.struts.taglib.BaseHandlerTag
            Sets the onKeyDown event handler.
            setOnkeypress(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Sets the onKeyPress event handler.
            setOnKeyPress(String) - Method in class org.apache.struts.taglib.BaseHandlerTag
            Sets the onKeyPress event handler.
            setOnkeyup(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Sets the onKeyUp event handler.
            setOnKeyUp(String) - Method in class org.apache.struts.taglib.BaseHandlerTag
            Sets the onKeyUp event handler.
            setOnmousedown(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Sets the onMouseDown event handler.
            setOnMouseDown(String) - Method in class org.apache.struts.taglib.BaseHandlerTag
            Sets the onMouseDown event handler.
            setOnmousemove(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Sets the onMouseMove event handler.
            setOnMouseMove(String) - Method in class org.apache.struts.taglib.BaseHandlerTag
            Sets the onMouseMove event handler.
            setOnmouseout(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Sets the onMouseOut event handler.
            setOnMouseOut(String) - Method in class org.apache.struts.taglib.BaseHandlerTag
            Sets the onMouseOut event handler.
            setOnmouseover(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Sets the onMouseOver event handler.
            setOnMouseOver(String) - Method in class org.apache.struts.taglib.BaseHandlerTag
            Sets the onMouseOver event handler.
            setOnmouseup(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Sets the onMouseUp event handler.
            setOnMouseUp(String) - Method in class org.apache.struts.taglib.BaseHandlerTag
            Sets the onMouseUp event handler.
            setOnreset(String) - Method in class org.apache.struts.taglib.html.FormTag
            Set the onReset event script.
            setOnReset(String) - Method in class org.apache.struts.taglib.FormTag
            Set the onReset event script.
            setOnselect(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Sets the onSelect event handler.
            setOnSelect(String) - Method in class org.apache.struts.taglib.BaseHandlerTag
            Sets the onSelect event handler.
            setOnsubmit(String) - Method in class org.apache.struts.taglib.html.FormTag
            Set the onSubmit event script.
            setOnSubmit(String) - Method in class org.apache.struts.taglib.FormTag
            Set the onSubmit event script.
            setPage(String) - Method in class org.apache.struts.taglib.bean.IncludeTag
             
            setPage(String) - Method in class org.apache.struts.taglib.html.ImgTag
             
            setPage(String) - Method in class org.apache.struts.taglib.html.ImageTag
             
            setPage(String) - Method in class org.apache.struts.taglib.html.LinkTag
             
            setPage(String) - Method in class org.apache.struts.taglib.logic.RedirectTag
             
            setPageKey(String) - Method in class org.apache.struts.taglib.html.ImgTag
             
            setPageKey(String) - Method in class org.apache.struts.taglib.html.ImageTag
             
            setParameter(String) - Method in class org.apache.struts.action.ActionMapping
            Set the general purpose configuration parameter for this mapping.
            setParameter(String) - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
             
            setParameter(String, String) - Method in class org.apache.struts.upload.MultipartRequestWrapper
            Sets a parameter for this request.
            setParamId(String) - Method in class org.apache.struts.taglib.html.ImgTag
             
            setParamId(String) - Method in class org.apache.struts.taglib.html.LinkTag
             
            setParamId(String) - Method in class org.apache.struts.taglib.logic.RedirectTag
             
            setParamName(String) - Method in class org.apache.struts.taglib.html.ImgTag
             
            setParamName(String) - Method in class org.apache.struts.taglib.html.LinkTag
             
            setParamName(String) - Method in class org.apache.struts.taglib.logic.RedirectTag
             
            setParamProperty(String) - Method in class org.apache.struts.taglib.html.ImgTag
             
            setParamProperty(String) - Method in class org.apache.struts.taglib.html.LinkTag
             
            setParamProperty(String) - Method in class org.apache.struts.taglib.logic.RedirectTag
             
            setParamScope(String) - Method in class org.apache.struts.taglib.html.ImgTag
             
            setParamScope(String) - Method in class org.apache.struts.taglib.html.LinkTag
             
            setParamScope(String) - Method in class org.apache.struts.taglib.logic.RedirectTag
             
            setPassword(String) - Method in class org.apache.struts.util.GenericDataSource
             
            setPath(String) - Method in class org.apache.struts.action.ActionMapping
            Set the request URI path used to select this mapping.
            setPath(String) - Method in class org.apache.struts.action.ActionForward
            Set the path.
            setPingCommand(String) - Method in class org.apache.struts.util.GenericDataSource
             
            setPingQuery(String) - Method in class org.apache.struts.util.GenericDataSource
             
            setPrefix(String) - Method in class org.apache.struts.action.ActionMapping
            Set the parameter name prefix for this mapping.
            SetPropertiesRule - class org.apache.struts.digester.SetPropertiesRule.
            Rule implementation that sets properties on the object at the top of the stack, based on attributes with corresponding names.
            SetPropertiesRule(Digester) - Constructor for class org.apache.struts.digester.SetPropertiesRule
            Default constructor sets only the the associated Digester.
            setProperty(Object, String, Object) - Static method in class org.apache.struts.util.PropertyUtils
            Deprecated. Set the value of the specified property of the specified bean, no matter which property reference format is used, with no type conversions.
            setProperty(String) - Method in class org.apache.struts.taglib.LinkTag
            Set the property name.
            setProperty(String) - Method in class org.apache.struts.taglib.HtmlPropertyTag
            Set the property name.
            setProperty(String) - Method in class org.apache.struts.taglib.MultiboxTag
            Set the property name.
            setProperty(String) - Method in class org.apache.struts.taglib.Options1Tag
             
            setProperty(String) - Method in class org.apache.struts.taglib.EnumerateTag
            Set the property name.
            setProperty(String) - Method in class org.apache.struts.taglib.OptionsTag
             
            setProperty(String) - Method in class org.apache.struts.taglib.GetPropertyTag
            Set the property name.
            setProperty(String) - Method in class org.apache.struts.taglib.RadioTag
            Set the property name.
            setProperty(String) - Method in class org.apache.struts.taglib.BaseInputTag
            Set the property name.
            setProperty(String) - Method in class org.apache.struts.taglib.SubmitTag
            Set the property name.
            setProperty(String) - Method in class org.apache.struts.taglib.CheckboxTag
            Set the property name.
            setProperty(String) - Method in class org.apache.struts.taglib.ButtonTag
            Set the property name.
            setProperty(String) - Method in class org.apache.struts.taglib.CancelTag
            Set the property name.
            setProperty(String) - Method in class org.apache.struts.taglib.Link1Tag
            Set the property name.
            setProperty(String) - Method in class org.apache.struts.taglib.IfPropertyEqualsTag
            Set the property name.
            setProperty(String) - Method in class org.apache.struts.taglib.IterateTag
            Set the property name.
            setProperty(String) - Method in class org.apache.struts.taglib.IfPropertyNotEqualsTag
            Set the property name.
            setProperty(String) - Method in class org.apache.struts.taglib.SelectTag
            Set the property name.
            setProperty(String) - Method in class org.apache.struts.taglib.bean.WriteTag
             
            setProperty(String) - Method in class org.apache.struts.taglib.bean.DefineTag
             
            setProperty(String) - Method in class org.apache.struts.taglib.bean.SizeTag
             
            setProperty(String) - Method in class org.apache.struts.taglib.bean.PageTag
             
            setProperty(String) - Method in class org.apache.struts.taglib.html.ImgTag
             
            setProperty(String) - Method in class org.apache.struts.taglib.html.OptionsTag
             
            setProperty(String) - Method in class org.apache.struts.taglib.html.BaseInputTag
            Set the property name.
            setProperty(String) - Method in class org.apache.struts.taglib.html.RadioTag
            Set the property name.
            setProperty(String) - Method in class org.apache.struts.taglib.html.CancelTag
            Set the property name.
            setProperty(String) - Method in class org.apache.struts.taglib.html.ErrorsTag
             
            setProperty(String) - Method in class org.apache.struts.taglib.html.MultiboxTag
            Set the property name.
            setProperty(String) - Method in class org.apache.struts.taglib.html.ButtonTag
            Set the property name.
            setProperty(String) - Method in class org.apache.struts.taglib.html.SubmitTag
            Set the property name.
            setProperty(String) - Method in class org.apache.struts.taglib.html.ImageTag
             
            setProperty(String) - Method in class org.apache.struts.taglib.html.LinkTag
             
            setProperty(String) - Method in class org.apache.struts.taglib.html.SelectTag
            Set the property name.
            setProperty(String) - Method in class org.apache.struts.taglib.html.CheckboxTag
            Set the property name.
            setProperty(String) - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
             
            setProperty(String) - Method in class org.apache.struts.taglib.logic.IterateTag
             
            setProperty(String) - Method in class org.apache.struts.taglib.logic.RedirectTag
             
            SetPropertyRule - class org.apache.struts.digester.SetPropertyRule.
            Rule implementation that sets an individual property on the object at the top of the stack, based on attributes with specified names.
            SetPropertyRule(Digester, String, String) - Constructor for class org.apache.struts.digester.SetPropertyRule
            Construct a "set property" rule with the specified name and value attributes.
            setReadonly(boolean) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Sets the readonly event handler.
            setReadOnly(boolean) - Method in class org.apache.struts.util.GenericConnection
            Set the read-only mode of this connection.
            setReadOnly(boolean) - Method in class org.apache.struts.util.GenericDataSource
             
            setRedirect(boolean) - Method in class org.apache.struts.action.ActionForward
            Set the redirect flag.
            setRedisplay(boolean) - Method in class org.apache.struts.taglib.html.BaseFieldTag
             
            setReturnNull(boolean) - Method in class org.apache.struts.util.MessageResources
             
            setReturnNull(boolean) - Method in class org.apache.struts.util.MessageResourcesFactory
             
            setRole(String) - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
             
            setRole(String) - Method in class org.apache.struts.taglib.template.PutTag
             
            setRole(String) - Method in class org.apache.struts.taglib.template.GetTag
            Set the role attribute
            setRows(String) - Method in class org.apache.struts.taglib.BaseInputTag
            Set the number of rows for this field.
            setRows(String) - Method in class org.apache.struts.taglib.html.BaseInputTag
            Set the number of rows for this field.
            setScope(String) - Method in class org.apache.struts.action.ActionMapping
            Set the attribute scope for this mapping.
            setScope(String) - Method in class org.apache.struts.taglib.FormTag
            Set the attribute scope of our bean.
            setScope(String) - Method in class org.apache.struts.taglib.BaseAttributeTag
            Set the attribute scope.
            setScope(String) - Method in class org.apache.struts.taglib.bean.WriteTag
             
            setScope(String) - Method in class org.apache.struts.taglib.bean.DefineTag
             
            setScope(String) - Method in class org.apache.struts.taglib.bean.SizeTag
             
            setScope(String) - Method in class org.apache.struts.taglib.html.ImgTag
             
            setScope(String) - Method in class org.apache.struts.taglib.html.LinkTag
             
            setScope(String) - Method in class org.apache.struts.taglib.html.FormTag
            Set the attribute scope of our bean.
            setScope(String) - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
             
            setScope(String) - Method in class org.apache.struts.taglib.logic.IterateTag
             
            setScope(String) - Method in class org.apache.struts.taglib.logic.RedirectTag
             
            setServlet(ActionServlet) - Method in class org.apache.struts.action.Action
            Set the controller servlet instance to which we are attached (if servlet is non-null), or release any allocated resources (if servlet is null).
            setServlet(ActionServlet) - Method in class org.apache.struts.action.ActionForm
            Set the controller servlet instance to which we are attached (if servlet is non-null), or release any allocated resources (if servlet is null).
            setServlet(ActionServlet) - Method in class org.apache.struts.action.ActionMappings
            Set the ActionServlet instance of our owning application.
            setServlet(ActionServlet) - Method in interface org.apache.struts.upload.MultipartRequestHandler
            Convienience method to set a reference to a working ActionServlet instance.
            setServlet(ActionServlet) - Method in class org.apache.struts.upload.DiskMultipartRequestHandler
             
            setSimpleProperty(Object, String, Object) - Static method in class org.apache.struts.util.PropertyUtils
            Deprecated. Set the value of the specified simple property of the specified bean, with no type conversions.
            setSize(String) - Method in class org.apache.struts.taglib.BaseInputTag
            Set the size of this field (synonym for setCols()).
            setSize(String) - Method in class org.apache.struts.taglib.SelectTag
             
            setSize(String) - Method in class org.apache.struts.taglib.html.BaseInputTag
            Set the size of this field (synonym for setCols()).
            setSize(String) - Method in class org.apache.struts.taglib.html.SelectTag
             
            setSrc(String) - Method in class org.apache.struts.taglib.html.ImgTag
             
            setSrc(String) - Method in class org.apache.struts.taglib.html.ImageTag
             
            setSrcKey(String) - Method in class org.apache.struts.taglib.html.ImgTag
             
            setSrcKey(String) - Method in class org.apache.struts.taglib.html.ImageTag
             
            setStyle(String) - Method in class org.apache.struts.taglib.FormTag
            Set the style attribute for this tag.
            setStyle(String) - Method in class org.apache.struts.taglib.BaseHandlerTag
            Sets the style attribute.
            setStyle(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Sets the style attribute.
            setStyle(String) - Method in class org.apache.struts.taglib.html.FormTag
            Set the style attribute for this tag.
            setStyleClass(String) - Method in class org.apache.struts.taglib.FormTag
            Set the style class for this tag.
            setStyleClass(String) - Method in class org.apache.struts.taglib.BaseHandlerTag
            Sets the style class attribute.
            setStyleClass(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Sets the style class attribute.
            setStyleClass(String) - Method in class org.apache.struts.taglib.html.FormTag
            Set the style class for this tag.
            setStyleId(String) - Method in class org.apache.struts.taglib.FormTag
            Set the style id for this tag.
            setStyleId(String) - Method in class org.apache.struts.taglib.BaseHandlerTag
            Sets the style id attribute.
            setStyleId(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Sets the style id attribute.
            setStyleId(String) - Method in class org.apache.struts.taglib.html.FormTag
            Set the style identifier for this tag.
            setSuffix(String) - Method in class org.apache.struts.action.ActionMapping
            Set the parameter name suffix for this mapping.
            setTabindex(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Sets the tabIndex value.
            setTabIndex(String) - Method in class org.apache.struts.taglib.BaseHandlerTag
            Sets the tabIndex value.
            setTarget(String) - Method in class org.apache.struts.taglib.LinkTag
            Set the window target.
            setTarget(String) - Method in class org.apache.struts.taglib.FormTag
            Set the window target.
            setTarget(String) - Method in class org.apache.struts.taglib.Link1Tag
            Set the window target.
            setTarget(String) - Method in class org.apache.struts.taglib.html.BaseTag
             
            setTarget(String) - Method in class org.apache.struts.taglib.html.LinkTag
             
            setTarget(String) - Method in class org.apache.struts.taglib.html.FormTag
            Set the window target.
            setTempDir(String) - Method in class org.apache.struts.action.ActionServlet
            Set the directory used to temporarily store files for MultipartRequestHandler implementations that write to the disk
            setTemplate(String) - Method in class org.apache.struts.taglib.template.InsertTag
            Set the template attribute.
            setTitle(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
            Sets the advisory title attribute.
            SetTopRule - class org.apache.struts.digester.SetTopRule.
            Rule implementation that calls a method on the top (parent) object, passing the (top-1) (child) object as an argument.
            SetTopRule(Digester, String) - Constructor for class org.apache.struts.digester.SetTopRule
            Construct a "set parent" rule with the specified method name.
            SetTopRule(Digester, String, String) - Constructor for class org.apache.struts.digester.SetTopRule
            Construct a "set parent" rule with the specified method name.
            setToScope(String) - Method in class org.apache.struts.taglib.bean.DefineTag
             
            setTransaction(boolean) - Method in class org.apache.struts.taglib.bean.IncludeTag
             
            setTransaction(boolean) - Method in class org.apache.struts.taglib.html.LinkTag
             
            setTransaction(boolean) - Method in class org.apache.struts.taglib.logic.RedirectTag
             
            setTransactionIsolation(int) - Method in class org.apache.struts.util.GenericConnection
            Set the transaction isolation level for this Connection.
            setType(String) - Method in class org.apache.struts.action.ActionMapping
            Set the fully qualified Action class name.
            setType(String) - Method in class org.apache.struts.action.ActionFormBean
            Set the Java class name of this action form bean.
            setType(String) - Method in class org.apache.struts.taglib.FormTag
            Set the Java class of our bean.
            setType(String) - Method in class org.apache.struts.taglib.bean.DefineTag
             
            setType(String) - Method in class org.apache.struts.taglib.html.FormTag
            Set the Java class of our bean.
            setType(String) - Method in class org.apache.struts.taglib.logic.IterateTag
             
            setTypeMap(Map) - Method in class org.apache.struts.util.GenericConnection
            (JDBC 2.0) Set the type map for this connection.
            setUnknown(boolean) - Method in class org.apache.struts.action.ActionMapping
            Set the unknown flag for this mapping.
            setUrl(String) - Method in class org.apache.struts.taglib.EncodeRedirectURLTag
            Set the URL to be encoded.
            setUrl(String) - Method in class org.apache.struts.taglib.EncodeURLTag
            Set the URL to be encoded.
            setUrl(String) - Method in class org.apache.struts.util.GenericDataSource
             
            setUsemap(String) - Method in class org.apache.struts.taglib.html.ImgTag
             
            setUser(String) - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
             
            setUser(String) - Method in class org.apache.struts.util.GenericDataSource
             
            setValidate(boolean) - Method in class org.apache.struts.action.ActionMapping
            Set the validate flag for this mapping.
            setValidating(boolean) - Method in class org.apache.struts.digester.Digester
            Set the validating parser flag.
            setValue(String) - Method in class org.apache.struts.taglib.IfParameterEqualsTag
            Set the comparison value.
            setValue(String) - Method in class org.apache.struts.taglib.MultiboxTag
            Set the server value.
            setValue(String) - Method in class org.apache.struts.taglib.RadioTag
            Set the server value.
            setValue(String) - Method in class org.apache.struts.taglib.ResetTag
            Set the label value.
            setValue(String) - Method in class org.apache.struts.taglib.BaseInputTag
            Set the field value (if any).
            setValue(String) - Method in class org.apache.struts.taglib.IfParameterNotEqualsTag
            Set the comparison value.
            setValue(String) - Method in class org.apache.struts.taglib.SubmitTag
            Set the label value.
            setValue(String) - Method in class org.apache.struts.taglib.CheckboxTag
            Set the server value.
            setValue(String) - Method in class org.apache.struts.taglib.ButtonTag
            Set the label value.
            setValue(String) - Method in class org.apache.struts.taglib.CancelTag
            Set the label value.
            setValue(String) - Method in class org.apache.struts.taglib.OptionTag
            Set the server value.
            setValue(String) - Method in class org.apache.struts.taglib.IfPropertyEqualsTag
            Set the matching value.
            setValue(String) - Method in class org.apache.struts.taglib.IfPropertyNotEqualsTag
            Set the matching value.
            setValue(String) - Method in class org.apache.struts.taglib.SelectTag
            Set the comparison value.
            setValue(String) - Method in class org.apache.struts.taglib.bean.HeaderTag
             
            setValue(String) - Method in class org.apache.struts.taglib.bean.DefineTag
             
            setValue(String) - Method in class org.apache.struts.taglib.bean.CookieTag
             
            setValue(String) - Method in class org.apache.struts.taglib.bean.ParameterTag
             
            setValue(String) - Method in class org.apache.struts.taglib.html.BaseInputTag
            Set the field value (if any).
            setValue(String) - Method in class org.apache.struts.taglib.html.RadioTag
            Set the server value.
            setValue(String) - Method in class org.apache.struts.taglib.html.CancelTag
            Set the label value.
            setValue(String) - Method in class org.apache.struts.taglib.html.MultiboxTag
            Set the server value.
            setValue(String) - Method in class org.apache.struts.taglib.html.ResetTag
            Set the label value.
            setValue(String) - Method in class org.apache.struts.taglib.html.ButtonTag
            Set the label value.
            setValue(String) - Method in class org.apache.struts.taglib.html.SubmitTag
            Set the label value.
            setValue(String) - Method in class org.apache.struts.taglib.html.SelectTag
            Set the comparison value.
            setValue(String) - Method in class org.apache.struts.taglib.html.OptionTag
             
            setValue(String) - Method in class org.apache.struts.taglib.html.CheckboxTag
            Set the server value.
            setValue(String) - Method in class org.apache.struts.taglib.logic.MatchTag
             
            setValue(String) - Method in class org.apache.struts.taglib.logic.CompareTagBase
             
            setValue(String) - Method in class org.apache.struts.upload.MultipartElement
             
            setVspace(String) - Method in class org.apache.struts.taglib.html.ImgTag
             
            setWidth(String) - Method in class org.apache.struts.taglib.html.ImgTag
             
            setXhtml(boolean) - Method in class org.apache.struts.taglib.html.HtmlTag
             
            size - Variable in class org.apache.struts.taglib.SelectTag
            How many available options should be displayed when this element is rendered?
            size - Variable in class org.apache.struts.taglib.html.SelectTag
            How many available options should be displayed when this element is rendered?
            size() - Method in class org.apache.struts.action.ActionErrors
            Return the number of errors recorded for all properties (including global errors).
            size() - Method in class org.apache.struts.util.FastHashMap
            Deprecated. Return the number of key-value mappings in this map.
            size() - Method in class org.apache.struts.util.ArrayStack
            Return the number of items on this stack.
            size() - Method in class org.apache.struts.util.FastArrayList
            Deprecated. Return the number of elements in this list.
            size() - Method in class org.apache.struts.util.FastTreeMap
            Deprecated. Return the number of key-value mappings in this map.
            size(String) - Method in class org.apache.struts.action.ActionErrors
            Return the number of errors associated with the specified property.
            SizeTag - class org.apache.struts.taglib.bean.SizeTag.
            Define a scripting variable that will contain the number of elements found in a specified array, Collection, or Map.
            SizeTag() - Constructor for class org.apache.struts.taglib.bean.SizeTag
             
            SizeTei - class org.apache.struts.taglib.bean.SizeTei.
            Implementation of TagExtraInfo for the size tag, identifying the scripting object(s) to be made visible.
            SizeTei() - Constructor for class org.apache.struts.taglib.bean.SizeTei
             
            source - Variable in class org.apache.struts.util.GenericConnection
            The GenericDataSource that owns this connection.
            SQLEXCEPTION_CLOSED - Static variable in class org.apache.struts.util.GenericConnection
             
            SQLEXCEPTION_GETCONNECTION - Static variable in class org.apache.struts.util.GenericDataSource
             
            src - Variable in class org.apache.struts.taglib.html.ImgTag
            The image source URI.
            src - Variable in class org.apache.struts.taglib.html.ImageTag
            The URL of this image.
            src() - Method in class org.apache.struts.taglib.html.ImgTag
            Return the base source URL that will be rendered in the src property for this generated element, or null if there is no such URL.
            src() - Method in class org.apache.struts.taglib.html.ImageTag
            Return the base source URL that will be rendered in the src property for this generated element, or null if there is no such URL.
            srcKey - Variable in class org.apache.struts.taglib.html.ImgTag
            The message resources key under which we should look up the src attribute for this generated tag, if any.
            srcKey - Variable in class org.apache.struts.taglib.html.ImageTag
            The message resources key for the URL of this image.
            stack - Variable in class org.apache.struts.digester.Digester
            The object stack being constructed.
            startDocument() - Method in class org.apache.struts.digester.Digester
            Process notification of the beginning of the document being reached.
            started - Variable in class org.apache.struts.taglib.logic.IterateTag
            Has this tag instance been started?
            startElement(String, AttributeList) - Method in class org.apache.struts.digester.Digester
            Process notification of the start of an XML element being reached.
            STRING_COMPARE - Static variable in class org.apache.struts.taglib.logic.CompareTagBase
            We will do a String comparison.
            stringClass - Static variable in class org.apache.struts.util.ConvertUtils
            Deprecated. The Class object for java.lang.String.
            StrutsTag - class org.apache.struts.taglib.bean.StrutsTag.
            Define a scripting variable that exposes the requested Struts internal configuraton object.
            StrutsTag() - Constructor for class org.apache.struts.taglib.bean.StrutsTag
             
            StrutsTei - class org.apache.struts.taglib.bean.StrutsTei.
            Implementation of TagExtraInfo for the struts tag, identifying the scripting object(s) to be made visible.
            StrutsTei() - Constructor for class org.apache.struts.taglib.bean.StrutsTei
             
            style - Variable in class org.apache.struts.taglib.FormTag
            The style attribute associated with this tag.
            style - Variable in class org.apache.struts.taglib.BaseHandlerTag
            Style attribute associated with component.
            style - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
            Style attribute associated with component.
            style - Variable in class org.apache.struts.taglib.html.FormTag
            The style attribute associated with this tag.
            styleClass - Variable in class org.apache.struts.taglib.FormTag
            The style class associated with this tag.
            styleClass - Variable in class org.apache.struts.taglib.BaseHandlerTag
            Named Style class associated with component.
            styleClass - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
            Named Style class associated with component.
            styleClass - Variable in class org.apache.struts.taglib.html.FormTag
            The style class associated with this tag.
            styleId - Variable in class org.apache.struts.taglib.FormTag
            The identifier associated with this tag.
            styleId - Variable in class org.apache.struts.taglib.BaseHandlerTag
            Identifier associated with component.
            styleId - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
            Identifier associated with component.
            styleId - Variable in class org.apache.struts.taglib.html.FormTag
            The identifier associated with this tag.
            subList(int, int) - Method in class org.apache.struts.util.FastArrayList
            Deprecated. Return a view of the portion of this list between fromIndex (inclusive) and toIndex (exclusive).
            subMap(Object, Object) - Method in class org.apache.struts.util.FastTreeMap
            Deprecated. Return a view of the portion of this map whose keys are in the range fromKey (inclusive) to toKey (exclusive).
            SubmitTag - class org.apache.struts.taglib.SubmitTag.
            Tag for input fields of type "submit".
            SubmitTag - class org.apache.struts.taglib.html.SubmitTag.
            Tag for input fields of type "submit".
            SubmitTag() - Constructor for class org.apache.struts.taglib.SubmitTag
             
            SubmitTag() - Constructor for class org.apache.struts.taglib.html.SubmitTag
             
            suffix - Variable in class org.apache.struts.action.ActionMapping
            The parameter name suffix used to select parameters for this action.

            T

            tabindex - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
            Tab index value.
            tabIndex - Variable in class org.apache.struts.taglib.BaseHandlerTag
            Tab index value.
            tailMap(Object) - Method in class org.apache.struts.util.FastTreeMap
            Deprecated. Return a view of the portion of this map whose keys are greater than or equal to the specified key.
            target - Variable in class org.apache.struts.taglib.LinkTag
            The window target.
            target - Variable in class org.apache.struts.taglib.FormTag
            The window target.
            target - Variable in class org.apache.struts.taglib.Link1Tag
            The window target.
            target - Variable in class org.apache.struts.taglib.html.BaseTag
            The target window for this base reference.
            target - Variable in class org.apache.struts.taglib.html.LinkTag
            The window target.
            target - Variable in class org.apache.struts.taglib.html.FormTag
            The window target.
            tempDir - Variable in class org.apache.struts.action.ActionServlet
            The directory used to store temporary files for the DiskMultipartRequestHandler multipart implementation
            tempDir - Variable in class org.apache.struts.upload.MultipartIterator
            The temporary directory to store files
            tempDir - Variable in class org.apache.struts.upload.DiskMultipartRequestHandler
            The temporary directory
            template - Variable in class org.apache.struts.taglib.template.InsertTag
            The URI of the template.
            text - Variable in class org.apache.struts.taglib.html.RadioTag
            The body content of this tag (if any).
            text - Variable in class org.apache.struts.taglib.html.CancelTag
            The body content of this tag (if any).
            text - Variable in class org.apache.struts.taglib.html.ResetTag
            The body content of this tag (if any).
            text - Variable in class org.apache.struts.taglib.html.ButtonTag
            The body content of this tag (if any).
            text - Variable in class org.apache.struts.taglib.html.SubmitTag
            The body content of this tag (if any).
            text - Variable in class org.apache.struts.taglib.html.LinkTag
            The body content of this tag (if any).
            text - Variable in class org.apache.struts.taglib.html.OptionTag
            The message text to be displayed to the user for this tag (if any)
            text - Variable in class org.apache.struts.taglib.html.CheckboxTag
            The body content of this tag (if any).
            text() - Method in class org.apache.struts.taglib.html.OptionTag
            Return the text to be displayed to the user for this option (if any).
            TextareaTag - class org.apache.struts.taglib.TextareaTag.
            Custom tag for input fields of type "textarea".
            TextareaTag - class org.apache.struts.taglib.html.TextareaTag.
            Custom tag for input fields of type "textarea".
            TextareaTag() - Constructor for class org.apache.struts.taglib.TextareaTag
             
            TextareaTag() - Constructor for class org.apache.struts.taglib.html.TextareaTag
             
            textElements - Variable in class org.apache.struts.upload.DiskMultipartRequestHandler
            A Hashtable representing the form text input names and values
            TextTag - class org.apache.struts.taglib.TextTag.
            Custom tag for input fields of type "text".
            TextTag - class org.apache.struts.taglib.html.TextTag.
            Custom tag for input fields of type "text".
            TextTag() - Constructor for class org.apache.struts.taglib.TextTag
            Construct a new instance of this tag.
            TextTag() - Constructor for class org.apache.struts.taglib.html.TextTag
            Construct a new instance of this tag.
            title - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
            The advisory title of this element.
            toArray() - Method in class org.apache.struts.util.FastArrayList
            Deprecated. Return an array containing all of the elements in this list in the correct order.
            toArray(Object[]) - Method in class org.apache.struts.util.FastArrayList
            Deprecated. Return an array containing all of the elements in this list in the correct order.
            toHex(byte[]) - Method in class org.apache.struts.action.Action
            Convert a byte array to a String of hexadecimal digits and return it.
            TOKEN_KEY - Static variable in class org.apache.struts.taglib.html.Constants
            The property under which a transaction token is reported.
            toScope - Variable in class org.apache.struts.taglib.bean.DefineTag
            The scope within which the newly defined bean will be creatd.
            toString() - Method in class org.apache.struts.action.ActionMapping
            Return a String version of this mapping.
            toString() - Method in class org.apache.struts.action.ActionFormBean
            Return a string representation of this object.
            toString() - Method in class org.apache.struts.action.ActionForward
            Return a String version of this mapping.
            toString() - Method in class org.apache.struts.taglib.template.util.Content
            Returns a string representation of the content
            toString() - Method in class org.apache.struts.util.FastArrayList
            Deprecated. Return a String representation of this object.
            toString() - Method in class org.apache.struts.util.GenericDataSource
            Return a string representation of this component.
            totalLength - Variable in class org.apache.struts.upload.BufferedMultipartInputStream
            The total number of bytes read so far
            totalLength - Variable in class org.apache.struts.upload.MultipartIterator
            The total bytes read from this request
            transaction - Variable in class org.apache.struts.taglib.bean.IncludeTag
            Include transaction token (if any) in the hyperlink?
            transaction - Variable in class org.apache.struts.taglib.html.LinkTag
            Include transaction token (if any) in the hyperlink?
            transaction - Variable in class org.apache.struts.taglib.logic.RedirectTag
            Include our transaction control token?
            TRANSACTION_TOKEN_KEY - Static variable in class org.apache.struts.action.Action
            The session attributes key under which our transaction token is stored, if it is used.
            trimToSize() - Method in class org.apache.struts.util.FastArrayList
            Deprecated. Trim the capacity of this ArrayList instance to be the list's current size.
            type - Variable in class org.apache.struts.action.ActionMapping
            The fully qualified Java class name of the Action implementation class to be used to process requests for this mapping.
            type - Variable in class org.apache.struts.action.ActionFormBean
            The Java class name of this action form bean.
            type - Variable in class org.apache.struts.taglib.FormTag
            The Java class name of the bean to be created, if necessary.
            type - Variable in class org.apache.struts.taglib.BaseFieldTag
            The type of input field represented by this tag (text, password, or hidden).
            type - Variable in class org.apache.struts.taglib.bean.DefineTag
            The fully qualified Java class name of the value to be exposed.
            type - Variable in class org.apache.struts.taglib.html.BaseFieldTag
            The type of input field represented by this tag (text, password, or hidden).
            type - Variable in class org.apache.struts.taglib.html.FormTag
            The Java class name of the bean to be created, if necessary.
            type - Variable in class org.apache.struts.taglib.logic.IterateTag
            The Java class of each exposed element of the collection.
            types - Variable in class org.apache.struts.actions.DispatchAction
            The set of argument type classes for the reflected method call.

            U

            unknown - Variable in class org.apache.struts.action.ActionMapping
            Should this action be the default for this application?
            unknown - Variable in class org.apache.struts.action.ActionMappings
            The ActionMapping that should handle unknown request paths, if any.
            unparsedEntityDecl(String, String, String, String) - Method in class org.apache.struts.digester.Digester
            Receive notification of an unparsed entity declaration event.
            url - Variable in class org.apache.struts.taglib.EncodeRedirectURLTag
            The URL to be encoded.
            url - Variable in class org.apache.struts.taglib.EncodeURLTag
            The URL to be encoded.
            url - Variable in class org.apache.struts.util.GenericDataSource
            The JDBC URL for the database connection to be opened.
            url(String) - Method in class org.apache.struts.taglib.html.ImgTag
            Return the specified src URL, modified as necessary with optional request parameters.
            useCount - Variable in class org.apache.struts.util.GenericDataSource
            The number of connections created by this data source that are currently in use.
            usemap - Variable in class org.apache.struts.taglib.html.ImgTag
            Client-side image map declaration.
            user - Variable in class org.apache.struts.taglib.logic.ConditionalTagBase
            The user principal name to be checked for.
            user - Variable in class org.apache.struts.util.GenericDataSource
            The database username for use in establishing a connection.

            V

            validate - Variable in class org.apache.struts.action.ActionMapping
            Should the validate() method of our form bean be called?
            validate - Variable in class org.apache.struts.action.ActionServlet
            Are we using the new configuration file format?
            validate() - Method in class org.apache.struts.action.ActionForm
            Deprecated. This is the Struts 0.5 version of validation -- use the validate(ActionMapping,HttpServletRequest) method instead
            validate() - Method in class org.apache.struts.action.ValidatingActionForm
            Deprecated. Perform validations on the form input values included in this form bean.
            validate(ActionMapping, HttpServletRequest) - Method in class org.apache.struts.action.ActionForm
            Validate the properties that have been set for this HTTP request, and return an ActionErrors object that encapsulates any validation errors that have been found.
            validate(ActionMapping, ServletRequest) - Method in class org.apache.struts.action.ActionForm
            Validate the properties that have been set for this non-HTTP request, and return an ActionErrors object that encapsulates any validation errors that have been found.
            validating - Variable in class org.apache.struts.action.ActionServlet
            Should we use a validating XML parser to read the configuration file?
            validating - Variable in class org.apache.struts.digester.Digester
            Do we want to use a validating parser?
            ValidatingActionForm - class org.apache.struts.action.ValidatingActionForm.
            Deprecated. Application ActionForm beans should now extend ActionForm directly, and override the validate() method if they wish to provide such services
            ValidatingActionForm() - Constructor for class org.apache.struts.action.ValidatingActionForm
            Deprecated.  
            value - Variable in class org.apache.struts.digester.SetPropertyRule
            The attribute that will contain the property value.
            value - Variable in class org.apache.struts.taglib.IfParameterEqualsTag
            The value to compare this parameter to.
            value - Variable in class org.apache.struts.taglib.MultiboxTag
            The value which will mark this checkbox as "checked" if present in the array returned by our property getter.
            value - Variable in class org.apache.struts.taglib.RadioTag
            The server value for this option.
            value - Variable in class org.apache.struts.taglib.ResetTag
            The value of the button label.
            value - Variable in class org.apache.struts.taglib.BaseInputTag
            The value for this field, or null to retrieve the corresponding property from our associated bean.
            value - Variable in class org.apache.struts.taglib.IfParameterNotEqualsTag
            The value to compare this parameter to.
            value - Variable in class org.apache.struts.taglib.SubmitTag
            The value of the button label.
            value - Variable in class org.apache.struts.taglib.CheckboxTag
            The server value for this option.
            value - Variable in class org.apache.struts.taglib.ButtonTag
            The value of the button label.
            value - Variable in class org.apache.struts.taglib.CancelTag
            The value of the button label.
            value - Variable in class org.apache.struts.taglib.OptionTag
            The server value for this option.
            value - Variable in class org.apache.struts.taglib.IfPropertyEqualsTag
            The value to compare to.
            value - Variable in class org.apache.struts.taglib.IfPropertyNotEqualsTag
            The value to compare to.
            value - Variable in class org.apache.struts.taglib.SelectTag
            The value to compare with for marking an option selected.
            value - Variable in class org.apache.struts.taglib.bean.HeaderTag
            The default value to return if no header of the specified name is found.
            value - Variable in class org.apache.struts.taglib.bean.DefineTag
            The (String) value to which the defined bean will be set.
            value - Variable in class org.apache.struts.taglib.bean.CookieTag
            The default value to return if no cookie of the specified name is found.
            value - Variable in class org.apache.struts.taglib.bean.ParameterTag
            The default value to return if no parameter of the specified name is found.
            value - Variable in class org.apache.struts.taglib.html.BaseInputTag
            The value for this field, or null to retrieve the corresponding property from our associated bean.
            value - Variable in class org.apache.struts.taglib.html.RadioTag
            The server value for this option.
            value - Variable in class org.apache.struts.taglib.html.CancelTag
            The value of the button label.
            value - Variable in class org.apache.struts.taglib.html.MultiboxTag
            The value which will mark this checkbox as "checked" if present in the array returned by our property getter.
            value - Variable in class org.apache.struts.taglib.html.ResetTag
            The value of the button label.
            value - Variable in class org.apache.struts.taglib.html.ButtonTag
            The value of the button label.
            value - Variable in class org.apache.struts.taglib.html.SubmitTag
            The value of the button label.
            value - Variable in class org.apache.struts.taglib.html.SelectTag
            The value to compare with for marking an option selected.
            value - Variable in class org.apache.struts.taglib.html.OptionTag
            The server value for this option, also used to match against the current property value to determine whether this option should be marked as selected.
            value - Variable in class org.apache.struts.taglib.html.CheckboxTag
            The server value for this option.
            value - Variable in class org.apache.struts.taglib.logic.MatchTag
            The value to which the variable specified by other attributes of this tag will be matched.
            value - Variable in class org.apache.struts.taglib.logic.CompareTagBase
            The value to which the variable specified by other attributes of this tag will be compared.
            value - Variable in class org.apache.struts.upload.MultipartElement
            The element's text value, null for file elements
            values - Variable in class org.apache.struts.action.ActionError
            The replacement values for this error mesasge.
            values() - Method in class org.apache.struts.util.FastHashMap
            Deprecated. Return a collection view of the values contained in this map.
            values() - Method in class org.apache.struts.util.FastTreeMap
            Deprecated. Return a collection view of the values contained in this map.
            vspace - Variable in class org.apache.struts.taglib.html.ImgTag
            The vertical spacing around the image.

            W

            warning(SAXParseException) - Method in class org.apache.struts.digester.Digester
            Forward notification of a parse warning to the application supplied error handler (if any).
            width - Variable in class org.apache.struts.taglib.html.ImgTag
            The image width.
            write(char) - Method in class org.apache.struts.util.ServletContextWriter
            Write a single character to this stream.
            write(char[]) - Method in class org.apache.struts.util.ServletContextWriter
            Write an array of charaters to this stream.
            write(char[], int, int) - Method in class org.apache.struts.util.ServletContextWriter
            Write the specified subset of an array of characters to this stream.
            write(int) - Method in class org.apache.struts.util.ServletContextWriter
            Write a single character to this stream.
            write(PageContext, String) - Static method in class org.apache.struts.util.ResponseUtils
            Write the specified text as the response to the writer associated with this page.
            write(String) - Method in class org.apache.struts.util.ServletContextWriter
            Write a String to this stream.
            write(String, int, int) - Method in class org.apache.struts.util.ServletContextWriter
            Write the specified portion of a String to this stream.
            writePrevious(PageContext, String) - Static method in class org.apache.struts.util.ResponseUtils
            Write the specified text as the response to the writer associated with the body content for the tag within which we are currently nested.
            WriteTag - class org.apache.struts.taglib.bean.WriteTag.
            Tag that retrieves the specified property of the specified bean, converts it to a String representation (if necessary), and writes it to the current output stream, optionally filtering characters that are sensitive in HTML.
            WriteTag() - Constructor for class org.apache.struts.taglib.bean.WriteTag
             

            X

            xhtml - Variable in class org.apache.struts.taglib.html.HtmlTag
            Are we rendering an xhtml page?

            < A B C D E F G H I K L M N O P R S T U V W X

            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/index.html0000644000175000017500000000141610404045174021773 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation <H2> Frame Alert</H2> <P> This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. <BR> Link to <A HREF="overview-summary.html">Non-frame version.</A> libstruts1.2-java-1.2.9/legacy/api-1.0/overview-frame.html0000644000175000017500000000467010404045244023625 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Overview
            All Classes

            Packages
            org.apache.struts.action
            org.apache.struts.actions
            org.apache.struts.digester
            org.apache.struts.taglib
            org.apache.struts.taglib.bean
            org.apache.struts.taglib.html
            org.apache.struts.taglib.logic
            org.apache.struts.taglib.template
            org.apache.struts.taglib.template.util
            org.apache.struts.upload
            org.apache.struts.util

              libstruts1.2-java-1.2.9/legacy/api-1.0/overview-summary.html0000644000175000017500000001601610404045234024224 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Overview


            Apache Struts Framework (Version 1.0)

            Packages
            org.apache.struts.action  
            org.apache.struts.actions  
            org.apache.struts.digester The Digester package provides for rules-based processing of arbitrary XML documents.
            org.apache.struts.taglib  
            org.apache.struts.taglib.bean The "struts-bean" tag library contains JSP custom tags useful in defining new beans (in any desired scope) from a variety of possible sources, as well as a tag to render a particular bean (or bean property) to the output response.
            org.apache.struts.taglib.html The "struts-html" tag library contains JSP custom tags useful in creating dynamic HTML user interfaces, including input forms.
            org.apache.struts.taglib.logic The "struts-logic" 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
            org.apache.struts.taglib.template The "struts-template" tag library contains tags that are useful in creating dynamic JSP templates for pages which share a common format.
            org.apache.struts.taglib.template.util  
            org.apache.struts.upload  
            org.apache.struts.util The Utilities package provides a variety of families of classes, to solve problems that are commonly encountered in building web applications.

             



            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/overview-tree.html0000644000175000017500000007642110404045220023467 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation: Class Hierarchy

            Hierarchy For All Packages

            Package Hierarchies:
            org.apache.struts.action, org.apache.struts.actions, org.apache.struts.digester, org.apache.struts.taglib, org.apache.struts.taglib.bean, org.apache.struts.taglib.html, org.apache.struts.taglib.logic, org.apache.struts.taglib.template, org.apache.struts.taglib.template.util, org.apache.struts.upload, org.apache.struts.util

            Class Hierarchy

            Interface Hierarchy



            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/package-list0000644000175000017500000000050610404045242022260 0ustar arnaudarnaud00000000000000org.apache.struts.action org.apache.struts.actions org.apache.struts.digester org.apache.struts.taglib org.apache.struts.taglib.bean org.apache.struts.taglib.html org.apache.struts.taglib.logic org.apache.struts.taglib.template org.apache.struts.taglib.template.util org.apache.struts.upload org.apache.struts.util libstruts1.2-java-1.2.9/legacy/api-1.0/packages.html0000644000175000017500000000127610404045216022443 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation


            The front page has been relocated.Please see:
                      Frame version
                      Non-frame version.
            libstruts1.2-java-1.2.9/legacy/api-1.0/serialized-form.html0000644000175000017500000044153610404045250023766 0ustar arnaudarnaud00000000000000 Serialized Form

            Serialized Form


            Package org.apache.struts.action

            Class org.apache.struts.action.ActionError implements Serializable

            Serialized Fields

            key

            java.lang.String key
            The message key for this error message.

            values

            java.lang.Object[] values
            The replacement values for this error mesasge.

            Class org.apache.struts.action.ActionErrors implements Serializable

            Serialized Fields

            errors

            java.util.HashMap errors
            The accumulated set of ActionError objects (represented as an ArrayList) for each property, keyed by property name.

            Class org.apache.struts.action.ActionForm implements Serializable

            Class org.apache.struts.action.ActionFormBean implements Serializable

            Serialized Fields

            name

            java.lang.String name
            The bean name of this action form bean.

            type

            java.lang.String type
            The Java class name of this action form bean.

            Class org.apache.struts.action.ActionFormBeans implements Serializable

            Serialized Fields

            formBeans

            FastHashMap formBeans
            The collection of ActionFormBean instances, keyed by name.

            Class org.apache.struts.action.ActionForward implements Serializable

            Serialized Fields

            name

            java.lang.String name
            The logical name of this forward.

            path

            java.lang.String path
            The context-relative (for a forward) or relative or absolute (for a redirect) URI path to be forwarded to.

            redirect

            boolean redirect
            Should this be a redirect instead of a forward?

            Class org.apache.struts.action.ActionForwards implements Serializable

            Serialized Fields

            forwards

            FastHashMap forwards
            The collection of ActionForward instances, keyed by logical name.

            Class org.apache.struts.action.ActionMapping implements Serializable

            Serialized Fields

            attribute

            java.lang.String attribute
            The name of the request-scope or session-scope attribute under which our form bean, if any, will be created.

            forward

            java.lang.String forward
            The context relative path of the servlet or JSP resource (to be called via RequestDispatcher.forward()) that will process this request, rather than instantiating and calling the Action class that is specified by the type attribute.

            forwards

            ActionForwards forwards
            The set of ActionForward objects associated with this mapping.

            include

            java.lang.String include
            The context relative path of the servlet or JSP resource (to be called via RequestDispatcher.include()) that will process this request, rather than instantiating and calling the Action class that is specified by the type attribute.

            input

            java.lang.String input
            The context-relative path of the input form to which control should be returned if a validation error is encountered.

            instance

            Action instance
            The initialized Action instance for this mapping.

            mappings

            ActionMappings mappings
            The ActionMappings collection of which we are a part.

            multipartClass

            java.lang.String multipartClass
            The fully qualified class name of the MultipartRequestHandler implementation class used to process multipart request data for this mapping

            name

            java.lang.String name
            The name of the form bean, if any, associated with this action.

            parameter

            java.lang.String parameter
            General purpose configuration parameter for this mapping.

            path

            java.lang.String path
            The context-relative path of the submitted request, starting with a "/" character, and without the filename extension (if any), that is mapped to this action.

            prefix

            java.lang.String prefix
            The parameter name prefix used to select parameters for this action.

            scope

            java.lang.String scope
            The identifier of the scope ("request" or "session") under which the form bean associated with this mapping, if any, should be created.

            suffix

            java.lang.String suffix
            The parameter name suffix used to select parameters for this action.

            type

            java.lang.String type
            The fully qualified Java class name of the Action implementation class to be used to process requests for this mapping.

            unknown

            boolean unknown
            Should this action be the default for this application?

            validate

            boolean validate
            Should the validate() method of our form bean be called?

            Class org.apache.struts.action.ActionMappingBase implements Serializable

            Class org.apache.struts.action.ActionMappings implements Serializable

            Serialized Fields

            mappings

            FastHashMap mappings
            The collection of ActionMapping instances, keyed by request path.

            unknown

            ActionMapping unknown
            The ActionMapping that should handle unknown request paths, if any.

            Class org.apache.struts.action.ActionServlet implements Serializable

            Serialized Fields

            actions

            FastHashMap actions
            The set of Action instances that have been created and initialized, keyed by the fully qualified Java class name.

            application

            MessageResources application
            The resources object for our application resources (if any).

            config

            java.lang.String config
            The context-relative path to our configuration resource.

            content

            java.lang.String content
            The default content type and character encoding to be set on each response (may be overridden by forwarded-to resources).

            dataSources

            FastHashMap dataSources
            The JDBC data sources that has been configured for this application, if any, keyed by the servlet context attribute under which they are stored.

            debug

            int debug
            The debugging detail level for this servlet.

            defaultLocale

            java.util.Locale defaultLocale
            The default Locale for this server.

            factoryClass

            java.lang.String factoryClass
            The Java class name of the MessageResourcesFactory class for the application message resources bundle.

            formBeanClass

            java.lang.String formBeanClass
            The Java class name of the ActionFormBean implementation class to use.

            formBeans

            ActionFormBeans formBeans
            The global ActionFormBean collection for this controller.

            forwardClass

            java.lang.String forwardClass
            The Java class name of the ActionForward implementation class to use.

            forwards

            ActionForwards forwards
            The global ActionForward collection for this controller.

            internal

            MessageResources internal
            The resources object for our internal resources.

            internalName

            java.lang.String internalName
            The Java base name of our internal resources.

            locale

            boolean locale
            Should we create a java.util.Locale for this user, based on the HTTP headers of the request, if one is not present?

            mappingClass

            java.lang.String mappingClass
            The Java class name of our ActionMapping implementation class.

            mappings

            ActionMappings mappings
            The configured mappings for this web application, keyed by path.

            nocache

            boolean nocache
            Include the no-caching headers in our response?

            registrations

            java.lang.String[] registrations
            The set of public identifiers, and corresponding resource names, for the versions of the configuration file DTDs that we know about. There MUST be an even number of Strings in this list!

            servletMapping

            java.lang.String servletMapping
            The URL pattern to which we are mapped in our web application deployment descriptor.

            servletName

            java.lang.String servletName
            The servlet name under which we are registered in our web application deployment descriptor.

            validate

            boolean validate
            Are we using the new configuration file format?

            validating

            boolean validating
            Should we use a validating XML parser to read the configuration file?

            bufferSize

            int bufferSize
            The size in bytes of the buffer used to read files from a client upload

            maxFileSize

            java.lang.String maxFileSize
            The maximum size allowed for a client upload. A suffix of "K" represents Kilobytes, a suffix of "M" represents "Megabytes", a suffix of "G" represents Gigabytes, and no suffix is taken as bytes.

            multipartClass

            java.lang.String multipartClass
            The MultipartRequestHandler class name used for handling multipart form requests. This is the global default value, the handler can also be set in individual mapping entries

            tempDir

            java.lang.String tempDir
            The directory used to store temporary files for the DiskMultipartRequestHandler multipart implementation

            Class org.apache.struts.action.ForwardingActionForward implements Serializable

            Class org.apache.struts.action.RedirectingActionForward implements Serializable

            Class org.apache.struts.action.RequestActionMapping implements Serializable

            Class org.apache.struts.action.SessionActionMapping implements Serializable

            Class org.apache.struts.action.ValidatingActionForm implements Serializable


            Package org.apache.struts.taglib

            Class org.apache.struts.taglib.BaseAttributeTag implements Serializable

            Serialized Fields

            name

            java.lang.String name
            The name of the attribute being tested.

            scope

            java.lang.String scope
            The scope of the attribute being tested.

            Class org.apache.struts.taglib.BaseFieldTag implements Serializable

            Serialized Fields

            accept

            java.lang.String accept
            Comma-delimited list of content types that a server processing this form will handle correctly. This property is defined only for the file tag, but is implemented here because it affects the rendered HTML of the corresponding <input> tag.

            name

            java.lang.String name
            The name of the bean containing our underlying property.

            type

            java.lang.String type
            The type of input field represented by this tag (text, password, or hidden).

            Class org.apache.struts.taglib.BaseHandlerTag implements Serializable

            Serialized Fields

            accessKey

            java.lang.String accessKey
            Access key character.

            tabIndex

            java.lang.String tabIndex
            Tab index value.

            onClick

            java.lang.String onClick
            Mouse click event.

            onDblClick

            java.lang.String onDblClick
            Mouse double click event.

            onMouseOver

            java.lang.String onMouseOver
            Mouse over component event.

            onMouseOut

            java.lang.String onMouseOut
            Mouse exit component event.

            onMouseMove

            java.lang.String onMouseMove
            Mouse moved over component event.

            onMouseDown

            java.lang.String onMouseDown
            Mouse pressed on component event.

            onMouseUp

            java.lang.String onMouseUp
            Mouse released on component event.

            onKeyDown

            java.lang.String onKeyDown
            Key down in component event.

            onKeyUp

            java.lang.String onKeyUp
            Key released in component event.

            onKeyPress

            java.lang.String onKeyPress
            Key down and up together in component event.

            onSelect

            java.lang.String onSelect
            Text selected in component event.

            onChange

            java.lang.String onChange
            Content changed after component lost focus event.

            onBlur

            java.lang.String onBlur
            Component lost focus event.

            onFocus

            java.lang.String onFocus
            Component has received focus event.

            style

            java.lang.String style
            Style attribute associated with component.

            styleClass

            java.lang.String styleClass
            Named Style class associated with component.

            styleId

            java.lang.String styleId
            Identifier associated with component.

            Class org.apache.struts.taglib.BaseInputTag implements Serializable

            Serialized Fields

            cols

            java.lang.String cols
            The number of character columns for this field, or negative for no limit.

            maxlength

            java.lang.String maxlength
            The maximum number of characters allowed, or negative for no limit.

            property

            java.lang.String property
            The name of the field (and associated property) being processed.

            rows

            java.lang.String rows
            The number of rows for this field, or negative for no limit.

            value

            java.lang.String value
            The value for this field, or null to retrieve the corresponding property from our associated bean.

            Class org.apache.struts.taglib.BaseTag implements Serializable

            Class org.apache.struts.taglib.ButtonTag implements Serializable

            Serialized Fields

            property

            java.lang.String property
            The property name of the generated button.

            value

            java.lang.String value
            The value of the button label.

            Class org.apache.struts.taglib.CancelTag implements Serializable

            Serialized Fields

            property

            java.lang.String property
            The property name of the generated button.

            value

            java.lang.String value
            The value of the button label.

            Class org.apache.struts.taglib.CheckboxTag implements Serializable

            Serialized Fields

            name

            java.lang.String name
            The name of the bean containing our underlying property.

            property

            java.lang.String property
            The property name for this field.

            value

            java.lang.String value
            The server value for this option.

            Class org.apache.struts.taglib.EncodeRedirectURLTag implements Serializable

            Serialized Fields

            url

            java.lang.String url
            The URL to be encoded.

            Class org.apache.struts.taglib.EncodeURLTag implements Serializable

            Serialized Fields

            url

            java.lang.String url
            The URL to be encoded.

            Class org.apache.struts.taglib.EnumerateTag implements Serializable

            Serialized Fields

            collection

            java.lang.Object collection
            The collection over which we will be iterating.

            enumeration

            java.util.Enumeration enumeration
            Enumeration of the elements of this collection.

            id

            java.lang.String id
            The name of the scripting variable to be exposed.

            length

            java.lang.String length
            The length value or attribute name (<=0 means no limit).

            lengthCount

            int lengthCount
            The number of elements we have already rendered.

            lengthValue

            int lengthValue
            The actual length value (calculated in the start tag).

            name

            java.lang.String name
            The name of the collection or owning bean.

            offset

            java.lang.String offset
            The starting offset (zero relative).

            offsetValue

            int offsetValue
            The actual offset value (calculated in the start tag).

            property

            java.lang.String property
            The property name containing the collection.

            Class org.apache.struts.taglib.ErrorsTag implements Serializable

            Serialized Fields

            name

            java.lang.String name
            Name of the request scope attribute containing our error messages, if any.

            Class org.apache.struts.taglib.FileTag implements Serializable

            Class org.apache.struts.taglib.FormTag implements Serializable

            Serialized Fields

            action

            java.lang.String action
            The action URL to which this form should be submitted, if any.

            enctype

            java.lang.String enctype
            The content encoding to be used on a POST submit.

            focus

            java.lang.String focus
            The name of the field to receive focus, if any.

            method

            java.lang.String method
            The request method used when submitting this form.

            name

            java.lang.String name
            The attribute key under which our associated bean is stored.

            onReset

            java.lang.String onReset
            The onReset event script.

            onSubmit

            java.lang.String onSubmit
            The onSubmit event script.

            scope

            java.lang.String scope
            The scope (request or session) under which our associated bean is stored.

            style

            java.lang.String style
            The style attribute associated with this tag.

            styleClass

            java.lang.String styleClass
            The style class associated with this tag.

            styleId

            java.lang.String styleId
            The identifier associated with this tag.

            target

            java.lang.String target
            The window target.

            type

            java.lang.String type
            The Java class name of the bean to be created, if necessary.

            Class org.apache.struts.taglib.ForwardTag implements Serializable

            Serialized Fields

            name

            java.lang.String name
            The logical name of the global ActionForward we will look up

            Class org.apache.struts.taglib.GetPropertyTag implements Serializable

            Serialized Fields

            id

            java.lang.String id
            The name of the scripting variable to be exposed.

            name

            java.lang.String name
            The name of the bean owning the property.

            property

            java.lang.String property
            The property name to be exposed.

            Class org.apache.struts.taglib.HiddenTag implements Serializable

            Class org.apache.struts.taglib.HtmlPropertyTag implements Serializable

            Serialized Fields

            name

            java.lang.String name
            The name of the object instance from which the property is obtained.

            property

            java.lang.String property
            The name of the property to get.

            Class org.apache.struts.taglib.IfAttributeExistsTag implements Serializable

            Class org.apache.struts.taglib.IfAttributeMissingTag implements Serializable

            Class org.apache.struts.taglib.IfParameterEqualsTag implements Serializable

            Serialized Fields

            name

            java.lang.String name
            The name of the parameter being compared.

            value

            java.lang.String value
            The value to compare this parameter to.

            Class org.apache.struts.taglib.IfParameterNotEqualsTag implements Serializable

            Serialized Fields

            name

            java.lang.String name
            The name of the parameter being compared.

            value

            java.lang.String value
            The value to compare this parameter to.

            Class org.apache.struts.taglib.IfParameterNotNullTag implements Serializable

            Serialized Fields

            name

            java.lang.String name
            The name of the parameter being compared.

            Class org.apache.struts.taglib.IfParameterNullTag implements Serializable

            Serialized Fields

            name

            java.lang.String name
            The name of the parameter being compared.

            Class org.apache.struts.taglib.IfPropertyEqualsTag implements Serializable

            Serialized Fields

            property

            java.lang.String property
            The name of the property to get.

            value

            java.lang.String value
            The value to compare to.

            Class org.apache.struts.taglib.IfPropertyNotEqualsTag implements Serializable

            Serialized Fields

            property

            java.lang.String property
            The name of the property to get.

            value

            java.lang.String value
            The value to compare to.

            Class org.apache.struts.taglib.IncludeTag implements Serializable

            Serialized Fields

            name

            java.lang.String name
            The logical name of the global ActionForward we will look up

            Class org.apache.struts.taglib.IterateTag implements Serializable

            Serialized Fields

            collection

            java.lang.Object collection
            The collection over which we will be iterating.

            id

            java.lang.String id
            The name of the scripting variable to be exposed.

            iterator

            java.util.Iterator iterator
            Iterator of the elements of this collection.

            length

            java.lang.String length
            The length value or attribute name (<=0 means no limit).

            lengthCount

            int lengthCount
            The number of elements we have already rendered.

            lengthValue

            int lengthValue
            The actual length value (calculated in the start tag).

            name

            java.lang.String name
            The name of the collection or owning bean.

            offset

            java.lang.String offset
            The starting offset (zero relative).

            offsetValue

            int offsetValue
            The actual offset value (calculated in the start tag).

            property

            java.lang.String property
            The property name containing the collection.

            Class org.apache.struts.taglib.Link1Tag implements Serializable

            Serialized Fields

            forward

            java.lang.String forward
            The logical forward name from which to retrieve the hyperlink URI.

            href

            java.lang.String href
            The hyperlink URI.

            name

            java.lang.String name
            The JSP bean name for query parameters.

            property

            java.lang.String property
            The JSP bean property name for query parameters.

            target

            java.lang.String target
            The window target.

            Class org.apache.struts.taglib.LinkTag implements Serializable

            Serialized Fields

            forward

            java.lang.String forward
            The logical forward name from which to retrieve the hyperlink URI.

            href

            java.lang.String href
            The hyperlink URI.

            name

            java.lang.String name
            The JSP bean name for query parameters.

            property

            java.lang.String property
            The JSP bean property name for query parameters.

            target

            java.lang.String target
            The window target.

            Class org.apache.struts.taglib.MessageTag implements Serializable

            Serialized Fields

            arg0

            java.lang.String arg0
            The first optional argument.

            arg1

            java.lang.String arg1
            The second optional argument.

            arg2

            java.lang.String arg2
            The third optional argument.

            arg3

            java.lang.String arg3
            The fourth optional argument.

            arg4

            java.lang.String arg4
            The fifth optional argument.

            bundle

            java.lang.String bundle
            The servlet context attribute key for our resources.

            key

            java.lang.String key
            The message key of the message to be retrieved.

            localeKey

            java.lang.String localeKey
            The session scope key under which our Locale is stored.

            Class org.apache.struts.taglib.MultiboxTag implements Serializable

            Serialized Fields

            name

            java.lang.String name
            The name of the bean containing our underlying property.

            property

            java.lang.String property
            The property name for this field.

            value

            java.lang.String value
            The value which will mark this checkbox as "checked" if present in the array returned by our property getter.

            Class org.apache.struts.taglib.Options1Tag implements Serializable

            Serialized Fields

            labelName

            java.lang.String labelName
            The name of the bean containing the labels collection.

            labelProperty

            java.lang.String labelProperty
            The bean property containing the labels collection.

            name

            java.lang.String name
            The name of the bean containing the values collection.

            property

            java.lang.String property
            The name of the property to use to build the values collection.

            Class org.apache.struts.taglib.OptionsTag implements Serializable

            Serialized Fields

            labelName

            java.lang.String labelName
            The name of the bean containing the labels collection.

            labelProperty

            java.lang.String labelProperty
            The bean property containing the labels collection.

            name

            java.lang.String name
            The name of the bean containing the values collection.

            property

            java.lang.String property
            The name of the property to use to build the values collection.

            Class org.apache.struts.taglib.OptionTag implements Serializable

            Serialized Fields

            value

            java.lang.String value
            The server value for this option.

            Class org.apache.struts.taglib.ParameterTag implements Serializable

            Serialized Fields

            name

            java.lang.String name
            The name of the desired parameter.

            Class org.apache.struts.taglib.PasswordTag implements Serializable

            Class org.apache.struts.taglib.PropertyTag implements Serializable

            Serialized Fields

            name

            java.lang.String name
            The name of the bean containing our underlying property.

            Class org.apache.struts.taglib.RadioTag implements Serializable

            Serialized Fields

            name

            java.lang.String name
            The name of the bean containing our underlying property.

            property

            java.lang.String property
            The property name for this field.

            value

            java.lang.String value
            The server value for this option.

            Class org.apache.struts.taglib.RedirectTag implements Serializable

            Serialized Fields

            href

            java.lang.String href
            The hyperlink URI.

            Class org.apache.struts.taglib.ResetTag implements Serializable

            Serialized Fields

            name

            java.lang.String name
            The name of the generated input field.

            value

            java.lang.String value
            The value of the button label.

            Class org.apache.struts.taglib.SelectTag implements Serializable

            Serialized Fields

            match

            java.lang.String match
            The actual value we will match against, calculated in doStartTag().

            multiple

            java.lang.String multiple
            Should multiple selections be allowed? Any non-null value will trigger rendering this.

            name

            java.lang.String name
            The name of the bean containing our underlying property.

            property

            java.lang.String property
            The property name we are associated with.

            size

            java.lang.String size
            How many available options should be displayed when this element is rendered?

            value

            java.lang.String value
            The value to compare with for marking an option selected.

            Class org.apache.struts.taglib.SubmitTag implements Serializable

            Serialized Fields

            property

            java.lang.String property
            The name of the generated input field.

            value

            java.lang.String value
            The value of the button label.

            Class org.apache.struts.taglib.TextareaTag implements Serializable

            Serialized Fields

            name

            java.lang.String name
            The name of the bean containing our underlying property.

            Class org.apache.struts.taglib.TextTag implements Serializable


            Package org.apache.struts.taglib.bean

            Class org.apache.struts.taglib.bean.CookieTag implements Serializable

            Serialized Fields

            id

            java.lang.String id
            The name of the scripting variable that will be exposed as a page scope attribute.

            multiple

            java.lang.String multiple
            Return an array of Cookies if multiple is non-null.

            name

            java.lang.String name
            The name of the cookie whose value is to be exposed.

            value

            java.lang.String value
            The default value to return if no cookie of the specified name is found.

            Class org.apache.struts.taglib.bean.DefineTag implements Serializable

            Serialized Fields

            id

            java.lang.String id
            The name of the scripting variable that will be exposed as a page scope attribute.

            name

            java.lang.String name
            The name of the bean owning the property to be exposed.

            property

            java.lang.String property
            The name of the property to be retrieved.

            scope

            java.lang.String scope
            The scope within which to search for the specified bean.

            toScope

            java.lang.String toScope
            The scope within which the newly defined bean will be creatd.

            type

            java.lang.String type
            The fully qualified Java class name of the value to be exposed.

            value

            java.lang.String value
            The (String) value to which the defined bean will be set.

            Class org.apache.struts.taglib.bean.HeaderTag implements Serializable

            Serialized Fields

            id

            java.lang.String id
            The name of the scripting variable that will be exposed as a page scope attribute.

            multiple

            java.lang.String multiple
            Return an array of header values if multiple is non-null.

            name

            java.lang.String name
            The name of the header whose value is to be exposed.

            value

            java.lang.String value
            The default value to return if no header of the specified name is found.

            Class org.apache.struts.taglib.bean.IncludeTag implements Serializable

            Serialized Fields

            anchor

            java.lang.String anchor
            The anchor to be added to the end of the generated hyperlink.

            forward

            java.lang.String forward
            The name of the global ActionForward that contains a path to our requested resource.

            href

            java.lang.String href
            The absolute URL to the resource to be included.

            id

            java.lang.String id
            The name of the scripting variable that will be exposed as a page scope attribute.

            page

            java.lang.String page
            The context-relative URI of the page or servlet to be included.

            transaction

            boolean transaction
            Include transaction token (if any) in the hyperlink?

            Class org.apache.struts.taglib.bean.MessageTag implements Serializable

            Serialized Fields

            arg0

            java.lang.String arg0
            The first optional argument.

            arg1

            java.lang.String arg1
            The second optional argument.

            arg2

            java.lang.String arg2
            The third optional argument.

            arg3

            java.lang.String arg3
            The fourth optional argument.

            arg4

            java.lang.String arg4
            The fifth optional argument.

            bundle

            java.lang.String bundle
            The servlet context attribute key for our resources.

            key

            java.lang.String key
            The message key of the message to be retrieved.

            localeKey

            java.lang.String localeKey
            The session scope key under which our Locale is stored.

            Class org.apache.struts.taglib.bean.PageTag implements Serializable

            Serialized Fields

            id

            java.lang.String id
            The name of the scripting variable that will be exposed as a page scope attribute.

            property

            java.lang.String property
            The name of the page context property to be retrieved.

            Class org.apache.struts.taglib.bean.ParameterTag implements Serializable

            Serialized Fields

            id

            java.lang.String id
            The name of the scripting variable that will be exposed as a page scope attribute.

            multiple

            java.lang.String multiple
            Return an array of parameter values if multiple is non-null.

            name

            java.lang.String name
            The name of the parameter whose value is to be exposed.

            value

            java.lang.String value
            The default value to return if no parameter of the specified name is found.

            Class org.apache.struts.taglib.bean.ResourceTag implements Serializable

            Serialized Fields

            id

            java.lang.String id
            The name of the scripting variable that will be exposed as a page scope attribute.

            input

            java.lang.String input
            Return an InputStream to the specified resource if this is non-null.

            name

            java.lang.String name
            The name of the resource whose contents are to be exposed.

            Class org.apache.struts.taglib.bean.SizeTag implements Serializable

            Serialized Fields

            collection

            java.lang.Object collection
            The actual collection to be counted.

            id

            java.lang.String id
            The name of the scripting variable that will be exposed as a page scope attribute.

            name

            java.lang.String name
            The name of the bean owning the property to be counted.

            property

            java.lang.String property
            The name of the property to be retrieved.

            scope

            java.lang.String scope
            The scope within which to search for the specified bean.

            Class org.apache.struts.taglib.bean.StrutsTag implements Serializable

            Serialized Fields

            id

            java.lang.String id
            The name of the scripting variable that will be exposed as a page scope attribute.

            formBean

            java.lang.String formBean
            The name of the ActionFormBean object to be exposed.

            forward

            java.lang.String forward
            The name of the ActionForward object to be exposed.

            mapping

            java.lang.String mapping
            The name of the ActionMapping object to be exposed.

            Class org.apache.struts.taglib.bean.WriteTag implements Serializable

            Serialized Fields

            filter

            boolean filter
            Filter the rendered output for characters that are sensitive in HTML?

            ignore

            boolean ignore
            Should we ignore missing beans and simply output nothing?

            name

            java.lang.String name
            Name of the bean that contains the data we will be rendering.

            property

            java.lang.String property
            Name of the property to be accessed on the specified bean.

            scope

            java.lang.String scope
            The scope to be searched to retrieve the specified bean.


            Package org.apache.struts.taglib.html

            Class org.apache.struts.taglib.html.BaseFieldTag implements Serializable

            Serialized Fields

            accept

            java.lang.String accept
            Comma-delimited list of content types that a server processing this form will handle correctly. This property is defined only for the file tag, but is implemented here because it affects the rendered HTML of the corresponding <input> tag.

            name

            java.lang.String name
            The name of the bean containing our underlying property.

            redisplay

            boolean redisplay
            The "redisplay contents" flag (used only on password).

            type

            java.lang.String type
            The type of input field represented by this tag (text, password, or hidden).

            Class org.apache.struts.taglib.html.BaseHandlerTag implements Serializable

            Serialized Fields

            accesskey

            java.lang.String accesskey
            Access key character.

            tabindex

            java.lang.String tabindex
            Tab index value.

            onclick

            java.lang.String onclick
            Mouse click event.

            ondblclick

            java.lang.String ondblclick
            Mouse double click event.

            onmouseover

            java.lang.String onmouseover
            Mouse over component event.

            onmouseout

            java.lang.String onmouseout
            Mouse exit component event.

            onmousemove

            java.lang.String onmousemove
            Mouse moved over component event.

            onmousedown

            java.lang.String onmousedown
            Mouse pressed on component event.

            onmouseup

            java.lang.String onmouseup
            Mouse released on component event.

            onkeydown

            java.lang.String onkeydown
            Key down in component event.

            onkeyup

            java.lang.String onkeyup
            Key released in component event.

            onkeypress

            java.lang.String onkeypress
            Key down and up together in component event.

            onselect

            java.lang.String onselect
            Text selected in component event.

            onchange

            java.lang.String onchange
            Content changed after component lost focus event.

            onblur

            java.lang.String onblur
            Component lost focus event.

            onfocus

            java.lang.String onfocus
            Component has received focus event.

            disabled

            boolean disabled
            Component is disabled.

            readonly

            boolean readonly
            Component is readonly.

            style

            java.lang.String style
            Style attribute associated with component.

            styleClass

            java.lang.String styleClass
            Named Style class associated with component.

            styleId

            java.lang.String styleId
            Identifier associated with component.

            title

            java.lang.String title
            The advisory title of this element.

            Class org.apache.struts.taglib.html.BaseInputTag implements Serializable

            Serialized Fields

            cols

            java.lang.String cols
            The number of character columns for this field, or negative for no limit.

            maxlength

            java.lang.String maxlength
            The maximum number of characters allowed, or negative for no limit.

            property

            java.lang.String property
            The name of the field (and associated property) being processed.

            rows

            java.lang.String rows
            The number of rows for this field, or negative for no limit.

            value

            java.lang.String value
            The value for this field, or null to retrieve the corresponding property from our associated bean.

            Class org.apache.struts.taglib.html.BaseTag implements Serializable

            Serialized Fields

            target

            java.lang.String target
            The target window for this base reference.

            Class org.apache.struts.taglib.html.ButtonTag implements Serializable

            Serialized Fields

            property

            java.lang.String property
            The property name of the generated button.

            text

            java.lang.String text
            The body content of this tag (if any).

            value

            java.lang.String value
            The value of the button label.

            Class org.apache.struts.taglib.html.CancelTag implements Serializable

            Serialized Fields

            property

            java.lang.String property
            The property name of the generated button.

            text

            java.lang.String text
            The body content of this tag (if any).

            value

            java.lang.String value
            The value of the button label.

            Class org.apache.struts.taglib.html.CheckboxTag implements Serializable

            Serialized Fields

            name

            java.lang.String name
            The name of the bean containing our underlying property.

            property

            java.lang.String property
            The property name for this field.

            text

            java.lang.String text
            The body content of this tag (if any).

            value

            java.lang.String value
            The server value for this option.

            Class org.apache.struts.taglib.html.ErrorsTag implements Serializable

            Serialized Fields

            bundle

            java.lang.String bundle
            The servlet context attribute key for our resources.

            locale

            java.lang.String locale
            The session attribute key for our locale.

            name

            java.lang.String name
            The request attribute key for our error messages (if any).

            property

            java.lang.String property
            The name of the property for which error messages should be returned, or null to return all errors.

            Class org.apache.struts.taglib.html.FileTag implements Serializable

            Class org.apache.struts.taglib.html.FormTag implements Serializable

            Serialized Fields

            action

            java.lang.String action
            The action URL to which this form should be submitted, if any.

            enctype

            java.lang.String enctype
            The content encoding to be used on a POST submit.

            focus

            java.lang.String focus
            The name of the field to receive focus, if any.

            method

            java.lang.String method
            The request method used when submitting this form.

            name

            java.lang.String name
            The attribute key under which our associated bean is stored.

            onreset

            java.lang.String onreset
            The onReset event script.

            onsubmit

            java.lang.String onsubmit
            The onSubmit event script.

            scope

            java.lang.String scope
            The scope (request or session) under which our associated bean is stored.

            servlet

            ActionServlet servlet
            The ActionServlet instance we are associated with (so that we can initialize the servlet property on any form bean that we create).

            style

            java.lang.String style
            The style attribute associated with this tag.

            styleClass

            java.lang.String styleClass
            The style class associated with this tag.

            styleId

            java.lang.String styleId
            The identifier associated with this tag.

            target

            java.lang.String target
            The window target.

            type

            java.lang.String type
            The Java class name of the bean to be created, if necessary.

            Class org.apache.struts.taglib.html.HiddenTag implements Serializable

            Class org.apache.struts.taglib.html.HtmlTag implements Serializable

            Serialized Fields

            locale

            boolean locale
            Should we set the current Locale for this user if needed?

            xhtml

            boolean xhtml
            Are we rendering an xhtml page?

            Class org.apache.struts.taglib.html.ImageTag implements Serializable

            Serialized Fields

            alt

            java.lang.String alt
            The alternate text for this image.

            altKey

            java.lang.String altKey
            The message resources key for the alternate text for this image.

            border

            java.lang.String border
            The border size around the image.

            bundle

            java.lang.String bundle
            The servlet context attribute key for our resources.

            locale

            java.lang.String locale
            The session attribute key for our locale.

            page

            java.lang.String page
            The context-relative URI of the image.

            pageKey

            java.lang.String pageKey
            The message resources key of the context-relative URI of the image.

            property

            java.lang.String property
            The name attribute for the image button.

            src

            java.lang.String src
            The URL of this image.

            srcKey

            java.lang.String srcKey
            The message resources key for the URL of this image.

            Class org.apache.struts.taglib.html.ImgTag implements Serializable

            Serialized Fields

            align

            java.lang.String align
            The property to specify where to align the image.

            alt

            java.lang.String alt
            The alternate text to display for the image. This is used for text based browsers and/or as a "tool-tip" for the image.

            altKey

            java.lang.String altKey
            The message lookup key used to look up internationalized messages.

            border

            java.lang.String border
            The border size around the image.

            bundle

            java.lang.String bundle
            The name of the servlet context attribute containing our message resources.

            height

            java.lang.String height
            The image height.

            hspace

            java.lang.String hspace
            The horizontal spacing around the image.

            imageName

            java.lang.String imageName
            The image name for named images.

            ismap

            java.lang.String ismap
            Server-side image map declaration.

            locale

            java.lang.String locale
            The name of the attribute containing the Locale to be used for looking up internationalized messages.

            lowsrc

            java.lang.String lowsrc
            The low resolution image source URI.

            name

            java.lang.String name
            The JSP bean name for query parameters.

            page

            java.lang.String page
            The context-relative path, starting with a slash character, of the image to be displayed by this rendered tag.

            pageKey

            java.lang.String pageKey
            The message resources key under which we should look up the page attribute for this generated tag, if any.

            paramId

            java.lang.String paramId
            In situations where an image is dynamically generated (such as to create a chart graph), this specifies the single-parameter request parameter name to generate.

            paramName

            java.lang.String paramName
            The single-parameter JSP bean name.

            paramProperty

            java.lang.String paramProperty
            The single-parameter JSP bean property.

            paramScope

            java.lang.String paramScope
            The single-parameter JSP bean scope.

            property

            java.lang.String property
            The JSP bean property name for query parameters.

            scope

            java.lang.String scope
            The scope of the bean specified by the name property, if any.

            src

            java.lang.String src
            The image source URI.

            srcKey

            java.lang.String srcKey
            The message resources key under which we should look up the src attribute for this generated tag, if any.

            usemap

            java.lang.String usemap
            Client-side image map declaration.

            vspace

            java.lang.String vspace
            The vertical spacing around the image.

            width

            java.lang.String width
            The image width.

            Class org.apache.struts.taglib.html.LinkTag implements Serializable

            Serialized Fields

            text

            java.lang.String text
            The body content of this tag (if any).

            anchor

            java.lang.String anchor
            The anchor to be added to the end of the generated hyperlink.

            forward

            java.lang.String forward
            The logical forward name from which to retrieve the hyperlink URI.

            href

            java.lang.String href
            The hyperlink URI.

            linkName

            java.lang.String linkName
            The link name for named links.

            name

            java.lang.String name
            The JSP bean name for query parameters.

            page

            java.lang.String page
            The context-relative page URL (beginning with a slash) to which this hyperlink will be rendered.

            paramId

            java.lang.String paramId
            The single-parameter request parameter name to generate.

            paramName

            java.lang.String paramName
            The single-parameter JSP bean name.

            paramProperty

            java.lang.String paramProperty
            The single-parameter JSP bean property.

            paramScope

            java.lang.String paramScope
            The single-parameter JSP bean scope.

            property

            java.lang.String property
            The JSP bean property name for query parameters.

            scope

            java.lang.String scope
            The scope of the bean specified by the name property, if any.

            target

            java.lang.String target
            The window target.

            transaction

            boolean transaction
            Include transaction token (if any) in the hyperlink?

            Class org.apache.struts.taglib.html.MultiboxTag implements Serializable

            Serialized Fields

            constant

            java.lang.String constant
            The constant String value to be returned when this checkbox is selected and the form is submitted.

            name

            java.lang.String name
            The name of the bean containing our underlying property.

            property

            java.lang.String property
            The property name for this field.

            value

            java.lang.String value
            The value which will mark this checkbox as "checked" if present in the array returned by our property getter.

            Class org.apache.struts.taglib.html.OptionsTag implements Serializable

            Serialized Fields

            collection

            java.lang.String collection
            The name of the collection containing beans that have properties to provide both the values and the labels (identified by the property and labelProperty attributes).

            labelName

            java.lang.String labelName
            The name of the bean containing the labels collection.

            labelProperty

            java.lang.String labelProperty
            The bean property containing the labels collection.

            name

            java.lang.String name
            The name of the bean containing the values collection.

            property

            java.lang.String property
            The name of the property to use to build the values collection.

            Class org.apache.struts.taglib.html.OptionTag implements Serializable

            Serialized Fields

            text

            java.lang.String text
            The message text to be displayed to the user for this tag (if any)

            bundle

            java.lang.String bundle
            The name of the servlet context attribute containing our message resources.

            disabled

            boolean disabled
            Is this option disabled?

            key

            java.lang.String key
            The key used to look up the text displayed to the user for this option, if any.

            locale

            java.lang.String locale
            The name of the attribute containing the Locale to be used for looking up internationalized messages.

            value

            java.lang.String value
            The server value for this option, also used to match against the current property value to determine whether this option should be marked as selected.

            Class org.apache.struts.taglib.html.PasswordTag implements Serializable

            Class org.apache.struts.taglib.html.RadioTag implements Serializable

            Serialized Fields

            name

            java.lang.String name
            The name of the bean containing our underlying property.

            property

            java.lang.String property
            The property name for this field.

            text

            java.lang.String text
            The body content of this tag (if any).

            value

            java.lang.String value
            The server value for this option.

            Class org.apache.struts.taglib.html.ResetTag implements Serializable

            Serialized Fields

            name

            java.lang.String name
            The name of the generated input field.

            text

            java.lang.String text
            The body content of this tag (if any).

            value

            java.lang.String value
            The value of the button label.

            Class org.apache.struts.taglib.html.RewriteTag implements Serializable

            Class org.apache.struts.taglib.html.SelectTag implements Serializable

            Serialized Fields

            match

            java.lang.String[] match
            The actual values we will match against, calculated in doStartTag().

            multiple

            java.lang.String multiple
            Should multiple selections be allowed? Any non-null value will trigger rendering this.

            name

            java.lang.String name
            The name of the bean containing our underlying property.

            property

            java.lang.String property
            The property name we are associated with.

            saveBody

            java.lang.String saveBody
            The saved body content of this tag.

            size

            java.lang.String size
            How many available options should be displayed when this element is rendered?

            value

            java.lang.String value
            The value to compare with for marking an option selected.

            Class org.apache.struts.taglib.html.SubmitTag implements Serializable

            Serialized Fields

            property

            java.lang.String property
            The name of the generated input field.

            text

            java.lang.String text
            The body content of this tag (if any).

            value

            java.lang.String value
            The value of the button label.

            Class org.apache.struts.taglib.html.TextareaTag implements Serializable

            Serialized Fields

            name

            java.lang.String name
            The name of the bean containing our underlying property.

            Class org.apache.struts.taglib.html.TextTag implements Serializable


            Package org.apache.struts.taglib.logic

            Class org.apache.struts.taglib.logic.CompareTagBase implements Serializable

            Serialized Fields

            value

            java.lang.String value
            The value to which the variable specified by other attributes of this tag will be compared.

            Class org.apache.struts.taglib.logic.ConditionalTagBase implements Serializable

            Serialized Fields

            cookie

            java.lang.String cookie
            The name of the cookie to be used as a variable.

            header

            java.lang.String header
            The name of the HTTP request header to be used as a variable.

            name

            java.lang.String name
            The name of the JSP bean to be used as a variable (if property is not specified), or whose property is to be accessed (if property is specified).

            parameter

            java.lang.String parameter
            The name of the HTTP request parameter to be used as a variable.

            property

            java.lang.String property
            The name of the bean property to be used as a variable.

            role

            java.lang.String role
            The name of the security role to be checked for.

            scope

            java.lang.String scope
            The scope to search for the bean named by the name property, or "any scope" if null.

            user

            java.lang.String user
            The user principal name to be checked for.

            Class org.apache.struts.taglib.logic.EqualTag implements Serializable

            Class org.apache.struts.taglib.logic.ForwardTag implements Serializable

            Serialized Fields

            name

            java.lang.String name
            The logical name of the ActionForward entry to be looked up.

            Class org.apache.struts.taglib.logic.GreaterEqualTag implements Serializable

            Class org.apache.struts.taglib.logic.GreaterThanTag implements Serializable

            Class org.apache.struts.taglib.logic.IterateTag implements Serializable

            Serialized Fields

            iterator

            java.util.Iterator iterator
            Iterator of the elements of this collection, while we are actually running.

            lengthCount

            int lengthCount
            The number of elements we have already rendered.

            lengthValue

            int lengthValue
            The actual length value (calculated in the start tag).

            offsetValue

            int offsetValue
            The actual offset value (calculated in the start tag).

            started

            boolean started
            Has this tag instance been started?

            collection

            java.lang.Object collection
            The collection over which we will be iterating.

            id

            java.lang.String id
            The name of the scripting variable to be exposed.

            indexId

            java.lang.String indexId
            The name of the scripting variable to be exposed as the current index.

            length

            java.lang.String length
            The length value or attribute name (<=0 means no limit).

            name

            java.lang.String name
            The name of the collection or owning bean.

            offset

            java.lang.String offset
            The starting offset (zero relative).

            property

            java.lang.String property
            The property name containing the collection.

            scope

            java.lang.String scope
            The scope of the bean specified by the name property, if any.

            type

            java.lang.String type
            The Java class of each exposed element of the collection.

            Class org.apache.struts.taglib.logic.LessEqualTag implements Serializable

            Class org.apache.struts.taglib.logic.LessThanTag implements Serializable

            Class org.apache.struts.taglib.logic.MatchTag implements Serializable

            Serialized Fields

            location

            java.lang.String location
            The location where the match must exist (start or end), or null for anywhere.

            value

            java.lang.String value
            The value to which the variable specified by other attributes of this tag will be matched.

            Class org.apache.struts.taglib.logic.NotEqualTag implements Serializable

            Class org.apache.struts.taglib.logic.NotMatchTag implements Serializable

            Class org.apache.struts.taglib.logic.NotPresentTag implements Serializable

            Class org.apache.struts.taglib.logic.PresentTag implements Serializable

            Class org.apache.struts.taglib.logic.RedirectTag implements Serializable

            Serialized Fields

            anchor

            java.lang.String anchor
            The anchor to be added to the end of the generated hyperlink.

            forward

            java.lang.String forward
            The logical forward name from which to retrieve the redirect URI.

            href

            java.lang.String href
            The redirect URI.

            name

            java.lang.String name
            The JSP bean name for query parameters.

            page

            java.lang.String page
            The context-relative page URL (beginning with a slash) to which this redirect will be rendered.

            paramId

            java.lang.String paramId
            The single-parameter request parameter name to generate.

            paramName

            java.lang.String paramName
            The single-parameter JSP bean name.

            paramProperty

            java.lang.String paramProperty
            The single-parameter JSP bean property.

            paramScope

            java.lang.String paramScope
            The single-parameter JSP bean scope.

            property

            java.lang.String property
            The JSP bean property name for query parameters.

            scope

            java.lang.String scope
            The scope of the bean specified by the name property, if any.

            transaction

            boolean transaction
            Include our transaction control token?


            Package org.apache.struts.taglib.template

            Class org.apache.struts.taglib.template.GetTag implements Serializable

            Serialized Fields

            flush

            boolean flush
            Should we flush before including this text?

            name

            java.lang.String name
            The name of the content that this tag includes (or prints).

            role

            java.lang.String role
            The role that the user must be in to retrieve content.

            Class org.apache.struts.taglib.template.InsertTag implements Serializable

            Serialized Fields

            map

            ContentMap map
            Each insert tag has a map of content.

            template

            java.lang.String template
            The URI of the template.

            Class org.apache.struts.taglib.template.PutTag implements Serializable

            Serialized Fields

            name

            java.lang.String name
            The content's name.

            role

            java.lang.String role
            The role that the user must be in to store content.

            content

            java.lang.String content
            The content's URI (or text).

            direct

            java.lang.String direct
            Determines whether content is included (false) or printed (true). Content is included (false) by default.


            Package org.apache.struts.taglib.template.util

            Class org.apache.struts.taglib.template.util.Content implements Serializable

            Serialized Fields

            content

            java.lang.String content
            Templates regard this as content to be either included or printed directly.
            This is a blank final that is set at construction.

            direct

            java.lang.String direct
            Represents a boolean; if true, content is included, otherwise content is printed.
            This is a blank final that is set at construction.
            This is a string instead of a boolean as a convenience for the tags, whose corresponding attribute is a string.

            Class org.apache.struts.taglib.template.util.ContentMap implements Serializable

            Serialized Fields

            map

            java.util.HashMap map
            The map.


            Package org.apache.struts.upload

            Class org.apache.struts.upload.ContentLengthExceededException implements Serializable

            Serialized Fields

            message

            java.lang.String message

            Class org.apache.struts.upload.MaxLengthExceededException implements Serializable

            Serialized Fields

            message

            java.lang.String message


            Package org.apache.struts.util

            Class org.apache.struts.util.ArrayStack implements Serializable

            Serialized Fields

            list

            java.util.ArrayList list
            The underlying collection class.

            Class org.apache.struts.util.FastArrayList implements Serializable

            Serialized Fields

            list

            java.util.ArrayList list
            Deprecated. 
            The underlying list we are managing.

            fast

            boolean fast
            Deprecated. 
            Are we operating in "fast" mode?

            Class org.apache.struts.util.FastHashMap implements Serializable

            Serialized Fields

            map

            java.util.HashMap map
            Deprecated. 
            The underlying map we are managing.

            fast

            boolean fast
            Deprecated. 
            Are we operating in "fast" mode?

            Class org.apache.struts.util.FastTreeMap implements Serializable

            Serialized Fields

            map

            java.util.TreeMap map
            Deprecated. 
            The underlying map we are managing.

            fast

            boolean fast
            Deprecated. 
            Are we operating in "fast" mode?

            Class org.apache.struts.util.MessageResources implements Serializable

            Serialized Fields

            config

            java.lang.String config
            The configuration parameter used to initialize this MessageResources.

            defaultLocale

            java.util.Locale defaultLocale
            The default Locale for our environment.

            factory

            MessageResourcesFactory factory
            The MessageResourcesFactory that created this instance.

            formats

            java.util.HashMap formats
            The set of previously created MessageFormat objects, keyed by the key computed in messageKey().

            returnNull

            boolean returnNull
            Should we return null instead of an error message string if an unknown Locale or key is requested?

            Class org.apache.struts.util.MessageResourcesFactory implements Serializable

            Serialized Fields

            returnNull

            boolean returnNull
            The "return null" property value to which newly created MessageResourcess should be initialized.

            Class org.apache.struts.util.PropertyMessageResources implements Serializable

            Serialized Fields

            locales

            java.util.HashMap locales
            The set of locale keys for which we have already loaded messages, keyed by the value calculated in localeKey().

            messages

            java.util.HashMap messages
            The cache of messages we have accumulated over time, keyed by the value calculated in messageKey().

            Class org.apache.struts.util.PropertyMessageResourcesFactory implements Serializable



            Copyright © 2000-2001 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.0/stylesheet.css0000644000175000017500000000236510404045240022677 0ustar arnaudarnaud00000000000000/* Javadoc style sheet */ /* Define colors, fonts and other style attributes here to override the defaults */ /* Page background color */ body { background-color: #FFFFFF } /* Table colors */ .TableHeadingColor { background: #CCCCFF } /* Dark mauve */ .TableSubHeadingColor { background: #EEEEFF } /* Light mauve */ .TableRowColor { background: #FFFFFF } /* White */ /* Font used in left-hand frame lists */ .FrameTitleFont { font-size: normal; font-family: normal } .FrameHeadingFont { font-size: normal; font-family: normal } .FrameItemFont { font-size: normal; font-family: normal } /* Example of smaller, sans-serif font in frames */ /* .FrameItemFont { font-size: 10pt; font-family: Helvetica, Arial, sans-serif } */ /* Navigation bar fonts and colors */ .NavBarCell1 { background-color:#EEEEFF;}/* Light mauve */ .NavBarCell1Rev { background-color:#00008B;}/* Dark Blue */ .NavBarFont1 { font-family: Arial, Helvetica, sans-serif; color:#000000;} .NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;} .NavBarCell2 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;} .NavBarCell3 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;} libstruts1.2-java-1.2.9/legacy/api-1.1/0000755000175000017500000000000010423130301017761 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/0000755000175000017500000000000010404045172020562 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/0000755000175000017500000000000010404045172022003 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/0000755000175000017500000000000010423130300023334 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/0000755000175000017500000000000010423130300024611 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/class-use/0000755000175000017500000000000010423130300026510 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/class-use/Action.html0000644000175000017500000004452610404045222030635 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.action.Action (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.action.Action

            Packages that use Action
            org.apache.struts.action The action package is the core of the struts framework, providing the "Controller" aspect of a MVC model. 
            org.apache.struts.actions The actions package provides special adapters between the incoming HTTP request and the corresponding business logic. 
            org.apache.struts.tiles
            The Tiles taglib and framework allows building web pages by assembling reusable pieces of pages, called Tiles. 
            org.apache.struts.tiles.actions   
             

            Uses of Action in org.apache.struts.action
             

            Methods in org.apache.struts.action that return Action
            protected  Action RequestProcessor.processActionCreate(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, ActionMapping mapping)
                      Return an Action instance that will be used to process the current request, creating a new one if necessary.
             

            Methods in org.apache.struts.action with parameters of type Action
            protected  ActionForward RequestProcessor.processActionPerform(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Action action, ActionForm form, ActionMapping mapping)
                      Ask the specified Action instance to handle this request.
             

            Uses of Action in org.apache.struts.actions
             

            Subclasses of Action in org.apache.struts.actions
             class DispatchAction
                      An abstract Action that dispatches to a public method that is named by the request parameter whose name is specified by the parameter property of the corresponding ActionMapping.
             class ForwardAction
                      An Action that forwards to the context-relative URI specified by the parameter property of our associated ActionMapping.
             class IncludeAction
                      An Action that includes the context-relative URI specified by the parameter property of our associated ActionMapping.
             class LookupDispatchAction
                       An abstract Action that dispatches to the subclass mapped execute method.
             class SwitchAction
                      A standard Action that switches to a new module and then forwards control to a URI (specified in a number of possible ways) within the new module.
             

            Uses of Action in org.apache.struts.tiles
             

            Fields in org.apache.struts.tiles declared as Action
            private  Action ActionController.action
                      Struts action wrapped.
             

            Constructors in org.apache.struts.tiles with parameters of type Action
            ActionController(Action action)
                      Constructor.
             

            Uses of Action in org.apache.struts.tiles.actions
             

            Subclasses of Action in org.apache.struts.tiles.actions
             class DefinitionDispatcherAction
                      An Action that dispatches to a Tiles Definition that is named by the request parameter whose name is specified by the parameter property of the corresponding ActionMapping.
             class NoOpAction
                      Deprecated. Use o.a.s.a.ForwardAction instead with the parameter attribute: <action path="aPath" type="org.apache.struts.actions.ForwardAction" parameter="tiles.def.name" />
             class ReloadDefinitionsAction
                      A standard Action that calls the reload() method of our controller servlet to reload its configuration information from the configuration files (which have presumably been updated) dynamically.
             class TilesAction
                      Base class for Tiles Actions.
             class ViewDefinitionsAction
                      An Action that writes the definitions of the Tiles factory.
             



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/class-use/ActionError.html0000644000175000017500000003506410404045250031645 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.action.ActionError (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.action.ActionError

            Packages that use ActionError
            org.apache.struts.action The action package is the core of the struts framework, providing the "Controller" aspect of a MVC model. 
            org.apache.struts.util The Utilities package provides a variety of families of classes, to solve problems that are commonly encountered in building web applications. 
            org.apache.struts.validator The validator package provides a series of classes to validate ActionForm type of input. 
             

            Uses of ActionError in org.apache.struts.action
             

            Methods in org.apache.struts.action that return ActionError
             ActionError ActionException.getError()
                      Deprecated. Returns an instance of an ActionError configured for this exception.
             

            Methods in org.apache.struts.action with parameters of type ActionError
            protected  void ExceptionHandler.storeException(javax.servlet.http.HttpServletRequest request, java.lang.String property, ActionError error, ActionForward forward, java.lang.String scope)
                      Default implementation for handling an ActionError generated from an Exception during Action delegation.
             void ActionErrors.add(java.lang.String property, ActionError error)
                      Add an error message to the set of errors for the specified property.
             

            Uses of ActionError in org.apache.struts.util
             

            Fields in org.apache.struts.util declared as ActionError
            protected  ActionError ModuleException.error
                       
             

            Methods in org.apache.struts.util that return ActionError
            static ActionError StrutsValidatorUtil.getActionError(javax.servlet.http.HttpServletRequest request, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field)
                      Deprecated. As of Struts 1.1, replaced by Resources.getActionError(HttpServletRequest, ValidatorAction, Field)
             ActionError ModuleException.getError()
                      Returns the error associated with the exception.
             

            Uses of ActionError in org.apache.struts.validator
             

            Methods in org.apache.struts.validator that return ActionError
            static ActionError Resources.getActionError(javax.servlet.http.HttpServletRequest request, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field)
                      Gets the ActionError based on the ValidatorAction message and the Field's arg objects.
             



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/class-use/ActionErrors.html0000644000175000017500000016431310404045220032025 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.action.ActionErrors (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.action.ActionErrors

            Packages that use ActionErrors
            org.apache.struts.action The action package is the core of the struts framework, providing the "Controller" aspect of a MVC model. 
            org.apache.struts.config The "config" package contains configuration objects that correspond to elements that may be specified in the struts-config.xml module configuration file. 
            org.apache.struts.util The Utilities package provides a variety of families of classes, to solve problems that are commonly encountered in building web applications. 
            org.apache.struts.validator The validator package provides a series of classes to validate ActionForm type of input. 
             

            Uses of ActionErrors in org.apache.struts.action
             

            Methods in org.apache.struts.action that return ActionErrors
             ActionErrors ActionForm.validate(ActionMapping mapping, javax.servlet.ServletRequest request)
                      Validate the properties that have been set for this non-HTTP request, and return an ActionErrors object that encapsulates any validation errors that have been found.
             ActionErrors ActionForm.validate(ActionMapping mapping, javax.servlet.http.HttpServletRequest request)
                      Validate the properties that have been set for this HTTP request, and return an ActionErrors object that encapsulates any validation errors that have been found.
             

            Methods in org.apache.struts.action with parameters of type ActionErrors
            protected  void Action.saveErrors(javax.servlet.http.HttpServletRequest request, ActionErrors errors)
                      Save the specified error messages keys into the appropriate request attribute for use by the <html:errors> tag, if any messages are required.
             

            Constructors in org.apache.struts.action with parameters of type ActionErrors
            ActionErrors(ActionErrors messages)
                      Create an ActionErrors object initialized with the given messages.
             

            Uses of ActionErrors in org.apache.struts.config
             

            Methods in org.apache.struts.config that return ActionErrors
             ActionErrors ConfigHelper.getActionErrors()
                      The org.apache.struts.action.ActionErrors object, for this request.
             ActionErrors ConfigHelperInterface.getActionErrors()
                      The org.apache.struts.action.ActionErrors object, for this request.
             

            Uses of ActionErrors in org.apache.struts.util
             

            Methods in org.apache.struts.util that return ActionErrors
            static ActionErrors RequestUtils.getActionErrors(javax.servlet.jsp.PageContext pageContext, java.lang.String paramName)
                      Retrieves the value from request scope and if it isn't already an ErrorMessages some classes are converted to one.
             

            Methods in org.apache.struts.util with parameters of type ActionErrors
            static org.apache.commons.validator.Validator StrutsValidatorUtil.initValidator(java.lang.String key, java.lang.Object bean, javax.servlet.ServletContext application, javax.servlet.http.HttpServletRequest request, ActionErrors errors, int page)
                      Deprecated. As of Struts 1.1, replaced by Resources.initValidator(String,Object,ServletContext,HttpServletRequest,ActionErrors,int)
            static boolean StrutsValidator.validateRequired(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
                      Deprecated. As of Struts 1.1, replaced by FieldChecks.validateRequired(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)
            static boolean StrutsValidator.validateMask(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
                      Deprecated. As of Struts 1.1, replaced by FieldChecks.validateMask(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)
            static java.lang.Byte StrutsValidator.validateByte(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
                      Deprecated. As of Struts 1.1, replaced by FieldChecks.validateByte(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)
            static java.lang.Short StrutsValidator.validateShort(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
                      Deprecated. As of Struts 1.1, replaced by FieldChecks.validateShort(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)
            static java.lang.Integer StrutsValidator.validateInteger(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
                      Deprecated. As of Struts 1.1, replaced by FieldChecks.validateInteger(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)
            static java.lang.Long StrutsValidator.validateLong(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
                      Deprecated. As of Struts 1.1, replaced by FieldChecks.validateLong(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)
            static java.lang.Float StrutsValidator.validateFloat(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
                      Deprecated. As of Struts 1.1, replaced by FieldChecks.validateFloat(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)
            static java.lang.Double StrutsValidator.validateDouble(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
                      Deprecated. As of Struts 1.1, replaced by FieldChecks.validateDouble(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)
            static java.util.Date StrutsValidator.validateDate(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
                      Deprecated. As of Struts 1.1, replaced by FieldChecks.validateDate(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)
            static boolean StrutsValidator.validateRange(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
                      Deprecated. As of Struts 1.1, replaced by FieldChecks.validateIntRange(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)
            static java.lang.Long StrutsValidator.validateCreditCard(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
                      Deprecated. As of Struts 1.1, replaced by FieldChecks.validateCreditCard(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest) Translated to Java by Ted Husted (husted@apache.org ).
                Reference Sean M. Burke's script at http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl

            static boolean StrutsValidator.validateEmail(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
                      Deprecated. As of Struts 1.1, replaced by FieldChecks.validateEmail(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest) Based on a script by Sandeep V. Tamhankar (stamhankar@hotmail.com), http://javascript.internet.com

            static boolean StrutsValidator.validateMaxLength(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
                      Deprecated. As of Struts 1.1, replaced by FieldChecks.validateMaxLength(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)
            static boolean StrutsValidator.validateMinLength(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
                      Deprecated. As of Struts 1.1, replaced by FieldChecks.validateMinLength(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)
             

            Uses of ActionErrors in org.apache.struts.validator
             

            Methods in org.apache.struts.validator that return ActionErrors
             ActionErrors ValidatorForm.validate(ActionMapping mapping, javax.servlet.http.HttpServletRequest request)
                      Validate the properties that have been set from this HTTP request, and return an ActionErrors object that encapsulates any validation errors that have been found.
             ActionErrors DynaValidatorForm.validate(ActionMapping mapping, javax.servlet.http.HttpServletRequest request)
                      Validate the properties that have been set from this HTTP request, and return an ActionErrors object that encapsulates any validation errors that have been found.
             ActionErrors DynaValidatorActionForm.validate(ActionMapping mapping, javax.servlet.http.HttpServletRequest request)
                      Validate the properties that have been set from this HTTP request, and return an ActionErrors object that encapsulates any validation errors that have been found.
             ActionErrors ValidatorActionForm.validate(ActionMapping mapping, javax.servlet.http.HttpServletRequest request)
                      Validate the properties that have been set from this HTTP request, and return an ActionErrors object that encapsulates any validation errors that have been found.
             

            Methods in org.apache.struts.validator with parameters of type ActionErrors
            static org.apache.commons.validator.Validator Resources.initValidator(java.lang.String key, java.lang.Object bean, javax.servlet.ServletContext application, javax.servlet.http.HttpServletRequest request, ActionErrors errors, int page)
                      Initialize the Validator to perform validation.
            static boolean FieldChecks.validateRequired(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
                      Checks if the field isn't null and length of the field is greater than zero not including whitespace.
            static boolean FieldChecks.validateRequiredIf(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, org.apache.commons.validator.Validator validator, javax.servlet.http.HttpServletRequest request)
                      Checks if the field isn't null based on the values of other fields.
            static boolean FieldChecks.validateMask(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
                      Checks if the field matches the regular expression in the field's mask attribute.
            static java.lang.Byte FieldChecks.validateByte(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
                      Checks if the field can safely be converted to a byte primitive.
            static java.lang.Short FieldChecks.validateShort(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
                      Checks if the field can safely be converted to a short primitive.
            static java.lang.Integer FieldChecks.validateInteger(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
                      Checks if the field can safely be converted to an int primitive.
            static java.lang.Long FieldChecks.validateLong(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
                      Checks if the field can safely be converted to a long primitive.
            static java.lang.Float FieldChecks.validateFloat(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
                      Checks if the field can safely be converted to a float primitive.
            static java.lang.Double FieldChecks.validateDouble(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
                      Checks if the field can safely be converted to a double primitive.
            static java.util.Date FieldChecks.validateDate(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
                      Checks if the field is a valid date.
            static boolean FieldChecks.validateRange(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
                      Deprecated. As of Struts 1.1, replaced by FieldChecks.validateIntRange(java.lang.Object,org.apache.commons.validator.ValidatorAction,org.apache.commons.validator.Field,org.apache.struts.action.ActionErrors,javax.servlet.http.HttpServletRequest)
            static boolean FieldChecks.validateIntRange(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
                      Checks if a fields value is within a range (min & max specified in the vars attribute).
            static boolean FieldChecks.validateDoubleRange(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
                      Checks if a fields value is within a range (min & max specified in the vars attribute).
            static boolean FieldChecks.validateFloatRange(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
                      Checks if a fields value is within a range (min & max specified in the vars attribute).
            static java.lang.Long FieldChecks.validateCreditCard(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
                      Checks if the field is a valid credit card number.
            static boolean FieldChecks.validateEmail(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
                      Checks if a field has a valid e-mail address.
            static boolean FieldChecks.validateMaxLength(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
                      Checks if the field's length is less than or equal to the maximum value.
            static boolean FieldChecks.validateMinLength(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
                      Checks if the field's length is greater than or equal to the minimum value.
             



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/class-use/ActionException.html0000644000175000017500000001262210404045206032506 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.action.ActionException (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.action.ActionException

            No usage of org.apache.struts.action.ActionException



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/class-use/ActionForm.html0000644000175000017500000013413110404045246031457 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.action.ActionForm (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.action.ActionForm

            Packages that use ActionForm
            org.apache.struts.action The action package is the core of the struts framework, providing the "Controller" aspect of a MVC model. 
            org.apache.struts.actions The actions package provides special adapters between the incoming HTTP request and the corresponding business logic. 
            org.apache.struts.config The "config" package contains configuration objects that correspond to elements that may be specified in the struts-config.xml module configuration file. 
            org.apache.struts.tiles
            The Tiles taglib and framework allows building web pages by assembling reusable pieces of pages, called Tiles. 
            org.apache.struts.tiles.actions   
            org.apache.struts.util The Utilities package provides a variety of families of classes, to solve problems that are commonly encountered in building web applications. 
            org.apache.struts.validator The validator package provides a series of classes to validate ActionForm type of input. 
             

            Uses of ActionForm in org.apache.struts.action
             

            Subclasses of ActionForm in org.apache.struts.action
             class DynaActionForm
                      Specialized subclass of ActionForm that allows the creation of form beans with dynamic sets of properties, without requiring the developer to create a Java class for each type of form bean.
             

            Methods in org.apache.struts.action that return ActionForm
            protected  ActionForm RequestProcessor.processActionForm(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, ActionMapping mapping)
                      Retrieve and return the ActionForm bean associated with this mapping, creating and stashing one if necessary.
             

            Methods in org.apache.struts.action with parameters of type ActionForm
            protected  ActionForward RequestProcessor.processActionPerform(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Action action, ActionForm form, ActionMapping mapping)
                      Ask the specified Action instance to handle this request.
            protected  ActionForward RequestProcessor.processException(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, java.lang.Exception exception, ActionForm form, ActionMapping mapping)
                      Ask our exception handler to handle the exception.
            protected  void RequestProcessor.processPopulate(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, ActionForm form, ActionMapping mapping)
                      Populate the properties of the specified ActionForm instance from the request parameters included with this request.
            protected  boolean RequestProcessor.processValidate(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, ActionForm form, ActionMapping mapping)
                      If this request was not cancelled, and the request's ActionMapping has not disabled validation, call the validate() method of the specified ActionForm, and forward back to the input form if there were any errors.
             ActionForward Action.execute(ActionMapping mapping, ActionForm form, javax.servlet.ServletRequest request, javax.servlet.ServletResponse response)
                      Process the specified non-HTTP request, and create the corresponding non-HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
             ActionForward Action.execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
             ActionForward Action.perform(ActionMapping mapping, ActionForm form, javax.servlet.ServletRequest request, javax.servlet.ServletResponse response)
                      Deprecated. Use the execute() method instead
             ActionForward Action.perform(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Deprecated. Use the execute() method instead
             ActionForward ExceptionHandler.execute(java.lang.Exception ex, ExceptionConfig ae, ActionMapping mapping, ActionForm formInstance, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Handle the exception.
             

            Uses of ActionForm in org.apache.struts.actions
             

            Methods in org.apache.struts.actions with parameters of type ActionForm
             ActionForward LookupDispatchAction.execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
             ActionForward ForwardAction.execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
             ActionForward DispatchAction.execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
            protected  ActionForward DispatchAction.unspecified(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Method which is dispatched to when there is no value for specified request parameter included in the request.
            protected  ActionForward DispatchAction.dispatchMethod(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, java.lang.String name)
                      Dispatch to the specified method.
             ActionForward SwitchAction.execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
             ActionForward IncludeAction.execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
             

            Uses of ActionForm in org.apache.struts.config
             

            Methods in org.apache.struts.config that return ActionForm
             ActionForm ConfigHelper.getActionForm()
                       
             ActionForm ConfigHelperInterface.getActionForm()
                       
             

            Uses of ActionForm in org.apache.struts.tiles
             

            Methods in org.apache.struts.tiles with parameters of type ActionForm
            protected  void ActionComponentServlet.processActionForward(ActionForward forward, ActionMapping mapping, ActionForm formInstance, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Deprecated. Overload struts1.0 counterpart in order to catch forward calls.
            protected  boolean ActionComponentServlet.processValidate(ActionMapping mapping, ActionForm formInstance, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Deprecated. Overload struts1.0 counterpart in order to catch forward calls.
             

            Uses of ActionForm in org.apache.struts.tiles.actions
             

            Methods in org.apache.struts.tiles.actions with parameters of type ActionForm
             ActionForward ReloadDefinitionsAction.execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
             ActionForward DefinitionDispatcherAction.execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
             ActionForward ViewDefinitionsAction.execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
             ActionForward TilesAction.execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Original Struts Action's method.
             ActionForward TilesAction.execute(ComponentContext context, ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
             ActionForward TilesAction.perform(ComponentContext context, ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Deprecated. Use the execute() method instead
             ActionForward NoOpAction.execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Deprecated. Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
             

            Uses of ActionForm in org.apache.struts.util
             

            Methods in org.apache.struts.util that return ActionForm
            static ActionForm RequestUtils.createActionForm(javax.servlet.http.HttpServletRequest request, ActionMapping mapping, ModuleConfig moduleConfig, ActionServlet servlet)
                      Create (if necessary) and return an ActionForm instance appropriate for this request.
             

            Uses of ActionForm in org.apache.struts.validator
             

            Subclasses of ActionForm in org.apache.struts.validator
             class DynaValidatorActionForm
                      This class extends DynaValidatorForm and provides basic field validation based on an XML file.
             class DynaValidatorForm
                      This class extends DynaActionForm and provides basic field validation based on an XML file.
             class ValidatorActionForm
                      This class extends ValidatorForm and provides basic field validation based on an XML file.
             class ValidatorForm
                      This class extends ActionForm and provides basic field validation based on an XML file.
             



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/class-use/ActionFormBean.html0000644000175000017500000002742710404045216032253 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.action.ActionFormBean (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.action.ActionFormBean

            Packages that use ActionFormBean
            org.apache.struts.action The action package is the core of the struts framework, providing the "Controller" aspect of a MVC model. 
            org.apache.struts.config The "config" package contains configuration objects that correspond to elements that may be specified in the struts-config.xml module configuration file. 
             

            Uses of ActionFormBean in org.apache.struts.action
             

            Methods in org.apache.struts.action that return ActionFormBean
             ActionFormBean ActionServlet.findFormBean(java.lang.String name)
                      Deprecated. Replaced by ModuleConfig.findFormBeanConfig()
             ActionFormBean ActionFormBeans.findFormBean(java.lang.String name)
                      Deprecated. Return the formBean associated with the specified logical name, if any; otherwise return null.
             

            Methods in org.apache.struts.action with parameters of type ActionFormBean
             void ActionFormBeans.addFormBean(ActionFormBean formBean)
                      Deprecated. Register a form bean to the set configured for this servlet.
             void ActionFormBeans.removeFormBean(ActionFormBean formBean)
                      Deprecated. Deregister a formBean from the set configured for this servlet.
             

            Uses of ActionFormBean in org.apache.struts.config
             

            Methods in org.apache.struts.config that return ActionFormBean
             ActionFormBean ConfigHelper.getFormBean(java.lang.String name)
                      Return the form bean definition associated with the specified logical name, if any; otherwise return null.
             ActionFormBean ConfigHelperInterface.getFormBean(java.lang.String name)
                      Return the form bean definition associated with the specified logical name, if any; otherwise return null.
             



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/class-use/ActionFormBeans.html0000644000175000017500000001756410404045210032431 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.action.ActionFormBeans (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.action.ActionFormBeans

            Packages that use ActionFormBeans
            org.apache.struts.config The "config" package contains configuration objects that correspond to elements that may be specified in the struts-config.xml module configuration file. 
             

            Uses of ActionFormBeans in org.apache.struts.config
             

            Methods in org.apache.struts.config that return ActionFormBeans
             ActionFormBeans ConfigHelper.getActionFormBeans()
                      The org.apache.struts.action.ActionFormBeans collection for this application.
             ActionFormBeans ConfigHelperInterface.getActionFormBeans()
                      The org.apache.struts.action.ActionFormBeans collection for this application.
             



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/class-use/ActionForward.html0000644000175000017500000013163410404045220032155 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.action.ActionForward (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.action.ActionForward

            Packages that use ActionForward
            org.apache.struts.action The action package is the core of the struts framework, providing the "Controller" aspect of a MVC model. 
            org.apache.struts.actions The actions package provides special adapters between the incoming HTTP request and the corresponding business logic. 
            org.apache.struts.config The "config" package contains configuration objects that correspond to elements that may be specified in the struts-config.xml module configuration file. 
            org.apache.struts.tiles
            The Tiles taglib and framework allows building web pages by assembling reusable pieces of pages, called Tiles. 
            org.apache.struts.tiles.actions   
             

            Uses of ActionForward in org.apache.struts.action
             

            Subclasses of ActionForward in org.apache.struts.action
             class ForwardingActionForward
                      A subclass of ActionForward that defaults the redirect attribute to false.
             class RedirectingActionForward
                      A subclass of ActionForward that defaults the redirect attribute to true.
             

            Methods in org.apache.struts.action that return ActionForward
             ActionForward ActionServlet.findForward(java.lang.String name)
                      Deprecated. Replaced by ModuleConfig.findForwardConfig()
            protected  ActionForward RequestProcessor.processActionPerform(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Action action, ActionForm form, ActionMapping mapping)
                      Ask the specified Action instance to handle this request.
            protected  ActionForward RequestProcessor.processException(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, java.lang.Exception exception, ActionForm form, ActionMapping mapping)
                      Ask our exception handler to handle the exception.
             ActionForward Action.execute(ActionMapping mapping, ActionForm form, javax.servlet.ServletRequest request, javax.servlet.ServletResponse response)
                      Process the specified non-HTTP request, and create the corresponding non-HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
             ActionForward Action.execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
             ActionForward Action.perform(ActionMapping mapping, ActionForm form, javax.servlet.ServletRequest request, javax.servlet.ServletResponse response)
                      Deprecated. Use the execute() method instead
             ActionForward Action.perform(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Deprecated. Use the execute() method instead
             ActionForward ActionForwards.findForward(java.lang.String name)
                      Deprecated. Return the forwarding associated with the specified logical name, if any; otherwise return null.
             ActionForward ActionMapping.findForward(java.lang.String name)
                      Find and return the ForwardConfig instance defining how forwarding to the specified logical name should be handled.
             ActionForward ActionMapping.getInputForward()
                      Create (if necessary) and return an ActionForward that corresponds to the input property of this Action.
             ActionForward ExceptionHandler.execute(java.lang.Exception ex, ExceptionConfig ae, ActionMapping mapping, ActionForm formInstance, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Handle the exception.
             

            Methods in org.apache.struts.action with parameters of type ActionForward
            protected  void RequestProcessor.processActionForward(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, ActionForward forward)
                      Deprecated. Use processForwardConfig() instead.
             void ActionForwards.addForward(ActionForward forward)
                      Deprecated. Register a logical forwarding to the set configured for this servlet.
             void ActionForwards.removeForward(ActionForward forward)
                      Deprecated. Deregister a forwarding from the set configured for this servlet.
            protected  void ExceptionHandler.storeException(javax.servlet.http.HttpServletRequest request, java.lang.String property, ActionError error, ActionForward forward, java.lang.String scope)
                      Default implementation for handling an ActionError generated from an Exception during Action delegation.
             

            Uses of ActionForward in org.apache.struts.actions
             

            Methods in org.apache.struts.actions that return ActionForward
             ActionForward LookupDispatchAction.execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
             ActionForward ForwardAction.execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
             ActionForward DispatchAction.execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
            protected  ActionForward DispatchAction.unspecified(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Method which is dispatched to when there is no value for specified request parameter included in the request.
            protected  ActionForward DispatchAction.dispatchMethod(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, java.lang.String name)
                      Dispatch to the specified method.
             ActionForward SwitchAction.execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
             ActionForward IncludeAction.execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
             

            Uses of ActionForward in org.apache.struts.config
             

            Fields in org.apache.struts.config declared as ActionForward
            private  ActionForward ConfigHelper.forward
                      The forward associated with this instance.
             

            Methods in org.apache.struts.config that return ActionForward
             ActionForward ConfigHelper.getActionForward(java.lang.String name)
                      Return the forwarding associated with the specified logical name, if any; otherwise return null.
             ActionForward ConfigHelperInterface.getActionForward(java.lang.String name)
                      Return the forwarding associated with the specified logical name, if any; otherwise return null.
             

            Methods in org.apache.struts.config with parameters of type ActionForward
             void ConfigHelper.setForward(ActionForward forward)
                      Set the forward associated with this instance.
             

            Uses of ActionForward in org.apache.struts.tiles
             

            Methods in org.apache.struts.tiles with parameters of type ActionForward
            protected  void ActionComponentServlet.processActionForward(ActionForward forward, ActionMapping mapping, ActionForm formInstance, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Deprecated. Overload struts1.0 counterpart in order to catch forward calls.
             

            Uses of ActionForward in org.apache.struts.tiles.actions
             

            Methods in org.apache.struts.tiles.actions that return ActionForward
             ActionForward ReloadDefinitionsAction.execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
             ActionForward DefinitionDispatcherAction.execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
             ActionForward ViewDefinitionsAction.execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
             ActionForward TilesAction.execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Original Struts Action's method.
             ActionForward TilesAction.execute(ComponentContext context, ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
             ActionForward TilesAction.perform(ComponentContext context, ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Deprecated. Use the execute() method instead
             ActionForward NoOpAction.execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Deprecated. Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
             



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/class-use/ActionForwards.html0000644000175000017500000001753510404045224032347 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.action.ActionForwards (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.action.ActionForwards

            Packages that use ActionForwards
            org.apache.struts.config The "config" package contains configuration objects that correspond to elements that may be specified in the struts-config.xml module configuration file. 
             

            Uses of ActionForwards in org.apache.struts.config
             

            Methods in org.apache.struts.config that return ActionForwards
             ActionForwards ConfigHelper.getActionForwards()
                      The org.apache.struts.action.ActionForwards collection for this application.
             ActionForwards ConfigHelperInterface.getActionForwards()
                      The org.apache.struts.action.ActionForwards collection for this application.
             



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/class-use/ActionMapping.html0000644000175000017500000022314710404045226032153 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.action.ActionMapping (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.action.ActionMapping

            Packages that use ActionMapping
            org.apache.struts.action The action package is the core of the struts framework, providing the "Controller" aspect of a MVC model. 
            org.apache.struts.actions The actions package provides special adapters between the incoming HTTP request and the corresponding business logic. 
            org.apache.struts.config The "config" package contains configuration objects that correspond to elements that may be specified in the struts-config.xml module configuration file. 
            org.apache.struts.taglib.html The "struts-html" tag library contains JSP custom tags useful in creating dynamic HTML user interfaces, including input forms. 
            org.apache.struts.tiles
            The Tiles taglib and framework allows building web pages by assembling reusable pieces of pages, called Tiles. 
            org.apache.struts.tiles.actions   
            org.apache.struts.upload The upload package facilities to upload files using multi-part requests. 
            org.apache.struts.util The Utilities package provides a variety of families of classes, to solve problems that are commonly encountered in building web applications. 
            org.apache.struts.validator The validator package provides a series of classes to validate ActionForm type of input. 
             

            Uses of ActionMapping in org.apache.struts.action
             

            Subclasses of ActionMapping in org.apache.struts.action
             class RequestActionMapping
                      Subclass of ActionMapping that defaults the form bean scope to request.
             class SessionActionMapping
                      Subclass of ActionMapping that defaults the form bean scope to session.
             

            Fields in org.apache.struts.action declared as ActionMapping
            protected  ActionMapping ActionMappings.unknown
                      Deprecated. The ActionMapping that should handle unknown request paths, if any.
             

            Methods in org.apache.struts.action that return ActionMapping
             ActionMapping ActionServlet.findMapping(java.lang.String path)
                      Deprecated. Replaced by ModuleConfig.findActionConfig()
            protected  ActionMapping RequestProcessor.processMapping(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, java.lang.String path)
                      Select the mapping used to process the selection path for this request.
             ActionMapping ActionMappings.getUnknown(javax.servlet.ServletRequest request)
                      Deprecated. Return the Action that should handle unknown request paths, if any.
             ActionMapping ActionMappings.getUnknown(javax.servlet.http.HttpServletRequest request)
                      Deprecated. Return the Action that should handle unknown request paths, if any.
             ActionMapping ActionMappings.findMapping(java.lang.String path)
                      Deprecated. Return the mapping associated with the specified logical name, if any; otherwise return null.
             

            Methods in org.apache.struts.action with parameters of type ActionMapping
            protected  Action RequestProcessor.processActionCreate(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, ActionMapping mapping)
                      Return an Action instance that will be used to process the current request, creating a new one if necessary.
            protected  ActionForm RequestProcessor.processActionForm(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, ActionMapping mapping)
                      Retrieve and return the ActionForm bean associated with this mapping, creating and stashing one if necessary.
            protected  ActionForward RequestProcessor.processActionPerform(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Action action, ActionForm form, ActionMapping mapping)
                      Ask the specified Action instance to handle this request.
            protected  ActionForward RequestProcessor.processException(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, java.lang.Exception exception, ActionForm form, ActionMapping mapping)
                      Ask our exception handler to handle the exception.
            protected  boolean RequestProcessor.processForward(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, ActionMapping mapping)
                      Process a forward requested by this mapping (if any).
            protected  boolean RequestProcessor.processInclude(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, ActionMapping mapping)
                      Process an include requested by this mapping (if any).
            protected  void RequestProcessor.processPopulate(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, ActionForm form, ActionMapping mapping)
                      Populate the properties of the specified ActionForm instance from the request parameters included with this request.
            protected  boolean RequestProcessor.processRoles(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, ActionMapping mapping)
                      If this action is protected by security roles, make sure that the current user possesses at least one of them.
            protected  boolean RequestProcessor.processValidate(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, ActionForm form, ActionMapping mapping)
                      If this request was not cancelled, and the request's ActionMapping has not disabled validation, call the validate() method of the specified ActionForm, and forward back to the input form if there were any errors.
             void ActionForm.reset(ActionMapping mapping, javax.servlet.ServletRequest request)
                      Reset all bean properties to their default state.
             void ActionForm.reset(ActionMapping mapping, javax.servlet.http.HttpServletRequest request)
                      Reset all bean properties to their default state.
             ActionErrors ActionForm.validate(ActionMapping mapping, javax.servlet.ServletRequest request)
                      Validate the properties that have been set for this non-HTTP request, and return an ActionErrors object that encapsulates any validation errors that have been found.
             ActionErrors ActionForm.validate(ActionMapping mapping, javax.servlet.http.HttpServletRequest request)
                      Validate the properties that have been set for this HTTP request, and return an ActionErrors object that encapsulates any validation errors that have been found.
             ActionForward Action.execute(ActionMapping mapping, ActionForm form, javax.servlet.ServletRequest request, javax.servlet.ServletResponse response)
                      Process the specified non-HTTP request, and create the corresponding non-HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
             ActionForward Action.execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
             ActionForward Action.perform(ActionMapping mapping, ActionForm form, javax.servlet.ServletRequest request, javax.servlet.ServletResponse response)
                      Deprecated. Use the execute() method instead
             ActionForward Action.perform(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Deprecated. Use the execute() method instead
             void DynaActionForm.initialize(ActionMapping mapping)
                      Initialize all bean properties to their initial values, as specified in the FormPropertyConfig elements associated with the definition of this DynaActionForm.
             void DynaActionForm.reset(ActionMapping mapping, javax.servlet.ServletRequest request)
                      Reset all bean properties to their default state.
             void DynaActionForm.reset(ActionMapping mapping, javax.servlet.http.HttpServletRequest request)
                      Reset all bean properties to their default state.
             ActionForward ExceptionHandler.execute(java.lang.Exception ex, ExceptionConfig ae, ActionMapping mapping, ActionForm formInstance, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Handle the exception.
             void ActionMappings.addMapping(ActionMapping mapping)
                      Deprecated. Register a logical mapping to the set configured for this servlet.
             void ActionMappings.removeMapping(ActionMapping mapping)
                      Deprecated. Deregister a mapping from the set configured for this servlet.
             

            Uses of ActionMapping in org.apache.struts.actions
             

            Methods in org.apache.struts.actions with parameters of type ActionMapping
             ActionForward LookupDispatchAction.execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
             ActionForward ForwardAction.execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
             ActionForward DispatchAction.execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
            protected  ActionForward DispatchAction.unspecified(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Method which is dispatched to when there is no value for specified request parameter included in the request.
            protected  ActionForward DispatchAction.dispatchMethod(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, java.lang.String name)
                      Dispatch to the specified method.
             ActionForward SwitchAction.execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
             ActionForward IncludeAction.execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
             

            Uses of ActionMapping in org.apache.struts.config
             

            Methods in org.apache.struts.config that return ActionMapping
             ActionMapping ConfigHelper.getMapping()
                      The org.apache.struts.ActionMapping instance for this request.
             ActionMapping ConfigHelper.getActionMapping(java.lang.String path)
                      Return the mapping associated with the specified request path, if any; otherwise return null.
             ActionMapping ConfigHelperInterface.getMapping()
                      The org.apache.struts.ActionMapping instance for this request.
             ActionMapping ConfigHelperInterface.getActionMapping(java.lang.String path)
                      Return the mapping associated with the specified request path, if any; otherwise return null.
             

            Uses of ActionMapping in org.apache.struts.taglib.html
             

            Fields in org.apache.struts.taglib.html declared as ActionMapping
            protected  ActionMapping FormTag.mapping
                      The ActionMapping defining where we will be submitting this form
             

            Uses of ActionMapping in org.apache.struts.tiles
             

            Methods in org.apache.struts.tiles with parameters of type ActionMapping
            protected  void ActionComponentServlet.processActionForward(ActionForward forward, ActionMapping mapping, ActionForm formInstance, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Deprecated. Overload struts1.0 counterpart in order to catch forward calls.
            protected  boolean ActionComponentServlet.processValidate(ActionMapping mapping, ActionForm formInstance, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Deprecated. Overload struts1.0 counterpart in order to catch forward calls.
            protected  boolean ActionComponentServlet.processForward(ActionMapping mapping, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Deprecated. Overload struts1.0 counterpart in order to catch forward calls.
            protected  boolean ActionComponentServlet.processInclude(ActionMapping mapping, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Deprecated. Overload struts1.0 counterpart in order to catch include calls.
             

            Uses of ActionMapping in org.apache.struts.tiles.actions
             

            Methods in org.apache.struts.tiles.actions with parameters of type ActionMapping
             ActionForward ReloadDefinitionsAction.execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
             ActionForward DefinitionDispatcherAction.execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
             ActionForward ViewDefinitionsAction.execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
             ActionForward TilesAction.execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Original Struts Action's method.
             ActionForward TilesAction.execute(ComponentContext context, ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
             ActionForward TilesAction.perform(ComponentContext context, ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Deprecated. Use the execute() method instead
             ActionForward NoOpAction.execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Deprecated. Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
             

            Uses of ActionMapping in org.apache.struts.upload
             

            Fields in org.apache.struts.upload declared as ActionMapping
            private  ActionMapping CommonsMultipartRequestHandler.mapping
                      The action mapping with which this handler is associated.
            protected  ActionMapping DiskMultipartRequestHandler.mapping
                      The ActionMapping instance used for this class.
             

            Methods in org.apache.struts.upload that return ActionMapping
             ActionMapping MultipartRequestHandler.getMapping()
                      Get the ActionMapping instance for this request
             ActionMapping CommonsMultipartRequestHandler.getMapping()
                      Retrieves the action mapping with which this handler is associated.
             ActionMapping DiskMultipartRequestHandler.getMapping()
                       
             

            Methods in org.apache.struts.upload with parameters of type ActionMapping
             void MultipartRequestHandler.setMapping(ActionMapping mapping)
                      Convienience method to set a reference to a working ActionMapping instance.
             void CommonsMultipartRequestHandler.setMapping(ActionMapping mapping)
                      Sets the action mapping with which this handler is associated.
             void DiskMultipartRequestHandler.setMapping(ActionMapping mapping)
                       
             

            Uses of ActionMapping in org.apache.struts.util
             

            Methods in org.apache.struts.util with parameters of type ActionMapping
            static ActionForm RequestUtils.createActionForm(javax.servlet.http.HttpServletRequest request, ActionMapping mapping, ModuleConfig moduleConfig, ActionServlet servlet)
                      Create (if necessary) and return an ActionForm instance appropriate for this request.
             

            Uses of ActionMapping in org.apache.struts.validator
             

            Methods in org.apache.struts.validator with parameters of type ActionMapping
             ActionErrors ValidatorForm.validate(ActionMapping mapping, javax.servlet.http.HttpServletRequest request)
                      Validate the properties that have been set from this HTTP request, and return an ActionErrors object that encapsulates any validation errors that have been found.
             void ValidatorForm.reset(ActionMapping mapping, javax.servlet.http.HttpServletRequest request)
                      Reset all properties to their default values.
             ActionErrors DynaValidatorForm.validate(ActionMapping mapping, javax.servlet.http.HttpServletRequest request)
                      Validate the properties that have been set from this HTTP request, and return an ActionErrors object that encapsulates any validation errors that have been found.
             void DynaValidatorForm.reset(ActionMapping mapping, javax.servlet.http.HttpServletRequest request)
                      Reset all properties to their default values.
             ActionErrors DynaValidatorActionForm.validate(ActionMapping mapping, javax.servlet.http.HttpServletRequest request)
                      Validate the properties that have been set from this HTTP request, and return an ActionErrors object that encapsulates any validation errors that have been found.
             ActionErrors ValidatorActionForm.validate(ActionMapping mapping, javax.servlet.http.HttpServletRequest request)
                      Validate the properties that have been set from this HTTP request, and return an ActionErrors object that encapsulates any validation errors that have been found.
             



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/class-use/ActionMappings.html0000644000175000017500000002003510404045236032326 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.action.ActionMappings (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.action.ActionMappings

            Packages that use ActionMappings
            org.apache.struts.config The "config" package contains configuration objects that correspond to elements that may be specified in the struts-config.xml module configuration file. 
             

            Uses of ActionMappings in org.apache.struts.config
             

            Methods in org.apache.struts.config that return ActionMappings
             ActionMappings ConfigHelper.getActionMappings()
                      The context attributes key under which our org.apache.struts.action.ActionMappings collection is normally stored, unless overridden when initializing our ActionServlet.
             ActionMappings ConfigHelperInterface.getActionMappings()
                      The context attributes key under which our org.apache.struts.action.ActionMappings collection is normally stored, unless overridden when initializing our ActionServlet.
             



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/class-use/ActionMessage.html0000644000175000017500000002050010404045214032125 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.action.ActionMessage (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.action.ActionMessage

            Packages that use ActionMessage
            org.apache.struts.action The action package is the core of the struts framework, providing the "Controller" aspect of a MVC model. 
             

            Uses of ActionMessage in org.apache.struts.action
             

            Subclasses of ActionMessage in org.apache.struts.action
             class ActionError
                      An encapsulation of an individual error message returned by the validate() method of an ActionForm, consisting of a message key (to be used to look up message text in an appropriate message resources database) plus up to four placeholder objects that can be used for parametric replacement in the message text.
             

            Methods in org.apache.struts.action with parameters of type ActionMessage
             void ActionMessages.add(java.lang.String property, ActionMessage message)
                      Add a message to the set of messages for the specified property.
             



            Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000016010423140532011313 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/class-use/ActionMessages.ActionMessageItem.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/class-use/ActionMessages.ActionMessa0000644000175000017500000001303210404045172033557 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.action.ActionMessages.ActionMessageItem (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.action.ActionMessages.ActionMessageItem

            No usage of org.apache.struts.action.ActionMessages.ActionMessageItem



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/class-use/ActionMessages.html0000644000175000017500000003327510404045230032323 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.action.ActionMessages (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.action.ActionMessages

            Packages that use ActionMessages
            org.apache.struts.action The action package is the core of the struts framework, providing the "Controller" aspect of a MVC model. 
            org.apache.struts.config The "config" package contains configuration objects that correspond to elements that may be specified in the struts-config.xml module configuration file. 
            org.apache.struts.util The Utilities package provides a variety of families of classes, to solve problems that are commonly encountered in building web applications. 
             

            Uses of ActionMessages in org.apache.struts.action
             

            Subclasses of ActionMessages in org.apache.struts.action
             class ActionErrors
                      A class that encapsulates the error messages being reported by the validate() method of an ActionForm.
             

            Methods in org.apache.struts.action with parameters of type ActionMessages
            protected  void Action.saveMessages(javax.servlet.http.HttpServletRequest request, ActionMessages messages)
                      Save the specified messages keys into the appropriate request attribute for use by the <html:messages> tag (if messages="true" is set), if any messages are required.
             void ActionMessages.add(ActionMessages messages)
                      Adds the messages from the given ActionMessages object to this set of messages.
             

            Constructors in org.apache.struts.action with parameters of type ActionMessages
            ActionMessages(ActionMessages messages)
                      Create an ActionMessages object initialized with the given messages.
             

            Uses of ActionMessages in org.apache.struts.config
             

            Methods in org.apache.struts.config that return ActionMessages
             ActionMessages ConfigHelper.getActionMessages()
                       
             ActionMessages ConfigHelperInterface.getActionMessages()
                      The org.apache.struts.action.ActionFormBeans collection for this application.
             

            Uses of ActionMessages in org.apache.struts.util
             

            Methods in org.apache.struts.util that return ActionMessages
            static ActionMessages RequestUtils.getActionMessages(javax.servlet.jsp.PageContext pageContext, java.lang.String paramName)
                      Retrieves the value from request scope and if it isn't already an ActionMessages some classes are converted to one.
             



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/class-use/ActionServlet.html0000644000175000017500000010726410404045210032176 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.action.ActionServlet (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.action.ActionServlet

            Packages that use ActionServlet
            org.apache.struts.action The action package is the core of the struts framework, providing the "Controller" aspect of a MVC model. 
            org.apache.struts.plugins   
            org.apache.struts.taglib.html The "struts-html" tag library contains JSP custom tags useful in creating dynamic HTML user interfaces, including input forms. 
            org.apache.struts.tiles
            The Tiles taglib and framework allows building web pages by assembling reusable pieces of pages, called Tiles. 
            org.apache.struts.upload The upload package facilities to upload files using multi-part requests. 
            org.apache.struts.util The Utilities package provides a variety of families of classes, to solve problems that are commonly encountered in building web applications. 
            org.apache.struts.validator The validator package provides a series of classes to validate ActionForm type of input. 
             

            Uses of ActionServlet in org.apache.struts.action
             

            Fields in org.apache.struts.action declared as ActionServlet
            protected  ActionServlet RequestProcessor.servlet
                      The controller servlet we are associated with.
            protected  ActionServlet ActionServletWrapper.servlet
                      The controller servlet instance to which we are attached.
            protected  ActionServlet ActionForm.servlet
                      The controller servlet instance to which we are attached.
            protected  ActionServlet Action.servlet
                      The controller servlet to which we are attached.
            protected  ActionServlet ActionMappings.servlet
                      Deprecated. The ActionServlet instance of our owning application.
             

            Methods in org.apache.struts.action that return ActionServlet
            protected  ActionServlet ActionForm.getServlet()
                      Return the controller servlet instance to which we are attached.
             ActionServlet Action.getServlet()
                      Return the controller servlet instance to which we are attached.
             ActionServlet ActionMappings.getServlet()
                      Deprecated. Return the ActionServlet instance of our owning application.
             

            Methods in org.apache.struts.action with parameters of type ActionServlet
             void RequestProcessor.init(ActionServlet servlet, ModuleConfig moduleConfig)
                      Initialize this request processor instance.
             void ActionForm.setServlet(ActionServlet servlet)
                      Set the controller servlet instance to which we are attached (if servlet is non-null), or release any allocated resources (if servlet is null).
             void Action.setServlet(ActionServlet servlet)
                      Set the controller servlet instance to which we are attached (if servlet is non-null), or release any allocated resources (if servlet is null).
             void ActionMappings.setServlet(ActionServlet servlet)
                      Deprecated. Set the ActionServlet instance of our owning application.
             void PlugIn.init(ActionServlet servlet, ModuleConfig config)
                      Receive notification that the specified module is being started up.
             

            Constructors in org.apache.struts.action with parameters of type ActionServlet
            ActionServletWrapper(ActionServlet servlet)
                      Create object and set servlet property.
             

            Uses of ActionServlet in org.apache.struts.plugins
             

            Fields in org.apache.struts.plugins declared as ActionServlet
            protected  ActionServlet ModuleConfigVerifier.servlet
                      The ActionServlet instance we are associated with.
             

            Methods in org.apache.struts.plugins with parameters of type ActionServlet
             void ModuleConfigVerifier.init(ActionServlet servlet, ModuleConfig config)
                      Receive notification that the specified module is being started up.
             

            Uses of ActionServlet in org.apache.struts.taglib.html
             

            Fields in org.apache.struts.taglib.html declared as ActionServlet
            protected  ActionServlet FormTag.servlet
                      The ActionServlet instance we are associated with (so that we can initialize the servlet property on any form bean that we create).
             

            Uses of ActionServlet in org.apache.struts.tiles
             

            Subclasses of ActionServlet in org.apache.struts.tiles
             class ActionComponentServlet
                      Deprecated. Tiles now uses ActionServlet with TilesPlugin and TilesRequestProcessor.
             

            Methods in org.apache.struts.tiles with parameters of type ActionServlet
             void TilesPlugin.init(ActionServlet servlet, ModuleConfig moduleConfig)
                      Receive notification that the specified module is being started up.
            protected  DefinitionsFactoryConfig TilesPlugin.readFactoryConfig(ActionServlet servlet, ModuleConfig config)
                      Create FactoryConfig and initialize it from web.xml and struts-config.xml.
            protected  java.util.Map TilesPlugin.findStrutsPlugInConfigProperties(ActionServlet servlet, ModuleConfig config)
                      Find original properties set in the Struts PlugInConfig object.
             void TilesRequestProcessor.init(ActionServlet servlet, ModuleConfig moduleConfig)
                      Initialize this request processor instance.
             

            Uses of ActionServlet in org.apache.struts.upload
             

            Fields in org.apache.struts.upload declared as ActionServlet
            private  ActionServlet CommonsMultipartRequestHandler.servlet
                      The servlet with which this handler is associated.
            protected  ActionServlet DiskMultipartRequestHandler.servlet
                      The ActionServlet instance used for this class.
             

            Methods in org.apache.struts.upload that return ActionServlet
             ActionServlet MultipartRequestHandler.getServlet()
                      Get the ActionServlet instance
             ActionServlet CommonsMultipartRequestHandler.getServlet()
                      Retrieves the servlet with which this handler is associated.
             ActionServlet DiskMultipartRequestHandler.getServlet()
                       
             

            Methods in org.apache.struts.upload with parameters of type ActionServlet
             void MultipartRequestHandler.setServlet(ActionServlet servlet)
                      Convienience method to set a reference to a working ActionServlet instance.
             void CommonsMultipartRequestHandler.setServlet(ActionServlet servlet)
                      Sets the servlet with which this handler is associated.
             void DiskMultipartRequestHandler.setServlet(ActionServlet servlet)
                       
             

            Uses of ActionServlet in org.apache.struts.util
             

            Methods in org.apache.struts.util with parameters of type ActionServlet
            static ActionForm RequestUtils.createActionForm(javax.servlet.http.HttpServletRequest request, ActionMapping mapping, ModuleConfig moduleConfig, ActionServlet servlet)
                      Create (if necessary) and return an ActionForm instance appropriate for this request.
             

            Uses of ActionServlet in org.apache.struts.validator
             

            Fields in org.apache.struts.validator declared as ActionServlet
            private  ActionServlet ValidatorPlugIn.servlet
                      The ActionServlet owning this application.
             

            Methods in org.apache.struts.validator with parameters of type ActionServlet
             void ValidatorPlugIn.init(ActionServlet servlet, ModuleConfig config)
                      Initialize and load our resources.
             



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/class-use/ActionServletWrapper.html0000644000175000017500000001644210404045222033537 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.action.ActionServletWrapper (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.action.ActionServletWrapper

            Packages that use ActionServletWrapper
            org.apache.struts.action The action package is the core of the struts framework, providing the "Controller" aspect of a MVC model. 
             

            Uses of ActionServletWrapper in org.apache.struts.action
             

            Methods in org.apache.struts.action that return ActionServletWrapper
             ActionServletWrapper ActionForm.getServletWrapper()
                      Return the controller servlet instance to which we are attached.
             



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/class-use/DynaActionForm.html0000644000175000017500000001715010404045242032270 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.action.DynaActionForm (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.action.DynaActionForm

            Packages that use DynaActionForm
            org.apache.struts.validator The validator package provides a series of classes to validate ActionForm type of input. 
             

            Uses of DynaActionForm in org.apache.struts.validator
             

            Subclasses of DynaActionForm in org.apache.struts.validator
             class DynaValidatorActionForm
                      This class extends DynaValidatorForm and provides basic field validation based on an XML file.
             class DynaValidatorForm
                      This class extends DynaActionForm and provides basic field validation based on an XML file.
             



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/class-use/DynaActionFormClass.html0000644000175000017500000002267010404045234033262 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.action.DynaActionFormClass (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.action.DynaActionFormClass

            Packages that use DynaActionFormClass
            org.apache.struts.action The action package is the core of the struts framework, providing the "Controller" aspect of a MVC model. 
             

            Uses of DynaActionFormClass in org.apache.struts.action
             

            Fields in org.apache.struts.action declared as DynaActionFormClass
            protected  DynaActionFormClass DynaActionForm.dynaClass
                      The DynaActionFormClass with which we are associated.
             

            Methods in org.apache.struts.action that return DynaActionFormClass
            static DynaActionFormClass DynaActionFormClass.createDynaActionFormClass(FormBeanConfig config)
                      Create (if necessary) and return a new DynaActionFormClass instance for the specified form bean configuration instance.
             

            Methods in org.apache.struts.action with parameters of type DynaActionFormClass
            (package private)  void DynaActionForm.setDynaActionFormClass(DynaActionFormClass dynaClass)
                      Set the DynaActionFormClass instance that we are associated with.
             



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/class-use/ExceptionHandler.html0000644000175000017500000001263210404045240032645 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.action.ExceptionHandler (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.action.ExceptionHandler

            No usage of org.apache.struts.action.ExceptionHandler



            Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000014710423140532011320 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/class-use/ForwardingActionForward.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/class-use/ForwardingActionForward.ht0000644000175000017500000001272210404045232033646 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.action.ForwardingActionForward (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.action.ForwardingActionForward

            No usage of org.apache.struts.action.ForwardingActionForward



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/class-use/PlugIn.html0000644000175000017500000002410510404045232030606 0ustar arnaudarnaud00000000000000 Uses of Interface org.apache.struts.action.PlugIn (Apache Struts API Documentation)

            Uses of Interface
            org.apache.struts.action.PlugIn

            Packages that use PlugIn
            org.apache.struts.plugins   
            org.apache.struts.tiles
            The Tiles taglib and framework allows building web pages by assembling reusable pieces of pages, called Tiles. 
            org.apache.struts.validator The validator package provides a series of classes to validate ActionForm type of input. 
             

            Uses of PlugIn in org.apache.struts.plugins
             

            Classes in org.apache.struts.plugins that implement PlugIn
             class ModuleConfigVerifier
                      Convenient implementation of PlugIn that performs as many verification tests on the information stored in the ModuleConfig for this application module as is practical.
             

            Uses of PlugIn in org.apache.struts.tiles
             

            Classes in org.apache.struts.tiles that implement PlugIn
             class TilesPlugin
                      Tiles Plugin used to initialize Tiles.
             

            Uses of PlugIn in org.apache.struts.validator
             

            Classes in org.apache.struts.validator that implement PlugIn
             class ValidatorPlugIn
                      Loads ValidatorResources based on configuration in the struts-config.xml.
             



            Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015010423140532011312 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/class-use/RedirectingActionForward.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/class-use/RedirectingActionForward.h0000644000175000017500000001273210404045232033620 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.action.RedirectingActionForward (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.action.RedirectingActionForward

            No usage of org.apache.struts.action.RedirectingActionForward



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/class-use/RequestActionMapping.html0000644000175000017500000001267210404045210033514 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.action.RequestActionMapping (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.action.RequestActionMapping

            No usage of org.apache.struts.action.RequestActionMapping



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/class-use/RequestProcessor.html0000644000175000017500000002403410404045220032736 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.action.RequestProcessor (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.action.RequestProcessor

            Packages that use RequestProcessor
            org.apache.struts.action The action package is the core of the struts framework, providing the "Controller" aspect of a MVC model. 
            org.apache.struts.tiles
            The Tiles taglib and framework allows building web pages by assembling reusable pieces of pages, called Tiles. 
             

            Uses of RequestProcessor in org.apache.struts.action
             

            Fields in org.apache.struts.action declared as RequestProcessor
            protected  RequestProcessor ActionServlet.processor
                      The RequestProcessor instance we will use to process all incoming requests.
             

            Methods in org.apache.struts.action that return RequestProcessor
            protected  RequestProcessor ActionServlet.getRequestProcessor(ModuleConfig config)
                      Look up and return the RequestProcessor responsible for the specified module, creating a new one if necessary.
             

            Uses of RequestProcessor in org.apache.struts.tiles
             

            Subclasses of RequestProcessor in org.apache.struts.tiles
             class TilesRequestProcessor
                      RequestProcessor contains the processing logic that the Struts controller servlet performs as it receives each servlet request from the container.
             



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/class-use/SessionActionMapping.html0000644000175000017500000001267210404045244033516 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.action.SessionActionMapping (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.action.SessionActionMapping

            No usage of org.apache.struts.action.SessionActionMapping



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/doc-files/0000755000175000017500000000000010423130300026456 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/doc-files/actionUML.gif0000644000175000017500000003652310404045172031024 0ustar arnaudarnaud00000000000000GIF87aÚ÷€€€€€€€€€ÀÀÀÀÜÀ¦Êð@ ` €   À à @ @@@`@€@ @À@à@` `@```€` `À`à`€ €@€`€€€ €À€à€   @ ` €   À à À À@À`À€À ÀÀÀàÀà à@à`à€à àÀààà@ @@@`@€@ @À@à@ @ @@ @` @€ @  @À @à @@@ @@@@@`@@€@@ @@À@@à@@`@ `@@`@``@€`@ `@À`@à`@€@ €@@€@`€@€€@ €@À€@à€@ @  @@ @` @€ @  @À @à @À@ À@@À@`À@€À@ À@ÀÀ@àÀ@à@ à@@à@`à@€à@ à@Àà@àà@€ €@€`€€€ €À€à€ € €@ €` €€ €  €À €à €@€ @€@@€`@€€@€ @€À@€à@€`€ `€@`€``€€`€ `€À`€à`€€€ €€@€€`€€€€€ €€À€€à€€ €  €@ €` €€ €  €À €à €À€ À€@À€`À€€À€ À€ÀÀ€àÀ€à€ à€@à€`à€€à€ à€Àà€àà€À À@À`À€À ÀÀÀàÀ À À@ À` À€ À  ÀÀ Àà À@À @À@@À`@À€@À @ÀÀ@Àà@À`À `À@`À``À€`À `ÀÀ`Àà`À€À €À@€À`€À€€À €ÀÀ€Àà€À À  À@ À` À€ À  ÀÀ Àà ÀÀÀ ÀÀ@ÀÀ`ÀÀ€ÀÀ ÀÀÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ!ù,Úÿ7 H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤ÉÿRª\ɲ¥Ë—0cÊœI³¦Í›8sêÜɳ§ÏŸ@ƒ J´¨Ñ£H“*]Ê´©Ó§P£JJµªÕ«X³jÝʵ«×¯`ÊK¶,QhÓª]˶­Û·pãÊK·®Ý»xóêÝË·¯_f L¸°á—+^̸±ãÇ#Ë=L¹²å˘‹JÞ̹³çÏ C§ÍLº´éÓ•Ù¢^ÍÚ«êÖ°cËž}V-íÛ¸•®ÍÍ»·ïÖ¶ Ž38ñãÈ“s­¼¹ræÎ£KŸ>ÔøL{ÔÎŽ:÷ïàç‚„Ž&öâÇnO?-û÷ð‘{—‚Þ%úVêÇ׺ž½÷ýœ{,q@+婔ߤ`÷ETðÀ$( SýùGà…vhÙö؃Z ¦dO~[€@+ùaÄù4pÁœp‹=¿h·Mò¸“q"6S†=þSdMGVSº%ÿéá“PŠõß?!žˆ–„HÊ–\rÈ1FRŒùä@>šqÇ/†µ¡“=ÁSÛ1Ù’+ù&žUáÉçQSF)è ü9Y¥i©(–ÍpL?ÇDæ˜fÎèÁ3æ'åzîçiÐÙ&êŸy–:`¨ª„*IêÉ)¨¬2÷i{± ªMNÊ ¨®„öê+†pVy@ja¹Ì ƒ3H?©!dc˜šñŠ~˽j«ª·vÚí·íáªg¸Fª:Þ¹å²ä*·Ûn»g¸ÞÂ/¯ç2™*Tþªï¾»þ"’–‚Ì0ÃS@?Å0kÈ!‡„ñF”IífÜÿ’-»ïº»ª¼ê’º$覛î­.Ùûq»ñÒšçÊ-Ó{ç’Qåk•h8笳[ü¦ÆëŠ ®0üðCÂÅ, )³…ñcQ1¼QJŽW½Öñ¼»)3Í&sj.‘ãÞ s×tÊz6Ë"Ï,$¾_?ÕvÏg ¶ó\²Ù¬’=­²('´ÄZ°²Æ<ÚO!‹G qù0PæüÒŠo´ÙÔ‘[ì5Ù9‘|²¹èÖIz©f³²ÙžƒÛîM~J¥7UsÓ-TíXáŽoÞºòÝÊ¿“‚€1Å ÃÏàjPôò‚oLâý,&‡q&äCùtPæšʶ«ÿ^k­>’nzéë‹­nwä·lþÚçÏ{Íq;¥»í>íß§›¼ûSà—œãQ1ø! ­p † fŒ…‚YÓ{\™ZD1Ly _ RÆ÷2ô)T+ã Mæ.rÊNÞ™·L¨6! u%“[þ6»¯ÔÎ%œaq:õ£âØ €±™]ˆð³"á +†1ˆa a4-C#šÑø1Œ)Vpi«ž!ŽA@ZÈž0¢¬1+o$Îì¦ÇÜÁ0uïËáœòè¾·½vwLÙˆ«8P&!R*ô @íŒkX1ˆ1Éâ‹P^0¸˜0J*íƈÿžÓšI ¢é€Ü·”v¥ŽÂ™£ìò8H·Ñòtm#RÉø$ºÐùñ–dÑ©`ÉBÖȲJUzEŒ vˆ1"Šý ^ñ†qI,›<š¹H fIòQ¥“8 ¦R´1<Äô,kL>ÆjUðtÙ”Ph:´ÝËVñ|ß;ñY/{éÓ[õìcÈz*"ʳUµÔãÌþDÌtª‡^Jäb”á‚ÌZ(¥H aT‹Á €Á„1 apQÅâÂÇÒÅIËbWˆÐ®ðê8”7ëÜSç>±õôtêÛe¨‚¶bºp—.3j[Êϰé’V}lߨ~Ìvês I}•Oÿ®ä_·øÀ²9ˆ=Qqݨ!ˆ |”-™iÑ´IR¤}’”GhZõJà°É97ÍWõÕò¨Eõg ÊTX1‡ë+ªBŸUÄîéTef˜§ú±²'‹l>ÙUWRID;A*pÁµäŒØ1ÆØ°AH’aý ¤ ˆáÖ¸ÄÚ,©m ©ÜÀûèë>þМÀâf°<ܩۀäÔùI Å¼gd*YÐ*õ°L5ê褫]=’¶,Ž5lxqÙXĺ5Ðý*jðŠ7Ltƒ/“~gÛg‚QqÃeØ1&9ˆ $á­j ala%Ø„!| ßH>û‰ÿo+­:U¤Š¶Ãoól½ˆúÞŸ†·l$­èD\.¿W¼H|qaÝëâs¶´uDæ"¡m°LÒ2+3 !&2>ªa ;ò‘™U€¤±u’(ˆµp Â.ÁX)Ø ›V7±‡Û;ÙÒXÌãmqvƒš*˜ÙÒÌmf¹Ò|O4¸ÎÜqž×ü]3ûÆÎõá—å[%€Ýâ'0C!¹3A΢;BÁ8ÿޱqÑÃ-)ȰD¹}µ28pù6¦†Á\H|¾i±£Ò®uJKµ¡ Vü4áëp}У¾:†´†ì>ÿ(c†™²l¦óz¥»šU·;:Ø"ÿð†|À >–Y³g¦|¸Ìv€C{ O(Â¥¤Åèì©b’^”ˆ„K<¢æŠ”öÈç]r× ÉäÙ‚¥½ƒõº¥êp4MÂsƒÏüë4»Ø³´t’ÇgêâãŸÜX¾¬Û1mw‹»ÜçN÷º“ÍíøV;†ØÎ—ëÝ,x¼Öûe÷Â/|ßwÿí÷µ'í†qã]mx¿O^JÏa|äyðèí5Oïr‡ôìÞðe« ]Õ¹:DÎ?§Ø§ÛçɧBÑëDduŒãºæìtªÒõgvìù7{v¹z†·v,Ç”Ol™ µ[¬ÜQßÏ â³å­aô¿Ù¦¶xàÆgÛ;™?~î0W@„ü{X<|âËé]ÚªŸœAVP¦/´ì«õQ»›e£®}6&U™5^ˆ}F}å“€ó3?­cDþ”~šç7Ö~îÇK´7*uwôƒ2­æg½4]4v€u:)FTº‚g£³b!ÈSÉ·k³¶€Í—woÖzÿ¶s^Ø3³wB 8cô÷-ÖqH^¢òC¨ ‡zÞ…gŸÓ}cV‚V3h³Xæ·6'6·âÁz7È/Å—zò3…`øe$ã]dfge†f¶t/*¶^.Ö„†bHȼ×kòƒ§7ª|ÃÁK[({ï·{Pƒ\³whc|f€ø†ËæSU€½$€Ž¸ly¶B (uø…w8ƒ4È…¤×‡ûÒ…H~ÉWCåg‡)ójÈ'T¬òG:xb¨ØTePæU(kdøbÀ†>PåBÚ‡‰@øyˆƒè‰¿¢~·~i{zˆ^™·Œ½aÄXŒXx…ÓxмâŒêÑŒ‡Ñ8oŽÕØÇøxߘÜŽ85ŽæØÇaŒðQŽéˆj³vxò8ôXoUzçŽïXoè¸YØžçÒ¨ùŒùYÍv 9ì¸~ 9(9x‚V÷oÈx~ñh}‘Á˜%]'Xøˆ©gŠV˜ˆŠø‘©v ©’˜Šå÷)ºX{ìbþÆB$É)é’âÿÒ’¶Ç““²¦:;è|€f*bƈ{6‚8©‰@92>ù\Oy!B™Š44zÀ¤†ßez¦f@Å}ø8•R•å3~¦‡IZ›EZcÈlQ9ÛH–eù‡Ë††ô„j–ˆçUcxH—ÛÇ’€Ùt#Ëxé‹{$|ñçŠxè—’5˜ð3—¹~˜‹44“ÃHyH‹%vBÓ'D“™šä–YCšúcš‰šÿ—Tçš)–äȚ褚´iL¶°y›m—›¼i²™…¿™–iÆyœÈy7ø(˜Ãé¾Ùœ/ùœ¯º)ÔIÁ‰N× XÖ¹…‘éâhì(’s(ž7éÓ눞òa—&Y» à‰ì¹Žî)~œ¹‹ÇÇ5û)ŠDYŸš¡žr {xŸx‰)DkêƒEI @1ŸÜŸšUY?iS’ †r8¡·# {È¡iË'“ ®“¡ï ¢+I|**XšBXõ9w™€(ꡬ ¡ÄÙ¢ÏåžW‰ .˜k„H£0ª£Ô(™Djy¬ùy|?*?PØ£ú‘8jSGÊÎh£::¥«Y¥‹w¥QêZ*_Ê¥'‡¥d*;fúŒg: cº¦Ú¦§§nÚ“sªjiª¦u§wš§ýÒxrʧý¶§€ú¦~Z…:¨Öˆ¨ð%¨?©¨>èŽJ‡J“©{v¸«)W³<[“ØåYžâ”<Ë~K  J»g¼c²¹³|Ö†“µ{a–µÊjvL—†Rë•l›’~ ~ek¶Û¹µ[ ñT¥U<˜‹X)·ZëK ;$%ƒÖê·†«N€›˜‰ëJ¹b…‡û¸8·(·Žë? ³™A·ÛœX‹”Ö'+ ù}¸¸ŠöT]ÞG¹”º¹ªÛ¹'f‚w¶Šs¸¤&¦”iLª»¹é…P’è˜SK‹LéEkµðõ´·{¬«™gè\¹]k&¶ZÄ[¼Îê±a«¶:™fØÛ¼$¶”ªVÔE§)½œ{là•‚Ê«>+o{UŠ8¹ Xcˆ;Î¥¹â‹a*¤·Þl¶–k§+pµ6‹—;I˵µ[zó¡;½ˆK¥¿Ps¶#[EÀ<œt+¿F™Àn+µ°[…ü›,¦žŠ¼çÛºœÁÆŠ¶bê¸N˜„˜+Âè¹ÁÑK¸Š‰³X·*ÌžMë´ùV±N €ì[“3ÜÃ$ü K/{« ëÃF|o%›Â8|ÄL x§©Ä‰ÛÄRœn<ŰWŒÅ\´]üÅ‚F¯üZ«¸¯ž:ÆõJ‚`¼ÆlÜÆnüÆ3pÇr<Çt\Çv|ÇxœÇz¼Ç|ÜÇ~üǀȂ<È„\Ȇ|ȈœÈŠ¼ÈŒÜÈŽüÈÉ.’<É”\É–|ɘœÉš¼ÉœÜÉžüɠʢ<ʤ\ʦ|ʨœÊª¼Ê¬ÜÊ®üʰ,˲<Ë´\˶|˸œËº¼Ë¼Ü˾üËÀÌÂ<ÌÄ\ÌÆ|ÌÈœÌʼÌÌÜÌÿÎüÌÐÍÒ<ÍÔ\ÍÝú)á$N†m¨»&¾†Üáþ½àCãú}ÙÔ«Þ?^†ÙkáÛÛ”ß ÂÖ~’r­ã‰õä÷ÍY7­åj)ß0œÃOÞâL~á`þµæYÂI>æœS‚b»åþâ^äIèãÑ æf~ดæO­…|ùÁ¨lN¾¾àMµè«ÛnÈ×–eåM9´r6å*þÙ¿‹}Ù‹çù͇En˜eÙR~é,MÔ5Þ•îkɽ“’Þè”NÒäTõçžÙ*þæBK7¹BþÌ¿,[×ýp8Ø]#ÙiÚå<ÙôtÁ¿¾ÝY…¿Æn¢:Š_iÖ¸NÄYýBÃ&Ü<Ã1m ‹Ò^׫æú|¿!®™‚í¿£µìñ÷‚ÎÒоí»ôØåŽkïþ¹ìPÝþÔ9:ãC­ï4ÍPôûÑ©±â&MuE}Å8M/ÑJÞø¾ïN Õÿ^Ó™*ð€¥rlðEÍŒB»ÔÎ9ØKlÂý3;aúPE Ä÷^ñ„ê|%¿9#?Bù¢ð˜ÒÁšÐûM¦0/°ŸÞ«4ðs:LálÚüóB«?ôFO<¹„¬ôÇÌô‚ìôÄÌ•O_óº|ðlõÃÔ{¬õ½ ·Q€ìõYïðyü¿¿ü¼}löÀŒé_ßð¾|ócŸóU÷uìö» g_ɼóíÍzOÏÐÜ÷3Ï÷ øMLø:/øŒløG¬ø´Êø>ìøŸ ù3,ùF˜Jù"lù‘Šù¬ùŠÊùóëùéŒø‹ úÒKú|jú·‹úð,úЬú¸;ø¬ŸÈ®¹³¿°±Èµ¸¹oó·Ȼ﷿﫽BoÈÁo¶Å°ûÉŸøÃ_ÈÇ¿´ÏߢѳӢ՟±×?¡Ù¯°Û?ÂË?úÍ¿ôá?Èݰå_ŸçO°é¿Âã?õߺßúíõñ¿öï/ûóÿÇëÿ¯ù¦÷ïÇàß@‚ D˜PáB† >„QâDŠ-^ĘQãFŽ ôRäH’%MžD™2"H•-]¾„SæLš"YÖÄ™SçNž3oöTèP¢E%þ4šTéR¦#‘6…UêTªŸVÅšU«Î«[½~öbW±eÍžuHíZ¶m—ªuW.U¸síÞÅ[²n^¾}kîõXðà‚€ F¬ÑpbÆÍ.vƒY²AÈ“-_VZóæÁš9í3ôhÉžIŸFÒtjÖ`W·†;­lÚr_ׯMûvnÞCw÷>úwpâ‹'>ùr•Ê™?ï ]:QçÓ­Û­~]{ÅìÛ½?þfwñå³’7Ÿþzõíߺ‡Ï‘}|ú@ç×·~ÿ~šúù3÷ï?›ÿ°@„40AÕTAÄÈA½ B /Ä0C 7ä°C?1Ä '¬MDOD1EG$1) 3kQ¶]ŒÑ¨m¬¶‹Ú1G†zôÍGÖ€ŠH!‚Ì0À,D²B‹L3òȪ’\ " [º*J)¢òGîr2&-·ŒªË…4»I¿0‘$“§ŸÔNîÖ+ŒN1Û íM/å¤èÅ,ñ䊲=) “I;×[3N–â¬$CéLQ«¸”Ô*”3=Ï<”ËB µtÑJí|3R U4ÕI?í´ÎLs5!Q)¥ÕQGW•ÔUURP4ôVZÙ|³MetXasõuÙGyE¥5YhE}ÔVd‹ ÕKc•[e¿Õ5Üdg%Ün1Åv2[O%Zt…wYo;ívÓ4¥E7Ý—Ž=ðR0ǸVI 6àpË6_}ã·ÉjÛ…7â„¥…—RF-˜âkv©áXžáxuYâ‘=íjLŽíSøcq5vW佨ÜyÛ]9%ñ=¹æ˜ 6u\g–yãœÛyb“}.yb› ³öéZ×tñùh½>JôSŒ£åšÉ …NØQEÙk`·­ÚêÀöªVkK»vûk‡Q~j¹=m•gµšê_+ÓVyoX‘ܤÀgk™S½ó.<¯Ãqz<ÇÈzöÙ†Ð^¼ñ»&ÏVóãÜs”B¿StHÏt¾PßWõŽV„=vÙSt¯ÙoÇ=wËk·Qì£BÅœw÷¼žcv…Ç®òâÏÜùí¶5³_ª/«yƽĞúç§Ï\q﵋ûÄ/ÿ|éÄO›|ÊͯüÖgÿ:>7:~×ÜGgûÏÇ_}ý÷ÿ ú*óÖ-ìÓ x¿-o| ÐÿÞ÷¥@j%iþ³XåGÁò1Jƒ÷»WaöÁçP M7#áyÀ% ¦07&c!]H£·yƃ2œakÒtÃå0‡R!  SöCÞñIC$â{êW¥þ%ñ4H!üœHÒMQ‡©³b‘:—EÒø‰‹,Ûâ5Õ1jpe¼L A"­a„ãuæ&9F&JnŒß˜ðXÇ9Ò‘' ÜÿH• Òy‡3ä _~$E~Ž‘´ )NÒ6•´äœ`”I·„.‘šcÝ'9‰A’‰L¥)Ø”TZÍ­T¥Ó6Ë%¢’–[Ù#,õeH]f’—·LTz9ÉDO©4æ E™Ì-µ’™rt&-uùÌ2NS•ä&±9ÊdfÓŠÆô&ƒžN"2“œtÊæ9]HMuþÇ›íÔà;INx.žTg=÷—Ï:ÂSŸyÜÜõùOðÕ“ ß!èA‘÷O…jç  uÝCµ`¶N0-áa0 JÂlô8õèÞ6Rà”¤9 éIq£R•îÒ1-•Qi*JH™’¦×›éX,suSÔð§9bMí9F fħ?¥ÞQ»WÔüË€J]*S¥HT€ Gª§ TíØÓ«NЪRW³×Eíiuªb ægÌJQ¡‡›YëÚtãVYrµvqëUñÚD‘¾Ð­{=kã›×¢6°}-©^+ØâÖ;Ž%’ìÑ KÊ[N6²³,ec™Y¾‹³šåfQÊ?iBç³@ÌÏf§sZV:Ô”¬õªgŸÇIØþM¶õ%n3U[6’·Xm¦y~KVñ ׌ÂUfzLª;æ6×¹ºSÌs¥;]êŠ(|ÕÅnvµ‹"»m×»ß/ú¢šÅÌö~îL+|æGÚ™7€ !|/‹œÛ·³¨EïxÛÿ³ÞËù®·ÀïÜeCkÁ$€)Ç=ë5õ¿¸ð¾>Ó{Ü*i[üì‰ïxµ‘z±ëo ?ØðÞå$;jröí#O2è»YÑØÿ>õ¿\&ÖGœàK??æ‹rG—ŸqEc•í匳Ý+žP×§<ð3>æ³™éÃ=Ä»>᫘ýóµ&{´P Kc56ƒ@d‹›ã¿±5^;• ä¹Î믪@D¾Û¼¤ÀZ³À $; ´@û̸ÕK‹=3Á\Û¡6Û5»´¬„4K¹ šëÙ² "|6"¬!Œ–4”ÀŸ»î‚žkºâºû;(›²÷b»#T2aš’ôª4Ä$~º¯‹êBþ‹Á r$ yCÝ‹Ãq;C «±2”$=C0»¨´ëé3›À1aÄÛ>ö› c 5tGl@ ŽBL­=Ä2¬3[K\­,˯åSž ¯R4E‰®STÅU1\bÅW„EÁÂX¤ÅZlEºÂÅ\ÔÅ]äÅ^ôÅ_Æ`Æa$Æb4ÆcDÆdTÆedÆftÆg„Æh”Æi¤Æj´ÆkÄÆl3ÔÆmäÆnôÆoÇpÇq$Çr4ÇsDÇtTÇudÇvtÇw„Çx”Çy¤Çz´Ç{ÄÇ|ÔÇ}0äÇ~ôÇÈ€È$È‚4ȃDÈ„TÈ…dȆtȇ„Ȉ”ȉ¤ÈŠ´È‹ÄÈŒÔȵäÈŽôÈÉÉ‘$É’4É“| c9M6•tÉV\ÉkI˜|I´‰IŒ3›¬I˹ɞÜÉ™ÔÉ[DÉ¡$Ê¢4Ê‚ôIšTÊ dJžüÉœtÊ¥ŒÊ¦Ê©´ÊªÄJ¨ÌJ—»Jû®C<°ñÊ£ °%ÅP$Ë8: kó<¬vzœ±tªcŠ ã;!,˜¼³½´ÿ»¤Gê °œA¼’Ë3b #L ¾‚#½¯CÌN¢"¡ÄÊ£ÿ*2a§;l7ãéµ¼½[üµˆË€‚½EtËZò'@I§Ç¼™µ#ÀÁãÌ ƒº¶(L¿,BÁËfk¼ÊID»ÄÔ¬KÕ¤¹ÜkÍ¢áLà”Mù1Î÷;™ÆË<©@±;Nºü˲û룿òû̺¼ÄñÉLMkÍñóÎÄ §ÙDN]k8\!ÜK1âMêdM°£5•Kδ«öt?á¼ÎÎŒMèD'[|.u„K¶,Àii9õcüÐh„Ñ´¸l¸ôô+L@ÒÔD‚0‹1¶PÅÿÆ*½Éû´;×Ó¿‘CP…!‹RÛ¸û4¾l´Pã48:{N9õ4š¹A=Í?ŒŸTR;Ï%ÄËQQÒ­’Á«ÉQ¡üCP\* 使ô¿¢#ÓC8Ù“7Óë™É#>¸ Õ.å·ìóËB5¸£Û¶ÙKÌVµ>3¿S•R¸ú$&í:F…Ò(=Gõ»]SÊCÀ {SéÁœß Vü„U´óŒ[δó:°aLÚƒ¹–‘VðLÏR>3Ô¢G=:t:R=j?ê3Àâ @7õÃ&RÖÙ#6×”¹iÝTÒ³?^5¾½ÓTVýŸM‹™øŒ¾xõÖKuµ ¬S ­ÓõÄS?-Ø<µ5…}ÿX.•·\7¬óÜ@á›°ÝÔÕ0 Á?¥´) ›*Ù'¬B3ݘ€W­<â”;ç„¡l}Yø3лk kó¾äs<á´QœúÔ׳ÕY%R½¼A5Õ‘QÌâü·,½¸ç»Xzûí‹¿«»Up]ËòJÙÖS{P*Ä0+|Ü;<.¾]@´Í:æ\YÕƒV»MÝ/TÙ½]Úô×Ì-×…ƒNñªR¶¨Q¬]á¾ ]¿ûÖe½5Žs>©uÙfÖû„VãÝšÍ×/µ3– Þtk˜üÃÁíQ•Q×ZR]­ ® [¯•YÕmÎÓ­¾¦­§´ØŒÝƒºÙ½]ëÑI…“Žm,û¥©%EŒPïÌØÅ%Tf±StBÉýA“uLÆ­\V1µÏuVÖuÜD`TØve%ÿt.­&ÜM/ÞmK)¢ VË,ºÌ-T®ž`­T#®ÜÊYÔÊfaváfÉ®¤áÆá¾aÎa™”a¶à¾qDI,!üÅQ¿’žðp8úl“úÍ|c•âàúàA •IJªüaÞa-îaœÜb/U,þâ+¶á.&ãâÞh¾"îÝkÔÂyÝÆjck|ãäêÔ•šbjìÖ=V5¦^oÔÄ~ªMÝêci× 8%¾chÌN=d9dmüchjdÓRºnT=AöÒnÂpŒÓÒúÄýÄä…cKÞd*%åRîÄu”EPþ¨yôà˜’cXWîªßŠåݪeò¢Ç[–eNÞe´:-^~aîåbþ忚+|$fc+eÆEÈZæaÎEÊfižæÔ¨fk¾fâÚÇlNæ¬òGofæ¹äGqguùGs>ç—HuW^gÐ Hw~çŽHyŽ ˜²g\F–"È|¾gvHþgxîgb)ƒèyž‹„Öçal(†nh‡–+„„è^„¬h‹MŠNÆÓTÈŒÖhí\HifH’Q.éGlH”Né4\éf,á—fÆq‚H–Vè<|H›¾iüªiFÜœFe:œH.¡–H¢þæêi,&‹Dꢦ‹‹|j¨fD§¦ãª¶êj\£©N®R¦êž­H¯þê>ÌH±ëß-kI&k4km mt¬Õ–lsTØŽmÙ&í¢¤íÕžÒÒfG KËÜFb Æív$0úîà¶0pÄàåÎàÜJnåÞÿNK2K eÓaîåæèö­:nÝ_"öÐTæâT¬=áf,µÊîØúÃ^”•#nTÌçú<תU ìÍc›ÝùE¬oMÒ4Õ]År;ƒ+[‹M·,T><9EÒ¿]Ø(Œcµ™îÀý²ÜµoñV­'º¼,:Ô{7gaL};Zø ¸k blé? GüNRÖ–ªm5Ô¾eV5-Õ7ºàüÀè›ãÌ®o};ð?=?Ÿ³ƒUšD{𠦧7’c3 _©]×D»ÚÍäÂar¤Z5q¨ñ»œB§o¿²&opåòL͹“óZ1·îñ~Ùä Î×d^šµónín«íx>öÚáÔ3ûcÝs¡¥Úøöq‡^Ù O:tå;7'pÿ>ÙÈå\ ÙýóÀ$$rFϘ“p%—¬ú.óDG5ó5Ð7Ö—îÛ®Ìí>WÕl_?¯?×­×9_äUpôV Ó\JYõAþõ$>`N/dç øvBÃ]guùtS~ó\7é\®nÑ¡0eï`¾îmŸˆšï(ž!î÷âv[÷sG÷tW÷ug÷vw÷w‡÷x—÷y§÷z·)÷{Ç÷|×÷}ç÷~÷÷ø€ø'ø‚7øƒGø„Wø…gø†wø‡‡øˆ$—ø‰§øŠ·ø‹ÇøŒ×øçøŽ÷øùù‘'ù’7ù“Gù”åWù•gù–¿ßr÷O—OÐ'’ùø ÌšW/šÇùýŠ0l_ IÝÞW Ïp‹d2ú.pôøº·Vn˜÷. u‡½˜¨ét€Ø¦z‹õÓ[÷i‚Q¨/± ·i+´Ò ¿ÜÛµ}UÕq­f _öórÛ#_â¥A\n9<âì@8•rUÿzÉ|{Ç!ûöûàœÉ<ÕúNoÜ+eÝÒÃeðÕ»O—Ø9aþ Òò:Æ"LmgŸl+]sT%ñÂã6Ùgû7tº[\!ß@‘ãzK5þ­bñ_Qò‡n0ˆXà@ƒ ÿdˆðáÁˆP,ØðaBˆ +R̈ÑãG‡ 16,9‘$ÃŽ"%"dé¥D“"W*t™ñâÈœ:wòìé§ÏŸ*ƒ-jô(УJ—2mêô)Ô¨R§R­2©AŽ ÊìºQ#Í›‡ji$Ö‡rÝ Ô+ذ0 jʼnÕeĺ;ÓZí‹Ö/àÀFù .lø0âÄŠÛÍÙx¦[”fÿQÎýÛVfJÌ# ?Þ\²d¸rÁ¾[²bhlo.L¸5쥯cÓ®mû6n§U³žü2,p¼¢-’öývk[»{eŽ7u˸̣“$»ùzî¨k·sïîý;øðâÇ“'Ÿý<úôêsÏΜ5ïi÷òQoW Ÿîéü×¾Çîx:€Ïý&àpÃö›t”…„Üz :ø „J8!`íQhÙ‚ú·Y*¡F×|îÇßD÷Éw"$†˜–…ºø"Œ1Ê8£v4ö4Ö{ÙÈŽƒíø#A 9äƒ-Êø™ŽÊ9‘.ù$”QJ9eŽTÅÙ”H^i%—]zùåŒMf™$˜A‰Y&ši*ª¹æSå¹ù&œqÂI&›Öy'žyê !q|Êù' º'¡…zhb}"z–Ù¢:ú(¤j¶¨¢‘Zz)¦™Ö#¥ jú)¨¡ŠJ'h†r:*ª©ªiRgz¹Üª±Ê:ëšwÚ*­¹êº«”,Þj'¯Á ;ì„|¹:&°Ä*»,³´½vl”Æ6;-µÕºÆãžÏZ»-·Ý"e^žÚz;.¹åþ‡hy檻®·Ð¢é.»ñÊ«*¼`Ö;/¾ù^zï«úúûo®üv)q0À¬&ÁV&|0à #˪ÃKlê¾[|1› ?Œ1ÇS©q¯‹<ò’ GK2Ê)Óh2”,«ü2ÌT¹\rÌ5ÛœÞÌDæ|3Ï=Ÿ ±ÏA ]ØÎB=4Ò1 äÒI;MrÓ;Fý4ÕO½rÕYk­¥Wüoý5À^ 6Ù_‹ãÙeë&(Ûm» ®Ú?U7Œi»h÷ÅxKJwÝ]ó]%ÐS¨w±‚“ê(á†sÍc}VYøá‰f:y¸âž6šxå?/^jSgÂÊxJHe®á£˜Î[r¤Oå9€rs¾ù鯣»ƒŸÇEŸˆ¦Ådb~5MjâK¦çaè¨Ó.û¯Ç«g{fœø^eÄ·$=w“}SeÍk»é|*¿<~ZG]©)6t >Oš^ÛŸÞ}‘ßãܺå—úúèƒ_þÙO޼áàW;ù¡‡y¶šÔþÎ׿«G ’–òØ ¾~ 4õæÒ' 6†ƒøAGAðÍ0;í©î€7Ÿâ…îz¹k^‡,‚Bï>3íF8¿²‡16Ò¡¿€x!ЇX‹àÜxx›£Ý°oHô›—E&1ŠÎšb«hEؼ­‹^üâ÷ˆØÃ-’q_<ã ~XÆ5Îîd«C#ÙÆÆ9ÐRc›è¨Ç¶LfýÚ# qÓ¤=®qwôãÀ©ÈÚ v’«SÖÈGÞÈ}Áã"¹gÁšPpŽCä–:¹9–a2“£cù>¸BUï|­”!+a‰C¨ AîsaÿJiÊÊ¡3p‘^ KÔ;ùÎW«Ûd*WT“X2°”%ä ¹Hˆ¬žñèÁâ Çyÿ“$2}Ù`Ê{1Œe1]™:k²ó“ëTÍgî§?ѬӛÈ' §é›ò9°Î¬§+±Ô΂rr‘ç9w*zÎ2ïK4³™¾³ØW1&A3êPHô+ìgš d*Å€½AèD3´Pu:I—%Û Ï‰¢rª2…3T¡ 1Z£‡ª/5½ÝE:>Šþï¥F%Ó ª™F“¦ÊüŽ2û3Sµªž¤Ù1iÕ­:rHøä’K¹ú´°^u£ +ZUçU¥n,­i#\ÝÄÖ¹µ®]‹+^ßd×½òµ¯~ÿý+`+ØÁ¶°†=,b[¨¼2¶±Ž},d-©Ø¬‘Õb•¬®.+1ÍbvVœuØg;»ª†U|ðT‘lL;˜ý¬VŸÉíÐ(èZ\võìæF¡ŸP¶U«elŽõ¸ å«Â%iCËê[¡õÒ:¹[MDeŠN¶4ñƒ×Ó^ ¥Ëê:W?fÑÒY¢KJ¦¦ÝåèyÃ÷ÝêÞv¹53éôÄiÑër0{]I3ç)Ñ H@Û¥n:C$L_2“zþqjWü‹\÷*-|Õ¥'ûÉÒ7±3öŒð‚0èO~þS:òíjóçœòjxÁ ~|‡ê©²P˜¢ Kdb,¼†j¸Ä* ¨ Œ“c—ëŽ4¥>Nî‰ÿo–âðNÓ@/~1ê4sdK˜À¸Ú¯=UÜaýê¸Én™mhƒ¬©!WôÀ ²eB§‘JÙA(Ýð‡•e‹z¸:V&1œ{lb-CíJ/tð2YÃ;§°¦RÍ®ðò‚Î??uD4%‘ ¥šS÷xç¿î3+Í{hCÃðµt†Ù½N¥Ö?Ug<Íò¥±Ø9ž’Z«^«å@jHñKµ„.“«£ÅÞö®Úcª.Ø­kÝ)SæšR‘ý5°ƒ-l½ rØÆ>6²…ͳ^ç‹Ù`¥µ®©¹FgŸ•Ú<´v¼°mGm‡1B¥õc=êⲖܳrKmt›ð¸´­ Q5$0Wíö‘½e˜<×­>´ÆæhÛ¹R–þØÆü^—¸Ž ŸùÌÌœ0ÝeÞåñeí]gïW,w *]ë‡Ç2®±©îu]Ól&ÞÎ<2[×̆3á÷žùâÅÄñjw»œ'DÉëýÔŠÞ³pèÃBD¿pÑëÍJäÊÝqÝ5¼Ï¾gñ£'SÌÇÇö¶ø¢_N×ÜŽ­7¹¤Ý|¡ Ü6–‡6¾¦ŸEZN^ûƒ¯@>#?mÙçß2µç¶¸½À½6Ó©Öû'ÿ×Ëè~Tßè×ý!šìýó¿ÿ]Äþ¡J¥Ùü `Ò  rŸëa)–.à¸5`b= –TüMV`ô©j`¦Ø z Ùß`e † ¾× ²ZmaV ®ài¡–Ö Â ã$]gÕ  îé࢜oùà^`aàô ²`¨ aÎNà6!â¬6á¢^Ž^á®]Za¦Ìþ`Ö™&–¡"!.V®!¡ŒáÈÀ! Ê¡­¹á¶¡† æáÐaÇø¡M¢Õð¡.!!≠æÍ!öá.bš$":â#6¢$Ú %V"§©!&ÂÚ%nâY¢'Z"(†b&j$Bà)n)~I*FL+à+6L,Öß,KL-’ß-âÚ*–bîâ³¢/¶U/#]#1>I.êâ1:Ÿ&.#V£3M­%ãÑQã¿X£Øub4þ6žÜ6>c3~ctcö‰ãûÜ…£9–”ÿí_ ‘#¯m¡¹c&ù <êI=*=¶c:êÆ*—gÈ mY Ý£>W Òɼ1àä@’Ô!DŠŽYÑC.¤CîÏÇMW w펟idùÉß>Fà7ÞIð—0]žñ˜ ¡äëTdÆŒ¤¿åÓ“-ýkäœì1žÝ9a·É¤@R“ŠøÝÜmH¾¡Ù‘àe?N]•-ÞÖ1Já©$OÖLÖ SJ$Ü=%MüTT*ʘWjÞÝ)ÑUÎQL SSE•MÕ¤éñážñQZDÐY²giÔÌ]nÊ:òŽã%aZ&¡f©ßLª îåÂ#Ê$æ_¶b6eØ…›aVRe$aö%² &fò`(ùä~)dV¾T-=¤RW@ަF•&FòÈÍÞE-œ4©]Tµªæ;ªÛád™“7Íå€]Y€ nfÿ mÞä8QeÕé’%hç´…S<}^ã­]š©ðµ”tç&mœÔ‰˜Ôí“M”çÛq`wZd©m\é…Ð „¹ãÕezN§e¾^ññ™¡!ž~ Ÿ%åTŠè“bÖ'"&4V“c(‚¨‚Î#ƒ6(>>(„¤f&Û„^(†f¨†n(‡v¨‡~(ˆ†¨ˆŽ(‰–¨‰ž(Ц)¨Š®(‹¶¨‹¾(ŒÆ¨ŒÎ(Ö¨Þ(Žæ¨Žî(ö¨þ(©)‘±©‘)’&©’.)“6)Ød`ÌÆ€:é» çNM&•n‘…aÜqWïu\ ei„reK–érúÓ/M©˜–¢{®àõä*Ç ßœÖ©œÞ)¥á)ê©æ©ŸîéŸö) ª *Ÿ*]Ôv…[p¢$¢j¤j Nª¥V*¦Jj¦Rª¦v*§~*Ÿú(x&eËùÏЭ)Z²~Ígô੢괗FÛéÞð¬.’š*æê´ì*¯þ*°«°+±«±+²&«².+³6«³>+´F«´N+ÓTè:ÿR+Ø ‡Xk°m+·þZzŽ!ÁAæmbewŠkg²¡gfK¸Jæº:š®’¤?転tNÒ½ŽRnùŸ¦ëAêße^) ºkHžÂåDª&k ”Á&Èüëg,æÌ¼¾R,¼Â“ëEî˜k‚ä×líÙf¤YiË]‡Ã즼Û,aIËn ޤ¯fN/™äªº$ÿÌ—~>êw §œIlQ  ñ½f3l1mªÃ…iÊJßÇJÜ*“sIåÈ¡¬GBO¢•¥9§€&'R¢)s’g—…˜›ÖeÎ6'é -vùÜnö¦Ð…^ц“Κi|qÓ€-}ØBŸL*\~ê…çÙ*]vŽ¬Ù±ÑymMZ]Uâ-á&§y¦ÞÜÒä{N¥é{BÇΕk:¦XÍ¥ÜÆ'vÂç©ç»KuB¥xºéx­Wä-.ã^n«ž]ãÖU1ìw ^WÒnåFYäÖÛú˜îÀm‹.Q1T늘˜ù­ç†ÞèYù´©“ÙÍò’P¨e‡°å~ hÎé>W]Ð¥ßÆ¬ñú”ï¢ÎîÓÉ-Æî.™FG›Âf‚ñfãr¥R.#ºNìRio~òN÷¶ ˜.]wlWûÆnöâ§\~¯!Ù^¤—[vïÓr­8îoÀ±ë¾Ö‘Ê^}LF£ì=b)Q0çï1~p½2b¯\ÒÀ^¯â pÀÆä Óp¾~«_ò/k¬¹bkkà0°y+;–±1'±/1i@;libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/Action.html0000644000175000017500000020022510404045230026723 0ustar arnaudarnaud00000000000000 Action (Apache Struts API Documentation)

            org.apache.struts.action
            Class Action

            java.lang.Object
              |
              +--org.apache.struts.action.Action
            
            Direct Known Subclasses:
            DefinitionDispatcherAction, DispatchAction, ForwardAction, IncludeAction, NoOpAction, ReloadDefinitionsAction, SwitchAction, TilesAction, ViewDefinitionsAction

            public class Action
            extends java.lang.Object

            An Action is an adapter between the contents of an incoming HTTP request and the corresponding business logic that should be executed to process this request. The controller (ActionServlet) will select an appropriate Action for each request, create an instance (if necessary), and call the perform method.

            Actions must be programmed in a thread-safe manner, because the controller will share the same instance for multiple simultaneous requests. This means you should design with the following items in mind:

            • Instance and static variables MUST NOT be used to store information related to the state of a particular request. They MAY be used to share global resources across requests for the same action.
            • Access to other resources (JavaBeans, session variables, etc.) MUST be synchronized if those resources require protection. (Generally, however, resource classes should be designed to provide their own protection where necessary.

            When an Action instance is first created, the controller servlet will call setServlet() with a non-null argument to identify the controller servlet instance to which this Action is attached. When the controller servlet is to be shut down (or restarted), the setServlet() method will be called with a null argument, which can be used to clean up any allocated resources in use by this Action.

            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
            Author:
            Craig R. McClanahan, David Graham

            Field Summary
            static java.lang.String ACTION_SERVLET_KEY
                      Deprecated. Use Globals.ACTION_SERVLET_KEY instead.
            static java.lang.String APPLICATION_KEY
                      Deprecated. Replaced by Globals.MODULE_KEY
            static java.lang.String DATA_SOURCE_KEY
                      Deprecated. Replaced by Globals.DATA_SOURCE_KEY
            protected static java.util.Locale defaultLocale
                      The system default Locale.
            static java.lang.String ERROR_KEY
                      Deprecated. Replaced by Globals.ERROR_KEY
            static java.lang.String EXCEPTION_KEY
                      Deprecated. Replaced by Globals.EXCEPTION_KEY
            static java.lang.String FORM_BEANS_KEY
                      Deprecated. Replaced by collection in ModuleConfig
            static java.lang.String FORWARDS_KEY
                      Deprecated. Replaced by collection in ModuleConfig.
            static java.lang.String LOCALE_KEY
                      Deprecated. Replaced by Globals.LOCALE_KEY
            static java.lang.String MAPPING_KEY
                      Deprecated. Replaced by Globals.MAPPING_KEY
            static java.lang.String MAPPINGS_KEY
                      Deprecated. Replaced by collection in ModuleConfig
            static java.lang.String MESSAGE_KEY
                      Deprecated. Replaced by Globals.MESSAGE_KEY
            static java.lang.String MESSAGES_KEY
                      Deprecated. Use Globals.MESSAGES_KEY instead.
            static java.lang.String MULTIPART_KEY
                      Deprecated. Use Globals.MULTIPART_KEY instead.
            static java.lang.String PLUG_INS_KEY
                      Deprecated. Replaced by Globals.PLUG_INS_KEY
            static java.lang.String REQUEST_PROCESSOR_KEY
                      Deprecated. Use Globals.REQUEST_PROCESSOR_KEY instead.
            protected  ActionServlet servlet
                      The controller servlet to which we are attached.
            static java.lang.String SERVLET_KEY
                      Deprecated. Use Globals.SERVLET_KEY instead.
            private static TokenProcessor token
                      An instance of TokenProcessor to use for token functionality.
            static java.lang.String TRANSACTION_TOKEN_KEY
                      Deprecated. Use Globals.TRANSACTION_TOKEN_KEY instead.
             
            Constructor Summary
            Action()
                       
             
            Method Summary
             ActionForward execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
             ActionForward execute(ActionMapping mapping, ActionForm form, javax.servlet.ServletRequest request, javax.servlet.ServletResponse response)
                      Process the specified non-HTTP request, and create the corresponding non-HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
            protected  java.lang.String generateToken(javax.servlet.http.HttpServletRequest request)
                      Generate a new transaction token, to be used for enforcing a single request for a particular transaction.
            protected  javax.sql.DataSource getDataSource(javax.servlet.http.HttpServletRequest request)
                      Return the default data source for the current module.
            protected  javax.sql.DataSource getDataSource(javax.servlet.http.HttpServletRequest request, java.lang.String key)
                      Return the specified data source for the current module.
            protected  java.util.Locale getLocale(javax.servlet.http.HttpServletRequest request)
                      Return the user's currently selected Locale.
            protected  MessageResources getResources()
                      Deprecated. This method can only return the resources for the default module. Use getResources(HttpServletRequest) to get the resources for the current module.
            protected  MessageResources getResources(javax.servlet.http.HttpServletRequest request)
                      Return the default message resources for the current module.
            protected  MessageResources getResources(javax.servlet.http.HttpServletRequest request, java.lang.String key)
                      Return the specified message resources for the current module.
             ActionServlet getServlet()
                      Return the controller servlet instance to which we are attached.
            protected  boolean isCancelled(javax.servlet.http.HttpServletRequest request)
                      Returns true if the current form's cancel button was pressed.
            protected  boolean isTokenValid(javax.servlet.http.HttpServletRequest request)
                      Return true if there is a transaction token stored in the user's current session, and the value submitted as a request parameter with this action matches it.
            protected  boolean isTokenValid(javax.servlet.http.HttpServletRequest request, boolean reset)
                      Return true if there is a transaction token stored in the user's current session, and the value submitted as a request parameter with this action matches it.
             ActionForward perform(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Deprecated. Use the execute() method instead
             ActionForward perform(ActionMapping mapping, ActionForm form, javax.servlet.ServletRequest request, javax.servlet.ServletResponse response)
                      Deprecated. Use the execute() method instead
            protected  void resetToken(javax.servlet.http.HttpServletRequest request)
                      Reset the saved transaction token in the user's session.
            protected  void saveErrors(javax.servlet.http.HttpServletRequest request, ActionErrors errors)
                      Save the specified error messages keys into the appropriate request attribute for use by the <html:errors> tag, if any messages are required.
            protected  void saveMessages(javax.servlet.http.HttpServletRequest request, ActionMessages messages)
                      Save the specified messages keys into the appropriate request attribute for use by the <html:messages> tag (if messages="true" is set), if any messages are required.
            protected  void saveToken(javax.servlet.http.HttpServletRequest request)
                      Save a new transaction token in the user's current session, creating a new session if necessary.
            protected  void setLocale(javax.servlet.http.HttpServletRequest request, java.util.Locale locale)
                      Set the user's currently selected Locale.
             void setServlet(ActionServlet servlet)
                      Set the controller servlet instance to which we are attached (if servlet is non-null), or release any allocated resources (if servlet is null).
            protected  java.lang.String toHex(byte[] buffer)
                      Deprecated. This method will be removed in a release after Struts 1.1.
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
             

            Field Detail

            ACTION_SERVLET_KEY

            public static final java.lang.String ACTION_SERVLET_KEY
            Deprecated. Use Globals.ACTION_SERVLET_KEY instead.

            The context attributes key under which our ActionServlet instance will be stored.

            Since:
            Struts 1.1
            See Also:
            Constant Field Values

            APPLICATION_KEY

            public static final java.lang.String APPLICATION_KEY
            Deprecated. Replaced by Globals.MODULE_KEY

            The base of the context attributes key under which our ModuleConfig data structure will be stored. This will be suffixed with the actual module prefix (including the leading "/" character) to form the actual attributes key.

            For each request processed by the controller servlet, the ModuleConfig object for the module selected by the request URI currently being processed will also be exposed under this key as a request attribute.

            Since:
            Struts 1.1
            See Also:
            Constant Field Values

            DATA_SOURCE_KEY

            public static final java.lang.String DATA_SOURCE_KEY
            Deprecated. Replaced by Globals.DATA_SOURCE_KEY

            The context attributes key under which our default configured data source (which must implement javax.sql.DataSource) is stored, if one is configured for this module.

            See Also:
            Constant Field Values

            ERROR_KEY

            public static final java.lang.String ERROR_KEY
            Deprecated. Replaced by Globals.ERROR_KEY

            The request attributes key under which your action should store an org.apache.struts.action.ActionErrors object, if you are using the corresponding custom tag library elements.

            See Also:
            Constant Field Values

            EXCEPTION_KEY

            public static final java.lang.String EXCEPTION_KEY
            Deprecated. Replaced by Globals.EXCEPTION_KEY

            The request attributes key under which Struts custom tags might store a Throwable that caused them to report a JspException at runtime. This value can be used on an error page to provide more detailed information about what really went wrong.

            See Also:
            Constant Field Values

            FORM_BEANS_KEY

            public static final java.lang.String FORM_BEANS_KEY
            Deprecated. Replaced by collection in ModuleConfig

            The context attributes key under which our org.apache.struts.action.ActionFormBeans collection is normally stored, unless overridden when initializing our ActionServlet.

            See Also:
            Constant Field Values

            FORWARDS_KEY

            public static final java.lang.String FORWARDS_KEY
            Deprecated. Replaced by collection in ModuleConfig.

            The context attributes key under which our org.apache.struts.action.ActionForwards collection is normally stored, unless overridden when initializing our ActionServlet.

            See Also:
            Constant Field Values

            LOCALE_KEY

            public static final java.lang.String LOCALE_KEY
            Deprecated. Replaced by Globals.LOCALE_KEY

            The session attributes key under which the user's selected java.util.Locale is stored, if any. If no such attribute is found, the system default locale will be used when retrieving internationalized messages. If used, this attribute is typically set during user login processing.

            See Also:
            Constant Field Values

            MAPPING_KEY

            public static final java.lang.String MAPPING_KEY
            Deprecated. Replaced by Globals.MAPPING_KEY

            The request attributes key under which our org.apache.struts.ActionMapping instance is passed.

            See Also:
            Constant Field Values

            MAPPINGS_KEY

            public static final java.lang.String MAPPINGS_KEY
            Deprecated. Replaced by collection in ModuleConfig

            The context attributes key under which our org.apache.struts.action.ActionMappings collection is normally stored, unless overridden when initializing our ActionServlet.

            See Also:
            Constant Field Values

            MESSAGE_KEY

            public static final java.lang.String MESSAGE_KEY
            Deprecated. Replaced by Globals.MESSAGE_KEY

            The request attributes key under which your action should store an org.apache.struts.action.ActionMessages object, if you are using the corresponding custom tag library elements.

            Since:
            Struts 1.1
            See Also:
            Constant Field Values

            MESSAGES_KEY

            public static final java.lang.String MESSAGES_KEY
            Deprecated. Use Globals.MESSAGES_KEY instead.

            The base of the context attributes key under which our module MessageResources will be stored. This will be suffixed with the actual module prefix (including the leading "/" character) to form the actual resources key.

            For each request processed by the controller servlet, the MessageResources object for the module selected by the request URI currently being processed will also be exposed under this key as a request attribute.

            See Also:
            Constant Field Values

            MULTIPART_KEY

            public static final java.lang.String MULTIPART_KEY
            Deprecated. Use Globals.MULTIPART_KEY instead.

            The request attributes key under which our multipart class is stored.

            See Also:
            Constant Field Values

            PLUG_INS_KEY

            public static final java.lang.String PLUG_INS_KEY
            Deprecated. Replaced by Globals.PLUG_INS_KEY

            The base of the context attributes key under which an array of PlugIn instances will be stored. This will be suffixed with the actual module prefix (including the leading "/" character) to form the actual attributes key.

            Since:
            Struts 1.1
            See Also:
            Constant Field Values

            REQUEST_PROCESSOR_KEY

            public static final java.lang.String REQUEST_PROCESSOR_KEY
            Deprecated. Use Globals.REQUEST_PROCESSOR_KEY instead.

            The base of the context attributes key under which our RequestProcessor instance will be stored. This will be suffixed with the actual module prefix (including the leading "/" character) to form the actual attributes key.

            Since:
            Struts 1.1
            See Also:
            Constant Field Values

            SERVLET_KEY

            public static final java.lang.String SERVLET_KEY
            Deprecated. Use Globals.SERVLET_KEY instead.

            The context attributes key under which we store the mapping defined for our controller serlet, which will be either a path-mapped pattern (/action/*) or an extension mapped pattern (*.do).

            See Also:
            Constant Field Values

            TRANSACTION_TOKEN_KEY

            public static final java.lang.String TRANSACTION_TOKEN_KEY
            Deprecated. Use Globals.TRANSACTION_TOKEN_KEY instead.

            The session attributes key under which our transaction token is stored, if it is used.

            See Also:
            Constant Field Values

            token

            private static TokenProcessor token
            An instance of TokenProcessor to use for token functionality.


            defaultLocale

            protected static java.util.Locale defaultLocale
            The system default Locale.


            servlet

            protected ActionServlet servlet
            The controller servlet to which we are attached.

            Constructor Detail

            Action

            public Action()
            Method Detail

            getServlet

            public ActionServlet getServlet()
            Return the controller servlet instance to which we are attached.


            setServlet

            public void setServlet(ActionServlet servlet)
            Set the controller servlet instance to which we are attached (if servlet is non-null), or release any allocated resources (if servlet is null).

            Parameters:
            servlet - The new controller servlet, if any

            execute

            public ActionForward execute(ActionMapping mapping,
                                         ActionForm form,
                                         javax.servlet.ServletRequest request,
                                         javax.servlet.ServletResponse response)
                                  throws java.lang.Exception
            Process the specified non-HTTP request, and create the corresponding non-HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic. Return an ActionForward instance describing where and how control should be forwarded, or null if the response has already been completed.

            The default implementation attempts to forward to the HTTP version of this method.

            Parameters:
            mapping - The ActionMapping used to select this instance
            form - The optional ActionForm bean for this request (if any)
            request - The non-HTTP request we are processing
            response - The non-HTTP response we are creating
            Throws:
            java.lang.Exception - if the application business logic throws an exception
            Since:
            Struts 1.1

            execute

            public ActionForward execute(ActionMapping mapping,
                                         ActionForm form,
                                         javax.servlet.http.HttpServletRequest request,
                                         javax.servlet.http.HttpServletResponse response)
                                  throws java.lang.Exception
            Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic. Return an ActionForward instance describing where and how control should be forwarded, or null if the response has already been completed.

            Parameters:
            mapping - The ActionMapping used to select this instance
            form - The optional ActionForm bean for this request (if any)
            request - The HTTP request we are processing
            response - The HTTP response we are creating
            Throws:
            java.lang.Exception - if the application business logic throws an exception
            Since:
            Struts 1.1

            perform

            public ActionForward perform(ActionMapping mapping,
                                         ActionForm form,
                                         javax.servlet.ServletRequest request,
                                         javax.servlet.ServletResponse response)
                                  throws java.io.IOException,
                                         javax.servlet.ServletException
            Deprecated. Use the execute() method instead

            Process the specified non-HTTP request, and create the corresponding non-HTTP response (or forward to another web component that will create it). Return an ActionForward instance describing where and how control should be forwarded, or null if the response has already been completed.

            The default implementation attempts to forward to the HTTP version of this method.

            Parameters:
            mapping - The ActionMapping used to select this instance
            form - The optional ActionForm bean for this request (if any)
            request - The non-HTTP request we are processing
            response - The non-HTTP response we are creating
            Throws:
            java.io.IOException - if an input/output error occurs
            javax.servlet.ServletException - if a servlet exception occurs

            perform

            public ActionForward perform(ActionMapping mapping,
                                         ActionForm form,
                                         javax.servlet.http.HttpServletRequest request,
                                         javax.servlet.http.HttpServletResponse response)
                                  throws java.io.IOException,
                                         javax.servlet.ServletException
            Deprecated. Use the execute() method instead

            Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it). Return an ActionForward instance describing where and how control should be forwarded, or null if the response has already been completed.

            Parameters:
            mapping - The ActionMapping used to select this instance
            form - The optional ActionForm bean for this request (if any)
            request - The HTTP request we are processing
            response - The HTTP response we are creating
            Throws:
            java.io.IOException - if an input/output error occurs
            javax.servlet.ServletException - if a servlet exception occurs

            generateToken

            protected java.lang.String generateToken(javax.servlet.http.HttpServletRequest request)
            Generate a new transaction token, to be used for enforcing a single request for a particular transaction.

            Parameters:
            request - The request we are processing

            getDataSource

            protected javax.sql.DataSource getDataSource(javax.servlet.http.HttpServletRequest request)
            Return the default data source for the current module.

            Parameters:
            request - The servlet request we are processing
            Since:
            Struts 1.1

            getDataSource

            protected javax.sql.DataSource getDataSource(javax.servlet.http.HttpServletRequest request,
                                                         java.lang.String key)
            Return the specified data source for the current module.

            Parameters:
            request - The servlet request we are processing
            key - The key specified in the <message-resources> element for the requested bundle
            Since:
            Struts 1.1

            getLocale

            protected java.util.Locale getLocale(javax.servlet.http.HttpServletRequest request)
            Return the user's currently selected Locale.

            Parameters:
            request - The request we are processing

            getResources

            protected MessageResources getResources()
            Deprecated. This method can only return the resources for the default module. Use getResources(HttpServletRequest) to get the resources for the current module.

            Return the message resources for the default module.


            getResources

            protected MessageResources getResources(javax.servlet.http.HttpServletRequest request)
            Return the default message resources for the current module.

            Parameters:
            request - The servlet request we are processing
            Since:
            Struts 1.1

            getResources

            protected MessageResources getResources(javax.servlet.http.HttpServletRequest request,
                                                    java.lang.String key)
            Return the specified message resources for the current module.

            Parameters:
            request - The servlet request we are processing
            key - The key specified in the <message-resources> element for the requested bundle
            Since:
            Struts 1.1

            isCancelled

            protected boolean isCancelled(javax.servlet.http.HttpServletRequest request)

            Returns true if the current form's cancel button was pressed. This method will check if the Globals.CANCEL_KEY request attribute has been set, which normally occurs if the cancel button generated by CancelTag was pressed by the user in the current request. If true, validation performed by an ActionForm's validate() method will have been skipped by the controller servlet.

            Parameters:
            request - The servlet request we are processing
            See Also:
            CancelTag

            isTokenValid

            protected boolean isTokenValid(javax.servlet.http.HttpServletRequest request)
            Return true if there is a transaction token stored in the user's current session, and the value submitted as a request parameter with this action matches it. Returns false under any of the following circumstances:
            • No session associated with this request
            • No transaction token saved in the session
            • No transaction token included as a request parameter
            • The included transaction token value does not match the transaction token in the user's session

            Parameters:
            request - The servlet request we are processing

            isTokenValid

            protected boolean isTokenValid(javax.servlet.http.HttpServletRequest request,
                                           boolean reset)
            Return true if there is a transaction token stored in the user's current session, and the value submitted as a request parameter with this action matches it. Returns false
            • No session associated with this request
            • No transaction token saved in the session
            • No transaction token included as a request parameter
            • The included transaction token value does not match the transaction token in the user's session

            Parameters:
            request - The servlet request we are processing
            reset - Should we reset the token after checking it?

            resetToken

            protected void resetToken(javax.servlet.http.HttpServletRequest request)
            Reset the saved transaction token in the user's session. This indicates that transactional token checking will not be needed on the next request that is submitted.

            Parameters:
            request - The servlet request we are processing

            saveErrors

            protected void saveErrors(javax.servlet.http.HttpServletRequest request,
                                      ActionErrors errors)
            Save the specified error messages keys into the appropriate request attribute for use by the <html:errors> tag, if any messages are required. Otherwise, ensure that the request attribute is not created.

            Parameters:
            request - The servlet request we are processing
            errors - Error messages object

            saveMessages

            protected void saveMessages(javax.servlet.http.HttpServletRequest request,
                                        ActionMessages messages)
            Save the specified messages keys into the appropriate request attribute for use by the <html:messages> tag (if messages="true" is set), if any messages are required. Otherwise, ensure that the request attribute is not created.

            Parameters:
            request - The servlet request we are processing
            messages - Messages object
            Since:
            Struts 1.1

            saveToken

            protected void saveToken(javax.servlet.http.HttpServletRequest request)
            Save a new transaction token in the user's current session, creating a new session if necessary.

            Parameters:
            request - The servlet request we are processing

            setLocale

            protected void setLocale(javax.servlet.http.HttpServletRequest request,
                                     java.util.Locale locale)
            Set the user's currently selected Locale.

            Parameters:
            request - The request we are processing
            locale - The user's selected Locale to be set, or null to select the server's default Locale

            toHex

            protected java.lang.String toHex(byte[] buffer)
            Deprecated. This method will be removed in a release after Struts 1.1.

            Convert a byte array to a String of hexadecimal digits and return it.

            Parameters:
            buffer - The byte array to be converted


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/ActionError.html0000644000175000017500000004120110404045224027735 0ustar arnaudarnaud00000000000000 ActionError (Apache Struts API Documentation)

            org.apache.struts.action
            Class ActionError

            java.lang.Object
              |
              +--org.apache.struts.action.ActionMessage
                    |
                    +--org.apache.struts.action.ActionError
            
            All Implemented Interfaces:
            java.io.Serializable

            public class ActionError
            extends ActionMessage
            implements java.io.Serializable

            An encapsulation of an individual error message returned by the validate() method of an ActionForm, consisting of a message key (to be used to look up message text in an appropriate message resources database) plus up to four placeholder objects that can be used for parametric replacement in the message text.

            The placeholder objects are referenced in the message text using the same syntax used by the JDK MessageFormat class. Thus, the first placeholder is '{0}', the second is '{1}', etc.

            Since Struts 1.1 ActionError extends ActionMessage.

            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
             
            Fields inherited from class org.apache.struts.action.ActionMessage
            key, values
             
            Constructor Summary
            ActionError(java.lang.String key)
                      Construct an action error with no replacement values.
            ActionError(java.lang.String key, java.lang.Object value0)
                      Construct an action error with the specified replacement values.
            ActionError(java.lang.String key, java.lang.Object[] values)
                      Construct an action error with the specified replacement values.
            ActionError(java.lang.String key, java.lang.Object value0, java.lang.Object value1)
                      Construct an action error with the specified replacement values.
            ActionError(java.lang.String key, java.lang.Object value0, java.lang.Object value1, java.lang.Object value2)
                      Construct an action error with the specified replacement values.
            ActionError(java.lang.String key, java.lang.Object value0, java.lang.Object value1, java.lang.Object value2, java.lang.Object value3)
                      Construct an action error with the specified replacement values.
             
            Methods inherited from class org.apache.struts.action.ActionMessage
            getKey, getValues
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
             

            Constructor Detail

            ActionError

            public ActionError(java.lang.String key)
            Construct an action error with no replacement values.

            Parameters:
            key - Message key for this error message

            ActionError

            public ActionError(java.lang.String key,
                               java.lang.Object value0)
            Construct an action error with the specified replacement values.

            Parameters:
            key - Message key for this error message
            value0 - First replacement value

            ActionError

            public ActionError(java.lang.String key,
                               java.lang.Object value0,
                               java.lang.Object value1)
            Construct an action error with the specified replacement values.

            Parameters:
            key - Message key for this error message
            value0 - First replacement value
            value1 - Second replacement value

            ActionError

            public ActionError(java.lang.String key,
                               java.lang.Object value0,
                               java.lang.Object value1,
                               java.lang.Object value2)
            Construct an action error with the specified replacement values.

            Parameters:
            key - Message key for this error message
            value0 - First replacement value
            value1 - Second replacement value
            value2 - Third replacement value

            ActionError

            public ActionError(java.lang.String key,
                               java.lang.Object value0,
                               java.lang.Object value1,
                               java.lang.Object value2,
                               java.lang.Object value3)
            Construct an action error with the specified replacement values.

            Parameters:
            key - Message key for this error message
            value0 - First replacement value
            value1 - Second replacement value
            value2 - Third replacement value
            value3 - Fourth replacement value

            ActionError

            public ActionError(java.lang.String key,
                               java.lang.Object[] values)
            Construct an action error with the specified replacement values.

            Parameters:
            key - Message key for this message
            values - Array of replacement values


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/ActionErrors.html0000644000175000017500000004204610404045250030127 0ustar arnaudarnaud00000000000000 ActionErrors (Apache Struts API Documentation)

            org.apache.struts.action
            Class ActionErrors

            java.lang.Object
              |
              +--org.apache.struts.action.ActionMessages
                    |
                    +--org.apache.struts.action.ActionErrors
            
            All Implemented Interfaces:
            java.io.Serializable

            public class ActionErrors
            extends ActionMessages
            implements java.io.Serializable

            A class that encapsulates the error messages being reported by the validate() method of an ActionForm. Validation errors are either global to the entire ActionForm bean they are associated with, or they are specific to a particular bean property (and, therefore, a particular input field on the corresponding form).

            Each individual error is described by an ActionError object, which contains a message key (to be looked up in an appropriate message resources database), and up to four placeholder arguments used for parametric substitution in the resulting message.

            IMPLEMENTATION NOTE - It is assumed that these objects are created and manipulated only within the context of a single thread. Therefore, no synchronization is required for access to internal collections.

            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
            Author:
            David Geary, Craig R. McClanahan
            See Also:
            Serialized Form

            Nested Class Summary
             
            Nested classes inherited from class org.apache.struts.action.ActionMessages
            ActionMessages.ActionMessageItem
             
            Field Summary
            static java.lang.String GLOBAL_ERROR
                      The "property name" marker to use for global errors, as opposed to those related to a specific property.
             
            Fields inherited from class org.apache.struts.action.ActionMessages
            GLOBAL_MESSAGE, iCount, messages
             
            Constructor Summary
            ActionErrors()
                      Create an empty ActionErrors object.
            ActionErrors(ActionErrors messages)
                      Create an ActionErrors object initialized with the given messages.
             
            Method Summary
             void add(java.lang.String property, ActionError error)
                      Add an error message to the set of errors for the specified property.
             
            Methods inherited from class org.apache.struts.action.ActionMessages
            add, add, clear, empty, get, get, isEmpty, properties, size, size
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
             

            Field Detail

            GLOBAL_ERROR

            public static final java.lang.String GLOBAL_ERROR
            The "property name" marker to use for global errors, as opposed to those related to a specific property.

            See Also:
            Constant Field Values
            Constructor Detail

            ActionErrors

            public ActionErrors()
            Create an empty ActionErrors object.


            ActionErrors

            public ActionErrors(ActionErrors messages)
            Create an ActionErrors object initialized with the given messages.

            Parameters:
            messages - The messages to be initially added to this object. This parameter can be null.
            Since:
            Struts 1.1
            Method Detail

            add

            public void add(java.lang.String property,
                            ActionError error)
            Add an error message to the set of errors for the specified property.

            Parameters:
            property - Property name (or ActionErrors.GLOBAL_ERROR)
            error - The error message to be added


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/ActionException.html0000644000175000017500000003627410404045246030624 0ustar arnaudarnaud00000000000000 ActionException (Apache Struts API Documentation)

            org.apache.struts.action
            Class ActionException

            java.lang.Object
              |
              +--org.apache.struts.config.ExceptionConfig
                    |
                    +--org.apache.struts.action.ActionException
            
            All Implemented Interfaces:
            java.io.Serializable

            Deprecated. Replaced by org.apache.struts.config.ExceptionConfig

            public class ActionException
            extends ExceptionConfig

            An ActionException represents a potential exception that may occur during delegation to an Action class. Instances of this class may be configured in association with an ActionMapping instance for named lookup of potentially multiple destinations for a particular mapping instance.

            An ActionException has the following minimal set of properties. Additional properties can be provided as needed by subclassses.

            • type - The fully qualified class name of the exception to be associated to a particular ActionMapping.
            • key - (Optional) Message key associated with the particular exception.
            • path - (Optional) Context releative URI that should be redirected to as a result of the exception occuring. Will overide the input form of the associated ActionMapping if one is provided.
            • scope - (Optional) The scope to store the exception in if a problem should occur - defaults to 'request'. Valid values are 'request' and 'session'.
            • hierarchical - (Optional) Defines whether or not the Exception hierarchy should be used when determining if an occuring exception can be assigned to a mapping instance. Default is true.
            • handler - (Optional) The fully qualified class name of the handler, which is responsible to handle this exception. Default is 'org.apache.struts.action.ExceptionHandler'.

            Since:
            Struts 1.1
            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
            Author:
            ldonlan
            See Also:
            Serialized Form

            Field Summary
             
            Fields inherited from class org.apache.struts.config.ExceptionConfig
            bundle, configured, handler, key, path, scope, type
             
            Constructor Summary
            ActionException()
                      Deprecated.  
             
            Method Summary
             ActionError getError()
                      Deprecated. Returns an instance of an ActionError configured for this exception.
             
            Methods inherited from class org.apache.struts.config.ExceptionConfig
            freeze, getBundle, getHandler, getKey, getPath, getScope, getType, setBundle, setHandler, setKey, setPath, setScope, setType, toString
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
             

            Constructor Detail

            ActionException

            public ActionException()
            Deprecated. 
            Method Detail

            getError

            public ActionError getError()
            Deprecated. 
            Returns an instance of an ActionError configured for this exception.

            Returns:
            ActionError


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/ActionForm.html0000644000175000017500000006323510404045206027562 0ustar arnaudarnaud00000000000000 ActionForm (Apache Struts API Documentation)

            org.apache.struts.action
            Class ActionForm

            java.lang.Object
              |
              +--org.apache.struts.action.ActionForm
            
            All Implemented Interfaces:
            java.io.Serializable
            Direct Known Subclasses:
            DynaActionForm, ValidatorForm

            public abstract class ActionForm
            extends java.lang.Object
            implements java.io.Serializable

            An ActionForm is a JavaBean optionally associated with one or more ActionMappings. Such a bean will have had its properties initialized from the corresponding request parameters before the corresonding action's execute method is called.

            When the properties of this bean have been populated, but before the execute method of the action is called, this bean's validate method will be called, which gives the bean a chance to verify that the properties submitted by the user are correct and valid. If this method finds problems, it returns an error messages object that encapsulates those problems, and the controller servlet will return control to the corresponding input form. Otherwise, the validate method returns null, indicating that everything is acceptable and the corresponding Action's execute method should be called.

            This class must be subclassed in order to be instantiated. Subclasses should provide property getter and setter methods for all of the bean properties they wish to expose, plus override any of the public or protected methods for which they wish to provide modified functionality.

            Because ActionForms are JavaBeans, subclasses should also implement Serializable, as required by the JavaBean specification. Some containers require that an object meet all JavaBean requirements in order to use the introspection API upon which ActionForms rely.

            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
            Author:
            Craig R. McClanahan, Ted Husted
            See Also:
            Serialized Form

            Field Summary
            protected  MultipartRequestHandler multipartRequestHandler
                      The MultipartRequestHandler for this form, can be null.
            protected  ActionServlet servlet
                      The controller servlet instance to which we are attached.
             
            Constructor Summary
            ActionForm()
                       
             
            Method Summary
             MultipartRequestHandler getMultipartRequestHandler()
                      Return the MultipartRequestHandler for this form The reasoning behind this is to give form bean developers control over the lifecycle of their multipart requests through the use of the finish() and/or rollback() methods of MultipartRequestHandler.
            protected  ActionServlet getServlet()
                      Return the controller servlet instance to which we are attached.
             ActionServletWrapper getServletWrapper()
                      Return the controller servlet instance to which we are attached.
             void reset(ActionMapping mapping, javax.servlet.http.HttpServletRequest request)
                      Reset all bean properties to their default state.
             void reset(ActionMapping mapping, javax.servlet.ServletRequest request)
                      Reset all bean properties to their default state.
             void setMultipartRequestHandler(MultipartRequestHandler multipartRequestHandler)
                      Set the Handler provides to use in dealing with file uploads.
             void setServlet(ActionServlet servlet)
                      Set the controller servlet instance to which we are attached (if servlet is non-null), or release any allocated resources (if servlet is null).
             ActionErrors validate(ActionMapping mapping, javax.servlet.http.HttpServletRequest request)
                      Validate the properties that have been set for this HTTP request, and return an ActionErrors object that encapsulates any validation errors that have been found.
             ActionErrors validate(ActionMapping mapping, javax.servlet.ServletRequest request)
                      Validate the properties that have been set for this non-HTTP request, and return an ActionErrors object that encapsulates any validation errors that have been found.
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
             

            Field Detail

            servlet

            protected transient ActionServlet servlet
            The controller servlet instance to which we are attached.


            multipartRequestHandler

            protected transient MultipartRequestHandler multipartRequestHandler
            The MultipartRequestHandler for this form, can be null.

            Constructor Detail

            ActionForm

            public ActionForm()
            Method Detail

            getServlet

            protected ActionServlet getServlet()
            Return the controller servlet instance to which we are attached.


            getServletWrapper

            public ActionServletWrapper getServletWrapper()
            Return the controller servlet instance to which we are attached. as an ActionServletWrapper.

            Since:
            Struts 1.0.1
            See Also:
            ActionServletWrapper

            getMultipartRequestHandler

            public MultipartRequestHandler getMultipartRequestHandler()
            Return the MultipartRequestHandler for this form The reasoning behind this is to give form bean developers control over the lifecycle of their multipart requests through the use of the finish() and/or rollback() methods of MultipartRequestHandler. This method will return null if this form's enctype is not "multipart/request-data".

            See Also:
            MultipartRequestHandler

            setServlet

            public void setServlet(ActionServlet servlet)
            Set the controller servlet instance to which we are attached (if servlet is non-null), or release any allocated resources (if servlet is null).

            Parameters:
            servlet - The new controller servlet, if any

            setMultipartRequestHandler

            public void setMultipartRequestHandler(MultipartRequestHandler multipartRequestHandler)
            Set the Handler provides to use in dealing with file uploads.

            Parameters:
            multipartRequestHandler - The Handler to use for fileuploads.

            reset

            public void reset(ActionMapping mapping,
                              javax.servlet.ServletRequest request)
            Reset all bean properties to their default state. This method is called before the properties are repopulated by the controller servlet.

            The default implementation attempts to forward to the HTTP version of this method.

            Parameters:
            mapping - The mapping used to select this instance
            request - The servlet request we are processing

            reset

            public void reset(ActionMapping mapping,
                              javax.servlet.http.HttpServletRequest request)
            Reset all bean properties to their default state. This method is called before the properties are repopulated by the controller servlet.

            The default implementation does nothing. Subclasses should override this method to reset all bean properties to default values.

            This method is not the appropriate place to initialize form values for an "update" type page (this should be done in a setup Action). You mainly need to worry about setting checkbox values to false; most of the time you can leave this method unimplemented.

            Parameters:
            mapping - The mapping used to select this instance
            request - The servlet request we are processing

            validate

            public ActionErrors validate(ActionMapping mapping,
                                         javax.servlet.ServletRequest request)
            Validate the properties that have been set for this non-HTTP request, and return an ActionErrors object that encapsulates any validation errors that have been found. If no errors are found, return null or an ActionErrors object with no recorded error messages.

            The default implementation attempts to forward to the HTTP version of this method.

            Parameters:
            mapping - The mapping used to select this instance
            request - The servlet request we are processing

            validate

            public ActionErrors validate(ActionMapping mapping,
                                         javax.servlet.http.HttpServletRequest request)
            Validate the properties that have been set for this HTTP request, and return an ActionErrors object that encapsulates any validation errors that have been found. If no errors are found, return null or an ActionErrors object with no recorded error messages.

            The default ipmlementation performs no validation and returns null. Subclasses must override this method to provide any validation they wish to perform.

            Parameters:
            mapping - The mapping used to select this instance
            request - The servlet request we are processing


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/ActionFormBean.html0000644000175000017500000003357610404045232030354 0ustar arnaudarnaud00000000000000 ActionFormBean (Apache Struts API Documentation)

            org.apache.struts.action
            Class ActionFormBean

            java.lang.Object
              |
              +--org.apache.struts.config.FormBeanConfig
                    |
                    +--org.apache.struts.action.ActionFormBean
            
            All Implemented Interfaces:
            java.io.Serializable

            public class ActionFormBean
            extends FormBeanConfig

            An ActionFormBean is the definition of a form bean that is loaded from a <form-bean> element in the Struts configuration file. It can be subclassed as necessary to add additional properties.

            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $ Since Struts 1.1 ActionFormBean extends FormBeanConfig.

            NOTE - This class would have been deprecated and replaced by org.apache.struts.config.FormBeanConfig except for the fact that it is part of the public API that existing applications are using.

            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
             
            Fields inherited from class org.apache.struts.config.FormBeanConfig
            configured, dynamic, formProperties, moduleConfig, name, type
             
            Constructor Summary
            ActionFormBean()
                      Construct an instance with default vaslues.
            ActionFormBean(java.lang.String name, java.lang.String type)
                      Construct an instance with the specified values.
             
            Methods inherited from class org.apache.struts.config.FormBeanConfig
            addFormPropertyConfig, findFormPropertyConfig, findFormPropertyConfigs, formBeanClass, freeze, getDynamic, getModuleConfig, getName, getType, removeFormPropertyConfig, setDynamic, setModuleConfig, setName, setType, toString
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
             

            Constructor Detail

            ActionFormBean

            public ActionFormBean()
            Construct an instance with default vaslues.


            ActionFormBean

            public ActionFormBean(java.lang.String name,
                                  java.lang.String type)
            Construct an instance with the specified values.

            Parameters:
            name - Form bean name
            type - Fully qualified class name


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/ActionFormBeans.html0000644000175000017500000004033010404045250030521 0ustar arnaudarnaud00000000000000 ActionFormBeans (Apache Struts API Documentation)

            org.apache.struts.action
            Class ActionFormBeans

            java.lang.Object
              |
              +--org.apache.struts.action.ActionFormBeans
            
            All Implemented Interfaces:
            java.io.Serializable

            Deprecated. Replaced by collection of FormBeanConfig instances in ModuleConfig

            public class ActionFormBeans
            extends java.lang.Object
            implements java.io.Serializable

            Encapsulate a collection of ActionFormBean objects that can be administered and searched, while hiding the internal implementation.

            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  org.apache.commons.collections.FastHashMap formBeans
                      Deprecated. The collection of ActionFormBean instances, keyed by name.
             
            Constructor Summary
            ActionFormBeans()
                      Deprecated.  
             
            Method Summary
             void addFormBean(ActionFormBean formBean)
                      Deprecated. Register a form bean to the set configured for this servlet.
             ActionFormBean findFormBean(java.lang.String name)
                      Deprecated. Return the formBean associated with the specified logical name, if any; otherwise return null.
             java.lang.String[] findFormBeans()
                      Deprecated. Return the set of names for form beans defined in this collection.
             boolean getFast()
                      Deprecated. Return the "fast" mode flag.
             void removeFormBean(ActionFormBean formBean)
                      Deprecated. Deregister a formBean from the set configured for this servlet.
             void setFast(boolean fast)
                      Deprecated. Set the "fast" mode flag.
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
             

            Field Detail

            formBeans

            protected org.apache.commons.collections.FastHashMap formBeans
            Deprecated. 
            The collection of ActionFormBean instances, keyed by name.

            Constructor Detail

            ActionFormBeans

            public ActionFormBeans()
            Deprecated. 
            Method Detail

            getFast

            public boolean getFast()
            Deprecated. 
            Return the "fast" mode flag.


            setFast

            public void setFast(boolean fast)
            Deprecated. 
            Set the "fast" mode flag.

            Parameters:
            fast - The new fast mode flag

            addFormBean

            public void addFormBean(ActionFormBean formBean)
            Deprecated. 
            Register a form bean to the set configured for this servlet.

            Parameters:
            formBean - The formBean to be added

            findFormBean

            public ActionFormBean findFormBean(java.lang.String name)
            Deprecated. 
            Return the formBean associated with the specified logical name, if any; otherwise return null.

            Parameters:
            name - Logical name of the desired form bean

            findFormBeans

            public java.lang.String[] findFormBeans()
            Deprecated. 
            Return the set of names for form beans defined in this collection. If there are no such formBeans, a zero-length array is returned.


            removeFormBean

            public void removeFormBean(ActionFormBean formBean)
            Deprecated. 
            Deregister a formBean from the set configured for this servlet.

            Parameters:
            formBean - The formBean to be deregistered


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/ActionForward.html0000644000175000017500000004261110404045220030252 0ustar arnaudarnaud00000000000000 ActionForward (Apache Struts API Documentation)

            org.apache.struts.action
            Class ActionForward

            java.lang.Object
              |
              +--org.apache.struts.config.ForwardConfig
                    |
                    +--org.apache.struts.action.ActionForward
            
            All Implemented Interfaces:
            java.io.Serializable
            Direct Known Subclasses:
            ForwardingActionForward, RedirectingActionForward

            public class ActionForward
            extends ForwardConfig

            An ActionForward represents a destination to which the controller servlet, ActionServlet, might be directed to perform a RequestDispatcher.forward() or HttpServletResponse.sendRedirect() to, as a result of processing activities of an Action class. Instances of this class may be created dynamically as necessary, or configured in association with an ActionMapping instance for named lookup of potentially multiple destinations for a particular mapping instance.

            An ActionForward has the following minimal set of properties. Additional properties can be provided as needed by subclassses.

            • contextRelative - Should the path value be interpreted as context-relative (instead of module-relative, if it starts with a '/' character? [false]
            • name - Logical name by which this instance may be looked up in relationship to a particular ActionMapping.
            • path - Module-relative or context-relative URI to which control should be forwarded, or an absolute or relative URI to which control should be redirected.
            • redirect - Set to true if the controller servlet should call HttpServletResponse.sendRedirect() on the associated path; otherwise false. [false]

            Since Struts 1.1 this class extends ForwardConfig and inherits the contextRelative property.

            NOTE - This class would have been deprecated and replaced by org.apache.struts.config.ForwardConfig except for the fact that it is part of the public API that existing applications are using.

            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
             
            Fields inherited from class org.apache.struts.config.ForwardConfig
            configured, contextRelative, name, path, redirect
             
            Constructor Summary
            ActionForward()
                      Construct a new instance with default values.
            ActionForward(java.lang.String path)
                      Construct a new instance with the specified path.
            ActionForward(java.lang.String path, boolean redirect)
                      Construct a new instance with the specified path and redirect flag.
            ActionForward(java.lang.String name, java.lang.String path, boolean redirect)
                      Construct a new instance with the specified path and redirect flag.
            ActionForward(java.lang.String name, java.lang.String path, boolean redirect, boolean contextRelative)
                      Construct a new instance with the specified values.
             
            Methods inherited from class org.apache.struts.config.ForwardConfig
            freeze, getContextRelative, getName, getPath, getRedirect, setContextRelative, setName, setPath, setRedirect, toString
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
             

            Constructor Detail

            ActionForward

            public ActionForward()
            Construct a new instance with default values.


            ActionForward

            public ActionForward(java.lang.String path)
            Construct a new instance with the specified path.

            Parameters:
            path - Path for this instance

            ActionForward

            public ActionForward(java.lang.String path,
                                 boolean redirect)
            Construct a new instance with the specified path and redirect flag.

            Parameters:
            path - Path for this instance
            redirect - Redirect flag for this instance

            ActionForward

            public ActionForward(java.lang.String name,
                                 java.lang.String path,
                                 boolean redirect)
            Construct a new instance with the specified path and redirect flag.

            Parameters:
            name - Name of this instance
            path - Path for this instance
            redirect - Redirect flag for this instance

            ActionForward

            public ActionForward(java.lang.String name,
                                 java.lang.String path,
                                 boolean redirect,
                                 boolean contextRelative)
            Construct a new instance with the specified values.

            Parameters:
            name - Name of this instance
            path - Path for this instance
            redirect - Redirect flag for this instance
            contextRelative - Context relative flag for this instance


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/ActionForwards.html0000644000175000017500000004032310404045242030437 0ustar arnaudarnaud00000000000000 ActionForwards (Apache Struts API Documentation)

            org.apache.struts.action
            Class ActionForwards

            java.lang.Object
              |
              +--org.apache.struts.action.ActionForwards
            
            All Implemented Interfaces:
            java.io.Serializable

            Deprecated. Replaced by collection of ForwardConfig instances in ModuleConfig and ActionConfig

            public class ActionForwards
            extends java.lang.Object
            implements java.io.Serializable

            Encapsulate a collection of ActionForward objects that can be administered and searched, while hiding the internal implementation.

            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            private  org.apache.commons.collections.FastHashMap forwards
                      Deprecated. The collection of ActionForward instances, keyed by logical name.
             
            Constructor Summary
            ActionForwards()
                      Deprecated.  
             
            Method Summary
             void addForward(ActionForward forward)
                      Deprecated. Register a logical forwarding to the set configured for this servlet.
             ActionForward findForward(java.lang.String name)
                      Deprecated. Return the forwarding associated with the specified logical name, if any; otherwise return null.
             java.lang.String[] findForwards()
                      Deprecated. Return the set of logical names for forwards defined in this collection.
             boolean getFast()
                      Deprecated. Return the "fast" mode flag.
             void removeForward(ActionForward forward)
                      Deprecated. Deregister a forwarding from the set configured for this servlet.
             void setFast(boolean fast)
                      Deprecated. Set the "fast" mode flag.
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
             

            Field Detail

            forwards

            private org.apache.commons.collections.FastHashMap forwards
            Deprecated. 
            The collection of ActionForward instances, keyed by logical name.

            Constructor Detail

            ActionForwards

            public ActionForwards()
            Deprecated. 
            Method Detail

            getFast

            public boolean getFast()
            Deprecated. 
            Return the "fast" mode flag.


            setFast

            public void setFast(boolean fast)
            Deprecated. 
            Set the "fast" mode flag.

            Parameters:
            fast - The new fast mode flag

            addForward

            public void addForward(ActionForward forward)
            Deprecated. 
            Register a logical forwarding to the set configured for this servlet.

            Parameters:
            forward - The forwarding to be added

            findForward

            public ActionForward findForward(java.lang.String name)
            Deprecated. 
            Return the forwarding associated with the specified logical name, if any; otherwise return null.

            Parameters:
            name - Logical name of the requested forwarding

            findForwards

            public java.lang.String[] findForwards()
            Deprecated. 
            Return the set of logical names for forwards defined in this collection. If there are no such forwards, a zero-length array is returned.


            removeForward

            public void removeForward(ActionForward forward)
            Deprecated. 
            Deregister a forwarding from the set configured for this servlet.

            Parameters:
            forward - The forwarding to be deregistered


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/ActionMapping.html0000644000175000017500000005512410404045216030251 0ustar arnaudarnaud00000000000000 ActionMapping (Apache Struts API Documentation)

            org.apache.struts.action
            Class ActionMapping

            java.lang.Object
              |
              +--org.apache.struts.config.ActionConfig
                    |
                    +--org.apache.struts.action.ActionMapping
            
            All Implemented Interfaces:
            java.io.Serializable
            Direct Known Subclasses:
            RequestActionMapping, SessionActionMapping

            public class ActionMapping
            extends ActionConfig

            An ActionMapping represents the information that the controller servlet, ActionServlet, knows about the mapping of a particular request to an instance of a particular action class. The ActionMapping instance used to select a particular Action is passed on to that Action, thereby providing access to any custom configuration information included with the ActionMapping object.

            Since Struts 1.1 this class extends ActionConfig.

            NOTE - This class would have been deprecated and replaced by org.apache.struts.config.ActionConfig except for the fact that it is part of the public API that existing applications are using.

            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
             
            Fields inherited from class org.apache.struts.config.ActionConfig
            attribute, configured, exceptions, forward, forwards, include, input, moduleConfig, multipartClass, name, parameter, path, prefix, roleNames, roles, scope, suffix, type, unknown, validate
             
            Constructor Summary
            ActionMapping()
                       
             
            Method Summary
             ExceptionConfig findException(java.lang.Class type)
                      Find and return the ExceptionConfig instance defining how exceptions of the specified type should be handled.
             ActionForward findForward(java.lang.String name)
                      Find and return the ForwardConfig instance defining how forwarding to the specified logical name should be handled.
             java.lang.String[] findForwards()
                      Return the logical names of all locally defined forwards for this mapping.
             ActionForward getInputForward()
                      Create (if necessary) and return an ActionForward that corresponds to the input property of this Action.
             
            Methods inherited from class org.apache.struts.config.ActionConfig
            addExceptionConfig, addForwardConfig, findExceptionConfig, findExceptionConfigs, findForwardConfig, findForwardConfigs, freeze, getApplicationConfig, getAttribute, getForward, getInclude, getInput, getModuleConfig, getMultipartClass, getName, getParameter, getPath, getPrefix, getRoleNames, getRoles, getScope, getSuffix, getType, getUnknown, getValidate, removeExceptionConfig, removeForwardConfig, setApplicationConfig, setAttribute, setForward, setInclude, setInput, setModuleConfig, setMultipartClass, setName, setParameter, setPath, setPrefix, setRoles, setScope, setSuffix, setType, setUnknown, setValidate, toString
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
             

            Constructor Detail

            ActionMapping

            public ActionMapping()
            Method Detail

            findException

            public ExceptionConfig findException(java.lang.Class type)

            Find and return the ExceptionConfig instance defining how exceptions of the specified type should be handled. This is performed by checking local and then global configurations for the specified exception's class, and then looking up the superclass chain (again checking local and then global configurations). If no handler configuration can be found, return null.

            Parameters:
            type - Exception class for which to find a handler
            Since:
            Struts 1.1

            findForward

            public ActionForward findForward(java.lang.String name)

            Find and return the ForwardConfig instance defining how forwarding to the specified logical name should be handled. This is performed by checking local and then global configurations for the specified forwarding configuration. If no forwarding configuration can be found, return null.

            Parameters:
            name - Logical name of the forwarding instance to be returned

            findForwards

            public java.lang.String[] findForwards()

            Return the logical names of all locally defined forwards for this mapping. If there are no such forwards, a zero-length array is returned.


            getInputForward

            public ActionForward getInputForward()

            Create (if necessary) and return an ActionForward that corresponds to the input property of this Action.

            Since:
            Struts 1.1


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/ActionMappings.html0000644000175000017500000005373310404045204030435 0ustar arnaudarnaud00000000000000 ActionMappings (Apache Struts API Documentation)

            org.apache.struts.action
            Class ActionMappings

            java.lang.Object
              |
              +--org.apache.struts.action.ActionMappings
            
            All Implemented Interfaces:
            java.io.Serializable

            Deprecated. Replaced by collection of ActionConfig instances in ModuleConfig

            public class ActionMappings
            extends java.lang.Object
            implements java.io.Serializable

            Encapsulate a collection of ActionMapping objects that can be administered and searched, while hiding the internal implementation.

            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  org.apache.commons.collections.FastHashMap mappings
                      Deprecated. The collection of ActionMapping instances, keyed by request path.
            protected  ActionServlet servlet
                      Deprecated. The ActionServlet instance of our owning application.
            protected  ActionMapping unknown
                      Deprecated. The ActionMapping that should handle unknown request paths, if any.
             
            Constructor Summary
            ActionMappings()
                      Deprecated.  
             
            Method Summary
             void addMapping(ActionMapping mapping)
                      Deprecated. Register a logical mapping to the set configured for this servlet.
             ActionMapping findMapping(java.lang.String path)
                      Deprecated. Return the mapping associated with the specified logical name, if any; otherwise return null.
             java.lang.String[] findMappings()
                      Deprecated. Return the set of paths for mappings defined in this collection.
             boolean getFast()
                      Deprecated. Return the "fast" mode flag.
             ActionServlet getServlet()
                      Deprecated. Return the ActionServlet instance of our owning application.
             ActionMapping getUnknown(javax.servlet.http.HttpServletRequest request)
                      Deprecated. Return the Action that should handle unknown request paths, if any.
             ActionMapping getUnknown(javax.servlet.ServletRequest request)
                      Deprecated. Return the Action that should handle unknown request paths, if any.
             void removeMapping(ActionMapping mapping)
                      Deprecated. Deregister a mapping from the set configured for this servlet.
             void setFast(boolean fast)
                      Deprecated. Set the "fast" mode flag.
             void setServlet(ActionServlet servlet)
                      Deprecated. Set the ActionServlet instance of our owning application.
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
             

            Field Detail

            mappings

            protected org.apache.commons.collections.FastHashMap mappings
            Deprecated. 
            The collection of ActionMapping instances, keyed by request path.


            servlet

            protected transient ActionServlet servlet
            Deprecated. 
            The ActionServlet instance of our owning application.


            unknown

            protected ActionMapping unknown
            Deprecated. 
            The ActionMapping that should handle unknown request paths, if any.

            Constructor Detail

            ActionMappings

            public ActionMappings()
            Deprecated. 
            Method Detail

            getFast

            public boolean getFast()
            Deprecated. 
            Return the "fast" mode flag.


            setFast

            public void setFast(boolean fast)
            Deprecated. 
            Set the "fast" mode flag.

            Parameters:
            fast - The new fast mode flag

            getUnknown

            public ActionMapping getUnknown(javax.servlet.ServletRequest request)
            Deprecated. 
            Return the Action that should handle unknown request paths, if any. The default implementation casts the request to HttpServletRequest and calls the corresponding version of this method.

            Parameters:
            request - The servlet request we are processing

            getUnknown

            public ActionMapping getUnknown(javax.servlet.http.HttpServletRequest request)
            Deprecated. 
            Return the Action that should handle unknown request paths, if any.

            Parameters:
            request - The servlet request we are processing

            getServlet

            public ActionServlet getServlet()
            Deprecated. 
            Return the ActionServlet instance of our owning application.


            setServlet

            public void setServlet(ActionServlet servlet)
            Deprecated. 
            Set the ActionServlet instance of our owning application.

            Parameters:
            servlet - The new servlet instance

            addMapping

            public void addMapping(ActionMapping mapping)
            Deprecated. 
            Register a logical mapping to the set configured for this servlet.

            Parameters:
            mapping - The mapping to be added

            findMapping

            public ActionMapping findMapping(java.lang.String path)
            Deprecated. 
            Return the mapping associated with the specified logical name, if any; otherwise return null.

            Parameters:
            path - The request path for which to retrieve a mapping

            findMappings

            public java.lang.String[] findMappings()
            Deprecated. 
            Return the set of paths for mappings defined in this collection. If there are no such mappings, a zero-length array is returned.


            removeMapping

            public void removeMapping(ActionMapping mapping)
            Deprecated. 
            Deregister a mapping from the set configured for this servlet.

            Parameters:
            mapping - The mapping to be deregistered


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/ActionMessage.html0000644000175000017500000004426010404045174030244 0ustar arnaudarnaud00000000000000 ActionMessage (Apache Struts API Documentation)

            org.apache.struts.action
            Class ActionMessage

            java.lang.Object
              |
              +--org.apache.struts.action.ActionMessage
            
            All Implemented Interfaces:
            java.io.Serializable
            Direct Known Subclasses:
            ActionError

            public class ActionMessage
            extends java.lang.Object
            implements java.io.Serializable

            An encapsulation of an individual message returned by the validate() method of an ActionForm, consisting of a message key (to be used to look up message text in an appropriate message resources database) plus up to four placeholder objects that can be used for parametric replacement in the message text.

            Since:
            Struts 1.1
            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
            Author:
            Craig R. McClanahan, David Winterfeldt
            See Also:
            Serialized Form

            Field Summary
            protected  java.lang.String key
                      The message key for this message.
            protected  java.lang.Object[] values
                      The replacement values for this mesasge.
             
            Constructor Summary
            ActionMessage(java.lang.String key)
                      Construct an action message with no replacement values.
            ActionMessage(java.lang.String key, java.lang.Object value0)
                      Construct an action message with the specified replacement values.
            ActionMessage(java.lang.String key, java.lang.Object[] values)
                      Construct an action message with the specified replacement values.
            ActionMessage(java.lang.String key, java.lang.Object value0, java.lang.Object value1)
                      Construct an action message with the specified replacement values.
            ActionMessage(java.lang.String key, java.lang.Object value0, java.lang.Object value1, java.lang.Object value2)
                      Construct an action message with the specified replacement values.
            ActionMessage(java.lang.String key, java.lang.Object value0, java.lang.Object value1, java.lang.Object value2, java.lang.Object value3)
                      Construct an action message with the specified replacement values.
             
            Method Summary
             java.lang.String getKey()
                      Get the message key for this message.
             java.lang.Object[] getValues()
                      Get the replacement values for this message.
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
             

            Field Detail

            key

            protected java.lang.String key
            The message key for this message.


            values

            protected java.lang.Object[] values
            The replacement values for this mesasge.

            Constructor Detail

            ActionMessage

            public ActionMessage(java.lang.String key)
            Construct an action message with no replacement values.

            Parameters:
            key - Message key for this message

            ActionMessage

            public ActionMessage(java.lang.String key,
                                 java.lang.Object value0)
            Construct an action message with the specified replacement values.

            Parameters:
            key - Message key for this message
            value0 - First replacement value

            ActionMessage

            public ActionMessage(java.lang.String key,
                                 java.lang.Object value0,
                                 java.lang.Object value1)
            Construct an action message with the specified replacement values.

            Parameters:
            key - Message key for this message
            value0 - First replacement value
            value1 - Second replacement value

            ActionMessage

            public ActionMessage(java.lang.String key,
                                 java.lang.Object value0,
                                 java.lang.Object value1,
                                 java.lang.Object value2)
            Construct an action message with the specified replacement values.

            Parameters:
            key - Message key for this message
            value0 - First replacement value
            value1 - Second replacement value
            value2 - Third replacement value

            ActionMessage

            public ActionMessage(java.lang.String key,
                                 java.lang.Object value0,
                                 java.lang.Object value1,
                                 java.lang.Object value2,
                                 java.lang.Object value3)
            Construct an action message with the specified replacement values.

            Parameters:
            key - Message key for this message
            value0 - First replacement value
            value1 - Second replacement value
            value2 - Third replacement value
            value3 - Fourth replacement value

            ActionMessage

            public ActionMessage(java.lang.String key,
                                 java.lang.Object[] values)
            Construct an action message with the specified replacement values.

            Parameters:
            key - Message key for this message
            values - Array of replacement values
            Method Detail

            getKey

            public java.lang.String getKey()
            Get the message key for this message.


            getValues

            public java.lang.Object[] getValues()
            Get the replacement values for this message.



            Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000014610423140532011317 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/ActionMessages.ActionMessageItem.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/ActionMessages.ActionMessageItem.htm0000644000175000017500000003331110404045220033576 0ustar arnaudarnaud00000000000000 ActionMessages.ActionMessageItem (Apache Struts API Documentation)

            org.apache.struts.action
            Class ActionMessages.ActionMessageItem

            java.lang.Object
              |
              +--org.apache.struts.action.ActionMessages.ActionMessageItem
            
            All Implemented Interfaces:
            java.io.Serializable
            Enclosing class:
            ActionMessages

            protected class ActionMessages.ActionMessageItem
            extends java.lang.Object
            implements java.io.Serializable

            This class is used to store a set of messages associated with a property/key and the position it was initially added to list.

            See Also:
            Serialized Form

            Field Summary
            protected  int iOrder
                      The position in the list of messages.
            protected  java.util.List list
                      The list of ActionMessages.
             
            Constructor Summary
            ActionMessages.ActionMessageItem(java.util.List list, int iOrder)
                       
             
            Method Summary
             java.util.List getList()
                       
             int getOrder()
                       
             void setList(java.util.List list)
                       
             void setOrder(int iOrder)
                       
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
             

            Field Detail

            list

            protected java.util.List list
            The list of ActionMessages.


            iOrder

            protected int iOrder
            The position in the list of messages.

            Constructor Detail

            ActionMessages.ActionMessageItem

            public ActionMessages.ActionMessageItem(java.util.List list,
                                                    int iOrder)
            Method Detail

            getList

            public java.util.List getList()

            setList

            public void setList(java.util.List list)

            getOrder

            public int getOrder()

            setOrder

            public void setOrder(int iOrder)


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/ActionMessages.html0000644000175000017500000005747710404045250030440 0ustar arnaudarnaud00000000000000 ActionMessages (Apache Struts API Documentation)

            org.apache.struts.action
            Class ActionMessages

            java.lang.Object
              |
              +--org.apache.struts.action.ActionMessages
            
            All Implemented Interfaces:
            java.io.Serializable
            Direct Known Subclasses:
            ActionErrors

            public class ActionMessages
            extends java.lang.Object
            implements java.io.Serializable

            A class that encapsulates messages. Messages can be either global or they are specific to a particular bean property.

            Each individual message is described by an ActionMessage object, which contains a message key (to be looked up in an appropriate message resources database), and up to four placeholder arguments used for parametric substitution in the resulting message.

            IMPLEMENTATION NOTE - It is assumed that these objects are created and manipulated only within the context of a single thread. Therefore, no synchronization is required for access to internal collections.

            Since:
            Struts 1.1
            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
            Author:
            David Geary, Craig R. McClanahan, David Winterfeldt, David Graham
            See Also:
            Serialized Form

            Nested Class Summary
            protected  class ActionMessages.ActionMessageItem
                      This class is used to store a set of messages associated with a property/key and the position it was initially added to list.
             
            Field Summary
            static java.lang.String GLOBAL_MESSAGE
                      The "property name" marker to use for global messages, as opposed to those related to a specific property.
            protected  int iCount
                      The current number of the property/key being added.
            protected  java.util.HashMap messages
                      The accumulated set of ActionMessage objects (represented as an ArrayList) for each property, keyed by property name.
             
            Constructor Summary
            ActionMessages()
                      Create an empty ActionMessages object.
            ActionMessages(ActionMessages messages)
                      Create an ActionMessages object initialized with the given messages.
             
            Method Summary
             void add(ActionMessages messages)
                      Adds the messages from the given ActionMessages object to this set of messages.
             void add(java.lang.String property, ActionMessage message)
                      Add a message to the set of messages for the specified property.
             void clear()
                      Clear all messages recorded by this object.
             boolean empty()
                      Deprecated. Use isEmpty instead.
             java.util.Iterator get()
                      Return the set of all recorded messages, without distinction by which property the messages are associated with.
             java.util.Iterator get(java.lang.String property)
                      Return the set of messages related to a specific property.
             boolean isEmpty()
                      Return true if there are no messages recorded in this collection, or false otherwise.
             java.util.Iterator properties()
                      Return the set of property names for which at least one message has been recorded.
             int size()
                      Return the number of messages recorded for all properties (including global messages).
             int size(java.lang.String property)
                      Return the number of messages associated with the specified property.
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
             

            Field Detail

            GLOBAL_MESSAGE

            public static final java.lang.String GLOBAL_MESSAGE
            The "property name" marker to use for global messages, as opposed to those related to a specific property.

            See Also:
            Constant Field Values

            messages

            protected java.util.HashMap messages
            The accumulated set of ActionMessage objects (represented as an ArrayList) for each property, keyed by property name.


            iCount

            protected int iCount
            The current number of the property/key being added. This is used to maintain the order messages are added.

            Constructor Detail

            ActionMessages

            public ActionMessages()
            Create an empty ActionMessages object.


            ActionMessages

            public ActionMessages(ActionMessages messages)
            Create an ActionMessages object initialized with the given messages.

            Parameters:
            messages - The messages to be initially added to this object. This parameter can be null.
            Since:
            Struts 1.1
            Method Detail

            add

            public void add(java.lang.String property,
                            ActionMessage message)
            Add a message to the set of messages for the specified property. An order of the property/key is maintained based on the initial addition of the property/key.

            Parameters:
            property - Property name (or ActionMessages.GLOBAL_MESSAGE)
            message - The message to be added

            add

            public void add(ActionMessages messages)
            Adds the messages from the given ActionMessages object to this set of messages. The messages are added in the order they are returned from the properties() method. If a message's property is already in the current ActionMessages object it is added to the end of the list for that property. If a message's property is not in the current list it is added to the end of the properties.

            Parameters:
            messages - The ActionMessages object to be added. This parameter can be null.
            Since:
            Struts 1.1

            clear

            public void clear()
            Clear all messages recorded by this object.


            empty

            public boolean empty()
            Deprecated. Use isEmpty instead.

            Return true if there are no messages recorded in this collection, or false otherwise.


            isEmpty

            public boolean isEmpty()
            Return true if there are no messages recorded in this collection, or false otherwise.

            Since:
            Struts 1.1

            get

            public java.util.Iterator get()
            Return the set of all recorded messages, without distinction by which property the messages are associated with. If there are no messages recorded, an empty enumeration is returned.


            get

            public java.util.Iterator get(java.lang.String property)
            Return the set of messages related to a specific property. If there are no such messages, an empty enumeration is returned.

            Parameters:
            property - Property name (or ActionMessages.GLOBAL_MESSAGE)

            properties

            public java.util.Iterator properties()
            Return the set of property names for which at least one message has been recorded. If there are no messages, an empty Iterator is returned. If you have recorded global messages, the String value of ActionMessages.GLOBAL_MESSAGE will be one of the returned property names.


            size

            public int size()
            Return the number of messages recorded for all properties (including global messages). NOTE - it is more efficient to call empty() if all you care about is whether or not there are any messages at all.


            size

            public int size(java.lang.String property)
            Return the number of messages associated with the specified property.

            Parameters:
            property - Property name (or ActionMessages.GLOBAL_MESSAGE)


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/ActionServlet.html0000644000175000017500000024100110404045244030272 0ustar arnaudarnaud00000000000000 ActionServlet (Apache Struts API Documentation)

            org.apache.struts.action
            Class ActionServlet

            java.lang.Object
              |
              +--javax.servlet.GenericServlet
                    |
                    +--javax.servlet.http.HttpServlet
                          |
                          +--org.apache.struts.action.ActionServlet
            
            All Implemented Interfaces:
            java.io.Serializable, javax.servlet.Servlet, javax.servlet.ServletConfig
            Direct Known Subclasses:
            ActionComponentServlet

            public class ActionServlet
            extends javax.servlet.http.HttpServlet

            ActionServlet represents the "controller" in the Model-View-Controller (MVC) design pattern for web applications that is commonly known as "Model 2". This nomenclature originated with a description in the JavaServerPages Specification, version 0.92, and has persisted ever since (in the absence of a better name).

            Generally, a "Model 2" application is architected as follows:

            • The user interface will generally be created with JSP pages, which will not themselves contain any business logic. These pages represent the "view" component of an MVC architecture.
            • Forms and hyperlinks in the user interface that require business logic to be executed will be submitted to a request URI that is mapped to the controller servlet.
            • There will be one instance of this servlet class, which receives and processes all requests that change the state of a user's interaction with the application. This component represents the "controller" component of an MVC architecture.
            • The controller servlet will select and invoke an action class to perform the requested business logic.
            • The action classes will manipulate the state of the application's interaction with the user, typically by creating or modifying JavaBeans that are stored as request or session attributes (depending on how long they need to be available). Such JavaBeans represent the "model" component of an MVC architecture.
            • Instead of producing the next page of the user interface directly, action classes will generally use the RequestDispatcher.forward() facility of the servlet API to pass control to an appropriate JSP page to produce the next page of the user interface.

            The standard version of ActionServlet implements the following logic for each incoming HTTP request. You can override some or all of this functionality by subclassing this servlet and implementing your own version of the processing.

            • Identify, from the incoming request URI, the substring that will be used to select an action procedure.
            • Use this substring to map to the Java class name of the corresponding action class (an implementation of the Action interface).
            • If this is the first request for a particular action class, instantiate an instance of that class and cache it for future use.
            • Optionally populate the properties of an ActionForm bean associated with this mapping.
            • Call the execute method of this action class, passing on a reference to the mapping that was used (thereby providing access to the underlying ActionServlet and ServletContext, as well as any specialized properties of the mapping itself), and the request and response that were passed to the controller by the servlet container.

            The standard version of ActionServlet is configured based on the following servlet initialization parameters, which you will specify in the web application deployment descriptor (/WEB-INF/web.xml) for your application. Subclasses that specialize this servlet are free to define additional initialization parameters. Several of these were deprecated between the 1.0 and 1.1 releases. The deprecated parameters are listed after the nominal parameters.

            • config - Comma-separated list of context-relative path(s) to the XML resource(s) containing the configuration information for the default module. (Multiple files support since Struts 1.1) [/WEB-INF/struts-config.xml].
            • config/${module} - Comma-separated list of Context-relative path(s) to the XML resource(s) containing the configuration information for the module that will use the specified prefix (/${module}). This can be repeated as many times as required for multiple modules. (Since Struts 1.1)
            • convertNull - Force simulation of the Struts 1.0 behavior when populating forms. If set to true, the numeric Java wrapper class types (like java.lang.Integer) will default to null (rather than 0). (Since Struts 1.1) [false]
            • rulesets - Comma-delimited list of fully qualified classnames of additional org.apache.commons.digester.RuleSet instances that should be added to the Digester that will be processing struts-config.xml files. By default, only the RuleSet for the standard configuration elements is loaded. (Since Struts 1.1)
            • validating - Should we use a validating XML parser to process the configuration file (strongly recommended)? [true]

            The following parameters may still be used with the Struts 1.1 release but are deprecated.

            • application - Java class name of the application resources bundle base class. [NONE] DEPRECATED - Configure this using the "parameter" attribute of the <message-resources> element.
            • bufferSize - The size of the input buffer used when processing file uploads. [4096] DEPRECATED - Configure this using the "bufferSize" attribute of the <controller> element.
            • content - Default content type and character encoding to be set on each response; may be overridden by a forwarded-to servlet or JSP page. [text/html] DEPRECATED - Configure this using the "contentType" attribute of the <controller> element.
            • debug - TThe debugging detail level that controls how much information is logged for this servlet. Accepts values 0 (off) and from 1 (least serious) through 6 (most serious). [0] DEPRECATED - Configure the logging detail level in your underlying logging implementation.
            • factory - The Java class name of the MessageResourcesFactory used to create the application MessageResources object. [org.apache.struts.util.PropertyMessageResourcesFactory] DEPRECATED - Configure this using the "factory" attribute of the <message-resources> element.
            • formBean - The Java class name of the ActionFormBean implementation to use [org.apache.struts.action.ActionFormBean]. DEPRECATED - Configure this using the "className" attribute of each <form-bean> element.
            • forward - The Java class name of the ActionForward implementation to use [org.apache.struts.action.ActionForward]. Two convenient classes you may wish to use are:
              • org.apache.struts.action.ForwardingActionForward - Subclass of org.apache.struts.action.ActionForward that defaults the redirect property to false (same as the ActionForward default value).
              • org.apache.struts.action.RedirectingActionForward - Subclass of org.apache.struts.action.ActionForward that defaults the redirect property to true.
              DEPRECATED - Configure this using the "className" attribute of each <forward> element.
            • locale - If set to true, and there is a user session, identify and store an appropriate java.util.Locale object (under the standard key identified by Globals.LOCALE_KEY) in the user's session if there is not a Locale object there already. [true] DEPRECATED - Configure this using the "locale" attribute of the <controller> element.
            • mapping - The Java class name of the ActionMapping implementation to use [org.apache.struts.action.ActionMapping]. Two convenient classes you may wish to use are:
              • org.apache.struts.action.RequestActionMapping - Subclass of org.apache.struts.action.ActionMapping that defaults the scope property to "request".
              • org.apache.struts.action.SessionActionMapping - Subclass of org.apache.struts.action.ActionMapping that defaults the scope property to "session". (Same as the ActionMapping default value).
              DEPRECATED - Configure this using the "className" attribute of each <action> element, or globally for a module by using the "type" attribute of the <action-mappings> element.
            • maxFileSize - The maximum size (in bytes) of a file to be accepted as a file upload. Can be expressed as a number followed by a "K" "M", or "G", which are interpreted to mean kilobytes, megabytes, or gigabytes, respectively. [250M] DEPRECATED - Configure this using the "maxFileSize" attribute of the <controller> element.
            • multipartClass - The fully qualified name of the MultipartRequestHandler implementation class to be used for processing file uploads. If set to none, disables Struts multipart request handling. [org.apache.struts.upload.CommonsMultipartRequestHandler] DEPRECATED - Configure this using the "multipartClass" attribute of the <controller> element.
            • nocache - If set to true, add HTTP headers to every response intended to defeat browser caching of any response we generate or forward to. [false] DEPRECATED - Configure this using the "nocache" attribute of the <controller> element.
            • null - If set to true, set our application resources to return null if an unknown message key is used. Otherwise, an error message including the offending message key will be returned. [true] DEPRECATED - Configure this using the "null" attribute of the <message-resources> element.
            • tempDir - The temporary working directory to use when processing file uploads. [The working directory provided to this web application as a servlet context attribute] DEPRECATED - Configure this using the "tempDir" attribute of the <controller> element.

            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
            Author:
            Craig R. McClanahan, Ted Husted, Martin Cooper, David Graham
            See Also:
            Serialized Form

            Field Summary
            protected  java.lang.String config
                      Comma-separated list of context-relative path(s) to our configuration resource(s) for the default module.
            protected  org.apache.commons.digester.Digester configDigester
                      The Digester used to produce ModuleConfig objects from a Struts configuration file.
            protected  boolean convertNull
                      The flag to request backwards-compatible conversions for form bean properties of the Java wrapper class types.
            protected  org.apache.commons.collections.FastHashMap dataSources
                      The JDBC data sources that has been configured for this module, if any, keyed by the servlet context attribute under which they are stored.
            protected  int debug
                      Deprecated.  
            protected  MessageResources internal
                      The resources object for our internal resources.
            protected  java.lang.String internalName
                      The Java base name of our internal resources.
            protected static org.apache.commons.logging.Log log
                      Commons Logging instance.
            protected  RequestProcessor processor
                      The RequestProcessor instance we will use to process all incoming requests.
            protected  java.lang.String[] registrations
                      The set of public identifiers, and corresponding resource names, for the versions of the configuration file DTDs that we know about.
            protected  java.lang.String servletMapping
                      The URL pattern to which we are mapped in our web application deployment descriptor.
            protected  java.lang.String servletName
                      The servlet name under which we are registered in our web application deployment descriptor.
             
            Fields inherited from class javax.servlet.http.HttpServlet
             
            Constructor Summary
            ActionServlet()
                       
             
            Method Summary
             void addServletMapping(java.lang.String servletName, java.lang.String urlPattern)
                      Remember a servlet mapping from our web application deployment descriptor, if it is for this servlet.
            private  void defaultControllerConfig(ModuleConfig config)
                      Deprecated. Will be removed in a release after Struts 1.1.
            private  void defaultFormBeansConfig(ModuleConfig config)
                      Deprecated. Will be removed in a release after Struts 1.1.
            private  void defaultForwardsConfig(ModuleConfig config)
                      Deprecated. Will be removed in a release after Struts 1.1.
            private  void defaultMappingsConfig(ModuleConfig config)
                      Deprecated. Will be removed in a release after Struts 1.1.
            private  void defaultMessageResourcesConfig(ModuleConfig config)
                      Deprecated. Will be removed in a release after Struts 1.1.
             void destroy()
                      Gracefully shut down this controller servlet, releasing any resources that were allocated at initialization.
            protected  void destroyApplications()
                      Deprecated. replaced by destroyModules()
            protected  void destroyConfigDigester()
                      Gracefully release any configDigester instance that we have created.
            protected  void destroyDataSources()
                      Deprecated. Will no longer be required with module support
            protected  void destroyInternal()
                      Gracefully terminate use of the internal MessageResources.
            protected  void destroyModules()
                      Gracefully terminate use of any modules associated with this application (if any).
             void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process an HTTP "GET" request.
             void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process an HTTP "POST" request.
             javax.sql.DataSource findDataSource(java.lang.String key)
                      Deprecated. Look up data sources directly in servlet context attributes
             ActionFormBean findFormBean(java.lang.String name)
                      Deprecated. Replaced by ModuleConfig.findFormBeanConfig()
             ActionForward findForward(java.lang.String name)
                      Deprecated. Replaced by ModuleConfig.findForwardConfig()
             ActionMapping findMapping(java.lang.String path)
                      Deprecated. Replaced by ModuleConfig.findActionConfig()
            protected  ApplicationConfig getApplicationConfig(javax.servlet.http.HttpServletRequest request)
                      Deprecated. use getModuleConfig(HttpServletRequest)
             int getDebug()
                      Deprecated. Configure the logging detail level in your underlying logging implementation
             MessageResources getInternal()
                      Return the MessageResources instance containing our internal message strings.
            protected  ModuleConfig getModuleConfig(javax.servlet.http.HttpServletRequest request)
                      Return the module configuration object for the currently selected module.
            protected  RequestProcessor getRequestProcessor(ModuleConfig config)
                      Look up and return the RequestProcessor responsible for the specified module, creating a new one if necessary.
             MessageResources getResources()
                      Deprecated. Actions should call Action.getResources(HttpServletRequest) instead of this method, in order to retrieve the resources for the current module.
            private  void handleConfigException(java.lang.String paths, java.lang.Exception e)
                      Simplifies exception handling in the parseModuleConfigFile() method.
             void init()
                      Initialize this servlet.
            protected  ApplicationConfig initApplicationConfig(java.lang.String prefix, java.lang.String path)
                      Deprecated. use initModuleConfig(String,String)
            protected  void initApplicationDataSources(ModuleConfig config)
                      Deprecated. use initModuleDataSources(ModuleConfig)
            protected  void initApplicationMessageResources(ModuleConfig config)
                      Deprecated. use initModuleMessageResources()
            protected  void initApplicationPlugIns(ModuleConfig config)
                      Deprecated. use initModulePlugIns(ModuleConfig)
            protected  org.apache.commons.digester.Digester initConfigDigester()
                      Create (if needed) and return a new Digester instance that has been initialized to process Struts module configuraiton files and configure a corresponding ModuleConfig object (which must be pushed on to the evaluation stack before parsing begins).
            protected  void initDataSources()
                      Deprecated. Replaced by initApplicationDataSources() that takes an ModuleConfig argument. This method does nothing.
            protected  void initInternal()
                      Initialize our internal MessageResources bundle.
            protected  ModuleConfig initModuleConfig(java.lang.String prefix, java.lang.String paths)
                      Initialize the application configuration information for the specified module.
            protected  void initModuleDataSources(ModuleConfig config)
                      Initialize the data sources for the specified module.
            protected  void initModuleMessageResources(ModuleConfig config)
                      Initialize the application MessageResources for the specified module.
            protected  void initModulePlugIns(ModuleConfig config)
                      Initialize the plug ins for the specified module.
            protected  void initOther()
                      Initialize other global characteristics of the controller servlet.
            protected  void initServlet()
                      Initialize the servlet mapping under which our controller servlet is being accessed.
             void log(java.lang.String message, int level)
                      Deprecated. Use commons-logging instead.
            private  void parseModuleConfigFile(java.lang.String prefix, java.lang.String paths, ModuleConfig config, org.apache.commons.digester.Digester digester, java.lang.String path)
                      Parses one module config file.
            protected  void process(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Perform the standard request processing for this request, and create the corresponding response.
             
            Methods inherited from class javax.servlet.http.HttpServlet
            doDelete, doOptions, doPut, doTrace, getLastModified, service, service
             
            Methods inherited from class javax.servlet.GenericServlet
            getInitParameter, getInitParameterNames, getServletConfig, getServletContext, getServletInfo, getServletName, init, log, log
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
             

            Field Detail

            config

            protected java.lang.String config
            Comma-separated list of context-relative path(s) to our configuration resource(s) for the default module.


            configDigester

            protected org.apache.commons.digester.Digester configDigester
            The Digester used to produce ModuleConfig objects from a Struts configuration file.

            Since:
            Struts 1.1

            convertNull

            protected boolean convertNull
            The flag to request backwards-compatible conversions for form bean properties of the Java wrapper class types.

            Since:
            Struts 1.1

            dataSources

            protected org.apache.commons.collections.FastHashMap dataSources
            The JDBC data sources that has been configured for this module, if any, keyed by the servlet context attribute under which they are stored.


            debug

            protected int debug
            Deprecated.  

            The debugging detail level for this servlet.


            internal

            protected MessageResources internal
            The resources object for our internal resources.


            internalName

            protected java.lang.String internalName
            The Java base name of our internal resources.

            Since:
            Struts 1.1

            log

            protected static org.apache.commons.logging.Log log
            Commons Logging instance.

            Since:
            Struts 1.1

            processor

            protected RequestProcessor processor
            The RequestProcessor instance we will use to process all incoming requests.

            Since:
            Struts 1.1

            registrations

            protected java.lang.String[] registrations
            The set of public identifiers, and corresponding resource names, for the versions of the configuration file DTDs that we know about. There MUST be an even number of Strings in this list!


            servletMapping

            protected java.lang.String servletMapping
            The URL pattern to which we are mapped in our web application deployment descriptor. FIXME - multiples???


            servletName

            protected java.lang.String servletName
            The servlet name under which we are registered in our web application deployment descriptor.

            Constructor Detail

            ActionServlet

            public ActionServlet()
            Method Detail

            destroy

            public void destroy()
            Gracefully shut down this controller servlet, releasing any resources that were allocated at initialization.

            Specified by:
            destroy in interface javax.servlet.Servlet
            Overrides:
            destroy in class javax.servlet.GenericServlet

            init

            public void init()
                      throws javax.servlet.ServletException
            Initialize this servlet. Most of the processing has been factored into support methods so that you can override particular functionality at a fairly granular level.

            Overrides:
            init in class javax.servlet.GenericServlet
            Throws:
            javax.servlet.ServletException - if we cannot configure ourselves correctly

            doGet

            public void doGet(javax.servlet.http.HttpServletRequest request,
                              javax.servlet.http.HttpServletResponse response)
                       throws java.io.IOException,
                              javax.servlet.ServletException
            Process an HTTP "GET" request.

            Overrides:
            doGet in class javax.servlet.http.HttpServlet
            Parameters:
            request - The servlet request we are processing
            response - The servlet response we are creating
            Throws:
            java.io.IOException - if an input/output error occurs
            javax.servlet.ServletException - if a servlet exception occurs

            doPost

            public void doPost(javax.servlet.http.HttpServletRequest request,
                               javax.servlet.http.HttpServletResponse response)
                        throws java.io.IOException,
                               javax.servlet.ServletException
            Process an HTTP "POST" request.

            Overrides:
            doPost in class javax.servlet.http.HttpServlet
            Parameters:
            request - The servlet request we are processing
            response - The servlet response we are creating
            Throws:
            java.io.IOException - if an input/output error occurs
            javax.servlet.ServletException - if a servlet exception occurs

            addServletMapping

            public void addServletMapping(java.lang.String servletName,
                                          java.lang.String urlPattern)
            Remember a servlet mapping from our web application deployment descriptor, if it is for this servlet.

            Parameters:
            servletName - The name of the servlet being mapped
            urlPattern - The URL pattern to which this servlet is mapped

            findDataSource

            public javax.sql.DataSource findDataSource(java.lang.String key)
            Deprecated. Look up data sources directly in servlet context attributes

            Return a JDBC data source associated with this module, if any.

            Parameters:
            key - The servlet context attribute key under which this data source is stored, or null for the default.

            findFormBean

            public ActionFormBean findFormBean(java.lang.String name)
            Deprecated. Replaced by ModuleConfig.findFormBeanConfig()

            Return the form bean definition associated with the specified logical name, if any; otherwise return null.

            Parameters:
            name - Logical name of the requested form bean definition

            findForward

            public ActionForward findForward(java.lang.String name)
            Deprecated. Replaced by ModuleConfig.findForwardConfig()

            Return the forwarding associated with the specified logical name, if any; otherwise return null.

            Parameters:
            name - Logical name of the requested forwarding

            findMapping

            public ActionMapping findMapping(java.lang.String path)
            Deprecated. Replaced by ModuleConfig.findActionConfig()

            Return the ActionMapping for the specified path, for the default module.

            Parameters:
            path - Request path for which a mapping is requested

            getDebug

            public int getDebug()
            Deprecated. Configure the logging detail level in your underlying logging implementation

            Return the debugging detail level for this servlet.


            getInternal

            public MessageResources getInternal()
            Return the MessageResources instance containing our internal message strings.

            Since:
            Struts 1.1

            getResources

            public MessageResources getResources()
            Deprecated. Actions should call Action.getResources(HttpServletRequest) instead of this method, in order to retrieve the resources for the current module.

            Return the application resources for the default module, if any.


            log

            public void log(java.lang.String message,
                            int level)
            Deprecated. Use commons-logging instead.

            Log the specified message if the current debugging detail level for this servlet has been set to an equal or higher value. Otherwise, ignore this message.

            Parameters:
            message - Message to be logged
            level - Debugging detail level of this message

            destroyApplications

            protected void destroyApplications()
            Deprecated. replaced by destroyModules()

            Gracefully terminate use of any modules associated with this application (if any).

            Since:
            Struts 1.1

            destroyModules

            protected void destroyModules()
            Gracefully terminate use of any modules associated with this application (if any).

            Since:
            Struts 1.1

            destroyConfigDigester

            protected void destroyConfigDigester()
            Gracefully release any configDigester instance that we have created.

            Since:
            Struts 1.1

            destroyDataSources

            protected void destroyDataSources()
            Deprecated. Will no longer be required with module support

            Gracefully terminate use of the data source associated with this application (if any).


            destroyInternal

            protected void destroyInternal()
            Gracefully terminate use of the internal MessageResources.


            getApplicationConfig

            protected ApplicationConfig getApplicationConfig(javax.servlet.http.HttpServletRequest request)
            Deprecated. use getModuleConfig(HttpServletRequest)

            Return the module configuration object for the currently selected module.

            Parameters:
            request - The servlet request we are processing
            Since:
            Struts 1.1

            getModuleConfig

            protected ModuleConfig getModuleConfig(javax.servlet.http.HttpServletRequest request)
            Return the module configuration object for the currently selected module.

            Parameters:
            request - The servlet request we are processing
            Since:
            Struts 1.1

            getRequestProcessor

            protected RequestProcessor getRequestProcessor(ModuleConfig config)
                                                    throws javax.servlet.ServletException
            Look up and return the RequestProcessor responsible for the specified module, creating a new one if necessary.

            Parameters:
            config - The module configuration for which to acquire and return a RequestProcessor.
            Throws:
            javax.servlet.ServletException - if we cannot instantiate a RequestProcessor instance
            Since:
            Struts 1.1

            initApplicationConfig

            protected ApplicationConfig initApplicationConfig(java.lang.String prefix,
                                                              java.lang.String path)
                                                       throws javax.servlet.ServletException
            Deprecated. use initModuleConfig(String,String)

            Initialize the application configuration information for the specified module.

            Parameters:
            prefix - Module prefix for this module
            path - Context-relative resource path for this modules's configuration resource
            Throws:
            javax.servlet.ServletException - if initialization cannot be performed
            Since:
            Struts 1.1

            initModuleConfig

            protected ModuleConfig initModuleConfig(java.lang.String prefix,
                                                    java.lang.String paths)
                                             throws javax.servlet.ServletException

            Initialize the application configuration information for the specified module.

            Parameters:
            prefix - Module prefix for this module
            paths - Comma-separated list of context-relative resource path(s) for this modules's configuration resource(s)
            Throws:
            javax.servlet.ServletException - if initialization cannot be performed
            Since:
            Struts 1.1

            parseModuleConfigFile

            private void parseModuleConfigFile(java.lang.String prefix,
                                               java.lang.String paths,
                                               ModuleConfig config,
                                               org.apache.commons.digester.Digester digester,
                                               java.lang.String path)
                                        throws javax.servlet.UnavailableException
            Parses one module config file.

            Parameters:
            prefix -
            paths -
            config -
            digester - Digester instance that does the parsing
            path - The path to the config file to parse.
            Throws:
            javax.servlet.UnavailableException

            handleConfigException

            private void handleConfigException(java.lang.String paths,
                                               java.lang.Exception e)
                                        throws javax.servlet.UnavailableException
            Simplifies exception handling in the parseModuleConfigFile() method.

            Parameters:
            paths -
            e -
            Throws:
            javax.servlet.UnavailableException

            initApplicationDataSources

            protected void initApplicationDataSources(ModuleConfig config)
                                               throws javax.servlet.ServletException
            Deprecated. use initModuleDataSources(ModuleConfig)

            Initialize the data sources for the specified module.

            Parameters:
            config - ModuleConfig information for this module
            Throws:
            javax.servlet.ServletException - if initialization cannot be performed
            Since:
            Struts 1.1

            initModuleDataSources

            protected void initModuleDataSources(ModuleConfig config)
                                          throws javax.servlet.ServletException

            Initialize the data sources for the specified module.

            Parameters:
            config - ModuleConfig information for this module
            Throws:
            javax.servlet.ServletException - if initialization cannot be performed
            Since:
            Struts 1.1

            initApplicationPlugIns

            protected void initApplicationPlugIns(ModuleConfig config)
                                           throws javax.servlet.ServletException
            Deprecated. use initModulePlugIns(ModuleConfig)

            Initialize the plug ins for the specified module.

            Parameters:
            config - ModuleConfig information for this module
            Throws:
            javax.servlet.ServletException - if initialization cannot be performed
            Since:
            Struts 1.1

            initModulePlugIns

            protected void initModulePlugIns(ModuleConfig config)
                                      throws javax.servlet.ServletException

            Initialize the plug ins for the specified module.

            Parameters:
            config - ModuleConfig information for this module
            Throws:
            javax.servlet.ServletException - if initialization cannot be performed
            Since:
            Struts 1.1

            initApplicationMessageResources

            protected void initApplicationMessageResources(ModuleConfig config)
                                                    throws javax.servlet.ServletException
            Deprecated. use initModuleMessageResources()

            Initialize the application MessageResources for the specified module.

            Parameters:
            config - ModuleConfig information for this module
            Throws:
            javax.servlet.ServletException - if initialization cannot be performed
            Since:
            Struts 1.1

            initModuleMessageResources

            protected void initModuleMessageResources(ModuleConfig config)
                                               throws javax.servlet.ServletException

            Initialize the application MessageResources for the specified module.

            Parameters:
            config - ModuleConfig information for this module
            Throws:
            javax.servlet.ServletException - if initialization cannot be performed
            Since:
            Struts 1.1

            initConfigDigester

            protected org.apache.commons.digester.Digester initConfigDigester()
                                                                       throws javax.servlet.ServletException

            Create (if needed) and return a new Digester instance that has been initialized to process Struts module configuraiton files and configure a corresponding ModuleConfig object (which must be pushed on to the evaluation stack before parsing begins).

            Throws:
            javax.servlet.ServletException - if a Digester cannot be configured
            Since:
            Struts 1.1

            initDataSources

            protected void initDataSources()
                                    throws javax.servlet.ServletException
            Deprecated. Replaced by initApplicationDataSources() that takes an ModuleConfig argument. This method does nothing.

            Initialize data sources for the default module. This method signature is maintained only for backwards compatibility, and will be removed in a subsequent release.

            javax.servlet.ServletException

            initInternal

            protected void initInternal()
                                 throws javax.servlet.ServletException
            Initialize our internal MessageResources bundle.

            Throws:
            javax.servlet.ServletException - if we cannot initialize these resources

            initOther

            protected void initOther()
                              throws javax.servlet.ServletException
            Initialize other global characteristics of the controller servlet.

            Throws:
            javax.servlet.ServletException - if we cannot initialize these resources

            initServlet

            protected void initServlet()
                                throws javax.servlet.ServletException
            Initialize the servlet mapping under which our controller servlet is being accessed. This will be used in the &html:form> tag to generate correct destination URLs for form submissions.

            Throws:
            javax.servlet.ServletException - if error happens while scanning web.xml

            process

            protected void process(javax.servlet.http.HttpServletRequest request,
                                   javax.servlet.http.HttpServletResponse response)
                            throws java.io.IOException,
                                   javax.servlet.ServletException
            Perform the standard request processing for this request, and create the corresponding response.

            Parameters:
            request - The servlet request we are processing
            response - The servlet response we are creating
            Throws:
            java.io.IOException - if an input/output error occurs
            javax.servlet.ServletException - if a servlet exception is thrown

            defaultControllerConfig

            private void defaultControllerConfig(ModuleConfig config)
            Deprecated. Will be removed in a release after Struts 1.1.

            Perform backwards-compatible configuration of the default module's controller configuration from servlet initialization parameters (as were used in Struts 1.0).

            Parameters:
            config - The ModuleConfig object for the default module
            Since:
            Struts 1.1

            defaultFormBeansConfig

            private void defaultFormBeansConfig(ModuleConfig config)
            Deprecated. Will be removed in a release after Struts 1.1.

            Perform backwards-compatible configuration of an ActionFormBeans collection, and expose it as a servlet context attribute (as was used in Struts 1.0). Note that the current controller code does not (and should not) reference this attribute for any reason.

            Parameters:
            config - The ModuleConfig object for the default app
            Since:
            Struts 1.1

            defaultForwardsConfig

            private void defaultForwardsConfig(ModuleConfig config)
            Deprecated. Will be removed in a release after Struts 1.1.

            Perform backwards-compatible configuration of an ActionForwards collection, and expose it as a servlet context attribute (as was used in Struts 1.0). Note that the current controller code does not (and should not) reference this attribute for any reason.

            Parameters:
            config - The ModuleConfig object for the default app
            Since:
            Struts 1.1

            defaultMappingsConfig

            private void defaultMappingsConfig(ModuleConfig config)
            Deprecated. Will be removed in a release after Struts 1.1.

            Perform backwards-compatible configuration of an ActionMappings collection, and expose it as a servlet context attribute (as was used in Struts 1.0). Note that the current controller code does not (and should not) reference this attribute for any reason.

            Parameters:
            config - The ModuleConfig object for the default app
            Since:
            Struts 1.1

            defaultMessageResourcesConfig

            private void defaultMessageResourcesConfig(ModuleConfig config)
            Deprecated. Will be removed in a release after Struts 1.1.

            Perform backwards-compatible configuration of the default module's message resources configuration from servlet initialization parameters (as were used in Struts 1.0).

            Parameters:
            config - The ModuleConfig object for the default module
            Since:
            Struts 1.1


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/ActionServletWrapper.html0000644000175000017500000003373610404045226031651 0ustar arnaudarnaud00000000000000 ActionServletWrapper (Apache Struts API Documentation)

            org.apache.struts.action
            Class ActionServletWrapper

            java.lang.Object
              |
              +--org.apache.struts.action.ActionServletWrapper
            

            public class ActionServletWrapper
            extends java.lang.Object

            Provide a wrapper around an ActionServlet to expose only those methods needed by other objects. When used with an ActionForm, subclasses must be careful that they do not return an object with public getters and setters that could be exploited by automatic population of properties.

            Since:
            Struts 1.0.1
            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
            Author:
            Craig R. McClanahan, Ted Husted

            Field Summary
            protected  ActionServlet servlet
                      The controller servlet instance to which we are attached.
             
            Constructor Summary
            ActionServletWrapper(ActionServlet servlet)
                      Create object and set servlet property.
             
            Method Summary
             void log(java.lang.String message)
                      Log message.
             void log(java.lang.String message, int level)
                      Deprecated. Logging should now use the commons logging
             void setServletFor(MultipartRequestHandler object)
                      Set servlet to a MultipartRequestHandler.
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
             

            Field Detail

            servlet

            protected transient ActionServlet servlet
            The controller servlet instance to which we are attached.

            Constructor Detail

            ActionServletWrapper

            public ActionServletWrapper(ActionServlet servlet)
            Create object and set servlet property.

            Parameters:
            servlet - ActionServlet to wrap
            Method Detail

            log

            public void log(java.lang.String message,
                            int level)
            Deprecated. Logging should now use the commons logging

            Log the specified message if the current debugging detail level for this servlet has been set to an equal or higher value. Otherwise, ignore this message.

            Parameters:
            message - Message to be logged
            level - Debugging detail level of this message

            log

            public void log(java.lang.String message)
            Log message.

            Parameters:
            message -

            setServletFor

            public void setServletFor(MultipartRequestHandler object)
            Set servlet to a MultipartRequestHandler.

            Parameters:
            object - The MultipartRequestHandler :FIXME: Should this be based on an "setServlet" interface or introspection for a setServlet method? Or, is it safer to just add the types we want as we want them?


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/DynaActionForm.html0000644000175000017500000011115510404045210030364 0ustar arnaudarnaud00000000000000 DynaActionForm (Apache Struts API Documentation)

            org.apache.struts.action
            Class DynaActionForm

            java.lang.Object
              |
              +--org.apache.struts.action.ActionForm
                    |
                    +--org.apache.struts.action.DynaActionForm
            
            All Implemented Interfaces:
            org.apache.commons.beanutils.DynaBean, java.io.Serializable
            Direct Known Subclasses:
            DynaValidatorForm

            public class DynaActionForm
            extends ActionForm
            implements org.apache.commons.beanutils.DynaBean

            Specialized subclass of ActionForm that allows the creation of form beans with dynamic sets of properties, without requiring the developer to create a Java class for each type of form bean.

            USAGE NOTE - Since Struts 1.1, the reset() method no longer initializes property values to those specified in <form-property> elements in the Struts module configuration file. If you wish to utilize that behavior, the simplest solution is to subclass DynaActionForm and call the initialize() method inside it.

            Since:
            Struts 1.1
            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  DynaActionFormClass dynaClass
                      The DynaActionFormClass with which we are associated.
            protected  java.util.HashMap dynaValues
                      The set of property values for this DynaActionForm, keyed by property name.
             
            Fields inherited from class org.apache.struts.action.ActionForm
            multipartRequestHandler, servlet
             
            Constructor Summary
            DynaActionForm()
                       
             
            Method Summary
             boolean contains(java.lang.String name, java.lang.String key)
                      Indicates if the specified mapped property contain a value for the specified key value.
             java.lang.Object get(java.lang.String name)
                      Return the value of a simple property with the specified name.
             java.lang.Object get(java.lang.String name, int index)
                      Return the value of an indexed property with the specified name.
             java.lang.Object get(java.lang.String name, java.lang.String key)
                      Return the value of a mapped property with the specified name, or null if there is no value for the specified key.
             org.apache.commons.beanutils.DynaClass getDynaClass()
                      Return the DynaClass instance that describes the set of properties available for this DynaBean.
            protected  org.apache.commons.beanutils.DynaProperty getDynaProperty(java.lang.String name)
                      Return the property descriptor for the specified property name.
             java.util.Map getMap()
                      Returns the Map containing the property values.
             void initialize(ActionMapping mapping)
                      Initialize all bean properties to their initial values, as specified in the FormPropertyConfig elements associated with the definition of this DynaActionForm.
            protected  boolean isDynaAssignable(java.lang.Class dest, java.lang.Class source)
                      Indicates if an object of the source class is assignable to the destination class.
             void remove(java.lang.String name, java.lang.String key)
                      Remove any existing value for the specified key on the specified mapped property.
             void reset(ActionMapping mapping, javax.servlet.http.HttpServletRequest request)
                      Reset all bean properties to their default state.
             void reset(ActionMapping mapping, javax.servlet.ServletRequest request)
                      Reset all bean properties to their default state.
             void set(java.lang.String name, int index, java.lang.Object value)
                      Set the value of an indexed property with the specified name.
             void set(java.lang.String name, java.lang.Object value)
                      Set the value of a simple property with the specified name.
             void set(java.lang.String name, java.lang.String key, java.lang.Object value)
                      Set the value of a mapped property with the specified name.
            (package private)  void setDynaActionFormClass(DynaActionFormClass dynaClass)
                      Set the DynaActionFormClass instance that we are associated with.
             java.lang.String toString()
                      Render a String representation of this object.
             
            Methods inherited from class org.apache.struts.action.ActionForm
            getMultipartRequestHandler, getServlet, getServletWrapper, setMultipartRequestHandler, setServlet, validate, validate
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
             

            Field Detail

            dynaClass

            protected DynaActionFormClass dynaClass
            The DynaActionFormClass with which we are associated.


            dynaValues

            protected java.util.HashMap dynaValues
            The set of property values for this DynaActionForm, keyed by property name.

            Constructor Detail

            DynaActionForm

            public DynaActionForm()
            Method Detail

            initialize

            public void initialize(ActionMapping mapping)

            Initialize all bean properties to their initial values, as specified in the FormPropertyConfig elements associated with the definition of this DynaActionForm.

            Parameters:
            mapping - The mapping used to select this instance
            Since:
            Struts 1.1

            reset

            public void reset(ActionMapping mapping,
                              javax.servlet.ServletRequest request)

            Reset all bean properties to their default state. This method is called before the properties are repopulated by the controller servlet.

            The default implementation attempts to forward to the HTTP version of this method.

            Overrides:
            reset in class ActionForm
            Parameters:
            mapping - The mapping used to select this instance
            request - The servlet request we are processing

            reset

            public void reset(ActionMapping mapping,
                              javax.servlet.http.HttpServletRequest request)

            Reset all bean properties to their default state. This method is called before the properties are repopulated by the controller servlet.

            The default implementation (since Struts 1.1) does nothing. Subclasses may override this method to reset bean properties to default values, or the initialize() method may be used to initialize property values to those provided in the form property configuration information (which was the previous behavior of this method).

            Overrides:
            reset in class ActionForm
            Parameters:
            mapping - The mapping used to select this instance
            request - The servlet request we are processing

            contains

            public boolean contains(java.lang.String name,
                                    java.lang.String key)
            Indicates if the specified mapped property contain a value for the specified key value.

            Specified by:
            contains in interface org.apache.commons.beanutils.DynaBean
            Parameters:
            name - Name of the property to check
            key - Name of the key to check
            Throws:
            java.lang.IllegalArgumentException - if there is no property of the specified name

            get

            public java.lang.Object get(java.lang.String name)
            Return the value of a simple property with the specified name.

            Specified by:
            get in interface org.apache.commons.beanutils.DynaBean
            Parameters:
            name - Name of the property whose value is to be retrieved
            Throws:
            java.lang.IllegalArgumentException - if there is no property of the specified name
            java.lang.NullPointerException - if the type specified for the property is invalid

            get

            public java.lang.Object get(java.lang.String name,
                                        int index)
            Return the value of an indexed property with the specified name.

            Specified by:
            get in interface org.apache.commons.beanutils.DynaBean
            Parameters:
            name - Name of the property whose value is to be retrieved
            index - Index of the value to be retrieved
            Throws:
            java.lang.IllegalArgumentException - if there is no property of the specified name
            java.lang.IllegalArgumentException - if the specified property exists, but is not indexed
            java.lang.IndexOutOfBoundsException - if the specified index is outside the range of the underlying property
            java.lang.NullPointerException - if no array or List has been initialized for this property

            get

            public java.lang.Object get(java.lang.String name,
                                        java.lang.String key)
            Return the value of a mapped property with the specified name, or null if there is no value for the specified key.

            Specified by:
            get in interface org.apache.commons.beanutils.DynaBean
            Parameters:
            name - Name of the property whose value is to be retrieved
            key - Key of the value to be retrieved
            Throws:
            java.lang.IllegalArgumentException - if there is no property of the specified name
            java.lang.IllegalArgumentException - if the specified property exists, but is not mapped

            getDynaClass

            public org.apache.commons.beanutils.DynaClass getDynaClass()
            Return the DynaClass instance that describes the set of properties available for this DynaBean.

            Specified by:
            getDynaClass in interface org.apache.commons.beanutils.DynaBean

            getMap

            public java.util.Map getMap()
            Returns the Map containing the property values. This is done mostly to facilitate accessing the DynaActionForm through JavaBeans accessors, in order to use the JavaServer Pages Standard Tag Library.

            For instance, the normal JSTL EL syntax for accessing an ActionForm would be something like this:

              ${formbean.prop}
            The JSTL EL syntax for accessing a DynaActionForm looks something like this (because of the presence of this getMap() method):
              ${dynabean.map.prop}


            remove

            public void remove(java.lang.String name,
                               java.lang.String key)
            Remove any existing value for the specified key on the specified mapped property.

            Specified by:
            remove in interface org.apache.commons.beanutils.DynaBean
            Parameters:
            name - Name of the property for which a value is to be removed
            key - Key of the value to be removed
            Throws:
            java.lang.IllegalArgumentException - if there is no property of the specified name

            set

            public void set(java.lang.String name,
                            java.lang.Object value)
            Set the value of a simple property with the specified name.

            Specified by:
            set in interface org.apache.commons.beanutils.DynaBean
            Parameters:
            name - Name of the property whose value is to be set
            value - Value to which this property is to be set
            Throws:
            org.apache.commons.beanutils.ConversionException - if the specified value cannot be converted to the type required for this property
            java.lang.IllegalArgumentException - if there is no property of the specified name
            java.lang.NullPointerException - if the type specified for the property is invalid
            java.lang.NullPointerException - if an attempt is made to set a primitive property to null

            set

            public void set(java.lang.String name,
                            int index,
                            java.lang.Object value)
            Set the value of an indexed property with the specified name.

            Specified by:
            set in interface org.apache.commons.beanutils.DynaBean
            Parameters:
            name - Name of the property whose value is to be set
            index - Index of the property to be set
            value - Value to which this property is to be set
            Throws:
            org.apache.commons.beanutils.ConversionException - if the specified value cannot be converted to the type required for this property
            java.lang.IllegalArgumentException - if there is no property of the specified name
            java.lang.IllegalArgumentException - if the specified property exists, but is not indexed
            java.lang.IndexOutOfBoundsException - if the specified index is outside the range of the underlying property

            set

            public void set(java.lang.String name,
                            java.lang.String key,
                            java.lang.Object value)
            Set the value of a mapped property with the specified name.

            Specified by:
            set in interface org.apache.commons.beanutils.DynaBean
            Parameters:
            name - Name of the property whose value is to be set
            key - Key of the property to be set
            value - Value to which this property is to be set
            Throws:
            org.apache.commons.beanutils.ConversionException - if the specified value cannot be converted to the type required for this property
            java.lang.IllegalArgumentException - if there is no property of the specified name
            java.lang.IllegalArgumentException - if the specified property exists, but is not mapped

            toString

            public java.lang.String toString()
            Render a String representation of this object.

            Overrides:
            toString in class java.lang.Object

            setDynaActionFormClass

            void setDynaActionFormClass(DynaActionFormClass dynaClass)
            Set the DynaActionFormClass instance that we are associated with.

            Parameters:
            dynaClass - The DynaActionFormClass instance for this bean

            getDynaProperty

            protected org.apache.commons.beanutils.DynaProperty getDynaProperty(java.lang.String name)
            Return the property descriptor for the specified property name.

            Parameters:
            name - Name of the property for which to retrieve the descriptor
            Throws:
            java.lang.IllegalArgumentException - if this is not a valid property name for our DynaClass

            isDynaAssignable

            protected boolean isDynaAssignable(java.lang.Class dest,
                                               java.lang.Class source)
            Indicates if an object of the source class is assignable to the destination class.

            Parameters:
            dest - Destination class
            source - Source class


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/DynaActionFormClass.html0000644000175000017500000006616210404045214031365 0ustar arnaudarnaud00000000000000 DynaActionFormClass (Apache Struts API Documentation)

            org.apache.struts.action
            Class DynaActionFormClass

            java.lang.Object
              |
              +--org.apache.struts.action.DynaActionFormClass
            
            All Implemented Interfaces:
            org.apache.commons.beanutils.DynaClass, java.io.Serializable

            public class DynaActionFormClass
            extends java.lang.Object
            implements org.apache.commons.beanutils.DynaClass, java.io.Serializable

            Implementation of DynaClass for DynaActionForm classes that allow developers to define ActionForms without having to individually code all of the classes. NOTE - This class is only used in the internal implementation of dynamic action form beans. Applications never need to consult this documentation.

            Since:
            Struts 1.1
            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
            Author:
            Craig McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  java.lang.Class beanClass
                      The DynaActionForm implementation Class which we will use to create new bean instances.
            protected  FormBeanConfig config
                      The form bean configuration information for this class.
            protected static java.util.HashMap dynaClasses
                      The set of DynaActionFormClass instances that have ever been created, keyed by the form bean name.
            protected static java.lang.String lock
                      The lockable object we can synchronize on, even if dynaClasses is null,
            protected  java.lang.String name
                      The "dynamic class name" for this DynaClass.
            protected  org.apache.commons.beanutils.DynaProperty[] properties
                      The set of dynamic properties that are part of this DynaClass.
            protected  java.util.HashMap propertiesMap
                      The set of dynamic properties that are part of this DynaClass, keyed by the property name.
             
            Constructor Summary
            private DynaActionFormClass(FormBeanConfig config)
                      Construct a new DynaActionFormClass for the specified form bean configuration.
             
            Method Summary
            static void clear()
                      Clear our cache of DynaActionFormClass instances.
            static DynaActionFormClass createDynaActionFormClass(FormBeanConfig config)
                      Create (if necessary) and return a new DynaActionFormClass instance for the specified form bean configuration instance.
            protected  java.lang.Class getBeanClass()
                      Return the implementation class we are using to construct new instances, re-introspecting our FormBeanConfig if necessary (that is, after being deserialized, since beanClass is marked transient.
             org.apache.commons.beanutils.DynaProperty[] getDynaProperties()
                      Return an array of DynaPropertys for the properties currently defined in this DynaClass.
             org.apache.commons.beanutils.DynaProperty getDynaProperty(java.lang.String name)
                      Return a property descriptor for the specified property, if it exists; otherwise, return null.
             java.lang.String getName()
                      Return the name of this DynaClass (analogous to the getName() method of java.lang.ClassDynaClass implementation class to support different dynamic classes, with different sets of properties.
            protected  void introspect(FormBeanConfig config)
                      Introspect our form bean configuration to identify the supported properties.
             org.apache.commons.beanutils.DynaBean newInstance()
                      Instantiate and return a new DynaActionForm instance, associated with this DynaActionFormClass.
             java.lang.String toString()
                      Render a String representation of this object.
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
             

            Field Detail

            beanClass

            protected transient java.lang.Class beanClass
            The DynaActionForm implementation Class which we will use to create new bean instances.


            config

            protected FormBeanConfig config
            The form bean configuration information for this class.


            name

            protected java.lang.String name
            The "dynamic class name" for this DynaClass.


            properties

            protected org.apache.commons.beanutils.DynaProperty[] properties
            The set of dynamic properties that are part of this DynaClass.


            propertiesMap

            protected java.util.HashMap propertiesMap
            The set of dynamic properties that are part of this DynaClass, keyed by the property name. Individual descriptor instances will be the same instances as those in the properties list.


            dynaClasses

            protected static transient java.util.HashMap dynaClasses
            The set of DynaActionFormClass instances that have ever been created, keyed by the form bean name.


            lock

            protected static java.lang.String lock
            The lockable object we can synchronize on, even if dynaClasses is null,

            Constructor Detail

            DynaActionFormClass

            private DynaActionFormClass(FormBeanConfig config)
            Construct a new DynaActionFormClass for the specified form bean configuration. This constructor is private; DynaActionFormClass instances will be created as needed via calls to the static createDynaActionFormClass() method.

            Parameters:
            config - The FormBeanConfig instance describing the properties of the bean to be created
            Throws:
            java.lang.IllegalArgumentException - if the bean implementation class specified in the configuration is not DynaActionForm (or a subclass of DynaActionForm)
            Method Detail

            getName

            public java.lang.String getName()
            Return the name of this DynaClass (analogous to the getName() method of java.lang.ClassDynaClass implementation class to support different dynamic classes, with different sets of properties.

            Specified by:
            getName in interface org.apache.commons.beanutils.DynaClass

            getDynaProperty

            public org.apache.commons.beanutils.DynaProperty getDynaProperty(java.lang.String name)
            Return a property descriptor for the specified property, if it exists; otherwise, return null.

            Specified by:
            getDynaProperty in interface org.apache.commons.beanutils.DynaClass
            Parameters:
            name - Name of the dynamic property for which a descriptor is requested
            Throws:
            java.lang.IllegalArgumentException - if no property name is specified

            getDynaProperties

            public org.apache.commons.beanutils.DynaProperty[] getDynaProperties()

            Return an array of DynaPropertys for the properties currently defined in this DynaClass. If no properties are defined, a zero-length array will be returned.

            FIXME - Should we really be implementing getBeanInfo() instead, which returns property descriptors and a bunch of other stuff?

            Specified by:
            getDynaProperties in interface org.apache.commons.beanutils.DynaClass

            newInstance

            public org.apache.commons.beanutils.DynaBean newInstance()
                                                              throws java.lang.IllegalAccessException,
                                                                     java.lang.InstantiationException

            Instantiate and return a new DynaActionForm instance, associated with this DynaActionFormClass. The properties of the returned DynaActionForm will have been initialized to the default values specified in the form bean configuration information.

            Specified by:
            newInstance in interface org.apache.commons.beanutils.DynaClass
            Throws:
            java.lang.IllegalAccessException - if the Class or the appropriate constructor is not accessible
            java.lang.InstantiationException - if this Class represents an abstract class, an array class, a primitive type, or void; or if instantiation fails for some other reason

            toString

            public java.lang.String toString()
            Render a String representation of this object.

            Overrides:
            toString in class java.lang.Object

            clear

            public static void clear()
            Clear our cache of DynaActionFormClass instances.


            createDynaActionFormClass

            public static DynaActionFormClass createDynaActionFormClass(FormBeanConfig config)
            Create (if necessary) and return a new DynaActionFormClass instance for the specified form bean configuration instance.

            Parameters:
            config - The FormBeanConfig instance describing the properties of the bean to be created
            Throws:
            java.lang.IllegalArgumentException - if the bean implementation class specified in the configuration is not DynaActionForm (or a subclass of DynaActionForm)

            getBeanClass

            protected java.lang.Class getBeanClass()
            Return the implementation class we are using to construct new instances, re-introspecting our FormBeanConfig if necessary (that is, after being deserialized, since beanClass is marked transient.


            introspect

            protected void introspect(FormBeanConfig config)
            Introspect our form bean configuration to identify the supported properties.

            Parameters:
            config - The FormBeanConfig instance describing the properties of the bean to be created
            Throws:
            java.lang.IllegalArgumentException - if the bean implementation class specified in the configuration is not DynaActionForm (or a subclass of DynaActionForm)


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/ExceptionHandler.html0000644000175000017500000003455310404045210030751 0ustar arnaudarnaud00000000000000 ExceptionHandler (Apache Struts API Documentation)

            org.apache.struts.action
            Class ExceptionHandler

            java.lang.Object
              |
              +--org.apache.struts.action.ExceptionHandler
            

            public class ExceptionHandler
            extends java.lang.Object

            An ExceptionHandler is configured in the Struts configuration file to handle a specific type of exception thrown by an Action's execute method.

            Since:
            Struts 1.1

            Constructor Summary
            ExceptionHandler()
                       
             
            Method Summary
             ActionForward execute(java.lang.Exception ex, ExceptionConfig ae, ActionMapping mapping, ActionForm formInstance, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Handle the exception.
            protected  void storeException(javax.servlet.http.HttpServletRequest request, java.lang.String property, ActionError error, ActionForward forward, java.lang.String scope)
                      Default implementation for handling an ActionError generated from an Exception during Action delegation.
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
             

            Constructor Detail

            ExceptionHandler

            public ExceptionHandler()
            Method Detail

            execute

            public ActionForward execute(java.lang.Exception ex,
                                         ExceptionConfig ae,
                                         ActionMapping mapping,
                                         ActionForm formInstance,
                                         javax.servlet.http.HttpServletRequest request,
                                         javax.servlet.http.HttpServletResponse response)
                                  throws javax.servlet.ServletException
            Handle the exception. Return the ActionForward instance (if any) returned by the called ExceptionHandler.

            Parameters:
            ex - The exception to handle
            ae - The ExceptionConfig corresponding to the exception
            mapping - The ActionMapping we are processing
            formInstance - The ActionForm we are processing
            request - The servlet request we are processing
            response - The servlet response we are creating
            Throws:
            javax.servlet.ServletException - if a servlet exception occurs
            Since:
            Struts 1.1

            storeException

            protected void storeException(javax.servlet.http.HttpServletRequest request,
                                          java.lang.String property,
                                          ActionError error,
                                          ActionForward forward,
                                          java.lang.String scope)
            Default implementation for handling an ActionError generated from an Exception during Action delegation. The default implementation is to set an attribute of the request or session, as defined by the scope provided (the scope from the exception mapping). An ActionErrors instance is created, the error is added to the collection and the collection is set under the Globals.ERROR_KEY.

            Parameters:
            request - - The request we are handling
            property - - The property name to use for this error
            error - - The error generated from the exception mapping
            forward - - The forward generated from the input path (from the form or exception mapping)
            scope - - The scope of the exception mapping.


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/ForwardingActionForward.html0000644000175000017500000003155410404045244032307 0ustar arnaudarnaud00000000000000 ForwardingActionForward (Apache Struts API Documentation)

            org.apache.struts.action
            Class ForwardingActionForward

            java.lang.Object
              |
              +--org.apache.struts.config.ForwardConfig
                    |
                    +--org.apache.struts.action.ActionForward
                          |
                          +--org.apache.struts.action.ForwardingActionForward
            
            All Implemented Interfaces:
            java.io.Serializable

            public class ForwardingActionForward
            extends ActionForward

            A subclass of ActionForward that defaults the redirect attribute to false.

            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
             
            Fields inherited from class org.apache.struts.config.ForwardConfig
            configured, contextRelative, name, path, redirect
             
            Constructor Summary
            ForwardingActionForward()
                      Construct a new instance with default values.
            ForwardingActionForward(java.lang.String path)
                      Construct a new instance with the specified path.
             
            Methods inherited from class org.apache.struts.config.ForwardConfig
            freeze, getContextRelative, getName, getPath, getRedirect, setContextRelative, setName, setPath, setRedirect, toString
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
             

            Constructor Detail

            ForwardingActionForward

            public ForwardingActionForward()
            Construct a new instance with default values.


            ForwardingActionForward

            public ForwardingActionForward(java.lang.String path)
            Construct a new instance with the specified path.

            Parameters:
            path - Path for this instance


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/PlugIn.html0000644000175000017500000002511410404045204026707 0ustar arnaudarnaud00000000000000 PlugIn (Apache Struts API Documentation)

            org.apache.struts.action
            Interface PlugIn

            All Known Implementing Classes:
            ModuleConfigVerifier, TilesPlugin, ValidatorPlugIn

            public interface PlugIn

            A PlugIn is a configuration wrapper for a module-specific resource or service that needs to be notified about application startup and application shutdown events (corresponding to when the container calls init() and destroy() on the corresponding ActionServlet instance). PlugIn Actions can be configured in the struts-config.xml file, without the need to subclass ActionServlet simply to perform application lifecycle activities.

            Implementations of this interface must supply a zero-argument constructor for use by ActionServlet. Configuration can be accomplished by providing standard JavaBeans property setter methods, which will all have been called before the init() method is invoked.

            Since:
            Struts 1.1
            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
            Author:
            Craig R. McClanahan

            Method Summary
             void destroy()
                      Receive notification that our owning module is being shut down.
             void init(ActionServlet servlet, ModuleConfig config)
                      Receive notification that the specified module is being started up.
             

            Method Detail

            destroy

            public void destroy()

            Receive notification that our owning module is being shut down.


            init

            public void init(ActionServlet servlet,
                             ModuleConfig config)
                      throws javax.servlet.ServletException

            Receive notification that the specified module is being started up.

            Parameters:
            servlet - ActionServlet that is managing all the modules in this web application
            config - ModuleConfig for the module with which this plug-in is associated
            Throws:
            javax.servlet.ServletException - if this PlugIn cannot be successfully initialized


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/RedirectingActionForward.html0000644000175000017500000003161110404045234032435 0ustar arnaudarnaud00000000000000 RedirectingActionForward (Apache Struts API Documentation)

            org.apache.struts.action
            Class RedirectingActionForward

            java.lang.Object
              |
              +--org.apache.struts.config.ForwardConfig
                    |
                    +--org.apache.struts.action.ActionForward
                          |
                          +--org.apache.struts.action.RedirectingActionForward
            
            All Implemented Interfaces:
            java.io.Serializable

            public class RedirectingActionForward
            extends ActionForward

            A subclass of ActionForward that defaults the redirect attribute to true.

            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
             
            Fields inherited from class org.apache.struts.config.ForwardConfig
            configured, contextRelative, name, path, redirect
             
            Constructor Summary
            RedirectingActionForward()
                      Construct a new instance with default values.
            RedirectingActionForward(java.lang.String path)
                      Construct a new instance with the specified path.
             
            Methods inherited from class org.apache.struts.config.ForwardConfig
            freeze, getContextRelative, getName, getPath, getRedirect, setContextRelative, setName, setPath, setRedirect, toString
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
             

            Constructor Detail

            RedirectingActionForward

            public RedirectingActionForward()
            Construct a new instance with default values.


            RedirectingActionForward

            public RedirectingActionForward(java.lang.String path)
            Construct a new instance with the specified path.

            Parameters:
            path - Path for this instance


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/RequestActionMapping.html0000644000175000017500000004413210404045250031615 0ustar arnaudarnaud00000000000000 RequestActionMapping (Apache Struts API Documentation)

            org.apache.struts.action
            Class RequestActionMapping

            java.lang.Object
              |
              +--org.apache.struts.config.ActionConfig
                    |
                    +--org.apache.struts.action.ActionMapping
                          |
                          +--org.apache.struts.action.RequestActionMapping
            
            All Implemented Interfaces:
            java.io.Serializable

            public class RequestActionMapping
            extends ActionMapping

            Subclass of ActionMapping that defaults the form bean scope to request.

            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
             
            Fields inherited from class org.apache.struts.config.ActionConfig
            attribute, configured, exceptions, forward, forwards, include, input, moduleConfig, multipartClass, name, parameter, path, prefix, roleNames, roles, scope, suffix, type, unknown, validate
             
            Constructor Summary
            RequestActionMapping()
                      Construct a new instance of this class with the desired default form bean scope.
             
            Methods inherited from class org.apache.struts.action.ActionMapping
            findException, findForward, findForwards, getInputForward
             
            Methods inherited from class org.apache.struts.config.ActionConfig
            addExceptionConfig, addForwardConfig, findExceptionConfig, findExceptionConfigs, findForwardConfig, findForwardConfigs, freeze, getApplicationConfig, getAttribute, getForward, getInclude, getInput, getModuleConfig, getMultipartClass, getName, getParameter, getPath, getPrefix, getRoleNames, getRoles, getScope, getSuffix, getType, getUnknown, getValidate, removeExceptionConfig, removeForwardConfig, setApplicationConfig, setAttribute, setForward, setInclude, setInput, setModuleConfig, setMultipartClass, setName, setParameter, setPath, setPrefix, setRoles, setScope, setSuffix, setType, setUnknown, setValidate, toString
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
             

            Constructor Detail

            RequestActionMapping

            public RequestActionMapping()
            Construct a new instance of this class with the desired default form bean scope.



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/RequestProcessor.html0000644000175000017500000020341310404045224031043 0ustar arnaudarnaud00000000000000 RequestProcessor (Apache Struts API Documentation)

            org.apache.struts.action
            Class RequestProcessor

            java.lang.Object
              |
              +--org.apache.struts.action.RequestProcessor
            
            Direct Known Subclasses:
            TilesRequestProcessor

            public class RequestProcessor
            extends java.lang.Object

            RequestProcessor contains the processing logic that the Struts controller servlet performs as it receives each servlet request from the container. You can customize the request processing behavior by subclassing this class and overriding the method(s) whose behavior you are interested in changing.

            Since:
            Struts 1.1
            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
            Author:
            Craig R. McClanahan, Cedric Dumoulin

            Field Summary
            protected  java.util.HashMap actions
                      The set of Action instances that have been created and initialized, keyed by the fully qualified Java class name of the Action class.
            protected  ModuleConfig appConfig
                      Deprecated. use moduleConfig instead.
            static java.lang.String INCLUDE_PATH_INFO
                      The request attribute under which the path information is stored for processing during a RequestDispatcher.include() call.
            static java.lang.String INCLUDE_SERVLET_PATH
                      The request attribute under which the servlet path information is stored for processing during a RequestDispatcher.include() call.
            protected static org.apache.commons.logging.Log log
                      Commons Logging instance.
            protected  ModuleConfig moduleConfig
                      The ModuleConfiguration we are associated with.
            protected  ActionServlet servlet
                      The controller servlet we are associated with.
             
            Constructor Summary
            RequestProcessor()
                       
             
            Method Summary
             void destroy()
                      Clean up in preparation for a shutdown of this application.
            protected  void doForward(java.lang.String uri, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Do a forward to specified uri using request dispatcher.
            protected  void doInclude(java.lang.String uri, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Do an include of specified uri using request dispatcher.
             int getDebug()
                      Deprecated. Configure the logging detail level in your underlying logging implementation
            protected  MessageResources getInternal()
                      Return the MessageResources instance containing our internal message strings.
            protected  javax.servlet.ServletContext getServletContext()
                      Return the ServletContext for the web application we are running in.
             void init(ActionServlet servlet, ModuleConfig moduleConfig)
                      Initialize this request processor instance.
            protected  void internalModuleRelativeForward(java.lang.String uri, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Do a module relative forward to specified uri using request dispatcher.
            protected  void internalModuleRelativeInclude(java.lang.String uri, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Do a module relative include to specified uri using request dispatcher.
            protected  void log(java.lang.String message)
                      Log the specified message to the servlet context log for this web application.
            protected  void log(java.lang.String message, java.lang.Throwable exception)
                      Log the specified message and exception to the servlet context log for this web application.
             void process(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process an HttpServletRequest and create the corresponding HttpServletResponse.
            protected  Action processActionCreate(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, ActionMapping mapping)
                      Return an Action instance that will be used to process the current request, creating a new one if necessary.
            protected  ActionForm processActionForm(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, ActionMapping mapping)
                      Retrieve and return the ActionForm bean associated with this mapping, creating and stashing one if necessary.
            protected  void processActionForward(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, ActionForward forward)
                      Deprecated. Use processForwardConfig() instead.
            protected  ActionForward processActionPerform(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Action action, ActionForm form, ActionMapping mapping)
                      Ask the specified Action instance to handle this request.
            protected  void processContent(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Set the default content type (with optional character encoding) for all responses if requested.
            protected  ActionForward processException(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, java.lang.Exception exception, ActionForm form, ActionMapping mapping)
                      Ask our exception handler to handle the exception.
            protected  boolean processForward(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, ActionMapping mapping)
                      Process a forward requested by this mapping (if any).
            protected  void processForwardConfig(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, ForwardConfig forward)
                      Forward or redirect to the specified destination, by the specified mechanism.
            protected  boolean processInclude(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, ActionMapping mapping)
                      Process an include requested by this mapping (if any).
            protected  void processLocale(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Automatically select a Locale for the current user, if requested.
            protected  ActionMapping processMapping(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, java.lang.String path)
                      Select the mapping used to process the selection path for this request.
            protected  javax.servlet.http.HttpServletRequest processMultipart(javax.servlet.http.HttpServletRequest request)
                      If this is a multipart request, wrap it with a special wrapper.
            protected  void processNoCache(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Set the no-cache headers for all responses, if requested.
            protected  java.lang.String processPath(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Identify and return the path component (from the request URI) that we will use to select an ActionMapping to dispatch with.
            protected  void processPopulate(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, ActionForm form, ActionMapping mapping)
                      Populate the properties of the specified ActionForm instance from the request parameters included with this request.
            protected  boolean processPreprocess(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      General-purpose preprocessing hook that can be overridden as required by subclasses.
            protected  boolean processRoles(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, ActionMapping mapping)
                      If this action is protected by security roles, make sure that the current user possesses at least one of them.
            protected  boolean processValidate(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, ActionForm form, ActionMapping mapping)
                      If this request was not cancelled, and the request's ActionMapping has not disabled validation, call the validate() method of the specified ActionForm, and forward back to the input form if there were any errors.
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
             

            Field Detail

            INCLUDE_PATH_INFO

            public static final java.lang.String INCLUDE_PATH_INFO
            The request attribute under which the path information is stored for processing during a RequestDispatcher.include() call.

            See Also:
            Constant Field Values

            INCLUDE_SERVLET_PATH

            public static final java.lang.String INCLUDE_SERVLET_PATH
            The request attribute under which the servlet path information is stored for processing during a RequestDispatcher.include() call.

            See Also:
            Constant Field Values

            actions

            protected java.util.HashMap actions
            The set of Action instances that have been created and initialized, keyed by the fully qualified Java class name of the Action class.


            appConfig

            protected ModuleConfig appConfig
            Deprecated. use moduleConfig instead.

            The ModuleConfiguration we are associated with.


            moduleConfig

            protected ModuleConfig moduleConfig
            The ModuleConfiguration we are associated with.


            log

            protected static org.apache.commons.logging.Log log
            Commons Logging instance.


            servlet

            protected ActionServlet servlet
            The controller servlet we are associated with.

            Constructor Detail

            RequestProcessor

            public RequestProcessor()
            Method Detail

            destroy

            public void destroy()
            Clean up in preparation for a shutdown of this application.


            init

            public void init(ActionServlet servlet,
                             ModuleConfig moduleConfig)
                      throws javax.servlet.ServletException
            Initialize this request processor instance.

            Parameters:
            servlet - The ActionServlet we are associated with
            moduleConfig - The ModuleConfig we are associated with.
            Throws:
            javax.servlet.ServletException - If an error occor during initialization

            process

            public void process(javax.servlet.http.HttpServletRequest request,
                                javax.servlet.http.HttpServletResponse response)
                         throws java.io.IOException,
                                javax.servlet.ServletException

            Process an HttpServletRequest and create the corresponding HttpServletResponse.

            Parameters:
            request - The servlet request we are processing
            response - The servlet response we are creating
            Throws:
            java.io.IOException - if an input/output error occurs
            javax.servlet.ServletException - if a processing exception occurs

            processActionCreate

            protected Action processActionCreate(javax.servlet.http.HttpServletRequest request,
                                                 javax.servlet.http.HttpServletResponse response,
                                                 ActionMapping mapping)
                                          throws java.io.IOException
            Return an Action instance that will be used to process the current request, creating a new one if necessary.

            Parameters:
            request - The servlet request we are processing
            response - The servlet response we are creating
            mapping - The mapping we are using
            Throws:
            java.io.IOException - if an input/output error occurs

            processActionForm

            protected ActionForm processActionForm(javax.servlet.http.HttpServletRequest request,
                                                   javax.servlet.http.HttpServletResponse response,
                                                   ActionMapping mapping)
            Retrieve and return the ActionForm bean associated with this mapping, creating and stashing one if necessary. If there is no form bean associated with this mapping, return null.

            Parameters:
            request - The servlet request we are processing
            response - The servlet response we are creating
            mapping - The mapping we are using

            processActionForward

            protected void processActionForward(javax.servlet.http.HttpServletRequest request,
                                                javax.servlet.http.HttpServletResponse response,
                                                ActionForward forward)
                                         throws java.io.IOException,
                                                javax.servlet.ServletException
            Deprecated. Use processForwardConfig() instead.

            Forward or redirect to the specified destination, by the specified mechanism. This method takes the old ActionForward object as parameter. User should use processForwardConfig(HttpServletRequest, HttpServletResponse,ForwardConfig) when possible.

            Parameters:
            request - The servlet request we are processing
            response - The servlet response we are creating
            forward - The ActionForward controlling where we go next
            Throws:
            java.io.IOException - if an input/output error occurs
            javax.servlet.ServletException - if a servlet exception occurs

            processForwardConfig

            protected void processForwardConfig(javax.servlet.http.HttpServletRequest request,
                                                javax.servlet.http.HttpServletResponse response,
                                                ForwardConfig forward)
                                         throws java.io.IOException,
                                                javax.servlet.ServletException
            Forward or redirect to the specified destination, by the specified mechanism. This method uses a ForwardConfig object instead an ActionForward.

            Parameters:
            request - The servlet request we are processing
            response - The servlet response we are creating
            forward - The ForwardConfig controlling where we go next
            Throws:
            java.io.IOException - if an input/output error occurs
            javax.servlet.ServletException - if a servlet exception occurs

            processActionPerform

            protected ActionForward processActionPerform(javax.servlet.http.HttpServletRequest request,
                                                         javax.servlet.http.HttpServletResponse response,
                                                         Action action,
                                                         ActionForm form,
                                                         ActionMapping mapping)
                                                  throws java.io.IOException,
                                                         javax.servlet.ServletException
            Ask the specified Action instance to handle this request. Return the ActionForward instance (if any) returned by the called Action for further processing.

            Parameters:
            request - The servlet request we are processing
            response - The servlet response we are creating
            action - The Action instance to be used
            form - The ActionForm instance to pass to this Action
            mapping - The ActionMapping instance to pass to this Action
            Throws:
            java.io.IOException - if an input/output error occurs
            javax.servlet.ServletException - if a servlet exception occurs

            processContent

            protected void processContent(javax.servlet.http.HttpServletRequest request,
                                          javax.servlet.http.HttpServletResponse response)
            Set the default content type (with optional character encoding) for all responses if requested. NOTE - This header will be overridden automatically if a RequestDispatcher.forward() call is ultimately invoked.

            Parameters:
            request - The servlet request we are processing
            response - The servlet response we are creating

            processException

            protected ActionForward processException(javax.servlet.http.HttpServletRequest request,
                                                     javax.servlet.http.HttpServletResponse response,
                                                     java.lang.Exception exception,
                                                     ActionForm form,
                                                     ActionMapping mapping)
                                              throws java.io.IOException,
                                                     javax.servlet.ServletException
            Ask our exception handler to handle the exception. Return the ActionForward instance (if any) returned by the called ExceptionHandler.

            Parameters:
            request - The servlet request we are processing
            response - The servlet response we are processing
            exception - The exception being handled
            form - The ActionForm we are processing
            mapping - The ActionMapping we are using
            Throws:
            java.io.IOException - if an input/output error occurs
            javax.servlet.ServletException - if a servlet exception occurs

            processForward

            protected boolean processForward(javax.servlet.http.HttpServletRequest request,
                                             javax.servlet.http.HttpServletResponse response,
                                             ActionMapping mapping)
                                      throws java.io.IOException,
                                             javax.servlet.ServletException
            Process a forward requested by this mapping (if any). Return true if standard processing should continue, or false if we have already handled this request.

            Parameters:
            request - The servlet request we are processing
            response - The servlet response we are creating
            mapping - The ActionMapping we are using
            java.io.IOException
            javax.servlet.ServletException

            processInclude

            protected boolean processInclude(javax.servlet.http.HttpServletRequest request,
                                             javax.servlet.http.HttpServletResponse response,
                                             ActionMapping mapping)
                                      throws java.io.IOException,
                                             javax.servlet.ServletException
            Process an include requested by this mapping (if any). Return true if standard processing should continue, or false if we have already handled this request.

            Parameters:
            request - The servlet request we are processing
            response - The servlet response we are creating
            mapping - The ActionMapping we are using
            java.io.IOException
            javax.servlet.ServletException

            processLocale

            protected void processLocale(javax.servlet.http.HttpServletRequest request,
                                         javax.servlet.http.HttpServletResponse response)
            Automatically select a Locale for the current user, if requested. NOTE - configuring Locale selection will trigger the creation of a new HttpSession if necessary.

            Parameters:
            request - The servlet request we are processing
            response - The servlet response we are creating

            processMapping

            protected ActionMapping processMapping(javax.servlet.http.HttpServletRequest request,
                                                   javax.servlet.http.HttpServletResponse response,
                                                   java.lang.String path)
                                            throws java.io.IOException
            Select the mapping used to process the selection path for this request. If no mapping can be identified, create an error response and return null.

            Parameters:
            request - The servlet request we are processing
            response - The servlet response we are creating
            path - The portion of the request URI for selecting a mapping
            Throws:
            java.io.IOException - if an input/output error occurs

            processMultipart

            protected javax.servlet.http.HttpServletRequest processMultipart(javax.servlet.http.HttpServletRequest request)
            If this is a multipart request, wrap it with a special wrapper. Otherwise, return the request unchanged.

            Parameters:
            request - The HttpServletRequest we are processing

            processNoCache

            protected void processNoCache(javax.servlet.http.HttpServletRequest request,
                                          javax.servlet.http.HttpServletResponse response)
            Set the no-cache headers for all responses, if requested. NOTE - This header will be overridden automatically if a RequestDispatcher.forward() call is ultimately invoked.

            Parameters:
            request - The servlet request we are processing
            response - The servlet response we are creating

            processPath

            protected java.lang.String processPath(javax.servlet.http.HttpServletRequest request,
                                                   javax.servlet.http.HttpServletResponse response)
                                            throws java.io.IOException
            Identify and return the path component (from the request URI) that we will use to select an ActionMapping to dispatch with. If no such path can be identified, create an error response and return null.

            Parameters:
            request - The servlet request we are processing
            response - The servlet response we are creating
            Throws:
            java.io.IOException - if an input/output error occurs

            processPopulate

            protected void processPopulate(javax.servlet.http.HttpServletRequest request,
                                           javax.servlet.http.HttpServletResponse response,
                                           ActionForm form,
                                           ActionMapping mapping)
                                    throws javax.servlet.ServletException
            Populate the properties of the specified ActionForm instance from the request parameters included with this request. In addition, request attribute Globals.CANCEL_KEY will be set if the request was submitted with a button created by CancelTag.

            Parameters:
            request - The servlet request we are processing
            response - The servlet response we are creating
            form - The ActionForm instance we are populating
            mapping - The ActionMapping we are using
            Throws:
            javax.servlet.ServletException - if thrown by RequestUtils.populate()

            processPreprocess

            protected boolean processPreprocess(javax.servlet.http.HttpServletRequest request,
                                                javax.servlet.http.HttpServletResponse response)
            General-purpose preprocessing hook that can be overridden as required by subclasses. Return true if you want standard processing to continue, or false if the response has already been completed. The default implementation does nothing.

            Parameters:
            request - The servlet request we are processing
            response - The servlet response we are creating

            processRoles

            protected boolean processRoles(javax.servlet.http.HttpServletRequest request,
                                           javax.servlet.http.HttpServletResponse response,
                                           ActionMapping mapping)
                                    throws java.io.IOException,
                                           javax.servlet.ServletException
            If this action is protected by security roles, make sure that the current user possesses at least one of them. Return true to continue normal processing, or false if an appropriate response has been created and processing should terminate.

            Parameters:
            request - The servlet request we are processing
            response - The servlet response we are creating
            mapping - The mapping we are using
            Throws:
            java.io.IOException - if an input/output error occurs
            javax.servlet.ServletException - if a servlet exception occurs

            processValidate

            protected boolean processValidate(javax.servlet.http.HttpServletRequest request,
                                              javax.servlet.http.HttpServletResponse response,
                                              ActionForm form,
                                              ActionMapping mapping)
                                       throws java.io.IOException,
                                              javax.servlet.ServletException

            If this request was not cancelled, and the request's ActionMapping has not disabled validation, call the validate() method of the specified ActionForm, and forward back to the input form if there were any errors. Return true if we should continue processing, or false if we have already forwarded control back to the input form.

            Parameters:
            request - The servlet request we are processing
            response - The servlet response we are creating
            form - The ActionForm instance we are populating
            mapping - The ActionMapping we are using
            Throws:
            java.io.IOException - if an input/output error occurs
            javax.servlet.ServletException - if a servlet exception occurs

            internalModuleRelativeForward

            protected void internalModuleRelativeForward(java.lang.String uri,
                                                         javax.servlet.http.HttpServletRequest request,
                                                         javax.servlet.http.HttpServletResponse response)
                                                  throws java.io.IOException,
                                                         javax.servlet.ServletException
            Do a module relative forward to specified uri using request dispatcher. Uri is relative to the current module. The real uri is compute by prefixing the module name. This method is used internally and is not part of the public API. It is advised to not use it in subclasses.

            Parameters:
            uri - Module-relative URI to forward to
            request - Current page request
            response - Current page response
            java.io.IOException
            javax.servlet.ServletException
            Since:
            Struts 1.1

            internalModuleRelativeInclude

            protected void internalModuleRelativeInclude(java.lang.String uri,
                                                         javax.servlet.http.HttpServletRequest request,
                                                         javax.servlet.http.HttpServletResponse response)
                                                  throws java.io.IOException,
                                                         javax.servlet.ServletException
            Do a module relative include to specified uri using request dispatcher. Uri is relative to the current module. The real uri is compute by prefixing the module name. This method is used internally and is not part of the public API. It is advised to not use it in subclasses.

            Parameters:
            uri - Module-relative URI to include
            request - Current page request
            response - Current page response
            java.io.IOException
            javax.servlet.ServletException
            Since:
            Struts 1.1

            doForward

            protected void doForward(java.lang.String uri,
                                     javax.servlet.http.HttpServletRequest request,
                                     javax.servlet.http.HttpServletResponse response)
                              throws java.io.IOException,
                                     javax.servlet.ServletException
            Do a forward to specified uri using request dispatcher. This method is used by all internal method needing to do a forward.

            Parameters:
            uri - Context-relative URI to forward to
            request - Current page request
            response - Current page response
            java.io.IOException
            javax.servlet.ServletException
            Since:
            Struts 1.1

            doInclude

            protected void doInclude(java.lang.String uri,
                                     javax.servlet.http.HttpServletRequest request,
                                     javax.servlet.http.HttpServletResponse response)
                              throws java.io.IOException,
                                     javax.servlet.ServletException
            Do an include of specified uri using request dispatcher. This method is used by all internal method needing to do an include

            Parameters:
            uri - Context-relative URI to include
            request - Current page request
            response - Current page response
            java.io.IOException
            javax.servlet.ServletException
            Since:
            Struts 1.1

            getDebug

            public int getDebug()
            Deprecated. Configure the logging detail level in your underlying logging implementation

            Return the debugging detail level that has been configured for our controller servlet.


            getInternal

            protected MessageResources getInternal()
            Return the MessageResources instance containing our internal message strings.


            getServletContext

            protected javax.servlet.ServletContext getServletContext()
            Return the ServletContext for the web application we are running in.


            log

            protected void log(java.lang.String message)
            Log the specified message to the servlet context log for this web application.

            Parameters:
            message - The message to be logged

            log

            protected void log(java.lang.String message,
                               java.lang.Throwable exception)
            Log the specified message and exception to the servlet context log for this web application.

            Parameters:
            message - The message to be logged
            exception - The exception to be logged


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/SessionActionMapping.html0000644000175000017500000004365210404045250031616 0ustar arnaudarnaud00000000000000 SessionActionMapping (Apache Struts API Documentation)

            org.apache.struts.action
            Class SessionActionMapping

            java.lang.Object
              |
              +--org.apache.struts.config.ActionConfig
                    |
                    +--org.apache.struts.action.ActionMapping
                          |
                          +--org.apache.struts.action.SessionActionMapping
            
            All Implemented Interfaces:
            java.io.Serializable

            public class SessionActionMapping
            extends ActionMapping

            Subclass of ActionMapping that defaults the form bean scope to session.

            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
             
            Fields inherited from class org.apache.struts.config.ActionConfig
            attribute, configured, exceptions, forward, forwards, include, input, moduleConfig, multipartClass, name, parameter, path, prefix, roleNames, roles, scope, suffix, type, unknown, validate
             
            Constructor Summary
            SessionActionMapping()
                      Construct a new instance of this class with the desired default form bean scope.
             
            Methods inherited from class org.apache.struts.action.ActionMapping
            findException, findForward, findForwards, getInputForward
             
            Methods inherited from class org.apache.struts.config.ActionConfig
            addExceptionConfig, addForwardConfig, findExceptionConfig, findExceptionConfigs, findForwardConfig, findForwardConfigs, freeze, getApplicationConfig, getAttribute, getForward, getInclude, getInput, getModuleConfig, getMultipartClass, getName, getParameter, getPath, getPrefix, getRoleNames, getRoles, getScope, getSuffix, getType, getUnknown, getValidate, removeExceptionConfig, removeForwardConfig, setApplicationConfig, setAttribute, setForward, setInclude, setInput, setModuleConfig, setMultipartClass, setName, setParameter, setPath, setPrefix, setRoles, setScope, setSuffix, setType, setUnknown, setValidate, toString
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
             

            Constructor Detail

            SessionActionMapping

            public SessionActionMapping()
            Construct a new instance of this class with the desired default form bean scope.



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/package-frame.html0000644000175000017500000000572310404045244030204 0ustar arnaudarnaud00000000000000 org.apache.struts.action (Apache Struts API Documentation) org.apache.struts.action
            Interfaces 
            PlugIn
            Classes 
            Action
            ActionError
            ActionErrors
            ActionException
            ActionForm
            ActionFormBean
            ActionFormBeans
            ActionForward
            ActionForwards
            ActionMapping
            ActionMappings
            ActionMessage
            ActionMessages
            ActionServlet
            ActionServletWrapper
            DynaActionForm
            DynaActionFormClass
            ExceptionHandler
            ForwardingActionForward
            RedirectingActionForward
            RequestActionMapping
            RequestProcessor
            SessionActionMapping
            libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/package-summary.html0000644000175000017500000003461410404045224030606 0ustar arnaudarnaud00000000000000 org.apache.struts.action (Apache Struts API Documentation)

            Package org.apache.struts.action

            The action package is the core of the struts framework, providing the "Controller" aspect of a MVC model.

            See:
                      Description

            Interface Summary
            PlugIn A PlugIn is a configuration wrapper for a module-specific resource or service that needs to be notified about application startup and application shutdown events (corresponding to when the container calls init() and destroy() on the corresponding ActionServlet instance).
             

            Class Summary
            Action An Action is an adapter between the contents of an incoming HTTP request and the corresponding business logic that should be executed to process this request.
            ActionError An encapsulation of an individual error message returned by the validate() method of an ActionForm, consisting of a message key (to be used to look up message text in an appropriate message resources database) plus up to four placeholder objects that can be used for parametric replacement in the message text.
            ActionErrors A class that encapsulates the error messages being reported by the validate() method of an ActionForm.
            ActionException Deprecated. Replaced by org.apache.struts.config.ExceptionConfig
            ActionForm An ActionForm is a JavaBean optionally associated with one or more ActionMappings.
            ActionFormBean An ActionFormBean is the definition of a form bean that is loaded from a <form-bean> element in the Struts configuration file.
            ActionFormBeans Deprecated. Replaced by collection of FormBeanConfig instances in ModuleConfig
            ActionForward An ActionForward represents a destination to which the controller servlet, ActionServlet, might be directed to perform a RequestDispatcher.forward() or HttpServletResponse.sendRedirect() to, as a result of processing activities of an Action class.
            ActionForwards Deprecated. Replaced by collection of ForwardConfig instances in ModuleConfig and ActionConfig
            ActionMapping An ActionMapping represents the information that the controller servlet, ActionServlet, knows about the mapping of a particular request to an instance of a particular action class.
            ActionMappings Deprecated. Replaced by collection of ActionConfig instances in ModuleConfig
            ActionMessage An encapsulation of an individual message returned by the validate() method of an ActionForm, consisting of a message key (to be used to look up message text in an appropriate message resources database) plus up to four placeholder objects that can be used for parametric replacement in the message text.
            ActionMessages A class that encapsulates messages.
            ActionServlet ActionServlet represents the "controller" in the Model-View-Controller (MVC) design pattern for web applications that is commonly known as "Model 2".
            ActionServletWrapper Provide a wrapper around an ActionServlet to expose only those methods needed by other objects.
            DynaActionForm Specialized subclass of ActionForm that allows the creation of form beans with dynamic sets of properties, without requiring the developer to create a Java class for each type of form bean.
            DynaActionFormClass Implementation of DynaClass for DynaActionForm classes that allow developers to define ActionForms without having to individually code all of the classes.
            ExceptionHandler An ExceptionHandler is configured in the Struts configuration file to handle a specific type of exception thrown by an Action's execute method.
            ForwardingActionForward A subclass of ActionForward that defaults the redirect attribute to false.
            RedirectingActionForward A subclass of ActionForward that defaults the redirect attribute to true.
            RequestActionMapping Subclass of ActionMapping that defaults the form bean scope to request.
            RequestProcessor RequestProcessor contains the processing logic that the Struts controller servlet performs as it receives each servlet request from the container.
            SessionActionMapping Subclass of ActionMapping that defaults the form bean scope to session.
             

            Package org.apache.struts.action Description

            The action package is the core of the struts framework, providing the "Controller" aspect of a MVC model.



            Action Package UML

            Package Specification

            ##### FILL IN ANY SPECS NEEDED BY JAVA COMPATIBILITY KIT #####

            Related Documentation

            For overviews, tutorials, examples, guides, and tool documentation, please see:



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/package-tree.html0000644000175000017500000002505110404045242030043 0ustar arnaudarnaud00000000000000 org.apache.struts.action Class Hierarchy (Apache Struts API Documentation)

            Hierarchy For Package org.apache.struts.action

            Package Hierarchies:
            All Packages

            Class Hierarchy

            Interface Hierarchy

            • interface org.apache.struts.action.PlugIn


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/action/package-use.html0000644000175000017500000011320610404045224027700 0ustar arnaudarnaud00000000000000 Uses of Package org.apache.struts.action (Apache Struts API Documentation)

            Uses of Package
            org.apache.struts.action

            Packages that use org.apache.struts.action
            org.apache.struts.action The action package is the core of the struts framework, providing the "Controller" aspect of a MVC model. 
            org.apache.struts.actions The actions package provides special adapters between the incoming HTTP request and the corresponding business logic. 
            org.apache.struts.config The "config" package contains configuration objects that correspond to elements that may be specified in the struts-config.xml module configuration file. 
            org.apache.struts.plugins   
            org.apache.struts.taglib.html The "struts-html" tag library contains JSP custom tags useful in creating dynamic HTML user interfaces, including input forms. 
            org.apache.struts.tiles
            The Tiles taglib and framework allows building web pages by assembling reusable pieces of pages, called Tiles. 
            org.apache.struts.tiles.actions   
            org.apache.struts.upload The upload package facilities to upload files using multi-part requests. 
            org.apache.struts.util The Utilities package provides a variety of families of classes, to solve problems that are commonly encountered in building web applications. 
            org.apache.struts.validator The validator package provides a series of classes to validate ActionForm type of input. 
             

            Classes in org.apache.struts.action used by org.apache.struts.action
            Action
                      An Action is an adapter between the contents of an incoming HTTP request and the corresponding business logic that should be executed to process this request.
            ActionError
                      An encapsulation of an individual error message returned by the validate() method of an ActionForm, consisting of a message key (to be used to look up message text in an appropriate message resources database) plus up to four placeholder objects that can be used for parametric replacement in the message text.
            ActionErrors
                      A class that encapsulates the error messages being reported by the validate() method of an ActionForm.
            ActionForm
                      An ActionForm is a JavaBean optionally associated with one or more ActionMappings.
            ActionFormBean
                      An ActionFormBean is the definition of a form bean that is loaded from a <form-bean> element in the Struts configuration file.
            ActionForward
                      An ActionForward represents a destination to which the controller servlet, ActionServlet, might be directed to perform a RequestDispatcher.forward() or HttpServletResponse.sendRedirect() to, as a result of processing activities of an Action class.
            ActionMapping
                      An ActionMapping represents the information that the controller servlet, ActionServlet, knows about the mapping of a particular request to an instance of a particular action class.
            ActionMessage
                      An encapsulation of an individual message returned by the validate() method of an ActionForm, consisting of a message key (to be used to look up message text in an appropriate message resources database) plus up to four placeholder objects that can be used for parametric replacement in the message text.
            ActionMessages
                      A class that encapsulates messages.
            ActionServlet
                      ActionServlet represents the "controller" in the Model-View-Controller (MVC) design pattern for web applications that is commonly known as "Model 2".
            ActionServletWrapper
                      Provide a wrapper around an ActionServlet to expose only those methods needed by other objects.
            DynaActionFormClass
                      Implementation of DynaClass for DynaActionForm classes that allow developers to define ActionForms without having to individually code all of the classes.
            RequestProcessor
                      RequestProcessor contains the processing logic that the Struts controller servlet performs as it receives each servlet request from the container.
             

            Classes in org.apache.struts.action used by org.apache.struts.actions
            Action
                      An Action is an adapter between the contents of an incoming HTTP request and the corresponding business logic that should be executed to process this request.
            ActionForm
                      An ActionForm is a JavaBean optionally associated with one or more ActionMappings.
            ActionForward
                      An ActionForward represents a destination to which the controller servlet, ActionServlet, might be directed to perform a RequestDispatcher.forward() or HttpServletResponse.sendRedirect() to, as a result of processing activities of an Action class.
            ActionMapping
                      An ActionMapping represents the information that the controller servlet, ActionServlet, knows about the mapping of a particular request to an instance of a particular action class.
             

            Classes in org.apache.struts.action used by org.apache.struts.config
            ActionErrors
                      A class that encapsulates the error messages being reported by the validate() method of an ActionForm.
            ActionForm
                      An ActionForm is a JavaBean optionally associated with one or more ActionMappings.
            ActionFormBean
                      An ActionFormBean is the definition of a form bean that is loaded from a <form-bean> element in the Struts configuration file.
            ActionFormBeans
                      Deprecated. Replaced by collection of FormBeanConfig instances in ModuleConfig
            ActionForward
                      An ActionForward represents a destination to which the controller servlet, ActionServlet, might be directed to perform a RequestDispatcher.forward() or HttpServletResponse.sendRedirect() to, as a result of processing activities of an Action class.
            ActionForwards
                      Deprecated. Replaced by collection of ForwardConfig instances in ModuleConfig and ActionConfig
            ActionMapping
                      An ActionMapping represents the information that the controller servlet, ActionServlet, knows about the mapping of a particular request to an instance of a particular action class.
            ActionMappings
                      Deprecated. Replaced by collection of ActionConfig instances in ModuleConfig
            ActionMessages
                      A class that encapsulates messages.
             

            Classes in org.apache.struts.action used by org.apache.struts.plugins
            ActionServlet
                      ActionServlet represents the "controller" in the Model-View-Controller (MVC) design pattern for web applications that is commonly known as "Model 2".
            PlugIn
                      A PlugIn is a configuration wrapper for a module-specific resource or service that needs to be notified about application startup and application shutdown events (corresponding to when the container calls init() and destroy() on the corresponding ActionServlet instance).
             

            Classes in org.apache.struts.action used by org.apache.struts.taglib.html
            ActionMapping
                      An ActionMapping represents the information that the controller servlet, ActionServlet, knows about the mapping of a particular request to an instance of a particular action class.
            ActionServlet
                      ActionServlet represents the "controller" in the Model-View-Controller (MVC) design pattern for web applications that is commonly known as "Model 2".
             

            Classes in org.apache.struts.action used by org.apache.struts.tiles
            Action
                      An Action is an adapter between the contents of an incoming HTTP request and the corresponding business logic that should be executed to process this request.
            ActionForm
                      An ActionForm is a JavaBean optionally associated with one or more ActionMappings.
            ActionForward
                      An ActionForward represents a destination to which the controller servlet, ActionServlet, might be directed to perform a RequestDispatcher.forward() or HttpServletResponse.sendRedirect() to, as a result of processing activities of an Action class.
            ActionMapping
                      An ActionMapping represents the information that the controller servlet, ActionServlet, knows about the mapping of a particular request to an instance of a particular action class.
            ActionServlet
                      ActionServlet represents the "controller" in the Model-View-Controller (MVC) design pattern for web applications that is commonly known as "Model 2".
            PlugIn
                      A PlugIn is a configuration wrapper for a module-specific resource or service that needs to be notified about application startup and application shutdown events (corresponding to when the container calls init() and destroy() on the corresponding ActionServlet instance).
            RequestProcessor
                      RequestProcessor contains the processing logic that the Struts controller servlet performs as it receives each servlet request from the container.
             

            Classes in org.apache.struts.action used by org.apache.struts.tiles.actions
            Action
                      An Action is an adapter between the contents of an incoming HTTP request and the corresponding business logic that should be executed to process this request.
            ActionForm
                      An ActionForm is a JavaBean optionally associated with one or more ActionMappings.
            ActionForward
                      An ActionForward represents a destination to which the controller servlet, ActionServlet, might be directed to perform a RequestDispatcher.forward() or HttpServletResponse.sendRedirect() to, as a result of processing activities of an Action class.
            ActionMapping
                      An ActionMapping represents the information that the controller servlet, ActionServlet, knows about the mapping of a particular request to an instance of a particular action class.
             

            Classes in org.apache.struts.action used by org.apache.struts.upload
            ActionMapping
                      An ActionMapping represents the information that the controller servlet, ActionServlet, knows about the mapping of a particular request to an instance of a particular action class.
            ActionServlet
                      ActionServlet represents the "controller" in the Model-View-Controller (MVC) design pattern for web applications that is commonly known as "Model 2".
             

            Classes in org.apache.struts.action used by org.apache.struts.util
            ActionError
                      An encapsulation of an individual error message returned by the validate() method of an ActionForm, consisting of a message key (to be used to look up message text in an appropriate message resources database) plus up to four placeholder objects that can be used for parametric replacement in the message text.
            ActionErrors
                      A class that encapsulates the error messages being reported by the validate() method of an ActionForm.
            ActionForm
                      An ActionForm is a JavaBean optionally associated with one or more ActionMappings.
            ActionMapping
                      An ActionMapping represents the information that the controller servlet, ActionServlet, knows about the mapping of a particular request to an instance of a particular action class.
            ActionMessages
                      A class that encapsulates messages.
            ActionServlet
                      ActionServlet represents the "controller" in the Model-View-Controller (MVC) design pattern for web applications that is commonly known as "Model 2".
             

            Classes in org.apache.struts.action used by org.apache.struts.validator
            ActionError
                      An encapsulation of an individual error message returned by the validate() method of an ActionForm, consisting of a message key (to be used to look up message text in an appropriate message resources database) plus up to four placeholder objects that can be used for parametric replacement in the message text.
            ActionErrors
                      A class that encapsulates the error messages being reported by the validate() method of an ActionForm.
            ActionForm
                      An ActionForm is a JavaBean optionally associated with one or more ActionMappings.
            ActionMapping
                      An ActionMapping represents the information that the controller servlet, ActionServlet, knows about the mapping of a particular request to an instance of a particular action class.
            ActionServlet
                      ActionServlet represents the "controller" in the Model-View-Controller (MVC) design pattern for web applications that is commonly known as "Model 2".
            DynaActionForm
                      Specialized subclass of ActionForm that allows the creation of form beans with dynamic sets of properties, without requiring the developer to create a Java class for each type of form bean.
            PlugIn
                      A PlugIn is a configuration wrapper for a module-specific resource or service that needs to be notified about application startup and application shutdown events (corresponding to when the container calls init() and destroy() on the corresponding ActionServlet instance).
             



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/actions/0000755000175000017500000000000010423130300024774 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/actions/class-use/0000755000175000017500000000000010423130300026673 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/actions/class-use/DispatchAction.html0000644000175000017500000001623610404045232032476 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.actions.DispatchAction (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.actions.DispatchAction

            Packages that use DispatchAction
            org.apache.struts.actions The actions package provides special adapters between the incoming HTTP request and the corresponding business logic. 
             

            Uses of DispatchAction in org.apache.struts.actions
             

            Subclasses of DispatchAction in org.apache.struts.actions
             class LookupDispatchAction
                       An abstract Action that dispatches to the subclass mapped execute method.
             



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/actions/class-use/ForwardAction.html0000644000175000017500000001261010404045216032335 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.actions.ForwardAction (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.actions.ForwardAction

            No usage of org.apache.struts.actions.ForwardAction



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/actions/class-use/IncludeAction.html0000644000175000017500000001261010404045204032311 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.actions.IncludeAction (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.actions.IncludeAction

            No usage of org.apache.struts.actions.IncludeAction



            Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000014510423140532011316 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/actions/class-use/LookupDispatchAction.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/actions/class-use/LookupDispatchAction.html0000644000175000017500000001270010404045234033662 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.actions.LookupDispatchAction (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.actions.LookupDispatchAction

            No usage of org.apache.struts.actions.LookupDispatchAction



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/actions/class-use/SwitchAction.html0000644000175000017500000001260010404045236032173 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.actions.SwitchAction (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.actions.SwitchAction

            No usage of org.apache.struts.actions.SwitchAction



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/actions/doc-files/0000755000175000017500000000000010423130300026641 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/actions/doc-files/actionsUML.gif0000644000175000017500000001404410404045232031361 0ustar arnaudarnaud00000000000000GIF87a¿4÷€€€€€€€€€ÀÀÀÀÜÀ¦Êð@ ` €   À à @ @@@`@€@ @À@à@` `@```€` `À`à`€ €@€`€€€ €À€à€   @ ` €   À à À À@À`À€À ÀÀÀàÀà à@à`à€à àÀààà@ @@@`@€@ @À@à@ @ @@ @` @€ @  @À @à @@@ @@@@@`@@€@@ @@À@@à@@`@ `@@`@``@€`@ `@À`@à`@€@ €@@€@`€@€€@ €@À€@à€@ @  @@ @` @€ @  @À @à @À@ À@@À@`À@€À@ À@ÀÀ@àÀ@à@ à@@à@`à@€à@ à@Àà@àà@€ €@€`€€€ €À€à€ € €@ €` €€ €  €À €à €@€ @€@@€`@€€@€ @€À@€à@€`€ `€@`€``€€`€ `€À`€à`€€€ €€@€€`€€€€€ €€À€€à€€ €  €@ €` €€ €  €À €à €À€ À€@À€`À€€À€ À€ÀÀ€àÀ€à€ à€@à€`à€€à€ à€Àà€àà€À À@À`À€À ÀÀÀàÀ À À@ À` À€ À  ÀÀ Àà À@À @À@@À`@À€@À @ÀÀ@Àà@À`À `À@`À``À€`À `ÀÀ`Àà`À€À €À@€À`€À€€À €ÀÀ€Àà€À À  À@ À` À€ À  ÀÀ Àà ÀÀÀ ÀÀ@ÀÀ`ÀÀ€ÀÀ ÀÀÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ!ù,¿4ÿÿ H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\ɲ¥Ë—0cÊœI³¦Í›8sê܉€ÏŸ@ƒ J´¨Ñ£H“*]Ê´©Ó§P£J:•§Õ«X³jÕHµ«×¯`ÊK¶,Ô­hÓª]‹Ó¬Û·pãÊK·(Û»xóêå(t¯ß¿iûL¸p` †+žt±ãÇO"ŽL¹rÈÉ–3kÞŒð'çÏ zMº´a̦HÍ5ë×°³Žvx v`Û}âÞÍ»æìRj¬}ïÀ»ÞVW#øvÝçУ{ÍÛüß÷ ¾ÛÞFà ,<ÿø‚ÀÞr™ÊÏWOþ<àök×Ûó¹…àSØ»—¯Èƒ#ù8pÁ€÷ Z‚µßB :„YƒAH|ºM(¡B‚$á…|eèœ{„qˆÕz½ã“æY·Eö\sÌ1FS€ùäÀáyqò¥ç!W"ÔžrAЏ`†?¢—P@2¹™“ j¥N$”ÄOïØ#ŠÍ sL?ý¼£0à8^ðZÜk B"|óÁ/ËlD ›¤ñg/‰$Á®ÍyôoR÷ûgž~&šë¬GZ}èÎU3L¡¡þjé£ÔÚ›ó=÷l¹÷TÈ S̨ëžÜʨ¶@¼Xð‡¯¦Xm×µ‹pâJt'°¿BγÀûB]ù¾6+ûóÂÿ7œ¶cM yöÓ;ƒmöž=ON°élpäe—ÍzêºöL¨è¬Kžµ¯·ã~—ÆlOqðö“.?r²0Ì3Ÿ®1y“ã©Þ8oà|`A¼4<ðÏùjžðæ:ÿ;ø¹GŽ9ãF[nôû‹_ÛJKsv¨kª?î3Ъ›Oùý¡KíÔ7¿ýåÏ¥ƒèº.ð0:À=¶°,}ãK¡ó€ñ1sñƒy Õ¨ú‘·é½È€›Ëd/|¡^I’×j7§MA÷j Ĩ’/N£á ËWºÏ-,göãŸïd—: íX½k]s£À*,hO´" ¨5ÒIQÿr`dT¦‚TœýØãÓ#!Þ6(yué¾Ô"¼è§B™Vu½Â¡Çˆ.deê÷$%þ/Õ ﶨÅò5‘_œÝ!!É+)V2Œé‹d|r–%{çÿ±c1H¸7»™2m0øG’¥«Tëò’Œ^dÇc G,CáZ‚Ĉ¹‡š  ™Ø9(.rŠçë_õô¸<¡‘[ –³iÀ¦ pšÑ,àïzI7<ÀG¨¥©H5Jã¥k¨l#ÈV9²PÕ­d£e˜j9¦TÁè†CŽ )ÌÌXŠlµŠbcטÓaík<»—ÕŒyº„J¡=(¹ö:ÅE4Y<ÿ#EÞñÅKet,˜Œ7*a¤3•n¬…QŒ»Áso'[Up…ð à »´Í>#ÓOËRÚŒR 5JO~€eßÌG»B &žÓBÂIQ²v¾Ó”¥ªe8ï踀G¯Ù)dz:Hmi’rBõˆXYBÖoK{à'8ЮSÅ2ž0µ›Ð9Õ¡A•¬Ì KG%O xõ‡ýkÖ :nú³CÖjkZ‰˜1Ç\öxÃ:Z£Îè³/ “©LÖT5’³”èT@_„¿Âq ?pÁ~àØÞ`¶l‚ˆ$;ÖÉî…±‡Û§'ßžðÀ«³«rWŒìhGê‘rŽ0®ô)¡zÎ! SA™Àn[[Ùæ3‰¿´lY}K¢r\àèŠ{#þí–eDÂÑžjo_)ù†Á½ö¶.pv0Ü`Z»/?¥Ãà;Ø.ÝRpC0ëI{Üá°‚qůVÕèo[]kIbT‘ Fôí‡d{ƒÿzõ0¯z$L^¥ ­ÏZ¿äWãhÑØ!¦0y¶ó…7løó"“Î|ÄdñLWµ\´ØÊ_ÝŽnà Üg„C`ÞE¹xV/7ëÇE ²š+ø<ÁhZ =ü7xaIH‚† €k“Ý´¸íßFÛÙÝþ¢§AM>2.Ü Å"0¥½~5«bŒÖåÎ}Ä’pÚiàF·5­k1;0ߦ‘Ö±Î<^yóxÓÆþÞqÍï_£»ÔüKu¢Óld[àÄêb@…¨qűÜÍ>›±=:nŸ;~ë(3G§°€.Û™EÝu]3²Ý|µÒzxfÿ€O›çê>J&Ñæs¦i*‡ßÃ'´ø±v妿 ueê}Ë„fÖ¯°©ÿ[áð›šæ¶6>Îe´Hì~¸Ó&~ð˜û›²ÅÆøÉ±†¹±…QœC P#¾@g‰;ÛóÆä2Ã\I¿ ¾Q´9M$5u+¨5±cC#—°s5¹çD D´'>Æ·w€=ÁXSÂ/¨iç{¶gV–Wƒìñm*oòxCjÄFm1¨nm/()ÿAn…)iS„Áv„98LÈKNøs$¡„+hh?ø„ÐæOSø{öfp‡æe¯FkdX†fx†MakZH€UX€_…z‘…kxjr¸m]øBƒ¾U‡s¨i|è…[†W8Y؇bx‡¡–oÔBy„H~ÞÂ{&·l3ˆ!^‰gˆ1„ˆX¸‹hlpA”8‰i§?cCoy8”„‰“§‰bÈVa(€¦¶v8‡Q7·p¡˜zÇ7f@uï×kª¸‚Ÿ¨SE·„Hh·ˆ,‰ƒw‡h˜4n"Ë÷‹jÅŠ{():Ø!Æ(‹bv¶¨~š„M¼`¤z3GÕŒaFÄ‚Ë|…û'{—R}âDØÔ|ÒXM蘎ªX„íxêH%h}Š×ƒx¸röGf¤¸j¾¸>ƒ†_6yŽ6ÊXËÈv\Ôy¹‚ôÇ‹ Y}hCˆp‰™7C;äxlWP½ø èvc’ž‘LÃp …Âh“°H“É“Á„j=yDH’l”>ÿYˆ„xŒX…H)…O铉¡”Bø…ìa”R™•QÙXæV6p*‰†dY–f)kj¨v<)VÎÖ•6æ–[ùZ¹Ž;±Vm —«ˆ—qù[syƒm²ƒø$}¹—F§—ñ”©6Œöy“4‹I˜P™ö•Àp†©-Ùj”)™N™™Ý"%Dɉ8È6·q¨©qᣚµèžÙ&éSíF‘œšÙ˜É(>é—0Ùçyý÷š?i‡¢“®¸`¸IŒWŠÈI|:œÉ›p‚‹/ɳëµ(‹©æÙ‘ä›?ÉÔ?Sw>Q¾ø wÉ IÙDÁöØwLŽ…k£«¿Ø†ÀΗz8I žÙ¹¬‘œ|ý}û6L,»ŠÊÁë:ÀÒ§|VÇÀ0é©Ã' y)œÁ]7MÈ|ý{!\¦¯*ÃJn ¹råÛHŒôÂÜÃ2ø€eP¸’Œ.¿ù×'åÅ<¬¾»ÄØ[#¸H ÙÂcÄ ÁTlÂÕÛ¸»Ê­×ÒfLP*ç’Ø™›_|‰4üÆí˺r<Æt컀¬½²ù·?z« {Èvˆ<ȬÄzjÈŽÆŠ½“q |¾:ÜEQ½Â é­V °; jìwm܋ѷÃS¼Ìcý¯e }[—5×ÄÖL½Æ‡gyLXÕo­»‚W<½ì&_“ 4Í›¨Ÿ'݆} ×׬´šÜØûØÓ:Ã’±i¸×{ٓͯbÍÙÚ:ÐÇ ÚÎêÏÿ캤íÈ& ¯©MÊ«-°­MÅäˆ`±­ÚF ʵÁq=®¹-Ûï¬È½_m»Íˆ°ÁMºÄ ŸÅ¹³É·ÛâÙÍýµÏ ÝÑ}´L¡SÕ¹|½ØÙ²ÛÍÝÝÔ2ÞeûÝàMÞkÞçÞ [•ìíÐúÞÖ}ÕòíÝô]ß«Þé‹ßôªßûÍß`íêß¿ àà*àNà[cŽà =¦ NÖ­øàùºà.á¹Jánᮊá®á§Êáëíᢠâ!.âšJânl➈*žà,ÞâÇjʦí·0.y¬ÌÜ5®oÐÌÛ9®–;ž¡Ö=þp7ŽC_ê¶݉A®ã§±¯ÂVm½ºIˆÄ|Ü\úÚ6h¼QŽ·À ™jèÅï«Ø‚=ÄDŒÅ(¿7åt¸åøÖÄ^d;,ç¿"¬wD­mWŽæ~(µÌHÉ'Ô»Õ ÖÃmçZ¾äLŒó›‹YtÇ^Åi]ç‚áS»*Œj=éÓ8¾aýèq§æ 7é³ç¯sÖhüÂ%®é~Mè8äpv §‡\Ó>½Ç)gê÷ã7Iës‹êÈëw®ë¬Íë½Ï´ ìÁn´8Nì=&ã3NÈ^ìÍDÞØ(þì'.í—íÔ¬×íÙÞ×Ö¾í`ÚíÞÞ¤àî;:î䞢æ~îϪî*îìîœîþî¯ïò.™ô^ï`‹ï}ïú.•üÞïî ðøüï϶/Ïð¿˜ð ‰ ßðw ñéüð¿¤Ë®¦„9HñÏñ¥žñî­‚ßð­`“щ9àHò˜·Ñ‹â†ŽŽÒ¢hºUÌò›^è0_ó}æbf$móµŽó$'½„>‹ŽLt­‹„ͼùHæ`ó4÷ ôÁ7Õ$¬w Ô;ãèuXÁ åçƒg:|ÛR^½Ô:\׌¾|Ú†|«æõúèÿ=ö÷Måi¼c`M@ý¿—¾q_×S-÷ƒNõÒ8¾yÅl_ÃO¬Öük×øi.ô~ï÷tWŽÓuuÆw-M‘èŽéͦyËk69'MJžPÏ5ù™Ç ßÅN/úÙùÎÙ:Ù°¯àì;ÎŽ[ûnú¢K˜´µ«ûd€#¯ðÃóÀ¥ñÇ¿üÌßüÎÿüÐýÒ?ýÔ_ý­;libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/actions/DispatchAction.html0000644000175000017500000007151410404045230030575 0ustar arnaudarnaud00000000000000 DispatchAction (Apache Struts API Documentation)

            org.apache.struts.actions
            Class DispatchAction

            java.lang.Object
              |
              +--org.apache.struts.action.Action
                    |
                    +--org.apache.struts.actions.DispatchAction
            
            Direct Known Subclasses:
            LookupDispatchAction

            public abstract class DispatchAction
            extends Action

            An abstract Action that dispatches to a public method that is named by the request parameter whose name is specified by the parameter property of the corresponding ActionMapping. This Action is useful for developers who prefer to combine many similar actions into a single Action class, in order to simplify their application design.

            To configure the use of this action in your struts-config.xml file, create an entry like this:

            <action path="/saveSubscription" type="org.apache.struts.actions.DispatchAction" name="subscriptionForm" scope="request" input="/subscription.jsp" parameter="method"/>

            which will use the value of the request parameter named "method" to pick the appropriate "execute" method, which must have the same signature (other than method name) of the standard Action.execute method. For example, you might have the following three methods in the same action:

            • public ActionForward delete(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception
            • public ActionForward insert(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception
            • public ActionForward update(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception

            and call one of the methods with a URL like this:

            http://localhost:8080/myapp/saveSubscription.do?method=update

            NOTE - All of the other mapping characteristics of this action must be shared by the various handlers. This places some constraints over what types of handlers may reasonably be packaged into the same DispatchAction subclass.

            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
            Author:
            Niall Pemberton , Craig R. McClanahan, Ted Husted

            Field Summary
            protected  java.lang.Class clazz
                      The Class instance of this DispatchAction class.
            protected static org.apache.commons.logging.Log log
                      Commons Logging instance.
            protected static MessageResources messages
                      The message resources for this package.
            protected  java.util.HashMap methods
                      The set of Method objects we have introspected for this class, keyed by method name.
            protected  java.lang.Class[] types
                      The set of argument type classes for the reflected method call.
             
            Fields inherited from class org.apache.struts.action.Action
            ACTION_SERVLET_KEY, APPLICATION_KEY, DATA_SOURCE_KEY, defaultLocale, ERROR_KEY, EXCEPTION_KEY, FORM_BEANS_KEY, FORWARDS_KEY, LOCALE_KEY, MAPPING_KEY, MAPPINGS_KEY, MESSAGE_KEY, MESSAGES_KEY, MULTIPART_KEY, PLUG_INS_KEY, REQUEST_PROCESSOR_KEY, servlet, SERVLET_KEY, TRANSACTION_TOKEN_KEY
             
            Constructor Summary
            DispatchAction()
                       
             
            Method Summary
            protected  ActionForward dispatchMethod(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, java.lang.String name)
                      Dispatch to the specified method.
             ActionForward execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
            protected  java.lang.reflect.Method getMethod(java.lang.String name)
                      Introspect the current class to identify a method of the specified name that accepts the same parameter types as the execute method does.
            protected  ActionForward unspecified(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Method which is dispatched to when there is no value for specified request parameter included in the request.
             
            Methods inherited from class org.apache.struts.action.Action
            execute, generateToken, getDataSource, getDataSource, getLocale, getResources, getResources, getResources, getServlet, isCancelled, isTokenValid, isTokenValid, perform, perform, resetToken, saveErrors, saveMessages, saveToken, setLocale, setServlet, toHex
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
             

            Field Detail

            clazz

            protected java.lang.Class clazz
            The Class instance of this DispatchAction class.


            log

            protected static org.apache.commons.logging.Log log
            Commons Logging instance.


            messages

            protected static MessageResources messages
            The message resources for this package.


            methods

            protected java.util.HashMap methods
            The set of Method objects we have introspected for this class, keyed by method name. This collection is populated as different methods are called, so that introspection needs to occur only once per method name.


            types

            protected java.lang.Class[] types
            The set of argument type classes for the reflected method call. These are the same for all calls, so calculate them only once.

            Constructor Detail

            DispatchAction

            public DispatchAction()
            Method Detail

            execute

            public ActionForward execute(ActionMapping mapping,
                                         ActionForm form,
                                         javax.servlet.http.HttpServletRequest request,
                                         javax.servlet.http.HttpServletResponse response)
                                  throws java.lang.Exception
            Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it). Return an ActionForward instance describing where and how control should be forwarded, or null if the response has already been completed.

            Overrides:
            execute in class Action
            Parameters:
            mapping - The ActionMapping used to select this instance
            form - The optional ActionForm bean for this request (if any)
            request - The HTTP request we are processing
            response - The HTTP response we are creating
            Throws:
            java.lang.Exception - if an exception occurs

            unspecified

            protected ActionForward unspecified(ActionMapping mapping,
                                                ActionForm form,
                                                javax.servlet.http.HttpServletRequest request,
                                                javax.servlet.http.HttpServletResponse response)
                                         throws java.lang.Exception
            Method which is dispatched to when there is no value for specified request parameter included in the request. Subclasses of DispatchAction should override this method if they wish to provide default behavior different than producing an HTTP "Bad Request" error.

            java.lang.Exception

            dispatchMethod

            protected ActionForward dispatchMethod(ActionMapping mapping,
                                                   ActionForm form,
                                                   javax.servlet.http.HttpServletRequest request,
                                                   javax.servlet.http.HttpServletResponse response,
                                                   java.lang.String name)
                                            throws java.lang.Exception
            Dispatch to the specified method.

            java.lang.Exception
            Since:
            Struts 1.1

            getMethod

            protected java.lang.reflect.Method getMethod(java.lang.String name)
                                                  throws java.lang.NoSuchMethodException
            Introspect the current class to identify a method of the specified name that accepts the same parameter types as the execute method does.

            Parameters:
            name - Name of the method to be introspected
            Throws:
            java.lang.NoSuchMethodException - if no such method can be found


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/actions/ForwardAction.html0000644000175000017500000004723010404045230030440 0ustar arnaudarnaud00000000000000 ForwardAction (Apache Struts API Documentation)

            org.apache.struts.actions
            Class ForwardAction

            java.lang.Object
              |
              +--org.apache.struts.action.Action
                    |
                    +--org.apache.struts.actions.ForwardAction
            

            public class ForwardAction
            extends Action

            An Action that forwards to the context-relative URI specified by the parameter property of our associated ActionMapping. This can be used to integrate Struts with other business logic components that are implemented as servlets (or JSP pages), but still take advantage of the Struts controller servlet's functionality (such as processing of form beans).

            To configure the use of this Action in your struts-config.xml file, create an entry like this:

            <action path="/saveSubscription" type="org.apache.struts.actions.ForwardAction" name="subscriptionForm" scope="request" input="/subscription.jsp" parameter="/path/to/processing/servlet"/>

            which will forward control to the context-relative URI specified by the parameter attribute.

            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
            Author:
            Craig R. McClanahan

            Field Summary
            protected static MessageResources messages
                      The message resources for this package.
             
            Fields inherited from class org.apache.struts.action.Action
            ACTION_SERVLET_KEY, APPLICATION_KEY, DATA_SOURCE_KEY, defaultLocale, ERROR_KEY, EXCEPTION_KEY, FORM_BEANS_KEY, FORWARDS_KEY, LOCALE_KEY, MAPPING_KEY, MAPPINGS_KEY, MESSAGE_KEY, MESSAGES_KEY, MULTIPART_KEY, PLUG_INS_KEY, REQUEST_PROCESSOR_KEY, servlet, SERVLET_KEY, TRANSACTION_TOKEN_KEY
             
            Constructor Summary
            ForwardAction()
                       
             
            Method Summary
             ActionForward execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
             
            Methods inherited from class org.apache.struts.action.Action
            execute, generateToken, getDataSource, getDataSource, getLocale, getResources, getResources, getResources, getServlet, isCancelled, isTokenValid, isTokenValid, perform, perform, resetToken, saveErrors, saveMessages, saveToken, setLocale, setServlet, toHex
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
             

            Field Detail

            messages

            protected static MessageResources messages
            The message resources for this package.

            Constructor Detail

            ForwardAction

            public ForwardAction()
            Method Detail

            execute

            public ActionForward execute(ActionMapping mapping,
                                         ActionForm form,
                                         javax.servlet.http.HttpServletRequest request,
                                         javax.servlet.http.HttpServletResponse response)
                                  throws java.lang.Exception
            Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it). Return an ActionForward instance describing where and how control should be forwarded, or null if the response has already been completed.

            Overrides:
            execute in class Action
            Parameters:
            mapping - The ActionMapping used to select this instance
            form - The optional ActionForm bean for this request (if any)
            request - The HTTP request we are processing
            response - The HTTP response we are creating
            Throws:
            java.lang.Exception - if an error occurs


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/actions/IncludeAction.html0000644000175000017500000004722510404045216030427 0ustar arnaudarnaud00000000000000 IncludeAction (Apache Struts API Documentation)

            org.apache.struts.actions
            Class IncludeAction

            java.lang.Object
              |
              +--org.apache.struts.action.Action
                    |
                    +--org.apache.struts.actions.IncludeAction
            

            public class IncludeAction
            extends Action

            An Action that includes the context-relative URI specified by the parameter property of our associated ActionMapping. This can be used to integrate Struts with other business logic components that are implemented as servlets (or JSP pages), but still take advantage of the Struts controller servlet's functionality (such as processing of form beans).

            To configure the use of this Action in your struts-config.xml file, create an entry like this:

            <action path="/saveSubscription" type="org.apache.struts.actions.IncludeAction" name="subscriptionForm" scope="request" input="/subscription.jsp" parameter="/path/to/processing/servlet">

            which will include the context-relative URI specified by the parameter attribute.

            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
            Author:
            Craig R. McClanahan

            Field Summary
            protected static MessageResources messages
                      The message resources for this package.
             
            Fields inherited from class org.apache.struts.action.Action
            ACTION_SERVLET_KEY, APPLICATION_KEY, DATA_SOURCE_KEY, defaultLocale, ERROR_KEY, EXCEPTION_KEY, FORM_BEANS_KEY, FORWARDS_KEY, LOCALE_KEY, MAPPING_KEY, MAPPINGS_KEY, MESSAGE_KEY, MESSAGES_KEY, MULTIPART_KEY, PLUG_INS_KEY, REQUEST_PROCESSOR_KEY, servlet, SERVLET_KEY, TRANSACTION_TOKEN_KEY
             
            Constructor Summary
            IncludeAction()
                       
             
            Method Summary
             ActionForward execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
             
            Methods inherited from class org.apache.struts.action.Action
            execute, generateToken, getDataSource, getDataSource, getLocale, getResources, getResources, getResources, getServlet, isCancelled, isTokenValid, isTokenValid, perform, perform, resetToken, saveErrors, saveMessages, saveToken, setLocale, setServlet, toHex
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
             

            Field Detail

            messages

            protected static MessageResources messages
            The message resources for this package.

            Constructor Detail

            IncludeAction

            public IncludeAction()
            Method Detail

            execute

            public ActionForward execute(ActionMapping mapping,
                                         ActionForm form,
                                         javax.servlet.http.HttpServletRequest request,
                                         javax.servlet.http.HttpServletResponse response)
                                  throws java.lang.Exception
            Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it). Return an ActionForward instance describing where and how control should be forwarded, or null if the response has already been completed.

            Overrides:
            execute in class Action
            Parameters:
            mapping - The ActionMapping used to select this instance
            form - The optional ActionForm bean for this request (if any)
            request - The HTTP request we are processing
            response - The HTTP response we are creating
            Throws:
            java.lang.Exception - if an error occurs


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/actions/LookupDispatchAction.html0000644000175000017500000006325010404045236031773 0ustar arnaudarnaud00000000000000 LookupDispatchAction (Apache Struts API Documentation)

            org.apache.struts.actions
            Class LookupDispatchAction

            java.lang.Object
              |
              +--org.apache.struts.action.Action
                    |
                    +--org.apache.struts.actions.DispatchAction
                          |
                          +--org.apache.struts.actions.LookupDispatchAction
            

            public abstract class LookupDispatchAction
            extends DispatchAction

            An abstract Action that dispatches to the subclass mapped execute method. This is useful in cases where an HTML form has multiple submit buttons with the same name. The button name is specified by the parameter property of the corresponding ActionMapping. To configure the use of this action in your struts-config.xml file, create an entry like this:

               <action path="/test"
                       type="org.example.MyAction"
                       name="MyForm"
                      scope="request"
                      input="/test.jsp"
                  parameter="action"/>
             

            which will use the value of the request parameter named "action" to locate the corresponding key in ApplicationResources. For example, you might have the following ApplicationResources.properties:

                button.add=Add Record
                button.delete=Delete Record
              

            And your JSP would have the following format for submit buttons:

               <html:form action="/test">
                <html:submit property="action">
                  <bean:message key="button.add"/>
                </html:submit>
                <html:submit property="action">
                  <bean:message key="button.delete"/>
                </html:submit>
              </html:form>
              

            Your subclass must implement both getKeyMethodMap and the methods defined in the map. An example of such implementations are:

              protected Map getKeyMethodMap() {
                  Map map = new HashMap();
                  map.put("button.add", "add");
                  map.put("button.delete", "delete");
                  return map;
              }
            
              public ActionForward add(ActionMapping mapping,
                      ActionForm form,
                      HttpServletRequest request,
                      HttpServletResponse response)
                      throws IOException, ServletException {
                  // do add
                  return mapping.findForward("success");
              }
            
              public ActionForward delete(ActionMapping mapping,
                      ActionForm form,
                      HttpServletRequest request,
                      HttpServletResponse response)
                      throws IOException, ServletException {
                  // do delete
                  return mapping.findForward("success");
              }
              

            Notes - If duplicate values exist for the keys returned by getKeys, only the first one found will be returned. If no corresponding key is found then an exception will be thrown.

            Author:
            Erik Hatcher, Scott Carlson, David Graham

            Field Summary
            protected  java.util.Map keyMethodMap
                      Resource key to method name lookup.
            protected  java.util.Map localeMap
                      Reverse lookup map from resource value to resource key.
             
            Fields inherited from class org.apache.struts.actions.DispatchAction
            clazz, log, messages, methods, types
             
            Fields inherited from class org.apache.struts.action.Action
            ACTION_SERVLET_KEY, APPLICATION_KEY, DATA_SOURCE_KEY, defaultLocale, ERROR_KEY, EXCEPTION_KEY, FORM_BEANS_KEY, FORWARDS_KEY, LOCALE_KEY, MAPPING_KEY, MAPPINGS_KEY, MESSAGE_KEY, MESSAGES_KEY, MULTIPART_KEY, PLUG_INS_KEY, REQUEST_PROCESSOR_KEY, servlet, SERVLET_KEY, TRANSACTION_TOKEN_KEY
             
            Constructor Summary
            LookupDispatchAction()
                       
             
            Method Summary
             ActionForward execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
            protected abstract  java.util.Map getKeyMethodMap()
                      Provides the mapping from resource key to method name.
            private  java.util.Map initLookupMap(javax.servlet.http.HttpServletRequest request, java.util.Locale userLocale)
                      This is the first time this Locale is used so build the reverse lookup Map.
             
            Methods inherited from class org.apache.struts.actions.DispatchAction
            dispatchMethod, getMethod, unspecified
             
            Methods inherited from class org.apache.struts.action.Action
            execute, generateToken, getDataSource, getDataSource, getLocale, getResources, getResources, getResources, getServlet, isCancelled, isTokenValid, isTokenValid, perform, perform, resetToken, saveErrors, saveMessages, saveToken, setLocale, setServlet, toHex
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
             

            Field Detail

            localeMap

            protected java.util.Map localeMap
            Reverse lookup map from resource value to resource key.


            keyMethodMap

            protected java.util.Map keyMethodMap
            Resource key to method name lookup.

            Constructor Detail

            LookupDispatchAction

            public LookupDispatchAction()
            Method Detail

            execute

            public ActionForward execute(ActionMapping mapping,
                                         ActionForm form,
                                         javax.servlet.http.HttpServletRequest request,
                                         javax.servlet.http.HttpServletResponse response)
                                  throws java.lang.Exception
            Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it). Return an ActionForward instance describing where and how control should be forwarded, or null if the response has already been completed.

            Overrides:
            execute in class DispatchAction
            Parameters:
            mapping - The ActionMapping used to select this instance
            request - The HTTP request we are processing
            response - The HTTP response we are creating
            form - The optional ActionForm bean for this request (if any)
            Returns:
            Describes where and how control should be forwarded.
            Throws:
            java.lang.Exception - if an error occurs

            initLookupMap

            private java.util.Map initLookupMap(javax.servlet.http.HttpServletRequest request,
                                                java.util.Locale userLocale)
            This is the first time this Locale is used so build the reverse lookup Map. Search for message keys in all configured MessageResources for the current module.


            getKeyMethodMap

            protected abstract java.util.Map getKeyMethodMap()
            Provides the mapping from resource key to method name.

            Returns:
            Resource key / method name map.


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/actions/SwitchAction.html0000644000175000017500000004765310404045232030310 0ustar arnaudarnaud00000000000000 SwitchAction (Apache Struts API Documentation)

            org.apache.struts.actions
            Class SwitchAction

            java.lang.Object
              |
              +--org.apache.struts.action.Action
                    |
                    +--org.apache.struts.actions.SwitchAction
            

            public class SwitchAction
            extends Action

            A standard Action that switches to a new module and then forwards control to a URI (specified in a number of possible ways) within the new module.

            Valid request parameters for this Action are:

            • page - Module-relative URI (beginning with "/") to which control should be forwarded after switching.
            • prefix - The module prefix (beginning with "/") of the module to which control should be switched. Use a zero-length string for the default module. The appropriate ModuleConfig object will be stored as a request attribute, so any subsequent logic will assume the new module.

            Since:
            Struts 1.1
            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
            Author:
            Craig R. McClanahan

            Field Summary
            protected static org.apache.commons.logging.Log log
                      Commons Logging instance.
            protected static MessageResources messages
                      The message resources for this package.
             
            Fields inherited from class org.apache.struts.action.Action
            ACTION_SERVLET_KEY, APPLICATION_KEY, DATA_SOURCE_KEY, defaultLocale, ERROR_KEY, EXCEPTION_KEY, FORM_BEANS_KEY, FORWARDS_KEY, LOCALE_KEY, MAPPING_KEY, MAPPINGS_KEY, MESSAGE_KEY, MESSAGES_KEY, MULTIPART_KEY, PLUG_INS_KEY, REQUEST_PROCESSOR_KEY, servlet, SERVLET_KEY, TRANSACTION_TOKEN_KEY
             
            Constructor Summary
            SwitchAction()
                       
             
            Method Summary
             ActionForward execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
             
            Methods inherited from class org.apache.struts.action.Action
            execute, generateToken, getDataSource, getDataSource, getLocale, getResources, getResources, getResources, getServlet, isCancelled, isTokenValid, isTokenValid, perform, perform, resetToken, saveErrors, saveMessages, saveToken, setLocale, setServlet, toHex
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
             

            Field Detail

            log

            protected static org.apache.commons.logging.Log log
            Commons Logging instance.


            messages

            protected static MessageResources messages
            The message resources for this package.

            Constructor Detail

            SwitchAction

            public SwitchAction()
            Method Detail

            execute

            public ActionForward execute(ActionMapping mapping,
                                         ActionForm form,
                                         javax.servlet.http.HttpServletRequest request,
                                         javax.servlet.http.HttpServletResponse response)
                                  throws java.lang.Exception
            Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.

            Overrides:
            execute in class Action
            Parameters:
            mapping - The ActionMapping used to select this instance
            form - The optional ActionForm bean for this request (if any)
            request - The HTTP request we are processing
            response - The HTTP response we are creating
            Throws:
            java.lang.Exception - if the application business logic throws an exception


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/actions/package-frame.html0000644000175000017500000000252610404045224030363 0ustar arnaudarnaud00000000000000 org.apache.struts.actions (Apache Struts API Documentation) org.apache.struts.actions
            Classes 
            DispatchAction
            ForwardAction
            IncludeAction
            LookupDispatchAction
            SwitchAction
            libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/actions/package-summary.html0000644000175000017500000002027210404045220030760 0ustar arnaudarnaud00000000000000 org.apache.struts.actions (Apache Struts API Documentation)

            Package org.apache.struts.actions

            The actions package provides special adapters between the incoming HTTP request and the corresponding business logic.

            See:
                      Description

            Class Summary
            DispatchAction An abstract Action that dispatches to a public method that is named by the request parameter whose name is specified by the parameter property of the corresponding ActionMapping.
            ForwardAction An Action that forwards to the context-relative URI specified by the parameter property of our associated ActionMapping.
            IncludeAction An Action that includes the context-relative URI specified by the parameter property of our associated ActionMapping.
            LookupDispatchAction An abstract Action that dispatches to the subclass mapped execute method.
            SwitchAction A standard Action that switches to a new module and then forwards control to a URI (specified in a number of possible ways) within the new module.
             

            Package org.apache.struts.actions Description

            The actions package provides special adapters between the incoming HTTP request and the corresponding business logic.



            Action Package UML

            Package Specification

            ##### FILL IN ANY SPECS NEEDED BY JAVA COMPATIBILITY KIT #####

            Related Documentation

            For overviews, tutorials, examples, guides, and tool documentation, please see:



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/actions/package-tree.html0000644000175000017500000001454210404045250030230 0ustar arnaudarnaud00000000000000 org.apache.struts.actions Class Hierarchy (Apache Struts API Documentation)

            Hierarchy For Package org.apache.struts.actions

            Package Hierarchies:
            All Packages

            Class Hierarchy



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/actions/package-use.html0000644000175000017500000001507410404045232030066 0ustar arnaudarnaud00000000000000 Uses of Package org.apache.struts.actions (Apache Struts API Documentation)

            Uses of Package
            org.apache.struts.actions

            Packages that use org.apache.struts.actions
            org.apache.struts.actions The actions package provides special adapters between the incoming HTTP request and the corresponding business logic. 
             

            Classes in org.apache.struts.actions used by org.apache.struts.actions
            DispatchAction
                      An abstract Action that dispatches to a public method that is named by the request parameter whose name is specified by the parameter property of the corresponding ActionMapping.
             



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/class-use/0000755000175000017500000000000010423130300025233 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/class-use/Globals.html0000644000175000017500000001236510404045242027524 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.Globals (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.Globals

            No usage of org.apache.struts.Globals



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/0000755000175000017500000000000010423130300024601 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/class-use/0000755000175000017500000000000010423130300026500 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/class-use/ActionConfig.html0000644000175000017500000004300510404045222031742 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.config.ActionConfig (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.config.ActionConfig

            Packages that use ActionConfig
            org.apache.struts.action The action package is the core of the struts framework, providing the "Controller" aspect of a MVC model. 
            org.apache.struts.config The "config" package contains configuration objects that correspond to elements that may be specified in the struts-config.xml module configuration file. 
            org.apache.struts.config.impl   
            org.apache.struts.util The Utilities package provides a variety of families of classes, to solve problems that are commonly encountered in building web applications. 
             

            Uses of ActionConfig in org.apache.struts.action
             

            Subclasses of ActionConfig in org.apache.struts.action
             class ActionMapping
                      An ActionMapping represents the information that the controller servlet, ActionServlet, knows about the mapping of a particular request to an instance of a particular action class.
             class RequestActionMapping
                      Subclass of ActionMapping that defaults the form bean scope to request.
             class SessionActionMapping
                      Subclass of ActionMapping that defaults the form bean scope to session.
             

            Uses of ActionConfig in org.apache.struts.config
             

            Methods in org.apache.struts.config that return ActionConfig
             ActionConfig ModuleConfig.findActionConfig(java.lang.String path)
                      Return the action configuration for the specified path, if any; otherwise return null.
             ActionConfig[] ModuleConfig.findActionConfigs()
                      Return the action configurations for this module.
             

            Methods in org.apache.struts.config with parameters of type ActionConfig
             void ModuleConfig.addActionConfig(ActionConfig config)
                      Add a new ActionConfig instance to the set associated with this module.
             void ModuleConfig.removeActionConfig(ActionConfig config)
                      Remove the specified action configuration instance.
             

            Uses of ActionConfig in org.apache.struts.config.impl
             

            Methods in org.apache.struts.config.impl that return ActionConfig
             ActionConfig ModuleConfigImpl.findActionConfig(java.lang.String path)
                      Return the action configuration for the specified path, if any; otherwise return null.
             ActionConfig[] ModuleConfigImpl.findActionConfigs()
                      Return the action configurations for this module.
             

            Methods in org.apache.struts.config.impl with parameters of type ActionConfig
             void ModuleConfigImpl.addActionConfig(ActionConfig config)
                      Add a new ActionConfig instance to the set associated with this module.
             void ModuleConfigImpl.removeActionConfig(ActionConfig config)
                      Remove the specified action configuration instance.
             

            Uses of ActionConfig in org.apache.struts.util
             

            Methods in org.apache.struts.util with parameters of type ActionConfig
            static java.lang.String RequestUtils.actionURL(javax.servlet.http.HttpServletRequest request, ActionConfig action, java.lang.String pattern)
                      Return the context-relative URL that corresponds to the specified ActionConfig, relative to the module associated with the current modules's ModuleConfig.
             



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/class-use/ActionMappingFactory.html0000644000175000017500000001267210404045232033467 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.config.ActionMappingFactory (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.config.ActionMappingFactory

            No usage of org.apache.struts.config.ActionMappingFactory



            Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015110423140532011313 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/class-use/AddDataSourcePropertyRule.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/class-use/AddDataSourcePropertyRule.0000644000175000017500000001274210404045236033563 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.config.AddDataSourcePropertyRule (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.config.AddDataSourcePropertyRule

            No usage of org.apache.struts.config.AddDataSourcePropertyRule



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/class-use/ApplicationConfig.html0000644000175000017500000002047110404045250032773 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.config.ApplicationConfig (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.config.ApplicationConfig

            Packages that use ApplicationConfig
            org.apache.struts.action The action package is the core of the struts framework, providing the "Controller" aspect of a MVC model. 
             

            Uses of ApplicationConfig in org.apache.struts.action
             

            Methods in org.apache.struts.action that return ApplicationConfig
            protected  ApplicationConfig ActionServlet.getApplicationConfig(javax.servlet.http.HttpServletRequest request)
                      Deprecated. use ActionServlet.getModuleConfig(HttpServletRequest)
            protected  ApplicationConfig ActionServlet.initApplicationConfig(java.lang.String prefix, java.lang.String path)
                      Deprecated. use ActionServlet.initModuleConfig(String,String)
             



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/class-use/ConfigHelper.html0000644000175000017500000001257210404045214031752 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.config.ConfigHelper (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.config.ConfigHelper

            No usage of org.apache.struts.config.ConfigHelper



            Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000014510423140532011316 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/class-use/ConfigHelperInterface.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/class-use/ConfigHelperInterface.html0000644000175000017500000001633210404045234033573 0ustar arnaudarnaud00000000000000 Uses of Interface org.apache.struts.config.ConfigHelperInterface (Apache Struts API Documentation)

            Uses of Interface
            org.apache.struts.config.ConfigHelperInterface

            Packages that use ConfigHelperInterface
            org.apache.struts.config The "config" package contains configuration objects that correspond to elements that may be specified in the struts-config.xml module configuration file. 
             

            Uses of ConfigHelperInterface in org.apache.struts.config
             

            Classes in org.apache.struts.config that implement ConfigHelperInterface
             class ConfigHelper
                      NOTE: THIS CLASS IS UNDER ACTIVE DEVELOPMENT.
             



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/class-use/ConfigRuleSet.html0000644000175000017500000001260210404045236032114 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.config.ConfigRuleSet (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.config.ConfigRuleSet

            No usage of org.apache.struts.config.ConfigRuleSet



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/class-use/ControllerConfig.html0000644000175000017500000002724510404045246032666 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.config.ControllerConfig (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.config.ControllerConfig

            Packages that use ControllerConfig
            org.apache.struts.config The "config" package contains configuration objects that correspond to elements that may be specified in the struts-config.xml module configuration file. 
            org.apache.struts.config.impl   
             

            Uses of ControllerConfig in org.apache.struts.config
             

            Methods in org.apache.struts.config that return ControllerConfig
             ControllerConfig ModuleConfig.getControllerConfig()
                      The controller configuration object for this module.
             

            Methods in org.apache.struts.config with parameters of type ControllerConfig
             void ModuleConfig.setControllerConfig(ControllerConfig cc)
                      The controller configuration object for this module.
             

            Uses of ControllerConfig in org.apache.struts.config.impl
             

            Fields in org.apache.struts.config.impl declared as ControllerConfig
            protected  ControllerConfig ModuleConfigImpl.controllerConfig
                      The controller configuration object for this module.
             

            Methods in org.apache.struts.config.impl that return ControllerConfig
             ControllerConfig ModuleConfigImpl.getControllerConfig()
                      The controller configuration object for this module.
             

            Methods in org.apache.struts.config.impl with parameters of type ControllerConfig
             void ModuleConfigImpl.setControllerConfig(ControllerConfig cc)
                      The controller configuration object for this module.
             



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/class-use/DataSourceConfig.html0000644000175000017500000003235610404045212032565 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.config.DataSourceConfig (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.config.DataSourceConfig

            Packages that use DataSourceConfig
            org.apache.struts.config The "config" package contains configuration objects that correspond to elements that may be specified in the struts-config.xml module configuration file. 
            org.apache.struts.config.impl   
             

            Uses of DataSourceConfig in org.apache.struts.config
             

            Methods in org.apache.struts.config that return DataSourceConfig
             DataSourceConfig ModuleConfig.findDataSourceConfig(java.lang.String key)
                      Return the data source configuration for the specified key, if any; otherwise return null.
             DataSourceConfig[] ModuleConfig.findDataSourceConfigs()
                      Return the data source configurations for this module.
             

            Methods in org.apache.struts.config with parameters of type DataSourceConfig
             void ModuleConfig.addDataSourceConfig(DataSourceConfig config)
                      Add a new DataSourceConfig instance to the set associated with this module.
             void ModuleConfig.removeDataSourceConfig(DataSourceConfig config)
                      Remove the specified data source configuration instance.
             

            Uses of DataSourceConfig in org.apache.struts.config.impl
             

            Methods in org.apache.struts.config.impl that return DataSourceConfig
             DataSourceConfig ModuleConfigImpl.findDataSourceConfig(java.lang.String key)
                      Return the data source configuration for the specified key, if any; otherwise return null.
             DataSourceConfig[] ModuleConfigImpl.findDataSourceConfigs()
                      Return the data source configurations for this module.
             

            Methods in org.apache.struts.config.impl with parameters of type DataSourceConfig
             void ModuleConfigImpl.addDataSourceConfig(DataSourceConfig config)
                      Add a new DataSourceConfig instance to the set associated with this module.
             void ModuleConfigImpl.removeDataSourceConfig(DataSourceConfig config)
                      Remove the specified data source configuration instance.
             



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/class-use/ExceptionConfig.html0000644000175000017500000004671510404045244032502 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.config.ExceptionConfig (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.config.ExceptionConfig

            Packages that use ExceptionConfig
            org.apache.struts.action The action package is the core of the struts framework, providing the "Controller" aspect of a MVC model. 
            org.apache.struts.config The "config" package contains configuration objects that correspond to elements that may be specified in the struts-config.xml module configuration file. 
            org.apache.struts.config.impl   
             

            Uses of ExceptionConfig in org.apache.struts.action
             

            Subclasses of ExceptionConfig in org.apache.struts.action
             class ActionException
                      Deprecated. Replaced by org.apache.struts.config.ExceptionConfig
             

            Methods in org.apache.struts.action that return ExceptionConfig
             ExceptionConfig ActionMapping.findException(java.lang.Class type)
                      Find and return the ExceptionConfig instance defining how exceptions of the specified type should be handled.
             

            Methods in org.apache.struts.action with parameters of type ExceptionConfig
             ActionForward ExceptionHandler.execute(java.lang.Exception ex, ExceptionConfig ae, ActionMapping mapping, ActionForm formInstance, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Handle the exception.
             

            Uses of ExceptionConfig in org.apache.struts.config
             

            Methods in org.apache.struts.config that return ExceptionConfig
             ExceptionConfig ModuleConfig.findExceptionConfig(java.lang.String type)
                      Return the exception configuration for the specified type, if any; otherwise return null.
             ExceptionConfig[] ModuleConfig.findExceptionConfigs()
                      Return the exception configurations for this module.
             ExceptionConfig ActionConfig.findExceptionConfig(java.lang.String type)
                      Return the exception configuration for the specified type, if any; otherwise return null.
             ExceptionConfig[] ActionConfig.findExceptionConfigs()
                      Return the exception configurations for this action.
             

            Methods in org.apache.struts.config with parameters of type ExceptionConfig
             void ModuleConfig.addExceptionConfig(ExceptionConfig config)
                      Add a new ExceptionConfig instance to the set associated with this module.
             void ModuleConfig.removeExceptionConfig(ExceptionConfig config)
                      Remove the specified exception configuration instance.
             void ActionConfig.addExceptionConfig(ExceptionConfig config)
                      Add a new ExceptionConfig instance to the set associated with this action.
             void ActionConfig.removeExceptionConfig(ExceptionConfig config)
                      Remove the specified exception configuration instance.
             

            Uses of ExceptionConfig in org.apache.struts.config.impl
             

            Methods in org.apache.struts.config.impl that return ExceptionConfig
             ExceptionConfig ModuleConfigImpl.findExceptionConfig(java.lang.String type)
                      Return the exception configuration for the specified type, if any; otherwise return null.
             ExceptionConfig[] ModuleConfigImpl.findExceptionConfigs()
                      Return the exception configurations for this module.
             

            Methods in org.apache.struts.config.impl with parameters of type ExceptionConfig
             void ModuleConfigImpl.addExceptionConfig(ExceptionConfig config)
                      Add a new ExceptionConfig instance to the set associated with this module.
             void ModuleConfigImpl.removeExceptionConfig(ExceptionConfig config)
                      Remove the specified exception configuration instance.
             



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/class-use/FormBeanConfig.html0000644000175000017500000004425410404045204032225 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.config.FormBeanConfig (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.config.FormBeanConfig

            Packages that use FormBeanConfig
            org.apache.struts.action The action package is the core of the struts framework, providing the "Controller" aspect of a MVC model. 
            org.apache.struts.config The "config" package contains configuration objects that correspond to elements that may be specified in the struts-config.xml module configuration file. 
            org.apache.struts.config.impl   
             

            Uses of FormBeanConfig in org.apache.struts.action
             

            Subclasses of FormBeanConfig in org.apache.struts.action
             class ActionFormBean
                      An ActionFormBean is the definition of a form bean that is loaded from a <form-bean> element in the Struts configuration file.
             

            Fields in org.apache.struts.action declared as FormBeanConfig
            protected  FormBeanConfig DynaActionFormClass.config
                      The form bean configuration information for this class.
             

            Methods in org.apache.struts.action with parameters of type FormBeanConfig
            static DynaActionFormClass DynaActionFormClass.createDynaActionFormClass(FormBeanConfig config)
                      Create (if necessary) and return a new DynaActionFormClass instance for the specified form bean configuration instance.
            protected  void DynaActionFormClass.introspect(FormBeanConfig config)
                      Introspect our form bean configuration to identify the supported properties.
             

            Constructors in org.apache.struts.action with parameters of type FormBeanConfig
            DynaActionFormClass(FormBeanConfig config)
                      Construct a new DynaActionFormClass for the specified form bean configuration.
             

            Uses of FormBeanConfig in org.apache.struts.config
             

            Methods in org.apache.struts.config that return FormBeanConfig
             FormBeanConfig ModuleConfig.findFormBeanConfig(java.lang.String name)
                      Return the form bean configuration for the specified key, if any; otherwise return null.
             FormBeanConfig[] ModuleConfig.findFormBeanConfigs()
                      Return the form bean configurations for this module.
             

            Methods in org.apache.struts.config with parameters of type FormBeanConfig
             void ModuleConfig.addFormBeanConfig(FormBeanConfig config)
                      Add a new FormBeanConfig instance to the set associated with this module.
             void ModuleConfig.removeFormBeanConfig(FormBeanConfig config)
                      Remove the specified form bean configuration instance.
             

            Uses of FormBeanConfig in org.apache.struts.config.impl
             

            Methods in org.apache.struts.config.impl that return FormBeanConfig
             FormBeanConfig ModuleConfigImpl.findFormBeanConfig(java.lang.String name)
                      Return the form bean configuration for the specified key, if any; otherwise return null.
             FormBeanConfig[] ModuleConfigImpl.findFormBeanConfigs()
                      Return the form bean configurations for this module.
             

            Methods in org.apache.struts.config.impl with parameters of type FormBeanConfig
             void ModuleConfigImpl.addFormBeanConfig(FormBeanConfig config)
                      Add a new FormBeanConfig instance to the set associated with this module.
             void ModuleConfigImpl.removeFormBeanConfig(FormBeanConfig config)
                      Remove the specified form bean configuration instance.
             



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/class-use/FormPropertyConfig.html0000644000175000017500000002310310404045210033167 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.config.FormPropertyConfig (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.config.FormPropertyConfig

            Packages that use FormPropertyConfig
            org.apache.struts.config The "config" package contains configuration objects that correspond to elements that may be specified in the struts-config.xml module configuration file. 
             

            Uses of FormPropertyConfig in org.apache.struts.config
             

            Methods in org.apache.struts.config that return FormPropertyConfig
             FormPropertyConfig FormBeanConfig.findFormPropertyConfig(java.lang.String name)
                      Return the form property configuration for the specified property name, if any; otherwise return null.
             FormPropertyConfig[] FormBeanConfig.findFormPropertyConfigs()
                      Return the form property configurations for this module.
             

            Methods in org.apache.struts.config with parameters of type FormPropertyConfig
             void FormBeanConfig.addFormPropertyConfig(FormPropertyConfig config)
                      Add a new FormPropertyConfig instance to the set associated with this module.
             void FormBeanConfig.removeFormPropertyConfig(FormPropertyConfig config)
                      Remove the specified form property configuration instance.
             



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/class-use/ForwardConfig.html0000644000175000017500000005557710404045174032160 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.config.ForwardConfig (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.config.ForwardConfig

            Packages that use ForwardConfig
            org.apache.struts.action The action package is the core of the struts framework, providing the "Controller" aspect of a MVC model. 
            org.apache.struts.config The "config" package contains configuration objects that correspond to elements that may be specified in the struts-config.xml module configuration file. 
            org.apache.struts.config.impl   
            org.apache.struts.tiles
            The Tiles taglib and framework allows building web pages by assembling reusable pieces of pages, called Tiles. 
            org.apache.struts.util The Utilities package provides a variety of families of classes, to solve problems that are commonly encountered in building web applications. 
             

            Uses of ForwardConfig in org.apache.struts.action
             

            Subclasses of ForwardConfig in org.apache.struts.action
             class ActionForward
                      An ActionForward represents a destination to which the controller servlet, ActionServlet, might be directed to perform a RequestDispatcher.forward() or HttpServletResponse.sendRedirect() to, as a result of processing activities of an Action class.
             class ForwardingActionForward
                      A subclass of ActionForward that defaults the redirect attribute to false.
             class RedirectingActionForward
                      A subclass of ActionForward that defaults the redirect attribute to true.
             

            Methods in org.apache.struts.action with parameters of type ForwardConfig
            protected  void RequestProcessor.processForwardConfig(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, ForwardConfig forward)
                      Forward or redirect to the specified destination, by the specified mechanism.
             

            Uses of ForwardConfig in org.apache.struts.config
             

            Methods in org.apache.struts.config that return ForwardConfig
             ForwardConfig ModuleConfig.findForwardConfig(java.lang.String name)
                      Return the forward configuration for the specified key, if any; otherwise return null.
             ForwardConfig[] ModuleConfig.findForwardConfigs()
                      Return the form bean configurations for this module.
             ForwardConfig ActionConfig.findForwardConfig(java.lang.String name)
                      Return the forward configuration for the specified key, if any; otherwise return null.
             ForwardConfig[] ActionConfig.findForwardConfigs()
                      Return the form bean configurations for this application.
             

            Methods in org.apache.struts.config with parameters of type ForwardConfig
             void ModuleConfig.addForwardConfig(ForwardConfig config)
                      Add a new ForwardConfig instance to the set of global forwards associated with this module.
             void ModuleConfig.removeForwardConfig(ForwardConfig config)
                      Remove the specified forward configuration instance.
             void ActionConfig.addForwardConfig(ForwardConfig config)
                      Add a new ForwardConfig instance to the set of global forwards associated with this action.
             void ActionConfig.removeForwardConfig(ForwardConfig config)
                      Remove the specified forward configuration instance.
             

            Uses of ForwardConfig in org.apache.struts.config.impl
             

            Methods in org.apache.struts.config.impl that return ForwardConfig
             ForwardConfig ModuleConfigImpl.findForwardConfig(java.lang.String name)
                      Return the forward configuration for the specified key, if any; otherwise return null.
             ForwardConfig[] ModuleConfigImpl.findForwardConfigs()
                      Return the form bean configurations for this module.
             

            Methods in org.apache.struts.config.impl with parameters of type ForwardConfig
             void ModuleConfigImpl.addForwardConfig(ForwardConfig config)
                      Add a new ForwardConfig instance to the set of global forwards associated with this module.
             void ModuleConfigImpl.removeForwardConfig(ForwardConfig config)
                      Remove the specified forward configuration instance.
             

            Uses of ForwardConfig in org.apache.struts.tiles
             

            Methods in org.apache.struts.tiles with parameters of type ForwardConfig
            protected  void TilesRequestProcessor.processForwardConfig(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, ForwardConfig forward)
                      Overloaded method from Struts' RequestProcessor.
             

            Uses of ForwardConfig in org.apache.struts.util
             

            Methods in org.apache.struts.util with parameters of type ForwardConfig
            static java.lang.String RequestUtils.forwardURL(javax.servlet.http.HttpServletRequest request, ForwardConfig forward)
                      Return the context-relative URL that corresponds to the specified ForwardConfig.
             



            Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000014610423140532011317 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/class-use/MessageResourcesConfig.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/class-use/MessageResourcesConfig.htm0000644000175000017500000003316410404045230033634 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.config.MessageResourcesConfig (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.config.MessageResourcesConfig

            Packages that use MessageResourcesConfig
            org.apache.struts.config The "config" package contains configuration objects that correspond to elements that may be specified in the struts-config.xml module configuration file. 
            org.apache.struts.config.impl   
             

            Uses of MessageResourcesConfig in org.apache.struts.config
             

            Methods in org.apache.struts.config that return MessageResourcesConfig
             MessageResourcesConfig ModuleConfig.findMessageResourcesConfig(java.lang.String key)
                      Return the message resources configuration for the specified key, if any; otherwise return null.
             MessageResourcesConfig[] ModuleConfig.findMessageResourcesConfigs()
                      Return the message resources configurations for this module.
             

            Methods in org.apache.struts.config with parameters of type MessageResourcesConfig
             void ModuleConfig.addMessageResourcesConfig(MessageResourcesConfig config)
                      Add a new MessageResourcesConfig instance to the set associated with this module.
             void ModuleConfig.removeMessageResourcesConfig(MessageResourcesConfig config)
                      Remove the specified message resources configuration instance.
             

            Uses of MessageResourcesConfig in org.apache.struts.config.impl
             

            Methods in org.apache.struts.config.impl that return MessageResourcesConfig
             MessageResourcesConfig ModuleConfigImpl.findMessageResourcesConfig(java.lang.String key)
                      Return the message resources configuration for the specified key, if any; otherwise return null.
             MessageResourcesConfig[] ModuleConfigImpl.findMessageResourcesConfigs()
                      Return the message resources configurations for this module.
             

            Methods in org.apache.struts.config.impl with parameters of type MessageResourcesConfig
             void ModuleConfigImpl.addMessageResourcesConfig(MessageResourcesConfig config)
                      Add a new MessageResourcesConfig instance to the set associated with this module.
             void ModuleConfigImpl.removeMessageResourcesConfig(MessageResourcesConfig config)
                      Remove the specified message resources configuration instance.
             



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/class-use/ModuleConfig.html0000644000175000017500000015031710404045236031764 0ustar arnaudarnaud00000000000000 Uses of Interface org.apache.struts.config.ModuleConfig (Apache Struts API Documentation)

            Uses of Interface
            org.apache.struts.config.ModuleConfig

            Packages that use ModuleConfig
            org.apache.struts.action The action package is the core of the struts framework, providing the "Controller" aspect of a MVC model. 
            org.apache.struts.config The "config" package contains configuration objects that correspond to elements that may be specified in the struts-config.xml module configuration file. 
            org.apache.struts.config.impl   
            org.apache.struts.plugins   
            org.apache.struts.taglib.html The "struts-html" tag library contains JSP custom tags useful in creating dynamic HTML user interfaces, including input forms. 
            org.apache.struts.tiles
            The Tiles taglib and framework allows building web pages by assembling reusable pieces of pages, called Tiles. 
            org.apache.struts.upload The upload package facilities to upload files using multi-part requests. 
            org.apache.struts.util The Utilities package provides a variety of families of classes, to solve problems that are commonly encountered in building web applications. 
            org.apache.struts.validator The validator package provides a series of classes to validate ActionForm type of input. 
             

            Uses of ModuleConfig in org.apache.struts.action
             

            Fields in org.apache.struts.action declared as ModuleConfig
            protected  ModuleConfig RequestProcessor.appConfig
                      Deprecated. use moduleConfig instead.
            protected  ModuleConfig RequestProcessor.moduleConfig
                      The ModuleConfiguration we are associated with.
             

            Methods in org.apache.struts.action that return ModuleConfig
            protected  ModuleConfig ActionServlet.getModuleConfig(javax.servlet.http.HttpServletRequest request)
                      Return the module configuration object for the currently selected module.
            protected  ModuleConfig ActionServlet.initModuleConfig(java.lang.String prefix, java.lang.String paths)
                      Initialize the application configuration information for the specified module.
             

            Methods in org.apache.struts.action with parameters of type ModuleConfig
            protected  RequestProcessor ActionServlet.getRequestProcessor(ModuleConfig config)
                      Look up and return the RequestProcessor responsible for the specified module, creating a new one if necessary.
            private  void ActionServlet.parseModuleConfigFile(java.lang.String prefix, java.lang.String paths, ModuleConfig config, org.apache.commons.digester.Digester digester, java.lang.String path)
                      Parses one module config file.
            protected  void ActionServlet.initApplicationDataSources(ModuleConfig config)
                      Deprecated. use initModuleDataSources(ModuleConfig)
            protected  void ActionServlet.initModuleDataSources(ModuleConfig config)
                      Initialize the data sources for the specified module.
            protected  void ActionServlet.initApplicationPlugIns(ModuleConfig config)
                      Deprecated. use ActionServlet.initModulePlugIns(ModuleConfig)
            protected  void ActionServlet.initModulePlugIns(ModuleConfig config)
                      Initialize the plug ins for the specified module.
            protected  void ActionServlet.initApplicationMessageResources(ModuleConfig config)
                      Deprecated. use initModuleMessageResources()
            protected  void ActionServlet.initModuleMessageResources(ModuleConfig config)
                      Initialize the application MessageResources for the specified module.
            private  void ActionServlet.defaultControllerConfig(ModuleConfig config)
                      Deprecated. Will be removed in a release after Struts 1.1.
            private  void ActionServlet.defaultFormBeansConfig(ModuleConfig config)
                      Deprecated. Will be removed in a release after Struts 1.1.
            private  void ActionServlet.defaultForwardsConfig(ModuleConfig config)
                      Deprecated. Will be removed in a release after Struts 1.1.
            private  void ActionServlet.defaultMappingsConfig(ModuleConfig config)
                      Deprecated. Will be removed in a release after Struts 1.1.
            private  void ActionServlet.defaultMessageResourcesConfig(ModuleConfig config)
                      Deprecated. Will be removed in a release after Struts 1.1.
             void RequestProcessor.init(ActionServlet servlet, ModuleConfig moduleConfig)
                      Initialize this request processor instance.
             void PlugIn.init(ActionServlet servlet, ModuleConfig config)
                      Receive notification that the specified module is being started up.
             

            Uses of ModuleConfig in org.apache.struts.config
             

            Classes in org.apache.struts.config that implement ModuleConfig
             class ApplicationConfig
                      Deprecated. Usage replaced by ModuleConfig Interface.
             

            Fields in org.apache.struts.config declared as ModuleConfig
            protected  ModuleConfig FormBeanConfig.moduleConfig
                      The ModuleConfig with which this form bean definition is associated.
            protected  ModuleConfig ActionConfig.moduleConfig
                      The module configuration with which we are associated.
             

            Methods in org.apache.struts.config that return ModuleConfig
            abstract  ModuleConfig ModuleConfigFactory.createModuleConfig(java.lang.String prefix)
                      Create and return a newly instansiated ModuleConfig.
             ModuleConfig FormBeanConfig.getModuleConfig()
                      Return the ModuleConfig with which this form bean definition is associated.
             ModuleConfig ActionConfig.getApplicationConfig()
                      Deprecated. ActionConfig.getModuleConfig()
             ModuleConfig ActionConfig.getModuleConfig()
                      The module configuration with which we are associated.
             

            Methods in org.apache.struts.config with parameters of type ModuleConfig
             void FormBeanConfig.setModuleConfig(ModuleConfig moduleConfig)
                      Set the ModuleConfig with which this form bean definition is associated.
             void ActionConfig.setApplicationConfig(ModuleConfig moduleConfig)
                      Deprecated. ActionConfig.setModuleConfig(ModuleConfig)
             void ActionConfig.setModuleConfig(ModuleConfig moduleConfig)
                      The module configuration with which we are associated.
             

            Uses of ModuleConfig in org.apache.struts.config.impl
             

            Classes in org.apache.struts.config.impl that implement ModuleConfig
             class ModuleConfigImpl
                      The collection of static configuration information that describes a Struts-based module.
             

            Methods in org.apache.struts.config.impl that return ModuleConfig
             ModuleConfig DefaultModuleConfigFactory.createModuleConfig(java.lang.String prefix)
                      Create and return a newly instansiated ModuleConfig.
             

            Uses of ModuleConfig in org.apache.struts.plugins
             

            Fields in org.apache.struts.plugins declared as ModuleConfig
            protected  ModuleConfig ModuleConfigVerifier.config
                      The ModuleConfig instance for our application module.
             

            Methods in org.apache.struts.plugins with parameters of type ModuleConfig
             void ModuleConfigVerifier.init(ActionServlet servlet, ModuleConfig config)
                      Receive notification that the specified module is being started up.
             

            Uses of ModuleConfig in org.apache.struts.taglib.html
             

            Fields in org.apache.struts.taglib.html declared as ModuleConfig
            protected  ModuleConfig FormTag.moduleConfig
                      The module configuration for our module.
             

            Uses of ModuleConfig in org.apache.struts.tiles
             

            Methods in org.apache.struts.tiles that return ModuleConfig
            protected  ModuleConfig TilesUtilStrutsModulesImpl.getModuleConfig(javax.servlet.http.HttpServletRequest request, javax.servlet.ServletContext servletContext)
                      Get the current ModuleConfig.
             

            Methods in org.apache.struts.tiles with parameters of type ModuleConfig
             DefinitionsFactory TilesUtilStrutsModulesImpl.getDefinitionsFactory(javax.servlet.ServletContext servletContext, ModuleConfig moduleConfig)
                      Get definition factory for the module attached to specified moduleConfig.
             DefinitionsFactory TilesUtilStrutsImpl.getDefinitionsFactory(javax.servlet.ServletContext servletContext, ModuleConfig moduleConfig)
                      Get definition factory for the module attached to the specified moduleConfig.
             void TilesPlugin.init(ActionServlet servlet, ModuleConfig moduleConfig)
                      Receive notification that the specified module is being started up.
            protected  DefinitionsFactoryConfig TilesPlugin.readFactoryConfig(ActionServlet servlet, ModuleConfig config)
                      Create FactoryConfig and initialize it from web.xml and struts-config.xml.
            protected  java.util.Map TilesPlugin.findStrutsPlugInConfigProperties(ActionServlet servlet, ModuleConfig config)
                      Find original properties set in the Struts PlugInConfig object.
            protected  void TilesPlugin.initRequestProcessorClass(ModuleConfig config)
                      Set RequestProcessor to appropriate Tiles RequestProcessor.
             void TilesRequestProcessor.init(ActionServlet servlet, ModuleConfig moduleConfig)
                      Initialize this request processor instance.
             

            Uses of ModuleConfig in org.apache.struts.upload
             

            Methods in org.apache.struts.upload with parameters of type ModuleConfig
            protected  long CommonsMultipartRequestHandler.getSizeMax(ModuleConfig mc)
                      Returns the maximum allowable size, in bytes, of an uploaded file.
            protected  long CommonsMultipartRequestHandler.getSizeThreshold(ModuleConfig mc)
                      Returns the size threshold which determines whether an uploaded file will be written to disk or cached in memory.
            protected  java.lang.String CommonsMultipartRequestHandler.getRepositoryPath(ModuleConfig mc)
                      Returns the path to the temporary directory to be used for uploaded files which are written to disk.
            protected  void DiskMultipartRequestHandler.retrieveTempDir(ModuleConfig moduleConfig)
                      Retrieves the temporary directory from either ActionServlet, a context property, or a system property, in that order.
             

            Uses of ModuleConfig in org.apache.struts.util
             

            Methods in org.apache.struts.util that return ModuleConfig
            static ModuleConfig RequestUtils.getRequestModuleConfig(javax.servlet.http.HttpServletRequest request)
                      Return the current ModuleConfig object stored in request, if it exists, null otherwise.
            static ModuleConfig RequestUtils.getModuleConfig(javax.servlet.http.HttpServletRequest request, javax.servlet.ServletContext context)
                      Return the ModuleConfig object is it exists, null otherwise.
            static ModuleConfig RequestUtils.getModuleConfig(javax.servlet.jsp.PageContext pageContext)
                      Return the ModuleConfig object if it exists, null if otherwise.
             

            Methods in org.apache.struts.util with parameters of type ModuleConfig
            static ActionForm RequestUtils.createActionForm(javax.servlet.http.HttpServletRequest request, ActionMapping mapping, ModuleConfig moduleConfig, ActionServlet servlet)
                      Create (if necessary) and return an ActionForm instance appropriate for this request.
             

            Uses of ModuleConfig in org.apache.struts.validator
             

            Fields in org.apache.struts.validator declared as ModuleConfig
            private  ModuleConfig ValidatorPlugIn.config
                      The module configuration for our owning module.
             

            Methods in org.apache.struts.validator with parameters of type ModuleConfig
             void ValidatorPlugIn.init(ActionServlet servlet, ModuleConfig config)
                      Initialize and load our resources.
             



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/class-use/ModuleConfigFactory.html0000644000175000017500000002167610404045216033317 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.config.ModuleConfigFactory (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.config.ModuleConfigFactory

            Packages that use ModuleConfigFactory
            org.apache.struts.config The "config" package contains configuration objects that correspond to elements that may be specified in the struts-config.xml module configuration file. 
            org.apache.struts.config.impl   
             

            Uses of ModuleConfigFactory in org.apache.struts.config
             

            Methods in org.apache.struts.config that return ModuleConfigFactory
            static ModuleConfigFactory ModuleConfigFactory.createFactory()
                      Create and return a ModuleConfigFactory instance of the appropriate class, which can be used to create customized ModuleConfig instances.
             

            Uses of ModuleConfigFactory in org.apache.struts.config.impl
             

            Subclasses of ModuleConfigFactory in org.apache.struts.config.impl
             class DefaultModuleConfigFactory
                      A factory for creating ModuleConfig instances.
             



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/class-use/PlugInConfig.html0000644000175000017500000003275210404045232031733 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.config.PlugInConfig (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.config.PlugInConfig

            Packages that use PlugInConfig
            org.apache.struts.config The "config" package contains configuration objects that correspond to elements that may be specified in the struts-config.xml module configuration file. 
            org.apache.struts.config.impl   
            org.apache.struts.tiles
            The Tiles taglib and framework allows building web pages by assembling reusable pieces of pages, called Tiles. 
             

            Uses of PlugInConfig in org.apache.struts.config
             

            Methods in org.apache.struts.config that return PlugInConfig
             PlugInConfig[] ModuleConfig.findPlugInConfigs()
                      Return the configured plug-in actions for this module.
             

            Methods in org.apache.struts.config with parameters of type PlugInConfig
             void ModuleConfig.addPlugInConfig(PlugInConfig plugInConfig)
                      Add a newly configured PlugInConfig instance to the set of plug-in Actions for this module.
             

            Uses of PlugInConfig in org.apache.struts.config.impl
             

            Methods in org.apache.struts.config.impl that return PlugInConfig
             PlugInConfig[] ModuleConfigImpl.findPlugInConfigs()
                      Return the configured plug-in actions for this module.
             

            Methods in org.apache.struts.config.impl with parameters of type PlugInConfig
             void ModuleConfigImpl.addPlugInConfig(PlugInConfig plugInConfig)
                      Add a newly configured PlugInConfig instance to the set of plug-in Actions for this module.
             

            Uses of PlugInConfig in org.apache.struts.tiles
             

            Fields in org.apache.struts.tiles declared as PlugInConfig
            protected  PlugInConfig TilesPlugin.currentPlugInConfigObject
                      The plugin config object provided by the ActionServlet initializing this plugin.
             

            Methods in org.apache.struts.tiles with parameters of type PlugInConfig
             void TilesPlugin.setCurrentPlugInConfigObject(PlugInConfig plugInConfigObject)
                      Method used by the ActionServlet initializing this plugin.
             



            Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000014510423140532011316 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/class-use/PlugInSetPropertyRule.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/class-use/PlugInSetPropertyRule.html0000644000175000017500000001270210404045222033646 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.config.PlugInSetPropertyRule (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.config.PlugInSetPropertyRule

            No usage of org.apache.struts.config.PlugInSetPropertyRule



            Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015110423140532011313 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/class-use/SetActionMappingClassRule.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/class-use/SetActionMappingClassRule.0000644000175000017500000001274210404045210033536 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.config.SetActionMappingClassRule (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.config.SetActionMappingClassRule

            No usage of org.apache.struts.config.SetActionMappingClassRule



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/doc-files/0000755000175000017500000000000010423130300026446 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/doc-files/configUML.gif0000644000175000017500000003270110404045226030776 0ustar arnaudarnaud00000000000000GIF87ak€÷€€€€€€€€€ÀÀÀÀÜÀ¦Êð@ ` €   À à @ @@@`@€@ @À@à@` `@```€` `À`à`€ €@€`€€€ €À€à€   @ ` €   À à À À@À`À€À ÀÀÀàÀà à@à`à€à àÀààà@ @@@`@€@ @À@à@ @ @@ @` @€ @  @À @à @@@ @@@@@`@@€@@ @@À@@à@@`@ `@@`@``@€`@ `@À`@à`@€@ €@@€@`€@€€@ €@À€@à€@ @  @@ @` @€ @  @À @à @À@ À@@À@`À@€À@ À@ÀÀ@àÀ@à@ à@@à@`à@€à@ à@Àà@àà@€ €@€`€€€ €À€à€ € €@ €` €€ €  €À €à €@€ @€@@€`@€€@€ @€À@€à@€`€ `€@`€``€€`€ `€À`€à`€€€ €€@€€`€€€€€ €€À€€à€€ €  €@ €` €€ €  €À €à €À€ À€@À€`À€€À€ À€ÀÀ€àÀ€à€ à€@à€`à€€à€ à€Àà€àà€À À@À`À€À ÀÀÀàÀ À À@ À` À€ À  ÀÀ Àà À@À @À@@À`@À€@À @ÀÀ@Àà@À`À `À@`À``À€`À `ÀÀ`Àà`À€À €À@€À`€À€€À €ÀÀ€Àà€À À  À@ À` À€ À  ÀÀ Àà ÀÀÀ ÀÀ@ÀÀ`ÀÀ€ÀÀ ÀÀÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ!ù,k€ÿÛmÚ@à¦*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠü ¤É“(Sª\ɲ¥Ë—0cÊœI³¦Í›8sê¤9²§ÏŸ@',80¨Ñ£Hƒª\¸TaÓ„OF%™’iU§W¡f•º•*J«_±–LJVëγhÓª]˶­Û·/ËÊ;w¨Aºxóâ ·¯_¦GÂL¸°áÈ› ̸1D»EKž<‘/åË?-c¾Øu³çÏ õvMz$䃥SïUÍ:¢æÖbÇžM»6ݶs?Hµîß_ï•íq1ðÐ'+_þ99óß§ŸK(|5õŠ–«Ogl|»÷ïe»ƒÿgãÔó]ÑãæºÞ«s³ïÙÇT»fíP±›oˆÙi”úeI뫇Ò8(ŽZÖe¡+ZuÔ¬’%‰Ð;%Iáæ?[lц=×sŒÇ¡i>ùð@š^Üði"Û*ƒV¢êZŸ&{]f¬îŠ”­¥ª[刈š«ëŸ¦o®÷ò›‹7ª 쯿>Y_mÊ&”„IïØ#…³Í sL?ýX‹­šÐéß^ðž•;ãÉJ¸˜…ù>¸2Á¦Ì»¢<áÍòm(s‡øÅkžÏòÿE/ÀÔõ*0U/&MáÒ6ˆá}F§ê¯_+7½t‰*gG¨Ó@˰Ïï(p’³Ë 3Œ1Ã`|Œ1Ö³íš:ðíwI™É&#Ý´ÎZ#í7ŸFøçÀûŽwßyï-sÕ¯ûä¿­BôFC÷[4ÍV ŽðÉ€ ;8¿×|ÛÔ“û$9Õ@ÛcÏ—%%! ?ü˜]LÚÆ¨­±ÆG<ÏÞ®iwc‡·«8⪚ëôÁž‡ºƒ;ï4ßÐ+o/‹@5\ºÐ¼Ýµ®ÔÏ|0Ô/ûú9X:zÿ.Õ×où5—•¾)J@À. 0²§1ÆÅ´}ÇèÀw¸G¨þr•Ä]­*«úá6ÿG¥b‰yZcYl¢ç¼®ë"±^új•½Èç\Æ Xç æ+Busí7˜" "ä÷˜Øp  D~ÂF1ÐV;üõ#m“[v÷ üÁ t{Ö\t5è%0„õT”’7ÅåQ°x}: ñDG´ fЂ,ôH妥¨1y‚Zà­ÈDË¡/Œ!r! §p:Úó㇠O?aøÑ³3FÓ†­!¸Í[½+â>`Ý]€,m¬Ùð®è·®åh„’D£ J$É«uRo[e1øÅÓÁ1"c”‘7,˜Áˆ„­Ä¤ÂÜØSžÒHñ:À=¶0¦ˆ}ãbf†?ÿØñÃÂ4ÚúÑÃBZËDÔVÿ:e/|áw¦3ãÖrÆMQò o+ê›WÌ– 6n›6‹Þô.Y=0Þ2#©¬ÕÆY.¦q2,O{§>ý4!UÊß($3y8Ì”ÄϘÀÈ!Óv±~ÁZG`Û:·D&‘ŸF’— ÷©‘xrô£ ÝhÄìA¤;dê¡Å`æuÈÒ ÀàGBë7;µÕÎbÙ²ÖCÍoõš_È‹;'cKél¤ñ(RùÙÀ)+kätê鎺.ÚPU!ox€ްӵ¥-¥xœÝ0\jÐøÅ”~fË¡ýRšÒŒítcn»Ö=”8¹¢>çªKEe}“×E¥ÿÐrøòâP­HJîIήtÁkBÞñMín UÆðˆ6aõ¥Í!2…QŒ®õ‡øƒ·p…4!à AÝb—£Ø¾6D©®­Þù6YÕÚÒ¶p£,lT;²Z¹´!$ý@ÿ´šÛEcÌ«1„„ËbV~hU+KÕ¶S®BÔ7pÁ¸šÔÛãü6¶ ínÔÝ(Þ·ÏóäŒÀW¡{iN½ã$˜+YÏW2Ížœ|žSóݨΌDÓV·z„Û±í¦l­…0Vçª0•i09‹¶¶Z »?Àð”TÞßô¼â=!‡:LKô¢·`šÖ|Ý3!ÅWR+cŒ°Xâ–Ä…ÇìBþû†;4–[Õ–­•±µÝ¹ýêJǪ›Nè~à‚üÀT¾•IÖBê¼ ñ~„cUNåÄã;cg¡ïµ¹„iþ ÓE¾YÂæÃ;SšÒ¤; à wØzèC ©R†‚öÐ,]®X‡±¡dÐ2–«Lוy}`ÿ¦Ü^yûÍ,ªr¼Xã•/­BÂÞÖÆS\1,—æ4ms®æ&±¸‡K»ªŒýž½Í!ö4wÀžh¶˜id¶ýðbCP)ùC kÙ.€4& € ÉˤNŸ˜u‹B.–ñÛ´vç?]Ë1¯“3®bòâëW¯{Îèž5k¿,‘ÿ’Ôw8À¬Àg5éNnÜ¢uµUà¼m»Ö°ûa…*ßÀÙÙ½6-íLwtÓÛ3µ+_¹JSûã䦷SÍîï‰øÝ*–¥=×ԦƻäÞ¥7Eìmo6é oè÷zÇ1#lŠ«ù8‚À9VðÑÂ-Ð.xxÒµ;¦.ï Ï®Ýöÿò`¥«–sM¾™”qQ ŸAÈľåL#HÏyʹ¾e§×ð›ö²c íø\;s ŽšÛ¤cú@ž`Á š¢îŽ0„$$A CPÀ5ž1²‘þ×é´¢{^¥NëîÌä•ßå͇ßa­¸HìäŒÅ‹–mˆÜýôÿmêOÏáŠþ"”‡Gû’ÇRÎáf%ÌyÄíÙ¾>¿¿_áÓeÛØŸœÎµ¹÷‹êW«»…­•¼Èk-{ÅXÿúØÏ¾öÑRÎàSÄøæv1Ê×¼üªÚÝàó>r0­þÒ”xÄ:ÆCBuÑŸž/º¿šIÞ¹ö7‡ýþ×%ä}{xr*/vuMðÔyr'ùgvV3'ï—Eó¡˜Ø 8v¨Ò'T€ C !Rø¡×{Ovàe=£nãa< W.Wy¡3X#XjÇçi$è)è+¨qAsƒ¯ƒMÄ3Bƒ!Š5;¨>8¸u?„ó—(àñu.yD[H(zs|4†$†8³3N%ƒ‘S…¯u…èâ$p4„÷…:ANc äIÎc/bèmž§|“kT”u™¸/É—r›(‡l´€¡D_ÞÒ3:“'ÿ4AGaôq‰È*y³^Åã¤è‡´Ô‰&öyâgCx<ûçmœHg™ˆˆö‰£ˆ!·Нâ{T(ˆ ÑŠòÁøÖH ˜ÈBv‹ø‚“${Œ¸8Xb[ºX‹hh#oæ‹å˜Ž$‡ESGŒ-Wu=XAggNöHŠ4…†²Šò~Ð(*üè…²h4‘HI¥_¢×‹êfc7n s> ļoóµy7F*¸¨<ŒCŽÂ˜[畆ù9’ë7®¥ˆÅ’)JŒãMŸöysv‰·‡yÃÈq5Ö‰ì¤É÷|'f@ã‘-y%Æ‚ú%i’ÿçŒùý¨‡ŸÄbW´‘È(&$km8‹©Æ†Jãrhø†^瀘Ç^ ö4 ˆNh©ëd”t8’I©”~e[/… yŠNØ{þXn„•—µD—õ–py7M˜’~)U¦…l9o8€|¹'€˜Ž1Þ™ÜÁ˜pù˜”yii…™™u¹„©O˜é™îÒ~f¹}¨™šª¹š×'’HIˆ¤©›© '›®g’£i›¤£~µ©›ªšï”›¾©—¼ œÃÉ#ÆyJÂyœ·â}H¨AE•#‘ô‘®Ñ€úÕ›#‰ÿ¢ ›ÌiUþ§ˆz²ƒ¡v)‘6É‹ÝY•¸ÉéÙ³i™—ÓI(kO8ž.“B-:ÍG~[ØžÚœìÙžišÉ<Œ¸ŒúÑ3÷éJIu—dŒZï©$Ë¡%XœNi/I•E9Œã'>¹nWuÚWÿyKj¡FQ¢ ™¡ª‡:&o ªbᣠVIcf¡'ªœª¢H .Ê’ÌØŒ‚‡&g£ç j*º£p”¢>šßY ú˜0IF³ô•Óû¢>ʤaä¤O*…9k×<8C4ëjXgkha*–ëIÚó¦î¥,*¦tªÉÙ¤=š§De§Fu§¤é¥7,¦~Z€z¨¯¸§_Ú§ŠZ™@ú¨ÜȨ…ꨒúFc:%¬¹©œÚ©žZ® †z©Dš©¤ZW”ÿºA£zª 9™¬Z„©ªm–úªK”¨´y±z=«z«<|Ï…áI¼ºD¹Z:»:¬Jšià‰cÅŠ¬Ï§½á¬Âgª¤"ŸdIŸ“4ŸP™Ò*ÍÊŠ³Ú­²©ñÉ­C©^¦x®n÷­yJ¨ª®âj:¶Z­æzu$¤”Ä¡ñú3‚J"ǯýª‚Rúˆ7³‘dˆ¯Üº¯ôÇ®»ò¯â°B8°DùvP„° ±Ý鮲*§¤°á1¯4c¦ “éJë±ÁÁ°´â°ÝбÓñ«ÒYO×<{¦‹²Ru™ðгˆJ®"ȳ¨ã²²Ò*´wÅ®*‹³««; ´ûè³N;ƒI­ë˜Mµ¥J­V±FK Dë¬[;wK›µ"8µtÒµÈúµ`‹¶bË d[¶U»¶58zˆ ·¶1·?h¶Ãª¶ŠÙ¶tûåøšËW}ë·Uƒƒ‹ ¸Ñz¸wY¸Ÿú¸¹’Ë·T¸ŒÛ¸‚8¹š»¹œ›±‰·¼ª·ZÛ¹¤[º¦+™º º·*º—Ûº¢º´Êº®;»»¯*»´›»ßa»¬Š»ºû»ÏÁ»§ê»À[¼¢À!¼¤J¼Æ»¼µ¼—ª¼Ì½äñ¶¹ ½Ò{½¡á¼’j½ØÛ½˜¡½Ê½Þ;¾Ž¾Š*¾Vå¹ä«¢æ{¨è›Q´¾ìK½´û¾wö±ò¡íë§öëžø›¿í9F§;Àv+›Ðxiý Àã!À¼é < IñÀ ì ìœ|Àÿ;ÁÇYÁ¾zÁ™›Áì›,¡>Ø«#—޲Ò3†«‰EÀ:ÑzñÂÿܧùbF€è@'$n!‰ˆLù´ <ƒ0Á2<Ö۫º rYX°˜ÄÉjÂ÷ÃYÄ:Ķ9»Hég ÍsO¤3]Ç^ § ˜ÅòU5Ý(Ä&(Å^CÅ©KÃá‘ä—b:‰fö¥jvÌ•ã÷ŽxŒ¤Pˆ±¢…PÕƒ…È{1ÌÆŸëÆ,V>Ÿh{š·Ž"ÄyL[I‘pÖÄP 0: vKL€ü™klȤiÅõדŒ\~s[ú”›DÉH,È+úÆ]èÊæ‡’žlˆ… Ê™)Êæ9Çü©‹7¹Ÿ „ÇΗí6¢9:®+l(³^g‡8ò^Yi_–Lf}ŒËÐ:§8XA9–Ó_‰¥èÖËÃ|A©<†£Í lÎìhÇn†O.–Ÿ×:ÍKXÍÖ¬¸Ø ÏX°á¤Å`y”ølÆi7OlJ‡p·*N¼Æg†¤2Yʃófžç̲L^ò<Ï‚hÅw•˜„Ûï¬[­{ÊWÌú·ÃæÂ+!ÑZÄí]ÍiÑÉÌjß¼• k©Éj¬LÒ=AÑG»§Ð™X9 É Ý2}†sX ÇZ8ý®&MË^èÓ9+–þÕ,“ÅQÍ sÓ­êIÍ´K ÏKUz«ÈÃi^×–AX([ÂÍÕ‹Kz"]ºNÝœ³¢@5ÝÂxšÖ K¿]Ú—:HoXÝ¡oMv=9ûû‚}Ôf]‡\’gØwÝÕ«[Ø„ì„ XÇB}ÑŒ½²x½¤m}s½=¬,¢˜{ÙnëØ¢­OÑÉÑ3mÙ¥Ý$ƒ½Ú' ØÁXÙ=ëÚšÙ´ÙK‘¾¬Ú·m"­ÝÛq)ÙSûÚÀ"¿}ÜZ«Ÿ¬Ü¯kÛÎM›ÌÑ­ É]Ý» IÆÙרÐÝÝŒÒà͵ß=Þ»Ù(lÞ~àqÝê=Ý6ÝÞþÁÞðÑ÷;ß»[ÞöÔœßÛ!ßüÍÒ"òßÓáß~Éâ]àËAàŽÖû½àÇ¡ànÜïáÇ‹ß^ß~á¶áîÃÖá¹Áá ~µ>â´!â&žÕð›â­â,>Ö óâ-ná2'ú]ã¥áâ8îÕüµã^9Nã>^šä'äD©C~䔡ãJ.¾ÜmÞL~äè¸JÎQ^åXžiWžå\^€FÞå`þ¤[æd ¤]æh>¬cžæln¬_Þæpî™kçtÎÚo^çxNÏ›ç|Œ¦sÞç€^»wè„þz^èˆ.‡žèŒþàƒÞèþ—锎¢“^阮Ôkéœ~·—Þé ^¹k=å¤^ꦮšÂ}ꪾê.ᬠòä·=U8 ëµmÒ´îÚ²NÒ·®"¯ê+]Ë ¼ë)Òë¯]â`}ÌÞ Œ)í€rýMlà*ý£ÞŸ©/Êl„-áÿ¯JìÍa½ÄÇ„Â˳µ“ú2žq½ØÔžîqKÖ‹âíóÇЭØì¾íó·ÄH^âO\*b½ìîVÌu‰ïL¼î'Mâ.¨ÜûîWkÔ"6ïê>ð§Êí;¼Ì{X‹^|/ÆmšØÍÒ |ÚÌûìÏ2æ†X³/öˆPbŸ³Ç ‘Ï)Ÿ^ÛL¢(/ÐOòÈ^bßÈñxñmy*nºñßñÖ _IâÍR‰ól×b½Ðš˜Ÿž&õdÌôL-©Å”­Iqˆ“yÌËá\Æ™d³ÀâΫLAìö€œ¥åGvàŒ‰ž‰ ©I4oêXöﵦ<3¼óVºË{0No{ÿ`Ÿ¤dOö ͆ƒö*7~œ#Žá\‰¾8%cI÷O§Ä~Эƥè9É ÍÄÛoŸÚ‘ÿùé ÆZ/ú–ïùgÇŽlù6Œ©lÊĈ~7zj¹ÝÉù\ßú4úô•üÙ³ÚÁ¿Î§Où6:“ꨌÓkçFùõ÷Ëkô|Wùû¾óÙÚa/“WÚÑø[øvo•Rÿï–(ΧS“Ï6GKPA#•ÓPJǬÓR–4ݴϬ.tRPCµTS3[4MHiâq2O­4FXå{uV1eõSÏÍZÕS[5ãõ×7}¶ØDS}ÔXe—e¶Ù—ˆÍÓYi§–Zk E¶Ñk·å¶Û;¡= \oÇõV\rÏñe)[.‘d·]wß…7^y祷^{ïÅ7_}÷å·_ÿÉÌ&¸`ƒF8a…çE·aøÔu8âÉV•¸b‹mïb7>bŽ%Îøc‘G–”b’OF¹2Sî5–_†YWmc¦æ•k–VTœwæùSs{šÜ›ƒ6:¢ŽÙh¤—Öxh¦K5éç§§v6jª¯>×i¬½mk¯Éíúk±›Õzìo¥3;íªÑV»mXËv»Ì礎»n2ç¶;ïcÏÄOï9÷¤ÛoÁ1|pÃß„ûp`;U¼q¹w<ò‡ùfTrZéµ<ó]1×¼s3qêÛsú½ôpMG‘]¦ÄS_“u×ç"ýõÃW—òÚo·wÙi×ýôÞÏøÔy~æâQýxµ‰/>yåwþy±™>zéí¶þz¬©>{íÛöþû§¹ÿ=|ñÇ6ÿü£Éï=}õ·vÿýžÙ×=~ù§¶ÿþšéÇ=ý‘ößÿ^Æ¿ÛP€@3àOFÀÚ%P8sà?Æ@ÙEP‚0³à–/FÁ×ePƒ(óà#ÆA×…P„"3á ³F9Ué/…*ÔØ aØ-²N†3—ÇÂÞP‡ óá¥UÃÔQˆã2â—EDä)1oItb±˜h:(F‘ZU´â¬¦X:,f±Y]ôb©¶(:0†ÑXe4#¥Æè94¦cn\Ú;×F8žŠŽu”5wG<‚Š}œ“3÷G@r­ˆóã¡ yHB-’‘b¤åùȳQ’f‘”Ü$-Y©MÆ “‘Ód''J–}Òq¡$å­R™2S6•«,˜Èÿ½R–ñ±å-cÒJÅåR—ûåiéÂ`&­˜ãåá|yLØ1sƒÃ¼ß2 §iV,™†“f5Ÿ¥ÍBS~ÙäfîÂé­kœãd:vÉéÍ÷SÁ{çµÊ ½x^ÌÕœ§ßîYO“ñSYùÔÛ>ë)Pfô‰þÌ!B­ePì)Ôa=&CëQuR4˜›EÇ©Q]bÔmå&HeéQð9ˆ&IÕ&Òj²t•*M›K)SRÂÔl4=&N;iSô¡ô\:›Ý$OÅÔ_•’BýšQo©TF"ÕkL…%T éTøùlV%;Õ'ÕTrµTÅšWE)Ö:‚õjdÝ$ZÝhVª©•’n5#[¿µ0ºÖÕ®µ²*\Ã(W;é>~í%V™Å׿ R°ž:ìÛ´ŠAÃ&¶ŸŽUãb_6 `}Jœ½* ^éô,Ö±€µ"a9IœtF‹³™¥ñbZ{ÞÕµû‚ÿ¬}$Ë2—.S¬’JÈê®ÕÖÑ¥¬h«åÛJK= OxØc")5÷JDPn¿”¢äN ž^ümlÓ5Û”ýÇ9_9‹ÒÙÈF¼+ z÷r¢ë„…IîA¬³«]•×MÌ1aÚ›òî·=­Q‹Xü$šÚ>Vˆ¾ŠnŽp5"Ͳ)ÁÛ¤oJì›ZÀñŠ/© owÔ `ìLºàanJFNgMxspØ4ûÝ£dÂw{”Ñ.ÌòԘÒùM‰ò{áÛøºYTZð¨øBJgn±‹¹ ÂãF87v†Œ2òâwÆO¶2‹ÝdËB7=ýiŠ^c¥0ÇfI¦Mò?Â^Œ©÷?&b’’:‹ MèËëJ’—„Òª.ÑèB7nŸŒØêV§:1úï–Ì£å4dͪ\–[ˆœ¬]M ޔŕŠÝë_³0&XP‚͈Óüè0ÝQÒ¶‹ßm/Ýåü ÃÃá ŠMiÈ’z·‘ž.|9Uo™ÕæMdÞþú ØhN²­c)IßþzÓQ1ijó¶W·v¬²çh™ùZÁ$"Д`ô^ …ZIW:¢Übmóúµï†·¾š]I㕺Ñ^ i÷½Ïú§#÷Uߎ^ò¿ÁÊò[àjøÁÙ݃ç[ád¸Àþp¢ÅÛâòjxÂ)¾qŠOœã­ÆA>òQ‹œä'×®ÇQ¾rªœå/ Ëa>sýÉœæ7?ŸÍq¾¥sééœç?žÏ>tÜ èGwÑ‘¾ôÒñïâOß5Ó¥Ž4§ŒÛSzÕ9vu¬ÿ\ëãz×wþuo:Ôþ¶¦Â.ö›“Ýì–ž‰‰Ub¶×hn¿m¯[WolùãP|àŸ¯ š\È…"ËqË|çU±ÔeÆëÚHÉ7Íð–E±°§õjzÊ.på;Hùƒ®rÍijՈìûÀ¯FöÈEÿÿÓÒ£é2³–Qr8M܃ÖÎy_iæm³ñ“>êåßÃèÃÃÐÖðIÅ-©«ß´î¾ÄÜŽYíÈ@Çí¸Ï,î‚ó]à¸g.,yǶL·pɵi.#ñ2Ý8@Ôr >ƒêr@c+· ›Gš¿ké·øk¢ø*´Õ ÁñÀŽþR½Ð=ίæÛ’l ³ÌB4; t˜ ´–œ9L«C2ø±i“•+c½Ýk¾À˜²ƒ¼kë1O[0lÜÁ]“B2r6 $ŒÏýâ½>q5Xk½0»s=LŽßø5ÈèŽãK>Ók!ÜÚºÌBû³#´2:Ãý2¿#ÌÃ(Ó1';¶ë=“¹ÂrÃÛ³:9AÓ²¤±ßs>4Œ>îðjã ñ(/×[¯ñBšïc°Á»+EÔµ(1¾&|.«¿8ƒÁ?“³:˳9’?4·:ó³>;3"$+aÅ l*P´»m!÷£5{ò;C²$¥ ÆcÔ>½‹8ÿ£7 Æe¼¢ÍÁ¾¨C!l¤Oe¤Æ¾;ÿ°Ú o;ÒKÆiÅtl—{SÇvtÇÀÇÓC="Ǿš³ÛP±9;ò*nô-lÄÇØã’®ãÇŠ«Çûº¬Ú*‚DdzsBDÄ6& mdƃ\œéãÁéCº‚,;ìS?‘6ôH@Ì>‹„4M¿9d;Ž ÂbŒHm@ÔH“¤ÓR=B³;–´ç²¹ÀÂ8¯‡$@0󮛤I6ƒ'_4Ê}lÈE,CÑÅXC®Ð/Cƒ/—½l “±¼\'ŠƒKºðÉ,M”äËTK­—£Ì“ES¬MÐË’Ù0d<1SÅ %Gû±Ò™;R›,¶É Ô1¤K.,7¼œÍü1S˜ãȰì²Ç\>ËdD4ÑAœD2ÒÑBH–ËR!¥¬©ôÓ=œ$?½¬Hõ¬áB¹<=¼- °1ôDEBI¬ÃA­;¢Ô•CT ü‹ÑT3ѱ¬ËóÛËIFC9 ý°ôU\Í*YÕl³Ö„[Òzt Z=9Se²öLZ€¥Q}ä=„S¯Ä“u¾± U£-𳥝–%ÌSóTP ô,Zž+£¹M[¥E6°ÝÊÂDB½}¶HÅJ¹=£À-µ¶±lÁõ[HEËÎ,[ÀÜb¹YO²Ø¯Å(Jû;7ëªCX…Íæ;:ÝZ›Üsõ#Þd;S»¾lÝe+Ý`Å:>‚ÝÄrØ1Ù¿±Â®û£Ü=¬Ù%Î×Í™ßÅ*ÞÝM©[¤â ^ÕWÀ#Þjœ–ÈyW*­Ùô)èÞ¿ýXêê5)ë½ÞPòÞíEÞäU^ C¥òu(áíÝŸ¾–Q(ô^«-—øõ'÷MDø•_öå§jUSóäXu?­Úó¥ÎßÕõQètÐ.²¾sÞŒ¢½«Š'ÂM`‘4ÏÆ•Ù›“¦ Ž`»íÓÔ¬@üÒ×ìÉÚ.,ÊŽ¥¾“B—F þ´ª¼?"üR©õ<\Á¨%Å^auJS®]Ô7 6:«Áç“S7Åá—;§$F'~JÌÔBpÃ.í[HÄÞFs§+'&D'b¦ b(+¿¨cᤴ2æ&-–b.&®äÌ9}¶¿La3¦\ñ¥ã‹ÿ›n³UTÍý½?É?†ÍX½] ªãBŽ7”­âÉ3úE"Ó%dñq˸- ;ÖÚ’$™âT 1¾,:=ŸBdd$äƒdD–a1FR<ã_ÕŒ½/VFáÆW<ž¬ òÁ¨‰SRžIn@uÈ$ÜW¦ÒH¯¹D@ã’¶Ø“; à™$FõdY¦-ZF‹óÅ~â­=»Óôâ-ä>\.0ЍæÇÐÈ‘NëqKaÆÍmÕÑU6d;~d5y¿èÎN‰"0^4KT_±]4±!ÌÜ?á§ýÉ×0ÅKÅžÕ3³1ÍãeŸue:·]RWL<Ÿ4@Òì硬ÀÞH·[ÿŽJ8kÔ ”¾WÎGÆ$©=ŠDÉ"ökcvÚ.|ã^þxæJ¾Vš.æEË/þòÒ* ¨E¯cp¶Áð²éÌìDoÛ0þâ»d[#þa7“U5^ÂNUÂ4.KéžQãób/c¡–êÝóÓ¼mË@¤²(têFÁصb T=?e[M\k¿,?EMç´ëUúæöQ ÛbJÔ0¶Ë£~ ûki÷ø/Ô4”eÔcciÀÄkG=`¾fVC¦þkr•è¥lÌNcÀ"LÀÔ\ñ³§u’‡žàím¤³Ü«@4üã hï^ÂuIh&뫦Àÿ¶úæÅ>–ìІ í¤ÿ×Á9nRRâ²%glkGÖ5îø>º—ÔOWŒ<«Ú]o ÷úigC>pªïàFšðN¦äu&Ù:ñQöðvzñqÄ牚ñïAçÔ+ñO˜—G˜uàæò#?\ÎJÑ_Zÿ+.”×dªòÞaòì£Ïñ2\à½Þ€5Î,'Ìë|o6DÉ~Ð0ßä%E|ŒöïÎöïVè@æI;—Rþöj6¿rÝ!óbt«¿5~iôÃf\©…nª=ssýó¢{óPô9DÃÞŽðÞL#kc*†h ]Ï@'f®žî¦Îô»$-ª T¸MdvôÛõ}>ªÞ lÆæë×NÜÅ”u6Ï›e“ŒuQÓB">æV.Ï.ë\g\Iž×W¯Q§?@Æ?XÔå—þ\ÜB×ÄsWvWõIGÛ ÏXSçuäsoÇZp÷¥÷^·Hg—X(÷[\ åuWò£t÷•¢÷6·ws×ñ|¯wš$q$×Wÿw_Çp‚7§n×i„/"…‡q†¯‡Çñnx‚ùÆŠr«b¢böSb¶êý>Ž¿øÿG©§Î‘Ï$ù&‡÷ —È_6ÙŽw%J·jžò¹‘rÑ´Ýþ50™oá•×r¹É±s»ûìiñʤíGgfnÖçùú2¿S …e¦§¹ÒŽÌ5¯õÓ¶z“Æî§/à…?´qMt«\jAA×ó殇9Šu;E=¯è'Ím޾ó³ÌŽwŸ7ćÐ<÷böâ<nô.ÁÕkuœó®<1CË´á„ìC'ôµ üMTï›wðû>õá‘®j!ö#ÞCò«zõÛ¹þÔa–’=WýS'ëRçÄŽ<•ï|Íf5æXÆÇjº„jG÷{lj2­x[ÅÂâÞë†T¿~å ÿ¾}Ìv:Üý ÖýÕoí>:¬'ìÅÛô¬ÿéZbÌ´±Ï®îæ'“wJRßEçªj1Ev~^| ~@|yȇéknàMö·nOÿ,hð „ 2lèð!Ĉ'R¬hñ¢Âv›6иé¢@‡F"Ò¤ÁÿT®4é² I–(a’l)%Θ/Kbìéó'РB‡-jôáÉš%•œ³éΜ7ŸÎ„šÔfJ¦U§ÒœªR+Áª-¡®Äjö Ë£jײmëÖ­ÇŽA¾­‹&O»z÷òíë÷/Z£27ŘvèaŠ3&×#ÝÆo–lù2æÌkÿ¤ ˜ó]µ" 5“.máã¹GŸ)oëØ²gKfmøu_Ü"™µMû7óð·©?®¾Ù8òäÊ{ú^®¹¹óèÒ<Ý'ôëÚ·cÎÎýó÷ðâÿU_íò<úôê׳oïþ=|öãçÓ_ÿ>þüú÷ó￳>€É• x ‚ *øÝ€ :ø „J8!…5X!†j¸!‡w¡‡!Š8"‰%šˆˆù·"‹-ºøâ}'Ê8#5ö•bDÞÙXÜŽ=úø#ᑎA†f$’I*yâG.ÉÜ“QJ9e„MŠ„og…že8Mô_CER9&™ege˜D–¥`°Ù–w'åh&uÚ‰š ¥ÚMx‰I‘g„í©" wz(¢ÿ˜å¹Ð  õVYVÁùUMb'i¤…Mº)¦•Êé©LJ9¥ÐVcYõ¨Mlþ™(«­ºjáFrÇ#¤ŽjZ–œ…åúi­_ÝêXºjêk¦^Õ©¯»Úªk¥½æšiJ¯J;-µ?-J꩸)‹ìKVFì¥Ïf m±¿ÞJnª¨žëæ³Ä"{l´ÕÊ;/½Å ™uë¶횡NÚîºî¢+j¯ë/Áy½kî°;\/Ä»zí²›»meº[*»nÆ ®Á/Û(È ˦¾«¼r+œò¯%ãÚðÌ4wìY²6ïúÔ±lòÏ墛1ËEM¥ËD3š°S rš.Ô’ZšÕe]Ñ„«VYWm5×Ra%Ê«=6Ù&/x¨Úe»ý6‰g{ìÛõÕ=4Üy뽡ÜmÛ&€û½7á…+Ø7Ì­Šm8ãK‡8ÞŠ;>9åB#æ™k¾9|•{þ9wƒ>:é¥Çë%ºé©«¾ºµ÷ªÆ:ì±Ë^ê³Û~;ë—s¾û‹¸ûþû‚—¸8ðÅO›ð¿<óÛ% ñÍK?½c®ÏZQs\&¾k^ª¨[ÅÔ‹?¾iϧ©qœzÂIhä/“ÿ>üŒ™9eéc;÷ùìÇ¿?ÿ7ZoÚˆö©«Œ«\ ãúþu2ÝD¯| CæÇ§}1lc‚Y²š5¬ ‚ü`ë8‚/¥-ÿù™+X± ÉŒ3 ! (Áû},d)\XÆXhÃðۇ>¤ÎÿòE¿¼l,XB#Ù†²öý°‰=œ!iæ=´Ý0…UܨEÎT¼i·šf¬­|Ñi^› ·¨Æv(wcËÝ^¸Æ9â®Á_[âHÇ=BÐŽ_Á'G>Ru~ Ï ©ÈÑò;‰\$$)§;ÞQÒ?‘¼$ój‡ÉMrÒ/šì$(CÉ–O┦ )O©ÊUJ$•¬|%,OQÄXÒ²–!”•-s©KЏr—¾äd/)LHs˜Æäc1©L5&s™Îdã,Ÿ)MU6sšÖ”a4¯©ÍMVs›Þ_7¿)Îæ…sœæ,^9Ï©üÎÛ¥sî„];ß)OÓÅsžöü\=ï™­GBIŸ4ʧ?ߨ&=ñÓŸ–˦AÝâ-8^)¡LB¨CCÅfÌi˜2 )ÅĈf ú\SÌ(z@T‘hÜâh‰®mû«dJ1q(LbuÖ³&ãñÉPŽo‹Gs)*/ «©"ó•¦C-OØË_®o?Õ†D6c Ívîê…¦%'»yµ@v]ea5ìQ-Ürž]Å>ÇvÃ^¼,Ž3«½ŒêÄ­ÍJÕΨA2Z·Žö0Ÿe£ÇNÛöÓ*^ñiFMjÙšZM¡b09½jVƒY}ž5­á À[ãÚµùå/°÷Ûk_×zØÆVNz­Aìž${ÙÎæe±Ÿ-íòE{ÚÖVTµ¯­mùe{ÛÞþK³¿ííp‹[Ûä.·µÏni«{ÝÎn·»• ïx{Þôîµ½ï:=ë|ë›Ôüî7£ÿ p7 |àO.¸Á]Œð„gxá G°Ãî߈Kܾ¯¸|/Žq÷j|ãêí¸ÇÍ ò-‡wä$ï®ÉOžÝ”«¼º,oyt_óæÊ|æ$î¶Í^óœkç<øÎÞÛ€;libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/impl/0000755000175000017500000000000010423130300025542 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/impl/class-use/0000755000175000017500000000000010423130300027441 5ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000015710423140532011321 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/impl/class-use/DefaultModuleConfigFactory.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/impl/class-use/DefaultModuleConfigFa0000644000175000017500000001307310404045222033526 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.config.impl.DefaultModuleConfigFactory (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.config.impl.DefaultModuleConfigFactory

            No usage of org.apache.struts.config.impl.DefaultModuleConfigFactory



            Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000014510423140532011316 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/impl/class-use/ModuleConfigImpl.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/impl/class-use/ModuleConfigImpl.html0000644000175000017500000002346510404045222033545 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.config.impl.ModuleConfigImpl (Apache Struts API Documentation)

            Uses of Class
            org.apache.struts.config.impl.ModuleConfigImpl

            Packages that use ModuleConfigImpl
            org.apache.struts.config The "config" package contains configuration objects that correspond to elements that may be specified in the struts-config.xml module configuration file. 
            org.apache.struts.config.impl   
             

            Uses of ModuleConfigImpl in org.apache.struts.config
             

            Subclasses of ModuleConfigImpl in org.apache.struts.config
             class ApplicationConfig
                      Deprecated. Usage replaced by ModuleConfig Interface.
             

            Constructors in org.apache.struts.config with parameters of type ModuleConfigImpl
            ApplicationConfig(ModuleConfigImpl moduleConfig)
                      Deprecated. Only used while we are deprecating ApplicationConfig to insure maximum compatability.
             

            Uses of ModuleConfigImpl in org.apache.struts.config.impl
             

            Constructors in org.apache.struts.config.impl with parameters of type ModuleConfigImpl
            ModuleConfigImpl(ModuleConfigImpl moduleConfig)
                      Deprecated. Only used while we are deprecating ApplicationConfig to insure maximum compatability.
             



            Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000014510423140532011316 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/impl/DefaultModuleConfigFactory.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/impl/DefaultModuleConfigFactory.html0000644000175000017500000003247110404045212033655 0ustar arnaudarnaud00000000000000 DefaultModuleConfigFactory (Apache Struts API Documentation)

            org.apache.struts.config.impl
            Class DefaultModuleConfigFactory

            java.lang.Object
              |
              +--org.apache.struts.config.ModuleConfigFactory
                    |
                    +--org.apache.struts.config.impl.DefaultModuleConfigFactory
            
            All Implemented Interfaces:
            java.io.Serializable

            public class DefaultModuleConfigFactory
            extends ModuleConfigFactory
            implements java.io.Serializable

            A factory for creating ModuleConfig instances.

            Version:
            $Id: DefaultModuleConfigFactory.html 50985 2003-08-22 08:34:00Z rleland $
            Author:
            Robert Leland
            See Also:
            ModuleConfig, ModuleConfigFactory, Serialized Form

            Field Summary
             
            Fields inherited from class org.apache.struts.config.ModuleConfigFactory
            clazz, factoryClass
             
            Constructor Summary
            DefaultModuleConfigFactory()
                       
             
            Method Summary
             ModuleConfig createModuleConfig(java.lang.String prefix)
                      Create and return a newly instansiated ModuleConfig.
             
            Methods inherited from class org.apache.struts.config.ModuleConfigFactory
            createFactory, getFactoryClass, setFactoryClass
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
             

            Constructor Detail

            DefaultModuleConfigFactory

            public DefaultModuleConfigFactory()
            Method Detail

            createModuleConfig

            public ModuleConfig createModuleConfig(java.lang.String prefix)
            Create and return a newly instansiated ModuleConfig. This method must be implemented by concrete subclasses.

            Specified by:
            createModuleConfig in class ModuleConfigFactory
            Parameters:
            prefix - Module prefix for Configuration


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/impl/ModuleConfigImpl.html0000644000175000017500000020317710404045222031646 0ustar arnaudarnaud00000000000000 ModuleConfigImpl (Apache Struts API Documentation)

            org.apache.struts.config.impl
            Class ModuleConfigImpl

            java.lang.Object
              |
              +--org.apache.struts.config.impl.ModuleConfigImpl
            
            All Implemented Interfaces:
            ModuleConfig, java.io.Serializable
            Direct Known Subclasses:
            ApplicationConfig

            public class ModuleConfigImpl
            extends java.lang.Object
            implements java.io.Serializable, ModuleConfig

            The collection of static configuration information that describes a Struts-based module. Multiple modules are identified by a prefix at the beginning of the context relative portion of the request URI. If no module prefix can be matched, the default configuration (with a prefix equal to a zero-length string) is selected, which is elegantly backwards compatible with the previous Struts behavior that only supported one module.

            Since:
            Struts 1.1
            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:34:00 +0100 (Fri, 22 Aug 2003) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  java.util.HashMap actionConfigs
                      The set of action configurations for this module, if any, keyed by the path property.
            protected  java.lang.String actionMappingClass
                      The default class name to be used when creating action mapping instances.
            protected  boolean configured
                      Has this module been completely configured yet.
            protected  ControllerConfig controllerConfig
                      The controller configuration object for this module.
            protected  java.util.HashMap dataSources
                      The set of JDBC data source configurations for this module, if any, keyed by the key property.
            protected  java.util.HashMap exceptions
                      The set of exception handling configurations for this module, if any, keyed by the type property.
            protected  java.util.HashMap formBeans
                      The set of form bean configurations for this module, if any, keyed by the name property.
            protected  java.util.HashMap forwards
                      The set of global forward configurations for this module, if any, keyed by the name property.
            protected  java.util.HashMap messageResources
                      The set of message resources configurations for this module, if any, keyed by the key property.
            protected  java.util.ArrayList plugIns
                      The set of configured plug-in Actions for this module, if any, in the order they were declared and configured.
            protected  java.lang.String prefix
                      The prefix of the context-relative portion of the request URI, used to select this configuration versus others supported by the controller servlet.
             
            Constructor Summary
            ModuleConfigImpl(ModuleConfigImpl moduleConfig)
                      Deprecated. Only used while we are deprecating ApplicationConfig to insure maximum compatability.
            ModuleConfigImpl(java.lang.String prefix)
                      Construct an ModuleConfigImpl object according to the specified parameter values.
             
            Method Summary
             void addActionConfig(ActionConfig config)
                      Add a new ActionConfig instance to the set associated with this module.
             void addDataSourceConfig(DataSourceConfig config)
                      Add a new DataSourceConfig instance to the set associated with this module.
             void addExceptionConfig(ExceptionConfig config)
                      Add a new ExceptionConfig instance to the set associated with this module.
             void addFormBeanConfig(FormBeanConfig config)
                      Add a new FormBeanConfig instance to the set associated with this module.
             void addForwardConfig(ForwardConfig config)
                      Add a new ForwardConfig instance to the set of global forwards associated with this module.
             void addMessageResourcesConfig(MessageResourcesConfig config)
                      Add a new MessageResourcesConfig instance to the set associated with this module.
             void addPlugInConfig(PlugInConfig plugInConfig)
                      Add a newly configured PlugInConfig instance to the set of plug-in Actions for this module.
             ActionConfig findActionConfig(java.lang.String path)
                      Return the action configuration for the specified path, if any; otherwise return null.
             ActionConfig[] findActionConfigs()
                      Return the action configurations for this module.
             DataSourceConfig findDataSourceConfig(java.lang.String key)
                      Return the data source configuration for the specified key, if any; otherwise return null.
             DataSourceConfig[] findDataSourceConfigs()
                      Return the data source configurations for this module.
             ExceptionConfig findExceptionConfig(java.lang.String type)
                      Return the exception configuration for the specified type, if any; otherwise return null.
             ExceptionConfig[] findExceptionConfigs()
                      Return the exception configurations for this module.
             FormBeanConfig findFormBeanConfig(java.lang.String name)
                      Return the form bean configuration for the specified key, if any; otherwise return null.
             FormBeanConfig[] findFormBeanConfigs()
                      Return the form bean configurations for this module.
             ForwardConfig findForwardConfig(java.lang.String name)
                      Return the forward configuration for the specified key, if any; otherwise return null.
             ForwardConfig[] findForwardConfigs()
                      Return the form bean configurations for this module.
             MessageResourcesConfig findMessageResourcesConfig(java.lang.String key)
                      Return the message resources configuration for the specified key, if any; otherwise return null.
             MessageResourcesConfig[] findMessageResourcesConfigs()
                      Return the message resources configurations for this module.
             PlugInConfig[] findPlugInConfigs()
                      Return the configured plug-in actions for this module.
             void freeze()
                      Freeze the configuration of this module.
             java.lang.String getActionMappingClass()
                      The default class name to be used when creating action mapping instances.
             boolean getConfigured()
                      Has this module been completely configured yet.
             ControllerConfig getControllerConfig()
                      The controller configuration object for this module.
             java.lang.String getPrefix()
                      The prefix of the context-relative portion of the request URI, used to select this configuration versus others supported by the controller servlet.
             void removeActionConfig(ActionConfig config)
                      Remove the specified action configuration instance.
             void removeDataSourceConfig(DataSourceConfig config)
                      Remove the specified data source configuration instance.
             void removeExceptionConfig(ExceptionConfig config)
                      Remove the specified exception configuration instance.
             void removeFormBeanConfig(FormBeanConfig config)
                      Remove the specified form bean configuration instance.
             void removeForwardConfig(ForwardConfig config)
                      Remove the specified forward configuration instance.
             void removeMessageResourcesConfig(MessageResourcesConfig config)
                      Remove the specified message resources configuration instance.
             void setActionMappingClass(java.lang.String actionMappingClass)
                      The default class name to be used when creating action mapping instances.
             void setControllerConfig(ControllerConfig cc)
                      The controller configuration object for this module.
             void setPrefix(java.lang.String prefix)
                      The prefix of the context-relative portion of the request URI, used to select this configuration versus others supported by the controller servlet.
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
             

            Field Detail

            actionConfigs

            protected java.util.HashMap actionConfigs
            The set of action configurations for this module, if any, keyed by the path property.


            dataSources

            protected java.util.HashMap dataSources
            The set of JDBC data source configurations for this module, if any, keyed by the key property.


            exceptions

            protected java.util.HashMap exceptions
            The set of exception handling configurations for this module, if any, keyed by the type property.


            formBeans

            protected java.util.HashMap formBeans
            The set of form bean configurations for this module, if any, keyed by the name property.


            forwards

            protected java.util.HashMap forwards
            The set of global forward configurations for this module, if any, keyed by the name property.


            messageResources

            protected java.util.HashMap messageResources
            The set of message resources configurations for this module, if any, keyed by the key property.


            plugIns

            protected java.util.ArrayList plugIns
            The set of configured plug-in Actions for this module, if any, in the order they were declared and configured.


            configured

            protected boolean configured
            Has this module been completely configured yet. Once this flag has been set, any attempt to modify the configuration will return an IllegalStateException.


            controllerConfig

            protected ControllerConfig controllerConfig
            The controller configuration object for this module.


            prefix

            protected java.lang.String prefix
            The prefix of the context-relative portion of the request URI, used to select this configuration versus others supported by the controller servlet. A configuration with a prefix of a zero-length String is the default configuration for this web module.


            actionMappingClass

            protected java.lang.String actionMappingClass
            The default class name to be used when creating action mapping instances.

            Constructor Detail

            ModuleConfigImpl

            public ModuleConfigImpl(java.lang.String prefix)
            Construct an ModuleConfigImpl object according to the specified parameter values.

            Parameters:
            prefix - Context-relative URI prefix for this module

            ModuleConfigImpl

            public ModuleConfigImpl(ModuleConfigImpl moduleConfig)
            Deprecated. Only used while we are deprecating ApplicationConfig to insure maximum compatability.

            Only used while we are deprecating ApplicationConfig. performs a shallow copy to ensure that any operations performed on an ApplicationConfig object is performed on the same underlying ModuleConfigImpl sub objects

            Parameters:
            moduleConfig -
            Method Detail

            getConfigured

            public boolean getConfigured()
            Has this module been completely configured yet. Once this flag has been set, any attempt to modify the configuration will return an IllegalStateException.

            Specified by:
            getConfigured in interface ModuleConfig

            getControllerConfig

            public ControllerConfig getControllerConfig()
            The controller configuration object for this module.

            Specified by:
            getControllerConfig in interface ModuleConfig

            setControllerConfig

            public void setControllerConfig(ControllerConfig cc)
            The controller configuration object for this module.

            Specified by:
            setControllerConfig in interface ModuleConfig
            Parameters:
            cc - The controller configuration object for this module.

            getPrefix

            public java.lang.String getPrefix()
            The prefix of the context-relative portion of the request URI, used to select this configuration versus others supported by the controller servlet. A configuration with a prefix of a zero-length String is the default configuration for this web module.

            Specified by:
            getPrefix in interface ModuleConfig

            setPrefix

            public void setPrefix(java.lang.String prefix)
            The prefix of the context-relative portion of the request URI, used to select this configuration versus others supported by the controller servlet. A configuration with a prefix of a zero-length String is the default configuration for this web module.

            Specified by:
            setPrefix in interface ModuleConfig
            Parameters:
            prefix - The prefix of the context-relative portion of the request URI.

            getActionMappingClass

            public java.lang.String getActionMappingClass()
            The default class name to be used when creating action mapping instances.

            Specified by:
            getActionMappingClass in interface ModuleConfig

            setActionMappingClass

            public void setActionMappingClass(java.lang.String actionMappingClass)
            The default class name to be used when creating action mapping instances.

            Specified by:
            setActionMappingClass in interface ModuleConfig
            Parameters:
            actionMappingClass - default class name to be used when creating action mapping instances.

            addActionConfig

            public void addActionConfig(ActionConfig config)
            Add a new ActionConfig instance to the set associated with this module.

            Specified by:
            addActionConfig in interface ModuleConfig
            Parameters:
            config - The new configuration instance to be added
            Throws:
            java.lang.IllegalStateException - if this module configuration has been frozen

            addDataSourceConfig

            public void addDataSourceConfig(DataSourceConfig config)
            Add a new DataSourceConfig instance to the set associated with this module.

            Specified by:
            addDataSourceConfig in interface ModuleConfig
            Parameters:
            config - The new configuration instance to be added
            Throws:
            java.lang.IllegalStateException - if this module configuration has been frozen

            addExceptionConfig

            public void addExceptionConfig(ExceptionConfig config)
            Add a new ExceptionConfig instance to the set associated with this module.

            Specified by:
            addExceptionConfig in interface ModuleConfig
            Parameters:
            config - The new configuration instance to be added
            Throws:
            java.lang.IllegalStateException - if this module configuration has been frozen

            addFormBeanConfig

            public void addFormBeanConfig(FormBeanConfig config)
            Add a new FormBeanConfig instance to the set associated with this module.

            Specified by:
            addFormBeanConfig in interface ModuleConfig
            Parameters:
            config - The new configuration instance to be added
            Throws:
            java.lang.IllegalStateException - if this module configuration has been frozen

            addForwardConfig

            public void addForwardConfig(ForwardConfig config)
            Add a new ForwardConfig instance to the set of global forwards associated with this module.

            Specified by:
            addForwardConfig in interface ModuleConfig
            Parameters:
            config - The new configuration instance to be added
            Throws:
            java.lang.IllegalStateException - if this module configuration has been frozen

            addMessageResourcesConfig

            public void addMessageResourcesConfig(MessageResourcesConfig config)
            Add a new MessageResourcesConfig instance to the set associated with this module.

            Specified by:
            addMessageResourcesConfig in interface ModuleConfig
            Parameters:
            config - The new configuration instance to be added
            Throws:
            java.lang.IllegalStateException - if this module configuration has been frozen

            addPlugInConfig

            public void addPlugInConfig(PlugInConfig plugInConfig)
            Add a newly configured PlugInConfig instance to the set of plug-in Actions for this module.

            Specified by:
            addPlugInConfig in interface ModuleConfig
            Parameters:
            plugInConfig - The new configuration instance to be added

            findActionConfig

            public ActionConfig findActionConfig(java.lang.String path)
            Return the action configuration for the specified path, if any; otherwise return null.

            Specified by:
            findActionConfig in interface ModuleConfig
            Parameters:
            path - Path of the action configuration to return

            findActionConfigs

            public ActionConfig[] findActionConfigs()
            Return the action configurations for this module. If there are none, a zero-length array is returned.

            Specified by:
            findActionConfigs in interface ModuleConfig

            findDataSourceConfig

            public DataSourceConfig findDataSourceConfig(java.lang.String key)
            Return the data source configuration for the specified key, if any; otherwise return null.

            Specified by:
            findDataSourceConfig in interface ModuleConfig
            Parameters:
            key - Key of the data source configuration to return

            findDataSourceConfigs

            public DataSourceConfig[] findDataSourceConfigs()
            Return the data source configurations for this module. If there are none, a zero-length array is returned.

            Specified by:
            findDataSourceConfigs in interface ModuleConfig

            findExceptionConfig

            public ExceptionConfig findExceptionConfig(java.lang.String type)
            Return the exception configuration for the specified type, if any; otherwise return null.

            Specified by:
            findExceptionConfig in interface ModuleConfig
            Parameters:
            type - Exception class name to find a configuration for

            findExceptionConfigs

            public ExceptionConfig[] findExceptionConfigs()
            Return the exception configurations for this module. If there are none, a zero-length array is returned.

            Specified by:
            findExceptionConfigs in interface ModuleConfig

            findFormBeanConfig

            public FormBeanConfig findFormBeanConfig(java.lang.String name)
            Return the form bean configuration for the specified key, if any; otherwise return null.

            Specified by:
            findFormBeanConfig in interface ModuleConfig
            Parameters:
            name - Name of the form bean configuration to return

            findFormBeanConfigs

            public FormBeanConfig[] findFormBeanConfigs()
            Return the form bean configurations for this module. If there are none, a zero-length array is returned.

            Specified by:
            findFormBeanConfigs in interface ModuleConfig

            findForwardConfig

            public ForwardConfig findForwardConfig(java.lang.String name)
            Return the forward configuration for the specified key, if any; otherwise return null.

            Specified by:
            findForwardConfig in interface ModuleConfig
            Parameters:
            name - Name of the forward configuration to return

            findForwardConfigs

            public ForwardConfig[] findForwardConfigs()
            Return the form bean configurations for this module. If there are none, a zero-length array is returned.

            Specified by:
            findForwardConfigs in interface ModuleConfig

            findMessageResourcesConfig

            public MessageResourcesConfig findMessageResourcesConfig(java.lang.String key)
            Return the message resources configuration for the specified key, if any; otherwise return null.

            Specified by:
            findMessageResourcesConfig in interface ModuleConfig
            Parameters:
            key - Key of the data source configuration to return

            findMessageResourcesConfigs

            public MessageResourcesConfig[] findMessageResourcesConfigs()
            Return the message resources configurations for this module. If there are none, a zero-length array is returned.

            Specified by:
            findMessageResourcesConfigs in interface ModuleConfig

            findPlugInConfigs

            public PlugInConfig[] findPlugInConfigs()
            Return the configured plug-in actions for this module. If there are none, a zero-length array is returned.

            Specified by:
            findPlugInConfigs in interface ModuleConfig

            freeze

            public void freeze()
            Freeze the configuration of this module. After this method returns, any attempt to modify the configuration will return an IllegalStateException.

            Specified by:
            freeze in interface ModuleConfig

            removeActionConfig

            public void removeActionConfig(ActionConfig config)
            Remove the specified action configuration instance.

            Specified by:
            removeActionConfig in interface ModuleConfig
            Parameters:
            config - ActionConfig instance to be removed
            Throws:
            java.lang.IllegalStateException - if this module configuration has been frozen

            removeExceptionConfig

            public void removeExceptionConfig(ExceptionConfig config)
            Remove the specified exception configuration instance.

            Specified by:
            removeExceptionConfig in interface ModuleConfig
            Parameters:
            config - ActionConfig instance to be removed
            Throws:
            java.lang.IllegalStateException - if this module configuration has been frozen

            removeDataSourceConfig

            public void removeDataSourceConfig(DataSourceConfig config)
            Remove the specified data source configuration instance.

            Specified by:
            removeDataSourceConfig in interface ModuleConfig
            Parameters:
            config - DataSourceConfig instance to be removed
            Throws:
            java.lang.IllegalStateException - if this module configuration has been frozen

            removeFormBeanConfig

            public void removeFormBeanConfig(FormBeanConfig config)
            Remove the specified form bean configuration instance.

            Specified by:
            removeFormBeanConfig in interface ModuleConfig
            Parameters:
            config - FormBeanConfig instance to be removed
            Throws:
            java.lang.IllegalStateException - if this module configuration has been frozen

            removeForwardConfig

            public void removeForwardConfig(ForwardConfig config)
            Remove the specified forward configuration instance.

            Specified by:
            removeForwardConfig in interface ModuleConfig
            Parameters:
            config - ForwardConfig instance to be removed
            Throws:
            java.lang.IllegalStateException - if this module configuration has been frozen

            removeMessageResourcesConfig

            public void removeMessageResourcesConfig(MessageResourcesConfig config)
            Remove the specified message resources configuration instance.

            Specified by:
            removeMessageResourcesConfig in interface ModuleConfig
            Parameters:
            config - MessageResourcesConfig instance to be removed
            Throws:
            java.lang.IllegalStateException - if this module configuration has been frozen


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/impl/package-frame.html0000644000175000017500000000224410404045214031125 0ustar arnaudarnaud00000000000000 org.apache.struts.config.impl (Apache Struts API Documentation) org.apache.struts.config.impl
            Classes 
            DefaultModuleConfigFactory
            ModuleConfigImpl
            libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/impl/package-summary.html0000644000175000017500000001433110404045220031525 0ustar arnaudarnaud00000000000000 org.apache.struts.config.impl (Apache Struts API Documentation)

            Package org.apache.struts.config.impl

            Class Summary
            DefaultModuleConfigFactory A factory for creating ModuleConfig instances.
            ModuleConfigImpl The collection of static configuration information that describes a Struts-based module.
             



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/impl/package-tree.html0000644000175000017500000001436410404045222030777 0ustar arnaudarnaud00000000000000 org.apache.struts.config.impl Class Hierarchy (Apache Struts API Documentation)

            Hierarchy For Package org.apache.struts.config.impl

            Package Hierarchies:
            All Packages

            Class Hierarchy



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/impl/package-use.html0000644000175000017500000001710410404045244030633 0ustar arnaudarnaud00000000000000 Uses of Package org.apache.struts.config.impl (Apache Struts API Documentation)

            Uses of Package
            org.apache.struts.config.impl

            Packages that use org.apache.struts.config.impl
            org.apache.struts.config The "config" package contains configuration objects that correspond to elements that may be specified in the struts-config.xml module configuration file. 
            org.apache.struts.config.impl   
             

            Classes in org.apache.struts.config.impl used by org.apache.struts.config
            ModuleConfigImpl
                      The collection of static configuration information that describes a Struts-based module.
             

            Classes in org.apache.struts.config.impl used by org.apache.struts.config.impl
            ModuleConfigImpl
                      The collection of static configuration information that describes a Struts-based module.
             



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/ActionConfig.html0000644000175000017500000017644610404045232030064 0ustar arnaudarnaud00000000000000 ActionConfig (Apache Struts API Documentation)

            org.apache.struts.config
            Class ActionConfig

            java.lang.Object
              |
              +--org.apache.struts.config.ActionConfig
            
            All Implemented Interfaces:
            java.io.Serializable
            Direct Known Subclasses:
            ActionMapping

            public class ActionConfig
            extends java.lang.Object
            implements java.io.Serializable

            A JavaBean representing the configuration information of an <action> element from a Struts module configuration file.

            Since:
            Struts 1.1
            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  java.lang.String attribute
                      The request-scope or session-scope attribute name under which our form bean is accessed, if it is different from the form bean's specified name.
            protected  boolean configured
                      Indicates if configuration of this component been completed.
            protected  java.util.HashMap exceptions
                      The set of exception handling configurations for this action, if any, keyed by the type property.
            protected  java.lang.String forward
                      Context-relative path of the web application resource that will process this request via RequestDispatcher.forward(), instead of instantiating and calling the Action class specified by "type".
            protected  java.util.HashMap forwards
                      The set of local forward configurations for this action, if any, keyed by the name property.
            protected  java.lang.String include
                      Context-relative path of the web application resource that will process this request via RequestDispatcher.include(), instead of instantiating and calling the Action class specified by "type".
            protected  java.lang.String input
                      Context-relative path of the input form to which control should be returned if a validation error is encountered.
            protected  ModuleConfig moduleConfig
                      The module configuration with which we are associated.
            protected  java.lang.String multipartClass
                      Fully qualified Java class name of the MultipartRequestHandler implementation class used to process multi-part request data for this Action.
            protected  java.lang.String name
                      Name of the form bean, if any, associated with this Action.
            protected  java.lang.String parameter
                      General purpose configuration parameter that can be used to pass extra information to the Action instance selected by this Action.
            protected  java.lang.String path
                      Context-relative path of the submitted request, starting with a slash ("/") character, and omitting any filename extension if extension mapping is being used.
            protected  java.lang.String prefix
                      Prefix used to match request parameter names to form bean property names, if any.
            protected  java.lang.String[] roleNames
                      The set of security role names used to authorize access to this Action, as an array for faster access.
            protected  java.lang.String roles
                      Comma-delimited list of security role names allowed to request this Action.
            protected  java.lang.String scope
                      Identifier of the scope ("request" or "session") within which our form bean is accessed, if any.
            protected  java.lang.String suffix
                      Suffix used to match request parameter names to form bean property names, if any.
            protected  java.lang.String type
                      Fully qualified Java class name of the Action class to be used to process requests for this mapping if the forward and include properties are not set.
            protected  boolean unknown
                      Indicates Action be configured as the default one for this application, when true.
            protected  boolean validate
                      Should the validate() method of the form bean associated with this action be called?
             
            Constructor Summary
            ActionConfig()
                       
             
            Method Summary
             void addExceptionConfig(ExceptionConfig config)
                      Add a new ExceptionConfig instance to the set associated with this action.
             void addForwardConfig(ForwardConfig config)
                      Add a new ForwardConfig instance to the set of global forwards associated with this action.
             ExceptionConfig findExceptionConfig(java.lang.String type)
                      Return the exception configuration for the specified type, if any; otherwise return null.
             ExceptionConfig[] findExceptionConfigs()
                      Return the exception configurations for this action.
             ForwardConfig findForwardConfig(java.lang.String name)
                      Return the forward configuration for the specified key, if any; otherwise return null.
             ForwardConfig[] findForwardConfigs()
                      Return the form bean configurations for this application.
             void freeze()
                      Freeze the configuration of this action.
             ModuleConfig getApplicationConfig()
                      Deprecated. getModuleConfig()
             java.lang.String getAttribute()
                      Returns the request-scope or session-scope attribute name under which our form bean is accessed, if it is different from the form bean's specified name.
             java.lang.String getForward()
                      Returns context-relative path of the web application resource that will process this request.
             java.lang.String getInclude()
                      Context-relative path of the web application resource that will process this request.
             java.lang.String getInput()
                      Get the context-relative path of the input form to which control should be returned if a validation error is encountered.
             ModuleConfig getModuleConfig()
                      The module configuration with which we are associated.
             java.lang.String getMultipartClass()
                      Return the fully qualified Java class name of the MultipartRequestHandler implementation class used to process multi-part request data for this Action.
             java.lang.String getName()
                      Return name of the form bean, if any, associated with this Action.
             java.lang.String getParameter()
                      Return general purpose configuration parameter that can be used to pass extra information to the Action instance selected by this Action.
             java.lang.String getPath()
                      Return context-relative path of the submitted request, starting with a slash ("/") character, and omitting any filename extension if extension mapping is being used.
             java.lang.String getPrefix()
                      Retruns prefix used to match request parameter names to form bean property names, if any.
             java.lang.String[] getRoleNames()
                      Get array of security role names used to authorize access to this Action.
             java.lang.String getRoles()
                       
             java.lang.String getScope()
                      Get the scope ("request" or "session") within which our form bean is accessed, if any.
             java.lang.String getSuffix()
                      Return suffix used to match request parameter names to form bean property names, if any.
             java.lang.String getType()
                       
             boolean getUnknown()
                      Determine whether Action is configured as the default one for this application.
             boolean getValidate()
                       
             void removeExceptionConfig(ExceptionConfig config)
                      Remove the specified exception configuration instance.
             void removeForwardConfig(ForwardConfig config)
                      Remove the specified forward configuration instance.
             void setApplicationConfig(ModuleConfig moduleConfig)
                      Deprecated. setModuleConfig(ModuleConfig)
             void setAttribute(java.lang.String attribute)
                      Set the request-scope or session-scope attribute name under which our form bean is accessed, if it is different from the form bean's specified name.
             void setForward(java.lang.String forward)
                      Set the context-relative path of the web application resource that will process this request.
             void setInclude(java.lang.String include)
                      Set context-relative path of the web application resource that will process this request.
             void setInput(java.lang.String input)
                      Set the context-relative path of the input form to which control should be returned if a validation error is encountered.
             void setModuleConfig(ModuleConfig moduleConfig)
                      The module configuration with which we are associated.
             void setMultipartClass(java.lang.String multipartClass)
                      Set the fully qualified Java class name of the MultipartRequestHandler implementation class used to process multi-part request data for this Action.
             void setName(java.lang.String name)
                       
             void setParameter(java.lang.String parameter)
                      General purpose configuration parameter that can be used to pass extra information to the Action instance selected by this Action.
             void setPath(java.lang.String path)
                      Set context-relative path of the submitted request, starting with a slash ("/") character, and omitting any filename extension if extension mapping is being used.
             void setPrefix(java.lang.String prefix)
                       
             void setRoles(java.lang.String roles)
                       
             void setScope(java.lang.String scope)
                       
             void setSuffix(java.lang.String suffix)
                       
             void setType(java.lang.String type)
                       
             void setUnknown(boolean unknown)
                       
             void setValidate(boolean validate)
                       
             java.lang.String toString()
                      Return a String representation of this object.
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
             

            Field Detail

            configured

            protected boolean configured
            Indicates if configuration of this component been completed.


            exceptions

            protected java.util.HashMap exceptions
            The set of exception handling configurations for this action, if any, keyed by the type property.


            forwards

            protected java.util.HashMap forwards
            The set of local forward configurations for this action, if any, keyed by the name property.


            moduleConfig

            protected ModuleConfig moduleConfig
            The module configuration with which we are associated.


            attribute

            protected java.lang.String attribute
            The request-scope or session-scope attribute name under which our form bean is accessed, if it is different from the form bean's specified name.


            forward

            protected java.lang.String forward
            Context-relative path of the web application resource that will process this request via RequestDispatcher.forward(), instead of instantiating and calling the Action class specified by "type". Exactly one of forward, include, or type must be specified.


            include

            protected java.lang.String include
            Context-relative path of the web application resource that will process this request via RequestDispatcher.include(), instead of instantiating and calling the Action class specified by "type". Exactly one of forward, include, or type must be specified.


            input

            protected java.lang.String input
            Context-relative path of the input form to which control should be returned if a validation error is encountered. Required if "name" is specified and the input bean returns validation errors.


            multipartClass

            protected java.lang.String multipartClass
            Fully qualified Java class name of the MultipartRequestHandler implementation class used to process multi-part request data for this Action.


            name

            protected java.lang.String name
            Name of the form bean, if any, associated with this Action.


            parameter

            protected java.lang.String parameter
            General purpose configuration parameter that can be used to pass extra information to the Action instance selected by this Action. Struts does not itself use this value in any way.


            path

            protected java.lang.String path
            Context-relative path of the submitted request, starting with a slash ("/") character, and omitting any filename extension if extension mapping is being used.


            prefix

            protected java.lang.String prefix
            Prefix used to match request parameter names to form bean property names, if any.


            roles

            protected java.lang.String roles
            Comma-delimited list of security role names allowed to request this Action.


            roleNames

            protected java.lang.String[] roleNames
            The set of security role names used to authorize access to this Action, as an array for faster access.


            scope

            protected java.lang.String scope
            Identifier of the scope ("request" or "session") within which our form bean is accessed, if any.


            suffix

            protected java.lang.String suffix
            Suffix used to match request parameter names to form bean property names, if any.


            type

            protected java.lang.String type
            Fully qualified Java class name of the Action class to be used to process requests for this mapping if the forward and include properties are not set. Exactly one of forward, include, or type must be specified.


            unknown

            protected boolean unknown
            Indicates Action be configured as the default one for this application, when true.


            validate

            protected boolean validate
            Should the validate() method of the form bean associated with this action be called?

            Constructor Detail

            ActionConfig

            public ActionConfig()
            Method Detail

            getApplicationConfig

            public ModuleConfig getApplicationConfig()
            Deprecated. getModuleConfig()

            The module configuration with which we are associated.


            getModuleConfig

            public ModuleConfig getModuleConfig()
            The module configuration with which we are associated.


            setApplicationConfig

            public void setApplicationConfig(ModuleConfig moduleConfig)
            Deprecated. setModuleConfig(ModuleConfig)

            The module configuration with which we are associated.


            setModuleConfig

            public void setModuleConfig(ModuleConfig moduleConfig)
            The module configuration with which we are associated.


            getAttribute

            public java.lang.String getAttribute()
            Returns the request-scope or session-scope attribute name under which our form bean is accessed, if it is different from the form bean's specified name.

            Returns:
            attribute name under which our form bean is accessed.

            setAttribute

            public void setAttribute(java.lang.String attribute)
            Set the request-scope or session-scope attribute name under which our form bean is accessed, if it is different from the form bean's specified name.

            Parameters:
            attribute - the request-scope or session-scope attribute name under which our form bean is access.

            getForward

            public java.lang.String getForward()
            Returns context-relative path of the web application resource that will process this request.

            Returns:
            context-relative path of the web application resource that will process this request.

            setForward

            public void setForward(java.lang.String forward)
            Set the context-relative path of the web application resource that will process this request. Exactly one of forward, include, or type must be specified.

            Parameters:
            forward - context-relative path of the web application resource that will process this request.

            getInclude

            public java.lang.String getInclude()
            Context-relative path of the web application resource that will process this request.

            Returns:
            Context-relative path of the web application resource that will process this request.

            setInclude

            public void setInclude(java.lang.String include)
            Set context-relative path of the web application resource that will process this request. Exactly one of forward, include, or type must be specified.

            Parameters:
            include - context-relative path of the web application resource that will process this request.

            getInput

            public java.lang.String getInput()
            Get the context-relative path of the input form to which control should be returned if a validation error is encountered.

            Returns:
            context-relative path of the input form to which control should be returned if a validation error is encountered.

            setInput

            public void setInput(java.lang.String input)
            Set the context-relative path of the input form to which control should be returned if a validation error is encountered. Required if "name" is specified and the input bean returns validation errors.

            Parameters:
            input - context-relative path of the input form to which control should be returned if a validation error is encountered.

            getMultipartClass

            public java.lang.String getMultipartClass()
            Return the fully qualified Java class name of the MultipartRequestHandler implementation class used to process multi-part request data for this Action.


            setMultipartClass

            public void setMultipartClass(java.lang.String multipartClass)
            Set the fully qualified Java class name of the MultipartRequestHandler implementation class used to process multi-part request data for this Action.

            Parameters:
            multipartClass - fully qualified class name of the MultipartRequestHandler implementation class.

            getName

            public java.lang.String getName()
            Return name of the form bean, if any, associated with this Action.


            setName

            public void setName(java.lang.String name)
            Parameters:
            name - name of the form bean associated with this Action.

            getParameter

            public java.lang.String getParameter()
            Return general purpose configuration parameter that can be used to pass extra information to the Action instance selected by this Action. Struts does not itself use this value in any way.


            setParameter

            public void setParameter(java.lang.String parameter)
            General purpose configuration parameter that can be used to pass extra information to the Action instance selected by this Action. Struts does not itself use this value in any way.

            Parameters:
            parameter - General purpose configuration parameter.

            getPath

            public java.lang.String getPath()
            Return context-relative path of the submitted request, starting with a slash ("/") character, and omitting any filename extension if extension mapping is being used.


            setPath

            public void setPath(java.lang.String path)
            Set context-relative path of the submitted request, starting with a slash ("/") character, and omitting any filename extension if extension mapping is being used.

            Parameters:
            path - context-relative path of the submitted request.

            getPrefix

            public java.lang.String getPrefix()
            Retruns prefix used to match request parameter names to form bean property names, if any.


            setPrefix

            public void setPrefix(java.lang.String prefix)
            Parameters:
            prefix - Prefix used to match request parameter names to form bean property names, if any.

            getRoles

            public java.lang.String getRoles()

            setRoles

            public void setRoles(java.lang.String roles)

            getRoleNames

            public java.lang.String[] getRoleNames()
            Get array of security role names used to authorize access to this Action.


            getScope

            public java.lang.String getScope()
            Get the scope ("request" or "session") within which our form bean is accessed, if any.


            setScope

            public void setScope(java.lang.String scope)
            Parameters:
            scope - scope ("request" or "session") within which our form bean is accessed, if any.

            getSuffix

            public java.lang.String getSuffix()
            Return suffix used to match request parameter names to form bean property names, if any.


            setSuffix

            public void setSuffix(java.lang.String suffix)
            Parameters:
            suffix - Suffix used to match request parameter names to form bean property names, if any.

            getType

            public java.lang.String getType()

            setType

            public void setType(java.lang.String type)

            getUnknown

            public boolean getUnknown()
            Determine whether Action is configured as the default one for this application.


            setUnknown

            public void setUnknown(boolean unknown)
            Parameters:
            unknown - Indicates Action is configured as the default one for this application, when true.

            getValidate

            public boolean getValidate()

            setValidate

            public void setValidate(boolean validate)

            addExceptionConfig

            public void addExceptionConfig(ExceptionConfig config)
            Add a new ExceptionConfig instance to the set associated with this action.

            Parameters:
            config - The new configuration instance to be added
            Throws:
            java.lang.IllegalStateException - if this module configuration has been frozen

            addForwardConfig

            public void addForwardConfig(ForwardConfig config)
            Add a new ForwardConfig instance to the set of global forwards associated with this action.

            Parameters:
            config - The new configuration instance to be added
            Throws:
            java.lang.IllegalStateException - if this module configuration has been frozen

            findExceptionConfig

            public ExceptionConfig findExceptionConfig(java.lang.String type)
            Return the exception configuration for the specified type, if any; otherwise return null.

            Parameters:
            type - Exception class name to find a configuration for

            findExceptionConfigs

            public ExceptionConfig[] findExceptionConfigs()
            Return the exception configurations for this action. If there are none, a zero-length array is returned.


            findForwardConfig

            public ForwardConfig findForwardConfig(java.lang.String name)
            Return the forward configuration for the specified key, if any; otherwise return null.

            Parameters:
            name - Name of the forward configuration to return

            findForwardConfigs

            public ForwardConfig[] findForwardConfigs()
            Return the form bean configurations for this application. If there are none, a zero-length array is returned.


            freeze

            public void freeze()
            Freeze the configuration of this action.


            removeExceptionConfig

            public void removeExceptionConfig(ExceptionConfig config)
            Remove the specified exception configuration instance.

            Parameters:
            config - ExceptionConfig instance to be removed
            Throws:
            java.lang.IllegalStateException - if this module configuration has been frozen

            removeForwardConfig

            public void removeForwardConfig(ForwardConfig config)
            Remove the specified forward configuration instance.

            Parameters:
            config - ForwardConfig instance to be removed
            Throws:
            java.lang.IllegalStateException - if this module configuration has been frozen

            toString

            public java.lang.String toString()
            Return a String representation of this object.

            Overrides:
            toString in class java.lang.Object


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/ActionMappingFactory.html0000644000175000017500000002737610404045204031576 0ustar arnaudarnaud00000000000000 ActionMappingFactory (Apache Struts API Documentation)

            org.apache.struts.config
            Class ActionMappingFactory

            java.lang.Object
              |
              +--org.apache.commons.digester.AbstractObjectCreationFactory
                    |
                    +--org.apache.struts.config.ActionMappingFactory
            
            All Implemented Interfaces:
            org.apache.commons.digester.ObjectCreationFactory

            final class ActionMappingFactory
            extends org.apache.commons.digester.AbstractObjectCreationFactory

            An object creation factory which creates action mapping instances, taking into account the default class name, which may have been specified on the parent element and which is made available through the object on the top of the stack, which must be a org.apache.struts.config.ModuleConfig.


            Field Summary
             
            Fields inherited from class org.apache.commons.digester.AbstractObjectCreationFactory
            digester
             
            Constructor Summary
            (package private) ActionMappingFactory()
                       
             
            Method Summary
             java.lang.Object createObject(org.xml.sax.Attributes attributes)
                       
             
            Methods inherited from class org.apache.commons.digester.AbstractObjectCreationFactory
            getDigester, setDigester
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
             

            Constructor Detail

            ActionMappingFactory

            ActionMappingFactory()
            Method Detail

            createObject

            public java.lang.Object createObject(org.xml.sax.Attributes attributes)
            Specified by:
            createObject in interface org.apache.commons.digester.ObjectCreationFactory
            Specified by:
            createObject in class org.apache.commons.digester.AbstractObjectCreationFactory


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/AddDataSourcePropertyRule.html0000644000175000017500000002634410404045224032551 0ustar arnaudarnaud00000000000000 AddDataSourcePropertyRule (Apache Struts API Documentation)

            org.apache.struts.config
            Class AddDataSourcePropertyRule

            java.lang.Object
              |
              +--org.apache.commons.digester.Rule
                    |
                    +--org.apache.struts.config.AddDataSourcePropertyRule
            

            final class AddDataSourcePropertyRule
            extends org.apache.commons.digester.Rule

            Class that calls addProperty() for the top object on the stack, which must be a org.apache.struts.config.DataSourceConfig.


            Field Summary
             
            Fields inherited from class org.apache.commons.digester.Rule
            digester, namespaceURI
             
            Constructor Summary
            AddDataSourcePropertyRule()
                       
             
            Method Summary
             void begin(org.xml.sax.Attributes attributes)
                       
             
            Methods inherited from class org.apache.commons.digester.Rule
            begin, body, body, end, end, finish, getDigester, getNamespaceURI, setDigester, setNamespaceURI
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
             

            Constructor Detail

            AddDataSourcePropertyRule

            public AddDataSourcePropertyRule()
            Method Detail

            begin

            public void begin(org.xml.sax.Attributes attributes)
                       throws java.lang.Exception
            Overrides:
            begin in class org.apache.commons.digester.Rule
            java.lang.Exception


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/ApplicationConfig.html0000644000175000017500000004475010404045244031105 0ustar arnaudarnaud00000000000000 ApplicationConfig (Apache Struts API Documentation)

            org.apache.struts.config
            Class ApplicationConfig

            java.lang.Object
              |
              +--org.apache.struts.config.impl.ModuleConfigImpl
                    |
                    +--org.apache.struts.config.ApplicationConfig
            
            All Implemented Interfaces:
            ModuleConfig, java.io.Serializable

            Deprecated. Usage replaced by ModuleConfig Interface.

            public class ApplicationConfig
            extends ModuleConfigImpl

            The collection of static configuration information that describes a Struts-based application module. Multiple application modules are identified by a prefix at the beginning of the context relative portion of the request URI. If no application prefix can be matched, the default configuration (with a prefix equal to a zero-length string) is selected, which is elegantly backwards compatible with the previous Struts behavior that only supported one application.

            Since:
            Struts 1.1
            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
             
            Fields inherited from class org.apache.struts.config.impl.ModuleConfigImpl
            actionConfigs, actionMappingClass, configured, controllerConfig, dataSources, exceptions, formBeans, forwards, messageResources, plugIns, prefix
             
            Constructor Summary
            ApplicationConfig(ModuleConfigImpl moduleConfig)
                      Deprecated. Only used while we are deprecating ApplicationConfig to insure maximum compatability.
            ApplicationConfig(java.lang.String prefix)
                      Deprecated. Construct an ApplicationConfig object according to the specified parameter values.
             
            Methods inherited from class org.apache.struts.config.impl.ModuleConfigImpl
            addActionConfig, addDataSourceConfig, addExceptionConfig, addFormBeanConfig, addForwardConfig, addMessageResourcesConfig, addPlugInConfig, findActionConfig, findActionConfigs, findDataSourceConfig, findDataSourceConfigs, findExceptionConfig, findExceptionConfigs, findFormBeanConfig, findFormBeanConfigs, findForwardConfig, findForwardConfigs, findMessageResourcesConfig, findMessageResourcesConfigs, findPlugInConfigs, freeze, getActionMappingClass, getConfigured, getControllerConfig, getPrefix, removeActionConfig, removeDataSourceConfig, removeExceptionConfig, removeFormBeanConfig, removeForwardConfig, removeMessageResourcesConfig, setActionMappingClass, setControllerConfig, setPrefix
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
             

            Constructor Detail

            ApplicationConfig

            public ApplicationConfig(java.lang.String prefix)
            Deprecated. 
            Construct an ApplicationConfig object according to the specified parameter values.

            Parameters:
            prefix - Context-relative URI prefix for this module

            ApplicationConfig

            public ApplicationConfig(ModuleConfigImpl moduleConfig)
            Deprecated. Only used while we are deprecating ApplicationConfig to insure maximum compatability.

            Only used while we are deprecating ApplicationConfig. performs a shallow copy to ensure that any operations performed on an ApplicationConfig object is performed on the same underlying ModuleConfigImpl sub objects

            Parameters:
            moduleConfig -


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/ConfigHelper.html0000644000175000017500000020350710404045220030050 0ustar arnaudarnaud00000000000000 ConfigHelper (Apache Struts API Documentation)

            org.apache.struts.config
            Class ConfigHelper

            java.lang.Object
              |
              +--org.apache.struts.config.ConfigHelper
            
            All Implemented Interfaces:
            ConfigHelperInterface

            public class ConfigHelper
            extends java.lang.Object
            implements ConfigHelperInterface

            NOTE: THIS CLASS IS UNDER ACTIVE DEVELOPMENT. THE CURRENT CODE IS WRITTEN FOR CLARITY NOT EFFICIENCY. NOT EVERY API FUNCTION HAS BEEN IMPLEMENTED YET. A helper object to expose the Struts shared resources, which are be stored in the application, session, or request contexts, as appropriate. An instance should be created for each request processed. The methods which return resources from the request or session contexts are not thread-safe. Provided for use by other servlets in the application so they can easily access the Struts shared resources. The resources are stored under attributes in the application, session, or request contexts. The ActionConfig methods simply return the resources from under the context and key used by the Struts ActionServlet when the resources are created.

            Since:
            1.1
            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
            Author:
            Ted Husted, Luis Arias

            Field Summary
            private  javax.servlet.ServletContext application
                      The application associated with this instance.
            private  ActionForward forward
                      The forward associated with this instance.
            private  javax.servlet.http.HttpServletRequest request
                      The request associated with this instance.
            private  javax.servlet.http.HttpServletResponse response
                      The response associated with this instance.
            private  javax.servlet.http.HttpSession session
                      The session associated with this instance.
             
            Constructor Summary
            ConfigHelper()
                       
            ConfigHelper(javax.servlet.ServletContext application, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                       
             
            Method Summary
             java.lang.String action(java.lang.String path)
                      Wrapper for getAction(String)
             java.lang.String errorOutput()
                      Wrapper for getErrorMarkup()
             java.lang.String errorOutput(java.lang.String property)
                      Wrapper for getErrorMarkup(String)
             java.util.Iterator errors()
                      Wrapper for getErrors()
             java.util.Iterator errors(java.lang.String property)
                      Wrapper for getErrors(String)
             boolean errorsEmpty()
                      Wrapper for getErrorEmpty()
             int errorSize()
                      Alias for getErrorSize()
             int errorSize(java.lang.String property)
                      Wrapper for getErrorSize(String)
             java.lang.String getAction(java.lang.String path)
                      Return the URL for the specified ActionMapping, otherwise return null.
             ActionErrors getActionErrors()
                      The org.apache.struts.action.ActionErrors object, for this request.
             ActionForm getActionForm()
                       
             ActionFormBeans getActionFormBeans()
                      The org.apache.struts.action.ActionFormBeans collection for this application.
             ActionForward getActionForward(java.lang.String name)
                      Return the forwarding associated with the specified logical name, if any; otherwise return null.
             ActionForwards getActionForwards()
                      The org.apache.struts.action.ActionForwards collection for this application.
             ActionMapping getActionMapping(java.lang.String path)
                      Return the mapping associated with the specified request path, if any; otherwise return null.
             java.lang.String getActionMappingName(java.lang.String action)
                      Return the form action converted into an action mapping path.
             ActionMappings getActionMappings()
                      The context attributes key under which our org.apache.struts.action.ActionMappings collection is normally stored, unless overridden when initializing our ActionServlet.
             java.lang.String getActionMappingURL(java.lang.String action)
                      Return the form action converted into a server-relative URL.
             ActionMessages getActionMessages()
                      The org.apache.struts.action.ActionFormBeans collection for this application.
             java.lang.String getBaseRef()
                      Renders the reference for a HTML element.
             javax.sql.DataSource getDataSource()
                      The strong>default configured data source (which must implement javax.sql.DataSource), if one is configured for this application.
             java.lang.String getEncodeURL(java.lang.String url)
                      Return the url encoded to maintain the user session, if any.
             java.lang.String getErrorOutput()
                      Wrapper for getErrorMarkup(null)
             java.lang.String getErrorOutput(java.lang.String property)
                      Returns the errors.header, any errors, and the errors.footer.
             java.util.Iterator getErrors()
                      Return the error messages
             java.util.Iterator getErrors(java.lang.String property)
                      Return an ActionError for a property
             boolean getErrorsEmpty()
                      Return true if there are no errors queued
             int getErrorSize()
                      Return the number of error messages.
             int getErrorSize(java.lang.String property)
                      Return the number of error messages.
             java.lang.Throwable getException()
                      The runtime JspException that may be been thrown by a Struts tag extension, or compatible presentation extension, and placed in the request.
             ActionFormBean getFormBean(java.lang.String name)
                      Return the form bean definition associated with the specified logical name, if any; otherwise return null.
             java.lang.String getLink(java.lang.String name)
                      Return the path for the specified forward, otherwise return null.
             java.util.Locale getLocale()
                      The java.util.Locale for the user, if any.
             ActionMapping getMapping()
                      The org.apache.struts.ActionMapping instance for this request.
             java.lang.String getMessage(java.lang.String key)
                      Return the localized message for the specified key, otherwise return null.
             java.lang.String getMessage(java.lang.String key, java.lang.Object[] args)
                      Look up and return a message string, based on the specified parameters.
             MessageResources getMessageResources()
                      The application resources for this application.
             MultipartRequestWrapper getMultipartRequestWrapper()
                      The multipart object for this request.
             java.lang.String getOrigRef()
                      Renders the reference for a HTML element
             java.lang.String getServletMapping()
                      The path-mapped pattern (/action/*) or extension mapped pattern ((*.do) used to determine our Action URIs in this application.
             java.lang.String getToken()
                      The transaction token stored in this session, if it is used.
             boolean isMessage(java.lang.String key)
                      Return true if a message string for the specified message key is present for the user's Locale.
             java.lang.String link(java.lang.String name)
                      Wrapper for getLink(String)
             java.lang.String message(java.lang.String key)
                      Wrapper for getMessage(String)
             java.lang.String message(java.lang.String key, java.lang.Object[] args)
                      Wrapper for getMessage(String,Object[])
             void setApplication(javax.servlet.ServletContext application)
                      Set the application associated with this instance.
             void setForward(ActionForward forward)
                      Set the forward associated with this instance.
             void setRequest(javax.servlet.http.HttpServletRequest request)
                      Set the request associated with this object.
             void setResources(javax.servlet.ServletContext application, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
                      Set the application and request for this object instance.
             void setResponse(javax.servlet.http.HttpServletResponse response)
                      Set the response associated with this isntance.
             void setSession(javax.servlet.http.HttpSession session)
                      Set the session associated with this instance.
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
             

            Field Detail

            application

            private javax.servlet.ServletContext application
            The application associated with this instance.


            session

            private javax.servlet.http.HttpSession session
            The session associated with this instance.


            request

            private javax.servlet.http.HttpServletRequest request
            The request associated with this instance.


            response

            private javax.servlet.http.HttpServletResponse response
            The response associated with this instance.


            forward

            private ActionForward forward
            The forward associated with this instance.

            Constructor Detail

            ConfigHelper

            public ConfigHelper()

            ConfigHelper

            public ConfigHelper(javax.servlet.ServletContext application,
                                javax.servlet.http.HttpServletRequest request,
                                javax.servlet.http.HttpServletResponse response)
            Method Detail

            setApplication

            public void setApplication(javax.servlet.ServletContext application)
            Set the application associated with this instance. [servlet.getServletContext()]


            setSession

            public void setSession(javax.servlet.http.HttpSession session)
            Set the session associated with this instance.


            setRequest

            public void setRequest(javax.servlet.http.HttpServletRequest request)
            Set the request associated with this object. Session object is also set or cleared.


            setResponse

            public void setResponse(javax.servlet.http.HttpServletResponse response)
            Set the response associated with this isntance. Session object is also set or cleared.


            setForward

            public void setForward(ActionForward forward)
            Set the forward associated with this instance.


            setResources

            public void setResources(javax.servlet.ServletContext application,
                                     javax.servlet.http.HttpServletRequest request,
                                     javax.servlet.http.HttpServletResponse response)
            Set the application and request for this object instance. The ServletContext can be set by any servlet in the application. The request should be the instant request. Most of the other methods retrieve their own objects by reference to the application, request, or session attributes. Do not call other methods without setting these first! This is also called by the convenience constructor.

            Parameters:
            application - - The associated ServletContext.
            request - - The associated HTTP request.
            response - - The associated HTTP response.

            getDataSource

            public javax.sql.DataSource getDataSource()
            The strong>default configured data source (which must implement javax.sql.DataSource), if one is configured for this application.

            Specified by:
            getDataSource in interface ConfigHelperInterface

            getActionMessages

            public ActionMessages getActionMessages()
            Description copied from interface: ConfigHelperInterface
            The org.apache.struts.action.ActionFormBeans collection for this application.

            Specified by:
            getActionMessages in interface ConfigHelperInterface

            getActionFormBeans

            public ActionFormBeans getActionFormBeans()
            The org.apache.struts.action.ActionFormBeans collection for this application.

            Specified by:
            getActionFormBeans in interface ConfigHelperInterface

            getActionForwards

            public ActionForwards getActionForwards()
            The org.apache.struts.action.ActionForwards collection for this application.

            Specified by:
            getActionForwards in interface ConfigHelperInterface

            getActionMappings

            public ActionMappings getActionMappings()
            The context attributes key under which our org.apache.struts.action.ActionMappings collection is normally stored, unless overridden when initializing our ActionServlet.

            Specified by:
            getActionMappings in interface ConfigHelperInterface

            getMessageResources

            public MessageResources getMessageResources()
            The application resources for this application.

            Specified by:
            getMessageResources in interface ConfigHelperInterface

            getServletMapping

            public java.lang.String getServletMapping()
            The path-mapped pattern (/action/*) or extension mapped pattern ((*.do) used to determine our Action URIs in this application.

            Specified by:
            getServletMapping in interface ConfigHelperInterface

            getLocale

            public java.util.Locale getLocale()
            The java.util.Locale for the user, if any. If a default locale object is not in the user's session, the system default locale is returned. If used, the user locale is typically set during login processing under the key Globals.LOCALE_KEY.

            Specified by:
            getLocale in interface ConfigHelperInterface

            getToken

            public java.lang.String getToken()
            The transaction token stored in this session, if it is used.

            Specified by:
            getToken in interface ConfigHelperInterface

            getActionErrors

            public ActionErrors getActionErrors()
            The org.apache.struts.action.ActionErrors object, for this request.

            Specified by:
            getActionErrors in interface ConfigHelperInterface

            getException

            public java.lang.Throwable getException()
            The runtime JspException that may be been thrown by a Struts tag extension, or compatible presentation extension, and placed in the request.

            Specified by:
            getException in interface ConfigHelperInterface

            getMultipartRequestWrapper

            public MultipartRequestWrapper getMultipartRequestWrapper()
            The multipart object for this request.

            Specified by:
            getMultipartRequestWrapper in interface ConfigHelperInterface

            getMapping

            public ActionMapping getMapping()
            The org.apache.struts.ActionMapping instance for this request.

            Specified by:
            getMapping in interface ConfigHelperInterface

            isMessage

            public boolean isMessage(java.lang.String key)
            Return true if a message string for the specified message key is present for the user's Locale.

            Specified by:
            isMessage in interface ConfigHelperInterface
            Parameters:
            key - Message key

            getActionForm

            public ActionForm getActionForm()
            Specified by:
            getActionForm in interface ConfigHelperInterface

            getFormBean

            public ActionFormBean getFormBean(java.lang.String name)
            Return the form bean definition associated with the specified logical name, if any; otherwise return null.

            Specified by:
            getFormBean in interface ConfigHelperInterface
            Parameters:
            name - Logical name of the requested form bean definition

            getActionForward

            public ActionForward getActionForward(java.lang.String name)
            Return the forwarding associated with the specified logical name, if any; otherwise return null.

            Specified by:
            getActionForward in interface ConfigHelperInterface
            Parameters:
            name - Logical name of the requested forwarding

            getActionMapping

            public ActionMapping getActionMapping(java.lang.String path)
            Return the mapping associated with the specified request path, if any; otherwise return null.

            Specified by:
            getActionMapping in interface ConfigHelperInterface
            Parameters:
            path - Request path for which a mapping is requested

            getActionMappingName

            public java.lang.String getActionMappingName(java.lang.String action)
            Return the form action converted into an action mapping path. The value of the action property is manipulated as follows in computing the name of the requested mapping:
            • Any filename extension is removed (on the theory that extension mapping is being used to select the controller servlet).
            • If the resulting value does not start with a slash, then a slash is prepended.

            Specified by:
            getActionMappingName in interface ConfigHelperInterface

            getActionMappingURL

            public java.lang.String getActionMappingURL(java.lang.String action)
            Return the form action converted into a server-relative URL.

            Specified by:
            getActionMappingURL in interface ConfigHelperInterface

            getEncodeURL

            public java.lang.String getEncodeURL(java.lang.String url)
            Return the url encoded to maintain the user session, if any.

            Specified by:
            getEncodeURL in interface ConfigHelperInterface

            getOrigRef

            public java.lang.String getOrigRef()
            Renders the reference for a HTML element

            Specified by:
            getOrigRef in interface ConfigHelperInterface

            getBaseRef

            public java.lang.String getBaseRef()
            Renders the reference for a HTML element.

            Specified by:
            getBaseRef in interface ConfigHelperInterface

            getLink

            public java.lang.String getLink(java.lang.String name)
            Return the path for the specified forward, otherwise return null.

            Specified by:
            getLink in interface ConfigHelperInterface
            Parameters:
            name - Name given to local or global forward.

            getMessage

            public java.lang.String getMessage(java.lang.String key)
            Return the localized message for the specified key, otherwise return null.

            Specified by:
            getMessage in interface ConfigHelperInterface
            Parameters:
            key - Message key

            getMessage

            public java.lang.String getMessage(java.lang.String key,
                                               java.lang.Object[] args)
            Look up and return a message string, based on the specified parameters.

            Specified by:
            getMessage in interface ConfigHelperInterface
            Parameters:
            key - Message key to be looked up and returned
            args - Replacement parameters for this message

            getAction

            public java.lang.String getAction(java.lang.String path)
            Return the URL for the specified ActionMapping, otherwise return null.

            Specified by:
            getAction in interface ConfigHelperInterface
            Parameters:
            path - Name given to local or global forward.

            getErrorSize

            public int getErrorSize()
            Return the number of error messages.

            Specified by:
            getErrorSize in interface ConfigHelperInterface

            getErrorsEmpty

            public boolean getErrorsEmpty()
            Return true if there are no errors queued

            Specified by:
            getErrorsEmpty in interface ConfigHelperInterface

            getErrors

            public java.util.Iterator getErrors()
            Return the error messages

            Specified by:
            getErrors in interface ConfigHelperInterface

            getErrors

            public java.util.Iterator getErrors(java.lang.String property)
            Return an ActionError for a property

            Specified by:
            getErrors in interface ConfigHelperInterface
            Parameters:
            property - Property name

            getErrorSize

            public int getErrorSize(java.lang.String property)
            Return the number of error messages.

            Specified by:
            getErrorSize in interface ConfigHelperInterface
            Parameters:
            property - Property name

            getErrorOutput

            public java.lang.String getErrorOutput(java.lang.String property)
            Returns the errors.header, any errors, and the errors.footer.

            Specified by:
            getErrorOutput in interface ConfigHelperInterface
            Parameters:
            property - Property name

            getErrorOutput

            public java.lang.String getErrorOutput()
            Wrapper for getErrorMarkup(null)

            Specified by:
            getErrorOutput in interface ConfigHelperInterface

            link

            public java.lang.String link(java.lang.String name)
            Wrapper for getLink(String)

            Parameters:
            name - Name given to local or global forward.

            message

            public java.lang.String message(java.lang.String key)
            Wrapper for getMessage(String)

            Parameters:
            key - Message key

            message

            public java.lang.String message(java.lang.String key,
                                            java.lang.Object[] args)
            Wrapper for getMessage(String,Object[])

            Parameters:
            key - Message key to be looked up and returned
            args - Replacement parameters for this message

            action

            public java.lang.String action(java.lang.String path)
            Wrapper for getAction(String)

            Parameters:
            path - Name given to local or global forward.

            errorSize

            public int errorSize()
            Alias for getErrorSize()


            errorsEmpty

            public boolean errorsEmpty()
            Wrapper for getErrorEmpty()


            errors

            public java.util.Iterator errors()
            Wrapper for getErrors()


            errors

            public java.util.Iterator errors(java.lang.String property)
            Wrapper for getErrors(String)


            errorSize

            public int errorSize(java.lang.String property)
            Wrapper for getErrorSize(String)

            Parameters:
            property - Property name

            errorOutput

            public java.lang.String errorOutput(java.lang.String property)
            Wrapper for getErrorMarkup(String)


            errorOutput

            public java.lang.String errorOutput()
            Wrapper for getErrorMarkup()



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/ConfigHelperInterface.html0000644000175000017500000010753010404045240031672 0ustar arnaudarnaud00000000000000 ConfigHelperInterface (Apache Struts API Documentation)

            org.apache.struts.config
            Interface ConfigHelperInterface

            All Known Implementing Classes:
            ConfigHelper

            public interface ConfigHelperInterface

            NOTE: THIS CLASS IS UNDER ACTIVE DEVELOPMENT. THE CURRENT CODE IS WRITTEN FOR CLARITY NOT EFFICIENCY. NOT EVERY API FUNCTION HAS BEEN IMPLEMENTED YET. A helper object to expose the Struts shared resources, which are be stored in the application, session, or request contexts, as appropriate. An instance should be created for each request processed. The methods which return resources from the request or session contexts are not thread-safe. Provided for use by other servlets in the application so they can easily access the Struts shared resources. The resources are stored under attributes in the application, session, or request contexts. The ActionConfig methods simply return the resources from under the context and key used by the Struts ActionServlet when the resources are created.

            Since:
            1.1
            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
            Author:
            Ted Husted, Luis Arias

            Method Summary
             java.lang.String getAction(java.lang.String path)
                      Return the URL for the specified ActionMapping, otherwise return null.
             ActionErrors getActionErrors()
                      The org.apache.struts.action.ActionErrors object, for this request.
             ActionForm getActionForm()
                       
             ActionFormBeans getActionFormBeans()
                      The org.apache.struts.action.ActionFormBeans collection for this application.
             ActionForward getActionForward(java.lang.String name)
                      Return the forwarding associated with the specified logical name, if any; otherwise return null.
             ActionForwards getActionForwards()
                      The org.apache.struts.action.ActionForwards collection for this application.
             ActionMapping getActionMapping(java.lang.String path)
                      Return the mapping associated with the specified request path, if any; otherwise return null.
             java.lang.String getActionMappingName(java.lang.String action)
                      Return the form action converted into an action mapping path.
             ActionMappings getActionMappings()
                      The context attributes key under which our org.apache.struts.action.ActionMappings collection is normally stored, unless overridden when initializing our ActionServlet.
             java.lang.String getActionMappingURL(java.lang.String action)
                      Return the form action converted into a server-relative URL.
             ActionMessages getActionMessages()
                      The org.apache.struts.action.ActionFormBeans collection for this application.
             java.lang.String getBaseRef()
                      Renders the reference for a HTML element
             javax.sql.DataSource getDataSource()
                       
             java.lang.String getEncodeURL(java.lang.String url)
                      Return the url encoded to maintain the user session, if any.
             java.lang.String getErrorOutput()
                      Returns the errors.header, any errors, and the errors.footer.
             java.lang.String getErrorOutput(java.lang.String property)
                      Returns the errors.header, any errors, and the errors.footer.
             java.util.Iterator getErrors()
                      Return the error messages
             java.util.Iterator getErrors(java.lang.String property)
                      Return an ActionError for a property
             boolean getErrorsEmpty()
                      Return true if there are no errors queued
             int getErrorSize()
                      Return the number of error messages.
             int getErrorSize(java.lang.String property)
                      Return the number of error messages.
             java.lang.Throwable getException()
                      The runtime JspException that may be been thrown by a Struts tag extension, or compatible presentation extension, and placed in the request.
             ActionFormBean getFormBean(java.lang.String name)
                      Return the form bean definition associated with the specified logical name, if any; otherwise return null.
             java.lang.String getLink(java.lang.String name)
                      Return the path for the specified forward, otherwise return null.
             java.util.Locale getLocale()
                      The java.util.Locale for the user, if any.
             ActionMapping getMapping()
                      The org.apache.struts.ActionMapping instance for this request.
             java.lang.String getMessage(java.lang.String key)
                      Return the localized message for the specified key, otherwise return null.
             java.lang.String getMessage(java.lang.String key, java.lang.Object[] args)
                      Look up and return a message string, based on the specified parameters.
             MessageResources getMessageResources()
                      The application resources for this application.
             MultipartRequestWrapper getMultipartRequestWrapper()
                      The multipart object for this request.
             java.lang.String getOrigRef()
                      Renders the reference for a HTML element
             java.lang.String getServletMapping()
                      The path-mapped pattern (/action/*) or extension mapped pattern ((*.do) used to determine our Action URIs in this application.
             java.lang.String getToken()
                      The transaction token stored in this session, if it is used.
             boolean isMessage(java.lang.String key)
                      Return true if a message string for the specified message key is present for the user's Locale.
             

            Method Detail

            getDataSource

            public javax.sql.DataSource getDataSource()

            getActionMessages

            public ActionMessages getActionMessages()
            The org.apache.struts.action.ActionFormBeans collection for this application.


            getActionFormBeans

            public ActionFormBeans getActionFormBeans()
            The org.apache.struts.action.ActionFormBeans collection for this application.


            getActionForwards

            public ActionForwards getActionForwards()
            The org.apache.struts.action.ActionForwards collection for this application.


            getActionMappings

            public ActionMappings getActionMappings()
            The context attributes key under which our org.apache.struts.action.ActionMappings collection is normally stored, unless overridden when initializing our ActionServlet.


            getMessageResources

            public MessageResources getMessageResources()
            The application resources for this application.


            getServletMapping

            public java.lang.String getServletMapping()
            The path-mapped pattern (/action/*) or extension mapped pattern ((*.do) used to determine our Action URIs in this application.


            getLocale

            public java.util.Locale getLocale()
            The java.util.Locale for the user, if any. If a default locale object is not in the user's session, the system default locale is returned. If used, the user locale is typically set during login processing under the key Globals.LOCALE_KEY.


            getToken

            public java.lang.String getToken()
            The transaction token stored in this session, if it is used.


            getActionErrors

            public ActionErrors getActionErrors()
            The org.apache.struts.action.ActionErrors object, for this request.


            getException

            public java.lang.Throwable getException()
            The runtime JspException that may be been thrown by a Struts tag extension, or compatible presentation extension, and placed in the request.


            getMultipartRequestWrapper

            public MultipartRequestWrapper getMultipartRequestWrapper()
            The multipart object for this request.


            getMapping

            public ActionMapping getMapping()
            The org.apache.struts.ActionMapping instance for this request.


            isMessage

            public boolean isMessage(java.lang.String key)
            Return true if a message string for the specified message key is present for the user's Locale.

            Parameters:
            key - Message key

            getActionForm

            public ActionForm getActionForm()

            getFormBean

            public ActionFormBean getFormBean(java.lang.String name)
            Return the form bean definition associated with the specified logical name, if any; otherwise return null.

            Parameters:
            name - Logical name of the requested form bean definition

            getActionForward

            public ActionForward getActionForward(java.lang.String name)
            Return the forwarding associated with the specified logical name, if any; otherwise return null.

            Parameters:
            name - Logical name of the requested forwarding

            getActionMapping

            public ActionMapping getActionMapping(java.lang.String path)
            Return the mapping associated with the specified request path, if any; otherwise return null.

            Parameters:
            path - Request path for which a mapping is requested

            getActionMappingName

            public java.lang.String getActionMappingName(java.lang.String action)
            Return the form action converted into an action mapping path. The value of the action property is manipulated as follows in computing the name of the requested mapping:
            • Any filename extension is removed (on the theory that extension mapping is being used to select the controller servlet).
            • If the resulting value does not start with a slash, then a slash is prepended.
            :FIXME: Bad assumption =:o)


            getActionMappingURL

            public java.lang.String getActionMappingURL(java.lang.String action)
            Return the form action converted into a server-relative URL.


            getEncodeURL

            public java.lang.String getEncodeURL(java.lang.String url)
            Return the url encoded to maintain the user session, if any.


            getOrigRef

            public java.lang.String getOrigRef()
            Renders the reference for a HTML element


            getBaseRef

            public java.lang.String getBaseRef()
            Renders the reference for a HTML element


            getLink

            public java.lang.String getLink(java.lang.String name)
            Return the path for the specified forward, otherwise return null.

            Parameters:
            name - Name given to local or global forward.

            getMessage

            public java.lang.String getMessage(java.lang.String key)
            Return the localized message for the specified key, otherwise return null.

            Parameters:
            key - Message key

            getMessage

            public java.lang.String getMessage(java.lang.String key,
                                               java.lang.Object[] args)
            Look up and return a message string, based on the specified parameters.

            Parameters:
            key - Message key to be looked up and returned
            args - Replacement parameters for this message

            getAction

            public java.lang.String getAction(java.lang.String path)
            Return the URL for the specified ActionMapping, otherwise return null.

            Parameters:
            path - Name given to local or global forward.

            getErrorSize

            public int getErrorSize()
            Return the number of error messages.


            getErrorsEmpty

            public boolean getErrorsEmpty()
            Return true if there are no errors queued


            getErrors

            public java.util.Iterator getErrors()
            Return the error messages


            getErrorOutput

            public java.lang.String getErrorOutput()
            Returns the errors.header, any errors, and the errors.footer.


            getErrorSize

            public int getErrorSize(java.lang.String property)
            Return the number of error messages.

            Parameters:
            property - Property name

            getErrorOutput

            public java.lang.String getErrorOutput(java.lang.String property)
            Returns the errors.header, any errors, and the errors.footer.

            Parameters:
            property - Property name

            getErrors

            public java.util.Iterator getErrors(java.lang.String property)
            Return an ActionError for a property

            Parameters:
            property - Property name


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/ConfigRuleSet.html0000644000175000017500000003006310404045204030211 0ustar arnaudarnaud00000000000000 ConfigRuleSet (Apache Struts API Documentation)

            org.apache.struts.config
            Class ConfigRuleSet

            java.lang.Object
              |
              +--org.apache.commons.digester.RuleSetBase
                    |
                    +--org.apache.struts.config.ConfigRuleSet
            
            All Implemented Interfaces:
            org.apache.commons.digester.RuleSet

            public class ConfigRuleSet
            extends org.apache.commons.digester.RuleSetBase

            The set of Digester rules required to parse a Struts configuration file (struts-config.xml).

            Since:
            Struts 1.1
            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
            Author:
            Craig R. McClanahan

            Field Summary
             
            Fields inherited from class org.apache.commons.digester.RuleSetBase
            namespaceURI
             
            Constructor Summary
            ConfigRuleSet()
                       
             
            Method Summary
             void addRuleInstances(org.apache.commons.digester.Digester digester)
                      Add the set of Rule instances defined in this RuleSet to the specified Digester instance, associating them with our namespace URI (if any).
             
            Methods inherited from class org.apache.commons.digester.RuleSetBase
            getNamespaceURI
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
             

            Constructor Detail

            ConfigRuleSet

            public ConfigRuleSet()
            Method Detail

            addRuleInstances

            public void addRuleInstances(org.apache.commons.digester.Digester digester)

            Add the set of Rule instances defined in this RuleSet to the specified Digester instance, associating them with our namespace URI (if any). This method should only be called by a Digester instance. These rules assume that an instance of org.apache.struts.config.ModuleConfig is pushed onto the evaluation stack before parsing begins.

            Specified by:
            addRuleInstances in interface org.apache.commons.digester.RuleSet
            Specified by:
            addRuleInstances in class org.apache.commons.digester.RuleSetBase
            Parameters:
            digester - Digester instance to which the new Rule instances should be added.


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/ControllerConfig.html0000644000175000017500000011404210404045212030750 0ustar arnaudarnaud00000000000000 ControllerConfig (Apache Struts API Documentation)

            org.apache.struts.config
            Class ControllerConfig

            java.lang.Object
              |
              +--org.apache.struts.config.ControllerConfig
            
            All Implemented Interfaces:
            java.io.Serializable

            public class ControllerConfig
            extends java.lang.Object
            implements java.io.Serializable

            A JavaBean representing the configuration information of a <controller> element in a Struts configuration file.

            Since:
            Struts 1.1
            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  int bufferSize
                      The input buffer size for file uploads.
            protected  boolean configured
                      Has this component been completely configured?
            protected  java.lang.String contentType
                      The content type and character encoding to be set on each response.
            protected  int debug
                      Deprecated. Configure the logging detail level in your underlying logging implemenation
            protected  java.lang.String forwardPattern
                      The replacement pattern used to determine a context-relative URL from a ForwardConfig element.
            protected  boolean inputForward
                      Should the input property of ActionConfig instances associated with this module be treated as the name of a corresponding ForwardConfig.
            protected  boolean locale
                      Should we store a Locale object in the user's session if needed?
            protected  java.lang.String maxFileSize
                      The maximum file size to process for file uploads.
            protected  java.lang.String memFileSize
                      The maximum file size to retain in memory.
            protected  java.lang.String multipartClass
                      The fully qualified Java class name of the MultipartRequestHandler class to be used.
            protected  boolean nocache
                      Should we set no-cache HTTP headers on each response?
            protected  java.lang.String pagePattern
                      The replacement pattern used to determine a context-relative URL from the page attribute of Struts tags and configuration properties.
            protected  java.lang.String processorClass
                      The fully qualified class name of the RequestProcessor implementation class to be used for this module.
            protected  java.lang.String tempDir
                      The temporary working directory to use for file uploads.
             
            Constructor Summary
            ControllerConfig()
                       
             
            Method Summary
             void freeze()
                      Freeze the configuration of this component.
             int getBufferSize()
                       
             java.lang.String getContentType()
                       
             int getDebug()
                       
             java.lang.String getForwardPattern()
                       
             boolean getInputForward()
                       
             boolean getLocale()
                       
             java.lang.String getMaxFileSize()
                       
             java.lang.String getMemFileSize()
                       
             java.lang.String getMultipartClass()
                       
             boolean getNocache()
                       
             java.lang.String getPagePattern()
                       
             java.lang.String getProcessorClass()
                       
             java.lang.String getTempDir()
                       
             void setBufferSize(int bufferSize)
                       
             void setContentType(java.lang.String contentType)
                       
             void setDebug(int debug)
                       
             void setForwardPattern(java.lang.String forwardPattern)
                       
             void setInputForward(boolean inputForward)
                       
             void setLocale(boolean locale)
                       
             void setMaxFileSize(java.lang.String maxFileSize)
                       
             void setMemFileSize(java.lang.String memFileSize)
                       
             void setMultipartClass(java.lang.String multipartClass)
                       
             void setNocache(boolean nocache)
                       
             void setPagePattern(java.lang.String pagePattern)
                       
             void setProcessorClass(java.lang.String processorClass)
                       
             void setTempDir(java.lang.String tempDir)
                       
             java.lang.String toString()
                      Return a String representation of this object.
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
             

            Field Detail

            configured

            protected boolean configured
            Has this component been completely configured?


            bufferSize

            protected int bufferSize
            The input buffer size for file uploads.


            contentType

            protected java.lang.String contentType
            The content type and character encoding to be set on each response.


            debug

            protected int debug
            Deprecated. Configure the logging detail level in your underlying logging implemenation

            The debugging detail level that determines logging verbosity.


            forwardPattern

            protected java.lang.String forwardPattern

            The replacement pattern used to determine a context-relative URL from a ForwardConfig element. The pattern may consist of any combination of the following markers and characters:

            • $M - Replaced by the module prefix for the current module.
            • $P - Replaced by the path property of a ForwardConfig instance.
            • $$ - Renders a literal dollar sign ("$") character in the resulting URL.
            • A dollar sign followed by any other character is reserved for future use, and both characters are silently swallowed.
            • All other characters in the pattern are passed through unchanged.

            If this property is set to null, a default pattern of $M$P is utilized, which is backwards compatible with the hard coded functionality in prior versions.


            inputForward

            protected boolean inputForward

            Should the input property of ActionConfig instances associated with this module be treated as the name of a corresponding ForwardConfig. A false value treats them as a module-relative path (consistent with the hard coded behavior of earlier versions of Struts.

            Since:
            Struts 1.1

            locale

            protected boolean locale
            Should we store a Locale object in the user's session if needed?


            maxFileSize

            protected java.lang.String maxFileSize
            The maximum file size to process for file uploads.


            memFileSize

            protected java.lang.String memFileSize
            The maximum file size to retain in memory.


            multipartClass

            protected java.lang.String multipartClass
            The fully qualified Java class name of the MultipartRequestHandler class to be used.


            nocache

            protected boolean nocache
            Should we set no-cache HTTP headers on each response?


            pagePattern

            protected java.lang.String pagePattern

            The replacement pattern used to determine a context-relative URL from the page attribute of Struts tags and configuration properties. The pattern may consist of any combination of the following markers and characters:

            • $M - Replaced by the module prefix for the current module.
            • $P - Replaced by the page attribute value being evaluated.
            • $$ - Renders a literal dollar sign ("$") character in the resulting URL.
            • A dollar sign followed by any other character is reserved for future use, and both characters are silently swallowed.
            • All other characters in the pattern are passed through unchanged.

            If this property is set to null, a default pattern of $M$P is utilized, which is backwards compatible with the hard coded functionality in prior versions.


            processorClass

            protected java.lang.String processorClass
            The fully qualified class name of the RequestProcessor implementation class to be used for this module.


            tempDir

            protected java.lang.String tempDir
            The temporary working directory to use for file uploads.

            Constructor Detail

            ControllerConfig

            public ControllerConfig()
            Method Detail

            getBufferSize

            public int getBufferSize()

            setBufferSize

            public void setBufferSize(int bufferSize)

            getContentType

            public java.lang.String getContentType()

            setContentType

            public void setContentType(java.lang.String contentType)

            getDebug

            public int getDebug()

            setDebug

            public void setDebug(int debug)

            getForwardPattern

            public java.lang.String getForwardPattern()

            setForwardPattern

            public void setForwardPattern(java.lang.String forwardPattern)

            getInputForward

            public boolean getInputForward()

            setInputForward

            public void setInputForward(boolean inputForward)

            getLocale

            public boolean getLocale()

            setLocale

            public void setLocale(boolean locale)

            getMaxFileSize

            public java.lang.String getMaxFileSize()

            setMaxFileSize

            public void setMaxFileSize(java.lang.String maxFileSize)

            getMemFileSize

            public java.lang.String getMemFileSize()

            setMemFileSize

            public void setMemFileSize(java.lang.String memFileSize)

            getMultipartClass

            public java.lang.String getMultipartClass()

            setMultipartClass

            public void setMultipartClass(java.lang.String multipartClass)

            getNocache

            public boolean getNocache()

            setNocache

            public void setNocache(boolean nocache)

            getPagePattern

            public java.lang.String getPagePattern()

            setPagePattern

            public void setPagePattern(java.lang.String pagePattern)

            getProcessorClass

            public java.lang.String getProcessorClass()

            setProcessorClass

            public void setProcessorClass(java.lang.String processorClass)

            getTempDir

            public java.lang.String getTempDir()

            setTempDir

            public void setTempDir(java.lang.String tempDir)

            freeze

            public void freeze()
            Freeze the configuration of this component.


            toString

            public java.lang.String toString()
            Return a String representation of this object.

            Overrides:
            toString in class java.lang.Object


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/DataSourceConfig.html0000644000175000017500000004335210404045212030664 0ustar arnaudarnaud00000000000000 DataSourceConfig (Apache Struts API Documentation)

            org.apache.struts.config
            Class DataSourceConfig

            java.lang.Object
              |
              +--org.apache.struts.config.DataSourceConfig
            
            All Implemented Interfaces:
            java.io.Serializable

            public class DataSourceConfig
            extends java.lang.Object
            implements java.io.Serializable

            A JavaBean representing the configuration information of a <data-source> element from a Struts configuration file.

            WARNING - The properties of this configuration bean are recognized by the default data source implementation, but some or all of them may be ignored by custom data source implementations.

            Since:
            Struts 1.1
            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  boolean configured
                      Has this component been completely configured?
            protected  java.lang.String key
                      The servlet context attribute key under which this data source is stored and made available.
            protected  java.util.HashMap properties
                      The custom configuration properties for this data source implementation.
            protected  java.lang.String type
                      The fully qualified class name of the javax.sql.DataSource implementation class.
             
            Constructor Summary
            DataSourceConfig()
                       
             
            Method Summary
             void addProperty(java.lang.String name, java.lang.String value)
                      Add a new custom configuration property.
             void freeze()
                      Freeze the configuration of this data source.
             java.lang.String getKey()
                       
             java.util.Map getProperties()
                       
             java.lang.String getType()
                       
             void setKey(java.lang.String key)
                       
             void setType(java.lang.String type)
                       
             java.lang.String toString()
                      Return a String representation of this object.
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
             

            Field Detail

            configured

            protected boolean configured
            Has this component been completely configured?


            key

            protected java.lang.String key
            The servlet context attribute key under which this data source is stored and made available.


            properties

            protected java.util.HashMap properties
            The custom configuration properties for this data source implementation.


            type

            protected java.lang.String type
            The fully qualified class name of the javax.sql.DataSource implementation class.

            Constructor Detail

            DataSourceConfig

            public DataSourceConfig()
            Method Detail

            getKey

            public java.lang.String getKey()

            setKey

            public void setKey(java.lang.String key)

            getProperties

            public java.util.Map getProperties()

            getType

            public java.lang.String getType()

            setType

            public void setType(java.lang.String type)

            addProperty

            public void addProperty(java.lang.String name,
                                    java.lang.String value)
            Add a new custom configuration property.

            Parameters:
            name - Custom property name
            value - Custom property value

            freeze

            public void freeze()
            Freeze the configuration of this data source.


            toString

            public java.lang.String toString()
            Return a String representation of this object.

            Overrides:
            toString in class java.lang.Object


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/ExceptionConfig.html0000644000175000017500000005553310404045250030576 0ustar arnaudarnaud00000000000000 ExceptionConfig (Apache Struts API Documentation)

            org.apache.struts.config
            Class ExceptionConfig

            java.lang.Object
              |
              +--org.apache.struts.config.ExceptionConfig
            
            All Implemented Interfaces:
            java.io.Serializable
            Direct Known Subclasses:
            ActionException

            public class ExceptionConfig
            extends java.lang.Object
            implements java.io.Serializable

            A JavaBean representing the configuration information of an <exception> element from a Struts configuration file.

            Since:
            Struts 1.1
            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  java.lang.String bundle
                      The servlet context attribute under which the message resources bundle to be used for this exception is located.
            protected  boolean configured
                      Has this component been completely configured?
            protected  java.lang.String handler
                      The fully qualified Java class name of the exception handler class which should be instantiated to handle this exception.
            protected  java.lang.String key
                      The message resources key specifying the error message associated with this exception.
            protected  java.lang.String path
                      The module-relative path of the resource to forward to if this exception occurs during an Action.
            protected  java.lang.String scope
                      The scope in which we should expose the ActionError for this exception handler.
            protected  java.lang.String type
                      The fully qualified Java class name of the exception that is to be handled by this handler.
             
            Constructor Summary
            ExceptionConfig()
                       
             
            Method Summary
             void freeze()
                      Freeze the configuration of this component.
             java.lang.String getBundle()
                       
             java.lang.String getHandler()
                       
             java.lang.String getKey()
                       
             java.lang.String getPath()
                       
             java.lang.String getScope()
                       
             java.lang.String getType()
                       
             void setBundle(java.lang.String bundle)
                       
             void setHandler(java.lang.String handler)
                       
             void setKey(java.lang.String key)
                       
             void setPath(java.lang.String path)
                       
             void setScope(java.lang.String scope)
                       
             void setType(java.lang.String type)
                       
             java.lang.String toString()
                      Return a String representation of this object.
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
             

            Field Detail

            configured

            protected boolean configured
            Has this component been completely configured?


            bundle

            protected java.lang.String bundle
            The servlet context attribute under which the message resources bundle to be used for this exception is located. If not set, the default message resources for the current module is assumed.


            handler

            protected java.lang.String handler
            The fully qualified Java class name of the exception handler class which should be instantiated to handle this exception.


            key

            protected java.lang.String key
            The message resources key specifying the error message associated with this exception.


            path

            protected java.lang.String path
            The module-relative path of the resource to forward to if this exception occurs during an Action.


            scope

            protected java.lang.String scope
            The scope in which we should expose the ActionError for this exception handler.


            type

            protected java.lang.String type
            The fully qualified Java class name of the exception that is to be handled by this handler.

            Constructor Detail

            ExceptionConfig

            public ExceptionConfig()
            Method Detail

            getBundle

            public java.lang.String getBundle()

            setBundle

            public void setBundle(java.lang.String bundle)

            getHandler

            public java.lang.String getHandler()

            setHandler

            public void setHandler(java.lang.String handler)

            getKey

            public java.lang.String getKey()

            setKey

            public void setKey(java.lang.String key)

            getPath

            public java.lang.String getPath()

            setPath

            public void setPath(java.lang.String path)

            getScope

            public java.lang.String getScope()

            setScope

            public void setScope(java.lang.String scope)

            getType

            public java.lang.String getType()

            setType

            public void setType(java.lang.String type)

            freeze

            public void freeze()
            Freeze the configuration of this component.


            toString

            public java.lang.String toString()
            Return a String representation of this object.

            Overrides:
            toString in class java.lang.Object


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/FormBeanConfig.html0000644000175000017500000006627510404045242030337 0ustar arnaudarnaud00000000000000 FormBeanConfig (Apache Struts API Documentation)

            org.apache.struts.config
            Class FormBeanConfig

            java.lang.Object
              |
              +--org.apache.struts.config.FormBeanConfig
            
            All Implemented Interfaces:
            java.io.Serializable
            Direct Known Subclasses:
            ActionFormBean

            public class FormBeanConfig
            extends java.lang.Object
            implements java.io.Serializable

            A JavaBean representing the configuration information of a <form-bean> element in a Struts configuration file.

            Since:
            Struts 1.1
            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  boolean configured
                      Has this component been completely configured?
            protected  boolean dynamic
                      Is the form bean class an instance of DynaActionForm with dynamic properties?
            protected  java.util.HashMap formProperties
                      The set of FormProperty elements defining dynamic form properties for this form bean, keyed by property name.
            protected  ModuleConfig moduleConfig
                      The ModuleConfig with which this form bean definition is associated.
            protected  java.lang.String name
                      The unique identifier of this form bean, which is used to reference this bean in ActionMapping instances as well as for the name of the request or session attribute under which the corresponding form bean instance is created or accessed.
            protected  java.lang.String type
                      The fully qualified Java class name of the implementation class to be used or generated.
             
            Constructor Summary
            FormBeanConfig()
                       
             
            Method Summary
             void addFormPropertyConfig(FormPropertyConfig config)
                      Add a new FormPropertyConfig instance to the set associated with this module.
             FormPropertyConfig findFormPropertyConfig(java.lang.String name)
                      Return the form property configuration for the specified property name, if any; otherwise return null.
             FormPropertyConfig[] findFormPropertyConfigs()
                      Return the form property configurations for this module.
            protected  java.lang.Class formBeanClass()
                      Return the Class instance for the form bean implementation configured by this FormBeanConfig instance.
             void freeze()
                      Freeze the configuration of this component.
             boolean getDynamic()
                       
             ModuleConfig getModuleConfig()
                      Return the ModuleConfig with which this form bean definition is associated.
             java.lang.String getName()
                       
             java.lang.String getType()
                       
             void removeFormPropertyConfig(FormPropertyConfig config)
                      Remove the specified form property configuration instance.
             void setDynamic(boolean dynamic)
                      Deprecated. The value to be returned by getDynamic() is now computed automatically in setType()
             void setModuleConfig(ModuleConfig moduleConfig)
                      Set the ModuleConfig with which this form bean definition is associated.
             void setName(java.lang.String name)
                       
             void setType(java.lang.String type)
                       
             java.lang.String toString()
                      Return a String representation of this object.
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
             

            Field Detail

            configured

            protected boolean configured
            Has this component been completely configured?


            formProperties

            protected java.util.HashMap formProperties
            The set of FormProperty elements defining dynamic form properties for this form bean, keyed by property name.


            dynamic

            protected boolean dynamic
            Is the form bean class an instance of DynaActionForm with dynamic properties?


            moduleConfig

            protected ModuleConfig moduleConfig
            The ModuleConfig with which this form bean definition is associated.


            name

            protected java.lang.String name
            The unique identifier of this form bean, which is used to reference this bean in ActionMapping instances as well as for the name of the request or session attribute under which the corresponding form bean instance is created or accessed.


            type

            protected java.lang.String type
            The fully qualified Java class name of the implementation class to be used or generated.

            Constructor Detail

            FormBeanConfig

            public FormBeanConfig()
            Method Detail

            getDynamic

            public boolean getDynamic()

            setDynamic

            public void setDynamic(boolean dynamic)
            Deprecated. The value to be returned by getDynamic() is now computed automatically in setType()


            getModuleConfig

            public ModuleConfig getModuleConfig()
            Return the ModuleConfig with which this form bean definition is associated.


            setModuleConfig

            public void setModuleConfig(ModuleConfig moduleConfig)
            Set the ModuleConfig with which this form bean definition is associated.

            Parameters:
            moduleConfig - The new ModuleConfig or null to disassociate this form bean configuration from any module

            getName

            public java.lang.String getName()

            setName

            public void setName(java.lang.String name)

            getType

            public java.lang.String getType()

            setType

            public void setType(java.lang.String type)

            addFormPropertyConfig

            public void addFormPropertyConfig(FormPropertyConfig config)
            Add a new FormPropertyConfig instance to the set associated with this module.

            Parameters:
            config - The new configuration instance to be added
            Throws:
            java.lang.IllegalArgumentException - if this property name has already been defined

            findFormPropertyConfig

            public FormPropertyConfig findFormPropertyConfig(java.lang.String name)
            Return the form property configuration for the specified property name, if any; otherwise return null.

            Parameters:
            name - Form property name to find a configuration for

            findFormPropertyConfigs

            public FormPropertyConfig[] findFormPropertyConfigs()
            Return the form property configurations for this module. If there are none, a zero-length array is returned.


            freeze

            public void freeze()
            Freeze the configuration of this component.


            removeFormPropertyConfig

            public void removeFormPropertyConfig(FormPropertyConfig config)
            Remove the specified form property configuration instance.

            Parameters:
            config - FormPropertyConfig instance to be removed

            toString

            public java.lang.String toString()
            Return a String representation of this object.

            Overrides:
            toString in class java.lang.Object

            formBeanClass

            protected java.lang.Class formBeanClass()
            Return the Class instance for the form bean implementation configured by this FormBeanConfig instance. This method uses the same algorithm as RequestUtils.applicationClass() but is reproduced to avoid a runtime dependence.



            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/FormPropertyConfig.html0000644000175000017500000006114210404045206031302 0ustar arnaudarnaud00000000000000 FormPropertyConfig (Apache Struts API Documentation)

            org.apache.struts.config
            Class FormPropertyConfig

            java.lang.Object
              |
              +--org.apache.struts.config.FormPropertyConfig
            
            All Implemented Interfaces:
            java.io.Serializable

            public class FormPropertyConfig
            extends java.lang.Object
            implements java.io.Serializable

            A JavaBean representing the configuration information of a <form-property> element in a Struts configuration file.

            Since:
            Struts 1.1
            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  boolean configured
                      Has this component been completely configured?
            protected  java.lang.String initial
                      String representation of the initial value for this property.
            protected  java.lang.String name
                      The JavaBean property name of the property described by this element.
            protected  int size
                      The size of the array to be created if this property is an array type and there is no specified initial value.
            protected  java.lang.String type
                      The fully qualified Java class name of the implementation class of this bean property, optionally followed by [] to indicate that the property is indexed.
             
            Constructor Summary
            FormPropertyConfig()
                      Standard no-arguments constructor for dynamic instantiation.
            FormPropertyConfig(java.lang.String name, java.lang.String type, java.lang.String initial)
                      Constructor that preconfigures the relevant properties.
            FormPropertyConfig(java.lang.String name, java.lang.String type, java.lang.String initial, int size)
                      Constructor that preconfigures the relevant properties.
             
            Method Summary
             void freeze()
                      Freeze the configuration of this component.
             java.lang.String getInitial()
                       
             java.lang.String getName()
                       
             int getSize()
                       
             java.lang.String getType()
                       
             java.lang.Class getTypeClass()
                      Return a Class corresponds to the value specified for the type property, taking into account the trailing "[]" for arrays (as well as the ability to specify primitive Java types).
             java.lang.Object initial()
                      Return an object representing the initial value of this property.
             void setInitial(java.lang.String initial)
                       
             void setName(java.lang.String name)
                       
             void setSize(int size)
                       
             void setType(java.lang.String type)
                       
             java.lang.String toString()
                      Return a String representation of this object.
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
             

            Field Detail

            configured

            protected boolean configured
            Has this component been completely configured?


            initial

            protected java.lang.String initial
            String representation of the initial value for this property.


            name

            protected java.lang.String name
            The JavaBean property name of the property described by this element.


            size

            protected int size

            The size of the array to be created if this property is an array type and there is no specified initial value. This value must be non-negative.

            Since:
            Struts 1.1

            type

            protected java.lang.String type
            The fully qualified Java class name of the implementation class of this bean property, optionally followed by [] to indicate that the property is indexed.

            Constructor Detail

            FormPropertyConfig

            public FormPropertyConfig()
            Standard no-arguments constructor for dynamic instantiation.


            FormPropertyConfig

            public FormPropertyConfig(java.lang.String name,
                                      java.lang.String type,
                                      java.lang.String initial)
            Constructor that preconfigures the relevant properties.

            Parameters:
            name - Name of this property
            type - Fully qualified class name of this property
            initial - Initial value of this property (if any)

            FormPropertyConfig

            public FormPropertyConfig(java.lang.String name,
                                      java.lang.String type,
                                      java.lang.String initial,
                                      int size)
            Constructor that preconfigures the relevant properties.

            Parameters:
            name - Name of this property
            type - Fully qualified class name of this property
            initial - Initial value of this property (if any)
            size - Size of the array to be created if this property is an array with no defined initial value
            Method Detail

            getInitial

            public java.lang.String getInitial()

            setInitial

            public void setInitial(java.lang.String initial)

            getName

            public java.lang.String getName()

            setName

            public void setName(java.lang.String name)

            getSize

            public int getSize()

            setSize

            public void setSize(int size)

            getType

            public java.lang.String getType()

            setType

            public void setType(java.lang.String type)

            getTypeClass

            public java.lang.Class getTypeClass()
            Return a Class corresponds to the value specified for the type property, taking into account the trailing "[]" for arrays (as well as the ability to specify primitive Java types).


            initial

            public java.lang.Object initial()

            Return an object representing the initial value of this property. This is calculated according to the following algorithm:

            • If the value you have specified for the type property represents an array (i.e. it ends with "[]"):
              • If you have specified a value for the initial property, ConvertUtils.convert() will be called to convert it into an instance of the specified array type.
              • If you have not specified a value for the initial property, an array of the length specified by the size property will be created. Each element of the array will be instantiated via the zero-args constructor on the specified class (if any). Otherwise, null will be returned.
            • If the value you have specified for the type property does not represent an array:
              • If you have specified a value for the initial property, ConvertUtils.convert() will be called to convert it into an object instance.
              • If you have not specified a value for the initial attribute, Struts will instantiate an instance via the zero-args constructor on the specified class (if any). Otherwise, null will be returned.


            freeze

            public void freeze()
            Freeze the configuration of this component.


            toString

            public java.lang.String toString()
            Return a String representation of this object.

            Overrides:
            toString in class java.lang.Object


            Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/ForwardConfig.html0000644000175000017500000005475710404045216030255 0ustar arnaudarnaud00000000000000 ForwardConfig (Apache Struts API Documentation)

            org.apache.struts.config
            Class ForwardConfig

            java.lang.Object
              |
              +--org.apache.struts.config.ForwardConfig
            
            All Implemented Interfaces:
            java.io.Serializable
            Direct Known Subclasses:
            ActionForward

            public class ForwardConfig
            extends java.lang.Object
            implements java.io.Serializable

            A JavaBean representing the configuration information of a <forward> element from a Struts configuration file.

            Since:
            Struts 1.1
            Version:
            $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
            Author:
            Craig R. McClanahan
            See Also:
            Serialized Form

            Field Summary
            protected  boolean configured
                      Has this component been completely configured?
            protected  boolean contextRelative
                      Should the value of the path property be considered context-relative if it starts with a slash (and therefore not prefixed with the module prefix?
            protected  java.lang.String name
                      The unique identifier of this forward, which is used to reference it in Action classes.
            protected  java.lang.String path
                      The URL to which this ForwardConfig entry points, which must start with a slash ("/") character.
            protected  boolean redirect
                      Should a redirect be used to transfer control to the specified path?
             
            Constructor Summary
            ForwardConfig()
                      Construct a new instance with default values.
            ForwardConfig(java.lang.String name, java.lang.String path, boolean redirect)
                      Construct a new instance with the specified values.
            ForwardConfig(java.lang.String name, java.lang.String path, boolean redirect, boolean contextRelative)
                      Construct a new instance with the specified values.
             
            Method Summary
             void freeze()
                      Freeze the configuration of this component.
             boolean getContextRelative()
                       
             java.lang.String getName()
                       
             java.lang.String getPath()
                       
             boolean getRedirect()
                       
             void setContextRelative(boolean contextRelative)
                       
             void setName(java.lang.String name)
                       
             void setPath(java.lang.String path)
                       
             void setRedirect(boolean redirect)
                       
             java.lang.String toString()
                      Return a String representation of this object.
             
            Methods inherited from class java.lang.Object
            clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
             

            Field Detail

            configured

            protected boolean configured
            Has this component been completely configured?


            contextRelative

            protected boolean contextRelative
            Should the value of the path property be considered context-relative if it starts with a slash (and therefore not prefixed with the module prefix?


            name

            protected java.lang.String name
            The unique identifier of this forward, which is used to reference it in Action classes.


            path

            protected java.lang.String path

            The URL to which this ForwardConfig entry points, which must start with a slash ("/") character. It is interpreted according to the following rules:

          7. If contextRelative property is true, the path is considered to be context-relative within the current web application (even if we are in a named module). It will be prefixed by the context path to create a server-relative URL.
          8. If the contextRelative property is false, the path is considered to be the module-relative portion of the URL. It will be used as the replacement for the $P marker in the forwardPattern property defined on the ControllerConfig element for our current module. For the default forwardPattern value of $C$M$P, the resulting server-relative URL will be the concatenation of the context path, the module prefix, and the path from this ForwardConfig.


    redirect

    protected boolean redirect
    Should a redirect be used to transfer control to the specified path?

    Constructor Detail

    ForwardConfig

    public ForwardConfig()
    Construct a new instance with default values.


    ForwardConfig

    public ForwardConfig(java.lang.String name,
                         java.lang.String path,
                         boolean redirect)
    Construct a new instance with the specified values.

    Parameters:
    name - Name of this forward
    path - Path to which control should be forwarded or redirected
    redirect - Should we do a redirect?

    ForwardConfig

    public ForwardConfig(java.lang.String name,
                         java.lang.String path,
                         boolean redirect,
                         boolean contextRelative)
    Construct a new instance with the specified values.

    Parameters:
    name - Name of this forward
    path - Path to which control should be forwarded or redirected
    redirect - Should we do a redirect?
    contextRelative - Is this path context relative?
    Method Detail

    getContextRelative

    public boolean getContextRelative()

    setContextRelative

    public void setContextRelative(boolean contextRelative)

    getName

    public java.lang.String getName()

    setName

    public void setName(java.lang.String name)

    getPath

    public java.lang.String getPath()

    setPath

    public void setPath(java.lang.String path)

    getRedirect

    public boolean getRedirect()

    setRedirect

    public void setRedirect(boolean redirect)

    freeze

    public void freeze()
    Freeze the configuration of this component.


    toString

    public java.lang.String toString()
    Return a String representation of this object.

    Overrides:
    toString in class java.lang.Object


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/MessageResourcesConfig.html0000644000175000017500000004626510404045220032116 0ustar arnaudarnaud00000000000000 MessageResourcesConfig (Apache Struts API Documentation)

    org.apache.struts.config
    Class MessageResourcesConfig

    java.lang.Object
      |
      +--org.apache.struts.config.MessageResourcesConfig
    
    All Implemented Interfaces:
    java.io.Serializable

    public class MessageResourcesConfig
    extends java.lang.Object
    implements java.io.Serializable

    A JavaBean representing the configuration information of a <message-resources> element in a Struts configuration file.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
    protected  boolean configured
              Has this component been completely configured?
    protected  java.lang.String factory
              Fully qualified Java class name of the MessageResourcesFactory class we should use.
    protected  java.lang.String key
              The servlet context attributes key under which this MessageResources instance is stored.
    protected  boolean nullValue
              Should we return null for unknown message keys?
    protected  java.lang.String parameter
              Parameter that is passed to the createResources() method of our MessageResourcesFactory implementation.
     
    Constructor Summary
    MessageResourcesConfig()
               
     
    Method Summary
     void freeze()
              Freeze the configuration of this component.
     java.lang.String getFactory()
               
     java.lang.String getKey()
               
     boolean getNull()
               
     java.lang.String getParameter()
               
     void setFactory(java.lang.String factory)
               
     void setKey(java.lang.String key)
               
     void setNull(boolean nullValue)
               
     void setParameter(java.lang.String parameter)
               
     java.lang.String toString()
              Return a String representation of this object.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
     

    Field Detail

    configured

    protected boolean configured
    Has this component been completely configured?


    factory

    protected java.lang.String factory
    Fully qualified Java class name of the MessageResourcesFactory class we should use.


    key

    protected java.lang.String key
    The servlet context attributes key under which this MessageResources instance is stored.


    nullValue

    protected boolean nullValue
    Should we return null for unknown message keys?


    parameter

    protected java.lang.String parameter
    Parameter that is passed to the createResources() method of our MessageResourcesFactory implementation.

    Constructor Detail

    MessageResourcesConfig

    public MessageResourcesConfig()
    Method Detail

    getFactory

    public java.lang.String getFactory()

    setFactory

    public void setFactory(java.lang.String factory)

    getKey

    public java.lang.String getKey()

    setKey

    public void setKey(java.lang.String key)

    getNull

    public boolean getNull()

    setNull

    public void setNull(boolean nullValue)

    getParameter

    public java.lang.String getParameter()

    setParameter

    public void setParameter(java.lang.String parameter)

    freeze

    public void freeze()
    Freeze the configuration of this component.


    toString

    public java.lang.String toString()
    Return a String representation of this object.

    Overrides:
    toString in class java.lang.Object


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/ModuleConfig.html0000644000175000017500000012450310404045246030064 0ustar arnaudarnaud00000000000000 ModuleConfig (Apache Struts API Documentation)

    org.apache.struts.config
    Interface ModuleConfig

    All Known Implementing Classes:
    ModuleConfigImpl

    public interface ModuleConfig

    The collection of static configuration information that describes a Struts-based module. Multiple modules are identified by a prefix at the beginning of the context relative portion of the request URI. If no module prefix can be matched, the default configuration (with a prefix equal to a zero-length string) is selected, which is elegantly backwards compatible with the previous Struts behavior that only supported one module.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
    Author:
    Rob Leland

    Method Summary
     void addActionConfig(ActionConfig config)
              Add a new ActionConfig instance to the set associated with this module.
     void addDataSourceConfig(DataSourceConfig config)
              Add a new DataSourceConfig instance to the set associated with this module.
     void addExceptionConfig(ExceptionConfig config)
              Add a new ExceptionConfig instance to the set associated with this module.
     void addFormBeanConfig(FormBeanConfig config)
              Add a new FormBeanConfig instance to the set associated with this module.
     void addForwardConfig(ForwardConfig config)
              Add a new ForwardConfig instance to the set of global forwards associated with this module.
     void addMessageResourcesConfig(MessageResourcesConfig config)
              Add a new MessageResourcesConfig instance to the set associated with this module.
     void addPlugInConfig(PlugInConfig plugInConfig)
              Add a newly configured PlugInConfig instance to the set of plug-in Actions for this module.
     ActionConfig findActionConfig(java.lang.String path)
              Return the action configuration for the specified path, if any; otherwise return null.
     ActionConfig[] findActionConfigs()
              Return the action configurations for this module.
     DataSourceConfig findDataSourceConfig(java.lang.String key)
              Return the data source configuration for the specified key, if any; otherwise return null.
     DataSourceConfig[] findDataSourceConfigs()
              Return the data source configurations for this module.
     ExceptionConfig findExceptionConfig(java.lang.String type)
              Return the exception configuration for the specified type, if any; otherwise return null.
     ExceptionConfig[] findExceptionConfigs()
              Return the exception configurations for this module.
     FormBeanConfig findFormBeanConfig(java.lang.String name)
              Return the form bean configuration for the specified key, if any; otherwise return null.
     FormBeanConfig[] findFormBeanConfigs()
              Return the form bean configurations for this module.
     ForwardConfig findForwardConfig(java.lang.String name)
              Return the forward configuration for the specified key, if any; otherwise return null.
     ForwardConfig[] findForwardConfigs()
              Return the form bean configurations for this module.
     MessageResourcesConfig findMessageResourcesConfig(java.lang.String key)
              Return the message resources configuration for the specified key, if any; otherwise return null.
     MessageResourcesConfig[] findMessageResourcesConfigs()
              Return the message resources configurations for this module.
     PlugInConfig[] findPlugInConfigs()
              Return the configured plug-in actions for this module.
     void freeze()
              Freeze the configuration of this module.
     java.lang.String getActionMappingClass()
              The default class name to be used when creating action mapping instances.
     boolean getConfigured()
              Has this module been completely configured yet.
     ControllerConfig getControllerConfig()
              The controller configuration object for this module.
     java.lang.String getPrefix()
              The prefix of the context-relative portion of the request URI, used to select this configuration versus others supported by the controller servlet.
     void removeActionConfig(ActionConfig config)
              Remove the specified action configuration instance.
     void removeDataSourceConfig(DataSourceConfig config)
              Remove the specified data source configuration instance.
     void removeExceptionConfig(ExceptionConfig config)
              Remove the specified exception configuration instance.
     void removeFormBeanConfig(FormBeanConfig config)
              Remove the specified form bean configuration instance.
     void removeForwardConfig(ForwardConfig config)
              Remove the specified forward configuration instance.
     void removeMessageResourcesConfig(MessageResourcesConfig config)
              Remove the specified message resources configuration instance.
     void setActionMappingClass(java.lang.String actionMappingClass)
              The default class name to be used when creating action mapping instances.
     void setControllerConfig(ControllerConfig cc)
              The controller configuration object for this module.
     void setPrefix(java.lang.String prefix)
              The prefix of the context-relative portion of the request URI, used to select this configuration versus others supported by the controller servlet.
     

    Method Detail

    getConfigured

    public boolean getConfigured()
    Has this module been completely configured yet. Once this flag has been set, any attempt to modify the configuration will return an IllegalStateException.


    getControllerConfig

    public ControllerConfig getControllerConfig()
    The controller configuration object for this module.


    setControllerConfig

    public void setControllerConfig(ControllerConfig cc)
    The controller configuration object for this module.

    Parameters:
    cc - The controller configuration object for this module.

    getPrefix

    public java.lang.String getPrefix()
    The prefix of the context-relative portion of the request URI, used to select this configuration versus others supported by the controller servlet. A configuration with a prefix of a zero-length String is the default configuration for this web module.


    setPrefix

    public void setPrefix(java.lang.String prefix)
    The prefix of the context-relative portion of the request URI, used to select this configuration versus others supported by the controller servlet. A configuration with a prefix of a zero-length String is the default configuration for this web module.

    Parameters:
    prefix - The prefix of the context-relative portion of the request URI.

    getActionMappingClass

    public java.lang.String getActionMappingClass()
    The default class name to be used when creating action mapping instances.


    setActionMappingClass

    public void setActionMappingClass(java.lang.String actionMappingClass)
    The default class name to be used when creating action mapping instances.

    Parameters:
    actionMappingClass - default class name to be used when creating action mapping instances.

    addActionConfig

    public void addActionConfig(ActionConfig config)
    Add a new ActionConfig instance to the set associated with this module.

    Parameters:
    config - The new configuration instance to be added
    Throws:
    java.lang.IllegalStateException - if this module configuration has been frozen

    addDataSourceConfig

    public void addDataSourceConfig(DataSourceConfig config)
    Add a new DataSourceConfig instance to the set associated with this module.

    Parameters:
    config - The new configuration instance to be added
    Throws:
    java.lang.IllegalStateException - if this module configuration has been frozen

    addExceptionConfig

    public void addExceptionConfig(ExceptionConfig config)
    Add a new ExceptionConfig instance to the set associated with this module.

    Parameters:
    config - The new configuration instance to be added
    Throws:
    java.lang.IllegalStateException - if this module configuration has been frozen

    addFormBeanConfig

    public void addFormBeanConfig(FormBeanConfig config)
    Add a new FormBeanConfig instance to the set associated with this module.

    Parameters:
    config - The new configuration instance to be added
    Throws:
    java.lang.IllegalStateException - if this module configuration has been frozen

    addForwardConfig

    public void addForwardConfig(ForwardConfig config)
    Add a new ForwardConfig instance to the set of global forwards associated with this module.

    Parameters:
    config - The new configuration instance to be added
    Throws:
    java.lang.IllegalStateException - if this module configuration has been frozen

    addMessageResourcesConfig

    public void addMessageResourcesConfig(MessageResourcesConfig config)
    Add a new MessageResourcesConfig instance to the set associated with this module.

    Parameters:
    config - The new configuration instance to be added
    Throws:
    java.lang.IllegalStateException - if this module configuration has been frozen

    addPlugInConfig

    public void addPlugInConfig(PlugInConfig plugInConfig)
    Add a newly configured PlugInConfig instance to the set of plug-in Actions for this module.

    Parameters:
    plugInConfig - The new configuration instance to be added

    findActionConfig

    public ActionConfig findActionConfig(java.lang.String path)
    Return the action configuration for the specified path, if any; otherwise return null.

    Parameters:
    path - Path of the action configuration to return

    findActionConfigs

    public ActionConfig[] findActionConfigs()
    Return the action configurations for this module. If there are none, a zero-length array is returned.


    findDataSourceConfig

    public DataSourceConfig findDataSourceConfig(java.lang.String key)
    Return the data source configuration for the specified key, if any; otherwise return null.

    Parameters:
    key - Key of the data source configuration to return

    findDataSourceConfigs

    public DataSourceConfig[] findDataSourceConfigs()
    Return the data source configurations for this module. If there are none, a zero-length array is returned.


    findExceptionConfig

    public ExceptionConfig findExceptionConfig(java.lang.String type)
    Return the exception configuration for the specified type, if any; otherwise return null.

    Parameters:
    type - Exception class name to find a configuration for

    findExceptionConfigs

    public ExceptionConfig[] findExceptionConfigs()
    Return the exception configurations for this module. If there are none, a zero-length array is returned.


    findFormBeanConfig

    public FormBeanConfig findFormBeanConfig(java.lang.String name)
    Return the form bean configuration for the specified key, if any; otherwise return null.

    Parameters:
    name - Name of the form bean configuration to return

    findFormBeanConfigs

    public FormBeanConfig[] findFormBeanConfigs()
    Return the form bean configurations for this module. If there are none, a zero-length array is returned.


    findForwardConfig

    public ForwardConfig findForwardConfig(java.lang.String name)
    Return the forward configuration for the specified key, if any; otherwise return null.

    Parameters:
    name - Name of the forward configuration to return

    findForwardConfigs

    public ForwardConfig[] findForwardConfigs()
    Return the form bean configurations for this module. If there are none, a zero-length array is returned.


    findMessageResourcesConfig

    public MessageResourcesConfig findMessageResourcesConfig(java.lang.String key)
    Return the message resources configuration for the specified key, if any; otherwise return null.

    Parameters:
    key - Key of the data source configuration to return

    findMessageResourcesConfigs

    public MessageResourcesConfig[] findMessageResourcesConfigs()
    Return the message resources configurations for this module. If there are none, a zero-length array is returned.


    findPlugInConfigs

    public PlugInConfig[] findPlugInConfigs()
    Return the configured plug-in actions for this module. If there are none, a zero-length array is returned.


    freeze

    public void freeze()
    Freeze the configuration of this module. After this method returns, any attempt to modify the configuration will return an IllegalStateException.


    removeActionConfig

    public void removeActionConfig(ActionConfig config)
    Remove the specified action configuration instance.

    Parameters:
    config - ActionConfig instance to be removed
    Throws:
    java.lang.IllegalStateException - if this module configuration has been frozen

    removeExceptionConfig

    public void removeExceptionConfig(ExceptionConfig config)
    Remove the specified exception configuration instance.

    Parameters:
    config - ActionConfig instance to be removed
    Throws:
    java.lang.IllegalStateException - if this module configuration has been frozen

    removeDataSourceConfig

    public void removeDataSourceConfig(DataSourceConfig config)
    Remove the specified data source configuration instance.

    Parameters:
    config - DataSourceConfig instance to be removed
    Throws:
    java.lang.IllegalStateException - if this module configuration has been frozen

    removeFormBeanConfig

    public void removeFormBeanConfig(FormBeanConfig config)
    Remove the specified form bean configuration instance.

    Parameters:
    config - FormBeanConfig instance to be removed
    Throws:
    java.lang.IllegalStateException - if this module configuration has been frozen

    removeForwardConfig

    public void removeForwardConfig(ForwardConfig config)
    Remove the specified forward configuration instance.

    Parameters:
    config - ForwardConfig instance to be removed
    Throws:
    java.lang.IllegalStateException - if this module configuration has been frozen

    removeMessageResourcesConfig

    public void removeMessageResourcesConfig(MessageResourcesConfig config)
    Remove the specified message resources configuration instance.

    Parameters:
    config - MessageResourcesConfig instance to be removed
    Throws:
    java.lang.IllegalStateException - if this module configuration has been frozen


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/ModuleConfigFactory.html0000644000175000017500000004003310404045212031400 0ustar arnaudarnaud00000000000000 ModuleConfigFactory (Apache Struts API Documentation)

    org.apache.struts.config
    Class ModuleConfigFactory

    java.lang.Object
      |
      +--org.apache.struts.config.ModuleConfigFactory
    
    Direct Known Subclasses:
    DefaultModuleConfigFactory

    public abstract class ModuleConfigFactory
    extends java.lang.Object

    A factory interface for creating ModuleConfigs.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
    Author:
    Robert Leland
    See Also:
    ModuleConfig

    Field Summary
    protected static java.lang.Class clazz
              The Java class to be used for ModuleConfigFactory instances.
    protected static java.lang.String factoryClass
              The fully qualified class name to be used for ModuleConfigFactory instances.
    private static org.apache.commons.logging.Log LOG
              Commons Logging instance.
     
    Constructor Summary
    ModuleConfigFactory()
               
     
    Method Summary
    static ModuleConfigFactory createFactory()
              Create and return a ModuleConfigFactory instance of the appropriate class, which can be used to create customized ModuleConfig instances.
    abstract  ModuleConfig createModuleConfig(java.lang.String prefix)
              Create and return a newly instansiated ModuleConfig.
    static java.lang.String getFactoryClass()
              The fully qualified class name that is used for ModuleConfigFactory instances.
    static void setFactoryClass(java.lang.String factoryClass)
              Set the fully qualified class name that is used for ModuleConfigFactory instances.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    clazz

    protected static java.lang.Class clazz
    The Java class to be used for ModuleConfigFactory instances.


    LOG

    private static org.apache.commons.logging.Log LOG
    Commons Logging instance.


    factoryClass

    protected static java.lang.String factoryClass
    The fully qualified class name to be used for ModuleConfigFactory instances.

    Constructor Detail

    ModuleConfigFactory

    public ModuleConfigFactory()
    Method Detail

    createModuleConfig

    public abstract ModuleConfig createModuleConfig(java.lang.String prefix)
    Create and return a newly instansiated ModuleConfig. This method must be implemented by concrete subclasses.

    Parameters:
    prefix - Module prefix for Configuration

    getFactoryClass

    public static java.lang.String getFactoryClass()
    The fully qualified class name that is used for ModuleConfigFactory instances.

    Returns:
    class name that is used for ModuleConfigFactory instances

    setFactoryClass

    public static void setFactoryClass(java.lang.String factoryClass)
    Set the fully qualified class name that is used for ModuleConfigFactory instances.

    Parameters:
    factoryClass - name that is used for ModuleConfigFactory instances

    createFactory

    public static ModuleConfigFactory createFactory()
    Create and return a ModuleConfigFactory instance of the appropriate class, which can be used to create customized ModuleConfig instances. If no such factory can be created, return null instead.



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/PlugInConfig.html0000644000175000017500000003674410404045202030036 0ustar arnaudarnaud00000000000000 PlugInConfig (Apache Struts API Documentation)

    org.apache.struts.config
    Class PlugInConfig

    java.lang.Object
      |
      +--org.apache.struts.config.PlugInConfig
    
    All Implemented Interfaces:
    java.io.Serializable

    public class PlugInConfig
    extends java.lang.Object
    implements java.io.Serializable

    A JavaBean representing the configuration information of a <plug-in> element in a Struts configuration file.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String className
              The fully qualified Java class name of the PlugIn implementation class being configured.
    protected  boolean configured
              Has this component been completely configured?
    protected  java.util.Map properties
              A Map of the name-value pairs that will be used to configure the property values of a PlugIn instance.
     
    Constructor Summary
    PlugInConfig()
               
     
    Method Summary
     void addProperty(java.lang.String name, java.lang.String value)
              Add a new property name and value to the set that will be used to configure the PlugIn instance.
     void freeze()
              Freeze the configuration of this component.
     java.lang.String getClassName()
               
     java.util.Map getProperties()
              Return the properties that will be used to configure a PlugIn instance.
     void setClassName(java.lang.String className)
               
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    configured

    protected boolean configured
    Has this component been completely configured?


    properties

    protected java.util.Map properties
    A Map of the name-value pairs that will be used to configure the property values of a PlugIn instance.


    className

    protected java.lang.String className
    The fully qualified Java class name of the PlugIn implementation class being configured.

    Constructor Detail

    PlugInConfig

    public PlugInConfig()
    Method Detail

    getClassName

    public java.lang.String getClassName()

    setClassName

    public void setClassName(java.lang.String className)

    addProperty

    public void addProperty(java.lang.String name,
                            java.lang.String value)
    Add a new property name and value to the set that will be used to configure the PlugIn instance.

    Parameters:
    name - Property name
    value - Property value

    freeze

    public void freeze()
    Freeze the configuration of this component.


    getProperties

    public java.util.Map getProperties()
    Return the properties that will be used to configure a PlugIn instance.



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/PlugInSetPropertyRule.html0000644000175000017500000002622310404045224031754 0ustar arnaudarnaud00000000000000 PlugInSetPropertyRule (Apache Struts API Documentation)

    org.apache.struts.config
    Class PlugInSetPropertyRule

    java.lang.Object
      |
      +--org.apache.commons.digester.Rule
            |
            +--org.apache.struts.config.PlugInSetPropertyRule
    

    final class PlugInSetPropertyRule
    extends org.apache.commons.digester.Rule

    Class that records the name and value of a configuration property to be used in configuring a PlugIn instance when instantiated.


    Field Summary
     
    Fields inherited from class org.apache.commons.digester.Rule
    digester, namespaceURI
     
    Constructor Summary
    PlugInSetPropertyRule()
               
     
    Method Summary
     void begin(org.xml.sax.Attributes attributes)
               
     
    Methods inherited from class org.apache.commons.digester.Rule
    begin, body, body, end, end, finish, getDigester, getNamespaceURI, setDigester, setNamespaceURI
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    PlugInSetPropertyRule

    public PlugInSetPropertyRule()
    Method Detail

    begin

    public void begin(org.xml.sax.Attributes attributes)
               throws java.lang.Exception
    Overrides:
    begin in class org.apache.commons.digester.Rule
    java.lang.Exception


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/SetActionMappingClassRule.html0000644000175000017500000002620010404045236032526 0ustar arnaudarnaud00000000000000 SetActionMappingClassRule (Apache Struts API Documentation)

    org.apache.struts.config
    Class SetActionMappingClassRule

    java.lang.Object
      |
      +--org.apache.commons.digester.Rule
            |
            +--org.apache.struts.config.SetActionMappingClassRule
    

    final class SetActionMappingClassRule
    extends org.apache.commons.digester.Rule

    Class that sets the name of the class to use when creating action mapping instances. The value is set on the object on the top of the stack, which must be a org.apache.struts.config.ModuleConfig.


    Field Summary
     
    Fields inherited from class org.apache.commons.digester.Rule
    digester, namespaceURI
     
    Constructor Summary
    SetActionMappingClassRule()
               
     
    Method Summary
     void begin(org.xml.sax.Attributes attributes)
               
     
    Methods inherited from class org.apache.commons.digester.Rule
    begin, body, body, end, end, finish, getDigester, getNamespaceURI, setDigester, setNamespaceURI
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    SetActionMappingClassRule

    public SetActionMappingClassRule()
    Method Detail

    begin

    public void begin(org.xml.sax.Attributes attributes)
               throws java.lang.Exception
    Overrides:
    begin in class org.apache.commons.digester.Rule
    java.lang.Exception


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/package-frame.html0000644000175000017500000000525210404045244030171 0ustar arnaudarnaud00000000000000 org.apache.struts.config (Apache Struts API Documentation) org.apache.struts.config
    Interfaces 
    ConfigHelperInterface
    ModuleConfig
    Classes 
    ActionConfig
    ActionMappingFactory
    AddDataSourcePropertyRule
    ApplicationConfig
    ConfigHelper
    ConfigRuleSet
    ControllerConfig
    DataSourceConfig
    ExceptionConfig
    FormBeanConfig
    FormPropertyConfig
    ForwardConfig
    MessageResourcesConfig
    ModuleConfigFactory
    PlugInConfig
    PlugInSetPropertyRule
    SetActionMappingClassRule
    libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/package-summary.html0000644000175000017500000002710410404045230030567 0ustar arnaudarnaud00000000000000 org.apache.struts.config (Apache Struts API Documentation)

    Package org.apache.struts.config

    The "config" package contains configuration objects that correspond to elements that may be specified in the struts-config.xml module configuration file.

    See:
              Description

    Interface Summary
    ConfigHelperInterface NOTE: THIS CLASS IS UNDER ACTIVE DEVELOPMENT.
    ModuleConfig The collection of static configuration information that describes a Struts-based module.
     

    Class Summary
    ActionConfig A JavaBean representing the configuration information of an <action> element from a Struts module configuration file.
    ActionMappingFactory An object creation factory which creates action mapping instances, taking into account the default class name, which may have been specified on the parent element and which is made available through the object on the top of the stack, which must be a org.apache.struts.config.ModuleConfig.
    AddDataSourcePropertyRule Class that calls addProperty() for the top object on the stack, which must be a org.apache.struts.config.DataSourceConfig.
    ApplicationConfig Deprecated. Usage replaced by ModuleConfig Interface.
    ConfigHelper NOTE: THIS CLASS IS UNDER ACTIVE DEVELOPMENT.
    ConfigRuleSet The set of Digester rules required to parse a Struts configuration file (struts-config.xml).
    ControllerConfig A JavaBean representing the configuration information of a <controller> element in a Struts configuration file.
    DataSourceConfig A JavaBean representing the configuration information of a <data-source> element from a Struts configuration file.
    ExceptionConfig A JavaBean representing the configuration information of an <exception> element from a Struts configuration file.
    FormBeanConfig A JavaBean representing the configuration information of a <form-bean> element in a Struts configuration file.
    FormPropertyConfig A JavaBean representing the configuration information of a <form-property> element in a Struts configuration file.
    ForwardConfig A JavaBean representing the configuration information of a <forward> element from a Struts configuration file.
    MessageResourcesConfig A JavaBean representing the configuration information of a <message-resources> element in a Struts configuration file.
    ModuleConfigFactory A factory interface for creating ModuleConfigs.
    PlugInConfig A JavaBean representing the configuration information of a <plug-in> element in a Struts configuration file.
    PlugInSetPropertyRule Class that records the name and value of a configuration property to be used in configuring a PlugIn instance when instantiated.
    SetActionMappingClassRule Class that sets the name of the class to use when creating action mapping instances.
     

    Package org.apache.struts.config Description

    The "config" package contains configuration objects that correspond to elements that may be specified in the struts-config.xml module configuration file.

    Config UML



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/package-tree.html0000644000175000017500000002262010404045172030034 0ustar arnaudarnaud00000000000000 org.apache.struts.config Class Hierarchy (Apache Struts API Documentation)

    Hierarchy For Package org.apache.struts.config

    Package Hierarchies:
    All Packages

    Class Hierarchy

    Interface Hierarchy



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/config/package-use.html0000644000175000017500000006403410404045222027672 0ustar arnaudarnaud00000000000000 Uses of Package org.apache.struts.config (Apache Struts API Documentation)

    Uses of Package
    org.apache.struts.config

    Packages that use org.apache.struts.config
    org.apache.struts.action The action package is the core of the struts framework, providing the "Controller" aspect of a MVC model. 
    org.apache.struts.config The "config" package contains configuration objects that correspond to elements that may be specified in the struts-config.xml module configuration file. 
    org.apache.struts.config.impl   
    org.apache.struts.plugins   
    org.apache.struts.taglib.html The "struts-html" tag library contains JSP custom tags useful in creating dynamic HTML user interfaces, including input forms. 
    org.apache.struts.tiles
    The Tiles taglib and framework allows building web pages by assembling reusable pieces of pages, called Tiles. 
    org.apache.struts.upload The upload package facilities to upload files using multi-part requests. 
    org.apache.struts.util The Utilities package provides a variety of families of classes, to solve problems that are commonly encountered in building web applications. 
    org.apache.struts.validator The validator package provides a series of classes to validate ActionForm type of input. 
     

    Classes in org.apache.struts.config used by org.apache.struts.action
    ActionConfig
              A JavaBean representing the configuration information of an <action> element from a Struts module configuration file.
    ApplicationConfig
              Deprecated. Usage replaced by ModuleConfig Interface.
    ExceptionConfig
              A JavaBean representing the configuration information of an <exception> element from a Struts configuration file.
    FormBeanConfig
              A JavaBean representing the configuration information of a <form-bean> element in a Struts configuration file.
    ForwardConfig
              A JavaBean representing the configuration information of a <forward> element from a Struts configuration file.
    ModuleConfig
              The collection of static configuration information that describes a Struts-based module.
     

    Classes in org.apache.struts.config used by org.apache.struts.config
    ActionConfig
              A JavaBean representing the configuration information of an <action> element from a Struts module configuration file.
    ConfigHelperInterface
              NOTE: THIS CLASS IS UNDER ACTIVE DEVELOPMENT.
    ControllerConfig
              A JavaBean representing the configuration information of a <controller> element in a Struts configuration file.
    DataSourceConfig
              A JavaBean representing the configuration information of a <data-source> element from a Struts configuration file.
    ExceptionConfig
              A JavaBean representing the configuration information of an <exception> element from a Struts configuration file.
    FormBeanConfig
              A JavaBean representing the configuration information of a <form-bean> element in a Struts configuration file.
    FormPropertyConfig
              A JavaBean representing the configuration information of a <form-property> element in a Struts configuration file.
    ForwardConfig
              A JavaBean representing the configuration information of a <forward> element from a Struts configuration file.
    MessageResourcesConfig
              A JavaBean representing the configuration information of a <message-resources> element in a Struts configuration file.
    ModuleConfig
              The collection of static configuration information that describes a Struts-based module.
    ModuleConfigFactory
              A factory interface for creating ModuleConfigs.
    PlugInConfig
              A JavaBean representing the configuration information of a <plug-in> element in a Struts configuration file.
     

    Classes in org.apache.struts.config used by org.apache.struts.config.impl
    ActionConfig
              A JavaBean representing the configuration information of an <action> element from a Struts module configuration file.
    ControllerConfig
              A JavaBean representing the configuration information of a <controller> element in a Struts configuration file.
    DataSourceConfig
              A JavaBean representing the configuration information of a <data-source> element from a Struts configuration file.
    ExceptionConfig
              A JavaBean representing the configuration information of an <exception> element from a Struts configuration file.
    FormBeanConfig
              A JavaBean representing the configuration information of a <form-bean> element in a Struts configuration file.
    ForwardConfig
              A JavaBean representing the configuration information of a <forward> element from a Struts configuration file.
    MessageResourcesConfig
              A JavaBean representing the configuration information of a <message-resources> element in a Struts configuration file.
    ModuleConfig
              The collection of static configuration information that describes a Struts-based module.
    ModuleConfigFactory
              A factory interface for creating ModuleConfigs.
    PlugInConfig
              A JavaBean representing the configuration information of a <plug-in> element in a Struts configuration file.
     

    Classes in org.apache.struts.config used by org.apache.struts.plugins
    ModuleConfig
              The collection of static configuration information that describes a Struts-based module.
     

    Classes in org.apache.struts.config used by org.apache.struts.taglib.html
    ModuleConfig
              The collection of static configuration information that describes a Struts-based module.
     

    Classes in org.apache.struts.config used by org.apache.struts.tiles
    ForwardConfig
              A JavaBean representing the configuration information of a <forward> element from a Struts configuration file.
    ModuleConfig
              The collection of static configuration information that describes a Struts-based module.
    PlugInConfig
              A JavaBean representing the configuration information of a <plug-in> element in a Struts configuration file.
     

    Classes in org.apache.struts.config used by org.apache.struts.upload
    ModuleConfig
              The collection of static configuration information that describes a Struts-based module.
     

    Classes in org.apache.struts.config used by org.apache.struts.util
    ActionConfig
              A JavaBean representing the configuration information of an <action> element from a Struts module configuration file.
    ForwardConfig
              A JavaBean representing the configuration information of a <forward> element from a Struts configuration file.
    ModuleConfig
              The collection of static configuration information that describes a Struts-based module.
     

    Classes in org.apache.struts.config used by org.apache.struts.validator
    ModuleConfig
              The collection of static configuration information that describes a Struts-based module.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/doc-files/0000755000175000017500000000000010423130300025201 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/doc-files/Stamp.gif0000644000175000017500000001151210404045204026763 0ustar arnaudarnaud00000000000000GIF87aÂ}÷Uªÿ$$U$ª$ÿIIUIªIÿmmUmªmÿ’’U’ª’ÿ¶¶U¶ª¶ÿÛÛUÛªÛÿÿÿUÿªÿÿ$$U$ª$ÿ$$$$U$$ª$$ÿ$I$IU$Iª$Iÿ$m$mU$mª$mÿ$’$’U$’ª$’ÿ$¶$¶U$¶ª$¶ÿ$Û$ÛU$Ûª$Ûÿ$ÿ$ÿU$ÿª$ÿÿIIUIªIÿI$I$UI$ªI$ÿIIIIUIIªIIÿImImUImªImÿI’I’UI’ªI’ÿI¶I¶UI¶ªI¶ÿIÛIÛUIÛªIÛÿIÿIÿUIÿªIÿÿmmUmªmÿm$m$Um$ªm$ÿmImIUmIªmIÿmmmmUmmªmmÿm’m’Um’ªm’ÿm¶m¶Um¶ªm¶ÿmÛmÛUmÛªmÛÿmÿmÿUmÿªmÿÿ’’U’ª’ÿ’$’$U’$ª’$ÿ’I’IU’Iª’Iÿ’m’mU’mª’mÿ’’’’U’’ª’’ÿ’¶’¶U’¶ª’¶ÿ’Û’ÛU’Ûª’Ûÿ’ÿ’ÿU’ÿª’ÿÿ¶¶U¶ª¶ÿ¶$¶$U¶$ª¶$ÿ¶I¶IU¶Iª¶Iÿ¶m¶mU¶mª¶mÿ¶’¶’U¶’ª¶’ÿ¶¶¶¶U¶¶ª¶¶ÿ¶Û¶ÛU¶Ûª¶Ûÿ¶ÿ¶ÿU¶ÿª¶ÿÿÛÛUÛªÛÿÛ$Û$UÛ$ªÛ$ÿÛIÛIUÛIªÛIÿÛmÛmUÛmªÛmÿÛ’Û’UÛ’ªÛ’ÿÛ¶Û¶UÛ¶ªÛ¶ÿÛÛÛÛUÛÛªÛÛÿÛÿÛÿUÛÿªÛÿÿÿÿUÿªÿÿÿ$ÿ$Uÿ$ªÿ$ÿÿIÿIUÿIªÿIÿÿmÿmUÿmªÿmÿÿ’ÿ’Uÿ’ªÿ’ÿÿ¶ÿ¶Uÿ¶ªÿ¶ÿÿÛÿÛUÿÛªÿÛÿÿÿÿÿUÿÿªÿÿÿ!ù,Â}@ÿÿ H€Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç ;ùï É“(Sª\ɲ¥Ë—0cÊœI³¦Í›8sêÜɳçM…)·}Û¦í`›6ß µÅ4 Óm‘$ T¸pà@B‡ *vì¬ Õæ³¬Ù’gÓª]KÛ·pá&œ© ª5kLm- @Àˆ#Cx!ÃÄ6lØ8Aĉ 'ìj¨« €«xÕi#w§ÛÒ¨SÇ<­ºµk˜si~›”ö·häÈY ™²äPbÄ $hبQ‚3&ÀC¾‹!"á1b†ŒÀ.¼qñáÇIÿî-T p¡MW>P¤}uy².ØV ëÓ÷Îok°>Jüú¡e_€& h`þà‚óí—àIꇠ„¾ÖS… ª›ZB5ÔhxÙ‚"ˆŒˆ8À¤¨âUÁ#Ž0¡\–ž8TÑY`(öØ8ãˆ1Î0ÂŒ2Ì £™=*'ÆqAœDÂB €Æ•ÔPƒ+ŒàI—Ûè3†–ù™ö!4愘&~¶i’š%±i'š*¹¹Ÿ›gmhæ?Û¬´M‡C:”7D%:Ú¢ŒU×£ŽŽ©Xƒ:šè Ö¥è¦BíóÍ>þ)jixŽjjZ~¶ÔÐOžêjM­šÿV*®Í뫸ÊGçK|® ç¯Îyç›ÄÛ«N­Ê)áš´.›&…uç÷MË’Ï:­³ØfËl³ÆV«mœ{Κë¹ü‹îºì¶ë¦ ï¼ôÖkャª›g¬rVû«ƒzB+°žäú[lÀŒï 7|á®õêëðÄWüš¼g¬ñÆã„qÇ ‡,rÈwÞ:òÉ(§Ìnª«ìòË0·›ºB½è?¶ÄL“¹:ûÄsÏlµLR¥Ûà5eBI¡f!F£Db‹'™8—a•b0Wi1ÈÓJ=ÑXCñÏ@#›öŸB£¤KTmà%·6Î8# Ìa7Ä"ÿàœB| 0€_#PG˜„-9ŠX‹7NŒá€ÆUâ’"8äs^0™‘‚*¨ Ò 3Í0¥Z„ ÊGŸÂßJ +™ù1¸zìú·¶…mÏT©6w¡ 1Ä€ŽåÀT†õÕH:Σ(Ç ÂÝ(ƒ@Cxƒ>Ä`‡#ŽøÊ ñãb4 ób‹˜ßb0ŒÐ ,ÙdsóJ¨¯~ €nÑžÀûÛ{œþ3Píô¿Ùeh€L—À6°d«_ 4˜iè4ˆµ†h™Ê`¢ZÑ º•Ì:ÐAb€¢Dèø1ȹPlVD €Ž`€Axè E‹hH`Ï*-Š‘8…  jЂ_B"#²‘—DÙïvAƒ"î,(Å*ZñŠû’µâ­~å¯` ìbÁ¾ƃiq_LX]Ç­2:PŒ ôÖ¶šE. ‰+[oœ#·5,8걌kÄbNr·2“±íg†¤¬©+u…䑌¤$'IÉJZò’˜Ì$E¶˜HNÅUgd¤(Gÿé«NBhUftãÃÈ'/"L®¤Á$HÊZŠŒ¶Ì¥.†Ë]úò—îêO(IÌb‚²“šL¦2—ÉÌf:ó™ÐôˆK¢IÍjZóšØÌ¦6#¢@czó›Ç$ãNæ7J´óœ3ÚQ‰H“ ¶[q3fhD%dG3¬¡ 1õÌœÄ(:_I¦Aí#PÖ8 Šð¨o´!ug2”a>¬±ç2ˆb&§æÒ¯Æ„ê?f³I0E’pgÝz*Ž0ðHÇQœD0S¯@0~L´3†ÈFV1wãQ&ŒPˆ¢±ç®9¹¢!†¤¢h»>6µÈ«Þîö·ºUÐ)QgJ™ “¶ý[‹`â ’|ÃÛ` 3RˆZ&æKÞ‹$èE–²ÕsH_78Fœ”C¤à8f-’!ˆ…CE€HF2>Jkè—é Up£ NsÀþ)pƒòg`þø¶©.oo+­rùÿkW@áâbÇ W¸ÉÕy( n#Õ¨2Tt9òæs)oõÉY&ÜÝ{Ä㵕qYœ ?¥ëP9Ü=æqŽü®ÉøíG˜O\Žä¾x"1þê3óœÃ§÷ÎîƒÐÔTzí{?cÓ_]Bšœ©íg=º“`º•˜?y)'úC¯Î—¶³Ë8“§;rW"‚ìÀ üäO´7 '4Dƒ3 ¥4ÒrÐn QÊà"ÅW"ÕQÅ "• Õ n“~ZG©ç ðñÚPA ð(Ið‚Û`† 96Br5ÿŒ•5œ#ô9ÀÓƒñd6àg€’×Kº†3)¨I@KsÁ!£ˆ±cVc>:¸5]¿Ó­P es6DyËU†"z±™5}qË1 ?ÂŽa5’Á5è0´ƒ¬ Ñ  Ø."È{$Ø}B’)m0’À Ya5ÁqVapVÆ1DñWSQ ÕµBÄ ˆP Ù ±5¹ò‡X„ж$XÚ0UiБ€U’ UJ¢Y  º8deÞ%$‹ãX1" ‘ÆZ7W—CÄlÈ`"><ñQ&E×}ÆÇq-wÆUàBr³–[‚Wkûÿ¶€X‘@7ÎÀXŽõž5 B0YàU}‘=…³YCÐY‹Ã<>²ŽS#ìQZ§…#XÁÆèZ&TŠÑ¨!f[åv` Yq‰[!& 6‘ ©Šª–z#á!¶€)Lñ õPƒöhñ5D‰&)Jv‹×38PØ¡$áÓ@Ò]ÃWC_/" ç1w˜+F]ÕÅ {Uõ3`Ø0 Y‘»UoK\©"s3÷|„g‘Ú¸EDÿ°ˆ’5(±À‰W‘>Ç# ¢à^ÄaÈ¡$Ø‘’ðˆ=‚1|qbP8Ü!“5h5/ €5½Á1 úpƒ””@‘§*•BG¦?•‹©fب0ˆp×yÄBuVéIw CAÖP ì Àƒ9™ˆ]’‘<ÉÖ†Lº)}á7‚£=Ö1C0Y‰cV‚àX E#Wƒ>êÓ"ŒðiðóŽ™[´S`^¦˜S9.ÁÒ`¶S”Od R*°#kQ×™¬´JJ×x'…&ÿY{á)õ(ÚÀ$B#WŸ5´>¡€]“&“¨{ùb Nƒ’!P%¾)Ây^BpV:Æ1 ˆ%°ÀiïƒÙ€ ˜tvÇpfTJ†×ab+úvoŸsb¶á§‹woç¢Léwê©:y²•¡ˆB4D! ^ø“*›—øc2„5Áð8§eZ–†$Ž!A¶8S³–N"…GVp—¾9YOeP ¬à% %P¶e]†•RÄž+šy'šqá"AŸç1!Ú'¥‰uq(cñkÖwöQzV]ºo5<À Q˜±¨á`h/Öc‘qc=vZ?òhãÿi±S8¥=B Y øÀ†ï ¡Æ£Vjî‚l E«FE€·oJwwž'kôâž,áOŸò ú —ò(㸠ÕÀÈ ©0"¨¡ ¤@]0t9e¨¼1\c_;ùb79‡’¡Ÿ¥ÕS5"©ð%ø%Ø  š%Ôð>ÔÀO£)vØ£e1Û𣿪A!åAÖ0:Ò0BxE (dT¬)C„V]Zøb4dC8#ëC#–óZ,òŸ6B K Œp¦æÊDOQ(2jn­ÊH¸zÍ¥…âf„Ra©)½v)&&Ÿ‰ÂO¿¦²¢²›³¡níºn«u#Æ|<Û³>û³Äÿ'pVd³ßçz[´Hë‡yŠuLÅ•¢¯Ó™µ’rrWwa'zjG”测ô®ˆ$t"ztš¶"Šw`›Nˆ·¢¬öwy§wI÷¶û£¢gs“‡ržd¶%§pSw´®º´,'§&¶lÇx„ë1y¤qÝHG'§¸ØH¢Ü¸@SÇt7§Ew¸Ý2,,г~ûp┸aÇy8Z¶NEstrRWG Ç}_D-mtµŠ÷G‹‹º¯Û:¦+»Ýp´›s›;•ªô¦ç™0±¤quz•sZ«C§—‹¼V׺[ºä©¼5çrÀ{»ŽW¸š;z” ºÔg¼çq4jwC÷rÐ"»ÔWGW2Òk¢Ühž1w€ »•ûrÔ;¢93|+b´$W§*õk¿û˱K;*1:E¥ÇµMÀÀt¿I»À¤‡À üÀ·êÀ<ÁJë´|Áñ"Á¼Á§bµŒ§âi«l{u÷¾u+¸v4£«½&«*|¶#¬vØÛ¾¡û»Ý»JsJF9Z¾G)Â1¬R»ûº,·™'*¼W¸ÃûǺ;ÃN‡fé┚yÄ5\ž>¬Ä2š‘·f ·QÌwI‡£æYÃV ÄÜW<Ƨ§À[‰ÆI«ÆlüÆh[Æp<ÇtÆt|ǃ¤Áx¼Ç6áÆ|üÇ È‚Œ¿v<Ȇ,´‡œÈyœ¸ŠÜȼ¢¶Žɰ}’\Éœty–\ÉÌ´@ÛÉžüÉ ŒI$;libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/doc-files/jakarta-feather-small.gif0000644000175000017500000000352010404045236032043 0ustar arnaudarnaud00000000000000GIF87aZ÷ÿÿÿ!!!111999BBBcccsss{{{ŒŒŒÞÞÞïï籠„Þ„„Îï÷JB„”Öÿï!çÎÆµZ9÷RÿB÷k1ÞBÎ{Rç„RÞk1ÎRÖœ{ï{9çµ”ÿsÿc÷­{¥B½{JÎkÞcœ”Œ÷çÖskc÷¥RÎÆ½¥Zν¥ÖÆ­­”kcZJïÖ¥­{Ö­Bïµ)ç΄¥„sZ÷Ö)έέµœÞ½çÖcÿç½½µ{{s„„{„„sBcÖŒµÿ9ÿ9­c)ÎB!Z9ŒkÿkÞœÿ”)Æs­”ÞcŒJkcŒµÿ”½ÎŒÞ{”ÖÿÖ掠”Œÿï{kÖ1½”{ÞµµŒÿµœc΄ï{½ç„ÿŒµZçJ”ï!„{9”9ÞRÿR¥Rk­1Î!{÷1ïÿ­Ö  €4òPó €4ò0Ùíw €<ðòøw$€ `Úð<ñÔ,ùw`ØùwÿÿÿÿñTGöwD:\Projects\Apache\jakarta-struts-current\src\share\org\apache\struts\doc-files\jakarta-logo.gifeady&íwÐgïwTó žàjYoUøAñ ë `ñLñª(ðwffÔ(jYì;çw €!ðñ°ÿD¹ówÈÍówÔ·DÔ!ù,Z@ÿHpà‚‚*\Ȱ¡Ã‡,P àÀŸ‹¢ A"e /_ÂŒ³Æ›7&ßÔÁ³‡‚„ 8ˆ€H³fÃÀHñ ÑC°;y\u±Ø‚$\ž Ö‡{ð‘Çb÷a÷ž£s˜t_ià_jŒtAAüðºêúðC š1t‡—Ö  ¨`©@0¸yðBZh`™öÖ  €DP„p€‹v|T›ipû&^\.<¨â‹Nh1å þ…QãeíAalÀA ðŠLi.€VÜqÉÝ*,õU¢mÔ#ŠE€B ĦóCDª0ƒÕ (°S,Áä¬É=ÉD\oAå¡cHçFGà˜° /@²½…HÚn£’ÿ±ßR[41œžÇ!±ÄIdx½¡F¢t”*GŽu°ý¶d®p7‰rIžv»© ©º\OëÏFø‰8®Á÷Å\Æäš4ß|u¸qš_:—$Àú¢ÖHÔHHqm‚P¬®'­TkGCk1¹5Ò±¨tÔ0,ÈâÍE6ð´ÞOp¶ßP£C×øíÊtj…ÒCe„IPBf€¡ XC 6W“ÎQÄ2#àz$:k&1+ÉàäèóRuðhcð›H®t†Þô‡ ëV|àƒ IH<` leŠpÀ ˆ@0eà%ÀÑ-R§ö\+(±ÏˆH‡Q™Á=X׺€Ð¯Ìœis£a ·H pñ‹³b@;libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/plugins/0000755000175000017500000000000010423130300025015 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/plugins/class-use/0000755000175000017500000000000010423130300026714 5ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000014510423140533011317 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/plugins/class-use/ModuleConfigVerifier.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/plugins/class-use/ModuleConfigVerifier.html0000644000175000017500000001270010404045210033655 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.plugins.ModuleConfigVerifier (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.plugins.ModuleConfigVerifier

    No usage of org.apache.struts.plugins.ModuleConfigVerifier



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/plugins/ModuleConfigVerifier.html0000644000175000017500000005262710404045222031775 0ustar arnaudarnaud00000000000000 ModuleConfigVerifier (Apache Struts API Documentation)

    org.apache.struts.plugins
    Class ModuleConfigVerifier

    java.lang.Object
      |
      +--org.apache.struts.plugins.ModuleConfigVerifier
    
    All Implemented Interfaces:
    PlugIn

    public class ModuleConfigVerifier
    extends java.lang.Object
    implements PlugIn

    Convenient implementation of PlugIn that performs as many verification tests on the information stored in the ModuleConfig for this application module as is practical. Based on the setting of the fatal property (which defaults to true), the detection of any such errors will cause a ServletException to be thrown from the init() method, which will ultimately cause the initialization of your Struts controller servlet to fail.

    Under all circumstances, errors that are detected will be logged via calls to ServletContext.log().

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:34:00 +0100 (Fri, 22 Aug 2003) $
    Author:
    Craig R. McClanahan

    Field Summary
    protected  ModuleConfig config
              The ModuleConfig instance for our application module.
    private  boolean fatal
              Should the existence of configuration errors be fatal.
    protected  ActionServlet servlet
              The ActionServlet instance we are associated with.
     
    Constructor Summary
    ModuleConfigVerifier()
               
     
    Method Summary
     void destroy()
              Receive notification that our owning module is being shut down.
     void init(ActionServlet servlet, ModuleConfig config)
              Receive notification that the specified module is being started up.
     boolean isFatal()
              Return the "configuation errors are fatal" flag.
    protected  void log(java.lang.String message)
              Log the specified message to our servlet context log, after a header including the module prefix.
     void setFatal(boolean fatal)
              Set the "configuration errors are fatal" flag.
    protected  boolean verifyActionMappingClass()
              Return true if information returned by config.getActionMappingClass() is all valid; otherwise, log error messages and return false.
    protected  boolean verifyForwardConfigs()
              Return true if information returned by config.findForwardConfigs() is all valid; otherwise, log error messages and return false.
    protected  boolean verifyMessageResourcesConfigs()
              Return true if information returned by config.findMessageResourcesConfigs() is all valid; otherwise, log error messages and return false.
    protected  boolean verifyPlugInConfigs()
              Return true if information returned by config.findPluginConfigs() is all valid; otherwise, log error messages and return false.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    config

    protected ModuleConfig config

    The ModuleConfig instance for our application module.


    servlet

    protected ActionServlet servlet

    The ActionServlet instance we are associated with.


    fatal

    private boolean fatal

    Should the existence of configuration errors be fatal.

    Constructor Detail

    ModuleConfigVerifier

    public ModuleConfigVerifier()
    Method Detail

    isFatal

    public boolean isFatal()

    Return the "configuation errors are fatal" flag.


    setFatal

    public void setFatal(boolean fatal)

    Set the "configuration errors are fatal" flag.

    Parameters:
    fatal - The new flag value

    destroy

    public void destroy()

    Receive notification that our owning module is being shut down.

    Specified by:
    destroy in interface PlugIn

    init

    public void init(ActionServlet servlet,
                     ModuleConfig config)
              throws javax.servlet.ServletException

    Receive notification that the specified module is being started up.

    Specified by:
    init in interface PlugIn
    Parameters:
    servlet - ActionServlet that is managing all the modules in this web application
    config - ModuleConfig for the module with which this plug-in is associated
    Throws:
    javax.servlet.ServletException - if this PlugIn cannot be successfully initialized

    log

    protected void log(java.lang.String message)

    Log the specified message to our servlet context log, after a header including the module prefix.

    Parameters:
    message - The message to be logged

    verifyActionMappingClass

    protected boolean verifyActionMappingClass()

    Return true if information returned by config.getActionMappingClass() is all valid; otherwise, log error messages and return false.


    verifyForwardConfigs

    protected boolean verifyForwardConfigs()

    Return true if information returned by config.findForwardConfigs() is all valid; otherwise, log error messages and return false.


    verifyMessageResourcesConfigs

    protected boolean verifyMessageResourcesConfigs()

    Return true if information returned by config.findMessageResourcesConfigs() is all valid; otherwise, log error messages and return false.


    verifyPlugInConfigs

    protected boolean verifyPlugInConfigs()

    Return true if information returned by config.findPluginConfigs() is all valid; otherwise, log error messages and return false.



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/plugins/package-frame.html0000644000175000017500000000205610404045172030404 0ustar arnaudarnaud00000000000000 org.apache.struts.plugins (Apache Struts API Documentation) org.apache.struts.plugins
    Classes 
    ModuleConfigVerifier
    libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/plugins/package-summary.html0000644000175000017500000001416210404045242031006 0ustar arnaudarnaud00000000000000 org.apache.struts.plugins (Apache Struts API Documentation)

    Package org.apache.struts.plugins

    Class Summary
    ModuleConfigVerifier Convenient implementation of PlugIn that performs as many verification tests on the information stored in the ModuleConfig for this application module as is practical.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/plugins/package-tree.html0000644000175000017500000001343110404045230030243 0ustar arnaudarnaud00000000000000 org.apache.struts.plugins Class Hierarchy (Apache Struts API Documentation)

    Hierarchy For Package org.apache.struts.plugins

    Package Hierarchies:
    All Packages

    Class Hierarchy



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/plugins/package-use.html0000644000175000017500000001216710404045220030104 0ustar arnaudarnaud00000000000000 Uses of Package org.apache.struts.plugins (Apache Struts API Documentation)

    Uses of Package
    org.apache.struts.plugins

    No usage of org.apache.struts.plugins



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/0000755000175000017500000000000010404045172024611 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/0000755000175000017500000000000010423130300025503 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/class-use/0000755000175000017500000000000010423130300027402 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/class-use/CookieTag.html0000644000175000017500000001266310404045232032155 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.bean.CookieTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.bean.CookieTag

    No usage of org.apache.struts.taglib.bean.CookieTag



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/class-use/CookieTei.html0000644000175000017500000001266310404045204032162 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.bean.CookieTei (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.bean.CookieTei

    No usage of org.apache.struts.taglib.bean.CookieTei



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/class-use/DefineTag.html0000644000175000017500000001630610404045216032136 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.bean.DefineTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.bean.DefineTag

    Packages that use DefineTag
    org.apache.struts.taglib.nested.bean The nested bean tags extend the org.apache.struts.taglib.bean tags to allow them to relate to each other in a nested nature. 
     

    Uses of DefineTag in org.apache.struts.taglib.nested.bean
     

    Subclasses of DefineTag in org.apache.struts.taglib.nested.bean
     class NestedDefineTag
              NestedDefineTag.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/class-use/DefineTei.html0000644000175000017500000001266310404045236032150 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.bean.DefineTei (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.bean.DefineTei

    No usage of org.apache.struts.taglib.bean.DefineTei



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/class-use/HeaderTag.html0000644000175000017500000001266310404045224032135 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.bean.HeaderTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.bean.HeaderTag

    No usage of org.apache.struts.taglib.bean.HeaderTag



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/class-use/HeaderTei.html0000644000175000017500000001266310404045210032136 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.bean.HeaderTei (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.bean.HeaderTei

    No usage of org.apache.struts.taglib.bean.HeaderTei



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/class-use/IncludeTag.html0000644000175000017500000001267310404045236032334 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.bean.IncludeTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.bean.IncludeTag

    No usage of org.apache.struts.taglib.bean.IncludeTag



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/class-use/IncludeTei.html0000644000175000017500000001267310404045210032332 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.bean.IncludeTei (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.bean.IncludeTei

    No usage of org.apache.struts.taglib.bean.IncludeTei



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/class-use/MessageTag.html0000644000175000017500000001632410404045222032325 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.bean.MessageTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.bean.MessageTag

    Packages that use MessageTag
    org.apache.struts.taglib.nested.bean The nested bean tags extend the org.apache.struts.taglib.bean tags to allow them to relate to each other in a nested nature. 
     

    Uses of MessageTag in org.apache.struts.taglib.nested.bean
     

    Subclasses of MessageTag in org.apache.struts.taglib.nested.bean
     class NestedMessageTag
              NestedWriteTag.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/class-use/PageTag.html0000644000175000017500000001264310404045212031614 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.bean.PageTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.bean.PageTag

    No usage of org.apache.struts.taglib.bean.PageTag



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/class-use/PageTei.html0000644000175000017500000001264310404045244031627 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.bean.PageTei (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.bean.PageTei

    No usage of org.apache.struts.taglib.bean.PageTei



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/class-use/ParameterTag.html0000644000175000017500000001271310404045214032660 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.bean.ParameterTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.bean.ParameterTag

    No usage of org.apache.struts.taglib.bean.ParameterTag



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/class-use/ParameterTei.html0000644000175000017500000001271310404045246032673 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.bean.ParameterTei (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.bean.ParameterTei

    No usage of org.apache.struts.taglib.bean.ParameterTei



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/class-use/ResourceTag.html0000644000175000017500000001270310404045212032524 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.bean.ResourceTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.bean.ResourceTag

    No usage of org.apache.struts.taglib.bean.ResourceTag



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/class-use/ResourceTei.html0000644000175000017500000001270310404045230032532 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.bean.ResourceTei (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.bean.ResourceTei

    No usage of org.apache.struts.taglib.bean.ResourceTei



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/class-use/SizeTag.html0000644000175000017500000001624610404045222031656 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.bean.SizeTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.bean.SizeTag

    Packages that use SizeTag
    org.apache.struts.taglib.nested.bean The nested bean tags extend the org.apache.struts.taglib.bean tags to allow them to relate to each other in a nested nature. 
     

    Uses of SizeTag in org.apache.struts.taglib.nested.bean
     

    Subclasses of SizeTag in org.apache.struts.taglib.nested.bean
     class NestedSizeTag
              NestedSizeTag.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/class-use/SizeTei.html0000644000175000017500000001264310404045242031663 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.bean.SizeTei (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.bean.SizeTei

    No usage of org.apache.struts.taglib.bean.SizeTei



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/class-use/StrutsTag.html0000644000175000017500000001266310404045224032251 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.bean.StrutsTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.bean.StrutsTag

    No usage of org.apache.struts.taglib.bean.StrutsTag



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/class-use/StrutsTei.html0000644000175000017500000001266310404045210032252 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.bean.StrutsTei (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.bean.StrutsTei

    No usage of org.apache.struts.taglib.bean.StrutsTei



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/class-use/WriteTag.html0000644000175000017500000001626610404045236032045 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.bean.WriteTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.bean.WriteTag

    Packages that use WriteTag
    org.apache.struts.taglib.nested.bean The nested bean tags extend the org.apache.struts.taglib.bean tags to allow them to relate to each other in a nested nature. 
     

    Uses of WriteTag in org.apache.struts.taglib.nested.bean
     

    Subclasses of WriteTag in org.apache.struts.taglib.nested.bean
     class NestedWriteTag
              NestedWriteTag.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/doc-files/0000755000175000017500000000000010423130300027350 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/doc-files/beanUML.gif0000644000175000017500000003221210404045232031332 0ustar arnaudarnaud00000000000000GIF87ay÷€€€€€€€€€ÀÀÀÀÜÀ¦Êð@ ` €   À à @ @@@`@€@ @À@à@` `@```€` `À`à`€ €@€`€€€ €À€à€   @ ` €   À à À À@À`À€À ÀÀÀàÀà à@à`à€à àÀààà@ @@@`@€@ @À@à@ @ @@ @` @€ @  @À @à @@@ @@@@@`@@€@@ @@À@@à@@`@ `@@`@``@€`@ `@À`@à`@€@ €@@€@`€@€€@ €@À€@à€@ @  @@ @` @€ @  @À @à @À@ À@@À@`À@€À@ À@ÀÀ@àÀ@à@ à@@à@`à@€à@ à@Àà@àà@€ €@€`€€€ €À€à€ € €@ €` €€ €  €À €à €@€ @€@@€`@€€@€ @€À@€à@€`€ `€@`€``€€`€ `€À`€à`€€€ €€@€€`€€€€€ €€À€€à€€ €  €@ €` €€ €  €À €à €À€ À€@À€`À€€À€ À€ÀÀ€àÀ€à€ à€@à€`à€€à€ à€Àà€àà€À À@À`À€À ÀÀÀàÀ À À@ À` À€ À  ÀÀ Àà À@À @À@@À`@À€@À @ÀÀ@Àà@À`À `À@`À``À€`À `ÀÀ`Àà`À€À €À@€À`€À€€À €ÀÀ€Àà€À À  À@ À` À€ À  ÀÀ Àà ÀÀÀ ÀÀ@ÀÀ`ÀÀ€ÀÀ ÀÀÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ!ù,yÿÿ H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\ɲ¥Ë—0cÊœI³¦Í› èÜɳ§ÏŸ@ƒ J´¨Ñ£H“*]Ê´©Ó§PŸâœJµªÕˆQ³jÝʵ«×¯`ƽJ¶¬YšbÓª]˶­Û·QÏÊK7¤ÏºxóêMyw¯ß¿~{L¸0Vž†+F»s±ãÇ…CžLdãʘ3“½¬¹³g†’? šeèÒ¨=snx õ`Ò®Q®ŽMûñj)­¶¾wà]í¼°œ-¼ø_â[Ü3ø®y_,\°ðà {Æ©Ïþ‘8÷ïg½ÛÿÓ¹…àSØ»—¯Èƒ#ù\˜ÿÁ÷¯¹}AoM1ô~„ÿ´ŸN(‘–%àMÞç U þóŽNR`÷Ï[´aÏ5ÇcÄ1EÀ—O><07üa‚nÔâCÛÁ¶`üÜ‹2Í8£M>è#8”ÄNïØ#E…Í sL?ýtø¡ð0ß&^ðÞHšd\ÊÈb`îHã@[¸å?7¢i`ÿ±èåš—u)œp¸`8õøãž1é)¡Ü&€§jü7¹ŒoŒnÇ­õä.~|À=[4Wä7K: ÚÀÈ ,?hN¨¡ýÄüv‡àâ¿óYðÅÏv×fŒq¾©å©XcÊ;Ô ²‰8î€Ë©æÓåædêò‘Sîüp½ó¶ž=ß¼:Ì û4ïèÀ´ ó¡KöSD‡G(:D”ŽÎÝÿsŽ’k÷|N½¿/Õ½iow¼7~1©ÏìòÿAÐ0€ÁîÝkXˆ*–’@Ô¡ñ£u&úWë¾Ð’ø¹o~ ² 78¼‰¼á8‚u(þ‰mXàöæE@{ªeøâÿšäÀ'1ÊC÷ð™Úç¸õ|XLçÿèˆÂ!P=™À éÌeê°4ÔY6¯IF :DW âºY¢ÖÝ ‚ÉJèù@”:^*jfKBÿhÖ¹™™š.p<0Ü 6ùd×>ùÉJB¤‘÷³Çð+x“:ʂԈnöÇMÒ8]”<ÄÐ~Xa™7¸¨ oP;|òs¤$Õ§I%‚R”Z§9_xÃK/Ð,(!>"ÌÇh ¥›nÑQãtAPÅ:ÈæLó¨ñƒ‹Z×ÊÖ¶f%#HHSçºM"à F ’£Z'Ó›)ëCHB¤0\ãW²_#ÏzMu…4©‹ylÂ$˺Z¶‘×¹¬eU‰ÖöQ²‘ëRAÛ‘Ïîɱ¤eìEVãÖÖºöµ°m\0ƱÚÖDˆ¦-íi—ÁƒyÊL¦mnSžÑÿ¤U/x2ípcÕ4…Ðji¹Ú7eN³ÚÔó-ñò \“#˜çñ½9´7-ë¦wyÒú-—î4}à=g:ð6ÎôàLøúþ|ÏéÑÞ˜Nòµ'ï@׺ÖANoS7Þ›ÇqÏCð°—]ôgöãÿ[yˆ·é&fyÄëRìÈO\o¶‡¼–uŸûê*üÊ‚x¹¿öñþúãUý°Eïù5\ù:×—ŸcÈß)qÉ›VÆ.âÛÛ·ûR^/Â_?bð³·°‡2…ýv‹Ïï$w}¬ƒ|äZkzá]Ï¿¦ /`o{ºÖ‹Wg—fwlvoó—vhŸVrät¿w[†\×GMP×.ÖU±gwAYqÕ{éu¼õÞ\ªÁeê%øV~ ‚¯ÑÁ‚³'Ø)(ƒ5È#Ùõ€²Õƒ>øƒoµ~98˜%ExVGè ‡„LØ„Nø„³5i@Ä`ƒCXƒVhùFRYx…×Õ…œÅ{g¤‚^x…ÿ`X<—T’‡bØ{Ž7}l§t´%…X†@’„F•~‰´†‡ÞEf!‡ZsÔg‡ B†ßQ{\Øg †nºÓ‡ì§y5ç&ĈÕ÷|†x[ˆ˜*·ˆ¿—u–Ç€°Ò] ·k[èr[s™x‡ônž‰â|({õ–ЍX{œtx¸Šô³‹68{cø‰‹sv­”zìoV§ˆ¹¨Š¼8g˜Eã‹ÓĈ¡.˜~gz5FŠ"7rÍXA›¨JGÑY‘ˆ·ªyÇ_”ˆ_aòj“‰fF†h¬š³Žø\(éw4VtŒ×h®Ú«4»¤¼WwË÷Žs1ý¨mTXtŒ6ª„hŠç-TË0‘ƳXû†3û´øÑt‡‰a†tcFzo«fÒ¶]á–x6 9ù6p]Û¨gÿ‹¶PÛrCgh¸W‹y¶nøÇŒZ²¹ê¨õG²"w©·G±OK©™×|çanz‰Ö'·ªÈŽ–ÚfŸjµ­¶·œ[‰Në·Oº§ý¶uTks¶8‰:‡oÕsxk­›µ`Ç¥XVfD×mö–µ”K³[*w †³txw@{³u[dC†´‚Öl‚w´w0¸Œæ¼Røg©«º¾š±´×²éx„ë°Êå½5K¦³Ú½þ&2+kx"‹¾iëdÀ1|¦•Û™¼H5¼)Ë¿\(¿B¹°Œ[À@8À)¹{o7t¡YwQz¬þ‹À䊧€È؇lhŒl ×G¬¢ dÉ%¶»Áý ¹bT¶ŽZÁìKÂ÷É_„šÂtÖ•Ìø¾,Ì…›§•ŠÂ#Gv¨H¶5\Â"L”º¹;<RK?lŸF›§pí˜vwÃW™Äf©'>vC<¹ûwq\§#ÌÿIÅ?dA< »3Ìod§s`”hT²©è`¹êªc|ÄÚ{akŒ‘(Œ< •€fd |fxÇ,™rvœÆ]Ö´‹ˆ°H¿‚|ž…5šjx·ÂÁ*¨a0ûÄtú[‡aÉ—LÀ¢¥¾-ÇÉwûz£ÊŠˆ4¨‡3KÁŒL?ª¬H›h‚É€›Ë+¬È³ÜOZ¥/|Ëé˽ØË铨Lª¸¬Ëó³©ļ5b[:Ìœº†”r  Ͷ#ÍÓìÌ„«À»ÌšÅ¬Íâ À<‚°¼²†^äìš,èO­|¤Ë<¤V]íl\ÃQ¦À(Ïà,¾û,bÙ|Ïß'³×œÌ{ÚÌ#MÃf7ʽ˜äë²Ô|ÐéìÍç,Ë ¹TÝìÏfÐmlÿ½^x¸Îm¨MÑ}!øKÒ­É(}ÐÄÌÎ+í«¾RêÑ»Ñê7²_\ÓÍ׈ÿ,Ó<Íg¶ÔI¬Ïý|±9ý²I­Ô²ÉÔMíÔþÌÌ MÏ3ƒ±Ò)Y«ÏÖŒÕX~ØÙË̙ɲªÓÝ[Ð#KÐTíÕ5ÉmíÖ#<Öº%×sÔ·b×wÓºªÕ\]ÒtÝ׌¦R ÑO;øaEøÓò+Ù‚¾DÒ„ýØÝqšˆmÈ·¿ŒÝØŽØ•sš_M®”=Å–}Ù¤œÕ„Ϋ½55Ö…]Ô˜ýÚ¯íÒ-ÔÚ‰¼Ø¤-Ø4ŒÓ2+¾]¯´ Û*¶ÝÚá|Ô†MÓ¼}ÉÇýÛÀÜÂ=ØØ-Ú ÝTœÜ®mÖ¬ýÜ»|ÕÅ]Õÿ?<ÝâL «Þâ­Ðß}Ö+ÞßêÝÚÝÓCÛx­Üîm߯=ÙŠÖ1Þù]Ûú-bgyÚgJß‹×Õ}Ûû-Ösz–+߾ܸ}ÝÞàvq‘î ïi0æ¼Þ¡má^án»J±E)ƒ¹¥×Öá0nÏ.¡àެâ"~ânâÙàK]ª*ޱå Ú¾ã%þÞ^ â’ ¥Ì«Áþxñ}²¿<â$~äHîãKà3š¥§ ÈºÝ.$Á^_^äõÝÞ»Í>|j¹»‹ÐѨޜæSNåU.Ód.Ûhžàžªy c¶A<´k›Ïîçì­ãenæ›]›_ªæÛ¸wzWºîÌÐæ‚>è”ÎÜ„¾ái¥ƒ7ahÜq"Y¾zºß—Žå þâNçuŽã?Þ¤Š~Œ8\¨ßvÆW®Ò’>é•nèV^èvÎZn†¬»xŸzŠLœ¼¨.綮ᩮë<žëȾê@Úê8\zÙ耤ã]­êÍŽë³ÞãÚ~æ@òìá­hÄ7´ öwË^ì¤~ìÝ^áҬ؇Øëÿ޹º[Ú²íÉníÜ~ê»~ˆ6úß´Jäž 9~ߦÎßBžðþ¿OÚ )ø3CNðë?ãÚá+ä_ëŸñÆ>çß±6ðß¹8ÍÔ€îæ?êâYb¢^ðöð+oéFóýÝòøºšò)¯ò3¯ñÚañi~ðßó6_óGÏÝ6¯kðŸôø¾î'¿ðîZ×Nÿô?¯ìYÏò3˜®_œ„ç+ó>¿õ@OõåºâeñFÿñÙNñí%òúÓ#-öj?ödŸöFè­t9÷tõQï²)”pßÂ{_ï}÷çŽôvRÀ×þ¬v¹‹ßUê<¿ñ‡‹/­”}Ó.ê^÷vï÷¿¾­¬–©ù’_ùRø‰Ï²‘7ør™ÚÒù›ßù¨OÏQÉö‡<æ¡ÿ«™ùúVÖûé^ôkï¶´®¥¸îÈ©¾mò±ïùŠüàÉp­ïÌžÞq' øÒÿùÚïüî¦Àý¥xßaÔûÀÅ_ÈC¿ýŸý4?ûÆ?ùìíÅÖ»hÑFºNÜí_jÕOÖ”ýÍúñOà@D˜Pá‚ 6ü@âDƒ+¬HñbDˆ#RôhQaFŒ#ž\(åJ–-]¾„SæLš5Yn|ˆÓæN“+uÖüi3hÌ¡­z7¤Ý¨OÅ*ûñm`Â…ÿ Þ9¸oNŒŠ™*æ{2ÊÉ”µVžY™nϨÿ>.[òçFÏzþ‹XõjÖ­¦†»X®fšm13f»õ¶[Þ’?‹¥*¸AÏea/R#gÔ»]?‡Ý2ÒÈR£M¾¹1i§r_wuþÝhø¹/É#&}=léíÝ¿?›Ù»Eîxíß-}¾úË_ÏW' ²ÿ KÏºÖØƒ/A¡ /#ìFʯªîöâ+Âý ÔÍ¿ Ñki@‘»ð0$±D°F,Àº,´Š>àdƒà ÁËõL4O:qä±Gù ±@™‹pGeìÏ+M ðF§kÅ'§¤2¹ñ‚Ì*â+Уv¬®ZòHžÂ¤5ÊÐB3M5×d³M7ÑLPÊ*ç,qÉ·ˆNÁšJm¹åø4I%kTL:£3òPEÝ““:D,ÊÐ2gÔÆEë|3SM7å4ÑK4TÒ™ŒTÃi\MÔOZUÌV£”TÕ=JTUCeMÖWsÜÿU×]y5•ÇZO%–ÐBeôW_‘=3°eY ”RT=–YgÝÒÉ…óT2k °SqÇÕIj§•ÖÒoS­ÑÆn4«Ãu|VÑ[›D—Ýy«Ý–ÂÁ¬m_~†6ØbÏU—ิ3w;>³ -;ï@ü3D…/«wQYuõÚ‹’3-!r0/.;Û6ãoUÖØY|}Žef¬8e”IÞ‹æ>{²ÐÕ’ùPŽ_Î7ןaî·EœIÞyRƒë¹ß£e Ú^¢F8á©tu³,oþš¿"Q¬úRw·Æ kµ+=í+}.òf/Á>¹¯x£u[Þ¼©¾zm¶Þ;`²¦âŽfn wwx;ãh ܼ²[vÙL¿n|T»ô¹ò†5÷¶oƒ‘Ž™sË{Ä\jÑ?:}ôÏ'ÜÔÓ~rÂÌ9üÓeŸÝ8Ê×a_µva}7[r#×qwñ^¾Nãõöœõ1ßKþrr§§þMãÏ^Þô¿A&Þõì¿G6úà‡±ù¶ÁîG¿wñǾ}ç)O?þ)×gß}ó·]~ýI§¿þîÉÿŸ÷ö7@øôϼþòG@¯u`ùì'ÀV°9ÄÛûж:bЃô`ÆXv;ðƒÃÞU6Â&ë„/ -:­iP_2Ä!YrÈ$N„Üag‡Áž¯….bQ'DîˆHTbM>'ÞЇŒbøª·E.ÆOfA«—§˜EGY-}M4âuGÆ^ÙîŒi´¢±ÈÆÎiŒÐƒ#üzE:BîLÙÂJ͘—=0.P‚$ºcyw¼AÉ@wÓÖò iH9ÎQ‘ÿUbØlx˜Aí-òuU+[M”ÈKjX.jˆS—8ÙPLv›Ý$)YIK–’t;ŽÄL¶ºÍ‡¤œe õ˜À5Ú2vÙyå»L¶K›&j°Ô(HÌbSX3”[—ÌÂÂŒ“• å4©YKk–0dÙŒÌÝ6¶S^Ïcï¦9Ë9J,¡ ^ M¶Ö)7~RœñÜcçIOË g•ï*Ùžö°Å˜U„¨k¾x¹"òš1zè0ºQî]´¢ÅQé ¹·ÇùN–ýh51åÐÝÕΤÁ´hJUJ§Œ¦µ)Je*Q7úóŸ'w3.uz>…çO ª¡6•¦äÌ+#GåéTªê”§|Œ£U«ºU*Uª=&WÅ*T¨Fõ«]kZ¯ZVœž­j»…ëÍzÓœR4®w j^åêÖ·âÕ¯­ck[Jп–k3õª^ûjXÆ2°‚åëb;Ù°H6©sÕ*e5»¹µZv°„Ýlh±ùYÌFÖ³¢e¬øè÷R3¢6´ªe*bççÚÍ®¯¬m-mS;Õ8a“ºÝmocúØÌ7­¶UžokÜ»®6¹²¥RM™K»ØV÷,FÅnvSx¼éŠõ¶ íç¼Î#ÝîæÍ*ÚEozÝ•ò«`åuj;§ÆÞÎ l@íÿ…ïÇä{4úzR)ÜÜ.QäÞæw§¥B[+Û,úà ’Ž<¬+Šàœ’^Ž$sÂ;¬ôàNp ”°"Á¤-[MçÁõ]0wÆ‘³Ò yb(âZÙ§d’ ¿!¦¢Šå[âØ”QŦ\‘hòò˜T¢S?Ú\æh{ƒc[~éœL+ÍAYœP‰½˜$Mc%·¾©=‰Èø¤J&\3¥=sÅïerÜ5»D¹‘SNèÈØ©$ëgˆgÖË)¿Lçú “™¦„Z37˜f%ö·\Š£3©–Ùe¿„oÞä,6Ål7_*MÈ2sºå:‹ Þäh­¸E繕€~³¥S¼a~fÈK¤¶:{iŸ5ÿÐÓ2´Í“)}HÇ«g£Ig–•ŒgÛ¸Z¡PûMqÂÜW®¡ª¦á­¥áýÒz×qÃË–¢,6~jøÇÃ>ØmDŠççI{‡wú£TÊ•¦=!›ÊË&\ŒµÌih–ôÎD¢wÍë ·£ý¾÷ºåÆÑrßûû׺Æîo[‹„?aÂ^pç»§‡ø®0‰CH½—i3ŽTÿ¬ãQ¼ñȉ‹h·œ\=F¹Ê ˜rë~ƒZæ‡!Í…vs/ò[Äkÿ=yxYŽÏ{÷ç™ßø+̳‘Š~ó>¶9ê¥æ˜ŠÏ½ö¯{ì)7Ñ®÷V²’²'FãD•~«ÆŸ¼þ&Ý™F†ÍùΙ‘mûUÓùå>ô®}Y¡1O¨Ì‚¦~î¿ûÙ_û‘cÖ°*ÁÏäÄ·?S©»¾¾a‰íD[{i2b§ë%\úø7|Ë/5û3œœ5^Ò?ã?ø“½ ÓÔ%dó‹F[(D›·é›®¬ºœ­ó´bK¦Á°’kœþë´ T´$±ó91ÿB!òÃ$ŠK37‘ 8·Ã¹™¹5¬+KœáH%Û´<#>!Á$$Í:#4ô¾Kó&7£¿”>p³Aås?÷ËAdò2!t´`³?Ó 3Öû%’ ?µÒAüP7ó»¿26õ C“ÃÈ{²lB~ª?ü³²i©7„«2,µ/«´ˆù³èCCÿkA=<®tS&w›Àà Âf[D- Á"4BC<°;A7¤D®zº…ËÃLÔÄ™ÁXòÄOœBLŦÂ@1Y¤E«Å[„E\ÔESÜÅ^,D_Fó ÆaL0b4ÆR<ÆddW¬etF˜»®¥g”Æê‹Æi´F 4¼kLF8üÀÛÓFid¸ÖCÒ ÇsäCrcÁÔ;ÇcLG ü“‰7 ÄÆvôÅwìB諳L³Çkì2ËBZ[BgZ¿~TÆt$µ.¾Tó6ƒtG][4c³CL›D‡¼GˆTÈ$ÛÇu´È‹ô >ƒ·d{D?ù@IìȪº¯Ô¤z™N¸È>S³³ù\H@@å H.T‘&T?3kCç lËÎÕ>õDÍçÔ™KŽ®ùµ í6•È:dÃíÛÏ ³ÏÓ´ @^ÎåPýOË$÷ô ³³í>/ÜÑ•À0´Ð!ÅÐKÿPjûޏ™CåÑmO; ÐðQc3QkS54µ¯ÁQ}Q=Rpäf‹±éìQïÌN["ˆq³;Of[¥eÓBy#É9m7ó´NÄÎ ÔÐÐlͰjNA4˜ïúR¬Èç’ÂYCATŽT¦ô8·°ÉĈÔÎZÔB=¸ÛÌIL ºJõÆÏôÔOU7áÔ‹©MÙÔ§-t4½CÕy¢°F=6}>=EMmÕâòR@½§ð|Ð[ÝÆܧ"ƒ”õÕ_m˜:|Ï_òµb%Cn íÀÉ7ƒIfuÕeEVUÖól3[¥Öe¼Py¬U,YSüàÖn•(Í¿^Mš±ñÂr5W)•\B‘Z§Ši1yW¬cŒúKW-4Ž4=Ã×pò×|e ö:¯úh¨Ã‘Öâ³M‚-´\û6y<g=Î%rX\[Î ¢X1©5½ØˆëSŒœœ´ÀûØOú—Ž=VeTX=Y/¢=ŽÌÕPó v|ÙªFYšÓ€½Ùë™ ˆÕ?’…É”ýYø Z¡ZæLNÇØn5ÙäTG¢=³Œ­Ù£%;s$T‘­7‚›‹§­Ô¨}Í©=@•¥ÆžÅZ-¢šå¬WΤM[ñÚ˜]G·}[H[µý›-¿B¥Û¯Í[õáÍ–¿³=T±ÛÀÕ‘ÉÙ­%6´eZÃU\LÙMÇ»ƒÜå“ÉýãÛÌÁ\ÂýS—ÿå\oõÜÏ5³ÜÕÒ…•1¡ h´=«e°µuÝËÚ[ÕÑYÑ7 ¹ÝTyIä¬HP“ÜÌ5Þß•ÔË+ÞÕ%ÞåuÞÚE^ððÄ ÚÌe[ËÕ¡èÅÆ“]ëÅÞ=ÕÚ[µLÜŠÝÑRÚãµTèÕ^Àý<ÔUÎïeÕù]ßö%ÝäÍ]ÇZß¿MÛµßÕ4ýí^llÜ­ƒÝÿÅ×h[2Ýe]©ßûÍŒñµÊòU_óÝ_øÖóõZû¥`.A¶¸ê­ÜæÜÖ` ®ßëEáf_Å5a®ßàçÅàì ܆áNa®àÖÕ ÆMŽùçàßÞþYÎaŽá"®á%¾ÿZ‡Ub(Ö\–,`6à¾Õ)¦âÑ•Â+Æâþ=`jåb>Ý–_ðµ[bg,cã8ÖÜÞåÞšUz_9nιÍcü=Ò7†c=Ncõäã>>ãËd­cáeâ ®â0ÍLäaF®b"–Þp±ÌI¦dAd mÎäÈääNžaK¾äÁåe4~fS~ähÞ^¿læå.fc–fbã¼¼æF†fUþdd~àmŽàL UNÑâUvgoöbs.çw6Hò “Ü1dg¦å@ößõ8I{®fâeq>ç‚FçtÿvH€¦çvÎâ&è‡vè€nÇ”½'ñDˆŽgx¦f}Þg~Î_žh'‘VÉõÃyÆhÞè“>b°^tÔµ”´qvߥÒf”–gƒÞàÒ2F„<6•2pE%§Áä½"á”æèi–éñG\òš Dl Å]VÞš6ê“Î舾eqÄB²±Ð|L?f;:“¾é²®êQ>Èø=2:¼ÖåÓZŒk褶énŽë\YæñKšûÔU&%΂Œb¸ã³Fê£vœ•sÉz™]­2(ÍÑ`£ZÂÆj©†äÁ¶j¹†×^‹kÄSåÎήӥëº^dÁ¦ìÒŽl´öH¶#kª–eË&í.víËfNíåò``ÎgØææƒmzéE…öè…í×¾êÊÆ[Ó½E߆ìØ>äÓ6íæfîlöDävnÉ.jêžìÕ®n»®Åufgl&­å~îá&îÀæí·<)–ÞmòfmšÖn¶q—oë\¥4RñôÖq~Ý£|r*_òðàV®N¾ò#Çñ7î–4ò1OñWóçò2OèlëóGíâq¿ƒsè–òõ~p¯òÎs=ï=ïs¤Ôi¤jëQ°Æ“GTÑvdÎDºòTöOçq—OóÔÇ3}lú6ÄHÁôôBv6ï÷ùþÇk3†HŠqUMwc‡¸ÐÝ»?öFïbž–5ü vlMrŸ}½†%˜æ•õX¿mVK?yR¡ž˜‡W½ÍK_ÀûöPwxjolnÄ%ÔWƒø“×;Ú½IU’^çXÜö÷–/pnÜÎÏÆNG\¨â+”g'©VöÈéÙ…o†èšÏïo¦ºíÂG\gZ|V¬ŽWò.ïú$$°[DLÓòìl žÀ{çzö¶tª{ßL4®•dl™·Ó‘‡jÝtt“‡{ý¾±’Rú†ïõ5°Žy3<øÒñ“­w{xw÷‹7t$Î8êÃ}Â4x‹'ù¾÷û¿7å}Ït"ÿ7·¡ÎkÅ??ŠŸùŠy\ŠûE{üV e6ÃP?ôϽ^kÇfΡó¨G¹Ù÷£jO{Ä1zF<þÍŽ7¤ÿ|œÖrâ‡YÑ߯»kþ„÷Çÿ¿ÞQ³GWÏ¿þ5—s¦»8ÝÓuîýÜ&çßßþò;¯ªôÇãnWÅëràÍWØß~Xþø:ˆþ,hð „ \èð!D‚ #R¬¨p¢ÅŒ7rìX#ĉ@:ùQ"J‹$=²léò寕0GÒ¬ió&Μ:wòì鳿E˜e ]H´èI¤J—2ÈÐèÓ¤*9mjõjѪX·r}¨é×¥a¹ŽíjVlÔ„óDid›’­H“mº•Yö,Þ³wóòUº·åß—›îk8"ȵAßlèXâã”’%»¥{ør^¹˜7[-Lµ¯g¿œGwt|Ó²ÚÆ”Qb4]Ùi[ vIÓ]û¶ËÐ1A“Öob¨©¿Õ {öÜä¨3×è»ùèçSùJŸ ýzðŪaß¹ûðíâÓ^/¯Ý<úð]«;§Í>½uåáEz¯Oœþxî‘ÃGo¼?|ï!f˜€,`i½&qu™tƒ­ýד!ÈÜb•¡pÔÕÆ¡†C…(߈î•`f‡¸Û‰)ž¸b‹ ÆhŒËyhâŒfÕ¸ÿÕŽ9Õ£ ºÈÛ‡AòØ"Ôý´$“M&éã“O’È™”!Vi›‘Þv%’7¸e–99&™erItgŽ(%—jª&œqzäfIr^ÅæetÚh'Ÿ}vˆØƒZ^ážùùß_‚y(£Ž—ŒàIÕhnŠªø›ž”jz'yäö馕y)¦¡šdvo²fd©6&§²è%©¸e*+®B¯øága\±æ*¢¥µ.:,²(FÔ ãÛ C²—¬WÆ{,µÙbØ©p¿rש«Sj[¨^T6wë¸é†+ßw­M»® é¹ÛÊ{ïfðBf}Þ¦ºß´ø~K«µØ |>0½":ˆS«±%ö`… Üfti"|ñzcLq½öbü1a#|&è’ 2Ê€‰|0ɽa—2Ì‚­<1fzšÌmÌÿ9Oç1Í5»ü²ÎA«d&ÑN^¬¦Í4 ½4Ó@ç‰ãÌMK=õÓ>ÿì4ÕYkq¾Pc½5ØagÕqÅåÝ,6ÚÙºyëÙ'§ý6ÜU4ÝFëêWÝy×7ßj¦ôœLµiß…ã *àwý¢á›:Øàâî V—Ž[î¨â?2K¡8KÜ–^i¶`H€²ªj¼—«ž%ä“¶.)±‡^­ä?ûí«ëçëó~â²S^»¾uN:ùîÉÏXXñîFè0¬Ò«Ü /îû¿ÑK¨õÐFûçÊ‹!óá»ë«}¿§EzêÈËL<„Þ×.éÙ ;>þ–¿lý›§ïš÷^—êFN(¬_TNGœãHkO¬º_þ"˜¸¿aO-uI¸<§›÷4/ßk°Þ¤¯ÈI°„µ‹]êHò«Êk„ï3 ù<(l%á‚Ú  sX$á¥p9à[M~úEÀ¾°‡É‘xȪ‡:|¢ÕxX’ =ps¯Y…lXÄ-jN€ ãß¾‚õ<‡}oŒáƒ" 6«"rQ\$_ãÅÌè„t¤àõ'Ç=ªq‚aŸ¨™G‘«Û `èF+²‘hRÙ!9ÈþÒ‘ŽÛ Þ2¹EþQ“žl’%C‰–UR”¦¤$ÈJyÊUš-•¬|%ÌT¹CXÒòh)“e-sY°‘é²—ãÂå,})Ì\3˜Ã<榊é5d2“QʼZ3£É§g.SšvÖ45¡yÍmæ(›eã&8+§3o†œäüf9ÓIH¡SÑl':Ý)Ïs1 žó¦=»vÏ}Úªžüü§6ƒ–O€²r ú$(Bû˜3ƒ&Ô’ =hC#Ê©©=T¢r¬hÕ,ªÑáQ £Í¡G3úÑ‘J±i!%iþNºK”ÿ²ÔxZSiKuSÍ}²¦KŠ©5g:D=â´™:Ýé:{ÊÌŸ¢Ž‘B-œM“šÉ~έ,_±Kç$GÔ£ÆsšLEaH´±$‘ªiÓ©ÉŠ÷9—’µ¨¥ójÜÀzÕöõKBmÝW½8¥ š­/m* 3Õy…õŒ®Y`dÐÇ †ð‹n³kÖeGAï‡gÝ!Ã|ˆAÀQ5làaKÑún‘í*ÙÆJXÇÒP°Ô f¿ÊÙ⼕…ƒ}mÃXØ=ç‘q¬}=á µTÚɵ©[›ØDê­Ê4”]!•ÈÛv6·ú™Àžç¯õÙö·Àm•ÿ°«BAÑJ£¡ÝÌ^k]ŠûØ_Ǩ¸ÖŒ±ØT­ œÕBo2Ìrî¿pvC ŽJœòM,}+;ÃѶ†L”êZ÷ß»O²Ï¥ìq"ÄÓ.±®+ÕP|üȬª0²üË¢z£çE,N½.ïšN4 `g&¸DVñDV¥ÒX'0Þ,‹o¬ããYuÇ>¦Œ,äAÕ¸Èc2’“¬ä%3¹ÉN~2”£,å)S¹ÊV¾2–³¬å-s¹Ë^¾N@;libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/CookieTag.html0000644000175000017500000005113110404045230030245 0ustar arnaudarnaud00000000000000 CookieTag (Apache Struts API Documentation)

    org.apache.struts.taglib.bean
    Class CookieTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.bean.CookieTag
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class CookieTag
    extends javax.servlet.jsp.tagext.TagSupport

    Define a scripting variable based on the value(s) of the specified cookie received with this request.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:34:00 +0100 (Fri, 22 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String id
              The name of the scripting variable that will be exposed as a page scope attribute.
    protected static MessageResources messages
              The message resources for this package.
    protected  java.lang.String multiple
              Return an array of Cookies if multiple is non-null.
    protected  java.lang.String name
              The name of the cookie whose value is to be exposed.
    protected  java.lang.String value
              The default value to return if no cookie of the specified name is found.
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    CookieTag()
               
     
    Method Summary
     int doStartTag()
              Retrieve the required property and expose it as a scripting variable.
     java.lang.String getId()
               
     java.lang.String getMultiple()
               
     java.lang.String getName()
               
     java.lang.String getValue()
               
     void release()
              Release all allocated resources.
     void setId(java.lang.String id)
               
     void setMultiple(java.lang.String multiple)
               
     void setName(java.lang.String name)
               
     void setValue(java.lang.String value)
               
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    doEndTag, findAncestorWithClass, getParent, getValue, getValues, removeValue, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    id

    protected java.lang.String id
    The name of the scripting variable that will be exposed as a page scope attribute.


    messages

    protected static MessageResources messages
    The message resources for this package.


    multiple

    protected java.lang.String multiple
    Return an array of Cookies if multiple is non-null.


    name

    protected java.lang.String name
    The name of the cookie whose value is to be exposed.


    value

    protected java.lang.String value
    The default value to return if no cookie of the specified name is found.

    Constructor Detail

    CookieTag

    public CookieTag()
    Method Detail

    getId

    public java.lang.String getId()
    Overrides:
    getId in class javax.servlet.jsp.tagext.TagSupport

    setId

    public void setId(java.lang.String id)
    Overrides:
    setId in class javax.servlet.jsp.tagext.TagSupport

    getMultiple

    public java.lang.String getMultiple()

    setMultiple

    public void setMultiple(java.lang.String multiple)

    getName

    public java.lang.String getName()

    setName

    public void setName(java.lang.String name)

    getValue

    public java.lang.String getValue()

    setValue

    public void setValue(java.lang.String value)

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Retrieve the required property and expose it as a scripting variable.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.TagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    release

    public void release()
    Release all allocated resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class javax.servlet.jsp.tagext.TagSupport


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/CookieTei.html0000644000175000017500000002652110404045212030260 0ustar arnaudarnaud00000000000000 CookieTei (Apache Struts API Documentation)

    org.apache.struts.taglib.bean
    Class CookieTei

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagExtraInfo
            |
            +--org.apache.struts.taglib.bean.CookieTei
    

    public class CookieTei
    extends javax.servlet.jsp.tagext.TagExtraInfo

    Implementation of TagExtraInfo for the cookie tag, identifying the scripting object(s) to be made visible.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:34:00 +0100 (Fri, 22 Aug 2003) $
    Author:
    Craig R. McClanahan

    Field Summary
     
    Fields inherited from class javax.servlet.jsp.tagext.TagExtraInfo
     
    Constructor Summary
    CookieTei()
               
     
    Method Summary
     javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
              Return information about the scripting variables to be created.
     
    Methods inherited from class javax.servlet.jsp.tagext.TagExtraInfo
    getTagInfo, isValid, setTagInfo
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    CookieTei

    public CookieTei()
    Method Detail

    getVariableInfo

    public javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
    Return information about the scripting variables to be created.

    Overrides:
    getVariableInfo in class javax.servlet.jsp.tagext.TagExtraInfo


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/DefineTag.html0000644000175000017500000007433510404045214030243 0ustar arnaudarnaud00000000000000 DefineTag (Apache Struts API Documentation)

    org.apache.struts.taglib.bean
    Class DefineTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.bean.DefineTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    NestedDefineTag

    public class DefineTag
    extends javax.servlet.jsp.tagext.BodyTagSupport

    Define a scripting variable based on the value(s) of the specified bean property.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:34:00 +0100 (Fri, 22 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String body
              The body content of this tag (if any).
    protected  java.lang.String id
              The name of the scripting variable that will be exposed as a page scope attribute.
    protected static MessageResources messages
              The message resources for this package.
    protected  java.lang.String name
              The name of the bean owning the property to be exposed.
    protected  java.lang.String property
              The name of the property to be retrieved.
    protected  java.lang.String scope
              The scope within which to search for the specified bean.
    protected  java.lang.String toScope
              The scope within which the newly defined bean will be creatd.
    protected  java.lang.String type
              The fully qualified Java class name of the value to be exposed.
    protected  java.lang.String value
              The (String) value to which the defined bean will be set.
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    DefineTag()
               
     
    Method Summary
     int doAfterBody()
              Save the body content of this tag (if any), or throw a JspException if the value was already defined.
     int doEndTag()
              Retrieve the required property and expose it as a scripting variable.
     int doStartTag()
              Check if we need to evaluate the body of the tag
     java.lang.String getId()
               
     java.lang.String getName()
               
     java.lang.String getProperty()
               
     java.lang.String getScope()
               
     java.lang.String getToScope()
               
     java.lang.String getType()
               
     java.lang.String getValue()
               
     void release()
              Release all allocated resources.
     void setId(java.lang.String id)
               
     void setName(java.lang.String name)
               
     void setProperty(java.lang.String property)
               
     void setScope(java.lang.String scope)
               
     void setToScope(java.lang.String toScope)
               
     void setType(java.lang.String type)
               
     void setValue(java.lang.String value)
               
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getParent, getValue, getValues, removeValue, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    messages

    protected static MessageResources messages
    The message resources for this package.


    body

    protected java.lang.String body
    The body content of this tag (if any).


    id

    protected java.lang.String id
    The name of the scripting variable that will be exposed as a page scope attribute.


    name

    protected java.lang.String name
    The name of the bean owning the property to be exposed.


    property

    protected java.lang.String property
    The name of the property to be retrieved.


    scope

    protected java.lang.String scope
    The scope within which to search for the specified bean.


    toScope

    protected java.lang.String toScope
    The scope within which the newly defined bean will be creatd.


    type

    protected java.lang.String type
    The fully qualified Java class name of the value to be exposed.


    value

    protected java.lang.String value
    The (String) value to which the defined bean will be set.

    Constructor Detail

    DefineTag

    public DefineTag()
    Method Detail

    getId

    public java.lang.String getId()
    Overrides:
    getId in class javax.servlet.jsp.tagext.TagSupport

    setId

    public void setId(java.lang.String id)
    Overrides:
    setId in class javax.servlet.jsp.tagext.TagSupport

    getName

    public java.lang.String getName()

    setName

    public void setName(java.lang.String name)

    getProperty

    public java.lang.String getProperty()

    setProperty

    public void setProperty(java.lang.String property)

    getScope

    public java.lang.String getScope()

    setScope

    public void setScope(java.lang.String scope)

    getToScope

    public java.lang.String getToScope()

    setToScope

    public void setToScope(java.lang.String toScope)

    getType

    public java.lang.String getType()

    setType

    public void setType(java.lang.String type)

    getValue

    public java.lang.String getValue()

    setValue

    public void setValue(java.lang.String value)

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Check if we need to evaluate the body of the tag

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doAfterBody

    public int doAfterBody()
                    throws javax.servlet.jsp.JspException
    Save the body content of this tag (if any), or throw a JspException if the value was already defined.

    Specified by:
    doAfterBody in interface javax.servlet.jsp.tagext.BodyTag
    Overrides:
    doAfterBody in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if value was defined by an attribute

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Retrieve the required property and expose it as a scripting variable.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    release

    public void release()
    Release all allocated resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class javax.servlet.jsp.tagext.BodyTagSupport


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/DefineTei.html0000644000175000017500000002652110404045234030245 0ustar arnaudarnaud00000000000000 DefineTei (Apache Struts API Documentation)

    org.apache.struts.taglib.bean
    Class DefineTei

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagExtraInfo
            |
            +--org.apache.struts.taglib.bean.DefineTei
    

    public class DefineTei
    extends javax.servlet.jsp.tagext.TagExtraInfo

    Implementation of TagExtraInfo for the define tag, identifying the scripting object(s) to be made visible.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:34:00 +0100 (Fri, 22 Aug 2003) $
    Author:
    Craig R. McClanahan

    Field Summary
     
    Fields inherited from class javax.servlet.jsp.tagext.TagExtraInfo
     
    Constructor Summary
    DefineTei()
               
     
    Method Summary
     javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
              Return information about the scripting variables to be created.
     
    Methods inherited from class javax.servlet.jsp.tagext.TagExtraInfo
    getTagInfo, isValid, setTagInfo
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    DefineTei

    public DefineTei()
    Method Detail

    getVariableInfo

    public javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
    Return information about the scripting variables to be created.

    Overrides:
    getVariableInfo in class javax.servlet.jsp.tagext.TagExtraInfo


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/HeaderTag.html0000644000175000017500000005140710404045236030240 0ustar arnaudarnaud00000000000000 HeaderTag (Apache Struts API Documentation)

    org.apache.struts.taglib.bean
    Class HeaderTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.bean.HeaderTag
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class HeaderTag
    extends javax.servlet.jsp.tagext.TagSupport

    Define a scripting variable based on the value(s) of the specified header received with this request.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:34:00 +0100 (Fri, 22 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String id
              The name of the scripting variable that will be exposed as a page scope attribute.
    protected static MessageResources messages
              The message resources for this package.
    protected  java.lang.String multiple
              Return an array of header values if multiple is non-null.
    protected  java.lang.String name
              The name of the header whose value is to be exposed.
    protected  java.lang.String value
              The default value to return if no header of the specified name is found.
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    HeaderTag()
               
     
    Method Summary
     int doStartTag()
              Retrieve the required property and expose it as a scripting variable.
     java.lang.String getId()
               
     java.lang.String getMultiple()
               
     java.lang.String getName()
               
     java.lang.String getValue()
               
     void release()
              Release all allocated resources.
     void setId(java.lang.String id)
               
     void setMultiple(java.lang.String multiple)
               
     void setName(java.lang.String name)
               
     void setValue(java.lang.String value)
               
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    doEndTag, findAncestorWithClass, getParent, getValue, getValues, removeValue, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    id

    protected java.lang.String id
    The name of the scripting variable that will be exposed as a page scope attribute.


    messages

    protected static MessageResources messages
    The message resources for this package.


    multiple

    protected java.lang.String multiple
    Return an array of header values if multiple is non-null.


    name

    protected java.lang.String name
    The name of the header whose value is to be exposed.


    value

    protected java.lang.String value
    The default value to return if no header of the specified name is found.

    Constructor Detail

    HeaderTag

    public HeaderTag()
    Method Detail

    getId

    public java.lang.String getId()
    Overrides:
    getId in class javax.servlet.jsp.tagext.TagSupport

    setId

    public void setId(java.lang.String id)
    Overrides:
    setId in class javax.servlet.jsp.tagext.TagSupport

    getMultiple

    public java.lang.String getMultiple()

    setMultiple

    public void setMultiple(java.lang.String multiple)

    getName

    public java.lang.String getName()

    setName

    public void setName(java.lang.String name)

    getValue

    public java.lang.String getValue()

    setValue

    public void setValue(java.lang.String value)

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Retrieve the required property and expose it as a scripting variable.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.TagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    release

    public void release()
    Release all allocated resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class javax.servlet.jsp.tagext.TagSupport


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/HeaderTei.html0000644000175000017500000002652310404045210030237 0ustar arnaudarnaud00000000000000 HeaderTei (Apache Struts API Documentation)

    org.apache.struts.taglib.bean
    Class HeaderTei

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagExtraInfo
            |
            +--org.apache.struts.taglib.bean.HeaderTei
    

    public class HeaderTei
    extends javax.servlet.jsp.tagext.TagExtraInfo

    Implementation of TagExtraInfo for the header tag, identifying the scripting object(s) to be made visible.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:34:00 +0100 (Fri, 22 Aug 2003) $
    Author:
    Craig R. McClanahan

    Field Summary
     
    Fields inherited from class javax.servlet.jsp.tagext.TagExtraInfo
     
    Constructor Summary
    HeaderTei()
               
     
    Method Summary
     javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
              Return information about the scripting variables to be created.
     
    Methods inherited from class javax.servlet.jsp.tagext.TagExtraInfo
    getTagInfo, isValid, setTagInfo
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    HeaderTei

    public HeaderTei()
    Method Detail

    getVariableInfo

    public javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
    Return information about the scripting variables to be created.

    Overrides:
    getVariableInfo in class javax.servlet.jsp.tagext.TagExtraInfo


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/IncludeTag.html0000644000175000017500000006405610404045230030431 0ustar arnaudarnaud00000000000000 IncludeTag (Apache Struts API Documentation)

    org.apache.struts.taglib.bean
    Class IncludeTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.bean.IncludeTag
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class IncludeTag
    extends javax.servlet.jsp.tagext.TagSupport

    Define the contents of a specified intra-application request as a page scope attribute of type java.lang.String. If the current request is part of a session, the session identifier will be included in the generated request, so it will be part of the same session.

    FIXME: In a servlet 2.3 environment, we can use a wrapped response passed to RequestDispatcher.include().

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:34:00 +0100 (Fri, 22 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String anchor
              The anchor to be added to the end of the generated hyperlink.
    protected static int BUFFER_SIZE
              Buffer size to use when reading the input stream.
    protected  java.lang.String forward
              The name of the global ActionForward that contains a path to our requested resource.
    protected  java.lang.String href
              The absolute URL to the resource to be included.
    protected  java.lang.String id
              The name of the scripting variable that will be exposed as a page scope attribute.
    protected static MessageResources messages
              The message resources for this package.
    protected  java.lang.String page
              The context-relative URI of the page or servlet to be included.
    protected  boolean transaction
              Include transaction token (if any) in the hyperlink?
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    IncludeTag()
               
     
    Method Summary
     int doStartTag()
              Define the contents returned for the specified resource as a page scope attribute.
     java.lang.String getAnchor()
               
     java.lang.String getForward()
               
     java.lang.String getHref()
               
     java.lang.String getId()
               
     java.lang.String getPage()
               
     boolean getTransaction()
               
     void release()
              Release all allocated resources.
     void setAnchor(java.lang.String anchor)
               
     void setForward(java.lang.String forward)
               
     void setHref(java.lang.String href)
               
     void setId(java.lang.String id)
               
     void setName(java.lang.String name)
              Deprecated. use setPage(String) instead
     void setPage(java.lang.String page)
               
     void setTransaction(boolean transaction)
               
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    doEndTag, findAncestorWithClass, getParent, getValue, getValues, removeValue, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    BUFFER_SIZE

    protected static final int BUFFER_SIZE
    Buffer size to use when reading the input stream.

    See Also:
    Constant Field Values

    anchor

    protected java.lang.String anchor
    The anchor to be added to the end of the generated hyperlink.


    forward

    protected java.lang.String forward
    The name of the global ActionForward that contains a path to our requested resource.


    href

    protected java.lang.String href
    The absolute URL to the resource to be included.


    id

    protected java.lang.String id
    The name of the scripting variable that will be exposed as a page scope attribute.


    messages

    protected static MessageResources messages
    The message resources for this package.


    page

    protected java.lang.String page
    The context-relative URI of the page or servlet to be included.


    transaction

    protected boolean transaction
    Include transaction token (if any) in the hyperlink?

    Constructor Detail

    IncludeTag

    public IncludeTag()
    Method Detail

    getAnchor

    public java.lang.String getAnchor()

    setAnchor

    public void setAnchor(java.lang.String anchor)

    getForward

    public java.lang.String getForward()

    setForward

    public void setForward(java.lang.String forward)

    getHref

    public java.lang.String getHref()

    setHref

    public void setHref(java.lang.String href)

    getId

    public java.lang.String getId()
    Overrides:
    getId in class javax.servlet.jsp.tagext.TagSupport

    setId

    public void setId(java.lang.String id)
    Overrides:
    setId in class javax.servlet.jsp.tagext.TagSupport

    setName

    public void setName(java.lang.String name)
    Deprecated. use setPage(String) instead

    Deprecated method to set the "name" attribute, which has been replaced by the "page" attribute.


    getPage

    public java.lang.String getPage()

    setPage

    public void setPage(java.lang.String page)

    getTransaction

    public boolean getTransaction()

    setTransaction

    public void setTransaction(boolean transaction)

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Define the contents returned for the specified resource as a page scope attribute.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.TagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP error occurs

    release

    public void release()
    Release all allocated resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class javax.servlet.jsp.tagext.TagSupport


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/IncludeTei.html0000644000175000017500000002655010404045212030434 0ustar arnaudarnaud00000000000000 IncludeTei (Apache Struts API Documentation)

    org.apache.struts.taglib.bean
    Class IncludeTei

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagExtraInfo
            |
            +--org.apache.struts.taglib.bean.IncludeTei
    

    public class IncludeTei
    extends javax.servlet.jsp.tagext.TagExtraInfo

    Implementation of TagExtraInfo for the include tag, identifying the scripting object(s) to be made visible.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:34:00 +0100 (Fri, 22 Aug 2003) $
    Author:
    Craig R. McClanahan

    Field Summary
     
    Fields inherited from class javax.servlet.jsp.tagext.TagExtraInfo
     
    Constructor Summary
    IncludeTei()
               
     
    Method Summary
     javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
              Return information about the scripting variables to be created.
     
    Methods inherited from class javax.servlet.jsp.tagext.TagExtraInfo
    getTagInfo, isValid, setTagInfo
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    IncludeTei

    public IncludeTei()
    Method Detail

    getVariableInfo

    public javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
    Return information about the scripting variables to be created.

    Overrides:
    getVariableInfo in class javax.servlet.jsp.tagext.TagExtraInfo


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/MessageTag.html0000644000175000017500000010123410404045226030425 0ustar arnaudarnaud00000000000000 MessageTag (Apache Struts API Documentation)

    org.apache.struts.taglib.bean
    Class MessageTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.bean.MessageTag
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    NestedMessageTag

    public class MessageTag
    extends javax.servlet.jsp.tagext.TagSupport

    Custom tag that retrieves an internationalized messages string (with optional parametric replacement) from the ActionResources object stored as a context attribute by our associated ActionServlet implementation.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:34:00 +0100 (Fri, 22 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String arg0
              The first optional argument.
    protected  java.lang.String arg1
              The second optional argument.
    protected  java.lang.String arg2
              The third optional argument.
    protected  java.lang.String arg3
              The fourth optional argument.
    protected  java.lang.String arg4
              The fifth optional argument.
    protected  java.lang.String bundle
              The servlet context attribute key for our resources.
    protected static java.util.Locale defaultLocale
              The default Locale for our server.
    protected  java.lang.String key
              The message key of the message to be retrieved.
    protected  java.lang.String localeKey
              The session scope key under which our Locale is stored.
    protected static MessageResources messages
              The message resources for this package.
    protected  java.lang.String name
              Name of the bean that contains the message key.
    protected  java.lang.String property
              Name of the property to be accessed on the specified bean.
    protected  java.lang.String scope
              The scope to be searched to retrieve the specified bean.
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    MessageTag()
               
     
    Method Summary
     int doStartTag()
              Process the start tag.
     java.lang.String getArg0()
               
     java.lang.String getArg1()
               
     java.lang.String getArg2()
               
     java.lang.String getArg3()
               
     java.lang.String getArg4()
               
     java.lang.String getBundle()
               
     java.lang.String getKey()
               
     java.lang.String getLocale()
               
     java.lang.String getName()
               
     java.lang.String getProperty()
               
     java.lang.String getScope()
               
     void release()
              Release any acquired resources.
     void setArg0(java.lang.String arg0)
               
     void setArg1(java.lang.String arg1)
               
     void setArg2(java.lang.String arg2)
               
     void setArg3(java.lang.String arg3)
               
     void setArg4(java.lang.String arg4)
               
     void setBundle(java.lang.String bundle)
               
     void setKey(java.lang.String key)
               
     void setLocale(java.lang.String localeKey)
               
     void setName(java.lang.String name)
               
     void setProperty(java.lang.String property)
               
     void setScope(java.lang.String scope)
               
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    doEndTag, findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    arg0

    protected java.lang.String arg0
    The first optional argument.


    arg1

    protected java.lang.String arg1
    The second optional argument.


    arg2

    protected java.lang.String arg2
    The third optional argument.


    arg3

    protected java.lang.String arg3
    The fourth optional argument.


    arg4

    protected java.lang.String arg4
    The fifth optional argument.


    bundle

    protected java.lang.String bundle
    The servlet context attribute key for our resources.


    defaultLocale

    protected static final java.util.Locale defaultLocale
    The default Locale for our server.


    key

    protected java.lang.String key
    The message key of the message to be retrieved.


    name

    protected java.lang.String name
    Name of the bean that contains the message key.


    property

    protected java.lang.String property
    Name of the property to be accessed on the specified bean.


    scope

    protected java.lang.String scope
    The scope to be searched to retrieve the specified bean.


    localeKey

    protected java.lang.String localeKey
    The session scope key under which our Locale is stored.


    messages

    protected static MessageResources messages
    The message resources for this package.

    Constructor Detail

    MessageTag

    public MessageTag()
    Method Detail

    getArg0

    public java.lang.String getArg0()

    setArg0

    public void setArg0(java.lang.String arg0)

    getArg1

    public java.lang.String getArg1()

    setArg1

    public void setArg1(java.lang.String arg1)

    getArg2

    public java.lang.String getArg2()

    setArg2

    public void setArg2(java.lang.String arg2)

    getArg3

    public java.lang.String getArg3()

    setArg3

    public void setArg3(java.lang.String arg3)

    getArg4

    public java.lang.String getArg4()

    setArg4

    public void setArg4(java.lang.String arg4)

    getBundle

    public java.lang.String getBundle()

    setBundle

    public void setBundle(java.lang.String bundle)

    getKey

    public java.lang.String getKey()

    setKey

    public void setKey(java.lang.String key)

    getName

    public java.lang.String getName()

    setName

    public void setName(java.lang.String name)

    getProperty

    public java.lang.String getProperty()

    setProperty

    public void setProperty(java.lang.String property)

    getScope

    public java.lang.String getScope()

    setScope

    public void setScope(java.lang.String scope)

    getLocale

    public java.lang.String getLocale()

    setLocale

    public void setLocale(java.lang.String localeKey)

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Process the start tag.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.TagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    release

    public void release()
    Release any acquired resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class javax.servlet.jsp.tagext.TagSupport


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/PageTag.html0000644000175000017500000004257410404045250027725 0ustar arnaudarnaud00000000000000 PageTag (Apache Struts API Documentation)

    org.apache.struts.taglib.bean
    Class PageTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.bean.PageTag
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class PageTag
    extends javax.servlet.jsp.tagext.TagSupport

    Define a scripting variable that exposes the requested page context item as a scripting variable and a page scope bean.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:34:00 +0100 (Fri, 22 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String id
              The name of the scripting variable that will be exposed as a page scope attribute.
    protected static MessageResources messages
              The message resources for this package.
    protected  java.lang.String property
              The name of the page context property to be retrieved.
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    PageTag()
               
     
    Method Summary
     int doStartTag()
              Retrieve the required configuration object and expose it as a scripting variable.
     java.lang.String getId()
               
     java.lang.String getProperty()
               
     void release()
              Release all allocated resources.
     void setId(java.lang.String id)
               
     void setProperty(java.lang.String property)
               
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    doEndTag, findAncestorWithClass, getParent, getValue, getValues, removeValue, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    id

    protected java.lang.String id
    The name of the scripting variable that will be exposed as a page scope attribute.


    messages

    protected static MessageResources messages
    The message resources for this package.


    property

    protected java.lang.String property
    The name of the page context property to be retrieved.

    Constructor Detail

    PageTag

    public PageTag()
    Method Detail

    getId

    public java.lang.String getId()
    Overrides:
    getId in class javax.servlet.jsp.tagext.TagSupport

    setId

    public void setId(java.lang.String id)
    Overrides:
    setId in class javax.servlet.jsp.tagext.TagSupport

    getProperty

    public java.lang.String getProperty()

    setProperty

    public void setProperty(java.lang.String property)

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Retrieve the required configuration object and expose it as a scripting variable.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.TagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    release

    public void release()
    Release all allocated resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class javax.servlet.jsp.tagext.TagSupport


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/PageTei.html0000644000175000017500000002645510404045230027731 0ustar arnaudarnaud00000000000000 PageTei (Apache Struts API Documentation)

    org.apache.struts.taglib.bean
    Class PageTei

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagExtraInfo
            |
            +--org.apache.struts.taglib.bean.PageTei
    

    public class PageTei
    extends javax.servlet.jsp.tagext.TagExtraInfo

    Implementation of TagExtraInfo for the page tag, identifying the scripting object(s) to be made visible.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:34:00 +0100 (Fri, 22 Aug 2003) $
    Author:
    Craig R. McClanahan

    Field Summary
     
    Fields inherited from class javax.servlet.jsp.tagext.TagExtraInfo
     
    Constructor Summary
    PageTei()
               
     
    Method Summary
     javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
              Return information about the scripting variables to be created.
     
    Methods inherited from class javax.servlet.jsp.tagext.TagExtraInfo
    getTagInfo, isValid, setTagInfo
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    PageTei

    public PageTei()
    Method Detail

    getVariableInfo

    public javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
    Return information about the scripting variables to be created.

    Overrides:
    getVariableInfo in class javax.servlet.jsp.tagext.TagExtraInfo


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/ParameterTag.html0000644000175000017500000005161110404045224030762 0ustar arnaudarnaud00000000000000 ParameterTag (Apache Struts API Documentation)

    org.apache.struts.taglib.bean
    Class ParameterTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.bean.ParameterTag
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class ParameterTag
    extends javax.servlet.jsp.tagext.TagSupport

    Define a scripting variable based on the value(s) of the specified parameter received with this request.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:34:00 +0100 (Fri, 22 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String id
              The name of the scripting variable that will be exposed as a page scope attribute.
    protected static MessageResources messages
              The message resources for this package.
    protected  java.lang.String multiple
              Return an array of parameter values if multiple is non-null.
    protected  java.lang.String name
              The name of the parameter whose value is to be exposed.
    protected  java.lang.String value
              The default value to return if no parameter of the specified name is found.
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    ParameterTag()
               
     
    Method Summary
     int doStartTag()
              Retrieve the required property and expose it as a scripting variable.
     java.lang.String getId()
               
     java.lang.String getMultiple()
               
     java.lang.String getName()
               
     java.lang.String getValue()
               
     void release()
              Release all allocated resources.
     void setId(java.lang.String id)
               
     void setMultiple(java.lang.String multiple)
               
     void setName(java.lang.String name)
               
     void setValue(java.lang.String value)
               
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    doEndTag, findAncestorWithClass, getParent, getValue, getValues, removeValue, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    id

    protected java.lang.String id
    The name of the scripting variable that will be exposed as a page scope attribute.


    messages

    protected static MessageResources messages
    The message resources for this package.


    multiple

    protected java.lang.String multiple
    Return an array of parameter values if multiple is non-null.


    name

    protected java.lang.String name
    The name of the parameter whose value is to be exposed.


    value

    protected java.lang.String value
    The default value to return if no parameter of the specified name is found.

    Constructor Detail

    ParameterTag

    public ParameterTag()
    Method Detail

    getId

    public java.lang.String getId()
    Overrides:
    getId in class javax.servlet.jsp.tagext.TagSupport

    setId

    public void setId(java.lang.String id)
    Overrides:
    setId in class javax.servlet.jsp.tagext.TagSupport

    getMultiple

    public java.lang.String getMultiple()

    setMultiple

    public void setMultiple(java.lang.String multiple)

    getName

    public java.lang.String getName()

    setName

    public void setName(java.lang.String name)

    getValue

    public java.lang.String getValue()

    setValue

    public void setValue(java.lang.String value)

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Retrieve the required property and expose it as a scripting variable.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.TagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    release

    public void release()
    Release all allocated resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class javax.servlet.jsp.tagext.TagSupport


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/ParameterTei.html0000644000175000017500000002662410404045246031002 0ustar arnaudarnaud00000000000000 ParameterTei (Apache Struts API Documentation)

    org.apache.struts.taglib.bean
    Class ParameterTei

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagExtraInfo
            |
            +--org.apache.struts.taglib.bean.ParameterTei
    

    public class ParameterTei
    extends javax.servlet.jsp.tagext.TagExtraInfo

    Implementation of TagExtraInfo for the parameter tag, identifying the scripting object(s) to be made visible.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:34:00 +0100 (Fri, 22 Aug 2003) $
    Author:
    Craig R. McClanahan

    Field Summary
     
    Fields inherited from class javax.servlet.jsp.tagext.TagExtraInfo
     
    Constructor Summary
    ParameterTei()
               
     
    Method Summary
     javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
              Return information about the scripting variables to be created.
     
    Methods inherited from class javax.servlet.jsp.tagext.TagExtraInfo
    getTagInfo, isValid, setTagInfo
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    ParameterTei

    public ParameterTei()
    Method Detail

    getVariableInfo

    public javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
    Return information about the scripting variables to be created.

    Overrides:
    getVariableInfo in class javax.servlet.jsp.tagext.TagExtraInfo


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/ResourceTag.html0000644000175000017500000004756310404045236030647 0ustar arnaudarnaud00000000000000 ResourceTag (Apache Struts API Documentation)

    org.apache.struts.taglib.bean
    Class ResourceTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.bean.ResourceTag
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class ResourceTag
    extends javax.servlet.jsp.tagext.TagSupport

    Define a scripting variable based on the contents of the specified web application resource.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:34:00 +0100 (Fri, 22 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
    protected static int BUFFER_SIZE
              Buffer size to use when reading the input stream.
    protected  java.lang.String id
              The name of the scripting variable that will be exposed as a page scope attribute.
    protected  java.lang.String input
              Return an InputStream to the specified resource if this is non-null.
    protected static MessageResources messages
              The message resources for this package.
    protected  java.lang.String name
              The module-relative URI of the resource whose contents are to be exposed.
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    ResourceTag()
               
     
    Method Summary
     int doStartTag()
              Retrieve the required property and expose it as a scripting variable.
     java.lang.String getId()
               
     java.lang.String getInput()
               
     java.lang.String getName()
               
     void release()
              Release all allocated resources.
     void setId(java.lang.String id)
               
     void setInput(java.lang.String input)
               
     void setName(java.lang.String name)
               
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    doEndTag, findAncestorWithClass, getParent, getValue, getValues, removeValue, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    BUFFER_SIZE

    protected static final int BUFFER_SIZE
    Buffer size to use when reading the input stream.

    See Also:
    Constant Field Values

    id

    protected java.lang.String id
    The name of the scripting variable that will be exposed as a page scope attribute.


    input

    protected java.lang.String input
    Return an InputStream to the specified resource if this is non-null.


    messages

    protected static MessageResources messages
    The message resources for this package.


    name

    protected java.lang.String name
    The module-relative URI of the resource whose contents are to be exposed.

    Constructor Detail

    ResourceTag

    public ResourceTag()
    Method Detail

    getId

    public java.lang.String getId()
    Overrides:
    getId in class javax.servlet.jsp.tagext.TagSupport

    setId

    public void setId(java.lang.String id)
    Overrides:
    setId in class javax.servlet.jsp.tagext.TagSupport

    getInput

    public java.lang.String getInput()

    setInput

    public void setInput(java.lang.String input)

    getName

    public java.lang.String getName()

    setName

    public void setName(java.lang.String name)

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Retrieve the required property and expose it as a scripting variable.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.TagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    release

    public void release()
    Release all allocated resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class javax.servlet.jsp.tagext.TagSupport


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/ResourceTei.html0000644000175000017500000002656710404045216030654 0ustar arnaudarnaud00000000000000 ResourceTei (Apache Struts API Documentation)

    org.apache.struts.taglib.bean
    Class ResourceTei

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagExtraInfo
            |
            +--org.apache.struts.taglib.bean.ResourceTei
    

    public class ResourceTei
    extends javax.servlet.jsp.tagext.TagExtraInfo

    Implementation of TagExtraInfo for the resource tag, identifying the scripting object(s) to be made visible.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:34:00 +0100 (Fri, 22 Aug 2003) $
    Author:
    Craig R. McClanahan

    Field Summary
     
    Fields inherited from class javax.servlet.jsp.tagext.TagExtraInfo
     
    Constructor Summary
    ResourceTei()
               
     
    Method Summary
     javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
              Return information about the scripting variables to be created.
     
    Methods inherited from class javax.servlet.jsp.tagext.TagExtraInfo
    getTagInfo, isValid, setTagInfo
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    ResourceTei

    public ResourceTei()
    Method Detail

    getVariableInfo

    public javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
    Return information about the scripting variables to be created.

    Overrides:
    getVariableInfo in class javax.servlet.jsp.tagext.TagExtraInfo


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/SizeTag.html0000644000175000017500000005476210404045210027761 0ustar arnaudarnaud00000000000000 SizeTag (Apache Struts API Documentation)

    org.apache.struts.taglib.bean
    Class SizeTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.bean.SizeTag
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    NestedSizeTag

    public class SizeTag
    extends javax.servlet.jsp.tagext.TagSupport

    Define a scripting variable that will contain the number of elements found in a specified array, Collection, or Map.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:34:00 +0100 (Fri, 22 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.Object collection
              The actual collection to be counted.
    protected  java.lang.String id
              The name of the scripting variable that will be exposed as a page scope attribute.
    protected static MessageResources messages
              The message resources for this package.
    protected  java.lang.String name
              The name of the bean owning the property to be counted.
    protected  java.lang.String property
              The name of the property to be retrieved.
    protected  java.lang.String scope
              The scope within which to search for the specified bean.
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    SizeTag()
               
     
    Method Summary
     int doStartTag()
              Retrieve the required property and expose it as a scripting variable.
     java.lang.Object getCollection()
               
     java.lang.String getId()
               
     java.lang.String getName()
               
     java.lang.String getProperty()
               
     java.lang.String getScope()
               
     void release()
              Release all allocated resources.
     void setCollection(java.lang.Object collection)
               
     void setId(java.lang.String id)
               
     void setName(java.lang.String name)
               
     void setProperty(java.lang.String property)
               
     void setScope(java.lang.String scope)
               
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    doEndTag, findAncestorWithClass, getParent, getValue, getValues, removeValue, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    collection

    protected java.lang.Object collection
    The actual collection to be counted.


    id

    protected java.lang.String id
    The name of the scripting variable that will be exposed as a page scope attribute.


    messages

    protected static MessageResources messages
    The message resources for this package.


    name

    protected java.lang.String name
    The name of the bean owning the property to be counted.


    property

    protected java.lang.String property
    The name of the property to be retrieved.


    scope

    protected java.lang.String scope
    The scope within which to search for the specified bean.

    Constructor Detail

    SizeTag

    public SizeTag()
    Method Detail

    getCollection

    public java.lang.Object getCollection()

    setCollection

    public void setCollection(java.lang.Object collection)

    getId

    public java.lang.String getId()
    Overrides:
    getId in class javax.servlet.jsp.tagext.TagSupport

    setId

    public void setId(java.lang.String id)
    Overrides:
    setId in class javax.servlet.jsp.tagext.TagSupport

    getName

    public java.lang.String getName()

    setName

    public void setName(java.lang.String name)

    getProperty

    public java.lang.String getProperty()

    setProperty

    public void setProperty(java.lang.String property)

    getScope

    public java.lang.String getScope()

    setScope

    public void setScope(java.lang.String scope)

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Retrieve the required property and expose it as a scripting variable.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.TagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    release

    public void release()
    Release all allocated resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class javax.servlet.jsp.tagext.TagSupport


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/SizeTei.html0000644000175000017500000002644710404045242027773 0ustar arnaudarnaud00000000000000 SizeTei (Apache Struts API Documentation)

    org.apache.struts.taglib.bean
    Class SizeTei

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagExtraInfo
            |
            +--org.apache.struts.taglib.bean.SizeTei
    

    public class SizeTei
    extends javax.servlet.jsp.tagext.TagExtraInfo

    Implementation of TagExtraInfo for the size tag, identifying the scripting object(s) to be made visible.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:34:00 +0100 (Fri, 22 Aug 2003) $
    Author:
    Craig R. McClanahan

    Field Summary
     
    Fields inherited from class javax.servlet.jsp.tagext.TagExtraInfo
     
    Constructor Summary
    SizeTei()
               
     
    Method Summary
     javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
              Return information about the scripting variables to be created.
     
    Methods inherited from class javax.servlet.jsp.tagext.TagExtraInfo
    getTagInfo, isValid, setTagInfo
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    SizeTei

    public SizeTei()
    Method Detail

    getVariableInfo

    public javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
    Return information about the scripting variables to be created.

    Overrides:
    getVariableInfo in class javax.servlet.jsp.tagext.TagExtraInfo


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/StrutsTag.html0000644000175000017500000005155010404045236030353 0ustar arnaudarnaud00000000000000 StrutsTag (Apache Struts API Documentation)

    org.apache.struts.taglib.bean
    Class StrutsTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.bean.StrutsTag
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class StrutsTag
    extends javax.servlet.jsp.tagext.TagSupport

    Define a scripting variable that exposes the requested Struts internal configuraton object.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:34:00 +0100 (Fri, 22 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String formBean
              The name of the ActionFormBean object to be exposed.
    protected  java.lang.String forward
              The name of the ActionForward object to be exposed.
    protected  java.lang.String id
              The name of the scripting variable that will be exposed as a page scope attribute.
    protected  java.lang.String mapping
              The name of the ActionMapping object to be exposed.
    protected static MessageResources messages
              The message resources for this package.
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    StrutsTag()
               
     
    Method Summary
     int doStartTag()
              Retrieve the required configuration object and expose it as a scripting variable.
     java.lang.String getFormBean()
               
     java.lang.String getForward()
               
     java.lang.String getId()
               
     java.lang.String getMapping()
               
     void release()
              Release all allocated resources.
     void setFormBean(java.lang.String formBean)
               
     void setForward(java.lang.String forward)
               
     void setId(java.lang.String id)
               
     void setMapping(java.lang.String mapping)
               
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    doEndTag, findAncestorWithClass, getParent, getValue, getValues, removeValue, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    id

    protected java.lang.String id
    The name of the scripting variable that will be exposed as a page scope attribute.


    messages

    protected static MessageResources messages
    The message resources for this package.


    formBean

    protected java.lang.String formBean
    The name of the ActionFormBean object to be exposed.


    forward

    protected java.lang.String forward
    The name of the ActionForward object to be exposed.


    mapping

    protected java.lang.String mapping
    The name of the ActionMapping object to be exposed.

    Constructor Detail

    StrutsTag

    public StrutsTag()
    Method Detail

    getId

    public java.lang.String getId()
    Overrides:
    getId in class javax.servlet.jsp.tagext.TagSupport

    setId

    public void setId(java.lang.String id)
    Overrides:
    setId in class javax.servlet.jsp.tagext.TagSupport

    getFormBean

    public java.lang.String getFormBean()

    setFormBean

    public void setFormBean(java.lang.String formBean)

    getForward

    public java.lang.String getForward()

    setForward

    public void setForward(java.lang.String forward)

    getMapping

    public java.lang.String getMapping()

    setMapping

    public void setMapping(java.lang.String mapping)

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Retrieve the required configuration object and expose it as a scripting variable.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.TagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    release

    public void release()
    Release all allocated resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class javax.servlet.jsp.tagext.TagSupport


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/StrutsTei.html0000644000175000017500000002651710404045206030363 0ustar arnaudarnaud00000000000000 StrutsTei (Apache Struts API Documentation)

    org.apache.struts.taglib.bean
    Class StrutsTei

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagExtraInfo
            |
            +--org.apache.struts.taglib.bean.StrutsTei
    

    public class StrutsTei
    extends javax.servlet.jsp.tagext.TagExtraInfo

    Implementation of TagExtraInfo for the struts tag, identifying the scripting object(s) to be made visible.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:34:00 +0100 (Fri, 22 Aug 2003) $
    Author:
    Craig R. McClanahan

    Field Summary
     
    Fields inherited from class javax.servlet.jsp.tagext.TagExtraInfo
     
    Constructor Summary
    StrutsTei()
               
     
    Method Summary
     javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
              Return information about the scripting variables to be created.
     
    Methods inherited from class javax.servlet.jsp.tagext.TagExtraInfo
    getTagInfo, isValid, setTagInfo
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    StrutsTei

    public StrutsTei()
    Method Detail

    getVariableInfo

    public javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
    Return information about the scripting variables to be created.

    Overrides:
    getVariableInfo in class javax.servlet.jsp.tagext.TagExtraInfo


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/WriteTag.html0000644000175000017500000011056110404045206030134 0ustar arnaudarnaud00000000000000 WriteTag (Apache Struts API Documentation)

    org.apache.struts.taglib.bean
    Class WriteTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.bean.WriteTag
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    NestedWriteTag

    public class WriteTag
    extends javax.servlet.jsp.tagext.TagSupport

    Tag that retrieves the specified property of the specified bean, converts it to a String representation (if necessary), and writes it to the current output stream, optionally filtering characters that are sensitive in HTML.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:34:00 +0100 (Fri, 22 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String bundle
              The servlet context attribute key for our resources.
    static java.lang.String DATE_FORMAT_KEY
              The key to search default format string for java.util.Date in resources.
    protected  boolean filter
              Filter the rendered output for characters that are sensitive in HTML?
    static java.lang.String FLOAT_FORMAT_KEY
              The key to search default format string for float (double, BigDecimal) in resources.
    protected  java.lang.String formatKey
              The key to search format string in applciation resources
    protected  java.lang.String formatStr
              The format string to be used as format to convert value to String.
    protected  boolean ignore
              Should we ignore missing beans and simply output nothing?
    static java.lang.String INT_FORMAT_KEY
              The key to search default format string for int (byte, short, etc.) in resources.
    protected  java.lang.String localeKey
              The session scope key under which our Locale is stored.
    protected static MessageResources messages
              The message resources for this package.
    protected  java.lang.String name
              Name of the bean that contains the data we will be rendering.
    protected  java.lang.String property
              Name of the property to be accessed on the specified bean.
    protected  java.lang.String scope
              The scope to be searched to retrieve the specified bean.
    static java.lang.String SQL_DATE_FORMAT_KEY
              The key to search default format string for java.sql.Date in resources.
    static java.lang.String SQL_TIME_FORMAT_KEY
              The key to search default format string for java.sql.Time in resources.
    static java.lang.String SQL_TIMESTAMP_FORMAT_KEY
              The key to search default format string for java.sql.Timestamp in resources.
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    WriteTag()
               
     
    Method Summary
     int doStartTag()
              Process the start tag.
    protected  java.lang.String formatValue(java.lang.Object valueToFormat)
              Format value according to specified format string (as tag attribute or as string from message resources) or to current user locale.
     java.lang.String getBundle()
               
     boolean getFilter()
               
     java.lang.String getFormat()
               
     java.lang.String getFormatKey()
               
     boolean getIgnore()
               
     java.lang.String getLocale()
               
     java.lang.String getName()
               
     java.lang.String getProperty()
               
     java.lang.String getScope()
               
     void release()
              Release all allocated resources.
    protected  java.lang.String retrieveFormatString(java.lang.String formatKey)
              Retrieve format string from message bundle and return null if message not found or message string.
     void setBundle(java.lang.String bundle)
               
     void setFilter(boolean filter)
               
     void setFormat(java.lang.String formatStr)
               
     void setFormatKey(java.lang.String formatKey)
               
     void setIgnore(boolean ignore)
               
     void setLocale(java.lang.String localeKey)
               
     void setName(java.lang.String name)
               
     void setProperty(java.lang.String property)
               
     void setScope(java.lang.String scope)
               
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    doEndTag, findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    SQL_TIMESTAMP_FORMAT_KEY

    public static final java.lang.String SQL_TIMESTAMP_FORMAT_KEY
    The key to search default format string for java.sql.Timestamp in resources.

    See Also:
    Constant Field Values

    SQL_DATE_FORMAT_KEY

    public static final java.lang.String SQL_DATE_FORMAT_KEY
    The key to search default format string for java.sql.Date in resources.

    See Also:
    Constant Field Values

    SQL_TIME_FORMAT_KEY

    public static final java.lang.String SQL_TIME_FORMAT_KEY
    The key to search default format string for java.sql.Time in resources.

    See Also:
    Constant Field Values

    DATE_FORMAT_KEY

    public static final java.lang.String DATE_FORMAT_KEY
    The key to search default format string for java.util.Date in resources.

    See Also:
    Constant Field Values

    INT_FORMAT_KEY

    public static final java.lang.String INT_FORMAT_KEY
    The key to search default format string for int (byte, short, etc.) in resources.

    See Also:
    Constant Field Values

    FLOAT_FORMAT_KEY

    public static final java.lang.String FLOAT_FORMAT_KEY
    The key to search default format string for float (double, BigDecimal) in resources.

    See Also:
    Constant Field Values

    messages

    protected static MessageResources messages
    The message resources for this package.


    filter

    protected boolean filter
    Filter the rendered output for characters that are sensitive in HTML?


    ignore

    protected boolean ignore
    Should we ignore missing beans and simply output nothing?


    name

    protected java.lang.String name
    Name of the bean that contains the data we will be rendering.


    property

    protected java.lang.String property
    Name of the property to be accessed on the specified bean.


    scope

    protected java.lang.String scope
    The scope to be searched to retrieve the specified bean.


    formatStr

    protected java.lang.String formatStr
    The format string to be used as format to convert value to String.


    formatKey

    protected java.lang.String formatKey
    The key to search format string in applciation resources


    localeKey

    protected java.lang.String localeKey
    The session scope key under which our Locale is stored.


    bundle

    protected java.lang.String bundle
    The servlet context attribute key for our resources.

    Constructor Detail

    WriteTag

    public WriteTag()
    Method Detail

    getFilter

    public boolean getFilter()

    setFilter

    public void setFilter(boolean filter)

    getIgnore

    public boolean getIgnore()

    setIgnore

    public void setIgnore(boolean ignore)

    getName

    public java.lang.String getName()

    setName

    public void setName(java.lang.String name)

    getProperty

    public java.lang.String getProperty()

    setProperty

    public void setProperty(java.lang.String property)

    getScope

    public java.lang.String getScope()

    setScope

    public void setScope(java.lang.String scope)

    getFormat

    public java.lang.String getFormat()

    setFormat

    public void setFormat(java.lang.String formatStr)

    getFormatKey

    public java.lang.String getFormatKey()

    setFormatKey

    public void setFormatKey(java.lang.String formatKey)

    getLocale

    public java.lang.String getLocale()

    setLocale

    public void setLocale(java.lang.String localeKey)

    getBundle

    public java.lang.String getBundle()

    setBundle

    public void setBundle(java.lang.String bundle)

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Process the start tag.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.TagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    retrieveFormatString

    protected java.lang.String retrieveFormatString(java.lang.String formatKey)
                                             throws javax.servlet.jsp.JspException
    Retrieve format string from message bundle and return null if message not found or message string.

    Parameters:
    formatKey - value to use as key to search message in bundle
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    formatValue

    protected java.lang.String formatValue(java.lang.Object valueToFormat)
                                    throws javax.servlet.jsp.JspException
    Format value according to specified format string (as tag attribute or as string from message resources) or to current user locale.

    Parameters:
    valueToFormat - value to process and convert to String
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    release

    public void release()
    Release all allocated resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class javax.servlet.jsp.tagext.TagSupport


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/package-frame.html0000644000175000017500000000444010404045222031065 0ustar arnaudarnaud00000000000000 org.apache.struts.taglib.bean (Apache Struts API Documentation) org.apache.struts.taglib.bean
    Classes 
    CookieTag
    CookieTei
    DefineTag
    DefineTei
    HeaderTag
    HeaderTei
    IncludeTag
    IncludeTei
    MessageTag
    PageTag
    PageTei
    ParameterTag
    ParameterTei
    ResourceTag
    ResourceTei
    SizeTag
    SizeTei
    StrutsTag
    StrutsTei
    WriteTag
    libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/package-summary.html0000644000175000017500000010254710404045174031505 0ustar arnaudarnaud00000000000000 org.apache.struts.taglib.bean (Apache Struts API Documentation)

    Package org.apache.struts.taglib.bean

    The "struts-bean" tag library contains JSP custom tags useful in defining new beans (in any desired scope) from a variety of possible sources, as well as a tag to render a particular bean (or bean property) to the output response.

    See:
              Description

    Class Summary
    CookieTag Define a scripting variable based on the value(s) of the specified cookie received with this request.
    CookieTei Implementation of TagExtraInfo for the cookie tag, identifying the scripting object(s) to be made visible.
    DefineTag Define a scripting variable based on the value(s) of the specified bean property.
    DefineTei Implementation of TagExtraInfo for the define tag, identifying the scripting object(s) to be made visible.
    HeaderTag Define a scripting variable based on the value(s) of the specified header received with this request.
    HeaderTei Implementation of TagExtraInfo for the header tag, identifying the scripting object(s) to be made visible.
    IncludeTag Define the contents of a specified intra-application request as a page scope attribute of type java.lang.String.
    IncludeTei Implementation of TagExtraInfo for the include tag, identifying the scripting object(s) to be made visible.
    MessageTag Custom tag that retrieves an internationalized messages string (with optional parametric replacement) from the ActionResources object stored as a context attribute by our associated ActionServlet implementation.
    PageTag Define a scripting variable that exposes the requested page context item as a scripting variable and a page scope bean.
    PageTei Implementation of TagExtraInfo for the page tag, identifying the scripting object(s) to be made visible.
    ParameterTag Define a scripting variable based on the value(s) of the specified parameter received with this request.
    ParameterTei Implementation of TagExtraInfo for the parameter tag, identifying the scripting object(s) to be made visible.
    ResourceTag Define a scripting variable based on the contents of the specified web application resource.
    ResourceTei Implementation of TagExtraInfo for the resource tag, identifying the scripting object(s) to be made visible.
    SizeTag Define a scripting variable that will contain the number of elements found in a specified array, Collection, or Map.
    SizeTei Implementation of TagExtraInfo for the size tag, identifying the scripting object(s) to be made visible.
    StrutsTag Define a scripting variable that exposes the requested Struts internal configuraton object.
    StrutsTei Implementation of TagExtraInfo for the struts tag, identifying the scripting object(s) to be made visible.
    WriteTag Tag that retrieves the specified property of the specified bean, converts it to a String representation (if necessary), and writes it to the current output stream, optionally filtering characters that are sensitive in HTML.
     

    Package org.apache.struts.taglib.bean Description

    The "struts-bean" tag library contains JSP custom tags useful in defining new beans (in any desired scope) from a variety of possible sources, as well as a tag to render a particular bean (or bean property) to the output response.


    Introduction

    Much of the power of JavaServer Pages (JSP) technology comes from the simple and powerful mechanisms by which the servlet that is generated automatically from your JSP source page can interact with JavaBeans that represent the computational state of your application. In standard JSP pages, the <jsp:useBean> tag is used create a bean (if necessary), as well as a "scripting variable" that can be used within scriptlets to refer to these beans.

    The "struts-bean" tag library provides substantial enhancements to the basic capability provided by <jsp:useBean>, as discussed in the following sections:

    • Bean Properties - Extended syntax to refer to JavaBean properties with simple names (same as the standard JSP tags <jsp:getProperty> and <jsp:setProperty>), nested names (a property named address.city returns the value retrieved by the Java expression getAddress().getCity()), and indexed names (a property named address[3] retrieves the fourth address from the indexed "address" property of a bean).
    • Bean Creation - New JSP beans, in any scope, can be created from a variety of objects and APIs associated with the current request, or with the servlet container in which this page is running.
    • Bean Output - Supports the rendering of textual output from a bean (or bean property), which will be included in the response being created by your JSP page.

    See the Bean Tags Reference for detailed information about the available tags in this tag library, and the valid attributes for each tag.
    Bean Tag UML

    Bean Properties

    Common Tag Attributes

    The tags in the "struts-bean" tag library (and, generally, in all tag libraries included with the Struts framework) share a common set of tag attributes that have the same meaning, no matter what tag they are used on. These common attributes include:

    • id - Names the scripting variable that will be created by this custom tag, as well as the key value used to locate this bean in the scope defined by the scope attribute.
    • name - Defines the key value by which an existing bean will be looked up in the scope defined by the scope attribute (if any), or by searching through the various scopes in the standard order (page, request, session, application).
    • property - Defines the name of a JavaBeans property, of the JSP bean identified by the name and (optional) scope attributes, whose value is to be used by this custom tag. If not specified, the bean identified by name is itself used as the value of interest. See below for more discussion about how a property can be referenced.
    • scope - Identifies the JSP scope ("page", "request", "session", or "application" within which a particular bean will be searched for (under the key specified by the name attribute) or created (under the key specified by the id attribute). If not specified, beans will generally be searched for in the order listed above, or created in page scope.
    Property References

    Struts tags that support the property tag generally also recognize a rich syntax for getting and setting properties. There are three types of references supported: simple, nested, and indexed.

    Simple References - These are equivalent to the syntax you use with the standard <jsp:getProperty> and <jsp:setProperty> tags. A reference to a property named "foo" is converted into a method call to getFoo() or setFoo(value) (as appropriate), using the standard JavaBeans Specification naming conventions for bean properties. Struts uses the standard Java introspection APIs to identify the names of the actual property getter and setter methods, so your beans can provided customized method names through the use of a BeanInfo class. See the JavaBeans Specification, available at http://java.sun.com/products/javabeans/ , for more information.

    Nested References - Nested references are used to access a property through a hierarchy of property names separated by periods ("."), similar to the way that nested properties are accessed in JavaScript. For example, the following property reference in a getter (such as the <bean:define> tag discussed below):

        property="foo.bar.baz"

    is translated into the equivalent the Java expression:

        getFoo().getBar().getBaz()

    If a nested reference is used in a setter (such as when an input form is processed), the property setter is called on the last property in the chain. For the above property reference, the equivalent Java expression would be:

        getFoo().getBar().setBaz(value)

    Indexed References - Subscripts can be used to access individual elements of properties whose value is actually an array, or whose underlying JavaBean offers indexed getter and setter methods. For example, the following property reference in a getter (such as the <bean:define> tag discussed below):

        property="foo[2]"

    is translated into the equivalent of the Java expression:

        getFoo(2);

    while the same property reference in a setter would call the equivalent of:

        setFoo(2, value)

    As you can see from the above translations, the subscripts used in indexed references are zero relative (that is, the first element in an array is foo[0]), just as is true in the Java language.

    Combined References - Nesting and indexing can be combined in arbitrary ways, so that expressions like foo.bar[0].baz[2] are legal. You must be careful, of course, to ensure that the actual beans being accessed by these references have properties of the appropriate names and types. Otherwise, JSP runtime exceptions will be thrown.

    See the JavaDocs for PropertyUtils for more detailed information about the mechanisms that Struts uses to access properties in a general way, through Java reflection APIs.


    Bean Creation

    Introduction

    New beans can be created, and introduced into one of the four standard JSP scopes (page, request, session, and application) through a variety of techniques. The following subsections describe the use of the following approaches:

    • Java Code in Action Classes
    • Java Code in Scriptlets
    • The Standard <jsp:useBean> Tag
    • The Struts <bean:define> Tag
    • Other Struts Copying Tags
    Java Code in Action Classes

    Because the JSP pages are compiled into Servlets, your Action classes that are invoked by the Struts controller servlet have convenient access to three of the four standard JSP scopes (request, session, and application). It is very common practice for the business logic contained in your Action class to create results that are stored in request or session scope, which will be used by a JSP page you forward control to in rendering the next page of the user interface.

    Request Scope - To store a bean in request scope under name "cust", your Action class would execute code similar to this:

        Customer customer = ... create or acquire a customer reference ...;
    request.setAttribute("cust", customer);

    Session Scope - To store a bean in session scope under name "user" (perhaps in a logon action), your Action class would execute code similar to this:

        User user = ... look up valid user in the database ...;
    HttpSession session = request.getSession();
    session.setAttribute("user", user);

    Application Scope - Generally, application scope beans are initialized in the init() method of a startup servlet. However, it is legal for an Action class to create such beans, if this is appropriate, like this:

        Foo foo = ... create a Foo ...;
    servlet.getServletContext().setAttribute("foo", foo);
    Java Code in Scriptlets

    While it is not a recommended practice in Struts-based applications (because developers will be tempted to mix business logic and presentation logic in their JSP pages), it is legal for scriptlet code in a JSP page to create new JavaBeans dynamically, and add them to any of the four possible scopes, as demonstrated in the code examples below:

    Page Scope - To store a bean in page scope under name "foo", your scriptlet must execute code like this:

    <%
    Foo foo = ... create a foo ...;
    pageContext.setAttribute("foo", foo, PageContext.PAGE_SCOPE);
    %>

    Request Scope - To store a bean in request scope under name "cust", your scriplet must execute code like this:

    <%
    Customer customer = ... create or acquire a customer reference ...;
    pageContext.setAttribute("cust", customer, PageContext.REQUEST_SCOPE);
    %>

    Session Scope - To store a bean in session scope under name "user", (perhaps as a result of a validated login), your scriplet must execute code like this:

    <%
    User user = ... look up valid user in the database ...;
    pageContext.setAttribute("user", user, PageContext.SESSION_SCOPE);
    %>

    Application Scope - Generally, application scope beans are initialized in the init() method of a startup servlet. However, a scriptlet can create such beans, if appropriate, like this:

    <%
    Foo foo = ... create a Foo ...;
    pageContext.setAttribute("foo", foo, PageContext.APPLICATION_SCOPE);
    %>

    NOTE - As mentioned above, using scriptlets in your JSP pages is strongly discouraged in a Struts based application, unless you are executing code that is only related to presentation of existing data. In general, your application's processing logic should be encapsulated in Action classes (or in beans or EJBs called by those classes), rather than being intermixed in your JSP pages.

    The Standard <jsp:useBean> Tag

    JavaServer Pages (JSP) offers a standard tag, <jsp:useBean> that can be used to create a new bean, or introduce a reference to an existing bean, into a JSP page. Beans (or bean references) introduced through this mechanism are completely interoperable with beans created by any of the Struts creation techniques described in this section.

    You must use <jsp:useBean> to introduce a reference to an existing bean, if you wish to reference that bean with other standard JSP tags (such as <jsp:getProperty> or <jsp:setProperty>). If you only wish to reference such beans with other Struts tags, use of <jsp:useBean> is not required.

    For more information about the <jsp:useBean> tag, see the JavaServer Pages Specification, available at http://java.sun.com/products/jsp/download.html .

    The Struts <bean:define> Tag

    Struts provides a powerful, general purpose, tag (<bean:define> ) that can be used to create a new bean, in any scope, by copying another bean (or the value of the property of another bean). This tag supports the "property" attribute, and therefore all the power of property references, as discused above . It can be used in a variety of different ways, described further below. Unless you specify the "toScope" attribute, all defined beans will be created in page scope.

    Introduce A String Constant - You can create a new bean that has a constant String value (or the result of calculating a runtime expression):

        <bean:define id="foo" value="This is a new String"/>
    <bean:define id="bar" value='<%= "Hello, " + user.getName() %>'/>
    <bean:define id="last" scope="session"
    value='<%= request.getRequestURI() %>'/>

    Copy An Existing Bean - You can create a new reference to an existing bean object. You can specify the Java class or interface the new bean is expected to conform to with the "type" attribute, or accept the default type of java.lang.Object (this only affects the scripting variable that is exposed to scriptlets, so it is not generally meaningful in Struts-based applications).

        <bean:define id="foo" name="bar"/>
    <bean:define id="baz" name="bop" type="com.mycompany.MyBopClass"/>

    Copy An Existing Bean Property - You can create a new bean that is initialized to the value returned by a property getter. The value of the "property" attribute can be any simple, nested, or indexed property reference that follows the rules described earlier. In the first example below, we also illustrate accessing the property of a request scope bean, and creating the new bean in session scope (rather than the default page scope).

        <bean:define id="foo" name="bar" property="baz" scope="request"
    toScope="session"/>
    <bean:define id="bop" name="user" property="role[3].name"/>
    Other Struts Copying Tags

    Struts offers a variety of bean creation tags that copy existing beans (or bean properties) from the environment within which this page is running, and the request that is currently being processed. Not all of the attributes for each tag are illustrated in the examples below - see the Bean Tags Reference for more information. Any bean created by these tags exists only in page scope, for the remainder of the current page.

    Copy A Cookie - You can create a new bean containing a javax.servlet.http.Cookie that was included in the current request. If no cookie of the specified name was included, a request time expression will be thrown - therefore, it is common to nest the use of this tag inside a <logic:present cookie="xxx"> tag to ensure that the cookie was really included. If there is the possibility that more than one cookie of the same name was included, specify the "multiple" attribute (and the resulting bean will be an array of Cookies, instead of a single Cookie).

        <bean:cookie id="foo" name="cookiename"/>
    <bean:cookie id="all" name="JSESSIONID" multiple="true"/>

    Copy A Request Header - You can create a new bean containing the value of an HTTP header included in this request. If no header of the specified name was included, a request time exception will be thrown - therefore, it is common to nest the use of this tag inside a <logic:present header="xxx"> tag to ensure that the header was really included. If there is the possibility that more than one header of the same name was included, specify the "multiple" attribute (and the resulting value bean will be an array of String values, instead of a single String).

        <bean:header id="agent" name="User-Agent"/>
    <bean:header id="languages" name="Accept-Language" multiple="true"/>

    Copy A Dynamically Created Response - You can generate an internal request to the application you are running, and turn the response data that is returned from that request into a bean (of type String). One possible use for this technique is to acquire dynamically created XML formatted data that will be stored in a bean and later manipulated (such as by applying an XSLT stylesheet). If the current request is part of a session, the generated request for the include will also include the session identifier (and thus be considered part of the same session).

        <bean:include id="text" name="/generateXml?param1=a&param2=b"/>

    Copy A JSP Implicitly Defined Object - You can create a bean that is one of the JSP implicitly defined objects (see the JSP spec for more details). This is useful if you wish to perform property getter actions against the implicit object with a custom tag instead of a scriptlet.

        <bean:page id="app" property="application"/>
    <bean:page id="sess" property="session"/>

    Copy A Request Parameter - You can create a new bean containing the value of a parameter included in this request. If no parameter of the specified name was included, a request time exception will be thrown - therefore, it is common to nest the use of this tag inside a <logic:present parameter="xxx"> tag to ensure that the parameter was really included. If there is the possibility that more than one parameter of the same name was included, specify the "multiple" attribute (and the resulting value bean will be an array of String values, instead of a single String).

        <bean:parameter id="name" name="name"/>
    <bean:header id="options" name="option" multiple="true"/>

    Copy a Web Application Resource - You can create a new bean containing either the value of a web application resource as a String, or a java.io.InputStream for reading the content of that resource. The resource is accessed with a context-relative path (beginning with "/"), using the ServletContext.getResource() or ServletContext.getResourceAsStream() methods on the underlying application object.

        <bean:resource id="deployment" name="/WEB-INF/web.xml"/>
    <bean:resource id="stream" name="/WEB-INF/web.xml"
    input="true"/>

    Copy A Struts Configuration Object - You can create a new bean containing one of the standard Struts framework configuration objects. Doing this gives you access to the properties of the configuration object, if needed.

        <bean:struts id="form" formBean="CustomerForm"/>
    <bean:struts id="fwd" forward="success"/>
    <bean:struts id="map" mapping="/saveCustomer"/>

    Bean Output

    None of the Struts Bean tags discussed so far render any output to the response page that is being generated from this JSP page. They are executed in order to make relevant Java objects visible as beans for further manipulation. The following tags cause output to be written to the response, and therefore made visible to the ultimate requester.

    Render An Internationalized Message - You can specify a message key (with optional parameter replacement objects) that are passed to a MessageResources object that returns the corresponding message text. The message text will be copied to the response currently being created. By default, messages are looked up in the application resources bundle that is initialized for you (as an application scope bean) by the Struts controller servlet, using the Locale must recently stored in the user's session. These defaults can be overridden by setting values for the "bundle" and "locale" attributes, as described in the Bean Tags Reference .

        <bean:message key="label.Cancel"/>
    <bean:message key="message.hello" arg0='<%= user.getFullName() %>'/>

    Render A Bean or Bean Property - The contents of a bean, or bean property, are converted to a String and then copied to the response currently being created. This tag understands the syntax for simple, nested, and indexed property references described above . Beans from any scope can be requested - by default, the scopes are searched in expanding visibility order (page, request, session, and application) to locate the requested bean.

        <bean:write name="username"/>
    <bean:write name="user" property="fullName"/>
    <bean:write name="customer" property="orders[2].partNumber"
    scope="session"/>



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/package-tree.html0000644000175000017500000002135010404045224030733 0ustar arnaudarnaud00000000000000 org.apache.struts.taglib.bean Class Hierarchy (Apache Struts API Documentation)

    Hierarchy For Package org.apache.struts.taglib.bean

    Package Hierarchies:
    All Packages

    Class Hierarchy

    • class java.lang.Object
      • class javax.servlet.jsp.tagext.TagExtraInfo
      • class javax.servlet.jsp.tagext.TagSupport (implements java.io.Serializable, javax.servlet.jsp.tagext.Tag)
        • class javax.servlet.jsp.tagext.BodyTagSupport (implements javax.servlet.jsp.tagext.BodyTag)
          • class org.apache.struts.taglib.bean.DefineTag
        • class org.apache.struts.taglib.bean.CookieTag
        • class org.apache.struts.taglib.bean.HeaderTag
        • class org.apache.struts.taglib.bean.IncludeTag
        • class org.apache.struts.taglib.bean.MessageTag
        • class org.apache.struts.taglib.bean.PageTag
        • class org.apache.struts.taglib.bean.ParameterTag
        • class org.apache.struts.taglib.bean.ResourceTag
        • class org.apache.struts.taglib.bean.SizeTag
        • class org.apache.struts.taglib.bean.StrutsTag
        • class org.apache.struts.taglib.bean.WriteTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/bean/package-use.html0000644000175000017500000001774410404045214030603 0ustar arnaudarnaud00000000000000 Uses of Package org.apache.struts.taglib.bean (Apache Struts API Documentation)

    Uses of Package
    org.apache.struts.taglib.bean

    Packages that use org.apache.struts.taglib.bean
    org.apache.struts.taglib.nested.bean The nested bean tags extend the org.apache.struts.taglib.bean tags to allow them to relate to each other in a nested nature. 
     

    Classes in org.apache.struts.taglib.bean used by org.apache.struts.taglib.nested.bean
    DefineTag
              Define a scripting variable based on the value(s) of the specified bean property.
    MessageTag
              Custom tag that retrieves an internationalized messages string (with optional parametric replacement) from the ActionResources object stored as a context attribute by our associated ActionServlet implementation.
    SizeTag
              Define a scripting variable that will contain the number of elements found in a specified array, Collection, or Map.
    WriteTag
              Tag that retrieves the specified property of the specified bean, converts it to a String representation (if necessary), and writes it to the current output stream, optionally filtering characters that are sensitive in HTML.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/0000755000175000017500000000000010423130300025542 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/class-use/0000755000175000017500000000000010423130300027441 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/class-use/BaseFieldTag.html0000644000175000017500000003001610404045212032607 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.html.BaseFieldTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.html.BaseFieldTag

    Packages that use BaseFieldTag
    org.apache.struts.taglib.html The "struts-html" tag library contains JSP custom tags useful in creating dynamic HTML user interfaces, including input forms. 
    org.apache.struts.taglib.nested.html The nested html tags extend the org.apache.struts.taglib.html tags to allow them to relate to each other in a nested nature. 
    org.apache.struts.taglib.tiles.ext   
     

    Uses of BaseFieldTag in org.apache.struts.taglib.html
     

    Subclasses of BaseFieldTag in org.apache.struts.taglib.html
     class FileTag
              Custom tag for input fields of type "file".
     class HiddenTag
              Custom tag for input fields of type "hidden".
     class PasswordTag
              Custom tag for input fields of type "password".
     

    Uses of BaseFieldTag in org.apache.struts.taglib.nested.html
     

    Subclasses of BaseFieldTag in org.apache.struts.taglib.nested.html
     class NestedFileTag
              NestedFileTag.
     class NestedHiddenTag
              NestedHiddenTag.
     class NestedPasswordTag
              NestedPasswordTag.
     class NestedTextTag
              NestedTextTag.
     

    Uses of BaseFieldTag in org.apache.struts.taglib.tiles.ext
     

    Subclasses of BaseFieldTag in org.apache.struts.taglib.tiles.ext
     class TextTag
              Deprecated. Use o.a.s.taglib.html.TextTag instead.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/class-use/BaseHandlerTag.html0000644000175000017500000005276510404045206033163 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.html.BaseHandlerTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.html.BaseHandlerTag

    Packages that use BaseHandlerTag
    org.apache.struts.taglib.html The "struts-html" tag library contains JSP custom tags useful in creating dynamic HTML user interfaces, including input forms. 
    org.apache.struts.taglib.nested.html The nested html tags extend the org.apache.struts.taglib.html tags to allow them to relate to each other in a nested nature. 
    org.apache.struts.taglib.tiles.ext   
     

    Uses of BaseHandlerTag in org.apache.struts.taglib.html
     

    Subclasses of BaseHandlerTag in org.apache.struts.taglib.html
     class BaseFieldTag
              Convenience base class for the various input tags for text fields.
     class BaseInputTag
              Abstract base class for the various input tags.
     class ButtonTag
              Renders an HTML BUTTON tag within the Struts framework.
     class CancelTag
              Tag for input fields of type "cancel".
     class CheckboxTag
              Tag for input fields of type "checkbox".
     class FileTag
              Custom tag for input fields of type "file".
     class FrameTag
              Generate an HTML <frame> tag with similar capabilities as those the <html:link> tag provides for hyperlink elements.
     class HiddenTag
              Custom tag for input fields of type "hidden".
     class ImageTag
              Tag for input fields of type "image".
     class ImgTag
              Generate an IMG tag to the specified image URI.
     class LinkTag
              Generate a URL-encoded hyperlink to the specified URI.
     class MultiboxTag
              Tag for input fields of type "checkbox".
     class PasswordTag
              Custom tag for input fields of type "password".
     class RadioTag
              Tag for input fields of type "radio".
     class ResetTag
              Tag for input fields of type "reset".
     class RewriteTag
              Generate a URL-encoded URI as a string.
     class SelectTag
              Custom tag that represents an HTML select element, associated with a bean property specified by our attributes.
     class SubmitTag
              Tag for input fields of type "submit".
     class TextareaTag
              Custom tag for input fields of type "textarea".
     

    Uses of BaseHandlerTag in org.apache.struts.taglib.nested.html
     

    Subclasses of BaseHandlerTag in org.apache.struts.taglib.nested.html
     class NestedCheckboxTag
              NestedCheckboxTag.
     class NestedFileTag
              NestedFileTag.
     class NestedHiddenTag
              NestedHiddenTag.
     class NestedImageTag
              NestedMultiboxTag.
     class NestedImgTag
              NestedImgTag, renders the nested version of the tag.
     class NestedLinkTag
              NestedLinkTag.
     class NestedMultiboxTag
              NestedMultiboxTag.
     class NestedPasswordTag
              NestedPasswordTag.
     class NestedRadioTag
              NestedRadioTag.
     class NestedSelectTag
              NestedSelectTag.
     class NestedSubmitTag
              NestedSubmitTag.
     class NestedTextareaTag
              NestedTextareaTag.
     class NestedTextTag
              NestedTextTag.
     

    Uses of BaseHandlerTag in org.apache.struts.taglib.tiles.ext
     

    Subclasses of BaseHandlerTag in org.apache.struts.taglib.tiles.ext
     class TextTag
              Deprecated. Use o.a.s.taglib.html.TextTag instead.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/class-use/BaseInputTag.html0000644000175000017500000003224210404045232032670 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.html.BaseInputTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.html.BaseInputTag

    Packages that use BaseInputTag
    org.apache.struts.taglib.html The "struts-html" tag library contains JSP custom tags useful in creating dynamic HTML user interfaces, including input forms. 
    org.apache.struts.taglib.nested.html The nested html tags extend the org.apache.struts.taglib.html tags to allow them to relate to each other in a nested nature. 
    org.apache.struts.taglib.tiles.ext   
     

    Uses of BaseInputTag in org.apache.struts.taglib.html
     

    Subclasses of BaseInputTag in org.apache.struts.taglib.html
     class BaseFieldTag
              Convenience base class for the various input tags for text fields.
     class FileTag
              Custom tag for input fields of type "file".
     class HiddenTag
              Custom tag for input fields of type "hidden".
     class PasswordTag
              Custom tag for input fields of type "password".
     class TextareaTag
              Custom tag for input fields of type "textarea".
     

    Uses of BaseInputTag in org.apache.struts.taglib.nested.html
     

    Subclasses of BaseInputTag in org.apache.struts.taglib.nested.html
     class NestedFileTag
              NestedFileTag.
     class NestedHiddenTag
              NestedHiddenTag.
     class NestedPasswordTag
              NestedPasswordTag.
     class NestedTextareaTag
              NestedTextareaTag.
     class NestedTextTag
              NestedTextTag.
     

    Uses of BaseInputTag in org.apache.struts.taglib.tiles.ext
     

    Subclasses of BaseInputTag in org.apache.struts.taglib.tiles.ext
     class TextTag
              Deprecated. Use o.a.s.taglib.html.TextTag instead.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/class-use/BaseTag.html0000644000175000017500000001264310404045212031651 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.html.BaseTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.html.BaseTag

    No usage of org.apache.struts.taglib.html.BaseTag



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/class-use/ButtonTag.html0000644000175000017500000001266310404045210032252 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.html.ButtonTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.html.ButtonTag

    No usage of org.apache.struts.taglib.html.ButtonTag



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/class-use/CancelTag.html0000644000175000017500000001266310404045222032167 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.html.CancelTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.html.CancelTag

    No usage of org.apache.struts.taglib.html.CancelTag



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/class-use/CheckboxTag.html0000644000175000017500000001634410404045240032530 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.html.CheckboxTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.html.CheckboxTag

    Packages that use CheckboxTag
    org.apache.struts.taglib.nested.html The nested html tags extend the org.apache.struts.taglib.html tags to allow them to relate to each other in a nested nature. 
     

    Uses of CheckboxTag in org.apache.struts.taglib.nested.html
     

    Subclasses of CheckboxTag in org.apache.struts.taglib.nested.html
     class NestedCheckboxTag
              NestedCheckboxTag.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/class-use/Constants.html0000644000175000017500000001266310404045204032322 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.html.Constants (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.html.Constants

    No usage of org.apache.struts.taglib.html.Constants



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/class-use/ErrorsTag.html0000644000175000017500000001630410404045246032260 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.html.ErrorsTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.html.ErrorsTag

    Packages that use ErrorsTag
    org.apache.struts.taglib.nested.html The nested html tags extend the org.apache.struts.taglib.html tags to allow them to relate to each other in a nested nature. 
     

    Uses of ErrorsTag in org.apache.struts.taglib.nested.html
     

    Subclasses of ErrorsTag in org.apache.struts.taglib.nested.html
     class NestedErrorsTag
              NestedErrorsTag.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/class-use/FileTag.html0000644000175000017500000001624410404045222031660 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.html.FileTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.html.FileTag

    Packages that use FileTag
    org.apache.struts.taglib.nested.html The nested html tags extend the org.apache.struts.taglib.html tags to allow them to relate to each other in a nested nature. 
     

    Uses of FileTag in org.apache.struts.taglib.nested.html
     

    Subclasses of FileTag in org.apache.struts.taglib.nested.html
     class NestedFileTag
              NestedFileTag.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/class-use/FormTag.html0000644000175000017500000001624410404045204031704 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.html.FormTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.html.FormTag

    Packages that use FormTag
    org.apache.struts.taglib.nested.html The nested html tags extend the org.apache.struts.taglib.html tags to allow them to relate to each other in a nested nature. 
     

    Uses of FormTag in org.apache.struts.taglib.nested.html
     

    Subclasses of FormTag in org.apache.struts.taglib.nested.html
     class NestedFormTag
              NestedFormTag.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/class-use/FrameTag.html0000644000175000017500000001265310404045224032035 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.html.FrameTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.html.FrameTag

    No usage of org.apache.struts.taglib.html.FrameTag



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/class-use/HiddenTag.html0000644000175000017500000001630410404045204032171 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.html.HiddenTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.html.HiddenTag

    Packages that use HiddenTag
    org.apache.struts.taglib.nested.html The nested html tags extend the org.apache.struts.taglib.html tags to allow them to relate to each other in a nested nature. 
     

    Uses of HiddenTag in org.apache.struts.taglib.nested.html
     

    Subclasses of HiddenTag in org.apache.struts.taglib.nested.html
     class NestedHiddenTag
              NestedHiddenTag.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/class-use/HtmlTag.html0000644000175000017500000001264310404045210031701 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.html.HtmlTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.html.HtmlTag

    No usage of org.apache.struts.taglib.html.HtmlTag



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/class-use/ImageTag.html0000644000175000017500000001626710404045236032035 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.html.ImageTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.html.ImageTag

    Packages that use ImageTag
    org.apache.struts.taglib.nested.html The nested html tags extend the org.apache.struts.taglib.html tags to allow them to relate to each other in a nested nature. 
     

    Uses of ImageTag in org.apache.struts.taglib.nested.html
     

    Subclasses of ImageTag in org.apache.struts.taglib.nested.html
     class NestedImageTag
              NestedMultiboxTag.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/class-use/ImgTag.html0000644000175000017500000001630110404045210031504 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.html.ImgTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.html.ImgTag

    Packages that use ImgTag
    org.apache.struts.taglib.nested.html The nested html tags extend the org.apache.struts.taglib.html tags to allow them to relate to each other in a nested nature. 
     

    Uses of ImgTag in org.apache.struts.taglib.nested.html
     

    Subclasses of ImgTag in org.apache.struts.taglib.nested.html
     class NestedImgTag
              NestedImgTag, renders the nested version of the tag.
     



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015310423140533011316 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/class-use/JavascriptValidatorTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/class-use/JavascriptValidatorTa0000644000175000017500000001303310404045236033641 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.html.JavascriptValidatorTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.html.JavascriptValidatorTag

    No usage of org.apache.struts.taglib.html.JavascriptValidatorTag



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/class-use/LinkTag.html0000644000175000017500000002222210404045246031675 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.html.LinkTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.html.LinkTag

    Packages that use LinkTag
    org.apache.struts.taglib.html The "struts-html" tag library contains JSP custom tags useful in creating dynamic HTML user interfaces, including input forms. 
    org.apache.struts.taglib.nested.html The nested html tags extend the org.apache.struts.taglib.html tags to allow them to relate to each other in a nested nature. 
     

    Uses of LinkTag in org.apache.struts.taglib.html
     

    Subclasses of LinkTag in org.apache.struts.taglib.html
     class FrameTag
              Generate an HTML <frame> tag with similar capabilities as those the <html:link> tag provides for hyperlink elements.
     class RewriteTag
              Generate a URL-encoded URI as a string.
     

    Uses of LinkTag in org.apache.struts.taglib.nested.html
     

    Subclasses of LinkTag in org.apache.struts.taglib.nested.html
     class NestedLinkTag
              NestedLinkTag.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/class-use/MessagesTag.html0000644000175000017500000001634410404045216032554 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.html.MessagesTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.html.MessagesTag

    Packages that use MessagesTag
    org.apache.struts.taglib.nested.html The nested html tags extend the org.apache.struts.taglib.html tags to allow them to relate to each other in a nested nature. 
     

    Uses of MessagesTag in org.apache.struts.taglib.nested.html
     

    Subclasses of MessagesTag in org.apache.struts.taglib.nested.html
     class NestedMessagesTag
              NestedMessagesTag.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/class-use/MessagesTei.html0000644000175000017500000001270310404045172032556 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.html.MessagesTei (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.html.MessagesTei

    No usage of org.apache.struts.taglib.html.MessagesTei



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/class-use/MultiboxTag.html0000644000175000017500000001634410404045214032606 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.html.MultiboxTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.html.MultiboxTag

    Packages that use MultiboxTag
    org.apache.struts.taglib.nested.html The nested html tags extend the org.apache.struts.taglib.html tags to allow them to relate to each other in a nested nature. 
     

    Uses of MultiboxTag in org.apache.struts.taglib.nested.html
     

    Subclasses of MultiboxTag in org.apache.struts.taglib.nested.html
     class NestedMultiboxTag
              NestedMultiboxTag.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/class-use/OptionTag.html0000644000175000017500000001266310404045220032250 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.html.OptionTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.html.OptionTag

    No usage of org.apache.struts.taglib.html.OptionTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015110423140533011314 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/class-use/OptionsCollectionTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/class-use/OptionsCollectionTag.0000644000175000017500000001656410404045232033571 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.html.OptionsCollectionTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.html.OptionsCollectionTag

    Packages that use OptionsCollectionTag
    org.apache.struts.taglib.nested.html The nested html tags extend the org.apache.struts.taglib.html tags to allow them to relate to each other in a nested nature. 
     

    Uses of OptionsCollectionTag in org.apache.struts.taglib.nested.html
     

    Subclasses of OptionsCollectionTag in org.apache.struts.taglib.nested.html
     class NestedOptionsCollectionTag
              NestedOptionsCollectionTag.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/class-use/OptionsTag.html0000644000175000017500000001632410404045204032433 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.html.OptionsTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.html.OptionsTag

    Packages that use OptionsTag
    org.apache.struts.taglib.nested.html The nested html tags extend the org.apache.struts.taglib.html tags to allow them to relate to each other in a nested nature. 
     

    Uses of OptionsTag in org.apache.struts.taglib.nested.html
     

    Subclasses of OptionsTag in org.apache.struts.taglib.nested.html
     class NestedOptionsTag
              NestedOptionsTag.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/class-use/PasswordTag.html0000644000175000017500000001634410404045216032607 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.html.PasswordTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.html.PasswordTag

    Packages that use PasswordTag
    org.apache.struts.taglib.nested.html The nested html tags extend the org.apache.struts.taglib.html tags to allow them to relate to each other in a nested nature. 
     

    Uses of PasswordTag in org.apache.struts.taglib.nested.html
     

    Subclasses of PasswordTag in org.apache.struts.taglib.nested.html
     class NestedPasswordTag
              NestedPasswordTag.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/class-use/RadioTag.html0000644000175000017500000001626410404045220032037 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.html.RadioTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.html.RadioTag

    Packages that use RadioTag
    org.apache.struts.taglib.nested.html The nested html tags extend the org.apache.struts.taglib.html tags to allow them to relate to each other in a nested nature. 
     

    Uses of RadioTag in org.apache.struts.taglib.nested.html
     

    Subclasses of RadioTag in org.apache.struts.taglib.nested.html
     class NestedRadioTag
              NestedRadioTag.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/class-use/ResetTag.html0000644000175000017500000001265310404045230032062 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.html.ResetTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.html.ResetTag

    No usage of org.apache.struts.taglib.html.ResetTag



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/class-use/RewriteTag.html0000644000175000017500000001267310404045244032430 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.html.RewriteTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.html.RewriteTag

    No usage of org.apache.struts.taglib.html.RewriteTag



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/class-use/SelectTag.html0000644000175000017500000002152110404045232032213 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.html.SelectTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.html.SelectTag

    Packages that use SelectTag
    org.apache.struts.taglib.html The "struts-html" tag library contains JSP custom tags useful in creating dynamic HTML user interfaces, including input forms. 
    org.apache.struts.taglib.nested.html The nested html tags extend the org.apache.struts.taglib.html tags to allow them to relate to each other in a nested nature. 
     

    Uses of SelectTag in org.apache.struts.taglib.html
     

    Methods in org.apache.struts.taglib.html that return SelectTag
    private  SelectTag OptionTag.selectTag()
              Acquire the select tag we are associated with.
     

    Uses of SelectTag in org.apache.struts.taglib.nested.html
     

    Subclasses of SelectTag in org.apache.struts.taglib.nested.html
     class NestedSelectTag
              NestedSelectTag.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/class-use/SubmitTag.html0000644000175000017500000002207310404045204032241 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.html.SubmitTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.html.SubmitTag

    Packages that use SubmitTag
    org.apache.struts.taglib.html The "struts-html" tag library contains JSP custom tags useful in creating dynamic HTML user interfaces, including input forms. 
    org.apache.struts.taglib.nested.html The nested html tags extend the org.apache.struts.taglib.html tags to allow them to relate to each other in a nested nature. 
     

    Uses of SubmitTag in org.apache.struts.taglib.html
     

    Subclasses of SubmitTag in org.apache.struts.taglib.html
     class ImageTag
              Tag for input fields of type "image".
     

    Uses of SubmitTag in org.apache.struts.taglib.nested.html
     

    Subclasses of SubmitTag in org.apache.struts.taglib.nested.html
     class NestedImageTag
              NestedMultiboxTag.
     class NestedSubmitTag
              NestedSubmitTag.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/class-use/TextTag.html0000644000175000017500000001624410404045246031733 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.html.TextTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.html.TextTag

    Packages that use TextTag
    org.apache.struts.taglib.nested.html The nested html tags extend the org.apache.struts.taglib.html tags to allow them to relate to each other in a nested nature. 
     

    Uses of TextTag in org.apache.struts.taglib.nested.html
     

    Subclasses of TextTag in org.apache.struts.taglib.nested.html
     class NestedTextTag
              NestedTextTag.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/class-use/TextareaTag.html0000644000175000017500000001634410404045244032563 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.html.TextareaTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.html.TextareaTag

    Packages that use TextareaTag
    org.apache.struts.taglib.nested.html The nested html tags extend the org.apache.struts.taglib.html tags to allow them to relate to each other in a nested nature. 
     

    Uses of TextareaTag in org.apache.struts.taglib.nested.html
     

    Subclasses of TextareaTag in org.apache.struts.taglib.nested.html
     class NestedTextareaTag
              NestedTextareaTag.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/class-use/XhtmlTag.html0000644000175000017500000001265310404045210032072 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.html.XhtmlTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.html.XhtmlTag

    No usage of org.apache.struts.taglib.html.XhtmlTag



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/doc-files/0000755000175000017500000000000010423130300027407 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/doc-files/htmlUML.gif0000644000175000017500000004034310404045204031433 0ustar arnaudarnaud00000000000000GIF87aL÷€€€€€€€€€ÀÀÀÀÜÀ¦Êð@ ` €   À à @ @@@`@€@ @À@à@` `@```€` `À`à`€ €@€`€€€ €À€à€   @ ` €   À à À À@À`À€À ÀÀÀàÀà à@à`à€à àÀààà@ @@@`@€@ @À@à@ @ @@ @` @€ @  @À @à @@@ @@@@@`@@€@@ @@À@@à@@`@ `@@`@``@€`@ `@À`@à`@€@ €@@€@`€@€€@ €@À€@à€@ @  @@ @` @€ @  @À @à @À@ À@@À@`À@€À@ À@ÀÀ@àÀ@à@ à@@à@`à@€à@ à@Àà@àà@€ €@€`€€€ €À€à€ € €@ €` €€ €  €À €à €@€ @€@@€`@€€@€ @€À@€à@€`€ `€@`€``€€`€ `€À`€à`€€€ €€@€€`€€€€€ €€À€€à€€ €  €@ €` €€ €  €À €à €À€ À€@À€`À€€À€ À€ÀÀ€àÀ€à€ à€@à€`à€€à€ à€Àà€àà€À À@À`À€À ÀÀÀàÀ À À@ À` À€ À  ÀÀ Àà À@À @À@@À`@À€@À @ÀÀ@Àà@À`À `À@`À``À€`À `ÀÀ`Àà`À€À €À@€À`€À€€À €ÀÀ€Àà€À À  À@ À` À€ À  ÀÀ Àà ÀÀÀ ÀÀ@ÀÀ`ÀÀ€ÀÀ ÀÀÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ!ù,Lÿÿ H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\ɲ¥Ë—0cÊœI³¦Í›8sêÜɳ§Ï“‚ J´¨Ñ£H“*]Ê´©Ó§P£JJµªÕ«QjÝʵ«×žXÊK¶¬Ù³hÓ’ýʶ­Û·p)ªK·®Ý»xóNË·¯ß¿`‰L8nш+^£Vߘ1‚|ñ…ºm¨]‡ÊÉî­°®m« z÷ÀÎŒÿ¾¾Éª};JÛ]»igsÚóÍãÌ;=|Q 30–æ´P©E˜ÑH5„4¡jr[“‰ì^U©øÍNnÑÁ djc$ø8ˆ:ÌÍÏôÔ%{<çJ`1˜5¦¹00ø1ÀˆyKTà“f”Àc@GƒÞZ2A ⬈#ªßLð¥%æë‰h“VÍF×>ÐaÉB#œÈà€#ôpT¡Z¡à¼5 °a3„˜§–&±®°L=<“©ht®áƉwD"}2Ô ,6±#åS›´Bz…Ä|YœÈ;>` s]쀢"“à@% 3Æ0€KCž0ŠÑ´6Fb¨Ê‘®`ÿ\aˆ­Áãm,X">ž,fÁŠe÷Èפ~©,O!<Ëh (í¹ f°¤åÍæ/õ’X†œeúfåµAYÊ<&•T Š˜ðãb>ÄI21ŒÆB,yI‡©‘.U½¨@ÜÀ@R 5gÃJ¹2_¹D[>M'ºÒ‘Ï^eCY¡J'Ë´”ŠþÜgù(”²ñÔ} %æ= JQ}òÒ ‚ìïS-Ë•§‹]<‚¸H•C7~’iB(#9Ò0x›Õ-ðÎÔô§™'lê™Äîq0Š=Ê ¸ÌšnQÌô•AšÑ„ú´WL…èQ# TDò3nÍ*U©ˆQ jÕ²ÇîÀÈ9òFhQ™F51oö/Œ-,£V* ´t€Sø ~ðèõ|…“htšÊÊçžPdh¿’)¶ªžN«¢ê3›ºL‹v•±Qt*?ZUDe4¨S=¨?»JÚìö &|‡yÌS.³¢j\5J`!ÇB~ò¶. '‡Me¬_÷jÇÍ–5ÿ<Ý£dŸøPf5·´\]jh?ëʨ‚ö¢¸²nÚ4ûÜ]nVHýÜ*w·JÚãzð¸ÕBÀ"¿°ÚA¯j?$—|h#汕TQÓX(5àE­¦€u € € (à¡1¯`^TŸ¿d[CÁ Þ¯áÒ{ÂÔW”‹)¾ÈV¹¨ÿ„êöœ;Ù5/juJ- ‹!âb§<_xC/€.4Á@^ÌÿÇtŒ¦‹U±uÁ‘ Oð ¶É î ”ßbÕ±}(»´ÍL¤D¦¤Î Ní"ð#° UÐÃqÕÊu„!$! R‚®ñŒ7•0¬>b¤ï¨AÌlºœ†Ÿ\‚=Èåvº3NæH¨—Võ0{Ù9…ôü »¶¶@j£?Evý²}^+ÓÆÓÓfÉ®K3ç÷Œ;Ü\9÷™ŸÚ³v»ûÝðŽ·SÜ6mu£û'ö¾ò½ “ïØõ{5ò¸À¾mï;1ÿÞ`ÂN’$ÑÎOž›Q Vn†ƒå2·¸d`'ÅíEü×µ\¸f05̉\R—ª"È 9Ú8{ä+kl!Õ=ÅŽkœ/•î6QÜ-»óž_‰ä©ãPÞRNHŽýå‚”—ƒŸyr•u7§´ˆ–©¯œØv{’ȼçP¤®Îeã«æPeUK “ÎÇôvc!žÏ˜ÑûÊIðÔ9÷§™at pN”×éþ9$^ûAÉŽ:£ª'ªs:çO×µ¿þu¸i˜_av]·O8 ”¿j†OŒydžVÃay†3¯b¦sÎô¯UçäÈÂ^ððÓPâ}Ù@ºë?×zÐÿiEÞSfaU1+Þ×~»2¿.AmŸâðru¢¢%ïËÅü9¸¿ò–¦}Ùÿa˜šC¹Òˆ÷jÓ9t ­ͬs·awùÎB|Ëï?~ÉÕá±£½^xrþh¡ÿ܃R÷_/SY7€§Us6Ç}t#%-'|Çwu¥g)@×LÐä:­3€™f„G^ gœ%<×~ôbaÅXö²ÒwYSmVF}§7lW‡O㇀0ø(ÔVlõ·r¢w0º'§W`Âu#‚I·eÑ·yEØaÜ‚ÎZË7„‡b··n؃×g4ø‚Û'ƒ’¢G؆|5hu5hO;r{§>ÜvØw€ÛåY>uK¿‡vÍÕe¼”TôGw¤Ó†x(w]–Uû]Hw>n'€hH…Ùç…&ƒóXnïÓ (YÄ—{M·{Ùƒ{Hçkš†i–‘qZh?PRfOñXQ‰S¢‰F2-ˆèë'l™øz›xˆ(·9³—|”˜D¬ØŠ+qŠƒ‡‹èFŠa€³X‰ahnµh‹íqÃHŒ¼øm…ˆ;ÒVT÷ŒÐÒ˜jGŒ½xŒÇ¶Œ¡‹ˆ‘ŒÖ¨x߈;Üø‹Xx­„áH‹ã˜uëHŽåhŽê˜Ž‰ˆŽçWDtÑŽ}Q~UHÕXy~çfÕhò¨†™…q’ùxŽ|²¨„'‰ b×u_e‘ÿ˜ ¹ñèAy§Keø} ˆ¶dˆÓE‘úhqÿY;+Ùp½xH9/ŒGÕ:9ÇfN¥]öwa”…‘)-)gÊx‡5†LÇ‚½w…Ɔ“ÆgU|’Lôè“úÖŠAÙÔ!ó^F€“lOÇ”iæ‡<Ç“â'•‡• ótn)ùZÉ•-ˆÔuaãu“ÅŠfIh™•{‰‰W¹bÂØ[ —Vxt—5“qØsB¨yy¹U˜¡SöÖ–é¦{€ˆèÀaY‹õw"ëÖ˜€Ô—Ðñ˜DäVy¦"¢‰o¤ «yš¨™šÓ›ƒ×š®I™”a›²9›´Y¼‰›÷š…¥›Ž9‰íaœ6£œÂÙÄ™SÏùЍ(nKÀéfÓxØ™ÒøvÑœ“Ô9ÞÙœääÇœÓ žá)iæIž Öž•1žK˜Èžèéž‘ Ÿ!ŸõAŸõ¹J–Y‹Eâøéÿü©ÚŸþùŸô4†}©Ÿ n ¡ç’¬io9ˆ¾ç{/óƒÔçƒ÷‰Ÿ ZŠÚÙC'”ßÙ ‚I“„hÈ—ªW˜º#jƒ ù¦‹!*nF „k&s>Ê¢v7£¹I£±£~™¢ÈÕ£±Kù=0Úw;Z 5jt†±Ÿª¸.Źx’Gom¥BJ DJ£j£€';ßו^‰ ÅX¡ ¶¢fØ¢ìó¢A ¦c'ej¥ìg¦W¸€JÙ"”AoÚqÖ)€š:s €]—”wªpFŠ{ŒNG¨‚J?ú™§Úpšª˜F§fÊT’i·”ÖÉ|…±p)9¥œ:~º©gÙ–rKGYl˜yÒäyPX^·žFTžªêª¾ÑªJ5q_y«(9{š…—8×›të¾*†”«ey’ÄJª~ûÈ 3XUÚ¬û¸­0÷©Ó*­f‡¾x­Øš­ïÙ«ÜêoG‰†z<¹˜R%–±HiS$骮ëº.ÁÞúŽ!—bˆšeºš‚¡¦—hmÒéùª¯û %©¨¥/Ù¦ÓˆxŸ ë˜Û°Kú°»‘(:±7z¡[q±MT¢&{²(Ûnøº7 Çm${°Iº²¹‘²4[³6[p2²Éª¤é†©7û³@´ó‡o•z¥óé–›´ù)´$˽ú²Jµ7Žê µR{µ»è¦–ˆµ\ÛµÈz®^aµ^;¶òs©n!¶d›¶‡Õ,;«¶në«©Ú­o;·w·:K·xÛœ°J±y{Û·­ù¬Eë·‚{º‰¶Á8¸ˆuÆi¸‡›¸Ž»o‹ ¨;¹°§œŒ+©”›¹—³ü¦¹žnèy¹0û¹¤ÛS#k;¥›ºÔ³¨«º®kº§‹¥¯;»O¶'J»¸+žH{»¹Û»ô´»¼ë»ÂK?[˯L Û¼–j»Z›‰Êÿû¼ ¼‹qÐ[½DY¼G;rÖ»½‰°Í«s©m«§Ü[¾н<[Š°Ø¦~ª™æû¾î‹¾"[‰FÕËë‚ð›¿d´ ªiõ‹¢Lè÷™v™„¢¿쯱ۿôkQ9Ùy‹Y‚¶*®_›Àïû²ë8f,syk¬–̘˜kÁÛ µ‹,~Æ”‡'¨=ns¬õJÂ%™f[ZL¯&Q: †L¾2l½b{ ‡ Á-LaÃí뎪ȂÜÅ&êÇ“ÌÀ˜lÆÊ“l2†ÉZÆq¼‰ÐÅaFQ/ÊžU°t8°ŽèL¾ôfL§ë~¿Çf³ä oó®G©Ë<£h¼ÊZØÊµ\ÄG8|†:‚H¼v·´€Å*P'8®wY#X­ð÷nܬq¬Ì2¨Ážªy7L­tøyù¬Ž…I8Ë—è”ÐÜ|cyƒý'Âäü»Æ1¼­Ì+wÀ8Y‡7] KÐw'ˆÙ<ÐKņôjˆXŒÏ}Ì"*»¾ûÏ}ÌØüJKiЇ¹„¬Ã²¼:Ï#ÐÌ5Ñ›…Ò¦šÊH*¼Ò׬Ó<Ó\]w˜Ð{ÈökJœÃe“Ñ*}ƒ¤<³œŒ‘ìÒ4XŒK=\eöQ’˜ùÍnˆeT¬Ô¼lbùeM:°Çb\}Õ¡9ÔŸ±Ï芿½;igûÈ.Gsb-±¼–µr™»hí½½sl=º÷ ›÷¦Dd]¹BçÈ3h?9Ú¯KŒ\Bš 8ÅB©‡ÝË“Úkr¸}=Ê|ºž±úw…½ØŸ\×jí¹“]¶ÿ’fÉJ ­åºÙ¦Ùˆ,×E½Ú§»³Õ`-…\†“ÆL®âå\Y†]V´2KÚ•ÍÄlúÙ?'ÚÒ*ͣϷÍZFvGXPÚüÌm}ÚÀ­–;¶æìs0]"v«Œ™ÂžÇˆÚ—ÝxÝÙÓMÝÒµÿ,Ð4ý™=Y„>ÍÂLèÐJÜÐÞìÛ•\Þw+Ü­D܆ÎÑêÞ …ÜÜý]¥}¾øÝ¹Ñµ¤Mà F‘ýÓÏm„{w6¸ÖÙéà|ËÙ]«t¥ê>L}fÁM²÷ËÂŒÛ]-żýËU¬á¿Íám ã^[¸üûÑf-ãwKãÞ®öΔªã7îáWû¬ÀZä*BžÖî¶ú=½Ú¸äLãdûäÙ«äR¶ó†·¬íÅqåæ æÄaåLæZbåg>åiþÖk>äm¾SoîæqpsþãužJwN×y.O{.½}NnÞGN¼ƒÎ¹…N~‡N´‰ž‹îãîÉNÇ‘ÞÒ“.é•ÞÏ—þ½™Žé›~åÎ韞°Ó¡ž«£.ꥮ৮¬©®—]n“næ‘ÍÏë¸Këäç¶>»¹N举êÝK¢†EÀ–æzŽ-Ê…¾ë®kÊã}{7]Ý ~æÈ®ºÌ¼ì=ìå>í©[íXvvs¸Ø³]fM=-Ž~<^çÜ^ºÌL'õ\‚$cv ‚sÇ™—¶îpëëÇ™f.센½ÎÁUÞ÷lí½®ïCÙÀð·{ ßL8ÁI'ß·þæøþ¹ÞŽš]Ðÿ„@nÛßæïÙ(lÏ>ÓÏÎm¿Äü…ÜêÅÿNñ DÀ±Ì`6enËÎMaÙË!×»9èON|=º}üçAOÆ\ô}nåwl¾ >P"'¬x9ôz‹¡Iÿ×÷Ǿ¦Mõ‰ï\Ï’#ÿ”¦ŽÊ¸îòUqõþ‹|<Å\Û'îmÖZêK]ïY„QâDŠ-^ĘQãFŽ=l¨p`È Gš$ɰ É,KŽDdË” ~Ä™SçNž=}V¬ùS(СEEšT©Ñ›º,µéSƒ2ÒT)5!Õ˜3%r]VìX²ƒ–-zíZ¶mÝ–mê4îJ«Q_RÅûÔ¤TšAÁ>œ 8ð[Â… sÔ›XñbÆ?†ùñaÊ•-_–Qí˘sWju¯È‰ƒånÆœZõjÖ­]¿†ÍõJˆ~kÞnI¤MЦOÇ\øpâÅ/õ½µ6é®Ê›Wµ9´»Å¿Ç­_Çž]ûvÊÒu;åý|·sèáK'îûzöíÝ¿gÞëròãë//R=Ý‹Õáÿ0@4L>û3ï@ñcP¼ó0ò@ '¤°B {ÛÏ.ú˜s0¿5ä¨ AñBOD1Eà ü0Äô0F§ë¯DºlT1Gwä1)çÓ <_̪EÔ(—d²I';ú‘È!¥Ü¬Ê)¤ÇŸä²K/¿œq2Lµ¤Ó2ÊßÀd³ÿM7'TóH2Ëñ>*ƒL2NýÞä³O?¯Ó3L:‹´SJB åo£@;ÓòOG…ô¨E9#jÎB µOEÝ2RO?UÒ4ûóR9ÍDrÓ” µUW_­­ÑÑD°VKO5UDœX…µW_?åtVM$ÖÈ:mEŒÓ™”ýµYgSœTÐ[s=tÐcqílUfI|¶[oŸŒö*ÇDvZL+5k[n¿e·Ý í¶4rË-ÖØkÍÍ^ýÔu·_SÓ÷Þyé¥VÚx±Ív×€ý·a‡‹[xÔëµVàƒñͳ'^æ¸ã·¶¸TŒ68d“Î d†=f¹åµÔ W=ïdž¸`›küi'c—wæYÛ]ë­æ‘ –'•·â·g¥wV9Ø …¦ØÞ‹33:é•—Æÿ:ëXuRv?šå…Ѩ¡´új­ÏÎúè“E&¸b’§.iŸÔFºl´ïöTm}3ô]¶oBºÍÆ»ð~ËÞ–ï§Á[ì±}NkpÃ'ñU©[œña‡Žn(É §}ø·qÏ]w»»žyíƒÛ=ièk¿úÛ;—-,å·G»ì©÷;ú¿ßÜqñ¹^Íôï¯~ïÇÞýùåç\Êvg?üÐ8ÔÿÚ翪Ž|­«Õ 8ÁØ Ðx „_ü48¾ n~c9Eø²vPzÄs §Ç¾­%¯„éÿa cA.ƒ DáK‡œÂP†?$Ë '±þÙps¼aÎzèC 6yL™[’ò%ERgæ["¸E…µ.ŠT¬âÃ>1b‘-!äbQÅ/–±ˆVD"[ˆÅ,jQw| ¤r¦(0*ðqL¢çêhG<⑆4ÒÐÜèG8zð„Jt  ‰¿C®p‘cüc ™Â9‚pœ¤ ©?(õ‘‘ÜäÍø±J†’c­ä$&O‰JU’š|"+?éJoÁ2–²&.q˜C 挻Ä/™çKqyÎ,|,å%miÊ "Ó˜Ê3kMERs–ÂTaªÐ¢MÍ›2§ŸÉMv~³–Ý$¡5AyΞYSëô¦;§ù¿`V³;æ¤ÿgìì©G|泟ûäg–ÐXÉ3 =h%wØNƒ‚3œ-_e$ùÐP1t‰Á£hE:L ÍС åh/úÑŸE³ ÒÄèHWi™¦ÔMq‘LNuºÓœÆtu }'-IêÓ\Ò”¡6uO`NÒŸ•¨Ä”cTKZ ¥–³ªHT#ùH§>UªZÝf&㩚šbUE¾¹ª>-yK¶vU¦©ë1WSV³V=3û žÎ¤˜^´­Cj`¿:Õ²†®u ¾†;ÅfG³ÙßåR&Y‘¾”ª­9*b/󣔜‰d‹íkXÝúVÒþu°„-¬a3«Ù…öíTP¹ËtF[ý%¯ˆ²Hg[jÙ¸RV£iýÊjY;Îþí,¹±ËM¦Â ØÎö,™šìn¥ ÏÐN7µ˜îp]XÅÅ4ç¹E rgäÜ2Yκ¼­.WóÜ=½æ°ÚUí"=K(½€×±Ì]yMe^ßž·²£uéfÙ{žÿÃ7]휯†»`ûzH¼¬ú®î¸f´èRwnÝ\³k`ÖQ7ÁÉÕ Jd"^ú†˜m¤›0…ýÛÛfÃYÂ0‡;ÉT³)·¾œ9‰ˆ—E"+É/‰¬pŠ[ìU"ó{/–±Ñ»UÝÈA†r€il=ì ç½IN‹„5z¤Î¶qÈSVk‘KÛ$×(ÆÚ¥Û™oì ëåÖËýýo«<œ+cùÀO† lµ,ä=YÌc&ó™1$è‡v{¿4€Ã|PG™¬„&°E9žVÚÒXë|8ŒsGã{·Á^ík[úÅ ^ˆ¤ßÓ’Íâ(â›rEëd3O\¨+âxÂ;>nrW-ææqƒ‰Žß¨+¸©“u“\‹ã)ÕFéÞvžñ­t™¼éKŸ6ÔE#u6èÁÉÉ"¼å~iuÙEŸ¬ Nœ{Òœéo´ß=L&œ£Ä w»ááºw€Õ}á]yx§’+ôÈÇÖ¶;¾‘i~¾ìß›ì€<Ö?Ïð«ð•+yéyœc´&é9²û¥–ku+쇯ÿSsÜsš‚\ð~žyèGŸÞ…rÙõtü]Œ~¯××ɺ·:âw¾û}c¦‡óNúðî}á¿Ìøæ¶jmÞýÿľEµoÐåK®gæž~¼Ø¹~Ìó²OøºŒp¾‡õX”óö_¿ˆó®ï๺(1ð‚»¬ò½ß»¿³ã4âK´-¿[·©ƒÀ1?‘#@ûB¿Â À“+¹Åë=ý£¿ìã¾Î$Ð#«ã£@9.œê±Úz8ÍK>v³¼Ðè Õ;½ÊË‹Ì<ÖË?ˆ™À4Áúc<\¯¹SÂPcÁ‹¹-Ú @ ìÀ«+?õù>!DBl@|À t[>¼ûŒÎr¾ó£>Š{Í“ÃÂ,<Á-ôBòsº^ÉÀü`?JÉ=6s¿”ÿ«ÁìX¾us±&$Â"4Â#tC`y¼; Ác>Ú«øh9:ÄA”¿7DÁ¢•:Ä;¼Ü¨ 胬>5D.ŒC³û;C
    ’ÈL¶,¾Ê!ZÙ¬+Ì´TDJŠdGÒDŸ™±>Ô,E«ÌI´ M×¼Ðú-mLMÚ¬MÂ6Ü|ÍM4´MÕDNÎv GóÌßÈä¼ÉåÌ&áÇë|ÎÁ\MÖÌ(ꤜ<ÅèÜNîœLïÔð Os,ÌñÌJó¸äôLOõ IµÃJñR„2MAiÕ]=À¨¤BU™ÕR¥USJ0èú:ULL«ºÁ‘{B;íÌaµÕbE­CVó˜S®ÃÌãÂÃö‹Ç¢Ì 7s E”LkõÑ%!"'\³)äÀÙ“JO}›½ä³­{Æd«Ut­T ¤¢®„ w¾AK>lÄ‘¤?¬JÕW+t’u•É·œÊNZتÃUã:gÔÑ…DTËÖd»Ýã¹`õÁÀ¹Øî5åW,e¤ /ÊÓ €YÆ2"77?EYyë‡M‰›¼fŠÅT½œVÊWQ½Yœ%Õ¤¼MbÌÑ)òZt}Ú¥Ö¥½×¦½Ô£eØœ}RQáÍ Ũ=T°UXJEУSW¬UÀqÌT25[ˆ[}Û±Kš•Ç­ÅO´µ2}“¸Q¼Á½ýæ¡[7¥ÎÁ5\¾ÊÚ/áÛ„5ÙåLT]ÜjõôÅÍÇu9l„ÊuMËM\À•¯º¦Ê9„U´‡Ä«œûLu£Ò}UQ½ý\ÆA«e%9ÿN™Áö"CþÖÒ•H=}]}kÁèé·Ú½—˜¯š¬RÆM>Û¶¼]J9 Ú éU*ÌËG”4çuA¾h¦ÔÛ ÚO ×;…¿vÜX‹©^ÇúÞéå^±”ØBÿ­Ü…óÄÝVAXĽP…5?[G…;HØ”$ØŠ\–ñ_¢»ÚsWN¬É]Ô5ßÄ’ÌßþÓCxÕß¼ÔÞN¤ßû%1ò•Kø-_þ þÀ^ÄíEÀ’=L±>á |Õ¶ÒÖà*TÌþ Ý ž]þXOë6VàÐ… v`B¬„ìQø žõÁìÌ蕼iMUåµ³Ó ±é…VïßnAÏÄÞÓ\S&Vâ&+Ü^3ãνá¤*c¦u\4vcí(྅cÕêZÒÜI„…ÜH©Uôœã MÃËåã@¶Ž?~%B–cD”·ÃåÇÂedFäA.Òº!]¿íC¦ã5cK^âf|•3ådwÁäLöÝseIÎÄIÞäSþ“QRlíSVf^Wqez«eYREî¨Ý¸e\ÎØ]nÒNõåoée(UYWæUåT®Údn–b&å½eagæeÖå©¥fÏíI•ÊæO~fvæn–[Ì%fqfæ_ ç 5çRþfpNçunÛNVufxÖd_ygu¦ç¤u–{nÍ|Öç}ö~ö粬çrhµgQ>h­çÓ…fTƒvhˆæXíPŠ6V‰hŒFÔm˜‡¦èGéJ>ßæè@,á³:ä“ÖR N×hâMi@éJÓf–¶Ù}‰–•[]ÞµáåUÿ\œ>#ØeM^Ûê j¸HÄ¢æ=øüµ˜Æ’¥Ädâd`O¬_Ì_:e¶%¤‹íiÎ{iªFBãÂàžÝåÚÃÇŒÙèûê¡~¤Á`¯ui³Î7­SñMëNá#àÞ÷^vÆëìcÙYÒ©[`Åãë3$ÛˆvBçâÉc?iëÏ•ê‘4a“ËC÷ X·›æC^Ù²_Ðm‚måÃ~ºY;ŽÔúUß"ÆßÝl-Õk·1ò½ß̦Í6ÈÓÅêðýÙ-.bdÞÖ ½Þ*†jô`qUl¸&hDîm\*þjæý=mé3êÄ£al>[×6féÌßÓî¾>½#ÎU“¹nŸ&ï$Æ:ƒ½ãôn(çÃüY*ÖãjŽïÕÜ6”ë8ÿðBìßîs6pÁ©éGNðcªoOÿnp|¦I+¾ÚŸöï §Æ¾yïNQT{ðš=iP&¼vqRkXûæèÒígÙȧ!ir6m–Îà¶£CõÞ~tZ/ññAoHñ1±âñ»uVë©bø¦fº&£¿&¸2q×e]®¬@‡8Ýññ†rSViVÕÐKìæØÃò,Ïh¿ºñ›F_êõYÌ®2ßUÆ[&¿pù~¶3Ÿ'Çñlcߨ†Y$f¾æ1¯nX¦8äÅ\*ýÕñh>Wt¦ç»²]É å}‹SOsn·WÎm”e-Ò™\C ïr_æØJ o8_Ø—kçŠÕ«Nïq/ÇtMÿàönVs¦!<žÆœJWjg…â¤Åý–VçŽ^g‰Bçã¹¢A:p[× ÷e´gjuq†.Áhgõ°=Æm–U4Ÿï`ò%§Ú`ÞO„®ñi_Ioþep;ugêIŸP}Lqw›öœFåvçðW:)^§sóÞ÷g®*çr© øe/Û|/Óƒeà"xà>j†—r¤ã„—x{.°‡'óh¾xæ1ŸÍìøŠo\y–‡ì‘çcBÓx•Gy Oê‚.ù–GqÃ2yŒ•ùßQ6‚6?xó÷ãù é‚Ïð6¾ù†Ý<?·óÔï02f}´Ö½¬¦íÝÇuG×óS½rʖ؉lä÷}ƒGp§ßm7ßáÇt.çØ?ßœ’ WLçþ̃ìþ5Âa¨·êô{Ùx lŠ…þ<ÿ~ßú íÀ/ÿ¡ÿrÎo}–^ÏÿþX A‚&l ¡Â#Fœ8‘!Ńjìh°!FŽ/R$™ñ$Ê”*W²léò%̘2gÒ¬ió&Μ:×wÂ4Éó'ЊA‡®´ˆ"È?" )ð©ÈŽ•¦ô)”åC‹fíºôéÖ¯ ÃJôÚÕ¤U¢jײmëö-ܸr‹¦k7ä]žuË"eÚ”jV¾K¹ö-¼õìɽRóºü{•1äÈ’'S®œW±e¶˜3—äÜ/語‡¦:ú4êÔªW%ËÚífÔ±9;.Múµ×Œ³_óîí»òÙà‡/nü8rä¿u/ïÜœ/Ú–»OOný:ö›Õ—o·ÜxvÑXÃ/&oþ<úÆéfÿNÙ}jÅÉçÓ¯oþúüÿúeïld÷ 8 Âõw ‚ ’‡™p5(€E¨ …Zx!†ÌI§ƒ9}dÚgØM˜!‰%šxâsF©4[„ßx׋(Ê8#5Âèßmcµc`bmV=†&äW®E•¢I*¹$“ïᨡHPq˜%URW>É]“]zù%˜;ù•”Ð}¨å”„¹¦¢shÙ\ŒaÊ9' ²ÉžmŽåV[‘8îù&ˆpÖ9(¡…&ygŽJ9Gµ¡©'ax^§¡•Zzéhˆ–9U–ƒ¥ Ø£x}¸¢^šz꩘ªº*«bödd`±6&™>"&˜š9åÂJ[9æ™ù8cœkþ9èž)<:éÃ…~:êøEW];Jšhê±Í˾¹xGh¶Vy>;ï½ÇW{™­'F–O»û~<òNîLtÃÍnòÑK_!Ùñ.ôÕ’O¿=÷“\Rñ«ï§§Ý›>œ·ƒíüÞÕƒŠ>üñü˜Ñº“ê”/?ÿðkí0ø`‡¿²Ô-ûë£÷?“Ñe€ÁÜVtÀR0v Ä·Ô–2öìå‚ü mµû•L4g^C¨Âbo[:’àõÆ5AÒðit¡sÈ>Ͱ†>t٠ŰRõð‡F¼W…ø“8%ñˆŸN¤\•¸DµDñ‰Vä[qØšµdñŠ^dZµd…ñ‹fäXÇÅEØñŒn´QÅ8”iÅñvVÕ˜8µñŽ~LPåH”|ò†S!õ›¹$òŽ„£„â²²F>²’$¢¤¿ˆu™>Z²“™ÚÝÀ‡IO’ò<£T¤&;wÊR²ò7«De*%ÄÉVÒrŽå{fYË]j§‡œ;à+yÿ)LF”½,2“9Ìe0Yú’âå˜ÉË`êÄxÝÑå¥IKjV<°¤ž6[‰MÚ¥:o‹\*$°p’’›¼ò&½Ü•6ȥɜ촤;‡¨¼uòKpoYß啕dt>Œtfˆ¢®ÂDjn¶"ž§*6¤‹¡“œ]Ü8ú,„4| ¬'HC’5kHàE¡ˆ®XŠŽŸêÙU’%‘¢M[:ÓaJ—Qo±´¥<í§nHÖ äJG›šš²§½œöím Í!ƒbÏ®æ_AûžÕУÚ,«W«è<™J¸ÙT+ìºÝO©ZÕŽ¾Ž¦"sHIûõ¹ÕTxb­ÜúòŠS1N5p¸ ¨íôçP\Íô…x»›ÜÌ¢·ÞUNzu ¼à:±a5R¹Šáÿ:žüޱÝEäUÅUÂÑR,b Ù ô²É›ê§³Ÿ­´63·ŽÄ,GÚ•›ÂªÏµŠ³`õìk-TÈʵQô³X Û·HWö6šÁ5Üc[ÜO)R„Ýë¹ÄW ÷¹KŠnHk&–‘Þ¶®ÍäªRÐõ"̻Еñn%Ñç5tV“½ì­°ûNíº·¿žu­j‘Ô_÷þWqTlÏ€½ ÜÅxR nwï‡ÞðDyì½p>1ºÒ /H ^ªô0,b°vÓ”÷üðÌa‡źUñбÅÎØˆwŸ0Þèz\œ:«Æ•Ÿò<ÿïýÚZm‚×¢Ûm둃<ÇþèøtE6lQj·‘úŲúUònÓÓdÐ=™J¦•——G+Ý+chÚò@Í$ÛéLSmvš;g OóªlþªQM+²ƒøµ#.äþŒªùÍY5ôžß5gùérX!@¹zÒ·–ïÍRJ-Œ½ÇÕúUt¯}‰f:Y]·…V£}³èjéxÕþƒ¯|U&UÇX½ùõÖ¬5JÁV—™¬Ãí‹QšÝÍ¢UR`Î$¤Œå.ÃY;›Ö-‹ÈLç]+[É«•‹FÑÿ¥Zr‚uîâe÷Q[D½m|'ÝÕ=czŒ¦fÓ¢ÐjÝÜù|‚&蹋„Σš®¢w·_:ш¹ ØK+š3‡„dJoJiÊm°]U,šÝÔÔ Op—=À<{ôÀÞ~R¼7žµŽ_<ß mSöæ dw\«ÆuÔ˜^òLÃZÜS†²¾sŽÙ7V¡&u¶óöÛ™#Üsö8<3æj¢£Ïè®õ3µt¦›”CoðdLõ kë¨Þ:׿îõß=Ó÷¾O ÏN ²³½ín;Üã.÷¹Ó½îv¿/;Þó®÷½ó½ï~ÿ;à/øÁ¾ð†?<â¯øÅ3¾ñŽ<ä#/ùÉS¾ò–¿<æ3,¯ùÍs¾óžÿ<èC/úÑ“¾ô¦?=êS¯úÕ³¾õ®=ìc/ûÙÓ¾ö¶¿=îsþ¯ûÝó¾÷¾ÿ½ßÔ.üá?aÀb§~|þòOùËWuòŸß1'}åʵï¦Vék, ÄϺP^o+!Ýâܧ@=¶ó´šYØÀ£T»Ï®HãÊ¡7ßw|ϤØx‡š~%“-l[•Í ‰}ÚÍPDUZù@ŒÎ™Ÿü)K^…\Ù¨›tMŒ¤ ꟼÑR—È©¬˜Ìÿ‰eܺš‘[ÅM rÍ×tÅÍ¿ȉԟÐÛÁ=ÊŽ¢=Ü Ú ýõIAG?!U&šÒ1OÁ%ÕtÉ 9Ù ®›ö`«ÐWÝ”öÅùlÔi¡¢àYÚ ÐŒœIAáòÛúóQ!aUz!yÕIiß±%—Æœ—½îà¡ÖX˜Í¤I´©¡ãüT~›ý]ÿ‘áCÑ •eÍÍÀÍÏÍŠ¶›Î¹NdQÖZ–P¥!!"`qš'~`ùQ_ŠmÖ'Z‹)Bß(2a€­âøY_*®!VxŸM‡ÞŒ‰Cá„óÍbõÅÏ/cÖE16Kñ%£2.£qã«›TÝ—Ö_®xÐ0:ãñèÎ.þ! VY`¥6úi¤bÑÖîÌ5†£ïÜøŸ Ne©ã€í[žTYTÉã<Ú¡WãX`VºY>BX<>! 䥅Ë@ÊÕÕÁã;*Z;Jó,d‹Ù•ýc Ýã4a°Q¤'5QR=âÉ 1Jñ¤£GzÍ.â#)2ÅÖØÕ<äD¦¤œá":¾UlÈV‰_ Ѥ#­$­ad/ú!Å_’ùä’ýTO±Y#!åkeÄáT^P~Óú‘£,äUúP0ÉGW™9¡äWV¡¯ˆåX’¥ eóq“¯e°mG†¹åX9K\Êå\‹YÚ%"åS©å´éeOúeòÔ%…â(ºG]¾æ×¤K´ýažâ`:&—5f,ž¢`J¦ Yfè`fGöY^®eÏy&^fhЦbN&|™&FáR_¡¢lr&4¹&Û fŸMa,îF‹ô¥mzÓ!ûÍ&mòåo6 nb+¦¦M.‘ogUí]Æ&qg/A'%çr*'e¦fn'vÎß ]“p‚çj^gx–KVTmž§ÌY§/>gzJR¹ˆV’&kú‹|Î'õcÞ'~¾g5í'8€V¦®eÂVŠvº'„æ§nn'„hƒò6Áy–g‚Љ…^ha’/¶§yå }(ˆ"`tò\‡*¨‰žhŠ¢ÈzÚØˆ’h‰¾(ÔŨ<‹¶¨‹â¨-é(õ,ذµå‚úh©)“=¨‘6é‘>)‡ŠZ&“Ú¨•Bi„Þhù))p¦W‘^i–†i’riŠ¸Ø‹€_î‘©ªñ˵˜Rç?M©>ΨؽišÆ©œÎ)›~’Œ1(œê).WŸf]•~i–9)–**=ߪ*iYŽ2ª–Jj:*1娖æ)‚"j9ÑéóÙ)+.§Rê Ò§¥Âèeª¦nꨖө:'“=[²j«^ê«ò¥óu[­F©šÊR2cªЬÎ*­îª­zd“yŸá)±öjÔ-d²º^Šj¢:«¯B+……ê°Zk±k§dTM–=é[1¹0 R«wxjÛ­"7j Ž+kœ«ªjº»‚]úIdŠc€ª‹$ÕëªÞk0¦"8–cê_I%Rèà˜ºzëÀæÒ1úë=žŒK¡Êœˆn_ÄV«Änÿ0ædê`aÍ vçÃBìÇr+³ÒF¾&ÜÁŽ!â!Å)•ʲgÀŽ]³lfjæíka±Ûɺ¢•œúí,ÏÚ«Àö'°*æý ÉºažrgOyl¤ö¬Ï.-GUÞ9U#¨¹*"å³²ìÖ2mÓ¶lÇ‚í¼>]Áª×²íÚ¾ìZÞ8ÝÜ.붆¬Ëâ-/Æ‘À‰iâe”Öõ­ßÖ­ÝÞmàÖT<|>^´*îߺ-à>nvœ} êâUn1^†ÚbnÛn®±™m¶QMÃbíá=- …îÊÒmé’®éžÕ¡I½!ëÞê/)-ãÒn Ÿ¨O­°#ÚÞê8ºîèH3œòÒÇwêÉ ÍÂÂŽºòÆ`ª¡€å,[íáÔ@Ç èõ"á~äևţ>Eï ¦œyýÿèøÆdö’›¶r/~Fãþá\b­õŽ/ú²ÎhâÚ­%”üÚn.p+舌§Ü¾¯Ä±Ÿý¯w-ˆùSˆHnuF°ûºj3pÎØ™s­<© ø’ª€†ßº~×ÉAV‚Ê#¦®6 ä*Ümàrãšá/Æp%ûT ?ð ‹`ŽM¼mÊâ,ü®VµpZ-¶ÜÄ(ó°ðò$¢í M!1ÁL'òëÙà¿ÚZóšÎŸÒíâ™Uoþ4ÜÂ}±«nr/ý¦°—N[_±îöcøÞYÇq̱u=ŒƬ’n&é ˜%d úñÕÊ ù ”WWûæT'"Çèÿ’qQFÛŸÏYb#±S7‚²4æÜ(gf&_(,î©Ç2¥ÃBìg0çñäæò+¾ñîÒ2…¶rzFæ¶hgâÖ2¾¢p©Þ2ó.suáö.zª2÷FsrÖ +,G³(VhšÔm3Ôò*6k“Ð)0S©—xj9Û%Ðæ­Œ¤óWºsf^K8¿­pAÒ<í9×='m˜d2<ƒk´ò?«ã@ßñÁx³óîsA4utØ=/4Cãó3G3DG´›[8W´Eó3ƒj-®ò»3°FoôώЄh\2óî¥,³eî,'2¦°´KÍVyc”•Z òHë­ªÈôæaQÒ¬÷²Žîô„Æ-¹bÌ-Db/Š4(²XçîòÙÍn1IsBª ;±9–×Ðàwõ†Uu9:µn¬„5-RuöÝïaÙtää¯}!óõ"õ/³k/ïêõ^73o93î!´a'´ƒutâõívHK³WW[c«¢d;teמcqC£Ëa'ÿ‡îÑØŒºˆ z!4ëÈ·µDïs_7oê÷½«f‡Ô5g³jvÚô¯E_3'5ostm¯ök¢­Xlë™)ë PwPûcNïðeÿö×÷—5“P‡ kœflu'ñ¿´w@7oU1ióñUóàטZ¯ ñî¯8ƒ÷fWµ›až=5ùÙÔ!Šñœv¶G»7õ"y›¡Íº•úàyçn*÷6’–´ÓjkÕIÆwŽõ„wcøºYðV?ö{7ø‚ á&>Ï'Ob ?Ôž$·ˆŸò"Úµ®°·KsiÒÿ®PñXáêrŒ¶-Óx5ËnÉ’%îÊøŽÇ¶¸µ)sCÊ.Òj8 “p‘?/¡@æ— pCÔÀ™¶1?9jG¹ïÂc̨øZ_²jk¹)󷙃´¨Š÷Ô–÷z{7™kØWõPgµ~¿yïÚW øX_PfÛ¹`ß¶¶a«5û9^Õ\ݸÎÙ¦²Ð1¶¡[?gù£§ƒö¤ï˜è$ù¥;ÙŸoúgvº§Ι¯s¨—º©Ÿ:ª§ ºª¯:«·º«¿zz;libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/BaseFieldTag.html0000644000175000017500000010271510404045222030717 0ustar arnaudarnaud00000000000000 BaseFieldTag (Apache Struts API Documentation)

    org.apache.struts.taglib.html
    Class BaseFieldTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.BaseHandlerTag
                        |
                        +--org.apache.struts.taglib.html.BaseInputTag
                              |
                              +--org.apache.struts.taglib.html.BaseFieldTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    FileTag, HiddenTag, PasswordTag, TextTag, TextTag

    public abstract class BaseFieldTag
    extends BaseInputTag

    Convenience base class for the various input tags for text fields.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String accept
              Comma-delimited list of content types that a server processing this form will handle correctly.
    protected  java.lang.String name
              The name of the bean containing our underlying property.
    protected  boolean redisplay
              The "redisplay contents" flag (used only on password).
    protected  java.lang.String type
              The type of input field represented by this tag (text, password, or hidden).
     
    Fields inherited from class org.apache.struts.taglib.html.BaseInputTag
    cols, maxlength, messages, property, rows, value
     
    Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    accesskey, defaultLocale, indexed, tabindex
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    BaseFieldTag()
               
     
    Method Summary
     int doStartTag()
              Generate the required input tag.
     java.lang.String getAccept()
               
     java.lang.String getName()
               
     boolean getRedisplay()
               
     void release()
              Release any acquired resources.
     void setAccept(java.lang.String accept)
               
     void setName(java.lang.String name)
               
     void setRedisplay(boolean redisplay)
               
     
    Methods inherited from class org.apache.struts.taglib.html.BaseInputTag
    doEndTag, getCols, getMaxlength, getProperty, getRows, getSize, getValue, setCols, setMaxlength, setProperty, setRows, setSize, setValue
     
    Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    getAccesskey, getAlt, getAltKey, getBundle, getDisabled, getElementClose, getIndexed, getLocale, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, getTitleKey, isXhtml, lookupProperty, message, prepareEventHandlers, prepareFocusEvents, prepareIndex, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setAlt, setAltKey, setBundle, setDisabled, setIndexed, setLocale, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle, setTitleKey
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doAfterBody, doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    accept

    protected java.lang.String accept
    Comma-delimited list of content types that a server processing this form will handle correctly. This property is defined only for the file tag, but is implemented here because it affects the rendered HTML of the corresponding <input> tag.


    name

    protected java.lang.String name
    The name of the bean containing our underlying property.


    redisplay

    protected boolean redisplay
    The "redisplay contents" flag (used only on password).


    type

    protected java.lang.String type
    The type of input field represented by this tag (text, password, or hidden).

    Constructor Detail

    BaseFieldTag

    public BaseFieldTag()
    Method Detail

    getAccept

    public java.lang.String getAccept()

    setAccept

    public void setAccept(java.lang.String accept)

    getName

    public java.lang.String getName()

    setName

    public void setName(java.lang.String name)

    getRedisplay

    public boolean getRedisplay()

    setRedisplay

    public void setRedisplay(boolean redisplay)

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Generate the required input tag.

    Support for indexed property since Struts 1.1

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class BaseInputTag
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    release

    public void release()
    Release any acquired resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class BaseInputTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/BaseHandlerTag.html0000644000175000017500000024652310404045220031255 0ustar arnaudarnaud00000000000000 BaseHandlerTag (Apache Struts API Documentation)

    org.apache.struts.taglib.html
    Class BaseHandlerTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.BaseHandlerTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    BaseInputTag, ButtonTag, CancelTag, CheckboxTag, ImgTag, LinkTag, MultiboxTag, RadioTag, ResetTag, SelectTag, SubmitTag

    public abstract class BaseHandlerTag
    extends javax.servlet.jsp.tagext.BodyTagSupport

    Base class for tags that render form elements capable of including JavaScript event handlers and/or CSS Style attributes. This class does not implement the doStartTag() or doEndTag() methods. Subclasses should provide appropriate implementations of these.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Don Clasen, James Turner
    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String accesskey
              Access key character.
    private  java.lang.String alt
              The alternate text of this element.
    private  java.lang.String altKey
              The message resources key of the alternate text.
    private  java.lang.String bundle
              The name of the message resources bundle for message lookups.
    protected static java.util.Locale defaultLocale
              The default Locale for our server.
    private  boolean disabled
              Component is disabled.
    protected  boolean indexed
              Whether to created indexed names for fields
    private  java.lang.String locale
              The name of the session attribute key for our locale.
    private static org.apache.commons.logging.Log log
              Commons Logging instance.
    private  java.lang.Class loopTagStatusClass
               
    private  java.lang.reflect.Method loopTagStatusGetIndex
               
    private  java.lang.Class loopTagSupportClass
               
    private  java.lang.reflect.Method loopTagSupportGetStatus
               
    protected static MessageResources messages
              The message resources for this package.
    private  java.lang.String onblur
              Component lost focus event.
    private  java.lang.String onchange
              Content changed after component lost focus event.
    private  java.lang.String onclick
              Mouse click event.
    private  java.lang.String ondblclick
              Mouse double click event.
    private  java.lang.String onfocus
              Component has received focus event.
    private  java.lang.String onkeydown
              Key down in component event.
    private  java.lang.String onkeypress
              Key down and up together in component event.
    private  java.lang.String onkeyup
              Key released in component event.
    private  java.lang.String onmousedown
              Mouse pressed on component event.
    private  java.lang.String onmousemove
              Mouse moved over component event.
    private  java.lang.String onmouseout
              Mouse exit component event.
    private  java.lang.String onmouseover
              Mouse over component event.
    private  java.lang.String onmouseup
              Mouse released on component event.
    private  java.lang.String onselect
              Text selected in component event.
    private  boolean readonly
              Component is readonly.
    private  java.lang.String style
              Style attribute associated with component.
    private  java.lang.String styleClass
              Named Style class associated with component.
    private  java.lang.String styleId
              Identifier associated with component.
    protected  java.lang.String tabindex
              Tab index value.
    private  java.lang.String title
              The advisory title of this element.
    private  java.lang.String titleKey
              The message resources key of the advisory title.
    private  boolean triedJstlInit
               
    private  boolean triedJstlSuccess
               
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    BaseHandlerTag()
               
     
    Method Summary
     java.lang.String getAccesskey()
              Returns the accessKey character.
     java.lang.String getAlt()
              Returns the alternate text attribute.
     java.lang.String getAltKey()
              Returns the message resources key of the alternate text.
     java.lang.String getBundle()
              Returns the name of the message resources bundle to use.
     boolean getDisabled()
              Returns the disabled event handler.
    protected  java.lang.String getElementClose()
              Returns the closing brace for an input element depending on xhtml status.
     boolean getIndexed()
              Returns the indexed value.
    private  java.lang.Integer getJstlLoopIndex()
               
     java.lang.String getLocale()
              Returns the name of the session attribute for our locale.
     java.lang.String getOnblur()
              Returns the onBlur event handler.
     java.lang.String getOnchange()
              Returns the onChange event handler.
     java.lang.String getOnclick()
              Returns the onClick event handler.
     java.lang.String getOndblclick()
              Returns the onDblClick event handler.
     java.lang.String getOnfocus()
              Returns the onFocus event handler.
     java.lang.String getOnkeydown()
              Returns the onKeyDown event handler.
     java.lang.String getOnkeypress()
              Returns the onKeyPress event handler.
     java.lang.String getOnkeyup()
              Returns the onKeyUp event handler.
     java.lang.String getOnmousedown()
              Returns the onMouseDown event handler.
     java.lang.String getOnmousemove()
              Returns the onMouseMove event handler.
     java.lang.String getOnmouseout()
              Returns the onMouseOut event handler.
     java.lang.String getOnmouseover()
              Returns the onMouseOver event handler.
     java.lang.String getOnmouseup()
              Returns the onMouseUp event handler.
     java.lang.String getOnselect()
              Returns the onSelect event handler.
     boolean getReadonly()
              Returns the readonly event handler.
     java.lang.String getStyle()
              Returns the style attribute.
     java.lang.String getStyleClass()
              Returns the style class attribute.
     java.lang.String getStyleId()
              Returns the style id attribute.
     java.lang.String getTabindex()
              Returns the tabIndex value.
     java.lang.String getTitle()
              Returns the advisory title attribute.
     java.lang.String getTitleKey()
              Returns the message resources key of the advisory title.
    protected  boolean isXhtml()
              Allows HTML tags to find out if they're nested within an %lt;html:html> tag that has xhtml set to true.
    protected  java.lang.String lookupProperty(java.lang.String beanName, java.lang.String property)
              Searches all scopes for the bean and calls BeanUtils.getProperty() with the given arguments and converts any exceptions into JspException.
    protected  java.lang.String message(java.lang.String literal, java.lang.String key)
              Return the text specified by the literal value or the message resources key, if any; otherwise return null.
    protected  java.lang.String prepareEventHandlers()
              Prepares the event handlers for inclusion in the component's HTML tag.
    protected  void prepareFocusEvents(java.lang.StringBuffer handlers)
              Prepares the focus event handlers, appending them to the the given StringBuffer.
    protected  void prepareIndex(java.lang.StringBuffer handlers, java.lang.String name)
              Appends bean name with index in brackets for tags with 'true' value in 'indexed' attribute.
    protected  void prepareKeyEvents(java.lang.StringBuffer handlers)
              Prepares the keyboard event handlers, appending them to the the given StringBuffer.
    protected  void prepareMouseEvents(java.lang.StringBuffer handlers)
              Prepares the mouse event handlers, appending them to the the given StringBuffer.
    protected  java.lang.String prepareStyles()
              Prepares the style attributes for inclusion in the component's HTML tag.
    protected  void prepareTextEvents(java.lang.StringBuffer handlers)
              Prepares the text event handlers, appending them to the the given StringBuffer.
     void release()
              Release any acquired resources.
     void setAccesskey(java.lang.String accessKey)
              Sets the accessKey character.
     void setAlt(java.lang.String alt)
              Sets the alternate text attribute.
     void setAltKey(java.lang.String altKey)
              Sets the message resources key of the alternate text.
     void setBundle(java.lang.String bundle)
              Sets the name of the message resources bundle to use.
     void setDisabled(boolean disabled)
              Sets the disabled event handler.
     void setIndexed(boolean indexed)
              Sets the indexed value.
     void setLocale(java.lang.String locale)
              Sets the name of the session attribute for our locale.
     void setOnblur(java.lang.String onBlur)
              Sets the onBlur event handler.
     void setOnchange(java.lang.String onChange)
              Sets the onChange event handler.
     void setOnclick(java.lang.String onClick)
              Sets the onClick event handler.
     void setOndblclick(java.lang.String onDblClick)
              Sets the onDblClick event handler.
     void setOnfocus(java.lang.String onFocus)
              Sets the onFocus event handler.
     void setOnkeydown(java.lang.String onKeyDown)
              Sets the onKeyDown event handler.
     void setOnkeypress(java.lang.String onKeyPress)
              Sets the onKeyPress event handler.
     void setOnkeyup(java.lang.String onKeyUp)
              Sets the onKeyUp event handler.
     void setOnmousedown(java.lang.String onMouseDown)
              Sets the onMouseDown event handler.
     void setOnmousemove(java.lang.String onMouseMove)
              Sets the onMouseMove event handler.
     void setOnmouseout(java.lang.String onMouseOut)
              Sets the onMouseOut event handler.
     void setOnmouseover(java.lang.String onMouseOver)
              Sets the onMouseOver event handler.
     void setOnmouseup(java.lang.String onMouseUp)
              Sets the onMouseUp event handler.
     void setOnselect(java.lang.String onSelect)
              Sets the onSelect event handler.
     void setReadonly(boolean readonly)
              Sets the readonly event handler.
     void setStyle(java.lang.String style)
              Sets the style attribute.
     void setStyleClass(java.lang.String styleClass)
              Sets the style class attribute.
     void setStyleId(java.lang.String styleId)
              Sets the style id attribute.
     void setTabindex(java.lang.String tabIndex)
              Sets the tabIndex value.
     void setTitle(java.lang.String title)
              Sets the advisory title attribute.
     void setTitleKey(java.lang.String titleKey)
              Sets the message resources key of the advisory title.
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doAfterBody, doEndTag, doInitBody, doStartTag, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    log

    private static org.apache.commons.logging.Log log
    Commons Logging instance.


    defaultLocale

    protected static final java.util.Locale defaultLocale
    The default Locale for our server.


    messages

    protected static MessageResources messages
    The message resources for this package.


    accesskey

    protected java.lang.String accesskey
    Access key character.


    tabindex

    protected java.lang.String tabindex
    Tab index value.


    indexed

    protected boolean indexed
    Whether to created indexed names for fields

    Since:
    Struts 1.1

    onclick

    private java.lang.String onclick
    Mouse click event.


    ondblclick

    private java.lang.String ondblclick
    Mouse double click event.


    onmouseover

    private java.lang.String onmouseover
    Mouse over component event.


    onmouseout

    private java.lang.String onmouseout
    Mouse exit component event.


    onmousemove

    private java.lang.String onmousemove
    Mouse moved over component event.


    onmousedown

    private java.lang.String onmousedown
    Mouse pressed on component event.


    onmouseup

    private java.lang.String onmouseup
    Mouse released on component event.


    onkeydown

    private java.lang.String onkeydown
    Key down in component event.


    onkeyup

    private java.lang.String onkeyup
    Key released in component event.


    onkeypress

    private java.lang.String onkeypress
    Key down and up together in component event.


    onselect

    private java.lang.String onselect
    Text selected in component event.


    onchange

    private java.lang.String onchange
    Content changed after component lost focus event.


    onblur

    private java.lang.String onblur
    Component lost focus event.


    onfocus

    private java.lang.String onfocus
    Component has received focus event.


    disabled

    private boolean disabled
    Component is disabled.


    readonly

    private boolean readonly
    Component is readonly.


    style

    private java.lang.String style
    Style attribute associated with component.


    styleClass

    private java.lang.String styleClass
    Named Style class associated with component.


    styleId

    private java.lang.String styleId
    Identifier associated with component.


    alt

    private java.lang.String alt
    The alternate text of this element.


    altKey

    private java.lang.String altKey
    The message resources key of the alternate text.


    bundle

    private java.lang.String bundle
    The name of the message resources bundle for message lookups.


    locale

    private java.lang.String locale
    The name of the session attribute key for our locale.


    title

    private java.lang.String title
    The advisory title of this element.


    titleKey

    private java.lang.String titleKey
    The message resources key of the advisory title.


    loopTagSupportClass

    private java.lang.Class loopTagSupportClass

    loopTagSupportGetStatus

    private java.lang.reflect.Method loopTagSupportGetStatus

    loopTagStatusClass

    private java.lang.Class loopTagStatusClass

    loopTagStatusGetIndex

    private java.lang.reflect.Method loopTagStatusGetIndex

    triedJstlInit

    private boolean triedJstlInit

    triedJstlSuccess

    private boolean triedJstlSuccess
    Constructor Detail

    BaseHandlerTag

    public BaseHandlerTag()
    Method Detail

    setAccesskey

    public void setAccesskey(java.lang.String accessKey)
    Sets the accessKey character.


    getAccesskey

    public java.lang.String getAccesskey()
    Returns the accessKey character.


    setTabindex

    public void setTabindex(java.lang.String tabIndex)
    Sets the tabIndex value.


    getTabindex

    public java.lang.String getTabindex()
    Returns the tabIndex value.


    setIndexed

    public void setIndexed(boolean indexed)
    Sets the indexed value.

    Since:
    Struts 1.1

    getIndexed

    public boolean getIndexed()
    Returns the indexed value.

    Since:
    Struts 1.1

    setOnclick

    public void setOnclick(java.lang.String onClick)
    Sets the onClick event handler.


    getOnclick

    public java.lang.String getOnclick()
    Returns the onClick event handler.


    setOndblclick

    public void setOndblclick(java.lang.String onDblClick)
    Sets the onDblClick event handler.


    getOndblclick

    public java.lang.String getOndblclick()
    Returns the onDblClick event handler.


    setOnmousedown

    public void setOnmousedown(java.lang.String onMouseDown)
    Sets the onMouseDown event handler.


    getOnmousedown

    public java.lang.String getOnmousedown()
    Returns the onMouseDown event handler.


    setOnmouseup

    public void setOnmouseup(java.lang.String onMouseUp)
    Sets the onMouseUp event handler.


    getOnmouseup

    public java.lang.String getOnmouseup()
    Returns the onMouseUp event handler.


    setOnmousemove

    public void setOnmousemove(java.lang.String onMouseMove)
    Sets the onMouseMove event handler.


    getOnmousemove

    public java.lang.String getOnmousemove()
    Returns the onMouseMove event handler.


    setOnmouseover

    public void setOnmouseover(java.lang.String onMouseOver)
    Sets the onMouseOver event handler.


    getOnmouseover

    public java.lang.String getOnmouseover()
    Returns the onMouseOver event handler.


    setOnmouseout

    public void setOnmouseout(java.lang.String onMouseOut)
    Sets the onMouseOut event handler.


    getOnmouseout

    public java.lang.String getOnmouseout()
    Returns the onMouseOut event handler.


    setOnkeydown

    public void setOnkeydown(java.lang.String onKeyDown)
    Sets the onKeyDown event handler.


    getOnkeydown

    public java.lang.String getOnkeydown()
    Returns the onKeyDown event handler.


    setOnkeyup

    public void setOnkeyup(java.lang.String onKeyUp)
    Sets the onKeyUp event handler.


    getOnkeyup

    public java.lang.String getOnkeyup()
    Returns the onKeyUp event handler.


    setOnkeypress

    public void setOnkeypress(java.lang.String onKeyPress)
    Sets the onKeyPress event handler.


    getOnkeypress

    public java.lang.String getOnkeypress()
    Returns the onKeyPress event handler.


    setOnchange

    public void setOnchange(java.lang.String onChange)
    Sets the onChange event handler.


    getOnchange

    public java.lang.String getOnchange()
    Returns the onChange event handler.


    setOnselect

    public void setOnselect(java.lang.String onSelect)
    Sets the onSelect event handler.


    getOnselect

    public java.lang.String getOnselect()
    Returns the onSelect event handler.


    setOnblur

    public void setOnblur(java.lang.String onBlur)
    Sets the onBlur event handler.


    getOnblur

    public java.lang.String getOnblur()
    Returns the onBlur event handler.


    setOnfocus

    public void setOnfocus(java.lang.String onFocus)
    Sets the onFocus event handler.


    getOnfocus

    public java.lang.String getOnfocus()
    Returns the onFocus event handler.


    setDisabled

    public void setDisabled(boolean disabled)
    Sets the disabled event handler.


    getDisabled

    public boolean getDisabled()
    Returns the disabled event handler.


    setReadonly

    public void setReadonly(boolean readonly)
    Sets the readonly event handler.


    getReadonly

    public boolean getReadonly()
    Returns the readonly event handler.


    setStyle

    public void setStyle(java.lang.String style)
    Sets the style attribute.


    getStyle

    public java.lang.String getStyle()
    Returns the style attribute.


    setStyleClass

    public void setStyleClass(java.lang.String styleClass)
    Sets the style class attribute.


    getStyleClass

    public java.lang.String getStyleClass()
    Returns the style class attribute.


    setStyleId

    public void setStyleId(java.lang.String styleId)
    Sets the style id attribute.


    getStyleId

    public java.lang.String getStyleId()
    Returns the style id attribute.


    getAlt

    public java.lang.String getAlt()
    Returns the alternate text attribute.


    setAlt

    public void setAlt(java.lang.String alt)
    Sets the alternate text attribute.


    getAltKey

    public java.lang.String getAltKey()
    Returns the message resources key of the alternate text.


    setAltKey

    public void setAltKey(java.lang.String altKey)
    Sets the message resources key of the alternate text.


    getBundle

    public java.lang.String getBundle()
    Returns the name of the message resources bundle to use.


    setBundle

    public void setBundle(java.lang.String bundle)
    Sets the name of the message resources bundle to use.


    getLocale

    public java.lang.String getLocale()
    Returns the name of the session attribute for our locale.


    setLocale

    public void setLocale(java.lang.String locale)
    Sets the name of the session attribute for our locale.


    getTitle

    public java.lang.String getTitle()
    Returns the advisory title attribute.


    setTitle

    public void setTitle(java.lang.String title)
    Sets the advisory title attribute.


    getTitleKey

    public java.lang.String getTitleKey()
    Returns the message resources key of the advisory title.


    setTitleKey

    public void setTitleKey(java.lang.String titleKey)
    Sets the message resources key of the advisory title.


    release

    public void release()
    Release any acquired resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class javax.servlet.jsp.tagext.BodyTagSupport

    message

    protected java.lang.String message(java.lang.String literal,
                                       java.lang.String key)
                                throws javax.servlet.jsp.JspException
    Return the text specified by the literal value or the message resources key, if any; otherwise return null.

    Parameters:
    literal - Literal text value or null
    key - Message resources key or null
    Throws:
    javax.servlet.jsp.JspException - if both arguments are non-null

    getJstlLoopIndex

    private java.lang.Integer getJstlLoopIndex()

    prepareIndex

    protected void prepareIndex(java.lang.StringBuffer handlers,
                                java.lang.String name)
                         throws javax.servlet.jsp.JspException
    Appends bean name with index in brackets for tags with 'true' value in 'indexed' attribute.

    Parameters:
    handlers - The StringBuffer that output will be appended to.
    Throws:
    javax.servlet.jsp.JspException - if 'indexed' tag used outside of iterate tag.

    prepareStyles

    protected java.lang.String prepareStyles()
                                      throws javax.servlet.jsp.JspException
    Prepares the style attributes for inclusion in the component's HTML tag.

    Returns:
    The prepared String for inclusion in the HTML tag.
    Throws:
    javax.servlet.jsp.JspException - if invalid attributes are specified

    prepareEventHandlers

    protected java.lang.String prepareEventHandlers()
    Prepares the event handlers for inclusion in the component's HTML tag.

    Returns:
    The prepared String for inclusion in the HTML tag.

    prepareMouseEvents

    protected void prepareMouseEvents(java.lang.StringBuffer handlers)
    Prepares the mouse event handlers, appending them to the the given StringBuffer.

    Parameters:
    handlers - The StringBuffer that output will be appended to.

    prepareKeyEvents

    protected void prepareKeyEvents(java.lang.StringBuffer handlers)
    Prepares the keyboard event handlers, appending them to the the given StringBuffer.

    Parameters:
    handlers - The StringBuffer that output will be appended to.

    prepareTextEvents

    protected void prepareTextEvents(java.lang.StringBuffer handlers)
    Prepares the text event handlers, appending them to the the given StringBuffer.

    Parameters:
    handlers - The StringBuffer that output will be appended to.

    prepareFocusEvents

    protected void prepareFocusEvents(java.lang.StringBuffer handlers)
    Prepares the focus event handlers, appending them to the the given StringBuffer.

    Parameters:
    handlers - The StringBuffer that output will be appended to.

    isXhtml

    protected boolean isXhtml()
    Allows HTML tags to find out if they're nested within an %lt;html:html> tag that has xhtml set to true.

    Returns:
    true if the tag is nested within an html tag with xhtml set to true, false otherwise.
    Since:
    Struts 1.1

    getElementClose

    protected java.lang.String getElementClose()
    Returns the closing brace for an input element depending on xhtml status. The tag must be nested within an %lt;html:html> tag that has xhtml set to true.

    Returns:
    String - > if xhtml is false, /> if xhtml is true
    Since:
    Struts 1.1

    lookupProperty

    protected java.lang.String lookupProperty(java.lang.String beanName,
                                              java.lang.String property)
                                       throws javax.servlet.jsp.JspException
    Searches all scopes for the bean and calls BeanUtils.getProperty() with the given arguments and converts any exceptions into JspException.

    Parameters:
    beanName - The name of the object to get the property from.
    property - The name of the property to get.
    Returns:
    The value of the property.
    Throws:
    javax.servlet.jsp.JspException
    Since:
    Struts 1.1


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/BaseInputTag.html0000644000175000017500000011223710404045242030775 0ustar arnaudarnaud00000000000000 BaseInputTag (Apache Struts API Documentation)

    org.apache.struts.taglib.html
    Class BaseInputTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.BaseHandlerTag
                        |
                        +--org.apache.struts.taglib.html.BaseInputTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    BaseFieldTag, TextareaTag

    public abstract class BaseInputTag
    extends BaseHandlerTag

    Abstract base class for the various input tags.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String cols
              The number of character columns for this field, or negative for no limit.
    protected  java.lang.String maxlength
              The maximum number of characters allowed, or negative for no limit.
    protected static MessageResources messages
              The message resources for this package.
    protected  java.lang.String property
              The name of the field (and associated property) being processed.
    protected  java.lang.String rows
              The number of rows for this field, or negative for no limit.
    protected  java.lang.String value
              The value for this field, or null to retrieve the corresponding property from our associated bean.
     
    Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    accesskey, defaultLocale, indexed, tabindex
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    BaseInputTag()
               
     
    Method Summary
     int doEndTag()
              Process the end of this tag.
     int doStartTag()
              Process the start of this tag.
     java.lang.String getCols()
              Return the number of columns for this field.
     java.lang.String getMaxlength()
              Return the maximum length allowed.
     java.lang.String getProperty()
              Return the property name.
     java.lang.String getRows()
              Return the number of rows for this field.
     java.lang.String getSize()
              Return the size of this field (synonym for getCols()).
     java.lang.String getValue()
              Return the field value (if any).
     void release()
              Release any acquired resources.
     void setCols(java.lang.String cols)
              Set the number of columns for this field.
     void setMaxlength(java.lang.String maxlength)
              Set the maximum length allowed.
     void setProperty(java.lang.String property)
              Set the property name.
     void setRows(java.lang.String rows)
              Set the number of rows for this field.
     void setSize(java.lang.String size)
              Set the size of this field (synonym for setCols()).
     void setValue(java.lang.String value)
              Set the field value (if any).
     
    Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    getAccesskey, getAlt, getAltKey, getBundle, getDisabled, getElementClose, getIndexed, getLocale, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, getTitleKey, isXhtml, lookupProperty, message, prepareEventHandlers, prepareFocusEvents, prepareIndex, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setAlt, setAltKey, setBundle, setDisabled, setIndexed, setLocale, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle, setTitleKey
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doAfterBody, doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    cols

    protected java.lang.String cols
    The number of character columns for this field, or negative for no limit.


    maxlength

    protected java.lang.String maxlength
    The maximum number of characters allowed, or negative for no limit.


    messages

    protected static MessageResources messages
    The message resources for this package.


    property

    protected java.lang.String property
    The name of the field (and associated property) being processed.


    rows

    protected java.lang.String rows
    The number of rows for this field, or negative for no limit.


    value

    protected java.lang.String value
    The value for this field, or null to retrieve the corresponding property from our associated bean.

    Constructor Detail

    BaseInputTag

    public BaseInputTag()
    Method Detail

    getCols

    public java.lang.String getCols()
    Return the number of columns for this field.


    setCols

    public void setCols(java.lang.String cols)
    Set the number of columns for this field.

    Parameters:
    cols - The new number of columns

    getMaxlength

    public java.lang.String getMaxlength()
    Return the maximum length allowed.


    setMaxlength

    public void setMaxlength(java.lang.String maxlength)
    Set the maximum length allowed.

    Parameters:
    maxlength - The new maximum length

    getProperty

    public java.lang.String getProperty()
    Return the property name.


    setProperty

    public void setProperty(java.lang.String property)
    Set the property name.

    Parameters:
    property - The new property name

    getRows

    public java.lang.String getRows()
    Return the number of rows for this field.


    setRows

    public void setRows(java.lang.String rows)
    Set the number of rows for this field.

    Parameters:
    rows - The new number of rows

    getSize

    public java.lang.String getSize()
    Return the size of this field (synonym for getCols()).


    setSize

    public void setSize(java.lang.String size)
    Set the size of this field (synonym for setCols()).

    Parameters:
    size - The new size

    getValue

    public java.lang.String getValue()
    Return the field value (if any).


    setValue

    public void setValue(java.lang.String value)
    Set the field value (if any).

    Parameters:
    value - The new field value, or null to retrieve the corresponding property from the bean

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Process the start of this tag. The default implementation does nothing.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Process the end of this tag. The default implementation does nothing.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    release

    public void release()
    Release any acquired resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class BaseHandlerTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/BaseTag.html0000644000175000017500000004437410404045234027764 0ustar arnaudarnaud00000000000000 BaseTag (Apache Struts API Documentation)

    org.apache.struts.taglib.html
    Class BaseTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.html.BaseTag
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class BaseTag
    extends javax.servlet.jsp.tagext.TagSupport

    Renders an HTML element with an href attribute pointing to the absolute location of the enclosing JSP page. This tag is only valid when nested inside a head tag body. The presence of this tag allows the browser to resolve relative URL's to images, CSS stylesheets and other resources in a manner independent of the URL used to call the ActionServlet.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Luis Arias , David Graham
    See Also:
    Serialized Form

    Field Summary
    protected static MessageResources messages
              The message resources for this package.
    protected  java.lang.String server
              The server name to use instead of request.getServerName().
    protected  java.lang.String target
              The target window for this base reference.
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    BaseTag()
               
     
    Method Summary
     int doStartTag()
              Process the start of this tag.
     java.lang.String getServer()
              Returns the server.
     java.lang.String getTarget()
               
    protected  java.lang.String renderBaseElement(java.lang.String scheme, java.lang.String serverName, int port, java.lang.String uri)
              Render a fully formed HTML <base> element and return it as a String.
     void setServer(java.lang.String server)
              Sets the server.
     void setTarget(java.lang.String target)
               
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    doEndTag, findAncestorWithClass, getId, getParent, getValue, getValues, release, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    messages

    protected static MessageResources messages
    The message resources for this package.


    server

    protected java.lang.String server
    The server name to use instead of request.getServerName().


    target

    protected java.lang.String target
    The target window for this base reference.

    Constructor Detail

    BaseTag

    public BaseTag()
    Method Detail

    getTarget

    public java.lang.String getTarget()

    setTarget

    public void setTarget(java.lang.String target)

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Process the start of this tag.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.TagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    renderBaseElement

    protected java.lang.String renderBaseElement(java.lang.String scheme,
                                                 java.lang.String serverName,
                                                 int port,
                                                 java.lang.String uri)
    Render a fully formed HTML <base> element and return it as a String.

    Parameters:
    scheme - The scheme used in the url (ie. http or https).
    serverName -
    port -
    uri - The portion of the url from the protocol name up to the query string.
    Returns:
    String An HTML <base> element.
    Since:
    Struts 1.1

    getServer

    public java.lang.String getServer()
    Returns the server.

    Returns:
    String

    setServer

    public void setServer(java.lang.String server)
    Sets the server.

    Parameters:
    server - The server to set


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/ButtonTag.html0000644000175000017500000007426210404045210030356 0ustar arnaudarnaud00000000000000 ButtonTag (Apache Struts API Documentation)

    org.apache.struts.taglib.html
    Class ButtonTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.BaseHandlerTag
                        |
                        +--org.apache.struts.taglib.html.ButtonTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class ButtonTag
    extends BaseHandlerTag

    Renders an HTML BUTTON tag within the Struts framework.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Don Clasen
    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String property
              The property name of the generated button.
    protected  java.lang.String text
              The body content of this tag (if any).
    protected  java.lang.String value
              The value of the button label.
     
    Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    accesskey, defaultLocale, indexed, messages, tabindex
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    ButtonTag()
               
     
    Method Summary
     int doAfterBody()
              Save the associated label from the body content (if any).
     int doEndTag()
              Process the end of this tag.
     int doStartTag()
              Process the start of this tag.
     java.lang.String getProperty()
              Return the property name.
     java.lang.String getValue()
              Return the label value.
     void release()
              Release any acquired resources.
     void setProperty(java.lang.String property)
              Set the property name.
     void setValue(java.lang.String value)
              Set the label value.
     
    Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    getAccesskey, getAlt, getAltKey, getBundle, getDisabled, getElementClose, getIndexed, getLocale, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, getTitleKey, isXhtml, lookupProperty, message, prepareEventHandlers, prepareFocusEvents, prepareIndex, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setAlt, setAltKey, setBundle, setDisabled, setIndexed, setLocale, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle, setTitleKey
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    property

    protected java.lang.String property
    The property name of the generated button.


    text

    protected java.lang.String text
    The body content of this tag (if any).


    value

    protected java.lang.String value
    The value of the button label.

    Constructor Detail

    ButtonTag

    public ButtonTag()
    Method Detail

    getProperty

    public java.lang.String getProperty()
    Return the property name.


    setProperty

    public void setProperty(java.lang.String property)
    Set the property name.

    Parameters:
    property - The property name

    getValue

    public java.lang.String getValue()
    Return the label value.


    setValue

    public void setValue(java.lang.String value)
    Set the label value.

    Parameters:
    value - The label value

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Process the start of this tag.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doAfterBody

    public int doAfterBody()
                    throws javax.servlet.jsp.JspException
    Save the associated label from the body content (if any).

    Specified by:
    doAfterBody in interface javax.servlet.jsp.tagext.BodyTag
    Overrides:
    doAfterBody in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Process the end of this tag.

    Support for indexed property since Struts 1.1

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    release

    public void release()
    Release any acquired resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class BaseHandlerTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/CancelTag.html0000644000175000017500000007536710404045222030302 0ustar arnaudarnaud00000000000000 CancelTag (Apache Struts API Documentation)

    org.apache.struts.taglib.html
    Class CancelTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.BaseHandlerTag
                        |
                        +--org.apache.struts.taglib.html.CancelTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class CancelTag
    extends BaseHandlerTag

    Tag for input fields of type "cancel".

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Jeff Hutchinson
    See Also:
    Serialized Form

    Field Summary
    protected static MessageResources messages
              The message resources for this package.
    protected  java.lang.String property
              The property name of the generated button.
    protected  java.lang.String text
              The body content of this tag (if any).
    protected  java.lang.String value
              The value of the button label.
     
    Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    accesskey, defaultLocale, indexed, tabindex
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    CancelTag()
               
     
    Method Summary
     int doAfterBody()
              Save the associated label from the body content.
     int doEndTag()
              Process the end of this tag.
     int doStartTag()
              Process the start of this tag.
     java.lang.String getProperty()
              Return the property name.
     java.lang.String getValue()
              Return the label value.
     void release()
              Release any acquired resources.
     void setProperty(java.lang.String property)
              Set the property name.
     void setValue(java.lang.String value)
              Set the label value.
     
    Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    getAccesskey, getAlt, getAltKey, getBundle, getDisabled, getElementClose, getIndexed, getLocale, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, getTitleKey, isXhtml, lookupProperty, message, prepareEventHandlers, prepareFocusEvents, prepareIndex, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setAlt, setAltKey, setBundle, setDisabled, setIndexed, setLocale, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle, setTitleKey
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    messages

    protected static MessageResources messages
    The message resources for this package.


    property

    protected java.lang.String property
    The property name of the generated button.


    text

    protected java.lang.String text
    The body content of this tag (if any).


    value

    protected java.lang.String value
    The value of the button label.

    Constructor Detail

    CancelTag

    public CancelTag()
    Method Detail

    getProperty

    public java.lang.String getProperty()
    Return the property name.


    setProperty

    public void setProperty(java.lang.String property)
    Set the property name.

    Parameters:
    property - The property name

    getValue

    public java.lang.String getValue()
    Return the label value.


    setValue

    public void setValue(java.lang.String value)
    Set the label value.

    Parameters:
    value - The label value

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Process the start of this tag.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doAfterBody

    public int doAfterBody()
                    throws javax.servlet.jsp.JspException
    Save the associated label from the body content.

    Specified by:
    doAfterBody in interface javax.servlet.jsp.tagext.BodyTag
    Overrides:
    doAfterBody in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Process the end of this tag.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    release

    public void release()
    Release any acquired resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class BaseHandlerTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/CheckboxTag.html0000644000175000017500000010133010404045174030625 0ustar arnaudarnaud00000000000000 CheckboxTag (Apache Struts API Documentation)

    org.apache.struts.taglib.html
    Class CheckboxTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.BaseHandlerTag
                        |
                        +--org.apache.struts.taglib.html.CheckboxTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    NestedCheckboxTag

    public class CheckboxTag
    extends BaseHandlerTag

    Tag for input fields of type "checkbox".

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
    protected static MessageResources messages
              The message resources for this package.
    protected  java.lang.String name
              The name of the bean containing our underlying property.
    protected  java.lang.String property
              The property name for this field.
    protected  java.lang.String text
              The body content of this tag (if any).
    protected  java.lang.String value
              The server value for this option.
     
    Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    accesskey, defaultLocale, indexed, tabindex
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    CheckboxTag()
               
     
    Method Summary
     int doAfterBody()
              Save the associated label from the body content.
     int doEndTag()
              Process the remainder of this page normally.
     int doStartTag()
              Generate the required input tag.
     java.lang.String getName()
               
     java.lang.String getProperty()
              Return the property name.
     java.lang.String getValue()
              Return the server value.
     void release()
              Release any acquired resources.
     void setName(java.lang.String name)
               
     void setProperty(java.lang.String property)
              Set the property name.
     void setValue(java.lang.String value)
              Set the server value.
     
    Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    getAccesskey, getAlt, getAltKey, getBundle, getDisabled, getElementClose, getIndexed, getLocale, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, getTitleKey, isXhtml, lookupProperty, message, prepareEventHandlers, prepareFocusEvents, prepareIndex, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setAlt, setAltKey, setBundle, setDisabled, setIndexed, setLocale, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle, setTitleKey
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    messages

    protected static MessageResources messages
    The message resources for this package.


    name

    protected java.lang.String name
    The name of the bean containing our underlying property.


    property

    protected java.lang.String property
    The property name for this field.


    text

    protected java.lang.String text
    The body content of this tag (if any).


    value

    protected java.lang.String value
    The server value for this option.

    Constructor Detail

    CheckboxTag

    public CheckboxTag()
    Method Detail

    getName

    public java.lang.String getName()

    setName

    public void setName(java.lang.String name)

    getProperty

    public java.lang.String getProperty()
    Return the property name.


    setProperty

    public void setProperty(java.lang.String property)
    Set the property name.

    Parameters:
    property - The new property name

    getValue

    public java.lang.String getValue()
    Return the server value.


    setValue

    public void setValue(java.lang.String value)
    Set the server value.

    Parameters:
    value - The new server value

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Generate the required input tag.

    Support for indexed property since Struts 1.1

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doAfterBody

    public int doAfterBody()
                    throws javax.servlet.jsp.JspException
    Save the associated label from the body content.

    Specified by:
    doAfterBody in interface javax.servlet.jsp.tagext.BodyTag
    Overrides:
    doAfterBody in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Process the remainder of this page normally.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    release

    public void release()
    Release any acquired resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class BaseHandlerTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/Constants.html0000644000175000017500000003453310404045244030427 0ustar arnaudarnaud00000000000000 Constants (Apache Struts API Documentation)

    org.apache.struts.taglib.html
    Class Constants

    java.lang.Object
      |
      +--org.apache.struts.taglib.html.Constants
    

    public class Constants
    extends java.lang.Object

    Manifest constants for this package.


    Field Summary
    static java.lang.String BEAN_KEY
              The attribute key for the bean our form is related to.
    static java.lang.String CANCEL_PROPERTY
              The property under which a Cancel button press is reported.
    static java.lang.String CANCEL_PROPERTY_X
              The property under which a Cancel button press is reported, if the Cancel button is rendered as an image.
    static java.lang.String FORM_KEY
              The attribute key for the form tag itself.
    static java.lang.String Package
              The name of this package.
    static java.lang.String SELECT_KEY
              The attribute key for the select tag itself.
    static java.lang.String TOKEN_KEY
              The property under which a transaction token is reported.
     
    Constructor Summary
    Constants()
               
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    Package

    public static final java.lang.String Package
    The name of this package.

    See Also:
    Constant Field Values

    BEAN_KEY

    public static final java.lang.String BEAN_KEY
    The attribute key for the bean our form is related to.

    See Also:
    Constant Field Values

    CANCEL_PROPERTY

    public static final java.lang.String CANCEL_PROPERTY
    The property under which a Cancel button press is reported.

    See Also:
    Constant Field Values

    CANCEL_PROPERTY_X

    public static final java.lang.String CANCEL_PROPERTY_X
    The property under which a Cancel button press is reported, if the Cancel button is rendered as an image.

    See Also:
    Constant Field Values

    FORM_KEY

    public static final java.lang.String FORM_KEY
    The attribute key for the form tag itself.

    See Also:
    Constant Field Values

    SELECT_KEY

    public static final java.lang.String SELECT_KEY
    The attribute key for the select tag itself.

    See Also:
    Constant Field Values

    TOKEN_KEY

    public static final java.lang.String TOKEN_KEY
    The property under which a transaction token is reported.

    See Also:
    Constant Field Values
    Constructor Detail

    Constants

    public Constants()


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/ErrorsTag.html0000644000175000017500000005564710404045234030373 0ustar arnaudarnaud00000000000000 ErrorsTag (Apache Struts API Documentation)

    org.apache.struts.taglib.html
    Class ErrorsTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.html.ErrorsTag
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    NestedErrorsTag

    public class ErrorsTag
    extends javax.servlet.jsp.tagext.TagSupport

    Custom tag that renders error messages if an appropriate request attribute has been created. The tag looks for a request attribute with a reserved key, and assumes that it is either a String, a String array, containing message keys to be looked up in the module's MessageResources, or an object of type org.apache.struts.action.ActionErrors.

    The following optional message keys will be utilized if corresponding messages exist for them in the application resources:

    • errors.header - If present, the corresponding message will be rendered prior to the individual list of error messages.
    • errors.footer - If present, the corresponding message will be rendered following the individual list of error messages.
    • errors.prefix - If present, the corresponding message will be rendered before each individual error message.
    • errors.suffix - If present, the corresponding message will be rendered after each individual error message.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String bundle
              The servlet context attribute key for our resources.
    protected static java.util.Locale defaultLocale
              Deprecated. Use Locale.getDefault() directly.
    protected static java.lang.String lineEnd
              The line ending string.
    protected  java.lang.String locale
              The session attribute key for our locale.
    protected static MessageResources messages
              The message resources for this package.
    protected  java.lang.String name
              The request attribute key for our error messages (if any).
    protected  java.lang.String property
              The name of the property for which error messages should be returned, or null to return all errors.
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    ErrorsTag()
               
     
    Method Summary
     int doStartTag()
              Render the specified error messages if there are any.
     java.lang.String getBundle()
               
     java.lang.String getLocale()
               
     java.lang.String getName()
               
     java.lang.String getProperty()
               
     void release()
              Release any acquired resources.
     void setBundle(java.lang.String bundle)
               
     void setLocale(java.lang.String locale)
               
     void setName(java.lang.String name)
               
     void setProperty(java.lang.String property)
               
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    doEndTag, findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    bundle

    protected java.lang.String bundle
    The servlet context attribute key for our resources.


    defaultLocale

    protected static java.util.Locale defaultLocale
    Deprecated. Use Locale.getDefault() directly.

    The default locale on our server.


    lineEnd

    protected static java.lang.String lineEnd
    The line ending string.


    locale

    protected java.lang.String locale
    The session attribute key for our locale.


    messages

    protected static MessageResources messages
    The message resources for this package.


    name

    protected java.lang.String name
    The request attribute key for our error messages (if any).


    property

    protected java.lang.String property
    The name of the property for which error messages should be returned, or null to return all errors.

    Constructor Detail

    ErrorsTag

    public ErrorsTag()
    Method Detail

    getBundle

    public java.lang.String getBundle()

    setBundle

    public void setBundle(java.lang.String bundle)

    getLocale

    public java.lang.String getLocale()

    setLocale

    public void setLocale(java.lang.String locale)

    getName

    public java.lang.String getName()

    setName

    public void setName(java.lang.String name)

    getProperty

    public java.lang.String getProperty()

    setProperty

    public void setProperty(java.lang.String property)

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Render the specified error messages if there are any.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.TagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    release

    public void release()
    Release any acquired resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class javax.servlet.jsp.tagext.TagSupport


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/FileTag.html0000644000175000017500000006575310404045210027767 0ustar arnaudarnaud00000000000000 FileTag (Apache Struts API Documentation)

    org.apache.struts.taglib.html
    Class FileTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.BaseHandlerTag
                        |
                        +--org.apache.struts.taglib.html.BaseInputTag
                              |
                              +--org.apache.struts.taglib.html.BaseFieldTag
                                    |
                                    +--org.apache.struts.taglib.html.FileTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    NestedFileTag

    public class FileTag
    extends BaseFieldTag

    Custom tag for input fields of type "file".

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
     
    Fields inherited from class org.apache.struts.taglib.html.BaseFieldTag
    accept, name, redisplay, type
     
    Fields inherited from class org.apache.struts.taglib.html.BaseInputTag
    cols, maxlength, messages, property, rows, value
     
    Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    accesskey, defaultLocale, indexed, tabindex
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    FileTag()
              Construct a new instance of this tag.
     
    Methods inherited from class org.apache.struts.taglib.html.BaseFieldTag
    doStartTag, getAccept, getName, getRedisplay, release, setAccept, setName, setRedisplay
     
    Methods inherited from class org.apache.struts.taglib.html.BaseInputTag
    doEndTag, getCols, getMaxlength, getProperty, getRows, getSize, getValue, setCols, setMaxlength, setProperty, setRows, setSize, setValue
     
    Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    getAccesskey, getAlt, getAltKey, getBundle, getDisabled, getElementClose, getIndexed, getLocale, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, getTitleKey, isXhtml, lookupProperty, message, prepareEventHandlers, prepareFocusEvents, prepareIndex, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setAlt, setAltKey, setBundle, setDisabled, setIndexed, setLocale, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle, setTitleKey
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doAfterBody, doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Constructor Detail

    FileTag

    public FileTag()
    Construct a new instance of this tag.



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/FormTag.html0000644000175000017500000015052110404045224030004 0ustar arnaudarnaud00000000000000 FormTag (Apache Struts API Documentation)

    org.apache.struts.taglib.html
    Class FormTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.html.FormTag
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    NestedFormTag

    public class FormTag
    extends javax.servlet.jsp.tagext.TagSupport

    Custom tag that represents an input form, associated with a bean whose properties correspond to the various fields of the form.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Craig R. McClanahan, Martin Cooper, James Turner, David Graham
    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String action
              The action URL to which this form should be submitted, if any.
    protected  java.lang.String beanName
              The name of the form bean to (create and) use.
    protected  java.lang.String beanScope
              The scope of the form bean to (create and) use.
    protected  java.lang.String beanType
              The type of the form bean to (create and) use.
    protected  java.lang.String enctype
              The content encoding to be used on a POST submit.
    protected  java.lang.String focus
              The name of the field to receive focus, if any.
    protected  java.lang.String focusIndex
              The index in the focus field array to receive focus.
    protected static java.lang.String lineEnd
              The line ending string.
    protected  ActionMapping mapping
              The ActionMapping defining where we will be submitting this form
    protected static MessageResources messages
              The message resources for this package.
    protected  java.lang.String method
              The request method used when submitting this form.
    protected  ModuleConfig moduleConfig
              The module configuration for our module.
    protected  java.lang.String name
              The attribute key under which our associated bean is stored.
    protected  java.lang.String onreset
              The onReset event script.
    protected  java.lang.String onsubmit
              The onSubmit event script.
    protected  java.lang.String scope
              The scope (request or session) under which our associated bean is stored.
    protected  ActionServlet servlet
              The ActionServlet instance we are associated with (so that we can initialize the servlet property on any form bean that we create).
    protected  java.lang.String style
              The style attribute associated with this tag.
    protected  java.lang.String styleClass
              The style class associated with this tag.
    protected  java.lang.String styleId
              The identifier associated with this tag.
    protected  java.lang.String target
              The window target.
    protected  java.lang.String type
              The Java class name of the bean to be created, if necessary.
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    FormTag()
               
     
    Method Summary
     int doEndTag()
              Render the end of this form.
     int doStartTag()
              Render the beginning of this form.
     java.lang.String getAction()
              Return the action URL to which this form should be submitted.
     java.lang.String getBeanName()
              Return the name of the form bean corresponding to this tag.
     java.lang.String getEnctype()
              Return the content encoding used when submitting this form.
     java.lang.String getFocus()
              Return the focus field name for this form.
     java.lang.String getFocusIndex()
              Returns the focusIndex.
     java.lang.String getMethod()
              Return the request method used when submitting this form.
     java.lang.String getName()
              Return the attribute key name of our bean.
     java.lang.String getOnreset()
              Return the onReset event script.
     java.lang.String getOnsubmit()
              Return the onSubmit event script.
     java.lang.String getScope()
              Return the attribute scope of our bean.
     java.lang.String getStyle()
              Return the style attribute for this tag.
     java.lang.String getStyleClass()
              Return the style class for this tag.
     java.lang.String getStyleId()
              Return the style identifier for this tag.
     java.lang.String getTarget()
              Return the window target.
     java.lang.String getType()
              Return the Java class of our bean.
    protected  void initFormBean()
              Locate or create the bean associated with our form.
    private  boolean isXhtml()
              Returns true if this tag should render as xhtml.
    protected  void lookup()
              Look up values for the name, scope, and type properties if necessary.
     void release()
              Release any acquired resources.
    protected  java.lang.String renderFocusJavascript()
              Generates javascript to set the initial focus to the form element given in the tag's "focus" attribute.
    protected  java.lang.String renderFormStartElement()
              Generates the opening <form> element with appropriate attributes.
    protected  java.lang.String renderToken()
              Generates a hidden input field with token information, if any.
     void setAction(java.lang.String action)
              Set the action URL to which this form should be submitted.
     void setEnctype(java.lang.String enctype)
              Set the content encoding used when submitting this form.
     void setFocus(java.lang.String focus)
              Set the focus field name for this form.
     void setFocusIndex(java.lang.String focusIndex)
              Sets the focusIndex.
     void setMethod(java.lang.String method)
              Set the request method used when submitting this form.
     void setName(java.lang.String name)
              Set the attribute key name of our bean.
     void setOnreset(java.lang.String onReset)
              Set the onReset event script.
     void setOnsubmit(java.lang.String onSubmit)
              Set the onSubmit event script.
     void setScope(java.lang.String scope)
              Set the attribute scope of our bean.
     void setStyle(java.lang.String style)
              Set the style attribute for this tag.
     void setStyleClass(java.lang.String styleClass)
              Set the style class for this tag.
     void setStyleId(java.lang.String styleId)
              Set the style identifier for this tag.
     void setTarget(java.lang.String target)
              Set the window target.
     void setType(java.lang.String type)
              Set the Java class of our bean.
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    action

    protected java.lang.String action
    The action URL to which this form should be submitted, if any.


    moduleConfig

    protected ModuleConfig moduleConfig
    The module configuration for our module.


    enctype

    protected java.lang.String enctype
    The content encoding to be used on a POST submit.


    focus

    protected java.lang.String focus
    The name of the field to receive focus, if any.


    focusIndex

    protected java.lang.String focusIndex
    The index in the focus field array to receive focus. This only applies if the field given in the focus attribute is actually an array of fields. This allows a specific field in a radio button array to receive focus while still allowing indexed field names like "myRadioButtonField[1]" to be passed in the focus attribute.

    Since:
    Struts 1.1

    lineEnd

    protected static java.lang.String lineEnd
    The line ending string.


    mapping

    protected ActionMapping mapping
    The ActionMapping defining where we will be submitting this form


    messages

    protected static MessageResources messages
    The message resources for this package.


    method

    protected java.lang.String method
    The request method used when submitting this form.


    name

    protected java.lang.String name
    The attribute key under which our associated bean is stored.


    onreset

    protected java.lang.String onreset
    The onReset event script.


    onsubmit

    protected java.lang.String onsubmit
    The onSubmit event script.


    scope

    protected java.lang.String scope
    The scope (request or session) under which our associated bean is stored.


    servlet

    protected ActionServlet servlet
    The ActionServlet instance we are associated with (so that we can initialize the servlet property on any form bean that we create).


    style

    protected java.lang.String style
    The style attribute associated with this tag.


    styleClass

    protected java.lang.String styleClass
    The style class associated with this tag.


    styleId

    protected java.lang.String styleId
    The identifier associated with this tag.


    target

    protected java.lang.String target
    The window target.


    type

    protected java.lang.String type
    The Java class name of the bean to be created, if necessary.


    beanName

    protected java.lang.String beanName
    The name of the form bean to (create and) use. This is either the same as the 'name' attribute, if that was specified, or is obtained from the associated ActionMapping otherwise.


    beanScope

    protected java.lang.String beanScope
    The scope of the form bean to (create and) use. This is either the same as the 'scope' attribute, if that was specified, or is obtained from the associated ActionMapping otherwise.


    beanType

    protected java.lang.String beanType
    The type of the form bean to (create and) use. This is either the same as the 'type' attribute, if that was specified, or is obtained from the associated ActionMapping otherwise.

    Constructor Detail

    FormTag

    public FormTag()
    Method Detail

    getBeanName

    public java.lang.String getBeanName()
    Return the name of the form bean corresponding to this tag. There is no corresponding setter method; this method exists so that the nested tag classes can obtain the actual bean name derived from other attributes of the tag.


    getAction

    public java.lang.String getAction()
    Return the action URL to which this form should be submitted.


    setAction

    public void setAction(java.lang.String action)
    Set the action URL to which this form should be submitted.

    Parameters:
    action - The new action URL

    getEnctype

    public java.lang.String getEnctype()
    Return the content encoding used when submitting this form.


    setEnctype

    public void setEnctype(java.lang.String enctype)
    Set the content encoding used when submitting this form.

    Parameters:
    enctype - The new content encoding

    getFocus

    public java.lang.String getFocus()
    Return the focus field name for this form.


    setFocus

    public void setFocus(java.lang.String focus)
    Set the focus field name for this form.

    Parameters:
    focus - The new focus field name

    getMethod

    public java.lang.String getMethod()
    Return the request method used when submitting this form.


    setMethod

    public void setMethod(java.lang.String method)
    Set the request method used when submitting this form.

    Parameters:
    method - The new request method

    getName

    public java.lang.String getName()
    Return the attribute key name of our bean.


    setName

    public void setName(java.lang.String name)
    Set the attribute key name of our bean.

    Parameters:
    name - The new attribute key name

    getOnreset

    public java.lang.String getOnreset()
    Return the onReset event script.


    setOnreset

    public void setOnreset(java.lang.String onReset)
    Set the onReset event script.

    Parameters:
    onReset - The new event script

    getOnsubmit

    public java.lang.String getOnsubmit()
    Return the onSubmit event script.


    setOnsubmit

    public void setOnsubmit(java.lang.String onSubmit)
    Set the onSubmit event script.

    Parameters:
    onSubmit - The new event script

    getScope

    public java.lang.String getScope()
    Return the attribute scope of our bean.


    setScope

    public void setScope(java.lang.String scope)
    Set the attribute scope of our bean.

    Parameters:
    scope - The new attribute scope

    getStyle

    public java.lang.String getStyle()
    Return the style attribute for this tag.


    setStyle

    public void setStyle(java.lang.String style)
    Set the style attribute for this tag.

    Parameters:
    style - The new style attribute

    getStyleClass

    public java.lang.String getStyleClass()
    Return the style class for this tag.


    setStyleClass

    public void setStyleClass(java.lang.String styleClass)
    Set the style class for this tag.

    Parameters:
    styleClass - The new style class

    getStyleId

    public java.lang.String getStyleId()
    Return the style identifier for this tag.


    setStyleId

    public void setStyleId(java.lang.String styleId)
    Set the style identifier for this tag.

    Parameters:
    styleId - The new style identifier

    getTarget

    public java.lang.String getTarget()
    Return the window target.


    setTarget

    public void setTarget(java.lang.String target)
    Set the window target.

    Parameters:
    target - The new window target

    getType

    public java.lang.String getType()
    Return the Java class of our bean.


    setType

    public void setType(java.lang.String type)
    Set the Java class of our bean.

    Parameters:
    type - The new Java class

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Render the beginning of this form.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.TagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    initFormBean

    protected void initFormBean()
                         throws javax.servlet.jsp.JspException
    Locate or create the bean associated with our form.

    Throws:
    javax.servlet.jsp.JspException
    Since:
    Struts 1.1

    renderFormStartElement

    protected java.lang.String renderFormStartElement()
    Generates the opening <form> element with appropriate attributes.

    Since:
    Struts 1.1

    renderToken

    protected java.lang.String renderToken()
    Generates a hidden input field with token information, if any.

    Returns:
    A hidden input field containing the token.
    Since:
    Struts 1.1

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Render the end of this form.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.TagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    renderFocusJavascript

    protected java.lang.String renderFocusJavascript()
    Generates javascript to set the initial focus to the form element given in the tag's "focus" attribute.

    Since:
    Struts 1.1

    release

    public void release()
    Release any acquired resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class javax.servlet.jsp.tagext.TagSupport

    lookup

    protected void lookup()
                   throws javax.servlet.jsp.JspException
    Look up values for the name, scope, and type properties if necessary.

    Throws:
    javax.servlet.jsp.JspException - if a required value cannot be looked up

    isXhtml

    private boolean isXhtml()
    Returns true if this tag should render as xhtml.


    getFocusIndex

    public java.lang.String getFocusIndex()
    Returns the focusIndex.

    Returns:
    String

    setFocusIndex

    public void setFocusIndex(java.lang.String focusIndex)
    Sets the focusIndex.

    Parameters:
    focusIndex - The focusIndex to set


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/FrameTag.html0000644000175000017500000012773710404045204030146 0ustar arnaudarnaud00000000000000 FrameTag (Apache Struts API Documentation)

    org.apache.struts.taglib.html
    Class FrameTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.BaseHandlerTag
                        |
                        +--org.apache.struts.taglib.html.LinkTag
                              |
                              +--org.apache.struts.taglib.html.FrameTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class FrameTag
    extends LinkTag

    Generate an HTML <frame> tag with similar capabilities as those the <html:link> tag provides for hyperlink elements. The src element is rendered using the same technique that LinkTag uses to render the href attribute of a hyperlink. Additionall, the HTML 4.0 frame tag attributes noresize, scrolling, marginheight, marginwidth, frameborder, and longdesc are supported. The frame name attribute is rendered based on the frameName property. Note that the value of longdesc is intended to be a URI, but currently no rewriting is supported. The attribute is set directly from the property value.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Joe Germuska, Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String frameborder
              The frameborder attribute that should be rendered (1, 0).
    protected  java.lang.String frameName
              The name attribute that should be rendered for this frame.
    protected  java.lang.String longdesc
              URI of a long description of this frame (complements title).
    protected  int marginheight
              The margin height in pixels, or zero for no setting.
    protected  int marginwidth
              The margin width in pixels, or zero for no setting.
    protected  boolean noresize
              Should users be disallowed to resize the frame?
    protected  java.lang.String scrolling
              What type of scrolling should be supported (yes, no, auto)?
     
    Fields inherited from class org.apache.struts.taglib.html.LinkTag
    action, anchor, forward, href, indexId, linkName, messages, name, page, paramId, paramName, paramProperty, paramScope, property, scope, target, text, transaction
     
    Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    accesskey, defaultLocale, indexed, tabindex
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    FrameTag()
               
     
    Method Summary
     int doEndTag()
              Ignore the end of this tag.
     int doStartTag()
              Render the appropriately encoded URI.
     java.lang.String getFrameborder()
               
     java.lang.String getFrameName()
               
     java.lang.String getLongdesc()
               
     int getMarginheight()
               
     int getMarginwidth()
               
     boolean getNoresize()
               
     java.lang.String getScrolling()
               
     void release()
              Release any acquired resources.
     void setFrameborder(java.lang.String frameborder)
               
     void setFrameName(java.lang.String frameName)
               
     void setLongdesc(java.lang.String longdesc)
               
     void setMarginheight(int marginheight)
               
     void setMarginwidth(int marginwidth)
               
     void setNoresize(boolean noresize)
               
     void setScrolling(java.lang.String scrolling)
               
     
    Methods inherited from class org.apache.struts.taglib.html.LinkTag
    calculateURL, doAfterBody, getAction, getAnchor, getForward, getHref, getIndexId, getLinkName, getName, getPage, getParamId, getParamName, getParamProperty, getParamScope, getProperty, getScope, getTarget, getTransaction, setAction, setAnchor, setForward, setHref, setIndexId, setLinkName, setName, setPage, setParamId, setParamName, setParamProperty, setParamScope, setProperty, setScope, setTarget, setTransaction
     
    Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    getAccesskey, getAlt, getAltKey, getBundle, getDisabled, getElementClose, getIndexed, getLocale, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, getTitleKey, isXhtml, lookupProperty, message, prepareEventHandlers, prepareFocusEvents, prepareIndex, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setAlt, setAltKey, setBundle, setDisabled, setIndexed, setLocale, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle, setTitleKey
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    frameborder

    protected java.lang.String frameborder
    The frameborder attribute that should be rendered (1, 0).


    frameName

    protected java.lang.String frameName
    The name attribute that should be rendered for this frame.


    longdesc

    protected java.lang.String longdesc
    URI of a long description of this frame (complements title).


    marginheight

    protected int marginheight
    The margin height in pixels, or zero for no setting.


    marginwidth

    protected int marginwidth
    The margin width in pixels, or zero for no setting.


    noresize

    protected boolean noresize
    Should users be disallowed to resize the frame?


    scrolling

    protected java.lang.String scrolling
    What type of scrolling should be supported (yes, no, auto)?

    Constructor Detail

    FrameTag

    public FrameTag()
    Method Detail

    getFrameborder

    public java.lang.String getFrameborder()

    setFrameborder

    public void setFrameborder(java.lang.String frameborder)

    getFrameName

    public java.lang.String getFrameName()

    setFrameName

    public void setFrameName(java.lang.String frameName)

    getLongdesc

    public java.lang.String getLongdesc()

    setLongdesc

    public void setLongdesc(java.lang.String longdesc)

    getMarginheight

    public int getMarginheight()

    setMarginheight

    public void setMarginheight(int marginheight)

    getMarginwidth

    public int getMarginwidth()

    setMarginwidth

    public void setMarginwidth(int marginwidth)

    getNoresize

    public boolean getNoresize()

    setNoresize

    public void setNoresize(boolean noresize)

    getScrolling

    public java.lang.String getScrolling()

    setScrolling

    public void setScrolling(java.lang.String scrolling)

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Render the appropriately encoded URI.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class LinkTag
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Ignore the end of this tag.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class LinkTag
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    release

    public void release()
    Release any acquired resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class LinkTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/HiddenTag.html0000644000175000017500000007621310404045244030303 0ustar arnaudarnaud00000000000000 HiddenTag (Apache Struts API Documentation)

    org.apache.struts.taglib.html
    Class HiddenTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.BaseHandlerTag
                        |
                        +--org.apache.struts.taglib.html.BaseInputTag
                              |
                              +--org.apache.struts.taglib.html.BaseFieldTag
                                    |
                                    +--org.apache.struts.taglib.html.HiddenTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    NestedHiddenTag

    public class HiddenTag
    extends BaseFieldTag

    Custom tag for input fields of type "hidden".

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
    protected  boolean write
              Should the value of this field also be rendered to the response?
     
    Fields inherited from class org.apache.struts.taglib.html.BaseFieldTag
    accept, name, redisplay, type
     
    Fields inherited from class org.apache.struts.taglib.html.BaseInputTag
    cols, maxlength, messages, property, rows, value
     
    Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    accesskey, defaultLocale, indexed, tabindex
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    HiddenTag()
              Construct a new instance of this tag.
     
    Method Summary
     int doStartTag()
              Generate the required input tag, followed by the optional rendered text.
     boolean getWrite()
               
     void release()
              Release any acquired resources.
     void setWrite(boolean write)
               
     
    Methods inherited from class org.apache.struts.taglib.html.BaseFieldTag
    getAccept, getName, getRedisplay, setAccept, setName, setRedisplay
     
    Methods inherited from class org.apache.struts.taglib.html.BaseInputTag
    doEndTag, getCols, getMaxlength, getProperty, getRows, getSize, getValue, setCols, setMaxlength, setProperty, setRows, setSize, setValue
     
    Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    getAccesskey, getAlt, getAltKey, getBundle, getDisabled, getElementClose, getIndexed, getLocale, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, getTitleKey, isXhtml, lookupProperty, message, prepareEventHandlers, prepareFocusEvents, prepareIndex, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setAlt, setAltKey, setBundle, setDisabled, setIndexed, setLocale, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle, setTitleKey
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doAfterBody, doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    write

    protected boolean write
    Should the value of this field also be rendered to the response?

    Constructor Detail

    HiddenTag

    public HiddenTag()
    Construct a new instance of this tag.

    Method Detail

    getWrite

    public boolean getWrite()

    setWrite

    public void setWrite(boolean write)

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Generate the required input tag, followed by the optional rendered text. Support for write property since Struts 1.1.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class BaseFieldTag
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    release

    public void release()
    Release any acquired resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class BaseFieldTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/HtmlTag.html0000644000175000017500000004721310404045242030010 0ustar arnaudarnaud00000000000000 HtmlTag (Apache Struts API Documentation)

    org.apache.struts.taglib.html
    Class HtmlTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.html.HtmlTag
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class HtmlTag
    extends javax.servlet.jsp.tagext.TagSupport

    Renders an HTML element with appropriate language attributes if there is a current Locale available in the user's session.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Craig R. McClanahan, David Graham
    See Also:
    Serialized Form

    Field Summary
    protected  boolean locale
              Should we set the current Locale for this user if needed?
    protected static MessageResources messages
              The message resources for this package.
    protected  boolean xhtml
              Are we rendering an xhtml page?
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    HtmlTag()
               
     
    Method Summary
    protected  java.util.Locale currentLocale()
              Deprecated. Use getCurrentLocale instead because it makes the display logic easier.
     int doEndTag()
              Process the end of this tag.
     int doStartTag()
              Process the start of this tag.
    protected  java.util.Locale getCurrentLocale()
              Return the current Locale for this request.
     boolean getLocale()
               
     boolean getXhtml()
               
     void release()
              Release any acquired resources.
     void setLocale(boolean locale)
               
     void setXhtml(boolean xhtml)
               
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    messages

    protected static MessageResources messages
    The message resources for this package.


    locale

    protected boolean locale
    Should we set the current Locale for this user if needed?


    xhtml

    protected boolean xhtml
    Are we rendering an xhtml page?

    Constructor Detail

    HtmlTag

    public HtmlTag()
    Method Detail

    getLocale

    public boolean getLocale()

    setLocale

    public void setLocale(boolean locale)

    getXhtml

    public boolean getXhtml()

    setXhtml

    public void setXhtml(boolean xhtml)

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Process the start of this tag.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.TagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Process the end of this tag.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.TagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    release

    public void release()
    Release any acquired resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class javax.servlet.jsp.tagext.TagSupport

    currentLocale

    protected java.util.Locale currentLocale()
    Deprecated. Use getCurrentLocale instead because it makes the display logic easier.

    Return the current Locale for this request, creating a new one if necessary. If there is no current Locale, and locale support is not requested, return null.


    getCurrentLocale

    protected java.util.Locale getCurrentLocale()
    Return the current Locale for this request. If there is no locale in the session and the locale attribute is set to "true", this method will create a Locale based on the client's Accept-Language header or the server's default locale and store it in the session. This will always return a Locale and never null.

    Since:
    Struts 1.1


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/ImageTag.html0000644000175000017500000012113310404045224030120 0ustar arnaudarnaud00000000000000 ImageTag (Apache Struts API Documentation)

    org.apache.struts.taglib.html
    Class ImageTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.BaseHandlerTag
                        |
                        +--org.apache.struts.taglib.html.SubmitTag
                              |
                              +--org.apache.struts.taglib.html.ImageTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    NestedImageTag

    public class ImageTag
    extends SubmitTag

    Tag for input fields of type "image".

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Oleg V Alexeev
    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String align
              The alignment for this image.
    protected  java.lang.String border
              The border size around the image.
    protected  java.lang.String page
              The module-relative URI of the image.
    protected  java.lang.String pageKey
              The message resources key of the module-relative URI of the image.
    protected  java.lang.String property
              The name attribute for the image button.
    protected  java.lang.String src
              The URL of this image.
    protected  java.lang.String srcKey
              The message resources key for the URL of this image.
     
    Fields inherited from class org.apache.struts.taglib.html.SubmitTag
    messages, text, value
     
    Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    accesskey, defaultLocale, indexed, tabindex
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    ImageTag()
               
     
    Method Summary
     int doEndTag()
              Process the end of this tag.
     int doStartTag()
              Process the start of this tag.
     java.lang.String getAlign()
              Deprecated. Align attribute is deprecated in HTML 4.x.
     java.lang.String getBorder()
               
     java.lang.String getPage()
               
     java.lang.String getPageKey()
               
     java.lang.String getProperty()
              Return the property.
     java.lang.String getSrc()
               
     java.lang.String getSrcKey()
               
     void release()
              Release any acquired resources.
     void setAlign(java.lang.String align)
              Deprecated. Align attribute is deprecated in HTML 4.x.
     void setBorder(java.lang.String border)
               
     void setPage(java.lang.String page)
               
     void setPageKey(java.lang.String pageKey)
               
     void setProperty(java.lang.String property)
              Set the property name.
     void setSrc(java.lang.String src)
               
     void setSrcKey(java.lang.String srcKey)
               
    protected  java.lang.String src()
              Return the base source URL that will be rendered in the src property for this generated element, or null if there is no such URL.
     
    Methods inherited from class org.apache.struts.taglib.html.SubmitTag
    doAfterBody, getValue, setValue
     
    Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    getAccesskey, getAlt, getAltKey, getBundle, getDisabled, getElementClose, getIndexed, getLocale, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, getTitleKey, isXhtml, lookupProperty, message, prepareEventHandlers, prepareFocusEvents, prepareIndex, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setAlt, setAltKey, setBundle, setDisabled, setIndexed, setLocale, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle, setTitleKey
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    align

    protected java.lang.String align
    The alignment for this image.


    border

    protected java.lang.String border
    The border size around the image.


    page

    protected java.lang.String page
    The module-relative URI of the image.


    pageKey

    protected java.lang.String pageKey
    The message resources key of the module-relative URI of the image.


    property

    protected java.lang.String property
    The name attribute for the image button.


    src

    protected java.lang.String src
    The URL of this image.


    srcKey

    protected java.lang.String srcKey
    The message resources key for the URL of this image.

    Constructor Detail

    ImageTag

    public ImageTag()
    Method Detail

    getAlign

    public java.lang.String getAlign()
    Deprecated. Align attribute is deprecated in HTML 4.x.


    setAlign

    public void setAlign(java.lang.String align)
    Deprecated. Align attribute is deprecated in HTML 4.x.


    getBorder

    public java.lang.String getBorder()

    setBorder

    public void setBorder(java.lang.String border)

    getPage

    public java.lang.String getPage()

    setPage

    public void setPage(java.lang.String page)

    getPageKey

    public java.lang.String getPageKey()

    setPageKey

    public void setPageKey(java.lang.String pageKey)

    getProperty

    public java.lang.String getProperty()
    Description copied from class: SubmitTag
    Return the property.

    Overrides:
    getProperty in class SubmitTag

    setProperty

    public void setProperty(java.lang.String property)
    Description copied from class: SubmitTag
    Set the property name.

    Overrides:
    setProperty in class SubmitTag
    Parameters:
    property - The property name

    getSrc

    public java.lang.String getSrc()

    setSrc

    public void setSrc(java.lang.String src)

    getSrcKey

    public java.lang.String getSrcKey()

    setSrcKey

    public void setSrcKey(java.lang.String srcKey)

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Process the start of this tag.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class SubmitTag
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Process the end of this tag. [Indexed property since Struts 1.1]

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class SubmitTag
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    release

    public void release()
    Release any acquired resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class SubmitTag

    src

    protected java.lang.String src()
                            throws javax.servlet.jsp.JspException
    Return the base source URL that will be rendered in the src property for this generated element, or null if there is no such URL.

    Throws:
    javax.servlet.jsp.JspException - if an error occurs


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/ImgTag.html0000644000175000017500000017706610404045204027630 0ustar arnaudarnaud00000000000000 ImgTag (Apache Struts API Documentation)

    org.apache.struts.taglib.html
    Class ImgTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.BaseHandlerTag
                        |
                        +--org.apache.struts.taglib.html.ImgTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    NestedImgTag

    public class ImgTag
    extends BaseHandlerTag

    Generate an IMG tag to the specified image URI.

    TODO:

    • Make the alt, src, and lowsrc settable from properties (for i18n)

    Version:
    $Revision: 1.1 $
    Author:
    Michael Westbay, Craig McClanahan
    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String align
              The property to specify where to align the image.
    protected  java.lang.String border
              The border size around the image.
    protected  java.lang.String height
              The image height.
    protected  java.lang.String hspace
              The horizontal spacing around the image.
    protected  java.lang.String imageName
              The image name for named images.
    protected  java.lang.String ismap
              Server-side image map declaration.
    protected  java.lang.String lowsrc
              Deprecated. This is not defined in the HTML 4.01 spec and will be removed in a future version of Struts.
    protected static MessageResources messages
              The message resources for this package.
    protected  java.lang.String name
              The JSP bean name for query parameters.
    protected  java.lang.String page
              The module-relative path, starting with a slash character, of the image to be displayed by this rendered tag.
    protected  java.lang.String pageKey
              The message resources key under which we should look up the page attribute for this generated tag, if any.
    protected  java.lang.String paramId
              In situations where an image is dynamically generated (such as to create a chart graph), this specifies the single-parameter request parameter name to generate.
    protected  java.lang.String paramName
              The single-parameter JSP bean name.
    protected  java.lang.String paramProperty
              The single-parameter JSP bean property.
    protected  java.lang.String paramScope
              The single-parameter JSP bean scope.
    protected  java.lang.String property
              The JSP bean property name for query parameters.
    protected  java.lang.String scope
              The scope of the bean specified by the name property, if any.
    protected  java.lang.String src
              The image source URI.
    protected  java.lang.String srcKey
              The message resources key under which we should look up the src attribute for this generated tag, if any.
    protected  java.lang.String usemap
              Client-side image map declaration.
    protected  java.lang.String vspace
              The vertical spacing around the image.
    protected  java.lang.String width
              The image width.
     
    Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    accesskey, defaultLocale, indexed, tabindex
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    ImgTag()
               
     
    Method Summary
     int doEndTag()
              Render the end of the IMG tag.
     int doStartTag()
              Render the beginning of the IMG tag.
     java.lang.String getAlign()
               
     java.lang.String getBorder()
               
     java.lang.String getHeight()
               
     java.lang.String getHspace()
               
     java.lang.String getImageName()
               
     java.lang.String getIsmap()
               
     java.lang.String getLowsrc()
              Deprecated. This is not defined in the HTML 4.01 spec and will be removed in a future version of Struts.
     java.lang.String getName()
               
     java.lang.String getPage()
               
     java.lang.String getPageKey()
               
     java.lang.String getParamId()
               
     java.lang.String getParamName()
               
     java.lang.String getParamProperty()
               
     java.lang.String getParamScope()
               
     java.lang.String getProperty()
               
     java.lang.String getScope()
               
     java.lang.String getSrc()
               
     java.lang.String getSrcKey()
               
     java.lang.String getUsemap()
               
     java.lang.String getVspace()
               
     java.lang.String getWidth()
               
     void release()
              Release any acquired resources.
     void setAlign(java.lang.String align)
               
     void setBorder(java.lang.String border)
               
     void setHeight(java.lang.String height)
               
     void setHspace(java.lang.String hspace)
               
     void setImageName(java.lang.String imageName)
               
     void setIsmap(java.lang.String ismap)
               
     void setLowsrc(java.lang.String lowsrc)
               
     void setName(java.lang.String name)
               
     void setPage(java.lang.String page)
               
     void setPageKey(java.lang.String pageKey)
               
     void setParamId(java.lang.String paramId)
               
     void setParamName(java.lang.String paramName)
               
     void setParamProperty(java.lang.String paramProperty)
               
     void setParamScope(java.lang.String paramScope)
               
     void setProperty(java.lang.String property)
               
     void setScope(java.lang.String scope)
               
     void setSrc(java.lang.String src)
               
     void setSrcKey(java.lang.String srcKey)
               
     void setUsemap(java.lang.String usemap)
               
     void setVspace(java.lang.String vspace)
               
     void setWidth(java.lang.String width)
               
    protected  java.lang.String src()
              Return the base source URL that will be rendered in the src property for this generated element, or null if there is no such URL.
    protected  java.lang.String url(java.lang.String url)
              Return the specified src URL, modified as necessary with optional request parameters.
     
    Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    getAccesskey, getAlt, getAltKey, getBundle, getDisabled, getElementClose, getIndexed, getLocale, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, getTitleKey, isXhtml, lookupProperty, message, prepareEventHandlers, prepareFocusEvents, prepareIndex, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setAlt, setAltKey, setBundle, setDisabled, setIndexed, setLocale, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle, setTitleKey
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doAfterBody, doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    align

    protected java.lang.String align
    The property to specify where to align the image.


    border

    protected java.lang.String border
    The border size around the image.


    height

    protected java.lang.String height
    The image height.


    hspace

    protected java.lang.String hspace
    The horizontal spacing around the image.


    imageName

    protected java.lang.String imageName
    The image name for named images.


    ismap

    protected java.lang.String ismap
    Server-side image map declaration.


    lowsrc

    protected java.lang.String lowsrc
    Deprecated. This is not defined in the HTML 4.01 spec and will be removed in a future version of Struts.

    The low resolution image source URI.


    messages

    protected static MessageResources messages
    The message resources for this package.


    name

    protected java.lang.String name
    The JSP bean name for query parameters.


    page

    protected java.lang.String page
    The module-relative path, starting with a slash character, of the image to be displayed by this rendered tag.


    pageKey

    protected java.lang.String pageKey
    The message resources key under which we should look up the page attribute for this generated tag, if any.


    paramId

    protected java.lang.String paramId
    In situations where an image is dynamically generated (such as to create a chart graph), this specifies the single-parameter request parameter name to generate.


    paramName

    protected java.lang.String paramName
    The single-parameter JSP bean name.


    paramProperty

    protected java.lang.String paramProperty
    The single-parameter JSP bean property.


    paramScope

    protected java.lang.String paramScope
    The single-parameter JSP bean scope.


    property

    protected java.lang.String property
    The JSP bean property name for query parameters.


    scope

    protected java.lang.String scope
    The scope of the bean specified by the name property, if any.


    src

    protected java.lang.String src
    The image source URI.


    srcKey

    protected java.lang.String srcKey
    The message resources key under which we should look up the src attribute for this generated tag, if any.


    usemap

    protected java.lang.String usemap
    Client-side image map declaration.


    vspace

    protected java.lang.String vspace
    The vertical spacing around the image.


    width

    protected java.lang.String width
    The image width.

    Constructor Detail

    ImgTag

    public ImgTag()
    Method Detail

    getAlign

    public java.lang.String getAlign()

    setAlign

    public void setAlign(java.lang.String align)

    getBorder

    public java.lang.String getBorder()

    setBorder

    public void setBorder(java.lang.String border)

    getHeight

    public java.lang.String getHeight()

    setHeight

    public void setHeight(java.lang.String height)

    getHspace

    public java.lang.String getHspace()

    setHspace

    public void setHspace(java.lang.String hspace)

    getImageName

    public java.lang.String getImageName()

    setImageName

    public void setImageName(java.lang.String imageName)

    getIsmap

    public java.lang.String getIsmap()

    setIsmap

    public void setIsmap(java.lang.String ismap)

    getLowsrc

    public java.lang.String getLowsrc()
    Deprecated. This is not defined in the HTML 4.01 spec and will be removed in a future version of Struts.


    setLowsrc

    public void setLowsrc(java.lang.String lowsrc)

    getName

    public java.lang.String getName()

    setName

    public void setName(java.lang.String name)

    getPage

    public java.lang.String getPage()

    setPage

    public void setPage(java.lang.String page)

    getPageKey

    public java.lang.String getPageKey()

    setPageKey

    public void setPageKey(java.lang.String pageKey)

    getParamId

    public java.lang.String getParamId()

    setParamId

    public void setParamId(java.lang.String paramId)

    getParamName

    public java.lang.String getParamName()

    setParamName

    public void setParamName(java.lang.String paramName)

    getParamProperty

    public java.lang.String getParamProperty()

    setParamProperty

    public void setParamProperty(java.lang.String paramProperty)

    getParamScope

    public java.lang.String getParamScope()

    setParamScope

    public void setParamScope(java.lang.String paramScope)

    getProperty

    public java.lang.String getProperty()

    setProperty

    public void setProperty(java.lang.String property)

    getScope

    public java.lang.String getScope()

    setScope

    public void setScope(java.lang.String scope)

    getSrc

    public java.lang.String getSrc()

    setSrc

    public void setSrc(java.lang.String src)

    getSrcKey

    public java.lang.String getSrcKey()

    setSrcKey

    public void setSrcKey(java.lang.String srcKey)

    getUsemap

    public java.lang.String getUsemap()

    setUsemap

    public void setUsemap(java.lang.String usemap)

    getVspace

    public java.lang.String getVspace()

    setVspace

    public void setVspace(java.lang.String vspace)

    getWidth

    public java.lang.String getWidth()

    setWidth

    public void setWidth(java.lang.String width)

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Render the beginning of the IMG tag.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Render the end of the IMG tag.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    release

    public void release()
    Release any acquired resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class BaseHandlerTag

    src

    protected java.lang.String src()
                            throws javax.servlet.jsp.JspException
    Return the base source URL that will be rendered in the src property for this generated element, or null if there is no such URL.

    Throws:
    javax.servlet.jsp.JspException - if an error occurs

    url

    protected java.lang.String url(java.lang.String url)
                            throws javax.servlet.jsp.JspException
    Return the specified src URL, modified as necessary with optional request parameters.

    Parameters:
    url - The URL to be modified (or null if this url will not be used)
    Throws:
    javax.servlet.jsp.JspException - if an error occurs preparing the URL


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/JavascriptValidatorTag.html0000644000175000017500000012345410404045222033060 0ustar arnaudarnaud00000000000000 JavascriptValidatorTag (Apache Struts API Documentation)

    org.apache.struts.taglib.html
    Class JavascriptValidatorTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.JavascriptValidatorTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class JavascriptValidatorTag
    extends javax.servlet.jsp.tagext.BodyTagSupport

    Custom tag that generates JavaScript for client side validation based on the validation rules loaded by the ValidatorPlugIn defined in the struts-config.xml file.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    David Winterfeldt
    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String bundle
              The servlet context attribute key for our resources.
    protected  java.lang.String cdata
              Hide JavaScript methods in a CDATA section for XHTML when "true".
    protected static java.util.Locale defaultLocale
              Deprecated. This variable is no longer used.
    protected  java.lang.String dynamicJavascript
              The dynamic JavaScript objects will only be generated if this is set to "true".
    protected  java.lang.String formName
              The name of the form that corresponds with the action name in struts-config.xml.
    private  java.lang.String htmlBeginComment
               
    protected  java.lang.String htmlComment
              The JavaScript methods will enclosed with html comments if this is set to "true".
    private  java.lang.String htmlEndComment
               
    protected static java.lang.String lineEnd
              The line ending string.
    protected  java.lang.String methodName
              This will be used as is for the JavaScript validation method name if it has a value.
    protected  int page
              The current page number of a multi-part form.
    protected  java.lang.String src
              The src attribute for html script element (used to include an external script resource).
    protected  java.lang.String staticJavascript
              The static JavaScript methods will only be printed if this is set to "true".
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    JavascriptValidatorTag()
               
     
    Method Summary
     int doStartTag()
              Render the JavaScript for to perform validations based on the form name.
     java.lang.String getCdata()
              Returns the cdata setting "true" or "false".
     java.lang.String getDynamicJavascript()
              Gets whether or not to generate the dynamic JavaScript.
     java.lang.String getFormName()
              Gets the key (form name) that will be used to retrieve a set of validation rules to be performed on the bean passed in for validation.
     java.lang.String getHtmlComment()
              Gets whether or not to delimit the JavaScript with html comments.
    protected  java.lang.String getJavascriptBegin(java.lang.String methods)
              Returns the opening script element and some initial javascript.
    protected  java.lang.String getJavascriptEnd()
              Returns the closing script element.
    protected  java.lang.String getJavascriptStaticMethods(org.apache.commons.validator.ValidatorResources resources)
               
     java.lang.String getMethod()
              Gets the method name that will be used for the Javascript validation method name if it has a value.
    private  java.lang.String getNextVar(java.lang.String input)
              The value null will be returned at the end of the sequence.
     int getPage()
              Gets the current page number of a multi-part form.
     java.lang.String getSrc()
              Gets the src attribute's value when defining the html script element.
    private  java.lang.String getStartElement()
              Constructs the beginning <script> element depending on xhtml status.
     java.lang.String getStaticJavascript()
              Gets whether or not to generate the static JavaScript.
    private  boolean isXhtml()
              Returns true if this is an xhtml page.
     void release()
              Release any acquired resources.
    private  java.lang.String replaceChar(java.lang.String input, int pos, char c)
              Replaces a single character in a String
     void setCdata(java.lang.String cdata)
              Sets the cdata status.
     void setDynamicJavascript(java.lang.String dynamicJavascript)
              Sets whether or not to generate the dynamic JavaScript.
     void setFormName(java.lang.String formName)
              Sets the key (form name) that will be used to retrieve a set of validation rules to be performed on the bean passed in for validation.
     void setHtmlComment(java.lang.String htmlComment)
              Sets whether or not to delimit the JavaScript with html comments.
     void setMethod(java.lang.String methodName)
              Sets the method name that will be used for the Javascript validation method name if it has a value.
     void setPage(int page)
              Sets the current page number of a multi-part form.
     void setSrc(java.lang.String src)
              Sets the src attribute's value when defining the html script element.
     void setStaticJavascript(java.lang.String staticJavascript)
              Sets whether or not to generate the static JavaScript.
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doAfterBody, doEndTag, doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    bundle

    protected java.lang.String bundle
    The servlet context attribute key for our resources.


    defaultLocale

    protected static java.util.Locale defaultLocale
    Deprecated. This variable is no longer used.

    The default locale on our server.


    formName

    protected java.lang.String formName
    The name of the form that corresponds with the action name in struts-config.xml. Specifying a form name places a <script> </script> around the javascript.


    lineEnd

    protected static java.lang.String lineEnd
    The line ending string.


    page

    protected int page
    The current page number of a multi-part form. Only valid when the formName attribute is set.


    methodName

    protected java.lang.String methodName
    This will be used as is for the JavaScript validation method name if it has a value. This is the method name of the main JavaScript method that the form calls to perform validations.


    staticJavascript

    protected java.lang.String staticJavascript
    The static JavaScript methods will only be printed if this is set to "true".


    dynamicJavascript

    protected java.lang.String dynamicJavascript
    The dynamic JavaScript objects will only be generated if this is set to "true".


    src

    protected java.lang.String src
    The src attribute for html script element (used to include an external script resource). The src attribute is only recognized when the formName attribute is specified.


    htmlComment

    protected java.lang.String htmlComment
    The JavaScript methods will enclosed with html comments if this is set to "true".


    cdata

    protected java.lang.String cdata
    Hide JavaScript methods in a CDATA section for XHTML when "true".


    htmlBeginComment

    private java.lang.String htmlBeginComment

    htmlEndComment

    private java.lang.String htmlEndComment
    Constructor Detail

    JavascriptValidatorTag

    public JavascriptValidatorTag()
    Method Detail

    getFormName

    public java.lang.String getFormName()
    Gets the key (form name) that will be used to retrieve a set of validation rules to be performed on the bean passed in for validation.


    setFormName

    public void setFormName(java.lang.String formName)
    Sets the key (form name) that will be used to retrieve a set of validation rules to be performed on the bean passed in for validation. Specifying a form name places a <script> </script> tag around the javascript.


    getPage

    public int getPage()
    Gets the current page number of a multi-part form. Only field validations with a matching page numer will be generated that match the current page number. Only valid when the formName attribute is set.


    setPage

    public void setPage(int page)
    Sets the current page number of a multi-part form. Only field validations with a matching page numer will be generated that match the current page number. Only valid when the formName attribute is set.


    getMethod

    public java.lang.String getMethod()
    Gets the method name that will be used for the Javascript validation method name if it has a value. This overrides the auto-generated method name based on the key (form name) passed in.


    setMethod

    public void setMethod(java.lang.String methodName)
    Sets the method name that will be used for the Javascript validation method name if it has a value. This overrides the auto-generated method name based on the key (form name) passed in.


    getStaticJavascript

    public java.lang.String getStaticJavascript()
    Gets whether or not to generate the static JavaScript. If this is set to 'true', which is the default, the static JavaScript will be generated.


    setStaticJavascript

    public void setStaticJavascript(java.lang.String staticJavascript)
    Sets whether or not to generate the static JavaScript. If this is set to 'true', which is the default, the static JavaScript will be generated.


    getDynamicJavascript

    public java.lang.String getDynamicJavascript()
    Gets whether or not to generate the dynamic JavaScript. If this is set to 'true', which is the default, the dynamic JavaScript will be generated.


    setDynamicJavascript

    public void setDynamicJavascript(java.lang.String dynamicJavascript)
    Sets whether or not to generate the dynamic JavaScript. If this is set to 'true', which is the default, the dynamic JavaScript will be generated.


    getHtmlComment

    public java.lang.String getHtmlComment()
    Gets whether or not to delimit the JavaScript with html comments. If this is set to 'true', which is the default, the htmlComment will be surround the JavaScript.


    setHtmlComment

    public void setHtmlComment(java.lang.String htmlComment)
    Sets whether or not to delimit the JavaScript with html comments. If this is set to 'true', which is the default, the htmlComment will be surround the JavaScript.


    getSrc

    public java.lang.String getSrc()
    Gets the src attribute's value when defining the html script element.


    setSrc

    public void setSrc(java.lang.String src)
    Sets the src attribute's value when defining the html script element. The src attribute is only recognized when the formName attribute is specified.


    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Render the JavaScript for to perform validations based on the form name.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    release

    public void release()
    Release any acquired resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class javax.servlet.jsp.tagext.BodyTagSupport

    getJavascriptBegin

    protected java.lang.String getJavascriptBegin(java.lang.String methods)
    Returns the opening script element and some initial javascript.


    getJavascriptStaticMethods

    protected java.lang.String getJavascriptStaticMethods(org.apache.commons.validator.ValidatorResources resources)

    getJavascriptEnd

    protected java.lang.String getJavascriptEnd()
    Returns the closing script element.


    getNextVar

    private java.lang.String getNextVar(java.lang.String input)
    The value null will be returned at the end of the sequence.     ex: "zz" will return null


    replaceChar

    private java.lang.String replaceChar(java.lang.String input,
                                         int pos,
                                         char c)
    Replaces a single character in a String


    getStartElement

    private java.lang.String getStartElement()
    Constructs the beginning <script> element depending on xhtml status.


    isXhtml

    private boolean isXhtml()
    Returns true if this is an xhtml page.


    getCdata

    public java.lang.String getCdata()
    Returns the cdata setting "true" or "false".

    Returns:
    String - "true" if JavaScript will be hidden in a CDATA section

    setCdata

    public void setCdata(java.lang.String cdata)
    Sets the cdata status.

    Parameters:
    cdata - The cdata to set


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/LinkTag.html0000644000175000017500000015654210404045216030010 0ustar arnaudarnaud00000000000000 LinkTag (Apache Struts API Documentation)

    org.apache.struts.taglib.html
    Class LinkTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.BaseHandlerTag
                        |
                        +--org.apache.struts.taglib.html.LinkTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    FrameTag, NestedLinkTag, RewriteTag

    public class LinkTag
    extends BaseHandlerTag

    Generate a URL-encoded hyperlink to the specified URI.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Craig R. McClanahan, James Turner
    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String action
              The module-relative action (beginning with a slash) which will be called by this link
    protected  java.lang.String anchor
              The anchor to be added to the end of the generated hyperlink.
    protected  java.lang.String forward
              The logical forward name from which to retrieve the hyperlink URI.
    protected  java.lang.String href
              The hyperlink URI.
    protected  java.lang.String indexId
              Name of parameter to generate to hold index number
    protected  java.lang.String linkName
              The link name for named links.
    protected static MessageResources messages
              The message resources for this package.
    protected  java.lang.String name
              The JSP bean name for query parameters.
    protected  java.lang.String page
              The module-relative page URL (beginning with a slash) to which this hyperlink will be rendered.
    protected  java.lang.String paramId
              The single-parameter request parameter name to generate.
    protected  java.lang.String paramName
              The single-parameter JSP bean name.
    protected  java.lang.String paramProperty
              The single-parameter JSP bean property.
    protected  java.lang.String paramScope
              The single-parameter JSP bean scope.
    protected  java.lang.String property
              The JSP bean property name for query parameters.
    protected  java.lang.String scope
              The scope of the bean specified by the name property, if any.
    protected  java.lang.String target
              The window target.
    protected  java.lang.String text
              The body content of this tag (if any).
    protected  boolean transaction
              Include transaction token (if any) in the hyperlink?
     
    Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    accesskey, defaultLocale, indexed, tabindex
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    LinkTag()
               
     
    Method Summary
    protected  java.lang.String calculateURL()
              Return the complete URL to which this hyperlink will direct the user.
     int doAfterBody()
              Save the associated label from the body content.
     int doEndTag()
              Render the end of the hyperlink.
     int doStartTag()
              Render the beginning of the hyperlink.
     java.lang.String getAction()
               
     java.lang.String getAnchor()
               
     java.lang.String getForward()
               
     java.lang.String getHref()
               
     java.lang.String getIndexId()
               
     java.lang.String getLinkName()
               
     java.lang.String getName()
               
     java.lang.String getPage()
               
     java.lang.String getParamId()
               
     java.lang.String getParamName()
               
     java.lang.String getParamProperty()
               
     java.lang.String getParamScope()
               
     java.lang.String getProperty()
               
     java.lang.String getScope()
               
     java.lang.String getTarget()
               
     boolean getTransaction()
               
     void release()
              Release any acquired resources.
     void setAction(java.lang.String action)
               
     void setAnchor(java.lang.String anchor)
               
     void setForward(java.lang.String forward)
               
     void setHref(java.lang.String href)
               
     void setIndexId(java.lang.String indexId)
               
     void setLinkName(java.lang.String linkName)
               
     void setName(java.lang.String name)
               
     void setPage(java.lang.String page)
               
     void setParamId(java.lang.String paramId)
               
     void setParamName(java.lang.String paramName)
               
     void setParamProperty(java.lang.String paramProperty)
               
     void setParamScope(java.lang.String paramScope)
               
     void setProperty(java.lang.String property)
               
     void setScope(java.lang.String scope)
               
     void setTarget(java.lang.String target)
               
     void setTransaction(boolean transaction)
               
     
    Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    getAccesskey, getAlt, getAltKey, getBundle, getDisabled, getElementClose, getIndexed, getLocale, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, getTitleKey, isXhtml, lookupProperty, message, prepareEventHandlers, prepareFocusEvents, prepareIndex, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setAlt, setAltKey, setBundle, setDisabled, setIndexed, setLocale, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle, setTitleKey
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    text

    protected java.lang.String text
    The body content of this tag (if any).


    anchor

    protected java.lang.String anchor
    The anchor to be added to the end of the generated hyperlink.


    forward

    protected java.lang.String forward
    The logical forward name from which to retrieve the hyperlink URI.


    href

    protected java.lang.String href
    The hyperlink URI.


    linkName

    protected java.lang.String linkName
    The link name for named links.


    messages

    protected static MessageResources messages
    The message resources for this package.


    name

    protected java.lang.String name
    The JSP bean name for query parameters.


    page

    protected java.lang.String page
    The module-relative page URL (beginning with a slash) to which this hyperlink will be rendered.


    action

    protected java.lang.String action
    The module-relative action (beginning with a slash) which will be called by this link


    paramId

    protected java.lang.String paramId
    The single-parameter request parameter name to generate.


    paramName

    protected java.lang.String paramName
    The single-parameter JSP bean name.


    paramProperty

    protected java.lang.String paramProperty
    The single-parameter JSP bean property.


    paramScope

    protected java.lang.String paramScope
    The single-parameter JSP bean scope.


    property

    protected java.lang.String property
    The JSP bean property name for query parameters.


    scope

    protected java.lang.String scope
    The scope of the bean specified by the name property, if any.


    target

    protected java.lang.String target
    The window target.


    transaction

    protected boolean transaction
    Include transaction token (if any) in the hyperlink?


    indexId

    protected java.lang.String indexId
    Name of parameter to generate to hold index number

    Constructor Detail

    LinkTag

    public LinkTag()
    Method Detail

    getAnchor

    public java.lang.String getAnchor()

    setAnchor

    public void setAnchor(java.lang.String anchor)

    getForward

    public java.lang.String getForward()

    setForward

    public void setForward(java.lang.String forward)

    getHref

    public java.lang.String getHref()

    setHref

    public void setHref(java.lang.String href)

    getLinkName

    public java.lang.String getLinkName()

    setLinkName

    public void setLinkName(java.lang.String linkName)

    getName

    public java.lang.String getName()

    setName

    public void setName(java.lang.String name)

    getPage

    public java.lang.String getPage()

    setPage

    public void setPage(java.lang.String page)

    getAction

    public java.lang.String getAction()

    setAction

    public void setAction(java.lang.String action)

    getParamId

    public java.lang.String getParamId()

    setParamId

    public void setParamId(java.lang.String paramId)

    getParamName

    public java.lang.String getParamName()

    setParamName

    public void setParamName(java.lang.String paramName)

    getParamProperty

    public java.lang.String getParamProperty()

    setParamProperty

    public void setParamProperty(java.lang.String paramProperty)

    getParamScope

    public java.lang.String getParamScope()

    setParamScope

    public void setParamScope(java.lang.String paramScope)

    getProperty

    public java.lang.String getProperty()

    setProperty

    public void setProperty(java.lang.String property)

    getScope

    public java.lang.String getScope()

    setScope

    public void setScope(java.lang.String scope)

    getTarget

    public java.lang.String getTarget()

    setTarget

    public void setTarget(java.lang.String target)

    getTransaction

    public boolean getTransaction()

    setTransaction

    public void setTransaction(boolean transaction)

    getIndexId

    public java.lang.String getIndexId()

    setIndexId

    public void setIndexId(java.lang.String indexId)

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Render the beginning of the hyperlink.

    Support for indexed property since Struts 1.1

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doAfterBody

    public int doAfterBody()
                    throws javax.servlet.jsp.JspException
    Save the associated label from the body content.

    Specified by:
    doAfterBody in interface javax.servlet.jsp.tagext.BodyTag
    Overrides:
    doAfterBody in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Render the end of the hyperlink.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    release

    public void release()
    Release any acquired resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class BaseHandlerTag

    calculateURL

    protected java.lang.String calculateURL()
                                     throws javax.servlet.jsp.JspException
    Return the complete URL to which this hyperlink will direct the user. Support for indexed property since Struts 1.1

    Throws:
    javax.servlet.jsp.JspException - if an exception is thrown calculating the value


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/MessagesTag.html0000644000175000017500000010351410404045230030645 0ustar arnaudarnaud00000000000000 MessagesTag (Apache Struts API Documentation)

    org.apache.struts.taglib.html
    Class MessagesTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.MessagesTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    NestedMessagesTag

    public class MessagesTag
    extends javax.servlet.jsp.tagext.BodyTagSupport

    Custom tag that iterates the elements of a message collection. It defaults to retrieving the messages from Globals.ERROR_KEY, but if the message attribute is set to true then the messages will be retrieved from Globals.MESSAGE_KEY. This is an alternative to the default ErrorsTag.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    David Winterfeldt
    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String bundle
              The servlet context attribute key for our resources.
    protected  java.lang.String footer
              The message resource key for errors footer.
    protected  java.lang.String header
              The message resource key for errors header.
    protected  java.lang.String id
              The name of the scripting variable to be exposed.
    protected  java.util.Iterator iterator
              Iterator of the elements of this error collection, while we are actually running.
    protected  java.lang.String locale
              The session attribute key for our locale.
    private static org.apache.commons.logging.Log log
              Commons Logging instance.
    protected  java.lang.String message
              If this is set to 'true', then the Globals.MESSAGE_KEY will be used to retrieve the messages from scope.
    protected static MessageResources messageResources
              The message resources for this package.
    protected  java.lang.String name
              The request attribute key for our error messages (if any).
    protected  boolean processed
              Whether or not any error messages have been processed.
    protected  java.lang.String property
              The name of the property for which error messages should be returned, or null to return all errors.
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    MessagesTag()
               
     
    Method Summary
     int doAfterBody()
              Make the next collection element available and loop, or finish the iterations if there are no more elements.
     int doEndTag()
              Clean up after processing this enumeration.
     int doStartTag()
              Construct an iterator for the specified collection, and begin looping through the body once per element.
     java.lang.String getBundle()
               
     java.lang.String getFooter()
               
     java.lang.String getHeader()
               
     java.lang.String getId()
               
     java.lang.String getLocale()
               
     java.lang.String getMessage()
               
     java.lang.String getName()
               
     java.lang.String getProperty()
               
     void release()
              Release all allocated resources.
     void setBundle(java.lang.String bundle)
               
     void setFooter(java.lang.String footer)
               
     void setHeader(java.lang.String header)
               
     void setId(java.lang.String id)
               
     void setLocale(java.lang.String locale)
               
     void setMessage(java.lang.String message)
               
     void setName(java.lang.String name)
               
     void setProperty(java.lang.String property)
               
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getParent, getValue, getValues, removeValue, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    messageResources

    protected static MessageResources messageResources
    The message resources for this package.


    log

    private static org.apache.commons.logging.Log log
    Commons Logging instance.


    iterator

    protected java.util.Iterator iterator
    Iterator of the elements of this error collection, while we are actually running.


    processed

    protected boolean processed
    Whether or not any error messages have been processed.


    id

    protected java.lang.String id
    The name of the scripting variable to be exposed.


    bundle

    protected java.lang.String bundle
    The servlet context attribute key for our resources.


    locale

    protected java.lang.String locale
    The session attribute key for our locale.


    name

    protected java.lang.String name
    The request attribute key for our error messages (if any).


    property

    protected java.lang.String property
    The name of the property for which error messages should be returned, or null to return all errors.


    header

    protected java.lang.String header
    The message resource key for errors header.


    footer

    protected java.lang.String footer
    The message resource key for errors footer.


    message

    protected java.lang.String message
    If this is set to 'true', then the Globals.MESSAGE_KEY will be used to retrieve the messages from scope.

    Constructor Detail

    MessagesTag

    public MessagesTag()
    Method Detail

    getId

    public java.lang.String getId()
    Overrides:
    getId in class javax.servlet.jsp.tagext.TagSupport

    setId

    public void setId(java.lang.String id)
    Overrides:
    setId in class javax.servlet.jsp.tagext.TagSupport

    getBundle

    public java.lang.String getBundle()

    setBundle

    public void setBundle(java.lang.String bundle)

    getLocale

    public java.lang.String getLocale()

    setLocale

    public void setLocale(java.lang.String locale)

    getName

    public java.lang.String getName()

    setName

    public void setName(java.lang.String name)

    getProperty

    public java.lang.String getProperty()

    setProperty

    public void setProperty(java.lang.String property)

    getHeader

    public java.lang.String getHeader()

    setHeader

    public void setHeader(java.lang.String header)

    getFooter

    public java.lang.String getFooter()

    setFooter

    public void setFooter(java.lang.String footer)

    getMessage

    public java.lang.String getMessage()

    setMessage

    public void setMessage(java.lang.String message)

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Construct an iterator for the specified collection, and begin looping through the body once per element.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doAfterBody

    public int doAfterBody()
                    throws javax.servlet.jsp.JspException
    Make the next collection element available and loop, or finish the iterations if there are no more elements.

    Specified by:
    doAfterBody in interface javax.servlet.jsp.tagext.BodyTag
    Overrides:
    doAfterBody in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Clean up after processing this enumeration.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    release

    public void release()
    Release all allocated resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class javax.servlet.jsp.tagext.BodyTagSupport


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/MessagesTei.html0000644000175000017500000002642010404045212030653 0ustar arnaudarnaud00000000000000 MessagesTei (Apache Struts API Documentation)

    org.apache.struts.taglib.html
    Class MessagesTei

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagExtraInfo
            |
            +--org.apache.struts.taglib.html.MessagesTei
    

    public class MessagesTei
    extends javax.servlet.jsp.tagext.TagExtraInfo

    Implementation of TagExtraInfo for the messages tag, identifying the scripting object(s) to be made visible.

    Author:
    David Winterfeldt

    Field Summary
     
    Fields inherited from class javax.servlet.jsp.tagext.TagExtraInfo
     
    Constructor Summary
    MessagesTei()
               
     
    Method Summary
     javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
              Return information about the scripting variables to be created.
     
    Methods inherited from class javax.servlet.jsp.tagext.TagExtraInfo
    getTagInfo, isValid, setTagInfo
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    MessagesTei

    public MessagesTei()
    Method Detail

    getVariableInfo

    public javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
    Return information about the scripting variables to be created.

    Overrides:
    getVariableInfo in class javax.servlet.jsp.tagext.TagExtraInfo


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/MultiboxTag.html0000644000175000017500000010252710404045224030707 0ustar arnaudarnaud00000000000000 MultiboxTag (Apache Struts API Documentation)

    org.apache.struts.taglib.html
    Class MultiboxTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.BaseHandlerTag
                        |
                        +--org.apache.struts.taglib.html.MultiboxTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    NestedMultiboxTag

    public class MultiboxTag
    extends BaseHandlerTag

    Tag for input fields of type "checkbox". This differs from CheckboxTag because it assumes that the underlying property is an array getter (of any supported primitive type, or String), and the checkbox is initialized to "checked" if the value listed for the "value" attribute is present in the values returned by the property getter.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Ralph Schaer, Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String constant
              The constant String value to be returned when this checkbox is selected and the form is submitted.
    protected static MessageResources messages
              The message resources for this package.
    protected  java.lang.String name
              The name of the bean containing our underlying property.
    protected  java.lang.String property
              The property name for this field.
    protected  java.lang.String value
              The value which will mark this checkbox as "checked" if present in the array returned by our property getter.
     
    Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    accesskey, defaultLocale, indexed, tabindex
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    MultiboxTag()
               
     
    Method Summary
     int doAfterBody()
              Save the body contents of this tag as the constant that we will be returning.
     int doEndTag()
              Render an input element for this tag.
     int doStartTag()
              Process the beginning of this tag.
     java.lang.String getName()
               
     java.lang.String getProperty()
              Return the property name.
     java.lang.String getValue()
              Return the server value.
     void release()
              Release any acquired resources.
     void setName(java.lang.String name)
               
     void setProperty(java.lang.String property)
              Set the property name.
     void setValue(java.lang.String value)
              Set the server value.
     
    Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    getAccesskey, getAlt, getAltKey, getBundle, getDisabled, getElementClose, getIndexed, getLocale, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, getTitleKey, isXhtml, lookupProperty, message, prepareEventHandlers, prepareFocusEvents, prepareIndex, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setAlt, setAltKey, setBundle, setDisabled, setIndexed, setLocale, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle, setTitleKey
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    constant

    protected java.lang.String constant
    The constant String value to be returned when this checkbox is selected and the form is submitted.


    messages

    protected static MessageResources messages
    The message resources for this package.


    name

    protected java.lang.String name
    The name of the bean containing our underlying property.


    property

    protected java.lang.String property
    The property name for this field.


    value

    protected java.lang.String value
    The value which will mark this checkbox as "checked" if present in the array returned by our property getter.

    Constructor Detail

    MultiboxTag

    public MultiboxTag()
    Method Detail

    getName

    public java.lang.String getName()

    setName

    public void setName(java.lang.String name)

    getProperty

    public java.lang.String getProperty()
    Return the property name.


    setProperty

    public void setProperty(java.lang.String property)
    Set the property name.

    Parameters:
    property - The new property name

    getValue

    public java.lang.String getValue()
    Return the server value.


    setValue

    public void setValue(java.lang.String value)
    Set the server value.

    Parameters:
    value - The new server value

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Process the beginning of this tag.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doAfterBody

    public int doAfterBody()
                    throws javax.servlet.jsp.JspException
    Save the body contents of this tag as the constant that we will be returning.

    Specified by:
    doAfterBody in interface javax.servlet.jsp.tagext.BodyTag
    Overrides:
    doAfterBody in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Render an input element for this tag.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    release

    public void release()
    Release any acquired resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class BaseHandlerTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/OptionTag.html0000644000175000017500000010622710404045220030351 0ustar arnaudarnaud00000000000000 OptionTag (Apache Struts API Documentation)

    org.apache.struts.taglib.html
    Class OptionTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.OptionTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class OptionTag
    extends javax.servlet.jsp.tagext.BodyTagSupport

    Tag for select options. The body of this tag is presented to the user in the option list, while the value attribute is the value returned to the server if this option is selected.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Craig R. McClanahan, David Graham
    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String bundle
              The name of the servlet context attribute containing our message resources.
    protected static java.util.Locale defaultLocale
              Deprecated. Use Locale.getDefault() directly.
    protected  boolean disabled
              Is this option disabled?
    protected  java.lang.String key
              The key used to look up the text displayed to the user for this option, if any.
    protected  java.lang.String locale
              The name of the attribute containing the Locale to be used for looking up internationalized messages.
    protected static MessageResources messages
              The message resources for this package.
    private  java.lang.String style
              The style associated with this tag.
    private  java.lang.String styleClass
              The named style class associated with this tag.
    protected  java.lang.String styleId
              The identifier associated with this tag.
    protected  java.lang.String text
              The message text to be displayed to the user for this tag (if any)
    protected  java.lang.String value
              The server value for this option, also used to match against the current property value to determine whether this option should be marked as selected.
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    OptionTag()
               
     
    Method Summary
     int doAfterBody()
              Process the body text of this tag (if any).
     int doEndTag()
              Process the end of this tag.
     int doStartTag()
              Process the start of this tag.
     java.lang.String getBundle()
               
     boolean getDisabled()
               
     java.lang.String getKey()
               
     java.lang.String getLocale()
               
     java.lang.String getStyle()
               
     java.lang.String getStyleClass()
               
     java.lang.String getStyleId()
              Return the style identifier for this tag.
     java.lang.String getValue()
               
     void release()
              Release any acquired resources.
    protected  java.lang.String renderOptionElement()
              Generate an HTML %lt;option> element.
    private  SelectTag selectTag()
              Acquire the select tag we are associated with.
     void setBundle(java.lang.String bundle)
               
     void setDisabled(boolean disabled)
               
     void setKey(java.lang.String key)
               
     void setLocale(java.lang.String locale)
               
     void setStyle(java.lang.String style)
               
     void setStyleClass(java.lang.String styleClass)
               
     void setStyleId(java.lang.String styleId)
              Set the style identifier for this tag.
     void setValue(java.lang.String value)
               
    protected  java.lang.String text()
              Return the text to be displayed to the user for this option (if any).
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    defaultLocale

    protected static final java.util.Locale defaultLocale
    Deprecated. Use Locale.getDefault() directly.

    The default locale for our server.


    messages

    protected static MessageResources messages
    The message resources for this package.


    text

    protected java.lang.String text
    The message text to be displayed to the user for this tag (if any)


    bundle

    protected java.lang.String bundle
    The name of the servlet context attribute containing our message resources.


    disabled

    protected boolean disabled
    Is this option disabled?


    key

    protected java.lang.String key
    The key used to look up the text displayed to the user for this option, if any.


    locale

    protected java.lang.String locale
    The name of the attribute containing the Locale to be used for looking up internationalized messages.


    style

    private java.lang.String style
    The style associated with this tag.


    styleClass

    private java.lang.String styleClass
    The named style class associated with this tag.


    styleId

    protected java.lang.String styleId
    The identifier associated with this tag.


    value

    protected java.lang.String value
    The server value for this option, also used to match against the current property value to determine whether this option should be marked as selected.

    Constructor Detail

    OptionTag

    public OptionTag()
    Method Detail

    getBundle

    public java.lang.String getBundle()

    setBundle

    public void setBundle(java.lang.String bundle)

    getDisabled

    public boolean getDisabled()

    setDisabled

    public void setDisabled(boolean disabled)

    getKey

    public java.lang.String getKey()

    setKey

    public void setKey(java.lang.String key)

    getLocale

    public java.lang.String getLocale()

    setLocale

    public void setLocale(java.lang.String locale)

    getStyle

    public java.lang.String getStyle()

    setStyle

    public void setStyle(java.lang.String style)

    getStyleClass

    public java.lang.String getStyleClass()

    setStyleClass

    public void setStyleClass(java.lang.String styleClass)

    getStyleId

    public java.lang.String getStyleId()
    Return the style identifier for this tag.


    setStyleId

    public void setStyleId(java.lang.String styleId)
    Set the style identifier for this tag.

    Parameters:
    styleId - The new style identifier

    getValue

    public java.lang.String getValue()

    setValue

    public void setValue(java.lang.String value)

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Process the start of this tag.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doAfterBody

    public int doAfterBody()
                    throws javax.servlet.jsp.JspException
    Process the body text of this tag (if any).

    Specified by:
    doAfterBody in interface javax.servlet.jsp.tagext.BodyTag
    Overrides:
    doAfterBody in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Process the end of this tag.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    renderOptionElement

    protected java.lang.String renderOptionElement()
                                            throws javax.servlet.jsp.JspException
    Generate an HTML %lt;option> element.

    Throws:
    javax.servlet.jsp.JspException
    Since:
    Struts 1.1

    selectTag

    private SelectTag selectTag()
                         throws javax.servlet.jsp.JspException
    Acquire the select tag we are associated with.

    Throws:
    javax.servlet.jsp.JspException

    release

    public void release()
    Release any acquired resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class javax.servlet.jsp.tagext.BodyTagSupport

    text

    protected java.lang.String text()
                             throws javax.servlet.jsp.JspException
    Return the text to be displayed to the user for this option (if any).

    Throws:
    javax.servlet.jsp.JspException - if an error occurs


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/OptionsCollectionTag.html0000644000175000017500000007257610404045242032565 0ustar arnaudarnaud00000000000000 OptionsCollectionTag (Apache Struts API Documentation)

    org.apache.struts.taglib.html
    Class OptionsCollectionTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.html.OptionsCollectionTag
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    NestedOptionsCollectionTag

    public class OptionsCollectionTag
    extends javax.servlet.jsp.tagext.TagSupport

    Tag for creating multiple <select> options from a collection. The collection may be part of the enclosing form, or may be independent of the form. Each element of the collection must expose a 'label' and a 'value', the property names of which are configurable by attributes of this tag.

    The collection may be an array of objects, a Collection, an Enumeration, an Iterator, or a Map.

    NOTE - This tag requires a Java2 (JDK 1.2 or later) platform.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Martin Cooper
    See Also:
    Serialized Form

    Field Summary
    protected  boolean filter
              Should the label values be filtered for HTML sensitive characters?
    protected  java.lang.String label
              The name of the bean property containing the label.
    protected static MessageResources messages
              The message resources for this package.
    protected  java.lang.String name
              The name of the bean containing the values collection.
    protected  java.lang.String property
              The name of the property to use to build the values collection.
    private  java.lang.String style
              The style associated with this tag.
    private  java.lang.String styleClass
              The named style class associated with this tag.
    protected  java.lang.String value
              The name of the bean property containing the value.
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    OptionsCollectionTag()
               
     
    Method Summary
    protected  void addOption(java.lang.StringBuffer sb, java.lang.String label, java.lang.String value, boolean matched)
              Add an option element to the specified StringBuffer based on the specified parameters.
     int doStartTag()
              Process the start of this tag.
     boolean getFilter()
               
    protected  java.util.Iterator getIterator(java.lang.Object collection)
              Return an iterator for the options collection.
     java.lang.String getLabel()
               
     java.lang.String getName()
               
     java.lang.String getProperty()
               
     java.lang.String getStyle()
               
     java.lang.String getStyleClass()
               
     java.lang.String getValue()
               
     void release()
              Release any acquired resources.
     void setFilter(boolean filter)
               
     void setLabel(java.lang.String label)
               
     void setName(java.lang.String name)
               
     void setProperty(java.lang.String property)
               
     void setStyle(java.lang.String style)
               
     void setStyleClass(java.lang.String styleClass)
               
     void setValue(java.lang.String value)
               
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    doEndTag, findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    messages

    protected static MessageResources messages
    The message resources for this package.


    filter

    protected boolean filter
    Should the label values be filtered for HTML sensitive characters?


    label

    protected java.lang.String label
    The name of the bean property containing the label.


    name

    protected java.lang.String name
    The name of the bean containing the values collection.


    property

    protected java.lang.String property
    The name of the property to use to build the values collection.


    style

    private java.lang.String style
    The style associated with this tag.


    styleClass

    private java.lang.String styleClass
    The named style class associated with this tag.


    value

    protected java.lang.String value
    The name of the bean property containing the value.

    Constructor Detail

    OptionsCollectionTag

    public OptionsCollectionTag()
    Method Detail

    getFilter

    public boolean getFilter()

    setFilter

    public void setFilter(boolean filter)

    getLabel

    public java.lang.String getLabel()

    setLabel

    public void setLabel(java.lang.String label)

    getName

    public java.lang.String getName()

    setName

    public void setName(java.lang.String name)

    getProperty

    public java.lang.String getProperty()

    setProperty

    public void setProperty(java.lang.String property)

    getStyle

    public java.lang.String getStyle()

    setStyle

    public void setStyle(java.lang.String style)

    getStyleClass

    public java.lang.String getStyleClass()

    setStyleClass

    public void setStyleClass(java.lang.String styleClass)

    getValue

    public java.lang.String getValue()

    setValue

    public void setValue(java.lang.String value)

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Process the start of this tag.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.TagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    release

    public void release()
    Release any acquired resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class javax.servlet.jsp.tagext.TagSupport

    addOption

    protected void addOption(java.lang.StringBuffer sb,
                             java.lang.String label,
                             java.lang.String value,
                             boolean matched)
    Add an option element to the specified StringBuffer based on the specified parameters.

    Note that this tag specifically does not support the styleId tag attribute, which causes the HTML id attribute to be emitted. This is because the HTML specification states that all "id" attributes in a document have to be unique. This tag will likely generate more than one option element element, but it cannot use the same id value. It's conceivable some sort of mechanism to supply an array of id values could be devised, but that doesn't seem to be worth the trouble.

    Parameters:
    sb - StringBuffer accumulating our results
    value - Value to be returned to the server for this option
    label - Value to be shown to the user for this option
    matched - Should this value be marked as selected?

    getIterator

    protected java.util.Iterator getIterator(java.lang.Object collection)
                                      throws javax.servlet.jsp.JspException
    Return an iterator for the options collection.

    Parameters:
    collection - Collection to be iterated over
    Throws:
    javax.servlet.jsp.JspException - if an error occurs


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/OptionsTag.html0000644000175000017500000010021610404045230030525 0ustar arnaudarnaud00000000000000 OptionsTag (Apache Struts API Documentation)

    org.apache.struts.taglib.html
    Class OptionsTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.html.OptionsTag
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    NestedOptionsTag

    public class OptionsTag
    extends javax.servlet.jsp.tagext.TagSupport

    Tag for creating multiple <select> options from a collection. The associated values displayed to the user may optionally be specified by a second collection, or will be the same as the values themselves. Each collection may be an array of objects, a Collection, an Enumeration, an Iterator, or a Map. NOTE - This tag requires a Java2 (JDK 1.2 or later) platform.

    Author:
    Florent Carpentier, Craig McClanahan
    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String collection
              The name of the collection containing beans that have properties to provide both the values and the labels (identified by the property and labelProperty attributes).
    protected  boolean filter
              Should the label values be filtered for HTML sensitive characters?
    protected  java.lang.String labelName
              The name of the bean containing the labels collection.
    protected  java.lang.String labelProperty
              The bean property containing the labels collection.
    protected static MessageResources messages
              The message resources for this package.
    protected  java.lang.String name
              The name of the bean containing the values collection.
    protected  java.lang.String property
              The name of the property to use to build the values collection.
    private  java.lang.String style
              The style associated with this tag.
    private  java.lang.String styleClass
              The named style class associated with this tag.
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    OptionsTag()
               
     
    Method Summary
    protected  void addOption(java.lang.StringBuffer sb, java.lang.String value, java.lang.String label, boolean matched)
              Add an option element to the specified StringBuffer based on the specified parameters.
     int doEndTag()
              Process the end of this tag.
     int doStartTag()
              Process the start of this tag.
     java.lang.String getCollection()
               
     boolean getFilter()
               
    protected  java.util.Iterator getIterator(java.lang.String name, java.lang.String property)
              Return an iterator for the option labels or values, based on our configured properties.
     java.lang.String getLabelName()
               
     java.lang.String getLabelProperty()
               
     java.lang.String getName()
               
     java.lang.String getProperty()
               
     java.lang.String getStyle()
               
     java.lang.String getStyleClass()
               
     void release()
              Release any acquired resources.
     void setCollection(java.lang.String collection)
               
     void setFilter(boolean filter)
               
     void setLabelName(java.lang.String labelName)
               
     void setLabelProperty(java.lang.String labelProperty)
               
     void setName(java.lang.String name)
               
     void setProperty(java.lang.String property)
               
     void setStyle(java.lang.String style)
               
     void setStyleClass(java.lang.String styleClass)
               
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    messages

    protected static MessageResources messages
    The message resources for this package.


    collection

    protected java.lang.String collection
    The name of the collection containing beans that have properties to provide both the values and the labels (identified by the property and labelProperty attributes).


    filter

    protected boolean filter
    Should the label values be filtered for HTML sensitive characters?


    labelName

    protected java.lang.String labelName
    The name of the bean containing the labels collection.


    labelProperty

    protected java.lang.String labelProperty
    The bean property containing the labels collection.


    name

    protected java.lang.String name
    The name of the bean containing the values collection.


    property

    protected java.lang.String property
    The name of the property to use to build the values collection.


    style

    private java.lang.String style
    The style associated with this tag.


    styleClass

    private java.lang.String styleClass
    The named style class associated with this tag.

    Constructor Detail

    OptionsTag

    public OptionsTag()
    Method Detail

    getCollection

    public java.lang.String getCollection()

    setCollection

    public void setCollection(java.lang.String collection)

    getFilter

    public boolean getFilter()

    setFilter

    public void setFilter(boolean filter)

    getLabelName

    public java.lang.String getLabelName()

    setLabelName

    public void setLabelName(java.lang.String labelName)

    getLabelProperty

    public java.lang.String getLabelProperty()

    setLabelProperty

    public void setLabelProperty(java.lang.String labelProperty)

    getName

    public java.lang.String getName()

    setName

    public void setName(java.lang.String name)

    getProperty

    public java.lang.String getProperty()

    setProperty

    public void setProperty(java.lang.String property)

    getStyle

    public java.lang.String getStyle()

    setStyle

    public void setStyle(java.lang.String style)

    getStyleClass

    public java.lang.String getStyleClass()

    setStyleClass

    public void setStyleClass(java.lang.String styleClass)

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Process the start of this tag.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.TagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Process the end of this tag.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.TagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    release

    public void release()
    Release any acquired resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class javax.servlet.jsp.tagext.TagSupport

    addOption

    protected void addOption(java.lang.StringBuffer sb,
                             java.lang.String value,
                             java.lang.String label,
                             boolean matched)
    Add an option element to the specified StringBuffer based on the specified parameters.

    Note that this tag specifically does not support the styleId tag attribute, which causes the HTML id attribute to be emitted. This is because the HTML specification states that all "id" attributes in a document have to be unique. This tag will likely generate more than one option element element, but it cannot use the same id value. It's conceivable some sort of mechanism to supply an array of id values could be devised, but that doesn't seem to be worth the trouble.

    Parameters:
    sb - StringBuffer accumulating our results
    value - Value to be returned to the server for this option
    label - Value to be shown to the user for this option
    matched - Should this value be marked as selected?

    getIterator

    protected java.util.Iterator getIterator(java.lang.String name,
                                             java.lang.String property)
                                      throws javax.servlet.jsp.JspException
    Return an iterator for the option labels or values, based on our configured properties.

    Parameters:
    name - Name of the bean attribute (if any)
    property - Name of the bean property (if any)
    Throws:
    javax.servlet.jsp.JspException - if an error occurs


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/PasswordTag.html0000644000175000017500000006610110404045226030705 0ustar arnaudarnaud00000000000000 PasswordTag (Apache Struts API Documentation)

    org.apache.struts.taglib.html
    Class PasswordTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.BaseHandlerTag
                        |
                        +--org.apache.struts.taglib.html.BaseInputTag
                              |
                              +--org.apache.struts.taglib.html.BaseFieldTag
                                    |
                                    +--org.apache.struts.taglib.html.PasswordTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    NestedPasswordTag

    public class PasswordTag
    extends BaseFieldTag

    Custom tag for input fields of type "password".

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
     
    Fields inherited from class org.apache.struts.taglib.html.BaseFieldTag
    accept, name, redisplay, type
     
    Fields inherited from class org.apache.struts.taglib.html.BaseInputTag
    cols, maxlength, messages, property, rows, value
     
    Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    accesskey, defaultLocale, indexed, tabindex
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    PasswordTag()
              Construct a new instance of this tag.
     
    Methods inherited from class org.apache.struts.taglib.html.BaseFieldTag
    doStartTag, getAccept, getName, getRedisplay, release, setAccept, setName, setRedisplay
     
    Methods inherited from class org.apache.struts.taglib.html.BaseInputTag
    doEndTag, getCols, getMaxlength, getProperty, getRows, getSize, getValue, setCols, setMaxlength, setProperty, setRows, setSize, setValue
     
    Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    getAccesskey, getAlt, getAltKey, getBundle, getDisabled, getElementClose, getIndexed, getLocale, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, getTitleKey, isXhtml, lookupProperty, message, prepareEventHandlers, prepareFocusEvents, prepareIndex, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setAlt, setAltKey, setBundle, setDisabled, setIndexed, setLocale, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle, setTitleKey
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doAfterBody, doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Constructor Detail

    PasswordTag

    public PasswordTag()
    Construct a new instance of this tag.



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/RadioTag.html0000644000175000017500000011444510404045212030141 0ustar arnaudarnaud00000000000000 RadioTag (Apache Struts API Documentation)

    org.apache.struts.taglib.html
    Class RadioTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.BaseHandlerTag
                        |
                        +--org.apache.struts.taglib.html.RadioTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    NestedRadioTag

    public class RadioTag
    extends BaseHandlerTag

    Tag for input fields of type "radio".

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Craig R. McClanahan, Ted Husted, David Graham
    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String idName
              Name of the bean (in some scope) that will return the value of the radio tag.
    protected static MessageResources messages
              The message resources for this package.
    protected  java.lang.String name
              The name of the bean containing our underlying property.
    protected  java.lang.String property
              The property name for this field.
    protected  java.lang.String text
              The body content of this tag (if any).
    protected  java.lang.String value
              The server value for this option.
     
    Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    accesskey, defaultLocale, indexed, tabindex
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    RadioTag()
               
     
    Method Summary
    private  java.lang.String currentValue()
              Acquire the current value of the bean specified by the name attribute and the property specified by the property attribute.
     int doAfterBody()
              Save the associated label from the body content.
     int doEndTag()
              Optionally render the associated label from the body content.
     int doStartTag()
              Generate the required input tag.
     java.lang.String getIdName()
              Return the idName.
     java.lang.String getName()
               
     java.lang.String getProperty()
              Return the property name.
     java.lang.String getValue()
              Return the server value.
     void release()
              Release any acquired resources.
    protected  java.lang.String renderRadioElement(java.lang.String serverValue, java.lang.String checkedValue)
              Renders an HTML <input type="radio"> element.
    private  java.lang.String serverValue()
              Return the String to be used in the radio tag's value attribute that gets sent to the server on form submission.
     void setIdName(java.lang.String idName)
              Set the idName.
     void setName(java.lang.String name)
               
     void setProperty(java.lang.String property)
              Set the property name.
     void setValue(java.lang.String value)
              Set the server value.
     
    Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    getAccesskey, getAlt, getAltKey, getBundle, getDisabled, getElementClose, getIndexed, getLocale, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, getTitleKey, isXhtml, lookupProperty, message, prepareEventHandlers, prepareFocusEvents, prepareIndex, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setAlt, setAltKey, setBundle, setDisabled, setIndexed, setLocale, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle, setTitleKey
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    messages

    protected static MessageResources messages
    The message resources for this package.


    name

    protected java.lang.String name
    The name of the bean containing our underlying property.


    property

    protected java.lang.String property
    The property name for this field.


    text

    protected java.lang.String text
    The body content of this tag (if any).


    value

    protected java.lang.String value
    The server value for this option.


    idName

    protected java.lang.String idName
    Name of the bean (in some scope) that will return the value of the radio tag.

    If an iterator is used to render a series of radio tags, this field may be used to specify the name of the bean exposed by the iterator. In this case, the value attribute is used as the name of a property on the idName bean that returns the value of the radio tag in this iteration.

    Constructor Detail

    RadioTag

    public RadioTag()
    Method Detail

    getName

    public java.lang.String getName()

    setName

    public void setName(java.lang.String name)

    getProperty

    public java.lang.String getProperty()
    Return the property name.


    setProperty

    public void setProperty(java.lang.String property)
    Set the property name.

    Parameters:
    property - The new property name

    getValue

    public java.lang.String getValue()
    Return the server value.


    setValue

    public void setValue(java.lang.String value)
    Set the server value.

    Parameters:
    value - The new server value

    getIdName

    public java.lang.String getIdName()
    Return the idName.

    Since:
    Struts 1.1

    setIdName

    public void setIdName(java.lang.String idName)
    Set the idName.

    Parameters:
    idName - The new idName
    Since:
    Struts 1.1

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Generate the required input tag. [Indexed property since Struts 1.1]

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    serverValue

    private java.lang.String serverValue()
                                  throws javax.servlet.jsp.JspException
    Return the String to be used in the radio tag's value attribute that gets sent to the server on form submission.

    Throws:
    javax.servlet.jsp.JspException

    currentValue

    private java.lang.String currentValue()
                                   throws javax.servlet.jsp.JspException
    Acquire the current value of the bean specified by the name attribute and the property specified by the property attribute. This radio button with this value will be checked.

    Throws:
    javax.servlet.jsp.JspException

    renderRadioElement

    protected java.lang.String renderRadioElement(java.lang.String serverValue,
                                                  java.lang.String checkedValue)
                                           throws javax.servlet.jsp.JspException
    Renders an HTML <input type="radio"> element.

    Parameters:
    serverValue - The data to be used in the tag's value attribute and sent to the server when the form is submitted.
    checkedValue - If the serverValue equals this value the radio button will be checked.
    Returns:
    A radio input element.
    Throws:
    javax.servlet.jsp.JspException
    Since:
    Struts 1.1

    doAfterBody

    public int doAfterBody()
                    throws javax.servlet.jsp.JspException
    Save the associated label from the body content.

    Specified by:
    doAfterBody in interface javax.servlet.jsp.tagext.BodyTag
    Overrides:
    doAfterBody in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Optionally render the associated label from the body content.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    release

    public void release()
    Release any acquired resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class BaseHandlerTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/ResetTag.html0000644000175000017500000010063510404045220030160 0ustar arnaudarnaud00000000000000 ResetTag (Apache Struts API Documentation)

    org.apache.struts.taglib.html
    Class ResetTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.BaseHandlerTag
                        |
                        +--org.apache.struts.taglib.html.ResetTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class ResetTag
    extends BaseHandlerTag

    Tag for input fields of type "reset".

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Craig R. McClanahan, David Graham
    See Also:
    Serialized Form

    Field Summary
    protected static MessageResources messages
              The message resources for this package.
    protected  java.lang.String property
              The name of the generated input field.
    protected  java.lang.String text
              The body content of this tag (if any).
    protected  java.lang.String value
              The value of the button label.
     
    Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    accesskey, defaultLocale, indexed, tabindex
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    ResetTag()
               
     
    Method Summary
     int doAfterBody()
              Save the associated label from the body content.
     int doEndTag()
              Process the end of this tag.
     int doStartTag()
              Process the start of this tag.
     java.lang.String getProperty()
              Return the field name.
     java.lang.String getValue()
              Return the label value.
    protected  java.lang.String label()
              Return the label value to display in the reset button.
     void release()
              Release any acquired resources.
    protected  java.lang.String renderResetElement(java.lang.String label)
              Generate an HTML reset button.
     void setProperty(java.lang.String property)
              Set the field name.
     void setValue(java.lang.String value)
              Set the label value.
     
    Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    getAccesskey, getAlt, getAltKey, getBundle, getDisabled, getElementClose, getIndexed, getLocale, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, getTitleKey, isXhtml, lookupProperty, message, prepareEventHandlers, prepareFocusEvents, prepareIndex, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setAlt, setAltKey, setBundle, setDisabled, setIndexed, setLocale, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle, setTitleKey
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    messages

    protected static MessageResources messages
    The message resources for this package.


    property

    protected java.lang.String property
    The name of the generated input field.


    text

    protected java.lang.String text
    The body content of this tag (if any).


    value

    protected java.lang.String value
    The value of the button label.

    Constructor Detail

    ResetTag

    public ResetTag()
    Method Detail

    getProperty

    public java.lang.String getProperty()
    Return the field name.


    setProperty

    public void setProperty(java.lang.String property)
    Set the field name.

    Parameters:
    property - The field name

    getValue

    public java.lang.String getValue()
    Return the label value.


    setValue

    public void setValue(java.lang.String value)
    Set the label value.

    Parameters:
    value - The label value

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Process the start of this tag.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doAfterBody

    public int doAfterBody()
                    throws javax.servlet.jsp.JspException
    Save the associated label from the body content.

    Specified by:
    doAfterBody in interface javax.servlet.jsp.tagext.BodyTag
    Overrides:
    doAfterBody in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Process the end of this tag.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    label

    protected java.lang.String label()
    Return the label value to display in the reset button.

    Since:
    Struts 1.1

    renderResetElement

    protected java.lang.String renderResetElement(java.lang.String label)
                                           throws javax.servlet.jsp.JspException
    Generate an HTML reset button.

    Parameters:
    label - The text to be displayed on the button.
    Returns:
    A fully formed HTML reset button.
    Throws:
    javax.servlet.jsp.JspException
    Since:
    Struts 1.1

    release

    public void release()
    Release any acquired resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class BaseHandlerTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/RewriteTag.html0000644000175000017500000007431310404045222030524 0ustar arnaudarnaud00000000000000 RewriteTag (Apache Struts API Documentation)

    org.apache.struts.taglib.html
    Class RewriteTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.BaseHandlerTag
                        |
                        +--org.apache.struts.taglib.html.LinkTag
                              |
                              +--org.apache.struts.taglib.html.RewriteTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class RewriteTag
    extends LinkTag

    Generate a URL-encoded URI as a string.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
     
    Fields inherited from class org.apache.struts.taglib.html.LinkTag
    action, anchor, forward, href, indexId, linkName, messages, name, page, paramId, paramName, paramProperty, paramScope, property, scope, target, text, transaction
     
    Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    accesskey, defaultLocale, indexed, tabindex
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    RewriteTag()
               
     
    Method Summary
     int doEndTag()
              Ignore the end of this tag.
     int doStartTag()
              Render the appropriately encoded URI.
     
    Methods inherited from class org.apache.struts.taglib.html.LinkTag
    calculateURL, doAfterBody, getAction, getAnchor, getForward, getHref, getIndexId, getLinkName, getName, getPage, getParamId, getParamName, getParamProperty, getParamScope, getProperty, getScope, getTarget, getTransaction, release, setAction, setAnchor, setForward, setHref, setIndexId, setLinkName, setName, setPage, setParamId, setParamName, setParamProperty, setParamScope, setProperty, setScope, setTarget, setTransaction
     
    Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    getAccesskey, getAlt, getAltKey, getBundle, getDisabled, getElementClose, getIndexed, getLocale, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, getTitleKey, isXhtml, lookupProperty, message, prepareEventHandlers, prepareFocusEvents, prepareIndex, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setAlt, setAltKey, setBundle, setDisabled, setIndexed, setLocale, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle, setTitleKey
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Constructor Detail

    RewriteTag

    public RewriteTag()
    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Render the appropriately encoded URI.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class LinkTag
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Ignore the end of this tag.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class LinkTag
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/SelectTag.html0000644000175000017500000011705110404045222030317 0ustar arnaudarnaud00000000000000 SelectTag (Apache Struts API Documentation)

    org.apache.struts.taglib.html
    Class SelectTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.BaseHandlerTag
                        |
                        +--org.apache.struts.taglib.html.SelectTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    NestedSelectTag

    public class SelectTag
    extends BaseHandlerTag

    Custom tag that represents an HTML select element, associated with a bean property specified by our attributes. This tag must be nested inside a form tag.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Craig R. McClanahan, David Graham
    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String[] match
              The actual values we will match against, calculated in doStartTag().
    protected static MessageResources messages
              The message resources for this package.
    protected  java.lang.String multiple
              Should multiple selections be allowed.
    protected  java.lang.String name
              The name of the bean containing our underlying property.
    protected  java.lang.String property
              The property name we are associated with.
    protected  java.lang.String saveBody
              The saved body content of this tag.
    protected  java.lang.String size
              How many available options should be displayed when this element is rendered?
    protected  java.lang.String value
              The value to compare with for marking an option selected.
     
    Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    accesskey, defaultLocale, indexed, tabindex
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    SelectTag()
               
     
    Method Summary
    private  void calculateMatchValues()
              Calculate the match values we will actually be using.
     int doAfterBody()
              Save any body content of this tag, which will generally be the option(s) representing the values displayed to the user.
     int doEndTag()
              Render the end of this form.
     int doStartTag()
              Render the beginning of this select tag.
     java.lang.String getMultiple()
               
     java.lang.String getName()
               
     java.lang.String getProperty()
              Return the property name.
     java.lang.String getSize()
               
     java.lang.String getValue()
              Return the comparison value.
     boolean isMatched(java.lang.String value)
              Does the specified value match one of those we are looking for?
     void release()
              Release any acquired resources.
    protected  java.lang.String renderSelectStartElement()
              Create an appropriate select start element based on our parameters.
     void setMultiple(java.lang.String multiple)
               
     void setName(java.lang.String name)
               
     void setProperty(java.lang.String property)
              Set the property name.
     void setSize(java.lang.String size)
               
     void setValue(java.lang.String value)
              Set the comparison value.
     
    Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    getAccesskey, getAlt, getAltKey, getBundle, getDisabled, getElementClose, getIndexed, getLocale, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, getTitleKey, isXhtml, lookupProperty, message, prepareEventHandlers, prepareFocusEvents, prepareIndex, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setAlt, setAltKey, setBundle, setDisabled, setIndexed, setLocale, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle, setTitleKey
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    match

    protected java.lang.String[] match
    The actual values we will match against, calculated in doStartTag().


    messages

    protected static MessageResources messages
    The message resources for this package.


    multiple

    protected java.lang.String multiple
    Should multiple selections be allowed. Any non-null value will trigger rendering this.


    name

    protected java.lang.String name
    The name of the bean containing our underlying property.


    property

    protected java.lang.String property
    The property name we are associated with.


    saveBody

    protected java.lang.String saveBody
    The saved body content of this tag.


    size

    protected java.lang.String size
    How many available options should be displayed when this element is rendered?


    value

    protected java.lang.String value
    The value to compare with for marking an option selected.

    Constructor Detail

    SelectTag

    public SelectTag()
    Method Detail

    getMultiple

    public java.lang.String getMultiple()

    setMultiple

    public void setMultiple(java.lang.String multiple)

    getName

    public java.lang.String getName()

    setName

    public void setName(java.lang.String name)

    getSize

    public java.lang.String getSize()

    setSize

    public void setSize(java.lang.String size)

    isMatched

    public boolean isMatched(java.lang.String value)
    Does the specified value match one of those we are looking for?

    Parameters:
    value - Value to be compared.

    getProperty

    public java.lang.String getProperty()
    Return the property name.


    setProperty

    public void setProperty(java.lang.String property)
    Set the property name.

    Parameters:
    property - The new property name

    getValue

    public java.lang.String getValue()
    Return the comparison value.


    setValue

    public void setValue(java.lang.String value)
    Set the comparison value.

    Parameters:
    value - The new comparison value

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Render the beginning of this select tag.

    Support for indexed property since Struts 1.1

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    renderSelectStartElement

    protected java.lang.String renderSelectStartElement()
                                                 throws javax.servlet.jsp.JspException
    Create an appropriate select start element based on our parameters.

    Throws:
    javax.servlet.jsp.JspException
    Since:
    Struts 1.1

    calculateMatchValues

    private void calculateMatchValues()
                               throws javax.servlet.jsp.JspException
    Calculate the match values we will actually be using.

    Throws:
    javax.servlet.jsp.JspException

    doAfterBody

    public int doAfterBody()
                    throws javax.servlet.jsp.JspException
    Save any body content of this tag, which will generally be the option(s) representing the values displayed to the user.

    Specified by:
    doAfterBody in interface javax.servlet.jsp.tagext.BodyTag
    Overrides:
    doAfterBody in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Render the end of this form.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    release

    public void release()
    Release any acquired resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class BaseHandlerTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/SubmitTag.html0000644000175000017500000007602410404045246030355 0ustar arnaudarnaud00000000000000 SubmitTag (Apache Struts API Documentation)

    org.apache.struts.taglib.html
    Class SubmitTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.BaseHandlerTag
                        |
                        +--org.apache.struts.taglib.html.SubmitTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    ImageTag, NestedSubmitTag

    public class SubmitTag
    extends BaseHandlerTag

    Tag for input fields of type "submit".

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
    protected static MessageResources messages
              The message resources for this package.
    protected  java.lang.String property
              The name of the generated input field.
    protected  java.lang.String text
              The body content of this tag (if any).
    protected  java.lang.String value
              The value of the button label.
     
    Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    accesskey, defaultLocale, indexed, tabindex
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    SubmitTag()
               
     
    Method Summary
     int doAfterBody()
              Save the associated label from the body content.
     int doEndTag()
              Process the end of this tag.
     int doStartTag()
              Process the start of this tag.
     java.lang.String getProperty()
              Return the property.
     java.lang.String getValue()
              Return the label value.
     void release()
              Release any acquired resources.
     void setProperty(java.lang.String property)
              Set the property name.
     void setValue(java.lang.String value)
              Set the label value.
     
    Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    getAccesskey, getAlt, getAltKey, getBundle, getDisabled, getElementClose, getIndexed, getLocale, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, getTitleKey, isXhtml, lookupProperty, message, prepareEventHandlers, prepareFocusEvents, prepareIndex, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setAlt, setAltKey, setBundle, setDisabled, setIndexed, setLocale, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle, setTitleKey
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    messages

    protected static MessageResources messages
    The message resources for this package.


    property

    protected java.lang.String property
    The name of the generated input field.


    text

    protected java.lang.String text
    The body content of this tag (if any).


    value

    protected java.lang.String value
    The value of the button label.

    Constructor Detail

    SubmitTag

    public SubmitTag()
    Method Detail

    getProperty

    public java.lang.String getProperty()
    Return the property.


    setProperty

    public void setProperty(java.lang.String property)
    Set the property name.

    Parameters:
    property - The property name

    getValue

    public java.lang.String getValue()
    Return the label value.


    setValue

    public void setValue(java.lang.String value)
    Set the label value.

    Parameters:
    value - The label value

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Process the start of this tag.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doAfterBody

    public int doAfterBody()
                    throws javax.servlet.jsp.JspException
    Save the associated label from the body content.

    Specified by:
    doAfterBody in interface javax.servlet.jsp.tagext.BodyTag
    Overrides:
    doAfterBody in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Process the end of this tag.

    Support for Indexed property since Struts 1.1

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    release

    public void release()
    Release any acquired resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class BaseHandlerTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/TextTag.html0000644000175000017500000006576110404045216030041 0ustar arnaudarnaud00000000000000 TextTag (Apache Struts API Documentation)

    org.apache.struts.taglib.html
    Class TextTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.BaseHandlerTag
                        |
                        +--org.apache.struts.taglib.html.BaseInputTag
                              |
                              +--org.apache.struts.taglib.html.BaseFieldTag
                                    |
                                    +--org.apache.struts.taglib.html.TextTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    NestedTextTag

    public class TextTag
    extends BaseFieldTag

    Custom tag for input fields of type "text".

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
     
    Fields inherited from class org.apache.struts.taglib.html.BaseFieldTag
    accept, name, redisplay, type
     
    Fields inherited from class org.apache.struts.taglib.html.BaseInputTag
    cols, maxlength, messages, property, rows, value
     
    Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    accesskey, defaultLocale, indexed, tabindex
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    TextTag()
              Construct a new instance of this tag.
     
    Methods inherited from class org.apache.struts.taglib.html.BaseFieldTag
    doStartTag, getAccept, getName, getRedisplay, release, setAccept, setName, setRedisplay
     
    Methods inherited from class org.apache.struts.taglib.html.BaseInputTag
    doEndTag, getCols, getMaxlength, getProperty, getRows, getSize, getValue, setCols, setMaxlength, setProperty, setRows, setSize, setValue
     
    Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    getAccesskey, getAlt, getAltKey, getBundle, getDisabled, getElementClose, getIndexed, getLocale, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, getTitleKey, isXhtml, lookupProperty, message, prepareEventHandlers, prepareFocusEvents, prepareIndex, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setAlt, setAltKey, setBundle, setDisabled, setIndexed, setLocale, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle, setTitleKey
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doAfterBody, doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Constructor Detail

    TextTag

    public TextTag()
    Construct a new instance of this tag.



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/TextareaTag.html0000644000175000017500000007522410404045206030664 0ustar arnaudarnaud00000000000000 TextareaTag (Apache Struts API Documentation)

    org.apache.struts.taglib.html
    Class TextareaTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.BaseHandlerTag
                        |
                        +--org.apache.struts.taglib.html.BaseInputTag
                              |
                              +--org.apache.struts.taglib.html.TextareaTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    NestedTextareaTag

    public class TextareaTag
    extends BaseInputTag

    Custom tag for input fields of type "textarea".

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Craig R. McClanahan, David Graham
    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String name
              The name of the bean containing our underlying property.
     
    Fields inherited from class org.apache.struts.taglib.html.BaseInputTag
    cols, maxlength, messages, property, rows, value
     
    Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    accesskey, defaultLocale, indexed, tabindex
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    TextareaTag()
               
     
    Method Summary
     int doStartTag()
              Generate the required input tag.
     java.lang.String getName()
               
     void release()
              Release any acquired resources.
    protected  java.lang.String renderData()
              Renders the value displayed in the <textarea> tag.
    protected  java.lang.String renderTextareaElement()
              Generate an HTML <textarea> tag.
     void setName(java.lang.String name)
               
     
    Methods inherited from class org.apache.struts.taglib.html.BaseInputTag
    doEndTag, getCols, getMaxlength, getProperty, getRows, getSize, getValue, setCols, setMaxlength, setProperty, setRows, setSize, setValue
     
    Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    getAccesskey, getAlt, getAltKey, getBundle, getDisabled, getElementClose, getIndexed, getLocale, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, getTitleKey, isXhtml, lookupProperty, message, prepareEventHandlers, prepareFocusEvents, prepareIndex, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setAlt, setAltKey, setBundle, setDisabled, setIndexed, setLocale, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle, setTitleKey
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doAfterBody, doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    name

    protected java.lang.String name
    The name of the bean containing our underlying property.

    Constructor Detail

    TextareaTag

    public TextareaTag()
    Method Detail

    getName

    public java.lang.String getName()

    setName

    public void setName(java.lang.String name)

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Generate the required input tag. Support for indexed since Struts 1.1

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class BaseInputTag
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    renderTextareaElement

    protected java.lang.String renderTextareaElement()
                                              throws javax.servlet.jsp.JspException
    Generate an HTML <textarea> tag.

    Throws:
    javax.servlet.jsp.JspException
    Since:
    Struts 1.1

    renderData

    protected java.lang.String renderData()
                                   throws javax.servlet.jsp.JspException
    Renders the value displayed in the <textarea> tag.

    Throws:
    javax.servlet.jsp.JspException
    Since:
    Struts 1.1

    release

    public void release()
    Release any acquired resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class BaseInputTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/XhtmlTag.html0000644000175000017500000002743310404045236030205 0ustar arnaudarnaud00000000000000 XhtmlTag (Apache Struts API Documentation)

    org.apache.struts.taglib.html
    Class XhtmlTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.html.XhtmlTag
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class XhtmlTag
    extends javax.servlet.jsp.tagext.TagSupport

    This tag tells all other html taglib tags to render themselves in xhtml. It has no attributes; it's presence in a page turns on xhtml.

    Example:
    <html:xhtml/>

    Author:
    David Graham
    See Also:
    Serialized Form

    Field Summary
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    XhtmlTag()
              Constructor for XhtmlTag.
     
    Method Summary
     int doEndTag()
               
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    doStartTag, findAncestorWithClass, getId, getParent, getValue, getValues, release, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    XhtmlTag

    public XhtmlTag()
    Constructor for XhtmlTag.

    Method Detail

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.TagSupport
    javax.servlet.jsp.JspException
    See Also:
    Tag.doEndTag()


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/package-frame.html0000644000175000017500000000625410404045244031135 0ustar arnaudarnaud00000000000000 org.apache.struts.taglib.html (Apache Struts API Documentation) org.apache.struts.taglib.html
    Classes 
    BaseFieldTag
    BaseHandlerTag
    BaseInputTag
    BaseTag
    ButtonTag
    CancelTag
    CheckboxTag
    Constants
    ErrorsTag
    FileTag
    FormTag
    FrameTag
    HiddenTag
    HtmlTag
    ImageTag
    ImgTag
    JavascriptValidatorTag
    LinkTag
    MessagesTag
    MessagesTei
    MultiboxTag
    OptionsCollectionTag
    OptionsTag
    OptionTag
    PasswordTag
    RadioTag
    ResetTag
    RewriteTag
    SelectTag
    SubmitTag
    TextareaTag
    TextTag
    XhtmlTag
    libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/package-summary.html0000644000175000017500000012716210404045230031535 0ustar arnaudarnaud00000000000000 org.apache.struts.taglib.html (Apache Struts API Documentation)

    Package org.apache.struts.taglib.html

    The "struts-html" tag library contains JSP custom tags useful in creating dynamic HTML user interfaces, including input forms.

    See:
              Description

    Class Summary
    BaseFieldTag Convenience base class for the various input tags for text fields.
    BaseHandlerTag Base class for tags that render form elements capable of including JavaScript event handlers and/or CSS Style attributes.
    BaseInputTag Abstract base class for the various input tags.
    BaseTag Renders an HTML element with an href attribute pointing to the absolute location of the enclosing JSP page.
    ButtonTag Renders an HTML BUTTON tag within the Struts framework.
    CancelTag Tag for input fields of type "cancel".
    CheckboxTag Tag for input fields of type "checkbox".
    Constants Manifest constants for this package.
    ErrorsTag Custom tag that renders error messages if an appropriate request attribute has been created.
    FileTag Custom tag for input fields of type "file".
    FormTag Custom tag that represents an input form, associated with a bean whose properties correspond to the various fields of the form.
    FrameTag Generate an HTML <frame> tag with similar capabilities as those the <html:link> tag provides for hyperlink elements.
    HiddenTag Custom tag for input fields of type "hidden".
    HtmlTag Renders an HTML element with appropriate language attributes if there is a current Locale available in the user's session.
    ImageTag Tag for input fields of type "image".
    ImgTag Generate an IMG tag to the specified image URI.
    JavascriptValidatorTag Custom tag that generates JavaScript for client side validation based on the validation rules loaded by the ValidatorPlugIn defined in the struts-config.xml file.
    LinkTag Generate a URL-encoded hyperlink to the specified URI.
    MessagesTag Custom tag that iterates the elements of a message collection.
    MessagesTei Implementation of TagExtraInfo for the messages tag, identifying the scripting object(s) to be made visible.
    MultiboxTag Tag for input fields of type "checkbox".
    OptionsCollectionTag Tag for creating multiple <select> options from a collection.
    OptionsTag Tag for creating multiple <select> options from a collection.
    OptionTag Tag for select options.
    PasswordTag Custom tag for input fields of type "password".
    RadioTag Tag for input fields of type "radio".
    ResetTag Tag for input fields of type "reset".
    RewriteTag Generate a URL-encoded URI as a string.
    SelectTag Custom tag that represents an HTML select element, associated with a bean property specified by our attributes.
    SubmitTag Tag for input fields of type "submit".
    TextareaTag Custom tag for input fields of type "textarea".
    TextTag Custom tag for input fields of type "text".
    XhtmlTag This tag tells all other html taglib tags to render themselves in xhtml.
     

    Package org.apache.struts.taglib.html Description

    The "struts-html" tag library contains JSP custom tags useful in creating dynamic HTML user interfaces, including input forms.


    Introduction

    The tags in the Struts HTML library form a bridge between a JSP view and the other components of a Web application. Since a dynamic Web application often depends on gathering data from a user, input forms play an important role in the Struts framework. Consequently, the majority of the HTML tags involve HTML forms. Other important issues addressed by the Struts-HTML tags are messages , error messages , hyperlinking and internationalization .

    Tags that wrap the html tags

    HTML "form" tags

    Each of these tags must be nested within a <html:form> tag.

    About the form tag

    The Struts form tag outputs a standard HTML form tag, and also links the input form with a JavaBean subclassed from the Struts ActionFormobject. Each field in the form should correspond to a property of the form's bean. When a field and property correspond, the bean is first used to populate the form, and then to store the user's input when the form is submitted to the controller servlet.

    The name of the bean and its class can be specified as a property to the form tag, but may also be omitted. If omitted, the ActionMappings database (loaded from the struts-config.xml file) is consulted. If the current page is specified as the input property for an action, the name of the action is used. The type property for the bean is also then taken from the configuration, via a Form Bean definition.

    Here's a clip from the Struts Example configuration:

    <action-mappings>
    <!-- Process a user logon -->
    <action path="/logon"
    type="org.apache.struts.webapp.example.LogonAction"
    name="logonForm"
    scope="request"
    input="/logon.jsp">
    </action>
    < ... />
    </action-mappings>
    <form-beans>
    <!-- Logon form bean -->
    <form-bean name="logonForm"
    type="org.apache.struts.webapp.example.LogonForm"/>
    < ... />
    </form-beans>
    </pre>

    Given this configuration, the HTML form tag for logon.jsp will default to using "logonForm" as its name property and " org.apache.struts.webapp.example.LogonForm" as the attribute's type. This way you can manage the namespace for your framework components from the configuration file.

    If the form tag does not find the form bean in any of the scopes (page, request, session, application), it creates one using the specified type.

    The Struts ActionForm class is equipped with standard reset() and validate() methods, that can be used by the controller to enable automatic data validation. See the Users Guide for more about Form Validation. An important aspect of validation is reporting errors to the user. This can be handled by the Struts errors tag, which is discussed later in this document .


    Common Form Tag Attributes

    The form "field" tags in the Struts-HTML tag library share a common set of tag attributes that have the same meaning, no matter what field tag they are used with. These properties also accept Runtime Expressions, meaning you can set them with a scriptlet. The common attributes fall into four categories: Struts Common, HTML Navigation , Javascript , and CSS .

    Struts Common
    name The attribute name of the ActionForm bean whose properties are consulted when rendering the current value of this input field. If not specified, the bean associated with the form tag we are nested within is utilized.
    property Name of the request parameter that will be included with this submission, set to the specified value.
    value Value of the label to be used with this element. This value will also be submitted as the value of the specified request parameter. [Body of this tag (if any), or "Click"] 

     

    Like Struts-Bean tags, the property attribute for the Struts-HTML tags accept simple, nested, and indexed expressions. For example, this tag:

      <html:text property="mailingAddress.street"/>

    corresponds to:

      getMailingAddress().getStreet()

    For more about using simple, nested, and indexed expressions with Struts, see the Struts-Bean Developers Guide.

    Javascript Event Handlers
    onblur Executed when this element loses input focus.
    onchange Executed when this element loses input focus and its value has changed.
    onclick Executed when this element receives a mouse click.
    ondblclick Executed when this element receives a mouse - double click.
    onfocus Executed when this element receives input focus.
    onkeydown Executed when this element has focus and a key is depressed. 
    onkeypress Executed when this element has focus and a key is depressed and released
    onkeyup Executed when this element has focus and a key is released
    onmousedown Executed when this element is under the mouse pointer and a mouse button is depressed.
    onmousemove Executed when this element is under the mouse pointer and the pointer is moved.
    onmouseout Executed when this element was under the mouse pointer but the pointer was moved outside the element.
    onmouseover Executed when this element was not under the mouse pointer but the pointer is moved inside the element.
    onmouseup Executed when this element is under the mouse pointer and a mouse button is released. 
      "parent" form tag only
    onreset Executed if the form is reset.
    onsubmit Executed if the form is submitted. 
     
    HTML Navigation Attributes
    accesskey The keyboard character used to move focus immediately to this element.
    tabindex The tab order (ascending positive integers) for this element.
     
    CSS Attributes
    style CSS styles to be applied to this HTML element.
    styleClass CSS stylesheet class to be applied to this HTML element.

     

    See the HTML Tags Reference for detailed information about the available tags in this tag library, and the complete list of valid attributes for each tag.


    Other HTML tags

    Aside from form processing, the Struts-HTML offers several other tags or tag properties to help with displaying error messages, messages, maintaining hyperlinks, and with internationalizing your application.

    Displaying Messages

    Message handling is an important part of any application. These messages can be informative messages and/or error messages for the user. Struts provides a generalized method for communicating runtime messages to users, based on the same technology used to provide internationalization. Messages and error messages can both be used by the messages tag.

    The messages tag [since version 1.1] has basically the same functionality as the errors tag, but it iterates through the messages so any formatting of messages can be done in the JSP page. Also the header and footer for the message tag are optional.

    By default, the messages tag will iterate through all pending messages. You can also specify a property when queuing a message, and then refer to that property in the messages tag. In that case, only the message(s) for that property will be displayed. This is helpful when you would like to place the message for a field next to the actual field.

    Messages are often queued in the Action. The variable info is the ActionForm corresponding to this Action. :

      
    ActionMessages messages = new ActionMessages();
    messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("userForm.insert", info.getUserName());
    messages.add("activationDate", new ActionMessage("userForm.active", info.getSubscriptionLength());

    This queues two messages, one is a global message and another for the "activationDate" field. To print all the messages together, simply place the messages tag anywhere in your JSP.

      <body bgcolor="white">
    <ul>
    <html:messages id="message">
    <li><bean:write name="message"/></li>
    </html:messages>
    </ul>

    Or, you can place specific messages at different locations

      <ul>
    <html:messages id="message" property="<%= org.apache.struts.action.ActionMessages.GLOBAL_MESSAGE %>">
    <li><bean:write name="message"/></li>
    </html:messages>
    </ul>
    <table>
    <tr>
    <td align="left">
    <html:text property="username" size="16" maxlength="16"/>
    </td>
    </tr>
    <tr>
    <td align="left">
    <html:text property="activationDate" size="10" maxlength="10"/>
    <br>
    <html:messages id="message" property="activationDate">
    <bean:write name="message"/><br>
    </html:messages>
    </td>
    </tr>
    </table>

    By default, the actual message is retrieved from the application's standard message resource. This gives you a master list of the messages used by your application, and provides for internationalization. In the code snippet, the message corresponding to "userForm.insert" would be retrieved and displayed to the user at runtime.

      userForm.insert={0} has successfully been inserted.
    userForm.active=The account will be active for {0} months.

    A header and footer are optional. The header will be rendered before iteration begins and the footer will be rendered after iteration is over. If a value is not assigned to the attribute, then nothing will be rendered for that attribute.

      <html:messages id="message" header="errors.header" footer="errors.footer">
    <li><bean:write name="message"/></li>
    </html:messages>

    errors.header=<h3><font color="red">Validation Error</font></h3>
    You must correct the following error(s) before proceeding:<UL>
    errors.footer=</ul><hr>

    Displaying Error Messages

    Error handling is an important part of any application, and curing an error often involves getting the user's help. Struts provides a generalized method for communicating runtime messages to users, based on the same technology used to provide internationalization.

    In a Web application, it is common to reuse the input page to display error messages. The Struts error message tag can be placed wherever you would like the messages to display. If no messages are pending, nothing is printed.

    By default, the errors tag will print all pending messages. You can also specify a property when queuing a message, and then refer to that property in the errors tag. In that case, only the message for that property will be displayed. This is helpful when you would like to place the message for a field next to the actual field.

    Error messages are often queued in the ActionForm validate method. Here's a snippet from the Struts Example application:

      ActionErrors errors = new ActionErrors();
    if ((username == null) || (username.length() < 1))
    errors.add("username", new ActionError("error.username.required"));
    if ((password == null) || (password.length() < 1))
    errors.add("password",
    new ActionError("error.password.required"));

    This queues two error messages, one for the "username" field and another for the "password" field. To print all the messages together, simply place the error tag anywhere in your JSP.

      <body bgcolor="white">
    <html:errors/>

    Or, you can place specific error messages at different locations

      <td align="left">
    <html:text property="username" size="16" maxlength="16"/>
    <html:errors property="username"/>
    </td>
    </tr><tr>
    <td align="left">
    <html:text property="password" size="16" maxlength="16"/>
    <html:errors property="password"/>
    </td>

    By default, the actual error message is retrieved from the application's standard message resource. This gives you a master list of the error messages used by your application, and provides for internationalization. In the code snippet, the message corresponding to "error.username.required" would be retrieved and displayed to the user at runtime.

      error.username.required=<li>Username is required</li>

    Most often, error messages are displayed in a particular way. To make it easy to format your messages, you can also specific an errors.header and errors.footer string in your message resource. Typically, you might want to render the messages in a different color, or set them up to appear in an unordered list. Using the errors.header and errors.footer strings keeps the setup codes out of your JSP until a message actually prints.

      errors.header=<h3><font color="red">Validation Error</font></h3>
    You must correct the following error(s) before proceeding:<UL>
    errors.footer=</ul><hr>

    Maintaining Hyperlinks

    When implementing a Web application, it is usually a good idea to use relative references to other files in the same application. But in a dynamic application, the controller servlet often returns a completely different file than the one requested. (Often, the requested "file" doesn't actually exist, but represents an action for the controller to interpret.) Since relative references are resolved by the browser, they often won't work in a dynamic application.

    To accommodate this, the Struts-HTML taglib provides a <base> tag that renders an HTML element with an href attribute pointing to the absolute location of its page.

    As a rule, you should place the Struts-HTML base tag in the <head> section of any JSP that uses relative references to other files.

      <head>
    <html:base/>
    </head>

    Session Tracking

    The Java Servlet framework has built-in support for tracking a client through a session. Sessions are a useful way to compensate for the stateless nature of HTTP. Tracking a client can be done with either cookies or URL rewriting, cookies being preferred when available. Struts offers three tags that make it easy to write "session-aware" hyperlink references:

    • link - Renders an HTML anchor or hyperlink.
    • rewrite - Renders a request URI, but without creating the <a> hyperlink. This tag is useful when you want to generate a string constant for use by a JavaScript procedure.
    • img - Renders an HTML <img> element with the image at the specified URL.

    Each of these tags will automatically apply URL rewriting, to maintain session state in the absence of cookies. The content displayed for the hyperlink will be taken from the body of the tag. The base URL for the hyperlink is calculated based on properties given with the tag.

    Normally, the hyperlink or URI you specify is left unchanged. If you would like to include dynamic parameters to the hyperlink or URI, you can pass those to the tags via a JavaBean. If there may be naming conflicts, you can also specify the scope that the tag searches (request, page, session, application).

    To pass a single dynamic parameter, specify the parameter's name using the paramId attribute. You can then specify the name of the JavaBean holding the value using the paramName attribute, and a particular property using paramProperty.

    So, a tag like

       <html:link paramId="target"
    paramName="linkParams"
    paramProperty="target"
    paramScope="request"
    >detail.html</html:link>

    would correspond to something like

      <A HREF="detail.html?<%= 
    request.getAttribute("linkParams").getTarget()
    %>"></A>

    To search all scopes (request, page, session, and application), omit paramScope.

    The paramProperty attribute may also be omitted, so long as the named bean identifies a value that can be converted to a String.

    To pass multiple dynamic parameters, you can store them in a java.util.Map , and use the name of the map for the paramName. The map must then contain one or more paramIds and their corresponding values. As the Map is processed, the keys are assumed to be the names of query parameters to be appended. 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.

    The HTML session tracking tags use several common attributes, that can be organized into three groups, as follows. All of these attributes are not used by all three tags (link, rewrite, and img), and so the tags using each attribute is given.

     
    forward, href, and page
    forward [ link rewrite ] - Logical name of a global ActionForward 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 must specify exactly one of the forward attribute, the href attribute, the linkName attribute, or the page attribute
    href [ link rewrite ] - The URL 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 must specify exactly one of the forward attribute, the href attribute, the linkName attribute, or the page attribute.
    page [ link rewrite ] - The context-relative path, starting with a slash, of the image to be displayed by this tag. The rendered URL for this image will automatically prepend the context path of this web application (in the same manner as the page attribute on the link tag works), in addition to any necessary URL rewriting. You must specify either the page attribute or the src attribute.

     
    linkName, Target , and src
    linkName

    [ link ] - The anchor name to be defined within this page, so that you can reference it with intra-page hyperlinks. In other words, the value specified here will render a "name" element in the generated anchor tag.

    target [ link img ] - The window target in which the resource requested by this hyperlink will be displayed, for example in a framed presentation.
    src [ img ] - The URL to which this image will be transferred from This image may be dynamically modified by the inclusion of query parameters, as described in the tag description. This value will be used unmodified (other than potential URL rewriting) as the value of the "src" attribute in the rendered tag. You must specify either the page attribute or the the src attribute.

     
    paramId, paramName, paramProperty, paramScope
    paramId [ link img ] - The name of the request parameter that will be dynamically added to the generated src URL. The corresponding value is defined by the paramName and (optional) paramProperty attributes, optionally scoped by the paramScope attribute
    paramName [ link img ] - The name of a JSP bean that is a String containing the value for the request parameter named by paramId (if paramProperty is not specified), or a JSP bean whose property getter is called to return a String (if paramProperty is specified). The JSP bean is constrained to the bean scope specified by the paramScope property, if it is specified.
    paramProperty [ link img ] - The name of a property of the bean specified by the paramName attribute, whose return value must be a String containing the value of the request parameter (named by the paramId attribute) that will be dynamically added to this hyperlink or src URL
    paramScope [ link img ] - The scope within which to search for the bean specified by the paramName attribute. If not specified, all scopes are searched.

     

    name, property, scope

    name [ link rewrite img ] - The name of a JSP bean that contains a Map representing the query parameters (if property is not specified), or a JSP bean whose property getter is called to return a Map (if property is specified).
    property [ link rewrite img ] - The name of a property of the bean specified by the name attribute, whose return value must be a Map containing the query parameters to be added to the src URL. You must specify the name attribute if you specify this attribute
    scope [ link rewrite img ] - The scope within which to search for the bean specified by the name attribute. If not specified, all scopes are searched.

    See the HTML Tags Reference for the complete list of valid attributes for each tag..

    Internationalization

    Internationalization is automatically supported by the HTML tags where appropriate.

    Errors - By default, the text for your messages will be returned by the default message resource, which will select the appropriate language for the user. You may also specify another message resource using the bundle attribute.

    HTML - Renders an HTML element with language attributes extracted from the user's current Locale object, if there is one.

    image and img - Can optionally retrieve the value for its binary source and alt text from the message resource, so that different images and/or text can be provided for different locales. See the tag's altKey, srcKey , and bundle attributes in the HTML Tags Reference .

    Messages - By default, the text for your messages will be returned by the default message resource, which will select the appropriate language for the user. You may also specify another message resource using the bundle attribute.

    See the Users Guide for more on how Struts helps you internationalize your applications.

     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/package-tree.html0000644000175000017500000002526510404045244031005 0ustar arnaudarnaud00000000000000 org.apache.struts.taglib.html Class Hierarchy (Apache Struts API Documentation)

    Hierarchy For Package org.apache.struts.taglib.html

    Package Hierarchies:
    All Packages

    Class Hierarchy

    • class java.lang.Object
      • class org.apache.struts.taglib.html.Constants
      • class javax.servlet.jsp.tagext.TagExtraInfo
      • class javax.servlet.jsp.tagext.TagSupport (implements java.io.Serializable, javax.servlet.jsp.tagext.Tag)


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/html/package-use.html0000644000175000017500000004333710404045220030634 0ustar arnaudarnaud00000000000000 Uses of Package org.apache.struts.taglib.html (Apache Struts API Documentation)

    Uses of Package
    org.apache.struts.taglib.html

    Packages that use org.apache.struts.taglib.html
    org.apache.struts.taglib.html The "struts-html" tag library contains JSP custom tags useful in creating dynamic HTML user interfaces, including input forms. 
    org.apache.struts.taglib.nested.html The nested html tags extend the org.apache.struts.taglib.html tags to allow them to relate to each other in a nested nature. 
    org.apache.struts.taglib.tiles.ext   
     

    Classes in org.apache.struts.taglib.html used by org.apache.struts.taglib.html
    BaseFieldTag
              Convenience base class for the various input tags for text fields.
    BaseHandlerTag
              Base class for tags that render form elements capable of including JavaScript event handlers and/or CSS Style attributes.
    BaseInputTag
              Abstract base class for the various input tags.
    LinkTag
              Generate a URL-encoded hyperlink to the specified URI.
    SelectTag
              Custom tag that represents an HTML select element, associated with a bean property specified by our attributes.
    SubmitTag
              Tag for input fields of type "submit".
     

    Classes in org.apache.struts.taglib.html used by org.apache.struts.taglib.nested.html
    BaseFieldTag
              Convenience base class for the various input tags for text fields.
    BaseHandlerTag
              Base class for tags that render form elements capable of including JavaScript event handlers and/or CSS Style attributes.
    BaseInputTag
              Abstract base class for the various input tags.
    CheckboxTag
              Tag for input fields of type "checkbox".
    ErrorsTag
              Custom tag that renders error messages if an appropriate request attribute has been created.
    FileTag
              Custom tag for input fields of type "file".
    FormTag
              Custom tag that represents an input form, associated with a bean whose properties correspond to the various fields of the form.
    HiddenTag
              Custom tag for input fields of type "hidden".
    ImageTag
              Tag for input fields of type "image".
    ImgTag
              Generate an IMG tag to the specified image URI.
    LinkTag
              Generate a URL-encoded hyperlink to the specified URI.
    MessagesTag
              Custom tag that iterates the elements of a message collection.
    MultiboxTag
              Tag for input fields of type "checkbox".
    OptionsCollectionTag
              Tag for creating multiple <select> options from a collection.
    OptionsTag
              Tag for creating multiple <select> options from a collection.
    PasswordTag
              Custom tag for input fields of type "password".
    RadioTag
              Tag for input fields of type "radio".
    SelectTag
              Custom tag that represents an HTML select element, associated with a bean property specified by our attributes.
    SubmitTag
              Tag for input fields of type "submit".
    TextareaTag
              Custom tag for input fields of type "textarea".
    TextTag
              Custom tag for input fields of type "text".
     

    Classes in org.apache.struts.taglib.html used by org.apache.struts.taglib.tiles.ext
    BaseFieldTag
              Convenience base class for the various input tags for text fields.
    BaseHandlerTag
              Base class for tags that render form elements capable of including JavaScript event handlers and/or CSS Style attributes.
    BaseInputTag
              Abstract base class for the various input tags.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/0000755000175000017500000000000010423130300025673 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/class-use/0000755000175000017500000000000010423130300027572 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/class-use/CompareTagBase.html0000644000175000017500000003200510404045214033305 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.logic.CompareTagBase (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.logic.CompareTagBase

    Packages that use CompareTagBase
    org.apache.struts.taglib.logic The "struts-logic" 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. 
    org.apache.struts.taglib.nested.logic The nested html tags extend the org.apache.struts.taglib.logic tags to allow them to relate to each other in a nested nature. 
     

    Uses of CompareTagBase in org.apache.struts.taglib.logic
     

    Subclasses of CompareTagBase in org.apache.struts.taglib.logic
     class EqualTag
              Evaluate the nested body content of this tag if the specified variable and value are equal.
     class GreaterEqualTag
              Evaluate the nested body content of this tag if the specified variable is greater than or equal to the specified value.
     class GreaterThanTag
              Evaluate the nested body content of this tag if the specified variable is greater than the specified value.
     class LessEqualTag
              Evaluate the nested body content of this tag if the specified variable is less than or equal to the specified value.
     class LessThanTag
              Evaluate the nested body content of this tag if the specified variable is less than the specified value.
     class NotEqualTag
              Evaluate the nested body content of this tag if the specified variable and value are not equal.
     

    Uses of CompareTagBase in org.apache.struts.taglib.nested.logic
     

    Subclasses of CompareTagBase in org.apache.struts.taglib.nested.logic
     class NestedEqualTag
              NestedEqualTag.
     class NestedGreaterEqualTag
              NestedGreaterEqualTag.
     class NestedGreaterThanTag
              NestedGreaterThanTag.
     class NestedLessEqualTag
              NestedLessEqualTag.
     class NestedLessThanTag
              NestedLessThanTag.
     class NestedNotEqualTag
              NestedNotEqualTag.
     



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015010423140533011313 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/class-use/ConditionalTagBase.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/class-use/ConditionalTagBase.h0000644000175000017500000005013210404045234033450 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.logic.ConditionalTagBase (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.logic.ConditionalTagBase

    Packages that use ConditionalTagBase
    org.apache.struts.taglib.logic The "struts-logic" 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. 
    org.apache.struts.taglib.nested.logic The nested html tags extend the org.apache.struts.taglib.logic tags to allow them to relate to each other in a nested nature. 
     

    Uses of ConditionalTagBase in org.apache.struts.taglib.logic
     

    Subclasses of ConditionalTagBase in org.apache.struts.taglib.logic
     class CompareTagBase
              Abstract base class for comparison tags.
     class EmptyTag
              Evalute the nested body content of this tag if the specified value is empty for this request.
     class EqualTag
              Evaluate the nested body content of this tag if the specified variable and value are equal.
     class GreaterEqualTag
              Evaluate the nested body content of this tag if the specified variable is greater than or equal to the specified value.
     class GreaterThanTag
              Evaluate the nested body content of this tag if the specified variable is greater than the specified value.
     class LessEqualTag
              Evaluate the nested body content of this tag if the specified variable is less than or equal to the specified value.
     class LessThanTag
              Evaluate the nested body content of this tag if the specified variable is less than the specified value.
     class MatchTag
              Evalute the nested body content of this tag if the specified value is a substring of the specified variable.
     class MessagesNotPresentTag
              Evalute the nested body content of this tag if the specified value is not present for this request.
     class MessagesPresentTag
              Evalute to true if an ActionMessages class or a class that can be converted to an ActionMessages class is in request scope under the specified key and there is at least one message in the class or for the property specified.
     class NotEmptyTag
              Evalute the nested body content of this tag if the specified value is not empty for this request.
     class NotEqualTag
              Evaluate the nested body content of this tag if the specified variable and value are not equal.
     class NotMatchTag
              Evalute the nested body content of this tag if the specified value is not a substring of the specified variable.
     class NotPresentTag
              Evalute the nested body content of this tag if the specified value is not present for this request.
     class PresentTag
              Evalute the nested body content of this tag if the specified value is present for this request.
     

    Uses of ConditionalTagBase in org.apache.struts.taglib.nested.logic
     

    Subclasses of ConditionalTagBase in org.apache.struts.taglib.nested.logic
     class NestedEmptyTag
              NestedEmptyTag.
     class NestedEqualTag
              NestedEqualTag.
     class NestedGreaterEqualTag
              NestedGreaterEqualTag.
     class NestedGreaterThanTag
              NestedGreaterThanTag.
     class NestedLessEqualTag
              NestedLessEqualTag.
     class NestedLessThanTag
              NestedLessThanTag.
     class NestedMatchTag
              NestedMatchTag.
     class NestedMessagesNotPresentTag
              NestedMessagesNotPresentTag.
     class NestedMessagesPresentTag
              NestedMessagesPresentTag.
     class NestedNotEmptyTag
              NestedNotEmptyTag.
     class NestedNotEqualTag
              NestedNotEqualTag.
     class NestedNotMatchTag
              NestedNotMatchTag.
     class NestedNotPresentTag
              NestedNotPresentTag.
     class NestedPresentTag
              NestedPresentTag.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/class-use/EmptyTag.html0000644000175000017500000002231310404045244032226 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.logic.EmptyTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.logic.EmptyTag

    Packages that use EmptyTag
    org.apache.struts.taglib.logic The "struts-logic" 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. 
    org.apache.struts.taglib.nested.logic The nested html tags extend the org.apache.struts.taglib.logic tags to allow them to relate to each other in a nested nature. 
     

    Uses of EmptyTag in org.apache.struts.taglib.logic
     

    Subclasses of EmptyTag in org.apache.struts.taglib.logic
     class NotEmptyTag
              Evalute the nested body content of this tag if the specified value is not empty for this request.
     

    Uses of EmptyTag in org.apache.struts.taglib.nested.logic
     

    Subclasses of EmptyTag in org.apache.struts.taglib.nested.logic
     class NestedEmptyTag
              NestedEmptyTag.
     class NestedNotEmptyTag
              NestedNotEmptyTag.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/class-use/EqualTag.html0000644000175000017500000001630710404045204032201 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.logic.EqualTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.logic.EqualTag

    Packages that use EqualTag
    org.apache.struts.taglib.nested.logic The nested html tags extend the org.apache.struts.taglib.logic tags to allow them to relate to each other in a nested nature. 
     

    Uses of EqualTag in org.apache.struts.taglib.nested.logic
     

    Subclasses of EqualTag in org.apache.struts.taglib.nested.logic
     class NestedEqualTag
              NestedEqualTag.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/class-use/ForwardTag.html0000644000175000017500000001270110404045172032534 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.logic.ForwardTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.logic.ForwardTag

    No usage of org.apache.struts.taglib.logic.ForwardTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000014510423140533011317 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/class-use/GreaterEqualTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/class-use/GreaterEqualTag.html0000644000175000017500000001646710404045236033527 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.logic.GreaterEqualTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.logic.GreaterEqualTag

    Packages that use GreaterEqualTag
    org.apache.struts.taglib.nested.logic The nested html tags extend the org.apache.struts.taglib.logic tags to allow them to relate to each other in a nested nature. 
     

    Uses of GreaterEqualTag in org.apache.struts.taglib.nested.logic
     

    Subclasses of GreaterEqualTag in org.apache.struts.taglib.nested.logic
     class NestedGreaterEqualTag
              NestedGreaterEqualTag.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/class-use/GreaterThanTag.html0000644000175000017500000001644710404045250033344 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.logic.GreaterThanTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.logic.GreaterThanTag

    Packages that use GreaterThanTag
    org.apache.struts.taglib.nested.logic The nested html tags extend the org.apache.struts.taglib.logic tags to allow them to relate to each other in a nested nature. 
     

    Uses of GreaterThanTag in org.apache.struts.taglib.nested.logic
     

    Subclasses of GreaterThanTag in org.apache.struts.taglib.nested.logic
     class NestedGreaterThanTag
              NestedGreaterThanTag.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/class-use/IterateTag.html0000644000175000017500000001634710404045172032537 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.logic.IterateTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.logic.IterateTag

    Packages that use IterateTag
    org.apache.struts.taglib.nested.logic The nested html tags extend the org.apache.struts.taglib.logic tags to allow them to relate to each other in a nested nature. 
     

    Uses of IterateTag in org.apache.struts.taglib.nested.logic
     

    Subclasses of IterateTag in org.apache.struts.taglib.nested.logic
     class NestedIterateTag
              NestedIterateTag.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/class-use/IterateTei.html0000644000175000017500000002214410404045232032532 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.logic.IterateTei (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.logic.IterateTei

    Packages that use IterateTei
    org.apache.struts.taglib.nested.bean The nested bean tags extend the org.apache.struts.taglib.bean tags to allow them to relate to each other in a nested nature. 
    org.apache.struts.taglib.nested.logic The nested html tags extend the org.apache.struts.taglib.logic tags to allow them to relate to each other in a nested nature. 
     

    Uses of IterateTei in org.apache.struts.taglib.nested.bean
     

    Subclasses of IterateTei in org.apache.struts.taglib.nested.bean
     class NestedDefineTei
              NestedDefineTei to make sure that the implied setting of the name property of a nested tag is properly handed in the casting of the defined object.
     

    Uses of IterateTei in org.apache.struts.taglib.nested.logic
     

    Subclasses of IterateTei in org.apache.struts.taglib.nested.logic
     class NestedIterateTei
              NestedIterateTei Extending the original tag's tei class, so that we can make the "id" attribute optional, so that those who want to script can add it if they need it otherwise we can maintain the nice lean tag markup.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/class-use/LessEqualTag.html0000644000175000017500000001640710404045232033032 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.logic.LessEqualTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.logic.LessEqualTag

    Packages that use LessEqualTag
    org.apache.struts.taglib.nested.logic The nested html tags extend the org.apache.struts.taglib.logic tags to allow them to relate to each other in a nested nature. 
     

    Uses of LessEqualTag in org.apache.struts.taglib.nested.logic
     

    Subclasses of LessEqualTag in org.apache.struts.taglib.nested.logic
     class NestedLessEqualTag
              NestedLessEqualTag.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/class-use/LessThanTag.html0000644000175000017500000001636710404045234032664 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.logic.LessThanTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.logic.LessThanTag

    Packages that use LessThanTag
    org.apache.struts.taglib.nested.logic The nested html tags extend the org.apache.struts.taglib.logic tags to allow them to relate to each other in a nested nature. 
     

    Uses of LessThanTag in org.apache.struts.taglib.nested.logic
     

    Subclasses of LessThanTag in org.apache.struts.taglib.nested.logic
     class NestedLessThanTag
              NestedLessThanTag.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/class-use/MatchTag.html0000644000175000017500000002233210404045214032162 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.logic.MatchTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.logic.MatchTag

    Packages that use MatchTag
    org.apache.struts.taglib.logic The "struts-logic" 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. 
    org.apache.struts.taglib.nested.logic The nested html tags extend the org.apache.struts.taglib.logic tags to allow them to relate to each other in a nested nature. 
     

    Uses of MatchTag in org.apache.struts.taglib.logic
     

    Subclasses of MatchTag in org.apache.struts.taglib.logic
     class NotMatchTag
              Evalute the nested body content of this tag if the specified value is not a substring of the specified variable.
     

    Uses of MatchTag in org.apache.struts.taglib.nested.logic
     

    Subclasses of MatchTag in org.apache.struts.taglib.nested.logic
     class NestedMatchTag
              NestedMatchTag.
     class NestedNotMatchTag
              NestedNotMatchTag.
     



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015310423140533011316 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/class-use/MessagesNotPresentTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/class-use/MessagesNotPresentTa0000644000175000017500000001662710404045234033621 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.logic.MessagesNotPresentTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.logic.MessagesNotPresentTag

    Packages that use MessagesNotPresentTag
    org.apache.struts.taglib.nested.logic The nested html tags extend the org.apache.struts.taglib.logic tags to allow them to relate to each other in a nested nature. 
     

    Uses of MessagesNotPresentTag in org.apache.struts.taglib.nested.logic
     

    Subclasses of MessagesNotPresentTag in org.apache.struts.taglib.nested.logic
     class NestedMessagesNotPresentTag
              NestedMessagesNotPresentTag.
     



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015010423140533011313 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/class-use/MessagesPresentTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/class-use/MessagesPresentTag.h0000644000175000017500000002270710404045204033526 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.logic.MessagesPresentTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.logic.MessagesPresentTag

    Packages that use MessagesPresentTag
    org.apache.struts.taglib.logic The "struts-logic" 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. 
    org.apache.struts.taglib.nested.logic The nested html tags extend the org.apache.struts.taglib.logic tags to allow them to relate to each other in a nested nature. 
     

    Uses of MessagesPresentTag in org.apache.struts.taglib.logic
     

    Subclasses of MessagesPresentTag in org.apache.struts.taglib.logic
     class MessagesNotPresentTag
              Evalute the nested body content of this tag if the specified value is not present for this request.
     

    Uses of MessagesPresentTag in org.apache.struts.taglib.nested.logic
     

    Subclasses of MessagesPresentTag in org.apache.struts.taglib.nested.logic
     class NestedMessagesNotPresentTag
              NestedMessagesNotPresentTag.
     class NestedMessagesPresentTag
              NestedMessagesPresentTag.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/class-use/NotEmptyTag.html0000644000175000017500000001636710404045242032721 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.logic.NotEmptyTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.logic.NotEmptyTag

    Packages that use NotEmptyTag
    org.apache.struts.taglib.nested.logic The nested html tags extend the org.apache.struts.taglib.logic tags to allow them to relate to each other in a nested nature. 
     

    Uses of NotEmptyTag in org.apache.struts.taglib.nested.logic
     

    Subclasses of NotEmptyTag in org.apache.struts.taglib.nested.logic
     class NestedNotEmptyTag
              NestedNotEmptyTag.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/class-use/NotEqualTag.html0000644000175000017500000001636710404045240032670 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.logic.NotEqualTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.logic.NotEqualTag

    Packages that use NotEqualTag
    org.apache.struts.taglib.nested.logic The nested html tags extend the org.apache.struts.taglib.logic tags to allow them to relate to each other in a nested nature. 
     

    Uses of NotEqualTag in org.apache.struts.taglib.nested.logic
     

    Subclasses of NotEqualTag in org.apache.struts.taglib.nested.logic
     class NestedNotEqualTag
              NestedNotEqualTag.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/class-use/NotMatchTag.html0000644000175000017500000001636710404045174032663 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.logic.NotMatchTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.logic.NotMatchTag

    Packages that use NotMatchTag
    org.apache.struts.taglib.nested.logic The nested html tags extend the org.apache.struts.taglib.logic tags to allow them to relate to each other in a nested nature. 
     

    Uses of NotMatchTag in org.apache.struts.taglib.nested.logic
     

    Subclasses of NotMatchTag in org.apache.struts.taglib.nested.logic
     class NestedNotMatchTag
              NestedNotMatchTag.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/class-use/NotPresentTag.html0000644000175000017500000001642710404045204033236 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.logic.NotPresentTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.logic.NotPresentTag

    Packages that use NotPresentTag
    org.apache.struts.taglib.nested.logic The nested html tags extend the org.apache.struts.taglib.logic tags to allow them to relate to each other in a nested nature. 
     

    Uses of NotPresentTag in org.apache.struts.taglib.nested.logic
     

    Subclasses of NotPresentTag in org.apache.struts.taglib.nested.logic
     class NestedNotPresentTag
              NestedNotPresentTag.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/class-use/PresentTag.html0000644000175000017500000002237710404045240032556 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.logic.PresentTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.logic.PresentTag

    Packages that use PresentTag
    org.apache.struts.taglib.logic The "struts-logic" 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. 
    org.apache.struts.taglib.nested.logic The nested html tags extend the org.apache.struts.taglib.logic tags to allow them to relate to each other in a nested nature. 
     

    Uses of PresentTag in org.apache.struts.taglib.logic
     

    Subclasses of PresentTag in org.apache.struts.taglib.logic
     class NotPresentTag
              Evalute the nested body content of this tag if the specified value is not present for this request.
     

    Uses of PresentTag in org.apache.struts.taglib.nested.logic
     

    Subclasses of PresentTag in org.apache.struts.taglib.nested.logic
     class NestedNotPresentTag
              NestedNotPresentTag.
     class NestedPresentTag
              NestedPresentTag.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/class-use/RedirectTag.html0000644000175000017500000001271110404045244032672 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.logic.RedirectTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.logic.RedirectTag

    No usage of org.apache.struts.taglib.logic.RedirectTag



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/doc-files/0000755000175000017500000000000010423130300027540 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/doc-files/logicUML.gif0000644000175000017500000003443210404045212031716 0ustar arnaudarnaud00000000000000GIF87aT+÷€€€€€€€€€ÀÀÀÀÜÀ¦Êð@ ` €   À à @ @@@`@€@ @À@à@` `@```€` `À`à`€ €@€`€€€ €À€à€   @ ` €   À à À À@À`À€À ÀÀÀàÀà à@à`à€à àÀààà@ @@@`@€@ @À@à@ @ @@ @` @€ @  @À @à @@@ @@@@@`@@€@@ @@À@@à@@`@ `@@`@``@€`@ `@À`@à`@€@ €@@€@`€@€€@ €@À€@à€@ @  @@ @` @€ @  @À @à @À@ À@@À@`À@€À@ À@ÀÀ@àÀ@à@ à@@à@`à@€à@ à@Àà@àà@€ €@€`€€€ €À€à€ € €@ €` €€ €  €À €à €@€ @€@@€`@€€@€ @€À@€à@€`€ `€@`€``€€`€ `€À`€à`€€€ €€@€€`€€€€€ €€À€€à€€ €  €@ €` €€ €  €À €à €À€ À€@À€`À€€À€ À€ÀÀ€àÀ€à€ à€@à€`à€€à€ à€Àà€àà€À À@À`À€À ÀÀÀàÀ À À@ À` À€ À  ÀÀ Àà À@À @À@@À`@À€@À @ÀÀ@Àà@À`À `À@`À``À€`À `ÀÀ`Àà`À€À €À@€À`€À€€À €ÀÀ€Àà€À À  À@ À` À€ À  ÀÀ Àà ÀÀÀ ÀÀ@ÀÀ`ÀÀ€ÀÀ ÀÀÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ!ù,T+ÿ7 H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Aþ[ɲ¥Ë—0cÊœI³¦Í›8sêÜɳ§ÏŸ@ƒ J´¨Ñ£H“*]Ê´©Ó§P£JJµªÕ«X³jÝʵ«×¯`ÊK¶¬Ù³hÓª]˶­Û·pãÊK·®Ý»xóêÝË·¯ß¿€ L¸°áÈ+^̸±ãÇ#KžL¹²åË•hÞ̹³çÏ C‹Mº´éÓ¨S«^Íš4æ×°cËV `väÚ¶sëÞÍ{)îÞ‰N¼¸ñ•ÂN®¼¹óç™Ï”®•zLëY?çÜü»oèàË/ìݬæëDË딎»=Îßç¿ÃT?¾ÿ¾ýûh“Ó÷J}Mÿ6a`w- ¸zø%¨à‚dé7rñq'a„çqç’…ÝE˜á„µÁWa|²da‡Ì→¨"†/éwbg^Øž{ ’X`(²ÇàŽ<öX•ƒ×u("rCÂGä‘!Æè!ŽGºGd‰Nªˆä1*I¥‘FV9_’V"yb•R8¢—RÙ¢h¦©fQ3Âxf’Yš)ä›"r¦e–mV¸¥–`Òyå•vŠiæžoÆ ¡œdö©¨pý­éè£þwáƒ(Yç‹219¨ MNJ§¦%^êd—žNég¥ŠzŠçŸ¶jꦑÆ*kš@¢眷ò©j©O² +Ÿ£†šÅ*†¡êç­š’l¢«þªë¬ÐF‹_­[æºlª¬b9i³‚å¨Er‹èª"ª+“mfØd”¾rÊ¥´ðÆžy Z™KÞ¦œ)º(Ž Ö›ã¥ø~h*‹0º¹¯º4bÉh¿þò*ïÄG¯\åîĨS¿wêOV,òÈŽ]WÆ:kTÇ7 +TÈ$Ç,3aô}ɖ͆(Ç,þ÷"Î<Á<óÐDë%tÑ=ôÒLßÜôSJ?-õÔ_µfõÕXg­õÖ\kMõ×Å`O,á™ÅöÙh§ÍÂdÛ³ÚpÇ-·Ro¼ifÏ­÷Þ|Iµ,ûÝ÷à„î]àwþ]øâŒÏ-à¯ÆÞ(^×”Wnùå˜g®ùæW7NkÆå¢ì礗nú騧Nºç>ºl¸*[¬úì´×nûí©³Îc­»žgº_|ð Îéj¦GÙÎÄ[æfóãåú¬Œæ*Ç<ôÂ×½õ’¯è¦Íi¿ýdâ?{¢Gü®ìy7­på¿tÀÐïÃÿß¾ü¶1ЀúÇIa0Ùß=ð™Ðyÿ`lt¦±â¼m ¸ÇKÞÁÁ6¬ä ¸€ðØ#^„` %h Vð|8³‡f¶Ð’` °Ç=òQ„!¸€?ÐÀ_Üìy3™Æˆ IIî‰ëYá«bW²Ðy>qaoÄ÷ÍHá„ÿØÂÚ`kãF8F~˜|à"ô þ–=Њ¼‚]ýèG=õqåueÉß±˜Å¤ÁÐ;IØÌ;ì!…/6cÇèG?ΘF#ü0B¼/ðÒC¨ TŠ–´"uµ,Dc3^˜p¥:å,O¯ô—(mdÊáíÿ“R¤_޳\ FïPg¾¸Œa ÃÃä1ŒqÆc°ñ?t¿p‡†Å޵¤ÃfdJƒÕÒg…º»ì‡Mmbs›Ý”’7%¥#_¾ º| /A¶ÅÚÃÔL„Á~³É4†2)IÉ#< x# ­Ù•r‚æô]Ò:&=nª{]'ÂhéMxªÌAd<£R €´/‚Ôá;lØ ôSÀøg2')Éb4ó–|ÀAð;ÜÈUœ¥+!š0‰rX–‚"ä8ZT}q3¢~<å¯éÑ‘çe&åHïqFn÷Bg^*Œa™­i?lÚLi¡ÿ°ÀÜ@M0NÅfç4Ø—ö:@8%ªK‘C_:û¨/t¶ª€Ä¥Uá7¥t/‚äêî1Y{ ü+g\*ŒÎv ÆHk2Ó8g¾Q¡q½À,€Ð @¯ÕëSgÕ=ŽSI·u™ŒbKËÁv”©ßTÜT©úØÅ¾å}Q+.^òw€{lƒ‹üF$9ŒÎ£¥ýäGg«kLdö#­¤=£àºF Ñ_øC‘[§Ê’Xð îtâû0Üæì¢…•ú„JÚJuJÊh€»ä667[Íá=ìñ Ò~­ÖõŒK³ Œ²¢5™‘ìGÎxfá’ÐDm]·RUþØG¤n!h›À.Ò ¼ƒ7\Œï®Õ¬8‚„ ~TX¦U¦@!©Æ3nøã…£NÇû«”ØÄõAqŠC@ÏFÊ-yÃp„#/3™5¾,@‡¡c »´Ç15fYgZãOòÈ•t&Àÿ?yÊ=JÿŒ±'¿ã@D(N3¬LI^™Â(óŽ'\Öí £geóZk Í6:à "DÀšLÈèÝÏËeïÊdƒe—Àø:Ýr>JhI~wÌÆB½è—¦yÍ8Væ‘»ÌaÜÀt$Ÿù j°¤°Ê¤þô=í±Úr™ËG (3‡ÜæI›Ud¦õg€ÀcS÷ÑÈt³~ýrÿ@2Ä>L©‹—Þq‚Ÿ^ɲßp@·QÐkÌ÷'¹LšºúÁ`¾1™ íÍÛžÂ\ðƒx`á7h¸'å9lv#FŠÇ†ÍºgãwˆP„½74 šÆ o¸´6Æð¤WŽãXyÿfg&0ˆ?œáv]Lº[o‹W>z~ÍÆirOüù ãxßšdƒ:ýÃjün¿™¹ÖHÁÆlîZÉq¸€æ˜€nP²Šûœf@µÿ¤¸lÛãø€@>ƒJ³oåõ£}ä¾7Ó’hŒz?¬Àðpý×7X¯bvNžžŸ½ÀLÁøÚ›Òö¶—ƒ_xÝ/ PKˆ]ÎÇònI¾[š%wáUlR<ÊŽ|~š’KÆŸeè@©¼î;þç<Áš„æxïþÖƒaIH‚† €k<£“/^öë=m{ÙsìúiGw쇲ûî/Û„Þï>ºÍnýíeXT˜QÀugÉS=•˜T—Ø'1ˆ+ˆÈˆâ”¶Hî¢-,ˆQ~[ÓxX½‘WX·‡|F<Ó‡`h‘Ö¨‰«È+ˆ‹¼c‰Š8À‚…€â*5‹h, ùˆÏ‚7¼•M€øŽ^ø_$IŠŒGlAé©H±4‡ ÃTq(Šƒ"Jú%&îH„ü‚,OŽéô-IJÀˆ.e˜”:(\Õ”rX–니ƒ#˜ñó“'ÊèQo™‚Ù—ôTÙ7‹ÙX“é˜/™‘©n—¹7•ùNÿŸ){û×–èŽùwš¨™šªé5\ˆ™$e›Ùx¡éš÷E›¯ÙP·)›¶y˜³iq ¸~½4¹›pœ Æ€£©›jÙ>Èö•.ˆX?3­)€ÃIœ²¨™¹É~ yŒÜ4\bTˆ%“‘(„‹ƒ˜ÖéTv”S‡d¸ƒ©JùÒã©,ŒÈ:æyž)#° úè‡ýø^Ýé‹…Ë9‰ŽuY8ù©Ÿ>Y5üéŸìIJJ©Eçh%´(„ࢠµÕ8 ê @¡"*¡Û9’£ôdºÕ+œ’0ú”ôIž Z»9ƒhœƒ9_*’)‹bhŸî’Gâ¹ †#£´y‡h£)8<Ã\&éDC…ÅJ¥R“AXžDêšFz€ñŸc¹¤dé¤èr“Ò(Î< ¢†9¢Êi*HZ1áoª¦0ÚŸmº—qJXî7§jê‘4ŠRWJ§K”§ä§æá¦*¨/H¨ò”Y Yѹš’:©”Z©ú§¨~9{‡Š§˜ªXº£u¤©Ë•¨Ÿj‡¥jHN³‘íFª§ ”­š™´ª£Ú‡ij6ïÙ§¬j€‹é¨³Š£ʘ§Ê§3j—²Zÿ¹‰v”¬°$[•ò†LZÂZ¤pQ”Hz¬š(’ƸM銫˜«ê­¢y2©JÖŠ­kEÜÊ“¯Ø—ÑŠ™¡ù–ÆY®âžYæz­àê9íÊ®ãÁ)¯=I0|•£éНŒZ4ºû ­s±«äšŠK:’ü8¯÷:±Ðš¯ìö¯Ä:­Ñ©QY–DE°&r­{°Œ¯ÓÚg;g±–°xh²'«±)K²”©²Sf£ïв¯ÚP4›bÕÚ¯0›³´³Æ§½ù™… ´ȲH´äú³H»B»XyŠ±Ç¥´OËŠW[¥/»°0µÖy9˨6Ûµ^‹¥`ûªÛ³Uk©lÛ¶nkY«µâj³ù¶v{·x«9q+·sK· ›·€¸‚ëi{Ë·}ë·…›¸$µKF£¸Ž«sþÙ¸;¹*¶¥æG¹˜k¹‘{¹™Û¹¡¶(å¹¢k¬Tº£{º[»¹nŠº¬ y¥Ë¸­» ƒ°+»¶k§ «¹·»»±ùººË»ÀûŒ¿4¼Á[¼çG»ªk¼oÊÛêæ»Ëû¼%uUÎ ½Ô»Ÿ‡¼Õ›½ØØ¼h§½Þ›‡×‹½ß;¾†û»ÓK¾Ù+³xY¹è›¾Ó'¾íû¼ê»¾ì¿Ë;¿ô[¿ök¶ƒ[žû‹¥ð«¥ Ò¿£Àú:ÀpHç‹À”©ÀéIÀ¹ëÀÿ *‚g‹~9ÿÁÉKÁì“hލªªl‡(¦Gƒz´ÛëÁžY—D)¤+\Âìƒåo+9Â,Ì7Ô²+\è=³/ÿ(1]ª‹›*Ã1È·óÃ`šÃz³Ãî5. B@<‘ßyŸz‰ |ôI_]Y›_Ø3­èTDÌÄŽóJo³¡í"=iL‰{‚ å‹Å3ü:Ì‘²e-íÒ‹0y„dœ6Nü¤ÇÓ-`2& ,‚<=†:»,,­˜…ÙhÆçb˜¸¨Ä{L5}TòLÉô̦Zù|6ì¿¢zεûϽL£-Îø»ÐÝÏÑÏÑÐ]ѽkÑmÑíýÑ[Ò"½=Ò&U'ÒŒ¥Ò,M%ÝÒœ0½Ä1=ÓLÓ6­¿7Ó¬Ó<E m;=íÀ/mŠA½¿CíÑE¿G}¼I¾ŸÈÈ)“¢Qý2Ø~KÝÔǹ¾%¶WïtËNjeXíÔ.,ÍBœ©olÊ8Öß«Êrì0X¹J_Ù[LtŽ‘ªJÅœ¬z¬ÖÐËÖõ×ö•ˆª!—¬ËÌ•6‰ W­×CkÆxÕ×,™[ÍÃÎ’ÉÞ‚”á¬Ø«ÆËׄB¥]Ÿ°Ô’OìÊ[™,²ŒÙÊ«ÙâÉ-­Úõ Íqý‹• ¾¦½× ªÆ596€ìÙ­½É˜Û·ϳ}¿>­…?|†óÅýÂ!ÏóÍÆÜÍ{¦WܱûÒtiÖÒ}Úõ+y×MÛ<7—ÛÍÝáóÝò;Ñâ}¿? ÔåÃÁ(·5ÌÞ_-Ûémѵ ßm#ÓïrÄñÑ¢³Þ lßl|ÙùýÏgÜÉêQÝUŠVà¸æ ;øìÞZ\Χ²Ë >Í`<Öá ܤ ¾P’ؾ§¶;\¢0*ÕSš¤ŽÀÿÍÇs8)ÄÌyÊfxâä{ÂUj/"âƒ\ß,ãÚ»níÛ-¾¦ Êã§­Á®µí ­”×Niä¶Ë§rl„«ŒAÎ&e å'¬/n½1üàŒÉáZ.7íênz–€Y>æñ´¯Ëh毕æjn>,ëKÚý€pçÔ‰€ÿ—2šàx¾æÃÙ˜îD”w˜þçqãçg ªìd…nè¾üÂD}(掾;WèoNb^é1ƒè`Îç µ”ÎéMªDÊU³é¤+žà‹nçÆ¦ê«Ž&­^ÚL팩>곞=hê€y€²¾ëó¢²Õ³ž*ìd¾³À ÇpìÈNÒB ®Å^GÎþìB絿´´QíÖ~eKì¸kÜÞíÐ8Ðá~Ñù1îŽä®|îèNíº¾î¹¾íˆœê¼)ï´Þè ÑÛïøþæ [Äü^`êþïÇ~Dæët[ð¯³7ÛîßµÞðÆZí…N„:ñ/ñã¯Ô©þ¾ñк±Zò /ò%Ãð²¾–ê«ñ(/êív¸¿¥ ÿòDþ¹$oò4ò†îòtS´9¿K5¿ñ>ߌþz˜ÊŒióG$³ôÝ­ô·7ô¶.ñM[šPë =µ¤ <¯ÖEŸé1_ñ¨Øõ=ýõ¸Žó[?öWO{Rÿåi¸)Oö)möwÅô{éírßÑtöN˜÷½÷ˆ¿$Ûõ‚àm«æ»ªé·öÄ]@ÝÛ÷¸ö‡Ïèû ÷¼Žò•ÿë—¿ððøã»ùP[Ó;ùÉÏ.úïN¼ Ý´æ¯ð†þÇÑþž+ÿç89ë¢ôñÅ?~ñOà@‚ D˜PáB† >„øÀĈ-^ĘQãFŽ=~²ãD"MžIåJ–K¶„yòeLš5+’´™SçNžÿ=}¢ÄùS(È™C*,zôhR¥M!’„UêTªU­^Å:ÕéV®]yõö J±KËú${6,Sµ Ù¶…«6ë\ºuíb‹6¯Ð·{WöõÛðÞÁ ÿ,l8ñá‹§| Óqd ”N¶œ9$渜5;Lûù¯h“¡In¨u³TŒžO¿~èZ.l޲iƒ¾Ý8·ÌØ]~¼õnâ³f©Ú¢íÛÌ‹»|¾ÑyôIûNOì|:uÒŽ‹n78S¸ÄáÜš6_>ýMðÅ­»½ì[bpñó/SÄ –¼ï´QÇ®P>ÿ«®´ð¤ ðÀ5jϽ{0<°‚R©$ ãÃp¿7ÜÒ¯>4ï=è6´>ñȺ°ÂЬëªDDeLF¤îó¯ ñ2ô°GETÐCm|È!É›°ÀñN¬0C5Üñ­›r½*‰‹‘F#uüÐG ¿ÓðÉùšt2B"w3ÑEÕ Ó?ó#ñH…äÆ3/ºÒÁ;˼®Ë8¿”)0yÌ2Ï=»ÚÒL'¥Ê2Ã3Ê­44ÄCªÔ²DÅ´ðÇû=ñH/o¼´¹:_|RJ>ÿŒPHýNµ´Ôˆ2E“VÆŽc-?üð³ïS1ÇäO×W•ôõ³MmSI@ãóqP‘…•:[¹›6·jý2´0ÏœU´XÍp}3XŶ×q«s1G9Ý»6ºvi{®lÏóÛx½µé^¸%ÖZ|oú—TóöÜå †4`ÊôÉ^wÆRa· F43Š%6006£5ã=æØJ‹A^ø´‹s:M’Q¥ô.—_†9Ë•å5¹Ö™k¼™¿œéMygDc:h»üõYà¢{6é¢öYi•—†6çF¡¦zÙ•e†Úéî´þ¶Ûª›î7`®ŸþzìÈýšêc½Åºj³E{[1–ÓžmŒã&šî¶ñU•îÙÂ{-¿Ö»n¤¿{R¶Ï{pÆÏìqćíÉ/Ücm/—8rË9Wñ½ïd9ЋE8ì%'›sÖ›¢êôº7ŽÄ×[wýjÙ›Vóö|}oôÑ~÷ŠÅ%²øàOWÞ,ãu—µùŽŸ—ž¯ç¡'¾zx¯÷UlîAÖ¾¥ð·ÿ>áèËO|ÏñÉ/ýšÜG?_Òáþ³íG-~¾I×sîñçMÿ>§%ÖL€ÜŒÿh;úï{è›M°r ”`m,x© ƦƒÝÙàÕ³Á3‰^$ M0–pA+„ !è®&¯5BÃau¸CÓ-0„6¬¡–F¸4jÐq®UÑŠ!Ã"¦L“: ¨«Œfœ•3w6*~ñ…CD £v¯}ýI6^„cS3Æ&L9,t Ýh›µuJY:¡cÃÀø5¦Í;r¼¢¹ì˜Ç¡ò‹„\¤!™….&qÒ`‘2‘'“…¤P,E¥äT‹ fI@®1jšDR ½f¾4.ÑÂä,%µËeiRRŽZR PtÈ(]ÈúåºJÅJš2Y¥œÐ0Ǹ¦ïЮvz¹ÿ¥ÈÊóÇ^~)]`ü¥›¨9LNò*Xæì2Ó -f2RŠº|–/ŸåÍUyÊQ‘DL6µY/x®sGèÒŽÂ)!bÑ‘œö´[9ç©Nâ‰N Ã &¤’iÏ~Mt–ùÔg¬ø¶úDTNò4åˆçµÞ3¡÷–,9èÐ~F´w¿jÔ›,ª:lf”†ÆÉ$@­fÈ`ŽÊSm1ã'nùT¥ }'G…:ª„ÉU…j£MoJI õHE¨Œ¦°PtÕO¦ô\ú)—®÷PPu)IDkZcÂ~š ¤b*¬ŒŠÏšJ5b8µM‡¬¸µgÆ 9µZ"Q–ë“n²æ5c×"1¨’õJ"·ûº¿Φ Qe,îZ‰2Š%±´TŠ_ŸXYÈ9Ì–™Õl-ÕæÙY¡ó}=ŒcgUÛµ¶|vl¢ý!^WK¹0öQ‘%xèÇŽ¢¶~ÒQkr•‹VÖ¶U±ù›‘pÙÊFÌ×€ÍñíJKM%ѧ»¢$eWÃUNzÕ«îrÕ+ÛÅZ÷¸Ã-‚¶ûS1«I=hQY•¦®Ó|ñÅÍ ¬Âé x›°¥e\wZ§j‚U¤¬’(ŸkàšÂÿú+àÚ:—S?¡4œÆdç8ç9(6Ô¬Hí{Ý;]?—²JÓ~eìÓ¾-4I‡ŒpŠu¬>È’vÅ´Uq_\;Wɘž±´JGéßT™tÁ E±^üã‘YÈ>ãxÃÊ«­ö¬ªÜÕ`™æ±.2ÊRž"•§ Ø ’¬]¶J¤"‡læ5«™J×=ñœÅ'™+/§‘tN³K72^8Œ’É.{ýWÔ}‚¾3lb·ãFcY»N 4¤óÁ1cï|–ž´•5-=ñn½§V/߸™ÚQw¦Ô­}:©SRƹϮll«5öjßèÆým0,éz9ú¼îõX¦YäM*Ó¹“–®w}×ÜÔÙ1¦u$ý>jIã›ÔÔ¶`5ãùºxrÅöv^8]CqËRØfüÐnš;„›ºNŸ°mív›ÞµE¶ ÿéà‰7¨’¤ž¿ÿ]Z{'{”À¥3íbºí=G{á g5úâ=fà(›ËAö~qÞ.OÞðÁoY[uãç;áS%yqMþ@àÐiIé‚aÍ„µEæ1?mÃû=ÚÒJš#½2Å!ós Ã.à×›aß:®oöÏâMúÌÇ™ÍaúŽJ—óÓ±ž×Œ3ë±nsžŸ 6¦ý±B—ݶgæôü_óv»óÊ~îßÌ=äÚûFs×÷·ÃØT4¥±ãÈ‘¾®Z?"âœÚÞmw<"ouÉ'ýÐ ²üç÷žù˜¬Û쎽ÚÍí÷› ˜ôýnuËzÕSÚƒG»úëç(v(¢þcãF{åÿ–{ÝË÷Y[üï¿|#ú|óÅçöñqßüÔ§=ø# }â} ýf>ßmÛ9ûå«\7Ÿû|–~ëë¸Ùë·?ì sýù£ox©µGîâWþ¾Bù—>ýå§ Ù¿µ3˳°þó¿ÿ»›é;ö£½Ô³éA@è‚<„@@,À»Ãç¼ $ ó3Ì@ì³4 ô@Œ½?{? ,ÁÚ“¯e2¿¼@t³+É¥ÔÁä¸0þ£ÁRÀOËÁsÁü“ óÁ¬ÁGÓœy™½"4Âr¡TÂÎÛ¾ « ßÛA,£)Á*|B›JÑ-ÜBD³‘$C3ÃÂ0„Â(¤À7úÂ5¼ÂJKŽäÂ>œÃ}¢¿@DD6ËC=ŒA+t?4´@dĵKƒD8<äŸù£>N¼C”Á»EÄE4ÈA5æÄdÄÄY§ctF[?KF(k±’# elDZÌF4«³%ÔÅi$Æb, 噌)±?oÌÅo”ERGj¬ÆÈÚ´TÜCIÜFÛëÆhÆv´Ç*øó€FYµm¬’sü@m\žûG, ÈeœGIÓÇQijæb´¯ë&W G†ÄFytGE¡:[£ŠdF‹TLJ\½L“ÈWÂÇ}T;|ÔL»šã0•$œºË F’g’(¸ò®óŠ–/[%ŒüE_$JNñ5dâ*&“µ^IÊ/•»µäG’ ¹{”¹|ë_é([²™R,‚iªIt4ÊÊQ°N#^J²®\¨¨ÌH“¤JnœÊq|¨C¦µTJ©«(æsÉ^ÜË9F/)˺T²»|0¾ªÉ|GV´,;•#“TzÌ»HmlË>Ô00é¯ÿ2²—Ú9C:)\ÁiTÌ~­ÏDK¤¨Ôé8ЈtJT‰L»1+)g™µ,ÊA|ËÑ”Ëíâ©›,¹âJmKD¾DÇË9Pi9­(®´Ík"CiÿlGÞ<ÉØ*1_úMÓÊ0‹É°,HÜ4/(Ù*P*ÏPᯬ:§ ÊÃ|Åé¼E§[G-üLí£Ç¡4DŠK˜*Nv|Hê¬ÎÜ¡ú„K‘œÏH,Ðï ÏcrÏ6$IµÆ"ôO½OW„ö“ödÍ÷¼Éø”ÏicKü4ΕIêêPÕG…G¹QEÐïdÑÕÍÿÑÐzFzQ©4PÌÑý¬¾tÈ·ÜÑx<·lPU?›¼ÄÍ$MR\RÄlE5ì=ôëOð´ÀÐE'>(MQ%ÝR­Òu>,ÍR-ÕéÄE/¾X,D06-S:õ44MS5…?;ÿmR3SUŒS9M*5. 5Ô«@‘ãÅ@Ô=eRÆb¦wÉ>ŒÒ0­T$TÔŠÔD½ÒEeÔFÅÔ×:ÔQ»?„Ó'Õ¼SÅS,ôT?e»=â.ë´»=B£z¤Ñ1UÕO]UÔUW}SÑëÈ"58¥´Õ•šÝÔ\uíá†Å¤ù5aì5`Æa+Ú¿êâá¾á¢ κ!&âê5b .a>á(žà&>bGb%Æbñ¥â ¼Û ¤+®Ä-–!’]b)6ãÆã Rº·¡a™Óâ4Vcmã,¦c4†ãþYã-ã6Õ;v8ŒP>nÑ0öãzà­@Ö¨Bưä/~ä)fÿäFÎÝ$NdEžÁI†ºJ†ä9†âLÖä­äÞtcKåPfž^àU5ïÅ`D>eT†¶:fbˆ¤å‰aeg,_Yæ¼[&ä|…e¡ôOKååÃÛã"žÌ]ŽØü½ÕbvV_ö¤lIHœYH†Ä›\äñuæg>c¤ìQ¨­:ê¼kþæÍm­pÈi^fæÝæN}<ª+[“®¥í:=¶eÎÚ Õ׸Ñvf)†g.1צ<¥»äI­4±ŒÅXjdœûcL »2TfÖ£hð ^ÿ2ËHñË¡JK°è\Lü»hSJWƒ¯uKÅm߉¦èÀÍ«U3Ü6Ù˜bÒØ${ZÔŒZï\8^Žè\ÜJqæè³ôhöWŽué—ŽÝw~I×%Ú›½¬¯1—õJ{œð“ioM]L¨>–ªŽÿVj~VЀ¶¹®^iµÕè£NY£fí^’j‚¢5Ó±©ÎX°Îà±®h€Æ[× Nyâ—ßô¦àÔÜ£\Rþ=³Fêá<ê·ú^ò,ièåkžd:é¢M\–½ªë$ÏQŽv%^™8„g´t)®Ü‹}͹êiÚ­ìÎE`{¦>_h–gí$èÎŽ¦ÏNÏÌ.+t¾±ŽíuŽàNnIÛ.ÞãÆgb¦OÀÕÓâ>SÜVå ­Ú·6eWÆßÙSîó•nîæ_^næŽç#´nžàï®]ê¶ÅdïòŽKmVo+®¤\¶o¨R7J`ï龤kÄìû^¯Wîoúþo§ä‡×GpSðëÍáoKð×aÏo§s3ï1tE¼r·4ôCÏfB/têet;æâˆ\ôHçÓôT¶ôX7J¯ôMßoLÏô^juffñw„ôRu9wÄ@WõU¿óVoóWÒ:·ÊY¦õaîôZŸõ\¯Qʰ¡óuO§q^ÿôaõ]ɘEö_Wvcßâ®li'p6OõfWt`7uÙÃöl¯¶fýçnGÑD‡vM÷qwôr'iõssmÏTngw"O÷eOªx—wv»t˜¶w ŸwuÇõ}¿prwEøŸt_µì‚w5[§w‚WøÒøÇµ‡Wl|çô‰§xL~öG]êŒäbGøðõøw÷‹çæ‘'ùoyÙFyä>xIgÿö–Ïn•Ï÷Ž—ù˶øFÿ÷›æ7ù¾.uzT[yo˜¡_®m¦v–õŸ—x]¿ã¥?XT¯yªßö–úf6zŽwö§cpÙÝO,3­¦•j¾ç[çú¦/¸±{¶¿>³×î&~$ºvÞ`mnG*²†q˜·ÓÏ%ºÏ$»yÛ³OcgÂÌ9ÒÉ%ão‰~w¨GA‡eLXz·³}í»aÃïÛó:iÑÖ|Öuë”:×Ýž5{•ñ"«Êß{ÿ9“¥Z”=|ÐÏlëÌá½m#ÖÉ Æ}å ÛfXÌÅÌüê¡.ÎËÆw|&Z¾eÛÇ&êÖÖÛñàßNNàt-¤¶ª›¦Y¦bqm²’)È§Ž…ëÔçû»êZ¶zš¨ÞièÞâÛßgIê²Ì¬ë¾Íé¶¶6 ~#[øÿñˆ,hð „ 2d àÄ>Œ8Ñâ@Œÿ4è¨q£Á‹!z¤˜ñàĆ*W²léò%̘2gÒÿ¬iSâH„"9ê)’bÇ“(M ’èÏœDC.]úQ¨ÓŒF‡Þ¬jµçÕ¬ZníÚ5åQ¬R£†ÝiògR¨`S&-IÕ+ܸrçÒ­Ûr-N BÍň–éY¤€ÿV|[¶oTÂE ^Ö.䦑'«|Lù²dËP÷r.¬7°`ψ333êÔªWoÕrªE£nÝn„í±âm©±w+¥”6P¶²§ÖÆm¼vQâ·/Í®ëç‘£K‡¾xYÛÅ÷þÎm›·oåÞs®nþÿ[Lvr@§µí`€Ë)W–ñîu)ÙlÐ@Ý4st׿ 6Lg|œÐFt ãq°„ëòàeF84ë… „&]|¡¾P˜BÎO4„!{Ö¯–ý+‡>,— _Bwý°ˆÞº“(&’)±‰H4"£(Å)R±ŠV¼"³¨Å-r±‹^ü"Ã(Æ1’±Œf<#Ó¨Æ5²±n|#ã(:Ç9Ò±Žv¼#ó¨Ç=ò±~ü# )ÈA²†<$"©ÈE2²‘Ž|$$#)ÉIR²’–¼$&3©ÉMr3²“žü$(C)ÊQ’²”¦<%*S©ÊU²²•®|%,c)ËYÒ²–¶¼%.s©Ë]ò²—¾ü%0ƒÿ)Ìa³˜Æ<&2“™%'2³™Î|&4á¥Ì4ñdÕœ&Ê®Y±E³›Þü&8ñ•Imv›R$gk¸u(tACIÉ>ö•ýײçñ972í&´[ág¨ò”ë1Пü”>£•P,–Ï=LšAË“Ÿõ H…Vy¨~Ø®!¶s9•‰§ ºµë]²¡ÜOwPê;ðím<êK©D ׵ᰦtçí€3ÏŽP§£ËrZš¶ ž§5ÏBʸErGmŠk$D~¨’&EŽâÔw»ÆX®-v[ßgü29Æd51ðS Yb³ÕæÎli+áŽó7sFMˆUíç«öwט½òõ© Œ¤Yæ³ÌÝ/k?M+=7Ðâ©-­Ä£Þû`WV¥¹}“½,eéJBªñôj0% K3H@ f(´A%ªO#x¶¦žŸÈ°¦Ó¡Ú®zu…äUûâ›»Y4 ö“ìó²£–˜Ž•ª#ûçWÛº¸µU–¬ÝsŸâx—Tïí³¬“u.o‡‹?ß½ŒªÐ}.pçÞ~)Å=©r{ÿ§ÉÜj4^Îb}rVä&שN¡›|Õ;Þ÷Ƨ-ø­/fõ‡Ñû–¾ø+¯=ÊVÝ^Žså}t[¼Ì†7{[M/õ&<Ý*²7Ãflr-¼]êrÄ»§5qûôUÄZ oÚå.W»c^/¦±> îIïçΨ6¿8S¬e×UçO{Âkà‚këa ßö‘aó(T-øR¶Ù6´ÃqìNü›X(ß´‚æÝ±xŽû×.®ÉI_–Q«¥:Ç)vïpá;½èéÈØ]n[ÿ˵Í>¸Å=ñ*† Yâ–£;è;ÿjœ59BM=t]ÛKçëJ¯°tñ`gŒgüÚøÒ~ùYtI£¯A“Z»n¬¡3Šh’n F½u —¦ûäй¶³,ÝZ)èY,ÓV¸eþ5®a:Ö‘nÙ¥.õ2Ù„­ì[ŸºÐòŒÑØDú9AGÚÓ¶6Q‰=Y§šÀ«þ\£!ªè„­×ŒÜÞÝû nBçÕ¯“Ù0á}BÍnÚss5µ¯bTéÈûœáü7À.ð'Ñ»ˆýÆæ¥·Ńc¬ 8Ä#.q0!݉R¯üÞyZQ¾„ß|}>¿Aу>=¤çßéKTÍ«žU©ßë[¯ÖËþT±?ÞíkOn±ë¾V¹gÝï{ÿnÚ ßSÁÜñ‹_—ä7ŽùÊ—‹óßJýç{eúO³>õµ‚ý¦m?û%¾÷)Õýä…ßöà/£ÆŸ2õ£¿hço¿¢ØoMøJþ䣿ñßÿtéÿ²¿ÂùŸ¥`9 àöSŸæ >\VÊ.Ì6`ËíœNJúOJÊÌV`ÆP¦† ›|`¾˜`¢àÆ‘`¢¨à¼±` Ž ¢‰ žK îß fÝ J’KIÂß~K¢ß"Ýò  ¡£$¡"I¢]ÊJ]îÐ'Maöa!ÞU¡­\* ~áh¡Û‰á¡Ê™¡ aÜ©!È…G¡Ò Æa‰°á³Øaïáa²èaíñaæÑa Î! ¶ï "›øá° ¢ê)âàâ! ¢#6 $Fâ¸x!%Z]!^âf¢&:á$ÿvâ|Lœ4y(~ (2š¯Ä›$žb·\ß­"+òâ-,Æb¢mÈ£DÎÍœÓu`[HqŽ1"'¾“«å…qɢݭ S9˜ÅØ"2Öܸ­Üc-þÕ„^­œ3RV$lÙ”¶ÍÎ×–*F±ñÍg% ÊÅb‡åÙy-ÙŠÕ›åÐ;fØ‘ 7ÞÐ6òˆ.ö™‚ ZÍÕ Ø[tUƥΎÖ<Ýœ3Þc)É…áN<Ö£ãš>ב-…õ#Ž@ãD†—tdAQ#ãi¤©¥×5þDÚ¢DzÚ’FZ,ØÒ%#Ÿ†ŽudmNÆEcDö¢Z›BžØ×PJ1JVâÆ e—›®…cgaLd?&”E-¥Å¥$Hfãì1VF^5ne;vÔ€\XŠ¥»…^92%Z¤ZzÝY¢e)¾K¼Íå¼´%^æ¥^î%_ö¥_þ%`¦`f;libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/CompareTagBase.html0000644000175000017500000006046710404045234031425 0ustar arnaudarnaud00000000000000 CompareTagBase (Apache Struts API Documentation)

    org.apache.struts.taglib.logic
    Class CompareTagBase

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.logic.ConditionalTagBase
                  |
                  +--org.apache.struts.taglib.logic.CompareTagBase
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    EqualTag, GreaterEqualTag, GreaterThanTag, LessEqualTag, LessThanTag, NotEqualTag

    public abstract class CompareTagBase
    extends ConditionalTagBase

    Abstract base class for comparison tags. Concrete subclasses need only define values for desired1 and desired2.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
    protected static int DOUBLE_COMPARE
              We will do a double/float comparison.
    protected static int LONG_COMPARE
              We will do a long/int comparison.
    protected static MessageResources messages
              The message resources for this package.
    protected static int STRING_COMPARE
              We will do a String comparison.
     java.lang.String value
              The value to which the variable specified by other attributes of this tag will be compared.
     
    Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    cookie, header, name, parameter, property, role, scope, user
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    CompareTagBase()
               
     
    Method Summary
    protected abstract  boolean condition()
              Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
    protected  boolean condition(int desired1, int desired2)
              Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
     java.lang.String getValue()
               
     void release()
              Release all allocated resources.
     void setValue(java.lang.String value)
               
     
    Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    doEndTag, doStartTag, getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    DOUBLE_COMPARE

    protected static final int DOUBLE_COMPARE
    We will do a double/float comparison.

    See Also:
    Constant Field Values

    LONG_COMPARE

    protected static final int LONG_COMPARE
    We will do a long/int comparison.

    See Also:
    Constant Field Values

    STRING_COMPARE

    protected static final int STRING_COMPARE
    We will do a String comparison.

    See Also:
    Constant Field Values

    messages

    protected static MessageResources messages
    The message resources for this package.


    value

    public java.lang.String value
    The value to which the variable specified by other attributes of this tag will be compared.

    Constructor Detail

    CompareTagBase

    public CompareTagBase()
    Method Detail

    getValue

    public java.lang.String getValue()

    setValue

    public void setValue(java.lang.String value)

    release

    public void release()
    Release all allocated resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class ConditionalTagBase

    condition

    protected abstract boolean condition()
                                  throws javax.servlet.jsp.JspException
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped. This method must be implemented by concrete subclasses.

    Specified by:
    condition in class ConditionalTagBase
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception occurs

    condition

    protected boolean condition(int desired1,
                                int desired2)
                         throws javax.servlet.jsp.JspException
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped. This method must be implemented by concrete subclasses.

    Parameters:
    desired1 - First desired value for a true result (-1, 0, +1)
    desired2 - Second desired value for a true result (-1, 0, +1)
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception occurs


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/ConditionalTagBase.html0000644000175000017500000007507610404045250032302 0ustar arnaudarnaud00000000000000 ConditionalTagBase (Apache Struts API Documentation)

    org.apache.struts.taglib.logic
    Class ConditionalTagBase

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.logic.ConditionalTagBase
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    CompareTagBase, EmptyTag, MatchTag, MessagesPresentTag, PresentTag

    public abstract class ConditionalTagBase
    extends javax.servlet.jsp.tagext.TagSupport

    Abstract base class for the various conditional evaluation tags.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String cookie
              The name of the cookie to be used as a variable.
    protected  java.lang.String header
              The name of the HTTP request header to be used as a variable.
    protected static MessageResources messages
              The message resources for this package.
    protected  java.lang.String name
              The name of the JSP bean to be used as a variable (if property is not specified), or whose property is to be accessed (if property is specified).
    protected  java.lang.String parameter
              The name of the HTTP request parameter to be used as a variable.
    protected  java.lang.String property
              The name of the bean property to be used as a variable.
    protected  java.lang.String role
              The name of the security role to be checked for.
    protected  java.lang.String scope
              The scope to search for the bean named by the name property, or "any scope" if null.
    protected  java.lang.String user
              The user principal name to be checked for.
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    ConditionalTagBase()
               
     
    Method Summary
    protected abstract  boolean condition()
              Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
     int doEndTag()
              Evaluate the remainder of the current page normally.
     int doStartTag()
              Perform the test required for this particular tag, and either evaluate or skip the body of this tag.
     java.lang.String getCookie()
               
     java.lang.String getHeader()
               
     java.lang.String getName()
               
     java.lang.String getParameter()
               
     java.lang.String getProperty()
               
     java.lang.String getRole()
               
     java.lang.String getScope()
               
     java.lang.String getUser()
               
     void release()
              Release all allocated resources.
     void setCookie(java.lang.String cookie)
               
     void setHeader(java.lang.String header)
               
     void setName(java.lang.String name)
               
     void setParameter(java.lang.String parameter)
               
     void setProperty(java.lang.String property)
               
     void setRole(java.lang.String role)
               
     void setScope(java.lang.String scope)
               
     void setUser(java.lang.String user)
               
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    cookie

    protected java.lang.String cookie
    The name of the cookie to be used as a variable.


    header

    protected java.lang.String header
    The name of the HTTP request header to be used as a variable.


    messages

    protected static MessageResources messages
    The message resources for this package.


    name

    protected java.lang.String name
    The name of the JSP bean to be used as a variable (if property is not specified), or whose property is to be accessed (if property is specified).


    parameter

    protected java.lang.String parameter
    The name of the HTTP request parameter to be used as a variable.


    property

    protected java.lang.String property
    The name of the bean property to be used as a variable.


    role

    protected java.lang.String role
    The name of the security role to be checked for.


    scope

    protected java.lang.String scope
    The scope to search for the bean named by the name property, or "any scope" if null.


    user

    protected java.lang.String user
    The user principal name to be checked for.

    Constructor Detail

    ConditionalTagBase

    public ConditionalTagBase()
    Method Detail

    getCookie

    public java.lang.String getCookie()

    setCookie

    public void setCookie(java.lang.String cookie)

    getHeader

    public java.lang.String getHeader()

    setHeader

    public void setHeader(java.lang.String header)

    getName

    public java.lang.String getName()

    setName

    public void setName(java.lang.String name)

    getParameter

    public java.lang.String getParameter()

    setParameter

    public void setParameter(java.lang.String parameter)

    getProperty

    public java.lang.String getProperty()

    setProperty

    public void setProperty(java.lang.String property)

    getRole

    public java.lang.String getRole()

    setRole

    public void setRole(java.lang.String role)

    getScope

    public java.lang.String getScope()

    setScope

    public void setScope(java.lang.String scope)

    getUser

    public java.lang.String getUser()

    setUser

    public void setUser(java.lang.String user)

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Perform the test required for this particular tag, and either evaluate or skip the body of this tag.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.TagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception occurs

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Evaluate the remainder of the current page normally.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.TagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception occurs

    release

    public void release()
    Release all allocated resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class javax.servlet.jsp.tagext.TagSupport

    condition

    protected abstract boolean condition()
                                  throws javax.servlet.jsp.JspException
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped. This method must be implemented by concrete subclasses.

    Throws:
    javax.servlet.jsp.JspException - if a JSP exception occurs


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/EmptyTag.html0000644000175000017500000004434110404045214030331 0ustar arnaudarnaud00000000000000 EmptyTag (Apache Struts API Documentation)

    org.apache.struts.taglib.logic
    Class EmptyTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.logic.ConditionalTagBase
                  |
                  +--org.apache.struts.taglib.logic.EmptyTag
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    NestedEmptyTag, NotEmptyTag

    public class EmptyTag
    extends ConditionalTagBase

    Evalute the nested body content of this tag if the specified value is empty for this request.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Martin Cooper, David Graham
    See Also:
    Serialized Form

    Field Summary
     
    Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    cookie, header, messages, name, parameter, property, role, scope, user
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    EmptyTag()
               
     
    Method Summary
    protected  boolean condition()
              Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
    protected  boolean condition(boolean desired)
              Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
     
    Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    doEndTag, doStartTag, getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, release, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    EmptyTag

    public EmptyTag()
    Method Detail

    condition

    protected boolean condition()
                         throws javax.servlet.jsp.JspException
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped. This method must be implemented by concrete subclasses.

    Specified by:
    condition in class ConditionalTagBase
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception occurs

    condition

    protected boolean condition(boolean desired)
                         throws javax.servlet.jsp.JspException
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped. This method must be implemented by concrete subclasses.

    Parameters:
    desired - Desired outcome for a true result
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception occurs


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/EqualTag.html0000644000175000017500000004516710404045222030310 0ustar arnaudarnaud00000000000000 EqualTag (Apache Struts API Documentation)

    org.apache.struts.taglib.logic
    Class EqualTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.logic.ConditionalTagBase
                  |
                  +--org.apache.struts.taglib.logic.CompareTagBase
                        |
                        +--org.apache.struts.taglib.logic.EqualTag
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    NestedEqualTag

    public class EqualTag
    extends CompareTagBase

    Evaluate the nested body content of this tag if the specified variable and value are equal.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
     
    Fields inherited from class org.apache.struts.taglib.logic.CompareTagBase
    DOUBLE_COMPARE, LONG_COMPARE, messages, STRING_COMPARE, value
     
    Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    cookie, header, name, parameter, property, role, scope, user
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    EqualTag()
               
     
    Method Summary
    protected  boolean condition()
              Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
     
    Methods inherited from class org.apache.struts.taglib.logic.CompareTagBase
    condition, getValue, release, setValue
     
    Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    doEndTag, doStartTag, getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    EqualTag

    public EqualTag()
    Method Detail

    condition

    protected boolean condition()
                         throws javax.servlet.jsp.JspException
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped. This method must be implemented by concrete subclasses.

    Specified by:
    condition in class CompareTagBase
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception occurs


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/ForwardTag.html0000644000175000017500000004114610404045204030636 0ustar arnaudarnaud00000000000000 ForwardTag (Apache Struts API Documentation)

    org.apache.struts.taglib.logic
    Class ForwardTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.logic.ForwardTag
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class ForwardTag
    extends javax.servlet.jsp.tagext.TagSupport

    Perform a forward or redirect to a page that is looked up in the configuration information associated with our application.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
    protected static MessageResources messages
              The message resources for this package.
    protected  java.lang.String name
              The logical name of the ActionForward entry to be looked up.
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    ForwardTag()
               
     
    Method Summary
     int doEndTag()
              Look up the ActionForward associated with the specified name, and perform a forward or redirect to that path as indicated.
     int doStartTag()
              Defer processing until the end of this tag is encountered.
     java.lang.String getName()
               
     void release()
              Release all allocated resources.
     void setName(java.lang.String name)
               
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    messages

    protected static MessageResources messages
    The message resources for this package.


    name

    protected java.lang.String name
    The logical name of the ActionForward entry to be looked up.

    Constructor Detail

    ForwardTag

    public ForwardTag()
    Method Detail

    getName

    public java.lang.String getName()

    setName

    public void setName(java.lang.String name)

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Defer processing until the end of this tag is encountered.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.TagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Look up the ActionForward associated with the specified name, and perform a forward or redirect to that path as indicated.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.TagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    release

    public void release()
    Release all allocated resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class javax.servlet.jsp.tagext.TagSupport


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/GreaterEqualTag.html0000644000175000017500000004546210404045226031624 0ustar arnaudarnaud00000000000000 GreaterEqualTag (Apache Struts API Documentation)

    org.apache.struts.taglib.logic
    Class GreaterEqualTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.logic.ConditionalTagBase
                  |
                  +--org.apache.struts.taglib.logic.CompareTagBase
                        |
                        +--org.apache.struts.taglib.logic.GreaterEqualTag
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    NestedGreaterEqualTag

    public class GreaterEqualTag
    extends CompareTagBase

    Evaluate the nested body content of this tag if the specified variable is greater than or equal to the specified value.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
     
    Fields inherited from class org.apache.struts.taglib.logic.CompareTagBase
    DOUBLE_COMPARE, LONG_COMPARE, messages, STRING_COMPARE, value
     
    Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    cookie, header, name, parameter, property, role, scope, user
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    GreaterEqualTag()
               
     
    Method Summary
    protected  boolean condition()
              Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
     
    Methods inherited from class org.apache.struts.taglib.logic.CompareTagBase
    condition, getValue, release, setValue
     
    Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    doEndTag, doStartTag, getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    GreaterEqualTag

    public GreaterEqualTag()
    Method Detail

    condition

    protected boolean condition()
                         throws javax.servlet.jsp.JspException
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped. This method must be implemented by concrete subclasses.

    Specified by:
    condition in class CompareTagBase
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception occurs


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/GreaterThanTag.html0000644000175000017500000004542310404045216031443 0ustar arnaudarnaud00000000000000 GreaterThanTag (Apache Struts API Documentation)

    org.apache.struts.taglib.logic
    Class GreaterThanTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.logic.ConditionalTagBase
                  |
                  +--org.apache.struts.taglib.logic.CompareTagBase
                        |
                        +--org.apache.struts.taglib.logic.GreaterThanTag
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    NestedGreaterThanTag

    public class GreaterThanTag
    extends CompareTagBase

    Evaluate the nested body content of this tag if the specified variable is greater than the specified value.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
     
    Fields inherited from class org.apache.struts.taglib.logic.CompareTagBase
    DOUBLE_COMPARE, LONG_COMPARE, messages, STRING_COMPARE, value
     
    Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    cookie, header, name, parameter, property, role, scope, user
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    GreaterThanTag()
               
     
    Method Summary
    protected  boolean condition()
              Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
     
    Methods inherited from class org.apache.struts.taglib.logic.CompareTagBase
    condition, getValue, release, setValue
     
    Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    doEndTag, doStartTag, getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    GreaterThanTag

    public GreaterThanTag()
    Method Detail

    condition

    protected boolean condition()
                         throws javax.servlet.jsp.JspException
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped. This method must be implemented by concrete subclasses.

    Specified by:
    condition in class CompareTagBase
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception occurs


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/IterateTag.html0000644000175000017500000011266710404045204030636 0ustar arnaudarnaud00000000000000 IterateTag (Apache Struts API Documentation)

    org.apache.struts.taglib.logic
    Class IterateTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.logic.IterateTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    NestedIterateTag

    public class IterateTag
    extends javax.servlet.jsp.tagext.BodyTagSupport

    Custom tag that iterates the elements of a collection, which can be either an attribute or the property of an attribute. The collection can be any of the following: an array of objects, an Enumeration, an Iterator, a Collection (which includes Lists, Sets and Vectors), or a Map (which includes Hashtables) whose elements will be iterated over.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.Object collection
              The collection over which we will be iterating.
    protected  java.lang.String id
              The name of the scripting variable to be exposed.
    protected  java.lang.String indexId
              The name of the scripting variable to be exposed as the current index.
    protected  java.util.Iterator iterator
              Iterator of the elements of this collection, while we are actually running.
    protected  java.lang.String length
              The length value or attribute name (<=0 means no limit).
    protected  int lengthCount
              The number of elements we have already rendered.
    protected  int lengthValue
              The actual length value (calculated in the start tag).
    protected static MessageResources messages
              The message resources for this package.
    protected  java.lang.String name
              The name of the collection or owning bean.
    protected  java.lang.String offset
              The starting offset (zero relative).
    protected  int offsetValue
              The actual offset value (calculated in the start tag).
    protected  java.lang.String property
              The property name containing the collection.
    protected  java.lang.String scope
              The scope of the bean specified by the name property, if any.
    protected  boolean started
              Has this tag instance been started?
    protected  java.lang.String type
              The Java class of each exposed element of the collection.
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    IterateTag()
               
     
    Method Summary
     int doAfterBody()
              Make the next collection element available and loop, or finish the iterations if there are no more elements.
     int doEndTag()
              Clean up after processing this enumeration.
     int doStartTag()
              Construct an iterator for the specified collection, and begin looping through the body once per element.
     java.lang.Object getCollection()
               
     java.lang.String getId()
               
     int getIndex()
              Return the zero-relative index of the current iteration through the loop.
     java.lang.String getIndexId()
               
     java.lang.String getLength()
               
     java.lang.String getName()
               
     java.lang.String getOffset()
               
     java.lang.String getProperty()
               
     java.lang.String getScope()
               
     java.lang.String getType()
               
     void release()
              Release all allocated resources.
     void setCollection(java.lang.Object collection)
               
     void setId(java.lang.String id)
               
     void setIndexId(java.lang.String indexId)
               
     void setLength(java.lang.String length)
               
     void setName(java.lang.String name)
               
     void setOffset(java.lang.String offset)
               
     void setProperty(java.lang.String property)
               
     void setScope(java.lang.String scope)
               
     void setType(java.lang.String type)
               
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getParent, getValue, getValues, removeValue, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    iterator

    protected java.util.Iterator iterator
    Iterator of the elements of this collection, while we are actually running.


    lengthCount

    protected int lengthCount
    The number of elements we have already rendered.


    lengthValue

    protected int lengthValue
    The actual length value (calculated in the start tag).


    messages

    protected static MessageResources messages
    The message resources for this package.


    offsetValue

    protected int offsetValue
    The actual offset value (calculated in the start tag).


    started

    protected boolean started
    Has this tag instance been started?


    collection

    protected java.lang.Object collection
    The collection over which we will be iterating.


    id

    protected java.lang.String id
    The name of the scripting variable to be exposed.


    indexId

    protected java.lang.String indexId
    The name of the scripting variable to be exposed as the current index.


    length

    protected java.lang.String length
    The length value or attribute name (<=0 means no limit).


    name

    protected java.lang.String name
    The name of the collection or owning bean.


    offset

    protected java.lang.String offset
    The starting offset (zero relative).


    property

    protected java.lang.String property
    The property name containing the collection.


    scope

    protected java.lang.String scope
    The scope of the bean specified by the name property, if any.


    type

    protected java.lang.String type
    The Java class of each exposed element of the collection.

    Constructor Detail

    IterateTag

    public IterateTag()
    Method Detail

    getCollection

    public java.lang.Object getCollection()

    setCollection

    public void setCollection(java.lang.Object collection)

    getId

    public java.lang.String getId()
    Overrides:
    getId in class javax.servlet.jsp.tagext.TagSupport

    setId

    public void setId(java.lang.String id)
    Overrides:
    setId in class javax.servlet.jsp.tagext.TagSupport

    getIndex

    public int getIndex()

    Return the zero-relative index of the current iteration through the loop. If you specify an offset, the first iteration through the loop will have that value; otherwise, the first iteration will return zero.

    This property is read-only, and gives nested custom tags access to this information. Therefore, it is only valid in between calls to doStartTag() and doEndTag().


    getIndexId

    public java.lang.String getIndexId()

    setIndexId

    public void setIndexId(java.lang.String indexId)

    getLength

    public java.lang.String getLength()

    setLength

    public void setLength(java.lang.String length)

    getName

    public java.lang.String getName()

    setName

    public void setName(java.lang.String name)

    getOffset

    public java.lang.String getOffset()

    setOffset

    public void setOffset(java.lang.String offset)

    getProperty

    public java.lang.String getProperty()

    setProperty

    public void setProperty(java.lang.String property)

    getScope

    public java.lang.String getScope()

    setScope

    public void setScope(java.lang.String scope)

    getType

    public java.lang.String getType()

    setType

    public void setType(java.lang.String type)

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Construct an iterator for the specified collection, and begin looping through the body once per element.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doAfterBody

    public int doAfterBody()
                    throws javax.servlet.jsp.JspException
    Make the next collection element available and loop, or finish the iterations if there are no more elements.

    Specified by:
    doAfterBody in interface javax.servlet.jsp.tagext.BodyTag
    Overrides:
    doAfterBody in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Clean up after processing this enumeration.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    release

    public void release()
    Release all allocated resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class javax.servlet.jsp.tagext.BodyTagSupport


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/IterateTei.html0000644000175000017500000002720210404045234030635 0ustar arnaudarnaud00000000000000 IterateTei (Apache Struts API Documentation)

    org.apache.struts.taglib.logic
    Class IterateTei

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagExtraInfo
            |
            +--org.apache.struts.taglib.logic.IterateTei
    
    Direct Known Subclasses:
    NestedDefineTei, NestedIterateTei

    public class IterateTei
    extends javax.servlet.jsp.tagext.TagExtraInfo

    Implementation of TagExtraInfo for the iterate tag, identifying the scripting object(s) to be made visible.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Craig R. McClanahan

    Field Summary
     
    Fields inherited from class javax.servlet.jsp.tagext.TagExtraInfo
     
    Constructor Summary
    IterateTei()
               
     
    Method Summary
     javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
              Return information about the scripting variables to be created.
     
    Methods inherited from class javax.servlet.jsp.tagext.TagExtraInfo
    getTagInfo, isValid, setTagInfo
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    IterateTei

    public IterateTei()
    Method Detail

    getVariableInfo

    public javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
    Return information about the scripting variables to be created.

    Overrides:
    getVariableInfo in class javax.servlet.jsp.tagext.TagExtraInfo


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/LessEqualTag.html0000644000175000017500000004535210404045226031137 0ustar arnaudarnaud00000000000000 LessEqualTag (Apache Struts API Documentation)

    org.apache.struts.taglib.logic
    Class LessEqualTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.logic.ConditionalTagBase
                  |
                  +--org.apache.struts.taglib.logic.CompareTagBase
                        |
                        +--org.apache.struts.taglib.logic.LessEqualTag
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    NestedLessEqualTag

    public class LessEqualTag
    extends CompareTagBase

    Evaluate the nested body content of this tag if the specified variable is less than or equal to the specified value.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
     
    Fields inherited from class org.apache.struts.taglib.logic.CompareTagBase
    DOUBLE_COMPARE, LONG_COMPARE, messages, STRING_COMPARE, value
     
    Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    cookie, header, name, parameter, property, role, scope, user
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    LessEqualTag()
               
     
    Method Summary
    protected  boolean condition()
              Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
     
    Methods inherited from class org.apache.struts.taglib.logic.CompareTagBase
    condition, getValue, release, setValue
     
    Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    doEndTag, doStartTag, getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    LessEqualTag

    public LessEqualTag()
    Method Detail

    condition

    protected boolean condition()
                         throws javax.servlet.jsp.JspException
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped. This method must be implemented by concrete subclasses.

    Specified by:
    condition in class CompareTagBase
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception occurs


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/LessThanTag.html0000644000175000017500000004530710404045210030753 0ustar arnaudarnaud00000000000000 LessThanTag (Apache Struts API Documentation)

    org.apache.struts.taglib.logic
    Class LessThanTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.logic.ConditionalTagBase
                  |
                  +--org.apache.struts.taglib.logic.CompareTagBase
                        |
                        +--org.apache.struts.taglib.logic.LessThanTag
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    NestedLessThanTag

    public class LessThanTag
    extends CompareTagBase

    Evaluate the nested body content of this tag if the specified variable is less than the specified value.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
     
    Fields inherited from class org.apache.struts.taglib.logic.CompareTagBase
    DOUBLE_COMPARE, LONG_COMPARE, messages, STRING_COMPARE, value
     
    Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    cookie, header, name, parameter, property, role, scope, user
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    LessThanTag()
               
     
    Method Summary
    protected  boolean condition()
              Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
     
    Methods inherited from class org.apache.struts.taglib.logic.CompareTagBase
    condition, getValue, release, setValue
     
    Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    doEndTag, doStartTag, getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    LessThanTag

    public LessThanTag()
    Method Detail

    condition

    protected boolean condition()
                         throws javax.servlet.jsp.JspException
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped. This method must be implemented by concrete subclasses.

    Specified by:
    condition in class CompareTagBase
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception occurs


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/MatchTag.html0000644000175000017500000005537510404045234030302 0ustar arnaudarnaud00000000000000 MatchTag (Apache Struts API Documentation)

    org.apache.struts.taglib.logic
    Class MatchTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.logic.ConditionalTagBase
                  |
                  +--org.apache.struts.taglib.logic.MatchTag
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    NestedMatchTag, NotMatchTag

    public class MatchTag
    extends ConditionalTagBase

    Evalute the nested body content of this tag if the specified value is a substring of the specified variable.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String location
              The location where the match must exist (start or end), or null for anywhere.
    protected  java.lang.String value
              The value to which the variable specified by other attributes of this tag will be matched.
     
    Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    cookie, header, messages, name, parameter, property, role, scope, user
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    MatchTag()
               
     
    Method Summary
    protected  boolean condition()
              Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
    protected  boolean condition(boolean desired)
              Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
     java.lang.String getLocation()
               
     java.lang.String getValue()
               
     void release()
              Release all allocated resources.
     void setLocation(java.lang.String location)
               
     void setValue(java.lang.String value)
               
     
    Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    doEndTag, doStartTag, getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    location

    protected java.lang.String location
    The location where the match must exist (start or end), or null for anywhere.


    value

    protected java.lang.String value
    The value to which the variable specified by other attributes of this tag will be matched.

    Constructor Detail

    MatchTag

    public MatchTag()
    Method Detail

    getLocation

    public java.lang.String getLocation()

    setLocation

    public void setLocation(java.lang.String location)

    getValue

    public java.lang.String getValue()

    setValue

    public void setValue(java.lang.String value)

    release

    public void release()
    Release all allocated resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class ConditionalTagBase

    condition

    protected boolean condition()
                         throws javax.servlet.jsp.JspException
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped. This method must be implemented by concrete subclasses.

    Specified by:
    condition in class ConditionalTagBase
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception occurs

    condition

    protected boolean condition(boolean desired)
                         throws javax.servlet.jsp.JspException
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped. This method must be implemented by concrete subclasses.

    Parameters:
    desired - Desired value for a true result
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception occurs


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/MessagesNotPresentTag.html0000644000175000017500000004534010404045250033024 0ustar arnaudarnaud00000000000000 MessagesNotPresentTag (Apache Struts API Documentation)

    org.apache.struts.taglib.logic
    Class MessagesNotPresentTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.logic.ConditionalTagBase
                  |
                  +--org.apache.struts.taglib.logic.MessagesPresentTag
                        |
                        +--org.apache.struts.taglib.logic.MessagesNotPresentTag
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    NestedMessagesNotPresentTag

    public class MessagesNotPresentTag
    extends MessagesPresentTag

    Evalute the nested body content of this tag if the specified value is not present for this request.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    David Winterfeldt
    See Also:
    Serialized Form

    Field Summary
     
    Fields inherited from class org.apache.struts.taglib.logic.MessagesPresentTag
    message
     
    Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    cookie, header, messages, name, parameter, property, role, scope, user
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    MessagesNotPresentTag()
               
     
    Method Summary
    protected  boolean condition()
              Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
     
    Methods inherited from class org.apache.struts.taglib.logic.MessagesPresentTag
    condition, getMessage, release, setMessage
     
    Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    doEndTag, doStartTag, getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    MessagesNotPresentTag

    public MessagesNotPresentTag()
    Method Detail

    condition

    protected boolean condition()
                         throws javax.servlet.jsp.JspException
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped. This method must be implemented by concrete subclasses.

    Overrides:
    condition in class MessagesPresentTag
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception occurs


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/MessagesPresentTag.html0000644000175000017500000005264310404045206032350 0ustar arnaudarnaud00000000000000 MessagesPresentTag (Apache Struts API Documentation)

    org.apache.struts.taglib.logic
    Class MessagesPresentTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.logic.ConditionalTagBase
                  |
                  +--org.apache.struts.taglib.logic.MessagesPresentTag
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    MessagesNotPresentTag, NestedMessagesPresentTag

    public class MessagesPresentTag
    extends ConditionalTagBase

    Evalute to true if an ActionMessages class or a class that can be converted to an ActionMessages class is in request scope under the specified key and there is at least one message in the class or for the property specified.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    David Winterfeldt
    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String message
              If this is set to 'true', then the Globals.MESSAGE_KEY will be used to retrieve the messages from scope.
     
    Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    cookie, header, messages, name, parameter, property, role, scope, user
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    MessagesPresentTag()
               
     
    Method Summary
    protected  boolean condition()
              Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
    protected  boolean condition(boolean desired)
              Evaluate the condition that is being tested by this particular tag, and return true if there is at least one message in the class or for the property specified.
     java.lang.String getMessage()
               
     void release()
              Release all allocated resources.
     void setMessage(java.lang.String message)
               
     
    Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    doEndTag, doStartTag, getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    message

    protected java.lang.String message
    If this is set to 'true', then the Globals.MESSAGE_KEY will be used to retrieve the messages from scope.

    Constructor Detail

    MessagesPresentTag

    public MessagesPresentTag()
    Method Detail

    getMessage

    public java.lang.String getMessage()

    setMessage

    public void setMessage(java.lang.String message)

    condition

    protected boolean condition()
                         throws javax.servlet.jsp.JspException
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped. This method must be implemented by concrete subclasses.

    Specified by:
    condition in class ConditionalTagBase
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception occurs

    condition

    protected boolean condition(boolean desired)
                         throws javax.servlet.jsp.JspException
    Evaluate the condition that is being tested by this particular tag, and return true if there is at least one message in the class or for the property specified. This method must be implemented by concrete subclasses.

    Parameters:
    desired - Desired outcome for a true result
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception occurs

    release

    public void release()
    Release all allocated resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class ConditionalTagBase


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/NotEmptyTag.html0000644000175000017500000004314210404045206031011 0ustar arnaudarnaud00000000000000 NotEmptyTag (Apache Struts API Documentation)

    org.apache.struts.taglib.logic
    Class NotEmptyTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.logic.ConditionalTagBase
                  |
                  +--org.apache.struts.taglib.logic.EmptyTag
                        |
                        +--org.apache.struts.taglib.logic.NotEmptyTag
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    NestedNotEmptyTag

    public class NotEmptyTag
    extends EmptyTag

    Evalute the nested body content of this tag if the specified value is not empty for this request.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Martin Cooper
    See Also:
    Serialized Form

    Field Summary
     
    Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    cookie, header, messages, name, parameter, property, role, scope, user
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NotEmptyTag()
               
     
    Method Summary
    protected  boolean condition()
              Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
     
    Methods inherited from class org.apache.struts.taglib.logic.EmptyTag
    condition
     
    Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    doEndTag, doStartTag, getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, release, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    NotEmptyTag

    public NotEmptyTag()
    Method Detail

    condition

    protected boolean condition()
                         throws javax.servlet.jsp.JspException
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped. This method must be implemented by concrete subclasses.

    Overrides:
    condition in class EmptyTag
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception occurs


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/NotEqualTag.html0000644000175000017500000004530210404045214030761 0ustar arnaudarnaud00000000000000 NotEqualTag (Apache Struts API Documentation)

    org.apache.struts.taglib.logic
    Class NotEqualTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.logic.ConditionalTagBase
                  |
                  +--org.apache.struts.taglib.logic.CompareTagBase
                        |
                        +--org.apache.struts.taglib.logic.NotEqualTag
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    NestedNotEqualTag

    public class NotEqualTag
    extends CompareTagBase

    Evaluate the nested body content of this tag if the specified variable and value are not equal.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
     
    Fields inherited from class org.apache.struts.taglib.logic.CompareTagBase
    DOUBLE_COMPARE, LONG_COMPARE, messages, STRING_COMPARE, value
     
    Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    cookie, header, name, parameter, property, role, scope, user
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NotEqualTag()
               
     
    Method Summary
    protected  boolean condition()
              Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
     
    Methods inherited from class org.apache.struts.taglib.logic.CompareTagBase
    condition, getValue, release, setValue
     
    Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    doEndTag, doStartTag, getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    NotEqualTag

    public NotEqualTag()
    Method Detail

    condition

    protected boolean condition()
                         throws javax.servlet.jsp.JspException
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped. This method must be implemented by concrete subclasses.

    Specified by:
    condition in class CompareTagBase
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception occurs


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/NotMatchTag.html0000644000175000017500000004511510404045224030751 0ustar arnaudarnaud00000000000000 NotMatchTag (Apache Struts API Documentation)

    org.apache.struts.taglib.logic
    Class NotMatchTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.logic.ConditionalTagBase
                  |
                  +--org.apache.struts.taglib.logic.MatchTag
                        |
                        +--org.apache.struts.taglib.logic.NotMatchTag
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    NestedNotMatchTag

    public class NotMatchTag
    extends MatchTag

    Evalute the nested body content of this tag if the specified value is not a substring of the specified variable.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
     
    Fields inherited from class org.apache.struts.taglib.logic.MatchTag
    location, value
     
    Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    cookie, header, messages, name, parameter, property, role, scope, user
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NotMatchTag()
               
     
    Method Summary
    protected  boolean condition()
              Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
     
    Methods inherited from class org.apache.struts.taglib.logic.MatchTag
    condition, getLocation, getValue, release, setLocation, setValue
     
    Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    doEndTag, doStartTag, getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    NotMatchTag

    public NotMatchTag()
    Method Detail

    condition

    protected boolean condition()
                         throws javax.servlet.jsp.JspException
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped. This method must be implemented by concrete subclasses.

    Overrides:
    condition in class MatchTag
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception occurs


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/NotPresentTag.html0000644000175000017500000004423510404045174031343 0ustar arnaudarnaud00000000000000 NotPresentTag (Apache Struts API Documentation)

    org.apache.struts.taglib.logic
    Class NotPresentTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.logic.ConditionalTagBase
                  |
                  +--org.apache.struts.taglib.logic.PresentTag
                        |
                        +--org.apache.struts.taglib.logic.NotPresentTag
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    NestedNotPresentTag

    public class NotPresentTag
    extends PresentTag

    Evalute the nested body content of this tag if the specified value is not present for this request.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
     
    Fields inherited from class org.apache.struts.taglib.logic.PresentTag
    ROLE_DELIMITER
     
    Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    cookie, header, messages, name, parameter, property, role, scope, user
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NotPresentTag()
               
     
    Method Summary
    protected  boolean condition()
              Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
     
    Methods inherited from class org.apache.struts.taglib.logic.PresentTag
    condition
     
    Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    doEndTag, doStartTag, getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, release, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    NotPresentTag

    public NotPresentTag()
    Method Detail

    condition

    protected boolean condition()
                         throws javax.servlet.jsp.JspException
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped. This method must be implemented by concrete subclasses.

    Overrides:
    condition in class PresentTag
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception occurs


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/PresentTag.html0000644000175000017500000004606110404045242030655 0ustar arnaudarnaud00000000000000 PresentTag (Apache Struts API Documentation)

    org.apache.struts.taglib.logic
    Class PresentTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.logic.ConditionalTagBase
                  |
                  +--org.apache.struts.taglib.logic.PresentTag
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    NestedPresentTag, NotPresentTag

    public class PresentTag
    extends ConditionalTagBase

    Evalute the nested body content of this tag if the specified value is present for this request.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
    static java.lang.String ROLE_DELIMITER
               
     
    Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    cookie, header, messages, name, parameter, property, role, scope, user
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    PresentTag()
               
     
    Method Summary
    protected  boolean condition()
              Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
    protected  boolean condition(boolean desired)
              Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
     
    Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    doEndTag, doStartTag, getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, release, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    ROLE_DELIMITER

    public static final java.lang.String ROLE_DELIMITER
    See Also:
    Constant Field Values
    Constructor Detail

    PresentTag

    public PresentTag()
    Method Detail

    condition

    protected boolean condition()
                         throws javax.servlet.jsp.JspException
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped. This method must be implemented by concrete subclasses.

    Specified by:
    condition in class ConditionalTagBase
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception occurs

    condition

    protected boolean condition(boolean desired)
                         throws javax.servlet.jsp.JspException
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped. This method must be implemented by concrete subclasses.

    Parameters:
    desired - Desired outcome for a true result
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception occurs


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/RedirectTag.html0000644000175000017500000010566010404045210030772 0ustar arnaudarnaud00000000000000 RedirectTag (Apache Struts API Documentation)

    org.apache.struts.taglib.logic
    Class RedirectTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.logic.RedirectTag
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class RedirectTag
    extends javax.servlet.jsp.tagext.TagSupport

    Generate a URL-encoded redirect to the specified URI.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String anchor
              The anchor to be added to the end of the generated hyperlink.
    protected  java.lang.String forward
              The logical forward name from which to retrieve the redirect URI.
    protected  java.lang.String href
              The redirect URI.
    protected static MessageResources messages
              The message resources for this package.
    protected  java.lang.String name
              The JSP bean name for query parameters.
    protected  java.lang.String page
              The module-relative page URL (beginning with a slash) to which this redirect will be rendered.
    protected  java.lang.String paramId
              The single-parameter request parameter name to generate.
    protected  java.lang.String paramName
              The single-parameter JSP bean name.
    protected  java.lang.String paramProperty
              The single-parameter JSP bean property.
    protected  java.lang.String paramScope
              The single-parameter JSP bean scope.
    protected  java.lang.String property
              The JSP bean property name for query parameters.
    protected  java.lang.String scope
              The scope of the bean specified by the name property, if any.
    protected  boolean transaction
              Include our transaction control token?
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    RedirectTag()
               
     
    Method Summary
     int doEndTag()
              Render the redirect and skip the remainder of this page.
     int doStartTag()
              Defer generation until the end of this tag is encountered.
     java.lang.String getAnchor()
               
     java.lang.String getForward()
               
     java.lang.String getHref()
               
     java.lang.String getName()
               
     java.lang.String getPage()
               
     java.lang.String getParamId()
               
     java.lang.String getParamName()
               
     java.lang.String getParamProperty()
               
     java.lang.String getParamScope()
               
     java.lang.String getProperty()
               
     java.lang.String getScope()
               
     boolean getTransaction()
               
     void release()
              Release any acquired resources.
     void setAnchor(java.lang.String anchor)
               
     void setForward(java.lang.String forward)
               
     void setHref(java.lang.String href)
               
     void setName(java.lang.String name)
               
     void setPage(java.lang.String page)
               
     void setParamId(java.lang.String paramId)
               
     void setParamName(java.lang.String paramName)
               
     void setParamProperty(java.lang.String paramProperty)
               
     void setParamScope(java.lang.String paramScope)
               
     void setProperty(java.lang.String property)
               
     void setScope(java.lang.String scope)
               
     void setTransaction(boolean transaction)
               
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    anchor

    protected java.lang.String anchor
    The anchor to be added to the end of the generated hyperlink.


    forward

    protected java.lang.String forward
    The logical forward name from which to retrieve the redirect URI.


    href

    protected java.lang.String href
    The redirect URI.


    messages

    protected static MessageResources messages
    The message resources for this package.


    name

    protected java.lang.String name
    The JSP bean name for query parameters.


    page

    protected java.lang.String page
    The module-relative page URL (beginning with a slash) to which this redirect will be rendered.


    paramId

    protected java.lang.String paramId
    The single-parameter request parameter name to generate.


    paramName

    protected java.lang.String paramName
    The single-parameter JSP bean name.


    paramProperty

    protected java.lang.String paramProperty
    The single-parameter JSP bean property.


    paramScope

    protected java.lang.String paramScope
    The single-parameter JSP bean scope.


    property

    protected java.lang.String property
    The JSP bean property name for query parameters.


    scope

    protected java.lang.String scope
    The scope of the bean specified by the name property, if any.


    transaction

    protected boolean transaction
    Include our transaction control token?

    Constructor Detail

    RedirectTag

    public RedirectTag()
    Method Detail

    getAnchor

    public java.lang.String getAnchor()

    setAnchor

    public void setAnchor(java.lang.String anchor)

    getForward

    public java.lang.String getForward()

    setForward

    public void setForward(java.lang.String forward)

    getHref

    public java.lang.String getHref()

    setHref

    public void setHref(java.lang.String href)

    getName

    public java.lang.String getName()

    setName

    public void setName(java.lang.String name)

    getPage

    public java.lang.String getPage()

    setPage

    public void setPage(java.lang.String page)

    getParamId

    public java.lang.String getParamId()

    setParamId

    public void setParamId(java.lang.String paramId)

    getParamName

    public java.lang.String getParamName()

    setParamName

    public void setParamName(java.lang.String paramName)

    getParamProperty

    public java.lang.String getParamProperty()

    setParamProperty

    public void setParamProperty(java.lang.String paramProperty)

    getParamScope

    public java.lang.String getParamScope()

    setParamScope

    public void setParamScope(java.lang.String paramScope)

    getProperty

    public java.lang.String getProperty()

    setProperty

    public void setProperty(java.lang.String property)

    getScope

    public java.lang.String getScope()

    setScope

    public void setScope(java.lang.String scope)

    getTransaction

    public boolean getTransaction()

    setTransaction

    public void setTransaction(boolean transaction)

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Defer generation until the end of this tag is encountered.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.TagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Render the redirect and skip the remainder of this page.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.TagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    release

    public void release()
    Release any acquired resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class javax.servlet.jsp.tagext.TagSupport


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/package-frame.html0000644000175000017500000000463510404045246031271 0ustar arnaudarnaud00000000000000 org.apache.struts.taglib.logic (Apache Struts API Documentation) org.apache.struts.taglib.logic
    Classes 
    CompareTagBase
    ConditionalTagBase
    EmptyTag
    EqualTag
    ForwardTag
    GreaterEqualTag
    GreaterThanTag
    IterateTag
    IterateTei
    LessEqualTag
    LessThanTag
    MatchTag
    MessagesNotPresentTag
    MessagesPresentTag
    NotEmptyTag
    NotEqualTag
    NotMatchTag
    NotPresentTag
    PresentTag
    RedirectTag
    libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/package-summary.html0000644000175000017500000007561110404045224031672 0ustar arnaudarnaud00000000000000 org.apache.struts.taglib.logic (Apache Struts API Documentation)

    Package org.apache.struts.taglib.logic

    The "struts-logic" 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.

    See:
              Description

    Class Summary
    CompareTagBase Abstract base class for comparison tags.
    ConditionalTagBase Abstract base class for the various conditional evaluation tags.
    EmptyTag Evalute the nested body content of this tag if the specified value is empty for this request.
    EqualTag Evaluate the nested body content of this tag if the specified variable and value are equal.
    ForwardTag Perform a forward or redirect to a page that is looked up in the configuration information associated with our application.
    GreaterEqualTag Evaluate the nested body content of this tag if the specified variable is greater than or equal to the specified value.
    GreaterThanTag Evaluate the nested body content of this tag if the specified variable is greater than the specified value.
    IterateTag Custom tag that iterates the elements of a collection, which can be either an attribute or the property of an attribute.
    IterateTei Implementation of TagExtraInfo for the iterate tag, identifying the scripting object(s) to be made visible.
    LessEqualTag Evaluate the nested body content of this tag if the specified variable is less than or equal to the specified value.
    LessThanTag Evaluate the nested body content of this tag if the specified variable is less than the specified value.
    MatchTag Evalute the nested body content of this tag if the specified value is a substring of the specified variable.
    MessagesNotPresentTag Evalute the nested body content of this tag if the specified value is not present for this request.
    MessagesPresentTag Evalute to true if an ActionMessages class or a class that can be converted to an ActionMessages class is in request scope under the specified key and there is at least one message in the class or for the property specified.
    NotEmptyTag Evalute the nested body content of this tag if the specified value is not empty for this request.
    NotEqualTag Evaluate the nested body content of this tag if the specified variable and value are not equal.
    NotMatchTag Evalute the nested body content of this tag if the specified value is not a substring of the specified variable.
    NotPresentTag Evalute the nested body content of this tag if the specified value is not present for this request.
    PresentTag Evalute the nested body content of this tag if the specified value is present for this request.
    RedirectTag Generate a URL-encoded redirect to the specified URI.
     

    Package org.apache.struts.taglib.logic Description

    The "struts-logic" 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.


    Introduction

    The Logic library supplies tags that are useful for manipulating presentation logic without the use of scriptlets.


    Logic Tag UML

    Logic Tag Functionality

    The functionality of the logic tags can be divided into four groups:

    Value Comparisons - The purpose of these tags is to print out the body of the tag if the comparison evaluates to true.

    Substring Matching - The purpose of these tags is to match substrings inside of other Strings

    Presentation Location - The purpose of these tags is to change the location of the presentation page

    Collection Utilities -The purpose of these tags is to handle Collections

    Logic Tag Properties

    Each of the four groups of logic tags have a common set of attributes associated with them. :

    Value Comparisons (equal, notEqual, greaterEqual, lessEqual, greaterThan, lessThan, present, notPresent)

    Each of the value comparison tags takes a value and compares it to the value of a comparison attribute. If the value given can be successfully converted to a float or double, then a number comparison is performed on the value given and the value of the comparison attribute. Otherwise a String comparison is performed. You have to specify one of the comparison attributes: cookie, header, parameter , property or name. For each of the examples, the tag " someComparisonTag"can be replaced by any of the value comparison tags.

    • value - the value to which this tag is going to compare, used in conjunction with one of the comparison attributes: cookie, header, parameter, and property and/or name.
    • cookie - the name of the cookie to compare to value
      • example:
        <logic:someComparisonTag value="someUserName" cookie="userName">
        User Logged In
        </logic:someComparisonTag>
    • header - the name of the HTTP header to compare to value
      • example:
        <logic:someComparisonTag value="en_US" header="Accept-Language">
        Welcome English-speaking User*
        </logic:someComparisonTag>
      • *Note: See the section in the user's guide on Internationalized Messages to do things like this better.

    • name - the variable to be compared to value is the JSP bean specified by this attribute, if property is not specified, or the value of the specified property of this bean, if property is specified.
      • example:
        <%
        String testString = "pantalones";
        pageContext.setAttribute("testString", testString, PageContext.PAGE_SCOPE);
        %>
        <jsp:useBean id="testString" scope="page" type="java.lang.String" />
        <logic:someComparisonTag name="testString" value="pantalones">
        Usted tiene pantalones!
        </logic:someComparison>
    • parameter - the name of the request parameter to compare to value
      • example:
        <logic:someComparisonTag value="" parameter="username">
        Error: a username must be specified
        </logic:someComparisonTag>
    • property - the variable to be compared with value is the property (of the bean specified by the name attribute) specified by this attribute. The property reference can be simple, nested, and/or indexed. property is used in conjunction with name to specify a property in the bean specified by name. For the type of syntax used for property, see the users guide on the Bean Tags.
    • scope - the bean scope within which to search for the bean named by the name property, or "any scope" if not specified. Possible values are "page", "request", "session", "application", or "any scope"

    Substring Matching (match, notMatch)

    The substring matching tags take all the same arguments as the value comparison tags. You compare the String specified by value to any of the comparison values you give it, specified by cookie, header, parameter, property or name. Note that in the examples, matchTag corresponds either the match or notMatch tag. Matching tags also have an additional location attribute added:

    • location - has two possible values, "start" and "end". If "start", the substring is attempted to be matched at the beginning of the String, if "end", then the substring is attempted to be matched to the end of the String
      • example:
        <logic:matchTag parameter="action" value="processLogin" location="start">
        Processing Login....
        </logic:matchTag>

        In this example, a request parameter "action" was compared to see if
        its value started with the String "processLogin". In this case,
        matchTag would have to be <logic:match>.

    Presentation Location (forward, redirect)

    The redirect tag is resposible for sending a re-direct to the client's browser, complete with URL-rewriting if it's supported by the container. Its attributes are consistent with the Struts HTML link tag. The base URL is calculated based on which of the following attributes you specify (you must specify exactly one of them):

    • forward - Use the value of this attribute as the name of a global ActionForward to be looked up, and use the context-relative URI found there.
    • href - Use the value of this attribute unchanged.
    • page - Use the value of this attribute as a context-relative URI, and generate a server-relative URI by including the context path.

    The forward tag is responsible for either redirecting or forwarding to a specified global action forward. To define a global ActionForward, see The Action Mappings Configuration File . You can specify whether the forward re-directs or forwards when executed in the config file. The forward tag has one attribute:

    • name - The logical name of the ActionForward to use

    Collection Utilities (iterate)

    The iterate tag is responsible for executing its body content once for every element inside of the specified Collection. There is one required attribute:

    • id - The name of a page scope JSP bean that will contain the current element of the collection on each iteration

    The other attributes allow for more flexibility on which Collection to iterate and how to do it:

    • collection - a runtime expression that evaluates to a Collection to be iterated
      • example:
        <%
        java.util.Vector vector = new java.util.Vector();
        vector.add(new Integer(12));
        vector.add(new Integer(5));
        %>
    <logic:iterate id="myCollectionElement" collection="<%= vector %>">
    Do something with myCollectionElement </logic:iterate>
    • length - 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 java.lang.Integer that defines the desired value. If not present, there will be no limit on the number of iterations performed
    • name - The name of the JSP bean containing the collection to be iterated (if property is not specified), or the JSP bean whose property getter returns the collection to be iterated (if property is specified).
      • example:
        <%
        java.util.ArrayList list = new java.util.ArrayList(); list.add("First"); list.add("Second"); list.add("Third"); list.add("Fourth"); list.add("Fifth"); pageContext.setAttribute("list", list, PageContext.PAGE_SCOPE); %> <logic:iterate id="myCollectionElement" name="list"> Do something with myCollectionElement </logic:iterate>
    • offset - 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 java.lang.Integer that defines the desired value. If not present, zero is assumed (meaning that the collection will be iterated from the beginning.
    • property - Name of the property, of the JSP bean specified by name, whose getter returns the collection to be iterated. See the user's guide for the bean tag library for the syntax of the property attribute
    • scope - The bean scope within which to search for the bean named by the name property, or "any scope" if not specified. Possible values are "page", "request", "session", "application", or "any scope"
    • type - Fully qualified Java class name of the element to be exposed through the JSP bean named from the id 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.
      • example:
        <%    java.util.ArrayList list = new java.util.ArrayList();
        list.add("First");
        list.add("Second");
        list.add("Third");
        list.add("Fourth");
        list.add("Fifth");
        pageContext.setAttribute("list", list, PageContext.PAGE_SCOPE);
        %>

        <logic:iterate id="myCollectionElement" name="list" type="java.lang.String">
        Do something with myCollectionElement </logic:iterate>

    Logic Examples

    Value Comparisons

    Logic Equivalence Tags (equal, notEqual, greaterEqual, lessEqual, lessThan, greaterThan)

    You can compare these tags to the "==", "!=" ,">=", "<=", "<", and ">"logic operators in most languages. Their usage is fairly straightforward for numbers. For an example, we'll create a small "Guess That Number" game that uses request parameters from a form input to play. The number will be hardcoded as "7", because this is just an example. Note that this is actually putting application logic inside of jsp pages, and isn't the recommended development method for Struts. It's just an easy way to show how these tags are used:

    The first step is to develop the form that will call on the processing jsp page. This form will use the "GET" method so that you can see the request parameter in the URL. The POST method can also be used with no problem or changes.

    [numberGuess.jsp]

    <form action="numberProcess.jsp" method="GET">
    Please Enter a Number From 1-10: <input type="text" name="number" /><br />
    <center>
    <input type="submit" name="Guess Number" />
    </center>
    </form>
    The next step is to create the processing page. It uses the struts-logic taglib. For information on how to set this tag library up in your application to use, see The Web Application Deployment Descriptor

    [numberProcess.jsp]

    <%@ page language="java" %>
    <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
    <!-- Is the number guess right? -->
    <logic:equal parameter="number" value="7">
    You guessed right! You win a high speed blender!
    </logic:equal>
    <!-- If the number guessed was wrong -->
    <logic:notEqual parameter="number" value="7">
    <!-- Less Than -->
    <logic:lessThan parameter="number" value="7">
    A little higher...
    </logic:lessThan>
    <!-- Greater Than -->
    <logic:greaterThan parameter="number" value="7">
    A little lower...
    </logic:greaterThan>
    </logic:notEqual>

    Basically, the numberProcess.jsp page uses the equal tag to check if the guess is 7, and if so, prints out a congratulatory message. If the number isn't equal, specified by the use of the <logic:notEqual> tag, it uses the greaterThan and lessThan tags to check if the number is higher or lower than 7, and prints out a hint. As said before, this is a horribly designed small application, with no validity checks on the number input, but shows the basic usage of the logic equal tags

    For String comparisons, the equal tags use the java.lang.String.compareTo() method. See the javadocs on the compareTo() method for more information, located here .

    Match and Present Tags (match, notMatch, present, notPresent)

    You use the match tags in conjunction with the present tags in order to do substring matches. For an example using this we'll use headers, specifically the "Referer" header. The HTTP referer header gives the URL of the document that refers to the requested URL. We'll use this to check if the user is coming from a link specified by a Google search, and offer a personalized greeting, frightening users that find our site through the search engine with our amazing intimate knowledge of their browsing habits:

    [sneaky.jsp]

    <%@ page language="java" %>
    <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>


    <!-- Check to see if the "Referer" header is present -->
    <logic:present header="Referer">
    <logic:match header="Referer" value="google.com">
    I see you found our site through Google... interesting.
    </logic:match>
    <logic:notMatch header="Referer" value="google.com">
    Welcome to the site, we're secretly logging what site you came from,
    because we're shady...
    </logic:notMatch>
    </logic:present>

    <!-- If the header is not present -->
    <logic:notPresent header="Referer">
    Hi, welcome to our site. Please fill out our
    <a href="nonExistantForm.jsp">Form</a> and
    tell us where you're coming from.
    </logic:notPresent>

    Note: Another interesting usage of these tags and headers would be to use the "User-Agent" header to display browser-specific javascript.

    Collection Utilities (iterate)

    For an example of using the <logic:iterate> tag, we'll use one of the previous examples given, in it's entirety. This example uses the <bean:write> tag from the Bean Tag Library, see the User's Guide on the bean tag library for more information on it's usage:

    [iterate.jsp]

    <%@ page language="java" %>
    <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
    <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
    <%
    java.util.ArrayList list = new java.util.ArrayList();
    list.add("First");
    list.add("Second");
    list.add("Third");
    list.add("Fourth");
    list.add("Fifth");
    pageContext.setAttribute("list", list, PageContext.PAGE_SCOPE);
    %>

    <logic:iterate id="myCollectionElement" name="list">
    Element Value: <bean:write name="myCollectionElement" /><br />
    </logic:iterate>



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/package-tree.html0000644000175000017500000002174510404045206031133 0ustar arnaudarnaud00000000000000 org.apache.struts.taglib.logic Class Hierarchy (Apache Struts API Documentation)

    Hierarchy For Package org.apache.struts.taglib.logic

    Package Hierarchies:
    All Packages

    Class Hierarchy

    • class java.lang.Object
      • class javax.servlet.jsp.tagext.TagExtraInfo
      • class javax.servlet.jsp.tagext.TagSupport (implements java.io.Serializable, javax.servlet.jsp.tagext.Tag)


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/logic/package-use.html0000644000175000017500000004305310404045220030760 0ustar arnaudarnaud00000000000000 Uses of Package org.apache.struts.taglib.logic (Apache Struts API Documentation)

    Uses of Package
    org.apache.struts.taglib.logic

    Packages that use org.apache.struts.taglib.logic
    org.apache.struts.taglib.logic The "struts-logic" 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. 
    org.apache.struts.taglib.nested.bean The nested bean tags extend the org.apache.struts.taglib.bean tags to allow them to relate to each other in a nested nature. 
    org.apache.struts.taglib.nested.logic The nested html tags extend the org.apache.struts.taglib.logic tags to allow them to relate to each other in a nested nature. 
     

    Classes in org.apache.struts.taglib.logic used by org.apache.struts.taglib.logic
    CompareTagBase
              Abstract base class for comparison tags.
    ConditionalTagBase
              Abstract base class for the various conditional evaluation tags.
    EmptyTag
              Evalute the nested body content of this tag if the specified value is empty for this request.
    MatchTag
              Evalute the nested body content of this tag if the specified value is a substring of the specified variable.
    MessagesPresentTag
              Evalute to true if an ActionMessages class or a class that can be converted to an ActionMessages class is in request scope under the specified key and there is at least one message in the class or for the property specified.
    PresentTag
              Evalute the nested body content of this tag if the specified value is present for this request.
     

    Classes in org.apache.struts.taglib.logic used by org.apache.struts.taglib.nested.bean
    IterateTei
              Implementation of TagExtraInfo for the iterate tag, identifying the scripting object(s) to be made visible.
     

    Classes in org.apache.struts.taglib.logic used by org.apache.struts.taglib.nested.logic
    CompareTagBase
              Abstract base class for comparison tags.
    ConditionalTagBase
              Abstract base class for the various conditional evaluation tags.
    EmptyTag
              Evalute the nested body content of this tag if the specified value is empty for this request.
    EqualTag
              Evaluate the nested body content of this tag if the specified variable and value are equal.
    GreaterEqualTag
              Evaluate the nested body content of this tag if the specified variable is greater than or equal to the specified value.
    GreaterThanTag
              Evaluate the nested body content of this tag if the specified variable is greater than the specified value.
    IterateTag
              Custom tag that iterates the elements of a collection, which can be either an attribute or the property of an attribute.
    IterateTei
              Implementation of TagExtraInfo for the iterate tag, identifying the scripting object(s) to be made visible.
    LessEqualTag
              Evaluate the nested body content of this tag if the specified variable is less than or equal to the specified value.
    LessThanTag
              Evaluate the nested body content of this tag if the specified variable is less than the specified value.
    MatchTag
              Evalute the nested body content of this tag if the specified value is a substring of the specified variable.
    MessagesNotPresentTag
              Evalute the nested body content of this tag if the specified value is not present for this request.
    MessagesPresentTag
              Evalute to true if an ActionMessages class or a class that can be converted to an ActionMessages class is in request scope under the specified key and there is at least one message in the class or for the property specified.
    NotEmptyTag
              Evalute the nested body content of this tag if the specified value is not empty for this request.
    NotEqualTag
              Evaluate the nested body content of this tag if the specified variable and value are not equal.
    NotMatchTag
              Evalute the nested body content of this tag if the specified value is not a substring of the specified variable.
    NotPresentTag
              Evalute the nested body content of this tag if the specified value is not present for this request.
    PresentTag
              Evalute the nested body content of this tag if the specified value is present for this request.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/0000755000175000017500000000000010423130300026060 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/bean/0000755000175000017500000000000010423130300026765 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/bean/class-use/0000755000175000017500000000000010423130300030664 5ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000015310423140533011316 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/bean/class-use/NestedDefineTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/bean/class-use/NestedDefineTa0000644000175000017500000001310010404045216033436 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.bean.NestedDefineTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.bean.NestedDefineTag

    No usage of org.apache.struts.taglib.nested.bean.NestedDefineTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015310423140533011316 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/bean/class-use/NestedDefineTei.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/bean/class-use/NestedDefineTe0000644000175000017500000001310010404045250033440 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.bean.NestedDefineTei (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.bean.NestedDefineTei

    No usage of org.apache.struts.taglib.nested.bean.NestedDefineTei



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015410423140533011317 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/bean/class-use/NestedMessageTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/bean/class-use/NestedMessageT0000644000175000017500000001311010404045240033465 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.bean.NestedMessageTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.bean.NestedMessageTag

    No usage of org.apache.struts.taglib.nested.bean.NestedMessageTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015110423140533011314 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/bean/class-use/NestedSizeTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/bean/class-use/NestedSizeTag.0000644000175000017500000001306010404045250033406 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.bean.NestedSizeTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.bean.NestedSizeTag

    No usage of org.apache.struts.taglib.nested.bean.NestedSizeTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015210423140533011315 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/bean/class-use/NestedWriteTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/bean/class-use/NestedWriteTag0000644000175000017500000001307010404045232033511 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.bean.NestedWriteTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.bean.NestedWriteTag

    No usage of org.apache.struts.taglib.nested.bean.NestedWriteTag



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/bean/doc-files/0000755000175000017500000000000010423130300030632 5ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000014610423140533011320 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/bean/doc-files/nested-bean.giflibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/bean/doc-files/nested-bean.gi0000644000175000017500000002161110404045172033354 0ustar arnaudarnaud00000000000000GIF87aU÷€€€€€€€€€ÀÀÀÀÜÀ¦Êð@ ` €   À à @ @@@`@€@ @À@à@` `@```€` `À`à`€ €@€`€€€ €À€à€   @ ` €   À à À À@À`À€À ÀÀÀàÀà à@à`à€à àÀààà@ @@@`@€@ @À@à@ @ @@ @` @€ @  @À @à @@@ @@@@@`@@€@@ @@À@@à@@`@ `@@`@``@€`@ `@À`@à`@€@ €@@€@`€@€€@ €@À€@à€@ @  @@ @` @€ @  @À @à @À@ À@@À@`À@€À@ À@ÀÀ@àÀ@à@ à@@à@`à@€à@ à@Àà@àà@€ €@€`€€€ €À€à€ € €@ €` €€ €  €À €à €@€ @€@@€`@€€@€ @€À@€à@€`€ `€@`€``€€`€ `€À`€à`€€€ €€@€€`€€€€€ €€À€€à€€ €  €@ €` €€ €  €À €à €À€ À€@À€`À€€À€ À€ÀÀ€àÀ€à€ à€@à€`à€€à€ à€Àà€àà€À À@À`À€À ÀÀÀàÀ À À@ À` À€ À  ÀÀ Àà À@À @À@@À`@À€@À @ÀÀ@Àà@À`À `À@`À``À€`À `ÀÀ`Àà`À€À €À@€À`€À€€À €ÀÀ€Àà€À À  À@ À` À€ À  ÀÀ Àà ÀÀÀ ÀÀ@ÀÀ`ÀÀ€ÀÀ ÀÀÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ!ù,Uÿ7 H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤ÉŽÿRª\ɲ¥Ë—0cÊœI³¦Í›8sêÜɳ§ÏŸ@ƒ J´¨Ñ£H“*]Ê´©Ó§P£JJµªÕ«X³jÝʵ«×¯`ÊK¶¬Ù³hÓª]˶­Û·pãÊK·®Ý»xóêÝË·¯ß¿€ L¸°áÈ+^̸±ãÇ#Kn  ²å˘3kÞ̹³çÏ C‹Mº´éÓ¨S«^ͺõç®cËžM»¶íÛ“ÞÞÍ»·ïßÀƒ w@îã>#:¼¹óçУKŸ®œfõåØk^Ï®33÷ïàmzL·¾<ËíæebNϾý¿õ3ч•_V¹ý˜ô_æ_i©fýº‡_XÞeñ™UYOûGžv×-¨_ƒ°©Da€.Ý÷^qNxa‡ :Fÿ ~‚õ!† ¦¨]‰( U݉,Â#!ò7bóáx‚$Ò(£„JŸ…@W$òõG ‘OBù"’IÚ‡äzB™!‘"8%}V~™’–QŠé#“c¶â3 £T3¾Y›”ÅÈ¢”æy&žAêùâ˜YêégšU ªá†ˆúøg¢÷ yè „þ)¤ {ú$¤ŒžIh¡[êx£nºäæ=¼#§Sqžê"•uVÉc¥‰f࢘ (›ÛÑ*«®v"ºh ›bz(°2Zêd§_^yž—jHçÜÓÒ;Ô¶‘Ò\`Á_ `ªC¥ .PtjëÁòêê¦a>Êÿn°”Ña­¬2zi¤øÂë«°ùû®¦<ª o®ÍX®=•m±ÒLq€=÷äSÄGäãÀ`ê/jŒâ¾z!…¹–ܸ+\X¹”ž kÉèýš§ÌèºÜª®4›»/»Jîìò°\ÖÚ©¬¶ö ¦GãÈò?ïT&Å·ÿl±Eö\sÌ1FSDÅùäÀÚzqÃg9gªóÚÜj6éU~(çµô¹pÓ믯ò»kË©è‚~»dΪ ôÏÿ¢ëwšò2N4Ý3«ìÞÜÿ$aÙ;öHñt3ÃÓO?WgmDÅ`|ؼƒÀXfå­É®[/Šx>³£C» ÿ(켯»¤ï€[)˜qã57ÈŽ&;,³G–y+§÷rºä€ï.ý”°K¼ë¿&ÏåöÏó,üó#biføA—[üq”3­ÀeO/3Ì0Æ óù1Æ\} ×GTìØ_¸ƒ©¾Ò:ìMOKÜî t³Ã«e¿K < Ö j’Ú s<é¬WsIs>¸–õå¦}ÿ°‡= U™$ƒü˜_1ìgŒû….tGx@>ð5n p+Ô]qG¥ÙY'mÃ[³*hÁRL4"ÛÖ¶˜Ž‚ ”‹ÉEÂŽyJŠ)Ø;† ÀPÀ¡ý@÷¹bèï£{€ð;܃cXÿÙè"ïp™2£h>& ˆããäcEæP…lyÕªÀˆN…÷¸‡æ¶€€{3gÆ0ŠQ¿¶±nÔßÿ°ÃXàn Ԣª=Qº» G¬˜eЏL0›¨ÈÜUQŠ–]’™öer ÷€¦=Œ1C~|ò2f†6µ9Cc˜Ò~YÂþ¾ÖCW^àØáP3ÞR‡L¤zõ¯I=N_èC¤ÉOxŠçnŒi¤2ÃLÈPî÷ص0÷ ÏÍoÚFaÈmBt~õë‡)Ãy5´rkrĘ¾ð…¥–]Z ÈʇÁµ®mãSŸ‡ }i½Þ%/¦-'¥ ªEdRç§@ ªm¾x!RAÌß§FKÑ̘‘¢Àe)íç¹~ájGÈßH׿rÊ2+” Oªž°†gqd=aX1gSÝbW-†FQ9ʺÁ©À?¢ªÆÞ¯†ÓÚÕ®z ‚MŽýUÌš£´6ÿ’àA«c›ÉØ•¼á8añg?¹Rs†Ã¸«Sͨ×4ÎO”k”«\AGXÑík÷˜evÆ:ÙxÑ61«-A+»’w|Àb;„cUï÷9jÖO¢ÅëSEiQaƒ”©Eeû×5\A[¸‚bO¨[¥@–;[ìînQÖÖȳù¸áp?§QÐCAH®rÏhZÔÖõ~„Õ,V=p­™âõo—ãË·'*´:³•ÙÌá†ù¬j¥;J!„V¾šB^÷úPçÖoµèïDüƒø¤fŸ1OÌȳ$Áo¸Ão»Ü­Ùøj ÃÙ»ÔÎÒ5´ À°e€ á¨Náÿ.øÁ<€ä(yu¹­x¿KàE²˜/T–I[ß¡-méÆýÃaÖ®zUqΕªÒMs]ß Ú!à}˜™ÀœÌä$Ë1Rîn–¹ Ð+fÏZ¶|û….Í£¬4l½U­iTÇùC¥ç†0×T:•"v² \ gL@7¨Ÿ'é,Ž0€¦I‚Ûj;àVðò¶tø¿®±R¿[{0aw­¿ÑaÍÑý°B’oéþÞÀ¤x>5¹\ `S+»/©¶ÉªWÝ-j}á ²¾@Gg‹i6G¸õèt]ÝþÙÄF·©åg'‡Ù&^–ÇÜ­—hódÚøÞ²oð#œ®­e5+ux„!$! R‚®ñ Õ±5Áí¦7là-¢ÿH\0ö&J¾7ž`oq|ãñ¾xq(~I‘cœä&ÏbÊg¢<¯œ+OªÌgNóšÛ5ò®‘Ë_®•Œóü/;ŸÊ›ýóz½è{ º‰ÿŽþ¥#}*>z½9ÈtIÝx>•äǃ²‘9ûA‚KNʰø“`FP—;¯[YŽñ«ßåx<"×yâõ)>ˆìt;>˯\¾­Ï,_“Ûí÷}6§½“ ëÐ.)ÚövhÊeKÕ¦>IjA“ÞôòÅ']éóá{"äbùÁ­Ø–ej—õùáMèˆlÿóàëRxÇû“Ë;à0Û½HÌ÷Fã|/K”%ö+øJÜYÏ„XOΗÆ>â–å6}®žŸðľ.m&ÙÅÕ³_¦O%ï$˜™¿‰­¿»ò»ÈÈ)Î\Ê"ZñO+`…·ñ~š—þáïyµŸ„t{š€ÿéWLTä}:~!”u,5AÙS}»7$z÷@æ'YíÒ}$ÕW4}Ò6ÆR=…“.Š# ØGüw;ÜcOÓG}7ÅD65Õ€÷Kßt ØSûRx{Öç‚9±‰Ó|îç3¶¢v˜Dí}{Sïׄ60ýW3÷Ä}ÃähB€òd€*—s-wƒqQ{ˆ…<ÈO0xw€ô{É}Jˆ†‹Ó{>³KÈ7P‡îG3~¤79£A4¸ONÔO=˜Sê·…¥×!5è…D††¤zÄ„T€˜.Ñ0g·RX>™‚¶ç=iÈRöÔ(=#/Ÿ‡S]²~¤÷=AHv1'O‹<ýd€Táõˆ‚gˆnuƒsÒE{ׯè…VUq²I¿8rÃ(o$Cx´èE+SŒŒºÈŒÎXT׋X%Ö(VÓ¨4ÙXI¡xsàŽâ8ŽÓÁ…ÿ]Ø ‚èh`ÉØtëXêøŽz$¬CöèXíhuù¸t9¨uÈ ¡hwt7™‡>ýDøÈH I@ãwvÔÇEÈ·b2H‡Ùy´s‡‘0÷´=ŠÈ{z³%2c/ƒ‡xÇ‘P±À¨’ù8†;øO»ø†«wŠQè8D.©y„Ø“¾“5å%ˆw2"ˆ,üR“bV”P§‘mç”V†úÔ‚qÔH|óƨ/<é’,)jRYTY†C‡Vl(CH;#‰‹c)`_9uoù”B©RUèƒlóö·†˜‡89—K–U˜p€)e—Žx>ƒ%h,¶Õ<$ƒ(˜„©˜?9™O!™–¹&P){™ùX›Ù™gõ™6š)š¤9[ñ¦ m§é]©¹šìÓšIçšp™ˆäX›¶y›¸©æ‹²y6qÙ›M›r œá"œÄeÆi<ÇYœ¿¹œ–€Î¹lÿØŽF”…ÑitÍùv×YvIɹž™„ž)”;/øN yž2Iži™Éæž'cžb¨x>õ‰Ÿ€(ŸbõãÉŸÄ8 ˜}MÙ‡è׊ Þ(ž´§ Œ' Ù—z¶Döy ¶è ýÉ Ë„¡BŸûY(w(“HLzB%êRj—:AúÙ¢õ™¢o㟠*£°HƒßhŠ/8 ºŠxi£Aù…¹éùŸe¤rÿC£‰':.F ¡HŠŒMº}³ÕO¥¨¦¤KZeEª¥X*ŒSJ¥r7ˆb·•r"dù¥‘u¥)¦)é–ä–aç/wjeΧnš¤a*§kZDz‡§[x•[*mÚ§ƧÞU¨L˜Oà©D(>¼ã‰dÚNa÷§à¢ŠªVŒÚ¨¸È—ç“*ˆ’ºw‘lX/šº©œÚ©—¨º˜=ªú|Dz'Ìr|¾‰õ$IÈ}9¤À¬Â:¬Ÿ§¡…íÄ•KHO5C8'ˆE«ªLÄ:­ÔZ­B¥œÇ†³Â7Bc8¦Ú—ƒä”Ö:®äZ®C5œ¹8}ø—7늉j“Ëzk,9§®Z¯Ð {w¢‰}ˆ=ÚƒR•×Gúê“å÷„öZ°r­=g° û& V û°FçȤ;±^{±ìѰy„±šæ:²";²$[²&{²(›²*»²,Û².û²0³2;³4[³6{³8›³:»³<Û³>qû³@´B;´D[´F{´H›´J»´LÛ´Nû´PµR;µT[µ«™¦²Z~¤Xë*¸²•]¶`;¶\K¶Z'¶e›¶gk¶_«¶m»¶n»µp«±V[6MK·u+L‹·yË:wÛ·•Ùrg饀{µžB„Z¸'Ë· »69øOy§¦Š;¹(ÖwEXy¡§{7€{T ”û¹Ëf¹3ª¾c‘ðz¡„ º=«‡Ž+,·º“^ ¬[¥ª  :(…z™¯¥ºw·ûŒ[»/×»jyO¿ç¬?“¬¼g•¬‹„]Ù}|Hi±Êë»J£Ÿ÷©ÐÃ=d¸Õ+±{û½Ô»´¿+¾´d¾è«šé»¾ØÊ¾îû¾ð¿òÿ+³xû@¨‘Éw[+k ªókrð†¦¥ÉwGÚ+B2‚cBq§3ø¿bI@ ¹_÷uUwšÀ`‡†L¯b§§<š)i‰-hŽÙ›R—¿Â䉈t>¡÷mÈ8d’{”J>™‰Jª¸»‹èD“¨$­Ú¿! ~쇂Êzyy‡¤ë|×ó­ßj©uy@CºmX`~‰Åiø.L|“»’–—r/_œ‹å{ÄWÔµË:…m9©aŒ+R¯€§†8Ù=µúhÙºxsÇ⃉J8‘h…~)Çï*¹hÌ™xG8†£«À£Çô¹SôÒ¼ŒüÄB(ÈÜê•È*º¼¢È{Ë|†é½ƒ\“F|È՘ĸJ'[,4k¼­GéÆZì˜P¼‚wš»˜¬­Y 9§œÇÃËÁ ,ÅgLÊlÊDh„1Eȃ‚Xy,1ì Ÿx3uœ”ø’ǘ »Ò»/ÒL>urÌWl‡QÆœüËÀ.z=’ø€'¬‰5 =6¼¹%8ÍîD”ë<¹º½î|>)°—ع ¸¹ Ïô,ãHŦ—Ï Î¥6§àLE ]B†lÐ%Êéú}° íÐÒúH©[ž Ý1&iÀýÑ— Ò"ýXÊ#Í‹l+·o›Ò(½ÒZÛÒÆ¨Ò·.­<0Ì«'íÒ´‰ÓßÓ/ÍÒ=}~%-®jÜ °Ú½©ÆA]µÇ˜¸)‚Á œÔNû¸µÔ¨P=¹Fˆ¿UmvŽzÕŠ›4áZÁV=½^mµ³Ë»*¢rg]Ö€ËÁŒÐLÍlÕ1FRý#}™Ñs±îмd½AÕ©¬{=µ"D<Ý$D ɃMµ¾DÔñG;aµÀ‹-µ†=OË—¯£|¡š=ÙG{×wsÃ)\սќMž$ºZ-ÚƒwZÚBKrëÃL¤ÍÚÄiI \œ² ´´}Eâ|Û<›L¾}‹¼³¿íAÀÜ5 Û»}6ÆM¿|ˆþ±Ü/ËSÒ± Ý9VØMÝÖ²Ù}R¬¹Ý%K[âÍÕ Þlz[èMÞæÍ×ÚýÜê½Þ›gR¦tå ß³çròÍNvöm¯øm¬÷»ßŠšvïýߥñt±Wß~qôMÒ´¤à ®lN×àpá:á! un»+™á¾á¦Ýá"þ” P™à;RâÇYƒßÇ“®âªÂâ>•0n¸3>âSùâ5Λç»X»ã€Ù‹BD@þ–©9äDx^ä@éâ)®J®’_Éä]¡ãOŽQî°S^åEŠåMžåZ¾Ž¿—'ª×_n0ažä\沘Í9¥T®æ ‰æ\n"p~âyç÷XçWÇ xNo®çrów‚î·€¾rJª¡«úç…þ…ååð¸èôÖ¤’^I.áÚHç”ÿ^éWææ„n·èû± ~›äê¤.sü}ánâ§î ¾ŠÀ¨îߪ^¯ÑZ¿¸*ˆúϸŽÔ«íÝ I·N§?xÏ.UÔbý¥‰n¨½^ÑMYÍ­Ø*c¿€Ì~®ìü×ZíìνىÛu«îÁ>¹×ÎìÏŠí?0ˆ‹ëiíÞà~ãç¾ìê~ÉO=µØÁ®êÖ&|ž0Ú¥8йÂO.¬ëæÍ3ŒÂQ<«•¸yœˆ40lî9ÂDÈ¥wÂ?ĈÍ'ÚC ÿ.ÏoÍoÅÔ^;Íóðä.£ø~¹IÄò8ì@”¼—Î{뽬R–›{ €¤ú¼„î)ìmÆJÿ|Še¬ËnHËÅ7ó®\ÉT Ä(yêŒÚ~„…ý—™¢1ý„K™ÈD_ËýŒ4Ðþþ'„boÇñ'0MŒ3}¬”VßêCm7BO¼^Oñò^õl\ËvøÌ¹zö‰¬öˆŠmÿíq?Ì;9ÉÑS4ÜÊK)É*hrí.åì«M|”¹Ô•Ÿê€ ÷ÇÛø6åÈPê÷ÃÌøt<…Îù‰ý8`ÝùhMëjÝ­µÍ4¯Êάø^?’–xºˆ’:?ù= ø•زžù¹¬õ^¬ÊÆ;ûï*ÙÄËë7÷´OúÌZÈ>o/Yà­|Ä|“¡ÜÆ}ÓÃճ̞g¼”¯Ç\׿oyоÊôµOøRÌÛÿóÝDß¿ôͼüÐo4å?”Z™þàß@ÿ D˜Ð B† >„QâDŠ-^ĘQãFŽN’ È‘! 4)R Iƒ)K¾4ùr¡Ì–-?ªIåI—)WúÔ™0&¡>cUxS(É£;o²´©ÒeÃ!VX”%ЙQWÖ,ÉTìOž'‰n%»tæX¢gÃ’•:uhW›KËEJ°®W¹PçzLÕê`Â… FœÿXqÒÂJ¯.†\ÑqdÊ' ­ŒÕ2æÇ•=3¼üYt[ÒŒGŸFZõhÍCƒ^MùulÖœMGnq¶mÚ‰w÷><;7pâÅŸŽqêÿǭ.wî:ïÅÉ/N 5:GìÛw§ë]üxò’ËŸGOÜú÷ôíÝC^ÿ^þüÌôíß^ÿ~þ°ûÿ;£$°@D0Ad°A„0B ›SlB /Ä0C 7äPÂ?1Dõ‘Äùâ#EL̪C_„1FgŒ°DQûêFåSq¼ûñG‡mÙ²¦lÖRÎÆZ‹Ý‚¬i™òÏÚŠ!f˜´Œ#žÌb‚ÿçÝÒ:¬bu¶­±´ëÖã¿j¾6Þ¸ôêKZoÙ:+/†ãõx/œ‰¾íÛÉ `is:b^ÉÍ6kdm» æ‘)vxê‹MÞúe“¡S9d‰{Šºì·üM;`–‘tÙÞ]yNXê…y&ÛNKµ&9(·IŒ;c±¤†¶â½ W{m£¿F¹o‘Þ7à»;ۮµMqI3[ؤ9ô¯ã$ÝìÒ_].ÉvÝó{ç‘AÓªî]Ù;ŽUõµ¦ƒ9eÈíå]â5CG{xÄ»>ýì›§üxÛ÷½|ã§›ç{k°ëýä1ãöyp®#Ÿâ¿ÅÎ>ݼÅZÏÝi§[߃_>ößÿAÎÎöǧ•rûÏ7]èÞ>é-OrÖSXêÐW°cùK€ÇÛ^Éç½ÞñÍ1HYlò¦:bÏfÊSßW÷@þ‘s „Ÿ–Õ6²ËƒµB ÷d¥50s5+^þøW¿Üíðu¼i¶ÞA~yhí N¨´¦LL};yZ¸ŽEÀà…+8d—Òz"Å 2q]oÕÍr!Ê+…u*âîdX½‡Áð…Ê;_­î7­~쇥c\Ù(È>NKÂ»× Æ"RWÜO±ÒH¹3ªP~£ÒÉÿضD'6Q&Nq‹'85‘ŒS,WÓø²³®±nb|úV(ÁA^§1ˆœ«‡xHC.Rnz¢`ÙÓ Eh”ÎiŸú& …hzêÐ÷ȱ¹LÖ‡&úJuFÔ£åÙhcBZ¡‡ÂDF©jRú¯_~öÔ¥¬*½ZJ¼|BSDBôåL_ºÓ⬴OÕiG5jÓùt›AåiRUš"†²dQ£³2¥VKg’)MQÕ‹ÚȨ3©UÅj+ñ|58[½e7£êU³¦U¨c…+I§ÚVŽºÕ©5u%Wñ•ƸöU:SMd崪ׅž´7ÜókbeãºÎ ¬w­fWÕºšé)Ö²í)kWÂ>¯9½lhásÕD.è©ÎrŽÊdθÉR>k”ÙÛK(ùÊT†,’³¬åðÊkÅþò«,fâ’™¹ÄÔåRœæGªËÆn®ñÀؼf!󙟄Äó›ÛÜçÁþÙφvn …kç\Q~Œ°ž=ÜDÝù¹…FtXßY%KOúJs:³š5å0§¥ž^t¢}h"cºÁDEµh9ýhW¯ºÔg R¬]{jZß:Ó%MñquZ!uzšµ¶5k{àaó4׸öõ¯Ýô6û²ršö±Gl`C[ÄÖVjrqéµH+×ÉÉ6¸ ËìV››ÔÝæTBå}!uKõÛÜN7`ßêž|—µÞ7½w²ûÍXwƒ»ÿÿ®Ý‹ç¼oÎû ˆøv"W‡W<ÔβxÆAÝnÇë]¯ÌÓÅC­Ô"Ö¿.9Ë6NèAW®ÚKzØçò‹À_™\Ò=Ψ©of@¿f5§º¼s›Ÿ|ϳչªa®Ê]f«£¸[kÏ»$GLÂä‹5‘`úÔUu1¦’:]'ÕÄÇê¨&-F ;¢ødt «½ììY{<%w¤³ý´/‡”âòJsvóµ^{ Ãxâ¶´Ð$¼Ì‘]t:ûNáø3¡[_÷”£ïÊ|ÖÈ÷€/P·$5éÌêJÑ}{`]^Fx¿pqsÏÓ¼çÄ.VrO ô•â’W¾ÖÏk:ôwÍÿWÎO~§”­kë™”=_\ˆ:x-þ¨õÊëÀvúÕË|‰-üºÏx؉kÆ¿ºKH®³_ùšs¼d‰ÿ}LŸ[6D»øs»1¦Ÿ÷¼ø–FÅ÷—у7꡾ë ü«#½¹¡õ˜ r4î{>ü¡À™¢£9Jœáù?â5C*™Ñ¿MÊ£“Ù™2¡b¸Û1=ìÁ‹Ôk=Ôù£$Ú  À§‚¾47:%Ž)Ã#¡éÓÜ6tžîA¶a¿$R™ä‰=@I¨ë£<ÂÃã ÿ9&l'TµÌ Ûƒ# Ä@ÏÓ¾hk;Hb¿H2&%ê¢J ¿-r¿,ârÃsºãÂ:ZŸàñÀ $ +Ü>…•.üÀ©!;¡É šÁ>@Ù)@ú ÃeaÀÑ뻦*¸×˜=«ª½ìsÄ/™¬Ó>¤ë1·ML N4â!?’Ä)a¦-t¹O¼AÁ³º¾™ÀìAÒë¼ÀºÄï™C:ŒEZaÄ"FLÂîé£ “Ÿ$¼Yœ@ÕûÁô¿d¤D_s—KB‹4Ì -ê‹jA?¨ ÂJd¨q*(HûE…3&Åq"›ÉÆÄ ¥¦HG°ƒ s,ÃRI=4DÃy4%«sC8l>’[ÄLl;ûk:|vÈp5‚GÞ* ¥ƒ®†ì8ƒ<ÇÊÓ¯<Šº„üC2'9ÄóÈ™Èzl=Ù@'ãHá˳œ±wBI–tHÛRI;H¹ºH•û¦„’˜”1œD(×àI‡ÓÉ Ê¡$Ê¢4Ê£DʤTÊ¥dʦtʧ„ʨ”Ê/ ;libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/bean/NestedDefineTag.html0000644000175000017500000005570610404045220032666 0ustar arnaudarnaud00000000000000 NestedDefineTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.bean
    Class NestedDefineTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.bean.DefineTag
                        |
                        +--org.apache.struts.taglib.nested.bean.NestedDefineTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, NestedNameSupport, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedDefineTag
    extends DefineTag
    implements NestedNameSupport

    NestedDefineTag.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String originalName
               
    private  java.lang.String originalProperty
               
     
    Fields inherited from class org.apache.struts.taglib.bean.DefineTag
    body, id, messages, name, property, scope, toScope, type, value
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedDefineTag()
               
     
    Method Summary
     int doEndTag()
              Complete the processing of the tag.
     int doStartTag()
              Overriding method of the heart of the matter.
     void release()
              Release the tag's resources and reset the values.
     
    Methods inherited from class org.apache.struts.taglib.bean.DefineTag
    doAfterBody, getId, getName, getProperty, getScope, getToScope, getType, getValue, setId, setName, setProperty, setScope, setToScope, setType, setValue
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getParent, getValue, getValues, removeValue, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedNameSupport
    getName, setName
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedPropertySupport
    getProperty, setProperty
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    originalName

    private java.lang.String originalName

    originalProperty

    private java.lang.String originalProperty
    Constructor Detail

    NestedDefineTag

    public NestedDefineTag()
    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the matter. Gets the relative property and leaves the rest up to the original tag implementation. Sweet.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class DefineTag
    Returns:
    int JSP continuation directive. This is in the hands of the super class.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Complete the processing of the tag. The nested tags here will restore all the original value for the tag itself and the nesting context.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class DefineTag
    Returns:
    int to describe the next step for the JSP processor
    Throws:
    javax.servlet.jsp.JspException - for the bad things JSP's do

    release

    public void release()
    Release the tag's resources and reset the values.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class DefineTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/bean/NestedDefineTei.html0000644000175000017500000003013710404045204032665 0ustar arnaudarnaud00000000000000 NestedDefineTei (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.bean
    Class NestedDefineTei

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagExtraInfo
            |
            +--org.apache.struts.taglib.logic.IterateTei
                  |
                  +--org.apache.struts.taglib.nested.bean.NestedDefineTei
    

    public class NestedDefineTei
    extends IterateTei

    NestedDefineTei to make sure that the implied setting of the name property of a nested tag is properly handed in the casting of the defined object. Currently goes to String, but for the purposes of most nested objects they will benefit more from a simple Object casting.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $
    Author:
    Arron Bates

    Field Summary
     
    Fields inherited from class javax.servlet.jsp.tagext.TagExtraInfo
     
    Constructor Summary
    NestedDefineTei()
               
     
    Method Summary
     javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
              Return information about the scripting variables to be created.
     
    Methods inherited from class javax.servlet.jsp.tagext.TagExtraInfo
    getTagInfo, isValid, setTagInfo
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    NestedDefineTei

    public NestedDefineTei()
    Method Detail

    getVariableInfo

    public javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
    Return information about the scripting variables to be created.

    Overrides:
    getVariableInfo in class IterateTei


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/bean/NestedMessageTag.html0000644000175000017500000005457110404045222033061 0ustar arnaudarnaud00000000000000 NestedMessageTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.bean
    Class NestedMessageTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.bean.MessageTag
                  |
                  +--org.apache.struts.taglib.nested.bean.NestedMessageTag
    
    All Implemented Interfaces:
    NestedNameSupport, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedMessageTag
    extends MessageTag
    implements NestedNameSupport

    NestedWriteTag.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $
    Author:
    Arron Bates
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String originalName
               
    private  java.lang.String originalProperty
               
     
    Fields inherited from class org.apache.struts.taglib.bean.MessageTag
    arg0, arg1, arg2, arg3, arg4, bundle, defaultLocale, key, localeKey, messages, name, property, scope
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedMessageTag()
               
     
    Method Summary
     int doEndTag()
              Complete the processing of the tag.
     int doStartTag()
              Overriding method of the heart of the matter.
     void release()
              Release the tag's resources and reset the values.
     
    Methods inherited from class org.apache.struts.taglib.bean.MessageTag
    getArg0, getArg1, getArg2, getArg3, getArg4, getBundle, getKey, getLocale, getName, getProperty, getScope, setArg0, setArg1, setArg2, setArg3, setArg4, setBundle, setKey, setLocale, setName, setProperty, setScope
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedNameSupport
    getName, setName
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedPropertySupport
    getProperty, setProperty
     

    Field Detail

    originalName

    private java.lang.String originalName

    originalProperty

    private java.lang.String originalProperty
    Constructor Detail

    NestedMessageTag

    public NestedMessageTag()
    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the matter. Gets the relative property and leaves the rest up to the original tag implementation. Sweet.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class MessageTag
    Returns:
    int JSP continuation directive. This is in the hands of the super class.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Complete the processing of the tag. The nested tags here will restore all the original value for the tag itself and the nesting context.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.TagSupport
    Returns:
    int to describe the next step for the JSP processor
    Throws:
    javax.servlet.jsp.JspException - for the bad things JSP's do

    release

    public void release()
    Release the tag's resources and reset the values.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class MessageTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/bean/NestedSizeTag.html0000644000175000017500000005061610404045246032411 0ustar arnaudarnaud00000000000000 NestedSizeTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.bean
    Class NestedSizeTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.bean.SizeTag
                  |
                  +--org.apache.struts.taglib.nested.bean.NestedSizeTag
    
    All Implemented Interfaces:
    NestedNameSupport, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedSizeTag
    extends SizeTag
    implements NestedNameSupport

    NestedSizeTag.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String originalName
               
    private  java.lang.String originalProperty
               
     
    Fields inherited from class org.apache.struts.taglib.bean.SizeTag
    collection, id, messages, name, property, scope
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedSizeTag()
               
     
    Method Summary
     int doEndTag()
              Complete the processing of the tag.
     int doStartTag()
              Overriding method of the heart of the matter.
     void release()
              Release the tag's resources and reset the values.
     
    Methods inherited from class org.apache.struts.taglib.bean.SizeTag
    getCollection, getId, getName, getProperty, getScope, setCollection, setId, setName, setProperty, setScope
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getParent, getValue, getValues, removeValue, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedNameSupport
    getName, setName
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedPropertySupport
    getProperty, setProperty
     

    Field Detail

    originalName

    private java.lang.String originalName

    originalProperty

    private java.lang.String originalProperty
    Constructor Detail

    NestedSizeTag

    public NestedSizeTag()
    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the matter. Gets the relative property and leaves the rest up to the original tag implementation. Sweet.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class SizeTag
    Returns:
    int JSP continuation directive. This is in the hands of the super class.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Complete the processing of the tag. The nested tags here will restore all the original value for the tag itself and the nesting context.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.TagSupport
    Returns:
    int to describe the next step for the JSP processor
    Throws:
    javax.servlet.jsp.JspException - for the bad things JSP's do

    release

    public void release()
    Release the tag's resources and reset the values.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class SizeTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/bean/NestedWriteTag.html0000644000175000017500000005462210404045204032564 0ustar arnaudarnaud00000000000000 NestedWriteTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.bean
    Class NestedWriteTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.bean.WriteTag
                  |
                  +--org.apache.struts.taglib.nested.bean.NestedWriteTag
    
    All Implemented Interfaces:
    NestedNameSupport, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedWriteTag
    extends WriteTag
    implements NestedNameSupport

    NestedWriteTag.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String originalName
               
    private  java.lang.String originalProperty
               
     
    Fields inherited from class org.apache.struts.taglib.bean.WriteTag
    bundle, DATE_FORMAT_KEY, filter, FLOAT_FORMAT_KEY, formatKey, formatStr, ignore, INT_FORMAT_KEY, localeKey, messages, name, property, scope, SQL_DATE_FORMAT_KEY, SQL_TIME_FORMAT_KEY, SQL_TIMESTAMP_FORMAT_KEY
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedWriteTag()
               
     
    Method Summary
     int doEndTag()
              Complete the processing of the tag.
     int doStartTag()
              Overriding method of the heart of the matter.
     void release()
              Release the tag's resources and reset the values.
     
    Methods inherited from class org.apache.struts.taglib.bean.WriteTag
    formatValue, getBundle, getFilter, getFormat, getFormatKey, getIgnore, getLocale, getName, getProperty, getScope, retrieveFormatString, setBundle, setFilter, setFormat, setFormatKey, setIgnore, setLocale, setName, setProperty, setScope
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedNameSupport
    getName, setName
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedPropertySupport
    getProperty, setProperty
     

    Field Detail

    originalName

    private java.lang.String originalName

    originalProperty

    private java.lang.String originalProperty
    Constructor Detail

    NestedWriteTag

    public NestedWriteTag()
    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the matter. Gets the relative property and leaves the rest up to the original tag implementation. Sweet.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class WriteTag
    Returns:
    int JSP continuation directive. This is in the hands of the super class.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Complete the processing of the tag. The nested tags here will restore all the original value for the tag itself and the nesting context.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.TagSupport
    Returns:
    int to describe the next step for the JSP processor
    Throws:
    javax.servlet.jsp.JspException - for the bad things JSP's do

    release

    public void release()
    Release the tag's resources and reset the values.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class WriteTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/bean/package-frame.html0000644000175000017500000000263310404045210032346 0ustar arnaudarnaud00000000000000 org.apache.struts.taglib.nested.bean (Apache Struts API Documentation) org.apache.struts.taglib.nested.bean
    Classes 
    NestedDefineTag
    NestedDefineTei
    NestedMessageTag
    NestedSizeTag
    NestedWriteTag
    libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/bean/package-summary.html0000644000175000017500000001711210404045222032752 0ustar arnaudarnaud00000000000000 org.apache.struts.taglib.nested.bean (Apache Struts API Documentation)

    Package org.apache.struts.taglib.nested.bean

    The nested bean tags extend the org.apache.struts.taglib.bean tags to allow them to relate to each other in a nested nature.

    See:
              Description

    Class Summary
    NestedDefineTag NestedDefineTag.
    NestedDefineTei NestedDefineTei to make sure that the implied setting of the name property of a nested tag is properly handed in the casting of the defined object.
    NestedMessageTag NestedWriteTag.
    NestedSizeTag NestedSizeTag.
    NestedWriteTag NestedWriteTag.
     

    Package org.apache.struts.taglib.nested.bean Description

    The nested bean tags extend the org.apache.struts.taglib.bean tags to allow them to relate to each other in a nested nature. The fundamental logic of the org.apache.struts.taglib.bean tags don't change, except in that all references to beans and bean properties will be managed in a nested context.

    Nested bean taglib







    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/bean/package-tree.html0000644000175000017500000002035010404045250032213 0ustar arnaudarnaud00000000000000 org.apache.struts.taglib.nested.bean Class Hierarchy (Apache Struts API Documentation)

    Hierarchy For Package org.apache.struts.taglib.nested.bean

    Package Hierarchies:
    All Packages

    Class Hierarchy

    • class java.lang.Object
      • class javax.servlet.jsp.tagext.TagExtraInfo
      • class javax.servlet.jsp.tagext.TagSupport (implements java.io.Serializable, javax.servlet.jsp.tagext.Tag)


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/bean/package-use.html0000644000175000017500000001237510404045216032062 0ustar arnaudarnaud00000000000000 Uses of Package org.apache.struts.taglib.nested.bean (Apache Struts API Documentation)

    Uses of Package
    org.apache.struts.taglib.nested.bean

    No usage of org.apache.struts.taglib.nested.bean



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/class-use/0000755000175000017500000000000010423130300027757 5ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000015010423140533011313 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/class-use/NestedNameSupport.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/class-use/NestedNameSupport.h0000644000175000017500000006442210404045234033572 0ustar arnaudarnaud00000000000000 Uses of Interface org.apache.struts.taglib.nested.NestedNameSupport (Apache Struts API Documentation)

    Uses of Interface
    org.apache.struts.taglib.nested.NestedNameSupport

    Packages that use NestedNameSupport
    org.apache.struts.taglib.nested Nested tags & supporting classes extend the base struts tags to allow them to relate to each other in a nested nature. 
    org.apache.struts.taglib.nested.bean The nested bean tags extend the org.apache.struts.taglib.bean tags to allow them to relate to each other in a nested nature. 
    org.apache.struts.taglib.nested.html The nested html tags extend the org.apache.struts.taglib.html tags to allow them to relate to each other in a nested nature. 
    org.apache.struts.taglib.nested.logic The nested html tags extend the org.apache.struts.taglib.logic tags to allow them to relate to each other in a nested nature. 
     

    Uses of NestedNameSupport in org.apache.struts.taglib.nested
     

    Subinterfaces of NestedNameSupport in org.apache.struts.taglib.nested
     interface NestedParentSupport
              This interface is so managing classes of the nested tag can identify a tag as a parent tag that other tags retrieve nested properties from.
     

    Classes in org.apache.struts.taglib.nested that implement NestedNameSupport
     class NestedPropertyTag
              NestedPropertyTag.
     class NestedRootTag
              NestedRootTag.
     

    Methods in org.apache.struts.taglib.nested with parameters of type NestedNameSupport
    static java.lang.String NestedPropertyHelper.getCurrentName(javax.servlet.http.HttpServletRequest request, NestedNameSupport nested)
              Returns the bean name from the request object that the properties are nesting against.
     

    Uses of NestedNameSupport in org.apache.struts.taglib.nested.bean
     

    Classes in org.apache.struts.taglib.nested.bean that implement NestedNameSupport
     class NestedDefineTag
              NestedDefineTag.
     class NestedMessageTag
              NestedWriteTag.
     class NestedSizeTag
              NestedSizeTag.
     class NestedWriteTag
              NestedWriteTag.
     

    Uses of NestedNameSupport in org.apache.struts.taglib.nested.html
     

    Classes in org.apache.struts.taglib.nested.html that implement NestedNameSupport
     class NestedCheckboxTag
              NestedCheckboxTag.
     class NestedErrorsTag
              NestedErrorsTag.
     class NestedFileTag
              NestedFileTag.
     class NestedFormTag
              NestedFormTag.
     class NestedHiddenTag
              NestedHiddenTag.
     class NestedImgTag
              NestedImgTag, renders the nested version of the tag.
     class NestedLinkTag
              NestedLinkTag.
     class NestedMessagesTag
              NestedMessagesTag.
     class NestedMultiboxTag
              NestedMultiboxTag.
     class NestedOptionsCollectionTag
              NestedOptionsCollectionTag.
     class NestedOptionsTag
              NestedOptionsTag.
     class NestedPasswordTag
              NestedPasswordTag.
     class NestedRadioTag
              NestedRadioTag.
     class NestedSelectTag
              NestedSelectTag.
     class NestedTextareaTag
              NestedTextareaTag.
     class NestedTextTag
              NestedTextTag.
     

    Uses of NestedNameSupport in org.apache.struts.taglib.nested.logic
     

    Classes in org.apache.struts.taglib.nested.logic that implement NestedNameSupport
     class NestedEmptyTag
              NestedEmptyTag.
     class NestedEqualTag
              NestedEqualTag.
     class NestedGreaterEqualTag
              NestedGreaterEqualTag.
     class NestedGreaterThanTag
              NestedGreaterThanTag.
     class NestedIterateTag
              NestedIterateTag.
     class NestedLessEqualTag
              NestedLessEqualTag.
     class NestedLessThanTag
              NestedLessThanTag.
     class NestedMatchTag
              NestedMatchTag.
     class NestedMessagesNotPresentTag
              NestedMessagesNotPresentTag.
     class NestedMessagesPresentTag
              NestedMessagesPresentTag.
     class NestedNotEmptyTag
              NestedNotEmptyTag.
     class NestedNotEqualTag
              NestedNotEqualTag.
     class NestedNotMatchTag
              NestedNotMatchTag.
     class NestedNotPresentTag
              NestedNotPresentTag.
     class NestedPresentTag
              NestedPresentTag.
     



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015210423140533011315 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/class-use/NestedParentSupport.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/class-use/NestedParentSupport0000644000175000017500000001303310404045214033703 0ustar arnaudarnaud00000000000000 Uses of Interface org.apache.struts.taglib.nested.NestedParentSupport (Apache Struts API Documentation)

    Uses of Interface
    org.apache.struts.taglib.nested.NestedParentSupport

    No usage of org.apache.struts.taglib.nested.NestedParentSupport



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015310423140533011316 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/class-use/NestedPropertyHelper.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/class-use/NestedPropertyHelpe0000644000175000017500000001302710404045226033665 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.NestedPropertyHelper (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.NestedPropertyHelper

    No usage of org.apache.struts.taglib.nested.NestedPropertyHelper



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015410423140533011317 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/class-use/NestedPropertySupport.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/class-use/NestedPropertySuppo0000644000175000017500000006715610404045230033745 0ustar arnaudarnaud00000000000000 Uses of Interface org.apache.struts.taglib.nested.NestedPropertySupport (Apache Struts API Documentation)

    Uses of Interface
    org.apache.struts.taglib.nested.NestedPropertySupport

    Packages that use NestedPropertySupport
    org.apache.struts.taglib.nested Nested tags & supporting classes extend the base struts tags to allow them to relate to each other in a nested nature. 
    org.apache.struts.taglib.nested.bean The nested bean tags extend the org.apache.struts.taglib.bean tags to allow them to relate to each other in a nested nature. 
    org.apache.struts.taglib.nested.html The nested html tags extend the org.apache.struts.taglib.html tags to allow them to relate to each other in a nested nature. 
    org.apache.struts.taglib.nested.logic The nested html tags extend the org.apache.struts.taglib.logic tags to allow them to relate to each other in a nested nature. 
     

    Uses of NestedPropertySupport in org.apache.struts.taglib.nested
     

    Subinterfaces of NestedPropertySupport in org.apache.struts.taglib.nested
     interface NestedNameSupport
              This is so that managing classes can tell if a nested tag needs to have its name property set.
     interface NestedParentSupport
              This interface is so managing classes of the nested tag can identify a tag as a parent tag that other tags retrieve nested properties from.
     

    Classes in org.apache.struts.taglib.nested that implement NestedPropertySupport
     class NestedPropertyTag
              NestedPropertyTag.
     class NestedRootTag
              NestedRootTag.
     

    Methods in org.apache.struts.taglib.nested with parameters of type NestedPropertySupport
    static void NestedPropertyHelper.setNestedProperties(javax.servlet.http.HttpServletRequest request, NestedPropertySupport tag)
              Helper method that will set all the relevant nesting properties for the provided tag reference depending on the implementation.
     

    Uses of NestedPropertySupport in org.apache.struts.taglib.nested.bean
     

    Classes in org.apache.struts.taglib.nested.bean that implement NestedPropertySupport
     class NestedDefineTag
              NestedDefineTag.
     class NestedMessageTag
              NestedWriteTag.
     class NestedSizeTag
              NestedSizeTag.
     class NestedWriteTag
              NestedWriteTag.
     

    Uses of NestedPropertySupport in org.apache.struts.taglib.nested.html
     

    Classes in org.apache.struts.taglib.nested.html that implement NestedPropertySupport
     class NestedCheckboxTag
              NestedCheckboxTag.
     class NestedErrorsTag
              NestedErrorsTag.
     class NestedFileTag
              NestedFileTag.
     class NestedFormTag
              NestedFormTag.
     class NestedHiddenTag
              NestedHiddenTag.
     class NestedImageTag
              NestedMultiboxTag.
     class NestedImgTag
              NestedImgTag, renders the nested version of the tag.
     class NestedLinkTag
              NestedLinkTag.
     class NestedMessagesTag
              NestedMessagesTag.
     class NestedMultiboxTag
              NestedMultiboxTag.
     class NestedOptionsCollectionTag
              NestedOptionsCollectionTag.
     class NestedOptionsTag
              NestedOptionsTag.
     class NestedPasswordTag
              NestedPasswordTag.
     class NestedRadioTag
              NestedRadioTag.
     class NestedSelectTag
              NestedSelectTag.
     class NestedSubmitTag
              NestedSubmitTag.
     class NestedTextareaTag
              NestedTextareaTag.
     class NestedTextTag
              NestedTextTag.
     

    Uses of NestedPropertySupport in org.apache.struts.taglib.nested.logic
     

    Classes in org.apache.struts.taglib.nested.logic that implement NestedPropertySupport
     class NestedEmptyTag
              NestedEmptyTag.
     class NestedEqualTag
              NestedEqualTag.
     class NestedGreaterEqualTag
              NestedGreaterEqualTag.
     class NestedGreaterThanTag
              NestedGreaterThanTag.
     class NestedIterateTag
              NestedIterateTag.
     class NestedLessEqualTag
              NestedLessEqualTag.
     class NestedLessThanTag
              NestedLessThanTag.
     class NestedMatchTag
              NestedMatchTag.
     class NestedMessagesNotPresentTag
              NestedMessagesNotPresentTag.
     class NestedMessagesPresentTag
              NestedMessagesPresentTag.
     class NestedNotEmptyTag
              NestedNotEmptyTag.
     class NestedNotEqualTag
              NestedNotEqualTag.
     class NestedNotMatchTag
              NestedNotMatchTag.
     class NestedNotPresentTag
              NestedNotPresentTag.
     class NestedPresentTag
              NestedPresentTag.
     



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015010423140533011313 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/class-use/NestedPropertyTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/class-use/NestedPropertyTag.h0000644000175000017500000001277710404045234033603 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.NestedPropertyTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.NestedPropertyTag

    No usage of org.apache.struts.taglib.nested.NestedPropertyTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000014610423140533011320 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/class-use/NestedReference.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/class-use/NestedReference.htm0000644000175000017500000001713510404045204033550 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.NestedReference (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.NestedReference

    Packages that use NestedReference
    org.apache.struts.taglib.nested Nested tags & supporting classes extend the base struts tags to allow them to relate to each other in a nested nature. 
     

    Uses of NestedReference in org.apache.struts.taglib.nested
     

    Methods in org.apache.struts.taglib.nested that return NestedReference
    private static NestedReference NestedPropertyHelper.referenceInstance(javax.servlet.http.HttpServletRequest request)
              Pulls the current nesting reference from the request object, and if there isn't one there, then it will create one and set it.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/class-use/NestedRootTag.html0000644000175000017500000001273710404045210033405 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.NestedRootTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.NestedRootTag

    No usage of org.apache.struts.taglib.nested.NestedRootTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000014710423140533011321 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/class-use/NestedTagSupport.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/class-use/NestedTagSupport.ht0000644000175000017500000006533110404045242033610 0ustar arnaudarnaud00000000000000 Uses of Interface org.apache.struts.taglib.nested.NestedTagSupport (Apache Struts API Documentation)

    Uses of Interface
    org.apache.struts.taglib.nested.NestedTagSupport

    Packages that use NestedTagSupport
    org.apache.struts.taglib.nested Nested tags & supporting classes extend the base struts tags to allow them to relate to each other in a nested nature. 
    org.apache.struts.taglib.nested.bean The nested bean tags extend the org.apache.struts.taglib.bean tags to allow them to relate to each other in a nested nature. 
    org.apache.struts.taglib.nested.html The nested html tags extend the org.apache.struts.taglib.html tags to allow them to relate to each other in a nested nature. 
    org.apache.struts.taglib.nested.logic The nested html tags extend the org.apache.struts.taglib.logic tags to allow them to relate to each other in a nested nature. 
     

    Uses of NestedTagSupport in org.apache.struts.taglib.nested
     

    Subinterfaces of NestedTagSupport in org.apache.struts.taglib.nested
     interface NestedNameSupport
              This is so that managing classes can tell if a nested tag needs to have its name property set.
     interface NestedParentSupport
              This interface is so managing classes of the nested tag can identify a tag as a parent tag that other tags retrieve nested properties from.
     interface NestedPropertySupport
              This interface is for managing classes of the nested extension, so they can know to set the tag's property property.
     

    Classes in org.apache.struts.taglib.nested that implement NestedTagSupport
     class NestedPropertyTag
              NestedPropertyTag.
     class NestedRootTag
              NestedRootTag.
     

    Uses of NestedTagSupport in org.apache.struts.taglib.nested.bean
     

    Classes in org.apache.struts.taglib.nested.bean that implement NestedTagSupport
     class NestedDefineTag
              NestedDefineTag.
     class NestedMessageTag
              NestedWriteTag.
     class NestedSizeTag
              NestedSizeTag.
     class NestedWriteTag
              NestedWriteTag.
     

    Uses of NestedTagSupport in org.apache.struts.taglib.nested.html
     

    Classes in org.apache.struts.taglib.nested.html that implement NestedTagSupport
     class NestedCheckboxTag
              NestedCheckboxTag.
     class NestedErrorsTag
              NestedErrorsTag.
     class NestedFileTag
              NestedFileTag.
     class NestedFormTag
              NestedFormTag.
     class NestedHiddenTag
              NestedHiddenTag.
     class NestedImageTag
              NestedMultiboxTag.
     class NestedImgTag
              NestedImgTag, renders the nested version of the tag.
     class NestedLinkTag
              NestedLinkTag.
     class NestedMessagesTag
              NestedMessagesTag.
     class NestedMultiboxTag
              NestedMultiboxTag.
     class NestedOptionsCollectionTag
              NestedOptionsCollectionTag.
     class NestedOptionsTag
              NestedOptionsTag.
     class NestedPasswordTag
              NestedPasswordTag.
     class NestedRadioTag
              NestedRadioTag.
     class NestedSelectTag
              NestedSelectTag.
     class NestedSubmitTag
              NestedSubmitTag.
     class NestedTextareaTag
              NestedTextareaTag.
     class NestedTextTag
              NestedTextTag.
     

    Uses of NestedTagSupport in org.apache.struts.taglib.nested.logic
     

    Classes in org.apache.struts.taglib.nested.logic that implement NestedTagSupport
     class NestedEmptyTag
              NestedEmptyTag.
     class NestedEqualTag
              NestedEqualTag.
     class NestedGreaterEqualTag
              NestedGreaterEqualTag.
     class NestedGreaterThanTag
              NestedGreaterThanTag.
     class NestedIterateTag
              NestedIterateTag.
     class NestedLessEqualTag
              NestedLessEqualTag.
     class NestedLessThanTag
              NestedLessThanTag.
     class NestedMatchTag
              NestedMatchTag.
     class NestedMessagesNotPresentTag
              NestedMessagesNotPresentTag.
     class NestedMessagesPresentTag
              NestedMessagesPresentTag.
     class NestedNotEmptyTag
              NestedNotEmptyTag.
     class NestedNotEqualTag
              NestedNotEqualTag.
     class NestedNotMatchTag
              NestedNotMatchTag.
     class NestedNotPresentTag
              NestedNotPresentTag.
     class NestedPresentTag
              NestedPresentTag.
     



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015410423140533011317 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/class-use/NestedWriteNestingTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/class-use/NestedWriteNestingT0000644000175000017500000001303710404045226033632 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.NestedWriteNestingTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.NestedWriteNestingTag

    No usage of org.apache.struts.taglib.nested.NestedWriteNestingTag



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/doc-files/0000755000175000017500000000000010423130300027725 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/doc-files/nestedUML.gif0000644000175000017500000002712410404045232032272 0ustar arnaudarnaud00000000000000GIF87a«÷€€€€€€€€€ÀÀÀÀÜÀ¦Êð@ ` €   À à @ @@@`@€@ @À@à@` `@```€` `À`à`€ €@€`€€€ €À€à€   @ ` €   À à À À@À`À€À ÀÀÀàÀà à@à`à€à àÀààà@ @@@`@€@ @À@à@ @ @@ @` @€ @  @À @à @@@ @@@@@`@@€@@ @@À@@à@@`@ `@@`@``@€`@ `@À`@à`@€@ €@@€@`€@€€@ €@À€@à€@ @  @@ @` @€ @  @À @à @À@ À@@À@`À@€À@ À@ÀÀ@àÀ@à@ à@@à@`à@€à@ à@Àà@àà@€ €@€`€€€ €À€à€ € €@ €` €€ €  €À €à €@€ @€@@€`@€€@€ @€À@€à@€`€ `€@`€``€€`€ `€À`€à`€€€ €€@€€`€€€€€ €€À€€à€€ €  €@ €` €€ €  €À €à €À€ À€@À€`À€€À€ À€ÀÀ€àÀ€à€ à€@à€`à€€à€ à€Àà€àà€À À@À`À€À ÀÀÀàÀ À À@ À` À€ À  ÀÀ Àà À@À @À@@À`@À€@À @ÀÀ@Àà@À`À `À@`À``À€`À `ÀÀ`Àà`À€À €À@€À`€À€€À €ÀÀ€Àà€À À  À@ À` À€ À  ÀÀ Àà ÀÀÀ ÀÀ@ÀÀ`ÀÀ€ÀÀ ÀÀÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ!ù,«ÿÿ H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\ɲ¥Ë—0cÊœI³¦Í›8sêÜɳ§ÏŸ@ƒ J´¨Ñ£H“–À´©Ó§P£JJµªÕ«X³jÝʵ«×¯`Ê U©Ù³hÓæ$˶­Û·pãÊK7®Ú»xóêÝX·¯ß¿€ lzöY¶CÖÎ}’°ïßÀƒmÛáÞ;q#/ÍtyoçÐ*_XüŸ”ãß;ð.:ÍéÞ/V`_š|xðÒ›ÜàžÁwðÛübá‚…_Ø3ÿœ¿Åñþa„^€¶ h€ÿØÃÔpÀØsO>E\ áÝý2dÔ˜ˆ ÕF"A' „žz±‘‹åIgÿ‚R”bA7²”c‹8mF܈ –ØÜŽ1*Dã?ï0%Å~ÿl±Eö\sÌ1FSÄ…ùäÀöyqÃ@±cFcþÈã?9Þ8 ˜D¢Db›••YãDpÆ)#h8]šoªèçk-Ö‘ˆjÊ9PM½cK63Ì1ýô3e•F\€†pyÁ;ðÄ&𰙦ž‰«…fè(‚ŠÛªhòªž¨¯Ž:ë« ªH¤œ§ötäœ/âøádæyО€R'x‚{¬7¾£€SK.3Ì0Æ é1ÆLy –G\è—_ÜÑ]²æªëºCÞªn»ë¾¶f¼È¶jï¼8¦k«ºï®êÿ/»ðöêê³ÍÎô+°Éžyg­ª6Ü0€Å…ªj»¬êê/¾ÿ›ï­ÌÒzñÄcÖk1Ь–êâŠ'›+½üj<²Ÿ>¦bŽöØÃSIÃ?×£­1ÛN:éäóÀ–øû¾éæ ¯Ó(WtòŸöÞ/ª+ï u ÷ëõ²#u0Â% ›^Õ³ü§Èg¦m±Èn#»fÜc]ïÝj[kÄm³LõßxS £Ü£Ö¶ÃU›m¤À¾ãàS@ì, 0=k+i¤Åx{D¥ÀwÜãaL‹}ºuYƒ¼¶Âr狵붚Úñ¾´» 6±DM¶‘o#¸¢àŠW¬xï‰n¬‰>ÿüêk‹ªüðnë-ýïÏ>uàÓ_<îéåxÏ=ŒnÀ=@<%¹0Ó-И÷“¹·ã`ôüáF¹LªrÓGMòí̃ó’GÀ­ñëj\3àÓöº掻ãÞ‰8Öº·ÉìXlKžð¢÷7Ö 0xà È,í c´^ß½Ž{¼Ñ÷¦pÚÃ>ãGùœ9aøÐ‡>3û´U¥!|kKH£ß>`£] 7s À¼V;òn…w£[ ˆ¸*Òë_^|š™ª7#FÐ|^ÅNxEêåƒ$4[³÷2nŒtd#ô<È6*{$´r€{l>Šÿú¤®5 r;ã‡y­lõƒ}Eœ’æw¥ÎiÈ_ø‚Ò>²?’iTŸ2#©Š·FŽáÑ”¦´] cg;1–Ma\ “Ï8Â\¶J€´ð~LáÐo©Ó+h57汎!» [Ö<ÕÒ„Ét` ² ÙãE¼äú •ÈEè[Ÿ¶ Õ"LéÝ‚¥Â•DüÉd—•áåÌô9(gùhvÇR8Y¹ò]mS¦2¿h²ˆQìaq‹YuŠË:‚좿LY3 Ë."oq9R”=ºs ¹³—t_úV„rü@gå|¶- =ÊJSrç16É¥Îmò -Ágÿ>ùÙ=¢>¤Mª3 æK’ª„GÕ¦Ô)‘7<ÀGÐ)·´…Rúl--gä`J¹k¡Ïr(E©¤tJ©oQéù›MRù£;£6uy¹[êïªõRYxê>'òŽ`Èh›cç¶"…Ãl #¬.5'ú&)Œb¨­îÃ\¸²ä€+ØW*kæjžºuGBµ ¯R;1±¶µGMiïjZƒŒô»j>„¦ØH]ò«ÆB YÉ•õ¬+Ý–N³úNÜÀ`:ÍlÏóÚÝM×®i)”êjf&Ö«X=‚кeÓ´f6}B+q£„—Æ”‘•Í–Z-ðÜÔ÷ªÁîÆô8 XþvF»áîî`Ø,!öJž’¤¸u9ߊ“«*«ÖÛ ´Sø ~ðhøîÔg®ÿÚòS8(N±Š…CUŒôö±OÑ ®¡UÉî4bJ×™Ù¯4¸_¦õ” LÄÞp\1Cbè˜Ø¿­ùUCÉód†Ô …ýBŒ·´Iùñ”h`–§•.Éàn¹RCHéûé¾ú‚Ø.02& €x¦ÉΩ2”¥»Ålr ÏÑsC¸;R{Üá°‚ŒïS´qeI~̽’xuJioUŠJcî‡6|7?÷£dòž½çWTX„ªîeHíB:?ðùÂ}¤UÊÊj>ŽéJMš³áº± :=lèÂÇÔPfu©™ìLT‡(7Êžˆ«§ýâÂà FÈT¸6éhùÿíCHB¤0\ãœ)w‘íßh/[2EUŠmw»˜Úø¾r¾óßd«úÝðÖë/„{|¯ú5øÁ÷b(Aöùß”™èŠ'NñŠ[üâ©£÷ÂÑr*‡ÛQã´øÆ‡5…/¼"V³ycò“{*â"w9ÃQ(M?/§å2_ ÌAžs³ ŽŒ²äùÌ'3!E¦`iêo²¦)¦jЃzŸÛóÔðÍnÆä+j¤Ü4â}¨tB¸T¯xê¦#<ŠV¬ÉÔ©^u>;m›-{l¸.EØÂö”í—ÖäUÁ¸4£½Þ}çÊ’¹jï/“¸ÞÒ±Ák4c¥yË(8K\ÝÝCšuZ­×¿Þö¢@½æv,xÇõ%Å*nŠ&›b®yÀ?jqñ~Ë O{ b¡÷’ýëgûhºNõb4½»RϬÃlóÿw»_åÑ×½µGÙ1ßO,þu…¡Ç˜1?ïÇÅÇûøÖß^Í¡:µBõúÓW=âH}Á¾²¨ÉMR¿ï®¯Ò–=Ýð‹~ËcVôx2€Á2zrGÃô{‚£2áw~Ã$Q­¤€Ë„Az—z|í·|ï·MñÇnî'wVç|¿‡éÇ~­ç,à§BØ3p"t€*GGµ'~ÁäÄL¬#=¸$y$ø?û•~ˆW}¨ø_òƒ[‚:ȃû‡zH¸zÚc{ÍÃB2Ø},˜EPˆ}~Qÿg…SˆEôMIøE$èE&8v{„BX,d¨FK”÷5›1}=R7Bwçx¦Û£F y¬”{‰ÇPÅ{W7²ÅPÿÓ…ëG+±ä‡`(T ˆZ1g†H1[×|œtÇ€Dèy×§Z;‰¢Æ'H'8—ˆJçs¥h,%7ŠžHrx’‰#ÆŠ­T8‹GW$Ì'Š•h‹}µŠ»È‹÷„‹¹xg²…qÆxŒÈ˜Œm±_ÀÈx¶vÒ%‹ÍH6©8jiT„¿h%&ÜxØ6Úø9Wä¨"‘jHtCb³³2Ï[ïøwëwŽNåöˆŽéHvº¸8iCXƒ:X‚ýw…Z˜÷ÿ¸9 7oëèŠè1²äu w‚lH ƒs´y‚™RÇÄHt¥Wzµä2e3‰k”=y‚*‰“&’"Étw=‡N7ƒÍ$or‡‘¨ÖhŽ4Éý!Ž# ‘T„y»1†ÈxÄÃtÖ³}ix”62“XÙ‹KÑ8i„KHPG†÷G\t~Rè[IŠD¹–ÿá&^Él$é†í‡§øQ%ˆ¯¤‘jé–Q×–~ @5—«6zgyˆU†– ˜‡lH‡˜ ¡•’‰†pyеÈp•‰.€¹™„Ù•Ÿyt”é£é™/Rš¦éƒ )v¢Ù™©éFùš‚Dy™¡éŒ¨)›…隸ٗHY›‰q˜ÊœÂ9œÄYP·¹›J¹¨•›È‰0±Ùœ7©?=i›º yñœÖ ‹ ÉšŠqœÙÙÿÕ)›º¹+ðf˜£Øpÿø>êÙgÊ©˜° ‚”éíÉôiÕIžñ9—X•×?P‡_xŸõIºJŸ¿ –ÔF.óPa ¡(y ÊI ÈžZçž×É MÙ5¡ :‘TŠ›š¡z9 µ"¢©4 !šž#ê&%*ž`Ç(Ç¡«5¡/jM)£3Z“5úš'Š¢F*6òy’?j@†0*–AÊCjšEš¢Ú‰ŠìXŒþyy&9yý¹¤QJ£U˜cšy!˜S¦©¦ ¨p2¦‰¦pʦ@2§[9§fZoiJ§ž²§•i§yªìɧHj§Xi¨O5t†J¨0ñ”Œªšnv‚ꧺ4 ‹J“—š¨“J©•Ú¨ƒ —z¤¢üשåù© &˜£Žjª Úª®Š™/'©Zœ¶z«¸jq±:›ë¹ª¬š«À¬ÂZ»Ê«½J«z:¬Êº¬ÌšÅê«ªŠ¬Ï:­ ªWÔš­E)6¨­ÞÚŒÖz­Øú­äºáz¥¡X®êÚsç*®É¹®ðÊ®>÷–ñZ¯2×®èú®öº¯Ë†¯ùš®üx°úä¯ÿZ°{°B°;ŒÛ°5¢° ˰;±T¦¢I± ±›±+ °¾ù±$[×i™%›²s§™«².»u,Û²/;³wVo(K³8»j´ñŠ9Û³·³7ë³B³6˳C{´(çŒmŠ´L{¶´MtµÜú´F+µVKª°É!{µ=»µjv\¶‘z‹Z+¶fˉ%W¶g»¶¤qªÈ¶pûžn«¶q[·Û™¶ok·zKJ™Ñd^»·ûú·Ý´€[¸ÐŠ·tk¸Šk¬?›·‹û¸²:·Ž ¹”Û±JË·•›¹¼I¶“«¹o+¸„ºž[¸ +º`;ºŠ[º¦{º¨ ¸ª»ºƒÛºuûº°»²Ë¶´[»‡{»f›»º»»¼Ëµ¾û»Ò¼a;¼2Û¹Æ+µÈK¼Œ»¼Lۼɫ¼Ð;´Òë¼Ï[½][ N¥½M{½ØûµÞ›³à¾â;¾p3[¾æ;–èë²ê»¾ìÛ¾%û¾ð« ò›²ô;½Âx¿›¿õ;üK±þ«¿ûÀ;Àÿ À,°LÀ¼ÀüÚÀ Œ£\¯ìÀÔ[ÁðzÁœ¸lÁþQ‰üÁï6 µ$¬®&|Â(œÂߺÂ,\µ.n¬­0Ã<ÃZÃ6|Ã8\Ÿ:¼Ã¬ÛñúÃ@ÄBÜ©D\ÄôzÄ®šÄFÜ›L\©N¬ÄKÅ„:ÅOŒ V̧XLŶ»Å#ÚÅY¬Å`¥b<Æ\YÆaLT yÆjÜo'&·o\ nìÅU<ÇßYÇvüÅ·xl£ØE”zÜÇkW€,È©šp´hÈ»È2œ”ŠœšŒÌÃÙûÈwZjmÉ”¬˜,É“L‰ÍJ޻ɜ¿ ËrÚ+Ê£LÊ& m§ phzs¦ ½¨ÜÈ«ËxC$@èÈÁ;Ë´ÌË¥l¿ZW(/$Ž¿èËk‰Ì{¼Ìœ›¢?GÁØçK…¼¼ÊœÊª¬|Î,~õ1^hƒóè10sP(™îJ¹ÕÌÌh<+€Z¸{jCKŒ‰‡y誊ññ®ë¿i¹²Þé÷ÞÌE«ïþÎïýžï—KÙY»î_ïáD{ë ÿï@«è/ðo± Òínï/¨ñðÏqÔyãÎç!Ÿ]øìòó*¹*¿ò,Oßû¾Ê0qóš˜ò/ò6µŸ(×ѺóBá¿]|®þÁB_p®ôðÞó>ÿóJïð.ßô5ÿô;>ñ9?õT¯àòþéAŸõÜýñ®ó^Ý`öK?öǾõ\ßõhOöeoögßö˜­ökÏör/<ôyu÷x_³Ž¾÷£|ßå8_÷<ø#ž÷zó†OÆgè[ôÍÒN&ó‹ïë”_ù‹>óy‰šïêo?ù™ÿùµÎ–ß.}§ïÛhúÞÞú«¯ú¬ÿú^^ø¤_úŒ£_ûÓØ¸ŸûºOרÖ3òûnûb:™þ*üÃOünü´™¯T)öM®øÌïñ½Þj©Ÿ‡Ùé½üÕoý¥­h×€^˜êÐGìU݇ßû¾ÿ_ýôÖáêŸ{îœBy>å² ¾! ù¤›à˜Ë|àß@ P`Áÿ6,ø¡Â†+Z¼˜QãFŽ=~ÙQbH’%MnyRåJ–-]¾„SæLš5mÞÄ™ó Í”5füy‘áÐB¤è(Ê‘Au>]Ù*Ï©U­^ÅšUëV®]]JõjÒ)ÒŠDšÅˆÑlS MÁ†…únH¹síÞÅ›Wï^¾uù Õˆv­R¢G•žUk1¥ß¿07> YòdÊ•-O~|YèOЇrvšTaФïf®Šº¯fÖ­]¿†ÝRulÚ²õÎÞ‹»önÞ½}ãÔý[8àÛµƒGž\¹qðã›/ÇúœªqèÕ­_G.£vì9¹ÓüÞ5|wòåÍO×9þ¼ãÕ»Õ¯‡_>ʸóí¾gïÞþ~þý£Ö÷¯?ü²0@Œ­ÀÈœ3j¬¯MÁÀ8ãOÂÔÄ0Ãø|Œ-ä"­¬›Àú,=Ö,¼PCÿW„E·3̹wZp&_®5d±GõÓêÆ‡>#Â":lHƒH ²BŒÐH)ÝB’°Â†l2JÍväñG/¿´ŒË‰lIÄŠJ2"K»RÍÈFKK°‚2Ä7¥¤Ç¿ÄôL?ÿÜ“ÀKÌH qŒr-8i,3ÍÎM«Ê;'mÔÍ<#m7>å´SL¯ºQ±K›Ì³Q=+-õÔ1ÏL²ÐVY]5Ö¼6ÍÑS[oí2×PÉŠÕÒ9/]Õ••Q4)uÕÒ^1ûV\ŸÕÅ[êN7²Ö4Bã¬Ò×`ß,ñLÏκÖUª•ÌÙ¡e·Ýÿ@%©´¢˜ O'”élË+ŸÄ—Wcå=”NÅô5MR=S=wf˜>x|ð$ócÖ·„Æ;/Žø]‰ÑµŽcð2&ÙÝEŽÊAºTþp,y«CY¦˜K¦™ºèj¶Ùbœwösfž!óù¥ &:PñÝLK¤”žhÑ¥nàAó…ÚЗ§¶é%µ~úeʆ¶­h±1;7YŸz«l™‡S{·l·ƒô[¸·»®m•ì~;ï\3Dëf‡af[oÁÏÃû¾ƒ&®îÀg\ñ'&°-³k¼òå ‡ r¿Õ¼ãf-ýóÇÿŽy„]Ç:ñ¹Wyå§?­çæ1+^GåT§>oî«Oð{çï¾|âÿŸ_ÚÒÞ|÷­b?¬ø7ƒmþÜßÇßÄžÙþÞ~ºó¾ OЗºìm{D`LüÇ•2eK—K`YÒÀóÁ¬€x¡ È$¸Áö)ƒ"iÛÇAŽðG"aºWBš0n„» WPø©np†ðÛÏnx¶p‡)ÊaÌvøÃ·ˆ{ƒO Á"FðˆHÌ!øZÔÄ>mâÝæ˜HEvÊŠwsÖ¿ÈÅ)ö…kQsÐõÐHµ«1klL£ÕøÆ¤U-:J\WÈÈø¾ Qcb"¢÷=³I6šÜ ÿ§'H·e1+TdòÙ–ç8‹:â$#ùMjp|÷+›9ÁDn’u_ÜÖîâ¶O"aøyb'MY+ªÌe+ž'©Ì`¿\[ºÞËY‚.”à¡™ì$§["‹UX2ž+±b³qjÓN*W)^~RYQó$?v™QΨ”ÖÔ6‘Mn=s|Dúf¯’)Mr–óçDg#ƒg£yNêUÃ"“¹FÕOzž¨’ä‘e>¥´Zm³Ø*L@Ý™­pÚÇž­,£B‹ ¦_¡ñèÒÀi/’Æí¢ÀÚ¢Fyf·„2ÏcøT)ÍZŠ?K¶®;3©sº¥™§;…bgˆÇ1þÿ¨}ä/XÔ£6̨„û£G˜ÚT“‘saµ”ŸJUZzêëj›ó¨Ò•‡eZåê³0×SŒVôI£¢ØIéB:³6Ó§i½ÕZÛê$î•s~+ *X„öí¦xõT禵bÙË3Gº—™8·/¾,™uÂ¥H·VÓ( r«ˆ-‰b÷ê-Š’ö\|õV›ºu¬4LM¢A›˜çYÐðtD×µº‰¨Ýþó›¦ÔHå[Öšë³Iƒjm½¿×Émž†5•sa[Üÿ ˺} P¿«ÜæÌ¦«mtz(âÂê[Î,ot{M˜r—l½û®;Ë%·Ó’uMÉÂ/©‚+°4MTI=š«ýç^ám¯µ–©f#{µ5~”^›}ëk)‹àza7‰#ùF=“ò@R‘«W5ŒENZÔ­ã$1Qx¶\÷öψ. 1aMÌ Ô8»õ»ê{¿J>ÏØ5,Ú†ããLõxCáƒc’ëØF¦á¶kb­Ú¥,G7 Y, 2W³¼¶-Ó2eöëòQÃä1«P6ó+³JÓìaqÚî8DžËšó)ç»Y¸v•„³ |׌uXyÙM)èÐÆ·{Üál!÷Ü^vÅŽ#í¢õˆ±×8z•tF–6÷Á2Ï@Ì´ïr,ÕG£¥¡–Þ¦)ÙäE¦æÓH¥E5!M6Ç.Âl„."®ÙŒÀ“ M×-üu ÙQƾ5 ¶;Zc¯ïgÉV6±1Øl?›ƒ {u©­=k_û>ƒvÃ-Š,ÑWÜv˜6ZB!ÒjÜ¥îÍ”›,ï(SyÞö®÷½õo;v77Ù.tº÷)ðíš±‚ö±ÛµæPréÝæqU=8M"Üp·5ž9:qZZèá’õO,Q3s¼ãä²ø´C>XúžÂ¬¶M^Ï ¦¼¬²–Y?)Ë&Ìòƾ¬¬¿ö%î<æ6¯9ÄÖ)àM—™Äº.£ÌýqÒè(E:¨¤MH=³·p«¹>6öýã¡Ë²-'&,LÁìì&ÙÝ“í³W.ÌjïzyÛNÝÃáýšñFtÖo΢T ÆLm:~)zt¢a9›‚Ç!®;¥"ñ|¿VðŸ™级3¥ç”cÜyï}~á¶Z±\I/wÓ7õÜ5䇾rh[Œ³Y}·[_û¼þ13¹_)$Gýú›²Uö#Ó4èëS%ÿ_¦Ê—Y­@ò¶TSÃ~öµ¿}îwßûßøÅOk¡úÇÏ#G­Í .ý9µâºo"Zatôº(ë Æ‚µû#Ïz*ÊŸ>µ<ÇJ0ûË%þ‚-Ì», ˬ´š>¹Æ##ÿ ¯üš¨ú"@Õš—ez+H9@ „0¬s=­K!°bÑÀ<ì+r²é[¿\K$ò+“DÙ¦Þº<ÑòЧá"­¨C©qó¸€S?!@1ôAP:—+¿Áÿ¨vz( Â(œ@ÿR¼Æb¼åÒ:Y,%t,¬´ ”1õóBtA|ª4;©ñ2/ô¨ L¯+4.ºê½©èÂûŠÒ.ÿü'Ú%|-Þª< ü9»Ê¥ÌÂZcBU"9ç:¼b±/*Œ­Äà¯W—þŠÃb!C¢³ÃÑâ;GôCLlÝ ®c©/ ´Dí2-üÓ»MTÄIk™99A=$‹=|²Ÿ£<$©€©¬JÔ¥3ªC7,D¤DSô-$—HD¯U\––C'B( Æä=t#B<|®½›ÄÓÂ?6”¬n´ÂTáhLÂ*ªÆKÄû9=mlBs4i4¼@4e–x*Gpf¢Ãrã¢^B;xdÄÄÇGÇázCÄ /úBÅ@ÜÁ—3—ó¶ã+°ü“ªûÅzá¹ó’ºýêÅÄÄ—Écš^ò¨³ZB‹¼ÈGz¡iT•vÆ4ÏÂ7Ù¿%ƒ2&ã7äI”ìIÒƒ%N„É{”Éò3Q¸¢|G—4©rê7çË¡üÇsGþ›=øH-,ÛJ¬d¹àc!9›GMéJ¯Ì¹ñCË´T˵d˶¼º¿FWüš ¨42±­”ÏóŒ*^ƒOgëOÿ„½kÛ2ýT¤@Bи²„Ý#¥ê¿½ò¬! U7 ·ËqУù0 %ËìèÐÌÁP†QÝ<휩¶ªU´å6ÀK«è$P1ã`Ñ0™¤­HïR.­Põ2½Ë©"Ò"­5ÒuLÒ’û1&¼LzÒ£¹tƒÑÁ«ÒY‰Ò”ËÒýÛRf»-¤Ò1‹ S•ãQ‹üÒö;Ó‹ë8Ê\Ó†jÓ¨ü)µ¨8E¾9•Ÿ:O<¥:=e aP?•9@=¸;Ñ2SC}¿…’QB…9F}Ào SH5CIíÄÛ°ÓгTlÄT6³MÍ«HûT‚”!Q­½N-ËRíªPeU¸[žWeJâAÕ>S'Y =ÅU3Ñ]mUªÕåL„8_½ë#ÖÐ*¶ce¥;RV‰!Ô`œ^kÖ3CÓi]%cµÖ¯·lBåVêShÕ'üV¡q·r%5oEWŸØq…NS[WïPw…@yW;<™{]ÌÓWýÁ~U%Vë¤WœùmÖß,XÕüÊ~•6ŒüV@sØYQ…%<›Xƒ»§Êi+‹´WóXU£ÖŒ}Ó?ÍVÜ@X’u Š9Ù”QY«{³ˆÔ—µºeMXg¥YMAÙ–²œm§äYóY½Ôm™¡ÕT·TÚ¥]ÚüaÚ§…Ú¨Ý>¤]UêtÚ:¤Z¥L>£ÄÚ¬J³ºZâóÚ¯MÁ°bÁ•9Ût…7¡Í¼©2|MÛª[ãJ!dÅÀ²Ä—šÉnL»õÈ<­BÜÛƒáBú3',ôÔàÿÙ;ÍÓ<Ü}í ­¼ÖÁ]Hj@Z @$™Â]<ÁR)ļ¹¾rHÈš<’ìCt¬ ë@“4DÎõšeÆÝGP¬Çn.9t¶ƒ\¸ÜÆgÌÛoTC+©G4(œÝýZ’­A•—¯ãGdìCß »/¤¡Å]£ÇlÆê{Þ†)ÜÁ¯3<BÇÐTYÙý– _I@¾k»éZë]nŒ&qÔÇõuÿuHÏUñËZómÄGÝåA¢äǪýÿ•Gê5ÇèeňŒIÉz`ÈÒÚxEàFÌ[îIûC0¨k<%O´àù*-ím`ðB<¶¥®ã4Ê%_£0éH[ìÜŽa̼DyʰÅII‰á’È­Q¨,Iþ¥Z ]à);Ï™Üéea$öàñDÑ™mâ$¦YšdÞµÕ{RÔ~âÓâõdaòuÒNëÚ¹•Ú4VcìsÚ5vã7NË1–ã9¦_ã:¶ã;Æã<Öã=æã>öã?ä@äA&äB¶U8FäDnKC<àƒ]FÖK„d›säI¦äž%A2‹[H“àä•\K66ºí[¡E\“}'º,TPÆÒÑ2_;Û܆­ÜÝõdUÜöKO¼ÜA$]Pdȶ°*â\\H§S]Ìš`Z®­ F•rÞ ÔA]ÊÀô]ÞÔræç5`c¾ËëÍ­ìÍ_xâ^Dô^Ö_IÔæôr^Y¶fĪàƒd:úûHfCÃxçO>ç=KgðZCodào¾_xöFy/z®ç»gùbÈÎßN¿ÅG…$®R|hèc ÞH@ÆE )!.à~\äGžè^åÊbåÛ¢-éE[b”Né—^i‚F20Ò.ŽéP«ä›–´œÖi{VäŸêðëé¡&ê¢6Yê£Fê¤Vê¥fê¦v꧆ꨖꩦꪶj¨ê·m´¬î7ŽåjEÍFÝ¡4]-×0W±Ö?´–Y=³ÊC¾@EW³nëçYµæV¹~W¶Nk¸.k²L»V>·Z¾þkÂ~kÁ¶V¼.lÄAÀNl¿®WÇnlÃlÆ6XÈlº¾kÌKÉkÊ~l½^lÍÎl- mÏfXÔ–<ÎæXÖ¾lÑ>lÒ>mÐÞÅŽmÓnmØ6ËFýlËVVÛÞíIlß>Và^ίFî”e×äFnÛdîäfÇä‚E>[MFj)ëf´ð$LìîM÷üÎ2ÿ†SïΤ“[ˆ= PU[Þ>¾¹µè¾4#$ØìÞO“ïôhïî6UÇÍÔéžÕE­oôæRü6D-Ã2ïEŸühònäúØh›Ä$÷~ïT„h}ìoÏÕdßUSuõ D9‡5àê`9ÝÚ ÇÝqn©Aƒ$c›uÎö#ñ64q mÕ¨SñØdïñrß÷±7ʼn<ðùœ¤qgɇä­qñ~$ˆg$'roà ÏÕêfñyQ?qù–=î ¾Óçj=G2FÿiGˆ'8Hoôë&ô)GtÈSt?7t?ô/ô7ÿóOçoÆÜtQïôóuS¿ôTÏô!½s,õwuLÇóõnõX¯uÚ»õDÏuðvUßu_Ÿõ_÷tXö4/öeïuœ+8Îÿþµ~7ÿIOýó~ÖÏ~õ?þðÏ}ê÷}ªÿîoå/»ïwþÕˆ,hð „ .Àð!Ĉ'tHñ"ÆŒ-jìèñ#È"G’,I£É”%Qªli’¥Ë˜aʬ™¦Íœ uòìéó'ГA‡ ÄI¨Ñ£5“*%É´i˧P§R­SªU‘X³¾àõ+ذbÇ’-kö,Ú´e¹vUëö-ܸrÙÒ­kw¦Ü¼z÷ƽë÷/àÀ‚.lø0âÄŠ3nìø1äÈ’'S®lù2æÌš7sîìYq@;libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/0000755000175000017500000000000010423130300027024 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/class-use/0000755000175000017500000000000010423130300030723 5ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000015510423140533011320 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/class-use/NestedCheckboxTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/class-use/NestedCheckbox0000644000175000017500000001312010404045242033545 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.html.NestedCheckboxTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.html.NestedCheckboxTag

    No usage of org.apache.struts.taglib.nested.html.NestedCheckboxTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015310423140533011316 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/class-use/NestedErrorsTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/class-use/NestedErrorsTa0000644000175000017500000001310010404045212033553 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.html.NestedErrorsTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.html.NestedErrorsTag

    No usage of org.apache.struts.taglib.nested.html.NestedErrorsTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015110423140533011314 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/class-use/NestedFileTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/class-use/NestedFileTag.0000644000175000017500000001306010404045230033410 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.html.NestedFileTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.html.NestedFileTag

    No usage of org.apache.struts.taglib.nested.html.NestedFileTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015110423140533011314 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/class-use/NestedFormTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/class-use/NestedFormTag.0000644000175000017500000001306010404045212033434 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.html.NestedFormTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.html.NestedFormTag

    No usage of org.apache.struts.taglib.nested.html.NestedFormTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015310423140533011316 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/class-use/NestedHiddenTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/class-use/NestedHiddenTa0000644000175000017500000001310010404045220033471 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.html.NestedHiddenTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.html.NestedHiddenTag

    No usage of org.apache.struts.taglib.nested.html.NestedHiddenTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015210423140533011315 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/class-use/NestedImageTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/class-use/NestedImageTag0000644000175000017500000001307010404045230033476 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.html.NestedImageTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.html.NestedImageTag

    No usage of org.apache.struts.taglib.nested.html.NestedImageTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015010423140533011313 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/class-use/NestedImgTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/class-use/NestedImgTag.h0000644000175000017500000001305010404045242033417 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.html.NestedImgTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.html.NestedImgTag

    No usage of org.apache.struts.taglib.nested.html.NestedImgTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015110423140533011314 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/class-use/NestedLinkTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/class-use/NestedLinkTag.0000644000175000017500000001306010404045204033427 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.html.NestedLinkTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.html.NestedLinkTag

    No usage of org.apache.struts.taglib.nested.html.NestedLinkTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015510423140533011320 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/class-use/NestedMessagesTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/class-use/NestedMessages0000644000175000017500000001312010404045222033564 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.html.NestedMessagesTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.html.NestedMessagesTag

    No usage of org.apache.struts.taglib.nested.html.NestedMessagesTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015510423140533011320 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/class-use/NestedMultiboxTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/class-use/NestedMultibox0000644000175000017500000001312010404045206033622 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.html.NestedMultiboxTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.html.NestedMultiboxTag

    No usage of org.apache.struts.taglib.nested.html.NestedMultiboxTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000016610423140533011322 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/class-use/NestedOptionsCollectionTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/class-use/NestedOptionsC0000644000175000017500000001323010404045240033555 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.html.NestedOptionsCollectionTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.html.NestedOptionsCollectionTag

    No usage of org.apache.struts.taglib.nested.html.NestedOptionsCollectionTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015410423140533011317 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/class-use/NestedOptionsTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/class-use/NestedOptionsT0000644000175000017500000001311010404045244033577 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.html.NestedOptionsTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.html.NestedOptionsTag

    No usage of org.apache.struts.taglib.nested.html.NestedOptionsTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015510423140533011320 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/class-use/NestedPasswordTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/class-use/NestedPassword0000644000175000017500000001312010404045210033614 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.html.NestedPasswordTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.html.NestedPasswordTag

    No usage of org.apache.struts.taglib.nested.html.NestedPasswordTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015210423140533011315 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/class-use/NestedRadioTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/class-use/NestedRadioTag0000644000175000017500000001307010404045204033513 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.html.NestedRadioTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.html.NestedRadioTag

    No usage of org.apache.struts.taglib.nested.html.NestedRadioTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015310423140533011316 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/class-use/NestedSelectTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/class-use/NestedSelectTa0000644000175000017500000001310010404045252033522 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.html.NestedSelectTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.html.NestedSelectTag

    No usage of org.apache.struts.taglib.nested.html.NestedSelectTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015310423140533011316 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/class-use/NestedSubmitTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/class-use/NestedSubmitTa0000644000175000017500000001310010404045220033541 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.html.NestedSubmitTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.html.NestedSubmitTag

    No usage of org.apache.struts.taglib.nested.html.NestedSubmitTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015110423140533011314 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/class-use/NestedTextTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/class-use/NestedTextTag.0000644000175000017500000001306010404045204033456 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.html.NestedTextTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.html.NestedTextTag

    No usage of org.apache.struts.taglib.nested.html.NestedTextTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015510423140533011320 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/class-use/NestedTextareaTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/class-use/NestedTextarea0000644000175000017500000001312010404045250033573 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.html.NestedTextareaTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.html.NestedTextareaTag

    No usage of org.apache.struts.taglib.nested.html.NestedTextareaTag



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/doc-files/0000755000175000017500000000000010423130300030671 5ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000014610423140533011320 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/doc-files/nested-html.giflibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/doc-files/nested-html.gi0000644000175000017500000007320210404045210033446 0ustar arnaudarnaud00000000000000GIF87aX÷€€€€€€€€€ÀÀÀÀÜÀ¦Êð@ ` €   À à @ @@@`@€@ @À@à@` `@```€` `À`à`€ €@€`€€€ €À€à€   @ ` €   À à À À@À`À€À ÀÀÀàÀà à@à`à€à àÀààà@ @@@`@€@ @À@à@ @ @@ @` @€ @  @À @à @@@ @@@@@`@@€@@ @@À@@à@@`@ `@@`@``@€`@ `@À`@à`@€@ €@@€@`€@€€@ €@À€@à€@ @  @@ @` @€ @  @À @à @À@ À@@À@`À@€À@ À@ÀÀ@àÀ@à@ à@@à@`à@€à@ à@Àà@àà@€ €@€`€€€ €À€à€ € €@ €` €€ €  €À €à €@€ @€@@€`@€€@€ @€À@€à@€`€ `€@`€``€€`€ `€À`€à`€€€ €€@€€`€€€€€ €€À€€à€€ €  €@ €` €€ €  €À €à €À€ À€@À€`À€€À€ À€ÀÀ€àÀ€à€ à€@à€`à€€à€ à€Àà€àà€À À@À`À€À ÀÀÀàÀ À À@ À` À€ À  ÀÀ Àà À@À @À@@À`@À€@À @ÀÀ@Àà@À`À `À@`À``À€`À `ÀÀ`Àà`À€À €À@€À`€À€€À €ÀÀ€Àà€À À  À@ À` À€ À  ÀÀ Àà ÀÀÀ ÀÀ@ÀÀ`ÀÀ€ÀÀ ÀÀÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ!ù,XÙÿ H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\ɲ¥Ë—0cÊœI³¦Í›8sêÜɳ§ÏŸ@ƒ J´¨Ñ£H“*]Ê´©Ó§P£JJµªÕ«X³jÝʵ«×¯`ÊK¶¬Ù³hÓª]›€Û·pãÊK·®Ý»xóêÝË·¯ß¿€ L¸°á¹l+^̸±ãÇ##=L¹²å˘3kÞ̹3^É C‹Mº´éÓ^=«^ͺµë×°9£žM»¶íÛ¸sëV(w·ïª½‰ N¼¸ñãÈmÆMμèòæÐ£KŸN½:j¸Ö³ßÄ®½»÷ïàËÿùv¼ù“åÏ«_Ͼ½{÷ÜßK _`üúøóëßÏ?tz‡äG~ÿõgà&¨ UJàAÞsÀ;õ X¡[ f¨á†v(SmÀ=½cb}aÁ<ðö˜gá…3ÿzhã8æ¨cB d[[tÀS`Ï=ùñÀù8pÁ“PøËPÁ1„áC5bù_–qYPW&Dczäå?gbÕãŽl¶éæ›4&ôŽ[RÄøÏ[´aÏ5ÇcÄ1E0™O><À¢7üT˜efÔhC3˜¦˜VÄè¤,‰©UkÂé©qˆª˜UÚW*š§Žjês¤²ºê}¨º+¬ªÎ b­¸¦ª«¬¹òº+­¿Þl™½Âú©T”Ä[ïØ#EÍ sL?ýôù§Lðä†^ð<]:뫦’K.v"i¬h¶k!}é=š¥¸ãÖËÝ•÷Â+é¦åvÉ/ƒéÿ+ðnÿl0‡ÉôŽpÕ¹Ì0Ã3 µÇÓç1‚Á¤†~q…8‰K/†$ï‹j¹øþÛ¨ÉíÚçrËóZú®¾(Ï\óÉ'—W²CðvÙ2X ,ôim´Aûhˆn%! ?ü@\ÌÄÆPl­µG<Ï…º2M"Ûœ3ÍcY´¨ëþüîËér¹3Îo³K*ÜdÌb%}ôÞ|÷í·švûxÏ;CÆÔÂ#õÄÕR[ÌÅG`û€Ö|pÇ=SÆÜÈ4÷FìÙ_¾¬6¥`Æ,3ÝèFoݬO¤iÞÿ-ûìé iì´ó­÷=÷<»÷â SŒÄU;ÞÏã(sÀÖXð‡Û©ÒÊbïü¹Ùó‰Ê6¥ßúé)sovç&—Ñë°ÿƒžûûð«{7Ï¢[ç~ü-%Íû÷ðo1Sã‡ðàr8aЀS3Fò&ö§!`¬P]‹Þ>`­]=óÊúnV6œU |’aÅç=iЃå{› É)¼µ0Œ!øÆ÷3ŸÑ¯"n«Íýdˆ’ à[0Q³¾1-ˆ ÀÀ0ÔøaÀ#BLbýH^ûäèjrO²À¾ðµ`mê‹Yh¥-õln,[“— ”/0¦qulá køÛñðŽûâ Y7³–ì` d¿Ð6›â‘$»3Ò=ìñFyH”Ëá–Œâ!obÓêGút‹ ![‹`õ>dH˜”’:ÿv<¤*Ûb=–0^¢ëcÚÖ&>Zrn­\åvp×,{PèKÚd1¢¸<ã3’0øQÉÅMbU“ ú´ÉcTÑP“«âòwÊ—tS:©Ô¥8…òͰäІµlÉhB™õ蜤)ç81N¼á8B5+6±apjÃ@¦$·LÅA¬xŒæ0«UÍkaÌO‹ŒŒ<›SÏyZT'­c-µÇX²Sm°ü(. ™Ë‹šwyÇš´µÈe’bÔ Ä„!ÐdN²xMF1Ž—Ðå9NcƒrÀX„€+l31MNEMÊÔ™$U£§ëhøè&Òñª®,iS3…Òƒøò“Ã$g>®öRjE ÆBjjSġƤX5õÉIÜÀŠRËSÿ³Ô­ú5S´§-ý8ºª¦sªgé_×Óרã±\Q>óy„«Y,š õ©ñ„P¶ÎÊd¦u*±…Zà®?@íÒ²WPuu±°]IkY HõQnr{_Ûó4ViöxÃV:¨–ê¸}ªVÅgÖGö³˜U€gßÐVr ?pÁ~àìÞ`»à2Ël‰óÛÞš·#ã=¯z™R^‚øò,b‘ÖŠ«1¬ýi“›t 11éÓþ3­— Là»ÝÕ®õò¦Ÿö®÷ÁŽp+yÛÇ"@¥_ˆo¡ªø¼kfíßT—k±åMkÄd^—‡ÚïºÀÀpƒ ²¤W8–°ŽwÌc¶äØ }l³îp€XA¾-ÒÇõ<ºª²ÕŒòŰå'÷à ڽA‹ïzƒ.š³ÁǼ”÷öÇ ²šíñ"}á H¾@×°e„&é3Gh2¶ TÝ×Z4^M$^0›™ÌˆN4`M4;dÍ~¯Jð#pKcU\òó´v„!$! R‚®ñŒoõ2È…ÿP˜ÍêV×äаu´E"Më èִf­¡]ÍkùõúÕ¿æÙª+´ë`ÖA¶FFˆìÒ¯v¶R6»¤-í­î66ØÎ¶¶·ÍínûåÙÆþuµ×·C•Éñv$…öBVÆÑsóh„õãHšÄö…ûÝãŽa¾½9ì{«×°!K6–ÜýÁ9:ŠàŒ· ×]¿¤Î»„õ^¸¿ÝÙë}»DÖ7)ÀMHº} km—RÈEÎqX¶ÑŒ¥ó¸ÏèÇŽ å¸5#VkxÛUÅ\d wYÊF.H}ÙÖçXM# ¾%[eœLý>¯Å¹¹ô£Ïnã4ºU;jòv²ÙÇzÌ­³vÓòët‹wHz…S~9G½å~XÑëŒóY¬U)ßuƒC^]v£º·r¿MMªhP§gâ©:üžؾöûßoÿô…þòæúzHaÕt_žö ßãôµýÖúÝo»éeO}x¶¾ð4÷ÞgÏõÎçœù¼É½CþFsu°{7{Î(þvA’Œj¤r=3r,Ó*6‡Fá#uêGr¸´:ªC|;‡wÿ×nÖ'yÑGöÒ:ä†{·³|ðç7ö†~ïÔ~ÞÇ~ GB%8ss—wµ§‚-8>àg{‹·~(˜‚é÷yì$~ïG{îç}hmò‡€ÿ¤=‡>­ÓUÒwu›7&(t5È}=xw8È„¢{SzJHRÌæ„¡÷}GxB+4mdÔB.×Èh!ø~è$t)÷…Çw‚wh{$:¡‡‹§v[8ˆ:÷J˜—z7øré—6™7utè67»vêÓh÷xgn¨NEøzô§rbÈ‹576øFƒ%y>÷G·xuRwŒ‡h3[˜zø8÷qþ€€tKm÷r,7tØÈ‹Ù‡‰÷ˆ¬B„’ÈŒ_h,–X{¨ø*œ¨Ž·.XŒò²‡Tg>q÷zV÷|›W*ëm7ªhzþ‚:¶åFC¨²˜|ñ÷ƒµ¨JéŠM±ŒaH Ó…ÂÇ|àUq39l†ƒ£˜‚¸†-xzs…©¸µ‰/¨†'©†«ø±x|™BØ=y ¹cß䃧:©åVwp„æ†2y3ÙA׃oX…!y‰O {Qˆ…™(’CW~yØ„¤•)©p‹`H‰J9p5I‹ÿ7aådŽþ÷j‰TaVQצn·W‘î´sõgt÷‡fØpÛgr"GoØ(CH˜…cwpÈ‚‚i€¨C˜Ÿv蕸• l7†îÖ“üw–†­æ™x„q‡—tçø{N¡™l©Q É™m²š‘¢)l¤YF±ãšŒ7›‹¢š¬Ù™Ÿã+¾ ,¿ùqÀ9œÂYœz‹÷AuW%uœ|¡Ž½IœÑiœ“Hã8Øi›‡›¥ Á»ž)¡)µBsq˜n›ùJ´Rpâé–Þ94ïi&¸Ùžô¹heÉQ¬Çu~¨X÷rŽõI[ém: Z jàöŸ Jóƒ{Yƒ *Y}kÙˆ zàY¡µí3Ÿº¡^$?ž‡xA©x!ŠŸ³È¡/d¢¥¡(º¢gy÷i’þH'¡ñÉ¢"q¡6z›9º£²Õˆæ”?JƒŽ÷ <Ê{ò49¹ zqɘ_ÉT8Z¤;š ê¡ úQÆ'¥\A—ƒ›mø¢ëS•™¥*Ê¥hÊ‚":¡‘I}ïU9X‰h:ti™ùò’–È”$ú=Jº„aÚ}ó¥sŠ¡ì¶ƒ¢¨‰yê TEƒM9¨ÃwB˜—qD&0Z•Té3†è‚w¦ŽÊ¢¯“Žä§N'˜r@*™«X£Št aØÂ†¥SȈ¦šs Šªü×!¨©*ž¹¡ð¨¦}ljB:¢²J¡¹ZfD –Ùoëè¢ew*S7¬D:N¸Z¬g‰;€J…mº9@·~Dz¬ÔÚÇj”3)p)«²gš%Y}¶ZlßJ­6£¤J¡š§"å{ëÚ®Oj‘õF˜™|zŠŽŠ¨vUJ’’)­œŠ¯»‘‚§®d¹“º°ÛàxmüЧ6é¤è™‹¹rÛ¤@x¯»^o ±bJ¬$ëw!Óš«+›²¶‘¾G“Ã7³Hç²{°.Û²6Ëk«fn”ú³2 ”;»K ›°—8;´×{ »´4{²e„´Êq´!«³PKfÉ´M»¤cʤUëTÛx `¶b;¶š¥]KŸÊ ´j›µNû´g{qR±Tû¶¼ÉµX˶%º¶V´<:·sê·t«t‰·ZK¸þxÛCq‹°€›¸‹•t¼å>’;¸LÊ·žz¤*ú¥rж‹ë¸uk·z{·†{¸8d¹&ê¥éÕ¹ÇѦºžk^³y6?)´²K¹­+oájöw§dŒ–)©µØ¸µ+­†´ÄºÅ[¹Ák»«*©G©”µ%–Ï몎ȺÉÛT`ê: ‹½´+”Õ[¹Ë+®XÈʼãz†ÀÛ½24Ÿ ›½Ç«½¶‹¾¥û½îˆ»Û“‘és¿›;—Ô ¿«¤¡ëÛ¢ˆË½ïË¿ªh´Fyˆã+®ù;½¦KÀ;"O“˾à Á´iÀaG¾q½ÍËÀ¿»¿ Cþ;Áܾ³»ll´|G±¢z¬Àvy™Ò«w„ç;Â{“¹|Â[+—ò‰Ã·\zÃ@|0g»ŒÂ)ìÃE<·"ü²+\Ä’QHœÄ=ÌÄèÅ!¬ÅCÉÅR¼œZÅVl¼<ŒÅLÄ—ëÅ_|!ßYÆJ|Åf<À8Ü–ÕKÇk¼©ÀìÆzüjìth|ºO|ÇyTo‰^òÖÆˆ4ÇL¨‹LÈ‚³¥4Qi™Ç#1ÈRÚwµ«É¨{uJ”œÈ–|ÉìoΚ¸§ÜÉâ$µ Ü¡¢ìÊ&QÊ÷F¶´\˶|Ëž¡ÊPºÈc¼Ã Ë%É}‹ËÄ\ÌÆ|ÌÊ©ËÝ9[ÝDÅfrÉãÉÈÈ<ÍÔ\ͪÌxÌ˽ìË¿ ÌÁ,ËØÎâÜÛÌ£ǯŒAãk¼Îìœ!©›“çÜÍŠÍí\ÏöÌÆÁœÎÏìÍó¬¸÷üϪ[ÉñŒÎˆ,[àÐ ½Ð>Áº|£ÝÏôÌÐ]Ñ3Ñò|Ð Ñ\eÑýцÑ{ÌÏú ÍùÒ(Òä k­Í$ÍÑ­Òi2=Óc±¿GœÏ0ËüFÓ<ÝÓjÒ£ûlÒ9­ÓÞäÓF}ÔìÕl/Ô-ÔÜ„ÔPÕä¡lGÔNš“ÐR½ÕØ<ÈUmÕCÕšÃÕd]Ö×sqÖK}ÕBlÖnýÖr ÔkÍÔjÓ×gx׈ÖiÝÔt x^«×‚=Øè‰Ð~=×}Ö`£Õ„ÝØŒkJlÙ‡-Ù|íØ–ÕÂü°MÙˆÍÙ1}Ù MÓ™­Ù#m×`-׋Úª Ò£MÚÛÜדíÒ`³Ú´ÍÐKÇÌöyÚ¹ÚµhÝÛíÜÚ®ýÚýר|¾}ܺ ÜqKmÅ}Ò!ÃØÈÝIÛt©ëÜ"]Ù»$ÝÚ}ÆÆíÙÞ ÛŠнÝähÀ]°‰ÝܺÝÙ]ÞîM·çÞéÞ×]Ô;ßïßC¹bmÝêÍÞ§ßdþØü½ÞõÝßNu³¾à©Šßò=ßôácÝÐ ^á™üƒ=áþ}× =Þþá´ãàáÿà >Õ žâ ꙇvÛö­*«â2n´%á»}ãŽâ3¾ã° š,}â/ã*ëáå€àCåXy«)Âgq>NDžåbÎHžä²­á]ãTæcÞæßQæf~æAžæj¾æn~ç¥ÌÝÝt^çT‚ç€nQpçJ~ànåvèiŠ~GƒNè…^å9~ßGÑè‹^éãAéVjÚ³½éR>é–þéŸÕ†Ë§ç“Áæ žêé üè6>ç’>ª>ëžÂê#îêÞäᓨNë¾^Ó5šo,Žè»Îë¿~삪ÂëBΠe†ìdÐ~ ¶žéKÎçºÞéÆíÚ.ÓNíÎéÍîìÆºíäî[ëºo®IêÞåÞîon­½å~îäIíîö>ÝîíÕîNN©yïÏW÷êâØNìô^ïŸð²ÔMáóãlÙë e?ñà-îhÎìâ ïQ!ñßñôT´ oññïñ&¿ê|òñ`Ž,ò0ÿ„Q"D‡-^ĘQ €Š=~RäH’%MžD™RåJ–-]¾„SæLš5mÞÄ™ó"G,yöTØhF¡C#5 iRŸK™>…UêTªU­^ÅšUëV®]5þôJ±ªS­d­š »1­Òµmݾ…W¦î\ºuíÞ‹ö­Þž|ϦõÛ5p]°x FœXñbÆ?&YØî`œ”¥ZfŠ9«æ¼=ZôhÒ¥MO”<ù¯[ÎC[_}Í:öiÚµm߯[÷U…;[§ð©Äç\ùræÍ?§‰øjÖk¥C½.úvîݽÞ oÂÙSš·‰^¦z£ì±’_þ|úõís…O×}Éýë«îï¬ï#°‘@D0¼üôÛ¬³¶Ì Bª$L°B /Ä0ÃÄ(®A­Ûp´5$±DODQ?#ôðC[1ªS¤±FoÄ1¡|Ç›ñ©s$²H#Dr !ç £&ÏÛk±'“Z2I+¯Ä2Kú¦¬‰K‰¼äÏEOSK3ÏD3Í­ªÌ«Ì‡Ü NäT‰ÎÊìT3÷O=÷ä³NWÁòYn|öKý B~¯ûÓ HL((ÅP2Ü -ØÁƒ— á_hÀœa~žãaø<˜½ñ€ˆ“aîŽÁßÉL€Î;¡q˜¹""°†R´bâʺÉ=P5\"ç~¨Á ÒP|¦ÂÞu˜>Õ1‰Tìa »7Ç¥Ál~þƒ"I§66¾uÿƒß÷>öÉïw<Ÿýxç6&f/Ž”UÏÃñ0t£3äý ‰IŒ‘üd"ͨ?2’„¤â!˜¿ ªM”y˜ çGI%&ð’zl%"UÆF÷©2~œÌ`)ùÿÈ.²o¬Ì$0ñØËD&;ƒY¡ñ¶ÈÌ^vñ•Ä%0yéËþ)3”£e!Y©ÈIÎr—×|¤á*)´P:“Žïì$“IÍý©Òš‡t¤q7ÏTºïžÄÔ%7›‰Ê¢²’ÿ ÔìˆÎfþräÄWÈvºó›Ùdæ&ù9Lt¶Ó˜° hq¶ÐnÒ¡µ„h£ÙP~Šì¤…¤73ODš0“  I(£²‘T™ Ýãú@‰ÉF¢t™éŸL:Ôlnôœõ!HEY¹„U–܃ç…VÊ΃òќݨÓLêTrjT|¨F™jÕªšÕ¥O”%CuŠC{Þ«ùŒáXê¹ Ùr­éÍZZS°*¡µ ÉVÒÞÔ®‹u =K*ÇÆj“±Je(5{QšÖ¨"…[ôâZÒA–®)k^÷¹WÊšÖ˜^èOŸJP«y–¬ëaHS›U:*6¬oÅý”:ØŠ]òœS§"Ïêй&3¹™%"F)º[¼"v´²¥ `o+[šêµ°Zs«e×êQîw¸uex­»=yb·HÝna_zWW6u¹Ÿ%.tc+\ô‘uêí¬€¤w]°fw°ñ}¤XWûÝùfñµÒ$,ƒùkÐZ¸ªGý¢;yÿ›Uhº‰˜Ã`áËÃbRÄ2ô¡‡ï6E÷l†”Ü4cLÕ,^Ð(¦jQAÙB¸§l-û܈R.Á",/F}ùÜÛÎSŒH=' õ+Éæ8Á?&qóåe"÷ÈX$¨’_Édîî×È>ê”{¼±¤æ“´ˆ²–1Ëåã†øË4¼³˜»_>˜ËhNn4Éªá ¿“8R𨻦OÈzÛ&‹ÉGc—Æe¼¢ÑvJOª´Å>«¦EíÅ'Oón œññŒã“'–vpem æóÒÒ“æßƒûâRæ¸Õ*n_ŒƒMê¨¦ÚØ¾®t?ÝE éÂk‹ô‡QHëà[§ú†±Æñ®iéÂ-;Ú—îà±iÌëj'{ÖHäàÛØígÚÐ*\óŽño¯ zÑþZ°š¼}³Н†^uû}o\àO9£c.¼•K¼·6§rÍ¿bñ+î…穲8Àw^qŒ?³èéùyÕ4~œ™gè&?-“’¾“ ã|âV¿j»±¾;±mx€i¶×{'v5ËìgG{Úѽâõ’]´ wûðÂ2õ¸W¹î¸wgRuK3"µ÷Ýï<Å?xÂÞYÁ1|â¿ø`áÝñy‡zl³¼t=&òmö]¿/“Íû§ó}sæjš£ße6¾Éçånzx\õMêC?ûo\4¥g=ÜŸôzÌãåôMg³spߘÑÓÞø®òíg†ª|C›ñχ>ãE+«èWßú×ÿûÉ¿}ä'ZÕØøi5à—_/Éï=÷£…~õ·¿\ëåý}’Fè°‹Ýãôo»ûæ}ýÿ÷?[mŽ?û˜?ú À ¹?üC@ÿë­SÀđԻ .¤™é °ú³…Ú³»öâ:!A¹ ŒÀü‹º¯s’¨:)—ƒ4û@ tÀÔ*â ”‚“/àÛ)ºs µƒ«œ#Áö˜›·ëAŽŠ!!¼·ô “/kÁÔšš ùA ÂÄAJÀ!t8þƒW[5òë)­„Á/D¹¦Q˜&ÔB+ä±~ŠÂ–£B.|ª¤®•ƒ2\½)*̳:„»±Ó»;Tþ'4ÃDƒÀf«/7#¹xAŽÄÄC0tDùÓ”‡z7|ÂúC¿BÌ¿åé:yƒÃ h!O‹"< #ê¹²¦ÿ›!u«1ÄQ Ú&pbª4R'»1ÃZ73<¿é!œ*ÒA27Bf³¶n³œ5Ò¢U7.Š'L«ˆâ$LÆÍ­ûJÅWÌ´5„£iC@/|Än¤AôD^,*_Ì0rT6S\%Ñ1Æ £C2¥aFŠ®wÜœÆ9FmüMq&,Û¶C:Åáz°âê$µ‚.Î#a‚Bb'1·~¤$A›³5ÓGäGOòGH%'‚Œ/9§(4%„,DSc¤YÒ¤t²¯RH“$¥éú,£o”IÄŠ$ÈjÂH\:ɇ É´ŠÅóúÈëÉ<& *—,>>”Ÿê¦âƒ²$H=?º+Ÿl;Îú«üêH‚£/‰¬¤LÂ¥ä@)´ ³¨\)ïzJ‹ò«Ëj*¨H\K?:L¾7ë¬8ÓOêü¡.³³0ÿ£FñŠÏ3+H¦‘²7ƒÈìCàÜGM3½%Þ´Ë­³Y̳mCØÒQå¼Ð“ ´¸¬Pÿ|œg´Q£R³*,Ð&%…³ ÝΜLÒÆÄÑâÑ¡âÑ¥:QøD ÀASDBü“µË«Z7+R#S+Æ^ÃÍeó6`¶pµdì™[cÓ_DÆ_«Dl:=•¶sKÓr#IÎ<1]ã´8eEd¶c«SU³EY<µ2ºÓ{#PkÓt³5>mÔªT'UÑ›Cж3eÅBµÔC5±\ƒmë´ssÔo‹ÔKÍSt”1bS¶O]ºElÄ;À( UE›G \O— VbunLªˆ[cÖQ…VíÉИ)?TViµÄFƒÌ?¥¹2»k}„;Öií8o»ÅVåÓVpÖvm”R¥Ödývt58ì„×qI:Ü ~-^õÕ€Õ×§#å¼å»¸¶rº×…õŽAä‚m„õ“QaÁëÜÖÇ[Â?dØ<|ÖõXx#×BÃ×»Œ¥Ä-W”UÙÝpX«YS¿˜•Ù]W˜Ù›ÅÙœt]Ùžµ¼pÔÙ ÅÙ‹5 n”=žÍ=ju r9ÚÐ2Ÿ…ZÚÀªiÚnaŸ ¾jUד’yKÞëØ¨[nežÔƒQìx‘’.®íÚùZÕ Û±¥[zEº«=ÛIÄ[åYZ¹¼=·}Û”±[té¼¹­Â[º…‰õlö`Vß2Ü1ýÕ¤¥™Ä%ŒÃÅܬm‘½Í[àq"¾Mþ‹\ÉEZʽŒ@,ÛBÉÜÕe>&L[Òí‹e–Ðõ¾ÑEZÛÍËU™Ü×VÖõÝÖM]ÏÝÝ.A[Ð]Ûª$=FÜZž"[§%Öß…^k•½-]?Ì ã=^øK^ ;iYØÐ¼è_é-^ê­Þt½Þ¢í[éÁ]žmßÁ= ùÔŽpßú­·àu ­ŒvQ_ÍC©åÞ¿Mß| îy_û¬Õ8¤ù5ßÞD‰ÄÎ…‘àÉëH8Ö`™Û¿±¹`þ\í^þÙš-aæõ‘0Üà>áµÚÓ­À<\^Ôõ “`Vfá._ca9ü…aa’=aý“Íåá%Î_žßŽa=,bØõ_#>b(.fâ-æÜ1`þÆža*®bb.Ø0æâ5¶Þ™×Ö‫àá \sÝÞ~Úf«ã=F߃}^Þcc2¦]+ä‘<9`>þB Q\³Eã –ã¶mÞ)®ä+nb cFædÉócÕÝß'žäC†_à¥á;Fäõ…ãNfåøå¼vbQdJ¦ãì5cÒð’¹}dnå^b?¹\–e¥Ý»K¶äZ†ŒÊãTöåfö7`6å6få¥eBVe"FeHV¾\vænæåÈx½Ýûc ®æó-dlÎfâ½=mñ¨ævžå_Žæ>¾ßwÆec>fsÆdm&e7vç~6aÔÀ i¸®É Lgk.g~Æeöç†6d» 9uî]j.fd.c„NhyîÞYd‡½kyÜô€9Š®hŒ¾f‹>c…&‰öè–ÜŽå]er>莞V›&iµ•ZGvéžÎÝÑ<ç—Ø¼HÒ » |Ž˜.hÝõi~ ™ÜWæÎg|>i«®g¦ž¼Á¥é¦&»z]ùå¬6é{îjÀ=BÞØ»nk¬£>ºÆZߣê”þéd¶ç£–ê²vܾvè;hWNâ‡Nh¾¶BÊ&æÙUŽ]¶lÆF¡å•y†æÈ¶ãw­kÃFélR…lÎFÙÈ=˜ÅŽè[.éR¶eÚÎèÕ½ëØlÖ.×>WÌÎcÙžíÂ6íÒ&m¾¼æÚíõmÐîß:žkÔ¶mè–`–MíØºåŽVGÃTöÚ Ó@c äC¬íÓžâÝVËù€íî(=ôÖî„áÞ—MÈÍ)6|mܦn¬®aã.îénåfïg~ow½DöK9”לÖcòjýÞoïïê.kàfï§p†½D K¶u” ¦ì¯³¬GLïQŽmþŽp÷Î@ùÃ^ðp¿ðÉpíjËEå}ÏèÆâ{póÞqâcÇë On!q™T)¾RÈ'ûðbóðÁ”ËÑ»o?f  *—ÒúÐm,'ê"ç‡ÖŸ°å”Dƒú¨*/Mgiop l+¿r,pù.ßnIÇ4*1GÉ©Õi¾ì«fó6gÛSoqÄÁ–óF¦ó·<3ã:Ò`ë®ïÍÃd"<ÏV–ßöñ3þó>kijtÃ;ô²{˜‰2ÓL›EuÓSVÓU?sNGnëvîMwJ¾”ò©MõoìÝüaJ'ôÌÆt5¯h\wuš&_ÉuwÛ ö2éåˆòLGºO–àFsPðd?—øcÁh7ö–àîs„%§b†¬XÉà/.ê ã‘֛j›]bÿ×v¾ç¨6ôçBù®s4øèó}ÏduOkk÷u>G^ñɽáç•ô{?“æVøˆ¹.4ð{tûFæh7xÜèv‘\ª!²ªw‘—xF¡öPqnt¨ ÿEwœoe¤GKÊÀgu?üø÷1ØQ?÷Ñv÷bŸh×ÔðÓápwL#SG5ž¯Æ¿E_yõzlïù®›??£Í]£Â›*¡,+Ï-óïÄþy-ôw¶k5ú£ÿöçíz™ ÈE°O‚)]ôÿŠHi¿z÷›÷M¶ø#Ô@'£Ë%÷R}‚Ëç|r‘íŸ'ù>¤a‡y3×÷¸Ÿ×ÂצÃÇ5&7R4…m|³„$;7ë¿ÎÀ_åÁpÒ„Zºí´Âÿ·sïîý;øðâÇ“/_=npóƒ«÷=Út{·éãËž[eÓݳ÷sŒÍ7oÐ!Dß]óEàS"ÈÒ{«ý†ß‚J8!…Zx!†)È^†JÕ!] >aj²æV~eÅÄYs´ÕV€¿Á¨ˆP)¸á…8æ8¢#êX#A 9$‘EÆWœU?‰£’F†$„ –(á†Ì÷\tÖeéÜgbuùåe׉éev<:9`Vg6Ia™Xµå™qÊ9'uÚ ”5U™ÛšðYùhzrxg’þTaŸà‰(èpÚ9_¢FJè ”Zz)¦™jj^ž•¦i&|6éÇá”Àyº©©ˆÊÆf†‹Òäꪔ¦7)}´¢ê­¹êÿº+¯½×ä‰)!ycª±Î”(“)»,³Í:ˬ¡Æ’Øá›¯þéèöÅù,·Ýzû­·¾Š;.¹åfÚ)ŠØþ$ gan9Yhñ>WŸ¢Ai«¹TJ+¥¹øR+l¾/]0Á|0Â1©š0zå¢WG 6±‹®¡«¿ —w(«åfÜ*g)2É%›|²Èû¨vfI×òËûœ]¡‰r›.Ï=ûlØU? =4ÑE‡;º8+½4ÓM×™t}é> ÛÌUûgT£|ÚŒ«Óxý5؈u]èØ}}\YÙi«½6ÛR¶lÈ#H3Vkɰž}ðÞDö]òßmï›`à‚#~8â‰su/Ã\¿¶ÜŠ/bY÷ŸÎx³â…©yœ«¯ÊŠ‹ÿ>:é¥ «°ÃÞý»^bùe»VÊŽÝÀž“k;Ȧ7.ê“ÎûaTŸüñõÆ b>Uõ½.¼{ñ‘Y —Yœ’¿|Á }ö;`åE«¦¥JÁ{ é'¿ R°‚ ›B—ºc-r^s˜çfÈýŽžü$(1¶QþŒt‰¬]c¶DG¾fQmdÊÜüôÆCNï)Ñ 9IHÞF’Ê©Yñƒ?_fòI[ãC©ÿÌe2ÓoTÍ3+hKRïj1˜Œ$y¾Ùf“&D¦0KuÌH6˜½&:ÏÉF3’S—üÑÛ›)ÏyÒS”xô_(§¹`Òírÿ;gã^IÅY–NŸ)RKäÐÆ°…[;¦5ËÈ"È=4kל•ë©Ñr4z÷Ì( J̆JÎ3Zq¥6×YH}ótpÓ fbè:ëÜR90å™ê%K:G¦+¼aNs¨½r0™=*R“º .õ£ûU#}šC×&ŒVì)y˜Ó¢:Ï©Óì°ªÔ±’µ¬{‰æ_ÐÊ<¯ '¬-^}¤V³Òµ®v…#yæZP$†¯«GÒ«y×Á¶°z, Ùê±\ Ö¯ŸT¬a#}+Ùæ!/Í"ßÒÉr¶³’­,Ò,xY#š”¦=-j—åÙÕ²Ö®L…æh›ÚÙ–²µ§“Ulm«ÛÝ® ´!Êmü€Ë[ZV¸Ã=.rqæÛ¹,—¬ÆµmsÝöÜäR·º{-`¢‹ÔézV»ò®uÃ+Þµ:¼åîgÑ4õŽu·½îvýb^z²—°õ%Ü}ß«ßýÊVQùeÛÍ:ߘ¿>ð¥ÁÖ8© 6âƒ,á 3-¾|‰°'|T ã•Âþð1LœÎrX£"îΉA¬â#,ÅŽl‰åéb÷̘Å6¾±ÇjŒOÃÆ˜™=^Žƒf,dÓ餃ýñc‘<²!3¹ÉˆÄc‘5ëä(›ÊN¾2–qkG+ëNÉqô2—³,æ1Ó)Ìa6唕|f2³¹ÍE²°e½¼Ø!¯Yarv3žó|.ß³BFrõ,èAÛ³©Æq Ñ“hBf3ºÑ$¢ò¢?gãHgÐÑ–¾4ߊHé®õy­ÎÄ4¨CM@Mwšˆ Þ4÷J-êU³ú°DµÒT¹úն¾uo¢\k“É‘ÅÅ5°ƒMÄW÷:[Þ5 Š-ìe3;†ÙUöœ ]6d¸ÙaÖ¾v¶0HmƒI›Ó9Û6¶Ã-î$i»Ûo~/¸y7îu³{I:N÷œÅ ï·»ÞöÞÜçm=yÎ÷þ7À=š?}óÊÜ$ë·Á®ðU×˜àŒ¥®Ã·¹ð‰S|g{Nx´ŽqW\¼ãGñŒ#~®áæWä?9ÀCŽq}é–àG9ÌcÛìqåð­¯Ée®ó{¿Ïýw; ÜÒ·¾ö¶ß'ÔOÞÜÂþö¾·6íS§ûyÖº÷¿?>ð güñ¬¾cœZ>ò£ÏìCÿŽÍDuõ¥¯ýes’Îçe»¿[ýñÿ~ÀÙ_*(7}~ò³Ÿû[?ã3üüöÓ¿þ‰WXÚšOà¼Âßþþö|õŸÙ|™b àÿ ®‰ŸÄÅZÍñ> rÞo5þyG¢)`fàí™—®]`j] â™v s}`x`à® ï— ¢Gp}Ô ² Úš †àW‘—Õ ö P­:ŽçYà ú ²šwa‚è È¡a¡ Ι)á^!Ãi—šq‡ bZ!–_Æl!ò<™Ja¦! Ža¢!6•ª¡¶Yð‘aÿ´ÍÙáîa*Z¿¤Å!¢›Ñê ¢µÐ""#Ò¡­èá*5"%†árAâ"š^ÔUT"'Z¢oÙa& ßÅ…b'–"›}"Б¢vž)¶b¢¢UØÀ©¢+Ö"™^ª¢ÊÑ¢-öâ-NÊ ’bõ@¢/ã­– .âÑ£16£ V– â2:Q#5ò!4*›Nc5nã^£¬´X•ñ"7Ž£#"‹¬á à‰#9®c!šãÓL:²£<¢ÖA_óqÎΣ>Ú`ß!j3î£@ [?ÊÞQ_@T¤BÓ…Þ×)Ÿ:.¤Dê™^ZÁNBN¤F$°üØÊ™_Fn¤H2¤ZÉƽ_DޤJ ZIr˜Á`J®¤LR¤i˜´q`HΤNrää´íMNîS¤Pº_"Šn1WP¥RrdQf\™}LR.¥TòäÝ9¥œ@eLN¥VZ4U]´ùK>n¥Xf œÁ˜eVŽ¥ZŠ]²LË’øáZÆe->µyä#F¥\NæåôuèýZ¥é%`ö"_ò^ê½a`¦`^§|Ûz¥%b>f£Å—úµ 0:&d^¦ÑqR^åH¤„%f~& þ[Ṧi6ãk] Å¹Ïi]¶&jBŠ >Zª¹&m:#SU!¿Nmîf5B™ÕÊšà%o§äÍJzTY&q.'¦i®•e‰Ïa1'urcÒpU +åž(&[u~§uÚÇ-QjHÏ ¾MW*'x©®g¨…ÅŒ'êjD‰Eh&{Þç8¢Ë ÒÝÅRt†Ó.a~hxF†C±fzàHX¨ƒ’£ìÐ8Ià†HƒþÓ>(#V•½ü ‡Ò”‡vÏP ‹ˆ~(OiMˆNljS扉Ž(Š’¨ŠÂ(‹Ê¨‹–(ŽÎè‹î¨ˆZÉgÔ âÍʨ§†i«1Î*ž qõÈÍàp"©”þÛ0yßtf'Ù ˆN«)—öæ’.–:)li—–iy.P”ŽW•V(£$K%¨™ÆiФ˛)-i†&'FªžÊ)¢ã“Ò© 2©&êhŽÞ(¢.ª¢6j‹>ªBjŒNjRj‡F*¦Z*ˆfj¥vê¥jŸJî£H®î2ãR:­Bõ‘åS+åREmE½P8IT+ÁË!¯ /ä /Òvn±–Qú¼Hì2oåî®÷ÆàŒÝdì¼¶Œ%Ô䪕ï8ÕÆÈ^ïD]Ôù¾”*’,¨ønS®îïâ~¯ÿbïÂÒu“Qàùî‹ñÊoÄûºQþ¬Ë+yÒjÎ>Æ °ßïÑ oãJ“[†ípàÞöˆŒ6f“ÐÿFfëTOÔš‚ðÅ>p•æM%‘l€ÆðøÞ%Ùï.ÍÈKUÌñnð…TŸ8Ðàvgöf)Ûð›ªÛšŠ©ùím Óá ƒŠÄ¯·/Iá*Uõ0K0ÔÔÔ§!.ù6oÑšÔ·Ñ~1N-(«n¼M®Û&îÉr ®7±|)ò¼ŸOñ”y§ðül7™ªÁë–XQX¼îùí,r‹,2ë¬jñÒï²ðVê ÁÎöîéÖnÁ.p$FåÖЕ°Z°K mîât.Q¡ è–2þ6TéÂ2ë²§ªb±ÅF,Ïî(·òÁ–-á ÿ2“=â¹dÿÎsáÈY± 1è…Æ2ïA-,½jpò>¯NñÑÅF 8Go9?2$)¬8»¯ù2¬­¶2ž03«˜3 é)çf>KbÒR3X­è_“â¦Ó Ÿ/ÿOûöU ŠÄkr¤nA7Gê2° kS:ß®þ~s )»Ö³°Æ§qº¤Õz.+ñ?[så0´K´ ‡m¯”)?49%4¹bsOð…Vð'±–ÿn´yô˜uôû¤­´\N”E?ð9ôB¯R0µ4?éôSoS;5-›Ó$áªF 1= uµ”%8ùð kskqBÕ*Wë~Þ/C+uf¤±‡žxó—ñ%‰ñH-™À±WŸ-Xg™¦ô¦6~ª§vb6cÃh˜8*§"¶d+öd7ö¡B¶a_v]ã«×øÔJ3ÒcËnP-Të:²8¯ýJr"7´Um2&»Œ&KUëfÕ‰þ”%;ìèò ñr`{ëDÛì3&>/MU÷€¶1–‰Xëà@óp3`?7%ªLrŸÞm’ÝöÈânÏ)tû on·Øz7 bxéx× ~Ff¢Jêb6eSö)AmzƒËbÍCOdz´·eÇwfë÷z_vys÷2Gžº1|(”rì@I´x÷ƒgé¶`€S®„~ÌhµB'‘rƒ©óæ·vúóA3®«\øïÚ½hø†×æºÔž±~5nL“’b¨3ñI™Ét§¸ÚÙ4ä¹èsóO^[kÕ”xÏùà.Ž»æu|5ÑmOǓѰOßOÈú»)­YIFzºï³Q¨Á›«Â³#ÃSwÍU¾·ÏÀGsÝž»¤_<„vܵS¼À|˜®;£¨¼ÿ:É[çÄü³Õ1¿­Ëï3Áwd»Ç¼Ì§¥ý9ÎC|ÄG³ºë¦ºùÜ'>¸þ+º¸!#âï½’wæß¯}Ü;>Öý¨¢2¼âûýâëý½g¾»kþŸ>cÕá­è½ë¿þ«ÄþzA=êèxâÜ=·þè÷8د9Âã}Ï×¾y·çÝæìOþî}Õó¾Î›þÈ ÿr>IÿWsõ¤I{=ö?½ìÿ%»CÿJ?\r¿î'¿ò7¿ï¿<‚޽÷Gÿ߉yæqöÏ¿ù3?éßÿå;ûø @ø`Aƒ&T¸aC‡>”HÀDˆVÄxPãFŽ3‚ü×Q$B’#–T¹’eK—/aÆ”9“fM›7qæÔ¹“gOŸ?:´äI¢G‘&UÊP`Ê¥-B5úpªÇª¯ZÌjUdÔ•^™n}:–lY³gѦU»–ÿm[·oáB;—îÒ¦uQŠåº÷k_¿/õ†„ 6#a¼‡'V¼˜qcÇ!G)™rå‚MÓ5\4óG¹*;3ÚóàЛ-§V½šukׯAb–=›vmÛ·qçÖ½›woß¿ÞvqŒw)£îºü3èæ€9ËTΑ´që×±g×¾ýfuîßzϳåé±™?OÿzÑ™ç/‹?Ÿ~}û÷ËÇ]ÿþ¶ÈÍ믰õØsO=—ôP!ø(Rп!ŒP ¤>-<ª<ÕÜH> '+й÷@¢Ó:ÌPÅYlq<k‚1'h ½ec‰¶ ]DkÃÕRÔêÃÁQ: #-È™lÒÉ'ÿ“Qº!%Ò+3§ óÊJ£H°Æù‚ò)Y[+#‹¼Á‘lï8)ÅŒSÎ9é$ò"²¨¤JÏ3ï\Ф*ÿ$Í:ú±53«Lp´5Ý<²M«C”ÐI)­ÔR?û /¥Š"ÊÇËFêˆL9í¬»+µSUã;)U,Ëû²ÔðBm°ÆUAõÌÕMkµÖÒlÅñÔKu"Ó5I÷4°ÑGyd´D›‚D–Øi©­vEW›ŒÔ\¹eUÛ\Em¢qÉ—ÜmÏ5WWuCôµS“d ö×/…íÓÛWËÍ7\0«‚“XC_“%f›UÓYA Ö1R­mØá‡¹£q¶@ÛµW°}ÙíÖÖ¨ª°Õ—Ý«¸,7^~)¦cz3Þ·K3½c`!¶Šá(ýwÐ4 ÎçãpZræ˜ZhÇ:¦5]–ë%9ÔwKC^¤•6Õè¥M>úe‘±Î:ä’=Κ۽†yèÂ~Æ«lL£sôàµÕ~¶;ïÎ[î¹éÆSl–wݺâqUæÌ‹¿î[ìªåÝûꨑvúo¼-Î÷¬ÞšáŠûé›ÙN8Lš¤üW=—\ôÑÿI_䔳•˜ïµþÚðoÁˆÓ½/âuñ×G|öÖïÜë¢o(t¾ÎrŠ•m{çä9Ïü=¸‡/]úé©G›ªUEÝ0{T?÷ôÕ{™^:>ñÇW|~%F5VïmWV÷©–½ðOɇŸTXÝ',z ‹çox/Ùd'å5O*Å‚Þþª—@Ò­s-CžbV$ÞîaÆÚÎñ.‡¹e鈀=Û`cƒÀŽ„ k ë˜˜rh‚"¼Oÿ´ƒÁl€ì`w>ȹ¹°„=ô!0ÃVÍ‚ҟʱè Ì_2‚Óÿ’´DÉð‡U´¢œxxÅ»MJˆÜß A(ÀÞpy£$Ùaµ˜F5Újl£q’*Άc´!¡µ(žHjŽkôãÇ/4A’…4ä!™È‰ª‹ßé㉜'FIê±Xfì ßHMn’“!Édî:y¾ýèXÎhÎH(M$JWÃW¹žu7lžT'DUHõª}ÍêB_zɤêu®…5¬[˜YL¼æ5“RB 3QZQj(Їµ«ìeù#Ù¹™•B„_`ëiÔЪu´‚­,fQ›ÚÔà’žÒ'w9M™Úµ­€mk½ªZÝîvs´ g3äZú´5®m§„”\æ–·ÍuîÔf‹Dá–i–Çc-Y±[[än·Ì}îwwûEˆ÷ZÁ|bb³ÝB­UCÍô.xákY¨špºÇ2ol×Ùôn³gÕuo|`Ò²÷RämQ}AIÜÒŠV«”%ð[ÿ+` ¦Oø¸V…Òb„àÏw»~0}«ÜS˜Ä%özãdài˜– ^0‡_<à_ŽÉŒï5ñ‡ Ùn²6<® â¤@Ñ.0â1Ž‘|MÊÙØlGî17eØÆ Y¹û…pr“œe ÿ8ÅÆb:—üÖüj¶Ê4UÊÙœ¬e5×ÒÃ*òòœŽLE´Ž™ÌF1WÌä5ï9ª f‘Š»lkW¶„>³~Ïœg=ó ™ÑÅŒñJÓl¼‡šÊ2.4CZ–¸EºÑ¾+ƒúfFNšÒ•Fô¥íbéDoÕÓ­nªcùÇiÿùèΧ¶²­í\ë+cÙÕ½&iZ§*jJEº°551}ë!ëpѾvv2ùš@Û«DÎ5ª jÓ ú¼Ïö66MÔlpŠûÉj±öµUlm§{Õ“ýö»aîúLÛR²~du¹ZfM«{,Ö%7¼Ÿ\¬ÂQÖ·\Ë|—m…¯{ÕîvÀ!îF¿¶à77Âõ}ì:'›ÝEŽQÅ#ò©õP ·¸¹;Îolçû,èM M.r™Ï›äFü÷¬Ù"^†k|ãoøÁ›xó™Ý©…Œ°ÇûÞŒ"³±‡~9Ïût¢O½n´ỏؕ£[å ï7Ô¿>cªý·^ Òfr–V³é;4wsþc¬“ î‘éÐ5÷y3ùº>{×ÃÞsM/ïu7ü\%zÿ–ï}wûßïw\¾¿‡·|òDÄÂËQÏ.—¼à½n·Û"–ð—7ý…M)V´ËmÓÿv–ÿ‡ð›?ýí¹(êÒª¼˜þù}ÏžöHÅýñ;[GÕó¾÷b}î!ÿ{ágú-sd>ò±/ý–ÆÝö{G¼çü鋞øÅ¯|ö¨Ñ?%}ÿúgÕLôCÿ­Óø•3súño¼“¾û/$7mŠédOëv­úBgõò/͆g€®ý$„ù¨ªÚƯþþ#ãHú0WK+^¥çú ŠþbOü*ú.50ãJZÎc­Éâöd0ü+çúOSÇÄËêæ€ åhpsNÄêâÞrP00î+ Ý/JÊoGKÐo0¤œP ¢±ÏJDÌË+?‚P‰p ŸŽ ¯µ0 Åð¤Æ-ÇðNÊŠü¤°úÚí—( ÕÐòƪP|0ªÞnåÐþfñ¶-qüË W¬ðæ,‡¯ ±}¯áð0‰.+pq÷Lp ­0'qÈ„ní.EîtÞ†™„ÛE±å  ÍïçPñqí¼N1¸lïaqeqi±ÑŸqŒmy‘<|q QÏãTh±íɽ”ÑÍºÏØj0ƒq‡‘ (­‘Ïô¦¦Èq™Ñ EÝ‘ÃQï¯ÇN‘ìñC“X±Å´o?ÑãP=±¡è‘îÒ±·®hùqþÚñŸq²m± 3‘ÖH!ë«óœq#ßï!íœ(rèrÿ2 Í+’#;2êC©ú0$öoìJòfMv<…$H!7ì½±'%1?R3p$aò"9ÐÒf´‰9G÷RÊ %SR%Wa$‹òÛ€G£r¸Ö@*t2ÁàN*§ò'UˆÛVp(³òÙ¶ò#Vè~¼å|ä‡v ç}æåEé&½ò®²Áþ/ %(ƒò#±²-[í-]†uF†dÌÇPÂå{”X| ü09"Ò'5ó,…q3i†»ˆ1(}úGpr¤hNS]â²k”Æ+ ')«5ìß”Î,!è×rôDsÏ3pìÒfZ“wš†5¯&o^³ªb³2Ø®3q0ÓR-í. Bs7ÉI§7'|Öå:3†q‡2»åˆ>ðY ³9ÏŽ3oS7©Ǭóvª&^vv¸ÇoVS;¹“ “S9=² Í“?É-‰Ϧs=ÇF&Q{>‹.g§ˆ$S|àg~N³4Gg,aóùú=©¡3: @l@gû²i}Œ0ý“.CR==4¾@t)»’¾Xh?OTEmôo ;´EŸ D©ºC^ÏDk´<ÓÓGNѳ(”GYÏ"…fI+Tþ0´0´%/4@”I‡yËG…'H%È3tJsGÇTGwTKå ÕtMmcD©‹J3LãtNHÛ Mñô_ÒqÒÎÓ6áQñæPï4O Îö”OE5Ôî•CµP!µu 7‰TN‹”hâ0R9õEL-•RÉT?ÕQµSQUžJT/õJÿTPKÕTÏ4Uiç>•U[µL«4EåQ9a‹Kk5U¡t@p5V]õUaÕXîW5X uXñ“F!ÒO«’TsUVgÕYµuËmW™sZ¿ÕZ•[ñl[Íõ즓¹r<ûtF{uëð\åÕ­C]é4\Õ<ÕNãu^ýuC»Õ[óu_ñU\Ç•\³ô_¶_æ`©UQÛõK/0`Iqa-¶, ®Nyµ`93 –_öbE–ÕêÕaÁõd+Õ]C59˜®YGý 5Y6e«5Q%–^3V _vg»‚K+N6m6hUb)vSyöh%†®u`kVháõaß´‘vj5%†jÓcŸS{L(3‹%©vjcÖ)5kÉö?‹®ií O\ökß-lÅVWÑevh‰Ö© lmÙ¶×ÜözV–iã¶loõû¤ínñ6oÍqmùîi×lá¨cWUm ×Y÷–oûÖoÿvq'õr×k#—S'WfMÖqåvnËä*—ò:7IØtuY·u]—uêuewvi·v ÉJq7YÏvTOWm ÿw çjÊ m·x÷x‘7,1y™·y×xó‚3žwz©·zs£ìäJxu+ñ>tòŒ á&µ~—'!åË¥zÔ{]THpò|ÓnlE¯)ûr`¨ƒ/±b‘²ÍâQÛä—,éwˆ‚E/ctc„{ ãHLI:c|W {‘4,Ôz„GjD€«6;ywò×ÏPWù$øƒ‰8¹2Fµd‹8†û÷=Ø*e/…Åc&ë÷ƒS8,ì÷(uéÏ… +ª&7x‚¹nËL‡•o>E´‚k˜O²)Jû1‚£õˆ[F¡¸ÅÖ‰ŸØÏ†t…¡x‘Ò‚#Ø:½x§ROŒ¶}É„+Ìx¯.9´Ex¯våFføŒ9rǘ„ïWGxK‡-5،ߤK;‚·8ÝXý÷³gÿ·1ÙZÚs[°ç„#s{èG[L dç]´g.¥A øu†A18UñSò‡cb¸U†EÆ4‘W&†KBa9“5å^~´W6…’iy>oÅ2IÙ]§c¹˜ØW¢Zy‡Á”ŽÑØŠ#yŠCfeT1Œßö‡•'‹±™f¤8JÏ1ç÷še† µù‘xŠíS†¯F»…îÿÎɲ’Of8S%xÚ¥1‰ù\l‡v‡púWÜsdðå7£T|Ç7†–´—ŠºŸQ³~ðù1ÃwÐÅŸs ÍE ¹„ 9:£'†iDÚdî9S*ó™ßö•+9”/™G¥–/•9_är•_Ú—ù˜Ó'§MùO¨9/s>mÙA±d•YÚŠïÈ%™4eÙ¥ñç¡czˆî¹“†oº.™V‚¨3Úež:€7|VºW¼Y™-³€H¥¡:~ŒÚ©‡z–çGªgWjš~®zw²Ú§wz–ûÙ5ç®?Ù¨ÙZ‡€Kx¡ƒ3;çŸc'°G8O™u4Xo^3¡ËzªáSŒÿi€íćï3±Ó>)û¨×¹>7Û=yç8!û³E{µÙº85Û5å”=Ùuèyuš¢Û£ëŸ%; uŽùY··&2S[)õ¹¢M[¶³‹¶éÒ¶úV~;¹C{¯'º«¯›¯ÿ™·'µZ5­æ>k{'—;ÁFl¹æ¢#³s»»aÛp Z8{£ƒû³då£)H•qÛ¸›8+zœÿÅz˜K:Ÿ±S¾3èeü¬sÙ4ÿû¤ü û8­ œ¢\9uü»~ºÀY;¨ÂfÁ§F{À´!Ü·[;»#:™ÿ¥÷ijåû´U›±‡[¿¡¦ÄSH£1z8[Ó²-ú¸Û{ǽû+™[•\ÿÜ·a\¹±ÛÀiüÃ%û‹}|˜›œÇkØiR<Ç듹7[ÑfÜ‚¼/c<əڛ:Ç¥ûÇm\”e{ðZ¯%ýÇmv ÿÝØq»b´‰Ç {mÀݵfÜ­¼ÉÃ;> ü[{Ï1¸×¥»·õ’»wš¿á=Âë=­c]–Å;Íé}ÑÛ}p~G࡜Ý]>}|ß±&œ¿3² ìÞ{µ7~Žsã£ã >ÒQ}´%à‰ýÊ3\”zsH>ª¯ûä»9å×âï’Ý#>Â#hÒ{ÝÒ8«eIy°·G~v¹A´Âwy/ñÚºƒ=BSëÁú}Â:~üÝæíg“cZëÁS}í:êÿ:Vº§“~«ïr.É:/!'”;éßÞëY%¤ãžª¹ë«ZXTåìi(çç9vâÇɼßÏê Ú¥±ûÌzæKÆ4±šãÉÿýÏþægûá«Jeô]ñ¿\ÞØþ×%£)ßâK¤E¸Ë÷²âÖ Õuœ“W}ñͽèÿô>õÓ%>¥ü¤ßSõ‘¾+8 ×c+úß7¿Í—¹ù¹Y_‡Ë€óëwíÕ~¯§~í‹Vò9è‘;•ÁžüÇž¨«Û‡®‰º~¾úA­Þü•ÆŽ¹ûE†ûŸÞû¿^¢âß?p¡Á‚ &\¸°!A†Vt8âÃŒ-vä(0£Á’T¨qàH“"IªŒˆ2áǘ#i®¼‰3çJ›:Y:”Ù&ÃB%õôdD“.%* ¹¨Ô‹G¡n¤xÕcI”Zkv|Êô'Ó©%qòì‰6­ÚµlÛº} ÿ7çY¸1çZ‹7¯ÛºzûúmË÷¦Ý¿f Ö9˜°bÀ5;~Œöp㼉ÙJ. 93㔚;{ž|ôç—~/ z§èÔ¬3›&íÚðêÓ­Q¿®;4Ïʹ{ûF¬¸,b±¿ />úøìϼ×*L¹á–Ò‹?MW6gÌÕƒ/ï^ýuó¿ã#ß^ïíôéÅ{.ßs=vöxåÓ_ìþ¾þÖð÷ûÿH`{êGYÑ_‚ òçà|õ7Ü‚^Qøßuæ¦!†–!h!Lª¥áˆquhbŠ{©Èb‹iyXŸ‹2θYŒ4ވ㊩Á˜c.òø¢BªäÖQ…d’J‡.Éd“N> e”RNIe•VRYÛ•ZnÉe—^~ f˜Phd™9ù¡™júˆ&pk¾y_›pÎéŸEtž)g‹v¾˜go}ª'f ‚Jh¡†ZÉÚ¡Š.Êh£ŽjùÞ£’NJi¥NÞ‰i{fªçŸ,nꦞœJø)lç•é)Ž©r¨Rˆ£Êµêc®¢jê«¶ÿÞ*$W¸>8ëºÂ*c¬ ‹¨§Òº«\3nJ콂÷¬¦µ&KmµÚgí‘Öæw’¥Þ~ n˜}ýz,²Ù¢7"¹Í:».y톇î¹òÎ+Mö†‹o¾úVÊÝ|öÒ p¹AnWÙ¾Œp•¥-¬ ? 1¾5N»SÄ_ qÀªÑFªÆSÆ1Ã6½ûqŠ0þ+0É%›É#Êñ’¸òÇ͹jÌ6׬ñYäÞÌ3ÌŸ¦sÏÔz¸[ÊBó|r¿|t¶¼_ÓG«üc¨TK­&Íã¬ßÕd&¥ì‰Ì5’6ŠÍ]ÁX¯œ´Òýy½vÎ…MwÜl—lØrójUÞgýÒÛ!MFÕß+0r +5Ó|z5ÜàÀþL"Ù>ñÏj·zKž&t ]8Ú¦K¾øÒò}9סwíç–è¸ë«íµ}7žÝØ´Cfÿöé'†8}©Sn^í B>yÊPuü£$k8Ⱥò+’$" ‰Ä©ì®Ä<ä-i9Áj¢r˜š\#„¡ „ Ò•¡YÊKˆc‘)ËÂÌvòÐ’C¹5#IÃaRNKÙ&¿IM)ÚÑTyã¦QÐ)K°Œ²›€{ç<ÂP€:2¡A¬J>wvů”.™Oqн” N¤yo|éT—ænØË¾±’”?Ô'ý^yX^Ô_+õ IUKÿsjd›®Œé>wêKy(ÑI©OÆQ˜ªt‡'M ,'Óž6Õ¤7VTŸ·Ê î”µ#) ©êT”U¥R+ªT´&´–Ìcå-•ÚSÚÒ§rýÜažÇr^êƒÈój3ÃÊ0±J5§,u+U:Ö—®õ•5}(.aX§°•fjhQ˜$Gºé2–}gbSyT³Î𳔬ìLiÙØ·vÌeÌêi+ûHÐÀrÖÃCjéd{W7%•’¶dªlŠÑÙDU±Sìc¯·ÔzÆ·aÅ"iíxÁ̦M7¹œl·x]Øî ±EdJñ \ãÂÕ|;íîug›Wî™±·ÏáîËÀ ׃jÿm»Ï…jx‰ËÜÐŽw°ÏEìwÀkE•p•·ìo³™DìBÖ›œ©¬}9[Sl–Õ¿Çå/z‘Üõ¶Q¾EMì…É›` ³w¾ ®/êî `S˜`ðü°ÞŠb#×fl|¯‡ƒÛâä*X˜Æ…ðÿDfÝ]î¬û5°pib¬zW«=&£( Úa×zø¾£oU-§.}¦¸¾þ×pG˜e¿Þ1À,.lp,Wöyy¡õ1𿯑ËS–°i¹üÏ8ó•‹ Ä™__\]™¦ÙÈͳ2.»›c!ã˜ÎWn°žñ›ÄGÓÖ²¡Ô,uiäDZ€†~ñó-ç5ëwµ¼ë ?:_I§w^œ5&õM=JÚ.×Yƹ1ž¿;ç ×eþÅ2¡uúÓ˜†H™þ¢{-ML7w·ö<ó&[uF-#xÑÓœíx# ßüŽñ—töNŸúhyŸûÚCÉŠDÊíåIOÚ—~À„“;ð©ïO¿Ãÿýæ§xщJÙË—,AÇdîÁ¯{Ù§~°·zövuCµ@Ñw}òçIæW€ü”HøÇ}pYø{¾‡{]Q8 gCP7{ß´`Ø}­r“ö:Èw&Ëg+âñqÆw@*¨*,¨;èR$Å·~)(PU³sYòÍç|1(o¸“|²Bƒ¢bƒt§^(´ƒH¨a¾²EH$9˜F2è,GÈ)@è~mò;X÷)^È.H”†…¼Ô„¥ÒƒEQ8„a„&ö!…øQ†&Æw†J`qèiH'Z(3T¸€È7=œz†ç‚"‹÷„v#-ó#w\Xˆ…È|È!ƒ"&øF€’u”ˆ>œø…bh‡0Hè‰]#‰£rˆ4ˆŠX[ˆ˜‰¬¸‚ŒØƒz‹ûñ†øA‹µè'x¨uº(/¹È:(è‹¿(оƒ1LjŒ^2†[8Œ†Ø†²ØŒs’€KCÿ#RB•ŒÙ¨ßRŒÆ“!¯h„pâ\²åhŽ`òŒãrŽëÈŽK‹|ÒŽñ(RrS4ÀH ©ƒ«¸†^³š1Ž-hàȃި|ôR<”.pó+ØÕ¸†Bã* ‰óÖ5œÃ‡{(ŽÂ؇ùáÈ©ò‘`43#Ù<>ØŒ ‘YØ3³’a¬öKq2 Øré~Ò(‡‰,é&É*OXŠÚ‚’¾ø’+™)>iüÈ–Wi‹ùèŠÐø&y+@b‰‡ F¶‘— Ù–³t—B”ši™b‰Ó›kr‹陟y‰—I›©F©‰GCiY›¬i2žœOYœ±¹“¬ÆDÝØ‡\ˆ›Ê †)•‹9$‚¹œSX/‰)eDwÀyŠì‡5àÉœ‰iˆáGP˜“h™›Õ¹›¼™œ“Ù”ˆ‰†ÖQ,󜽹5¢‘Š(NçšNÓ6ð‰*}’‹>©Gb–Ø™ñ¹šÍ)—?I•Êf’ šk ŠžÉRŠ Ê’5©=N8œ!jŸ:ŠOžI¡¡ÉUêø#Úi7 Ê¡¦ù*A¹l"’«sŸs‰Šê›Ö¤Þ™%ú ¡í‰¡1ÉŠFìZ£õ)«Â¤Š)¢§I¢ôù@Ê›Gz¥»ˆŸ )Á2=QJ˜M:¤¾",b*¤Ê¥i¥[z¢(Ê™¹¦º¢Ì¡ŸúXhJ¦½(Žx9šÄR„Fº.zúŽüY¡iZ¦%ª8„z‡Às§ùš{š¨YÓ.ŒJžªÉ¢ú£é 6ª¤&ª† §‰ò¨|º¤’:©F‚£¡ø¤‰B¥Ëâ£Ä©“ ºŸnꪹ“¥;ò¨æ ‹–Šª…£-z¨Š:§°Ú¦^j¨uZ«¶J¬áá«:Š4Š_ù«¶é¢™šªY‰­Æêš¸B“Þª¦œz«îé©E*­¢  ßÕj­Ù¥­êFÅ*­ÇŠ¬ÏŠ¤Ÿ*«±J®Z/‚ú­RC¯êê««§£J¤;’+›*§oš­¦ ®Íª?å ¯ú¯#ª®×©£k› )¬²É â:«?ª¥ +¯¸z°Ð¤ãÙ4û«z*°QÙ—í:®/Û±›¬ÌZ¨Z‰°ƒ¹ˆ{®* ³[²ì‚•ªÚ¡´Sz¯>®sçŒ9‹>2’wjœ§ ´D{®Ó™Jª‹©«´Rʪ8;³:¯¶˜œÄÖ«UkµÁÚ™k[´øê¶i{£!ë¡N;¦Üj¶=:µåà©¶úš¤m{±$‹·qûŸ [³Èz³Ä¨­Ã±OË|7_K¦©Ù²…[¶<Ú­ë*·t©°6KM‹´„˜¹3i•‚è· µ¼¢ šŒgº°öj¢”»´º-cûžUjºÁx¡-©º«›K)¦û+J‹ ¢K»¶0ÙµŽË¦ Òº}滿‹Ã•QúPª¬`‹¸É«¼¡Ë¼õʺºk½¹ë?7ã½j’—[°Çù¸Û¡.뵪褌{¸é·×òoþœK½¥»·ùK‡y{¿[»uK·4 ¾YÀŒéÀ‘H¶[…7Üÿû¸I©©îK⛫v‹À‰ ²Ë0ÒɶŒÁC­DÁ̳Œ¿Î«Á¼¬!š¾ß˰!,¿$LÀ‹±˜ØŠ)ÌÂÎZÁ¼›ÁÜ» ,®3LöÛÈêÂM¼,zèˆHl¡>Á‹º³ú‹Ã1l¸ŒÀRÌÅЪ¸²‹ÅN|µ¢:¢KÅ E„z½‘{ìÅ2<½—ê1¤yÅï;¸?‹ ·›Æä;‰[œ!py›÷úÅ],‘ ü‡LœÅùzÇ‹‹sÛÇÜùƒÏŠ”–KÄ [¿ ëÅ…ìÁˆ+Æ%,¸YK§éśݖ ù¯Ñ+ɜ̵q ²¦¬Å°¬ÈÀ*Ä&œ+Wƒ—ýÛ‘<Àù ÃQû¼™\ÄJ¬ÉSCÇ'¸¸AL¸ìÚ¾¤üÁ¼¼Ë[;ÌzÜËŸ<Í9Ê–²,Ì ŒÆÇ ¦X›±F««a Ídü¥Û Ìz›ÌìÊ?ªÍÖüγÌ͵lÆ×ê°ã<¬ålÎ=I«ŒìÇ5Üψì¹ñ¼Î´¼ÄL ¸Ë쮘+Íp¬Ï9,+鋺LÍÐÞ|·-П+¶}…šûÅ»¨©üЋì. ¼Ã½ÑÐ0©Ñ+ýÒ…ì³mÍÚ¸V ±Ù% Î,² ­Âë‰ÒF|»1-Ôl¿@}´Él® ­Ó £wk²NÔ„ŒÑÖHÔ-mÐ(ìѱYx¼éìÕO½ÓQ Éo›ÔÄÌÎWÕÚÕè«ÕÌ<ÊÞ*'MÓÛJÖe]﨔\ÔV×ĘÕ=Ï6\Õ€³:Ȧ¨Òy]Å'ÜÍ_=ÖýyЄ팃Mؘ½Ÿ=×CcǤûÃŽíÏÌÀMÕ[½ÔSü˜š Ьm¯3|תò<ÉÁ,Ú£-½• !¿lÔ¼M†Î9£‡²² ¼÷œGíÌ”nü|Ûz™\ý®¿¬Ù´3±MÎ`¾¨]½‰ Üm¶m¼ÜÌm—uüÇùÌÑäMÜt®çM¿Ø'⌙+ÍØô|Ûóø%§=²•Hß…¢Ü–ý‹® Ôlœßù· }—.&í·Ï¢ ËŒJ2€ŠÌÐËÖùià“ÍìÊÁ=à7ÚžKÚPíØ nßüœá¥-ß¿­Ôë áºYâÚ#¾ÊGà­à^Üðkã0žà¾¹,¾âlL™îݼjLã)záß]’»Ç™Á³U0ßûíÌÚÞí2=gk¦äMÒ*þÜ<^â>žÛ u ö®Wá—üÆ&ýcR~6 aâ¢ó;Z®>ÿ=ß%D–ìaLsçe¾âgäT瓳B‹”&Ù¥Þ¦Ýæ†>Nj.65­oŽÍ’íåLûçÔ¯Mp5½Ç7îäUé„}qÎ;yþ×ÍÒF¾Gu‰F‰®o]áÆA5u)=–mWeÃÝÂÛÖÝç†Ô×ôfQq/hCèp^Ï…}áÕˆ>sé˜Z ÍœÄ/Žì"¤ìÿ¥^Í^qèßÏë7¦¦NTÞÅL>~¤ãàýìp»í@æNª×O!†}ïÎs°Åb n{nìVí;·9cçU­Žë‡n˽=´éîqë.‡×w eð¼·P’ÕWéWîÛŒåCLðþ¶ð§w×Çs³ÿn€íÑÉ—íU*?j…m¥4µ'n6ð¯Îç>ò±¦kù·tdutÔçn¦ë.^Þx[ñöw~?y&¯Zu%ï«ÇIk~ï2y*nWv&Z&ŸéoGòZvsh'ðÝòNüòR†_ŽêÍÕpv9OÝjýÐöiÉe,ó‡x~¤vA•a ŽéJæ(ös@¦\µ¾låÅæ±…s¯ôX*Î]n1ÿu±ôe±§w¡`Y_°^~÷n€·÷#8e·qÆF‚⟛“oxïo—ÿ?Xù¹FnŸè@>çM¿\¨ÕdoUyd„ïášîòÖówíSp|ïô1–j·Ÿó÷ì ùÚ*úf•÷–Os¡VqÁyYôøyY™ÚÎû–VT6;D~×uŒ·dò í×ÏX³Ÿ„€Ÿ=¶?ýÉëßÝW tA{øsörÖÖèÙmÖ?[Flÿ @p`Áÿ*4˜áà NŒ(ÑâBŒ&¤ÈÑãG!EŽ$¹ñ£I’)U®ôh¥C˜9j¬Ø‘¢Lœs6ĨfË™eÚ´ÈÒèÑ£/_"eÚ4éL‘.‡B½Iu"Êž?käZ•§V—`Ò<éÔlÙ³EÓ®M6¤Tµ_‹fÝ8õªÕšy³*$ ”mÉ¥Ñ &\ØÿðaÄoñúýÙ3gWƒûÚt\òEË#'æÌøìæÎƒãæ•ËðqUɗ妾J³ò\±D‡þ»4m–nA•}viÈCwú&þZ«W¾KoãvŠ•ùóß»ý¾†x9¸kÆ;…KŽ]—àd便C»¼$ùκE÷Ý•ºkº…{UžøxÜBó£çßß¿Jó’³J?¿+£Ž#+Î'ä0o½Ÿš-H¶TP§ A\ÐÀ±JÑCݤbm¬4qÅÞúƒH"›[ÿéH §äkÉ1«{°@(©$SÅ&±Ü²È7‘гK:ëüÒNÚì# O³æT³K?ù¬í8e1PòŒÌðÄÇünÄF§ÄB4ÏdĺžLqFCñÛ³S£5OB³Ô²ÏQCM•Ô=EmÎÕ¨V•UVXgMS[5CÕÎZsÕµU_•›µW_™Ò³ÐTe,ÖÓeÿ;ÖT-ç$6Æf {vÚ¤°E¶ZnCÓvÔM‡ìvÛòøü–ÛpKM–YPÏW4çšUö]wßÌMsµÚ}]“\o±­·ß}ÎÕàSå4ႃå²S†íM÷S[Ÿ¥—`:#RU‰16L㨰ôÒc’-Y_ßyã“­uWˆ[†nåÂ,—f™Ž–ã‹sþ¬N‘öåyh C4úh¤“Vzi¦›vºi’a Ч«¶új¬³¶úeuÛ%Ú[t»îVk²Ë6ûì³½¾Sb´Ûvûí£ñœzí¯ë¶ûnvcÅ{ï|Å…nÀ<î°uæûp®ÏC|ñÅ™qÈ#¯CÉ+ŸÙoË3r/Í;ÿÛEÏCÿXZÑK7½å?ýk›Ww1Î_—ýò_g÷ypÜswÛvÞËÓýwàÓîý³à‹o{øhW¾xä3^þy´›w¹yÕ¥ïØz˜±¯}ñêmï¾Úï­aí+”~üò/}»Ù§6}°½‡?aÍÝGÜþeñÿŸ_møõ¿=rÿy.€àÚêX@”ù+(°JÍÄÒc´"PtŠZ`‘P¡‰M3Ì v)Yð_/j YæA“)ð‚<‘^¢¢3\¡ùLø«Ý072¤è0§Aµ§‡#³ËyX9 ÅKq!ÛJ‰²”@GüálÌs› å&^Rô!Û²Ã*n«CtÕpxæÅˆC‘˜ˆC푊óúÀRF<ñŒh„ƒÈÆ0Ú…‹Û‹cö¦ÈG?: rdÞ ™G>*†Œ‰d¤ZH˜ÂF’…€\Ô!á¸H9N“ë±Í­µ 41ÉŠ&b“˜œX)%ž²…±ÿåáY2AˆQeÍ+e©Sú–¢Œ•hyÄ[š2R¬ü%vdc&Ë€§‚³4d-õÆIe¦)•¼$ 4Ñ”KE³˜™¡51i*\6“™Ë¼Ï.¹éι³š^L&}äÃ…“2÷\|ÆøGõàè™æ¼ææƒ|š&ˆÊŽu€ÓPé%3q`Ëê)P "ç:–lR?ñ‚Ñ”Y¥´g>ªPG9‡@8™ÏJdŸ“ÊQ¤K,ÔA©Ѳi+®M)c+ß2WOÏÅ©Èk\ÁP7‹³ÝçK ,â´›”%*\É Ù6öªM®?zWG‚·¼#åâ|'šØàþW³ìõ®~÷ˆÜ…Z7:'Õîr LZsRwG5âç‘¢dÏ”»{ͯ &á–~Å¡’mˆ|âýr8¤±O(lR»ÚW¯Í+$EÚb„ÞeIJ԰ˆùªØûÖ8¨ÆñMj#S:×™¦ïŠéù¥NòXIê¬R³u™RÂIy›:«=,/(Õ•»Œ±6“Ĩ+s¥ë´°¦ˆúÝ”…9­cÎ凌zg7¯ ÏUý2kÁ„æ)³“œÞQÒšY“f=»™Ï}¾æ½æLe*w”JsÔ™§™Ù6¥6§»£§Ú»N#ò±èõ4`jOKro¨Þ´éXê~Á¹o¿5Ñ^ýeSûçÖ°fmÉv­IY7nѼ¾ïèÞÖÖíØÁf\EÛ›Ÿ7ÛÉ9[öL™-n¨kK»Ñë‹d¶akooNÛ^V¶µÏ7îb§/Üc ¸î^{ÖÚУ7ðà}³zç[yÝÖw¿³Ìh¼l÷n¥À ¾n‚'\á gxÃþpˆG\â§xÅ-~qŒg\ãçxÇ=þq‡\ä#'yÉM~@r”§\å+gyË]þr˜Ç\æ3§yÍm~sœç\ç;çyÏ}þs ]èC'zÑ~t¤']éKgzÓþt¨G]êS§zÕ5­~u¬g]ë[çz×½þu°‡]ìc'{ÙÍ~v´§]íkg{ÛÝþv¸Ç]îs§{Ýí~w¼ç]ï{ç/{ßýþwÀ^ðƒ'|á xÄ'^ñ‹g|ãÿxÈG^ò“§|å-yÌg^ó›ç|ç=+ÿyЇ^ô£'}éMzÔ§^õ«g}ë]ÿzØÇ^ö³§}ím{Üç^÷»ç}ï(}ÿ{à_øÃ'~ñ|ä'_ùËg~óÿ|èG_úÓ§~õ­}ìg_û#Ûç~÷½ÿ}ð‡_üã'ùÍ~ô§_ýëgûÝÿ~øÇ_þó§ýíüç_ÿûçÿÝ;libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/NestedCheckboxTag.html0000644000175000017500000007634210404045210033257 0ustar arnaudarnaud00000000000000 NestedCheckboxTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.html
    Class NestedCheckboxTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.BaseHandlerTag
                        |
                        +--org.apache.struts.taglib.html.CheckboxTag
                              |
                              +--org.apache.struts.taglib.nested.html.NestedCheckboxTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, NestedNameSupport, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedCheckboxTag
    extends CheckboxTag
    implements NestedNameSupport

    NestedCheckboxTag.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String originalName
               
    private  java.lang.String originalProperty
               
     
    Fields inherited from class org.apache.struts.taglib.html.CheckboxTag
    messages, name, property, text, value
     
    Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    accesskey, defaultLocale, indexed, tabindex
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedCheckboxTag()
               
     
    Method Summary
     int doEndTag()
              Complete the processing of the tag.
     int doStartTag()
              Overriding method of the heart of the matter.
     void release()
              Release the tag's resources and reset the values.
     
    Methods inherited from class org.apache.struts.taglib.html.CheckboxTag
    doAfterBody, getName, getProperty, getValue, setName, setProperty, setValue
     
    Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    getAccesskey, getAlt, getAltKey, getBundle, getDisabled, getElementClose, getIndexed, getLocale, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, getTitleKey, isXhtml, lookupProperty, message, prepareEventHandlers, prepareFocusEvents, prepareIndex, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setAlt, setAltKey, setBundle, setDisabled, setIndexed, setLocale, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle, setTitleKey
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedNameSupport
    getName, setName
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedPropertySupport
    getProperty, setProperty
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    originalName

    private java.lang.String originalName

    originalProperty

    private java.lang.String originalProperty
    Constructor Detail

    NestedCheckboxTag

    public NestedCheckboxTag()
    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the matter. Gets the relative property and leaves the rest up to the original tag implementation. Sweet.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class CheckboxTag
    Returns:
    int JSP continuation directive. This is in the hands of the super class.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Complete the processing of the tag. The nested tags here will restore all the original value for the tag itself and the nesting context.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class CheckboxTag
    Returns:
    int to describe the next step for the JSP processor
    Throws:
    javax.servlet.jsp.JspException - for the bad things JSP's do

    release

    public void release()
    Release the tag's resources and reset the values.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class CheckboxTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/NestedErrorsTag.html0000644000175000017500000005067510404045212033010 0ustar arnaudarnaud00000000000000 NestedErrorsTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.html
    Class NestedErrorsTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.html.ErrorsTag
                  |
                  +--org.apache.struts.taglib.nested.html.NestedErrorsTag
    
    All Implemented Interfaces:
    NestedNameSupport, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedErrorsTag
    extends ErrorsTag
    implements NestedNameSupport

    NestedErrorsTag.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates, David Winterfeldt
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String originalName
               
    private  java.lang.String originalProperty
               
     
    Fields inherited from class org.apache.struts.taglib.html.ErrorsTag
    bundle, defaultLocale, lineEnd, locale, messages, name, property
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedErrorsTag()
               
     
    Method Summary
     int doEndTag()
              Complete the processing of the tag.
     int doStartTag()
              Overriding method of the heart of the matter.
     void release()
              Release the tag's resources and reset the values.
     
    Methods inherited from class org.apache.struts.taglib.html.ErrorsTag
    getBundle, getLocale, getName, getProperty, setBundle, setLocale, setName, setProperty
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedNameSupport
    getName, setName
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedPropertySupport
    getProperty, setProperty
     

    Field Detail

    originalName

    private java.lang.String originalName

    originalProperty

    private java.lang.String originalProperty
    Constructor Detail

    NestedErrorsTag

    public NestedErrorsTag()
    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the matter. Gets the relative property and leaves the rest up to the original tag implementation. Sweet.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class ErrorsTag
    Returns:
    int JSP continuation directive. This is in the hands of the super class.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Complete the processing of the tag. The nested tags here will restore all the original value for the tag itself and the nesting context.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.TagSupport
    Returns:
    int to describe the next step for the JSP processor
    Throws:
    javax.servlet.jsp.JspException - for the bad things JSP's do

    release

    public void release()
    Release the tag's resources and reset the values.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class ErrorsTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/NestedFileTag.html0000644000175000017500000010441510404045234032407 0ustar arnaudarnaud00000000000000 NestedFileTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.html
    Class NestedFileTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.BaseHandlerTag
                        |
                        +--org.apache.struts.taglib.html.BaseInputTag
                              |
                              +--org.apache.struts.taglib.html.BaseFieldTag
                                    |
                                    +--org.apache.struts.taglib.html.FileTag
                                          |
                                          +--org.apache.struts.taglib.nested.html.NestedFileTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, NestedNameSupport, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedFileTag
    extends FileTag
    implements NestedNameSupport

    NestedFileTag.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $
    Author:
    Arron Bates
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String originalName
               
    private  java.lang.String originalProperty
               
     
    Fields inherited from class org.apache.struts.taglib.html.BaseFieldTag
    accept, name, redisplay, type
     
    Fields inherited from class org.apache.struts.taglib.html.BaseInputTag
    cols, maxlength, messages, property, rows, value
     
    Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    accesskey, defaultLocale, indexed, tabindex
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedFileTag()
               
     
    Method Summary
     int doEndTag()
              Complete the processing of the tag.
     int doStartTag()
              Overriding method of the heart of the matter.
     void release()
              Release the tag's resources and reset the values.
     
    Methods inherited from class org.apache.struts.taglib.html.BaseFieldTag
    getAccept, getName, getRedisplay, setAccept, setName, setRedisplay
     
    Methods inherited from class org.apache.struts.taglib.html.BaseInputTag
    getCols, getMaxlength, getProperty, getRows, getSize, getValue, setCols, setMaxlength, setProperty, setRows, setSize, setValue
     
    Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    getAccesskey, getAlt, getAltKey, getBundle, getDisabled, getElementClose, getIndexed, getLocale, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, getTitleKey, isXhtml, lookupProperty, message, prepareEventHandlers, prepareFocusEvents, prepareIndex, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setAlt, setAltKey, setBundle, setDisabled, setIndexed, setLocale, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle, setTitleKey
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doAfterBody, doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedNameSupport
    getName, setName
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedPropertySupport
    getProperty, setProperty
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    originalName

    private java.lang.String originalName

    originalProperty

    private java.lang.String originalProperty
    Constructor Detail

    NestedFileTag

    public NestedFileTag()
    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the matter. Gets the relative property and leaves the rest up to the original tag implementation. Sweet.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class BaseFieldTag
    Returns:
    int JSP continuation directive. This is in the hands of the super class.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Complete the processing of the tag. The nested tags here will restore all the original value for the tag itself and the nesting context.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class BaseInputTag
    Returns:
    int to describe the next step for the JSP processor
    Throws:
    javax.servlet.jsp.JspException - for the bad things JSP's do

    release

    public void release()
    Release the tag's resources and reset the values.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class BaseFieldTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/NestedFormTag.html0000644000175000017500000006340510404045214032434 0ustar arnaudarnaud00000000000000 NestedFormTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.html
    Class NestedFormTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.html.FormTag
                  |
                  +--org.apache.struts.taglib.nested.html.NestedFormTag
    
    All Implemented Interfaces:
    NestedNameSupport, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedFormTag
    extends FormTag
    implements NestedNameSupport

    NestedFormTag.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String originalNesting
               
    private  java.lang.String originalNestingName
               
     
    Fields inherited from class org.apache.struts.taglib.html.FormTag
    action, beanName, beanScope, beanType, enctype, focus, focusIndex, lineEnd, mapping, messages, method, moduleConfig, name, onreset, onsubmit, scope, servlet, style, styleClass, styleId, target, type
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedFormTag()
               
     
    Method Summary
     int doEndTag()
              This is only overriden to clean up the include reference
     int doStartTag()
              Overriding to allow the chance to set the details of the system, so that dynamic includes can be possible
     java.lang.String getProperty()
              Get the string value of the "property" property.
     void release()
              Release the tag's resources and reset the values.
     void setProperty(java.lang.String newProperty)
              Setter for the "property" property
     
    Methods inherited from class org.apache.struts.taglib.html.FormTag
    getAction, getBeanName, getEnctype, getFocus, getFocusIndex, getMethod, getName, getOnreset, getOnsubmit, getScope, getStyle, getStyleClass, getStyleId, getTarget, getType, initFormBean, lookup, renderFocusJavascript, renderFormStartElement, renderToken, setAction, setEnctype, setFocus, setFocusIndex, setMethod, setName, setOnreset, setOnsubmit, setScope, setStyle, setStyleClass, setStyleId, setTarget, setType
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedNameSupport
    getName, setName
     

    Field Detail

    originalNesting

    private java.lang.String originalNesting

    originalNestingName

    private java.lang.String originalNestingName
    Constructor Detail

    NestedFormTag

    public NestedFormTag()
    Method Detail

    getProperty

    public java.lang.String getProperty()
    Get the string value of the "property" property.

    Specified by:
    getProperty in interface NestedPropertySupport
    Returns:
    the property property

    setProperty

    public void setProperty(java.lang.String newProperty)
    Setter for the "property" property

    Specified by:
    setProperty in interface NestedPropertySupport
    Parameters:
    newProperty - new value for the property

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding to allow the chance to set the details of the system, so that dynamic includes can be possible

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class FormTag
    Returns:
    int JSP continuation directive.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    This is only overriden to clean up the include reference

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class FormTag
    Returns:
    int JSP continuation directive.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    release

    public void release()
    Release the tag's resources and reset the values.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class FormTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/NestedHiddenTag.html0000644000175000017500000010706610404045220032723 0ustar arnaudarnaud00000000000000 NestedHiddenTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.html
    Class NestedHiddenTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.BaseHandlerTag
                        |
                        +--org.apache.struts.taglib.html.BaseInputTag
                              |
                              +--org.apache.struts.taglib.html.BaseFieldTag
                                    |
                                    +--org.apache.struts.taglib.html.HiddenTag
                                          |
                                          +--org.apache.struts.taglib.nested.html.NestedHiddenTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, NestedNameSupport, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedHiddenTag
    extends HiddenTag
    implements NestedNameSupport

    NestedHiddenTag.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String originalName
               
    private  java.lang.String originalProperty
               
     
    Fields inherited from class org.apache.struts.taglib.html.HiddenTag
    write
     
    Fields inherited from class org.apache.struts.taglib.html.BaseFieldTag
    accept, name, redisplay, type
     
    Fields inherited from class org.apache.struts.taglib.html.BaseInputTag
    cols, maxlength, messages, property, rows, value
     
    Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    accesskey, defaultLocale, indexed, tabindex
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedHiddenTag()
               
     
    Method Summary
     int doEndTag()
              Complete the processing of the tag.
     int doStartTag()
              Overriding method of the heart of the matter.
     void release()
              Release the tag's resources and reset the values.
     
    Methods inherited from class org.apache.struts.taglib.html.HiddenTag
    getWrite, setWrite
     
    Methods inherited from class org.apache.struts.taglib.html.BaseFieldTag
    getAccept, getName, getRedisplay, setAccept, setName, setRedisplay
     
    Methods inherited from class org.apache.struts.taglib.html.BaseInputTag
    getCols, getMaxlength, getProperty, getRows, getSize, getValue, setCols, setMaxlength, setProperty, setRows, setSize, setValue
     
    Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    getAccesskey, getAlt, getAltKey, getBundle, getDisabled, getElementClose, getIndexed, getLocale, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, getTitleKey, isXhtml, lookupProperty, message, prepareEventHandlers, prepareFocusEvents, prepareIndex, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setAlt, setAltKey, setBundle, setDisabled, setIndexed, setLocale, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle, setTitleKey
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doAfterBody, doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedNameSupport
    getName, setName
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedPropertySupport
    getProperty, setProperty
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    originalName

    private java.lang.String originalName

    originalProperty

    private java.lang.String originalProperty
    Constructor Detail

    NestedHiddenTag

    public NestedHiddenTag()
    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the matter. Gets the relative property and leaves the rest up to the original tag implementation. Sweet.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class HiddenTag
    Returns:
    int JSP continuation directive. This is in the hands of the super class.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Complete the processing of the tag. The nested tags here will restore all the original value for the tag itself and the nesting context.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class BaseInputTag
    Returns:
    int to describe the next step for the JSP processor
    Throws:
    javax.servlet.jsp.JspException - for the bad things JSP's do

    release

    public void release()
    Release the tag's resources and reset the values.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class HiddenTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/NestedImageTag.html0000644000175000017500000010110610404045216032544 0ustar arnaudarnaud00000000000000 NestedImageTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.html
    Class NestedImageTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.BaseHandlerTag
                        |
                        +--org.apache.struts.taglib.html.SubmitTag
                              |
                              +--org.apache.struts.taglib.html.ImageTag
                                    |
                                    +--org.apache.struts.taglib.nested.html.NestedImageTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedImageTag
    extends ImageTag
    implements NestedPropertySupport

    NestedMultiboxTag.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String originalProperty
               
     
    Fields inherited from class org.apache.struts.taglib.html.ImageTag
    align, border, page, pageKey, property, src, srcKey
     
    Fields inherited from class org.apache.struts.taglib.html.SubmitTag
    messages, text, value
     
    Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    accesskey, defaultLocale, indexed, tabindex
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedImageTag()
               
     
    Method Summary
     int doEndTag()
              Complete the processing of the tag.
     int doStartTag()
              Overriding method of the heart of the matter.
     void release()
              Release the tag's resources and reset the values.
     
    Methods inherited from class org.apache.struts.taglib.html.ImageTag
    getAlign, getBorder, getPage, getPageKey, getProperty, getSrc, getSrcKey, setAlign, setBorder, setPage, setPageKey, setProperty, setSrc, setSrcKey, src
     
    Methods inherited from class org.apache.struts.taglib.html.SubmitTag
    doAfterBody, getValue, setValue
     
    Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    getAccesskey, getAlt, getAltKey, getBundle, getDisabled, getElementClose, getIndexed, getLocale, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, getTitleKey, isXhtml, lookupProperty, message, prepareEventHandlers, prepareFocusEvents, prepareIndex, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setAlt, setAltKey, setBundle, setDisabled, setIndexed, setLocale, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle, setTitleKey
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedPropertySupport
    getProperty, setProperty
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    originalProperty

    private java.lang.String originalProperty
    Constructor Detail

    NestedImageTag

    public NestedImageTag()
    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the matter. Gets the relative property and leaves the rest up to the original tag implementation. Sweet.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class ImageTag
    Returns:
    int JSP continuation directive. This is in the hands of the super class.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Complete the processing of the tag. The nested tags here will restore all the original value for the tag itself and the nesting context.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class ImageTag
    Returns:
    int to describe the next step for the JSP processor
    Throws:
    javax.servlet.jsp.JspException - for the bad things JSP's do

    release

    public void release()
    Release the tag's resources and reset the values.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class ImageTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/NestedImgTag.html0000644000175000017500000011072710404045222032244 0ustar arnaudarnaud00000000000000 NestedImgTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.html
    Class NestedImgTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.BaseHandlerTag
                        |
                        +--org.apache.struts.taglib.html.ImgTag
                              |
                              +--org.apache.struts.taglib.nested.html.NestedImgTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, NestedNameSupport, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedImgTag
    extends ImgTag
    implements NestedNameSupport

    NestedImgTag, renders the nested version of the tag.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $
    Author:
    Arron Bates
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String originalName
               
    private  java.lang.String originalProperty
               
     
    Fields inherited from class org.apache.struts.taglib.html.ImgTag
    align, border, height, hspace, imageName, ismap, lowsrc, messages, name, page, pageKey, paramId, paramName, paramProperty, paramScope, property, scope, src, srcKey, usemap, vspace, width
     
    Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    accesskey, defaultLocale, indexed, tabindex
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedImgTag()
               
     
    Method Summary
     int doEndTag()
              Complete the processing of the tag.
     int doStartTag()
              Overriding method of the heart of the matter.
     void release()
              Release the tag's resources and reset the values.
     
    Methods inherited from class org.apache.struts.taglib.html.ImgTag
    getAlign, getBorder, getHeight, getHspace, getImageName, getIsmap, getLowsrc, getName, getPage, getPageKey, getParamId, getParamName, getParamProperty, getParamScope, getProperty, getScope, getSrc, getSrcKey, getUsemap, getVspace, getWidth, setAlign, setBorder, setHeight, setHspace, setImageName, setIsmap, setLowsrc, setName, setPage, setPageKey, setParamId, setParamName, setParamProperty, setParamScope, setProperty, setScope, setSrc, setSrcKey, setUsemap, setVspace, setWidth, src, url
     
    Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    getAccesskey, getAlt, getAltKey, getBundle, getDisabled, getElementClose, getIndexed, getLocale, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, getTitleKey, isXhtml, lookupProperty, message, prepareEventHandlers, prepareFocusEvents, prepareIndex, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setAlt, setAltKey, setBundle, setDisabled, setIndexed, setLocale, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle, setTitleKey
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doAfterBody, doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedNameSupport
    getName, setName
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedPropertySupport
    getProperty, setProperty
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    originalName

    private java.lang.String originalName

    originalProperty

    private java.lang.String originalProperty
    Constructor Detail

    NestedImgTag

    public NestedImgTag()
    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the matter. Gets the relative property and leaves the rest up to the original tag implementation. Sweet.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class ImgTag
    Returns:
    int JSP continuation directive. This is in the hands of the super class.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Complete the processing of the tag. The nested tags here will restore all the original value for the tag itself and the nesting context.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class ImgTag
    Returns:
    int to describe the next step for the JSP processor
    Throws:
    javax.servlet.jsp.JspException - for the bad things JSP's do

    release

    public void release()
    Release the tag's resources and reset the values.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class ImgTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/NestedLinkTag.html0000644000175000017500000010740110404045244032424 0ustar arnaudarnaud00000000000000 NestedLinkTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.html
    Class NestedLinkTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.BaseHandlerTag
                        |
                        +--org.apache.struts.taglib.html.LinkTag
                              |
                              +--org.apache.struts.taglib.nested.html.NestedLinkTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, NestedNameSupport, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedLinkTag
    extends LinkTag
    implements NestedNameSupport

    NestedLinkTag.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String origName
               
    private  java.lang.String origParamProperty
               
    private  java.lang.String origProperty
               
     
    Fields inherited from class org.apache.struts.taglib.html.LinkTag
    action, anchor, forward, href, indexId, linkName, messages, name, page, paramId, paramName, paramProperty, paramScope, property, scope, target, text, transaction
     
    Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    accesskey, defaultLocale, indexed, tabindex
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedLinkTag()
               
     
    Method Summary
     int doEndTag()
              Complete the processing of the tag.
     int doStartTag()
              Overriding method of the heart of the matter.
     void release()
              Release the tag's resources and reset the values.
     
    Methods inherited from class org.apache.struts.taglib.html.LinkTag
    calculateURL, doAfterBody, getAction, getAnchor, getForward, getHref, getIndexId, getLinkName, getName, getPage, getParamId, getParamName, getParamProperty, getParamScope, getProperty, getScope, getTarget, getTransaction, setAction, setAnchor, setForward, setHref, setIndexId, setLinkName, setName, setPage, setParamId, setParamName, setParamProperty, setParamScope, setProperty, setScope, setTarget, setTransaction
     
    Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    getAccesskey, getAlt, getAltKey, getBundle, getDisabled, getElementClose, getIndexed, getLocale, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, getTitleKey, isXhtml, lookupProperty, message, prepareEventHandlers, prepareFocusEvents, prepareIndex, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setAlt, setAltKey, setBundle, setDisabled, setIndexed, setLocale, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle, setTitleKey
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedNameSupport
    getName, setName
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedPropertySupport
    getProperty, setProperty
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    origName

    private java.lang.String origName

    origProperty

    private java.lang.String origProperty

    origParamProperty

    private java.lang.String origParamProperty
    Constructor Detail

    NestedLinkTag

    public NestedLinkTag()
    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the matter. Gets the relative property and leaves the rest up to the original tag implementation. Sweet.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class LinkTag
    Returns:
    int JSP continuation directive. This is in the hands of the super class.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Complete the processing of the tag. The nested tags here will restore all the original value for the tag itself and the nesting context.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class LinkTag
    Returns:
    int to describe the next step for the JSP processor
    Throws:
    javax.servlet.jsp.JspException - for the bad things JSP's do

    release

    public void release()
    Release the tag's resources and reset the values.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class LinkTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/NestedMessagesTag.html0000644000175000017500000005735710404045250033311 0ustar arnaudarnaud00000000000000 NestedMessagesTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.html
    Class NestedMessagesTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.MessagesTag
                        |
                        +--org.apache.struts.taglib.nested.html.NestedMessagesTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, NestedNameSupport, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedMessagesTag
    extends MessagesTag
    implements NestedNameSupport

    NestedMessagesTag.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates, David Winterfeldt
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String originalName
               
    private  java.lang.String originalProperty
               
     
    Fields inherited from class org.apache.struts.taglib.html.MessagesTag
    bundle, footer, header, id, iterator, locale, message, messageResources, name, processed, property
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedMessagesTag()
               
     
    Method Summary
     int doEndTag()
              Complete the processing of the tag.
     int doStartTag()
              Overriding method of the heart of the matter.
     void release()
              Release the tag's resources and reset the values.
     
    Methods inherited from class org.apache.struts.taglib.html.MessagesTag
    doAfterBody, getBundle, getFooter, getHeader, getId, getLocale, getMessage, getName, getProperty, setBundle, setFooter, setHeader, setId, setLocale, setMessage, setName, setProperty
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getParent, getValue, getValues, removeValue, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedNameSupport
    getName, setName
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedPropertySupport
    getProperty, setProperty
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    originalName

    private java.lang.String originalName

    originalProperty

    private java.lang.String originalProperty
    Constructor Detail

    NestedMessagesTag

    public NestedMessagesTag()
    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the matter. Gets the relative property and leaves the rest up to the original tag implementation. Sweet.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class MessagesTag
    Returns:
    int JSP continuation directive. This is in the hands of the super class.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Complete the processing of the tag. The nested tags here will restore all the original value for the tag itself and the nesting context.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class MessagesTag
    Returns:
    int to describe the next step for the JSP processor
    Throws:
    javax.servlet.jsp.JspException - for the bad things JSP's do

    release

    public void release()
    Release the tag's resources and reset the values.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class MessagesTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/NestedMultiboxTag.html0000644000175000017500000007670610404045232033344 0ustar arnaudarnaud00000000000000 NestedMultiboxTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.html
    Class NestedMultiboxTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.BaseHandlerTag
                        |
                        +--org.apache.struts.taglib.html.MultiboxTag
                              |
                              +--org.apache.struts.taglib.nested.html.NestedMultiboxTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, NestedNameSupport, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedMultiboxTag
    extends MultiboxTag
    implements NestedNameSupport

    NestedMultiboxTag.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String originalName
               
    private  java.lang.String originalProperty
               
     
    Fields inherited from class org.apache.struts.taglib.html.MultiboxTag
    constant, messages, name, property, value
     
    Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    accesskey, defaultLocale, indexed, tabindex
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedMultiboxTag()
               
     
    Method Summary
     int doEndTag()
              Complete the processing of the tag.
     int doStartTag()
              Overriding method of the heart of the matter.
     void release()
              Release the tag's resources and reset the values.
     
    Methods inherited from class org.apache.struts.taglib.html.MultiboxTag
    doAfterBody, getName, getProperty, getValue, setName, setProperty, setValue
     
    Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    getAccesskey, getAlt, getAltKey, getBundle, getDisabled, getElementClose, getIndexed, getLocale, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, getTitleKey, isXhtml, lookupProperty, message, prepareEventHandlers, prepareFocusEvents, prepareIndex, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setAlt, setAltKey, setBundle, setDisabled, setIndexed, setLocale, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle, setTitleKey
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedNameSupport
    getName, setName
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedPropertySupport
    getProperty, setProperty
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    originalName

    private java.lang.String originalName

    originalProperty

    private java.lang.String originalProperty
    Constructor Detail

    NestedMultiboxTag

    public NestedMultiboxTag()
    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the matter. Gets the relative property and leaves the rest up to the original tag implementation. Sweet.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class MultiboxTag
    Returns:
    int JSP continuation directive. This is in the hands of the super class.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Complete the processing of the tag. The nested tags here will restore all the original value for the tag itself and the nesting context.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class MultiboxTag
    Returns:
    int to describe the next step for the JSP processor
    Throws:
    javax.servlet.jsp.JspException - for the bad things JSP's do

    release

    public void release()
    Release the tag's resources and reset the values.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class MultiboxTag


    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015410423140533011317 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/NestedOptionsCollectionTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/NestedOptionsCollectionT0000644000175000017500000005352610404045206033731 0ustar arnaudarnaud00000000000000 NestedOptionsCollectionTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.html
    Class NestedOptionsCollectionTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.html.OptionsCollectionTag
                  |
                  +--org.apache.struts.taglib.nested.html.NestedOptionsCollectionTag
    
    All Implemented Interfaces:
    NestedNameSupport, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedOptionsCollectionTag
    extends OptionsCollectionTag
    implements NestedNameSupport

    NestedOptionsCollectionTag.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $
    Author:
    Arron Bates
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String originalName
               
    private  java.lang.String originalProperty
               
     
    Fields inherited from class org.apache.struts.taglib.html.OptionsCollectionTag
    filter, label, messages, name, property, value
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedOptionsCollectionTag()
               
     
    Method Summary
     int doEndTag()
              Complete the processing of the tag.
     int doStartTag()
              Overriding method of the heart of the matter.
     void release()
              Release the tag's resources and reset the values.
     
    Methods inherited from class org.apache.struts.taglib.html.OptionsCollectionTag
    addOption, getFilter, getIterator, getLabel, getName, getProperty, getStyle, getStyleClass, getValue, setFilter, setLabel, setName, setProperty, setStyle, setStyleClass, setValue
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedNameSupport
    getName, setName
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedPropertySupport
    getProperty, setProperty
     

    Field Detail

    originalName

    private java.lang.String originalName

    originalProperty

    private java.lang.String originalProperty
    Constructor Detail

    NestedOptionsCollectionTag

    public NestedOptionsCollectionTag()
    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the matter. Gets the relative property and leaves the rest up to the original tag implementation. Sweet.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class OptionsCollectionTag
    Returns:
    int JSP continuation directive. This is in the hands of the super class.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Complete the processing of the tag. The nested tags here will restore all the original value for the tag itself and the nesting context.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.TagSupport
    Returns:
    int to describe the next step for the JSP processor
    Throws:
    javax.servlet.jsp.JspException - for the bad things JSP's do

    release

    public void release()
    Release the tag's resources and reset the values.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class OptionsCollectionTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/NestedOptionsTag.html0000644000175000017500000005467010404045214033170 0ustar arnaudarnaud00000000000000 NestedOptionsTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.html
    Class NestedOptionsTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.html.OptionsTag
                  |
                  +--org.apache.struts.taglib.nested.html.NestedOptionsTag
    
    All Implemented Interfaces:
    NestedNameSupport, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedOptionsTag
    extends OptionsTag
    implements NestedNameSupport

    NestedOptionsTag.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String originalLabelProperty
               
    private  java.lang.String originalName
               
    private  java.lang.String originalProperty
               
     
    Fields inherited from class org.apache.struts.taglib.html.OptionsTag
    collection, filter, labelName, labelProperty, messages, name, property
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedOptionsTag()
               
     
    Method Summary
     int doEndTag()
              Complete the processing of the tag.
     int doStartTag()
              Overriding method of the heart of the matter.
     void release()
              Release the tag's resources and reset the values.
     
    Methods inherited from class org.apache.struts.taglib.html.OptionsTag
    addOption, getCollection, getFilter, getIterator, getLabelName, getLabelProperty, getName, getProperty, getStyle, getStyleClass, setCollection, setFilter, setLabelName, setLabelProperty, setName, setProperty, setStyle, setStyleClass
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedNameSupport
    getName, setName
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedPropertySupport
    getProperty, setProperty
     

    Field Detail

    originalName

    private java.lang.String originalName

    originalProperty

    private java.lang.String originalProperty

    originalLabelProperty

    private java.lang.String originalLabelProperty
    Constructor Detail

    NestedOptionsTag

    public NestedOptionsTag()
    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the matter. Gets the relative property and leaves the rest up to the original tag implementation. Sweet.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class OptionsTag
    Returns:
    int JSP continuation directive. This is in the hands of the super class.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Complete the processing of the tag. The nested tags here will restore all the original value for the tag itself and the nesting context.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class OptionsTag
    Returns:
    int to describe the next step for the JSP processor
    Throws:
    javax.servlet.jsp.JspException - for the bad things JSP's do

    release

    public void release()
    Release the tag's resources and reset the values.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class OptionsTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/NestedPasswordTag.html0000644000175000017500000010466710404045234033343 0ustar arnaudarnaud00000000000000 NestedPasswordTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.html
    Class NestedPasswordTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.BaseHandlerTag
                        |
                        +--org.apache.struts.taglib.html.BaseInputTag
                              |
                              +--org.apache.struts.taglib.html.BaseFieldTag
                                    |
                                    +--org.apache.struts.taglib.html.PasswordTag
                                          |
                                          +--org.apache.struts.taglib.nested.html.NestedPasswordTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, NestedNameSupport, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedPasswordTag
    extends PasswordTag
    implements NestedNameSupport

    NestedPasswordTag.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String originalName
               
    private  java.lang.String originalProperty
               
     
    Fields inherited from class org.apache.struts.taglib.html.BaseFieldTag
    accept, name, redisplay, type
     
    Fields inherited from class org.apache.struts.taglib.html.BaseInputTag
    cols, maxlength, messages, property, rows, value
     
    Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    accesskey, defaultLocale, indexed, tabindex
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedPasswordTag()
               
     
    Method Summary
     int doEndTag()
              Complete the processing of the tag.
     int doStartTag()
              Overriding method of the heart of the matter.
     void release()
              Release the tag's resources and reset the values.
     
    Methods inherited from class org.apache.struts.taglib.html.BaseFieldTag
    getAccept, getName, getRedisplay, setAccept, setName, setRedisplay
     
    Methods inherited from class org.apache.struts.taglib.html.BaseInputTag
    getCols, getMaxlength, getProperty, getRows, getSize, getValue, setCols, setMaxlength, setProperty, setRows, setSize, setValue
     
    Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    getAccesskey, getAlt, getAltKey, getBundle, getDisabled, getElementClose, getIndexed, getLocale, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, getTitleKey, isXhtml, lookupProperty, message, prepareEventHandlers, prepareFocusEvents, prepareIndex, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setAlt, setAltKey, setBundle, setDisabled, setIndexed, setLocale, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle, setTitleKey
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doAfterBody, doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedNameSupport
    getName, setName
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedPropertySupport
    getProperty, setProperty
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    originalName

    private java.lang.String originalName

    originalProperty

    private java.lang.String originalProperty
    Constructor Detail

    NestedPasswordTag

    public NestedPasswordTag()
    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the matter. Gets the relative property and leaves the rest up to the original tag implementation. Sweet.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class BaseFieldTag
    Returns:
    int JSP continuation directive. This is in the hands of the super class.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Complete the processing of the tag. The nested tags here will restore all the original value for the tag itself and the nesting context.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class BaseInputTag
    Returns:
    int to describe the next step for the JSP processor
    Throws:
    javax.servlet.jsp.JspException - for the bad things JSP's do

    release

    public void release()
    Release the tag's resources and reset the values.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class BaseFieldTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/NestedRadioTag.html0000644000175000017500000007731310404045204032571 0ustar arnaudarnaud00000000000000 NestedRadioTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.html
    Class NestedRadioTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.BaseHandlerTag
                        |
                        +--org.apache.struts.taglib.html.RadioTag
                              |
                              +--org.apache.struts.taglib.nested.html.NestedRadioTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, NestedNameSupport, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedRadioTag
    extends RadioTag
    implements NestedNameSupport

    NestedRadioTag.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String originalName
               
    private  java.lang.String originalProperty
               
     
    Fields inherited from class org.apache.struts.taglib.html.RadioTag
    idName, messages, name, property, text, value
     
    Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    accesskey, defaultLocale, indexed, tabindex
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedRadioTag()
               
     
    Method Summary
     int doEndTag()
              Complete the processing of the tag.
     int doStartTag()
              Overriding method of the heart of the matter.
     void release()
              Release the tag's resources and reset the values.
     
    Methods inherited from class org.apache.struts.taglib.html.RadioTag
    doAfterBody, getIdName, getName, getProperty, getValue, renderRadioElement, setIdName, setName, setProperty, setValue
     
    Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    getAccesskey, getAlt, getAltKey, getBundle, getDisabled, getElementClose, getIndexed, getLocale, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, getTitleKey, isXhtml, lookupProperty, message, prepareEventHandlers, prepareFocusEvents, prepareIndex, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setAlt, setAltKey, setBundle, setDisabled, setIndexed, setLocale, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle, setTitleKey
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedNameSupport
    getName, setName
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedPropertySupport
    getProperty, setProperty
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    originalName

    private java.lang.String originalName

    originalProperty

    private java.lang.String originalProperty
    Constructor Detail

    NestedRadioTag

    public NestedRadioTag()
    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the matter. Gets the relative property and leaves the rest up to the original tag implementation. Sweet.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class RadioTag
    Returns:
    int JSP continuation directive. This is in the hands of the super class.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Complete the processing of the tag. The nested tags here will restore all the original value for the tag itself and the nesting context.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class RadioTag
    Returns:
    int to describe the next step for the JSP processor
    Throws:
    javax.servlet.jsp.JspException - for the bad things JSP's do

    release

    public void release()
    Release the tag's resources and reset the values.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class RadioTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/NestedSelectTag.html0000644000175000017500000010036410404045250032744 0ustar arnaudarnaud00000000000000 NestedSelectTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.html
    Class NestedSelectTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.BaseHandlerTag
                        |
                        +--org.apache.struts.taglib.html.SelectTag
                              |
                              +--org.apache.struts.taglib.nested.html.NestedSelectTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, NestedNameSupport, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedSelectTag
    extends SelectTag
    implements NestedNameSupport

    NestedSelectTag.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String originalName
               
    private  java.lang.String originalProperty
               
     
    Fields inherited from class org.apache.struts.taglib.html.SelectTag
    match, messages, multiple, name, property, saveBody, size, value
     
    Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    accesskey, defaultLocale, indexed, tabindex
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedSelectTag()
               
     
    Method Summary
     int doEndTag()
              Complete the processing of the tag.
     int doStartTag()
              Overriding method of the heart of the matter.
     void release()
              Release the tag's resources and reset the values.
     
    Methods inherited from class org.apache.struts.taglib.html.SelectTag
    doAfterBody, getMultiple, getName, getProperty, getSize, getValue, isMatched, renderSelectStartElement, setMultiple, setName, setProperty, setSize, setValue
     
    Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    getAccesskey, getAlt, getAltKey, getBundle, getDisabled, getElementClose, getIndexed, getLocale, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, getTitleKey, isXhtml, lookupProperty, message, prepareEventHandlers, prepareFocusEvents, prepareIndex, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setAlt, setAltKey, setBundle, setDisabled, setIndexed, setLocale, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle, setTitleKey
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedNameSupport
    getName, setName
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedPropertySupport
    getProperty, setProperty
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    originalName

    private java.lang.String originalName

    originalProperty

    private java.lang.String originalProperty
    Constructor Detail

    NestedSelectTag

    public NestedSelectTag()
    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the matter. Gets the relative property and leaves the rest up to the original tag implementation. Sweet.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class SelectTag
    Returns:
    int JSP continuation directive. This is in the hands of the super class.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Complete the processing of the tag. The nested tags here will restore all the original value for the tag itself and the nesting context.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class SelectTag
    Returns:
    int to describe the next step for the JSP processor
    Throws:
    javax.servlet.jsp.JspException - for the bad things JSP's do

    release

    public void release()
    Release the tag's resources and reset the values.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class SelectTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/NestedSubmitTag.html0000644000175000017500000007326510404045220032776 0ustar arnaudarnaud00000000000000 NestedSubmitTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.html
    Class NestedSubmitTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.BaseHandlerTag
                        |
                        +--org.apache.struts.taglib.html.SubmitTag
                              |
                              +--org.apache.struts.taglib.nested.html.NestedSubmitTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedSubmitTag
    extends SubmitTag
    implements NestedPropertySupport

    NestedSubmitTag.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String originalProperty
               
     
    Fields inherited from class org.apache.struts.taglib.html.SubmitTag
    messages, property, text, value
     
    Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    accesskey, defaultLocale, indexed, tabindex
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedSubmitTag()
               
     
    Method Summary
     int doEndTag()
              Complete the processing of the tag.
     int doStartTag()
              Overriding method of the heart of the matter.
     void release()
              Release the tag's resources and reset the values.
     
    Methods inherited from class org.apache.struts.taglib.html.SubmitTag
    doAfterBody, getProperty, getValue, setProperty, setValue
     
    Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    getAccesskey, getAlt, getAltKey, getBundle, getDisabled, getElementClose, getIndexed, getLocale, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, getTitleKey, isXhtml, lookupProperty, message, prepareEventHandlers, prepareFocusEvents, prepareIndex, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setAlt, setAltKey, setBundle, setDisabled, setIndexed, setLocale, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle, setTitleKey
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedPropertySupport
    getProperty, setProperty
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    originalProperty

    private java.lang.String originalProperty
    Constructor Detail

    NestedSubmitTag

    public NestedSubmitTag()
    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the matter. Gets the relative property and leaves the rest up to the original tag implementation. Sweet.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class SubmitTag
    Returns:
    int JSP continuation directive. This is in the hands of the super class.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Complete the processing of the tag. The nested tags here will restore all the original value for the tag itself and the nesting context.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class SubmitTag
    Returns:
    int to describe the next step for the JSP processor
    Throws:
    javax.servlet.jsp.JspException - for the bad things JSP's do

    release

    public void release()
    Release the tag's resources and reset the values.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class SubmitTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/NestedTextTag.html0000644000175000017500000010421110404045210032440 0ustar arnaudarnaud00000000000000 NestedTextTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.html
    Class NestedTextTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.BaseHandlerTag
                        |
                        +--org.apache.struts.taglib.html.BaseInputTag
                              |
                              +--org.apache.struts.taglib.html.BaseFieldTag
                                    |
                                    +--org.apache.struts.taglib.html.TextTag
                                          |
                                          +--org.apache.struts.taglib.nested.html.NestedTextTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, NestedNameSupport, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedTextTag
    extends TextTag
    implements NestedNameSupport

    NestedTextTag.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String originalName
               
    private  java.lang.String originalProperty
               
     
    Fields inherited from class org.apache.struts.taglib.html.BaseFieldTag
    accept, name, redisplay, type
     
    Fields inherited from class org.apache.struts.taglib.html.BaseInputTag
    cols, maxlength, messages, property, rows, value
     
    Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    accesskey, defaultLocale, indexed, tabindex
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedTextTag()
               
     
    Method Summary
     int doEndTag()
              Complete the processing of the tag.
     int doStartTag()
              Overriding method of the heart of the matter.
     void release()
              Release the tag's resources and reset the values.
     
    Methods inherited from class org.apache.struts.taglib.html.BaseFieldTag
    getAccept, getName, getRedisplay, setAccept, setName, setRedisplay
     
    Methods inherited from class org.apache.struts.taglib.html.BaseInputTag
    getCols, getMaxlength, getProperty, getRows, getSize, getValue, setCols, setMaxlength, setProperty, setRows, setSize, setValue
     
    Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    getAccesskey, getAlt, getAltKey, getBundle, getDisabled, getElementClose, getIndexed, getLocale, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, getTitleKey, isXhtml, lookupProperty, message, prepareEventHandlers, prepareFocusEvents, prepareIndex, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setAlt, setAltKey, setBundle, setDisabled, setIndexed, setLocale, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle, setTitleKey
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doAfterBody, doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedNameSupport
    getName, setName
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedPropertySupport
    getProperty, setProperty
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    originalName

    private java.lang.String originalName

    originalProperty

    private java.lang.String originalProperty
    Constructor Detail

    NestedTextTag

    public NestedTextTag()
    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the matter. Gets the relative property and leaves the rest up to the original tag implementation. Sweet.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class BaseFieldTag
    Returns:
    int JSP continuation directive. This is in the hands of the super class.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Complete the processing of the tag. The nested tags here will restore all the original value for the tag itself and the nesting context.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class BaseInputTag
    Returns:
    int to describe the next step for the JSP processor
    Throws:
    javax.servlet.jsp.JspException - for the bad things JSP's do

    release

    public void release()
    Release the tag's resources and reset the values.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class BaseFieldTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/NestedTextareaTag.html0000644000175000017500000010333610404045224033305 0ustar arnaudarnaud00000000000000 NestedTextareaTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.html
    Class NestedTextareaTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.BaseHandlerTag
                        |
                        +--org.apache.struts.taglib.html.BaseInputTag
                              |
                              +--org.apache.struts.taglib.html.TextareaTag
                                    |
                                    +--org.apache.struts.taglib.nested.html.NestedTextareaTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, NestedNameSupport, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedTextareaTag
    extends TextareaTag
    implements NestedNameSupport

    NestedTextareaTag.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String originalName
               
    private  java.lang.String originalProperty
               
     
    Fields inherited from class org.apache.struts.taglib.html.TextareaTag
    name
     
    Fields inherited from class org.apache.struts.taglib.html.BaseInputTag
    cols, maxlength, messages, property, rows, value
     
    Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    accesskey, defaultLocale, indexed, tabindex
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedTextareaTag()
               
     
    Method Summary
     int doEndTag()
              Complete the processing of the tag.
     int doStartTag()
              Overriding method of the heart of the matter.
     void release()
              Release the tag's resources and reset the values.
     
    Methods inherited from class org.apache.struts.taglib.html.TextareaTag
    getName, renderData, renderTextareaElement, setName
     
    Methods inherited from class org.apache.struts.taglib.html.BaseInputTag
    getCols, getMaxlength, getProperty, getRows, getSize, getValue, setCols, setMaxlength, setProperty, setRows, setSize, setValue
     
    Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    getAccesskey, getAlt, getAltKey, getBundle, getDisabled, getElementClose, getIndexed, getLocale, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, getTitleKey, isXhtml, lookupProperty, message, prepareEventHandlers, prepareFocusEvents, prepareIndex, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setAlt, setAltKey, setBundle, setDisabled, setIndexed, setLocale, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle, setTitleKey
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doAfterBody, doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedNameSupport
    getName, setName
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedPropertySupport
    getProperty, setProperty
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    originalName

    private java.lang.String originalName

    originalProperty

    private java.lang.String originalProperty
    Constructor Detail

    NestedTextareaTag

    public NestedTextareaTag()
    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the matter. Gets the relative property and leaves the rest up to the original tag implementation. Sweet.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class TextareaTag
    Returns:
    int JSP continuation directive. This is in the hands of the super class.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Complete the processing of the tag. The nested tags here will restore all the original value for the tag itself and the nesting context.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class BaseInputTag
    Returns:
    int to describe the next step for the JSP processor
    Throws:
    javax.servlet.jsp.JspException - for the bad things JSP's do

    release

    public void release()
    Release the tag's resources and reset the values.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class TextareaTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/package-frame.html0000644000175000017500000000464710404045240032417 0ustar arnaudarnaud00000000000000 org.apache.struts.taglib.nested.html (Apache Struts API Documentation) org.apache.struts.taglib.nested.html
    Classes 
    NestedCheckboxTag
    NestedErrorsTag
    NestedFileTag
    NestedFormTag
    NestedHiddenTag
    NestedImageTag
    NestedImgTag
    NestedLinkTag
    NestedMessagesTag
    NestedMultiboxTag
    NestedOptionsCollectionTag
    NestedOptionsTag
    NestedPasswordTag
    NestedRadioTag
    NestedSelectTag
    NestedSubmitTag
    NestedTextareaTag
    NestedTextTag
    libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/package-summary.html0000644000175000017500000002275010404045214033016 0ustar arnaudarnaud00000000000000 org.apache.struts.taglib.nested.html (Apache Struts API Documentation)

    Package org.apache.struts.taglib.nested.html

    The nested html tags extend the org.apache.struts.taglib.html tags to allow them to relate to each other in a nested nature.

    See:
              Description

    Class Summary
    NestedCheckboxTag NestedCheckboxTag.
    NestedErrorsTag NestedErrorsTag.
    NestedFileTag NestedFileTag.
    NestedFormTag NestedFormTag.
    NestedHiddenTag NestedHiddenTag.
    NestedImageTag NestedMultiboxTag.
    NestedImgTag NestedImgTag, renders the nested version of the tag.
    NestedLinkTag NestedLinkTag.
    NestedMessagesTag NestedMessagesTag.
    NestedMultiboxTag NestedMultiboxTag.
    NestedOptionsCollectionTag NestedOptionsCollectionTag.
    NestedOptionsTag NestedOptionsTag.
    NestedPasswordTag NestedPasswordTag.
    NestedRadioTag NestedRadioTag.
    NestedSelectTag NestedSelectTag.
    NestedSubmitTag NestedSubmitTag.
    NestedTextareaTag NestedTextareaTag.
    NestedTextTag NestedTextTag.
     

    Package org.apache.struts.taglib.nested.html Description

    The nested html tags extend the org.apache.struts.taglib.html tags to allow them to relate to each other in a nested nature. The fundamental logic of the html tags don't change, except in that all references to beans and bean properties will be managed in a nested context.

    Nested html taglib





    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/package-tree.html0000644000175000017500000003602110404045216032256 0ustar arnaudarnaud00000000000000 org.apache.struts.taglib.nested.html Class Hierarchy (Apache Struts API Documentation)

    Hierarchy For Package org.apache.struts.taglib.nested.html

    Package Hierarchies:
    All Packages

    Class Hierarchy



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/html/package-use.html0000644000175000017500000001237510404045222032116 0ustar arnaudarnaud00000000000000 Uses of Package org.apache.struts.taglib.nested.html (Apache Struts API Documentation)

    Uses of Package
    org.apache.struts.taglib.nested.html

    No usage of org.apache.struts.taglib.nested.html



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/0000755000175000017500000000000010423130300027155 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/class-use/0000755000175000017500000000000010423130300031054 5ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000015310423140533011316 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/class-use/NestedEmptyTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/class-use/NestedEmptyTa0000644000175000017500000001307610404045236033550 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.logic.NestedEmptyTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.logic.NestedEmptyTag

    No usage of org.apache.struts.taglib.nested.logic.NestedEmptyTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015310423140533011316 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/class-use/NestedEqualTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/class-use/NestedEqualTa0000644000175000017500000001307610404045246033522 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.logic.NestedEqualTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.logic.NestedEqualTag

    No usage of org.apache.struts.taglib.nested.logic.NestedEqualTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000016210423140533011316 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/class-use/NestedGreaterEqualTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/class-use/NestedGreater0000644000175000017500000001316610404045240033551 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.logic.NestedGreaterEqualTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.logic.NestedGreaterEqualTag

    No usage of org.apache.struts.taglib.nested.logic.NestedGreaterEqualTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000016110423140533011315 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/class-use/NestedGreaterThanTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/class-use/NestedGreater0000644000175000017500000001315610404045222033550 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.logic.NestedGreaterThanTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.logic.NestedGreaterThanTag

    No usage of org.apache.struts.taglib.nested.logic.NestedGreaterThanTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015510423140533011320 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/class-use/NestedIterateTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/class-use/NestedIterate0000644000175000017500000001311610404045212033547 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.logic.NestedIterateTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.logic.NestedIterateTag

    No usage of org.apache.struts.taglib.nested.logic.NestedIterateTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015510423140533011320 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/class-use/NestedIterateTei.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/class-use/NestedIterate0000644000175000017500000001311610404045244033554 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.logic.NestedIterateTei (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.logic.NestedIterateTei

    No usage of org.apache.struts.taglib.nested.logic.NestedIterateTei



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015710423140533011322 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/class-use/NestedLessEqualTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/class-use/NestedLessEqu0000644000175000017500000001313610404045204033536 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.logic.NestedLessEqualTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.logic.NestedLessEqualTag

    No usage of org.apache.struts.taglib.nested.logic.NestedLessEqualTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015610423140533011321 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/class-use/NestedLessThanTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/class-use/NestedLessTha0000644000175000017500000001312610404045250033520 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.logic.NestedLessThanTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.logic.NestedLessThanTag

    No usage of org.apache.struts.taglib.nested.logic.NestedLessThanTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015310423140533011316 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/class-use/NestedMatchTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/class-use/NestedMatchTa0000644000175000017500000001307610404045210033476 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.logic.NestedMatchTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.logic.NestedMatchTag

    No usage of org.apache.struts.taglib.nested.logic.NestedMatchTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000017010423140533011315 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/class-use/NestedMessagesNotPresentTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/class-use/NestedMessage0000644000175000017500000001324610404045250033544 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.logic.NestedMessagesNotPresentTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.logic.NestedMessagesNotPresentTag

    No usage of org.apache.struts.taglib.nested.logic.NestedMessagesNotPresentTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000016510423140533011321 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/class-use/NestedMessagesPresentTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/class-use/NestedMessage0000644000175000017500000001321610404045234033543 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.logic.NestedMessagesPresentTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.logic.NestedMessagesPresentTag

    No usage of org.apache.struts.taglib.nested.logic.NestedMessagesPresentTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015610423140533011321 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/class-use/NestedNotEmptyTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/class-use/NestedNotEmpt0000644000175000017500000001312610404045210033537 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.logic.NestedNotEmptyTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.logic.NestedNotEmptyTag

    No usage of org.apache.struts.taglib.nested.logic.NestedNotEmptyTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015610423140533011321 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/class-use/NestedNotEqualTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/class-use/NestedNotEqua0000644000175000017500000001312610404045204033530 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.logic.NestedNotEqualTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.logic.NestedNotEqualTag

    No usage of org.apache.struts.taglib.nested.logic.NestedNotEqualTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015610423140533011321 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/class-use/NestedNotMatchTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/class-use/NestedNotMatc0000644000175000017500000001312610404045216033524 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.logic.NestedNotMatchTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.logic.NestedNotMatchTag

    No usage of org.apache.struts.taglib.nested.logic.NestedNotMatchTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000016010423140533011314 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/class-use/NestedNotPresentTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/class-use/NestedNotPres0000644000175000017500000001314610404045242033552 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.logic.NestedNotPresentTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.logic.NestedNotPresentTag

    No usage of org.apache.struts.taglib.nested.logic.NestedNotPresentTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015510423140533011320 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/class-use/NestedPresentTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/class-use/NestedPresent0000644000175000017500000001311610404045172033577 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.nested.logic.NestedPresentTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.nested.logic.NestedPresentTag

    No usage of org.apache.struts.taglib.nested.logic.NestedPresentTag



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/doc-files/0000755000175000017500000000000010423130300031022 5ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000015010423140533011313 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/doc-files/nested-logic.giflibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/doc-files/nested-logic.0000644000175000017500000007363610404045210033423 0ustar arnaudarnaud00000000000000GIF87aÁš÷€€€€€€€€€ÀÀÀÀÜÀ¦Êð@ ` €   À à @ @@@`@€@ @À@à@` `@```€` `À`à`€ €@€`€€€ €À€à€   @ ` €   À à À À@À`À€À ÀÀÀàÀà à@à`à€à àÀààà@ @@@`@€@ @À@à@ @ @@ @` @€ @  @À @à @@@ @@@@@`@@€@@ @@À@@à@@`@ `@@`@``@€`@ `@À`@à`@€@ €@@€@`€@€€@ €@À€@à€@ @  @@ @` @€ @  @À @à @À@ À@@À@`À@€À@ À@ÀÀ@àÀ@à@ à@@à@`à@€à@ à@Àà@àà@€ €@€`€€€ €À€à€ € €@ €` €€ €  €À €à €@€ @€@@€`@€€@€ @€À@€à@€`€ `€@`€``€€`€ `€À`€à`€€€ €€@€€`€€€€€ €€À€€à€€ €  €@ €` €€ €  €À €à €À€ À€@À€`À€€À€ À€ÀÀ€àÀ€à€ à€@à€`à€€à€ à€Àà€àà€À À@À`À€À ÀÀÀàÀ À À@ À` À€ À  ÀÀ Àà À@À @À@@À`@À€@À @ÀÀ@Àà@À`À `À@`À``À€`À `ÀÀ`Àà`À€À €À@€À`€À€€À €ÀÀ€Àà€À À  À@ À` À€ À  ÀÀ Àà ÀÀÀ ÀÀ@ÀÀ`ÀÀ€ÀÀ ÀÀÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ!ù,Áš­ÿ H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\ɲ¥Ë—0cÊœI³¦Í›8sêÜɳ§ÏŸ@ƒ J´¨Ñ£H“*]Ê´©Ó§P£JJµªÕ«X³jÝʵ«×¯`ÊK¶¬Ù³hÓª]˶­Û·pãÊK·®Ý»xóêÝË·¯ß¿€ L¸°áÈ+^̸±ãÇ#KžL¹²å˘3¦kÞ̹³çÏ C‹Mº´éÓ¨S«^ͺµë×°cËžM»¶íÛ¸sëÞÍ»·ïßÀƒ N¼¸ñãÈ“+_μ¹óçУKŸN]%€ëØÌŽ};wí¿ƒ(Þ;wóÙÑwÿ]ýu÷ã–gž~zûëÉ·ÇÿžüóéWŸ€÷˜Ÿ|ûØŸ‚ÿˆà‚ÕE•xVhá…f¨á†vèᇠ†(âˆ$–h≋J¨âŠ“ýÇâV.¾(£O(Öhã8æ¨ãŽ<öècŠ3)d_19U‘F&éÒL6éä“PF)¥JVi¥[H^¹T–ZvùQ‚^òf˜d–I—yI‘šf¶ÉÚ€nêgœtÖši*„§||Úégiþ‰W ‚jè’y4^–{hQŒ*é[lNJ)„ÿ–fª)e˜ߢž>( Ÿï¥wà© vÚ馬¦Eèn‘†öj«´Ö ˜ª.‚·ž®ä^ŸŽ,¨ú)«­ÈJUéAÀv,hË&+í´lAбÃ(,°½nû ª=+–¸Ôªx Í2ûÏ=¼ã¹E[î¼ô‚…«¢ÝfË­·‹îŠo¸¹Âko½Z¹÷ôÎÂmô…XðÀØèlò¬ñÆgü+°¼îÛ Èûzªwƒr¬¤šö\·A0ÅöÜ“O‘ôü»¿ 5fB«½f~x¢ÙàÒ­’3•±ÊT¯œèvù«ÝÖ½Ž,lÈú:jíÕ2UÏXé;×Iañ?[lц=×sŒÇ¡s>ùð@Ä^ÜðP©FmlÓ'ÍÇÞ5YÿS—í¸Œ‚¯ÕÝä¥ö»uàºÞ‡jä’?n¶Ó%Ý;öH¡v3ÃÓO?rÓm„Îô|ÁÞ¼ƒO{ÚŸæ™c~yå}ª»Ø_2Ö('®{ïÌ+ÏûÉ '?øX{n}uœ_¼öÊûŽÙ©½Ì0Ã3ÌêÇ#÷1w¡³{q‡»8åž{¨ÀãŸ9ô‚ }·!ËÕôô—¸ûow¿#`C¸†¯ì!¥zÜ‹ sA J7³‡=v$ƒü _1Îg ôµ®uGx@> ·‰Ñ&öëW/7CéIB`Óšòþ…2ÖPTÅò¡oh4êEï‚H\Ž“ÈÄæÈ«fÞïˆw€BaC„çcÝꊱ¾#¼î* Àîp Åd?¤a{0uÄ…ä0küààhªO튆 l#÷h/=6ñÀY" IœŒÝã¦ÛîîTQÃ(†ùJ¸Å~pq}ð À `?¸A~k³âø§Àb±‡ˆ$YŸÞ¸½SÑ”ôÉ#ý˜/>öQ„ÌåÅtÉËÉëS¸G0íaŒò£‘Ù¡¢0–¹Ìƒ’ç£Ûا·rò°À /p’{9OûâþX8UîN•3– K)NR¶Ó!‹cÿ-{IÏzÚóžãÒî±……‘îª#ß0– Œ)‚Ë(ùÌ×JJSnؤÝÀØ3 |á /üÒ(—÷Mß±Hc`;®káðŽöéè8óGÎZâRhóħLgJÓšêÄ4»‡=¾!͆N’ ß¡âAÉIžOuý(‚ÜŽ ¾!ÀÎ}Ö¥LbZ“—B‚6Í*‹¬’®„i±|Úñ€x‘ɵ„«ZÅLÆHgwÝ!gJ-FC-ɺ!¨À?ˆŠÅ¢¯„©«›Ü”zŒˆî ŒýÂYÑ*Æ2«i¬t¨ZK7¶tvìˆÒä˜N˺l•],AOÉbªox€åŽ@ØôO®Åá0îT*êõŠäƒdå*WÖÖuì››NëâØÅ@Ö´ÈLq#¯þ]ö¹&++tÇÝ’n‡%#\h5[ÄäÖæ¸ïøÀÎVèE¤¢ouÅ4Ÿ0h‹W¡B2¡Â(†$wkÉ-ºo¸BÄpŶe¹‰9®wL¯™TtdcªŽ·¹®ÙR•ãÕóBº´ÞáG_xÄÚI-g¼—ªé¤°‡íGªÂ-ø•ÆCÜ9Oü`³ À0eÿÑÖ€Qµù8¡yW×PÙCA`o{«ˆ[ÝÖ}„eíR=püM-0>ÿŒ€cLe"µr{ D'Éü¥ÃUzUd«$k—ÖÊ0‡yˆ63ñ†`ìªù_.ÞJ·ìbç™ÓÀYÎó–|­*ÇfÊ´G6!¶ÚÕá„ê,oëI!ÌVÈâB^÷*Ðøš¯·hò4ýWalÆ~õ]˜¤1¯Ï§.sˆ¿e`-¹´ªþ2¶à¸<‘‚ÌT¡íòyðŒë7ƒ9Õ¤>¥9c=ìífWÔ§™²@ý†;ˆoäµ›´åƺôi‘Ç>}-]g«Hc’&ê~à‚üÀä¾¹og–(FÙÈŽ7¥®¼êmÍú[w>'–½ÃY›zU–ceœ9 Ú~WöÞö&³ÁÿMfjŽÖŒ*6›%^ÝŠË[4ð&H[ß±ˆ©ÚîC!Ý”ªÔiÎõ¨õMy],Û!|Ü™ÀÔîr‡r\Ÿv÷Åw®,zCÜ<<„³ªîY½d¬ô°¯÷]ݤkYd'v½™öê£ ïÔUÇzgyþ.P#Dƒï:®·ˆjÒ°)L»SëÖPk«Ï’ªÂ\/PKjZÝ.pÌ0Ü ,:/°×¹Nxêùœâ¥sÖ³^f®]ݬo ©ÍŒðª{U¤gã¿Úœ-ÌëÖúÄùla}›~è¶.|j2þõ@“îø€<.1ÂošT²ÝMØÞ¯ïusc{?¬PwîܽÉ7ÈhX?Ö«þùZ‰ÔžC\ûÎÂÛþ­eˆªÏ‹Ù”»®#ï´a †tT#ý<¯±Ï`§ˆÔ”ËóŠOÚy·xÄÐ_óèþÛƒb óo@{ÐB¯c;ÃZùp¹÷:¼‡_î3r.`|èd Ón9×—¨W×]OÑŽÁY˜û÷þw‚^ðF0;îQ·§I*tCI C ×ð ¶ÃV†²Q‚#8„g‚Ö5![÷X¶D„8(ø„V1Pø„ž„ƒÇ„XX„Ñ"„0Ä…rÑ`b•…ju…«×„bx†h¨8iX›3%nø†p‡r8‡tkx‡xÈÌ—‡·ä8{¸Xȇ‚˜Rk 6'…˜ˆc¢ˆpB! ¢!¬6ŽèHabˆ`ˆ„¢‰ï·ˆžˆˆŸˆƒ}dh)¢(Jÿ§8Šªgl“è+Ù§&©çJÔkK˜]­¸ŠSŠ“’Š(á…ºŒ·¢'I˜k‚4¸Xq˜0cs„ÅÈoÂ$Ë24zâ‹$A.†CŒgax]ψjH]TÅ‹áøèè˜E"‚ÈSjþCp&eCÏk®˜ŽU2ë„Y\Óuxáè@{Òj1JäÈ]àXÖh ¹Î8ç4éÓÇ6‹ÑU )ø~–øMøöCÏ<'–~a%6÷gp6‘Ù·f&9Nè×}²ÖaV’üÃ~øƒeôW}™F ö‘=)K7´ŽIƒ‘Y”X‚+%lÞ§Fx‘P#¹†‹–^ŒFI‚ Cb N·¦?³”aÞ¸”.ygKW‹K×xvFy¿¦k²vo§‡–·”R7g g21ôCîÔ•±H]×e-C™Uù—JŒ¿"@rD~L™„öYÛ…”t)T ˜VÈ(ùXGèQ™ï4OÇ-ñTytÙ5[‡CèD–¶dk1ypž @“šŸ™p™™‹´è‘ËøQYù(åÈŒÿy›{Qjõ&*xFkÖ…p`&™§D!š©6@¸9AW9 Tau)N³¢n uf…šÕ¹jÔzÀGÅy¦™û–‰™g‹üšåäš²iˆc5aá–¨D‘¶™œòù…­Ø|¶}YÓŒéRM·NÇ™‘D9Ÿ«·œÓÃR³ ”3¦šO÷oZžÝyÅftú FÈy؉t«É r&¯)Ž£•@)Z‰z¢P& Ú ‹D÷5ª—­d‘™žgÙŽ¡'“vˆ¢Á±‘É“?>Š—å÷N_™t½ù?*q½)pWNcée¦Ù¤%f¡S—jæþ™aít™^ OµŸ:ú¥»_Á£nÆ’ƒœ™‡“CÊTZ¦}VJé¥`ªbzaEJµ–•(öYþæ/>¹žçš÷‰R™µR¦×<}ZŒ†täJo¶a: Ÿ2’>i¨B<§šZ?\â?ézÓžØòŠp4¨4*£O¹žñh¢›jéY0ºMéE1«=a«%JŠ~Ùª¼Z[¸YƆ£dµfr Æ›³èž¤²Ž£E4Ñóª½ÚЊVæX«ÓJZ´«#É‘­Ñú­ÚÚ©GäGÌ*gÍ#‹ÎʧE³Ÿ×:¦«ÊªàZ Üº"óÚU™¯øªYÀÚ] £ ©d°´ú¦Î Oãz¯ù*ÞÚ&õ® û°6!/zDKåzeεÐx±‡Rú±ŸÑ†t²";²$[²"’£›²¨Ø±Ë\¹Zž–ê²³,Û²Û°*««U¹°9뱋©ÌU±ˆ‰±.kqFK°z³˜…³=›O;‹°Më³mÔ8Ç‚žI´E;³4k³"i°LµNÁ³<ÿ'¶`ÛªSC±U›´еD«4Ûȱo‹©_[¶´œ[(«)Ù¥Ay’‘ µÔA¶tû¥ä*}ÏbµW˶mû•\ÚµA+’s¸BÁ£ÚN7°‹û–Œ÷'€ ¹òIµ„K¢/ÛŒ[›¸°:º\˸^˹!¦=9~Ê¡OǦõG“HZ»…²¹ªû—ž+âr•¹Z¸¾ «’¨ë¸o›»Db $ù£v‰±¶ª¤e bÃy¸šë·È‹›h” û²©]Þë¶ïY¼â«§×;(ÊÛ~Ì«6û¼µË¾æéRK¸[¾ÑX=1µ ¥[Œ½K›GÛ¿Èi°Mƒ¶ñK¿€X)KÖJNîkysâj g¹eÝ2¿<ŠÛZµÍ•¿õè½ß˯Š;¾·|”Â9›y¼l9œÿªµ¶ Ád"Á!Œ‡÷ ¼ü«·¢[´Á뿽+ü·/ì*Ê‹fxYJ°Z¹k¹ÂOйÁ'.ÜÃbXÁ…Û\*|‹ü8ÃyÃ{4<ÀL¬¯’ ²*å®F»Øz£Š”±9¬K|i¼ÅˆU”åuà ©,]Ã[ÇÜ{ºÚËÃlìkc}¼Ç…7Ž9<|xsLŦëÁ5«ÇW ÈYñÇÉŽo…¿„ŒÁóHÇš¬±ÜÈGÀZ<É©k”¾’,ÊTVÉ 5㪶IÌÁX+}‚óÆÖkÊ+KʵlË<Ⱦ*8U|ǪL¹ˆ¾yÜË9ʺ|Ž˜h²ÌÜÌÎüÌnˆ²ÉŒŽÇjdøËÀ|ÉÚì¿v¬·ËÆ<ÍGQÊÈEÎâ/¬—Õ]µÚ–»ßá-Þyß§-Ñ­¸‹àeƒÝ ^'ÁÓü=Ü“-ÜuÜýßîÎÇáËâü¬á^++>á%nìÌÂ6áãÝßÉâ*Ná§.NO¾Cã»há Þà9îßâMÞ?ÍãLŽâ>nÞxä(šÀªˆåFÎÛ®ã?îàȽDÕŠã'^Þ±m¯TÞáEžKk¾åB²y¯:œÚPæO^çd¾ä|àINßZ·îæVÕ~ìÍx.âCÝä;ÎÎw®Qnå·ÙÀƒHé‚^A‘ÎçÝzèQÞ莮ä‰nâÅ|æÕØ’®»–¾†Ôxé×Ò‚„VsNç¡îÝ‹îéŒîäSé?~êE ;þëÀì;­ÂêòÝØhžÙœÞé/ÅXP©çx«­È¾ë¾-ìÔ^íÖ~í«Nì^èÐ^ûûé®Ü5.êe®É_Þ­bã)‹íìÞîîN‡ÚÎ=\8 ÖûíàŽÜ½éä^îâN꥞î¼ï?ð¸ç™êXö~׳®è^Ì¥þðÑ®é?ñ¿ºéŽîÝ”ð¸¾ïÉê·þñoÙ™ ð_ò&O\ø½ìßð ßð¬}ìñ{ò6ó€Gï*ÿ×,î°nøò1/ñ4_ó8ôHo:?æî.Ïñ£Nôÿ~õIŸõZ_·¯ÎUø|ÈOõa_ë¶Nõv~ÞÞ®ò¿õloäT µ_öa¿ò@Ÿç7®âiÿ‹r®îmß÷[¿÷y_÷N?öt/øSoö=~î?ò~ßøŽî;ïízhî„ßô_ôBßÒEop¿ö×ÿùŽü˜Ó:Ó³|öˆßñ†n÷-ïöÕÊ÷ û~þú‹?ù=¿úbOë©ú¼ïìVñX/ûÂú¯ZïQ¦Î¾Ïïnø¹_\…¯÷^ûÃ?ýº ­µìnÿòªŸï–ø½ŸÑ/Jœ/ýÔ_þýýÜŸù¹¯û»ÿýí?ö{þ×ÌNþæÿeÝùôÿÙ¯ýñOà? D˜PáB>„‘ B‡#V´˜Q!Œ=ìøQ$Ç"/r4™RåJ–-]¾„SæLš5mÞÄ™SçNž=}þÿTèP¢EEšTéR¦9I:-YeЩ)£>¼ºñgV§ ¹zü*3ì˪=ËÞ<ÛTíZ¶mݾ…Wî\ºuíÞÅ›Wï^¾}·Že™íPÀX?. 3ñÌ‹!:^)X*äÀ’ÅZö›YófÎ=ZôhÒ¥MŸîû§ê˜»>¬‘rd¢%gkõyû°n«¼-²F\øpâÅGž\ùræÍy·éš±o•¾'¦»¶×˜Ù3z—(}òsñÎÍŸGŸ^ýzöíÝ¿‡·|ËùdÁ¤¯ý;Õ¢¶ÅþÍí¾ßê«LÀøD0Ad°A„-«3аڬÃo?þúã®;  *dē̚0BOD1ËEWd±Eá‚NB·ËO¿ß„ñFŠû0GŠ| ±D |±H#D2I%—dr4!MŠ*£¨ƒl1"qãpÇÿ>œÇ+ú²I1Ç$³L3ÏD3M®|2²0¢J°;**ßl¨Ç ÄSM?ÿ4PA%Ô¯(£ë³ÏaËPC‘òoK=»¤ªM(--4SM7å´SO?.ÀJ댳QG7œKÅ蜔°75VYg¥µV[Õ„•¦\e¬“,9礱W-%mUÔ _ÅôVe—±e¶YgŸm×PG…Ô×_eËRØa=dµX/{TZqÇ%·\sÏ} ÙnµeÔT×e× ÃéÛþM]}÷å·_m•vZj«ui¶ëRUÊN©²årÊ|G¢÷_‰'¦¸b‹Û X`oïµöÚS]Ja]¦tOp/F9e•WfYÁ‡Ázâ¹u7¼xoÎsa“¾߈[:h¡‡&Zט¿‹øçmk¬Ùf„g^”G’KÞù/¥‹Æ:¤k­·n9cy&¸c?†7ì¥ivµj޽¼šk·ß†;ne–-é¶:ú¶*ÍNXU©§¦ÚÕp½–»pÃG\\»£{·¦îÓ»i÷›Ø²7VÛêÄ7ç¼sÏ?]œqœG¯®tÉQeJäèHu8áÆë¾ûsÙg§½v'Wúu¦Å>ÝB¾¡>ÛòËv}mÛG>yåÓ ]ôÖÕ‚œ¶Þ‰§¼ráíÍüyÁ—çµ¾{ï¿ï¬yçO=zÓÇ~zëÑN?íuG:vðç§¿~úál׺Sú驯^ÔF–ý èq?Ÿý¸@6p#ÄJÛ h•¿Qð àA|»«Mfô E8Bn-Š‘ ü4XA«om¹Ê§½÷‘J…%ÄauجÂ)…néŸÿÐGº p€üá!ÕÃ6щO¤Õ ís·Ê+ˆBtaÙCÈŠ7”âø 8¬F2–q_a,«ˆ7oˆDÔâ _S<$ò¯ƒL4cõ¸GáÑ+j|K…x¹ nN­)dûÞwÇ5òÑ‘„äpИÆ²la ¹>þŽ|J\b##9JR–R/“¤ä ·(ÈݽŽš”"ËWI;ºN”¦Äe.u¹ÄPÎÒ’—Ä䇧>NvÒ“Ÿ,ßo¹Kf6Ó™Œ»#(yD7 srÓ4âê¤YGªq™Ï¥g8ÅùÇ$қ׳f1_©ÊX>‡Û„žƒ4NzÖÓž¬ãfêæ¢R3‘0 ‘YjéËn.òžEhB¡‰D0~³^Àô§+ H—¬|i ¤å©PŽvЍ´Ï@ã"¢ìèF”Í™:Ñ9ÑxfT£(õhLe*»>P¤#LÁ°HÌ}Ô«|'ŒTÒ™Õ¨#$j*y*’òN¢°¢OºIx®r¨5=¥jVµ*·¤*µªç\éSÕºT47@¬"VëO˜nÕ­oE—ZtѶâÏ;&ÅiY}'K€Þ­~…k`{¼®Ò§‘rk+«™NÀÁHªS¥jKGŠØ¹Ö²—Ý\a KV½®Æ©‰eigyÖ¿•©i¥,fU»ÚL¥ÖŠ¥­6uºÓÈRô±­íW­jǶ²Ö·¿]‘f [ŠÊð³Y+S÷Š[Àt²»¡nt¥;.áV&£òéâªÚåXìÞ–¯œÍíu¡;]ò–7V®}mr•;GÅ2v}U)D›kÎɽæÅo~™S]ëŠ÷.@†zš®$j½-ëIï«_7˜4üuÓ2L6j¶´ìŒmð¾ ^ÓWÁqˆS4á‡ú÷¿f_DÕ;àÑb°ÃN0Z{+b׸g/æ°]ˆd>Ú®˜Åñ•ox%cÛ¡ØÈG^„û+Ô½ì8¬û³m“—+Ð}~“勒‘¼e.ç“­§å‹“SœIî†yÊÌõ±s‹+ÔwÙÍoÖà•¯ü£ÔlØÂî=¦ŽÏŒæÃ8Áž3œ-h-»)ÊMó˜ñœg={—ÊUþ±Ž­èAWÚÆ¦tz¥ÌçŪ¸ÌfÞ³?mbIƒÙÒ§Fuç\hêÑÇ]4£ÝbÔ™ú¹Î4«S—½ë#ëº7D®3§;M漺:Ô¢5©K]_^7ÛÙ'4°ÃlQc»ØÆ¦u­m}k\;Ô×Ï7ksÝÛ6Y»Š¶v²7íhÒÎzÛòAé·Ã=o·Êbä.w6sŠîX‡63_IZw׌hÓÛà½÷‰7¦yû¿œ¸"ßÍínüàgp¦K¥ÆÁ”o•÷|~,¿7¼!¾• Ëçÿ~Ì{…¬ì“[ÜçO7ªÎ«BªWÝêWÇzÖµ¾u®wÝë_{ØÅ>v²—ÝìcõГnó™Wùìo‡{Üå>wº×Ýîp¿ÔÝõ¾w¾÷Ýï7;ÔxÂÞð‡GüÞÇÓNò|"ž‰¸Òç ߯ý{Ž7Oâ5¿yÎwí#ÿè×RÚ@Ç—Ôó§G}êUou Û2˜ì›#{N™5wµ í™UzXƒ¯1$|=RÿyÈ=Û›‘J‘§}z<æ[» q¿ÉØ¿Þ @k À(‹Üã1!@ƃTÁ4 T@Ék½',Áæ‹B(|?ü¼Z·í ªõúÀ”B2©þ»ŽþCŸŽ*OÓ7/¼Á$4ÂÍjCƤÿ/?5”µ |Ã4 \26L©‚À?,¦ DCYéÁ ûÁ%lA›+‚Át3ÃbBù›ÂåÒC,êÀ5¬&,t ¬¨©{¨ü¿ŠðCQ BO,EÛ@ ÕÅ©HÅ©ë>V<ÅTDBÁ Å?„¾ZÔ7ÖÐEVTAY„ÅôëÅõ³¢(á=œ<9”D>ü# dFÓí+‘F¬™GC6‚EèÐÅŽlŒE@,ÇXúÃPÆÅDœˆküÆmÆP¤ÅêDQüÄüFpÇrœGx¬,U\“å[Eƒ4Èm¼ÅYŒ”€4Gv”Hw„C{¬G‹ Èÿ]ôÇÌljÄÃó¢C'ÉøBŒ’TF¹¢ItÀ6ìGkTHl4ŔȂlGxDÈp\È›TÅuDÇzŒH‡| šdIŒGŒÜÈzù@_TH‚TC¡ÜGØqAÜÉû£F „F ôÇOìC9‚AOD°l§­$ËLÂúCK®<ËEaGiÌÁ¦´Ê¸ÀwKÕ!0Þ9CTÑŠœKmœÉ¥±N#ŠI€dO×ôÀ¤OÆìN8$Òô¤ÃÝP­Ìâ“F%-R'½M R”\»ï+RýQÓ”ÀµÐ(üO%ÐÅÐ%•ª&ER-Dò4Ð$MÿI‘äи,Í=Mþ”P3ÐõüÏø”P³ ÒóÜÏ ÓݬËΔÀ]SŸ²RõÏ¢„P%K­Î+eT=ýÉ$}ÐJ}¬ÎI÷|ÈöüR±”Ñ)}ÓõP,¹Ð³ÔÔ]KP-ÀôŒÍtÔÌ?uË4 Sõt´Æ°E–ÌSMíÅTµ¿¥ÒlÌMÊ]SL%Ì=P'…OÊ”OY žŽ´U—DÍüÌO}Ãá”TEÆ×äÕZUDò|Uì GÖU(EVU™ÎcÒKÍȧôUMñäÀ4×rT¥GqõÔ ¼Wv½Ô&šu…Ò¯„Ö|ÌxMOáRU5ÍPjÜÒMÒEeÿWZíQKWm?qíTé4T)5RF•S¶¬WT=X|ÝÖpõÒ~eËmÔ15×y=Y}Õ]YU-Ys<×6…Õ¿4Õ^X8uTuÖšíBJH;]Ö¥MÉG Î õÓþÄR%Ù¶3DבÅТÒîCXCD™YeM×ljQ%Öˆ-I6Te|UÛÝZÜàWVíS×¼ÏsíͽÍ€5Y³}W#ÄϱåDzK‡Õ͸¥Û¹ÛÇ\ÕÂÙ¼UGÆ¥ÖµF:-[#­Z¹½ZPÑVEí\›MÐ?ÝyšÒqõ×”XÌ…Ü‘ÄÙ}Í×BMÈžÕ×]ïÄ\Ƶܦ]YŒ•ÿÜi¥ÜX5ÚŠÅYlÝÝ¥Ú'…•Š™ÐÝÚÁäÊ<íZ[¥ÈôÅ×ÑÈåÛºÝ\ýÌ\d…Zôt¿¥üÝ_ÝB-”ÞÑåÙÒMÚâ•]¤åÀÕ=Ó‘Ü×¥ÐVMǵUY UØ#EÉqE\ó$Û²mÄëmM@|_¿ÅLˆu×ÖõÝŒ_=à$\øý\š ÜäÝju]5­`ýÌÞæ].aû=ZÙÔÌðUaä=_yeئZÅMËÆßö^¥eH¦e[§¼]ðþÝ–àÅCè Ùõõà¹åÜY´Ø¡|×ßcàÉÕááâ–_fáõÍÚeÕªE¾fÔBõËO´|HäÄÈ¡<ã®ÿJ¥LÌaåÒÃûDÊ ã‰DN‚¼Æò½Nì%ÃÐ žA¾`Ý[žPnÜ)NVõÌ(ÆÑCuÉHuanmÞ…=ÊZ”Õ2ÆäèDcNVcmK<=A:îäž|T<½Å:¦Ñ¥]ÅT^H'vÅl…QõY+\Ñ1®\¦ÙÇxüd‡Ä^þÇRneU6e=f!}QR\dqlņìåv$eÉÐ=å0bÚé-à á±áµtätbEÖU"µÓ²<^ ~ÚøÁãTÕä]>ædfePædfg.fQæåMÞ焽chFcœÌã]\á†ýgüã^-º,*°…U†®C•„aìÅÚ ~ÓGÕÜûa&a,&a¯eäv`¶ÕHÎè›}a5Ɔ¦9@L*ÂÄ—žhK^C–F:—þÂj¾`šÞĘãþ}çMç4ÆczVM7FhWNf>nçh.M™\NP~ågfH8¦å^i;Œ­’zhHÜ.Ý7!²i‘ãjœö¬ O—sFâÄåXÕe¡¶GyþåR¬ç8h«ÖÉSnjk•cP\j¨è|Žf©ÆçÊé§ÛElw+ëZ~µ™Þi*Õj™NÆ­^DÐà`ÿFŽÃë`clɦì'ÔìÈþ±ÅNl$T, Ós  ÓÁcíÕ¿à|À;ƒèÉ>´ÒN@̾lžÆ²Ó¹üÉ›×&d«nÙŽÄÞXí߆6×VîÝ æáÛÍN;ÜöìÛNkȆßÖ½«Fn˜Ò¬«fá˵>éÎBÒÖíüÅnßÀø“Á4JîíN*îf3ã6k oüžnòŽí^¸ùn yîõ¾¼ö^Ì>”¾t"6Y½‡ð7¼ýöKö^? Çð ×p¼»· ÷ðq¬ƒnåéÇ7ñGq'8Ó`mãz2 LïÁ“ævnêî&‡ë©çñÿ»&Ñq°Q8ˆÃq­öB@Ï;gò&<ì±l¯O‰ ìrÁã"w–*'ÒKoÔhÌv“­Wòh ̳2ÜŽ«f)+5÷Æ3ºo+ç,oŸ¢ÔÐm9'U:ï½äsµóòãÎ.çl4‡¼nEstêâíE¯l2bÂ<6 Iz[$_hþþôL×töâôÿï›þÍ4WuæuRW_Swl©´sË–$-O´°¶ôN'sd<ë«ÅqIWr3Üuýuô`÷õNkt7íõU7Ÿö ©uÚNòÇõàB43oBŸ|;sz|¹l'v[ð¾v ƒ÷Ni÷¼ëvo¯w¼%ð wrõ?ŸõkÓ"Gp)gð×?BíyGÃ}ïiÛþÐno¿–/Nö0îóB/ŽswõÏ5ø(ïP(´x؆¿†wx‰‚øBÁø|¹e'ŽMŽVªtqoéŽt~ky"y¬Í’7yBQñGOùÿYùét¡= _Ƙ8­5Æf¹ðIðœßóÄÆòg4¯nÈcz‡ú¢×ø~'ñ¯ëúw–£÷xdó©÷sœø«ßùu¯øºÚÃÿ>zL{Tﺪù¾ª·ú¨oûŒxsWÂé{”?%˜?:|÷ú“ÿßûì#ìú¯·vªO|›ßø«wèÌüÏü!ÿ síÒÇ|ÍŸüvü»õÀü͇uÂýr‡û¸7|²Wöaä#Dý¼ïýÕŸ}ÒK"—óÔ_«–¤ýWçüÏ}ܧ'—þéçz™£þëÇþ² ýìçþî?;\!#çÕõÒ@þ„~€÷|çøD}þ"1Ƨµ—÷úy ký §xò·fôˆ,(€Á„ 2<Øð!Ä#R¬hñ"ʼn7rìØQ#Dj9ò$Ê”*W²lÉÑdE˜eº¬ió&Μ:Ò4ØÓáΠB‡-êñ§Ñ¤JI.mêô)Ô•H  Iõ*Ö¬Z·ríêõ+ذbÇ’-kö,Ú´j×n}Xõâ[•q?F-:·nθw_Ü‹÷/àÀ@7þô+ø0âÄ3ºUìø1dÆÿ‘'4Lù2榯ÂÍìùsb¤–y4]Ô,皎XÒqk£g3dí–ªOÜM¶%œš´âØvö´MR$çÚZS÷ƨ·qpÊ´w}»`ržYó.÷­úûÌ„lÇ“/oþ<úôç?êvþ=|¡¢¥Î4¾düGóÛ|zôsÐ…4Mí¥dàA2Èq|9XÝaîÆ„ÇY¥Ýj>U7ÕKÓMçžu÷!&ái!Šx]_ fˆÝ†áµä߇éLöÍx£f„möŽ=úhb…û•¦“— žqýõÅ"`R¨P’ƒ‰—!‡ Ö¤ŒÞUx¤\<žˆå–WJ…\‹(‘)dHÿJY—“@‚ %“pާ†RrI‹^þøX{ú Ûníµšt ¾9¥k¸Ý™âvxÆÔˆbž´¨¤7QÊçŸ%º¹¢£b'¨D³aõék‚˜ÝfÖ¨¨n©¶ê*£¤&¨ª¢ ’XÒ©£âÚg•³úúëb"—kvyF*ç’Ú•*j±¡.+´Áª*«´ª³ÑþZìvb[g¶ŒÖ lxnÛêšµ¾ ì™Ú6Jç—ˆ& %¨¯6‹ê·á²›¯¾VÁ*íº¨"˜·ºÚÚ'¹Ýj»¤¹áìbªìšj-³ðÜìš™Ž(¯ÆGõƃF(r¼[˜"†œ’˜&˃ã„%Ô¥ÿóv\³gQ¾h³§óþ‹g»ÿîh(uèͤ‡  sÑÉÂø­Ñ;Íð‡ =tÓƒ‰šnžU#;3¸û¬¯c?ü4qÞr5¾KgìõÑÒ&ø¶ÖuGm5ÚY;kîÝq·ë7Ϻ¶¼?—m7ºyo­÷™I— 7ÞS<·§S]7Ò’3^®ÒÁ.ýpå]c¶Ç‚!Lèdj­&½ïÊi–)›³àO‘\éàã>)¼O~y{ì«k)‘¥‹m¼±¬Ó—¶ë˜7\àèD½÷ßq;_{è€ož¹Ûz#ªz÷¢'¯¹•ÊÙÜôÏw¸÷Î_ËóáŠiùöRwÏ´øô{/¿ýµÃMúî(ꄾëMï{ð£ó'õY€ôûùXÉ)î}´ÂÚ¬ÆÕ¾žÕ¯wÿÈcÓìš<á…^2áòާ<ûYfA…ñRqêŬÉÐ]5\˜¯ÎF0ÃѰbâšËÀu1 bŒƒrs˜½ ±Nìr#Ö­V¼âQ±t8Ë™¦vF8!Ú)pׂèò§œjr £ÚØ·=´MmŒ‡Õ·nJwÈŠ‘¿è´0¦oŒÑË¿|†FCå‘€n„#ÈE¿ñ±Sz<^€p=éåq{CàOØ@@FñÚƒàý(X©D†ÏX¼a ÓeI~ðc&»âð¦˜;#¾2€hÒŸTÄ\²n’#ãÕ§H£¡’Óß0§¶®ìÉoŽãÛ—ÿ÷>øY‹j0cÿ Uˆ=ßá–°D]+yéA3ðŽª´ÚæRYÆõÙL‘ÓšÒ@Y¿¶µÑsöì`ÅׯqÖ1y¾¼¦°"èNͱ³‹ÒCàãâ Çy*tKú;×RÉÀ}>“„v,Ü9Y*‚² Ž(÷€ÖÐBZž’|(ÇÊ4L–te´ §RN§M|Ù«‡NìM§•¡][“c ִNâT¨ÝÔž•-ÎpKV?Lé]Ú4Àuf³”ã½(F¾ó$åþÚ5êõOa¤+f9(Om²UŠÝÜÉ77SVÚ²2åÄèGË$ÌPZÕ[¬ØŽ˜¶Ä«Zuô"Êò4¬›neY˜ÿÌ™WÉîÕ°}µÕd™jO5”…ˆ]ga»ZM2-n†u¬ÌÄY½­ruŠMæe‡šYu¶³¢D(GñÉLeöL}ªcìkÛ™[ºÎ5¦µ4gÛiÍà®ñ·ÜóakÈ Ž•¯G¬d¡æ°ÑýÚej!ÛZJzÑ’d-µÈÈIˆš7´Ó=èEæI´Æw¾wµ/$«ßšx³•qŌδÍJ ›X—šà]¡¬`Eƒ.®2èªjí«®4éIáÁV˜lPœpùbI\jAø¼ C°™ºàha¸Á”KnMAL=ŸkW-ÖpÐL5ãóXÂ?õ׆-ªÚG•ØÀšEq‘Xÿ5;¸´Çœ¡Œ»ƒã -ž ”Ø>/TX©Ø_@–±8‹;$®£UŧtX½ø)rv\(J3IÐǽw‹eE¡ˆ³hD‰Ôm •óûØ;iŽô³ U§?…+håž•am6¨H}9K![ ®áü¯‘h×¥¶òç…ð‘¯]ŒPszpö!5?±(ê,b:Õ·”ixK-^O¿Õækuއk1“pµ‹NkO±šf@ç‹Í”dïÒ7c‰ÎTÍž¸*kJ÷R¯e$sãŒÖÑBŒ¶Òµ-! ÛµNT¤¼Ýh£³Ï_Sû¥“Öb^.ÍkWÓ;R§¾ö´!cëáíšßa6µ€ÜïJ¯ºÓKYª#ùn5ÑIøŽÝÀeóÿ̈Ï[l¾î(E›9îá.½¸…'Å rŽ[|Ñx„vK% 6=§Èw;°S|ã—ó8W†fRU¬ó3ÊJ¦fvk̪XÝ«‰;×UÐÉÚ…­§Ù¿“,a«+æIæ9ƒçÖä?yöÝjÔ”=¬ó /gøGŽpy/HÖØû?¾ù W}¦ÿ|ä%<ó¦wÉ7EíGHÓ¼Ë÷ë£>B釿üš§<÷Íï±ôÃÖ<’¼jö},JÍâÌ¿½3²õ¹§ŽÿúûžÔ]ýõç½Uû¡^TmÚŽ©6 > 6`éýPV ^ f YpÓ—i ~ † ª_‚"A_¡ß()I]EþåŸó‘  Ê îZöûq÷¥ÞÕÚê-ÞÍÄFVÖDzÇ× ÒE.aŹº]vH¶]¬Œÿ‘Jˆå:¡îàù™`ÀYÚ\M!nÞä5õ™†²e_öÈê}ÿ!ò× æáúñ`Û‰ ¢ "[d^¿Ý ²Þ^G«Õ¡‰4#^¡ùàGê¡"!õña~D¢&j vb"N w\ôp¢¥¢õY"–aë%à÷aü]_Òa~ÚÀÉßš¢‚â ò¢/æ!£0cyøa7Í!Ž ÝöáÁ¡ *– µ" ‚á*ªš ^âØM#%: b2Æâ/W8Ž£x-á2ÞH%>ã(’¢€è"§(!ä¹4vÞë¹¢1Vcôuã§t^€Ñá7úaÄ¥cf¸ãg|"9$6òÚ9ÒÝ?ªá)²â¬YÑåÅ£< ˜dR,b¨e¤5ê£GÚ!Ȭ?ßÓÍâ:&#Bæ×I¦dB†â ûáLCÎH^œxžÊì)døi¤(Î# Ä`nø×¡E’$‘Ä$¦ äMªÿä8bä_à"Ü á¥ å6úŽSêˆ+íáâ#DÖ#5v!W&%Pe2Ö“Ñ_ ÊUvŸR¦%SjâUfå5šÎZúdÚÅ圠!^‚åp%¼…%ÔyåW–£Ä¥N*R¤Ln¡ñ¤[¾d]ŽZ[:ã[:á^æÚGŠXHeî"n¦dæ¤,ªcêdùÙãÊõ¥¾¦ìð£_ú#gjåÙá¥g‚bN¦ùÍfa¶æÇ<&ñhæE²amæS^ækŽæEÞ¦6~¦CŽÈXSûA%Q¡Xü‡Sâ&]N§mþ¢uâ¤njoÂ"þf-®äç ç\n%` r¦[öf>zcWnç¤|gK>5%}rgJÊgv²¥ šåtdÙ‰ç$ÂfpHåy¢§]Fãz¢¡jgj%kê§Ö!¨Kr¢„ÊÕ~ÿF& %×ÝgnÊݼ¹as’[$x†h&çXBhfJâs" "‰#^(f(9ÒèrvçQî%$†(—Ðè.¤{)iªO²ç‡¶hŽž%ކgOVhyªd“ÚèD鈲‰gFÕ”>ŠhRb:¦méiJ#’êè’Ö¨ƒJd =aCZ'c¦gSRéAŠ)‹Žš‡n_¢Ð逜)Ö½!Å5âèéiqªfFâÝé{"jU–iA*ê=Æ©œBꪣVéjg:l˜è‰>¡9ª(q&(dvêÍ%Œ2¨-jŸ Zj¤òâªbŸ}Ö¤ù¨¨(sZ&‘¢è '²*šÒ̪*È« a–¥å k3¶þªvæ¡è½i š*­ÂiA¦æ-¢æÝ!ë+òeh&©éÀ£'¶gÂß8k¶æ§².+þi¥ê —±)~N^R¢"©zê§‚*y¦©yrd©Îê©®¨Œê+Sb빲जž"ŸøYküÍ轨´v宎i¨‚æ¯Ö‡˜VźÚ"öé¡Ú¦À,¬¦«Zëš è¼Ú*†Êë»&,eJì¶l·‚i¦èÅÇt`ÆÖ'Ö,ÈVdÄÊGÎ~鵪,jêË*¾êjË‚ªŸb¨wú‰–îdX-f¥òìÉöl½ìÙ eÐ$§mdÐd¦&­Òf-ªèÊÊ¥¯ÊdÕI­Õ^ÒÞ(ÖîÂ%³r²vN‘&+„­™>i—²¬òjp*ìbe=v-”ú¬†Î­Ö>î‹(î­í¸Ú$mߎ'Á*¢Èº,ææká²-rnɆë½MæÛ:®ß æj,Q½¨Ú¾çOf®½†,™B.XZh“°«è¦j’»ndÀªnçâ®t’âRž%è>«’¢míþ%éo¯šbúIåvžîµB+›ŽŸÜoàÖí|º.‡.&ï2ïìnìó¾côJïcé"÷5¡›¾Nö’X þcêR¬÷¦hñvH¸ö*Ô¨tè.¸RèÖí÷Ž©;ªê~ZëÒë¥úh?6ïnþn(ø(ìúoM¯ùž¯¿ºìØÎoS#A6+ƒmäæíCp±Jð/èës©'š¡ ç—k®®/ûJFZn O+Õ,ÍÞo»vð ·°‘†0Š\púúàWl”îÙ~0+±U1®.° »¨‚r)Œd÷"qﯲà Îðƒ>1mÞðêþíïv¢à:¯ÌfqäQvq ´â©x¬S0‹;,:ÖðäÚpƒz0W±oJ\~­¾]¥f"ÿêqÃúq—æ"—.Õb¯knðîÊ®r"òæb2(†Ø¦1Ìò-Ê>$3b¢"J.¦ð^òN*1¹.jÜ:1(//*¯ð-“íé±ðê™lêmÛñÕÒℾ2,¦,ßîײ-3n6sÌzr(Oq"ª/š2å–ï1«ñë·Êï/ãº6³3Sæ2oê(k,²5_³¶òé—²¿Á+áÆ³ÓZìŸüè:ïòQÁ1:³®9þ3sÖŒ›3fæ2/ãpÚ´@Û.?tزZ Ç2mó@§ómVkÖ*C<ë³<²úºpD¿ ³*7¯]\(B[­h´Ivt=ôĺs÷ßDã)I r0ç3)s4K·t{-L_4:Þ1ÄžL&ñã´Fë1ÿ¯KW4‰ÆîKk.Wgs9ŸsgàfÇþt5oßõ+¶j)03ªTK²2³1CrcÑÆ¯YS³P·q;1Xç±—â/8îs]gµ8»u ¬uC·53ía21Ûµ`7¶!ßuWÓ3DÛ3âöµH3¯íÞÆ4ùº²^#¶+d^ìŸ6êMÓqdOöÀe>­{»íG³æ/lÐë{Êÿë'?²6󟰓OrÚÇ»s¼­¿¥âwìGý8Ó¼U«ýØÙ`*ø[?S=@ü8`Aƒ °0aC‡!F”8ñŠ-^Ô¸‘cG3r ù‘dI…&7ŽL¨¥È–/aƼÈRfM›7Ò<ùP'NŸ9gþê“aÉžC‘òóköŽ­¿|Ï<þcñÿ÷ñÛ:üúqþù‘s @ÎŒKn¾½€òn@±\°­Úlsp'ž$”Ï®á+ CÁêcªBò:ìÃI$¨‹ë ÅsmCüÌzñ4î;KFod‘¶#”00?ÊÈÐ<R®àr´qűŒlrÀç–LÑB')IðȺ8k´‘Jœ´’¥,GdíËq;ó­Ä¤¯µ6+‹Ò#8Õ¬ÍÉä”8:óºO={”F´sFC¯"4·—úS²<õn=D«ÎÐÿè¢TÓö,ŒTÄ9óRÈM$ÒÀBå’Ô"W“Ç@}¬²Ua¥4ÔI½•V;1-uÖ_QuQLP$uKW`+¢p¹+ibÙŽ<¤4+ìÙ½ÊûõÖh%4×7¯ÿ —À ]ÖÊg³äV·Fûc.UUÅHÝG‚k^&w÷GmcDöØ{¡+÷ÕxE­ÊàƒNXá…nØá‡!ŽXa%®Øâ‹1ÎxbŠ5îØãA9aŽE.Ùä“QV)å•Yn¹W‚'ÄÑå™i®Ùæ›/–çy^¤ž¾™ä ‰¦ùÈ¢‘ÞæCµ5qUk—žÓé¨ïŒ™j«¯8È«±¾T^®yÔº0ľ¬Y°»DZt§Þjµ}î´“U»ìGûîDãF»Þ¬Ûæúì¹§%<<·•nÃïšq\!×î½«Žšò¡Èœ¼pËç\nÍÐT…ža0O¯<òÏT|.½Å‘;5øð|Wjݲzò/õÃa§vóÑ¥»ýg‹šƒÝÞÝE¯û)Û·|9¢ÞÑ„þk»ó~žy¦œ·þ`ÇYßÞwçÖþ¿ìó•¾oe—¿ùëk÷ž4÷EGý­!ËÞüéﯕ{lÕÇ~þ£±e¬ÊNuÊùrS¿!O&ùCÿ_èž7½ßÉ D1S®22ªÏ-.[¬³àìj“AŒ‚,!ÿ&¤«îσuaMØÒnMSa](è±n™›àâPȦþå…/üÕ.—<‘†?ãa„D¸­ØK‚«b uˆÅ f±pFTâ 9ˆCðÅðmƒáŸH+Z±sN$c—ÌØ–"¦qƒkL#k¼È½ü&>€ hǶ±RX+#·H BVG©ŸÇLÍð|«s¤Ê Y#!>ðŒ˜¬%A‰ÁP^q‹¾óÖ».9Ê'æq‘\Û+-9F66±‹¾Jä,+‰Äêá’‹w„"¾xÉÉ䥑ªŒ¢éÿù¶.qÔ¡œ ¡M2³jž¬`1±9Ek*JxÙ¤f,?éÍABs›;"2i©Ì@‚2šß a97'I`S˜Œì!PâØ™°è*¹û`²ŠÂÏ=4‹ü™üOt¦°Ÿ¹kè@sh@âepuèDå9„ŽÓ„Ž”h¥ŠQ2¦£èIIÒ“ø³£ç (J­vP2Q¡¯‹çCƒ7RÒET5/…©@WšQ.ê³—1UËFËéÑ|â¨;-iJušSž:Õ¢PiÿRÊGÐI‹—ç´!SqJÕq6Uª± +@ÿ8¼áµ“£½©JÉÊR¯®Ôªq-jKq7¾*¶u®Êj\½ÚÿW•JÕ‹ÝiP¡ºÏ£b5xZ§‰– ׳Êõ£u%hKÑzX¢NP£3eMéúUÉV‡Çm]?úÓÉÞU¦zE%>ß:RÀæ0²¨¥O£JÖըyu¬=9éQ¿¦0¢ íeƒj\·ò”€%Í'qëÈNèVtŽÄ¥hVuJPÝB·£ñä."AË\ër¸×k? IÞ®·‹Fœ++½;ÜèÓ½ãïqŸZVˆª¤iMï{ 6Qv-©‘ðrë‹_Û´¸ØÅ`}»Í³1‰~©ðù„;áãr7°O¥®"_¥Ý×!÷Ÿ÷å¬ù[Ýòjv¼–/‰+kbq^U“,‡]¨âÿ³×²Éå/§Ká×8Å?F°Žƒì`mÚwª1Nð ûc?¹Ã?v1„_lCÿîÊ´‹r’ŒcóJÙÈhUîýºÝ7jY¾ªîI=Ëf8÷5Íû|ðf³Jçí¹ø³ßísc1¥á=›Sv‚Žï}Ï e?ë1ÏÖt¡ mgò¸¿f\¯`KüäIuÑœ´£<è·²tªjÎs-O=86ÛXÑmòý-iÑ’ÚÃ~u|•»i²uú†©¬CmëYx¢þóªËìé\ks£YtwSj]/zÙ»v5=ÛÛìX“š¡²&s—Ìê6×TÓ‘›3¨)ìnÓ:Éà~îµáB!¿SèÛÁ–õº‰mh+OûÚðvÚ²üiUQÝuf·³¯0—Qí&ãµÜ •î”3nñMãØÙ¡å¬©UýÚ´¡ÙþæwŒ,ò€#ÚÔ½í¸§»ŠÎ1%׿<9rjM8ûÙv7/ðÊ7Ž^ {8ãC•ætkÎq^oG§xËeÎt-²Öç%zø:þeWü±Õ%8йb”ÓRåmcyz]^jDCÜÝ µäÚS%ö«Ã=ë$s±ÅÝ\µ£}¾9;ÖËîw0›=æV”yãg>d·'çrÖ¹¸LöžÞèÿ.aŒy0c\Þ›'};§÷-C3ñ€_¼â3ú&ª¾ _úíÍ-z˜[Þäñæp7ñÕÓ¦ï—$¸!Îär¿›·’o&­]|LZûâ¼_n“™ß«^÷i—Ïwcô[?ýà‡˜Á2·UÉßÃü.ŸÕ¦5ÜÇ | ƒ~ý_×õßx»g:ª±÷þmÏøŒêõÒnÅ^.þ¨/ý‚¯þ⎕ðäÙίù’¯ /…nK.åÀÏôr¯ÛÉó4®|ìë˜>,§8pìN¶N/¿ŽíÿÚ ¥Äêdî>pã(‰öÄkŽfж¾k¿Xp»kÌ”Ì÷J.õ¬.‡pÊH,ÿׄÐËOòòí±’pWxËš¿0ÍOçÎŽÏÎ]¨§Z–°È¶ðȺðUìö"p A¯„´P ¹0ÍÊÍïÝÈ0“„ ñ°Ãèlîôlܶì½üë óî {ðÙÛömÐëP ý®1¥ÌïuOÝ) KÐë0­&,à ÉN±Yhû¥{" ý&Ë¥(¯Ð/ª—:K±-Õ*¶ô‹´üidx‡JžxkÏâŒÑ´'ƒ1·‹¬«ÐF«Ñ ê­‘´ž­ÞØîOëe1ÏjK¶jÑ1JµQÑ ÛnQöø ÍLáp˲܇ÖñÿŠ{± ¹J)„®{G·Æ1Ejb¤‘1ÃÑÌîl«o‘!»qÆ *»JE KëtŠÑÎ:Òñö‘Û±­ Kò?òCRíðÜÆ#+Ñ!¿"]²ù„ñ%i9Ò'Oò¢RÒy2(ù®#_ê‘qÑ)²EÐuÐ3Ì„ZrÆÌiº’ŽÂ+[îIè‡\ñ<º¯i¬PTÐr¯ÌÒèÓÒ(¹ò&‹å-K q¯*IÉHÈ2#9D.çr‹êRjÀ/G/¯/.'ƒ1%ç+ùÈ2ë)?ö0~Fβ/QÓÍZ%A4ýR4KdqN+ûè_¨r/I£(ír,ûÑûÃu8æ3'ó‹Åµœ5 3WÓORò0aSŽdS,/¥5gó[’ų4ÓUt³2­Òp²ÒžˆÍoü‘7—&:å.§9ݦ:¯%åÇ;S=?Å4©s:·Ó+ýuI;ײ;Ÿ<çS9s…<ÙÆ5ó³4×*i´b†f@ ”ô@ÔhŽfA”eÀîA%TbÞ“^&ôB14CåDC9Ôg*­C/´@A4CtDM74EUtE1“`Ô>XT:ctFi´FmôFq4Guô2ÙÒ/_”J~tG…tH‰´HôH‘?ó:“t™šôI¡4Jr¥tJ©´J3^‚T1²´I¶ÔJ½ôKÁ4LÅtL5£K;“IÉ”=ÓtMÙ´MÝôMáÔ1õEEÍÔ-ãôNñ4OõtOùÔ]`¦NûP‡¥O µP õP5QÕ4WTP¯RQ!5R%uR)5Iõ;é4N/µR9µS`=õSAUF]”E7•EJ5TQ5UUuUSõT·¤QïÔUYuViµVmUSÿ3EeµLnµW}õW5XõÃs`5V…õX‘5Y•uYõsÙ^íu_ùµ_ýUqÆ•\ù4^ÿµ` ö`¥•`T[õaöa!6ba42óu`%öbT16c5vXóF–;76dEvdIÖ?ËóF?¶êJveY¶e#6eψa-Öei¶fmv]aöˆÞµPsöf}ögvN+T`y6höh‘VU{ö‹ˆ¶h“öix¡6j ui™vgVj±6kµ–L©VI­öj·6lÅvl´k½–TÕlÉvmÙ¶m×ÓrHzä6n顿Önë6ÎîVoóÖ ú¶ùo7p ×o×p p÷8³BmÝöq!7r«Vh%w0+÷r17s{´c5W-;÷s”A7tUtÅÔqI÷tQweM×ó×9VdS7vewv}íaûÅ4R^—vy·wéuw©NE/Ìód'Öw‘7y•—i䕞K ·‹(“ñ$qð°Æo–7{{woWq½·èº|¿7BÇ7AÅ÷|É}Í7}Ùw}Ý÷CÕ~ÛW~ß7P§k—œLÉæ®Ìò×xW{x€ >)ws-áîmÍvÎ7 øK¸x x‚)xR%˜0Ýfç 0#ÍᎤé–{+x„I˜t/ƒ¿¥éxîñú-5ø€¸„ex†Å£uÛl­Ótó/È~ÕZOXKixˆ‰X\ÿ’ø5ˆe)>Ò¡ Ò’·µˆ©øi{v‡É“xÝHý4tP±ŠcŒÅ•¸daö­ ¦LzwÑÍx4»øq”gÇxŽköcٌ̳ۘÐÕîXSœ‚â¸yéxUw? OÑ(,S6I™?µ`™)9âìø…ýFÍ®©,µ2°3sµf’+¹”áxVÚx…ÛòïL„ yP¼Xsņ”M¹–‡ÖŸŽ‡ PÿÐpQ”CY<­8=m¹˜ÿÙJšx·p±"›‹z©”–Ðr1£ 9¶¨l¸1ô1q?`šù›ÁytƒY˜w–xT#qg’–˜“Ÿéû¸íðmßÙsùžíyU½Ù2ÛD‹3‰?Ã+Œ 韱­°˜×ÿ®t‹ßøžz¡-˜uÛ€ëÙØx 'Ú™Õ'z !ûg)+³Ä¢-r'7£¶kåΣ‰Ê™Ó1™ÉÈÑ ¤%º]z¦izjú¡}Ï20zo¥M¿xÙ‡71³k Ѽ„Ú¨¨%òŒuL§¿*§µë²¨Ké°¤¦±ZXóyGçc«‡ˆ& ùXÆükΙ1©Œsl/­ß¶m£Ù¬zçšäø.¨YÙ8³º¯ÿ{Õ«sô=Û—¦† šð¯ëˆ‰/®{­Ž­:̹*oôr•aî‹÷¸îÈyšý:´gu°Q–onšGÅÐ7µ0骯ôàp`¨L鮵“-²/е);÷íô®ÏÒôzô¢“´E{¸×%†'Ö6ÏÔzßqm²ÙE¾XT«™‘ÐŽJ,¬Ý¯³Á ÛÚ­N¶ÇÚ¶/‘»žæÕÐõlpï0 ñ˜ª÷÷oŠ—˜‰{¾;ÕQÊeºÏyëP”‡~Ëñ¨ºaI ú³6–;QÒª-2Á¯qsLÿ‹‰zKZµ¢P)ñø![2—rz«Z­t2µ <ŠBü)vïªY-Œ¾YœRz\ Ü?íHCj…­ŽxÒ ÁâÆÕÙ’c£Í…ÀÍ IðU‹»Å‘‘­›¼õ°Èõ ¼Û:‘+ ®íMÖïzÕ»áÚú°[ÈCý´!9j{M¸I½Øé9¬­¿ .ô(ñøO¢ïþ³÷0®ÌíO[•í·“°Aˆ]%Å}k‡ÝØÍO ¯½÷T¿ƒ°µ™)×zÍtƒÙzøÔÚúô=·?г[xÜ“[ñ(~­q~ ¾~Îàá¹×§žà~†áÿâ^á/áeúÜ9žMÓ]>Ó{» ‰Å{"]Š“½›äa½¼Kþ¼õòÐ[éݰ{c­öpþÔ¾Ç>‡MÝ%®ŒæÙKýã>àR €NÁßÚÊ Ò½”²Ä5ëÑSÂ-üË­Üz=|Ãs²Ã5|| g$¸©ÅJ™•9ëS|牜ÍÏ3¿ak:ßÝ­~î§´›€Üˆã†ÕÞíQMïWèÑ'¾¿èî ¿l\%ËÝ×w3ïMVg}ÜÀz÷ö>5göð1ŸH«CÓ‡ýš]ÔÝuž.]ºƒýÞ+?èõ”ð3õáÙhÁEf%ÿÍS€ÿMUŸõqòYöõsØ+ßãiju”<÷‰m)þpË—~•ÿà—?â™ÿù_à.ù¡?ã›ßú«¿â1>ny~ôßlQ'ŽŠ Qo¿øÿÍ¿*7ÝøuÕ’»prë™@~ŠÏþƒ¹ôö[¬ûy¬q“âŸÀ <ˆ0¡Â… :|1¢Ä‰P¼ˆ1£Æ;zü2¤È‘$Kš<‰2¥Ê•,[º| 3¦Ì™4kÚ,hñ_Λ<{bÜé3¨K B‹z$ª3©D¤š:mªtiTƒHZ½š±*Ö­\»zý 6¬Ø±dËš=‹6­O ZÕºØömظrƒj… ÷©Ó„tâEø·®`•}>Œ8±âÅŒ;~ ™1Ñ‘ÉR®<ó2f’q5óü³aàͤ z.:µêÕ¬[»~ {uÕÓ±kÒ®ýñ6nѺ!ÞEÙ{·Øà‹?Ž<¤¹òåÌÿnΓ8t†Ò“W øõé7·sÿ>¼øñäË«îlž¥÷ñë…·ÿ|ð=üô_åÓ¿?¿þýüûWôë_Hö}7àkâ”axÑ‚ >a„NH!b}9h†Ëi˜‡Ï©W!M†Hb‰&žˆbŠéµ‚*¨âˆ¤ø¡z2šxã‹:îÈc>öÇâh<æh‘ \‚Cý8’‘L> e”}RN‰™“àY‰–‹åXãPZBø%•bŽIf™fÚ%f˜êGd—/©éœgÎIgvÞ Wš:ÊéœLn¾É'›xJh¡†jR E“¤è}‘"Ji¥–^*锓vˆŸ•Bºiy¡bJj©¦žºf”£Î()–ŸÆ´ªx±¢Jk­y¶ÞúÖ¬² Iß—¯ÂªëtÁâJl±ÆÛ”ÃÙktJö´,sÑ"KmµÖ^«Ñ´•iÛ·V©ùkfÞ7.¶æž‹®µåJÖãºhBûì»…º›n½öÞk)½ú¨o²kÅkW¿® ŒoÁ¬é×µ°Ÿ|†Û]èIŒpÅh_"Åji¼1yŠBìì cLrÉ&gخ ð·#3{rÌ2ÏLìË–©ÌÞU ÿ{§Í4ÿ tЛù<ÎámºóZDo)tÓN?­'£üæŒUÒòι4ÔZoÍõVYwõuÑWŽjuÀu†ÝuÚgj¯½dŒL¢›We ·\u³wÞzot7ÝOöm}-ƒ…$•€ïx⊛æöÛW>ø\X/Nyå–;vxÈŽsìÜ.›™ùå¢Nsè¶)K ØTÙ :鮿;W¦g¦ª°Ëz^õì‚ÇÎg{ï¾û‰cíÐM‹»×dêþ{òÊ£Š|Û¨7§mñ^7oüòÖ_½TKI=ŒeI/{ÔÙO~ùSIØ}QéLJø²¯ï·ùòÏï;ü%Ù¯´i¹vÂôÿ@Ñá¯Iþ³N¹ø¶ÚDll 3E!žN9îB Ü¸÷À jPk<Šá(È:öa®ƒÚ  OXº ‘vÖaXäS¸­…4¬áyÐ'¾E¹P„‘™áJ|hà sb ‘#°ÙÌȈ'aâŸÅ\iLë‹aûx84£Eq‹h\,•òÅ–Tq_«›XÔÅ4ª‘RgôÞÉ•%ÞWk¬£éÔÆN ŽqÄ¢w”Ç; r‰ P ÃGÅ0e`€$¤#ÙH •©{#[äÀ™Hjr“Ûã&“´+öÉE©JÑ'9f‰ÊTä“§lb(aƸ؈‡ª¬¥-Q¶ŸVÞï•°\%/O¤Ë[ ³Ž˜ &g²´­2fɘÔ¦3ŸÙÂFµ®6Y³¤{PÄLhj“†Ì¦Ht÷5kºÇ›~ܦ9Ï™ENR–ag";‰ÎxaÊ“]ê\g)ÓK$’3Ÿóì§?C˜ž}‚Ätusçq*„þs¡±;£B=ÈHN‘’‚}(C/z¹0ZtE÷,A AŒŠt¤:ÃåäZ¸‚P…$m©K(ª³¡ôp*¥(-_Š]Óœþpe2ÝUDùɹ›êt¨D(ÕðÈ‚*slE,ªSŸšÉ£õ̧=ßã´Q¨jaFÌ*G盚ګ[-«Y—T;ybMkœÎ W³úЫ_õè5'**]Ò5®]|5Ö ÷Ê·‰½3¡Ò|k_›Ó6pv¬U3tÊÅ"v²¤"¡d£ŠÏ»µž…¥¬gÚÁˆ†UEk§ŠùÙÔþS‚¢í¶ì×V“vJµ´'[Û Ì–¯¹<$nkY Ü7®OáÔo=ÙÙà*·– ü-Eª =Ó)Î]®u¥M‘UixÒ5l³® ÞG⯺ÿé¡°º'‡†w½ƒ„­¡ˆ6KÍú²Bêe¯}ÕèÞyõ’»ÇÓÉ{VßKr·„òÙ\Ñëߘ xÁBã{ÄØ’•§ ®ð Ó`íuë¨ófW- â RQ/câd°{Õ«ø#>T%xâ=xÅ4–õ2\^E´¿À”jVœ½æáXÃ}ÜñfcôW +yyl­”ÆÚã=žwÉTî8Ì4Îþ6¾¿¬²—G7»!ç†É},£ûå4g4¬ùŠ£oy HÖªy΋ ˜Ç¯‹}ìd/»ÙÏŽö´+ojo»Ûß÷¸Ë=HBO7ÐnCpkNØfÑûl«A¿×½®3Ëûsc†wl¯Q:‚ßöàç}w¾ƒñKÑWãŒÙ ^þñU/éîr‚ž‡¦EbQç'z£è ô5G°ëubúªÓýðá&´ê!§”УÞ/B"½‚ M—ØßOø’¿¶ç/˜{76s!¾OhÊ;Bü&E¿öœÿÇÒzs™Ñ‹ž-myþîŸÖÓ~÷ãW=öE0rŸ/ëxå5-þ[+_Š:;?ùçCõ¦ýL¹QMwâ~•|?·|™§>ö—~Ì·}¦Ñ}üGþgq'~º±yÕ7hv X€ Øzp&å§G¨ˆ©7å¤|º}+"x‚ ׂo’/èx¥‚ånþGjù€,ƒ4H}S&ˆE8‚Br¡‘ƒ2˜„H€÷g<‡„΀°G…£Azñ¾—…V¸JH²-¢…b8†ˆ…xÁ…O1€cÈCi†_øYˆ†VH†fHjn†Pˆg±…^¨ÀçK[ÿ]8ˆ`b{hX†pˆ‰È€o˜|yH…xˆŒXF“¡…~z}Tx(G.¨x|X…ŠØ|„h‡ˆÜ7‡8‡jH‡‚ˆ‰›¨Š•‰Ÿè‰QÑ|„µ„“È‹Žè‹W(‹–˜‰V‡5Çz¤h‰¾È†¿Øz·øzH€¦Œ˜°ˆŠº¨ŠñÁŠÇH†¿XŠÈ‡´ÈmXˆÈŒÈ8§Ø‹ÅŽÁÈ‹ø¶Œr¨Žñˆ…Ô˜ˆ’…§k£È‰çÃÇ8_Uè‡+cØñ©ð§‰ˆ9B(¸ˆˆ ‘†&YƒOˆ~û˜Še‹X ™{øj&é$™9ÿ€µè|y‘üx‘”Ks¨‹$iŒ*‚³ƒÄ˜’Íø‘7É’›8”.b “—¨“ÕH”Võ¸‘N ‘‰’ÃØ’Ti‘¹”؈”(y,‰‘[¹‘"Ø}A9“SÙŠKi“¹†ë¨–JY”Lù’R •Pi“t9ŠS™•u©•B™"i—CY‘âÔ—fVùˆz³Çƒ99…O‰“1éŠ'–qYNOé•–T˜^™ vH‹FÙŽ{æ˜5x²™>9lY“’I—%YФ$p¡É[–I™o¹—ðñšgÙ’H›Mè…d¤˜¦y›á§šÖDšw8™Wi„²‰œž—+ÉœGÙ™º ™æ˜”|ù噯¨†±Ø™Î‡ ÇxÀØ{8‰šb™›ÓY‹ œIˆ™ ¹›ÊÙ–¶™•ÙÙ_–)Ÿ”¨‘¨VÉÂ)ˆI+=Y¸ù•|Y‘èɇ¦ ½ÉƒZ•ÅæžšÙ†ªy…ÚŒ ªG£Éc…Y—4I w™žì‡ Öù…äx— “"úž“™êÀ·›SÈ‘0¨žâé : Ä £i  H¢ÊÙž ¡Ï –sI¤®¨¡EšŽ@ŠEý'¡ûÉ¡ã£d9Y£%Ê¢8Hù¡Dº Vš¢ëÙœ9Z›L:¢Wú˜½ù‰NÉ–Gê6úŒÿþù`9¤¹¸¢lʦpyšg ¦Ù—¨é˜]ø„ZŠ /š§CÁ'€ù˜tª“vz¦xœõ§œø£ ¨7¨¤Gœç(§Y6£sžEé¨C*B÷©§šŒ—‰ªnèXž’ ’ýÈœeº¢KÕ;:Q±Z–€§¨ Š¥yIªw:«‘jZ“Ú§:“—ê=Ãèœ@©«Þ)‘  ”ÁŠžœÊ›púnJ¥›9—ú©¤º—VÉš#¹Ÿ” —~š ³é“Þª¥™hª[j„?x»š›ôÚ”ÞŠ¢°i’âŒî “æ*¤':ªèš¤™+I¬G(¯§­Œ¡Y«µÊž#•Ȭ«°ÿ© ®a:¬Ê”±‰§ê—«âzœ ¬!{²0ʲó:¥ë±Ýš¯ß:±ü:‰þ*•;±$K­K‘®"K±Íz›ªª•î'¬ ‹­jåàx)Ÿ°Ža8µ© ˜tØ­YœOû´î8®Þ˜N;§(¬˜ŒÌˆŸ¥Ù©>È^û‡|j±œéŽT;·V‹¶Ìê¶´¶tËŽ_[¶"y©Â·x+¸å¸…“¦žÚ¶ëh¤Ÿ¹Œ\«ŒÛøŽv›†%ɪšÈ·eØ·s+µ€K©ŸË¹êȵo¹^k¨fxŽnØ‹ŽH· z‹¤;– Ë|bÛ¸Óø¸o[Œì(º’;¢÷ªµ¶»·›ûŽÛ[º›‘SkÀ+Ëרº­[Žö ¹oº´ÄŶˆJ-„«Òƒ†‰F„‡½2¥ä‡¡ßtd&n™¾·Ýë<ã;säöà+»ñ«½y¿®t­ñ­ÕËrÅ›ôâ¾åǽ狂ŒÀŠmí«´ñJ¿¶ _×[¿}×Àøç*¬:5¿ ¼¾ ›¿xÁû{5‰ë¿lt¹hûƒÂY±Â懸Ô[|Ñ««ÂÞ—6¼ò¡¶!jrÐ7ÃÖÚw?,Ã8,}D<;üÁü\?,ÄsÑÄVç+OL7+|˜—%»¿vÅ1ŒÅðk{ø•ÀTÅV,Â\…Ázh1&si´Áš'Æù2wo Çq,DzúMslÇwŒÇ_·DyÌÇ}ìǬv, ȃLÈ…ÌÇm¼xF,Ra2)Šœ2Iì%\pEfoaŒÈ¿Ó¬d¿Ûã+Çwq”¬ P:$ŽF˜œÉ UÆÆw3%BÊbÄ2q*ʉªd4Æ©™üp˜¨¿­ìʫ̶W³q³,}JÌ/IäÁĬËèFÂFåË•œÅæ«>&,ÉÅ „|&¾Ã¾Ë\ptÀýóË0,Íü›­ÊÇ„ „Ê1‹Ò7­)Þ-¼ÕdÈcMÖq×Ð#]=RvÕ9}*¯¼ÖÀŒÍg-×a Í©6× Ê‘|DlÝÖ+ÝË^=ñL×ÓòLy$ Ïy­×ïËBúxÏqÃØG|׃R…mØ'MÑ,½×‹ÍØŸl+ <•-Ùã†ØUCªò:zž­°+­‘íØ±¬Ï Â×ÿé×ôl}Ϝ֡ Oæ7ƒ}ú§ø ~¥šÄÃ2 Hi;%.ÅâÖˆäWÄMÓ¸MسŠ0<Õ­ÕZ<Ë}ØÓ\@ÈýÙÊ-ÝT},Î]ÕÐ-Ú9Ú‡¤x†2¹ºÒx¶ŒˆˆF ˜ßhºøÉøøºñm¼ÂøŠn{žÎ;ÏäLÞþ<° +v‡Ý¼ZÞsÞèÿÝT ¨-Ê•B¹œk9œð§£(J›.•ò;¨6*¨ÄÜ×n."Heër^-›ìíÊfÜÞ}îÄ–îÜsín«NmÛº®ÙÝ^îóŽ.ö~ðóȽ¾ï†t¢ÄÕ.Íä~ë¬ ã_ë…„ÔÔîDøk‘R‚î%Ã-ÞÁÙ=Åñ?DéL#”=ãñNò%O2'¿íá­ò OÛãþñÚòúîî3ß*eMôE_vLðônðK®óæ¢ðL_ó@ÛB‰¯7h¬_8-ëgr ÒòÅõAcñ³^ðT_õt®Öâ®ôKï;¯l=¿`¯é Nöˆ³Üò.öÊPoÙm!]ï0æŽós7¿÷ÁúÅûMúžøÌ¯ûÕÍ´NxïÒoü+²úÇT ã/õYðÚÏAÜŸó¼ÏöÔlûÓ1V/ÿƒo$–®þ´tÄïþ·ÿ$XÐàA„ .dØÐáCˆ%Nü€¢B‹fÔØÑãG!EŽ$‰Ð"Ç’(K®dÙÒåK˜$UÆ,8“¦Mš9uîäÙÓçO A…%ZâÔèÑž8‘.eR©Ã§2›N¥ 2êÄ«³VåÚõçÉ–[½Ž%ë€Ø•hEª-ÛÖí[¸qåÎ¥[·+[»y¥j͉Wï_«#ý6 Ø0W°i/fì±°ã¤%O¦\ÙòeÌzg–!óãæÕÃä^súzøñåϧϾ>]¿ÔÛß·X0ÿîÐó@AÛ¯´¾ TpA¯tî@!Ãê%#ü(4Ö*´°,/ÜðÃÛÓðCK4ñÄŽFD±6ŠˆSqE”FÕ:L‘Æ£¯?{ôñG [ 2(¼~{qH÷nLÉËlŽIúöÓJ*«´rÃ#ƒ,’¥,©ÜŒ4¯lÌÉ ÅŒ/̰x4sM6ÛÄ®ËÙ² N(ÓMÆÈ”ˆN<áâÎÅ>tPÑøìQ-Ú EÒÎ ů¢F­MòÒ”ôRL›3õSS%rMÑE5ÂÓ¹ôô”Ôë’3UV[u5²WA“õ¿X;-ÓÖZû Ô\‹¢”ÖæzvXb1*ö¼YÇ;6Ù==\v*Sc|·U+öZl9åF´LÛ6T!EývÚhY̶_#•ð\vÛÅs\ÅòÖ]“Â}’Þ¡Ê5ßB –_€ÆÞåUV`HoUáÈ #˜aä¬UbŠŒ+æïá v–á-ïµ8Áï>®ìÓ%E6ùdó0ÎXÚu9^˜Y”)Løå˜K×c\kÖyçÝT&1«]-–³EŸŸÕ÷4žÇ¶å¤›v:³¢±dg„‡nöi.g†ë¼n¾ši®Ã[3z¯bôcDiûÆŽ×îzT°Ý–{nãÜ5[T“ÓŽ(êknn²7¦p„ Ï·ìwùÔ½ g»qÇñû2îÈ+·Ü%¾¥Þ÷k‘»…üòÆõ}Óœ·ýtÔñF|sÓ…†ÊÀÔOõð€2„–ñrÈC .Ž_5¼_ÒÄ÷Cî0ˆÐ©  —ø„D‘°„I‚ÞÓŽXÅâŠÐ±á·øÅlI1GHÃbçwF^ŒKé"×øF£E‘ŠNä1(F»•ޱa!÷øÇaáQA(QcýøA ÚGQâ!ùHW ²@„t#ÖˆHÆD:’ÞÑ¢&7ùILI’@”ÄdKù·%^”¾Ò#*WùíÊõœE–³¤e-myK\æR—»äe/w¹_S˜Ã$f1{«™$ŠÊ„¥¯9ÇfFóMÖ¥½R…Lhj ™Æäf7½ùMp†Sœ´$Ö8ÍyNt¦œÒdçÒ”SMµ½sê¤g=qÉ­cÁó9úlR;ý)8y憟ÿºÏ@)§¹r&”Pýgää¥Y*+¢i©e%µùš‡ÖăҚ(rÈOù0TuñʧB%Ò†ÂokéÃG\jÍ$e¤€·™)‚¦wGWæz2…iA'…O¨@t£‰ëhk†ê¡þ«(HY•QÞÕXE-T/´Ô°4•})ÿåjSÑVñ¥N½èMk”ͨ¢Õ“TëVOéÖ(y*©ã±¥êêJÖÕ´¬k5jUÑ7›·æ‘Íáé^‹X+½²ô<2MæˆHIX›ê´«“õêTÛшbVG²«fyÊÙèx6›U%MÕŠ ÇŠV´~íìfC›¿ü1Ö¥hš«Q©jØ®4¬8Õšg [X¸"Ô¦Ö;mqQ‰¿ ¬g|¬;qkÖW-—¸ƒE"‘û\K ×¹g£lw©ÅÎþí·‚e¬`‡;Ëó¦W»Ò½-vûI]ëW¼‘%¯_Õ;3ôâ÷¾Í ¯v] éòö¿^ŒïŒ¸[°â^·ª³=‰kg›°ë2ضŽmÿTIë`Ô^6´¯•ï†%¼`ÔÊšEŪ›àÞR¸Â«…íg?øá ƒ8Æ ö0…IÙ`Ϙ´°±Iœ_øzWȲòe#‹^ö"Ù¼øUrc¦¤r–¯P£q{ûKÎ$gvÉ –²“±jǶ¹>FZj1Ìâ.—µ<®±5JÈ"›øg(Ö¯~Ç›ÞòBx¾v¦/¤ú«ç úÏÀ¥$f÷Lè_4µ÷stéoº¾“tG{ÝôÆ7sî,ñˆÏZÛÝØ\w;Ò¶î+AžÖõ›ß͵/·½ýê]ŸûÄÁN±À7ûðwå5oõ͉îG”GœÜO¶Îýÿ=Y€+ºÒ.~©ˆù\uó‚Üwzj¢ÎL¬ëÙãÆÖöØ‹­ì­g½ºóùú‹Müs¥ ¼Î­M6ÓGî켚¼áó 5¤?>âUÃÝÉ{77Òùnp©oÙâ&ýuÀ÷­ê—áwµ°™}x#'~¿‹úåšåcxÍ1>³ƒA«â¯˜Ro¥õ@¯c§yÃöìésÜc,ǹñ¹å¹Pßw£G~ö3MÔö˜:Ãa¿7Ü™Oß?KÚç·Ñ¢?>veÓ:øx×–Þ ?^³ƒøÁßzô§.gë“ú—·ü”;ÿoj.‡74ïwylå£ýÐã>ùµOüö#9á*ž×Ó,“±2C#½6ƒ½Ì² ³ºâë+ªú1T½Ã1ÔË=u ¤Ïc«½Ó1{ÀD2l³ „²´@Õ³0 ­ |?Êb½àâ Ä¢O°l·Ð‹=­Óª|ã´»Â=ŒAž³™ »At‘µ$„–%”ÁîbÂ&ê—ù3‹á¬5*Œ 'œ¸Ã ¿.ôº/ܽŠB)„ºø(íÃì y; ™ö,Ü9:´*£Ð½úKjÃOrõ³Á6¤ìÑC¸Ã9+@¤²…òî²'HŒDC CI¬DH$Ä}šCÜÄ“rDOüÄAÌıDR,ES§r:EU\ÅHEW|Åâ`EY &X¬E[¼E\ÌE]ÜE^ìE_üE` Æ` ;libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/NestedEmptyTag.html0000644000175000017500000005510410404045242032756 0ustar arnaudarnaud00000000000000 NestedEmptyTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.logic
    Class NestedEmptyTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.logic.ConditionalTagBase
                  |
                  +--org.apache.struts.taglib.logic.EmptyTag
                        |
                        +--org.apache.struts.taglib.nested.logic.NestedEmptyTag
    
    All Implemented Interfaces:
    NestedNameSupport, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedEmptyTag
    extends EmptyTag
    implements NestedNameSupport

    NestedEmptyTag.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 14:10:07 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String originalName
               
    private  java.lang.String originalProperty
               
     
    Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    cookie, header, messages, name, parameter, property, role, scope, user
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedEmptyTag()
               
     
    Method Summary
     int doEndTag()
              Complete the processing of the tag.
     int doStartTag()
              Overriding method of the heart of the matter.
     void release()
              Release the tag's resources and reset the values.
     
    Methods inherited from class org.apache.struts.taglib.logic.EmptyTag
    condition, condition
     
    Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedNameSupport
    getName, setName
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedPropertySupport
    getProperty, setProperty
     

    Field Detail

    originalName

    private java.lang.String originalName

    originalProperty

    private java.lang.String originalProperty
    Constructor Detail

    NestedEmptyTag

    public NestedEmptyTag()
    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the matter. Gets the relative property and leaves the rest up to the original tag implementation. Sweet.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class ConditionalTagBase
    Returns:
    int JSP continuation directive. This is in the hands of the super class.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception occurs

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Complete the processing of the tag. The nested tags here will restore all the original value for the tag itself and the nesting context.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class ConditionalTagBase
    Returns:
    int to describe the next step for the JSP processor
    Throws:
    javax.servlet.jsp.JspException - for the bad things JSP's do

    release

    public void release()
    Release the tag's resources and reset the values.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class ConditionalTagBase


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/NestedEqualTag.html0000644000175000017500000006104710404045172032734 0ustar arnaudarnaud00000000000000 NestedEqualTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.logic
    Class NestedEqualTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.logic.ConditionalTagBase
                  |
                  +--org.apache.struts.taglib.logic.CompareTagBase
                        |
                        +--org.apache.struts.taglib.logic.EqualTag
                              |
                              +--org.apache.struts.taglib.nested.logic.NestedEqualTag
    
    All Implemented Interfaces:
    NestedNameSupport, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedEqualTag
    extends EqualTag
    implements NestedNameSupport

    NestedEqualTag.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 14:10:07 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String originalName
               
    private  java.lang.String originalProperty
               
     
    Fields inherited from class org.apache.struts.taglib.logic.CompareTagBase
    DOUBLE_COMPARE, LONG_COMPARE, messages, STRING_COMPARE, value
     
    Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    cookie, header, name, parameter, property, role, scope, user
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedEqualTag()
               
     
    Method Summary
     int doEndTag()
              Complete the processing of the tag.
     int doStartTag()
              Overriding method of the heart of the matter.
     void release()
              Release the tag's resources and reset the values.
     
    Methods inherited from class org.apache.struts.taglib.logic.EqualTag
    condition
     
    Methods inherited from class org.apache.struts.taglib.logic.CompareTagBase
    condition, getValue, setValue
     
    Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedNameSupport
    getName, setName
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedPropertySupport
    getProperty, setProperty
     

    Field Detail

    originalName

    private java.lang.String originalName

    originalProperty

    private java.lang.String originalProperty
    Constructor Detail

    NestedEqualTag

    public NestedEqualTag()
    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the matter. Gets the relative property and leaves the rest up to the original tag implementation. Sweet.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class ConditionalTagBase
    Returns:
    int JSP continuation directive. This is in the hands of the super class.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception occurs

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Complete the processing of the tag. The nested tags here will restore all the original value for the tag itself and the nesting context.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class ConditionalTagBase
    Returns:
    int to describe the next step for the JSP processor
    Throws:
    javax.servlet.jsp.JspException - for the bad things JSP's do

    release

    public void release()
    Release the tag's resources and reset the values.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class CompareTagBase


    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015010423140533011313 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/NestedGreaterEqualTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/NestedGreaterEqualTag.h0000644000175000017500000006140510404045216033526 0ustar arnaudarnaud00000000000000 NestedGreaterEqualTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.logic
    Class NestedGreaterEqualTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.logic.ConditionalTagBase
                  |
                  +--org.apache.struts.taglib.logic.CompareTagBase
                        |
                        +--org.apache.struts.taglib.logic.GreaterEqualTag
                              |
                              +--org.apache.struts.taglib.nested.logic.NestedGreaterEqualTag
    
    All Implemented Interfaces:
    NestedNameSupport, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedGreaterEqualTag
    extends GreaterEqualTag
    implements NestedNameSupport

    NestedGreaterEqualTag.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 14:10:07 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String originalName
               
    private  java.lang.String originalProperty
               
     
    Fields inherited from class org.apache.struts.taglib.logic.CompareTagBase
    DOUBLE_COMPARE, LONG_COMPARE, messages, STRING_COMPARE, value
     
    Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    cookie, header, name, parameter, property, role, scope, user
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedGreaterEqualTag()
               
     
    Method Summary
     int doEndTag()
              Complete the processing of the tag.
     int doStartTag()
              Overriding method of the heart of the matter.
     void release()
              Release the tag's resources and reset the values.
     
    Methods inherited from class org.apache.struts.taglib.logic.GreaterEqualTag
    condition
     
    Methods inherited from class org.apache.struts.taglib.logic.CompareTagBase
    condition, getValue, setValue
     
    Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedNameSupport
    getName, setName
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedPropertySupport
    getProperty, setProperty
     

    Field Detail

    originalName

    private java.lang.String originalName

    originalProperty

    private java.lang.String originalProperty
    Constructor Detail

    NestedGreaterEqualTag

    public NestedGreaterEqualTag()
    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the matter. Gets the relative property and leaves the rest up to the original tag implementation. Sweet.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class ConditionalTagBase
    Returns:
    int JSP continuation directive. This is in the hands of the super class.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception occurs

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Complete the processing of the tag. The nested tags here will restore all the original value for the tag itself and the nesting context.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class ConditionalTagBase
    Returns:
    int to describe the next step for the JSP processor
    Throws:
    javax.servlet.jsp.JspException - for the bad things JSP's do

    release

    public void release()
    Release the tag's resources and reset the values.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class CompareTagBase


    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000014710423140533011321 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/NestedGreaterThanTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/NestedGreaterThanTag.ht0000644000175000017500000006135310404045172033540 0ustar arnaudarnaud00000000000000 NestedGreaterThanTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.logic
    Class NestedGreaterThanTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.logic.ConditionalTagBase
                  |
                  +--org.apache.struts.taglib.logic.CompareTagBase
                        |
                        +--org.apache.struts.taglib.logic.GreaterThanTag
                              |
                              +--org.apache.struts.taglib.nested.logic.NestedGreaterThanTag
    
    All Implemented Interfaces:
    NestedNameSupport, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedGreaterThanTag
    extends GreaterThanTag
    implements NestedNameSupport

    NestedGreaterThanTag.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 14:10:07 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String originalName
               
    private  java.lang.String originalProperty
               
     
    Fields inherited from class org.apache.struts.taglib.logic.CompareTagBase
    DOUBLE_COMPARE, LONG_COMPARE, messages, STRING_COMPARE, value
     
    Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    cookie, header, name, parameter, property, role, scope, user
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedGreaterThanTag()
               
     
    Method Summary
     int doEndTag()
              Complete the processing of the tag.
     int doStartTag()
              Overriding method of the heart of the matter.
     void release()
              Release the tag's resources and reset the values.
     
    Methods inherited from class org.apache.struts.taglib.logic.GreaterThanTag
    condition
     
    Methods inherited from class org.apache.struts.taglib.logic.CompareTagBase
    condition, getValue, setValue
     
    Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedNameSupport
    getName, setName
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedPropertySupport
    getProperty, setProperty
     

    Field Detail

    originalName

    private java.lang.String originalName

    originalProperty

    private java.lang.String originalProperty
    Constructor Detail

    NestedGreaterThanTag

    public NestedGreaterThanTag()
    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the matter. Gets the relative property and leaves the rest up to the original tag implementation. Sweet.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class ConditionalTagBase
    Returns:
    int JSP continuation directive. This is in the hands of the super class.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception occurs

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Complete the processing of the tag. The nested tags here will restore all the original value for the tag itself and the nesting context.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class ConditionalTagBase
    Returns:
    int to describe the next step for the JSP processor
    Throws:
    javax.servlet.jsp.JspException - for the bad things JSP's do

    release

    public void release()
    Release the tag's resources and reset the values.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class CompareTagBase


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/NestedIterateTag.html0000644000175000017500000007014410404045242033256 0ustar arnaudarnaud00000000000000 NestedIterateTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.logic
    Class NestedIterateTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.logic.IterateTag
                        |
                        +--org.apache.struts.taglib.nested.logic.NestedIterateTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, NestedNameSupport, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedIterateTag
    extends IterateTag
    implements NestedNameSupport

    NestedIterateTag. Slightly more complex that the other extensions. This one has to yield a proper index property. Very taxing.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 14:10:07 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String nesting
               
    private  java.lang.String originalName
               
    private  java.lang.String originalNesting
               
    private  java.lang.String originalNestingName
               
    private  java.lang.String originalProperty
               
     
    Fields inherited from class org.apache.struts.taglib.logic.IterateTag
    collection, id, indexId, iterator, length, lengthCount, lengthValue, messages, name, offset, offsetValue, property, scope, started, type
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedIterateTag()
               
     
    Method Summary
    private  java.lang.String deriveNestedProperty()
              The only added property to the class.
     int doAfterBody()
              This is only overriden as the include reference will need it's index updated.
     int doEndTag()
              Complete the processing of the tag.
     int doStartTag()
              Overriding method of the heart of the matter.
     void release()
              Release the tag's resources and reset the values.
     
    Methods inherited from class org.apache.struts.taglib.logic.IterateTag
    getCollection, getId, getIndex, getIndexId, getLength, getName, getOffset, getProperty, getScope, getType, setCollection, setId, setIndexId, setLength, setName, setOffset, setProperty, setScope, setType
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getParent, getValue, getValues, removeValue, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedNameSupport
    getName, setName
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedPropertySupport
    getProperty, setProperty
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    nesting

    private java.lang.String nesting

    originalName

    private java.lang.String originalName

    originalProperty

    private java.lang.String originalProperty

    originalNesting

    private java.lang.String originalNesting

    originalNestingName

    private java.lang.String originalNestingName
    Constructor Detail

    NestedIterateTag

    public NestedIterateTag()
    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the matter. Gets the relative property and leaves the rest up to the original tag implementation. Sweet.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class IterateTag
    Returns:
    int JSP continuation directive. This is in the hands of the super class.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    deriveNestedProperty

    private java.lang.String deriveNestedProperty()
    The only added property to the class. For use in proper nesting.

    Returns:
    String value of the property and the current index or mapping.

    doAfterBody

    public int doAfterBody()
                    throws javax.servlet.jsp.JspException
    This is only overriden as the include reference will need it's index updated.

    Specified by:
    doAfterBody in interface javax.servlet.jsp.tagext.BodyTag
    Overrides:
    doAfterBody in class IterateTag
    Returns:
    int JSP continuation directive.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Complete the processing of the tag. The nested tags here will restore all the original value for the tag itself and the nesting context.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class IterateTag
    Returns:
    int to describe the next step for the JSP processor
    Throws:
    javax.servlet.jsp.JspException - for the bad things JSP's do

    release

    public void release()
    Release the tag's resources and reset the values.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class IterateTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/NestedIterateTei.html0000644000175000017500000003073110404045212033257 0ustar arnaudarnaud00000000000000 NestedIterateTei (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.logic
    Class NestedIterateTei

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagExtraInfo
            |
            +--org.apache.struts.taglib.logic.IterateTei
                  |
                  +--org.apache.struts.taglib.nested.logic.NestedIterateTei
    

    public class NestedIterateTei
    extends IterateTei

    NestedIterateTei Extending the original tag's tei class, so that we can make the "id" attribute optional, so that those who want to script can add it if they need it otherwise we can maintain the nice lean tag markup. TODO - Look at deleting this class. Potentially a pointless existance now that the super class is towing the line. Left alone because it's not hurting anything as-is. Note: When done, it requires pointing the tei reference in the struts-nested.tld to org.apache.struts.taglib.logic.IterateTei

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 14:10:07 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates

    Field Summary
     
    Fields inherited from class javax.servlet.jsp.tagext.TagExtraInfo
     
    Constructor Summary
    NestedIterateTei()
               
     
    Method Summary
     javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
              Return information about the scripting variables to be created.
     
    Methods inherited from class javax.servlet.jsp.tagext.TagExtraInfo
    getTagInfo, isValid, setTagInfo
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    NestedIterateTei

    public NestedIterateTei()
    Method Detail

    getVariableInfo

    public javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
    Return information about the scripting variables to be created.

    Overrides:
    getVariableInfo in class IterateTei


    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000014510423140533011317 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/NestedLessEqualTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/NestedLessEqualTag.html0000644000175000017500000006124310404045240033555 0ustar arnaudarnaud00000000000000 NestedLessEqualTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.logic
    Class NestedLessEqualTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.logic.ConditionalTagBase
                  |
                  +--org.apache.struts.taglib.logic.CompareTagBase
                        |
                        +--org.apache.struts.taglib.logic.LessEqualTag
                              |
                              +--org.apache.struts.taglib.nested.logic.NestedLessEqualTag
    
    All Implemented Interfaces:
    NestedNameSupport, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedLessEqualTag
    extends LessEqualTag
    implements NestedNameSupport

    NestedLessEqualTag.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 14:10:07 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String originalName
               
    private  java.lang.String originalProperty
               
     
    Fields inherited from class org.apache.struts.taglib.logic.CompareTagBase
    DOUBLE_COMPARE, LONG_COMPARE, messages, STRING_COMPARE, value
     
    Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    cookie, header, name, parameter, property, role, scope, user
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedLessEqualTag()
               
     
    Method Summary
     int doEndTag()
              Complete the processing of the tag.
     int doStartTag()
              Overriding method of the heart of the matter.
     void release()
              Release the tag's resources and reset the values.
     
    Methods inherited from class org.apache.struts.taglib.logic.LessEqualTag
    condition
     
    Methods inherited from class org.apache.struts.taglib.logic.CompareTagBase
    condition, getValue, setValue
     
    Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedNameSupport
    getName, setName
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedPropertySupport
    getProperty, setProperty
     

    Field Detail

    originalName

    private java.lang.String originalName

    originalProperty

    private java.lang.String originalProperty
    Constructor Detail

    NestedLessEqualTag

    public NestedLessEqualTag()
    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the matter. Gets the relative property and leaves the rest up to the original tag implementation. Sweet.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class ConditionalTagBase
    Returns:
    int JSP continuation directive. This is in the hands of the super class.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception occurs

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Complete the processing of the tag. The nested tags here will restore all the original value for the tag itself and the nesting context.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class ConditionalTagBase
    Returns:
    int to describe the next step for the JSP processor
    Throws:
    javax.servlet.jsp.JspException - for the bad things JSP's do

    release

    public void release()
    Release the tag's resources and reset the values.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class CompareTagBase


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/NestedLessThanTag.html0000644000175000017500000006120110404045240033372 0ustar arnaudarnaud00000000000000 NestedLessThanTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.logic
    Class NestedLessThanTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.logic.ConditionalTagBase
                  |
                  +--org.apache.struts.taglib.logic.CompareTagBase
                        |
                        +--org.apache.struts.taglib.logic.LessThanTag
                              |
                              +--org.apache.struts.taglib.nested.logic.NestedLessThanTag
    
    All Implemented Interfaces:
    NestedNameSupport, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedLessThanTag
    extends LessThanTag
    implements NestedNameSupport

    NestedLessThanTag.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 14:10:07 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String originalName
               
    private  java.lang.String originalProperty
               
     
    Fields inherited from class org.apache.struts.taglib.logic.CompareTagBase
    DOUBLE_COMPARE, LONG_COMPARE, messages, STRING_COMPARE, value
     
    Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    cookie, header, name, parameter, property, role, scope, user
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedLessThanTag()
               
     
    Method Summary
     int doEndTag()
              Complete the processing of the tag.
     int doStartTag()
              Overriding method of the heart of the matter.
     void release()
              Release the tag's resources and reset the values.
     
    Methods inherited from class org.apache.struts.taglib.logic.LessThanTag
    condition
     
    Methods inherited from class org.apache.struts.taglib.logic.CompareTagBase
    condition, getValue, setValue
     
    Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedNameSupport
    getName, setName
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedPropertySupport
    getProperty, setProperty
     

    Field Detail

    originalName

    private java.lang.String originalName

    originalProperty

    private java.lang.String originalProperty
    Constructor Detail

    NestedLessThanTag

    public NestedLessThanTag()
    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the matter. Gets the relative property and leaves the rest up to the original tag implementation. Sweet.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class ConditionalTagBase
    Returns:
    int JSP continuation directive. This is in the hands of the super class.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception occurs

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Complete the processing of the tag. The nested tags here will restore all the original value for the tag itself and the nesting context.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class ConditionalTagBase
    Returns:
    int to describe the next step for the JSP processor
    Throws:
    javax.servlet.jsp.JspException - for the bad things JSP's do

    release

    public void release()
    Release the tag's resources and reset the values.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class CompareTagBase


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/NestedMatchTag.html0000644000175000017500000005751210404045172032723 0ustar arnaudarnaud00000000000000 NestedMatchTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.logic
    Class NestedMatchTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.logic.ConditionalTagBase
                  |
                  +--org.apache.struts.taglib.logic.MatchTag
                        |
                        +--org.apache.struts.taglib.nested.logic.NestedMatchTag
    
    All Implemented Interfaces:
    NestedNameSupport, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedMatchTag
    extends MatchTag
    implements NestedNameSupport

    NestedMatchTag.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 14:10:07 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String originalName
               
    private  java.lang.String originalProperty
               
     
    Fields inherited from class org.apache.struts.taglib.logic.MatchTag
    location, value
     
    Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    cookie, header, messages, name, parameter, property, role, scope, user
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedMatchTag()
               
     
    Method Summary
     int doEndTag()
              Complete the processing of the tag.
     int doStartTag()
              Overriding method of the heart of the matter.
     void release()
              Release the tag's resources and reset the values.
     
    Methods inherited from class org.apache.struts.taglib.logic.MatchTag
    condition, condition, getLocation, getValue, setLocation, setValue
     
    Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedNameSupport
    getName, setName
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedPropertySupport
    getProperty, setProperty
     

    Field Detail

    originalName

    private java.lang.String originalName

    originalProperty

    private java.lang.String originalProperty
    Constructor Detail

    NestedMatchTag

    public NestedMatchTag()
    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the matter. Gets the relative property and leaves the rest up to the original tag implementation. Sweet.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class ConditionalTagBase
    Returns:
    int JSP continuation directive. This is in the hands of the super class.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception occurs

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Complete the processing of the tag. The nested tags here will restore all the original value for the tag itself and the nesting context.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class ConditionalTagBase
    Returns:
    int to describe the next step for the JSP processor
    Throws:
    javax.servlet.jsp.JspException - for the bad things JSP's do

    release

    public void release()
    Release the tag's resources and reset the values.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class MatchTag


    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015610423140533011321 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/NestedMessagesNotPresentTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/NestedMessagesNotPresen0000644000175000017500000006133110404045216033666 0ustar arnaudarnaud00000000000000 NestedMessagesNotPresentTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.logic
    Class NestedMessagesNotPresentTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.logic.ConditionalTagBase
                  |
                  +--org.apache.struts.taglib.logic.MessagesPresentTag
                        |
                        +--org.apache.struts.taglib.logic.MessagesNotPresentTag
                              |
                              +--org.apache.struts.taglib.nested.logic.NestedMessagesNotPresentTag
    
    All Implemented Interfaces:
    NestedNameSupport, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedMessagesNotPresentTag
    extends MessagesNotPresentTag
    implements NestedNameSupport

    NestedMessagesNotPresentTag.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 14:10:07 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates, David Winterfeldt
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String originalName
               
    private  java.lang.String originalProperty
               
     
    Fields inherited from class org.apache.struts.taglib.logic.MessagesPresentTag
    message
     
    Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    cookie, header, messages, name, parameter, property, role, scope, user
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedMessagesNotPresentTag()
               
     
    Method Summary
     int doEndTag()
              Complete the processing of the tag.
     int doStartTag()
              Overriding method of the heart of the matter.
     void release()
              Release the tag's resources and reset the values.
     
    Methods inherited from class org.apache.struts.taglib.logic.MessagesNotPresentTag
    condition
     
    Methods inherited from class org.apache.struts.taglib.logic.MessagesPresentTag
    condition, getMessage, setMessage
     
    Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedNameSupport
    getName, setName
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedPropertySupport
    getProperty, setProperty
     

    Field Detail

    originalName

    private java.lang.String originalName

    originalProperty

    private java.lang.String originalProperty
    Constructor Detail

    NestedMessagesNotPresentTag

    public NestedMessagesNotPresentTag()
    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the matter. Gets the relative property and leaves the rest up to the original tag implementation. Sweet.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class ConditionalTagBase
    Returns:
    int JSP continuation directive. This is in the hands of the super class.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception occurs

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Complete the processing of the tag. The nested tags here will restore all the original value for the tag itself and the nesting context.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class ConditionalTagBase
    Returns:
    int to describe the next step for the JSP processor
    Throws:
    javax.servlet.jsp.JspException - for the bad things JSP's do

    release

    public void release()
    Release the tag's resources and reset the values.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class MessagesPresentTag


    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015310423140533011316 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/NestedMessagesPresentTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/NestedMessagesPresentTa0000644000175000017500000005771510404045246033674 0ustar arnaudarnaud00000000000000 NestedMessagesPresentTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.logic
    Class NestedMessagesPresentTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.logic.ConditionalTagBase
                  |
                  +--org.apache.struts.taglib.logic.MessagesPresentTag
                        |
                        +--org.apache.struts.taglib.nested.logic.NestedMessagesPresentTag
    
    All Implemented Interfaces:
    NestedNameSupport, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedMessagesPresentTag
    extends MessagesPresentTag
    implements NestedNameSupport

    NestedMessagesPresentTag.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 14:10:07 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates, David Winterfeldt
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String originalName
               
    private  java.lang.String originalProperty
               
     
    Fields inherited from class org.apache.struts.taglib.logic.MessagesPresentTag
    message
     
    Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    cookie, header, messages, name, parameter, property, role, scope, user
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedMessagesPresentTag()
               
     
    Method Summary
     int doEndTag()
              Complete the processing of the tag.
     int doStartTag()
              Overriding method of the heart of the matter.
     void release()
              Release the tag's resources and reset the values.
     
    Methods inherited from class org.apache.struts.taglib.logic.MessagesPresentTag
    condition, condition, getMessage, setMessage
     
    Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedNameSupport
    getName, setName
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedPropertySupport
    getProperty, setProperty
     

    Field Detail

    originalName

    private java.lang.String originalName

    originalProperty

    private java.lang.String originalProperty
    Constructor Detail

    NestedMessagesPresentTag

    public NestedMessagesPresentTag()
    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the matter. Gets the relative property and leaves the rest up to the original tag implementation. Sweet.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class ConditionalTagBase
    Returns:
    int JSP continuation directive. This is in the hands of the super class.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception occurs

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Complete the processing of the tag. The nested tags here will restore all the original value for the tag itself and the nesting context.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class ConditionalTagBase
    Returns:
    int to describe the next step for the JSP processor
    Throws:
    javax.servlet.jsp.JspException - for the bad things JSP's do

    release

    public void release()
    Release the tag's resources and reset the values.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class MessagesPresentTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/NestedNotEmptyTag.html0000644000175000017500000005700610404045234033443 0ustar arnaudarnaud00000000000000 NestedNotEmptyTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.logic
    Class NestedNotEmptyTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.logic.ConditionalTagBase
                  |
                  +--org.apache.struts.taglib.logic.EmptyTag
                        |
                        +--org.apache.struts.taglib.logic.NotEmptyTag
                              |
                              +--org.apache.struts.taglib.nested.logic.NestedNotEmptyTag
    
    All Implemented Interfaces:
    NestedNameSupport, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedNotEmptyTag
    extends NotEmptyTag
    implements NestedNameSupport

    NestedNotEmptyTag.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 14:10:07 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String originalName
               
    private  java.lang.String originalProperty
               
     
    Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    cookie, header, messages, name, parameter, property, role, scope, user
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedNotEmptyTag()
               
     
    Method Summary
     int doEndTag()
              Complete the processing of the tag.
     int doStartTag()
              Overriding method of the heart of the matter.
     void release()
              Release the tag's resources and reset the values.
     
    Methods inherited from class org.apache.struts.taglib.logic.NotEmptyTag
    condition
     
    Methods inherited from class org.apache.struts.taglib.logic.EmptyTag
    condition
     
    Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedNameSupport
    getName, setName
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedPropertySupport
    getProperty, setProperty
     

    Field Detail

    originalName

    private java.lang.String originalName

    originalProperty

    private java.lang.String originalProperty
    Constructor Detail

    NestedNotEmptyTag

    public NestedNotEmptyTag()
    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the matter. Gets the relative property and leaves the rest up to the original tag implementation. Sweet.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class ConditionalTagBase
    Returns:
    int JSP continuation directive. This is in the hands of the super class.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception occurs

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Complete the processing of the tag. The nested tags here will restore all the original value for the tag itself and the nesting context.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class ConditionalTagBase
    Returns:
    int to describe the next step for the JSP processor
    Throws:
    javax.servlet.jsp.JspException - for the bad things JSP's do

    release

    public void release()
    Release the tag's resources and reset the values.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class ConditionalTagBase


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/NestedNotEqualTag.html0000644000175000017500000006120510404045246033413 0ustar arnaudarnaud00000000000000 NestedNotEqualTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.logic
    Class NestedNotEqualTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.logic.ConditionalTagBase
                  |
                  +--org.apache.struts.taglib.logic.CompareTagBase
                        |
                        +--org.apache.struts.taglib.logic.NotEqualTag
                              |
                              +--org.apache.struts.taglib.nested.logic.NestedNotEqualTag
    
    All Implemented Interfaces:
    NestedNameSupport, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedNotEqualTag
    extends NotEqualTag
    implements NestedNameSupport

    NestedNotEqualTag.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 14:10:07 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String originalName
               
    private  java.lang.String originalProperty
               
     
    Fields inherited from class org.apache.struts.taglib.logic.CompareTagBase
    DOUBLE_COMPARE, LONG_COMPARE, messages, STRING_COMPARE, value
     
    Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    cookie, header, name, parameter, property, role, scope, user
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedNotEqualTag()
               
     
    Method Summary
     int doEndTag()
              Complete the processing of the tag.
     int doStartTag()
              Overriding method of the heart of the matter.
     void release()
              Release the tag's resources and reset the values.
     
    Methods inherited from class org.apache.struts.taglib.logic.NotEqualTag
    condition
     
    Methods inherited from class org.apache.struts.taglib.logic.CompareTagBase
    condition, getValue, setValue
     
    Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedNameSupport
    getName, setName
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedPropertySupport
    getProperty, setProperty
     

    Field Detail

    originalName

    private java.lang.String originalName

    originalProperty

    private java.lang.String originalProperty
    Constructor Detail

    NestedNotEqualTag

    public NestedNotEqualTag()
    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the matter. Gets the relative property and leaves the rest up to the original tag implementation. Sweet.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class ConditionalTagBase
    Returns:
    int JSP continuation directive. This is in the hands of the super class.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception occurs

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Complete the processing of the tag. The nested tags here will restore all the original value for the tag itself and the nesting context.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class ConditionalTagBase
    Returns:
    int to describe the next step for the JSP processor
    Throws:
    javax.servlet.jsp.JspException - for the bad things JSP's do

    release

    public void release()
    Release the tag's resources and reset the values.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class CompareTagBase


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/NestedNotMatchTag.html0000644000175000017500000006104010404045210033364 0ustar arnaudarnaud00000000000000 NestedNotMatchTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.logic
    Class NestedNotMatchTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.logic.ConditionalTagBase
                  |
                  +--org.apache.struts.taglib.logic.MatchTag
                        |
                        +--org.apache.struts.taglib.logic.NotMatchTag
                              |
                              +--org.apache.struts.taglib.nested.logic.NestedNotMatchTag
    
    All Implemented Interfaces:
    NestedNameSupport, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedNotMatchTag
    extends NotMatchTag
    implements NestedNameSupport

    NestedNotMatchTag.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 14:10:07 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String originalName
               
    private  java.lang.String originalProperty
               
     
    Fields inherited from class org.apache.struts.taglib.logic.MatchTag
    location, value
     
    Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    cookie, header, messages, name, parameter, property, role, scope, user
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedNotMatchTag()
               
     
    Method Summary
     int doEndTag()
              Complete the processing of the tag.
     int doStartTag()
              Overriding method of the heart of the matter.
     void release()
              Release the tag's resources and reset the values.
     
    Methods inherited from class org.apache.struts.taglib.logic.NotMatchTag
    condition
     
    Methods inherited from class org.apache.struts.taglib.logic.MatchTag
    condition, getLocation, getValue, setLocation, setValue
     
    Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedNameSupport
    getName, setName
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedPropertySupport
    getProperty, setProperty
     

    Field Detail

    originalName

    private java.lang.String originalName

    originalProperty

    private java.lang.String originalProperty
    Constructor Detail

    NestedNotMatchTag

    public NestedNotMatchTag()
    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the matter. Gets the relative property and leaves the rest up to the original tag implementation. Sweet.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class ConditionalTagBase
    Returns:
    int JSP continuation directive. This is in the hands of the super class.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception occurs

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Complete the processing of the tag. The nested tags here will restore all the original value for the tag itself and the nesting context.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class ConditionalTagBase
    Returns:
    int to describe the next step for the JSP processor
    Throws:
    javax.servlet.jsp.JspException - for the bad things JSP's do

    release

    public void release()
    Release the tag's resources and reset the values.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class MatchTag


    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000014610423140533011320 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/NestedNotPresentTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/NestedNotPresentTag.htm0000644000175000017500000006021210404045234033602 0ustar arnaudarnaud00000000000000 NestedNotPresentTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.logic
    Class NestedNotPresentTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.logic.ConditionalTagBase
                  |
                  +--org.apache.struts.taglib.logic.PresentTag
                        |
                        +--org.apache.struts.taglib.logic.NotPresentTag
                              |
                              +--org.apache.struts.taglib.nested.logic.NestedNotPresentTag
    
    All Implemented Interfaces:
    NestedNameSupport, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedNotPresentTag
    extends NotPresentTag
    implements NestedNameSupport

    NestedNotPresentTag.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 14:10:07 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String originalName
               
    private  java.lang.String originalProperty
               
     
    Fields inherited from class org.apache.struts.taglib.logic.PresentTag
    ROLE_DELIMITER
     
    Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    cookie, header, messages, name, parameter, property, role, scope, user
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedNotPresentTag()
               
     
    Method Summary
     int doEndTag()
              Complete the processing of the tag.
     int doStartTag()
              Overriding method of the heart of the matter.
     void release()
              Release the tag's resources and reset the values.
     
    Methods inherited from class org.apache.struts.taglib.logic.NotPresentTag
    condition
     
    Methods inherited from class org.apache.struts.taglib.logic.PresentTag
    condition
     
    Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedNameSupport
    getName, setName
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedPropertySupport
    getProperty, setProperty
     

    Field Detail

    originalName

    private java.lang.String originalName

    originalProperty

    private java.lang.String originalProperty
    Constructor Detail

    NestedNotPresentTag

    public NestedNotPresentTag()
    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the matter. Gets the relative property and leaves the rest up to the original tag implementation. Sweet.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class ConditionalTagBase
    Returns:
    int JSP continuation directive. This is in the hands of the super class.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception occurs

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Complete the processing of the tag. The nested tags here will restore all the original value for the tag itself and the nesting context.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class ConditionalTagBase
    Returns:
    int to describe the next step for the JSP processor
    Throws:
    javax.servlet.jsp.JspException - for the bad things JSP's do

    release

    public void release()
    Release the tag's resources and reset the values.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class ConditionalTagBase


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/NestedPresentTag.html0000644000175000017500000005633010404045230033277 0ustar arnaudarnaud00000000000000 NestedPresentTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested.logic
    Class NestedPresentTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.logic.ConditionalTagBase
                  |
                  +--org.apache.struts.taglib.logic.PresentTag
                        |
                        +--org.apache.struts.taglib.nested.logic.NestedPresentTag
    
    All Implemented Interfaces:
    NestedNameSupport, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedPresentTag
    extends PresentTag
    implements NestedNameSupport

    NestedPresentTag.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 14:10:07 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String originalName
               
    private  java.lang.String originalProperty
               
     
    Fields inherited from class org.apache.struts.taglib.logic.PresentTag
    ROLE_DELIMITER
     
    Fields inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    cookie, header, messages, name, parameter, property, role, scope, user
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedPresentTag()
               
     
    Method Summary
     int doEndTag()
              Complete the processing of the tag.
     int doStartTag()
              Overriding method of the heart of the matter.
     void release()
              Release the tag's resources and reset the values.
     
    Methods inherited from class org.apache.struts.taglib.logic.PresentTag
    condition, condition
     
    Methods inherited from class org.apache.struts.taglib.logic.ConditionalTagBase
    getCookie, getHeader, getName, getParameter, getProperty, getRole, getScope, getUser, setCookie, setHeader, setName, setParameter, setProperty, setRole, setScope, setUser
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedNameSupport
    getName, setName
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedPropertySupport
    getProperty, setProperty
     

    Field Detail

    originalName

    private java.lang.String originalName

    originalProperty

    private java.lang.String originalProperty
    Constructor Detail

    NestedPresentTag

    public NestedPresentTag()
    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the matter. Gets the relative property and leaves the rest up to the original tag implementation. Sweet.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class ConditionalTagBase
    Returns:
    int JSP continuation directive. This is in the hands of the super class.
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception occurs

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Complete the processing of the tag. The nested tags here will restore all the original value for the tag itself and the nesting context.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class ConditionalTagBase
    Returns:
    int to describe the next step for the JSP processor
    Throws:
    javax.servlet.jsp.JspException - for the bad things JSP's do

    release

    public void release()
    Release the tag's resources and reset the values.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class ConditionalTagBase


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/package-frame.html0000644000175000017500000000453410404045216032546 0ustar arnaudarnaud00000000000000 org.apache.struts.taglib.nested.logic (Apache Struts API Documentation) org.apache.struts.taglib.nested.logic
    Classes 
    NestedEmptyTag
    NestedEqualTag
    NestedGreaterEqualTag
    NestedGreaterThanTag
    NestedIterateTag
    NestedIterateTei
    NestedLessEqualTag
    NestedLessThanTag
    NestedMatchTag
    NestedMessagesNotPresentTag
    NestedMessagesPresentTag
    NestedNotEmptyTag
    NestedNotEqualTag
    NestedNotMatchTag
    NestedNotPresentTag
    NestedPresentTag
    libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/package-summary.html0000644000175000017500000002271210404045214033145 0ustar arnaudarnaud00000000000000 org.apache.struts.taglib.nested.logic (Apache Struts API Documentation)

    Package org.apache.struts.taglib.nested.logic

    The nested html tags extend the org.apache.struts.taglib.logic tags to allow them to relate to each other in a nested nature.

    See:
              Description

    Class Summary
    NestedEmptyTag NestedEmptyTag.
    NestedEqualTag NestedEqualTag.
    NestedGreaterEqualTag NestedGreaterEqualTag.
    NestedGreaterThanTag NestedGreaterThanTag.
    NestedIterateTag NestedIterateTag.
    NestedIterateTei NestedIterateTei Extending the original tag's tei class, so that we can make the "id" attribute optional, so that those who want to script can add it if they need it otherwise we can maintain the nice lean tag markup.
    NestedLessEqualTag NestedLessEqualTag.
    NestedLessThanTag NestedLessThanTag.
    NestedMatchTag NestedMatchTag.
    NestedMessagesNotPresentTag NestedMessagesNotPresentTag.
    NestedMessagesPresentTag NestedMessagesPresentTag.
    NestedNotEmptyTag NestedNotEmptyTag.
    NestedNotEqualTag NestedNotEqualTag.
    NestedNotMatchTag NestedNotMatchTag.
    NestedNotPresentTag NestedNotPresentTag.
    NestedPresentTag NestedPresentTag.
     

    Package org.apache.struts.taglib.nested.logic Description

    The nested html tags extend the org.apache.struts.taglib.logic tags to allow them to relate to each other in a nested nature. The fundamental logic of the logic tags don't change, except in that all references to beans and bean properties will be managed in a nested context.

    Nested logic taglib






    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/package-tree.html0000644000175000017500000003404610404045174032417 0ustar arnaudarnaud00000000000000 org.apache.struts.taglib.nested.logic Class Hierarchy (Apache Struts API Documentation)

    Hierarchy For Package org.apache.struts.taglib.nested.logic

    Package Hierarchies:
    All Packages

    Class Hierarchy



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/logic/package-use.html0000644000175000017500000001240110404045204032235 0ustar arnaudarnaud00000000000000 Uses of Package org.apache.struts.taglib.nested.logic (Apache Struts API Documentation)

    Uses of Package
    org.apache.struts.taglib.nested.logic

    No usage of org.apache.struts.taglib.nested.logic



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/NestedNameSupport.html0000644000175000017500000003451310404045232032404 0ustar arnaudarnaud00000000000000 NestedNameSupport (Apache Struts API Documentation)

    org.apache.struts.taglib.nested
    Interface NestedNameSupport

    All Superinterfaces:
    NestedPropertySupport, NestedTagSupport
    All Known Subinterfaces:
    NestedParentSupport
    All Known Implementing Classes:
    NestedCheckboxTag, NestedDefineTag, NestedEmptyTag, NestedEqualTag, NestedErrorsTag, NestedFileTag, NestedFormTag, NestedGreaterEqualTag, NestedGreaterThanTag, NestedHiddenTag, NestedImgTag, NestedIterateTag, NestedLessEqualTag, NestedLessThanTag, NestedLinkTag, NestedMatchTag, NestedMessagesNotPresentTag, NestedMessagesPresentTag, NestedMessagesTag, NestedMessageTag, NestedMultiboxTag, NestedNotEmptyTag, NestedNotEqualTag, NestedNotMatchTag, NestedNotPresentTag, NestedOptionsCollectionTag, NestedOptionsTag, NestedPasswordTag, NestedPresentTag, NestedPropertyTag, NestedRadioTag, NestedRootTag, NestedSelectTag, NestedSizeTag, NestedTextareaTag, NestedTextTag, NestedWriteTag

    public interface NestedNameSupport
    extends NestedPropertySupport

    This is so that managing classes can tell if a nested tag needs to have its name property set. From what I know, these tags use the property property, and the name is an addition.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates

    Method Summary
     java.lang.String getName()
              The getters and setters required to set a tags name property.
     void setName(java.lang.String newNamed)
              The setter for the name property
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedPropertySupport
    getProperty, setProperty
     

    Method Detail

    getName

    public java.lang.String getName()
    The getters and setters required to set a tags name property.

    Returns:
    String value of the tags' name property

    setName

    public void setName(java.lang.String newNamed)
    The setter for the name property

    Parameters:
    newNamed - new String value to set the name property to


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/NestedParentSupport.html0000644000175000017500000002546610404045212032762 0ustar arnaudarnaud00000000000000 NestedParentSupport (Apache Struts API Documentation)

    org.apache.struts.taglib.nested
    Interface NestedParentSupport

    All Superinterfaces:
    NestedNameSupport, NestedPropertySupport, NestedTagSupport

    public interface NestedParentSupport
    extends NestedNameSupport

    This interface is so managing classes of the nested tag can identify a tag as a parent tag that other tags retrieve nested properties from.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates
    See Also:
    NestedPropertyTag, NestedIterateTag

    Method Summary
     java.lang.String getNestedProperty()
              This is required by all parent tags so that the child tags can get a hold of their nested property.
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedNameSupport
    getName, setName
     
    Methods inherited from interface org.apache.struts.taglib.nested.NestedPropertySupport
    getProperty, setProperty
     

    Method Detail

    getNestedProperty

    public java.lang.String getNestedProperty()
    This is required by all parent tags so that the child tags can get a hold of their nested property.

    Returns:
    String of the qaulified nested property to this implementing tag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/NestedPropertyHelper.html0000644000175000017500000005443210404045174033122 0ustar arnaudarnaud00000000000000 NestedPropertyHelper (Apache Struts API Documentation)

    org.apache.struts.taglib.nested
    Class NestedPropertyHelper

    java.lang.Object
      |
      +--org.apache.struts.taglib.nested.NestedPropertyHelper
    

    public class NestedPropertyHelper
    extends java.lang.Object

    A simple helper class that does everything that needs to be done to get the nested tag extension to work. The tags will pass in their relative properties and this class will leverage the accessibility of the request object to calculate the nested references and manage them from a central place.

    The helper method setNestedProperties(javax.servlet.http.HttpServletRequest, org.apache.struts.taglib.nested.NestedPropertySupport) takes a reference to the tag itself so all the simpler tags can have their references managed from a central location. From here, the reference to a provided name is also preserved for use.

    With all tags keeping track of themselves, we only have to seek to the next level, or parent tag, were a tag will append a dot and it's own property.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates

    Field Summary
    static java.lang.String NESTED_INCLUDES_KEY
               
     
    Constructor Summary
    NestedPropertyHelper()
               
     
    Method Summary
    private static java.lang.String calculateRelativeProperty(java.lang.String property, java.lang.String parent)
               
    static void deleteReference(javax.servlet.http.HttpServletRequest request)
              Deletes the nested reference from the request object.
    static java.lang.String getAdjustedProperty(javax.servlet.http.HttpServletRequest request, java.lang.String property)
              Get the adjusted property.
    static java.lang.String getCurrentName(javax.servlet.http.HttpServletRequest request, NestedNameSupport nested)
              Returns the bean name from the request object that the properties are nesting against.
    static java.lang.String getCurrentProperty(javax.servlet.http.HttpServletRequest request)
              Returns the current nesting property from the request object.
    private static NestedReference referenceInstance(javax.servlet.http.HttpServletRequest request)
              Pulls the current nesting reference from the request object, and if there isn't one there, then it will create one and set it.
    static void setName(javax.servlet.http.HttpServletRequest request, java.lang.String name)
              Sets the provided name into the request object for reference by the other nested tags.
    static void setNestedProperties(javax.servlet.http.HttpServletRequest request, NestedPropertySupport tag)
              Helper method that will set all the relevant nesting properties for the provided tag reference depending on the implementation.
    static void setProperty(javax.servlet.http.HttpServletRequest request, java.lang.String property)
              Sets the provided property into the request object for reference by the other nested tags.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    NESTED_INCLUDES_KEY

    public static final java.lang.String NESTED_INCLUDES_KEY
    See Also:
    Constant Field Values
    Constructor Detail

    NestedPropertyHelper

    public NestedPropertyHelper()
    Method Detail

    getCurrentProperty

    public static final java.lang.String getCurrentProperty(javax.servlet.http.HttpServletRequest request)
    Returns the current nesting property from the request object.

    Parameters:
    request - object to fetch the property reference from
    Returns:
    String of the bean name to nest against

    getCurrentName

    public static final java.lang.String getCurrentName(javax.servlet.http.HttpServletRequest request,
                                                        NestedNameSupport nested)

    Returns the bean name from the request object that the properties are nesting against.

    The requirement of the tag itself could be removed in the future, but is required if support for the tag is maintained.

    Parameters:
    request - object to fetch the bean reference from
    nested - tag from which to start the search from
    Returns:
    the string of the bean name to be nesting against

    getAdjustedProperty

    public static final java.lang.String getAdjustedProperty(javax.servlet.http.HttpServletRequest request,
                                                             java.lang.String property)
    Get the adjusted property. Apply the provided property, to the property already stored in the request object.

    Parameters:
    request - to pull the reference from
    property - to retrieve the evaluated nested property with
    Returns:
    String of the final nested property reference.

    setProperty

    public static final void setProperty(javax.servlet.http.HttpServletRequest request,
                                         java.lang.String property)
    Sets the provided property into the request object for reference by the other nested tags.

    Parameters:
    request - object to set the new property into
    property - String to set the property to

    setName

    public static final void setName(javax.servlet.http.HttpServletRequest request,
                                     java.lang.String name)
    Sets the provided name into the request object for reference by the other nested tags.

    Parameters:
    request - object to set the new name into
    name - String to set the name to

    deleteReference

    public static final void deleteReference(javax.servlet.http.HttpServletRequest request)
    Deletes the nested reference from the request object.

    Parameters:
    request - object to remove the reference from

    setNestedProperties

    public static void setNestedProperties(javax.servlet.http.HttpServletRequest request,
                                           NestedPropertySupport tag)
    Helper method that will set all the relevant nesting properties for the provided tag reference depending on the implementation.

    Parameters:
    request - object to pull references from
    tag - to set the nesting values into

    referenceInstance

    private static final NestedReference referenceInstance(javax.servlet.http.HttpServletRequest request)
    Pulls the current nesting reference from the request object, and if there isn't one there, then it will create one and set it.

    Parameters:
    request - object to manipulate the reference into
    Returns:
    current nesting reference as stored in the request object

    calculateRelativeProperty

    private static java.lang.String calculateRelativeProperty(java.lang.String property,
                                                              java.lang.String parent)


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/NestedPropertySupport.html0000644000175000017500000003375710404045210033355 0ustar arnaudarnaud00000000000000 NestedPropertySupport (Apache Struts API Documentation)

    org.apache.struts.taglib.nested
    Interface NestedPropertySupport

    All Superinterfaces:
    NestedTagSupport
    All Known Subinterfaces:
    NestedNameSupport, NestedParentSupport
    All Known Implementing Classes:
    NestedCheckboxTag, NestedDefineTag, NestedEmptyTag, NestedEqualTag, NestedErrorsTag, NestedFileTag, NestedFormTag, NestedGreaterEqualTag, NestedGreaterThanTag, NestedHiddenTag, NestedImageTag, NestedImgTag, NestedIterateTag, NestedLessEqualTag, NestedLessThanTag, NestedLinkTag, NestedMatchTag, NestedMessagesNotPresentTag, NestedMessagesPresentTag, NestedMessagesTag, NestedMessageTag, NestedMultiboxTag, NestedNotEmptyTag, NestedNotEqualTag, NestedNotMatchTag, NestedNotPresentTag, NestedOptionsCollectionTag, NestedOptionsTag, NestedPasswordTag, NestedPresentTag, NestedPropertyTag, NestedRadioTag, NestedRootTag, NestedSelectTag, NestedSizeTag, NestedSubmitTag, NestedTextareaTag, NestedTextTag, NestedWriteTag

    public interface NestedPropertySupport
    extends NestedTagSupport

    This interface is for managing classes of the nested extension, so they can know to set the tag's property property.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates

    Method Summary
     java.lang.String getProperty()
              The getters and setters required to set a tags property property.
     void setProperty(java.lang.String newProperty)
              The setter for the poroperty property
     

    Method Detail

    getProperty

    public java.lang.String getProperty()
    The getters and setters required to set a tags property property.

    Returns:
    String value of the tags' property property

    setProperty

    public void setProperty(java.lang.String newProperty)
    The setter for the poroperty property

    Parameters:
    newProperty - new String value to set the property property to


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/NestedPropertyTag.html0000644000175000017500000006066010404045230032407 0ustar arnaudarnaud00000000000000 NestedPropertyTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested
    Class NestedPropertyTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.nested.NestedPropertyTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, NestedNameSupport, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedPropertyTag
    extends javax.servlet.jsp.tagext.BodyTagSupport
    implements NestedNameSupport

    NestedPropertyTag. The one of only two additions in this nested suite of tags. This is so that you can specify extra levels of nesting in one elegant tag rather than having to propagate and manage an extra dot notated property in nested child tags. It's simply recognised by the helper class and it's property is added to the nesting list.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String originalName
               
    private  java.lang.String originalNest
               
    private  java.lang.String originalProperty
               
    private  java.lang.String property
               
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedPropertyTag()
               
     
    Method Summary
     int doAfterBody()
              Render the resulting content evaluation.
     int doEndTag()
              Evaluate the rest of the page
     int doStartTag()
              Overriding method of the heart of the tag.
     java.lang.String getName()
              The getters and setters required to set a tags name property.
     java.lang.String getProperty()
              Getter method for the property property
     void release()
              JSP method to release all resources held by the tag.
     void setName(java.lang.String newNamed)
              The setter for the name property
     void setProperty(java.lang.String newProperty)
              Setter method for the property property Also, only setting the original property value to those values not set by the nested logic.
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    property

    private java.lang.String property

    originalNest

    private java.lang.String originalNest

    originalName

    private java.lang.String originalName

    originalProperty

    private java.lang.String originalProperty
    Constructor Detail

    NestedPropertyTag

    public NestedPropertyTag()
    Method Detail

    getName

    public java.lang.String getName()
    Description copied from interface: NestedNameSupport
    The getters and setters required to set a tags name property.

    Specified by:
    getName in interface NestedNameSupport
    Returns:
    String value of the tags' name property

    setName

    public void setName(java.lang.String newNamed)
    Description copied from interface: NestedNameSupport
    The setter for the name property

    Specified by:
    setName in interface NestedNameSupport
    Parameters:
    newNamed - new String value to set the name property to

    getProperty

    public java.lang.String getProperty()
    Getter method for the property property

    Specified by:
    getProperty in interface NestedPropertySupport
    Returns:
    String value of the property property

    setProperty

    public void setProperty(java.lang.String newProperty)
    Setter method for the property property Also, only setting the original property value to those values not set by the nested logic.

    Specified by:
    setProperty in interface NestedPropertySupport
    Parameters:
    newProperty - new value for the property property

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the tag. Gets the relative property and tells the JSP engine to evaluate its body content.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.BodyTagSupport
    Returns:
    int JSP continuation directive.
    javax.servlet.jsp.JspException

    doAfterBody

    public int doAfterBody()
                    throws javax.servlet.jsp.JspException
    Render the resulting content evaluation.

    Specified by:
    doAfterBody in interface javax.servlet.jsp.tagext.BodyTag
    Overrides:
    doAfterBody in class javax.servlet.jsp.tagext.BodyTagSupport
    Returns:
    int JSP continuation directive.
    javax.servlet.jsp.JspException

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Evaluate the rest of the page

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.BodyTagSupport
    Returns:
    int JSP continuation directive.
    javax.servlet.jsp.JspException

    release

    public void release()
    JSP method to release all resources held by the tag.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class javax.servlet.jsp.tagext.BodyTagSupport


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/NestedReference.html0000644000175000017500000003601510404045224032025 0ustar arnaudarnaud00000000000000 NestedReference (Apache Struts API Documentation)

    org.apache.struts.taglib.nested
    Class NestedReference

    java.lang.Object
      |
      +--org.apache.struts.taglib.nested.NestedReference
    
    All Implemented Interfaces:
    java.io.Serializable

    public class NestedReference
    extends java.lang.Object
    implements java.io.Serializable

    So that a nested hierarchy can penetrate a dynamic JSP include, this class will hold the details of a bean name and nested property.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $
    Author:
    Arron Bates
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String beanName
               
    private  java.lang.String property
               
     
    Constructor Summary
    NestedReference()
              Empty constructor.
    NestedReference(java.lang.String name, java.lang.String property)
              Constructor takes the all the relevant details to init the object.
     
    Method Summary
     java.lang.String getBeanName()
              Getter for the bean name
     java.lang.String getNestedProperty()
              Getter for the nested property
     void setBeanName(java.lang.String newName)
              Setter for the bean name
     void setNestedProperty(java.lang.String newProperty)
              Setter for the nested property
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    beanName

    private java.lang.String beanName

    property

    private java.lang.String property
    Constructor Detail

    NestedReference

    public NestedReference()
    Empty constructor.


    NestedReference

    public NestedReference(java.lang.String name,
                           java.lang.String property)
    Constructor takes the all the relevant details to init the object.

    Parameters:
    name - String name of the bean that the include is to reference
    property - String nested property value that the include will be continuing on with.
    Method Detail

    getBeanName

    public java.lang.String getBeanName()
    Getter for the bean name

    Returns:
    String value that will be the bean's reference

    setBeanName

    public void setBeanName(java.lang.String newName)
    Setter for the bean name

    Parameters:
    newName - String value to set the bean reference.

    getNestedProperty

    public java.lang.String getNestedProperty()
    Getter for the nested property

    Returns:
    String value that is the nested property for the current nesting

    setNestedProperty

    public void setNestedProperty(java.lang.String newProperty)
    Setter for the nested property

    Parameters:
    newProperty - String value of the new current nesting level


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/NestedRootTag.html0000644000175000017500000005770110404045224031513 0ustar arnaudarnaud00000000000000 NestedRootTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested
    Class NestedRootTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.nested.NestedRootTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, NestedNameSupport, NestedPropertySupport, NestedTagSupport, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedRootTag
    extends javax.servlet.jsp.tagext.BodyTagSupport
    implements NestedNameSupport

    NestedRootTag. The only other addition in this nested suite of tags. This tag allows for a nested structure to start without relying on the bean and workings of the FormTag. Useful for view pages that don't update when returning to the server, or use hyperlinks rather than form submits. The Bean that it uses can come out of a jsp:useBean tag or define another bean that's already in scope. As long as the other Struts tags can find the bean by name, it'll work. It's simply recognised by the helper class and it's property is added to the nesting list.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String name
               
    private  java.lang.String originalName
               
    private  java.lang.String originalNesting
               
    private  java.lang.String originalNestingName
               
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedRootTag()
               
     
    Method Summary
     int doAfterBody()
              Render the resulting content evaluation.
     int doEndTag()
              Evaluate the rest of the page
     int doStartTag()
              Overriding method of the heart of the tag.
     java.lang.String getName()
              Getter method for the name property
     java.lang.String getProperty()
              Getter method for the property property
     void release()
              JSP method to release all resources held by the tag.
     void setName(java.lang.String name)
              Setter method for the name property
     void setProperty(java.lang.String property)
              Setter method for the property property
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    name

    private java.lang.String name

    originalName

    private java.lang.String originalName

    originalNesting

    private java.lang.String originalNesting

    originalNestingName

    private java.lang.String originalNestingName
    Constructor Detail

    NestedRootTag

    public NestedRootTag()
    Method Detail

    getProperty

    public java.lang.String getProperty()
    Getter method for the property property

    Specified by:
    getProperty in interface NestedPropertySupport
    Returns:
    String value of the property property

    setProperty

    public void setProperty(java.lang.String property)
    Setter method for the property property

    Specified by:
    setProperty in interface NestedPropertySupport
    Parameters:
    property - new value for the property property

    getName

    public java.lang.String getName()
    Getter method for the name property

    Specified by:
    getName in interface NestedNameSupport
    Returns:
    String value of the name property

    setName

    public void setName(java.lang.String name)
    Setter method for the name property

    Specified by:
    setName in interface NestedNameSupport
    Parameters:
    name - new value for the name property

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the tag. Gets the relative property and tells the JSP engine to evaluate its body content.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.BodyTagSupport
    Returns:
    int JSP continuation directive.
    javax.servlet.jsp.JspException

    doAfterBody

    public int doAfterBody()
                    throws javax.servlet.jsp.JspException
    Render the resulting content evaluation.

    Specified by:
    doAfterBody in interface javax.servlet.jsp.tagext.BodyTag
    Overrides:
    doAfterBody in class javax.servlet.jsp.tagext.BodyTagSupport
    Returns:
    int JSP continuation directive.
    javax.servlet.jsp.JspException

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Evaluate the rest of the page

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.BodyTagSupport
    Returns:
    int JSP continuation directive.
    javax.servlet.jsp.JspException

    release

    public void release()
    JSP method to release all resources held by the tag.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class javax.servlet.jsp.tagext.BodyTagSupport


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/NestedTagSupport.html0000644000175000017500000002677210404045222032246 0ustar arnaudarnaud00000000000000 NestedTagSupport (Apache Struts API Documentation)

    org.apache.struts.taglib.nested
    Interface NestedTagSupport

    All Known Subinterfaces:
    NestedNameSupport, NestedParentSupport, NestedPropertySupport
    All Known Implementing Classes:
    NestedCheckboxTag, NestedDefineTag, NestedEmptyTag, NestedEqualTag, NestedErrorsTag, NestedFileTag, NestedFormTag, NestedGreaterEqualTag, NestedGreaterThanTag, NestedHiddenTag, NestedImageTag, NestedImgTag, NestedIterateTag, NestedLessEqualTag, NestedLessThanTag, NestedLinkTag, NestedMatchTag, NestedMessagesNotPresentTag, NestedMessagesPresentTag, NestedMessagesTag, NestedMessageTag, NestedMultiboxTag, NestedNotEmptyTag, NestedNotEqualTag, NestedNotMatchTag, NestedNotPresentTag, NestedOptionsCollectionTag, NestedOptionsTag, NestedPasswordTag, NestedPresentTag, NestedPropertyTag, NestedRadioTag, NestedRootTag, NestedSelectTag, NestedSizeTag, NestedSubmitTag, NestedTextareaTag, NestedTextTag, NestedWriteTag

    public interface NestedTagSupport

    This is to simply allow managing classes to identify the tags to invoke common methods against them. This interface is empty and is for identification only.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-26 13:57:44 +0100 (Tue, 26 Aug 2003) $
    Author:
    Arron Bates



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/NestedWriteNestingTag.html0000644000175000017500000005033110404045216033203 0ustar arnaudarnaud00000000000000 NestedWriteNestingTag (Apache Struts API Documentation)

    org.apache.struts.taglib.nested
    Class NestedWriteNestingTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.nested.NestedWriteNestingTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class NestedWriteNestingTag
    extends javax.servlet.jsp.tagext.BodyTagSupport

    NestedWriteNestingTag. Created so developers could have a more elegant way of getting to the underlying nested property their tag properties are referencing.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $
    Author:
    Arron Bates
    See Also:
    Serialized Form

    Field Summary
    private  boolean filter
               
    private  java.lang.String originalProperty
               
    private  java.lang.String property
               
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    NestedWriteNestingTag()
               
     
    Method Summary
     int doEndTag()
               
     int doStartTag()
              Overriding method of the heart of the tag.
     boolean getFilter()
              Getter method for the filter property
     java.lang.String getProperty()
              Getter method for the property property
     void release()
              JSP method to release all resources held by the tag.
     void setFilter(boolean newFilter)
              Setter method for the filter property
     void setProperty(java.lang.String newProperty)
              Setter method for the property property
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doAfterBody, doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    filter

    private boolean filter

    property

    private java.lang.String property

    originalProperty

    private java.lang.String originalProperty
    Constructor Detail

    NestedWriteNestingTag

    public NestedWriteNestingTag()
    Method Detail

    getProperty

    public java.lang.String getProperty()
    Getter method for the property property

    Returns:
    String value of the property property

    setProperty

    public void setProperty(java.lang.String newProperty)
    Setter method for the property property

    Parameters:
    newProperty - new value for the property property

    getFilter

    public boolean getFilter()
    Getter method for the filter property

    Returns:
    String value of the filter property

    setFilter

    public void setFilter(boolean newFilter)
    Setter method for the filter property

    Parameters:
    newFilter - new value for the filter property

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Overriding method of the heart of the tag. Gets the relative property and tells the JSP engine to evaluate its body content.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.BodyTagSupport
    Returns:
    int JSP continuation directive.
    javax.servlet.jsp.JspException

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.BodyTagSupport
    javax.servlet.jsp.JspException

    release

    public void release()
    JSP method to release all resources held by the tag.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class javax.servlet.jsp.tagext.BodyTagSupport


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/package-frame.html0000644000175000017500000000367110404045206031451 0ustar arnaudarnaud00000000000000 org.apache.struts.taglib.nested (Apache Struts API Documentation) org.apache.struts.taglib.nested
    Interfaces 
    NestedNameSupport
    NestedParentSupport
    NestedPropertySupport
    NestedTagSupport
    Classes 
    NestedPropertyHelper
    NestedPropertyTag
    NestedReference
    NestedRootTag
    NestedWriteNestingTag
    libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/package-summary.html0000644000175000017500000006640310404045240032054 0ustar arnaudarnaud00000000000000 org.apache.struts.taglib.nested (Apache Struts API Documentation)

    Package org.apache.struts.taglib.nested

    Nested tags & supporting classes extend the base struts tags to allow them to relate to each other in a nested nature.

    See:
              Description

    Interface Summary
    NestedNameSupport This is so that managing classes can tell if a nested tag needs to have its name property set.
    NestedParentSupport This interface is so managing classes of the nested tag can identify a tag as a parent tag that other tags retrieve nested properties from.
    NestedPropertySupport This interface is for managing classes of the nested extension, so they can know to set the tag's property property.
    NestedTagSupport This is to simply allow managing classes to identify the tags to invoke common methods against them.
     

    Class Summary
    NestedPropertyHelper A simple helper class that does everything that needs to be done to get the nested tag extension to work.
    NestedPropertyTag NestedPropertyTag.
    NestedReference So that a nested hierarchy can penetrate a dynamic JSP include, this class will hold the details of a bean name and nested property.
    NestedRootTag NestedRootTag.
    NestedWriteNestingTag NestedWriteNestingTag.
     

    Package org.apache.struts.taglib.nested Description

    Nested tags & supporting classes extend the base struts tags to allow them to relate to each other in a nested nature. The fundamental logic of the original tags don't change, except in that all references to beans and bean properties will be managed in a nested context.


    Introduction

    The nesting extension provides the ability to define a nested object model and efficiently represent and manage that model through JSP's custom tags.

    It's written in a layer that extends the current Struts tags, building on their logic and functionality. The layer enables the tags to be aware of the tags which surround them so they can correctly provide the nesting property reference to the Struts system. Struts already supported properties which use "dot notation" in accessing nested objects and properties.

    e.g. myProperty.childProperty.finalProperty

    Because of this the controller servlet excellently manages this nested model. These tags are about bringing such ease of management to the JSP view of the architecture.


    Foundation Concepts - model.

    A bean holds a reference to another bean internally, and all access to that bean is handled through the current bean. This act of having one bean's access go through another bean is known as "nesting beans". The first bean is known as the parent bean. The bean which it references, is known as a child bean. The terms "parent" and "child" are commonly used to describe the model's hierarchy.

    A simple example...
    Take an object which represents a monkey. The monkey's job is to pick bunches of bananas. On each bunch picked hangs many bananas. If this case was translated to bean objects, the monkey object would have a reference to the bunch objects he picked, and each bunch object would hold a reference to the bananas hanging in the bunch.

    To describe this...
    The monkey object is the parent to the bunch object, and the bunch object is a child of the monkey object. The bunch object is parent to its child banana objects, and the child banana objects children of the bunch object. The monkey is higher in the hierarchy than the bananas, and the bananas lower in the hierarchy to the bunches.

    One special term to remember is for the most parent class, which is known as the "root" object which starts the hierarchy.


    Foundation Concepts - tags.

    What the tags provide is an efficient way or representing the above models within JSP tag markup. As a result the tags take on similar relationships to each other. A tag can be the parent of another, and similarly be a child of a parent tag. However the most important part to remember, is that the properties of parent tags define the nested property for the child tags' properties.

    One issue which may confuse the new developer, is that even though a tag is a parent tag in a markup sense (the opening tag and closing tag are either side of another tag) does not immediately mean that the child tag will be relative to that tag. Why? Some tags make bad parents. In other words, they're not logical steps in defining a hierarchy.

    For example the relationship between the select tag and the options tag. The html:options tag "must" be surrounded by a parent html:select tag.

    eg:
    <html:select name="myBean" property="mySelectProperty" >
    <html:options name="myBean" property="myOptionsProperty" >
    </html:select>

    In the nested context, this would cause undesired results if the select tag was a parent. The bean reference would become...

      mySelectProperty.myOptionsProperty
    ...which when translated, Struts would go to the value of the select property and then try to get your options list from that returned value. The extended logic tags are the same. You don't want to extend your properties within the objects the logic tags are evaluating.

    To get manage this, the tags in the nested extension are categorised into parent tags and non-parent tags. Those which implement org.apache.struts.taglib.nested.NestedParentSupport are classed as parents, and the nested system knows they define levels in the nested hierarchy. Every other tag, does not, and will be skipped if found to be a "markup parent" (like our select tag) and not a "nested parent".

    There are also the special case of starting off the hierarchy with a "root" tag. These tags are what the extension requires to provide them with the bean by which the structure will be based on.


    Nested Tag List.

    Here's a list of tags in the nested extension, grouped by parent/context functionality. "root", "nested parent", "markup parent" & "basic".

    Root Tags
    markup name brief description
    html:form For backwards compatibility, you can use the typical form tag to implement your nested hierarchy.
    nested:form An extension of the above html:form, this is just to provide definition in the nested tag library.
    nested:root When you don't want to configure a form, you can use any bean which is in "scope" by specifying its name within this tag.


    Nested Parent Tags (Affect the hierarchy)
    markup name brief description
    nested:nest This tag executes no logic, simply representing a nesting level for the rest of the markup to relate to.
    nested:iterate Extension of logic:iterate you can use it to iterate through a list, and have all child references nest within the beans returned from this iterated collection.


    Markup Parent Tags (marked-up like parent tags, but don't affect the hierarchy)
    markup name brief description
    nested:select html:select extension. Provides the logic to render a select box in Html.
    nested:empty logic:empty extension.
    nested:notEmpty logic:notEmpty extension.
    nested:equal logic:equal extension.
    nested:notEqual logic:notEqual extension.
    nested:greaterEqual logic:greaterEqual extension.
    nested:greaterThan logic:greaterThan extension.
    nested:lessEqual logic:lessEqual extension.
    nested:lessThan logic:lessThan extension.
    nested:match logic:match extension.
    nested:notMatch logic:notMatch extension.
    nested:present logic:present extension.
    nested:notPresent logic:notPresent extension.


    Basic tags (usually a tag which has no body content)
    markup name brief description
    nested:checkbox html: extension.
    nested:hidden html:hidden extension.
    nested:define bean:define extension.
    nested:image html:image extension.
    nested:img html:img extension.
    nested:link html:link extension.
    nested:message bean:message extension.
    nested:multibox html:multibox extension.
    nested:options html:options extension.
    nested:optionsCollection html:optionsCollection extension.
    nested:password html:password extension.
    nested:radio html:radio extension.
    nested:select html:select extension.
    nested:size bean:size extension.
    nested:submit html:submit extension.
    nested:text html:text extension.
    nested:textarea html:textarea extension.
    nested:write bean:write extension.


    The relative references and the "property" property.

    Use of the "property" property is exactly the same as the original Struts tag with minor addition. Appends the provided property to the nested property of the tags that surround it. You can use additional nesting (use "dot notation") within the provided property as the current struts system allows but there is now a tag which can provide this in a "cleaner" fashion. :)

    The one other addition to the "property" property, is the ability to step backwards in the heirarchy in the familiar directory fashion; e.g. "../../myPropertyName"

    As expected this allows you to step backwards in the nested model to access a higher level in the object tree. The implementation uses the StringTokenizer working off the "/" delimiter and counts the tokens. This was going to be denied, enforcing the ".." fashion, but on consideration, allowed for some easier-to-read naming possibilities.

    Consider "propertyOne.propertyTwo.propertyThree.propertyFour". With the current nesting level beneath "propertyFour" you can instead use "two/three/four/anotherProperty" which is easier to understand than "../../../anotherProperty". Doesn't sound like much, but makes life easier when traversing large jsp pages for tags defining your object model.

    Also implemented is the also familiar directory fashion of a leading "/" to reference from the root of the model and start over. e.g. "/propertyOne". This allow a convenient way to move around a few levels as well as "forking" in the object structure among other felixble approaches to structure.

    Parent References...
    "property" properties, including the relative properties described above, all end up referencing a property of a child bean. For example "/myProperty" will return an object from the "myProperty" of the root bean. The fact that a property is specified means that you are accessing the result of that property. This results in never being able to properly access a parent object itself within its current related context.

    Take for example you simply want to print out a list of String objects. In a bean you create a list of them, offer them out to the system via a getter, and you markup using the nested:iterate or logic:iterate tag (both contain the same issues). The only way to get at the object itself is get the iterate tag to declare a scripting variable. With the nested tags you can now simply reference the object using a parent reference of "./" or "this/". Any property ending in the "/" will be treaded as a parent reference. So if you use "parent/" as your property, it will step back one parent and use this block's parent. The special cases to use the parent of the current nested block are "./" or "this/". Not just the iterate tag, this will return the object represented by any nested parent tag.

    This allows you to be in a nested tag block and use the custom tags work directly against the parent defined object, indexed or otherwise. So to be in an iterate block, and to print out the String representation of the current iterated object, you can now use...

    eg:
    <nested:iterate property="myItemList" >
    <html:write property="this/" ><br>
    </html:iterate>

    or if you want to print the string value of a parent the other side of the object...

    eg:
    <nested:iterate property="myBeanList" >
    <nested:iterate property="myItemList" >
    <html:write property="beanListObject/" ><br>
    </html:iterate>
    </html:iterate>

    The fact that it didn't use the special cases of "./" or "this/" means that it steps back in the hierarchy as a typical relative reference. This is unlimited the amount of steps you can take back in the hierarchy. For example, to go back three parents your property would be "one/two/three/".

    Note: The logic identifies the leading "/" and then reads the property from the last index of "/". Resulting in "/three/four/anotherProperty" working the same as "/anotherProperty".

    Note: If you're busily nesting away, and a parent tag has a leading "/" property, the contained tags will append to this new structure. Handy, but you have to keep it in mind.

    Note: If you try to reference beneath the level of the nesting, it will simply act like as if a leading "/" property was defined.

    Parent Reference Note: The only thing to keep in mind with parent references is that you cannot parent reference the root bean. This is because the resulting property would be an empty string. Something that the BeanUtils/PropertyUtils cannot handle (if this is a requirement, you could use a "fake nested property". A getter which simply returns the same bean instance ("this") and simply add an extra nested:nest level at the start of your hierarchy. Works just fine).



    nested UML

    Implementation Details.

    NestedPropertyHelper

    This class embodies all of the logic that runs the nested tagging system. It defines a static method, "setNestedProperties", which the nested tags pass themselves into to have their appropriate properties set.

    The tag extensions themselves implement options of three interfaces which define functionality for the various types of nested usage. When traversing the tag hierarchy back up to the root of the structure, these tags define the result of the current tag.

    NestedTagSupport Interface...

    This is the base of the interfaces. Simply put, any tag that we need to single out of the standard struts tags for use by the nesting system can implement this or its children.

    NestedPropertySupport Interface...

    Tags that implement this interface will have the provided property attribute appended to the parenting nested attribute. This is the heart of the matter.

    This is the basic property, and so far all the nested tags support this to have their nested properties written correctly.

    NestedNameSupport Interface...

    This interface means that the implementing tag wants to have it's name tag looked after by the nesting system. This is automatic, and the name is written for the tag from the root tag. If the JSP is a form, then it will look to the form tag and get a hold of the bean name that is defined in the struts-config.xml file for the action, otherwise, a nested:root tag must be provided for this means.

    This extends the NestedPropertySupport interface as, at time of writing, all tags which used a "name" attribute, required a property attribute in some way to make it useful. This could change, and it's only a small refactoring to make it work for the instance if it's relevant for nesting.

    Note: At the moment, if the tag implements this interface, the name attribute will be rewritten by the system on all counts. I find it hard to picture a valid requirement for inter-mixing multiple object structures (which distinguishable names would allow) in the one JSP page which couldn't be more efficiently provided by the current nesting model working over the one model. Time may prove this idea wrong.

    ParentTagSupport

    This tag identifies for the system those tags which define levels in the nested heirarchy. Namely the "getNestedProperty()" method that yields to calling tags the fully qualified nested property of the parent tag. In the case of a NestedIterator being the parent tag, it will also append the current index reference. e.g. propertyOne.propertyTwo[5]







    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/package-tree.html0000644000175000017500000001737010404045230031314 0ustar arnaudarnaud00000000000000 org.apache.struts.taglib.nested Class Hierarchy (Apache Struts API Documentation)

    Hierarchy For Package org.apache.struts.taglib.nested

    Package Hierarchies:
    All Packages

    Class Hierarchy

    • class java.lang.Object
      • class org.apache.struts.taglib.nested.NestedPropertyHelper
      • class org.apache.struts.taglib.nested.NestedReference (implements java.io.Serializable)
      • class javax.servlet.jsp.tagext.TagSupport (implements java.io.Serializable, javax.servlet.jsp.tagext.Tag)

    Interface Hierarchy



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/nested/package-use.html0000644000175000017500000003345210404045216031154 0ustar arnaudarnaud00000000000000 Uses of Package org.apache.struts.taglib.nested (Apache Struts API Documentation)

    Uses of Package
    org.apache.struts.taglib.nested

    Packages that use org.apache.struts.taglib.nested
    org.apache.struts.taglib.nested Nested tags & supporting classes extend the base struts tags to allow them to relate to each other in a nested nature. 
    org.apache.struts.taglib.nested.bean The nested bean tags extend the org.apache.struts.taglib.bean tags to allow them to relate to each other in a nested nature. 
    org.apache.struts.taglib.nested.html The nested html tags extend the org.apache.struts.taglib.html tags to allow them to relate to each other in a nested nature. 
    org.apache.struts.taglib.nested.logic The nested html tags extend the org.apache.struts.taglib.logic tags to allow them to relate to each other in a nested nature. 
     

    Classes in org.apache.struts.taglib.nested used by org.apache.struts.taglib.nested
    NestedNameSupport
              This is so that managing classes can tell if a nested tag needs to have its name property set.
    NestedPropertySupport
              This interface is for managing classes of the nested extension, so they can know to set the tag's property property.
    NestedReference
              So that a nested hierarchy can penetrate a dynamic JSP include, this class will hold the details of a bean name and nested property.
    NestedTagSupport
              This is to simply allow managing classes to identify the tags to invoke common methods against them.
     

    Classes in org.apache.struts.taglib.nested used by org.apache.struts.taglib.nested.bean
    NestedNameSupport
              This is so that managing classes can tell if a nested tag needs to have its name property set.
    NestedPropertySupport
              This interface is for managing classes of the nested extension, so they can know to set the tag's property property.
    NestedTagSupport
              This is to simply allow managing classes to identify the tags to invoke common methods against them.
     

    Classes in org.apache.struts.taglib.nested used by org.apache.struts.taglib.nested.html
    NestedNameSupport
              This is so that managing classes can tell if a nested tag needs to have its name property set.
    NestedPropertySupport
              This interface is for managing classes of the nested extension, so they can know to set the tag's property property.
    NestedTagSupport
              This is to simply allow managing classes to identify the tags to invoke common methods against them.
     

    Classes in org.apache.struts.taglib.nested used by org.apache.struts.taglib.nested.logic
    NestedNameSupport
              This is so that managing classes can tell if a nested tag needs to have its name property set.
    NestedPropertySupport
              This interface is for managing classes of the nested extension, so they can know to set the tag's property property.
    NestedTagSupport
              This is to simply allow managing classes to identify the tags to invoke common methods against them.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/template/0000755000175000017500000000000010423130301026412 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/template/class-use/0000755000175000017500000000000010423130301030311 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/template/class-use/GetTag.html0000644000175000017500000001266310404045212032367 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.template.GetTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.template.GetTag

    No usage of org.apache.struts.taglib.template.GetTag



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/template/class-use/InsertTag.html0000644000175000017500000001271310404045214033112 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.template.InsertTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.template.InsertTag

    No usage of org.apache.struts.taglib.template.InsertTag



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/template/class-use/PutTag.html0000644000175000017500000001266310404045244032425 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.template.PutTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.template.PutTag

    No usage of org.apache.struts.taglib.template.PutTag



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/template/doc-files/0000755000175000017500000000000010423130301030257 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/template/doc-files/template.gif0000644000175000017500000001300310404045234032567 0ustar arnaudarnaud00000000000000GIF87aŽ÷€€€€€€€€€ÀÀÀÀÜÀ¦Êð@ ` €   À à @ @@@`@€@ @À@à@` `@```€` `À`à`€ €@€`€€€ €À€à€   @ ` €   À à À À@À`À€À ÀÀÀàÀà à@à`à€à àÀààà@ @@@`@€@ @À@à@ @ @@ @` @€ @  @À @à @@@ @@@@@`@@€@@ @@À@@à@@`@ `@@`@``@€`@ `@À`@à`@€@ €@@€@`€@€€@ €@À€@à€@ @  @@ @` @€ @  @À @à @À@ À@@À@`À@€À@ À@ÀÀ@àÀ@à@ à@@à@`à@€à@ à@Àà@àà@€ €@€`€€€ €À€à€ € €@ €` €€ €  €À €à €@€ @€@@€`@€€@€ @€À@€à@€`€ `€@`€``€€`€ `€À`€à`€€€ €€@€€`€€€€€ €€À€€à€€ €  €@ €` €€ €  €À €à €À€ À€@À€`À€€À€ À€ÀÀ€àÀ€à€ à€@à€`à€€à€ à€Àà€àà€À À@À`À€À ÀÀÀàÀ À À@ À` À€ À  ÀÀ Àà À@À @À@@À`@À€@À @ÀÀ@Àà@À`À `À@`À``À€`À `ÀÀ`Àà`À€À €À@€À`€À€€À €ÀÀ€Àà€À À  À@ À` À€ À  ÀÀ Àà ÀÀÀ ÀÀ@ÀÀ`ÀÀ€ÀÀ ÀÀÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ!ù,Žÿÿ H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\9€Ë—0cÊœI³¦Í›8sêÜɳ§ÏŸ@ƒ J´hO–H“*]ÊԣѧP£JJµªÕ«Xg6Ýʵ«W–YÊK¶¬Ù³P¿ª]˶-D™nãÊK$ܺxóêµ s¯ß¿€éÆ L¸pᾆ+^|1ãÇ·¾ŒL¹²e‡“/kÞì43çÏ €Îëx´éÓ¡]B<€š±èÖr=ÞmZ¶ÖYß;ðŽ6á×¾×ÊNœòð[Ü3ø®y_,\°ðà {ÅãÏÞõ8÷ï½Ûÿs¹…àSØ»—¯Èƒ#ù\˜ÿ¡÷/Òƒª~¸ý­çþhPûµ$ C~tà? æxêõà?ï¸$vÈmц=×sŒÇ_>ùðÀt^Üð‡`À%¨‘‹˜ôZƒ-!8`‹4‚d „Ö@‰U[=þ“ÄKïØ#Å…Í sL?ýx¢ð0ß'^ðn¨b`Îøßd}Á¸cd2¨¦ îg&€^ŠéffaúH§hsòw ™‡ñYc„æ¨T‘*Ó…Ë 3Œ1Ã@yŒ13âð9pâwô¦Vœmhg§y†*¦ž~ºæš3²Yœ8v j«¯º‘ú嬮Ú( ž<ú©* ß š¡ÿØcOr.%! ?ü(ZL£Æ8*¥”G<Ï&V§)Wœr«¨«úzP‚©î.Ÿ·â9j¬vnG+ººžùm®4zËëhò®DèzïœÈ Œ²F e1‘AåÒðÁ÷ÜÇÔ]ÚÒ —‹íÚxj‹hv[ê²î‡,Ñ‚õÖÿU¤¼%›„²pwaö¥Žl{Ï=KnÀ=@ÄÔ¯0ÃÃh³÷Cp¤–0íüᦪcÄæÖjª§©«*ÆW‹»±ÆyÊÈjÔÜJc€‘ìàž¥¬Ð­Y-¶SdÇ\ñÌSÜS·=Æ,ËOÎ0ñ+Ìß/k Ђ8„¤&V‹ôX0í±JµÄ£†]ñ®¨j-«æ2u­ÜZµÛ[»Ö.¤Å‘Úî¾[uç"¡-7ܳEsI~ó¤¢Ãü ̾ÈòówïŠ2ÚІ{èÀÑ""<Ÿ_|q­‚’صcخߘ§‚jªw{~ÜuºçÖ‰®~°c¾˜Ùé»~§¹ð§ÿÛæ×Ö³éñËò‡cªOÏ©n˜ñkYéæçµ4ils^’Úæ÷&"]n7ë±Ç7 w¼ŸùN&ü 0xö³F=©EðÐ 5„*QJqLkÊåb6¯¥°ïOßÂUÛÔ„5¬Á.\ „á¸2v@þ¹ic5üÆ‚Ø:"^ uöû!´¶@×±LPI²GoîðžãxB뙃€A`ƒزÕ,'…ÈC!<ÆòN„°å})+da u:òoUœc¢íØ="zÌ}xT_÷f('%Âp7<$è„ÈHBbNvOœÈà€#¤ñQºbÞ–5 .b__ü—¢x°+^1Jiœ’¤>tÿ¦µus\]ÛÄîÏjžS$êŒ(È#êpk`jd {©Ë%ö‡ÈÔ/!¹©8äˆÏ´ öAGA)oŒ†'»˜Až OÅðY)…60J‘ÈW˜®ðÆ@Å޳T$m(Cz2Häaæh©¾dâS‡ œ§<ÛGÏ€:òbÊæ=‰)gDŠ@%óñ¬jBéxœ4†‚°MnöK”¤Ô¢£ÒhIzà.Xw`ùN‹¼¡4ü¥?mØÈ! Ô‘2¬é÷JP8铪Cè={š¿qíp†1f3a),{4N:•¬äž©2š’œ=B';: xŒ¼'£Ni”ÿþÀ¬?ÈK[J‘—Z,?}ÔŠ X¿áìO~›»Z ê¿Y)€ë"øüªÄen¯ÿ“Õ”ú`-¤©o¸C4I4MYÖCQz”À.ZÁLf±“ àêK€àÕ Ná.øÁ<€Ú¨–KÁY+[GOô9(¨oá§‚tÛ:˜¾nv‘â;¦3iQ–RÐQCx8,zœÐÕ¢F99*&˜€kY›ZW¶F¶³õO¼r{[Dò‡·Á%é|KÞHvDX€æˆk¢åmÑÊo Ct<ÍBJhO‡¶;¡™Õµ.pAv0ÜÀ7à ¯ËÆ»½³yNm¥I†"ÇZÌнiªíq‡|À ť޴,E"£•TDSM£Œ#E¥ñ·VHí ŒÒLﻎ…ƒ|šóÅȱˆ­Óœ/¼!Ũ•ŒKæã.¦RŒÏI)åº`Ç_NisbKä’¸µÌœArgÔÜ%»Y¸Ð ÀŒ€%J-ÅF“Ö†„$Ha ¸Æ3¶Ŧ’ͱ;ÍèFÿÄl®È›'ÝÔëPzÒjEt¢#˜¹rømš~‘CCíBRSÓg—Û/z\oójkSöŽa¿Mf^ÜN ß®nÔât½Bzª¯ç·M½—ï$°Û¯Çˆ«!ޝ®gÖìê?4‹†U,¯ù9q‹ç°c¢£m.5¾Ò|| ¿°¾?ÕªÐ!lÕއ˗ñuŸLªNó õ~&4¯/G¢ÓwŠõ«ÓTÙª¬(Gt²ç–må~·qú¸Þ…DzGÿ/“`Ût‘ ¼mê¢M*Øc(²uͼî'YÂå½Ò<›èAŸ0¸³w>>–=dŒ6áûY¦–~˜ð_Ní)Øôýqêy/äõXÓÓ‡~¡I—{ÅþyPß=Þ”/Îÿ Höf~æ#¹ã{Ÿsg[íð¿d;/iïD•{ý3>ºq™xêvê ¯;È?ù—KÞáB'N¹4ïã#ÿ€Ê]ù?O&ÞGÛŸƒÜú> oÄ|ZUOÇ}ÂtTuP‡7{Ù'u¼Å=çcţtÜf|ïdè×pn7/pW.ïS>²÷€‘·yØgL7§tœÇ9‹MDWøƒy8§Wäc=Èk}>PWp2.ø=8¸|¤“w xh»å~é3¾÷"íwÖ~iHØPM(I(„ÁOjGm9ò„!±a±c͆…^¡l^¨VU(…›†td†*¤2døqk!hcxц7Xkvx‡x˜‡cÑq¨†mÈjtˆfÿ‡å…o€(ˆŠxdˆh/k˜ˆ‹‰iCˆ~„‡ˆxfÿ&>—‡)—Xl(‰©†‰¿B†˜qã§n8y¿µ H|¢È"—˜^8‹ qŠ:HX-X„ÀdyDœˆzW犱øhµ(…¸Èqìb¯ãƒ«Øu ÅwÔ|Å”Hoiè~ËHqòg~þñHqÓƒ§wúW×X‰Ù(ØÂºò9¹wŒö³€Ã˜z $ŽÐh‹éÈsãæoÇ×ßhwªøux°(ŽÅXûˆú…í˜y¸Xqî‚xÇuÄÈX䨀 9òX‰õïXùq¼È‡hXø§?ÙVŠ"ב&³Ž]…A÷‘0y“È#DR“2‰“’h“Ú(Gø”>¹Dé‘ÚqGY”Ÿ”3Cùjz8•TY•V‰(Y6HémNÉ”?Ù“_ÈpÖÖ•^¹ˆÿd’A¹lgY–¸–™–È–‰Ùè'àÈ–ïä–’± ¹>#‰Š|a—e†—cŒjÙ—¹xK9˜Cd§{#€[`9˜„—†ÙŒ çŒ~e™¢‚t ™{éR¿A™Wtb7|ã7šY—‰ˆ‘9(¡ lÉ@&Ùng¨Ùš«™kŸÙVÈ›•ɃuÕzx™Ã™›Ú¶›ç×›­‘Hœ XÎ‰šÆ‰‰¸é4ëÓkr™Xˆ¹‹a:ß(‘Õ9]ž†èËIž;'ž&˜Öùl¤Æž®¦žAŸs¨“¦FŸòyŸèIÈ©Šï¹Ÿù‰høif–ÑŸø :Ÿêk÷Ÿš ´± [¨“ ¡-¥…Âl¡nÚ–š:Ú¡ú¡Bx{zI/úy•,Ú¢.j•rXçù¢4Z£6$Vd¢y£<Ú£>Z×IŠ&:¤8Y¡\H¤Hj”š¤L‹F:¡M¥tø¤P*¥VÊÂw¥ZZ“•·¥^ª–]ú¥búžàA¥cz¦4Y¦hº¦áe¦åɦp:GnJ‹qZ§nøJvš§Y /5ª§~ÿ*^x(”áñ§„úaO‰p1Z¨Šja™¦ƒº¨ th‰¨ß–^(‘ê§õâi©Q¢¿×¨˜šœO—œ™ª¨+ã—×Ç›ŽzÖ}ÿVªêsiokÕ²*ŒÁˆ‚²©‘¯Öp°š§·*©$G1(é©¶ª¦÷‚GT€™‘Œú«p¬ÓxŽÍj‘JXвyˆwk)8Tãts ­hGOƯG)¬¥vo2H4Ç­¾(â*¦Òš…Ç«³G|ÇʮѧPåˆ}4ÈŠóº¦õê ©^wUÛ(¬ˆS¿HPþê«K°È °z{û¬®©yõ?Á +xÅGžz;¦›Êræ2÷‰„eƒ {¨¸W²ÀÚ²l³ª‚:³0§f$»± ɲ7û¥h¨¡ûúš?˦ý9´Z´I •OÔ§JK°zø´R;µT[µV{µX›µZ»µ\Ûµ^ûµ`¶b;¶d[¶f{¶h›¶j»¶lÛ¶nû¶p·r;·t[·v{·x›·z·»·|Û·~û·€¸‚;¸„[¸†‹¦³v¸Š{­í¹¸Š;‹á긱:©’[¸­?š¹š¢Dv¹F‹µ‘»“ Š¸ ‹”{¦¡Ë–©K³’¹´¡Š­¯K…qD2—*t–hº£‹º&±¤º:Õ'nÅç- {¤Û¦§k²+ºÅ»­èz±[2:»„ Û¹ÇK¯É €ŠÕ±EE?(·«s¥½¨WXÁ§²Ù»²Ýç’˜¾¤§|§ƒ!s¡h¼;ŸÕÿ ´É›‚É´‘‰´¬ ‹PÕãCèf€«8}ž·­TçsúK¬IÀ8Ŭ꺞õ륲§­ é}Åäi~tzÿ伫LÁôu¹‘îZ|ù׿¹LÓK¿¹‹¼üzsŠG’Òf¯‹T/;5 ¼ü¯›ÀÞº{ñúŠ@ܬ׫Âþèº0µz<Äz—'«H,óš®+éÀM¬TA]”A]Ä9MÓÀ\Ô=½ÓW'ýÑJMÎ7}Ô<}ÐMýÒI ÕK­ÓVíÔLÕT-Õ\­´C]¤S ÖO}ÑWÖ7‰Ö-ÕýÕý\ÖCÉÎXmÖ6½ÕtÔ^}×l½µj]Í{-Ïn­ÐpÍ•RrmÔz}Õ†×g=ØcYØU}ØZ=׊]×’MØ‹mד×m Ù]½Ù™ý× =ÖoÙ–MÙ‰]ÚšÍ×¢-Ø¤ÝØ—]Ù®mÚýÙˆ=Û¨ Ú½ÑP-Û•ÛÛpäÛÀÊÁ=Ü~HÜÆÍŸÇÜUªÜÌm„Íýܱ ÝÒ­ªÓ]ÝlÝØ-°Ù½Ý}½Ý%ÛÝÞ=°àÞVµä}¶Ù|ÞèíÐê Û2ÝÞ”î­pŽ•Ñ½ ߧ݉°èG¯j߃½m’ÏõÍßžß¿Xšøº{6+à¶íß|ÅLÍ >Úô]À,;åÜÑNÕ ÎÁyLÄ4Þþ“÷û»° xtây=­µTr»Íâd]©\óp仫« ã¬Ì Žã¼íˆâ<>¥*ô @äÈÞFã.›ä䜇LþäPåR)>åT^åV~åXžåZ¾å\Þå^þå`æb>æd^æf~æhžæj¾æ&;libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/template/util/0000755000175000017500000000000010423130301027367 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/template/util/class-use/0000755000175000017500000000000010423130301031266 5ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000014510423140533011317 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/template/util/class-use/Content.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/template/util/class-use/Content.html0000644000175000017500000002422710404045250033604 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.template.util.Content (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.template.util.Content

    Packages that use Content
    org.apache.struts.taglib.template Note: As of Struts 1.1 the template tag library is deprecated in favor of Tiles. 
    org.apache.struts.taglib.template.util   
     

    Uses of Content in org.apache.struts.taglib.template
     

    Methods in org.apache.struts.taglib.template with parameters of type Content
     void InsertTag.put(java.lang.String name, Content content)
              Deprecated. Use Tiles instead.
     

    Uses of Content in org.apache.struts.taglib.template.util
     

    Methods in org.apache.struts.taglib.template.util that return Content
     Content ContentMap.get(java.lang.String name)
              Deprecated. Use Tiles instead.
     

    Methods in org.apache.struts.taglib.template.util with parameters of type Content
     void ContentMap.put(java.lang.String name, Content content)
              Deprecated. Use Tiles instead.
     



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015010423140533011313 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/template/util/class-use/ContentMap.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/template/util/class-use/ContentMap.h0000644000175000017500000002732110404045204033522 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.template.util.ContentMap (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.template.util.ContentMap

    Packages that use ContentMap
    org.apache.struts.taglib.template Note: As of Struts 1.1 the template tag library is deprecated in favor of Tiles. 
    org.apache.struts.taglib.template.util   
     

    Uses of ContentMap in org.apache.struts.taglib.template
     

    Fields in org.apache.struts.taglib.template declared as ContentMap
    private  ContentMap InsertTag.map
              Deprecated. Each insert tag has a map of content.
     

    Methods in org.apache.struts.taglib.template that return ContentMap
     ContentMap InsertTag.getContentMap()
              Deprecated. Use Tiles instead.
     

    Uses of ContentMap in org.apache.struts.taglib.template.util
     

    Methods in org.apache.struts.taglib.template.util that return ContentMap
    static ContentMap ContentMapStack.peek(javax.servlet.jsp.PageContext pc)
              Deprecated. Use Tiles instead.
    static ContentMap ContentMapStack.pop(javax.servlet.jsp.PageContext pc)
              Deprecated. Use Tiles instead.
     

    Methods in org.apache.struts.taglib.template.util with parameters of type ContentMap
    static void ContentMapStack.push(javax.servlet.jsp.PageContext pc, ContentMap map)
              Deprecated. Use Tiles instead.
     



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015510423140533011320 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/template/util/class-use/ContentMapStack.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/template/util/class-use/ContentMapSt0000644000175000017500000001311410404045234033601 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.template.util.ContentMapStack (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.template.util.ContentMapStack

    No usage of org.apache.struts.taglib.template.util.ContentMapStack



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/template/util/Content.html0000644000175000017500000003471510404045212031706 0ustar arnaudarnaud00000000000000 Content (Apache Struts API Documentation)

    org.apache.struts.taglib.template.util
    Class Content

    java.lang.Object
      |
      +--org.apache.struts.taglib.template.util.Content
    
    All Implemented Interfaces:
    java.io.Serializable

    Deprecated. Use Tiles instead.

    public class Content
    extends java.lang.Object
    implements java.io.Serializable

    A utility file for templates.

    This represents template content, which is included by templates. Templates can also treat content as plain text and print it to the implicit out variable. This simple class maintain two properties:

    • content: A string representing either a URI or text.
    • direct: If true, content is printed; otherwise content is included (default is false).

    Version:
    $Revision: 1.1 $
    Author:
    David Geary
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String content
              Deprecated. Templates regard this as content to be either included or printed directly.
    private  java.lang.String direct
              Deprecated. Represents a boolean - if true, content is included, otherwise content is printed.
     
    Constructor Summary
    Content(java.lang.String content, java.lang.String direct)
              Deprecated. Use Tiles instead.
     
    Method Summary
     java.lang.String getContent()
              Deprecated. Use Tiles instead.
     boolean isDirect()
              Deprecated. Use Tiles instead.
     java.lang.String toString()
              Deprecated. Use Tiles instead.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
     

    Field Detail

    content

    private final java.lang.String content
    Deprecated. 
    Templates regard this as content to be either included or printed directly. This is a blank final that is set at construction.


    direct

    private final java.lang.String direct
    Deprecated. 
    Represents a boolean - if true, content is included, otherwise content is printed. This is a blank final that is set at construction. This is a string instead of a boolean as a convenience for the tags, whose corresponding attribute is a string.

    Constructor Detail

    Content

    public Content(java.lang.String content,
                   java.lang.String direct)
    Deprecated. Use Tiles instead.

    The only constructor.

    Parameters:
    content - The content's URI
    direct - Is content printed directly (true) or included (false)?
    Method Detail

    getContent

    public java.lang.String getContent()
    Deprecated. Use Tiles instead.

    Return content.


    isDirect

    public boolean isDirect()
    Deprecated. Use Tiles instead.

    Is content to be printed directly (isDirect() == true) instead of included (isDirect() == false).


    toString

    public java.lang.String toString()
    Deprecated. Use Tiles instead.

    Returns a string representation of the content.

    Overrides:
    toString in class java.lang.Object


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/template/util/ContentMap.html0000644000175000017500000003164710404045240032346 0ustar arnaudarnaud00000000000000 ContentMap (Apache Struts API Documentation)

    org.apache.struts.taglib.template.util
    Class ContentMap

    java.lang.Object
      |
      +--org.apache.struts.taglib.template.util.ContentMap
    
    All Implemented Interfaces:
    java.io.Serializable

    Deprecated. Use Tiles instead.

    public class ContentMap
    extends java.lang.Object
    implements java.io.Serializable

    A simple facade for a hash map. This class restricts operations that can be performed on a hash map of contents.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:34:00 +0100 (Fri, 22 Aug 2003) $
    Author:
    David Geary
    See Also:
    Serialized Form

    Field Summary
    private  java.util.HashMap map
              Deprecated. The map.
     
    Constructor Summary
    ContentMap()
              Deprecated. Use Tiles instead.
     
    Method Summary
     Content get(java.lang.String name)
              Deprecated. Use Tiles instead.
     void put(java.lang.String name, Content content)
              Deprecated. Use Tiles instead.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    map

    private java.util.HashMap map
    Deprecated. 
    The map.

    Constructor Detail

    ContentMap

    public ContentMap()
    Deprecated. Use Tiles instead.

    Explicitly declare a do-nothing, no-arg constructor.

    Method Detail

    put

    public void put(java.lang.String name,
                    Content content)
    Deprecated. Use Tiles instead.

    Put named content into map.

    Parameters:
    name - The content's name
    content - The content

    get

    public Content get(java.lang.String name)
    Deprecated. Use Tiles instead.

    Returns the content associated with name.

    Parameters:
    name - Name of content to retrieve


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/template/util/ContentMapStack.html0000644000175000017500000003323310404045234033330 0ustar arnaudarnaud00000000000000 ContentMapStack (Apache Struts API Documentation)

    org.apache.struts.taglib.template.util
    Class ContentMapStack

    java.lang.Object
      |
      +--org.apache.struts.taglib.template.util.ContentMapStack
    

    Deprecated. Use Tiles instead.

    public class ContentMapStack
    extends java.lang.Object

    This class provides access to a stack of ContentMaps in request scope through static methods.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:34:00 +0100 (Fri, 22 Aug 2003) $
    Author:
    David Geary

    Constructor Summary
    private ContentMapStack()
              Deprecated. No instantiations of this class are allowed.
     
    Method Summary
    static java.util.Stack getStack(javax.servlet.jsp.PageContext pc)
              Deprecated. Use Tiles instead.
    static ContentMap peek(javax.servlet.jsp.PageContext pc)
              Deprecated. Use Tiles instead.
    static ContentMap pop(javax.servlet.jsp.PageContext pc)
              Deprecated. Use Tiles instead.
    static void push(javax.servlet.jsp.PageContext pc, ContentMap map)
              Deprecated. Use Tiles instead.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    ContentMapStack

    private ContentMapStack()
    Deprecated. 
    No instantiations of this class are allowed.

    Method Detail

    getStack

    public static java.util.Stack getStack(javax.servlet.jsp.PageContext pc)
    Deprecated. Use Tiles instead.

    Return a reference to the stack. If there is no stack, one is created and placed into request scope associated with the page context.

    Parameters:
    pc - The page context associated with a custom tag.

    peek

    public static ContentMap peek(javax.servlet.jsp.PageContext pc)
    Deprecated. Use Tiles instead.

    Peek at the map on top of the stack.

    Parameters:
    pc - The page context associated with a custom tag.

    push

    public static void push(javax.servlet.jsp.PageContext pc,
                            ContentMap map)
    Deprecated. Use Tiles instead.

    Push a content map onto the stack.

    Parameters:
    pc - The page context associated with a custom tag.
    map - A content map that gets pushed onto the stack.

    pop

    public static ContentMap pop(javax.servlet.jsp.PageContext pc)
    Deprecated. Use Tiles instead.

    Parameters:
    pc - The page context associated with a custom tag.


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/template/util/package-frame.html0000644000175000017500000000236310404045206032754 0ustar arnaudarnaud00000000000000 org.apache.struts.taglib.template.util (Apache Struts API Documentation) org.apache.struts.taglib.template.util
    Classes 
    Content
    ContentMap
    ContentMapStack
    libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/template/util/package-summary.html0000644000175000017500000001454410404045210033356 0ustar arnaudarnaud00000000000000 org.apache.struts.taglib.template.util (Apache Struts API Documentation)

    Package org.apache.struts.taglib.template.util

    Class Summary
    Content Deprecated. Use Tiles instead.
    ContentMap Deprecated. Use Tiles instead.
    ContentMapStack Deprecated. Use Tiles instead.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/template/util/package-tree.html0000644000175000017500000001437210404045204032622 0ustar arnaudarnaud00000000000000 org.apache.struts.taglib.template.util Class Hierarchy (Apache Struts API Documentation)

    Hierarchy For Package org.apache.struts.taglib.template.util

    Package Hierarchies:
    All Packages

    Class Hierarchy

    • class java.lang.Object
      • class org.apache.struts.taglib.template.util.Content (implements java.io.Serializable)
      • class org.apache.struts.taglib.template.util.ContentMap (implements java.io.Serializable)
      • class org.apache.struts.taglib.template.util.ContentMapStack


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/template/util/package-use.html0000644000175000017500000002047710404045240032462 0ustar arnaudarnaud00000000000000 Uses of Package org.apache.struts.taglib.template.util (Apache Struts API Documentation)

    Uses of Package
    org.apache.struts.taglib.template.util

    Packages that use org.apache.struts.taglib.template.util
    org.apache.struts.taglib.template Note: As of Struts 1.1 the template tag library is deprecated in favor of Tiles. 
    org.apache.struts.taglib.template.util   
     

    Classes in org.apache.struts.taglib.template.util used by org.apache.struts.taglib.template
    Content
              Deprecated. Use Tiles instead.
    ContentMap
              Deprecated. Use Tiles instead.
     

    Classes in org.apache.struts.taglib.template.util used by org.apache.struts.taglib.template.util
    Content
              Deprecated. Use Tiles instead.
    ContentMap
              Deprecated. Use Tiles instead.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/template/GetTag.html0000644000175000017500000005033710404045210030466 0ustar arnaudarnaud00000000000000 GetTag (Apache Struts API Documentation)

    org.apache.struts.taglib.template
    Class GetTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.template.GetTag
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag

    Deprecated. Use Tiles instead.

    public class GetTag
    extends javax.servlet.jsp.tagext.TagSupport

    This is the tag handler for <template:get>, which gets content from the request scope and either includes the content or prints it, depending upon the value of the content's direct attribute.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:34:00 +0100 (Fri, 22 Aug 2003) $
    Author:
    David Geary
    See Also:
    Serialized Form

    Field Summary
    private  boolean flush
              Deprecated. Should we flush before including this text?
    private  java.lang.String name
              Deprecated. The name of the content that this tag includes (or prints).
    private  java.lang.String role
              Deprecated. The role that the user must be in to retrieve content.
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    GetTag()
              Deprecated.  
     
    Method Summary
     int doStartTag()
              Deprecated. Use Tiles instead.
     boolean getFlush()
              Deprecated. Use Tiles instead.
     java.lang.String getName()
              Deprecated. Use Tiles instead.
     java.lang.String getRole()
              Deprecated. Use Tiles instead.
     void release()
              Deprecated. Use Tiles instead.
    private  void saveException(java.lang.Throwable exception)
              Deprecated. Use Tiles instead.
     void setFlush(boolean flush)
              Deprecated. Use Tiles instead.
     void setName(java.lang.String name)
              Deprecated. Use Tiles instead.
     void setRole(java.lang.String role)
              Deprecated. Use Tiles instead.
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    doEndTag, findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    flush

    private boolean flush
    Deprecated. 
    Should we flush before including this text?


    name

    private java.lang.String name
    Deprecated. 
    The name of the content that this tag includes (or prints).


    role

    private java.lang.String role
    Deprecated. 
    The role that the user must be in to retrieve content.

    Constructor Detail

    GetTag

    public GetTag()
    Deprecated. 
    Method Detail

    setFlush

    public void setFlush(boolean flush)
    Deprecated. Use Tiles instead.

    Set the flush-before-include property

    Parameters:
    flush - The new flush property

    setName

    public void setName(java.lang.String name)
    Deprecated. Use Tiles instead.

    Set the name attribute

    Parameters:
    name - The name of the content to get.

    setRole

    public void setRole(java.lang.String role)
    Deprecated. Use Tiles instead.

    Set the role attribute

    Parameters:
    role - The role the user must be in to retrieve content.

    getFlush

    public boolean getFlush()
    Deprecated. Use Tiles instead.

    Get the flush-before-include attribute.


    getName

    public java.lang.String getName()
    Deprecated. Use Tiles instead.

    Get the name attribute.


    getRole

    public java.lang.String getRole()
    Deprecated. Use Tiles instead.

    Get the role attribute.


    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Deprecated. Use Tiles instead.

    Print content named by setName() or include it, depending on the content's direct attribute.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.TagSupport
    javax.servlet.jsp.JspException

    release

    public void release()
    Deprecated. Use Tiles instead.

    Reset member values for reuse. This method calls super.release(), which invokes TagSupport.release(), which typically does nothing.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class javax.servlet.jsp.tagext.TagSupport

    saveException

    private void saveException(java.lang.Throwable exception)
    Deprecated. Use Tiles instead.

    Save the specified exception in request scope if there is not already one present.

    Parameters:
    exception - Exception to be conditionally saved


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/template/InsertTag.html0000644000175000017500000005001110404045244031207 0ustar arnaudarnaud00000000000000 InsertTag (Apache Struts API Documentation)

    org.apache.struts.taglib.template
    Class InsertTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.template.InsertTag
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag

    Deprecated. Use Tiles instead.

    public class InsertTag
    extends javax.servlet.jsp.tagext.TagSupport

    This is the tag handler for <template:insert>, which includes a template. The tag's body content consists of <template:put> tags, which are accessed by <template:get> in the template.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:34:00 +0100 (Fri, 22 Aug 2003) $
    Author:
    David Geary
    See Also:
    Serialized Form

    Field Summary
    private  ContentMap map
              Deprecated. Each insert tag has a map of content.
    private  java.lang.String template
              Deprecated. The application-relative URI of the template.
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    InsertTag()
              Deprecated.  
     
    Method Summary
     int doEndTag()
              Deprecated. Use Tiles instead.
     int doStartTag()
              Deprecated. Use Tiles instead.
     ContentMap getContentMap()
              Deprecated. Use Tiles instead.
     java.lang.String getTemplate()
              Deprecated. Use Tiles instead.
     void put(java.lang.String name, Content content)
              Deprecated. Use Tiles instead.
     void release()
              Deprecated. Use Tiles instead.
    private  void saveException(java.lang.Throwable exception)
              Deprecated. Use Tiles instead.
     void setTemplate(java.lang.String template)
              Deprecated. Use Tiles instead.
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    map

    private ContentMap map
    Deprecated. 
    Each insert tag has a map of content.


    template

    private java.lang.String template
    Deprecated. 
    The application-relative URI of the template.

    Constructor Detail

    InsertTag

    public InsertTag()
    Deprecated. 
    Method Detail

    setTemplate

    public void setTemplate(java.lang.String template)
    Deprecated. Use Tiles instead.

    Set the template attribute.


    getTemplate

    public java.lang.String getTemplate()
    Deprecated. Use Tiles instead.

    Get the template attribute.


    getContentMap

    public ContentMap getContentMap()
    Deprecated. Use Tiles instead.

    Get the map attribute.


    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Deprecated. Use Tiles instead.

    Process the start tag by pushing this tag's map onto the content map stack. See org.apache.struts.taglib.template.util.ContentMapStack.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.TagSupport
    javax.servlet.jsp.JspException

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Deprecated. Use Tiles instead.

    Process the end tag by including the template.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.TagSupport
    javax.servlet.jsp.JspException

    put

    public void put(java.lang.String name,
                    Content content)
    Deprecated. Use Tiles instead.

    This method is a convenience for <template:put> tags for putting content into the map.


    release

    public void release()
    Deprecated. Use Tiles instead.

    Reset member values for reuse. This method calls super.release(), which invokes TagSupport.release(), which typically does nothing.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class javax.servlet.jsp.tagext.TagSupport

    saveException

    private void saveException(java.lang.Throwable exception)
    Deprecated. Use Tiles instead.

    Save the specified exception in request scope if there is not already one present.

    Parameters:
    exception - Exception to be conditionally saved


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/template/PutTag.html0000644000175000017500000006304410404045236030526 0ustar arnaudarnaud00000000000000 PutTag (Apache Struts API Documentation)

    org.apache.struts.taglib.template
    Class PutTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.template.PutTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    Deprecated. Use Tiles instead.

    public class PutTag
    extends javax.servlet.jsp.tagext.BodyTagSupport

    Tag handler for <template:put>, which puts content into request scope.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:34:00 +0100 (Fri, 22 Aug 2003) $
    Author:
    David Geary
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String content
              Deprecated. The content's URI (or text).
    private  java.lang.String direct
              Deprecated. Determines whether content is included (false) or printed (true).
    private  java.lang.String name
              Deprecated. The content's name.
    private  java.lang.String role
              Deprecated. The role that the user must be in to store content.
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    PutTag()
              Deprecated.  
     
    Method Summary
     int doEndTag()
              Deprecated. Use Tiles instead.
    private  java.lang.String getActualContent()
              Deprecated. Use Tiles instead.
    private  javax.servlet.jsp.tagext.TagSupport getAncestor(java.lang.String className)
              Deprecated. Use Tiles instead.
     java.lang.String getContent()
              Deprecated. Use Tiles instead.
     java.lang.String getDirect()
              Deprecated. Use Tiles instead.
     java.lang.String getName()
              Deprecated. Use Tiles instead.
     java.lang.String getRole()
              Deprecated. Use Tiles instead.
    private  boolean hasBody()
              Deprecated. Use Tiles instead.
     void release()
              Deprecated. Use Tiles instead.
     void setContent(java.lang.String content)
              Deprecated. Use Tiles instead.
     void setDirect(java.lang.String direct)
              Deprecated. Use Tiles instead.
     void setName(java.lang.String name)
              Deprecated. Use Tiles instead.
     void setRole(java.lang.String role)
              Deprecated. Use Tiles instead.
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doAfterBody, doInitBody, doStartTag, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    name

    private java.lang.String name
    Deprecated. 
    The content's name.


    role

    private java.lang.String role
    Deprecated. 
    The role that the user must be in to store content.


    content

    private java.lang.String content
    Deprecated. 
    The content's URI (or text).


    direct

    private java.lang.String direct
    Deprecated. 
    Determines whether content is included (false) or printed (true). Content is included (false) by default.

    Constructor Detail

    PutTag

    public PutTag()
    Deprecated. 
    Method Detail

    setName

    public void setName(java.lang.String name)
    Deprecated. Use Tiles instead.

    Set the content name.


    setRole

    public void setRole(java.lang.String role)
    Deprecated. Use Tiles instead.

    Parameters:
    role - The role the user must be in to store content.

    setContent

    public void setContent(java.lang.String content)
    Deprecated. Use Tiles instead.

    Set the content's URI (if it's to be included) or text (if it's to be printed).


    setDirect

    public void setDirect(java.lang.String direct)
    Deprecated. Use Tiles instead.

    Set direct to true, and content will be printed directly, instead of included (direct == false).


    getName

    public java.lang.String getName()
    Deprecated. Use Tiles instead.

    Get the name attribute.


    getRole

    public java.lang.String getRole()
    Deprecated. Use Tiles instead.

    Get the role attribute.


    getContent

    public java.lang.String getContent()
    Deprecated. Use Tiles instead.

    Get the content attribute.


    getDirect

    public java.lang.String getDirect()
    Deprecated. Use Tiles instead.

    Returns the direct attribute associated with this tag.


    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Deprecated. Use Tiles instead.

    Process the end tag by putting content into the enclosing insert tag.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.BodyTagSupport
    Throws:
    javax.servlet.jsp.JspException - if this tag is not enclosed by <template:insert>.

    release

    public void release()
    Deprecated. Use Tiles instead.

    Reset member values for reuse. This method calls super.release(), which invokes TagSupport.release(), which typically does nothing.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class javax.servlet.jsp.tagext.BodyTagSupport

    getActualContent

    private java.lang.String getActualContent()
                                       throws javax.servlet.jsp.JspException
    Deprecated. Use Tiles instead.

    Returns the content associated with this tag.

    javax.servlet.jsp.JspException

    hasBody

    private boolean hasBody()
    Deprecated. Use Tiles instead.

    Returns a boolean indicating whether this tag has a body.


    getAncestor

    private javax.servlet.jsp.tagext.TagSupport getAncestor(java.lang.String className)
                                                     throws javax.servlet.jsp.JspException
    Deprecated. Use Tiles instead.

    Convenience method for locating ancestor tags by class name.

    Parameters:
    className - The name of the ancestor class.
    javax.servlet.jsp.JspException


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/template/package-frame.html0000644000175000017500000000227610404045240032000 0ustar arnaudarnaud00000000000000 org.apache.struts.taglib.template (Apache Struts API Documentation) org.apache.struts.taglib.template
    Classes 
    GetTag
    InsertTag
    PutTag
    libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/template/package-summary.html0000644000175000017500000003474210404045234032411 0ustar arnaudarnaud00000000000000 org.apache.struts.taglib.template (Apache Struts API Documentation)

    Package org.apache.struts.taglib.template

    Note: As of Struts 1.1 the template tag library is deprecated in favor of Tiles.

    See:
              Description

    Class Summary
    GetTag Deprecated. Use Tiles instead.
    InsertTag Deprecated. Use Tiles instead.
    PutTag Deprecated. Use Tiles instead.
     

    Package org.apache.struts.taglib.template Description

    Note: As of Struts 1.1 the template tag library is deprecated in favor of Tiles.

    The "struts-template" tag library contains tags that are useful in creating dynamic JSP templates for pages which share a common format. These templates are best used when it is likely that a layout shared by several pages in your application will change. The functionality provided by these tags is similar to what can be achieved using standard JSP include directive, but are dynamic rather than static.


    Introduction

    The Template library supplies tags that are useful for creating dynamic JSP templates for pages which share a common format.

    Template Tag Functionality

    Each of the three template tags has a specific, interelated function:

    • get - Retrieves content from a request scope bean, for use in the template layout.
    • insert - Retrieves (or includes) the specified template file, and then inserts the specified content into the template's layout. By changing the layout defined in the template file, any other file that inserts the template will automatically use the new layout.
    • put - Creates a request scope bean that specifies the content to be used by the get tag. Content can be printed directly or included from a JSP or HTML fil



    • TagLib Template UML

    Template Tag Properties

    The three template tags use very simple attributes :

    get - Requires a single property, the name of the content to be inserted. This tag is used in the template file to indicate where in the layout to insert the content. This name matches the name property used by a put tag.

    insert - Requires a single property, the name of the template. This tag is the parent to one or more put tags. The put tags indicate the content to be inserted into the template. The layout of the content is determined by get tags placed in the template.

    put - Requires a name property, which should match a name used in the template file. The content property indicates the source of the content. The optional direct attribute indicates whether the content should be included or printed directly (as a literal string). The default is false, meaning content is included.

    Template Tag Examples

    A sample template file


    <%@ taglib uri='/WEB-INF/tlds/struts-template.tld' prefix='template' %>
    <html><head><title><template:get name='title'/></title></head>
    <body background='graphics/blueAndWhiteBackground.gif'>
    <table>
    <tr valign='top'><td><template:get name='sidebar'/></td>
    <td><table>
    <tr><td><template:get name='header'/></td></tr>
    <tr><td><template:get name='content'/></td></tr>
    <tr><td><template:get name='footer'/></td></tr>
    </table>
    </td>
    </tr>
    </table>
    </body></html>
    <%
    /*
    "chapterTemplate.jsp"
    Display a "sidebar" in a column along the left side of the page.
    Display a "header" over the right column.
    Display the page "content" below the header.
    Display a "footer" at below the content.
    If we change the layout of the elements on this page, all pages
    inserting this page will also change to use the new layout.
    */
    %>

    A sample JSP using the template


    <%@ taglib uri='/WEB-INF/tlds/struts-template.tld' prefix='template' %>
    <template:insert template='/chapterTemplate.jsp'>
    <template:put name='title' content='Templates' direct='true'/>
    <template:put name='header' content='/header.html' />
    <template:put name='sidebar' content='/sidebar.jsp' />
    <template:put name='content' content='/introduction.html'/>
    <template:put name='footer' content='/footer.html' />
    </template:insert>
    <%
    /*
    "introduction.jsp"
    Specify template for this page (chapterTemplate.jsp).
    The chapterTemplate.jsp defines the layout positions for five
    elements: title, header, sidebar, content, and footer.
    Specify the source file (html or jsp) for each element.
    */
    %>

    A sample HTML content file ("header.html") used by "introduction.jsp", and others.


    <table>
    <tr>
    <td><img src='graphics/java.gif'/></td>
    <td><img src='graphics/templates.gif'/></td>
    </tr>
    </table>

    A sample JSP content file ("sidebar.jsp") used by "introduction.jsp", and others.


    <font size='5'><a name="top">Topics</a></font><p>
    <table width='145'>
    <tr><td><a href='introduction.jsp'>
    Introduction </a></td></tr>
    <tr><td><a href='using.jsp'>
    Using Templates </a></td></tr>
    <tr><td><a href='optional.jsp'>
    Optional Content </a></td></tr>
    <tr><td><a href='more.jsp'>
    ... and more ...</a></td></tr>
    </table></p>
    <%
    /*
    Specify navigational links for this application.
    */
    %>

    A sample HTML content file used by "introduction.jsp" only.


    <html>
    <head>
    <link rel="stylesheet" href="css/templates.css"
    charset="ISO-8859-1" type="text/css">
    </head>
    <body>
    <h3 class="ChapTitle">Introduction</h3>
    <p class="Paragraph">Window toolkits typically provide a layout mechanism
    < ... />



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/template/package-tree.html0000644000175000017500000001451010404045226031643 0ustar arnaudarnaud00000000000000 org.apache.struts.taglib.template Class Hierarchy (Apache Struts API Documentation)

    Hierarchy For Package org.apache.struts.taglib.template

    Package Hierarchies:
    All Packages

    Class Hierarchy

    • class java.lang.Object
      • class javax.servlet.jsp.tagext.TagSupport (implements java.io.Serializable, javax.servlet.jsp.tagext.Tag)
        • class javax.servlet.jsp.tagext.BodyTagSupport (implements javax.servlet.jsp.tagext.BodyTag)
          • class org.apache.struts.taglib.template.PutTag
        • class org.apache.struts.taglib.template.GetTag
        • class org.apache.struts.taglib.template.InsertTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/template/package-use.html0000644000175000017500000001230410404045216031476 0ustar arnaudarnaud00000000000000 Uses of Package org.apache.struts.taglib.template (Apache Struts API Documentation)

    Uses of Package
    org.apache.struts.taglib.template

    No usage of org.apache.struts.taglib.template



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/0000755000175000017500000000000010423130301025717 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/class-use/0000755000175000017500000000000010423130301027616 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/class-use/AddTag.html0000644000175000017500000001747210404045210031646 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.tiles.AddTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.tiles.AddTag

    Packages that use AddTag
    org.apache.struts.taglib.tiles The "struts-tiles" tag library contains tags that are useful in creating dynamic reusable components. 
     

    Uses of AddTag in org.apache.struts.taglib.tiles
     

    Methods in org.apache.struts.taglib.tiles with parameters of type AddTag
     void PutListTag.processNestedTag(AddTag nestedTag)
              Process nested ≶add> tag.
     void AddTagParent.processNestedTag(AddTag nestedTag)
              Process the nested tag.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/class-use/AddTagParent.html0000644000175000017500000002017410404045242033016 0ustar arnaudarnaud00000000000000 Uses of Interface org.apache.struts.taglib.tiles.AddTagParent (Apache Struts API Documentation)

    Uses of Interface
    org.apache.struts.taglib.tiles.AddTagParent

    Packages that use AddTagParent
    org.apache.struts.taglib.tiles The "struts-tiles" tag library contains tags that are useful in creating dynamic reusable components. 
     

    Uses of AddTagParent in org.apache.struts.taglib.tiles
     

    Classes in org.apache.struts.taglib.tiles that implement AddTagParent
     class PutListTag
              PutList tag implementation.
     

    Methods in org.apache.struts.taglib.tiles that return AddTagParent
    protected  AddTagParent AddTag.findEnclosingPutListTagParent()
              Find parent tag which must implement AttributeContainer.
     



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015110423140533011314 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/class-use/AttributeToScopeTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/class-use/AttributeToScopeTag.0000644000175000017500000001301110404045224033517 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.tiles.AttributeToScopeTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.tiles.AttributeToScopeTag

    No usage of org.apache.struts.taglib.tiles.AttributeToScopeTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015010423140533011313 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/class-use/ComponentConstants.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/class-use/ComponentConstants.h0000644000175000017500000002703510404045216033646 0ustar arnaudarnaud00000000000000 Uses of Interface org.apache.struts.taglib.tiles.ComponentConstants (Apache Struts API Documentation)

    Uses of Interface
    org.apache.struts.taglib.tiles.ComponentConstants

    Packages that use ComponentConstants
    org.apache.struts.taglib.tiles The "struts-tiles" tag library contains tags that are useful in creating dynamic reusable components. 
    org.apache.struts.tiles
    The Tiles taglib and framework allows building web pages by assembling reusable pieces of pages, called Tiles. 
     

    Uses of ComponentConstants in org.apache.struts.taglib.tiles
     

    Classes in org.apache.struts.taglib.tiles that implement ComponentConstants
     class AddTag
              Add an element to the surrounding list tag.
     class GetAttributeTag
              Retrieve the value of the specified component/template attribute property, and render it to the current JspWriter as a String.
     class GetTag
              This is the tag handler for <tiles:get>, which gets content from the request scope and either includes the content or prints it, depending upon the value of the content's direct attribute.
     class InitDefinitionsTag
              Init definitions factory.
     class InsertTag
              This is the tag handler for <tiles:insert>, which includes a template.
     class PutListTag
              PutList tag implementation.
     class PutTag
              Put an attribute in enclosing attribute container tag.
     

    Uses of ComponentConstants in org.apache.struts.tiles
     

    Classes in org.apache.struts.tiles that implement ComponentConstants
     class DefinitionsUtil
              Deprecated. Use TilesUtil.createDefinitionsFactory(ServletContext, DefinitionsFactoryConfig)
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/class-use/DefinitionTag.html0000644000175000017500000001273110404045234033245 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.tiles.DefinitionTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.tiles.DefinitionTag

    No usage of org.apache.struts.taglib.tiles.DefinitionTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015210423140533011315 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/class-use/DefinitionTagSupport.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/class-use/DefinitionTagSupport0000644000175000017500000002043210404045224033673 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.tiles.DefinitionTagSupport (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.tiles.DefinitionTagSupport

    Packages that use DefinitionTagSupport
    org.apache.struts.taglib.tiles The "struts-tiles" tag library contains tags that are useful in creating dynamic reusable components. 
     

    Uses of DefinitionTagSupport in org.apache.struts.taglib.tiles
     

    Subclasses of DefinitionTagSupport in org.apache.struts.taglib.tiles
     class DefinitionTag
              This is the tag handler for <tiles:definition>, which defines a tiles (or template / component).
     class GetTag
              This is the tag handler for <tiles:get>, which gets content from the request scope and either includes the content or prints it, depending upon the value of the content's direct attribute.
     class InsertTag
              This is the tag handler for <tiles:insert>, which includes a template.
     



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000014510423140533011317 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/class-use/GetAttributeTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/class-use/GetAttributeTag.html0000644000175000017500000001275110404045252033562 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.tiles.GetAttributeTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.tiles.GetAttributeTag

    No usage of org.apache.struts.taglib.tiles.GetAttributeTag



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/class-use/GetTag.html0000644000175000017500000001264110404045234031674 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.tiles.GetTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.tiles.GetTag

    No usage of org.apache.struts.taglib.tiles.GetTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015010423140533011313 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/class-use/ImportAttributeTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/class-use/ImportAttributeTag.h0000644000175000017500000001300110404045216033565 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.tiles.ImportAttributeTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.tiles.ImportAttributeTag

    No usage of org.apache.struts.taglib.tiles.ImportAttributeTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015010423140533011313 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/class-use/InitDefinitionsTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/class-use/InitDefinitionsTag.h0000644000175000017500000001300110404045222033523 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.tiles.InitDefinitionsTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.tiles.InitDefinitionsTag

    No usage of org.apache.struts.taglib.tiles.InitDefinitionsTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000016310423140533011317 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/class-use/InsertTag.DirectStringHandler.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/class-use/InsertTag.DirectStri0000644000175000017500000001313110404045204033521 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.tiles.InsertTag.DirectStringHandler (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.tiles.InsertTag.DirectStringHandler

    No usage of org.apache.struts.taglib.tiles.InsertTag.DirectStringHandler



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015510423140533011320 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/class-use/InsertTag.InsertHandler.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/class-use/InsertTag.InsertHand0000644000175000017500000001305110404045220033503 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.tiles.InsertTag.InsertHandler (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.tiles.InsertTag.InsertHandler

    No usage of org.apache.struts.taglib.tiles.InsertTag.InsertHandler



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015210423140533011315 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/class-use/InsertTag.TagHandler.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/class-use/InsertTag.TagHandler0000644000175000017500000003567610404045214033501 0ustar arnaudarnaud00000000000000 Uses of Interface org.apache.struts.taglib.tiles.InsertTag.TagHandler (Apache Struts API Documentation)

    Uses of Interface
    org.apache.struts.taglib.tiles.InsertTag.TagHandler

    Packages that use InsertTag.TagHandler
    org.apache.struts.taglib.tiles The "struts-tiles" tag library contains tags that are useful in creating dynamic reusable components. 
     

    Uses of InsertTag.TagHandler in org.apache.struts.taglib.tiles
     

    Classes in org.apache.struts.taglib.tiles that implement InsertTag.TagHandler
    protected  class InsertTag.DirectStringHandler
              Handle insert direct string.
    protected  class InsertTag.InsertHandler
              Real handler, after attribute resolution.
     

    Fields in org.apache.struts.taglib.tiles declared as InsertTag.TagHandler
    protected  InsertTag.TagHandler InsertTag.tagHandler
              Finale handler of tag methods
     

    Methods in org.apache.struts.taglib.tiles that return InsertTag.TagHandler
     InsertTag.TagHandler InsertTag.createTagHandler()
              Process tag attribute and create corresponding tag handler.
     InsertTag.TagHandler InsertTag.processObjectValue(java.lang.Object value)
              Process an object retrieved as a bean or attribute.
     InsertTag.TagHandler InsertTag.processName(java.lang.String name)
              Process name.
     InsertTag.TagHandler InsertTag.processUrl(java.lang.String url)
              Process the url.
    protected  InsertTag.TagHandler InsertTag.processDefinitionName(java.lang.String name)
              Process tag attribute "definition".
    protected  InsertTag.TagHandler InsertTag.processDefinition(ComponentDefinition definition)
              End of Process tag attribute "definition".
    protected  InsertTag.TagHandler InsertTag.processBean(java.lang.String beanName, java.lang.String beanProperty, java.lang.String beanScope)
              Process a bean.
     InsertTag.TagHandler InsertTag.processAttribute(java.lang.String name)
              Process tag attribute "attribute".
     InsertTag.TagHandler InsertTag.processAsDefinitionOrURL(java.lang.String name)
              Try to process name as a definition, or as an URL if not found.
     InsertTag.TagHandler InsertTag.processTypedAttribute(AttributeDefinition value)
              Process typed attribute according to its type.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/class-use/InsertTag.html0000644000175000017500000001645310404045230032422 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.tiles.InsertTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.tiles.InsertTag

    Packages that use InsertTag
    org.apache.struts.taglib.tiles The "struts-tiles" tag library contains tags that are useful in creating dynamic reusable components. 
     

    Uses of InsertTag in org.apache.struts.taglib.tiles
     

    Subclasses of InsertTag in org.apache.struts.taglib.tiles
     class GetTag
              This is the tag handler for <tiles:get>, which gets content from the request scope and either includes the content or prints it, depending upon the value of the content's direct attribute.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/class-use/PutListTag.html0000644000175000017500000002306510404045246032566 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.tiles.PutListTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.tiles.PutListTag

    Packages that use PutListTag
    org.apache.struts.taglib.tiles The "struts-tiles" tag library contains tags that are useful in creating dynamic reusable components. 
     

    Uses of PutListTag in org.apache.struts.taglib.tiles
     

    Methods in org.apache.struts.taglib.tiles with parameters of type PutListTag
     void PutListTag.processNestedTag(PutListTag nestedTag)
              Process nested ≶putList> tag.
     void DefinitionTag.processNestedTag(PutListTag nestedTag)
              Process nested ≶putList> tag.
     void PutListTagParent.processNestedTag(PutListTag nestedTag)
              Add an attribute to container.
     void InsertTag.processNestedTag(PutListTag nestedTag)
              Process nested ≶putList> tag.
     void InsertTag.putAttribute(PutListTag nestedTag)
              Method calls by nested ≶putList> tags.
     



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000014610423140533011320 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/class-use/PutListTagParent.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/class-use/PutListTagParent.htm0000644000175000017500000002304710404045214033557 0ustar arnaudarnaud00000000000000 Uses of Interface org.apache.struts.taglib.tiles.PutListTagParent (Apache Struts API Documentation)

    Uses of Interface
    org.apache.struts.taglib.tiles.PutListTagParent

    Packages that use PutListTagParent
    org.apache.struts.taglib.tiles The "struts-tiles" tag library contains tags that are useful in creating dynamic reusable components. 
     

    Uses of PutListTagParent in org.apache.struts.taglib.tiles
     

    Classes in org.apache.struts.taglib.tiles that implement PutListTagParent
     class DefinitionTag
              This is the tag handler for <tiles:definition>, which defines a tiles (or template / component).
     class GetTag
              This is the tag handler for <tiles:get>, which gets content from the request scope and either includes the content or prints it, depending upon the value of the content's direct attribute.
     class InsertTag
              This is the tag handler for <tiles:insert>, which includes a template.
     class PutListTag
              PutList tag implementation.
     

    Methods in org.apache.struts.taglib.tiles that return PutListTagParent
    protected  PutListTagParent PutListTag.findEnclosingParent()
              Find enclosing parent tag accepting this tag.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/class-use/PutTag.html0000644000175000017500000002213610404045214031723 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.tiles.PutTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.tiles.PutTag

    Packages that use PutTag
    org.apache.struts.taglib.tiles The "struts-tiles" tag library contains tags that are useful in creating dynamic reusable components. 
     

    Uses of PutTag in org.apache.struts.taglib.tiles
     

    Subclasses of PutTag in org.apache.struts.taglib.tiles
     class AddTag
              Add an element to the surrounding list tag.
     

    Methods in org.apache.struts.taglib.tiles with parameters of type PutTag
     void DefinitionTag.processNestedTag(PutTag nestedTag)
              Process nested ≶put> tag.
     void PutTagParent.processNestedTag(PutTag nestedTag)
              Process the nested tag.
     void InsertTag.processNestedTag(PutTag nestedTag)
              Process nested ≶put> tag.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/class-use/PutTagParent.html0000644000175000017500000002220410404045236033075 0ustar arnaudarnaud00000000000000 Uses of Interface org.apache.struts.taglib.tiles.PutTagParent (Apache Struts API Documentation)

    Uses of Interface
    org.apache.struts.taglib.tiles.PutTagParent

    Packages that use PutTagParent
    org.apache.struts.taglib.tiles The "struts-tiles" tag library contains tags that are useful in creating dynamic reusable components. 
     

    Uses of PutTagParent in org.apache.struts.taglib.tiles
     

    Classes in org.apache.struts.taglib.tiles that implement PutTagParent
     class DefinitionTag
              This is the tag handler for <tiles:definition>, which defines a tiles (or template / component).
     class GetTag
              This is the tag handler for <tiles:get>, which gets content from the request scope and either includes the content or prints it, depending upon the value of the content's direct attribute.
     class InsertTag
              This is the tag handler for <tiles:insert>, which includes a template.
     

    Methods in org.apache.struts.taglib.tiles that return PutTagParent
    protected  PutTagParent PutTag.findEnclosingPutTagParent()
              Find parent tag which must implement AttributeContainer.
     



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000014510423140533011317 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/class-use/UseAttributeTag.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/class-use/UseAttributeTag.html0000644000175000017500000001275110404045232033575 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.tiles.UseAttributeTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.tiles.UseAttributeTag

    No usage of org.apache.struts.taglib.tiles.UseAttributeTag



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000014510423140533011317 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/class-use/UseAttributeTei.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/class-use/UseAttributeTei.html0000644000175000017500000001275110404045214033603 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.tiles.UseAttributeTei (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.tiles.UseAttributeTei

    No usage of org.apache.struts.taglib.tiles.UseAttributeTei



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/doc-files/0000755000175000017500000000000010423130301027564 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/doc-files/tilesUML.gif0000644000175000017500000004060410404045232031764 0ustar arnaudarnaud00000000000000GIF87ah¾÷€€€€€€€€€ÀÀÀÀÜÀ¦Êð@ ` €   À à @ @@@`@€@ @À@à@` `@```€` `À`à`€ €@€`€€€ €À€à€   @ ` €   À à À À@À`À€À ÀÀÀàÀà à@à`à€à àÀààà@ @@@`@€@ @À@à@ @ @@ @` @€ @  @À @à @@@ @@@@@`@@€@@ @@À@@à@@`@ `@@`@``@€`@ `@À`@à`@€@ €@@€@`€@€€@ €@À€@à€@ @  @@ @` @€ @  @À @à @À@ À@@À@`À@€À@ À@ÀÀ@àÀ@à@ à@@à@`à@€à@ à@Àà@àà@€ €@€`€€€ €À€à€ € €@ €` €€ €  €À €à €@€ @€@@€`@€€@€ @€À@€à@€`€ `€@`€``€€`€ `€À`€à`€€€ €€@€€`€€€€€ €€À€€à€€ €  €@ €` €€ €  €À €à €À€ À€@À€`À€€À€ À€ÀÀ€àÀ€à€ à€@à€`à€€à€ à€Àà€àà€À À@À`À€À ÀÀÀàÀ À À@ À` À€ À  ÀÀ Àà À@À @À@@À`@À€@À @ÀÀ@Àà@À`À `À@`À``À€`À `ÀÀ`Àà`À€À €À@€À`€À€€À €ÀÀ€Àà€À À  À@ À` À€ À  ÀÀ Àà ÀÀÀ ÀÀ@ÀÀ`ÀÀ€ÀÀ ÀÀÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ!ù,h¾ÿÿ H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\ɲ¥Ë—0cÊœI³¦Í›8sêÜɳ§ÏŸ@ƒ J´¨Ñ£H“*]Ê´©Ó§P£JJµªÕ«X³jÝʵ«×¯`Êm  ¬Ù³hÓª]˶­Û·pãÊK·®Ý»oÇêÝË·¯ß¿€­L¸ààˆ+^̸±cÃûŽL¹²å˘3眬™+çÎ=ñŠMº´éÓ¨S«^­´ë×?-»T-D³ÿd‹Ô {&ëßÀƒ N¼8ñÞÈ“óV¸ærÝÍF—]àáé'Óù{r”ÆÃ‹O¾¼ùÒÿßÓk–íýæóí¾§ž}dwõ1ÓâߟR?ÿÿ‹±Çg´m—ƒáv aâV`ƒÚe÷ Ö]·Ýu%an*è …Ä^‚^™u(r˜"‚bŠö÷bŒ4‚„V8J–áB.Ø£ŠVWD®8$†"Â袊X!“Hj÷c’M>9¥”GØa‘D"YeŽ$Íæ˜‰Iæ™WIy#•=¶9$“'Bù$ŒQ‰— ÂI§(þèäqzyßžy¶ÈáŸ îˆæG .êèD>*éSJ§dpNy¢ _º)§¢„êÉ%”&fú%•—J(¤§\’ȧ’°NZ‘™²vÿßc´Öª«P•JjŸo&ji¤N"J¡|®º¡ž‘šê+xj(§£âÙë®RÈÐØÆö]³Ý†ËÓµŠšçŠVêê¡ žš®¨ujÊ®¹ƒv ,¨è¾9'»…¾Jm±qŠ…Rp{·÷ðŽÀ–*§-ÃÓt+ˆý6ù ë6êaÀçzhí–.úIqF™ µ_rŸ$û˜ò±Âî«oÄÒ=¼÷ôÎÎmô…XðÀØ#ð­‘KóÒ,ŇôfÏÒ73£§2Dî¬L¨›=emAÐLq€=÷äSÄGäãÀl°ð/CùgµÓ½ˆÝtÝåín פtÖ€—ä@ݺ³‰j¸·S{ô§Õø^ôt·ÿóNYRýÏ[´aÏ5ÇcÄ1E¤O><´7ü„Š?hCxgˆ¥MóÑÿþpà¸ó ûã¶‹xûÀ¿·<ƒ,jÄû®‘ ”„YïØ#EåÍ sL?ýtþ¹iÀö¦_ðãbâø ªy²Ê°Wé ¿‡‰ê²…zLò´Ç?ðÇï6|îüß¿Jù«Uòòœ¥rËÆ0Œ1 êÃ;†èŽ6˜î wXNXÇ:—ÙÏ}þe$ŽuìdVšÝÅ@¸ÂÁŽpÛßÿf)ž$€² @ìa›•% Âà?XŒÃÖ³Þ”nhŒá†:ØÂ¶«n¯“–̪6EúA4×múæ7ÚðŒs;×ÈFÓÐP‡d{ØÐ!ÿ Dl`õ¨WŒ{`b>p‡{À-?k¢" õ£-32'Tï²Xã¬2ô­Ìƒ˜t¤ ‡H¢ñ“…–ÜX4"–qñ} TŠÿq{`&^à†É £B¯)r~ªTòâMÊ(©PR”qQ+c7ÑÉQ¨msSês—ÞÂÙѤ ð÷ØÂΚ÷é)pþö…È{ÂT ì‡.ûÙ93td›¾ð…(2*¡—œŸªÄ×»NKñCñ,Â)³~˜LŸ¾6j+M–ô«àÄŸÖd7³‡ý«`E&vF6{|£Ÿ:ÍeLÓRGšÖ¹làôúQ„΂CÈjL™xÕ=éYeZ«pEë”û’*ü ËØÐ˜±yöXØÐÖ×bè”—· mè `ðã®y,¢(=Ðu®¯Çð©ééÓ/­Lìa+Ë[—”Ê]…ŸDÅÊÉÞ6v·ÿxÃpØ>°ž…g‡1ZºÖÑ´xT -õèYÏV¶×“ çîqLÆàÖ/ÿŠ5®ze°z—D$½â×{Üǽãjkâ÷ê@êÁ“¨.iëjK› £¸ä./ùHÁÑ9à ACÀl[˜óJ¹ôÍ0|n'/f ëpÁ:–95ÌÍŠdö\n>’È_êétºÆB<`;fw»¡u l›ëWÜÀªŒ…ù’^ÙqÑyìS‡ C²~lÄG~I‘ ÂC{hÌeî’AÖvwÁ·ui¬ ”ö´/=0½kÿÀÍ?øË÷2å(ÛywéëUºô; ‰˜Ys¾3ð0Rå7Ü¿£Óoèݹê=p.Ž+tAK]Ù,@0ó]§ðüàèÿô > >"ë6Ђî­W 0†t©Õdß9SÐföA MA%~®¯}õçgõºàb‡6ÆÓ ˆ– L`Ô¡ötyÂj±Ô™Ö‚®³{'‹M—iiZò%+¶Õê"à¾_Èué| LÙ.ñÝN A^NoŸí¥KyéæQ»ÀÎÀp:Ÿzܯ™ÿž…¡ µúÏÅx»já*gÖw8À¬ k¡1Ñ‚£&C·eØš<‚Øóœ¼ûaOß ß?¾Q©}ð‰ÛÃâÆèìrNÙÙÜ>8ˆÅ-N´}á ¿À±gµ57G9öJî` þÚ/Ç:Xwfêoýç‹ýzÏAu·à6ìG­vA†Îö[ß7O0÷(èS“‰GB’ …!(àÏøf«Üu‡©í¸»61 âž?N숧*MÚNù*­ò”—sÍÿ#ObÈÏU.\¼39äÃ?Êô^Q<éAéùσ^›“ýê³EÊ6Úþö¸Ï½í§:{UŸwbcÿüñZÿsÕßõí=cÏ#©5>öתòEˆ|ŽVß7ÄŸ>òýGF?øä>¶™åëVüÚG^ ]üîCYöé—]8×$BÏ`ñf÷þc¡ù|T6Òu¨V;5c~ñ÷ä77uó}®çIèggÉÓAx¶¼SvÞ{ v5øYØ|ùÇ{øFÕ6íç~ïV¨B/3NNUb”FõÑ"#²g’'\Ù¤4-_1XU C,®/ÿ÷ƒÖ4YS£HJ•TåCI»ÕgwÓ†€&NèzX‚E‚ð)8E]dE¿ÕBØdISnÙôP˜R$b¨)˜Ò…%4(žQ‘R­MEÈTeQ,´HÀWMx‚OèQ(…ب€õ÷Y¨`(&~&ƒ/ˆex¡ƒdç,ÜIù2IOµ†\/2\NæE%#I5†&(z¾ÿÇ}ˆx…¥Hˆ€ÈU¨èM)Ø‚‰H‹_x>S–E‹S"™XIÒÄ2´UŸ"k7¸T½øˆ‹ÓpôGŠÐq‹‹HUŒ¨„ÃgŠò—ŠKó‡Uh'}†…â”LµHM*†²—1eõ*ì£d’Èpq¨‰©òPü÷dZ¤g±7Žz3UöHM54ˆ5hGS}á7‚üèŠ8{‡ÈLù8Š^¸PŒG-v‰$ÔŽh¸ŽmR†Y$‘—ø‰#6QYe‡Ñ˜U©€«èû™ÓÈݨ| I(Žäã‚ó5€[µ1VÕ>ÐhƒÐ"22(ŠWe29™TF¢1VÒ“ýHY>ȃ3‰„uvï–ƒ&©+%¹ŽˆÔh…÷g(ÉpC¶‹ÙX`Ù_Q•Sù]I\W)Y©• È•˜+!—ét)8e™–gi^ØMÛæ|ØU«g–ô‹+A˜{Yˆ ˜kÉ–)Y—­y‹i\†In‰™#zˆñ—VÉ’­#™0£{¢9š¤Yš©á— ™©™ ™nI…e‚x“™š¾ÿµš´Im† ‹¯ÉšS¨?`7›·y˜¶œ8œmù–®¹›‚¸pœÄ ÆùœUÇÙ™° •Ø tÍùä—¡É›´—”KY˜Ô)PQž™É©œËÉœã÷5ŸÎçìùzðM•y&ÎižYžéy……4¦—ŸârJE><†ùj]R<¢Eø¹^ûÉŸT1¡Xd#õYayTï9Z(OÙPc¡Óa÷r¢¿H™þI¡qC Ž©žë¹¡ÿ鞟ˆx‹òÉ#ò‡q8¢ÕB‰¤XYÊ¢L±¢º•1*£Jú™Çg£U>A׋åâ/•„,S„j¤DZ_v©;X>ÉŠži.:)Š£ Š5y¢~ò|ɸ íùMCº¥é4¦:’hµMC§‹rˆ!”"Yôi†ÊD¥Ã*Ê[ßq*§«£§_Šœ/:’azCG6‹¡Ù§Xµ;nPå“òŠC2YʨŠÊ^A±~Kʘ`*¦F–¨£j¬Úª¶#ªê¨š©*¦²Z#¯ «Ô¡¥¼ŠPb‰—u˜·ªªä™«£º«¿z[b€3 £ÅŠ«¡º¬;¡¬Ô ¡$¬ÃJ¬š[*Z{¦®â:®äš7Èz­&è«Ñ Ï ­î*œ¾w®rj­èj#òº­ï:gù‹÷ŠôZ¯§°µÑ¯³º™íº®½éBª®èú¯ëª ‹ªöq°ïŠ°ÒšV” ‹ó±5ÿJ°Ë±;±§êªë7k£( ²Ù¦²nªä­#‹¤2‹H_U¦CéTЇ+s„~ššÛ²ØÈç‰a›ˆÕQ6«fÊT:ËP¤Sù³@‹?{¤¶bµ%ÛšR„NIˈ®&\K ¢gz™R;µ±V¤‰µZ;³¾ÁµN:!òó‚’ Ùˆd˲׊·Ö j»¶´ZF²ø¶Ý†÷è´t‹£ÄY¶@«·{Ë·Û¸k²¬‡² x¸'´$u+¶U ‚›+Š«8¾žÜA£G‹F»“7{©ËtM– µ&ù¹yÛ¹Ü*©¹¶»µ6d­ŒKk°û«»Ë¶Ž[»{»sFº+»ÌÖ»Éú»À¼1k´¤»AÈ+dÌK¡Ê;¯Ó©Îû¼ÐÛ½Õʹf[›Ù›ŠÕK² Û·Ñk¾–õ?w¾öZ¾{ ¿š¢+²ìº:ì+¿Áy½ž«¿Ã ³ÂK¼L;ýÓ¾î;—ü»¿ãÛ­‡Y¿E;—¼²À¸™Àü¹Œ¼™l«¡ëÀö{¿¥Ê?rsÁfÀ"Œ€e)¹èëÁÁ¹S®.üÂ0¬{% ±ÌÀ ÌÁ¬ÂÜÂ1ÜÃ>üÃÁ1óRÃK»)¬ÃH NDœz@ÜÄNüÄp˜!ÄC¬•;RF5Ù*ÅZÌ»K\ÄFÀY{µY¼Åd¬a ¬œ°M3º³ÑÅeüƸâÆ^¼½Ü ºŠr ÇzLþkÇ¥{Ä~ÈͺDŽœJg ÀiŒÃÆzÇx\ÈŽäã\ñ¨ Žàø²Ó9ž†f5Üý—â?~Íþ×;œÐ˜X¯£ƒMÙ’ÍàdH‘5.à›b¢µzål¾Ë/K×Å{Ο9±=¨`ÛÖ']2™z>ܦçýˆ³4éÖm>èþæ-žÕ\¾æ]á—JIèŽ7é|èˆN–¼]xÝK´žé§üË’îâÐ}ŒÀ ­é¤~Ñ<ÇØ\è>®¥ÞêqéEžß윤½aå®^ÆÙ |,ÞÍ0ä=|ëÀÎë&U±­êÁk~ìˆ:¾º¾ëÂŽìÎn}MìžâÏ^í†,ËÎìrníÜn¼Ø^ÐÍmìÝ>î-<Ù®íÍNîê15, ÃþÝëïÛW¡à®ÙÔ.ïø.Öæ^ïö.îùþÄînèW ð&¹Lϲ‹Š¶~ði¿íß.í…]ð_ñüáÆìëoñï¯X‘ñœï?òã,ÿKä"Oò*Ÿ4ýyò(¿ñ+óæÕò.é„-ó8oÊ4/ñ/ó9ÿó–ž&5oó7ôFOsZ§”"ëGßôý Î ¿ôLïô…Tñ8ÀcläU¿õB›zXîZÏõbŸõÿõ`öcŸöá~õCOö)¯ö#ïëâšÏp~öo÷ßðžÝuo÷>÷¯÷Ÿ®¾üþîžø/øG®â}ï÷ø?1¶1”Ì­£¥gÚŠŽÐ™¿åâ ù‰Ï˜>Ê÷G´È& ÞàšOë¸=õžÿŸï7}ào RjÅ••Üö§>é­oð¯Ÿá¦„1}‡Ä‚à¶‘ç<-?&4ßN}û<¯ñ¬¿ûëÞû—R‹ÔÚó¸ãh®¦v",­‘æ¸êÚÇtªøÐ?¯M­,d'å(J/PbK®ÖV}Ÿ‡£›Í»Ðn^þ®Ÿ×/Äärr‘ñÀ?‚H0¡À‚ *lQbBŠ%^|hСŌ=~¹dÈ‘%MžD™R¥G‘+]¾ŒSæLš5mÞÄ™SçNž=}þTèP¢EEš4¦Å–K?.¬8QjL‡U—BuŠ5#ŨY2mµdS™dQšU:mZ°lݾ…Wî\ºu•íÞÅ›W/R‘dÍj}(V0Æb3,Üp׊‰/näê”dεc÷ö¬ì6óeÎ=ZôhÒ¥‰nöúôàc……S·lPcX×­ C] [vîÙ°q×Öè—2Íͦ9O‹ÜøræÍ?‡]zhå5«‹¶útøÌ릻ý>]üxòåÍŸG_:¼Ëõž³½¾=öËóÓßÇŸ_°ÿ~þý1}<„„‹8ýìÐ?d°A¤Bµ 40?ºPB 7ä°C÷ËðÃŽ¸³îÀÎB1EWd±Å¸„1Fg¤±FoÄ1GwÔÑ&ù@<ÑE!‡$²H#DïG 9CI'Ÿ„2J)§„¯Bƒ¤2K-·ä²K$•\’I/Ç$³L3ÏLo½&ÝûlM4ß„3N9ç„IMÿÜä O:÷ä³O?·“?=uôOCwE4Ñ í¼´B…4RI'•ŽÑþÅ SJ7å´SOé²´Ñ6?%µTSOÐJQGEµUW_…< ÔtÖXoÅ5W]ϲõÒTw6XaQm¯Ö½Œ-qXe—eÒbD6Ùf§¥¶Z3狯lUµ¶[o¿5òYhGÛ\skÏEK!,·¬tß…7Þ+×}°]wåÅ7_}™ÃVB{ëÜ7`>6SÕ#8a…æk»zf8b‰'î•D ÿ˜b7æx2z†¸c‘GfØ>Œí:ù¥”If¹åDû]Ô¸•]¦¹æ8Mîpf•t¶e¹gŸ¹Ä™CžSúg£×á˜eFºi§M ZèåŠ~ºj«ÇUziï®æºë>£Î™_¯Ç&ûZBE¤š×²×f›JÓ~±9¸Û¦»n½ÞVqnËìæ»o´ÏNQï½ý&¼p/ü­ÄGZÜqpÇÿ¸â°å†¼rËÇÃ{ÅÆµ»¼sÏ·zé§ï‘ø|3L>©ìÿósû9½·~JãGQðoÿ_^ì‰ôþüÑ9v?ý/ód¿ÒCcçÍ»wÞߺUó˜üε¾úÙïOÈ™t§²´¤++yωvÇÈN€à"àÎ?¦IUœ“·ÚÂ@Ä‚&A /袩ð4Óq!¹,È”ªG6aéMþz3›Õ¼†7¿ Îq¸ò@!þÐ10ÒMnú7ÃúF+‘ ΀n¸›ˆ(qˆCôà »•Á–¯{3adc›)Žð0%Ü kΟV0+¶yâcbcA1f%@?¬"UâèÆÁHF‹Õâ¢ÅCêÐFŠl¤J"ÕX¥'Žq†iK ¹çH¬8’{’‰£!FKâF“f$ä=ÔŠÂ#Å/”lÊb$U¹Æ4N¦S9ã sD^E‰³ôãm™MÒ—­leO)J­e­‹^ÜS_'Gˆ,F–`¹#4#™?.’°¼% {yÉ_fÓƒ±éd'ùKb6‹”ó$Ÿ”éJ2–ŠhTe%…Æ<®³1~LÌ;·yOxš10²”$ó9M_sŽÃÇ,çÃè‡Nª‚I„¤WšHEÝTt›íL7ÿyE[BÔ7´™pÚD+–ôb4ŒD]#˜”êpD Ö9ÚP:¡Fl $!7C÷Rß© ¦Ê’éL (§Ê¸Q†Õ´˜N•¦)£.ó§ÃBB…ÂA©jë,øs K!ø¿Ÿò(Z5áSuT¡NUÍZÅŠŸ¨FÉ…j \¥$×µž§­Pz+Q©·W¾öÕ¯lóê:Ö®ÎÕå©Q½U2r؋ĶQý¬U°ÓÃ.óöáP™1tszp·Žv§ý-;ñ¡”ž¸ÍOîpD,}¸•ûRïr»eù^Ð:}¯~{z¹ÓøúqDŸ–=Ï&rÊ™È Ê»ØÆÆ¶?U¾b–a¼Î^v5«o÷Lňʺ’´Öf•)Š•rÙ“K)HìÑÆ›†Q¬(ÁÓøä‰o4Ê¡\2ŠÃYÿ‡¤ït¸R4­ìšëš‰,‡w±%ªv©û¥ïÉg&ËË–ws’ï® S ÇqJІ×ìåDߎuuS®2'ûÈlÿ¾*)Ó½ ¾Ì¦ÜÉX÷oâ°ás‡ü8-©ùÉ'}åSyæJ3ïO¹k¼×ÉfÚâLžx‘->ñí¹éc»ÝÝvW çàŽÇEÚ³÷Øt:ÌÁ(ùÜïÒã¤.üºïBñ‚!žõð3{yé|jƒžëîæê*‹¯ÑÁW¿ûÁÔ=5^zÆôöå°·¼¡Oúãä4ï˜ëEǾ—¼ó ¯6çãÙO(ôá=¨‚R¦ºË¤Òë<ÊC¼þ˶¦SªúJ¸£±é’¿f“˜¢â=C’£¼‹5‘r&‹R:R)ƒ8â(S:ïË!µ‹5ê:j›8 Ä@¦Û¹ø*”ÚÂ1åK.’™@ø;9E£†>ÐÁÁÈ|’š¬£̸²£˜PI!š Bª™K¯¹­<”Y»»™Ö‹>ÿa¾ìã0Ä æ[¾ì›Âž‚À"CY±#Ž97ü6ÅëB0ÛÂäOØ„C’“¶8äÂ%,5ä3ÂŽ#=‹bŒx³"Œz5Xã>,2A4¢Z)Ñ;8Aܘÿ´JÓÄMäÄN¤´‹AC;Â=¢¨,$Åü³=l;Vr<ÿ8ž/Lœ?A# Yü³™s²…Ã)d@bcµ`28×êEÜÆEP„>ZÔ[Ä5;¼CœÓ¾`ܾ<2¨´Ã%qšÆàó·3¼De¼½‰y”&œ¶Mš>ðcEÖ`¸Ï£Fà{·ûc%û;>}ëFo%@ ŰR¿>*@ý3@R¼<}l&ü$Û;Æõ[f¼ž#LG+ :MšÄ‡ô¾­ƒ#.“È£KD¬¾’zÆ´¸ˆAHõ‰Ç…dÃŽÄÅÉ$´GzTE…aH>?¬@zŒ¶š TœÔÉ!+BÕdɢė—¤J'¤Å,·}a*öÐ2)3¤r³‘- ©©äÊ¢£2¬Ä²\”¸óH™ÄNÛ±4äJå¼)æl áˆN?«Íï0Mã4µ1Ï’LôÌ”&¬:í{ÎÃ$N¾SÝLH׬Ï{ŒÌ˜MÕ´&ö9̬‹›Ï_)ÏÂŒÍû„Bl#âPµ!ŒOëЄÑN ­PtÏ4¬ËÔáPÞlÍ å3!tLÅ„Ï P•OíñŸ"Ę„‹ {Ð}KÎõMvó‘îøÐæ3Ñ¥¼Î=<åƒ QÕ à‰ŸÑ%O½*{kÑ]M(ÉEL±R&mRg,Ñ"Í#Q­ÒŠ“N4…Lò)S3=Q,ÝOÊ—'mS7}$ý=ÕP9N+Ïä¸S2ÍÎë OjA¿ «0õSÅ>ÍM5R6µMFÅÔñ,T8TJýS5µÔFÏGµIC…Ô¼HÔ¿ü40ÍÒVe¡<5Õ(ÝKºT™ñSWÅSs9›U@’U6¤Õ@•–H½U-ÕÕXÝR±ûU` VaÅÔcÚSc}SíQ²UEU\%ÖgåTX•Öi¥ÖLuTgÝ"hÕVðPеµÿlVA*ÖlE†|ÅeÕjÖWÅ qmWßyOWyMWpET{]שúN@µQ~íWRÅV.½W‰Î}eUµÓ" IO¤Ø¿ Ÿ]WB¹Ie?tÔ¤¹°kÿ­MÃÔ\Óný ˆ•ØÍÕ‘]Øô¼M}µ/úÖRR3„,’¥ÓK…×sÂQY9#¬<)Á<Ës+N— Xs½Ò¤rÒ(TÙ•Ú˜­â?nzWxœ·”lŒZ =Ù±EYšZ›Õ’]¥«=4¸3Ù6«°¥±p Ò=L5* /uYTÛúóºZµ%C¢EÜ*rµÓʹJ5®¦-‹íY¾üYO¥ÚD!3ìKý|%yHü?ýNö¢Ï}\žÚ”UÒÉ4¸Œ¹¿­FÏõ¤ß3Gpº¶†eZºµ[eY1ÍÛÓE]ǹ®ÝÛð¡Ç£¤vD?c|BË‘[ÉÚ‡íAû4<æíÝ3³Í¥½«ƒÝâû¼ÈËÐǤË]ØJØ/-رÒÊ„^-+ó“ºÃ¼{ò?ØU@Ü'xÌÙðMS‚5IÝš¥^ÃÚÚ@ àŒ (À}µ ¢üÞÚYÞóEÚ²}[ŸÅ½í_ߥ×úµÝÊíØüÕßèu`ô^MíÆ[U…`vQ¨,áfáê_kà~`þ-ò­à½UW æÕ–aÅ-Ýó\áÆY‘}áÅÍþ\ÈQaªØ'¦ž‹Í`Ebþ¬b¾â 6T`!áKÖñMÞ™EI˼á-—Ε.±/ãCãû b!6ãVAcŸUcç5᳽ŠFÛ8Æ-@ªc‚µ—2{ã åcX™ã<)— Û<–`ÿ-dC6§?Þ×A¬L«G†d Š, Nb2žÅ&bL&•C®Ñ0nãÚ¬Y´Ôc^åù –¬=X6åî`BnåO!åZõaËL™ïâÖK¾åRÉå§ äNä{;á2æMæû5f_{QKLfe^fIifòEa¢”äU¾9nÞãjnÊWùÂíÌÈld`çI¹æ;&Ñž*gsžfNgu./+žñLofåy> aÆZ­ÃgvX÷ãgEiæ_¥d"uá5Þç‚N¦Nùâv1ÚEžœSž[‡~覼‰–åc–f;¾hŒþuv\; h-Æ_‚鯉INd+Æcfhy^éŒ6Ÿ:åß“béšf³û™ä`ÐXnÙÑíiŸ.²BÉ}g8~^Cj¢ê[µOnb²=ê¨uZT¼mj[6ê¬Öjt¾ç*áRi™MÛ±6Ê7Ùæl¶µŽ›´U fk¨vë_b´¶ë°뻦f÷R8Þ=ZNlÜ%kÀ“®ZÁöhüåëA«ë¾Vì¿>ìxn 6lº¾Ý­žìÅN+¦ôä]&ìÊ&Ý›ílÊ–XÒØÜëµöëÄ>mÒ.%c±äMe׆Z$Œí†—T­e˜mÉ~êÛmÙ~T=ûmàþ`GÞlÓ.îoþ’BKnSže§†kÜ~n°fŽþMÄÎlçnâÎî«Î›bVbÌfbÈoݯï¢Æ<<ïþ´V¼Æjðno÷œ“Ù¶õ¾möFoؾoÕœ•1ë§¥húæï¤pü>(Þ®àÝæþnñ.mÿ^ð™Tè Ÿî çð §pÛVð _h©íÓÐŽì¥=ðŸ6p q…JR7ñÜ–pémkÖVñ¯hÓ57³äL¯ìp‹–ñOomÏÆñ.qt+¸ÕµñsVkïr"/lû>r×q¿4¿PÉbg~íå>«—Þò*ÿä+—oxŠH|ò9zkìÿq—êGp1§@ˆ JÃõÛÀCÀgòúæs/W¯6s9wcGÉJ5Þ˜›_äíh0gô>÷ó?/ó7tŸ$s'>azL=wôHçi7·i67òIçA WäbÔ¥_ätËÖ`Uq‡ô@õ%~ñ¸ ¿€dÝ Dq oò'‡p–õPõ1¦sÆ7ü(C½ÞôeßòKuHvFÖpN–딾îoC)*_öQ§ÎT®öNvk_óOogXïö¡Ô5‘d¯îEõV¯°kG°÷tâ=vxô=_õw¿l\¦÷·wèŠæNò>w^ßwm÷/x7Ì·tpÉv¯ExyO¬\‡ö‡O'ƒ-rd‚sroöy·øçxóÅ÷„Gù€WxŒoi—ô“_ùˆÿxØ\Ò…¯xz.y“—ùå\÷š·ùxÿ÷‡h•¯÷ž÷X€Nd†y}ù—ú8GúýX¦î{oz§ÏyNXWŸzÖ °ÚÚ z]/wŸrž¸ÿz³µqä~ïõ gæ¨gÙµ'h™èMö×ú¾çzM—z»ŸuÙD ·Ïú§7ûòüÀüaßÉþÈÅw—æ´WûÆ?xDn´R{Ÿ{å¾|Ìÿö¸†nË÷ûÄßî‰W}ÁÒüÕwýG;ù¨zkyœS¢—{ql/ýnÿ5›ëzöôÝ'ÔÉgn{Ç–ÙGrøŽiáþ™6nŒ~}Š/}å~õ&_ZUÚÚ'|?|(‡2.k¿~}OÿpŸÖ›¹‰þôwÄe”Ýô!ûîTŽ®®BüÌGÐ7¸Cþãÿ,hð „ 2lèð!Ĉ'R¬hñ"ÆŒ7rL(°#H!GüHò$J†& ®L‰°¥Ë˜2/„IÐæË’,â\Ø“âφA+Öä¹S¤Ä¡*ÞLiSę́R§R­jõêI¨Xn…¨µëÖ§X¿‚-k±¨HÕd«–mÛ£oÛÎu»öî¿·áæ…ë÷nËš{éÎÕmNÃ…õömìØ®Ý›ér•œ—°_®kãr^¹x¯^ÄfG“.mú´i²†YÌx¢ê±¨I‹µ{6îË•å^6¹yuÿÜßœuö=œxÓÞȦl|÷Fѻ뾙úòÎÉ‹OwžÜú󺄳_?<7úôê׳¯ž'Úß±oÛ†Ù+Qú˜ 'M\U{`ùZs”‘wžcÕ=÷˜uÛ)&sš5F†_ ¨Ý„žèáj¨à‡%‚˜!Rª¸"‹-¢$]NðEøQë‘eaŠ–}'£y9òæ~3R ‹ÿ )!‡îµ&‰îxœˆ4*"_Vxäy‹…ød“ÙH#ˆ}ÕžƒÁ)f%Eª¹&›m¦9vÞÉÙ£[ûa‰ŒRöÔ\˜p:€yÎD¤›1 ªá„æ6"¢]2%˜Tööˆ&F‡îÄ_¢d:Yæ”;2¹é}šžˆ&¡…šz*ªNÝùc’ŸX礥ºê¤ã½f¦˜‚– ƽ†é›Ô]ˆa}©¦¶j£¾B i£b§ér v&-­•"[³\:ëh¢@⥨² ¶º)®{.ºéf%Ù°3&é–]Rz¬¹{&9nƒï¢ØäˆÓÊ+eš³ª[–RZ:÷­®Øj(â®áž˜ìâøW•_) { ñd¼îëp†‘åÅÝzkÄËú80Ë-»ä¼Ãzf§àñ˜ž…(+y²¢™êÈ-¿Ý2Ú­žÅ¾|•¬ÖÎFs­Jw”4GLûT-SG[}ÿõÕ‚’ k‚5ßg”z–^*4ÏBs)jÏð¦Œ%ÔµõCo»0m¾-kœfI½2ÔrÃý7àu›Û)¦ýñÊKÓZ¦}jë8¿òUìõ§lxT~Ç­9H:7MSÔœW ,OU’:æ©«î"T½Bf²È'Ç~:ݧi=ª™æ®Üãþ*׬ïµCiôê/?÷aÇ«ª<óÍ—&zCÿô{®ãe½Ã*gkÃkËÞ°çÃéû™¶·ùÑÁ ÿ¼ë¶º®ùë¿?ÿýûÿ?˜¿‘°€< ¨Àvݯ”ßûh¿‹eÍJÔØ3¨ALpƒü RT:˜¢káû—LHÂ)o,|! ѣ³ØÈy4T sX¼ê°‡>üσXÀ6¯r8ü!+h±$2±‰NŠ£(Å),„O¼âù‡Å-€r±‹Êëà ½(ƨùgŒf<#Õ%Â0¦±qKœã(Ç9âi*l¤#kwÇ<ò±s£‰Á2 ²†M9Ï|ºñžüüg%÷ P4ús ]•$9JJ…2”ŸÓ+hCÏшR´Ÿ ­('ŠÑŠñ¡Å¢F?*Ò'zt¤M ©ISÚÃ’ª4£-}i.Y S¢t¦6Í ôjzS"î´§š”©OW¨Ó u‡G,ªP‘^ªT„vs©ªS£ê²œJõ©U½ªEU¬ ˆ«^=£V¿êÀ­Šµ¬- «YÛGÖ´²•§ök+ùÖ ×¹¢†sr¥«KîŠ×½v•™|=ž^ÿ*X;6u°î4,b×g×Ī.°§Œ}lçü Y{N¶²[¬eç—ÙÍZMs3L˜ÂtZ‰k´û©˜isUÚŒ…¶´u,gc»”·æ¶^´­ls‹Êò·\ô­nsëÙ@¤Á=®©ü†ÛÚGo¯E.tפ\‰^òOÂ#ì?‹] ¦¶»¬%-j¿{Ú%‰V¼ªÎhK<Øäè'Z¡ÏÍh˜ÝíFS»¨’Ûç39×NæW‘̆î³Æ¾½¥ÿ¯3 \¨évåFOáw‚Æ» ë^†ÃÖKŒ`Áâwœ0܆¢µÈy‰‡ñ©†7ìDæ¾§ˆåó°Wì´ýKw¯z‰Œ[šbŸ´ºB¹î‹ÝJ=»m¿¦;Ûög™%˜9èE1Å_÷~8‘Z¼òó‚ÜWjº ÉÏòÖˆ9-,ÿx¾QÖ&éø{½Ïì ÀKN2öš<Û°]UYÊ5;åõ¹gæžrÜå ‹Ùkr‚kpìc^ª/®¶óóŸwyâ%*Ñá!±îj5iJÓ+²62Ò 阖NÑB¢1µlÌ* ;yÑŠk4óžLd|âÒ» 9þÔ ƒœÜó9r8&~ëJGR¨”{P÷žË ø›v[Æá[=ÔÆ§óµ¤jí´=Ì­wW¦'\žò{súöA÷ÃôLõÝó»ûç¿nÞp ×€Ô©Íë”LýÚ£•àᘲÁÎxŒá|ÈX“ `ž-YôÑÚÃõ[/ùßÿ™î,Ÿ\´ÐÔ‰¥ñNH% Ë©ÍI•ýV=ÞRåÌéTŸÙÄ ¢ôŠûyì‘6 ~NTÅ`Ñ`¤ZMXÍPŽÔŒ r_úÞÈÂ9•‚`Ruî]óÅŠóÙŒ¶ù ¡Ιž!MZYãya ü‰ü•ËöQo ¡Š_Ð5]ÄPÌĸF»q²áߺxåZ²1¯éZ¯E"(-¢¨í!Öáè¥aÍ¥ÊÑŸ½‘\D¡èyÄ(’âÞÿ¡%n"1¡zçÙvÚ!TMÑœ–™. FÕš–+¢"u¢,zb=½“½PZ¿h\bâ«­b(^Vö_º,c4"c2N!3&Éà†  €%`α"RÔãÁ["#ñy ~76¯ŒÙá˜`²Äûý`.*¢ù©c#B¢@$A2¢AØ)J#1^ã,Î㿉Üv—÷p âù ¶!Fn  ¦£e#,¾âT½£¾u:Î#ÝȺ 8 ´Ø#+š¡>Ö·„$…d32šgÄãJ™äé%ß86Ÿf<ß&GVVNÒ¤5ªð ¡`Lã0̘ÌD˜¡…0^¾8ˆcÝ‘NÆ’FºãBz¥…‘] 1Tò!¦[ bÆ þa~ ž¹‰Vn|‘ìØ˜!nåR#4bN\Æf–{¡¤ØXZáïU"¹õ#_*$d pÕeË<äcê%Nù¥G¶¢a†…\–ÚG~婬#e6Phš‹üeG†Xªb¹Óh*–m•ie¢¹Hr¢^>d6£¯íæ÷ žoòæ@’W·1&c夆ŠÙPkÆšm‚ä¥LúdgÊWj~Ñr\› ÌuÖæ'N–k%§gfçýà¦2É•¹”fž¦Hª‰~æv®' ±' dT/Ö§}&äFir®&N½§f±g, ÜÄÊCRç}­¡Ò›taãNJÛNégx'‚N“^m M\‚Ê#ª&›çXe(mÂeC²Òó”nh祸ètvèMÆ-åQ=(Šjœˆ&‘‡®R`Å_ƒþã.¶£Žqb„º ‹ÒD‘ª¨x€bPÕ!N°•mÁ’’Ò‘&i‡&Z•âbÅQ¤õ”¨÷IWGe©„–éÏôèQEa-ùlIéŽQŽþÔ•#Œö’š~`Oe¥¶™FŸf&€vÑ:% §ã‰¾iÈ¡cVýéñ­£î)3e† âiž"j¢–fm=jn•¦†é‹ü¬RU¨§bjÅé"Áæk(QÝÕÌÉg!¡ªÃ)jG±ê—Š)‡â¥$uªIê*œÚê­š©u k¬òª&šÝ¯:è¨â꥚ž±Æ$#éÔ³úÛ}Vk)&”k€ú*þ’£n°«©6+úy’¬þÑ·¦†b¡¶Òi£fÒ¹Z T¸—Šë¼^\ØLk‰F뽂U½²éY¥(·ê¨¾*Öª²Öà¸â+LreÁjY¹‚kÂ*U- l¾ÚÖ]ÃÒëÄRìF’«?bì7E¬¼&¦Âö붬.ÅëB!«9ý«½ºì°’lyfìÎZÉ*( ¬.ÊͲÎÏZlȾlÇz¬é,émËBÛÆæìÑí^ÒlÊcýAmÏV#­–ëUAÔÈìÕY­»>%ºíÉ6-ïE­-|v'iíÖzmØö*<-íbmÛÂlQÝœR­ô©-¶^ÑšìÎn*Ãêß*åÊÙmmámÞná+bâ¨âÞ-Ù²k6N-äÝŽß.nå–íäŽ(´6ÔæªÕÑ ’ÛrÕ9½—í®==,0¹îÍÖhU­îãú¨J•î§Éí}’®åž®«A§Ž=kYz®à¾mç®íŒÊ¯Â’ì&ed–;Î,Á Uses of Class org.apache.struts.taglib.tiles.ext.TextTag (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.tiles.ext.TextTag

    No usage of org.apache.struts.taglib.tiles.ext.TextTag



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/ext/TextTag.html0000644000175000017500000007670010404045236031012 0ustar arnaudarnaud00000000000000 TextTag (Apache Struts API Documentation)

    org.apache.struts.taglib.tiles.ext
    Class TextTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.html.BaseHandlerTag
                        |
                        +--org.apache.struts.taglib.html.BaseInputTag
                              |
                              +--org.apache.struts.taglib.html.BaseFieldTag
                                    |
                                    +--org.apache.struts.taglib.tiles.ext.TextTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    Deprecated. Use o.a.s.taglib.html.TextTag instead.

    public class TextTag
    extends BaseFieldTag

    Convenience base class for the various input tags for text fields. Modification : add an prefix property

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:34:00 +0100 (Fri, 22 Aug 2003) $
    Author:
    Craig R. McClanahan, Cedric Dumoulin
    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String prefix
              Deprecated. The prefix to be added before the html name.
     
    Fields inherited from class org.apache.struts.taglib.html.BaseFieldTag
    accept, name, redisplay, type
     
    Fields inherited from class org.apache.struts.taglib.html.BaseInputTag
    cols, maxlength, messages, property, rows, value
     
    Fields inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    accesskey, defaultLocale, indexed, tabindex
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    TextTag()
              Deprecated. Construct a new instance of this tag.
     
    Method Summary
     int doStartTag()
              Deprecated. Generate the required input tag.
     java.lang.String getPrefix()
              Deprecated.  
     void release()
              Deprecated. Release all allocated resources.
     void setPrefix(java.lang.String prefix)
              Deprecated.  
     
    Methods inherited from class org.apache.struts.taglib.html.BaseFieldTag
    getAccept, getName, getRedisplay, setAccept, setName, setRedisplay
     
    Methods inherited from class org.apache.struts.taglib.html.BaseInputTag
    doEndTag, getCols, getMaxlength, getProperty, getRows, getSize, getValue, setCols, setMaxlength, setProperty, setRows, setSize, setValue
     
    Methods inherited from class org.apache.struts.taglib.html.BaseHandlerTag
    getAccesskey, getAlt, getAltKey, getBundle, getDisabled, getElementClose, getIndexed, getLocale, getOnblur, getOnchange, getOnclick, getOndblclick, getOnfocus, getOnkeydown, getOnkeypress, getOnkeyup, getOnmousedown, getOnmousemove, getOnmouseout, getOnmouseover, getOnmouseup, getOnselect, getReadonly, getStyle, getStyleClass, getStyleId, getTabindex, getTitle, getTitleKey, isXhtml, lookupProperty, message, prepareEventHandlers, prepareFocusEvents, prepareIndex, prepareKeyEvents, prepareMouseEvents, prepareStyles, prepareTextEvents, setAccesskey, setAlt, setAltKey, setBundle, setDisabled, setIndexed, setLocale, setOnblur, setOnchange, setOnclick, setOndblclick, setOnfocus, setOnkeydown, setOnkeypress, setOnkeyup, setOnmousedown, setOnmousemove, setOnmouseout, setOnmouseover, setOnmouseup, setOnselect, setReadonly, setStyle, setStyleClass, setStyleId, setTabindex, setTitle, setTitleKey
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doAfterBody, doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    prefix

    protected java.lang.String prefix
    Deprecated. 
    The prefix to be added before the html name.

    Constructor Detail

    TextTag

    public TextTag()
    Deprecated. 
    Construct a new instance of this tag.

    Method Detail

    release

    public void release()
    Deprecated. 
    Release all allocated resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class BaseFieldTag

    getPrefix

    public java.lang.String getPrefix()
    Deprecated. 

    setPrefix

    public void setPrefix(java.lang.String prefix)
    Deprecated. 

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Deprecated. 
    Generate the required input tag.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class BaseFieldTag
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/ext/package-frame.html0000644000175000017500000000211510404045244032101 0ustar arnaudarnaud00000000000000 org.apache.struts.taglib.tiles.ext (Apache Struts API Documentation) org.apache.struts.taglib.tiles.ext
    Classes 
    TextTag
    libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/ext/package-summary.html0000644000175000017500000001377010404045216032514 0ustar arnaudarnaud00000000000000 org.apache.struts.taglib.tiles.ext (Apache Struts API Documentation)

    Package org.apache.struts.taglib.tiles.ext

    Class Summary
    TextTag Deprecated. Use o.a.s.taglib.html.TextTag instead.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/ext/package-tree.html0000644000175000017500000001510610404045242031750 0ustar arnaudarnaud00000000000000 org.apache.struts.taglib.tiles.ext Class Hierarchy (Apache Struts API Documentation)

    Hierarchy For Package org.apache.struts.taglib.tiles.ext

    Package Hierarchies:
    All Packages

    Class Hierarchy

    • class java.lang.Object
      • class javax.servlet.jsp.tagext.TagSupport (implements java.io.Serializable, javax.servlet.jsp.tagext.Tag)
        • class javax.servlet.jsp.tagext.BodyTagSupport (implements javax.servlet.jsp.tagext.BodyTag)


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/ext/package-use.html0000644000175000017500000001236510404045222031607 0ustar arnaudarnaud00000000000000 Uses of Package org.apache.struts.taglib.tiles.ext (Apache Struts API Documentation)

    Uses of Package
    org.apache.struts.taglib.tiles.ext

    No usage of org.apache.struts.taglib.tiles.ext



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/util/0000755000175000017500000000000010423130301026674 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/util/class-use/0000755000175000017500000000000010423130301030573 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/util/class-use/TagUtils.html0000644000175000017500000001300210404045214033220 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.taglib.tiles.util.TagUtils (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.taglib.tiles.util.TagUtils

    No usage of org.apache.struts.taglib.tiles.util.TagUtils



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/util/TagUtils.html0000644000175000017500000006242110404045232031332 0ustar arnaudarnaud00000000000000 TagUtils (Apache Struts API Documentation)

    org.apache.struts.taglib.tiles.util
    Class TagUtils

    java.lang.Object
      |
      +--org.apache.struts.taglib.tiles.util.TagUtils
    

    public class TagUtils
    extends java.lang.Object

    Collection of utilities. This class also serves as an interface between Components and Struts. If you want to rip away Struts, simply reimplement some methods in this class. You can copy them from Struts.

    Author:
    Cedric Dumoulin, David Graham

    Field Summary
    static boolean debug
              Debug flag
     
    Constructor Summary
    TagUtils()
               
     
    Method Summary
    static java.lang.Object findAttribute(java.lang.String beanName, javax.servlet.jsp.PageContext pageContext)
              Search attribute in different contexts.
    static java.lang.Object getAttribute(java.lang.String beanName, int scope, javax.servlet.jsp.PageContext pageContext)
              Get object from requested context.
    static ComponentDefinition getComponentDefinition(java.lang.String name, javax.servlet.jsp.PageContext pageContext)
              Get component definition by its name.
    static java.lang.Object getProperty(java.lang.Object bean, java.lang.String name)
              Return the value of the specified property of the specified bean, no matter which property reference format is used, with no type conversions.
    static java.lang.Object getRealValueFromBean(java.lang.String beanName, java.lang.String beanProperty, java.lang.String beanScope, javax.servlet.jsp.PageContext pageContext)
              Locate and return the specified property of the specified bean, from an optionally specified scope, in the specified page context.
    static int getScope(java.lang.String scopeName, int defaultValue)
              Get scope value from string value
    static java.lang.Object retrieveBean(java.lang.String beanName, java.lang.String scopeName, javax.servlet.jsp.PageContext pageContext)
              Retrieve bean from page context, using specified scope.
    static void saveException(javax.servlet.jsp.PageContext pageContext, java.lang.Throwable exception)
              Save the specified exception as a request attribute for later use.
    static void setAttribute(javax.servlet.jsp.PageContext pageContext, java.lang.String name, java.lang.Object beanValue)
              Store bean in REQUEST_SCOPE context.
    static void setAttribute(javax.servlet.jsp.PageContext pageContext, java.lang.String name, java.lang.Object value, java.lang.String scope)
              Store bean in requested context.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    debug

    public static final boolean debug
    Debug flag

    See Also:
    Constant Field Values
    Constructor Detail

    TagUtils

    public TagUtils()
    Method Detail

    getScope

    public static int getScope(java.lang.String scopeName,
                               int defaultValue)
                        throws javax.servlet.jsp.JspException
    Get scope value from string value

    Parameters:
    scopeName - Scope as a String.
    defaultValue - Returned default value, if not found.
    Returns:
    Scope as an int, or defaultValue if scope is null.
    Throws:
    javax.servlet.jsp.JspException - Scope name is not recognized as a valid scope.

    getProperty

    public static java.lang.Object getProperty(java.lang.Object bean,
                                               java.lang.String name)
                                        throws java.lang.IllegalAccessException,
                                               java.lang.reflect.InvocationTargetException,
                                               java.lang.NoSuchMethodException
    Return the value of the specified property of the specified bean, no matter which property reference format is used, with no type conversions.

    Parameters:
    bean - Bean whose property is to be extracted.
    name - Possibly indexed and/or nested name of the property to be extracted.
    Throws:
    java.lang.IllegalAccessException - if the caller does not have access to the property accessor method
    java.lang.reflect.InvocationTargetException - if the property accessor method throws an exception
    java.lang.NoSuchMethodException - if an accessor method for this propety cannot be found

    retrieveBean

    public static java.lang.Object retrieveBean(java.lang.String beanName,
                                                java.lang.String scopeName,
                                                javax.servlet.jsp.PageContext pageContext)
                                         throws javax.servlet.jsp.JspException
    Retrieve bean from page context, using specified scope. If scope is not set, use findAttribute().

    Parameters:
    beanName - Name of bean to retrieve.
    scopeName - Scope or null. If null, bean is searched using findAttribute().
    pageContext - Current pageContext.
    Returns:
    Requested bean or null if not found.
    Throws:
    javax.servlet.jsp.JspException - Scope name is not recognized as a valid scope.

    findAttribute

    public static java.lang.Object findAttribute(java.lang.String beanName,
                                                 javax.servlet.jsp.PageContext pageContext)
    Search attribute in different contexts. First, check in component context, then use pageContext.findAttribute().

    Parameters:
    beanName - Name of bean to retrieve.
    pageContext - Current pageContext.
    Returns:
    Requested bean or null if not found.

    getAttribute

    public static java.lang.Object getAttribute(java.lang.String beanName,
                                                int scope,
                                                javax.servlet.jsp.PageContext pageContext)
    Get object from requested context. Return null if not found. Context can be "component" or normal JSP contexts.

    Parameters:
    beanName - Name of bean to retrieve.
    scope - Scope from which bean must be retrieved.
    pageContext - Current pageContext.
    Returns:
    Requested bean or null if not found.

    getRealValueFromBean

    public static java.lang.Object getRealValueFromBean(java.lang.String beanName,
                                                        java.lang.String beanProperty,
                                                        java.lang.String beanScope,
                                                        javax.servlet.jsp.PageContext pageContext)
                                                 throws javax.servlet.jsp.JspException
    Locate and return the specified property of the specified bean, from an optionally specified scope, in the specified page context.

    Parameters:
    pageContext - Page context to be searched.
    beanName - Name of the bean to be retrieved.
    beanProperty - Name of the property to be retrieved, or null to retrieve the bean itself.
    beanScope - Scope to be searched (page, request, session, application) or null to use findAttribute() instead.
    Throws:
    javax.servlet.jsp.JspException - Scope name is not recognized as a valid scope
    javax.servlet.jsp.JspException - if the specified bean is not found
    javax.servlet.jsp.JspException - if accessing this property causes an IllegalAccessException, IllegalArgumentException, InvocationTargetException, or NoSuchMethodException

    setAttribute

    public static void setAttribute(javax.servlet.jsp.PageContext pageContext,
                                    java.lang.String name,
                                    java.lang.Object value,
                                    java.lang.String scope)
                             throws javax.servlet.jsp.JspException
    Store bean in requested context. If scope is null, save it in REQUEST_SCOPE context.

    Parameters:
    pageContext - Current pageContext.
    name - Name of the bean.
    scope - Scope under which bean is saved (page, request, session, application) or null to store in request() instead.
    value - Bean value to store.
    Throws:
    javax.servlet.jsp.JspException - Scope name is not recognized as a valid scope

    setAttribute

    public static void setAttribute(javax.servlet.jsp.PageContext pageContext,
                                    java.lang.String name,
                                    java.lang.Object beanValue)
                             throws javax.servlet.jsp.JspException
    Store bean in REQUEST_SCOPE context.

    Parameters:
    pageContext - Current pageContext.
    name - Name of the bean.
    beanValue - Bean value to store.
    Throws:
    javax.servlet.jsp.JspException - Scope name is not recognized as a valid scope

    saveException

    public static void saveException(javax.servlet.jsp.PageContext pageContext,
                                     java.lang.Throwable exception)
    Save the specified exception as a request attribute for later use.

    Parameters:
    pageContext - The PageContext for the current page.
    exception - The exception to be saved.

    getComponentDefinition

    public static ComponentDefinition getComponentDefinition(java.lang.String name,
                                                             javax.servlet.jsp.PageContext pageContext)
                                                      throws javax.servlet.jsp.JspException
    Get component definition by its name.

    Parameters:
    name - Definition name.
    pageContext - The PageContext for the current page.
    Throws:
    javax.servlet.jsp.JspException - -


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/util/package-frame.html0000644000175000017500000000212410404045174032260 0ustar arnaudarnaud00000000000000 org.apache.struts.taglib.tiles.util (Apache Struts API Documentation) org.apache.struts.taglib.tiles.util
    Classes 
    TagUtils
    libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/util/package-summary.html0000644000175000017500000001370110404045224032662 0ustar arnaudarnaud00000000000000 org.apache.struts.taglib.tiles.util (Apache Struts API Documentation)

    Package org.apache.struts.taglib.tiles.util

    Class Summary
    TagUtils Collection of utilities.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/util/package-tree.html0000644000175000017500000001350110404045212032117 0ustar arnaudarnaud00000000000000 org.apache.struts.taglib.tiles.util Class Hierarchy (Apache Struts API Documentation)

    Hierarchy For Package org.apache.struts.taglib.tiles.util

    Package Hierarchies:
    All Packages

    Class Hierarchy

    • class java.lang.Object
      • class org.apache.struts.taglib.tiles.util.TagUtils


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/util/package-use.html0000644000175000017500000001237110404045212031760 0ustar arnaudarnaud00000000000000 Uses of Package org.apache.struts.taglib.tiles.util (Apache Struts API Documentation)

    Uses of Package
    org.apache.struts.taglib.tiles.util

    No usage of org.apache.struts.taglib.tiles.util



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/AddTag.html0000644000175000017500000004750310404045234027753 0ustar arnaudarnaud00000000000000 AddTag (Apache Struts API Documentation)

    org.apache.struts.taglib.tiles
    Class AddTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.tiles.PutTag
                        |
                        +--org.apache.struts.taglib.tiles.AddTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, ComponentConstants, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class AddTag
    extends PutTag

    Add an element to the surrounding list tag. Same syntax as <put>.

    See Also:
    Serialized Form

    Field Summary
     
    Fields inherited from class org.apache.struts.taglib.tiles.PutTag
    attributeName, realValue
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface org.apache.struts.taglib.tiles.ComponentConstants
    COMPONENT_CONTEXT, COMPONENT_SCOPE, EXCEPTION_KEY, LOCALE_KEY
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    AddTag()
              default constructor
     
    Method Summary
    protected  void callParent()
              Call parent tag which must implement AttributeContainer.
    protected  AddTagParent findEnclosingPutListTagParent()
              Find parent tag which must implement AttributeContainer.
     
    Methods inherited from class org.apache.struts.taglib.tiles.PutTag
    computeRealValue, doEndTag, doStartTag, findEnclosingPutTagParent, getBeanName, getBeanProperty, getBeanScope, getContent, getName, getRealValue, getRealValueFromBean, getRole, getType, getValue, release, releaseInternal, setBeanName, setBeanProperty, setBeanScope, setContent, setContent, setDirect, setName, setObjectValue, setRole, setType, setValue, setValue
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doAfterBody, doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Constructor Detail

    AddTag

    public AddTag()
    default constructor

    Method Detail

    callParent

    protected void callParent()
                       throws javax.servlet.jsp.JspException
    Call parent tag which must implement AttributeContainer.

    Overrides:
    callParent in class PutTag
    Throws:
    javax.servlet.jsp.JspException - If we can't find an appropriate enclosing tag.

    findEnclosingPutListTagParent

    protected AddTagParent findEnclosingPutListTagParent()
                                                  throws javax.servlet.jsp.JspException
    Find parent tag which must implement AttributeContainer.

    Throws:
    javax.servlet.jsp.JspException - If we can't find an appropriate enclosing tag.


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/AddTagParent.html0000644000175000017500000002070310404045172031117 0ustar arnaudarnaud00000000000000 AddTagParent (Apache Struts API Documentation)

    org.apache.struts.taglib.tiles
    Interface AddTagParent

    All Known Implementing Classes:
    PutListTag

    public interface AddTagParent

    Tag classes implementing this interface can contain nested PutTags. This interface defines a method called by the nested tag.


    Method Summary
     void processNestedTag(AddTag nestedTag)
              Process the nested tag.
     

    Method Detail

    processNestedTag

    public void processNestedTag(AddTag nestedTag)
                          throws javax.servlet.jsp.JspException
    Process the nested tag.

    Parameters:
    nestedTag - Nested to process.
    javax.servlet.jsp.JspException


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/AttributeToScopeTag.html0000644000175000017500000004427210404045174032526 0ustar arnaudarnaud00000000000000 AttributeToScopeTag (Apache Struts API Documentation)

    org.apache.struts.taglib.tiles
    Class AttributeToScopeTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.tiles.AttributeToScopeTag
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag

    Deprecated. Is it still in use ?

    public final class AttributeToScopeTag
    extends javax.servlet.jsp.tagext.TagSupport

    Custom tag that puts component's attributes in a scope (request, page, ...).

    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String property
              Deprecated. The property name to be exposed.
    private  int scope
              Deprecated. The scope value.
    private  java.lang.String scopeName
              Deprecated. The scope name.
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    AttributeToScopeTag()
              Deprecated.  
     
    Method Summary
     int doEndTag()
              Deprecated. Clean up after processing this enumeration.
     int doStartTag()
              Deprecated. Expose the requested property from component context.
     java.lang.String getProperty()
              Deprecated. Return the property name.
     void release()
              Deprecated. Release all allocated resources.
     void setProperty(java.lang.String property)
              Deprecated. Set the property name.
     void setScope(java.lang.String scope)
              Deprecated. Set the scope.
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    scopeName

    private java.lang.String scopeName
    Deprecated. 
    The scope name.


    scope

    private int scope
    Deprecated. 
    The scope value.


    property

    private java.lang.String property
    Deprecated. 
    The property name to be exposed.

    Constructor Detail

    AttributeToScopeTag

    public AttributeToScopeTag()
    Deprecated. 
    Method Detail

    getProperty

    public java.lang.String getProperty()
    Deprecated. 
    Return the property name.


    setProperty

    public void setProperty(java.lang.String property)
    Deprecated. 
    Set the property name.

    Parameters:
    property - The property name

    setScope

    public void setScope(java.lang.String scope)
    Deprecated. 
    Set the scope.

    Parameters:
    scope - The new scope

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Deprecated. 
    Expose the requested property from component context.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.TagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Deprecated. 
    Clean up after processing this enumeration.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.TagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    release

    public void release()
    Deprecated. 
    Release all allocated resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class javax.servlet.jsp.tagext.TagSupport


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/ComponentConstants.html0000644000175000017500000002556110404045204032463 0ustar arnaudarnaud00000000000000 ComponentConstants (Apache Struts API Documentation)

    org.apache.struts.taglib.tiles
    Interface ComponentConstants

    All Known Implementing Classes:
    DefinitionsUtil, GetAttributeTag, InitDefinitionsTag, InsertTag, PutListTag, PutTag

    public interface ComponentConstants

    Constants used by Tiles/Components.


    Field Summary
    static java.lang.String COMPONENT_CONTEXT
              Name used to store Tile/Component context.
    static int COMPONENT_SCOPE
               
    static java.lang.String EXCEPTION_KEY
               
    static java.lang.String LOCALE_KEY
               
     

    Field Detail

    COMPONENT_CONTEXT

    public static final java.lang.String COMPONENT_CONTEXT
    Name used to store Tile/Component context.

    See Also:
    Constant Field Values

    COMPONENT_SCOPE

    public static final int COMPONENT_SCOPE
    See Also:
    Constant Field Values

    LOCALE_KEY

    public static final java.lang.String LOCALE_KEY
    See Also:
    Constant Field Values

    EXCEPTION_KEY

    public static final java.lang.String EXCEPTION_KEY
    See Also:
    Constant Field Values


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/DefinitionTag.html0000644000175000017500000007260710404045212031352 0ustar arnaudarnaud00000000000000 DefinitionTag (Apache Struts API Documentation)

    org.apache.struts.taglib.tiles
    Class DefinitionTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.tiles.DefinitionTagSupport
                  |
                  +--org.apache.struts.taglib.tiles.DefinitionTag
    
    All Implemented Interfaces:
    PutListTagParent, PutTagParent, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class DefinitionTag
    extends DefinitionTagSupport
    implements PutTagParent, PutListTagParent

    This is the tag handler for <tiles:definition>, which defines a tiles (or template / component). Definition is put in requested context and can be used in <tiles:insert>.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:34:00 +0100 (Fri, 22 Aug 2003) $
    Author:
    Cedric Dumoulin
    See Also:
    Serialized Form

    Field Summary
    private  ComponentDefinition definition
              Template definition
    private  java.lang.String extendsDefinition
              Extends attribute value.
    private  java.lang.String id
              Definition identifier.
    private  java.lang.String scope
              Scope into which definition will be saved.
     
    Fields inherited from class org.apache.struts.taglib.tiles.DefinitionTagSupport
    controllerName, controllerType, page, role
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    DefinitionTag()
               
     
    Method Summary
     int doEndTag()
              Process the end tag by putting the definition in appropriate context.
     int doStartTag()
              Process the start tag by creating a new definition.
     java.lang.String getExtends()
              Get extends (parent) definition name.
     java.lang.String getId()
              Get the ID.
     java.lang.String getScope()
              Get the scope.
     void processNestedTag(PutListTag nestedTag)
              Process nested ≶putList> tag.
     void processNestedTag(PutTag nestedTag)
              Process nested ≶put> tag.
     void putAttribute(java.lang.String name, java.lang.Object content)
              This method is a convenience for other tags for putting content into the tile definition.
     void release()
              Reset member values for reuse.
    protected  void releaseInternal()
              Release internal references.
     void setExtends(java.lang.String definitionName)
              Set extends (parent) definition name.
     void setId(java.lang.String id)
              Set the ID.
     void setScope(java.lang.String aScope)
              Set the scope.
     
    Methods inherited from class org.apache.struts.taglib.tiles.DefinitionTagSupport
    getControllerName, getControllerType, getPage, getRole, getTemplate, setController, setControllerClass, setControllerName, setControllerType, setControllerUrl, setPage, setRole, setTemplate
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getParent, getValue, getValues, removeValue, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    id

    private java.lang.String id
    Definition identifier.


    scope

    private java.lang.String scope
    Scope into which definition will be saved.


    extendsDefinition

    private java.lang.String extendsDefinition
    Extends attribute value.


    definition

    private ComponentDefinition definition
    Template definition

    Constructor Detail

    DefinitionTag

    public DefinitionTag()
    Method Detail

    release

    public void release()
    Reset member values for reuse. This method calls super.release(), which invokes TagSupport.release(), which typically does nothing.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class DefinitionTagSupport

    releaseInternal

    protected void releaseInternal()
    Release internal references.


    putAttribute

    public void putAttribute(java.lang.String name,
                             java.lang.Object content)
    This method is a convenience for other tags for putting content into the tile definition. Content is already typed by caller.


    processNestedTag

    public void processNestedTag(PutTag nestedTag)
                          throws javax.servlet.jsp.JspException
    Process nested ≶put> tag. Method is called from nested ≶put> tags. Nested list is added to current list. If role is defined, nested attribute is wrapped into an untyped definition containing attribute value and role.

    Specified by:
    processNestedTag in interface PutTagParent
    Parameters:
    nestedTag - Nested tag to process.
    javax.servlet.jsp.JspException

    processNestedTag

    public void processNestedTag(PutListTag nestedTag)
                          throws javax.servlet.jsp.JspException
    Process nested ≶putList> tag. Method is called from nested ≶putList> tags. Nested list is added to current list. If role is defined, nested attribute is wrapped into an untyped definition containing attribute value and role.

    Specified by:
    processNestedTag in interface PutListTagParent
    Parameters:
    nestedTag - Nested PutTag defining the attribute.
    javax.servlet.jsp.JspException

    getId

    public java.lang.String getId()
    Get the ID.

    Overrides:
    getId in class javax.servlet.jsp.tagext.TagSupport
    Returns:
    ID

    setId

    public void setId(java.lang.String id)
    Set the ID.

    Overrides:
    setId in class javax.servlet.jsp.tagext.TagSupport
    Parameters:
    id - New ID.

    getScope

    public java.lang.String getScope()
    Get the scope.

    Returns:
    Scope.

    setScope

    public void setScope(java.lang.String aScope)
    Set the scope.

    Parameters:
    aScope - Scope.

    setExtends

    public void setExtends(java.lang.String definitionName)
    Set extends (parent) definition name.

    Parameters:
    definitionName - Name of parent definition.

    getExtends

    public java.lang.String getExtends()
    Get extends (parent) definition name.

    Returns:
    Name of parent definition.

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Process the start tag by creating a new definition.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.TagSupport
    Throws:
    javax.servlet.jsp.JspException - On errors processing tag.

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Process the end tag by putting the definition in appropriate context.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.TagSupport
    Throws:
    javax.servlet.jsp.JspException - On errors processing tag.


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/DefinitionTagSupport.html0000644000175000017500000006202510404045220032737 0ustar arnaudarnaud00000000000000 DefinitionTagSupport (Apache Struts API Documentation)

    org.apache.struts.taglib.tiles
    Class DefinitionTagSupport

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.tiles.DefinitionTagSupport
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    DefinitionTag, InsertTag

    public class DefinitionTagSupport
    extends javax.servlet.jsp.tagext.TagSupport
    implements java.io.Serializable

    Common base class for tags dealing with Tiles definitions. This class defines properties used in Definition Tags. It also extends TagSupport.

    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String controllerName
              Associated Controller name (classname or url)
    protected  java.lang.String controllerType
              Associated Controller type
    protected  java.lang.String page
              Uri of page assoicated to this definition.
    protected  java.lang.String role
              Role associated to definition.
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    DefinitionTagSupport()
               
     
    Method Summary
     java.lang.String getControllerName()
              Get controller name.
     java.lang.String getControllerType()
              Get controller type.
     java.lang.String getPage()
              Get the page.
     java.lang.String getRole()
              Get associated role.
     java.lang.String getTemplate()
              Get the template.
     void release()
              Release class properties.
     void setController(java.lang.String controller)
              Set associated controller name.
     void setControllerClass(java.lang.String controller)
              Set associated controller name as a classtype and controller type as "classname".
     void setControllerName(java.lang.String controller)
              Set associated controller name.
     void setControllerType(java.lang.String controllerType)
              Set associated controller type.
     void setControllerUrl(java.lang.String controller)
              Set associated controller name as an url, and controller type as "url".
     void setPage(java.lang.String page)
              Set the page.
     void setRole(java.lang.String role)
              Set associated role.
     void setTemplate(java.lang.String template)
              Set the template.
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    doEndTag, doStartTag, findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    controllerType

    protected java.lang.String controllerType
    Associated Controller type


    controllerName

    protected java.lang.String controllerName
    Associated Controller name (classname or url)


    role

    protected java.lang.String role
    Role associated to definition.


    page

    protected java.lang.String page
    Uri of page assoicated to this definition.

    Constructor Detail

    DefinitionTagSupport

    public DefinitionTagSupport()
    Method Detail

    release

    public void release()
    Release class properties.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class javax.servlet.jsp.tagext.TagSupport

    getControllerType

    public java.lang.String getControllerType()
    Get controller type. Type can be 'classname', 'url'.

    Returns:
    Controller type.

    getControllerName

    public java.lang.String getControllerName()
    Get controller name. Name denotes a fully qualified classname, or an url. Exact type can be specified with setControllerType(java.lang.String).

    Returns:
    Controller name.

    setControllerType

    public void setControllerType(java.lang.String controllerType)
    Set associated controller type. Type denotes a fully qualified classname.

    Parameters:
    controllerType - Type of associated controller.

    setController

    public void setController(java.lang.String controller)
    Set associated controller name. Name denotes a fully qualified classname, or an url. Exact type can be specified with setControllerType(java.lang.String).

    Parameters:
    controller - Controller classname or url.

    setControllerName

    public void setControllerName(java.lang.String controller)
    Set associated controller name. Name denote a fully qualified classname, or an url. Exact type can be specified with setControllerType.

    Parameters:
    controller - Controller classname or url

    setControllerUrl

    public void setControllerUrl(java.lang.String controller)
    Set associated controller name as an url, and controller type as "url". Name must be an url (not checked). Convenience method.

    Parameters:
    controller - Controller url

    setControllerClass

    public void setControllerClass(java.lang.String controller)
    Set associated controller name as a classtype and controller type as "classname". Name denotes a fully qualified classname. Convenience method.

    Parameters:
    controller - Controller classname.

    getRole

    public java.lang.String getRole()
    Get associated role.

    Returns:
    Associated role.

    setRole

    public void setRole(java.lang.String role)
    Set associated role.

    Parameters:
    role - Associated role.

    setPage

    public void setPage(java.lang.String page)
    Set the page.

    Parameters:
    page - Page.

    getPage

    public java.lang.String getPage()
    Get the page.

    Returns:
    Page.

    getTemplate

    public java.lang.String getTemplate()
    Get the template. Same as getPage().

    Returns:
    Template.

    setTemplate

    public void setTemplate(java.lang.String template)
    Set the template. Same as setPage().

    Parameters:
    template - Template.


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/GetAttributeTag.html0000644000175000017500000005253410404045242031665 0ustar arnaudarnaud00000000000000 GetAttributeTag (Apache Struts API Documentation)

    org.apache.struts.taglib.tiles
    Class GetAttributeTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.tiles.GetAttributeTag
    
    All Implemented Interfaces:
    ComponentConstants, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class GetAttributeTag
    extends javax.servlet.jsp.tagext.TagSupport
    implements ComponentConstants

    Retrieve the value of the specified component/template attribute property, and render it to the current JspWriter as a String. The usual toString() conversion is applied on the found value.

    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String attribute
               
    private  boolean isErrorIgnored
              Do we ignore error if attribute is not found.
    private  java.lang.String role
              Role attribute
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface org.apache.struts.taglib.tiles.ComponentConstants
    COMPONENT_CONTEXT, COMPONENT_SCOPE, EXCEPTION_KEY, LOCALE_KEY
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    GetAttributeTag()
              Default constructor.
     
    Method Summary
     int doEndTag()
              Close tag.
     java.lang.String getAttribute()
              Get attribute.
     boolean getIgnore()
              Get ignore flag.
     java.lang.String getName()
              Get Name.
     java.lang.String getRole()
              Get role.
     void release()
              Release all allocated resources.
     void setAttribute(java.lang.String attribute)
              Set attribute.
     void setIgnore(boolean ignore)
              Set ignoring flag when attribute is not found.
     void setName(java.lang.String value)
              Set Name.
     void setRole(java.lang.String role)
              Set role.
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    doStartTag, findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    attribute

    private java.lang.String attribute

    role

    private java.lang.String role
    Role attribute


    isErrorIgnored

    private boolean isErrorIgnored
    Do we ignore error if attribute is not found. Default value is false, which will throw an exception.

    Constructor Detail

    GetAttributeTag

    public GetAttributeTag()
    Default constructor.

    Method Detail

    release

    public void release()
    Release all allocated resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class javax.servlet.jsp.tagext.TagSupport

    setAttribute

    public void setAttribute(java.lang.String attribute)
    Set attribute.

    Parameters:
    attribute - Attribute.

    getAttribute

    public java.lang.String getAttribute()
    Get attribute.

    Returns:
    Attribute.

    setName

    public void setName(java.lang.String value)
    Set Name. Same as setAttribute().

    Parameters:
    value - Attribute.

    getName

    public java.lang.String getName()
    Get Name. Set as getAttribute().

    Returns:
    Attribute.

    setIgnore

    public void setIgnore(boolean ignore)
    Set ignoring flag when attribute is not found.

    Parameters:
    ignore - default: false: Exception is thrown when attribute is not found, set to true to ignore missing attributes silently

    getIgnore

    public boolean getIgnore()
    Get ignore flag.

    Returns:
    false: Exception is thrown when attribute is not found, set to true to ignore missing attributes silently

    setRole

    public void setRole(java.lang.String role)
    Set role.

    Parameters:
    role - The role the user must be in to store content.

    getRole

    public java.lang.String getRole()
    Get role.

    Returns:
    Role.

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Close tag.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.TagSupport
    Throws:
    javax.servlet.jsp.JspException - On error processing tag.


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/GetTag.html0000644000175000017500000006202110404045172027773 0ustar arnaudarnaud00000000000000 GetTag (Apache Struts API Documentation)

    org.apache.struts.taglib.tiles
    Class GetTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.tiles.DefinitionTagSupport
                  |
                  +--org.apache.struts.taglib.tiles.InsertTag
                        |
                        +--org.apache.struts.taglib.tiles.GetTag
    
    All Implemented Interfaces:
    ComponentConstants, PutListTagParent, PutTagParent, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class GetTag
    extends InsertTag

    This is the tag handler for <tiles:get>, which gets content from the request scope and either includes the content or prints it, depending upon the value of the content's direct attribute. This tag is intended to be compatible with the same tag from Templates (David Geary). Implementation extends InsertTag for facility (no so well). The only difference is the default value of attribute 'ignore', which is true for this tag (default behavior of David Geary's templates).

    See Also:
    Serialized Form

    Nested Class Summary
     
    Nested classes inherited from class org.apache.struts.taglib.tiles.InsertTag
    InsertTag.DirectStringHandler, InsertTag.InsertHandler, InsertTag.TagHandler
     
    Field Summary
     
    Fields inherited from class org.apache.struts.taglib.tiles.InsertTag
    attribute, beanName, beanProperty, beanScope, cachedCurrentContext, definitionName, flush, isErrorIgnored, log, name, pageContext, processEndTag, ROLE_DELIMITER, tagHandler
     
    Fields inherited from class org.apache.struts.taglib.tiles.DefinitionTagSupport
    controllerName, controllerType, page, role
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id
     
    Fields inherited from interface org.apache.struts.taglib.tiles.ComponentConstants
    COMPONENT_CONTEXT, COMPONENT_SCOPE, EXCEPTION_KEY, LOCALE_KEY
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    GetTag()
              Constructor.
     
    Method Summary
     void release()
              Release all allocated resources.
     
    Methods inherited from class org.apache.struts.taglib.tiles.InsertTag
    createTagHandler, doEndTag, doInclude, doStartTag, getBeanName, getBeanProperty, getBeanScope, getDefinitionName, getFlush, getIgnore, getName, getPageContext, processAsDefinitionOrURL, processAttribute, processBean, processDefinition, processDefinitionName, processName, processNestedTag, processNestedTag, processObjectValue, processTypedAttribute, processUrl, putAttribute, putAttribute, releaseInternal, setAttribute, setBeanName, setBeanProperty, setBeanScope, setComponent, setDefinition, setFlush, setFlush, setIgnore, setInstance, setName, setPageContext, userHasRole
     
    Methods inherited from class org.apache.struts.taglib.tiles.DefinitionTagSupport
    getControllerName, getControllerType, getPage, getRole, getTemplate, setController, setControllerClass, setControllerName, setControllerType, setControllerUrl, setPage, setRole, setTemplate
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    GetTag

    public GetTag()
    Constructor. Set default value for 'isErrorIgnored' to true.

    Method Detail

    release

    public void release()
    Release all allocated resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class InsertTag


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/ImportAttributeTag.html0000644000175000017500000005042310404045240032411 0ustar arnaudarnaud00000000000000 ImportAttributeTag (Apache Struts API Documentation)

    org.apache.struts.taglib.tiles
    Class ImportAttributeTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.tiles.ImportAttributeTag
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public final class ImportAttributeTag
    extends javax.servlet.jsp.tagext.TagSupport

    Import attribute from component to requested scope. Attribute name and scope are optional. If not specified, all component attributes are imported in page scope.

    See Also:
    Serialized Form

    Field Summary
    protected  boolean isErrorIgnored
              Are errors ignored.
    private  java.lang.String name
              Class name of object.
    private  int scope
              The scope value.
    private  java.lang.String scopeName
              The scope name.
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    ImportAttributeTag()
               
     
    Method Summary
     int doEndTag()
              Clean up after processing this enumeration.
     int doStartTag()
              Expose the requested property from component context.
     boolean getIgnore()
              Get ignore flag.
     java.lang.String getName()
              Get the name.
     java.lang.String getScope()
              Get scope.
     void release()
              Release all allocated resources.
     void setIgnore(boolean ignore)
              Set ignore flag.
     void setName(java.lang.String name)
              Set the name.
     void setScope(java.lang.String scope)
              Set the scope.
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    name

    private java.lang.String name
    Class name of object.


    scopeName

    private java.lang.String scopeName
    The scope name.


    scope

    private int scope
    The scope value.


    isErrorIgnored

    protected boolean isErrorIgnored
    Are errors ignored. This is the property for attribute ignore. Default value is false, which throws an exception. Only "attribute not found" - errors are ignored.

    Constructor Detail

    ImportAttributeTag

    public ImportAttributeTag()
    Method Detail

    release

    public void release()
    Release all allocated resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class javax.servlet.jsp.tagext.TagSupport

    getName

    public java.lang.String getName()
    Get the name.

    Returns:
    Name.

    setName

    public void setName(java.lang.String name)
    Set the name.

    Parameters:
    name - The new name

    setScope

    public void setScope(java.lang.String scope)
    Set the scope.

    Parameters:
    scope - Scope.

    getScope

    public java.lang.String getScope()
    Get scope.

    Returns:
    Scope.

    setIgnore

    public void setIgnore(boolean ignore)
    Set ignore flag.

    Parameters:
    ignore - default: false: Exception is thrown when attribute is not found, set to true to ignore missing attributes silently

    getIgnore

    public boolean getIgnore()
    Get ignore flag.

    Returns:
    default: false: Exception is thrown when attribute is not found, set to true to ignore missing attributes silently

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Expose the requested property from component context.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.TagSupport
    Throws:
    javax.servlet.jsp.JspException - On errors processing tag.

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Clean up after processing this enumeration.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.TagSupport
    Throws:
    javax.servlet.jsp.JspException - On errors processing tag.


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/InitDefinitionsTag.html0000644000175000017500000004222410404045246032360 0ustar arnaudarnaud00000000000000 InitDefinitionsTag (Apache Struts API Documentation)

    org.apache.struts.taglib.tiles
    Class InitDefinitionsTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.tiles.InitDefinitionsTag
    
    All Implemented Interfaces:
    ComponentConstants, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class InitDefinitionsTag
    extends javax.servlet.jsp.tagext.TagSupport
    implements ComponentConstants

    Init definitions factory.

    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String classname
               
    private  java.lang.String filename
               
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface org.apache.struts.taglib.tiles.ComponentConstants
    COMPONENT_CONTEXT, COMPONENT_SCOPE, EXCEPTION_KEY, LOCALE_KEY
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    InitDefinitionsTag()
              Default constructor.
     
    Method Summary
     int doEndTag()
              Do end tag.
     int doStartTag()
              Do start tag.
     void release()
              Release all allocated resources.
     void setClassname(java.lang.String classname)
              Set classname.
     void setFile(java.lang.String name)
              Set file.
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    filename

    private java.lang.String filename

    classname

    private java.lang.String classname
    Constructor Detail

    InitDefinitionsTag

    public InitDefinitionsTag()
    Default constructor.

    Method Detail

    release

    public void release()
    Release all allocated resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class javax.servlet.jsp.tagext.TagSupport

    setFile

    public void setFile(java.lang.String name)
    Set file.


    setClassname

    public void setClassname(java.lang.String classname)
    Set classname.


    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Do start tag.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.TagSupport
    javax.servlet.jsp.JspException

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Do end tag.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.TagSupport
    javax.servlet.jsp.JspException


    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015110423140533011314 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/InsertTag.DirectStringHandler.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/InsertTag.DirectStringHandler.0000644000175000017500000003374210404045212033534 0ustar arnaudarnaud00000000000000 InsertTag.DirectStringHandler (Apache Struts API Documentation)

    org.apache.struts.taglib.tiles
    Class InsertTag.DirectStringHandler

    java.lang.Object
      |
      +--org.apache.struts.taglib.tiles.InsertTag.DirectStringHandler
    
    All Implemented Interfaces:
    InsertTag.TagHandler
    Enclosing class:
    InsertTag

    protected class InsertTag.DirectStringHandler
    extends java.lang.Object
    implements InsertTag.TagHandler

    Handle insert direct string.


    Field Summary
    private  java.lang.Object value
              Object to print as a direct string
     
    Constructor Summary
    InsertTag.DirectStringHandler(java.lang.Object value)
              Constructor.
     
    Method Summary
     int doEndTag()
              Print String in page output stream.
     int doStartTag()
              Do nothing, there is no context for a direct string.
     void putAttribute(java.lang.String name, java.lang.Object value)
              Add attribute to sub context.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    value

    private java.lang.Object value
    Object to print as a direct string

    Constructor Detail

    InsertTag.DirectStringHandler

    public InsertTag.DirectStringHandler(java.lang.Object value)
    Constructor.

    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Do nothing, there is no context for a direct string.

    Specified by:
    doStartTag in interface InsertTag.TagHandler
    javax.servlet.jsp.JspException

    putAttribute

    public void putAttribute(java.lang.String name,
                             java.lang.Object value)
    Add attribute to sub context. Do nothing.

    Specified by:
    putAttribute in interface InsertTag.TagHandler

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Print String in page output stream.

    Specified by:
    doEndTag in interface InsertTag.TagHandler
    javax.servlet.jsp.JspException


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/InsertTag.InsertHandler.html0000644000175000017500000004634410404045250033270 0ustar arnaudarnaud00000000000000 InsertTag.InsertHandler (Apache Struts API Documentation)

    org.apache.struts.taglib.tiles
    Class InsertTag.InsertHandler

    java.lang.Object
      |
      +--org.apache.struts.taglib.tiles.InsertTag.InsertHandler
    
    All Implemented Interfaces:
    InsertTag.TagHandler
    Enclosing class:
    InsertTag

    protected class InsertTag.InsertHandler
    extends java.lang.Object
    implements InsertTag.TagHandler

    Real handler, after attribute resolution. Handle include sub-component.


    Field Summary
    protected  Controller controller
               
    protected  ComponentContext currentContext
               
    protected  java.lang.String page
               
    protected  java.lang.String role
               
    protected  ComponentContext subCompContext
               
     
    Constructor Summary
    InsertTag.InsertHandler(java.util.Map attributes, java.lang.String page, java.lang.String role, Controller controller)
              Constructor.
    InsertTag.InsertHandler(java.lang.String page, java.lang.String role, Controller controller)
              Constructor.
     
    Method Summary
     int doEndTag()
              Include requested page.
     int doStartTag()
              Create a new empty context.
    protected  void processException(java.lang.Throwable ex, java.lang.String msg)
              Process an exception.
     void putAttribute(java.lang.String name, java.lang.Object value)
              Add attribute to sub context.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    page

    protected java.lang.String page

    currentContext

    protected ComponentContext currentContext

    subCompContext

    protected ComponentContext subCompContext

    role

    protected java.lang.String role

    controller

    protected Controller controller
    Constructor Detail

    InsertTag.InsertHandler

    public InsertTag.InsertHandler(java.util.Map attributes,
                                   java.lang.String page,
                                   java.lang.String role,
                                   Controller controller)
    Constructor. Create insert handler using Component definition.


    InsertTag.InsertHandler

    public InsertTag.InsertHandler(java.lang.String page,
                                   java.lang.String role,
                                   Controller controller)
    Constructor. Create insert handler to insert page at specified location.

    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Create a new empty context.

    Specified by:
    doStartTag in interface InsertTag.TagHandler
    javax.servlet.jsp.JspException

    putAttribute

    public void putAttribute(java.lang.String name,
                             java.lang.Object value)
    Add attribute to sub context. Do nothing.

    Specified by:
    putAttribute in interface InsertTag.TagHandler

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Include requested page.

    Specified by:
    doEndTag in interface InsertTag.TagHandler
    javax.servlet.jsp.JspException

    processException

    protected void processException(java.lang.Throwable ex,
                                    java.lang.String msg)
                             throws javax.servlet.jsp.JspException
    Process an exception. Depending of debug attribute, print full exception trace or only its message in output page.

    Parameters:
    ex - Exception
    msg - An additional message to show in console and to propagate if we can't output exception.
    javax.servlet.jsp.JspException


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/InsertTag.TagHandler.html0000644000175000017500000002423210404045210032523 0ustar arnaudarnaud00000000000000 InsertTag.TagHandler (Apache Struts API Documentation)

    org.apache.struts.taglib.tiles
    Interface InsertTag.TagHandler

    All Known Implementing Classes:
    InsertTag.DirectStringHandler, InsertTag.InsertHandler
    Enclosing interface:
    InsertTag

    protected static interface InsertTag.TagHandler

    Inner Interface. Sub handler for tag.


    Method Summary
     int doEndTag()
              Do include for type depicted by implementation class.
     int doStartTag()
              Create ComponentContext for type depicted by implementation class.
     void putAttribute(java.lang.String name, java.lang.Object value)
              Add a component parameter (attribute) to subContext.
     

    Method Detail

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Create ComponentContext for type depicted by implementation class.

    javax.servlet.jsp.JspException

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Do include for type depicted by implementation class.

    javax.servlet.jsp.JspException

    putAttribute

    public void putAttribute(java.lang.String name,
                             java.lang.Object value)
    Add a component parameter (attribute) to subContext.



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/InsertTag.html0000644000175000017500000020370610404045212030522 0ustar arnaudarnaud00000000000000 InsertTag (Apache Struts API Documentation)

    org.apache.struts.taglib.tiles
    Class InsertTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.tiles.DefinitionTagSupport
                  |
                  +--org.apache.struts.taglib.tiles.InsertTag
    
    All Implemented Interfaces:
    ComponentConstants, PutListTagParent, PutTagParent, java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    GetTag

    public class InsertTag
    extends DefinitionTagSupport
    implements PutTagParent, ComponentConstants, PutListTagParent

    This is the tag handler for <tiles:insert>, which includes a template. The tag's body content consists of <tiles:put> tags, which are accessed by <tiles:get> in the template.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:34:00 +0100 (Fri, 22 Aug 2003) $
    Author:
    David Geary, Cedric Dumoulin
    See Also:
    Serialized Form

    Nested Class Summary
    protected  class InsertTag.DirectStringHandler
              Handle insert direct string.
    protected  class InsertTag.InsertHandler
              Real handler, after attribute resolution.
    protected static interface InsertTag.TagHandler
              Inner Interface.
     
    Field Summary
    protected  java.lang.String attribute
              Name of attribute from which to read page name to include
    protected  java.lang.String beanName
              Name of bean used as entity to include
    protected  java.lang.String beanProperty
              Name of bean property, if any
    protected  java.lang.String beanScope
              Scope of bean, if any
    protected  ComponentContext cachedCurrentContext
              Current component context
    protected  java.lang.String definitionName
              Name of component instance to include
    protected  boolean flush
              Flush attribute value
    protected  boolean isErrorIgnored
              Are errors ignored.
    protected static org.apache.commons.logging.Log log
              Commons Logging instance.
    protected  java.lang.String name
              Name to insert
    protected  javax.servlet.jsp.PageContext pageContext
              Trick to allows inner classes to access pageContext
    protected  boolean processEndTag
              Does the end tag need to be processed.
    static java.lang.String ROLE_DELIMITER
              The role delimiter.
    protected  InsertTag.TagHandler tagHandler
              Finale handler of tag methods
     
    Fields inherited from class org.apache.struts.taglib.tiles.DefinitionTagSupport
    controllerName, controllerType, page, role
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id
     
    Fields inherited from interface org.apache.struts.taglib.tiles.ComponentConstants
    COMPONENT_CONTEXT, COMPONENT_SCOPE, EXCEPTION_KEY, LOCALE_KEY
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    InsertTag()
               
     
    Method Summary
     InsertTag.TagHandler createTagHandler()
              Process tag attribute and create corresponding tag handler.
     int doEndTag()
              Process the end tag by including the template.
    protected  void doInclude(java.lang.String page)
              Do an include of specified page.
     int doStartTag()
              Process the start tag by checking tag's attributes and creating appropriate handler.
     java.lang.String getBeanName()
              Get bean name.
     java.lang.String getBeanProperty()
              Get bean property.
     java.lang.String getBeanScope()
              Get bean scope.
    private  Controller getController()
              Get instantiated Controller.
    private  ComponentContext getCurrentContext()
              Get current component context.
     java.lang.String getDefinitionName()
              Get definition name.
     boolean getFlush()
              Get flush.
     boolean getIgnore()
              Get ignore.
     java.lang.String getName()
              Get name.
     javax.servlet.jsp.PageContext getPageContext()
              Get the pageContext property.
     InsertTag.TagHandler processAsDefinitionOrURL(java.lang.String name)
              Try to process name as a definition, or as an URL if not found.
     InsertTag.TagHandler processAttribute(java.lang.String name)
              Process tag attribute "attribute".
    protected  InsertTag.TagHandler processBean(java.lang.String beanName, java.lang.String beanProperty, java.lang.String beanScope)
              Process a bean.
    protected  InsertTag.TagHandler processDefinition(ComponentDefinition definition)
              End of Process tag attribute "definition".
    protected  InsertTag.TagHandler processDefinitionName(java.lang.String name)
              Process tag attribute "definition".
     InsertTag.TagHandler processName(java.lang.String name)
              Process name.
     void processNestedTag(PutListTag nestedTag)
              Process nested ≶putList> tag.
     void processNestedTag(PutTag nestedTag)
              Process nested ≶put> tag.
     InsertTag.TagHandler processObjectValue(java.lang.Object value)
              Process an object retrieved as a bean or attribute.
     InsertTag.TagHandler processTypedAttribute(AttributeDefinition value)
              Process typed attribute according to its type.
     InsertTag.TagHandler processUrl(java.lang.String url)
              Process the url.
     void putAttribute(PutListTag nestedTag)
              Method calls by nested ≶putList> tags.
     void putAttribute(java.lang.String name, java.lang.Object value)
              Add a body attribute.
     void release()
              Reset member values for reuse.
    protected  void releaseInternal()
              Reset internal member values for reuse.
     void setAttribute(java.lang.String value)
              Set attribute.
     void setBeanName(java.lang.String value)
              Set bean name.
     void setBeanProperty(java.lang.String value)
              Set bean property.
     void setBeanScope(java.lang.String value)
              Set bean scope.
     void setComponent(java.lang.String name)
              Set component.
     void setDefinition(java.lang.String name)
              Set definition.
     void setFlush(boolean flush)
              Set flush.
     void setFlush(java.lang.String flush)
              Set flush.
     void setIgnore(boolean ignore)
              Set ignore.
     void setInstance(java.lang.String name)
              Deprecated. Use setDefinition() instead.
     void setName(java.lang.String value)
              Set name.
     void setPageContext(javax.servlet.jsp.PageContext pc)
              Set the current page context.
    static boolean userHasRole(javax.servlet.http.HttpServletRequest request, java.lang.String role)
              Parse the list of roles and return true or false based on whether the user has that role or not.
     
    Methods inherited from class org.apache.struts.taglib.tiles.DefinitionTagSupport
    getControllerName, getControllerType, getPage, getRole, getTemplate, setController, setControllerClass, setControllerName, setControllerType, setControllerUrl, setPage, setRole, setTemplate
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    log

    protected static org.apache.commons.logging.Log log
    Commons Logging instance.


    flush

    protected boolean flush
    Flush attribute value


    name

    protected java.lang.String name
    Name to insert


    attribute

    protected java.lang.String attribute
    Name of attribute from which to read page name to include


    beanName

    protected java.lang.String beanName
    Name of bean used as entity to include


    beanProperty

    protected java.lang.String beanProperty
    Name of bean property, if any


    beanScope

    protected java.lang.String beanScope
    Scope of bean, if any


    isErrorIgnored

    protected boolean isErrorIgnored
    Are errors ignored. This is the property for attribute 'ignore'. Default value is false, which throw an exception. Only 'attribute not found' errors are ignored.


    definitionName

    protected java.lang.String definitionName
    Name of component instance to include


    processEndTag

    protected boolean processEndTag
    Does the end tag need to be processed. Default value is true. Boolean set in case of ignored errors.


    cachedCurrentContext

    protected ComponentContext cachedCurrentContext
    Current component context


    tagHandler

    protected InsertTag.TagHandler tagHandler
    Finale handler of tag methods


    pageContext

    protected javax.servlet.jsp.PageContext pageContext
    Trick to allows inner classes to access pageContext


    ROLE_DELIMITER

    public static final java.lang.String ROLE_DELIMITER
    The role delimiter.

    See Also:
    Constant Field Values
    Constructor Detail

    InsertTag

    public InsertTag()
    Method Detail

    release

    public void release()
    Reset member values for reuse. This method calls super.release(), which invokes TagSupport.release(), which typically does nothing.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class DefinitionTagSupport

    releaseInternal

    protected void releaseInternal()
    Reset internal member values for reuse.


    setPageContext

    public void setPageContext(javax.servlet.jsp.PageContext pc)
    Set the current page context. Called by the page implementation prior to doStartTag().

    Needed to allow inner classes to access pageContext.

    Specified by:
    setPageContext in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    setPageContext in class javax.servlet.jsp.tagext.TagSupport

    getPageContext

    public javax.servlet.jsp.PageContext getPageContext()
    Get the pageContext property.


    setName

    public void setName(java.lang.String value)
    Set name.


    getName

    public java.lang.String getName()
    Get name.


    setComponent

    public void setComponent(java.lang.String name)
    Set component.


    setInstance

    public void setInstance(java.lang.String name)
    Deprecated. Use setDefinition() instead.

    Set instance.


    setDefinition

    public void setDefinition(java.lang.String name)
    Set definition.


    getDefinitionName

    public java.lang.String getDefinitionName()
    Get definition name.


    setAttribute

    public void setAttribute(java.lang.String value)
    Set attribute.


    setBeanName

    public void setBeanName(java.lang.String value)
    Set bean name.


    getBeanName

    public java.lang.String getBeanName()
    Get bean name.


    setBeanProperty

    public void setBeanProperty(java.lang.String value)
    Set bean property.


    getBeanProperty

    public java.lang.String getBeanProperty()
    Get bean property.


    setBeanScope

    public void setBeanScope(java.lang.String value)
    Set bean scope.


    getBeanScope

    public java.lang.String getBeanScope()
    Get bean scope.


    setFlush

    public void setFlush(boolean flush)
    Set flush.


    getFlush

    public boolean getFlush()
    Get flush.


    setFlush

    public void setFlush(java.lang.String flush)
    Set flush. Method added for compatibility with JSP1.1


    setIgnore

    public void setIgnore(boolean ignore)
    Set ignore.


    getIgnore

    public boolean getIgnore()
    Get ignore.


    putAttribute

    public void putAttribute(java.lang.String name,
                             java.lang.Object value)
    Add a body attribute. Erase any attribute with same name previously set.


    processNestedTag

    public void processNestedTag(PutTag nestedTag)
                          throws javax.servlet.jsp.JspException
    Process nested ≶put> tag. Method calls by nested ≶put> tags. Nested list is added to current list. If role is defined, it is checked immediately.

    Specified by:
    processNestedTag in interface PutTagParent
    Parameters:
    nestedTag - Nested tag to process.
    javax.servlet.jsp.JspException

    processNestedTag

    public void processNestedTag(PutListTag nestedTag)
                          throws javax.servlet.jsp.JspException
    Process nested ≶putList> tag. Method calls by nested ≶putList> tags. Nested list is added to sub-component attributes If role is defined, it is checked immediately.

    Specified by:
    processNestedTag in interface PutListTagParent
    Parameters:
    nestedTag - Nested PutTag defining the attribute.
    javax.servlet.jsp.JspException

    putAttribute

    public void putAttribute(PutListTag nestedTag)
                      throws javax.servlet.jsp.JspException
    Method calls by nested ≶putList> tags. A new list is added to current insert object.

    javax.servlet.jsp.JspException

    getCurrentContext

    private ComponentContext getCurrentContext()
    Get current component context.


    getController

    private Controller getController()
                              throws javax.servlet.jsp.JspException
    Get instantiated Controller. Return controller denoted by controllerType, or null if controllerType is null.

    Throws:
    javax.servlet.jsp.JspException - If controller can't be created.

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Process the start tag by checking tag's attributes and creating appropriate handler. Possible handlers :
    • URL
    • definition
    • direct String
    Handlers also contain sub-component context.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.TagSupport
    javax.servlet.jsp.JspException

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Process the end tag by including the template. Simply call the handler doEndTag

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.TagSupport
    javax.servlet.jsp.JspException

    createTagHandler

    public InsertTag.TagHandler createTagHandler()
                                          throws javax.servlet.jsp.JspException
    Process tag attribute and create corresponding tag handler.

    javax.servlet.jsp.JspException

    processObjectValue

    public InsertTag.TagHandler processObjectValue(java.lang.Object value)
                                            throws javax.servlet.jsp.JspException
    Process an object retrieved as a bean or attribute. Object can be a typed attribute, a String, or anything else. If typed attribute, use associated type. Otherwise, apply toString() on object, and use returned string as a name.

    Throws:
    javax.servlet.jsp.JspException - - Throws by underlying nested call to processDefinitionName()

    processName

    public InsertTag.TagHandler processName(java.lang.String name)
                                     throws javax.servlet.jsp.JspException
    Process name. Search in following order :
    • Component context - if found, process it as value.
    • definitions factory
    • URL

    Returns:
    appropriate tag handler.
    Throws:
    javax.servlet.jsp.JspException - - Throws by underlying nested call to processDefinitionName()

    processUrl

    public InsertTag.TagHandler processUrl(java.lang.String url)
                                    throws javax.servlet.jsp.JspException
    Process the url.

    Throws:
    javax.servlet.jsp.JspException - If failed to create controller

    processDefinitionName

    protected InsertTag.TagHandler processDefinitionName(java.lang.String name)
                                                  throws javax.servlet.jsp.JspException
    Process tag attribute "definition". First, search definition in the factory, then create handler from this definition.

    Parameters:
    name - Name of the definition.
    Returns:
    Appropriate TagHandler.
    Throws:
    JspException- - NoSuchDefinitionException No Definition found for name.
    JspException- - FactoryNotFoundException Can't find Definitions factory.
    JspException- - DefinedComponentFactoryException General error in factory.
    javax.servlet.jsp.JspException - InstantiationException Can't create requested controller

    processDefinition

    protected InsertTag.TagHandler processDefinition(ComponentDefinition definition)
                                              throws javax.servlet.jsp.JspException
    End of Process tag attribute "definition". Overload definition with tag attributes "template" and "role". Then, create appropriate tag handler.

    Parameters:
    definition - Definition to process.
    Returns:
    Appropriate TagHandler.
    Throws:
    javax.servlet.jsp.JspException - InstantiationException Can't create requested controller

    processBean

    protected InsertTag.TagHandler processBean(java.lang.String beanName,
                                               java.lang.String beanProperty,
                                               java.lang.String beanScope)
                                        throws javax.servlet.jsp.JspException
    Process a bean. Get bean value, eventually using property and scope. Found value is process by processObjectValue().

    Parameters:
    beanName - Name of the bean
    beanProperty - Property in the bean, or null.
    beanScope - bean scope, or null.
    Returns:
    Appropriate TagHandler.
    Throws:
    javax.servlet.jsp.JspException - - NoSuchDefinitionException No value associated to bean.
    javax.servlet.jsp.JspException - an error occur while reading bean, or no definition found.
    javax.servlet.jsp.JspException - - Throws by underlying nested call to processDefinitionName()

    processAttribute

    public InsertTag.TagHandler processAttribute(java.lang.String name)
                                          throws javax.servlet.jsp.JspException
    Process tag attribute "attribute". Get value from component attribute. Found value is process by processObjectValue().

    Parameters:
    name - Name of the attribute.
    Returns:
    Appropriate TagHandler.
    Throws:
    javax.servlet.jsp.JspException - - NoSuchDefinitionException No Definition found for name.
    javax.servlet.jsp.JspException - - Throws by underlying nested call to processDefinitionName()

    processAsDefinitionOrURL

    public InsertTag.TagHandler processAsDefinitionOrURL(java.lang.String name)
                                                  throws javax.servlet.jsp.JspException
    Try to process name as a definition, or as an URL if not found.

    Parameters:
    name - Name to process.
    Returns:
    appropriate TagHandler
    Throws:
    javax.servlet.jsp.JspException - InstantiationException Can't create requested controller

    processTypedAttribute

    public InsertTag.TagHandler processTypedAttribute(AttributeDefinition value)
                                               throws javax.servlet.jsp.JspException
    Process typed attribute according to its type.

    Parameters:
    value - Typed attribute to process.
    Returns:
    appropriate TagHandler.
    Throws:
    javax.servlet.jsp.JspException - - Throws by underlying nested call to processDefinitionName()

    doInclude

    protected void doInclude(java.lang.String page)
                      throws javax.servlet.ServletException,
                             java.io.IOException
    Do an include of specified page. This method is used internally to do all includes from this class. It delegates the include call to the TilesUtil.doInclude().

    Parameters:
    page - The page that will be included
    Throws:
    javax.servlet.ServletException - - Thrown by call to pageContext.include()
    java.io.IOException - - Thrown by call to pageContext.include()

    userHasRole

    public static boolean userHasRole(javax.servlet.http.HttpServletRequest request,
                                      java.lang.String role)
    Parse the list of roles and return true or false based on whether the user has that role or not.

    Parameters:
    role - Comma-delimited list of roles.
    request - The request.


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/PutListTag.html0000644000175000017500000006220710404045204030662 0ustar arnaudarnaud00000000000000 PutListTag (Apache Struts API Documentation)

    org.apache.struts.taglib.tiles
    Class PutListTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.tiles.PutListTag
    
    All Implemented Interfaces:
    AddTagParent, ComponentConstants, PutListTagParent, java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public class PutListTag
    extends javax.servlet.jsp.tagext.TagSupport
    implements ComponentConstants, AddTagParent, PutListTagParent

    PutList tag implementation.

    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String attributeName
              Name of this attribute.
    private  java.util.List list
              The list itself.
    private  java.lang.String role
              Role attribute.
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface org.apache.struts.taglib.tiles.ComponentConstants
    COMPONENT_CONTEXT, COMPONENT_SCOPE, EXCEPTION_KEY, LOCALE_KEY
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    PutListTag()
              Default constructor.
     
    Method Summary
     void addElement(java.lang.Object value)
              Set property.
     int doEndTag()
              Do end tag.
     int doStartTag()
              Do start tag.
    protected  PutListTagParent findEnclosingParent()
              Find enclosing parent tag accepting this tag.
     java.util.List getList()
              Get list defined in tag.
     java.lang.String getName()
              Get property.
     java.lang.String getRole()
              Get role attribute.
     void processNestedTag(AddTag nestedTag)
              Process nested ≶add> tag.
     void processNestedTag(PutListTag nestedTag)
              Process nested ≶putList> tag.
     void release()
              Release all allocated resources.
    protected  void releaseInternal()
              Release all internal resources.
     void setName(java.lang.String name)
              Set property.
     void setRole(java.lang.String role)
              Set role attribute.
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    attributeName

    private java.lang.String attributeName
    Name of this attribute.


    list

    private java.util.List list
    The list itself.


    role

    private java.lang.String role
    Role attribute.

    Constructor Detail

    PutListTag

    public PutListTag()
    Default constructor.

    Method Detail

    release

    public void release()
    Release all allocated resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class javax.servlet.jsp.tagext.TagSupport

    releaseInternal

    protected void releaseInternal()
    Release all internal resources.


    setName

    public void setName(java.lang.String name)
    Set property.


    getName

    public java.lang.String getName()
    Get property.


    setRole

    public void setRole(java.lang.String role)
    Set role attribute.

    Parameters:
    role - The role the user must be in to store content.

    getRole

    public java.lang.String getRole()
    Get role attribute.


    getList

    public java.util.List getList()
    Get list defined in tag.


    addElement

    public void addElement(java.lang.Object value)
    Set property.


    processNestedTag

    public void processNestedTag(PutListTag nestedTag)
                          throws javax.servlet.jsp.JspException
    Process nested ≶putList> tag. Method calls by nested ≶putList> tags. Nested list is added to current list. If role is defined, nested attribute is wrapped into an untypped definition containing attribute value and role.

    Specified by:
    processNestedTag in interface PutListTagParent
    Parameters:
    nestedTag - Nested PutTag defining the attribute.
    javax.servlet.jsp.JspException

    processNestedTag

    public void processNestedTag(AddTag nestedTag)
                          throws javax.servlet.jsp.JspException
    Process nested ≶add> tag. Method calls by nested ≶add> tags. Nested attribute is added to current list. If role is defined, nested attribute is wrapped into an untypped definition containing attribute value and role.

    Specified by:
    processNestedTag in interface AddTagParent
    Parameters:
    nestedTag - Nested to process.
    javax.servlet.jsp.JspException

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Do start tag.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.TagSupport
    javax.servlet.jsp.JspException

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Do end tag.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.TagSupport
    javax.servlet.jsp.JspException

    findEnclosingParent

    protected PutListTagParent findEnclosingParent()
                                            throws javax.servlet.jsp.JspException
    Find enclosing parent tag accepting this tag.

    Throws:
    javax.servlet.jsp.JspException - If we can't find an appropriate enclosing tag.


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/PutListTagParent.html0000644000175000017500000002157210404045214032035 0ustar arnaudarnaud00000000000000 PutListTagParent (Apache Struts API Documentation)

    org.apache.struts.taglib.tiles
    Interface PutListTagParent

    All Known Implementing Classes:
    DefinitionTag, InsertTag, PutListTag

    public interface PutListTagParent

    Tag classes implementing this interface can contains nested PutTag. This interface defines a method called by nested tags.


    Method Summary
     void processNestedTag(PutListTag nestedTag)
              Add an attribute to container.
     

    Method Detail

    processNestedTag

    public void processNestedTag(PutListTag nestedTag)
                          throws javax.servlet.jsp.JspException
    Add an attribute to container.

    Parameters:
    nestedTag - Nested PutTag defining the attribute.
    javax.servlet.jsp.JspException


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/PutTag.html0000644000175000017500000012123010404045230030015 0ustar arnaudarnaud00000000000000 PutTag (Apache Struts API Documentation)

    org.apache.struts.taglib.tiles
    Class PutTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--javax.servlet.jsp.tagext.BodyTagSupport
                  |
                  +--org.apache.struts.taglib.tiles.PutTag
    
    All Implemented Interfaces:
    javax.servlet.jsp.tagext.BodyTag, ComponentConstants, java.io.Serializable, javax.servlet.jsp.tagext.Tag
    Direct Known Subclasses:
    AddTag

    public class PutTag
    extends javax.servlet.jsp.tagext.BodyTagSupport
    implements ComponentConstants

    Put an attribute in enclosing attribute container tag. Enclosing attribute container tag can be : <insert> or <definition>. Exception is thrown if no appropriate tag can be found. Put tag can have following atributes :

    • name : Name of the attribute
      value | content : value to put as attribute
      type : value type. Only valid if value is a String and is set by value="something" or by a bean. Possible type are : string (value is used as direct string), page | template (value is used as a page url to insert), definition (value is used as a definition name to insert)
      direct : Specify if value is to be used as a direct string or as a page url to insert. This is another way to specify the type. It only apply if value is set as a string, and type is not present.
      beanName : Name of a bean used for setting value. Only valid if value is not set. If property is specified, value come from bean's property. Otherwise, bean itself is used for value.
      beanProperty : Name of the property used for retrieving value.
      beanScope : Scope containing bean.
      role : Role to check when 'insert' will be called. If enclosing tag is <insert>, role is checked immediately. If enclosing tag is <definition>, role will be checked when this definition will be inserted.
  • Value can also come from tag body. Tag body is taken into account only if value is not set by one of the tag attributes. In this case Attribute type is "string", unless tag body define another type.

    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String attributeName
              Name of attribute to put in component context
    private  java.lang.String beanName
              Bean name attribute
    private  java.lang.String beanProperty
              Bean property attribute
    private  java.lang.String beanScope
              Bean scope attribute
    private  java.lang.String direct
              JSP Template compatibility
    protected  java.lang.Object realValue
              cached real value computed from tag attributes
    private  java.lang.String role
              Role attribute
    private  java.lang.Object value
              associated attribute value
    private  java.lang.String valueType
              Requested type for the value
     
    Fields inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    bodyContent
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface org.apache.struts.taglib.tiles.ComponentConstants
    COMPONENT_CONTEXT, COMPONENT_SCOPE, EXCEPTION_KEY, LOCALE_KEY
     
    Fields inherited from interface javax.servlet.jsp.tagext.BodyTag
    EVAL_BODY_TAG
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    PutTag()
              Default constructor.
     
    Method Summary
    protected  void callParent()
              Find parent tag which must implement AttributeContainer.
    protected  void computeRealValue()
              Compute real value according to tag attributes.
     int doEndTag()
              Do end tag.
     int doStartTag()
              Do start tag.
    protected  PutTagParent findEnclosingPutTagParent()
              Find parent tag which must implement AttributeContainer.
     java.lang.String getBeanName()
              Get bean name.
     java.lang.String getBeanProperty()
              Get bean property.
     java.lang.String getBeanScope()
              Get bean scope.
     java.lang.String getContent()
              Get content.
     java.lang.String getName()
              Get name.
     java.lang.Object getRealValue()
              Get real value according to tag attribute.
    protected  void getRealValueFromBean()
              Extract real value from specified bean.
     java.lang.String getRole()
              Get role attribute
     java.lang.String getType()
              Get type.
     java.lang.String getValue()
              Get value.
     void release()
              Release all allocated resources.
    protected  void releaseInternal()
              Release internal properties.
     void setBeanName(java.lang.String value)
              Set bean name.
     void setBeanProperty(java.lang.String value)
              Set bean property.
     void setBeanScope(java.lang.String value)
              Set bean scope.
     void setContent(java.lang.Object value)
              Set content.
     void setContent(java.lang.String value)
              Set content.
     void setDirect(java.lang.String isDirect)
              Set direct.
     void setName(java.lang.String value)
              Set name.
     void setObjectValue(java.lang.Object value)
              Set property value as an object.
     void setRole(java.lang.String role)
              Set role attribute.
     void setType(java.lang.String value)
              Set type.
     void setValue(java.lang.Object value)
              Set value.
     void setValue(java.lang.String value)
              Set value.
     
    Methods inherited from class javax.servlet.jsp.tagext.BodyTagSupport
    doAfterBody, doInitBody, getBodyContent, getPreviousOut, setBodyContent
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     
    Methods inherited from interface javax.servlet.jsp.tagext.Tag
    getParent, setPageContext, setParent
     

    Field Detail

    attributeName

    protected java.lang.String attributeName
    Name of attribute to put in component context


    value

    private java.lang.Object value
    associated attribute value


    direct

    private java.lang.String direct
    JSP Template compatibility


    valueType

    private java.lang.String valueType
    Requested type for the value


    beanName

    private java.lang.String beanName
    Bean name attribute


    beanProperty

    private java.lang.String beanProperty
    Bean property attribute


    beanScope

    private java.lang.String beanScope
    Bean scope attribute


    role

    private java.lang.String role
    Role attribute


    realValue

    protected java.lang.Object realValue
    cached real value computed from tag attributes

    Constructor Detail

    PutTag

    public PutTag()
    Default constructor.

    Method Detail

    release

    public void release()
    Release all allocated resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class javax.servlet.jsp.tagext.BodyTagSupport

    releaseInternal

    protected void releaseInternal()
    Release internal properties.


    setName

    public void setName(java.lang.String value)
    Set name.


    getName

    public java.lang.String getName()
    Get name.


    setValue

    public void setValue(java.lang.String value)
    Set value. Method added to satisfy Tomcat (bug ?).


    getValue

    public java.lang.String getValue()
    Get value. Method added to satisfy Tomcat (bug ?).


    setValue

    public void setValue(java.lang.Object value)
    Set value.


    setObjectValue

    public void setObjectValue(java.lang.Object value)
    Set property value as an object. Added because some web containers react badly to value as Object.


    setContent

    public void setContent(java.lang.String value)
    Set content. Method added to satisfy Tomcat (bug ?).


    getContent

    public java.lang.String getContent()
    Get content. Method added to satisfy Tomcat (bug ?).


    setContent

    public void setContent(java.lang.Object value)
    Set content.


    setDirect

    public void setDirect(java.lang.String isDirect)
    Set direct. Method added for compatibility with JSP1.1.


    setType

    public void setType(java.lang.String value)
    Set type.


    getType

    public java.lang.String getType()
    Get type.


    setBeanName

    public void setBeanName(java.lang.String value)
    Set bean name.


    getBeanName

    public java.lang.String getBeanName()
    Get bean name.


    setBeanProperty

    public void setBeanProperty(java.lang.String value)
    Set bean property.


    getBeanProperty

    public java.lang.String getBeanProperty()
    Get bean property.


    setBeanScope

    public void setBeanScope(java.lang.String value)
    Set bean scope.


    getBeanScope

    public java.lang.String getBeanScope()
    Get bean scope.


    setRole

    public void setRole(java.lang.String role)
    Set role attribute.

    Parameters:
    role - The role the user must be in to store content.

    getRole

    public java.lang.String getRole()
    Get role attribute

    Returns:
    The role defined in the tag or null.

    getRealValue

    public java.lang.Object getRealValue()
                                  throws javax.servlet.jsp.JspException
    Get real value according to tag attribute. Real value is the value computed after attribute processing.

    Returns:
    Real value.
    Throws:
    javax.servlet.jsp.JspException - If something goes wrong while getting value from bean.

    computeRealValue

    protected void computeRealValue()
                             throws javax.servlet.jsp.JspException
    Compute real value according to tag attributes.

    Throws:
    javax.servlet.jsp.JspException - If something goes wrong while getting value from bean.

    getRealValueFromBean

    protected void getRealValueFromBean()
                                 throws javax.servlet.jsp.JspException
    Extract real value from specified bean.

    Throws:
    javax.servlet.jsp.JspException - If something goes wrong while getting value from bean.

    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Do start tag.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.BodyTagSupport
    javax.servlet.jsp.JspException

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Do end tag.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.BodyTagSupport
    javax.servlet.jsp.JspException

    callParent

    protected void callParent()
                       throws javax.servlet.jsp.JspException
    Find parent tag which must implement AttributeContainer.

    Throws:
    javax.servlet.jsp.JspException - If we can't find an appropriate enclosing tag.

    findEnclosingPutTagParent

    protected PutTagParent findEnclosingPutTagParent()
                                              throws javax.servlet.jsp.JspException
    Find parent tag which must implement AttributeContainer.

    Throws:
    javax.servlet.jsp.JspException - If we can't find an appropriate enclosing tag.


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/PutTagParent.html0000644000175000017500000002101610404045244031175 0ustar arnaudarnaud00000000000000 PutTagParent (Apache Struts API Documentation)

    org.apache.struts.taglib.tiles
    Interface PutTagParent

    All Known Implementing Classes:
    DefinitionTag, InsertTag

    public interface PutTagParent

    Tag classes implementing this interface can contain nested PutTag. This interface defines a method called by nested tags.


    Method Summary
     void processNestedTag(PutTag nestedTag)
              Process the nested tag.
     

    Method Detail

    processNestedTag

    public void processNestedTag(PutTag nestedTag)
                          throws javax.servlet.jsp.JspException
    Process the nested tag.

    Parameters:
    nestedTag - Nested tag to process.
    javax.servlet.jsp.JspException


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/UseAttributeTag.html0000644000175000017500000005271410404045212031677 0ustar arnaudarnaud00000000000000 UseAttributeTag (Apache Struts API Documentation)

    org.apache.struts.taglib.tiles
    Class UseAttributeTag

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagSupport
            |
            +--org.apache.struts.taglib.tiles.UseAttributeTag
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.jsp.tagext.Tag

    public final class UseAttributeTag
    extends javax.servlet.jsp.tagext.TagSupport

    Custom tag exposing a component attribute to page.

    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String attributeName
              The attribute name to be exposed.
    private  java.lang.String classname
              Class name of object.
    protected  boolean isErrorIgnored
              Are errors ignored.
    private  int scope
              The scope value.
    private  java.lang.String scopeName
              The scope name.
     
    Fields inherited from class javax.servlet.jsp.tagext.TagSupport
    id, pageContext
     
    Fields inherited from interface javax.servlet.jsp.tagext.Tag
    EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
     
    Constructor Summary
    UseAttributeTag()
               
     
    Method Summary
     int doEndTag()
              Clean up after processing this enumeration.
     int doStartTag()
              Expose the requested attribute from component context.
     java.lang.String getClassname()
              Get class name.
     boolean getIgnore()
              Get ignore.
     java.lang.String getName()
              Get name.
     java.lang.String getScope()
              Get scope.
     void release()
              Release all allocated resources.
     void setClassname(java.lang.String name)
              Set the class name.
     void setIgnore(boolean ignore)
              Set ignore.
     void setName(java.lang.String value)
              Set name.
     void setScope(java.lang.String scope)
              Set the scope.
     
    Methods inherited from class javax.servlet.jsp.tagext.TagSupport
    findAncestorWithClass, getId, getParent, getValue, getValues, removeValue, setId, setPageContext, setParent, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    classname

    private java.lang.String classname
    Class name of object.


    scopeName

    private java.lang.String scopeName
    The scope name.


    scope

    private int scope
    The scope value.


    attributeName

    private java.lang.String attributeName
    The attribute name to be exposed.


    isErrorIgnored

    protected boolean isErrorIgnored
    Are errors ignored. This is the property for attribute 'ignore'. Default value is false, which throws an exception. Only "attribute not found" - errors are ignored.

    Constructor Detail

    UseAttributeTag

    public UseAttributeTag()
    Method Detail

    release

    public void release()
    Release all allocated resources.

    Specified by:
    release in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    release in class javax.servlet.jsp.tagext.TagSupport

    getClassname

    public java.lang.String getClassname()
    Get class name.


    setClassname

    public void setClassname(java.lang.String name)
    Set the class name.

    Parameters:
    name - The new class name.

    setName

    public void setName(java.lang.String value)
    Set name.


    getName

    public java.lang.String getName()
    Get name.


    setScope

    public void setScope(java.lang.String scope)
    Set the scope.

    Parameters:
    scope - The new scope.

    getScope

    public java.lang.String getScope()
    Get scope.


    setIgnore

    public void setIgnore(boolean ignore)
    Set ignore.


    getIgnore

    public boolean getIgnore()
    Get ignore.


    doStartTag

    public int doStartTag()
                   throws javax.servlet.jsp.JspException
    Expose the requested attribute from component context.

    Specified by:
    doStartTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doStartTag in class javax.servlet.jsp.tagext.TagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred

    doEndTag

    public int doEndTag()
                 throws javax.servlet.jsp.JspException
    Clean up after processing this enumeration.

    Specified by:
    doEndTag in interface javax.servlet.jsp.tagext.Tag
    Overrides:
    doEndTag in class javax.servlet.jsp.tagext.TagSupport
    Throws:
    javax.servlet.jsp.JspException - if a JSP exception has occurred


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/UseAttributeTei.html0000644000175000017500000002620710404045244031710 0ustar arnaudarnaud00000000000000 UseAttributeTei (Apache Struts API Documentation)

    org.apache.struts.taglib.tiles
    Class UseAttributeTei

    java.lang.Object
      |
      +--javax.servlet.jsp.tagext.TagExtraInfo
            |
            +--org.apache.struts.taglib.tiles.UseAttributeTei
    

    public final class UseAttributeTei
    extends javax.servlet.jsp.tagext.TagExtraInfo

    Implementation of TagExtraInfo for the UseAttribute tag, identifying the scripting object(s) to be made visible.


    Field Summary
     
    Fields inherited from class javax.servlet.jsp.tagext.TagExtraInfo
     
    Constructor Summary
    UseAttributeTei()
               
     
    Method Summary
     javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
              Return information about the scripting variables to be created.
     
    Methods inherited from class javax.servlet.jsp.tagext.TagExtraInfo
    getTagInfo, isValid, setTagInfo
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    UseAttributeTei

    public UseAttributeTei()
    Method Detail

    getVariableInfo

    public javax.servlet.jsp.tagext.VariableInfo[] getVariableInfo(javax.servlet.jsp.tagext.TagData data)
    Return information about the scripting variables to be created.

    Overrides:
    getVariableInfo in class javax.servlet.jsp.tagext.TagExtraInfo


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/package-frame.html0000644000175000017500000000503510404045236031306 0ustar arnaudarnaud00000000000000 org.apache.struts.taglib.tiles (Apache Struts API Documentation) org.apache.struts.taglib.tiles
    Interfaces 
    AddTagParent
    ComponentConstants
    InsertTag.TagHandler
    PutListTagParent
    PutTagParent
    Classes 
    AddTag
    AttributeToScopeTag
    DefinitionTag
    DefinitionTagSupport
    GetAttributeTag
    GetTag
    ImportAttributeTag
    InitDefinitionsTag
    InsertTag
    PutListTag
    PutTag
    UseAttributeTag
    UseAttributeTei
    libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/package-summary.html0000644000175000017500000002436610404045232031715 0ustar arnaudarnaud00000000000000 org.apache.struts.taglib.tiles (Apache Struts API Documentation)

    Package org.apache.struts.taglib.tiles

    The "struts-tiles" tag library contains tags that are useful in creating dynamic reusable components.

    See:
              Description

    Interface Summary
    AddTagParent Tag classes implementing this interface can contain nested PutTags.
    ComponentConstants Constants used by Tiles/Components.
    InsertTag.TagHandler Inner Interface.
    PutListTagParent Tag classes implementing this interface can contains nested PutTag.
    PutTagParent Tag classes implementing this interface can contain nested PutTag.
     

    Class Summary
    AddTag Add an element to the surrounding list tag.
    AttributeToScopeTag Deprecated. Is it still in use ?
    DefinitionTag This is the tag handler for <tiles:definition>, which defines a tiles (or template / component).
    DefinitionTagSupport Common base class for tags dealing with Tiles definitions.
    GetAttributeTag Retrieve the value of the specified component/template attribute property, and render it to the current JspWriter as a String.
    GetTag This is the tag handler for <tiles:get>, which gets content from the request scope and either includes the content or prints it, depending upon the value of the content's direct attribute.
    ImportAttributeTag Import attribute from component to requested scope.
    InitDefinitionsTag Init definitions factory.
    InsertTag This is the tag handler for <tiles:insert>, which includes a template.
    PutListTag PutList tag implementation.
    PutTag Put an attribute in enclosing attribute container tag.
    UseAttributeTag Custom tag exposing a component attribute to page.
    UseAttributeTei Implementation of TagExtraInfo for the UseAttribute tag, identifying the scripting object(s) to be made visible.
     

    Package org.apache.struts.taglib.tiles Description

    The "struts-tiles" tag library contains tags that are useful in creating dynamic reusable components.

    TagLib Tiles UML



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/package-tree.html0000644000175000017500000002572010404045236031156 0ustar arnaudarnaud00000000000000 org.apache.struts.taglib.tiles Class Hierarchy (Apache Struts API Documentation)

    Hierarchy For Package org.apache.struts.taglib.tiles

    Package Hierarchies:
    All Packages

    Class Hierarchy

    Interface Hierarchy



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/taglib/tiles/package-use.html0000644000175000017500000002474510404045226031020 0ustar arnaudarnaud00000000000000 Uses of Package org.apache.struts.taglib.tiles (Apache Struts API Documentation)

    Uses of Package
    org.apache.struts.taglib.tiles

    Packages that use org.apache.struts.taglib.tiles
    org.apache.struts.taglib.tiles The "struts-tiles" tag library contains tags that are useful in creating dynamic reusable components. 
    org.apache.struts.tiles
    The Tiles taglib and framework allows building web pages by assembling reusable pieces of pages, called Tiles. 
     

    Classes in org.apache.struts.taglib.tiles used by org.apache.struts.taglib.tiles
    AddTag
              Add an element to the surrounding list tag.
    AddTagParent
              Tag classes implementing this interface can contain nested PutTags.
    ComponentConstants
              Constants used by Tiles/Components.
    DefinitionTagSupport
              Common base class for tags dealing with Tiles definitions.
    InsertTag
              This is the tag handler for <tiles:insert>, which includes a template.
    InsertTag.TagHandler
              Inner Interface.
    PutListTag
              PutList tag implementation.
    PutListTagParent
              Tag classes implementing this interface can contains nested PutTag.
    PutTag
              Put an attribute in enclosing attribute container tag.
    PutTagParent
              Tag classes implementing this interface can contain nested PutTag.
     

    Classes in org.apache.struts.taglib.tiles used by org.apache.struts.tiles
    ComponentConstants
              Constants used by Tiles/Components.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/0000755000175000017500000000000010423130301024455 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/actions/0000755000175000017500000000000010423130301026115 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/actions/class-use/0000755000175000017500000000000010423130301030014 5ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000016110423140533011315 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/actions/class-use/DefinitionDispatcherAction.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/actions/class-use/DefinitionDispatche0000644000175000017500000001310710404045212033663 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.actions.DefinitionDispatcherAction (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.actions.DefinitionDispatcherAction

    No usage of org.apache.struts.tiles.actions.DefinitionDispatcherAction



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/actions/class-use/NoOpAction.html0000644000175000017500000001270710404045220032726 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.actions.NoOpAction (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.actions.NoOpAction

    No usage of org.apache.struts.tiles.actions.NoOpAction



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015610423140533011321 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/actions/class-use/ReloadDefinitionsAction.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/actions/class-use/ReloadDefinitionsAc0000644000175000017500000001305710404045216033624 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.actions.ReloadDefinitionsAction (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.actions.ReloadDefinitionsAction

    No usage of org.apache.struts.tiles.actions.ReloadDefinitionsAction



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/actions/class-use/TilesAction.html0000644000175000017500000001271710404045216033141 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.actions.TilesAction (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.actions.TilesAction

    No usage of org.apache.struts.tiles.actions.TilesAction



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015410423140533011317 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/actions/class-use/ViewDefinitionsAction.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/actions/class-use/ViewDefinitionsActi0000644000175000017500000001303710404045250033661 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.actions.ViewDefinitionsAction (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.actions.ViewDefinitionsAction

    No usage of org.apache.struts.tiles.actions.ViewDefinitionsAction



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000014710423140533011321 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/actions/DefinitionDispatcherAction.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/actions/DefinitionDispatcherAction.ht0000644000175000017500000005201610404045240033721 0ustar arnaudarnaud00000000000000 DefinitionDispatcherAction (Apache Struts API Documentation)

    org.apache.struts.tiles.actions
    Class DefinitionDispatcherAction

    java.lang.Object
      |
      +--org.apache.struts.action.Action
            |
            +--org.apache.struts.tiles.actions.DefinitionDispatcherAction
    

    public class DefinitionDispatcherAction
    extends Action

    An Action that dispatches to a Tiles Definition that is named by the request parameter whose name is specified by the parameter property of the corresponding ActionMapping. This action is usefull in following situations :

    • To associate an Url to a definition
      To use Struts <html:link> tag on a definition
  • To configure the use of this action in your struts-config.xml file, create an entry like this:

    <action path="/saveSubscription" type="org.apache.struts.tiles.actions.DefinitionDispatcherAction" parameter="def"/> <forward name="success" path="anything" //> <forward name="error" path="path.to.error.page" //>

    which will use the value of the request parameter named "def" to pick the appropriate definition name.

    The value for success doesn't matter. The forward will forward to appropriate definition.

    The value for error should denote a valid jsp path or definition name.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:34:00 +0100 (Fri, 22 Aug 2003) $
    Author:
    Niall Pemberton , Craig R. McClanahan, Cedric Dumoulin

    Field Summary
    protected static org.apache.commons.logging.Log log
              Commons Logging instance.
     
    Fields inherited from class org.apache.struts.action.Action
    ACTION_SERVLET_KEY, APPLICATION_KEY, DATA_SOURCE_KEY, defaultLocale, ERROR_KEY, EXCEPTION_KEY, FORM_BEANS_KEY, FORWARDS_KEY, LOCALE_KEY, MAPPING_KEY, MAPPINGS_KEY, MESSAGE_KEY, MESSAGES_KEY, MULTIPART_KEY, PLUG_INS_KEY, REQUEST_PROCESSOR_KEY, servlet, SERVLET_KEY, TRANSACTION_TOKEN_KEY
     
    Constructor Summary
    DefinitionDispatcherAction()
               
     
    Method Summary
     ActionForward execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
              Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
    protected  void printError(javax.servlet.http.HttpServletResponse response, java.lang.String msg)
               
     
    Methods inherited from class org.apache.struts.action.Action
    execute, generateToken, getDataSource, getDataSource, getLocale, getResources, getResources, getResources, getServlet, isCancelled, isTokenValid, isTokenValid, perform, perform, resetToken, saveErrors, saveMessages, saveToken, setLocale, setServlet, toHex
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    log

    protected static org.apache.commons.logging.Log log
    Commons Logging instance.

    Constructor Detail

    DefinitionDispatcherAction

    public DefinitionDispatcherAction()
    Method Detail

    execute

    public ActionForward execute(ActionMapping mapping,
                                 ActionForm form,
                                 javax.servlet.http.HttpServletRequest request,
                                 javax.servlet.http.HttpServletResponse response)
                          throws java.lang.Exception
    Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.

    Overrides:
    execute in class Action
    Parameters:
    mapping - The ActionMapping used to select this instance
    form - The optional ActionForm bean for this request (if any)
    request - The HTTP request we are processing
    response - The HTTP response we are creating
    Throws:
    java.lang.Exception - if the application business logic throws an exception
    Since:
    Struts 1.1

    printError

    protected void printError(javax.servlet.http.HttpServletResponse response,
                              java.lang.String msg)
                       throws java.io.IOException
    java.io.IOException


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/actions/NoOpAction.html0000644000175000017500000004512710404045232031034 0ustar arnaudarnaud00000000000000 NoOpAction (Apache Struts API Documentation)

    org.apache.struts.tiles.actions
    Class NoOpAction

    java.lang.Object
      |
      +--org.apache.struts.action.Action
            |
            +--org.apache.struts.tiles.actions.NoOpAction
    

    Deprecated. Use o.a.s.a.ForwardAction instead with the parameter attribute: <action path="aPath" type="org.apache.struts.actions.ForwardAction" parameter="tiles.def.name" />

    public final class NoOpAction
    extends Action

    Implementation of Action that does nothing but forward to "success".

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:34:00 +0100 (Fri, 22 Aug 2003) $
    Author:
    Cedric Dumoulin

    Field Summary
     
    Fields inherited from class org.apache.struts.action.Action
    ACTION_SERVLET_KEY, APPLICATION_KEY, DATA_SOURCE_KEY, defaultLocale, ERROR_KEY, EXCEPTION_KEY, FORM_BEANS_KEY, FORWARDS_KEY, LOCALE_KEY, MAPPING_KEY, MAPPINGS_KEY, MESSAGE_KEY, MESSAGES_KEY, MULTIPART_KEY, PLUG_INS_KEY, REQUEST_PROCESSOR_KEY, servlet, SERVLET_KEY, TRANSACTION_TOKEN_KEY
     
    Constructor Summary
    NoOpAction()
              Deprecated.  
     
    Method Summary
     ActionForward execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
              Deprecated. Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
     
    Methods inherited from class org.apache.struts.action.Action
    execute, generateToken, getDataSource, getDataSource, getLocale, getResources, getResources, getResources, getServlet, isCancelled, isTokenValid, isTokenValid, perform, perform, resetToken, saveErrors, saveMessages, saveToken, setLocale, setServlet, toHex
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    NoOpAction

    public NoOpAction()
    Deprecated. 
    Method Detail

    execute

    public ActionForward execute(ActionMapping mapping,
                                 ActionForm form,
                                 javax.servlet.http.HttpServletRequest request,
                                 javax.servlet.http.HttpServletResponse response)
                          throws java.lang.Exception
    Deprecated. 
    Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.

    Overrides:
    execute in class Action
    Parameters:
    mapping - The ActionMapping used to select this instance
    form - The optional ActionForm bean for this request (if any)
    request - The HTTP request we are processing
    response - The HTTP response we are creating
    Throws:
    java.lang.Exception - if the application business logic throws an exception
    Since:
    Struts 1.1


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/actions/ReloadDefinitionsAction.html0000644000175000017500000004507610404045226033571 0ustar arnaudarnaud00000000000000 ReloadDefinitionsAction (Apache Struts API Documentation)

    org.apache.struts.tiles.actions
    Class ReloadDefinitionsAction

    java.lang.Object
      |
      +--org.apache.struts.action.Action
            |
            +--org.apache.struts.tiles.actions.ReloadDefinitionsAction
    

    public class ReloadDefinitionsAction
    extends Action

    A standard Action that calls the reload() method of our controller servlet to reload its configuration information from the configuration files (which have presumably been updated) dynamically.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:34:00 +0100 (Fri, 22 Aug 2003) $
    Author:
    Craig R. McClanahan, Cedric Dumoulin

    Field Summary
     
    Fields inherited from class org.apache.struts.action.Action
    ACTION_SERVLET_KEY, APPLICATION_KEY, DATA_SOURCE_KEY, defaultLocale, ERROR_KEY, EXCEPTION_KEY, FORM_BEANS_KEY, FORWARDS_KEY, LOCALE_KEY, MAPPING_KEY, MAPPINGS_KEY, MESSAGE_KEY, MESSAGES_KEY, MULTIPART_KEY, PLUG_INS_KEY, REQUEST_PROCESSOR_KEY, servlet, SERVLET_KEY, TRANSACTION_TOKEN_KEY
     
    Constructor Summary
    ReloadDefinitionsAction()
               
     
    Method Summary
     ActionForward execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
              Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
     
    Methods inherited from class org.apache.struts.action.Action
    execute, generateToken, getDataSource, getDataSource, getLocale, getResources, getResources, getResources, getServlet, isCancelled, isTokenValid, isTokenValid, perform, perform, resetToken, saveErrors, saveMessages, saveToken, setLocale, setServlet, toHex
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    ReloadDefinitionsAction

    public ReloadDefinitionsAction()
    Method Detail

    execute

    public ActionForward execute(ActionMapping mapping,
                                 ActionForm form,
                                 javax.servlet.http.HttpServletRequest request,
                                 javax.servlet.http.HttpServletResponse response)
                          throws java.lang.Exception
    Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.

    Overrides:
    execute in class Action
    Parameters:
    mapping - The ActionMapping used to select this instance
    form - The optional ActionForm bean for this request (if any)
    request - The HTTP request we are processing
    response - The HTTP response we are creating
    Throws:
    java.lang.Exception - if the application business logic throws an exception
    Since:
    Struts 1.1


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/actions/TilesAction.html0000644000175000017500000006064310404045204031240 0ustar arnaudarnaud00000000000000 TilesAction (Apache Struts API Documentation)

    org.apache.struts.tiles.actions
    Class TilesAction

    java.lang.Object
      |
      +--org.apache.struts.action.Action
            |
            +--org.apache.struts.tiles.actions.TilesAction
    

    public abstract class TilesAction
    extends Action

    Base class for Tiles Actions. This class has the same role as Struts Action. It provides a method execute(...) called when action is invoked. The difference is, that the execute() method takes an additional parameter : tile context. This class extends Struts Action. Subclasses should override execute(ComponentContext ...) method instead of Struts execute(ActionMapping ...) method. Backward compatibility is ensured with the perform(ComponentContext ...) method.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:34:00 +0100 (Fri, 22 Aug 2003) $

    Field Summary
     
    Fields inherited from class org.apache.struts.action.Action
    ACTION_SERVLET_KEY, APPLICATION_KEY, DATA_SOURCE_KEY, defaultLocale, ERROR_KEY, EXCEPTION_KEY, FORM_BEANS_KEY, FORWARDS_KEY, LOCALE_KEY, MAPPING_KEY, MAPPINGS_KEY, MESSAGE_KEY, MESSAGES_KEY, MULTIPART_KEY, PLUG_INS_KEY, REQUEST_PROCESSOR_KEY, servlet, SERVLET_KEY, TRANSACTION_TOKEN_KEY
     
    Constructor Summary
    TilesAction()
               
     
    Method Summary
     ActionForward execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
              Original Struts Action's method.
     ActionForward execute(ComponentContext context, ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
              Process the specified HTTP request and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
     ActionForward perform(ComponentContext context, ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
              Deprecated. Use the execute() method instead
     
    Methods inherited from class org.apache.struts.action.Action
    execute, generateToken, getDataSource, getDataSource, getLocale, getResources, getResources, getResources, getServlet, isCancelled, isTokenValid, isTokenValid, perform, perform, resetToken, saveErrors, saveMessages, saveToken, setLocale, setServlet, toHex
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    TilesAction

    public TilesAction()
    Method Detail

    execute

    public ActionForward execute(ActionMapping mapping,
                                 ActionForm form,
                                 javax.servlet.http.HttpServletRequest request,
                                 javax.servlet.http.HttpServletResponse response)
                          throws java.lang.Exception
    Original Struts Action's method. Retrieve current Tile context and call TilesAction execute method. Do not overload this method !

    Overrides:
    execute in class Action
    Parameters:
    mapping - The ActionMapping used to select this instance.
    form - The optional ActionForm bean for this request (if any).
    request - The HTTP request we are processing.
    response - The HTTP response we are creating.
    Throws:
    java.lang.Exception - if the application business logic throws an exception
    Since:
    Struts 1.1

    execute

    public ActionForward execute(ComponentContext context,
                                 ActionMapping mapping,
                                 ActionForm form,
                                 javax.servlet.http.HttpServletRequest request,
                                 javax.servlet.http.HttpServletResponse response)
                          throws java.lang.Exception
    Process the specified HTTP request and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
    Override this method to provide functionality.

    Parameters:
    context - The current Tile context, containing Tile attributes.
    mapping - The ActionMapping used to select this instance.
    form - The optional ActionForm bean for this request (if any).
    request - The HTTP request we are processing.
    response - The HTTP response we are creating.
    Throws:
    java.lang.Exception - if the application business logic throws an exception
    Since:
    Struts 1.1

    perform

    public ActionForward perform(ComponentContext context,
                                 ActionMapping mapping,
                                 ActionForm form,
                                 javax.servlet.http.HttpServletRequest request,
                                 javax.servlet.http.HttpServletResponse response)
                          throws java.io.IOException,
                                 javax.servlet.ServletException
    Deprecated. Use the execute() method instead

    Process the specified HTTP request and create the corresponding HTTP response (or forward to another web component that will create it). Return an ActionForward instance describing where and how control should be forwarded, or null if the response has already been completed.

    Parameters:
    context - The current Tile context, containing Tile attributes.
    mapping - The ActionMapping used to select this instance.
    form - The optional ActionForm bean for this request (if any).
    request - The HTTP request we are processing.
    response - The HTTP response we are creating.
    Throws:
    java.io.IOException - if an input/output error occurs
    javax.servlet.ServletException - if a servlet exception occurs


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/actions/ViewDefinitionsAction.html0000644000175000017500000004422610404045246033273 0ustar arnaudarnaud00000000000000 ViewDefinitionsAction (Apache Struts API Documentation)

    org.apache.struts.tiles.actions
    Class ViewDefinitionsAction

    java.lang.Object
      |
      +--org.apache.struts.action.Action
            |
            +--org.apache.struts.tiles.actions.ViewDefinitionsAction
    

    public class ViewDefinitionsAction
    extends Action

    An Action that writes the definitions of the Tiles factory. Useful to check what is effectivly loaded in a Tiles factory

    Author:
    Cedric Dumoulin

    Field Summary
     
    Fields inherited from class org.apache.struts.action.Action
    ACTION_SERVLET_KEY, APPLICATION_KEY, DATA_SOURCE_KEY, defaultLocale, ERROR_KEY, EXCEPTION_KEY, FORM_BEANS_KEY, FORWARDS_KEY, LOCALE_KEY, MAPPING_KEY, MAPPINGS_KEY, MESSAGE_KEY, MESSAGES_KEY, MULTIPART_KEY, PLUG_INS_KEY, REQUEST_PROCESSOR_KEY, servlet, SERVLET_KEY, TRANSACTION_TOKEN_KEY
     
    Constructor Summary
    ViewDefinitionsAction()
               
     
    Method Summary
     ActionForward execute(ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
              Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
     
    Methods inherited from class org.apache.struts.action.Action
    execute, generateToken, getDataSource, getDataSource, getLocale, getResources, getResources, getResources, getServlet, isCancelled, isTokenValid, isTokenValid, perform, perform, resetToken, saveErrors, saveMessages, saveToken, setLocale, setServlet, toHex
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    ViewDefinitionsAction

    public ViewDefinitionsAction()
    Method Detail

    execute

    public ActionForward execute(ActionMapping mapping,
                                 ActionForm form,
                                 javax.servlet.http.HttpServletRequest request,
                                 javax.servlet.http.HttpServletResponse response)
                          throws java.lang.Exception
    Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.

    Overrides:
    execute in class Action
    Parameters:
    mapping - The ActionMapping used to select this instance
    form - The optional ActionForm bean for this request (if any)
    request - The HTTP request we are processing
    response - The HTTP response we are creating
    Throws:
    java.lang.Exception - if the application business logic throws an exception
    Since:
    Struts 1.1


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/actions/package-frame.html0000644000175000017500000000264010404045246031504 0ustar arnaudarnaud00000000000000 org.apache.struts.tiles.actions (Apache Struts API Documentation) org.apache.struts.tiles.actions
    Classes 
    DefinitionDispatcherAction
    NoOpAction
    ReloadDefinitionsAction
    TilesAction
    ViewDefinitionsAction
    libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/actions/package-summary.html0000644000175000017500000001633410404045212032105 0ustar arnaudarnaud00000000000000 org.apache.struts.tiles.actions (Apache Struts API Documentation)

    Package org.apache.struts.tiles.actions

    Class Summary
    DefinitionDispatcherAction An Action that dispatches to a Tiles Definition that is named by the request parameter whose name is specified by the parameter property of the corresponding ActionMapping.
    NoOpAction Deprecated. Use o.a.s.a.ForwardAction instead with the parameter attribute: <action path="aPath" type="org.apache.struts.actions.ForwardAction" parameter="tiles.def.name" />
    ReloadDefinitionsAction A standard Action that calls the reload() method of our controller servlet to reload its configuration information from the configuration files (which have presumably been updated) dynamically.
    TilesAction Base class for Tiles Actions.
    ViewDefinitionsAction An Action that writes the definitions of the Tiles factory.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/actions/package-tree.html0000644000175000017500000001503710404045212031346 0ustar arnaudarnaud00000000000000 org.apache.struts.tiles.actions Class Hierarchy (Apache Struts API Documentation)

    Hierarchy For Package org.apache.struts.tiles.actions

    Package Hierarchies:
    All Packages

    Class Hierarchy



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/actions/package-use.html0000644000175000017500000001227410404045242031206 0ustar arnaudarnaud00000000000000 Uses of Package org.apache.struts.tiles.actions (Apache Struts API Documentation)

    Uses of Package
    org.apache.struts.tiles.actions

    No usage of org.apache.struts.tiles.actions



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/beans/0000755000175000017500000000000010423130301025545 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/beans/class-use/0000755000175000017500000000000010423130301027444 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/beans/class-use/MenuItem.html0000644000175000017500000001602510404045212032066 0ustar arnaudarnaud00000000000000 Uses of Interface org.apache.struts.tiles.beans.MenuItem (Apache Struts API Documentation)

    Uses of Interface
    org.apache.struts.tiles.beans.MenuItem

    Packages that use MenuItem
    org.apache.struts.tiles.beans   
     

    Uses of MenuItem in org.apache.struts.tiles.beans
     

    Classes in org.apache.struts.tiles.beans that implement MenuItem
     class SimpleMenuItem
              A MenuItem implementation.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/beans/class-use/SimpleMenuItem.html0000644000175000017500000001273310404045246033251 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.beans.SimpleMenuItem (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.beans.SimpleMenuItem

    No usage of org.apache.struts.tiles.beans.SimpleMenuItem



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/beans/MenuItem.html0000644000175000017500000003023010404045220030160 0ustar arnaudarnaud00000000000000 MenuItem (Apache Struts API Documentation)

    org.apache.struts.tiles.beans
    Interface MenuItem

    All Superinterfaces:
    java.io.Serializable
    All Known Implementing Classes:
    SimpleMenuItem

    public interface MenuItem
    extends java.io.Serializable

    Interface for MenuItems.

    See Also:
    SimpleMenuItem

    Method Summary
     java.lang.String getIcon()
              Get icon property.
     java.lang.String getLink()
              Get link property.
     java.lang.String getTooltip()
              Get tooltip property.
     java.lang.String getValue()
              Get value property.
     void setIcon(java.lang.String link)
              Set icon property.
     void setLink(java.lang.String link)
              Set link property.
     void setTooltip(java.lang.String link)
              Set tooltip property.
     void setValue(java.lang.String value)
              Set value property.
     

    Method Detail

    setValue

    public void setValue(java.lang.String value)
    Set value property.


    getValue

    public java.lang.String getValue()
    Get value property.


    setLink

    public void setLink(java.lang.String link)
    Set link property.


    getLink

    public java.lang.String getLink()
    Get link property.


    setIcon

    public void setIcon(java.lang.String link)
    Set icon property.


    getIcon

    public java.lang.String getIcon()
    Get icon property.


    setTooltip

    public void setTooltip(java.lang.String link)
    Set tooltip property.


    getTooltip

    public java.lang.String getTooltip()
    Get tooltip property.



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/beans/SimpleMenuItem.html0000644000175000017500000004604110404045204031343 0ustar arnaudarnaud00000000000000 SimpleMenuItem (Apache Struts API Documentation)

    org.apache.struts.tiles.beans
    Class SimpleMenuItem

    java.lang.Object
      |
      +--org.apache.struts.tiles.beans.SimpleMenuItem
    
    All Implemented Interfaces:
    MenuItem, java.io.Serializable

    public class SimpleMenuItem
    extends java.lang.Object
    implements MenuItem, java.io.Serializable

    A MenuItem implementation. Used to read menu items in definitions.

    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String icon
               
    private  java.lang.String link
               
    private  java.lang.String tooltip
               
    private  java.lang.String value
               
     
    Constructor Summary
    SimpleMenuItem()
              Constructor.
     
    Method Summary
     java.lang.String getIcon()
              Get icon property.
     java.lang.String getLink()
              Get link property.
     java.lang.String getTooltip()
              Get tooltip property.
     java.lang.String getValue()
              Get value property.
     void setIcon(java.lang.String icon)
              Set icon property.
     void setLink(java.lang.String link)
              Set link property.
     void setTooltip(java.lang.String tooltip)
              Set tooltip property.
     void setValue(java.lang.String value)
              Set value property.
     java.lang.String toString()
              Return String representation.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
     

    Field Detail

    value

    private java.lang.String value

    link

    private java.lang.String link

    icon

    private java.lang.String icon

    tooltip

    private java.lang.String tooltip
    Constructor Detail

    SimpleMenuItem

    public SimpleMenuItem()
    Constructor.

    Method Detail

    setValue

    public void setValue(java.lang.String value)
    Set value property.

    Specified by:
    setValue in interface MenuItem

    getValue

    public java.lang.String getValue()
    Get value property.

    Specified by:
    getValue in interface MenuItem

    setLink

    public void setLink(java.lang.String link)
    Set link property.

    Specified by:
    setLink in interface MenuItem

    getLink

    public java.lang.String getLink()
    Get link property.

    Specified by:
    getLink in interface MenuItem

    setIcon

    public void setIcon(java.lang.String icon)
    Set icon property.

    Specified by:
    setIcon in interface MenuItem

    getIcon

    public java.lang.String getIcon()
    Get icon property.

    Specified by:
    getIcon in interface MenuItem

    setTooltip

    public void setTooltip(java.lang.String tooltip)
    Set tooltip property.

    Specified by:
    setTooltip in interface MenuItem

    getTooltip

    public java.lang.String getTooltip()
    Get tooltip property.

    Specified by:
    getTooltip in interface MenuItem

    toString

    public java.lang.String toString()
    Return String representation.

    Overrides:
    toString in class java.lang.Object


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/beans/package-frame.html0000644000175000017500000000247010404045172031133 0ustar arnaudarnaud00000000000000 org.apache.struts.tiles.beans (Apache Struts API Documentation) org.apache.struts.tiles.beans
    Interfaces 
    MenuItem
    Classes 
    SimpleMenuItem
    libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/beans/package-summary.html0000644000175000017500000001441010404045216031532 0ustar arnaudarnaud00000000000000 org.apache.struts.tiles.beans (Apache Struts API Documentation)

    Package org.apache.struts.tiles.beans

    Interface Summary
    MenuItem Interface for MenuItems.
     

    Class Summary
    SimpleMenuItem A MenuItem implementation.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/beans/package-tree.html0000644000175000017500000001422310404045210030770 0ustar arnaudarnaud00000000000000 org.apache.struts.tiles.beans Class Hierarchy (Apache Struts API Documentation)

    Hierarchy For Package org.apache.struts.tiles.beans

    Package Hierarchies:
    All Packages

    Class Hierarchy

    • class java.lang.Object
      • class org.apache.struts.tiles.beans.SimpleMenuItem (implements org.apache.struts.tiles.beans.MenuItem, java.io.Serializable)

    Interface Hierarchy

    • interface java.io.Serializable
      • interface org.apache.struts.tiles.beans.MenuItem


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/beans/package-use.html0000644000175000017500000001456010404045236030641 0ustar arnaudarnaud00000000000000 Uses of Package org.apache.struts.tiles.beans (Apache Struts API Documentation)

    Uses of Package
    org.apache.struts.tiles.beans

    Packages that use org.apache.struts.tiles.beans
    org.apache.struts.tiles.beans   
     

    Classes in org.apache.struts.tiles.beans used by org.apache.struts.tiles.beans
    MenuItem
              Interface for MenuItems.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/0000755000175000017500000000000010423130301026354 5ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000014510423140533011317 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/ActionComponentServlet.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/ActionComponentServlet.html0000644000175000017500000001270410404045220033717 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.ActionComponentServlet (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.ActionComponentServlet

    No usage of org.apache.struts.tiles.ActionComponentServlet



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/ActionController.html0000644000175000017500000001262410404045224032540 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.ActionController (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.ActionController

    No usage of org.apache.struts.tiles.ActionController



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/AttributeDefinition.html0000644000175000017500000002466010404045242033236 0ustar arnaudarnaud00000000000000 Uses of Interface org.apache.struts.tiles.AttributeDefinition (Apache Struts API Documentation)

    Uses of Interface
    org.apache.struts.tiles.AttributeDefinition

    Packages that use AttributeDefinition
    org.apache.struts.taglib.tiles The "struts-tiles" tag library contains tags that are useful in creating dynamic reusable components. 
    org.apache.struts.tiles
    The Tiles taglib and framework allows building web pages by assembling reusable pieces of pages, called Tiles. 
     

    Uses of AttributeDefinition in org.apache.struts.taglib.tiles
     

    Methods in org.apache.struts.taglib.tiles with parameters of type AttributeDefinition
     InsertTag.TagHandler InsertTag.processTypedAttribute(AttributeDefinition value)
              Process typed attribute according to its type.
     

    Uses of AttributeDefinition in org.apache.struts.tiles
     

    Classes in org.apache.struts.tiles that implement AttributeDefinition
     class DefinitionAttribute
              Attribute representing a Component Definition.
     class DefinitionNameAttribute
              Component attribute.
     class DirectStringAttribute
              Component attribute.
     class PathAttribute
              Component attribute.
     class UntyppedAttribute
              Common implementation of attribute definition.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/ComponentContext.html0000644000175000017500000004520310404045216032566 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.ComponentContext (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.ComponentContext

    Packages that use ComponentContext
    org.apache.struts.taglib.tiles The "struts-tiles" tag library contains tags that are useful in creating dynamic reusable components. 
    org.apache.struts.tiles
    The Tiles taglib and framework allows building web pages by assembling reusable pieces of pages, called Tiles. 
    org.apache.struts.tiles.actions   
     

    Uses of ComponentContext in org.apache.struts.taglib.tiles
     

    Fields in org.apache.struts.taglib.tiles declared as ComponentContext
    protected  ComponentContext InsertTag.cachedCurrentContext
              Current component context
    protected  ComponentContext InsertTag.InsertHandler.currentContext
               
    protected  ComponentContext InsertTag.InsertHandler.subCompContext
               
     

    Methods in org.apache.struts.taglib.tiles that return ComponentContext
    private  ComponentContext InsertTag.getCurrentContext()
              Get current component context.
     

    Uses of ComponentContext in org.apache.struts.tiles
     

    Methods in org.apache.struts.tiles that return ComponentContext
    static ComponentContext ComponentContext.getContext(javax.servlet.ServletRequest request)
              Get component context from request.
     

    Methods in org.apache.struts.tiles with parameters of type ComponentContext
     void Controller.perform(ComponentContext tileContext, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, javax.servlet.ServletContext servletContext)
              Method associated to a tile and called immediately before the tile is included.
     void ActionController.perform(ComponentContext tileContext, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, javax.servlet.ServletContext servletContext)
              Method associated to a tile and called immediately before tile is included.
    static void ComponentContext.setContext(ComponentContext context, javax.servlet.ServletRequest request)
              Store component context into request.
     void UrlController.perform(ComponentContext tileContext, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, javax.servlet.ServletContext servletContext)
              Method associated to a tile and called immediately before the tile is included.
     void ControllerSupport.perform(ComponentContext tileContext, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, javax.servlet.ServletContext servletContext)
              Method associated to a tile and called immediately before tile is included.
     

    Uses of ComponentContext in org.apache.struts.tiles.actions
     

    Methods in org.apache.struts.tiles.actions with parameters of type ComponentContext
     ActionForward TilesAction.execute(ComponentContext context, ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
              Process the specified HTTP request and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
     ActionForward TilesAction.perform(ComponentContext context, ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
              Deprecated. Use the execute() method instead
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/ComponentDefinition.html0000644000175000017500000006163610404045226033243 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.ComponentDefinition (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.ComponentDefinition

    Packages that use ComponentDefinition
    org.apache.struts.taglib.tiles The "struts-tiles" tag library contains tags that are useful in creating dynamic reusable components. 
    org.apache.struts.taglib.tiles.util   
    org.apache.struts.tiles
    The Tiles taglib and framework allows building web pages by assembling reusable pieces of pages, called Tiles. 
    org.apache.struts.tiles.definition   
    org.apache.struts.tiles.xmlDefinition   
     

    Uses of ComponentDefinition in org.apache.struts.taglib.tiles
     

    Fields in org.apache.struts.taglib.tiles declared as ComponentDefinition
    private  ComponentDefinition DefinitionTag.definition
              Template definition
     

    Methods in org.apache.struts.taglib.tiles with parameters of type ComponentDefinition
    protected  InsertTag.TagHandler InsertTag.processDefinition(ComponentDefinition definition)
              End of Process tag attribute "definition".
     

    Uses of ComponentDefinition in org.apache.struts.taglib.tiles.util
     

    Methods in org.apache.struts.taglib.tiles.util that return ComponentDefinition
    static ComponentDefinition TagUtils.getComponentDefinition(java.lang.String name, javax.servlet.jsp.PageContext pageContext)
              Get component definition by its name.
     

    Uses of ComponentDefinition in org.apache.struts.tiles
     

    Methods in org.apache.struts.tiles that return ComponentDefinition
    static ComponentDefinition TilesUtil.getDefinition(java.lang.String definitionName, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Get a definition by its name.
     ComponentDefinition ComponentDefinitionsFactory.getDefinition(java.lang.String name, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Deprecated. Get a definition by its name.
     ComponentDefinition DefinitionsFactory.getDefinition(java.lang.String name, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Get a definition by its name.
    static ComponentDefinition DefinitionsUtil.getDefinition(java.lang.String definitionName, javax.servlet.jsp.PageContext pageContext)
              Deprecated. Use TilesUtil.getDefinition(String, ServletRequest, ServletContext)
    static ComponentDefinition DefinitionsUtil.getActionDefinition(javax.servlet.ServletRequest request)
              Deprecated. Get Definition stored in jsp context by an action.
     

    Methods in org.apache.struts.tiles with parameters of type ComponentDefinition
    static void DefinitionsUtil.setActionDefinition(javax.servlet.ServletRequest request, ComponentDefinition definition)
              Deprecated. Store definition in jsp context.
    static void DefinitionsUtil.removeActionDefinition(javax.servlet.ServletRequest request, ComponentDefinition definition)
              Deprecated. Remove Definition stored in jsp context.
     

    Constructors in org.apache.struts.tiles with parameters of type ComponentDefinition
    ComponentContext(ComponentDefinition instance)
              Deprecated. Use ComponentContext.ComponentContext(Map attributes) instead.
    ComponentDefinition(ComponentDefinition definition)
              Copy Constructor.
     

    Uses of ComponentDefinition in org.apache.struts.tiles.definition
     

    Methods in org.apache.struts.tiles.definition that return ComponentDefinition
     ComponentDefinition ComponentDefinitionsFactoryWrapper.getDefinition(java.lang.String name, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Get requested definition.
     ComponentDefinition ReloadableDefinitionsFactory.getDefinition(java.lang.String definitionName, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Get a definition by its name.
     

    Uses of ComponentDefinition in org.apache.struts.tiles.xmlDefinition
     

    Subclasses of ComponentDefinition in org.apache.struts.tiles.xmlDefinition
     class XmlDefinition
              A definition read from an XML definitions file.
     

    Methods in org.apache.struts.tiles.xmlDefinition that return ComponentDefinition
     ComponentDefinition FactorySet.getDefinition(java.lang.String name, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Get a definition by its name.
     ComponentDefinition DefinitionsFactory.getDefinition(java.lang.String name, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Get a definition by its name.
     

    Methods in org.apache.struts.tiles.xmlDefinition with parameters of type ComponentDefinition
     void DefinitionsFactory.putDefinition(ComponentDefinition definition)
              Put definition in set.
     



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015210423140533011315 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/ComponentDefinitionsFactory.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/ComponentDefinitionsFactory0000644000175000017500000004355210404045232034005 0ustar arnaudarnaud00000000000000 Uses of Interface org.apache.struts.tiles.ComponentDefinitionsFactory (Apache Struts API Documentation)

    Uses of Interface
    org.apache.struts.tiles.ComponentDefinitionsFactory

    Packages that use ComponentDefinitionsFactory
    org.apache.struts.tiles
    The Tiles taglib and framework allows building web pages by assembling reusable pieces of pages, called Tiles. 
    org.apache.struts.tiles.definition   
    org.apache.struts.tiles.xmlDefinition   
     

    Uses of ComponentDefinitionsFactory in org.apache.struts.tiles
     

    Methods in org.apache.struts.tiles with parameters of type ComponentDefinitionsFactory
    protected static void DefinitionsUtil.setDefinitionsFactory(ComponentDefinitionsFactory factory, javax.servlet.ServletContext servletContext)
              Deprecated. since 20020708. Replaced by makeFactoryAccessible()
     

    Uses of ComponentDefinitionsFactory in org.apache.struts.tiles.definition
     

    Classes in org.apache.struts.tiles.definition that implement ComponentDefinitionsFactory
     class ReloadableDefinitionsFactory
              A reloadable factory.
     

    Fields in org.apache.struts.tiles.definition declared as ComponentDefinitionsFactory
    private  ComponentDefinitionsFactory ComponentDefinitionsFactoryWrapper.factory
              The underlying factory
    protected  ComponentDefinitionsFactory ReloadableDefinitionsFactory.factory
              The real factory instance
     

    Methods in org.apache.struts.tiles.definition that return ComponentDefinitionsFactory
     ComponentDefinitionsFactory ComponentDefinitionsFactoryWrapper.getInternalFactory()
              Get internal factory.
    protected  ComponentDefinitionsFactory ComponentDefinitionsFactoryWrapper.createFactoryInstance(java.lang.String classname)
              Create Definition factory from provided classname which must implement ComponentDefinitionsFactory.
     ComponentDefinitionsFactory ReloadableDefinitionsFactory.createFactoryFromClassname(javax.servlet.ServletContext servletContext, java.util.Map properties, java.lang.String classname)
              Create Definition factory from provided classname.
     ComponentDefinitionsFactory ReloadableDefinitionsFactory.createDefaultFactory(javax.servlet.ServletContext servletContext, java.util.Map properties)
              Create default Definition factory.
     ComponentDefinitionsFactory ReloadableDefinitionsFactory.createFactory(javax.servlet.ServletContext servletContext, java.util.Map properties)
              Create Definition factory.
     ComponentDefinitionsFactory ReloadableDefinitionsFactory.getFactory()
              Get underlying factory instance.
     

    Constructors in org.apache.struts.tiles.definition with parameters of type ComponentDefinitionsFactory
    ComponentDefinitionsFactoryWrapper(ComponentDefinitionsFactory factory)
              Constructor.
     

    Uses of ComponentDefinitionsFactory in org.apache.struts.tiles.xmlDefinition
     

    Classes in org.apache.struts.tiles.xmlDefinition that implement ComponentDefinitionsFactory
     class FactorySet
              Component Definitions factory.
     class I18nFactorySet
              Definitions factory.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/Controller.html0000644000175000017500000004015410404045220031375 0ustar arnaudarnaud00000000000000 Uses of Interface org.apache.struts.tiles.Controller (Apache Struts API Documentation)

    Uses of Interface
    org.apache.struts.tiles.Controller

    Packages that use Controller
    org.apache.struts.taglib.tiles The "struts-tiles" tag library contains tags that are useful in creating dynamic reusable components. 
    org.apache.struts.tiles
    The Tiles taglib and framework allows building web pages by assembling reusable pieces of pages, called Tiles. 
     

    Uses of Controller in org.apache.struts.taglib.tiles
     

    Fields in org.apache.struts.taglib.tiles declared as Controller
    protected  Controller InsertTag.InsertHandler.controller
               
     

    Methods in org.apache.struts.taglib.tiles that return Controller
    private  Controller InsertTag.getController()
              Get instantiated Controller.
     

    Constructors in org.apache.struts.taglib.tiles with parameters of type Controller
    InsertTag.InsertHandler(java.util.Map attributes, java.lang.String page, java.lang.String role, Controller controller)
              Constructor.
    InsertTag.InsertHandler(java.lang.String page, java.lang.String role, Controller controller)
              Constructor.
     

    Uses of Controller in org.apache.struts.tiles
     

    Classes in org.apache.struts.tiles that implement Controller
     class ActionController
              Struts wrapper implementation of Controller.
     class ControllerSupport
              Basic implementation of Controller.
     class UrlController
              Tiles controller including a local URL.
     

    Fields in org.apache.struts.tiles declared as Controller
    private  Controller ComponentDefinition.controllerInstance
              Controller associated to Definition.
     

    Methods in org.apache.struts.tiles that return Controller
     Controller ComponentDefinition.getControllerInstance()
              Get controller instance.
     Controller ComponentDefinition.getOrCreateController()
              Get or create controller.
    static Controller ComponentDefinition.createController(java.lang.String name, java.lang.String controllerType)
              Create a new instance of controller named in parameter.
    static Controller ComponentDefinition.createControllerFromClassname(java.lang.String classname)
              Create a controller from specified classname
     

    Methods in org.apache.struts.tiles with parameters of type Controller
     void ComponentDefinition.setControllerInstance(Controller controller)
              Set controller.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/ControllerSupport.html0000644000175000017500000001263410404045220032774 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.ControllerSupport (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.ControllerSupport

    No usage of org.apache.struts.tiles.ControllerSupport



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/DefinitionAttribute.html0000644000175000017500000001265410404045250033235 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.DefinitionAttribute (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.DefinitionAttribute

    No usage of org.apache.struts.tiles.DefinitionAttribute



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000014610423140533011320 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/DefinitionNameAttribute.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/DefinitionNameAttribute.htm0000644000175000017500000001271410404045216033661 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.DefinitionNameAttribute (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.DefinitionNameAttribute

    No usage of org.apache.struts.tiles.DefinitionNameAttribute



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/DefinitionsFactory.html0000644000175000017500000006006610404045210033060 0ustar arnaudarnaud00000000000000 Uses of Interface org.apache.struts.tiles.DefinitionsFactory (Apache Struts API Documentation)

    Uses of Interface
    org.apache.struts.tiles.DefinitionsFactory

    Packages that use DefinitionsFactory
    org.apache.struts.tiles
    The Tiles taglib and framework allows building web pages by assembling reusable pieces of pages, called Tiles. 
    org.apache.struts.tiles.definition   
     

    Uses of DefinitionsFactory in org.apache.struts.tiles
     

    Fields in org.apache.struts.tiles declared as DefinitionsFactory
    private  DefinitionsFactory ActionComponentServlet.definitionsFactory
              Deprecated. Definitions factory
    protected  DefinitionsFactory TilesPlugin.definitionFactory
              Associated definition factory
    protected  DefinitionsFactory TilesRequestProcessor.definitionsFactory
              Definitions factory
     

    Methods in org.apache.struts.tiles that return DefinitionsFactory
    static DefinitionsFactory TilesUtil.getDefinitionsFactory(javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Get definition factory from appropriate servlet context.
    static DefinitionsFactory TilesUtil.createDefinitionsFactory(javax.servlet.ServletContext servletContext, DefinitionsFactoryConfig factoryConfig)
              Create Definition factory from specified configuration object.
     DefinitionsFactory TilesUtilImpl.getDefinitionsFactory(javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Get definition factory from appropriate servlet context.
     DefinitionsFactory TilesUtilImpl.createDefinitionsFactory(javax.servlet.ServletContext servletContext, DefinitionsFactoryConfig factoryConfig)
              Create Definition factory from specified configuration object.
    protected  DefinitionsFactory TilesUtilImpl.createDefinitionFactoryInstance(java.lang.String classname)
              Create Definition factory of specified classname.
     DefinitionsFactory TilesUtilStrutsModulesImpl.getDefinitionsFactory(javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Get the definition factory from appropriate servlet context.
     DefinitionsFactory TilesUtilStrutsModulesImpl.getDefinitionsFactory(javax.servlet.ServletContext servletContext, ModuleConfig moduleConfig)
              Get definition factory for the module attached to specified moduleConfig.
     DefinitionsFactory TilesUtilStrutsImpl.getDefinitionsFactory(javax.servlet.ServletContext servletContext, ModuleConfig moduleConfig)
              Get definition factory for the module attached to the specified moduleConfig.
    static DefinitionsFactory DefinitionsUtil.createDefinitionsFactory(javax.servlet.ServletContext servletContext, java.util.Map properties, java.lang.String classname)
              Deprecated. Use createDefinitionsFactory(ServletContext servletContext, ServletConfig servletConfig)
    static DefinitionsFactory DefinitionsUtil.createDefinitionsFactory(javax.servlet.ServletContext servletContext, java.util.Map properties)
              Deprecated. Create default Definition factory.
    static DefinitionsFactory DefinitionsUtil.createDefinitionsFactory(javax.servlet.ServletContext servletContext, javax.servlet.ServletConfig servletConfig)
              Deprecated. Create Definition factory.
    static DefinitionsFactory DefinitionsUtil.createDefinitionsFactory(javax.servlet.ServletContext servletContext, javax.servlet.ServletConfig servletConfig, boolean checkIfExist)
              Deprecated. Create Definition factory.
    static DefinitionsFactory DefinitionsUtil.createDefinitionFactoryInstance(java.lang.String classname)
              Deprecated. No direct replacement. Use createDefinitionFactory TilesUtil.createDefinitionsFactory(ServletContext, DefinitionsFactoryConfig).
    static DefinitionsFactory DefinitionsUtil.getDefinitionsFactory(javax.servlet.ServletContext servletContext)
              Deprecated. Use TilesUtil.getDefinitionsFactory(ServletRequest, ServletContext)
     DefinitionsFactory TilesRequestProcessor.getDefinitionsFactory()
              Get associated definition factory.
     

    Methods in org.apache.struts.tiles with parameters of type DefinitionsFactory
    protected  void TilesUtilImpl.makeDefinitionsFactoryAccessible(DefinitionsFactory factory, javax.servlet.ServletContext servletContext)
              Make definition factory accessible to Tags.
    protected  void TilesUtilStrutsModulesImpl.makeDefinitionsFactoryAccessible(DefinitionsFactory factory, javax.servlet.ServletContext servletContext)
              Make definition factory accessible to tags.
    static void DefinitionsUtil.makeDefinitionsFactoryAccessible(DefinitionsFactory factory, javax.servlet.ServletContext servletContext)
              Deprecated. Use TilesUtil.createDefinitionsFactory(ServletContext, DefinitionsFactoryConfig)
     

    Uses of DefinitionsFactory in org.apache.struts.tiles.definition
     

    Classes in org.apache.struts.tiles.definition that implement DefinitionsFactory
     class ComponentDefinitionsFactoryWrapper
              Wrapper from new definition factory interface to old interface.
     



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000014710423140533011321 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/DefinitionsFactoryConfig.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/DefinitionsFactoryConfig.ht0000644000175000017500000004361310404045204033657 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.DefinitionsFactoryConfig (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.DefinitionsFactoryConfig

    Packages that use DefinitionsFactoryConfig
    org.apache.struts.tiles
    The Tiles taglib and framework allows building web pages by assembling reusable pieces of pages, called Tiles. 
    org.apache.struts.tiles.definition   
     

    Uses of DefinitionsFactoryConfig in org.apache.struts.tiles
     

    Methods in org.apache.struts.tiles that return DefinitionsFactoryConfig
     DefinitionsFactoryConfig DefinitionsFactory.getConfig()
              Get factory configuration.
    protected  DefinitionsFactoryConfig TilesPlugin.readFactoryConfig(ActionServlet servlet, ModuleConfig config)
              Create FactoryConfig and initialize it from web.xml and struts-config.xml.
    protected static DefinitionsFactoryConfig DefinitionsUtil.readFactoryConfig(javax.servlet.ServletConfig servletConfig)
              Deprecated. Create FactoryConfig and initialize it from web.xml.
     

    Methods in org.apache.struts.tiles with parameters of type DefinitionsFactoryConfig
    static DefinitionsFactory TilesUtil.createDefinitionsFactory(javax.servlet.ServletContext servletContext, DefinitionsFactoryConfig factoryConfig)
              Create Definition factory from specified configuration object.
     DefinitionsFactory TilesUtilImpl.createDefinitionsFactory(javax.servlet.ServletContext servletContext, DefinitionsFactoryConfig factoryConfig)
              Create Definition factory from specified configuration object.
     void DefinitionsFactory.init(DefinitionsFactoryConfig config, javax.servlet.ServletContext servletContext)
              Init definition factory.
     void DefinitionsFactory.setConfig(DefinitionsFactoryConfig config, javax.servlet.ServletContext servletContext)
              Set factory configuration.
    static void DefinitionsUtil.populateDefinitionsFactoryConfig(DefinitionsFactoryConfig factoryConfig, javax.servlet.ServletConfig servletConfig)
              Deprecated. Populate Definition Factory Config from web.xml properties.
     

    Uses of DefinitionsFactoryConfig in org.apache.struts.tiles.definition
     

    Fields in org.apache.struts.tiles.definition declared as DefinitionsFactoryConfig
    private  DefinitionsFactoryConfig ComponentDefinitionsFactoryWrapper.config
              Factory configuration
     

    Methods in org.apache.struts.tiles.definition that return DefinitionsFactoryConfig
     DefinitionsFactoryConfig ComponentDefinitionsFactoryWrapper.getConfig()
              Get underlying factory configuration.
     

    Methods in org.apache.struts.tiles.definition with parameters of type DefinitionsFactoryConfig
     void ComponentDefinitionsFactoryWrapper.init(DefinitionsFactoryConfig config, javax.servlet.ServletContext servletContext)
              Call underlying factory init method.
     void ComponentDefinitionsFactoryWrapper.setConfig(DefinitionsFactoryConfig config, javax.servlet.ServletContext servletContext)
              Set underlying factory configuration.
    static java.util.Map ComponentDefinitionsFactoryWrapper.createConfigMap(DefinitionsFactoryConfig config)
              Create map of configuration attributes from configuration object.
     



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015210423140533011315 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/DefinitionsFactoryException.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/DefinitionsFactoryException0000644000175000017500000011506010404045244033776 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.DefinitionsFactoryException (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.DefinitionsFactoryException

    Packages that use DefinitionsFactoryException
    org.apache.struts.tiles
    The Tiles taglib and framework allows building web pages by assembling reusable pieces of pages, called Tiles. 
    org.apache.struts.tiles.definition   
    org.apache.struts.tiles.xmlDefinition   
     

    Uses of DefinitionsFactoryException in org.apache.struts.tiles
     

    Subclasses of DefinitionsFactoryException in org.apache.struts.tiles
     class FactoryNotFoundException
              Exception thrown when definitions factory is not found.
     class NoSuchDefinitionException
              Exception thrown when a definition is not found.
     

    Methods in org.apache.struts.tiles that throw DefinitionsFactoryException
    static DefinitionsFactory TilesUtil.createDefinitionsFactory(javax.servlet.ServletContext servletContext, DefinitionsFactoryConfig factoryConfig)
              Create Definition factory from specified configuration object.
    static ComponentDefinition TilesUtil.getDefinition(java.lang.String definitionName, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Get a definition by its name.
     ComponentDefinition ComponentDefinitionsFactory.getDefinition(java.lang.String name, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Deprecated. Get a definition by its name.
     void ComponentDefinitionsFactory.initFactory(javax.servlet.ServletContext servletContext, java.util.Map properties)
              Deprecated. Init factory.
     DefinitionsFactory TilesUtilImpl.createDefinitionsFactory(javax.servlet.ServletContext servletContext, DefinitionsFactoryConfig factoryConfig)
              Create Definition factory from specified configuration object.
    protected  DefinitionsFactory TilesUtilImpl.createDefinitionFactoryInstance(java.lang.String classname)
              Create Definition factory of specified classname.
     ComponentDefinition DefinitionsFactory.getDefinition(java.lang.String name, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Get a definition by its name.
     void DefinitionsFactory.init(DefinitionsFactoryConfig config, javax.servlet.ServletContext servletContext)
              Init definition factory.
     void DefinitionsFactory.setConfig(DefinitionsFactoryConfig config, javax.servlet.ServletContext servletContext)
              Set factory configuration.
    static DefinitionsFactory DefinitionsUtil.createDefinitionsFactory(javax.servlet.ServletContext servletContext, java.util.Map properties, java.lang.String classname)
              Deprecated. Use createDefinitionsFactory(ServletContext servletContext, ServletConfig servletConfig)
    static DefinitionsFactory DefinitionsUtil.createDefinitionsFactory(javax.servlet.ServletContext servletContext, java.util.Map properties)
              Deprecated. Create default Definition factory.
    static DefinitionsFactory DefinitionsUtil.createDefinitionsFactory(javax.servlet.ServletContext servletContext, javax.servlet.ServletConfig servletConfig)
              Deprecated. Create Definition factory.
    static DefinitionsFactory DefinitionsUtil.createDefinitionsFactory(javax.servlet.ServletContext servletContext, javax.servlet.ServletConfig servletConfig, boolean checkIfExist)
              Deprecated. Create Definition factory.
    static DefinitionsFactory DefinitionsUtil.createDefinitionFactoryInstance(java.lang.String classname)
              Deprecated. No direct replacement. Use createDefinitionFactory TilesUtil.createDefinitionsFactory(ServletContext, DefinitionsFactoryConfig).
    static ComponentDefinition DefinitionsUtil.getDefinition(java.lang.String definitionName, javax.servlet.jsp.PageContext pageContext)
              Deprecated. Use TilesUtil.getDefinition(String, ServletRequest, ServletContext)
    protected static DefinitionsFactoryConfig DefinitionsUtil.readFactoryConfig(javax.servlet.ServletConfig servletConfig)
              Deprecated. Create FactoryConfig and initialize it from web.xml.
     

    Uses of DefinitionsFactoryException in org.apache.struts.tiles.definition
     

    Methods in org.apache.struts.tiles.definition that throw DefinitionsFactoryException
     ComponentDefinition ComponentDefinitionsFactoryWrapper.getDefinition(java.lang.String name, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Get requested definition.
     void ComponentDefinitionsFactoryWrapper.init(DefinitionsFactoryConfig config, javax.servlet.ServletContext servletContext)
              Call underlying factory init method.
     void ComponentDefinitionsFactoryWrapper.setConfig(DefinitionsFactoryConfig config, javax.servlet.ServletContext servletContext)
              Set underlying factory configuration.
    protected  ComponentDefinitionsFactory ComponentDefinitionsFactoryWrapper.createFactoryInstance(java.lang.String classname)
              Create Definition factory from provided classname which must implement ComponentDefinitionsFactory.
     ComponentDefinitionsFactory ReloadableDefinitionsFactory.createFactoryFromClassname(javax.servlet.ServletContext servletContext, java.util.Map properties, java.lang.String classname)
              Create Definition factory from provided classname.
     ComponentDefinitionsFactory ReloadableDefinitionsFactory.createDefaultFactory(javax.servlet.ServletContext servletContext, java.util.Map properties)
              Create default Definition factory.
     ComponentDefinitionsFactory ReloadableDefinitionsFactory.createFactory(javax.servlet.ServletContext servletContext, java.util.Map properties)
              Create Definition factory.
     ComponentDefinition ReloadableDefinitionsFactory.getDefinition(java.lang.String definitionName, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Get a definition by its name.
     void ReloadableDefinitionsFactory.reload(javax.servlet.ServletContext servletContext)
              Reload underlying factory.
     void ReloadableDefinitionsFactory.initFactory(javax.servlet.ServletContext servletContext, java.util.Map properties)
              Init factory.
     

    Constructors in org.apache.struts.tiles.definition that throw DefinitionsFactoryException
    ReloadableDefinitionsFactory(javax.servlet.ServletContext servletContext, javax.servlet.ServletConfig servletConfig)
              Constructor.
    ReloadableDefinitionsFactory(javax.servlet.ServletContext servletContext, java.util.Map properties)
              Constructor.
     

    Uses of DefinitionsFactoryException in org.apache.struts.tiles.xmlDefinition
     

    Methods in org.apache.struts.tiles.xmlDefinition that throw DefinitionsFactoryException
     void I18nFactorySet.initFactory(javax.servlet.ServletContext servletContext, java.util.Map properties)
              Initialization method.
    protected  void I18nFactorySet.initFactory(javax.servlet.ServletContext servletContext, java.lang.String proposedFilename)
              Initialization method.
    protected  DefinitionsFactory I18nFactorySet.createDefaultFactory(javax.servlet.ServletContext servletContext)
              Create default factory .
    protected  DefinitionsFactory I18nFactorySet.createFactory(java.lang.Object key, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Create a factory for specified key.
    private  XmlDefinitionsSet I18nFactorySet.parseXmlFiles(javax.servlet.ServletContext servletContext, java.lang.String postfix, XmlDefinitionsSet xmlDefinitions)
              Parse files associated to postix if they exist.
    private  XmlDefinitionsSet I18nFactorySet.parseXmlFile(javax.servlet.ServletContext servletContext, java.lang.String filename, XmlDefinitionsSet xmlDefinitions)
              Parse specified xml file and add definition to specified definitions set.
    protected  DefinitionsFactory FactorySet.getFactory(java.lang.Object key, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Get a factory by its key.
     ComponentDefinition FactorySet.getDefinition(java.lang.String name, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Get a definition by its name.
    protected abstract  DefinitionsFactory FactorySet.createFactory(java.lang.Object key, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Create a factory for specified key.
    abstract  void FactorySet.initFactory(javax.servlet.ServletContext servletContext, java.util.Map properties)
              Init factory set.
     ComponentDefinition DefinitionsFactory.getDefinition(java.lang.String name, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Get a definition by its name.
     

    Constructors in org.apache.struts.tiles.xmlDefinition that throw DefinitionsFactoryException
    I18nFactorySet(javax.servlet.ServletContext servletContext, java.util.Map properties)
              Constructor.
     



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000016310423140533011317 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/DefinitionsUtil.ServletPropertiesMap.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/DefinitionsUtil.ServletProp0000644000175000017500000001306410404045244033712 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.DefinitionsUtil.ServletPropertiesMap (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.DefinitionsUtil.ServletPropertiesMap

    No usage of org.apache.struts.tiles.DefinitionsUtil.ServletPropertiesMap



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/DefinitionsUtil.html0000644000175000017500000001261410404045222032365 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.DefinitionsUtil (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.DefinitionsUtil

    No usage of org.apache.struts.tiles.DefinitionsUtil



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/DirectStringAttribute.html0000644000175000017500000001267410404045212033546 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.DirectStringAttribute (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.DirectStringAttribute

    No usage of org.apache.struts.tiles.DirectStringAttribute



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/EmptyIterator.html0000644000175000017500000001257410404045210032066 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.EmptyIterator (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.EmptyIterator

    No usage of org.apache.struts.tiles.EmptyIterator



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000014710423140533011321 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/FactoryNotFoundException.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/FactoryNotFoundException.ht0000644000175000017500000002435510404045224033675 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.FactoryNotFoundException (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.FactoryNotFoundException

    Packages that use FactoryNotFoundException
    org.apache.struts.tiles
    The Tiles taglib and framework allows building web pages by assembling reusable pieces of pages, called Tiles. 
    org.apache.struts.tiles.definition   
     

    Uses of FactoryNotFoundException in org.apache.struts.tiles
     

    Methods in org.apache.struts.tiles that throw FactoryNotFoundException
    static ComponentDefinition TilesUtil.getDefinition(java.lang.String definitionName, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Get a definition by its name.
    static ComponentDefinition DefinitionsUtil.getDefinition(java.lang.String definitionName, javax.servlet.jsp.PageContext pageContext)
              Deprecated. Use TilesUtil.getDefinition(String, ServletRequest, ServletContext)
     

    Uses of FactoryNotFoundException in org.apache.struts.tiles.definition
     

    Methods in org.apache.struts.tiles.definition that throw FactoryNotFoundException
     ComponentDefinition ReloadableDefinitionsFactory.getDefinition(java.lang.String definitionName, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Get a definition by its name.
     



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015010423140533011313 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/NoSuchDefinitionException.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/NoSuchDefinitionException.h0000644000175000017500000003510010404045224033623 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.NoSuchDefinitionException (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.NoSuchDefinitionException

    Packages that use NoSuchDefinitionException
    org.apache.struts.tiles
    The Tiles taglib and framework allows building web pages by assembling reusable pieces of pages, called Tiles. 
    org.apache.struts.tiles.definition   
    org.apache.struts.tiles.xmlDefinition   
     

    Uses of NoSuchDefinitionException in org.apache.struts.tiles
     

    Methods in org.apache.struts.tiles that throw NoSuchDefinitionException
     ComponentDefinition ComponentDefinitionsFactory.getDefinition(java.lang.String name, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Deprecated. Get a definition by its name.
     ComponentDefinition DefinitionsFactory.getDefinition(java.lang.String name, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Get a definition by its name.
     

    Uses of NoSuchDefinitionException in org.apache.struts.tiles.definition
     

    Methods in org.apache.struts.tiles.definition that throw NoSuchDefinitionException
     ComponentDefinition ComponentDefinitionsFactoryWrapper.getDefinition(java.lang.String name, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Get requested definition.
     

    Uses of NoSuchDefinitionException in org.apache.struts.tiles.xmlDefinition
     

    Methods in org.apache.struts.tiles.xmlDefinition that throw NoSuchDefinitionException
     void XmlDefinitionsSet.resolveInheritances()
              Resolve extended instances.
     void XmlDefinition.resolveInheritance(XmlDefinitionsSet definitionsSet)
              Resolve inheritance.
     ComponentDefinition FactorySet.getDefinition(java.lang.String name, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Get a definition by its name.
     ComponentDefinition DefinitionsFactory.getDefinition(java.lang.String name, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Get a definition by its name.
     

    Constructors in org.apache.struts.tiles.xmlDefinition that throw NoSuchDefinitionException
    DefinitionsFactory(XmlDefinitionsSet xmlDefinitions)
              Constructor.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/PathAttribute.html0000644000175000017500000001257410404045206032043 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.PathAttribute (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.PathAttribute

    No usage of org.apache.struts.tiles.PathAttribute



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/TilesException.html0000644000175000017500000001771110404045242032220 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.TilesException (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.TilesException

    Packages that use TilesException
    org.apache.struts.tiles
    The Tiles taglib and framework allows building web pages by assembling reusable pieces of pages, called Tiles. 
     

    Uses of TilesException in org.apache.struts.tiles
     

    Subclasses of TilesException in org.apache.struts.tiles
     class DefinitionsFactoryException
              Exception thrown when an error occurs while the factory tries to create a new instance mapper.
     class FactoryNotFoundException
              Exception thrown when definitions factory is not found.
     class NoSuchDefinitionException
              Exception thrown when a definition is not found.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/TilesPlugin.html0000644000175000017500000001255410404045214031517 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.TilesPlugin (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.TilesPlugin

    No usage of org.apache.struts.tiles.TilesPlugin



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/TilesRequestProcessor.html0000644000175000017500000001705210404045230033605 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.TilesRequestProcessor (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.TilesRequestProcessor

    Packages that use TilesRequestProcessor
    org.apache.struts.tiles
    The Tiles taglib and framework allows building web pages by assembling reusable pieces of pages, called Tiles. 
     

    Uses of TilesRequestProcessor in org.apache.struts.tiles
     

    Methods in org.apache.struts.tiles that return TilesRequestProcessor
    protected  TilesRequestProcessor TilesUtilStrutsModulesImpl.getRequestProcessor(javax.servlet.http.HttpServletRequest request, javax.servlet.ServletContext servletContext)
              Get Tiles RequestProcessor associated to the current module.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/TilesServlet.html0000644000175000017500000001256410404045236031712 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.TilesServlet (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.TilesServlet

    No usage of org.apache.struts.tiles.TilesServlet



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/TilesUtil.html0000644000175000017500000001637410404045230031200 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.TilesUtil (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.TilesUtil

    Packages that use TilesUtil
    org.apache.struts.tiles
    The Tiles taglib and framework allows building web pages by assembling reusable pieces of pages, called Tiles. 
     

    Uses of TilesUtil in org.apache.struts.tiles
     

    Subclasses of TilesUtil in org.apache.struts.tiles
     class DefinitionsUtil
              Deprecated. Use createDefinitionsFactory(ServletContext, DefinitionsFactoryConfig)
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/TilesUtilImpl.html0000644000175000017500000002414310404045222032014 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.TilesUtilImpl (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.TilesUtilImpl

    Packages that use TilesUtilImpl
    org.apache.struts.tiles
    The Tiles taglib and framework allows building web pages by assembling reusable pieces of pages, called Tiles. 
     

    Uses of TilesUtilImpl in org.apache.struts.tiles
     

    Subclasses of TilesUtilImpl in org.apache.struts.tiles
     class TilesUtilStrutsImpl
              TilesUtil implementation for Struts 1.1 with one single factory.
     class TilesUtilStrutsModulesImpl
              Implementation of TilesUtil for Struts multi modules.
     

    Fields in org.apache.struts.tiles declared as TilesUtilImpl
    protected static TilesUtilImpl TilesUtil.tilesUtilImpl
              The implementation of tilesUtilImpl
     

    Methods in org.apache.struts.tiles that return TilesUtilImpl
    static TilesUtilImpl TilesUtil.getTilesUtil()
              Get the real implementation.
     

    Methods in org.apache.struts.tiles with parameters of type TilesUtilImpl
    static void TilesUtil.setTilesUtil(TilesUtilImpl tilesUtil)
              Set the real implementation.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/TilesUtilStrutsImpl.html0000644000175000017500000001625210404045244033247 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.TilesUtilStrutsImpl (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.TilesUtilStrutsImpl

    Packages that use TilesUtilStrutsImpl
    org.apache.struts.tiles
    The Tiles taglib and framework allows building web pages by assembling reusable pieces of pages, called Tiles. 
     

    Uses of TilesUtilStrutsImpl in org.apache.struts.tiles
     

    Subclasses of TilesUtilStrutsImpl in org.apache.struts.tiles
     class TilesUtilStrutsModulesImpl
              Implementation of TilesUtil for Struts multi modules.
     



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015110423140533011314 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/TilesUtilStrutsModulesImpl.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/TilesUtilStrutsModulesImpl.0000644000175000017500000001274410404045174033717 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.TilesUtilStrutsModulesImpl (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.TilesUtilStrutsModulesImpl

    No usage of org.apache.struts.tiles.TilesUtilStrutsModulesImpl



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/UntyppedAttribute.html0000644000175000017500000002031010404045242032742 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.UntyppedAttribute (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.UntyppedAttribute

    Packages that use UntyppedAttribute
    org.apache.struts.tiles
    The Tiles taglib and framework allows building web pages by assembling reusable pieces of pages, called Tiles. 
     

    Uses of UntyppedAttribute in org.apache.struts.tiles
     

    Subclasses of UntyppedAttribute in org.apache.struts.tiles
     class DefinitionAttribute
              Attribute representing a Component Definition.
     class DefinitionNameAttribute
              Component attribute.
     class DirectStringAttribute
              Component attribute.
     class PathAttribute
              Component attribute.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/class-use/UrlController.html0000644000175000017500000001257410404045212032066 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.UrlController (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.UrlController

    No usage of org.apache.struts.tiles.UrlController



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/definition/0000755000175000017500000000000010423130301026605 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/definition/class-use/0000755000175000017500000000000010423130301030504 5ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000017410423140533011321 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/definition/class-use/ComponentDefinitionsFactoryWrapper.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/definition/class-use/ComponentDefinit0000644000175000017500000001323110404045232033703 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.definition.ComponentDefinitionsFactoryWrapper (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.definition.ComponentDefinitionsFactoryWrapper

    No usage of org.apache.struts.tiles.definition.ComponentDefinitionsFactoryWrapper



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000021310423140533011313 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/definition/class-use/ReloadableDefinitionsFactory.ServletPropertiesMap.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/definition/class-use/ReloadableDefini0000644000175000017500000001342110404045210033604 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.definition.ReloadableDefinitionsFactory.ServletPropertiesMap (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.definition.ReloadableDefinitionsFactory.ServletPropertiesMap

    No usage of org.apache.struts.tiles.definition.ReloadableDefinitionsFactory.ServletPropertiesMap



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000016610423140533011322 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/definition/class-use/ReloadableDefinitionsFactory.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/definition/class-use/ReloadableDefini0000644000175000017500000001315110404045246033615 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.definition.ReloadableDefinitionsFactory (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.definition.ReloadableDefinitionsFactory

    No usage of org.apache.struts.tiles.definition.ReloadableDefinitionsFactory



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000016210423140533011316 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/definition/ComponentDefinitionsFactoryWrapper.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/definition/ComponentDefinitionsFactor0000644000175000017500000006455510404045244034056 0ustar arnaudarnaud00000000000000 ComponentDefinitionsFactoryWrapper (Apache Struts API Documentation)

    org.apache.struts.tiles.definition
    Class ComponentDefinitionsFactoryWrapper

    java.lang.Object
      |
      +--org.apache.struts.tiles.definition.ComponentDefinitionsFactoryWrapper
    
    All Implemented Interfaces:
    DefinitionsFactory, java.io.Serializable

    public class ComponentDefinitionsFactoryWrapper
    extends java.lang.Object
    implements DefinitionsFactory

    Wrapper from new definition factory interface to old interface. This class provides mapping from the old interface's life cycle to the new life cycle.

    Since:
    20020708
    Author:
    Cedric Dumoulin
    See Also:
    Serialized Form

    Field Summary
    private  DefinitionsFactoryConfig config
              Factory configuration
    private  ComponentDefinitionsFactory factory
              The underlying factory
     
    Constructor Summary
    ComponentDefinitionsFactoryWrapper()
              Constructor.
    ComponentDefinitionsFactoryWrapper(ComponentDefinitionsFactory factory)
              Constructor.
     
    Method Summary
    static java.util.Map createConfigMap(DefinitionsFactoryConfig config)
              Create map of configuration attributes from configuration object.
    protected  ComponentDefinitionsFactory createFactoryInstance(java.lang.String classname)
              Create Definition factory from provided classname which must implement ComponentDefinitionsFactory.
     void destroy()
              Do nothing because old life cycle has no equivalent.
     DefinitionsFactoryConfig getConfig()
              Get underlying factory configuration.
     ComponentDefinition getDefinition(java.lang.String name, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Get requested definition.
     ComponentDefinitionsFactory getInternalFactory()
              Get internal factory.
     void init(DefinitionsFactoryConfig config, javax.servlet.ServletContext servletContext)
              Call underlying factory init method.
     void setConfig(DefinitionsFactoryConfig config, javax.servlet.ServletContext servletContext)
              Set underlying factory configuration.
     java.lang.String toString()
              Return String representation.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
     

    Field Detail

    factory

    private ComponentDefinitionsFactory factory
    The underlying factory


    config

    private DefinitionsFactoryConfig config
    Factory configuration

    Constructor Detail

    ComponentDefinitionsFactoryWrapper

    public ComponentDefinitionsFactoryWrapper(ComponentDefinitionsFactory factory)
    Constructor. Create new wrapper for specified factory.

    Parameters:
    factory - The factory to create a wrapper for.

    ComponentDefinitionsFactoryWrapper

    public ComponentDefinitionsFactoryWrapper()
    Constructor. Create new wrapper. The config object passed to init method should reference a factory implementing ComponentDefinitionsFactory.

    Method Detail

    getDefinition

    public ComponentDefinition getDefinition(java.lang.String name,
                                             javax.servlet.ServletRequest request,
                                             javax.servlet.ServletContext servletContext)
                                      throws NoSuchDefinitionException,
                                             DefinitionsFactoryException
    Get requested definition.

    Specified by:
    getDefinition in interface DefinitionsFactory
    Parameters:
    name - Name of the definition.
    request - The request we are processing.
    servletContext - Our servlet context.
    Returns:
    ComponentDefition
    Throws:
    NoSuchDefinitionException - No definition found for specified name Implementation can throw more accurate exception as a subclass of this exception
    DefinitionsFactoryException - An error occur while getting definition.

    init

    public void init(DefinitionsFactoryConfig config,
                     javax.servlet.ServletContext servletContext)
              throws DefinitionsFactoryException
    Call underlying factory init method.

    Specified by:
    init in interface DefinitionsFactory
    Parameters:
    config - DefinitionsFactoryConfig.
    servletContext - Our servlet context.
    Throws:
    DefinitionsFactoryException - An error occur during initialization.

    destroy

    public void destroy()
    Do nothing because old life cycle has no equivalent.

    Specified by:
    destroy in interface DefinitionsFactory

    setConfig

    public void setConfig(DefinitionsFactoryConfig config,
                          javax.servlet.ServletContext servletContext)
                   throws DefinitionsFactoryException
    Set underlying factory configuration.

    Specified by:
    setConfig in interface DefinitionsFactory
    Parameters:
    config - DefinitionsFactoryConfig to use.
    servletContext - Our servlet context.
    Throws:
    DefinitionsFactoryException - An error occur during initialization.

    getConfig

    public DefinitionsFactoryConfig getConfig()
    Get underlying factory configuration.

    Specified by:
    getConfig in interface DefinitionsFactory
    Returns:
    DefinitionsFactoryConfig.

    getInternalFactory

    public ComponentDefinitionsFactory getInternalFactory()
    Get internal factory.

    Returns:
    The internal ComponentDefitionsFactory.

    createFactoryInstance

    protected ComponentDefinitionsFactory createFactoryInstance(java.lang.String classname)
                                                         throws DefinitionsFactoryException
    Create Definition factory from provided classname which must implement ComponentDefinitionsFactory. Factory class must extend DefinitionsFactory.

    Parameters:
    classname - Class name of the factory to create.
    Returns:
    newly created factory.
    Throws:
    DefinitionsFactoryException - If an error occur while initializing factory

    toString

    public java.lang.String toString()
    Return String representation. Calls toString() on underlying factory.

    Overrides:
    toString in class java.lang.Object
    Returns:
    String representation.

    createConfigMap

    public static java.util.Map createConfigMap(DefinitionsFactoryConfig config)
    Create map of configuration attributes from configuration object. Mapping is done between old names and new names.

    Parameters:
    config - The DefinitionsFactoryConfig to use.
    Returns:
    Map Map of name/value pairs.


    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000020110423140533011310 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/definition/ReloadableDefinitionsFactory.ServletPropertiesMap.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/definition/ReloadableDefinitionsFacto0000644000175000017500000002762210404045212033751 0ustar arnaudarnaud00000000000000 ReloadableDefinitionsFactory.ServletPropertiesMap (Apache Struts API Documentation)

    org.apache.struts.tiles.definition
    Class ReloadableDefinitionsFactory.ServletPropertiesMap

    java.lang.Object
      |
      +--java.util.AbstractMap
            |
            +--java.util.HashMap
                  |
                  +--org.apache.struts.tiles.definition.ReloadableDefinitionsFactory.ServletPropertiesMap
    
    All Implemented Interfaces:
    java.lang.Cloneable, java.util.Map, java.io.Serializable
    Enclosing class:
    ReloadableDefinitionsFactory

    class ReloadableDefinitionsFactory.ServletPropertiesMap
    extends java.util.HashMap

    Inner class. Wrapper for ServletContext init parameters. Object of this class is an HashMap containing parameters and values defined in the servlet config file (web.xml).


    Field Summary
     
    Fields inherited from class java.util.HashMap
     
    Fields inherited from class java.util.AbstractMap
     
    Constructor Summary
    (package private) ReloadableDefinitionsFactory.ServletPropertiesMap(javax.servlet.ServletConfig config)
              Constructor.
     
    Methods inherited from class java.util.HashMap
    clear, clone, containsKey, containsValue, entrySet, get, isEmpty, keySet, put, putAll, remove, size, values
     
    Methods inherited from class java.util.AbstractMap
    equals, hashCode, toString
     
    Methods inherited from class java.lang.Object
    finalize, getClass, notify, notifyAll, wait, wait, wait
     
    Methods inherited from interface java.util.Map
    equals, hashCode
     

    Constructor Detail

    ReloadableDefinitionsFactory.ServletPropertiesMap

    ReloadableDefinitionsFactory.ServletPropertiesMap(javax.servlet.ServletConfig config)
    Constructor.



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015410423140533011317 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/definition/ReloadableDefinitionsFactory.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/definition/ReloadableDefinitionsFacto0000644000175000017500000007244510404045250033756 0ustar arnaudarnaud00000000000000 ReloadableDefinitionsFactory (Apache Struts API Documentation)

    org.apache.struts.tiles.definition
    Class ReloadableDefinitionsFactory

    java.lang.Object
      |
      +--org.apache.struts.tiles.definition.ReloadableDefinitionsFactory
    
    All Implemented Interfaces:
    ComponentDefinitionsFactory, java.io.Serializable

    public class ReloadableDefinitionsFactory
    extends java.lang.Object
    implements ComponentDefinitionsFactory

    A reloadable factory. This factory is the main entrance to any factory implementation. It takes in charge real implementation instance, and allows reloading by creating a new instance.

    Since:
    1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:34:00 +0100 (Fri, 22 Aug 2003) $
    Author:
    Cedric Dumoulin
    See Also:
    Serialized Form

    Nested Class Summary
    (package private)  class ReloadableDefinitionsFactory.ServletPropertiesMap
              Inner class.
     
    Field Summary
    static java.lang.String DEFINITIONS_FACTORY_CLASSNAME
              Name of init property carrying factory class name
    protected  ComponentDefinitionsFactory factory
              The real factory instance
    protected  java.util.Map properties
              Initialization parameters
     
    Constructor Summary
    ReloadableDefinitionsFactory(javax.servlet.ServletContext servletContext, java.util.Map properties)
              Constructor.
    ReloadableDefinitionsFactory(javax.servlet.ServletContext servletContext, javax.servlet.ServletConfig servletConfig)
              Constructor.
     
    Method Summary
     ComponentDefinitionsFactory createDefaultFactory(javax.servlet.ServletContext servletContext, java.util.Map properties)
              Create default Definition factory.
     ComponentDefinitionsFactory createFactory(javax.servlet.ServletContext servletContext, java.util.Map properties)
              Create Definition factory.
     ComponentDefinitionsFactory createFactoryFromClassname(javax.servlet.ServletContext servletContext, java.util.Map properties, java.lang.String classname)
              Create Definition factory from provided classname.
     ComponentDefinition getDefinition(java.lang.String definitionName, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Get a definition by its name.
     ComponentDefinitionsFactory getFactory()
              Get underlying factory instance.
     void initFactory(javax.servlet.ServletContext servletContext, java.util.Map properties)
              Init factory.
     void reload(javax.servlet.ServletContext servletContext)
              Reload underlying factory.
     java.lang.String toString()
              Return String representation.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
     

    Field Detail

    factory

    protected ComponentDefinitionsFactory factory
    The real factory instance


    properties

    protected java.util.Map properties
    Initialization parameters


    DEFINITIONS_FACTORY_CLASSNAME

    public static final java.lang.String DEFINITIONS_FACTORY_CLASSNAME
    Name of init property carrying factory class name

    See Also:
    Constant Field Values
    Constructor Detail

    ReloadableDefinitionsFactory

    public ReloadableDefinitionsFactory(javax.servlet.ServletContext servletContext,
                                        javax.servlet.ServletConfig servletConfig)
                                 throws DefinitionsFactoryException
    Constructor. Create a factory according to servlet settings.

    Parameters:
    servletContext - Our servlet context.
    servletConfig - Our servlet config.
    Throws:
    DefinitionsFactoryException - If factory creation fail.

    ReloadableDefinitionsFactory

    public ReloadableDefinitionsFactory(javax.servlet.ServletContext servletContext,
                                        java.util.Map properties)
                                 throws DefinitionsFactoryException
    Constructor. Create a factory according to servlet settings.

    Parameters:
    servletContext - Our servlet context.
    properties - Map containing all properties.
    Throws:
    DefinitionsFactoryException - If factory creation fail.
    Method Detail

    createFactoryFromClassname

    public ComponentDefinitionsFactory createFactoryFromClassname(javax.servlet.ServletContext servletContext,
                                                                  java.util.Map properties,
                                                                  java.lang.String classname)
                                                           throws DefinitionsFactoryException
    Create Definition factory from provided classname. If a factory class name is provided, a factory of this class is created. Otherwise, a default factory is created. Factory must have a constructor taking ServletContext and Map as parameter.

    Parameters:
    classname - Class name of the factory to create.
    servletContext - Servlet Context passed to newly created factory.
    properties - Map of name/property passed to newly created factory.
    Returns:
    newly created factory.
    Throws:
    DefinitionsFactoryException - If an error occur while initializing factory

    createDefaultFactory

    public ComponentDefinitionsFactory createDefaultFactory(javax.servlet.ServletContext servletContext,
                                                            java.util.Map properties)
                                                     throws DefinitionsFactoryException
    Create default Definition factory. Factory must have a constructor taking ServletContext and Map as parameter. In this implementation, default factory is of class I18nFactorySet

    Parameters:
    servletContext - Servlet Context passed to newly created factory.
    properties - Map of name/property passed to newly created factory.
    Returns:
    newly created factory.
    Throws:
    DefinitionsFactoryException - If an error occur while initializing factory

    createFactory

    public ComponentDefinitionsFactory createFactory(javax.servlet.ServletContext servletContext,
                                                     java.util.Map properties)
                                              throws DefinitionsFactoryException
    Create Definition factory. Convenience method. ServletConfig is wrapped into a Map allowing retrieval of init parameters. Factory classname is also retrieved, as well as debug level. Finally, approriate createDefinitionsFactory() is called.

    Parameters:
    servletContext - Servlet Context passed to newly created factory.
    properties - Map containing all properties.
    DefinitionsFactoryException

    getDefinition

    public ComponentDefinition getDefinition(java.lang.String definitionName,
                                             javax.servlet.ServletRequest request,
                                             javax.servlet.ServletContext servletContext)
                                      throws FactoryNotFoundException,
                                             DefinitionsFactoryException
    Get a definition by its name. Call appropriate method on underlying factory instance. Throw appropriate exception if definition or definition factory is not found.

    Specified by:
    getDefinition in interface ComponentDefinitionsFactory
    Parameters:
    definitionName - Name of requested definition.
    request - Current servlet request.
    servletContext - Current servlet context.
    Throws:
    FactoryNotFoundException - Can't find definition factory.
    DefinitionsFactoryException - General error in factory while getting definition.

    reload

    public void reload(javax.servlet.ServletContext servletContext)
                throws DefinitionsFactoryException
    Reload underlying factory. Reload is done by creating a new factory instance, and replacing the old instance with the new one.

    Parameters:
    servletContext - Current servlet context.
    Throws:
    DefinitionsFactoryException - If factory creation fails.

    getFactory

    public ComponentDefinitionsFactory getFactory()
    Get underlying factory instance.

    Returns:
    ComponentDefinitionsFactory

    initFactory

    public void initFactory(javax.servlet.ServletContext servletContext,
                            java.util.Map properties)
                     throws DefinitionsFactoryException
    Init factory. This method is required by interface ComponentDefinitionsFactory. It is not used in this implementation, as it manages itself the underlying creation and initialization.

    Specified by:
    initFactory in interface ComponentDefinitionsFactory
    Parameters:
    servletContext - Servlet Context passed to newly created factory.
    properties - Map of name/property passed to newly created factory. Map can contain more properties than requested.
    Throws:
    DefinitionsFactoryException - An error occur during initialization.

    toString

    public java.lang.String toString()
    Return String representation.

    Overrides:
    toString in class java.lang.Object
    Returns:
    String representation.


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/definition/package-frame.html0000644000175000017500000000234510404045214032171 0ustar arnaudarnaud00000000000000 org.apache.struts.tiles.definition (Apache Struts API Documentation) org.apache.struts.tiles.definition
    Classes 
    ComponentDefinitionsFactoryWrapper
    ReloadableDefinitionsFactory
    libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/definition/package-summary.html0000644000175000017500000001425610404045230032576 0ustar arnaudarnaud00000000000000 org.apache.struts.tiles.definition (Apache Struts API Documentation)

    Package org.apache.struts.tiles.definition

    Class Summary
    ComponentDefinitionsFactoryWrapper Wrapper from new definition factory interface to old interface.
    ReloadableDefinitionsFactory A reloadable factory.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/definition/package-tree.html0000644000175000017500000001534210404045214032037 0ustar arnaudarnaud00000000000000 org.apache.struts.tiles.definition Class Hierarchy (Apache Struts API Documentation)

    Hierarchy For Package org.apache.struts.tiles.definition

    Package Hierarchies:
    All Packages

    Class Hierarchy



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/definition/package-use.html0000644000175000017500000001231010404045222031663 0ustar arnaudarnaud00000000000000 Uses of Package org.apache.struts.tiles.definition (Apache Struts API Documentation)

    Uses of Package
    org.apache.struts.tiles.definition

    No usage of org.apache.struts.tiles.definition



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/doc-files/0000755000175000017500000000000010423130301026322 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/doc-files/image001.gif0000644000175000017500000000200710404045216030324 0ustar arnaudarnaud00000000000000GIF89a–®w1!þSoftware: Microsoft Office!ù,‘©‚ÿÌÿÿÿÿ™ÿ(ºÜþ0ÊI«½1ºÿ`(Ždižhª®¢Â¾p,Ï´çÖx®ïçÍÿÀ Ì',"rÉÄ)›Ð¨ê)­ZAÔ«VšÝz—ݯX›w峚ÌÜëq7‡Ñãr©nÇ‹Ûw‚„nu„ˆ~Lmp…‘’‚t|ŒF€”—ƒ•ƒ…“™`z#‰’ £¨£ª¤G›«”³‡‹²¯°¦!¢†—¶‡¡˜¸?iÅÈÇȸÊˤÍÎŒÐÑxÓÔkÖ×gÙÚyÝÔÜß^áâZäåVçè\íîïðñòlö÷øùúûüýþÿ (`C½*\È`A]CJœH±â½‡-jÜÈQÿÆ:ŠYñ£Œ$Sªh2Ê•0cækQ¦Í˜4_¼¼ÉsdN;{ ÕøsEСH%’´éDŒ¢<Ãâ´ê†„™8Š/@B¯VabmŒW{t¦ »r,ª©Tû8—-I· à~8‹–ÀZ´ýzœö’]¢eAÚêo-ع÷|¸dbK©Ì6¾y2dÏ•ëÁÜJ³\Δ;ûE]7´Rƒ½†1> º¶áÕ­]3\š‚/ື%×m¢N’¹‰+ä·ÄäÊ2ïÑ1xô݉O^?<}öö°ÝK8ÿÎ3¼iòUÍ^¦úíÓgÏÚ<¾Ó±¥ëÛOŠ5jïýÿü]æ€Há§×ze}Ô%ØÓ{!°ç`GÆ5¡MîuáMÚ°!†Ù ø!N!Ö4b[%w"ŠÆµ"‹½è“€ Š'cJP}ÂÔ3ŽæŠ~£iÀ Lð8lN §ÃpÃì@ŒÍÃ÷KqÅ—à(ÆEl’è¡éÇ ²Yjþ"›T+k5‰ÉÇÂÊ̪ RãÉIŒìÊb·ÔÂ3Î-èœ ÏD— 4ÊG/œôþ.-²ÓUØ+õÔTÏ“;libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/doc-files/tilesUML.gif0000644000175000017500000005354710404045204030533 0ustar arnaudarnaud00000000000000GIF87a‘›÷€€€€€€€€€ÀÀÀÀÜÀ¦Êð@ ` €   À à @ @@@`@€@ @À@à@` `@```€` `À`à`€ €@€`€€€ €À€à€   @ ` €   À à À À@À`À€À ÀÀÀàÀà à@à`à€à àÀààà@ @@@`@€@ @À@à@ @ @@ @` @€ @  @À @à @@@ @@@@@`@@€@@ @@À@@à@@`@ `@@`@``@€`@ `@À`@à`@€@ €@@€@`€@€€@ €@À€@à€@ @  @@ @` @€ @  @À @à @À@ À@@À@`À@€À@ À@ÀÀ@àÀ@à@ à@@à@`à@€à@ à@Àà@àà@€ €@€`€€€ €À€à€ € €@ €` €€ €  €À €à €@€ @€@@€`@€€@€ @€À@€à@€`€ `€@`€``€€`€ `€À`€à`€€€ €€@€€`€€€€€ €€À€€à€€ €  €@ €` €€ €  €À €à €À€ À€@À€`À€€À€ À€ÀÀ€àÀ€à€ à€@à€`à€€à€ à€Àà€àà€À À@À`À€À ÀÀÀàÀ À À@ À` À€ À  ÀÀ Àà À@À @À@@À`@À€@À @ÀÀ@Àà@À`À `À@`À``À€`À `ÀÀ`Àà`À€À €À@€À`€À€€À €ÀÀ€Àà€À À  À@ À` À€ À  ÀÀ Àà ÀÀÀ ÀÀ@ÀÀ`ÀÀ€ÀÀ ÀÀÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ!ù,‘›ÿÿ H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\ɲ¥Ë—0cÊœI³¦Í›8sêÜɳ§ÏŸ@ƒ J´¨Ñ£H“*]Ê´©Ó§P£JJµªÕ«X³jÝÊÕ!€¯` v,Y±Ï¢¨Ö,Y·aá–M{VîW»k¶¥û–o\¿sÙÖ|·«áÈ+^̸§ÚÇ#KžL¹²å˘3kÞ̹³çÏ‹´éÓ¨S«^ͺuaÒ°cËž=ѵíÛ¸sëÞZv^ÚX#¼¸HâÆ“+_œ·óçУKW 9ó¦ÖÓ^ß®1;÷ïàÃã,¾|Hò½ m‘}Võÿà›/¾ýûø/öÍÏ_ÿÿßôLeWZõ=_0!H“‚ñíGz ö'á„2ô_…zåb ¶DÜZ>Ô¡^èaC&¦ôZm"v‡Q^)ZÈ–v6Řá8V·bŽ<º%š%íØ ñ Ù ˆ…‰uW\¡5ùšBêtàXR¶×bF1Â8ˆDFØã—`wa˜*™Ô˜ò¥p&Iâ›GjYä›\Îi§‘tù4e—¦d›ìù‰§“\®¸aYsý™¤¢‚±iè¢6:c”rêõ¤’F^Š$£wF )_ Zº©¤$îh&™¨¦ªÔ†  ª‹‹±ú*œ|Îg¤¢.I宎º÷áR¿YWè“¶Ë)¦tÚêÿ¦Á&{¤±·ÒÊl´s.[d¢}^X¨¥Ôn[m±×ëì·¥:‹k¸¿ÎªîºU…&…«¹zÏï°Ëb¬Q²»fŸÐNËç¦ç‚›§Yæê«²D K-»V;f³´ÖY§BwËðãì¯ÄL6¼_¥lj¬ÀgïÉ(Ÿ)äÜcÐ;0·!Ð\`Á_ `OÊü2&ëºûöK.Æ—ܰ`Ù:q‰ûëW·Øz,-Á o<0\S=4›à.}nÈâbqÓYÃ8qÈSó¬öÚ7mhÏW[tÀS`Ï=ùñÀù8pÁßÔûËP&”¯Éµ *ãBÁ6žøq†Wô³¾L/ì_é´E_üµØœŸy´ÔDC©¹Õ «·y¿\'œõèN M4ëÈ~´Ö“lqålç®»L²¾ó•;ÿ³ÅmØsÍ1ÇqL|ç“OØìÅ ¬‡¤G‡SLãžÚS§—¸'~ÿ*ªˆ.i¾¤~Bú)©ï}®z§‘Óyù¸§OlîµÛ늬×ïÏz—gs˜üFæ?ü¥ëv[#®hW«Ý9ðAÊÞ?’–wØC ÀkÆ0ŽÑ~ OyFà[þvè]àPÓõþÂB@,Nßcœv…¿R-*|ÜÊa Õ§ÃDý)‡(Љ&×>~„{AT£¬õ–jìYÏòá×.EnµITÆÚ!Ò¤ˆEV1ST\!©Ò÷Å/*Té3›{fÄ6º±#D|‡Â¼e cÆFa ä£yGà›¢÷…;Ôk<+¼ÞηÈ+ÞPC=câýÜFG*ò|7,_ #÷«!Jÿ°ˆo„• EÙ¹ÚÑÇ*ã ¥*wGÄØÃ,ûJ„Á~ܱz4Æ?øÁ#< €Î¹ D"­‘`Œá' '§ ‡V¼"2±¸EK" “Ü2¯’Ê6"Q? 'xºÙ¶UšóœIdÈÝÞ17²¡–ÂÆ-õèÁÃGá~€Ü჋É`¨ˆÌº˜*E²óÖ1ÈHƒªÑšÓܦûL)"‰¶ VZ\w&×Jåtô(äĨH_ÕÊ{܃[@À=€@x cÅÈ£.íÙ{úqæ,ð72xerÔ11鸫]i’¤³_ÚZTP15™¥‰Ÿ6CJ¸‘Þk”áV-XV·J"št ÷«=ŒK~°4,ï†ZÕŠKcÌTÊ¡'Ì^àæN´d>5“ÒÔ¨•µÀÚ ñ’Nô«ÿ: ©Rä£åªWP$ÙUUö²œÜYð¼ã0Ô wÖ’jí󨙯yÐ)óöù7 |á Ä<¢P—ØCMSCaÌ“45œG=2W½nb[©ÇZ”*TÍl§CÝêZ÷º–Á¬vÙVR»ÝÃ߈kkeJÚ³¼ó´Àx©LõÈÁ~yGèãDȺþ”wÑ}Pzžÿ«ªüžG|Š.ÏF¶Ý˜+­´ =êu‡½½·­­)L'óüHïÐ7`æ³½{ì Yó( $[ø¼/M­0ŠÓ'×Ôžtž®`3\Ŵɲc¶ŒJ K}ûª¸ÜC™ÏS>¤ôšÔHÍQÑ8Ƙb_$=«æ¢ùÔ¨Öòˆü}ú8¼„s[kdÿc!v¾3<™ìä ïQÄ@†¯nà‚êÅFÑ*Döz°Ê©ÖaÎMZnÕKiØ•Ža’Œég¹N“t¢©·¸ñk¢WÚ¯5ûñÀË>zʆ©ŽœkµáÂížóe ûÿþAuXì3ƒå‹veþ_Æ (Ð!Ðt«ã¶³Efín§íâý9à¸7Îq–@!æ~ÃØì<73ïäÈó ë9ëñYÂGV@½Á„{§w ?pÁ~àœß`ç)üÁcnÔ½ïiÓ¶Ñ™é:„HéŸ6çê'´„cœ?±ë¸Ö·ÁS-ø6³Ù/KÈ^*ï½ï•k„Ùûç¶OkØÖFæH– Làç=×9P£l)1Ú@EG 5ß§P°‘­röcàëNºN4¡†r]àñ“M®[þòMå+°æ/„z±Í)‰}Iúù.¯µ+ïcM98„Û4´5ý÷Ï]à»` ¸€|öÿw¥MáR•v´£.fæS\ú·’/;S.PWl´ú)ß=Ì[ÿúØì½B̽`{Üá°‚ØoöËA:/§Áf»EÌ~?†0y§ï‡t~Ùû¹MLßsòñ©(ˆ‹O0È'€viÞ6x¸E½•EØHkT>ûsPŽ€È*ûׇ}¸%¢}êÄ}æ–30óo0~ L!d}dùpèBë'htv.P5Xl0#t¼w5G06}XöƒŽ5!ÈF¸ý— ¸„_·fðFPB[æ—S¿tCI C ×ð (¤`榃øÂƒ51>¦c呆“U!—q„px}ILX‡æ¦3vX‡·ƒXÇQ8hbcq8ˆHø‡d†ghˆ„¸]ˆ¸ˆŽ˜YÆ…]’8‰”X‰•á#xy˜‰œ8`ŠèF›èqŸ¨2"2ø0²K(©ØŠ¥¨Ši¨øŠ®8‹¶8‡óЏ‹@3ŠF¤‹AŒÿ`B`¼8yÅxŒ—…‹è$Œ(¡ŒæDŒÈ„Ñ8#õ3…C1̨_õeÁwuˆ³P×TQA2„˜9"}»hŽÔ¸Ž—=D&9ÜøU} å‹QyبކÅÈì¹èŽˆå[=„\Ñ„%(ˆ‰á*¢ö=–ÖE5„.áèEžŽe3TRäBÉ•›ähÅ•N–:Ó™’ãD ’Du+?¤IÓÄÒ¦L„%qÏ'qئC;¹x……T†õ[Œ¤XŠ“¹8f’ш’*ù”ÌaŠC§ˆ5€¥‘XEm×|å"5¦yN““‘Ô•òCÕtš"\õwmúÈLN™qfùP9—]Eÿñ’€q–€ˆöø“ÒÒDÇ}ªs‚@Me5è!:Ii•–iW’G¥†Åõ–ù"MI—˜ù‹,I5Cé’k¹\cV‘J|ЧPÑçxZ 2d)yS·X‡ÙE® UW%™“ÛY`ÞA™«„›™¹›|Ètœ›ITÀ)Ã÷—7éx~É•ÞÂ1:ImÅNd4“Wœ 9Æ8x˜U„rɛܩ6RYŽ<U£æšÇåh‰§m,$‘Ñ–aã˜Âµ€4EœF›f”i¼FÔ™m86$™°è‹¨›Ý9 [áŒ3†üIŽZ! ùˆ x™È :¡íâ Óõ D$¡¤T ÊJ©¡¢Ò¡¹¢þa¢.ö¡"º¢ab ¹y.ú¢ìˆ¢,Z£DA(–˜£:º£Öå:F£¿h£BÚ$: 1¿ªJ@ AI:¤LÊEÚGÚU*Ú¤TJyOÊQúFK*]UÚ¥æ!•Õ ó—Î5¦õ¹¥v¥Þ9¥^Ú¦ßñ§cÆ•BH“Ä‡Žžˆ¦ãĦnڧ˧ø©()§×¶•ˆi¦wªp¬¤¦‚¸Žzê§z›¹HgI”A`Y—tÍI%Z’†ÚŸº¡º¦‘Zª‰6©™Ÿb-Cu«™© @£ŠJŒš2³j«¦š«Ç†ªÖĘV⮊.Ä56žª™”·êQ|ª«ÊÊw¼j©H@^YuÓ§š''“¥ ˜¬Ëº­¸™ª*žÕùÊi.ÁÊ”G§ºƒ­Þ¤­ÜÚ® º‘¨\åÉ8ÆÕïÉž½’–“¦®çX«dÆ®î°þç¯tɯJ °›°JC°si°‡ˆ° ±¤¨°Ë¥Ž*±»°Çºqë¡3š± »*ñÊ£$[²&Ë>Œšck/+²¥Ú± ³% ±.[³~ײá&³ÜE³6Û³‰ˆ³©¦³k´¥æ³F›lðІÙİþI´¾Á³Gµ¢( µ%N;ŒL 4P+µ\ËWÍ C ¶Lb”T9¨O%‡Y«.W›*kÛµ+ ¨Œå™ƒÂ(që€3‰yBKªë¶|›bT[© x‘B9œr[ˆm ˆ[Û·ŠËp+¨áyP€K¸u¸ô‘¶Eû±‹›¹]‡•š- YIrK˜·J”«¹» §ß*º•D¶“k©ÖGº¸Š¹¨[»Øc—‘xŸbkL »» »–ûm´k»Ä‹%L¼K‰¼l›¸ÅÛ¼nùÊk`²û¯Ãë¼Ö[ÑÛ”ÙK&§û%Ý{½º½Ç8½^Ô»·à{¾Ú®|i›ù½èkºâ›Žñë½íû¾ö ¯Üº¾ì˼÷ë¼¥©ÿ«²õÛ¿l‘ ¡K9À¼À¦x²üÀ¼9«À ¼À|ÁœÁü£\Á ¬Á Â;bÚqîË#%ìÁ(œÂ+qÂ8ÂÂ*üÂ0 .l="œÁ1|Ã8\Nëʽ9ÜÃ>ì3üAlCüÃF|ÀÙÊÃG¼ÄLŒ=I<]Qs ,ÃSœ M|ÅXìeÛ†³Mþ˜]£ÃY<ÆÙdœ•+„™Ê\+– àSÆnüÆÖZ¾š9Ȫcª?•FPÔLø ‘š–‘ ¹4p<ÈY\Ä]†Æ³9Ï×$““ܖœ3ÔžQ÷“ŠL)„|ÉXlÈ;áB²BÇ€Y|«x®ã5wIxž+˜ÆÉxŠÉ¬¬Âš\%ˆ\|»Õ:üÓx÷è|¦LIf£|×ÙʾüÁO<ǼrqÍWËŠ·© jx8¬½üËÎ|¿¯ÌÆèÉ<4aùLJ´œå¢qũͩIÌÏήÌý9Pëã$uÌ,´>vëÇg4FúZ€'ÎôKLÀÑ<ŽÑhõ¼Ïý{Ïb ËÐÅÏý¾þ܃›<¿:Ð M¼}†ä³Ð]¼ ÝÆôÑ­¹=5¬ÁÝÑŠ›ÑÒ"„#]Ò&5 'Ò*„+ÝÒ.½u ýÒ2=ÓPÓ4}Ó8m6Ó<ÝÓ‡ìÓ@ÔR*ÔD]ÔkÔHÔ1,«ÔLÝÔËëÔPÕ7²ÓR]ÕVÝÌWÕZý´[ÝÕ^-&_ÖbMT=ÖfÓe}Öj0-Ói½Ön­ÒmýÖr=Òq=×v}Ñu}×z­Ðy½×~]Ï}ýׂíÌ=؆Ʌ}ØŠ?ýƉ½ØŽ]ÈÙv½Ñ’!Ù–½Ò·ÚØ—½ÙšÙœýÙ!íÙ =Ú}”µÊäQ GIÚ¬Í×5ÖÅÄÉÓÚ´„ ؽœÆY‰6`\Û¼ýÌ‚l[£¯||\Ÿ®uÚÛÈ ÙÇ½Ë ä—ßül{ ÜÉ=ÝnÌÉäÉ“—8Ù“7¦ÙÔýÝ„øÛCèÜ9–Û]­õÞêýÃâm–ä}x¨©8èèÝë]ߨ×ÞËüȪ¼Èbƒ®émß>Ηê[çÌÎè0 à 8žÂ(ùÅÒÝà^Á~ÜX=áî¿B<‡ôáÎÁúüá"NÐ\6â&¾”'¾â,Þâ.þâ0ã2>ã4^ã6~ã8žã:¾ã<Þã>þã@äB>äD^äF ~äHžäJ¾äLÞäNþäPåR>åT^åV~åXžåZ¾å\Þå^þå`æb>æd^æf~æhžæj¾ælÞænþæpçr>çt^çv~çxžçz¾ç|Þç~þç€è‚>è„^è†~舞芾èŒÞèŽþèé’>é”^é–~阞难éœÞéžþé ê¢>ê¤^ê¦~ê¨Bžêª¾ê¬Þê\—â°Þ®ŽèijNë•U뷾׺îq»nèÿ‡Ï‘Y¦“–N«:›¿è(zpIãpfìß0ù8ÐdáÉç^çøÏÓn’± Ê–¹ÊÓÞÝÕ>è×NXÙœ€ îØÒD…¸“R†t mV—îc»ÎÍFŸá®çãN©úÌÉ`üt8ɪ±ÈpÑž0ßïdšïú^ðî=m¦I2Ù};Ÿ\¨×ü9 %ñ¡L­œ î ÿçûŽà…ÇÈ#™ÊÕlÍS÷?eFÇ?ÌÿbËÿñ}òÐÚ•†Ù=¿]óíýœ+ïòÏÇ/Ï@Ý.ó{Nó×\®æñ:ßÈÆl|ï“N/–ÍÍ©£ƒ”qLônì1máEgZFžfŸî.žƒRDZù6Äi 'ÏXéíXlŸõ—»Í;o_ôq_â`¦ÑþŸ|_‹¬H‹€‹§ø÷‚/‹„øƒŸø‘ÖÕª}¬.J¾øNè½nÅ[=ùe²÷û«Õ–¯"˜ÏˆŒë ÿ_1 ù¾>äV_÷Å1ô£´ù£úª¯¸Ãú>ìnÿ?çxš’}øˆoøŠÀO¾?ü?â÷¿/üÁ¿ŠÇ¯üÄüÎ?Õ³ ÝLcõîÎïŽ|á¾=Æ}Eî:©-‰ÊõÍn÷ԎزŸ¢2ÏÒªÎ^qùj®·¿æêOÏk›ÖKÊŒÝoq£é1Pתàß@‚D˜PáB† &<øPâDŠ-^ĘQãFŽ=~RäH’%MžÌ"J–-]¾„ÙR¥Lƒ ÎŒ9gNž wš¼i³fOŠ?‰Ú<ªçÐ6-¸áÁ§ÿ–*dZÐhR©\½~VìX²eÍ64ºõìZ¶mª%¹nT«kçºíx)ÚŠTí⵨÷è†Îªu¡Öøt¦ßÃU/œ42`Ê•-_Æœ™«\Í=çœü2]Ÿ}9ŽûÙch¾XI.z¶HÖ5Å]“in§CoúÎÔsmÕÅGž|°DâÊß™µ©JÅTwû¶š˜÷Ôà×±6ïúœ¹ÐïS£ïíW÷v­Ô½Coþx|ñõ ÛÇŸ_ÿÿ~ýpéóP²¤Ëεì+ì7ù£«°á ¨Õ–ºêÀÆHS°A /=„ÐΓÈ̳Ï3;ôsO@×´QG…4R©”´ÒïKªÄΓÊLLýÓÒÕhÄPÓO¹ü4ÕÇ µUW_…5V¢(•ÖírkÏBmDOÇk½u½\wô2ÃBu­5Ye—e¶Yœ…6JZ›vÄjݺÑ,™;¶ÈZ¼6ZqÇ…2\rϵÍDsù[÷¥Èz#ËAµR65*±]t÷ÿåwÌ~«Ô·¿IE ˜%TKã1,AMx<S©à'¦øáŠ•lUb±4ž2ÄKïÍUSëÎs¯:_³.Ñôx5L;’$öÁ][>yfbwR»Ÿ8¾¸gŸñýùEžŸÚ«¢“;:ºCETWì¼ljL¥^˜f×SA˜¾:fCSE9S„ƒ&»ìž’6{ÖŒ¶í‡Á­·T°·VµA=]ÐX=Ü»iEéUYnê@f:mÃß qvgËíâÏki†ëöÛS!+¿7ð¯éÆçï° ROS[c¼tÓ;=¿Ú&£·/•"0óe·}«Û†'‡=CG®—sÁû¦ü÷?«¶ó¯E|7¾P«9%=uçŸ'úÇ¿ ­¹Òº½Óg¡hܳ‡8zVÛœWîåã{sæiÞôµâ¯F,ùôËļýåÔ>ýÁ߾غÿ^ ÷7ï]im ùwÖ@®3Ý*–Î,ä²±'X.£]±Æ\EpW$“%BñõÏ„ÿˆsà -&š•AH(Ö*Ȫ¶‚aCÎb0Ñt)e6”™§f²îéX$ŒÙël©"M…O4]¡¨‘ë™/e1LßùÖ¼‘¹PkQÝØ„ÖÃmH†0lÙÖ¨Ö¯iqnȪš¤¤hœ9NÑŽÒº#‰2HC+–Q}¼²ŸÝ¤æFß/núáA•Hùý‘Ú3ýr¶ñÍI‘LÜa5ù¯:n’ŒøÒØI7Ù-’‹¤d%Ä»¸iî‘Á#¥çàÆ>3þÓd'=¹K'ò’Z’žßŒˆÊ…L’5zß÷t9(`“”K&ªŽùÌûůyªYfÛ|¹M`q[À$Ž`ü6Õ=dÉ~`!­6NTŠ1B¬_:‰i*uÎï™ :g¨2©ÀʼîHÜ#Üþ)¶Gw€$h@êOƒ”¡]ÌBš3oVô€Õ¯CÁ3’°@#ûàCm¶A’b°WÌd6K"˜=:­¤93éQ*DÛùóf„'81ºSžêO¥›üi“اòõÔ¨G}í_Pó¨Ôž1u9ŸDjT¥Ê8§N±ªSµË>±ºU®¦íªOüjWÅ:V²Ž5¬eEkZÕºV¶n¯­4iA!:ˉʦ«DZ×–ZK¯ Ík`ù*ؽ°ƒè[»XK2ÖZütld%;YNRv?´lf5»Yîq¶c ôlhEW;Z9•´Ã¹ä—¨h½å+[YËþeþ6æ¾V1ÂdV²™áLäfêôWát犩7gÅž¹¬~Æ/l£—D¢qf†æÚIË„ ê0Œ„†.Ÿ³,gISFÐ…«Hi Æ,ê-•¯ìèƒ4ý²ºÒv2µXSßDîpgÀ{%!ïkA>ÚxѼæ©ÿLi]·åÒ“ëÜ<' ËHÞÓŒ§,u¯'=åUÃ÷×Ò„u=“×Na oÈÆ]³•M>^o;£ f°E-lk²µäæ igo®÷TÛX}wz¹ ØJð†.¥© ;øeºÈßù¾¢"ãÝnlõØàG¸]­;ðð¬È 'xºìqöFü¸jKÅ-/WãƒJxÈE>r’—\Ç$:›VU·ñÒõ÷ãóí×Ë7ƒò*³…+²iu‡5f6<æ7N´dn󙛿~*ÏaJ^gê=b@ É¥>uª'œèP×ùÒ¦sà"w»N§ Î/y¤\¯®¯ Çlîz~ÿu¶»K§Ð>ô g)²[ ËÕ>ç×»ÀÝ:vR/Íê +eWÇmo˜›cµ¤k©Î6Þ÷õlɱôÍ áÁé( ìomõ-Í8kÈ  £ï²*›þó½ÓÑìËt‰h3>ñ¤p¤hêç.2ƒ1¥|ö<âÕ¤xøªØ‰^²=ÎúV¨œ‰þâ©@§5YJ›îÖÝ GÀÏc4øÂÇ3t³Éasér‘_~ÞçÚJ@ ×ᜑ$Žc+¾X <†ñ4åñ“|"•7Z·¾C1ýC<ÖÙ("´’AÙ)¦:›.•ÖSžú¥j«¦ä ·`*¦vJ­"AoÂÀ¶s9ÉÓ¯:c³47ë¿y’@<©%7bÁ\뼯˜žÁ´ºÁô›<± ¡zã aá@}»½†Š»•ùÀE¢·™âÂ/Û¼ÂCBð#ÀÂÁk¬ëâŸ$ܦô+ÃË1‹Z¯c¾7©R½'cÃw ÊŠCíRCžs“±‹Ž±ûC^ÊÃUÚCtÃE<<&ÌÁÃ)Ä]:DDJD1Tµ94›Hô¤I\œç²D³Š9FÅQ$Å7œ3N¼¬JüÄ­ÒÄU„9O*#csEVœÅCÅŽ+ºZœªVÔEйŕƒÅ^D*^ÆP,Åc<¹`|ªb<*bdÆGŒÅe”Ågä)g¤Æqy8UĸkÜ)käÆš;‘_¤“oô>r”74ü%eÜFsä&odÇ9KÓF'{Çv¬G9d¦tÌÅi¼ÇMìÇ좕{C"™ÉÂÔPGzüGLȼ®N‹½kCÇ}”Æ…¼#w¤H‚‰HFÂ6ƒABdôÈ»Hg±È”£ŒíS³|”ÈÇ"ÉÙiÉå HÑÁ®Û³•Ô×L–‘ÄÉF‰É>yŸiljÛÉnJî2˜î={CºÈ9H@,½ß³@¦ä,ÊÌøÈªdÄ©\C ÊÚi â+.¬¼­’KIÔÊytʾs¸± K&ª4«tËEdËŒ3Ë"–ÉR«KÞ»<µl±>Œ„”llJ£³µ4‚>6â4šÔ3¾”¸ÚÁÂ;SÌa;@2#A°{ËËÕ’JüIl£¼@Á´xD>îóÊÅÿ{O–!ÂìûÑS¡¿Èä¡%ÏNdѳ¸4¸›?ûCžó‹%?²PÎc¶õq{?%¢µBÙ½¹?ËЉdÉ%ý¶æ«¥s ¼í[ÝSq¢RêƒSLãÍ4›)%6œI/íÒÚÁ3ŒÆuT3eRŒ Q”J˜Hï"Dý(EëÃ<4Ý]ÄC }ÑÌS)íÒóÔ§O3RñÓY¹L·üûY…ÌØhåÙ¢ýU;-XFQÚjLZ·ë×§¥£Ê£ÔàøTªU!…õWzÕÚÇVö³YïüÚZ¤=Û²¥3ÔBUÂÚTU[²LÛž=Ù¸M±j;¢ðhÛqY»ÕØ]XJô[ªt i’NÄ$ Ñ\(âÚ¿õ~Úť͡ý›°íTÔ„\éi\´=ÚË=S 9Íê[Ε¹%רÝuuV+u«Ó…žÌ5YÀeÝY»Ì+ÐØu×¥[ص]ÔM]Ë]ÝÝUÜ-]ÒÞ×PÚ=Ëâõ*ÓEÕºUÞÀU]ð¤¢Ð}ÞÿÔ]ÍõÙêÅ^éMÞîÕÞŠ^©ÝzÜï NÑdÐÓ ^òíÝŽEW`T_ñ5ÔäDÞ÷U?âu‰ð¥ßÉä^õ”ÍümBûmÞëõ_ù=ÞóÅ’6CîÕìE`.`îßIæ]`ç•`6_®Ý fü àÇåàù_ƒ$á&Êñ^6aßý]¥ÝŽ®`s†áèÝ_ žÞ~._Öáõ}`~áÞW v\†%bPÂᚊôµ]VINbµÞâ)F5 îaÆâ|ù`+ÆâSà-Fâ0ÎZ#ÔLš0cv5âíõá^’p1'¾\(¾â7^a'™cr¥ãÁµã4V}aÖãÜá5FÑ@þbÁíâ;.d26dŒã(nc¦”vÑÖ>.Û?c.ÎcI†ß~d&Ñä§‹äü½MB¾_L~ÚQ»R¶4‹…åX–e ìÚOeDÊöe_åPå^G@vcTÎå2ždbVR`V0¡Käû•Œ_~YVb)ÿžž fa>bd.æ^¦fã5f\‚ÙÞâ_ž»ávf™MçmþfNÖætõj!Ž¿[â ¦â.Ù`KEçu†^>fgEîæwv_eY~>g{žÝÈ)ªƒ6g!sF9îΈþgxÆãfžY‚ž ,’¹VÜCJ‚Ï.Ú¨Ï9íãÐÑ[“ž=¾ÍšºÖœEX‹åÍ€fpåcäÝŽgVÅ!|È ´›u›Ÿê›¶L]¼M(7¤NIßžUé"näl¦ê‰f+ifϽœ%%ÉDªžô„iªÀ E7ããÒ§žP æW\öÖ·¶ê«ÖbËhR™Ì”’Ê]A§•™L\Z:ëÏ‘%ôÔ À(Eã˜6h^ö縎±¹ÐgžŽÀ¶5”ó+Âã;7W*j£Ök¯FN¶=MýS©–ioVgÇî*¬nLуQÒµ-¾ 9=bU7Âf§<-ÍXõA<ìÊvÀfÆvWÔ–kWgn‘)ŠºPC³©c¥½+üÀº=Óƒî)´·+LîŽrîFåBÇSÐÑNت¾åœ&î¨RíBæ…¶#5LK^å¸ò>X]^ËæRo«r•övïx©iøîÜcÆÖA”Áw}ž”˜j¢ýæïß¼iQ¬-kF°oQ&Eð/37Wñî~¦\ð–\ð÷ðŠ%mÓW_Ûðï¹ ßi —h_Cq·8àì0òÎðÓvñ¿Q[q—ççñ„2òïñ ³ òGò!dÜÂñÜWrþÚ>[3º^Û(ZGmÅ=Ùï~jq,ÏQrNí÷¶rÂóþ®8ãò+ïò3e 9;P$ó6§ë/wó3¯Ïï2¿Û;Ïe;—Ç=çóÛt?×°B§2Aô>7ô0Fô_sx]ÚFxŸâGGïþftB§ôE¦òÆÌtIßtä&Õ%µô9Wt3ÛPGè™VÎR¯rOõjVuðvëIÁÌÓru!Çôÿ®ÚYêÒhŸ¬\OrGõù v–ÛJŠÆða_«:ê.òJö?rnv=G«NŠv¢ÑÉ÷ö[¯°b¯Y¸÷./%<î^Zfp ªö]¦qlW5]B¯÷²È\Ÿönöd¾v#óÈöå”õF{gwqoðwçwZô÷wwx VO»ž‘ŽÓÃÍ‹'Dͻľ÷U¯õ€fõúºÄEWø&þöOôíQ‹'¿£^j|_”¦¶Ù—gynIlýl÷”­y5Gø„OwFo'¼)w'Í!§.·¢Çx¢·çŒó©öïç/_ùª›æq'eÅîo¯„ˆ7¿…sºi,<½Ç¬Nû|Ìǵ•žyZvï§Ÿ˜ó.è@Çæ ¿úÕRuƒ»G3\¥†È6½ã¯^¼5¢õ »ù‚'ÿ÷r{È.|t¯ú¢ðBÁ.;n³¹_Îí4rÓKÜÝS{âìuZkYU'¶nÝÃßùÄ·pL¬hçÇǼ¢:Í„öT—ÿu¢H¬÷ê¼ì®ÞjdâAàZúÜlÜ_w‚Oý}?øÿ…ü‡ÕgÁdý¥úKsîËà?Á¨Ö;ŸÏ:HZ:'?ß§?5 þc›@ ´lã¿]ÔyÕÿñÊ2ßï÷ºÜtZ6ýÆý©¯~Ì뻈ÿ @p À‚L(àBƒ2„ø°àà %&äèðãÂ"G’,iòäE‡!K®Ô˜’áˈa"ĘÒbHiºÌ8³fMÿ٨̛=WªDéô)Ô¨R§R­jõªH‰Z·ríêõ+ذbÇŽÅjv$Ó³SÓªmëö-ܸr炤k÷.^§-Oæ$™4+P¤|õJe[8/b¨†­î\WpЉ.)êŒI2f¡>míümbÆk)*ôhštÆœ’9JîØÚuäÔ²•j†'åÜ·[³Þ©Ûoèà‡c]L|¸qáÉñ.?îü9tâÍ£SOܘeÓ˦muýzbÑÜ>=^nvzõ³èŸ ÕŠýñVË=Ïÿü÷~ö¤ú½£~œðF‡Þzx 2÷Y :ø „ö§ …šT …^˜ hÝÝ[föÍ&^vQÊ×áUj¸¡[×½—€%–¸Ÿ‰H¹wb_õÕ¸œŠ¡õ¸"1$‘þX$ŠÔ‰$‡L:ùÜ’OØy Ý#Ž"ž(#}»Mø™hR®õ–‹æi™—;ÊGãOøµù¦š(EyלbNù¥™vêiWUõYƒ{úÿ)(¡ Êd™Bò—ej¤¹'›<žw¨œ-6)dŽiêˆÓšp¾ÉiŽ4²FS`—J)ªI¦ºjT²g䩬¾(+­­Öša¢MFêiœu驤)ÞŠ¦z…Åg¥f\•¶Ñw¿)+›x§Õ6Þfå©* «Ãƪ-·¥æ•í¤é¹ºžÈÆTàv[¤ºëKìµû %㇠b9£o˜):f·éº+W»mI80Á|0Âþ«í¸¨I“£ÜY+ð¶êå-|C’¹°»sLÆÇ,¹»qÖì´U6[žüöKñÇ0Ç,ÝÌ5;ùç®± ¶½2+ ×ŃY)Ð6ßê±ÑD¯û#ÒΤÙôÑIµÔU‡WÐ:jÚ.Õ¯^HrEÕfmriáÉÄsyàil5¥]³ýÒËa.­–Û¬ÖmôÝoëíX‹hk™³Ä–Š«t³&¢Û©Ê”q¶ÙÙŠ+½· yW-ùàƒ.%å‡fþñæ{Ž3¯ˆk:4Ý÷èR›ó¯½²èùž×,;”rÿ»d¹뾻°cí;ðÊm )OÀÖ(xuÍe*ªê1¶Î:é×à$í1W\××>=÷ jß½õ@ßHØÚ]%ò?WŠúñúŠž:ñpÏ >‘ßßÎ;þù_yXøôû¯þÿ¨Ž™ÎyŒºØòÞW¯­Eo_tÚ#¸¶ËI°‚ß² ù·äñ…d½)Ù³T⬑‘Ð|É*W3X9bÐ~Ûc! …úÐGŒÚ a•ÃÖÐ9=Üá퀨Â^p…"tˆˆÄ)9K|¢© >ýQqwBÃ^¥ˆE-N¯‰Âãâ½F\e‘ƒãÔÐ;1~Q3d£Ç߉«Šv<ØžãX4=¾mŽÖá# ýHq@e$À9¹E*²‚‚läçfDn=’~•„ä\.i(L P“œDŒ'hFI~²t¥äX(ùtJÿ¥r•‰<ã( ɶ;Ò²–¶ ¡+'˜´Væ’f½´/AvÃZ“N€,æ.õ†Ì_‘™ý#%!)ù¹c:SƒŒ¬&ä–‰M—Éò…ݼfµ93qîq›}4'aM†ÿM“›cÏNäOw¾ä:­vÏ|¾î›‘ôg2éé@¯.‰öÁžØ²Ïtîm¡ü´ÜCÙ©NCNt–QôÐüsQ'ÂME m™9ê³ˆŽ“¤…&EQjQx¦%¿±QãRH¾“E51õÎE^ªPÅ‘p^”6E:R“2”¨²ê@ÿ)Íln”}:kü xšœ:ª;â™jüs%æå¤ÛD껌ŠJ±Ò ¬,õæRÚ(ôépñëÙßâúV*i DËòœFæÕjš5¬dUé_ ÕWù´¢úlêV ¨µ¬)p®¢{ì½äçSÉîÕ™ƒe`ÓšYÍ2¥ÅÛEãV¶¯u‹mìuèSÚº°‰°®åk7«YÙF®³…ê,8ó(ÚO‘6D}*j1:îxf/»šW y٫Ѷ¬Í¬mÑzRe*ÆQ/M\m~ʲÏ76…Öy3‡•ï ÙMËrS•^Ì>W½u¼%|ÅÂÃèú¾Rãe0×ËÙîé—¤Õëk‡:¬ë]6Àõ|R~ói`ˆ¶UÿÅ-÷ .ØN%fð† Õáê®îµÈÂ)–.¬Ë³ò×¾¾„p@õxb)íX )6qˆƒ@åeL„ÉýZ?YicŽâoñ}2”sgÏö˜™+v±©ˆÙ-ñ¯²±5l}Á×üã1ÛÊd®m,ó¯ÎX7hßɉ†å* SÌ7öð™óLG3ë™Ç“Ô2ã,UÃu‰DoÖí|íÌd<÷¹ÑÌU²£U¹®Xs)î)“iÚÚ¤~¹Émdt¤Cm«ÒÙ•WVóÐ-¶"ÎM›Þ臗üéÙŠºÖ¶ã³­5tj@Î<»í•«Ckß8Í"Î5²5*ÁRŸr×íuW} ÕºZÕÃ^£¬Ó¨èds›Æÿcö'O O/é´?Uò`wÅ‹›í^»žÖö»»Ímp£XÞž5†GkPƒ2ÛöF6½ëýïÛ®óf]þ¶¿ÿ¸íÛ:àg¸R Ž`r:xÅ.8!þo‡?\ãðÆøQo…ÜãzæxÇMÞï Sxß´–î€UÞm”§\æª|o”sNóŒÆœåÄ´y²wîc ßx£^Ù‹7¥Š:eÄ“Üïhãù:C×Û“W¼1)¿yÿ†qôìµp®ø w˜gÜô²Í¼æ]?c?ã•ñ|=èeÛ'ÂþFGSïåxû¢[}^÷–•bðYö–~ø_w¾ñs™|ÇGÿÀÔcÉô±}¶¿ú¦æbö-ʰ7_ôegº÷3¬Åð;RLìgâö¥ŽþôïŒï¹¤éÿrvŸþœ¼¿õùß%àØ™_ßÍŸÿß ¤]™­^˜å^BZÓ>R’‘â^ÿ–M "e Û  žF\Ïy`H¹vZÒ9Ýþá¢`³é˜ ÎÑ j fÒ Ê -“Îý ’E ¶`£•àÅ þ_ÛPSý`î €µ^¢RV¡uÝ ÷QÅ¥˜FÙ½ÙÍ–T aa!!Ž ®áJQŸœK•ËhÅá‹Až²e‹ÊŸðµaÇ|á“ÿùaQeÐz¢çÁ•äY`Ÿ¤’ ÞÍ  ¢$N¢ú…Vݸ©Bñ˸tùyøIê S… áµ&ýÐR"+*ŸÚaÎAa¢ÝýZ˳MÐ'Ÿn …ÚT›Ý©DÆM‘W_˜ÌvÄ“ÚDK›™¢ôyO+>#4®Y’á˜0Ö ”"Ïâ‘)J.Ol£¥ ZU ZM­L¦ý¡Eµec3öa4¾#+Ž¢·¤Îu=Ì<ò/JŒúTù€Çx1ÎkLÌ!ª.±]Voc©¬ã]I-*$¹±ã÷M ¾•pF-§¬$´Ê¹4¡ÏeÃ%^¦ßVŸP$Xê µ¥7¥\b¢YêÅ%rWÉì$v)&cæ¥i—v…2žWV­Œ@d¸éP^v憱 P[N›¼fû,dWÅeüŒÊd%¢k"Ÿ].gÎfõM.Ýæ2ù ÌOõNU¦cÚ†ØÐa%Ú_l²m&§é¥ZÞåkBÑMF¡rD§rV'ºŸf.Úìçá!§u~çàÕÅžawš x¦çß±_!¢{þàq~œzÎçzÒ}:'ÞM§~zÝ{ö'Âì§lV€(èai§&¨‚.(ò!ƒ>(„Fhìà›„V¨…^(b†n(‡v¨±Ÿ‡†¨ˆŽh~‚(‰ž(ЦhÍ¥ŠB¶¨‹¾¨6>ŒÎ(ž(ÒPg樎*`&áèŽþ(n¦)‘©‚ª‹©’.)wò“>)”&§F)•Vigv¢•of©–Â#èD£~éƒl©˜n‹¶bð%阦i†žž™¶š¾iÃá¡—º)œÖ©£Á¢EB ¥m!ÈÙ©Ÿ¶5â$Õ4§Œ†áŸj` š’ žf™Þ¢,B¢Njù­h< ºDJ?#UŒÉYµØ•œ R*©bÞžŽ^bN¦š _.VU¹ÙªŽj©ÖêçñÇþ<ç3ꥸUê•cQ%Æ<­«ê9"ªÍéy̪Lùe«6¥Ke…¿+µÆ'(Îfº0ëGÑ"eë}0+­V«¸B¢—-ê5ªS¦eMÁepÅhì+¼Ze"šë¹~‹²H&§‚ꦞP×Ðk¼þkF-†¿b°ÑÀ,ÂzeUriÁeaÂ>ìzÛÁ,u¡¡B,Æò^³Zç™f¬Ç†ÓMl½¶ßÇ–¬q~xv¬É®¬ƒ©Ë&f}ŠËÎlç5àâmb¡ŽÌJ'Ò¬ÏÂ]ÞÝXìÚti¸þ,ÒÂ_Ð>ž<¢+ç9è­ÿ%­Ô:!b¶X²îæ¯Qfßx”Dòç°Y&eò$ËôbC˾ŠÐ?~äØ*N­Ûè{ Ù-Ê*ÄD*¢L] -¬=%9Öd½ªßž[a– ¾ˆ£5ÚíÛ&nÊ"Ê¾ÓØô¥m2cŠìî¤À²Z¢d­j…Nk¢-ߪëœ)®èº#ãbnn×8ÞãxçÚv*q½îÂÚ\ÓÒÆF6 A:Îèl¬ßjU»ÞíèþnšÙâHÖ®¯W¨ £\m¡©mÞ2í×†ÈæF[«‰-óíî³îå¯öÖ©ªŠ¥JRnš`–"·:$de'ÑÍ.]zHù¶æ«I#´oñ¸Ž»n¯ý:©ðΈ´<¦Úùæ.KbcSÖ¯Ìá,Lâ*òzEØbÕ½ž-Œõ"O¦ß¯?ZþZÛjmʽ¯b…¤°mcÔᬆ"©‰‚N0 oa« CN›RðV¨äK ë‡#®ì>m߉ðó•0i«´™=¢Ï¹-f@–—ʤ1¦›œÉåîWuM'Ñâ-×ä0;)hõìÝ©l_qÎ^çvžc±Ó005q ÖË–11g¬%(r¥±ž†±q²¾1ëš¿¬Ë9pï1kŸ÷1 ²Ä± ²ˆ¢—!'²"á/²#?rÇ2$O2f/%_2&SqÛf2'/rrH;r'‡ò•6ˆ(—²)ƒ²)§²r¢²*·ò•º2,w2+Ç2-3l-ß²#Ï2ïd÷Z®¹ø0/sbö2.ó —G¨.ó'31³2Û¯3‘Hq]/W³0çª5ó5³6w36o³¹³Ky3739‡ó9³9¯s9ç3ç23FÏ¡†FØ;×j4ïÓH.«•¨ÅÝs©æsYr«Vå>Wœ@´…&4t‚ë0ž.v¤µìæþÆnúÎó×0´Bà…Š J¦.L… ö™•èª×ví–ÙçFÓÏÞ†"2Šh*ø*l¦²•K£/ÃÕ4A—'œFÿiOK3¸ºe·š×ãÖbE‡§C¯kÚàcÙüðw/ÛÞ×J³t‡ztAG¯æZ/Io5ÉêSP#ïô:LïfUIØTÃ3„æ4HWíŽôΘ´NæÖkÛQfnàÒ4\çàY÷if/#ÖåDcô²õÑWÓ5jê"î6U›õ^×O…þ´ßWRÿV·¾äQ‹ê>vÃJè4Û¬c· ¿åT¶µMsö*I6¶\\OÑ_1Ù¬N¾¢vf©e¶Ìþ\ÓvšÚvW‡œnë6oË[pÿvʾípÝq‹ir/à< ±’ðrkit¯Ÿfëôþ6O·•j7ÅÎO(zÍ*r÷3wÆ3?ŸKÄèÔÉÀ´ë–ášjàáö󷱑4÷‡’÷Uÿšw×6î¡M Wy‰>ãÊAoq#“×4‚0vßmȤò3~ßwKëΖ¤[#] ú¢gƒÓäw'WÎm¬døÂvøƒ#ˆxÛóy›‰BZøPo8±!ÖCs³R60f¦d®F¢óvkÚ¢íU‘Ħ7f’íLåk2.ö‚j¯m=&x‰óu%[÷eW8'¶&¿øµÆjLî O­¤:™®[¹õ‚ôZÒ˜U-àúâùK3/´±yo=¹Ã¦µ”¯u§ ד6²V1×Uùæi°ónò6oaFï¦üä^YÒ®û2¶˜Ï£eÓygëwŠèø’ ±´<Œ;o²Z½ˆhxÞu¡!y]õCr$N»dœ§ä ×´¡#ö£ºŠãÈ·â®ÜZú¥KmæY²¬ºú[zcîõꊭs¥Ç¹±g°P—v¬ó/I¶úùžønwa‹z_¾¹š9´³5dÚ ¥eOþêü¯¶“¤9Žu}¼0‹ëkž#¢ëz=Í#-†7¹Kþ$ƒm*§·dë®7º=æL‡l‡¹|ozŸmÂ|1ûæuåµ¼Ï{Å“n7± -µ?iǧè"ždÍÎq~ëõÅC-‹ó/;õV1®¶|:w™¸ó§³KÍË“ž<…ÎhLF‡ÿùÈVçǧç×Ò(‹5a¸„³gq_|€ }Ë6îëDîó:³óÕ·sÖo½:k}×sýʽ؇=Ù{®×—ý˽كýÚ«}Úëüi‹¡ f|žP½Eû!}ý4ÏåVÒ=Pº8Ô»Wà'rÈX-ä£^94ªu¯nøàW.Éë}oM®?ŽÑ²)—J=Påo¼ "¡J¾J{°æ£4ƒc~E~8§}r{>¨ƒ>hŸ0L50Ä  ¯÷ìÏøê³¾È§8Wç$¬»¾{‹>Ií;—.®«mî·¡ž;x7Æ÷âß=ð£8ÐOù]e­ôÎôçÆ/Åë¾°.eõÏã£Y÷O? ^-˜£ú¬|8÷zäKb´¢7â'ýò× ƒ›ÿë㢣Â{çB;@üðO Á‚$¨Ð A† !F”8‘bE‹1fÔ¸‘cÿGA†ò¡Ã’OfáH—/aÆ”9“fM› /²¼¹“gOŸ?:”hQ£G‘þ,©³áRœ*” 1ªÃ§ ­®|ZuêV«™&;–lY™:Ã6ýÈ4­Y·oáºMÛ6n]»wñæÕ»—oß‘t›j]¸’ð`©‚ '¨µð⇣2dŒ˜r䔀ýfÖ¼3Êš7‡m6qiÓ G§V½šukׯE¢&+#mØ·q“„iÛ"ïÜ¿ç >œxqãÇ‘ælÓwr窛UþœºóèÕ±g×¾ûÍëCÏüÞüØñã#¢/¿Þ¨zöïáÇ—Û½èúóñÇ<Ïó~~ÿ±+ÿ PÀ ̬?Í,PÁôÄë)Á!l) )¬ÐµNËPà 9ìÐÃA<í¤ÂlÐAQôèÁYlÑÅ«zQF¸Ü[qÅÉ»Çyìq»} 2¨únÔQHëŽLRÉ%瓌É'õcnH()4’Ê+±Ì’¨Ç´ìR8)§ôR@+Å,ÓÌ3U¢ M3û³’Ì5„SÎ9éœNÍ:©<Ì7ñÄ‹Ï> TF–þ”»ß,Ôв]Ô¤Ò¨2-RH£ôQÅ*ÅôÒð Ó´SNóÔÑQѵµÇùlÔÔöVmÕU,ÙzõETRUV¥nÏ?[sp®^I´)^µ³Xþv=vÍ_•°È¤ˆmö¥h%R°¿®…VÚ2CÜVA¥ÖÛµÆ5ÖĉëJ,qË…Ýv JÕwáý²Þiucð*°4²í²¿î“Þ€ó2ÒÖ ¾3á|;Êv0µpªìш-³¬Ò‹Ž”á…óäø?7Exa‘áÍáÅô…ì*É8U×å•KO6’=Fޱæš×ÝR.œiäY}v*Åœºó$K¥ƒØç9o^Zç§Isz6©™;úhé^Vze•ÖØkª—»»T{›U³Å³Zi¡…N+¯ºÎ8f´Ñlšn0‹b×no÷võ_˜½H¸ß.|p·ï8qêþ|·ïfW¶°É'›8<È0mùäÅ™æ<¹Bé¼Xѳ$]WÏ]4uŽXuY_‡2v\WgqöÚ=Óö®ÛMå]IßwwF‘‡ÿmÞ‚‹ß­váñN¾Bæ‹?yçKDzš®§jíW;x¯ìéGñ•çÞYó»'þ{ôY_>Yö$?qb›–ÿLûµÔs_Ãà¿ÿå¢Öü)î´3 ¿öׯžj|ËÞØ¥â¨q@[¹HÁ ®ogñÚ âÜWþ9†„ Bʸö·Ë!…aA6÷Á1áÉpweóà'8£¶0æ+NjÖ¶¢® n…„óa i úLo¡Yⓞ£O!qYCÛzˆÀ¡Mm"º’ؤ0>°.¢‹âïBÂ.^n‹W3b¡â¶Çp-ŽÒâÙsƑمtz’«7Š.+€"ƒ&G Ö±pƒÄ£»9µ2¦ \]Ñ„ãEÃ¥Œ‡1ú ã¨IP"2w‘,O%ëå:è4•šÙ§’©9&¤b<áµ(Ç2ÊMŒ„¥4åØ~Y+?¥¯€­ŒmÌ)s{“$fÿŒù-d'š¬ƒ&äô2»k¢h›©ë&3ƒóÍ^Ñìvâ|8Ñé·tú„œ¯1çùÖOC½óU7ó=‰;e TûÜ”Ãöy¤…ªŸ’â'@ *OÆ)Ô\Ós > Ñ’Ù‘¡A’¨£ Hó]´n­¨%?ê’¾ £ï ioÔxÒA©´z~a^IñS‘¥©‹«)H=™Æg§ùäM[ÔÓÎ07B]Q;fA u©1c8“‡TÙ±©y ÑU±šU­n•«]õjBÛÕÇáHõGUõèYͼU‘•¨N$[±×$Å*­a"U*)Y¹>g¯µW]OÔ;x©N~}MfS™ØÀú ¬gyhXŸùÖK"DŠ]ì0S:ÍÇòŽ+vø3¬^-ûÙcѯ‹ÞÑ,M…É·Ö P´PUlku0µq2ÅXdnÉKÎòk9ÛV9‘´8ØúÕ²§Öl/uÈ,v nEÜíOFE»bsµ|nȾš]­²©¸Æ=ÛO¡ËÈMÕ‘”VÔZf2ÜV׺wãUN¹ÛÝé¶¹¨åRÜÊ ¸žpnº“lZ§]˜À¢ZÒ{Û*AùηVÈ%”x«¸ÜM22ºþ/€ý+Ƥš'Á>]°9œ25å7”]áŠ~%|^ßÚ®À-v±Õ:,“BQ}ý2èÑ…K€¢­Sý0;³)©\¾°—¸}ælkBgÿÚ®:àʰ|Ôû×'IˆÒU¤„¨eýÈÆ!__—èdoY¬³¥‰^¹áóXÅl¾²©:S.›ÖË eêBÓ;å4¡™Vn3XŒÜ°+Y½oÖ-)fb_*xÎ1~«Ÿ#ËM3ëÒ‚\Äž›™ç1”‹.3§AÝH§ºÆ˜nI}H¸æâøÏ¤n4ïzçQ«—üto-hM§–Ó‡C2³²_Œí6·.4 c¨eO§ÖŸq^µ¥ ­j¥zøÕ ˜ŠßÒ¶úŽ|¦˜yífQ¾Í¹5SøBDºLɡ֠$A]4×b¤ì6µ«}.ŒÚ”Û&6«Õ}B•›fÝSA"¸ÏÖl… ›ÄöVîib¢ñÙÇ!Ž·Ñh^ò.Vù¶vµø]h§°Ñ£GTt/7~lé"´î^\P°Ôïê¶Pшoq³ÐÁ®p .bæÏ¾±FïsNP^’°ýPጠ£o˜P]ÏÀdO–ú0ö*ì×äkPqŽ ŽeÑ“-k qõ¾gæ c-¦>.SäU‘«öð»ð4]ôòèð‹¥Hq¨,k›Ê Íÿˆ¤¦rQNFÊú~ËiPŠ1Ÿ”‘ó‚Œÿðê=¯OªÃÆ­^QZ°±ZVñÁ1»©p©«õêpÒo„Õ±ß1îø¨ûd1qƒäBЂÑÝ-Ÿ ÂÌ,ºˆÎRË1rf©Óî GCên!’©¾d†c}VîÒ$r";Rñ#9Ë#’®"I2#/¯÷ÀF%Ù§T RIýñ†¤Æ%_ò“ò‘&SR í'—l&’[ªÓp„RÊÔ±~Ð(s%ó®'’)Kç—ò(‡²ø¦có¬’(A’*ÍF*µGñD'·û>±è,©Çjj&ËÒ, ‘dÔ2.æ2z(ÒE²'ùQdêÒ†ÞÒüÖë/û’òjèºþ’ƒ³,3 s~0ÉZH0}²1ó1)32s2ƒ²2-“.1k+SèüÒ0;s4=453='4Ý 1…’5¤‰&«4;È5õÒÅ6M“67Í+o3©E7w“7ÅÏ7£25Òzˆ“÷XbÒ#…ÓG¢å9Us9ÃÐ&R:y„´ì’:Ð:÷9Ws°g^gGÃòSšL)\¸‡?†¤þ3¢´;ãs=[‘>Ä“ˆ£t•tAÔÝ)’L¦ ˇ.  Çt4²BÁð­©÷‘Cs çöñó ‡&”BEÖ\+Œ´R ÷L„âî¾l.‹©8Ã2Fet¬>Ñ¢Ö\ÈÈHŽÒþí"ëÐH-1Øà.Bóª™Hw8¤´9yŒ/þrÿúëû Õ 4³²Ô>¨´J­4&…”†pos¸´ìè‘Ü`é2¬ç´E7hOþçL/,¸\”Ûâ4ìt4ÿ\îô•ïR†@¦O×ô$õ¢0PÍðîpN UkîË+­ü´Ã~ÆQ¿pjtár+ Ïû$ÏÖÈ­rhi Ò)¡©A4Tñ²ÉöT'Eq‹oÌù-f.±úxi…URYoVmõéâ*ƒ®ÎDuH-ô%—•Y›•T±”+Y„ÅY«uqµG‹*úVtò¤õSYé[uí¨Ä•@:5NÐ5]ÕO TÝ5Aƒ[çõFßWã]gã>–Àðõ•u_͵ V™ÚäA©a4_½bõt™(–[¯T^/*µÃ_7ö3ÙTc7V¢<öc7øöc!Ôd‘eSvd‘eÛÕe_–beSªde6=‹²f¶§p6gÃs[ifƒh7j'ϵgKÐhC4Z“Ö`Éêg™–=áC!®¤vj§u]#ViSQk£ªj—&`Wñ;ýl•sgÇvFßsVÐV=…Öi²'kt¥Þv5­UnÙ¶"ÇçnÅ3o×ÖÓ&QÞQ½èÖoÅöÖĦæÀ ùµŸQËq÷`©f!·ê×aOÙ&—rã)7Åôˆxuÿfb21àà4!ç t[2t/7¹néO.û(ŒŽ¬ÈÜ*vèÎðsa÷qq”3«ìTwWûdiÛ®w=Ž“7x-÷Xo„î´‘RÕ”OwOV笟zó’GyÆ«·x õÊu{Å·{U| FïÒV YUòznãâs_!¿×}C­KDD†Œ‹t S)ÃrÖÎUW—y-#Ø}9n3—ãµ&ÍRt9SvyÒј(8xÁ/~uU+¯sQg7[ã2…OU²X¸…ç…;*†GRzÓ’lÿðƒ‡U+|ø+uqˆGGˆ˜†8‰c ‰™˜‰ú$„ß–,Ÿ8-A®Šƒ…‡µxé°O„Sг^»øÚœŒ•ÌXe­qŒc¶¬Ø8ŠÑðT锹¤ñÛþO}×WŽ—pžø¸n!0sTT¡Kÿ8[% · KÕÝ¢C,ƒï™î$9?™ÖŠÕÒ­Kùí¹¤M[+¹ãx”ïÜhÝŒÏýÄôRϹœØ”­j‹i¹–¯jKl9—uYCd¹¹ØŽpONo7Q5°ôîN&{9M‹x×àó8™‹ÙÓ¨pì4ýÍáDÙ™«Ó;–¡O8›Ym‡w3Öƒ»s£+wټǙÑ£í9½äú$±ý¦OI‰­~åæE%–™ôùZZúr‹uy+L}t”O¥pHêë—ˆòïý`ùfZ™+˜¨oÚŽÝ¹Ø¯Ä 9ªúƒZ¨{sŸÛ,¼.+Õ¼¨—¦?ú©UhY¬‰™|)¶8dµZŒ¹Ú¬ƒ§¨Ý˜M5}!¬ÂºúœÄ®·ZõšÄdš©ÓY’w™l纯Ác¥„áòzš »\ ¶¦¡úk ²ïoª ›²9r±A»o‡¬É9¦ n¬70¥-Û«/߈Láùô<º²C»¶-Äu„ X}µø*ñt/Ó¯×%·{»Xy{u‡ì·m;¹—¶Mkø°/Ô…•;º—{o5ʹ7«¹¥;»½Ðx<{#º{ºÛ8µ{¼}…Œ­û†ñÉ;½gèŠY»N*Z½×ó‹³z’ỾO™ç½í{¿¶6ú9mv%þ{ËÑŸ¸}:J5tÑhõ›™½8ê­þ4ñû¼aøê¹þ_ûëu—Á~ìi¹ëÍþìÑ>íÕ~íÙ¾íÝþíá>îå~îé¾îíþîñ>ïõ~ïG" ;libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/xmlDefinition/0000755000175000017500000000000010423130301027266 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/xmlDefinition/class-use/0000755000175000017500000000000010423130301031165 5ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000015710423140533011322 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/xmlDefinition/class-use/DefinitionsFactory.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/xmlDefinition/class-use/DefinitionsFa0000644000175000017500000002733410404045206033653 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.xmlDefinition.DefinitionsFactory (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.xmlDefinition.DefinitionsFactory

    Packages that use DefinitionsFactory
    org.apache.struts.tiles.xmlDefinition   
     

    Uses of DefinitionsFactory in org.apache.struts.tiles.xmlDefinition
     

    Fields in org.apache.struts.tiles.xmlDefinition declared as DefinitionsFactory
    protected  DefinitionsFactory I18nFactorySet.defaultFactory
              Default factory.
     

    Methods in org.apache.struts.tiles.xmlDefinition that return DefinitionsFactory
    protected  DefinitionsFactory I18nFactorySet.getDefaultFactory()
              Get default factory.
    protected  DefinitionsFactory I18nFactorySet.createDefaultFactory(javax.servlet.ServletContext servletContext)
              Create default factory .
    protected  DefinitionsFactory I18nFactorySet.createFactory(java.lang.Object key, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Create a factory for specified key.
    protected abstract  DefinitionsFactory FactorySet.getDefaultFactory()
              Get default factory.
    protected  DefinitionsFactory FactorySet.getFactory(java.lang.Object key, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Get a factory by its key.
    protected abstract  DefinitionsFactory FactorySet.createFactory(java.lang.Object key, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Create a factory for specified key.
     



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000014710423140533011321 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/xmlDefinition/class-use/FactorySet.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/xmlDefinition/class-use/FactorySet.ht0000644000175000017500000001622410404045216033623 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.xmlDefinition.FactorySet (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.xmlDefinition.FactorySet

    Packages that use FactorySet
    org.apache.struts.tiles.xmlDefinition   
     

    Uses of FactorySet in org.apache.struts.tiles.xmlDefinition
     

    Subclasses of FactorySet in org.apache.struts.tiles.xmlDefinition
     class I18nFactorySet
              Definitions factory.
     



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015310423140533011316 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/xmlDefinition/class-use/I18nFactorySet.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/xmlDefinition/class-use/I18nFactorySe0000644000175000017500000001301310404045234033456 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.xmlDefinition.I18nFactorySet (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.xmlDefinition.I18nFactorySet

    No usage of org.apache.struts.tiles.xmlDefinition.I18nFactorySet



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015110423140533011314 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/xmlDefinition/class-use/XmlAttribute.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/xmlDefinition/class-use/XmlAttribute.0000644000175000017500000002137210404045212033624 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.xmlDefinition.XmlAttribute (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.xmlDefinition.XmlAttribute

    Packages that use XmlAttribute
    org.apache.struts.tiles.xmlDefinition   
     

    Uses of XmlAttribute in org.apache.struts.tiles.xmlDefinition
     

    Subclasses of XmlAttribute in org.apache.struts.tiles.xmlDefinition
     class XmlListAttribute
              An attribute as a List.
     

    Methods in org.apache.struts.tiles.xmlDefinition with parameters of type XmlAttribute
     void XmlListAttribute.add(XmlAttribute element)
              Add an element in list.
     void XmlDefinition.addAttribute(XmlAttribute attribute)
              Add an attribute to this component.
     



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015210423140533011315 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/xmlDefinition/class-use/XmlDefinition.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/xmlDefinition/class-use/XmlDefinition0000644000175000017500000002505410404045204033675 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.xmlDefinition.XmlDefinition (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.xmlDefinition.XmlDefinition

    Packages that use XmlDefinition
    org.apache.struts.tiles
    The Tiles taglib and framework allows building web pages by assembling reusable pieces of pages, called Tiles. 
    org.apache.struts.tiles.xmlDefinition   
     

    Uses of XmlDefinition in org.apache.struts.tiles
     

    Constructors in org.apache.struts.tiles with parameters of type XmlDefinition
    ComponentDefinition(XmlDefinition definition)
              Constructor.
     

    Uses of XmlDefinition in org.apache.struts.tiles.xmlDefinition
     

    Methods in org.apache.struts.tiles.xmlDefinition that return XmlDefinition
     XmlDefinition XmlDefinitionsSet.getDefinition(java.lang.String name)
              Get requested definition.
     

    Methods in org.apache.struts.tiles.xmlDefinition with parameters of type XmlDefinition
     void XmlDefinitionsSet.putDefinition(XmlDefinition definition)
              Put definition in set.
     void XmlDefinition.overload(XmlDefinition child)
              Overload this definition with passed child.
     



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015610423140533011321 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/xmlDefinition/class-use/XmlDefinitionsSet.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/xmlDefinition/class-use/XmlDefinition0000644000175000017500000003320710404045226033700 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.xmlDefinition.XmlDefinitionsSet (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.xmlDefinition.XmlDefinitionsSet

    Packages that use XmlDefinitionsSet
    org.apache.struts.tiles.xmlDefinition   
     

    Uses of XmlDefinitionsSet in org.apache.struts.tiles.xmlDefinition
     

    Methods in org.apache.struts.tiles.xmlDefinition that return XmlDefinitionsSet
    private  XmlDefinitionsSet I18nFactorySet.parseXmlFiles(javax.servlet.ServletContext servletContext, java.lang.String postfix, XmlDefinitionsSet xmlDefinitions)
              Parse files associated to postix if they exist.
    private  XmlDefinitionsSet I18nFactorySet.parseXmlFile(javax.servlet.ServletContext servletContext, java.lang.String filename, XmlDefinitionsSet xmlDefinitions)
              Parse specified xml file and add definition to specified definitions set.
     

    Methods in org.apache.struts.tiles.xmlDefinition with parameters of type XmlDefinitionsSet
     void XmlParser.parse(java.io.InputStream in, XmlDefinitionsSet definitions)
              Parse input reader and add encountered definitions to definitions set.
    private  XmlDefinitionsSet I18nFactorySet.parseXmlFiles(javax.servlet.ServletContext servletContext, java.lang.String postfix, XmlDefinitionsSet xmlDefinitions)
              Parse files associated to postix if they exist.
    private  XmlDefinitionsSet I18nFactorySet.parseXmlFile(javax.servlet.ServletContext servletContext, java.lang.String filename, XmlDefinitionsSet xmlDefinitions)
              Parse specified xml file and add definition to specified definitions set.
     void XmlDefinitionsSet.extend(XmlDefinitionsSet child)
              Add definitions from specified child definitions set.
     void XmlDefinition.resolveInheritance(XmlDefinitionsSet definitionsSet)
              Resolve inheritance.
     

    Constructors in org.apache.struts.tiles.xmlDefinition with parameters of type XmlDefinitionsSet
    DefinitionsFactory(XmlDefinitionsSet xmlDefinitions)
              Constructor.
     



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015510423140533011320 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/xmlDefinition/class-use/XmlListAttribute.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/xmlDefinition/class-use/XmlListAttrib0000644000175000017500000001303310404045216033663 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.xmlDefinition.XmlListAttribute (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.xmlDefinition.XmlListAttribute

    No usage of org.apache.struts.tiles.xmlDefinition.XmlListAttribute



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000014610423140533011320 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/xmlDefinition/class-use/XmlParser.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/xmlDefinition/class-use/XmlParser.htm0000644000175000017500000001640610404045210033626 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.tiles.xmlDefinition.XmlParser (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.tiles.xmlDefinition.XmlParser

    Packages that use XmlParser
    org.apache.struts.tiles.xmlDefinition   
     

    Uses of XmlParser in org.apache.struts.tiles.xmlDefinition
     

    Fields in org.apache.struts.tiles.xmlDefinition declared as XmlParser
    protected  XmlParser I18nFactorySet.xmlParser
              Xml parser used.
     



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000014510423140533011317 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/xmlDefinition/DefinitionsFactory.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/xmlDefinition/DefinitionsFactory.html0000644000175000017500000003632710404045216034003 0ustar arnaudarnaud00000000000000 DefinitionsFactory (Apache Struts API Documentation)

    org.apache.struts.tiles.xmlDefinition
    Class DefinitionsFactory

    java.lang.Object
      |
      +--org.apache.struts.tiles.xmlDefinition.DefinitionsFactory
    
    All Implemented Interfaces:
    java.io.Serializable

    public class DefinitionsFactory
    extends java.lang.Object
    implements java.io.Serializable

    A factory for definitions. This factory allows to retrieve definitions by their keys.

    See Also:
    Serialized Form

    Field Summary
    protected  java.util.Map definitions
              Underlying map containing all definitions.
     
    Constructor Summary
    DefinitionsFactory(XmlDefinitionsSet xmlDefinitions)
              Constructor.
     
    Method Summary
     ComponentDefinition getDefinition(java.lang.String name, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Get a definition by its name.
     void putDefinition(ComponentDefinition definition)
              Put definition in set.
     java.lang.String toString()
              Return String representation.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
     

    Field Detail

    definitions

    protected java.util.Map definitions
    Underlying map containing all definitions.

    Constructor Detail

    DefinitionsFactory

    public DefinitionsFactory(XmlDefinitionsSet xmlDefinitions)
                       throws NoSuchDefinitionException
    Constructor. Create a factory initialized with definitions from XmlDefinitionsSet.

    Parameters:
    xmlDefinitions - Resolved definition from XmlDefinitionSet.
    Throws:
    NoSuchDefinitionException - If an error occurs while resolving inheritance
    Method Detail

    getDefinition

    public ComponentDefinition getDefinition(java.lang.String name,
                                             javax.servlet.ServletRequest request,
                                             javax.servlet.ServletContext servletContext)
                                      throws NoSuchDefinitionException,
                                             DefinitionsFactoryException
    Get a definition by its name.

    Parameters:
    name - Name of the definition.
    request - Servlet request.
    servletContext - Servlet context.
    Throws:
    DefinitionsFactoryException - An error occur while getting definition.
    NoSuchDefinitionException - No definition found for specified name Implementation can throw more accurate exception as a subclass of this exception.

    putDefinition

    public void putDefinition(ComponentDefinition definition)
    Put definition in set.

    Parameters:
    definition - Definition to put.

    toString

    public java.lang.String toString()
    Return String representation.

    Overrides:
    toString in class java.lang.Object
    Returns:
    String representation.


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/xmlDefinition/FactorySet.html0000644000175000017500000005422510404045204032255 0ustar arnaudarnaud00000000000000 FactorySet (Apache Struts API Documentation)

    org.apache.struts.tiles.xmlDefinition
    Class FactorySet

    java.lang.Object
      |
      +--org.apache.struts.tiles.xmlDefinition.FactorySet
    
    All Implemented Interfaces:
    ComponentDefinitionsFactory, java.io.Serializable
    Direct Known Subclasses:
    I18nFactorySet

    public abstract class FactorySet
    extends java.lang.Object
    implements ComponentDefinitionsFactory

    Component Definitions factory. This factory contains several factories identified by a key. The getDefinition() method first looks for the factory key, retrieves or creates this factory and then calls its getDefinition().

    See Also:
    Serialized Form

    Field Summary
    protected  java.util.Map factories
              Loaded factories
     
    Constructor Summary
    FactorySet()
              Constructor.
     
    Method Summary
    protected abstract  DefinitionsFactory createFactory(java.lang.Object key, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Create a factory for specified key.
    protected abstract  DefinitionsFactory getDefaultFactory()
              Get default factory.
     ComponentDefinition getDefinition(java.lang.String name, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Get a definition by its name.
    protected abstract  java.lang.Object getDefinitionsFactoryKey(java.lang.String name, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Extract key that will be used to get the sub factory.
    protected  DefinitionsFactory getFactory(java.lang.Object key, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Get a factory by its key.
    abstract  void initFactory(javax.servlet.ServletContext servletContext, java.util.Map properties)
              Init factory set.
     java.lang.String toString()
              Return String representation.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
     

    Field Detail

    factories

    protected java.util.Map factories
    Loaded factories

    Constructor Detail

    FactorySet

    public FactorySet()
    Constructor.

    Method Detail

    getDefinitionsFactoryKey

    protected abstract java.lang.Object getDefinitionsFactoryKey(java.lang.String name,
                                                                 javax.servlet.ServletRequest request,
                                                                 javax.servlet.ServletContext servletContext)
    Extract key that will be used to get the sub factory.

    Parameters:
    name - Name of requested definition.
    request - Current servlet request.
    servletContext - Current servlet context.
    Returns:
    Object.

    getDefaultFactory

    protected abstract DefinitionsFactory getDefaultFactory()
    Get default factory.

    Returns:
    Default factory.

    getFactory

    protected DefinitionsFactory getFactory(java.lang.Object key,
                                            javax.servlet.ServletRequest request,
                                            javax.servlet.ServletContext servletContext)
                                     throws DefinitionsFactoryException
    Get a factory by its key. If key is null, return defaultFactory. Search in loaded factories. If not found, create factory and store return value in loaded factories.

    Parameters:
    key - Key of requested definition.
    request - Current servlet request.
    servletContext - Current servlet context.
    Throws:
    DefinitionsFactoryException - If an error occur while creating factory.

    getDefinition

    public ComponentDefinition getDefinition(java.lang.String name,
                                             javax.servlet.ServletRequest request,
                                             javax.servlet.ServletContext servletContext)
                                      throws NoSuchDefinitionException,
                                             DefinitionsFactoryException
    Get a definition by its name.

    Specified by:
    getDefinition in interface ComponentDefinitionsFactory
    Parameters:
    name - Name of requested definition.
    request - Current servlet request.
    servletContext - Current servlet context.
    Throws:
    NoSuchDefinitionException - No definition found for specified name
    DefinitionsFactoryException - General exception

    createFactory

    protected abstract DefinitionsFactory createFactory(java.lang.Object key,
                                                        javax.servlet.ServletRequest request,
                                                        javax.servlet.ServletContext servletContext)
                                                 throws DefinitionsFactoryException
    Create a factory for specified key. This method is called by getFactory() when the requested factory doesn't already exist. Must return a factory, or a default one. Real implementation needs to provide this method.

    Parameters:
    key - Key of requested definition.
    request - Current servlet request.
    servletContext - Current servlet context
    Throws:
    DefinitionsFactoryException - If an error occur while creating factory.

    initFactory

    public abstract void initFactory(javax.servlet.ServletContext servletContext,
                                     java.util.Map properties)
                              throws DefinitionsFactoryException
    Init factory set.

    Specified by:
    initFactory in interface ComponentDefinitionsFactory
    Parameters:
    servletContext - Current servlet context
    properties - properties used to initialized factory set;
    Throws:
    DefinitionsFactoryException - An error occur during initialization.

    toString

    public java.lang.String toString()
    Return String representation.

    Overrides:
    toString in class java.lang.Object
    Returns:
    String representation.


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/xmlDefinition/I18nFactorySet.html0000644000175000017500000012730510404045240032715 0ustar arnaudarnaud00000000000000 I18nFactorySet (Apache Struts API Documentation)

    org.apache.struts.tiles.xmlDefinition
    Class I18nFactorySet

    java.lang.Object
      |
      +--org.apache.struts.tiles.xmlDefinition.FactorySet
            |
            +--org.apache.struts.tiles.xmlDefinition.I18nFactorySet
    
    All Implemented Interfaces:
    ComponentDefinitionsFactory, java.io.Serializable

    public class I18nFactorySet
    extends FactorySet

    Definitions factory. This implementation allows to have a set of definition factories. There is a main factory and one factory for each file associated to a Locale. To retrieve a definition, we first search for the appropriate factory using the Locale found in session context. If no factory is found, use the default one. Then we ask the factory for the definition. A definition factory file is loaded using main filename extended with locale code (ex : templateDefinitions_fr.xml). If no file is found under this name, use default file.

    See Also:
    Serialized Form

    Field Summary
    static java.lang.String[] DEFAULT_DEFINITION_FILENAMES
              Possible definition filenames.
    protected  DefinitionsFactory defaultFactory
              Default factory.
    static java.lang.String DEFINITIONS_CONFIG_PARAMETER_NAME
              Config file parameter name.
    static java.lang.String FILENAME_EXTENSION
              Default filenames extension.
    private  java.util.List filenames
              Names of files containing instances descriptions.
    static java.lang.String INSTANCES_CONFIG_PARAMETER_NAME
              Deprecated. use DEFINITIONS_CONFIG_PARAMETER_NAME
    protected  boolean isValidatingParser
              Do we want validating parser.
    private  java.util.Map loaded
              Collection of already loaded definitions set, referenced by their suffix.
    protected static org.apache.commons.logging.Log log
              Commons Logging instance.
    private static int MAX_BUNDLES_SEARCHED
              Maximum length of one branch of the resource search path tree.
    static java.lang.String PARSER_DETAILS_PARAMETER_NAME
              Config file parameter name.
    static java.lang.String PARSER_VALIDATE_PARAMETER_NAME
              Config file parameter name.
    protected  int parserDetailLevel
              Parser detail level.
    protected  XmlParser xmlParser
              Xml parser used.
     
    Fields inherited from class org.apache.struts.tiles.xmlDefinition.FactorySet
    factories
     
    Constructor Summary
    I18nFactorySet()
              Parameterless Constructor.
    I18nFactorySet(javax.servlet.ServletContext servletContext, java.util.Map properties)
              Constructor.
     
    Method Summary
    private static java.util.List calculatePostixes(java.lang.String baseName, java.util.Locale locale)
              Calculate the postixes along the search path from the base bundle to the bundle specified by baseName and locale.
    private  java.lang.String concatPostfix(java.lang.String name, java.lang.String postfix)
              Concat postfix to the name.
    protected  DefinitionsFactory createDefaultFactory(javax.servlet.ServletContext servletContext)
              Create default factory .
    protected  DefinitionsFactory createFactory(java.lang.Object key, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Create a factory for specified key.
    protected  DefinitionsFactory getDefaultFactory()
              Get default factory.
    protected  java.lang.Object getDefinitionsFactoryKey(java.lang.String name, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Extract key that will be used to get the sub factory.
     void initFactory(javax.servlet.ServletContext servletContext, java.util.Map properties)
              Initialization method.
    protected  void initFactory(javax.servlet.ServletContext servletContext, java.lang.String proposedFilename)
              Initialization method.
    private  XmlDefinitionsSet parseXmlFile(javax.servlet.ServletContext servletContext, java.lang.String filename, XmlDefinitionsSet xmlDefinitions)
              Parse specified xml file and add definition to specified definitions set.
    private  XmlDefinitionsSet parseXmlFiles(javax.servlet.ServletContext servletContext, java.lang.String postfix, XmlDefinitionsSet xmlDefinitions)
              Parse files associated to postix if they exist.
     java.lang.String toString()
              Return String representation.
     
    Methods inherited from class org.apache.struts.tiles.xmlDefinition.FactorySet
    getDefinition, getFactory
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
     

    Field Detail

    log

    protected static org.apache.commons.logging.Log log
    Commons Logging instance.


    INSTANCES_CONFIG_PARAMETER_NAME

    public static final java.lang.String INSTANCES_CONFIG_PARAMETER_NAME
    Deprecated. use DEFINITIONS_CONFIG_PARAMETER_NAME

    Config file parameter name.

    See Also:
    Constant Field Values

    DEFINITIONS_CONFIG_PARAMETER_NAME

    public static final java.lang.String DEFINITIONS_CONFIG_PARAMETER_NAME
    Config file parameter name.

    See Also:
    Constant Field Values

    PARSER_DETAILS_PARAMETER_NAME

    public static final java.lang.String PARSER_DETAILS_PARAMETER_NAME
    Config file parameter name.

    See Also:
    Constant Field Values

    PARSER_VALIDATE_PARAMETER_NAME

    public static final java.lang.String PARSER_VALIDATE_PARAMETER_NAME
    Config file parameter name.

    See Also:
    Constant Field Values

    DEFAULT_DEFINITION_FILENAMES

    public static final java.lang.String[] DEFAULT_DEFINITION_FILENAMES
    Possible definition filenames.


    defaultFactory

    protected DefinitionsFactory defaultFactory
    Default factory.


    xmlParser

    protected transient XmlParser xmlParser
    Xml parser used. Attribute is transient to allow serialization. In this implementaiton, xmlParser is created each time we need it ;-(.


    isValidatingParser

    protected boolean isValidatingParser
    Do we want validating parser. Default is false. Can be set from servlet config file.


    parserDetailLevel

    protected int parserDetailLevel
    Parser detail level. Default is 0. Can be set from servlet config file.


    MAX_BUNDLES_SEARCHED

    private static final int MAX_BUNDLES_SEARCHED
    Maximum length of one branch of the resource search path tree. Used in getBundle().

    See Also:
    Constant Field Values

    FILENAME_EXTENSION

    public static final java.lang.String FILENAME_EXTENSION
    Default filenames extension.

    See Also:
    Constant Field Values

    filenames

    private java.util.List filenames
    Names of files containing instances descriptions.


    loaded

    private java.util.Map loaded
    Collection of already loaded definitions set, referenced by their suffix.

    Constructor Detail

    I18nFactorySet

    public I18nFactorySet()
    Parameterless Constructor. Method initFactory(javax.servlet.ServletContext, java.util.Map) must be called prior to any use of created factory.


    I18nFactorySet

    public I18nFactorySet(javax.servlet.ServletContext servletContext,
                          java.util.Map properties)
                   throws DefinitionsFactoryException
    Constructor. Init the factory by reading appropriate configuration file.

    Parameters:
    servletContext - Servlet context.
    properties - Map containing all properties.
    Throws:
    FactoryNotFoundException - Can't find factory configuration file.
    DefinitionsFactoryException
    Method Detail

    initFactory

    public void initFactory(javax.servlet.ServletContext servletContext,
                            java.util.Map properties)
                     throws DefinitionsFactoryException
    Initialization method. Init the factory by reading appropriate configuration file. This method is called exactly once immediately after factory creation in case of internal creation (by DefinitionUtil).

    Specified by:
    initFactory in interface ComponentDefinitionsFactory
    Specified by:
    initFactory in class FactorySet
    Parameters:
    servletContext - Servlet Context passed to newly created factory.
    properties - Map of name/property passed to newly created factory. Map can contains more properties than requested.
    Throws:
    DefinitionsFactoryException - An error occur during initialization.

    initFactory

    protected void initFactory(javax.servlet.ServletContext servletContext,
                               java.lang.String proposedFilename)
                        throws DefinitionsFactoryException,
                               java.io.FileNotFoundException
    Initialization method. Init the factory by reading appropriate configuration file. This method is called exactly once immediately after factory creation in case of internal creation (by DefinitionUtil).

    Parameters:
    servletContext - Servlet Context passed to newly created factory.
    proposedFilename - File names, comma separated, to use as base file names.
    Throws:
    DefinitionsFactoryException - An error occur during initialization.
    java.io.FileNotFoundException

    getDefaultFactory

    protected DefinitionsFactory getDefaultFactory()
    Get default factory.

    Specified by:
    getDefaultFactory in class FactorySet
    Returns:
    Default factory

    createDefaultFactory

    protected DefinitionsFactory createDefaultFactory(javax.servlet.ServletContext servletContext)
                                               throws DefinitionsFactoryException,
                                                      java.io.FileNotFoundException
    Create default factory . Create InstancesMapper for specified Locale. If creation failes, use default mapper and log error message.

    Parameters:
    servletContext - Current servlet context. Used to open file.
    Returns:
    Created default definition factory.
    Throws:
    DefinitionsFactoryException - If an error occur while creating factory.
    java.io.FileNotFoundException - if factory can't be loaded from filenames.

    getDefinitionsFactoryKey

    protected java.lang.Object getDefinitionsFactoryKey(java.lang.String name,
                                                        javax.servlet.ServletRequest request,
                                                        javax.servlet.ServletContext servletContext)
    Extract key that will be used to get the sub factory.

    Specified by:
    getDefinitionsFactoryKey in class FactorySet
    Parameters:
    name - Name of requested definition
    request - Current servlet request.
    servletContext - Current servlet context.
    Returns:
    the key or null if not found.

    createFactory

    protected DefinitionsFactory createFactory(java.lang.Object key,
                                               javax.servlet.ServletRequest request,
                                               javax.servlet.ServletContext servletContext)
                                        throws DefinitionsFactoryException
    Create a factory for specified key. If creation failes, return default factory and log an error message.

    Specified by:
    createFactory in class FactorySet
    Parameters:
    key - The key.
    request - Servlet request.
    servletContext - Servlet context.
    Returns:
    Definition factory for specified key.
    Throws:
    DefinitionsFactoryException - If an error occur while creating factory.

    calculatePostixes

    private static java.util.List calculatePostixes(java.lang.String baseName,
                                                    java.util.Locale locale)
    Calculate the postixes along the search path from the base bundle to the bundle specified by baseName and locale. Method copied from java.util.ResourceBundle

    Parameters:
    baseName - the base bundle name
    locale - the locale

    parseXmlFiles

    private XmlDefinitionsSet parseXmlFiles(javax.servlet.ServletContext servletContext,
                                            java.lang.String postfix,
                                            XmlDefinitionsSet xmlDefinitions)
                                     throws DefinitionsFactoryException
    Parse files associated to postix if they exist. For each name in filenames, append postfix before file extension, then try to load the corresponding file. If file doesn't exist, try next one. Each file description is added to the XmlDefinitionsSet description. The XmlDefinitionsSet description is created only if there is a definition file. Inheritance is not resolved in the returned XmlDefinitionsSet. If no description file can be opened and no definiion set is provided, return null.

    Parameters:
    postfix - Postfix to add to each description file.
    xmlDefinitions - Definitions set to which definitions will be added. If null, a definitions set is created on request.
    Returns:
    XmlDefinitionsSet The definitions set created or passed as parameter.
    Throws:
    DefinitionsFactoryException - On errors parsing file.

    parseXmlFile

    private XmlDefinitionsSet parseXmlFile(javax.servlet.ServletContext servletContext,
                                           java.lang.String filename,
                                           XmlDefinitionsSet xmlDefinitions)
                                    throws DefinitionsFactoryException
    Parse specified xml file and add definition to specified definitions set. This method is used to load several description files in one instances list. If filename exists and definition set is null, create a new set. Otherwise, return passed definition set (can be null).

    Parameters:
    servletContext - Current servlet context. Used to open file.
    filename - Name of file to parse.
    xmlDefinitions - Definitions set to which definitions will be added. If null, a definitions set is created on request.
    Returns:
    XmlDefinitionsSet The definitions set created or passed as parameter.
    Throws:
    DefinitionsFactoryException - On errors parsing file.

    concatPostfix

    private java.lang.String concatPostfix(java.lang.String name,
                                           java.lang.String postfix)
    Concat postfix to the name. Take care of existing filename extension. Transform the given name "name.ext" to have "name" + "postfix" + "ext". If there is no ext, return "name" + "postfix".

    Parameters:
    name - Filename.
    postfix - Postfix to add.
    Returns:
    Concatenated filename.

    toString

    public java.lang.String toString()
    Return String representation.

    Overrides:
    toString in class FactorySet
    Returns:
    String representation.


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/xmlDefinition/XmlAttribute.html0000644000175000017500000005524310404045236032624 0ustar arnaudarnaud00000000000000 XmlAttribute (Apache Struts API Documentation)

    org.apache.struts.tiles.xmlDefinition
    Class XmlAttribute

    java.lang.Object
      |
      +--org.apache.struts.tiles.xmlDefinition.XmlAttribute
    
    Direct Known Subclasses:
    XmlListAttribute

    public class XmlAttribute
    extends java.lang.Object

    A property key-value pair. This class is used to read configuration files.


    Field Summary
    private  java.lang.String direct
              Attribute value.
    private  java.lang.String name
              Attribute name or key.
    private  java.lang.Object realValue
              Real attribute value.
    private  java.lang.String role
              Attribute value.
    private  java.lang.Object value
              Attribute value.
    private  java.lang.String valueType
              Attribute value.
     
    Constructor Summary
    XmlAttribute()
              Constructor.
    XmlAttribute(java.lang.String name, java.lang.Object value)
              Constructor.
     
    Method Summary
    protected  java.lang.Object computeRealValue()
              Compute real value from attributes setting.
     java.lang.String getAttribute()
              Another access method for the name property.
     java.lang.String getName()
              Access method for the name property.
     java.lang.String getRole()
              Access method for the name property.
     java.lang.Object getValue()
              Access method for the value property.
     void setAttribute(java.lang.String aName)
              Sets the value of the name property.
     void setBody(java.lang.String body)
              Sets the value of the value property.
     void setContent(java.lang.Object aValue)
              Sets the value of the value property.
     void setDirect(java.lang.String value)
              Sets the value of the value property.
     void setName(java.lang.String aName)
               
     void setRole(java.lang.String role)
               
     void setType(java.lang.String value)
              Sets the value of the value property.
     void setValue(java.lang.Object aValue)
              Sets the value of the value property.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    name

    private java.lang.String name
    Attribute name or key.


    value

    private java.lang.Object value
    Attribute value. Value read from description file.


    direct

    private java.lang.String direct
    Attribute value.


    valueType

    private java.lang.String valueType
    Attribute value.


    role

    private java.lang.String role
    Attribute value.


    realValue

    private java.lang.Object realValue
    Real attribute value. Real value is the value after processing of valueType. I.e. if a type is defined, realValue contains wrapper for this type.

    Constructor Detail

    XmlAttribute

    public XmlAttribute()
    Constructor.


    XmlAttribute

    public XmlAttribute(java.lang.String name,
                        java.lang.Object value)
    Constructor.

    Method Detail

    getName

    public java.lang.String getName()
    Access method for the name property.

    Returns:
    the current value of the name property

    setRole

    public void setRole(java.lang.String role)
    Returns:
    void Sets the value of the name property.

    getRole

    public java.lang.String getRole()
    Access method for the name property.

    Returns:
    the current value of the name property

    setName

    public void setName(java.lang.String aName)
    Parameters:
    aName - the new value of the name property
    Returns:
    void Sets the value of the name property.

    getAttribute

    public java.lang.String getAttribute()
    Another access method for the name property.

    Returns:
    the current value of the name property

    setAttribute

    public void setAttribute(java.lang.String aName)
    Sets the value of the name property.

    Parameters:
    aName - the new value of the name property

    getValue

    public java.lang.Object getValue()
    Access method for the value property. Return the value or a QualifiedAttribute containing the value if 'direct' is set.

    Returns:
    the current value of the value property

    setValue

    public void setValue(java.lang.Object aValue)
    Sets the value of the value property.

    Parameters:
    aValue - the new value of the value property

    setContent

    public void setContent(java.lang.Object aValue)
    Sets the value of the value property.

    Parameters:
    aValue - the new value of the value property

    setBody

    public void setBody(java.lang.String body)
    Sets the value of the value property.


    setDirect

    public void setDirect(java.lang.String value)
    Sets the value of the value property.


    setType

    public void setType(java.lang.String value)
    Sets the value of the value property.


    computeRealValue

    protected java.lang.Object computeRealValue()
    Compute real value from attributes setting.



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/xmlDefinition/XmlDefinition.html0000644000175000017500000005601010404045204032735 0ustar arnaudarnaud00000000000000 XmlDefinition (Apache Struts API Documentation)

    org.apache.struts.tiles.xmlDefinition
    Class XmlDefinition

    java.lang.Object
      |
      +--org.apache.struts.tiles.ComponentDefinition
            |
            +--org.apache.struts.tiles.xmlDefinition.XmlDefinition
    
    All Implemented Interfaces:
    java.io.Serializable

    public class XmlDefinition
    extends ComponentDefinition

    A definition read from an XML definitions file.

    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String inherit
              Extends attribute value.
    private  boolean isVisited
              Used for resolving inheritance.
    protected static org.apache.commons.logging.Log log
              Commons Logging instance.
     
    Fields inherited from class org.apache.struts.tiles.ComponentDefinition
    ACTION, attributes, controller, CONTROLLER, controllerType, name, path, role, URL
     
    Constructor Summary
    XmlDefinition()
              Constructor.
     
    Method Summary
     void addAttribute(XmlAttribute attribute)
              Add an attribute to this component.
     java.lang.String getExtends()
              Get extends.
     boolean isExtending()
              Get extends flag.
     void overload(XmlDefinition child)
              Overload this definition with passed child.
     void resolveInheritance(XmlDefinitionsSet definitionsSet)
              Resolve inheritance.
     void setExtends(java.lang.String name)
              Set extends.
     void setIsVisited(boolean isVisited)
              Set isVisited.
     
    Methods inherited from class org.apache.struts.tiles.ComponentDefinition
    createController, createControllerFromClassname, getAttribute, getAttributes, getController, getControllerInstance, getControllerType, getName, getOrCreateController, getPage, getPath, getRole, getTemplate, put, put, put, put, putAttribute, setController, setControllerClass, setControllerInstance, setControllerType, setControllerUrl, setName, setPage, setPath, setRole, setTemplate, toString
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
     

    Field Detail

    inherit

    private java.lang.String inherit
    Extends attribute value.


    log

    protected static org.apache.commons.logging.Log log
    Commons Logging instance.


    isVisited

    private boolean isVisited
    Used for resolving inheritance.

    Constructor Detail

    XmlDefinition

    public XmlDefinition()
    Constructor.

    Method Detail

    addAttribute

    public void addAttribute(XmlAttribute attribute)
    Add an attribute to this component.

    Parameters:
    attribute - Attribute to add.

    setExtends

    public void setExtends(java.lang.String name)
    Set extends.

    Parameters:
    name - Name of the extended definition.

    getExtends

    public java.lang.String getExtends()
    Get extends.

    Returns:
    Name of the extended definition.

    isExtending

    public boolean isExtending()
    Get extends flag.


    setIsVisited

    public void setIsVisited(boolean isVisited)
    Set isVisited.


    resolveInheritance

    public void resolveInheritance(XmlDefinitionsSet definitionsSet)
                            throws NoSuchDefinitionException
    Resolve inheritance. First, resolve parent's inheritance, then set path to the parent's path. Also copy attributes setted in parent, and not set in child If instance doesn't extend anything, do nothing.

    Throws:
    NoSuchDefinitionException - If an inheritance can not be solved.

    overload

    public void overload(XmlDefinition child)
    Overload this definition with passed child. All attributes from child are copied to this definition. Previous attributes with same name are disguarded. Special attribute 'path','role' and 'extends' are overloaded if defined in child.

    Parameters:
    child - Child used to overload this definition.


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/xmlDefinition/XmlDefinitionsSet.html0000644000175000017500000003657210404045210033604 0ustar arnaudarnaud00000000000000 XmlDefinitionsSet (Apache Struts API Documentation)

    org.apache.struts.tiles.xmlDefinition
    Class XmlDefinitionsSet

    java.lang.Object
      |
      +--org.apache.struts.tiles.xmlDefinition.XmlDefinitionsSet
    

    public class XmlDefinitionsSet
    extends java.lang.Object

    A set of definitions read from XML definitions file.


    Field Summary
    protected  java.util.Map definitions
              Defined definitions.
     
    Constructor Summary
    XmlDefinitionsSet()
              Constructor.
     
    Method Summary
     void extend(XmlDefinitionsSet child)
              Add definitions from specified child definitions set.
     XmlDefinition getDefinition(java.lang.String name)
              Get requested definition.
     java.util.Map getDefinitions()
              Get definitions map.
     void putDefinition(XmlDefinition definition)
              Put definition in set.
     void resolveInheritances()
              Resolve extended instances.
     java.lang.String toString()
              Get String representation.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
     

    Field Detail

    definitions

    protected java.util.Map definitions
    Defined definitions.

    Constructor Detail

    XmlDefinitionsSet

    public XmlDefinitionsSet()
    Constructor.

    Method Detail

    putDefinition

    public void putDefinition(XmlDefinition definition)
    Put definition in set.

    Parameters:
    definition - Definition to add.

    getDefinition

    public XmlDefinition getDefinition(java.lang.String name)
    Get requested definition.

    Parameters:
    name - Definition name.

    getDefinitions

    public java.util.Map getDefinitions()
    Get definitions map.


    resolveInheritances

    public void resolveInheritances()
                             throws NoSuchDefinitionException
    Resolve extended instances.

    NoSuchDefinitionException

    extend

    public void extend(XmlDefinitionsSet child)
    Add definitions from specified child definitions set. For each definition in child, look if it already exists in this set. If not, add it, if yes, overload parent's definition with child definition.

    Parameters:
    child - Definition used to overload this object.

    toString

    public java.lang.String toString()
    Get String representation.

    Overrides:
    toString in class java.lang.Object


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/xmlDefinition/XmlListAttribute.html0000644000175000017500000004017710404045250033454 0ustar arnaudarnaud00000000000000 XmlListAttribute (Apache Struts API Documentation)

    org.apache.struts.tiles.xmlDefinition
    Class XmlListAttribute

    java.lang.Object
      |
      +--org.apache.struts.tiles.xmlDefinition.XmlAttribute
            |
            +--org.apache.struts.tiles.xmlDefinition.XmlListAttribute
    

    public class XmlListAttribute
    extends XmlAttribute

    An attribute as a List. This attribute associates a name with a list. The list can be found by the property name. Elements in list are retrieved using List methods. This class is used to read configuration files.


    Field Summary
    private  java.util.List list
              List.
     
    Fields inherited from class org.apache.struts.tiles.xmlDefinition.XmlAttribute
     
    Constructor Summary
    XmlListAttribute()
              Constructor.
    XmlListAttribute(java.lang.String name, java.util.List value)
              Constructor.
     
    Method Summary
     void add(java.lang.Object value)
              Add an element in list.
     void add(XmlAttribute element)
              Add an element in list.
     void addObject(java.lang.Object value)
              Add an element in list.
     
    Methods inherited from class org.apache.struts.tiles.xmlDefinition.XmlAttribute
    computeRealValue, getAttribute, getName, getRole, getValue, setAttribute, setBody, setContent, setDirect, setName, setRole, setType, setValue
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    list

    private java.util.List list
    List. We declare a List to avoid cast. Parent "value" property points to the same list.

    Constructor Detail

    XmlListAttribute

    public XmlListAttribute()
    Constructor.


    XmlListAttribute

    public XmlListAttribute(java.lang.String name,
                            java.util.List value)
    Constructor.

    Parameters:
    name - Name.
    value - List.
    Method Detail

    add

    public void add(XmlAttribute element)
    Add an element in list. We use a property to avoid rewriting a new class.

    Parameters:
    element - XmlAttribute to add.

    add

    public void add(java.lang.Object value)
    Add an element in list.

    Parameters:
    value - Object to add.

    addObject

    public void addObject(java.lang.Object value)
    Add an element in list.

    Parameters:
    value - Object to add.


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/xmlDefinition/XmlParser.html0000644000175000017500000004565310404045214032115 0ustar arnaudarnaud00000000000000 XmlParser (Apache Struts API Documentation)

    org.apache.struts.tiles.xmlDefinition
    Class XmlParser

    java.lang.Object
      |
      +--org.apache.struts.tiles.xmlDefinition.XmlParser
    

    public class XmlParser
    extends java.lang.Object

    Parse an XML definitions file.


    Field Summary
    protected  org.apache.commons.digester.Digester digester
              Associated digester.
    protected  java.lang.String[] registrations
              The set of public identifiers, and corresponding resource names for the versions of the configuration file DTDs we know about.
    protected  boolean validating
              Should we use a validating XML parser to read the configuration file.
     
    Constructor Summary
    XmlParser()
              Constructor.
     
    Method Summary
    protected  void initDigester(org.apache.commons.digester.Digester digester)
              Init digester.
    private  void initDigesterForComponentsDefinitionsSyntax(org.apache.commons.digester.Digester digester)
              Init digester for components syntax.
    private  void initDigesterForInstancesSyntax(org.apache.commons.digester.Digester digester)
              Init digester in order to parse instances definition file syntax.
    private  void initDigesterForTilesDefinitionsSyntax(org.apache.commons.digester.Digester digester)
              Init digester for Tiles syntax.
    static void main(java.lang.String[] args)
              Main method to check file syntax.
     void parse(java.io.InputStream in, XmlDefinitionsSet definitions)
              Parse input reader and add encountered definitions to definitions set.
     void setDetailLevel(int detailLevel)
              Deprecated. Use the commons-logging to set digester debug level.
     void setValidating(boolean validating)
              Set digester validating flag.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    digester

    protected org.apache.commons.digester.Digester digester
    Associated digester.


    validating

    protected boolean validating
    Should we use a validating XML parser to read the configuration file. Default is false.


    registrations

    protected java.lang.String[] registrations
    The set of public identifiers, and corresponding resource names for the versions of the configuration file DTDs we know about. There MUST be an even number of Strings in this list!

    Constructor Detail

    XmlParser

    public XmlParser()
    Constructor. Creates a digester parser and initializes syntax rules.

    Method Detail

    setValidating

    public void setValidating(boolean validating)
    Set digester validating flag.


    setDetailLevel

    public void setDetailLevel(int detailLevel)
    Deprecated. Use the commons-logging to set digester debug level.

    Set digester detail level.


    initDigesterForComponentsDefinitionsSyntax

    private void initDigesterForComponentsDefinitionsSyntax(org.apache.commons.digester.Digester digester)
    Init digester for components syntax. This is an old set of rules, left for backward compatibility.

    Parameters:
    digester - Digester instance to use.

    initDigesterForTilesDefinitionsSyntax

    private void initDigesterForTilesDefinitionsSyntax(org.apache.commons.digester.Digester digester)
    Init digester for Tiles syntax. Same as components, but with first element = tiles-definitions

    Parameters:
    digester - Digester instance to use.

    initDigesterForInstancesSyntax

    private void initDigesterForInstancesSyntax(org.apache.commons.digester.Digester digester)
    Init digester in order to parse instances definition file syntax. Instances is an old name for "definition". This method is left for backwards compatibility.

    Parameters:
    digester - Digester instance to use.

    initDigester

    protected void initDigester(org.apache.commons.digester.Digester digester)
    Init digester.

    Parameters:
    digester - Digester instance to use.

    parse

    public void parse(java.io.InputStream in,
                      XmlDefinitionsSet definitions)
               throws java.io.IOException,
                      org.xml.sax.SAXException
    Parse input reader and add encountered definitions to definitions set.

    Parameters:
    in - Input stream.
    definitions - Xml Definitions set to which encountered definition are added.
    Throws:
    java.io.IOException - On errors during file parsing.
    org.xml.sax.SAXException - On errors parsing XML.

    main

    public static void main(java.lang.String[] args)
    Main method to check file syntax.



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/xmlDefinition/package-frame.html0000644000175000017500000000316210404045236032654 0ustar arnaudarnaud00000000000000 org.apache.struts.tiles.xmlDefinition (Apache Struts API Documentation) org.apache.struts.tiles.xmlDefinition
    Classes 
    DefinitionsFactory
    FactorySet
    I18nFactorySet
    XmlAttribute
    XmlDefinition
    XmlDefinitionsSet
    XmlListAttribute
    XmlParser
    libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/xmlDefinition/package-summary.html0000644000175000017500000001613710404045204033260 0ustar arnaudarnaud00000000000000 org.apache.struts.tiles.xmlDefinition (Apache Struts API Documentation)

    Package org.apache.struts.tiles.xmlDefinition

    Class Summary
    DefinitionsFactory A factory for definitions.
    FactorySet Component Definitions factory.
    I18nFactorySet Definitions factory.
    XmlAttribute A property key-value pair.
    XmlDefinition A definition read from an XML definitions file.
    XmlDefinitionsSet A set of definitions read from XML definitions file.
    XmlListAttribute An attribute as a List.
    XmlParser Parse an XML definitions file.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/xmlDefinition/package-tree.html0000644000175000017500000001653210404045216032524 0ustar arnaudarnaud00000000000000 org.apache.struts.tiles.xmlDefinition Class Hierarchy (Apache Struts API Documentation)

    Hierarchy For Package org.apache.struts.tiles.xmlDefinition

    Package Hierarchies:
    All Packages

    Class Hierarchy



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/xmlDefinition/package-use.html0000644000175000017500000002225610404045246032364 0ustar arnaudarnaud00000000000000 Uses of Package org.apache.struts.tiles.xmlDefinition (Apache Struts API Documentation)

    Uses of Package
    org.apache.struts.tiles.xmlDefinition

    Packages that use org.apache.struts.tiles.xmlDefinition
    org.apache.struts.tiles
    The Tiles taglib and framework allows building web pages by assembling reusable pieces of pages, called Tiles. 
    org.apache.struts.tiles.xmlDefinition   
     

    Classes in org.apache.struts.tiles.xmlDefinition used by org.apache.struts.tiles
    XmlDefinition
              A definition read from an XML definitions file.
     

    Classes in org.apache.struts.tiles.xmlDefinition used by org.apache.struts.tiles.xmlDefinition
    DefinitionsFactory
              A factory for definitions.
    FactorySet
              Component Definitions factory.
    XmlAttribute
              A property key-value pair.
    XmlDefinition
              A definition read from an XML definitions file.
    XmlDefinitionsSet
              A set of definitions read from XML definitions file.
    XmlParser
              Parse an XML definitions file.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/ActionComponentServlet.html0000644000175000017500000010542510404045214032026 0ustar arnaudarnaud00000000000000 ActionComponentServlet (Apache Struts API Documentation)

    org.apache.struts.tiles
    Class ActionComponentServlet

    java.lang.Object
      |
      +--javax.servlet.GenericServlet
            |
            +--javax.servlet.http.HttpServlet
                  |
                  +--org.apache.struts.action.ActionServlet
                        |
                        +--org.apache.struts.tiles.ActionComponentServlet
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.Servlet, javax.servlet.ServletConfig

    Deprecated. Tiles now uses ActionServlet with TilesPlugin and TilesRequestProcessor.

    public class ActionComponentServlet
    extends ActionServlet

    Action Servlet to be used with Tiles and Struts 1.0.x. For Struts 1.1, use TilesPlugin and eventualy TilesRequestProcessor. This servlet extends struts one. It adds channels and screens dispatching capabilities. We overide all methods that do request forward (i.e. 'processActionForward' and 'processValidate') in order to call a new method performing forward. In fact, we copy methods to overide, and change lines doing forward which now call 'processForward()'. Rest of the method is unchanged. This new method could now be overiden in order to dispatch request before forwarding. Compliant to ActionServlet from struts 2001/06/25 00:02:27

    See Also:
    Serialized Form

    Field Summary
    private  DefinitionsFactory definitionsFactory
              Deprecated. Definitions factory
     
    Fields inherited from class org.apache.struts.action.ActionServlet
    config, configDigester, convertNull, dataSources, debug, internal, internalName, log, processor, registrations, servletMapping, servletName
     
    Fields inherited from class javax.servlet.http.HttpServlet
     
    Constructor Summary
    ActionComponentServlet()
              Deprecated.  
     
    Method Summary
    protected  void doForward(java.lang.String uri, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
              Deprecated. Do a forward, and eventually catch uri containing Tiles definition.
     void init()
              Deprecated. Init method.
     void initComponentDefinitionsMapping()
              Deprecated. Read component instance mapping configuration file.
    protected  void processActionForward(ActionForward forward, ActionMapping mapping, ActionForm formInstance, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
              Deprecated. Overload struts1.0 counterpart in order to catch forward calls.
    protected  boolean processForward(ActionMapping mapping, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
              Deprecated. Overload struts1.0 counterpart in order to catch forward calls.
    protected  void processForward(java.lang.String uri, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
              Deprecated. use doForward instead
    protected  boolean processInclude(ActionMapping mapping, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
              Deprecated. Overload struts1.0 counterpart in order to catch include calls.
    protected  boolean processValidate(ActionMapping mapping, ActionForm formInstance, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
              Deprecated. Overload struts1.0 counterpart in order to catch forward calls.
     
    Methods inherited from class org.apache.struts.action.ActionServlet
    addServletMapping, destroy, destroyApplications, destroyConfigDigester, destroyDataSources, destroyInternal, destroyModules, doGet, doPost, findDataSource, findFormBean, findForward, findMapping, getApplicationConfig, getDebug, getInternal, getModuleConfig, getRequestProcessor, getResources, initApplicationConfig, initApplicationDataSources, initApplicationMessageResources, initApplicationPlugIns, initConfigDigester, initDataSources, initInternal, initModuleConfig, initModuleDataSources, initModuleMessageResources, initModulePlugIns, initOther, initServlet, log, process
     
    Methods inherited from class javax.servlet.http.HttpServlet
    doDelete, doOptions, doPut, doTrace, getLastModified, service, service
     
    Methods inherited from class javax.servlet.GenericServlet
    getInitParameter, getInitParameterNames, getServletConfig, getServletContext, getServletInfo, getServletName, init, log, log
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    definitionsFactory

    private DefinitionsFactory definitionsFactory
    Deprecated. 
    Definitions factory

    Constructor Detail

    ActionComponentServlet

    public ActionComponentServlet()
    Deprecated. 
    Method Detail

    init

    public void init()
              throws javax.servlet.ServletException
    Deprecated. 
    Init method. This method is call on any servlet.

    Overrides:
    init in class ActionServlet
    Throws:
    javax.servlet.ServletException - if we cannot configure ourselves correctly

    initComponentDefinitionsMapping

    public void initComponentDefinitionsMapping()
                                         throws javax.servlet.ServletException
    Deprecated. 
    Read component instance mapping configuration file. This is where we read files properties.

    javax.servlet.ServletException

    processActionForward

    protected void processActionForward(ActionForward forward,
                                        ActionMapping mapping,
                                        ActionForm formInstance,
                                        javax.servlet.http.HttpServletRequest request,
                                        javax.servlet.http.HttpServletResponse response)
                                 throws java.io.IOException,
                                        javax.servlet.ServletException
    Deprecated. 
    Overload struts1.0 counterpart in order to catch forward calls. This is an exact copy, except the call to RequestDispatcher.forward() replaced by doForward(). This method is only used with Struts1.0.x Forward to the specified destination, by the specified mechanism, if an ActionForward instance was returned by the Action.

    Parameters:
    forward - The ActionForward returned by our action
    mapping - The ActionMapping we are processing
    formInstance - The ActionForm we are processing
    request - The servlet request we are processing
    response - The servlet response we are creating
    Throws:
    java.io.IOException - if an input/output error occurs
    javax.servlet.ServletException - if a servlet exception occurs

    processValidate

    protected boolean processValidate(ActionMapping mapping,
                                      ActionForm formInstance,
                                      javax.servlet.http.HttpServletRequest request,
                                      javax.servlet.http.HttpServletResponse response)
                               throws java.io.IOException,
                                      javax.servlet.ServletException
    Deprecated. 
    Overload struts1.0 counterpart in order to catch forward calls. This is an exact copy, except the call to RequestDispatcher.forward() replaced by doForward(). This method is only used with Struts1.0.x Call the validate() method of the specified ActionForm, and forward back to the input form if there are any errors. Return true if we should continue processing (and call the Action class perform() method), or return false if we have already forwarded control back to the input form.

    Parameters:
    mapping - The ActionMapping we are processing
    formInstance - The ActionForm we are processing
    request - The servlet request we are processing
    response - The servlet response we are processing
    Throws:
    java.io.IOException - if an input/output error occurs
    javax.servlet.ServletException - if a servlet exception occurs

    processForward

    protected boolean processForward(ActionMapping mapping,
                                     javax.servlet.http.HttpServletRequest request,
                                     javax.servlet.http.HttpServletResponse response)
                              throws java.io.IOException,
                                     javax.servlet.ServletException
    Deprecated. 
    Overload struts1.0 counterpart in order to catch forward calls. This is an exact copy, except the call to RequestDispatcher.forward() replaced by doForward(). This method is only used with Struts1.0.x Process a forward requested by this mapping, if any. Return true if processing of this request should continue (i.e. be processed by an Action class), or false if we have already handled this request.

    Parameters:
    mapping - The ActionMapping we are processing
    request - The request we are processing
    response - The response we are processing
    Throws:
    java.io.IOException - if the included resource throws an exception
    javax.servlet.ServletException - if the included resource throws an exception

    processInclude

    protected boolean processInclude(ActionMapping mapping,
                                     javax.servlet.http.HttpServletRequest request,
                                     javax.servlet.http.HttpServletResponse response)
                              throws java.io.IOException,
                                     javax.servlet.ServletException
    Deprecated. 
    Overload struts1.0 counterpart in order to catch include calls. This is an exact copy, except the call to RequestDispatcher.include() replaced by doInclude(). This method is only used with Struts1.0.x Process an include requested by this mapping, if any. Return true if processing of this request should continue (i.e. be processed by an Action class), or false if we have already handled this request.

    Parameters:
    mapping - The ActionMapping we are processing
    request - The request we are processing
    response - The response we are processing
    Throws:
    java.io.IOException - if the included resource throws an exception
    javax.servlet.ServletException - if the included resource throws an exception

    processForward

    protected void processForward(java.lang.String uri,
                                  javax.servlet.http.HttpServletRequest request,
                                  javax.servlet.http.HttpServletResponse response)
                           throws java.io.IOException,
                                  javax.servlet.ServletException
    Deprecated. use doForward instead

    Do forward, and eventually catch uri containing Tiles definition. Method left for compatibility reasons.

    Parameters:
    uri - Uri or Definition name to forward
    request - Current page request
    response - Current page response
    java.io.IOException
    javax.servlet.ServletException

    doForward

    protected void doForward(java.lang.String uri,
                             javax.servlet.http.HttpServletRequest request,
                             javax.servlet.http.HttpServletResponse response)
                      throws java.io.IOException,
                             javax.servlet.ServletException
    Deprecated. 
    Do a forward, and eventually catch uri containing Tiles definition. If uri is a valid uri, do a forward to it. If uri is a valid definition name, Tiles context is created from definition, and definition path is used as uri.

    Parameters:
    uri - Uri or Definition name to forward
    request - Current page request
    response - Current page response
    java.io.IOException
    javax.servlet.ServletException


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/ActionController.html0000644000175000017500000003206510404045224030642 0ustar arnaudarnaud00000000000000 ActionController (Apache Struts API Documentation)

    org.apache.struts.tiles
    Class ActionController

    java.lang.Object
      |
      +--org.apache.struts.tiles.ActionController
    
    All Implemented Interfaces:
    Controller

    public class ActionController
    extends java.lang.Object
    implements Controller

    Struts wrapper implementation of Controller. This implementation allows to wrap a Struts Action in a Controller.


    Field Summary
    private  Action action
              Struts action wrapped.
     
    Constructor Summary
    ActionController(Action action)
              Constructor.
     
    Method Summary
     void perform(ComponentContext tileContext, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, javax.servlet.ServletContext servletContext)
              Method associated to a tile and called immediately before tile is included.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    action

    private Action action
    Struts action wrapped.

    Constructor Detail

    ActionController

    public ActionController(Action action)
    Constructor.

    Parameters:
    action - Action to be wrapped.
    Method Detail

    perform

    public void perform(ComponentContext tileContext,
                        javax.servlet.http.HttpServletRequest request,
                        javax.servlet.http.HttpServletResponse response,
                        javax.servlet.ServletContext servletContext)
                 throws javax.servlet.ServletException,
                        java.io.IOException
    Method associated to a tile and called immediately before tile is included. This implementation calls a Struts Action. No servlet is set by this method.

    Specified by:
    perform in interface Controller
    Parameters:
    tileContext - Current tile context.
    request - Current request.
    response - Current response.
    servletContext - Current servlet context.
    javax.servlet.ServletException
    java.io.IOException


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/AttributeDefinition.html0000644000175000017500000002133010404045226031330 0ustar arnaudarnaud00000000000000 AttributeDefinition (Apache Struts API Documentation)

    org.apache.struts.tiles
    Interface AttributeDefinition

    All Superinterfaces:
    java.io.Serializable
    All Known Implementing Classes:
    UntyppedAttribute

    public interface AttributeDefinition
    extends java.io.Serializable

    Attribute definition used in a component definition.


    Method Summary
     java.lang.Object getValue()
              Return value hold by this typed attribute.
     void setRole(java.lang.String role)
              Set role attribute.
     

    Method Detail

    getValue

    public java.lang.Object getValue()
    Return value hold by this typed attribute.


    setRole

    public void setRole(java.lang.String role)
    Set role attribute.



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/ComponentContext.html0000644000175000017500000005276110404045210030670 0ustar arnaudarnaud00000000000000 ComponentContext (Apache Struts API Documentation)

    org.apache.struts.tiles
    Class ComponentContext

    java.lang.Object
      |
      +--org.apache.struts.tiles.ComponentContext
    
    All Implemented Interfaces:
    java.io.Serializable

    public class ComponentContext
    extends java.lang.Object
    implements java.io.Serializable

    Component context.

    See Also:
    Serialized Form

    Field Summary
    private  java.util.Map attributes
              Component attributes.
    private static java.util.Iterator EMPTY_ITERATOR
              EmptyIterator over component attributes.
     
    Constructor Summary
    ComponentContext()
              Constructor.
    ComponentContext(ComponentDefinition instance)
              Deprecated. Use ComponentContext(Map attributes) instead.
    ComponentContext(java.util.Map attributes)
              Constructor.
     
    Method Summary
     void addAll(java.util.Map newAttributes)
              Add all attributes to this context.
     void addMissing(java.util.Map defaultAttributes)
              Add all missing attributes to this context.
     java.lang.Object findAttribute(java.lang.String beanName, javax.servlet.jsp.PageContext pageContext)
              Find object in one of the contexts.
     java.lang.Object getAttribute(java.lang.String name)
              Get an attribute from context.
     java.lang.Object getAttribute(java.lang.String beanName, int scope, javax.servlet.jsp.PageContext pageContext)
              Get object from requested context.
     java.util.Iterator getAttributeNames()
              Get names of all attributes.
    static ComponentContext getContext(javax.servlet.ServletRequest request)
              Get component context from request.
     void putAttribute(java.lang.String name, java.lang.Object value)
              Put a new attribute to context.
    static void setContext(ComponentContext context, javax.servlet.ServletRequest request)
              Store component context into request.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    attributes

    private java.util.Map attributes
    Component attributes.


    EMPTY_ITERATOR

    private static java.util.Iterator EMPTY_ITERATOR
    EmptyIterator over component attributes.

    Constructor Detail

    ComponentContext

    public ComponentContext()
    Constructor.


    ComponentContext

    public ComponentContext(ComponentDefinition instance)
    Deprecated. Use ComponentContext(Map attributes) instead.

    Constructor.


    ComponentContext

    public ComponentContext(java.util.Map attributes)
    Constructor. Create a context and set specified attributes.

    Parameters:
    attributes - Attributes to initialize context.
    Method Detail

    addAll

    public void addAll(java.util.Map newAttributes)
    Add all attributes to this context. Copies all of the mappings from the specified attribute map to this context. New attribute mappings will replace any mappings that this context had for any of the keys currently in the specified attribute map.

    Parameters:
    newAttributes - Attributes to add.

    addMissing

    public void addMissing(java.util.Map defaultAttributes)
    Add all missing attributes to this context. Copies all of the mappings from the specified attributes map to this context. New attribute mappings will be added only if they don't already exist in this context.

    Parameters:
    defaultAttributes - Attributes to add.

    getAttribute

    public java.lang.Object getAttribute(java.lang.String name)
    Get an attribute from context.

    Parameters:
    name - Name of the attribute.
    Returns:
    <{Object}>

    getAttributeNames

    public java.util.Iterator getAttributeNames()
    Get names of all attributes.

    Returns:
    <{Object}>

    putAttribute

    public void putAttribute(java.lang.String name,
                             java.lang.Object value)
    Put a new attribute to context.

    Parameters:
    name - Name of the attribute.
    value - Value of the attribute.

    findAttribute

    public java.lang.Object findAttribute(java.lang.String beanName,
                                          javax.servlet.jsp.PageContext pageContext)
    Find object in one of the contexts. Order : component then pageContext.findAttribute()

    Parameters:
    beanName - Name of the bean to find.
    pageContext - Page context.
    Returns:
    Requested bean or null if not found.

    getAttribute

    public java.lang.Object getAttribute(java.lang.String beanName,
                                         int scope,
                                         javax.servlet.jsp.PageContext pageContext)
    Get object from requested context. Context can be 'component'.

    Parameters:
    beanName - Name of the bean to find.
    scope - Search scope (see PageContext).
    pageContext - Page context.
    Returns:
    requested bean or null if not found.

    getContext

    public static ComponentContext getContext(javax.servlet.ServletRequest request)
    Get component context from request.

    Parameters:
    request - ServletRequest.
    Returns:
    ComponentContext

    setContext

    public static void setContext(ComponentContext context,
                                  javax.servlet.ServletRequest request)
    Store component context into request.

    Parameters:
    context - ComponentContext to store.
    request - Request to store ComponentContext.


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/ComponentDefinition.html0000644000175000017500000013436510404045214031341 0ustar arnaudarnaud00000000000000 ComponentDefinition (Apache Struts API Documentation)

    org.apache.struts.tiles
    Class ComponentDefinition

    java.lang.Object
      |
      +--org.apache.struts.tiles.ComponentDefinition
    
    All Implemented Interfaces:
    java.io.Serializable
    Direct Known Subclasses:
    XmlDefinition

    public class ComponentDefinition
    extends java.lang.Object
    implements java.io.Serializable

    Definition of a template / component attributes. Attributes of a component can be defined with the help of this class. An instance of this class can be used as a bean, and passed to 'insert' tag.

    See Also:
    Serialized Form

    Field Summary
    static java.lang.String ACTION
              Controller name type
    protected  java.util.Map attributes
              Attributes defined for the component.
    protected  java.lang.String controller
              Associated Controller URL or classname, if defined
    static java.lang.String CONTROLLER
              Controller name type
    private  Controller controllerInstance
              Controller associated to Definition.
    protected  java.lang.String controllerType
              Associated Controller typename, if controllerName defined.
    protected static org.apache.commons.logging.Log log
              Commons Logging instance.
    protected  java.lang.String name
              Definition name
    protected  java.lang.String path
              Component / template path (URL).
    protected  java.lang.String role
              role associated to definition
    static java.lang.String URL
              Controller name type
     
    Constructor Summary
    ComponentDefinition()
              Constructor.
    ComponentDefinition(ComponentDefinition definition)
              Copy Constructor.
    ComponentDefinition(java.lang.String name, java.lang.String path, java.util.Map attributes)
              Constructor.
    ComponentDefinition(XmlDefinition definition)
              Constructor.
     
    Method Summary
    static Controller createController(java.lang.String name, java.lang.String controllerType)
              Create a new instance of controller named in parameter.
    static Controller createControllerFromClassname(java.lang.String classname)
              Create a controller from specified classname
     java.lang.Object getAttribute(java.lang.String key)
              Returns the value of the named attribute as an Object, or null if no attribute of the given name exists.
     java.util.Map getAttributes()
              Access method for the attributes property.
     java.lang.String getController()
              Get associated controller local URL.
     Controller getControllerInstance()
              Get controller instance.
     java.lang.String getControllerType()
              Get associated controller type.
     java.lang.String getName()
              Access method for the name property.
     Controller getOrCreateController()
              Get or create controller.
     java.lang.String getPage()
              Access method for the path property.
     java.lang.String getPath()
              Access method for the path property.
     java.lang.String getRole()
              Access method for the role property.
     java.lang.String getTemplate()
              Access method for the template property.
     void put(java.lang.String name, java.lang.Object content)
              Put an attribute in component / template definition.
     void put(java.lang.String name, java.lang.Object content, boolean direct)
              Put an attribute in template definition.
     void put(java.lang.String name, java.lang.Object content, boolean direct, java.lang.String role)
              Put an attribute in template definition.
     void put(java.lang.String name, java.lang.Object content, java.lang.String type, java.lang.String role)
              Put an attribute in template definition.
     void putAttribute(java.lang.String key, java.lang.Object value)
              Put a new attribute in this component
     void setController(java.lang.String url)
              Set associated controller URL.
     void setControllerClass(java.lang.String controller)
              Set associated controller name as a classtype, and controller type as "classname".
     void setControllerInstance(Controller controller)
              Set controller.
     void setControllerType(java.lang.String controllerType)
              Set associated controller type.
     void setControllerUrl(java.lang.String controller)
              Set associated controller name as an url, and controller type as "url".
     void setName(java.lang.String aName)
              Sets the value of the name property.
     void setPage(java.lang.String page)
              Sets the value of the path property.
     void setPath(java.lang.String aPath)
              Sets the value of the path property.
     void setRole(java.lang.String role)
              Sets the value of the role property.
     void setTemplate(java.lang.String template)
              Sets the value of the template property.
     java.lang.String toString()
               
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
     

    Field Detail

    log

    protected static org.apache.commons.logging.Log log
    Commons Logging instance.


    name

    protected java.lang.String name
    Definition name


    path

    protected java.lang.String path
    Component / template path (URL).


    attributes

    protected java.util.Map attributes
    Attributes defined for the component.


    role

    protected java.lang.String role
    role associated to definition


    controller

    protected java.lang.String controller
    Associated Controller URL or classname, if defined


    controllerType

    protected java.lang.String controllerType
    Associated Controller typename, if controllerName defined. Can be CONTROLLER, ACTION or URL, or null


    URL

    public static final java.lang.String URL
    Controller name type

    See Also:
    Constant Field Values

    CONTROLLER

    public static final java.lang.String CONTROLLER
    Controller name type

    See Also:
    Constant Field Values

    ACTION

    public static final java.lang.String ACTION
    Controller name type

    See Also:
    Constant Field Values

    controllerInstance

    private Controller controllerInstance
    Controller associated to Definition. Lazy creation : only on first request

    Constructor Detail

    ComponentDefinition

    public ComponentDefinition()
    Constructor.


    ComponentDefinition

    public ComponentDefinition(ComponentDefinition definition)
    Copy Constructor. Create a new definition initialized with parent definition. Do a shallow copy : attributes are shared between copies, but not the Map containing attributes.


    ComponentDefinition

    public ComponentDefinition(XmlDefinition definition)
    Constructor. Create a new definition initialized from a RawDefinition. Raw definitions are used to read definition from a data source (xml file, db, ...). A RawDefinition mainly contains properties of type String, while Definition contains more complex type (ex : Controller). Do a shallow copy : attributes are shared between objects, but not the Map containing attributes. OO Design issues : Actually RawDefinition (XmlDefinition) extends ComponentDefinition. This must not be the case. I have do it because I am lazy.

    Throws:
    java.lang.InstantiationException - if an error occur while instanciating Controller : (classname can't be instanciated, Illegal access with instanciated class, Error while instanciating class, classname can't be instanciated.

    ComponentDefinition

    public ComponentDefinition(java.lang.String name,
                               java.lang.String path,
                               java.util.Map attributes)
    Constructor.

    Method Detail

    getName

    public java.lang.String getName()
    Access method for the name property.

    Returns:
    the current value of the name property

    setName

    public void setName(java.lang.String aName)
    Sets the value of the name property.

    Parameters:
    aName - the new value of the name property

    getPage

    public java.lang.String getPage()
    Access method for the path property.

    Returns:
    the current value of the path property

    setPage

    public void setPage(java.lang.String page)
    Sets the value of the path property.


    getPath

    public java.lang.String getPath()
    Access method for the path property.

    Returns:
    the current value of the path property

    setPath

    public void setPath(java.lang.String aPath)
    Sets the value of the path property.

    Parameters:
    aPath - the new value of the path property

    getTemplate

    public java.lang.String getTemplate()
    Access method for the template property. Same as getPath()

    Returns:
    the current value of the template property

    setTemplate

    public void setTemplate(java.lang.String template)
    Sets the value of the template property. Same as setPath()

    Parameters:
    template - the new value of the path property

    getRole

    public java.lang.String getRole()
    Access method for the role property.

    Returns:
    the current value of the role property

    setRole

    public void setRole(java.lang.String role)
    Sets the value of the role property.

    Parameters:
    role - the new value of the path property

    getAttributes

    public java.util.Map getAttributes()
    Access method for the attributes property. If there is no attributes, return an empty map.

    Returns:
    the current value of the attributes property

    getAttribute

    public java.lang.Object getAttribute(java.lang.String key)
    Returns the value of the named attribute as an Object, or null if no attribute of the given name exists.

    Returns:
    requested attribute or null if not found

    putAttribute

    public void putAttribute(java.lang.String key,
                             java.lang.Object value)
    Put a new attribute in this component

    Parameters:
    key - String key for attribute
    value - Attibute value.

    put

    public void put(java.lang.String name,
                    java.lang.Object content)
    Put an attribute in component / template definition. Attribute can be used as content for tag get.

    Parameters:
    name - Attribute name
    content - Attribute value

    put

    public void put(java.lang.String name,
                    java.lang.Object content,
                    boolean direct)
    Put an attribute in template definition. Attribute can be used as content for tag get.

    Parameters:
    name - Attribute name
    content - Attribute value µ
    direct - Determines how content is handled by get tag: true means content is printed directly; false, the default, means content is included

    put

    public void put(java.lang.String name,
                    java.lang.Object content,
                    boolean direct,
                    java.lang.String role)
    Put an attribute in template definition. Attribute can be used as content for tag get.

    Parameters:
    name - Attribute name
    content - Attribute value
    direct - Determines how content is handled by get tag: true means content is printed directly; false, the default, means content is included
    role - Determine if content is used by get tag. If user is in role, content is used.

    put

    public void put(java.lang.String name,
                    java.lang.Object content,
                    java.lang.String type,
                    java.lang.String role)
    Put an attribute in template definition. Attribute can be used as content for tag get.

    Parameters:
    name - Attribute name
    content - Attribute value
    type - attribute type: template, string, definition
    role - Determine if content is used by get tag. If user is in role, content is used.

    toString

    public java.lang.String toString()
    Overrides:
    toString in class java.lang.Object

    getControllerType

    public java.lang.String getControllerType()
    Get associated controller type. Type denote a fully qualified classname.


    setControllerType

    public void setControllerType(java.lang.String controllerType)
    Set associated controller type. Type denote a fully qualified classname.

    Parameters:
    controllerType - Typeof associated controller

    setControllerUrl

    public void setControllerUrl(java.lang.String controller)
    Set associated controller name as an url, and controller type as "url". Name must be an url (not checked). Convenience method.

    Parameters:
    controller - Controller url

    setControllerClass

    public void setControllerClass(java.lang.String controller)
    Set associated controller name as a classtype, and controller type as "classname". Name denote a fully qualified classname Convenience method.

    Parameters:
    controller - Controller classname.

    getController

    public java.lang.String getController()
    Get associated controller local URL. URL should be local to webcontainer in order to allow request context followup. URL comes as a string.


    setController

    public void setController(java.lang.String url)
    Set associated controller URL. URL should be local to webcontainer in order to allow request context followup. URL is specified as a string.

    Parameters:
    url - Url called locally

    getControllerInstance

    public Controller getControllerInstance()
    Get controller instance.

    Returns:
    controller instance.

    getOrCreateController

    public Controller getOrCreateController()
                                     throws java.lang.InstantiationException
    Get or create controller. Get controller, create it if necessary.

    Returns:
    controller if controller or controllerType is set, null otherwise.
    Throws:
    java.lang.InstantiationException - if an error occur while instanciating Controller : (classname can't be instanciated, Illegal access with instanciated class, Error while instanciating class, classname can't be instanciated.

    setControllerInstance

    public void setControllerInstance(Controller controller)
    Set controller.


    createController

    public static Controller createController(java.lang.String name,
                                              java.lang.String controllerType)
                                       throws java.lang.InstantiationException
    Create a new instance of controller named in parameter. If controllerType is specified, create controller accordingly. Otherwise, if name denote a classname, create an instance of it. If class is subclass of org.apache.struts.action.Action, wrap controller appropriately. Otherwise, consider name as an url.

    Parameters:
    name - Controller name (classname, url, ...)
    controllerType - Expected Controller type
    Returns:
    org.apache.struts.tiles.Controller
    Throws:
    java.lang.InstantiationException - if an error occur while instanciating Controller : (classname can't be instanciated, Illegal access with instanciated class, Error while instanciating class, classname can't be instanciated.

    createControllerFromClassname

    public static Controller createControllerFromClassname(java.lang.String classname)
                                                    throws java.lang.InstantiationException
    Create a controller from specified classname

    Parameters:
    classname - Controller classname.
    Returns:
    org.apache.struts.tiles.Controller
    Throws:
    java.lang.InstantiationException - if an error occur while instanciating Controller : (classname can't be instanciated, Illegal access with instanciated class, Error while instanciating class, classname can't be instanciated.


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/ComponentDefinitionsFactory.html0000644000175000017500000002755010404045232033051 0ustar arnaudarnaud00000000000000 ComponentDefinitionsFactory (Apache Struts API Documentation)

    org.apache.struts.tiles
    Interface ComponentDefinitionsFactory

    All Superinterfaces:
    java.io.Serializable
    All Known Implementing Classes:
    FactorySet, ReloadableDefinitionsFactory

    Deprecated. Use DefinitionsFactory instead.

    public interface ComponentDefinitionsFactory
    extends java.io.Serializable

    Component repository interface. This interface allows to retrieve an definition by its name, independently of the factory implementation. Implementation must be Serializable, in order to be compliant with web Container having this constraint (Weblogic 6.x).


    Method Summary
     ComponentDefinition getDefinition(java.lang.String name, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Deprecated. Get a definition by its name.
     void initFactory(javax.servlet.ServletContext servletContext, java.util.Map properties)
              Deprecated. Init factory.
     

    Method Detail

    getDefinition

    public ComponentDefinition getDefinition(java.lang.String name,
                                             javax.servlet.ServletRequest request,
                                             javax.servlet.ServletContext servletContext)
                                      throws NoSuchDefinitionException,
                                             DefinitionsFactoryException
    Deprecated. 
    Get a definition by its name.

    Parameters:
    name - Name of requested definition.
    request - Current servelet request
    servletContext - current servlet context
    Throws:
    DefinitionsFactoryException - An error occur while getting definition.
    NoSuchDefinitionException - No definition found for specified name Implementation can throw more accurate exception as a subclass of this exception

    initFactory

    public void initFactory(javax.servlet.ServletContext servletContext,
                            java.util.Map properties)
                     throws DefinitionsFactoryException
    Deprecated. 
    Init factory. This method is called exactly once immediately after factory creation in case of internal creation (by DefinitionUtil).

    Parameters:
    servletContext - Servlet Context passed to newly created factory.
    properties - Map of name/property passed to newly created factory. Map can contains more properties than requested.
    Throws:
    DefinitionsFactoryException - An error occur during initialization.


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/Controller.html0000644000175000017500000002317410404045214027504 0ustar arnaudarnaud00000000000000 Controller (Apache Struts API Documentation)

    org.apache.struts.tiles
    Interface Controller

    All Known Implementing Classes:
    ActionController, ControllerSupport, UrlController

    public interface Controller

    A controller is a piece of code called before rendering a jsp page. A controller can be associated to a tile. See or for association syntax.


    Method Summary
     void perform(ComponentContext tileContext, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, javax.servlet.ServletContext servletContext)
              Method associated to a tile and called immediately before the tile is included.
     

    Method Detail

    perform

    public void perform(ComponentContext tileContext,
                        javax.servlet.http.HttpServletRequest request,
                        javax.servlet.http.HttpServletResponse response,
                        javax.servlet.ServletContext servletContext)
                 throws javax.servlet.ServletException,
                        java.io.IOException
    Method associated to a tile and called immediately before the tile is included.

    Parameters:
    tileContext - Current tile context.
    request - Current request
    response - Current response
    servletContext - Current servlet context
    javax.servlet.ServletException
    java.io.IOException


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/ControllerSupport.html0000644000175000017500000002666610404045246031117 0ustar arnaudarnaud00000000000000 ControllerSupport (Apache Struts API Documentation)

    org.apache.struts.tiles
    Class ControllerSupport

    java.lang.Object
      |
      +--org.apache.struts.tiles.ControllerSupport
    
    All Implemented Interfaces:
    Controller

    public class ControllerSupport
    extends java.lang.Object
    implements Controller

    Basic implementation of Controller.


    Constructor Summary
    ControllerSupport()
               
     
    Method Summary
     void perform(ComponentContext tileContext, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, javax.servlet.ServletContext servletContext)
              Method associated to a tile and called immediately before tile is included.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    ControllerSupport

    public ControllerSupport()
    Method Detail

    perform

    public void perform(ComponentContext tileContext,
                        javax.servlet.http.HttpServletRequest request,
                        javax.servlet.http.HttpServletResponse response,
                        javax.servlet.ServletContext servletContext)
                 throws javax.servlet.ServletException,
                        java.io.IOException
    Method associated to a tile and called immediately before tile is included. This implementation does nothing.

    Specified by:
    perform in interface Controller
    Parameters:
    tileContext - Current tile context.
    request - Current request
    response - Current response
    servletContext - Current servlet context
    javax.servlet.ServletException
    java.io.IOException


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/DefinitionAttribute.html0000644000175000017500000002622510404045234031337 0ustar arnaudarnaud00000000000000 DefinitionAttribute (Apache Struts API Documentation)

    org.apache.struts.tiles
    Class DefinitionAttribute

    java.lang.Object
      |
      +--org.apache.struts.tiles.UntyppedAttribute
            |
            +--org.apache.struts.tiles.DefinitionAttribute
    
    All Implemented Interfaces:
    AttributeDefinition, java.io.Serializable

    public class DefinitionAttribute
    extends UntyppedAttribute

    Attribute representing a Component Definition. This attribute definition contains a Component definition.

    See Also:
    Serialized Form

    Field Summary
     
    Fields inherited from class org.apache.struts.tiles.UntyppedAttribute
    role, value
     
    Constructor Summary
    DefinitionAttribute(java.lang.String value)
               
     
    Methods inherited from class org.apache.struts.tiles.UntyppedAttribute
    getRole, getValue, setRole, setValue, toString
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
     

    Constructor Detail

    DefinitionAttribute

    public DefinitionAttribute(java.lang.String value)


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/DefinitionNameAttribute.html0000644000175000017500000002764310404045236032147 0ustar arnaudarnaud00000000000000 DefinitionNameAttribute (Apache Struts API Documentation)

    org.apache.struts.tiles
    Class DefinitionNameAttribute

    java.lang.Object
      |
      +--org.apache.struts.tiles.UntyppedAttribute
            |
            +--org.apache.struts.tiles.DefinitionNameAttribute
    
    All Implemented Interfaces:
    AttributeDefinition, java.io.Serializable

    public class DefinitionNameAttribute
    extends UntyppedAttribute

    Component attribute. Such attribute value represent an instance name.

    See Also:
    Serialized Form

    Field Summary
     
    Fields inherited from class org.apache.struts.tiles.UntyppedAttribute
    role, value
     
    Constructor Summary
    DefinitionNameAttribute(java.lang.String value)
              Constructor.
    DefinitionNameAttribute(java.lang.String value, java.lang.String role)
              Constructor.
     
    Methods inherited from class org.apache.struts.tiles.UntyppedAttribute
    getRole, getValue, setRole, setValue, toString
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
     

    Constructor Detail

    DefinitionNameAttribute

    public DefinitionNameAttribute(java.lang.String value)
    Constructor.


    DefinitionNameAttribute

    public DefinitionNameAttribute(java.lang.String value,
                                   java.lang.String role)
    Constructor.



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/DefinitionsFactory.html0000644000175000017500000003574010404045216031170 0ustar arnaudarnaud00000000000000 DefinitionsFactory (Apache Struts API Documentation)

    org.apache.struts.tiles
    Interface DefinitionsFactory

    All Superinterfaces:
    java.io.Serializable
    All Known Implementing Classes:
    ComponentDefinitionsFactoryWrapper

    public interface DefinitionsFactory
    extends java.io.Serializable

    Tiles Definition factory. This interface replace old ComponentDefinitionsFactory. Main method getDefinition() is exactly the same. Initialization method change. This interface allows to retrieve a definition by its name, independently of the factory implementation. Object life cycle is as follow:

    • Constructor: create object
    • setConfig: set config and initialize factory. After first call to this method, factory is operational.
    • destroy: factory is being shutdown.
    Implementation must be Serializable, in order to be compliant with web Container having this constraint (Weblogic 6.x).


    Method Summary
     void destroy()
              Receive notification that the factory is being shut down.
     DefinitionsFactoryConfig getConfig()
              Get factory configuration.
     ComponentDefinition getDefinition(java.lang.String name, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Get a definition by its name.
     void init(DefinitionsFactoryConfig config, javax.servlet.ServletContext servletContext)
              Init definition factory.
     void setConfig(DefinitionsFactoryConfig config, javax.servlet.ServletContext servletContext)
              Set factory configuration.
     

    Method Detail

    getDefinition

    public ComponentDefinition getDefinition(java.lang.String name,
                                             javax.servlet.ServletRequest request,
                                             javax.servlet.ServletContext servletContext)
                                      throws NoSuchDefinitionException,
                                             DefinitionsFactoryException
    Get a definition by its name.

    Parameters:
    name - Name of requested definition.
    request - Current servelet request
    servletContext - current servlet context
    Throws:
    DefinitionsFactoryException - An error occur while getting definition.
    NoSuchDefinitionException - No definition found for specified name Implementation can throw more accurate exception as a subclass of this exception

    init

    public void init(DefinitionsFactoryConfig config,
                     javax.servlet.ServletContext servletContext)
              throws DefinitionsFactoryException
    Init definition factory. This method is called immediately after factory creation, and prior any call to setConfig().

    Parameters:
    config - Configuration object used to set factory configuration.
    servletContext - Servlet Context passed to factory.
    Throws:
    DefinitionsFactoryException - An error occur during initialization.

    destroy

    public void destroy()

    Receive notification that the factory is being shut down.


    setConfig

    public void setConfig(DefinitionsFactoryConfig config,
                          javax.servlet.ServletContext servletContext)
                   throws DefinitionsFactoryException
    Set factory configuration. This method is used to change factory configuration. This method is optional, and can send an exception if implementation doesn't allow change in configuration.

    Parameters:
    config - Configuration object used to set factory configuration.
    servletContext - Servlet Context passed to factory.
    Throws:
    DefinitionsFactoryException - An error occur during initialization.

    getConfig

    public DefinitionsFactoryConfig getConfig()
    Get factory configuration.

    Returns:
    TilesConfig


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/DefinitionsFactoryConfig.html0000644000175000017500000011251510404045204032307 0ustar arnaudarnaud00000000000000 DefinitionsFactoryConfig (Apache Struts API Documentation)

    org.apache.struts.tiles
    Class DefinitionsFactoryConfig

    java.lang.Object
      |
      +--org.apache.struts.tiles.DefinitionsFactoryConfig
    
    All Implemented Interfaces:
    java.io.Serializable

    public class DefinitionsFactoryConfig
    extends java.lang.Object
    implements java.io.Serializable

    A TilesFactoryConfig object hold configuration attributes for a tile definition factory.

    Since:
    1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:34:00 +0100 (Fri, 22 Aug 2003) $
    Author:
    Cedric Dumoulin
    See Also:
    Serialized Form

    Field Summary
    protected  int debugLevel
              Deprecated. Use commons-logging mechanism.
    protected  java.lang.String definitionConfigFiles
              Definition configuration file specified by user
    static java.lang.String DEFINITIONS_CONFIG_PARAMETER_NAME
              Alternate name for definition files properties in configuration file
    private  java.util.Map extraAttributes
              Map of extra attribute available.
    static java.lang.String FACTORY_CLASSNAME_PARAMETER_NAME
              Alternate name for factory classname properties in configuration file
    protected  java.lang.String factoryClassname
              Fully qualified classname of the factory to create.
    protected  java.lang.String factoryName
              The name associated to this factory.
    protected  boolean moduleAware
              Specifies whether the factory is "module-aware".
    static java.lang.String PARSER_DETAILS_PARAMETER_NAME
              Alternate name for parser debug details properties in configuration file
    static java.lang.String PARSER_VALIDATE_PARAMETER_NAME
              Alternate name for parser validate properties in configuration file
    protected  int parserDebugLevel
              Deprecated. Use commons-logging mechanism.
    protected  boolean parserValidate
              Specifies whether the parser will validate configuration files.
    static java.lang.String TILES_DETAILS_PARAMETER_NAME
              Alternate name for definition debug details properties in configuration file
     
    Constructor Summary
    DefinitionsFactoryConfig()
              Default constructor.
    DefinitionsFactoryConfig(java.util.Map initParameters)
              Constructor.
     
    Method Summary
     java.lang.Object getAttribute(java.lang.String name)
              Get value of an additional attribute.
     java.util.Map getAttributes()
              Get additional attributes as a Map.
     int getDebugLevel()
              Deprecated. Use commons-logging mechanism.
     java.lang.String getDefinitionConfigFiles()
              Get the definition config files.
     java.lang.String getFactoryClassname()
              Get the classname of the factory.
     java.lang.String getFactoryName()
              Get the factory name.
     int getParserDebugLevel()
              Deprecated. Use commons-logging mechanism.
     boolean getParserValidate()
              Determines if the parser is validating.
     boolean isModuleAware()
              Get the module aware flag.
    static void linkOldPropertyNames(java.util.Map properties)
              Link old property names to new property names.
     void populate(java.util.Map properties)
              Populate this config object from properties map, based on the specified name/value pairs.
     void setAttribute(java.lang.String name, java.lang.Object value)
              Set value of an additional attribute.
     void setDebugLevel(int aDebugLevel)
              Deprecated. Use commons-logging mechanism.
     void setDefinitionConfigFiles(java.lang.String aDefinitionConfigFiles)
              Set the definition config files.
     void setFactoryClassname(java.lang.String aFactoryClassname)
              Set the classname of the factory..
     void setFactoryName(java.lang.String factoryName)
              Set the factory name.
     void setModuleAware(boolean moduleAware)
              Set the module aware flag.
     void setParserDebugLevel(int aParserDebugLevel)
              Deprecated. Use commons-logging mechanism.
     void setParserValidate(boolean aParserValidate)
              Set the validating mode for the parser.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    factoryClassname

    protected java.lang.String factoryClassname
    Fully qualified classname of the factory to create. If no classname is set, a default factory is created (of class "org.apache.struts.tiles.xmlDefinition.I18nFactorySet").


    debugLevel

    protected int debugLevel
    Deprecated. Use commons-logging mechanism.

    Debug level value. 0=no debug info >0 = debug info.


    parserDebugLevel

    protected int parserDebugLevel
    Deprecated. Use commons-logging mechanism.

    Debug level value used when parsing configuration file. 0=no debug info; >0 = debug info.


    parserValidate

    protected boolean parserValidate
    Specifies whether the parser will validate configuration files. Default value is true.


    definitionConfigFiles

    protected java.lang.String definitionConfigFiles
    Definition configuration file specified by user


    moduleAware

    protected boolean moduleAware
    Specifies whether the factory is "module-aware".


    factoryName

    protected java.lang.String factoryName
    The name associated to this factory.
    With Struts 1.1, this name is the module name to which this factory belong. It is set by the system.
    In prior versions, this property is not used.


    PARSER_DETAILS_PARAMETER_NAME

    public static final java.lang.String PARSER_DETAILS_PARAMETER_NAME
    Alternate name for parser debug details properties in configuration file

    See Also:
    Constant Field Values

    PARSER_VALIDATE_PARAMETER_NAME

    public static final java.lang.String PARSER_VALIDATE_PARAMETER_NAME
    Alternate name for parser validate properties in configuration file

    See Also:
    Constant Field Values

    FACTORY_CLASSNAME_PARAMETER_NAME

    public static final java.lang.String FACTORY_CLASSNAME_PARAMETER_NAME
    Alternate name for factory classname properties in configuration file

    See Also:
    Constant Field Values

    DEFINITIONS_CONFIG_PARAMETER_NAME

    public static final java.lang.String DEFINITIONS_CONFIG_PARAMETER_NAME
    Alternate name for definition files properties in configuration file

    See Also:
    Constant Field Values

    TILES_DETAILS_PARAMETER_NAME

    public static final java.lang.String TILES_DETAILS_PARAMETER_NAME
    Alternate name for definition debug details properties in configuration file

    See Also:
    Constant Field Values

    extraAttributes

    private java.util.Map extraAttributes
    Map of extra attribute available.

    Constructor Detail

    DefinitionsFactoryConfig

    public DefinitionsFactoryConfig()
    Default constructor.


    DefinitionsFactoryConfig

    public DefinitionsFactoryConfig(java.util.Map initParameters)
    Constructor. Create configuration object, and initialize it with parameters from Map. Parameters corresponding to an attribute are filtered and stored in appropriate attribute.

    Parameters:
    initParameters - Map.
    Method Detail

    isModuleAware

    public boolean isModuleAware()
    Get the module aware flag.

    Returns:
    true: user wants a single factory instance, false: user wants multiple factory instances (one per module with Struts)

    setModuleAware

    public void setModuleAware(boolean moduleAware)
    Set the module aware flag.

    Parameters:
    moduleAware - true: user wants a single factory instance, false: user wants multiple factory instances (one per module with Struts)

    getFactoryClassname

    public java.lang.String getFactoryClassname()
    Get the classname of the factory.

    Returns:
    Classname.

    setFactoryClassname

    public void setFactoryClassname(java.lang.String aFactoryClassname)
    Set the classname of the factory..

    Parameters:
    aFactoryClassname - Classname of the factory.

    getDebugLevel

    public int getDebugLevel()
    Deprecated. Use commons-logging mechanism.

    Get debug level.

    Returns:
    Debug level.

    setDebugLevel

    public void setDebugLevel(int aDebugLevel)
    Deprecated. Use commons-logging mechanism.

    Set debug level.

    Parameters:
    aDebugLevel - Debug level.

    getParserDebugLevel

    public int getParserDebugLevel()
    Deprecated. Use commons-logging mechanism.

    Get the debug level for the parser.

    Returns:
    Debug level.

    setParserDebugLevel

    public void setParserDebugLevel(int aParserDebugLevel)
    Deprecated. Use commons-logging mechanism.

    Set the debug level for the parser.

    Parameters:
    aParserDebugLevel - Debug level.

    getParserValidate

    public boolean getParserValidate()
    Determines if the parser is validating.

    Returns:
    true when in validating mode.

    setParserValidate

    public void setParserValidate(boolean aParserValidate)
    Set the validating mode for the parser.

    Parameters:
    aParserValidate - true for validation, false otherwise

    getDefinitionConfigFiles

    public java.lang.String getDefinitionConfigFiles()
    Get the definition config files.

    Returns:
    Defition config files.

    setDefinitionConfigFiles

    public void setDefinitionConfigFiles(java.lang.String aDefinitionConfigFiles)
    Set the definition config files.

    Parameters:
    aDefinitionConfigFiles - Definition config files.

    setAttribute

    public void setAttribute(java.lang.String name,
                             java.lang.Object value)
    Set value of an additional attribute.

    Parameters:
    name - Name of the attribute.
    value - Value of the attribute.

    getAttribute

    public java.lang.Object getAttribute(java.lang.String name)
    Get value of an additional attribute.

    Parameters:
    name - Name of the attribute.
    Returns:
    Value of the attribute, or null if not found.

    getAttributes

    public java.util.Map getAttributes()
    Get additional attributes as a Map.

    Returns:
    Map A Map containing attribute name - value pairs.

    populate

    public void populate(java.util.Map properties)
                  throws java.lang.IllegalAccessException,
                         java.lang.reflect.InvocationTargetException
    Populate this config object from properties map, based on the specified name/value pairs. This method uses the populate() method from org.apache.commons.beanutils.BeanUtil.

    Properties keys are scanned for old property names, and linked to the new name if necessary. This modifies the properties map.

    The particular setter method to be called for each property is determined using the usual JavaBeans introspection mechanisms. Thus, you may identify custom setter methods using a BeanInfo class that is associated with the class of the bean itself. If no such BeanInfo class is available, the standard method name conversion ("set" plus the capitalized name of the property in question) is used.

    NOTE: It is contrary to the JavaBeans Specification to have more than one setter method (with different argument signatures) for the same property.

    Parameters:
    properties - Map keyed by property name, with the corresponding (String or String[]) value(s) to be set.
    Throws:
    java.lang.IllegalAccessException - if the caller does not have access to the property accessor method.
    java.lang.reflect.InvocationTargetException - if the property accessor method throws an exception.
    See Also:
    BeanUtils

    linkOldPropertyNames

    public static void linkOldPropertyNames(java.util.Map properties)
    Link old property names to new property names. This modifies the map.

    Parameters:
    properties - Map keyed by property name, with the corresponding (String or String[]) value(s) to be set.

    getFactoryName

    public java.lang.String getFactoryName()
    Get the factory name.


    setFactoryName

    public void setFactoryName(java.lang.String factoryName)
    Set the factory name.

    Parameters:
    factoryName - Name of the factory.


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/DefinitionsFactoryException.html0000644000175000017500000004171010404045244033042 0ustar arnaudarnaud00000000000000 DefinitionsFactoryException (Apache Struts API Documentation)

    org.apache.struts.tiles
    Class DefinitionsFactoryException

    java.lang.Object
      |
      +--java.lang.Throwable
            |
            +--java.lang.Exception
                  |
                  +--org.apache.struts.tiles.TilesException
                        |
                        +--org.apache.struts.tiles.DefinitionsFactoryException
    
    All Implemented Interfaces:
    java.io.Serializable
    Direct Known Subclasses:
    FactoryNotFoundException, NoSuchDefinitionException

    public class DefinitionsFactoryException
    extends TilesException

    Exception thrown when an error occurs while the factory tries to create a new instance mapper.

    See Also:
    Serialized Form

    Field Summary
    private  java.lang.Exception exception
              Any "wrapped" exception will be exposed when this is serialized.
     
    Fields inherited from class java.lang.Exception
     
    Fields inherited from class java.lang.Throwable
     
    Constructor Summary
    DefinitionsFactoryException()
              Constructor.
    DefinitionsFactoryException(java.lang.Exception e)
              Create a new DefinitionsFactoryException wrapping an existing exception.
    DefinitionsFactoryException(java.lang.String message)
              Constructor.
    DefinitionsFactoryException(java.lang.String message, java.lang.Exception e)
              Create a new DefinitionsFactoryException from an existing exception.
     
    Method Summary
     java.lang.Exception getException()
              Return the embedded exception, if any.
     java.lang.String getMessage()
              Return a detail message for this exception.
     
    Methods inherited from class java.lang.Throwable
    fillInStackTrace, getCause, getLocalizedMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
     

    Field Detail

    exception

    private java.lang.Exception exception
    Any "wrapped" exception will be exposed when this is serialized.

    Constructor Detail

    DefinitionsFactoryException

    public DefinitionsFactoryException()
    Constructor.


    DefinitionsFactoryException

    public DefinitionsFactoryException(java.lang.String message)
    Constructor.

    Parameters:
    message - The error or warning message.

    DefinitionsFactoryException

    public DefinitionsFactoryException(java.lang.Exception e)
    Create a new DefinitionsFactoryException wrapping an existing exception.

    The existing exception will be embedded in the new one and its message will become the default message for the DefinitionsFactoryException.

    Parameters:
    e - The exception to be wrapped.

    DefinitionsFactoryException

    public DefinitionsFactoryException(java.lang.String message,
                                       java.lang.Exception e)
    Create a new DefinitionsFactoryException from an existing exception.

    The existing exception will be embedded in the new one, but the new exception will have its own message.

    Parameters:
    message - The detail message.
    e - The exception to be wrapped.
    Method Detail

    getMessage

    public java.lang.String getMessage()
    Return a detail message for this exception.

    If there is a embedded exception, and if the DefinitionsFactoryException has no detail message of its own, this method will return the detail message from the embedded exception.

    Overrides:
    getMessage in class TilesException
    Returns:
    The error or warning message.

    getException

    public java.lang.Exception getException()
    Return the embedded exception, if any.

    Overrides:
    getException in class TilesException
    Returns:
    The embedded exception, or null if there is none.


    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015110423140533011314 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/DefinitionsUtil.ServletPropertiesMap.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/DefinitionsUtil.ServletPropertiesMap.0000644000175000017500000002725110404045214033743 0ustar arnaudarnaud00000000000000 DefinitionsUtil.ServletPropertiesMap (Apache Struts API Documentation)

    org.apache.struts.tiles
    Class DefinitionsUtil.ServletPropertiesMap

    java.lang.Object
      |
      +--java.util.AbstractMap
            |
            +--java.util.HashMap
                  |
                  +--org.apache.struts.tiles.DefinitionsUtil.ServletPropertiesMap
    
    All Implemented Interfaces:
    java.lang.Cloneable, java.util.Map, java.io.Serializable
    Enclosing class:
    DefinitionsUtil

    static class DefinitionsUtil.ServletPropertiesMap
    extends java.util.HashMap

    Inner class. Wrapper for ServletContext init parameters. Object of this class is an hashmap containing parameters and values defined in the servlet config file (web.xml).


    Field Summary
     
    Fields inherited from class java.util.HashMap
     
    Fields inherited from class java.util.AbstractMap
     
    Constructor Summary
    (package private) DefinitionsUtil.ServletPropertiesMap(javax.servlet.ServletConfig config)
              Constructor.
     
    Methods inherited from class java.util.HashMap
    clear, clone, containsKey, containsValue, entrySet, get, isEmpty, keySet, put, putAll, remove, size, values
     
    Methods inherited from class java.util.AbstractMap
    equals, hashCode, toString
     
    Methods inherited from class java.lang.Object
    finalize, getClass, notify, notifyAll, wait, wait, wait
     
    Methods inherited from interface java.util.Map
    equals, hashCode
     

    Constructor Detail

    DefinitionsUtil.ServletPropertiesMap

    DefinitionsUtil.ServletPropertiesMap(javax.servlet.ServletConfig config)
    Constructor.



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/DefinitionsUtil.html0000644000175000017500000014226710404045214030477 0ustar arnaudarnaud00000000000000 DefinitionsUtil (Apache Struts API Documentation)

    org.apache.struts.tiles
    Class DefinitionsUtil

    java.lang.Object
      |
      +--org.apache.struts.tiles.TilesUtil
            |
            +--org.apache.struts.tiles.DefinitionsUtil
    
    All Implemented Interfaces:
    ComponentConstants

    Deprecated. Use TilesUtil.createDefinitionsFactory(ServletContext, DefinitionsFactoryConfig)

    public class DefinitionsUtil
    extends TilesUtil
    implements ComponentConstants

    Utilities class for definitions factory. Also define userDebugLevel property (to be moved from this class ?). (to do).


    Nested Class Summary
    (package private) static class DefinitionsUtil.ServletPropertiesMap
              Deprecated. Inner class.
     
    Field Summary
    static java.lang.String ACTION_DEFINITION
              Deprecated. Constant name used to store definition in jsp context.
    static java.lang.String DEFINITIONS_CONFIG_USER_DEBUG_LEVEL
              Deprecated. Name of init property carrying debug level
    static java.lang.String DEFINITIONS_FACTORY
              Deprecated. Constant name used to store factory in context
    static java.lang.String DEFINITIONS_FACTORY_CLASSNAME
              Deprecated. Name of init property carrying factory class name
    static java.lang.String INSTANCES_CONFIG_USER_DEBUG_LEVEL
              Deprecated. use DEFINITIONS_CONFIG_USER_DEBUG_LEVEL instead.
    protected static org.apache.commons.logging.Log log
              Deprecated. Commons Logging instance.
    static int NO_DEBUG
              Deprecated. User Debug level
    static int userDebugLevel
              Deprecated. Global user defined debug level
     
    Fields inherited from class org.apache.struts.tiles.TilesUtil
    tilesUtilImpl
     
    Fields inherited from interface org.apache.struts.taglib.tiles.ComponentConstants
    COMPONENT_CONTEXT, COMPONENT_SCOPE, EXCEPTION_KEY, LOCALE_KEY
     
    Constructor Summary
    DefinitionsUtil()
              Deprecated.  
     
    Method Summary
    static DefinitionsFactory createDefinitionFactoryInstance(java.lang.String classname)
              Deprecated. No direct replacement. Use createDefinitionFactory TilesUtil.createDefinitionsFactory(ServletContext, DefinitionsFactoryConfig).
    static DefinitionsFactory createDefinitionsFactory(javax.servlet.ServletContext servletContext, java.util.Map properties)
              Deprecated. Create default Definition factory.
    static DefinitionsFactory createDefinitionsFactory(javax.servlet.ServletContext servletContext, java.util.Map properties, java.lang.String classname)
              Deprecated. Use createDefinitionsFactory(ServletContext servletContext, ServletConfig servletConfig)
    static DefinitionsFactory createDefinitionsFactory(javax.servlet.ServletContext servletContext, javax.servlet.ServletConfig servletConfig)
              Deprecated. Create Definition factory.
    static DefinitionsFactory createDefinitionsFactory(javax.servlet.ServletContext servletContext, javax.servlet.ServletConfig servletConfig, boolean checkIfExist)
              Deprecated. Create Definition factory.
    static ComponentDefinition getActionDefinition(javax.servlet.ServletRequest request)
              Deprecated. Get Definition stored in jsp context by an action.
    static ComponentDefinition getDefinition(java.lang.String definitionName, javax.servlet.jsp.PageContext pageContext)
              Deprecated. Use TilesUtil.getDefinition(String, ServletRequest, ServletContext)
    static DefinitionsFactory getDefinitionsFactory(javax.servlet.ServletContext servletContext)
              Deprecated. Use TilesUtil.getDefinitionsFactory(ServletRequest, ServletContext)
    static void initUserDebugLevel(javax.servlet.ServletConfig servletConfig)
              Deprecated. Use commons-logging package instead.
    static void makeDefinitionsFactoryAccessible(DefinitionsFactory factory, javax.servlet.ServletContext servletContext)
              Deprecated. Use TilesUtil.createDefinitionsFactory(ServletContext, DefinitionsFactoryConfig)
    static void populateDefinitionsFactoryConfig(DefinitionsFactoryConfig factoryConfig, javax.servlet.ServletConfig servletConfig)
              Deprecated. Populate Definition Factory Config from web.xml properties.
    protected static DefinitionsFactoryConfig readFactoryConfig(javax.servlet.ServletConfig servletConfig)
              Deprecated. Create FactoryConfig and initialize it from web.xml.
    static void removeActionDefinition(javax.servlet.ServletRequest request, ComponentDefinition definition)
              Deprecated. Remove Definition stored in jsp context.
    static void setActionDefinition(javax.servlet.ServletRequest request, ComponentDefinition definition)
              Deprecated. Store definition in jsp context.
    protected static void setDefinitionsFactory(ComponentDefinitionsFactory factory, javax.servlet.ServletContext servletContext)
              Deprecated. since 20020708. Replaced by makeFactoryAccessible()
    static void setUserDebugLevel(int level)
              Deprecated. Use commons-logging package instead.
     
    Methods inherited from class org.apache.struts.tiles.TilesUtil
    applicationClass, createDefinitionsFactory, doForward, doInclude, doInclude, getDefinition, getDefinitionsFactory, getTilesUtil, isTilesUtilImplSet, setTilesUtil, testReset
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    log

    protected static org.apache.commons.logging.Log log
    Deprecated. 
    Commons Logging instance.


    userDebugLevel

    public static int userDebugLevel
    Deprecated. 
    Global user defined debug level


    NO_DEBUG

    public static final int NO_DEBUG
    Deprecated. 
    User Debug level

    See Also:
    Constant Field Values

    INSTANCES_CONFIG_USER_DEBUG_LEVEL

    public static final java.lang.String INSTANCES_CONFIG_USER_DEBUG_LEVEL
    Deprecated. use DEFINITIONS_CONFIG_USER_DEBUG_LEVEL instead.

    Name of init property carrying debug level

    See Also:
    Constant Field Values

    DEFINITIONS_CONFIG_USER_DEBUG_LEVEL

    public static final java.lang.String DEFINITIONS_CONFIG_USER_DEBUG_LEVEL
    Deprecated. 
    Name of init property carrying debug level

    See Also:
    Constant Field Values

    DEFINITIONS_FACTORY_CLASSNAME

    public static final java.lang.String DEFINITIONS_FACTORY_CLASSNAME
    Deprecated. 
    Name of init property carrying factory class name

    See Also:
    Constant Field Values

    DEFINITIONS_FACTORY

    public static final java.lang.String DEFINITIONS_FACTORY
    Deprecated. 
    Constant name used to store factory in context

    See Also:
    Constant Field Values

    ACTION_DEFINITION

    public static final java.lang.String ACTION_DEFINITION
    Deprecated. 
    Constant name used to store definition in jsp context. Used to pass definition from a Struts action to servlet forward

    See Also:
    Constant Field Values
    Constructor Detail

    DefinitionsUtil

    public DefinitionsUtil()
    Deprecated. 
    Method Detail

    setUserDebugLevel

    public static void setUserDebugLevel(int level)
    Deprecated. Use commons-logging package instead.

    Set user debug level. This property control level of errors output.

    Parameters:
    level -

    initUserDebugLevel

    public static void initUserDebugLevel(javax.servlet.ServletConfig servletConfig)
    Deprecated. Use commons-logging package instead.

    Init user debug level.

    Parameters:
    servletConfig -

    createDefinitionsFactory

    public static DefinitionsFactory createDefinitionsFactory(javax.servlet.ServletContext servletContext,
                                                              java.util.Map properties,
                                                              java.lang.String classname)
                                                       throws DefinitionsFactoryException
    Deprecated. Use createDefinitionsFactory(ServletContext servletContext, ServletConfig servletConfig)

    Create Definition factory. If a factory class name is provided, a factory of this class is created. Otherwise, default factory is created.

    Parameters:
    classname - Class name of the factory to create.
    servletContext - Servlet Context passed to newly created factory.
    properties - Map of name/property used to initialize factory configuration object.
    Returns:
    newly created factory.
    Throws:
    DefinitionsFactoryException - If an error occur while initializing factory

    createDefinitionsFactory

    public static DefinitionsFactory createDefinitionsFactory(javax.servlet.ServletContext servletContext,
                                                              java.util.Map properties)
                                                       throws DefinitionsFactoryException
    Deprecated. 
    Create default Definition factory.

    Parameters:
    servletContext - Servlet Context passed to newly created factory.
    properties - Map of name/property used to initialize factory configuration object.
    Returns:
    newly created factory of type ConfigurableDefinitionsFactory.
    Throws:
    DefinitionsFactoryException - If an error occur while initializing factory

    createDefinitionsFactory

    public static DefinitionsFactory createDefinitionsFactory(javax.servlet.ServletContext servletContext,
                                                              javax.servlet.ServletConfig servletConfig)
                                                       throws DefinitionsFactoryException
    Deprecated. 
    Create Definition factory. Create configuration object from servlet web.xml file, then create ConfigurableDefinitionsFactory and initialized it with object.

    Convenience method. Calls createDefinitionsFactory(ServletContext servletContext, DefinitionsFactoryConfig factoryConfig)

    Parameters:
    servletContext - Servlet Context passed to newly created factory.
    servletConfig - Servlet config containing parameters to be passed to factory configuration object.
    Returns:
    newly created factory of type ConfigurableDefinitionsFactory.
    Throws:
    DefinitionsFactoryException - If an error occur while initializing factory

    createDefinitionsFactory

    public static DefinitionsFactory createDefinitionsFactory(javax.servlet.ServletContext servletContext,
                                                              javax.servlet.ServletConfig servletConfig,
                                                              boolean checkIfExist)
                                                       throws DefinitionsFactoryException
    Deprecated. 
    Create Definition factory. Create configuration object from servlet web.xml file, then create ConfigurableDefinitionsFactory and initialized it with object.

    If checkIfExist is true, start by checking if factory already exist. If yes, return it. If no, create a new one.

    If checkIfExist is false, factory is always created.

    Convenience method. Calls createDefinitionsFactory(ServletContext servletContext, DefinitionsFactoryConfig factoryConfig)

    Parameters:
    servletContext - Servlet Context passed to newly created factory.
    servletConfig - Servlet config containing parameters to be passed to factory configuration object.
    checkIfExist - Check if factory already exist. If true and factory exist, return it. If true and factory doesn't exist, create it. If false, create it in all cases.
    Returns:
    newly created factory of type ConfigurableDefinitionsFactory.
    Throws:
    DefinitionsFactoryException - If an error occur while initializing factory

    createDefinitionFactoryInstance

    public static DefinitionsFactory createDefinitionFactoryInstance(java.lang.String classname)
                                                              throws DefinitionsFactoryException
    Deprecated. No direct replacement. Use createDefinitionFactory TilesUtil.createDefinitionsFactory(ServletContext, DefinitionsFactoryConfig).

    Create Definition factory from provided classname. Factory class must extends TilesDefinitionsFactory.

    Parameters:
    classname - Class name of the factory to create.
    Returns:
    newly created factory.
    Throws:
    DefinitionsFactoryException - If an error occur while initializing factory

    setDefinitionsFactory

    protected static void setDefinitionsFactory(ComponentDefinitionsFactory factory,
                                                javax.servlet.ServletContext servletContext)
    Deprecated. since 20020708. Replaced by makeFactoryAccessible()

    Set definition factory in appropriate servlet context.

    Parameters:
    factory - Factory to store.
    servletContext - Servlet context that will hold factory.

    getDefinition

    public static ComponentDefinition getDefinition(java.lang.String definitionName,
                                                    javax.servlet.jsp.PageContext pageContext)
                                             throws FactoryNotFoundException,
                                                    DefinitionsFactoryException
    Deprecated. Use TilesUtil.getDefinition(String, ServletRequest, ServletContext)

    Get a component / template definition by its name. First, retrieve instance factory, and then get requested instance. Throw appropriate exception if definition is not found.

    Parameters:
    definitionName - Name of requested definition.
    pageContext - Current pageContext
    Throws:
    FactoryNotFoundException - Can't find definition factory.
    DefinitionsFactoryException - General error in factory while getting definition.
    NoSuchDefinitionException - No definition found for specified name

    getDefinitionsFactory

    public static DefinitionsFactory getDefinitionsFactory(javax.servlet.ServletContext servletContext)
    Deprecated. Use TilesUtil.getDefinitionsFactory(ServletRequest, ServletContext)

    Get definition factory from appropriate servlet context.

    Returns:
    Definitions factory or null if not found.
    Since:
    20020708

    makeDefinitionsFactoryAccessible

    public static void makeDefinitionsFactoryAccessible(DefinitionsFactory factory,
                                                        javax.servlet.ServletContext servletContext)
    Deprecated. Use TilesUtil.createDefinitionsFactory(ServletContext, DefinitionsFactoryConfig)

    Make definition factory accessible to Tags. Factory is stored in servlet context.

    Parameters:
    factory - Factory to make accessible
    servletContext - Current servlet context
    Since:
    20020708

    getActionDefinition

    public static ComponentDefinition getActionDefinition(javax.servlet.ServletRequest request)
    Deprecated. 
    Get Definition stored in jsp context by an action.

    Returns:
    ComponentDefinition or null if not found.

    setActionDefinition

    public static void setActionDefinition(javax.servlet.ServletRequest request,
                                           ComponentDefinition definition)
    Deprecated. 
    Store definition in jsp context. Mainly used by Struts to pass a definition defined in an Action to the forward.


    removeActionDefinition

    public static void removeActionDefinition(javax.servlet.ServletRequest request,
                                              ComponentDefinition definition)
    Deprecated. 
    Remove Definition stored in jsp context. Mainly used by Struts to pass a definition defined in an Action to the forward.


    populateDefinitionsFactoryConfig

    public static void populateDefinitionsFactoryConfig(DefinitionsFactoryConfig factoryConfig,
                                                        javax.servlet.ServletConfig servletConfig)
                                                 throws java.lang.IllegalAccessException,
                                                        java.lang.reflect.InvocationTargetException
    Deprecated. 
    Populate Definition Factory Config from web.xml properties.

    Parameters:
    factoryConfig - Definition Factory Config to populate.
    servletConfig - Current servlet config containing web.xml properties.
    Throws:
    java.lang.IllegalAccessException - if the caller does not have access to the property accessor method
    java.lang.reflect.InvocationTargetException - if the property accessor method throws an exception
    Since:
    tiles 20020708
    See Also:
    BeanUtils

    readFactoryConfig

    protected static DefinitionsFactoryConfig readFactoryConfig(javax.servlet.ServletConfig servletConfig)
                                                         throws DefinitionsFactoryException
    Deprecated. 
    Create FactoryConfig and initialize it from web.xml.

    Parameters:
    servletConfig - ServletConfig for the module with which this plug in is associated
    Throws:
    DefinitionsFactoryException - if this PlugIn cannot be successfully initialized


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/DirectStringAttribute.html0000644000175000017500000002626310404045230031646 0ustar arnaudarnaud00000000000000 DirectStringAttribute (Apache Struts API Documentation)

    org.apache.struts.tiles
    Class DirectStringAttribute

    java.lang.Object
      |
      +--org.apache.struts.tiles.UntyppedAttribute
            |
            +--org.apache.struts.tiles.DirectStringAttribute
    
    All Implemented Interfaces:
    AttributeDefinition, java.io.Serializable

    public class DirectStringAttribute
    extends UntyppedAttribute

    Component attribute. Such attribute value represent a path used to include a JSP.

    See Also:
    Serialized Form

    Field Summary
     
    Fields inherited from class org.apache.struts.tiles.UntyppedAttribute
    role, value
     
    Constructor Summary
    DirectStringAttribute(java.lang.String value)
               
     
    Methods inherited from class org.apache.struts.tiles.UntyppedAttribute
    getRole, getValue, setRole, setValue, toString
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
     

    Constructor Detail

    DirectStringAttribute

    public DirectStringAttribute(java.lang.String value)


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/EmptyIterator.html0000644000175000017500000002533410404045250030171 0ustar arnaudarnaud00000000000000 EmptyIterator (Apache Struts API Documentation)

    org.apache.struts.tiles
    Class EmptyIterator

    java.lang.Object
      |
      +--org.apache.struts.tiles.EmptyIterator
    
    All Implemented Interfaces:
    java.util.Iterator

    class EmptyIterator
    extends java.lang.Object
    implements java.util.Iterator


    Constructor Summary
    (package private) EmptyIterator()
               
     
    Method Summary
     boolean hasNext()
               
     java.lang.Object next()
               
     void remove()
               
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    EmptyIterator

    EmptyIterator()
    Method Detail

    hasNext

    public boolean hasNext()
    Specified by:
    hasNext in interface java.util.Iterator

    next

    public java.lang.Object next()
    Specified by:
    next in interface java.util.Iterator

    remove

    public void remove()
    Specified by:
    remove in interface java.util.Iterator


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/FactoryNotFoundException.html0000644000175000017500000003151510404045222032321 0ustar arnaudarnaud00000000000000 FactoryNotFoundException (Apache Struts API Documentation)

    org.apache.struts.tiles
    Class FactoryNotFoundException

    java.lang.Object
      |
      +--java.lang.Throwable
            |
            +--java.lang.Exception
                  |
                  +--org.apache.struts.tiles.TilesException
                        |
                        +--org.apache.struts.tiles.DefinitionsFactoryException
                              |
                              +--org.apache.struts.tiles.FactoryNotFoundException
    
    All Implemented Interfaces:
    java.io.Serializable

    public class FactoryNotFoundException
    extends DefinitionsFactoryException

    Exception thrown when definitions factory is not found.

    See Also:
    Serialized Form

    Field Summary
     
    Fields inherited from class org.apache.struts.tiles.DefinitionsFactoryException
     
    Fields inherited from class java.lang.Exception
     
    Fields inherited from class java.lang.Throwable
     
    Constructor Summary
    FactoryNotFoundException()
              Constructor.
    FactoryNotFoundException(java.lang.String msg)
              Constructor.
     
    Methods inherited from class org.apache.struts.tiles.DefinitionsFactoryException
    getException, getMessage
     
    Methods inherited from class java.lang.Throwable
    fillInStackTrace, getCause, getLocalizedMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
     

    Constructor Detail

    FactoryNotFoundException

    public FactoryNotFoundException()
    Constructor.


    FactoryNotFoundException

    public FactoryNotFoundException(java.lang.String msg)
    Constructor.

    Parameters:
    msg - Message.


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/NoSuchDefinitionException.html0000644000175000017500000003150210404045172032445 0ustar arnaudarnaud00000000000000 NoSuchDefinitionException (Apache Struts API Documentation)

    org.apache.struts.tiles
    Class NoSuchDefinitionException

    java.lang.Object
      |
      +--java.lang.Throwable
            |
            +--java.lang.Exception
                  |
                  +--org.apache.struts.tiles.TilesException
                        |
                        +--org.apache.struts.tiles.DefinitionsFactoryException
                              |
                              +--org.apache.struts.tiles.NoSuchDefinitionException
    
    All Implemented Interfaces:
    java.io.Serializable

    public class NoSuchDefinitionException
    extends DefinitionsFactoryException

    Exception thrown when a definition is not found.

    See Also:
    Serialized Form

    Field Summary
     
    Fields inherited from class org.apache.struts.tiles.DefinitionsFactoryException
     
    Fields inherited from class java.lang.Exception
     
    Fields inherited from class java.lang.Throwable
     
    Constructor Summary
    NoSuchDefinitionException()
              Constructor.
    NoSuchDefinitionException(java.lang.String msg)
              Constructor.
     
    Methods inherited from class org.apache.struts.tiles.DefinitionsFactoryException
    getException, getMessage
     
    Methods inherited from class java.lang.Throwable
    fillInStackTrace, getCause, getLocalizedMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
     

    Constructor Detail

    NoSuchDefinitionException

    public NoSuchDefinitionException()
    Constructor.


    NoSuchDefinitionException

    public NoSuchDefinitionException(java.lang.String msg)
    Constructor.

    Parameters:
    msg - Message.


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/PathAttribute.html0000644000175000017500000002575510404045244030153 0ustar arnaudarnaud00000000000000 PathAttribute (Apache Struts API Documentation)

    org.apache.struts.tiles
    Class PathAttribute

    java.lang.Object
      |
      +--org.apache.struts.tiles.UntyppedAttribute
            |
            +--org.apache.struts.tiles.PathAttribute
    
    All Implemented Interfaces:
    AttributeDefinition, java.io.Serializable

    public class PathAttribute
    extends UntyppedAttribute

    Component attribute. Attribute value represents a path used to include a JSP.

    See Also:
    Serialized Form

    Field Summary
     
    Fields inherited from class org.apache.struts.tiles.UntyppedAttribute
    role, value
     
    Constructor Summary
    PathAttribute(java.lang.String value)
               
     
    Methods inherited from class org.apache.struts.tiles.UntyppedAttribute
    getRole, getValue, setRole, setValue, toString
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
     

    Constructor Detail

    PathAttribute

    public PathAttribute(java.lang.String value)


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/TilesException.html0000644000175000017500000003720010404045224030314 0ustar arnaudarnaud00000000000000 TilesException (Apache Struts API Documentation)

    org.apache.struts.tiles
    Class TilesException

    java.lang.Object
      |
      +--java.lang.Throwable
            |
            +--java.lang.Exception
                  |
                  +--org.apache.struts.tiles.TilesException
    
    All Implemented Interfaces:
    java.io.Serializable
    Direct Known Subclasses:
    DefinitionsFactoryException

    public class TilesException
    extends java.lang.Exception

    Root class for all Tiles-exceptions.

    Author:
    Cedric Dumoulin
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.Exception exception
              Any "wrapped" exception will be exposed when this is serialized.
     
    Fields inherited from class java.lang.Exception
     
    Fields inherited from class java.lang.Throwable
     
    Constructor Summary
    TilesException()
              Constructor.
    TilesException(java.lang.Exception e)
              Create a new TilesException wrapping an existing exception.
    TilesException(java.lang.String message)
              Constructor.
    TilesException(java.lang.String message, java.lang.Exception e)
              Create a new TilesException from an existing exception.
     
    Method Summary
     java.lang.Exception getException()
              Return the embedded exception, if any.
     java.lang.String getMessage()
              Return a detail message for this exception.
     
    Methods inherited from class java.lang.Throwable
    fillInStackTrace, getCause, getLocalizedMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
     

    Field Detail

    exception

    private java.lang.Exception exception
    Any "wrapped" exception will be exposed when this is serialized.

    Constructor Detail

    TilesException

    public TilesException()
    Constructor.


    TilesException

    public TilesException(java.lang.String message)
    Constructor.

    Parameters:
    message - The error or warning message.

    TilesException

    public TilesException(java.lang.Exception e)
    Create a new TilesException wrapping an existing exception.

    The existing exception will be embedded in the new one, and its message will become the default message for the TilesException.

    Parameters:
    e - The exception to be wrapped.

    TilesException

    public TilesException(java.lang.String message,
                          java.lang.Exception e)
    Create a new TilesException from an existing exception.

    The existing exception will be embedded in the new one, but the new exception will have its own message.

    Parameters:
    message - The detail message.
    e - The exception to be wrapped.
    Method Detail

    getMessage

    public java.lang.String getMessage()
    Return a detail message for this exception.

    If there is a embedded exception, and if the TilesException has no detail message of its own, this method will return the detail message from the embedded exception.

    Overrides:
    getMessage in class java.lang.Throwable
    Returns:
    The error or warning message.

    getException

    public java.lang.Exception getException()
    Return the embedded exception, if any.

    Returns:
    The embedded exception, or null if there is none.


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/TilesPlugin.html0000644000175000017500000006567710404045204027635 0ustar arnaudarnaud00000000000000 TilesPlugin (Apache Struts API Documentation)

    org.apache.struts.tiles
    Class TilesPlugin

    java.lang.Object
      |
      +--org.apache.struts.tiles.TilesPlugin
    
    All Implemented Interfaces:
    PlugIn

    public class TilesPlugin
    extends java.lang.Object
    implements PlugIn

    Tiles Plugin used to initialize Tiles. This plugin is to be used with Struts 1.1 in association with TilesRequestProcessor.
    This plugin creates one definition factory for each Struts-module. The definition factory configuration is read first from 'web.xml' (backward compatibility), then it is overloaded with values found in the plugin property values.
    The plugin changes the Struts configuration by specifying a TilesRequestProcessor as request processor. If you want to use your own RequestProcessor, it should subclass TilesRequestProcessor.
    This plugin can also be used to create one single factory for all modules. This behavior is enabled by specifying moduleAware=false in each plugin properties. In this case, the definition factory configuration file is read by the first Tiles plugin to be initialized. The order is determined by the order of modules declaration in web.xml. The first module is always the default one if it exists. The plugin should be declared in each struts-config.xml file in order to properly initialize the request processor.

    Since:
    1.1
    Author:
    Cedric Dumoulin

    Field Summary
    protected  PlugInConfig currentPlugInConfigObject
              The plugin config object provided by the ActionServlet initializing this plugin.
    protected  DefinitionsFactory definitionFactory
              Associated definition factory
    protected static org.apache.commons.logging.Log log
              Commons Logging instance.
    protected  boolean moduleAware
              Is the factory module aware ?
    protected  java.lang.String tilesUtilImplClassname
              Tiles util implementation classname.
     
    Constructor Summary
    TilesPlugin()
               
     
    Method Summary
     void destroy()
              End plugin.
    protected  java.util.Map findStrutsPlugInConfigProperties(ActionServlet servlet, ModuleConfig config)
              Find original properties set in the Struts PlugInConfig object.
     java.lang.String getTilesUtilImplClassname()
              Get Tiles util implemention classname.
     void init(ActionServlet servlet, ModuleConfig moduleConfig)
              Receive notification that the specified module is being started up.
    protected  void initRequestProcessorClass(ModuleConfig config)
              Set RequestProcessor to appropriate Tiles RequestProcessor.
     boolean isModuleAware()
              Get the module aware flag.
    protected  DefinitionsFactoryConfig readFactoryConfig(ActionServlet servlet, ModuleConfig config)
              Create FactoryConfig and initialize it from web.xml and struts-config.xml.
     void setCurrentPlugInConfigObject(PlugInConfig plugInConfigObject)
              Method used by the ActionServlet initializing this plugin.
     void setModuleAware(boolean moduleAware)
              Set the module aware flag.
     void setTilesUtilImplClassname(java.lang.String tilesUtilImplClassname)
              Set Tiles util implemention classname.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    log

    protected static org.apache.commons.logging.Log log
    Commons Logging instance.


    moduleAware

    protected boolean moduleAware
    Is the factory module aware ?


    tilesUtilImplClassname

    protected java.lang.String tilesUtilImplClassname
    Tiles util implementation classname. This property can be set by user in the plugin declaration


    definitionFactory

    protected DefinitionsFactory definitionFactory
    Associated definition factory


    currentPlugInConfigObject

    protected PlugInConfig currentPlugInConfigObject
    The plugin config object provided by the ActionServlet initializing this plugin.

    Constructor Detail

    TilesPlugin

    public TilesPlugin()
    Method Detail

    isModuleAware

    public boolean isModuleAware()
    Get the module aware flag.

    Returns:
    true: user wants a single factory instance, false: user wants multiple factory instances (one per module with Struts)

    setModuleAware

    public void setModuleAware(boolean moduleAware)
    Set the module aware flag. This flag is only meaningful if the property tilesUtilImplClassname is not set.

    Parameters:
    moduleAware - true: user wants a single factory instance, false: user wants multiple factory instances (one per module with Struts)

    init

    public void init(ActionServlet servlet,
                     ModuleConfig moduleConfig)
              throws javax.servlet.ServletException

    Receive notification that the specified module is being started up.

    Specified by:
    init in interface PlugIn
    Parameters:
    servlet - ActionServlet that is managing all the modules in this web application.
    moduleConfig - ModuleConfig for the module with which this plugin is associated.
    Throws:
    javax.servlet.ServletException - if this PlugIn cannot be successfully initialized.

    destroy

    public void destroy()
    End plugin.

    Specified by:
    destroy in interface PlugIn

    readFactoryConfig

    protected DefinitionsFactoryConfig readFactoryConfig(ActionServlet servlet,
                                                         ModuleConfig config)
                                                  throws javax.servlet.ServletException
    Create FactoryConfig and initialize it from web.xml and struts-config.xml.

    Parameters:
    servlet - ActionServlet that is managing all the modules in this web application.
    config - ModuleConfig for the module with which this plugin is associated.
    Throws:
    javax.servlet.ServletException - if this PlugIn cannot be successfully initialized.

    findStrutsPlugInConfigProperties

    protected java.util.Map findStrutsPlugInConfigProperties(ActionServlet servlet,
                                                             ModuleConfig config)
                                                      throws javax.servlet.ServletException
    Find original properties set in the Struts PlugInConfig object. First, we need to find the index of this plugin. Then we retrieve the array of configs and then the object for this plugin.

    Parameters:
    servlet - ActionServlet that is managing all the modules in this web application.
    config - ModuleConfig for the module with which this plug in is associated.
    Throws:
    javax.servlet.ServletException - if this PlugIn cannot be successfully initialized.

    initRequestProcessorClass

    protected void initRequestProcessorClass(ModuleConfig config)
                                      throws javax.servlet.ServletException
    Set RequestProcessor to appropriate Tiles RequestProcessor. First, check if a RequestProcessor is specified. If yes, check if it extends the appropriate TilesRequestProcessor class. If not, set processor class to TilesRequestProcessor.

    Parameters:
    config - ModuleConfig for the module with which this plugin is associated.
    Throws:
    javax.servlet.ServletException - On errors.

    setTilesUtilImplClassname

    public void setTilesUtilImplClassname(java.lang.String tilesUtilImplClassname)
    Set Tiles util implemention classname. If this property is set, the flag moduleAware will not be used anymore.

    Parameters:
    tilesUtilImplClassname - Classname.

    getTilesUtilImplClassname

    public java.lang.String getTilesUtilImplClassname()
    Get Tiles util implemention classname.

    Returns:
    The classname or null if none is set.

    setCurrentPlugInConfigObject

    public void setCurrentPlugInConfigObject(PlugInConfig plugInConfigObject)
    Method used by the ActionServlet initializing this plugin. Set the plugin config object read from module config.

    Parameters:
    plugInConfigObject - PlugInConfig.


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/TilesRequestProcessor.html0000644000175000017500000010326510404045236031716 0ustar arnaudarnaud00000000000000 TilesRequestProcessor (Apache Struts API Documentation)

    org.apache.struts.tiles
    Class TilesRequestProcessor

    java.lang.Object
      |
      +--org.apache.struts.action.RequestProcessor
            |
            +--org.apache.struts.tiles.TilesRequestProcessor
    

    public class TilesRequestProcessor
    extends RequestProcessor

    RequestProcessor contains the processing logic that the Struts controller servlet performs as it receives each servlet request from the container.

    This processor subclasses the Struts RequestProcessor in order to intercept calls to forward or include. When such calls are done, the Tiles processor checks if the specified URI is a definition name. If true, the definition is retrieved and included. If false, the original URI is included or a forward is performed.

    Actually, catching is done by overloading the following methods:

    Since:
    Struts 1.1
    Author:
    Cedric Dumoulin

    Field Summary
    protected  DefinitionsFactory definitionsFactory
              Definitions factory
    protected static org.apache.commons.logging.Log log
              Commons Logging instance.
     
    Fields inherited from class org.apache.struts.action.RequestProcessor
    actions, appConfig, INCLUDE_PATH_INFO, INCLUDE_SERVLET_PATH, moduleConfig, servlet
     
    Constructor Summary
    TilesRequestProcessor()
               
     
    Method Summary
    protected  void doForward(java.lang.String uri, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
              Do a forward using request dispatcher.
     DefinitionsFactory getDefinitionsFactory()
              Get associated definition factory.
     void init(ActionServlet servlet, ModuleConfig moduleConfig)
              Initialize this request processor instance.
    protected  void initDefinitionsMapping()
              Read component instance mapping configuration file.
    protected  void internalModuleRelativeForward(java.lang.String uri, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
              Catch the call to a module relative forward.
    protected  void internalModuleRelativeInclude(java.lang.String uri, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
              Do a module relative include to specified uri using request dispatcher.
    protected  void processForwardConfig(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, ForwardConfig forward)
              Overloaded method from Struts' RequestProcessor.
    protected  boolean processTilesDefinition(java.lang.String definitionName, boolean contextRelative, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
              Process a Tile definition name.
     
    Methods inherited from class org.apache.struts.action.RequestProcessor
    destroy, doInclude, getDebug, getInternal, getServletContext, log, log, process, processActionCreate, processActionForm, processActionForward, processActionPerform, processContent, processException, processForward, processInclude, processLocale, processMapping, processMultipart, processNoCache, processPath, processPopulate, processPreprocess, processRoles, processValidate
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    definitionsFactory

    protected DefinitionsFactory definitionsFactory
    Definitions factory


    log

    protected static org.apache.commons.logging.Log log
    Commons Logging instance.

    Constructor Detail

    TilesRequestProcessor

    public TilesRequestProcessor()
    Method Detail

    init

    public void init(ActionServlet servlet,
                     ModuleConfig moduleConfig)
              throws javax.servlet.ServletException
    Initialize this request processor instance.

    Overrides:
    init in class RequestProcessor
    Parameters:
    servlet - The ActionServlet we are associated with.
    moduleConfig - The ModuleConfig we are associated with.
    Throws:
    javax.servlet.ServletException - If an error occurs during initialization.

    initDefinitionsMapping

    protected void initDefinitionsMapping()
                                   throws javax.servlet.ServletException
    Read component instance mapping configuration file. This is where we read files properties.

    javax.servlet.ServletException

    processTilesDefinition

    protected boolean processTilesDefinition(java.lang.String definitionName,
                                             boolean contextRelative,
                                             javax.servlet.http.HttpServletRequest request,
                                             javax.servlet.http.HttpServletResponse response)
                                      throws java.io.IOException,
                                             javax.servlet.ServletException
    Process a Tile definition name. This method tries to process the parameter definitionName as a definition name. It returns true if a definition has been processed, or false otherwise. Parameter contextRelative is not used in this implementation.

    Parameters:
    definitionName - Definition name to insert.
    contextRelative - Is the definition marked contextRelative ?
    request - Current page request.
    response - Current page response.
    Returns:
    true if the method has processed uri as a definition name, false otherwise.
    java.io.IOException
    javax.servlet.ServletException

    doForward

    protected void doForward(java.lang.String uri,
                             javax.servlet.http.HttpServletRequest request,
                             javax.servlet.http.HttpServletResponse response)
                      throws java.io.IOException,
                             javax.servlet.ServletException
    Do a forward using request dispatcher. Uri is a valid uri. If response has already been commited, do an include instead.

    Overrides:
    doForward in class RequestProcessor
    Parameters:
    uri - Uri or Definition name to forward.
    request - Current page request.
    response - Current page response.
    java.io.IOException
    javax.servlet.ServletException

    processForwardConfig

    protected void processForwardConfig(javax.servlet.http.HttpServletRequest request,
                                        javax.servlet.http.HttpServletResponse response,
                                        ForwardConfig forward)
                                 throws java.io.IOException,
                                        javax.servlet.ServletException
    Overloaded method from Struts' RequestProcessor. Forward or redirect to the specified destination by the specified mechanism. This method catches the Struts' actionForward call. It checks if the actionForward is done on a Tiles definition name. If true, process the definition and insert it. If false, call the original parent's method.

    Overrides:
    processForwardConfig in class RequestProcessor
    Parameters:
    request - The servlet request we are processing.
    response - The servlet response we are creating.
    forward - The ActionForward controlling where we go next.
    Throws:
    java.io.IOException - if an input/output error occurs.
    javax.servlet.ServletException - if a servlet exception occurs.

    internalModuleRelativeForward

    protected void internalModuleRelativeForward(java.lang.String uri,
                                                 javax.servlet.http.HttpServletRequest request,
                                                 javax.servlet.http.HttpServletResponse response)
                                          throws java.io.IOException,
                                                 javax.servlet.ServletException
    Catch the call to a module relative forward. If the specified uri is a tiles definition name, insert it. Otherwise, parent processing is called. Do a module relative forward to specified uri using request dispatcher. Uri is relative to the current module. The real uri is computed by prefixing the module name. This method is used internally and is not part of the public API. It is advised to not use it in subclasses.

    Overrides:
    internalModuleRelativeForward in class RequestProcessor
    Parameters:
    uri - Module-relative URI to forward to.
    request - Current page request.
    response - Current page response.
    java.io.IOException
    javax.servlet.ServletException
    Since:
    Struts 1.1

    internalModuleRelativeInclude

    protected void internalModuleRelativeInclude(java.lang.String uri,
                                                 javax.servlet.http.HttpServletRequest request,
                                                 javax.servlet.http.HttpServletResponse response)
                                          throws java.io.IOException,
                                                 javax.servlet.ServletException
    Do a module relative include to specified uri using request dispatcher. Uri is relative to the current module. The real uri is computed by prefixing the module name. This method is used internally and is not part of the public API. It is advice to not use it in subclasses.

    Overrides:
    internalModuleRelativeInclude in class RequestProcessor
    Parameters:
    uri - Module-relative URI to forward to.
    request - Current page request.
    response - Current page response.
    java.io.IOException
    javax.servlet.ServletException
    Since:
    Struts 1.1

    getDefinitionsFactory

    public DefinitionsFactory getDefinitionsFactory()
    Get associated definition factory.



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/TilesServlet.html0000644000175000017500000003240410404045246030007 0ustar arnaudarnaud00000000000000 TilesServlet (Apache Struts API Documentation)

    org.apache.struts.tiles
    Class TilesServlet

    java.lang.Object
      |
      +--javax.servlet.GenericServlet
            |
            +--javax.servlet.http.HttpServlet
                  |
                  +--org.apache.struts.tiles.TilesServlet
    
    All Implemented Interfaces:
    java.io.Serializable, javax.servlet.Servlet, javax.servlet.ServletConfig

    Deprecated. Use the ActionServlet instead.

    public class TilesServlet
    extends javax.servlet.http.HttpServlet

    A simple servlet initializing and loading Tiles factory. This servlet can be declared in web.xml, as well as all initialization parameters available with the specified factory. This servlet is intended to be used in application using Tiles without Struts.

    Author:
    Cedric Dumoulin
    See Also:
    Serialized Form

    Field Summary
    protected static org.apache.commons.logging.Log log
              Deprecated. Commons Logging instance.
     
    Fields inherited from class javax.servlet.http.HttpServlet
     
    Fields inherited from class javax.servlet.GenericServlet
     
    Constructor Summary
    TilesServlet()
              Deprecated.  
     
    Method Summary
     void init()
              Deprecated. Initialize this servlet
     
    Methods inherited from class javax.servlet.http.HttpServlet
    doDelete, doGet, doOptions, doPost, doPut, doTrace, getLastModified, service, service
     
    Methods inherited from class javax.servlet.GenericServlet
    destroy, getInitParameter, getInitParameterNames, getServletConfig, getServletContext, getServletInfo, getServletName, init, log, log
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    log

    protected static org.apache.commons.logging.Log log
    Deprecated. 
    Commons Logging instance.

    Constructor Detail

    TilesServlet

    public TilesServlet()
    Deprecated. 
    Method Detail

    init

    public void init()
              throws javax.servlet.ServletException
    Deprecated. 
    Initialize this servlet

    Overrides:
    init in class javax.servlet.GenericServlet
    Throws:
    javax.servlet.ServletException - if we cannot configure ourselves correctly


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/TilesUtil.html0000644000175000017500000006673210404045244027311 0ustar arnaudarnaud00000000000000 TilesUtil (Apache Struts API Documentation)

    org.apache.struts.tiles
    Class TilesUtil

    java.lang.Object
      |
      +--org.apache.struts.tiles.TilesUtil
    
    Direct Known Subclasses:
    DefinitionsUtil

    public class TilesUtil
    extends java.lang.Object

    Class containing utility methods for Tiles. Methods of this class are static and thereby accessible from anywhere. The underlying implementation can be changed with setTilesUtil(TilesUtilImpl).
    Real implementation classes should derive from the TilesUtilImpl class.
    Some methods are specified to throw the UnsupportedOperationException if the underlying implementation doesn't support the operation.


    Field Summary
    private static boolean implAlreadySet
              Flag to know if internal implementation has been set by the setter method
    protected static org.apache.commons.logging.Log log
              Commons Logging instance.
    protected static TilesUtilImpl tilesUtilImpl
              The implementation of tilesUtilImpl
     
    Constructor Summary
    TilesUtil()
               
     
    Method Summary
    static java.lang.Class applicationClass(java.lang.String className)
              Deprecated. Use RequestUtils.applicationClass() instead.
    static DefinitionsFactory createDefinitionsFactory(javax.servlet.ServletContext servletContext, DefinitionsFactoryConfig factoryConfig)
              Create Definition factory from specified configuration object.
    static void doForward(java.lang.String uri, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, javax.servlet.ServletContext servletContext)
              Do a forward using request dispatcher.
    static void doInclude(java.lang.String uri, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, javax.servlet.ServletContext servletContext)
              Do an include using request dispatcher.
    static void doInclude(java.lang.String uri, javax.servlet.jsp.PageContext pageContext)
              Do an include using PageContext.include().
    static ComponentDefinition getDefinition(java.lang.String definitionName, javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Get a definition by its name.
    static DefinitionsFactory getDefinitionsFactory(javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Get definition factory from appropriate servlet context.
    static TilesUtilImpl getTilesUtil()
              Get the real implementation.
    (package private) static boolean isTilesUtilImplSet()
              Getter to know if the underlying implementation is already set to another value than the default value.
    static void setTilesUtil(TilesUtilImpl tilesUtil)
              Set the real implementation.
    protected static void testReset()
              Reset internal state.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    log

    protected static org.apache.commons.logging.Log log
    Commons Logging instance.


    tilesUtilImpl

    protected static TilesUtilImpl tilesUtilImpl
    The implementation of tilesUtilImpl


    implAlreadySet

    private static boolean implAlreadySet
    Flag to know if internal implementation has been set by the setter method

    Constructor Detail

    TilesUtil

    public TilesUtil()
    Method Detail

    getTilesUtil

    public static TilesUtilImpl getTilesUtil()
    Get the real implementation.

    Returns:
    The underlying implementation object.

    setTilesUtil

    public static void setTilesUtil(TilesUtilImpl tilesUtil)
    Set the real implementation. This method should be called only once. Successive calls have no effect.

    Parameters:
    tilesUtil - The implementaion.

    isTilesUtilImplSet

    static boolean isTilesUtilImplSet()
    Getter to know if the underlying implementation is already set to another value than the default value.

    Returns:
    true if setTilesUtil(org.apache.struts.tiles.TilesUtilImpl) has already been called.

    doForward

    public static void doForward(java.lang.String uri,
                                 javax.servlet.http.HttpServletRequest request,
                                 javax.servlet.http.HttpServletResponse response,
                                 javax.servlet.ServletContext servletContext)
                          throws java.io.IOException,
                                 javax.servlet.ServletException
    Do a forward using request dispatcher. This method is used by the Tiles package anytime a forward is required.

    Parameters:
    uri - Uri or Definition name to forward.
    request - Current page request.
    response - Current page response.
    servletContext - Current servlet context.
    java.io.IOException
    javax.servlet.ServletException

    doInclude

    public static void doInclude(java.lang.String uri,
                                 javax.servlet.http.HttpServletRequest request,
                                 javax.servlet.http.HttpServletResponse response,
                                 javax.servlet.ServletContext servletContext)
                          throws java.io.IOException,
                                 javax.servlet.ServletException
    Do an include using request dispatcher. This method is used by the Tiles package when an include is required. The Tiles package can use indifferently any form of this method.

    Parameters:
    uri - Uri or Definition name to forward.
    request - Current page request.
    response - Current page response.
    servletContext - Current servlet context.
    java.io.IOException
    javax.servlet.ServletException

    doInclude

    public static void doInclude(java.lang.String uri,
                                 javax.servlet.jsp.PageContext pageContext)
                          throws java.io.IOException,
                                 javax.servlet.ServletException
    Do an include using PageContext.include(). This method is used by the Tiles package when an include is required. The Tiles package can use indifferently any form of this method.

    Parameters:
    uri - Uri or Definition name to forward.
    java.io.IOException
    javax.servlet.ServletException

    getDefinitionsFactory

    public static DefinitionsFactory getDefinitionsFactory(javax.servlet.ServletRequest request,
                                                           javax.servlet.ServletContext servletContext)
    Get definition factory from appropriate servlet context.

    Returns:
    Definitions factory or null if not found.

    createDefinitionsFactory

    public static DefinitionsFactory createDefinitionsFactory(javax.servlet.ServletContext servletContext,
                                                              DefinitionsFactoryConfig factoryConfig)
                                                       throws DefinitionsFactoryException
    Create Definition factory from specified configuration object. Create a ConfigurableDefinitionsFactory and initialize it with the configuration object. This later can contain the factory classname to use. Factory is made accessible from tags.

    Fallback of several factory creation methods.

    Parameters:
    servletContext - Servlet Context passed to newly created factory.
    factoryConfig - Configuration object passed to factory.
    Returns:
    newly created factory of type ConfigurableDefinitionsFactory.
    Throws:
    DefinitionsFactoryException - If an error occur while initializing factory

    getDefinition

    public static ComponentDefinition getDefinition(java.lang.String definitionName,
                                                    javax.servlet.ServletRequest request,
                                                    javax.servlet.ServletContext servletContext)
                                             throws FactoryNotFoundException,
                                                    DefinitionsFactoryException
    Get a definition by its name. First, retrieve definition factory and then get requested definition. Throw appropriate exception if definition or definition factory is not found.

    Parameters:
    definitionName - Name of requested definition.
    request - Current servelet request.
    servletContext - current servlet context.
    Throws:
    FactoryNotFoundException - Can't find definition factory.
    DefinitionsFactoryException - General error in factory while getting definition.
    NoSuchDefinitionException - No definition found for specified name

    applicationClass

    public static java.lang.Class applicationClass(java.lang.String className)
                                            throws java.lang.ClassNotFoundException
    Deprecated. Use RequestUtils.applicationClass() instead.

    Return the Class object for the specified fully qualified class name from the underlying class loader.

    Parameters:
    className - Fully qualified class name to be loaded.
    Returns:
    Class object.
    Throws:
    java.lang.ClassNotFoundException - if the class cannot be found

    testReset

    protected static void testReset()
    Reset internal state. This method is used by test suites to reset the class to its original state.



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/TilesUtilImpl.html0000644000175000017500000006112310404045212030113 0ustar arnaudarnaud00000000000000 TilesUtilImpl (Apache Struts API Documentation)

    org.apache.struts.tiles
    Class TilesUtilImpl

    java.lang.Object
      |
      +--org.apache.struts.tiles.TilesUtilImpl
    
    All Implemented Interfaces:
    java.io.Serializable
    Direct Known Subclasses:
    TilesUtilStrutsImpl

    public class TilesUtilImpl
    extends java.lang.Object
    implements java.io.Serializable

    Default implementation of TilesUtil. This class contains default implementation of utilities. This implementation is intended to be used without Struts.

    See Also:
    Serialized Form

    Field Summary
    static java.lang.String DEFINITIONS_FACTORY
              Constant name used to store factory in servlet context
    protected  org.apache.commons.logging.Log log
              Commons Logging instance.
     
    Constructor Summary
    TilesUtilImpl()
               
     
    Method Summary
     java.lang.Class applicationClass(java.lang.String className)
              Deprecated. Use RequestUtils.applicationClass() instead.
    protected  DefinitionsFactory createDefinitionFactoryInstance(java.lang.String classname)
              Create Definition factory of specified classname.
     DefinitionsFactory createDefinitionsFactory(javax.servlet.ServletContext servletContext, DefinitionsFactoryConfig factoryConfig)
              Create Definition factory from specified configuration object.
     void doForward(java.lang.String uri, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, javax.servlet.ServletContext servletContext)
              Do a forward using request dispatcher.
     void doInclude(java.lang.String uri, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, javax.servlet.ServletContext servletContext)
              Do an include using request dispatcher.
    static void doInclude(java.lang.String uri, javax.servlet.jsp.PageContext pageContext)
              Do an include using PageContext.include().
     DefinitionsFactory getDefinitionsFactory(javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Get definition factory from appropriate servlet context.
    protected  void makeDefinitionsFactoryAccessible(DefinitionsFactory factory, javax.servlet.ServletContext servletContext)
              Make definition factory accessible to Tags.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    log

    protected org.apache.commons.logging.Log log
    Commons Logging instance.


    DEFINITIONS_FACTORY

    public static final java.lang.String DEFINITIONS_FACTORY
    Constant name used to store factory in servlet context

    See Also:
    Constant Field Values
    Constructor Detail

    TilesUtilImpl

    public TilesUtilImpl()
    Method Detail

    doForward

    public void doForward(java.lang.String uri,
                          javax.servlet.http.HttpServletRequest request,
                          javax.servlet.http.HttpServletResponse response,
                          javax.servlet.ServletContext servletContext)
                   throws java.io.IOException,
                          javax.servlet.ServletException
    Do a forward using request dispatcher. This method is used by the Tiles package anytime a forward is required.

    Parameters:
    uri - Uri or Definition name to forward.
    request - Current page request.
    servletContext - Current servlet context.
    java.io.IOException
    javax.servlet.ServletException

    doInclude

    public void doInclude(java.lang.String uri,
                          javax.servlet.http.HttpServletRequest request,
                          javax.servlet.http.HttpServletResponse response,
                          javax.servlet.ServletContext servletContext)
                   throws java.io.IOException,
                          javax.servlet.ServletException
    Do an include using request dispatcher. This method is used by the Tiles package when an include is required. The Tiles package can use indifferently any form of this method.

    Parameters:
    uri - Uri or Definition name to forward.
    request - Current page request.
    response - Current page response.
    servletContext - Current servlet context.
    java.io.IOException
    javax.servlet.ServletException

    doInclude

    public static void doInclude(java.lang.String uri,
                                 javax.servlet.jsp.PageContext pageContext)
                          throws java.io.IOException,
                                 javax.servlet.ServletException
    Do an include using PageContext.include(). This method is used by the Tiles package when an include is required. The Tiles package can use indifferently any form of this method.

    Parameters:
    uri - Uri or Definition name to forward.
    java.io.IOException
    javax.servlet.ServletException

    getDefinitionsFactory

    public DefinitionsFactory getDefinitionsFactory(javax.servlet.ServletRequest request,
                                                    javax.servlet.ServletContext servletContext)
    Get definition factory from appropriate servlet context.

    Returns:
    Definitions factory or null if not found.

    createDefinitionsFactory

    public DefinitionsFactory createDefinitionsFactory(javax.servlet.ServletContext servletContext,
                                                       DefinitionsFactoryConfig factoryConfig)
                                                throws DefinitionsFactoryException
    Create Definition factory from specified configuration object. Create an instance of the factory with the class specified in the config object. Then, initialize this factory and finally store the factory in appropriate context by calling makeDefinitionsFactoryAccessible(DefinitionsFactory, ServletContext). Factory creation is done by createDefinitionFactoryInstance(String).

    Parameters:
    servletContext - Servlet Context passed to newly created factory.
    factoryConfig - Configuration object passed to factory.
    Returns:
    newly created factory of type specified in the config object.
    Throws:
    DefinitionsFactoryException - If an error occur while initializing factory

    createDefinitionFactoryInstance

    protected DefinitionsFactory createDefinitionFactoryInstance(java.lang.String classname)
                                                          throws DefinitionsFactoryException
    Create Definition factory of specified classname. Factory class must extend the DefinitionsFactory class. The factory is wrapped appropriately with ComponentDefinitionsFactoryWrapper if it is an instance of the deprecated ComponentDefinitionsFactory class.

    Parameters:
    classname - Class name of the factory to create.
    Returns:
    newly created factory.
    Throws:
    DefinitionsFactoryException - If an error occur while initializing factory

    makeDefinitionsFactoryAccessible

    protected void makeDefinitionsFactoryAccessible(DefinitionsFactory factory,
                                                    javax.servlet.ServletContext servletContext)
    Make definition factory accessible to Tags. Factory is stored in servlet context.

    Parameters:
    factory - Factory to be made accessible.
    servletContext - Current servlet context.

    applicationClass

    public java.lang.Class applicationClass(java.lang.String className)
                                     throws java.lang.ClassNotFoundException
    Deprecated. Use RequestUtils.applicationClass() instead.

    Return the Class object for the specified fully qualified class name from the underlying class loader.

    Parameters:
    className - Fully qualified class name to be loaded.
    Returns:
    Class object.
    Throws:
    java.lang.ClassNotFoundException - if the class cannot be found


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/TilesUtilStrutsImpl.html0000644000175000017500000003707510404045226031356 0ustar arnaudarnaud00000000000000 TilesUtilStrutsImpl (Apache Struts API Documentation)

    org.apache.struts.tiles
    Class TilesUtilStrutsImpl

    java.lang.Object
      |
      +--org.apache.struts.tiles.TilesUtilImpl
            |
            +--org.apache.struts.tiles.TilesUtilStrutsImpl
    
    All Implemented Interfaces:
    java.io.Serializable
    Direct Known Subclasses:
    TilesUtilStrutsModulesImpl

    public class TilesUtilStrutsImpl
    extends TilesUtilImpl

    TilesUtil implementation for Struts 1.1 with one single factory. This class contains default implementation of utilities. This implementation is intended to be used with Struts 1.1. This class is used as the base class for all Struts 1.1 implementations of TilesUtil.

    See Also:
    Serialized Form

    Field Summary
     
    Fields inherited from class org.apache.struts.tiles.TilesUtilImpl
    DEFINITIONS_FACTORY, log
     
    Constructor Summary
    TilesUtilStrutsImpl()
               
     
    Method Summary
     java.lang.Class applicationClass(java.lang.String className)
              Deprecated. Use RequestUtils.applicationClass() instead.
     DefinitionsFactory getDefinitionsFactory(javax.servlet.ServletContext servletContext, ModuleConfig moduleConfig)
              Get definition factory for the module attached to the specified moduleConfig.
     
    Methods inherited from class org.apache.struts.tiles.TilesUtilImpl
    createDefinitionFactoryInstance, createDefinitionsFactory, doForward, doInclude, doInclude, getDefinitionsFactory, makeDefinitionsFactoryAccessible
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    TilesUtilStrutsImpl

    public TilesUtilStrutsImpl()
    Method Detail

    applicationClass

    public java.lang.Class applicationClass(java.lang.String className)
                                     throws java.lang.ClassNotFoundException
    Deprecated. Use RequestUtils.applicationClass() instead.

    Return the Class object for the specified fully qualified class name from the Struts class loader.

    Overrides:
    applicationClass in class TilesUtilImpl
    Parameters:
    className - Fully qualified class name to be loaded.
    Returns:
    Class object.
    Throws:
    java.lang.ClassNotFoundException - if the class cannot be found

    getDefinitionsFactory

    public DefinitionsFactory getDefinitionsFactory(javax.servlet.ServletContext servletContext,
                                                    ModuleConfig moduleConfig)
    Get definition factory for the module attached to the specified moduleConfig.

    Parameters:
    servletContext - Current servlet context
    moduleConfig - Module config of the module for which the factory is requested.
    Returns:
    Definitions factory or null if not found.


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/TilesUtilStrutsModulesImpl.html0000644000175000017500000006247510404045236032712 0ustar arnaudarnaud00000000000000 TilesUtilStrutsModulesImpl (Apache Struts API Documentation)

    org.apache.struts.tiles
    Class TilesUtilStrutsModulesImpl

    java.lang.Object
      |
      +--org.apache.struts.tiles.TilesUtilImpl
            |
            +--org.apache.struts.tiles.TilesUtilStrutsImpl
                  |
                  +--org.apache.struts.tiles.TilesUtilStrutsModulesImpl
    
    All Implemented Interfaces:
    java.io.Serializable

    public class TilesUtilStrutsModulesImpl
    extends TilesUtilStrutsImpl

    Implementation of TilesUtil for Struts multi modules. Methods in this implementation are aware of the Struts module context.

    • The method getFactory(...) returns the factory for the current Struts module.
    • Methods doForward() and doInclude() use their counterparts in the current RequestProcessor (todo).
    • The method createFactory(...) creates a factory for the current module and stores it under the appropriate property name.

    See Also:
    Serialized Form

    Field Summary
     
    Fields inherited from class org.apache.struts.tiles.TilesUtilImpl
    DEFINITIONS_FACTORY, log
     
    Constructor Summary
    TilesUtilStrutsModulesImpl()
               
     
    Method Summary
     void doForward(java.lang.String uri, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, javax.servlet.ServletContext servletContext)
              Do a forward using request dispatcher.
     void doInclude(java.lang.String uri, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, javax.servlet.ServletContext servletContext)
              Do an include using request dispatcher.
     DefinitionsFactory getDefinitionsFactory(javax.servlet.ServletContext servletContext, ModuleConfig moduleConfig)
              Get definition factory for the module attached to specified moduleConfig.
     DefinitionsFactory getDefinitionsFactory(javax.servlet.ServletRequest request, javax.servlet.ServletContext servletContext)
              Get the definition factory from appropriate servlet context.
    protected  ModuleConfig getModuleConfig(javax.servlet.http.HttpServletRequest request, javax.servlet.ServletContext servletContext)
              Get the current ModuleConfig.
    protected  TilesRequestProcessor getRequestProcessor(javax.servlet.http.HttpServletRequest request, javax.servlet.ServletContext servletContext)
              Get Tiles RequestProcessor associated to the current module.
    protected  void makeDefinitionsFactoryAccessible(DefinitionsFactory factory, javax.servlet.ServletContext servletContext)
              Make definition factory accessible to tags.
     
    Methods inherited from class org.apache.struts.tiles.TilesUtilStrutsImpl
    applicationClass
     
    Methods inherited from class org.apache.struts.tiles.TilesUtilImpl
    createDefinitionFactoryInstance, createDefinitionsFactory, doInclude
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    TilesUtilStrutsModulesImpl

    public TilesUtilStrutsModulesImpl()
    Method Detail

    doForward

    public void doForward(java.lang.String uri,
                          javax.servlet.http.HttpServletRequest request,
                          javax.servlet.http.HttpServletResponse response,
                          javax.servlet.ServletContext servletContext)
                   throws java.io.IOException,
                          javax.servlet.ServletException
    Do a forward using request dispatcher. This method is used by the Tiles package anytime a forward is required.

    Overrides:
    doForward in class TilesUtilImpl
    Parameters:
    uri - Uri or Definition name to forward.
    request - Current page request.
    response - Current page response.
    servletContext - Current servlet context.
    java.io.IOException
    javax.servlet.ServletException

    doInclude

    public void doInclude(java.lang.String uri,
                          javax.servlet.http.HttpServletRequest request,
                          javax.servlet.http.HttpServletResponse response,
                          javax.servlet.ServletContext servletContext)
                   throws java.io.IOException,
                          javax.servlet.ServletException
    Do an include using request dispatcher. This method is used by the Tiles package anytime an include is required.

    Overrides:
    doInclude in class TilesUtilImpl
    Parameters:
    uri - Uri or Definition name to forward.
    request - Current page request.
    response - Current page response.
    servletContext - Current servlet context.
    java.io.IOException
    javax.servlet.ServletException

    getDefinitionsFactory

    public DefinitionsFactory getDefinitionsFactory(javax.servlet.ServletRequest request,
                                                    javax.servlet.ServletContext servletContext)
    Get the definition factory from appropriate servlet context.

    Overrides:
    getDefinitionsFactory in class TilesUtilImpl
    Parameters:
    request - Current request.
    servletContext - Current servlet context.
    Returns:
    Definitions factory or null if not found.

    getDefinitionsFactory

    public DefinitionsFactory getDefinitionsFactory(javax.servlet.ServletContext servletContext,
                                                    ModuleConfig moduleConfig)
    Get definition factory for the module attached to specified moduleConfig.

    Overrides:
    getDefinitionsFactory in class TilesUtilStrutsImpl
    Parameters:
    servletContext - Current servlet context.
    moduleConfig - Module config of the module for which the factory is requested.
    Returns:
    Definitions factory or null if not found.

    makeDefinitionsFactoryAccessible

    protected void makeDefinitionsFactoryAccessible(DefinitionsFactory factory,
                                                    javax.servlet.ServletContext servletContext)
    Make definition factory accessible to tags. Factory is stored in servlet context.

    Overrides:
    makeDefinitionsFactoryAccessible in class TilesUtilImpl
    Parameters:
    factory - Factory to be made accessible.
    servletContext - Current servlet context.

    getRequestProcessor

    protected TilesRequestProcessor getRequestProcessor(javax.servlet.http.HttpServletRequest request,
                                                        javax.servlet.ServletContext servletContext)
    Get Tiles RequestProcessor associated to the current module.

    Parameters:
    request - Current request.
    servletContext - Current servlet context.
    Returns:
    The TilesRequestProcessor for the current request.

    getModuleConfig

    protected ModuleConfig getModuleConfig(javax.servlet.http.HttpServletRequest request,
                                           javax.servlet.ServletContext servletContext)
    Get the current ModuleConfig.
    Lookup in the request and do selectModule if not found. The side effect is, that the ModuleConfig object is set in the request if it was not present.

    Parameters:
    request - Current request.
    servletContext - Current servlet context*.
    Returns:
    The ModuleConfig for current request.


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/UntyppedAttribute.html0000644000175000017500000003762710404045230031063 0ustar arnaudarnaud00000000000000 UntyppedAttribute (Apache Struts API Documentation)

    org.apache.struts.tiles
    Class UntyppedAttribute

    java.lang.Object
      |
      +--org.apache.struts.tiles.UntyppedAttribute
    
    All Implemented Interfaces:
    AttributeDefinition, java.io.Serializable
    Direct Known Subclasses:
    DefinitionAttribute, DefinitionNameAttribute, DirectStringAttribute, PathAttribute

    public class UntyppedAttribute
    extends java.lang.Object
    implements AttributeDefinition

    Common implementation of attribute definition.

    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String role
              Role associated to this attribute.
    protected  java.lang.Object value
               
     
    Constructor Summary
    UntyppedAttribute(java.lang.Object value)
              Constructor.
    UntyppedAttribute(java.lang.Object value, java.lang.String role)
              Constructor.
     
    Method Summary
     java.lang.String getRole()
              Get role.
     java.lang.Object getValue()
              Get value.
     void setRole(java.lang.String role)
              Set role.
     void setValue(java.lang.Object value)
              Set value.
     java.lang.String toString()
              Get String representation of this object.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
     

    Field Detail

    role

    protected java.lang.String role
    Role associated to this attribute.


    value

    protected java.lang.Object value
    Constructor Detail

    UntyppedAttribute

    public UntyppedAttribute(java.lang.Object value)
    Constructor.

    Parameters:
    value - Object to store.

    UntyppedAttribute

    public UntyppedAttribute(java.lang.Object value,
                             java.lang.String role)
    Constructor.

    Parameters:
    value - Object to store.
    role - Asociated role.
    Method Detail

    getRole

    public java.lang.String getRole()
    Get role.


    setRole

    public void setRole(java.lang.String role)
    Set role.

    Specified by:
    setRole in interface AttributeDefinition
    Parameters:
    role - Associated role.

    getValue

    public java.lang.Object getValue()
    Get value.

    Specified by:
    getValue in interface AttributeDefinition

    setValue

    public void setValue(java.lang.Object value)
    Set value.

    Parameters:
    value - New value.

    toString

    public java.lang.String toString()
    Get String representation of this object.

    Overrides:
    toString in class java.lang.Object


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/UrlController.html0000644000175000017500000003113010404045172030161 0ustar arnaudarnaud00000000000000 UrlController (Apache Struts API Documentation)

    org.apache.struts.tiles
    Class UrlController

    java.lang.Object
      |
      +--org.apache.struts.tiles.UrlController
    
    All Implemented Interfaces:
    Controller

    public class UrlController
    extends java.lang.Object
    implements Controller

    Tiles controller including a local URL.

    Author:
    Cedric Dumoulin

    Field Summary
    protected  java.lang.String url
              Url associated with this controller.
     
    Constructor Summary
    UrlController(java.lang.String url)
              Constructor.
     
    Method Summary
     void perform(ComponentContext tileContext, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, javax.servlet.ServletContext servletContext)
              Method associated to a tile and called immediately before the tile is included.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    url

    protected java.lang.String url
    Url associated with this controller.

    Constructor Detail

    UrlController

    public UrlController(java.lang.String url)
    Constructor.

    Parameters:
    url - URL.
    Method Detail

    perform

    public void perform(ComponentContext tileContext,
                        javax.servlet.http.HttpServletRequest request,
                        javax.servlet.http.HttpServletResponse response,
                        javax.servlet.ServletContext servletContext)
                 throws javax.servlet.ServletException,
                        java.io.IOException
    Method associated to a tile and called immediately before the tile is included. This implementation calls a Struts Action. No servlet is set by this method.

    Specified by:
    perform in interface Controller
    Parameters:
    tileContext - Current tile context.
    request - Current request.
    response - Current response.
    servletContext - Current servlet context.
    javax.servlet.ServletException
    java.io.IOException


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/package-frame.html0000644000175000017500000000752010404045204030040 0ustar arnaudarnaud00000000000000 org.apache.struts.tiles (Apache Struts API Documentation) org.apache.struts.tiles
    Interfaces 
    AttributeDefinition
    ComponentDefinitionsFactory
    Controller
    DefinitionsFactory
    Classes 
    ActionComponentServlet
    ActionController
    ComponentContext
    ComponentDefinition
    ControllerSupport
    DefinitionAttribute
    DefinitionNameAttribute
    DefinitionsFactoryConfig
    DefinitionsUtil
    DefinitionsUtil.ServletPropertiesMap
    DirectStringAttribute
    EmptyIterator
    PathAttribute
    TilesPlugin
    TilesRequestProcessor
    TilesServlet
    TilesUtil
    TilesUtilImpl
    TilesUtilStrutsImpl
    TilesUtilStrutsModulesImpl
    UntyppedAttribute
    UrlController
    Exceptions 
    DefinitionsFactoryException
    FactoryNotFoundException
    NoSuchDefinitionException
    TilesException
    libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/package-summary.html0000644000175000017500000006701210404045204030445 0ustar arnaudarnaud00000000000000 org.apache.struts.tiles (Apache Struts API Documentation)

    Package org.apache.struts.tiles

    The Tiles taglib and framework allows building web pages by assembling reusable pieces of pages, called Tiles.

    See:
              Description

    Interface Summary
    AttributeDefinition Attribute definition used in a component definition.
    ComponentDefinitionsFactory Deprecated. Use DefinitionsFactory instead.
    Controller A controller is a piece of code called before rendering a jsp page.
    DefinitionsFactory Tiles Definition factory.
     

    Class Summary
    ActionComponentServlet Deprecated. Tiles now uses ActionServlet with TilesPlugin and TilesRequestProcessor.
    ActionController Struts wrapper implementation of Controller.
    ComponentContext Component context.
    ComponentDefinition Definition of a template / component attributes.
    ControllerSupport Basic implementation of Controller.
    DefinitionAttribute Attribute representing a Component Definition.
    DefinitionNameAttribute Component attribute.
    DefinitionsFactoryConfig A TilesFactoryConfig object hold configuration attributes for a tile definition factory.
    DefinitionsUtil Deprecated. Use TilesUtil.createDefinitionsFactory(ServletContext, DefinitionsFactoryConfig)
    DefinitionsUtil.ServletPropertiesMap Inner class.
    DirectStringAttribute Component attribute.
    EmptyIterator  
    PathAttribute Component attribute.
    TilesPlugin Tiles Plugin used to initialize Tiles.
    TilesRequestProcessor RequestProcessor contains the processing logic that the Struts controller servlet performs as it receives each servlet request from the container.
    TilesServlet Deprecated. Use the ActionServlet instead.
    TilesUtil Class containing utility methods for Tiles.
    TilesUtilImpl Default implementation of TilesUtil.
    TilesUtilStrutsImpl TilesUtil implementation for Struts 1.1 with one single factory.
    TilesUtilStrutsModulesImpl Implementation of TilesUtil for Struts multi modules.
    UntyppedAttribute Common implementation of attribute definition.
    UrlController Tiles controller including a local URL.
     

    Exception Summary
    DefinitionsFactoryException Exception thrown when an error occurs while the factory tries to create a new instance mapper.
    FactoryNotFoundException Exception thrown when definitions factory is not found.
    NoSuchDefinitionException Exception thrown when a definition is not found.
    TilesException Root class for all Tiles-exceptions.
     

    Package org.apache.struts.tiles Description

    The Tiles taglib and framework allows building web pages by assembling reusable pieces of pages, called Tiles. A Tiles is usually a simple JSP page. TagLib Tiles UML

    Introduction

    The Tiles framework allows building pages by assembling reusable Tiles. As an example, the page in the next figure can be build by assembling a header, a footer, a menu and a body.

    doc-files/image001

    Each Tiles (header, menu, body, ...) is a JSP page and can itself be build by assembling other Tiles.

    Using Tiles can be compared as using Java methods: You need to define the Tiles (the method body), and then you can "call" this body anywhere you want, passing it some parameters. In Tiles, parameters are called "attributes" in order to avoid confusion with the request parameters.

    The Tiles body can be a simple JSP page, a Struts action or any URI pointing to a resource inside the current web site.

    Inserting the body, or calling it, is done with the tag <tiles:insert ...> anywhere in a JSP page. Insertion can also be done by specifying a definition name as the path of a Struts forward or as input, forward or include attributes of a Struts action.

    Tiles bodies are used to create layouts, reusable parts, ... Tiles insertions are used to insert Tiles. The same Tiles can be reused several times in the same site, or even in the same page.

    Insertion of a Tiles body can be associated to a logical name in what Tiles calls a "definition". A definition contains a logical name, a page used as body and some attribute values. The definition declaration doesn't insert the associated Tiles body. It just associates it with the name. A definition name can be used anywhere insertion of a Tiles body can occur. The associated Tiles body is then inserted with associated attributes.

    The definition declarations can be done in JSP pages or in one or more centralized files. A definition can extend another one, overload some attributes, add new attributes ... This allows the declaration of a "master" definition declaring the common layout, header, menu and footer. All other definitions extend this master layout thereby making it possible to change the entire site look & feel simply by changing the master definition.

    Simple Examples

    Insert a JSP page

    <tiles:insert page="/layouts/commonLayout.jsp" flush="true" />
    

    This example inserts the specified page in place of the tag. The page attribute is any valid URL pointing to a resource inside the current site.

    Insert a Tiles passing some attributes

    <tiles:insert page="/layouts/classicLayout.jsp" flush="true">
      <tiles:put name="title"  value="Page Title" />
      <tiles:put name="header" value="/common/header.jsp" />
      <tiles:put name="footer" value="/common/footer.jsp" />
      <tiles:put name="menu"   value="/common/menu.jsp" />
      <tiles:put name="body"   value="/tiles/mainBody.jsp" />
    </tiles:insert>
    

    This example inserts the specified page, passing it the attributes. Attributes are stored in a Tiles context which is passed to the inserted pag and can then be accesssed by their names.

    Retrieve an attribute value as String

    <tiles:getAsString name="title" />
    

    This example retrieves the value of the attribute "title" and prints it as a String in the current output stream. The method toString() is applied on the attribute value, allowing to pass any kind of object as value.

    Insert Tiles referenced by an attribute

    <tiles:insert attribute='menu' />
    

    This inserts the Tiles referenced by the attribute "menu" value. The specified attribute value is first retrieved from current Tiles's context, and then the value is used as a page target to insert.

    Classic Layout

    This example is a layout assembling a page in the classic header-footer-menu-body fashion.

    <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
    <HTML>
      <HEAD>
        <link rel="stylesheet" href="<%=request.getContextPath()%>/layouts/stylesheet.css" 
                      type="text/css"/>
        <title><tiles:getAsString name="title"/></title>
      </HEAD>
    <body>
    <table border="0" width="100%" cellspacing="5">
    <tr>
      <td colspan="2"><tiles:insert attribute="header" /></td>
    </tr>
    <tr>
      <td width="140" valign="top">
        <tiles:insert attribute='menu' />
      </td>
      <td valign="top"  align="left">
        <tiles:insert attribute='body' />
      </td>
    </tr>
    <tr>
      <td colspan="2">
        <tiles:insert attribute="footer" />
      </td>
    </tr>
    </table>
    </body>
    </html>
    

    The layout is declared in a JSP page (ex: /layouts/classicLayout.jsp). It can be used in conjunction with the tag described in "Insert a page passing some attributes".

    Definitions

    A definition associates a logical name with the URL of a Tiles to be inserted and some attribute values. A definition doesn't insert the Tiles. This is done later using the definition name. A definition name can be inserted as often as you want in your site, making it easy to reuse a Tiles.

    A definition can extend another definition and overload some attributes or add new ones. This makes easy factorization of definitions differing by some attributes. For example, you can define a master definition declaring the main header, menu, footer, and a default title. Then let each of your page definitions extend this master definition and overload the title and the body.

    Definitions can be declared in a JSP page, or in one or more centralized files. To enable the definitions from centralized files, you need to initialize the "definitions factory" which will parse the definitions from the files and provide them to the Tiles framework.

    Enabling Definition Factory

    To enable Tiles definitions described in one or more files, you need to write these files and to initialize the definition factory.

    Initialization is different depending on the Struts version you use, or if you do not use Struts at all.

    Struts1.1

    Use the Tiles plug-in to enable Tiles definitions. This plug-in creates the definition factory and passese it a configuration object populated with parameters. Parameters can be specified in the web.xml file or as plug-in parameters. The plug-in first reads parameters from web.xml, and then overloads them with the ones found in the plug-in. All parameters are optional and can be omitted. The plug-in should be declared in each struts-config file:

      <plug-in className="org.apache.struts.tiles.TilesPlugin" >
        <set-property property="definitions-config" 
    	                 value="/WEB-INF/tiles-defs.xml,
                                /WEB-INF/tiles-tests-defs.xml,/WEB-INF/tiles-tutorial-defs.xml,
                                /WEB-INF/tiles-examples-defs.xml" />
        <set-property property="moduleAware" value="true" />
        <set-property property="definitions-parser-validate" value="true" />
      </plug-in>
    
    • definitions-config: (optional)
      • Specify configuration file names. There can be several comma separated file names (default: ?? )
    • definitions-parser-validate: (optional)
      • Specify if XML parser should validate the Tiles configuration file
        • true : validate. DTD should be specified in file header (default)
        • false : no validation
    • moduleAware: (optional)
      • Specify if the Tiles definition factory is module aware. If true (default), there will be one factory for each Struts module. If false, there will be one common factory for all module. In this later case, it is still needed to declare one plugin per module. The factory will be initialized with parameters found in the first initialized plugin (generally the one associated with the default module).
        • true : Tiles framework is module aware
        • false :Tiles framework has one single factoy shared among modules (default)
    • tilesUtilImplClassname: (optional - for advanced user)
      • Specify The classname of the TilesUtil implementation to use. The specified class should be a subclass of TilesUtilStrutsImpl. This option disable the moduleAware option.
        Specifying "TilesUtilStrutsImpl" is equivalent to moduleAware = false.

        Specifying "TilesUtilStrutsModuleImpl" is equivalent to moduleAware = true.
        This option is taken into account only once, when it is first encountered. To avoid problems, it is advice to specify the same values in all TilesPlugin declaration.

    The TilesPlugin class creates one definition factory for each struts module.

    If the flag moduleAware is false, only one shared factory is created for all modules. In this later case, the factory is initialized with parameters found in the first plugin. The plugins should be declared in all modules, and the moduleAware flag should be the same for the entire application.

    Paths found in Tiles definitions are relative to the main context.

    You don't need to specify a TilesRequestProcessor, this is automatically done by the plug-in. If, however, you want to specify your own RequestProcessor, it should extend the TilesRequestProcessor. The plug-in checks this constraint.

    Struts1.0.x

    You need to use a special servlet extending the Struts servlet. This is specified in the web.xml file of your application:

      <servlet>
        <servlet-name>action</servlet-name>
    	<servlet-class>org.apache.struts.tiles.ActionComponentServlet</servlet-class>   
            <!-- Tiles Servlet parameter 
    		  Specify configuration file names. There can be several comma 
    		  separated file names
    		--> 	
    	<init-param>
          <param-name>definitions-config</param-name>
          <param-value>/WEB-INF/tiles-defs.xml</param-value>
        </init-param>
            <!-- Tiles Servlet parameter 
    		Specify if XML parser should validate the Tiles configuration file(s).
    		true : validate. DTD should be specified in file header.
    		false : no validation
    		--> 	
        <init-param>
          <param-name>definitions-parser-validate</param-name>
          <param-value>true</param-value>
        </init-param>
         ...
      </servlet>
    

    Without Struts

    Tiles can be used without Struts. To initialize the definition factory, you can use the provided servlet. Declare it in the web.xml file of your application:

      <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.apache.struts.tiles.TilesServlet</servlet-class>
    
    
    	<init-param>
          <param-name>definitions-config</param-name>
          <param-value>/WEB-INF/tiles-defs.xml</param-value>
        </init-param>
        <init-param>
          <param-name>definitions-parser-validate</param-name>
          <param-value>true</param-value>
        </init-param>
       ...
    

    The parameters are the same as for Struts1.1 or 1.0.

    Definition File Syntax

    The definition file syntax can be found in the tiles-config_1_1.dtd file.

    Following is a simple example:

    <!DOCTYPE tiles-definitions PUBLIC
           "-//Apache Software Foundation//DTD Tiles Configuration//EN"
           "http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd">
    
    <!-- Definitions for Tiles documentation   -->
    <tiles-definitions>
    
      <!-- ========================================================== -->
      <!-- Master definition                                          -->
      <!-- ========================================================== -->
      <!-- Main page layout used as a root for other page definitions -->
    
      <definition name="site.mainLayout" path="/layouts/classicLayout.jsp">
    	  <put name="title"  value="Tiles Blank Site" />
    	  <put name="header" value="/tiles/common/header.jsp" />
    	  <put name="menu"   value="site.menu.bar" />
    	  <put name="footer" value="/tiles/common/footer.jsp" />
    	  <put name="body"   value="/tiles/body.jsp" />
      </definition>
    
      <!-- ========================================================== -->
      <!-- Index page definition                                      -->
      <!-- ========================================================== -->
        <!-- This definition inherits from the main definition.
    	  It overloads the page title and the body used.
    	  Use the same mechanism to define new pages sharing common 
    	  properties (here header, menu, footer, layout)
    	-->
    
      <definition name="site.index.page" extends="site.mainLayout" >
    	  <put name="title"  value="Tiles Blank Site Index" />
    	  <put name="body"   value="/tiles/body.jsp" />
      </definition>
    
    </tiles-definition>
    

    Debugging

    To debug a page made of Tiles, you can use following advices:

    • Check each Tiles separatly. Try to access nested Tiles directly to test if thes work properly.
    • Enable Tiles logging. See the commons-logging package help.



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/package-tree.html0000644000175000017500000002756710404045222027722 0ustar arnaudarnaud00000000000000 org.apache.struts.tiles Class Hierarchy (Apache Struts API Documentation)

    Hierarchy For Package org.apache.struts.tiles

    Package Hierarchies:
    All Packages

    Class Hierarchy

    Interface Hierarchy



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/tiles/package-use.html0000644000175000017500000005045310404045204027545 0ustar arnaudarnaud00000000000000 Uses of Package org.apache.struts.tiles (Apache Struts API Documentation)

    Uses of Package
    org.apache.struts.tiles

    Packages that use org.apache.struts.tiles
    org.apache.struts.taglib.tiles The "struts-tiles" tag library contains tags that are useful in creating dynamic reusable components. 
    org.apache.struts.taglib.tiles.util   
    org.apache.struts.tiles
    The Tiles taglib and framework allows building web pages by assembling reusable pieces of pages, called Tiles. 
    org.apache.struts.tiles.actions   
    org.apache.struts.tiles.definition   
    org.apache.struts.tiles.xmlDefinition   
     

    Classes in org.apache.struts.tiles used by org.apache.struts.taglib.tiles
    AttributeDefinition
              Attribute definition used in a component definition.
    ComponentContext
              Component context.
    ComponentDefinition
              Definition of a template / component attributes.
    Controller
              A controller is a piece of code called before rendering a jsp page.
     

    Classes in org.apache.struts.tiles used by org.apache.struts.taglib.tiles.util
    ComponentDefinition
              Definition of a template / component attributes.
     

    Classes in org.apache.struts.tiles used by org.apache.struts.tiles
    AttributeDefinition
              Attribute definition used in a component definition.
    ComponentContext
              Component context.
    ComponentDefinition
              Definition of a template / component attributes.
    ComponentDefinitionsFactory
              Deprecated. Use DefinitionsFactory instead.
    Controller
              A controller is a piece of code called before rendering a jsp page.
    DefinitionsFactory
              Tiles Definition factory.
    DefinitionsFactoryConfig
              A TilesFactoryConfig object hold configuration attributes for a tile definition factory.
    DefinitionsFactoryException
              Exception thrown when an error occurs while the factory tries to create a new instance mapper.
    FactoryNotFoundException
              Exception thrown when definitions factory is not found.
    NoSuchDefinitionException
              Exception thrown when a definition is not found.
    TilesException
              Root class for all Tiles-exceptions.
    TilesRequestProcessor
              RequestProcessor contains the processing logic that the Struts controller servlet performs as it receives each servlet request from the container.
    TilesUtil
              Class containing utility methods for Tiles.
    TilesUtilImpl
              Default implementation of TilesUtil.
    TilesUtilStrutsImpl
              TilesUtil implementation for Struts 1.1 with one single factory.
    UntyppedAttribute
              Common implementation of attribute definition.
     

    Classes in org.apache.struts.tiles used by org.apache.struts.tiles.actions
    ComponentContext
              Component context.
     

    Classes in org.apache.struts.tiles used by org.apache.struts.tiles.definition
    ComponentDefinition
              Definition of a template / component attributes.
    ComponentDefinitionsFactory
              Deprecated. Use DefinitionsFactory instead.
    DefinitionsFactory
              Tiles Definition factory.
    DefinitionsFactoryConfig
              A TilesFactoryConfig object hold configuration attributes for a tile definition factory.
    DefinitionsFactoryException
              Exception thrown when an error occurs while the factory tries to create a new instance mapper.
    FactoryNotFoundException
              Exception thrown when definitions factory is not found.
    NoSuchDefinitionException
              Exception thrown when a definition is not found.
     

    Classes in org.apache.struts.tiles used by org.apache.struts.tiles.xmlDefinition
    ComponentDefinition
              Definition of a template / component attributes.
    ComponentDefinitionsFactory
              Deprecated. Use DefinitionsFactory instead.
    DefinitionsFactoryException
              Exception thrown when an error occurs while the factory tries to create a new instance mapper.
    NoSuchDefinitionException
              Exception thrown when a definition is not found.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/0000755000175000017500000000000010423130301024621 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/class-use/0000755000175000017500000000000010423130301026520 5ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000015410423140533011317 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/class-use/BufferedMultipartInputStream.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/class-use/BufferedMultipartInputStre0000644000175000017500000001277210404045174033772 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.upload.BufferedMultipartInputStream (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.upload.BufferedMultipartInputStream

    No usage of org.apache.struts.upload.BufferedMultipartInputStream



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000017610423140533011323 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/class-use/CommonsMultipartRequestHandler.CommonsFormFile.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/class-use/CommonsMultipartRequestHan0000644000175000017500000001321210404045214033766 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.upload.CommonsMultipartRequestHandler.CommonsFormFile (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.upload.CommonsMultipartRequestHandler.CommonsFormFile

    No usage of org.apache.struts.upload.CommonsMultipartRequestHandler.CommonsFormFile



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015610423140533011321 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/class-use/CommonsMultipartRequestHandler.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/class-use/CommonsMultipartRequestHan0000644000175000017500000001301210404045240033763 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.upload.CommonsMultipartRequestHandler (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.upload.CommonsMultipartRequestHandler

    No usage of org.apache.struts.upload.CommonsMultipartRequestHandler



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015610423140533011321 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/class-use/ContentLengthExceededException.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/class-use/ContentLengthExceededExcep0000644000175000017500000001301210404045244033642 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.upload.ContentLengthExceededException (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.upload.ContentLengthExceededException

    No usage of org.apache.struts.upload.ContentLengthExceededException



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/class-use/DiskFile.html0000644000175000017500000001253210404045230031110 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.upload.DiskFile (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.upload.DiskFile

    No usage of org.apache.struts.upload.DiskFile



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015310423140533011316 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/class-use/DiskMultipartRequestHandler.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/class-use/DiskMultipartRequestHandle0000644000175000017500000001276210404045222033742 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.upload.DiskMultipartRequestHandler (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.upload.DiskMultipartRequestHandler

    No usage of org.apache.struts.upload.DiskMultipartRequestHandler



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/class-use/FormFile.html0000644000175000017500000001672510404045240031132 0ustar arnaudarnaud00000000000000 Uses of Interface org.apache.struts.upload.FormFile (Apache Struts API Documentation)

    Uses of Interface
    org.apache.struts.upload.FormFile

    Packages that use FormFile
    org.apache.struts.upload The upload package facilities to upload files using multi-part requests. 
     

    Uses of FormFile in org.apache.struts.upload
     

    Classes in org.apache.struts.upload that implement FormFile
    (package private) static class CommonsMultipartRequestHandler.CommonsFormFile
              This class implements the Struts FormFile interface by wrapping the Commons FileUpload FileItem interface.
     class DiskFile
               
     



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015210423140533011315 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/class-use/MaxLengthExceededException.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/class-use/MaxLengthExceededException0000644000175000017500000001275210404045230033654 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.upload.MaxLengthExceededException (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.upload.MaxLengthExceededException

    No usage of org.apache.struts.upload.MaxLengthExceededException



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015410423140533011317 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/class-use/MultipartBoundaryInputStream.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/class-use/MultipartBoundaryInputStre0000644000175000017500000001655710404045236034037 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.upload.MultipartBoundaryInputStream (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.upload.MultipartBoundaryInputStream

    Packages that use MultipartBoundaryInputStream
    org.apache.struts.upload The upload package facilities to upload files using multi-part requests. 
     

    Uses of MultipartBoundaryInputStream in org.apache.struts.upload
     

    Fields in org.apache.struts.upload declared as MultipartBoundaryInputStream
    protected  MultipartBoundaryInputStream MultipartIterator.inputStream
              The InputStream to use to read the multipart data.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/class-use/MultipartElement.html0000644000175000017500000002374110404045220032714 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.upload.MultipartElement (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.upload.MultipartElement

    Packages that use MultipartElement
    org.apache.struts.upload The upload package facilities to upload files using multi-part requests. 
     

    Uses of MultipartElement in org.apache.struts.upload
     

    Methods in org.apache.struts.upload that return MultipartElement
     MultipartElement MultipartIterator.getNextElement()
              Retrieves the next element in the iterator if one exists.
    protected  MultipartElement MultipartIterator.createTextMultipartElement(java.lang.String encoding)
              Create a text element from the data in the body of the element.
    protected  MultipartElement MultipartIterator.createFileMultipartElement()
              Create a multipart element instance representing the file in the stream.
     

    Methods in org.apache.struts.upload with parameters of type MultipartElement
    protected  void DiskMultipartRequestHandler.createTextElement(javax.servlet.http.HttpServletRequest request, MultipartElement element)
               
    protected  void DiskMultipartRequestHandler.createDiskFile(MultipartElement element)
               
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/class-use/MultipartIterator.html0000644000175000017500000001264210404045244033120 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.upload.MultipartIterator (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.upload.MultipartIterator

    No usage of org.apache.struts.upload.MultipartIterator



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000014710423140533011321 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/class-use/MultipartRequestHandler.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/class-use/MultipartRequestHandler.ht0000644000175000017500000003615010404045250033721 0ustar arnaudarnaud00000000000000 Uses of Interface org.apache.struts.upload.MultipartRequestHandler (Apache Struts API Documentation)

    Uses of Interface
    org.apache.struts.upload.MultipartRequestHandler

    Packages that use MultipartRequestHandler
    org.apache.struts.action The action package is the core of the struts framework, providing the "Controller" aspect of a MVC model. 
    org.apache.struts.upload The upload package facilities to upload files using multi-part requests. 
    org.apache.struts.util The Utilities package provides a variety of families of classes, to solve problems that are commonly encountered in building web applications. 
     

    Uses of MultipartRequestHandler in org.apache.struts.action
     

    Fields in org.apache.struts.action declared as MultipartRequestHandler
    protected  MultipartRequestHandler ActionForm.multipartRequestHandler
              The MultipartRequestHandler for this form, can be null.
     

    Methods in org.apache.struts.action that return MultipartRequestHandler
     MultipartRequestHandler ActionForm.getMultipartRequestHandler()
              Return the MultipartRequestHandler for this form The reasoning behind this is to give form bean developers control over the lifecycle of their multipart requests through the use of the finish() and/or rollback() methods of MultipartRequestHandler.
     

    Methods in org.apache.struts.action with parameters of type MultipartRequestHandler
     void ActionServletWrapper.setServletFor(MultipartRequestHandler object)
              Set servlet to a MultipartRequestHandler.
     void ActionForm.setMultipartRequestHandler(MultipartRequestHandler multipartRequestHandler)
              Set the Handler provides to use in dealing with file uploads.
     

    Uses of MultipartRequestHandler in org.apache.struts.upload
     

    Classes in org.apache.struts.upload that implement MultipartRequestHandler
     class CommonsMultipartRequestHandler
              This class implements the MultipartRequestHandler interface by providing a wrapper around the Jakarta Commons FileUpload library.
     class DiskMultipartRequestHandler
              This is a MultipartRequestHandler that writes file data directly to to temporary files on disk.
     

    Uses of MultipartRequestHandler in org.apache.struts.util
     

    Methods in org.apache.struts.util that return MultipartRequestHandler
    private static MultipartRequestHandler RequestUtils.getMultipartHandler(javax.servlet.http.HttpServletRequest request)
              Try to locate a multipart request handler for this request.
     

    Methods in org.apache.struts.util with parameters of type MultipartRequestHandler
    private static java.util.Map RequestUtils.getAllParametersForMultipartRequest(javax.servlet.http.HttpServletRequest request, MultipartRequestHandler multipartHandler)
              Create a map containing all of the parameters supplied for a multipart request, keyed by parameter name.
     



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000014710423140533011321 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/class-use/MultipartRequestWrapper.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/class-use/MultipartRequestWrapper.ht0000644000175000017500000001766010404045212033767 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.upload.MultipartRequestWrapper (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.upload.MultipartRequestWrapper

    Packages that use MultipartRequestWrapper
    org.apache.struts.config The "config" package contains configuration objects that correspond to elements that may be specified in the struts-config.xml module configuration file. 
     

    Uses of MultipartRequestWrapper in org.apache.struts.config
     

    Methods in org.apache.struts.config that return MultipartRequestWrapper
     MultipartRequestWrapper ConfigHelper.getMultipartRequestWrapper()
              The multipart object for this request.
     MultipartRequestWrapper ConfigHelperInterface.getMultipartRequestWrapper()
              The multipart object for this request.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/class-use/MultipartValueStream.html0000644000175000017500000001267210404045224033560 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.upload.MultipartValueStream (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.upload.MultipartValueStream

    No usage of org.apache.struts.upload.MultipartValueStream



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/doc-files/0000755000175000017500000000000010423130301026466 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/doc-files/uploadUML.jpg0000644000175000017500000016016610404045226031056 0ustar arnaudarnaud00000000000000ÿØÿàJFIF,,ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀÅ "ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷ú(®OÃZf»s£i†©â]d]Éo ÷Vr[Ú¢‡*ã#È£9È#×<ÐYEgêzuÕÿ•ömfûMÙßdHÌÎ1Ÿ67éŽØêsž1&›e=»Eq©Ýê\°–ébVåZ ÇéžO=0rŠÃƒBÔa¸ŠWñf³:#†h¤ŠÌ+€~éÛ8=8 úW5=:êÿÊû6³}¦ìÎï²$ ægÏ›ôÇlu9ÏТ©é¶SØÛ´WÞ åË n–%`0>Qå¢ qž™äóÓðhZŒ7Jþ,ÖgDpÍ‘Y…pÝ;`§B(rŠÏÔôë«ÿ+ìÚÍö›³;¾È7™œc>loÓ±Ôç Q†â)_ÅšÌ莢’+0®û§làôàƒèEnQYúžuå}›Y¾ÓvgwÙó3ŒgÍúc¶:œçŒI¦ÙOcnÑ\jwzƒ—,%ºX•€ÀùG–ˆ1Æzg“ÏL\¢°àеn"•üY¬Îˆáš)"³ àºvÀN>„UÍONº¿ò¾Í¬ßi»3»ì‰y™Æ3æÆý1ÛNsÆ4(ªzm”ö6íƧw¨9rÂ[¥‰X ”yhƒg¦y<ôÆ|£ ÄR¿‹5™Ñ3E$Va\÷NØÁéÁЊܢ³õ=:êÿÊû6³}¦ìÎï²$ ægÏ›ôÇlu9Ï“M²žÆÝ¢¸Ôîõ.XKt±+ò-cŒôÏ'ž˜¹EaÁ¡j0ÜE+ø³YÃ4REfÀ?t퀜}£Ä«©¤V7Z]ÝÜoí²Ko QºÍÏÉ¿r3¨\åJã’zp¹EPEPEPEPEPEPEP÷^*[‰VßFѤ€9¼š´¨Ì¹à•ÄŽÙ8õ5¡©I©En­¥ÚZ\ϼK«–BàòcrNqÆ;žx盳¼¿ðÿ„îgJžæsªßYîæerB¤ˆÙܧrÂÇöÝå§…ÿµ­® ñÍ/Ë-‚·UÎÓ´D&¨+ƒ#oc©€dÚľoöµ®1åý’ñî7uÎwD˜íÓ9ÉéŽiÏu⥸•mômH‘É«JŒËž Ql@8í“S\þ½¶¹à«I¯ïtÝ~)µ‹I¡ ¸î(™c~6—,Ä–qÑa¼K¯Eªjm=¾šš}ޱo§лË2ÏämÇ ùá »”ùvï`£R“RŠÝ[K´´¹Ÿx —W-…Áä2ÆäœãŒw<ñÌzdÚľoöµ®1åý’ñî7uÎwD˜íÓ9ÉéŽx»MwÄzw†!U1ꚥö»}g $êÕ$¸còI:†BÀ1v©Qólùô4MkÅúž½&a¦é‰mooq.òÓK"¼“!QöF\E¸|òlà3qر=׊–âU·Ñ´i Do&­*3.x%E±ã¶N=MhjRjQ[«iv–—3ï’êå P¸<†XÜ“œqŽçž9ó=)o´ë‰5©®´¦Õî.õ µÅ£\ÜܼqÝeh¢”³Æ6F‰ ¨Ÿ6üŽ£Oñ&±â²>“®t«MNHnÕäó~Ñæb!"•òñ弫çp;~\0A¦M¬KæÿkXØÚã_Ù/ãw\çtIŽÝ3œž˜æœ÷^*[‰VßFѤ€9¼š´¨Ì¹à•ÄŽÙ8õ5—'ˆ|E7‹îltíÏÓ,®âµ¸“ŒïŽ9üÃ2²íYAÚ"}Û1¸nù,húÝã룛ˆ5ˆbÞ²_Ú¡SnËÇ—>”d¶²¶\~åW,75)5(­Õ´»KK™÷€ÉurÐ(\C,nIÎ8ÇsÏǤÜê—Oý­§Ae4rìŒAu礩µNðÅŽK. »ž„V>­Þ>¸ú9¸ƒX†-ë%ýª6ì¼ysàyFA»k+eÇîUrÃSJÔ¦¾ÔuËyV0–«oPrTÛÃ.[ž»¤aÆ8ê@5+‹ñ÷ÄÍÀñ­à’ëP ²„ÄpÎOÜBÃäõÀ88í+ÅþÙ§‹¼iâ_ˆ×GÍó.ÞÓOYQCÄ€/,Àa Ýóœä€Xÿ„Çã©þ™¤øÆÖÆOõpßˉ—Û¤ŒõŒ à޽Iÿ Ç?ú4?ûü¿ü‘]ëxÆËO½[~7Ñçs¶)nú4ÇîM÷sÁù[k³SÞø– f; B¨1´¬äŸõ`¼`r>ðÇ|{JçÿÂCñÏþ„Íþÿ/ÿ$Qÿ Ç?ú4?ûü¿ü‘]5¿Å¯ Ïr!sy9ýä°áF>„ŸNÝÅtzŠt-Q¬õ[Yw’|À¬q׃ƒYº°NÍÙùètÕÀâh«Ô¦Òô<ÛþŽô&h÷ùù"øH~9ÿЙ¡ÿßåÿäŠö +C”ñÿøH~9ÿЙ¡ÿßåÿäŠ?á!øçÿBf‡ÿ—ÿ’+Ø( ÿ„‡ãŸý šýþ_þH£þŽô&h÷ùù"½‚ŠñÿøH~9ÿЙ¡ÿßåÿäŠ?á!øçÿBf‡ÿ—ÿ’+Ø( ÿ„‡ãŸý šýþ_þH£þŽô&h÷ùù"»;â†5O°µ­ôþMü¾E­ÄÖ3Å Òsò,® ¬ÎI×Q@?ÿ Ç?ú4?ûü¿ü‘Gü$?ÿèLÐÿïòÿòEzÄ×±Aymjé9’ãvÂ; Ú2w8SÛqè2jÅxÿü$?ÿèLÐÿïòÿòEðüsÿ¡3Cÿ¿ËÿÉꚎ«c¤¥»ßÜǸ¸ŽÖÝd•Ûj¢Ž¤“ùIÀÕÊñÿøH~9ÿЙ¡ÿßåÿäŠ?á!øçÿBf‡ÿ—ÿ’+Ø+ûÅNy%µÄÓ†‹|±ÚK$0dûÙUJG…!ŽöRàhÍÿá!øçÿBf‡ÿ—ÿ’(ÿ„‡ãŸý šýþ_þH¯X·¾·»žî$ß%¤¢ÆÒ69Ezü®§_\ÕŠñÿøH~9ÿЙ¡ÿßåÿäŠ?á!øçÿBf‡ÿ—ÿ’+Ö,/­õ=:ÚþÎO2Öê$šÚFä` œFAk?Y¾¸´Õ|= lŽïPxgAÞ‚Öyç§ÌŠxôôÍy¿ü$?ÿèLÐÿïòÿòEðüsÿ¡3Cÿ¿ËÿÉêkzu¾¹m¢ÍqåßÝDÓ[ÆèÀJ«÷‚±Y‡R îœcš4ýoNÕo/íln<ù4ùD%¶$˜É@øÚÌ;€I\ààЗÿÂCñÏþ„Íþÿ/ÿ$Qÿ Ç?ú4?ûü¿ü‘^ÁQÏ2Û[Ë;‰ F…ØG;xU±ö“Ú€<þŽô&h÷ùù"øH~9ÿЙ¡ÿßåÿäŠõÈ&[›x§A I:‰#d`Ï*À>Ä;Ô”ãÿðüsÿ¡3Cÿ¿ËÿÉÂCñÏþ„Íþÿ/ÿ$W°Q@?ÿ Ç?ú4?ûü¿ü‘Gü$?ÿèLÐÿïòÿòEzÄ7Ö÷—6±I¾km¢`á …-Óv0Jç 2’eÉ5õ¼–Ö’Iþ‘s¸ÅRÄ…f8è£ 8eË@<ŸþŽô&h÷ùù"øH~9ÿЙ¡ÿßåÿäŠö (Çÿá!øçÿBf‡ÿ—ÿ’*9¾'xÿÂH.¼màxÆžî Üé²ä@»€bøiNåÚ“'#'·²Q@þñ>—âí_HŸÍ·“†VáâqÕva‘ù‚ ±^/á«4ðÇíCÃöçn™â+CwmH¸‰Áv¸UvÎ.xdÎzh ³ô-OûoÃÚf­äù?n´ŠçÊÝ»fô ·8Æqœ ЪzN›£Xéví#Aeo¼m!Š¢…àœA@(¢£†xnP¼Ç*d,ŒV*ÃŽáv Š’Š( Š( Š( O_³¾“Tiu {½GÃûm,eÚPÿ– N˜Ý•Áƒ*ù FâköwÒj.¡ow¨ø`Í¥Œ»Jâ2ÄiÓ²¡Ø0e_!ˆÜzˆç†g™"–7x_dª¬ FÚ èv²œÄõ%yŸŒµ›k[ß,äv7ðxrÙ‘¢¸E•^ä…É™"sûÕÁ”Öˆ/´‡’÷LÉugèÚ‹JÚ© ™/6Ë.äaµ<³ m\F›‘•TkÖðµÃÛ¬±™ÑÞ0Ãr«‘ÔU€=öŸJ’€<¿R¿žçÅW—70þÂ%„ÙÛË «9µ0ÄÏ"Âòöå¦ ò@þ^×$ÉMÿ³%øIáýSTñ ÜÒ^ÜiM=Ôú´ˆ ¬Ñ‰mpªQ|Ìà˜÷±.›‡®U;Í[MÓî-mïu Kiîße´sL¨Ó6@ÂrÇ,¨õ ;ƒ]‹LñÞ™bºŸ”²êXÍþ¶ò\²¥†µqµ"Ù(%Ü$“+fÆ•©;x6öëLÕ¯®¼T4I&¼³YšçɽòÁÃDÛ„ 7Ì66Ï—¼VÓfÕ&ÒâÔ-P…7Ëh³)•ŽY3>eäŽãÖ®P›é0Ú˧]Çý­?Šáób6Ë£¼û­æÄ›ŠÝÉrû§ <Ôp1™°û’Yß/†¡‡Ä6÷zµÿÚ3éÒí>zˆNÝù|D6·—ó—é/¯ìôË9//îà´µæžA.H,x$Æ‹;û=B#-•Ü1¹xdå¼Ueaꆀ)èjöúZÇ­\Çqw¼ÊÁˆ^ÁR0ǯ"4À `Yµ(¨çžn.%Ž"BòI#TP2I'€ç4%V^¥â]F¸[}S[Ólgd±Ý]$LW$d ã ŒûÔ¢£‚xn­â¸·–9 •Ç$l]HÈ Ž#œÔ”QEV~³©ÿdXÇsäù»îí­¶îÛ:d‹vpzoÎ;ãu­ §©é°ê¶©o;H¨—\„º)VUƒÆäûg§Z¹EPEPEPEPEPEPEP~©ÿkØÉsäù[.îm¶îÝŸ&g‹vp:ìÎ;gõ«‘Á /3Åhó>ùYTí´.[ÔíU=€ª¾™¦Ã¥Z½¼ ##ÜOpKNéeiXpœí޽k/Æ>%ðõõêC<·Ii4¶álæš=è™cFEÎ9b¼gž.jžÓ5‹v‚î á.œÛO%»<¨Gf”±Sã H6ã €0>Dãä\jiºœ­»OoÚ"¹B.­%·làERG=q޾†¼ÿÂö2Þê¿f–/Æ^ÞÈš›ë3<-ïv¤; ¬)•;ÕIØÝËÃþ %Ê­¤ˆ÷ róGq*ʲv%$ ¾1™$ùPûÇãçlɦx_IÑõoìaž;‰bÈZîWWPKd«1RÛ‹1ln,îI%ØœôñeÃ^!W™cqwscjÑ\<³À%,6 ФÁ Vóðd.NÜû_ë7VÚx[ä×v‹Qý ™Œ˜\Ëòü«òdÜJn$+lEའ5¶‰/£U–I–TÔ®DÁ¤ Ⱦfý¬À1]ÛK ÄgšÁZ vv¶‹k8·¶ˆ@±ý²lI$ˆ¥ùÿ{ÜÀ#îP€*¯‰¦Õ^ÞÒïK’ÖÒúâãLó¢¼;þÓËælÚ~æ@²e_ |ŠêçüÍæ›§jSYøn-tËkÏ2ãVy£ÔÞH¤ ª+FB°ÉB .B¼ÜMáí2ãTŒHgÞ²2 äHë®ñØî6®”‘±0~UÆ„Cko½¼QÃH8ãPªŠpb¼ïMñSØAu¬·Û§µŸDÑçµ°’fŸÉ’áæŒ(`¥ß-°³áÜóÃaV» ëSëšt“ÜéÓØÍ¦&Ic•ø <Øãr¸ld¢üÁ€È H †ÖÞ+{x£†$qÆ¡U à8ÅW²†Æ+­Eí fynÞm“qùQ¨Ü3òŸ-cãŽ0{äܬ}ÆâÓUñ ÓDz;½A&€îz X#'ŽŸ20çÓÓ±^?û8ÿÉ<Ô?ì+'þŠŠ½‚¼öqÿ’y¨ØVOýzž¯mgy¤ÜÁd·¶ÎŸ=»Cæ‰;·¿8ÿëWÏz·†/,-[QÑî&Òl­íÙ ´’cq™¾B³“Û¡¯¤jŽ¡£iúžŸ-Õ¬o P¸éÐŒt#µT'ÈÔ­{ÑpS^Òü·ÖÛŸ&©«XÆ«qlÒÂùÓœŽØºŽ~•vßÄöy&n”{;“Þ½ƒYø=sñ¤Ýù°1æ)ºªñÐ÷à{~5Áj¾¼µ.ºž„ß»'i •'àýs^çö¾ ºåÅE-¾(¦¾RŽšy¦Ï«Áº²VÁâSò–ÿç÷Ò¼³øCáUoÏßÛpͮۋ#çOj—ñ,@o•@d!pÜ`ã½âŠÜƒçGÒµ¨uÝ.ÚÊÚîÉî¯|Hú ›vŽ'¶-ˆÛL#~H.3ž3ššóx3U=ž¥ÛxrÚÚæÒÛH}=%J¬á‹Éºâ}‚U,©† Œå¶Ÿ þÁgý£ý£öH>ÝåyiòÇ™åçvÍÝvçœtÍX ñ7†´mF++ÍÁ—ÐØÙø‚ÎkÑ&œè’Á·˜m[çÛ,>ØÆý üÛ ‘áXtè¶ÿ³´‹í7~«;Ü}­~Ó1ÛºhòÇ1·#ƒÀ®‚Š+ƒ¹Mfæ;m;RŠþúôE¨XËo$Ö–û–##ÈÉå)û2ïIl#‡#mw”P™ØxjÓVñ‹Ka6±}}~ÿexc›ÉÚ‰ÀÞ’Ç?šNY\ùÃ;¯0ԦђÝt ¹'±MSWš;«6x$º‘fbƒ(ÍÙ×åFvç-³Õ( /ƒDŠÃQÐíô>ù~ÁöH,’æÉü·µÊ¼×b¢}šàî”:³0Gµ£mê+°ñü‡<'ÿaY?ôŠêº çüCÿ!Ï ÿØVOý"º  ˆÖ‘ÿ`ø›L´žæûCÔGŽÚ3,ÒZÉû¹Ò8ù ÄëŒ$^~|'­Ûi> »Ô¬¼ÿµÝÞêZâ˧K}Úg14¶‰µ·ù>P6}~ox¢€<_Àž¸ƒÆº êÚmõÝ­Ÿ†±Ϋd¡”^3Æ¿yÄr*… ¹W/ b[xwU²}fÒ×AÔ¯„Úf¬öîÊKkè]Õ€ŽY˜¯C°R¤9mÃhP+è:(çKŸ kÇF¿…ôMIõ©tÍ 4þÊìÖ­ ˜,¸Å± °fO^ù­x|7ªÛê‡S‡KÔ’ðüBi«€­“g{ŽÂ& ÆCcÝ( Á0éÖþ±‹IÒ/´‹ó<»ôeš/Þ6wf<œ°É<]P/áK´[=Vqi=´wš¬…`1¼Ž6”¶1åŸÌò„ÅÏüô$’c$zR·Äiµ5¶’3™åµÃna9–Aò)<(Œ[´q™ÉÀ$–é( Š( Š( ñü„ÿì'þƒu^Á^?âù: ÿØ*Oý꽂€ óy&ñ&“ðãÂÐYØÁ—‘Í=ä–ó$†hQ¢("o”ð¬Kg ß)ƤV‡¼K»o}?R±¼ku–h.¬'‰bl È$xÕX‚qÇ\(RÅï$³¯à‚ £ñÁ1•“Œ1U'Œôç­yߊ¼C…v··w—úJ^ÏP„qòñªØøRáoü%ÅÛ>ùfO Kp›æ'ÌHX19ääóœóš±á;Núþê}CR»]¼4ˈ㠄 ÍÁ>Lo‡!¶Œ0ù ÙŠ"KýCþ˜`—S’+qäE Ì~Ìdò¥?ëcŸïI‘ˆüµA÷š®7ÃVcYMÌP€ÐéLÓìR†5òÕ<Ï”¬d.>]ƒ·ƒI¹ÐoõÉïl´™àÔä‹^O£Mlò Ú6™dwt_—?ÃÓŽ8x5ÏÉ¢éZ£êúU²êßc"”‹‡U–xˆãÄV0'Ãny[î€Àõ©¯Í®èWw)âJioì‘tÇ– _Ý\›ˆâ-&!&éà;L§ Z𤠷¼»µ½ð¿Ÿ$²¬÷?Mp’É‚C—HY]¾vç$Ì:æº «»%Ó Õ.-§’8¶ÍRI4e†ÜˆÂ™aÈ?.@-œ ÐN§¥]jšVƒ$kwâ5çs,Çû69ÞLˆ³FI>Qsp .xNKÔñ¾¡&³­A=ܺ}µ¸ŠcxÖkÀ0¤U…ËÌeùB… ±§Ãá]^[ûX|=·í¸šð]èRÛ¥É ]¥‰UØ3dd“ÔúÑ}qá>òKY´)ÞD´$Á Ï2ròC¤EL|ýÐp:c4‡âw¤ø—ŚΙs£ÚhV×ó"[¡7rÆnö,ŒAù6¦ÖÀ@\:íç?V¶Üx’ßû~î)æñFœñÆ‚ƒb Pc$…2Æ3ÏÜ9Ëoí5 7ÃSYÜk7º?kŠ1pÍ¥4³Ì™Bªñ„2C´—hÈx¯§Cá][íVþÙñF'K­ [xåH°#V2DªÛxÚ¼àaÅâ=NMSVºÄ—V֚޽¥´1ì{k¯³€ÎÙfa‰X£)PYXË„]ϥ䚇…–Âx º:«ì’xL¨¿èw9ʆRxÏñ^zV|FÃFñV«yªÅ=ýÔ—iµ’Û×R]ФEVeW ”Ž0Jíä6}BâëÂ3KͧÁ=ÕúlQ 1äž‘•Ù–0…Ä›ž7påÞŒÀn€r~ ²ÕäÖµïõxÅÆý‰´ûAÚoæP ÊÒä†;³‘ʨ Œ†.u‰ô¡âmCMñE¤h×l¤YnÒ)bû3Çf®ë´§ÈxÁbHØ«Èfß]e¼>ñ£v[ÃÞeÕÄ@\Í¡KœŠW Ï,@6 ¡ “÷AÇËÆ‹MƒK=½”SÙjOwksuy‡.®ÄþC,‘©x”ÁUÜp7/ s]3\ ;ív8¯ôÍumtËËè„òÉdd«–¤•žU]¥9TûÇ!«Ïy}mº~…§ÚizÅþº`Ô<›ŸÝ™MŸÚ ‘ÈаË"F 0òKñ“æWQ%¦ká¨s£Gý—oŽÒ-1˜ l@¨X$`ÃnpÍžõ_Mo ê¶  Ûèr&ž¨\ÙÝh“[Ûãxn‘ª¸îÇ\äö&€0ôGñV­­^éÚ‡‰ †;[HdÝ¥C¼Íq ,ˆU›÷?>#O˜¡°~UŸRÖü!¬Zê´÷k¦ø~ìêÍ¿—=ÚÉ4héˆÁ ¯o1©ÂÀqõÜ5džï·Å梒,ba!L‚vàÄæ»M)¼7¨ê–òÙèrCyeoåÛÏq¢Mlaˆ|¡I#P ô'Œf«È|%¡j¬~’+»$ÙÖ^žA¶XˆäŽ";Û!OVlóšË7zŒÐ`ðüø¼Ö5 LÏ1Xg¹™0Ra,ŠÈU–B¸*NïœgêÞ"ñžƒ­Ë7ˆ,mnô]+ÏÁåÍó<·1‘™W2!m<Öl«.»KëMM.ïQ¼Ñ£ž ô‰îé,·cËó"]ŠäpW+ŽØ5¨Yèþ/ѦÑtë),nÊKk[›ÍxÖÒ'QˆŒ‹¡À çBOVñÖ‘«-߈>ϧ‰lí¢yü„ o*Û<’TeBË+d|à&Kc‹Xñ[Ü_j‡QÑ­´ÿ´_ÛAýÐX€Ì¨vCƒ˜C930Ø$!G7/o´KmE[VÒç»Õ¡Š8ä¼·Ð.eVÚVA±Ö7ùC€ÁC¬:äUË›M-îuÙ´hä{ËqÌ‹¦4—DáFÇ@†FÚ ‘ÀŽ8ùg¹kí }GÄ”`×eûB_ÅiÛ(Ó䬯˜ØmËnR0³~e{A5ÎnE$®5;*ŠX…[¸Y‚‚Iì5_Jo ê)o¦YèrC“ýªÞ+kh¡pÜ:y‘ª‡ËÇ<“ëV5?Çcz–0iú•ÕÛ\A a?”ÝC?œ#1áU‹›øHÈ=7(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÃðœ[h÷ ‰æÿdéV6v<ϲ[¤[ñœghÆO_S@— è£A°’ÑoîïCÜKpdºî #—p6"ŒfnŸÄGL^øVêâ[‹ hÓO+—’I,"fv'$’W$“ÎkCRÒtÝfÝmõM>ÒúpëÔ+*†ÁÁ#>æ€2Ç„àKÃÒゎŠ[€œî êì‹èŒwõy¤±$œqÅe\øM»Ìøu¬g¨+5’àÿÀn­Vñ¯ÄMcÂrÜ‹u±Ô[MŠ 5 µ|*»"åå29fÙY› œ#›âN¼u@`³ÓWO>-_û̪£Ÿ €Å²Hé³h}ÙYp„¾$ŸÈÚŠÔþ µèÚ+ÝxÂt+‚¼ElKÌ76~Ù5ÉãŸ~zóUøð÷‹×9:__õßç§N*ÿ†>"ø¯ÅÙòØé04:œW»¬.R #Ýäy·¤ÊÅv¶À¤Øð}BÃíŸÙÖßÚ>GÛ¼¤ûGÙóåù˜¶g¹Î3Î)¤’²ÐéŽgŒŠ²¨þóÇÏè#þÿcœ´iß/ÀýõZÓ|Ú]Ò\C¡x½Šº÷:~Óž¹ÄÃ9ɯ5êZ¶¥£_j— #Aeo%ċТ– dœQ\¾­â-{AK¤¼l÷si—7–0Á€“FÑ"@IlÌ]çEDd‘Âå€Võ‹ŒµOG}n¾dÔ̱u¥QØŠÚ)-ÝXø']«n]ÓYIènO©­ŸøHuOú5Ïûýeÿɪx“Ä–ÚN±si”n´œÅ-¼‹!ÉQ0 œ bPJæg%BÅksĺ̺]¼ÚË]Îçnlæ¼eE3ˆaÜQIʼs…léÒ§MZœR^JÇ$¥)nÈÿá!Õ?èL×?ïõ—ÿ$Qÿ ©ÿBf¹ÿ¬¿ù"±ôŸk~$]>=!lbó-$¸¹ºº¶”C)KyR"ÊÅfX¦`…¾PA,p”õˆ—F±Õl£Œ , ¹{4±¹»if™C%·› Ñ€[q>j€c~„'ü$:§ý šçýþ²ÿäŠ?á!Õ?èL×?ïõ—ÿ$Tšf¥©j·¯uÚ.’—ÚÜ0ŸtNÑ´›+èT&>îx?»®?Iñž«£øwM½Ö#ŽôêöGQ·Š1Þ'’xTF[ Ì…®×S1ªmS‚@:ÏøHuOú5ÏûýeÿÉÂCªЙ®ßë/þH¨ü/­jÅí½ìrH$OÙÒî,BåÁŒG1$•Ø `p|À01“Íë¾)Ö.ôÍjÆ `²žöÒOìgŒÊÒG RG:?–Þi™0I¢,¥•׿ £þSþ„ÍsþÿYòEðêŸô&kŸ÷úËÿ’+,x‹^[‹•#Mšõ;m:Š'ÝvÌaûC"î ÇÚs‚ØØwcÊmõõ {RºñM¬Pj–š}†§<“»£l–ÎT;?˜ªBM1ŒŽpÁN?tà€nÂCªЙ®ßë/þH£þSþ„ÍsþÿYòEGá}sRÔî/lõ‹XìïíÒ)žÔFÊÐ,…ö©l²J>C‰¹äŒ® 3ãƒNÓïî¼…µšîùçtFlXB')p J–ÿ0ÊŸ4cï­hÂCªЙ®ßë/þH¬½WPÖ¯µâ/ë!,/ZâPÓÙd©·š,/úG]Ò)çô5î|QâmFžmfÓMP:Ö¤–ð†+o-ºÇ¹·03JË·nÒ¹¿V-µJÇNµ¹‚xçÒmobÒ Ý«IwpÂàZ´Í(`ªwå±±·ÎT¾SþSþ„ÍsþÿYòEðêŸô&kŸ÷úËÿ’+Ÿ¸ø„ÖZ›Ë û^šb¹¸Úé· VÞÙüõ¹|E2¶Ô\(3¦€ËjG>¼þ1Òl5Im·¹ÔX³®Y<¸¼™7q"(œ¶ÿ—s;nDñ}ÜšŒÖ ápÝCsHžeŸÊŽ\)ÏÚ1Éÿ/qV?á!Õ?èL×?ïõ—ÿ$Qgÿ%Yÿ°U‡þ»®Äž.¾ð>³ã›Y¯nåItÈõM ó¾Êîßglù‡ç20A• û¤¼ÿ„‡Tÿ¡3\ÿ¿Ö_ü‘Gü$:§ý šçýþ²ÿäŠó±ãOxmï<=ie&­y [Ø­ÄbÞîú]BYT<Ì'€ Û½[8à`m–¾1ñeöã-JÂÂÆúMP¹Óì´ø`q$¦6\HÏæØV$¢¨,Fâ€:øHuOú5ÏûýeÿÉÂCªЙ®ßë/þH¯?oˆwÚŒZH73Éÿ -•Œ±Â·6SÀ$VÞ“Á¿†VV¼‘¶FV£‹âμtm3W{M4Á¬Yj·¶ë†µkEf@ᅥ ƒ…N¹”èŸðêŸô&kŸ÷úËÿ’(ÿ„‡Tÿ¡3\ÿ¿Ö_ü‘\~“ãk7PévÖºjwÞ·ÖmC0†=Ò„t“³eNáŒm?)ßÇÔ(Ÿÿ„‡Tÿ¡3\ÿ¿Ö_ü‘Gü$:§ý šçýþ²ÿäŠè+›ÒçÔ®¼k¬­ä±µ¥¥¼)m»1HÙÚBáÏ¥(°>ù€³€Iÿ ©ÿBf¹ÿ¬¿ù"¬Xë7÷w‘Á7†u[(Û9žy-J&<„™›žœ×Óš§®Ï©ø~Æ cK ®îc‰›Ï‘R9$Œl‰dyÞd p8“¤ ñü„ÿì'þƒu^Á^?âù: ÿØ*Oý꽂€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€3õ½OûGžõaóæ]±Áí¾tÎÁ#vÝÎÊ»9<YgÃS[X$ö—¾¹Ã]Ç<öwH˜üÄDÊ¢0ýŠ‘Ÿ™£SW5ÍëSéó.«}a%„­4FÐBrìO™ôWqÛï¤ aÁ§ëRø«PÒÛÆÏ‘oempŒ ²ÜZGXô|c.8îzöê4­J_K·¿dD™2c”ñ7FG®¬ °ìAªåcèz ÑgÔ&mVúþKùViMØ„aÕ<.4ꨃ¿Ý 9Ø Š( Š( Š+›:^•¯jÚ£4ºÌsÚ\-¼Â-VæËy1È $r…l‹ž9ú’Ч6™úXÓžK±EMéw*K…Æ?z¬–4ç’ì@Sz]Ê’áqÞ«ÏÙ<ç94rŠËÓt =*á§·›Rwd(EÖ¥qp¸È<,ŽÀ:ã=}MG}á« BòK©®5T‘ñ‘­u 8D(éØs×­lQTæÓ ŸKsÉv ©½.åIp¸ÇïUƒçŽNìžsœš¯¥hPh÷ÛÝêR¤èŠb»¾–åP©o™|Æb¤îÁçjñ× ”QEQEg뉪I¡ÞÇ¢<êo%´“¶ÔÏÏÊÙÛ×NqŽ3šæ×Pñ‡¡Ñtx<9£$¸±´EÖ¦aH]Àbm³±žNqîk´®Ä?òðŸý…dÿÒ+ª¯§Úø‘|P/®4ý*ÎÆx™oRÛP’f–@Ë“k@ƒr…(NA*Ë’|µÔQEQEQEã³ÄËmðÓTÄ…#ÔåvÆÎÄb<*‚XûIí^É^?û8ÿÉ<Ô?ì+'þŠŠ€; WWðÖ·ö/í7\›ì7qÞÛÿÄ–ývL™ÚÜD3ŒžGµƯá­zÍ-u-7\š8åIã+¢ßÆñH§*èëdaê¤HèMGñWÔô«E¥ßÉdúŽ»mc4±Ç·• }ÀoVðqÚ²íüo¨èsø³MÔä‚ÿþù`a¨ÝH¶ªÐ̆EìCó.6ìÈ6MiÞ‚%X´Ç"ÝÉz· §ê¢q4ŠFmó>`FìdŒÔÙøÙ Aáýf$:ci%SFÔTVbÌœGÔ±$·Þ$“šË°øŸ¬kÞ/ðæ›e¦Áio>¡{g~“JûÙ­ãÜÁwFT+£Œª±a´„–±£|aMzòÎÚÃI‚yµ(¯ÂÚ=ELûàª\!P!óœÏùs@]èÿïmͼÚˆ o ´‘Ŧê‘,ÑÂ1*!Q€²xð+.ëAÐîüQªÇU޵UÕ¶Gá{á3JMû|µRvîÛg¦æfëÖ,&¸¸Ó­¦¼µû%Ô‘#Íoæ <§ MÆÁÈÈ늱@o›àüÀº¹å´W¤'JÔŒp¤ÿëDHSl[²AØ‚GJè,®ME ¥ª PO*Ò4[±þö2ÅÙƒä6à0EÆ…í×…¯õ¾ŸOñœ%Žr±išœqÉ$eJ;ƨØNX…QÐ$›â.ššð°†m6H–õt÷C¨*Ý™Œ‚#²ßnJ+ fS…v @Rûš³q­-ì²iÿe·‚î{XœÌÌb•ãf•~AŒœçpÆfçä¹ð”ßÚM'\e¿ŠHg_ìmCnÉ?Ö^#Þ~fÙ·sÇ$V.õ _Ku-Æ›®<—QE ®4[ðvÆÌñ•"/••˜2áÁÎ@Å9µ}G3+ßǨݵºEp­ýšËPšH’ª£˜‰•™ƒpЇ‚Ã|“êz¶®Iá”Õg»žïìŸg½¹Š!$>gÚZ_¸ŠœEjÅ2ó°Ý•<X±Ö<=§EvÖ~#]²™™ßJÔår¥3#´e¤ùpòqµq÷Wìž x$„é~#òß`@4íP}œ+¬Š°üŸ¹Pȇl{GȼaF4"¸Õ¤·Õl¤×<ˆ4½CʹÕ&X–u·û*N[îy[ƒÈ’€y`ÿÍ[žšúãD†MDIç—+K–òD„NëµÚ0ŒË…Á$m_º9ùu Maö#§x"]+E¤j1È’Èìîé"ÆI.ùÚG W¡ÅW‰¼ZŇ¬Ç²\Ç ¢j-— ºThü½¬Œpv° `` ï( .ÃRðÞšþe½¯‰Ì»ÃgÓµ9°¬¡Y dØ„$¨,Xy¬»»_ KÉi§k–ÒOÙ$s¢j¢3¡–ÝAä• ¨\÷€séPÏ„­ xbÒuÁK ¸:6 v˜œI®cùcFX×2p0Nd‡Qðž¨uôï ÷´Š‡HÔLQ»gs¤F=ˆçse•A;ß'ælö”Plþµ¸’dÒ¼@áíäµò&Òµ)`H\©hÒ'Œ¢!Ø£j¨P:qV4­GÃ-ÅÅ͖⸹DIç—HÔe’`…ŠïwŒ–#y“œ`tPiEpöÞ$´ÆZûXë‚Öm>Òßûóæt’ä°Ç•ž‰ùû5‹Ÿ kÚŽ—©é:ä÷Z\¾u›ÿcj å>Tç ”^¹é]Åçú”~ Õõ¯¯´]rI§ò¾Ð£HÔR;Ÿ(æ?65Œ$»OMàñÐb¤ÝàÃ¥êÚchzËÙê×]^Äú& ÂY_Ÿ˜ò§*ÛŒÁ®òŠó´´ð:ºJÚ7ˆ%ob¿óçÓ59eiâ]±³HÈY‚‚@RJŒž9¨ãÓ|˜@×<¶Šâ„éZ‘ŽŸýh‰ m‹vH;ðHé^‘Ey½î›àB†ë@×$tøôÀ?²µ!‹hÝdDá;2©ÏSŽN+¨ÿ„ËKÿŸ]sÿW¿üfº (Ÿÿ„ËKÿŸ]sÿW¿üf©{@Q¨²ñgP}÷-¨#3ykCò§j(ÊãÏ^k¬¢€9wñ&‡&£ ûXë†ê¤†7þþùQÊò±É?/sZ>%°Ô/#µ†ßUI83é7P À'—xÂŽÏ=:ÖÅãþ!ÿ“¡ðŸý‚¤ÿÐn«Ø+ÇüCÿ'Cá?ûIÿ ÝW°PEPEPEPEPEPEPEP\ýŸü”=gþÁVú6îº çìÿä¡ë?ö °ÿÑ·tÐQEQEQEV~¦}‚ûV¹ó¼Ïí µ¹Û·^!Š-¹Ï?곞>ö;dèV…<Ók'Ie‘ÒM%f$"ý’ݰ¾ƒs1ÀîIï@”QYzoˆtÍ[TÔ´Ë9äkÍ1Õ.âx$ŒÆ[;~ò€À…$FB(RŠËµñ™{â í Þy$Ô,ê1›b\¾Ý™ ä çƒèqbëU±²¿±°¸¹Ž;»÷tµ„ýéJ!vÀô 9=9©€aë%ã뉬 x5ˆbØÑØ]9SnËÏ™O”d;w*¶\þùW cD¼}q5o± [; §*mÙyó ÉòŒƒnåVËŸß*áGA õ½ÏÙͼžtw¢š%/'ËÎñòó¸Ï#$d‹æþ3V»—Æö«eªÈÓx~ 6Öw–ek‚] ÌÑdAá_úÖ›¦Ëqi}>˜?²/|¹4«‰’ ¢nd;—˜Â蜻 Á³µ€õŠÇÔ|Q¤éeóæž_µK$ýŽÒ[ÒGéû¥l0ÚÜ~FþéÀ©héyâ«ÍOW‹Äp\<°Ëi¢»Çl!‹Ì_´Ç4_8œ4qÌ¥¾mŒƒ}tðþ“ÂOáÉæ»yt϶$š\³ÜŠDó|Å(_jÆ&Q‘·aÚ¿+(>™¦ê–šµ»MhòŽRD–'ŠHÛáÑÀe8 €@È`zjåy|­¥øïL6º?Øc]BH&[MáŸìæ)V-÷ƒ1¼$ù,#¾EàEV4­5×Á·¶ºf“}k⣢I åâÂÖÞuï–ZVÚ'ɸ‰Ap>c½wüÞ‘EyÞ‹ Ù[éz®•£Ýê¶—o ½®³eŸhw1o(@‡<&_ÊmÇÊá¦çö%å§…ÿ²nmàñÍ/Íû•·UÎá¸Êf¨+‘“#oa©$ÓÃlç–8º g` ³0U÷,@¹ V}·ˆ4û·Õµ³énRé~Å0!‚îÂe?xvà€›²Hûà ¥ÜéZÚÝê^È·˜ÛÈP…LŽîGØäœ»Uu*ž•ªZkZ]¾¥`ò=¥Êo‰Þ'Œ²ö;\ƒÔr0GUÊ(¬}[ÅZ…,±jzœÒEhײ#’J¬©¸ê̬xPH5±@aÚÁ2øëV¸h¤>™d‰!Sµ™eº,èH ¤ŽÛ‡­nV|:Ÿ›âÝ'ÉÇÙ­ ¹ów}ï5æ]¸Çòsœó»¶9ТŠ(¢Š(®Ä?òðŸý…dÿÒ+ªè+Ÿñü‡<'ÿaY?ôŠê€: (¢€ (¢€ (¢€ ñ¿Ùâxm~j—Ç jr¼’HÁUC$“ÀsšöJñÿÙÇþIæ¡ÿaY?ôTTÒxŸSð7Šmì"¸ñ¶›jö±ßA-®¥m¹e@v“¿p#æÎ1ØV\¶'³e—Æ–2jM¨G©6ªú¥¹¹7“å±þ ª¤¨M›< ó]'ŽüE©xzßC],Zyúž±o§3ÝDÒ,k o˜*²’A¿­eÁñû2óSÑõûo;W±Ô-¬bra/ä‡`‘¿vÛAܶ¼1È—§iÿ´ÛûmF?ZI¨A©Ï© ©5;]Ìó¢¤ÈT›(è á"¤Ó­ü¤Ùý†Çâ7Ùì#Šæ+[Hµ¸#K_8’YJá—'i¾Üç¯5°~)èŸè%­ójW:„ÚhÓȉ$YâÆõ.Ò¿‰1‡;‹¨9ÄßìÖ[kk}\º¿—OmFK´Ï*Ûä‘—-» *n'bÃÆ>±Ó­¬ÿá2Ò®<ˆ’/:ãT…ä“hs¶îXã$÷5$þ7ð”ÖòÄž1Ñ wB«,z„‘÷†âFG^A Ö}ßÄ;o7_µ³Óµ"ú5º¹º’Ýp†€Ì™äI cnϯZσâöŠ–RËwm©goc=íÒZŠ4¹De|ob. ¦Y¹;C…b$Ó5/éš<ºjüH‚hÛ)dÔ­H\1bá‘W{3ÍæoÞs¸Ì†“â_iQOÿž•uqs/qs>£o¾WÚ¨ µF~Uw'$’pì¾']Þ<†çM“NAâˆô8ÃÄ“–ÊüÊÅf]®XnP@`šÐâ΃%¼wdÔ–ÎâÞòâÊå£M·‹j ” ¹N‘æÎ;(1à…–Ç,F— ©4ZXÔm|ˆÙ:8󫪰PûF°m¢[ßÍg«Y7ìEž£ÄFÝuXAç’Ó2ìÌŲû¶ä…Ú¤ƒbŠ]ÔÖÚF¹4ÿÙðêPZGgºk˜$qdPßÂÇ8Èù—r᫸ ?kÿI<7,e·¹Ø×Ö­¨Úùw®¨©¾\ܪ dR¨ÁpT†`ѥϖâíŸÇ¶’Ú_\=Í唺­³Årìz9#~À¡ `¥# A·z%ÃÙë~ ±ÔZâØ‹S,“¥‡ö¥¸…%³;daÛ,îv³2‚Ùm]¶,¡%õÚ\‹h+ŒE;AwU?ê÷d‘בȀ,õ‹éjÒÁòiöÉ hðI#¬…·0àpxç›mVÆËÄž!ñ71ÌšN±³Qß¾‘-$³·þEÏ 4HÌx A  žãMÕo/®+êZz,%º’Ý”œ”yr¹Ï9éŽ=3ö³iy$øgU½q‰à’Ô#äÀy•¸éÈ=9 7…¿³µ+˜æ½û6¯ZN¡¨ÁæÓI<·aÂ70¢Ü6CeB2’O V]ÒuÇbÚ¬æÞ_¿Ùšk‰StriŒ?q#v™$ù|³æÆWПLšöx´±všeÜÓ”Vû4BPN2¹g ‘ž~lppO¯¦ê·—× LJõ-=ÝInÊNGÊ<¹\çœôÇž™ñøuØaðV™i¥xžîÞTðmÓˆ#¹¬e Xÿ®L‚BÝSaFÇIu«EÛ’ßV¾ºÒOÙ|Û›IícŽé¾Ðf[‰Âï¶á ÌHk´iµDŒQâ§»ÔôíGC¹%­ÔF»°–ÌnF0_:\Œ‚Tå}qØÑ{ã-3DÓ– æžÿY†(÷éP42ê.Ä)9†6°smùp PáÝfkš6qâÉ}J)l,5`wyWJ!ýêí•Ɉd>C2Çž&èìî4¸±4[}z{Áâ½@ZãÍ‘úb*«NKÄ àœÌ¬Fé7Y¦üAŸU¸h-ü âäuBäÝYEn¸È4’¨'ž™Ï_CZÞ+¹¾²µ½°ð¾³uiuoÄS$–Š º8 ØÃ ß‹§ºÒíOo}bfU7+ö&(ÝžV¹ošàˆËH·&Óåí_Dšöx´±všeÜÓ”Vû4BPN2¹g ‘ž~lppO§k¨ßêž}´º6«¤n‰¶ÝÌö­µº ¡$“æç#r•ãŸBærêòÙxöâ÷WÔ£¸¿ð•Õ›}²o2[´Šc#ņÎF!i6ñƒ¹ø$Ǽº½ñÛÊþ%þÏÅÝ·ØtÙ`œOqlÑD϶5T©f™YÞ)µÉaåƒÝø_N¶Ðìô-sUµ±‰!†ïͳдs,gå^T}ÞýN†§¯2×MvÒ¯§ºÔ%Çg ‡ÌWòžB´8XÛ8cÈã4æmq§ê~¹½¹×.ï-Ò÷I–mF-Zajùº¤ÆWìÒíbÏùbI ÐiÛêúÇ‹ïìü]w¦ÛÁ{“ǶQ‹HyÑ3ÆAGR1° Õ©kñ)uìï@<™[ŽœÓÓš¹5ìñibí4˹§(­ö$h„ œerÎ#<üØààž2Ïü9UŸÁZN¨Ú¥Þ£s{e\O=ÛL7ªà¨Ú¥NTàJüå›&ºôØbÖnuEi<û‹xmÝIBÆÒ2‘Æs™[<ö;×Óu[Ë놊ãÃú–ž n¤·e'#å\®sÎzcƒÏLײ¶»ÿ„×X½’ÖH­ÊÎÞ™‰™wr @j˜sŒŽhrŠ( Š( ¹ÿÿÈsÂö“ÿH®« ®Ä?òðŸý…dÿÒ+ªè(¢Š(¢Š(¢Š+ÇÿgÏôkúÏîõ=?UµA×ËÊ*˜|§æ‰ÇýßqŸ`¯ñ‡ƒüKá_\xóÀvÐ]Íu¦¡¦¼K‚0 u©mŧyï wž1ð¼Þ(·ÒVÞþ;)ôÝNF7’Ü̮ц•§·¯jçõ…pêÖ÷7:†¥εs©Á¨Ïs% 6òy!–8L¹ˆF̸߸“’Ç¥aÿÃAèöèÚÿ†õÍ7SOõÖžR7—žW—dnT©åG^ýIÿ àÿúëŸ÷âþ;@ÿ LÞM(ÞiF6»šâ{s¢B¶Ž ±¡Ycl‚]ýrH ,v /´3§\èÞ&’=B×Gm%îom>Ñ”2yŠÈ»×iV$(bà(QƒŒœ?øhïÿÐ7\ÿ¿ÿñÚ?᣼ÿ@ÝsþüCÿÇh¬ÿ„¼ßÈúÄ’¿‰,¢´g’ÝwBR‹yÚ@rwnÀ ; ãí>jw^"Ñï5 -ô[«}&ØN‘ÆÆñ-¢PåFâÑ8hÀäa›ån Éÿ àÿúëŸ÷âþ;Gü4wƒÿè®߈øítü2Íã4Z¾Ë_øIcñÆöÛœHó#-¼¤ãnW¡ÝÔgÅðfi¦¾»ºÇM´Ôm´ð-1"}¬2–•·‘&ÐÇU2qô¬ÿøhïÿÐ7\ÿ¿ÿñÚ?᣼ÿ@ÝsþüCÿÇh _‡ZÕî“â_±_Zx~ 9þ²ãË•\˵›0R»OMÙÏèãÿðÑÞÿ n¹ÿ~!ÿã´ÃGx?þºçýø‡ÿŽÐ°Q^?ÿ àÿúëŸ÷âþ;Gü4wƒÿè®߈øí{ãÿðÑÞÿ n¹ÿ~!ÿã´ÃGx?þºçýø‡ÿŽÐ°Q^?ÿ àÿúëŸ÷âþ;Gü4wƒÿè®߈øí{ãÿðÑÞÿ n¹ÿ~!ÿã´ÃGx?þºçýø‡ÿŽÐ°Q^?ÿ àÿúëŸ÷âþ;Gü4wƒÿè®߈øí{ãÿðÑÞÿ n¹ÿ~!ÿã´ÃGx?þºçýø‡ÿŽÐ°Q^?ÿ àÿúëŸ÷âþ;Gü4wƒÿè®߈øí{ãÿðÑÞÿ n¹ÿ~!ÿã´ÃGx?þºçýø‡ÿŽÐ°Q^?ÿ àÿúëŸ÷âþ;Gü4wƒÿè®߈øí{ãÿðÑÞÿ n¹ÿ~!ÿã´ÃGx?þºçýø‡ÿŽÐ°Q^?ÿ àÿúëŸ÷âþ;Gü4wƒÿè®߈øí{ãÿðÑÞÿ n¹ÿ~!ÿã´ÃGx?þºçýø‡ÿŽÐ°Q^?ÿ àÿúëŸ÷âþ;Gü4wƒÿè®߈øí{ãÿðÑÞÿ n¹ÿ~!ÿãµß¯¼D‚ÛÀ>ÔµÂê’Kw"€³ »¶1 ?,È3ÈÍI¨ÿÄ×ö¡Ò~Åûßì)¾Ýü>Vå—q»ý|_w?{ØãØ+Îþøïà ®ëÒÇ?‰5‡2Ý•DÄbÅ©c–ÇË  ('Ñ(¢Š(¢Š(¢Šãô+k~Ó5oí}·ZEsådLÛ7 m¹ûHÎ3ŒàPaEssÇâ«[yn.•sì~0ÿ î‡ÿ‚i¿ù*€: +ŸûŒ?è;¡ÿàšoþJ£ì~0ÿ î‡ÿ‚i¿ù*€: +ŸûŒ?è;¡ÿàšoþJ¬ývãÆ'‡µ=[û_C›ì6’Üù_Ù.ýˆ[n~Òqœc84ØQEV>³kö}úÕ­Ä·vÑ6K‡Ù ЮX¤Ç²Œ±ÉBIRèú“Ï ­¼·Ç !y$‘‚ª($“ÀsšÇ‚ µÛˆ¯¯¢’>'ZYÊ¥ZF+4ÊyŒýÞ¾}«~µ¯®£ðÓ^Ôôö»³¸‹L¸cªÐÜZÊ!,ת8Ê‘ìA‚ ê ‚­íâŽ"@‘Ç…TP0€ã®øjjk[„¸’Òâ‹ydxÀ"xá™e¸=FåÊžªIÁÃ:¶åQEÏøÛ÷~¾½ëýåê[?ç§Ù¤Yög¶ï/nyÆsƒŒWAQÏ7VòÛÜEÐJ…$ŽE ®¤`‚Æ(ÄúúèVQ£û\ΫõfX“z¬“ȤQ+obJŽ,¥­ 7M‡L·hãi%’G2Oq)Iä î@8ª€?è?ØztqÜ^Ϩê(㸿¹9’mƒ ôQ“…õf$–ff¯ÿ"§ý‹ÿúnÿîýÿ\ÿÕtQEQEQEQ\}Æ…£ëõOím*ÆÿÉÒ¬|¿µÛ¤»3-Þq¸g§  Šåìü%à}Bš×Ѭ²BOölC´n9^̬=ñLJsáý4ø–÷IÓ¾xFt¶·‚ãθ+e”È m[gÁ ÷é´÷ z%sþ!ÿç„ÿì+'þ‘]V]·‡üx-¼¿ x~àÛÏoug sC œ P¤3à€pP—VeÆêz—€-—ðæ¥4z…µÔvÐ[he”EºAŒŒF1’F8 Ð(¯7Õ,¼šž øSÁº­Ô·ogqc6²ä „dC ç8<âÅŽƒ MaÍ×<(­4¤[-¡‚ayeVš4 Ä‚6¶Ñ…fÝ€2èW¦é¿®´mö÷ÃÞÓçÖ-â–ÚÚk{pÎΪv&T ¸ãŽhñ§‚ü+kà_Ü[økF†x´Ë—ŽHì"VF1¹s@åQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@yœwºõŸÃ.ÚÐÀmôuižýá“sK ìÚ±0ØÀ…'wFo”ãÓ+‡ðŸ‰-4Ïèv–:äwVº}¼3'öáÚë†`àƒÒ€; ¼’Î6¿‚.ŽwÇÆT^N0ÅTž1ü#Óžµåz ói Ó´Id·}G²m8ÄĺE™pF0à F©õ©,õ_ é÷†òË@¾¶º1,h|3vŽcP¦áv€ªè6J§z5;[ øsÂ7ѵ§öcÊ—Fæ5i"„@ˆC˜%BK“„À!€57ñ&³$QÞ¾»c.«¦é¦ TG·»-´’4,ß9b&“$yk÷w|ãR{ß][Ëoq᫹ –àÝIžºeyˆÁƒ ‘ÆîµOÄ·º^´±Oeo}i©$°1½›Â·³9Ž)Ve!í.ŠHÎ:ñ“ZxŠêÖ_ Eâ És­ê|©?†î8Úá#$0há\¦ÐKà‚XU=#Xñ…Ɖ¥y¨é±VÊ+›x Ôfe.ð‚-Ñ¡T픪‰Qæ4 ¶ è¹á•¿{õÑu!xî®÷Ãw~c2¡E%¼œ’™Aìކ«µïƒ™/Q¼5vRýÃÞ)ð½Ö.1`dýÇÎCrsÉÍgé“Èþ-ðíõïˆ.å e©@âê(!Ì‚î„Oµp\3,d¡Ã4JW†!©Ãuygc¥Û%¾Ë_ ݬRË:ˆüæµFcÓå³i'rv¾!"ºE×<2¯dë¢êA쥛 ÝæÝJ…"?Üü€¨ Tâ?ÉÔRiZ«ÇwŸ´£xvð‰²¡ñäüß( Ï`JÇQ®ÆšÖ÷ŸÙ³x‡Už[Ñ- iÄmo+B¸c¶9bB6‘½A;€a!±­¦½emm}wowwq§‹Ë»kah(¦9TFYŒàõ cRó\ðΡqkq{¢êW3Ú>ûi&ðÝÛ´-r„Õ9Pr=¥S¾¼ðÝäšðôçWá⾟—rºH lb|Çn£ÇP?Š|D< §¿ÝÝu37Ùc1ÛÍn!QW1ó6âÀ:‚TÎÅÙÛj6öz¤”ÒŦKkwµ#@o.^å•V02Ÿ˜È8¬øaÒíüsáèVú;û­=tûI<'z ±ªyJYBå˜GÀ%ð8ÇË]®µáøtéíeÒ/Û7=ð‡Ã‘Çs#ŒHÌžQÎîû‹pI  » Õˆ‚ µÛˆ¯¯¢’>'ZYÊ¥ZF+4ÊyŒýÞ¾}«åPEPEPEPEP?äÞxo‹+oµh‹ót$Íf½Ä(ó#î#Èd„Þ F»O Õ¼WòÇ4 xäƒ+©Ásš’°ç‚m â[뤛O•Ì—vq)f‰ËM ŽI'%ã{–_ŸrʹEGðÝ[Åqo,sA*ŽHØ2º‘AG9©(¢Š(®]¬¢Ôi ô…<)‡"™š{¹'’âå€}By£òääO‘Ø®ý¥rØÉ;¹9$ך}WOñ®§{†õ+ÛI¬­mãšÞ[`£iÝŽe ~ùG#¨nØ&çØüaÿAÝÿÓòUcñ‡ýt?üMÿÉTq ÞÁâ Um/í—Òj²^_MlÑì³F´û>Å22».$à|Þ[6ÕùR±ÛFñü"¦Ú úÙ„ºr[Â&³{«T‚a+*ÈX$¢¨ù›œ³9qƒšì>Çãúèø&›ÿ’¨ûŒ?è;¡ÿàšoþJ ]ôkû–Ñt+ÿ Ï}¥iº«»Ý\µ«¥Ô&)PM"I2”;¹lÀfØ65½$é·>:?‡§½‡F•Âùø û3Ä4Ò)9-êså䜱øÃþƒºþ ¦ÿäª>Çãúèø&›ÿ’¨‹³ðóéztZ¦©NdЭ4©-aÕ~Ì‘¼>j¿žc”‰„ŠAQ!wÊ´ñßü“ÏÿØ*ëÿE5cñ‡ýt?üMÿÉUOVÐ|U¬è×Ú]Æ¿£,¶ò[ÈÑèò† êT‘›’3ƒèh¬¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¨çžn.%Ž"BòI#TP2I'€ç4O<6¶òÜ\K0D…ä’F ¨ d’OÎk&×n"¾¾ŠHtøœIig*•i¬Ó)äpR3÷xfùö¬@M®ÜE}}éñ8’ÒÎU*Ò09Y¦SÈ à¤gîðÍóíX·(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€0ç‚m â[뤛O•Ì—vq)f‰ËM ŽI'%ã{–_Ÿr˱ðÝ[Åqo,sA*ŽHØ2º‘AG9©+x&Ю%¾±ŠI´ù\Éwg–hØœ´Ð¨ä’r^1÷¹eù÷, ”TpO Õ¼WòÇ4 xäƒ+©Ásš’€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ùñn•ksdË©M=«„›ìº]ÌêŒQ\ÑÆË®§î+r¹=?VÓtmOÅW¦¡ick¢Éu2Ä¥¾Ålp 3€N=\ÿ„ËKÿŸ]sÿW¿üføL´¿ùõ×?ðE{ÿÆjO x§Mñ^m{euhó½¼RÜÛCr²µ³:çcãAÈäºx¬}#WÔíüs«Øjò]i³^ý’ÄF†Q¨Ò3Ã+nçÛòðNø÷åͯ뿃Åú5Þ‰tºêØåfˆÞ‹r0Þjä+rxùБ•Æà ÏøL´¿ùõ×?ðE{ÿÆhÿ„ËKÿŸ]sÿW¿üf©‹1â{^ÎKK="ö;h¤fŒyÛ㈨Ϙ@%¤slP®›ˆ!ö×°ø—¥j×Úi–•õë¤äZ¤r*”1åLáüœí‘[‰ Hrª@5?á2Òÿç×\ÿÁïÿ£þ-/þ}uÏü^ÿñšÏÖüm-†‡ªÜÁ£_EyŸ5õ’]¢(¸Höî“h“rªïŒ²¾ÇÃ`)`@ÐÔE¢ÞßíòØamß4Ÿ?Íþ®N"Þ~CÇ+þ-/þ}uÏü^ÿñš’ÛźUÕýµ’®¥ ÷NRµiw0+°FrI®v£g±¢ÃÄðêzÝæ™i§jMö+ƒosrð¢‚+ƒ— ¸;°6ìN•š?ÿÈsÂö“ÿH®¨ ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¨çžn.%Ž"BòI#TP2I'€ç5%sößñRj+zß¼Ñ-ö=è·SI˜â~O,ð n|0=Ik·__E$:|N$´³•J´ŒVi”ò8)û¼3|ûV-Ê( Š( Š( Š( Š( Š( Š( Š( Š(  9ô¦Ò®%Ô´;hÃÈæKËö¢Ý’r\t ?ûGþ럺ñêXß[ê6qÝZÉæBù•*A†VS‚¬ ©‚ V+úÆâÊòMWJÌ™ðnìÃ`)8 0Ç€ÄÅ^ÆúßQ³ŽêÖO2È©R$2²œ`AHAб@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@sþÿç‹?ì+þ‘Z×AXw>Ò®¯îoYµ(gºpó}—T¹]‚*V9sµg…hi:l:6c¥Û´•¼vñ´„*Š€p=sóøFúäkŒÚÌp\^Þ¥õ͵žÙ,¥HÖ59g`à¤j¬0»ƒH:>ÏøCt¿ùú×?ð{{ÿǨÿ„7KÿŸ­sÿ·¿üz€3ßÁ·S‹[ø-ìÒÆÞÊØ[34Ò_6Îdýâî,aI\À‚Æ8<«Ã®Åª?ˆãœLj3C%€ [ìßg+WFÒØÜ_©W2jÂ¥ÿÏÖ¹ÿƒÛßþ=Gü!º_üýkŸø=½ÿãÔÇë~Ö4ʧVþÒ[/ÜéQZÁ¥¹’_24E ±ÉÅ9 Éä)P›“xBmjÝïnµ(î§ ·ºqË bR‹snYK¾gv?êÀuŒ„]„OøCt¿ùú×?ð{{ÿǨÿ„7KÿŸ­sÿ·¿üz€2ü9à½KAÔ¬fmWM{;D¼Dµ¶Ó -Ä«3>s È¡Fß»‘ב$ÞÕ•qeo®ÀŠú¨ÔbØoHÀºk­¸)f.@-»TªrÇCþÝ/þ~µÏüÞÿñê?á Òÿçë\ÿÁíïÿ  ÷>¸¹¼ÕåþÕÙ íÜÐB-ÁσisœºæÙ>U)ø$’¬²[hZÐñ-–±}­Z\-çàŽÀÆÆNÃæ’ c?6ó’üà¨I?á Òÿçë\ÿÁíïÿ£þÝ/þ~µÏüÞÿñêæÏÃ)ƒÝˆµ6$¹Ó.´ÙgM,‹©ÖeQæÏ/›ûÙC"±b£q/ÀÝ‘±¨xFûPK¥“YŽ¥d,u6{<—‹t§aÀˆ<€ó8 Ä1kŸð†éóõ®àö÷ÿQÿn—ÿ?ZçþoøõXÑô›Í;SÖ®®o`¸Q»1DZŒÃˆÒ=¥‹¶ï–4ç ÎãЀ+ø‡þCžÿ°¬ŸúEuGü!º_üýkŸø=½ÿãÕ%·„´«[ûkÕmJií\¼?jÕ.gTbŒ„…’F\ívÇs@”QEQEQEQEQEQEQEV>¡â}7LÔM„âúK¥‰fd´Óî.v£ I‰ ”n¾†«ÿÂe¥ÿÏ®¹ÿ‚+ßþ3@ÏÿÂe¥ÿÏ®¹ÿ‚+ßþ3Gü&Z_üúëŸø"½ÿã4ÐQ\ÿü&Z_üúëŸø"½ÿã4Âe¥ÿÏ®¹ÿ‚+ßþ3@ÏÿÂe¥ÿÏ®¹ÿ‚+ßþ3Gü&Z_üúëŸø"½ÿã4ÐQ\ÿü&Z_üúëŸø"½ÿã4Âe¥ÿÏ®¹ÿ‚+ßþ3@ÏÿÂe¥ÿÏ®¹ÿ‚+ßþ3Gü&Z_üúëŸø"½ÿã4ÐQ\ÿü&Z_üúëŸø"½ÿã4Âe¥ÿÏ®¹ÿ‚+ßþ3@ÏÿÂe¥ÿÏ®¹ÿ‚+ßþ3X÷Þ$´Öo$´»±×"ÑãÀ’3¡Þ|Hkb.!ÁSËA€lÈ×ÿbÿþœûŸÿFÿ×?õ½sÿð™ióë®àŠ÷ÿŒÑÿ –—ÿ>ºçþ¯øÍtW?ÿ –—ÿ>ºçþ¯øÍð™ióë®àŠ÷ÿŒÐAEsÿð™ióë®àŠ÷ÿŒÑÿ –—ÿ>ºçþ¯øÍtW?ÿ –—ÿ>ºçþ¯øÍð™ióë®àŠ÷ÿŒÐAEsÿð™ióë®àŠ÷ÿŒÑÿ –—ÿ>ºçþ¯øÍtW?ÿ –—ÿ>ºçþ¯øÍÆzG› r&«*B>wov »De˜Hë@Q@Q@Q@Q@Q@÷Ö7W’jºT~dσwf(»IÀY€8 F xô,o­õ8î­dó!|€J• ‚C+)ÁVT€A«}¦^Cy&£¢Í7RàÜÁ:“ ÖÐ$©Ìr`óo—†WÚ@6(ªzn¥§nÒF²E$ncžÞPH%FpA!”• ›”QEQEQEQEQEQEQEQEQEQEQEQEQEQEyþ“ xOþý[[Öô=*o'PÔæ¹ºžÅ%}‰w>I;K*ûôÅzÏÿ àÿú4?üCÿÄ×7á=3¾!:Œ¾ðýå•ÃÄbŽÚ)–HÖGˆHË^ ̸#?&Hà ôJ+Ìü/‚|CusÞðÅ’5Á‹N --ô~RL$XÌj@1Kc$Ä0äÔäøu¦´Ÿ x~ãIþ̸Ô¡½«G!ŠHã1Gýç- 2T ’v€zeÇÇáÏÉ.á øPÚ´PI«¿šÌ©ÆÜmb#w@sšOÃ(t¸uItÿ¦Ÿ3ìŠí¡¶;s¾0OÊÜØúPiEqú†…ðãHÏö–•áK,mÏÚmíãÆíÛ~ðv>=v·¡®l Þ¦—u£x'Â3é÷údºÚoŒVâ‰H¯¶+æ.~n ¸8Ç ©Eyý†‡ K­Yé:ŸÃ½Êâ{K›–‘ ‚hÇ•2FH@Çrȯ’«€Àrwm¹“ðÊæÈÞÁ§øF[@ì†t†Ù2¡‘†à1€±€'¥v”W'†¾]\Eoo¢xbiå·QÇ­»3ÂN€’„ñ»¥G…ðââ[˜¡Ò¼)$–²¬–öäÅ#6ÅF|¬[åòOh°¢¸9ìþBú8]Ã&¯pÖörEmlÈìªÄ{ÊŒüΣ½4ð_…m| â‹ hÐÏ™rñÉ„JÈÂ& ‚ ƒÎh¼¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(—kû=3ÆúíåýÜ–±éZ~ù§F‹™®ÀËIñ«ñŽâu•,µ .£–u6ðݤ¯åÇ+F²`sµ€VùÇ'©,ÿä¡ë?ö °ÿÑ·u©¦i°éV¯oHÈ÷ÜäºYZVÆç {c¯Z˽–÷Tñ ú5®£>›¥¤7O=²FòJeyT/ï•Ty,OÊI,¸*†Ž-WSÑ­mlu8¤Öu©Þæaœ‘Ä / ‰]UB¬©‹dõl«š†“xÚ‰Ô´‹Ø,契mç76ÆxåK2|¡Ð†Rï‚vÈo”­{Ÿ^$¶zn«¶þÒ) 3ꛑ*ÊÈîJ«Ç†Ýã*Œ¨\mÚMþ!iå6öڕͼ6Pê3]%©X£µ‘Y¼ÝÏ·p ¹* ±É ¬UÂÉuã½:Æ $»°Õae–Ý?cg‘’w)»%T••¶¸+‚»™U³åðâéÚž›g¬ÁÖ‰šÈÉ$QÄw³ 3,½FJt†“UðŽ½©jRÞ.»¦ÄeKêt·ošÖS2‘ûñÃHÍ‘ýÜ än xÊÙî<‰´ÝJÙ㸎ÖìËm´–B¢$vW!Ëù‰,¾Ýã~ÊxºÏí†6³¾¦Y­á¼Xƒ¤óDÉ"1”°ò¥ê€‡åwgÞxOX¹þÕòõ«þݪÛjI»NvòüŸ/jß Ùò"Éãøøù†Û ákÈo¡Ôà¶·w7öQ½¡.— wHÆ òaB¡û£w°§øóK¾Ó†¡-½õ›éí©E-Ü8ó`@¦V ¤·É½G nÈ)½y¬¿kž!¸:LšE®¥¦]®¦öòé÷qÛâùVÙî6ˀˇVK>A+Å‹?kVúDVþ ´ôÍm.)WM%²á6Ë̤e|¨NÒ8~›†Ù-<ybÚI¶Ôl`ŽËPké-áÓÊAóDaòáA/îWk»_21n„©§âŸÝÞE¡/‡59- ¼{[©®á…¾Ï4ð‰¶E! ‰ÕˆÏî`óˆ¼T/­ôõ·²»µŸR¸º²‰î7[kˆD¹ªÉ–Ã&6ÞJäV|¾š+[¨´íV8žKÛiák›S*ÛÛÁ/²ªº ‹)|¡gð©OàÝDÞZÉe¯ý– -B}BÚ±«“$ÂbâV-ó.é›v…†Km‘@1ôÏ^ÿÂ=q>­o|°ÛxjËR“P´†7‘¥•{*GUã(J9l.ÒzEñ¥‹ê—VBËRÚ^¥ÅÓÛìŠ9_`Œ|Ä3iAPØáŽ•Žü+ÝQt94ÈüE,º$Z<¬4ì‡HüÕV ÊqòLr:«gnPšV•«ëÚìwwsÇjº­­ÌÈúd¥ÃÁ¾Ù wè¦X0Ì™U\ÎöؼñÅž›gyu¨iz­¬pZI{{pÏs  ÊŠÅ“dy„#~H[lð’ꇉm4x´JÂÒöÊêU½•aW]† ’*3’£÷œ¬‘îË&Wñ‡?ÃÃö¥³Õt«´é÷t×H-sqÛ7I4¢aæMò¼€ f;yã¨Ô4=RïQÓ5}^ kËKI­åag½%2›!Kü«º‘’J³ÊØpËø'Ä:ެÚ5}WQº¸´ŠãT‚÷OX!·âr$Ä1î̪¨¸gKÒ˰ßü7±y§Ísåý—Ï/™å¡ViG”®fDrrÈíà˺Ň…¯4ÝE‚ßS€jºM§Ø¡»kBb’´x¼Ìò#Œä8;B–B?„î&³Ôt™5]º%ïÚ‹A¸æà»8iX•*W*)L’n Žéín4mVÞâ)m"ž9R!å}¦VŽ6Ü$*ë¹FJÆà:‡ j>;Ó4«[鯡žÝ­uìñÒC›'”%]¤ÆÛvSÆ1»ãÅ¥_ê>+×,õ ¹Þé­4顼]2H­[yå•Q3Ê DY|ÂÇs€ËŒ&„> Ôb¹¹Ô¿çjRj ¨De³_")>ÍövZ²³)BØò6¦KÅÀ,YøêÃS[6Ò쯵ŸË35ªÆâÔ<­g;þe߀´{À–ÎÒ¤áÉâÍNæßDÔn¥¥ÄÚíÝÅ­µ¬w 8³{«K;]/U»¾¹ŠiÞqò42ˆ¥F‘˜F[p?>ß—‚wǾ¾·àÛÍg\»¿}FÅ­fŠÖÆçO3DþW™8y J¹žFÛ…Ã,G?!Ý_CðV±¡ÝZɱ¥mb½Ž"Ò^4O´Ê%< þ꺮cåg$0<[ão'ÂW×~iäŸû(j1Þ%¯š–ñº±‰Ù†ùö8+ÆçG2Iã z]vê9R`YÙ"àZÚ)‚n‘Â9,î2AÆ2©UÏÃëïøFŽ¿Fm4‹©ÒÇ—Š! ˆ .BJÁó»pû¾Yä\‡Â¤W77g]‚k¿í¿µ–[Å·Ùš« f<—ËÃäãoÈ$Ñþ i¾ ½[M&ÇR»p‘¼²$*"‰YÝù¥‚8V1–ÝÎÍû[mÏÈÛþºoþ–ÃF“¡ê–^!»Õ/µx/æÒ+vlü¦R#‚9s4€ ¹Ú,HfcÆ_ò¶ÿ°®›ÿ¥°ÐA\ÿŽÿäžx—þÁW_ú)« ®ÇòOÐü5©jÐx/Ã÷Oen÷´Š êƒs Â6ÁÚ8äàqÔ\×¼³­i—ÿi¾O&ìËp©©ÜÄ6yF<µG ¹“%vänÉ9 Øñ^Ÿq/€um/M¶žòâm>KH"3ìY Ï# ã9%›'©à€aÁáÍÚâ(õïxbÊ9ÜG ŬIq˜NHZÊ$8 Ÿ—!б.‡ðúÆÃ횦á8 Ä,¯¸Œ²».Ý̪7áWøHaÎ3ZCĦ k­"ïJ³‚â©^êHZIZ)HÒ1ŽÜ€³68–Üœ¾‡«Å¢ÛZZxZ{I–]J8•ä´0G ó‰¢ÜÀÛ°*Ëýâù$/ ’¡—€"mTêþðæ‘ †¡ö’ö d)% 022NN@Âzg…|Bu/| áûË+‡ˆÅ´S,‘¬7–¼!™pF~L‘† vÏÅÚ¦»‰©]§öš›{&–×ÊxšÞ8^á3 +(òŽ ¸ûB¯˜ì‘®…â+Mie>›©=Þ£jþuÄaâµ½œÉçÆcvHÏ”Ø,3²@9(Ô…ãðOˆn®c›Â²F¸1iÁ¢…¥¾ÊI„‹H)bld‘¸†šœŸ´Ãö“áoÜi?Ù—€Ô ·µhä1If(ÿ¼å¤’J’NÛé:•ž¯sumáéã´±ÖÖîÚÞ'·S<Ãì€D<À«†°å>Lcæùk}ÅW7ÖwÛ$ú~» Io{‘ﻘK%Š7;û½ Á,¨Ãž’]ÃAð¡µh ’)V 5™S¸ÚÄ(Fî$€8æ94Ÿ†Pépê’éþM>gÙÛCl"vç…|`Ÿ•¸±ô®oÅ]Õõî¥}}á#[Étqº’ŽY’ð®$+¹ƒ§XØì`º‚ʾÄÚwˆõÞ¯Ÿ}köë·”Çgö6¿…|›x–˜´"60;0V,sèÀhjÃ#?ÚZW…,±·?i···mûÀuØøõÚÞ†¹øm¼7¬K£·‡|áKË]SO’ú9n„p˜ö4jñ°H$•G^¡ÁÆn|>Я4ÍQ'¿ðÌš|é¡Xؽã›v/,;–A˜äfà ˆ†qµA§¦øVëV‹ÂúW‰ü#æXXè’ØJòÍ‚9 À¡¸}Êß¹™ :‚X Åžà94Õµ øsN†d·¸yí`Ç$r´-‡*2¥Ô…$AqV&о[Åm,ÚW…#Žê&žÝÞÞÜ cUÞΤ™BüÄŽç¥S¾Ñµ9ôO¸ÒîåÄlϧ\GhoPA,A Ù"ˆ.ŒÈJ7*—nÃñ&ƒq¥øCćóg{¢81Ü^‰Í«Ç%Ìí$Î噤>pa³ïÁ@rÔa|8ÿ W…?ãïì?ñïoÿóǧúÏözûT‘økáôÚ¤Ú\Z'†P…7Ëh¶¶æT^9dÆ@ù—’;ZÏ×4½|\jéºLwmÖ,u$žK¥Š%H°d<ߘ áHØr a°Óo ºÿiÃsáËíNO7Q¹F}a¢´˜OçŽ8üöB³yd˜Ð ÈÁ‰p†ágŸ¦E›áKŸí¶³íàµuó ‘ÿ^2wHƒ0ªcOÐSÁ¿ˆ&ø}á…ŸN{¡öTDe‘mÝ’Cæ˜ßiÏË’2q ,pó71BÆR26Õ{ ëxkGÐãÐd±#Â÷ºdò¼¢¹˜Eó6Ç,C4,Å•Iýâ“Îí Lþkùb°ð>‡f²ØF—°AjÑH·3¼%Áü¨ÈWûŸÀQ¾ºоGyug&•áDº´ˆÏs [Û‡†0.ëŒªàƒ“Ç"°õKÜ뚆§oá#‚õô§eK«qpÍmtÒ9‘wÎÁ´0ñåì#§¯x*âëGÖ¬O†ïµ;É%¿¸¶™õ1ö@ó´¦&Ž—h‘|åÉ(˜Û#+3ÞØZøOÀwÞØü?áË"V‚o&Êòä_¼Ã ŒƒÈ£Âzf¡â›; H--cÕSd0F#Eͱ8QÀÉ$þ5ÐX"G§[GŸØ£X-®y „£>RGV?‡¿ä9âÏû Çÿ¤V´ÐQEQEQEQEQEQEQEWŸ ø V²I§Šéîõˆ­ÊÞM {Þêp<ÅŒ€ëœpÁ¸Ïœúröš‰4Ÿ‚Ã[Ò–ÖK»‹”Yô©$uóeyJ–  ‘œ”¹¦éiVí¼—nŒåɺ»–á³€8iˆtÎ:úšà×BñÆŠ&´²ŸMÔžïQµ:â0ñZÞÎdóã1»$gÊlÙ ”jê>Çãúèø&›ÿ’¨ûŒ?è;¡ÿàšoþJ ~'R³Õîn­¼=tЬl^ñÍ»–Ë Ìr3a‹ŽDC8Ú åÇáëû½;Ãv>!ð,ú…¦Ÿ¢Ia$k=«²ÈÂÝw Ò®Æý̸*I Èr²§qö?ÐwCÿÁ4ßü•GØüaÿAÝÿÓòUsúý–½âkÉ"ö0Üèš‚Mqs žqÏ4#’9‰¾à~rYR™ðÈ—Äú¨¾ Ô‰‚õkOQŽîxãXæýdϵ’ÆãcJ1* ¦î³ì~0ÿ î‡ÿ‚i¿ù*±øÃþƒºþ ¦ÿäªæô½7U·}ÿá»·qâ;ÝBí¼ËlˆåYÕ$}²ÇlñƒŒ"aÙwaÉàySAÒlçð}ö§w¦ý’ %ºÔ’xÝRXZco³XÝ!aȰȻv—Ùècñ‡ýt?üMÿÉT}ÆôÐÿðM7ÿ%P?5–¼…$ˆØ Œ©¹ÁÁþÔQ@ÜgŠ­mâ··Õü?  HãD•U ºÀqŠ“ì~0ÿ î‡ÿ‚i¿ù*º (ŸûŒ?è;¡ÿàšoþJ£ì~0ÿ î‡ÿ‚i¿ù*º (ŸûŒ?è;¡ÿàšoþJ£ì~0ÿ î‡ÿ‚i¿ù*º (ŸûŒ?è;¡ÿàšoþJ£ì~0ÿ î‡ÿ‚i¿ù*º (ŸûŒ?è;¡ÿàšoþJ«“y¦6§=ýìwW÷båÚ c."Ž ¡K¹é9ÏzØ¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (®~_Íý§eeáÝVÿì2¬3MÛ*o1¤˜dÊÇå‘{PAEsÿðêŸô&kŸ÷úËÿ’(ÿ„‡Tÿ¡3\ÿ¿Ö_ü‘@ÏÿÂCªЙ®ßë/þH£þSþ„ÍsþÿYòEtW?ÿ ©ÿBf¹ÿ¬¿ù"øHuOú5ÏûýeÿÉÐQ\ÿü$:§ý šçýþ²ÿäŠ?á!Õ?èL×?ïõ—ÿ$PAEsÿðêŸô&kŸ÷úËÿ’(ÿ„‡Tÿ¡3\ÿ¿Ö_ü‘@ÏÿÂCªЙ®ßë/þH£þSþ„ÍsþÿYòEtW?ÿ ©ÿBf¹ÿ¬¿ù"øHuOú5ÏûýeÿÉÐQ\ÿü$:§ý šçýþ²ÿ䊎_ÜÚ˜÷ÂúͤÜCoçÉ%£*4²,jHIÙ±¹Ç@h¤¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(®OOÔàÒµ?OqÛ£k ¶’Ü6~ÅlyXÕˆuÆ:zŠë+Ÿð÷ü‡dnATC…;œ€\Õµ²kZ¡´žE½»’1:O±"e‚W”¾B¶‚£‰W4ôM«ÜX¬öÛÁ©Ù6¡`épdf„óæ©E¾&….>÷ÍÀÝrûA7÷š]Ìš­ò6v÷Qªq!`˵³ùB; ÆI, ú„àÓ1äj7ÇÈ´k+ ÞQû -·åäù¿ÕÇÌ»ÏÈ9å²_T´¹£kévéW²ý’¦T™ãx~츌¶%p zŒŸ”–>"]§††³qáÙÎÑßVµ·ŽíÞ8Ä~fò@?z¬¤%A%U°‡¤¾ÐMš­õ¬ÐZKkpˆJ& 7ÏÙHÈç ãƒrúïf¶ð“[iwº­ýŦ‰q¤YÚ3[(‘%P£y(Ÿwl\†D:’Û€5'ñuõ¬Æ 8§K‹ñ›Ì”‚êf…„yªÊw %qÒFª÷^%Ö¤ñ%ŽŸogiQ믧ÝtO›ØÍ‘û®ÖÜFF0¹!‹  ÛOa3\Í©}¢é-ʽԨóÚˆ\É V1»¹¼ÂÇ;™ÅW±¼ÿںɸ–õo¥˜ÝüÎâÆ23d R26•@3æ´¹M\.¥©k:uäšš¼W‰3½•ÔpÉo´1HIO*"Ycgr@2`Æâí~; »Ñ£¼½¿Ö/¬bhobˆDóÅàyEr‰D-÷ÈŒìCàÛh&8Ôµ'³kÖ¿’ÅäF‰§3ƒd¦õ ûHUeS´dÎZ8ü:µäZΪ¿gÔ%¿HwÄcÝ!²m1œ/ï¦b–;Sh;ÞÛëo¦§‡nîÞÙâ‚ëìK,„LèˆØÄ"(<ÄËI$d ÇoutøÖá °´Õ. ¸³‰×FÔ£¹ˆ-Ħ5ýãˆþpÊ~\rb›š„lõ9ï„×—Éc¨s}c ¡#¹m‚<³óåD+ª¼ƒ–ÝŸuà'¼º’æãÅZãÍ'Ù÷¶ËAŸ"S,\?…ØŸ|àäq@'‹¯£¸’+Í8’Òö Ùb¼Þ«,æ?(C”@<èË–íÉÛ¿sÆ_ò¶ÿ°®›ÿ¥°Õ{¯­×öŽuíV?·jê°[þîH¶ì ˜Ê<¸¸9'ËòÛ¬xËþ@vßöÓô¶è(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(®OM¹ñV³Íݾ§£[@··VñÅ&—,¬)äˆÂáA$&zµsì~0ÿ î‡ÿ‚i¿ù*€: +ŸûŒ?è;¡ÿàšoþJ£ì~0ÿ î‡ÿ‚i¿ù*€: +›ž?ZÛËqqâ/ÃH^I$Ò%UE$’n°æ²ì|Ay©ÞGgaãßÝÝIÁfdvÀ$áEÞN'ð âŠçþÇãúèø&›ÿ’¨ûŒ?è;¡ÿàšoþJ ‚ŠçþÇãúèø&›ÿ’ª9ãñU­¼·"ðü0D…ä’M"UTP2I&ëÎh¤¢¹ÿ±øÃþƒºþ ¦ÿäª>Çãúèø&›ÿ’¨ ¢¹ÿ±øÃþƒºþ ¦ÿäª>Çãúèø&›ÿ’¨ ¢¹ÿ±øÃþƒºþ ¦ÿäª>Çãúèø&›ÿ’¨ ¢¹=JçÅZ4V×wžs^ÚÛÉz\±1YgŽ"C†€ùèzWY@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@cßxOÃzä——þÒ®î¤Æù§²ŽGlXŒœá[P?ÿ'ƒÿèTÐÿð]ÿGü žÿ¡SCÿÁt?üMtP?ÿ'ƒÿèTÐÿð]ÿUïþx>ûN¹³ÿ„sJ·óâx¼ë{RH÷7#má†rc[š–«c¤[¬÷÷1ÀŽâ8ÃrÒ¹„E»œ*‚O`k/캦¿ÍÿŸ¥i§þ\¢—eÛ‘ÝæŠBsÎÈÎNÕ%ðÍaøoEðN´—¶¯áß >§¦Ü=­ìvöP¬…|`í£vܧrY/Á~Ô¼AªÝŸ hßc´qcmØEå»Yr w0‹; ˜Væ·¥ÜZYÛ_øvÊÔtÈŒV¶…ÄQK)¾˜Lˆ×iã ‹“·p:&™ý£ÁdÓyó.é'Ÿnß:gbòI·'nçfm£œ  ÿøA<ÿB¦‡ÿ‚èøšãÓÀº&¯k7‰ôß éN§Ë¸Ò¬¤IÜ àH¤aZS+IùBÀYrŒ§´ñm†¥ªø~]?MŠÒSrëÊ]NÑ+Û“ûÔ ¨ä\¦@o,@Î|š÷Š¢Öm´¶Ð4o>âÞk„a¬K´,m°?èÙÎe\qØôî%„¼¨ÙÇukáH_ ¦Ä¤Hee* ° ‚¤ €Eeø“Á~ÓRËW‹ÃZ2Åip‹wØ"Öò0Ggùp¢<¬¥ÈÈ0ʆc[ž½k¬ßÉ{g¦Úi·($K{KןeÆæ28 0$Ê[»Ü¿±·Ôôë› ÈüË[¨ž“q‘ 29ô ?Äú7€ü/¡Í¨ÝøgÊÃ÷vñÍkBiÜq\.OV<(ËM\ÒþxVÆÁa¸ðþw9w’IŸNˆeË ‚Ul*äíP£'«Óuspu4r_Û#ÙZ¼d ðå7ÌÊ£åhÃíÉ¡`ïÝ'öUæƒûÍù¶+óI¥ÊŸbÝÙ±HÏîþUÊË5ð‚x?þ…MÿÐÿñ4 àÿú4?üCÿÄÖ†™¬Ùê¾lp¿—woug!kf9À‘A8ÎʰåK)èP?ÿ'ƒÿèTÐÿð]ÿRAà¿ ÚÜEqoá­âpñÉ„JÈÀäBäyÍnQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ÿƒäsÿa]KÿKf®‚¹ÿÿÈçþº—þ–Í]Ééw—Óxc×î.ìîÿÙ,c‹e¤ƒJ yÏ·ÌùY•]æ*ºÊ(“Òï/¦ñǯÜ]Ù݇²XÇËI”óŸo™ò³!*»ÌT5eøÓQ Ò'Ö5K±:UŠirEn±Éi3ÆÑç2o !F ôc‘°dîï'‚«ymî"Žh%B’G"†WR0A‚ã‚ü+låàðÖ”d,–)*ÊU‡ Щ Žà‘@|zæ¹i¥ÞêO¯Éuý—£ÜÝD’Á‹WdÞVáq‘ùßÄœíÛ$ûšÍÆ­ è·ÚëŸÚ7ï-œP‹Å‰&ƒÏœC¸˜ÓhS’T˜Û ¬NñòËo h6Wך&›ö¨RÞH­QZ%‰@Ê‚]ÉûÇÔÔ–ºc§O§YéV6ö3îó­¡·DŽMÃknP0r=Epö·ž*>(±Ð5?XÛ,ñ]-<©î‹Æ-Ü)‘£Dó6ÊÇh„b<’ë–úî§ö-kÄÑêñÚjW^±¼†Š6ˆJRæR±©ÃrË671`Á@¥Ï‚ìæÕ¬ [éI¡ZÚMlÚIÓGó$I ˜(ÃÅaþ.äؾд}NY%¿Ò¬nä’!¼öé!hÃI¨`23Ö€9»ý_STÔnã¿‘ °Ö,´Õ²Æb•&û6çrW~ñö–ÆÖQò&Aù·WÐõM|\isjZ´wmÖ/´×‚;UŠ%HÉW—ß˜åˆØpAa¼õ‰¡hñÞZÞG¥X¥Õ¤B i–ÝÃFÆUpHÀã“UáðŸ†íþÏäxJ‹ìÒ™àÙeùR¹uÀù[ä^G?(ô— ^_Iª,Z}ÅÞ£áý‡wÑm(„E)!§LmÃ`Á™¼ö#i4 Ëé5E‹O¸»Ô|?°âîú-¥ðˆ¥$4é¸bŒ37žÄm=eQEÏøËþ@vßöÓô¶è+Ÿñ—ü€í¿ì+¦ÿél5ÐPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEŸ©ë6zW•Ïæ]ÜdZÙÆAšå†2IÆFI¨动$hVúÕÍíĶZ Ï,Ncžòä:ÛÂAÚv?|á³”B(ÊÏÀ1ÿgê:÷ͬ±éç츤Y>Чœ\6ß 1¡ÛÃiU°7 ‚­íâŽ"@‘Ç…TP0€ãŸ¦èpØ\5ä·Ww÷ì…êî@Ì#…U# Š»¶©l‘šÔ¢Š(¢Š+Ÿ¼ÿ’‡£Ø*ÿÿFÚWA\ýçü”=þÁWÿú6Ò€: (¢€ (¢€3õ=ÏUò¤™<»»|›[ÈÀ[1ÆJ1ÀÈ9V0e$ÿí[Í÷zèólWåT‰Kp9ÍÂ*â²Ýü¬O••Zè( Šçÿá}÷¾h,—øôùC}’@9Â(8‰Ï΀™‹#œbæ›®Ûj e"Ie©¢Oºdªdà+0d92’3•$0 jQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEçskZ†‡ðë[»Ó¬.ç.5™æÛf[©Ê»‰3Î7Ý!ðåγŠt¯·\İÊÇZ …•3&Á‚Iï7÷Ž@ cCÒü;mk©éZjÚp½Üiûé’[˜ãJçæ—r»gyo› ÷€#Ÿð…,æÔ‹Iá==6 BþXuT •šóä¯ ¥p,@Ñò‹OáÖyÍ¿‰t ÑgÈŠMŏ ‚?uHR<)*6(Â’£‘Táÿ…e—Å6;;Á/‰¥’) 1gßLUÃK6Ns“@¿‰§ñz4×z1¸·¸‘ïZ;F ÖÀFSËýù"S½wMàž<³4–¾$Ö#ðlþ+¼ŽÆ{Ò›S†Öx¤‹÷~bÄÎK 2 ÀLÎÓ»åÏ·Ÿá­¯Øü¯X±Ý½ì¼Fí¶gûìs1Ýœ¶AÈùß³b×Rømgçˆõý ãš&€Ã>ª“F‘7ÞŠ4w+g@…QŒ(ÀtñŽRûN±¹ÑìmþÛwöu»»<~æi!Ši³·ÊÝ“"îÈ@—Yëö£â-âžÓbÙj±KhUÑ.&·¹Žû·6ÀÍ´Œ«”Æ_vF>¯'‚æºÒËĸ·Š÷í³_ø‰žãhŠHÐG#|¡™¤_™v²åpX°Øžóá¥ÊY¤ž Ñ¿ÐÒE„®²‡˜ÊÎÌD€³—U}í–¡Á 3@í¼[©GáX/l­ôÛh4ïZê÷6ËnÛeWI“@ ÷Ç/Í Þ%×¢Õ56žßMM>ÇX·Ó„h]å™gò¶ã€…|ðdžÝÊ|»wµ4›áŒvv¶‹â([ÛD Xÿ·N$ˆDRþ÷÷±Ì>å˜"‹‰þÝ}³ÍñE‰ûeÚ^Ï·Än»¦O¸Ã ¸Âà ‘8ùŒ¿ämÿa]7ÿKa®‚¸x³ÃzžŸggaâ *îêMWNÙ ±Èí‹ÈIƒ“€ ü+¸ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ŠÏÔõ‹}/ÊÒ{‹©óäZÛDd’B1ž ¹* ±TR˹†EgÿaÜk_¼ñ/‘,¦‘Ú:3³"´­Ôà€ƒåù rn\k_»ðב,®¯(Ú:ª*º´­ÐdƒæùË!C¡¦höú_›"<÷SãϺ¹”É$„gžrX„P¨¥›jŒšÐ¢€ (¢€ (¢€ (¢€ çï?ä¡èßö ¿ÿѶ•ÐW?yÿ%Fÿ°Uÿþ´ ‚Š( Š( Š( ©êZ]¦­n°Ý¤„#‡â•â’6ÁGBN ‚2ބйEsÿmÖ4?ù §öžž8–9¹NËæ@·ôåãÇ,?vª È'†êÞ+‹ycš P–å.—û2C݄ͧïÜvC)xd´¢¹=*ÆçZÒíõ+øí.S|Nö–‘–^ÇkÛƒÔr0GQ¥ÙË­X-þ›ãÍfêÑÝÑ&Ž+"¬QÊ6Ù¹”ò8=FG4ÔO<6¶òÜ\K0D…ä’F ¨ d’OÎkûCQ×¾]ýO<ÿjKÉö…kë{{Ñi7¼@Ž× j’o*I™ÂÒ_²ìw H*¤•ÚùÆÆÀY¦hÖzW›$)æ]Ü`Ý^Hšå†pd`q“€0ª8PªÍâß\¡x;™¯UG=ËîHM<)ª KÑî/WÄ v¬<”³\Nì%?)?kUf8Žáq÷7.ŸRÓÒ—«Èt»—Ö­ekkÉ <Í|A¯hä‘“`ó—8í?á!Õ?èL×?ïõ—ÿ$Qÿ ©ÿBf¹ÿ¬¿ù"€<î OPÔô½YüU&?°¬äµ’î+ƒ-ÕÙó¦4Æn)ÚË(mèBáþ~‚kMP6ºmäw .°É&ƒ} ™|ÁvD—çïY<É‹ ýÙÅ´íé?á!Õ?èL×?ïõ—ÿ$Qÿ ©ÿBf¹ÿ¬¿ù"€<þÂçN·—GÑ ñ-õ‘“ĺŒp æÌªZä*-»åˆ¬•ÎÑêæ³5í—ˆµ&»³{‰4ý:–æúêÜAc m.É‹1™|É"‚–ù>^ÓþSþ„ÍsþÿYòEðêŸô&kŸ÷úËÿ’(Ìæñ\1 Ëü_i§D·\±5Ÿˆ [}Ë$ÿ¾¸]ؙʂxw ±>¹c¥\j²¯Šd ¤ë¶v6ñO©ïX¢Áç‰712ºäfRÛ<¦Ù³a®ÓþSþ„ÍsþÿYòEðêŸô&kŸ÷úËÿ’(ñßü“ÏÿØ*ëÿE5tÅø—PÖµŸ êú]¿ƒõ•žöÊkxÚI삆t* ÅÁ8Éô5ÚPEPEP\ýçü”=þÁWÿú6Òº çï?ä¡èßö ¿ÿѶ”ÐQEWéþ+ß ü&«Ü“Ée¦))§Ï4~\oó¢•ß´¶9'o D®_Â66ú‡Ã_ Ãu™éö3¸Œ‡ƒÐŽÆ¼ïÁ:†©¯‡ækmUWSÒˆ2jºíï”’ÆPù’´JQ.ª0FA!@ôÉãi­å‰&’t*²Æ²>ðÜÈëÈ#ÔçôŤ67Õõ+û}-ÙAuä…„ˆÌAŽ4f!—æ$|Äã ›â›ÍSû#ÈÓ _í]µ87Ý‘¶Aåf&Äg ûåùÆOåéž.Äx–ãCðÍÙy%“ÄOÚ£mzáLZË8d+ërí’ËÚ<¤Q•fÇiià{;+Ë[¨5MU$²´–ÊÈ ²Ú U6í}› Éà¹r©¶KÅkeáÛHõ}KËМ5¾|œÊÂÉû¾@™>]§ ’Ka€6ß'Ñ4ëÈ`е]RÓJŠxÛù¦IZØ2¼“HÑB“å–GbHù7«±«xÃSÒ~ɺo¯<Ùadšm'– Á…d̪6€ÉÁýáà‡‚`¿³¿±Ϋmayç´â1c)ÆY·o“‡,£~T)T+¡{ ›Ï±Lš­õµý¤M¾„Bdtm¥Ã+FÑüÆ4c…+Æ €rúωõR 94û;ëXu]6+¦iV)Õ¥x$1Kì™Uоíÿ)R›‰Âš±ðøÕTÔ.çÓÙõ+ئºšK‡·ŽÖå¡‘ b[`O ¨‰>i'•¹àM:ÿtmªÅlòÁq$Þ2ù“Cå…‘¤ÿX[lH§çǰð-ƒèñé···×ÑǨ> ¯;F­½ÙŒˆB"«FþdªÊÀådaÀÆ9ÿjÆ›«Ë¬³Ü]jZ¨·¹ß»‹) ‚]˜âæ_,9™F6røÈ¯­øŸ]6×½£ý–êXÈ\‚9­nbŒÌ¤Æ ¶7qÐ|»˜ž±¼º½»¾¤·7¢ú)G“›YDFÆ<¼bù0áøá¾jÏ tÔI¡VÖE¼Ö÷¶ï Ü, ­Ón”î‘YÁÈB0ÝP’Î\Ô¼]w¤jWi'‡®çº‰4ØäX/‘£o´K$yŒ9Q…`Wq ÎJî ªIwã;‹+Y…Õ®•gumwö[—½Õ„ŠþRJª’˜÷;2H¤,}Ù2x]Ùþ$ð}ÔVÒÜYÏ®kÝËcð ˜#"8nDìêçËeneÆ×Pª«³px>(Ü]C«êQj…Ý¥Ô—É2ÊcVVSˆ CùPÝŽymÀì¼e¨ëw‚ @ßiöº‚Ox°#G8rd`Ãf1Œ? /Ÿcu¬hÿuJâxîï%F¸û-Ü‘¤àÚK(.©±[-lT‚*2¤çsÞ‹ÃWXu}JíÊŠëÉÚ±D[Ëdjr»Üd“Ç9ÀÄv~ ‚Æ×C·‡YÕvhò‰aÞñ7™ˆ¼•V<’¸M¹ÜXåÎꯧxÖöóÈ–Ïo ÅÝÕŒýª7ç‡Î$m`R°0ÜdáøÁ\Hiˆ7ßð bM8ŒÚ;êö°=÷/B3(r„8•Jcvá÷¼³ÀÐOÿgÛÙ˯¬Ý¾{>¥Cì¡§–@ûÐæ5>d r¸óO# ¶Ÿ„¼‰á+]r+ã0ÒŽ›-•Õ¸UfTxÉ%\Ƭ2í´`ÊО'ñ.µewwa¦ÙÚ mî4¶I¤º#ÍŠâàÄÊG”ÛNèÊñŸ•÷‘´×ñ5¥ÉºÕšÿRÖtÈçMš~­c3›{41*‘,JØ7œæWL*²þõ.Ý |mq5ÕÔúÖ³-ýÂ[+]4é•0MçFËÏ(Øs€YËI/ìäkõMSUŽ×QÚ·ÖÆàH—"Hv1‘Y†Q9u`çq%Žh|ž,ÖtÉüA%Ö•öèmµ»k X­.:¤©]áYTõ?4…I »êMWÆÚ†‘{„Ú—7‘Û­ÍÜVâä*3º ‰’ȸ“ÊÀ FJÜÔ¼£yyrºÎ«j×WpÞ2@ñlY"m!Z6˜!?6HÙ€@g ¡¨x}/µ{¡}e$±,"ÑÕ~Ñ–*¥Š–Ly’|Ñ”oœó¸æî~$ DÕÕ¬-.nì,§½vZ”sKÄÊ.…Æñ¦O»& *\¼ñ–£aý¡öËþÏ´•×úbŸ.ÐïÀáy¸ýÓþìf?—ýo#1Ý|9·º·[Aâ f4²—N†Ú?³mŠÖ@¢¡,F#A¹‰o—ïd’n_x-uíO´kÚ«iéñé÷ã÷ižGî¸c¾\žŸ¼l…ÚÔW?àOù'žÿ°U¯þŠZÜ‚6†Þ(ži't@­,C9ï  ž¼=¬?É<ð×ý‚­ôRÐAEPEPEPEPEPEPYzÖ¥5šCk`±Ë©Ý¸H#pHUÜ¢IX>HÕ·W'j ëZÏ ­¼·Ç !y$‘‚ª($“ÀsšÇРšñß^¿ŠHî.Ð}šÞe!ì­Ê©òˆ=˜o~3’–©  +M‡HÒíì i!L% ¼­ÕÈs³Ì{’Oz¹EQEQEQEW?ªÅ=ywâæÁâVÔâXÁÿHP>óáÇ,ȉ´æ0ÐQ@ÏØÿÅ=©Ç¥?mì¥tÀ½-ØFY­ñÔ.GC÷@Êa n‚€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ çï?ä¡èßö ¿ÿѶ•ÐW?yÿ%Fÿ°Uÿþ´ ‚Š( ¹ÿøA<ÿB¦‡ÿ‚èøšè( þOÿЩ¡ÿàºþ&øA<ÿB¦‡ÿ‚èøšè( þOÿЩ¡ÿàºþ&øA<ÿB¦‡ÿ‚èøšè( þOÿЩ¡ÿàºþ&øA<ÿB¦‡ÿ‚èøšè( þOÿЩ¡ÿàºþ&øA<ÿB¦‡ÿ‚èøšè( þOÿЩ¡ÿàºþ&øA<ÿB¦‡ÿ‚èøšè( þOÿЩ¡ÿàºþ&øA<ÿB¦‡ÿ‚èøšè( þOÿЩ¡ÿàºþ&øA<ÿB¦‡ÿ‚èøšè( þOÿЩ¡ÿàºþ&øA<ÿB¦‡ÿ‚èøšè( þOÿЩ¡ÿàºþ&øA<ÿB¦‡ÿ‚èøšè( þOÿЩ¡ÿàºþ&øA<ÿB¦‡ÿ‚èøšè( þOÿЩ¡ÿàºþ&øA<ÿB¦‡ÿ‚èøšè( þOÿЩ¡ÿàºþ&· ‚­íâŽ"@‘Ç…TP0€ã%QEQEQEQEQEQEe뺔Ú}’Gd±¾§xæÞÂ9AØÓlfÈ#ªŒÍÎp¤.X€@)ÝÄÿ\ûçMÓ%I/?„½ÒùsB€õÚ ¬Œd˜À$y‹]SÒôØt›´…¤päy$ ´’;—w8e™™°8 ¹@Q@Q@Q@Q@Q@ï¬mõ9-n£ó!| ‚ ²°ÁVA‚¬ýúàùšF¥'™ªØÅž` -Â6à“8]æ7Ê +Wk6Åeëzl×–ÿiÓÚ8µ{dsg3’qrLLLB†ÀŒ2« J*ž›©C©Û´‘¬‘I˜ç·”$ G‘œA‚e%H&åQEQEQEQEQEQEQEQEQEQEQEQEQEQEQX÷Þ,ðÞ™y%ÿˆ4«K¨ñ¾ïc× •'# ƒøÐÅÏÿÂwàÿúô?üÃÿÅQÿ ߃ÿèkÐÿðcÿ@ÏÿÂwàÿúô?üÃÿÅQÿ ߃ÿèkÐÿðcÿ@ÏÿÂwàÿúô?üÃÿÅQÿ ߃ÿèkÐÿðcÿ@ÏÿÂwàÿúô?üÃÿÅQÿ ߃ÿèkÐÿðcÿ@ÏÿÂwàÿúô?üÃÿÅQÿ ߃ÿèkÐÿðcÿ@s÷ŸòPôoû_ÿèÛJ?á;ðý zþ aÿâ«ëÆžoi7 â]Àšeê<‚þ-ªÍ-©PNìB±¾Óé@åÏÿÂwàÿúô?üÃÿÅQÿ ߃ÿèkÐÿðcÿ@ÏÿÂwàÿúô?üÃÿÅQÿ ߃ÿèkÐÿðcÿ@ÏÿÂwàÿúô?üÃÿÅQÿ ߃ÿèkÐÿðcÿ@ÏÿÂwàÿúô?üÃÿÅQÿ ߃ÿèkÐÿðcÿ@ÏÿÂwàÿúô?üÃÿÅQÿ ߃ÿèkÐÿðcÿ@ÏÿÂwàÿúô?üÃÿÅQÿ ߃ÿèkÐÿðcÿ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Ï<6¶òÜ\K0D…ä’F ¨ d’OÎkE‚kÛÙµëØ¤ŠYÁio"a·Ä6*òü®Ã @« ÆIPÿ‰ö°teçO´Û&¥žRãr¶Ûcø Ž )E!–SŽ‚€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€0õ(&Òï×X°ŠGÜiÛẖ̂„ Jˆ92©9hÁ\;,`lA<7Vñ\[ËÐJã’6 ®¤dGÎjJçáÿŠoQ·².‰s”·-÷læÊ„„ѾNÀp—`$æ€: 'R‡YѬuKu‘`½·Žâ5Á]CpHΩ®Hñ¥'Œõ}TŸdŽãÉÓæ‚&ḆG3G!f ¾É”®ß¼"•°­ x[Mð¦meekh“¥¼Q\ÜÃl±5Ë"ã{ã’IÉ䟼y¬yü;¯K.¹w Óm¯ÛSMGI™¥y”2À°•v®ÆŒ§±æ’9@Hz§—ÅzœÍ:4RÃkg²ÖW™¦yå·ýã©*‹æÛÈÀ]ÌU~_Þ pu‹ô7·y£»’@®ª©¼¯$Û*Ñ ]Ò£r)äˆóýsF×´/³jÏ£%ž›á{½-¤ŽéÃnx¢TÀdÉhºÿ­Ú)—é%Ñu½[ÎÕã½±‘®¢¶ˆGc{,ÞÁœÊâtáÜÓ‡Ú›øŒ.öHØ›ÆÞ†[h¡¾êæ&š+X¡’IÙU¶0ò•K† ¸#pØù#cŸ½ñä÷v›¨YÝØèÖ“ê·:mÄÚŤ¡SË”q¹âÆ|9Ã>ÜîB žð߈t_O{Ëm5líSPBÉ©M<¤\γ¿,T RKe²[¨Áâ«[‹&·‡Fž =bóP$»–&e˜Üc,"aœ\ôÇWÞmÿ Æ“âÛKŸ A«]Í‚K‰­ck(Þoµ4r:o‰s0a“hݵsÉ Z®Eâ&yV(¦žIÒKÅD´”’‘°IÖ+¦?¾ Á\Ö?ü#ÚÇ™ý¯²ÇûOûWûKìh'þ=>ɳÎò÷}ßÞgËëòãø¨¶ðÞ±§½…휖-|¿o$Ìþ\_k¸YÙ”™<²¡B›ÁÎèúPÄñ÷…ätHõhäv·Šé•#v1C"îY$Âþí6à³6†RØÜ¹Ä~.‹Iº´²³h$»“P´µ˜L",²¢²«ÚÓlpÂ2Á¶ø*0y»_øªßÃZ–“(Ѧ{[èÑL·2ÆF$]̾[pvä˜Æ~SSð߉.þÖ¶riVÿnÔ,õ9žf’o*H~Î%Prþà0rTœíÚ¹Þ6ÆÞŠÎêò}Cȵ¶ˆÎÓO ‘¤±‚ø™” —, ÷½1÷—$^4Ñ'¼[X^úY)'ˆÇ¦Ü²MYãqÙ•ÁRCnP2XgÔ<⻵…û Ì×:UÞ›-ÕÞ³rÞkOåþøBbd‡˜ÉòÐíù€ÎVÇ$ûlZf™m©A§ø¶ç÷PGo>é9U–vqš4Eyùx#î ‘ø¨Þk:MÍ¥í¢xvïL¹¿’[«Y"“lMî ì¡P‰Cd§D'$0"Ä~>ð¼º\Ú˜Õ£[­þÓö‰#tG€JQæ̪ʹ*Ì€Ä .´­JßĺmÞ•c¦>ÇL¸´Hšá¡!œÆÈª«ƒÈEÎxH( ÅøƒGÖ4OÆÚÒ¢µÓ<)y¥O*Þ¾ZGHÕ ˆ“ cƒ™Ú7w‰âýDGK¹â+uao) em±8ùy‰ØaeÿVǀƫÝxÓO‡V±ÓáŠîi.57Óf"ÖaäH°™r~LFÌ€U‹‚UŒó¡êZÔWZ«Ýi²Opš{Zµ¬ŒÐ\-¬ípŽ[ ”¾0<̓4*¸ð׊¿´ßRkÏ}auˆ v¦ÈÛ6OY ’¤ &í„îMûPä:çˆ/ïîFŸý•'Ùõ¶¹Ód ·6Ðyû ìÛðÛãV‘T¢pà‚ûpòY|BÐæ°ŠæöY,$¸½¹³¶·šD³´.ÃäB˜£€„|¿9´?_ßÛCû*O³ê sm©FYnm ó÷ˆva·Æ«0táÈ!öåëÛø{Ä–úŽ›òiOci­ÝßÿÇÄ‹'—1¸çýY±s÷xÅ÷ŽÿroèvÎæîKt­$ÓÛËPnPʳHÊ' ¯Èå[æ^>a˜åñ·‡m¬Úê÷Pûk,p‘ –®BB’*¶Ó†ù±·äsœ#cSðeÅÆ½©_YÙhj¾•.!Ö.íÄ×6±$j#Œ¦ À™ÏÊvüÙgÂ>(Žîêk{-4%ÃéîVëÄwL¦Öá¦á䄜6í¸è¸'œ‘@„/Ðîn"·K¹wp¶òÆÐ3 ˜2ƒ r@A&Ýùwf£ñßü“ÏÿØ*ëÿE5cßh>$›ûkȵÒÚõ»MB ÷Ò/îàòrœ1û2ð2˜yùíÿÉ<ñ/ý‚®¿ôSPAEPEPEPEPEPEPEPEPEPEPEPEPYzî¥6Ÿd‘Ù,o©Þ9·°ŽPv4ÛrÂ*£3sœ) –  ç†ÖÞ[‹‰c†¼’HÁU ’Ià9Ícè°M{{6½{‘K2--äR 6áØ†Áå^_•ØaH5a˜É ^›“`¶´Ž¼$„’Grîç ³36gW(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ¯co©é×6‘ù–·Q<3&â7#dr2 éV(  }&úá/'Ò5)7ÝÁó[ÌÊÞA…ýî˹Y¶8^à6ÔYkb³õm3ûJ()¼‹ËI~Ñk9]â96²|Ë‘¹J»© pU°ÀÑõ?íK7y!û=Ô½½Ì·äSƒÎ*FI²:¶q@QEQEQEQEQEQEQEQEQEQEQEQEQEÏËቿ´ïïl¼EªØ}ºUšh`KfMâ4#Ì…˜|±¯zè( þíSþ‡=sþüÙò=ðjŸô9ëŸ÷æËÿ‘ë ¢€9ÿøGµOúõÏûóeÿÈôÂ=ªÐç®ß›/þG®‚ŠçÿáÕ?ès×?ïÍ—ÿ#Ñÿö©ÿCž¹ÿ~l¿ùº (Ÿÿ„{Tÿ¡Ï\ÿ¿6_üGü#Ú§ýzçýù²ÿäzè( þíSþ‡=sþüÙò=ðjŸô9ëŸ÷æËÿ‘ë ¢€9ÿøGµOúõÏûóeÿÈôÂ=ªÐç®ß›/þG®‚ŠçÿáÕ?ès×?ïÍ—ÿ#Ñÿö©ÿCž¹ÿ~l¿ùº (Ÿÿ„{Tÿ¡Ï\ÿ¿6_üGü#Ú§ýzçýù²ÿäzè( þíSþ‡=sþüÙò=ðjŸô9ëŸ÷æËÿ‘ë ¢€9ÿøGµOúõÏûóeÿÈôÂ=ªÐç®ß›/þG®‚ŠçÿáÕ?ès×?ïÍ—ÿ#Ñÿö©ÿCž¹ÿ~l¿ùº (Ÿÿ„{Tÿ¡Ï\ÿ¿6_üUïü!w©é×6ž.×$µº‰á™<»1¹Ã"ß# ž•ÔQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@V^»©M§Ù$vKêwŽmì#”6Æ`\‚0ЍÌÜç B刞¡ÿí`èËΟi¶MK<¥Æåm¶Çð>RŠC,§SÒôØt›´…¤päy$ ´’;—w8e™™°8 ¹@Q@Q@Q@Q@Q@Q@Q@Q@Q@aëpMcqÿ ”RM=­»¥Í¤JK]ÃØP92©ÆGÎëòù›×rŠŽ ặŠâÞXæ‚T‘°eu# ‚8 ŽsRW?ÿ"æ±ë¦j·AipËÿ|ˆäeö>lŸÅæüQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW7â¸Õç‡,šâî.µ6I¾Ës$ ê-nѲ¶7"œg° xSEk‡·[ýdΈ®ñ^îUbB’<ì€J°¾Óé@%Éê^ÑtËu’KK$Ž#‚Þ-vôÉ<„˜ àI 1 ô7HÕu½=áñ]å¤QK4WzÕØÀÈ · ­þ¬œ© d î ¸¢¹ÿøCt¿ùú×?ð{{ÿǪ»øoCQ†Á¯µÁu4RMn_|È…ù¸àÈŸŸ± ¢Šçÿá Òÿçë\ÿÁíïÿª÷Ðí'´†{íq$»”Ãþܾ;Ü#HGñò£}=q@EÅè:>•¯XIv±xžÈ%Ķæ;­zçqhÜ£‘²á†+/_á'¦ Ôÿ„7KÿŸ­sÿ·¿üz€: +Ÿÿ„7KÿŸ­sÿ·¿üz«ÜxoC´žÒïµÄ’îS ûrøïp!KÇÊŒyôõÅuW¦i:.±¢>©cÿ ; yÑ`}jö)]¢vŒ¯8ÚK!Àb¸ÈÎÞqŸ£Å§ë#M™4oÁg¨ xnå×fh˜̊\%Û2‚+Ô€pMzóÃko-ÅıÃH^I$`ªŠI$ðæ±ôX&½½›^½ŠH¥™ –ò)pìC`ò¯/Êì0¤°ÌdšóøEº·–Þâ]fh%B’G&·zÊêF Ë‚ã'ü!º_üýkŸø=½ÿãÔÐQ\ÿü!º_üýkŸø=½ÿãÕŸ«èº‹´·3øÖâîDòu›çÃÊá±óp«“É$z ’ì(®þÝ/þ~µÏüÞÿñêæõoì-.öîÍmü]w=«Ú$‹µt ›—di’á ÊH‡£môJ+‹Ò´K=Fââ ?ÅÚkˆàÝë·d X|­Ë‚FÎFA_QZŸð†éóõ®àö÷ÿPAEsÿð†éóõ®àö÷ÿQÿn—ÿ?ZçþoøõtW'oáýõK;\Dn%·y]½QFήX4À ð$™"çü!º_üýkŸø=½ÿãÔÐQ\ÿü!º_üýkŸø=½ÿãÕNÛMFñÖoiu©4eãËÖ£=Ê–Im‚%v€î21ÔÐYEqz†´gÄž*¸Õ4M6úuÔãE’êÕ%`¿c¶88É'æ®XxKÀúžmgáK[¨’h_û6!¹§r2ë@EçzF™á[ÿjú ç|?jöO‹i’Ú)EÊ…ÜãË ¬ðdä¹Á;Iªöqø&m{Z·ºð‡†,´}1ÿiÜE ¤xˆØÑ€ K©’Ü•R zeÅɤü2…áItÿ£Íoö¨•¡¶áÚ[Ì^9MªÇpãžÕOIÒ|¬ø†îÎÏÂ^¸Ó!´Šæ+ûhá—ÍÞò&Ý¢-£  ç¢ú Erwžø}§ÜZÛÞèž¶žíö[G5­º4Í0€Œ±Ëê=h‡Ã_®oM”'†%»Î`K[vpªæ6;@΂¤ö Ž´ÖQ^w«?ÂmÞùî,¼"ÓÙ$†KHâµ3–@rüŒcŽx© ²ðšäöøcÖöþU¤–wrAm²ôÜy»Xÿª8îÜà`ÀäðCuo-½ÄQͨRHäPÊêF ðAb±ô‰æÓ¯°o¥’ivK=•ñc5º¸XžwÇæF„±%ÁVÉ%Âñsi–nÕ-¬þx6f²»kXRYãŠK§òVuTSmÅp[‚œ Õ±5‡ÂË´yöž ‹ìÒˆ'ߪùRØFÏÝo‘¸<ü§ÐÐqErqøkáôÚ¤Ú\Z'†P…7Ëh¶¶æT^9dÆ@ù—’;ZŽ- áÄßnò´¯ IýŸŸ¶í··?fÆsæqòckuÇÝ>”ØQ\\š7á¥Ã¨A¡øbæ ‡ò­ 6ö¸º—"Žœ• õ¦ WÓt߇×Z6‡{{áï ióëñKmm5½¸ggU;* \qÇ4ÞQ^ªiž ´Ö¬ô{øröúy^WÉ·AjþD“F%Y×xŒã冤µÐ¾_iÓê6zW….,`Ýç\ÃonñÇ´nmÌç  ŠâΓðÉlý´ÿ‹7Ft¸0Ûylªá†Æ ʤö,SUî4߇Ñêš®“‡¼1ý¡§Y-ä©=½¼hªÛ¾óm%Ú¥‰_”H‡œÐyErrxkáô:¤:\º'†P™7ÅhÖ¶âW^yTÆHù[;J!ð×Ãë›Óe‰á‰nÂ3˜ÖÝœ*¹ŽÐ3€à©=ˆ#­u”WâO øoLÓìï,ôÜ4WS´*ê`š,Tre§cQý³ÆôÐÿðs7ÿ"О"‚o7GÔcŠI£Ó/MÌñÄ¥¤1˜&ˆ”QËe TrB¡› sõ»»w÷-o¦Ý‹qjXM ¤·0,ènA”>Ï,2í#tŸ0AR÷>Ùãúhø9›ÿ‘hûgŒ?è¡ÿàæoþE .M"ÎãSÒcþÈÔ“D“]wµ´ŽÎâ(#¶6B7ó!U4k‚A( CÊ;“'‡ ˆx“C¿>¾f‡ûRÎ $Ó&·ŒÝFÖã2*ùq­»>Þ@ ½ùaöÏÐ CÿÁÌßü‹GÛÙãúhø9›ÿ‘h@ñ'Øty­bÒ5™oæÔîÚeÒî¡B&»‘£g‘¢Ú‰µÕ˜œ•à‘¶¹?øo̳ñ$×øŽmn_·þîÎÇ $ndê× ’hðÐ(Hà|¡”,m³Ò>Ùãúhø9›ÿ‘hûgŒ?è¡ÿàæoþE /W’ÏLÔV:”:lÖú\‚7°¸ w3\‘*ÈY2ï"É HHy$r…*Ž£C¨iúµ¿† ûrëbâ[ =-ÖKXþÇ$qæÅym4jâFT@äóò®âù|O¨ÙÉkuáíH_­Ì¤AVVÀ«  €AU}2ÇÄZGšmt)¤—æ¹ñÕÄŒp»ä·fÚ2Ä.p 1$ä›ÓÛM¸Ó5tÒµ”¹—]ÔZîa¥]´¿ecpè¤ye„E¤‚·~[•È“Ái¤i‚+/Äw—ZU­¦¡iw§]ˈ‘·æ¦Ý£Ì“äS‚¥ˆ Ø}³ÆôÐÿðs7ÿ"ÑöÏÐ CÿÁÌßü‹@e¤D,äM7Ã×Öº“è—qh}á}?&\E,¦5 1'!Ùñ 匷þ§]xWS·ðÖ}¦ZÉ-¯ÚD:{[ #)Ÿe¼Š7·•»wîÈOÞchè>Ùãúhø9›ÿ‘hûgŒ?è¡ÿàæoþE  Y}>7> >W¹m²hÑK‰ˆ€G¶Ì[agùŒ*w9Ä€¼š†—qmÌš&¹¨ê±jd¶“0N-#û.õ–pÂ3ûÔ”´{ˆÞ|Üýàî>Ùãúhø9›ÿ‘hûgŒ?è¡ÿàæoþE o^µæ»=«ëƒÄÒÿhùM¼pűĢßuÙYÔ+Cµ­µ‚|ª#;+êVÖ±Þêqéž×-tk¿ì-­¬g‰G•xòKåÆŸ¼‡ ¹¸Eù”·YÉèlñ‡ý´?üÍÿÈ´}³ÆôÐÿðs7ÿ"Ð'©§‡›Á’hÑè> Õ-Òáç…®´»†x®$•¤V&X‹°Ü–Ù Ú¥_qp²G›d­qö­y6ëm.¾ë¥HbÔÅ0Ò=™–1#Gò€ûX%ÿ×?aöÏÐ CÿÁÌßü‹GÛ]K®·¯óz'Û®5湩Zhò}²×XMGNŠæâ%ŽõEªÛ:åYŠ’¢R»‚à´dñ¹Fü#ú¬ôû¹ã·²³‰õHE¯Ÿ<©öƒ,°¬®BÊír 4ƒ•3òX©n³ì~0ÿ î‡ÿ‚i¿ù*±øÃþƒºþ ¦ÿäªãì´ß¶™ƒèZ­µÄRê3Q§µó˜K$’,XŠtÿY¹wãh £nÓ¶Xµ4›­jËYšõ¼ ©[A&™gh–Ö×EahšrÊ¿¾Q° T)Àèx¹ö?ÐwCÿÁ4ßü•GØüaÿAÝÿÓòUsz—‡õ-^õ¯µîéõ-2Y-,µFµŠÝƒÌÍÁYG˜fU,«&vHB …1èz5þ›…¿„籎^^Αµªˆá‘gHØ…—œ,ñ®H07ucñ‡ýt?üMÿÉT}ÆôÐÿðM7ÿ%PéÑ꧃-­æÓîá7žŸLÐU–Y|Ûuq¸™‹¹X‡) ü­ *ÍoOÖõi|Sr|+:Ý_x}të7Û1ÜZl¦ã +ÄÑ–w10ð…ö-|-¬Xê3ê6søRÞú}ÞuÌ>t’MÇsnas“’9êkCì~0ÿ î‡ÿ‚i¿ù*€9»+)SÅ:Ž¿wà JK÷½wK%—›}–8 ³} dHv䘽$º‹^—X“S NV+»2ƨZ;ªA¹ÜÒ¨Ý ³rBFXga·è>Çãúèø&›ÿ’¨ûŒ?è;¡ÿàšoþJ  ú%¥í•×öu΋æG¡wzš‹ÉDÒÊë匙<ÌM°åTcÌÀܯîWÃ¶Ö ¤jBóN·¶†K™u‡a8Šx$‘mÍ"0â‚|’§Ë%;O±øÃþƒºþ ¦ÿäª>Çãúèø&›ÿ’¨ŸƒÃ÷·‘êþžHnb»¶žËPÔEIJ…²‰'ww<[•!Ba Ie\»?êCKÓ¡Ö4;»§“B´Òä¶²Ö£h¼Ðßh*é¹e\íYq‰‚ý§ØüaÿAÝÿÓòUcñ‡ýt?üMÿÉTÍˤk–z¦’ðxz;¿ìÍbúõ®ÍÌHÏ ÇÚd9ç?¼@Á¶ êƒ%s" °¹ð¾i ¯€îíµ#eo ôÉ=¤qÎÑ)Üß,¤—%Ÿ¨ÜJ†e2ôŸcñ‡ýt?üMÿÉT}ÆôÐÿðM7ÿ%P'‡®]éwºkèZÿjh÷6±<³ÄbÒ÷…·\HÄÄ~BJ/ð§vÇæ³e{âMð{ ¼Û7ÃÜÆ—W âfExœ…à0Bd3¶v˜è}ÆôÐÿðM7ÿ%Qö?ÐwCÿÁ4ßü•@}¾”šGŽt½R×ÂSµä¶—Òº\ß-Åóm#æH컆YBù¸ÌAÜJõ k–þ½ÑCTó¼/g¦ù‰¡ lŠí´2¢ó¿ÚrÌÜÜúÕϱøÃþƒºþ ¦ÿäªÇŸLÕ®o/ TñÇ©j¶:§žòŲÙaÅâ-棰/Ì¿62W?CѯôØ´(­ü'=Œpø‚òöt­TG ‹:FÄ,¼ágp2@‰€ »¨ûŒ?è;¡ÿàšoþJ£ì~0ÿ î‡ÿ‚i¿ù*€ÈÛþºoþ–Ã]r÷z‰55·‚ÿ[ÒšÖ;»{—X4©#vò¥IB†7 JœµÔPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPÿÙlibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/BufferedMultipartInputStream.html0000644000175000017500000007036110404045240033344 0ustar arnaudarnaud00000000000000 BufferedMultipartInputStream (Apache Struts API Documentation)

    org.apache.struts.upload
    Class BufferedMultipartInputStream

    java.lang.Object
      |
      +--java.io.InputStream
            |
            +--org.apache.struts.upload.BufferedMultipartInputStream
    

    public class BufferedMultipartInputStream
    extends java.io.InputStream

    This class implements buffering for an InputStream as well as a readLine method. The purpose of this is to provide a reliable readLine() method.


    Field Summary
    protected  byte[] buffer
              The byte array used to hold buffered data
    protected  int bufferLength
              The number of bytes read from the underlying InputStream that are in the buffer
    protected  int bufferOffset
              The current offset we're at in the buffer's byte array
    protected  int bufferSize
              The size of the byte array buffer
    protected  long contentLength
              The content length of the multipart data
    protected  boolean contentLengthMet
              Whether or not bytes up to the Content-Length have been read
    protected  java.io.InputStream inputStream
              The underlying InputStream used by this class
    protected  boolean maxLengthMet
              Whether or not bytes up to the maximum length have been read
    protected  long maxSize
              The maximum allowed size for the multipart data, or -1 for an unlimited maximum file length
    protected  int totalLength
              The total number of bytes read so far
     
    Fields inherited from class java.io.InputStream
     
    Constructor Summary
    BufferedMultipartInputStream(java.io.InputStream inputStream, int bufferSize, long contentLength, long maxSize)
              Public constructor for this class, just wraps the InputStream given
     
    Method Summary
     int available()
              This method returns the number of available bytes left to read in the buffer before it has to be refilled
     void close()
              This method attempts to close the underlying InputStream
     boolean contentLengthMet()
               
    protected  void fill()
              Fills the buffer with data from the underlying inputStream.
     void mark(int position)
              This method calls on the mark() method of the underlying InputStream
     boolean markSupported()
              This method calls on the markSupported() method of the underlying InputStream
     boolean maxLengthMet()
               
     int read()
              This method returns the next byte in the buffer, and refills it if necessary.
     int read(byte[] b)
              This method populates the byte array b with data up to b.length bytes
     int read(byte[] b, int offset, int length)
              This method populates the byte array b with data up to length starting at b[offset]
     byte[] readLine()
              This method reads a line, regardless of length.
     int readLine(byte[] b, int offset, int length)
              This method reads into the byte array b until a newline ('\n') character is encountered or the number of bytes specified by length have been read
     void reset()
              This method makes a call to the reset() method of the underlying InputStream
     
    Methods inherited from class java.io.InputStream
    skip
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    inputStream

    protected java.io.InputStream inputStream
    The underlying InputStream used by this class


    buffer

    protected byte[] buffer
    The byte array used to hold buffered data


    bufferOffset

    protected int bufferOffset
    The current offset we're at in the buffer's byte array


    bufferSize

    protected int bufferSize
    The size of the byte array buffer


    bufferLength

    protected int bufferLength
    The number of bytes read from the underlying InputStream that are in the buffer


    totalLength

    protected int totalLength
    The total number of bytes read so far


    contentLength

    protected long contentLength
    The content length of the multipart data


    maxSize

    protected long maxSize
    The maximum allowed size for the multipart data, or -1 for an unlimited maximum file length


    contentLengthMet

    protected boolean contentLengthMet
    Whether or not bytes up to the Content-Length have been read


    maxLengthMet

    protected boolean maxLengthMet
    Whether or not bytes up to the maximum length have been read

    Constructor Detail

    BufferedMultipartInputStream

    public BufferedMultipartInputStream(java.io.InputStream inputStream,
                                        int bufferSize,
                                        long contentLength,
                                        long maxSize)
                                 throws java.io.IOException
    Public constructor for this class, just wraps the InputStream given

    Parameters:
    inputStream - The underlying stream to read from
    bufferSize - The size in bytes of the internal buffer
    contentLength - The content length for this request
    maxSize - The maximum size in bytes that this multipart request can be, or -1 for an unlimited length
    Method Detail

    available

    public int available()
    This method returns the number of available bytes left to read in the buffer before it has to be refilled

    Overrides:
    available in class java.io.InputStream

    close

    public void close()
               throws java.io.IOException
    This method attempts to close the underlying InputStream

    Overrides:
    close in class java.io.InputStream
    java.io.IOException

    mark

    public void mark(int position)
    This method calls on the mark() method of the underlying InputStream

    Overrides:
    mark in class java.io.InputStream

    markSupported

    public boolean markSupported()
    This method calls on the markSupported() method of the underlying InputStream

    Overrides:
    markSupported in class java.io.InputStream
    Returns:
    Whether or not the underlying InputStream supports marking

    maxLengthMet

    public boolean maxLengthMet()
    Returns:
    true if the maximum length has been reached, false otherwise

    contentLengthMet

    public boolean contentLengthMet()
    Returns:
    true if the content length has been reached, false otherwise

    read

    public int read()
             throws java.io.IOException
    This method returns the next byte in the buffer, and refills it if necessary.

    Specified by:
    read in class java.io.InputStream
    Returns:
    The next byte read in the buffer, or -1 if the end of the stream has been reached
    java.io.IOException

    read

    public int read(byte[] b)
             throws java.io.IOException
    This method populates the byte array b with data up to b.length bytes

    Overrides:
    read in class java.io.InputStream
    java.io.IOException

    read

    public int read(byte[] b,
                    int offset,
                    int length)
             throws java.io.IOException
    This method populates the byte array b with data up to length starting at b[offset]

    Overrides:
    read in class java.io.InputStream
    java.io.IOException

    readLine

    public int readLine(byte[] b,
                        int offset,
                        int length)
                 throws java.io.IOException
    This method reads into the byte array b until a newline ('\n') character is encountered or the number of bytes specified by length have been read

    java.io.IOException

    readLine

    public byte[] readLine()
                    throws java.io.IOException
    This method reads a line, regardless of length.

    Returns:
    A byte array representing the line.
    java.io.IOException

    reset

    public void reset()
               throws java.io.IOException
    This method makes a call to the reset() method of the underlying InputStream

    Overrides:
    reset in class java.io.InputStream
    java.io.IOException

    fill

    protected void fill()
                 throws java.io.IOException
    Fills the buffer with data from the underlying inputStream. If it can't fill the entire buffer in one read, it will read as many times as necessary to fill the buffer

    java.io.IOException


    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000016410423140533011320 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/CommonsMultipartRequestHandler.CommonsFormFile.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/CommonsMultipartRequestHandler.Commo0000644000175000017500000005712410404045226034024 0ustar arnaudarnaud00000000000000 CommonsMultipartRequestHandler.CommonsFormFile (Apache Struts API Documentation)

    org.apache.struts.upload
    Class CommonsMultipartRequestHandler.CommonsFormFile

    java.lang.Object
      |
      +--org.apache.struts.upload.CommonsMultipartRequestHandler.CommonsFormFile
    
    All Implemented Interfaces:
    FormFile
    Enclosing class:
    CommonsMultipartRequestHandler

    static class CommonsMultipartRequestHandler.CommonsFormFile
    extends java.lang.Object
    implements FormFile

    This class implements the Struts FormFile interface by wrapping the Commons FileUpload FileItem interface. This implementation is read-only; any attempt to modify an instance of this class will result in an UnsupportedOperationException.


    Field Summary
    (package private)  org.apache.commons.fileupload.FileItem fileItem
              The FileItem instance wrapped by this object.
     
    Constructor Summary
    CommonsMultipartRequestHandler.CommonsFormFile(org.apache.commons.fileupload.FileItem fileItem)
              Constructs an instance of this class which wraps the supplied file item.
     
    Method Summary
     void destroy()
              Destroy all content for this form file.
    protected  java.lang.String getBaseFileName(java.lang.String filePath)
              Returns the base file name from the supplied file path.
     java.lang.String getContentType()
              Returns the content type for this file.
     byte[] getFileData()
              Returns the data for this file as a byte array.
     java.lang.String getFileName()
              Returns the (client-side) file name for this file.
     int getFileSize()
              Returns the size, in bytes, of this file.
     java.io.InputStream getInputStream()
              Get an InputStream that represents this file.
     void setContentType(java.lang.String contentType)
              Sets the content type for this file.
     void setFileName(java.lang.String fileName)
              Sets the (client-side) file name for this file.
     void setFileSize(int filesize)
              Sets the size, in bytes, for this file.
     java.lang.String toString()
              Returns the (client-side) file name for this file.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
     

    Field Detail

    fileItem

    org.apache.commons.fileupload.FileItem fileItem
    The FileItem instance wrapped by this object.

    Constructor Detail

    CommonsMultipartRequestHandler.CommonsFormFile

    public CommonsMultipartRequestHandler.CommonsFormFile(org.apache.commons.fileupload.FileItem fileItem)
    Constructs an instance of this class which wraps the supplied file item.

    Parameters:
    fileItem - The Commons file item to be wrapped.
    Method Detail

    getContentType

    public java.lang.String getContentType()
    Returns the content type for this file.

    Specified by:
    getContentType in interface FormFile
    Returns:
    A String representing content type.

    setContentType

    public void setContentType(java.lang.String contentType)
    Sets the content type for this file.

    NOTE: This method is not supported in this implementation.

    Specified by:
    setContentType in interface FormFile
    Parameters:
    contentType - A string representing the content type.

    getFileSize

    public int getFileSize()
    Returns the size, in bytes, of this file.

    Specified by:
    getFileSize in interface FormFile
    Returns:
    The size of the file, in bytes.

    setFileSize

    public void setFileSize(int filesize)
    Sets the size, in bytes, for this file.

    NOTE: This method is not supported in this implementation.

    Specified by:
    setFileSize in interface FormFile
    Parameters:
    filesize - The size of the file, in bytes.

    getFileName

    public java.lang.String getFileName()
    Returns the (client-side) file name for this file.

    Specified by:
    getFileName in interface FormFile
    Returns:
    The client-size file name.

    setFileName

    public void setFileName(java.lang.String fileName)
    Sets the (client-side) file name for this file.

    NOTE: This method is not supported in this implementation.

    Specified by:
    setFileName in interface FormFile
    Parameters:
    fileName - The client-side name for the file.

    getFileData

    public byte[] getFileData()
                       throws java.io.FileNotFoundException,
                              java.io.IOException
    Returns the data for this file as a byte array. Note that this may result in excessive memory usage for large uploads. The use of the getInputStream method is encouraged as an alternative.

    Specified by:
    getFileData in interface FormFile
    Returns:
    An array of bytes representing the data contained in this form file.
    Throws:
    java.io.FileNotFoundException - If some sort of file representation cannot be found for the FormFile
    java.io.IOException - If there is some sort of IOException

    getInputStream

    public java.io.InputStream getInputStream()
                                       throws java.io.FileNotFoundException,
                                              java.io.IOException
    Get an InputStream that represents this file. This is the preferred method of getting file data.

    Specified by:
    getInputStream in interface FormFile
    Throws:
    java.io.FileNotFoundException - If some sort of file representation cannot be found for the FormFile
    java.io.IOException - If there is some sort of IOException

    destroy

    public void destroy()
    Destroy all content for this form file. Implementations should remove any temporary files or any temporary file data stored somewhere

    Specified by:
    destroy in interface FormFile

    getBaseFileName

    protected java.lang.String getBaseFileName(java.lang.String filePath)
    Returns the base file name from the supplied file path. On the surface, this would appear to be a trivial task. Apparently, however, some Linux JDKs do not implement File.getName() correctly for Windows paths, so we attempt to take care of that here.

    Parameters:
    filePath - The full path to the file.
    Returns:
    The base file name, from the end of the path.

    toString

    public java.lang.String toString()
    Returns the (client-side) file name for this file.

    Overrides:
    toString in class java.lang.Object
    Returns:
    The client-size file name.


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/CommonsMultipartRequestHandler.html0000644000175000017500000011231210404045226033705 0ustar arnaudarnaud00000000000000 CommonsMultipartRequestHandler (Apache Struts API Documentation)

    org.apache.struts.upload
    Class CommonsMultipartRequestHandler

    java.lang.Object
      |
      +--org.apache.struts.upload.CommonsMultipartRequestHandler
    
    All Implemented Interfaces:
    MultipartRequestHandler

    public class CommonsMultipartRequestHandler
    extends java.lang.Object
    implements MultipartRequestHandler

    This class implements the MultipartRequestHandler interface by providing a wrapper around the Jakarta Commons FileUpload library.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:34:00 +0100 (Fri, 22 Aug 2003) $
    Author:
    Martin Cooper

    Nested Class Summary
    (package private) static class CommonsMultipartRequestHandler.CommonsFormFile
              This class implements the Struts FormFile interface by wrapping the Commons FileUpload FileItem interface.
     
    Field Summary
    static long DEFAULT_SIZE_MAX
              The default value for the maximum allowable size, in bytes, of an uploaded file.
    static int DEFAULT_SIZE_THRESHOLD
              The default value for the threshold which determines whether an uploaded file will be written to disk or cached in memory.
    private  java.util.Hashtable elementsAll
              The combined text and file request parameters.
    private  java.util.Hashtable elementsFile
              The file request parameters.
    private  java.util.Hashtable elementsText
              The text request parameters.
    protected static org.apache.commons.logging.Log log
              Commons Logging instance.
    private  ActionMapping mapping
              The action mapping with which this handler is associated.
    private  ActionServlet servlet
              The servlet with which this handler is associated.
     
    Fields inherited from interface org.apache.struts.upload.MultipartRequestHandler
    ATTRIBUTE_MAX_LENGTH_EXCEEDED
     
    Constructor Summary
    CommonsMultipartRequestHandler()
               
     
    Method Summary
    protected  void addFileParameter(org.apache.commons.fileupload.FileItem item)
              Adds a file parameter to the set of file parameters for this request and also to the list of all parameters.
    protected  void addTextParameter(javax.servlet.http.HttpServletRequest request, org.apache.commons.fileupload.FileItem item)
              Adds a regular text parameter to the set of text parameters for this request and also to the list of all parameters.
    protected  long convertSizeToBytes(java.lang.String sizeString, long defaultSize)
              Converts a size value from a string representation to its numeric value.
     void finish()
              Cleans up at the end of a request.
     java.util.Hashtable getAllElements()
              Returns a hash table containing both text and file request parameters.
     java.util.Hashtable getFileElements()
              Returns a hash table containing the file (that is, non-text) request parameters.
     ActionMapping getMapping()
              Retrieves the action mapping with which this handler is associated.
    protected  java.lang.String getRepositoryPath(ModuleConfig mc)
              Returns the path to the temporary directory to be used for uploaded files which are written to disk.
     ActionServlet getServlet()
              Retrieves the servlet with which this handler is associated.
    protected  long getSizeMax(ModuleConfig mc)
              Returns the maximum allowable size, in bytes, of an uploaded file.
    protected  long getSizeThreshold(ModuleConfig mc)
              Returns the size threshold which determines whether an uploaded file will be written to disk or cached in memory.
     java.util.Hashtable getTextElements()
              Returns a hash table containing the text (that is, non-file) request parameters.
     void handleRequest(javax.servlet.http.HttpServletRequest request)
              Parses the input stream and partitions the parsed items into a set of form fields and a set of file items.
     void rollback()
              Cleans up when a problem occurs during request processing.
     void setMapping(ActionMapping mapping)
              Sets the action mapping with which this handler is associated.
     void setServlet(ActionServlet servlet)
              Sets the servlet with which this handler is associated.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    DEFAULT_SIZE_MAX

    public static final long DEFAULT_SIZE_MAX
    The default value for the maximum allowable size, in bytes, of an uploaded file. The value is equivalent to 250MB.

    See Also:
    Constant Field Values

    DEFAULT_SIZE_THRESHOLD

    public static final int DEFAULT_SIZE_THRESHOLD
    The default value for the threshold which determines whether an uploaded file will be written to disk or cached in memory. The value is equivalent to 250KB.

    See Also:
    Constant Field Values

    log

    protected static org.apache.commons.logging.Log log
    Commons Logging instance.


    elementsAll

    private java.util.Hashtable elementsAll
    The combined text and file request parameters.


    elementsFile

    private java.util.Hashtable elementsFile
    The file request parameters.


    elementsText

    private java.util.Hashtable elementsText
    The text request parameters.


    mapping

    private ActionMapping mapping
    The action mapping with which this handler is associated.


    servlet

    private ActionServlet servlet
    The servlet with which this handler is associated.

    Constructor Detail

    CommonsMultipartRequestHandler

    public CommonsMultipartRequestHandler()
    Method Detail

    getServlet

    public ActionServlet getServlet()
    Retrieves the servlet with which this handler is associated.

    Specified by:
    getServlet in interface MultipartRequestHandler
    Returns:
    The associated servlet.

    setServlet

    public void setServlet(ActionServlet servlet)
    Sets the servlet with which this handler is associated.

    Specified by:
    setServlet in interface MultipartRequestHandler
    Parameters:
    servlet - The associated servlet.

    getMapping

    public ActionMapping getMapping()
    Retrieves the action mapping with which this handler is associated.

    Specified by:
    getMapping in interface MultipartRequestHandler
    Returns:
    The associated action mapping.

    setMapping

    public void setMapping(ActionMapping mapping)
    Sets the action mapping with which this handler is associated.

    Specified by:
    setMapping in interface MultipartRequestHandler
    Parameters:
    mapping - The associated action mapping.

    handleRequest

    public void handleRequest(javax.servlet.http.HttpServletRequest request)
                       throws javax.servlet.ServletException
    Parses the input stream and partitions the parsed items into a set of form fields and a set of file items. In the process, the parsed items are translated from Commons FileUpload FileItem instances to Struts FormFile instances.

    Specified by:
    handleRequest in interface MultipartRequestHandler
    Parameters:
    request - The multipart request to be processed.
    Throws:
    javax.servlet.ServletException - if an unrecoverable error occurs.

    getTextElements

    public java.util.Hashtable getTextElements()
    Returns a hash table containing the text (that is, non-file) request parameters.

    Specified by:
    getTextElements in interface MultipartRequestHandler
    Returns:
    The text request parameters.

    getFileElements

    public java.util.Hashtable getFileElements()
    Returns a hash table containing the file (that is, non-text) request parameters.

    Specified by:
    getFileElements in interface MultipartRequestHandler
    Returns:
    The file request parameters.
    See Also:
    FormFile

    getAllElements

    public java.util.Hashtable getAllElements()
    Returns a hash table containing both text and file request parameters.

    Specified by:
    getAllElements in interface MultipartRequestHandler
    Returns:
    The text and file request parameters.

    rollback

    public void rollback()
    Cleans up when a problem occurs during request processing.

    Specified by:
    rollback in interface MultipartRequestHandler

    finish

    public void finish()
    Cleans up at the end of a request.

    Specified by:
    finish in interface MultipartRequestHandler

    getSizeMax

    protected long getSizeMax(ModuleConfig mc)
    Returns the maximum allowable size, in bytes, of an uploaded file. The value is obtained from the current module's controller configuration.

    Parameters:
    mc - The current module's configuration.
    Returns:
    The maximum allowable file size, in bytes.

    getSizeThreshold

    protected long getSizeThreshold(ModuleConfig mc)
    Returns the size threshold which determines whether an uploaded file will be written to disk or cached in memory.

    Parameters:
    mc - The current module's configuration.
    Returns:
    The size threshold, in bytes.

    convertSizeToBytes

    protected long convertSizeToBytes(java.lang.String sizeString,
                                      long defaultSize)
    Converts a size value from a string representation to its numeric value. The string must be of the form nnnm, where nnn is an arbitrary decimal value, and m is a multiplier. The multiplier must be one of 'K', 'M' and 'G', representing kilobytes, megabytes and gigabytes respectively. If the size value cannot be converted, for example due to invalid syntax, the supplied default is returned instead.

    Parameters:
    sizeString - The string representation of the size to be converted.
    defaultSize - The value to be returned if the string is invalid.
    Returns:
    The actual size in bytes.

    getRepositoryPath

    protected java.lang.String getRepositoryPath(ModuleConfig mc)
    Returns the path to the temporary directory to be used for uploaded files which are written to disk. The directory used is determined from the first of the following to be non-empty.
    1. A temp dir explicitly defined either using the tempDir servlet init param, or the tempDir attribute of the <controller> element in the Struts config file.
    2. The container-specified temp dir, obtained from the javax.servlet.context.tempdir servlet context attribute.
    3. The temp dir specified by the java.io.tmpdir system property.
    4. (/ol>

      Parameters:
      mc - The module config instance for which the path should be determined.
      Returns:
      The path to the directory to be used to store uploaded files.

    addTextParameter

    protected void addTextParameter(javax.servlet.http.HttpServletRequest request,
                                    org.apache.commons.fileupload.FileItem item)
    Adds a regular text parameter to the set of text parameters for this request and also to the list of all parameters. Handles the case of multiple values for the same parameter by using an array for the parameter value.

    Parameters:
    request - The request in which the parameter was specified.
    item - The file item for the parameter to add.

    addFileParameter

    protected void addFileParameter(org.apache.commons.fileupload.FileItem item)
    Adds a file parameter to the set of file parameters for this request and also to the list of all parameters.

    Parameters:
    item - The file item for the parameter to add.


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/ContentLengthExceededException.html0000644000175000017500000003153410404045234033610 0ustar arnaudarnaud00000000000000 ContentLengthExceededException (Apache Struts API Documentation)

    org.apache.struts.upload
    Class ContentLengthExceededException

    java.lang.Object
      |
      +--java.lang.Throwable
            |
            +--java.lang.Exception
                  |
                  +--java.io.IOException
                        |
                        +--org.apache.struts.upload.ContentLengthExceededException
    
    All Implemented Interfaces:
    java.io.Serializable

    public class ContentLengthExceededException
    extends java.io.IOException

    This exception is thrown when multipart post data exceeds the value given by the Content-Length header

    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String message
               
     
    Fields inherited from class java.lang.Exception
     
    Fields inherited from class java.lang.Throwable
     
    Constructor Summary
    ContentLengthExceededException()
               
    ContentLengthExceededException(long contentLength)
               
     
    Method Summary
     java.lang.String getMessage()
               
     
    Methods inherited from class java.lang.Throwable
    fillInStackTrace, getCause, getLocalizedMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
     

    Field Detail

    message

    protected java.lang.String message
    Constructor Detail

    ContentLengthExceededException

    public ContentLengthExceededException()

    ContentLengthExceededException

    public ContentLengthExceededException(long contentLength)
    Method Detail

    getMessage

    public java.lang.String getMessage()
    Overrides:
    getMessage in class java.lang.Throwable


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/DiskFile.html0000644000175000017500000005610210404045222027213 0ustar arnaudarnaud00000000000000 DiskFile (Apache Struts API Documentation)

    org.apache.struts.upload
    Class DiskFile

    java.lang.Object
      |
      +--org.apache.struts.upload.DiskFile
    
    All Implemented Interfaces:
    FormFile

    public class DiskFile
    extends java.lang.Object
    implements FormFile


    Field Summary
    protected  java.lang.String contentType
              The content type of the file
    protected  java.lang.String fileName
              The name of the file
    protected  java.lang.String filePath
              The filepath to the temporary file
    protected  int fileSize
              The size in bytes of the file
     
    Constructor Summary
    DiskFile(java.lang.String filePath)
               
     
    Method Summary
     void destroy()
              Delete the temporary file.
     java.lang.String getContentType()
              Get the content type
     byte[] getFileData()
              Attempt to read the temporary file and get it's data in byte array form.
     byte[] getFileData(int bufferSize)
              Attempts to read a file n bytes at a time, n being equal to "bufferSize".
     java.lang.String getFileName()
              Get the file name
     java.lang.String getFilePath()
              Get the temporary file path for this form file
     int getFileSize()
              Get the file size
     java.io.InputStream getInputStream()
              Returns a FileInputStream to the file
     void setContentType(java.lang.String contentType)
              Set the content type
     void setFileName(java.lang.String filename)
              Set the file name
     void setFileSize(int fileSize)
              Set the file size
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    filePath

    protected java.lang.String filePath
    The filepath to the temporary file


    contentType

    protected java.lang.String contentType
    The content type of the file


    fileSize

    protected int fileSize
    The size in bytes of the file


    fileName

    protected java.lang.String fileName
    The name of the file

    Constructor Detail

    DiskFile

    public DiskFile(java.lang.String filePath)
    Method Detail

    getFileData

    public byte[] getFileData()
                       throws java.io.FileNotFoundException,
                              java.io.IOException
    Attempt to read the temporary file and get it's data in byte array form. Tries to read the entire file (using a byte array the size of getFileSize()) at once, in one call to FileInputStream.read(byte[]). For buffered reading, see getFileData(int). Note that this method can be dangerous, and that the size of a file can cause an OutOfMemoryError quite easily. You should use getInputStream and do your own thing.

    Specified by:
    getFileData in interface FormFile
    Returns:
    The file data as a byte array.
    Throws:
    java.io.FileNotFoundException - If the temp file no longer exists
    java.io.IOException - if there is some sort of IO problem.
    See Also:
    getFileData(int)

    getFileData

    public byte[] getFileData(int bufferSize)
                       throws java.io.FileNotFoundException,
                              java.io.IOException
    Attempts to read a file n bytes at a time, n being equal to "bufferSize". Note that this method can be dangerous, and that the size of a file can cause an OutOfMemoryError quite easily. You should use getInputStream and do your own thing.

    Parameters:
    bufferSize - The size in bytes that are read from the file at a time
    Throws:
    java.io.FileNotFoundException - If the temp file no longer exists
    java.io.IOException

    destroy

    public void destroy()
    Delete the temporary file.

    Specified by:
    destroy in interface FormFile

    getFilePath

    public java.lang.String getFilePath()
    Get the temporary file path for this form file

    Returns:
    A filepath to the temporary file

    setFileName

    public void setFileName(java.lang.String filename)
    Set the file name

    Specified by:
    setFileName in interface FormFile
    Parameters:
    filename - The base file name.

    setContentType

    public void setContentType(java.lang.String contentType)
    Set the content type

    Specified by:
    setContentType in interface FormFile
    Parameters:
    contentType - The content type for the file.

    setFileSize

    public void setFileSize(int fileSize)
    Set the file size

    Specified by:
    setFileSize in interface FormFile
    Parameters:
    fileSize - The size of the file in bytes

    getFileName

    public java.lang.String getFileName()
    Get the file name

    Specified by:
    getFileName in interface FormFile
    Returns:
    The base file name.

    getContentType

    public java.lang.String getContentType()
    Get the content type

    Specified by:
    getContentType in interface FormFile
    Returns:
    A String representing content type.

    getFileSize

    public int getFileSize()
    Get the file size

    Specified by:
    getFileSize in interface FormFile
    Returns:
    The size of this file in bytes

    getInputStream

    public java.io.InputStream getInputStream()
                                       throws java.io.FileNotFoundException,
                                              java.io.IOException
    Returns a FileInputStream to the file

    Specified by:
    getInputStream in interface FormFile
    Throws:
    java.io.FileNotFoundException - if the uploaded file is not found.
    java.io.IOException - if an error occurred while reading the file.


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/DiskMultipartRequestHandler.html0000644000175000017500000007711710404045230033174 0ustar arnaudarnaud00000000000000 DiskMultipartRequestHandler (Apache Struts API Documentation)

    org.apache.struts.upload
    Class DiskMultipartRequestHandler

    java.lang.Object
      |
      +--org.apache.struts.upload.DiskMultipartRequestHandler
    
    All Implemented Interfaces:
    MultipartRequestHandler

    public class DiskMultipartRequestHandler
    extends java.lang.Object
    implements MultipartRequestHandler

    This is a MultipartRequestHandler that writes file data directly to to temporary files on disk.

    Author:
    Mike Schachter

    Field Summary
    protected  java.util.Hashtable allElements
              A Hashtable representing all elemnents.
    protected  java.util.Hashtable fileElements
              A Hashtable representing the form files uploaded.
    protected static org.apache.commons.logging.Log log
              Commons Logging instance.
    protected  ActionMapping mapping
              The ActionMapping instance used for this class.
    protected  ActionServlet servlet
              The ActionServlet instance used for this class.
    protected  java.lang.String tempDir
              The temporary directory.
    protected  java.util.Hashtable textElements
              A Hashtable representing the form text input names and values.
     
    Fields inherited from interface org.apache.struts.upload.MultipartRequestHandler
    ATTRIBUTE_MAX_LENGTH_EXCEEDED
     
    Constructor Summary
    DiskMultipartRequestHandler()
               
     
    Method Summary
    protected  void createDiskFile(MultipartElement element)
               
    protected  void createTextElement(javax.servlet.http.HttpServletRequest request, MultipartElement element)
               
     void finish()
              Calls on rollback() to delete temporary files.
     java.util.Hashtable getAllElements()
              This method returns all elements of a multipart request.
     java.util.Hashtable getFileElements()
              This method is called on to retrieve all the FormFile input elements of the request.
     ActionMapping getMapping()
              Get the ActionMapping instance for this request
    protected  long getMaxSize(java.lang.String stringSize)
              Gets the maximum post data size in bytes from the string representation in the configuration file.
     ActionServlet getServlet()
              Get the ActionServlet instance
     java.util.Hashtable getTextElements()
              This method is called on to retrieve all the text input elements of the request.
     void handleRequest(javax.servlet.http.HttpServletRequest request)
              This method populates the internal hashtables with multipart request data.
    protected  void retrieveTempDir(ModuleConfig moduleConfig)
              Retrieves the temporary directory from either ActionServlet, a context property, or a system property, in that order.
     void rollback()
              Delete all the files uploaded.
     void setMapping(ActionMapping mapping)
              Convienience method to set a reference to a working ActionMapping instance.
     void setServlet(ActionServlet servlet)
              Convienience method to set a reference to a working ActionServlet instance.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    log

    protected static org.apache.commons.logging.Log log
    Commons Logging instance.


    servlet

    protected ActionServlet servlet
    The ActionServlet instance used for this class.


    mapping

    protected ActionMapping mapping
    The ActionMapping instance used for this class.


    fileElements

    protected java.util.Hashtable fileElements
    A Hashtable representing the form files uploaded.


    textElements

    protected java.util.Hashtable textElements
    A Hashtable representing the form text input names and values.


    allElements

    protected java.util.Hashtable allElements
    A Hashtable representing all elemnents.


    tempDir

    protected java.lang.String tempDir
    The temporary directory.

    Constructor Detail

    DiskMultipartRequestHandler

    public DiskMultipartRequestHandler()
    Method Detail

    handleRequest

    public void handleRequest(javax.servlet.http.HttpServletRequest request)
                       throws javax.servlet.ServletException
    This method populates the internal hashtables with multipart request data. If the request argument is an instance of MultipartRequestWrapper, the request wrapper will be populated as well.

    Specified by:
    handleRequest in interface MultipartRequestHandler
    Throws:
    javax.servlet.ServletException - thrown if something goes wrong

    createTextElement

    protected void createTextElement(javax.servlet.http.HttpServletRequest request,
                                     MultipartElement element)

    createDiskFile

    protected void createDiskFile(MultipartElement element)

    getAllElements

    public java.util.Hashtable getAllElements()
    Description copied from interface: MultipartRequestHandler
    This method returns all elements of a multipart request.

    Specified by:
    getAllElements in interface MultipartRequestHandler
    Returns:
    A Hashtable where the keys are input names and values are either Strings or FormFiles

    getTextElements

    public java.util.Hashtable getTextElements()
    Description copied from interface: MultipartRequestHandler
    This method is called on to retrieve all the text input elements of the request.

    Specified by:
    getTextElements in interface MultipartRequestHandler
    Returns:
    A Hashtable where the keys and values are the names and values of the request input parameters

    getFileElements

    public java.util.Hashtable getFileElements()
    Description copied from interface: MultipartRequestHandler
    This method is called on to retrieve all the FormFile input elements of the request.

    Specified by:
    getFileElements in interface MultipartRequestHandler
    Returns:
    A Hashtable where the keys are the input names of the files and the values are FormFile objects
    See Also:
    FormFile

    rollback

    public void rollback()
    Delete all the files uploaded.

    Specified by:
    rollback in interface MultipartRequestHandler

    finish

    public void finish()
    Calls on rollback() to delete temporary files.

    Specified by:
    finish in interface MultipartRequestHandler

    setServlet

    public void setServlet(ActionServlet servlet)
    Description copied from interface: MultipartRequestHandler
    Convienience method to set a reference to a working ActionServlet instance.

    Specified by:
    setServlet in interface MultipartRequestHandler

    setMapping

    public void setMapping(ActionMapping mapping)
    Description copied from interface: MultipartRequestHandler
    Convienience method to set a reference to a working ActionMapping instance.

    Specified by:
    setMapping in interface MultipartRequestHandler

    getServlet

    public ActionServlet getServlet()
    Description copied from interface: MultipartRequestHandler
    Get the ActionServlet instance

    Specified by:
    getServlet in interface MultipartRequestHandler

    getMapping

    public ActionMapping getMapping()
    Description copied from interface: MultipartRequestHandler
    Get the ActionMapping instance for this request

    Specified by:
    getMapping in interface MultipartRequestHandler

    getMaxSize

    protected long getMaxSize(java.lang.String stringSize)
                       throws javax.servlet.ServletException
    Gets the maximum post data size in bytes from the string representation in the configuration file.

    javax.servlet.ServletException

    retrieveTempDir

    protected void retrieveTempDir(ModuleConfig moduleConfig)
    Retrieves the temporary directory from either ActionServlet, a context property, or a system property, in that order.



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/FormFile.html0000644000175000017500000003500510404045220027221 0ustar arnaudarnaud00000000000000 FormFile (Apache Struts API Documentation)

    org.apache.struts.upload
    Interface FormFile

    All Known Implementing Classes:
    CommonsMultipartRequestHandler.CommonsFormFile, DiskFile

    public interface FormFile

    This interface represents a file that has been uploaded by a client. It is the only interface or class in upload package which is typically referenced directly by a Struts application.


    Method Summary
     void destroy()
              Destroys all content for the uploaded file, including any underlying data files.
     java.lang.String getContentType()
              Returns the content type for this file.
     byte[] getFileData()
              Returns the data for the entire file as byte array.
     java.lang.String getFileName()
              Returns the file name of this file.
     int getFileSize()
              Returns the size of this file.
     java.io.InputStream getInputStream()
              Returns an input stream for this file.
     void setContentType(java.lang.String contentType)
              Sets the content type for this file.
     void setFileName(java.lang.String fileName)
              Sets the file name of this file.
     void setFileSize(int fileSize)
              Sets the file size.
     

    Method Detail

    getContentType

    public java.lang.String getContentType()
    Returns the content type for this file.

    Returns:
    A String representing content type.

    setContentType

    public void setContentType(java.lang.String contentType)
    Sets the content type for this file.

    Parameters:
    contentType - The content type for the file.

    getFileSize

    public int getFileSize()
    Returns the size of this file.

    Returns:
    The size of the file, in bytes.

    setFileSize

    public void setFileSize(int fileSize)
    Sets the file size.

    Parameters:
    fileSize - The size of the file, in bytes,

    getFileName

    public java.lang.String getFileName()
    Returns the file name of this file. This is the base name of the file, as supplied by the user when the file was uploaded.

    Returns:
    The base file name.

    setFileName

    public void setFileName(java.lang.String fileName)
    Sets the file name of this file.

    Parameters:
    fileName - The base file name.

    getFileData

    public byte[] getFileData()
                       throws java.io.FileNotFoundException,
                              java.io.IOException
    Returns the data for the entire file as byte array. Care is needed when using this method, since a large upload could easily exhaust available memory. The preferred method for accessing the file data is getInputStream.

    Returns:
    The file data as a byte array.
    Throws:
    java.io.FileNotFoundException - if the uploaded file is not found.
    java.io.IOException - if an error occurred while reading the file.

    getInputStream

    public java.io.InputStream getInputStream()
                                       throws java.io.FileNotFoundException,
                                              java.io.IOException
    Returns an input stream for this file. The caller must close the stream when it is no longer needed.

    Throws:
    java.io.FileNotFoundException - if the uploaded file is not found.
    java.io.IOException - if an error occurred while reading the file.

    destroy

    public void destroy()
    Destroys all content for the uploaded file, including any underlying data files.



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/MaxLengthExceededException.html0000644000175000017500000003133510404045204032717 0ustar arnaudarnaud00000000000000 MaxLengthExceededException (Apache Struts API Documentation)

    org.apache.struts.upload
    Class MaxLengthExceededException

    java.lang.Object
      |
      +--java.lang.Throwable
            |
            +--java.lang.Exception
                  |
                  +--java.io.IOException
                        |
                        +--org.apache.struts.upload.MaxLengthExceededException
    
    All Implemented Interfaces:
    java.io.Serializable

    public class MaxLengthExceededException
    extends java.io.IOException

    This exception is thrown when multipart post data exceeds the maximum value set

    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String message
               
     
    Fields inherited from class java.lang.Exception
     
    Fields inherited from class java.lang.Throwable
     
    Constructor Summary
    MaxLengthExceededException()
               
    MaxLengthExceededException(long maxLength)
               
     
    Method Summary
     java.lang.String getMessage()
               
     
    Methods inherited from class java.lang.Throwable
    fillInStackTrace, getCause, getLocalizedMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
     

    Field Detail

    message

    protected java.lang.String message
    Constructor Detail

    MaxLengthExceededException

    public MaxLengthExceededException()

    MaxLengthExceededException

    public MaxLengthExceededException(long maxLength)
    Method Detail

    getMessage

    public java.lang.String getMessage()
    Overrides:
    getMessage in class java.lang.Throwable


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/MultipartBoundaryInputStream.html0000644000175000017500000017644110404045212033412 0ustar arnaudarnaud00000000000000 MultipartBoundaryInputStream (Apache Struts API Documentation)

    org.apache.struts.upload
    Class MultipartBoundaryInputStream

    java.lang.Object
      |
      +--java.io.InputStream
            |
            +--org.apache.struts.upload.MultipartBoundaryInputStream
    

    public class MultipartBoundaryInputStream
    extends java.io.InputStream

    This class encapsulates parsing functionality for RFC1867, multipart/form-data. See MultipartBoundaryInputStreamTest and MultipartIterator for usage examples.

    Author:
    Mike Schachter

    Field Summary
    protected  java.lang.String boundary
              The boundary.
    private  byte[] boundaryBytes
               
    protected  boolean boundaryEncountered
              Whether or not the boundary has been encountered.
    protected  long bytesRead
              The total number of bytes read so far.
    private static byte CARRIAGE_RETURN
               
    private static java.lang.String CONTENT_TYPE_APPLICATION_OCTET_STREAM
               
    private static java.lang.String CONTENT_TYPE_TEXT_PLAIN
               
    private static byte[] CRLF
               
    private static java.lang.String DEFAULT_CONTENT_DISPOSITION
               
    private static int DEFAULT_LINE_SIZE
               
    private static java.lang.String DOUBLE_DASH_STRING
               
    protected  java.lang.String elementCharset
              The character encoding of the element, specified in the element's Content-Type header.
    protected  java.lang.String elementContentDisposition
              The Content-Disposition for the current form element being read.
    protected  java.lang.String elementContentType
              The Content-Type of the current form element being read.
    protected  java.lang.String elementFileName
              The filename of the current form element being read, null if the current form element is text data.
    protected  java.lang.String elementName
              The name of the current form element being read.
    protected  boolean endOfStream
              Whether or not the end of the stream has been read.
    private  byte[] finalBoundaryBytes
               
    protected  boolean finalBoundaryEncountered
              Whether or not the final boundary has been encountered.
    protected  java.io.InputStream inputStream
              The InputStream to read from.
    private  byte[] line
               
    private  boolean lineHasCarriage
               
    private  boolean lineHasNewline
               
    private  int lineIndex
               
    private  int lineLength
               
    private  int lineSize
               
    protected  long maxLength
              The maximum length in bytes to read from the stream at a time, or -1 for unlimited length.
    protected  boolean maxLengthMet
              Whether or not the maximum length has been met.
    private static java.lang.String MESSAGE_INVALID_START
               
    private static byte NEWLINE_BYTE
               
    private static java.lang.String PARAMETER_CHARSET
               
    private static java.lang.String PARAMETER_FILENAME
               
    private static java.lang.String PARAMETER_NAME
               
    private static char TOKEN_COLON
               
    private static java.lang.String TOKEN_EQUALS
               
    private static char TOKEN_QUOTE
               
    private static char TOKEN_SEMI_COLON
               
    private static char TOKEN_SPACE
               
     
    Fields inherited from class java.io.InputStream
     
    Constructor Summary
    MultipartBoundaryInputStream()
               
     
    Method Summary
    private  int availableInLine()
               
    private  void byteRead()
               
    private  java.lang.String checkAndFixFilename(java.lang.String filename)
               
    private  void checkForBoundary()
               
    private  boolean equals(byte[] comp, int offset, int length, byte[] source)
              Checks bytes for equality.
    private  void fillLine()
               
    private  void fillLineBuffer()
               
     long getBytesRead()
               
     java.lang.String getElementCharset()
              Gets the character encoding of the current element.
     java.lang.String getElementContentDisposition()
              Gets the value for the "Content-Dispositio" header for the current multipart element.
     java.lang.String getElementContentType()
              Gets the "Content-Type" of the current element.
     java.lang.String getElementFileName()
              Gets the filename of the current element, which will be null if the current element isn't a file.
     java.lang.String getElementName()
              Gets the name of the current element.
     long getMaxLength()
               
     boolean isBoundaryEncountered()
              Returns whether or not the boundary has been encountered while reading data.
     boolean isElementFile()
              Gets whether or not the current form element being read is a file.
     boolean isEndOfStream()
              Whether or not an EOF has been read on the stream.
     boolean isFinalBoundaryEncountered()
              Returns whether or not the final boundary has been encountered.
     boolean isMaxLengthMet()
              Whether or not the maximum length has been met.
     void mark(int i)
              Marks the underlying stream.
    private  java.lang.String parseForParameter(java.lang.String parameter, java.lang.String parseString)
               
    private  java.lang.String parseHeaderValue(java.lang.String headerLine)
               
     int read()
              Reads from the stream.
     int read(byte[] buffer)
               
     int read(byte[] buffer, int offset, int length)
               
    private  void readContentDisposition()
               
    private  boolean readContentType()
               
    private  void readElementHeaders()
               
    private  void readFirstElement()
               
    private  int readFromLine()
               
    private  java.lang.String readLine()
               
     void reset()
              Resets the underlying input stream.
    private  void resetCrlf()
               
     void resetForNextBoundary()
              Resets this stream for use with the next element, to be used after a boundary is encountered.
    private  void resetLine()
               
    private  void resetStream()
               
     void setBoundary(java.lang.String boundary)
              Sets the boundary that terminates the data for the stream, after adding the prefix "--"
     void setInputStream(java.io.InputStream stream)
              Sets the input stream used to read multipart data.
     void setLineSize(int size)
               
     void setMaxLength(long maxLength)
              Set the maximum length in bytes to read, or -1 for an unlimited length.
    private  void skipCurrentLineIfBlank()
               
     
    Methods inherited from class java.io.InputStream
    available, close, markSupported, skip
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    NEWLINE_BYTE

    private static final byte NEWLINE_BYTE
    See Also:
    Constant Field Values

    CARRIAGE_RETURN

    private static final byte CARRIAGE_RETURN
    See Also:
    Constant Field Values

    CRLF

    private static final byte[] CRLF

    DOUBLE_DASH_STRING

    private static final java.lang.String DOUBLE_DASH_STRING
    See Also:
    Constant Field Values

    DEFAULT_LINE_SIZE

    private static final int DEFAULT_LINE_SIZE
    See Also:
    Constant Field Values

    TOKEN_EQUALS

    private static final java.lang.String TOKEN_EQUALS
    See Also:
    Constant Field Values

    TOKEN_QUOTE

    private static final char TOKEN_QUOTE
    See Also:
    Constant Field Values

    TOKEN_COLON

    private static final char TOKEN_COLON
    See Also:
    Constant Field Values

    TOKEN_SEMI_COLON

    private static final char TOKEN_SEMI_COLON
    See Also:
    Constant Field Values

    TOKEN_SPACE

    private static final char TOKEN_SPACE
    See Also:
    Constant Field Values

    DEFAULT_CONTENT_DISPOSITION

    private static final java.lang.String DEFAULT_CONTENT_DISPOSITION
    See Also:
    Constant Field Values

    PARAMETER_NAME

    private static final java.lang.String PARAMETER_NAME
    See Also:
    Constant Field Values

    PARAMETER_FILENAME

    private static final java.lang.String PARAMETER_FILENAME
    See Also:
    Constant Field Values

    PARAMETER_CHARSET

    private static final java.lang.String PARAMETER_CHARSET
    See Also:
    Constant Field Values

    CONTENT_TYPE_TEXT_PLAIN

    private static final java.lang.String CONTENT_TYPE_TEXT_PLAIN
    See Also:
    Constant Field Values

    CONTENT_TYPE_APPLICATION_OCTET_STREAM

    private static final java.lang.String CONTENT_TYPE_APPLICATION_OCTET_STREAM
    See Also:
    Constant Field Values

    MESSAGE_INVALID_START

    private static final java.lang.String MESSAGE_INVALID_START
    See Also:
    Constant Field Values

    inputStream

    protected java.io.InputStream inputStream
    The InputStream to read from.


    boundary

    protected java.lang.String boundary
    The boundary.


    boundaryEncountered

    protected boolean boundaryEncountered
    Whether or not the boundary has been encountered.


    finalBoundaryEncountered

    protected boolean finalBoundaryEncountered
    Whether or not the final boundary has been encountered.


    endOfStream

    protected boolean endOfStream
    Whether or not the end of the stream has been read.


    elementContentDisposition

    protected java.lang.String elementContentDisposition
    The Content-Disposition for the current form element being read.


    elementName

    protected java.lang.String elementName
    The name of the current form element being read.


    elementContentType

    protected java.lang.String elementContentType
    The Content-Type of the current form element being read.


    elementFileName

    protected java.lang.String elementFileName
    The filename of the current form element being read, null if the current form element is text data.


    elementCharset

    protected java.lang.String elementCharset
    The character encoding of the element, specified in the element's Content-Type header.


    maxLength

    protected long maxLength
    The maximum length in bytes to read from the stream at a time, or -1 for unlimited length.


    maxLengthMet

    protected boolean maxLengthMet
    Whether or not the maximum length has been met.


    bytesRead

    protected long bytesRead
    The total number of bytes read so far.


    boundaryBytes

    private byte[] boundaryBytes

    finalBoundaryBytes

    private byte[] finalBoundaryBytes

    line

    private byte[] line

    lineSize

    private int lineSize

    lineLength

    private int lineLength

    lineHasNewline

    private boolean lineHasNewline

    lineHasCarriage

    private boolean lineHasCarriage

    lineIndex

    private int lineIndex
    Constructor Detail

    MultipartBoundaryInputStream

    public MultipartBoundaryInputStream()
    Method Detail

    setBoundary

    public void setBoundary(java.lang.String boundary)
    Sets the boundary that terminates the data for the stream, after adding the prefix "--"


    resetForNextBoundary

    public void resetForNextBoundary()
                              throws java.io.IOException
    Resets this stream for use with the next element, to be used after a boundary is encountered.

    java.io.IOException

    setInputStream

    public void setInputStream(java.io.InputStream stream)
                        throws java.io.IOException
    Sets the input stream used to read multipart data. For efficiency purposes, make sure that the stream you set on this class is buffered. The way this class reads lines is that it continually calls the read() method until it reaches a newline character. That would be terrible if you were to set a socket's input stream here, but not as bad on a buffered stream.

    java.io.IOException

    read

    public int read()
             throws java.io.IOException
    Reads from the stream. Returns -1 if it's the end of the stream or if a boundary is encountered.

    Specified by:
    read in class java.io.InputStream
    java.io.IOException

    read

    public int read(byte[] buffer)
             throws java.io.IOException
    Overrides:
    read in class java.io.InputStream
    java.io.IOException

    read

    public int read(byte[] buffer,
                    int offset,
                    int length)
             throws java.io.IOException
    Overrides:
    read in class java.io.InputStream
    java.io.IOException

    mark

    public void mark(int i)
    Marks the underlying stream.

    Overrides:
    mark in class java.io.InputStream

    reset

    public void reset()
               throws java.io.IOException
    Resets the underlying input stream.

    Overrides:
    reset in class java.io.InputStream
    java.io.IOException

    setMaxLength

    public void setMaxLength(long maxLength)
    Set the maximum length in bytes to read, or -1 for an unlimited length.


    getMaxLength

    public long getMaxLength()

    isMaxLengthMet

    public boolean isMaxLengthMet()
    Whether or not the maximum length has been met.


    getElementContentDisposition

    public java.lang.String getElementContentDisposition()
    Gets the value for the "Content-Dispositio" header for the current multipart element. Usually "form-data".


    getElementName

    public java.lang.String getElementName()
    Gets the name of the current element. The name corresponds to the value of the "name" attribute of the form element.


    getElementCharset

    public java.lang.String getElementCharset()
    Gets the character encoding of the current element. The character encoding would have been specified in the Content-Type header for this element, if it wasn't this is null.


    getElementContentType

    public java.lang.String getElementContentType()
    Gets the "Content-Type" of the current element. If this is a text element, the content type will probably be "text/plain", otherwise it will be the content type of the file element.


    getElementFileName

    public java.lang.String getElementFileName()
    Gets the filename of the current element, which will be null if the current element isn't a file.


    isElementFile

    public boolean isElementFile()
    Gets whether or not the current form element being read is a file.


    isBoundaryEncountered

    public boolean isBoundaryEncountered()
    Returns whether or not the boundary has been encountered while reading data.


    isFinalBoundaryEncountered

    public boolean isFinalBoundaryEncountered()
    Returns whether or not the final boundary has been encountered.


    isEndOfStream

    public boolean isEndOfStream()
    Whether or not an EOF has been read on the stream.


    setLineSize

    public void setLineSize(int size)

    getBytesRead

    public long getBytesRead()

    readFirstElement

    private final void readFirstElement()
                                 throws java.io.IOException
    java.io.IOException

    readElementHeaders

    private final void readElementHeaders()
                                   throws java.io.IOException
    java.io.IOException

    readContentDisposition

    private final void readContentDisposition()
                                       throws java.io.IOException
    java.io.IOException

    checkAndFixFilename

    private final java.lang.String checkAndFixFilename(java.lang.String filename)

    parseForParameter

    private final java.lang.String parseForParameter(java.lang.String parameter,
                                                     java.lang.String parseString)

    readContentType

    private final boolean readContentType()
                                   throws java.io.IOException
    java.io.IOException

    parseHeaderValue

    private final java.lang.String parseHeaderValue(java.lang.String headerLine)

    skipCurrentLineIfBlank

    private final void skipCurrentLineIfBlank()
                                       throws java.io.IOException
    java.io.IOException

    resetCrlf

    private final void resetCrlf()

    resetStream

    private final void resetStream()

    readLine

    private final java.lang.String readLine()
                                     throws java.io.IOException
    java.io.IOException

    readFromLine

    private final int readFromLine()
                            throws java.io.IOException
    java.io.IOException

    availableInLine

    private final int availableInLine()

    fillLine

    private final void fillLine()
                         throws java.io.IOException
    java.io.IOException

    resetLine

    private final void resetLine()

    fillLineBuffer

    private final void fillLineBuffer()
                               throws java.io.IOException
    java.io.IOException

    byteRead

    private final void byteRead()

    checkForBoundary

    private final void checkForBoundary()

    equals

    private final boolean equals(byte[] comp,
                                 int offset,
                                 int length,
                                 byte[] source)
    Checks bytes for equality. Two byte arrays are equal if each of their elements are the same. This method checks comp[offset] with source[0] to source[length-1] with comp[offset + length - 1]

    Parameters:
    comp - The byte to compare to source
    offset - The offset to start at in comp
    length - The length of comp to compare to
    source - The reference byte array to test for equality


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/MultipartElement.html0000644000175000017500000006173310404045226031026 0ustar arnaudarnaud00000000000000 MultipartElement (Apache Struts API Documentation)

    org.apache.struts.upload
    Class MultipartElement

    java.lang.Object
      |
      +--org.apache.struts.upload.MultipartElement
    

    public class MultipartElement
    extends java.lang.Object

    This class represents an element in a multipart request. It has a few methods for determining * whether or not the element is a String or a file, and methods to retrieve the data of the aforementioned element. Text input elements have a null content type, files have a non-null content type.

    Author:
    Mike Schachter

    Field Summary
    protected  java.lang.String contentType
              The content type of this element.
    protected  byte[] data
              Deprecated. This should never be used.
    protected  java.io.File file
              The element's data represented in a (possibly temporary) file.
    protected  java.lang.String fileName
              The element's filename, null for text elements.
    protected  boolean isFile
              Whether or not this element is a file.
    protected  java.lang.String name
              The element name.
    protected  java.lang.String value
              The element's text value, null for file elements
     
    Constructor Summary
    MultipartElement(java.lang.String name, java.lang.String value)
              Constructor for a text element.
    MultipartElement(java.lang.String name, java.lang.String fileName, java.lang.String contentType, byte[] data)
              Deprecated. Use the constructor that takes an File as an argument as opposed to a byte array argument, which can cause memory problems.
    MultipartElement(java.lang.String name, java.lang.String fileName, java.lang.String contentType, java.io.File file)
              Constructor for a file element.
     
    Method Summary
     java.lang.String getContentType()
              Retrieve the content type.
     byte[] getData()
              Deprecated. Use the getFile method to get a File representing the data for this element
     java.io.File getFile()
              Get the File that holds the data for this element.
     java.lang.String getFileName()
              Retrieve the filename, can return null for text elements.
     java.lang.String getName()
              Retrieve the name.
     java.lang.String getValue()
              Returns the value of this multipart element.
     boolean isFile()
              Is this element a file.
     void setContentType(java.lang.String contentType)
              Set the content type.
     void setData(byte[] data)
              Deprecated. Use the setFile method to set the file that represents the data of this element
     void setFile(java.io.File file)
              Set the file that represents this element.
     void setFileName(java.lang.String fileName)
              Set the file name for this element.
     void setName(java.lang.String name)
              Set the name for this element.
     void setValue(java.lang.String value)
               
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    contentType

    protected java.lang.String contentType
    The content type of this element.


    data

    protected byte[] data
    Deprecated. This should never be used.

    The element data.


    file

    protected java.io.File file
    The element's data represented in a (possibly temporary) file.


    name

    protected java.lang.String name
    The element name.


    fileName

    protected java.lang.String fileName
    The element's filename, null for text elements.


    value

    protected java.lang.String value
    The element's text value, null for file elements


    isFile

    protected boolean isFile
    Whether or not this element is a file.

    Constructor Detail

    MultipartElement

    public MultipartElement(java.lang.String name,
                            java.lang.String fileName,
                            java.lang.String contentType,
                            byte[] data)
    Deprecated. Use the constructor that takes an File as an argument as opposed to a byte array argument, which can cause memory problems.


    MultipartElement

    public MultipartElement(java.lang.String name,
                            java.lang.String fileName,
                            java.lang.String contentType,
                            java.io.File file)
    Constructor for a file element.

    Parameters:
    name - The form name of the element
    fileName - The file name of the element if this element is a file
    contentType - The content type of the element if a file
    file - The (possibly temporary) file representing this element if it's a file

    MultipartElement

    public MultipartElement(java.lang.String name,
                            java.lang.String value)
    Constructor for a text element.

    Parameters:
    name - The name of the element
    value - The value of the element
    Method Detail

    getContentType

    public java.lang.String getContentType()
    Retrieve the content type.


    getData

    public byte[] getData()
    Deprecated. Use the getFile method to get a File representing the data for this element

    Retrieve the data.


    getFile

    public java.io.File getFile()
    Get the File that holds the data for this element.


    getName

    public java.lang.String getName()
    Retrieve the name.


    getFileName

    public java.lang.String getFileName()
    Retrieve the filename, can return null for text elements.


    getValue

    public java.lang.String getValue()
    Returns the value of this multipart element.

    Returns:
    A String if the element is a text element, null otherwise

    setFile

    public void setFile(java.io.File file)
    Set the file that represents this element.


    setFileName

    public void setFileName(java.lang.String fileName)
    Set the file name for this element.


    setName

    public void setName(java.lang.String name)
    Set the name for this element.


    setContentType

    public void setContentType(java.lang.String contentType)
    Set the content type.


    isFile

    public boolean isFile()
    Is this element a file.


    setValue

    public void setValue(java.lang.String value)

    setData

    public void setData(byte[] data)
    Deprecated. Use the setFile method to set the file that represents the data of this element

    Set the data.



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/MultipartIterator.html0000644000175000017500000011067210404045214031220 0ustar arnaudarnaud00000000000000 MultipartIterator (Apache Struts API Documentation)

    org.apache.struts.upload
    Class MultipartIterator

    java.lang.Object
      |
      +--org.apache.struts.upload.MultipartIterator
    

    public class MultipartIterator
    extends java.lang.Object

    The MultipartIterator class is responsible for reading the input data of a multipart request and splitting it up into input elements, wrapped inside of a MultipartElement for easy definition. To use this class, create a new instance of MultipartIterator passing it a HttpServletRequest in the constructor. Then use the getNextElement method until it returns null, then you're finished. Example:

          MultipartIterator iterator = new MultipartIterator(request);
          MultipartElement element;
    
          while ((element = iterator.getNextElement()) != null) {
               //do something with element
          }
     

    Author:
    Mike Schachter
    See Also:
    MultipartElement

    Field Summary
    protected  java.lang.String boundary
              The boundary for this multipart request
    protected  int bufferSize
              The amount of data read from a request at a time.
    protected  int contentLength
              The content length of this request
    protected  java.lang.String contentType
              The content-type.
    private static java.lang.String DEFAULT_ENCODING
              The default encoding of a text element if none is specified.
    protected  int diskBufferSize
              The size in bytes written to the filesystem at a time [20K]
    private static java.lang.String FILE_PREFIX
               
    static java.lang.String HEADER_CONTENT_DISPOSITION
              The name of the Content-Disposition header.
    static java.lang.String HEADER_CONTENT_TYPE
              The name of the Content-Type header.
    protected  MultipartBoundaryInputStream inputStream
              The InputStream to use to read the multipart data.
    protected  boolean maxLengthExceeded
              Whether the maximum length has been exceeded.
    protected  long maxSize
              The maximum file size in bytes allowed.
    static java.lang.String MESSAGE_CANNOT_RETRIEVE_BOUNDARY
              The exception message for when the boundary of a multipart request can't be determined.
    private static java.lang.String PARAMETER_BOUNDARY
               
    protected  javax.servlet.http.HttpServletRequest request
              The request instance for this class
    protected  java.lang.String tempDir
              The temporary directory to store files
    private static int TEXT_BUFFER_SIZE
              The size in bytes to copy of text data at a time.
     
    Constructor Summary
    MultipartIterator(javax.servlet.http.HttpServletRequest request)
              Constructs a MultipartIterator with a default buffer size and no file size limit
    MultipartIterator(javax.servlet.http.HttpServletRequest request, int bufferSize)
              Constructs a MultipartIterator with the specified buffer size and no file size limit
    MultipartIterator(javax.servlet.http.HttpServletRequest request, int bufferSize, long maxSize)
              Constructs a MultipartIterator with the specified buffer size and the specified file size limit in bytes
    MultipartIterator(javax.servlet.http.HttpServletRequest request, int bufferSize, long maxSize, java.lang.String tempDir)
               
     
    Method Summary
    protected  MultipartElement createFileMultipartElement()
              Create a multipart element instance representing the file in the stream.
    protected  java.io.File createLocalFile()
              Creates a file on disk from the current mulitpart element.
    protected  MultipartElement createTextMultipartElement(java.lang.String encoding)
              Create a text element from the data in the body of the element.
    private  void getBoundaryFromContentType()
              Parses a content-type String for the boundary.
     int getBufferSize()
              Get the maximum amount of bytes read from a line at one time
    private  void getContentTypeOfRequest()
              Gets the value of the Content-Type header of the request.
    protected  java.lang.String getElementEncoding()
              Get the character encoding used for this current multipart element.
     long getMaxSize()
              Get the maximum post data size allowed for a multipart request
     MultipartElement getNextElement()
              Retrieves the next element in the iterator if one exists.
     boolean isMaxLengthExceeded()
              Whether or not the maximum length has been exceeded by the client.
    protected  void parseRequest()
              Handles retrieving the boundary and setting the input stream
     void setBufferSize(int bufferSize)
              Set the maximum amount of bytes read from a line at one time
     void setMaxSize(long maxSize)
              Set the maximum post data size allowed for a multipart request
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    DEFAULT_ENCODING

    private static final java.lang.String DEFAULT_ENCODING
    The default encoding of a text element if none is specified.

    See Also:
    Constant Field Values

    TEXT_BUFFER_SIZE

    private static final int TEXT_BUFFER_SIZE
    The size in bytes to copy of text data at a time.

    See Also:
    Constant Field Values

    HEADER_CONTENT_TYPE

    public static java.lang.String HEADER_CONTENT_TYPE
    The name of the Content-Type header.


    HEADER_CONTENT_DISPOSITION

    public static final java.lang.String HEADER_CONTENT_DISPOSITION
    The name of the Content-Disposition header.

    See Also:
    Constant Field Values

    MESSAGE_CANNOT_RETRIEVE_BOUNDARY

    public static final java.lang.String MESSAGE_CANNOT_RETRIEVE_BOUNDARY
    The exception message for when the boundary of a multipart request can't be determined.

    See Also:
    Constant Field Values

    PARAMETER_BOUNDARY

    private static final java.lang.String PARAMETER_BOUNDARY
    See Also:
    Constant Field Values

    FILE_PREFIX

    private static final java.lang.String FILE_PREFIX
    See Also:
    Constant Field Values

    request

    protected javax.servlet.http.HttpServletRequest request
    The request instance for this class


    inputStream

    protected MultipartBoundaryInputStream inputStream
    The InputStream to use to read the multipart data.


    boundary

    protected java.lang.String boundary
    The boundary for this multipart request


    maxSize

    protected long maxSize
    The maximum file size in bytes allowed. Ignored if -1


    contentLength

    protected int contentLength
    The content length of this request


    diskBufferSize

    protected int diskBufferSize
    The size in bytes written to the filesystem at a time [20K]


    bufferSize

    protected int bufferSize
    The amount of data read from a request at a time. This also represents the maximum size in bytes of a line read from the request [4KB]


    tempDir

    protected java.lang.String tempDir
    The temporary directory to store files


    contentType

    protected java.lang.String contentType
    The content-type.


    maxLengthExceeded

    protected boolean maxLengthExceeded
    Whether the maximum length has been exceeded.

    Constructor Detail

    MultipartIterator

    public MultipartIterator(javax.servlet.http.HttpServletRequest request)
                      throws java.io.IOException
    Constructs a MultipartIterator with a default buffer size and no file size limit

    Parameters:
    request - The multipart request to iterate

    MultipartIterator

    public MultipartIterator(javax.servlet.http.HttpServletRequest request,
                             int bufferSize)
                      throws java.io.IOException
    Constructs a MultipartIterator with the specified buffer size and no file size limit

    Parameters:
    request - The multipart request to iterate
    bufferSize - The size in bytes that should be read from the input stream at a times

    MultipartIterator

    public MultipartIterator(javax.servlet.http.HttpServletRequest request,
                             int bufferSize,
                             long maxSize)
                      throws java.io.IOException
    Constructs a MultipartIterator with the specified buffer size and the specified file size limit in bytes

    Parameters:
    request - The multipart request to iterate
    bufferSize - The size in bytes that should be read from the input stream at a times
    maxSize - The maximum size in bytes allowed for a multipart element's data

    MultipartIterator

    public MultipartIterator(javax.servlet.http.HttpServletRequest request,
                             int bufferSize,
                             long maxSize,
                             java.lang.String tempDir)
                      throws java.io.IOException
    Method Detail

    parseRequest

    protected void parseRequest()
                         throws java.io.IOException
    Handles retrieving the boundary and setting the input stream

    java.io.IOException

    getNextElement

    public MultipartElement getNextElement()
                                    throws java.io.IOException
    Retrieves the next element in the iterator if one exists.

    Returns:
    a MultipartElement representing the next element in the request data
    Throws:
    java.io.IOException - if the post size exceeds the maximum file size passed in the 3 argument constructor or if the "ISO-8859-1" encoding isn't found

    getElementEncoding

    protected java.lang.String getElementEncoding()
    Get the character encoding used for this current multipart element.


    createTextMultipartElement

    protected MultipartElement createTextMultipartElement(java.lang.String encoding)
                                                   throws java.io.IOException
    Create a text element from the data in the body of the element.

    Parameters:
    encoding - The character encoding of the string.
    java.io.IOException

    createFileMultipartElement

    protected MultipartElement createFileMultipartElement()
                                                   throws java.io.IOException
    Create a multipart element instance representing the file in the stream.

    java.io.IOException

    setBufferSize

    public void setBufferSize(int bufferSize)
    Set the maximum amount of bytes read from a line at one time

    See Also:
    ServletInputStream.readLine(byte[], int, int)

    getBufferSize

    public int getBufferSize()
    Get the maximum amount of bytes read from a line at one time

    See Also:
    ServletInputStream.readLine(byte[], int, int)

    setMaxSize

    public void setMaxSize(long maxSize)
    Set the maximum post data size allowed for a multipart request

    Parameters:
    maxSize - The maximum post data size in bytes, set to -1 for no limit

    getMaxSize

    public long getMaxSize()
    Get the maximum post data size allowed for a multipart request

    Returns:
    The maximum post data size in bytes

    isMaxLengthExceeded

    public boolean isMaxLengthExceeded()
    Whether or not the maximum length has been exceeded by the client.


    getBoundaryFromContentType

    private final void getBoundaryFromContentType()
                                           throws java.io.IOException
    Parses a content-type String for the boundary.

    java.io.IOException

    getContentTypeOfRequest

    private final void getContentTypeOfRequest()
    Gets the value of the Content-Type header of the request.


    createLocalFile

    protected java.io.File createLocalFile()
                                    throws java.io.IOException
    Creates a file on disk from the current mulitpart element.

    java.io.IOException


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/MultipartRequestHandler.html0000644000175000017500000004444710404045222032362 0ustar arnaudarnaud00000000000000 MultipartRequestHandler (Apache Struts API Documentation)

    org.apache.struts.upload
    Interface MultipartRequestHandler

    All Known Implementing Classes:
    CommonsMultipartRequestHandler, DiskMultipartRequestHandler

    public interface MultipartRequestHandler

    MultipartRequestHandler provides an standard interface for struts to deal with file uploads from forms with enctypes of "multipart/form-data". Providers must provide a no-argument constructor for initialization.

    Author:
    Mike Schachter

    Field Summary
    static java.lang.String ATTRIBUTE_MAX_LENGTH_EXCEEDED
              This is the ServletRequest attribute that should be set when a multipart request is being read and the maximum length is exceeded.
     
    Method Summary
     void finish()
              This method is called on when a successful form post has been made.
     java.util.Hashtable getAllElements()
              This method returns all elements of a multipart request.
     java.util.Hashtable getFileElements()
              This method is called on to retrieve all the FormFile input elements of the request.
     ActionMapping getMapping()
              Get the ActionMapping instance for this request
     ActionServlet getServlet()
              Get the ActionServlet instance
     java.util.Hashtable getTextElements()
              This method is called on to retrieve all the text input elements of the request.
     void handleRequest(javax.servlet.http.HttpServletRequest request)
              After constructed, this is the first method called on by ActionServlet.
     void rollback()
              This method is called on when there's some sort of problem and the form post needs to be rolled back.
     void setMapping(ActionMapping mapping)
              Convienience method to set a reference to a working ActionMapping instance.
     void setServlet(ActionServlet servlet)
              Convienience method to set a reference to a working ActionServlet instance.
     

    Field Detail

    ATTRIBUTE_MAX_LENGTH_EXCEEDED

    public static final java.lang.String ATTRIBUTE_MAX_LENGTH_EXCEEDED
    This is the ServletRequest attribute that should be set when a multipart request is being read and the maximum length is exceeded. The value is a Boolean. If the maximum length isn't exceeded, this attribute shouldn't be put in the ServletRequest. It's the job of the implementation to put this attribute in the request if the maximum length is exceeded; in the handleRequest(HttpServletRequest) method.

    See Also:
    Constant Field Values
    Method Detail

    setServlet

    public void setServlet(ActionServlet servlet)
    Convienience method to set a reference to a working ActionServlet instance.


    setMapping

    public void setMapping(ActionMapping mapping)
    Convienience method to set a reference to a working ActionMapping instance.


    getServlet

    public ActionServlet getServlet()
    Get the ActionServlet instance


    getMapping

    public ActionMapping getMapping()
    Get the ActionMapping instance for this request


    handleRequest

    public void handleRequest(javax.servlet.http.HttpServletRequest request)
                       throws javax.servlet.ServletException
    After constructed, this is the first method called on by ActionServlet. Use this method for all your data-parsing of the ServletInputStream in the request

    Throws:
    javax.servlet.ServletException - thrown if something goes wrong

    getTextElements

    public java.util.Hashtable getTextElements()
    This method is called on to retrieve all the text input elements of the request.

    Returns:
    A Hashtable where the keys and values are the names and values of the request input parameters

    getFileElements

    public java.util.Hashtable getFileElements()
    This method is called on to retrieve all the FormFile input elements of the request.

    Returns:
    A Hashtable where the keys are the input names of the files and the values are FormFile objects
    See Also:
    FormFile

    getAllElements

    public java.util.Hashtable getAllElements()
    This method returns all elements of a multipart request.

    Returns:
    A Hashtable where the keys are input names and values are either Strings or FormFiles

    rollback

    public void rollback()
    This method is called on when there's some sort of problem and the form post needs to be rolled back. Providers should remove any FormFiles used to hold information by setting them to null and also physically delete them if the implementation calls for writing directly to disk. NOTE: Currently implemented but not automatically supported, ActionForm implementors must call rollback() manually for rolling back file uploads.


    finish

    public void finish()
    This method is called on when a successful form post has been made. Some implementations will use this to destroy temporary files or write to a database or something of that nature.



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/MultipartRequestWrapper.html0000644000175000017500000014365710404045236032435 0ustar arnaudarnaud00000000000000 MultipartRequestWrapper (Apache Struts API Documentation)

    org.apache.struts.upload
    Class MultipartRequestWrapper

    java.lang.Object
      |
      +--org.apache.struts.upload.MultipartRequestWrapper
    
    All Implemented Interfaces:
    javax.servlet.http.HttpServletRequest, javax.servlet.ServletRequest

    public class MultipartRequestWrapper
    extends java.lang.Object
    implements javax.servlet.http.HttpServletRequest

    This class functions as a wrapper around HttpServletRequest to provide working getParameter methods for multipart requests. Once Struts requires Servlet 2.3, this class will definately be changed to extend javax.servlet.http.HttpServletRequestWrapper instead of implementing HttpServletRequest. Servlet 2.3 methods are implemented to return null or do nothing if called on. Use getRequest to retrieve the underlying HttpServletRequest object and call on the 2.3 method there, the empty methods are here only so that this will compile with the Servlet 2.3 jar. This class exists temporarily in the process() method of ActionServlet, just before the ActionForward is processed and just after the Action is performed, the request is set back to the original HttpServletRequest object.


    Field Summary
    protected  java.util.Map parameters
              The parameters for this multipart request
    protected  javax.servlet.http.HttpServletRequest request
              The underlying HttpServletRequest
     
    Constructor Summary
    MultipartRequestWrapper(javax.servlet.http.HttpServletRequest request)
               
     
    Method Summary
     java.lang.Object getAttribute(java.lang.String name)
               
     java.util.Enumeration getAttributeNames()
               
     java.lang.String getAuthType()
               
     java.lang.String getCharacterEncoding()
               
     int getContentLength()
               
     java.lang.String getContentType()
               
     java.lang.String getContextPath()
               
     javax.servlet.http.Cookie[] getCookies()
               
     long getDateHeader(java.lang.String name)
               
     java.lang.String getHeader(java.lang.String name)
               
     java.util.Enumeration getHeaderNames()
               
     java.util.Enumeration getHeaders(java.lang.String name)
               
     javax.servlet.ServletInputStream getInputStream()
               
     int getIntHeader(java.lang.String name)
               
     java.util.Locale getLocale()
               
     java.util.Enumeration getLocales()
               
     java.lang.String getMethod()
               
     java.lang.String getParameter(java.lang.String name)
              Attempts to get a parameter for this request.
     java.util.Map getParameterMap()
              This method returns null.
     java.util.Enumeration getParameterNames()
              Returns the names of the parameters for this request.
     java.lang.String[] getParameterValues(java.lang.String name)
               
     java.lang.String getPathInfo()
               
     java.lang.String getPathTranslated()
               
     java.lang.String getProtocol()
               
     java.lang.String getQueryString()
               
     java.io.BufferedReader getReader()
               
     java.lang.String getRealPath(java.lang.String path)
               
     java.lang.String getRemoteAddr()
               
     java.lang.String getRemoteHost()
               
     java.lang.String getRemoteUser()
               
     javax.servlet.http.HttpServletRequest getRequest()
              Returns the underlying HttpServletRequest for this wrapper
     javax.servlet.RequestDispatcher getRequestDispatcher(java.lang.String path)
               
     java.lang.String getRequestedSessionId()
               
     java.lang.String getRequestURI()
               
     java.lang.StringBuffer getRequestURL()
              This method returns null.
     java.lang.String getScheme()
               
     java.lang.String getServerName()
               
     int getServerPort()
               
     java.lang.String getServletPath()
               
     javax.servlet.http.HttpSession getSession()
               
     javax.servlet.http.HttpSession getSession(boolean create)
               
     java.security.Principal getUserPrincipal()
               
     boolean isRequestedSessionIdFromCookie()
              This method returns false.
     boolean isRequestedSessionIdFromUrl()
               
     boolean isRequestedSessionIdFromURL()
               
     boolean isRequestedSessionIdValid()
               
     boolean isSecure()
               
     boolean isUserInRole(java.lang.String user)
               
     void removeAttribute(java.lang.String name)
               
     void setAttribute(java.lang.String name, java.lang.Object o)
               
     void setCharacterEncoding(java.lang.String encoding)
              This method does nothing.
     void setParameter(java.lang.String name, java.lang.String value)
              Sets a parameter for this request.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    parameters

    protected java.util.Map parameters
    The parameters for this multipart request


    request

    protected javax.servlet.http.HttpServletRequest request
    The underlying HttpServletRequest

    Constructor Detail

    MultipartRequestWrapper

    public MultipartRequestWrapper(javax.servlet.http.HttpServletRequest request)
    Method Detail

    setParameter

    public void setParameter(java.lang.String name,
                             java.lang.String value)
    Sets a parameter for this request. The parameter is actually separate from the request parameters, but calling on the getParameter() methods of this class will work as if they weren't.


    getParameter

    public java.lang.String getParameter(java.lang.String name)
    Attempts to get a parameter for this request. It first looks in the underlying HttpServletRequest object for the parameter, and if that doesn't exist it looks for the parameters retrieved from the multipart request

    Specified by:
    getParameter in interface javax.servlet.ServletRequest

    getParameterNames

    public java.util.Enumeration getParameterNames()
    Returns the names of the parameters for this request. The enumeration consists of the normal request parameter names plus the parameters read from the multipart request

    Specified by:
    getParameterNames in interface javax.servlet.ServletRequest

    getParameterValues

    public java.lang.String[] getParameterValues(java.lang.String name)
    Specified by:
    getParameterValues in interface javax.servlet.ServletRequest

    getRequest

    public javax.servlet.http.HttpServletRequest getRequest()
    Returns the underlying HttpServletRequest for this wrapper


    getAttribute

    public java.lang.Object getAttribute(java.lang.String name)
    Specified by:
    getAttribute in interface javax.servlet.ServletRequest

    getAttributeNames

    public java.util.Enumeration getAttributeNames()
    Specified by:
    getAttributeNames in interface javax.servlet.ServletRequest

    getCharacterEncoding

    public java.lang.String getCharacterEncoding()
    Specified by:
    getCharacterEncoding in interface javax.servlet.ServletRequest

    getContentLength

    public int getContentLength()
    Specified by:
    getContentLength in interface javax.servlet.ServletRequest

    getContentType

    public java.lang.String getContentType()
    Specified by:
    getContentType in interface javax.servlet.ServletRequest

    getInputStream

    public javax.servlet.ServletInputStream getInputStream()
                                                    throws java.io.IOException
    Specified by:
    getInputStream in interface javax.servlet.ServletRequest
    java.io.IOException

    getProtocol

    public java.lang.String getProtocol()
    Specified by:
    getProtocol in interface javax.servlet.ServletRequest

    getScheme

    public java.lang.String getScheme()
    Specified by:
    getScheme in interface javax.servlet.ServletRequest

    getServerName

    public java.lang.String getServerName()
    Specified by:
    getServerName in interface javax.servlet.ServletRequest

    getServerPort

    public int getServerPort()
    Specified by:
    getServerPort in interface javax.servlet.ServletRequest

    getReader

    public java.io.BufferedReader getReader()
                                     throws java.io.IOException
    Specified by:
    getReader in interface javax.servlet.ServletRequest
    java.io.IOException

    getRemoteAddr

    public java.lang.String getRemoteAddr()
    Specified by:
    getRemoteAddr in interface javax.servlet.ServletRequest

    getRemoteHost

    public java.lang.String getRemoteHost()
    Specified by:
    getRemoteHost in interface javax.servlet.ServletRequest

    setAttribute

    public void setAttribute(java.lang.String name,
                             java.lang.Object o)
    Specified by:
    setAttribute in interface javax.servlet.ServletRequest

    removeAttribute

    public void removeAttribute(java.lang.String name)
    Specified by:
    removeAttribute in interface javax.servlet.ServletRequest

    getLocale

    public java.util.Locale getLocale()
    Specified by:
    getLocale in interface javax.servlet.ServletRequest

    getLocales

    public java.util.Enumeration getLocales()
    Specified by:
    getLocales in interface javax.servlet.ServletRequest

    isSecure

    public boolean isSecure()
    Specified by:
    isSecure in interface javax.servlet.ServletRequest

    getRequestDispatcher

    public javax.servlet.RequestDispatcher getRequestDispatcher(java.lang.String path)
    Specified by:
    getRequestDispatcher in interface javax.servlet.ServletRequest

    getRealPath

    public java.lang.String getRealPath(java.lang.String path)
    Specified by:
    getRealPath in interface javax.servlet.ServletRequest

    getAuthType

    public java.lang.String getAuthType()
    Specified by:
    getAuthType in interface javax.servlet.http.HttpServletRequest

    getCookies

    public javax.servlet.http.Cookie[] getCookies()
    Specified by:
    getCookies in interface javax.servlet.http.HttpServletRequest

    getDateHeader

    public long getDateHeader(java.lang.String name)
    Specified by:
    getDateHeader in interface javax.servlet.http.HttpServletRequest

    getHeader

    public java.lang.String getHeader(java.lang.String name)
    Specified by:
    getHeader in interface javax.servlet.http.HttpServletRequest

    getHeaders

    public java.util.Enumeration getHeaders(java.lang.String name)
    Specified by:
    getHeaders in interface javax.servlet.http.HttpServletRequest

    getHeaderNames

    public java.util.Enumeration getHeaderNames()
    Specified by:
    getHeaderNames in interface javax.servlet.http.HttpServletRequest

    getIntHeader

    public int getIntHeader(java.lang.String name)
    Specified by:
    getIntHeader in interface javax.servlet.http.HttpServletRequest

    getMethod

    public java.lang.String getMethod()
    Specified by:
    getMethod in interface javax.servlet.http.HttpServletRequest

    getPathInfo

    public java.lang.String getPathInfo()
    Specified by:
    getPathInfo in interface javax.servlet.http.HttpServletRequest

    getPathTranslated

    public java.lang.String getPathTranslated()
    Specified by:
    getPathTranslated in interface javax.servlet.http.HttpServletRequest

    getContextPath

    public java.lang.String getContextPath()
    Specified by:
    getContextPath in interface javax.servlet.http.HttpServletRequest

    getQueryString

    public java.lang.String getQueryString()
    Specified by:
    getQueryString in interface javax.servlet.http.HttpServletRequest

    getRemoteUser

    public java.lang.String getRemoteUser()
    Specified by:
    getRemoteUser in interface javax.servlet.http.HttpServletRequest

    isUserInRole

    public boolean isUserInRole(java.lang.String user)
    Specified by:
    isUserInRole in interface javax.servlet.http.HttpServletRequest

    getUserPrincipal

    public java.security.Principal getUserPrincipal()
    Specified by:
    getUserPrincipal in interface javax.servlet.http.HttpServletRequest

    getRequestedSessionId

    public java.lang.String getRequestedSessionId()
    Specified by:
    getRequestedSessionId in interface javax.servlet.http.HttpServletRequest

    getRequestURI

    public java.lang.String getRequestURI()
    Specified by:
    getRequestURI in interface javax.servlet.http.HttpServletRequest

    getServletPath

    public java.lang.String getServletPath()
    Specified by:
    getServletPath in interface javax.servlet.http.HttpServletRequest

    getSession

    public javax.servlet.http.HttpSession getSession(boolean create)
    Specified by:
    getSession in interface javax.servlet.http.HttpServletRequest

    getSession

    public javax.servlet.http.HttpSession getSession()
    Specified by:
    getSession in interface javax.servlet.http.HttpServletRequest

    isRequestedSessionIdValid

    public boolean isRequestedSessionIdValid()
    Specified by:
    isRequestedSessionIdValid in interface javax.servlet.http.HttpServletRequest

    isRequestedSessionIdFromURL

    public boolean isRequestedSessionIdFromURL()
    Specified by:
    isRequestedSessionIdFromURL in interface javax.servlet.http.HttpServletRequest

    isRequestedSessionIdFromUrl

    public boolean isRequestedSessionIdFromUrl()
    Specified by:
    isRequestedSessionIdFromUrl in interface javax.servlet.http.HttpServletRequest

    getParameterMap

    public java.util.Map getParameterMap()
    This method returns null. To use any Servlet 2.3 methods, call on getRequest() and use that request object. Once Servlet 2.3 is required to build Struts, this will no longer be an issue.


    setCharacterEncoding

    public void setCharacterEncoding(java.lang.String encoding)
    This method does nothing. To use any Servlet 2.3 methods, call on getRequest() and use that request object. Once Servlet 2.3 is required to build Struts, this will no longer be an issue.


    getRequestURL

    public java.lang.StringBuffer getRequestURL()
    This method returns null. To use any Servlet 2.3 methods, call on getRequest() and use that request object. Once Servlet 2.3 is required to build Struts, this will no longer be an issue.


    isRequestedSessionIdFromCookie

    public boolean isRequestedSessionIdFromCookie()
    This method returns false. To use any Servlet 2.3 methods, call on getRequest() and use that request object. Once Servlet 2.3 is required to build Struts, this will no longer be an issue.

    Specified by:
    isRequestedSessionIdFromCookie in interface javax.servlet.http.HttpServletRequest


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/MultipartValueStream.html0000644000175000017500000004422110404045232031653 0ustar arnaudarnaud00000000000000 MultipartValueStream (Apache Struts API Documentation)

    org.apache.struts.upload
    Class MultipartValueStream

    java.lang.Object
      |
      +--java.io.InputStream
            |
            +--org.apache.struts.upload.MultipartValueStream
    

    class MultipartValueStream
    extends java.io.InputStream

    This class implements an inputStream that reads another stream until a multipart boundary is found. The class reports eof when boundary found. The undelying stream is not closed.

    See RFC 1867 (http://info.internet.isi.edu:80/in-notes/rfc/files/rfc1867.txt) for details about the protocol.

    Author:
    Jimmy Larsson

    Field Summary
    private  byte[] boundaryBytes
              byte buffer with the boundary
    private  boolean boundaryReached
              have we reached the boundary?
    private  boolean finalBoundaryReached
              is the boundary found a final boundary?
    static java.lang.String HEADER_ENCODING
               
    private  java.io.InputStream in
              the underlying stream
    private  int matchedBoundaryBytes
              how many curretly matched boundary bytes?
    private  int readAheadBufferEndI
              The end index for the read ahead cyclic buffer (points to the last byte)
    private  int readAheadBufferStartI
              The start index for the read ahead cyclic buffer (points to the first byte)
    private  byte[] readAheadBytes
              the read ahead buffer (cyclic)
     
    Fields inherited from class java.io.InputStream
     
    Constructor Summary
    MultipartValueStream(java.io.InputStream in, java.lang.String boundary)
              Create a stream that stops reading at the boundary NOTE: the boundary parameter is without the trailing dashes "--".
     
    Method Summary
     boolean encounteredFinalBoundary()
               
     int read()
              Read the next byte
     
    Methods inherited from class java.io.InputStream
    available, close, mark, markSupported, read, read, reset, skip
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    HEADER_ENCODING

    public static final java.lang.String HEADER_ENCODING
    See Also:
    Constant Field Values

    in

    private java.io.InputStream in
    the underlying stream


    boundaryBytes

    private byte[] boundaryBytes
    byte buffer with the boundary


    matchedBoundaryBytes

    private int matchedBoundaryBytes
    how many curretly matched boundary bytes?


    readAheadBytes

    private byte[] readAheadBytes
    the read ahead buffer (cyclic)


    readAheadBufferStartI

    private int readAheadBufferStartI
    The start index for the read ahead cyclic buffer (points to the first byte)


    readAheadBufferEndI

    private int readAheadBufferEndI
    The end index for the read ahead cyclic buffer (points to the last byte)


    boundaryReached

    private boolean boundaryReached
    have we reached the boundary?


    finalBoundaryReached

    private boolean finalBoundaryReached
    is the boundary found a final boundary?

    Constructor Detail

    MultipartValueStream

    public MultipartValueStream(java.io.InputStream in,
                                java.lang.String boundary)
                         throws java.io.IOException
    Create a stream that stops reading at the boundary NOTE: the boundary parameter is without the trailing dashes "--".

    Method Detail

    read

    public int read()
             throws java.io.IOException
    Read the next byte

    Specified by:
    read in class java.io.InputStream
    Returns:
    -1 on boundary reached
    Throws:
    java.io.IOException - if the ending boundary is never found

    encounteredFinalBoundary

    public boolean encounteredFinalBoundary()
                                     throws javax.servlet.ServletException
    Returns:
    true if we are the last stream, ie. we encountered a final boundary
    Throws:
    javax.servlet.ServletException - if the boundary has not yet been reached


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/package-frame.html0000644000175000017500000000517510404045234030213 0ustar arnaudarnaud00000000000000 org.apache.struts.upload (Apache Struts API Documentation) org.apache.struts.upload
    Interfaces 
    FormFile
    MultipartRequestHandler
    Classes 
    BufferedMultipartInputStream
    CommonsMultipartRequestHandler
    CommonsMultipartRequestHandler.CommonsFormFile
    DiskFile
    DiskMultipartRequestHandler
    MultipartBoundaryInputStream
    MultipartElement
    MultipartIterator
    MultipartRequestWrapper
    MultipartValueStream
    Exceptions 
    ContentLengthExceededException
    MaxLengthExceededException
    libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/package-summary.html0000644000175000017500000002532110404045216030611 0ustar arnaudarnaud00000000000000 org.apache.struts.upload (Apache Struts API Documentation)

    Package org.apache.struts.upload

    The upload package facilities to upload files using multi-part requests.

    See:
              Description

    Interface Summary
    FormFile This interface represents a file that has been uploaded by a client.
    MultipartRequestHandler MultipartRequestHandler provides an standard interface for struts to deal with file uploads from forms with enctypes of "multipart/form-data".
     

    Class Summary
    BufferedMultipartInputStream This class implements buffering for an InputStream as well as a readLine method.
    CommonsMultipartRequestHandler This class implements the MultipartRequestHandler interface by providing a wrapper around the Jakarta Commons FileUpload library.
    CommonsMultipartRequestHandler.CommonsFormFile This class implements the Struts FormFile interface by wrapping the Commons FileUpload FileItem interface.
    DiskFile  
    DiskMultipartRequestHandler This is a MultipartRequestHandler that writes file data directly to to temporary files on disk.
    MultipartBoundaryInputStream This class encapsulates parsing functionality for RFC1867, multipart/form-data.
    MultipartElement This class represents an element in a multipart request.
    MultipartIterator The MultipartIterator class is responsible for reading the input data of a multipart request and splitting it up into input elements, wrapped inside of a MultipartElement for easy definition.
    MultipartRequestWrapper This class functions as a wrapper around HttpServletRequest to provide working getParameter methods for multipart requests.
    MultipartValueStream This class implements an inputStream that reads another stream until a multipart boundary is found.
     

    Exception Summary
    ContentLengthExceededException This exception is thrown when multipart post data exceeds the value given by the Content-Length header
    MaxLengthExceededException This exception is thrown when multipart post data exceeds the maximum value set
     

    Package org.apache.struts.upload Description

    The upload package facilities to upload files using multi-part requests.



    Upload Package UML

    Package Specification

    ##### FILL IN ANY SPECS NEEDED BY JAVA COMPATIBILITY KIT #####

    Related Documentation

    For overviews, tutorials, examples, guides, and tool documentation, please see:



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/package-tree.html0000644000175000017500000002110510404045226030050 0ustar arnaudarnaud00000000000000 org.apache.struts.upload Class Hierarchy (Apache Struts API Documentation)

    Hierarchy For Package org.apache.struts.upload

    Package Hierarchies:
    All Packages

    Class Hierarchy

    Interface Hierarchy



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/upload/package-use.html0000644000175000017500000002554210404045212027711 0ustar arnaudarnaud00000000000000 Uses of Package org.apache.struts.upload (Apache Struts API Documentation)

    Uses of Package
    org.apache.struts.upload

    Packages that use org.apache.struts.upload
    org.apache.struts.action The action package is the core of the struts framework, providing the "Controller" aspect of a MVC model. 
    org.apache.struts.config The "config" package contains configuration objects that correspond to elements that may be specified in the struts-config.xml module configuration file. 
    org.apache.struts.upload The upload package facilities to upload files using multi-part requests. 
    org.apache.struts.util The Utilities package provides a variety of families of classes, to solve problems that are commonly encountered in building web applications. 
     

    Classes in org.apache.struts.upload used by org.apache.struts.action
    MultipartRequestHandler
              MultipartRequestHandler provides an standard interface for struts to deal with file uploads from forms with enctypes of "multipart/form-data".
     

    Classes in org.apache.struts.upload used by org.apache.struts.config
    MultipartRequestWrapper
              This class functions as a wrapper around HttpServletRequest to provide working getParameter methods for multipart requests.
     

    Classes in org.apache.struts.upload used by org.apache.struts.upload
    FormFile
              This interface represents a file that has been uploaded by a client.
    MultipartBoundaryInputStream
              This class encapsulates parsing functionality for RFC1867, multipart/form-data.
    MultipartElement
              This class represents an element in a multipart request.
    MultipartRequestHandler
              MultipartRequestHandler provides an standard interface for struts to deal with file uploads from forms with enctypes of "multipart/form-data".
     

    Classes in org.apache.struts.upload used by org.apache.struts.util
    MultipartRequestHandler
              MultipartRequestHandler provides an standard interface for struts to deal with file uploads from forms with enctypes of "multipart/form-data".
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/0000755000175000017500000000000010423130301024312 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/class-use/0000755000175000017500000000000010423130301026211 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/class-use/AppException.html0000644000175000017500000001255610404045240031515 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.util.AppException (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.util.AppException

    No usage of org.apache.struts.util.AppException



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/class-use/ErrorMessages.html0000644000175000017500000001256610404045210031675 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.util.ErrorMessages (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.util.ErrorMessages

    No usage of org.apache.struts.util.ErrorMessages



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/class-use/GenericDataSource.html0000644000175000017500000001262610404045226032447 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.util.GenericDataSource (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.util.GenericDataSource

    No usage of org.apache.struts.util.GenericDataSource



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/class-use/ImageButtonBean.html0000644000175000017500000001260610404045226032122 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.util.ImageButtonBean (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.util.ImageButtonBean

    No usage of org.apache.struts.util.ImageButtonBean



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/class-use/IteratorAdapter.html0000644000175000017500000001260610404045244032210 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.util.IteratorAdapter (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.util.IteratorAdapter

    No usage of org.apache.struts.util.IteratorAdapter



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/class-use/LabelValueBean.html0000644000175000017500000001257610404045202031720 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.util.LabelValueBean (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.util.LabelValueBean

    No usage of org.apache.struts.util.LabelValueBean



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/class-use/MessageResources.html0000644000175000017500000015163310404045236032402 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.util.MessageResources (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.util.MessageResources

    Packages that use MessageResources
    org.apache.struts.action The action package is the core of the struts framework, providing the "Controller" aspect of a MVC model. 
    org.apache.struts.actions The actions package provides special adapters between the incoming HTTP request and the corresponding business logic. 
    org.apache.struts.config The "config" package contains configuration objects that correspond to elements that may be specified in the struts-config.xml module configuration file. 
    org.apache.struts.taglib.bean The "struts-bean" tag library contains JSP custom tags useful in defining new beans (in any desired scope) from a variety of possible sources, as well as a tag to render a particular bean (or bean property) to the output response. 
    org.apache.struts.taglib.html The "struts-html" tag library contains JSP custom tags useful in creating dynamic HTML user interfaces, including input forms. 
    org.apache.struts.taglib.logic The "struts-logic" 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. 
    org.apache.struts.util The Utilities package provides a variety of families of classes, to solve problems that are commonly encountered in building web applications. 
    org.apache.struts.validator The validator package provides a series of classes to validate ActionForm type of input. 
     

    Uses of MessageResources in org.apache.struts.action
     

    Fields in org.apache.struts.action declared as MessageResources
    protected  MessageResources ActionServlet.internal
              The resources object for our internal resources.
     

    Methods in org.apache.struts.action that return MessageResources
     MessageResources ActionServlet.getInternal()
              Return the MessageResources instance containing our internal message strings.
     MessageResources ActionServlet.getResources()
              Deprecated. Actions should call Action.getResources(HttpServletRequest) instead of this method, in order to retrieve the resources for the current module.
    protected  MessageResources RequestProcessor.getInternal()
              Return the MessageResources instance containing our internal message strings.
    protected  MessageResources Action.getResources()
              Deprecated. This method can only return the resources for the default module. Use getResources(HttpServletRequest) to get the resources for the current module.
    protected  MessageResources Action.getResources(javax.servlet.http.HttpServletRequest request)
              Return the default message resources for the current module.
    protected  MessageResources Action.getResources(javax.servlet.http.HttpServletRequest request, java.lang.String key)
              Return the specified message resources for the current module.
     

    Uses of MessageResources in org.apache.struts.actions
     

    Fields in org.apache.struts.actions declared as MessageResources
    protected static MessageResources ForwardAction.messages
              The message resources for this package.
    protected static MessageResources DispatchAction.messages
              The message resources for this package.
    protected static MessageResources SwitchAction.messages
              The message resources for this package.
    protected static MessageResources IncludeAction.messages
              The message resources for this package.
     

    Uses of MessageResources in org.apache.struts.config
     

    Methods in org.apache.struts.config that return MessageResources
     MessageResources ConfigHelper.getMessageResources()
              The application resources for this application.
     MessageResources ConfigHelperInterface.getMessageResources()
              The application resources for this application.
     

    Uses of MessageResources in org.apache.struts.taglib.bean
     

    Fields in org.apache.struts.taglib.bean declared as MessageResources
    protected static MessageResources DefineTag.messages
              The message resources for this package.
    protected static MessageResources MessageTag.messages
              The message resources for this package.
    protected static MessageResources WriteTag.messages
              The message resources for this package.
    protected static MessageResources IncludeTag.messages
              The message resources for this package.
    protected static MessageResources StrutsTag.messages
              The message resources for this package.
    protected static MessageResources SizeTag.messages
              The message resources for this package.
    protected static MessageResources ResourceTag.messages
              The message resources for this package.
    protected static MessageResources ParameterTag.messages
              The message resources for this package.
    protected static MessageResources PageTag.messages
              The message resources for this package.
    protected static MessageResources HeaderTag.messages
              The message resources for this package.
    protected static MessageResources CookieTag.messages
              The message resources for this package.
     

    Uses of MessageResources in org.apache.struts.taglib.html
     

    Fields in org.apache.struts.taglib.html declared as MessageResources
    protected static MessageResources OptionsTag.messages
              The message resources for this package.
    protected static MessageResources OptionsCollectionTag.messages
              The message resources for this package.
    protected static MessageResources ErrorsTag.messages
              The message resources for this package.
    protected static MessageResources BaseHandlerTag.messages
              The message resources for this package.
    protected static MessageResources LinkTag.messages
              The message resources for this package.
    protected static MessageResources SelectTag.messages
              The message resources for this package.
    protected static MessageResources MessagesTag.messageResources
              The message resources for this package.
    protected static MessageResources CancelTag.messages
              The message resources for this package.
    protected static MessageResources MultiboxTag.messages
              The message resources for this package.
    protected static MessageResources BaseInputTag.messages
              The message resources for this package.
    protected static MessageResources BaseTag.messages
              The message resources for this package.
    protected static MessageResources CheckboxTag.messages
              The message resources for this package.
    protected static MessageResources ImgTag.messages
              The message resources for this package.
    protected static MessageResources HtmlTag.messages
              The message resources for this package.
    protected static MessageResources FormTag.messages
              The message resources for this package.
    protected static MessageResources SubmitTag.messages
              The message resources for this package.
    protected static MessageResources ResetTag.messages
              The message resources for this package.
    protected static MessageResources OptionTag.messages
              The message resources for this package.
    protected static MessageResources RadioTag.messages
              The message resources for this package.
     

    Uses of MessageResources in org.apache.struts.taglib.logic
     

    Fields in org.apache.struts.taglib.logic declared as MessageResources
    protected static MessageResources IterateTag.messages
              The message resources for this package.
    protected static MessageResources ForwardTag.messages
              The message resources for this package.
    protected static MessageResources ConditionalTagBase.messages
              The message resources for this package.
    protected static MessageResources RedirectTag.messages
              The message resources for this package.
    protected static MessageResources CompareTagBase.messages
              The message resources for this package.
     

    Uses of MessageResources in org.apache.struts.util
     

    Subclasses of MessageResources in org.apache.struts.util
     class PropertyMessageResources
              Concrete subclass of MessageResources that reads message keys and corresponding strings from named property resources in the same manner that java.util.PropertyResourceBundle does.
     

    Fields in org.apache.struts.util declared as MessageResources
    protected static MessageResources ResponseUtils.messages
              The message resources for this package.
    private static MessageResources RequestUtils.messages
              The message resources for this package.
     

    Methods in org.apache.struts.util that return MessageResources
    static MessageResources StrutsValidatorUtil.getMessageResources(javax.servlet.ServletContext application)
              Deprecated. This method can only return the resources for the default module. Use getMessageResources(HttpServletRequest) to get the resources for the current application module.
    static MessageResources StrutsValidatorUtil.getMessageResources(javax.servlet.http.HttpServletRequest request)
              Deprecated. Retrieve MessageResources for the application module.
     MessageResources PropertyMessageResourcesFactory.createResources(java.lang.String config)
              Create and return a newly instansiated MessageResources.
    abstract  MessageResources MessageResourcesFactory.createResources(java.lang.String config)
              Create and return a newly instansiated MessageResources.
    static MessageResources MessageResources.getMessageResources(java.lang.String config)
              Create and return an instance of MessageResources for the created by the default MessageResourcesFactory.
    private static MessageResources RequestUtils.retrieveMessageResources(javax.servlet.jsp.PageContext pageContext, java.lang.String bundle, boolean checkPageScope)
              Returns the appropriate MessageResources object for the current module and the given bundle.
     

    Methods in org.apache.struts.util with parameters of type MessageResources
    static java.lang.String StrutsValidatorUtil.getMessage(MessageResources messages, java.util.Locale locale, java.lang.String key)
              Deprecated. Gets the Locale sensitive value based on the key passed in.
    static java.lang.String StrutsValidatorUtil.getMessage(MessageResources messages, java.util.Locale locale, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field)
              Deprecated. As of Struts 1.1, replaced by Resources.getMessage(MessageResources, Locale, ValidatorAction , Field)
    static java.lang.String[] StrutsValidatorUtil.getArgs(java.lang.String actionName, MessageResources messages, java.util.Locale locale, org.apache.commons.validator.Field field)
              Deprecated. As of Struts 1.1, replaced by Resources.getArgs(String,MessageResources,Locale,Field)
     

    Uses of MessageResources in org.apache.struts.validator
     

    Methods in org.apache.struts.validator that return MessageResources
    static MessageResources Resources.getMessageResources(javax.servlet.ServletContext application)
              Deprecated. This method can only return the resources for the default module. Use getMessageResources(HttpServletRequest) to get the resources for the current module.
    static MessageResources Resources.getMessageResources(javax.servlet.http.HttpServletRequest request)
              Retrieve MessageResources for the module.
     

    Methods in org.apache.struts.validator with parameters of type MessageResources
    static java.lang.String Resources.getMessage(MessageResources messages, java.util.Locale locale, java.lang.String key)
              Gets the Locale sensitive value based on the key passed in.
    static java.lang.String Resources.getMessage(MessageResources messages, java.util.Locale locale, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field)
              Gets the locale sensitive message based on the ValidatorAction message and the Field's arg objects.
    static java.lang.String[] Resources.getArgs(java.lang.String actionName, MessageResources messages, java.util.Locale locale, org.apache.commons.validator.Field field)
              Gets the message arguments based on the current ValidatorAction and Field.
     



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000014510423140533011317 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/class-use/MessageResourcesFactory.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/class-use/MessageResourcesFactory.html0000644000175000017500000003210310404045210033710 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.util.MessageResourcesFactory (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.util.MessageResourcesFactory

    Packages that use MessageResourcesFactory
    org.apache.struts.util The Utilities package provides a variety of families of classes, to solve problems that are commonly encountered in building web applications. 
     

    Uses of MessageResourcesFactory in org.apache.struts.util
     

    Subclasses of MessageResourcesFactory in org.apache.struts.util
     class PropertyMessageResourcesFactory
              Factory for PropertyMessageResources instances.
     

    Fields in org.apache.struts.util declared as MessageResourcesFactory
    protected  MessageResourcesFactory MessageResources.factory
              The MessageResourcesFactory that created this instance.
    protected static MessageResourcesFactory MessageResources.defaultFactory
              The default MessageResourcesFactory used to create MessageResources instances.
     

    Methods in org.apache.struts.util that return MessageResourcesFactory
    static MessageResourcesFactory MessageResourcesFactory.createFactory()
              Create and return a MessageResourcesFactory instance of the appropriate class, which can be used to create customized MessageResources instances.
     MessageResourcesFactory MessageResources.getFactory()
              The MessageResourcesFactory that created this instance.
     

    Constructors in org.apache.struts.util with parameters of type MessageResourcesFactory
    PropertyMessageResources(MessageResourcesFactory factory, java.lang.String config)
              Construct a new PropertyMessageResources according to the specified parameters.
    PropertyMessageResources(MessageResourcesFactory factory, java.lang.String config, boolean returnNull)
              Construct a new PropertyMessageResources according to the specified parameters.
    MessageResources(MessageResourcesFactory factory, java.lang.String config)
              Construct a new MessageResources according to the specified parameters.
    MessageResources(MessageResourcesFactory factory, java.lang.String config, boolean returnNull)
              Construct a new MessageResources according to the specified parameters.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/class-use/ModuleException.html0000644000175000017500000001623110404045204032214 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.util.ModuleException (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.util.ModuleException

    Packages that use ModuleException
    org.apache.struts.util The Utilities package provides a variety of families of classes, to solve problems that are commonly encountered in building web applications. 
     

    Uses of ModuleException in org.apache.struts.util
     

    Subclasses of ModuleException in org.apache.struts.util
     class AppException
              Deprecated. use ModuleException
     



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000014610423140533011320 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/class-use/PropertyMessageResources.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/class-use/PropertyMessageResources.htm0000644000175000017500000001271610404045204033764 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.util.PropertyMessageResources (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.util.PropertyMessageResources

    No usage of org.apache.struts.util.PropertyMessageResources



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000015510423140533011320 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/class-use/PropertyMessageResourcesFactory.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/class-use/PropertyMessageResourcesFact0000644000175000017500000001300610404045222033764 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.util.PropertyMessageResourcesFactory (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.util.PropertyMessageResourcesFactory

    No usage of org.apache.struts.util.PropertyMessageResourcesFactory



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/class-use/RequestUtils.html0000644000175000017500000001255610404045234031572 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.util.RequestUtils (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.util.RequestUtils

    No usage of org.apache.struts.util.RequestUtils



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/class-use/ResponseUtils.html0000644000175000017500000001256610404045220031734 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.util.ResponseUtils (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.util.ResponseUtils

    No usage of org.apache.struts.util.ResponseUtils



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/class-use/ServletContextWriter.html0000644000175000017500000001265610404045204033305 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.util.ServletContextWriter (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.util.ServletContextWriter

    No usage of org.apache.struts.util.ServletContextWriter



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/class-use/StrutsValidator.html0000644000175000017500000001260610404045212032263 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.util.StrutsValidator (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.util.StrutsValidator

    No usage of org.apache.struts.util.StrutsValidator



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/class-use/StrutsValidatorUtil.html0000644000175000017500000001264610404045204033126 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.util.StrutsValidatorUtil (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.util.StrutsValidatorUtil

    No usage of org.apache.struts.util.StrutsValidatorUtil



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/class-use/TokenProcessor.html0000644000175000017500000002311710404045206032073 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.util.TokenProcessor (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.util.TokenProcessor

    Packages that use TokenProcessor
    org.apache.struts.action The action package is the core of the struts framework, providing the "Controller" aspect of a MVC model. 
    org.apache.struts.util The Utilities package provides a variety of families of classes, to solve problems that are commonly encountered in building web applications. 
     

    Uses of TokenProcessor in org.apache.struts.action
     

    Fields in org.apache.struts.action declared as TokenProcessor
    private static TokenProcessor Action.token
              An instance of TokenProcessor to use for token functionality.
     

    Uses of TokenProcessor in org.apache.struts.util
     

    Fields in org.apache.struts.util declared as TokenProcessor
    private static TokenProcessor TokenProcessor.instance
              The singleton instance of this class.
     

    Methods in org.apache.struts.util that return TokenProcessor
    static TokenProcessor TokenProcessor.getInstance()
              Retrieves the singleton instance of this class.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/AppException.html0000644000175000017500000004315610404045206027620 0ustar arnaudarnaud00000000000000 AppException (Apache Struts API Documentation)

    org.apache.struts.util
    Class AppException

    java.lang.Object
      |
      +--java.lang.Throwable
            |
            +--java.lang.Exception
                  |
                  +--org.apache.struts.util.ModuleException
                        |
                        +--org.apache.struts.util.AppException
    
    All Implemented Interfaces:
    java.io.Serializable

    Deprecated. use ModuleException

    public class AppException
    extends ModuleException

    See Also:
    Serialized Form

    Field Summary
     
    Fields inherited from class org.apache.struts.util.ModuleException
    error, property
     
    Fields inherited from class java.lang.Exception
     
    Fields inherited from class java.lang.Throwable
     
    Constructor Summary
    AppException(java.lang.String key)
              Deprecated. Construct an module exception with no replacement values.
    AppException(java.lang.String key, java.lang.Object value)
              Deprecated. Construct an module exception with the specified replacement values.
    AppException(java.lang.String key, java.lang.Object[] values)
              Deprecated. Construct an action error with the specified replacement values.
    AppException(java.lang.String key, java.lang.Object value0, java.lang.Object value1)
              Deprecated. Construct an module exception with the specified replacement values.
    AppException(java.lang.String key, java.lang.Object value0, java.lang.Object value1, java.lang.Object value2)
              Deprecated. Construct an module exception with the specified replacement values.
    AppException(java.lang.String key, java.lang.Object value0, java.lang.Object value1, java.lang.Object value2, java.lang.Object value3)
              Deprecated. Construct an module exception with the specified replacement values.
     
    Methods inherited from class org.apache.struts.util.ModuleException
    getError, getProperty, setProperty
     
    Methods inherited from class java.lang.Throwable
    fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
     

    Constructor Detail

    AppException

    public AppException(java.lang.String key)
    Deprecated. 
    Construct an module exception with no replacement values.

    Parameters:
    key - Message key for this error message

    AppException

    public AppException(java.lang.String key,
                        java.lang.Object value)
    Deprecated. 
    Construct an module exception with the specified replacement values.

    Parameters:
    key - Message key for this error message
    value - First replacement value

    AppException

    public AppException(java.lang.String key,
                        java.lang.Object value0,
                        java.lang.Object value1)
    Deprecated. 
    Construct an module exception with the specified replacement values.

    Parameters:
    key - Message key for this error message
    value0 - First replacement value
    value1 - Second replacement value

    AppException

    public AppException(java.lang.String key,
                        java.lang.Object value0,
                        java.lang.Object value1,
                        java.lang.Object value2)
    Deprecated. 
    Construct an module exception with the specified replacement values.

    Parameters:
    key - Message key for this error message
    value0 - First replacement value
    value1 - Second replacement value
    value2 - Third replacement value

    AppException

    public AppException(java.lang.String key,
                        java.lang.Object value0,
                        java.lang.Object value1,
                        java.lang.Object value2,
                        java.lang.Object value3)
    Deprecated. 
    Construct an module exception with the specified replacement values.

    Parameters:
    key - Message key for this error message
    value0 - First replacement value
    value1 - Second replacement value
    value2 - Third replacement value
    value3 - Fourth replacement value

    AppException

    public AppException(java.lang.String key,
                        java.lang.Object[] values)
    Deprecated. 
    Construct an action error with the specified replacement values.

    Parameters:
    key - Message key for this message
    values - Array of replacement values


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/ErrorMessages.html0000644000175000017500000003307510404045204027777 0ustar arnaudarnaud00000000000000 ErrorMessages (Apache Struts API Documentation)

    org.apache.struts.util
    Class ErrorMessages

    java.lang.Object
      |
      +--org.apache.struts.util.ErrorMessages
    

    Deprecated. Use org.apache.struts.action.ActionErrors instead

    public class ErrorMessages
    extends java.lang.Object

    Utility class that is useful for accumulating error message keys in action classes or validation methods. Use this class as follows:

    • At the beginning of your action class or validation method, instantiate an instance of this class in a local variable.
    • Whenever you wish to add a new error message key, call the addError() method to add it.
    • To return the String array of error message keys required by other Struts components, call getErrors().

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:43:31 +0100 (Fri, 22 Aug 2003) $
    Author:
    David Geary

    Field Summary
    private  java.util.Vector errors
              Deprecated. The accumulated set of error message keys.
     
    Constructor Summary
    ErrorMessages()
              Deprecated.  
     
    Method Summary
     void addError(java.lang.String key)
              Deprecated. Add an error message key to the accumulated set of errors.
     java.lang.String getError(int index)
              Deprecated. Return the error message key at the specified zero-relative index.
     java.lang.String[] getErrors()
              Deprecated. Return the set of error message keys we have accumulated.
     int getSize()
              Deprecated. Return the number of error message keys we have accumulated so far.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    errors

    private java.util.Vector errors
    Deprecated. 
    The accumulated set of error message keys.

    Constructor Detail

    ErrorMessages

    public ErrorMessages()
    Deprecated. 
    Method Detail

    addError

    public void addError(java.lang.String key)
    Deprecated. 
    Add an error message key to the accumulated set of errors.

    Parameters:
    key - The error message key to be added

    getError

    public java.lang.String getError(int index)
    Deprecated. 
    Return the error message key at the specified zero-relative index.

    Parameters:
    index - Zero-relative index of the error message key to return

    getErrors

    public java.lang.String[] getErrors()
    Deprecated. 
    Return the set of error message keys we have accumulated.


    getSize

    public int getSize()
    Deprecated. 
    Return the number of error message keys we have accumulated so far.



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/GenericDataSource.html0000644000175000017500000002603310404045240030541 0ustar arnaudarnaud00000000000000 GenericDataSource (Apache Struts API Documentation)

    org.apache.struts.util
    Class GenericDataSource

    java.lang.Object
      |
      +--org.apache.struts.legacy.GenericDataSource
            |
            +--org.apache.struts.util.GenericDataSource
    
    All Implemented Interfaces:
    javax.sql.DataSource

    Deprecated. Use a BasicDataSource directly, or indirectly acquire a data source provided by your container

    public class GenericDataSource
    extends org.apache.struts.legacy.GenericDataSource

    Wrapper around the org.apache.struts.legacy.GenericDataSource. The GenericDataSource is now distributed separately to work around compilation issues between J2SE 1.3 and J2SE 1.4.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:43:31 +0100 (Fri, 22 Aug 2003) $
    Author:
    Craig R. McClanahan, Ted Husted

    Field Summary
     
    Fields inherited from class org.apache.struts.legacy.GenericDataSource
    activeCount, autoCommit, closed, connections, debug, description, driver, driverClass, log, loginTimeout, logWriter, maxCount, minCount, password, pingCommand, pingQuery, properties, readOnly, url, useCount, user
     
    Constructor Summary
    GenericDataSource()
              Deprecated.  
     
    Methods inherited from class org.apache.struts.legacy.GenericDataSource
    addProperty, close, createConnection, getActiveCount, getAutoCommit, getConnection, getConnection, getDebug, getDescription, getDriverClass, getLoginTimeout, getLogWriter, getMaxCount, getMinCount, getPassword, getPingCommand, getPingQuery, getReadOnly, getUrl, getUseCount, getUser, log, log, open, ping, setAutoCommit, setDebug, setDescription, setDriverClass, setLoginTimeout, setLogWriter, setMaxCount, setMinCount, setPassword, setPingCommand, setPingQuery, setReadOnly, setUrl, setUser, toString
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
     

    Constructor Detail

    GenericDataSource

    public GenericDataSource()
    Deprecated. 


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/ImageButtonBean.html0000644000175000017500000003733010404045210030215 0ustar arnaudarnaud00000000000000 ImageButtonBean (Apache Struts API Documentation)

    org.apache.struts.util
    Class ImageButtonBean

    java.lang.Object
      |
      +--org.apache.struts.util.ImageButtonBean
    
    All Implemented Interfaces:
    java.io.Serializable

    public class ImageButtonBean
    extends java.lang.Object
    implements java.io.Serializable

    A simple JavaBean to encapsulate the request parameters sent for an HTML input element of type image. Such an element causes two parameters to be sent, one each for the X and Y coordinates of the button press. An instance of this bean within an ActionForm can be used to capture these and provide a simple means of detecting whether or not the corresponding image was selected.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:43:31 +0100 (Fri, 22 Aug 2003) $
    Author:
    Ted Husted, Martin F N Cooper
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String x
              The X coordinate of the button press.
    private  java.lang.String y
              The Y coordinate of the button press.
     
    Constructor Summary
    ImageButtonBean()
              Construct an instance with empty property values.
    ImageButtonBean(java.lang.String x, java.lang.String y)
              Construct an instance with the supplied property values.
     
    Method Summary
     java.lang.String getX()
               
     java.lang.String getY()
               
     boolean isSelected()
              A convenience method to determine whether or not the corresponding image element was selected.
     void setX(java.lang.String x)
               
     void setY(java.lang.String y)
               
     java.lang.String toString()
              Return a string representation of this object.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
     

    Field Detail

    x

    private java.lang.String x
    The X coordinate of the button press.


    y

    private java.lang.String y
    The Y coordinate of the button press.

    Constructor Detail

    ImageButtonBean

    public ImageButtonBean()
    Construct an instance with empty property values.


    ImageButtonBean

    public ImageButtonBean(java.lang.String x,
                           java.lang.String y)
    Construct an instance with the supplied property values.

    Parameters:
    x - The X coordinate of the button press.
    y - The Y coordinate of the button press.
    Method Detail

    getX

    public java.lang.String getX()

    setX

    public void setX(java.lang.String x)

    getY

    public java.lang.String getY()

    setY

    public void setY(java.lang.String y)

    isSelected

    public boolean isSelected()
    A convenience method to determine whether or not the corresponding image element was selected.


    toString

    public java.lang.String toString()
    Return a string representation of this object.

    Overrides:
    toString in class java.lang.Object


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/IteratorAdapter.html0000644000175000017500000003111010404045214030275 0ustar arnaudarnaud00000000000000 IteratorAdapter (Apache Struts API Documentation)

    org.apache.struts.util
    Class IteratorAdapter

    java.lang.Object
      |
      +--org.apache.struts.util.IteratorAdapter
    
    All Implemented Interfaces:
    java.util.Iterator

    Deprecated. Use commons-collections' IteratorUtils.asIterator(Enumeration).

    public class IteratorAdapter
    extends java.lang.Object
    implements java.util.Iterator

    Utility method for converting Enumeration to an Iterator class. If you attempt to remove() an Object from the iterator, it will throw an UnsupportedOperationException. Added for use by TagLib so Enumeration can be supported

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:43:31 +0100 (Fri, 22 Aug 2003) $
    Author:
    Sean M. Kelley, Rob Leland

    Field Summary
    private  java.util.Enumeration enum
              Deprecated.  
     
    Constructor Summary
    IteratorAdapter(java.util.Enumeration enum)
              Deprecated.  
     
    Method Summary
     boolean hasNext()
              Deprecated.  
     java.lang.Object next()
              Deprecated.  
     void remove()
              Deprecated.  
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    enum

    private java.util.Enumeration enum
    Deprecated. 
    Constructor Detail

    IteratorAdapter

    public IteratorAdapter(java.util.Enumeration enum)
    Deprecated. 
    Method Detail

    hasNext

    public boolean hasNext()
    Deprecated. 
    Specified by:
    hasNext in interface java.util.Iterator

    next

    public java.lang.Object next()
    Deprecated. 
    Specified by:
    next in interface java.util.Iterator

    remove

    public void remove()
    Deprecated. 
    Specified by:
    remove in interface java.util.Iterator


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/LabelValueBean.html0000644000175000017500000003523210404045212030014 0ustar arnaudarnaud00000000000000 LabelValueBean (Apache Struts API Documentation)

    org.apache.struts.util
    Class LabelValueBean

    java.lang.Object
      |
      +--org.apache.struts.util.LabelValueBean
    
    All Implemented Interfaces:
    java.io.Serializable

    public class LabelValueBean
    extends java.lang.Object
    implements java.io.Serializable

    A simple JavaBean to represent label-value pairs. This is most commonly used when constructing user interface elements which have a label to be displayed to the user, and a corresponding value to be returned to the server. One example is the <html:options> tag.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:43:31 +0100 (Fri, 22 Aug 2003) $
    Author:
    Craig R. McClanahan, Martin F N Cooper
    See Also:
    Serialized Form

    Field Summary
    private  java.lang.String label
              The property which supplies the option label visible to the end user.
    private  java.lang.String value
              The property which supplies the value returned to the server.
     
    Constructor Summary
    LabelValueBean(java.lang.String label, java.lang.String value)
              Construct an instance with the supplied property values.
     
    Method Summary
     java.lang.String getLabel()
               
     java.lang.String getValue()
               
     void setLabel(java.lang.String label)
               
     void setValue(java.lang.String value)
               
     java.lang.String toString()
              Return a string representation of this object.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
     

    Field Detail

    label

    private java.lang.String label
    The property which supplies the option label visible to the end user.


    value

    private java.lang.String value
    The property which supplies the value returned to the server.

    Constructor Detail

    LabelValueBean

    public LabelValueBean(java.lang.String label,
                          java.lang.String value)
    Construct an instance with the supplied property values.

    Parameters:
    label - The label to be displayed to the user.
    value - The value to be returned to the server.
    Method Detail

    getLabel

    public java.lang.String getLabel()

    setLabel

    public void setLabel(java.lang.String label)

    getValue

    public java.lang.String getValue()

    setValue

    public void setValue(java.lang.String value)

    toString

    public java.lang.String toString()
    Return a string representation of this object.

    Overrides:
    toString in class java.lang.Object


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/MessageResources.html0000644000175000017500000013701310404045224030474 0ustar arnaudarnaud00000000000000 MessageResources (Apache Struts API Documentation)

    org.apache.struts.util
    Class MessageResources

    java.lang.Object
      |
      +--org.apache.struts.util.MessageResources
    
    All Implemented Interfaces:
    java.io.Serializable
    Direct Known Subclasses:
    PropertyMessageResources

    public abstract class MessageResources
    extends java.lang.Object
    implements java.io.Serializable

    General purpose abstract class that describes an API for retrieving Locale-sensitive messages from underlying resource locations of an unspecified design, and optionally utilizing the MessageFormat class to produce internationalized messages with parametric replacement.

    Calls to getMessage() variants without a Locale argument are presumed to be requesting a message string in the default Locale for this JVM.

    Calls to getMessage() with an unknown key, or an unknown Locale will return null if the returnNull property is set to true. Otherwise, a suitable error message will be returned instead.

    IMPLEMENTATION NOTE - Classes that extend this class must be Serializable so that instances may be used in distributable application server environments.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:43:31 +0100 (Fri, 22 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
    protected  java.lang.String config
              The configuration parameter used to initialize this MessageResources.
    protected static MessageResourcesFactory defaultFactory
              The default MessageResourcesFactory used to create MessageResources instances.
    protected  java.util.Locale defaultLocale
              The default Locale for our environment.
    protected  MessageResourcesFactory factory
              The MessageResourcesFactory that created this instance.
    protected  java.util.HashMap formats
              The set of previously created MessageFormat objects, keyed by the key computed in messageKey().
    protected static org.apache.commons.logging.Log log
              Commons Logging instance.
    protected  boolean returnNull
              Indicate is a null is returned instead of an error message string when an unknown Locale or key is requested.
     
    Constructor Summary
    MessageResources(MessageResourcesFactory factory, java.lang.String config)
              Construct a new MessageResources according to the specified parameters.
    MessageResources(MessageResourcesFactory factory, java.lang.String config, boolean returnNull)
              Construct a new MessageResources according to the specified parameters.
     
    Method Summary
    protected  java.lang.String escape(java.lang.String string)
              Escape any single quote characters that are included in the specified message string.
     java.lang.String getConfig()
              The configuration parameter used to initialize this MessageResources.
     MessageResourcesFactory getFactory()
              The MessageResourcesFactory that created this instance.
    abstract  java.lang.String getMessage(java.util.Locale locale, java.lang.String key)
              Returns a text message for the specified key, for the default Locale.
     java.lang.String getMessage(java.util.Locale locale, java.lang.String key, java.lang.Object arg0)
              Returns a text message after parametric replacement of the specified parameter placeholders.
     java.lang.String getMessage(java.util.Locale locale, java.lang.String key, java.lang.Object[] args)
              Returns a text message after parametric replacement of the specified parameter placeholders.
     java.lang.String getMessage(java.util.Locale locale, java.lang.String key, java.lang.Object arg0, java.lang.Object arg1)
              Returns a text message after parametric replacement of the specified parameter placeholders.
     java.lang.String getMessage(java.util.Locale locale, java.lang.String key, java.lang.Object arg0, java.lang.Object arg1, java.lang.Object arg2)
              Returns a text message after parametric replacement of the specified parameter placeholders.
     java.lang.String getMessage(java.util.Locale locale, java.lang.String key, java.lang.Object arg0, java.lang.Object arg1, java.lang.Object arg2, java.lang.Object arg3)
              Returns a text message after parametric replacement of the specified parameter placeholders.
     java.lang.String getMessage(java.lang.String key)
              Returns a text message for the specified key, for the default Locale.
     java.lang.String getMessage(java.lang.String key, java.lang.Object arg0)
              Returns a text message after parametric replacement of the specified parameter placeholders.
     java.lang.String getMessage(java.lang.String key, java.lang.Object[] args)
              Returns a text message after parametric replacement of the specified parameter placeholders.
     java.lang.String getMessage(java.lang.String key, java.lang.Object arg0, java.lang.Object arg1)
              Returns a text message after parametric replacement of the specified parameter placeholders.
     java.lang.String getMessage(java.lang.String key, java.lang.Object arg0, java.lang.Object arg1, java.lang.Object arg2)
              Returns a text message after parametric replacement of the specified parameter placeholders.
     java.lang.String getMessage(java.lang.String key, java.lang.Object arg0, java.lang.Object arg1, java.lang.Object arg2, java.lang.Object arg3)
              Returns a text message after parametric replacement of the specified parameter placeholders.
    static MessageResources getMessageResources(java.lang.String config)
              Create and return an instance of MessageResources for the created by the default MessageResourcesFactory.
     boolean getReturnNull()
              Indicates that a null is returned instead of an error message string if an unknown Locale or key is requested.
     boolean isPresent(java.util.Locale locale, java.lang.String key)
              Return true if there is a defined message for the specified key in the specified Locale.
     boolean isPresent(java.lang.String key)
              Return true if there is a defined message for the specified key in the system default locale.
    protected  java.lang.String localeKey(java.util.Locale locale)
              Compute and return a key to be used in caching information by a Locale.
     void log(java.lang.String message)
              Log a message to the Writer that has been configured for our use.
     void log(java.lang.String message, java.lang.Throwable throwable)
              Log a message and exception to the Writer that has been configured for our use.
    protected  java.lang.String messageKey(java.util.Locale locale, java.lang.String key)
              Compute and return a key to be used in caching information by Locale and message key.
    protected  java.lang.String messageKey(java.lang.String localeKey, java.lang.String key)
              Compute and return a key to be used in caching information by locale key and message key.
     void setReturnNull(boolean returnNull)
              Indicates that a null is returned instead of an error message string if an unknown Locale or key is requested.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    log

    protected static org.apache.commons.logging.Log log
    Commons Logging instance.


    config

    protected java.lang.String config
    The configuration parameter used to initialize this MessageResources.


    defaultLocale

    protected java.util.Locale defaultLocale
    The default Locale for our environment.


    factory

    protected MessageResourcesFactory factory
    The MessageResourcesFactory that created this instance.


    formats

    protected java.util.HashMap formats
    The set of previously created MessageFormat objects, keyed by the key computed in messageKey().


    returnNull

    protected boolean returnNull
    Indicate is a null is returned instead of an error message string when an unknown Locale or key is requested.


    defaultFactory

    protected static MessageResourcesFactory defaultFactory
    The default MessageResourcesFactory used to create MessageResources instances.

    Constructor Detail

    MessageResources

    public MessageResources(MessageResourcesFactory factory,
                            java.lang.String config)
    Construct a new MessageResources according to the specified parameters.

    Parameters:
    factory - The MessageResourcesFactory that created us
    config - The configuration parameter for this MessageResources

    MessageResources

    public MessageResources(MessageResourcesFactory factory,
                            java.lang.String config,
                            boolean returnNull)
    Construct a new MessageResources according to the specified parameters.

    Parameters:
    factory - The MessageResourcesFactory that created us
    config - The configuration parameter for this MessageResources
    returnNull - The returnNull property we should initialize with
    Method Detail

    getConfig

    public java.lang.String getConfig()
    The configuration parameter used to initialize this MessageResources.

    Returns:
    parameter used to initialize this MessageResources

    getFactory

    public MessageResourcesFactory getFactory()
    The MessageResourcesFactory that created this instance.

    Returns:
    MessageResourcesFactory that created instance

    getReturnNull

    public boolean getReturnNull()
    Indicates that a null is returned instead of an error message string if an unknown Locale or key is requested.

    Returns:
    true if null is returned if unknown key or locale is requested

    setReturnNull

    public void setReturnNull(boolean returnNull)
    Indicates that a null is returned instead of an error message string if an unknown Locale or key is requested.

    Parameters:
    returnNull - true Indicates that a null is returned if an unknown Locale or key is requested.

    getMessage

    public java.lang.String getMessage(java.lang.String key)
    Returns a text message for the specified key, for the default Locale.

    Parameters:
    key - The message key to look up

    getMessage

    public java.lang.String getMessage(java.lang.String key,
                                       java.lang.Object[] args)
    Returns a text message after parametric replacement of the specified parameter placeholders.

    Parameters:
    key - The message key to look up
    args - An array of replacement parameters for placeholders

    getMessage

    public java.lang.String getMessage(java.lang.String key,
                                       java.lang.Object arg0)
    Returns a text message after parametric replacement of the specified parameter placeholders.

    Parameters:
    key - The message key to look up
    arg0 - The replacement for placeholder {0} in the message

    getMessage

    public java.lang.String getMessage(java.lang.String key,
                                       java.lang.Object arg0,
                                       java.lang.Object arg1)
    Returns a text message after parametric replacement of the specified parameter placeholders.

    Parameters:
    key - The message key to look up
    arg0 - The replacement for placeholder {0} in the message
    arg1 - The replacement for placeholder {1} in the message

    getMessage

    public java.lang.String getMessage(java.lang.String key,
                                       java.lang.Object arg0,
                                       java.lang.Object arg1,
                                       java.lang.Object arg2)
    Returns a text message after parametric replacement of the specified parameter placeholders.

    Parameters:
    key - The message key to look up
    arg0 - The replacement for placeholder {0} in the message
    arg1 - The replacement for placeholder {1} in the message
    arg2 - The replacement for placeholder {2} in the message

    getMessage

    public java.lang.String getMessage(java.lang.String key,
                                       java.lang.Object arg0,
                                       java.lang.Object arg1,
                                       java.lang.Object arg2,
                                       java.lang.Object arg3)
    Returns a text message after parametric replacement of the specified parameter placeholders.

    Parameters:
    key - The message key to look up
    arg0 - The replacement for placeholder {0} in the message
    arg1 - The replacement for placeholder {1} in the message
    arg2 - The replacement for placeholder {2} in the message
    arg3 - The replacement for placeholder {3} in the message

    getMessage

    public abstract java.lang.String getMessage(java.util.Locale locale,
                                                java.lang.String key)
    Returns a text message for the specified key, for the default Locale. A null string result will be returned by this method if no relevant message resource is found for this key or Locale, if the returnNull property is set. Otherwise, an appropriate error message will be returned.

    This method must be implemented by a concrete subclass.

    Parameters:
    locale - The requested message Locale, or null for the system default Locale
    key - The message key to look up

    getMessage

    public java.lang.String getMessage(java.util.Locale locale,
                                       java.lang.String key,
                                       java.lang.Object[] args)
    Returns a text message after parametric replacement of the specified parameter placeholders. A null string result will be returned by this method if no resource bundle has been configured.

    Parameters:
    locale - The requested message Locale, or null for the system default Locale
    key - The message key to look up
    args - An array of replacement parameters for placeholders

    getMessage

    public java.lang.String getMessage(java.util.Locale locale,
                                       java.lang.String key,
                                       java.lang.Object arg0)
    Returns a text message after parametric replacement of the specified parameter placeholders. A null string result will never be returned by this method.

    Parameters:
    locale - The requested message Locale, or null for the system default Locale
    key - The message key to look up
    arg0 - The replacement for placeholder {0} in the message

    getMessage

    public java.lang.String getMessage(java.util.Locale locale,
                                       java.lang.String key,
                                       java.lang.Object arg0,
                                       java.lang.Object arg1)
    Returns a text message after parametric replacement of the specified parameter placeholders. A null string result will never be returned by this method.

    Parameters:
    locale - The requested message Locale, or null for the system default Locale
    key - The message key to look up
    arg0 - The replacement for placeholder {0} in the message
    arg1 - The replacement for placeholder {1} in the message

    getMessage

    public java.lang.String getMessage(java.util.Locale locale,
                                       java.lang.String key,
                                       java.lang.Object arg0,
                                       java.lang.Object arg1,
                                       java.lang.Object arg2)
    Returns a text message after parametric replacement of the specified parameter placeholders. A null string result will never be returned by this method.

    Parameters:
    locale - The requested message Locale, or null for the system default Locale
    key - The message key to look up
    arg0 - The replacement for placeholder {0} in the message
    arg1 - The replacement for placeholder {1} in the message
    arg2 - The replacement for placeholder {2} in the message

    getMessage

    public java.lang.String getMessage(java.util.Locale locale,
                                       java.lang.String key,
                                       java.lang.Object arg0,
                                       java.lang.Object arg1,
                                       java.lang.Object arg2,
                                       java.lang.Object arg3)
    Returns a text message after parametric replacement of the specified parameter placeholders. A null string result will never be returned by this method.

    Parameters:
    locale - The requested message Locale, or null for the system default Locale
    key - The message key to look up
    arg0 - The replacement for placeholder {0} in the message
    arg1 - The replacement for placeholder {1} in the message
    arg2 - The replacement for placeholder {2} in the message
    arg3 - The replacement for placeholder {3} in the message

    isPresent

    public boolean isPresent(java.lang.String key)
    Return true if there is a defined message for the specified key in the system default locale.

    Parameters:
    key - The message key to look up

    isPresent

    public boolean isPresent(java.util.Locale locale,
                             java.lang.String key)
    Return true if there is a defined message for the specified key in the specified Locale.

    Parameters:
    locale - The requested message Locale, or null for the system default Locale
    key - The message key to look up

    escape

    protected java.lang.String escape(java.lang.String string)
    Escape any single quote characters that are included in the specified message string.

    Parameters:
    string - The string to be escaped

    localeKey

    protected java.lang.String localeKey(java.util.Locale locale)
    Compute and return a key to be used in caching information by a Locale. NOTE - The locale key for the default Locale in our environment is a zero length String.

    Parameters:
    locale - The locale for which a key is desired

    messageKey

    protected java.lang.String messageKey(java.util.Locale locale,
                                          java.lang.String key)
    Compute and return a key to be used in caching information by Locale and message key.

    Parameters:
    locale - The Locale for which this format key is calculated
    key - The message key for which this format key is calculated

    messageKey

    protected java.lang.String messageKey(java.lang.String localeKey,
                                          java.lang.String key)
    Compute and return a key to be used in caching information by locale key and message key.

    Parameters:
    localeKey - The locale key for which this cache key is calculated
    key - The message key for which this cache key is calculated

    getMessageResources

    public static MessageResources getMessageResources(java.lang.String config)
    Create and return an instance of MessageResources for the created by the default MessageResourcesFactory.

    Parameters:
    config - Configuration parameter for this message bundle.

    log

    public void log(java.lang.String message)
    Log a message to the Writer that has been configured for our use.

    Parameters:
    message - The message to be logged

    log

    public void log(java.lang.String message,
                    java.lang.Throwable throwable)
    Log a message and exception to the Writer that has been configured for our use.

    Parameters:
    message - The message to be logged
    throwable - The exception to be logged


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/MessageResourcesFactory.html0000644000175000017500000004633410404045236032034 0ustar arnaudarnaud00000000000000 MessageResourcesFactory (Apache Struts API Documentation)

    org.apache.struts.util
    Class MessageResourcesFactory

    java.lang.Object
      |
      +--org.apache.struts.util.MessageResourcesFactory
    
    All Implemented Interfaces:
    java.io.Serializable
    Direct Known Subclasses:
    PropertyMessageResourcesFactory

    public abstract class MessageResourcesFactory
    extends java.lang.Object
    implements java.io.Serializable

    Factory for MessageResources instances. The general usage pattern for this class is:

    • Call MessageResourcesFactory().createFactory() to retrieve a MessageResourcesFactory instance.
    • Set properties as required to configure this factory instance to create MessageResources instances with desired characteristics.
    • Call the createResources() method of the factory to retrieve a newly instantiated MessageResources instance.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:43:31 +0100 (Fri, 22 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
    protected static java.lang.Class clazz
              The Java class to be used for MessageResourcesFactory instances.
    protected static java.lang.String factoryClass
              The fully qualified class name to be used for MessageResourcesFactory instances.
    private static org.apache.commons.logging.Log LOG
              Commons Logging instance.
    protected  boolean returnNull
              The "return null" property value to which newly created MessageResourcess should be initialized.
     
    Constructor Summary
    MessageResourcesFactory()
               
     
    Method Summary
    static MessageResourcesFactory createFactory()
              Create and return a MessageResourcesFactory instance of the appropriate class, which can be used to create customized MessageResources instances.
    abstract  MessageResources createResources(java.lang.String config)
              Create and return a newly instansiated MessageResources.
    static java.lang.String getFactoryClass()
              The fully qualified class name that is used for MessageResourcesFactory instances.
     boolean getReturnNull()
              Get default value of the "returnNull" property used to initialize newly created MessageResourcess.
    static void setFactoryClass(java.lang.String factoryClass)
              Set the fully qualified class name that is used for MessageResourcesFactory instances.
     void setReturnNull(boolean returnNull)
              Set the default value of the "returnNull" property newly created MessageResourcess are initialized to.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    returnNull

    protected boolean returnNull
    The "return null" property value to which newly created MessageResourcess should be initialized.


    clazz

    protected static transient java.lang.Class clazz
    The Java class to be used for MessageResourcesFactory instances.


    LOG

    private static org.apache.commons.logging.Log LOG
    Commons Logging instance.


    factoryClass

    protected static java.lang.String factoryClass
    The fully qualified class name to be used for MessageResourcesFactory instances.

    Constructor Detail

    MessageResourcesFactory

    public MessageResourcesFactory()
    Method Detail

    getReturnNull

    public boolean getReturnNull()
    Get default value of the "returnNull" property used to initialize newly created MessageResourcess.

    Returns:
    default value of the "returnNull" property newly created MessageResourcess are initialized to.

    setReturnNull

    public void setReturnNull(boolean returnNull)
    Set the default value of the "returnNull" property newly created MessageResourcess are initialized to.

    Parameters:
    returnNull - default value of the "returnNull" MessageResourcess are initialized to.

    createResources

    public abstract MessageResources createResources(java.lang.String config)
    Create and return a newly instansiated MessageResources. This method must be implemented by concrete subclasses.

    Parameters:
    config - Configuration parameter(s) for the requested bundle

    getFactoryClass

    public static java.lang.String getFactoryClass()
    The fully qualified class name that is used for MessageResourcesFactory instances.

    Returns:
    class name that is used for MessageResourcesFactory instances

    setFactoryClass

    public static void setFactoryClass(java.lang.String factoryClass)
    Set the fully qualified class name that is used for MessageResourcesFactory instances.

    Parameters:
    factoryClass - name that is used for MessageResourcesFactory instances

    createFactory

    public static MessageResourcesFactory createFactory()
    Create and return a MessageResourcesFactory instance of the appropriate class, which can be used to create customized MessageResources instances. If no such factory can be created, return null instead.



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/ModuleException.html0000644000175000017500000004753710404045220030330 0ustar arnaudarnaud00000000000000 ModuleException (Apache Struts API Documentation)

    org.apache.struts.util
    Class ModuleException

    java.lang.Object
      |
      +--java.lang.Throwable
            |
            +--java.lang.Exception
                  |
                  +--org.apache.struts.util.ModuleException
    
    All Implemented Interfaces:
    java.io.Serializable
    Direct Known Subclasses:
    AppException

    public class ModuleException
    extends java.lang.Exception

    Used for specialized exception handling.

    See Also:
    Serialized Form

    Field Summary
    protected  ActionError error
               
    protected  java.lang.String property
               
     
    Fields inherited from class java.lang.Exception
     
    Fields inherited from class java.lang.Throwable
     
    Constructor Summary
    ModuleException(java.lang.String key)
              Construct an module exception with no replacement values.
    ModuleException(java.lang.String key, java.lang.Object value)
              Construct an module exception with the specified replacement values.
    ModuleException(java.lang.String key, java.lang.Object[] values)
              Construct an action error with the specified replacement values.
    ModuleException(java.lang.String key, java.lang.Object value0, java.lang.Object value1)
              Construct an module exception with the specified replacement values.
    ModuleException(java.lang.String key, java.lang.Object value0, java.lang.Object value1, java.lang.Object value2)
              Construct an module exception with the specified replacement values.
    ModuleException(java.lang.String key, java.lang.Object value0, java.lang.Object value1, java.lang.Object value2, java.lang.Object value3)
              Construct an module exception with the specified replacement values.
     
    Method Summary
     ActionError getError()
              Returns the error associated with the exception.
     java.lang.String getProperty()
              Returns the property associated with the exception.
     void setProperty(java.lang.String property)
              Set the property associated with the exception.
     
    Methods inherited from class java.lang.Throwable
    fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
     

    Field Detail

    property

    protected java.lang.String property

    error

    protected ActionError error
    Constructor Detail

    ModuleException

    public ModuleException(java.lang.String key)
    Construct an module exception with no replacement values.

    Parameters:
    key - Message key for this error message

    ModuleException

    public ModuleException(java.lang.String key,
                           java.lang.Object value)
    Construct an module exception with the specified replacement values.

    Parameters:
    key - Message key for this error message
    value - First replacement value

    ModuleException

    public ModuleException(java.lang.String key,
                           java.lang.Object value0,
                           java.lang.Object value1)
    Construct an module exception with the specified replacement values.

    Parameters:
    key - Message key for this error message
    value0 - First replacement value
    value1 - Second replacement value

    ModuleException

    public ModuleException(java.lang.String key,
                           java.lang.Object value0,
                           java.lang.Object value1,
                           java.lang.Object value2)
    Construct an module exception with the specified replacement values.

    Parameters:
    key - Message key for this error message
    value0 - First replacement value
    value1 - Second replacement value
    value2 - Third replacement value

    ModuleException

    public ModuleException(java.lang.String key,
                           java.lang.Object value0,
                           java.lang.Object value1,
                           java.lang.Object value2,
                           java.lang.Object value3)
    Construct an module exception with the specified replacement values.

    Parameters:
    key - Message key for this error message
    value0 - First replacement value
    value1 - Second replacement value
    value2 - Third replacement value
    value3 - Fourth replacement value

    ModuleException

    public ModuleException(java.lang.String key,
                           java.lang.Object[] values)
    Construct an action error with the specified replacement values.

    Parameters:
    key - Message key for this message
    values - Array of replacement values
    Method Detail

    getProperty

    public java.lang.String getProperty()
    Returns the property associated with the exception.

    Returns:
    Value of property.

    setProperty

    public void setProperty(java.lang.String property)
    Set the property associated with the exception. It can be a name of the edit field, which 'caused' the exception.


    getError

    public ActionError getError()
    Returns the error associated with the exception.

    Returns:
    Value of property error.


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/PropertyMessageResources.html0000644000175000017500000005516610404045216032252 0ustar arnaudarnaud00000000000000 PropertyMessageResources (Apache Struts API Documentation)

    org.apache.struts.util
    Class PropertyMessageResources

    java.lang.Object
      |
      +--org.apache.struts.util.MessageResources
            |
            +--org.apache.struts.util.PropertyMessageResources
    
    All Implemented Interfaces:
    java.io.Serializable

    public class PropertyMessageResources
    extends MessageResources

    Concrete subclass of MessageResources that reads message keys and corresponding strings from named property resources in the same manner that java.util.PropertyResourceBundle does. The base property defines the base property resource name, and must be specified.

    IMPLEMENTATION NOTE - This class trades memory for speed by caching all messages located via generalizing the Locale under the original locale as well. This results in specific messages being stored in the message cache more than once, but improves response time on subsequent requests for the same locale + key combination.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:43:31 +0100 (Fri, 22 Aug 2003) $
    Author:
    Craig R. McClanahan, David Graham
    See Also:
    Serialized Form

    Field Summary
    protected  java.util.HashMap locales
              The set of locale keys for which we have already loaded messages, keyed by the value calculated in localeKey().
    protected static org.apache.commons.logging.Log log
              The Log instance for this class.
    protected  java.util.HashMap messages
              The cache of messages we have accumulated over time, keyed by the value calculated in messageKey().
     
    Fields inherited from class org.apache.struts.util.MessageResources
    config, defaultFactory, defaultLocale, factory, formats, returnNull
     
    Constructor Summary
    PropertyMessageResources(MessageResourcesFactory factory, java.lang.String config)
              Construct a new PropertyMessageResources according to the specified parameters.
    PropertyMessageResources(MessageResourcesFactory factory, java.lang.String config, boolean returnNull)
              Construct a new PropertyMessageResources according to the specified parameters.
     
    Method Summary
     java.lang.String getMessage(java.util.Locale locale, java.lang.String key)
              Returns a text message for the specified key, for the default Locale.
    protected  void loadLocale(java.lang.String localeKey)
              Load the messages associated with the specified Locale key.
     
    Methods inherited from class org.apache.struts.util.MessageResources
    escape, getConfig, getFactory, getMessage, getMessage, getMessage, getMessage, getMessage, getMessage, getMessage, getMessage, getMessage, getMessage, getMessage, getMessageResources, getReturnNull, isPresent, isPresent, localeKey, log, log, messageKey, messageKey, setReturnNull
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    locales

    protected java.util.HashMap locales
    The set of locale keys for which we have already loaded messages, keyed by the value calculated in localeKey().


    log

    protected static final org.apache.commons.logging.Log log
    The Log instance for this class.


    messages

    protected java.util.HashMap messages
    The cache of messages we have accumulated over time, keyed by the value calculated in messageKey().

    Constructor Detail

    PropertyMessageResources

    public PropertyMessageResources(MessageResourcesFactory factory,
                                    java.lang.String config)
    Construct a new PropertyMessageResources according to the specified parameters.

    Parameters:
    factory - The MessageResourcesFactory that created us
    config - The configuration parameter for this MessageResources

    PropertyMessageResources

    public PropertyMessageResources(MessageResourcesFactory factory,
                                    java.lang.String config,
                                    boolean returnNull)
    Construct a new PropertyMessageResources according to the specified parameters.

    Parameters:
    factory - The MessageResourcesFactory that created us
    config - The configuration parameter for this MessageResources
    returnNull - The returnNull property we should initialize with
    Method Detail

    getMessage

    public java.lang.String getMessage(java.util.Locale locale,
                                       java.lang.String key)
    Returns a text message for the specified key, for the default Locale. A null string result will be returned by this method if no relevant message resource is found for this key or Locale, if the returnNull property is set. Otherwise, an appropriate error message will be returned.

    This method must be implemented by a concrete subclass.

    Specified by:
    getMessage in class MessageResources
    Parameters:
    locale - The requested message Locale, or null for the system default Locale
    key - The message key to look up
    Returns:
    text message for the specified key and locale

    loadLocale

    protected void loadLocale(java.lang.String localeKey)
    Load the messages associated with the specified Locale key. For this implementation, the config property should contain a fully qualified package and resource name, separated by periods, of a series of property resources to be loaded from the class loader that created this PropertyMessageResources instance. This is exactly the same name format you would use when utilizing the java.util.PropertyResourceBundle class.

    Parameters:
    localeKey - Locale key for the messages to be retrieved


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/PropertyMessageResourcesFactory.html0000644000175000017500000003276210404045220033572 0ustar arnaudarnaud00000000000000 PropertyMessageResourcesFactory (Apache Struts API Documentation)

    org.apache.struts.util
    Class PropertyMessageResourcesFactory

    java.lang.Object
      |
      +--org.apache.struts.util.MessageResourcesFactory
            |
            +--org.apache.struts.util.PropertyMessageResourcesFactory
    
    All Implemented Interfaces:
    java.io.Serializable

    public class PropertyMessageResourcesFactory
    extends MessageResourcesFactory

    Factory for PropertyMessageResources instances. The configuration paramter for such instances is the base Java package name of the resources entries from which our keys and values will be loaded.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:43:31 +0100 (Fri, 22 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
     
    Fields inherited from class org.apache.struts.util.MessageResourcesFactory
    clazz, factoryClass, returnNull
     
    Constructor Summary
    PropertyMessageResourcesFactory()
               
     
    Method Summary
     MessageResources createResources(java.lang.String config)
              Create and return a newly instansiated MessageResources.
     
    Methods inherited from class org.apache.struts.util.MessageResourcesFactory
    createFactory, getFactoryClass, getReturnNull, setFactoryClass, setReturnNull
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Constructor Detail

    PropertyMessageResourcesFactory

    public PropertyMessageResourcesFactory()
    Method Detail

    createResources

    public MessageResources createResources(java.lang.String config)
    Create and return a newly instansiated MessageResources. This method must be implemented by concrete subclasses.

    Specified by:
    createResources in class MessageResourcesFactory
    Parameters:
    config - Configuration parameter(s) for the requested bundle


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/RequestUtils.html0000644000175000017500000026254310404045174027701 0ustar arnaudarnaud00000000000000 RequestUtils (Apache Struts API Documentation)

    org.apache.struts.util
    Class RequestUtils

    java.lang.Object
      |
      +--org.apache.struts.util.RequestUtils
    

    public class RequestUtils
    extends java.lang.Object

    General purpose utility methods related to processing a servlet request in the Struts controller framework.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:43:31 +0100 (Fri, 22 Aug 2003) $
    Author:
    Craig R. McClanahan, Ted Husted, James Turner, David Graham

    Field Summary
    private static java.lang.reflect.Method encode
              Java 1.4 encode method to use instead of deprecated 1.3 version.
    protected static org.apache.commons.logging.Log log
              Commons Logging instance.
    private static MessageResources messages
              The message resources for this package.
    private static java.lang.String PREFIXES_KEY
              The context attribute under which we store our prefixes list.
    private static java.util.Map scopes
              Maps lowercase JSP scope names to their PageContext integer constant values.
     
    Constructor Summary
    RequestUtils()
               
     
    Method Summary
    static java.net.URL absoluteURL(javax.servlet.http.HttpServletRequest request, java.lang.String path)
              Create and return an absolute URL for the specified context-relative path, based on the server and context information in the specified request.
    static java.lang.String actionURL(javax.servlet.http.HttpServletRequest request, ActionConfig action, java.lang.String pattern)
              Return the context-relative URL that corresponds to the specified ActionConfig, relative to the module associated with the current modules's ModuleConfig.
    static java.lang.Class applicationClass(java.lang.String className)
              Return the Class object for the specified fully qualified class name, from this web application's class loader.
    static java.lang.Object applicationInstance(java.lang.String className)
              Return a new instance of the specified fully qualified class name, after loading the class from this web application's class loader.
    static java.util.Map computeParameters(javax.servlet.jsp.PageContext pageContext, java.lang.String paramId, java.lang.String paramName, java.lang.String paramProperty, java.lang.String paramScope, java.lang.String name, java.lang.String property, java.lang.String scope, boolean transaction)
              Compute a set of query parameters that will be dynamically added to a generated URL.
    static java.lang.String computeURL(javax.servlet.jsp.PageContext pageContext, java.lang.String forward, java.lang.String href, java.lang.String page, java.util.Map params, java.lang.String anchor, boolean redirect)
              Deprecated. To be removed in Version 1.3. Use computeURL(PageContext, String, String, String, String, Map, String, boolean) instead.
    static java.lang.String computeURL(javax.servlet.jsp.PageContext pageContext, java.lang.String forward, java.lang.String href, java.lang.String page, java.lang.String action, java.util.Map params, java.lang.String anchor, boolean redirect)
              Compute a hyperlink URL based on the forward, href, action or page parameter that is not null.
    static java.lang.String computeURL(javax.servlet.jsp.PageContext pageContext, java.lang.String forward, java.lang.String href, java.lang.String page, java.lang.String action, java.util.Map params, java.lang.String anchor, boolean redirect, boolean encodeSeparator)
              Compute a hyperlink URL based on the forward, href, action or page parameter that is not null.
    static ActionForm createActionForm(javax.servlet.http.HttpServletRequest request, ActionMapping mapping, ModuleConfig moduleConfig, ActionServlet servlet)
              Create (if necessary) and return an ActionForm instance appropriate for this request.
    static java.lang.String encodeURL(java.lang.String url)
              Use the new URLEncoder.encode() method from java 1.4 if available, else use the old deprecated version.
    static java.lang.String forwardURL(javax.servlet.http.HttpServletRequest request, ForwardConfig forward)
              Return the context-relative URL that corresponds to the specified ForwardConfig.
    static ActionErrors getActionErrors(javax.servlet.jsp.PageContext pageContext, java.lang.String paramName)
              Retrieves the value from request scope and if it isn't already an ErrorMessages some classes are converted to one.
    static java.lang.String getActionMappingName(java.lang.String action)
              Return the form action converted into an action mapping path.
    static java.lang.String getActionMappingURL(java.lang.String action, javax.servlet.jsp.PageContext pageContext)
              Return the form action converted into a server-relative URL.
    static ActionMessages getActionMessages(javax.servlet.jsp.PageContext pageContext, java.lang.String paramName)
              Retrieves the value from request scope and if it isn't already an ActionMessages some classes are converted to one.
    private static java.util.Map getAllParametersForMultipartRequest(javax.servlet.http.HttpServletRequest request, MultipartRequestHandler multipartHandler)
              Create a map containing all of the parameters supplied for a multipart request, keyed by parameter name.
    static java.lang.String[] getApplicationPrefixes(javax.servlet.ServletContext context)
              Deprecated. Use getModulePrefixes(ServletContext) instead.
    static ModuleConfig getModuleConfig(javax.servlet.http.HttpServletRequest request, javax.servlet.ServletContext context)
              Return the ModuleConfig object is it exists, null otherwise.
    static ModuleConfig getModuleConfig(javax.servlet.jsp.PageContext pageContext)
              Return the ModuleConfig object if it exists, null if otherwise.
    static java.lang.String getModuleName(javax.servlet.http.HttpServletRequest request, javax.servlet.ServletContext context)
              Get the module name to which the specified request belong.
    static java.lang.String getModuleName(java.lang.String matchPath, javax.servlet.ServletContext context)
              Get the module name to which the specified uri belong.
    static java.lang.String[] getModulePrefixes(javax.servlet.ServletContext context)
              Return the list of module prefixes that are defined for this web application, creating it if necessary.
    private static MultipartRequestHandler getMultipartHandler(javax.servlet.http.HttpServletRequest request)
              Try to locate a multipart request handler for this request.
    static ModuleConfig getRequestModuleConfig(javax.servlet.http.HttpServletRequest request)
              Return the current ModuleConfig object stored in request, if it exists, null otherwise.
    static int getScope(java.lang.String scopeName)
              Converts the scope name into its corresponding PageContext constant value.
    static boolean isXhtml(javax.servlet.jsp.PageContext pageContext)
              Returns true if the custom tags are in XHTML mode.
    static java.lang.Object lookup(javax.servlet.jsp.PageContext pageContext, java.lang.String name, java.lang.String scopeName)
              Locate and return the specified bean, from an optionally specified scope, in the specified page context.
    static java.lang.Object lookup(javax.servlet.jsp.PageContext pageContext, java.lang.String name, java.lang.String property, java.lang.String scope)
              Locate and return the specified property of the specified bean, from an optionally specified scope, in the specified page context.
    static java.lang.String message(javax.servlet.jsp.PageContext pageContext, java.lang.String bundle, java.lang.String locale, java.lang.String key)
              Look up and return a message string, based on the specified parameters.
    static java.lang.String message(javax.servlet.jsp.PageContext pageContext, java.lang.String bundle, java.lang.String locale, java.lang.String key, java.lang.Object[] args)
              Look up and return a message string, based on the specified parameters.
    static java.lang.String pageURL(javax.servlet.http.HttpServletRequest request, java.lang.String page)
              Return the context-relative URL that corresponds to the specified page attribute value, calculated based on the pagePattern property of the current module's ModuleConfig.
    static void populate(java.lang.Object bean, javax.servlet.http.HttpServletRequest request)
              Populate the properties of the specified JavaBean from the specified HTTP request, based on matching each parameter name against the corresponding JavaBeans "property setter" methods in the bean's class.
    static void populate(java.lang.Object bean, java.lang.String prefix, java.lang.String suffix, javax.servlet.http.HttpServletRequest request)
              Populate the properties of the specified JavaBean from the specified HTTP request, based on matching each parameter name (plus an optional prefix and/or suffix) against the corresponding JavaBeans "property setter" methods in the bean's class.
    static boolean present(javax.servlet.jsp.PageContext pageContext, java.lang.String bundle, java.lang.String locale, java.lang.String key)
              Return true if a message string for the specified message key is present for the specified Locale.
    static java.lang.String printableURL(java.net.URL url)
              Compute the printable representation of a URL, leaving off the scheme/host/port part if no host is specified.
    static java.net.URL requestURL(javax.servlet.http.HttpServletRequest request)
              Return the URL representing the current request.
    private static MessageResources retrieveMessageResources(javax.servlet.jsp.PageContext pageContext, java.lang.String bundle, boolean checkPageScope)
              Returns the appropriate MessageResources object for the current module and the given bundle.
    static java.util.Locale retrieveUserLocale(javax.servlet.jsp.PageContext pageContext, java.lang.String locale)
              Look up and return current user locale, based on the specified parameters.
    static void saveException(javax.servlet.jsp.PageContext pageContext, java.lang.Throwable exception)
              Save the specified exception as a request attribute for later use.
    static void selectApplication(javax.servlet.http.HttpServletRequest request, javax.servlet.ServletContext context)
              Deprecated. use selectModule(HttpServletRequest,ServletContext)
    static void selectApplication(java.lang.String prefix, javax.servlet.http.HttpServletRequest request, javax.servlet.ServletContext context)
              Deprecated. use selectModule(String,HttpServletRequest,ServletContext)
    static void selectModule(javax.servlet.http.HttpServletRequest request, javax.servlet.ServletContext context)
              Select the module to which the specified request belongs, and add corresponding request attributes to this request.
    static void selectModule(java.lang.String prefix, javax.servlet.http.HttpServletRequest request, javax.servlet.ServletContext context)
              Select the module to which the specified request belongs, and add corresponding request attributes to this request.
    static java.net.URL serverURL(javax.servlet.http.HttpServletRequest request)
              Return the URL representing the scheme, server, and port number of the current request.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    log

    protected static org.apache.commons.logging.Log log
    Commons Logging instance.


    messages

    private static MessageResources messages
    The message resources for this package.


    PREFIXES_KEY

    private static final java.lang.String PREFIXES_KEY
    The context attribute under which we store our prefixes list.

    See Also:
    Constant Field Values

    encode

    private static java.lang.reflect.Method encode
    Java 1.4 encode method to use instead of deprecated 1.3 version.


    scopes

    private static java.util.Map scopes
    Maps lowercase JSP scope names to their PageContext integer constant values.

    Constructor Detail

    RequestUtils

    public RequestUtils()
    Method Detail

    absoluteURL

    public static java.net.URL absoluteURL(javax.servlet.http.HttpServletRequest request,
                                           java.lang.String path)
                                    throws java.net.MalformedURLException
    Create and return an absolute URL for the specified context-relative path, based on the server and context information in the specified request.

    Parameters:
    request - The servlet request we are processing
    path - The context-relative path (must start with '/')
    Returns:
    absolute URL based on context-relative path
    Throws:
    java.net.MalformedURLException - if we cannot create an absolute URL

    applicationClass

    public static java.lang.Class applicationClass(java.lang.String className)
                                            throws java.lang.ClassNotFoundException
    Return the Class object for the specified fully qualified class name, from this web application's class loader.

    Parameters:
    className - Fully qualified class name to be loaded
    Returns:
    Class object
    Throws:
    java.lang.ClassNotFoundException - if the class cannot be found

    applicationInstance

    public static java.lang.Object applicationInstance(java.lang.String className)
                                                throws java.lang.ClassNotFoundException,
                                                       java.lang.IllegalAccessException,
                                                       java.lang.InstantiationException
    Return a new instance of the specified fully qualified class name, after loading the class from this web application's class loader. The specified class MUST have a public zero-arguments constructor.

    Parameters:
    className - Fully qualified class name to use
    Returns:
    new instance of class
    Throws:
    java.lang.ClassNotFoundException - if the class cannot be found
    java.lang.IllegalAccessException - if the class or its constructor is not accessible
    java.lang.InstantiationException - if this class represents an abstract class, an interface, an array class, a primitive type, or void
    java.lang.InstantiationException - if this class has no zero-arguments constructor

    computeParameters

    public static java.util.Map computeParameters(javax.servlet.jsp.PageContext pageContext,
                                                  java.lang.String paramId,
                                                  java.lang.String paramName,
                                                  java.lang.String paramProperty,
                                                  java.lang.String paramScope,
                                                  java.lang.String name,
                                                  java.lang.String property,
                                                  java.lang.String scope,
                                                  boolean transaction)
                                           throws javax.servlet.jsp.JspException
    Compute a set of query parameters that will be dynamically added to a generated URL. The returned Map is keyed by parameter name, and the values are either null (no value specified), a String (single value specified), or a String[] array (multiple values specified). Parameter names correspond to the corresponding attributes of the <html:link> tag. If no query parameters are identified, return null.

    Parameters:
    pageContext - PageContext we are operating in
    paramId - Single-value request parameter name (if any)
    paramName - Bean containing single-value parameter value
    paramProperty - Property (of bean named by paramName containing single-value parameter value
    paramScope - Scope containing bean named by paramName
    name - Bean containing multi-value parameters Map (if any)
    property - Property (of bean named by name containing multi-value parameters Map
    scope - Scope containing bean named by name
    transaction - Should we add our transaction control token?
    Returns:
    Map of query parameters
    Throws:
    javax.servlet.jsp.JspException - if we cannot look up the required beans
    javax.servlet.jsp.JspException - if a class cast exception occurs on a looked-up bean or property

    computeURL

    public static java.lang.String computeURL(javax.servlet.jsp.PageContext pageContext,
                                              java.lang.String forward,
                                              java.lang.String href,
                                              java.lang.String page,
                                              java.util.Map params,
                                              java.lang.String anchor,
                                              boolean redirect)
                                       throws java.net.MalformedURLException
    Deprecated. To be removed in Version 1.3. Use computeURL(PageContext, String, String, String, String, Map, String, boolean) instead.

    Compute a hyperlink URL based on the forward, href or page parameter that is not null.

    Parameters:
    pageContext - PageContext for the tag making this call
    forward - Logical forward name for which to look up the context-relative URI (if specified)
    href - URL to be utilized unmodified (if specified)
    page - Module-relative page for which a URL should be created (if specified)
    params - Map of parameters to be dynamically included (if any)
    anchor - Anchor to be dynamically included (if any)
    redirect - Is this URL for a response.sendRedirect()?
    Returns:
    URL with session identifier
    Throws:
    java.net.MalformedURLException - if a URL cannot be created for the specified parameters

    computeURL

    public static java.lang.String computeURL(javax.servlet.jsp.PageContext pageContext,
                                              java.lang.String forward,
                                              java.lang.String href,
                                              java.lang.String page,
                                              java.lang.String action,
                                              java.util.Map params,
                                              java.lang.String anchor,
                                              boolean redirect)
                                       throws java.net.MalformedURLException
    Compute a hyperlink URL based on the forward, href, action or page parameter that is not null. The returned URL will have already been passed to response.encodeURL() for adding a session identifier.

    Parameters:
    pageContext - PageContext for the tag making this call
    forward - Logical forward name for which to look up the context-relative URI (if specified)
    href - URL to be utilized unmodified (if specified)
    page - Module-relative page for which a URL should be created (if specified)
    action - Logical action name for which to look up the context-relative URI (if specified)
    params - Map of parameters to be dynamically included (if any)
    anchor - Anchor to be dynamically included (if any)
    redirect - Is this URL for a response.sendRedirect()?
    Returns:
    URL with session identifier
    Throws:
    java.net.MalformedURLException - if a URL cannot be created for the specified parameters

    computeURL

    public static java.lang.String computeURL(javax.servlet.jsp.PageContext pageContext,
                                              java.lang.String forward,
                                              java.lang.String href,
                                              java.lang.String page,
                                              java.lang.String action,
                                              java.util.Map params,
                                              java.lang.String anchor,
                                              boolean redirect,
                                              boolean encodeSeparator)
                                       throws java.net.MalformedURLException
    Compute a hyperlink URL based on the forward, href, action or page parameter that is not null. The returned URL will have already been passed to response.encodeURL() for adding a session identifier.

    Parameters:
    pageContext - PageContext for the tag making this call
    forward - Logical forward name for which to look up the context-relative URI (if specified)
    href - URL to be utilized unmodified (if specified)
    page - Module-relative page for which a URL should be created (if specified)
    action - Logical action name for which to look up the context-relative URI (if specified)
    params - Map of parameters to be dynamically included (if any)
    anchor - Anchor to be dynamically included (if any)
    redirect - Is this URL for a response.sendRedirect()?
    encodeSeparator - This is only checked if redirect is set to false (never encoded for a redirect). If true, query string parameter separators are encoded as >amp;, else & is used.
    Returns:
    URL with session identifier
    Throws:
    java.net.MalformedURLException - if a URL cannot be created for the specified parameters

    getActionMappingName

    public static java.lang.String getActionMappingName(java.lang.String action)
    Return the form action converted into an action mapping path. The value of the action property is manipulated as follows in computing the name of the requested mapping:
    • Any filename extension is removed (on the theory that extension mapping is being used to select the controller servlet).
    • If the resulting value does not start with a slash, then a slash is prepended.


    getActionMappingURL

    public static java.lang.String getActionMappingURL(java.lang.String action,
                                                       javax.servlet.jsp.PageContext pageContext)
    Return the form action converted into a server-relative URL.


    createActionForm

    public static ActionForm createActionForm(javax.servlet.http.HttpServletRequest request,
                                              ActionMapping mapping,
                                              ModuleConfig moduleConfig,
                                              ActionServlet servlet)
    Create (if necessary) and return an ActionForm instance appropriate for this request. If no ActionForm instance is required, return null.

    Parameters:
    request - The servlet request we are processing
    mapping - The action mapping for this request
    moduleConfig - The configuration for this module
    servlet - The action servlet
    Returns:
    ActionForm instance associated with this request

    lookup

    public static java.lang.Object lookup(javax.servlet.jsp.PageContext pageContext,
                                          java.lang.String name,
                                          java.lang.String scopeName)
                                   throws javax.servlet.jsp.JspException
    Locate and return the specified bean, from an optionally specified scope, in the specified page context. If no such bean is found, return null instead. If an exception is thrown, it will have already been saved via a call to saveException().

    Parameters:
    pageContext - Page context to be searched
    name - Name of the bean to be retrieved
    scopeName - Scope to be searched (page, request, session, application) or null to use findAttribute() instead
    Returns:
    JavaBean in the specified page context
    Throws:
    javax.servlet.jsp.JspException - if an invalid scope name is requested

    getScope

    public static int getScope(java.lang.String scopeName)
                        throws javax.servlet.jsp.JspException
    Converts the scope name into its corresponding PageContext constant value.

    Parameters:
    scopeName - Can be "page", "request", "session", or "application" in any case.
    Returns:
    The constant representing the scope (ie. PageContext.REQUEST_SCOPE).
    Throws:
    javax.servlet.jsp.JspException - if the scopeName is not a valid name.
    Since:
    Struts 1.1

    lookup

    public static java.lang.Object lookup(javax.servlet.jsp.PageContext pageContext,
                                          java.lang.String name,
                                          java.lang.String property,
                                          java.lang.String scope)
                                   throws javax.servlet.jsp.JspException
    Locate and return the specified property of the specified bean, from an optionally specified scope, in the specified page context. If an exception is thrown, it will have already been saved via a call to saveException().

    Parameters:
    pageContext - Page context to be searched
    name - Name of the bean to be retrieved
    property - Name of the property to be retrieved, or null to retrieve the bean itself
    scope - Scope to be searched (page, request, session, application) or null to use findAttribute() instead
    Returns:
    property of specified JavaBean
    Throws:
    javax.servlet.jsp.JspException - if an invalid scope name is requested
    javax.servlet.jsp.JspException - if the specified bean is not found
    javax.servlet.jsp.JspException - if accessing this property causes an IllegalAccessException, IllegalArgumentException, InvocationTargetException, or NoSuchMethodException

    retrieveUserLocale

    public static java.util.Locale retrieveUserLocale(javax.servlet.jsp.PageContext pageContext,
                                                      java.lang.String locale)
    Look up and return current user locale, based on the specified parameters.

    Parameters:
    pageContext - The PageContext associated with this request
    locale - Name of the session attribute for our user's Locale. If this is null, the default locale key is used for the lookup.
    Returns:
    current user locale

    message

    public static java.lang.String message(javax.servlet.jsp.PageContext pageContext,
                                           java.lang.String bundle,
                                           java.lang.String locale,
                                           java.lang.String key)
                                    throws javax.servlet.jsp.JspException
    Look up and return a message string, based on the specified parameters.

    Parameters:
    pageContext - The PageContext associated with this request
    bundle - Name of the servlet context attribute for our message resources bundle
    locale - Name of the session attribute for our user's Locale
    key - Message key to be looked up and returned
    Returns:
    message string
    Throws:
    javax.servlet.jsp.JspException - if a lookup error occurs (will have been saved in the request already)

    message

    public static java.lang.String message(javax.servlet.jsp.PageContext pageContext,
                                           java.lang.String bundle,
                                           java.lang.String locale,
                                           java.lang.String key,
                                           java.lang.Object[] args)
                                    throws javax.servlet.jsp.JspException
    Look up and return a message string, based on the specified parameters.

    Parameters:
    pageContext - The PageContext associated with this request
    bundle - Name of the servlet context attribute for our message resources bundle
    locale - Name of the session attribute for our user's Locale
    key - Message key to be looked up and returned
    args - Replacement parameters for this message
    Returns:
    message string
    Throws:
    javax.servlet.jsp.JspException - if a lookup error occurs (will have been saved in the request already)

    retrieveMessageResources

    private static MessageResources retrieveMessageResources(javax.servlet.jsp.PageContext pageContext,
                                                             java.lang.String bundle,
                                                             boolean checkPageScope)
                                                      throws javax.servlet.jsp.JspException
    Returns the appropriate MessageResources object for the current module and the given bundle.

    Parameters:
    pageContext - Search the context's scopes for the resources.
    bundle - The bundle name to look for. If this is null, the default bundle name is used.
    Returns:
    MessageResources The bundle's resources stored in some scope.
    Throws:
    javax.servlet.jsp.JspException - if the MessageResources object could not be found.

    populate

    public static void populate(java.lang.Object bean,
                                javax.servlet.http.HttpServletRequest request)
                         throws javax.servlet.ServletException
    Populate the properties of the specified JavaBean from the specified HTTP request, based on matching each parameter name against the corresponding JavaBeans "property setter" methods in the bean's class. Suitable conversion is done for argument types as described under convert().

    Parameters:
    bean - The JavaBean whose properties are to be set
    request - The HTTP request whose parameters are to be used to populate bean properties
    Throws:
    javax.servlet.ServletException - if an exception is thrown while setting property values

    populate

    public static void populate(java.lang.Object bean,
                                java.lang.String prefix,
                                java.lang.String suffix,
                                javax.servlet.http.HttpServletRequest request)
                         throws javax.servlet.ServletException
    Populate the properties of the specified JavaBean from the specified HTTP request, based on matching each parameter name (plus an optional prefix and/or suffix) against the corresponding JavaBeans "property setter" methods in the bean's class. Suitable conversion is done for argument types as described under setProperties().

    If you specify a non-null prefix and a non-null suffix, the parameter name must match both conditions for its value(s) to be used in populating bean properties. If the request's content type is "multipart/form-data" and the method is "POST", the HttpServletRequest object will be wrapped in a MultipartRequestWrapper object.

    Parameters:
    bean - The JavaBean whose properties are to be set
    prefix - The prefix (if any) to be prepend to bean property names when looking for matching parameters
    suffix - The suffix (if any) to be appended to bean property names when looking for matching parameters
    request - The HTTP request whose parameters are to be used to populate bean properties
    Throws:
    javax.servlet.ServletException - if an exception is thrown while setting property values

    getMultipartHandler

    private static MultipartRequestHandler getMultipartHandler(javax.servlet.http.HttpServletRequest request)
                                                        throws javax.servlet.ServletException
    Try to locate a multipart request handler for this request. First, look for a mapping-specific handler stored for us under an attribute. If one is not present, use the global multipart handler, if there is one.

    Parameters:
    request - The HTTP request for which the multipart handler should be found.
    Returns:
    the multipart handler to use, or null if none is found.
    Throws:
    javax.servlet.ServletException - if any exception is thrown while attempting to locate the multipart handler.

    getAllParametersForMultipartRequest

    private static java.util.Map getAllParametersForMultipartRequest(javax.servlet.http.HttpServletRequest request,
                                                                     MultipartRequestHandler multipartHandler)
    Create a map containing all of the parameters supplied for a multipart request, keyed by parameter name. In addition to text and file elements from the multipart body, query string parameters are included as well.

    Parameters:
    request - The (wrapped) HTTP request whose parameters are to be added to the map.
    multipartHandler - The multipart handler used to parse the request.
    Returns:
    the map containing all parameters for this multipart request.

    present

    public static boolean present(javax.servlet.jsp.PageContext pageContext,
                                  java.lang.String bundle,
                                  java.lang.String locale,
                                  java.lang.String key)
                           throws javax.servlet.jsp.JspException
    Return true if a message string for the specified message key is present for the specified Locale.

    Parameters:
    pageContext - The PageContext associated with this request
    bundle - Name of the servlet context attribute for our message resources bundle
    locale - Name of the session attribute for our user's Locale
    key - Message key to be looked up and returned
    Returns:
    true if a message string for message key exists
    Throws:
    javax.servlet.jsp.JspException - if a lookup error occurs (will have been saved in the request already)

    printableURL

    public static java.lang.String printableURL(java.net.URL url)
    Compute the printable representation of a URL, leaving off the scheme/host/port part if no host is specified. This will typically be the case for URLs that were originally created from relative or context-relative URIs.

    Parameters:
    url - URL to render in a printable representation
    Returns:
    printable representation of a URL

    actionURL

    public static java.lang.String actionURL(javax.servlet.http.HttpServletRequest request,
                                             ActionConfig action,
                                             java.lang.String pattern)
    Return the context-relative URL that corresponds to the specified ActionConfig, relative to the module associated with the current modules's ModuleConfig.

    Parameters:
    request - The servlet request we are processing
    action - ActionConfig to be evaluated
    pattern - URL pattern used to map the controller servlet
    Returns:
    context-relative URL relative to the module
    Since:
    Struts 1.1

    forwardURL

    public static java.lang.String forwardURL(javax.servlet.http.HttpServletRequest request,
                                              ForwardConfig forward)
    Return the context-relative URL that corresponds to the specified ForwardConfig. The URL is calculated based on the properties of the ForwardConfig instance as follows:
    • If the contextRelative property is set, it is assumed that the path property contains a path that is already context-relative:
      • If the path property value starts with a slash, it is returned unmodified.
      • If the path property value does not start with a slash, a slash is prepended.
    • Acquire the forwardPattern property from the ControllerConfig for the application module used to process this request. If no pattern was configured, default to a pattern of $M$P, which is compatible with the hard-coded mapping behavior in Struts 1.0.
    • Process the acquired forwardPattern, performing the following substitutions:
      • $M - Replaced by the module prefix for the application module processing this request.
      • $P - Replaced by the path property of the specified ForwardConfig, prepended with a slash if it does not start with one.
      • $$ - Replaced by a single dollar sign character.
      • $x (where "x" is any charater not listed above) - Silently omit these two characters from the result value. (This has the side effect of causing all other $+letter combinations to be reserved.)

    Parameters:
    request - The servlet request we are processing
    forward - ForwardConfig to be evaluated
    Returns:
    context-relative URL
    Since:
    Struts 1.1

    pageURL

    public static java.lang.String pageURL(javax.servlet.http.HttpServletRequest request,
                                           java.lang.String page)

    Return the context-relative URL that corresponds to the specified page attribute value, calculated based on the pagePattern property of the current module's ModuleConfig.

    Parameters:
    request - The servlet request we are processing
    page - The module-relative URL to be substituted in to the pagePattern pattern for the current module (MUST start with a slash)
    Returns:
    context-relative URL
    Since:
    Struts 1.1

    requestURL

    public static java.net.URL requestURL(javax.servlet.http.HttpServletRequest request)
                                   throws java.net.MalformedURLException
    Return the URL representing the current request. This is equivalent to HttpServletRequest.getRequestURL() in Servlet 2.3.

    Parameters:
    request - The servlet request we are processing
    Returns:
    URL representing the current request
    Throws:
    java.net.MalformedURLException - if a URL cannot be created

    serverURL

    public static java.net.URL serverURL(javax.servlet.http.HttpServletRequest request)
                                  throws java.net.MalformedURLException
    Return the URL representing the scheme, server, and port number of the current request. Server-relative URLs can be created by simply appending the server-relative path (starting with '/') to this.

    Parameters:
    request - The servlet request we are processing
    Returns:
    URL representing the scheme, server, and port number of the current request
    Throws:
    java.net.MalformedURLException - if a URL cannot be created

    saveException

    public static void saveException(javax.servlet.jsp.PageContext pageContext,
                                     java.lang.Throwable exception)
    Save the specified exception as a request attribute for later use.

    Parameters:
    pageContext - The PageContext for the current page
    exception - The exception to be saved

    selectApplication

    public static void selectApplication(java.lang.String prefix,
                                         javax.servlet.http.HttpServletRequest request,
                                         javax.servlet.ServletContext context)
    Deprecated. use selectModule(String,HttpServletRequest,ServletContext)

    Select the module to which the specified request belongs, and add corresponding request attributes to this request.

    Parameters:
    prefix - The module prefix of the desired module
    request - The servlet request we are processing
    context - The ServletContext for this web application

    selectModule

    public static void selectModule(java.lang.String prefix,
                                    javax.servlet.http.HttpServletRequest request,
                                    javax.servlet.ServletContext context)
    Select the module to which the specified request belongs, and add corresponding request attributes to this request.

    Parameters:
    prefix - The module prefix of the desired module
    request - The servlet request we are processing
    context - The ServletContext for this web application
    Since:
    struts 1.1

    selectApplication

    public static void selectApplication(javax.servlet.http.HttpServletRequest request,
                                         javax.servlet.ServletContext context)
    Deprecated. use selectModule(HttpServletRequest,ServletContext)

    Select the module to which the specified request belongs, and add corresponding request attributes to this request.

    Parameters:
    request - The servlet request we are processing
    context - The ServletContext for this web application

    selectModule

    public static void selectModule(javax.servlet.http.HttpServletRequest request,
                                    javax.servlet.ServletContext context)
    Select the module to which the specified request belongs, and add corresponding request attributes to this request.

    Parameters:
    request - The servlet request we are processing
    context - The ServletContext for this web application

    getModuleName

    public static java.lang.String getModuleName(javax.servlet.http.HttpServletRequest request,
                                                 javax.servlet.ServletContext context)
    Get the module name to which the specified request belong.

    Parameters:
    request - The servlet request we are processing
    context - The ServletContext for this web application
    Returns:
    The module prefix or ""

    getModuleName

    public static java.lang.String getModuleName(java.lang.String matchPath,
                                                 javax.servlet.ServletContext context)
    Get the module name to which the specified uri belong.

    Parameters:
    matchPath - The uri from which we want the module name.
    context - The ServletContext for this web application
    Returns:
    The module prefix or ""

    getRequestModuleConfig

    public static ModuleConfig getRequestModuleConfig(javax.servlet.http.HttpServletRequest request)
    Return the current ModuleConfig object stored in request, if it exists, null otherwise. This method can be used by plugin to retrieve the current module config object. If no moduleConfig is found, this means that the request haven't hit the server throught the struts servlet. The appropriate module config can be set and found with selectModule(HttpServletRequest, ServletContext) .

    Parameters:
    request - The servlet request we are processing
    Returns:
    the ModuleConfig object from request, or null if none is set in the request.
    Since:
    1.1

    getModuleConfig

    public static ModuleConfig getModuleConfig(javax.servlet.http.HttpServletRequest request,
                                               javax.servlet.ServletContext context)
    Return the ModuleConfig object is it exists, null otherwise.

    Parameters:
    request - The servlet request we are processing
    context - The ServletContext for this web application
    Returns:
    the ModuleConfig object
    Since:
    1.1

    getModuleConfig

    public static ModuleConfig getModuleConfig(javax.servlet.jsp.PageContext pageContext)
    Return the ModuleConfig object if it exists, null if otherwise.

    Parameters:
    pageContext - The page context.
    Returns:
    the ModuleConfig object
    Since:
    1.1

    getApplicationPrefixes

    public static java.lang.String[] getApplicationPrefixes(javax.servlet.ServletContext context)
    Deprecated. Use getModulePrefixes(ServletContext) instead.

    Return the list of module prefixes that are defined for this web application, creating it if necessary. NOTE - the "" prefix for the default module is not included in this list.

    Parameters:
    context - The ServletContext for this web application
    Returns:
    an array of module prefixes

    getModulePrefixes

    public static java.lang.String[] getModulePrefixes(javax.servlet.ServletContext context)
    Return the list of module prefixes that are defined for this web application, creating it if necessary. NOTE - the "" prefix for the default module is not included in this list.

    Parameters:
    context - The ServletContext for this web application
    Returns:
    an array of module prefixes
    Since:
    Struts 1.1

    getActionMessages

    public static ActionMessages getActionMessages(javax.servlet.jsp.PageContext pageContext,
                                                   java.lang.String paramName)
                                            throws javax.servlet.jsp.JspException
    Retrieves the value from request scope and if it isn't already an ActionMessages some classes are converted to one.

    Parameters:
    pageContext - The PageContext for the current page
    paramName - Key for parameter value
    Returns:
    ActionErros in page context.
    Throws:
    javax.servlet.jsp.JspException - if

    getActionErrors

    public static ActionErrors getActionErrors(javax.servlet.jsp.PageContext pageContext,
                                               java.lang.String paramName)
                                        throws javax.servlet.jsp.JspException
    Retrieves the value from request scope and if it isn't already an ErrorMessages some classes are converted to one.

    Parameters:
    pageContext - The PageContext for the current page
    paramName - Key for parameter value
    Returns:
    ActionErrors from request scope
    Throws:
    javax.servlet.jsp.JspException

    encodeURL

    public static java.lang.String encodeURL(java.lang.String url)
    Use the new URLEncoder.encode() method from java 1.4 if available, else use the old deprecated version. This method uses reflection to find the appropriate method; if the reflection operations throw exceptions, this will return the url encoded with the old URLEncoder.encode() method.

    Returns:
    String - the encoded url.

    isXhtml

    public static boolean isXhtml(javax.servlet.jsp.PageContext pageContext)
    Returns true if the custom tags are in XHTML mode.

    Since:
    Struts 1.1


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/ResponseUtils.html0000644000175000017500000003426410404045214030037 0ustar arnaudarnaud00000000000000 ResponseUtils (Apache Struts API Documentation)

    org.apache.struts.util
    Class ResponseUtils

    java.lang.Object
      |
      +--org.apache.struts.util.ResponseUtils
    

    public class ResponseUtils
    extends java.lang.Object

    General purpose utility methods related to generating a servlet response in the Struts controller framework.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:43:31 +0100 (Fri, 22 Aug 2003) $
    Author:
    Craig R. McClanahan

    Field Summary
    protected static MessageResources messages
              The message resources for this package.
     
    Constructor Summary
    ResponseUtils()
               
     
    Method Summary
    static java.lang.String filter(java.lang.String value)
              Filter the specified string for characters that are senstive to HTML interpreters, returning the string with these characters replaced by the corresponding character entities.
    static void write(javax.servlet.jsp.PageContext pageContext, java.lang.String text)
              Write the specified text as the response to the writer associated with this page.
    static void writePrevious(javax.servlet.jsp.PageContext pageContext, java.lang.String text)
              Write the specified text as the response to the writer associated with the body content for the tag within which we are currently nested.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    messages

    protected static MessageResources messages
    The message resources for this package.

    Constructor Detail

    ResponseUtils

    public ResponseUtils()
    Method Detail

    filter

    public static java.lang.String filter(java.lang.String value)
    Filter the specified string for characters that are senstive to HTML interpreters, returning the string with these characters replaced by the corresponding character entities.

    Parameters:
    value - The string to be filtered and returned

    write

    public static void write(javax.servlet.jsp.PageContext pageContext,
                             java.lang.String text)
                      throws javax.servlet.jsp.JspException
    Write the specified text as the response to the writer associated with this page. WARNING - If you are writing body content from the doAfterBody() method of a custom tag class that implements BodyTag, you should be calling writePrevious() instead.

    Parameters:
    pageContext - The PageContext object for this page
    text - The text to be written
    Throws:
    javax.servlet.jsp.JspException - if an input/output error occurs (already saved)

    writePrevious

    public static void writePrevious(javax.servlet.jsp.PageContext pageContext,
                                     java.lang.String text)
                              throws javax.servlet.jsp.JspException
    Write the specified text as the response to the writer associated with the body content for the tag within which we are currently nested.

    Parameters:
    pageContext - The PageContext object for this page
    text - The text to be written
    Throws:
    javax.servlet.jsp.JspException - if an input/output error occurs (already saved)


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/ServletContextWriter.html0000644000175000017500000010674410404045220031406 0ustar arnaudarnaud00000000000000 ServletContextWriter (Apache Struts API Documentation)

    org.apache.struts.util
    Class ServletContextWriter

    java.lang.Object
      |
      +--java.io.Writer
            |
            +--java.io.PrintWriter
                  |
                  +--org.apache.struts.util.ServletContextWriter
    

    public class ServletContextWriter
    extends java.io.PrintWriter

    A PrintWriter implementation that uses the logging facilities of a javax.servlet.ServletContext to output its results. Output will be buffered until a newline character is output, flush() is called, or until one of the println() methods is called. Along the way, carriage return characters are skipped.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:43:31 +0100 (Fri, 22 Aug 2003) $
    Author:
    Craig R. McClanahan

    Field Summary
    protected  java.lang.StringBuffer buffer
              The buffer into which we accumulate lines to be logged.
    protected  javax.servlet.ServletContext context
              The servlet context with which we are associated.
    protected  boolean error
              The error state for this stream.
     
    Fields inherited from class java.io.PrintWriter
    out
     
    Fields inherited from class java.io.Writer
    lock
     
    Constructor Summary
    ServletContextWriter(javax.servlet.ServletContext context)
              Construct a ServletContextWriter associated with the specified ServletContext instance.
     
    Method Summary
     boolean checkError()
              Flush the stream and check for its error state.
     void close()
              Close the stream.
     void flush()
              Flush the stream.
     void print(boolean b)
              Print a boolean value.
     void print(char c)
              Print a character value.
     void print(char[] c)
              Print a character array.
     void print(double d)
              Print a double value.
     void print(float f)
              Print a float value.
     void print(int i)
              Print an integer value.
     void print(long l)
              Print a long value.
     void print(java.lang.Object o)
              Print an object.
     void print(java.lang.String s)
              Print a String value.
     void println()
              Terminate the current line and flush the buffer.
     void println(boolean b)
              Print a boolean value and terminate the line.
     void println(char c)
              Print a character value and terminate the line.
     void println(char[] c)
              Print a character array and terminate the line.
     void println(double d)
              Print a double value and terminate the line.
     void println(float f)
              Print a float value and terminate the line.
     void println(int i)
              Print an integer value and terminate the line.
     void println(long l)
              Print a long value and terminate the line.
     void println(java.lang.Object o)
              Print an object and terminate the line.
     void println(java.lang.String s)
              Print a String value and terminate the line.
     void setError()
              Set the error state for this stream.
     void write(char c)
              Write a single character to this stream.
     void write(char[] buf)
              Write an array of charaters to this stream.
     void write(char[] buf, int off, int len)
              Write the specified subset of an array of characters to this stream.
     void write(int c)
              Write a single character to this stream.
     void write(java.lang.String s)
              Write a String to this stream.
     void write(java.lang.String s, int off, int len)
              Write the specified portion of a String to this stream.
     
    Methods inherited from class java.io.PrintWriter
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    buffer

    protected java.lang.StringBuffer buffer
    The buffer into which we accumulate lines to be logged.


    context

    protected javax.servlet.ServletContext context
    The servlet context with which we are associated.


    error

    protected boolean error
    The error state for this stream.

    Constructor Detail

    ServletContextWriter

    public ServletContextWriter(javax.servlet.ServletContext context)
    Construct a ServletContextWriter associated with the specified ServletContext instance.

    Parameters:
    context - The associated servlet context
    Method Detail

    checkError

    public boolean checkError()
    Flush the stream and check for its error state. IMPLEMENTATION NOTE - our associated servlet context gives no indication of problems with logging, so the only way this method will return true is if setError() is called.

    Overrides:
    checkError in class java.io.PrintWriter

    close

    public void close()
    Close the stream.

    Overrides:
    close in class java.io.PrintWriter

    flush

    public void flush()
    Flush the stream.

    Overrides:
    flush in class java.io.PrintWriter

    print

    public void print(boolean b)
    Print a boolean value.

    Overrides:
    print in class java.io.PrintWriter
    Parameters:
    b - The value to be printed

    print

    public void print(char c)
    Print a character value.

    Overrides:
    print in class java.io.PrintWriter
    Parameters:
    c - The value to be printed

    print

    public void print(char[] c)
    Print a character array.

    Overrides:
    print in class java.io.PrintWriter
    Parameters:
    c - The character array to be printed

    print

    public void print(double d)
    Print a double value.

    Overrides:
    print in class java.io.PrintWriter
    Parameters:
    d - The value to be printed

    print

    public void print(float f)
    Print a float value.

    Overrides:
    print in class java.io.PrintWriter
    Parameters:
    f - The value to be printed

    print

    public void print(int i)
    Print an integer value.

    Overrides:
    print in class java.io.PrintWriter
    Parameters:
    i - The value to be printed

    print

    public void print(long l)
    Print a long value.

    Overrides:
    print in class java.io.PrintWriter
    Parameters:
    l - The value to be printed

    print

    public void print(java.lang.Object o)
    Print an object.

    Overrides:
    print in class java.io.PrintWriter
    Parameters:
    o - The value to be printed

    print

    public void print(java.lang.String s)
    Print a String value.

    Overrides:
    print in class java.io.PrintWriter
    Parameters:
    s - The value to be printed

    println

    public void println()
    Terminate the current line and flush the buffer.

    Overrides:
    println in class java.io.PrintWriter

    println

    public void println(boolean b)
    Print a boolean value and terminate the line.

    Overrides:
    println in class java.io.PrintWriter
    Parameters:
    b - The value to be printed

    println

    public void println(char c)
    Print a character value and terminate the line.

    Overrides:
    println in class java.io.PrintWriter
    Parameters:
    c - The value to be printed

    println

    public void println(char[] c)
    Print a character array and terminate the line.

    Overrides:
    println in class java.io.PrintWriter
    Parameters:
    c - The character array to be printed

    println

    public void println(double d)
    Print a double value and terminate the line.

    Overrides:
    println in class java.io.PrintWriter
    Parameters:
    d - The value to be printed

    println

    public void println(float f)
    Print a float value and terminate the line.

    Overrides:
    println in class java.io.PrintWriter
    Parameters:
    f - The value to be printed

    println

    public void println(int i)
    Print an integer value and terminate the line.

    Overrides:
    println in class java.io.PrintWriter
    Parameters:
    i - The value to be printed

    println

    public void println(long l)
    Print a long value and terminate the line.

    Overrides:
    println in class java.io.PrintWriter
    Parameters:
    l - The value to be printed

    println

    public void println(java.lang.Object o)
    Print an object and terminate the line.

    Overrides:
    println in class java.io.PrintWriter
    Parameters:
    o - The value to be printed

    println

    public void println(java.lang.String s)
    Print a String value and terminate the line.

    Overrides:
    println in class java.io.PrintWriter
    Parameters:
    s - The value to be printed

    setError

    public void setError()
    Set the error state for this stream.

    Overrides:
    setError in class java.io.PrintWriter

    write

    public void write(char c)
    Write a single character to this stream.

    Parameters:
    c - The character to be written

    write

    public void write(int c)
    Write a single character to this stream.

    Overrides:
    write in class java.io.PrintWriter
    Parameters:
    c - The character to be written

    write

    public void write(char[] buf)
    Write an array of charaters to this stream.

    Overrides:
    write in class java.io.PrintWriter
    Parameters:
    buf - The character array to be written

    write

    public void write(char[] buf,
                      int off,
                      int len)
    Write the specified subset of an array of characters to this stream.

    Overrides:
    write in class java.io.PrintWriter
    Parameters:
    buf - The character array from which to write
    off - The zero-relative starting offset to write
    len - The number of characters to write

    write

    public void write(java.lang.String s)
    Write a String to this stream.

    Overrides:
    write in class java.io.PrintWriter
    Parameters:
    s - The string to be written

    write

    public void write(java.lang.String s,
                      int off,
                      int len)
    Write the specified portion of a String to this stream.

    Overrides:
    write in class java.io.PrintWriter
    Parameters:
    s - The String from which to write
    off - The zero-relative starting offset to write
    len - The number of characters to write


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/StrutsValidator.html0000644000175000017500000016233710404045242030376 0ustar arnaudarnaud00000000000000 StrutsValidator (Apache Struts API Documentation)

    org.apache.struts.util
    Class StrutsValidator

    java.lang.Object
      |
      +--org.apache.struts.util.StrutsValidator
    
    All Implemented Interfaces:
    java.io.Serializable

    Deprecated. As of Struts 1.1, replaced by FieldChecks

    public class StrutsValidator
    extends java.lang.Object
    implements java.io.Serializable

    This class contains the default validations that are used in the validator-rules.xml file.

    In general passin in a null or blank will return a null Object or a false boolean. However, nulls and blanks do not result in an error being added to the errors.

    Since:
    Struts 1.1
    Author:
    David Winterfeldt, James Turner
    See Also:
    Serialized Form

    Field Summary
    static java.lang.String FIELD_TEST_EQUAL
              Deprecated.  
    static java.lang.String FIELD_TEST_NOTNULL
              Deprecated.  
    static java.lang.String FIELD_TEST_NULL
              Deprecated. Commons Logging instance.
     
    Constructor Summary
    StrutsValidator()
              Deprecated.  
     
    Method Summary
    static java.lang.Byte validateByte(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
              Deprecated. As of Struts 1.1, replaced by FieldChecks.validateByte(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)
    static java.lang.Long validateCreditCard(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
              Deprecated. As of Struts 1.1, replaced by FieldChecks.validateCreditCard(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest) Translated to Java by Ted Husted (husted@apache.org ).
        Reference Sean M. Burke's script at http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl

    static java.util.Date validateDate(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
              Deprecated. As of Struts 1.1, replaced by FieldChecks.validateDate(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)
    static java.lang.Double validateDouble(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
              Deprecated. As of Struts 1.1, replaced by FieldChecks.validateDouble(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)
    static boolean validateEmail(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
              Deprecated. As of Struts 1.1, replaced by FieldChecks.validateEmail(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest) Based on a script by Sandeep V. Tamhankar (stamhankar@hotmail.com), http://javascript.internet.com

    static java.lang.Float validateFloat(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
              Deprecated. As of Struts 1.1, replaced by FieldChecks.validateFloat(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)
    static java.lang.Integer validateInteger(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
              Deprecated. As of Struts 1.1, replaced by FieldChecks.validateInteger(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)
    static java.lang.Long validateLong(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
              Deprecated. As of Struts 1.1, replaced by FieldChecks.validateLong(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)
    static boolean validateMask(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
              Deprecated. As of Struts 1.1, replaced by FieldChecks.validateMask(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)
    static boolean validateMaxLength(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
              Deprecated. As of Struts 1.1, replaced by FieldChecks.validateMaxLength(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)
    static boolean validateMinLength(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
              Deprecated. As of Struts 1.1, replaced by FieldChecks.validateMinLength(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)
    static boolean validateRange(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
              Deprecated. As of Struts 1.1, replaced by FieldChecks.validateIntRange(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)
    static boolean validateRequired(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
              Deprecated. As of Struts 1.1, replaced by FieldChecks.validateRequired(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)
    static java.lang.Short validateShort(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
              Deprecated. As of Struts 1.1, replaced by FieldChecks.validateShort(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    FIELD_TEST_NULL

    public static final java.lang.String FIELD_TEST_NULL
    Deprecated. 
    Commons Logging instance.

    See Also:
    Constant Field Values

    FIELD_TEST_NOTNULL

    public static final java.lang.String FIELD_TEST_NOTNULL
    Deprecated. 
    See Also:
    Constant Field Values

    FIELD_TEST_EQUAL

    public static final java.lang.String FIELD_TEST_EQUAL
    Deprecated. 
    See Also:
    Constant Field Values
    Constructor Detail

    StrutsValidator

    public StrutsValidator()
    Deprecated. 
    Method Detail

    validateRequired

    public static boolean validateRequired(java.lang.Object bean,
                                           org.apache.commons.validator.ValidatorAction va,
                                           org.apache.commons.validator.Field field,
                                           ActionErrors errors,
                                           javax.servlet.http.HttpServletRequest request)
    Deprecated. As of Struts 1.1, replaced by FieldChecks.validateRequired(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)

    Checks if the field isn't null and length of the field is greater than zero not including whitespace.

    Parameters:
    bean - The bean validation is being performed on.
    va - The ValidatorAction that is currently being performed.
    field - The Field object associated with the current field being validated.
    errors - The ActionErrors object to add errors to if any validation errors occur.
    request - Current request object.
    Returns:
    True if meets stated requirements, False otherwise

    validateMask

    public static boolean validateMask(java.lang.Object bean,
                                       org.apache.commons.validator.ValidatorAction va,
                                       org.apache.commons.validator.Field field,
                                       ActionErrors errors,
                                       javax.servlet.http.HttpServletRequest request)
    Deprecated. As of Struts 1.1, replaced by FieldChecks.validateMask(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)

    Checks if the field matches the regular expression in the field's mask attribute.

    Parameters:
    bean - The bean validation is being performed on.
    va - The ValidatorAction that is currently being performed.
    field - The Field object associated with the current field being validated.
    errors - The ActionErrors object to add errors to if any validation errors occur.
    request - Current request object.
    Returns:
    True if field matches mask, false otherwise.

    validateByte

    public static java.lang.Byte validateByte(java.lang.Object bean,
                                              org.apache.commons.validator.ValidatorAction va,
                                              org.apache.commons.validator.Field field,
                                              ActionErrors errors,
                                              javax.servlet.http.HttpServletRequest request)
    Deprecated. As of Struts 1.1, replaced by FieldChecks.validateByte(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)

    Checks if the field can safely be converted to a byte primitive.

    Parameters:
    bean - The bean validation is being performed on.
    va - The ValidatorAction that is currently being performed.
    field - The Field object associated with the current field being validated.
    errors - The ActionErrors object to add errors to if any validation errors occur.
    request - Current request object.
    Returns:
    A Byte if valid, a null otherwise.

    validateShort

    public static java.lang.Short validateShort(java.lang.Object bean,
                                                org.apache.commons.validator.ValidatorAction va,
                                                org.apache.commons.validator.Field field,
                                                ActionErrors errors,
                                                javax.servlet.http.HttpServletRequest request)
    Deprecated. As of Struts 1.1, replaced by FieldChecks.validateShort(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)

    Checks if the field can safely be converted to a short primitive.

    Parameters:
    bean - The bean validation is being performed on.
    va - The ValidatorAction that is currently being performed.
    field - The Field object associated with the current field being validated.
    errors - The ActionErrors object to add errors to if any validation errors occur.
    request - Current request object.
    Returns:
    A Short if valid, otherwise a null.

    validateInteger

    public static java.lang.Integer validateInteger(java.lang.Object bean,
                                                    org.apache.commons.validator.ValidatorAction va,
                                                    org.apache.commons.validator.Field field,
                                                    ActionErrors errors,
                                                    javax.servlet.http.HttpServletRequest request)
    Deprecated. As of Struts 1.1, replaced by FieldChecks.validateInteger(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)

    Checks if the field can safely be converted to an int primitive.

    Parameters:
    bean - The bean validation is being performed on.
    va - The ValidatorAction that is currently being performed.
    field - The Field object associated with the current field being validated.
    errors - The ActionErrors object to add errors to if any validation errors occur.
    request - Current request object.
    Returns:
    An Integer if valid, a null otherwise.

    validateLong

    public static java.lang.Long validateLong(java.lang.Object bean,
                                              org.apache.commons.validator.ValidatorAction va,
                                              org.apache.commons.validator.Field field,
                                              ActionErrors errors,
                                              javax.servlet.http.HttpServletRequest request)
    Deprecated. As of Struts 1.1, replaced by FieldChecks.validateLong(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)

    Checks if the field can safely be converted to a long primitive.

    Parameters:
    bean - The bean validation is being performed on.
    va - The ValidatorAction that is currently being performed.
    field - The Field object associated with the current field being validated.
    errors - The ActionErrors object to add errors to if any validation errors occur.
    request - Current request object.
    Returns:
    A Long if valid, a null otherwise.

    validateFloat

    public static java.lang.Float validateFloat(java.lang.Object bean,
                                                org.apache.commons.validator.ValidatorAction va,
                                                org.apache.commons.validator.Field field,
                                                ActionErrors errors,
                                                javax.servlet.http.HttpServletRequest request)
    Deprecated. As of Struts 1.1, replaced by FieldChecks.validateFloat(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)

    Checks if the field can safely be converted to a float primitive.

    Parameters:
    bean - The bean validation is being performed on.
    va - The ValidatorAction that is currently being performed.
    field - The Field object associated with the current field being validated.
    errors - The ActionErrors object to add errors to if any validation errors occur.
    request - Current request object.
    Returns:
    A Float if valid, a null otherwise.

    validateDouble

    public static java.lang.Double validateDouble(java.lang.Object bean,
                                                  org.apache.commons.validator.ValidatorAction va,
                                                  org.apache.commons.validator.Field field,
                                                  ActionErrors errors,
                                                  javax.servlet.http.HttpServletRequest request)
    Deprecated. As of Struts 1.1, replaced by FieldChecks.validateDouble(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)

    Checks if the field can safely be converted to a double primitive.

    Parameters:
    bean - The bean validation is being performed on.
    va - The ValidatorAction that is currently being performed.
    field - The Field object associated with the current field being validated.
    errors - The ActionErrors object to add errors to if any validation errors occur.
    request - Current request object.
    Returns:
    A Double if valid, a null otherwise.

    validateDate

    public static java.util.Date validateDate(java.lang.Object bean,
                                              org.apache.commons.validator.ValidatorAction va,
                                              org.apache.commons.validator.Field field,
                                              ActionErrors errors,
                                              javax.servlet.http.HttpServletRequest request)
    Deprecated. As of Struts 1.1, replaced by FieldChecks.validateDate(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)

    Checks if the field is a valid date. If the field has a datePattern variable, that will be used to format java.text.SimpleDateFormat. If the field has a datePatternStrict variable, that will be used to format java.text.SimpleDateFormat and the length will be checked so '2/12/1999' will not pass validation with the format 'MM/dd/yyyy' because the month isn't two digits. If no datePattern variable is specified, then the field gets the DateFormat.SHORT format for the locale. The setLenient method is set to false for all variations.

    Parameters:
    bean - The bean validation is being performed on.
    va - The ValidatorAction that is currently being performed.
    field - The Field object associated with the current field being validated.
    errors - The ActionErrors object to add errors to if any validation errors occur.
    request - Current request object.
    Returns:
    A Date if valid, a null if blank or invalid.

    validateRange

    public static boolean validateRange(java.lang.Object bean,
                                        org.apache.commons.validator.ValidatorAction va,
                                        org.apache.commons.validator.Field field,
                                        ActionErrors errors,
                                        javax.servlet.http.HttpServletRequest request)
    Deprecated. As of Struts 1.1, replaced by FieldChecks.validateIntRange(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)

    Checks if a fields value is within a range (min & max specified in the vars attribute).

    Parameters:
    bean - The bean validation is being performed on.
    va - The ValidatorAction that is currently being performed.
    field - The Field object associated with the current field being validated.
    errors - The ActionErrors object to add errors to if any validation errors occur.
    request - Current request object.
    Returns:
    True if in range, false otherwise.

    validateCreditCard

    public static java.lang.Long validateCreditCard(java.lang.Object bean,
                                                    org.apache.commons.validator.ValidatorAction va,
                                                    org.apache.commons.validator.Field field,
                                                    ActionErrors errors,
                                                    javax.servlet.http.HttpServletRequest request)
    Deprecated. As of Struts 1.1, replaced by FieldChecks.validateCreditCard(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest) Translated to Java by Ted Husted (husted@apache.org ).
        Reference Sean M. Burke's script at http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl

    Checks if the field is a valid credit card number.

    Parameters:
    bean - The bean validation is being performed on.
    va - The ValidatorAction that is currently being performed.
    field - The Field object associated with the current field being validated.
    errors - The ActionErrors object to add errors to if any validation errors occur.
    request - Current request object.
    Returns:
    The credit card as a Long, a null if invalid, blank, or null.

    validateEmail

    public static boolean validateEmail(java.lang.Object bean,
                                        org.apache.commons.validator.ValidatorAction va,
                                        org.apache.commons.validator.Field field,
                                        ActionErrors errors,
                                        javax.servlet.http.HttpServletRequest request)
    Deprecated. As of Struts 1.1, replaced by FieldChecks.validateEmail(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest) Based on a script by Sandeep V. Tamhankar (stamhankar@hotmail.com), http://javascript.internet.com

    Checks if a field has a valid e-mail address.

    Parameters:
    bean - The bean validation is being performed on.
    va - The ValidatorAction that is currently being performed.
    field - The Field object associated with the current field being validated.
    errors - The ActionErrors object to add errors to if any validation errors occur.
    request - Current request object.
    Returns:
    True if valid, false otherwise.

    validateMaxLength

    public static boolean validateMaxLength(java.lang.Object bean,
                                            org.apache.commons.validator.ValidatorAction va,
                                            org.apache.commons.validator.Field field,
                                            ActionErrors errors,
                                            javax.servlet.http.HttpServletRequest request)
    Deprecated. As of Struts 1.1, replaced by FieldChecks.validateMaxLength(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)

    Checks if the field's length is less than or equal to the maximum value. A Null will be considered an error.

    Parameters:
    bean - The bean validation is being performed on.
    va - The ValidatorAction that is currently being performed.
    field - The Field object associated with the current field being validated.
    errors - The ActionErrors object to add errors to if any validation errors occur.
    request - Current request object.
    Returns:
    True if stated conditions met.

    validateMinLength

    public static boolean validateMinLength(java.lang.Object bean,
                                            org.apache.commons.validator.ValidatorAction va,
                                            org.apache.commons.validator.Field field,
                                            ActionErrors errors,
                                            javax.servlet.http.HttpServletRequest request)
    Deprecated. As of Struts 1.1, replaced by FieldChecks.validateMinLength(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)

    Checks if the field's length is greater than or equal to the minimum value. A Null will be considered an error.

    Parameters:
    bean - The bean validation is being performed on.
    va - The ValidatorAction that is currently being performed.
    field - The Field object associated with the current field being validated.
    errors - The ActionErrors object to add errors to if any validation errors occur.
    request - Current request object.
    Returns:
    True if stated conditions met.


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/StrutsValidatorUtil.html0000644000175000017500000007317110404045216031232 0ustar arnaudarnaud00000000000000 StrutsValidatorUtil (Apache Struts API Documentation)

    org.apache.struts.util
    Class StrutsValidatorUtil

    java.lang.Object
      |
      +--org.apache.struts.util.StrutsValidatorUtil
    

    Deprecated. As of Struts 1.1, replaced by Resources

    public class StrutsValidatorUtil
    extends java.lang.Object

    This class helps provides some useful methods for retrieving objects from different scopes of the application.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:43:31 +0100 (Fri, 22 Aug 2003) $
    Author:
    David Winterfeldt, Eddie Bush

    Field Summary
    static java.lang.String ACTION_ERRORS_KEY
              Deprecated. Resources key the ActionErrors is stored under.
    static java.lang.String HTTP_SERVLET_REQUEST_KEY
              Deprecated. Resources key the HttpServletRequest is stored under.
    static java.lang.String SERVLET_CONTEXT_KEY
              Deprecated. Resources key the ServletContext is stored under.
     
    Constructor Summary
    StrutsValidatorUtil()
              Deprecated.  
     
    Method Summary
    static ActionError getActionError(javax.servlet.http.HttpServletRequest request, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field)
              Deprecated. As of Struts 1.1, replaced by Resources.getActionError(HttpServletRequest, ValidatorAction, Field)
    static java.lang.String[] getArgs(java.lang.String actionName, MessageResources messages, java.util.Locale locale, org.apache.commons.validator.Field field)
              Deprecated. As of Struts 1.1, replaced by Resources.getArgs(String,MessageResources,Locale,Field)
    static java.util.Locale getLocale(javax.servlet.http.HttpServletRequest request)
              Deprecated. Get the Locale of the current user.
    static java.lang.String getMessage(javax.servlet.http.HttpServletRequest request, java.lang.String key)
              Deprecated. Gets the Locale sensitive value based on the key passed in.
    static java.lang.String getMessage(MessageResources messages, java.util.Locale locale, java.lang.String key)
              Deprecated. Gets the Locale sensitive value based on the key passed in.
    static java.lang.String getMessage(MessageResources messages, java.util.Locale locale, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field)
              Deprecated. As of Struts 1.1, replaced by Resources.getMessage(MessageResources, Locale, ValidatorAction , Field)
    static MessageResources getMessageResources(javax.servlet.http.HttpServletRequest request)
              Deprecated. Retrieve MessageResources for the application module.
    static MessageResources getMessageResources(javax.servlet.ServletContext application)
              Deprecated. This method can only return the resources for the default module. Use getMessageResources(HttpServletRequest) to get the resources for the current application module.
    static org.apache.commons.validator.ValidatorResources getValidatorResources(javax.servlet.ServletContext application)
              Deprecated. In Struts 1.1 This method can only return the resources for the default module. Use getValidatorResources(HttpServletRequest, ServletContext) to get the resources for the current application module.
    static org.apache.commons.validator.ValidatorResources getValidatorResources(javax.servlet.ServletContext application, javax.servlet.http.HttpServletRequest request)
              Deprecated. Retrieve ValidatorResources for the current module.
    static org.apache.commons.validator.Validator initValidator(java.lang.String key, java.lang.Object bean, javax.servlet.ServletContext application, javax.servlet.http.HttpServletRequest request, ActionErrors errors, int page)
              Deprecated. As of Struts 1.1, replaced by Resources.initValidator(String,Object,ServletContext,HttpServletRequest,ActionErrors,int)
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    SERVLET_CONTEXT_KEY

    public static java.lang.String SERVLET_CONTEXT_KEY
    Deprecated. 
    Resources key the ServletContext is stored under.


    HTTP_SERVLET_REQUEST_KEY

    public static java.lang.String HTTP_SERVLET_REQUEST_KEY
    Deprecated. 
    Resources key the HttpServletRequest is stored under.


    ACTION_ERRORS_KEY

    public static java.lang.String ACTION_ERRORS_KEY
    Deprecated. 
    Resources key the ActionErrors is stored under.

    Constructor Detail

    StrutsValidatorUtil

    public StrutsValidatorUtil()
    Deprecated. 
    Method Detail

    getValidatorResources

    public static org.apache.commons.validator.ValidatorResources getValidatorResources(javax.servlet.ServletContext application)
    Deprecated. In Struts 1.1 This method can only return the resources for the default module. Use getValidatorResources(HttpServletRequest, ServletContext) to get the resources for the current application module.

    Retrieve ValidatorResources for the module.


    getValidatorResources

    public static org.apache.commons.validator.ValidatorResources getValidatorResources(javax.servlet.ServletContext application,
                                                                                        javax.servlet.http.HttpServletRequest request)
    Deprecated. 
    Retrieve ValidatorResources for the current module.


    getMessageResources

    public static MessageResources getMessageResources(javax.servlet.ServletContext application)
    Deprecated. This method can only return the resources for the default module. Use getMessageResources(HttpServletRequest) to get the resources for the current application module.

    Retrieve MessageResources for the application module.


    getMessageResources

    public static MessageResources getMessageResources(javax.servlet.http.HttpServletRequest request)
    Deprecated. 
    Retrieve MessageResources for the application module.


    getLocale

    public static java.util.Locale getLocale(javax.servlet.http.HttpServletRequest request)
    Deprecated. 
    Get the Locale of the current user.


    getMessage

    public static java.lang.String getMessage(MessageResources messages,
                                              java.util.Locale locale,
                                              java.lang.String key)
    Deprecated. 
    Gets the Locale sensitive value based on the key passed in.


    getMessage

    public static java.lang.String getMessage(javax.servlet.http.HttpServletRequest request,
                                              java.lang.String key)
    Deprecated. 
    Gets the Locale sensitive value based on the key passed in.


    getMessage

    public static java.lang.String getMessage(MessageResources messages,
                                              java.util.Locale locale,
                                              org.apache.commons.validator.ValidatorAction va,
                                              org.apache.commons.validator.Field field)
    Deprecated. As of Struts 1.1, replaced by Resources.getMessage(MessageResources, Locale, ValidatorAction , Field)

    Gets the locale sensitive message based on the ValidatorAction message and the Field's arg objects.


    getActionError

    public static ActionError getActionError(javax.servlet.http.HttpServletRequest request,
                                             org.apache.commons.validator.ValidatorAction va,
                                             org.apache.commons.validator.Field field)
    Deprecated. As of Struts 1.1, replaced by Resources.getActionError(HttpServletRequest, ValidatorAction, Field)

    Gets the ActionError based on the ValidatorAction message and the Field's arg objects.


    getArgs

    public static java.lang.String[] getArgs(java.lang.String actionName,
                                             MessageResources messages,
                                             java.util.Locale locale,
                                             org.apache.commons.validator.Field field)
    Deprecated. As of Struts 1.1, replaced by Resources.getArgs(String,MessageResources,Locale,Field)

    Gets the message arguments based on the current ValidatorAction and Field.


    initValidator

    public static org.apache.commons.validator.Validator initValidator(java.lang.String key,
                                                                       java.lang.Object bean,
                                                                       javax.servlet.ServletContext application,
                                                                       javax.servlet.http.HttpServletRequest request,
                                                                       ActionErrors errors,
                                                                       int page)
    Deprecated. As of Struts 1.1, replaced by Resources.initValidator(String,Object,ServletContext,HttpServletRequest,ActionErrors,int)

    Initialize the Validator to perform validation.

    Parameters:
    key - The key that the validation rules are under (the form elements name attribute).
    request - The current request object.
    errors - The object any errors will be stored in.


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/TokenProcessor.html0000644000175000017500000004431010404045226030174 0ustar arnaudarnaud00000000000000 TokenProcessor (Apache Struts API Documentation)

    org.apache.struts.util
    Class TokenProcessor

    java.lang.Object
      |
      +--org.apache.struts.util.TokenProcessor
    

    public class TokenProcessor
    extends java.lang.Object

    TokenProcessor is responsible for handling all token related functionality. The methods in this class are synchronized to protect token processing from multiple threads. Servlet containers are allowed to return a different HttpSession object for two threads accessing the same session so it is not possible to synchronize on the session.

    Since:
    Struts 1.1
    Author:
    Craig R. McClanahan, David Graham

    Field Summary
    private static TokenProcessor instance
              The singleton instance of this class.
     
    Constructor Summary
    protected TokenProcessor()
              Protected constructor for TokenProcessor.
     
    Method Summary
     java.lang.String generateToken(javax.servlet.http.HttpServletRequest request)
              Generate a new transaction token, to be used for enforcing a single request for a particular transaction.
    static TokenProcessor getInstance()
              Retrieves the singleton instance of this class.
     boolean isTokenValid(javax.servlet.http.HttpServletRequest request)
              Return true if there is a transaction token stored in the user's current session, and the value submitted as a request parameter with this action matches it.
     boolean isTokenValid(javax.servlet.http.HttpServletRequest request, boolean reset)
              Return true if there is a transaction token stored in the user's current session, and the value submitted as a request parameter with this action matches it.
     void resetToken(javax.servlet.http.HttpServletRequest request)
              Reset the saved transaction token in the user's session.
     void saveToken(javax.servlet.http.HttpServletRequest request)
              Save a new transaction token in the user's current session, creating a new session if necessary.
     java.lang.String toHex(byte[] buffer)
              Convert a byte array to a String of hexadecimal digits and return it.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    instance

    private static TokenProcessor instance
    The singleton instance of this class.

    Constructor Detail

    TokenProcessor

    protected TokenProcessor()
    Protected constructor for TokenProcessor. Use TokenProcessor.getInstance() to obtain a reference to the processor.

    Method Detail

    getInstance

    public static TokenProcessor getInstance()
    Retrieves the singleton instance of this class.


    isTokenValid

    public boolean isTokenValid(javax.servlet.http.HttpServletRequest request)
    Return true if there is a transaction token stored in the user's current session, and the value submitted as a request parameter with this action matches it. Returns false under any of the following circumstances:
    • No session associated with this request
    • No transaction token saved in the session
    • No transaction token included as a request parameter
    • The included transaction token value does not match the transaction token in the user's session

    Parameters:
    request - The servlet request we are processing

    isTokenValid

    public boolean isTokenValid(javax.servlet.http.HttpServletRequest request,
                                boolean reset)
    Return true if there is a transaction token stored in the user's current session, and the value submitted as a request parameter with this action matches it. Returns false
    • No session associated with this request
    • No transaction token saved in the session
    • No transaction token included as a request parameter
    • The included transaction token value does not match the transaction token in the user's session

    Parameters:
    request - The servlet request we are processing
    reset - Should we reset the token after checking it?

    resetToken

    public void resetToken(javax.servlet.http.HttpServletRequest request)
    Reset the saved transaction token in the user's session. This indicates that transactional token checking will not be needed on the next request that is submitted.

    Parameters:
    request - The servlet request we are processing

    saveToken

    public void saveToken(javax.servlet.http.HttpServletRequest request)
    Save a new transaction token in the user's current session, creating a new session if necessary.

    Parameters:
    request - The servlet request we are processing

    generateToken

    public java.lang.String generateToken(javax.servlet.http.HttpServletRequest request)
    Generate a new transaction token, to be used for enforcing a single request for a particular transaction.

    Parameters:
    request - The request we are processing

    toHex

    public java.lang.String toHex(byte[] buffer)
    Convert a byte array to a String of hexadecimal digits and return it.

    WARNING: This method is not part of TokenProcessor's public API. It's provided for backward compatibility only.

    Parameters:
    buffer - The byte array to be converted


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/package-frame.html0000644000175000017500000000475410404045204027703 0ustar arnaudarnaud00000000000000 org.apache.struts.util (Apache Struts API Documentation) org.apache.struts.util
    Classes 
    ErrorMessages
    GenericDataSource
    ImageButtonBean
    IteratorAdapter
    LabelValueBean
    MessageResources
    MessageResourcesFactory
    PropertyMessageResources
    PropertyMessageResourcesFactory
    RequestUtils
    ResponseUtils
    ServletContextWriter
    StrutsValidator
    StrutsValidatorUtil
    TokenProcessor
    Exceptions 
    AppException
    ModuleException
    libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/package-summary.html0000644000175000017500000006032710404045212030303 0ustar arnaudarnaud00000000000000 org.apache.struts.util (Apache Struts API Documentation)

    Package org.apache.struts.util

    The Utilities package provides a variety of families of classes, to solve problems that are commonly encountered in building web applications.

    See:
              Description

    Class Summary
    ErrorMessages Deprecated. Use org.apache.struts.action.ActionErrors instead
    GenericDataSource Deprecated. Use a BasicDataSource directly, or indirectly acquire a data source provided by your container
    ImageButtonBean A simple JavaBean to encapsulate the request parameters sent for an HTML input element of type image.
    IteratorAdapter Deprecated. Use commons-collections' IteratorUtils.asIterator(Enumeration).
    LabelValueBean A simple JavaBean to represent label-value pairs.
    MessageResources General purpose abstract class that describes an API for retrieving Locale-sensitive messages from underlying resource locations of an unspecified design, and optionally utilizing the MessageFormat class to produce internationalized messages with parametric replacement.
    MessageResourcesFactory Factory for MessageResources instances.
    PropertyMessageResources Concrete subclass of MessageResources that reads message keys and corresponding strings from named property resources in the same manner that java.util.PropertyResourceBundle does.
    PropertyMessageResourcesFactory Factory for PropertyMessageResources instances.
    RequestUtils General purpose utility methods related to processing a servlet request in the Struts controller framework.
    ResponseUtils General purpose utility methods related to generating a servlet response in the Struts controller framework.
    ServletContextWriter A PrintWriter implementation that uses the logging facilities of a javax.servlet.ServletContext to output its results.
    StrutsValidator Deprecated. As of Struts 1.1, replaced by FieldChecks
    StrutsValidatorUtil Deprecated. As of Struts 1.1, replaced by Resources
    TokenProcessor TokenProcessor is responsible for handling all token related functionality.
     

    Exception Summary
    AppException Deprecated. use ModuleException
    ModuleException Used for specialized exception handling.
     

    Package org.apache.struts.util Description

    The Utilities package provides a variety of families of classes, to solve problems that are commonly encountered in building web applications.


    Introduction

    The Struts Utilities Package offers several families of classes that assist in solving commonly encountered problems when building web applications. Most of the classes in this package do not rely on the controller servlet framework, or the custom tag libraries, so they are also suitable for general Java application programming. The following families are included:

    • Beans - A small set of utility beans useful for encapsulating form elements.
    • Servlet Utilities - A set of classes useful for working with servlet-related classes.
    • Message Resources - A family of classes that features access to internationalized message strings based on a message key coupled with a java.util.Locale object representing a particular user's preferred language.

    Beans

    The ImageButtonBean is a simple JavaBean to encapsulate the request parameters sent for an HTML input element of type image. The LabelValueBean is a simple JavaBean to represent label-value pairs, especially useful for html option elements.


    Servlet Utilities

    The RequestUtils is a general purpose utility methods related to processing a servlet request. The ResponseUtils is a general purpose utility methods related to generating a servlet response. The ServletContextWriter is a PrintWriter implementation that uses the logging facilities of a javax.servlet.ServletContext to output its results.


    Message Resources

    Background

    Modern applications often include the requirement to support multiple languages, for users who prefer to interact in a language other than the default language configured on the server platform. In addition, sentences often need to be constructed, with dynamic content whose placement in the message depends on the standard sentence structure in that particular language.

    The standard Java platform includes a family of classes (java.util.ResourceBundle) designed to support looking up message strings based on a standard "key". The resource bundle classes automatically access a Java class (or properties file) that is named with a naming convention that includes the Locale to which messages in that class (or file) pertain. However, this selection is based only on the default Locale of the server platform, and cannot be adjusted on a per-user basis as required for an internationalized web application.

    Struts includes a family of classes (org.apache.struts.util.MessageResources) that extends the basic approach to looking up message strings by key, allowing you to optionally specify a Locale along with the key. In this way, you can build applications that let your users select which Locale they wish to operate within, and then look up messages in that language - using the same message keys no matter what language is selected.

    In addition to supporting dynamic selection of a Locale for message lookup, the MessageResources family of classes optionally allow you to specify up to four parameter replacement objects, which are used to replace the parameter placeholders "{0}" through "{3}" in the retrieved message. This replacement uses the facilities of the standard Java java.text.MessageFormat class, which supports many extended formatting capabilities as well.

    For more information about internationalized messages, consult the following resources in your Java Development Kit documentation bundle:

    • Internationalization Info - General information on Java's standard support for internationalized applications can be found at <$JAVA_HOME/docs/guide/internat/index.html>. The "Internationalization Overview" section includes useful information about Locales, localized resources, message formatting, and other relevant topics.
    • Internationalization Tutorial - The Java Language Tutorial has a comprehensive trail covering internationalization, available at: http://java.sun.com/docs/books/tutorial/i18n/index.html.
    • Javadoc APIs - You will want to consult the Javadoc API documentation for the following standard Java classes:
      • java.text.MessageFormat
      • java.util.ResourceBundle
      • java.util.PropertyResourceBundle
      • java.util.Properties - See the documentation for the load() method for the valid syntax of properties files that you prepare.
    Using the Standard MessageResources Implementation

    The standard MessageResources implementation provided by the Struts library uses Java properties files to initialize message strings, in a manner very similar to that supported by the java.util.PropertyResourceBundle class. The following steps are required to use these facilities in your Java application.

    First, prepare a Java properties file for each language (or Locale) in which you wish to support your messages. The filenames you use must conform to the naming convention for property resource bundles, as described in the documentation referenced above. Be sure you use the same message keys in each file to identify the same message.

    For example, you might prepare files in French, Spanish, and English that contain language-specific versions of the word "Hello". The French file would be named Messages_fr.properties and contain the following:

        hi=Bonjour
    

    while the Spanish and English files would be named Messages_es.properties and Messages_en.properties respectively. The corresponding message string definitions would say hi=Hola and hi=Hello in these files.

    Second, place these properties files into the class path for your application, exactly as you would with class files themselves. The name actually used to load resources will look like a fully qualified Java class name (with appropriate package prefixes), so the file should be nested inside a directory structure that matches the packaging (either in an unpacked directory, or within a JAR file, as appropriate). For example, assume you place directory "foo" on your classpath, and stored the above properties files in directory "foo/com/mycompany/mypackage". (If you were using a JAR file like "foo.jar" instead, the files would be in directory "com/mycompany/mypackage" within the JAR file).

    Third, initialize a MessageResources object that corresponds to the set of properties files for a particular name, within a particular package. The easiest way to do this is to initialize a variable in your main application class, like this:

        public static MessageResources messages =
         MessageResources.getMessageResources("com.mycompany.mypackage.Messages");
    

    Note that the "com.mycompany.mypackage" part of the name matches the package directory into which you placed your properties files, and "Messages" is the filename prefix for the particular family of properties files supported by this MessageResources instance. Depending on your development process, you might find it convenient to store all message strings for an entire application in a single properties file family, or to have several families - in Struts, for example, there is a family of properties files for each Java package.

    To access a message string with a particular Locale, execute a statement like this:

        Locale locale = ... select the locale to be used ...
        String message = messages.getMessage(locale, "hi");
    

    In this case, the variable message will contain the message string corresponding to the key "hi", in the language that corresponds to the locale that was selected.

    For an example of message formatting with replaceable parameters, assume that the message strings looked like this, instead (only the English version is shown - corresponding changes would be made in the other files):

        hi=Hello {0}
    

    Now, you can personalize the retrieved message like this:

        Locale locale = ... select the locale to be used ...
        String name = "Joe";
        String message = messages.getMessage(locale, "hi", name);
    

    and the marker "{0}" will have been replaced by the specified name (Joe), no matter which language is in use. See the JavaDoc API documentation for the java.text.MessageFormat class for more advanced uses of the parameter replacement mechanism.

    Developing Your Own MessageResources Implementation

    In the above example, we were using the default MessageResources implementation supplied by Struts, which uses property files to store the message strings. It is also possible to create customized mechanisms to retrieve messages (such as loading them on demand from a database). The steps required are as follows:

    • Create a customized subclass of org.apache.struts.util.MessageResources that implements message lookup operations as you require.
    • Create a customized subclass of org.apache.struts.util.MessageResourcesFactory that will create an instance of your custom MessageResources class when the createResources method is called. Note that the "config" argument to this method can be used to select families of messages in any manner appropriate to your needs - you are not required to emulate the "fully qualified Java class name" approach that is used by the standard PropertyMessageResourcesFactory class.
    • Tell the MessageResourcesFactory class the name of the customized MessageResourcesFactory implementation to use when creating new factory instances.
    • Create a new factory instance.
    • Ask the new factory instance to create a MessageResources instance for you.

    A code example that illustrates this technique is:

        MessageResourcesFactory.setFactoryClass("com.mycompany.mypkg.MyFactory");
        MessageResourcesFactory factory = MessageResourcesFactory.createFactory();
        MessageResources resources =
         factory.createResources("configuration information");
    

    Once you have created your custom MessageResources instance, you utilize it to access message strings (with or without parameter replacement objects), exactly as we illustrated with the standard implementation in the previous section.

    Using MessageResources With Struts

    If your application uses the Struts controller servlet, you can optionally configure Struts to load an application-specific message resources instance for you, and make it available as a servlet context attribute (in JSP terms, an application-scope bean). This mechanism is managed by setting the following servlet initialization parameters in the web application deployment descriptor:

    • application - The configuration string that will be passed to the createResources() method of the message resources factory, in order to identify the family of resources to be supported. If you use the standard message resources factory, this must be the base fully qualified name of the property resources files used to contain these messages, as illustrated above.
    • factory - Fully qualified Java class name of the MessageResourcesFactory to be used. By default, the standard implementation provided by Struts (org.apache.struts.util.PropertyMessageResourcesFactory) will be used.

    Struts provides several JSP custom tags that assume the existence of a java.util.Locale attribute in the user's session, under the key named by the constant string value of Action.LOCALE_KEY. Your own application logic can set this attribute at any time, or you can ask Struts to set it automatically (if not already set) based on the Accept-Language HTTP header included with the request. There are two mechanisms by which you request Struts to perform this service:

    • To have this service performed on every request submitted to the controller servlet, set the servlet initialization parameter locale to the value true in the application deployment descriptor.
    • To have this service performed by a JSP page when it is accessed directly by a user, utilize a <form:html ... locale="true" ... /> tag at the top of each page.



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/package-tree.html0000644000175000017500000002074510404045172027552 0ustar arnaudarnaud00000000000000 org.apache.struts.util Class Hierarchy (Apache Struts API Documentation)

    Hierarchy For Package org.apache.struts.util

    Package Hierarchies:
    All Packages

    Class Hierarchy



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/util/package-use.html0000644000175000017500000004200310404045242027374 0ustar arnaudarnaud00000000000000 Uses of Package org.apache.struts.util (Apache Struts API Documentation)

    Uses of Package
    org.apache.struts.util

    Packages that use org.apache.struts.util
    org.apache.struts.action The action package is the core of the struts framework, providing the "Controller" aspect of a MVC model. 
    org.apache.struts.actions The actions package provides special adapters between the incoming HTTP request and the corresponding business logic. 
    org.apache.struts.config The "config" package contains configuration objects that correspond to elements that may be specified in the struts-config.xml module configuration file. 
    org.apache.struts.taglib.bean The "struts-bean" tag library contains JSP custom tags useful in defining new beans (in any desired scope) from a variety of possible sources, as well as a tag to render a particular bean (or bean property) to the output response. 
    org.apache.struts.taglib.html The "struts-html" tag library contains JSP custom tags useful in creating dynamic HTML user interfaces, including input forms. 
    org.apache.struts.taglib.logic The "struts-logic" 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. 
    org.apache.struts.util The Utilities package provides a variety of families of classes, to solve problems that are commonly encountered in building web applications. 
    org.apache.struts.validator The validator package provides a series of classes to validate ActionForm type of input. 
     

    Classes in org.apache.struts.util used by org.apache.struts.action
    MessageResources
              General purpose abstract class that describes an API for retrieving Locale-sensitive messages from underlying resource locations of an unspecified design, and optionally utilizing the MessageFormat class to produce internationalized messages with parametric replacement.
    TokenProcessor
              TokenProcessor is responsible for handling all token related functionality.
     

    Classes in org.apache.struts.util used by org.apache.struts.actions
    MessageResources
              General purpose abstract class that describes an API for retrieving Locale-sensitive messages from underlying resource locations of an unspecified design, and optionally utilizing the MessageFormat class to produce internationalized messages with parametric replacement.
     

    Classes in org.apache.struts.util used by org.apache.struts.config
    MessageResources
              General purpose abstract class that describes an API for retrieving Locale-sensitive messages from underlying resource locations of an unspecified design, and optionally utilizing the MessageFormat class to produce internationalized messages with parametric replacement.
     

    Classes in org.apache.struts.util used by org.apache.struts.taglib.bean
    MessageResources
              General purpose abstract class that describes an API for retrieving Locale-sensitive messages from underlying resource locations of an unspecified design, and optionally utilizing the MessageFormat class to produce internationalized messages with parametric replacement.
     

    Classes in org.apache.struts.util used by org.apache.struts.taglib.html
    MessageResources
              General purpose abstract class that describes an API for retrieving Locale-sensitive messages from underlying resource locations of an unspecified design, and optionally utilizing the MessageFormat class to produce internationalized messages with parametric replacement.
     

    Classes in org.apache.struts.util used by org.apache.struts.taglib.logic
    MessageResources
              General purpose abstract class that describes an API for retrieving Locale-sensitive messages from underlying resource locations of an unspecified design, and optionally utilizing the MessageFormat class to produce internationalized messages with parametric replacement.
     

    Classes in org.apache.struts.util used by org.apache.struts.util
    MessageResources
              General purpose abstract class that describes an API for retrieving Locale-sensitive messages from underlying resource locations of an unspecified design, and optionally utilizing the MessageFormat class to produce internationalized messages with parametric replacement.
    MessageResourcesFactory
              Factory for MessageResources instances.
    ModuleException
              Used for specialized exception handling.
    TokenProcessor
              TokenProcessor is responsible for handling all token related functionality.
     

    Classes in org.apache.struts.util used by org.apache.struts.validator
    MessageResources
              General purpose abstract class that describes an API for retrieving Locale-sensitive messages from underlying resource locations of an unspecified design, and optionally utilizing the MessageFormat class to produce internationalized messages with parametric replacement.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/validator/0000755000175000017500000000000010423130301025322 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/validator/class-use/0000755000175000017500000000000010423130301027221 5ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000015210423140533011315 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/validator/class-use/DynaValidatorActionForm.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/validator/class-use/DynaValidatorActionForm0000644000175000017500000001274410404045212033704 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.validator.DynaValidatorActionForm (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.validator.DynaValidatorActionForm

    No usage of org.apache.struts.validator.DynaValidatorActionForm



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/validator/class-use/DynaValidatorForm.html0000644000175000017500000001633610404045240033513 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.validator.DynaValidatorForm (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.validator.DynaValidatorForm

    Packages that use DynaValidatorForm
    org.apache.struts.validator The validator package provides a series of classes to validate ActionForm type of input. 
     

    Uses of DynaValidatorForm in org.apache.struts.validator
     

    Subclasses of DynaValidatorForm in org.apache.struts.validator
     class DynaValidatorActionForm
              This class extends DynaValidatorForm and provides basic field validation based on an XML file.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/validator/class-use/FieldChecks.html0000644000175000017500000001260410404045214032265 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.validator.FieldChecks (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.validator.FieldChecks

    No usage of org.apache.struts.validator.FieldChecks



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/validator/class-use/Resources.html0000644000175000017500000001256410404045242032101 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.validator.Resources (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.validator.Resources

    No usage of org.apache.struts.validator.Resources



    Copyright © 2000-2003 - Apache Software Foundation ././@LongLink0000644000175000017500000000014610423140533011320 Lustar 00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/validator/class-use/ValidatorActionForm.htmllibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/validator/class-use/ValidatorActionForm.htm0000644000175000017500000001270410404045244033660 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.validator.ValidatorActionForm (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.validator.ValidatorActionForm

    No usage of org.apache.struts.validator.ValidatorActionForm



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/validator/class-use/ValidatorForm.html0000644000175000017500000001623610404045246032704 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.validator.ValidatorForm (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.validator.ValidatorForm

    Packages that use ValidatorForm
    org.apache.struts.validator The validator package provides a series of classes to validate ActionForm type of input. 
     

    Uses of ValidatorForm in org.apache.struts.validator
     

    Subclasses of ValidatorForm in org.apache.struts.validator
     class ValidatorActionForm
              This class extends ValidatorForm and provides basic field validation based on an XML file.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/validator/class-use/ValidatorPlugIn.html0000644000175000017500000001264410404045240033170 0ustar arnaudarnaud00000000000000 Uses of Class org.apache.struts.validator.ValidatorPlugIn (Apache Struts API Documentation)

    Uses of Class
    org.apache.struts.validator.ValidatorPlugIn

    No usage of org.apache.struts.validator.ValidatorPlugIn



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/validator/doc-files/0000755000175000017500000000000010423130301027167 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/validator/doc-files/validatorUML.jpg0000644000175000017500000013440310404045226032253 0ustar arnaudarnaud00000000000000ÿØÿàJFIF,,ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ+"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ +?S×t}ÊþÖÕll<ìùk¸H·ãÆâ3ŒŽž¢¤Óum7Y·k/P´¾\£Ik2Ê¡° RFpAǸ  ”V4ð­ÕÄVöþ%ѦžW qßÄÌìN6I'ŒUÍO]ÑôO+û[U±°ó³åý®á"ߌgˆÎ2:zŠÐ¢©éº¶›¬ÛµÆ—¨Z_@®Q¤µ™ePØ©#8 ãÜV|4ð­ÕÄVöþ%ѦžW qßÄÌìN6I'ŒP埩ëº>‰åkj¶6v|¿µÜ$[ñŒãqÆGOQRiº¶›¬ÛµÆ—¨Z_@®Q¤µ™ePØ©#8 ãÜPÊ+xVêâ+{èÓO+„Ž8ïâfv'$“Æ*æ§®èú'•ý­ªØØyÙòþ×p‘oÆ3Äg=EhQTôÝ[MÖmÚãKÔ-/ W(ÒZ̲¨l‚T‘œqî+>xVêâ+{èÓO+„Ž8ïâfv'$“Æ(rŠÏÔõÝDò¿µµ[;>_Úî-øÆq¸Œã#§¨©4Ý[MÖmÚãKÔ-/ W(ÒZ̲¨l‚T‘œqî(å‡<+uq½¿‰ti§•ÂGwñ3;€ ’IãsS×t}ÊþÖÕll<ìùk¸H·ãÆâ3ŒŽž¢€4(ªzn­¦ë6íq¥ê—Ð+”i-fYT6Á*HÎ8÷Ÿ<+uq½¿‰ti§•ÂGwñ3;€ ’Iã¹Egêzî¢y_ÚÚ­‡Ÿ/íw üc8ÜFq‘ÓÔTšn­¦ë6íq¥ê—Ð+”i-fYT6Á*HÎ8÷rŠÃƒÆžº¸ŠÞßĺ4ÓÊá#Ž;ø™‰ÀÉ$ñй©ëº>‰åkj¶6v|¿µÜ$[ñŒãqÆGOQ@U=7VÓu›v¸Òõ KèÊ4–³,ªà•$g{ŠÏƒÆžº¸ŠÞßĺ4ÓÊá#Ž;ø™‰ÀÉ$ñŠÜ¢³õ=wGÑ<¯ímVÆÃÎÏ—ö»„‹~1œn#8Èéê*M7VÓu›v¸Òõ KèÊ4–³,ªà•$g{йEPEPEPEPEP\?‰þ-ø;²Ímu©ýªúÒÉ|×vÒ¤ðŠÀƒ•fc§#4þ2x¢ûÃÞŽÓF’A¬j× gj ߀yfpK‰Æ2)dð‡¼)ðâÃM’ö+DÖ¥EIu‚Xˆ!–7`yÞT´°î Ðü4wƒÿè®߈øíðÑÞÿ n¹ÿ~!ÿãµë²Ë™%`¨žÙ8þµEuÝ3ì‘\Í{ ¼rä)¸qHê>lgñI´·‹z$y‡ü4wƒÿè®߈øíðÑÞÿ n¹ÿ~!ÿãµëv÷6÷q m§ŠhÏGÃøŠ–î 4ìÏÿ†ŽðýuÏûñÿ£þ;Áÿô ×?ïÄ?üv½‚Šxÿü4wƒÿè®߈øíðÑÞÿ n¹ÿ~!ÿãµìPÿÃGx?þºçýø‡ÿŽÑÿ àÿúëŸ÷âþ;^ÁExÿü4wƒÿè®߈øíðÑÞÿ n¹ÿ~!ÿãµìPÿÃGx?þºçýø‡ÿŽÑÿ àÿúëŸ÷âþ;^ÁExÿü4wƒÿè®߈øíðÑÞÿ n¹ÿ~!ÿãµìPÿÃGx?þºçýø‡ÿŽÑÿ àÿúëŸ÷âþ;^ÁExÿü4wƒÿè®߈øíðÑÞÿ n¹ÿ~!ÿãµìPÿÃGx?þºçýø‡ÿŽÑÿ àÿúëŸ÷âþ;^ÁExÿü4wƒÿè®߈øíðÑÞÿ n¹ÿ~!ÿãµìŸ£jÚö2\ù>VË»›m»·gÉ™âÝœ»3ŽÙÇ=hËÿ᣼ÿ@ÝsþüCÿÇhÿ†ŽðýuÏûñÿ¯`¢€<þ;Áÿô ×?ïÄ?üvøhïÿÐ7\ÿ¿ÿñÚö (Çÿ᣼ÿ@ÝsþüCÿÇhÿ†ŽðýuÏûñÿ¯`¢€<þ;Áÿô ×?ïÄ?üvøhïÿÐ7\ÿ¿ÿñÚö (Çÿ᣼ÿ@ÝsþüCÿÇhÿ†ŽðýuÏûñÿ¯`¢€<þ;Áÿô ×?ïÄ?üvøhïÿÐ7\ÿ¿ÿñÚö (Çÿ᣼ÿ@ÝsþüCÿÇhÿ†ŽðýuÏûñÿ¯`¢€9? üIð§‹Ý ÒµXþØÈ­ö9ÁŠ\•,TáÈ s°°ëŒë+Ëþ'|1ÓµM÷_Ð,~Çâk_ô¸g²-ÌÊÅØm@wHrÄ0‹ù±]'Ão7‹ü¦ê³É^l0Ýíu'ÍC´–¥€·Çlë(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š§$6-¬ÛO!ûA-æH“ å3FdÂ瑹bÉÇtÏ7+æÆâOi—ëmaÓîá‘÷•ÞKb£y¿åî+b€ (¢€ (¢€ (¨ç‚«ymî"Žh%B’G"†WR0A‚㟦ëö:ÅÃ&˜Ò]Ûª7±.mÉÈRN’½›‚”!Šœ®½o­yñh’ùê"bš€„Éh¢€ÙQ/9ÈŒœl`ÅN2Zè?eóí^ö{Ý&xš6²¿?hÛž¸‘òì¤ܲꕵү4Ÿ?ì7óÝÛùMäÙßÌ_dWÒm'víþaämÚiÇÑüsd4=µ»è?¶u==/ÖÎÊÚGvFÁù"]îpó±Û+mжñvq®_ØÛki§Ã¨ò@ÑÉ¿$HWfЪ¤0b[q±¢è>$Ò¿áÝk¥Iý“¢K§É‹éù•´ÜýÓä&OQæ7`ßNÃÁZ÷ö3é7sé¶ð\ørâXç`Ñ,èª 29$ñ´®C€‚Oøn†+›ù-®f}‘Z\ÚÍ Ä‡i#l.Ø¥A †o”eˆ—ªxÞhüB–_èÐA­Äí{¥Ý1™&vÊ!P<¹6¡ 6ùFe"£µð¶¥k«i7v^ðÆ•½èžæ+ YY”C,YÜ!Pç’…ÆÏ¼|Ï“CQѵë{Yºµ{H-má‘ne*GwFÂ~ì:Êé½X²`0ð5?á(Ò³¾ÛçO·Íò<²Kö3¶y|ÍÛ~|mÎÏ›îóDÞ(Òa³¶¹O2Ünòâ·´–i¾S‡ÌH¥×ka[*6± pHËéž×ìd–ëȱó¢ÕF¥mš´÷>fm ³$“Iñ€wƒ†ÏÝšÐ×<5y¬Ë¥êúV‡ªÝZżµÕ´ÛéžMBÒâTd†evQî㨫•ñäzòÛ‚d¶¾·pËÎzð={öíŽý—ñKPÓãò-±¥ÄKäL·×e,7C R"*Ã÷2W¢>“¦Éoinú}£Adèö±´*VA„(1…*8cª?ì-þV?ñéöø÷Oø÷ÿž=?Õÿ³ÓÚ€3ü'}{ski¨É<—š}ßÙ¥iÖ=ÄùQÉÃG…uýæU¶FvL~‚¯ ÞÛÜEÐK©êi$r(eu7“‚<G­Ë =2Î;; H--cÎÈ`ŒF‹’IÂŽI'ñ¬ÿÈçþº—þ–Í@O¤ý³Rÿ„áߟ7öN·?Ûå—/çÙÛbH¼ØOHeóq*6.7p§|@ñ¥ß‡­µÆºòã¾ÓõYœNlÖ4xQÚ#k>sì(o ÁÏ#æ¯lIÓaÕ&Õ"ÓíP™6Kv°¨•׎ñ’>UàžÃÒ«§†´î.îDÓV{Ôtº‘mP4êç.ã,òAÎ{ÐÝëž,·ð§ƒîíuyï¦Ôâ—ñDmýÓÈWeµ£Øê¤³ÚÎr  #”Õ>"jvÈÚî›i{qÿ’H—Òi‘Ã)߈X‘óW'å c.»‚q^çu¡h÷Útuæ•cqcß&ÚktxãÚ6®Õ#1ÐQý…£ÿÐ*Çþ=>Ãÿéÿÿóǧú¿öz{P“ë1ñV—⫯Zë^o‘â .Ò;»»XÚ+˜]"¢•  ¡[¨ÝÓƒµý[VÖ$¶¿ñ< ý›­ê:x´–„Ú¤qª”9pÑîÉ1¨c#¹í ðÖƒko½¾‰¦ÃWê8ãµET˜ ÀãwZ’- G‚ño"Ò¬cºYdfKt$#†Æw0ÔãšÐ®_ưÜ]Á¥XÃu²;½Bd´ƒö´¯,lÇ“–\|ø œe¨¨ä‚ž–(Ýá}ñ3(%i\¯¡ÚÌ2;;Ð=rãìšíѾûpDÒËt"óLQ¯.ʽØ(ld0«”×ð¥Æá-&Öö?.ù-#7`°bg* ¬Ì3¹‹–%²rI99­°³’+¨¤´ã»ÏÚQ£M•wâù@^{:UŠ(¢Š(¢Š+Çÿgù'š‡ý…dÿÑQW°WþÎ?òO5û Éÿ¢¢ `¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(.}Jh¼U§éj±ùW7ÄÁ£x@çÄ­ž;î[ß[ÝÏw o’ÒQ ãi¢È=~WSǯ®j½å–u¨Åç¾Ûãi<1l£“ÉsšWir"ù‡*q‚3Î>ƒàètmkS¿ûMóù×b[u}NæQ³ÈŽ3æ+¹WmÊø-»nÀsRÕ´ÝÝn5MBÒÆp‹%ÔË–Á8ˆÀ'Æ‹[M³¸ŽÞëP´‚y4Hå™U™œ°@9%Š8¾Óކ²õ˜¯m¼C¦ë6ºtú„pZ\Ú¼ÏÈ ¯ ýã¢íKóg,¸dŒ?xf}Äé:4hñhV'SÊ+4°†sæ`ƒË(Ï•ÏEÈQ‰tPépkzlº€vCh—HÒ†\îÎFF8Á«jÚl:¤:\º…¢j&ø­eºóʦrGÊÜØúWø&úê+_Þ_é·ÉÒ¦‹¤ÎV‰%òÙÄí¾B–à‡d…~VÈ” éÞ “V‘¬´ûéíN¡gx"°ûC2Å$,Æs)YLß»`6»V!Ÿ½@¤:¶›szl Ô-%»Î`I•œ*¹ŽÐs€à©=ˆ#­Gk®è÷Útúž«cqcï:æ„xãÚ76æ‚sÐWé ÝΖÖVƒ¦Áok¬j× $Á>Ë>~×l‘Éáó—@FÒ¾Z 6p‚ÄzGˆ®µ N{‹ fPé¦Íš”–!ÜÚݴψ.Y[å,Îw2ŒPYyâë vÑæ·’ ­3Q–hÛRŽæ?"RHIlóþ©‡ 6HÀBë]Ñìtè5ÍVÆÞÆ}¾MÌבɸn]¬N@$c¨®oQµ¼Ôõéü'$q¦±öË•g·g@¶íK(ß‚á™Ø\…ˆ†Â xt-NQg}} ë* ¸Õ´³Ôc·¸"æåg÷Ç:©@ «)|îÆ¸zDóÃko-ÅıÃH^I$`ªŠI$ðæ±àñ~ƒu¬Øivš¥Ì÷öòÜ[´£«¬l†É$ïÆÿW'÷MS½ÓåÁqé–ú嬾ÉÖ·i•òÌL$8o,Œ4.óÃs—ý™¬E6“<úz„fËP‚òÐG•šhdjä#Jè»hØe'•FÜ:ˆ”G«i³j“iqj¨B›å´Y”Ê‹Ç,™È2òGqë\߃í5-6ÍÍÆ‹=¬"+kh-¦’ÞIàU, bD =¼aBäÈzH$¨9òiÞ Oér>ùìmµY®-¾Æ–i‘Ì‚E‰ÌŸ½V“9Œ…Aùh¤Ô<_ éÚ^¯~ڤ餡7‘Á:3ÆÃ !¸v`TŒž*âkmçOö˰Çißž· â6Þw°è±á2$7M¹SÎØît­bÿ\Õ¯‡†ä³ûBi—;„Ð=ínŒ¥ Ÿ4ÄQï”2ß´+°hºîŽútzŠê¶-c.ÿ.ä\!öfÃgŸ@­èjÇÚ~ѧ}«Nh.¼È¼Ësæâ9r2¿8 òž>`85ÁÍ¡^^x“MÕî|3$žfºoˆ”Û´–Q 4·ÿxF|ÔIŒ· Öç…ßR±Ñnc»Ð¯¡˜ÝßÝ,f[v,v•”Ì%ÀÉl6–¯¥ø¿Tº°Ñïït(#·Ö"f–wþtÌæQ•ãW(Œ3¼üÛGBXhi>1ÑõC«\ê6_è–÷7qIvŸèžrEœc;° =«/ÁÞ]ºUÍÞ©6­ed¨m'Ô}²ªl>R´­ä)p¯”+Ÿ]Äø*{´)ò÷Âði'¹…D³«`ÄÂQ³n쑇òÇ Ð5/è:5ÂÛêšÞ›c; uŽêé"b¹# 1gØÕ}7^šæÿY‡P·´³ƒO½ŽÎ)…Ù9× ¢…$KË;Ü]ÝÝêëZãÞØOk¨Zßj³[æË Ó²4ˆâ5 TBìÀ6,,kš5þ¥»DŽ美oYÞÀ’5« !`I—Œ¬. ¨#ö€zýž§gå…Üv²gdÐH$FÁ á‡øV]¬/޵k†ŠAé–H’;Y–[¢À„€ÊHí¸zÔ~Šö-kIJ]iÓÚÃs¨,ÖòHñ°™EÉÄOÌ ½ò„:Ÿ›âÝ'ÉÇÙ­ ¹ów}ï5æ]¸Çòsœó»¶9ТŠ(¢Š(¢Š(¢Š(¢Š(Çþ/ÿÉCøcÿaSÿ£mëÓ5/è:5ÂÛêšÞ›c; uŽêé"b¹# 1gØ×™ü_ÿ’‡ðÇþ§ÿFÛ×°P?ÿ ߃ÿèkÐÿðcÿGü'~ÿ¡¯CÿÁŒ?üUp÷¿£×éè {‡‡ MWQ»ÓßO¾±¼´Š)fŠí`Hd †VeoõdåI gp`¢ø?¶#°›O¾·Žy^ {¹‘V9åUfeQ»Ì$„3 R Ws§N4â£dŽ)IÉÝ•ÿá;ðý zþ aÿâ¨ÿ„ïÁÿô5èø1‡ÿЍôXëðÜ%–¥oÅ‘¾¶3[å®"P»Ê"rTº 7n7ŽjDñdΆëN¾´ÔSËòôù|¦š3~Í›äÅ'VB36ÕªÄðø?þ†½ÿ0ÿñTÂwàÿúô?üÃÿÅU}GÅw^h¶Öz=ô×¾|“Z@•cˆu°Ea#džfØÊkÑî’oé«d/í »¾ÓÒÝn®níÑBZÂÈ$ áÙX‡~Ä à`•—pŸðø?þ†½ÿ0ÿñTÂwàÿúô?üÃÿÅUÍs]¶Ðmí¤$–[«…µ¶‚6Ei¥`H@]•±ù˜g$‡sã°ëWñÝiwÃL‚ÒÂh¦K|ÈÍs3Dw™×o˰0)&G(Cþ¿ÿÐסÿàÆþ*øNüÿC^‡ÿƒøªx¢Ø[ÜË5¥Ü/m{mc4N²Ë8‡hùX‚ÚfÆxÎ>›ãá%¬RÓ.á¾¹½½†X„lí ¼¬®áD‡yEÚP³± QFhSþ¿ÿÐסÿàÆþ*øNüÿC^‡ÿƒøªÔ“R†-fÛKe“ϸ·šá´,m°<ç9•qÇcÓ¾<ž2¶M.U4ÝJ]5íþÙ%ÚÆ!·ä¬­¹Á`UKí@Î7*’“þ¿ÿÐסÿàÆþ*°ü'ãO Ûh÷ ?‰thœêwîïâRU®æe<·B¤{‚ j]ø§ìÚÕÕ´²ÁmgÜV~|ɲ, u39ÞȺ‡ÜH*Câ×—X´²L¾¶S׳«VÝ-¤jè• >ay#ýÛáCnU%7Xÿ„ïÁÿô5èø1‡ÿŠ£þ¿ÿÐסÿàÆþ*³õo]YØ·“ ß&£Ý”rYN`.!žo,8+.Ϙ¬ˆ¿6CXæµ-¼Qmum Z]­¥ã˜ìïØ'‘táð˜bøÚŽC Ár†]ÀÿÂwàÿúô?üÃÿÅQÿ ߃ÿèkÐÿðcÿW<=®Câ= VÚÖî k„W‡íQ„gR ä.IÆI=v’2¥XóúEÎ¥eðcK»ÑãŽ]BßB‚X"xZQ+,*Û6«)%±´`õ àô Ÿðø?þ†½ÿ0ÿñTÂwàÿúô?üÃÿÅW77ÄÅœxZ[!h¶ú”º¦©(-sö h£Üàª`ä¾cx ¤mcÀ’‹º%ž™5íîªÛlÓàÔã…㉞{id«®Ù Œ3.C<ô<ÐAÿ ߃ÿèkÐÿðcÿGü'~ÿ¡¯CÿÁŒ?üUgê?­tÍF×K—EÕ_WžÒKÏì輆™bBGüõÚìv± ;aN@ªrüJ±´ÖõK9Òîc Å…­¥ªYyRÉ-ÒTÝ$€g“½bÛ‚ã@Ÿðø?þ†½ÿ0ÿñTÂwàÿúô?üÃÿÅV<´yo,¬cÓõW¿º»º±û"BŒñ\[€^6!öó¹pÀ”Ë2€HÔðç,|RlßM²Ô¥Õ‘¼KÉ-öÀ¤HchKgýh`~Q‘H  ?á;ðý zþ aÿâ¨ÿ„ïÁÿô5èø1‡ÿŠ®‚«ß]}ŠÎKo=Ã.Ãnwb@v$rHQÔ þ¿ÿÐסÿàÆþ*øNüÿC^‡ÿƒøª¹á½JmgÃZn«:Æ}n—B4¬ƒr¦Iäª q’ Â翇õɵ˭Y¬–¶öw msÆVWÌI/˜Ã?(e•0„]§v Ú n­¦ë6íq¥ê—Ð+”i-fYT6Á*HÎ8÷å³ü“ÍCþ²訫Ø+Çÿgù'š‡ý…dÿÑQP°QEQEQEQEQEQEQEQEQEQE¨i7—!Ó5k;Ø û$S[ÍÖÆ_69&m¤:ìoÜ€ >nœUNb_+û&úÆ×ó>×f÷ºceLwëœätÇ:P=6=J+v]RîÒæ}ä«ÚÛ4 ‚­#’sžsÜqÇ9ðZø©n"kgF’àÈ‘é2£2çÜ;àãÐÖåÏÜøsìÚ‹j>ƒCÓo¦ßö«™t¯6I·ßy$Œõ9ÎN:cM6=J+v]RîÒæ}ä«ÚÛ4 ‚­#’sžsÜqÇ7( _Fðþ±¢l‚ÎçÖ¶&Q$ÐXèoo¿ lp@bˆ=­Nb_+û&úÆ×ó>×f÷ºceLwëœätÇ:P=6=J+v]RîÒæ}ä«ÚÛ4 ‚­#’sžsÜqÇ9ðZø©n"kgF’àÈ‘é2£2çÜ;àãÐÖ埩ìKådßXÚã>gÚìÞãwLcl©ŽýsœŽ˜æM6=J+v]RîÒæ}ä«ÚÛ4 ‚­#’sžsÜqÇ7( ?U¸ñ†ö(ÓWÐ縼»ŽÚ(¿²&\ç,ퟴãåd|»6ŽH­oukN·›N¹±Ó.ãÌwö—–¯rÐM…&<¬‘ôÎw`‡VV_”‚pôŸxVïYÔ5›¿èÑíeg·ñ1± ø-Á’@[ á£H2(¾ñ§…tÍf-VÏĺ4\º[ßÛC.ÌÈ‘ÏØÊñ˜ÎI>R)ì4Øõ(­ÙuK»K™÷’¯klÐ(\ ´ŽIÎyÏqÇçÁk⥸‰®5Hƒ"G¤ÊŒËž@cr@8ïƒC[”P~§±/•ý“}ckŒùŸk³{Ý1²¦;õÎr:c™4Øõ(­ÙuK»K™÷’¯klÐ(\ ´ŽIÎyÏqÇÜ¢€0àµñRÜD×Î$Á‘#ÒeFeÏ 1¹ wÁÇ¡«šœ:ľWöMõ®3æ}®Íî7tÆ6ʘï×9ÈéŽt(  zlz”V캥ݥÌûÉWµ¶h.ZG$ç<ç¸ãŽsàµñRÜD×Î$Á‘#ÒeFeÏ 1¹ wÁÇ¡­Ê(Ÿ×¼9ý©¨Ùê6°hk}oÒçPÒ¾Õ"àîMŒ$B˜;~O辶ǩEn˪]Ú\ϼ•{[fBàpU¤rNsÎ{Ž8æå‡¯Š–â&¸Öti  ‰“*3.yÉã¾= hG¦Ã³sª+IçÜ[ÃnêHÚ6‘”Ž3œÊÙç°éÞåQEQEQEQEQEãÿÿä¡ü1ÿ°©ÿѶõìãÿÿä¡ü1ÿ°©ÿѶõéš—†´fán5MM¾P"Éuj’°\“€XŒ’qîh@øw£éŽ©¨ÞZØê7ך¬º”73Y'™m¼†TV9?)‚1Éè+.ïáŒ× :‚ëqù ®Ã­¸šÌÉpÍÂÃçy€y@ 6| ÷ïÏÿjxVÕµ+χ>‹AÒµ‰4«ËÄŠ'–=¬Måy#)¹¬XdàWIyÃÁmqáí)Y¥hEЋE$ bIEL«.Å%‹¸ÝÅíGNð¼Þ‡Ä»tO²^[C±_0ùå¶´®XïÙ¼à '㊧Âm4½CNÓõ™,-õ ÁknÍqK‚wpw+F03däæ«èz—ÃM_Ãö¬žÓmN¡q46¶ŸØ¢iåòËe•#Œ–@,W*¤í-‘[U§Ã röÞÏLѼ?s=Å—ÛâTÓ ý›³³†Ê•'p ä P§ðÇQ·žãX·¹‚êøê}ä6ÖKodFcy°êCWÌ ÀC_FøS{{Ôuw/“[¾¿†ßT¶Žñ$ŠuTýüq²§™˜ÕÆÆÚ=;/  àÿú4?üCÿÄÖ^«á=ÞâÞ×Kð‡îç•F{‹T†ÕJŒXœï%ÆÕÛÈW9p@4<9á½CÃæÎ¬Ç6›‘…¬ãÓá·V¸2i‡–Q‚W`îI9'¤¯/aàûMoLð‡>™ih—wÏ=¬1I´+>ÈÐFÁ互 *å”?6ÝÍ_Ã>±{KKø~ïP»vÃ%¤Q U]ÎîÂ6*ƒ…ÈSó:)Æì€ ‹ýúMfMGMÔã²{›xí®·Ûy­²6‘”Äwû×å•ÇÝùx!±ïü*Úfu•m%Ön,ÞÚ$eó-¢¶Xü˜×Ìp$A,{Ê—N%†Ý÷«Á£x6¼Yð‡ìo,Ò9&Š(çFI–#Ã9fV@»CRTµv‡áàÖll‡…taoseqx×¥*G…•Yd&d¤·6siVº™ÔôRZi~MºbÜÁ嘄›™v¼­ÃÉõ9,þCe ÜÞÑ¢In>ʑˣ—ÎØ\Fb1ïÊ2ª@-¹vçræÆ«á=ÞâÞ×Kð‡îç•F{‹T†ÕJŒXœï%ÆÕÛÈW9p@6'Ю世î=ZAxša²³¹’f‚F9’bË„íÀÊ㈬3ðËG]LÏøA<ÿB¦‡ÿ‚èøš?áðý šþ ¡ÿâhIø}ý‘sÝ´ÚU½Òê«'Øô¿"&Œ[5¿’HHáÝÃn 3“´äæÂø.óû=)õ­°ØZ=¶“$æ9-˜ÂЬ²0sæH¨Ä ¾Zå˜íÎÝšð‚x?þ…MÿÐÿñ4 àÿú4?üCÿÄÐäCko½¼QÃH8ãPªŠpb°ü ÿ$óÃ_ö µÿÑKGü žÿ¡SCÿÁt?üMð‚x?þ…MÿÐÿñ4Íè_ ¬tƒ­E6¡$ö—¶Ré¶qÇ–Ö6’É$bÍæÒ¹†~_CŠÏƒb_ ^hͩ鰬 ³IìôXácåÈ’4’¶òò;yjΫßi=;OøA<ÿB¦‡ÿ‚èøš?áðý šþ ¡ÿâh/Çžo"Ä÷Ö‘Áöw‡ËºÓÖs–R%‰Õ‘Ñþ\¸«^¹Ë¸øQæjw:ŒzüítnôÛËi.¡óJÉgŒŽàeÞ“‡=Íuð‚x?þ…MÿÐÿñ4 àÿú4?üCÿÄÐ?¤ü2þÍñ›®I«ù×Vú†¡¨\¢ÛlI¤ºEBo%BŽ ryävÐðOƒuXØé¿ÛÿlÓ-m$‹ì¿cX÷LÓ4žnýņ¶mÎ8Íh àÿú4?üCÿÄÑÿ'ƒÿèTÐÿð]ÿ@SÕ¬æÔtkë+{¹,縷’(îcÎèY”€ã‚sÔtê+/þOÿЩ¡ÿàºþ&øA<ÿB¦‡ÿ‚èøšØ†Ûì¿g‚Õ`‚ÆŒb‹q´&Ò  qÜ`Œ`×Ò4Ïì¸.U¦ó渻šæIŠá›{’ªy9Ø›#û¨£€ÿð‚x?þ…MÿÐÿñ4 àÿú4?üCÿÄÐA^?û8ÿÉ<Ô?ì+'þŠŠ½SMÒtÝÝ­ô½>ÒÆrí¬+–À!@À>¼¯öqÿ’y¨ØVOý{Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ÿŽÿäžx—þÁW_ú)« ®ÇòOûEß‹­ôû=Mô»N]nçìðΧ9%Õ *• –"ºOì¯ ÿldoßiÿÏ—ü$×~wÝÝ÷<ýßwž9 NÓán³a¥øZÝn-.Ã×ªŠ—ÓÚ¨gÉæÆ¥âpp ÀŒüÝ«°ð~…¬øjÖÃIh´h´x,˜¼vž~õºiK¦Flŵ$î'œÀŽ×Jðö£>g¯ß\_A»Î¶‡Ä×o${NÖÜ¢|ŒÏCUá‡Áw7øªy-mvý¢dñUÉH·.æárxë@Ås~%³×µ ˆ-¬ìôÛ#a7PÜÞ¼ pÙál. Xå‡ñäò†WÃßàßµlþÞ¾û'Ù>×öïøJæòvù¾V?ãçwßãvݹãvî*=jïÀºBמ!Ô‰–ôX…ÄwlR]Ê?ïðäãhÇrÐñƒe×õI£šÞÐé·o\¸»™ "í ¯n?u+°]¢bU*3“¹«i÷¨Újúh‚KëX¥·\ÈcŽXå1–ùÕX«v°Àa˜2ói„–Þîâ÷XÔ¬ ¶½{’ëÅ3…iTg­Éã'kaÆTU‰¬¼lçñ-ÜHmÖè3ø¢éA…˜*ÉÌÿp±7BH$¾Ö'¾‹_‘,[YŠí%K_´8„BËÅæùyàÏ,»¼¼å¶t«xoXÔuF¹y,fÙidbvg\ùo.9vÆ b<µÊ¾ÑV!ðç‡î/.láÕuY.­vý¢ñáx· ®åer9ëV?á Òÿçë\ÿÁíïÿ  ½Oúö¤N N› ü×m=¿šïÃk#Ï,›A.òʨÜ+ËÇ«xKSÖgX¹òSIb"ÎÚþh#òãIÑWí(¢@Ù¹w,¦Þ®v?á Òÿçë\ÿÁíïÿ£þÝ/þ~µÏüÞÿñꧤxN[ ý:âSHÞâòá ÔÓ·ÚÙ(˜I),á!óc$Cl±â[={P¸‚ÚÎÏM¹Ò6u ÍëÀ× ž¶ÂàÅŽX@?(ey?á Òÿçë\ÿÁíïÿ£þÝ/þ~µÏüÞÿñê§áÝJæëX²Chtjá&¼•¥a*F"Š)!XÂფXß½Jù¤”‹êBdÓ® ¡ÑâÔåÔŒ‹+gf™çHÙ6€%umÁÎï(¸rÏøCt¿ùú×?ð{{ÿǨÿ„7KÿŸ­sÿ·¿üz€#Ðìõïí››ýzÏM:2C-µëËäǸ#BA}ij(ãhEN’¹ÿøCt¿ùú×?ð{{ÿǨÿ„7KÿŸ­sÿ·¿üz€: +Ÿÿ„7KÿŸ­sÿ·¿üzøCt¿ùú×?ð{{ÿǨ ¢¹ÿøCt¿ùú×?ð{{ÿǨÿ„7KÿŸ­sÿ·¿üz€: +Ÿÿ„7KÿŸ­sÿ·¿üzøCt¿ùú×?ð{{ÿǨ ¢¹ÿøCt¿ùú×?ð{{ÿǨÿ„7KÿŸ­sÿ·¿üz€: +Ÿÿ„7KÿŸ­sÿ·¿üzøCt¿ùú×?ð{{ÿǨ ¢¹ÿøCt¿ùú×?ð{{ÿǨÿ„7KÿŸ­sÿ·¿üz€: +Ÿÿ„7KÿŸ­sÿ·¿üzøCt¿ùú×?ð{{ÿǨ ¢¹ÿøCt¿ùú×?ð{{ÿǨÿ„7KÿŸ­sÿ·¿üz€: +Ÿÿ„7KÿŸ­sÿ·¿üzøCt¿ùú×?ð{{ÿǨ ¢¹ÿøCt¿ùú×?ð{{ÿǨÿ„7KÿŸ­sÿ·¿üz€: ñÿÙÇþIæ¡ÿaY?ôTUêšn™•nÐ[ÉvèÎ\›«¹n8†‘˜ÇL㯩¯+ýœäžjö“ÿEE@ÁEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP?ã¿ù'ž%ÿ°U×þŠjè+Ÿñßü“ÏÿØ*ëÿE5tQEQEQEQEQEQEQEQEQEQEQEãÿÿä¡ü1ÿ°©ÿѶõìÃüXðuǼ 5…7öò­Õª²:‚ ’GufÇO›nH¬?ügÑux4ŸO&‘¯[ †èߨŠ9%PÁÎì‡åÉV ‚ÛFh>ø“PÑ ðRϪêú–m Ð òUI"@¾÷ÊÜ>P­¸?Ë^‘à ÿÂ#à½/C2y’ZÅû× db]öœ—s623Œgšè(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šçüwÿ$óÄ¿ö ºÿÑM]sþ;ÿ’yâ_û]覮‚€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ Ã×üáÏ£.µ£Ú]¹@žs&ÙUCnd\:Œç€GSêkrŠóÿøR_?è^ÿÉÛþ9Gü)/‡Ÿô/äíÇÿ¯@¢€<ÿþ—ÃÏú¿òvãÿŽQÿ Káçý ßù;qÿÇ+Ð( ?ÿ…%ðóþ…ïü¸ÿã”Â’øyÿB÷þNÜñÊô (ÏÿáI|<ÿ¡{ÿ'n?øåð¤¾нÿ“·ür½ŠóÿøR_?è^ÿÉÛþ9Gü)/‡Ÿô/äíÇÿ¯@¢€<ÿþ—ÃÏú¿òvãÿŽQÿ Káçý ßù;qÿÇ+Ð( ?ÿ…%ðóþ…ïü¸ÿã”Â’øyÿB÷þNÜñÊô (ÏÿáI|<ÿ¡{ÿ'n?øåð¤¾нÿ“·ür½ŠóÿøR_?è^ÿÉÛþ9Gü)/‡Ÿô/äíÇÿ¯@¢€<ÿþ—ÃÏú¿òvãÿŽQÿ Káçý ßù;qÿÇ+Ð( ?ÿ…%ðóþ…ïü¸ÿã”Â’øyÿB÷þNÜñÊô (ÏÿáI|<ÿ¡{ÿ'n?øåð¤¾нÿ“·ür½ŠóÿøR_?è^ÿÉÛþ9Gü)/‡Ÿô/äíÇÿ¯@¢€<ÿþ—ÃÏú¿òvãÿŽQÿ Káçý ßù;qÿÇ+Ð( ?ÿ…%ðóþ…ïü¸ÿã”Â’øyÿB÷þNÜñÊô (ÏÿáI|<ÿ¡{ÿ'n?øåð¤¾нÿ“·ür½ŠóÿøR_?è^ÿÉÛþ9Gü)/‡Ÿô/äíÇÿ¯@¢€<ÿþ—ÃÏú¿òvãÿŽQÿ Káçý ßù;qÿÇ+Ð( ?ÿ…%ðóþ…ïü¸ÿã”Â’øyÿB÷þNÜñÊô (/DðÞ‹áË#FÒí,P¢#˜b Ò]íÕÈÉå‰<ŸZÔ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šçüwÿ$óÄ¿ö ºÿÑM]sþ;ÿ’yâ_û]覮‚€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€<ÿIÐ<'ÿþ­­ëz•7“¨js\ÝOb’¾Ä»Ÿ$¥Ž}úbºøA<ÿB¦‡ÿ‚èøšçdž‡‰ü«Y$ÓÅt÷zÄVåo&†=ïu8bÆ@uÎ8`ÜgŽN{M7LƒJ·h-ä»tg.MÕÜ· œÃHÌ@ã¦q×ÔЇá³?ˆb¼ðO…,ÿ²¾h^TŒ,Ñ”.²¹0.>ªXo’AÎÎdÑôÞ[é°êžðÆ™­_[‹…ÒžZuR ÆÖEb@?/0ç­OxzãSÔc6Ͷ×QˆXjÃî¶RdNFAš/—ý'~v+Å:wˆ$Õ¤k->ú{S¨YÞ¬>ÆÌ±I 1œÊVS7îØ ¤.ÕˆgïPš‰á-j($x~Íä{´ki­à3©‚'îªûØRT ÙÍWµ‡áÕÍþ‹K²··uFŠÔÁ0•äO•€ Ñä‚[#Ùká½oQ{ØÃSØM{§ëVm{q-±Qö«:æ9ʨÜÃ?‚Mh]iÞ#¸ñEöµkáϰAq©i#–Õõ ñ‹„,Šû¡bERÌç÷\Xí@ ìχ ®iúDz‡$ºÔ-òÛe¥¹F»pG;ƒ¸ŽsòÕˆ´/‡}»ÊÒ¼)'ö~~Û¶ÞÜý›Ï™ÇÉ­×túV_†´ïØêDÓè÷»}R)廸· âî)ÖFò˜‚J+Œ*ýñŒ*Ã>ÿÂúÅ烓J—A’itßM¤"¼ºü€’Å—á /—ØÃå“.^iž—Ä1i:‚ü©f)ÚY]£É’d‚@øaçFpNzä Çn¾û\j> ðþnmîž{Ûˆ-–å·¸KwX¨$ol†`¹xÉ!v/ôFÔ¼KáõþÆÔ¬ô»m2x™­/VÔ[;˜JD|™C¢.åÉLg­øjîæài:N™"YÉ¡j6?ly“ËI® d c+cb͵‰. $– A¼5ðù^õDðÀ{x¦Öß6êT°2qò œœp3XzŒ:gÚ¼9áßëR-ݵ´±ÇäŸ ²Føù˜p@à1ŒüBÚã\êz¼ú –Öó&“ ¢=ÔM9¸Žø” Švct€‘æT(Þ¥˜Ç#iO¦_[&ú}~]VÃS½µU·„’Höº;¨R–Œ¸23oªF7†¾-úX6‰áxîÈ–æÖßÌfTÀ.2HVV#°`z§âO øoLÓìï,hþ(e`™ÆKíê¼t¯#»Ö¦‹Á×wxŠîóáÉçÖ^—k]@y>\e\°¶vfhõ‹´Ñ?áÕ?ès×?ïÍ—ÿ#Ñÿö©ÿCž¹ÿ~l¿ù¹j^‡ýŽ.u›ëÍ6ú)îIMkìò\Ëû²¬Í,H# Ïû´u\È ÆB’º‘κ_Ã{{i5Y/®â²¶{››}Aœ¸‘€išvÜé0™@ÊÆ¬S5?áÕ?ès×?ïÍ—ÿ#Ñÿö©ÿCž¹ÿ~l¿ù¼îÛÄ+vöÐKây ÓíuÓm2麫^(¶{“/pWÍ)æ,¿9 'ÏÈò•×¼GscáÙ.¿´dŽ{k{¹´Éï5wµIQg˜@Ѐ§í¯å¤D‰ ŽOšÄ€z'ü#Ú§ýzçýù²ÿäz§¥ÙË­X-þ›ãÍfêÑÝÑ&Ž+"¬QÊ6Ù¹”ò8=FG5N ON¼ñUÓÝk³ÇtnàþÈ‚Úí±sjÐÂÛ–%eŒ»L ¥[h w/– áø{ZÓm¯t›«oG'öŸˆõ+V‡íªb0—¹‘U#nK˜> Ÿ5Fí¬«@§ü#Ú§ýzçýù²ÿäz?áÕ?ès×?ïÍ—ÿ#×/àÙı]jž+‚êêkDû}†%ͽӲ²—™Ö7³ ‰V-ĶänO<ÿeÓßU»ÕÌmme¨K Ú¡µÎÙ`\ͼ\¸I$h>ílA¢ß][Åqoãfh%@ñÉv,®¤dE¾#œÔŸðjŸô9ëŸ÷æËÿ‘ëÏü#s§jð…h±x–ù-ßÃïçXÃ|Ñy³/ß+ŒHpL£äl/’è6…‘N„Z„1^h,úŽª×k­êwÇurò­´‚ëÉóŠ’Ã*!dw9 ¥ÔíV`ÖA¢ß][Åqoãfh%@ñÉv,®¤dE¾#œÔŸðjŸô9ëŸ÷æËÿ‘ëÎíµ]<|9ð¥¤ÍÚ¡Ó ›k{é­î'˜Gãm(Í–6¢ÁŒÏ·+¼ñާo“·í[UnÖ†]@ÙÅ òË<è ¤#n 3F§ås ðjŸô9ëŸ÷æËÿ‘ê¼Ú]Üh ã}qä·ˆM$1Ag$ì‹lXçcÉRMrzWˆm5M;JþÚ×ãƒIGÔašæ ]ãA4W¶ñ›•dg>Ir7Èò üS}i¥\x¢íuÝJÓQ¸ð½³ÛO$¯¬ÀÜrc ,D”s±6¼¸]¯' çü#Ú§ýzçýù²ÿäz?áÕ?ès×?ïÍ—ÿ#×7w«¬þ šX5yPmNÅt»h¯mŃ‹s,‰m’¦ä™6¶6’ycn‡uëhn4;ƒâé5 ¯µÛë7èÊð)¸1ªÆ¸L–û; »÷Š „eZë/ô»½3N¹¿¼ñ¾¹­¬O4ÏäY¨ –8Ù8ô«ðjŸô9ëŸ÷æËÿ‘ë/ÄÚÌ:Ž©áýK¹Ónî.œj‹o5è‰.a‹ækª»gÌ1ȸRC&NËY·‹EµÐnµ8-mtU¬5V³¿)­·“+Û§ž6:ª·‘󰳯Ês“°è·Ëp–íãdNèΑ˜ìw2©ˆgɲ‚{n´A¢j76ñNž1ñI:‰-lÑ€#<«[§Ø€Gzæï.4k_x~ýµëä·}+PŠÚöK‡'X° ȪŒíæ:°ddrÁŒxµ÷¹ð•Ôšäÿn_ [K¤¾e7zŽÙDª0ûLÒc`ø'|ç ÿö©ÿCž¹ÿ~l¿ù¹¸5›k“Ïx¸$—Õe“DDŒJdò¶k ªwü¼‘ƒÁ¬û­zÚÃT×õ |]#Éeâ;;X¢šý("“ìâd1®¾züàíò™†;B/ä¹ÖlüE%倽Ôâû oÀŒ÷…ÕÁ@vß1n%Ê•sþíSþ‡=sþüÙò=ðjŸô9ëŸ÷æËÿ‘ë—Sư¦Mv{mLêñêq›¼ý’ÅãɘÀäÇ€–ÄHPnܹ'Ì;²ôÙ¡›Cø<¾1Ô¼íeÒ;Âu1þ“‹YAýÒ²mŒ”ÚÛ˜&]®;ÏøGµOúõÏûóeÿÈõŸ¬Zjú%µ­ì~*Õnâag Ã<6›$¹Ž6l ßuÏB+ŸÐüEf/4+•ñGÚZó[¼ÓI~$CmŸÉ@¹Ã6E±ódo1ArØxËþ@vßöÓô¶è(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+‹ðÖ¡­hÞÒ4»ë-=•”6ò4sÙ,ˆ‘›€q‘è+´¢€9ÿøHuOú5ÏûýeÿÉÂCªЙ®ßë/þH®‚ŠâõYõ=JâÞî øŸO¼·G.meÓ‹ynTº$θ%çùFƒcKÔ/´›´‡Áþ päy$žÄ´’;—w8¸,ÌÍ€À`WYEqz¤úž©¥]Ÿ øžÜé×á#†];l¬P¡ºf8Úî¿)|ž ©ÿ ©ÿBf¹ÿ¬¿ù"º (Ÿÿ„‡Tÿ¡3\ÿ¿Ö_ü‘Gü$:§ý šçýþ²ÿäŠè( þSþ„ÍsþÿYòEðêŸô&kŸ÷úËÿ’+ ¢€9ÿøHuOú5ÏûýeÿÉÂCªЙ®ßë/þH®‚Šçÿá!Õ?èL×?ïõ—ÿ$V|^=yõ‰t˜ü+®5ô[÷žÐcbÄÍÏŸŽñ¿Åìq¹¯êSiº[5ŽMB᎔rU¦~°%—|röªòxjÑ!±µ¸’;‹{¶Cw ÿh.dw`6ðìÎWh+#¨ÚÿÂCªЙ®ßë/þH£þSþ„ÍsþÿYòEhhÚŸö®œ“IÙ®ÓÝÚÜÖÓ`Œœ ã †ÆJ°Ê°'B€9ÿøHuOú5ÏûýeÿÉÂCªЙ®ßë/þH®‚Šçÿá!Õ?èL×?ïõ—ÿ$Qÿ ©ÿBf¹ÿ¬¿ù"º (Ÿÿ„‡Tÿ¡3\ÿ¿Ö_ü‘Gü$:§ý šçýþ²ÿäŠè( þSþ„ÍsþÿYòEðêŸô&kŸ÷úËÿ’+ ¢€9ÿøHuOú5ÏûýeÿÉÂCªЙ®ßë/þH®‚Šçÿá!Õ?èL×?ïõ—ÿ$V~±w«ëvÖ¶QøWU¶ÿ‰…œÏ4óZlDŽæ9³³}Ô=®ÂŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠËÕü?§ëh÷ßkßhìð5½ìÖå—i?»uÉÚHÉè€êsÍÛxnÒOjv }®XtûI£OíËÏ•ÞKÇ>ny§åîk¸®~ÏþJ³ÿ`«ýw@4éúݽÚ÷ݺ¼íq{5ÁvUÚï°v€2:…Pz jQEQEQEQEQEQEW>|7¤j2Íuö«&ù\9ƒ\»T†P«(UÃ6€1Œ`bµ5-2 VÝ`¸’í\86·rÛ¶pG-)#ž™ÇOA@(¬ý3FµÒ<ß³K}'›ßk¿žçÎ1æ»mëÛã=SŸÂzuÍij½Î²G.Â=jñs¬ (öÚ€7(ªz–™«n°\Ivˆ®[¹mÛ8#–”‘ÏLã§ ¨ôÍ×Hó~Í-ôžn7}®þ{œc8Çší·¯lgŒô¡EaÏá=:æâYÞçY#—aµxŠ 9áVP{íZ–™«n°\Ivˆ®[¹mÛ8#–”‘ÏLã§   ”V~™£ZéoÙ¥¾“ÍÆïµßÏsŒgó]¶õíŒñž‚©Ïá=:æâYÞçY#—aµxŠ 9áVP{í@”U=KLƒU·X.$»DW ­Ü¶íœËFÊHç¦qÓÐU{-7OÐG[«°“ÅmÌZ”òÏpÚßN»{if#±ÖHÆ+± À|½ÎÑRxvÂÖßNŽòÙ5X¾Ùr´:äóIFB••Ûc Ø wç€6(¬9ü'§\ÜK;Üë!ärì#Ö¯A'<*Ê`ªæ§ie©ùVW3Ç#fdKkÙ-¤`¸æ6V*7®{d®yÅhQYzn›§è× oÕÛOp…ÄwzŒ×,U¨•Ø€ ¨%qÕsÚ«Ïá=:æâYÞçY#—aµxŠ 9áVP{í@”U=KLƒU·X.$»DW ­Ü¶íœËFÊHç¦qÓÐTzfk¤y¿f–úO7¾×=Î1œcÍvÛ×¶3Æz Т°çðžsq,ïs¬‡‘˰Z¼Eœð«( =€v­ KLƒU·X.$»DW ­Ü¶íœËFÊHç¦qÓÐPÊ+?LÑ­t7ìÒßIæãwÚïç¹Æ3Œy®ÛzöÆxÏATçðžsq,ïs¬‡‘˰Z¼Eœð«( =€v  Ê*ž¥¦AªÛ¬]¢+‡Öî[vÎå£e$sÓ8éè*=3FµÒ<ß³K}'›ßk¿žçÎ1æ»mëÛã=hQXsøON¹¸–w¹ÖCÈåØG­^"‚NxU”À;V†¥¦AªÛ¬]¢+‡Öî[vÎå£e$sÓ8éè(å—¥iº~•qqoiuw,ååŽëQšå‘I`¤ ]Š‚CŒŒgiëŽ5(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(®~ÏþJ³ÿ`«ýw]söòPõŸûXèÛºè(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÇðÕÆŸ¥O Ô~\¨^Ìàr’]K"=U”ûgžkb²ô JmWN–âu]/níÀ@@ÛÄ‘)äžv 'ß=:V¥QEQEQEU; VÇS{ı¹Žsepmn6rPªÅ3ÐgAä.P\¿ö%埊?µ¤·ƒWI%ýܳ9z°Ú| ÄÆW °DÛŸ9úõP/ý‰ygâíi-àÕÒIw,ÎEÆž¬6Ÿ(11•ÁÃl6ÄçÎ~¼¾¼©yˆ£–Ë\Ú|Ka:[;´/-²ÈêcPY@†nF@*„rPŸP¢€<®KHuø|Ÿ ]Ëi¥xuœéN©MbW÷;”"¡ºL– m®Ä²üCá¿2ÏÄ“\Gâ9µ¹~ßû»;$‘¹[«\$BI£Ã@<¡#ò†P±¶Ïh¢€<ÿ[ðÿ‡^çÂQ§‡>Ñk6 óÌdÒä˜í{gRó–BC3˜7>bTû„Ž~ÞßVKËë}3MžÂú÷D¾ˆ¥®™qnRôˆÌBkÇ%.$J|€NãŸÞ ö §ªê¶:—q©êw1ÛYÛ¦ùe~Š?™$à9$€2Mqwúvuá]NßÃZ=ö™k$¶¿iéíl$ŒL¦}–ò(ÞÞVíß»"@U?y Óü>áá¦išd÷V²]´ðÜk0­¢ÙоdÄ‘º0bÅ@X‰a#o]ÊÍèP/¨h—“hv;[ÁªÌ™c|åE«DÁ2™wÉóÂÓù›sJ³›OÒíí..ä»–$ÚÓ>rß™' ÜY°æc–7( ŠË¿ñ‘¦iÚ—wѦŸössö° DcùpC¨ –Þ»W9lü àÖ¥V>§â}7HÔb°ºÍu,FdKm>âãr9pJçÓrç¨Î…õ¾£gÕ¬žd/ R¤Hee8*À‚  ‚bŠ( ŠÃÅÚ<š¤Úp’í'†ãì²<¶3¤I)ÆÔ2²Ën]¿7ͽqÃ;”QEmcqŒµ;ö³iöÆû‡Ìé%Éa޼ óö5±YpjSKâ­CKeÈ·²¶¸Fî-#ά8Æ"\qÜõí©@¾¹h5?höÜßGjÚ}ìÌ–—³[nu’Ø)&&Rpºúš’? h³<Éþ²ï ì•WĤ£m †ý÷k)ÁìAïF§Mã­.$šHô}AVX–Be´ù†àFG^A ÕøwUÓuÝbîï[Ô¦‚kÑ$qʶÛnWìЦ÷Ù`C)P_¸I` Ÿð†éóõ®àö÷ÿQÿn—ÿ?ZçþoøõSñ]­¤ºÎ—6±¦I¨è©op²@,^ñEÁhLLbUc«0·$dnáøWCx¡¿a}q©[èšiy¯Ri¡[¸„žc#¶b2.èÈe9ËHAÉ’€:øCt¿ùú×?ð{{ÿǨÿ„7KÿŸ­sÿ·¿üz¸?cÉ¥k—lv÷i’nΙ?Ú57tGi™š}‘¹ÛÌXI&€Khxµn ñRßG¦H³Ã{fÉq‘syq%¸x¼ÓÄd¬ ·ÍSܰqûÚë?á Òÿçë\ÿÁíïÿ£þÝ/þ~µÏüÞÿñêàô8ÄŒ4RŸPƒSÕ¼éšâDk«P×h‘-Ùc´Œ_.àÁÁ—oñ’ÂÚà fÆ×O‘t÷M>f‚ÏÃ÷:u¼‘¥Ëµò¤Î÷0• 2.+mÅu—Ú.‡§êz]„³ø¦Ô¥x¡dÖoŠ)HÚC¹¼Ü/p:žÃˆÐÿ„7KÿŸ­sÿ·¿üz¹»û-èørÊÏAÔ ÒXyÜXO[>Í$d˜ÀýÔM$Ь®>db¬¬ÌqäÓ—WÓ´ÄÔ-õ˜4[[J1Ñšr¤Ü+Zo,a‚°L ù7.JóþÝ/þ~µÏüÞÿñê®þÐãÔa°kíp]M“FŸÛ—ß2!@Ç>n82'çìj=Uþ3e*k2t¶‚Q-³]Nç1“æªq:`þ÷Ë$2ùŠsŽnÛI²Ó¯ô É<-<(4ýJÚu”Šñž6Y<£iäX÷MíåþRØÂ¥ÿÏÖ¹ÿƒÛßþ=UßÃzzŒ6 }® ©¢’hÓûrûæD(çÍÇDüýrúe¥xoÁâhsÇ{c°jSñGÙe„©R¦VQ# B("? i¢ÇÄ:%Ô¾»³xŸV·‡6qæ{ÄxÎå%cEæÆXd »rïí?á Òÿçë\ÿÁíïÿ£þÝ/þ~µÏüÞÿñêÃðX%íâéWp‰ÒÚ6»ŸO–ÞêwÜãmÄg&IT¸g¸+™A#?můÄ;¡¦Ilï©ÍÓÁ¤\É+ÂÑʱ´· ”x‹[ËÀåÇ”h¤¿ðÞ‡¦i×7÷—Úäv¶±<Ó?öåñÚŠ c.N=*Aá8ÜÃ#ÛÝ4…žÚ8ÿpHÎÖ‘][gÊP(oÝ…£ZÓ¬þOìÝUýމƛ>èæý¼ÜÌ2¿5ÏÏo™Ndl°Úøî?á Òÿçë\ÿÁíïÿ©<<×^ðõÅIJM<ºe³É$ŒYŒJI$òI<æ¶ ™nmâ$@ê$‘€#<«TûïX~ÿ’yá¯ûZÿ襠‚Š( Š( Š( Š( Š( Š( Š( Š( ¹û?ù(zÏý‚¬?ômÝtÏÙÿÉCÖìaÿ£nè ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(‹ñn›s7€õ«_ Ïh`’ßPóàïróÊå̉Y×ó ƒlŒ `õlz”V캥ݥÌûÉWµ¶h.ZG$ç<ç¸ãŽsôk½'B»Y­dyÅíýÂA!iîe‘$…Ë+/R1žqÍIc¬ßÝÞGÞÕl£læyäµ(˜òfnzp_NhSư¦Mv{mLêñêq›¼ý’ÅãɘÀäÇ€–ÄHPnܹ'Ì;³íõ+{†þÖ/5ûë´Ô¼…Ô$mTÆó‘o!ò£º$,²(ÜwF[Ê!™Üá½RÕo,n+êZ‚ eµ’ÝTŸ”ù’¡ÏéŽG=q_P¶“ZÑ¡»{]KO¿µv¸¶Ž6€ÜG WL —„–Feù‰|ü¤dcøvê?\M§w{=Ê^^À-ï…ýÏ”íH‹³«¼jbBdßÝ·dñmâ'hõ++/ùÁ.—pƒHÖV‘ƒÝ˜¦ÃËðbÌjÎÞ‘•½ÃowiÁ¾ª²Áª±æ8n—Ég‘H“>HÝ¿~Yc'8i7ú„7³Ë¥›·Ó.áœ#7Ø¢2’3…ʹLœqóc‘’9Å;fþîò8&ðΫeg3Ï%©DÀ'“3sÓ€zús@wcâ{¿ìk ì|A%ö¹«x^îøÄfIYï#Xü¡ mR§Ï]¨£w–Ûƒ2’$Ö5{;[k¯ìÏo¢­Þ–#¾MH\ƒ3ܸ¸ŒM1~‘ܦpÉYƒz&¥ªÞXÜ,VþÔµ(Ëk%º¨9?)ó%Cž3ÓŽzâÄ7³Ë¥›·Ó.áœ#7Ø¢2’3…ʹLœqóc‘’9ÀÝë¶Vöú¶”¾%‚;{mmR;½ZH‹¡µb{°ZX¿z&`Äœ˜Œ\Ðj¿éŸ 5:×íÓß7‡Û×5éß*yª9ó«êÁ±Ò®Oâ»›;yn/|/¬ÛA½ä´mÍ•RrÌîØErÌ£½X“ÄR:C6™¢jZ¥¼‰Ÿ:Ù @Œ«#,Ò£«©WƒÁä8û­Jc§kƒ@ñ —ºxM?~¦n ÊG$—·l]lŒË ŒËåç5ÏêÚäºF},)P{ky.4ë¹59¬í÷…'m¾æ”߸uˬ’2©dAŒ°±s­  ]kwöv©ko-ĶÎciB $‘ÊBä|ÝÆqÎ)ÿÂG~Ÿ4þ×"„ròfÖM‹ÜíŽvvÀìªÌzOÿ‰l"¼Öµ„ñŸÚßÄPÛ¨ÇäGÂßÍW ˰ÎíÛ|¦a‡ÆÄZ„1^h,úŽª×k­êwÇurò­´‚ëÉóŠ’Ã*!dw9 ¥ÔíVaÐMñ ßûrÛH²ðïˆïn."iQ†žmÓ ÷²n }2¹=>uÉÅtÞÏ.–nßL»†pŒßbvˆÊHÎ*å2qÇÍŽFHç&|C¥ÛxÂÅ"Ä-õ™/€pÑÅe|àCZî[p6IݼOœù’FºKfþîò8&ðΫeg3Ï%©DÀ'“3sÓ€zúsRjZ­åÂÅoáýKPBŒ¶²[ªƒ“òŸ2T9ã=1Èç®9ýWĺ ŸŽ´+‹­oM‚ 4{·I%ºEVW–Ô¡œÁƒßiÇCUõ2çÄ ¬êº<—im*ZËh¶·ojoå…œÈC#/É,f8D„ò0V6=„7³Ë¥›·Ó.áœ#7Ø¢2’3…ʹLœqóc‘’9ÆäÚ§ˆbiÓ|G Ç.á%ô3Y«´ñ‘$Œ¹ÈÁUÜ94Ç­ÌW·Ú¥ÿ .«aiâ-n&ÒKç̵Ê©°Ió*»…q°&>Ò€|Ë.^§ã%ÿ„vîêÏ\ŽIôô½SÏ®4LsÌ!… öÉDk d”CDyóXŸTº¾›Gò,´ï _]ÚÇ„6-mqÀ@²J„`ÐcsérÙåÒÍÛé—pΛìNÑIÂå\¦N8ù±ÈÉàÊõ cI¾¹ñeÕ‡‹ –áunôý* ‹wKùá¶¶x€L¯ºXÂagn9­Þ_Çâ­ZWñ,ö3ZËØtÛH$šòæ&6"4G&æ3.÷…öİ6w:ÍýÝäpMáVÊ6ÎgžKR‰€O!&fç§õôæ¤Ôµ[Ë…ŠßÃú– …md·U'å>d¨sÆzc‘Ï\y<Þ+†!ya‹í4è–ãK–&³ñÔ o¹dŸ÷× »3 ù@POá½Â:…¼·Þ"Ò­õµÇ¦jÑîŒòD†؆v%ÏïLÃæ'Jô\ Èog—K7o¦]Ã8Fo±;De$g •r™8ãæÇ#$sŠv:ÍýÝäpMáVÊ6ÎgžKR‰€O!&fç§õôæ€.G Šë73ÆcþÐ{xRp$ËyJÒò¹ànipqÏ=qÅÊǶ±¸ÆZûG‹Y´ûHc}Ãæt’ä°Ç^‰ùûØ Y²Ö?á!Óum&ÚÆçìö—6ÒEwtð¬xX0+çI u}³ÆôÐÿðs7ÿ"×AEsÿlñ‡ý´?üÍÿÈ´}³ÆôÐÿðs7ÿ"×AEpö:µ§^GsoáÝ(4Yò"“Ä—rCAº‰­ÊG…%FÅRT`+cíž0ÿ ‡ÿƒ™¿ùº (Ñì|E Ù½­†ƒ¥,/+ÌÂo]Nw¹ËÒ[±ääžz’z“Zlñ‡ý´?üÍÿȵÐQ@ÿÛÙãúhø9›ÿ‘k ¢€9ÿ¶xÃþ€ZþfÿäZ>Ùãúhø9›ÿ‘k ¢€9ÿ¶xÃþ€ZþfÿäZ>Ùãúhø9›ÿ‘k ¢€9ÿ¶xÃþ€ZþfÿäZ>Ùãúhø9›ÿ‘k ¢€9ÿ¶xÃþ€ZþfÿäZ>Ùãúhø9›ÿ‘k ¢€9ÿ¶xÃþ€ZþfÿäZ¹á­6mºF—pÑ´öVPÛÈÑ’T² RF@8Èô©EQEQEQEQEQEQEQEQEÏÙÿÉCÖìaÿ£në ®~ÏþJ³ÿ`«ýw@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ÿˆ?Ó5I:Évon"é˜`]ÊÙÿfá­NÉÏB»ª¿ˆeÒôÁªlØé:Œüˆïo|˜/B€]IÆìlj©uÂgrsR𵦫¬®¥sy©)[qÃovð*üÅ‹k‚rÛ[jdŠF†t« Åž"°³¶Lék~Óuv¯Çc–sºÝä,Ä’fló’À•¨®­¥ÛߥµÝ°™7yp42ÆzdnAð=A ƒ\ÿ†µ(tiöò,“Idï¤Á@.ä·w„lR@„EÈ'2Y¶©jë+.Ë@±±Öõb5‘ï/œ3¼¸FF…PtPDH[±$…P)øO÷ús^Þs­Ëµ50ßz”gÉøcMÇ`mùbåÛ ¬½KE[Ë…¿µžK=N4 ÂÚÀBË Jœ· ÈÞÅJ1ÝF›­ÃypÚ}Ï—k«Ä…æ±i6Ð@ó¡x‰#낃(Ô¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(®þF¿ûÿôãÿÜÿú7þ¹ÿ­?äkÿ±ÿN?ýÏÿ£ëŸúÞ‚€+ßXÛê6rZÝGæBø$*Aea‚¬0 ‚Qé:l:6c¥Û´•¼vñ´„*Š€p=\¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ çÿá;ðý zþ aÿâ« ®OÂú”:WÃ/ \N²2=–nNéDQ)äŽ78'Û=zPÏøNüÿC^‡ÿƒøª?á;ðý zþ aÿâ« ®-µýzßÂzÔ³M¦¾½ezlámbi@Œ<ÓÌ«$Gvð;ãdSþ¿ÿÐסÿàÆþ*øNüÿC^‡ÿƒøª’Á#:9ã¹Õ5s°ZÜNŠw"JU— «eU”+äYþñ¦¡£E{{h'M2ÊêîÚÞ'- ³©!G$±s€‘¿§ÞÞ´sþ¿ÿÐסÿàÆþ*°í|iáUñÖ­pÞ%Ñ„¦Y"HoâÚ̲ÝîÁ 2’;nµsJñÝ­ÓjwÊÁ¨5µ¬V6óÜLѬQ9gSz²´»\„<òt-¼]§\k—ö¶ÚÚiðêü†4roÉÙ´*© ƒ–ÇÜlðø?þ†½ÿ0ÿñTÂwàÿúô?üÃÿÅQ/¼;mf×Wº‡Ø#Yc„‹ødµpÒì‘U¶œ7Í¿#œáýçŒî‰šÂ-sJÓ-çŠÕì¡Ô´©ÅÌÏ,²C³Ëicc‡Œì àn ü'~ÿ¡¯CÿÁŒ?üUðø?þ†½ÿ0ÿñU#ø† &ÞÒ vx×P6é%Ù´‚Y „‘†v`§Ê‹p|4…F¹ù[îü}á{'¿Yµhÿâ^ì—o"[²¨8vU!IÎÕüÌ .X$ÿ„ïÁÿô5èø1‡ÿŠ£þ¿ÿÐסÿàÆþ*øM¼;ÿAö¿ÔÉþ«þ{ýßø÷ÿ¦ÿê¿Ú£ÇòOü÷ÇÙ6ãý¼çåÁè+Ÿñ·îü!}{×û;ËÔ¶ÏO³H³ìÏmÞ^ÜóŒç ‚Š( ©êZl:ºÇ#I‘¸’ ˆˆA BAÁ ‚ •`TnQ@ö:Ã¥äz^¬žF¢r#‘"aÐÑ±È @bb-½v·ÞP¶*½õ¾£g%­Ô~d/‚@b¤AVV*À€C A—¥w¥ÜEa¬,’Fî#ƒTr–8D JO #c·YÄ`rŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š*9ç†ÖÞ[‹‰c†¼’HÁU ’Ià9ÍI\ÿüö/ÿéÇÿ¹ÿôoýsÿZ}ŽãÄŸ½¾3Ûi ÂiìZí?½pܪxÄ@¯Ë‘&w˜Ó  Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¼ÿIðvâ‡^{Ý>ÆK¨ôý9…ÄÖ‰+ùqùr4y<í`HÎ>sÁè}¹{]éšuµ…Ÿ‹µÈímbHaO.ÌíE(É·ÉÀ­t6zeœvvZZÇÁ$“… ’OãX÷^ûGŠ ÔD˜±;g¹¶ÝòËqÛ •Ƈ$“Îè-ñ”Â=ªÐç®ß›/þG£þíSþ‡=sþüÙò=aßxsÄ¿ð“Új°-¥é´½–å^ëX¸‰^7ŽXÖ1n#x£($Q½r[a'Ûô¯x’ í¯#Ò“ìÚ~—o Cy#ù²XÌe]ÀÄ»LHÜSÃçÔÂ=ªÐç®ß›/þG£þíSþ‡=sþüÙò=sïáÉ}¨Þ\\ØË íßÚ?³í/®lv·“ aÌ`»mÛµU·8;Qc°ðV½ýŒúMÜúm¼>‡F¸–'yØ4K:E*ƒLŽIàù¾o–½þ¯]é6³XtÕ}mØY±»|hÜ™?uò±‡ÀÝ’Ûr1¸êÂ=ªÐç®ß›/þG£þíSþ‡=sþüÙò=cëZ‰5_øI6ÚéQÿkh‘iñæúC²Aæî'÷?tyïƒÔùkÀÞvjxÐÌß Õ‹r€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9Ý…Ó­´¹-¯¥µÔ¥òoÒÊk.ØdF¤àº‚<ÂÃî&ñ—‡ï>ѧOkªÏº!çÛ>…xÙ÷(ܦºÛXsÁÁô5ÔW?gÿ%Yÿ°U‡þ» ü©Ëweqa,z“ 9Ònïí&îâØ ÈÞj‚_;•ˆêP¶8¤¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šçõ¿ô?ø{S+K.Ÿ3¿ÜHæMà“ÙŒ°@€“ƒæc²ã ¬XÜjÔa²Ì¿XŒÖCp¹ŒùžxâECÏñšÐ°¾·Ôôëkû9<Ë[¨’h_i‘€*pyu  QEQEQEaϥͥ\K¨èÉ#—r÷:y”ùsäåŒaŽØ¥É-‘µ\³o儉¡¦ê¶:½»OasèŽc/ € GSÊ8Èʰw®V^¥¦Ì÷ ©i­Z”h#¹Œ|©0 ÆI*à„’ÑÀ5(¬ý3X·Õ<ØÑ'·ºƒ}­ÌF9#'8àðËÀ:–F*ÛXàÖ…QEQEQEQEQUﯭôë9.®¤òáLB–$’ª¨Éf$€I I  'žn.%Ž"BòI#TP2I'€ç5k·__E$:|N$´³•J´ŒVi”ò8)û¼3|ûV" .mVâ-GYI£‡¶Óħ˃*d vË.@lÊ…Wg*d}Ê(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+Ÿ³ÿ’‡¬ÿØ*ÃÿFÝ×A\ýŸü”=gþÁVú6î€: (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ çüþ£Í¤·ÊÚUܶK_*Û­×?ÅþŽðœäž~c»5ÐW?iþƒãFÛîC©ZE{õó&ŒùS¶{a  ÁÀ=@Îó@Q@Q@Q@Q@úž™öï*âÞo³jù6÷!wmÎ7#.FøÛräg‚¬ªË›«µÕÃXßYÉa¨"ò]ÕÖT$N>ú r†T²®åÎ¥SÔ´Øu;uŽF’)#q$$‚@„‚3‚AA*À© €\¢±ìu ËkÈôÝhÀn¥É¶º‚378” ÌÅ$P ÚXîQ¹IêlPEPEPE^úúßN³’êêO.À$)bI *ªŒ–bH@$’š/¯­ôë9.®¤òáLB–$’ª¨Éf$€I I¬û‹ÛÈõ]V?.dÉ´³,Z,Äd4Ä …¢’ ¼…Åíäz®«—2dÚY– -b2b †B‚QIÞMŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+Ÿ³ÿ’‡¬ÿØ*ÃÿFÝ×A\ýŸü”=gþÁVú6î€: (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ çüEþƒ¨èºÊñä]­”øåš’±…ñþ»ììO*6%[ ¬¿i³jþÔ¬-Z4»šÝÅ´ŽHMŒÆù•*áXÈ È  J*ž“©C¬èÖ:¥ºÈ°^ÛÇqÈ`®¡€8$gÔÕÊ(¢Š(¢Š(¢Š(¢Š¯}co¨ÙÉku™ à©U•† ° À‚EeÁsw¢ÜEgªÝIwk;„·ÔeTV1ÀŠ`TNÀä!¶™7*9à†êÞ[{ˆ£š P¤‘È¡•ÔŒAà‚8ÅIEsÿò*Ø¿ÿ¦ïþçÿÑ_õÏýVäÃuoż±Í¨9#`ÊêFApAæ€$¢Š§©jPé–ë$‹$²Hâ8-âÉ<„ g’IYˆPH’úúßN³’êêO.À$)bI *ªŒ–bH@$’šÏ±±¸½¼UÕcòæL›K2Á…  ‚ÌFCLA °ÈPJ) »ÈXèî÷‘êš³ùúˆÉŽ4•Œ ‚6Ƨ°”®öÜßuHEØ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹û?ù(zÏý‚¬?ômÝtÏÙÿÉCÖìaÿ£nè ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(Ÿð—ú5ž¡¥½¦ê@ýÅÈžOEX¦1€ÒÐW?ú®bé§§¬è‰ÓÌöJì?¼Ë=ºƒÉ"<\ôQEQEçúNá?øGõmo[Ðô©¼CSšæê{•ö%Üù$í,p«ïÓРàÿú4?üCÿÄ×><4hþ(e`™ÆKí±áí;ľ-Ó%¿Óï…­¾Ÿqfä},홚Ýc"_'÷%FðX ™æ4O¡ølOáè¬üáKÏí_šg‰#+ a´¨D'Ì¢†;gŒq¿‚îËÀL·¿Ò|1áÍ^Þ]BÞÆIlà¶t„Ë"&æ`MëÀÉ9^€–,¼/}mo©@c´,ì¥Ó4Xo0ÄI,Ÿêa!²Ä[Ïï®~k¶¡y;èž ¿¾–Ë%äºrº‹k¶™×H«‚­òðI$äŠè%Ð< kaö› xc{ÜImQAl|ùUÙV$g <Ó·3Ãddã5_FÓ~j¶Z;Káï Z꥔W‘iíoneÚé»å] °n@þTô}R³¶µ'ÂØ·ûRÌi²Én¨"º¹I£-µ™D!£¹‡daÍeÚè^.²ðþ‘e6‘w¾ÙôÙd¶Ó%³0J¶æ Æw—l†|D~áÙî8b@: :Ïá–¥¢\k1hþO·¸’Þ[‰m­‚+#ìÉn€7ÊË“Èu=ê寅ðâÒÎ;Ë+ÂÚËŸÒ[ÛªWù±À“ðɃ•Óü"B"»‘ ·Ê­•Iã€cVp{ª“Ðf¬Aᯇ×W[ÛèžšymÅÔqÇknÌð“ d¡wóºVI~\“³q€M/MÕmßGøF.íÜxŽ÷P»o2Û"9VuIl§qÛ<`ã$˜v]ÀÍÐ(äôä¤ô/¦hrkWþ;×-,#ˆLòOmiU8À*m·9n7dãâ€; +Ÿÿ„{Tÿ¡Ï\ÿ¿6_üQÁ¢ß][Åqoãfh%@ñÉv,®¤dE¾#œÐI\ýŸü”=gþÁVú6îøGµOúõÏûóeÿÈõŸ‡Ÿþß+ÆzçöŸÙ ûGîm?Ôï›Êÿ—}¿{Îéϯjì(®þíSþ‡=sþüÙò=W‡K»¹û9·ñ¾¹4w¢š(,Þ6O—âÛo;ò2F@8ê(®þíSþ‡=sþüÙò=eêâM íûÆ~'ßvì-¾™ÁvUÜGîíh'¨V#¡ÀiEqúLkqO%—•$޾l¯)RÂáAÁr3Ò¬}ÆôÐÿðM7ÿ%WAEsÿcñ‡ýt?üMÿÉUN?ëÐê“j‘^øa5 “d·k 8•׎þÓ’>UàžÃÒºÊ(ŸûŒ?è;¡ÿàšoþJ£ì~0ÿ î‡ÿ‚i¿ù*º (ŸûŒ?è;¡ÿàšoþJ®~ÿVñÄŸi‹ÃwþÖn­7‹…û °ÆŽ¹O™ö†q?Á´rå2»ºOØkWöð.‘}®MÌŒ-r„c`œ0ŽI,¨XàdûÕNÛÅz^“·KÕ-¿°ä´‰2Œ¹´Š.UL£ËHØ£* <¶;q° â}ON¶¿³ñ‡%­ÔI4/ý‰0ÜŒSƒs‘GZ±ö?ÐwCÿÁ4ßü•Qø"x[ÃæÊ c’=>âKh|¶«oöÀ0á‡ÙÞ»$œòwfºJçþÇãúèø&›ÿ’¨ûŒ?è;¡ÿàšoþJ®‚ŠçþÇãúèø&›ÿ’¨ûŒ?è;¡ÿàšoþJ®‚ŠçþÇãúèø&›ÿ’¨ûŒ?è;¡ÿàšoþJ®‚Šåîô?jkoþ·¥5¬wv÷.°iRFíåJ’… n ”8=k¨¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠçüCÿ!Ï ÿØVOý"º¬½?OñT~:¾¸¸Ô4Ö¬¬ÖIJ•UYn D&rÀl“ó}õùF>mOÅ{ööËNžÿì:ƒM40jó*ùNŠkŠôøHuOú5ÏûýeÿÉÂCªЙ®ßë/þH XÕìím®¿±ü_=¾Š·zXŽù5!r Ïrââ14ÅúD#r™À$mf \jÖøŽÓÃðø§ìòYø”ÃlßmŽ{˜éí‘™·–Ìò<0lØ0@¸ÿ„‡Tÿ¡3\ÿ¿Ö_ü‘Gü$:§ý šçýþ²ÿäŠÏÖ‘ô}Ö:ž¯?Øc•-õME®ܺ-¼˜w”0h÷L±s¸d°\ÄN¹þÕñ&‰¦^x–ùmî-5#œWÞS\ÃÒ‹i7®%}ÑÁÃe–2rCI¿°ÿ„‡Tÿ¡3\ÿ¿Ö_ü‘Gü$:§ý šçýþ²ÿäŠàô½NÚá4pÞ6»¹“R×otùeþÒLÉn­;*"®K@p%UFU(qà}Z_ï$:„wÉo{ul²¬ÂSå¤î±l’ÇÊòÎâI`Cs“'ü$:§ý šçýþ²ÿäŠ?á!Õ?èL×?ïõ—ÿ$PàßùÜÿØWRÿÒÙ« ¬? []ÚèL·¶²ZO-íåÇ‘##2,·2È ”,¹Úã¡5¹@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@sþÿGþÛÓ~÷صYÿyÓŸ¶ë§m¿hÙÔçfxÎA\üßè>>¶—¤zžžÐ;¿O2ß)þó,÷ G$ˆò0²ÐQEQEQEQEQEW?áßôíGZÖ[Ÿ>í¬ Ï °ÛŒ©õßh`y%]rx ·ü÷ÇÙ6ãý¼çåÁè(¢Š(®Áßé:öÃs&³+jÆø, 8Ê“’IbxÇý'CþÇ^dÖe]?hà˜ß&r§ efpOP0I z (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šäü/©C¥|2ðµÄë##ÙiÖà î”EžHãs‚}³×¥u‰šÞU·’8ç(Do"UlpJ‚ 푟Q\“àíÄÿ¼(÷º}Œ—Qéús ‰­WòãòähòyÚÀ2‘œ|çƒÐöÙC¥if×G±´"F0[ ŸäãåS´<§©84ÅøKÆ·šÛh†M[CÔ¤Ôbse¦ÄVk Äd-!óŸå g*¿4‹È?)êŠte¼šÚKÏ+ÊÞybt€”º¬ÌlÊ÷(bFÇÈ[ú?‡µCÑ$…,N¯§éé§ÜAö‡]F¸ L‚=Á—nå%.ù>ñM<5­Æ¤öú†'žg½ž=BòóNÓ™E"„P6Þû‘Ú7ü ~.Ñ岚éd»+²´-c:ÎeØ$ذ”óì`ü)ùrzD‘x£IžUŠ)§’F´’ñQ-%$¤l@ßõŠÄ)ï‚pW5‡õ¸¬,&ó –îÃPk»{9凌„Æn] Ì&æCŒìh o ë{Ø^ÙÉb×Ëöñ2LÏåÅö»…™H“Ë*)Ù¼î¥hZøÛ÷×YÙêiºž('X`†Ic˜eÕT”\`’Ø ¹wcræÅ¯ŠtkÏ<Çy²8biÌÓÄðÆñ/Þ–7pHÆA.„¨ §8aœ?xw^Ð.#MPé²Ág§¬¶²¾âÐ(ËŒbR3»€í¶¬–¾Ö$ðlþ¼’Æ Ò›L†êyd—÷~ZÊÈBˆð%|–Æá·æÔ.ÑÍ»Êd»GGTû4–3¥Ã°0!\åTŒ#ŸàljX_[êzuµýœže­ÔI4/´ÈÀ8<Œ‚:×|){‘>ðÆžípŒðXÜËlûU$Öæ(•Õòá@ ÷|ÀXù˜^Ò‹}:Ú˯µÝG$×XÍpgÚ8\œœ™  ÿÈçþº—þ–Í]sþ ÿÏý…u/ý-šº +›Ôç†×ÇZ]ÅıÃZ> òI#TQ-¡$“Àsšé+Ÿ¼ÿ’‡£Ø*ÿÿFÚPz/Ž4sV½Ó­5]6Iá¸ò­Ö+Ô‘®WÉI ¢ƒ’gSŒÿ«<õÇZÜú³k+ë:ÍžžtË»™bÓ,¢‹ÂÑ`üÑ>ÐVF± 0¼¯9ì,´ØlnµˆšB÷÷âPÄ`0Š8°¼tÛžsÉ?ANçI¼›Å¶Â^À–¶¶“[5±¶%ßÌdbÂMà £ÀÚ‹ÔmÏÂxzé,u^úêK}>ïPšéí#hUåŠ(̈¬ Ôd²‚ÉYv~<‹Äî‹“sQÖ†úØ´3³£[Nñ‘,2:(Ý es»£ïìkþ›_Õ’ßÇžúeÖ4 nL¬³íÜË&ü)Zc(‹®FØåÐ’–)n±‰m¤XÔ %‹â1¹”¨$.aƒìC¥ëAËÝk‘Î`F{mL`¹R¡îÈÄá_-rIÛ…1ü3ãxn<+ay¬­ÜcB[©  · 'Ÿ"*üÀ+8ê«»p)¹y©4ïˆÚN«­ŒÜ_ R$²‚{yžBÊî0é)ˆ|±JpÎÉÓæ]ÕâðãiÚf›y¬Á%®‰>(†ÈÇ$±Êw«+]U†CÿxÔŸBÖ¯½ÍÖµhÚ…ÀžÐÇ`VÝ—$gt~iv%eùhU0x;ÿ\XëV—3¬ñi¯¥]ÌÚs[r×1Ͷ˜É±xbrÃ) â’·Vö§BÕ~ÔþQ¸…Vk4–VŽ7“l„%ü…öª’Ák?Tðm汨é÷—úÓYÚ\F¾~žw$ò•a,l’©aHÂãç ç,w‰?áÕîït›W[´»{3G¦ˆ§2+–fŽ@çË($\ʬÝÜ\ñßü“ÏÿØ*ëÿE5tÏøïþIç‰ìuÿ¢šº (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÃñ„Má;÷µŠI®íQom¡E,dšF˜^5H$5±ðÝ[Åqo,sA*ŽHØ2º‘AG9©+Ÿðgî<9˜xm.Ytð÷Äq9HKï4B7Î;Á( ¢ŠŽyáµ·–ââXá‚$/$’0UE$’xs@iÿ_4ƒ›]# ×R„b@=8¶á†r.X0Àô‡á(&OÅww‘^j××ʤIJwœžIJD Ç€r€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9{]éšuµ…Ÿ‹µÈímbHaO.ÌíE(É·ÉÀ­Xÿ„{Tÿ¡Ï\ÿ¿6_ü]ÏÿÂ=ªÐç®ß›/þG£þíSþ‡=sþüÙò=tP?ÿö©ÿCž¹ÿ~l¿ùøGµOúõÏûóeÿÈõÐQ@ÿü#Ú§ýzçýù²ÿäz?áÕ?ès×?ïÍ—ÿ#×AEsÿðjŸô9ëŸ÷æËÿ‘èÿ„{Tÿ¡Ï\ÿ¿6_ü]Ÿ¢é)¢i‚Ê;™î{,Ï4ûw»É#HÄíU_¼ç ¡EV^«áý?Y¸·¸»ûZÏnŽ‘Ik{5³r¥1:’ D89è+RŠçÿá Òÿçë\ÿÁíïÿ£þÝ/þ~µÏüÞÿñêè( þÝ/þ~µÏüÞÿñê?á Òÿçë\ÿÁíïÿ®‚Šçÿá Òÿçë\ÿÁíïÿ£þÝ/þ~µÏüÞÿñêè( þÝ/þ~µÏüÞÿñê?á Òÿçë\ÿÁíïÿ®‚Šçÿá Òÿçë\ÿÁíïÿ£þÝ/þ~µÏüÞÿñêè( nh·VòÛÜK¬Í¨RHäÖïY]HÁpAbºJ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹ý;ý ÆšÕŸHïbƒPBý^L% ꪱ[’9 ËÉÃ(sþ ÿCÖ4 X|‹Ù²¸—®!vªãý«…µ#Bî ‚¹ÿ¥iÖš0ÿ˜ÅÚY>~ëC†’u'¨Ý r¨#̼¼: çíÿâcã›»‘Ì:M ²F^?}1YeV®-H#Þ0É<(AEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE‡âÛ›»] ZÊêKIå½³·óãTfE–æ(Ø€á—;\õ€7(®þíSþ‡=sþüÙò=gëM Ù¥ÕÿÛçìoõ;7îÛßwœc>Õ_Ã67z8’ú?.þòY.î°fG‘‹Ë¿å®ØƒwX× Ž<ãC‡E*×?³b‰ X ZcLŒ|Œ²àAÈar CþíSþ‡=sþüÙò=tW/g¥Ýê4Ö¾7×$e’|‹1‡Ú7ÛveaïŽ8©&Ño­<þ8ÖbBêž;™‚¨æß©bÉ€:J+›DÔey‘|câb}ºÖÍA;C|¤Ûa†r23‘Ô$ÿ„{Tÿ¡Ï\ÿ¿6_ü@ÁÞ]‹R}6_xºK¸D·Ñcœ|í;’֪̂°ê5,4»½ON¶¿³ñ¾¹%­ÔI4/äYÈÀ86Ùu ¢ŠçÿáÕ?ès×?ïÍ—ÿ#Ñÿö©ÿCž¹ÿ~l¿ù€: +Ÿÿ„{Tÿ¡Ï\ÿ¿6_üV<'}q©ø7C¿¼“̺ºÓíæ™ö¹Ú5,p8$ô  Š(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ çüeÿ ;oû é¿ú[ t‡âÛk»­ VÊÖK¹â½³¸ò#dVuŠæ)åW;Põ"€1õ ?ÅRxêÆâßPÓV²¼Xäm*WX•¥·!‰Àg!rË÷å9ùnxúþÏOðý¬··p[Fu]?4Ûw·'ÑU˜ú' «ðêŸô&kŸ÷úËÿ’(ÿ„‡Tÿ¡3\ÿ¿Ö_ü‘@î.l|Y«i¢ÞGuohòý¶úÊã "x]<…–3åÌRmSòùJÄ©ò÷pú½´ðþ»çkZͅφtymd¼mFR·—NXÆùv)¼ FÚ72ý­h@Ÿ]Õ¦·–$🈠wB«,rØBGÞ§##¯ Pjžw¨höoð¯ˆî¦–Wš{«™´ó,ÎÇ«GjŒ…U€(›Ôuë=R÷I‡ÄR^[=½ÛI.³ä&ù<òòKp€´0[rAWsÄ *ÊssHÖ>×á ›È.[BÔ.’ííî|üY‰$”Ë÷V#Ü‚Òy(q¹Gü$:§ý šçýþ²ÿäŠ?á!Õ?èL×?ïõ—ÿ$P/ªoÒt}?ûZO²]jÜ^Ýe´èWe+ÝD <‘£ÑA É Š7¬®…Ž£7Ší!¾’ËÃæìÇuX\Ëö„qس…ÛŒü¤ƒéŸðêŸô&kŸ÷úËÿ’(ÿ„‡Tÿ¡3\ÿ¿Ö_ü‘@­«­¾­as=þ³6­±~³XØÆ×F‚´¶e„«,ncØS…ÎÁ–\ûcO¾ƒQÓîu«O°ÚÜi‹öOÍxuï—3™Ø«€ËÊçjŽ0Ç5éŸðêŸô&kŸ÷úËÿ’(ÿ„‡Tÿ¡3\ÿ¿Ö_ü‘@ÝÞ¬eñÒ.¡w¨u;Ól^i"i,\[™›ì¤€à¹Ë²]­ÈòÆÜûzÛOð6§®Iw¨K{w¦YÞÝ_£C½Ë¬,Pb,VRÛIç U§ü$:§ý šçýþ²ÿäŠ?á!Õ?èL×?ïõ—ÿ$P//<(ÚΉk†¥u¢5Æ“§ØÝ›Çó­âòƒbDV,Ȱ…P¬Ùä=wfM{þ» Jö!»ºÓ`Ôôé&˜jÓK$Ý"±ûFòs´ä®òáTǬÿ„‡Tÿ¡3\ÿ¿Ö_ü‘Gü$:§ý šçýþ²ÿäŠã×Ä6÷—zœsx†s¥(½•î³Ú[5ˆdFeØÐ(¸Pœí%V%‹¶¡ Þ¹¤Újž*»·°{-NAÔu¼WCìò™00©a&ü²ÄNH2oí?á!Õ?èL×?ïõ—ÿ$Qÿ ©ÿBf¹ÿ¬¿ù"€8 _ŸkVwþ,òï×DÒ./b´x[í“Jó$Šåê…+4n§cƺƒÛj: }F{[¨t¤—C….š´Þæ|ª  \6VÜyl|Àcç;ºøHuOú5ÏûýeÿÉÂCªЙ®ßë/þH Y¼GÒþ"ß/Œ/…Ε,‚ÔE¨*-±khð›Ts&è†àHd%H“sZÕììá$û'‹ç—û;D‹TµÎ¤Ì»7TâߌB|Õýß̵ÜÂCªЙ®ßë/þH£þSþ„ÍsþÿYòEnA<7Vñ\[ËÐJã’6 ®¤dGÎkÀŸòO<5ÿ`«_ý´ÂCªЙ®ßë/þH«±¸Ó<¡Ø^GåÝZéöðÌ›Úë†zPÅQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ÿÙlibstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/validator/DynaValidatorActionForm.html0000644000175000017500000005140510404045240032746 0ustar arnaudarnaud00000000000000 DynaValidatorActionForm (Apache Struts API Documentation)

    org.apache.struts.validator
    Class DynaValidatorActionForm

    java.lang.Object
      |
      +--org.apache.struts.action.ActionForm
            |
            +--org.apache.struts.action.DynaActionForm
                  |
                  +--org.apache.struts.validator.DynaValidatorForm
                        |
                        +--org.apache.struts.validator.DynaValidatorActionForm
    
    All Implemented Interfaces:
    org.apache.commons.beanutils.DynaBean, java.io.Serializable

    public class DynaValidatorActionForm
    extends DynaValidatorForm
    implements org.apache.commons.beanutils.DynaBean, java.io.Serializable

    This class extends DynaValidatorForm and provides basic field validation based on an XML file. The key passed into the validator is the action element's 'path' attribute from the struts-config.xml which should match the form element's name attribute in the validation.xml.

    • See ValidatorPlugin definition in struts-config.xml for validation rules.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:43:31 +0100 (Fri, 22 Aug 2003) $
    Author:
    David Winterfeldt
    See Also:
    Serialized Form

    Field Summary
    private static org.apache.commons.logging.Log log
              Commons Logging instance.
     
    Fields inherited from class org.apache.struts.validator.DynaValidatorForm
    page, validatorResults
     
    Fields inherited from class org.apache.struts.action.DynaActionForm
    dynaClass, dynaValues
     
    Fields inherited from class org.apache.struts.action.ActionForm
    multipartRequestHandler, servlet
     
    Constructor Summary
    DynaValidatorActionForm()
               
     
    Method Summary
     ActionErrors validate(ActionMapping mapping, javax.servlet.http.HttpServletRequest request)
              Validate the properties that have been set from this HTTP request, and return an ActionErrors object that encapsulates any validation errors that have been found.
     
    Methods inherited from class org.apache.struts.validator.DynaValidatorForm
    getPage, getResultValueMap, getValidatorResults, log, log, reset, setPage, setValidatorResults
     
    Methods inherited from class org.apache.struts.action.DynaActionForm
    contains, get, get, get, getDynaClass, getDynaProperty, getMap, initialize, isDynaAssignable, remove, reset, set, set, set, toString
     
    Methods inherited from class org.apache.struts.action.ActionForm
    getMultipartRequestHandler, getServlet, getServletWrapper, setMultipartRequestHandler, setServlet, validate
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
     
    Methods inherited from interface org.apache.commons.beanutils.DynaBean
    contains, get, get, get, getDynaClass, remove, set, set, set
     

    Field Detail

    log

    private static org.apache.commons.logging.Log log
    Commons Logging instance.

    Constructor Detail

    DynaValidatorActionForm

    public DynaValidatorActionForm()
    Method Detail

    validate

    public ActionErrors validate(ActionMapping mapping,
                                 javax.servlet.http.HttpServletRequest request)
    Validate the properties that have been set from this HTTP request, and return an ActionErrors object that encapsulates any validation errors that have been found. If no errors are found, return null or an ActionErrors object with no recorded error messages.

    Overrides:
    validate in class DynaValidatorForm
    Parameters:
    mapping - The mapping used to select this instance.
    request - The servlet request we are processing.
    Returns:
    ActionErrors containing validation errors.


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/validator/DynaValidatorForm.html0000644000175000017500000007004710404045222031613 0ustar arnaudarnaud00000000000000 DynaValidatorForm (Apache Struts API Documentation)

    org.apache.struts.validator
    Class DynaValidatorForm

    java.lang.Object
      |
      +--org.apache.struts.action.ActionForm
            |
            +--org.apache.struts.action.DynaActionForm
                  |
                  +--org.apache.struts.validator.DynaValidatorForm
    
    All Implemented Interfaces:
    org.apache.commons.beanutils.DynaBean, java.io.Serializable
    Direct Known Subclasses:
    DynaValidatorActionForm

    public class DynaValidatorForm
    extends DynaActionForm
    implements org.apache.commons.beanutils.DynaBean, java.io.Serializable

    This class extends DynaActionForm and provides basic field validation based on an XML file. The key passed into the validator is the action element's 'name' attribute from the struts-config.xml which should match the form element's name attribute in the validation.xml.

    • See ValidatorPlugin definition in struts-config.xml for validation rules.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:43:31 +0100 (Fri, 22 Aug 2003) $
    Author:
    David Winterfeldt
    See Also:
    ActionForm, Serialized Form

    Field Summary
    private static org.apache.commons.logging.Log log
              Commons Logging instance.
    protected  int page
              Used to indicate the current page of a multi-page form.
    protected  org.apache.commons.validator.ValidatorResults validatorResults
              The results returned from the validation performed by the Validator.
     
    Fields inherited from class org.apache.struts.action.DynaActionForm
    dynaClass, dynaValues
     
    Fields inherited from class org.apache.struts.action.ActionForm
    multipartRequestHandler, servlet
     
    Constructor Summary
    DynaValidatorForm()
               
     
    Method Summary
     int getPage()
              Gets page.
     java.util.Map getResultValueMap()
              Returns a Map of values returned from any validation that returns a value other than null or Boolean with the key the full property path of the field.
     org.apache.commons.validator.ValidatorResults getValidatorResults()
              Get results of the validation performed by the Validator.
    protected  void log(java.lang.String message)
              Deprecated. Use common-logging, or other logging implementation to log debug messages.
    protected  void log(java.lang.String message, java.lang.Throwable throwable)
              Deprecated. Use common-logging, or other logging implementation to log debug messages.
     void reset(ActionMapping mapping, javax.servlet.http.HttpServletRequest request)
              Reset all properties to their default values.
     void setPage(int page)
              Sets page.
     void setValidatorResults(org.apache.commons.validator.ValidatorResults validatorResults)
              Set results of the validation performed by the Validator.
     ActionErrors validate(ActionMapping mapping, javax.servlet.http.HttpServletRequest request)
              Validate the properties that have been set from this HTTP request, and return an ActionErrors object that encapsulates any validation errors that have been found.
     
    Methods inherited from class org.apache.struts.action.DynaActionForm
    contains, get, get, get, getDynaClass, getDynaProperty, getMap, initialize, isDynaAssignable, remove, reset, set, set, set, toString
     
    Methods inherited from class org.apache.struts.action.ActionForm
    getMultipartRequestHandler, getServlet, getServletWrapper, setMultipartRequestHandler, setServlet, validate
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
     
    Methods inherited from interface org.apache.commons.beanutils.DynaBean
    contains, get, get, get, getDynaClass, remove, set, set, set
     

    Field Detail

    log

    private static org.apache.commons.logging.Log log
    Commons Logging instance.


    validatorResults

    protected org.apache.commons.validator.ValidatorResults validatorResults
    The results returned from the validation performed by the Validator.


    page

    protected int page
    Used to indicate the current page of a multi-page form.

    Constructor Detail

    DynaValidatorForm

    public DynaValidatorForm()
    Method Detail

    getPage

    public int getPage()
    Gets page.

    Returns:
    page number.

    setPage

    public void setPage(int page)
    Sets page.

    Parameters:
    page - page number

    validate

    public ActionErrors validate(ActionMapping mapping,
                                 javax.servlet.http.HttpServletRequest request)
    Validate the properties that have been set from this HTTP request, and return an ActionErrors object that encapsulates any validation errors that have been found. If no errors are found, return null or an ActionErrors object with no recorded error messages.

    Overrides:
    validate in class ActionForm
    Parameters:
    mapping - The mapping used to select this instance.
    request - The servlet request we are processing.
    Returns:
    ActionErrors object that encapsulates any validation errors.

    log

    protected void log(java.lang.String message)
    Deprecated. Use common-logging, or other logging implementation to log debug messages.

    Convenience method that call the comparable servlet log method and writes an explanatory message and a stack trace for a given Throwable exception to the servlet log file.

    Parameters:
    message - String that describes the error or exception

    log

    protected void log(java.lang.String message,
                       java.lang.Throwable throwable)
    Deprecated. Use common-logging, or other logging implementation to log debug messages.

    Convenience method that call the comparable servlet log method and writes an explanatory message and a stack trace for a given Throwable exception to the servlet log file.

    Parameters:
    message - String that describes the error or exception
    throwable - Throwable error or exception

    reset

    public void reset(ActionMapping mapping,
                      javax.servlet.http.HttpServletRequest request)
    Reset all properties to their default values.

    Overrides:
    reset in class DynaActionForm
    Parameters:
    mapping - The mapping used to select this instance
    request - The servlet request we are processing

    getValidatorResults

    public org.apache.commons.validator.ValidatorResults getValidatorResults()
    Get results of the validation performed by the Validator.

    Returns:
    validator results as ValidatorResults object

    setValidatorResults

    public void setValidatorResults(org.apache.commons.validator.ValidatorResults validatorResults)
    Set results of the validation performed by the Validator.

    Parameters:
    validatorResults - Set results of the validation performed

    getResultValueMap

    public java.util.Map getResultValueMap()
    Returns a Map of values returned from any validation that returns a value other than null or Boolean with the key the full property path of the field.

    Returns:
    Returns a Map of values, otherwise returns null if no results.


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/validator/FieldChecks.html0000644000175000017500000016241410404045210030367 0ustar arnaudarnaud00000000000000 FieldChecks (Apache Struts API Documentation)

    org.apache.struts.validator
    Class FieldChecks

    java.lang.Object
      |
      +--org.apache.struts.validator.FieldChecks
    
    All Implemented Interfaces:
    java.io.Serializable

    public class FieldChecks
    extends java.lang.Object
    implements java.io.Serializable

    This class contains the default validations that are used in the validator-rules.xml file.

    In general passing in a null or blank will return a null Object or a false boolean. However, nulls and blanks do not result in an error being added to the errors.

    Since:
    Struts 1.1
    Author:
    David Winterfeldt, James Turner, Rob Leland
    See Also:
    Serialized Form

    Field Summary
    static java.lang.String FIELD_TEST_EQUAL
               
    static java.lang.String FIELD_TEST_NOTNULL
               
    static java.lang.String FIELD_TEST_NULL
               
    private static org.apache.commons.logging.Log log
              Commons Logging instance.
     
    Constructor Summary
    FieldChecks()
               
     
    Method Summary
    protected static boolean isString(java.lang.Object o)
              Return true if the specified object is a String or a null value.
    static java.lang.Byte validateByte(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
              Checks if the field can safely be converted to a byte primitive.
    static java.lang.Long validateCreditCard(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
              Checks if the field is a valid credit card number.
    static java.util.Date validateDate(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
              Checks if the field is a valid date.
    static java.lang.Double validateDouble(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
              Checks if the field can safely be converted to a double primitive.
    static boolean validateDoubleRange(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
              Checks if a fields value is within a range (min & max specified in the vars attribute).
    static boolean validateEmail(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
              Checks if a field has a valid e-mail address.
    static java.lang.Float validateFloat(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
              Checks if the field can safely be converted to a float primitive.
    static boolean validateFloatRange(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
              Checks if a fields value is within a range (min & max specified in the vars attribute).
    static java.lang.Integer validateInteger(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
              Checks if the field can safely be converted to an int primitive.
    static boolean validateIntRange(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
              Checks if a fields value is within a range (min & max specified in the vars attribute).
    static java.lang.Long validateLong(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
              Checks if the field can safely be converted to a long primitive.
    static boolean validateMask(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
              Checks if the field matches the regular expression in the field's mask attribute.
    static boolean validateMaxLength(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
              Checks if the field's length is less than or equal to the maximum value.
    static boolean validateMinLength(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
              Checks if the field's length is greater than or equal to the minimum value.
    static boolean validateRange(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
              Deprecated. As of Struts 1.1, replaced by validateIntRange(java.lang.Object,org.apache.commons.validator.ValidatorAction,org.apache.commons.validator.Field,org.apache.struts.action.ActionErrors,javax.servlet.http.HttpServletRequest)
    static boolean validateRequired(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
              Checks if the field isn't null and length of the field is greater than zero not including whitespace.
    static boolean validateRequiredIf(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, org.apache.commons.validator.Validator validator, javax.servlet.http.HttpServletRequest request)
              Checks if the field isn't null based on the values of other fields.
    static java.lang.Short validateShort(java.lang.Object bean, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field, ActionErrors errors, javax.servlet.http.HttpServletRequest request)
              Checks if the field can safely be converted to a short primitive.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    log

    private static final org.apache.commons.logging.Log log
    Commons Logging instance.


    FIELD_TEST_NULL

    public static final java.lang.String FIELD_TEST_NULL
    See Also:
    Constant Field Values

    FIELD_TEST_NOTNULL

    public static final java.lang.String FIELD_TEST_NOTNULL
    See Also:
    Constant Field Values

    FIELD_TEST_EQUAL

    public static final java.lang.String FIELD_TEST_EQUAL
    See Also:
    Constant Field Values
    Constructor Detail

    FieldChecks

    public FieldChecks()
    Method Detail

    validateRequired

    public static boolean validateRequired(java.lang.Object bean,
                                           org.apache.commons.validator.ValidatorAction va,
                                           org.apache.commons.validator.Field field,
                                           ActionErrors errors,
                                           javax.servlet.http.HttpServletRequest request)
    Checks if the field isn't null and length of the field is greater than zero not including whitespace.

    Parameters:
    bean - The bean validation is being performed on.
    va - The ValidatorAction that is currently being performed.
    field - The Field object associated with the current field being validated.
    errors - The ActionErrors object to add errors to if any validation errors occur.
    request - Current request object.
    Returns:
    true if meets stated requirements, false otherwise.

    validateRequiredIf

    public static boolean validateRequiredIf(java.lang.Object bean,
                                             org.apache.commons.validator.ValidatorAction va,
                                             org.apache.commons.validator.Field field,
                                             ActionErrors errors,
                                             org.apache.commons.validator.Validator validator,
                                             javax.servlet.http.HttpServletRequest request)
    Checks if the field isn't null based on the values of other fields.

    Parameters:
    bean - The bean validation is being performed on.
    va - The ValidatorAction that is currently being performed.
    field - The Field object associated with the current field being validated.
    errors - The ActionErrors object to add errors to if any validation errors occur.
    validator - The Validator instance, used to access other field values.
    request - Current request object.
    Returns:
    true if meets stated requirements, false otherwise.

    validateMask

    public static boolean validateMask(java.lang.Object bean,
                                       org.apache.commons.validator.ValidatorAction va,
                                       org.apache.commons.validator.Field field,
                                       ActionErrors errors,
                                       javax.servlet.http.HttpServletRequest request)
    Checks if the field matches the regular expression in the field's mask attribute.

    Parameters:
    bean - The bean validation is being performed on.
    va - The ValidatorAction that is currently being performed.
    field - The Field object associated with the current field being validated.
    errors - The ActionErrors object to add errors to if any validation errors occur.
    request - Current request object.
    Returns:
    true if field matches mask, false otherwise.

    validateByte

    public static java.lang.Byte validateByte(java.lang.Object bean,
                                              org.apache.commons.validator.ValidatorAction va,
                                              org.apache.commons.validator.Field field,
                                              ActionErrors errors,
                                              javax.servlet.http.HttpServletRequest request)
    Checks if the field can safely be converted to a byte primitive.

    Parameters:
    bean - The bean validation is being performed on.
    va - The ValidatorAction that is currently being performed.
    field - The Field object associated with the current field being validated.
    errors - The ActionErrors object to add errors to if any validation errors occur.
    request - Current request object.
    Returns:
    A Byte if valid, null otherwise.

    validateShort

    public static java.lang.Short validateShort(java.lang.Object bean,
                                                org.apache.commons.validator.ValidatorAction va,
                                                org.apache.commons.validator.Field field,
                                                ActionErrors errors,
                                                javax.servlet.http.HttpServletRequest request)
    Checks if the field can safely be converted to a short primitive.

    Parameters:
    bean - The bean validation is being performed on.
    va - The ValidatorAction that is currently being performed.
    field - The Field object associated with the current field being validated.
    errors - The ActionErrors object to add errors to if any validation errors occur.
    request - Current request object.
    Returns:
    A Short if valid, otherwise null.

    validateInteger

    public static java.lang.Integer validateInteger(java.lang.Object bean,
                                                    org.apache.commons.validator.ValidatorAction va,
                                                    org.apache.commons.validator.Field field,
                                                    ActionErrors errors,
                                                    javax.servlet.http.HttpServletRequest request)
    Checks if the field can safely be converted to an int primitive.

    Parameters:
    bean - The bean validation is being performed on.
    va - The ValidatorAction that is currently being performed.
    field - The Field object associated with the current field being validated.
    errors - The ActionErrors object to add errors to if any validation errors occur.
    request - Current request object.
    Returns:
    An Integer if valid, a null otherwise.

    validateLong

    public static java.lang.Long validateLong(java.lang.Object bean,
                                              org.apache.commons.validator.ValidatorAction va,
                                              org.apache.commons.validator.Field field,
                                              ActionErrors errors,
                                              javax.servlet.http.HttpServletRequest request)
    Checks if the field can safely be converted to a long primitive.

    Parameters:
    bean - The bean validation is being performed on.
    va - The ValidatorAction that is currently being performed.
    field - The Field object associated with the current field being validated.
    errors - The ActionErrors object to add errors to if any validation errors occur.
    request - Current request object.
    Returns:
    A Long if valid, a null otherwise.

    validateFloat

    public static java.lang.Float validateFloat(java.lang.Object bean,
                                                org.apache.commons.validator.ValidatorAction va,
                                                org.apache.commons.validator.Field field,
                                                ActionErrors errors,
                                                javax.servlet.http.HttpServletRequest request)
    Checks if the field can safely be converted to a float primitive.

    Parameters:
    bean - The bean validation is being performed on.
    va - The ValidatorAction that is currently being performed.
    field - The Field object associated with the current field being validated.
    errors - The ActionErrors object to add errors to if any validation errors occur.
    request - Current request object.
    Returns:
    A Float if valid, a null otherwise.

    validateDouble

    public static java.lang.Double validateDouble(java.lang.Object bean,
                                                  org.apache.commons.validator.ValidatorAction va,
                                                  org.apache.commons.validator.Field field,
                                                  ActionErrors errors,
                                                  javax.servlet.http.HttpServletRequest request)
    Checks if the field can safely be converted to a double primitive.

    Parameters:
    bean - The bean validation is being performed on.
    va - The ValidatorAction that is currently being performed.
    field - The Field object associated with the current field being validated.
    errors - The ActionErrors object to add errors to if any validation errors occur.
    request - Current request object.
    Returns:
    A Double if valid, a null otherwise.

    validateDate

    public static java.util.Date validateDate(java.lang.Object bean,
                                              org.apache.commons.validator.ValidatorAction va,
                                              org.apache.commons.validator.Field field,
                                              ActionErrors errors,
                                              javax.servlet.http.HttpServletRequest request)
    Checks if the field is a valid date. If the field has a datePattern variable, that will be used to format java.text.SimpleDateFormat. If the field has a datePatternStrict variable, that will be used to format java.text.SimpleDateFormat and the length will be checked so '2/12/1999' will not pass validation with the format 'MM/dd/yyyy' because the month isn't two digits. If no datePattern variable is specified, then the field gets the DateFormat.SHORT format for the locale. The setLenient method is set to false for all variations.

    Parameters:
    bean - The bean validation is being performed on.
    va - The ValidatorAction that is currently being performed.
    field - The Field object associated with the current field being validated.
    errors - The ActionErrors object to add errors to if any validation errors occur.
    request - Current request object.
    Returns:
    A Date if valid, a null if blank or invalid.

    validateRange

    public static boolean validateRange(java.lang.Object bean,
                                        org.apache.commons.validator.ValidatorAction va,
                                        org.apache.commons.validator.Field field,
                                        ActionErrors errors,
                                        javax.servlet.http.HttpServletRequest request)
    Deprecated. As of Struts 1.1, replaced by validateIntRange(java.lang.Object,org.apache.commons.validator.ValidatorAction,org.apache.commons.validator.Field,org.apache.struts.action.ActionErrors,javax.servlet.http.HttpServletRequest)

    Checks if a fields value is within a range (min & max specified in the vars attribute).

    Parameters:
    bean - The bean validation is being performed on.
    va - The ValidatorAction that is currently being performed.
    field - The Field object associated with the current field being validated.
    errors - The ActionErrors object to add errors to if any validation errors occur.
    request - Current request object.
    Returns:
    True if in range, false otherwise.

    validateIntRange

    public static boolean validateIntRange(java.lang.Object bean,
                                           org.apache.commons.validator.ValidatorAction va,
                                           org.apache.commons.validator.Field field,
                                           ActionErrors errors,
                                           javax.servlet.http.HttpServletRequest request)
    Checks if a fields value is within a range (min & max specified in the vars attribute).

    Parameters:
    bean - The bean validation is being performed on.
    va - The ValidatorAction that is currently being performed.
    field - The Field object associated with the current field being validated.
    errors - The ActionErrors object to add errors to if any validation errors occur.
    request - Current request object.
    Returns:
    True if in range, false otherwise.

    validateDoubleRange

    public static boolean validateDoubleRange(java.lang.Object bean,
                                              org.apache.commons.validator.ValidatorAction va,
                                              org.apache.commons.validator.Field field,
                                              ActionErrors errors,
                                              javax.servlet.http.HttpServletRequest request)
    Checks if a fields value is within a range (min & max specified in the vars attribute).

    Parameters:
    bean - The bean validation is being performed on.
    va - The ValidatorAction that is currently being performed.
    field - The Field object associated with the current field being validated.
    errors - The ActionErrors object to add errors to if any validation errors occur.
    request - Current request object.
    Returns:
    True if in range, false otherwise.

    validateFloatRange

    public static boolean validateFloatRange(java.lang.Object bean,
                                             org.apache.commons.validator.ValidatorAction va,
                                             org.apache.commons.validator.Field field,
                                             ActionErrors errors,
                                             javax.servlet.http.HttpServletRequest request)
    Checks if a fields value is within a range (min & max specified in the vars attribute).

    Parameters:
    bean - The bean validation is being performed on.
    va - The ValidatorAction that is currently being performed.
    field - The Field object associated with the current field being validated.
    errors - The ActionErrors object to add errors to if any validation errors occur.
    request - Current request object.
    Returns:
    True if in range, false otherwise.

    validateCreditCard

    public static java.lang.Long validateCreditCard(java.lang.Object bean,
                                                    org.apache.commons.validator.ValidatorAction va,
                                                    org.apache.commons.validator.Field field,
                                                    ActionErrors errors,
                                                    javax.servlet.http.HttpServletRequest request)
    Checks if the field is a valid credit card number.

    Parameters:
    bean - The bean validation is being performed on.
    va - The ValidatorAction that is currently being performed.
    field - The Field object associated with the current field being validated.
    errors - The ActionErrors object to add errors to if any validation errors occur.
    request - Current request object.
    Returns:
    The credit card as a Long, a null if invalid, blank, or null.

    validateEmail

    public static boolean validateEmail(java.lang.Object bean,
                                        org.apache.commons.validator.ValidatorAction va,
                                        org.apache.commons.validator.Field field,
                                        ActionErrors errors,
                                        javax.servlet.http.HttpServletRequest request)
    Checks if a field has a valid e-mail address.

    Parameters:
    bean - The bean validation is being performed on.
    va - The ValidatorAction that is currently being performed.
    field - The Field object associated with the current field being validated.
    errors - The ActionErrors object to add errors to if any validation errors occur.
    request - Current request object.
    Returns:
    True if valid, false otherwise.

    validateMaxLength

    public static boolean validateMaxLength(java.lang.Object bean,
                                            org.apache.commons.validator.ValidatorAction va,
                                            org.apache.commons.validator.Field field,
                                            ActionErrors errors,
                                            javax.servlet.http.HttpServletRequest request)
    Checks if the field's length is less than or equal to the maximum value. A Null will be considered an error.

    Parameters:
    bean - The bean validation is being performed on.
    va - The ValidatorAction that is currently being performed.
    field - The Field object associated with the current field being validated.
    errors - The ActionErrors object to add errors to if any validation errors occur.
    request - Current request object.
    Returns:
    True if stated conditions met.

    validateMinLength

    public static boolean validateMinLength(java.lang.Object bean,
                                            org.apache.commons.validator.ValidatorAction va,
                                            org.apache.commons.validator.Field field,
                                            ActionErrors errors,
                                            javax.servlet.http.HttpServletRequest request)
    Checks if the field's length is greater than or equal to the minimum value. A Null will be considered an error.

    Parameters:
    bean - The bean validation is being performed on.
    va - The ValidatorAction that is currently being performed.
    field - The Field object associated with the current field being validated.
    errors - The ActionErrors object to add errors to if any validation errors occur.
    request - Current request object.
    Returns:
    True if stated conditions met.

    isString

    protected static boolean isString(java.lang.Object o)
    Return true if the specified object is a String or a null value.

    Parameters:
    o - Object to be tested
    Returns:
    The string value


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/validator/Resources.html0000644000175000017500000006746010404045222030205 0ustar arnaudarnaud00000000000000 Resources (Apache Struts API Documentation)

    org.apache.struts.validator
    Class Resources

    java.lang.Object
      |
      +--org.apache.struts.validator.Resources
    

    public class Resources
    extends java.lang.Object

    This class helps provides some useful methods for retrieving objects from different scopes of the application.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:43:31 +0100 (Fri, 22 Aug 2003) $
    Author:
    David Winterfeldt, Eddie Bush

    Field Summary
    static java.lang.String ACTION_ERRORS_KEY
              Resources key the ActionErrors is stored under.
    static java.lang.String HTTP_SERVLET_REQUEST_KEY
              Resources key the HttpServletRequest is stored under.
    static java.lang.String SERVLET_CONTEXT_KEY
              Resources key the ServletContext is stored under.
     
    Constructor Summary
    Resources()
               
     
    Method Summary
    static ActionError getActionError(javax.servlet.http.HttpServletRequest request, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field)
              Gets the ActionError based on the ValidatorAction message and the Field's arg objects.
    static java.lang.String[] getArgs(java.lang.String actionName, MessageResources messages, java.util.Locale locale, org.apache.commons.validator.Field field)
              Gets the message arguments based on the current ValidatorAction and Field.
    static java.util.Locale getLocale(javax.servlet.http.HttpServletRequest request)
              Get the Locale of the current user.
    static java.lang.String getMessage(javax.servlet.http.HttpServletRequest request, java.lang.String key)
              Gets the Locale sensitive value based on the key passed in.
    static java.lang.String getMessage(MessageResources messages, java.util.Locale locale, java.lang.String key)
              Gets the Locale sensitive value based on the key passed in.
    static java.lang.String getMessage(MessageResources messages, java.util.Locale locale, org.apache.commons.validator.ValidatorAction va, org.apache.commons.validator.Field field)
              Gets the locale sensitive message based on the ValidatorAction message and the Field's arg objects.
    static MessageResources getMessageResources(javax.servlet.http.HttpServletRequest request)
              Retrieve MessageResources for the module.
    static MessageResources getMessageResources(javax.servlet.ServletContext application)
              Deprecated. This method can only return the resources for the default module. Use getMessageResources(HttpServletRequest) to get the resources for the current module.
    static org.apache.commons.validator.ValidatorResources getValidatorResources(javax.servlet.ServletContext application)
              Deprecated. In Struts 1.1 This method can only return the resources for the default module. Use getValidatorResources(HttpServletRequest, ServletContext) to get the resources for the current application module.
    static org.apache.commons.validator.ValidatorResources getValidatorResources(javax.servlet.ServletContext application, javax.servlet.http.HttpServletRequest request)
              Retrieve ValidatorResources for the current module.
    static org.apache.commons.validator.Validator initValidator(java.lang.String key, java.lang.Object bean, javax.servlet.ServletContext application, javax.servlet.http.HttpServletRequest request, ActionErrors errors, int page)
              Initialize the Validator to perform validation.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    SERVLET_CONTEXT_KEY

    public static java.lang.String SERVLET_CONTEXT_KEY
    Resources key the ServletContext is stored under.


    HTTP_SERVLET_REQUEST_KEY

    public static java.lang.String HTTP_SERVLET_REQUEST_KEY
    Resources key the HttpServletRequest is stored under.


    ACTION_ERRORS_KEY

    public static java.lang.String ACTION_ERRORS_KEY
    Resources key the ActionErrors is stored under.

    Constructor Detail

    Resources

    public Resources()
    Method Detail

    getValidatorResources

    public static org.apache.commons.validator.ValidatorResources getValidatorResources(javax.servlet.ServletContext application)
    Deprecated. In Struts 1.1 This method can only return the resources for the default module. Use getValidatorResources(HttpServletRequest, ServletContext) to get the resources for the current application module.

    Retrieve ValidatorResources for the module.

    Parameters:
    application - servlet context

    getValidatorResources

    public static org.apache.commons.validator.ValidatorResources getValidatorResources(javax.servlet.ServletContext application,
                                                                                        javax.servlet.http.HttpServletRequest request)
    Retrieve ValidatorResources for the current module.

    Parameters:
    application - Application Context
    request - The ServletRequest

    getMessageResources

    public static MessageResources getMessageResources(javax.servlet.ServletContext application)
    Deprecated. This method can only return the resources for the default module. Use getMessageResources(HttpServletRequest) to get the resources for the current module.

    Retrieve MessageResources for the application module.

    Parameters:
    application - servlet context

    getMessageResources

    public static MessageResources getMessageResources(javax.servlet.http.HttpServletRequest request)
    Retrieve MessageResources for the module.

    Parameters:
    request - the servlet request

    getLocale

    public static java.util.Locale getLocale(javax.servlet.http.HttpServletRequest request)
    Get the Locale of the current user.

    Parameters:
    request - servlet request

    getMessage

    public static java.lang.String getMessage(MessageResources messages,
                                              java.util.Locale locale,
                                              java.lang.String key)
    Gets the Locale sensitive value based on the key passed in.

    Parameters:
    messages - The Message resources
    locale - The locale.
    key - Key used to lookup the message

    getMessage

    public static java.lang.String getMessage(javax.servlet.http.HttpServletRequest request,
                                              java.lang.String key)
    Gets the Locale sensitive value based on the key passed in.

    Parameters:
    request - servlet request
    key - the request key

    getMessage

    public static java.lang.String getMessage(MessageResources messages,
                                              java.util.Locale locale,
                                              org.apache.commons.validator.ValidatorAction va,
                                              org.apache.commons.validator.Field field)
    Gets the locale sensitive message based on the ValidatorAction message and the Field's arg objects.

    Parameters:
    messages - The Message resources
    locale - The locale
    va - The Validator Action
    field - The Validator Field

    getActionError

    public static ActionError getActionError(javax.servlet.http.HttpServletRequest request,
                                             org.apache.commons.validator.ValidatorAction va,
                                             org.apache.commons.validator.Field field)
    Gets the ActionError based on the ValidatorAction message and the Field's arg objects.

    Parameters:
    request - the servlet request
    va - Validator action
    field - the validator Field

    getArgs

    public static java.lang.String[] getArgs(java.lang.String actionName,
                                             MessageResources messages,
                                             java.util.Locale locale,
                                             org.apache.commons.validator.Field field)
    Gets the message arguments based on the current ValidatorAction and Field.

    Parameters:
    actionName - action name
    messages - message resources
    locale - the locale
    field - the validator field

    initValidator

    public static org.apache.commons.validator.Validator initValidator(java.lang.String key,
                                                                       java.lang.Object bean,
                                                                       javax.servlet.ServletContext application,
                                                                       javax.servlet.http.HttpServletRequest request,
                                                                       ActionErrors errors,
                                                                       int page)
    Initialize the Validator to perform validation.

    Parameters:
    key - The key that the validation rules are under (the form elements name attribute).
    bean - The bean validation is being performed on.
    application - servlet context
    request - The current request object.
    errors - The object any errors will be stored in.
    page - This in conjunction with the page property of a Field can control the processing of fields. If the field's page is less than or equal to this page value, it will be processed.


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/validator/ValidatorActionForm.html0000644000175000017500000004266010404045234032140 0ustar arnaudarnaud00000000000000 ValidatorActionForm (Apache Struts API Documentation)

    org.apache.struts.validator
    Class ValidatorActionForm

    java.lang.Object
      |
      +--org.apache.struts.action.ActionForm
            |
            +--org.apache.struts.validator.ValidatorForm
                  |
                  +--org.apache.struts.validator.ValidatorActionForm
    
    All Implemented Interfaces:
    java.io.Serializable

    public class ValidatorActionForm
    extends ValidatorForm
    implements java.io.Serializable

    This class extends ValidatorForm and provides basic field validation based on an XML file. The key passed into the validator is the action element's 'path' attribute from the struts-config.xml which should match the form element's name attribute in the validation.xml.

    • See ValidatorPlugin definition in struts-config.xml for validation rules.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:43:31 +0100 (Fri, 22 Aug 2003) $
    Author:
    David Winterfeldt
    See Also:
    Serialized Form

    Field Summary
    private static org.apache.commons.logging.Log log
              Commons Logging instance.
     
    Fields inherited from class org.apache.struts.validator.ValidatorForm
    page, validatorResults
     
    Fields inherited from class org.apache.struts.action.ActionForm
    multipartRequestHandler, servlet
     
    Constructor Summary
    ValidatorActionForm()
               
     
    Method Summary
     ActionErrors validate(ActionMapping mapping, javax.servlet.http.HttpServletRequest request)
              Validate the properties that have been set from this HTTP request, and return an ActionErrors object that encapsulates any validation errors that have been found.
     
    Methods inherited from class org.apache.struts.validator.ValidatorForm
    getPage, getResultValueMap, getValidatorResults, log, log, reset, setPage, setValidatorResults
     
    Methods inherited from class org.apache.struts.action.ActionForm
    getMultipartRequestHandler, getServlet, getServletWrapper, reset, setMultipartRequestHandler, setServlet, validate
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    log

    private static org.apache.commons.logging.Log log
    Commons Logging instance.

    Constructor Detail

    ValidatorActionForm

    public ValidatorActionForm()
    Method Detail

    validate

    public ActionErrors validate(ActionMapping mapping,
                                 javax.servlet.http.HttpServletRequest request)
    Validate the properties that have been set from this HTTP request, and return an ActionErrors object that encapsulates any validation errors that have been found. If no errors are found, return null or an ActionErrors object with no recorded error messages.

    Overrides:
    validate in class ValidatorForm
    Parameters:
    mapping - The mapping used to select this instance
    request - The servlet request we are processing
    Returns:
    ActionErrors object that encapsulates any validation errors


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/validator/ValidatorForm.html0000644000175000017500000006056610404045242031006 0ustar arnaudarnaud00000000000000 ValidatorForm (Apache Struts API Documentation)

    org.apache.struts.validator
    Class ValidatorForm

    java.lang.Object
      |
      +--org.apache.struts.action.ActionForm
            |
            +--org.apache.struts.validator.ValidatorForm
    
    All Implemented Interfaces:
    java.io.Serializable
    Direct Known Subclasses:
    ValidatorActionForm

    public class ValidatorForm
    extends ActionForm
    implements java.io.Serializable

    This class extends ActionForm and provides basic field validation based on an XML file. The key passed into the validator is the action element's 'name' attribute from the struts-config.xml which should match the form element's name attribute in the validation.xml.

    • See ValidatorPlugin definition in struts-config.xml for validation rules.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:43:31 +0100 (Fri, 22 Aug 2003) $
    Author:
    David Winterfeldt
    See Also:
    ActionForm, Serialized Form

    Field Summary
    private static org.apache.commons.logging.Log log
              Commons Logging instance.
    protected  int page
              Used to indicate the current page of a multi-page form.
    protected  org.apache.commons.validator.ValidatorResults validatorResults
              The results returned from the validation performed by the Validator.
     
    Fields inherited from class org.apache.struts.action.ActionForm
    multipartRequestHandler, servlet
     
    Constructor Summary
    ValidatorForm()
               
     
    Method Summary
     int getPage()
              Gets page.
     java.util.Map getResultValueMap()
              Returns a Map of values returned from any validation that returns a value other than null or Boolean with the key the full property path of the field.
     org.apache.commons.validator.ValidatorResults getValidatorResults()
              Get results of the validation performed by the Validator.
    protected  void log(java.lang.String message)
              Deprecated. Use common-logging to log debug messages.
    protected  void log(java.lang.String message, java.lang.Throwable throwable)
              Deprecated. Use common-logging to log debug messages.
     void reset(ActionMapping mapping, javax.servlet.http.HttpServletRequest request)
              Reset all properties to their default values.
     void setPage(int page)
              Sets page.
     void setValidatorResults(org.apache.commons.validator.ValidatorResults validatorResults)
              Set results of the validation performed by the Validator.
     ActionErrors validate(ActionMapping mapping, javax.servlet.http.HttpServletRequest request)
              Validate the properties that have been set from this HTTP request, and return an ActionErrors object that encapsulates any validation errors that have been found.
     
    Methods inherited from class org.apache.struts.action.ActionForm
    getMultipartRequestHandler, getServlet, getServletWrapper, reset, setMultipartRequestHandler, setServlet, validate
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    log

    private static org.apache.commons.logging.Log log
    Commons Logging instance.


    validatorResults

    protected org.apache.commons.validator.ValidatorResults validatorResults
    The results returned from the validation performed by the Validator.


    page

    protected int page
    Used to indicate the current page of a multi-page form.

    Constructor Detail

    ValidatorForm

    public ValidatorForm()
    Method Detail

    getPage

    public int getPage()
    Gets page.

    Returns:
    page number

    setPage

    public void setPage(int page)
    Sets page.

    Parameters:
    page - page number

    validate

    public ActionErrors validate(ActionMapping mapping,
                                 javax.servlet.http.HttpServletRequest request)
    Validate the properties that have been set from this HTTP request, and return an ActionErrors object that encapsulates any validation errors that have been found. If no errors are found, return null or an ActionErrors object with no recorded error messages.

    Overrides:
    validate in class ActionForm
    Parameters:
    mapping - The mapping used to select this instance
    request - The servlet request we are processing
    Returns:
    ActionErrors object that encapsulates any validation errors

    log

    protected void log(java.lang.String message)
    Deprecated. Use common-logging to log debug messages.

    Convenience method that call the comparable servlet log method and writes an explanatory message and a stack trace for a given Throwable exception to the servlet log file.

    Parameters:
    message - String that describes the error or exception

    log

    protected void log(java.lang.String message,
                       java.lang.Throwable throwable)
    Deprecated. Use common-logging to log debug messages.

    Convenience method that call the comparable servlet log method and writes an explanatory message and a stack trace for a given Throwable exception to the servlet log file.

    Parameters:
    message - String that describes the error or exception
    throwable - Throwable error or exception

    reset

    public void reset(ActionMapping mapping,
                      javax.servlet.http.HttpServletRequest request)
    Reset all properties to their default values.

    Overrides:
    reset in class ActionForm
    Parameters:
    mapping - The mapping used to select this instance
    request - The servlet request we are processing

    getValidatorResults

    public org.apache.commons.validator.ValidatorResults getValidatorResults()
    Get results of the validation performed by the Validator.

    Returns:
    results of the validation

    setValidatorResults

    public void setValidatorResults(org.apache.commons.validator.ValidatorResults validatorResults)
    Set results of the validation performed by the Validator.

    Parameters:
    validatorResults - results of validation

    getResultValueMap

    public java.util.Map getResultValueMap()
    Returns a Map of values returned from any validation that returns a value other than null or Boolean with the key the full property path of the field.

    Returns:
    Map of non-null values


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/validator/ValidatorPlugIn.html0000644000175000017500000005120210404045216031265 0ustar arnaudarnaud00000000000000 ValidatorPlugIn (Apache Struts API Documentation)

    org.apache.struts.validator
    Class ValidatorPlugIn

    java.lang.Object
      |
      +--org.apache.struts.validator.ValidatorPlugIn
    
    All Implemented Interfaces:
    PlugIn

    public class ValidatorPlugIn
    extends java.lang.Object
    implements PlugIn

    Loads ValidatorResources based on configuration in the struts-config.xml.

    Since:
    Struts 1.1
    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:43:31 +0100 (Fri, 22 Aug 2003) $
    Author:
    David Winterfeldt

    Field Summary
    private  ModuleConfig config
              The module configuration for our owning module.
    private static org.apache.commons.logging.Log log
              Commons Logging instance.
    private  java.lang.String pathnames
              A comma delimitted list of Validator resource.
    private static java.lang.String RESOURCE_DELIM
              Delimitter for Validator resources.
    protected  org.apache.commons.validator.ValidatorResources resources
              The set of Form instances that have been created and initialized, keyed by the struts form name.
    private  ActionServlet servlet
              The ActionServlet owning this application.
    static java.lang.String VALIDATOR_KEY
              Application scope key that ValidatorResources is stored under.
     
    Constructor Summary
    ValidatorPlugIn()
               
     
    Method Summary
     void destroy()
              Gracefully shut down, releasing any resources that were allocated at initialization.
    protected  void destroyResources()
              Destroy ValidatorResources.
     java.lang.String getPathnames()
              Gets a comma delimitted list of Validator resources.
     void init(ActionServlet servlet, ModuleConfig config)
              Initialize and load our resources.
    protected  void initResources()
              Initialize the validator resources for this module.
     void setPathnames(java.lang.String pathnames)
              Sets a comma delimitted list of Validator resources.
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    log

    private static org.apache.commons.logging.Log log
    Commons Logging instance.


    config

    private ModuleConfig config
    The module configuration for our owning module.


    servlet

    private ActionServlet servlet
    The ActionServlet owning this application.


    RESOURCE_DELIM

    private static final java.lang.String RESOURCE_DELIM
    Delimitter for Validator resources.

    See Also:
    Constant Field Values

    VALIDATOR_KEY

    public static final java.lang.String VALIDATOR_KEY
    Application scope key that ValidatorResources is stored under.

    See Also:
    Constant Field Values

    resources

    protected org.apache.commons.validator.ValidatorResources resources
    The set of Form instances that have been created and initialized, keyed by the struts form name.


    pathnames

    private java.lang.String pathnames
    A comma delimitted list of Validator resource.

    Constructor Detail

    ValidatorPlugIn

    public ValidatorPlugIn()
    Method Detail

    getPathnames

    public java.lang.String getPathnames()
    Gets a comma delimitted list of Validator resources.

    Returns:
    comma delimited list of Validator resource path names

    setPathnames

    public void setPathnames(java.lang.String pathnames)
    Sets a comma delimitted list of Validator resources.

    Parameters:
    pathnames - delimited list of Validator resource path names

    init

    public void init(ActionServlet servlet,
                     ModuleConfig config)
              throws javax.servlet.ServletException
    Initialize and load our resources.

    Specified by:
    init in interface PlugIn
    Parameters:
    servlet - The ActionServlet for our application
    config - The ModuleConfig for our owning module
    Throws:
    javax.servlet.ServletException - if we cannot configure ourselves correctly

    destroy

    public void destroy()
    Gracefully shut down, releasing any resources that were allocated at initialization.

    Specified by:
    destroy in interface PlugIn

    initResources

    protected void initResources()
                          throws java.io.IOException,
                                 javax.servlet.ServletException
    Initialize the validator resources for this module.

    Throws:
    java.io.IOException - if an input/output error is encountered, not thrown by this implementation
    javax.servlet.ServletException - if we cannot initialize these resources, not thrown by this implementation

    destroyResources

    protected void destroyResources()
    Destroy ValidatorResources.



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/validator/package-frame.html0000644000175000017500000000300610404045172030704 0ustar arnaudarnaud00000000000000 org.apache.struts.validator (Apache Struts API Documentation) org.apache.struts.validator
    Classes 
    DynaValidatorActionForm
    DynaValidatorForm
    FieldChecks
    Resources
    ValidatorActionForm
    ValidatorForm
    ValidatorPlugIn
    libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/validator/package-summary.html0000644000175000017500000002036210404045244031313 0ustar arnaudarnaud00000000000000 org.apache.struts.validator (Apache Struts API Documentation)

    Package org.apache.struts.validator

    The validator package provides a series of classes to validate ActionForm type of input.

    See:
              Description

    Class Summary
    DynaValidatorActionForm This class extends DynaValidatorForm and provides basic field validation based on an XML file.
    DynaValidatorForm This class extends DynaActionForm and provides basic field validation based on an XML file.
    FieldChecks This class contains the default validations that are used in the validator-rules.xml file.
    Resources This class helps provides some useful methods for retrieving objects from different scopes of the application.
    ValidatorActionForm This class extends ValidatorForm and provides basic field validation based on an XML file.
    ValidatorForm This class extends ActionForm and provides basic field validation based on an XML file.
    ValidatorPlugIn Loads ValidatorResources based on configuration in the struts-config.xml.
     

    Package org.apache.struts.validator Description

    The validator package provides a series of classes to validate ActionForm type of input.



    Validator Package UML

    Package Specification

    ##### FILL IN ANY SPECS NEEDED BY JAVA COMPATIBILITY KIT #####

    Related Documentation

    For overviews, tutorials, examples, guides, and tool documentation, please see: Struts 1.1



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/validator/package-tree.html0000644000175000017500000001621410404045246030560 0ustar arnaudarnaud00000000000000 org.apache.struts.validator Class Hierarchy (Apache Struts API Documentation)

    Hierarchy For Package org.apache.struts.validator

    Package Hierarchies:
    All Packages

    Class Hierarchy

    • class java.lang.Object
      • class org.apache.struts.action.ActionForm (implements java.io.Serializable)
        • class org.apache.struts.action.DynaActionForm (implements org.apache.commons.beanutils.DynaBean)
          • class org.apache.struts.validator.DynaValidatorForm (implements org.apache.commons.beanutils.DynaBean, java.io.Serializable)
            • class org.apache.struts.validator.DynaValidatorActionForm (implements org.apache.commons.beanutils.DynaBean, java.io.Serializable)
        • class org.apache.struts.validator.ValidatorForm (implements java.io.Serializable)
      • class org.apache.struts.validator.FieldChecks (implements java.io.Serializable)
      • class org.apache.struts.validator.Resources
      • class org.apache.struts.validator.ValidatorPlugIn (implements org.apache.struts.action.PlugIn)


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/validator/package-use.html0000644000175000017500000001554010404045212030407 0ustar arnaudarnaud00000000000000 Uses of Package org.apache.struts.validator (Apache Struts API Documentation)

    Uses of Package
    org.apache.struts.validator

    Packages that use org.apache.struts.validator
    org.apache.struts.validator The validator package provides a series of classes to validate ActionForm type of input. 
     

    Classes in org.apache.struts.validator used by org.apache.struts.validator
    DynaValidatorForm
              This class extends DynaActionForm and provides basic field validation based on an XML file.
    ValidatorForm
              This class extends ActionForm and provides basic field validation based on an XML file.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/Globals.html0000644000175000017500000007251510404045204025626 0ustar arnaudarnaud00000000000000 Globals (Apache Struts API Documentation)

    org.apache.struts
    Class Globals

    java.lang.Object
      |
      +--org.apache.struts.Globals
    
    All Implemented Interfaces:
    java.io.Serializable

    public class Globals
    extends java.lang.Object
    implements java.io.Serializable

    Global manifest constants for the entire Struts Framework.

    Many of these constants were initially defined in Action, but were moved here so that they could be referenced without referencing the Action class itself. For backwards compatibility, constant references there point at this class, and the constant values themselves have not changed.

    Version:
    $Revision: 1.1 $ $Date: 2003-08-22 09:14:33 +0100 (Fri, 22 Aug 2003) $
    Author:
    Craig R. McClanahan
    See Also:
    Serialized Form

    Field Summary
    static java.lang.String ACTION_SERVLET_KEY
              The context attributes key under which our ActionServlet instance will be stored.
    static java.lang.String APPLICATION_KEY
              Deprecated. Use MODULE_KEY
    static java.lang.String CANCEL_KEY
              The request attributes key under which a boolean true value should be stored if this request was cancelled.
    static java.lang.String DATA_SOURCE_KEY
              The context attributes key under which our default configured data source (which must implement javax.sql.DataSource) is stored, if one is configured for this module.
    static java.lang.String ERROR_KEY
              The request attributes key under which your action should store an org.apache.struts.action.ActionErrors object, if you are using the corresponding custom tag library elements.
    static java.lang.String EXCEPTION_KEY
              The request attributes key under which Struts custom tags might store a Throwable that caused them to report a JspException at runtime.
    static java.lang.String FORM_BEANS_KEY
              Deprecated. Replaced by collection in ModuleConfig
    static java.lang.String FORWARDS_KEY
              Deprecated. Replaced by collection in ModuleConfig.
    static java.lang.String LOCALE_KEY
              The session attributes key under which the user's selected java.util.Locale is stored, if any.
    static java.lang.String MAPPING_KEY
              The request attributes key under which our org.apache.struts.ActionMapping instance is passed.
    static java.lang.String MAPPINGS_KEY
              Deprecated. Replaced by collection in ModuleConfig
    static java.lang.String MESSAGE_KEY
              The request attributes key under which your action should store an org.apache.struts.action.ActionMessages object, if you are using the corresponding custom tag library elements.
    static java.lang.String MESSAGES_KEY
              The base of the context attributes key under which our module MessageResources will be stored.
    static java.lang.String MODULE_KEY
              The base of the context attributes key under which our ModuleConfig data structure will be stored.
    static java.lang.String MULTIPART_KEY
              The request attributes key under which our multipart class is stored.
    static java.lang.String PLUG_INS_KEY
              The base of the context attributes key under which an array of PlugIn instances will be stored.
    static java.lang.String REQUEST_PROCESSOR_KEY
              The base of the context attributes key under which our RequestProcessor instance will be stored.
    static java.lang.String SERVLET_KEY
              The context attributes key under which we store the mapping defined for our controller serlet, which will be either a path-mapped pattern (/action/*) or an extension mapped pattern (*.do).
    static java.lang.String TRANSACTION_TOKEN_KEY
              The session attributes key under which our transaction token is stored, if it is used.
    static java.lang.String XHTML_KEY
              The page attributes key under which xhtml status is stored.
     
    Constructor Summary
    Globals()
               
     
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
     

    Field Detail

    ACTION_SERVLET_KEY

    public static final java.lang.String ACTION_SERVLET_KEY
    The context attributes key under which our ActionServlet instance will be stored.

    Since:
    Struts 1.1
    See Also:
    Constant Field Values

    APPLICATION_KEY

    public static final java.lang.String APPLICATION_KEY
    Deprecated. Use MODULE_KEY

    The base of the context attributes key under which our ModuleConfig data structure will be stored. This will be suffixed with the actual module prefix (including the leading "/" character) to form the actual attributes key.

    For each request processed by the controller servlet, the ModuleConfig object for the module selected by the request URI currently being processed will also be exposed under this key as a request attribute.

    Since:
    Struts 1.1
    See Also:
    Constant Field Values

    CANCEL_KEY

    public static final java.lang.String CANCEL_KEY

    The request attributes key under which a boolean true value should be stored if this request was cancelled.

    Since:
    Struts 1.1
    See Also:
    Constant Field Values

    MODULE_KEY

    public static final java.lang.String MODULE_KEY

    The base of the context attributes key under which our ModuleConfig data structure will be stored. This will be suffixed with the actual module prefix (including the leading "/" character) to form the actual attributes key.

    For each request processed by the controller servlet, the ModuleConfig object for the module selected by the request URI currently being processed will also be exposed under this key as a request attribute.

    Since:
    Struts 1.1
    See Also:
    Constant Field Values

    DATA_SOURCE_KEY

    public static final java.lang.String DATA_SOURCE_KEY
    The context attributes key under which our default configured data source (which must implement javax.sql.DataSource) is stored, if one is configured for this module.

    See Also:
    Constant Field Values

    ERROR_KEY

    public static final java.lang.String ERROR_KEY
    The request attributes key under which your action should store an org.apache.struts.action.ActionErrors object, if you are using the corresponding custom tag library elements.

    See Also:
    Constant Field Values

    EXCEPTION_KEY

    public static final java.lang.String EXCEPTION_KEY
    The request attributes key under which Struts custom tags might store a Throwable that caused them to report a JspException at runtime. This value can be used on an error page to provide more detailed information about what really went wrong.

    See Also:
    Constant Field Values

    FORM_BEANS_KEY

    public static final java.lang.String FORM_BEANS_KEY
    Deprecated. Replaced by collection in ModuleConfig

    The context attributes key under which our org.apache.struts.action.ActionFormBeans collection is normally stored, unless overridden when initializing our ActionServlet.

    See Also:
    Constant Field Values

    FORWARDS_KEY

    public static final java.lang.String FORWARDS_KEY
    Deprecated. Replaced by collection in ModuleConfig.

    The context attributes key under which our org.apache.struts.action.ActionForwards collection is normally stored, unless overridden when initializing our ActionServlet.

    See Also:
    Constant Field Values

    LOCALE_KEY

    public static final java.lang.String LOCALE_KEY
    The session attributes key under which the user's selected java.util.Locale is stored, if any. If no such attribute is found, the system default locale will be used when retrieving internationalized messages. If used, this attribute is typically set during user login processing.

    See Also:
    Constant Field Values

    MAPPING_KEY

    public static final java.lang.String MAPPING_KEY
    The request attributes key under which our org.apache.struts.ActionMapping instance is passed.

    See Also:
    Constant Field Values

    MAPPINGS_KEY

    public static final java.lang.String MAPPINGS_KEY
    Deprecated. Replaced by collection in ModuleConfig

    The context attributes key under which our org.apache.struts.action.ActionMappings collection is normally stored, unless overridden when initializing our ActionServlet.

    See Also:
    Constant Field Values

    MESSAGE_KEY

    public static final java.lang.String MESSAGE_KEY
    The request attributes key under which your action should store an org.apache.struts.action.ActionMessages object, if you are using the corresponding custom tag library elements.

    Since:
    Struts 1.1
    See Also:
    Constant Field Values

    MESSAGES_KEY

    public static final java.lang.String MESSAGES_KEY

    The base of the context attributes key under which our module MessageResources will be stored. This will be suffixed with the actual module prefix (including the leading "/" character) to form the actual resources key.

    For each request processed by the controller servlet, the MessageResources object for the module selected by the request URI currently being processed will also be exposed under this key as a request attribute.

    See Also:
    Constant Field Values

    MULTIPART_KEY

    public static final java.lang.String MULTIPART_KEY
    The request attributes key under which our multipart class is stored.

    See Also:
    Constant Field Values

    PLUG_INS_KEY

    public static final java.lang.String PLUG_INS_KEY

    The base of the context attributes key under which an array of PlugIn instances will be stored. This will be suffixed with the actual module prefix (including the leading "/" character) to form the actual attributes key.

    Since:
    Struts 1.1
    See Also:
    Constant Field Values

    REQUEST_PROCESSOR_KEY

    public static final java.lang.String REQUEST_PROCESSOR_KEY

    The base of the context attributes key under which our RequestProcessor instance will be stored. This will be suffixed with the actual module prefix (including the leading "/" character) to form the actual attributes key.

    Since:
    Struts 1.1
    See Also:
    Constant Field Values

    SERVLET_KEY

    public static final java.lang.String SERVLET_KEY
    The context attributes key under which we store the mapping defined for our controller serlet, which will be either a path-mapped pattern (/action/*) or an extension mapped pattern (*.do).

    See Also:
    Constant Field Values

    TRANSACTION_TOKEN_KEY

    public static final java.lang.String TRANSACTION_TOKEN_KEY
    The session attributes key under which our transaction token is stored, if it is used.

    See Also:
    Constant Field Values

    XHTML_KEY

    public static final java.lang.String XHTML_KEY
    The page attributes key under which xhtml status is stored. This may be "true" or "false". When set to true, the html tags output xhtml.

    Since:
    Struts 1.1
    See Also:
    Constant Field Values
    Constructor Detail

    Globals

    public Globals()


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/package-frame.html0000644000175000017500000000174610404045204026724 0ustar arnaudarnaud00000000000000 org.apache.struts (Apache Struts API Documentation) org.apache.struts
    Classes 
    Globals
    libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/package-summary.html0000644000175000017500000001310410404045220027314 0ustar arnaudarnaud00000000000000 org.apache.struts (Apache Struts API Documentation)

    Package org.apache.struts

    Class Summary
    Globals Global manifest constants for the entire Struts Framework.
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/package-tree.html0000644000175000017500000001265010404045250026566 0ustar arnaudarnaud00000000000000 org.apache.struts Class Hierarchy (Apache Struts API Documentation)

    Hierarchy For Package org.apache.struts

    Package Hierarchies:
    All Packages

    Class Hierarchy

    • class java.lang.Object
      • class org.apache.struts.Globals (implements java.io.Serializable)


    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/org/apache/struts/package-use.html0000644000175000017500000001205210404045246026424 0ustar arnaudarnaud00000000000000 Uses of Package org.apache.struts (Apache Struts API Documentation)

    Uses of Package
    org.apache.struts

    No usage of org.apache.struts



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/allclasses-frame.html0000644000175000017500000007517510404045174024120 0ustar arnaudarnaud00000000000000 All Classes (Apache Struts API Documentation) All Classes
    Action
    ActionComponentServlet
    ActionConfig
    ActionController
    ActionError
    ActionErrors
    ActionException
    ActionForm
    ActionFormBean
    ActionFormBeans
    ActionForward
    ActionForwards
    ActionMapping
    ActionMappingFactory
    ActionMappings
    ActionMessage
    ActionMessages
    ActionServlet
    ActionServletWrapper
    AddDataSourcePropertyRule
    AddTag
    AddTagParent
    AppException
    ApplicationConfig
    AttributeDefinition
    AttributeToScopeTag
    BaseFieldTag
    BaseHandlerTag
    BaseInputTag
    BaseTag
    BufferedMultipartInputStream
    ButtonTag
    CancelTag
    CheckboxTag
    CommonsMultipartRequestHandler
    CommonsMultipartRequestHandler.CommonsFormFile
    CompareTagBase
    ComponentConstants
    ComponentContext
    ComponentDefinition
    ComponentDefinitionsFactory
    ComponentDefinitionsFactoryWrapper
    ConditionalTagBase
    ConfigHelper
    ConfigHelperInterface
    ConfigRuleSet
    Constants
    Content
    ContentLengthExceededException
    ContentMap
    ContentMapStack
    Controller
    ControllerConfig
    ControllerSupport
    CookieTag
    CookieTei
    DataSourceConfig
    DefaultModuleConfigFactory
    DefineTag
    DefineTei
    DefinitionAttribute
    DefinitionDispatcherAction
    DefinitionNameAttribute
    DefinitionsFactory
    DefinitionsFactory
    DefinitionsFactoryConfig
    DefinitionsFactoryException
    DefinitionsUtil
    DefinitionsUtil.ServletPropertiesMap
    DefinitionTag
    DefinitionTagSupport
    DirectStringAttribute
    DiskFile
    DiskMultipartRequestHandler
    DispatchAction
    DynaActionForm
    DynaActionFormClass
    DynaValidatorActionForm
    DynaValidatorForm
    EmptyIterator
    EmptyTag
    EqualTag
    ErrorMessages
    ErrorsTag
    ExceptionConfig
    ExceptionHandler
    FactoryNotFoundException
    FactorySet
    FieldChecks
    FileTag
    FormBeanConfig
    FormFile
    FormPropertyConfig
    FormTag
    ForwardAction
    ForwardConfig
    ForwardingActionForward
    ForwardTag
    FrameTag
    GenericDataSource
    GetAttributeTag
    GetTag
    GetTag
    Globals
    GreaterEqualTag
    GreaterThanTag
    HeaderTag
    HeaderTei
    HiddenTag
    HtmlTag
    I18nFactorySet
    ImageButtonBean
    ImageTag
    ImgTag
    ImportAttributeTag
    IncludeAction
    IncludeTag
    IncludeTei
    InitDefinitionsTag
    InsertTag
    InsertTag
    InsertTag.TagHandler
    IterateTag
    IterateTei
    IteratorAdapter
    JavascriptValidatorTag
    LabelValueBean
    LessEqualTag
    LessThanTag
    LinkTag
    LookupDispatchAction
    MatchTag
    MaxLengthExceededException
    MenuItem
    MessageResources
    MessageResourcesConfig
    MessageResourcesFactory
    MessagesNotPresentTag
    MessagesPresentTag
    MessagesTag
    MessagesTei
    MessageTag
    ModuleConfig
    ModuleConfigFactory
    ModuleConfigImpl
    ModuleConfigVerifier
    ModuleException
    MultiboxTag
    MultipartBoundaryInputStream
    MultipartElement
    MultipartIterator
    MultipartRequestHandler
    MultipartRequestWrapper
    MultipartValueStream
    NestedCheckboxTag
    NestedDefineTag
    NestedDefineTei
    NestedEmptyTag
    NestedEqualTag
    NestedErrorsTag
    NestedFileTag
    NestedFormTag
    NestedGreaterEqualTag
    NestedGreaterThanTag
    NestedHiddenTag
    NestedImageTag
    NestedImgTag
    NestedIterateTag
    NestedIterateTei
    NestedLessEqualTag
    NestedLessThanTag
    NestedLinkTag
    NestedMatchTag
    NestedMessagesNotPresentTag
    NestedMessagesPresentTag
    NestedMessagesTag
    NestedMessageTag
    NestedMultiboxTag
    NestedNameSupport
    NestedNotEmptyTag
    NestedNotEqualTag
    NestedNotMatchTag
    NestedNotPresentTag
    NestedOptionsCollectionTag
    NestedOptionsTag
    NestedParentSupport
    NestedPasswordTag
    NestedPresentTag
    NestedPropertyHelper
    NestedPropertySupport
    NestedPropertyTag
    NestedRadioTag
    NestedReference
    NestedRootTag
    NestedSelectTag
    NestedSizeTag
    NestedSubmitTag
    NestedTagSupport
    NestedTextareaTag
    NestedTextTag
    NestedWriteNestingTag
    NestedWriteTag
    NoOpAction
    NoSuchDefinitionException
    NotEmptyTag
    NotEqualTag
    NotMatchTag
    NotPresentTag
    OptionsCollectionTag
    OptionsTag
    OptionTag
    PageTag
    PageTei
    ParameterTag
    ParameterTei
    PasswordTag
    PathAttribute
    PlugIn
    PlugInConfig
    PlugInSetPropertyRule
    PresentTag
    PropertyMessageResources
    PropertyMessageResourcesFactory
    PutListTag
    PutListTagParent
    PutTag
    PutTag
    PutTagParent
    RadioTag
    RedirectingActionForward
    RedirectTag
    ReloadableDefinitionsFactory
    ReloadDefinitionsAction
    RequestActionMapping
    RequestProcessor
    RequestUtils
    ResetTag
    Resources
    ResourceTag
    ResourceTei
    ResponseUtils
    RewriteTag
    SelectTag
    ServletContextWriter
    SessionActionMapping
    SetActionMappingClassRule
    SimpleMenuItem
    SizeTag
    SizeTei
    StrutsTag
    StrutsTei
    StrutsValidator
    StrutsValidatorUtil
    SubmitTag
    SwitchAction
    TagUtils
    TextareaTag
    TextTag
    TextTag
    TilesAction
    TilesException
    TilesPlugin
    TilesRequestProcessor
    TilesServlet
    TilesUtil
    TilesUtilImpl
    TilesUtilStrutsImpl
    TilesUtilStrutsModulesImpl
    TokenProcessor
    UntyppedAttribute
    UrlController
    UseAttributeTag
    UseAttributeTei
    ValidatorActionForm
    ValidatorForm
    ValidatorPlugIn
    ViewDefinitionsAction
    WriteTag
    XhtmlTag
    XmlAttribute
    XmlDefinition
    XmlDefinitionsSet
    XmlListAttribute
    XmlParser
    libstruts1.2-java-1.2.9/legacy/api-1.1/allclasses-noframe.html0000644000175000017500000006754510404045240024451 0ustar arnaudarnaud00000000000000 All Classes (Apache Struts API Documentation) All Classes
    Action
    ActionComponentServlet
    ActionConfig
    ActionController
    ActionError
    ActionErrors
    ActionException
    ActionForm
    ActionFormBean
    ActionFormBeans
    ActionForward
    ActionForwards
    ActionMapping
    ActionMappingFactory
    ActionMappings
    ActionMessage
    ActionMessages
    ActionServlet
    ActionServletWrapper
    AddDataSourcePropertyRule
    AddTag
    AddTagParent
    AppException
    ApplicationConfig
    AttributeDefinition
    AttributeToScopeTag
    BaseFieldTag
    BaseHandlerTag
    BaseInputTag
    BaseTag
    BufferedMultipartInputStream
    ButtonTag
    CancelTag
    CheckboxTag
    CommonsMultipartRequestHandler
    CommonsMultipartRequestHandler.CommonsFormFile
    CompareTagBase
    ComponentConstants
    ComponentContext
    ComponentDefinition
    ComponentDefinitionsFactory
    ComponentDefinitionsFactoryWrapper
    ConditionalTagBase
    ConfigHelper
    ConfigHelperInterface
    ConfigRuleSet
    Constants
    Content
    ContentLengthExceededException
    ContentMap
    ContentMapStack
    Controller
    ControllerConfig
    ControllerSupport
    CookieTag
    CookieTei
    DataSourceConfig
    DefaultModuleConfigFactory
    DefineTag
    DefineTei
    DefinitionAttribute
    DefinitionDispatcherAction
    DefinitionNameAttribute
    DefinitionsFactory
    DefinitionsFactory
    DefinitionsFactoryConfig
    DefinitionsFactoryException
    DefinitionsUtil
    DefinitionsUtil.ServletPropertiesMap
    DefinitionTag
    DefinitionTagSupport
    DirectStringAttribute
    DiskFile
    DiskMultipartRequestHandler
    DispatchAction
    DynaActionForm
    DynaActionFormClass
    DynaValidatorActionForm
    DynaValidatorForm
    EmptyIterator
    EmptyTag
    EqualTag
    ErrorMessages
    ErrorsTag
    ExceptionConfig
    ExceptionHandler
    FactoryNotFoundException
    FactorySet
    FieldChecks
    FileTag
    FormBeanConfig
    FormFile
    FormPropertyConfig
    FormTag
    ForwardAction
    ForwardConfig
    ForwardingActionForward
    ForwardTag
    FrameTag
    GenericDataSource
    GetAttributeTag
    GetTag
    GetTag
    Globals
    GreaterEqualTag
    GreaterThanTag
    HeaderTag
    HeaderTei
    HiddenTag
    HtmlTag
    I18nFactorySet
    ImageButtonBean
    ImageTag
    ImgTag
    ImportAttributeTag
    IncludeAction
    IncludeTag
    IncludeTei
    InitDefinitionsTag
    InsertTag
    InsertTag
    InsertTag.TagHandler
    IterateTag
    IterateTei
    IteratorAdapter
    JavascriptValidatorTag
    LabelValueBean
    LessEqualTag
    LessThanTag
    LinkTag
    LookupDispatchAction
    MatchTag
    MaxLengthExceededException
    MenuItem
    MessageResources
    MessageResourcesConfig
    MessageResourcesFactory
    MessagesNotPresentTag
    MessagesPresentTag
    MessagesTag
    MessagesTei
    MessageTag
    ModuleConfig
    ModuleConfigFactory
    ModuleConfigImpl
    ModuleConfigVerifier
    ModuleException
    MultiboxTag
    MultipartBoundaryInputStream
    MultipartElement
    MultipartIterator
    MultipartRequestHandler
    MultipartRequestWrapper
    MultipartValueStream
    NestedCheckboxTag
    NestedDefineTag
    NestedDefineTei
    NestedEmptyTag
    NestedEqualTag
    NestedErrorsTag
    NestedFileTag
    NestedFormTag
    NestedGreaterEqualTag
    NestedGreaterThanTag
    NestedHiddenTag
    NestedImageTag
    NestedImgTag
    NestedIterateTag
    NestedIterateTei
    NestedLessEqualTag
    NestedLessThanTag
    NestedLinkTag
    NestedMatchTag
    NestedMessagesNotPresentTag
    NestedMessagesPresentTag
    NestedMessagesTag
    NestedMessageTag
    NestedMultiboxTag
    NestedNameSupport
    NestedNotEmptyTag
    NestedNotEqualTag
    NestedNotMatchTag
    NestedNotPresentTag
    NestedOptionsCollectionTag
    NestedOptionsTag
    NestedParentSupport
    NestedPasswordTag
    NestedPresentTag
    NestedPropertyHelper
    NestedPropertySupport
    NestedPropertyTag
    NestedRadioTag
    NestedReference
    NestedRootTag
    NestedSelectTag
    NestedSizeTag
    NestedSubmitTag
    NestedTagSupport
    NestedTextareaTag
    NestedTextTag
    NestedWriteNestingTag
    NestedWriteTag
    NoOpAction
    NoSuchDefinitionException
    NotEmptyTag
    NotEqualTag
    NotMatchTag
    NotPresentTag
    OptionsCollectionTag
    OptionsTag
    OptionTag
    PageTag
    PageTei
    ParameterTag
    ParameterTei
    PasswordTag
    PathAttribute
    PlugIn
    PlugInConfig
    PlugInSetPropertyRule
    PresentTag
    PropertyMessageResources
    PropertyMessageResourcesFactory
    PutListTag
    PutListTagParent
    PutTag
    PutTag
    PutTagParent
    RadioTag
    RedirectingActionForward
    RedirectTag
    ReloadableDefinitionsFactory
    ReloadDefinitionsAction
    RequestActionMapping
    RequestProcessor
    RequestUtils
    ResetTag
    Resources
    ResourceTag
    ResourceTei
    ResponseUtils
    RewriteTag
    SelectTag
    ServletContextWriter
    SessionActionMapping
    SetActionMappingClassRule
    SimpleMenuItem
    SizeTag
    SizeTei
    StrutsTag
    StrutsTei
    StrutsValidator
    StrutsValidatorUtil
    SubmitTag
    SwitchAction
    TagUtils
    TextareaTag
    TextTag
    TextTag
    TilesAction
    TilesException
    TilesPlugin
    TilesRequestProcessor
    TilesServlet
    TilesUtil
    TilesUtilImpl
    TilesUtilStrutsImpl
    TilesUtilStrutsModulesImpl
    TokenProcessor
    UntyppedAttribute
    UrlController
    UseAttributeTag
    UseAttributeTei
    ValidatorActionForm
    ValidatorForm
    ValidatorPlugIn
    ViewDefinitionsAction
    WriteTag
    XhtmlTag
    XmlAttribute
    XmlDefinition
    XmlDefinitionsSet
    XmlListAttribute
    XmlParser
    libstruts1.2-java-1.2.9/legacy/api-1.1/constant-values.html0000644000175000017500000020517710404045204024017 0ustar arnaudarnaud00000000000000 Constant Field Values (Apache Struts API Documentation)

    Constant Field Values


    Contents
    org.apache.*

    org.apache.struts.Globals
    public static final java.lang.String ACTION_SERVLET_KEY "org.apache.struts.action.ACTION_SERVLET"
    public static final java.lang.String APPLICATION_KEY "org.apache.struts.action.MODULE"
    public static final java.lang.String CANCEL_KEY "org.apache.struts.action.CANCEL"
    public static final java.lang.String DATA_SOURCE_KEY "org.apache.struts.action.DATA_SOURCE"
    public static final java.lang.String ERROR_KEY "org.apache.struts.action.ERROR"
    public static final java.lang.String EXCEPTION_KEY "org.apache.struts.action.EXCEPTION"
    public static final java.lang.String FORM_BEANS_KEY "org.apache.struts.action.FORM_BEANS"
    public static final java.lang.String FORWARDS_KEY "org.apache.struts.action.FORWARDS"
    public static final java.lang.String LOCALE_KEY "org.apache.struts.action.LOCALE"
    public static final java.lang.String MAPPING_KEY "org.apache.struts.action.mapping.instance"
    public static final java.lang.String MAPPINGS_KEY "org.apache.struts.action.MAPPINGS"
    public static final java.lang.String MESSAGE_KEY "org.apache.struts.action.ACTION_MESSAGE"
    public static final java.lang.String MESSAGES_KEY "org.apache.struts.action.MESSAGE"
    public static final java.lang.String MODULE_KEY "org.apache.struts.action.MODULE"
    public static final java.lang.String MULTIPART_KEY "org.apache.struts.action.mapping.multipartclass"
    public static final java.lang.String PLUG_INS_KEY "org.apache.struts.action.PLUG_INS"
    public static final java.lang.String REQUEST_PROCESSOR_KEY "org.apache.struts.action.REQUEST_PROCESSOR"
    public static final java.lang.String SERVLET_KEY "org.apache.struts.action.SERVLET_MAPPING"
    public static final java.lang.String TRANSACTION_TOKEN_KEY "org.apache.struts.action.TOKEN"
    public static final java.lang.String XHTML_KEY "org.apache.struts.globals.XHTML"

    org.apache.struts.action.Action
    public static final java.lang.String ACTION_SERVLET_KEY "org.apache.struts.action.ACTION_SERVLET"
    public static final java.lang.String APPLICATION_KEY "org.apache.struts.action.MODULE"
    public static final java.lang.String DATA_SOURCE_KEY "org.apache.struts.action.DATA_SOURCE"
    public static final java.lang.String ERROR_KEY "org.apache.struts.action.ERROR"
    public static final java.lang.String EXCEPTION_KEY "org.apache.struts.action.EXCEPTION"
    public static final java.lang.String FORM_BEANS_KEY "org.apache.struts.action.FORM_BEANS"
    public static final java.lang.String FORWARDS_KEY "org.apache.struts.action.FORWARDS"
    public static final java.lang.String LOCALE_KEY "org.apache.struts.action.LOCALE"
    public static final java.lang.String MAPPING_KEY "org.apache.struts.action.mapping.instance"
    public static final java.lang.String MAPPINGS_KEY "org.apache.struts.action.MAPPINGS"
    public static final java.lang.String MESSAGE_KEY "org.apache.struts.action.ACTION_MESSAGE"
    public static final java.lang.String MESSAGES_KEY "org.apache.struts.action.MESSAGE"
    public static final java.lang.String MULTIPART_KEY "org.apache.struts.action.mapping.multipartclass"
    public static final java.lang.String PLUG_INS_KEY "org.apache.struts.action.PLUG_INS"
    public static final java.lang.String REQUEST_PROCESSOR_KEY "org.apache.struts.action.REQUEST_PROCESSOR"
    public static final java.lang.String SERVLET_KEY "org.apache.struts.action.SERVLET_MAPPING"
    public static final java.lang.String TRANSACTION_TOKEN_KEY "org.apache.struts.action.TOKEN"

    org.apache.struts.action.ActionErrors
    public static final java.lang.String GLOBAL_ERROR "org.apache.struts.action.GLOBAL_ERROR"

    org.apache.struts.action.ActionMessages
    public static final java.lang.String GLOBAL_MESSAGE "org.apache.struts.action.GLOBAL_MESSAGE"

    org.apache.struts.action.RequestProcessor
    public static final java.lang.String INCLUDE_PATH_INFO "javax.servlet.include.path_info"
    public static final java.lang.String INCLUDE_SERVLET_PATH "javax.servlet.include.servlet_path"

    org.apache.struts.taglib.bean.IncludeTag
    protected static final int BUFFER_SIZE 256

    org.apache.struts.taglib.bean.ResourceTag
    protected static final int BUFFER_SIZE 256

    org.apache.struts.taglib.bean.WriteTag
    public static final java.lang.String DATE_FORMAT_KEY "org.apache.struts.taglib.bean.format.date"
    public static final java.lang.String FLOAT_FORMAT_KEY "org.apache.struts.taglib.bean.format.float"
    public static final java.lang.String INT_FORMAT_KEY "org.apache.struts.taglib.bean.format.int"
    public static final java.lang.String SQL_DATE_FORMAT_KEY "org.apache.struts.taglib.bean.format.sql.date"
    public static final java.lang.String SQL_TIME_FORMAT_KEY "org.apache.struts.taglib.bean.format.sql.time"
    public static final java.lang.String SQL_TIMESTAMP_FORMAT_KEY "org.apache.struts.taglib.bean.format.sql.timestamp"

    org.apache.struts.taglib.html.Constants
    public static final java.lang.String BEAN_KEY "org.apache.struts.taglib.html.BEAN"
    public static final java.lang.String CANCEL_PROPERTY "org.apache.struts.taglib.html.CANCEL"
    public static final java.lang.String CANCEL_PROPERTY_X "org.apache.struts.taglib.html.CANCEL.x"
    public static final java.lang.String FORM_KEY "org.apache.struts.taglib.html.FORM"
    public static final java.lang.String Package "org.apache.struts.taglib.html"
    public static final java.lang.String SELECT_KEY "org.apache.struts.taglib.html.SELECT"
    public static final java.lang.String TOKEN_KEY "org.apache.struts.taglib.html.TOKEN"

    org.apache.struts.taglib.logic.CompareTagBase
    protected static final int DOUBLE_COMPARE 0
    protected static final int LONG_COMPARE 1
    protected static final int STRING_COMPARE 2

    org.apache.struts.taglib.logic.PresentTag
    public static final java.lang.String ROLE_DELIMITER ","

    org.apache.struts.taglib.nested.NestedPropertyHelper
    public static final java.lang.String NESTED_INCLUDES_KEY ""

    org.apache.struts.taglib.tiles.ComponentConstants
    public static final java.lang.String COMPONENT_CONTEXT "org.apache.struts.taglib.tiles.CompContext"
    public static final int COMPONENT_SCOPE 8
    public static final java.lang.String EXCEPTION_KEY "org.apache.struts.action.EXCEPTION"
    public static final java.lang.String LOCALE_KEY "org.apache.struts.action.LOCALE"

    org.apache.struts.taglib.tiles.InsertTag
    public static final java.lang.String ROLE_DELIMITER ","

    org.apache.struts.taglib.tiles.util.TagUtils
    public static final boolean debug true

    org.apache.struts.tiles.ComponentDefinition
    public static final java.lang.String ACTION "action"
    public static final java.lang.String CONTROLLER "controller"
    public static final java.lang.String URL "url"

    org.apache.struts.tiles.DefinitionsFactoryConfig
    public static final java.lang.String DEFINITIONS_CONFIG_PARAMETER_NAME "definitions-config"
    public static final java.lang.String FACTORY_CLASSNAME_PARAMETER_NAME "definitions-factory-class"
    public static final java.lang.String PARSER_DETAILS_PARAMETER_NAME "definitions-parser-details"
    public static final java.lang.String PARSER_VALIDATE_PARAMETER_NAME "definitions-parser-validate"
    public static final java.lang.String TILES_DETAILS_PARAMETER_NAME "definitions-debug"

    org.apache.struts.tiles.DefinitionsUtil
    public static final java.lang.String ACTION_DEFINITION "org.apache.struts.tiles.ACTION_DEFINITION"
    public static final java.lang.String DEFINITIONS_CONFIG_USER_DEBUG_LEVEL "definitions-debug"
    public static final java.lang.String DEFINITIONS_FACTORY "org.apache.struts.tiles.DEFINITIONS_FACTORY"
    public static final java.lang.String DEFINITIONS_FACTORY_CLASSNAME "definitions-factory-class"
    public static final java.lang.String INSTANCES_CONFIG_USER_DEBUG_LEVEL "instances-debug"
    public static final int NO_DEBUG 0

    org.apache.struts.tiles.TilesUtilImpl
    public static final java.lang.String DEFINITIONS_FACTORY "org.apache.struts.tiles.DEFINITIONS_FACTORY"

    org.apache.struts.tiles.definition.ReloadableDefinitionsFactory
    public static final java.lang.String DEFINITIONS_FACTORY_CLASSNAME "definitions-factory-class"

    org.apache.struts.tiles.xmlDefinition.I18nFactorySet
    public static final java.lang.String DEFINITIONS_CONFIG_PARAMETER_NAME "definitions-config"
    public static final java.lang.String FILENAME_EXTENSION ".xml"
    public static final java.lang.String INSTANCES_CONFIG_PARAMETER_NAME "instances-config"
    private static final int MAX_BUNDLES_SEARCHED 2
    public static final java.lang.String PARSER_DETAILS_PARAMETER_NAME "definitions-parser-details"
    public static final java.lang.String PARSER_VALIDATE_PARAMETER_NAME "definitions-parser-validate"

    org.apache.struts.upload.CommonsMultipartRequestHandler
    public static final long DEFAULT_SIZE_MAX 262144000l
    public static final int DEFAULT_SIZE_THRESHOLD 262144

    org.apache.struts.upload.MultipartBoundaryInputStream
    private static final byte CARRIAGE_RETURN 13
    private static final java.lang.String CONTENT_TYPE_APPLICATION_OCTET_STREAM "application/octet-stream"
    private static final java.lang.String CONTENT_TYPE_TEXT_PLAIN "text/plain"
    private static final java.lang.String DEFAULT_CONTENT_DISPOSITION "form-data"
    private static final int DEFAULT_LINE_SIZE 4096
    private static final java.lang.String DOUBLE_DASH_STRING "--"
    private static final java.lang.String MESSAGE_INVALID_START "Multipart data doesn\'t start with boundary"
    private static final byte NEWLINE_BYTE 10
    private static final java.lang.String PARAMETER_CHARSET "charset"
    private static final java.lang.String PARAMETER_FILENAME "filename"
    private static final java.lang.String PARAMETER_NAME "name"
    private static final char TOKEN_COLON 58
    private static final java.lang.String TOKEN_EQUALS "="
    private static final char TOKEN_QUOTE 34
    private static final char TOKEN_SEMI_COLON 59
    private static final char TOKEN_SPACE 32

    org.apache.struts.upload.MultipartIterator
    private static final java.lang.String DEFAULT_ENCODING "iso-8859-1"
    private static final java.lang.String FILE_PREFIX "strts"
    public static final java.lang.String HEADER_CONTENT_DISPOSITION "Content-Disposition"
    public static final java.lang.String MESSAGE_CANNOT_RETRIEVE_BOUNDARY "MultipartIterator: cannot retrieve boundary for multipart request"
    private static final java.lang.String PARAMETER_BOUNDARY "boundary="
    private static final int TEXT_BUFFER_SIZE 1000

    org.apache.struts.upload.MultipartRequestHandler
    public static final java.lang.String ATTRIBUTE_MAX_LENGTH_EXCEEDED "org.apache.struts.upload.MaxLengthExceeded"

    org.apache.struts.upload.org.apache.struts.upload.MultipartValueStream
    public static final java.lang.String HEADER_ENCODING "iso-8859-1"

    org.apache.struts.util.RequestUtils
    private static final java.lang.String PREFIXES_KEY "org.apache.struts.util.PREFIXES"

    org.apache.struts.util.StrutsValidator
    public static final java.lang.String FIELD_TEST_EQUAL "EQUAL"
    public static final java.lang.String FIELD_TEST_NOTNULL "NOTNULL"
    public static final java.lang.String FIELD_TEST_NULL "NULL"

    org.apache.struts.validator.FieldChecks
    public static final java.lang.String FIELD_TEST_EQUAL "EQUAL"
    public static final java.lang.String FIELD_TEST_NOTNULL "NOTNULL"
    public static final java.lang.String FIELD_TEST_NULL "NULL"

    org.apache.struts.validator.ValidatorPlugIn
    private static final java.lang.String RESOURCE_DELIM ","
    public static final java.lang.String VALIDATOR_KEY "org.apache.commons.validator.VALIDATOR_RESOURCES"



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/deprecated-list.html0000644000175000017500000024417710404045244023751 0ustar arnaudarnaud00000000000000 Deprecated List (Apache Struts API Documentation)

    Deprecated API

    Deprecated Classes
    org.apache.struts.tiles.ActionComponentServlet
              Tiles now uses ActionServlet with TilesPlugin and TilesRequestProcessor. 
    org.apache.struts.action.ActionException
              Replaced by org.apache.struts.config.ExceptionConfig 
    org.apache.struts.action.ActionFormBeans
              Replaced by collection of FormBeanConfig instances in ModuleConfig 
    org.apache.struts.action.ActionForwards
              Replaced by collection of ForwardConfig instances in ModuleConfig and ActionConfig 
    org.apache.struts.action.ActionMappings
              Replaced by collection of ActionConfig instances in ModuleConfig 
    org.apache.struts.config.ApplicationConfig
              Usage replaced by ModuleConfig Interface. 
    org.apache.struts.taglib.tiles.AttributeToScopeTag
              Is it still in use ? 
    org.apache.struts.taglib.template.util.Content
              Use Tiles instead. 
    org.apache.struts.taglib.template.util.ContentMap
              Use Tiles instead. 
    org.apache.struts.taglib.template.util.ContentMapStack
              Use Tiles instead. 
    org.apache.struts.tiles.DefinitionsUtil
              Use TilesUtil.createDefinitionsFactory(ServletContext, DefinitionsFactoryConfig) 
    org.apache.struts.util.ErrorMessages
              Use org.apache.struts.action.ActionErrors instead 
    org.apache.struts.util.GenericDataSource
              Use a BasicDataSource directly, or indirectly acquire a data source provided by your container 
    org.apache.struts.taglib.template.GetTag
              Use Tiles instead. 
    org.apache.struts.taglib.template.InsertTag
              Use Tiles instead. 
    org.apache.struts.util.IteratorAdapter
              Use commons-collections' IteratorUtils.asIterator(Enumeration). 
    org.apache.struts.tiles.actions.NoOpAction
              Use o.a.s.a.ForwardAction instead with the parameter attribute: <action path="aPath" type="org.apache.struts.actions.ForwardAction" parameter="tiles.def.name" />  
    org.apache.struts.taglib.template.PutTag
              Use Tiles instead. 
    org.apache.struts.util.StrutsValidator
              As of Struts 1.1, replaced by FieldChecks 
    org.apache.struts.util.StrutsValidatorUtil
              As of Struts 1.1, replaced by Resources 
    org.apache.struts.taglib.tiles.ext.TextTag
              Use o.a.s.taglib.html.TextTag instead. 
    org.apache.struts.tiles.TilesServlet
              Use the ActionServlet instead. 
     

    Deprecated Interfaces
    org.apache.struts.tiles.ComponentDefinitionsFactory
              Use DefinitionsFactory instead. 
     

    Deprecated Exceptions
    org.apache.struts.util.AppException
              use ModuleException 
     

    Deprecated Fields
    org.apache.struts.action.Action.ACTION_SERVLET_KEY
              Use Globals.ACTION_SERVLET_KEY instead. 
    org.apache.struts.action.RequestProcessor.appConfig
              use moduleConfig instead. 
    org.apache.struts.Globals.APPLICATION_KEY
              Use MODULE_KEY 
    org.apache.struts.action.Action.APPLICATION_KEY
              Replaced by Globals.MODULE_KEY 
    org.apache.struts.upload.MultipartElement.data
              This should never be used. 
    org.apache.struts.action.Action.DATA_SOURCE_KEY
              Replaced by Globals.DATA_SOURCE_KEY 
    org.apache.struts.config.ControllerConfig.debug
              Configure the logging detail level in your underlying logging implemenation 
    org.apache.struts.action.ActionServlet.debug
                
    org.apache.struts.tiles.DefinitionsFactoryConfig.debugLevel
              Use commons-logging mechanism. 
    org.apache.struts.taglib.html.ErrorsTag.defaultLocale
              Use Locale.getDefault() directly. 
    org.apache.struts.taglib.html.JavascriptValidatorTag.defaultLocale
              This variable is no longer used. 
    org.apache.struts.taglib.html.OptionTag.defaultLocale
              Use Locale.getDefault() directly. 
    org.apache.struts.action.Action.ERROR_KEY
              Replaced by Globals.ERROR_KEY 
    org.apache.struts.action.Action.EXCEPTION_KEY
              Replaced by Globals.EXCEPTION_KEY 
    org.apache.struts.Globals.FORM_BEANS_KEY
              Replaced by collection in ModuleConfig 
    org.apache.struts.action.Action.FORM_BEANS_KEY
              Replaced by collection in ModuleConfig 
    org.apache.struts.Globals.FORWARDS_KEY
              Replaced by collection in ModuleConfig. 
    org.apache.struts.action.Action.FORWARDS_KEY
              Replaced by collection in ModuleConfig. 
    org.apache.struts.tiles.xmlDefinition.I18nFactorySet.INSTANCES_CONFIG_PARAMETER_NAME
              use DEFINITIONS_CONFIG_PARAMETER_NAME 
    org.apache.struts.tiles.DefinitionsUtil.INSTANCES_CONFIG_USER_DEBUG_LEVEL
              use DEFINITIONS_CONFIG_USER_DEBUG_LEVEL instead. 
    org.apache.struts.action.Action.LOCALE_KEY
              Replaced by Globals.LOCALE_KEY 
    org.apache.struts.taglib.html.ImgTag.lowsrc
              This is not defined in the HTML 4.01 spec and will be removed in a future version of Struts. 
    org.apache.struts.action.Action.MAPPING_KEY
              Replaced by Globals.MAPPING_KEY 
    org.apache.struts.Globals.MAPPINGS_KEY
              Replaced by collection in ModuleConfig 
    org.apache.struts.action.Action.MAPPINGS_KEY
              Replaced by collection in ModuleConfig 
    org.apache.struts.action.Action.MESSAGE_KEY
              Replaced by Globals.MESSAGE_KEY 
    org.apache.struts.action.Action.MESSAGES_KEY
              Use Globals.MESSAGES_KEY instead. 
    org.apache.struts.action.Action.MULTIPART_KEY
              Use Globals.MULTIPART_KEY instead. 
    org.apache.struts.tiles.DefinitionsFactoryConfig.parserDebugLevel
              Use commons-logging mechanism. 
    org.apache.struts.action.Action.PLUG_INS_KEY
              Replaced by Globals.PLUG_INS_KEY 
    org.apache.struts.action.Action.REQUEST_PROCESSOR_KEY
              Use Globals.REQUEST_PROCESSOR_KEY instead. 
    org.apache.struts.action.Action.SERVLET_KEY
              Use Globals.SERVLET_KEY instead. 
    org.apache.struts.action.Action.TRANSACTION_TOKEN_KEY
              Use Globals.TRANSACTION_TOKEN_KEY instead. 
     

    Deprecated Methods
    org.apache.struts.tiles.TilesUtil.applicationClass(String)
              Use RequestUtils.applicationClass() instead. 
    org.apache.struts.tiles.TilesUtilImpl.applicationClass(String)
              Use RequestUtils.applicationClass() instead. 
    org.apache.struts.tiles.TilesUtilStrutsImpl.applicationClass(String)
              Use RequestUtils.applicationClass() instead. 
    org.apache.struts.util.RequestUtils.computeURL(PageContext, String, String, String, Map, String, boolean)
              To be removed in Version 1.3. Use RequestUtils.computeURL(PageContext, String, String, String, String, Map, String, boolean) instead. 
    org.apache.struts.tiles.DefinitionsUtil.createDefinitionFactoryInstance(String)
              No direct replacement. Use createDefinitionFactory TilesUtil.createDefinitionsFactory(ServletContext, DefinitionsFactoryConfig). 
    org.apache.struts.tiles.DefinitionsUtil.createDefinitionsFactory(ServletContext, Map, String)
              Use createDefinitionsFactory(ServletContext servletContext, ServletConfig servletConfig) 
    org.apache.struts.taglib.html.HtmlTag.currentLocale()
              Use getCurrentLocale instead because it makes the display logic easier. 
    org.apache.struts.action.ActionServlet.defaultControllerConfig(ModuleConfig)
              Will be removed in a release after Struts 1.1. 
    org.apache.struts.action.ActionServlet.defaultFormBeansConfig(ModuleConfig)
              Will be removed in a release after Struts 1.1. 
    org.apache.struts.action.ActionServlet.defaultForwardsConfig(ModuleConfig)
              Will be removed in a release after Struts 1.1. 
    org.apache.struts.action.ActionServlet.defaultMappingsConfig(ModuleConfig)
              Will be removed in a release after Struts 1.1. 
    org.apache.struts.action.ActionServlet.defaultMessageResourcesConfig(ModuleConfig)
              Will be removed in a release after Struts 1.1. 
    org.apache.struts.action.ActionServlet.destroyApplications()
              replaced by destroyModules() 
    org.apache.struts.action.ActionServlet.destroyDataSources()
              Will no longer be required with module support 
    org.apache.struts.taglib.template.PutTag.doEndTag()
              Use Tiles instead. 
    org.apache.struts.taglib.template.InsertTag.doEndTag()
              Use Tiles instead. 
    org.apache.struts.taglib.template.GetTag.doStartTag()
              Use Tiles instead. 
    org.apache.struts.taglib.template.InsertTag.doStartTag()
              Use Tiles instead. 
    org.apache.struts.action.ActionMessages.empty()
              Use isEmpty instead. 
    org.apache.struts.action.ActionServlet.findDataSource(String)
              Look up data sources directly in servlet context attributes 
    org.apache.struts.action.ActionServlet.findFormBean(String)
              Replaced by ModuleConfig.findFormBeanConfig() 
    org.apache.struts.action.ActionServlet.findForward(String)
              Replaced by ModuleConfig.findForwardConfig() 
    org.apache.struts.action.ActionServlet.findMapping(String)
              Replaced by ModuleConfig.findActionConfig() 
    org.apache.struts.taglib.template.util.ContentMap.get(String)
              Use Tiles instead. 
    org.apache.struts.util.StrutsValidatorUtil.getActionError(HttpServletRequest, ValidatorAction, Field)
              As of Struts 1.1, replaced by Resources.getActionError(HttpServletRequest, ValidatorAction, Field) 
    org.apache.struts.taglib.template.PutTag.getActualContent()
              Use Tiles instead. 
    org.apache.struts.taglib.html.ImageTag.getAlign()
              Align attribute is deprecated in HTML 4.x. 
    org.apache.struts.taglib.template.PutTag.getAncestor(String)
              Use Tiles instead. 
    org.apache.struts.config.ActionConfig.getApplicationConfig()
              ActionConfig.getModuleConfig() 
    org.apache.struts.action.ActionServlet.getApplicationConfig(HttpServletRequest)
              use ActionServlet.getModuleConfig(HttpServletRequest) 
    org.apache.struts.util.RequestUtils.getApplicationPrefixes(ServletContext)
              Use getModulePrefixes(ServletContext) instead. 
    org.apache.struts.util.StrutsValidatorUtil.getArgs(String, MessageResources, Locale, Field)
              As of Struts 1.1, replaced by Resources.getArgs(String,MessageResources,Locale,Field) 
    org.apache.struts.taglib.template.PutTag.getContent()
              Use Tiles instead. 
    org.apache.struts.taglib.template.util.Content.getContent()
              Use Tiles instead. 
    org.apache.struts.taglib.template.InsertTag.getContentMap()
              Use Tiles instead. 
    org.apache.struts.upload.MultipartElement.getData()
              Use the getFile method to get a File representing the data for this element 
    org.apache.struts.action.ActionServlet.getDebug()
              Configure the logging detail level in your underlying logging implementation 
    org.apache.struts.action.RequestProcessor.getDebug()
              Configure the logging detail level in your underlying logging implementation 
    org.apache.struts.tiles.DefinitionsFactoryConfig.getDebugLevel()
              Use commons-logging mechanism. 
    org.apache.struts.tiles.DefinitionsUtil.getDefinition(String, PageContext)
              Use TilesUtil.getDefinition(String, ServletRequest, ServletContext) 
    org.apache.struts.tiles.DefinitionsUtil.getDefinitionsFactory(ServletContext)
              Use TilesUtil.getDefinitionsFactory(ServletRequest, ServletContext) 
    org.apache.struts.taglib.template.PutTag.getDirect()
              Use Tiles instead. 
    org.apache.struts.taglib.template.GetTag.getFlush()
              Use Tiles instead. 
    org.apache.struts.taglib.html.ImgTag.getLowsrc()
              This is not defined in the HTML 4.01 spec and will be removed in a future version of Struts. 
    org.apache.struts.util.StrutsValidatorUtil.getMessage(MessageResources, Locale, ValidatorAction, Field)
              As of Struts 1.1, replaced by Resources.getMessage(MessageResources, Locale, ValidatorAction , Field) 
    org.apache.struts.validator.Resources.getMessageResources(ServletContext)
              This method can only return the resources for the default module. Use getMessageResources(HttpServletRequest) to get the resources for the current module. 
    org.apache.struts.util.StrutsValidatorUtil.getMessageResources(ServletContext)
              This method can only return the resources for the default module. Use getMessageResources(HttpServletRequest) to get the resources for the current application module. 
    org.apache.struts.taglib.template.PutTag.getName()
              Use Tiles instead. 
    org.apache.struts.taglib.template.GetTag.getName()
              Use Tiles instead. 
    org.apache.struts.tiles.DefinitionsFactoryConfig.getParserDebugLevel()
              Use commons-logging mechanism. 
    org.apache.struts.action.ActionServlet.getResources()
              Actions should call Action.getResources(HttpServletRequest) instead of this method, in order to retrieve the resources for the current module. 
    org.apache.struts.action.Action.getResources()
              This method can only return the resources for the default module. Use getResources(HttpServletRequest) to get the resources for the current module. 
    org.apache.struts.taglib.template.PutTag.getRole()
              Use Tiles instead. 
    org.apache.struts.taglib.template.GetTag.getRole()
              Use Tiles instead. 
    org.apache.struts.taglib.template.util.ContentMapStack.getStack(PageContext)
              Use Tiles instead. 
    org.apache.struts.taglib.template.InsertTag.getTemplate()
              Use Tiles instead. 
    org.apache.struts.validator.Resources.getValidatorResources(ServletContext)
              In Struts 1.1 This method can only return the resources for the default module. Use getValidatorResources(HttpServletRequest, ServletContext) to get the resources for the current application module. 
    org.apache.struts.util.StrutsValidatorUtil.getValidatorResources(ServletContext)
              In Struts 1.1 This method can only return the resources for the default module. Use getValidatorResources(HttpServletRequest, ServletContext) to get the resources for the current application module. 
    org.apache.struts.taglib.template.PutTag.hasBody()
              Use Tiles instead. 
    org.apache.struts.action.ActionServlet.initApplicationConfig(String, String)
              use ActionServlet.initModuleConfig(String,String) 
    org.apache.struts.action.ActionServlet.initApplicationDataSources(ModuleConfig)
              use initModuleDataSources(ModuleConfig) 
    org.apache.struts.action.ActionServlet.initApplicationMessageResources(ModuleConfig)
              use initModuleMessageResources() 
    org.apache.struts.action.ActionServlet.initApplicationPlugIns(ModuleConfig)
              use ActionServlet.initModulePlugIns(ModuleConfig) 
    org.apache.struts.action.ActionServlet.initDataSources()
              Replaced by initApplicationDataSources() that takes an ModuleConfig argument. This method does nothing. 
    org.apache.struts.tiles.DefinitionsUtil.initUserDebugLevel(ServletConfig)
              Use commons-logging package instead. 
    org.apache.struts.util.StrutsValidatorUtil.initValidator(String, Object, ServletContext, HttpServletRequest, ActionErrors, int)
              As of Struts 1.1, replaced by Resources.initValidator(String,Object,ServletContext,HttpServletRequest,ActionErrors,int) 
    org.apache.struts.taglib.template.util.Content.isDirect()
              Use Tiles instead. 
    org.apache.struts.validator.ValidatorForm.log(String)
              Use common-logging to log debug messages. 
    org.apache.struts.validator.DynaValidatorForm.log(String)
              Use common-logging, or other logging implementation to log debug messages. 
    org.apache.struts.action.ActionServlet.log(String, int)
              Use commons-logging instead. 
    org.apache.struts.action.ActionServletWrapper.log(String, int)
              Logging should now use the commons logging 
    org.apache.struts.validator.ValidatorForm.log(String, Throwable)
              Use common-logging to log debug messages. 
    org.apache.struts.validator.DynaValidatorForm.log(String, Throwable)
              Use common-logging, or other logging implementation to log debug messages. 
    org.apache.struts.tiles.DefinitionsUtil.makeDefinitionsFactoryAccessible(DefinitionsFactory, ServletContext)
              Use TilesUtil.createDefinitionsFactory(ServletContext, DefinitionsFactoryConfig) 
    org.apache.struts.taglib.template.util.ContentMapStack.peek(PageContext)
              Use Tiles instead. 
    org.apache.struts.action.Action.perform(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse)
              Use the execute() method instead 
    org.apache.struts.action.Action.perform(ActionMapping, ActionForm, ServletRequest, ServletResponse)
              Use the execute() method instead 
    org.apache.struts.tiles.actions.TilesAction.perform(ComponentContext, ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse)
              Use the execute() method instead 
    org.apache.struts.taglib.template.util.ContentMapStack.pop(PageContext)
              Use Tiles instead. 
    org.apache.struts.action.RequestProcessor.processActionForward(HttpServletRequest, HttpServletResponse, ActionForward)
              Use processForwardConfig() instead. 
    org.apache.struts.tiles.ActionComponentServlet.processForward(String, HttpServletRequest, HttpServletResponse)
              use doForward instead 
    org.apache.struts.taglib.template.util.ContentMapStack.push(PageContext, ContentMap)
              Use Tiles instead. 
    org.apache.struts.taglib.template.InsertTag.put(String, Content)
              Use Tiles instead. 
    org.apache.struts.taglib.template.util.ContentMap.put(String, Content)
              Use Tiles instead. 
    org.apache.struts.taglib.template.PutTag.release()
              Use Tiles instead. 
    org.apache.struts.taglib.template.GetTag.release()
              Use Tiles instead. 
    org.apache.struts.taglib.template.InsertTag.release()
              Use Tiles instead. 
    org.apache.struts.taglib.template.GetTag.saveException(Throwable)
              Use Tiles instead. 
    org.apache.struts.taglib.template.InsertTag.saveException(Throwable)
              Use Tiles instead. 
    org.apache.struts.util.RequestUtils.selectApplication(HttpServletRequest, ServletContext)
              use RequestUtils.selectModule(HttpServletRequest,ServletContext) 
    org.apache.struts.util.RequestUtils.selectApplication(String, HttpServletRequest, ServletContext)
              use RequestUtils.selectModule(String,HttpServletRequest,ServletContext) 
    org.apache.struts.taglib.html.ImageTag.setAlign(String)
              Align attribute is deprecated in HTML 4.x. 
    org.apache.struts.config.ActionConfig.setApplicationConfig(ModuleConfig)
              ActionConfig.setModuleConfig(ModuleConfig) 
    org.apache.struts.taglib.template.PutTag.setContent(String)
              Use Tiles instead. 
    org.apache.struts.upload.MultipartElement.setData(byte[])
              Use the setFile method to set the file that represents the data of this element 
    org.apache.struts.tiles.DefinitionsFactoryConfig.setDebugLevel(int)
              Use commons-logging mechanism. 
    org.apache.struts.tiles.DefinitionsUtil.setDefinitionsFactory(ComponentDefinitionsFactory, ServletContext)
              since 20020708. Replaced by makeFactoryAccessible() 
    org.apache.struts.tiles.xmlDefinition.XmlParser.setDetailLevel(int)
              Use the commons-logging to set digester debug level. 
    org.apache.struts.taglib.template.PutTag.setDirect(String)
              Use Tiles instead. 
    org.apache.struts.config.FormBeanConfig.setDynamic(boolean)
              The value to be returned by getDynamic() is now computed automatically in setType() 
    org.apache.struts.taglib.template.GetTag.setFlush(boolean)
              Use Tiles instead. 
    org.apache.struts.taglib.tiles.InsertTag.setInstance(String)
              Use setDefinition() instead. 
    org.apache.struts.taglib.template.PutTag.setName(String)
              Use Tiles instead. 
    org.apache.struts.taglib.template.GetTag.setName(String)
              Use Tiles instead. 
    org.apache.struts.taglib.bean.IncludeTag.setName(String)
              use setPage(String) instead 
    org.apache.struts.tiles.DefinitionsFactoryConfig.setParserDebugLevel(int)
              Use commons-logging mechanism. 
    org.apache.struts.taglib.template.PutTag.setRole(String)
              Use Tiles instead. 
    org.apache.struts.taglib.template.GetTag.setRole(String)
              Use Tiles instead. 
    org.apache.struts.taglib.template.InsertTag.setTemplate(String)
              Use Tiles instead. 
    org.apache.struts.tiles.DefinitionsUtil.setUserDebugLevel(int)
              Use commons-logging package instead. 
    org.apache.struts.action.Action.toHex(byte[])
              This method will be removed in a release after Struts 1.1. 
    org.apache.struts.taglib.template.util.Content.toString()
              Use Tiles instead. 
    org.apache.struts.util.StrutsValidator.validateByte(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest)
              As of Struts 1.1, replaced by FieldChecks.validateByte(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest) 
    org.apache.struts.util.StrutsValidator.validateCreditCard(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest)
              As of Struts 1.1, replaced by FieldChecks.validateCreditCard(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest) Translated to Java by Ted Husted (husted@apache.org ).
        Reference Sean M. Burke's script at http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl

     
    org.apache.struts.util.StrutsValidator.validateDate(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest)
              As of Struts 1.1, replaced by FieldChecks.validateDate(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest) 
    org.apache.struts.util.StrutsValidator.validateDouble(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest)
              As of Struts 1.1, replaced by FieldChecks.validateDouble(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest) 
    org.apache.struts.util.StrutsValidator.validateEmail(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest)
              As of Struts 1.1, replaced by FieldChecks.validateEmail(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest) Based on a script by Sandeep V. Tamhankar (stamhankar@hotmail.com), http://javascript.internet.com

     
    org.apache.struts.util.StrutsValidator.validateFloat(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest)
              As of Struts 1.1, replaced by FieldChecks.validateFloat(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest) 
    org.apache.struts.util.StrutsValidator.validateInteger(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest)
              As of Struts 1.1, replaced by FieldChecks.validateInteger(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest) 
    org.apache.struts.util.StrutsValidator.validateLong(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest)
              As of Struts 1.1, replaced by FieldChecks.validateLong(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest) 
    org.apache.struts.util.StrutsValidator.validateMask(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest)
              As of Struts 1.1, replaced by FieldChecks.validateMask(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest) 
    org.apache.struts.util.StrutsValidator.validateMaxLength(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest)
              As of Struts 1.1, replaced by FieldChecks.validateMaxLength(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest) 
    org.apache.struts.util.StrutsValidator.validateMinLength(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest)
              As of Struts 1.1, replaced by FieldChecks.validateMinLength(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest) 
    org.apache.struts.validator.FieldChecks.validateRange(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest)
              As of Struts 1.1, replaced by FieldChecks.validateIntRange(java.lang.Object,org.apache.commons.validator.ValidatorAction,org.apache.commons.validator.Field,org.apache.struts.action.ActionErrors,javax.servlet.http.HttpServletRequest) 
    org.apache.struts.util.StrutsValidator.validateRange(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest)
              As of Struts 1.1, replaced by FieldChecks.validateIntRange(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest) 
    org.apache.struts.util.StrutsValidator.validateRequired(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest)
              As of Struts 1.1, replaced by FieldChecks.validateRequired(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest) 
    org.apache.struts.util.StrutsValidator.validateShort(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest)
              As of Struts 1.1, replaced by FieldChecks.validateShort(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest) 
     

    Deprecated Constructors
    org.apache.struts.config.ApplicationConfig(ModuleConfigImpl)
              Only used while we are deprecating ApplicationConfig to insure maximum compatability. 
    org.apache.struts.tiles.ComponentContext(ComponentDefinition)
              Use ComponentContext.ComponentContext(Map attributes) instead. 
    org.apache.struts.taglib.template.util.Content(String, String)
              Use Tiles instead. 
    org.apache.struts.taglib.template.util.ContentMap()
              Use Tiles instead. 
    org.apache.struts.config.impl.ModuleConfigImpl(ModuleConfigImpl)
              Only used while we are deprecating ApplicationConfig to insure maximum compatability. 
    org.apache.struts.upload.MultipartElement(String, String, String, byte[])
              Use the constructor that takes an File as an argument as opposed to a byte array argument, which can cause memory problems. 
     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/help-doc.html0000644000175000017500000002117510404045210022353 0ustar arnaudarnaud00000000000000 API Help (Apache Struts API Documentation)

    How This API Document Is Organized

    This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.

    Overview

    The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

    Package

    Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain four categories:

    • Interfaces (italic)
    • Classes
    • Exceptions
    • Errors

    Class/Interface

    Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

    • Class inheritance diagram
    • Direct Subclasses
    • All Known Subinterfaces
    • All Known Implementing Classes
    • Class/interface declaration
    • Class/interface description

    • Nested Class Summary
    • Field Summary
    • Constructor Summary
    • Method Summary

    • Field Detail
    • Constructor Detail
    • Method Detail
    Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

    Use

    Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.

    Tree (Class Hierarchy)

    There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.
    • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
    • When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.

    Deprecated API

    The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.

    Index

    The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.

    Prev/Next

    These links take you to the next or previous class, interface, package, or related page.

    Frames/No Frames

    These links show and hide the HTML frames. All pages are available with or without frames.

    Serialized Form

    Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.

    This help file applies to API documentation generated using the standard doclet.



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/index-all.html0000644000175000017500000446474610404045234022566 0ustar arnaudarnaud00000000000000 Index (Apache Struts API Documentation)
    A B C D E F G H I J K L M N O P R S T U V W X Y

    A

    absoluteURL(HttpServletRequest, String) - Static method in class org.apache.struts.util.RequestUtils
    Create and return an absolute URL for the specified context-relative path, based on the server and context information in the specified request.
    accept - Variable in class org.apache.struts.taglib.html.BaseFieldTag
    Comma-delimited list of content types that a server processing this form will handle correctly.
    accesskey - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
    Access key character.
    action - Variable in class org.apache.struts.tiles.ActionController
    Struts action wrapped.
    action - Variable in class org.apache.struts.taglib.html.LinkTag
    The module-relative action (beginning with a slash) which will be called by this link
    action - Variable in class org.apache.struts.taglib.html.FormTag
    The action URL to which this form should be submitted, if any.
    Action - class org.apache.struts.action.Action.
    An Action is an adapter between the contents of an incoming HTTP request and the corresponding business logic that should be executed to process this request.
    ACTION - Static variable in class org.apache.struts.tiles.ComponentDefinition
    Controller name type
    ACTION_DEFINITION - Static variable in class org.apache.struts.tiles.DefinitionsUtil
    Deprecated. Constant name used to store definition in jsp context.
    ACTION_ERRORS_KEY - Static variable in class org.apache.struts.validator.Resources
    Resources key the ActionErrors is stored under.
    ACTION_ERRORS_KEY - Static variable in class org.apache.struts.util.StrutsValidatorUtil
    Deprecated. Resources key the ActionErrors is stored under.
    ACTION_SERVLET_KEY - Static variable in class org.apache.struts.Globals
    The context attributes key under which our ActionServlet instance will be stored.
    ACTION_SERVLET_KEY - Static variable in class org.apache.struts.action.Action
    Deprecated. Use Globals.ACTION_SERVLET_KEY instead.
    Action() - Constructor for class org.apache.struts.action.Action
     
    action(String) - Method in class org.apache.struts.config.ConfigHelper
    Wrapper for getAction(String)
    ActionComponentServlet - class org.apache.struts.tiles.ActionComponentServlet.
    Deprecated. Tiles now uses ActionServlet with TilesPlugin and TilesRequestProcessor.
    ActionComponentServlet() - Constructor for class org.apache.struts.tiles.ActionComponentServlet
    Deprecated.  
    ActionConfig - class org.apache.struts.config.ActionConfig.
    A JavaBean representing the configuration information of an <action> element from a Struts module configuration file.
    ActionConfig() - Constructor for class org.apache.struts.config.ActionConfig
     
    actionConfigs - Variable in class org.apache.struts.config.impl.ModuleConfigImpl
    The set of action configurations for this module, if any, keyed by the path property.
    ActionController - class org.apache.struts.tiles.ActionController.
    Struts wrapper implementation of Controller.
    ActionController(Action) - Constructor for class org.apache.struts.tiles.ActionController
    Constructor.
    ActionError - class org.apache.struts.action.ActionError.
    An encapsulation of an individual error message returned by the validate() method of an ActionForm, consisting of a message key (to be used to look up message text in an appropriate message resources database) plus up to four placeholder objects that can be used for parametric replacement in the message text.
    ActionError(String) - Constructor for class org.apache.struts.action.ActionError
    Construct an action error with no replacement values.
    ActionError(String, Object) - Constructor for class org.apache.struts.action.ActionError
    Construct an action error with the specified replacement values.
    ActionError(String, Object[]) - Constructor for class org.apache.struts.action.ActionError
    Construct an action error with the specified replacement values.
    ActionError(String, Object, Object) - Constructor for class org.apache.struts.action.ActionError
    Construct an action error with the specified replacement values.
    ActionError(String, Object, Object, Object) - Constructor for class org.apache.struts.action.ActionError
    Construct an action error with the specified replacement values.
    ActionError(String, Object, Object, Object, Object) - Constructor for class org.apache.struts.action.ActionError
    Construct an action error with the specified replacement values.
    ActionErrors - class org.apache.struts.action.ActionErrors.
    A class that encapsulates the error messages being reported by the validate() method of an ActionForm.
    ActionErrors() - Constructor for class org.apache.struts.action.ActionErrors
    Create an empty ActionErrors object.
    ActionErrors(ActionErrors) - Constructor for class org.apache.struts.action.ActionErrors
    Create an ActionErrors object initialized with the given messages.
    ActionException - class org.apache.struts.action.ActionException.
    Deprecated. Replaced by org.apache.struts.config.ExceptionConfig
    ActionException() - Constructor for class org.apache.struts.action.ActionException
    Deprecated.  
    ActionForm - class org.apache.struts.action.ActionForm.
    An ActionForm is a JavaBean optionally associated with one or more ActionMappings.
    ActionForm() - Constructor for class org.apache.struts.action.ActionForm
     
    ActionFormBean - class org.apache.struts.action.ActionFormBean.
    An ActionFormBean is the definition of a form bean that is loaded from a <form-bean> element in the Struts configuration file.
    ActionFormBean() - Constructor for class org.apache.struts.action.ActionFormBean
    Construct an instance with default vaslues.
    ActionFormBean(String, String) - Constructor for class org.apache.struts.action.ActionFormBean
    Construct an instance with the specified values.
    ActionFormBeans - class org.apache.struts.action.ActionFormBeans.
    Deprecated. Replaced by collection of FormBeanConfig instances in ModuleConfig
    ActionFormBeans() - Constructor for class org.apache.struts.action.ActionFormBeans
    Deprecated.  
    ActionForward - class org.apache.struts.action.ActionForward.
    An ActionForward represents a destination to which the controller servlet, ActionServlet, might be directed to perform a RequestDispatcher.forward() or HttpServletResponse.sendRedirect() to, as a result of processing activities of an Action class.
    ActionForward() - Constructor for class org.apache.struts.action.ActionForward
    Construct a new instance with default values.
    ActionForward(String) - Constructor for class org.apache.struts.action.ActionForward
    Construct a new instance with the specified path.
    ActionForward(String, boolean) - Constructor for class org.apache.struts.action.ActionForward
    Construct a new instance with the specified path and redirect flag.
    ActionForward(String, String, boolean) - Constructor for class org.apache.struts.action.ActionForward
    Construct a new instance with the specified path and redirect flag.
    ActionForward(String, String, boolean, boolean) - Constructor for class org.apache.struts.action.ActionForward
    Construct a new instance with the specified values.
    ActionForwards - class org.apache.struts.action.ActionForwards.
    Deprecated. Replaced by collection of ForwardConfig instances in ModuleConfig and ActionConfig
    ActionForwards() - Constructor for class org.apache.struts.action.ActionForwards
    Deprecated.  
    ActionMapping - class org.apache.struts.action.ActionMapping.
    An ActionMapping represents the information that the controller servlet, ActionServlet, knows about the mapping of a particular request to an instance of a particular action class.
    ActionMapping() - Constructor for class org.apache.struts.action.ActionMapping
     
    actionMappingClass - Variable in class org.apache.struts.config.impl.ModuleConfigImpl
    The default class name to be used when creating action mapping instances.
    ActionMappingFactory - class org.apache.struts.config.ActionMappingFactory.
    An object creation factory which creates action mapping instances, taking into account the default class name, which may have been specified on the parent element and which is made available through the object on the top of the stack, which must be a org.apache.struts.config.ModuleConfig.
    ActionMappingFactory() - Constructor for class org.apache.struts.config.ActionMappingFactory
     
    ActionMappings - class org.apache.struts.action.ActionMappings.
    Deprecated. Replaced by collection of ActionConfig instances in ModuleConfig
    ActionMappings() - Constructor for class org.apache.struts.action.ActionMappings
    Deprecated.  
    ActionMessage - class org.apache.struts.action.ActionMessage.
    An encapsulation of an individual message returned by the validate() method of an ActionForm, consisting of a message key (to be used to look up message text in an appropriate message resources database) plus up to four placeholder objects that can be used for parametric replacement in the message text.
    ActionMessage(String) - Constructor for class org.apache.struts.action.ActionMessage
    Construct an action message with no replacement values.
    ActionMessage(String, Object) - Constructor for class org.apache.struts.action.ActionMessage
    Construct an action message with the specified replacement values.
    ActionMessage(String, Object[]) - Constructor for class org.apache.struts.action.ActionMessage
    Construct an action message with the specified replacement values.
    ActionMessage(String, Object, Object) - Constructor for class org.apache.struts.action.ActionMessage
    Construct an action message with the specified replacement values.
    ActionMessage(String, Object, Object, Object) - Constructor for class org.apache.struts.action.ActionMessage
    Construct an action message with the specified replacement values.
    ActionMessage(String, Object, Object, Object, Object) - Constructor for class org.apache.struts.action.ActionMessage
    Construct an action message with the specified replacement values.
    ActionMessages - class org.apache.struts.action.ActionMessages.
    A class that encapsulates messages.
    ActionMessages.ActionMessageItem - class org.apache.struts.action.ActionMessages.ActionMessageItem.
    This class is used to store a set of messages associated with a property/key and the position it was initially added to list.
    ActionMessages.ActionMessageItem(List, int) - Constructor for class org.apache.struts.action.ActionMessages.ActionMessageItem
     
    ActionMessages() - Constructor for class org.apache.struts.action.ActionMessages
    Create an empty ActionMessages object.
    ActionMessages(ActionMessages) - Constructor for class org.apache.struts.action.ActionMessages
    Create an ActionMessages object initialized with the given messages.
    actions - Variable in class org.apache.struts.action.RequestProcessor
    The set of Action instances that have been created and initialized, keyed by the fully qualified Java class name of the Action class.
    ActionServlet - class org.apache.struts.action.ActionServlet.
    ActionServlet represents the "controller" in the Model-View-Controller (MVC) design pattern for web applications that is commonly known as "Model 2".
    ActionServlet() - Constructor for class org.apache.struts.action.ActionServlet
     
    ActionServletWrapper - class org.apache.struts.action.ActionServletWrapper.
    Provide a wrapper around an ActionServlet to expose only those methods needed by other objects.
    ActionServletWrapper(ActionServlet) - Constructor for class org.apache.struts.action.ActionServletWrapper
    Create object and set servlet property.
    actionURL(HttpServletRequest, ActionConfig, String) - Static method in class org.apache.struts.util.RequestUtils
    Return the context-relative URL that corresponds to the specified ActionConfig, relative to the module associated with the current modules's ModuleConfig.
    add(ActionMessages) - Method in class org.apache.struts.action.ActionMessages
    Adds the messages from the given ActionMessages object to this set of messages.
    add(Object) - Method in class org.apache.struts.tiles.xmlDefinition.XmlListAttribute
    Add an element in list.
    add(String, ActionError) - Method in class org.apache.struts.action.ActionErrors
    Add an error message to the set of errors for the specified property.
    add(String, ActionMessage) - Method in class org.apache.struts.action.ActionMessages
    Add a message to the set of messages for the specified property.
    add(XmlAttribute) - Method in class org.apache.struts.tiles.xmlDefinition.XmlListAttribute
    Add an element in list.
    addActionConfig(ActionConfig) - Method in interface org.apache.struts.config.ModuleConfig
    Add a new ActionConfig instance to the set associated with this module.
    addActionConfig(ActionConfig) - Method in class org.apache.struts.config.impl.ModuleConfigImpl
    Add a new ActionConfig instance to the set associated with this module.
    addAll(Map) - Method in class org.apache.struts.tiles.ComponentContext
    Add all attributes to this context.
    addAttribute(XmlAttribute) - Method in class org.apache.struts.tiles.xmlDefinition.XmlDefinition
    Add an attribute to this component.
    addDataSourceConfig(DataSourceConfig) - Method in interface org.apache.struts.config.ModuleConfig
    Add a new DataSourceConfig instance to the set associated with this module.
    addDataSourceConfig(DataSourceConfig) - Method in class org.apache.struts.config.impl.ModuleConfigImpl
    Add a new DataSourceConfig instance to the set associated with this module.
    AddDataSourcePropertyRule - class org.apache.struts.config.AddDataSourcePropertyRule.
    Class that calls addProperty() for the top object on the stack, which must be a org.apache.struts.config.DataSourceConfig.
    AddDataSourcePropertyRule() - Constructor for class org.apache.struts.config.AddDataSourcePropertyRule
     
    addElement(Object) - Method in class org.apache.struts.taglib.tiles.PutListTag
    Set property.
    addError(String) - Method in class org.apache.struts.util.ErrorMessages
    Deprecated. Add an error message key to the accumulated set of errors.
    addExceptionConfig(ExceptionConfig) - Method in interface org.apache.struts.config.ModuleConfig
    Add a new ExceptionConfig instance to the set associated with this module.
    addExceptionConfig(ExceptionConfig) - Method in class org.apache.struts.config.ActionConfig
    Add a new ExceptionConfig instance to the set associated with this action.
    addExceptionConfig(ExceptionConfig) - Method in class org.apache.struts.config.impl.ModuleConfigImpl
    Add a new ExceptionConfig instance to the set associated with this module.
    addFileParameter(FileItem) - Method in class org.apache.struts.upload.CommonsMultipartRequestHandler
    Adds a file parameter to the set of file parameters for this request and also to the list of all parameters.
    addFormBean(ActionFormBean) - Method in class org.apache.struts.action.ActionFormBeans
    Deprecated. Register a form bean to the set configured for this servlet.
    addFormBeanConfig(FormBeanConfig) - Method in interface org.apache.struts.config.ModuleConfig
    Add a new FormBeanConfig instance to the set associated with this module.
    addFormBeanConfig(FormBeanConfig) - Method in class org.apache.struts.config.impl.ModuleConfigImpl
    Add a new FormBeanConfig instance to the set associated with this module.
    addFormPropertyConfig(FormPropertyConfig) - Method in class org.apache.struts.config.FormBeanConfig
    Add a new FormPropertyConfig instance to the set associated with this module.
    addForward(ActionForward) - Method in class org.apache.struts.action.ActionForwards
    Deprecated. Register a logical forwarding to the set configured for this servlet.
    addForwardConfig(ForwardConfig) - Method in interface org.apache.struts.config.ModuleConfig
    Add a new ForwardConfig instance to the set of global forwards associated with this module.
    addForwardConfig(ForwardConfig) - Method in class org.apache.struts.config.ActionConfig
    Add a new ForwardConfig instance to the set of global forwards associated with this action.
    addForwardConfig(ForwardConfig) - Method in class org.apache.struts.config.impl.ModuleConfigImpl
    Add a new ForwardConfig instance to the set of global forwards associated with this module.
    addMapping(ActionMapping) - Method in class org.apache.struts.action.ActionMappings
    Deprecated. Register a logical mapping to the set configured for this servlet.
    addMessageResourcesConfig(MessageResourcesConfig) - Method in interface org.apache.struts.config.ModuleConfig
    Add a new MessageResourcesConfig instance to the set associated with this module.
    addMessageResourcesConfig(MessageResourcesConfig) - Method in class org.apache.struts.config.impl.ModuleConfigImpl
    Add a new MessageResourcesConfig instance to the set associated with this module.
    addMissing(Map) - Method in class org.apache.struts.tiles.ComponentContext
    Add all missing attributes to this context.
    addObject(Object) - Method in class org.apache.struts.tiles.xmlDefinition.XmlListAttribute
    Add an element in list.
    addOption(StringBuffer, String, String, boolean) - Method in class org.apache.struts.taglib.html.OptionsTag
    Add an option element to the specified StringBuffer based on the specified parameters.
    addOption(StringBuffer, String, String, boolean) - Method in class org.apache.struts.taglib.html.OptionsCollectionTag
    Add an option element to the specified StringBuffer based on the specified parameters.
    addPlugInConfig(PlugInConfig) - Method in interface org.apache.struts.config.ModuleConfig
    Add a newly configured PlugInConfig instance to the set of plug-in Actions for this module.
    addPlugInConfig(PlugInConfig) - Method in class org.apache.struts.config.impl.ModuleConfigImpl
    Add a newly configured PlugInConfig instance to the set of plug-in Actions for this module.
    addProperty(String, String) - Method in class org.apache.struts.config.PlugInConfig
    Add a new property name and value to the set that will be used to configure the PlugIn instance.
    addProperty(String, String) - Method in class org.apache.struts.config.DataSourceConfig
    Add a new custom configuration property.
    addRuleInstances(Digester) - Method in class org.apache.struts.config.ConfigRuleSet
    Add the set of Rule instances defined in this RuleSet to the specified Digester instance, associating them with our namespace URI (if any).
    addServletMapping(String, String) - Method in class org.apache.struts.action.ActionServlet
    Remember a servlet mapping from our web application deployment descriptor, if it is for this servlet.
    AddTag - class org.apache.struts.taglib.tiles.AddTag.
    Add an element to the surrounding list tag.
    AddTag() - Constructor for class org.apache.struts.taglib.tiles.AddTag
    default constructor
    AddTagParent - interface org.apache.struts.taglib.tiles.AddTagParent.
    Tag classes implementing this interface can contain nested PutTags.
    addTextParameter(HttpServletRequest, FileItem) - Method in class org.apache.struts.upload.CommonsMultipartRequestHandler
    Adds a regular text parameter to the set of text parameters for this request and also to the list of all parameters.
    align - Variable in class org.apache.struts.taglib.html.ImageTag
    The alignment for this image.
    align - Variable in class org.apache.struts.taglib.html.ImgTag
    The property to specify where to align the image.
    allElements - Variable in class org.apache.struts.upload.DiskMultipartRequestHandler
    A Hashtable representing all elemnents.
    alt - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
    The alternate text of this element.
    altKey - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
    The message resources key of the alternate text.
    anchor - Variable in class org.apache.struts.taglib.logic.RedirectTag
    The anchor to be added to the end of the generated hyperlink.
    anchor - Variable in class org.apache.struts.taglib.html.LinkTag
    The anchor to be added to the end of the generated hyperlink.
    anchor - Variable in class org.apache.struts.taglib.bean.IncludeTag
    The anchor to be added to the end of the generated hyperlink.
    appConfig - Variable in class org.apache.struts.action.RequestProcessor
    Deprecated. use moduleConfig instead.
    AppException - exception org.apache.struts.util.AppException.
    Deprecated. use ModuleException
    AppException(String) - Constructor for class org.apache.struts.util.AppException
    Deprecated. Construct an module exception with no replacement values.
    AppException(String, Object) - Constructor for class org.apache.struts.util.AppException
    Deprecated. Construct an module exception with the specified replacement values.
    AppException(String, Object[]) - Constructor for class org.apache.struts.util.AppException
    Deprecated. Construct an action error with the specified replacement values.
    AppException(String, Object, Object) - Constructor for class org.apache.struts.util.AppException
    Deprecated. Construct an module exception with the specified replacement values.
    AppException(String, Object, Object, Object) - Constructor for class org.apache.struts.util.AppException
    Deprecated. Construct an module exception with the specified replacement values.
    AppException(String, Object, Object, Object, Object) - Constructor for class org.apache.struts.util.AppException
    Deprecated. Construct an module exception with the specified replacement values.
    application - Variable in class org.apache.struts.config.ConfigHelper
    The application associated with this instance.
    APPLICATION_KEY - Static variable in class org.apache.struts.Globals
    Deprecated. Use MODULE_KEY
    APPLICATION_KEY - Static variable in class org.apache.struts.action.Action
    Deprecated. Replaced by Globals.MODULE_KEY
    applicationClass(String) - Static method in class org.apache.struts.util.RequestUtils
    Return the Class object for the specified fully qualified class name, from this web application's class loader.
    applicationClass(String) - Static method in class org.apache.struts.tiles.TilesUtil
    Deprecated. Use RequestUtils.applicationClass() instead.
    applicationClass(String) - Method in class org.apache.struts.tiles.TilesUtilImpl
    Deprecated. Use RequestUtils.applicationClass() instead.
    applicationClass(String) - Method in class org.apache.struts.tiles.TilesUtilStrutsImpl
    Deprecated. Use RequestUtils.applicationClass() instead.
    ApplicationConfig - class org.apache.struts.config.ApplicationConfig.
    Deprecated. Usage replaced by ModuleConfig Interface.
    ApplicationConfig(ModuleConfigImpl) - Constructor for class org.apache.struts.config.ApplicationConfig
    Deprecated. Only used while we are deprecating ApplicationConfig to insure maximum compatability.
    ApplicationConfig(String) - Constructor for class org.apache.struts.config.ApplicationConfig
    Deprecated. Construct an ApplicationConfig object according to the specified parameter values.
    applicationInstance(String) - Static method in class org.apache.struts.util.RequestUtils
    Return a new instance of the specified fully qualified class name, after loading the class from this web application's class loader.
    arg0 - Variable in class org.apache.struts.taglib.bean.MessageTag
    The first optional argument.
    arg1 - Variable in class org.apache.struts.taglib.bean.MessageTag
    The second optional argument.
    arg2 - Variable in class org.apache.struts.taglib.bean.MessageTag
    The third optional argument.
    arg3 - Variable in class org.apache.struts.taglib.bean.MessageTag
    The fourth optional argument.
    arg4 - Variable in class org.apache.struts.taglib.bean.MessageTag
    The fifth optional argument.
    attribute - Variable in class org.apache.struts.taglib.tiles.GetAttributeTag
     
    attribute - Variable in class org.apache.struts.taglib.tiles.InsertTag
    Name of attribute from which to read page name to include
    attribute - Variable in class org.apache.struts.config.ActionConfig
    The request-scope or session-scope attribute name under which our form bean is accessed, if it is different from the form bean's specified name.
    ATTRIBUTE_MAX_LENGTH_EXCEEDED - Static variable in interface org.apache.struts.upload.MultipartRequestHandler
    This is the ServletRequest attribute that should be set when a multipart request is being read and the maximum length is exceeded.
    AttributeDefinition - interface org.apache.struts.tiles.AttributeDefinition.
    Attribute definition used in a component definition.
    attributeName - Variable in class org.apache.struts.taglib.tiles.PutListTag
    Name of this attribute.
    attributeName - Variable in class org.apache.struts.taglib.tiles.PutTag
    Name of attribute to put in component context
    attributeName - Variable in class org.apache.struts.taglib.tiles.UseAttributeTag
    The attribute name to be exposed.
    attributes - Variable in class org.apache.struts.tiles.ComponentContext
    Component attributes.
    attributes - Variable in class org.apache.struts.tiles.ComponentDefinition
    Attributes defined for the component.
    AttributeToScopeTag - class org.apache.struts.taglib.tiles.AttributeToScopeTag.
    Deprecated. Is it still in use ?
    AttributeToScopeTag() - Constructor for class org.apache.struts.taglib.tiles.AttributeToScopeTag
    Deprecated.  
    available() - Method in class org.apache.struts.upload.BufferedMultipartInputStream
    This method returns the number of available bytes left to read in the buffer before it has to be refilled
    availableInLine() - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
     

    B

    BaseFieldTag - class org.apache.struts.taglib.html.BaseFieldTag.
    Convenience base class for the various input tags for text fields.
    BaseFieldTag() - Constructor for class org.apache.struts.taglib.html.BaseFieldTag
     
    BaseHandlerTag - class org.apache.struts.taglib.html.BaseHandlerTag.
    Base class for tags that render form elements capable of including JavaScript event handlers and/or CSS Style attributes.
    BaseHandlerTag() - Constructor for class org.apache.struts.taglib.html.BaseHandlerTag
     
    BaseInputTag - class org.apache.struts.taglib.html.BaseInputTag.
    Abstract base class for the various input tags.
    BaseInputTag() - Constructor for class org.apache.struts.taglib.html.BaseInputTag
     
    BaseTag - class org.apache.struts.taglib.html.BaseTag.
    Renders an HTML element with an href attribute pointing to the absolute location of the enclosing JSP page.
    BaseTag() - Constructor for class org.apache.struts.taglib.html.BaseTag
     
    BEAN_KEY - Static variable in class org.apache.struts.taglib.html.Constants
    The attribute key for the bean our form is related to.
    beanClass - Variable in class org.apache.struts.action.DynaActionFormClass
    The DynaActionForm implementation Class which we will use to create new bean instances.
    beanName - Variable in class org.apache.struts.taglib.tiles.PutTag
    Bean name attribute
    beanName - Variable in class org.apache.struts.taglib.tiles.InsertTag
    Name of bean used as entity to include
    beanName - Variable in class org.apache.struts.taglib.nested.NestedReference
     
    beanName - Variable in class org.apache.struts.taglib.html.FormTag
    The name of the form bean to (create and) use.
    beanProperty - Variable in class org.apache.struts.taglib.tiles.PutTag
    Bean property attribute
    beanProperty - Variable in class org.apache.struts.taglib.tiles.InsertTag
    Name of bean property, if any
    beanScope - Variable in class org.apache.struts.taglib.tiles.PutTag
    Bean scope attribute
    beanScope - Variable in class org.apache.struts.taglib.tiles.InsertTag
    Scope of bean, if any
    beanScope - Variable in class org.apache.struts.taglib.html.FormTag
    The scope of the form bean to (create and) use.
    beanType - Variable in class org.apache.struts.taglib.html.FormTag
    The type of the form bean to (create and) use.
    begin(Attributes) - Method in class org.apache.struts.config.SetActionMappingClassRule
     
    begin(Attributes) - Method in class org.apache.struts.config.PlugInSetPropertyRule
     
    begin(Attributes) - Method in class org.apache.struts.config.AddDataSourcePropertyRule
     
    body - Variable in class org.apache.struts.taglib.bean.DefineTag
    The body content of this tag (if any).
    border - Variable in class org.apache.struts.taglib.html.ImageTag
    The border size around the image.
    border - Variable in class org.apache.struts.taglib.html.ImgTag
    The border size around the image.
    boundary - Variable in class org.apache.struts.upload.MultipartBoundaryInputStream
    The boundary.
    boundary - Variable in class org.apache.struts.upload.MultipartIterator
    The boundary for this multipart request
    boundaryBytes - Variable in class org.apache.struts.upload.MultipartValueStream
    byte buffer with the boundary
    boundaryBytes - Variable in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    boundaryEncountered - Variable in class org.apache.struts.upload.MultipartBoundaryInputStream
    Whether or not the boundary has been encountered.
    boundaryReached - Variable in class org.apache.struts.upload.MultipartValueStream
    have we reached the boundary?
    buffer - Variable in class org.apache.struts.util.ServletContextWriter
    The buffer into which we accumulate lines to be logged.
    buffer - Variable in class org.apache.struts.upload.BufferedMultipartInputStream
    The byte array used to hold buffered data
    BUFFER_SIZE - Static variable in class org.apache.struts.taglib.bean.IncludeTag
    Buffer size to use when reading the input stream.
    BUFFER_SIZE - Static variable in class org.apache.struts.taglib.bean.ResourceTag
    Buffer size to use when reading the input stream.
    BufferedMultipartInputStream - class org.apache.struts.upload.BufferedMultipartInputStream.
    This class implements buffering for an InputStream as well as a readLine method.
    BufferedMultipartInputStream(InputStream, int, long, long) - Constructor for class org.apache.struts.upload.BufferedMultipartInputStream
    Public constructor for this class, just wraps the InputStream given
    bufferLength - Variable in class org.apache.struts.upload.BufferedMultipartInputStream
    The number of bytes read from the underlying InputStream that are in the buffer
    bufferOffset - Variable in class org.apache.struts.upload.BufferedMultipartInputStream
    The current offset we're at in the buffer's byte array
    bufferSize - Variable in class org.apache.struts.upload.BufferedMultipartInputStream
    The size of the byte array buffer
    bufferSize - Variable in class org.apache.struts.upload.MultipartIterator
    The amount of data read from a request at a time.
    bufferSize - Variable in class org.apache.struts.config.ControllerConfig
    The input buffer size for file uploads.
    bundle - Variable in class org.apache.struts.taglib.html.ErrorsTag
    The servlet context attribute key for our resources.
    bundle - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
    The name of the message resources bundle for message lookups.
    bundle - Variable in class org.apache.struts.taglib.html.JavascriptValidatorTag
    The servlet context attribute key for our resources.
    bundle - Variable in class org.apache.struts.taglib.html.MessagesTag
    The servlet context attribute key for our resources.
    bundle - Variable in class org.apache.struts.taglib.html.OptionTag
    The name of the servlet context attribute containing our message resources.
    bundle - Variable in class org.apache.struts.taglib.bean.MessageTag
    The servlet context attribute key for our resources.
    bundle - Variable in class org.apache.struts.taglib.bean.WriteTag
    The servlet context attribute key for our resources.
    bundle - Variable in class org.apache.struts.config.ExceptionConfig
    The servlet context attribute under which the message resources bundle to be used for this exception is located.
    ButtonTag - class org.apache.struts.taglib.html.ButtonTag.
    Renders an HTML BUTTON tag within the Struts framework.
    ButtonTag() - Constructor for class org.apache.struts.taglib.html.ButtonTag
     
    byteRead() - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    bytesRead - Variable in class org.apache.struts.upload.MultipartBoundaryInputStream
    The total number of bytes read so far.

    C

    cachedCurrentContext - Variable in class org.apache.struts.taglib.tiles.InsertTag
    Current component context
    calculateMatchValues() - Method in class org.apache.struts.taglib.html.SelectTag
    Calculate the match values we will actually be using.
    calculatePostixes(String, Locale) - Static method in class org.apache.struts.tiles.xmlDefinition.I18nFactorySet
    Calculate the postixes along the search path from the base bundle to the bundle specified by baseName and locale.
    calculateRelativeProperty(String, String) - Static method in class org.apache.struts.taglib.nested.NestedPropertyHelper
     
    calculateURL() - Method in class org.apache.struts.taglib.html.LinkTag
    Return the complete URL to which this hyperlink will direct the user.
    callParent() - Method in class org.apache.struts.taglib.tiles.PutTag
    Find parent tag which must implement AttributeContainer.
    callParent() - Method in class org.apache.struts.taglib.tiles.AddTag
    Call parent tag which must implement AttributeContainer.
    CANCEL_KEY - Static variable in class org.apache.struts.Globals
    The request attributes key under which a boolean true value should be stored if this request was cancelled.
    CANCEL_PROPERTY - Static variable in class org.apache.struts.taglib.html.Constants
    The property under which a Cancel button press is reported.
    CANCEL_PROPERTY_X - Static variable in class org.apache.struts.taglib.html.Constants
    The property under which a Cancel button press is reported, if the Cancel button is rendered as an image.
    CancelTag - class org.apache.struts.taglib.html.CancelTag.
    Tag for input fields of type "cancel".
    CancelTag() - Constructor for class org.apache.struts.taglib.html.CancelTag
     
    CARRIAGE_RETURN - Static variable in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    cdata - Variable in class org.apache.struts.taglib.html.JavascriptValidatorTag
    Hide JavaScript methods in a CDATA section for XHTML when "true".
    checkAndFixFilename(String) - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    CheckboxTag - class org.apache.struts.taglib.html.CheckboxTag.
    Tag for input fields of type "checkbox".
    CheckboxTag() - Constructor for class org.apache.struts.taglib.html.CheckboxTag
     
    checkError() - Method in class org.apache.struts.util.ServletContextWriter
    Flush the stream and check for its error state.
    checkForBoundary() - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    classname - Variable in class org.apache.struts.taglib.tiles.InitDefinitionsTag
     
    classname - Variable in class org.apache.struts.taglib.tiles.UseAttributeTag
    Class name of object.
    className - Variable in class org.apache.struts.config.PlugInConfig
    The fully qualified Java class name of the PlugIn implementation class being configured.
    clazz - Static variable in class org.apache.struts.util.MessageResourcesFactory
    The Java class to be used for MessageResourcesFactory instances.
    clazz - Static variable in class org.apache.struts.config.ModuleConfigFactory
    The Java class to be used for ModuleConfigFactory instances.
    clazz - Variable in class org.apache.struts.actions.DispatchAction
    The Class instance of this DispatchAction class.
    clear() - Method in class org.apache.struts.action.ActionMessages
    Clear all messages recorded by this object.
    clear() - Static method in class org.apache.struts.action.DynaActionFormClass
    Clear our cache of DynaActionFormClass instances.
    close() - Method in class org.apache.struts.util.ServletContextWriter
    Close the stream.
    close() - Method in class org.apache.struts.upload.BufferedMultipartInputStream
    This method attempts to close the underlying InputStream
    collection - Variable in class org.apache.struts.taglib.logic.IterateTag
    The collection over which we will be iterating.
    collection - Variable in class org.apache.struts.taglib.html.OptionsTag
    The name of the collection containing beans that have properties to provide both the values and the labels (identified by the property and labelProperty attributes).
    collection - Variable in class org.apache.struts.taglib.bean.SizeTag
    The actual collection to be counted.
    cols - Variable in class org.apache.struts.taglib.html.BaseInputTag
    The number of character columns for this field, or negative for no limit.
    CommonsMultipartRequestHandler - class org.apache.struts.upload.CommonsMultipartRequestHandler.
    This class implements the MultipartRequestHandler interface by providing a wrapper around the Jakarta Commons FileUpload library.
    CommonsMultipartRequestHandler.CommonsFormFile - class org.apache.struts.upload.CommonsMultipartRequestHandler.CommonsFormFile.
    This class implements the Struts FormFile interface by wrapping the Commons FileUpload FileItem interface.
    CommonsMultipartRequestHandler.CommonsFormFile(FileItem) - Constructor for class org.apache.struts.upload.CommonsMultipartRequestHandler.CommonsFormFile
    Constructs an instance of this class which wraps the supplied file item.
    CommonsMultipartRequestHandler() - Constructor for class org.apache.struts.upload.CommonsMultipartRequestHandler
     
    CompareTagBase - class org.apache.struts.taglib.logic.CompareTagBase.
    Abstract base class for comparison tags.
    CompareTagBase() - Constructor for class org.apache.struts.taglib.logic.CompareTagBase
     
    COMPONENT_CONTEXT - Static variable in interface org.apache.struts.taglib.tiles.ComponentConstants
    Name used to store Tile/Component context.
    COMPONENT_SCOPE - Static variable in interface org.apache.struts.taglib.tiles.ComponentConstants
     
    ComponentConstants - interface org.apache.struts.taglib.tiles.ComponentConstants.
    Constants used by Tiles/Components.
    ComponentContext - class org.apache.struts.tiles.ComponentContext.
    Component context.
    ComponentContext() - Constructor for class org.apache.struts.tiles.ComponentContext
    Constructor.
    ComponentContext(ComponentDefinition) - Constructor for class org.apache.struts.tiles.ComponentContext
    Deprecated. Use ComponentContext.ComponentContext(Map attributes) instead.
    ComponentContext(Map) - Constructor for class org.apache.struts.tiles.ComponentContext
    Constructor.
    ComponentDefinition - class org.apache.struts.tiles.ComponentDefinition.
    Definition of a template / component attributes.
    ComponentDefinition() - Constructor for class org.apache.struts.tiles.ComponentDefinition
    Constructor.
    ComponentDefinition(ComponentDefinition) - Constructor for class org.apache.struts.tiles.ComponentDefinition
    Copy Constructor.
    ComponentDefinition(String, String, Map) - Constructor for class org.apache.struts.tiles.ComponentDefinition
    Constructor.
    ComponentDefinition(XmlDefinition) - Constructor for class org.apache.struts.tiles.ComponentDefinition
    Constructor.
    ComponentDefinitionsFactory - interface org.apache.struts.tiles.ComponentDefinitionsFactory.
    Deprecated. Use DefinitionsFactory instead.
    ComponentDefinitionsFactoryWrapper - class org.apache.struts.tiles.definition.ComponentDefinitionsFactoryWrapper.
    Wrapper from new definition factory interface to old interface.
    ComponentDefinitionsFactoryWrapper() - Constructor for class org.apache.struts.tiles.definition.ComponentDefinitionsFactoryWrapper
    Constructor.
    ComponentDefinitionsFactoryWrapper(ComponentDefinitionsFactory) - Constructor for class org.apache.struts.tiles.definition.ComponentDefinitionsFactoryWrapper
    Constructor.
    computeParameters(PageContext, String, String, String, String, String, String, String, boolean) - Static method in class org.apache.struts.util.RequestUtils
    Compute a set of query parameters that will be dynamically added to a generated URL.
    computeRealValue() - Method in class org.apache.struts.tiles.xmlDefinition.XmlAttribute
    Compute real value from attributes setting.
    computeRealValue() - Method in class org.apache.struts.taglib.tiles.PutTag
    Compute real value according to tag attributes.
    computeURL(PageContext, String, String, String, Map, String, boolean) - Static method in class org.apache.struts.util.RequestUtils
    Deprecated. To be removed in Version 1.3. Use RequestUtils.computeURL(PageContext, String, String, String, String, Map, String, boolean) instead.
    computeURL(PageContext, String, String, String, String, Map, String, boolean) - Static method in class org.apache.struts.util.RequestUtils
    Compute a hyperlink URL based on the forward, href, action or page parameter that is not null.
    computeURL(PageContext, String, String, String, String, Map, String, boolean, boolean) - Static method in class org.apache.struts.util.RequestUtils
    Compute a hyperlink URL based on the forward, href, action or page parameter that is not null.
    concatPostfix(String, String) - Method in class org.apache.struts.tiles.xmlDefinition.I18nFactorySet
    Concat postfix to the name.
    condition() - Method in class org.apache.struts.taglib.logic.NotPresentTag
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
    condition() - Method in class org.apache.struts.taglib.logic.NotMatchTag
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
    condition() - Method in class org.apache.struts.taglib.logic.NotEqualTag
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
    condition() - Method in class org.apache.struts.taglib.logic.LessThanTag
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
    condition() - Method in class org.apache.struts.taglib.logic.LessEqualTag
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
    condition() - Method in class org.apache.struts.taglib.logic.GreaterThanTag
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
    condition() - Method in class org.apache.struts.taglib.logic.GreaterEqualTag
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
    condition() - Method in class org.apache.struts.taglib.logic.EqualTag
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
    condition() - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
    condition() - Method in class org.apache.struts.taglib.logic.EmptyTag
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
    condition() - Method in class org.apache.struts.taglib.logic.PresentTag
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
    condition() - Method in class org.apache.struts.taglib.logic.MessagesPresentTag
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
    condition() - Method in class org.apache.struts.taglib.logic.MatchTag
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
    condition() - Method in class org.apache.struts.taglib.logic.CompareTagBase
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
    condition() - Method in class org.apache.struts.taglib.logic.NotEmptyTag
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
    condition() - Method in class org.apache.struts.taglib.logic.MessagesNotPresentTag
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
    condition(boolean) - Method in class org.apache.struts.taglib.logic.EmptyTag
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
    condition(boolean) - Method in class org.apache.struts.taglib.logic.PresentTag
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
    condition(boolean) - Method in class org.apache.struts.taglib.logic.MessagesPresentTag
    Evaluate the condition that is being tested by this particular tag, and return true if there is at least one message in the class or for the property specified.
    condition(boolean) - Method in class org.apache.struts.taglib.logic.MatchTag
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
    condition(int, int) - Method in class org.apache.struts.taglib.logic.CompareTagBase
    Evaluate the condition that is being tested by this particular tag, and return true if the nested body content of this tag should be evaluated, or false if it should be skipped.
    ConditionalTagBase - class org.apache.struts.taglib.logic.ConditionalTagBase.
    Abstract base class for the various conditional evaluation tags.
    ConditionalTagBase() - Constructor for class org.apache.struts.taglib.logic.ConditionalTagBase
     
    config - Variable in class org.apache.struts.plugins.ModuleConfigVerifier
    The ModuleConfig instance for our application module.
    config - Variable in class org.apache.struts.validator.ValidatorPlugIn
    The module configuration for our owning module.
    config - Variable in class org.apache.struts.util.MessageResources
    The configuration parameter used to initialize this MessageResources.
    config - Variable in class org.apache.struts.tiles.definition.ComponentDefinitionsFactoryWrapper
    Factory configuration
    config - Variable in class org.apache.struts.action.ActionServlet
    Comma-separated list of context-relative path(s) to our configuration resource(s) for the default module.
    config - Variable in class org.apache.struts.action.DynaActionFormClass
    The form bean configuration information for this class.
    configDigester - Variable in class org.apache.struts.action.ActionServlet
    The Digester used to produce ModuleConfig objects from a Struts configuration file.
    ConfigHelper - class org.apache.struts.config.ConfigHelper.
    NOTE: THIS CLASS IS UNDER ACTIVE DEVELOPMENT.
    ConfigHelper() - Constructor for class org.apache.struts.config.ConfigHelper
     
    ConfigHelper(ServletContext, HttpServletRequest, HttpServletResponse) - Constructor for class org.apache.struts.config.ConfigHelper
     
    ConfigHelperInterface - interface org.apache.struts.config.ConfigHelperInterface.
    NOTE: THIS CLASS IS UNDER ACTIVE DEVELOPMENT.
    ConfigRuleSet - class org.apache.struts.config.ConfigRuleSet.
    The set of Digester rules required to parse a Struts configuration file (struts-config.xml).
    ConfigRuleSet() - Constructor for class org.apache.struts.config.ConfigRuleSet
     
    configured - Variable in class org.apache.struts.config.FormBeanConfig
    Has this component been completely configured?
    configured - Variable in class org.apache.struts.config.ExceptionConfig
    Has this component been completely configured?
    configured - Variable in class org.apache.struts.config.ActionConfig
    Indicates if configuration of this component been completed.
    configured - Variable in class org.apache.struts.config.MessageResourcesConfig
    Has this component been completely configured?
    configured - Variable in class org.apache.struts.config.ControllerConfig
    Has this component been completely configured?
    configured - Variable in class org.apache.struts.config.PlugInConfig
    Has this component been completely configured?
    configured - Variable in class org.apache.struts.config.ForwardConfig
    Has this component been completely configured?
    configured - Variable in class org.apache.struts.config.FormPropertyConfig
    Has this component been completely configured?
    configured - Variable in class org.apache.struts.config.DataSourceConfig
    Has this component been completely configured?
    configured - Variable in class org.apache.struts.config.impl.ModuleConfigImpl
    Has this module been completely configured yet.
    constant - Variable in class org.apache.struts.taglib.html.MultiboxTag
    The constant String value to be returned when this checkbox is selected and the form is submitted.
    Constants - class org.apache.struts.taglib.html.Constants.
    Manifest constants for this package.
    Constants() - Constructor for class org.apache.struts.taglib.html.Constants
     
    contains(String, String) - Method in class org.apache.struts.action.DynaActionForm
    Indicates if the specified mapped property contain a value for the specified key value.
    content - Variable in class org.apache.struts.taglib.template.PutTag
    Deprecated. The content's URI (or text).
    content - Variable in class org.apache.struts.taglib.template.util.Content
    Deprecated. Templates regard this as content to be either included or printed directly.
    Content - class org.apache.struts.taglib.template.util.Content.
    Deprecated. Use Tiles instead.
    CONTENT_TYPE_APPLICATION_OCTET_STREAM - Static variable in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    CONTENT_TYPE_TEXT_PLAIN - Static variable in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    Content(String, String) - Constructor for class org.apache.struts.taglib.template.util.Content
    Deprecated. Use Tiles instead.
    contentLength - Variable in class org.apache.struts.upload.BufferedMultipartInputStream
    The content length of the multipart data
    contentLength - Variable in class org.apache.struts.upload.MultipartIterator
    The content length of this request
    ContentLengthExceededException - exception org.apache.struts.upload.ContentLengthExceededException.
    This exception is thrown when multipart post data exceeds the value given by the Content-Length header
    ContentLengthExceededException() - Constructor for class org.apache.struts.upload.ContentLengthExceededException
     
    ContentLengthExceededException(long) - Constructor for class org.apache.struts.upload.ContentLengthExceededException
     
    contentLengthMet - Variable in class org.apache.struts.upload.BufferedMultipartInputStream
    Whether or not bytes up to the Content-Length have been read
    contentLengthMet() - Method in class org.apache.struts.upload.BufferedMultipartInputStream
     
    ContentMap - class org.apache.struts.taglib.template.util.ContentMap.
    Deprecated. Use Tiles instead.
    ContentMap() - Constructor for class org.apache.struts.taglib.template.util.ContentMap
    Deprecated. Use Tiles instead.
    ContentMapStack - class org.apache.struts.taglib.template.util.ContentMapStack.
    Deprecated. Use Tiles instead.
    ContentMapStack() - Constructor for class org.apache.struts.taglib.template.util.ContentMapStack
    Deprecated. No instantiations of this class are allowed.
    contentType - Variable in class org.apache.struts.upload.DiskFile
    The content type of the file
    contentType - Variable in class org.apache.struts.upload.MultipartElement
    The content type of this element.
    contentType - Variable in class org.apache.struts.upload.MultipartIterator
    The content-type.
    contentType - Variable in class org.apache.struts.config.ControllerConfig
    The content type and character encoding to be set on each response.
    context - Variable in class org.apache.struts.util.ServletContextWriter
    The servlet context with which we are associated.
    contextRelative - Variable in class org.apache.struts.config.ForwardConfig
    Should the value of the path property be considered context-relative if it starts with a slash (and therefore not prefixed with the module prefix?
    controller - Variable in class org.apache.struts.tiles.ComponentDefinition
    Associated Controller URL or classname, if defined
    controller - Variable in class org.apache.struts.taglib.tiles.InsertTag.InsertHandler
     
    Controller - interface org.apache.struts.tiles.Controller.
    A controller is a piece of code called before rendering a jsp page.
    CONTROLLER - Static variable in class org.apache.struts.tiles.ComponentDefinition
    Controller name type
    controllerConfig - Variable in class org.apache.struts.config.impl.ModuleConfigImpl
    The controller configuration object for this module.
    ControllerConfig - class org.apache.struts.config.ControllerConfig.
    A JavaBean representing the configuration information of a <controller> element in a Struts configuration file.
    ControllerConfig() - Constructor for class org.apache.struts.config.ControllerConfig
     
    controllerInstance - Variable in class org.apache.struts.tiles.ComponentDefinition
    Controller associated to Definition.
    controllerName - Variable in class org.apache.struts.taglib.tiles.DefinitionTagSupport
    Associated Controller name (classname or url)
    ControllerSupport - class org.apache.struts.tiles.ControllerSupport.
    Basic implementation of Controller.
    ControllerSupport() - Constructor for class org.apache.struts.tiles.ControllerSupport
     
    controllerType - Variable in class org.apache.struts.tiles.ComponentDefinition
    Associated Controller typename, if controllerName defined.
    controllerType - Variable in class org.apache.struts.taglib.tiles.DefinitionTagSupport
    Associated Controller type
    convertNull - Variable in class org.apache.struts.action.ActionServlet
    The flag to request backwards-compatible conversions for form bean properties of the Java wrapper class types.
    convertSizeToBytes(String, long) - Method in class org.apache.struts.upload.CommonsMultipartRequestHandler
    Converts a size value from a string representation to its numeric value.
    cookie - Variable in class org.apache.struts.taglib.logic.ConditionalTagBase
    The name of the cookie to be used as a variable.
    CookieTag - class org.apache.struts.taglib.bean.CookieTag.
    Define a scripting variable based on the value(s) of the specified cookie received with this request.
    CookieTag() - Constructor for class org.apache.struts.taglib.bean.CookieTag
     
    CookieTei - class org.apache.struts.taglib.bean.CookieTei.
    Implementation of TagExtraInfo for the cookie tag, identifying the scripting object(s) to be made visible.
    CookieTei() - Constructor for class org.apache.struts.taglib.bean.CookieTei
     
    createActionForm(HttpServletRequest, ActionMapping, ModuleConfig, ActionServlet) - Static method in class org.apache.struts.util.RequestUtils
    Create (if necessary) and return an ActionForm instance appropriate for this request.
    createConfigMap(DefinitionsFactoryConfig) - Static method in class org.apache.struts.tiles.definition.ComponentDefinitionsFactoryWrapper
    Create map of configuration attributes from configuration object.
    createController(String, String) - Static method in class org.apache.struts.tiles.ComponentDefinition
    Create a new instance of controller named in parameter.
    createControllerFromClassname(String) - Static method in class org.apache.struts.tiles.ComponentDefinition
    Create a controller from specified classname
    createDefaultFactory(ServletContext) - Method in class org.apache.struts.tiles.xmlDefinition.I18nFactorySet
    Create default factory .
    createDefaultFactory(ServletContext, Map) - Method in class org.apache.struts.tiles.definition.ReloadableDefinitionsFactory
    Create default Definition factory.
    createDefinitionFactoryInstance(String) - Method in class org.apache.struts.tiles.TilesUtilImpl
    Create Definition factory of specified classname.
    createDefinitionFactoryInstance(String) - Static method in class org.apache.struts.tiles.DefinitionsUtil
    Deprecated. No direct replacement. Use createDefinitionFactory TilesUtil.createDefinitionsFactory(ServletContext, DefinitionsFactoryConfig).
    createDefinitionsFactory(ServletContext, DefinitionsFactoryConfig) - Static method in class org.apache.struts.tiles.TilesUtil
    Create Definition factory from specified configuration object.
    createDefinitionsFactory(ServletContext, DefinitionsFactoryConfig) - Method in class org.apache.struts.tiles.TilesUtilImpl
    Create Definition factory from specified configuration object.
    createDefinitionsFactory(ServletContext, Map) - Static method in class org.apache.struts.tiles.DefinitionsUtil
    Deprecated. Create default Definition factory.
    createDefinitionsFactory(ServletContext, Map, String) - Static method in class org.apache.struts.tiles.DefinitionsUtil
    Deprecated. Use createDefinitionsFactory(ServletContext servletContext, ServletConfig servletConfig)
    createDefinitionsFactory(ServletContext, ServletConfig) - Static method in class org.apache.struts.tiles.DefinitionsUtil
    Deprecated. Create Definition factory.
    createDefinitionsFactory(ServletContext, ServletConfig, boolean) - Static method in class org.apache.struts.tiles.DefinitionsUtil
    Deprecated. Create Definition factory.
    createDiskFile(MultipartElement) - Method in class org.apache.struts.upload.DiskMultipartRequestHandler
     
    createDynaActionFormClass(FormBeanConfig) - Static method in class org.apache.struts.action.DynaActionFormClass
    Create (if necessary) and return a new DynaActionFormClass instance for the specified form bean configuration instance.
    createFactory() - Static method in class org.apache.struts.util.MessageResourcesFactory
    Create and return a MessageResourcesFactory instance of the appropriate class, which can be used to create customized MessageResources instances.
    createFactory() - Static method in class org.apache.struts.config.ModuleConfigFactory
    Create and return a ModuleConfigFactory instance of the appropriate class, which can be used to create customized ModuleConfig instances.
    createFactory(Object, ServletRequest, ServletContext) - Method in class org.apache.struts.tiles.xmlDefinition.I18nFactorySet
    Create a factory for specified key.
    createFactory(Object, ServletRequest, ServletContext) - Method in class org.apache.struts.tiles.xmlDefinition.FactorySet
    Create a factory for specified key.
    createFactory(ServletContext, Map) - Method in class org.apache.struts.tiles.definition.ReloadableDefinitionsFactory
    Create Definition factory.
    createFactoryFromClassname(ServletContext, Map, String) - Method in class org.apache.struts.tiles.definition.ReloadableDefinitionsFactory
    Create Definition factory from provided classname.
    createFactoryInstance(String) - Method in class org.apache.struts.tiles.definition.ComponentDefinitionsFactoryWrapper
    Create Definition factory from provided classname which must implement ComponentDefinitionsFactory.
    createFileMultipartElement() - Method in class org.apache.struts.upload.MultipartIterator
    Create a multipart element instance representing the file in the stream.
    createLocalFile() - Method in class org.apache.struts.upload.MultipartIterator
    Creates a file on disk from the current mulitpart element.
    createModuleConfig(String) - Method in class org.apache.struts.config.ModuleConfigFactory
    Create and return a newly instansiated ModuleConfig.
    createModuleConfig(String) - Method in class org.apache.struts.config.impl.DefaultModuleConfigFactory
    Create and return a newly instansiated ModuleConfig.
    createObject(Attributes) - Method in class org.apache.struts.config.ActionMappingFactory
     
    createResources(String) - Method in class org.apache.struts.util.PropertyMessageResourcesFactory
    Create and return a newly instansiated MessageResources.
    createResources(String) - Method in class org.apache.struts.util.MessageResourcesFactory
    Create and return a newly instansiated MessageResources.
    createTagHandler() - Method in class org.apache.struts.taglib.tiles.InsertTag
    Process tag attribute and create corresponding tag handler.
    createTextElement(HttpServletRequest, MultipartElement) - Method in class org.apache.struts.upload.DiskMultipartRequestHandler
     
    createTextMultipartElement(String) - Method in class org.apache.struts.upload.MultipartIterator
    Create a text element from the data in the body of the element.
    CRLF - Static variable in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    currentContext - Variable in class org.apache.struts.taglib.tiles.InsertTag.InsertHandler
     
    currentLocale() - Method in class org.apache.struts.taglib.html.HtmlTag
    Deprecated. Use getCurrentLocale instead because it makes the display logic easier.
    currentPlugInConfigObject - Variable in class org.apache.struts.tiles.TilesPlugin
    The plugin config object provided by the ActionServlet initializing this plugin.
    currentValue() - Method in class org.apache.struts.taglib.html.RadioTag
    Acquire the current value of the bean specified by the name attribute and the property specified by the property attribute.

    D

    data - Variable in class org.apache.struts.upload.MultipartElement
    Deprecated. This should never be used.
    DATA_SOURCE_KEY - Static variable in class org.apache.struts.Globals
    The context attributes key under which our default configured data source (which must implement javax.sql.DataSource) is stored, if one is configured for this module.
    DATA_SOURCE_KEY - Static variable in class org.apache.struts.action.Action
    Deprecated. Replaced by Globals.DATA_SOURCE_KEY
    DataSourceConfig - class org.apache.struts.config.DataSourceConfig.
    A JavaBean representing the configuration information of a <data-source> element from a Struts configuration file.
    DataSourceConfig() - Constructor for class org.apache.struts.config.DataSourceConfig
     
    dataSources - Variable in class org.apache.struts.config.impl.ModuleConfigImpl
    The set of JDBC data source configurations for this module, if any, keyed by the key property.
    dataSources - Variable in class org.apache.struts.action.ActionServlet
    The JDBC data sources that has been configured for this module, if any, keyed by the servlet context attribute under which they are stored.
    DATE_FORMAT_KEY - Static variable in class org.apache.struts.taglib.bean.WriteTag
    The key to search default format string for java.util.Date in resources.
    debug - Static variable in class org.apache.struts.taglib.tiles.util.TagUtils
    Debug flag
    debug - Variable in class org.apache.struts.config.ControllerConfig
    Deprecated. Configure the logging detail level in your underlying logging implemenation
    debug - Variable in class org.apache.struts.action.ActionServlet
    Deprecated.  
    debugLevel - Variable in class org.apache.struts.tiles.DefinitionsFactoryConfig
    Deprecated. Use commons-logging mechanism.
    DEFAULT_CONTENT_DISPOSITION - Static variable in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    DEFAULT_DEFINITION_FILENAMES - Static variable in class org.apache.struts.tiles.xmlDefinition.I18nFactorySet
    Possible definition filenames.
    DEFAULT_ENCODING - Static variable in class org.apache.struts.upload.MultipartIterator
    The default encoding of a text element if none is specified.
    DEFAULT_LINE_SIZE - Static variable in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    DEFAULT_SIZE_MAX - Static variable in class org.apache.struts.upload.CommonsMultipartRequestHandler
    The default value for the maximum allowable size, in bytes, of an uploaded file.
    DEFAULT_SIZE_THRESHOLD - Static variable in class org.apache.struts.upload.CommonsMultipartRequestHandler
    The default value for the threshold which determines whether an uploaded file will be written to disk or cached in memory.
    defaultControllerConfig(ModuleConfig) - Method in class org.apache.struts.action.ActionServlet
    Deprecated. Will be removed in a release after Struts 1.1.
    defaultFactory - Static variable in class org.apache.struts.util.MessageResources
    The default MessageResourcesFactory used to create MessageResources instances.
    defaultFactory - Variable in class org.apache.struts.tiles.xmlDefinition.I18nFactorySet
    Default factory.
    defaultFormBeansConfig(ModuleConfig) - Method in class org.apache.struts.action.ActionServlet
    Deprecated. Will be removed in a release after Struts 1.1.
    defaultForwardsConfig(ModuleConfig) - Method in class org.apache.struts.action.ActionServlet
    Deprecated. Will be removed in a release after Struts 1.1.
    defaultLocale - Variable in class org.apache.struts.util.MessageResources
    The default Locale for our environment.
    defaultLocale - Static variable in class org.apache.struts.taglib.html.ErrorsTag
    Deprecated. Use Locale.getDefault() directly.
    defaultLocale - Static variable in class org.apache.struts.taglib.html.BaseHandlerTag
    The default Locale for our server.
    defaultLocale - Static variable in class org.apache.struts.taglib.html.JavascriptValidatorTag
    Deprecated. This variable is no longer used.
    defaultLocale - Static variable in class org.apache.struts.taglib.html.OptionTag
    Deprecated. Use Locale.getDefault() directly.
    defaultLocale - Static variable in class org.apache.struts.taglib.bean.MessageTag
    The default Locale for our server.
    defaultLocale - Static variable in class org.apache.struts.action.Action
    The system default Locale.
    defaultMappingsConfig(ModuleConfig) - Method in class org.apache.struts.action.ActionServlet
    Deprecated. Will be removed in a release after Struts 1.1.
    defaultMessageResourcesConfig(ModuleConfig) - Method in class org.apache.struts.action.ActionServlet
    Deprecated. Will be removed in a release after Struts 1.1.
    DefaultModuleConfigFactory - class org.apache.struts.config.impl.DefaultModuleConfigFactory.
    A factory for creating ModuleConfig instances.
    DefaultModuleConfigFactory() - Constructor for class org.apache.struts.config.impl.DefaultModuleConfigFactory
     
    DefineTag - class org.apache.struts.taglib.bean.DefineTag.
    Define a scripting variable based on the value(s) of the specified bean property.
    DefineTag() - Constructor for class org.apache.struts.taglib.bean.DefineTag
     
    DefineTei - class org.apache.struts.taglib.bean.DefineTei.
    Implementation of TagExtraInfo for the define tag, identifying the scripting object(s) to be made visible.
    DefineTei() - Constructor for class org.apache.struts.taglib.bean.DefineTei
     
    definition - Variable in class org.apache.struts.taglib.tiles.DefinitionTag
    Template definition
    DefinitionAttribute - class org.apache.struts.tiles.DefinitionAttribute.
    Attribute representing a Component Definition.
    DefinitionAttribute(String) - Constructor for class org.apache.struts.tiles.DefinitionAttribute
     
    definitionConfigFiles - Variable in class org.apache.struts.tiles.DefinitionsFactoryConfig
    Definition configuration file specified by user
    DefinitionDispatcherAction - class org.apache.struts.tiles.actions.DefinitionDispatcherAction.
    An Action that dispatches to a Tiles Definition that is named by the request parameter whose name is specified by the parameter property of the corresponding ActionMapping.
    DefinitionDispatcherAction() - Constructor for class org.apache.struts.tiles.actions.DefinitionDispatcherAction
     
    definitionFactory - Variable in class org.apache.struts.tiles.TilesPlugin
    Associated definition factory
    definitionName - Variable in class org.apache.struts.taglib.tiles.InsertTag
    Name of component instance to include
    DefinitionNameAttribute - class org.apache.struts.tiles.DefinitionNameAttribute.
    Component attribute.
    DefinitionNameAttribute(String) - Constructor for class org.apache.struts.tiles.DefinitionNameAttribute
    Constructor.
    DefinitionNameAttribute(String, String) - Constructor for class org.apache.struts.tiles.DefinitionNameAttribute
    Constructor.
    definitions - Variable in class org.apache.struts.tiles.xmlDefinition.XmlDefinitionsSet
    Defined definitions.
    definitions - Variable in class org.apache.struts.tiles.xmlDefinition.DefinitionsFactory
    Underlying map containing all definitions.
    DEFINITIONS_CONFIG_PARAMETER_NAME - Static variable in class org.apache.struts.tiles.DefinitionsFactoryConfig
    Alternate name for definition files properties in configuration file
    DEFINITIONS_CONFIG_PARAMETER_NAME - Static variable in class org.apache.struts.tiles.xmlDefinition.I18nFactorySet
    Config file parameter name.
    DEFINITIONS_CONFIG_USER_DEBUG_LEVEL - Static variable in class org.apache.struts.tiles.DefinitionsUtil
    Deprecated. Name of init property carrying debug level
    DEFINITIONS_FACTORY - Static variable in class org.apache.struts.tiles.TilesUtilImpl
    Constant name used to store factory in servlet context
    DEFINITIONS_FACTORY - Static variable in class org.apache.struts.tiles.DefinitionsUtil
    Deprecated. Constant name used to store factory in context
    DEFINITIONS_FACTORY_CLASSNAME - Static variable in class org.apache.struts.tiles.DefinitionsUtil
    Deprecated. Name of init property carrying factory class name
    DEFINITIONS_FACTORY_CLASSNAME - Static variable in class org.apache.struts.tiles.definition.ReloadableDefinitionsFactory
    Name of init property carrying factory class name
    definitionsFactory - Variable in class org.apache.struts.tiles.ActionComponentServlet
    Deprecated. Definitions factory
    definitionsFactory - Variable in class org.apache.struts.tiles.TilesRequestProcessor
    Definitions factory
    DefinitionsFactory - interface org.apache.struts.tiles.DefinitionsFactory.
    Tiles Definition factory.
    DefinitionsFactory - class org.apache.struts.tiles.xmlDefinition.DefinitionsFactory.
    A factory for definitions.
    DefinitionsFactory(XmlDefinitionsSet) - Constructor for class org.apache.struts.tiles.xmlDefinition.DefinitionsFactory
    Constructor.
    DefinitionsFactoryConfig - class org.apache.struts.tiles.DefinitionsFactoryConfig.
    A TilesFactoryConfig object hold configuration attributes for a tile definition factory.
    DefinitionsFactoryConfig() - Constructor for class org.apache.struts.tiles.DefinitionsFactoryConfig
    Default constructor.
    DefinitionsFactoryConfig(Map) - Constructor for class org.apache.struts.tiles.DefinitionsFactoryConfig
    Constructor.
    DefinitionsFactoryException - exception org.apache.struts.tiles.DefinitionsFactoryException.
    Exception thrown when an error occurs while the factory tries to create a new instance mapper.
    DefinitionsFactoryException() - Constructor for class org.apache.struts.tiles.DefinitionsFactoryException
    Constructor.
    DefinitionsFactoryException(Exception) - Constructor for class org.apache.struts.tiles.DefinitionsFactoryException
    Create a new DefinitionsFactoryException wrapping an existing exception.
    DefinitionsFactoryException(String) - Constructor for class org.apache.struts.tiles.DefinitionsFactoryException
    Constructor.
    DefinitionsFactoryException(String, Exception) - Constructor for class org.apache.struts.tiles.DefinitionsFactoryException
    Create a new DefinitionsFactoryException from an existing exception.
    DefinitionsUtil - class org.apache.struts.tiles.DefinitionsUtil.
    Deprecated. Use TilesUtil.createDefinitionsFactory(ServletContext, DefinitionsFactoryConfig)
    DefinitionsUtil.ServletPropertiesMap - class org.apache.struts.tiles.DefinitionsUtil.ServletPropertiesMap.
    Deprecated. Inner class.
    DefinitionsUtil.ServletPropertiesMap(ServletConfig) - Constructor for class org.apache.struts.tiles.DefinitionsUtil.ServletPropertiesMap
    Deprecated. Constructor.
    DefinitionsUtil() - Constructor for class org.apache.struts.tiles.DefinitionsUtil
    Deprecated.  
    DefinitionTag - class org.apache.struts.taglib.tiles.DefinitionTag.
    This is the tag handler for <tiles:definition>, which defines a tiles (or template / component).
    DefinitionTag() - Constructor for class org.apache.struts.taglib.tiles.DefinitionTag
     
    DefinitionTagSupport - class org.apache.struts.taglib.tiles.DefinitionTagSupport.
    Common base class for tags dealing with Tiles definitions.
    DefinitionTagSupport() - Constructor for class org.apache.struts.taglib.tiles.DefinitionTagSupport
     
    deleteReference(HttpServletRequest) - Static method in class org.apache.struts.taglib.nested.NestedPropertyHelper
    Deletes the nested reference from the request object.
    deriveNestedProperty() - Method in class org.apache.struts.taglib.nested.logic.NestedIterateTag
    The only added property to the class.
    destroy() - Method in class org.apache.struts.plugins.ModuleConfigVerifier
    Receive notification that our owning module is being shut down.
    destroy() - Method in class org.apache.struts.validator.ValidatorPlugIn
    Gracefully shut down, releasing any resources that were allocated at initialization.
    destroy() - Method in class org.apache.struts.upload.DiskFile
    Delete the temporary file.
    destroy() - Method in class org.apache.struts.upload.CommonsMultipartRequestHandler.CommonsFormFile
    Destroy all content for this form file.
    destroy() - Method in interface org.apache.struts.upload.FormFile
    Destroys all content for the uploaded file, including any underlying data files.
    destroy() - Method in interface org.apache.struts.tiles.DefinitionsFactory
    Receive notification that the factory is being shut down.
    destroy() - Method in class org.apache.struts.tiles.TilesPlugin
    End plugin.
    destroy() - Method in class org.apache.struts.tiles.definition.ComponentDefinitionsFactoryWrapper
    Do nothing because old life cycle has no equivalent.
    destroy() - Method in class org.apache.struts.action.ActionServlet
    Gracefully shut down this controller servlet, releasing any resources that were allocated at initialization.
    destroy() - Method in class org.apache.struts.action.RequestProcessor
    Clean up in preparation for a shutdown of this application.
    destroy() - Method in interface org.apache.struts.action.PlugIn
    Receive notification that our owning module is being shut down.
    destroyApplications() - Method in class org.apache.struts.action.ActionServlet
    Deprecated. replaced by destroyModules()
    destroyConfigDigester() - Method in class org.apache.struts.action.ActionServlet
    Gracefully release any configDigester instance that we have created.
    destroyDataSources() - Method in class org.apache.struts.action.ActionServlet
    Deprecated. Will no longer be required with module support
    destroyInternal() - Method in class org.apache.struts.action.ActionServlet
    Gracefully terminate use of the internal MessageResources.
    destroyModules() - Method in class org.apache.struts.action.ActionServlet
    Gracefully terminate use of any modules associated with this application (if any).
    destroyResources() - Method in class org.apache.struts.validator.ValidatorPlugIn
    Destroy ValidatorResources.
    digester - Variable in class org.apache.struts.tiles.xmlDefinition.XmlParser
    Associated digester.
    direct - Variable in class org.apache.struts.tiles.xmlDefinition.XmlAttribute
    Attribute value.
    direct - Variable in class org.apache.struts.taglib.tiles.PutTag
    JSP Template compatibility
    direct - Variable in class org.apache.struts.taglib.template.PutTag
    Deprecated. Determines whether content is included (false) or printed (true).
    direct - Variable in class org.apache.struts.taglib.template.util.Content
    Deprecated. Represents a boolean - if true, content is included, otherwise content is printed.
    DirectStringAttribute - class org.apache.struts.tiles.DirectStringAttribute.
    Component attribute.
    DirectStringAttribute(String) - Constructor for class org.apache.struts.tiles.DirectStringAttribute
     
    disabled - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
    Component is disabled.
    disabled - Variable in class org.apache.struts.taglib.html.OptionTag
    Is this option disabled?
    diskBufferSize - Variable in class org.apache.struts.upload.MultipartIterator
    The size in bytes written to the filesystem at a time [20K]
    DiskFile - class org.apache.struts.upload.DiskFile.
     
    DiskFile(String) - Constructor for class org.apache.struts.upload.DiskFile
     
    DiskMultipartRequestHandler - class org.apache.struts.upload.DiskMultipartRequestHandler.
    This is a MultipartRequestHandler that writes file data directly to to temporary files on disk.
    DiskMultipartRequestHandler() - Constructor for class org.apache.struts.upload.DiskMultipartRequestHandler
     
    DispatchAction - class org.apache.struts.actions.DispatchAction.
    An abstract Action that dispatches to a public method that is named by the request parameter whose name is specified by the parameter property of the corresponding ActionMapping.
    DispatchAction() - Constructor for class org.apache.struts.actions.DispatchAction
     
    dispatchMethod(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse, String) - Method in class org.apache.struts.actions.DispatchAction
    Dispatch to the specified method.
    doAfterBody() - Method in class org.apache.struts.taglib.nested.NestedRootTag
    Render the resulting content evaluation.
    doAfterBody() - Method in class org.apache.struts.taglib.nested.NestedPropertyTag
    Render the resulting content evaluation.
    doAfterBody() - Method in class org.apache.struts.taglib.nested.logic.NestedIterateTag
    This is only overriden as the include reference will need it's index updated.
    doAfterBody() - Method in class org.apache.struts.taglib.logic.IterateTag
    Make the next collection element available and loop, or finish the iterations if there are no more elements.
    doAfterBody() - Method in class org.apache.struts.taglib.html.LinkTag
    Save the associated label from the body content.
    doAfterBody() - Method in class org.apache.struts.taglib.html.SelectTag
    Save any body content of this tag, which will generally be the option(s) representing the values displayed to the user.
    doAfterBody() - Method in class org.apache.struts.taglib.html.MessagesTag
    Make the next collection element available and loop, or finish the iterations if there are no more elements.
    doAfterBody() - Method in class org.apache.struts.taglib.html.CancelTag
    Save the associated label from the body content.
    doAfterBody() - Method in class org.apache.struts.taglib.html.MultiboxTag
    Save the body contents of this tag as the constant that we will be returning.
    doAfterBody() - Method in class org.apache.struts.taglib.html.CheckboxTag
    Save the associated label from the body content.
    doAfterBody() - Method in class org.apache.struts.taglib.html.SubmitTag
    Save the associated label from the body content.
    doAfterBody() - Method in class org.apache.struts.taglib.html.ButtonTag
    Save the associated label from the body content (if any).
    doAfterBody() - Method in class org.apache.struts.taglib.html.ResetTag
    Save the associated label from the body content.
    doAfterBody() - Method in class org.apache.struts.taglib.html.OptionTag
    Process the body text of this tag (if any).
    doAfterBody() - Method in class org.apache.struts.taglib.html.RadioTag
    Save the associated label from the body content.
    doAfterBody() - Method in class org.apache.struts.taglib.bean.DefineTag
    Save the body content of this tag (if any), or throw a JspException if the value was already defined.
    doEndTag() - Method in class org.apache.struts.taglib.tiles.PutListTag
    Do end tag.
    doEndTag() - Method in class org.apache.struts.taglib.tiles.DefinitionTag
    Process the end tag by putting the definition in appropriate context.
    doEndTag() - Method in class org.apache.struts.taglib.tiles.GetAttributeTag
    Close tag.
    doEndTag() - Method in class org.apache.struts.taglib.tiles.InitDefinitionsTag
    Do end tag.
    doEndTag() - Method in class org.apache.struts.taglib.tiles.PutTag
    Do end tag.
    doEndTag() - Method in class org.apache.struts.taglib.tiles.ImportAttributeTag
    Clean up after processing this enumeration.
    doEndTag() - Method in class org.apache.struts.taglib.tiles.UseAttributeTag
    Clean up after processing this enumeration.
    doEndTag() - Method in class org.apache.struts.taglib.tiles.InsertTag
    Process the end tag by including the template.
    doEndTag() - Method in interface org.apache.struts.taglib.tiles.InsertTag.TagHandler
    Do include for type depicted by implementation class.
    doEndTag() - Method in class org.apache.struts.taglib.tiles.InsertTag.InsertHandler
    Include requested page.
    doEndTag() - Method in class org.apache.struts.taglib.tiles.InsertTag.DirectStringHandler
    Print String in page output stream.
    doEndTag() - Method in class org.apache.struts.taglib.tiles.AttributeToScopeTag
    Deprecated. Clean up after processing this enumeration.
    doEndTag() - Method in class org.apache.struts.taglib.template.PutTag
    Deprecated. Use Tiles instead.
    doEndTag() - Method in class org.apache.struts.taglib.template.InsertTag
    Deprecated. Use Tiles instead.
    doEndTag() - Method in class org.apache.struts.taglib.nested.NestedWriteNestingTag
     
    doEndTag() - Method in class org.apache.struts.taglib.nested.NestedRootTag
    Evaluate the rest of the page
    doEndTag() - Method in class org.apache.struts.taglib.nested.NestedPropertyTag
    Evaluate the rest of the page
    doEndTag() - Method in class org.apache.struts.taglib.nested.logic.NestedPresentTag
    Complete the processing of the tag.
    doEndTag() - Method in class org.apache.struts.taglib.nested.logic.NestedNotPresentTag
    Complete the processing of the tag.
    doEndTag() - Method in class org.apache.struts.taglib.nested.logic.NestedNotMatchTag
    Complete the processing of the tag.
    doEndTag() - Method in class org.apache.struts.taglib.nested.logic.NestedNotEqualTag
    Complete the processing of the tag.
    doEndTag() - Method in class org.apache.struts.taglib.nested.logic.NestedNotEmptyTag
    Complete the processing of the tag.
    doEndTag() - Method in class org.apache.struts.taglib.nested.logic.NestedMessagesPresentTag
    Complete the processing of the tag.
    doEndTag() - Method in class org.apache.struts.taglib.nested.logic.NestedMessagesNotPresentTag
    Complete the processing of the tag.
    doEndTag() - Method in class org.apache.struts.taglib.nested.logic.NestedMatchTag
    Complete the processing of the tag.
    doEndTag() - Method in class org.apache.struts.taglib.nested.logic.NestedLessThanTag
    Complete the processing of the tag.
    doEndTag() - Method in class org.apache.struts.taglib.nested.logic.NestedLessEqualTag
    Complete the processing of the tag.
    doEndTag() - Method in class org.apache.struts.taglib.nested.logic.NestedIterateTag
    Complete the processing of the tag.
    doEndTag() - Method in class org.apache.struts.taglib.nested.logic.NestedGreaterThanTag
    Complete the processing of the tag.
    doEndTag() - Method in class org.apache.struts.taglib.nested.logic.NestedGreaterEqualTag
    Complete the processing of the tag.
    doEndTag() - Method in class org.apache.struts.taglib.nested.logic.NestedEqualTag
    Complete the processing of the tag.
    doEndTag() - Method in class org.apache.struts.taglib.nested.logic.NestedEmptyTag
    Complete the processing of the tag.
    doEndTag() - Method in class org.apache.struts.taglib.nested.html.NestedTextareaTag
    Complete the processing of the tag.
    doEndTag() - Method in class org.apache.struts.taglib.nested.html.NestedTextTag
    Complete the processing of the tag.
    doEndTag() - Method in class org.apache.struts.taglib.nested.html.NestedSubmitTag
    Complete the processing of the tag.
    doEndTag() - Method in class org.apache.struts.taglib.nested.html.NestedSelectTag
    Complete the processing of the tag.
    doEndTag() - Method in class org.apache.struts.taglib.nested.html.NestedRadioTag
    Complete the processing of the tag.
    doEndTag() - Method in class org.apache.struts.taglib.nested.html.NestedPasswordTag
    Complete the processing of the tag.
    doEndTag() - Method in class org.apache.struts.taglib.nested.html.NestedOptionsTag
    Complete the processing of the tag.
    doEndTag() - Method in class org.apache.struts.taglib.nested.html.NestedOptionsCollectionTag
    Complete the processing of the tag.
    doEndTag() - Method in class org.apache.struts.taglib.nested.html.NestedMultiboxTag
    Complete the processing of the tag.
    doEndTag() - Method in class org.apache.struts.taglib.nested.html.NestedMessagesTag
    Complete the processing of the tag.
    doEndTag() - Method in class org.apache.struts.taglib.nested.html.NestedLinkTag
    Complete the processing of the tag.
    doEndTag() - Method in class org.apache.struts.taglib.nested.html.NestedImgTag
    Complete the processing of the tag.
    doEndTag() - Method in class org.apache.struts.taglib.nested.html.NestedImageTag
    Complete the processing of the tag.
    doEndTag() - Method in class org.apache.struts.taglib.nested.html.NestedHiddenTag
    Complete the processing of the tag.
    doEndTag() - Method in class org.apache.struts.taglib.nested.html.NestedFormTag
    This is only overriden to clean up the include reference
    doEndTag() - Method in class org.apache.struts.taglib.nested.html.NestedFileTag
    Complete the processing of the tag.
    doEndTag() - Method in class org.apache.struts.taglib.nested.html.NestedErrorsTag
    Complete the processing of the tag.
    doEndTag() - Method in class org.apache.struts.taglib.nested.html.NestedCheckboxTag
    Complete the processing of the tag.
    doEndTag() - Method in class org.apache.struts.taglib.nested.bean.NestedWriteTag
    Complete the processing of the tag.
    doEndTag() - Method in class org.apache.struts.taglib.nested.bean.NestedSizeTag
    Complete the processing of the tag.
    doEndTag() - Method in class org.apache.struts.taglib.nested.bean.NestedMessageTag
    Complete the processing of the tag.
    doEndTag() - Method in class org.apache.struts.taglib.nested.bean.NestedDefineTag
    Complete the processing of the tag.
    doEndTag() - Method in class org.apache.struts.taglib.logic.IterateTag
    Clean up after processing this enumeration.
    doEndTag() - Method in class org.apache.struts.taglib.logic.ForwardTag
    Look up the ActionForward associated with the specified name, and perform a forward or redirect to that path as indicated.
    doEndTag() - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
    Evaluate the remainder of the current page normally.
    doEndTag() - Method in class org.apache.struts.taglib.logic.RedirectTag
    Render the redirect and skip the remainder of this page.
    doEndTag() - Method in class org.apache.struts.taglib.html.OptionsTag
    Process the end of this tag.
    doEndTag() - Method in class org.apache.struts.taglib.html.LinkTag
    Render the end of the hyperlink.
    doEndTag() - Method in class org.apache.struts.taglib.html.SelectTag
    Render the end of this form.
    doEndTag() - Method in class org.apache.struts.taglib.html.MessagesTag
    Clean up after processing this enumeration.
    doEndTag() - Method in class org.apache.struts.taglib.html.CancelTag
    Process the end of this tag.
    doEndTag() - Method in class org.apache.struts.taglib.html.MultiboxTag
    Render an input element for this tag.
    doEndTag() - Method in class org.apache.struts.taglib.html.FrameTag
    Ignore the end of this tag.
    doEndTag() - Method in class org.apache.struts.taglib.html.BaseInputTag
    Process the end of this tag.
    doEndTag() - Method in class org.apache.struts.taglib.html.XhtmlTag
     
    doEndTag() - Method in class org.apache.struts.taglib.html.ImageTag
    Process the end of this tag.
    doEndTag() - Method in class org.apache.struts.taglib.html.CheckboxTag
    Process the remainder of this page normally.
    doEndTag() - Method in class org.apache.struts.taglib.html.ImgTag
    Render the end of the IMG tag.
    doEndTag() - Method in class org.apache.struts.taglib.html.HtmlTag
    Process the end of this tag.
    doEndTag() - Method in class org.apache.struts.taglib.html.RewriteTag
    Ignore the end of this tag.
    doEndTag() - Method in class org.apache.struts.taglib.html.FormTag
    Render the end of this form.
    doEndTag() - Method in class org.apache.struts.taglib.html.SubmitTag
    Process the end of this tag.
    doEndTag() - Method in class org.apache.struts.taglib.html.ButtonTag
    Process the end of this tag.
    doEndTag() - Method in class org.apache.struts.taglib.html.ResetTag
    Process the end of this tag.
    doEndTag() - Method in class org.apache.struts.taglib.html.OptionTag
    Process the end of this tag.
    doEndTag() - Method in class org.apache.struts.taglib.html.RadioTag
    Optionally render the associated label from the body content.
    doEndTag() - Method in class org.apache.struts.taglib.bean.DefineTag
    Retrieve the required property and expose it as a scripting variable.
    doForward(String, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.tiles.ActionComponentServlet
    Deprecated. Do a forward, and eventually catch uri containing Tiles definition.
    doForward(String, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.tiles.TilesRequestProcessor
    Do a forward using request dispatcher.
    doForward(String, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.action.RequestProcessor
    Do a forward to specified uri using request dispatcher.
    doForward(String, HttpServletRequest, HttpServletResponse, ServletContext) - Static method in class org.apache.struts.tiles.TilesUtil
    Do a forward using request dispatcher.
    doForward(String, HttpServletRequest, HttpServletResponse, ServletContext) - Method in class org.apache.struts.tiles.TilesUtilImpl
    Do a forward using request dispatcher.
    doForward(String, HttpServletRequest, HttpServletResponse, ServletContext) - Method in class org.apache.struts.tiles.TilesUtilStrutsModulesImpl
    Do a forward using request dispatcher.
    doGet(HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.action.ActionServlet
    Process an HTTP "GET" request.
    doInclude(String) - Method in class org.apache.struts.taglib.tiles.InsertTag
    Do an include of specified page.
    doInclude(String, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.action.RequestProcessor
    Do an include of specified uri using request dispatcher.
    doInclude(String, HttpServletRequest, HttpServletResponse, ServletContext) - Static method in class org.apache.struts.tiles.TilesUtil
    Do an include using request dispatcher.
    doInclude(String, HttpServletRequest, HttpServletResponse, ServletContext) - Method in class org.apache.struts.tiles.TilesUtilImpl
    Do an include using request dispatcher.
    doInclude(String, HttpServletRequest, HttpServletResponse, ServletContext) - Method in class org.apache.struts.tiles.TilesUtilStrutsModulesImpl
    Do an include using request dispatcher.
    doInclude(String, PageContext) - Static method in class org.apache.struts.tiles.TilesUtil
    Do an include using PageContext.include().
    doInclude(String, PageContext) - Static method in class org.apache.struts.tiles.TilesUtilImpl
    Do an include using PageContext.include().
    doPost(HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.action.ActionServlet
    Process an HTTP "POST" request.
    doStartTag() - Method in class org.apache.struts.taglib.tiles.PutListTag
    Do start tag.
    doStartTag() - Method in class org.apache.struts.taglib.tiles.DefinitionTag
    Process the start tag by creating a new definition.
    doStartTag() - Method in class org.apache.struts.taglib.tiles.InitDefinitionsTag
    Do start tag.
    doStartTag() - Method in class org.apache.struts.taglib.tiles.PutTag
    Do start tag.
    doStartTag() - Method in class org.apache.struts.taglib.tiles.ImportAttributeTag
    Expose the requested property from component context.
    doStartTag() - Method in class org.apache.struts.taglib.tiles.UseAttributeTag
    Expose the requested attribute from component context.
    doStartTag() - Method in class org.apache.struts.taglib.tiles.InsertTag
    Process the start tag by checking tag's attributes and creating appropriate handler.
    doStartTag() - Method in interface org.apache.struts.taglib.tiles.InsertTag.TagHandler
    Create ComponentContext for type depicted by implementation class.
    doStartTag() - Method in class org.apache.struts.taglib.tiles.InsertTag.InsertHandler
    Create a new empty context.
    doStartTag() - Method in class org.apache.struts.taglib.tiles.InsertTag.DirectStringHandler
    Do nothing, there is no context for a direct string.
    doStartTag() - Method in class org.apache.struts.taglib.tiles.AttributeToScopeTag
    Deprecated. Expose the requested property from component context.
    doStartTag() - Method in class org.apache.struts.taglib.tiles.ext.TextTag
    Deprecated. Generate the required input tag.
    doStartTag() - Method in class org.apache.struts.taglib.template.GetTag
    Deprecated. Use Tiles instead.
    doStartTag() - Method in class org.apache.struts.taglib.template.InsertTag
    Deprecated. Use Tiles instead.
    doStartTag() - Method in class org.apache.struts.taglib.nested.NestedWriteNestingTag
    Overriding method of the heart of the tag.
    doStartTag() - Method in class org.apache.struts.taglib.nested.NestedRootTag
    Overriding method of the heart of the tag.
    doStartTag() - Method in class org.apache.struts.taglib.nested.NestedPropertyTag
    Overriding method of the heart of the tag.
    doStartTag() - Method in class org.apache.struts.taglib.nested.logic.NestedPresentTag
    Overriding method of the heart of the matter.
    doStartTag() - Method in class org.apache.struts.taglib.nested.logic.NestedNotPresentTag
    Overriding method of the heart of the matter.
    doStartTag() - Method in class org.apache.struts.taglib.nested.logic.NestedNotMatchTag
    Overriding method of the heart of the matter.
    doStartTag() - Method in class org.apache.struts.taglib.nested.logic.NestedNotEqualTag
    Overriding method of the heart of the matter.
    doStartTag() - Method in class org.apache.struts.taglib.nested.logic.NestedNotEmptyTag
    Overriding method of the heart of the matter.
    doStartTag() - Method in class org.apache.struts.taglib.nested.logic.NestedMessagesPresentTag
    Overriding method of the heart of the matter.
    doStartTag() - Method in class org.apache.struts.taglib.nested.logic.NestedMessagesNotPresentTag
    Overriding method of the heart of the matter.
    doStartTag() - Method in class org.apache.struts.taglib.nested.logic.NestedMatchTag
    Overriding method of the heart of the matter.
    doStartTag() - Method in class org.apache.struts.taglib.nested.logic.NestedLessThanTag
    Overriding method of the heart of the matter.
    doStartTag() - Method in class org.apache.struts.taglib.nested.logic.NestedLessEqualTag
    Overriding method of the heart of the matter.
    doStartTag() - Method in class org.apache.struts.taglib.nested.logic.NestedIterateTag
    Overriding method of the heart of the matter.
    doStartTag() - Method in class org.apache.struts.taglib.nested.logic.NestedGreaterThanTag
    Overriding method of the heart of the matter.
    doStartTag() - Method in class org.apache.struts.taglib.nested.logic.NestedGreaterEqualTag
    Overriding method of the heart of the matter.
    doStartTag() - Method in class org.apache.struts.taglib.nested.logic.NestedEqualTag
    Overriding method of the heart of the matter.
    doStartTag() - Method in class org.apache.struts.taglib.nested.logic.NestedEmptyTag
    Overriding method of the heart of the matter.
    doStartTag() - Method in class org.apache.struts.taglib.nested.html.NestedTextareaTag
    Overriding method of the heart of the matter.
    doStartTag() - Method in class org.apache.struts.taglib.nested.html.NestedTextTag
    Overriding method of the heart of the matter.
    doStartTag() - Method in class org.apache.struts.taglib.nested.html.NestedSubmitTag
    Overriding method of the heart of the matter.
    doStartTag() - Method in class org.apache.struts.taglib.nested.html.NestedSelectTag
    Overriding method of the heart of the matter.
    doStartTag() - Method in class org.apache.struts.taglib.nested.html.NestedRadioTag
    Overriding method of the heart of the matter.
    doStartTag() - Method in class org.apache.struts.taglib.nested.html.NestedPasswordTag
    Overriding method of the heart of the matter.
    doStartTag() - Method in class org.apache.struts.taglib.nested.html.NestedOptionsTag
    Overriding method of the heart of the matter.
    doStartTag() - Method in class org.apache.struts.taglib.nested.html.NestedOptionsCollectionTag
    Overriding method of the heart of the matter.
    doStartTag() - Method in class org.apache.struts.taglib.nested.html.NestedMultiboxTag
    Overriding method of the heart of the matter.
    doStartTag() - Method in class org.apache.struts.taglib.nested.html.NestedMessagesTag
    Overriding method of the heart of the matter.
    doStartTag() - Method in class org.apache.struts.taglib.nested.html.NestedLinkTag
    Overriding method of the heart of the matter.
    doStartTag() - Method in class org.apache.struts.taglib.nested.html.NestedImgTag
    Overriding method of the heart of the matter.
    doStartTag() - Method in class org.apache.struts.taglib.nested.html.NestedImageTag
    Overriding method of the heart of the matter.
    doStartTag() - Method in class org.apache.struts.taglib.nested.html.NestedHiddenTag
    Overriding method of the heart of the matter.
    doStartTag() - Method in class org.apache.struts.taglib.nested.html.NestedFormTag
    Overriding to allow the chance to set the details of the system, so that dynamic includes can be possible
    doStartTag() - Method in class org.apache.struts.taglib.nested.html.NestedFileTag
    Overriding method of the heart of the matter.
    doStartTag() - Method in class org.apache.struts.taglib.nested.html.NestedErrorsTag
    Overriding method of the heart of the matter.
    doStartTag() - Method in class org.apache.struts.taglib.nested.html.NestedCheckboxTag
    Overriding method of the heart of the matter.
    doStartTag() - Method in class org.apache.struts.taglib.nested.bean.NestedWriteTag
    Overriding method of the heart of the matter.
    doStartTag() - Method in class org.apache.struts.taglib.nested.bean.NestedSizeTag
    Overriding method of the heart of the matter.
    doStartTag() - Method in class org.apache.struts.taglib.nested.bean.NestedMessageTag
    Overriding method of the heart of the matter.
    doStartTag() - Method in class org.apache.struts.taglib.nested.bean.NestedDefineTag
    Overriding method of the heart of the matter.
    doStartTag() - Method in class org.apache.struts.taglib.logic.IterateTag
    Construct an iterator for the specified collection, and begin looping through the body once per element.
    doStartTag() - Method in class org.apache.struts.taglib.logic.ForwardTag
    Defer processing until the end of this tag is encountered.
    doStartTag() - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
    Perform the test required for this particular tag, and either evaluate or skip the body of this tag.
    doStartTag() - Method in class org.apache.struts.taglib.logic.RedirectTag
    Defer generation until the end of this tag is encountered.
    doStartTag() - Method in class org.apache.struts.taglib.html.OptionsTag
    Process the start of this tag.
    doStartTag() - Method in class org.apache.struts.taglib.html.OptionsCollectionTag
    Process the start of this tag.
    doStartTag() - Method in class org.apache.struts.taglib.html.ErrorsTag
    Render the specified error messages if there are any.
    doStartTag() - Method in class org.apache.struts.taglib.html.HiddenTag
    Generate the required input tag, followed by the optional rendered text.
    doStartTag() - Method in class org.apache.struts.taglib.html.JavascriptValidatorTag
    Render the JavaScript for to perform validations based on the form name.
    doStartTag() - Method in class org.apache.struts.taglib.html.LinkTag
    Render the beginning of the hyperlink.
    doStartTag() - Method in class org.apache.struts.taglib.html.SelectTag
    Render the beginning of this select tag.
    doStartTag() - Method in class org.apache.struts.taglib.html.TextareaTag
    Generate the required input tag.
    doStartTag() - Method in class org.apache.struts.taglib.html.MessagesTag
    Construct an iterator for the specified collection, and begin looping through the body once per element.
    doStartTag() - Method in class org.apache.struts.taglib.html.CancelTag
    Process the start of this tag.
    doStartTag() - Method in class org.apache.struts.taglib.html.BaseFieldTag
    Generate the required input tag.
    doStartTag() - Method in class org.apache.struts.taglib.html.MultiboxTag
    Process the beginning of this tag.
    doStartTag() - Method in class org.apache.struts.taglib.html.FrameTag
    Render the appropriately encoded URI.
    doStartTag() - Method in class org.apache.struts.taglib.html.BaseInputTag
    Process the start of this tag.
    doStartTag() - Method in class org.apache.struts.taglib.html.BaseTag
    Process the start of this tag.
    doStartTag() - Method in class org.apache.struts.taglib.html.ImageTag
    Process the start of this tag.
    doStartTag() - Method in class org.apache.struts.taglib.html.CheckboxTag
    Generate the required input tag.
    doStartTag() - Method in class org.apache.struts.taglib.html.ImgTag
    Render the beginning of the IMG tag.
    doStartTag() - Method in class org.apache.struts.taglib.html.HtmlTag
    Process the start of this tag.
    doStartTag() - Method in class org.apache.struts.taglib.html.RewriteTag
    Render the appropriately encoded URI.
    doStartTag() - Method in class org.apache.struts.taglib.html.FormTag
    Render the beginning of this form.
    doStartTag() - Method in class org.apache.struts.taglib.html.SubmitTag
    Process the start of this tag.
    doStartTag() - Method in class org.apache.struts.taglib.html.ButtonTag
    Process the start of this tag.
    doStartTag() - Method in class org.apache.struts.taglib.html.ResetTag
    Process the start of this tag.
    doStartTag() - Method in class org.apache.struts.taglib.html.OptionTag
    Process the start of this tag.
    doStartTag() - Method in class org.apache.struts.taglib.html.RadioTag
    Generate the required input tag.
    doStartTag() - Method in class org.apache.struts.taglib.bean.DefineTag
    Check if we need to evaluate the body of the tag
    doStartTag() - Method in class org.apache.struts.taglib.bean.MessageTag
    Process the start tag.
    doStartTag() - Method in class org.apache.struts.taglib.bean.WriteTag
    Process the start tag.
    doStartTag() - Method in class org.apache.struts.taglib.bean.IncludeTag
    Define the contents returned for the specified resource as a page scope attribute.
    doStartTag() - Method in class org.apache.struts.taglib.bean.StrutsTag
    Retrieve the required configuration object and expose it as a scripting variable.
    doStartTag() - Method in class org.apache.struts.taglib.bean.SizeTag
    Retrieve the required property and expose it as a scripting variable.
    doStartTag() - Method in class org.apache.struts.taglib.bean.ResourceTag
    Retrieve the required property and expose it as a scripting variable.
    doStartTag() - Method in class org.apache.struts.taglib.bean.ParameterTag
    Retrieve the required property and expose it as a scripting variable.
    doStartTag() - Method in class org.apache.struts.taglib.bean.PageTag
    Retrieve the required configuration object and expose it as a scripting variable.
    doStartTag() - Method in class org.apache.struts.taglib.bean.HeaderTag
    Retrieve the required property and expose it as a scripting variable.
    doStartTag() - Method in class org.apache.struts.taglib.bean.CookieTag
    Retrieve the required property and expose it as a scripting variable.
    DOUBLE_COMPARE - Static variable in class org.apache.struts.taglib.logic.CompareTagBase
    We will do a double/float comparison.
    DOUBLE_DASH_STRING - Static variable in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    DynaActionForm - class org.apache.struts.action.DynaActionForm.
    Specialized subclass of ActionForm that allows the creation of form beans with dynamic sets of properties, without requiring the developer to create a Java class for each type of form bean.
    DynaActionForm() - Constructor for class org.apache.struts.action.DynaActionForm
     
    DynaActionFormClass - class org.apache.struts.action.DynaActionFormClass.
    Implementation of DynaClass for DynaActionForm classes that allow developers to define ActionForms without having to individually code all of the classes.
    DynaActionFormClass(FormBeanConfig) - Constructor for class org.apache.struts.action.DynaActionFormClass
    Construct a new DynaActionFormClass for the specified form bean configuration.
    dynaClass - Variable in class org.apache.struts.action.DynaActionForm
    The DynaActionFormClass with which we are associated.
    dynaClasses - Static variable in class org.apache.struts.action.DynaActionFormClass
    The set of DynaActionFormClass instances that have ever been created, keyed by the form bean name.
    dynamic - Variable in class org.apache.struts.config.FormBeanConfig
    Is the form bean class an instance of DynaActionForm with dynamic properties?
    dynamicJavascript - Variable in class org.apache.struts.taglib.html.JavascriptValidatorTag
    The dynamic JavaScript objects will only be generated if this is set to "true".
    DynaValidatorActionForm - class org.apache.struts.validator.DynaValidatorActionForm.
    This class extends DynaValidatorForm and provides basic field validation based on an XML file.
    DynaValidatorActionForm() - Constructor for class org.apache.struts.validator.DynaValidatorActionForm
     
    DynaValidatorForm - class org.apache.struts.validator.DynaValidatorForm.
    This class extends DynaActionForm and provides basic field validation based on an XML file.
    DynaValidatorForm() - Constructor for class org.apache.struts.validator.DynaValidatorForm
     
    dynaValues - Variable in class org.apache.struts.action.DynaActionForm
    The set of property values for this DynaActionForm, keyed by property name.

    E

    elementCharset - Variable in class org.apache.struts.upload.MultipartBoundaryInputStream
    The character encoding of the element, specified in the element's Content-Type header.
    elementContentDisposition - Variable in class org.apache.struts.upload.MultipartBoundaryInputStream
    The Content-Disposition for the current form element being read.
    elementContentType - Variable in class org.apache.struts.upload.MultipartBoundaryInputStream
    The Content-Type of the current form element being read.
    elementFileName - Variable in class org.apache.struts.upload.MultipartBoundaryInputStream
    The filename of the current form element being read, null if the current form element is text data.
    elementName - Variable in class org.apache.struts.upload.MultipartBoundaryInputStream
    The name of the current form element being read.
    elementsAll - Variable in class org.apache.struts.upload.CommonsMultipartRequestHandler
    The combined text and file request parameters.
    elementsFile - Variable in class org.apache.struts.upload.CommonsMultipartRequestHandler
    The file request parameters.
    elementsText - Variable in class org.apache.struts.upload.CommonsMultipartRequestHandler
    The text request parameters.
    EMPTY_ITERATOR - Static variable in class org.apache.struts.tiles.ComponentContext
    EmptyIterator over component attributes.
    empty() - Method in class org.apache.struts.action.ActionMessages
    Deprecated. Use isEmpty instead.
    EmptyIterator - class org.apache.struts.tiles.EmptyIterator.
     
    EmptyIterator() - Constructor for class org.apache.struts.tiles.EmptyIterator
     
    EmptyTag - class org.apache.struts.taglib.logic.EmptyTag.
    Evalute the nested body content of this tag if the specified value is empty for this request.
    EmptyTag() - Constructor for class org.apache.struts.taglib.logic.EmptyTag
     
    encode - Static variable in class org.apache.struts.util.RequestUtils
    Java 1.4 encode method to use instead of deprecated 1.3 version.
    encodeURL(String) - Static method in class org.apache.struts.util.RequestUtils
    Use the new URLEncoder.encode() method from java 1.4 if available, else use the old deprecated version.
    encounteredFinalBoundary() - Method in class org.apache.struts.upload.MultipartValueStream
     
    enctype - Variable in class org.apache.struts.taglib.html.FormTag
    The content encoding to be used on a POST submit.
    endOfStream - Variable in class org.apache.struts.upload.MultipartBoundaryInputStream
    Whether or not the end of the stream has been read.
    enum - Variable in class org.apache.struts.util.IteratorAdapter
    Deprecated.  
    equals(byte[], int, int, byte[]) - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
    Checks bytes for equality.
    EqualTag - class org.apache.struts.taglib.logic.EqualTag.
    Evaluate the nested body content of this tag if the specified variable and value are equal.
    EqualTag() - Constructor for class org.apache.struts.taglib.logic.EqualTag
     
    error - Variable in class org.apache.struts.util.ServletContextWriter
    The error state for this stream.
    error - Variable in class org.apache.struts.util.ModuleException
     
    ERROR_KEY - Static variable in class org.apache.struts.Globals
    The request attributes key under which your action should store an org.apache.struts.action.ActionErrors object, if you are using the corresponding custom tag library elements.
    ERROR_KEY - Static variable in class org.apache.struts.action.Action
    Deprecated. Replaced by Globals.ERROR_KEY
    ErrorMessages - class org.apache.struts.util.ErrorMessages.
    Deprecated. Use org.apache.struts.action.ActionErrors instead
    ErrorMessages() - Constructor for class org.apache.struts.util.ErrorMessages
    Deprecated.  
    errorOutput() - Method in class org.apache.struts.config.ConfigHelper
    Wrapper for getErrorMarkup()
    errorOutput(String) - Method in class org.apache.struts.config.ConfigHelper
    Wrapper for getErrorMarkup(String)
    errors - Variable in class org.apache.struts.util.ErrorMessages
    Deprecated. The accumulated set of error message keys.
    errors() - Method in class org.apache.struts.config.ConfigHelper
    Wrapper for getErrors()
    errors(String) - Method in class org.apache.struts.config.ConfigHelper
    Wrapper for getErrors(String)
    errorsEmpty() - Method in class org.apache.struts.config.ConfigHelper
    Wrapper for getErrorEmpty()
    errorSize() - Method in class org.apache.struts.config.ConfigHelper
    Alias for getErrorSize()
    errorSize(String) - Method in class org.apache.struts.config.ConfigHelper
    Wrapper for getErrorSize(String)
    ErrorsTag - class org.apache.struts.taglib.html.ErrorsTag.
    Custom tag that renders error messages if an appropriate request attribute has been created.
    ErrorsTag() - Constructor for class org.apache.struts.taglib.html.ErrorsTag
     
    escape(String) - Method in class org.apache.struts.util.MessageResources
    Escape any single quote characters that are included in the specified message string.
    exception - Variable in class org.apache.struts.tiles.DefinitionsFactoryException
    Any "wrapped" exception will be exposed when this is serialized.
    exception - Variable in class org.apache.struts.tiles.TilesException
    Any "wrapped" exception will be exposed when this is serialized.
    EXCEPTION_KEY - Static variable in class org.apache.struts.Globals
    The request attributes key under which Struts custom tags might store a Throwable that caused them to report a JspException at runtime.
    EXCEPTION_KEY - Static variable in interface org.apache.struts.taglib.tiles.ComponentConstants
     
    EXCEPTION_KEY - Static variable in class org.apache.struts.action.Action
    Deprecated. Replaced by Globals.EXCEPTION_KEY
    ExceptionConfig - class org.apache.struts.config.ExceptionConfig.
    A JavaBean representing the configuration information of an <exception> element from a Struts configuration file.
    ExceptionConfig() - Constructor for class org.apache.struts.config.ExceptionConfig
     
    ExceptionHandler - class org.apache.struts.action.ExceptionHandler.
    An ExceptionHandler is configured in the Struts configuration file to handle a specific type of exception thrown by an Action's execute method.
    ExceptionHandler() - Constructor for class org.apache.struts.action.ExceptionHandler
     
    exceptions - Variable in class org.apache.struts.config.ActionConfig
    The set of exception handling configurations for this action, if any, keyed by the type property.
    exceptions - Variable in class org.apache.struts.config.impl.ModuleConfigImpl
    The set of exception handling configurations for this module, if any, keyed by the type property.
    execute(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.tiles.actions.ReloadDefinitionsAction
    Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
    execute(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.tiles.actions.DefinitionDispatcherAction
    Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
    execute(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.tiles.actions.ViewDefinitionsAction
    Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
    execute(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.tiles.actions.TilesAction
    Original Struts Action's method.
    execute(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.tiles.actions.NoOpAction
    Deprecated. Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
    execute(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.actions.LookupDispatchAction
    Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
    execute(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.actions.ForwardAction
    Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
    execute(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.actions.DispatchAction
    Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
    execute(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.actions.SwitchAction
    Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
    execute(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.actions.IncludeAction
    Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it).
    execute(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.action.Action
    Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
    execute(ActionMapping, ActionForm, ServletRequest, ServletResponse) - Method in class org.apache.struts.action.Action
    Process the specified non-HTTP request, and create the corresponding non-HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
    execute(ComponentContext, ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.tiles.actions.TilesAction
    Process the specified HTTP request and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic.
    execute(Exception, ExceptionConfig, ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.action.ExceptionHandler
    Handle the exception.
    extend(XmlDefinitionsSet) - Method in class org.apache.struts.tiles.xmlDefinition.XmlDefinitionsSet
    Add definitions from specified child definitions set.
    extendsDefinition - Variable in class org.apache.struts.taglib.tiles.DefinitionTag
    Extends attribute value.
    extraAttributes - Variable in class org.apache.struts.tiles.DefinitionsFactoryConfig
    Map of extra attribute available.

    F

    factories - Variable in class org.apache.struts.tiles.xmlDefinition.FactorySet
    Loaded factories
    factory - Variable in class org.apache.struts.util.MessageResources
    The MessageResourcesFactory that created this instance.
    factory - Variable in class org.apache.struts.tiles.definition.ComponentDefinitionsFactoryWrapper
    The underlying factory
    factory - Variable in class org.apache.struts.tiles.definition.ReloadableDefinitionsFactory
    The real factory instance
    factory - Variable in class org.apache.struts.config.MessageResourcesConfig
    Fully qualified Java class name of the MessageResourcesFactory class we should use.
    FACTORY_CLASSNAME_PARAMETER_NAME - Static variable in class org.apache.struts.tiles.DefinitionsFactoryConfig
    Alternate name for factory classname properties in configuration file
    factoryClass - Static variable in class org.apache.struts.util.MessageResourcesFactory
    The fully qualified class name to be used for MessageResourcesFactory instances.
    factoryClass - Static variable in class org.apache.struts.config.ModuleConfigFactory
    The fully qualified class name to be used for ModuleConfigFactory instances.
    factoryClassname - Variable in class org.apache.struts.tiles.DefinitionsFactoryConfig
    Fully qualified classname of the factory to create.
    factoryName - Variable in class org.apache.struts.tiles.DefinitionsFactoryConfig
    The name associated to this factory.
    FactoryNotFoundException - exception org.apache.struts.tiles.FactoryNotFoundException.
    Exception thrown when definitions factory is not found.
    FactoryNotFoundException() - Constructor for class org.apache.struts.tiles.FactoryNotFoundException
    Constructor.
    FactoryNotFoundException(String) - Constructor for class org.apache.struts.tiles.FactoryNotFoundException
    Constructor.
    FactorySet - class org.apache.struts.tiles.xmlDefinition.FactorySet.
    Component Definitions factory.
    FactorySet() - Constructor for class org.apache.struts.tiles.xmlDefinition.FactorySet
    Constructor.
    fatal - Variable in class org.apache.struts.plugins.ModuleConfigVerifier
    Should the existence of configuration errors be fatal.
    FIELD_TEST_EQUAL - Static variable in class org.apache.struts.validator.FieldChecks
     
    FIELD_TEST_EQUAL - Static variable in class org.apache.struts.util.StrutsValidator
    Deprecated.  
    FIELD_TEST_NOTNULL - Static variable in class org.apache.struts.validator.FieldChecks
     
    FIELD_TEST_NOTNULL - Static variable in class org.apache.struts.util.StrutsValidator
    Deprecated.  
    FIELD_TEST_NULL - Static variable in class org.apache.struts.validator.FieldChecks
     
    FIELD_TEST_NULL - Static variable in class org.apache.struts.util.StrutsValidator
    Deprecated. Commons Logging instance.
    FieldChecks - class org.apache.struts.validator.FieldChecks.
    This class contains the default validations that are used in the validator-rules.xml file.
    FieldChecks() - Constructor for class org.apache.struts.validator.FieldChecks
     
    file - Variable in class org.apache.struts.upload.MultipartElement
    The element's data represented in a (possibly temporary) file.
    FILE_PREFIX - Static variable in class org.apache.struts.upload.MultipartIterator
     
    fileElements - Variable in class org.apache.struts.upload.DiskMultipartRequestHandler
    A Hashtable representing the form files uploaded.
    fileItem - Variable in class org.apache.struts.upload.CommonsMultipartRequestHandler.CommonsFormFile
    The FileItem instance wrapped by this object.
    filename - Variable in class org.apache.struts.taglib.tiles.InitDefinitionsTag
     
    fileName - Variable in class org.apache.struts.upload.DiskFile
    The name of the file
    fileName - Variable in class org.apache.struts.upload.MultipartElement
    The element's filename, null for text elements.
    FILENAME_EXTENSION - Static variable in class org.apache.struts.tiles.xmlDefinition.I18nFactorySet
    Default filenames extension.
    filenames - Variable in class org.apache.struts.tiles.xmlDefinition.I18nFactorySet
    Names of files containing instances descriptions.
    filePath - Variable in class org.apache.struts.upload.DiskFile
    The filepath to the temporary file
    fileSize - Variable in class org.apache.struts.upload.DiskFile
    The size in bytes of the file
    FileTag - class org.apache.struts.taglib.html.FileTag.
    Custom tag for input fields of type "file".
    FileTag() - Constructor for class org.apache.struts.taglib.html.FileTag
    Construct a new instance of this tag.
    fill() - Method in class org.apache.struts.upload.BufferedMultipartInputStream
    Fills the buffer with data from the underlying inputStream.
    fillLine() - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    fillLineBuffer() - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    filter - Variable in class org.apache.struts.taglib.nested.NestedWriteNestingTag
     
    filter - Variable in class org.apache.struts.taglib.html.OptionsTag
    Should the label values be filtered for HTML sensitive characters?
    filter - Variable in class org.apache.struts.taglib.html.OptionsCollectionTag
    Should the label values be filtered for HTML sensitive characters?
    filter - Variable in class org.apache.struts.taglib.bean.WriteTag
    Filter the rendered output for characters that are sensitive in HTML?
    filter(String) - Static method in class org.apache.struts.util.ResponseUtils
    Filter the specified string for characters that are senstive to HTML interpreters, returning the string with these characters replaced by the corresponding character entities.
    finalBoundaryBytes - Variable in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    finalBoundaryEncountered - Variable in class org.apache.struts.upload.MultipartBoundaryInputStream
    Whether or not the final boundary has been encountered.
    finalBoundaryReached - Variable in class org.apache.struts.upload.MultipartValueStream
    is the boundary found a final boundary?
    findActionConfig(String) - Method in interface org.apache.struts.config.ModuleConfig
    Return the action configuration for the specified path, if any; otherwise return null.
    findActionConfig(String) - Method in class org.apache.struts.config.impl.ModuleConfigImpl
    Return the action configuration for the specified path, if any; otherwise return null.
    findActionConfigs() - Method in interface org.apache.struts.config.ModuleConfig
    Return the action configurations for this module.
    findActionConfigs() - Method in class org.apache.struts.config.impl.ModuleConfigImpl
    Return the action configurations for this module.
    findAttribute(String, PageContext) - Method in class org.apache.struts.tiles.ComponentContext
    Find object in one of the contexts.
    findAttribute(String, PageContext) - Static method in class org.apache.struts.taglib.tiles.util.TagUtils
    Search attribute in different contexts.
    findDataSource(String) - Method in class org.apache.struts.action.ActionServlet
    Deprecated. Look up data sources directly in servlet context attributes
    findDataSourceConfig(String) - Method in interface org.apache.struts.config.ModuleConfig
    Return the data source configuration for the specified key, if any; otherwise return null.
    findDataSourceConfig(String) - Method in class org.apache.struts.config.impl.ModuleConfigImpl
    Return the data source configuration for the specified key, if any; otherwise return null.
    findDataSourceConfigs() - Method in interface org.apache.struts.config.ModuleConfig
    Return the data source configurations for this module.
    findDataSourceConfigs() - Method in class org.apache.struts.config.impl.ModuleConfigImpl
    Return the data source configurations for this module.
    findEnclosingParent() - Method in class org.apache.struts.taglib.tiles.PutListTag
    Find enclosing parent tag accepting this tag.
    findEnclosingPutListTagParent() - Method in class org.apache.struts.taglib.tiles.AddTag
    Find parent tag which must implement AttributeContainer.
    findEnclosingPutTagParent() - Method in class org.apache.struts.taglib.tiles.PutTag
    Find parent tag which must implement AttributeContainer.
    findException(Class) - Method in class org.apache.struts.action.ActionMapping
    Find and return the ExceptionConfig instance defining how exceptions of the specified type should be handled.
    findExceptionConfig(String) - Method in interface org.apache.struts.config.ModuleConfig
    Return the exception configuration for the specified type, if any; otherwise return null.
    findExceptionConfig(String) - Method in class org.apache.struts.config.ActionConfig
    Return the exception configuration for the specified type, if any; otherwise return null.
    findExceptionConfig(String) - Method in class org.apache.struts.config.impl.ModuleConfigImpl
    Return the exception configuration for the specified type, if any; otherwise return null.
    findExceptionConfigs() - Method in interface org.apache.struts.config.ModuleConfig
    Return the exception configurations for this module.
    findExceptionConfigs() - Method in class org.apache.struts.config.ActionConfig
    Return the exception configurations for this action.
    findExceptionConfigs() - Method in class org.apache.struts.config.impl.ModuleConfigImpl
    Return the exception configurations for this module.
    findFormBean(String) - Method in class org.apache.struts.action.ActionServlet
    Deprecated. Replaced by ModuleConfig.findFormBeanConfig()
    findFormBean(String) - Method in class org.apache.struts.action.ActionFormBeans
    Deprecated. Return the formBean associated with the specified logical name, if any; otherwise return null.
    findFormBeanConfig(String) - Method in interface org.apache.struts.config.ModuleConfig
    Return the form bean configuration for the specified key, if any; otherwise return null.
    findFormBeanConfig(String) - Method in class org.apache.struts.config.impl.ModuleConfigImpl
    Return the form bean configuration for the specified key, if any; otherwise return null.
    findFormBeanConfigs() - Method in interface org.apache.struts.config.ModuleConfig
    Return the form bean configurations for this module.
    findFormBeanConfigs() - Method in class org.apache.struts.config.impl.ModuleConfigImpl
    Return the form bean configurations for this module.
    findFormBeans() - Method in class org.apache.struts.action.ActionFormBeans
    Deprecated. Return the set of names for form beans defined in this collection.
    findFormPropertyConfig(String) - Method in class org.apache.struts.config.FormBeanConfig
    Return the form property configuration for the specified property name, if any; otherwise return null.
    findFormPropertyConfigs() - Method in class org.apache.struts.config.FormBeanConfig
    Return the form property configurations for this module.
    findForward(String) - Method in class org.apache.struts.action.ActionServlet
    Deprecated. Replaced by ModuleConfig.findForwardConfig()
    findForward(String) - Method in class org.apache.struts.action.ActionForwards
    Deprecated. Return the forwarding associated with the specified logical name, if any; otherwise return null.
    findForward(String) - Method in class org.apache.struts.action.ActionMapping
    Find and return the ForwardConfig instance defining how forwarding to the specified logical name should be handled.
    findForwardConfig(String) - Method in interface org.apache.struts.config.ModuleConfig
    Return the forward configuration for the specified key, if any; otherwise return null.
    findForwardConfig(String) - Method in class org.apache.struts.config.ActionConfig
    Return the forward configuration for the specified key, if any; otherwise return null.
    findForwardConfig(String) - Method in class org.apache.struts.config.impl.ModuleConfigImpl
    Return the forward configuration for the specified key, if any; otherwise return null.
    findForwardConfigs() - Method in interface org.apache.struts.config.ModuleConfig
    Return the form bean configurations for this module.
    findForwardConfigs() - Method in class org.apache.struts.config.ActionConfig
    Return the form bean configurations for this application.
    findForwardConfigs() - Method in class org.apache.struts.config.impl.ModuleConfigImpl
    Return the form bean configurations for this module.
    findForwards() - Method in class org.apache.struts.action.ActionForwards
    Deprecated. Return the set of logical names for forwards defined in this collection.
    findForwards() - Method in class org.apache.struts.action.ActionMapping
    Return the logical names of all locally defined forwards for this mapping.
    findMapping(String) - Method in class org.apache.struts.action.ActionServlet
    Deprecated. Replaced by ModuleConfig.findActionConfig()
    findMapping(String) - Method in class org.apache.struts.action.ActionMappings
    Deprecated. Return the mapping associated with the specified logical name, if any; otherwise return null.
    findMappings() - Method in class org.apache.struts.action.ActionMappings
    Deprecated. Return the set of paths for mappings defined in this collection.
    findMessageResourcesConfig(String) - Method in interface org.apache.struts.config.ModuleConfig
    Return the message resources configuration for the specified key, if any; otherwise return null.
    findMessageResourcesConfig(String) - Method in class org.apache.struts.config.impl.ModuleConfigImpl
    Return the message resources configuration for the specified key, if any; otherwise return null.
    findMessageResourcesConfigs() - Method in interface org.apache.struts.config.ModuleConfig
    Return the message resources configurations for this module.
    findMessageResourcesConfigs() - Method in class org.apache.struts.config.impl.ModuleConfigImpl
    Return the message resources configurations for this module.
    findPlugInConfigs() - Method in interface org.apache.struts.config.ModuleConfig
    Return the configured plug-in actions for this module.
    findPlugInConfigs() - Method in class org.apache.struts.config.impl.ModuleConfigImpl
    Return the configured plug-in actions for this module.
    findStrutsPlugInConfigProperties(ActionServlet, ModuleConfig) - Method in class org.apache.struts.tiles.TilesPlugin
    Find original properties set in the Struts PlugInConfig object.
    finish() - Method in interface org.apache.struts.upload.MultipartRequestHandler
    This method is called on when a successful form post has been made.
    finish() - Method in class org.apache.struts.upload.CommonsMultipartRequestHandler
    Cleans up at the end of a request.
    finish() - Method in class org.apache.struts.upload.DiskMultipartRequestHandler
    Calls on rollback() to delete temporary files.
    FLOAT_FORMAT_KEY - Static variable in class org.apache.struts.taglib.bean.WriteTag
    The key to search default format string for float (double, BigDecimal) in resources.
    flush - Variable in class org.apache.struts.taglib.tiles.InsertTag
    Flush attribute value
    flush - Variable in class org.apache.struts.taglib.template.GetTag
    Deprecated. Should we flush before including this text?
    flush() - Method in class org.apache.struts.util.ServletContextWriter
    Flush the stream.
    focus - Variable in class org.apache.struts.taglib.html.FormTag
    The name of the field to receive focus, if any.
    focusIndex - Variable in class org.apache.struts.taglib.html.FormTag
    The index in the focus field array to receive focus.
    footer - Variable in class org.apache.struts.taglib.html.MessagesTag
    The message resource key for errors footer.
    FORM_BEANS_KEY - Static variable in class org.apache.struts.Globals
    Deprecated. Replaced by collection in ModuleConfig
    FORM_BEANS_KEY - Static variable in class org.apache.struts.action.Action
    Deprecated. Replaced by collection in ModuleConfig
    FORM_KEY - Static variable in class org.apache.struts.taglib.html.Constants
    The attribute key for the form tag itself.
    formatKey - Variable in class org.apache.struts.taglib.bean.WriteTag
    The key to search format string in applciation resources
    formats - Variable in class org.apache.struts.util.MessageResources
    The set of previously created MessageFormat objects, keyed by the key computed in messageKey().
    formatStr - Variable in class org.apache.struts.taglib.bean.WriteTag
    The format string to be used as format to convert value to String.
    formatValue(Object) - Method in class org.apache.struts.taglib.bean.WriteTag
    Format value according to specified format string (as tag attribute or as string from message resources) or to current user locale.
    formBean - Variable in class org.apache.struts.taglib.bean.StrutsTag
    The name of the ActionFormBean object to be exposed.
    formBeanClass() - Method in class org.apache.struts.config.FormBeanConfig
    Return the Class instance for the form bean implementation configured by this FormBeanConfig instance.
    FormBeanConfig - class org.apache.struts.config.FormBeanConfig.
    A JavaBean representing the configuration information of a <form-bean> element in a Struts configuration file.
    FormBeanConfig() - Constructor for class org.apache.struts.config.FormBeanConfig
     
    formBeans - Variable in class org.apache.struts.config.impl.ModuleConfigImpl
    The set of form bean configurations for this module, if any, keyed by the name property.
    formBeans - Variable in class org.apache.struts.action.ActionFormBeans
    Deprecated. The collection of ActionFormBean instances, keyed by name.
    FormFile - interface org.apache.struts.upload.FormFile.
    This interface represents a file that has been uploaded by a client.
    formName - Variable in class org.apache.struts.taglib.html.JavascriptValidatorTag
    The name of the form that corresponds with the action name in struts-config.xml.
    formProperties - Variable in class org.apache.struts.config.FormBeanConfig
    The set of FormProperty elements defining dynamic form properties for this form bean, keyed by property name.
    FormPropertyConfig - class org.apache.struts.config.FormPropertyConfig.
    A JavaBean representing the configuration information of a <form-property> element in a Struts configuration file.
    FormPropertyConfig() - Constructor for class org.apache.struts.config.FormPropertyConfig
    Standard no-arguments constructor for dynamic instantiation.
    FormPropertyConfig(String, String, String) - Constructor for class org.apache.struts.config.FormPropertyConfig
    Constructor that preconfigures the relevant properties.
    FormPropertyConfig(String, String, String, int) - Constructor for class org.apache.struts.config.FormPropertyConfig
    Constructor that preconfigures the relevant properties.
    FormTag - class org.apache.struts.taglib.html.FormTag.
    Custom tag that represents an input form, associated with a bean whose properties correspond to the various fields of the form.
    FormTag() - Constructor for class org.apache.struts.taglib.html.FormTag
     
    forward - Variable in class org.apache.struts.taglib.logic.RedirectTag
    The logical forward name from which to retrieve the redirect URI.
    forward - Variable in class org.apache.struts.taglib.html.LinkTag
    The logical forward name from which to retrieve the hyperlink URI.
    forward - Variable in class org.apache.struts.taglib.bean.IncludeTag
    The name of the global ActionForward that contains a path to our requested resource.
    forward - Variable in class org.apache.struts.taglib.bean.StrutsTag
    The name of the ActionForward object to be exposed.
    forward - Variable in class org.apache.struts.config.ConfigHelper
    The forward associated with this instance.
    forward - Variable in class org.apache.struts.config.ActionConfig
    Context-relative path of the web application resource that will process this request via RequestDispatcher.forward(), instead of instantiating and calling the Action class specified by "type".
    ForwardAction - class org.apache.struts.actions.ForwardAction.
    An Action that forwards to the context-relative URI specified by the parameter property of our associated ActionMapping.
    ForwardAction() - Constructor for class org.apache.struts.actions.ForwardAction
     
    ForwardConfig - class org.apache.struts.config.ForwardConfig.
    A JavaBean representing the configuration information of a <forward> element from a Struts configuration file.
    ForwardConfig() - Constructor for class org.apache.struts.config.ForwardConfig
    Construct a new instance with default values.
    ForwardConfig(String, String, boolean) - Constructor for class org.apache.struts.config.ForwardConfig
    Construct a new instance with the specified values.
    ForwardConfig(String, String, boolean, boolean) - Constructor for class org.apache.struts.config.ForwardConfig
    Construct a new instance with the specified values.
    ForwardingActionForward - class org.apache.struts.action.ForwardingActionForward.
    A subclass of ActionForward that defaults the redirect attribute to false.
    ForwardingActionForward() - Constructor for class org.apache.struts.action.ForwardingActionForward
    Construct a new instance with default values.
    ForwardingActionForward(String) - Constructor for class org.apache.struts.action.ForwardingActionForward
    Construct a new instance with the specified path.
    forwardPattern - Variable in class org.apache.struts.config.ControllerConfig
    The replacement pattern used to determine a context-relative URL from a ForwardConfig element.
    forwards - Variable in class org.apache.struts.config.ActionConfig
    The set of local forward configurations for this action, if any, keyed by the name property.
    forwards - Variable in class org.apache.struts.config.impl.ModuleConfigImpl
    The set of global forward configurations for this module, if any, keyed by the name property.
    forwards - Variable in class org.apache.struts.action.ActionForwards
    Deprecated. The collection of ActionForward instances, keyed by logical name.
    FORWARDS_KEY - Static variable in class org.apache.struts.Globals
    Deprecated. Replaced by collection in ModuleConfig.
    FORWARDS_KEY - Static variable in class org.apache.struts.action.Action
    Deprecated. Replaced by collection in ModuleConfig.
    ForwardTag - class org.apache.struts.taglib.logic.ForwardTag.
    Perform a forward or redirect to a page that is looked up in the configuration information associated with our application.
    ForwardTag() - Constructor for class org.apache.struts.taglib.logic.ForwardTag
     
    forwardURL(HttpServletRequest, ForwardConfig) - Static method in class org.apache.struts.util.RequestUtils
    Return the context-relative URL that corresponds to the specified ForwardConfig.
    frameborder - Variable in class org.apache.struts.taglib.html.FrameTag
    The frameborder attribute that should be rendered (1, 0).
    frameName - Variable in class org.apache.struts.taglib.html.FrameTag
    The name attribute that should be rendered for this frame.
    FrameTag - class org.apache.struts.taglib.html.FrameTag.
    Generate an HTML <frame> tag with similar capabilities as those the <html:link> tag provides for hyperlink elements.
    FrameTag() - Constructor for class org.apache.struts.taglib.html.FrameTag
     
    freeze() - Method in interface org.apache.struts.config.ModuleConfig
    Freeze the configuration of this module.
    freeze() - Method in class org.apache.struts.config.FormBeanConfig
    Freeze the configuration of this component.
    freeze() - Method in class org.apache.struts.config.ExceptionConfig
    Freeze the configuration of this component.
    freeze() - Method in class org.apache.struts.config.ActionConfig
    Freeze the configuration of this action.
    freeze() - Method in class org.apache.struts.config.MessageResourcesConfig
    Freeze the configuration of this component.
    freeze() - Method in class org.apache.struts.config.ControllerConfig
    Freeze the configuration of this component.
    freeze() - Method in class org.apache.struts.config.PlugInConfig
    Freeze the configuration of this component.
    freeze() - Method in class org.apache.struts.config.ForwardConfig
    Freeze the configuration of this component.
    freeze() - Method in class org.apache.struts.config.FormPropertyConfig
    Freeze the configuration of this component.
    freeze() - Method in class org.apache.struts.config.DataSourceConfig
    Freeze the configuration of this data source.
    freeze() - Method in class org.apache.struts.config.impl.ModuleConfigImpl
    Freeze the configuration of this module.

    G

    generateToken(HttpServletRequest) - Method in class org.apache.struts.util.TokenProcessor
    Generate a new transaction token, to be used for enforcing a single request for a particular transaction.
    generateToken(HttpServletRequest) - Method in class org.apache.struts.action.Action
    Generate a new transaction token, to be used for enforcing a single request for a particular transaction.
    GenericDataSource - class org.apache.struts.util.GenericDataSource.
    Deprecated. Use a BasicDataSource directly, or indirectly acquire a data source provided by your container
    GenericDataSource() - Constructor for class org.apache.struts.util.GenericDataSource
    Deprecated.  
    get() - Method in class org.apache.struts.action.ActionMessages
    Return the set of all recorded messages, without distinction by which property the messages are associated with.
    get(String) - Method in class org.apache.struts.taglib.template.util.ContentMap
    Deprecated. Use Tiles instead.
    get(String) - Method in class org.apache.struts.action.DynaActionForm
    Return the value of a simple property with the specified name.
    get(String) - Method in class org.apache.struts.action.ActionMessages
    Return the set of messages related to a specific property.
    get(String, int) - Method in class org.apache.struts.action.DynaActionForm
    Return the value of an indexed property with the specified name.
    get(String, String) - Method in class org.apache.struts.action.DynaActionForm
    Return the value of a mapped property with the specified name, or null if there is no value for the specified key.
    getAccept() - Method in class org.apache.struts.taglib.html.BaseFieldTag
     
    getAccesskey() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Returns the accessKey character.
    getAction() - Method in class org.apache.struts.taglib.html.LinkTag
     
    getAction() - Method in class org.apache.struts.taglib.html.FormTag
    Return the action URL to which this form should be submitted.
    getAction(String) - Method in class org.apache.struts.config.ConfigHelper
    Return the URL for the specified ActionMapping, otherwise return null.
    getAction(String) - Method in interface org.apache.struts.config.ConfigHelperInterface
    Return the URL for the specified ActionMapping, otherwise return null.
    getActionDefinition(ServletRequest) - Static method in class org.apache.struts.tiles.DefinitionsUtil
    Deprecated. Get Definition stored in jsp context by an action.
    getActionError(HttpServletRequest, ValidatorAction, Field) - Static method in class org.apache.struts.validator.Resources
    Gets the ActionError based on the ValidatorAction message and the Field's arg objects.
    getActionError(HttpServletRequest, ValidatorAction, Field) - Static method in class org.apache.struts.util.StrutsValidatorUtil
    Deprecated. As of Struts 1.1, replaced by Resources.getActionError(HttpServletRequest, ValidatorAction, Field)
    getActionErrors() - Method in class org.apache.struts.config.ConfigHelper
    The org.apache.struts.action.ActionErrors object, for this request.
    getActionErrors() - Method in interface org.apache.struts.config.ConfigHelperInterface
    The org.apache.struts.action.ActionErrors object, for this request.
    getActionErrors(PageContext, String) - Static method in class org.apache.struts.util.RequestUtils
    Retrieves the value from request scope and if it isn't already an ErrorMessages some classes are converted to one.
    getActionForm() - Method in class org.apache.struts.config.ConfigHelper
     
    getActionForm() - Method in interface org.apache.struts.config.ConfigHelperInterface
     
    getActionFormBeans() - Method in class org.apache.struts.config.ConfigHelper
    The org.apache.struts.action.ActionFormBeans collection for this application.
    getActionFormBeans() - Method in interface org.apache.struts.config.ConfigHelperInterface
    The org.apache.struts.action.ActionFormBeans collection for this application.
    getActionForward(String) - Method in class org.apache.struts.config.ConfigHelper
    Return the forwarding associated with the specified logical name, if any; otherwise return null.
    getActionForward(String) - Method in interface org.apache.struts.config.ConfigHelperInterface
    Return the forwarding associated with the specified logical name, if any; otherwise return null.
    getActionForwards() - Method in class org.apache.struts.config.ConfigHelper
    The org.apache.struts.action.ActionForwards collection for this application.
    getActionForwards() - Method in interface org.apache.struts.config.ConfigHelperInterface
    The org.apache.struts.action.ActionForwards collection for this application.
    getActionMapping(String) - Method in class org.apache.struts.config.ConfigHelper
    Return the mapping associated with the specified request path, if any; otherwise return null.
    getActionMapping(String) - Method in interface org.apache.struts.config.ConfigHelperInterface
    Return the mapping associated with the specified request path, if any; otherwise return null.
    getActionMappingClass() - Method in interface org.apache.struts.config.ModuleConfig
    The default class name to be used when creating action mapping instances.
    getActionMappingClass() - Method in class org.apache.struts.config.impl.ModuleConfigImpl
    The default class name to be used when creating action mapping instances.
    getActionMappingName(String) - Static method in class org.apache.struts.util.RequestUtils
    Return the form action converted into an action mapping path.
    getActionMappingName(String) - Method in class org.apache.struts.config.ConfigHelper
    Return the form action converted into an action mapping path.
    getActionMappingName(String) - Method in interface org.apache.struts.config.ConfigHelperInterface
    Return the form action converted into an action mapping path.
    getActionMappings() - Method in class org.apache.struts.config.ConfigHelper
    The context attributes key under which our org.apache.struts.action.ActionMappings collection is normally stored, unless overridden when initializing our ActionServlet.
    getActionMappings() - Method in interface org.apache.struts.config.ConfigHelperInterface
    The context attributes key under which our org.apache.struts.action.ActionMappings collection is normally stored, unless overridden when initializing our ActionServlet.
    getActionMappingURL(String) - Method in class org.apache.struts.config.ConfigHelper
    Return the form action converted into a server-relative URL.
    getActionMappingURL(String) - Method in interface org.apache.struts.config.ConfigHelperInterface
    Return the form action converted into a server-relative URL.
    getActionMappingURL(String, PageContext) - Static method in class org.apache.struts.util.RequestUtils
    Return the form action converted into a server-relative URL.
    getActionMessages() - Method in class org.apache.struts.config.ConfigHelper
     
    getActionMessages() - Method in interface org.apache.struts.config.ConfigHelperInterface
    The org.apache.struts.action.ActionFormBeans collection for this application.
    getActionMessages(PageContext, String) - Static method in class org.apache.struts.util.RequestUtils
    Retrieves the value from request scope and if it isn't already an ActionMessages some classes are converted to one.
    getActualContent() - Method in class org.apache.struts.taglib.template.PutTag
    Deprecated. Use Tiles instead.
    getAdjustedProperty(HttpServletRequest, String) - Static method in class org.apache.struts.taglib.nested.NestedPropertyHelper
    Get the adjusted property.
    getAlign() - Method in class org.apache.struts.taglib.html.ImageTag
    Deprecated. Align attribute is deprecated in HTML 4.x.
    getAlign() - Method in class org.apache.struts.taglib.html.ImgTag
     
    getAllElements() - Method in interface org.apache.struts.upload.MultipartRequestHandler
    This method returns all elements of a multipart request.
    getAllElements() - Method in class org.apache.struts.upload.CommonsMultipartRequestHandler
    Returns a hash table containing both text and file request parameters.
    getAllElements() - Method in class org.apache.struts.upload.DiskMultipartRequestHandler
     
    getAllParametersForMultipartRequest(HttpServletRequest, MultipartRequestHandler) - Static method in class org.apache.struts.util.RequestUtils
    Create a map containing all of the parameters supplied for a multipart request, keyed by parameter name.
    getAlt() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Returns the alternate text attribute.
    getAltKey() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Returns the message resources key of the alternate text.
    getAncestor(String) - Method in class org.apache.struts.taglib.template.PutTag
    Deprecated. Use Tiles instead.
    getAnchor() - Method in class org.apache.struts.taglib.logic.RedirectTag
     
    getAnchor() - Method in class org.apache.struts.taglib.html.LinkTag
     
    getAnchor() - Method in class org.apache.struts.taglib.bean.IncludeTag
     
    getApplicationConfig() - Method in class org.apache.struts.config.ActionConfig
    Deprecated. ActionConfig.getModuleConfig()
    getApplicationConfig(HttpServletRequest) - Method in class org.apache.struts.action.ActionServlet
    Deprecated. use ActionServlet.getModuleConfig(HttpServletRequest)
    getApplicationPrefixes(ServletContext) - Static method in class org.apache.struts.util.RequestUtils
    Deprecated. Use getModulePrefixes(ServletContext) instead.
    getArg0() - Method in class org.apache.struts.taglib.bean.MessageTag
     
    getArg1() - Method in class org.apache.struts.taglib.bean.MessageTag
     
    getArg2() - Method in class org.apache.struts.taglib.bean.MessageTag
     
    getArg3() - Method in class org.apache.struts.taglib.bean.MessageTag
     
    getArg4() - Method in class org.apache.struts.taglib.bean.MessageTag
     
    getArgs(String, MessageResources, Locale, Field) - Static method in class org.apache.struts.validator.Resources
    Gets the message arguments based on the current ValidatorAction and Field.
    getArgs(String, MessageResources, Locale, Field) - Static method in class org.apache.struts.util.StrutsValidatorUtil
    Deprecated. As of Struts 1.1, replaced by Resources.getArgs(String,MessageResources,Locale,Field)
    getAttribute() - Method in class org.apache.struts.tiles.xmlDefinition.XmlAttribute
    Another access method for the name property.
    getAttribute() - Method in class org.apache.struts.taglib.tiles.GetAttributeTag
    Get attribute.
    getAttribute() - Method in class org.apache.struts.config.ActionConfig
    Returns the request-scope or session-scope attribute name under which our form bean is accessed, if it is different from the form bean's specified name.
    getAttribute(String) - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    getAttribute(String) - Method in class org.apache.struts.tiles.DefinitionsFactoryConfig
    Get value of an additional attribute.
    getAttribute(String) - Method in class org.apache.struts.tiles.ComponentContext
    Get an attribute from context.
    getAttribute(String) - Method in class org.apache.struts.tiles.ComponentDefinition
    Returns the value of the named attribute as an Object, or null if no attribute of the given name exists.
    getAttribute(String, int, PageContext) - Method in class org.apache.struts.tiles.ComponentContext
    Get object from requested context.
    getAttribute(String, int, PageContext) - Static method in class org.apache.struts.taglib.tiles.util.TagUtils
    Get object from requested context.
    getAttributeNames() - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    getAttributeNames() - Method in class org.apache.struts.tiles.ComponentContext
    Get names of all attributes.
    getAttributes() - Method in class org.apache.struts.tiles.DefinitionsFactoryConfig
    Get additional attributes as a Map.
    getAttributes() - Method in class org.apache.struts.tiles.ComponentDefinition
    Access method for the attributes property.
    GetAttributeTag - class org.apache.struts.taglib.tiles.GetAttributeTag.
    Retrieve the value of the specified component/template attribute property, and render it to the current JspWriter as a String.
    GetAttributeTag() - Constructor for class org.apache.struts.taglib.tiles.GetAttributeTag
    Default constructor.
    getAuthType() - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    getBaseFileName(String) - Method in class org.apache.struts.upload.CommonsMultipartRequestHandler.CommonsFormFile
    Returns the base file name from the supplied file path.
    getBaseRef() - Method in class org.apache.struts.config.ConfigHelper
    Renders the reference for a HTML element.
    getBaseRef() - Method in interface org.apache.struts.config.ConfigHelperInterface
    Renders the reference for a HTML element
    getBeanClass() - Method in class org.apache.struts.action.DynaActionFormClass
    Return the implementation class we are using to construct new instances, re-introspecting our FormBeanConfig if necessary (that is, after being deserialized, since beanClass is marked transient.
    getBeanName() - Method in class org.apache.struts.taglib.tiles.PutTag
    Get bean name.
    getBeanName() - Method in class org.apache.struts.taglib.tiles.InsertTag
    Get bean name.
    getBeanName() - Method in class org.apache.struts.taglib.nested.NestedReference
    Getter for the bean name
    getBeanName() - Method in class org.apache.struts.taglib.html.FormTag
    Return the name of the form bean corresponding to this tag.
    getBeanProperty() - Method in class org.apache.struts.taglib.tiles.PutTag
    Get bean property.
    getBeanProperty() - Method in class org.apache.struts.taglib.tiles.InsertTag
    Get bean property.
    getBeanScope() - Method in class org.apache.struts.taglib.tiles.PutTag
    Get bean scope.
    getBeanScope() - Method in class org.apache.struts.taglib.tiles.InsertTag
    Get bean scope.
    getBorder() - Method in class org.apache.struts.taglib.html.ImageTag
     
    getBorder() - Method in class org.apache.struts.taglib.html.ImgTag
     
    getBoundaryFromContentType() - Method in class org.apache.struts.upload.MultipartIterator
    Parses a content-type String for the boundary.
    getBufferSize() - Method in class org.apache.struts.upload.MultipartIterator
    Get the maximum amount of bytes read from a line at one time
    getBufferSize() - Method in class org.apache.struts.config.ControllerConfig
     
    getBundle() - Method in class org.apache.struts.taglib.html.ErrorsTag
     
    getBundle() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Returns the name of the message resources bundle to use.
    getBundle() - Method in class org.apache.struts.taglib.html.MessagesTag
     
    getBundle() - Method in class org.apache.struts.taglib.html.OptionTag
     
    getBundle() - Method in class org.apache.struts.taglib.bean.MessageTag
     
    getBundle() - Method in class org.apache.struts.taglib.bean.WriteTag
     
    getBundle() - Method in class org.apache.struts.config.ExceptionConfig
     
    getBytesRead() - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    getCdata() - Method in class org.apache.struts.taglib.html.JavascriptValidatorTag
    Returns the cdata setting "true" or "false".
    getCharacterEncoding() - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    getClassname() - Method in class org.apache.struts.taglib.tiles.UseAttributeTag
    Get class name.
    getClassName() - Method in class org.apache.struts.config.PlugInConfig
     
    getCollection() - Method in class org.apache.struts.taglib.logic.IterateTag
     
    getCollection() - Method in class org.apache.struts.taglib.html.OptionsTag
     
    getCollection() - Method in class org.apache.struts.taglib.bean.SizeTag
     
    getCols() - Method in class org.apache.struts.taglib.html.BaseInputTag
    Return the number of columns for this field.
    getComponentDefinition(String, PageContext) - Static method in class org.apache.struts.taglib.tiles.util.TagUtils
    Get component definition by its name.
    getConfig() - Method in class org.apache.struts.util.MessageResources
    The configuration parameter used to initialize this MessageResources.
    getConfig() - Method in interface org.apache.struts.tiles.DefinitionsFactory
    Get factory configuration.
    getConfig() - Method in class org.apache.struts.tiles.definition.ComponentDefinitionsFactoryWrapper
    Get underlying factory configuration.
    getConfigured() - Method in interface org.apache.struts.config.ModuleConfig
    Has this module been completely configured yet.
    getConfigured() - Method in class org.apache.struts.config.impl.ModuleConfigImpl
    Has this module been completely configured yet.
    getContent() - Method in class org.apache.struts.taglib.tiles.PutTag
    Get content.
    getContent() - Method in class org.apache.struts.taglib.template.PutTag
    Deprecated. Use Tiles instead.
    getContent() - Method in class org.apache.struts.taglib.template.util.Content
    Deprecated. Use Tiles instead.
    getContentLength() - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    getContentMap() - Method in class org.apache.struts.taglib.template.InsertTag
    Deprecated. Use Tiles instead.
    getContentType() - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    getContentType() - Method in class org.apache.struts.upload.DiskFile
    Get the content type
    getContentType() - Method in class org.apache.struts.upload.CommonsMultipartRequestHandler.CommonsFormFile
    Returns the content type for this file.
    getContentType() - Method in interface org.apache.struts.upload.FormFile
    Returns the content type for this file.
    getContentType() - Method in class org.apache.struts.upload.MultipartElement
    Retrieve the content type.
    getContentType() - Method in class org.apache.struts.config.ControllerConfig
     
    getContentTypeOfRequest() - Method in class org.apache.struts.upload.MultipartIterator
    Gets the value of the Content-Type header of the request.
    getContext(ServletRequest) - Static method in class org.apache.struts.tiles.ComponentContext
    Get component context from request.
    getContextPath() - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    getContextRelative() - Method in class org.apache.struts.config.ForwardConfig
     
    getController() - Method in class org.apache.struts.tiles.ComponentDefinition
    Get associated controller local URL.
    getController() - Method in class org.apache.struts.taglib.tiles.InsertTag
    Get instantiated Controller.
    getControllerConfig() - Method in interface org.apache.struts.config.ModuleConfig
    The controller configuration object for this module.
    getControllerConfig() - Method in class org.apache.struts.config.impl.ModuleConfigImpl
    The controller configuration object for this module.
    getControllerInstance() - Method in class org.apache.struts.tiles.ComponentDefinition
    Get controller instance.
    getControllerName() - Method in class org.apache.struts.taglib.tiles.DefinitionTagSupport
    Get controller name.
    getControllerType() - Method in class org.apache.struts.tiles.ComponentDefinition
    Get associated controller type.
    getControllerType() - Method in class org.apache.struts.taglib.tiles.DefinitionTagSupport
    Get controller type.
    getCookie() - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
     
    getCookies() - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    getCurrentContext() - Method in class org.apache.struts.taglib.tiles.InsertTag
    Get current component context.
    getCurrentLocale() - Method in class org.apache.struts.taglib.html.HtmlTag
    Return the current Locale for this request.
    getCurrentName(HttpServletRequest, NestedNameSupport) - Static method in class org.apache.struts.taglib.nested.NestedPropertyHelper
    Returns the bean name from the request object that the properties are nesting against.
    getCurrentProperty(HttpServletRequest) - Static method in class org.apache.struts.taglib.nested.NestedPropertyHelper
    Returns the current nesting property from the request object.
    getData() - Method in class org.apache.struts.upload.MultipartElement
    Deprecated. Use the getFile method to get a File representing the data for this element
    getDataSource() - Method in class org.apache.struts.config.ConfigHelper
    The strong>default configured data source (which must implement javax.sql.DataSource), if one is configured for this application.
    getDataSource() - Method in interface org.apache.struts.config.ConfigHelperInterface
     
    getDataSource(HttpServletRequest) - Method in class org.apache.struts.action.Action
    Return the default data source for the current module.
    getDataSource(HttpServletRequest, String) - Method in class org.apache.struts.action.Action
    Return the specified data source for the current module.
    getDateHeader(String) - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    getDebug() - Method in class org.apache.struts.config.ControllerConfig
     
    getDebug() - Method in class org.apache.struts.action.ActionServlet
    Deprecated. Configure the logging detail level in your underlying logging implementation
    getDebug() - Method in class org.apache.struts.action.RequestProcessor
    Deprecated. Configure the logging detail level in your underlying logging implementation
    getDebugLevel() - Method in class org.apache.struts.tiles.DefinitionsFactoryConfig
    Deprecated. Use commons-logging mechanism.
    getDefaultFactory() - Method in class org.apache.struts.tiles.xmlDefinition.I18nFactorySet
    Get default factory.
    getDefaultFactory() - Method in class org.apache.struts.tiles.xmlDefinition.FactorySet
    Get default factory.
    getDefinition(String) - Method in class org.apache.struts.tiles.xmlDefinition.XmlDefinitionsSet
    Get requested definition.
    getDefinition(String, PageContext) - Static method in class org.apache.struts.tiles.DefinitionsUtil
    Deprecated. Use TilesUtil.getDefinition(String, ServletRequest, ServletContext)
    getDefinition(String, ServletRequest, ServletContext) - Static method in class org.apache.struts.tiles.TilesUtil
    Get a definition by its name.
    getDefinition(String, ServletRequest, ServletContext) - Method in interface org.apache.struts.tiles.ComponentDefinitionsFactory
    Deprecated. Get a definition by its name.
    getDefinition(String, ServletRequest, ServletContext) - Method in interface org.apache.struts.tiles.DefinitionsFactory
    Get a definition by its name.
    getDefinition(String, ServletRequest, ServletContext) - Method in class org.apache.struts.tiles.xmlDefinition.FactorySet
    Get a definition by its name.
    getDefinition(String, ServletRequest, ServletContext) - Method in class org.apache.struts.tiles.xmlDefinition.DefinitionsFactory
    Get a definition by its name.
    getDefinition(String, ServletRequest, ServletContext) - Method in class org.apache.struts.tiles.definition.ComponentDefinitionsFactoryWrapper
    Get requested definition.
    getDefinition(String, ServletRequest, ServletContext) - Method in class org.apache.struts.tiles.definition.ReloadableDefinitionsFactory
    Get a definition by its name.
    getDefinitionConfigFiles() - Method in class org.apache.struts.tiles.DefinitionsFactoryConfig
    Get the definition config files.
    getDefinitionName() - Method in class org.apache.struts.taglib.tiles.InsertTag
    Get definition name.
    getDefinitions() - Method in class org.apache.struts.tiles.xmlDefinition.XmlDefinitionsSet
    Get definitions map.
    getDefinitionsFactory() - Method in class org.apache.struts.tiles.TilesRequestProcessor
    Get associated definition factory.
    getDefinitionsFactory(ServletContext) - Static method in class org.apache.struts.tiles.DefinitionsUtil
    Deprecated. Use TilesUtil.getDefinitionsFactory(ServletRequest, ServletContext)
    getDefinitionsFactory(ServletContext, ModuleConfig) - Method in class org.apache.struts.tiles.TilesUtilStrutsModulesImpl
    Get definition factory for the module attached to specified moduleConfig.
    getDefinitionsFactory(ServletContext, ModuleConfig) - Method in class org.apache.struts.tiles.TilesUtilStrutsImpl
    Get definition factory for the module attached to the specified moduleConfig.
    getDefinitionsFactory(ServletRequest, ServletContext) - Static method in class org.apache.struts.tiles.TilesUtil
    Get definition factory from appropriate servlet context.
    getDefinitionsFactory(ServletRequest, ServletContext) - Method in class org.apache.struts.tiles.TilesUtilImpl
    Get definition factory from appropriate servlet context.
    getDefinitionsFactory(ServletRequest, ServletContext) - Method in class org.apache.struts.tiles.TilesUtilStrutsModulesImpl
    Get the definition factory from appropriate servlet context.
    getDefinitionsFactoryKey(String, ServletRequest, ServletContext) - Method in class org.apache.struts.tiles.xmlDefinition.I18nFactorySet
    Extract key that will be used to get the sub factory.
    getDefinitionsFactoryKey(String, ServletRequest, ServletContext) - Method in class org.apache.struts.tiles.xmlDefinition.FactorySet
    Extract key that will be used to get the sub factory.
    getDirect() - Method in class org.apache.struts.taglib.template.PutTag
    Deprecated. Use Tiles instead.
    getDisabled() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Returns the disabled event handler.
    getDisabled() - Method in class org.apache.struts.taglib.html.OptionTag
     
    getDynaClass() - Method in class org.apache.struts.action.DynaActionForm
    Return the DynaClass instance that describes the set of properties available for this DynaBean.
    getDynamic() - Method in class org.apache.struts.config.FormBeanConfig
     
    getDynamicJavascript() - Method in class org.apache.struts.taglib.html.JavascriptValidatorTag
    Gets whether or not to generate the dynamic JavaScript.
    getDynaProperties() - Method in class org.apache.struts.action.DynaActionFormClass
    Return an array of DynaPropertys for the properties currently defined in this DynaClass.
    getDynaProperty(String) - Method in class org.apache.struts.action.DynaActionForm
    Return the property descriptor for the specified property name.
    getDynaProperty(String) - Method in class org.apache.struts.action.DynaActionFormClass
    Return a property descriptor for the specified property, if it exists; otherwise, return null.
    getElementCharset() - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
    Gets the character encoding of the current element.
    getElementClose() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Returns the closing brace for an input element depending on xhtml status.
    getElementContentDisposition() - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
    Gets the value for the "Content-Dispositio" header for the current multipart element.
    getElementContentType() - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
    Gets the "Content-Type" of the current element.
    getElementEncoding() - Method in class org.apache.struts.upload.MultipartIterator
    Get the character encoding used for this current multipart element.
    getElementFileName() - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
    Gets the filename of the current element, which will be null if the current element isn't a file.
    getElementName() - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
    Gets the name of the current element.
    getEncodeURL(String) - Method in class org.apache.struts.config.ConfigHelper
    Return the url encoded to maintain the user session, if any.
    getEncodeURL(String) - Method in interface org.apache.struts.config.ConfigHelperInterface
    Return the url encoded to maintain the user session, if any.
    getEnctype() - Method in class org.apache.struts.taglib.html.FormTag
    Return the content encoding used when submitting this form.
    getError() - Method in class org.apache.struts.util.ModuleException
    Returns the error associated with the exception.
    getError() - Method in class org.apache.struts.action.ActionException
    Deprecated. Returns an instance of an ActionError configured for this exception.
    getError(int) - Method in class org.apache.struts.util.ErrorMessages
    Deprecated. Return the error message key at the specified zero-relative index.
    getErrorOutput() - Method in class org.apache.struts.config.ConfigHelper
    Wrapper for getErrorMarkup(null)
    getErrorOutput() - Method in interface org.apache.struts.config.ConfigHelperInterface
    Returns the errors.header, any errors, and the errors.footer.
    getErrorOutput(String) - Method in class org.apache.struts.config.ConfigHelper
    Returns the errors.header, any errors, and the errors.footer.
    getErrorOutput(String) - Method in interface org.apache.struts.config.ConfigHelperInterface
    Returns the errors.header, any errors, and the errors.footer.
    getErrors() - Method in class org.apache.struts.util.ErrorMessages
    Deprecated. Return the set of error message keys we have accumulated.
    getErrors() - Method in class org.apache.struts.config.ConfigHelper
    Return the error messages
    getErrors() - Method in interface org.apache.struts.config.ConfigHelperInterface
    Return the error messages
    getErrors(String) - Method in class org.apache.struts.config.ConfigHelper
    Return an ActionError for a property
    getErrors(String) - Method in interface org.apache.struts.config.ConfigHelperInterface
    Return an ActionError for a property
    getErrorsEmpty() - Method in class org.apache.struts.config.ConfigHelper
    Return true if there are no errors queued
    getErrorsEmpty() - Method in interface org.apache.struts.config.ConfigHelperInterface
    Return true if there are no errors queued
    getErrorSize() - Method in class org.apache.struts.config.ConfigHelper
    Return the number of error messages.
    getErrorSize() - Method in interface org.apache.struts.config.ConfigHelperInterface
    Return the number of error messages.
    getErrorSize(String) - Method in class org.apache.struts.config.ConfigHelper
    Return the number of error messages.
    getErrorSize(String) - Method in interface org.apache.struts.config.ConfigHelperInterface
    Return the number of error messages.
    getException() - Method in class org.apache.struts.tiles.DefinitionsFactoryException
    Return the embedded exception, if any.
    getException() - Method in class org.apache.struts.tiles.TilesException
    Return the embedded exception, if any.
    getException() - Method in class org.apache.struts.config.ConfigHelper
    The runtime JspException that may be been thrown by a Struts tag extension, or compatible presentation extension, and placed in the request.
    getException() - Method in interface org.apache.struts.config.ConfigHelperInterface
    The runtime JspException that may be been thrown by a Struts tag extension, or compatible presentation extension, and placed in the request.
    getExtends() - Method in class org.apache.struts.tiles.xmlDefinition.XmlDefinition
    Get extends.
    getExtends() - Method in class org.apache.struts.taglib.tiles.DefinitionTag
    Get extends (parent) definition name.
    getFactory() - Method in class org.apache.struts.util.MessageResources
    The MessageResourcesFactory that created this instance.
    getFactory() - Method in class org.apache.struts.tiles.definition.ReloadableDefinitionsFactory
    Get underlying factory instance.
    getFactory() - Method in class org.apache.struts.config.MessageResourcesConfig
     
    getFactory(Object, ServletRequest, ServletContext) - Method in class org.apache.struts.tiles.xmlDefinition.FactorySet
    Get a factory by its key.
    getFactoryClass() - Static method in class org.apache.struts.util.MessageResourcesFactory
    The fully qualified class name that is used for MessageResourcesFactory instances.
    getFactoryClass() - Static method in class org.apache.struts.config.ModuleConfigFactory
    The fully qualified class name that is used for ModuleConfigFactory instances.
    getFactoryClassname() - Method in class org.apache.struts.tiles.DefinitionsFactoryConfig
    Get the classname of the factory.
    getFactoryName() - Method in class org.apache.struts.tiles.DefinitionsFactoryConfig
    Get the factory name.
    getFast() - Method in class org.apache.struts.action.ActionForwards
    Deprecated. Return the "fast" mode flag.
    getFast() - Method in class org.apache.struts.action.ActionFormBeans
    Deprecated. Return the "fast" mode flag.
    getFast() - Method in class org.apache.struts.action.ActionMappings
    Deprecated. Return the "fast" mode flag.
    getFile() - Method in class org.apache.struts.upload.MultipartElement
    Get the File that holds the data for this element.
    getFileData() - Method in class org.apache.struts.upload.DiskFile
    Attempt to read the temporary file and get it's data in byte array form.
    getFileData() - Method in class org.apache.struts.upload.CommonsMultipartRequestHandler.CommonsFormFile
    Returns the data for this file as a byte array.
    getFileData() - Method in interface org.apache.struts.upload.FormFile
    Returns the data for the entire file as byte array.
    getFileData(int) - Method in class org.apache.struts.upload.DiskFile
    Attempts to read a file n bytes at a time, n being equal to "bufferSize".
    getFileElements() - Method in interface org.apache.struts.upload.MultipartRequestHandler
    This method is called on to retrieve all the FormFile input elements of the request.
    getFileElements() - Method in class org.apache.struts.upload.CommonsMultipartRequestHandler
    Returns a hash table containing the file (that is, non-text) request parameters.
    getFileElements() - Method in class org.apache.struts.upload.DiskMultipartRequestHandler
     
    getFileName() - Method in class org.apache.struts.upload.DiskFile
    Get the file name
    getFileName() - Method in class org.apache.struts.upload.CommonsMultipartRequestHandler.CommonsFormFile
    Returns the (client-side) file name for this file.
    getFileName() - Method in interface org.apache.struts.upload.FormFile
    Returns the file name of this file.
    getFileName() - Method in class org.apache.struts.upload.MultipartElement
    Retrieve the filename, can return null for text elements.
    getFilePath() - Method in class org.apache.struts.upload.DiskFile
    Get the temporary file path for this form file
    getFileSize() - Method in class org.apache.struts.upload.DiskFile
    Get the file size
    getFileSize() - Method in class org.apache.struts.upload.CommonsMultipartRequestHandler.CommonsFormFile
    Returns the size, in bytes, of this file.
    getFileSize() - Method in interface org.apache.struts.upload.FormFile
    Returns the size of this file.
    getFilter() - Method in class org.apache.struts.taglib.nested.NestedWriteNestingTag
    Getter method for the filter property
    getFilter() - Method in class org.apache.struts.taglib.html.OptionsTag
     
    getFilter() - Method in class org.apache.struts.taglib.html.OptionsCollectionTag
     
    getFilter() - Method in class org.apache.struts.taglib.bean.WriteTag
     
    getFlush() - Method in class org.apache.struts.taglib.tiles.InsertTag
    Get flush.
    getFlush() - Method in class org.apache.struts.taglib.template.GetTag
    Deprecated. Use Tiles instead.
    getFocus() - Method in class org.apache.struts.taglib.html.FormTag
    Return the focus field name for this form.
    getFocusIndex() - Method in class org.apache.struts.taglib.html.FormTag
    Returns the focusIndex.
    getFooter() - Method in class org.apache.struts.taglib.html.MessagesTag
     
    getFormat() - Method in class org.apache.struts.taglib.bean.WriteTag
     
    getFormatKey() - Method in class org.apache.struts.taglib.bean.WriteTag
     
    getFormBean() - Method in class org.apache.struts.taglib.bean.StrutsTag
     
    getFormBean(String) - Method in class org.apache.struts.config.ConfigHelper
    Return the form bean definition associated with the specified logical name, if any; otherwise return null.
    getFormBean(String) - Method in interface org.apache.struts.config.ConfigHelperInterface
    Return the form bean definition associated with the specified logical name, if any; otherwise return null.
    getFormName() - Method in class org.apache.struts.taglib.html.JavascriptValidatorTag
    Gets the key (form name) that will be used to retrieve a set of validation rules to be performed on the bean passed in for validation.
    getForward() - Method in class org.apache.struts.taglib.logic.RedirectTag
     
    getForward() - Method in class org.apache.struts.taglib.html.LinkTag
     
    getForward() - Method in class org.apache.struts.taglib.bean.IncludeTag
     
    getForward() - Method in class org.apache.struts.taglib.bean.StrutsTag
     
    getForward() - Method in class org.apache.struts.config.ActionConfig
    Returns context-relative path of the web application resource that will process this request.
    getForwardPattern() - Method in class org.apache.struts.config.ControllerConfig
     
    getFrameborder() - Method in class org.apache.struts.taglib.html.FrameTag
     
    getFrameName() - Method in class org.apache.struts.taglib.html.FrameTag
     
    getHandler() - Method in class org.apache.struts.config.ExceptionConfig
     
    getHeader() - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
     
    getHeader() - Method in class org.apache.struts.taglib.html.MessagesTag
     
    getHeader(String) - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    getHeaderNames() - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    getHeaders(String) - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    getHeight() - Method in class org.apache.struts.taglib.html.ImgTag
     
    getHref() - Method in class org.apache.struts.taglib.logic.RedirectTag
     
    getHref() - Method in class org.apache.struts.taglib.html.LinkTag
     
    getHref() - Method in class org.apache.struts.taglib.bean.IncludeTag
     
    getHspace() - Method in class org.apache.struts.taglib.html.ImgTag
     
    getHtmlComment() - Method in class org.apache.struts.taglib.html.JavascriptValidatorTag
    Gets whether or not to delimit the JavaScript with html comments.
    getIcon() - Method in class org.apache.struts.tiles.beans.SimpleMenuItem
    Get icon property.
    getIcon() - Method in interface org.apache.struts.tiles.beans.MenuItem
    Get icon property.
    getId() - Method in class org.apache.struts.taglib.tiles.DefinitionTag
    Get the ID.
    getId() - Method in class org.apache.struts.taglib.logic.IterateTag
     
    getId() - Method in class org.apache.struts.taglib.html.MessagesTag
     
    getId() - Method in class org.apache.struts.taglib.bean.DefineTag
     
    getId() - Method in class org.apache.struts.taglib.bean.IncludeTag
     
    getId() - Method in class org.apache.struts.taglib.bean.StrutsTag
     
    getId() - Method in class org.apache.struts.taglib.bean.SizeTag
     
    getId() - Method in class org.apache.struts.taglib.bean.ResourceTag
     
    getId() - Method in class org.apache.struts.taglib.bean.ParameterTag
     
    getId() - Method in class org.apache.struts.taglib.bean.PageTag
     
    getId() - Method in class org.apache.struts.taglib.bean.HeaderTag
     
    getId() - Method in class org.apache.struts.taglib.bean.CookieTag
     
    getIdName() - Method in class org.apache.struts.taglib.html.RadioTag
    Return the idName.
    getIgnore() - Method in class org.apache.struts.taglib.tiles.GetAttributeTag
    Get ignore flag.
    getIgnore() - Method in class org.apache.struts.taglib.tiles.ImportAttributeTag
    Get ignore flag.
    getIgnore() - Method in class org.apache.struts.taglib.tiles.UseAttributeTag
    Get ignore.
    getIgnore() - Method in class org.apache.struts.taglib.tiles.InsertTag
    Get ignore.
    getIgnore() - Method in class org.apache.struts.taglib.bean.WriteTag
     
    getImageName() - Method in class org.apache.struts.taglib.html.ImgTag
     
    getInclude() - Method in class org.apache.struts.config.ActionConfig
    Context-relative path of the web application resource that will process this request.
    getIndex() - Method in class org.apache.struts.taglib.logic.IterateTag
    Return the zero-relative index of the current iteration through the loop.
    getIndexed() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Returns the indexed value.
    getIndexId() - Method in class org.apache.struts.taglib.logic.IterateTag
     
    getIndexId() - Method in class org.apache.struts.taglib.html.LinkTag
     
    getInitial() - Method in class org.apache.struts.config.FormPropertyConfig
     
    getInput() - Method in class org.apache.struts.taglib.bean.ResourceTag
     
    getInput() - Method in class org.apache.struts.config.ActionConfig
    Get the context-relative path of the input form to which control should be returned if a validation error is encountered.
    getInputForward() - Method in class org.apache.struts.config.ControllerConfig
     
    getInputForward() - Method in class org.apache.struts.action.ActionMapping
    Create (if necessary) and return an ActionForward that corresponds to the input property of this Action.
    getInputStream() - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    getInputStream() - Method in class org.apache.struts.upload.DiskFile
    Returns a FileInputStream to the file
    getInputStream() - Method in class org.apache.struts.upload.CommonsMultipartRequestHandler.CommonsFormFile
    Get an InputStream that represents this file.
    getInputStream() - Method in interface org.apache.struts.upload.FormFile
    Returns an input stream for this file.
    getInstance() - Static method in class org.apache.struts.util.TokenProcessor
    Retrieves the singleton instance of this class.
    getInternal() - Method in class org.apache.struts.action.ActionServlet
    Return the MessageResources instance containing our internal message strings.
    getInternal() - Method in class org.apache.struts.action.RequestProcessor
    Return the MessageResources instance containing our internal message strings.
    getInternalFactory() - Method in class org.apache.struts.tiles.definition.ComponentDefinitionsFactoryWrapper
    Get internal factory.
    getIntHeader(String) - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    getIsmap() - Method in class org.apache.struts.taglib.html.ImgTag
     
    getIterator(Object) - Method in class org.apache.struts.taglib.html.OptionsCollectionTag
    Return an iterator for the options collection.
    getIterator(String, String) - Method in class org.apache.struts.taglib.html.OptionsTag
    Return an iterator for the option labels or values, based on our configured properties.
    getJavascriptBegin(String) - Method in class org.apache.struts.taglib.html.JavascriptValidatorTag
    Returns the opening script element and some initial javascript.
    getJavascriptEnd() - Method in class org.apache.struts.taglib.html.JavascriptValidatorTag
    Returns the closing script element.
    getJavascriptStaticMethods(ValidatorResources) - Method in class org.apache.struts.taglib.html.JavascriptValidatorTag
     
    getJstlLoopIndex() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
     
    getKey() - Method in class org.apache.struts.taglib.html.OptionTag
     
    getKey() - Method in class org.apache.struts.taglib.bean.MessageTag
     
    getKey() - Method in class org.apache.struts.config.ExceptionConfig
     
    getKey() - Method in class org.apache.struts.config.MessageResourcesConfig
     
    getKey() - Method in class org.apache.struts.config.DataSourceConfig
     
    getKey() - Method in class org.apache.struts.action.ActionMessage
    Get the message key for this message.
    getKeyMethodMap() - Method in class org.apache.struts.actions.LookupDispatchAction
    Provides the mapping from resource key to method name.
    getLabel() - Method in class org.apache.struts.util.LabelValueBean
     
    getLabel() - Method in class org.apache.struts.taglib.html.OptionsCollectionTag
     
    getLabelName() - Method in class org.apache.struts.taglib.html.OptionsTag
     
    getLabelProperty() - Method in class org.apache.struts.taglib.html.OptionsTag
     
    getLength() - Method in class org.apache.struts.taglib.logic.IterateTag
     
    getLink() - Method in class org.apache.struts.tiles.beans.SimpleMenuItem
    Get link property.
    getLink() - Method in interface org.apache.struts.tiles.beans.MenuItem
    Get link property.
    getLink(String) - Method in class org.apache.struts.config.ConfigHelper
    Return the path for the specified forward, otherwise return null.
    getLink(String) - Method in interface org.apache.struts.config.ConfigHelperInterface
    Return the path for the specified forward, otherwise return null.
    getLinkName() - Method in class org.apache.struts.taglib.html.LinkTag
     
    getList() - Method in class org.apache.struts.taglib.tiles.PutListTag
    Get list defined in tag.
    getList() - Method in class org.apache.struts.action.ActionMessages.ActionMessageItem
     
    getLocale() - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    getLocale() - Method in class org.apache.struts.taglib.html.ErrorsTag
     
    getLocale() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Returns the name of the session attribute for our locale.
    getLocale() - Method in class org.apache.struts.taglib.html.MessagesTag
     
    getLocale() - Method in class org.apache.struts.taglib.html.HtmlTag
     
    getLocale() - Method in class org.apache.struts.taglib.html.OptionTag
     
    getLocale() - Method in class org.apache.struts.taglib.bean.MessageTag
     
    getLocale() - Method in class org.apache.struts.taglib.bean.WriteTag
     
    getLocale() - Method in class org.apache.struts.config.ConfigHelper
    The java.util.Locale for the user, if any.
    getLocale() - Method in class org.apache.struts.config.ControllerConfig
     
    getLocale() - Method in interface org.apache.struts.config.ConfigHelperInterface
    The java.util.Locale for the user, if any.
    getLocale(HttpServletRequest) - Static method in class org.apache.struts.validator.Resources
    Get the Locale of the current user.
    getLocale(HttpServletRequest) - Static method in class org.apache.struts.util.StrutsValidatorUtil
    Deprecated. Get the Locale of the current user.
    getLocale(HttpServletRequest) - Method in class org.apache.struts.action.Action
    Return the user's currently selected Locale.
    getLocales() - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    getLocation() - Method in class org.apache.struts.taglib.logic.MatchTag
     
    getLongdesc() - Method in class org.apache.struts.taglib.html.FrameTag
     
    getLowsrc() - Method in class org.apache.struts.taglib.html.ImgTag
    Deprecated. This is not defined in the HTML 4.01 spec and will be removed in a future version of Struts.
    getMap() - Method in class org.apache.struts.action.DynaActionForm
    Returns the Map containing the property values.
    getMapping() - Method in interface org.apache.struts.upload.MultipartRequestHandler
    Get the ActionMapping instance for this request
    getMapping() - Method in class org.apache.struts.upload.CommonsMultipartRequestHandler
    Retrieves the action mapping with which this handler is associated.
    getMapping() - Method in class org.apache.struts.upload.DiskMultipartRequestHandler
     
    getMapping() - Method in class org.apache.struts.taglib.bean.StrutsTag
     
    getMapping() - Method in class org.apache.struts.config.ConfigHelper
    The org.apache.struts.ActionMapping instance for this request.
    getMapping() - Method in interface org.apache.struts.config.ConfigHelperInterface
    The org.apache.struts.ActionMapping instance for this request.
    getMarginheight() - Method in class org.apache.struts.taglib.html.FrameTag
     
    getMarginwidth() - Method in class org.apache.struts.taglib.html.FrameTag
     
    getMaxFileSize() - Method in class org.apache.struts.config.ControllerConfig
     
    getMaxlength() - Method in class org.apache.struts.taglib.html.BaseInputTag
    Return the maximum length allowed.
    getMaxLength() - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    getMaxSize() - Method in class org.apache.struts.upload.MultipartIterator
    Get the maximum post data size allowed for a multipart request
    getMaxSize(String) - Method in class org.apache.struts.upload.DiskMultipartRequestHandler
    Gets the maximum post data size in bytes from the string representation in the configuration file.
    getMemFileSize() - Method in class org.apache.struts.config.ControllerConfig
     
    getMessage() - Method in class org.apache.struts.upload.MaxLengthExceededException
     
    getMessage() - Method in class org.apache.struts.upload.ContentLengthExceededException
     
    getMessage() - Method in class org.apache.struts.tiles.DefinitionsFactoryException
    Return a detail message for this exception.
    getMessage() - Method in class org.apache.struts.tiles.TilesException
    Return a detail message for this exception.
    getMessage() - Method in class org.apache.struts.taglib.logic.MessagesPresentTag
     
    getMessage() - Method in class org.apache.struts.taglib.html.MessagesTag
     
    getMessage(HttpServletRequest, String) - Static method in class org.apache.struts.validator.Resources
    Gets the Locale sensitive value based on the key passed in.
    getMessage(HttpServletRequest, String) - Static method in class org.apache.struts.util.StrutsValidatorUtil
    Deprecated. Gets the Locale sensitive value based on the key passed in.
    getMessage(Locale, String) - Method in class org.apache.struts.util.PropertyMessageResources
    Returns a text message for the specified key, for the default Locale.
    getMessage(Locale, String) - Method in class org.apache.struts.util.MessageResources
    Returns a text message for the specified key, for the default Locale.
    getMessage(Locale, String, Object) - Method in class org.apache.struts.util.MessageResources
    Returns a text message after parametric replacement of the specified parameter placeholders.
    getMessage(Locale, String, Object[]) - Method in class org.apache.struts.util.MessageResources
    Returns a text message after parametric replacement of the specified parameter placeholders.
    getMessage(Locale, String, Object, Object) - Method in class org.apache.struts.util.MessageResources
    Returns a text message after parametric replacement of the specified parameter placeholders.
    getMessage(Locale, String, Object, Object, Object) - Method in class org.apache.struts.util.MessageResources
    Returns a text message after parametric replacement of the specified parameter placeholders.
    getMessage(Locale, String, Object, Object, Object, Object) - Method in class org.apache.struts.util.MessageResources
    Returns a text message after parametric replacement of the specified parameter placeholders.
    getMessage(MessageResources, Locale, String) - Static method in class org.apache.struts.validator.Resources
    Gets the Locale sensitive value based on the key passed in.
    getMessage(MessageResources, Locale, String) - Static method in class org.apache.struts.util.StrutsValidatorUtil
    Deprecated. Gets the Locale sensitive value based on the key passed in.
    getMessage(MessageResources, Locale, ValidatorAction, Field) - Static method in class org.apache.struts.validator.Resources
    Gets the locale sensitive message based on the ValidatorAction message and the Field's arg objects.
    getMessage(MessageResources, Locale, ValidatorAction, Field) - Static method in class org.apache.struts.util.StrutsValidatorUtil
    Deprecated. As of Struts 1.1, replaced by Resources.getMessage(MessageResources, Locale, ValidatorAction , Field)
    getMessage(String) - Method in class org.apache.struts.util.MessageResources
    Returns a text message for the specified key, for the default Locale.
    getMessage(String) - Method in class org.apache.struts.config.ConfigHelper
    Return the localized message for the specified key, otherwise return null.
    getMessage(String) - Method in interface org.apache.struts.config.ConfigHelperInterface
    Return the localized message for the specified key, otherwise return null.
    getMessage(String, Object) - Method in class org.apache.struts.util.MessageResources
    Returns a text message after parametric replacement of the specified parameter placeholders.
    getMessage(String, Object[]) - Method in class org.apache.struts.util.MessageResources
    Returns a text message after parametric replacement of the specified parameter placeholders.
    getMessage(String, Object[]) - Method in class org.apache.struts.config.ConfigHelper
    Look up and return a message string, based on the specified parameters.
    getMessage(String, Object[]) - Method in interface org.apache.struts.config.ConfigHelperInterface
    Look up and return a message string, based on the specified parameters.
    getMessage(String, Object, Object) - Method in class org.apache.struts.util.MessageResources
    Returns a text message after parametric replacement of the specified parameter placeholders.
    getMessage(String, Object, Object, Object) - Method in class org.apache.struts.util.MessageResources
    Returns a text message after parametric replacement of the specified parameter placeholders.
    getMessage(String, Object, Object, Object, Object) - Method in class org.apache.struts.util.MessageResources
    Returns a text message after parametric replacement of the specified parameter placeholders.
    getMessageResources() - Method in class org.apache.struts.config.ConfigHelper
    The application resources for this application.
    getMessageResources() - Method in interface org.apache.struts.config.ConfigHelperInterface
    The application resources for this application.
    getMessageResources(HttpServletRequest) - Static method in class org.apache.struts.validator.Resources
    Retrieve MessageResources for the module.
    getMessageResources(HttpServletRequest) - Static method in class org.apache.struts.util.StrutsValidatorUtil
    Deprecated. Retrieve MessageResources for the application module.
    getMessageResources(ServletContext) - Static method in class org.apache.struts.validator.Resources
    Deprecated. This method can only return the resources for the default module. Use getMessageResources(HttpServletRequest) to get the resources for the current module.
    getMessageResources(ServletContext) - Static method in class org.apache.struts.util.StrutsValidatorUtil
    Deprecated. This method can only return the resources for the default module. Use getMessageResources(HttpServletRequest) to get the resources for the current application module.
    getMessageResources(String) - Static method in class org.apache.struts.util.MessageResources
    Create and return an instance of MessageResources for the created by the default MessageResourcesFactory.
    getMethod() - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    getMethod() - Method in class org.apache.struts.taglib.html.JavascriptValidatorTag
    Gets the method name that will be used for the Javascript validation method name if it has a value.
    getMethod() - Method in class org.apache.struts.taglib.html.FormTag
    Return the request method used when submitting this form.
    getMethod(String) - Method in class org.apache.struts.actions.DispatchAction
    Introspect the current class to identify a method of the specified name that accepts the same parameter types as the execute method does.
    getModuleConfig() - Method in class org.apache.struts.config.FormBeanConfig
    Return the ModuleConfig with which this form bean definition is associated.
    getModuleConfig() - Method in class org.apache.struts.config.ActionConfig
    The module configuration with which we are associated.
    getModuleConfig(HttpServletRequest) - Method in class org.apache.struts.action.ActionServlet
    Return the module configuration object for the currently selected module.
    getModuleConfig(HttpServletRequest, ServletContext) - Static method in class org.apache.struts.util.RequestUtils
    Return the ModuleConfig object is it exists, null otherwise.
    getModuleConfig(HttpServletRequest, ServletContext) - Method in class org.apache.struts.tiles.TilesUtilStrutsModulesImpl
    Get the current ModuleConfig.
    getModuleConfig(PageContext) - Static method in class org.apache.struts.util.RequestUtils
    Return the ModuleConfig object if it exists, null if otherwise.
    getModuleName(HttpServletRequest, ServletContext) - Static method in class org.apache.struts.util.RequestUtils
    Get the module name to which the specified request belong.
    getModuleName(String, ServletContext) - Static method in class org.apache.struts.util.RequestUtils
    Get the module name to which the specified uri belong.
    getModulePrefixes(ServletContext) - Static method in class org.apache.struts.util.RequestUtils
    Return the list of module prefixes that are defined for this web application, creating it if necessary.
    getMultipartClass() - Method in class org.apache.struts.config.ActionConfig
    Return the fully qualified Java class name of the MultipartRequestHandler implementation class used to process multi-part request data for this Action.
    getMultipartClass() - Method in class org.apache.struts.config.ControllerConfig
     
    getMultipartHandler(HttpServletRequest) - Static method in class org.apache.struts.util.RequestUtils
    Try to locate a multipart request handler for this request.
    getMultipartRequestHandler() - Method in class org.apache.struts.action.ActionForm
    Return the MultipartRequestHandler for this form The reasoning behind this is to give form bean developers control over the lifecycle of their multipart requests through the use of the finish() and/or rollback() methods of MultipartRequestHandler.
    getMultipartRequestWrapper() - Method in class org.apache.struts.config.ConfigHelper
    The multipart object for this request.
    getMultipartRequestWrapper() - Method in interface org.apache.struts.config.ConfigHelperInterface
    The multipart object for this request.
    getMultiple() - Method in class org.apache.struts.taglib.html.SelectTag
     
    getMultiple() - Method in class org.apache.struts.taglib.bean.ParameterTag
     
    getMultiple() - Method in class org.apache.struts.taglib.bean.HeaderTag
     
    getMultiple() - Method in class org.apache.struts.taglib.bean.CookieTag
     
    getName() - Method in class org.apache.struts.upload.MultipartElement
    Retrieve the name.
    getName() - Method in class org.apache.struts.tiles.ComponentDefinition
    Access method for the name property.
    getName() - Method in class org.apache.struts.tiles.xmlDefinition.XmlAttribute
    Access method for the name property.
    getName() - Method in class org.apache.struts.taglib.tiles.PutListTag
    Get property.
    getName() - Method in class org.apache.struts.taglib.tiles.GetAttributeTag
    Get Name.
    getName() - Method in class org.apache.struts.taglib.tiles.PutTag
    Get name.
    getName() - Method in class org.apache.struts.taglib.tiles.ImportAttributeTag
    Get the name.
    getName() - Method in class org.apache.struts.taglib.tiles.UseAttributeTag
    Get name.
    getName() - Method in class org.apache.struts.taglib.tiles.InsertTag
    Get name.
    getName() - Method in class org.apache.struts.taglib.template.PutTag
    Deprecated. Use Tiles instead.
    getName() - Method in class org.apache.struts.taglib.template.GetTag
    Deprecated. Use Tiles instead.
    getName() - Method in class org.apache.struts.taglib.nested.NestedRootTag
    Getter method for the name property
    getName() - Method in class org.apache.struts.taglib.nested.NestedPropertyTag
     
    getName() - Method in interface org.apache.struts.taglib.nested.NestedNameSupport
    The getters and setters required to set a tags name property.
    getName() - Method in class org.apache.struts.taglib.logic.IterateTag
     
    getName() - Method in class org.apache.struts.taglib.logic.ForwardTag
     
    getName() - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
     
    getName() - Method in class org.apache.struts.taglib.logic.RedirectTag
     
    getName() - Method in class org.apache.struts.taglib.html.OptionsTag
     
    getName() - Method in class org.apache.struts.taglib.html.OptionsCollectionTag
     
    getName() - Method in class org.apache.struts.taglib.html.ErrorsTag
     
    getName() - Method in class org.apache.struts.taglib.html.LinkTag
     
    getName() - Method in class org.apache.struts.taglib.html.SelectTag
     
    getName() - Method in class org.apache.struts.taglib.html.TextareaTag
     
    getName() - Method in class org.apache.struts.taglib.html.MessagesTag
     
    getName() - Method in class org.apache.struts.taglib.html.BaseFieldTag
     
    getName() - Method in class org.apache.struts.taglib.html.MultiboxTag
     
    getName() - Method in class org.apache.struts.taglib.html.CheckboxTag
     
    getName() - Method in class org.apache.struts.taglib.html.ImgTag
     
    getName() - Method in class org.apache.struts.taglib.html.FormTag
    Return the attribute key name of our bean.
    getName() - Method in class org.apache.struts.taglib.html.RadioTag
     
    getName() - Method in class org.apache.struts.taglib.bean.DefineTag
     
    getName() - Method in class org.apache.struts.taglib.bean.MessageTag
     
    getName() - Method in class org.apache.struts.taglib.bean.WriteTag
     
    getName() - Method in class org.apache.struts.taglib.bean.SizeTag
     
    getName() - Method in class org.apache.struts.taglib.bean.ResourceTag
     
    getName() - Method in class org.apache.struts.taglib.bean.ParameterTag
     
    getName() - Method in class org.apache.struts.taglib.bean.HeaderTag
     
    getName() - Method in class org.apache.struts.taglib.bean.CookieTag
     
    getName() - Method in class org.apache.struts.config.FormBeanConfig
     
    getName() - Method in class org.apache.struts.config.ActionConfig
    Return name of the form bean, if any, associated with this Action.
    getName() - Method in class org.apache.struts.config.ForwardConfig
     
    getName() - Method in class org.apache.struts.config.FormPropertyConfig
     
    getName() - Method in class org.apache.struts.action.DynaActionFormClass
    Return the name of this DynaClass (analogous to the getName() method of java.lang.ClassDynaClass implementation class to support different dynamic classes, with different sets of properties.
    getNestedProperty() - Method in interface org.apache.struts.taglib.nested.NestedParentSupport
    This is required by all parent tags so that the child tags can get a hold of their nested property.
    getNestedProperty() - Method in class org.apache.struts.taglib.nested.NestedReference
    Getter for the nested property
    getNextElement() - Method in class org.apache.struts.upload.MultipartIterator
    Retrieves the next element in the iterator if one exists.
    getNextVar(String) - Method in class org.apache.struts.taglib.html.JavascriptValidatorTag
    The value null will be returned at the end of the sequence.
    getNocache() - Method in class org.apache.struts.config.ControllerConfig
     
    getNoresize() - Method in class org.apache.struts.taglib.html.FrameTag
     
    getNull() - Method in class org.apache.struts.config.MessageResourcesConfig
     
    getOffset() - Method in class org.apache.struts.taglib.logic.IterateTag
     
    getOnblur() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Returns the onBlur event handler.
    getOnchange() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Returns the onChange event handler.
    getOnclick() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Returns the onClick event handler.
    getOndblclick() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Returns the onDblClick event handler.
    getOnfocus() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Returns the onFocus event handler.
    getOnkeydown() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Returns the onKeyDown event handler.
    getOnkeypress() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Returns the onKeyPress event handler.
    getOnkeyup() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Returns the onKeyUp event handler.
    getOnmousedown() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Returns the onMouseDown event handler.
    getOnmousemove() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Returns the onMouseMove event handler.
    getOnmouseout() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Returns the onMouseOut event handler.
    getOnmouseover() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Returns the onMouseOver event handler.
    getOnmouseup() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Returns the onMouseUp event handler.
    getOnreset() - Method in class org.apache.struts.taglib.html.FormTag
    Return the onReset event script.
    getOnselect() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Returns the onSelect event handler.
    getOnsubmit() - Method in class org.apache.struts.taglib.html.FormTag
    Return the onSubmit event script.
    getOrCreateController() - Method in class org.apache.struts.tiles.ComponentDefinition
    Get or create controller.
    getOrder() - Method in class org.apache.struts.action.ActionMessages.ActionMessageItem
     
    getOrigRef() - Method in class org.apache.struts.config.ConfigHelper
    Renders the reference for a HTML element
    getOrigRef() - Method in interface org.apache.struts.config.ConfigHelperInterface
    Renders the reference for a HTML element
    getPage() - Method in class org.apache.struts.validator.ValidatorForm
    Gets page.
    getPage() - Method in class org.apache.struts.validator.DynaValidatorForm
    Gets page.
    getPage() - Method in class org.apache.struts.tiles.ComponentDefinition
    Access method for the path property.
    getPage() - Method in class org.apache.struts.taglib.tiles.DefinitionTagSupport
    Get the page.
    getPage() - Method in class org.apache.struts.taglib.logic.RedirectTag
     
    getPage() - Method in class org.apache.struts.taglib.html.JavascriptValidatorTag
    Gets the current page number of a multi-part form.
    getPage() - Method in class org.apache.struts.taglib.html.LinkTag
     
    getPage() - Method in class org.apache.struts.taglib.html.ImageTag
     
    getPage() - Method in class org.apache.struts.taglib.html.ImgTag
     
    getPage() - Method in class org.apache.struts.taglib.bean.IncludeTag
     
    getPageContext() - Method in class org.apache.struts.taglib.tiles.InsertTag
    Get the pageContext property.
    getPageKey() - Method in class org.apache.struts.taglib.html.ImageTag
     
    getPageKey() - Method in class org.apache.struts.taglib.html.ImgTag
     
    getPagePattern() - Method in class org.apache.struts.config.ControllerConfig
     
    getParameter() - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
     
    getParameter() - Method in class org.apache.struts.config.ActionConfig
    Return general purpose configuration parameter that can be used to pass extra information to the Action instance selected by this Action.
    getParameter() - Method in class org.apache.struts.config.MessageResourcesConfig
     
    getParameter(String) - Method in class org.apache.struts.upload.MultipartRequestWrapper
    Attempts to get a parameter for this request.
    getParameterMap() - Method in class org.apache.struts.upload.MultipartRequestWrapper
    This method returns null.
    getParameterNames() - Method in class org.apache.struts.upload.MultipartRequestWrapper
    Returns the names of the parameters for this request.
    getParameterValues(String) - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    getParamId() - Method in class org.apache.struts.taglib.logic.RedirectTag
     
    getParamId() - Method in class org.apache.struts.taglib.html.LinkTag
     
    getParamId() - Method in class org.apache.struts.taglib.html.ImgTag
     
    getParamName() - Method in class org.apache.struts.taglib.logic.RedirectTag
     
    getParamName() - Method in class org.apache.struts.taglib.html.LinkTag
     
    getParamName() - Method in class org.apache.struts.taglib.html.ImgTag
     
    getParamProperty() - Method in class org.apache.struts.taglib.logic.RedirectTag
     
    getParamProperty() - Method in class org.apache.struts.taglib.html.LinkTag
     
    getParamProperty() - Method in class org.apache.struts.taglib.html.ImgTag
     
    getParamScope() - Method in class org.apache.struts.taglib.logic.RedirectTag
     
    getParamScope() - Method in class org.apache.struts.taglib.html.LinkTag
     
    getParamScope() - Method in class org.apache.struts.taglib.html.ImgTag
     
    getParserDebugLevel() - Method in class org.apache.struts.tiles.DefinitionsFactoryConfig
    Deprecated. Use commons-logging mechanism.
    getParserValidate() - Method in class org.apache.struts.tiles.DefinitionsFactoryConfig
    Determines if the parser is validating.
    getPath() - Method in class org.apache.struts.tiles.ComponentDefinition
    Access method for the path property.
    getPath() - Method in class org.apache.struts.config.ExceptionConfig
     
    getPath() - Method in class org.apache.struts.config.ActionConfig
    Return context-relative path of the submitted request, starting with a slash ("/") character, and omitting any filename extension if extension mapping is being used.
    getPath() - Method in class org.apache.struts.config.ForwardConfig
     
    getPathInfo() - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    getPathnames() - Method in class org.apache.struts.validator.ValidatorPlugIn
    Gets a comma delimitted list of Validator resources.
    getPathTranslated() - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    getPrefix() - Method in class org.apache.struts.taglib.tiles.ext.TextTag
    Deprecated.  
    getPrefix() - Method in interface org.apache.struts.config.ModuleConfig
    The prefix of the context-relative portion of the request URI, used to select this configuration versus others supported by the controller servlet.
    getPrefix() - Method in class org.apache.struts.config.ActionConfig
    Retruns prefix used to match request parameter names to form bean property names, if any.
    getPrefix() - Method in class org.apache.struts.config.impl.ModuleConfigImpl
    The prefix of the context-relative portion of the request URI, used to select this configuration versus others supported by the controller servlet.
    getProcessorClass() - Method in class org.apache.struts.config.ControllerConfig
     
    getProperties() - Method in class org.apache.struts.config.PlugInConfig
    Return the properties that will be used to configure a PlugIn instance.
    getProperties() - Method in class org.apache.struts.config.DataSourceConfig
     
    getProperty() - Method in class org.apache.struts.util.ModuleException
    Returns the property associated with the exception.
    getProperty() - Method in class org.apache.struts.taglib.tiles.AttributeToScopeTag
    Deprecated. Return the property name.
    getProperty() - Method in class org.apache.struts.taglib.nested.NestedWriteNestingTag
    Getter method for the property property
    getProperty() - Method in class org.apache.struts.taglib.nested.NestedRootTag
    Getter method for the property property
    getProperty() - Method in class org.apache.struts.taglib.nested.NestedPropertyTag
    Getter method for the property property
    getProperty() - Method in interface org.apache.struts.taglib.nested.NestedPropertySupport
    The getters and setters required to set a tags property property.
    getProperty() - Method in class org.apache.struts.taglib.nested.html.NestedFormTag
    Get the string value of the "property" property.
    getProperty() - Method in class org.apache.struts.taglib.logic.IterateTag
     
    getProperty() - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
     
    getProperty() - Method in class org.apache.struts.taglib.logic.RedirectTag
     
    getProperty() - Method in class org.apache.struts.taglib.html.OptionsTag
     
    getProperty() - Method in class org.apache.struts.taglib.html.OptionsCollectionTag
     
    getProperty() - Method in class org.apache.struts.taglib.html.ErrorsTag
     
    getProperty() - Method in class org.apache.struts.taglib.html.LinkTag
     
    getProperty() - Method in class org.apache.struts.taglib.html.SelectTag
    Return the property name.
    getProperty() - Method in class org.apache.struts.taglib.html.MessagesTag
     
    getProperty() - Method in class org.apache.struts.taglib.html.CancelTag
    Return the property name.
    getProperty() - Method in class org.apache.struts.taglib.html.MultiboxTag
    Return the property name.
    getProperty() - Method in class org.apache.struts.taglib.html.BaseInputTag
    Return the property name.
    getProperty() - Method in class org.apache.struts.taglib.html.ImageTag
     
    getProperty() - Method in class org.apache.struts.taglib.html.CheckboxTag
    Return the property name.
    getProperty() - Method in class org.apache.struts.taglib.html.ImgTag
     
    getProperty() - Method in class org.apache.struts.taglib.html.SubmitTag
    Return the property.
    getProperty() - Method in class org.apache.struts.taglib.html.ButtonTag
    Return the property name.
    getProperty() - Method in class org.apache.struts.taglib.html.ResetTag
    Return the field name.
    getProperty() - Method in class org.apache.struts.taglib.html.RadioTag
    Return the property name.
    getProperty() - Method in class org.apache.struts.taglib.bean.DefineTag
     
    getProperty() - Method in class org.apache.struts.taglib.bean.MessageTag
     
    getProperty() - Method in class org.apache.struts.taglib.bean.WriteTag
     
    getProperty() - Method in class org.apache.struts.taglib.bean.SizeTag
     
    getProperty() - Method in class org.apache.struts.taglib.bean.PageTag
     
    getProperty(Object, String) - Static method in class org.apache.struts.taglib.tiles.util.TagUtils
    Return the value of the specified property of the specified bean, no matter which property reference format is used, with no type conversions.
    getProtocol() - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    getQueryString() - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    getReader() - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    getReadonly() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Returns the readonly event handler.
    getRealPath(String) - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    getRealValue() - Method in class org.apache.struts.taglib.tiles.PutTag
    Get real value according to tag attribute.
    getRealValueFromBean() - Method in class org.apache.struts.taglib.tiles.PutTag
    Extract real value from specified bean.
    getRealValueFromBean(String, String, String, PageContext) - Static method in class org.apache.struts.taglib.tiles.util.TagUtils
    Locate and return the specified property of the specified bean, from an optionally specified scope, in the specified page context.
    getRedirect() - Method in class org.apache.struts.config.ForwardConfig
     
    getRedisplay() - Method in class org.apache.struts.taglib.html.BaseFieldTag
     
    getRemoteAddr() - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    getRemoteHost() - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    getRemoteUser() - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    getRepositoryPath(ModuleConfig) - Method in class org.apache.struts.upload.CommonsMultipartRequestHandler
    Returns the path to the temporary directory to be used for uploaded files which are written to disk.
    getRequest() - Method in class org.apache.struts.upload.MultipartRequestWrapper
    Returns the underlying HttpServletRequest for this wrapper
    getRequestDispatcher(String) - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    getRequestedSessionId() - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    getRequestModuleConfig(HttpServletRequest) - Static method in class org.apache.struts.util.RequestUtils
    Return the current ModuleConfig object stored in request, if it exists, null otherwise.
    getRequestProcessor(HttpServletRequest, ServletContext) - Method in class org.apache.struts.tiles.TilesUtilStrutsModulesImpl
    Get Tiles RequestProcessor associated to the current module.
    getRequestProcessor(ModuleConfig) - Method in class org.apache.struts.action.ActionServlet
    Look up and return the RequestProcessor responsible for the specified module, creating a new one if necessary.
    getRequestURI() - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    getRequestURL() - Method in class org.apache.struts.upload.MultipartRequestWrapper
    This method returns null.
    getResources() - Method in class org.apache.struts.action.ActionServlet
    Deprecated. Actions should call Action.getResources(HttpServletRequest) instead of this method, in order to retrieve the resources for the current module.
    getResources() - Method in class org.apache.struts.action.Action
    Deprecated. This method can only return the resources for the default module. Use getResources(HttpServletRequest) to get the resources for the current module.
    getResources(HttpServletRequest) - Method in class org.apache.struts.action.Action
    Return the default message resources for the current module.
    getResources(HttpServletRequest, String) - Method in class org.apache.struts.action.Action
    Return the specified message resources for the current module.
    getResultValueMap() - Method in class org.apache.struts.validator.ValidatorForm
    Returns a Map of values returned from any validation that returns a value other than null or Boolean with the key the full property path of the field.
    getResultValueMap() - Method in class org.apache.struts.validator.DynaValidatorForm
    Returns a Map of values returned from any validation that returns a value other than null or Boolean with the key the full property path of the field.
    getReturnNull() - Method in class org.apache.struts.util.MessageResourcesFactory
    Get default value of the "returnNull" property used to initialize newly created MessageResourcess.
    getReturnNull() - Method in class org.apache.struts.util.MessageResources
    Indicates that a null is returned instead of an error message string if an unknown Locale or key is requested.
    getRole() - Method in class org.apache.struts.tiles.UntyppedAttribute
    Get role.
    getRole() - Method in class org.apache.struts.tiles.ComponentDefinition
    Access method for the role property.
    getRole() - Method in class org.apache.struts.tiles.xmlDefinition.XmlAttribute
    Access method for the name property.
    getRole() - Method in class org.apache.struts.taglib.tiles.PutListTag
    Get role attribute.
    getRole() - Method in class org.apache.struts.taglib.tiles.GetAttributeTag
    Get role.
    getRole() - Method in class org.apache.struts.taglib.tiles.PutTag
    Get role attribute
    getRole() - Method in class org.apache.struts.taglib.tiles.DefinitionTagSupport
    Get associated role.
    getRole() - Method in class org.apache.struts.taglib.template.PutTag
    Deprecated. Use Tiles instead.
    getRole() - Method in class org.apache.struts.taglib.template.GetTag
    Deprecated. Use Tiles instead.
    getRole() - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
     
    getRoleNames() - Method in class org.apache.struts.config.ActionConfig
    Get array of security role names used to authorize access to this Action.
    getRoles() - Method in class org.apache.struts.config.ActionConfig
     
    getRows() - Method in class org.apache.struts.taglib.html.BaseInputTag
    Return the number of rows for this field.
    getScheme() - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    getScope() - Method in class org.apache.struts.taglib.tiles.DefinitionTag
    Get the scope.
    getScope() - Method in class org.apache.struts.taglib.tiles.ImportAttributeTag
    Get scope.
    getScope() - Method in class org.apache.struts.taglib.tiles.UseAttributeTag
    Get scope.
    getScope() - Method in class org.apache.struts.taglib.logic.IterateTag
     
    getScope() - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
     
    getScope() - Method in class org.apache.struts.taglib.logic.RedirectTag
     
    getScope() - Method in class org.apache.struts.taglib.html.LinkTag
     
    getScope() - Method in class org.apache.struts.taglib.html.ImgTag
     
    getScope() - Method in class org.apache.struts.taglib.html.FormTag
    Return the attribute scope of our bean.
    getScope() - Method in class org.apache.struts.taglib.bean.DefineTag
     
    getScope() - Method in class org.apache.struts.taglib.bean.MessageTag
     
    getScope() - Method in class org.apache.struts.taglib.bean.WriteTag
     
    getScope() - Method in class org.apache.struts.taglib.bean.SizeTag
     
    getScope() - Method in class org.apache.struts.config.ExceptionConfig
     
    getScope() - Method in class org.apache.struts.config.ActionConfig
    Get the scope ("request" or "session") within which our form bean is accessed, if any.
    getScope(String) - Static method in class org.apache.struts.util.RequestUtils
    Converts the scope name into its corresponding PageContext constant value.
    getScope(String, int) - Static method in class org.apache.struts.taglib.tiles.util.TagUtils
    Get scope value from string value
    getScrolling() - Method in class org.apache.struts.taglib.html.FrameTag
     
    getServer() - Method in class org.apache.struts.taglib.html.BaseTag
    Returns the server.
    getServerName() - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    getServerPort() - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    getServlet() - Method in interface org.apache.struts.upload.MultipartRequestHandler
    Get the ActionServlet instance
    getServlet() - Method in class org.apache.struts.upload.CommonsMultipartRequestHandler
    Retrieves the servlet with which this handler is associated.
    getServlet() - Method in class org.apache.struts.upload.DiskMultipartRequestHandler
     
    getServlet() - Method in class org.apache.struts.action.ActionForm
    Return the controller servlet instance to which we are attached.
    getServlet() - Method in class org.apache.struts.action.Action
    Return the controller servlet instance to which we are attached.
    getServlet() - Method in class org.apache.struts.action.ActionMappings
    Deprecated. Return the ActionServlet instance of our owning application.
    getServletContext() - Method in class org.apache.struts.action.RequestProcessor
    Return the ServletContext for the web application we are running in.
    getServletMapping() - Method in class org.apache.struts.config.ConfigHelper
    The path-mapped pattern (/action/*) or extension mapped pattern ((*.do) used to determine our Action URIs in this application.
    getServletMapping() - Method in interface org.apache.struts.config.ConfigHelperInterface
    The path-mapped pattern (/action/*) or extension mapped pattern ((*.do) used to determine our Action URIs in this application.
    getServletPath() - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    getServletWrapper() - Method in class org.apache.struts.action.ActionForm
    Return the controller servlet instance to which we are attached.
    getSession() - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    getSession(boolean) - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    getSize() - Method in class org.apache.struts.util.ErrorMessages
    Deprecated. Return the number of error message keys we have accumulated so far.
    getSize() - Method in class org.apache.struts.taglib.html.SelectTag
     
    getSize() - Method in class org.apache.struts.taglib.html.BaseInputTag
    Return the size of this field (synonym for getCols()).
    getSize() - Method in class org.apache.struts.config.FormPropertyConfig
     
    getSizeMax(ModuleConfig) - Method in class org.apache.struts.upload.CommonsMultipartRequestHandler
    Returns the maximum allowable size, in bytes, of an uploaded file.
    getSizeThreshold(ModuleConfig) - Method in class org.apache.struts.upload.CommonsMultipartRequestHandler
    Returns the size threshold which determines whether an uploaded file will be written to disk or cached in memory.
    getSrc() - Method in class org.apache.struts.taglib.html.JavascriptValidatorTag
    Gets the src attribute's value when defining the html script element.
    getSrc() - Method in class org.apache.struts.taglib.html.ImageTag
     
    getSrc() - Method in class org.apache.struts.taglib.html.ImgTag
     
    getSrcKey() - Method in class org.apache.struts.taglib.html.ImageTag
     
    getSrcKey() - Method in class org.apache.struts.taglib.html.ImgTag
     
    getStack(PageContext) - Static method in class org.apache.struts.taglib.template.util.ContentMapStack
    Deprecated. Use Tiles instead.
    getStartElement() - Method in class org.apache.struts.taglib.html.JavascriptValidatorTag
    Constructs the beginning <script> element depending on xhtml status.
    getStaticJavascript() - Method in class org.apache.struts.taglib.html.JavascriptValidatorTag
    Gets whether or not to generate the static JavaScript.
    getStyle() - Method in class org.apache.struts.taglib.html.OptionsTag
     
    getStyle() - Method in class org.apache.struts.taglib.html.OptionsCollectionTag
     
    getStyle() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Returns the style attribute.
    getStyle() - Method in class org.apache.struts.taglib.html.FormTag
    Return the style attribute for this tag.
    getStyle() - Method in class org.apache.struts.taglib.html.OptionTag
     
    getStyleClass() - Method in class org.apache.struts.taglib.html.OptionsTag
     
    getStyleClass() - Method in class org.apache.struts.taglib.html.OptionsCollectionTag
     
    getStyleClass() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Returns the style class attribute.
    getStyleClass() - Method in class org.apache.struts.taglib.html.FormTag
    Return the style class for this tag.
    getStyleClass() - Method in class org.apache.struts.taglib.html.OptionTag
     
    getStyleId() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Returns the style id attribute.
    getStyleId() - Method in class org.apache.struts.taglib.html.FormTag
    Return the style identifier for this tag.
    getStyleId() - Method in class org.apache.struts.taglib.html.OptionTag
    Return the style identifier for this tag.
    getSuffix() - Method in class org.apache.struts.config.ActionConfig
    Return suffix used to match request parameter names to form bean property names, if any.
    getTabindex() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Returns the tabIndex value.
    GetTag - class org.apache.struts.taglib.tiles.GetTag.
    This is the tag handler for <tiles:get>, which gets content from the request scope and either includes the content or prints it, depending upon the value of the content's direct attribute.
    GetTag - class org.apache.struts.taglib.template.GetTag.
    Deprecated. Use Tiles instead.
    GetTag() - Constructor for class org.apache.struts.taglib.tiles.GetTag
    Constructor.
    GetTag() - Constructor for class org.apache.struts.taglib.template.GetTag
    Deprecated.  
    getTarget() - Method in class org.apache.struts.taglib.html.LinkTag
     
    getTarget() - Method in class org.apache.struts.taglib.html.BaseTag
     
    getTarget() - Method in class org.apache.struts.taglib.html.FormTag
    Return the window target.
    getTempDir() - Method in class org.apache.struts.config.ControllerConfig
     
    getTemplate() - Method in class org.apache.struts.tiles.ComponentDefinition
    Access method for the template property.
    getTemplate() - Method in class org.apache.struts.taglib.tiles.DefinitionTagSupport
    Get the template.
    getTemplate() - Method in class org.apache.struts.taglib.template.InsertTag
    Deprecated. Use Tiles instead.
    getTextElements() - Method in interface org.apache.struts.upload.MultipartRequestHandler
    This method is called on to retrieve all the text input elements of the request.
    getTextElements() - Method in class org.apache.struts.upload.CommonsMultipartRequestHandler
    Returns a hash table containing the text (that is, non-file) request parameters.
    getTextElements() - Method in class org.apache.struts.upload.DiskMultipartRequestHandler
     
    getTilesUtil() - Static method in class org.apache.struts.tiles.TilesUtil
    Get the real implementation.
    getTilesUtilImplClassname() - Method in class org.apache.struts.tiles.TilesPlugin
    Get Tiles util implemention classname.
    getTitle() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Returns the advisory title attribute.
    getTitleKey() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Returns the message resources key of the advisory title.
    getToken() - Method in class org.apache.struts.config.ConfigHelper
    The transaction token stored in this session, if it is used.
    getToken() - Method in interface org.apache.struts.config.ConfigHelperInterface
    The transaction token stored in this session, if it is used.
    getTooltip() - Method in class org.apache.struts.tiles.beans.SimpleMenuItem
    Get tooltip property.
    getTooltip() - Method in interface org.apache.struts.tiles.beans.MenuItem
    Get tooltip property.
    getToScope() - Method in class org.apache.struts.taglib.bean.DefineTag
     
    getTransaction() - Method in class org.apache.struts.taglib.logic.RedirectTag
     
    getTransaction() - Method in class org.apache.struts.taglib.html.LinkTag
     
    getTransaction() - Method in class org.apache.struts.taglib.bean.IncludeTag
     
    getType() - Method in class org.apache.struts.taglib.tiles.PutTag
    Get type.
    getType() - Method in class org.apache.struts.taglib.logic.IterateTag
     
    getType() - Method in class org.apache.struts.taglib.html.FormTag
    Return the Java class of our bean.
    getType() - Method in class org.apache.struts.taglib.bean.DefineTag
     
    getType() - Method in class org.apache.struts.config.FormBeanConfig
     
    getType() - Method in class org.apache.struts.config.ExceptionConfig
     
    getType() - Method in class org.apache.struts.config.ActionConfig
     
    getType() - Method in class org.apache.struts.config.FormPropertyConfig
     
    getType() - Method in class org.apache.struts.config.DataSourceConfig
     
    getTypeClass() - Method in class org.apache.struts.config.FormPropertyConfig
    Return a Class corresponds to the value specified for the type property, taking into account the trailing "[]" for arrays (as well as the ability to specify primitive Java types).
    getUnknown() - Method in class org.apache.struts.config.ActionConfig
    Determine whether Action is configured as the default one for this application.
    getUnknown(HttpServletRequest) - Method in class org.apache.struts.action.ActionMappings
    Deprecated. Return the Action that should handle unknown request paths, if any.
    getUnknown(ServletRequest) - Method in class org.apache.struts.action.ActionMappings
    Deprecated. Return the Action that should handle unknown request paths, if any.
    getUsemap() - Method in class org.apache.struts.taglib.html.ImgTag
     
    getUser() - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
     
    getUserPrincipal() - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    getValidate() - Method in class org.apache.struts.config.ActionConfig
     
    getValidatorResources(ServletContext) - Static method in class org.apache.struts.validator.Resources
    Deprecated. In Struts 1.1 This method can only return the resources for the default module. Use getValidatorResources(HttpServletRequest, ServletContext) to get the resources for the current application module.
    getValidatorResources(ServletContext) - Static method in class org.apache.struts.util.StrutsValidatorUtil
    Deprecated. In Struts 1.1 This method can only return the resources for the default module. Use getValidatorResources(HttpServletRequest, ServletContext) to get the resources for the current application module.
    getValidatorResources(ServletContext, HttpServletRequest) - Static method in class org.apache.struts.validator.Resources
    Retrieve ValidatorResources for the current module.
    getValidatorResources(ServletContext, HttpServletRequest) - Static method in class org.apache.struts.util.StrutsValidatorUtil
    Deprecated. Retrieve ValidatorResources for the current module.
    getValidatorResults() - Method in class org.apache.struts.validator.ValidatorForm
    Get results of the validation performed by the Validator.
    getValidatorResults() - Method in class org.apache.struts.validator.DynaValidatorForm
    Get results of the validation performed by the Validator.
    getValue() - Method in class org.apache.struts.util.LabelValueBean
     
    getValue() - Method in class org.apache.struts.upload.MultipartElement
    Returns the value of this multipart element.
    getValue() - Method in class org.apache.struts.tiles.UntyppedAttribute
    Get value.
    getValue() - Method in interface org.apache.struts.tiles.AttributeDefinition
    Return value hold by this typed attribute.
    getValue() - Method in class org.apache.struts.tiles.xmlDefinition.XmlAttribute
    Access method for the value property.
    getValue() - Method in class org.apache.struts.tiles.beans.SimpleMenuItem
    Get value property.
    getValue() - Method in interface org.apache.struts.tiles.beans.MenuItem
    Get value property.
    getValue() - Method in class org.apache.struts.taglib.tiles.PutTag
    Get value.
    getValue() - Method in class org.apache.struts.taglib.logic.MatchTag
     
    getValue() - Method in class org.apache.struts.taglib.logic.CompareTagBase
     
    getValue() - Method in class org.apache.struts.taglib.html.OptionsCollectionTag
     
    getValue() - Method in class org.apache.struts.taglib.html.SelectTag
    Return the comparison value.
    getValue() - Method in class org.apache.struts.taglib.html.CancelTag
    Return the label value.
    getValue() - Method in class org.apache.struts.taglib.html.MultiboxTag
    Return the server value.
    getValue() - Method in class org.apache.struts.taglib.html.BaseInputTag
    Return the field value (if any).
    getValue() - Method in class org.apache.struts.taglib.html.CheckboxTag
    Return the server value.
    getValue() - Method in class org.apache.struts.taglib.html.SubmitTag
    Return the label value.
    getValue() - Method in class org.apache.struts.taglib.html.ButtonTag
    Return the label value.
    getValue() - Method in class org.apache.struts.taglib.html.ResetTag
    Return the label value.
    getValue() - Method in class org.apache.struts.taglib.html.OptionTag
     
    getValue() - Method in class org.apache.struts.taglib.html.RadioTag
    Return the server value.
    getValue() - Method in class org.apache.struts.taglib.bean.DefineTag
     
    getValue() - Method in class org.apache.struts.taglib.bean.ParameterTag
     
    getValue() - Method in class org.apache.struts.taglib.bean.HeaderTag
     
    getValue() - Method in class org.apache.struts.taglib.bean.CookieTag
     
    getValues() - Method in class org.apache.struts.action.ActionMessage
    Get the replacement values for this message.
    getVariableInfo(TagData) - Method in class org.apache.struts.taglib.tiles.UseAttributeTei
    Return information about the scripting variables to be created.
    getVariableInfo(TagData) - Method in class org.apache.struts.taglib.nested.logic.NestedIterateTei
    Return information about the scripting variables to be created.
    getVariableInfo(TagData) - Method in class org.apache.struts.taglib.nested.bean.NestedDefineTei
    Return information about the scripting variables to be created.
    getVariableInfo(TagData) - Method in class org.apache.struts.taglib.logic.IterateTei
    Return information about the scripting variables to be created.
    getVariableInfo(TagData) - Method in class org.apache.struts.taglib.html.MessagesTei
    Return information about the scripting variables to be created.
    getVariableInfo(TagData) - Method in class org.apache.struts.taglib.bean.SizeTei
    Return information about the scripting variables to be created.
    getVariableInfo(TagData) - Method in class org.apache.struts.taglib.bean.ParameterTei
    Return information about the scripting variables to be created.
    getVariableInfo(TagData) - Method in class org.apache.struts.taglib.bean.PageTei
    Return information about the scripting variables to be created.
    getVariableInfo(TagData) - Method in class org.apache.struts.taglib.bean.IncludeTei
    Return information about the scripting variables to be created.
    getVariableInfo(TagData) - Method in class org.apache.struts.taglib.bean.HeaderTei
    Return information about the scripting variables to be created.
    getVariableInfo(TagData) - Method in class org.apache.struts.taglib.bean.StrutsTei
    Return information about the scripting variables to be created.
    getVariableInfo(TagData) - Method in class org.apache.struts.taglib.bean.DefineTei
    Return information about the scripting variables to be created.
    getVariableInfo(TagData) - Method in class org.apache.struts.taglib.bean.ResourceTei
    Return information about the scripting variables to be created.
    getVariableInfo(TagData) - Method in class org.apache.struts.taglib.bean.CookieTei
    Return information about the scripting variables to be created.
    getVspace() - Method in class org.apache.struts.taglib.html.ImgTag
     
    getWidth() - Method in class org.apache.struts.taglib.html.ImgTag
     
    getWrite() - Method in class org.apache.struts.taglib.html.HiddenTag
     
    getX() - Method in class org.apache.struts.util.ImageButtonBean
     
    getXhtml() - Method in class org.apache.struts.taglib.html.HtmlTag
     
    getY() - Method in class org.apache.struts.util.ImageButtonBean
     
    GLOBAL_ERROR - Static variable in class org.apache.struts.action.ActionErrors
    The "property name" marker to use for global errors, as opposed to those related to a specific property.
    GLOBAL_MESSAGE - Static variable in class org.apache.struts.action.ActionMessages
    The "property name" marker to use for global messages, as opposed to those related to a specific property.
    Globals - class org.apache.struts.Globals.
    Global manifest constants for the entire Struts Framework.
    Globals() - Constructor for class org.apache.struts.Globals
     
    GreaterEqualTag - class org.apache.struts.taglib.logic.GreaterEqualTag.
    Evaluate the nested body content of this tag if the specified variable is greater than or equal to the specified value.
    GreaterEqualTag() - Constructor for class org.apache.struts.taglib.logic.GreaterEqualTag
     
    GreaterThanTag - class org.apache.struts.taglib.logic.GreaterThanTag.
    Evaluate the nested body content of this tag if the specified variable is greater than the specified value.
    GreaterThanTag() - Constructor for class org.apache.struts.taglib.logic.GreaterThanTag
     

    H

    handleConfigException(String, Exception) - Method in class org.apache.struts.action.ActionServlet
    Simplifies exception handling in the parseModuleConfigFile() method.
    handler - Variable in class org.apache.struts.config.ExceptionConfig
    The fully qualified Java class name of the exception handler class which should be instantiated to handle this exception.
    handleRequest(HttpServletRequest) - Method in interface org.apache.struts.upload.MultipartRequestHandler
    After constructed, this is the first method called on by ActionServlet.
    handleRequest(HttpServletRequest) - Method in class org.apache.struts.upload.CommonsMultipartRequestHandler
    Parses the input stream and partitions the parsed items into a set of form fields and a set of file items.
    handleRequest(HttpServletRequest) - Method in class org.apache.struts.upload.DiskMultipartRequestHandler
    This method populates the internal hashtables with multipart request data.
    hasBody() - Method in class org.apache.struts.taglib.template.PutTag
    Deprecated. Use Tiles instead.
    hasNext() - Method in class org.apache.struts.util.IteratorAdapter
    Deprecated.  
    hasNext() - Method in class org.apache.struts.tiles.EmptyIterator
     
    header - Variable in class org.apache.struts.taglib.logic.ConditionalTagBase
    The name of the HTTP request header to be used as a variable.
    header - Variable in class org.apache.struts.taglib.html.MessagesTag
    The message resource key for errors header.
    HEADER_CONTENT_DISPOSITION - Static variable in class org.apache.struts.upload.MultipartIterator
    The name of the Content-Disposition header.
    HEADER_CONTENT_TYPE - Static variable in class org.apache.struts.upload.MultipartIterator
    The name of the Content-Type header.
    HEADER_ENCODING - Static variable in class org.apache.struts.upload.MultipartValueStream
     
    HeaderTag - class org.apache.struts.taglib.bean.HeaderTag.
    Define a scripting variable based on the value(s) of the specified header received with this request.
    HeaderTag() - Constructor for class org.apache.struts.taglib.bean.HeaderTag
     
    HeaderTei - class org.apache.struts.taglib.bean.HeaderTei.
    Implementation of TagExtraInfo for the header tag, identifying the scripting object(s) to be made visible.
    HeaderTei() - Constructor for class org.apache.struts.taglib.bean.HeaderTei
     
    height - Variable in class org.apache.struts.taglib.html.ImgTag
    The image height.
    HiddenTag - class org.apache.struts.taglib.html.HiddenTag.
    Custom tag for input fields of type "hidden".
    HiddenTag() - Constructor for class org.apache.struts.taglib.html.HiddenTag
    Construct a new instance of this tag.
    href - Variable in class org.apache.struts.taglib.logic.RedirectTag
    The redirect URI.
    href - Variable in class org.apache.struts.taglib.html.LinkTag
    The hyperlink URI.
    href - Variable in class org.apache.struts.taglib.bean.IncludeTag
    The absolute URL to the resource to be included.
    hspace - Variable in class org.apache.struts.taglib.html.ImgTag
    The horizontal spacing around the image.
    htmlBeginComment - Variable in class org.apache.struts.taglib.html.JavascriptValidatorTag
     
    htmlComment - Variable in class org.apache.struts.taglib.html.JavascriptValidatorTag
    The JavaScript methods will enclosed with html comments if this is set to "true".
    htmlEndComment - Variable in class org.apache.struts.taglib.html.JavascriptValidatorTag
     
    HtmlTag - class org.apache.struts.taglib.html.HtmlTag.
    Renders an HTML element with appropriate language attributes if there is a current Locale available in the user's session.
    HtmlTag() - Constructor for class org.apache.struts.taglib.html.HtmlTag
     
    HTTP_SERVLET_REQUEST_KEY - Static variable in class org.apache.struts.validator.Resources
    Resources key the HttpServletRequest is stored under.
    HTTP_SERVLET_REQUEST_KEY - Static variable in class org.apache.struts.util.StrutsValidatorUtil
    Deprecated. Resources key the HttpServletRequest is stored under.

    I

    I18nFactorySet - class org.apache.struts.tiles.xmlDefinition.I18nFactorySet.
    Definitions factory.
    I18nFactorySet() - Constructor for class org.apache.struts.tiles.xmlDefinition.I18nFactorySet
    Parameterless Constructor.
    I18nFactorySet(ServletContext, Map) - Constructor for class org.apache.struts.tiles.xmlDefinition.I18nFactorySet
    Constructor.
    icon - Variable in class org.apache.struts.tiles.beans.SimpleMenuItem
     
    iCount - Variable in class org.apache.struts.action.ActionMessages
    The current number of the property/key being added.
    id - Variable in class org.apache.struts.taglib.tiles.DefinitionTag
    Definition identifier.
    id - Variable in class org.apache.struts.taglib.logic.IterateTag
    The name of the scripting variable to be exposed.
    id - Variable in class org.apache.struts.taglib.html.MessagesTag
    The name of the scripting variable to be exposed.
    id - Variable in class org.apache.struts.taglib.bean.DefineTag
    The name of the scripting variable that will be exposed as a page scope attribute.
    id - Variable in class org.apache.struts.taglib.bean.IncludeTag
    The name of the scripting variable that will be exposed as a page scope attribute.
    id - Variable in class org.apache.struts.taglib.bean.StrutsTag
    The name of the scripting variable that will be exposed as a page scope attribute.
    id - Variable in class org.apache.struts.taglib.bean.SizeTag
    The name of the scripting variable that will be exposed as a page scope attribute.
    id - Variable in class org.apache.struts.taglib.bean.ResourceTag
    The name of the scripting variable that will be exposed as a page scope attribute.
    id - Variable in class org.apache.struts.taglib.bean.ParameterTag
    The name of the scripting variable that will be exposed as a page scope attribute.
    id - Variable in class org.apache.struts.taglib.bean.PageTag
    The name of the scripting variable that will be exposed as a page scope attribute.
    id - Variable in class org.apache.struts.taglib.bean.HeaderTag
    The name of the scripting variable that will be exposed as a page scope attribute.
    id - Variable in class org.apache.struts.taglib.bean.CookieTag
    The name of the scripting variable that will be exposed as a page scope attribute.
    idName - Variable in class org.apache.struts.taglib.html.RadioTag
    Name of the bean (in some scope) that will return the value of the radio tag.
    ignore - Variable in class org.apache.struts.taglib.bean.WriteTag
    Should we ignore missing beans and simply output nothing?
    ImageButtonBean - class org.apache.struts.util.ImageButtonBean.
    A simple JavaBean to encapsulate the request parameters sent for an HTML input element of type image.
    ImageButtonBean() - Constructor for class org.apache.struts.util.ImageButtonBean
    Construct an instance with empty property values.
    ImageButtonBean(String, String) - Constructor for class org.apache.struts.util.ImageButtonBean
    Construct an instance with the supplied property values.
    imageName - Variable in class org.apache.struts.taglib.html.ImgTag
    The image name for named images.
    ImageTag - class org.apache.struts.taglib.html.ImageTag.
    Tag for input fields of type "image".
    ImageTag() - Constructor for class org.apache.struts.taglib.html.ImageTag
     
    ImgTag - class org.apache.struts.taglib.html.ImgTag.
    Generate an IMG tag to the specified image URI.
    ImgTag() - Constructor for class org.apache.struts.taglib.html.ImgTag
     
    implAlreadySet - Static variable in class org.apache.struts.tiles.TilesUtil
    Flag to know if internal implementation has been set by the setter method
    ImportAttributeTag - class org.apache.struts.taglib.tiles.ImportAttributeTag.
    Import attribute from component to requested scope.
    ImportAttributeTag() - Constructor for class org.apache.struts.taglib.tiles.ImportAttributeTag
     
    in - Variable in class org.apache.struts.upload.MultipartValueStream
    the underlying stream
    include - Variable in class org.apache.struts.config.ActionConfig
    Context-relative path of the web application resource that will process this request via RequestDispatcher.include(), instead of instantiating and calling the Action class specified by "type".
    INCLUDE_PATH_INFO - Static variable in class org.apache.struts.action.RequestProcessor
    The request attribute under which the path information is stored for processing during a RequestDispatcher.include() call.
    INCLUDE_SERVLET_PATH - Static variable in class org.apache.struts.action.RequestProcessor
    The request attribute under which the servlet path information is stored for processing during a RequestDispatcher.include() call.
    IncludeAction - class org.apache.struts.actions.IncludeAction.
    An Action that includes the context-relative URI specified by the parameter property of our associated ActionMapping.
    IncludeAction() - Constructor for class org.apache.struts.actions.IncludeAction
     
    IncludeTag - class org.apache.struts.taglib.bean.IncludeTag.
    Define the contents of a specified intra-application request as a page scope attribute of type java.lang.String.
    IncludeTag() - Constructor for class org.apache.struts.taglib.bean.IncludeTag
     
    IncludeTei - class org.apache.struts.taglib.bean.IncludeTei.
    Implementation of TagExtraInfo for the include tag, identifying the scripting object(s) to be made visible.
    IncludeTei() - Constructor for class org.apache.struts.taglib.bean.IncludeTei
     
    indexed - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
    Whether to created indexed names for fields
    indexId - Variable in class org.apache.struts.taglib.logic.IterateTag
    The name of the scripting variable to be exposed as the current index.
    indexId - Variable in class org.apache.struts.taglib.html.LinkTag
    Name of parameter to generate to hold index number
    inherit - Variable in class org.apache.struts.tiles.xmlDefinition.XmlDefinition
    Extends attribute value.
    init() - Method in class org.apache.struts.tiles.ActionComponentServlet
    Deprecated. Init method.
    init() - Method in class org.apache.struts.tiles.TilesServlet
    Deprecated. Initialize this servlet
    init() - Method in class org.apache.struts.action.ActionServlet
    Initialize this servlet.
    init(ActionServlet, ModuleConfig) - Method in class org.apache.struts.plugins.ModuleConfigVerifier
    Receive notification that the specified module is being started up.
    init(ActionServlet, ModuleConfig) - Method in class org.apache.struts.validator.ValidatorPlugIn
    Initialize and load our resources.
    init(ActionServlet, ModuleConfig) - Method in class org.apache.struts.tiles.TilesPlugin
    Receive notification that the specified module is being started up.
    init(ActionServlet, ModuleConfig) - Method in class org.apache.struts.tiles.TilesRequestProcessor
    Initialize this request processor instance.
    init(ActionServlet, ModuleConfig) - Method in class org.apache.struts.action.RequestProcessor
    Initialize this request processor instance.
    init(ActionServlet, ModuleConfig) - Method in interface org.apache.struts.action.PlugIn
    Receive notification that the specified module is being started up.
    init(DefinitionsFactoryConfig, ServletContext) - Method in interface org.apache.struts.tiles.DefinitionsFactory
    Init definition factory.
    init(DefinitionsFactoryConfig, ServletContext) - Method in class org.apache.struts.tiles.definition.ComponentDefinitionsFactoryWrapper
    Call underlying factory init method.
    initApplicationConfig(String, String) - Method in class org.apache.struts.action.ActionServlet
    Deprecated. use ActionServlet.initModuleConfig(String,String)
    initApplicationDataSources(ModuleConfig) - Method in class org.apache.struts.action.ActionServlet
    Deprecated. use initModuleDataSources(ModuleConfig)
    initApplicationMessageResources(ModuleConfig) - Method in class org.apache.struts.action.ActionServlet
    Deprecated. use initModuleMessageResources()
    initApplicationPlugIns(ModuleConfig) - Method in class org.apache.struts.action.ActionServlet
    Deprecated. use ActionServlet.initModulePlugIns(ModuleConfig)
    initComponentDefinitionsMapping() - Method in class org.apache.struts.tiles.ActionComponentServlet
    Deprecated. Read component instance mapping configuration file.
    initConfigDigester() - Method in class org.apache.struts.action.ActionServlet
    Create (if needed) and return a new Digester instance that has been initialized to process Struts module configuraiton files and configure a corresponding ModuleConfig object (which must be pushed on to the evaluation stack before parsing begins).
    initDataSources() - Method in class org.apache.struts.action.ActionServlet
    Deprecated. Replaced by initApplicationDataSources() that takes an ModuleConfig argument. This method does nothing.
    initDefinitionsMapping() - Method in class org.apache.struts.tiles.TilesRequestProcessor
    Read component instance mapping configuration file.
    InitDefinitionsTag - class org.apache.struts.taglib.tiles.InitDefinitionsTag.
    Init definitions factory.
    InitDefinitionsTag() - Constructor for class org.apache.struts.taglib.tiles.InitDefinitionsTag
    Default constructor.
    initDigester(Digester) - Method in class org.apache.struts.tiles.xmlDefinition.XmlParser
    Init digester.
    initDigesterForComponentsDefinitionsSyntax(Digester) - Method in class org.apache.struts.tiles.xmlDefinition.XmlParser
    Init digester for components syntax.
    initDigesterForInstancesSyntax(Digester) - Method in class org.apache.struts.tiles.xmlDefinition.XmlParser
    Init digester in order to parse instances definition file syntax.
    initDigesterForTilesDefinitionsSyntax(Digester) - Method in class org.apache.struts.tiles.xmlDefinition.XmlParser
    Init digester for Tiles syntax.
    initFactory(ServletContext, Map) - Method in interface org.apache.struts.tiles.ComponentDefinitionsFactory
    Deprecated. Init factory.
    initFactory(ServletContext, Map) - Method in class org.apache.struts.tiles.xmlDefinition.I18nFactorySet
    Initialization method.
    initFactory(ServletContext, Map) - Method in class org.apache.struts.tiles.xmlDefinition.FactorySet
    Init factory set.
    initFactory(ServletContext, Map) - Method in class org.apache.struts.tiles.definition.ReloadableDefinitionsFactory
    Init factory.
    initFactory(ServletContext, String) - Method in class org.apache.struts.tiles.xmlDefinition.I18nFactorySet
    Initialization method.
    initFormBean() - Method in class org.apache.struts.taglib.html.FormTag
    Locate or create the bean associated with our form.
    initial - Variable in class org.apache.struts.config.FormPropertyConfig
    String representation of the initial value for this property.
    initial() - Method in class org.apache.struts.config.FormPropertyConfig
    Return an object representing the initial value of this property.
    initialize(ActionMapping) - Method in class org.apache.struts.action.DynaActionForm
    Initialize all bean properties to their initial values, as specified in the FormPropertyConfig elements associated with the definition of this DynaActionForm.
    initInternal() - Method in class org.apache.struts.action.ActionServlet
    Initialize our internal MessageResources bundle.
    initLookupMap(HttpServletRequest, Locale) - Method in class org.apache.struts.actions.LookupDispatchAction
    This is the first time this Locale is used so build the reverse lookup Map.
    initModuleConfig(String, String) - Method in class org.apache.struts.action.ActionServlet
    Initialize the application configuration information for the specified module.
    initModuleDataSources(ModuleConfig) - Method in class org.apache.struts.action.ActionServlet
    Initialize the data sources for the specified module.
    initModuleMessageResources(ModuleConfig) - Method in class org.apache.struts.action.ActionServlet
    Initialize the application MessageResources for the specified module.
    initModulePlugIns(ModuleConfig) - Method in class org.apache.struts.action.ActionServlet
    Initialize the plug ins for the specified module.
    initOther() - Method in class org.apache.struts.action.ActionServlet
    Initialize other global characteristics of the controller servlet.
    initRequestProcessorClass(ModuleConfig) - Method in class org.apache.struts.tiles.TilesPlugin
    Set RequestProcessor to appropriate Tiles RequestProcessor.
    initResources() - Method in class org.apache.struts.validator.ValidatorPlugIn
    Initialize the validator resources for this module.
    initServlet() - Method in class org.apache.struts.action.ActionServlet
    Initialize the servlet mapping under which our controller servlet is being accessed.
    initUserDebugLevel(ServletConfig) - Static method in class org.apache.struts.tiles.DefinitionsUtil
    Deprecated. Use commons-logging package instead.
    initValidator(String, Object, ServletContext, HttpServletRequest, ActionErrors, int) - Static method in class org.apache.struts.validator.Resources
    Initialize the Validator to perform validation.
    initValidator(String, Object, ServletContext, HttpServletRequest, ActionErrors, int) - Static method in class org.apache.struts.util.StrutsValidatorUtil
    Deprecated. As of Struts 1.1, replaced by Resources.initValidator(String,Object,ServletContext,HttpServletRequest,ActionErrors,int)
    input - Variable in class org.apache.struts.taglib.bean.ResourceTag
    Return an InputStream to the specified resource if this is non-null.
    input - Variable in class org.apache.struts.config.ActionConfig
    Context-relative path of the input form to which control should be returned if a validation error is encountered.
    inputForward - Variable in class org.apache.struts.config.ControllerConfig
    Should the input property of ActionConfig instances associated with this module be treated as the name of a corresponding ForwardConfig.
    inputStream - Variable in class org.apache.struts.upload.BufferedMultipartInputStream
    The underlying InputStream used by this class
    inputStream - Variable in class org.apache.struts.upload.MultipartBoundaryInputStream
    The InputStream to read from.
    inputStream - Variable in class org.apache.struts.upload.MultipartIterator
    The InputStream to use to read the multipart data.
    InsertTag - class org.apache.struts.taglib.tiles.InsertTag.
    This is the tag handler for <tiles:insert>, which includes a template.
    InsertTag - class org.apache.struts.taglib.template.InsertTag.
    Deprecated. Use Tiles instead.
    InsertTag.DirectStringHandler - class org.apache.struts.taglib.tiles.InsertTag.DirectStringHandler.
    Handle insert direct string.
    InsertTag.DirectStringHandler(Object) - Constructor for class org.apache.struts.taglib.tiles.InsertTag.DirectStringHandler
    Constructor.
    InsertTag.InsertHandler - class org.apache.struts.taglib.tiles.InsertTag.InsertHandler.
    Real handler, after attribute resolution.
    InsertTag.InsertHandler(Map, String, String, Controller) - Constructor for class org.apache.struts.taglib.tiles.InsertTag.InsertHandler
    Constructor.
    InsertTag.InsertHandler(String, String, Controller) - Constructor for class org.apache.struts.taglib.tiles.InsertTag.InsertHandler
    Constructor.
    InsertTag.TagHandler - interface org.apache.struts.taglib.tiles.InsertTag.TagHandler.
    Inner Interface.
    InsertTag() - Constructor for class org.apache.struts.taglib.tiles.InsertTag
     
    InsertTag() - Constructor for class org.apache.struts.taglib.template.InsertTag
    Deprecated.  
    instance - Static variable in class org.apache.struts.util.TokenProcessor
    The singleton instance of this class.
    INSTANCES_CONFIG_PARAMETER_NAME - Static variable in class org.apache.struts.tiles.xmlDefinition.I18nFactorySet
    Deprecated. use DEFINITIONS_CONFIG_PARAMETER_NAME
    INSTANCES_CONFIG_USER_DEBUG_LEVEL - Static variable in class org.apache.struts.tiles.DefinitionsUtil
    Deprecated. use DEFINITIONS_CONFIG_USER_DEBUG_LEVEL instead.
    INT_FORMAT_KEY - Static variable in class org.apache.struts.taglib.bean.WriteTag
    The key to search default format string for int (byte, short, etc.) in resources.
    internal - Variable in class org.apache.struts.action.ActionServlet
    The resources object for our internal resources.
    internalModuleRelativeForward(String, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.tiles.TilesRequestProcessor
    Catch the call to a module relative forward.
    internalModuleRelativeForward(String, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.action.RequestProcessor
    Do a module relative forward to specified uri using request dispatcher.
    internalModuleRelativeInclude(String, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.tiles.TilesRequestProcessor
    Do a module relative include to specified uri using request dispatcher.
    internalModuleRelativeInclude(String, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.action.RequestProcessor
    Do a module relative include to specified uri using request dispatcher.
    internalName - Variable in class org.apache.struts.action.ActionServlet
    The Java base name of our internal resources.
    introspect(FormBeanConfig) - Method in class org.apache.struts.action.DynaActionFormClass
    Introspect our form bean configuration to identify the supported properties.
    iOrder - Variable in class org.apache.struts.action.ActionMessages.ActionMessageItem
    The position in the list of messages.
    isBoundaryEncountered() - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
    Returns whether or not the boundary has been encountered while reading data.
    isCancelled(HttpServletRequest) - Method in class org.apache.struts.action.Action
    Returns true if the current form's cancel button was pressed.
    isDirect() - Method in class org.apache.struts.taglib.template.util.Content
    Deprecated. Use Tiles instead.
    isDynaAssignable(Class, Class) - Method in class org.apache.struts.action.DynaActionForm
    Indicates if an object of the source class is assignable to the destination class.
    isElementFile() - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
    Gets whether or not the current form element being read is a file.
    isEmpty() - Method in class org.apache.struts.action.ActionMessages
    Return true if there are no messages recorded in this collection, or false otherwise.
    isEndOfStream() - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
    Whether or not an EOF has been read on the stream.
    isErrorIgnored - Variable in class org.apache.struts.taglib.tiles.GetAttributeTag
    Do we ignore error if attribute is not found.
    isErrorIgnored - Variable in class org.apache.struts.taglib.tiles.ImportAttributeTag
    Are errors ignored.
    isErrorIgnored - Variable in class org.apache.struts.taglib.tiles.UseAttributeTag
    Are errors ignored.
    isErrorIgnored - Variable in class org.apache.struts.taglib.tiles.InsertTag
    Are errors ignored.
    isExtending() - Method in class org.apache.struts.tiles.xmlDefinition.XmlDefinition
    Get extends flag.
    isFatal() - Method in class org.apache.struts.plugins.ModuleConfigVerifier
    Return the "configuation errors are fatal" flag.
    isFile - Variable in class org.apache.struts.upload.MultipartElement
    Whether or not this element is a file.
    isFile() - Method in class org.apache.struts.upload.MultipartElement
    Is this element a file.
    isFinalBoundaryEncountered() - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
    Returns whether or not the final boundary has been encountered.
    ismap - Variable in class org.apache.struts.taglib.html.ImgTag
    Server-side image map declaration.
    isMatched(String) - Method in class org.apache.struts.taglib.html.SelectTag
    Does the specified value match one of those we are looking for?
    isMaxLengthExceeded() - Method in class org.apache.struts.upload.MultipartIterator
    Whether or not the maximum length has been exceeded by the client.
    isMaxLengthMet() - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
    Whether or not the maximum length has been met.
    isMessage(String) - Method in class org.apache.struts.config.ConfigHelper
    Return true if a message string for the specified message key is present for the user's Locale.
    isMessage(String) - Method in interface org.apache.struts.config.ConfigHelperInterface
    Return true if a message string for the specified message key is present for the user's Locale.
    isModuleAware() - Method in class org.apache.struts.tiles.DefinitionsFactoryConfig
    Get the module aware flag.
    isModuleAware() - Method in class org.apache.struts.tiles.TilesPlugin
    Get the module aware flag.
    isPresent(Locale, String) - Method in class org.apache.struts.util.MessageResources
    Return true if there is a defined message for the specified key in the specified Locale.
    isPresent(String) - Method in class org.apache.struts.util.MessageResources
    Return true if there is a defined message for the specified key in the system default locale.
    isRequestedSessionIdFromCookie() - Method in class org.apache.struts.upload.MultipartRequestWrapper
    This method returns false.
    isRequestedSessionIdFromUrl() - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    isRequestedSessionIdFromURL() - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    isRequestedSessionIdValid() - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    isSecure() - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    isSelected() - Method in class org.apache.struts.util.ImageButtonBean
    A convenience method to determine whether or not the corresponding image element was selected.
    isString(Object) - Static method in class org.apache.struts.validator.FieldChecks
    Return true if the specified object is a String or a null value.
    isTilesUtilImplSet() - Static method in class org.apache.struts.tiles.TilesUtil
    Getter to know if the underlying implementation is already set to another value than the default value.
    isTokenValid(HttpServletRequest) - Method in class org.apache.struts.util.TokenProcessor
    Return true if there is a transaction token stored in the user's current session, and the value submitted as a request parameter with this action matches it.
    isTokenValid(HttpServletRequest) - Method in class org.apache.struts.action.Action
    Return true if there is a transaction token stored in the user's current session, and the value submitted as a request parameter with this action matches it.
    isTokenValid(HttpServletRequest, boolean) - Method in class org.apache.struts.util.TokenProcessor
    Return true if there is a transaction token stored in the user's current session, and the value submitted as a request parameter with this action matches it.
    isTokenValid(HttpServletRequest, boolean) - Method in class org.apache.struts.action.Action
    Return true if there is a transaction token stored in the user's current session, and the value submitted as a request parameter with this action matches it.
    isUserInRole(String) - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    isValidatingParser - Variable in class org.apache.struts.tiles.xmlDefinition.I18nFactorySet
    Do we want validating parser.
    isVisited - Variable in class org.apache.struts.tiles.xmlDefinition.XmlDefinition
    Used for resolving inheritance.
    isXhtml() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Allows HTML tags to find out if they're nested within an %lt;html:html> tag that has xhtml set to true.
    isXhtml() - Method in class org.apache.struts.taglib.html.JavascriptValidatorTag
    Returns true if this is an xhtml page.
    isXhtml() - Method in class org.apache.struts.taglib.html.FormTag
    Returns true if this tag should render as xhtml.
    isXhtml(PageContext) - Static method in class org.apache.struts.util.RequestUtils
    Returns true if the custom tags are in XHTML mode.
    IterateTag - class org.apache.struts.taglib.logic.IterateTag.
    Custom tag that iterates the elements of a collection, which can be either an attribute or the property of an attribute.
    IterateTag() - Constructor for class org.apache.struts.taglib.logic.IterateTag
     
    IterateTei - class org.apache.struts.taglib.logic.IterateTei.
    Implementation of TagExtraInfo for the iterate tag, identifying the scripting object(s) to be made visible.
    IterateTei() - Constructor for class org.apache.struts.taglib.logic.IterateTei
     
    iterator - Variable in class org.apache.struts.taglib.logic.IterateTag
    Iterator of the elements of this collection, while we are actually running.
    iterator - Variable in class org.apache.struts.taglib.html.MessagesTag
    Iterator of the elements of this error collection, while we are actually running.
    IteratorAdapter - class org.apache.struts.util.IteratorAdapter.
    Deprecated. Use commons-collections' IteratorUtils.asIterator(Enumeration).
    IteratorAdapter(Enumeration) - Constructor for class org.apache.struts.util.IteratorAdapter
    Deprecated.  

    J

    JavascriptValidatorTag - class org.apache.struts.taglib.html.JavascriptValidatorTag.
    Custom tag that generates JavaScript for client side validation based on the validation rules loaded by the ValidatorPlugIn defined in the struts-config.xml file.
    JavascriptValidatorTag() - Constructor for class org.apache.struts.taglib.html.JavascriptValidatorTag
     

    K

    key - Variable in class org.apache.struts.taglib.html.OptionTag
    The key used to look up the text displayed to the user for this option, if any.
    key - Variable in class org.apache.struts.taglib.bean.MessageTag
    The message key of the message to be retrieved.
    key - Variable in class org.apache.struts.config.ExceptionConfig
    The message resources key specifying the error message associated with this exception.
    key - Variable in class org.apache.struts.config.MessageResourcesConfig
    The servlet context attributes key under which this MessageResources instance is stored.
    key - Variable in class org.apache.struts.config.DataSourceConfig
    The servlet context attribute key under which this data source is stored and made available.
    key - Variable in class org.apache.struts.action.ActionMessage
    The message key for this message.
    keyMethodMap - Variable in class org.apache.struts.actions.LookupDispatchAction
    Resource key to method name lookup.

    L

    label - Variable in class org.apache.struts.util.LabelValueBean
    The property which supplies the option label visible to the end user.
    label - Variable in class org.apache.struts.taglib.html.OptionsCollectionTag
    The name of the bean property containing the label.
    label() - Method in class org.apache.struts.taglib.html.ResetTag
    Return the label value to display in the reset button.
    labelName - Variable in class org.apache.struts.taglib.html.OptionsTag
    The name of the bean containing the labels collection.
    labelProperty - Variable in class org.apache.struts.taglib.html.OptionsTag
    The bean property containing the labels collection.
    LabelValueBean - class org.apache.struts.util.LabelValueBean.
    A simple JavaBean to represent label-value pairs.
    LabelValueBean(String, String) - Constructor for class org.apache.struts.util.LabelValueBean
    Construct an instance with the supplied property values.
    length - Variable in class org.apache.struts.taglib.logic.IterateTag
    The length value or attribute name (<=0 means no limit).
    lengthCount - Variable in class org.apache.struts.taglib.logic.IterateTag
    The number of elements we have already rendered.
    lengthValue - Variable in class org.apache.struts.taglib.logic.IterateTag
    The actual length value (calculated in the start tag).
    LessEqualTag - class org.apache.struts.taglib.logic.LessEqualTag.
    Evaluate the nested body content of this tag if the specified variable is less than or equal to the specified value.
    LessEqualTag() - Constructor for class org.apache.struts.taglib.logic.LessEqualTag
     
    LessThanTag - class org.apache.struts.taglib.logic.LessThanTag.
    Evaluate the nested body content of this tag if the specified variable is less than the specified value.
    LessThanTag() - Constructor for class org.apache.struts.taglib.logic.LessThanTag
     
    line - Variable in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    lineEnd - Static variable in class org.apache.struts.taglib.html.ErrorsTag
    The line ending string.
    lineEnd - Static variable in class org.apache.struts.taglib.html.JavascriptValidatorTag
    The line ending string.
    lineEnd - Static variable in class org.apache.struts.taglib.html.FormTag
    The line ending string.
    lineHasCarriage - Variable in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    lineHasNewline - Variable in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    lineIndex - Variable in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    lineLength - Variable in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    lineSize - Variable in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    link - Variable in class org.apache.struts.tiles.beans.SimpleMenuItem
     
    link(String) - Method in class org.apache.struts.config.ConfigHelper
    Wrapper for getLink(String)
    linkName - Variable in class org.apache.struts.taglib.html.LinkTag
    The link name for named links.
    linkOldPropertyNames(Map) - Static method in class org.apache.struts.tiles.DefinitionsFactoryConfig
    Link old property names to new property names.
    LinkTag - class org.apache.struts.taglib.html.LinkTag.
    Generate a URL-encoded hyperlink to the specified URI.
    LinkTag() - Constructor for class org.apache.struts.taglib.html.LinkTag
     
    list - Variable in class org.apache.struts.tiles.xmlDefinition.XmlListAttribute
    List.
    list - Variable in class org.apache.struts.taglib.tiles.PutListTag
    The list itself.
    list - Variable in class org.apache.struts.action.ActionMessages.ActionMessageItem
    The list of ActionMessages.
    loaded - Variable in class org.apache.struts.tiles.xmlDefinition.I18nFactorySet
    Collection of already loaded definitions set, referenced by their suffix.
    loadLocale(String) - Method in class org.apache.struts.util.PropertyMessageResources
    Load the messages associated with the specified Locale key.
    locale - Variable in class org.apache.struts.taglib.html.ErrorsTag
    The session attribute key for our locale.
    locale - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
    The name of the session attribute key for our locale.
    locale - Variable in class org.apache.struts.taglib.html.MessagesTag
    The session attribute key for our locale.
    locale - Variable in class org.apache.struts.taglib.html.HtmlTag
    Should we set the current Locale for this user if needed?
    locale - Variable in class org.apache.struts.taglib.html.OptionTag
    The name of the attribute containing the Locale to be used for looking up internationalized messages.
    locale - Variable in class org.apache.struts.config.ControllerConfig
    Should we store a Locale object in the user's session if needed?
    LOCALE_KEY - Static variable in class org.apache.struts.Globals
    The session attributes key under which the user's selected java.util.Locale is stored, if any.
    LOCALE_KEY - Static variable in interface org.apache.struts.taglib.tiles.ComponentConstants
     
    LOCALE_KEY - Static variable in class org.apache.struts.action.Action
    Deprecated. Replaced by Globals.LOCALE_KEY
    localeKey - Variable in class org.apache.struts.taglib.bean.MessageTag
    The session scope key under which our Locale is stored.
    localeKey - Variable in class org.apache.struts.taglib.bean.WriteTag
    The session scope key under which our Locale is stored.
    localeKey(Locale) - Method in class org.apache.struts.util.MessageResources
    Compute and return a key to be used in caching information by a Locale.
    localeMap - Variable in class org.apache.struts.actions.LookupDispatchAction
    Reverse lookup map from resource value to resource key.
    locales - Variable in class org.apache.struts.util.PropertyMessageResources
    The set of locale keys for which we have already loaded messages, keyed by the value calculated in localeKey().
    location - Variable in class org.apache.struts.taglib.logic.MatchTag
    The location where the match must exist (start or end), or null for anywhere.
    lock - Static variable in class org.apache.struts.action.DynaActionFormClass
    The lockable object we can synchronize on, even if dynaClasses is null,
    log - Static variable in class org.apache.struts.validator.ValidatorForm
    Commons Logging instance.
    log - Static variable in class org.apache.struts.validator.DynaValidatorForm
    Commons Logging instance.
    log - Static variable in class org.apache.struts.validator.DynaValidatorActionForm
    Commons Logging instance.
    log - Static variable in class org.apache.struts.validator.ValidatorActionForm
    Commons Logging instance.
    log - Static variable in class org.apache.struts.validator.FieldChecks
    Commons Logging instance.
    log - Static variable in class org.apache.struts.validator.ValidatorPlugIn
    Commons Logging instance.
    log - Static variable in class org.apache.struts.util.PropertyMessageResources
    The Log instance for this class.
    log - Static variable in class org.apache.struts.util.MessageResources
    Commons Logging instance.
    log - Static variable in class org.apache.struts.util.RequestUtils
    Commons Logging instance.
    log - Static variable in class org.apache.struts.upload.CommonsMultipartRequestHandler
    Commons Logging instance.
    log - Static variable in class org.apache.struts.upload.DiskMultipartRequestHandler
    Commons Logging instance.
    log - Static variable in class org.apache.struts.tiles.TilesUtil
    Commons Logging instance.
    log - Variable in class org.apache.struts.tiles.TilesUtilImpl
    Commons Logging instance.
    log - Static variable in class org.apache.struts.tiles.TilesServlet
    Deprecated. Commons Logging instance.
    log - Static variable in class org.apache.struts.tiles.TilesPlugin
    Commons Logging instance.
    log - Static variable in class org.apache.struts.tiles.DefinitionsUtil
    Deprecated. Commons Logging instance.
    log - Static variable in class org.apache.struts.tiles.ComponentDefinition
    Commons Logging instance.
    log - Static variable in class org.apache.struts.tiles.TilesRequestProcessor
    Commons Logging instance.
    log - Static variable in class org.apache.struts.tiles.xmlDefinition.I18nFactorySet
    Commons Logging instance.
    log - Static variable in class org.apache.struts.tiles.xmlDefinition.XmlDefinition
    Commons Logging instance.
    log - Static variable in class org.apache.struts.tiles.actions.DefinitionDispatcherAction
    Commons Logging instance.
    log - Static variable in class org.apache.struts.taglib.tiles.InsertTag
    Commons Logging instance.
    log - Static variable in class org.apache.struts.taglib.html.BaseHandlerTag
    Commons Logging instance.
    log - Static variable in class org.apache.struts.taglib.html.MessagesTag
    Commons Logging instance.
    log - Static variable in class org.apache.struts.actions.DispatchAction
    Commons Logging instance.
    log - Static variable in class org.apache.struts.actions.SwitchAction
    Commons Logging instance.
    log - Static variable in class org.apache.struts.action.ActionServlet
    Commons Logging instance.
    log - Static variable in class org.apache.struts.action.RequestProcessor
    Commons Logging instance.
    LOG - Static variable in class org.apache.struts.util.MessageResourcesFactory
    Commons Logging instance.
    LOG - Static variable in class org.apache.struts.config.ModuleConfigFactory
    Commons Logging instance.
    log(String) - Method in class org.apache.struts.plugins.ModuleConfigVerifier
    Log the specified message to our servlet context log, after a header including the module prefix.
    log(String) - Method in class org.apache.struts.validator.ValidatorForm
    Deprecated. Use common-logging to log debug messages.
    log(String) - Method in class org.apache.struts.validator.DynaValidatorForm
    Deprecated. Use common-logging, or other logging implementation to log debug messages.
    log(String) - Method in class org.apache.struts.util.MessageResources
    Log a message to the Writer that has been configured for our use.
    log(String) - Method in class org.apache.struts.action.RequestProcessor
    Log the specified message to the servlet context log for this web application.
    log(String) - Method in class org.apache.struts.action.ActionServletWrapper
    Log message.
    log(String, int) - Method in class org.apache.struts.action.ActionServlet
    Deprecated. Use commons-logging instead.
    log(String, int) - Method in class org.apache.struts.action.ActionServletWrapper
    Deprecated. Logging should now use the commons logging
    log(String, Throwable) - Method in class org.apache.struts.validator.ValidatorForm
    Deprecated. Use common-logging to log debug messages.
    log(String, Throwable) - Method in class org.apache.struts.validator.DynaValidatorForm
    Deprecated. Use common-logging, or other logging implementation to log debug messages.
    log(String, Throwable) - Method in class org.apache.struts.util.MessageResources
    Log a message and exception to the Writer that has been configured for our use.
    log(String, Throwable) - Method in class org.apache.struts.action.RequestProcessor
    Log the specified message and exception to the servlet context log for this web application.
    LONG_COMPARE - Static variable in class org.apache.struts.taglib.logic.CompareTagBase
    We will do a long/int comparison.
    longdesc - Variable in class org.apache.struts.taglib.html.FrameTag
    URI of a long description of this frame (complements title).
    lookup() - Method in class org.apache.struts.taglib.html.FormTag
    Look up values for the name, scope, and type properties if necessary.
    lookup(PageContext, String, String) - Static method in class org.apache.struts.util.RequestUtils
    Locate and return the specified bean, from an optionally specified scope, in the specified page context.
    lookup(PageContext, String, String, String) - Static method in class org.apache.struts.util.RequestUtils
    Locate and return the specified property of the specified bean, from an optionally specified scope, in the specified page context.
    LookupDispatchAction - class org.apache.struts.actions.LookupDispatchAction.
    An abstract Action that dispatches to the subclass mapped execute method.
    LookupDispatchAction() - Constructor for class org.apache.struts.actions.LookupDispatchAction
     
    lookupProperty(String, String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Searches all scopes for the bean and calls BeanUtils.getProperty() with the given arguments and converts any exceptions into JspException.
    loopTagStatusClass - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
     
    loopTagStatusGetIndex - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
     
    loopTagSupportClass - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
     
    loopTagSupportGetStatus - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
     
    lowsrc - Variable in class org.apache.struts.taglib.html.ImgTag
    Deprecated. This is not defined in the HTML 4.01 spec and will be removed in a future version of Struts.

    M

    main(String[]) - Static method in class org.apache.struts.tiles.xmlDefinition.XmlParser
    Main method to check file syntax.
    makeDefinitionsFactoryAccessible(DefinitionsFactory, ServletContext) - Method in class org.apache.struts.tiles.TilesUtilImpl
    Make definition factory accessible to Tags.
    makeDefinitionsFactoryAccessible(DefinitionsFactory, ServletContext) - Method in class org.apache.struts.tiles.TilesUtilStrutsModulesImpl
    Make definition factory accessible to tags.
    makeDefinitionsFactoryAccessible(DefinitionsFactory, ServletContext) - Static method in class org.apache.struts.tiles.DefinitionsUtil
    Deprecated. Use TilesUtil.createDefinitionsFactory(ServletContext, DefinitionsFactoryConfig)
    map - Variable in class org.apache.struts.taglib.template.InsertTag
    Deprecated. Each insert tag has a map of content.
    map - Variable in class org.apache.struts.taglib.template.util.ContentMap
    Deprecated. The map.
    mapping - Variable in class org.apache.struts.upload.CommonsMultipartRequestHandler
    The action mapping with which this handler is associated.
    mapping - Variable in class org.apache.struts.upload.DiskMultipartRequestHandler
    The ActionMapping instance used for this class.
    mapping - Variable in class org.apache.struts.taglib.html.FormTag
    The ActionMapping defining where we will be submitting this form
    mapping - Variable in class org.apache.struts.taglib.bean.StrutsTag
    The name of the ActionMapping object to be exposed.
    MAPPING_KEY - Static variable in class org.apache.struts.Globals
    The request attributes key under which our org.apache.struts.ActionMapping instance is passed.
    MAPPING_KEY - Static variable in class org.apache.struts.action.Action
    Deprecated. Replaced by Globals.MAPPING_KEY
    mappings - Variable in class org.apache.struts.action.ActionMappings
    Deprecated. The collection of ActionMapping instances, keyed by request path.
    MAPPINGS_KEY - Static variable in class org.apache.struts.Globals
    Deprecated. Replaced by collection in ModuleConfig
    MAPPINGS_KEY - Static variable in class org.apache.struts.action.Action
    Deprecated. Replaced by collection in ModuleConfig
    marginheight - Variable in class org.apache.struts.taglib.html.FrameTag
    The margin height in pixels, or zero for no setting.
    marginwidth - Variable in class org.apache.struts.taglib.html.FrameTag
    The margin width in pixels, or zero for no setting.
    mark(int) - Method in class org.apache.struts.upload.BufferedMultipartInputStream
    This method calls on the mark() method of the underlying InputStream
    mark(int) - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
    Marks the underlying stream.
    markSupported() - Method in class org.apache.struts.upload.BufferedMultipartInputStream
    This method calls on the markSupported() method of the underlying InputStream
    match - Variable in class org.apache.struts.taglib.html.SelectTag
    The actual values we will match against, calculated in doStartTag().
    matchedBoundaryBytes - Variable in class org.apache.struts.upload.MultipartValueStream
    how many curretly matched boundary bytes?
    MatchTag - class org.apache.struts.taglib.logic.MatchTag.
    Evalute the nested body content of this tag if the specified value is a substring of the specified variable.
    MatchTag() - Constructor for class org.apache.struts.taglib.logic.MatchTag
     
    MAX_BUNDLES_SEARCHED - Static variable in class org.apache.struts.tiles.xmlDefinition.I18nFactorySet
    Maximum length of one branch of the resource search path tree.
    maxFileSize - Variable in class org.apache.struts.config.ControllerConfig
    The maximum file size to process for file uploads.
    maxlength - Variable in class org.apache.struts.taglib.html.BaseInputTag
    The maximum number of characters allowed, or negative for no limit.
    maxLength - Variable in class org.apache.struts.upload.MultipartBoundaryInputStream
    The maximum length in bytes to read from the stream at a time, or -1 for unlimited length.
    maxLengthExceeded - Variable in class org.apache.struts.upload.MultipartIterator
    Whether the maximum length has been exceeded.
    MaxLengthExceededException - exception org.apache.struts.upload.MaxLengthExceededException.
    This exception is thrown when multipart post data exceeds the maximum value set
    MaxLengthExceededException() - Constructor for class org.apache.struts.upload.MaxLengthExceededException
     
    MaxLengthExceededException(long) - Constructor for class org.apache.struts.upload.MaxLengthExceededException
     
    maxLengthMet - Variable in class org.apache.struts.upload.BufferedMultipartInputStream
    Whether or not bytes up to the maximum length have been read
    maxLengthMet - Variable in class org.apache.struts.upload.MultipartBoundaryInputStream
    Whether or not the maximum length has been met.
    maxLengthMet() - Method in class org.apache.struts.upload.BufferedMultipartInputStream
     
    maxSize - Variable in class org.apache.struts.upload.BufferedMultipartInputStream
    The maximum allowed size for the multipart data, or -1 for an unlimited maximum file length
    maxSize - Variable in class org.apache.struts.upload.MultipartIterator
    The maximum file size in bytes allowed.
    memFileSize - Variable in class org.apache.struts.config.ControllerConfig
    The maximum file size to retain in memory.
    MenuItem - interface org.apache.struts.tiles.beans.MenuItem.
    Interface for MenuItems.
    message - Variable in class org.apache.struts.upload.MaxLengthExceededException
     
    message - Variable in class org.apache.struts.upload.ContentLengthExceededException
     
    message - Variable in class org.apache.struts.taglib.logic.MessagesPresentTag
    If this is set to 'true', then the Globals.MESSAGE_KEY will be used to retrieve the messages from scope.
    message - Variable in class org.apache.struts.taglib.html.MessagesTag
    If this is set to 'true', then the Globals.MESSAGE_KEY will be used to retrieve the messages from scope.
    MESSAGE_CANNOT_RETRIEVE_BOUNDARY - Static variable in class org.apache.struts.upload.MultipartIterator
    The exception message for when the boundary of a multipart request can't be determined.
    MESSAGE_INVALID_START - Static variable in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    MESSAGE_KEY - Static variable in class org.apache.struts.Globals
    The request attributes key under which your action should store an org.apache.struts.action.ActionMessages object, if you are using the corresponding custom tag library elements.
    MESSAGE_KEY - Static variable in class org.apache.struts.action.Action
    Deprecated. Replaced by Globals.MESSAGE_KEY
    message(PageContext, String, String, String) - Static method in class org.apache.struts.util.RequestUtils
    Look up and return a message string, based on the specified parameters.
    message(PageContext, String, String, String, Object[]) - Static method in class org.apache.struts.util.RequestUtils
    Look up and return a message string, based on the specified parameters.
    message(String) - Method in class org.apache.struts.config.ConfigHelper
    Wrapper for getMessage(String)
    message(String, Object[]) - Method in class org.apache.struts.config.ConfigHelper
    Wrapper for getMessage(String,Object[])
    message(String, String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Return the text specified by the literal value or the message resources key, if any; otherwise return null.
    messageKey(Locale, String) - Method in class org.apache.struts.util.MessageResources
    Compute and return a key to be used in caching information by Locale and message key.
    messageKey(String, String) - Method in class org.apache.struts.util.MessageResources
    Compute and return a key to be used in caching information by locale key and message key.
    messageResources - Static variable in class org.apache.struts.taglib.html.MessagesTag
    The message resources for this package.
    messageResources - Variable in class org.apache.struts.config.impl.ModuleConfigImpl
    The set of message resources configurations for this module, if any, keyed by the key property.
    MessageResources - class org.apache.struts.util.MessageResources.
    General purpose abstract class that describes an API for retrieving Locale-sensitive messages from underlying resource locations of an unspecified design, and optionally utilizing the MessageFormat class to produce internationalized messages with parametric replacement.
    MessageResources(MessageResourcesFactory, String) - Constructor for class org.apache.struts.util.MessageResources
    Construct a new MessageResources according to the specified parameters.
    MessageResources(MessageResourcesFactory, String, boolean) - Constructor for class org.apache.struts.util.MessageResources
    Construct a new MessageResources according to the specified parameters.
    MessageResourcesConfig - class org.apache.struts.config.MessageResourcesConfig.
    A JavaBean representing the configuration information of a <message-resources> element in a Struts configuration file.
    MessageResourcesConfig() - Constructor for class org.apache.struts.config.MessageResourcesConfig
     
    MessageResourcesFactory - class org.apache.struts.util.MessageResourcesFactory.
    Factory for MessageResources instances.
    MessageResourcesFactory() - Constructor for class org.apache.struts.util.MessageResourcesFactory
     
    messages - Static variable in class org.apache.struts.util.ResponseUtils
    The message resources for this package.
    messages - Variable in class org.apache.struts.util.PropertyMessageResources
    The cache of messages we have accumulated over time, keyed by the value calculated in messageKey().
    messages - Static variable in class org.apache.struts.util.RequestUtils
    The message resources for this package.
    messages - Static variable in class org.apache.struts.taglib.logic.IterateTag
    The message resources for this package.
    messages - Static variable in class org.apache.struts.taglib.logic.ForwardTag
    The message resources for this package.
    messages - Static variable in class org.apache.struts.taglib.logic.ConditionalTagBase
    The message resources for this package.
    messages - Static variable in class org.apache.struts.taglib.logic.RedirectTag
    The message resources for this package.
    messages - Static variable in class org.apache.struts.taglib.logic.CompareTagBase
    The message resources for this package.
    messages - Static variable in class org.apache.struts.taglib.html.OptionsTag
    The message resources for this package.
    messages - Static variable in class org.apache.struts.taglib.html.OptionsCollectionTag
    The message resources for this package.
    messages - Static variable in class org.apache.struts.taglib.html.ErrorsTag
    The message resources for this package.
    messages - Static variable in class org.apache.struts.taglib.html.BaseHandlerTag
    The message resources for this package.
    messages - Static variable in class org.apache.struts.taglib.html.LinkTag
    The message resources for this package.
    messages - Static variable in class org.apache.struts.taglib.html.SelectTag
    The message resources for this package.
    messages - Static variable in class org.apache.struts.taglib.html.CancelTag
    The message resources for this package.
    messages - Static variable in class org.apache.struts.taglib.html.MultiboxTag
    The message resources for this package.
    messages - Static variable in class org.apache.struts.taglib.html.BaseInputTag
    The message resources for this package.
    messages - Static variable in class org.apache.struts.taglib.html.BaseTag
    The message resources for this package.
    messages - Static variable in class org.apache.struts.taglib.html.CheckboxTag
    The message resources for this package.
    messages - Static variable in class org.apache.struts.taglib.html.ImgTag
    The message resources for this package.
    messages - Static variable in class org.apache.struts.taglib.html.HtmlTag
    The message resources for this package.
    messages - Static variable in class org.apache.struts.taglib.html.FormTag
    The message resources for this package.
    messages - Static variable in class org.apache.struts.taglib.html.SubmitTag
    The message resources for this package.
    messages - Static variable in class org.apache.struts.taglib.html.ResetTag
    The message resources for this package.
    messages - Static variable in class org.apache.struts.taglib.html.OptionTag
    The message resources for this package.
    messages - Static variable in class org.apache.struts.taglib.html.RadioTag
    The message resources for this package.
    messages - Static variable in class org.apache.struts.taglib.bean.DefineTag
    The message resources for this package.
    messages - Static variable in class org.apache.struts.taglib.bean.MessageTag
    The message resources for this package.
    messages - Static variable in class org.apache.struts.taglib.bean.WriteTag
    The message resources for this package.
    messages - Static variable in class org.apache.struts.taglib.bean.IncludeTag
    The message resources for this package.
    messages - Static variable in class org.apache.struts.taglib.bean.StrutsTag
    The message resources for this package.
    messages - Static variable in class org.apache.struts.taglib.bean.SizeTag
    The message resources for this package.
    messages - Static variable in class org.apache.struts.taglib.bean.ResourceTag
    The message resources for this package.
    messages - Static variable in class org.apache.struts.taglib.bean.ParameterTag
    The message resources for this package.
    messages - Static variable in class org.apache.struts.taglib.bean.PageTag
    The message resources for this package.
    messages - Static variable in class org.apache.struts.taglib.bean.HeaderTag
    The message resources for this package.
    messages - Static variable in class org.apache.struts.taglib.bean.CookieTag
    The message resources for this package.
    messages - Static variable in class org.apache.struts.actions.ForwardAction
    The message resources for this package.
    messages - Static variable in class org.apache.struts.actions.DispatchAction
    The message resources for this package.
    messages - Static variable in class org.apache.struts.actions.SwitchAction
    The message resources for this package.
    messages - Static variable in class org.apache.struts.actions.IncludeAction
    The message resources for this package.
    messages - Variable in class org.apache.struts.action.ActionMessages
    The accumulated set of ActionMessage objects (represented as an ArrayList) for each property, keyed by property name.
    MESSAGES_KEY - Static variable in class org.apache.struts.Globals
    The base of the context attributes key under which our module MessageResources will be stored.
    MESSAGES_KEY - Static variable in class org.apache.struts.action.Action
    Deprecated. Use Globals.MESSAGES_KEY instead.
    MessagesNotPresentTag - class org.apache.struts.taglib.logic.MessagesNotPresentTag.
    Evalute the nested body content of this tag if the specified value is not present for this request.
    MessagesNotPresentTag() - Constructor for class org.apache.struts.taglib.logic.MessagesNotPresentTag
     
    MessagesPresentTag - class org.apache.struts.taglib.logic.MessagesPresentTag.
    Evalute to true if an ActionMessages class or a class that can be converted to an ActionMessages class is in request scope under the specified key and there is at least one message in the class or for the property specified.
    MessagesPresentTag() - Constructor for class org.apache.struts.taglib.logic.MessagesPresentTag
     
    MessagesTag - class org.apache.struts.taglib.html.MessagesTag.
    Custom tag that iterates the elements of a message collection.
    MessagesTag() - Constructor for class org.apache.struts.taglib.html.MessagesTag
     
    MessagesTei - class org.apache.struts.taglib.html.MessagesTei.
    Implementation of TagExtraInfo for the messages tag, identifying the scripting object(s) to be made visible.
    MessagesTei() - Constructor for class org.apache.struts.taglib.html.MessagesTei
     
    MessageTag - class org.apache.struts.taglib.bean.MessageTag.
    Custom tag that retrieves an internationalized messages string (with optional parametric replacement) from the ActionResources object stored as a context attribute by our associated ActionServlet implementation.
    MessageTag() - Constructor for class org.apache.struts.taglib.bean.MessageTag
     
    method - Variable in class org.apache.struts.taglib.html.FormTag
    The request method used when submitting this form.
    methodName - Variable in class org.apache.struts.taglib.html.JavascriptValidatorTag
    This will be used as is for the JavaScript validation method name if it has a value.
    methods - Variable in class org.apache.struts.actions.DispatchAction
    The set of Method objects we have introspected for this class, keyed by method name.
    MODULE_KEY - Static variable in class org.apache.struts.Globals
    The base of the context attributes key under which our ModuleConfig data structure will be stored.
    moduleAware - Variable in class org.apache.struts.tiles.DefinitionsFactoryConfig
    Specifies whether the factory is "module-aware".
    moduleAware - Variable in class org.apache.struts.tiles.TilesPlugin
    Is the factory module aware ?
    moduleConfig - Variable in class org.apache.struts.taglib.html.FormTag
    The module configuration for our module.
    moduleConfig - Variable in class org.apache.struts.config.FormBeanConfig
    The ModuleConfig with which this form bean definition is associated.
    moduleConfig - Variable in class org.apache.struts.config.ActionConfig
    The module configuration with which we are associated.
    moduleConfig - Variable in class org.apache.struts.action.RequestProcessor
    The ModuleConfiguration we are associated with.
    ModuleConfig - interface org.apache.struts.config.ModuleConfig.
    The collection of static configuration information that describes a Struts-based module.
    ModuleConfigFactory - class org.apache.struts.config.ModuleConfigFactory.
    A factory interface for creating ModuleConfigs.
    ModuleConfigFactory() - Constructor for class org.apache.struts.config.ModuleConfigFactory
     
    ModuleConfigImpl - class org.apache.struts.config.impl.ModuleConfigImpl.
    The collection of static configuration information that describes a Struts-based module.
    ModuleConfigImpl(ModuleConfigImpl) - Constructor for class org.apache.struts.config.impl.ModuleConfigImpl
    Deprecated. Only used while we are deprecating ApplicationConfig to insure maximum compatability.
    ModuleConfigImpl(String) - Constructor for class org.apache.struts.config.impl.ModuleConfigImpl
    Construct an ModuleConfigImpl object according to the specified parameter values.
    ModuleConfigVerifier - class org.apache.struts.plugins.ModuleConfigVerifier.
    Convenient implementation of PlugIn that performs as many verification tests on the information stored in the ModuleConfig for this application module as is practical.
    ModuleConfigVerifier() - Constructor for class org.apache.struts.plugins.ModuleConfigVerifier
     
    ModuleException - exception org.apache.struts.util.ModuleException.
    Used for specialized exception handling.
    ModuleException(String) - Constructor for class org.apache.struts.util.ModuleException
    Construct an module exception with no replacement values.
    ModuleException(String, Object) - Constructor for class org.apache.struts.util.ModuleException
    Construct an module exception with the specified replacement values.
    ModuleException(String, Object[]) - Constructor for class org.apache.struts.util.ModuleException
    Construct an action error with the specified replacement values.
    ModuleException(String, Object, Object) - Constructor for class org.apache.struts.util.ModuleException
    Construct an module exception with the specified replacement values.
    ModuleException(String, Object, Object, Object) - Constructor for class org.apache.struts.util.ModuleException
    Construct an module exception with the specified replacement values.
    ModuleException(String, Object, Object, Object, Object) - Constructor for class org.apache.struts.util.ModuleException
    Construct an module exception with the specified replacement values.
    MultiboxTag - class org.apache.struts.taglib.html.MultiboxTag.
    Tag for input fields of type "checkbox".
    MultiboxTag() - Constructor for class org.apache.struts.taglib.html.MultiboxTag
     
    MULTIPART_KEY - Static variable in class org.apache.struts.Globals
    The request attributes key under which our multipart class is stored.
    MULTIPART_KEY - Static variable in class org.apache.struts.action.Action
    Deprecated. Use Globals.MULTIPART_KEY instead.
    MultipartBoundaryInputStream - class org.apache.struts.upload.MultipartBoundaryInputStream.
    This class encapsulates parsing functionality for RFC1867, multipart/form-data.
    MultipartBoundaryInputStream() - Constructor for class org.apache.struts.upload.MultipartBoundaryInputStream
     
    multipartClass - Variable in class org.apache.struts.config.ActionConfig
    Fully qualified Java class name of the MultipartRequestHandler implementation class used to process multi-part request data for this Action.
    multipartClass - Variable in class org.apache.struts.config.ControllerConfig
    The fully qualified Java class name of the MultipartRequestHandler class to be used.
    MultipartElement - class org.apache.struts.upload.MultipartElement.
    This class represents an element in a multipart request.
    MultipartElement(String, String) - Constructor for class org.apache.struts.upload.MultipartElement
    Constructor for a text element.
    MultipartElement(String, String, String, byte[]) - Constructor for class org.apache.struts.upload.MultipartElement
    Deprecated. Use the constructor that takes an File as an argument as opposed to a byte array argument, which can cause memory problems.
    MultipartElement(String, String, String, File) - Constructor for class org.apache.struts.upload.MultipartElement
    Constructor for a file element.
    MultipartIterator - class org.apache.struts.upload.MultipartIterator.
    The MultipartIterator class is responsible for reading the input data of a multipart request and splitting it up into input elements, wrapped inside of a MultipartElement for easy definition.
    MultipartIterator(HttpServletRequest) - Constructor for class org.apache.struts.upload.MultipartIterator
    Constructs a MultipartIterator with a default buffer size and no file size limit
    MultipartIterator(HttpServletRequest, int) - Constructor for class org.apache.struts.upload.MultipartIterator
    Constructs a MultipartIterator with the specified buffer size and no file size limit
    MultipartIterator(HttpServletRequest, int, long) - Constructor for class org.apache.struts.upload.MultipartIterator
    Constructs a MultipartIterator with the specified buffer size and the specified file size limit in bytes
    MultipartIterator(HttpServletRequest, int, long, String) - Constructor for class org.apache.struts.upload.MultipartIterator
     
    multipartRequestHandler - Variable in class org.apache.struts.action.ActionForm
    The MultipartRequestHandler for this form, can be null.
    MultipartRequestHandler - interface org.apache.struts.upload.MultipartRequestHandler.
    MultipartRequestHandler provides an standard interface for struts to deal with file uploads from forms with enctypes of "multipart/form-data".
    MultipartRequestWrapper - class org.apache.struts.upload.MultipartRequestWrapper.
    This class functions as a wrapper around HttpServletRequest to provide working getParameter methods for multipart requests.
    MultipartRequestWrapper(HttpServletRequest) - Constructor for class org.apache.struts.upload.MultipartRequestWrapper
     
    MultipartValueStream - class org.apache.struts.upload.MultipartValueStream.
    This class implements an inputStream that reads another stream until a multipart boundary is found.
    MultipartValueStream(InputStream, String) - Constructor for class org.apache.struts.upload.MultipartValueStream
    Create a stream that stops reading at the boundary NOTE: the boundary parameter is without the trailing dashes "--".
    multiple - Variable in class org.apache.struts.taglib.html.SelectTag
    Should multiple selections be allowed.
    multiple - Variable in class org.apache.struts.taglib.bean.ParameterTag
    Return an array of parameter values if multiple is non-null.
    multiple - Variable in class org.apache.struts.taglib.bean.HeaderTag
    Return an array of header values if multiple is non-null.
    multiple - Variable in class org.apache.struts.taglib.bean.CookieTag
    Return an array of Cookies if multiple is non-null.

    N

    name - Variable in class org.apache.struts.upload.MultipartElement
    The element name.
    name - Variable in class org.apache.struts.tiles.ComponentDefinition
    Definition name
    name - Variable in class org.apache.struts.tiles.xmlDefinition.XmlAttribute
    Attribute name or key.
    name - Variable in class org.apache.struts.taglib.tiles.ImportAttributeTag
    Class name of object.
    name - Variable in class org.apache.struts.taglib.tiles.InsertTag
    Name to insert
    name - Variable in class org.apache.struts.taglib.template.PutTag
    Deprecated. The content's name.
    name - Variable in class org.apache.struts.taglib.template.GetTag
    Deprecated. The name of the content that this tag includes (or prints).
    name - Variable in class org.apache.struts.taglib.nested.NestedRootTag
     
    name - Variable in class org.apache.struts.taglib.logic.IterateTag
    The name of the collection or owning bean.
    name - Variable in class org.apache.struts.taglib.logic.ForwardTag
    The logical name of the ActionForward entry to be looked up.
    name - Variable in class org.apache.struts.taglib.logic.ConditionalTagBase
    The name of the JSP bean to be used as a variable (if property is not specified), or whose property is to be accessed (if property is specified).
    name - Variable in class org.apache.struts.taglib.logic.RedirectTag
    The JSP bean name for query parameters.
    name - Variable in class org.apache.struts.taglib.html.OptionsTag
    The name of the bean containing the values collection.
    name - Variable in class org.apache.struts.taglib.html.OptionsCollectionTag
    The name of the bean containing the values collection.
    name - Variable in class org.apache.struts.taglib.html.ErrorsTag
    The request attribute key for our error messages (if any).
    name - Variable in class org.apache.struts.taglib.html.LinkTag
    The JSP bean name for query parameters.
    name - Variable in class org.apache.struts.taglib.html.SelectTag
    The name of the bean containing our underlying property.
    name - Variable in class org.apache.struts.taglib.html.TextareaTag
    The name of the bean containing our underlying property.
    name - Variable in class org.apache.struts.taglib.html.MessagesTag
    The request attribute key for our error messages (if any).
    name - Variable in class org.apache.struts.taglib.html.BaseFieldTag
    The name of the bean containing our underlying property.
    name - Variable in class org.apache.struts.taglib.html.MultiboxTag
    The name of the bean containing our underlying property.
    name - Variable in class org.apache.struts.taglib.html.CheckboxTag
    The name of the bean containing our underlying property.
    name - Variable in class org.apache.struts.taglib.html.ImgTag
    The JSP bean name for query parameters.
    name - Variable in class org.apache.struts.taglib.html.FormTag
    The attribute key under which our associated bean is stored.
    name - Variable in class org.apache.struts.taglib.html.RadioTag
    The name of the bean containing our underlying property.
    name - Variable in class org.apache.struts.taglib.bean.DefineTag
    The name of the bean owning the property to be exposed.
    name - Variable in class org.apache.struts.taglib.bean.MessageTag
    Name of the bean that contains the message key.
    name - Variable in class org.apache.struts.taglib.bean.WriteTag
    Name of the bean that contains the data we will be rendering.
    name - Variable in class org.apache.struts.taglib.bean.SizeTag
    The name of the bean owning the property to be counted.
    name - Variable in class org.apache.struts.taglib.bean.ResourceTag
    The module-relative URI of the resource whose contents are to be exposed.
    name - Variable in class org.apache.struts.taglib.bean.ParameterTag
    The name of the parameter whose value is to be exposed.
    name - Variable in class org.apache.struts.taglib.bean.HeaderTag
    The name of the header whose value is to be exposed.
    name - Variable in class org.apache.struts.taglib.bean.CookieTag
    The name of the cookie whose value is to be exposed.
    name - Variable in class org.apache.struts.config.FormBeanConfig
    The unique identifier of this form bean, which is used to reference this bean in ActionMapping instances as well as for the name of the request or session attribute under which the corresponding form bean instance is created or accessed.
    name - Variable in class org.apache.struts.config.ActionConfig
    Name of the form bean, if any, associated with this Action.
    name - Variable in class org.apache.struts.config.ForwardConfig
    The unique identifier of this forward, which is used to reference it in Action classes.
    name - Variable in class org.apache.struts.config.FormPropertyConfig
    The JavaBean property name of the property described by this element.
    name - Variable in class org.apache.struts.action.DynaActionFormClass
    The "dynamic class name" for this DynaClass.
    NESTED_INCLUDES_KEY - Static variable in class org.apache.struts.taglib.nested.NestedPropertyHelper
     
    NestedCheckboxTag - class org.apache.struts.taglib.nested.html.NestedCheckboxTag.
    NestedCheckboxTag.
    NestedCheckboxTag() - Constructor for class org.apache.struts.taglib.nested.html.NestedCheckboxTag
     
    NestedDefineTag - class org.apache.struts.taglib.nested.bean.NestedDefineTag.
    NestedDefineTag.
    NestedDefineTag() - Constructor for class org.apache.struts.taglib.nested.bean.NestedDefineTag
     
    NestedDefineTei - class org.apache.struts.taglib.nested.bean.NestedDefineTei.
    NestedDefineTei to make sure that the implied setting of the name property of a nested tag is properly handed in the casting of the defined object.
    NestedDefineTei() - Constructor for class org.apache.struts.taglib.nested.bean.NestedDefineTei
     
    NestedEmptyTag - class org.apache.struts.taglib.nested.logic.NestedEmptyTag.
    NestedEmptyTag.
    NestedEmptyTag() - Constructor for class org.apache.struts.taglib.nested.logic.NestedEmptyTag
     
    NestedEqualTag - class org.apache.struts.taglib.nested.logic.NestedEqualTag.
    NestedEqualTag.
    NestedEqualTag() - Constructor for class org.apache.struts.taglib.nested.logic.NestedEqualTag
     
    NestedErrorsTag - class org.apache.struts.taglib.nested.html.NestedErrorsTag.
    NestedErrorsTag.
    NestedErrorsTag() - Constructor for class org.apache.struts.taglib.nested.html.NestedErrorsTag
     
    NestedFileTag - class org.apache.struts.taglib.nested.html.NestedFileTag.
    NestedFileTag.
    NestedFileTag() - Constructor for class org.apache.struts.taglib.nested.html.NestedFileTag
     
    NestedFormTag - class org.apache.struts.taglib.nested.html.NestedFormTag.
    NestedFormTag.
    NestedFormTag() - Constructor for class org.apache.struts.taglib.nested.html.NestedFormTag
     
    NestedGreaterEqualTag - class org.apache.struts.taglib.nested.logic.NestedGreaterEqualTag.
    NestedGreaterEqualTag.
    NestedGreaterEqualTag() - Constructor for class org.apache.struts.taglib.nested.logic.NestedGreaterEqualTag
     
    NestedGreaterThanTag - class org.apache.struts.taglib.nested.logic.NestedGreaterThanTag.
    NestedGreaterThanTag.
    NestedGreaterThanTag() - Constructor for class org.apache.struts.taglib.nested.logic.NestedGreaterThanTag
     
    NestedHiddenTag - class org.apache.struts.taglib.nested.html.NestedHiddenTag.
    NestedHiddenTag.
    NestedHiddenTag() - Constructor for class org.apache.struts.taglib.nested.html.NestedHiddenTag
     
    NestedImageTag - class org.apache.struts.taglib.nested.html.NestedImageTag.
    NestedMultiboxTag.
    NestedImageTag() - Constructor for class org.apache.struts.taglib.nested.html.NestedImageTag
     
    NestedImgTag - class org.apache.struts.taglib.nested.html.NestedImgTag.
    NestedImgTag, renders the nested version of the tag.
    NestedImgTag() - Constructor for class org.apache.struts.taglib.nested.html.NestedImgTag
     
    NestedIterateTag - class org.apache.struts.taglib.nested.logic.NestedIterateTag.
    NestedIterateTag.
    NestedIterateTag() - Constructor for class org.apache.struts.taglib.nested.logic.NestedIterateTag
     
    NestedIterateTei - class org.apache.struts.taglib.nested.logic.NestedIterateTei.
    NestedIterateTei Extending the original tag's tei class, so that we can make the "id" attribute optional, so that those who want to script can add it if they need it otherwise we can maintain the nice lean tag markup.
    NestedIterateTei() - Constructor for class org.apache.struts.taglib.nested.logic.NestedIterateTei
     
    NestedLessEqualTag - class org.apache.struts.taglib.nested.logic.NestedLessEqualTag.
    NestedLessEqualTag.
    NestedLessEqualTag() - Constructor for class org.apache.struts.taglib.nested.logic.NestedLessEqualTag
     
    NestedLessThanTag - class org.apache.struts.taglib.nested.logic.NestedLessThanTag.
    NestedLessThanTag.
    NestedLessThanTag() - Constructor for class org.apache.struts.taglib.nested.logic.NestedLessThanTag
     
    NestedLinkTag - class org.apache.struts.taglib.nested.html.NestedLinkTag.
    NestedLinkTag.
    NestedLinkTag() - Constructor for class org.apache.struts.taglib.nested.html.NestedLinkTag
     
    NestedMatchTag - class org.apache.struts.taglib.nested.logic.NestedMatchTag.
    NestedMatchTag.
    NestedMatchTag() - Constructor for class org.apache.struts.taglib.nested.logic.NestedMatchTag
     
    NestedMessagesNotPresentTag - class org.apache.struts.taglib.nested.logic.NestedMessagesNotPresentTag.
    NestedMessagesNotPresentTag.
    NestedMessagesNotPresentTag() - Constructor for class org.apache.struts.taglib.nested.logic.NestedMessagesNotPresentTag
     
    NestedMessagesPresentTag - class org.apache.struts.taglib.nested.logic.NestedMessagesPresentTag.
    NestedMessagesPresentTag.
    NestedMessagesPresentTag() - Constructor for class org.apache.struts.taglib.nested.logic.NestedMessagesPresentTag
     
    NestedMessagesTag - class org.apache.struts.taglib.nested.html.NestedMessagesTag.
    NestedMessagesTag.
    NestedMessagesTag() - Constructor for class org.apache.struts.taglib.nested.html.NestedMessagesTag
     
    NestedMessageTag - class org.apache.struts.taglib.nested.bean.NestedMessageTag.
    NestedWriteTag.
    NestedMessageTag() - Constructor for class org.apache.struts.taglib.nested.bean.NestedMessageTag
     
    NestedMultiboxTag - class org.apache.struts.taglib.nested.html.NestedMultiboxTag.
    NestedMultiboxTag.
    NestedMultiboxTag() - Constructor for class org.apache.struts.taglib.nested.html.NestedMultiboxTag
     
    NestedNameSupport - interface org.apache.struts.taglib.nested.NestedNameSupport.
    This is so that managing classes can tell if a nested tag needs to have its name property set.
    NestedNotEmptyTag - class org.apache.struts.taglib.nested.logic.NestedNotEmptyTag.
    NestedNotEmptyTag.
    NestedNotEmptyTag() - Constructor for class org.apache.struts.taglib.nested.logic.NestedNotEmptyTag
     
    NestedNotEqualTag - class org.apache.struts.taglib.nested.logic.NestedNotEqualTag.
    NestedNotEqualTag.
    NestedNotEqualTag() - Constructor for class org.apache.struts.taglib.nested.logic.NestedNotEqualTag
     
    NestedNotMatchTag - class org.apache.struts.taglib.nested.logic.NestedNotMatchTag.
    NestedNotMatchTag.
    NestedNotMatchTag() - Constructor for class org.apache.struts.taglib.nested.logic.NestedNotMatchTag
     
    NestedNotPresentTag - class org.apache.struts.taglib.nested.logic.NestedNotPresentTag.
    NestedNotPresentTag.
    NestedNotPresentTag() - Constructor for class org.apache.struts.taglib.nested.logic.NestedNotPresentTag
     
    NestedOptionsCollectionTag - class org.apache.struts.taglib.nested.html.NestedOptionsCollectionTag.
    NestedOptionsCollectionTag.
    NestedOptionsCollectionTag() - Constructor for class org.apache.struts.taglib.nested.html.NestedOptionsCollectionTag
     
    NestedOptionsTag - class org.apache.struts.taglib.nested.html.NestedOptionsTag.
    NestedOptionsTag.
    NestedOptionsTag() - Constructor for class org.apache.struts.taglib.nested.html.NestedOptionsTag
     
    NestedParentSupport - interface org.apache.struts.taglib.nested.NestedParentSupport.
    This interface is so managing classes of the nested tag can identify a tag as a parent tag that other tags retrieve nested properties from.
    NestedPasswordTag - class org.apache.struts.taglib.nested.html.NestedPasswordTag.
    NestedPasswordTag.
    NestedPasswordTag() - Constructor for class org.apache.struts.taglib.nested.html.NestedPasswordTag
     
    NestedPresentTag - class org.apache.struts.taglib.nested.logic.NestedPresentTag.
    NestedPresentTag.
    NestedPresentTag() - Constructor for class org.apache.struts.taglib.nested.logic.NestedPresentTag
     
    NestedPropertyHelper - class org.apache.struts.taglib.nested.NestedPropertyHelper.
    A simple helper class that does everything that needs to be done to get the nested tag extension to work.
    NestedPropertyHelper() - Constructor for class org.apache.struts.taglib.nested.NestedPropertyHelper
     
    NestedPropertySupport - interface org.apache.struts.taglib.nested.NestedPropertySupport.
    This interface is for managing classes of the nested extension, so they can know to set the tag's property property.
    NestedPropertyTag - class org.apache.struts.taglib.nested.NestedPropertyTag.
    NestedPropertyTag.
    NestedPropertyTag() - Constructor for class org.apache.struts.taglib.nested.NestedPropertyTag
     
    NestedRadioTag - class org.apache.struts.taglib.nested.html.NestedRadioTag.
    NestedRadioTag.
    NestedRadioTag() - Constructor for class org.apache.struts.taglib.nested.html.NestedRadioTag
     
    NestedReference - class org.apache.struts.taglib.nested.NestedReference.
    So that a nested hierarchy can penetrate a dynamic JSP include, this class will hold the details of a bean name and nested property.
    NestedReference() - Constructor for class org.apache.struts.taglib.nested.NestedReference
    Empty constructor.
    NestedReference(String, String) - Constructor for class org.apache.struts.taglib.nested.NestedReference
    Constructor takes the all the relevant details to init the object.
    NestedRootTag - class org.apache.struts.taglib.nested.NestedRootTag.
    NestedRootTag.
    NestedRootTag() - Constructor for class org.apache.struts.taglib.nested.NestedRootTag
     
    NestedSelectTag - class org.apache.struts.taglib.nested.html.NestedSelectTag.
    NestedSelectTag.
    NestedSelectTag() - Constructor for class org.apache.struts.taglib.nested.html.NestedSelectTag
     
    NestedSizeTag - class org.apache.struts.taglib.nested.bean.NestedSizeTag.
    NestedSizeTag.
    NestedSizeTag() - Constructor for class org.apache.struts.taglib.nested.bean.NestedSizeTag
     
    NestedSubmitTag - class org.apache.struts.taglib.nested.html.NestedSubmitTag.
    NestedSubmitTag.
    NestedSubmitTag() - Constructor for class org.apache.struts.taglib.nested.html.NestedSubmitTag
     
    NestedTagSupport - interface org.apache.struts.taglib.nested.NestedTagSupport.
    This is to simply allow managing classes to identify the tags to invoke common methods against them.
    NestedTextareaTag - class org.apache.struts.taglib.nested.html.NestedTextareaTag.
    NestedTextareaTag.
    NestedTextareaTag() - Constructor for class org.apache.struts.taglib.nested.html.NestedTextareaTag
     
    NestedTextTag - class org.apache.struts.taglib.nested.html.NestedTextTag.
    NestedTextTag.
    NestedTextTag() - Constructor for class org.apache.struts.taglib.nested.html.NestedTextTag
     
    NestedWriteNestingTag - class org.apache.struts.taglib.nested.NestedWriteNestingTag.
    NestedWriteNestingTag.
    NestedWriteNestingTag() - Constructor for class org.apache.struts.taglib.nested.NestedWriteNestingTag
     
    NestedWriteTag - class org.apache.struts.taglib.nested.bean.NestedWriteTag.
    NestedWriteTag.
    NestedWriteTag() - Constructor for class org.apache.struts.taglib.nested.bean.NestedWriteTag
     
    nesting - Variable in class org.apache.struts.taglib.nested.logic.NestedIterateTag
     
    newInstance() - Method in class org.apache.struts.action.DynaActionFormClass
    Instantiate and return a new DynaActionForm instance, associated with this DynaActionFormClass.
    NEWLINE_BYTE - Static variable in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    next() - Method in class org.apache.struts.util.IteratorAdapter
    Deprecated.  
    next() - Method in class org.apache.struts.tiles.EmptyIterator
     
    NO_DEBUG - Static variable in class org.apache.struts.tiles.DefinitionsUtil
    Deprecated. User Debug level
    nocache - Variable in class org.apache.struts.config.ControllerConfig
    Should we set no-cache HTTP headers on each response?
    NoOpAction - class org.apache.struts.tiles.actions.NoOpAction.
    Deprecated. Use o.a.s.a.ForwardAction instead with the parameter attribute: <action path="aPath" type="org.apache.struts.actions.ForwardAction" parameter="tiles.def.name" />
    NoOpAction() - Constructor for class org.apache.struts.tiles.actions.NoOpAction
    Deprecated.  
    noresize - Variable in class org.apache.struts.taglib.html.FrameTag
    Should users be disallowed to resize the frame?
    NoSuchDefinitionException - exception org.apache.struts.tiles.NoSuchDefinitionException.
    Exception thrown when a definition is not found.
    NoSuchDefinitionException() - Constructor for class org.apache.struts.tiles.NoSuchDefinitionException
    Constructor.
    NoSuchDefinitionException(String) - Constructor for class org.apache.struts.tiles.NoSuchDefinitionException
    Constructor.
    NotEmptyTag - class org.apache.struts.taglib.logic.NotEmptyTag.
    Evalute the nested body content of this tag if the specified value is not empty for this request.
    NotEmptyTag() - Constructor for class org.apache.struts.taglib.logic.NotEmptyTag
     
    NotEqualTag - class org.apache.struts.taglib.logic.NotEqualTag.
    Evaluate the nested body content of this tag if the specified variable and value are not equal.
    NotEqualTag() - Constructor for class org.apache.struts.taglib.logic.NotEqualTag
     
    NotMatchTag - class org.apache.struts.taglib.logic.NotMatchTag.
    Evalute the nested body content of this tag if the specified value is not a substring of the specified variable.
    NotMatchTag() - Constructor for class org.apache.struts.taglib.logic.NotMatchTag
     
    NotPresentTag - class org.apache.struts.taglib.logic.NotPresentTag.
    Evalute the nested body content of this tag if the specified value is not present for this request.
    NotPresentTag() - Constructor for class org.apache.struts.taglib.logic.NotPresentTag
     
    nullValue - Variable in class org.apache.struts.config.MessageResourcesConfig
    Should we return null for unknown message keys?

    O

    offset - Variable in class org.apache.struts.taglib.logic.IterateTag
    The starting offset (zero relative).
    offsetValue - Variable in class org.apache.struts.taglib.logic.IterateTag
    The actual offset value (calculated in the start tag).
    onblur - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
    Component lost focus event.
    onchange - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
    Content changed after component lost focus event.
    onclick - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
    Mouse click event.
    ondblclick - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
    Mouse double click event.
    onfocus - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
    Component has received focus event.
    onkeydown - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
    Key down in component event.
    onkeypress - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
    Key down and up together in component event.
    onkeyup - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
    Key released in component event.
    onmousedown - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
    Mouse pressed on component event.
    onmousemove - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
    Mouse moved over component event.
    onmouseout - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
    Mouse exit component event.
    onmouseover - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
    Mouse over component event.
    onmouseup - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
    Mouse released on component event.
    onreset - Variable in class org.apache.struts.taglib.html.FormTag
    The onReset event script.
    onselect - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
    Text selected in component event.
    onsubmit - Variable in class org.apache.struts.taglib.html.FormTag
    The onSubmit event script.
    OptionsCollectionTag - class org.apache.struts.taglib.html.OptionsCollectionTag.
    Tag for creating multiple <select> options from a collection.
    OptionsCollectionTag() - Constructor for class org.apache.struts.taglib.html.OptionsCollectionTag
     
    OptionsTag - class org.apache.struts.taglib.html.OptionsTag.
    Tag for creating multiple <select> options from a collection.
    OptionsTag() - Constructor for class org.apache.struts.taglib.html.OptionsTag
     
    OptionTag - class org.apache.struts.taglib.html.OptionTag.
    Tag for select options.
    OptionTag() - Constructor for class org.apache.struts.taglib.html.OptionTag
     
    org.apache.struts - package org.apache.struts
     
    org.apache.struts.action - package org.apache.struts.action
    The action package is the core of the struts framework, providing the "Controller" aspect of a MVC model.
    org.apache.struts.actions - package org.apache.struts.actions
    The actions package provides special adapters between the incoming HTTP request and the corresponding business logic.
    org.apache.struts.config - package org.apache.struts.config
    The "config" package contains configuration objects that correspond to elements that may be specified in the struts-config.xml module configuration file.
    org.apache.struts.config.impl - package org.apache.struts.config.impl
     
    org.apache.struts.plugins - package org.apache.struts.plugins
     
    org.apache.struts.taglib.bean - package org.apache.struts.taglib.bean
    The "struts-bean" tag library contains JSP custom tags useful in defining new beans (in any desired scope) from a variety of possible sources, as well as a tag to render a particular bean (or bean property) to the output response.
    org.apache.struts.taglib.html - package org.apache.struts.taglib.html
    The "struts-html" tag library contains JSP custom tags useful in creating dynamic HTML user interfaces, including input forms.
    org.apache.struts.taglib.logic - package org.apache.struts.taglib.logic
    The "struts-logic" 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.
    org.apache.struts.taglib.nested - package org.apache.struts.taglib.nested
    Nested tags & supporting classes extend the base struts tags to allow them to relate to each other in a nested nature.
    org.apache.struts.taglib.nested.bean - package org.apache.struts.taglib.nested.bean
    The nested bean tags extend the org.apache.struts.taglib.bean tags to allow them to relate to each other in a nested nature.
    org.apache.struts.taglib.nested.html - package org.apache.struts.taglib.nested.html
    The nested html tags extend the org.apache.struts.taglib.html tags to allow them to relate to each other in a nested nature.
    org.apache.struts.taglib.nested.logic - package org.apache.struts.taglib.nested.logic
    The nested html tags extend the org.apache.struts.taglib.logic tags to allow them to relate to each other in a nested nature.
    org.apache.struts.taglib.template - package org.apache.struts.taglib.template
    Note: As of Struts 1.1 the template tag library is deprecated in favor of Tiles.
    org.apache.struts.taglib.template.util - package org.apache.struts.taglib.template.util
     
    org.apache.struts.taglib.tiles - package org.apache.struts.taglib.tiles
    The "struts-tiles" tag library contains tags that are useful in creating dynamic reusable components.
    org.apache.struts.taglib.tiles.ext - package org.apache.struts.taglib.tiles.ext
     
    org.apache.struts.taglib.tiles.util - package org.apache.struts.taglib.tiles.util
     
    org.apache.struts.tiles - package org.apache.struts.tiles
    The Tiles taglib and framework allows building web pages by assembling reusable pieces of pages, called Tiles.
    org.apache.struts.tiles.actions - package org.apache.struts.tiles.actions
     
    org.apache.struts.tiles.beans - package org.apache.struts.tiles.beans
     
    org.apache.struts.tiles.definition - package org.apache.struts.tiles.definition
     
    org.apache.struts.tiles.xmlDefinition - package org.apache.struts.tiles.xmlDefinition
     
    org.apache.struts.upload - package org.apache.struts.upload
    The upload package facilities to upload files using multi-part requests.
    org.apache.struts.util - package org.apache.struts.util
    The Utilities package provides a variety of families of classes, to solve problems that are commonly encountered in building web applications.
    org.apache.struts.validator - package org.apache.struts.validator
    The validator package provides a series of classes to validate ActionForm type of input.
    originalLabelProperty - Variable in class org.apache.struts.taglib.nested.html.NestedOptionsTag
     
    originalName - Variable in class org.apache.struts.taglib.nested.NestedRootTag
     
    originalName - Variable in class org.apache.struts.taglib.nested.NestedPropertyTag
     
    originalName - Variable in class org.apache.struts.taglib.nested.logic.NestedPresentTag
     
    originalName - Variable in class org.apache.struts.taglib.nested.logic.NestedNotPresentTag
     
    originalName - Variable in class org.apache.struts.taglib.nested.logic.NestedNotMatchTag
     
    originalName - Variable in class org.apache.struts.taglib.nested.logic.NestedNotEqualTag
     
    originalName - Variable in class org.apache.struts.taglib.nested.logic.NestedNotEmptyTag
     
    originalName - Variable in class org.apache.struts.taglib.nested.logic.NestedMessagesPresentTag
     
    originalName - Variable in class org.apache.struts.taglib.nested.logic.NestedMessagesNotPresentTag
     
    originalName - Variable in class org.apache.struts.taglib.nested.logic.NestedMatchTag
     
    originalName - Variable in class org.apache.struts.taglib.nested.logic.NestedLessThanTag
     
    originalName - Variable in class org.apache.struts.taglib.nested.logic.NestedLessEqualTag
     
    originalName - Variable in class org.apache.struts.taglib.nested.logic.NestedIterateTag
     
    originalName - Variable in class org.apache.struts.taglib.nested.logic.NestedGreaterThanTag
     
    originalName - Variable in class org.apache.struts.taglib.nested.logic.NestedGreaterEqualTag
     
    originalName - Variable in class org.apache.struts.taglib.nested.logic.NestedEqualTag
     
    originalName - Variable in class org.apache.struts.taglib.nested.logic.NestedEmptyTag
     
    originalName - Variable in class org.apache.struts.taglib.nested.html.NestedTextareaTag
     
    originalName - Variable in class org.apache.struts.taglib.nested.html.NestedTextTag
     
    originalName - Variable in class org.apache.struts.taglib.nested.html.NestedSelectTag
     
    originalName - Variable in class org.apache.struts.taglib.nested.html.NestedRadioTag
     
    originalName - Variable in class org.apache.struts.taglib.nested.html.NestedPasswordTag
     
    originalName - Variable in class org.apache.struts.taglib.nested.html.NestedOptionsTag
     
    originalName - Variable in class org.apache.struts.taglib.nested.html.NestedOptionsCollectionTag
     
    originalName - Variable in class org.apache.struts.taglib.nested.html.NestedMultiboxTag
     
    originalName - Variable in class org.apache.struts.taglib.nested.html.NestedMessagesTag
     
    originalName - Variable in class org.apache.struts.taglib.nested.html.NestedImgTag
     
    originalName - Variable in class org.apache.struts.taglib.nested.html.NestedHiddenTag
     
    originalName - Variable in class org.apache.struts.taglib.nested.html.NestedFileTag
     
    originalName - Variable in class org.apache.struts.taglib.nested.html.NestedErrorsTag
     
    originalName - Variable in class org.apache.struts.taglib.nested.html.NestedCheckboxTag
     
    originalName - Variable in class org.apache.struts.taglib.nested.bean.NestedWriteTag
     
    originalName - Variable in class org.apache.struts.taglib.nested.bean.NestedSizeTag
     
    originalName - Variable in class org.apache.struts.taglib.nested.bean.NestedMessageTag
     
    originalName - Variable in class org.apache.struts.taglib.nested.bean.NestedDefineTag
     
    originalNest - Variable in class org.apache.struts.taglib.nested.NestedPropertyTag
     
    originalNesting - Variable in class org.apache.struts.taglib.nested.NestedRootTag
     
    originalNesting - Variable in class org.apache.struts.taglib.nested.logic.NestedIterateTag
     
    originalNesting - Variable in class org.apache.struts.taglib.nested.html.NestedFormTag
     
    originalNestingName - Variable in class org.apache.struts.taglib.nested.NestedRootTag
     
    originalNestingName - Variable in class org.apache.struts.taglib.nested.logic.NestedIterateTag
     
    originalNestingName - Variable in class org.apache.struts.taglib.nested.html.NestedFormTag
     
    originalProperty - Variable in class org.apache.struts.taglib.nested.NestedWriteNestingTag
     
    originalProperty - Variable in class org.apache.struts.taglib.nested.NestedPropertyTag
     
    originalProperty - Variable in class org.apache.struts.taglib.nested.logic.NestedPresentTag
     
    originalProperty - Variable in class org.apache.struts.taglib.nested.logic.NestedNotPresentTag
     
    originalProperty - Variable in class org.apache.struts.taglib.nested.logic.NestedNotMatchTag
     
    originalProperty - Variable in class org.apache.struts.taglib.nested.logic.NestedNotEqualTag
     
    originalProperty - Variable in class org.apache.struts.taglib.nested.logic.NestedNotEmptyTag
     
    originalProperty - Variable in class org.apache.struts.taglib.nested.logic.NestedMessagesPresentTag
     
    originalProperty - Variable in class org.apache.struts.taglib.nested.logic.NestedMessagesNotPresentTag
     
    originalProperty - Variable in class org.apache.struts.taglib.nested.logic.NestedMatchTag
     
    originalProperty - Variable in class org.apache.struts.taglib.nested.logic.NestedLessThanTag
     
    originalProperty - Variable in class org.apache.struts.taglib.nested.logic.NestedLessEqualTag
     
    originalProperty - Variable in class org.apache.struts.taglib.nested.logic.NestedIterateTag
     
    originalProperty - Variable in class org.apache.struts.taglib.nested.logic.NestedGreaterThanTag
     
    originalProperty - Variable in class org.apache.struts.taglib.nested.logic.NestedGreaterEqualTag
     
    originalProperty - Variable in class org.apache.struts.taglib.nested.logic.NestedEqualTag
     
    originalProperty - Variable in class org.apache.struts.taglib.nested.logic.NestedEmptyTag
     
    originalProperty - Variable in class org.apache.struts.taglib.nested.html.NestedTextareaTag
     
    originalProperty - Variable in class org.apache.struts.taglib.nested.html.NestedTextTag
     
    originalProperty - Variable in class org.apache.struts.taglib.nested.html.NestedSubmitTag
     
    originalProperty - Variable in class org.apache.struts.taglib.nested.html.NestedSelectTag
     
    originalProperty - Variable in class org.apache.struts.taglib.nested.html.NestedRadioTag
     
    originalProperty - Variable in class org.apache.struts.taglib.nested.html.NestedPasswordTag
     
    originalProperty - Variable in class org.apache.struts.taglib.nested.html.NestedOptionsTag
     
    originalProperty - Variable in class org.apache.struts.taglib.nested.html.NestedOptionsCollectionTag
     
    originalProperty - Variable in class org.apache.struts.taglib.nested.html.NestedMultiboxTag
     
    originalProperty - Variable in class org.apache.struts.taglib.nested.html.NestedMessagesTag
     
    originalProperty - Variable in class org.apache.struts.taglib.nested.html.NestedImgTag
     
    originalProperty - Variable in class org.apache.struts.taglib.nested.html.NestedImageTag
     
    originalProperty - Variable in class org.apache.struts.taglib.nested.html.NestedHiddenTag
     
    originalProperty - Variable in class org.apache.struts.taglib.nested.html.NestedFileTag
     
    originalProperty - Variable in class org.apache.struts.taglib.nested.html.NestedErrorsTag
     
    originalProperty - Variable in class org.apache.struts.taglib.nested.html.NestedCheckboxTag
     
    originalProperty - Variable in class org.apache.struts.taglib.nested.bean.NestedWriteTag
     
    originalProperty - Variable in class org.apache.struts.taglib.nested.bean.NestedSizeTag
     
    originalProperty - Variable in class org.apache.struts.taglib.nested.bean.NestedMessageTag
     
    originalProperty - Variable in class org.apache.struts.taglib.nested.bean.NestedDefineTag
     
    origName - Variable in class org.apache.struts.taglib.nested.html.NestedLinkTag
     
    origParamProperty - Variable in class org.apache.struts.taglib.nested.html.NestedLinkTag
     
    origProperty - Variable in class org.apache.struts.taglib.nested.html.NestedLinkTag
     
    overload(XmlDefinition) - Method in class org.apache.struts.tiles.xmlDefinition.XmlDefinition
    Overload this definition with passed child.

    P

    Package - Static variable in class org.apache.struts.taglib.html.Constants
    The name of this package.
    page - Variable in class org.apache.struts.validator.ValidatorForm
    Used to indicate the current page of a multi-page form.
    page - Variable in class org.apache.struts.validator.DynaValidatorForm
    Used to indicate the current page of a multi-page form.
    page - Variable in class org.apache.struts.taglib.tiles.DefinitionTagSupport
    Uri of page assoicated to this definition.
    page - Variable in class org.apache.struts.taglib.tiles.InsertTag.InsertHandler
     
    page - Variable in class org.apache.struts.taglib.logic.RedirectTag
    The module-relative page URL (beginning with a slash) to which this redirect will be rendered.
    page - Variable in class org.apache.struts.taglib.html.JavascriptValidatorTag
    The current page number of a multi-part form.
    page - Variable in class org.apache.struts.taglib.html.LinkTag
    The module-relative page URL (beginning with a slash) to which this hyperlink will be rendered.
    page - Variable in class org.apache.struts.taglib.html.ImageTag
    The module-relative URI of the image.
    page - Variable in class org.apache.struts.taglib.html.ImgTag
    The module-relative path, starting with a slash character, of the image to be displayed by this rendered tag.
    page - Variable in class org.apache.struts.taglib.bean.IncludeTag
    The context-relative URI of the page or servlet to be included.
    pageContext - Variable in class org.apache.struts.taglib.tiles.InsertTag
    Trick to allows inner classes to access pageContext
    pageKey - Variable in class org.apache.struts.taglib.html.ImageTag
    The message resources key of the module-relative URI of the image.
    pageKey - Variable in class org.apache.struts.taglib.html.ImgTag
    The message resources key under which we should look up the page attribute for this generated tag, if any.
    pagePattern - Variable in class org.apache.struts.config.ControllerConfig
    The replacement pattern used to determine a context-relative URL from the page attribute of Struts tags and configuration properties.
    PageTag - class org.apache.struts.taglib.bean.PageTag.
    Define a scripting variable that exposes the requested page context item as a scripting variable and a page scope bean.
    PageTag() - Constructor for class org.apache.struts.taglib.bean.PageTag
     
    PageTei - class org.apache.struts.taglib.bean.PageTei.
    Implementation of TagExtraInfo for the page tag, identifying the scripting object(s) to be made visible.
    PageTei() - Constructor for class org.apache.struts.taglib.bean.PageTei
     
    pageURL(HttpServletRequest, String) - Static method in class org.apache.struts.util.RequestUtils
    Return the context-relative URL that corresponds to the specified page attribute value, calculated based on the pagePattern property of the current module's ModuleConfig.
    parameter - Variable in class org.apache.struts.taglib.logic.ConditionalTagBase
    The name of the HTTP request parameter to be used as a variable.
    parameter - Variable in class org.apache.struts.config.ActionConfig
    General purpose configuration parameter that can be used to pass extra information to the Action instance selected by this Action.
    parameter - Variable in class org.apache.struts.config.MessageResourcesConfig
    Parameter that is passed to the createResources() method of our MessageResourcesFactory implementation.
    PARAMETER_BOUNDARY - Static variable in class org.apache.struts.upload.MultipartIterator
     
    PARAMETER_CHARSET - Static variable in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    PARAMETER_FILENAME - Static variable in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    PARAMETER_NAME - Static variable in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    parameters - Variable in class org.apache.struts.upload.MultipartRequestWrapper
    The parameters for this multipart request
    ParameterTag - class org.apache.struts.taglib.bean.ParameterTag.
    Define a scripting variable based on the value(s) of the specified parameter received with this request.
    ParameterTag() - Constructor for class org.apache.struts.taglib.bean.ParameterTag
     
    ParameterTei - class org.apache.struts.taglib.bean.ParameterTei.
    Implementation of TagExtraInfo for the parameter tag, identifying the scripting object(s) to be made visible.
    ParameterTei() - Constructor for class org.apache.struts.taglib.bean.ParameterTei
     
    paramId - Variable in class org.apache.struts.taglib.logic.RedirectTag
    The single-parameter request parameter name to generate.
    paramId - Variable in class org.apache.struts.taglib.html.LinkTag
    The single-parameter request parameter name to generate.
    paramId - Variable in class org.apache.struts.taglib.html.ImgTag
    In situations where an image is dynamically generated (such as to create a chart graph), this specifies the single-parameter request parameter name to generate.
    paramName - Variable in class org.apache.struts.taglib.logic.RedirectTag
    The single-parameter JSP bean name.
    paramName - Variable in class org.apache.struts.taglib.html.LinkTag
    The single-parameter JSP bean name.
    paramName - Variable in class org.apache.struts.taglib.html.ImgTag
    The single-parameter JSP bean name.
    paramProperty - Variable in class org.apache.struts.taglib.logic.RedirectTag
    The single-parameter JSP bean property.
    paramProperty - Variable in class org.apache.struts.taglib.html.LinkTag
    The single-parameter JSP bean property.
    paramProperty - Variable in class org.apache.struts.taglib.html.ImgTag
    The single-parameter JSP bean property.
    paramScope - Variable in class org.apache.struts.taglib.logic.RedirectTag
    The single-parameter JSP bean scope.
    paramScope - Variable in class org.apache.struts.taglib.html.LinkTag
    The single-parameter JSP bean scope.
    paramScope - Variable in class org.apache.struts.taglib.html.ImgTag
    The single-parameter JSP bean scope.
    parse(InputStream, XmlDefinitionsSet) - Method in class org.apache.struts.tiles.xmlDefinition.XmlParser
    Parse input reader and add encountered definitions to definitions set.
    parseForParameter(String, String) - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    parseHeaderValue(String) - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    parseModuleConfigFile(String, String, ModuleConfig, Digester, String) - Method in class org.apache.struts.action.ActionServlet
    Parses one module config file.
    PARSER_DETAILS_PARAMETER_NAME - Static variable in class org.apache.struts.tiles.DefinitionsFactoryConfig
    Alternate name for parser debug details properties in configuration file
    PARSER_DETAILS_PARAMETER_NAME - Static variable in class org.apache.struts.tiles.xmlDefinition.I18nFactorySet
    Config file parameter name.
    PARSER_VALIDATE_PARAMETER_NAME - Static variable in class org.apache.struts.tiles.DefinitionsFactoryConfig
    Alternate name for parser validate properties in configuration file
    PARSER_VALIDATE_PARAMETER_NAME - Static variable in class org.apache.struts.tiles.xmlDefinition.I18nFactorySet
    Config file parameter name.
    parserDebugLevel - Variable in class org.apache.struts.tiles.DefinitionsFactoryConfig
    Deprecated. Use commons-logging mechanism.
    parserDetailLevel - Variable in class org.apache.struts.tiles.xmlDefinition.I18nFactorySet
    Parser detail level.
    parseRequest() - Method in class org.apache.struts.upload.MultipartIterator
    Handles retrieving the boundary and setting the input stream
    parserValidate - Variable in class org.apache.struts.tiles.DefinitionsFactoryConfig
    Specifies whether the parser will validate configuration files.
    parseXmlFile(ServletContext, String, XmlDefinitionsSet) - Method in class org.apache.struts.tiles.xmlDefinition.I18nFactorySet
    Parse specified xml file and add definition to specified definitions set.
    parseXmlFiles(ServletContext, String, XmlDefinitionsSet) - Method in class org.apache.struts.tiles.xmlDefinition.I18nFactorySet
    Parse files associated to postix if they exist.
    PasswordTag - class org.apache.struts.taglib.html.PasswordTag.
    Custom tag for input fields of type "password".
    PasswordTag() - Constructor for class org.apache.struts.taglib.html.PasswordTag
    Construct a new instance of this tag.
    path - Variable in class org.apache.struts.tiles.ComponentDefinition
    Component / template path (URL).
    path - Variable in class org.apache.struts.config.ExceptionConfig
    The module-relative path of the resource to forward to if this exception occurs during an Action.
    path - Variable in class org.apache.struts.config.ActionConfig
    Context-relative path of the submitted request, starting with a slash ("/") character, and omitting any filename extension if extension mapping is being used.
    path - Variable in class org.apache.struts.config.ForwardConfig
    The URL to which this ForwardConfig entry points, which must start with a slash ("/") character.
    PathAttribute - class org.apache.struts.tiles.PathAttribute.
    Component attribute.
    PathAttribute(String) - Constructor for class org.apache.struts.tiles.PathAttribute
     
    pathnames - Variable in class org.apache.struts.validator.ValidatorPlugIn
    A comma delimitted list of Validator resource.
    peek(PageContext) - Static method in class org.apache.struts.taglib.template.util.ContentMapStack
    Deprecated. Use Tiles instead.
    perform(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.action.Action
    Deprecated. Use the execute() method instead
    perform(ActionMapping, ActionForm, ServletRequest, ServletResponse) - Method in class org.apache.struts.action.Action
    Deprecated. Use the execute() method instead
    perform(ComponentContext, ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.tiles.actions.TilesAction
    Deprecated. Use the execute() method instead
    perform(ComponentContext, HttpServletRequest, HttpServletResponse, ServletContext) - Method in interface org.apache.struts.tiles.Controller
    Method associated to a tile and called immediately before the tile is included.
    perform(ComponentContext, HttpServletRequest, HttpServletResponse, ServletContext) - Method in class org.apache.struts.tiles.ActionController
    Method associated to a tile and called immediately before tile is included.
    perform(ComponentContext, HttpServletRequest, HttpServletResponse, ServletContext) - Method in class org.apache.struts.tiles.UrlController
    Method associated to a tile and called immediately before the tile is included.
    perform(ComponentContext, HttpServletRequest, HttpServletResponse, ServletContext) - Method in class org.apache.struts.tiles.ControllerSupport
    Method associated to a tile and called immediately before tile is included.
    PLUG_INS_KEY - Static variable in class org.apache.struts.Globals
    The base of the context attributes key under which an array of PlugIn instances will be stored.
    PLUG_INS_KEY - Static variable in class org.apache.struts.action.Action
    Deprecated. Replaced by Globals.PLUG_INS_KEY
    PlugIn - interface org.apache.struts.action.PlugIn.
    A PlugIn is a configuration wrapper for a module-specific resource or service that needs to be notified about application startup and application shutdown events (corresponding to when the container calls init() and destroy() on the corresponding ActionServlet instance).
    PlugInConfig - class org.apache.struts.config.PlugInConfig.
    A JavaBean representing the configuration information of a <plug-in> element in a Struts configuration file.
    PlugInConfig() - Constructor for class org.apache.struts.config.PlugInConfig
     
    plugIns - Variable in class org.apache.struts.config.impl.ModuleConfigImpl
    The set of configured plug-in Actions for this module, if any, in the order they were declared and configured.
    PlugInSetPropertyRule - class org.apache.struts.config.PlugInSetPropertyRule.
    Class that records the name and value of a configuration property to be used in configuring a PlugIn instance when instantiated.
    PlugInSetPropertyRule() - Constructor for class org.apache.struts.config.PlugInSetPropertyRule
     
    pop(PageContext) - Static method in class org.apache.struts.taglib.template.util.ContentMapStack
    Deprecated. Use Tiles instead.
    populate(Map) - Method in class org.apache.struts.tiles.DefinitionsFactoryConfig
    Populate this config object from properties map, based on the specified name/value pairs.
    populate(Object, HttpServletRequest) - Static method in class org.apache.struts.util.RequestUtils
    Populate the properties of the specified JavaBean from the specified HTTP request, based on matching each parameter name against the corresponding JavaBeans "property setter" methods in the bean's class.
    populate(Object, String, String, HttpServletRequest) - Static method in class org.apache.struts.util.RequestUtils
    Populate the properties of the specified JavaBean from the specified HTTP request, based on matching each parameter name (plus an optional prefix and/or suffix) against the corresponding JavaBeans "property setter" methods in the bean's class.
    populateDefinitionsFactoryConfig(DefinitionsFactoryConfig, ServletConfig) - Static method in class org.apache.struts.tiles.DefinitionsUtil
    Deprecated. Populate Definition Factory Config from web.xml properties.
    prefix - Variable in class org.apache.struts.taglib.tiles.ext.TextTag
    Deprecated. The prefix to be added before the html name.
    prefix - Variable in class org.apache.struts.config.ActionConfig
    Prefix used to match request parameter names to form bean property names, if any.
    prefix - Variable in class org.apache.struts.config.impl.ModuleConfigImpl
    The prefix of the context-relative portion of the request URI, used to select this configuration versus others supported by the controller servlet.
    PREFIXES_KEY - Static variable in class org.apache.struts.util.RequestUtils
    The context attribute under which we store our prefixes list.
    prepareEventHandlers() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Prepares the event handlers for inclusion in the component's HTML tag.
    prepareFocusEvents(StringBuffer) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Prepares the focus event handlers, appending them to the the given StringBuffer.
    prepareIndex(StringBuffer, String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Appends bean name with index in brackets for tags with 'true' value in 'indexed' attribute.
    prepareKeyEvents(StringBuffer) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Prepares the keyboard event handlers, appending them to the the given StringBuffer.
    prepareMouseEvents(StringBuffer) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Prepares the mouse event handlers, appending them to the the given StringBuffer.
    prepareStyles() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Prepares the style attributes for inclusion in the component's HTML tag.
    prepareTextEvents(StringBuffer) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Prepares the text event handlers, appending them to the the given StringBuffer.
    present(PageContext, String, String, String) - Static method in class org.apache.struts.util.RequestUtils
    Return true if a message string for the specified message key is present for the specified Locale.
    PresentTag - class org.apache.struts.taglib.logic.PresentTag.
    Evalute the nested body content of this tag if the specified value is present for this request.
    PresentTag() - Constructor for class org.apache.struts.taglib.logic.PresentTag
     
    print(boolean) - Method in class org.apache.struts.util.ServletContextWriter
    Print a boolean value.
    print(char) - Method in class org.apache.struts.util.ServletContextWriter
    Print a character value.
    print(char[]) - Method in class org.apache.struts.util.ServletContextWriter
    Print a character array.
    print(double) - Method in class org.apache.struts.util.ServletContextWriter
    Print a double value.
    print(float) - Method in class org.apache.struts.util.ServletContextWriter
    Print a float value.
    print(int) - Method in class org.apache.struts.util.ServletContextWriter
    Print an integer value.
    print(long) - Method in class org.apache.struts.util.ServletContextWriter
    Print a long value.
    print(Object) - Method in class org.apache.struts.util.ServletContextWriter
    Print an object.
    print(String) - Method in class org.apache.struts.util.ServletContextWriter
    Print a String value.
    printableURL(URL) - Static method in class org.apache.struts.util.RequestUtils
    Compute the printable representation of a URL, leaving off the scheme/host/port part if no host is specified.
    printError(HttpServletResponse, String) - Method in class org.apache.struts.tiles.actions.DefinitionDispatcherAction
     
    println() - Method in class org.apache.struts.util.ServletContextWriter
    Terminate the current line and flush the buffer.
    println(boolean) - Method in class org.apache.struts.util.ServletContextWriter
    Print a boolean value and terminate the line.
    println(char) - Method in class org.apache.struts.util.ServletContextWriter
    Print a character value and terminate the line.
    println(char[]) - Method in class org.apache.struts.util.ServletContextWriter
    Print a character array and terminate the line.
    println(double) - Method in class org.apache.struts.util.ServletContextWriter
    Print a double value and terminate the line.
    println(float) - Method in class org.apache.struts.util.ServletContextWriter
    Print a float value and terminate the line.
    println(int) - Method in class org.apache.struts.util.ServletContextWriter
    Print an integer value and terminate the line.
    println(long) - Method in class org.apache.struts.util.ServletContextWriter
    Print a long value and terminate the line.
    println(Object) - Method in class org.apache.struts.util.ServletContextWriter
    Print an object and terminate the line.
    println(String) - Method in class org.apache.struts.util.ServletContextWriter
    Print a String value and terminate the line.
    process(HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.action.ActionServlet
    Perform the standard request processing for this request, and create the corresponding response.
    process(HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.action.RequestProcessor
    Process an HttpServletRequest and create the corresponding HttpServletResponse.
    processActionCreate(HttpServletRequest, HttpServletResponse, ActionMapping) - Method in class org.apache.struts.action.RequestProcessor
    Return an Action instance that will be used to process the current request, creating a new one if necessary.
    processActionForm(HttpServletRequest, HttpServletResponse, ActionMapping) - Method in class org.apache.struts.action.RequestProcessor
    Retrieve and return the ActionForm bean associated with this mapping, creating and stashing one if necessary.
    processActionForward(ActionForward, ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.tiles.ActionComponentServlet
    Deprecated. Overload struts1.0 counterpart in order to catch forward calls.
    processActionForward(HttpServletRequest, HttpServletResponse, ActionForward) - Method in class org.apache.struts.action.RequestProcessor
    Deprecated. Use processForwardConfig() instead.
    processActionPerform(HttpServletRequest, HttpServletResponse, Action, ActionForm, ActionMapping) - Method in class org.apache.struts.action.RequestProcessor
    Ask the specified Action instance to handle this request.
    processAsDefinitionOrURL(String) - Method in class org.apache.struts.taglib.tiles.InsertTag
    Try to process name as a definition, or as an URL if not found.
    processAttribute(String) - Method in class org.apache.struts.taglib.tiles.InsertTag
    Process tag attribute "attribute".
    processBean(String, String, String) - Method in class org.apache.struts.taglib.tiles.InsertTag
    Process a bean.
    processContent(HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.action.RequestProcessor
    Set the default content type (with optional character encoding) for all responses if requested.
    processDefinition(ComponentDefinition) - Method in class org.apache.struts.taglib.tiles.InsertTag
    End of Process tag attribute "definition".
    processDefinitionName(String) - Method in class org.apache.struts.taglib.tiles.InsertTag
    Process tag attribute "definition".
    processed - Variable in class org.apache.struts.taglib.html.MessagesTag
    Whether or not any error messages have been processed.
    processEndTag - Variable in class org.apache.struts.taglib.tiles.InsertTag
    Does the end tag need to be processed.
    processException(HttpServletRequest, HttpServletResponse, Exception, ActionForm, ActionMapping) - Method in class org.apache.struts.action.RequestProcessor
    Ask our exception handler to handle the exception.
    processException(Throwable, String) - Method in class org.apache.struts.taglib.tiles.InsertTag.InsertHandler
    Process an exception.
    processForward(ActionMapping, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.tiles.ActionComponentServlet
    Deprecated. Overload struts1.0 counterpart in order to catch forward calls.
    processForward(HttpServletRequest, HttpServletResponse, ActionMapping) - Method in class org.apache.struts.action.RequestProcessor
    Process a forward requested by this mapping (if any).
    processForward(String, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.tiles.ActionComponentServlet
    Deprecated. use doForward instead
    processForwardConfig(HttpServletRequest, HttpServletResponse, ForwardConfig) - Method in class org.apache.struts.tiles.TilesRequestProcessor
    Overloaded method from Struts' RequestProcessor.
    processForwardConfig(HttpServletRequest, HttpServletResponse, ForwardConfig) - Method in class org.apache.struts.action.RequestProcessor
    Forward or redirect to the specified destination, by the specified mechanism.
    processInclude(ActionMapping, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.tiles.ActionComponentServlet
    Deprecated. Overload struts1.0 counterpart in order to catch include calls.
    processInclude(HttpServletRequest, HttpServletResponse, ActionMapping) - Method in class org.apache.struts.action.RequestProcessor
    Process an include requested by this mapping (if any).
    processLocale(HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.action.RequestProcessor
    Automatically select a Locale for the current user, if requested.
    processMapping(HttpServletRequest, HttpServletResponse, String) - Method in class org.apache.struts.action.RequestProcessor
    Select the mapping used to process the selection path for this request.
    processMultipart(HttpServletRequest) - Method in class org.apache.struts.action.RequestProcessor
    If this is a multipart request, wrap it with a special wrapper.
    processName(String) - Method in class org.apache.struts.taglib.tiles.InsertTag
    Process name.
    processNestedTag(AddTag) - Method in class org.apache.struts.taglib.tiles.PutListTag
    Process nested ≶add> tag.
    processNestedTag(AddTag) - Method in interface org.apache.struts.taglib.tiles.AddTagParent
    Process the nested tag.
    processNestedTag(PutListTag) - Method in class org.apache.struts.taglib.tiles.PutListTag
    Process nested ≶putList> tag.
    processNestedTag(PutListTag) - Method in class org.apache.struts.taglib.tiles.DefinitionTag
    Process nested ≶putList> tag.
    processNestedTag(PutListTag) - Method in interface org.apache.struts.taglib.tiles.PutListTagParent
    Add an attribute to container.
    processNestedTag(PutListTag) - Method in class org.apache.struts.taglib.tiles.InsertTag
    Process nested ≶putList> tag.
    processNestedTag(PutTag) - Method in class org.apache.struts.taglib.tiles.DefinitionTag
    Process nested ≶put> tag.
    processNestedTag(PutTag) - Method in interface org.apache.struts.taglib.tiles.PutTagParent
    Process the nested tag.
    processNestedTag(PutTag) - Method in class org.apache.struts.taglib.tiles.InsertTag
    Process nested ≶put> tag.
    processNoCache(HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.action.RequestProcessor
    Set the no-cache headers for all responses, if requested.
    processObjectValue(Object) - Method in class org.apache.struts.taglib.tiles.InsertTag
    Process an object retrieved as a bean or attribute.
    processor - Variable in class org.apache.struts.action.ActionServlet
    The RequestProcessor instance we will use to process all incoming requests.
    processorClass - Variable in class org.apache.struts.config.ControllerConfig
    The fully qualified class name of the RequestProcessor implementation class to be used for this module.
    processPath(HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.action.RequestProcessor
    Identify and return the path component (from the request URI) that we will use to select an ActionMapping to dispatch with.
    processPopulate(HttpServletRequest, HttpServletResponse, ActionForm, ActionMapping) - Method in class org.apache.struts.action.RequestProcessor
    Populate the properties of the specified ActionForm instance from the request parameters included with this request.
    processPreprocess(HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.action.RequestProcessor
    General-purpose preprocessing hook that can be overridden as required by subclasses.
    processRoles(HttpServletRequest, HttpServletResponse, ActionMapping) - Method in class org.apache.struts.action.RequestProcessor
    If this action is protected by security roles, make sure that the current user possesses at least one of them.
    processTilesDefinition(String, boolean, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.tiles.TilesRequestProcessor
    Process a Tile definition name.
    processTypedAttribute(AttributeDefinition) - Method in class org.apache.struts.taglib.tiles.InsertTag
    Process typed attribute according to its type.
    processUrl(String) - Method in class org.apache.struts.taglib.tiles.InsertTag
    Process the url.
    processValidate(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.tiles.ActionComponentServlet
    Deprecated. Overload struts1.0 counterpart in order to catch forward calls.
    processValidate(HttpServletRequest, HttpServletResponse, ActionForm, ActionMapping) - Method in class org.apache.struts.action.RequestProcessor
    If this request was not cancelled, and the request's ActionMapping has not disabled validation, call the validate() method of the specified ActionForm, and forward back to the input form if there were any errors.
    properties - Variable in class org.apache.struts.tiles.definition.ReloadableDefinitionsFactory
    Initialization parameters
    properties - Variable in class org.apache.struts.config.PlugInConfig
    A Map of the name-value pairs that will be used to configure the property values of a PlugIn instance.
    properties - Variable in class org.apache.struts.config.DataSourceConfig
    The custom configuration properties for this data source implementation.
    properties - Variable in class org.apache.struts.action.DynaActionFormClass
    The set of dynamic properties that are part of this DynaClass.
    properties() - Method in class org.apache.struts.action.ActionMessages
    Return the set of property names for which at least one message has been recorded.
    propertiesMap - Variable in class org.apache.struts.action.DynaActionFormClass
    The set of dynamic properties that are part of this DynaClass, keyed by the property name.
    property - Variable in class org.apache.struts.util.ModuleException
     
    property - Variable in class org.apache.struts.taglib.tiles.AttributeToScopeTag
    Deprecated. The property name to be exposed.
    property - Variable in class org.apache.struts.taglib.nested.NestedWriteNestingTag
     
    property - Variable in class org.apache.struts.taglib.nested.NestedPropertyTag
     
    property - Variable in class org.apache.struts.taglib.nested.NestedReference
     
    property - Variable in class org.apache.struts.taglib.logic.IterateTag
    The property name containing the collection.
    property - Variable in class org.apache.struts.taglib.logic.ConditionalTagBase
    The name of the bean property to be used as a variable.
    property - Variable in class org.apache.struts.taglib.logic.RedirectTag
    The JSP bean property name for query parameters.
    property - Variable in class org.apache.struts.taglib.html.OptionsTag
    The name of the property to use to build the values collection.
    property - Variable in class org.apache.struts.taglib.html.OptionsCollectionTag
    The name of the property to use to build the values collection.
    property - Variable in class org.apache.struts.taglib.html.ErrorsTag
    The name of the property for which error messages should be returned, or null to return all errors.
    property - Variable in class org.apache.struts.taglib.html.LinkTag
    The JSP bean property name for query parameters.
    property - Variable in class org.apache.struts.taglib.html.SelectTag
    The property name we are associated with.
    property - Variable in class org.apache.struts.taglib.html.MessagesTag
    The name of the property for which error messages should be returned, or null to return all errors.
    property - Variable in class org.apache.struts.taglib.html.CancelTag
    The property name of the generated button.
    property - Variable in class org.apache.struts.taglib.html.MultiboxTag
    The property name for this field.
    property - Variable in class org.apache.struts.taglib.html.BaseInputTag
    The name of the field (and associated property) being processed.
    property - Variable in class org.apache.struts.taglib.html.ImageTag
    The name attribute for the image button.
    property - Variable in class org.apache.struts.taglib.html.CheckboxTag
    The property name for this field.
    property - Variable in class org.apache.struts.taglib.html.ImgTag
    The JSP bean property name for query parameters.
    property - Variable in class org.apache.struts.taglib.html.SubmitTag
    The name of the generated input field.
    property - Variable in class org.apache.struts.taglib.html.ButtonTag
    The property name of the generated button.
    property - Variable in class org.apache.struts.taglib.html.ResetTag
    The name of the generated input field.
    property - Variable in class org.apache.struts.taglib.html.RadioTag
    The property name for this field.
    property - Variable in class org.apache.struts.taglib.bean.DefineTag
    The name of the property to be retrieved.
    property - Variable in class org.apache.struts.taglib.bean.MessageTag
    Name of the property to be accessed on the specified bean.
    property - Variable in class org.apache.struts.taglib.bean.WriteTag
    Name of the property to be accessed on the specified bean.
    property - Variable in class org.apache.struts.taglib.bean.SizeTag
    The name of the property to be retrieved.
    property - Variable in class org.apache.struts.taglib.bean.PageTag
    The name of the page context property to be retrieved.
    PropertyMessageResources - class org.apache.struts.util.PropertyMessageResources.
    Concrete subclass of MessageResources that reads message keys and corresponding strings from named property resources in the same manner that java.util.PropertyResourceBundle does.
    PropertyMessageResources(MessageResourcesFactory, String) - Constructor for class org.apache.struts.util.PropertyMessageResources
    Construct a new PropertyMessageResources according to the specified parameters.
    PropertyMessageResources(MessageResourcesFactory, String, boolean) - Constructor for class org.apache.struts.util.PropertyMessageResources
    Construct a new PropertyMessageResources according to the specified parameters.
    PropertyMessageResourcesFactory - class org.apache.struts.util.PropertyMessageResourcesFactory.
    Factory for PropertyMessageResources instances.
    PropertyMessageResourcesFactory() - Constructor for class org.apache.struts.util.PropertyMessageResourcesFactory
     
    push(PageContext, ContentMap) - Static method in class org.apache.struts.taglib.template.util.ContentMapStack
    Deprecated. Use Tiles instead.
    put(String, Content) - Method in class org.apache.struts.taglib.template.InsertTag
    Deprecated. Use Tiles instead.
    put(String, Content) - Method in class org.apache.struts.taglib.template.util.ContentMap
    Deprecated. Use Tiles instead.
    put(String, Object) - Method in class org.apache.struts.tiles.ComponentDefinition
    Put an attribute in component / template definition.
    put(String, Object, boolean) - Method in class org.apache.struts.tiles.ComponentDefinition
    Put an attribute in template definition.
    put(String, Object, boolean, String) - Method in class org.apache.struts.tiles.ComponentDefinition
    Put an attribute in template definition.
    put(String, Object, String, String) - Method in class org.apache.struts.tiles.ComponentDefinition
    Put an attribute in template definition.
    putAttribute(PutListTag) - Method in class org.apache.struts.taglib.tiles.InsertTag
    Method calls by nested ≶putList> tags.
    putAttribute(String, Object) - Method in class org.apache.struts.tiles.ComponentContext
    Put a new attribute to context.
    putAttribute(String, Object) - Method in class org.apache.struts.tiles.ComponentDefinition
    Put a new attribute in this component
    putAttribute(String, Object) - Method in class org.apache.struts.taglib.tiles.DefinitionTag
    This method is a convenience for other tags for putting content into the tile definition.
    putAttribute(String, Object) - Method in class org.apache.struts.taglib.tiles.InsertTag
    Add a body attribute.
    putAttribute(String, Object) - Method in interface org.apache.struts.taglib.tiles.InsertTag.TagHandler
    Add a component parameter (attribute) to subContext.
    putAttribute(String, Object) - Method in class org.apache.struts.taglib.tiles.InsertTag.InsertHandler
    Add attribute to sub context.
    putAttribute(String, Object) - Method in class org.apache.struts.taglib.tiles.InsertTag.DirectStringHandler
    Add attribute to sub context.
    putDefinition(ComponentDefinition) - Method in class org.apache.struts.tiles.xmlDefinition.DefinitionsFactory
    Put definition in set.
    putDefinition(XmlDefinition) - Method in class org.apache.struts.tiles.xmlDefinition.XmlDefinitionsSet
    Put definition in set.
    PutListTag - class org.apache.struts.taglib.tiles.PutListTag.
    PutList tag implementation.
    PutListTag() - Constructor for class org.apache.struts.taglib.tiles.PutListTag
    Default constructor.
    PutListTagParent - interface org.apache.struts.taglib.tiles.PutListTagParent.
    Tag classes implementing this interface can contains nested PutTag.
    PutTag - class org.apache.struts.taglib.tiles.PutTag.
    Put an attribute in enclosing attribute container tag.
    PutTag - class org.apache.struts.taglib.template.PutTag.
    Deprecated. Use Tiles instead.
    PutTag() - Constructor for class org.apache.struts.taglib.tiles.PutTag
    Default constructor.
    PutTag() - Constructor for class org.apache.struts.taglib.template.PutTag
    Deprecated.  
    PutTagParent - interface org.apache.struts.taglib.tiles.PutTagParent.
    Tag classes implementing this interface can contain nested PutTag.

    R

    RadioTag - class org.apache.struts.taglib.html.RadioTag.
    Tag for input fields of type "radio".
    RadioTag() - Constructor for class org.apache.struts.taglib.html.RadioTag
     
    read() - Method in class org.apache.struts.upload.MultipartValueStream
    Read the next byte
    read() - Method in class org.apache.struts.upload.BufferedMultipartInputStream
    This method returns the next byte in the buffer, and refills it if necessary.
    read() - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
    Reads from the stream.
    read(byte[]) - Method in class org.apache.struts.upload.BufferedMultipartInputStream
    This method populates the byte array b with data up to b.length bytes
    read(byte[]) - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    read(byte[], int, int) - Method in class org.apache.struts.upload.BufferedMultipartInputStream
    This method populates the byte array b with data up to length starting at b[offset]
    read(byte[], int, int) - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    readAheadBufferEndI - Variable in class org.apache.struts.upload.MultipartValueStream
    The end index for the read ahead cyclic buffer (points to the last byte)
    readAheadBufferStartI - Variable in class org.apache.struts.upload.MultipartValueStream
    The start index for the read ahead cyclic buffer (points to the first byte)
    readAheadBytes - Variable in class org.apache.struts.upload.MultipartValueStream
    the read ahead buffer (cyclic)
    readContentDisposition() - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    readContentType() - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    readElementHeaders() - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    readFactoryConfig(ActionServlet, ModuleConfig) - Method in class org.apache.struts.tiles.TilesPlugin
    Create FactoryConfig and initialize it from web.xml and struts-config.xml.
    readFactoryConfig(ServletConfig) - Static method in class org.apache.struts.tiles.DefinitionsUtil
    Deprecated. Create FactoryConfig and initialize it from web.xml.
    readFirstElement() - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    readFromLine() - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    readLine() - Method in class org.apache.struts.upload.BufferedMultipartInputStream
    This method reads a line, regardless of length.
    readLine() - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    readLine(byte[], int, int) - Method in class org.apache.struts.upload.BufferedMultipartInputStream
    This method reads into the byte array b until a newline ('\n') character is encountered or the number of bytes specified by length have been read
    readonly - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
    Component is readonly.
    realValue - Variable in class org.apache.struts.tiles.xmlDefinition.XmlAttribute
    Real attribute value.
    realValue - Variable in class org.apache.struts.taglib.tiles.PutTag
    cached real value computed from tag attributes
    redirect - Variable in class org.apache.struts.config.ForwardConfig
    Should a redirect be used to transfer control to the specified path?
    RedirectingActionForward - class org.apache.struts.action.RedirectingActionForward.
    A subclass of ActionForward that defaults the redirect attribute to true.
    RedirectingActionForward() - Constructor for class org.apache.struts.action.RedirectingActionForward
    Construct a new instance with default values.
    RedirectingActionForward(String) - Constructor for class org.apache.struts.action.RedirectingActionForward
    Construct a new instance with the specified path.
    RedirectTag - class org.apache.struts.taglib.logic.RedirectTag.
    Generate a URL-encoded redirect to the specified URI.
    RedirectTag() - Constructor for class org.apache.struts.taglib.logic.RedirectTag
     
    redisplay - Variable in class org.apache.struts.taglib.html.BaseFieldTag
    The "redisplay contents" flag (used only on password).
    referenceInstance(HttpServletRequest) - Static method in class org.apache.struts.taglib.nested.NestedPropertyHelper
    Pulls the current nesting reference from the request object, and if there isn't one there, then it will create one and set it.
    registrations - Variable in class org.apache.struts.tiles.xmlDefinition.XmlParser
    The set of public identifiers, and corresponding resource names for the versions of the configuration file DTDs we know about.
    registrations - Variable in class org.apache.struts.action.ActionServlet
    The set of public identifiers, and corresponding resource names, for the versions of the configuration file DTDs that we know about.
    release() - Method in class org.apache.struts.taglib.tiles.PutListTag
    Release all allocated resources.
    release() - Method in class org.apache.struts.taglib.tiles.DefinitionTag
    Reset member values for reuse.
    release() - Method in class org.apache.struts.taglib.tiles.GetAttributeTag
    Release all allocated resources.
    release() - Method in class org.apache.struts.taglib.tiles.InitDefinitionsTag
    Release all allocated resources.
    release() - Method in class org.apache.struts.taglib.tiles.PutTag
    Release all allocated resources.
    release() - Method in class org.apache.struts.taglib.tiles.ImportAttributeTag
    Release all allocated resources.
    release() - Method in class org.apache.struts.taglib.tiles.UseAttributeTag
    Release all allocated resources.
    release() - Method in class org.apache.struts.taglib.tiles.DefinitionTagSupport
    Release class properties.
    release() - Method in class org.apache.struts.taglib.tiles.InsertTag
    Reset member values for reuse.
    release() - Method in class org.apache.struts.taglib.tiles.AttributeToScopeTag
    Deprecated. Release all allocated resources.
    release() - Method in class org.apache.struts.taglib.tiles.GetTag
    Release all allocated resources.
    release() - Method in class org.apache.struts.taglib.tiles.ext.TextTag
    Deprecated. Release all allocated resources.
    release() - Method in class org.apache.struts.taglib.template.PutTag
    Deprecated. Use Tiles instead.
    release() - Method in class org.apache.struts.taglib.template.GetTag
    Deprecated. Use Tiles instead.
    release() - Method in class org.apache.struts.taglib.template.InsertTag
    Deprecated. Use Tiles instead.
    release() - Method in class org.apache.struts.taglib.nested.NestedWriteNestingTag
    JSP method to release all resources held by the tag.
    release() - Method in class org.apache.struts.taglib.nested.NestedRootTag
    JSP method to release all resources held by the tag.
    release() - Method in class org.apache.struts.taglib.nested.NestedPropertyTag
    JSP method to release all resources held by the tag.
    release() - Method in class org.apache.struts.taglib.nested.logic.NestedPresentTag
    Release the tag's resources and reset the values.
    release() - Method in class org.apache.struts.taglib.nested.logic.NestedNotPresentTag
    Release the tag's resources and reset the values.
    release() - Method in class org.apache.struts.taglib.nested.logic.NestedNotMatchTag
    Release the tag's resources and reset the values.
    release() - Method in class org.apache.struts.taglib.nested.logic.NestedNotEqualTag
    Release the tag's resources and reset the values.
    release() - Method in class org.apache.struts.taglib.nested.logic.NestedNotEmptyTag
    Release the tag's resources and reset the values.
    release() - Method in class org.apache.struts.taglib.nested.logic.NestedMessagesPresentTag
    Release the tag's resources and reset the values.
    release() - Method in class org.apache.struts.taglib.nested.logic.NestedMessagesNotPresentTag
    Release the tag's resources and reset the values.
    release() - Method in class org.apache.struts.taglib.nested.logic.NestedMatchTag
    Release the tag's resources and reset the values.
    release() - Method in class org.apache.struts.taglib.nested.logic.NestedLessThanTag
    Release the tag's resources and reset the values.
    release() - Method in class org.apache.struts.taglib.nested.logic.NestedLessEqualTag
    Release the tag's resources and reset the values.
    release() - Method in class org.apache.struts.taglib.nested.logic.NestedIterateTag
    Release the tag's resources and reset the values.
    release() - Method in class org.apache.struts.taglib.nested.logic.NestedGreaterThanTag
    Release the tag's resources and reset the values.
    release() - Method in class org.apache.struts.taglib.nested.logic.NestedGreaterEqualTag
    Release the tag's resources and reset the values.
    release() - Method in class org.apache.struts.taglib.nested.logic.NestedEqualTag
    Release the tag's resources and reset the values.
    release() - Method in class org.apache.struts.taglib.nested.logic.NestedEmptyTag
    Release the tag's resources and reset the values.
    release() - Method in class org.apache.struts.taglib.nested.html.NestedTextareaTag
    Release the tag's resources and reset the values.
    release() - Method in class org.apache.struts.taglib.nested.html.NestedTextTag
    Release the tag's resources and reset the values.
    release() - Method in class org.apache.struts.taglib.nested.html.NestedSubmitTag
    Release the tag's resources and reset the values.
    release() - Method in class org.apache.struts.taglib.nested.html.NestedSelectTag
    Release the tag's resources and reset the values.
    release() - Method in class org.apache.struts.taglib.nested.html.NestedRadioTag
    Release the tag's resources and reset the values.
    release() - Method in class org.apache.struts.taglib.nested.html.NestedPasswordTag
    Release the tag's resources and reset the values.
    release() - Method in class org.apache.struts.taglib.nested.html.NestedOptionsTag
    Release the tag's resources and reset the values.
    release() - Method in class org.apache.struts.taglib.nested.html.NestedOptionsCollectionTag
    Release the tag's resources and reset the values.
    release() - Method in class org.apache.struts.taglib.nested.html.NestedMultiboxTag
    Release the tag's resources and reset the values.
    release() - Method in class org.apache.struts.taglib.nested.html.NestedMessagesTag
    Release the tag's resources and reset the values.
    release() - Method in class org.apache.struts.taglib.nested.html.NestedLinkTag
    Release the tag's resources and reset the values.
    release() - Method in class org.apache.struts.taglib.nested.html.NestedImgTag
    Release the tag's resources and reset the values.
    release() - Method in class org.apache.struts.taglib.nested.html.NestedImageTag
    Release the tag's resources and reset the values.
    release() - Method in class org.apache.struts.taglib.nested.html.NestedHiddenTag
    Release the tag's resources and reset the values.
    release() - Method in class org.apache.struts.taglib.nested.html.NestedFormTag
    Release the tag's resources and reset the values.
    release() - Method in class org.apache.struts.taglib.nested.html.NestedFileTag
    Release the tag's resources and reset the values.
    release() - Method in class org.apache.struts.taglib.nested.html.NestedErrorsTag
    Release the tag's resources and reset the values.
    release() - Method in class org.apache.struts.taglib.nested.html.NestedCheckboxTag
    Release the tag's resources and reset the values.
    release() - Method in class org.apache.struts.taglib.nested.bean.NestedWriteTag
    Release the tag's resources and reset the values.
    release() - Method in class org.apache.struts.taglib.nested.bean.NestedSizeTag
    Release the tag's resources and reset the values.
    release() - Method in class org.apache.struts.taglib.nested.bean.NestedMessageTag
    Release the tag's resources and reset the values.
    release() - Method in class org.apache.struts.taglib.nested.bean.NestedDefineTag
    Release the tag's resources and reset the values.
    release() - Method in class org.apache.struts.taglib.logic.IterateTag
    Release all allocated resources.
    release() - Method in class org.apache.struts.taglib.logic.ForwardTag
    Release all allocated resources.
    release() - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
    Release all allocated resources.
    release() - Method in class org.apache.struts.taglib.logic.MessagesPresentTag
    Release all allocated resources.
    release() - Method in class org.apache.struts.taglib.logic.RedirectTag
    Release any acquired resources.
    release() - Method in class org.apache.struts.taglib.logic.MatchTag
    Release all allocated resources.
    release() - Method in class org.apache.struts.taglib.logic.CompareTagBase
    Release all allocated resources.
    release() - Method in class org.apache.struts.taglib.html.OptionsTag
    Release any acquired resources.
    release() - Method in class org.apache.struts.taglib.html.OptionsCollectionTag
    Release any acquired resources.
    release() - Method in class org.apache.struts.taglib.html.ErrorsTag
    Release any acquired resources.
    release() - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Release any acquired resources.
    release() - Method in class org.apache.struts.taglib.html.HiddenTag
    Release any acquired resources.
    release() - Method in class org.apache.struts.taglib.html.JavascriptValidatorTag
    Release any acquired resources.
    release() - Method in class org.apache.struts.taglib.html.LinkTag
    Release any acquired resources.
    release() - Method in class org.apache.struts.taglib.html.SelectTag
    Release any acquired resources.
    release() - Method in class org.apache.struts.taglib.html.TextareaTag
    Release any acquired resources.
    release() - Method in class org.apache.struts.taglib.html.MessagesTag
    Release all allocated resources.
    release() - Method in class org.apache.struts.taglib.html.CancelTag
    Release any acquired resources.
    release() - Method in class org.apache.struts.taglib.html.BaseFieldTag
    Release any acquired resources.
    release() - Method in class org.apache.struts.taglib.html.MultiboxTag
    Release any acquired resources.
    release() - Method in class org.apache.struts.taglib.html.FrameTag
    Release any acquired resources.
    release() - Method in class org.apache.struts.taglib.html.BaseInputTag
    Release any acquired resources.
    release() - Method in class org.apache.struts.taglib.html.ImageTag
    Release any acquired resources.
    release() - Method in class org.apache.struts.taglib.html.CheckboxTag
    Release any acquired resources.
    release() - Method in class org.apache.struts.taglib.html.ImgTag
    Release any acquired resources.
    release() - Method in class org.apache.struts.taglib.html.HtmlTag
    Release any acquired resources.
    release() - Method in class org.apache.struts.taglib.html.FormTag
    Release any acquired resources.
    release() - Method in class org.apache.struts.taglib.html.SubmitTag
    Release any acquired resources.
    release() - Method in class org.apache.struts.taglib.html.ButtonTag
    Release any acquired resources.
    release() - Method in class org.apache.struts.taglib.html.ResetTag
    Release any acquired resources.
    release() - Method in class org.apache.struts.taglib.html.OptionTag
    Release any acquired resources.
    release() - Method in class org.apache.struts.taglib.html.RadioTag
    Release any acquired resources.
    release() - Method in class org.apache.struts.taglib.bean.DefineTag
    Release all allocated resources.
    release() - Method in class org.apache.struts.taglib.bean.MessageTag
    Release any acquired resources.
    release() - Method in class org.apache.struts.taglib.bean.WriteTag
    Release all allocated resources.
    release() - Method in class org.apache.struts.taglib.bean.IncludeTag
    Release all allocated resources.
    release() - Method in class org.apache.struts.taglib.bean.StrutsTag
    Release all allocated resources.
    release() - Method in class org.apache.struts.taglib.bean.SizeTag
    Release all allocated resources.
    release() - Method in class org.apache.struts.taglib.bean.ResourceTag
    Release all allocated resources.
    release() - Method in class org.apache.struts.taglib.bean.ParameterTag
    Release all allocated resources.
    release() - Method in class org.apache.struts.taglib.bean.PageTag
    Release all allocated resources.
    release() - Method in class org.apache.struts.taglib.bean.HeaderTag
    Release all allocated resources.
    release() - Method in class org.apache.struts.taglib.bean.CookieTag
    Release all allocated resources.
    releaseInternal() - Method in class org.apache.struts.taglib.tiles.PutListTag
    Release all internal resources.
    releaseInternal() - Method in class org.apache.struts.taglib.tiles.DefinitionTag
    Release internal references.
    releaseInternal() - Method in class org.apache.struts.taglib.tiles.PutTag
    Release internal properties.
    releaseInternal() - Method in class org.apache.struts.taglib.tiles.InsertTag
    Reset internal member values for reuse.
    reload(ServletContext) - Method in class org.apache.struts.tiles.definition.ReloadableDefinitionsFactory
    Reload underlying factory.
    ReloadableDefinitionsFactory - class org.apache.struts.tiles.definition.ReloadableDefinitionsFactory.
    A reloadable factory.
    ReloadableDefinitionsFactory.ServletPropertiesMap - class org.apache.struts.tiles.definition.ReloadableDefinitionsFactory.ServletPropertiesMap.
    Inner class.
    ReloadableDefinitionsFactory.ServletPropertiesMap(ServletConfig) - Constructor for class org.apache.struts.tiles.definition.ReloadableDefinitionsFactory.ServletPropertiesMap
    Constructor.
    ReloadableDefinitionsFactory(ServletContext, Map) - Constructor for class org.apache.struts.tiles.definition.ReloadableDefinitionsFactory
    Constructor.
    ReloadableDefinitionsFactory(ServletContext, ServletConfig) - Constructor for class org.apache.struts.tiles.definition.ReloadableDefinitionsFactory
    Constructor.
    ReloadDefinitionsAction - class org.apache.struts.tiles.actions.ReloadDefinitionsAction.
    A standard Action that calls the reload() method of our controller servlet to reload its configuration information from the configuration files (which have presumably been updated) dynamically.
    ReloadDefinitionsAction() - Constructor for class org.apache.struts.tiles.actions.ReloadDefinitionsAction
     
    remove() - Method in class org.apache.struts.util.IteratorAdapter
    Deprecated.  
    remove() - Method in class org.apache.struts.tiles.EmptyIterator
     
    remove(String, String) - Method in class org.apache.struts.action.DynaActionForm
    Remove any existing value for the specified key on the specified mapped property.
    removeActionConfig(ActionConfig) - Method in interface org.apache.struts.config.ModuleConfig
    Remove the specified action configuration instance.
    removeActionConfig(ActionConfig) - Method in class org.apache.struts.config.impl.ModuleConfigImpl
    Remove the specified action configuration instance.
    removeActionDefinition(ServletRequest, ComponentDefinition) - Static method in class org.apache.struts.tiles.DefinitionsUtil
    Deprecated. Remove Definition stored in jsp context.
    removeAttribute(String) - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    removeDataSourceConfig(DataSourceConfig) - Method in interface org.apache.struts.config.ModuleConfig
    Remove the specified data source configuration instance.
    removeDataSourceConfig(DataSourceConfig) - Method in class org.apache.struts.config.impl.ModuleConfigImpl
    Remove the specified data source configuration instance.
    removeExceptionConfig(ExceptionConfig) - Method in interface org.apache.struts.config.ModuleConfig
    Remove the specified exception configuration instance.
    removeExceptionConfig(ExceptionConfig) - Method in class org.apache.struts.config.ActionConfig
    Remove the specified exception configuration instance.
    removeExceptionConfig(ExceptionConfig) - Method in class org.apache.struts.config.impl.ModuleConfigImpl
    Remove the specified exception configuration instance.
    removeFormBean(ActionFormBean) - Method in class org.apache.struts.action.ActionFormBeans
    Deprecated. Deregister a formBean from the set configured for this servlet.
    removeFormBeanConfig(FormBeanConfig) - Method in interface org.apache.struts.config.ModuleConfig
    Remove the specified form bean configuration instance.
    removeFormBeanConfig(FormBeanConfig) - Method in class org.apache.struts.config.impl.ModuleConfigImpl
    Remove the specified form bean configuration instance.
    removeFormPropertyConfig(FormPropertyConfig) - Method in class org.apache.struts.config.FormBeanConfig
    Remove the specified form property configuration instance.
    removeForward(ActionForward) - Method in class org.apache.struts.action.ActionForwards
    Deprecated. Deregister a forwarding from the set configured for this servlet.
    removeForwardConfig(ForwardConfig) - Method in interface org.apache.struts.config.ModuleConfig
    Remove the specified forward configuration instance.
    removeForwardConfig(ForwardConfig) - Method in class org.apache.struts.config.ActionConfig
    Remove the specified forward configuration instance.
    removeForwardConfig(ForwardConfig) - Method in class org.apache.struts.config.impl.ModuleConfigImpl
    Remove the specified forward configuration instance.
    removeMapping(ActionMapping) - Method in class org.apache.struts.action.ActionMappings
    Deprecated. Deregister a mapping from the set configured for this servlet.
    removeMessageResourcesConfig(MessageResourcesConfig) - Method in interface org.apache.struts.config.ModuleConfig
    Remove the specified message resources configuration instance.
    removeMessageResourcesConfig(MessageResourcesConfig) - Method in class org.apache.struts.config.impl.ModuleConfigImpl
    Remove the specified message resources configuration instance.
    renderBaseElement(String, String, int, String) - Method in class org.apache.struts.taglib.html.BaseTag
    Render a fully formed HTML <base> element and return it as a String.
    renderData() - Method in class org.apache.struts.taglib.html.TextareaTag
    Renders the value displayed in the <textarea> tag.
    renderFocusJavascript() - Method in class org.apache.struts.taglib.html.FormTag
    Generates javascript to set the initial focus to the form element given in the tag's "focus" attribute.
    renderFormStartElement() - Method in class org.apache.struts.taglib.html.FormTag
    Generates the opening <form> element with appropriate attributes.
    renderOptionElement() - Method in class org.apache.struts.taglib.html.OptionTag
    Generate an HTML %lt;option> element.
    renderRadioElement(String, String) - Method in class org.apache.struts.taglib.html.RadioTag
    Renders an HTML <input type="radio"> element.
    renderResetElement(String) - Method in class org.apache.struts.taglib.html.ResetTag
    Generate an HTML reset button.
    renderSelectStartElement() - Method in class org.apache.struts.taglib.html.SelectTag
    Create an appropriate select start element based on our parameters.
    renderTextareaElement() - Method in class org.apache.struts.taglib.html.TextareaTag
    Generate an HTML <textarea> tag.
    renderToken() - Method in class org.apache.struts.taglib.html.FormTag
    Generates a hidden input field with token information, if any.
    replaceChar(String, int, char) - Method in class org.apache.struts.taglib.html.JavascriptValidatorTag
    Replaces a single character in a String
    request - Variable in class org.apache.struts.upload.MultipartRequestWrapper
    The underlying HttpServletRequest
    request - Variable in class org.apache.struts.upload.MultipartIterator
    The request instance for this class
    request - Variable in class org.apache.struts.config.ConfigHelper
    The request associated with this instance.
    REQUEST_PROCESSOR_KEY - Static variable in class org.apache.struts.Globals
    The base of the context attributes key under which our RequestProcessor instance will be stored.
    REQUEST_PROCESSOR_KEY - Static variable in class org.apache.struts.action.Action
    Deprecated. Use Globals.REQUEST_PROCESSOR_KEY instead.
    RequestActionMapping - class org.apache.struts.action.RequestActionMapping.
    Subclass of ActionMapping that defaults the form bean scope to request.
    RequestActionMapping() - Constructor for class org.apache.struts.action.RequestActionMapping
    Construct a new instance of this class with the desired default form bean scope.
    RequestProcessor - class org.apache.struts.action.RequestProcessor.
    RequestProcessor contains the processing logic that the Struts controller servlet performs as it receives each servlet request from the container.
    RequestProcessor() - Constructor for class org.apache.struts.action.RequestProcessor
     
    requestURL(HttpServletRequest) - Static method in class org.apache.struts.util.RequestUtils
    Return the URL representing the current request.
    RequestUtils - class org.apache.struts.util.RequestUtils.
    General purpose utility methods related to processing a servlet request in the Struts controller framework.
    RequestUtils() - Constructor for class org.apache.struts.util.RequestUtils
     
    reset() - Method in class org.apache.struts.upload.BufferedMultipartInputStream
    This method makes a call to the reset() method of the underlying InputStream
    reset() - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
    Resets the underlying input stream.
    reset(ActionMapping, HttpServletRequest) - Method in class org.apache.struts.validator.ValidatorForm
    Reset all properties to their default values.
    reset(ActionMapping, HttpServletRequest) - Method in class org.apache.struts.validator.DynaValidatorForm
    Reset all properties to their default values.
    reset(ActionMapping, HttpServletRequest) - Method in class org.apache.struts.action.ActionForm
    Reset all bean properties to their default state.
    reset(ActionMapping, HttpServletRequest) - Method in class org.apache.struts.action.DynaActionForm
    Reset all bean properties to their default state.
    reset(ActionMapping, ServletRequest) - Method in class org.apache.struts.action.ActionForm
    Reset all bean properties to their default state.
    reset(ActionMapping, ServletRequest) - Method in class org.apache.struts.action.DynaActionForm
    Reset all bean properties to their default state.
    resetCrlf() - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    resetForNextBoundary() - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
    Resets this stream for use with the next element, to be used after a boundary is encountered.
    resetLine() - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    resetStream() - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    ResetTag - class org.apache.struts.taglib.html.ResetTag.
    Tag for input fields of type "reset".
    ResetTag() - Constructor for class org.apache.struts.taglib.html.ResetTag
     
    resetToken(HttpServletRequest) - Method in class org.apache.struts.util.TokenProcessor
    Reset the saved transaction token in the user's session.
    resetToken(HttpServletRequest) - Method in class org.apache.struts.action.Action
    Reset the saved transaction token in the user's session.
    resolveInheritance(XmlDefinitionsSet) - Method in class org.apache.struts.tiles.xmlDefinition.XmlDefinition
    Resolve inheritance.
    resolveInheritances() - Method in class org.apache.struts.tiles.xmlDefinition.XmlDefinitionsSet
    Resolve extended instances.
    RESOURCE_DELIM - Static variable in class org.apache.struts.validator.ValidatorPlugIn
    Delimitter for Validator resources.
    resources - Variable in class org.apache.struts.validator.ValidatorPlugIn
    The set of Form instances that have been created and initialized, keyed by the struts form name.
    Resources - class org.apache.struts.validator.Resources.
    This class helps provides some useful methods for retrieving objects from different scopes of the application.
    Resources() - Constructor for class org.apache.struts.validator.Resources
     
    ResourceTag - class org.apache.struts.taglib.bean.ResourceTag.
    Define a scripting variable based on the contents of the specified web application resource.
    ResourceTag() - Constructor for class org.apache.struts.taglib.bean.ResourceTag
     
    ResourceTei - class org.apache.struts.taglib.bean.ResourceTei.
    Implementation of TagExtraInfo for the resource tag, identifying the scripting object(s) to be made visible.
    ResourceTei() - Constructor for class org.apache.struts.taglib.bean.ResourceTei
     
    response - Variable in class org.apache.struts.config.ConfigHelper
    The response associated with this instance.
    ResponseUtils - class org.apache.struts.util.ResponseUtils.
    General purpose utility methods related to generating a servlet response in the Struts controller framework.
    ResponseUtils() - Constructor for class org.apache.struts.util.ResponseUtils
     
    retrieveBean(String, String, PageContext) - Static method in class org.apache.struts.taglib.tiles.util.TagUtils
    Retrieve bean from page context, using specified scope.
    retrieveFormatString(String) - Method in class org.apache.struts.taglib.bean.WriteTag
    Retrieve format string from message bundle and return null if message not found or message string.
    retrieveMessageResources(PageContext, String, boolean) - Static method in class org.apache.struts.util.RequestUtils
    Returns the appropriate MessageResources object for the current module and the given bundle.
    retrieveTempDir(ModuleConfig) - Method in class org.apache.struts.upload.DiskMultipartRequestHandler
    Retrieves the temporary directory from either ActionServlet, a context property, or a system property, in that order.
    retrieveUserLocale(PageContext, String) - Static method in class org.apache.struts.util.RequestUtils
    Look up and return current user locale, based on the specified parameters.
    returnNull - Variable in class org.apache.struts.util.MessageResourcesFactory
    The "return null" property value to which newly created MessageResourcess should be initialized.
    returnNull - Variable in class org.apache.struts.util.MessageResources
    Indicate is a null is returned instead of an error message string when an unknown Locale or key is requested.
    RewriteTag - class org.apache.struts.taglib.html.RewriteTag.
    Generate a URL-encoded URI as a string.
    RewriteTag() - Constructor for class org.apache.struts.taglib.html.RewriteTag
     
    role - Variable in class org.apache.struts.tiles.UntyppedAttribute
    Role associated to this attribute.
    role - Variable in class org.apache.struts.tiles.ComponentDefinition
    role associated to definition
    role - Variable in class org.apache.struts.tiles.xmlDefinition.XmlAttribute
    Attribute value.
    role - Variable in class org.apache.struts.taglib.tiles.PutListTag
    Role attribute.
    role - Variable in class org.apache.struts.taglib.tiles.GetAttributeTag
    Role attribute
    role - Variable in class org.apache.struts.taglib.tiles.PutTag
    Role attribute
    role - Variable in class org.apache.struts.taglib.tiles.DefinitionTagSupport
    Role associated to definition.
    role - Variable in class org.apache.struts.taglib.tiles.InsertTag.InsertHandler
     
    role - Variable in class org.apache.struts.taglib.template.PutTag
    Deprecated. The role that the user must be in to store content.
    role - Variable in class org.apache.struts.taglib.template.GetTag
    Deprecated. The role that the user must be in to retrieve content.
    role - Variable in class org.apache.struts.taglib.logic.ConditionalTagBase
    The name of the security role to be checked for.
    ROLE_DELIMITER - Static variable in class org.apache.struts.taglib.tiles.InsertTag
    The role delimiter.
    ROLE_DELIMITER - Static variable in class org.apache.struts.taglib.logic.PresentTag
     
    roleNames - Variable in class org.apache.struts.config.ActionConfig
    The set of security role names used to authorize access to this Action, as an array for faster access.
    roles - Variable in class org.apache.struts.config.ActionConfig
    Comma-delimited list of security role names allowed to request this Action.
    rollback() - Method in interface org.apache.struts.upload.MultipartRequestHandler
    This method is called on when there's some sort of problem and the form post needs to be rolled back.
    rollback() - Method in class org.apache.struts.upload.CommonsMultipartRequestHandler
    Cleans up when a problem occurs during request processing.
    rollback() - Method in class org.apache.struts.upload.DiskMultipartRequestHandler
    Delete all the files uploaded.
    rows - Variable in class org.apache.struts.taglib.html.BaseInputTag
    The number of rows for this field, or negative for no limit.

    S

    saveBody - Variable in class org.apache.struts.taglib.html.SelectTag
    The saved body content of this tag.
    saveErrors(HttpServletRequest, ActionErrors) - Method in class org.apache.struts.action.Action
    Save the specified error messages keys into the appropriate request attribute for use by the <html:errors> tag, if any messages are required.
    saveException(PageContext, Throwable) - Static method in class org.apache.struts.util.RequestUtils
    Save the specified exception as a request attribute for later use.
    saveException(PageContext, Throwable) - Static method in class org.apache.struts.taglib.tiles.util.TagUtils
    Save the specified exception as a request attribute for later use.
    saveException(Throwable) - Method in class org.apache.struts.taglib.template.GetTag
    Deprecated. Use Tiles instead.
    saveException(Throwable) - Method in class org.apache.struts.taglib.template.InsertTag
    Deprecated. Use Tiles instead.
    saveMessages(HttpServletRequest, ActionMessages) - Method in class org.apache.struts.action.Action
    Save the specified messages keys into the appropriate request attribute for use by the <html:messages> tag (if messages="true" is set), if any messages are required.
    saveToken(HttpServletRequest) - Method in class org.apache.struts.util.TokenProcessor
    Save a new transaction token in the user's current session, creating a new session if necessary.
    saveToken(HttpServletRequest) - Method in class org.apache.struts.action.Action
    Save a new transaction token in the user's current session, creating a new session if necessary.
    scope - Variable in class org.apache.struts.taglib.tiles.DefinitionTag
    Scope into which definition will be saved.
    scope - Variable in class org.apache.struts.taglib.tiles.ImportAttributeTag
    The scope value.
    scope - Variable in class org.apache.struts.taglib.tiles.UseAttributeTag
    The scope value.
    scope - Variable in class org.apache.struts.taglib.tiles.AttributeToScopeTag
    Deprecated. The scope value.
    scope - Variable in class org.apache.struts.taglib.logic.IterateTag
    The scope of the bean specified by the name property, if any.
    scope - Variable in class org.apache.struts.taglib.logic.ConditionalTagBase
    The scope to search for the bean named by the name property, or "any scope" if null.
    scope - Variable in class org.apache.struts.taglib.logic.RedirectTag
    The scope of the bean specified by the name property, if any.
    scope - Variable in class org.apache.struts.taglib.html.LinkTag
    The scope of the bean specified by the name property, if any.
    scope - Variable in class org.apache.struts.taglib.html.ImgTag
    The scope of the bean specified by the name property, if any.
    scope - Variable in class org.apache.struts.taglib.html.FormTag
    The scope (request or session) under which our associated bean is stored.
    scope - Variable in class org.apache.struts.taglib.bean.DefineTag
    The scope within which to search for the specified bean.
    scope - Variable in class org.apache.struts.taglib.bean.MessageTag
    The scope to be searched to retrieve the specified bean.
    scope - Variable in class org.apache.struts.taglib.bean.WriteTag
    The scope to be searched to retrieve the specified bean.
    scope - Variable in class org.apache.struts.taglib.bean.SizeTag
    The scope within which to search for the specified bean.
    scope - Variable in class org.apache.struts.config.ExceptionConfig
    The scope in which we should expose the ActionError for this exception handler.
    scope - Variable in class org.apache.struts.config.ActionConfig
    Identifier of the scope ("request" or "session") within which our form bean is accessed, if any.
    scopeName - Variable in class org.apache.struts.taglib.tiles.ImportAttributeTag
    The scope name.
    scopeName - Variable in class org.apache.struts.taglib.tiles.UseAttributeTag
    The scope name.
    scopeName - Variable in class org.apache.struts.taglib.tiles.AttributeToScopeTag
    Deprecated. The scope name.
    scopes - Static variable in class org.apache.struts.util.RequestUtils
    Maps lowercase JSP scope names to their PageContext integer constant values.
    scrolling - Variable in class org.apache.struts.taglib.html.FrameTag
    What type of scrolling should be supported (yes, no, auto)?
    SELECT_KEY - Static variable in class org.apache.struts.taglib.html.Constants
    The attribute key for the select tag itself.
    selectApplication(HttpServletRequest, ServletContext) - Static method in class org.apache.struts.util.RequestUtils
    Deprecated. use RequestUtils.selectModule(HttpServletRequest,ServletContext)
    selectApplication(String, HttpServletRequest, ServletContext) - Static method in class org.apache.struts.util.RequestUtils
    Deprecated. use RequestUtils.selectModule(String,HttpServletRequest,ServletContext)
    selectModule(HttpServletRequest, ServletContext) - Static method in class org.apache.struts.util.RequestUtils
    Select the module to which the specified request belongs, and add corresponding request attributes to this request.
    selectModule(String, HttpServletRequest, ServletContext) - Static method in class org.apache.struts.util.RequestUtils
    Select the module to which the specified request belongs, and add corresponding request attributes to this request.
    SelectTag - class org.apache.struts.taglib.html.SelectTag.
    Custom tag that represents an HTML select element, associated with a bean property specified by our attributes.
    selectTag() - Method in class org.apache.struts.taglib.html.OptionTag
    Acquire the select tag we are associated with.
    SelectTag() - Constructor for class org.apache.struts.taglib.html.SelectTag
     
    server - Variable in class org.apache.struts.taglib.html.BaseTag
    The server name to use instead of request.getServerName().
    serverURL(HttpServletRequest) - Static method in class org.apache.struts.util.RequestUtils
    Return the URL representing the scheme, server, and port number of the current request.
    serverValue() - Method in class org.apache.struts.taglib.html.RadioTag
    Return the String to be used in the radio tag's value attribute that gets sent to the server on form submission.
    servlet - Variable in class org.apache.struts.plugins.ModuleConfigVerifier
    The ActionServlet instance we are associated with.
    servlet - Variable in class org.apache.struts.validator.ValidatorPlugIn
    The ActionServlet owning this application.
    servlet - Variable in class org.apache.struts.upload.CommonsMultipartRequestHandler
    The servlet with which this handler is associated.
    servlet - Variable in class org.apache.struts.upload.DiskMultipartRequestHandler
    The ActionServlet instance used for this class.
    servlet - Variable in class org.apache.struts.taglib.html.FormTag
    The ActionServlet instance we are associated with (so that we can initialize the servlet property on any form bean that we create).
    servlet - Variable in class org.apache.struts.action.RequestProcessor
    The controller servlet we are associated with.
    servlet - Variable in class org.apache.struts.action.ActionServletWrapper
    The controller servlet instance to which we are attached.
    servlet - Variable in class org.apache.struts.action.ActionForm
    The controller servlet instance to which we are attached.
    servlet - Variable in class org.apache.struts.action.Action
    The controller servlet to which we are attached.
    servlet - Variable in class org.apache.struts.action.ActionMappings
    Deprecated. The ActionServlet instance of our owning application.
    SERVLET_CONTEXT_KEY - Static variable in class org.apache.struts.validator.Resources
    Resources key the ServletContext is stored under.
    SERVLET_CONTEXT_KEY - Static variable in class org.apache.struts.util.StrutsValidatorUtil
    Deprecated. Resources key the ServletContext is stored under.
    SERVLET_KEY - Static variable in class org.apache.struts.Globals
    The context attributes key under which we store the mapping defined for our controller serlet, which will be either a path-mapped pattern (/action/*) or an extension mapped pattern (*.do).
    SERVLET_KEY - Static variable in class org.apache.struts.action.Action
    Deprecated. Use Globals.SERVLET_KEY instead.
    ServletContextWriter - class org.apache.struts.util.ServletContextWriter.
    A PrintWriter implementation that uses the logging facilities of a javax.servlet.ServletContext to output its results.
    ServletContextWriter(ServletContext) - Constructor for class org.apache.struts.util.ServletContextWriter
    Construct a ServletContextWriter associated with the specified ServletContext instance.
    servletMapping - Variable in class org.apache.struts.action.ActionServlet
    The URL pattern to which we are mapped in our web application deployment descriptor.
    servletName - Variable in class org.apache.struts.action.ActionServlet
    The servlet name under which we are registered in our web application deployment descriptor.
    session - Variable in class org.apache.struts.config.ConfigHelper
    The session associated with this instance.
    SessionActionMapping - class org.apache.struts.action.SessionActionMapping.
    Subclass of ActionMapping that defaults the form bean scope to session.
    SessionActionMapping() - Constructor for class org.apache.struts.action.SessionActionMapping
    Construct a new instance of this class with the desired default form bean scope.
    set(String, int, Object) - Method in class org.apache.struts.action.DynaActionForm
    Set the value of an indexed property with the specified name.
    set(String, Object) - Method in class org.apache.struts.action.DynaActionForm
    Set the value of a simple property with the specified name.
    set(String, String, Object) - Method in class org.apache.struts.action.DynaActionForm
    Set the value of a mapped property with the specified name.
    setAccept(String) - Method in class org.apache.struts.taglib.html.BaseFieldTag
     
    setAccesskey(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Sets the accessKey character.
    setAction(String) - Method in class org.apache.struts.taglib.html.LinkTag
     
    setAction(String) - Method in class org.apache.struts.taglib.html.FormTag
    Set the action URL to which this form should be submitted.
    setActionDefinition(ServletRequest, ComponentDefinition) - Static method in class org.apache.struts.tiles.DefinitionsUtil
    Deprecated. Store definition in jsp context.
    setActionMappingClass(String) - Method in interface org.apache.struts.config.ModuleConfig
    The default class name to be used when creating action mapping instances.
    setActionMappingClass(String) - Method in class org.apache.struts.config.impl.ModuleConfigImpl
    The default class name to be used when creating action mapping instances.
    SetActionMappingClassRule - class org.apache.struts.config.SetActionMappingClassRule.
    Class that sets the name of the class to use when creating action mapping instances.
    SetActionMappingClassRule() - Constructor for class org.apache.struts.config.SetActionMappingClassRule
     
    setAlign(String) - Method in class org.apache.struts.taglib.html.ImageTag
    Deprecated. Align attribute is deprecated in HTML 4.x.
    setAlign(String) - Method in class org.apache.struts.taglib.html.ImgTag
     
    setAlt(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Sets the alternate text attribute.
    setAltKey(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Sets the message resources key of the alternate text.
    setAnchor(String) - Method in class org.apache.struts.taglib.logic.RedirectTag
     
    setAnchor(String) - Method in class org.apache.struts.taglib.html.LinkTag
     
    setAnchor(String) - Method in class org.apache.struts.taglib.bean.IncludeTag
     
    setApplication(ServletContext) - Method in class org.apache.struts.config.ConfigHelper
    Set the application associated with this instance.
    setApplicationConfig(ModuleConfig) - Method in class org.apache.struts.config.ActionConfig
    Deprecated. ActionConfig.setModuleConfig(ModuleConfig)
    setArg0(String) - Method in class org.apache.struts.taglib.bean.MessageTag
     
    setArg1(String) - Method in class org.apache.struts.taglib.bean.MessageTag
     
    setArg2(String) - Method in class org.apache.struts.taglib.bean.MessageTag
     
    setArg3(String) - Method in class org.apache.struts.taglib.bean.MessageTag
     
    setArg4(String) - Method in class org.apache.struts.taglib.bean.MessageTag
     
    setAttribute(PageContext, String, Object) - Static method in class org.apache.struts.taglib.tiles.util.TagUtils
    Store bean in REQUEST_SCOPE context.
    setAttribute(PageContext, String, Object, String) - Static method in class org.apache.struts.taglib.tiles.util.TagUtils
    Store bean in requested context.
    setAttribute(String) - Method in class org.apache.struts.tiles.xmlDefinition.XmlAttribute
    Sets the value of the name property.
    setAttribute(String) - Method in class org.apache.struts.taglib.tiles.GetAttributeTag
    Set attribute.
    setAttribute(String) - Method in class org.apache.struts.taglib.tiles.InsertTag
    Set attribute.
    setAttribute(String) - Method in class org.apache.struts.config.ActionConfig
    Set the request-scope or session-scope attribute name under which our form bean is accessed, if it is different from the form bean's specified name.
    setAttribute(String, Object) - Method in class org.apache.struts.upload.MultipartRequestWrapper
     
    setAttribute(String, Object) - Method in class org.apache.struts.tiles.DefinitionsFactoryConfig
    Set value of an additional attribute.
    setBeanName(String) - Method in class org.apache.struts.taglib.tiles.PutTag
    Set bean name.
    setBeanName(String) - Method in class org.apache.struts.taglib.tiles.InsertTag
    Set bean name.
    setBeanName(String) - Method in class org.apache.struts.taglib.nested.NestedReference
    Setter for the bean name
    setBeanProperty(String) - Method in class org.apache.struts.taglib.tiles.PutTag
    Set bean property.
    setBeanProperty(String) - Method in class org.apache.struts.taglib.tiles.InsertTag
    Set bean property.
    setBeanScope(String) - Method in class org.apache.struts.taglib.tiles.PutTag
    Set bean scope.
    setBeanScope(String) - Method in class org.apache.struts.taglib.tiles.InsertTag
    Set bean scope.
    setBody(String) - Method in class org.apache.struts.tiles.xmlDefinition.XmlAttribute
    Sets the value of the value property.
    setBorder(String) - Method in class org.apache.struts.taglib.html.ImageTag
     
    setBorder(String) - Method in class org.apache.struts.taglib.html.ImgTag
     
    setBoundary(String) - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
    Sets the boundary that terminates the data for the stream, after adding the prefix "--"
    setBufferSize(int) - Method in class org.apache.struts.upload.MultipartIterator
    Set the maximum amount of bytes read from a line at one time
    setBufferSize(int) - Method in class org.apache.struts.config.ControllerConfig
     
    setBundle(String) - Method in class org.apache.struts.taglib.html.ErrorsTag
     
    setBundle(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Sets the name of the message resources bundle to use.
    setBundle(String) - Method in class org.apache.struts.taglib.html.MessagesTag
     
    setBundle(String) - Method in class org.apache.struts.taglib.html.OptionTag
     
    setBundle(String) - Method in class org.apache.struts.taglib.bean.MessageTag
     
    setBundle(String) - Method in class org.apache.struts.taglib.bean.WriteTag
     
    setBundle(String) - Method in class org.apache.struts.config.ExceptionConfig
     
    setCdata(String) - Method in class org.apache.struts.taglib.html.JavascriptValidatorTag
    Sets the cdata status.
    setCharacterEncoding(String) - Method in class org.apache.struts.upload.MultipartRequestWrapper
    This method does nothing.
    setClassname(String) - Method in class org.apache.struts.taglib.tiles.InitDefinitionsTag
    Set classname.
    setClassname(String) - Method in class org.apache.struts.taglib.tiles.UseAttributeTag
    Set the class name.
    setClassName(String) - Method in class org.apache.struts.config.PlugInConfig
     
    setCollection(Object) - Method in class org.apache.struts.taglib.logic.IterateTag
     
    setCollection(Object) - Method in class org.apache.struts.taglib.bean.SizeTag
     
    setCollection(String) - Method in class org.apache.struts.taglib.html.OptionsTag
     
    setCols(String) - Method in class org.apache.struts.taglib.html.BaseInputTag
    Set the number of columns for this field.
    setComponent(String) - Method in class org.apache.struts.taglib.tiles.InsertTag
    Set component.
    setConfig(DefinitionsFactoryConfig, ServletContext) - Method in interface org.apache.struts.tiles.DefinitionsFactory
    Set factory configuration.
    setConfig(DefinitionsFactoryConfig, ServletContext) - Method in class org.apache.struts.tiles.definition.ComponentDefinitionsFactoryWrapper
    Set underlying factory configuration.
    setContent(Object) - Method in class org.apache.struts.tiles.xmlDefinition.XmlAttribute
    Sets the value of the value property.
    setContent(Object) - Method in class org.apache.struts.taglib.tiles.PutTag
    Set content.
    setContent(String) - Method in class org.apache.struts.taglib.tiles.PutTag
    Set content.
    setContent(String) - Method in class org.apache.struts.taglib.template.PutTag
    Deprecated. Use Tiles instead.
    setContentType(String) - Method in class org.apache.struts.upload.DiskFile
    Set the content type
    setContentType(String) - Method in class org.apache.struts.upload.CommonsMultipartRequestHandler.CommonsFormFile
    Sets the content type for this file.
    setContentType(String) - Method in interface org.apache.struts.upload.FormFile
    Sets the content type for this file.
    setContentType(String) - Method in class org.apache.struts.upload.MultipartElement
    Set the content type.
    setContentType(String) - Method in class org.apache.struts.config.ControllerConfig
     
    setContext(ComponentContext, ServletRequest) - Static method in class org.apache.struts.tiles.ComponentContext
    Store component context into request.
    setContextRelative(boolean) - Method in class org.apache.struts.config.ForwardConfig
     
    setController(String) - Method in class org.apache.struts.tiles.ComponentDefinition
    Set associated controller URL.
    setController(String) - Method in class org.apache.struts.taglib.tiles.DefinitionTagSupport
    Set associated controller name.
    setControllerClass(String) - Method in class org.apache.struts.tiles.ComponentDefinition
    Set associated controller name as a classtype, and controller type as "classname".
    setControllerClass(String) - Method in class org.apache.struts.taglib.tiles.DefinitionTagSupport
    Set associated controller name as a classtype and controller type as "classname".
    setControllerConfig(ControllerConfig) - Method in interface org.apache.struts.config.ModuleConfig
    The controller configuration object for this module.
    setControllerConfig(ControllerConfig) - Method in class org.apache.struts.config.impl.ModuleConfigImpl
    The controller configuration object for this module.
    setControllerInstance(Controller) - Method in class org.apache.struts.tiles.ComponentDefinition
    Set controller.
    setControllerName(String) - Method in class org.apache.struts.taglib.tiles.DefinitionTagSupport
    Set associated controller name.
    setControllerType(String) - Method in class org.apache.struts.tiles.ComponentDefinition
    Set associated controller type.
    setControllerType(String) - Method in class org.apache.struts.taglib.tiles.DefinitionTagSupport
    Set associated controller type.
    setControllerUrl(String) - Method in class org.apache.struts.tiles.ComponentDefinition
    Set associated controller name as an url, and controller type as "url".
    setControllerUrl(String) - Method in class org.apache.struts.taglib.tiles.DefinitionTagSupport
    Set associated controller name as an url, and controller type as "url".
    setCookie(String) - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
     
    setCurrentPlugInConfigObject(PlugInConfig) - Method in class org.apache.struts.tiles.TilesPlugin
    Method used by the ActionServlet initializing this plugin.
    setData(byte[]) - Method in class org.apache.struts.upload.MultipartElement
    Deprecated. Use the setFile method to set the file that represents the data of this element
    setDebug(int) - Method in class org.apache.struts.config.ControllerConfig
     
    setDebugLevel(int) - Method in class org.apache.struts.tiles.DefinitionsFactoryConfig
    Deprecated. Use commons-logging mechanism.
    setDefinition(String) - Method in class org.apache.struts.taglib.tiles.InsertTag
    Set definition.
    setDefinitionConfigFiles(String) - Method in class org.apache.struts.tiles.DefinitionsFactoryConfig
    Set the definition config files.
    setDefinitionsFactory(ComponentDefinitionsFactory, ServletContext) - Static method in class org.apache.struts.tiles.DefinitionsUtil
    Deprecated. since 20020708. Replaced by makeFactoryAccessible()
    setDetailLevel(int) - Method in class org.apache.struts.tiles.xmlDefinition.XmlParser
    Deprecated. Use the commons-logging to set digester debug level.
    setDirect(String) - Method in class org.apache.struts.tiles.xmlDefinition.XmlAttribute
    Sets the value of the value property.
    setDirect(String) - Method in class org.apache.struts.taglib.tiles.PutTag
    Set direct.
    setDirect(String) - Method in class org.apache.struts.taglib.template.PutTag
    Deprecated. Use Tiles instead.
    setDisabled(boolean) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Sets the disabled event handler.
    setDisabled(boolean) - Method in class org.apache.struts.taglib.html.OptionTag
     
    setDynaActionFormClass(DynaActionFormClass) - Method in class org.apache.struts.action.DynaActionForm
    Set the DynaActionFormClass instance that we are associated with.
    setDynamic(boolean) - Method in class org.apache.struts.config.FormBeanConfig
    Deprecated. The value to be returned by getDynamic() is now computed automatically in setType()
    setDynamicJavascript(String) - Method in class org.apache.struts.taglib.html.JavascriptValidatorTag
    Sets whether or not to generate the dynamic JavaScript.
    setEnctype(String) - Method in class org.apache.struts.taglib.html.FormTag
    Set the content encoding used when submitting this form.
    setError() - Method in class org.apache.struts.util.ServletContextWriter
    Set the error state for this stream.
    setExtends(String) - Method in class org.apache.struts.tiles.xmlDefinition.XmlDefinition
    Set extends.
    setExtends(String) - Method in class org.apache.struts.taglib.tiles.DefinitionTag
    Set extends (parent) definition name.
    setFactory(String) - Method in class org.apache.struts.config.MessageResourcesConfig
     
    setFactoryClass(String) - Static method in class org.apache.struts.util.MessageResourcesFactory
    Set the fully qualified class name that is used for MessageResourcesFactory instances.
    setFactoryClass(String) - Static method in class org.apache.struts.config.ModuleConfigFactory
    Set the fully qualified class name that is used for ModuleConfigFactory instances.
    setFactoryClassname(String) - Method in class org.apache.struts.tiles.DefinitionsFactoryConfig
    Set the classname of the factory..
    setFactoryName(String) - Method in class org.apache.struts.tiles.DefinitionsFactoryConfig
    Set the factory name.
    setFast(boolean) - Method in class org.apache.struts.action.ActionForwards
    Deprecated. Set the "fast" mode flag.
    setFast(boolean) - Method in class org.apache.struts.action.ActionFormBeans
    Deprecated. Set the "fast" mode flag.
    setFast(boolean) - Method in class org.apache.struts.action.ActionMappings
    Deprecated. Set the "fast" mode flag.
    setFatal(boolean) - Method in class org.apache.struts.plugins.ModuleConfigVerifier
    Set the "configuration errors are fatal" flag.
    setFile(File) - Method in class org.apache.struts.upload.MultipartElement
    Set the file that represents this element.
    setFile(String) - Method in class org.apache.struts.taglib.tiles.InitDefinitionsTag
    Set file.
    setFileName(String) - Method in class org.apache.struts.upload.DiskFile
    Set the file name
    setFileName(String) - Method in class org.apache.struts.upload.CommonsMultipartRequestHandler.CommonsFormFile
    Sets the (client-side) file name for this file.
    setFileName(String) - Method in interface org.apache.struts.upload.FormFile
    Sets the file name of this file.
    setFileName(String) - Method in class org.apache.struts.upload.MultipartElement
    Set the file name for this element.
    setFileSize(int) - Method in class org.apache.struts.upload.DiskFile
    Set the file size
    setFileSize(int) - Method in class org.apache.struts.upload.CommonsMultipartRequestHandler.CommonsFormFile
    Sets the size, in bytes, for this file.
    setFileSize(int) - Method in interface org.apache.struts.upload.FormFile
    Sets the file size.
    setFilter(boolean) - Method in class org.apache.struts.taglib.nested.NestedWriteNestingTag
    Setter method for the filter property
    setFilter(boolean) - Method in class org.apache.struts.taglib.html.OptionsTag
     
    setFilter(boolean) - Method in class org.apache.struts.taglib.html.OptionsCollectionTag
     
    setFilter(boolean) - Method in class org.apache.struts.taglib.bean.WriteTag
     
    setFlush(boolean) - Method in class org.apache.struts.taglib.tiles.InsertTag
    Set flush.
    setFlush(boolean) - Method in class org.apache.struts.taglib.template.GetTag
    Deprecated. Use Tiles instead.
    setFlush(String) - Method in class org.apache.struts.taglib.tiles.InsertTag
    Set flush.
    setFocus(String) - Method in class org.apache.struts.taglib.html.FormTag
    Set the focus field name for this form.
    setFocusIndex(String) - Method in class org.apache.struts.taglib.html.FormTag
    Sets the focusIndex.
    setFooter(String) - Method in class org.apache.struts.taglib.html.MessagesTag
     
    setFormat(String) - Method in class org.apache.struts.taglib.bean.WriteTag
     
    setFormatKey(String) - Method in class org.apache.struts.taglib.bean.WriteTag
     
    setFormBean(String) - Method in class org.apache.struts.taglib.bean.StrutsTag
     
    setFormName(String) - Method in class org.apache.struts.taglib.html.JavascriptValidatorTag
    Sets the key (form name) that will be used to retrieve a set of validation rules to be performed on the bean passed in for validation.
    setForward(ActionForward) - Method in class org.apache.struts.config.ConfigHelper
    Set the forward associated with this instance.
    setForward(String) - Method in class org.apache.struts.taglib.logic.RedirectTag
     
    setForward(String) - Method in class org.apache.struts.taglib.html.LinkTag
     
    setForward(String) - Method in class org.apache.struts.taglib.bean.IncludeTag
     
    setForward(String) - Method in class org.apache.struts.taglib.bean.StrutsTag
     
    setForward(String) - Method in class org.apache.struts.config.ActionConfig
    Set the context-relative path of the web application resource that will process this request.
    setForwardPattern(String) - Method in class org.apache.struts.config.ControllerConfig
     
    setFrameborder(String) - Method in class org.apache.struts.taglib.html.FrameTag
     
    setFrameName(String) - Method in class org.apache.struts.taglib.html.FrameTag
     
    setHandler(String) - Method in class org.apache.struts.config.ExceptionConfig
     
    setHeader(String) - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
     
    setHeader(String) - Method in class org.apache.struts.taglib.html.MessagesTag
     
    setHeight(String) - Method in class org.apache.struts.taglib.html.ImgTag
     
    setHref(String) - Method in class org.apache.struts.taglib.logic.RedirectTag
     
    setHref(String) - Method in class org.apache.struts.taglib.html.LinkTag
     
    setHref(String) - Method in class org.apache.struts.taglib.bean.IncludeTag
     
    setHspace(String) - Method in class org.apache.struts.taglib.html.ImgTag
     
    setHtmlComment(String) - Method in class org.apache.struts.taglib.html.JavascriptValidatorTag
    Sets whether or not to delimit the JavaScript with html comments.
    setIcon(String) - Method in class org.apache.struts.tiles.beans.SimpleMenuItem
    Set icon property.
    setIcon(String) - Method in interface org.apache.struts.tiles.beans.MenuItem
    Set icon property.
    setId(String) - Method in class org.apache.struts.taglib.tiles.DefinitionTag
    Set the ID.
    setId(String) - Method in class org.apache.struts.taglib.logic.IterateTag
     
    setId(String) - Method in class org.apache.struts.taglib.html.MessagesTag
     
    setId(String) - Method in class org.apache.struts.taglib.bean.DefineTag
     
    setId(String) - Method in class org.apache.struts.taglib.bean.IncludeTag
     
    setId(String) - Method in class org.apache.struts.taglib.bean.StrutsTag
     
    setId(String) - Method in class org.apache.struts.taglib.bean.SizeTag
     
    setId(String) - Method in class org.apache.struts.taglib.bean.ResourceTag
     
    setId(String) - Method in class org.apache.struts.taglib.bean.ParameterTag
     
    setId(String) - Method in class org.apache.struts.taglib.bean.PageTag
     
    setId(String) - Method in class org.apache.struts.taglib.bean.HeaderTag
     
    setId(String) - Method in class org.apache.struts.taglib.bean.CookieTag
     
    setIdName(String) - Method in class org.apache.struts.taglib.html.RadioTag
    Set the idName.
    setIgnore(boolean) - Method in class org.apache.struts.taglib.tiles.GetAttributeTag
    Set ignoring flag when attribute is not found.
    setIgnore(boolean) - Method in class org.apache.struts.taglib.tiles.ImportAttributeTag
    Set ignore flag.
    setIgnore(boolean) - Method in class org.apache.struts.taglib.tiles.UseAttributeTag
    Set ignore.
    setIgnore(boolean) - Method in class org.apache.struts.taglib.tiles.InsertTag
    Set ignore.
    setIgnore(boolean) - Method in class org.apache.struts.taglib.bean.WriteTag
     
    setImageName(String) - Method in class org.apache.struts.taglib.html.ImgTag
     
    setInclude(String) - Method in class org.apache.struts.config.ActionConfig
    Set context-relative path of the web application resource that will process this request.
    setIndexed(boolean) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Sets the indexed value.
    setIndexId(String) - Method in class org.apache.struts.taglib.logic.IterateTag
     
    setIndexId(String) - Method in class org.apache.struts.taglib.html.LinkTag
     
    setInitial(String) - Method in class org.apache.struts.config.FormPropertyConfig
     
    setInput(String) - Method in class org.apache.struts.taglib.bean.ResourceTag
     
    setInput(String) - Method in class org.apache.struts.config.ActionConfig
    Set the context-relative path of the input form to which control should be returned if a validation error is encountered.
    setInputForward(boolean) - Method in class org.apache.struts.config.ControllerConfig
     
    setInputStream(InputStream) - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
    Sets the input stream used to read multipart data.
    setInstance(String) - Method in class org.apache.struts.taglib.tiles.InsertTag
    Deprecated. Use setDefinition() instead.
    setIsmap(String) - Method in class org.apache.struts.taglib.html.ImgTag
     
    setIsVisited(boolean) - Method in class org.apache.struts.tiles.xmlDefinition.XmlDefinition
    Set isVisited.
    setKey(String) - Method in class org.apache.struts.taglib.html.OptionTag
     
    setKey(String) - Method in class org.apache.struts.taglib.bean.MessageTag
     
    setKey(String) - Method in class org.apache.struts.config.ExceptionConfig
     
    setKey(String) - Method in class org.apache.struts.config.MessageResourcesConfig
     
    setKey(String) - Method in class org.apache.struts.config.DataSourceConfig
     
    setLabel(String) - Method in class org.apache.struts.util.LabelValueBean
     
    setLabel(String) - Method in class org.apache.struts.taglib.html.OptionsCollectionTag
     
    setLabelName(String) - Method in class org.apache.struts.taglib.html.OptionsTag
     
    setLabelProperty(String) - Method in class org.apache.struts.taglib.html.OptionsTag
     
    setLength(String) - Method in class org.apache.struts.taglib.logic.IterateTag
     
    setLineSize(int) - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    setLink(String) - Method in class org.apache.struts.tiles.beans.SimpleMenuItem
    Set link property.
    setLink(String) - Method in interface org.apache.struts.tiles.beans.MenuItem
    Set link property.
    setLinkName(String) - Method in class org.apache.struts.taglib.html.LinkTag
     
    setList(List) - Method in class org.apache.struts.action.ActionMessages.ActionMessageItem
     
    setLocale(boolean) - Method in class org.apache.struts.taglib.html.HtmlTag
     
    setLocale(boolean) - Method in class org.apache.struts.config.ControllerConfig
     
    setLocale(HttpServletRequest, Locale) - Method in class org.apache.struts.action.Action
    Set the user's currently selected Locale.
    setLocale(String) - Method in class org.apache.struts.taglib.html.ErrorsTag
     
    setLocale(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Sets the name of the session attribute for our locale.
    setLocale(String) - Method in class org.apache.struts.taglib.html.MessagesTag
     
    setLocale(String) - Method in class org.apache.struts.taglib.html.OptionTag
     
    setLocale(String) - Method in class org.apache.struts.taglib.bean.MessageTag
     
    setLocale(String) - Method in class org.apache.struts.taglib.bean.WriteTag
     
    setLocation(String) - Method in class org.apache.struts.taglib.logic.MatchTag
     
    setLongdesc(String) - Method in class org.apache.struts.taglib.html.FrameTag
     
    setLowsrc(String) - Method in class org.apache.struts.taglib.html.ImgTag
     
    setMapping(ActionMapping) - Method in interface org.apache.struts.upload.MultipartRequestHandler
    Convienience method to set a reference to a working ActionMapping instance.
    setMapping(ActionMapping) - Method in class org.apache.struts.upload.CommonsMultipartRequestHandler
    Sets the action mapping with which this handler is associated.
    setMapping(ActionMapping) - Method in class org.apache.struts.upload.DiskMultipartRequestHandler
     
    setMapping(String) - Method in class org.apache.struts.taglib.bean.StrutsTag
     
    setMarginheight(int) - Method in class org.apache.struts.taglib.html.FrameTag
     
    setMarginwidth(int) - Method in class org.apache.struts.taglib.html.FrameTag
     
    setMaxFileSize(String) - Method in class org.apache.struts.config.ControllerConfig
     
    setMaxLength(long) - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
    Set the maximum length in bytes to read, or -1 for an unlimited length.
    setMaxlength(String) - Method in class org.apache.struts.taglib.html.BaseInputTag
    Set the maximum length allowed.
    setMaxSize(long) - Method in class org.apache.struts.upload.MultipartIterator
    Set the maximum post data size allowed for a multipart request
    setMemFileSize(String) - Method in class org.apache.struts.config.ControllerConfig
     
    setMessage(String) - Method in class org.apache.struts.taglib.logic.MessagesPresentTag
     
    setMessage(String) - Method in class org.apache.struts.taglib.html.MessagesTag
     
    setMethod(String) - Method in class org.apache.struts.taglib.html.JavascriptValidatorTag
    Sets the method name that will be used for the Javascript validation method name if it has a value.
    setMethod(String) - Method in class org.apache.struts.taglib.html.FormTag
    Set the request method used when submitting this form.
    setModuleAware(boolean) - Method in class org.apache.struts.tiles.DefinitionsFactoryConfig
    Set the module aware flag.
    setModuleAware(boolean) - Method in class org.apache.struts.tiles.TilesPlugin
    Set the module aware flag.
    setModuleConfig(ModuleConfig) - Method in class org.apache.struts.config.FormBeanConfig
    Set the ModuleConfig with which this form bean definition is associated.
    setModuleConfig(ModuleConfig) - Method in class org.apache.struts.config.ActionConfig
    The module configuration with which we are associated.
    setMultipartClass(String) - Method in class org.apache.struts.config.ActionConfig
    Set the fully qualified Java class name of the MultipartRequestHandler implementation class used to process multi-part request data for this Action.
    setMultipartClass(String) - Method in class org.apache.struts.config.ControllerConfig
     
    setMultipartRequestHandler(MultipartRequestHandler) - Method in class org.apache.struts.action.ActionForm
    Set the Handler provides to use in dealing with file uploads.
    setMultiple(String) - Method in class org.apache.struts.taglib.html.SelectTag
     
    setMultiple(String) - Method in class org.apache.struts.taglib.bean.ParameterTag
     
    setMultiple(String) - Method in class org.apache.struts.taglib.bean.HeaderTag
     
    setMultiple(String) - Method in class org.apache.struts.taglib.bean.CookieTag
     
    setName(HttpServletRequest, String) - Static method in class org.apache.struts.taglib.nested.NestedPropertyHelper
    Sets the provided name into the request object for reference by the other nested tags.
    setName(String) - Method in class org.apache.struts.upload.MultipartElement
    Set the name for this element.
    setName(String) - Method in class org.apache.struts.tiles.ComponentDefinition
    Sets the value of the name property.
    setName(String) - Method in class org.apache.struts.tiles.xmlDefinition.XmlAttribute
     
    setName(String) - Method in class org.apache.struts.taglib.tiles.PutListTag
    Set property.
    setName(String) - Method in class org.apache.struts.taglib.tiles.GetAttributeTag
    Set Name.
    setName(String) - Method in class org.apache.struts.taglib.tiles.PutTag
    Set name.
    setName(String) - Method in class org.apache.struts.taglib.tiles.ImportAttributeTag
    Set the name.
    setName(String) - Method in class org.apache.struts.taglib.tiles.UseAttributeTag
    Set name.
    setName(String) - Method in class org.apache.struts.taglib.tiles.InsertTag
    Set name.
    setName(String) - Method in class org.apache.struts.taglib.template.PutTag
    Deprecated. Use Tiles instead.
    setName(String) - Method in class org.apache.struts.taglib.template.GetTag
    Deprecated. Use Tiles instead.
    setName(String) - Method in class org.apache.struts.taglib.nested.NestedRootTag
    Setter method for the name property
    setName(String) - Method in class org.apache.struts.taglib.nested.NestedPropertyTag
     
    setName(String) - Method in interface org.apache.struts.taglib.nested.NestedNameSupport
    The setter for the name property
    setName(String) - Method in class org.apache.struts.taglib.logic.IterateTag
     
    setName(String) - Method in class org.apache.struts.taglib.logic.ForwardTag
     
    setName(String) - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
     
    setName(String) - Method in class org.apache.struts.taglib.logic.RedirectTag
     
    setName(String) - Method in class org.apache.struts.taglib.html.OptionsTag
     
    setName(String) - Method in class org.apache.struts.taglib.html.OptionsCollectionTag
     
    setName(String) - Method in class org.apache.struts.taglib.html.ErrorsTag
     
    setName(String) - Method in class org.apache.struts.taglib.html.LinkTag
     
    setName(String) - Method in class org.apache.struts.taglib.html.SelectTag
     
    setName(String) - Method in class org.apache.struts.taglib.html.TextareaTag
     
    setName(String) - Method in class org.apache.struts.taglib.html.MessagesTag
     
    setName(String) - Method in class org.apache.struts.taglib.html.BaseFieldTag
     
    setName(String) - Method in class org.apache.struts.taglib.html.MultiboxTag
     
    setName(String) - Method in class org.apache.struts.taglib.html.CheckboxTag
     
    setName(String) - Method in class org.apache.struts.taglib.html.ImgTag
     
    setName(String) - Method in class org.apache.struts.taglib.html.FormTag
    Set the attribute key name of our bean.
    setName(String) - Method in class org.apache.struts.taglib.html.RadioTag
     
    setName(String) - Method in class org.apache.struts.taglib.bean.DefineTag
     
    setName(String) - Method in class org.apache.struts.taglib.bean.MessageTag
     
    setName(String) - Method in class org.apache.struts.taglib.bean.WriteTag
     
    setName(String) - Method in class org.apache.struts.taglib.bean.IncludeTag
    Deprecated. use setPage(String) instead
    setName(String) - Method in class org.apache.struts.taglib.bean.SizeTag
     
    setName(String) - Method in class org.apache.struts.taglib.bean.ResourceTag
     
    setName(String) - Method in class org.apache.struts.taglib.bean.ParameterTag
     
    setName(String) - Method in class org.apache.struts.taglib.bean.HeaderTag
     
    setName(String) - Method in class org.apache.struts.taglib.bean.CookieTag
     
    setName(String) - Method in class org.apache.struts.config.FormBeanConfig
     
    setName(String) - Method in class org.apache.struts.config.ActionConfig
     
    setName(String) - Method in class org.apache.struts.config.ForwardConfig
     
    setName(String) - Method in class org.apache.struts.config.FormPropertyConfig
     
    setNestedProperties(HttpServletRequest, NestedPropertySupport) - Static method in class org.apache.struts.taglib.nested.NestedPropertyHelper
    Helper method that will set all the relevant nesting properties for the provided tag reference depending on the implementation.
    setNestedProperty(String) - Method in class org.apache.struts.taglib.nested.NestedReference
    Setter for the nested property
    setNocache(boolean) - Method in class org.apache.struts.config.ControllerConfig
     
    setNoresize(boolean) - Method in class org.apache.struts.taglib.html.FrameTag
     
    setNull(boolean) - Method in class org.apache.struts.config.MessageResourcesConfig
     
    setObjectValue(Object) - Method in class org.apache.struts.taglib.tiles.PutTag
    Set property value as an object.
    setOffset(String) - Method in class org.apache.struts.taglib.logic.IterateTag
     
    setOnblur(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Sets the onBlur event handler.
    setOnchange(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Sets the onChange event handler.
    setOnclick(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Sets the onClick event handler.
    setOndblclick(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Sets the onDblClick event handler.
    setOnfocus(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Sets the onFocus event handler.
    setOnkeydown(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Sets the onKeyDown event handler.
    setOnkeypress(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Sets the onKeyPress event handler.
    setOnkeyup(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Sets the onKeyUp event handler.
    setOnmousedown(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Sets the onMouseDown event handler.
    setOnmousemove(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Sets the onMouseMove event handler.
    setOnmouseout(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Sets the onMouseOut event handler.
    setOnmouseover(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Sets the onMouseOver event handler.
    setOnmouseup(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Sets the onMouseUp event handler.
    setOnreset(String) - Method in class org.apache.struts.taglib.html.FormTag
    Set the onReset event script.
    setOnselect(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Sets the onSelect event handler.
    setOnsubmit(String) - Method in class org.apache.struts.taglib.html.FormTag
    Set the onSubmit event script.
    setOrder(int) - Method in class org.apache.struts.action.ActionMessages.ActionMessageItem
     
    setPage(int) - Method in class org.apache.struts.validator.ValidatorForm
    Sets page.
    setPage(int) - Method in class org.apache.struts.validator.DynaValidatorForm
    Sets page.
    setPage(int) - Method in class org.apache.struts.taglib.html.JavascriptValidatorTag
    Sets the current page number of a multi-part form.
    setPage(String) - Method in class org.apache.struts.tiles.ComponentDefinition
    Sets the value of the path property.
    setPage(String) - Method in class org.apache.struts.taglib.tiles.DefinitionTagSupport
    Set the page.
    setPage(String) - Method in class org.apache.struts.taglib.logic.RedirectTag
     
    setPage(String) - Method in class org.apache.struts.taglib.html.LinkTag
     
    setPage(String) - Method in class org.apache.struts.taglib.html.ImageTag
     
    setPage(String) - Method in class org.apache.struts.taglib.html.ImgTag
     
    setPage(String) - Method in class org.apache.struts.taglib.bean.IncludeTag
     
    setPageContext(PageContext) - Method in class org.apache.struts.taglib.tiles.InsertTag
    Set the current page context.
    setPageKey(String) - Method in class org.apache.struts.taglib.html.ImageTag
     
    setPageKey(String) - Method in class org.apache.struts.taglib.html.ImgTag
     
    setPagePattern(String) - Method in class org.apache.struts.config.ControllerConfig
     
    setParameter(String) - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
     
    setParameter(String) - Method in class org.apache.struts.config.ActionConfig
    General purpose configuration parameter that can be used to pass extra information to the Action instance selected by this Action.
    setParameter(String) - Method in class org.apache.struts.config.MessageResourcesConfig
     
    setParameter(String, String) - Method in class org.apache.struts.upload.MultipartRequestWrapper
    Sets a parameter for this request.
    setParamId(String) - Method in class org.apache.struts.taglib.logic.RedirectTag
     
    setParamId(String) - Method in class org.apache.struts.taglib.html.LinkTag
     
    setParamId(String) - Method in class org.apache.struts.taglib.html.ImgTag
     
    setParamName(String) - Method in class org.apache.struts.taglib.logic.RedirectTag
     
    setParamName(String) - Method in class org.apache.struts.taglib.html.LinkTag
     
    setParamName(String) - Method in class org.apache.struts.taglib.html.ImgTag
     
    setParamProperty(String) - Method in class org.apache.struts.taglib.logic.RedirectTag
     
    setParamProperty(String) - Method in class org.apache.struts.taglib.html.LinkTag
     
    setParamProperty(String) - Method in class org.apache.struts.taglib.html.ImgTag
     
    setParamScope(String) - Method in class org.apache.struts.taglib.logic.RedirectTag
     
    setParamScope(String) - Method in class org.apache.struts.taglib.html.LinkTag
     
    setParamScope(String) - Method in class org.apache.struts.taglib.html.ImgTag
     
    setParserDebugLevel(int) - Method in class org.apache.struts.tiles.DefinitionsFactoryConfig
    Deprecated. Use commons-logging mechanism.
    setParserValidate(boolean) - Method in class org.apache.struts.tiles.DefinitionsFactoryConfig
    Set the validating mode for the parser.
    setPath(String) - Method in class org.apache.struts.tiles.ComponentDefinition
    Sets the value of the path property.
    setPath(String) - Method in class org.apache.struts.config.ExceptionConfig
     
    setPath(String) - Method in class org.apache.struts.config.ActionConfig
    Set context-relative path of the submitted request, starting with a slash ("/") character, and omitting any filename extension if extension mapping is being used.
    setPath(String) - Method in class org.apache.struts.config.ForwardConfig
     
    setPathnames(String) - Method in class org.apache.struts.validator.ValidatorPlugIn
    Sets a comma delimitted list of Validator resources.
    setPrefix(String) - Method in class org.apache.struts.taglib.tiles.ext.TextTag
    Deprecated.  
    setPrefix(String) - Method in interface org.apache.struts.config.ModuleConfig
    The prefix of the context-relative portion of the request URI, used to select this configuration versus others supported by the controller servlet.
    setPrefix(String) - Method in class org.apache.struts.config.ActionConfig
     
    setPrefix(String) - Method in class org.apache.struts.config.impl.ModuleConfigImpl
    The prefix of the context-relative portion of the request URI, used to select this configuration versus others supported by the controller servlet.
    setProcessorClass(String) - Method in class org.apache.struts.config.ControllerConfig
     
    setProperty(HttpServletRequest, String) - Static method in class org.apache.struts.taglib.nested.NestedPropertyHelper
    Sets the provided property into the request object for reference by the other nested tags.
    setProperty(String) - Method in class org.apache.struts.util.ModuleException
    Set the property associated with the exception.
    setProperty(String) - Method in class org.apache.struts.taglib.tiles.AttributeToScopeTag
    Deprecated. Set the property name.
    setProperty(String) - Method in class org.apache.struts.taglib.nested.NestedWriteNestingTag
    Setter method for the property property
    setProperty(String) - Method in class org.apache.struts.taglib.nested.NestedRootTag
    Setter method for the property property
    setProperty(String) - Method in class org.apache.struts.taglib.nested.NestedPropertyTag
    Setter method for the property property Also, only setting the original property value to those values not set by the nested logic.
    setProperty(String) - Method in interface org.apache.struts.taglib.nested.NestedPropertySupport
    The setter for the poroperty property
    setProperty(String) - Method in class org.apache.struts.taglib.nested.html.NestedFormTag
    Setter for the "property" property
    setProperty(String) - Method in class org.apache.struts.taglib.logic.IterateTag
     
    setProperty(String) - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
     
    setProperty(String) - Method in class org.apache.struts.taglib.logic.RedirectTag
     
    setProperty(String) - Method in class org.apache.struts.taglib.html.OptionsTag
     
    setProperty(String) - Method in class org.apache.struts.taglib.html.OptionsCollectionTag
     
    setProperty(String) - Method in class org.apache.struts.taglib.html.ErrorsTag
     
    setProperty(String) - Method in class org.apache.struts.taglib.html.LinkTag
     
    setProperty(String) - Method in class org.apache.struts.taglib.html.SelectTag
    Set the property name.
    setProperty(String) - Method in class org.apache.struts.taglib.html.MessagesTag
     
    setProperty(String) - Method in class org.apache.struts.taglib.html.CancelTag
    Set the property name.
    setProperty(String) - Method in class org.apache.struts.taglib.html.MultiboxTag
    Set the property name.
    setProperty(String) - Method in class org.apache.struts.taglib.html.BaseInputTag
    Set the property name.
    setProperty(String) - Method in class org.apache.struts.taglib.html.ImageTag
     
    setProperty(String) - Method in class org.apache.struts.taglib.html.CheckboxTag
    Set the property name.
    setProperty(String) - Method in class org.apache.struts.taglib.html.ImgTag
     
    setProperty(String) - Method in class org.apache.struts.taglib.html.SubmitTag
    Set the property name.
    setProperty(String) - Method in class org.apache.struts.taglib.html.ButtonTag
    Set the property name.
    setProperty(String) - Method in class org.apache.struts.taglib.html.ResetTag
    Set the field name.
    setProperty(String) - Method in class org.apache.struts.taglib.html.RadioTag
    Set the property name.
    setProperty(String) - Method in class org.apache.struts.taglib.bean.DefineTag
     
    setProperty(String) - Method in class org.apache.struts.taglib.bean.MessageTag
     
    setProperty(String) - Method in class org.apache.struts.taglib.bean.WriteTag
     
    setProperty(String) - Method in class org.apache.struts.taglib.bean.SizeTag
     
    setProperty(String) - Method in class org.apache.struts.taglib.bean.PageTag
     
    setReadonly(boolean) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Sets the readonly event handler.
    setRedirect(boolean) - Method in class org.apache.struts.config.ForwardConfig
     
    setRedisplay(boolean) - Method in class org.apache.struts.taglib.html.BaseFieldTag
     
    setRequest(HttpServletRequest) - Method in class org.apache.struts.config.ConfigHelper
    Set the request associated with this object.
    setResources(ServletContext, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.config.ConfigHelper
    Set the application and request for this object instance.
    setResponse(HttpServletResponse) - Method in class org.apache.struts.config.ConfigHelper
    Set the response associated with this isntance.
    setReturnNull(boolean) - Method in class org.apache.struts.util.MessageResourcesFactory
    Set the default value of the "returnNull" property newly created MessageResourcess are initialized to.
    setReturnNull(boolean) - Method in class org.apache.struts.util.MessageResources
    Indicates that a null is returned instead of an error message string if an unknown Locale or key is requested.
    setRole(String) - Method in class org.apache.struts.tiles.UntyppedAttribute
    Set role.
    setRole(String) - Method in class org.apache.struts.tiles.ComponentDefinition
    Sets the value of the role property.
    setRole(String) - Method in interface org.apache.struts.tiles.AttributeDefinition
    Set role attribute.
    setRole(String) - Method in class org.apache.struts.tiles.xmlDefinition.XmlAttribute
     
    setRole(String) - Method in class org.apache.struts.taglib.tiles.PutListTag
    Set role attribute.
    setRole(String) - Method in class org.apache.struts.taglib.tiles.GetAttributeTag
    Set role.
    setRole(String) - Method in class org.apache.struts.taglib.tiles.PutTag
    Set role attribute.
    setRole(String) - Method in class org.apache.struts.taglib.tiles.DefinitionTagSupport
    Set associated role.
    setRole(String) - Method in class org.apache.struts.taglib.template.PutTag
    Deprecated. Use Tiles instead.
    setRole(String) - Method in class org.apache.struts.taglib.template.GetTag
    Deprecated. Use Tiles instead.
    setRole(String) - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
     
    setRoles(String) - Method in class org.apache.struts.config.ActionConfig
     
    setRows(String) - Method in class org.apache.struts.taglib.html.BaseInputTag
    Set the number of rows for this field.
    setScope(String) - Method in class org.apache.struts.taglib.tiles.DefinitionTag
    Set the scope.
    setScope(String) - Method in class org.apache.struts.taglib.tiles.ImportAttributeTag
    Set the scope.
    setScope(String) - Method in class org.apache.struts.taglib.tiles.UseAttributeTag
    Set the scope.
    setScope(String) - Method in class org.apache.struts.taglib.tiles.AttributeToScopeTag
    Deprecated. Set the scope.
    setScope(String) - Method in class org.apache.struts.taglib.logic.IterateTag
     
    setScope(String) - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
     
    setScope(String) - Method in class org.apache.struts.taglib.logic.RedirectTag
     
    setScope(String) - Method in class org.apache.struts.taglib.html.LinkTag
     
    setScope(String) - Method in class org.apache.struts.taglib.html.ImgTag
     
    setScope(String) - Method in class org.apache.struts.taglib.html.FormTag
    Set the attribute scope of our bean.
    setScope(String) - Method in class org.apache.struts.taglib.bean.DefineTag
     
    setScope(String) - Method in class org.apache.struts.taglib.bean.MessageTag
     
    setScope(String) - Method in class org.apache.struts.taglib.bean.WriteTag
     
    setScope(String) - Method in class org.apache.struts.taglib.bean.SizeTag
     
    setScope(String) - Method in class org.apache.struts.config.ExceptionConfig
     
    setScope(String) - Method in class org.apache.struts.config.ActionConfig
     
    setScrolling(String) - Method in class org.apache.struts.taglib.html.FrameTag
     
    setServer(String) - Method in class org.apache.struts.taglib.html.BaseTag
    Sets the server.
    setServlet(ActionServlet) - Method in interface org.apache.struts.upload.MultipartRequestHandler
    Convienience method to set a reference to a working ActionServlet instance.
    setServlet(ActionServlet) - Method in class org.apache.struts.upload.CommonsMultipartRequestHandler
    Sets the servlet with which this handler is associated.
    setServlet(ActionServlet) - Method in class org.apache.struts.upload.DiskMultipartRequestHandler
     
    setServlet(ActionServlet) - Method in class org.apache.struts.action.ActionForm
    Set the controller servlet instance to which we are attached (if servlet is non-null), or release any allocated resources (if servlet is null).
    setServlet(ActionServlet) - Method in class org.apache.struts.action.Action
    Set the controller servlet instance to which we are attached (if servlet is non-null), or release any allocated resources (if servlet is null).
    setServlet(ActionServlet) - Method in class org.apache.struts.action.ActionMappings
    Deprecated. Set the ActionServlet instance of our owning application.
    setServletFor(MultipartRequestHandler) - Method in class org.apache.struts.action.ActionServletWrapper
    Set servlet to a MultipartRequestHandler.
    setSession(HttpSession) - Method in class org.apache.struts.config.ConfigHelper
    Set the session associated with this instance.
    setSize(int) - Method in class org.apache.struts.config.FormPropertyConfig
     
    setSize(String) - Method in class org.apache.struts.taglib.html.SelectTag
     
    setSize(String) - Method in class org.apache.struts.taglib.html.BaseInputTag
    Set the size of this field (synonym for setCols()).
    setSrc(String) - Method in class org.apache.struts.taglib.html.JavascriptValidatorTag
    Sets the src attribute's value when defining the html script element.
    setSrc(String) - Method in class org.apache.struts.taglib.html.ImageTag
     
    setSrc(String) - Method in class org.apache.struts.taglib.html.ImgTag
     
    setSrcKey(String) - Method in class org.apache.struts.taglib.html.ImageTag
     
    setSrcKey(String) - Method in class org.apache.struts.taglib.html.ImgTag
     
    setStaticJavascript(String) - Method in class org.apache.struts.taglib.html.JavascriptValidatorTag
    Sets whether or not to generate the static JavaScript.
    setStyle(String) - Method in class org.apache.struts.taglib.html.OptionsTag
     
    setStyle(String) - Method in class org.apache.struts.taglib.html.OptionsCollectionTag
     
    setStyle(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Sets the style attribute.
    setStyle(String) - Method in class org.apache.struts.taglib.html.FormTag
    Set the style attribute for this tag.
    setStyle(String) - Method in class org.apache.struts.taglib.html.OptionTag
     
    setStyleClass(String) - Method in class org.apache.struts.taglib.html.OptionsTag
     
    setStyleClass(String) - Method in class org.apache.struts.taglib.html.OptionsCollectionTag
     
    setStyleClass(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Sets the style class attribute.
    setStyleClass(String) - Method in class org.apache.struts.taglib.html.FormTag
    Set the style class for this tag.
    setStyleClass(String) - Method in class org.apache.struts.taglib.html.OptionTag
     
    setStyleId(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Sets the style id attribute.
    setStyleId(String) - Method in class org.apache.struts.taglib.html.FormTag
    Set the style identifier for this tag.
    setStyleId(String) - Method in class org.apache.struts.taglib.html.OptionTag
    Set the style identifier for this tag.
    setSuffix(String) - Method in class org.apache.struts.config.ActionConfig
     
    setTabindex(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Sets the tabIndex value.
    setTarget(String) - Method in class org.apache.struts.taglib.html.LinkTag
     
    setTarget(String) - Method in class org.apache.struts.taglib.html.BaseTag
     
    setTarget(String) - Method in class org.apache.struts.taglib.html.FormTag
    Set the window target.
    setTempDir(String) - Method in class org.apache.struts.config.ControllerConfig
     
    setTemplate(String) - Method in class org.apache.struts.tiles.ComponentDefinition
    Sets the value of the template property.
    setTemplate(String) - Method in class org.apache.struts.taglib.tiles.DefinitionTagSupport
    Set the template.
    setTemplate(String) - Method in class org.apache.struts.taglib.template.InsertTag
    Deprecated. Use Tiles instead.
    setTilesUtil(TilesUtilImpl) - Static method in class org.apache.struts.tiles.TilesUtil
    Set the real implementation.
    setTilesUtilImplClassname(String) - Method in class org.apache.struts.tiles.TilesPlugin
    Set Tiles util implemention classname.
    setTitle(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Sets the advisory title attribute.
    setTitleKey(String) - Method in class org.apache.struts.taglib.html.BaseHandlerTag
    Sets the message resources key of the advisory title.
    setTooltip(String) - Method in class org.apache.struts.tiles.beans.SimpleMenuItem
    Set tooltip property.
    setTooltip(String) - Method in interface org.apache.struts.tiles.beans.MenuItem
    Set tooltip property.
    setToScope(String) - Method in class org.apache.struts.taglib.bean.DefineTag
     
    setTransaction(boolean) - Method in class org.apache.struts.taglib.logic.RedirectTag
     
    setTransaction(boolean) - Method in class org.apache.struts.taglib.html.LinkTag
     
    setTransaction(boolean) - Method in class org.apache.struts.taglib.bean.IncludeTag
     
    setType(String) - Method in class org.apache.struts.tiles.xmlDefinition.XmlAttribute
    Sets the value of the value property.
    setType(String) - Method in class org.apache.struts.taglib.tiles.PutTag
    Set type.
    setType(String) - Method in class org.apache.struts.taglib.logic.IterateTag
     
    setType(String) - Method in class org.apache.struts.taglib.html.FormTag
    Set the Java class of our bean.
    setType(String) - Method in class org.apache.struts.taglib.bean.DefineTag
     
    setType(String) - Method in class org.apache.struts.config.FormBeanConfig
     
    setType(String) - Method in class org.apache.struts.config.ExceptionConfig
     
    setType(String) - Method in class org.apache.struts.config.ActionConfig
     
    setType(String) - Method in class org.apache.struts.config.FormPropertyConfig
     
    setType(String) - Method in class org.apache.struts.config.DataSourceConfig
     
    setUnknown(boolean) - Method in class org.apache.struts.config.ActionConfig
     
    setUsemap(String) - Method in class org.apache.struts.taglib.html.ImgTag
     
    setUser(String) - Method in class org.apache.struts.taglib.logic.ConditionalTagBase
     
    setUserDebugLevel(int) - Static method in class org.apache.struts.tiles.DefinitionsUtil
    Deprecated. Use commons-logging package instead.
    setValidate(boolean) - Method in class org.apache.struts.config.ActionConfig
     
    setValidating(boolean) - Method in class org.apache.struts.tiles.xmlDefinition.XmlParser
    Set digester validating flag.
    setValidatorResults(ValidatorResults) - Method in class org.apache.struts.validator.ValidatorForm
    Set results of the validation performed by the Validator.
    setValidatorResults(ValidatorResults) - Method in class org.apache.struts.validator.DynaValidatorForm
    Set results of the validation performed by the Validator.
    setValue(Object) - Method in class org.apache.struts.tiles.UntyppedAttribute
    Set value.
    setValue(Object) - Method in class org.apache.struts.tiles.xmlDefinition.XmlAttribute
    Sets the value of the value property.
    setValue(Object) - Method in class org.apache.struts.taglib.tiles.PutTag
    Set value.
    setValue(String) - Method in class org.apache.struts.util.LabelValueBean
     
    setValue(String) - Method in class org.apache.struts.upload.MultipartElement
     
    setValue(String) - Method in class org.apache.struts.tiles.beans.SimpleMenuItem
    Set value property.
    setValue(String) - Method in interface org.apache.struts.tiles.beans.MenuItem
    Set value property.
    setValue(String) - Method in class org.apache.struts.taglib.tiles.PutTag
    Set value.
    setValue(String) - Method in class org.apache.struts.taglib.logic.MatchTag
     
    setValue(String) - Method in class org.apache.struts.taglib.logic.CompareTagBase
     
    setValue(String) - Method in class org.apache.struts.taglib.html.OptionsCollectionTag
     
    setValue(String) - Method in class org.apache.struts.taglib.html.SelectTag
    Set the comparison value.
    setValue(String) - Method in class org.apache.struts.taglib.html.CancelTag
    Set the label value.
    setValue(String) - Method in class org.apache.struts.taglib.html.MultiboxTag
    Set the server value.
    setValue(String) - Method in class org.apache.struts.taglib.html.BaseInputTag
    Set the field value (if any).
    setValue(String) - Method in class org.apache.struts.taglib.html.CheckboxTag
    Set the server value.
    setValue(String) - Method in class org.apache.struts.taglib.html.SubmitTag
    Set the label value.
    setValue(String) - Method in class org.apache.struts.taglib.html.ButtonTag
    Set the label value.
    setValue(String) - Method in class org.apache.struts.taglib.html.ResetTag
    Set the label value.
    setValue(String) - Method in class org.apache.struts.taglib.html.OptionTag
     
    setValue(String) - Method in class org.apache.struts.taglib.html.RadioTag
    Set the server value.
    setValue(String) - Method in class org.apache.struts.taglib.bean.DefineTag
     
    setValue(String) - Method in class org.apache.struts.taglib.bean.ParameterTag
     
    setValue(String) - Method in class org.apache.struts.taglib.bean.HeaderTag
     
    setValue(String) - Method in class org.apache.struts.taglib.bean.CookieTag
     
    setVspace(String) - Method in class org.apache.struts.taglib.html.ImgTag
     
    setWidth(String) - Method in class org.apache.struts.taglib.html.ImgTag
     
    setWrite(boolean) - Method in class org.apache.struts.taglib.html.HiddenTag
     
    setX(String) - Method in class org.apache.struts.util.ImageButtonBean
     
    setXhtml(boolean) - Method in class org.apache.struts.taglib.html.HtmlTag
     
    setY(String) - Method in class org.apache.struts.util.ImageButtonBean
     
    SimpleMenuItem - class org.apache.struts.tiles.beans.SimpleMenuItem.
    A MenuItem implementation.
    SimpleMenuItem() - Constructor for class org.apache.struts.tiles.beans.SimpleMenuItem
    Constructor.
    size - Variable in class org.apache.struts.taglib.html.SelectTag
    How many available options should be displayed when this element is rendered?
    size - Variable in class org.apache.struts.config.FormPropertyConfig
    The size of the array to be created if this property is an array type and there is no specified initial value.
    size() - Method in class org.apache.struts.action.ActionMessages
    Return the number of messages recorded for all properties (including global messages).
    size(String) - Method in class org.apache.struts.action.ActionMessages
    Return the number of messages associated with the specified property.
    SizeTag - class org.apache.struts.taglib.bean.SizeTag.
    Define a scripting variable that will contain the number of elements found in a specified array, Collection, or Map.
    SizeTag() - Constructor for class org.apache.struts.taglib.bean.SizeTag
     
    SizeTei - class org.apache.struts.taglib.bean.SizeTei.
    Implementation of TagExtraInfo for the size tag, identifying the scripting object(s) to be made visible.
    SizeTei() - Constructor for class org.apache.struts.taglib.bean.SizeTei
     
    skipCurrentLineIfBlank() - Method in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    SQL_DATE_FORMAT_KEY - Static variable in class org.apache.struts.taglib.bean.WriteTag
    The key to search default format string for java.sql.Date in resources.
    SQL_TIME_FORMAT_KEY - Static variable in class org.apache.struts.taglib.bean.WriteTag
    The key to search default format string for java.sql.Time in resources.
    SQL_TIMESTAMP_FORMAT_KEY - Static variable in class org.apache.struts.taglib.bean.WriteTag
    The key to search default format string for java.sql.Timestamp in resources.
    src - Variable in class org.apache.struts.taglib.html.JavascriptValidatorTag
    The src attribute for html script element (used to include an external script resource).
    src - Variable in class org.apache.struts.taglib.html.ImageTag
    The URL of this image.
    src - Variable in class org.apache.struts.taglib.html.ImgTag
    The image source URI.
    src() - Method in class org.apache.struts.taglib.html.ImageTag
    Return the base source URL that will be rendered in the src property for this generated element, or null if there is no such URL.
    src() - Method in class org.apache.struts.taglib.html.ImgTag
    Return the base source URL that will be rendered in the src property for this generated element, or null if there is no such URL.
    srcKey - Variable in class org.apache.struts.taglib.html.ImageTag
    The message resources key for the URL of this image.
    srcKey - Variable in class org.apache.struts.taglib.html.ImgTag
    The message resources key under which we should look up the src attribute for this generated tag, if any.
    started - Variable in class org.apache.struts.taglib.logic.IterateTag
    Has this tag instance been started?
    staticJavascript - Variable in class org.apache.struts.taglib.html.JavascriptValidatorTag
    The static JavaScript methods will only be printed if this is set to "true".
    storeException(HttpServletRequest, String, ActionError, ActionForward, String) - Method in class org.apache.struts.action.ExceptionHandler
    Default implementation for handling an ActionError generated from an Exception during Action delegation.
    STRING_COMPARE - Static variable in class org.apache.struts.taglib.logic.CompareTagBase
    We will do a String comparison.
    StrutsTag - class org.apache.struts.taglib.bean.StrutsTag.
    Define a scripting variable that exposes the requested Struts internal configuraton object.
    StrutsTag() - Constructor for class org.apache.struts.taglib.bean.StrutsTag
     
    StrutsTei - class org.apache.struts.taglib.bean.StrutsTei.
    Implementation of TagExtraInfo for the struts tag, identifying the scripting object(s) to be made visible.
    StrutsTei() - Constructor for class org.apache.struts.taglib.bean.StrutsTei
     
    StrutsValidator - class org.apache.struts.util.StrutsValidator.
    Deprecated. As of Struts 1.1, replaced by FieldChecks
    StrutsValidator() - Constructor for class org.apache.struts.util.StrutsValidator
    Deprecated.  
    StrutsValidatorUtil - class org.apache.struts.util.StrutsValidatorUtil.
    Deprecated. As of Struts 1.1, replaced by Resources
    StrutsValidatorUtil() - Constructor for class org.apache.struts.util.StrutsValidatorUtil
    Deprecated.  
    style - Variable in class org.apache.struts.taglib.html.OptionsTag
    The style associated with this tag.
    style - Variable in class org.apache.struts.taglib.html.OptionsCollectionTag
    The style associated with this tag.
    style - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
    Style attribute associated with component.
    style - Variable in class org.apache.struts.taglib.html.FormTag
    The style attribute associated with this tag.
    style - Variable in class org.apache.struts.taglib.html.OptionTag
    The style associated with this tag.
    styleClass - Variable in class org.apache.struts.taglib.html.OptionsTag
    The named style class associated with this tag.
    styleClass - Variable in class org.apache.struts.taglib.html.OptionsCollectionTag
    The named style class associated with this tag.
    styleClass - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
    Named Style class associated with component.
    styleClass - Variable in class org.apache.struts.taglib.html.FormTag
    The style class associated with this tag.
    styleClass - Variable in class org.apache.struts.taglib.html.OptionTag
    The named style class associated with this tag.
    styleId - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
    Identifier associated with component.
    styleId - Variable in class org.apache.struts.taglib.html.FormTag
    The identifier associated with this tag.
    styleId - Variable in class org.apache.struts.taglib.html.OptionTag
    The identifier associated with this tag.
    subCompContext - Variable in class org.apache.struts.taglib.tiles.InsertTag.InsertHandler
     
    SubmitTag - class org.apache.struts.taglib.html.SubmitTag.
    Tag for input fields of type "submit".
    SubmitTag() - Constructor for class org.apache.struts.taglib.html.SubmitTag
     
    suffix - Variable in class org.apache.struts.config.ActionConfig
    Suffix used to match request parameter names to form bean property names, if any.
    SwitchAction - class org.apache.struts.actions.SwitchAction.
    A standard Action that switches to a new module and then forwards control to a URI (specified in a number of possible ways) within the new module.
    SwitchAction() - Constructor for class org.apache.struts.actions.SwitchAction
     

    T

    tabindex - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
    Tab index value.
    tagHandler - Variable in class org.apache.struts.taglib.tiles.InsertTag
    Finale handler of tag methods
    TagUtils - class org.apache.struts.taglib.tiles.util.TagUtils.
    Collection of utilities.
    TagUtils() - Constructor for class org.apache.struts.taglib.tiles.util.TagUtils
     
    target - Variable in class org.apache.struts.taglib.html.LinkTag
    The window target.
    target - Variable in class org.apache.struts.taglib.html.BaseTag
    The target window for this base reference.
    target - Variable in class org.apache.struts.taglib.html.FormTag
    The window target.
    tempDir - Variable in class org.apache.struts.upload.MultipartIterator
    The temporary directory to store files
    tempDir - Variable in class org.apache.struts.upload.DiskMultipartRequestHandler
    The temporary directory.
    tempDir - Variable in class org.apache.struts.config.ControllerConfig
    The temporary working directory to use for file uploads.
    template - Variable in class org.apache.struts.taglib.template.InsertTag
    Deprecated. The application-relative URI of the template.
    testReset() - Static method in class org.apache.struts.tiles.TilesUtil
    Reset internal state.
    text - Variable in class org.apache.struts.taglib.html.LinkTag
    The body content of this tag (if any).
    text - Variable in class org.apache.struts.taglib.html.CancelTag
    The body content of this tag (if any).
    text - Variable in class org.apache.struts.taglib.html.CheckboxTag
    The body content of this tag (if any).
    text - Variable in class org.apache.struts.taglib.html.SubmitTag
    The body content of this tag (if any).
    text - Variable in class org.apache.struts.taglib.html.ButtonTag
    The body content of this tag (if any).
    text - Variable in class org.apache.struts.taglib.html.ResetTag
    The body content of this tag (if any).
    text - Variable in class org.apache.struts.taglib.html.OptionTag
    The message text to be displayed to the user for this tag (if any)
    text - Variable in class org.apache.struts.taglib.html.RadioTag
    The body content of this tag (if any).
    TEXT_BUFFER_SIZE - Static variable in class org.apache.struts.upload.MultipartIterator
    The size in bytes to copy of text data at a time.
    text() - Method in class org.apache.struts.taglib.html.OptionTag
    Return the text to be displayed to the user for this option (if any).
    TextareaTag - class org.apache.struts.taglib.html.TextareaTag.
    Custom tag for input fields of type "textarea".
    TextareaTag() - Constructor for class org.apache.struts.taglib.html.TextareaTag
     
    textElements - Variable in class org.apache.struts.upload.DiskMultipartRequestHandler
    A Hashtable representing the form text input names and values.
    TextTag - class org.apache.struts.taglib.tiles.ext.TextTag.
    Deprecated. Use o.a.s.taglib.html.TextTag instead.
    TextTag - class org.apache.struts.taglib.html.TextTag.
    Custom tag for input fields of type "text".
    TextTag() - Constructor for class org.apache.struts.taglib.tiles.ext.TextTag
    Deprecated. Construct a new instance of this tag.
    TextTag() - Constructor for class org.apache.struts.taglib.html.TextTag
    Construct a new instance of this tag.
    TILES_DETAILS_PARAMETER_NAME - Static variable in class org.apache.struts.tiles.DefinitionsFactoryConfig
    Alternate name for definition debug details properties in configuration file
    TilesAction - class org.apache.struts.tiles.actions.TilesAction.
    Base class for Tiles Actions.
    TilesAction() - Constructor for class org.apache.struts.tiles.actions.TilesAction
     
    TilesException - exception org.apache.struts.tiles.TilesException.
    Root class for all Tiles-exceptions.
    TilesException() - Constructor for class org.apache.struts.tiles.TilesException
    Constructor.
    TilesException(Exception) - Constructor for class org.apache.struts.tiles.TilesException
    Create a new TilesException wrapping an existing exception.
    TilesException(String) - Constructor for class org.apache.struts.tiles.TilesException
    Constructor.
    TilesException(String, Exception) - Constructor for class org.apache.struts.tiles.TilesException
    Create a new TilesException from an existing exception.
    TilesPlugin - class org.apache.struts.tiles.TilesPlugin.
    Tiles Plugin used to initialize Tiles.
    TilesPlugin() - Constructor for class org.apache.struts.tiles.TilesPlugin
     
    TilesRequestProcessor - class org.apache.struts.tiles.TilesRequestProcessor.
    RequestProcessor contains the processing logic that the Struts controller servlet performs as it receives each servlet request from the container.
    TilesRequestProcessor() - Constructor for class org.apache.struts.tiles.TilesRequestProcessor
     
    TilesServlet - class org.apache.struts.tiles.TilesServlet.
    Deprecated. Use the ActionServlet instead.
    TilesServlet() - Constructor for class org.apache.struts.tiles.TilesServlet
    Deprecated.  
    TilesUtil - class org.apache.struts.tiles.TilesUtil.
    Class containing utility methods for Tiles.
    TilesUtil() - Constructor for class org.apache.struts.tiles.TilesUtil
     
    tilesUtilImpl - Static variable in class org.apache.struts.tiles.TilesUtil
    The implementation of tilesUtilImpl
    TilesUtilImpl - class org.apache.struts.tiles.TilesUtilImpl.
    Default implementation of TilesUtil.
    TilesUtilImpl() - Constructor for class org.apache.struts.tiles.TilesUtilImpl
     
    tilesUtilImplClassname - Variable in class org.apache.struts.tiles.TilesPlugin
    Tiles util implementation classname.
    TilesUtilStrutsImpl - class org.apache.struts.tiles.TilesUtilStrutsImpl.
    TilesUtil implementation for Struts 1.1 with one single factory.
    TilesUtilStrutsImpl() - Constructor for class org.apache.struts.tiles.TilesUtilStrutsImpl
     
    TilesUtilStrutsModulesImpl - class org.apache.struts.tiles.TilesUtilStrutsModulesImpl.
    Implementation of TilesUtil for Struts multi modules.
    TilesUtilStrutsModulesImpl() - Constructor for class org.apache.struts.tiles.TilesUtilStrutsModulesImpl
     
    title - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
    The advisory title of this element.
    titleKey - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
    The message resources key of the advisory title.
    toHex(byte[]) - Method in class org.apache.struts.util.TokenProcessor
    Convert a byte array to a String of hexadecimal digits and return it.
    toHex(byte[]) - Method in class org.apache.struts.action.Action
    Deprecated. This method will be removed in a release after Struts 1.1.
    token - Static variable in class org.apache.struts.action.Action
    An instance of TokenProcessor to use for token functionality.
    TOKEN_COLON - Static variable in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    TOKEN_EQUALS - Static variable in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    TOKEN_KEY - Static variable in class org.apache.struts.taglib.html.Constants
    The property under which a transaction token is reported.
    TOKEN_QUOTE - Static variable in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    TOKEN_SEMI_COLON - Static variable in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    TOKEN_SPACE - Static variable in class org.apache.struts.upload.MultipartBoundaryInputStream
     
    TokenProcessor - class org.apache.struts.util.TokenProcessor.
    TokenProcessor is responsible for handling all token related functionality.
    TokenProcessor() - Constructor for class org.apache.struts.util.TokenProcessor
    Protected constructor for TokenProcessor.
    tooltip - Variable in class org.apache.struts.tiles.beans.SimpleMenuItem
     
    toScope - Variable in class org.apache.struts.taglib.bean.DefineTag
    The scope within which the newly defined bean will be creatd.
    toString() - Method in class org.apache.struts.util.LabelValueBean
    Return a string representation of this object.
    toString() - Method in class org.apache.struts.util.ImageButtonBean
    Return a string representation of this object.
    toString() - Method in class org.apache.struts.upload.CommonsMultipartRequestHandler.CommonsFormFile
    Returns the (client-side) file name for this file.
    toString() - Method in class org.apache.struts.tiles.UntyppedAttribute
    Get String representation of this object.
    toString() - Method in class org.apache.struts.tiles.ComponentDefinition
     
    toString() - Method in class org.apache.struts.tiles.xmlDefinition.I18nFactorySet
    Return String representation.
    toString() - Method in class org.apache.struts.tiles.xmlDefinition.XmlDefinitionsSet
    Get String representation.
    toString() - Method in class org.apache.struts.tiles.xmlDefinition.FactorySet
    Return String representation.
    toString() - Method in class org.apache.struts.tiles.xmlDefinition.DefinitionsFactory
    Return String representation.
    toString() - Method in class org.apache.struts.tiles.definition.ComponentDefinitionsFactoryWrapper
    Return String representation.
    toString() - Method in class org.apache.struts.tiles.definition.ReloadableDefinitionsFactory
    Return String representation.
    toString() - Method in class org.apache.struts.tiles.beans.SimpleMenuItem
    Return String representation.
    toString() - Method in class org.apache.struts.taglib.template.util.Content
    Deprecated. Use Tiles instead.
    toString() - Method in class org.apache.struts.config.FormBeanConfig
    Return a String representation of this object.
    toString() - Method in class org.apache.struts.config.ExceptionConfig
    Return a String representation of this object.
    toString() - Method in class org.apache.struts.config.ActionConfig
    Return a String representation of this object.
    toString() - Method in class org.apache.struts.config.MessageResourcesConfig
    Return a String representation of this object.
    toString() - Method in class org.apache.struts.config.ControllerConfig
    Return a String representation of this object.
    toString() - Method in class org.apache.struts.config.ForwardConfig
    Return a String representation of this object.
    toString() - Method in class org.apache.struts.config.FormPropertyConfig
    Return a String representation of this object.
    toString() - Method in class org.apache.struts.config.DataSourceConfig
    Return a String representation of this object.
    toString() - Method in class org.apache.struts.action.DynaActionForm
    Render a String representation of this object.
    toString() - Method in class org.apache.struts.action.DynaActionFormClass
    Render a String representation of this object.
    totalLength - Variable in class org.apache.struts.upload.BufferedMultipartInputStream
    The total number of bytes read so far
    transaction - Variable in class org.apache.struts.taglib.logic.RedirectTag
    Include our transaction control token?
    transaction - Variable in class org.apache.struts.taglib.html.LinkTag
    Include transaction token (if any) in the hyperlink?
    transaction - Variable in class org.apache.struts.taglib.bean.IncludeTag
    Include transaction token (if any) in the hyperlink?
    TRANSACTION_TOKEN_KEY - Static variable in class org.apache.struts.Globals
    The session attributes key under which our transaction token is stored, if it is used.
    TRANSACTION_TOKEN_KEY - Static variable in class org.apache.struts.action.Action
    Deprecated. Use Globals.TRANSACTION_TOKEN_KEY instead.
    triedJstlInit - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
     
    triedJstlSuccess - Variable in class org.apache.struts.taglib.html.BaseHandlerTag
     
    type - Variable in class org.apache.struts.taglib.logic.IterateTag
    The Java class of each exposed element of the collection.
    type - Variable in class org.apache.struts.taglib.html.BaseFieldTag
    The type of input field represented by this tag (text, password, or hidden).
    type - Variable in class org.apache.struts.taglib.html.FormTag
    The Java class name of the bean to be created, if necessary.
    type - Variable in class org.apache.struts.taglib.bean.DefineTag
    The fully qualified Java class name of the value to be exposed.
    type - Variable in class org.apache.struts.config.FormBeanConfig
    The fully qualified Java class name of the implementation class to be used or generated.
    type - Variable in class org.apache.struts.config.ExceptionConfig
    The fully qualified Java class name of the exception that is to be handled by this handler.
    type - Variable in class org.apache.struts.config.ActionConfig
    Fully qualified Java class name of the Action class to be used to process requests for this mapping if the forward and include properties are not set.
    type - Variable in class org.apache.struts.config.FormPropertyConfig
    The fully qualified Java class name of the implementation class of this bean property, optionally followed by [] to indicate that the property is indexed.
    type - Variable in class org.apache.struts.config.DataSourceConfig
    The fully qualified class name of the javax.sql.DataSource implementation class.
    types - Variable in class org.apache.struts.actions.DispatchAction
    The set of argument type classes for the reflected method call.

    U

    unknown - Variable in class org.apache.struts.config.ActionConfig
    Indicates Action be configured as the default one for this application, when true.
    unknown - Variable in class org.apache.struts.action.ActionMappings
    Deprecated. The ActionMapping that should handle unknown request paths, if any.
    unspecified(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) - Method in class org.apache.struts.actions.DispatchAction
    Method which is dispatched to when there is no value for specified request parameter included in the request.
    UntyppedAttribute - class org.apache.struts.tiles.UntyppedAttribute.
    Common implementation of attribute definition.
    UntyppedAttribute(Object) - Constructor for class org.apache.struts.tiles.UntyppedAttribute
    Constructor.
    UntyppedAttribute(Object, String) - Constructor for class org.apache.struts.tiles.UntyppedAttribute
    Constructor.
    url - Variable in class org.apache.struts.tiles.UrlController
    Url associated with this controller.
    URL - Static variable in class org.apache.struts.tiles.ComponentDefinition
    Controller name type
    url(String) - Method in class org.apache.struts.taglib.html.ImgTag
    Return the specified src URL, modified as necessary with optional request parameters.
    UrlController - class org.apache.struts.tiles.UrlController.
    Tiles controller including a local URL.
    UrlController(String) - Constructor for class org.apache.struts.tiles.UrlController
    Constructor.
    UseAttributeTag - class org.apache.struts.taglib.tiles.UseAttributeTag.
    Custom tag exposing a component attribute to page.
    UseAttributeTag() - Constructor for class org.apache.struts.taglib.tiles.UseAttributeTag
     
    UseAttributeTei - class org.apache.struts.taglib.tiles.UseAttributeTei.
    Implementation of TagExtraInfo for the UseAttribute tag, identifying the scripting object(s) to be made visible.
    UseAttributeTei() - Constructor for class org.apache.struts.taglib.tiles.UseAttributeTei
     
    usemap - Variable in class org.apache.struts.taglib.html.ImgTag
    Client-side image map declaration.
    user - Variable in class org.apache.struts.taglib.logic.ConditionalTagBase
    The user principal name to be checked for.
    userDebugLevel - Static variable in class org.apache.struts.tiles.DefinitionsUtil
    Deprecated. Global user defined debug level
    userHasRole(HttpServletRequest, String) - Static method in class org.apache.struts.taglib.tiles.InsertTag
    Parse the list of roles and return true or false based on whether the user has that role or not.

    V

    validate - Variable in class org.apache.struts.config.ActionConfig
    Should the validate() method of the form bean associated with this action be called?
    validate(ActionMapping, HttpServletRequest) - Method in class org.apache.struts.validator.ValidatorForm
    Validate the properties that have been set from this HTTP request, and return an ActionErrors object that encapsulates any validation errors that have been found.
    validate(ActionMapping, HttpServletRequest) - Method in class org.apache.struts.validator.DynaValidatorForm
    Validate the properties that have been set from this HTTP request, and return an ActionErrors object that encapsulates any validation errors that have been found.
    validate(ActionMapping, HttpServletRequest) - Method in class org.apache.struts.validator.DynaValidatorActionForm
    Validate the properties that have been set from this HTTP request, and return an ActionErrors object that encapsulates any validation errors that have been found.
    validate(ActionMapping, HttpServletRequest) - Method in class org.apache.struts.validator.ValidatorActionForm
    Validate the properties that have been set from this HTTP request, and return an ActionErrors object that encapsulates any validation errors that have been found.
    validate(ActionMapping, HttpServletRequest) - Method in class org.apache.struts.action.ActionForm
    Validate the properties that have been set for this HTTP request, and return an ActionErrors object that encapsulates any validation errors that have been found.
    validate(ActionMapping, ServletRequest) - Method in class org.apache.struts.action.ActionForm
    Validate the properties that have been set for this non-HTTP request, and return an ActionErrors object that encapsulates any validation errors that have been found.
    validateByte(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest) - Static method in class org.apache.struts.validator.FieldChecks
    Checks if the field can safely be converted to a byte primitive.
    validateByte(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest) - Static method in class org.apache.struts.util.StrutsValidator
    Deprecated. As of Struts 1.1, replaced by FieldChecks.validateByte(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)
    validateCreditCard(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest) - Static method in class org.apache.struts.validator.FieldChecks
    Checks if the field is a valid credit card number.
    validateCreditCard(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest) - Static method in class org.apache.struts.util.StrutsValidator
    Deprecated. As of Struts 1.1, replaced by FieldChecks.validateCreditCard(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest) Translated to Java by Ted Husted (husted@apache.org ).
        Reference Sean M. Burke's script at http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl

    validateDate(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest) - Static method in class org.apache.struts.validator.FieldChecks
    Checks if the field is a valid date.
    validateDate(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest) - Static method in class org.apache.struts.util.StrutsValidator
    Deprecated. As of Struts 1.1, replaced by FieldChecks.validateDate(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)
    validateDouble(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest) - Static method in class org.apache.struts.validator.FieldChecks
    Checks if the field can safely be converted to a double primitive.
    validateDouble(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest) - Static method in class org.apache.struts.util.StrutsValidator
    Deprecated. As of Struts 1.1, replaced by FieldChecks.validateDouble(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)
    validateDoubleRange(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest) - Static method in class org.apache.struts.validator.FieldChecks
    Checks if a fields value is within a range (min & max specified in the vars attribute).
    validateEmail(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest) - Static method in class org.apache.struts.validator.FieldChecks
    Checks if a field has a valid e-mail address.
    validateEmail(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest) - Static method in class org.apache.struts.util.StrutsValidator
    Deprecated. As of Struts 1.1, replaced by FieldChecks.validateEmail(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest) Based on a script by Sandeep V. Tamhankar (stamhankar@hotmail.com), http://javascript.internet.com

    validateFloat(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest) - Static method in class org.apache.struts.validator.FieldChecks
    Checks if the field can safely be converted to a float primitive.
    validateFloat(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest) - Static method in class org.apache.struts.util.StrutsValidator
    Deprecated. As of Struts 1.1, replaced by FieldChecks.validateFloat(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)
    validateFloatRange(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest) - Static method in class org.apache.struts.validator.FieldChecks
    Checks if a fields value is within a range (min & max specified in the vars attribute).
    validateInteger(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest) - Static method in class org.apache.struts.validator.FieldChecks
    Checks if the field can safely be converted to an int primitive.
    validateInteger(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest) - Static method in class org.apache.struts.util.StrutsValidator
    Deprecated. As of Struts 1.1, replaced by FieldChecks.validateInteger(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)
    validateIntRange(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest) - Static method in class org.apache.struts.validator.FieldChecks
    Checks if a fields value is within a range (min & max specified in the vars attribute).
    validateLong(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest) - Static method in class org.apache.struts.validator.FieldChecks
    Checks if the field can safely be converted to a long primitive.
    validateLong(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest) - Static method in class org.apache.struts.util.StrutsValidator
    Deprecated. As of Struts 1.1, replaced by FieldChecks.validateLong(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)
    validateMask(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest) - Static method in class org.apache.struts.validator.FieldChecks
    Checks if the field matches the regular expression in the field's mask attribute.
    validateMask(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest) - Static method in class org.apache.struts.util.StrutsValidator
    Deprecated. As of Struts 1.1, replaced by FieldChecks.validateMask(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)
    validateMaxLength(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest) - Static method in class org.apache.struts.validator.FieldChecks
    Checks if the field's length is less than or equal to the maximum value.
    validateMaxLength(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest) - Static method in class org.apache.struts.util.StrutsValidator
    Deprecated. As of Struts 1.1, replaced by FieldChecks.validateMaxLength(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)
    validateMinLength(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest) - Static method in class org.apache.struts.validator.FieldChecks
    Checks if the field's length is greater than or equal to the minimum value.
    validateMinLength(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest) - Static method in class org.apache.struts.util.StrutsValidator
    Deprecated. As of Struts 1.1, replaced by FieldChecks.validateMinLength(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)
    validateRange(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest) - Static method in class org.apache.struts.validator.FieldChecks
    Deprecated. As of Struts 1.1, replaced by FieldChecks.validateIntRange(java.lang.Object,org.apache.commons.validator.ValidatorAction,org.apache.commons.validator.Field,org.apache.struts.action.ActionErrors,javax.servlet.http.HttpServletRequest)
    validateRange(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest) - Static method in class org.apache.struts.util.StrutsValidator
    Deprecated. As of Struts 1.1, replaced by FieldChecks.validateIntRange(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)
    validateRequired(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest) - Static method in class org.apache.struts.validator.FieldChecks
    Checks if the field isn't null and length of the field is greater than zero not including whitespace.
    validateRequired(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest) - Static method in class org.apache.struts.util.StrutsValidator
    Deprecated. As of Struts 1.1, replaced by FieldChecks.validateRequired(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)
    validateRequiredIf(Object, ValidatorAction, Field, ActionErrors, Validator, HttpServletRequest) - Static method in class org.apache.struts.validator.FieldChecks
    Checks if the field isn't null based on the values of other fields.
    validateShort(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest) - Static method in class org.apache.struts.validator.FieldChecks
    Checks if the field can safely be converted to a short primitive.
    validateShort(Object, ValidatorAction, Field, ActionErrors, HttpServletRequest) - Static method in class org.apache.struts.util.StrutsValidator
    Deprecated. As of Struts 1.1, replaced by FieldChecks.validateShort(Object,ValidatorAction,Field,ActionErrors,HttpServletRequest)
    validating - Variable in class org.apache.struts.tiles.xmlDefinition.XmlParser
    Should we use a validating XML parser to read the configuration file.
    VALIDATOR_KEY - Static variable in class org.apache.struts.validator.ValidatorPlugIn
    Application scope key that ValidatorResources is stored under.
    ValidatorActionForm - class org.apache.struts.validator.ValidatorActionForm.
    This class extends ValidatorForm and provides basic field validation based on an XML file.
    ValidatorActionForm() - Constructor for class org.apache.struts.validator.ValidatorActionForm
     
    ValidatorForm - class org.apache.struts.validator.ValidatorForm.
    This class extends ActionForm and provides basic field validation based on an XML file.
    ValidatorForm() - Constructor for class org.apache.struts.validator.ValidatorForm
     
    ValidatorPlugIn - class org.apache.struts.validator.ValidatorPlugIn.
    Loads ValidatorResources based on configuration in the struts-config.xml.
    ValidatorPlugIn() - Constructor for class org.apache.struts.validator.ValidatorPlugIn
     
    validatorResults - Variable in class org.apache.struts.validator.ValidatorForm
    The results returned from the validation performed by the Validator.
    validatorResults - Variable in class org.apache.struts.validator.DynaValidatorForm
    The results returned from the validation performed by the Validator.
    value - Variable in class org.apache.struts.util.LabelValueBean
    The property which supplies the value returned to the server.
    value - Variable in class org.apache.struts.upload.MultipartElement
    The element's text value, null for file elements
    value - Variable in class org.apache.struts.tiles.UntyppedAttribute
     
    value - Variable in class org.apache.struts.tiles.xmlDefinition.XmlAttribute
    Attribute value.
    value - Variable in class org.apache.struts.tiles.beans.SimpleMenuItem
     
    value - Variable in class org.apache.struts.taglib.tiles.PutTag
    associated attribute value
    value - Variable in class org.apache.struts.taglib.tiles.InsertTag.DirectStringHandler
    Object to print as a direct string
    value - Variable in class org.apache.struts.taglib.logic.MatchTag
    The value to which the variable specified by other attributes of this tag will be matched.
    value - Variable in class org.apache.struts.taglib.logic.CompareTagBase
    The value to which the variable specified by other attributes of this tag will be compared.
    value - Variable in class org.apache.struts.taglib.html.OptionsCollectionTag
    The name of the bean property containing the value.
    value - Variable in class org.apache.struts.taglib.html.SelectTag
    The value to compare with for marking an option selected.
    value - Variable in class org.apache.struts.taglib.html.CancelTag
    The value of the button label.
    value - Variable in class org.apache.struts.taglib.html.MultiboxTag
    The value which will mark this checkbox as "checked" if present in the array returned by our property getter.
    value - Variable in class org.apache.struts.taglib.html.BaseInputTag
    The value for this field, or null to retrieve the corresponding property from our associated bean.
    value - Variable in class org.apache.struts.taglib.html.CheckboxTag
    The server value for this option.
    value - Variable in class org.apache.struts.taglib.html.SubmitTag
    The value of the button label.
    value - Variable in class org.apache.struts.taglib.html.ButtonTag
    The value of the button label.
    value - Variable in class org.apache.struts.taglib.html.ResetTag
    The value of the button label.
    value - Variable in class org.apache.struts.taglib.html.OptionTag
    The server value for this option, also used to match against the current property value to determine whether this option should be marked as selected.
    value - Variable in class org.apache.struts.taglib.html.RadioTag
    The server value for this option.
    value - Variable in class org.apache.struts.taglib.bean.DefineTag
    The (String) value to which the defined bean will be set.
    value - Variable in class org.apache.struts.taglib.bean.ParameterTag
    The default value to return if no parameter of the specified name is found.
    value - Variable in class org.apache.struts.taglib.bean.HeaderTag
    The default value to return if no header of the specified name is found.
    value - Variable in class org.apache.struts.taglib.bean.CookieTag
    The default value to return if no cookie of the specified name is found.
    values - Variable in class org.apache.struts.action.ActionMessage
    The replacement values for this mesasge.
    valueType - Variable in class org.apache.struts.tiles.xmlDefinition.XmlAttribute
    Attribute value.
    valueType - Variable in class org.apache.struts.taglib.tiles.PutTag
    Requested type for the value
    verifyActionMappingClass() - Method in class org.apache.struts.plugins.ModuleConfigVerifier
    Return true if information returned by config.getActionMappingClass() is all valid; otherwise, log error messages and return false.
    verifyForwardConfigs() - Method in class org.apache.struts.plugins.ModuleConfigVerifier
    Return true if information returned by config.findForwardConfigs() is all valid; otherwise, log error messages and return false.
    verifyMessageResourcesConfigs() - Method in class org.apache.struts.plugins.ModuleConfigVerifier
    Return true if information returned by config.findMessageResourcesConfigs() is all valid; otherwise, log error messages and return false.
    verifyPlugInConfigs() - Method in class org.apache.struts.plugins.ModuleConfigVerifier
    Return true if information returned by config.findPluginConfigs() is all valid; otherwise, log error messages and return false.
    ViewDefinitionsAction - class org.apache.struts.tiles.actions.ViewDefinitionsAction.
    An Action that writes the definitions of the Tiles factory.
    ViewDefinitionsAction() - Constructor for class org.apache.struts.tiles.actions.ViewDefinitionsAction
     
    vspace - Variable in class org.apache.struts.taglib.html.ImgTag
    The vertical spacing around the image.

    W

    width - Variable in class org.apache.struts.taglib.html.ImgTag
    The image width.
    write - Variable in class org.apache.struts.taglib.html.HiddenTag
    Should the value of this field also be rendered to the response?
    write(char) - Method in class org.apache.struts.util.ServletContextWriter
    Write a single character to this stream.
    write(char[]) - Method in class org.apache.struts.util.ServletContextWriter
    Write an array of charaters to this stream.
    write(char[], int, int) - Method in class org.apache.struts.util.ServletContextWriter
    Write the specified subset of an array of characters to this stream.
    write(int) - Method in class org.apache.struts.util.ServletContextWriter
    Write a single character to this stream.
    write(PageContext, String) - Static method in class org.apache.struts.util.ResponseUtils
    Write the specified text as the response to the writer associated with this page.
    write(String) - Method in class org.apache.struts.util.ServletContextWriter
    Write a String to this stream.
    write(String, int, int) - Method in class org.apache.struts.util.ServletContextWriter
    Write the specified portion of a String to this stream.
    writePrevious(PageContext, String) - Static method in class org.apache.struts.util.ResponseUtils
    Write the specified text as the response to the writer associated with the body content for the tag within which we are currently nested.
    WriteTag - class org.apache.struts.taglib.bean.WriteTag.
    Tag that retrieves the specified property of the specified bean, converts it to a String representation (if necessary), and writes it to the current output stream, optionally filtering characters that are sensitive in HTML.
    WriteTag() - Constructor for class org.apache.struts.taglib.bean.WriteTag
     

    X

    x - Variable in class org.apache.struts.util.ImageButtonBean
    The X coordinate of the button press.
    xhtml - Variable in class org.apache.struts.taglib.html.HtmlTag
    Are we rendering an xhtml page?
    XHTML_KEY - Static variable in class org.apache.struts.Globals
    The page attributes key under which xhtml status is stored.
    XhtmlTag - class org.apache.struts.taglib.html.XhtmlTag.
    This tag tells all other html taglib tags to render themselves in xhtml.
    XhtmlTag() - Constructor for class org.apache.struts.taglib.html.XhtmlTag
    Constructor for XhtmlTag.
    XmlAttribute - class org.apache.struts.tiles.xmlDefinition.XmlAttribute.
    A property key-value pair.
    XmlAttribute() - Constructor for class org.apache.struts.tiles.xmlDefinition.XmlAttribute
    Constructor.
    XmlAttribute(String, Object) - Constructor for class org.apache.struts.tiles.xmlDefinition.XmlAttribute
    Constructor.
    XmlDefinition - class org.apache.struts.tiles.xmlDefinition.XmlDefinition.
    A definition read from an XML definitions file.
    XmlDefinition() - Constructor for class org.apache.struts.tiles.xmlDefinition.XmlDefinition
    Constructor.
    XmlDefinitionsSet - class org.apache.struts.tiles.xmlDefinition.XmlDefinitionsSet.
    A set of definitions read from XML definitions file.
    XmlDefinitionsSet() - Constructor for class org.apache.struts.tiles.xmlDefinition.XmlDefinitionsSet
    Constructor.
    XmlListAttribute - class org.apache.struts.tiles.xmlDefinition.XmlListAttribute.
    An attribute as a List.
    XmlListAttribute() - Constructor for class org.apache.struts.tiles.xmlDefinition.XmlListAttribute
    Constructor.
    XmlListAttribute(String, List) - Constructor for class org.apache.struts.tiles.xmlDefinition.XmlListAttribute
    Constructor.
    xmlParser - Variable in class org.apache.struts.tiles.xmlDefinition.I18nFactorySet
    Xml parser used.
    XmlParser - class org.apache.struts.tiles.xmlDefinition.XmlParser.
    Parse an XML definitions file.
    XmlParser() - Constructor for class org.apache.struts.tiles.xmlDefinition.XmlParser
    Constructor.

    Y

    y - Variable in class org.apache.struts.util.ImageButtonBean
    The Y coordinate of the button press.

    A B C D E F G H I J K L M N O P R S T U V W X Y

    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/index.html0000644000175000017500000000141610404045204021766 0ustar arnaudarnaud00000000000000 Apache Struts API Documentation <H2> Frame Alert</H2> <P> This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. <BR> Link to<A HREF="overview-summary.html">Non-frame version.</A> libstruts1.2-java-1.2.9/legacy/api-1.1/overview-frame.html0000644000175000017500000001200310404045236023614 0ustar arnaudarnaud00000000000000 Overview (Apache Struts API Documentation)
    All Classes

    Packages
    org.apache.struts
    org.apache.struts.action
    org.apache.struts.actions
    org.apache.struts.config
    org.apache.struts.config.impl
    org.apache.struts.plugins
    org.apache.struts.taglib.bean
    org.apache.struts.taglib.html
    org.apache.struts.taglib.logic
    org.apache.struts.taglib.nested
    org.apache.struts.taglib.nested.bean
    org.apache.struts.taglib.nested.html
    org.apache.struts.taglib.nested.logic
    org.apache.struts.taglib.template
    org.apache.struts.taglib.template.util
    org.apache.struts.taglib.tiles
    org.apache.struts.taglib.tiles.ext
    org.apache.struts.taglib.tiles.util
    org.apache.struts.tiles
    org.apache.struts.tiles.actions
    org.apache.struts.tiles.beans
    org.apache.struts.tiles.definition
    org.apache.struts.tiles.xmlDefinition
    org.apache.struts.upload
    org.apache.struts.util
    org.apache.struts.validator

      libstruts1.2-java-1.2.9/legacy/api-1.1/overview-summary.html0000644000175000017500000002773510404045226024240 0ustar arnaudarnaud00000000000000 Overview (Apache Struts API Documentation)


    Apache Struts Framework (Version 1.1)

    Packages
    org.apache.struts  
    org.apache.struts.action The action package is the core of the struts framework, providing the "Controller" aspect of a MVC model.
    org.apache.struts.actions The actions package provides special adapters between the incoming HTTP request and the corresponding business logic.
    org.apache.struts.config The "config" package contains configuration objects that correspond to elements that may be specified in the struts-config.xml module configuration file.
    org.apache.struts.config.impl  
    org.apache.struts.plugins  
    org.apache.struts.taglib.bean The "struts-bean" tag library contains JSP custom tags useful in defining new beans (in any desired scope) from a variety of possible sources, as well as a tag to render a particular bean (or bean property) to the output response.
    org.apache.struts.taglib.html The "struts-html" tag library contains JSP custom tags useful in creating dynamic HTML user interfaces, including input forms.
    org.apache.struts.taglib.logic The "struts-logic" 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.
    org.apache.struts.taglib.nested Nested tags & supporting classes extend the base struts tags to allow them to relate to each other in a nested nature.
    org.apache.struts.taglib.nested.bean The nested bean tags extend the org.apache.struts.taglib.bean tags to allow them to relate to each other in a nested nature.
    org.apache.struts.taglib.nested.html The nested html tags extend the org.apache.struts.taglib.html tags to allow them to relate to each other in a nested nature.
    org.apache.struts.taglib.nested.logic The nested html tags extend the org.apache.struts.taglib.logic tags to allow them to relate to each other in a nested nature.
    org.apache.struts.taglib.template Note: As of Struts 1.1 the template tag library is deprecated in favor of Tiles.
    org.apache.struts.taglib.template.util  
    org.apache.struts.taglib.tiles The "struts-tiles" tag library contains tags that are useful in creating dynamic reusable components.
    org.apache.struts.taglib.tiles.ext  
    org.apache.struts.taglib.tiles.util  
    org.apache.struts.tiles
    The Tiles taglib and framework allows building web pages by assembling reusable pieces of pages, called Tiles.
    org.apache.struts.tiles.actions  
    org.apache.struts.tiles.beans  
    org.apache.struts.tiles.definition  
    org.apache.struts.tiles.xmlDefinition  
    org.apache.struts.upload The upload package facilities to upload files using multi-part requests.
    org.apache.struts.util The Utilities package provides a variety of families of classes, to solve problems that are commonly encountered in building web applications.
    org.apache.struts.validator The validator package provides a series of classes to validate ActionForm type of input.

     



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/overview-tree.html0000644000175000017500000017111610404045232023470 0ustar arnaudarnaud00000000000000 Class Hierarchy (Apache Struts API Documentation)

    Hierarchy For All Packages

    Package Hierarchies:
    org.apache.struts, org.apache.struts.action, org.apache.struts.actions, org.apache.struts.config, org.apache.struts.config.impl, org.apache.struts.plugins, org.apache.struts.taglib.bean, org.apache.struts.taglib.html, org.apache.struts.taglib.logic, org.apache.struts.taglib.nested, org.apache.struts.taglib.nested.bean, org.apache.struts.taglib.nested.html, org.apache.struts.taglib.nested.logic, org.apache.struts.taglib.template, org.apache.struts.taglib.template.util, org.apache.struts.taglib.tiles, org.apache.struts.taglib.tiles.ext, org.apache.struts.taglib.tiles.util, org.apache.struts.tiles, org.apache.struts.tiles.actions, org.apache.struts.tiles.beans, org.apache.struts.tiles.definition, org.apache.struts.tiles.xmlDefinition, org.apache.struts.upload, org.apache.struts.util, org.apache.struts.validator

    Class Hierarchy

    Interface Hierarchy



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/package-list0000644000175000017500000000146510404045210022261 0ustar arnaudarnaud00000000000000org.apache.struts org.apache.struts.action org.apache.struts.actions org.apache.struts.config org.apache.struts.config.impl org.apache.struts.plugins org.apache.struts.taglib.bean org.apache.struts.taglib.html org.apache.struts.taglib.logic org.apache.struts.taglib.nested org.apache.struts.taglib.nested.bean org.apache.struts.taglib.nested.html org.apache.struts.taglib.nested.logic org.apache.struts.taglib.template org.apache.struts.taglib.template.util org.apache.struts.taglib.tiles org.apache.struts.taglib.tiles.ext org.apache.struts.taglib.tiles.util org.apache.struts.tiles org.apache.struts.tiles.actions org.apache.struts.tiles.beans org.apache.struts.tiles.definition org.apache.struts.tiles.xmlDefinition org.apache.struts.upload org.apache.struts.util org.apache.struts.validator libstruts1.2-java-1.2.9/legacy/api-1.1/packages.html0000644000175000017500000000147210404045232022440 0ustar arnaudarnaud00000000000000 (Apache Struts API Documentation)


    The front page has been relocated.Please see:
              Frame version
              Non-frame version.
    libstruts1.2-java-1.2.9/legacy/api-1.1/serialized-form.html0000644000175000017500000071014010404045230023753 0ustar arnaudarnaud00000000000000 Serialized Form (Apache Struts API Documentation)

    Serialized Form


    Package org.apache.struts

    Class org.apache.struts.Globals implements Serializable


    Package org.apache.struts.validator

    Class org.apache.struts.validator.DynaValidatorActionForm implements Serializable

    Class org.apache.struts.validator.DynaValidatorForm implements Serializable

    Serialized Fields

    validatorResults

    org.apache.commons.validator.ValidatorResults validatorResults
    The results returned from the validation performed by the Validator.


    page

    int page
    Used to indicate the current page of a multi-page form.

    Class org.apache.struts.validator.FieldChecks implements Serializable

    Class org.apache.struts.validator.ValidatorActionForm implements Serializable

    Class org.apache.struts.validator.ValidatorForm implements Serializable

    Serialized Fields

    validatorResults

    org.apache.commons.validator.ValidatorResults validatorResults
    The results returned from the validation performed by the Validator.


    page

    int page
    Used to indicate the current page of a multi-page form.


    Package org.apache.struts.util

    Class org.apache.struts.util.AppException implements Serializable

    Class org.apache.struts.util.ImageButtonBean implements Serializable

    Serialized Fields

    x

    java.lang.String x
    The X coordinate of the button press.


    y

    java.lang.String y
    The Y coordinate of the button press.

    Class org.apache.struts.util.LabelValueBean implements Serializable

    Serialized Fields

    label

    java.lang.String label
    The property which supplies the option label visible to the end user.


    value

    java.lang.String value
    The property which supplies the value returned to the server.

    Class org.apache.struts.util.MessageResources implements Serializable

    Serialized Fields

    config

    java.lang.String config
    The configuration parameter used to initialize this MessageResources.


    defaultLocale

    java.util.Locale defaultLocale
    The default Locale for our environment.


    factory

    MessageResourcesFactory factory
    The MessageResourcesFactory that created this instance.


    formats

    java.util.HashMap formats
    The set of previously created MessageFormat objects, keyed by the key computed in messageKey().


    returnNull

    boolean returnNull
    Indicate is a null is returned instead of an error message string when an unknown Locale or key is requested.

    Class org.apache.struts.util.MessageResourcesFactory implements Serializable

    Serialized Fields

    returnNull

    boolean returnNull
    The "return null" property value to which newly created MessageResourcess should be initialized.

    Class org.apache.struts.util.ModuleException implements Serializable

    Serialized Fields

    property

    java.lang.String property

    error

    ActionError error

    Class org.apache.struts.util.PropertyMessageResources implements Serializable

    Serialized Fields

    locales

    java.util.HashMap locales
    The set of locale keys for which we have already loaded messages, keyed by the value calculated in localeKey().


    messages

    java.util.HashMap messages
    The cache of messages we have accumulated over time, keyed by the value calculated in messageKey().

    Class org.apache.struts.util.PropertyMessageResourcesFactory implements Serializable

    Class org.apache.struts.util.StrutsValidator implements Serializable


    Package org.apache.struts.upload

    Class org.apache.struts.upload.ContentLengthExceededException implements Serializable

    Serialized Fields

    message

    java.lang.String message

    Class org.apache.struts.upload.MaxLengthExceededException implements Serializable

    Serialized Fields

    message

    java.lang.String message


    Package org.apache.struts.tiles

    Class org.apache.struts.tiles.ActionComponentServlet implements Serializable

    Serialized Fields

    definitionsFactory

    DefinitionsFactory definitionsFactory
    Deprecated. 
    Definitions factory

    Class org.apache.struts.tiles.ComponentContext implements Serializable

    Serialized Fields

    attributes

    java.util.Map attributes
    Component attributes.

    Class org.apache.struts.tiles.ComponentDefinition implements Serializable

    Serialized Fields

    name

    java.lang.String name
    Definition name


    path

    java.lang.String path
    Component / template path (URL).


    attributes

    java.util.Map attributes
    Attributes defined for the component.


    role

    java.lang.String role
    role associated to definition


    controller

    java.lang.String controller
    Associated Controller URL or classname, if defined


    controllerType

    java.lang.String controllerType
    Associated Controller typename, if controllerName defined. Can be CONTROLLER, ACTION or URL, or null


    controllerInstance

    Controller controllerInstance
    Controller associated to Definition. Lazy creation : only on first request

    Class org.apache.struts.tiles.DefinitionAttribute implements Serializable

    Class org.apache.struts.tiles.DefinitionNameAttribute implements Serializable

    Class org.apache.struts.tiles.DefinitionsFactoryConfig implements Serializable

    Serialized Fields

    factoryClassname

    java.lang.String factoryClassname
    Fully qualified classname of the factory to create. If no classname is set, a default factory is created (of class "org.apache.struts.tiles.xmlDefinition.I18nFactorySet").


    debugLevel

    int debugLevel
    Deprecated. Use commons-logging mechanism.

    Debug level value. 0=no debug info >0 = debug info.


    parserDebugLevel

    int parserDebugLevel
    Deprecated. Use commons-logging mechanism.

    Debug level value used when parsing configuration file. 0=no debug info; >0 = debug info.


    parserValidate

    boolean parserValidate
    Specifies whether the parser will validate configuration files. Default value is true.


    definitionConfigFiles

    java.lang.String definitionConfigFiles
    Definition configuration file specified by user


    moduleAware

    boolean moduleAware
    Specifies whether the factory is "module-aware".


    factoryName

    java.lang.String factoryName
    The name associated to this factory.
    With Struts 1.1, this name is the module name to which this factory belong. It is set by the system.
    In prior versions, this property is not used.


    extraAttributes

    java.util.Map extraAttributes
    Map of extra attribute available.

    Class org.apache.struts.tiles.DefinitionsFactoryException implements Serializable

    Serialized Fields

    exception

    java.lang.Exception exception
    Any "wrapped" exception will be exposed when this is serialized.

     

    Class org.apache.struts.tiles.DirectStringAttribute implements Serializable

    Class org.apache.struts.tiles.FactoryNotFoundException implements Serializable

    Class org.apache.struts.tiles.NoSuchDefinitionException implements Serializable

    Class org.apache.struts.tiles.PathAttribute implements Serializable

    Class org.apache.struts.tiles.TilesException implements Serializable

    Serialized Fields

    exception

    java.lang.Exception exception
    Any "wrapped" exception will be exposed when this is serialized.

     

    Class org.apache.struts.tiles.TilesServlet implements Serializable

    Class org.apache.struts.tiles.TilesUtilImpl implements Serializable

    Serialized Fields

    log

    org.apache.commons.logging.Log log
    Commons Logging instance.

    Class org.apache.struts.tiles.TilesUtilStrutsImpl implements Serializable

    Class org.apache.struts.tiles.TilesUtilStrutsModulesImpl implements Serializable

    Class org.apache.struts.tiles.UntyppedAttribute implements Serializable

    Serialized Fields

    role

    java.lang.String role
    Role associated to this attribute.


    value

    java.lang.Object value


    Package org.apache.struts.tiles.xmlDefinition

    Class org.apache.struts.tiles.xmlDefinition.DefinitionsFactory implements Serializable

    Serialized Fields

    definitions

    java.util.Map definitions
    Underlying map containing all definitions.

    Class org.apache.struts.tiles.xmlDefinition.FactorySet implements Serializable

    Serialized Fields

    factories

    java.util.Map factories
    Loaded factories

    Class org.apache.struts.tiles.xmlDefinition.I18nFactorySet implements Serializable

    Serialized Fields

    defaultFactory

    DefinitionsFactory defaultFactory
    Default factory.


    isValidatingParser

    boolean isValidatingParser
    Do we want validating parser. Default is false. Can be set from servlet config file.


    parserDetailLevel

    int parserDetailLevel
    Parser detail level. Default is 0. Can be set from servlet config file.


    filenames

    java.util.List filenames
    Names of files containing instances descriptions.


    loaded

    java.util.Map loaded
    Collection of already loaded definitions set, referenced by their suffix.

    Class org.apache.struts.tiles.xmlDefinition.XmlDefinition implements Serializable

    Serialized Fields

    inherit

    java.lang.String inherit
    Extends attribute value.


    isVisited

    boolean isVisited
    Used for resolving inheritance.


    Package org.apache.struts.tiles.definition

    Class org.apache.struts.tiles.definition.ComponentDefinitionsFactoryWrapper implements Serializable

    Serialized Fields

    factory

    ComponentDefinitionsFactory factory
    The underlying factory


    config

    DefinitionsFactoryConfig config
    Factory configuration

    Class org.apache.struts.tiles.definition.ReloadableDefinitionsFactory implements Serializable

    Serialized Fields

    factory

    ComponentDefinitionsFactory factory
    The real factory instance


    properties

    java.util.Map properties
    Initialization parameters


    Package org.apache.struts.tiles.beans

    Class org.apache.struts.tiles.beans.SimpleMenuItem implements Serializable

    Serialized Fields

    value

    java.lang.String value

    link

    java.lang.String link

    icon

    java.lang.String icon

    tooltip

    java.lang.String tooltip


    Package org.apache.struts.taglib.tiles

    Class org.apache.struts.taglib.tiles.AddTag implements Serializable

    Class org.apache.struts.taglib.tiles.AttributeToScopeTag implements Serializable

    Serialized Fields

    scopeName

    java.lang.String scopeName
    Deprecated. 
    The scope name.


    scope

    int scope
    Deprecated. 
    The scope value.


    property

    java.lang.String property
    Deprecated. 
    The property name to be exposed.

    Class org.apache.struts.taglib.tiles.DefinitionTag implements Serializable

    Serialized Fields

    id

    java.lang.String id
    Definition identifier.


    scope

    java.lang.String scope
    Scope into which definition will be saved.


    extendsDefinition

    java.lang.String extendsDefinition
    Extends attribute value.


    definition

    ComponentDefinition definition
    Template definition

    Class org.apache.struts.taglib.tiles.DefinitionTagSupport implements Serializable

    Serialized Fields

    controllerType

    java.lang.String controllerType
    Associated Controller type


    controllerName

    java.lang.String controllerName
    Associated Controller name (classname or url)


    role

    java.lang.String role
    Role associated to definition.


    page

    java.lang.String page
    Uri of page assoicated to this definition.

    Class org.apache.struts.taglib.tiles.GetAttributeTag implements Serializable

    Serialized Fields

    attribute

    java.lang.String attribute

    role

    java.lang.String role
    Role attribute


    isErrorIgnored

    boolean isErrorIgnored
    Do we ignore error if attribute is not found. Default value is false, which will throw an exception.

    Class org.apache.struts.taglib.tiles.GetTag implements Serializable

    Class org.apache.struts.taglib.tiles.ImportAttributeTag implements Serializable

    Serialized Fields

    name

    java.lang.String name
    Class name of object.


    scopeName

    java.lang.String scopeName
    The scope name.


    scope

    int scope
    The scope value.


    isErrorIgnored

    boolean isErrorIgnored
    Are errors ignored. This is the property for attribute ignore. Default value is false, which throws an exception. Only "attribute not found" - errors are ignored.

    Class org.apache.struts.taglib.tiles.InitDefinitionsTag implements Serializable

    Serialized Fields

    filename

    java.lang.String filename

    classname

    java.lang.String classname

    Class org.apache.struts.taglib.tiles.InsertTag implements Serializable

    Serialized Fields

    flush

    boolean flush
    Flush attribute value


    name

    java.lang.String name
    Name to insert


    attribute

    java.lang.String attribute
    Name of attribute from which to read page name to include


    beanName

    java.lang.String beanName
    Name of bean used as entity to include


    beanProperty

    java.lang.String beanProperty
    Name of bean property, if any


    beanScope

    java.lang.String beanScope
    Scope of bean, if any


    isErrorIgnored

    boolean isErrorIgnored
    Are errors ignored. This is the property for attribute 'ignore'. Default value is false, which throw an exception. Only 'attribute not found' errors are ignored.


    definitionName

    java.lang.String definitionName
    Name of component instance to include


    processEndTag

    boolean processEndTag
    Does the end tag need to be processed. Default value is true. Boolean set in case of ignored errors.


    cachedCurrentContext

    ComponentContext cachedCurrentContext
    Current component context


    tagHandler

    InsertTag.TagHandler tagHandler
    Finale handler of tag methods


    pageContext

    javax.servlet.jsp.PageContext pageContext
    Trick to allows inner classes to access pageContext

    Class org.apache.struts.taglib.tiles.PutListTag implements Serializable

    Serialized Fields

    attributeName

    java.lang.String attributeName
    Name of this attribute.


    list

    java.util.List list
    The list itself.


    role

    java.lang.String role
    Role attribute.

    Class org.apache.struts.taglib.tiles.PutTag implements Serializable

    Serialized Fields

    attributeName

    java.lang.String attributeName
    Name of attribute to put in component context


    value

    java.lang.Object value
    associated attribute value


    direct

    java.lang.String direct
    JSP Template compatibility


    valueType

    java.lang.String valueType
    Requested type for the value


    beanName

    java.lang.String beanName
    Bean name attribute


    beanProperty

    java.lang.String beanProperty
    Bean property attribute


    beanScope

    java.lang.String beanScope
    Bean scope attribute


    role

    java.lang.String role
    Role attribute


    realValue

    java.lang.Object realValue
    cached real value computed from tag attributes

    Class org.apache.struts.taglib.tiles.UseAttributeTag implements Serializable

    Serialized Fields

    classname

    java.lang.String classname
    Class name of object.


    scopeName

    java.lang.String scopeName
    The scope name.


    scope

    int scope
    The scope value.


    attributeName

    java.lang.String attributeName
    The attribute name to be exposed.


    isErrorIgnored

    boolean isErrorIgnored
    Are errors ignored. This is the property for attribute 'ignore'. Default value is false, which throws an exception. Only "attribute not found" - errors are ignored.


    Package org.apache.struts.taglib.tiles.ext

    Class org.apache.struts.taglib.tiles.ext.TextTag implements Serializable

    Serialized Fields

    prefix

    java.lang.String prefix
    Deprecated. 
    The prefix to be added before the html name.


    Package org.apache.struts.taglib.template

    Class org.apache.struts.taglib.template.GetTag implements Serializable

    Serialized Fields

    flush

    boolean flush
    Deprecated. 
    Should we flush before including this text?


    name

    java.lang.String name
    Deprecated. 
    The name of the content that this tag includes (or prints).


    role

    java.lang.String role
    Deprecated. 
    The role that the user must be in to retrieve content.

    Class org.apache.struts.taglib.template.InsertTag implements Serializable

    Serialized Fields

    map

    ContentMap map
    Deprecated. 
    Each insert tag has a map of content.


    template

    java.lang.String template
    Deprecated. 
    The application-relative URI of the template.

    Class org.apache.struts.taglib.template.PutTag implements Serializable

    Serialized Fields

    name

    java.lang.String name
    Deprecated. 
    The content's name.


    role

    java.lang.String role
    Deprecated. 
    The role that the user must be in to store content.


    content

    java.lang.String content
    Deprecated. 
    The content's URI (or text).


    direct

    java.lang.String direct
    Deprecated. 
    Determines whether content is included (false) or printed (true). Content is included (false) by default.


    Package org.apache.struts.taglib.template.util

    Class org.apache.struts.taglib.template.util.Content implements Serializable

    Serialized Fields

    content

    java.lang.String content
    Deprecated. 
    Templates regard this as content to be either included or printed directly. This is a blank final that is set at construction.


    direct

    java.lang.String direct
    Deprecated. 
    Represents a boolean - if true, content is included, otherwise content is printed. This is a blank final that is set at construction. This is a string instead of a boolean as a convenience for the tags, whose corresponding attribute is a string.

    Class org.apache.struts.taglib.template.util.ContentMap implements Serializable

    Serialized Fields

    map

    java.util.HashMap map
    Deprecated. 
    The map.


    Package org.apache.struts.taglib.nested

    Class org.apache.struts.taglib.nested.NestedPropertyTag implements Serializable

    Serialized Fields

    property

    java.lang.String property

    originalNest

    java.lang.String originalNest

    originalName

    java.lang.String originalName

    originalProperty

    java.lang.String originalProperty

    Class org.apache.struts.taglib.nested.NestedReference implements Serializable

    Serialized Fields

    beanName

    java.lang.String beanName

    property

    java.lang.String property

    Class org.apache.struts.taglib.nested.NestedRootTag implements Serializable

    Serialized Fields

    name

    java.lang.String name

    originalName

    java.lang.String originalName

    originalNesting

    java.lang.String originalNesting

    originalNestingName

    java.lang.String originalNestingName

    Class org.apache.struts.taglib.nested.NestedWriteNestingTag implements Serializable

    Serialized Fields

    filter

    boolean filter

    property

    java.lang.String property

    originalProperty

    java.lang.String originalProperty


    Package org.apache.struts.taglib.nested.logic

    Class org.apache.struts.taglib.nested.logic.NestedEmptyTag implements Serializable

    Serialized Fields

    originalName

    java.lang.String originalName

    originalProperty

    java.lang.String originalProperty

    Class org.apache.struts.taglib.nested.logic.NestedEqualTag implements Serializable

    Serialized Fields

    originalName

    java.lang.String originalName

    originalProperty

    java.lang.String originalProperty

    Class org.apache.struts.taglib.nested.logic.NestedGreaterEqualTag implements Serializable

    Serialized Fields

    originalName

    java.lang.String originalName

    originalProperty

    java.lang.String originalProperty

    Class org.apache.struts.taglib.nested.logic.NestedGreaterThanTag implements Serializable

    Serialized Fields

    originalName

    java.lang.String originalName

    originalProperty

    java.lang.String originalProperty

    Class org.apache.struts.taglib.nested.logic.NestedIterateTag implements Serializable

    Serialized Fields

    nesting

    java.lang.String nesting

    originalName

    java.lang.String originalName

    originalProperty

    java.lang.String originalProperty

    originalNesting

    java.lang.String originalNesting

    originalNestingName

    java.lang.String originalNestingName

    Class org.apache.struts.taglib.nested.logic.NestedLessEqualTag implements Serializable

    Serialized Fields

    originalName

    java.lang.String originalName

    originalProperty

    java.lang.String originalProperty

    Class org.apache.struts.taglib.nested.logic.NestedLessThanTag implements Serializable

    Serialized Fields

    originalName

    java.lang.String originalName

    originalProperty

    java.lang.String originalProperty

    Class org.apache.struts.taglib.nested.logic.NestedMatchTag implements Serializable

    Serialized Fields

    originalName

    java.lang.String originalName

    originalProperty

    java.lang.String originalProperty

    Class org.apache.struts.taglib.nested.logic.NestedMessagesNotPresentTag implements Serializable

    Serialized Fields

    originalName

    java.lang.String originalName

    originalProperty

    java.lang.String originalProperty

    Class org.apache.struts.taglib.nested.logic.NestedMessagesPresentTag implements Serializable

    Serialized Fields

    originalName

    java.lang.String originalName

    originalProperty

    java.lang.String originalProperty

    Class org.apache.struts.taglib.nested.logic.NestedNotEmptyTag implements Serializable

    Serialized Fields

    originalName

    java.lang.String originalName

    originalProperty

    java.lang.String originalProperty

    Class org.apache.struts.taglib.nested.logic.NestedNotEqualTag implements Serializable

    Serialized Fields

    originalName

    java.lang.String originalName

    originalProperty

    java.lang.String originalProperty

    Class org.apache.struts.taglib.nested.logic.NestedNotMatchTag implements Serializable

    Serialized Fields

    originalName

    java.lang.String originalName

    originalProperty

    java.lang.String originalProperty

    Class org.apache.struts.taglib.nested.logic.NestedNotPresentTag implements Serializable

    Serialized Fields

    originalName

    java.lang.String originalName

    originalProperty

    java.lang.String originalProperty

    Class org.apache.struts.taglib.nested.logic.NestedPresentTag implements Serializable

    Serialized Fields

    originalName

    java.lang.String originalName

    originalProperty

    java.lang.String originalProperty


    Package org.apache.struts.taglib.nested.html

    Class org.apache.struts.taglib.nested.html.NestedCheckboxTag implements Serializable

    Serialized Fields

    originalName

    java.lang.String originalName

    originalProperty

    java.lang.String originalProperty

    Class org.apache.struts.taglib.nested.html.NestedErrorsTag implements Serializable

    Serialized Fields

    originalName

    java.lang.String originalName

    originalProperty

    java.lang.String originalProperty

    Class org.apache.struts.taglib.nested.html.NestedFileTag implements Serializable

    Serialized Fields

    originalName

    java.lang.String originalName

    originalProperty

    java.lang.String originalProperty

    Class org.apache.struts.taglib.nested.html.NestedFormTag implements Serializable

    Serialized Fields

    originalNesting

    java.lang.String originalNesting

    originalNestingName

    java.lang.String originalNestingName

    Class org.apache.struts.taglib.nested.html.NestedHiddenTag implements Serializable

    Serialized Fields

    originalName

    java.lang.String originalName

    originalProperty

    java.lang.String originalProperty

    Class org.apache.struts.taglib.nested.html.NestedImageTag implements Serializable

    Serialized Fields

    originalProperty

    java.lang.String originalProperty

    Class org.apache.struts.taglib.nested.html.NestedImgTag implements Serializable

    Serialized Fields

    originalName

    java.lang.String originalName

    originalProperty

    java.lang.String originalProperty

    Class org.apache.struts.taglib.nested.html.NestedLinkTag implements Serializable

    Serialized Fields

    origName

    java.lang.String origName

    origProperty

    java.lang.String origProperty

    origParamProperty

    java.lang.String origParamProperty

    Class org.apache.struts.taglib.nested.html.NestedMessagesTag implements Serializable

    Serialized Fields

    originalName

    java.lang.String originalName

    originalProperty

    java.lang.String originalProperty

    Class org.apache.struts.taglib.nested.html.NestedMultiboxTag implements Serializable

    Serialized Fields

    originalName

    java.lang.String originalName

    originalProperty

    java.lang.String originalProperty

    Class org.apache.struts.taglib.nested.html.NestedOptionsCollectionTag implements Serializable

    Serialized Fields

    originalName

    java.lang.String originalName

    originalProperty

    java.lang.String originalProperty

    Class org.apache.struts.taglib.nested.html.NestedOptionsTag implements Serializable

    Serialized Fields

    originalName

    java.lang.String originalName

    originalProperty

    java.lang.String originalProperty

    originalLabelProperty

    java.lang.String originalLabelProperty

    Class org.apache.struts.taglib.nested.html.NestedPasswordTag implements Serializable

    Serialized Fields

    originalName

    java.lang.String originalName

    originalProperty

    java.lang.String originalProperty

    Class org.apache.struts.taglib.nested.html.NestedRadioTag implements Serializable

    Serialized Fields

    originalName

    java.lang.String originalName

    originalProperty

    java.lang.String originalProperty

    Class org.apache.struts.taglib.nested.html.NestedSelectTag implements Serializable

    Serialized Fields

    originalName

    java.lang.String originalName

    originalProperty

    java.lang.String originalProperty

    Class org.apache.struts.taglib.nested.html.NestedSubmitTag implements Serializable

    Serialized Fields

    originalProperty

    java.lang.String originalProperty

    Class org.apache.struts.taglib.nested.html.NestedTextareaTag implements Serializable

    Serialized Fields

    originalName

    java.lang.String originalName

    originalProperty

    java.lang.String originalProperty

    Class org.apache.struts.taglib.nested.html.NestedTextTag implements Serializable

    Serialized Fields

    originalName

    java.lang.String originalName

    originalProperty

    java.lang.String originalProperty


    Package org.apache.struts.taglib.nested.bean

    Class org.apache.struts.taglib.nested.bean.NestedDefineTag implements Serializable

    Serialized Fields

    originalName

    java.lang.String originalName

    originalProperty

    java.lang.String originalProperty

    Class org.apache.struts.taglib.nested.bean.NestedMessageTag implements Serializable

    Serialized Fields

    originalName

    java.lang.String originalName

    originalProperty

    java.lang.String originalProperty

    Class org.apache.struts.taglib.nested.bean.NestedSizeTag implements Serializable

    Serialized Fields

    originalName

    java.lang.String originalName

    originalProperty

    java.lang.String originalProperty

    Class org.apache.struts.taglib.nested.bean.NestedWriteTag implements Serializable

    Serialized Fields

    originalName

    java.lang.String originalName

    originalProperty

    java.lang.String originalProperty


    Package org.apache.struts.taglib.logic

    Class org.apache.struts.taglib.logic.CompareTagBase implements Serializable

    Serialized Fields

    value

    java.lang.String value
    The value to which the variable specified by other attributes of this tag will be compared.

    Class org.apache.struts.taglib.logic.ConditionalTagBase implements Serializable

    Serialized Fields

    cookie

    java.lang.String cookie
    The name of the cookie to be used as a variable.


    header

    java.lang.String header
    The name of the HTTP request header to be used as a variable.


    name

    java.lang.String name
    The name of the JSP bean to be used as a variable (if property is not specified), or whose property is to be accessed (if property is specified).


    parameter

    java.lang.String parameter
    The name of the HTTP request parameter to be used as a variable.


    property

    java.lang.String property
    The name of the bean property to be used as a variable.


    role

    java.lang.String role
    The name of the security role to be checked for.


    scope

    java.lang.String scope
    The scope to search for the bean named by the name property, or "any scope" if null.


    user

    java.lang.String user
    The user principal name to be checked for.

    Class org.apache.struts.taglib.logic.EmptyTag implements Serializable

    Class org.apache.struts.taglib.logic.EqualTag implements Serializable

    Class org.apache.struts.taglib.logic.ForwardTag implements Serializable

    Serialized Fields

    name

    java.lang.String name
    The logical name of the ActionForward entry to be looked up.

    Class org.apache.struts.taglib.logic.GreaterEqualTag implements Serializable

    Class org.apache.struts.taglib.logic.GreaterThanTag implements Serializable

    Class org.apache.struts.taglib.logic.IterateTag implements Serializable

    Serialized Fields

    iterator

    java.util.Iterator iterator
    Iterator of the elements of this collection, while we are actually running.


    lengthCount

    int lengthCount
    The number of elements we have already rendered.


    lengthValue

    int lengthValue
    The actual length value (calculated in the start tag).


    offsetValue

    int offsetValue
    The actual offset value (calculated in the start tag).


    started

    boolean started
    Has this tag instance been started?


    collection

    java.lang.Object collection
    The collection over which we will be iterating.


    id

    java.lang.String id
    The name of the scripting variable to be exposed.


    indexId

    java.lang.String indexId
    The name of the scripting variable to be exposed as the current index.


    length

    java.lang.String length
    The length value or attribute name (<=0 means no limit).


    name

    java.lang.String name
    The name of the collection or owning bean.


    offset

    java.lang.String offset
    The starting offset (zero relative).


    property

    java.lang.String property
    The property name containing the collection.


    scope

    java.lang.String scope
    The scope of the bean specified by the name property, if any.


    type

    java.lang.String type
    The Java class of each exposed element of the collection.

    Class org.apache.struts.taglib.logic.LessEqualTag implements Serializable

    Class org.apache.struts.taglib.logic.LessThanTag implements Serializable

    Class org.apache.struts.taglib.logic.MatchTag implements Serializable

    Serialized Fields

    location

    java.lang.String location
    The location where the match must exist (start or end), or null for anywhere.


    value

    java.lang.String value
    The value to which the variable specified by other attributes of this tag will be matched.

    Class org.apache.struts.taglib.logic.MessagesNotPresentTag implements Serializable

    Class org.apache.struts.taglib.logic.MessagesPresentTag implements Serializable

    Serialized Fields

    message

    java.lang.String message
    If this is set to 'true', then the Globals.MESSAGE_KEY will be used to retrieve the messages from scope.

    Class org.apache.struts.taglib.logic.NotEmptyTag implements Serializable

    Class org.apache.struts.taglib.logic.NotEqualTag implements Serializable

    Class org.apache.struts.taglib.logic.NotMatchTag implements Serializable

    Class org.apache.struts.taglib.logic.NotPresentTag implements Serializable

    Class org.apache.struts.taglib.logic.PresentTag implements Serializable

    Class org.apache.struts.taglib.logic.RedirectTag implements Serializable

    Serialized Fields

    anchor

    java.lang.String anchor
    The anchor to be added to the end of the generated hyperlink.


    forward

    java.lang.String forward
    The logical forward name from which to retrieve the redirect URI.


    href

    java.lang.String href
    The redirect URI.


    name

    java.lang.String name
    The JSP bean name for query parameters.


    page

    java.lang.String page
    The module-relative page URL (beginning with a slash) to which this redirect will be rendered.


    paramId

    java.lang.String paramId
    The single-parameter request parameter name to generate.


    paramName

    java.lang.String paramName
    The single-parameter JSP bean name.


    paramProperty

    java.lang.String paramProperty
    The single-parameter JSP bean property.


    paramScope

    java.lang.String paramScope
    The single-parameter JSP bean scope.


    property

    java.lang.String property
    The JSP bean property name for query parameters.


    scope

    java.lang.String scope
    The scope of the bean specified by the name property, if any.


    transaction

    boolean transaction
    Include our transaction control token?


    Package org.apache.struts.taglib.html

    Class org.apache.struts.taglib.html.BaseFieldTag implements Serializable

    Serialized Fields

    accept

    java.lang.String accept
    Comma-delimited list of content types that a server processing this form will handle correctly. This property is defined only for the file tag, but is implemented here because it affects the rendered HTML of the corresponding <input> tag.


    name

    java.lang.String name
    The name of the bean containing our underlying property.


    redisplay

    boolean redisplay
    The "redisplay contents" flag (used only on password).


    type

    java.lang.String type
    The type of input field represented by this tag (text, password, or hidden).

    Class org.apache.struts.taglib.html.BaseHandlerTag implements Serializable

    Serialized Fields

    accesskey

    java.lang.String accesskey
    Access key character.


    tabindex

    java.lang.String tabindex
    Tab index value.


    indexed

    boolean indexed
    Whether to created indexed names for fields

    Since:
    Struts 1.1

    onclick

    java.lang.String onclick
    Mouse click event.


    ondblclick

    java.lang.String ondblclick
    Mouse double click event.


    onmouseover

    java.lang.String onmouseover
    Mouse over component event.


    onmouseout

    java.lang.String onmouseout
    Mouse exit component event.


    onmousemove

    java.lang.String onmousemove
    Mouse moved over component event.


    onmousedown

    java.lang.String onmousedown
    Mouse pressed on component event.


    onmouseup

    java.lang.String onmouseup
    Mouse released on component event.


    onkeydown

    java.lang.String onkeydown
    Key down in component event.


    onkeyup

    java.lang.String onkeyup
    Key released in component event.


    onkeypress

    java.lang.String onkeypress
    Key down and up together in component event.


    onselect

    java.lang.String onselect
    Text selected in component event.


    onchange

    java.lang.String onchange
    Content changed after component lost focus event.


    onblur

    java.lang.String onblur
    Component lost focus event.


    onfocus

    java.lang.String onfocus
    Component has received focus event.


    disabled

    boolean disabled
    Component is disabled.


    readonly

    boolean readonly
    Component is readonly.


    style

    java.lang.String style
    Style attribute associated with component.


    styleClass

    java.lang.String styleClass
    Named Style class associated with component.


    styleId

    java.lang.String styleId
    Identifier associated with component.


    alt

    java.lang.String alt
    The alternate text of this element.


    altKey

    java.lang.String altKey
    The message resources key of the alternate text.


    bundle

    java.lang.String bundle
    The name of the message resources bundle for message lookups.


    locale

    java.lang.String locale
    The name of the session attribute key for our locale.


    title

    java.lang.String title
    The advisory title of this element.


    titleKey

    java.lang.String titleKey
    The message resources key of the advisory title.


    loopTagSupportClass

    java.lang.Class loopTagSupportClass

    loopTagSupportGetStatus

    java.lang.reflect.Method loopTagSupportGetStatus

    loopTagStatusClass

    java.lang.Class loopTagStatusClass

    loopTagStatusGetIndex

    java.lang.reflect.Method loopTagStatusGetIndex

    triedJstlInit

    boolean triedJstlInit

    triedJstlSuccess

    boolean triedJstlSuccess

    Class org.apache.struts.taglib.html.BaseInputTag implements Serializable

    Serialized Fields

    cols

    java.lang.String cols
    The number of character columns for this field, or negative for no limit.


    maxlength

    java.lang.String maxlength
    The maximum number of characters allowed, or negative for no limit.


    property

    java.lang.String property
    The name of the field (and associated property) being processed.


    rows

    java.lang.String rows
    The number of rows for this field, or negative for no limit.


    value

    java.lang.String value
    The value for this field, or null to retrieve the corresponding property from our associated bean.

    Class org.apache.struts.taglib.html.BaseTag implements Serializable

    Serialized Fields

    server

    java.lang.String server
    The server name to use instead of request.getServerName().


    target

    java.lang.String target
    The target window for this base reference.

    Class org.apache.struts.taglib.html.ButtonTag implements Serializable

    Serialized Fields

    property

    java.lang.String property
    The property name of the generated button.


    text

    java.lang.String text
    The body content of this tag (if any).


    value

    java.lang.String value
    The value of the button label.

    Class org.apache.struts.taglib.html.CancelTag implements Serializable

    Serialized Fields

    property

    java.lang.String property
    The property name of the generated button.


    text

    java.lang.String text
    The body content of this tag (if any).


    value

    java.lang.String value
    The value of the button label.

    Class org.apache.struts.taglib.html.CheckboxTag implements Serializable

    Serialized Fields

    name

    java.lang.String name
    The name of the bean containing our underlying property.


    property

    java.lang.String property
    The property name for this field.


    text

    java.lang.String text
    The body content of this tag (if any).


    value

    java.lang.String value
    The server value for this option.

    Class org.apache.struts.taglib.html.ErrorsTag implements Serializable

    Serialized Fields

    bundle

    java.lang.String bundle
    The servlet context attribute key for our resources.


    locale

    java.lang.String locale
    The session attribute key for our locale.


    name

    java.lang.String name
    The request attribute key for our error messages (if any).


    property

    java.lang.String property
    The name of the property for which error messages should be returned, or null to return all errors.

    Class org.apache.struts.taglib.html.FileTag implements Serializable

    Class org.apache.struts.taglib.html.FormTag implements Serializable

    Serialized Fields

    action

    java.lang.String action
    The action URL to which this form should be submitted, if any.


    moduleConfig

    ModuleConfig moduleConfig
    The module configuration for our module.


    enctype

    java.lang.String enctype
    The content encoding to be used on a POST submit.


    focus

    java.lang.String focus
    The name of the field to receive focus, if any.


    focusIndex

    java.lang.String focusIndex
    The index in the focus field array to receive focus. This only applies if the field given in the focus attribute is actually an array of fields. This allows a specific field in a radio button array to receive focus while still allowing indexed field names like "myRadioButtonField[1]" to be passed in the focus attribute.

    Since:
    Struts 1.1

    mapping

    ActionMapping mapping
    The ActionMapping defining where we will be submitting this form


    method

    java.lang.String method
    The request method used when submitting this form.


    name

    java.lang.String name
    The attribute key under which our associated bean is stored.


    onreset

    java.lang.String onreset
    The onReset event script.


    onsubmit

    java.lang.String onsubmit
    The onSubmit event script.


    scope

    java.lang.String scope
    The scope (request or session) under which our associated bean is stored.


    servlet

    ActionServlet servlet
    The ActionServlet instance we are associated with (so that we can initialize the servlet property on any form bean that we create).


    style

    java.lang.String style
    The style attribute associated with this tag.


    styleClass

    java.lang.String styleClass
    The style class associated with this tag.


    styleId

    java.lang.String styleId
    The identifier associated with this tag.


    target

    java.lang.String target
    The window target.


    type

    java.lang.String type
    The Java class name of the bean to be created, if necessary.


    beanName

    java.lang.String beanName
    The name of the form bean to (create and) use. This is either the same as the 'name' attribute, if that was specified, or is obtained from the associated ActionMapping otherwise.


    beanScope

    java.lang.String beanScope
    The scope of the form bean to (create and) use. This is either the same as the 'scope' attribute, if that was specified, or is obtained from the associated ActionMapping otherwise.


    beanType

    java.lang.String beanType
    The type of the form bean to (create and) use. This is either the same as the 'type' attribute, if that was specified, or is obtained from the associated ActionMapping otherwise.

    Class org.apache.struts.taglib.html.FrameTag implements Serializable

    Serialized Fields

    frameborder

    java.lang.String frameborder
    The frameborder attribute that should be rendered (1, 0).


    frameName

    java.lang.String frameName
    The name attribute that should be rendered for this frame.


    longdesc

    java.lang.String longdesc
    URI of a long description of this frame (complements title).


    marginheight

    int marginheight
    The margin height in pixels, or zero for no setting.


    marginwidth

    int marginwidth
    The margin width in pixels, or zero for no setting.


    noresize

    boolean noresize
    Should users be disallowed to resize the frame?


    scrolling

    java.lang.String scrolling
    What type of scrolling should be supported (yes, no, auto)?

    Class org.apache.struts.taglib.html.HiddenTag implements Serializable

    Serialized Fields

    write

    boolean write
    Should the value of this field also be rendered to the response?

    Class org.apache.struts.taglib.html.HtmlTag implements Serializable

    Serialized Fields

    locale

    boolean locale
    Should we set the current Locale for this user if needed?


    xhtml

    boolean xhtml
    Are we rendering an xhtml page?

    Class org.apache.struts.taglib.html.ImageTag implements Serializable

    Serialized Fields

    align

    java.lang.String align
    The alignment for this image.


    border

    java.lang.String border
    The border size around the image.


    page

    java.lang.String page
    The module-relative URI of the image.


    pageKey

    java.lang.String pageKey
    The message resources key of the module-relative URI of the image.


    property

    java.lang.String property
    The name attribute for the image button.


    src

    java.lang.String src
    The URL of this image.


    srcKey

    java.lang.String srcKey
    The message resources key for the URL of this image.

    Class org.apache.struts.taglib.html.ImgTag implements Serializable

    Serialized Fields

    align

    java.lang.String align
    The property to specify where to align the image.


    border

    java.lang.String border
    The border size around the image.


    height

    java.lang.String height
    The image height.


    hspace

    java.lang.String hspace
    The horizontal spacing around the image.


    imageName

    java.lang.String imageName
    The image name for named images.


    ismap

    java.lang.String ismap
    Server-side image map declaration.


    lowsrc

    java.lang.String lowsrc
    Deprecated. This is not defined in the HTML 4.01 spec and will be removed in a future version of Struts.

    The low resolution image source URI.


    name

    java.lang.String name
    The JSP bean name for query parameters.


    page

    java.lang.String page
    The module-relative path, starting with a slash character, of the image to be displayed by this rendered tag.


    pageKey

    java.lang.String pageKey
    The message resources key under which we should look up the page attribute for this generated tag, if any.


    paramId

    java.lang.String paramId
    In situations where an image is dynamically generated (such as to create a chart graph), this specifies the single-parameter request parameter name to generate.


    paramName

    java.lang.String paramName
    The single-parameter JSP bean name.


    paramProperty

    java.lang.String paramProperty
    The single-parameter JSP bean property.


    paramScope

    java.lang.String paramScope
    The single-parameter JSP bean scope.


    property

    java.lang.String property
    The JSP bean property name for query parameters.


    scope

    java.lang.String scope
    The scope of the bean specified by the name property, if any.


    src

    java.lang.String src
    The image source URI.


    srcKey

    java.lang.String srcKey
    The message resources key under which we should look up the src attribute for this generated tag, if any.


    usemap

    java.lang.String usemap
    Client-side image map declaration.


    vspace

    java.lang.String vspace
    The vertical spacing around the image.


    width

    java.lang.String width
    The image width.

    Class org.apache.struts.taglib.html.JavascriptValidatorTag implements Serializable

    Serialized Fields

    bundle

    java.lang.String bundle
    The servlet context attribute key for our resources.


    formName

    java.lang.String formName
    The name of the form that corresponds with the action name in struts-config.xml. Specifying a form name places a <script> </script> around the javascript.


    page

    int page
    The current page number of a multi-part form. Only valid when the formName attribute is set.


    methodName

    java.lang.String methodName
    This will be used as is for the JavaScript validation method name if it has a value. This is the method name of the main JavaScript method that the form calls to perform validations.


    staticJavascript

    java.lang.String staticJavascript
    The static JavaScript methods will only be printed if this is set to "true".


    dynamicJavascript

    java.lang.String dynamicJavascript
    The dynamic JavaScript objects will only be generated if this is set to "true".


    src

    java.lang.String src
    The src attribute for html script element (used to include an external script resource). The src attribute is only recognized when the formName attribute is specified.


    htmlComment

    java.lang.String htmlComment
    The JavaScript methods will enclosed with html comments if this is set to "true".


    cdata

    java.lang.String cdata
    Hide JavaScript methods in a CDATA section for XHTML when "true".


    htmlBeginComment

    java.lang.String htmlBeginComment

    htmlEndComment

    java.lang.String htmlEndComment

    Class org.apache.struts.taglib.html.LinkTag implements Serializable

    Serialized Fields

    text

    java.lang.String text
    The body content of this tag (if any).


    anchor

    java.lang.String anchor
    The anchor to be added to the end of the generated hyperlink.


    forward

    java.lang.String forward
    The logical forward name from which to retrieve the hyperlink URI.


    href

    java.lang.String href
    The hyperlink URI.


    linkName

    java.lang.String linkName
    The link name for named links.


    name

    java.lang.String name
    The JSP bean name for query parameters.


    page

    java.lang.String page
    The module-relative page URL (beginning with a slash) to which this hyperlink will be rendered.


    action

    java.lang.String action
    The module-relative action (beginning with a slash) which will be called by this link


    paramId

    java.lang.String paramId
    The single-parameter request parameter name to generate.


    paramName

    java.lang.String paramName
    The single-parameter JSP bean name.


    paramProperty

    java.lang.String paramProperty
    The single-parameter JSP bean property.


    paramScope

    java.lang.String paramScope
    The single-parameter JSP bean scope.


    property

    java.lang.String property
    The JSP bean property name for query parameters.


    scope

    java.lang.String scope
    The scope of the bean specified by the name property, if any.


    target

    java.lang.String target
    The window target.


    transaction

    boolean transaction
    Include transaction token (if any) in the hyperlink?


    indexId

    java.lang.String indexId
    Name of parameter to generate to hold index number

    Class org.apache.struts.taglib.html.MessagesTag implements Serializable

    Serialized Fields

    iterator

    java.util.Iterator iterator
    Iterator of the elements of this error collection, while we are actually running.


    processed

    boolean processed
    Whether or not any error messages have been processed.


    id

    java.lang.String id
    The name of the scripting variable to be exposed.


    bundle

    java.lang.String bundle
    The servlet context attribute key for our resources.


    locale

    java.lang.String locale
    The session attribute key for our locale.


    name

    java.lang.String name
    The request attribute key for our error messages (if any).


    property

    java.lang.String property
    The name of the property for which error messages should be returned, or null to return all errors.


    header

    java.lang.String header
    The message resource key for errors header.


    footer

    java.lang.String footer
    The message resource key for errors footer.


    message

    java.lang.String message
    If this is set to 'true', then the Globals.MESSAGE_KEY will be used to retrieve the messages from scope.

    Class org.apache.struts.taglib.html.MultiboxTag implements Serializable

    Serialized Fields

    constant

    java.lang.String constant
    The constant String value to be returned when this checkbox is selected and the form is submitted.


    name

    java.lang.String name
    The name of the bean containing our underlying property.


    property

    java.lang.String property
    The property name for this field.


    value

    java.lang.String value
    The value which will mark this checkbox as "checked" if present in the array returned by our property getter.

    Class org.apache.struts.taglib.html.OptionsCollectionTag implements Serializable

    Serialized Fields

    filter

    boolean filter
    Should the label values be filtered for HTML sensitive characters?


    label

    java.lang.String label
    The name of the bean property containing the label.


    name

    java.lang.String name
    The name of the bean containing the values collection.


    property

    java.lang.String property
    The name of the property to use to build the values collection.


    style

    java.lang.String style
    The style associated with this tag.


    styleClass

    java.lang.String styleClass
    The named style class associated with this tag.


    value

    java.lang.String value
    The name of the bean property containing the value.

    Class org.apache.struts.taglib.html.OptionsTag implements Serializable

    Serialized Fields

    collection

    java.lang.String collection
    The name of the collection containing beans that have properties to provide both the values and the labels (identified by the property and labelProperty attributes).


    filter

    boolean filter
    Should the label values be filtered for HTML sensitive characters?


    labelName

    java.lang.String labelName
    The name of the bean containing the labels collection.


    labelProperty

    java.lang.String labelProperty
    The bean property containing the labels collection.


    name

    java.lang.String name
    The name of the bean containing the values collection.


    property

    java.lang.String property
    The name of the property to use to build the values collection.


    style

    java.lang.String style
    The style associated with this tag.


    styleClass

    java.lang.String styleClass
    The named style class associated with this tag.

    Class org.apache.struts.taglib.html.OptionTag implements Serializable

    Serialized Fields

    text

    java.lang.String text
    The message text to be displayed to the user for this tag (if any)


    bundle

    java.lang.String bundle
    The name of the servlet context attribute containing our message resources.


    disabled

    boolean disabled
    Is this option disabled?


    key

    java.lang.String key
    The key used to look up the text displayed to the user for this option, if any.


    locale

    java.lang.String locale
    The name of the attribute containing the Locale to be used for looking up internationalized messages.


    style

    java.lang.String style
    The style associated with this tag.


    styleClass

    java.lang.String styleClass
    The named style class associated with this tag.


    styleId

    java.lang.String styleId
    The identifier associated with this tag.


    value

    java.lang.String value
    The server value for this option, also used to match against the current property value to determine whether this option should be marked as selected.

    Class org.apache.struts.taglib.html.PasswordTag implements Serializable

    Class org.apache.struts.taglib.html.RadioTag implements Serializable

    Serialized Fields

    name

    java.lang.String name
    The name of the bean containing our underlying property.


    property

    java.lang.String property
    The property name for this field.


    text

    java.lang.String text
    The body content of this tag (if any).


    value

    java.lang.String value
    The server value for this option.


    idName

    java.lang.String idName
    Name of the bean (in some scope) that will return the value of the radio tag.

    If an iterator is used to render a series of radio tags, this field may be used to specify the name of the bean exposed by the iterator. In this case, the value attribute is used as the name of a property on the idName bean that returns the value of the radio tag in this iteration.

    Class org.apache.struts.taglib.html.ResetTag implements Serializable

    Serialized Fields

    property

    java.lang.String property
    The name of the generated input field.


    text

    java.lang.String text
    The body content of this tag (if any).


    value

    java.lang.String value
    The value of the button label.

    Class org.apache.struts.taglib.html.RewriteTag implements Serializable

    Class org.apache.struts.taglib.html.SelectTag implements Serializable

    Serialized Fields

    match

    java.lang.String[] match
    The actual values we will match against, calculated in doStartTag().


    multiple

    java.lang.String multiple
    Should multiple selections be allowed. Any non-null value will trigger rendering this.


    name

    java.lang.String name
    The name of the bean containing our underlying property.


    property

    java.lang.String property
    The property name we are associated with.


    saveBody

    java.lang.String saveBody
    The saved body content of this tag.


    size

    java.lang.String size
    How many available options should be displayed when this element is rendered?


    value

    java.lang.String value
    The value to compare with for marking an option selected.

    Class org.apache.struts.taglib.html.SubmitTag implements Serializable

    Serialized Fields

    property

    java.lang.String property
    The name of the generated input field.


    text

    java.lang.String text
    The body content of this tag (if any).


    value

    java.lang.String value
    The value of the button label.

    Class org.apache.struts.taglib.html.TextareaTag implements Serializable

    Serialized Fields

    name

    java.lang.String name
    The name of the bean containing our underlying property.

    Class org.apache.struts.taglib.html.TextTag implements Serializable

    Class org.apache.struts.taglib.html.XhtmlTag implements Serializable


    Package org.apache.struts.taglib.bean

    Class org.apache.struts.taglib.bean.CookieTag implements Serializable

    Serialized Fields

    id

    java.lang.String id
    The name of the scripting variable that will be exposed as a page scope attribute.


    multiple

    java.lang.String multiple
    Return an array of Cookies if multiple is non-null.


    name

    java.lang.String name
    The name of the cookie whose value is to be exposed.


    value

    java.lang.String value
    The default value to return if no cookie of the specified name is found.

    Class org.apache.struts.taglib.bean.DefineTag implements Serializable

    Serialized Fields

    body

    java.lang.String body
    The body content of this tag (if any).


    id

    java.lang.String id
    The name of the scripting variable that will be exposed as a page scope attribute.


    name

    java.lang.String name
    The name of the bean owning the property to be exposed.


    property

    java.lang.String property
    The name of the property to be retrieved.


    scope

    java.lang.String scope
    The scope within which to search for the specified bean.


    toScope

    java.lang.String toScope
    The scope within which the newly defined bean will be creatd.


    type

    java.lang.String type
    The fully qualified Java class name of the value to be exposed.


    value

    java.lang.String value
    The (String) value to which the defined bean will be set.

    Class org.apache.struts.taglib.bean.HeaderTag implements Serializable

    Serialized Fields

    id

    java.lang.String id
    The name of the scripting variable that will be exposed as a page scope attribute.


    multiple

    java.lang.String multiple
    Return an array of header values if multiple is non-null.


    name

    java.lang.String name
    The name of the header whose value is to be exposed.


    value

    java.lang.String value
    The default value to return if no header of the specified name is found.

    Class org.apache.struts.taglib.bean.IncludeTag implements Serializable

    Serialized Fields

    anchor

    java.lang.String anchor
    The anchor to be added to the end of the generated hyperlink.


    forward

    java.lang.String forward
    The name of the global ActionForward that contains a path to our requested resource.


    href

    java.lang.String href
    The absolute URL to the resource to be included.


    id

    java.lang.String id
    The name of the scripting variable that will be exposed as a page scope attribute.


    page

    java.lang.String page
    The context-relative URI of the page or servlet to be included.


    transaction

    boolean transaction
    Include transaction token (if any) in the hyperlink?

    Class org.apache.struts.taglib.bean.MessageTag implements Serializable

    Serialized Fields

    arg0

    java.lang.String arg0
    The first optional argument.


    arg1

    java.lang.String arg1
    The second optional argument.


    arg2

    java.lang.String arg2
    The third optional argument.


    arg3

    java.lang.String arg3
    The fourth optional argument.


    arg4

    java.lang.String arg4
    The fifth optional argument.


    bundle

    java.lang.String bundle
    The servlet context attribute key for our resources.


    key

    java.lang.String key
    The message key of the message to be retrieved.


    name

    java.lang.String name
    Name of the bean that contains the message key.


    property

    java.lang.String property
    Name of the property to be accessed on the specified bean.


    scope

    java.lang.String scope
    The scope to be searched to retrieve the specified bean.


    localeKey

    java.lang.String localeKey
    The session scope key under which our Locale is stored.

    Class org.apache.struts.taglib.bean.PageTag implements Serializable

    Serialized Fields

    id

    java.lang.String id
    The name of the scripting variable that will be exposed as a page scope attribute.


    property

    java.lang.String property
    The name of the page context property to be retrieved.

    Class org.apache.struts.taglib.bean.ParameterTag implements Serializable

    Serialized Fields

    id

    java.lang.String id
    The name of the scripting variable that will be exposed as a page scope attribute.


    multiple

    java.lang.String multiple
    Return an array of parameter values if multiple is non-null.


    name

    java.lang.String name
    The name of the parameter whose value is to be exposed.


    value

    java.lang.String value
    The default value to return if no parameter of the specified name is found.

    Class org.apache.struts.taglib.bean.ResourceTag implements Serializable

    Serialized Fields

    id

    java.lang.String id
    The name of the scripting variable that will be exposed as a page scope attribute.


    input

    java.lang.String input
    Return an InputStream to the specified resource if this is non-null.


    name

    java.lang.String name
    The module-relative URI of the resource whose contents are to be exposed.

    Class org.apache.struts.taglib.bean.SizeTag implements Serializable

    Serialized Fields

    collection

    java.lang.Object collection
    The actual collection to be counted.


    id

    java.lang.String id
    The name of the scripting variable that will be exposed as a page scope attribute.


    name

    java.lang.String name
    The name of the bean owning the property to be counted.


    property

    java.lang.String property
    The name of the property to be retrieved.


    scope

    java.lang.String scope
    The scope within which to search for the specified bean.

    Class org.apache.struts.taglib.bean.StrutsTag implements Serializable

    Serialized Fields

    id

    java.lang.String id
    The name of the scripting variable that will be exposed as a page scope attribute.


    formBean

    java.lang.String formBean
    The name of the ActionFormBean object to be exposed.


    forward

    java.lang.String forward
    The name of the ActionForward object to be exposed.


    mapping

    java.lang.String mapping
    The name of the ActionMapping object to be exposed.

    Class org.apache.struts.taglib.bean.WriteTag implements Serializable

    Serialized Fields

    filter

    boolean filter
    Filter the rendered output for characters that are sensitive in HTML?


    ignore

    boolean ignore
    Should we ignore missing beans and simply output nothing?


    name

    java.lang.String name
    Name of the bean that contains the data we will be rendering.


    property

    java.lang.String property
    Name of the property to be accessed on the specified bean.


    scope

    java.lang.String scope
    The scope to be searched to retrieve the specified bean.


    formatStr

    java.lang.String formatStr
    The format string to be used as format to convert value to String.


    formatKey

    java.lang.String formatKey
    The key to search format string in applciation resources


    localeKey

    java.lang.String localeKey
    The session scope key under which our Locale is stored.


    bundle

    java.lang.String bundle
    The servlet context attribute key for our resources.


    Package org.apache.struts.config

    Class org.apache.struts.config.ActionConfig implements Serializable

    Serialized Fields

    configured

    boolean configured
    Indicates if configuration of this component been completed.


    exceptions

    java.util.HashMap exceptions
    The set of exception handling configurations for this action, if any, keyed by the type property.


    forwards

    java.util.HashMap forwards
    The set of local forward configurations for this action, if any, keyed by the name property.


    moduleConfig

    ModuleConfig moduleConfig
    The module configuration with which we are associated.


    attribute

    java.lang.String attribute
    The request-scope or session-scope attribute name under which our form bean is accessed, if it is different from the form bean's specified name.


    forward

    java.lang.String forward
    Context-relative path of the web application resource that will process this request via RequestDispatcher.forward(), instead of instantiating and calling the Action class specified by "type". Exactly one of forward, include, or type must be specified.


    include

    java.lang.String include
    Context-relative path of the web application resource that will process this request via RequestDispatcher.include(), instead of instantiating and calling the Action class specified by "type". Exactly one of forward, include, or type must be specified.


    input

    java.lang.String input
    Context-relative path of the input form to which control should be returned if a validation error is encountered. Required if "name" is specified and the input bean returns validation errors.


    multipartClass

    java.lang.String multipartClass
    Fully qualified Java class name of the MultipartRequestHandler implementation class used to process multi-part request data for this Action.


    name

    java.lang.String name
    Name of the form bean, if any, associated with this Action.


    parameter

    java.lang.String parameter
    General purpose configuration parameter that can be used to pass extra information to the Action instance selected by this Action. Struts does not itself use this value in any way.


    path

    java.lang.String path
    Context-relative path of the submitted request, starting with a slash ("/") character, and omitting any filename extension if extension mapping is being used.


    prefix

    java.lang.String prefix
    Prefix used to match request parameter names to form bean property names, if any.


    roles

    java.lang.String roles
    Comma-delimited list of security role names allowed to request this Action.


    roleNames

    java.lang.String[] roleNames
    The set of security role names used to authorize access to this Action, as an array for faster access.


    scope

    java.lang.String scope
    Identifier of the scope ("request" or "session") within which our form bean is accessed, if any.


    suffix

    java.lang.String suffix
    Suffix used to match request parameter names to form bean property names, if any.


    type

    java.lang.String type
    Fully qualified Java class name of the Action class to be used to process requests for this mapping if the forward and include properties are not set. Exactly one of forward, include, or type must be specified.


    unknown

    boolean unknown
    Indicates Action be configured as the default one for this application, when true.


    validate

    boolean validate
    Should the validate() method of the form bean associated with this action be called?

    Class org.apache.struts.config.ApplicationConfig implements Serializable

    Class org.apache.struts.config.ControllerConfig implements Serializable

    Serialized Fields

    configured

    boolean configured
    Has this component been completely configured?


    bufferSize

    int bufferSize
    The input buffer size for file uploads.


    contentType

    java.lang.String contentType
    The content type and character encoding to be set on each response.


    debug

    int debug
    Deprecated. Configure the logging detail level in your underlying logging implemenation

    The debugging detail level that determines logging verbosity.


    forwardPattern

    java.lang.String forwardPattern

    The replacement pattern used to determine a context-relative URL from a ForwardConfig element. The pattern may consist of any combination of the following markers and characters:

    • $M - Replaced by the module prefix for the current module.
    • $P - Replaced by the path property of a ForwardConfig instance.
    • $$ - Renders a literal dollar sign ("$") character in the resulting URL.
    • A dollar sign followed by any other character is reserved for future use, and both characters are silently swallowed.
    • All other characters in the pattern are passed through unchanged.

    If this property is set to null, a default pattern of $M$P is utilized, which is backwards compatible with the hard coded functionality in prior versions.


    inputForward

    boolean inputForward

    Should the input property of ActionConfig instances associated with this module be treated as the name of a corresponding ForwardConfig. A false value treats them as a module-relative path (consistent with the hard coded behavior of earlier versions of Struts.

    Since:
    Struts 1.1

    locale

    boolean locale
    Should we store a Locale object in the user's session if needed?


    maxFileSize

    java.lang.String maxFileSize
    The maximum file size to process for file uploads.


    memFileSize

    java.lang.String memFileSize
    The maximum file size to retain in memory.


    multipartClass

    java.lang.String multipartClass
    The fully qualified Java class name of the MultipartRequestHandler class to be used.


    nocache

    boolean nocache
    Should we set no-cache HTTP headers on each response?


    pagePattern

    java.lang.String pagePattern

    The replacement pattern used to determine a context-relative URL from the page attribute of Struts tags and configuration properties. The pattern may consist of any combination of the following markers and characters:

    • $M - Replaced by the module prefix for the current module.
    • $P - Replaced by the page attribute value being evaluated.
    • $$ - Renders a literal dollar sign ("$") character in the resulting URL.
    • A dollar sign followed by any other character is reserved for future use, and both characters are silently swallowed.
    • All other characters in the pattern are passed through unchanged.

    If this property is set to null, a default pattern of $M$P is utilized, which is backwards compatible with the hard coded functionality in prior versions.


    processorClass

    java.lang.String processorClass
    The fully qualified class name of the RequestProcessor implementation class to be used for this module.


    tempDir

    java.lang.String tempDir
    The temporary working directory to use for file uploads.

    Class org.apache.struts.config.DataSourceConfig implements Serializable

    Serialized Fields

    configured

    boolean configured
    Has this component been completely configured?


    key

    java.lang.String key
    The servlet context attribute key under which this data source is stored and made available.


    properties

    java.util.HashMap properties
    The custom configuration properties for this data source implementation.


    type

    java.lang.String type
    The fully qualified class name of the javax.sql.DataSource implementation class.

    Class org.apache.struts.config.ExceptionConfig implements Serializable

    Serialized Fields

    configured

    boolean configured
    Has this component been completely configured?


    bundle

    java.lang.String bundle
    The servlet context attribute under which the message resources bundle to be used for this exception is located. If not set, the default message resources for the current module is assumed.


    handler

    java.lang.String handler
    The fully qualified Java class name of the exception handler class which should be instantiated to handle this exception.


    key

    java.lang.String key
    The message resources key specifying the error message associated with this exception.


    path

    java.lang.String path
    The module-relative path of the resource to forward to if this exception occurs during an Action.


    scope

    java.lang.String scope
    The scope in which we should expose the ActionError for this exception handler.


    type

    java.lang.String type
    The fully qualified Java class name of the exception that is to be handled by this handler.

    Class org.apache.struts.config.FormBeanConfig implements Serializable

    Serialized Fields

    configured

    boolean configured
    Has this component been completely configured?


    formProperties

    java.util.HashMap formProperties
    The set of FormProperty elements defining dynamic form properties for this form bean, keyed by property name.


    dynamic

    boolean dynamic
    Is the form bean class an instance of DynaActionForm with dynamic properties?


    moduleConfig

    ModuleConfig moduleConfig
    The ModuleConfig with which this form bean definition is associated.


    name

    java.lang.String name
    The unique identifier of this form bean, which is used to reference this bean in ActionMapping instances as well as for the name of the request or session attribute under which the corresponding form bean instance is created or accessed.


    type

    java.lang.String type
    The fully qualified Java class name of the implementation class to be used or generated.

    Class org.apache.struts.config.FormPropertyConfig implements Serializable

    Serialized Fields

    configured

    boolean configured
    Has this component been completely configured?


    initial

    java.lang.String initial
    String representation of the initial value for this property.


    name

    java.lang.String name
    The JavaBean property name of the property described by this element.


    size

    int size

    The size of the array to be created if this property is an array type and there is no specified initial value. This value must be non-negative.

    Since:
    Struts 1.1

    type

    java.lang.String type
    The fully qualified Java class name of the implementation class of this bean property, optionally followed by [] to indicate that the property is indexed.

    Class org.apache.struts.config.ForwardConfig implements Serializable

    Serialized Fields

    configured

    boolean configured
    Has this component been completely configured?


    contextRelative

    boolean contextRelative
    Should the value of the path property be considered context-relative if it starts with a slash (and therefore not prefixed with the module prefix?


    name

    java.lang.String name
    The unique identifier of this forward, which is used to reference it in Action classes.


    path

    java.lang.String path

    The URL to which this ForwardConfig entry points, which must start with a slash ("/") character. It is interpreted according to the following rules:

  • If contextRelative property is true, the path is considered to be context-relative within the current web application (even if we are in a named module). It will be prefixed by the context path to create a server-relative URL.
  • If the contextRelative property is false, the path is considered to be the module-relative portion of the URL. It will be used as the replacement for the $P marker in the forwardPattern property defined on the ControllerConfig element for our current module. For the default forwardPattern value of $C$M$P, the resulting server-relative URL will be the concatenation of the context path, the module prefix, and the path from this ForwardConfig.

  • redirect

    boolean redirect
    Should a redirect be used to transfer control to the specified path?

    Class org.apache.struts.config.MessageResourcesConfig implements Serializable

    Serialized Fields

    configured

    boolean configured
    Has this component been completely configured?


    factory

    java.lang.String factory
    Fully qualified Java class name of the MessageResourcesFactory class we should use.


    key

    java.lang.String key
    The servlet context attributes key under which this MessageResources instance is stored.


    nullValue

    boolean nullValue
    Should we return null for unknown message keys?


    parameter

    java.lang.String parameter
    Parameter that is passed to the createResources() method of our MessageResourcesFactory implementation.

    Class org.apache.struts.config.PlugInConfig implements Serializable

    Serialized Fields

    configured

    boolean configured
    Has this component been completely configured?


    properties

    java.util.Map properties
    A Map of the name-value pairs that will be used to configure the property values of a PlugIn instance.


    className

    java.lang.String className
    The fully qualified Java class name of the PlugIn implementation class being configured.


    Package org.apache.struts.config.impl

    Class org.apache.struts.config.impl.DefaultModuleConfigFactory implements Serializable

    Class org.apache.struts.config.impl.ModuleConfigImpl implements Serializable

    Serialized Fields

    actionConfigs

    java.util.HashMap actionConfigs
    The set of action configurations for this module, if any, keyed by the path property.


    dataSources

    java.util.HashMap dataSources
    The set of JDBC data source configurations for this module, if any, keyed by the key property.


    exceptions

    java.util.HashMap exceptions
    The set of exception handling configurations for this module, if any, keyed by the type property.


    formBeans

    java.util.HashMap formBeans
    The set of form bean configurations for this module, if any, keyed by the name property.


    forwards

    java.util.HashMap forwards
    The set of global forward configurations for this module, if any, keyed by the name property.


    messageResources

    java.util.HashMap messageResources
    The set of message resources configurations for this module, if any, keyed by the key property.


    plugIns

    java.util.ArrayList plugIns
    The set of configured plug-in Actions for this module, if any, in the order they were declared and configured.


    configured

    boolean configured
    Has this module been completely configured yet. Once this flag has been set, any attempt to modify the configuration will return an IllegalStateException.


    controllerConfig

    ControllerConfig controllerConfig
    The controller configuration object for this module.


    prefix

    java.lang.String prefix
    The prefix of the context-relative portion of the request URI, used to select this configuration versus others supported by the controller servlet. A configuration with a prefix of a zero-length String is the default configuration for this web module.


    actionMappingClass

    java.lang.String actionMappingClass
    The default class name to be used when creating action mapping instances.


    Package org.apache.struts.action

    Class org.apache.struts.action.ActionError implements Serializable

    Class org.apache.struts.action.ActionErrors implements Serializable

    Class org.apache.struts.action.ActionException implements Serializable

    Class org.apache.struts.action.ActionForm implements Serializable

    Class org.apache.struts.action.ActionFormBean implements Serializable

    Class org.apache.struts.action.ActionFormBeans implements Serializable

    Serialized Fields

    formBeans

    org.apache.commons.collections.FastHashMap formBeans
    Deprecated. 
    The collection of ActionFormBean instances, keyed by name.

    Class org.apache.struts.action.ActionForward implements Serializable

    Class org.apache.struts.action.ActionForwards implements Serializable

    Serialized Fields

    forwards

    org.apache.commons.collections.FastHashMap forwards
    Deprecated. 
    The collection of ActionForward instances, keyed by logical name.

    Class org.apache.struts.action.ActionMapping implements Serializable

    Class org.apache.struts.action.ActionMappings implements Serializable

    Serialized Fields

    mappings

    org.apache.commons.collections.FastHashMap mappings
    Deprecated. 
    The collection of ActionMapping instances, keyed by request path.


    unknown

    ActionMapping unknown
    Deprecated. 
    The ActionMapping that should handle unknown request paths, if any.

    Class org.apache.struts.action.ActionMessage implements Serializable

    Serialized Fields

    key

    java.lang.String key
    The message key for this message.


    values

    java.lang.Object[] values
    The replacement values for this mesasge.

    Class org.apache.struts.action.ActionMessages implements Serializable

    Serialized Fields

    messages

    java.util.HashMap messages
    The accumulated set of ActionMessage objects (represented as an ArrayList) for each property, keyed by property name.


    iCount

    int iCount
    The current number of the property/key being added. This is used to maintain the order messages are added.

    Class org.apache.struts.action.ActionMessages.ActionMessageItem implements Serializable

    Serialized Fields

    list

    java.util.List list
    The list of ActionMessages.


    iOrder

    int iOrder
    The position in the list of messages.

    Class org.apache.struts.action.ActionServlet implements Serializable

    Serialized Fields

    config

    java.lang.String config
    Comma-separated list of context-relative path(s) to our configuration resource(s) for the default module.


    configDigester

    org.apache.commons.digester.Digester configDigester
    The Digester used to produce ModuleConfig objects from a Struts configuration file.

    Since:
    Struts 1.1

    convertNull

    boolean convertNull
    The flag to request backwards-compatible conversions for form bean properties of the Java wrapper class types.

    Since:
    Struts 1.1

    dataSources

    org.apache.commons.collections.FastHashMap dataSources
    The JDBC data sources that has been configured for this module, if any, keyed by the servlet context attribute under which they are stored.


    debug

    int debug
    Deprecated.  

    The debugging detail level for this servlet.


    internal

    MessageResources internal
    The resources object for our internal resources.


    internalName

    java.lang.String internalName
    The Java base name of our internal resources.

    Since:
    Struts 1.1

    processor

    RequestProcessor processor
    The RequestProcessor instance we will use to process all incoming requests.

    Since:
    Struts 1.1

    registrations

    java.lang.String[] registrations
    The set of public identifiers, and corresponding resource names, for the versions of the configuration file DTDs that we know about. There MUST be an even number of Strings in this list!


    servletMapping

    java.lang.String servletMapping
    The URL pattern to which we are mapped in our web application deployment descriptor. FIXME - multiples???


    servletName

    java.lang.String servletName
    The servlet name under which we are registered in our web application deployment descriptor.

    Class org.apache.struts.action.DynaActionForm implements Serializable

    Serialized Fields

    dynaClass

    DynaActionFormClass dynaClass
    The DynaActionFormClass with which we are associated.


    dynaValues

    java.util.HashMap dynaValues
    The set of property values for this DynaActionForm, keyed by property name.

    Class org.apache.struts.action.DynaActionFormClass implements Serializable

    Serialized Fields

    config

    FormBeanConfig config
    The form bean configuration information for this class.


    name

    java.lang.String name
    The "dynamic class name" for this DynaClass.


    properties

    org.apache.commons.beanutils.DynaProperty[] properties
    The set of dynamic properties that are part of this DynaClass.


    propertiesMap

    java.util.HashMap propertiesMap
    The set of dynamic properties that are part of this DynaClass, keyed by the property name. Individual descriptor instances will be the same instances as those in the properties list.

    Class org.apache.struts.action.ForwardingActionForward implements Serializable

    Class org.apache.struts.action.RedirectingActionForward implements Serializable

    Class org.apache.struts.action.RequestActionMapping implements Serializable

    Class org.apache.struts.action.SessionActionMapping implements Serializable



    Copyright © 2000-2003 - Apache Software Foundation libstruts1.2-java-1.2.9/legacy/api-1.1/stylesheet.css0000644000175000017500000000246010404045204022674 0ustar arnaudarnaud00000000000000/* Javadoc style sheet */ /* Define colors, fonts and other style attributes here to override the defaults */ /* Page background color */ body { background-color: #FFFFFF } /* Table colors */ .TableHeadingColor { background: #CCCCFF } /* Dark mauve */ .TableSubHeadingColor { background: #EEEEFF } /* Light mauve */ .TableRowColor { background: #FFFFFF } /* White */ /* Font used in left-hand frame lists */ .FrameTitleFont { font-size: 10pts; font-family: Helvetica, Arial, san-serif } .FrameHeadingFont { font-size: 10pts; font-family: Helvetica, Arial, san-serif } .FrameItemFont { font-size: 10pts; font-family: Helvetica, Arial, san-serif } /* Example of smaller, sans-serif font in frames */ /* .FrameItemFont { font-size: 10pt; font-family: Helvetica, Arial, sans-serif } */ /* Navigation bar fonts and colors */ .NavBarCell1 { background-color:#EEEEFF;}/* Light mauve */ .NavBarCell1Rev { background-color:#00008B;}/* Dark Blue */ .NavBarFont1 { font-family: Arial, Helvetica, sans-serif; color:#000000;} .NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;} .NavBarCell2 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;} .NavBarCell3 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;} libstruts1.2-java-1.2.9/src/0000755000175000017500000000000010404045172016250 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/src/example/0000755000175000017500000000000010404045174017705 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/src/example/org/0000755000175000017500000000000010404045174020474 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/src/example/org/apache/0000755000175000017500000000000010404045174021715 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/src/example/org/apache/struts/0000755000175000017500000000000010404045174023261 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/0000755000175000017500000000000010404045174024537 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/0000755000175000017500000000000010423130301026156 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/memory/0000755000175000017500000000000010423130301027466 5ustar arnaudarnaud00000000000000././@LongLink0000644000175000017500000000014610423140533011320 Lustar 00000000000000libstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/memory/MemoryDatabasePlugIn.javalibstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/memory/MemoryDatabasePlugIn.jav0000644000175000017500000001542710404045244034227 0ustar arnaudarnaud00000000000000/* * $Id: MemoryDatabasePlugIn.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 2000-2004 Apache Software Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example.memory; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import javax.servlet.ServletException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.action.ActionServlet; import org.apache.struts.action.PlugIn; import org.apache.struts.config.ModuleConfig; import org.apache.struts.webapp.example.Constants; /** *

    MemoryDatabasePlugIn initializes and finalizes the * persistent storage of User and Subscription information for the Struts * Demonstration Application, using an in-memory database backed by an * XML file.

    * *

    IMPLEMENTATION WARNING - If this web application is run * from a WAR file, or in another environment where reading and writing of the * web application resource is impossible, the initial contents will be copied * to a file in the web application temporary directory provided by the * container. This is for demonstration purposes only - you should * NOT assume that files written here will survive a restart * of your servlet container.

    * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public final class MemoryDatabasePlugIn implements PlugIn { // ----------------------------------------------------- Instance Variables /** * The {@link MemoryUserDatabase} object we construct and make available. */ private MemoryUserDatabase database = null; /** * Logging output for this plug in instance. */ private Log log = LogFactory.getLog(this.getClass()); /** * The {@link ActionServlet} owning this application. */ private ActionServlet servlet = null; // ------------------------------------------------------------- Properties /** * The web application resource path of our persistent database * storage file. */ private String pathname = "/WEB-INF/database.xml"; public String getPathname() { return (this.pathname); } public void setPathname(String pathname) { this.pathname = pathname; } // --------------------------------------------------------- PlugIn Methods /** * Gracefully shut down this database, releasing any resources * that were allocated at initialization. */ public void destroy() { log.info("Finalizing memory database plug in"); if (database != null) { try { database.close(); } catch (Exception e) { log.error("Closing memory database", e); } } servlet.getServletContext().removeAttribute(Constants.DATABASE_KEY); database = null; servlet = null; database = null; } /** * Initialize and load our initial database from persistent storage. * * @param servlet The ActionServlet for this web application * @param config The ApplicationConfig for our owning module * * @exception ServletException if we cannot configure ourselves correctly */ public void init(ActionServlet servlet, ModuleConfig config) throws ServletException { log.info("Initializing memory database plug in from '" + pathname + "'"); // Remember our associated configuration and servlet this.servlet = servlet; // Construct a new database and make it available database = new MemoryUserDatabase(); try { String path = calculatePath(); if (log.isDebugEnabled()) { log.debug(" Loading database from '" + path + "'"); } database.setPathname(path); database.open(); } catch (Exception e) { log.error("Opening memory database", e); throw new ServletException("Cannot load database from '" + pathname + "'", e); } // Make the initialized database available servlet.getServletContext().setAttribute(Constants.DATABASE_KEY, database); } // --------------------------------------------------------- Public Methods // ------------------------------------------------------ Protected Methods // -------------------------------------------------------- Private Methods /** * Calculate and return an absolute pathname to the XML file to contain * our persistent storage information. * * @exception Exception if an input/output error occurs */ private String calculatePath() throws Exception { // Can we access the database via file I/O? String path = servlet.getServletContext().getRealPath(pathname); if (path != null) { return (path); } // Does a copy of this file already exist in our temporary directory File dir = (File) servlet.getServletContext().getAttribute ("javax.servlet.context.tempdir"); File file = new File(dir, "struts-example-database.xml"); if (file.exists()) { return (file.getAbsolutePath()); } // Copy the static resource to a temporary file and return its path InputStream is = servlet.getServletContext().getResourceAsStream(pathname); BufferedInputStream bis = new BufferedInputStream(is, 1024); FileOutputStream os = new FileOutputStream(file); BufferedOutputStream bos = new BufferedOutputStream(os, 1024); byte buffer[] = new byte[1024]; while (true) { int n = bis.read(buffer); if (n <= 0) { break; } bos.write(buffer, 0, n); } bos.close(); bis.close(); return (file.getAbsolutePath()); } } libstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/memory/MemorySubscription.java0000644000175000017500000001032210404045244034216 0ustar arnaudarnaud00000000000000/* * $Id: MemorySubscription.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example.memory; import org.apache.struts.webapp.example.Subscription; import org.apache.struts.webapp.example.User; /** *

    Concrete implementation of {@link Subscription} for an in-memory * database backed by an XML data file.

    * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ * @since Struts 1.1 */ public final class MemorySubscription implements Subscription { // ----------------------------------------------------------- Constructors /** *

    Construct a new Subscription associated with the specified * {@link User}. * * @param user The user with which we are associated * @param host The mail host for this subscription */ public MemorySubscription(MemoryUser user, String host) { super(); this.user = user; this.host = host; } // ----------------------------------------------------- Instance Variables /** * The mail host for this subscription. */ private String host = null; /** * The {@link User} with which we are associated. */ private MemoryUser user = null; // ------------------------------------------------------------- Properties /** * Should we auto-connect at startup time? */ private boolean autoConnect = false; public boolean getAutoConnect() { return (this.autoConnect); } public void setAutoConnect(boolean autoConnect) { this.autoConnect = autoConnect; } /** * The mail host for this subscription. */ public String getHost() { return (this.host); } /** * The password (in clear text) for this subscription. */ private String password = null; public String getPassword() { return (this.password); } public void setPassword(String password) { this.password = password; } /** * The subscription type ("imap" or "pop3"). */ private String type = "imap"; public String getType() { return (this.type); } public void setType(String type) { this.type = type; } /** * The User owning this Subscription. */ public User getUser() { return (this.user); } /** * The username for this subscription. */ private String username = null; public String getUsername() { return (this.username); } public void setUsername(String username) { this.username = username; } // --------------------------------------------------------- Public Methods /** * Return a String representation of this object. */ public String toString() { StringBuffer sb = new StringBuffer(""); return (sb.toString()); } } libstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/memory/MemoryUser.java0000644000175000017500000001607510404045212032456 0ustar arnaudarnaud00000000000000/* * $Id: MemoryUser.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example.memory; import java.util.HashMap; import org.apache.struts.webapp.example.Subscription; import org.apache.struts.webapp.example.User; import org.apache.struts.webapp.example.UserDatabase; /** *

    Concrete implementation of {@link User} for an in-memory * database backed by an XML data file.

    * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ * @since Struts 1.1 */ public final class MemoryUser implements User { // ----------------------------------------------------------- Constructors /** *

    Construct a new User associated with the specified * {@link UserDatabase}. * * @param database The user database with which we are associated * @param username The username of this user */ public MemoryUser(MemoryUserDatabase database, String username) { super(); this.database = database; this.username = username; } // ----------------------------------------------------- Instance Variables /** * The {@link UserDatabase} with which we are associated. */ private MemoryUserDatabase database = null; /** * The {@link Subscription}s for this User, keyed by hostname. */ private HashMap subscriptions = new HashMap(); /** * The username for this user. */ private String username = null; // ------------------------------------------------------------- Properties /** * The {@link UserDatabase} with which we are associated. */ public UserDatabase getDatabase() { return (this.database); } /** * The email address from which messages are sent. */ private String fromAddress = null; public String getFromAddress() { return (this.fromAddress); } public void setFromAddress(String fromAddress) { this.fromAddress = fromAddress; } /** * The full name of this user, included in from addresses. */ private String fullName = null; public String getFullName() { return (this.fullName); } public void setFullName(String fullName) { this.fullName = fullName; } /** * The password (in clear text). */ private String password = null; public String getPassword() { return (this.password); } public void setPassword(String password) { this.password = password; } /** * The EMAIL address to which replies should be sent. */ private String replyToAddress = null; public String getReplyToAddress() { return (this.replyToAddress); } public void setReplyToAddress(String replyToAddress) { this.replyToAddress = replyToAddress; } /** * Find and return all {@link Subscription}s associated with this user. * If there are none, a zero-length array is returned. */ public Subscription[] getSubscriptions() { synchronized (subscriptions) { Subscription results[] = new Subscription[subscriptions.size()]; return ((Subscription[]) subscriptions.values().toArray(results)); } } /** * The username (must be unique). */ public String getUsername() { return (this.username); } // --------------------------------------------------------- Public Methods /** * Create and return a new {@link Subscription} associated with this * User, for the specified host name. * * @param host Host name for which to create a subscription * * @exception IllegalArgumentException if the host name is not unique * for this user */ public Subscription createSubscription(String host) { synchronized (subscriptions) { if (subscriptions.get(host) != null) { throw new IllegalArgumentException("Duplicate host '" + host + "' for user '" + username + "'"); } MemorySubscription subscription = new MemorySubscription(this, host); synchronized (subscriptions) { subscriptions.put(host, subscription); } return (subscription); } } /** * Find and return the {@link Subscription} associated with the specified * host. If none is found, return null. * * @param host Host name to look up */ public Subscription findSubscription(String host) { synchronized (subscriptions) { return ((Subscription) subscriptions.get(host)); } } /** * Remove the specified {@link Subscription} from being associated * with this User. * * @param subscription Subscription to be removed * * @exception IllegalArgumentException if the specified subscription is not * associated with this User */ public void removeSubscription(Subscription subscription) { if (!(this == subscription.getUser())) { throw new IllegalArgumentException ("Subscription not associated with this user"); } synchronized (subscriptions) { subscriptions.remove(subscription.getHost()); } } /** * Return a String representation of this object. */ public String toString() { StringBuffer sb = new StringBuffer(""); return (sb.toString()); } } libstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/memory/MemoryUserDatabase.java0000644000175000017500000002542310404045226034105 0ustar arnaudarnaud00000000000000/* * $Id: MemoryUserDatabase.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 2000-2004 Apache Software Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example.memory; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.util.HashMap; import org.apache.commons.digester.Digester; import org.apache.commons.digester.ObjectCreationFactory; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.webapp.example.Subscription; import org.apache.struts.webapp.example.User; import org.apache.struts.webapp.example.UserDatabase; import org.apache.struts.webapp.example.ExpiredPasswordException; import org.xml.sax.Attributes; /** *

    Concrete implementation of {@link UserDatabase} for an in-memory * database backed by an XML data file.

    * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ * @since Struts 1.1 */ public class MemoryUserDatabase implements UserDatabase { // ----------------------------------------------------------- Constructors // ----------------------------------------------------- Instance Variables /** * Logging output for this user database instance. */ private Log log = LogFactory.getLog(this.getClass()); /** * The {@link User}s associated with this UserDatabase, keyed by username. */ private HashMap users = new HashMap(); // ------------------------------------------------------------- Properties /** * Absolute pathname to the persistent file we use for loading and storing * persistent data. */ private String pathname = null; private String pathnameOld = null; private String pathnameNew = null; public String getPathname() { return (this.pathname); } public void setPathname(String pathname) { this.pathname = pathname; pathnameOld = pathname + ".old"; pathnameNew = pathname + ".new"; } // --------------------------------------------------------- Public Methods // See interface for Javadoc public void close() throws Exception { save(); } // See interface for Javadoc public User createUser(String username) { synchronized (users) { if (users.get(username) != null) { throw new IllegalArgumentException("Duplicate user '" + username + "'"); } if (log.isTraceEnabled()) { log.trace("Creating user '" + username + "'"); } MemoryUser user = new MemoryUser(this, username); synchronized (users) { users.put(username, user); } return (user); } } // See interface for Javadoc public User findUser(String username) throws ExpiredPasswordException { synchronized (users) { return ((User) users.get(username)); } } // See interface for Javadoc public User[] findUsers() { synchronized (users) { User results[] = new User[users.size()]; return ((User[]) users.values().toArray(results)); } } // See interface for Javadoc public void open() throws Exception { FileInputStream fis = null; BufferedInputStream bis = null; try { // Acquire an input stream to our database file if (log.isDebugEnabled()) { log.debug("Loading database from '" + pathname + "'"); } fis = new FileInputStream(pathname); bis = new BufferedInputStream(fis); // Construct a digester to use for parsing Digester digester = new Digester(); digester.push(this); digester.setValidating(false); digester.addFactoryCreate ("database/user", new MemoryUserCreationFactory(this)); digester.addFactoryCreate ("database/user/subscription", new MemorySubscriptionCreationFactory()); // Parse the input stream to initialize our database digester.parse(bis); bis.close(); bis = null; fis = null; } catch (Exception e) { log.error("Loading database from '" + pathname + "':", e); throw e; } finally { if (bis != null) { try { bis.close(); } catch (Throwable t) { ; } bis = null; fis = null; } } } // See interface for Javadoc public void removeUser(User user) { if (!(this == user.getDatabase())) { throw new IllegalArgumentException ("User not associated with this database"); } if (log.isTraceEnabled()) { log.trace("Removing user '" + user.getUsername() + "'"); } synchronized (users) { users.remove(user.getUsername()); } } // See interface for Javadoc public void save() throws Exception { if (log.isDebugEnabled()) { log.debug("Saving database to '" + pathname + "'"); } File fileNew = new File(pathnameNew); PrintWriter writer = null; try { // Configure our PrintWriter FileOutputStream fos = new FileOutputStream(fileNew); OutputStreamWriter osw = new OutputStreamWriter(fos); writer = new PrintWriter(osw); // Print the file prolog writer.println(""); writer.println(""); // Print entries for each defined user and associated subscriptions User users[] = findUsers(); for (int i = 0; i < users.length; i++) { writer.print(" "); writer.println(users[i]); Subscription subscriptions[] = users[i].getSubscriptions(); for (int j = 0; j < subscriptions.length; j++) { writer.print(" "); writer.println(subscriptions[j]); writer.print(" "); writer.println(""); } writer.print(" "); writer.println(""); } // Print the file epilog writer.println(""); // Check for errors that occurred while printing if (writer.checkError()) { writer.close(); fileNew.delete(); throw new IOException ("Saving database to '" + pathname + "'"); } writer.close(); writer = null; } catch (IOException e) { if (writer != null) { writer.close(); } fileNew.delete(); throw e; } // Perform the required renames to permanently save this file File fileOrig = new File(pathname); File fileOld = new File(pathnameOld); if (fileOrig.exists()) { fileOld.delete(); if (!fileOrig.renameTo(fileOld)) { throw new IOException ("Renaming '" + pathname + "' to '" + pathnameOld + "'"); } } if (!fileNew.renameTo(fileOrig)) { if (fileOld.exists()) { fileOld.renameTo(fileOrig); } throw new IOException ("Renaming '" + pathnameNew + "' to '" + pathname + "'"); } fileOld.delete(); } } /** * Digester object creation factory for subscription instances. */ class MemorySubscriptionCreationFactory implements ObjectCreationFactory { private Digester digester = null; public Digester getDigester() { return (this.digester); } public void setDigester(Digester digester) { this.digester = digester; } public Object createObject(Attributes attributes) { String host = attributes.getValue("host"); User user = (User) digester.peek(); Subscription subscription = user.createSubscription(host); String autoConnect = attributes.getValue("autoConnect"); if (autoConnect == null) { autoConnect = "false"; } if ("true".equalsIgnoreCase(autoConnect) || "yes".equalsIgnoreCase(autoConnect)) { subscription.setAutoConnect(true); } else { subscription.setAutoConnect(false); } subscription.setPassword(attributes.getValue("password")); subscription.setType(attributes.getValue("type")); subscription.setUsername(attributes.getValue("username")); return (subscription); } } /** * Digester object creation factory for user instances. */ class MemoryUserCreationFactory implements ObjectCreationFactory { public MemoryUserCreationFactory(MemoryUserDatabase database) { this.database = database; } private MemoryUserDatabase database = null; private Digester digester = null; public Digester getDigester() { return (this.digester); } public void setDigester(Digester digester) { this.digester = digester; } public Object createObject(Attributes attributes) { String username = attributes.getValue("username"); User user = database.createUser(username); user.setFromAddress(attributes.getValue("fromAddress")); user.setFullName(attributes.getValue("fullName")); user.setPassword(attributes.getValue("password")); user.setReplyToAddress(attributes.getValue("replyToAddress")); return (user); } } libstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/memory/TestUserDatabase.java0000644000175000017500000000315510404045232033547 0ustar arnaudarnaud00000000000000/* * Copyright 1999-2002,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example.memory; import org.apache.struts.webapp.example.User; import org.apache.struts.webapp.example.ExpiredPasswordException; /** *

    Help test exception handling by throwing exceptions when "magic" user names are requested.

    */ public final class TestUserDatabase extends MemoryUserDatabase { /** * If the username is "expired" throw an ExpiredPasswordException * to simulate a business exception. * If the username is "arithmetic" throw an Aritmetic exception to * simulate a system exception. * Otherwise, delegate to MemoryDatabase. * @param username * @return */ public User findUser(String username) throws ExpiredPasswordException { if ("expired".equals(username)) throw new ExpiredPasswordException("Testing ExpiredPasswordException ..."); if ("arithmetic".equals(username)) throw new ArithmeticException(); return super.findUser(username); } } ././@LongLink0000644000175000017500000000015610423140533011321 Lustar 00000000000000libstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/AlternateApplicationResources.propertieslibstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/AlternateApplicationResources.p0000644000175000017500000000016510404045242034347 0ustar arnaudarnaud00000000000000prompt.password=Enter your Password here ==> struts.logo.path=/struts-power.gif struts.logo.alt=Powered by Struts ././@LongLink0000644000175000017500000000016110423140533011315 Lustar 00000000000000libstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/AlternateApplicationResources_ja.propertieslibstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/AlternateApplicationResources_j0000644000175000017500000000010510404045244034416 0ustar arnaudarnaud00000000000000prompt.password=\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5165\u529b==> libstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/ApplicationMapping.java0000644000175000017500000000502610404045216032614 0ustar arnaudarnaud00000000000000/* * $Id: ApplicationMapping.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example; import org.apache.struts.action.ActionMapping; /** * Implementation of ActionMapping for the Struts * example application. It defines the following custom properties: *
      *
    • failure - The context-relative URI to which this request * should be forwarded if a validation error occurs on the input * information (typically goes back to the input form). *
    • success - The context-relative URI to which this request * should be forwarded if the requested action is successfully * completed. *
    * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public final class ApplicationMapping extends ActionMapping { // --------------------------------------------------- Instance Variables /** * The failure URI for this mapping. */ private String failure = null; /** * The success URI for this mapping. */ private String success = null; // ----------------------------------------------------------- Properties /** * Return the failure URI for this mapping. */ public String getFailure() { return (this.failure); } /** * Set the failure URI for this mapping. * * @param failure The failure URI for this mapping */ public void setFailure(String failure) { this.failure = failure; } /** * Return the success URI for this mapping. */ public String getSuccess() { return (this.success); } /** * Set the success URI for this mapping. * * @param success The success URI for this mapping */ public void setSuccess(String success) { this.success = success; } } ././@LongLink0000644000175000017500000000014510423140533011317 Lustar 00000000000000libstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/ApplicationResources.propertieslibstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/ApplicationResources.properties0000644000175000017500000001001210404045250034433 0ustar arnaudarnaud00000000000000button.cancel=Cancel button.confirm=Confirm button.reset=Reset button.save=Save change.message=Your password has expired. Please ask the system administrator to change it. change.try=Try Again change.title=Password Has Expired database.load=Cannot load database from {0} error.database.missing=User database is missing, cannot validate logon credentials error.fromAddress.format=Invalid format for From Address error.fromAddress.required=From Address is required error.fullName.required=Full Name is required error.host.required=Mail Server is required error.noSubscription=No Subscription bean in user session error.password.expired=Your password has expired for username {0} error.password.required=Password is required error.password2.required=Confirmation password is required error.password.match=Password and confirmation password must match error.password.mismatch=Invalid username and/or password, please try again error.replyToAddress.format=Invalid format for Reply To Address error.transaction.token=Cannot submit this form out of order error.type.invalid=Server Type must be 'imap' or 'pop3' error.type.required=Server Type is required error.username.required=Username is required error.username.unique=That username is already in use - please select another errors.footer=
    errors.header=

    Validation Error

    You must correct the following error(s) before proceeding:

      errors.prefix=
    • errors.suffix=
    • errors.ioException=I/O exception rendering error messages: {0} expired.password=User Password has expired for {0} heading.autoConnect=Auto heading.subscriptions=Current Subscriptions heading.host=Host Name heading.user=User Name heading.type=Server Type heading.action=Action index.heading=MailReader Demonstration Application Options index.logon=Log on to the MailReader Demonstration Application index.registration=Register with the MailReader Demonstration Application index.title=MailReader Demonstration Application (Struts 1.2.1-dev) index.tour=A Walking Tour of the MailReader Demonstration Application linkSubscription.io=I/O Error: {0} linkSubscription.noSubscription=No subscription under attribute {0} linkUser.io=I/O Error: {0} linkUser.noUser=No user under attribute {0} logon.title=MailReader Demonstration Application - Logon mainMenu.heading=Main Menu Options for mainMenu.logoff=Log off MailReader Demonstration Application mainMenu.registration=Edit your user registration profile mainMenu.title=MailReader Demonstration Application - Main Menu option.imap=IMAP Protocol option.pop3=POP3 Protocol prompt.autoConnect=Auto Connect prompt.fromAddress=From Address prompt.fullName=Full Name prompt.mailHostname=Mail Server prompt.mailPassword=Mail Password prompt.mailServerType=Server Type prompt.mailUsername=Mail Username prompt.password=Password prompt.password2=(Repeat) Password prompt.replyToAddress=Reply To Address prompt.username=Username registration.addSubscription=Add registration.deleteSubscription=Delete registration.editSubscription=Edit registration.title.create=Register for the MailReader Demonstration Application registration.title.edit=Edit Registration for the MailReader Demonstration Application subscription.title.create=Create New Mail Subscription subscription.title.delete=Delete Existing Mail Subscription subscription.title.edit=Edit Existing Mail Subscription # Standard error messages for validator framework checks errors.required={0} is required. errors.minlength={0} cannot be less than {1} characters. errors.maxlength={0} cannot be greater than {2} characters. errors.invalid={0} is invalid. errors.byte={0} must be an byte. errors.short={0} must be an short. errors.integer={0} must be an integer. errors.long={0} must be an long. errors.float={0} must be an float. errors.double={0} must be an double. errors.date={0} is not a date. errors.range={0} is not in the range {1} through {2}. errors.creditcard={0} is not a valid credit card number. errors.email={0} is an invalid e-mail address. ././@LongLink0000644000175000017500000000015010423140533011313 Lustar 00000000000000libstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/ApplicationResources_ja.propertieslibstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/ApplicationResources_ja.propert0000644000175000017500000001776110404045234034430 0ustar arnaudarnaud00000000000000button.cancel=\u30ad\u30e3\u30f3\u30bb\u30eb button.confirm=\u78ba\u8a8d button.reset=\u30ea\u30bb\u30c3\u30c8 button.save=\u4fdd\u5b58 change.message=\u30D1\u30B9\u30EF\u30FC\u30C9\u306E\u6709\u52B9\u671F\u9650\u304C\u904E\u304E\u307E\u3057\u305F\u3002\u30B7\u30B9\u30C6\u30E0\u7BA1\u7406\u8005\u306B\u304A\u554F\u3044\u5408\u308F\u305B\u4E0B\u3055\u3044 change.try=\u518D\u8A66\u884C change.title=\u30d1\u30b9\u30ef\u30fc\u30c9\u671f\u9650\u5207\u308c database.load= {0} \u304B\u3089\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u3092\u30ED\u30FC\u30C9\u3067\u304D\u307E\u305B\u3093 error.database.missing=\u30E6\u30FC\u30B6\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002\u30ED\u30B0\u30AA\u30F3\u306E\u8A8D\u8A3C\u304C\u51FA\u6765\u307E\u305B\u3093 error.fromAddress.format=From\u30A2\u30C9\u30EC\u30B9\u306E\u66F8\u5F0F\u304C\u6B63\u3057\u304F\u3042\u308A\u307E\u305B\u3093 error.fromAddress.required=From\u30A2\u30C9\u30EC\u30B9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044 error.fullName.required=\u30D5\u30EB\u30CD\u30FC\u30E0\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044 error.host.required=\u30E1\u30FC\u30EB\u30B5\u30FC\u30D0\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044 error.noSubscription=Subscription bean \u304c\u30bb\u30c3\u30b7\u30e7\u30f3\u306e\u4e2d\u306b\u3042\u308a\u307e\u305b\u3093 error.password.expired=\u30E6\u30FC\u30B6 {0} \u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u306E\u6709\u52B9\u671F\u9650\u304C\u904E\u304E\u307E\u3057\u305F error.password.required=\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u5FC5\u8981\u3067\u3059 error.password2.required=\u30D1\u30B9\u30EF\u30FC\u30C9(\u78BA\u8A8D\u7528)\u304C\u5FC5\u8981\u3067\u3059 error.password.match=\u30D1\u30B9\u30EF\u30FC\u30C9\u3068\u78BA\u8A8D\u7528\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u4E00\u81F4\u3057\u3066\u3044\u307E\u305B\u3093 error.password.mismatch=\u30E6\u30FC\u30B6\u540D\u307E\u305F\u306F\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u4E0D\u6B63\u3067\u3059\u3002\u518D\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044 error.replyToAddress.format=\u8FD4\u4FE1\u30A2\u30C9\u30EC\u30B9\u306E\u66F8\u5F0F\u304C\u6B63\u3057\u304F\u3042\u308A\u307E\u305B\u3093 error.transaction.token=\u3053\u306E\u30D5\u30A9\u30FC\u30E0\u306E\u5185\u5BB9\u304C\u6B63\u3057\u304F\u306A\u3044\u305F\u3081\u9001\u4FE1\u3059\u308B\u3053\u3068\u304C\u51FA\u6765\u307E\u305B\u3093 error.type.invalid=\u30B5\u30FC\u30D0\u30BF\u30A4\u30D7\u306F 'imap' \u304B 'pop3'\u306E\u3069\u3061\u3089\u304B\u3067\u306A\u3051\u308C\u3070\u306A\u308A\u307E\u305B\u3093 error.type.required=\u30B5\u30FC\u30D0\u30BF\u30A4\u30D7\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044 error.username.required=\u30E6\u30FC\u30B6\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044 error.username.unique=\u305D\u306E\u30E6\u30FC\u30B6\u540D\u306F\u65E2\u306B\u4F7F\u7528\u3055\u308C\u3066\u3044\u307E\u3059\u3002 \u5225\u306E\u30E6\u30FC\u30B6\u540D\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044 errors.footer=

    errors.header=

    \u5165\u529b\u30c1\u30a7\u30c3\u30af\u30a8\u30e9\u30fc

    \u4ee5\u4e0b\u306e\u30a8\u30e9\u30fc\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044:

      errors.prefix=
    • errors.suffix=
    • errors.ioException=I/O\u4f8b\u5916\u304c\u767a\u751f\u3057\u307e\u3057\u305f: {0} expired.password=\u30E6\u30FC\u30B6 {0} \u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u306E\u6709\u52B9\u671F\u9650\u304C\u904E\u304E\u307E\u3057\u305F heading.autoConnect=\u81ea\u52d5\u63a5\u7d9a heading.subscriptions=\u73fe\u5728\u306e\u8cfc\u8aad\u60c5\u5831 heading.host=\u30db\u30b9\u30c8\u540d heading.user=\u30e6\u30fc\u30b6\u540d heading.type=\u30b5\u30fc\u30d0\u30bf\u30a4\u30d7 heading.action=\u64cd\u4f5c index.heading=MailReader\u30c7\u30e2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3 \u30aa\u30d7\u30b7\u30e7\u30f3 index.logon=MailReader\u30c7\u30e2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3 - \u30ed\u30b0\u30aa\u30f3 index.registration=MailReader\u30c7\u30e2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3 - \u30e6\u30fc\u30b6\u767b\u9332 index.title=MailReader\u30c7\u30e2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3(Struts 1.1-dev) index.tour=\u30b5\u30f3\u30d7\u30eb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u6563\u7b56\u3059\u308b linkSubscription.io=I/O\u30a8\u30e9\u30fc: {0} linkSubscription.noSubscription=\u5c5e\u6027 {0} \u306b\u8cfc\u8aad\u60c5\u5831\u304c\u5b58\u5728\u3057\u307e\u305b\u3093 linkUser.io=I/O\u30a8\u30e9\u30fc: {0} linkUser.noUser=\u5c5e\u6027 {0} \u306b\u30e6\u30fc\u30b6\u60c5\u5831\u304c\u5b58\u5728\u3057\u307e\u305b\u3093 logon.title=MailReader\u30c7\u30e2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3 - \u30ed\u30b0\u30aa\u30f3 mainMenu.heading=\u30e1\u30a4\u30f3\u30e1\u30cb\u30e5\u30fc mainMenu.logoff=MailReader \u30c7\u30e2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30ed\u30b0\u30aa\u30d5 mainMenu.registration=\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u306e\u7de8\u96c6 mainMenu.title=MailReader\u30c7\u30e2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3 - \u30e1\u30a4\u30f3\u30e1\u30cb\u30e5\u30fc option.imap=IMAP \u30d7\u30ed\u30c8\u30b3\u30eb option.pop3=POP3 \u30d7\u30ed\u30c8\u30b3\u30eb prompt.autoConnect=\u81ea\u52d5\u63a5\u7d9a prompt.fromAddress=From\u30a2\u30c9\u30ec\u30b9 prompt.fullName=\u30d5\u30eb\u30cd\u30fc\u30e0 prompt.mailHostname=\u30e1\u30fc\u30eb\u30b5\u30fc\u30d0 prompt.mailPassword=\u30e1\u30fc\u30eb\u30d1\u30b9\u30ef\u30fc\u30c9 prompt.mailServerType=\u30b5\u30fc\u30d0\u30bf\u30a4\u30d7 prompt.mailUsername=\u30e1\u30fc\u30eb\u30e6\u30fc\u30b6\u540d prompt.password=\u30d1\u30b9\u30ef\u30fc\u30c9 prompt.password2=\u30d1\u30b9\u30ef\u30fc\u30c9(\u78ba\u8a8d\u7528) prompt.replyToAddress=\u8fd4\u4fe1\u30a2\u30c9\u30ec\u30b9 prompt.username=\u30e6\u30fc\u30b6\u540d registration.addSubscription=\u65b0\u898f\u4f5c\u6210 registration.deleteSubscription=\u524a\u9664 registration.editSubscription=\u7de8\u96c6 registration.title.create=MailReader\u30c7\u30e2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3 - \u30e6\u30fc\u30b6\u767b\u9332 registration.title.edit=MailReader\u30c7\u30e2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3 - \u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u7de8\u96c6 subscription.title.create=\u30e1\u30fc\u30eb\u8cfc\u8aad\u60c5\u5831\u306e\u65b0\u898f\u4f5c\u6210 subscription.title.delete=\u30e1\u30fc\u30eb\u8cfc\u8aad\u60c5\u5831\u306e\u524a\u9664 subscription.title.edit=\u30e1\u30fc\u30eb\u8cfc\u8aad\u60c5\u5831\u306e\u7de8\u96c6 # Standard error messages for validator framework checks errors.required={0} \u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 errors.minlength={0} \u306f {1} \u6587\u5b57\u4ee5\u4e0a\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 errors.maxlength={0} \u306f {2} \u6587\u5b57\u4ee5\u4e0b\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 errors.invalid={0} \u306f\u6b63\u3057\u304f\u3042\u308a\u307e\u305b\u3093\u3002 errors.byte={0} \u306fbyte\u578b\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 errors.short={0} \u306fshort\u578b\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 errors.integer={0} \u306finteger\u578b\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 errors.long={0} \u306flong\u578b\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 errors.float={0} \u306ffloat\u578b\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 errors.double={0} \u306fdouble\u578b\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 errors.date={0} \u306f\u65e5\u4ed8\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 errors.range={0} \u306f {1} \u304b\u3089 {2} \u306e\u9593\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 errors.creditcard={0} \u306f\u6b63\u3057\u3044\u30af\u30ec\u30b8\u30c3\u30c8\u30ab\u30fc\u30c9\u756a\u53f7\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 errors.email={0} \u306f\u6b63\u3057\u3044\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 ././@LongLink0000644000175000017500000000015010423140533011313 Lustar 00000000000000libstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/ApplicationResources_ru.propertieslibstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/ApplicationResources_ru.propert0000644000175000017500000003125410404045236034457 0ustar arnaudarnaud00000000000000button.cancel=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c button.confirm=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c button.reset=\u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c button.save=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c change.message=Your password has expired. Please ask the system administrator to change it. change.try=Try Again change.title=Password Has Expired database.load=\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u0430 \u0438\u0437 {0} error.database.missing=\u041d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f - \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e. error.fromAddress.format=\u0412 \u043f\u043e\u043b\u0435 '\u0410\u0434\u0440\u0435\u0441 \u041e\u0442:' \u0443\u043a\u0430\u0437\u0430\u043d \u0430\u0434\u0440\u0435\u0441 \u0432 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435. error.fromAddress.required=\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u0432 \u043f\u043e\u043b\u0435 '\u0410\u0434\u0440\u0435\u0441 \u041e\u0442:'. error.fullName.required=\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0435 \u0438\u043c\u044f. error.host.required=\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u0447\u0442\u043e\u0432\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440. error.noSubscription=\u041f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430 \u0432 \u0441\u0435\u0441\u0441\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f error.password.expired=Your password has expired for username {0} error.password.required=\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c. error.password2.required=\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u043e\u043b\u044f. error.password.match=\u041f\u0430\u0440\u043e\u043b\u044c \u0438 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u043e\u043b\u044f \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442. error.password.mismatch=\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0438\u043c\u044f \u0438/\u0438\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u044c - \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0441\u043d\u043e\u0432\u0430. error.replyToAddress.format=\u0412 \u043f\u043e\u043b\u0435 '\u0410\u0434\u0440\u0435\u0441 \u041e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043d\u0430:' \u0443\u043a\u0430\u0437\u0430\u043d \u0430\u0434\u0440\u0435\u0441 \u0432 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435. error.transaction.token=\u042d\u0442\u0430 \u0444\u043e\u0440\u043c\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u0430 - \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0437\u0430\u043d\u0435\u0441\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445. error.type.invalid=\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0438\u043f\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u043b\u0438\u0448\u044c 'imap' \u0438\u043b\u0438 'pop3' error.type.required=\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0438\u043f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 error.username.required=\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f error.username.unique=\u0423\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f - \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0434\u0440\u0443\u0433\u043e\u0435 \u0438\u043c\u044f. errors.footer=

    errors.header=

    \u041e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u0438 \u0437\u0430\u043d\u0435\u0441\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445

    \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u043d\u0438\u0436\u0435 \u043e\u0448\u0438\u0431\u043a\u0438:

      errors.prefix=
    • errors.suffix=
    • errors.ioException=\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0432\u043e\u0434\u0430/\u0432\u044b\u0432\u043e\u0434\u0430 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445: {0} expired.password=User Password has expired for {0} heading.autoConnect=\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 heading.subscriptions=\u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438 heading.host=\u0421\u0435\u0440\u0432\u0435\u0440 heading.user=\u0418\u043c\u044f heading.type=\u0422\u0438\u043f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 heading.action=\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 index.heading=\u0414\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 '\u0427\u0442\u0435\u043d\u0438\u0435 \u043f\u043e\u0447\u0442\u044b' index.logon=\u0412\u043e\u0439\u0442\u0438 \u043a\u0430\u043a \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c index.registration=\u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f index.title=\u0414\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 '\u0427\u0442\u0435\u043d\u0438\u0435 \u043f\u043e\u0447\u0442\u044b' (Struts 1.1-dev) index.tour=\u041e\u0431\u0437\u043e\u0440 \u0414\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f '\u0427\u0442\u0435\u043d\u0438\u0435 \u043f\u043e\u0447\u0442\u044b' linkSubscription.io=\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0432\u043e\u0434\u0430/\u0432\u044b\u0432\u043e\u0434\u0430 (\u0434\u043b\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438): {0} linkSubscription.noSubscription=\u0410\u0442\u0440\u0438\u0431\u0443\u0442 {0} \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0435 \u0438\u043b\u0438 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. linkUser.io=\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0432\u043e\u0434\u0430/\u0432\u044b\u0432\u043e\u0434\u0430 (\u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f): {0} linkUser.noUser=\u0410\u0442\u0440\u0438\u0431\u0443\u0442 {0} \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435 \u0438\u043b\u0438 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. logon.title=\u0414\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0427\u0442\u0435\u043d\u0438\u0435 \u043f\u043e\u0447\u0442\u044b - \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0438\u043c\u0435\u043d\u0438 \u0438 \u043f\u0430\u0440\u043e\u043b\u044f. mainMenu.heading=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044e \u0434\u043b\u044f mainMenu.logoff=\u0412\u044b\u0439\u0442\u0438 mainMenu.registration=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 mainMenu.title=\u0414\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 '\u0427\u0442\u0435\u043d\u0438\u0435 \u043f\u043e\u0447\u0442\u044b' - \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u043c\u0435\u043d\u044e option.imap=\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b IMAP option.pop3=\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b POP3 prompt.autoConnect=\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435: prompt.fromAddress=\u0410\u0434\u0440\u0435\u0441 \u041e\u0442: prompt.fullName=\u041f\u043e\u043b\u043d\u043e\u0435 \u0438\u043c\u044f: prompt.mailHostname=\u041f\u043e\u0447\u0442\u043e\u0432\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440: prompt.mailPassword=\u041f\u0430\u0440\u043e\u043b\u044c \u0434\u043b\u044f \u043f\u043e\u0447\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430: prompt.mailServerType=\u0422\u0438\u043f \u0441\u0435\u0440\u0432\u0435\u0440\u0430: prompt.mailUsername=\u0418\u043c\u044f \u0434\u043b\u044f \u043f\u043e\u0447\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430: prompt.password=\u041f\u0430\u0440\u043e\u043b\u044c: prompt.password2=(\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435) \u041f\u0430\u0440\u043e\u043b\u044c: prompt.replyToAddress=\u0410\u0434\u0440\u0435\u0441 \u041e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043d\u0430: prompt.username=\u0418\u043c\u044f: registration.addSubscription=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c registration.deleteSubscription=\u0423\u0434\u0430\u043b\u0438\u0442\u044c registration.editSubscription=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c registration.title.create=\u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f registration.title.edit=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0441\u0432\u043e\u0435\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 subscription.title.create=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0443 subscription.title.delete=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0443 subscription.title.edit=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0443 # Standard error messages for validator framework checks errors.required={0} is required. errors.minlength={0} cannot be less than {1} characters. errors.maxlength={0} cannot be greater than {2} characters. errors.invalid={0} is invalid. errors.byte={0} must be an byte. errors.short={0} must be an short. errors.integer={0} must be an integer. errors.long={0} must be an long. errors.float={0} must be an float. errors.double={0} must be an double. errors.date={0} is not a date. errors.range={0} is not in the range {1} through {2}. errors.creditcard={0} is not a valid credit card number. errors.email={0} is an invalid e-mail address. libstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/BaseAction.java0000644000175000017500000000534410404045202031043 0ustar arnaudarnaud00000000000000/* * $Id: BaseAction.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.webapp.example.UserDatabase; import javax.servlet.http.HttpServletRequest; /** * Base Action for MailReader application. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class BaseAction extends Action { // ----------------------------------------------------- Instance Variables /** * The Log instance for this application. */ protected Log log = LogFactory.getLog(Constants.PACKAGE); // ------------------------------------------------------ Protected Methods /** * Return a reference to the UserDatabase * or null if the database is not available. * @param request The request we are processing * @return a reference to the UserDatabase or null if the database is not available */ protected UserDatabase getUserDatabase(HttpServletRequest request) { return (UserDatabase) servlet.getServletContext().getAttribute( Constants.DATABASE_KEY); } /** * Return the local or global forward named "failure" * or null if there is no such forward. * @param mapping Our ActionMapping * @return Return the mapping named "failure" or null if there is no such mapping. */ protected ActionForward findFailure(ActionMapping mapping) { return (mapping.findForward(Constants.FAILURE)); } /** * Return the mapping labeled "success" * or null if there is no such mapping. * @param mapping Our ActionMapping * @return Return the mapping named "success" or null if there is no such mapping. */ protected ActionForward findSuccess(ActionMapping mapping) { return (mapping.findForward(Constants.SUCCESS)); } } libstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/CheckLogonTag.java0000644000175000017500000000676210404045226031516 0ustar arnaudarnaud00000000000000/* * $Id: CheckLogonTag.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 2000-2004 Apache Software Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpSession; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.TagSupport; import org.apache.struts.config.ModuleConfig; /** * Check for a valid User logged on in the current session. If there is no * such user, forward control to the logon page. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public final class CheckLogonTag extends TagSupport { // --------------------------------------------------- Instance Variables /** * The key of the session-scope bean we look for. */ private String name = Constants.USER_KEY; /** * Path to use if a login is needed. */ private static String LOGIN_PATH = "/Logon.do"; /** * The action to which we should forward for the user to log on. */ private String page = LOGIN_PATH; // ------------------------------------------------------- Public Methods /** * Defer our checking until the end of this tag is encountered. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { return (SKIP_BODY); } /** * Perform our logged-in user check by looking for the existence of * a session scope bean under the specified name. If this bean is not * present, control is forwarded to the specified logon page. * * @exception JspException if a JSP exception has occurred */ public int doEndTag() throws JspException { // Is there a valid user logged on? boolean valid = false; HttpSession session = pageContext.getSession(); if ((session != null) && (session.getAttribute(name) != null)) { valid = true; } // Forward control based on the results if (valid) { return (EVAL_PAGE); } else { ModuleConfig config = (ModuleConfig) pageContext.getServletContext().getAttribute( org.apache.struts.Globals.MODULE_KEY); try { pageContext.forward(config.getPrefix() + page); } catch (ServletException e) { throw new JspException(e.toString()); } catch (IOException e) { throw new JspException(e.toString()); } return (SKIP_PAGE); } } /** * Release any acquired resources. */ public void release() { super.release(); this.name = Constants.USER_KEY; this.page = LOGIN_PATH; } } libstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/Constants.java0000644000175000017500000000513710404045224031013 0ustar arnaudarnaud00000000000000/* * $Id: Constants.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example; /** * Manifest constants for the example application. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public final class Constants { /** * The package name for this application. */ public static final String PACKAGE = "org.apache.struts.webapp.example"; /** * The token representing "failure" for this application. */ public static final String FAILURE = "failure"; /** * The token representing "success" for this application. */ public static final String SUCCESS = "success"; /** * The application scope attribute under which our user database * is stored. */ public static final String DATABASE_KEY = "database"; /** * The session scope attribute under which the Subscription object * currently selected by our logged-in User is stored. */ public static final String SUBSCRIPTION_KEY = "subscription"; /** * The session scope attribute under which the User object * for the currently logged in user is stored. */ public static final String USER_KEY = "user"; /** * A static message in case database resource is not loaded. */ public static final String ERROR_DATABASE_NOT_LOADED = "ERROR: User database not loaded -- check servlet container logs for error messages."; /** * A static message in case message resource is not loaded. */ public static final String ERROR_MESSAGES_NOT_LOADED = "ERROR: Message resources not loaded -- check servlet container logs for error messages."; /** * The request attributes key under the WelcomeAction stores an ArrayList * of error messages, if required resources are missing. */ public static final String ERROR_KEY = "ERROR"; } libstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/EditRegistrationAction.java0000644000175000017500000001064010404045204033446 0ustar arnaudarnaud00000000000000/* * $Id: EditRegistrationAction.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example; import java.lang.reflect.InvocationTargetException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; /** * Implementation of Action that populates an instance of * RegistrationForm from the profile of the currently logged on * User (if any). * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public final class EditRegistrationAction extends Action { // ----------------------------------------------------- Instance Variables /** * The Log instance for this application. */ private Log log = LogFactory.getLog("org.apache.struts.webapp.Example"); // --------------------------------------------------------- Public Methods // See superclass for Javadoc public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // Extract attributes we will need HttpSession session = request.getSession(); String action = request.getParameter("action"); if (action == null) { action = "Create"; } if (log.isDebugEnabled()) { log.debug("EditRegistrationAction: Processing " + action + " action"); } // Is there a currently logged on user? User user = null; if (!"Create".equals(action)) { user = (User) session.getAttribute(Constants.USER_KEY); if (user == null) { if (log.isDebugEnabled()) { log.debug( " User is not logged on in session " + session.getId()); } return (mapping.findForward("logon")); } } RegistrationForm regform = (RegistrationForm) form; if (user != null) { if (log.isTraceEnabled()) { log.trace(" Populating form from " + user); } try { PropertyUtils.copyProperties(regform, user); regform.setAction(action); regform.setPassword(null); regform.setPassword2(null); } catch (InvocationTargetException e) { Throwable t = e.getTargetException(); if (t == null) t = e; log.error("RegistrationForm.populate", t); throw new ServletException("RegistrationForm.populate", t); } catch (Throwable t) { log.error("RegistrationForm.populate", t); throw new ServletException("RegistrationForm.populate", t); } } // Set a transactional control token to prevent double posting if (log.isTraceEnabled()) { log.trace(" Setting transactional control token"); } saveToken(request); // Forward control to the edit user registration page if (log.isTraceEnabled()) { log.trace(" Forwarding to 'success' page"); } return (mapping.findForward("success")); } } libstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/EditSubscriptionAction.java0000644000175000017500000001137710404045234033473 0ustar arnaudarnaud00000000000000/* * $Id: EditSubscriptionAction.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example; import java.lang.reflect.InvocationTargetException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; /** * Implementation of Action that populates an instance of * SubscriptionForm from the currently specified subscription. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public final class EditSubscriptionAction extends Action { // ----------------------------------------------------- Instance Variables /** * The Log instance for this application. */ private Log log = LogFactory.getLog("org.apache.struts.webapp.Example"); // --------------------------------------------------------- Public Methods // See superclass for Javadoc public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // Extract attributes we will need HttpSession session = request.getSession(); String action = request.getParameter("action"); if (action == null) { action = "Create"; } String host = request.getParameter("host"); if (log.isDebugEnabled()) { log.debug("EditSubscriptionAction: Processing " + action + " action"); } // Is there a currently logged on user? User user = (User) session.getAttribute(Constants.USER_KEY); if (user == null) { if (log.isTraceEnabled()) { log.trace(" User is not logged on in session " + session.getId()); } return (mapping.findForward("logon")); } // Identify the relevant subscription Subscription subscription = user.findSubscription(request.getParameter("host")); if ((subscription == null) && !action.equals("Create")) { if (log.isTraceEnabled()) { log.trace( " No subscription for user " + user.getUsername() + " and host " + host); } return (mapping.findForward("failure")); } if (subscription != null) { session.setAttribute(Constants.SUBSCRIPTION_KEY, subscription); } SubscriptionForm subform = (SubscriptionForm) form; subform.setAction(action); if (!action.equals("Create")) { if (log.isTraceEnabled()) { log.trace(" Populating form from " + subscription); } try { PropertyUtils.copyProperties(subform, subscription); subform.setAction(action); } catch (InvocationTargetException e) { Throwable t = e.getTargetException(); if (t == null) t = e; log.error("SubscriptionForm.populate", t); throw new ServletException("SubscriptionForm.populate", t); } catch (Throwable t) { log.error("SubscriptionForm.populate", t); throw new ServletException("SubscriptionForm.populate", t); } } // Forward control to the edit subscription page if (log.isTraceEnabled()) { log.trace(" Forwarding to 'success' page"); } return (mapping.findForward("success")); } } libstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/ExpiredPasswordException.java0000644000175000017500000000240410404045236034036 0ustar arnaudarnaud00000000000000/* * $Id: ExpiredPasswordException.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example; import org.apache.struts.util.ModuleException; /** * Example of an application-specific exception for which a handler * can be configured. */ public class ExpiredPasswordException extends ModuleException { /** * Construct a new instance of this exception for the specified username. * * @param username Username whose password has expired */ public ExpiredPasswordException(String username) { super("error.password.expired", username); } } libstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/LICENSE.txt0000644000175000017500000002411310404045224030012 0ustar arnaudarnaud00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. libstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/LinkSubscriptionTag.java0000644000175000017500000001210410404045226032767 0ustar arnaudarnaud00000000000000/* * $Id: LinkSubscriptionTag.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.TagSupport; import org.apache.struts.config.ModuleConfig; import org.apache.struts.taglib.TagUtils; import org.apache.struts.util.MessageResources; /** * Generate a URL-encoded hyperlink to the specified URI, with * associated query parameters selecting a specified Subscription. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class LinkSubscriptionTag extends TagSupport { // ----------------------------------------------------- Instance Variables /** * The context-relative URI. */ protected String page = null; /** * The message resources for this package. */ protected static MessageResources messages = MessageResources.getMessageResources ("org.apache.struts.webapp.example.ApplicationResources"); /** * The attribute name. */ private String name = "subscription"; // ------------------------------------------------------------- Properties /** * Return the context-relative URI. */ public String getPage() { return (this.page); } /** * Set the context-relative URI. * * @param page Set the context-relative URI */ public void setPage(String page) { this.page = page; } /** * Return the attribute name. */ public String getName() { return (this.name); } /** * Set the attribute name. * * @param name The new attribute name */ public void setName(String name) { this.name = name; } // --------------------------------------------------------- Public Methods /** * Render the beginning of the hyperlink. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { // Generate the URL to be encoded ModuleConfig config = (ModuleConfig) pageContext.getRequest() .getAttribute(org.apache.struts.Globals.MODULE_KEY); HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); StringBuffer url = new StringBuffer(request.getContextPath()); url.append(config.getPrefix()); url.append(page); Subscription subscription = null; try { subscription = (Subscription) pageContext.findAttribute(name); } catch (ClassCastException e) { subscription = null; } if (subscription == null) throw new JspException (messages.getMessage("linkSubscription.noSubscription", name)); if (page.indexOf("?") < 0) url.append("?"); else url.append("&"); url.append("username="); url.append(TagUtils.getInstance().filter(subscription.getUser().getUsername())); url.append("&host="); url.append(TagUtils.getInstance().filter(subscription.getHost())); // Generate the hyperlink start element HttpServletResponse response = (HttpServletResponse) pageContext.getResponse(); StringBuffer results = new StringBuffer(""); // Print this element to our output writer JspWriter writer = pageContext.getOut(); try { writer.print(results.toString()); } catch (IOException e) { throw new JspException (messages.getMessage("linkSubscription.io", e.toString())); } // Evaluate the body of this tag return (EVAL_BODY_INCLUDE); } /** * Render the end of the hyperlink. * * @exception JspException if a JSP exception has occurred */ public int doEndTag() throws JspException { // Print the ending element to our output writer JspWriter writer = pageContext.getOut(); try { writer.print(""); } catch (IOException e) { throw new JspException (messages.getMessage("link.io", e.toString())); } return (EVAL_PAGE); } /** * Release any acquired resources. */ public void release() { super.release(); this.page = null; this.name = "subscription"; } } libstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/LinkUserTag.java0000644000175000017500000001151310404045212031217 0ustar arnaudarnaud00000000000000/* * $Id: LinkUserTag.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.TagSupport; import org.apache.struts.config.ModuleConfig; import org.apache.struts.taglib.TagUtils; import org.apache.struts.util.MessageResources; /** * Generate a URL-encoded hyperlink to the specified URI, with * associated query parameters selecting a specified User. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class LinkUserTag extends TagSupport { // ----------------------------------------------------- Instance Variables /** * The hyperlink URI. */ protected String page = null; /** * The message resources for this package. */ protected static MessageResources messages = MessageResources.getMessageResources ("org.apache.struts.webapp.example.ApplicationResources"); /** * The attribute name. */ private String name = "user"; // ------------------------------------------------------------- Properties /** * Return the hyperlink URI. */ public String getPage() { return (this.page); } /** * Set the hyperlink URI. * * @param page Set the hyperlink URI */ public void setPage(String page) { this.page = page; } /** * Return the attribute name. */ public String getName() { return (this.name); } /** * Set the attribute name. * * @param name The new attribute name */ public void setName(String name) { this.name = name; } // --------------------------------------------------------- Public Methods /** * Render the beginning of the hyperlink. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { // Generate the URL to be encoded ModuleConfig config = (ModuleConfig) pageContext.getRequest() .getAttribute(org.apache.struts.Globals.MODULE_KEY); HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); StringBuffer url = new StringBuffer(request.getContextPath()); url.append(config.getPrefix()); url.append(page); User user = null; try { user = (User) pageContext.findAttribute(name); } catch (ClassCastException e) { user = null; } if (user == null) throw new JspException (messages.getMessage("linkUser.noUser", name)); if (page.indexOf("?") < 0) url.append("?"); else url.append("&"); url.append("username="); url.append(TagUtils.getInstance().filter(user.getUsername())); // Generate the hyperlink start element HttpServletResponse response = (HttpServletResponse) pageContext.getResponse(); StringBuffer results = new StringBuffer(""); // Print this element to our output writer JspWriter writer = pageContext.getOut(); try { writer.print(results.toString()); } catch (IOException e) { throw new JspException (messages.getMessage("linkUser.io", e.toString())); } // Evaluate the body of this tag return (EVAL_BODY_INCLUDE); } /** * Render the end of the hyperlink. * * @exception JspException if a JSP exception has occurred */ public int doEndTag() throws JspException { // Print the ending element to our output writer JspWriter writer = pageContext.getOut(); try { writer.print(""); } catch (IOException e) { throw new JspException (messages.getMessage("link.io", e.toString())); } return (EVAL_PAGE); } /** * Release any acquired resources. */ public void release() { super.release(); this.page = null; this.name = "user"; } } libstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/LocaleAction.java0000644000175000017500000001036310404045242031371 0ustar arnaudarnaud00000000000000/* * $Id: LocaleAction.java 157397 2005-03-14 06:20:47Z martinc $ * * Copyright 2000-2004 Apache Software Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example; import java.util.Locale; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.struts.Globals; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; /** *

      Change user's Struts {@link java.util.Locale}.

      */ public final class LocaleAction extends BaseAction { /** *

      Return true if parameter is null or trims to empty.

      * @param string The string to text; may be null * @return true if parameter is null or empty */ private boolean isBlank(String string) { return ((string==null) || (string.trim().length()==0)); } /** *

      Parameter for {@link java.util.Locale} language property. * ["language"]

      */ private static final String LANGUAGE = "language" ; /** *

      Parameter for {@link java.util.Locale} country property. * ["country"]

      */ private static final String COUNTRY = "country"; /** *

      Parameter for response page URI. ["page"]

      */ private static final String PAGE = "page"; /** *

      Parameter for response forward name. * ["forward"]

      */ private static final String FORWARD = "forward"; /** *

      Logging message if LocaleAction is missing a target parameter.

      */ private static final String LOCALE_LOG = "LocaleAction: Missing page or forward parameter"; /** *

      * Change the user's Struts {@link java.util.Locale} based on request * parameters for "language", "country". * After setting the Locale, control is forwarded to an URI path * indicated by a "page" parameter, or a forward indicated by a * "forward" parameter, or to a forward given as the mappings * "parameter" property. * The response location must be specified one of these ways. *

      * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @return An ActionForward indicate the resources that will render the response * @exception Exception if an input/output error or servlet exception occurs */ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { String language = request.getParameter(LANGUAGE); String country = request.getParameter(COUNTRY); Locale locale = getLocale(request); if ((!isBlank(language)) && (!isBlank(country))) { locale = new Locale(language, country); } else if (!isBlank(language)) { locale = new Locale(language, ""); } HttpSession session = request.getSession(); session.setAttribute(Globals.LOCALE_KEY, locale); String target = request.getParameter(PAGE); if (!isBlank(target)) return new ActionForward(target); target = request.getParameter(FORWARD); if (isBlank(target)) target = mapping.getParameter(); if (isBlank(target)) { log.warn(LOCALE_LOG); return null; } return mapping.findForward(target); } } libstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/LogoffAction.java0000644000175000017500000000556010404045230031406 0ustar arnaudarnaud00000000000000/* * $Id: LogoffAction.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; /** * Implementation of Action that processes a * user logoff. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public final class LogoffAction extends Action { // ----------------------------------------------------- Instance Variables /** * The Log instance for this application. */ private Log log = LogFactory.getLog("org.apache.struts.webapp.Example"); // --------------------------------------------------------- Public Methods // See superclass for Javadoc public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // Extract attributes we will need HttpSession session = request.getSession(); User user = (User) session.getAttribute(Constants.USER_KEY); // Process this user logoff if (user != null) { if (log.isDebugEnabled()) { log.debug( "LogoffAction: User '" + user.getUsername() + "' logged off in session " + session.getId()); } } else { if (log.isDebugEnabled()) { log.debug( "LogoffActon: User logged off in session " + session.getId()); } } session.removeAttribute(Constants.SUBSCRIPTION_KEY); session.removeAttribute(Constants.USER_KEY); session.invalidate(); // Forward control to the specified success URI return (mapping.findForward("success")); } } libstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/LogonAction.java0000644000175000017500000001237210404045216031253 0ustar arnaudarnaud00000000000000/* * $Id: LogonAction.java 164858 2005-04-26 19:03:35Z niallp $ * * Copyright 2000-2005 Apache Software Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.beanutils.PropertyUtils; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessage; import org.apache.struts.action.ActionMessages; /** *

      Validate a user logon.

      * * @version $Rev: 164858 $ $Date: 2005-04-26 20:03:35 +0100 (Tue, 26 Apr 2005) $ */ public final class LogonAction extends BaseAction { /** * Name of username field ["username"]. */ static String USERNAME = "username"; /** * Name of password field ["password"]. */ static String PASSWORD = "password"; // ------------------------------------------------------ Protected Methods /** *

      Confirm user credentials. Post any errors and return User object * (or null).

      * * @param database Database in which to look up the user * @param username Username specified on the logon form * @param password Password specified on the logon form * @param errors ActionMessages queue to passback errors * * @return Validated User object or null * @throws ExpiredPasswordException to be handled by Struts exception * processor via the action-mapping */ User getUser(UserDatabase database, String username, String password, ActionMessages errors) throws ExpiredPasswordException { User user = null; if (database == null){ errors.add( ActionMessages.GLOBAL_MESSAGE, new ActionMessage("error.database.missing")); } else { user = database.findUser(username); if ((user != null) && !user.getPassword().equals(password)) { user = null; } if (user == null) { errors.add( ActionMessages.GLOBAL_MESSAGE, new ActionMessage("error.password.mismatch")); } } return user; } /** *

      Store User object in client session. * If user object is null, any existing user object is removed.

      * * @param request The request we are processing * @param user The user object returned from the database */ void SaveUser(HttpServletRequest request, User user) { HttpSession session = request.getSession(); session.setAttribute(Constants.USER_KEY, user); if (log.isDebugEnabled()) { log.debug( "LogonAction: User '" + user.getUsername() + "' logged on in session " + session.getId()); } } // --------------------------------------------------------- Public Methods /** * Use "username" and "password" fields from ActionForm to retrieve a User * object from the database. If credentials are not valid, or database * has disappeared, post error messages and forward to input. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception Exception if the application business logic throws * an exception */ public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // Local variables UserDatabase database = getUserDatabase(request); String username = (String) PropertyUtils.getSimpleProperty(form, USERNAME); String password = (String) PropertyUtils.getSimpleProperty(form, PASSWORD); ActionMessages errors = new ActionMessages(); // Retrieve user User user = getUser(database,username,password,errors); // Report back any errors, and exit if any if (!errors.isEmpty()) { this.saveErrors(request, errors); return (mapping.getInputForward()); } // Save user object SaveUser(request,user); // Otherwise, return "success" return (findSuccess(mapping)); } } libstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/MODEL.txt0000644000175000017500000000442510404045210027567 0ustar arnaudarnaud00000000000000-MailReader Object Model- [(Associations)] ---- [UserDatabase] owns [User]s ---- [User] owns [Subscription]s === [Subscription (interface)] ---- + AutoConnect: Boolean + Host: String (readonly) + Type: String + Username: String + Password: String + User: User (readonly) ---- ==== [User (interface)] ---- + Username: String (readonly) + Password: String + FullName: String + FromAddress: String + ReplyToAddress: String + DataBase: UserDatabase + Subscription: Subscription[] ---- + CreateSubscription(Host:String): Subscription + FindSubscription(Host:String):Subscription + RemoveSubscription(Subscription:Subcription) ==== [UserDatabase (interface)] ---- ---- + Open() + Save() + Close() + CreateUser(username:String): User + FindUser(username:String): User + FindUsers(): User[] + RemoveUser(user:User) + UpdateUser(User) !NEW! ==== [MemorySubscription:Subscription] ---- - autoConnect:Boolean - host:String - type:String - username:String - password - user:User ---- + MemorySubscription(user:MemoryUser host:String) * :Subscription members * ToString:String ==== [MemoryUser:User] ---- - username:String - password:String - fullname:String - fromAddress:String - replyToAddress:String - database:MemoryDataBAse - subscriptions:HashMap ---- + MemoryUser(database:MemoryUserDatabase:* :User members database username:String) * ToString:String ==== [MemoryUserDatabase:UserDatabase] ---- - log:Log - users:HashMap - pathnameOld:String - pathnameNew:String + pathname:String ---- * :UserDatabase ==== [PlugIn (interface)] ---- ---- + Init(servlet:ActionServlet servlet config:ModuleConfig) + Destroy() ==== [MemoryDataBasePlugIn:PlugIn] ---- - database:MemoryUserDatabase - log:Log - servlet:ActionServlet + Pathname ---- * :PlugIn - CalculatePath() ==== [ObjectCreationFactory (interface)] ---- Digester:Digester ---- createObject(attributes:Attributes):Object ==== [MemorySubscriptionCreationFactory:ObjectCreationFactory] ---- + Digester:Digester ---- * :ObjectCreationFactory ==== [MemoryUserCreationFactory:ObjectCreationFactory] ---- ---- + Digester:Digester ---- * :ObjectCreationFactory + MemoryUserCreationFactory(database:MemoryUserDatabase) ==== libstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/RegistrationForm.java0000644000175000017500000001523710404045244032341 0ustar arnaudarnaud00000000000000/* * $Id: RegistrationForm.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessage; import org.apache.struts.validator.ValidatorForm; /** * Form bean for the user registration page. This form has the following * fields, with default values in square brackets: *
        *
      • action - The maintenance action we are performing (Create, * Delete, or Edit). *
      • fromAddress - The EMAIL address of the sender, to be included * on sent messages. [REQUIRED] *
      • fullName - The full name of the sender, to be included on * sent messages. [REQUIRED] *
      • password - The password used by this user to log on. *
      • password2 - The confirmation password, which must match * the password when changing or setting. *
      • replyToAddress - The "Reply-To" address to be included on * sent messages. [Same as from address] *
      • username - The registered username, which must be unique. * [REQUIRED] *
      * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public final class RegistrationForm extends ValidatorForm { // ----------------------------------------------------- Instance Variables /** * The maintenance action we are performing (Create or Edit). */ private String action = "Create"; /** * The from address. */ private String fromAddress = null; /** * The full name. */ private String fullName = null; /** * The password. */ private String password = null; /** * The confirmation password. */ private String password2 = null; /** * The reply to address. */ private String replyToAddress = null; /** * The username. */ private String username = null; // ----------------------------------------------------------- Properties /** * Return the maintenance action. */ public String getAction() { return (this.action); } /** * Set the maintenance action. * * @param action The new maintenance action. */ public void setAction(String action) { this.action = action; } /** * Return the from address. */ public String getFromAddress() { return (this.fromAddress); } /** * Set the from address. * * @param fromAddress The new from address */ public void setFromAddress(String fromAddress) { this.fromAddress = fromAddress; } /** * Return the full name. */ public String getFullName() { return (this.fullName); } /** * Set the full name. * * @param fullName The new full name */ public void setFullName(String fullName) { this.fullName = fullName; } /** * Return the password. */ public String getPassword() { return (this.password); } /** * Set the password. * * @param password The new password */ public void setPassword(String password) { this.password = password; } /** * Return the confirmation password. */ public String getPassword2() { return (this.password2); } /** * Set the confirmation password. * * @param password2 The new confirmation password */ public void setPassword2(String password2) { this.password2 = password2; } /** * Return the reply to address. */ public String getReplyToAddress() { return (this.replyToAddress); } /** * Set the reply to address. * * @param replyToAddress The new reply to address */ public void setReplyToAddress(String replyToAddress) { this.replyToAddress = replyToAddress; } /** * Return the username. */ public String getUsername() { return (this.username); } /** * Set the username. * * @param username The new username */ public void setUsername(String username) { this.username = username; } // --------------------------------------------------------- Public Methods /** * Reset all properties to their default values. * * @param mapping The mapping used to select this instance * @param request The servlet request we are processing */ public void reset(ActionMapping mapping, HttpServletRequest request) { this.action = "Create"; this.fromAddress = null; this.fullName = null; this.password = null; this.password2 = null; this.replyToAddress = null; this.username = null; } /** * Validate the properties that have been set from this HTTP request, * and return an ActionErrors object that encapsulates any * validation errors that have been found. If no errors are found, return * null or an ActionErrors object with no * recorded error messages. * * @param mapping The mapping used to select this instance * @param request The servlet request we are processing */ public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { // Perform validator framework validations ActionErrors errors = super.validate(mapping, request); // Only need crossfield validations here if (!password.equals(password2)) { errors.add("password2", new ActionMessage("error.password.match")); } return errors; } } libstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/SaveRegistrationAction.java0000644000175000017500000001661710404045210033466 0ustar arnaudarnaud00000000000000/* * $Id: SaveRegistrationAction.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example; import java.lang.reflect.InvocationTargetException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessage; import org.apache.struts.action.ActionMessages; /** * Implementation of Action that validates and creates or * updates the user registration information entered by the user. If a new * registration is created, the user is also implicitly logged on. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public final class SaveRegistrationAction extends Action { // ----------------------------------------------------- Instance Variables /** * The Log instance for this application. */ private Log log = LogFactory.getLog("org.apache.struts.webapp.Example"); // --------------------------------------------------------- Public Methods // See superclass for Javadoc public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // Extract attributes and parameters we will need HttpSession session = request.getSession(); RegistrationForm regform = (RegistrationForm) form; String action = regform.getAction(); if (action == null) { action = "Create"; } UserDatabase database = (UserDatabase) servlet.getServletContext().getAttribute( Constants.DATABASE_KEY); if (log.isDebugEnabled()) { log.debug("SaveRegistrationAction: Processing " + action + " action"); } // Is there a currently logged on user (unless creating)? User user = (User) session.getAttribute(Constants.USER_KEY); if (!"Create".equals(action) && (user == null)) { if (log.isTraceEnabled()) { log.trace(" User is not logged on in session " + session.getId()); } return (mapping.findForward("logon")); } // Was this transaction cancelled? if (isCancelled(request)) { if (log.isTraceEnabled()) { log.trace(" Transaction '" + action + "' was cancelled"); } session.removeAttribute(Constants.SUBSCRIPTION_KEY); return (mapping.findForward("success")); } // Validate the transactional control token ActionMessages errors = new ActionMessages(); if (log.isTraceEnabled()) { log.trace(" Checking transactional control token"); } if (!isTokenValid(request)) { errors.add( ActionMessages.GLOBAL_MESSAGE, new ActionMessage("error.transaction.token")); } resetToken(request); // Validate the request parameters specified by the user if (log.isTraceEnabled()) { log.trace(" Performing extra validations"); } String value = null; value = regform.getUsername(); if (("Create".equals(action)) && (database.findUser(value) != null)) { errors.add( "username", new ActionMessage("error.username.unique", regform.getUsername())); } if ("Create".equals(action)) { value = regform.getPassword(); if ((value == null) || (value.length() < 1)) { errors.add("password", new ActionMessage("error.password.required")); } value = regform.getPassword2(); if ((value == null) || (value.length() < 1)) { errors.add( "password2", new ActionMessage("error.password2.required")); } } // Report any errors we have discovered back to the original form if (!errors.isEmpty()) { this.saveErrors(request, errors); this.saveToken(request); return (mapping.getInputForward()); } // Update the user's persistent profile information try { if ("Create".equals(action)) { user = database.createUser(regform.getUsername()); } String oldPassword = user.getPassword(); PropertyUtils.copyProperties(user, regform); if ((regform.getPassword() == null) || (regform.getPassword().length() < 1)) { user.setPassword(oldPassword); } } catch (InvocationTargetException e) { Throwable t = e.getTargetException(); if (t == null) { t = e; } log.error("Registration.populate", t); throw new ServletException("Registration.populate", t); } catch (Throwable t) { log.error("Registration.populate", t); throw new ServletException("Subscription.populate", t); } try { database.save(); } catch (Exception e) { log.error("Database save", e); } // Log the user in if appropriate if ("Create".equals(action)) { session.setAttribute(Constants.USER_KEY, user); if (log.isTraceEnabled()) { log.trace( " User '" + user.getUsername() + "' logged on in session " + session.getId()); } } // Remove the obsolete form bean if (mapping.getAttribute() != null) { if ("request".equals(mapping.getScope())) request.removeAttribute(mapping.getAttribute()); else session.removeAttribute(mapping.getAttribute()); } // Forward control to the specified success URI if (log.isTraceEnabled()) { log.trace(" Forwarding to success page"); } return (mapping.findForward("success")); } } libstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/SaveSubscriptionAction.java0000644000175000017500000001500510404045240033471 0ustar arnaudarnaud00000000000000/* * $Id: SaveSubscriptionAction.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example; import java.lang.reflect.InvocationTargetException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.util.MessageResources; /** * Implementation of Action that validates and creates or * updates the mail subscription entered by the user. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public final class SaveSubscriptionAction extends Action { // ----------------------------------------------------- Instance Variables /** * The Log instance for this application. */ private Log log = LogFactory.getLog("org.apache.struts.webapp.Example"); // --------------------------------------------------------- Public Methods // See superclass for Javadoc public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // Extract attributes and parameters we will need MessageResources messages = getResources(request); HttpSession session = request.getSession(); SubscriptionForm subform = (SubscriptionForm) form; String action = subform.getAction(); if (action == null) { action = "?"; } if (log.isDebugEnabled()) { log.debug("SaveSubscriptionAction: Processing " + action + " action"); } // Is there a currently logged on user? User user = (User) session.getAttribute(Constants.USER_KEY); if (user == null) { if (log.isTraceEnabled()) { log.trace(" User is not logged on in session " + session.getId()); } return (mapping.findForward("logon")); } // Was this transaction cancelled? if (isCancelled(request)) { if (log.isTraceEnabled()) { log.trace(" Transaction '" + action + "' was cancelled"); } session.removeAttribute(Constants.SUBSCRIPTION_KEY); return (mapping.findForward("success")); } // Is there a related Subscription object? Subscription subscription = (Subscription) session.getAttribute(Constants.SUBSCRIPTION_KEY); if ("Create".equals(action)) { subscription = user.createSubscription(request.getParameter("host")); } if (subscription == null) { if (log.isTraceEnabled()) { log.trace( " Missing subscription for user '" + user.getUsername() + "'"); } response.sendError( HttpServletResponse.SC_BAD_REQUEST, messages.getMessage("error.noSubscription")); return (null); } // Was this transaction a Delete? if (action.equals("Delete")) { if (log.isTraceEnabled()) { log.trace( " Deleting mail server '" + subscription.getHost() + "' for user '" + user.getUsername() + "'"); } user.removeSubscription(subscription); session.removeAttribute(Constants.SUBSCRIPTION_KEY); try { UserDatabase database = (UserDatabase) servlet.getServletContext().getAttribute( Constants.DATABASE_KEY); database.save(); } catch (Exception e) { log.error("Database save", e); } return (mapping.findForward("success")); } // All required validations were done by the form itself // Update the persistent subscription information if (log.isTraceEnabled()) { log.trace(" Populating database from form bean"); } try { PropertyUtils.copyProperties(subscription, subform); } catch (InvocationTargetException e) { Throwable t = e.getTargetException(); if (t == null) t = e; log.error("Subscription.populate", t); throw new ServletException("Subscription.populate", t); } catch (Throwable t) { log.error("Subscription.populate", t); throw new ServletException("Subscription.populate", t); } try { UserDatabase database = (UserDatabase) servlet.getServletContext().getAttribute( Constants.DATABASE_KEY); database.save(); } catch (Exception e) { log.error("Database save", e); } // Remove the obsolete form bean and current subscription if (mapping.getAttribute() != null) { if ("request".equals(mapping.getScope())) request.removeAttribute(mapping.getAttribute()); else session.removeAttribute(mapping.getAttribute()); } session.removeAttribute(Constants.SUBSCRIPTION_KEY); // Forward control to the specified success URI if (log.isTraceEnabled()) { log.trace(" Forwarding to success page"); } return (mapping.findForward("success")); } } libstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/Subscription.java0000644000175000017500000000433710404045214031523 0ustar arnaudarnaud00000000000000/* * $Id: Subscription.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example; /** *

      A Subscription which is stored, along with the * associated {@link User}, in a {@link UserDatabase}.

      * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public interface Subscription { // ------------------------------------------------------------- Properties /** * Return the auto-connect flag. */ public boolean getAutoConnect(); /** * Set the auto-connect flag. * * @param autoConnect The new auto-connect flag */ public void setAutoConnect(boolean autoConnect); /** * Return the host name. */ public String getHost(); /** * Return the password. */ public String getPassword(); /** * Set the password. * * @param password The new password */ public void setPassword(String password); /** * Return the subscription type. */ public String getType(); /** * Set the subscription type. * * @param type The new subscription type */ public void setType(String type); /** * Return the {@link User} owning this Subscription. */ public User getUser(); /** * Return the username. */ public String getUsername(); /** * Set the username. * * @param username The new username */ public void setUsername(String username); } libstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/SubscriptionForm.java0000644000175000017500000001441610404045224032347 0ustar arnaudarnaud00000000000000/* * $Id: SubscriptionForm.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessage; /** * Form bean for the user profile page. This form has the following fields, * with default values in square brackets: *
        *
      • action - The maintenance action we are performing (Create, Delete, * or Edit). *
      • host - The mail host for this subscription. [REQUIRED] *
      • password - The password for this subscription. [REQUIRED] *
      • type - The subscription type (imap,pop3) for this subscription. [REQUIRED] *
      • username - The username of this subscription. [REQUIRED] *
      * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public final class SubscriptionForm extends ActionForm { // --------------------------------------------------- Instance Variables /** * The maintenance action we are performing (Create or Edit). */ private String action = "Create"; /** * Should we auto-connect at startup time? */ private boolean autoConnect = false; /** * The host name. */ private String host = null; /** * The password. */ private String password = null; /** * The subscription type. */ private String type = null; /** * The username. */ private String username = null; // ----------------------------------------------------------- Properties /** * Return the maintenance action. */ public String getAction() { return (this.action); } /** * Set the maintenance action. * * @param action The new maintenance action. */ public void setAction(String action) { this.action = action; } /** * Return the auto-connect flag. */ public boolean getAutoConnect() { return (this.autoConnect); } /** * Set the auto-connect flag. * * @param autoConnect The new auto-connect flag */ public void setAutoConnect(boolean autoConnect) { this.autoConnect = autoConnect; } /** * Return the host name. */ public String getHost() { return (this.host); } /** * Set the host name. * * @param host The host name */ public void setHost(String host) { this.host = host; } /** * Return the password. */ public String getPassword() { return (this.password); } /** * Set the password. * * @param password The new password */ public void setPassword(String password) { this.password = password; } /** * Return the subscription type. */ public String getType() { return (this.type); } /** * Set the subscription type. * * @param type The subscription type */ public void setType(String type) { this.type = type; } /** * Return the username. */ public String getUsername() { return (this.username); } /** * Set the username. * * @param username The new username */ public void setUsername(String username) { this.username = username; } // --------------------------------------------------------- Public Methods /** * Reset all properties to their default values. * * @param mapping The mapping used to select this instance * @param request The servlet request we are processing */ public void reset(ActionMapping mapping, HttpServletRequest request) { this.action = "Create"; this.autoConnect = false; this.host = null; this.password = null; this.type = null; this.username = null; } /** * Validate the properties that have been set from this HTTP request, * and return an ActionErrors object that encapsulates any * validation errors that have been found. If no errors are found, return * null or an ActionErrors object with no * recorded error messages. * * @param mapping The mapping used to select this instance * @param request The servlet request we are processing */ public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { ActionErrors errors = new ActionErrors(); if ((host == null) || (host.length() < 1)) errors.add("host", new ActionMessage("error.host.required")); if ((username == null) || (username.length() < 1)) errors.add("username", new ActionMessage("error.username.required")); if ((password == null) || (password.length() < 1)) errors.add("password", new ActionMessage("error.password.required")); if ((type == null) || (type.length() < 1)) errors.add("type", new ActionMessage("error.type.required")); else if (!"imap".equals(type) && !"pop3".equals(type)) errors.add("type", new ActionMessage("error.type.invalid", type)); return (errors); } } libstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/User.java0000644000175000017500000000706410404045246027762 0ustar arnaudarnaud00000000000000/* * $Id: User.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example; /** *

      A User which is stored, along with his or her * associated {@link Subscription}s, in a {@link UserDatabase}.

      * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ * @since Struts 1.1 */ public interface User { // ------------------------------------------------------------- Properties /** * Return the {@link UserDatabase} with which we are associated. */ public UserDatabase getDatabase(); /** * Return the from address. */ public String getFromAddress(); /** * Set the from address. * * @param fromAddress The new from address */ public void setFromAddress(String fromAddress); /** * Return the full name. */ public String getFullName(); /** * Set the full name. * * @param fullName The new full name */ public void setFullName(String fullName); /** * Return the password. */ public String getPassword(); /** * Set the password. * * @param password The new password */ public void setPassword(String password); /** * Return the reply-to address. */ public String getReplyToAddress(); /** * Set the reply-to address. * * @param replyToAddress The new reply-to address */ public void setReplyToAddress(String replyToAddress); /** * Find and return all {@link Subscription}s associated with this user. * If there are none, a zero-length array is returned. */ public Subscription[] getSubscriptions(); /** * Return the username. */ public String getUsername(); // --------------------------------------------------------- Public Methods /** * Create and return a new {@link Subscription} associated with this * User, for the specified host name. * * @param host Host name for which to create a subscription * * @exception IllegalArgumentException if the host name is not unique * for this user */ public Subscription createSubscription(String host); /** * Find and return the {@link Subscription} associated with the specified * host. If none is found, return null. * * @param host Host name to look up */ public Subscription findSubscription(String host); /** * Remove the specified {@link Subscription} from being associated * with this User. * * @param subscription Subscription to be removed * * @exception IllegalArgumentException if the specified subscription is not * associated with this User */ public void removeSubscription(Subscription subscription); } libstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/UserDatabase.java0000644000175000017500000000603710404045212031377 0ustar arnaudarnaud00000000000000/* * $Id: UserDatabase.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 2000-2004 Apache Software Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example; /** *

      A Data Access Object (DAO) interface describing * the available operations for retrieving and storing {@link User}s * (and their associated {@link Subscription}s) in some persistence layer * whose characteristics are not specified here. One or more implementations * will be created to perform the actual I/O that is required.

      * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ * @since Struts 1.1 */ public interface UserDatabase { // --------------------------------------------------------- Public Methods /** *

      Create and return a new {@link User} defined in this user database. *

      * * @param username Username of the new user * * @exception IllegalArgumentException if the specified username * is not unique */ public User createUser(String username); /** *

      Finalize access to the underlying persistence layer.

      * * @exception Exception if a database access error occurs */ public void close() throws Exception; /** *

      Return the existing {@link User} with the specified username, * if any; otherwise return null.

      * * @param username Username of the user to retrieve * @throws ExpiredPasswordException if user password has expired * and must be changed */ public User findUser(String username) throws ExpiredPasswordException; /** *

      Return the set of {@link User}s defined in this user database.

      */ public User[] findUsers(); /** *

      Initiate access to the underlying persistence layer.

      * * @exception Exception if a database access error occurs */ public void open() throws Exception; /** * Remove the specified {@link User} from this database. * * @param user User to be removed * * @exception IllegalArgumentException if the specified user is not * associated with this database */ public void removeUser(User user); /** *

      Save any pending changes to the underlying persistence layer.

      * * @exception Exception if a database access error occurs */ public void save() throws Exception; } libstruts1.2-java-1.2.9/src/example/org/apache/struts/webapp/example/WelcomeAction.java0000644000175000017500000000552110404045210031560 0ustar arnaudarnaud00000000000000/* * $Id: WelcomeAction.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 2000-2004 Apache Software Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.example; import java.util.ArrayList; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.webapp.example.UserDatabase; import org.apache.struts.util.MessageResources; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionForward; /** *

      * Confirm required resources are available. If a resource is missing, * forward to "failure". Otherwise, forward to "success", where * success is usually the "welcome" page. *

      *

      * Since "required resources" includes the application MessageResources * the failure page must not use the standard error or message tags. * Instead, it display the Strings stored in an ArrayList stored under * the request attribute "ERROR". *

      * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public final class WelcomeAction extends BaseAction { // --------------------------------------------------------- Public Methods // See superclass for Javadoc public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // Setup message array in case there are errors ArrayList messages = new ArrayList(); // Confirm message resources loaded MessageResources resources = getResources(request); if (resources==null) { messages.add(Constants.ERROR_MESSAGES_NOT_LOADED); } // Confirm database loaded UserDatabase userDatabase = getUserDatabase(request); if (userDatabase==null) { messages.add(Constants.ERROR_DATABASE_NOT_LOADED); } // If there were errors, forward to our failure page if (messages.size()>0) { request.setAttribute(Constants.ERROR_KEY,messages); return findFailure(mapping); } // Forward to our success page return findSuccess(mapping); } } libstruts1.2-java-1.2.9/src/examples/0000755000175000017500000000000010404045172020066 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/src/examples/org/0000755000175000017500000000000010404045172020655 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/src/examples/org/apache/0000755000175000017500000000000010404045172022076 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/src/examples/org/apache/struts/0000755000175000017500000000000010404045172023442 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/0000755000175000017500000000000010404045172024720 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/dispatch/0000755000175000017500000000000010423130301026505 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/dispatch/ActionDispatcherExample.java0000644000175000017500000001013710404045234034123 0ustar arnaudarnaud00000000000000/* * $Id: ActionDispatcherExample.java 383716 2006-03-07 00:04:15Z niallp $ * * Copyright 2006 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.dispatch; import java.util.Map; import java.util.HashMap; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.actions.ActionDispatcher; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessage; import org.apache.struts.action.ActionMessages; /** * Example DispatchAction. * * @version $Rev: 383716 $ $Date: 2006-03-07 00:04:15 +0000 (Tue, 07 Mar 2006) $ */ public class ActionDispatcherExample extends Action { private ActionDispatcher dispatcher = new ActionDispatcher(this, ActionDispatcher.DISPATCH_FLAVOR); private int fooCount; private int barCount; /** * Execute method. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception Exception if business logic throws an exception */ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { return dispatcher.execute(mapping, form, request, response); } /** * Example "foo" method. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception Exception if business logic throws an exception */ public ActionForward doFoo(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { fooCount++; ActionMessages messages = new ActionMessages(); messages.add("foo", new ActionMessage("count.foo.message", fooCount+"")); saveMessages(request, messages); return (mapping.findForward("success")); } /** * Example "bar" method. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception Exception if business logic throws an exception */ public ActionForward doBar(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { barCount++; ActionMessages messages = new ActionMessages(); messages.add("bar", new ActionMessage("count.bar.message", barCount+"")); saveMessages(request, messages); return (mapping.findForward("success")); } } libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/dispatch/DispatchExampleAction.java0000644000175000017500000000635610404045240033601 0ustar arnaudarnaud00000000000000/* * $Id: DispatchExampleAction.java 383716 2006-03-07 00:04:15Z niallp $ * * Copyright 2006 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.dispatch; import java.util.Map; import java.util.HashMap; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.actions.DispatchAction; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessage; import org.apache.struts.action.ActionMessages; /** * Example DispatchAction. * * @version $Rev: 383716 $ $Date: 2006-03-07 00:04:15 +0000 (Tue, 07 Mar 2006) $ */ public class DispatchExampleAction extends DispatchAction { private Map keyMethodMap = new HashMap(); private int fooCount; private int barCount; /** * Example "foo" method. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception Exception if business logic throws an exception */ public ActionForward doFoo(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { fooCount++; ActionMessages messages = new ActionMessages(); messages.add("foo", new ActionMessage("count.foo.message", fooCount+"")); saveMessages(request, messages); return (mapping.findForward("success")); } /** * Example "bar" method. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception Exception if business logic throws an exception */ public ActionForward doBar(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { barCount++; ActionMessages messages = new ActionMessages(); messages.add("bar", new ActionMessage("count.bar.message", barCount+"")); saveMessages(request, messages); return (mapping.findForward("success")); } } ././@LongLink0000644000175000017500000000015110423140533011314 Lustar 00000000000000libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/dispatch/EventActionDispatcherExample.javalibstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/dispatch/EventActionDispatcherExample.0000644000175000017500000001010710404045216034260 0ustar arnaudarnaud00000000000000/* * $Id: EventActionDispatcherExample.java 384093 2006-03-08 01:58:10Z niallp $ * * Copyright 2006 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.dispatch; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.actions.ActionDispatcher; import org.apache.struts.actions.EventActionDispatcher; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessage; import org.apache.struts.action.ActionMessages; /** * Example EventActionDispatcher. * * @version $Rev: 384093 $ $Date: 2006-03-08 01:58:10 +0000 (Wed, 08 Mar 2006) $ */ public class EventActionDispatcherExample extends Action { private ActionDispatcher dispatcher = new EventActionDispatcher(this); private int fooCount; private int barCount; /** * Execute method. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception Exception if business logic throws an exception */ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { return dispatcher.execute(mapping, form, request, response); } /** * Example "foo" method. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception Exception if business logic throws an exception */ public ActionForward doFoo(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { fooCount++; ActionMessages messages = new ActionMessages(); messages.add("foo", new ActionMessage("count.foo.message", fooCount+"")); saveMessages(request, messages); return (mapping.findForward("success")); } /** * Example "bar" method. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception Exception if business logic throws an exception */ public ActionForward doBar(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { barCount++; ActionMessages messages = new ActionMessages(); messages.add("bar", new ActionMessage("count.bar.message", barCount+"")); saveMessages(request, messages); return (mapping.findForward("success")); } } ././@LongLink0000644000175000017500000000014710423140533011321 Lustar 00000000000000libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/dispatch/EventDispatchActionExample.javalibstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/dispatch/EventDispatchActionExample.ja0000644000175000017500000000640310404045252034250 0ustar arnaudarnaud00000000000000/* * $Id: EventDispatchActionExample.java 384093 2006-03-08 01:58:10Z niallp $ * * Copyright 2006 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.dispatch; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.actions.ActionDispatcher; import org.apache.struts.actions.EventDispatchAction; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessage; import org.apache.struts.action.ActionMessages; /** * Example EventDispatchAction. * * @version $Rev: 384093 $ $Date: 2006-03-08 01:58:10 +0000 (Wed, 08 Mar 2006) $ */ public class EventDispatchActionExample extends EventDispatchAction { private int fooCount; private int barCount; /** * Example "foo" method. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception Exception if business logic throws an exception */ public ActionForward doFoo(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { fooCount++; ActionMessages messages = new ActionMessages(); messages.add("foo", new ActionMessage("count.foo.message", fooCount+"")); saveMessages(request, messages); return (mapping.findForward("success")); } /** * Example "bar" method. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception Exception if business logic throws an exception */ public ActionForward doBar(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { barCount++; ActionMessages messages = new ActionMessages(); messages.add("bar", new ActionMessage("count.bar.message", barCount+"")); saveMessages(request, messages); return (mapping.findForward("success")); } } ././@LongLink0000644000175000017500000000015010423140533011313 Lustar 00000000000000libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/dispatch/LookupDispatchExampleAction.javalibstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/dispatch/LookupDispatchExampleAction.j0000644000175000017500000000731510404045210034274 0ustar arnaudarnaud00000000000000/* * $Id: LookupDispatchExampleAction.java 383716 2006-03-07 00:04:15Z niallp $ * * Copyright 2006 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.dispatch; import java.util.Map; import java.util.HashMap; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.actions.LookupDispatchAction; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessage; import org.apache.struts.action.ActionMessages; /** * Example LookupDispatchAction. * * @version $Rev: 383716 $ $Date: 2006-03-07 00:04:15 +0000 (Tue, 07 Mar 2006) $ */ public class LookupDispatchExampleAction extends LookupDispatchAction { private Map keyMethodMap = new HashMap(); private int fooCount; private int barCount; /** * Constructor - populate the key method map. */ public LookupDispatchExampleAction() { keyMethodMap.put("button.foo.label", "doFoo"); keyMethodMap.put("button.bar.label", "doBar"); } /** * Example "foo" method. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception Exception if business logic throws an exception */ public ActionForward doFoo(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { fooCount++; ActionMessages messages = new ActionMessages(); messages.add("foo", new ActionMessage("count.foo.message", fooCount+"")); saveMessages(request, messages); return (mapping.findForward("success")); } /** * Example "bar" method. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception Exception if business logic throws an exception */ public ActionForward doBar(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { barCount++; ActionMessages messages = new ActionMessages(); messages.add("bar", new ActionMessage("count.bar.message", barCount+"")); saveMessages(request, messages); return (mapping.findForward("success")); } /** * Provides the mapping from resource key to method name. * * @return Resource key / method name map. */ protected Map getKeyMethodMap() { return keyMethodMap; } } ././@LongLink0000644000175000017500000000015110423140533011314 Lustar 00000000000000libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/dispatch/MappingDispatchExampleAction.javalibstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/dispatch/MappingDispatchExampleAction.0000644000175000017500000000641210404045236034251 0ustar arnaudarnaud00000000000000/* * $Id: MappingDispatchExampleAction.java 383716 2006-03-07 00:04:15Z niallp $ * * Copyright 2006 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.dispatch; import java.util.Map; import java.util.HashMap; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.actions.MappingDispatchAction; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessage; import org.apache.struts.action.ActionMessages; /** * Example DispatchAction. * * @version $Rev: 383716 $ $Date: 2006-03-07 00:04:15 +0000 (Tue, 07 Mar 2006) $ */ public class MappingDispatchExampleAction extends MappingDispatchAction { private Map keyMethodMap = new HashMap(); private int fooCount; private int barCount; /** * Example "foo" method. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception Exception if business logic throws an exception */ public ActionForward doFoo(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { fooCount++; ActionMessages messages = new ActionMessages(); messages.add("foo", new ActionMessage("count.foo.message", fooCount+"")); saveMessages(request, messages); return (mapping.findForward("success")); } /** * Example "bar" method. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception Exception if business logic throws an exception */ public ActionForward doBar(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { barCount++; ActionMessages messages = new ActionMessages(); messages.add("bar", new ActionMessage("count.bar.message", barCount+"")); saveMessages(request, messages); return (mapping.findForward("success")); } } libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/dispatch/MessageResources.properties0000644000175000017500000000145610404045214034117 0ustar arnaudarnaud00000000000000index.home=Home index.title=DispatchAction Examples dispatch.title=DispatchAction Example mapping.title=MappingDispatchAction Example lookup.title=LookupDispatchAction Example actionDispatcher.title=ActionDispatcher Example eventDispatcher.title=EventActionDispatcher Example eventAction.title=EventDispatchAction Example button.foo.label=Foo Button button.bar.label=Bar Button button.invalid.label=Invalid Button button.default.label=Default Button method.invalid.label=Invalid Method method.execute.label=Execute Method parameter.wrong.label=Wrong Parameter parameter.missing.label=Missing Parameter count.foo.message=Foo button count = {0} count.bar.message=Bar button count = {0} dispatch.ServletException=ServletException: {0} dispatch.NoSuchMethodException=NoSuchMethodException: {0} ././@LongLink0000644000175000017500000000014610423140533011320 Lustar 00000000000000libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/dispatch/MessageResources_fr.propertieslibstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/dispatch/MessageResources_fr.propertie0000644000175000017500000000126510404045222034420 0ustar arnaudarnaud00000000000000index.title=DispatchAction Exemples dispatch.title=DispatchAction Exemple mapping.title=MappingDispatchAction Exemple lookup.title=LookupDispatchAction Exemple actionDispatcher.title=ActionDispatcher Exemple eventDispatcher.title=EventActionDispatcher Exemple eventAction.title=EventDispatchAction Exemple button.foo.label=Foo Bouton button.bar.label=Bar Bouton button.invalid.label=Invalide Bouton button.default.label=Défaut Bouton method.invalid.label=Invalid Méthode method.execute.label=Execute Méthode parameter.wrong.label=Mauvais Paramètre parameter.missing.label=Manquer Paramètre count.foo.message=Foo bouton compte = {0} count.bar.message=Bar bouton compte = {0} libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/examples/0000755000175000017500000000000010423130301026524 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/examples/CustomActionForm.java0000644000175000017500000000307110404045216032635 0ustar arnaudarnaud00000000000000/* * $Id: CustomActionForm.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.examples; import org.apache.struts.action.*; /** * Custom ActionForm to demonstrate usage. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public final class CustomActionForm extends ActionForm { // --------------------------------------------------- Instance Variables /** * An example String property. */ private String example = ""; // ----------------------------------------------------------- Properties /** * Return the example String. */ public String getExample() { return (this.example); } /** * Set the example String. * * @param example The new example String. */ public void setExample(String example) { this.example = example; } } libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/examples/CustomActionForward.java0000644000175000017500000000310510404045172033335 0ustar arnaudarnaud00000000000000/* * $Id: CustomActionForward.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.examples; import org.apache.struts.action.*; /** * Custom ActionForward to demonstrate usage. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public final class CustomActionForward extends ActionForward { // --------------------------------------------------- Instance Variables /** * An example String property. */ private String example = ""; // ----------------------------------------------------------- Properties /** * Return the example String. */ public String getExample() { return (this.example); } /** * Set the example String. * * @param example The new example String. */ public void setExample(String example) { this.example = example; } } libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/examples/CustomActionMapping.java0000644000175000017500000000310510404045246033326 0ustar arnaudarnaud00000000000000/* * $Id: CustomActionMapping.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.examples; import org.apache.struts.action.*; /** * Custom ActionMapping to demonstrate usage. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public final class CustomActionMapping extends ActionMapping { // --------------------------------------------------- Instance Variables /** * An example String property. */ private String example = ""; // ----------------------------------------------------------- Properties /** * Return the example String. */ public String getExample() { return (this.example); } /** * Set the example String. * * @param example The new example String. */ public void setExample(String example) { this.example = example; } } libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/examples/CustomFormBean.java0000644000175000017500000000310610404045240032261 0ustar arnaudarnaud00000000000000/* * $Id: CustomFormBean.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.examples; import org.apache.struts.config.FormBeanConfig; /** * Custom FormBeanConfig to demonstrate usage. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public final class CustomFormBean extends FormBeanConfig { // --------------------------------------------------- Instance Variables /** * An example String property. */ private String example = ""; // ----------------------------------------------------------- Properties /** * Return the example String. */ public String getExample() { return (this.example); } /** * Set the example String. * * @param example The new example String. */ public void setExample(String example) { this.example = example; } } libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/examples/MessageResource.properties0000644000175000017500000000165310404045230033750 0ustar arnaudarnaud00000000000000# -- standard errors -- errors.header=
        errors.prefix=
      • errors.suffix=
      • errors.footer=
      # -- validator -- errors.invalid={0} is invalid. errors.maxlength={0} can not be greater than {1} characters. errors.minlength={0} can not be less than {1} characters. errors.range={0} is not in the range {1} through {2}. errors.required={0} is required. errors.byte={0} must be an byte. errors.date={0} is not a date. errors.double={0} must be an double. errors.float={0} must be an float. errors.integer={0} must be an integer. errors.long={0} must be an long. errors.short={0} must be an short. errors.creditcard={0} is not a valid credit card number. errors.email={0} is an invalid e-mail address. # -- other -- errors.cancel=Operation cancelled. errors.detail={0} errors.general=The process did not complete. Details should follow. errors.token=Request could not be completed. Operation is not in sequence. ././@LongLink0000644000175000017500000000014510423140533011317 Lustar 00000000000000libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/examples/MessageResource_ja.propertieslibstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/examples/MessageResource_ja.properties0000644000175000017500000000420110404045236034420 0ustar arnaudarnaud00000000000000# -- standard errors -- errors.header=
        errors.prefix=
      • errors.suffix=
      • errors.footer=
      # -- validator -- errors.invalid={0} \u306f\u6b63\u3057\u304f\u3042\u308a\u307e\u305b\u3093\u3002 errors.maxlength={0} \u306F {1} \u6587\u5B57\u4EE5\u4E0B\u3067\u306A\u3051\u308C\u3070\u306A\u308A\u307E\u305B\u3093\u3002 errors.minlength={0} \u306f {1} \u6587\u5b57\u4ee5\u4e0a\u3067\u306a\u3051\u308c\u3070\u3044\u3051\u307e\u305b\u3093 errors.range={0} \u306f {1} \u304b\u3089 {2} \u306e\u9593\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 errors.required={0} \u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 errors.byte={0} \u306fbyte\u578b\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 errors.date={0} \u306f\u65e5\u4ed8\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 errors.double={0} \u306fdouble\u578b\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 errors.float={0} \u306ffloat\u578b\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 errors.integer={0} \u306finteger\u578b\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 errors.long={0} \u306flong\u578b\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 errors.short={0} \u306fshort\u578b\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 errors.creditcard={0} \u306F\u6B63\u3057\u3044\u30AF\u30EC\u30B8\u30C3\u30C8\u30FC\u30AB\u30FC\u30C9\u756A\u53F7\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002 errors.email={0} \u306F\u6B63\u3057\u3044\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002 # -- other -- errors.cancel=\u64CD\u4F5C\u306F\u4E2D\u65AD\u3055\u308C\u307E\u3057\u305F\u3002 errors.detail={0} errors.general=\u51E6\u7406\u306F\u5B8C\u4E86\u3057\u3066\u3044\u307E\u305B\u3093\u3002\u8A73\u7D30\u306F\u4EE5\u4E0B\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002 errors.token=\u30EA\u30AF\u30A8\u30B9\u30C8\u3092\u5B8C\u4E86\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u6B63\u3057\u3044\u9806\u5E8F\u3067\u64CD\u4F5C\u304C\u884C\u308F\u308C\u3066\u3044\u307E\u305B\u3093\u3002 libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/exercise/0000755000175000017500000000000010423130301026515 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/exercise/HtmlSettersAction.java0000644000175000017500000000440510404045212033004 0ustar arnaudarnaud00000000000000/* * $Id: HtmlSettersAction.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.exercise; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; /** * Do-nothing action that accepts the changes made automatically in our form * bean, and then returns control to the input form (if "Save" was pressed) * or the main menu (if "Cancel" was pressed). * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class HtmlSettersAction extends Action { /** * Forward to the input form if "Save" was pressed or the main menu * if "Cancel" was pressed. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception Exception if business logic throws an exception */ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { if (isCancelled(request)) return (mapping.findForward("redirect-default")); else return (mapping.findForward("input")); } } libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/exercise/ImageAction.java0000644000175000017500000000440310404045240031547 0ustar arnaudarnaud00000000000000/* * $Id: ImageAction.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.exercise; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.InputStream; import java.io.OutputStream; /** * Read image from resource given as ActionMapping parameter * and copy to output stream. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class ImageAction extends Action { /** * Read image from resource given as ActionMapping parameter * and copy to output stream. * * @exception java.lang.Exception on input/output error */ public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // e.g. /$module/struts-power.gif // :FIXME: Should compute module String image = mapping.getParameter(); byte[] buffer = new byte[2048]; int bytesRead; InputStream input = getServlet().getServletContext().getResourceAsStream(image); OutputStream out = response.getOutputStream(); while ((bytesRead = input.read(buffer)) != -1) { out.write(buffer, 0, bytesRead); } out.close(); return null; } }libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/exercise/MessageResources.properties0000644000175000017500000000216610404045244034131 0ustar arnaudarnaud00000000000000# # Resources for testing tag. # errors.header= errors.footer=
      errors.prefix= errors.suffix= errors.invalidCancel=Cancel is a not an valid operation for this Action. property1error1=Property 1, Error 1 property2error1=Property 2, Error 1 property2error2=Property 2, Error 2 property2error3=Property 2, Error 3 property3error1=Property 3, Error 1 property3error2=Property 3, Error 2 globalError=Global Error # # Resources for testing tag. # messages.header= messages.footer=
      property1message1=Property 1, Message 1 property2message1=Property 2, Message 1 property2message2=Property 2, Message 2 property2message3=Property 2, Message 3 property3message1=Property 3, Message 1 property3message2=Property 3, Message 2 globalMessage=Global Message # # Resources for testing . # resources0=Resources 0 resources1=Resources 1 resources2=Resources 2 # # Resources for testing tag. # double.pattern=#,000.00 date.pattern=EEE, MMM d, ''yy locale.de= locale.en=(*) locale.fr= locale.jp= ././@LongLink0000644000175000017500000000014610423140533011320 Lustar 00000000000000libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/exercise/MessageResources_de.propertieslibstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/exercise/MessageResources_de.propertie0000644000175000017500000000014510404045240034405 0ustar arnaudarnaud00000000000000# # Resources for testing tag. # double.pattern=#.000,00 locale.en= locale.de=(*) ././@LongLink0000644000175000017500000000014610423140533011320 Lustar 00000000000000libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/exercise/MessageResources_fr.propertieslibstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/exercise/MessageResources_fr.propertie0000644000175000017500000000015210404045232034423 0ustar arnaudarnaud00000000000000# # Resources for testing tag. # double.pattern=#\u00a0000,00 locale.en= locale.fr=(*) ././@LongLink0000644000175000017500000000014610423140533011320 Lustar 00000000000000libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/exercise/MessageResources_ja.propertieslibstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/exercise/MessageResources_ja.propertie0000644000175000017500000000310010404045222034401 0ustar arnaudarnaud00000000000000# # Resources for testing tag. # errors.header= errors.footer=
      errors.prefix= errors.suffix= property1error1=\u30d7\u30ed\u30d1\u30c6\u30a3 1, \u30a8\u30e9\u30fc 1 property2error1=\u30d7\u30ed\u30d1\u30c6\u30a3 2, \u30a8\u30e9\u30fc 1 property2error2=\u30d7\u30ed\u30d1\u30c6\u30a3 2, \u30a8\u30e9\u30fc 2 property2error3=\u30d7\u30ed\u30d1\u30c6\u30a3 2, \u30a8\u30e9\u30fc 3 property3error1=\u30d7\u30ed\u30d1\u30c6\u30a3 3, \u30a8\u30e9\u30fc 1 property3error2=\u30d7\u30ed\u30d1\u30c6\u30a3 3, \u30a8\u30e9\u30fc 2 globalError=\u30b0\u30ed\u30fc\u30d0\u30eb\u30a8\u30e9\u30fc # # Resources for testing tag. # messages.header= messages.footer=
      property1message1=\u30d7\u30ed\u30d1\u30c6\u30a3 1, \u30e1\u30c3\u30bb\u30fc\u30b8 1 property2message1=\u30d7\u30ed\u30d1\u30c6\u30a3 2, \u30e1\u30c3\u30bb\u30fc\u30b8 1 property2message2=\u30d7\u30ed\u30d1\u30c6\u30a3 2, \u30e1\u30c3\u30bb\u30fc\u30b8 2 property2message3=\u30d7\u30ed\u30d1\u30c6\u30a3 2, \u30e1\u30c3\u30bb\u30fc\u30b8 3 property3message1=\u30d7\u30ed\u30d1\u30c6\u30a3 3, \u30e1\u30c3\u30bb\u30fc\u30b8 1 property3message2=\u30d7\u30ed\u30d1\u30c6\u30a3 3, \u30e1\u30c3\u30bb\u30fc\u30b8 2 globalMessage=\u30b0\u30ed\u30fc\u30d0\u30eb\u30e1\u30c3\u30bb\u30fc\u30b8 # # Resources for testing . # resources0=\u30ea\u30bd\u30fc\u30b9 0 resources1=\u30ea\u30bd\u30fc\u30b9 1 resources2=\u30ea\u30bd\u30fc\u30b9 2 locale.jp=(*) date.pattern=yyyy\u5E74MM\u6708dd\u65E5 double.pattern=#,000.00 libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/exercise/SuccessAction.java0000644000175000017500000000313510404045246032144 0ustar arnaudarnaud00000000000000/* * $Id: SuccessAction.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.exercise; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; /** * Dispatch control to the "success" forward. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class SuccessAction extends Action { public static String SUCCESS = "success"; /** * Dispatch control to the "success" forward. */ public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { return mapping.findForward(SUCCESS); } }libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/exercise/TestBean.java0000644000175000017500000002745710404045204031112 0ustar arnaudarnaud00000000000000/* * $Id: TestBean.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.exercise; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Vector; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; import org.apache.struts.util.LabelValueBean; /** * General purpose test bean for Struts custom tag tests. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class TestBean extends ActionForm { // ------------------------------------------------------------- Properties /** * A collection property where the elements of the collection are * of type LabelValueBean. */ private Collection beanCollection = null; public Collection getBeanCollection() { if (beanCollection == null) { Vector entries = new Vector(10); entries.add(new LabelValueBean("Label 0", "Value 0")); entries.add(new LabelValueBean("Label 1", "Value 1")); entries.add(new LabelValueBean("Label 2", "Value 2")); entries.add(new LabelValueBean("Label 3", "Value 3")); entries.add(new LabelValueBean("Label 4", "Value 4")); entries.add(new LabelValueBean("Label 5", "Value 5")); entries.add(new LabelValueBean("Label 6", "Value 6")); entries.add(new LabelValueBean("Label 7", "Value 7")); entries.add(new LabelValueBean("Label 8", "Value 8")); entries.add(new LabelValueBean("Label 9", "Value 9")); beanCollection = entries; } return (beanCollection); } public void setBeanCollection(Collection beanCollection) { this.beanCollection = beanCollection; } /** * A multiple-String SELECT element using a bean collection. */ private String[] beanCollectionSelect = { "Value 1", "Value 3", "Value 5" }; public String[] getBeanCollectionSelect() { return (this.beanCollectionSelect); } public void setBeanCollectionSelect(String beanCollectionSelect[]) { this.beanCollectionSelect = beanCollectionSelect; } /** * A boolean property whose initial value is true. */ private boolean booleanProperty = true; public boolean getBooleanProperty() { return (booleanProperty); } public void setBooleanProperty(boolean booleanProperty) { this.booleanProperty = booleanProperty; } /** * A multiple-String SELECT element using a collection. */ private String[] collectionSelect = { "Value 2", "Value 4", "Value 6" }; public String[] getCollectionSelect() { return (this.collectionSelect); } public void setCollectionSelect(String collectionSelect[]) { this.collectionSelect = collectionSelect; } /** * A double property. */ private double doubleProperty = 321.0; public double getDoubleProperty() { return (this.doubleProperty); } public void setDoubleProperty(double doubleProperty) { this.doubleProperty = doubleProperty; } /** * A boolean property whose initial value is false */ private boolean falseProperty = false; public boolean getFalseProperty() { return (falseProperty); } public void setFalseProperty(boolean falseProperty) { this.falseProperty = falseProperty; } /** * A float property. */ private float floatProperty = (float) 123.0; public float getFloatProperty() { return (this.floatProperty); } public void setFloatProperty(float floatProperty) { this.floatProperty = floatProperty; } /** * Integer arrays that are accessed as an array as well as indexed. */ private int intArray[] = { 0, 10, 20, 30, 40 }; public int[] getIntArray() { return (this.intArray); } public void setIntArray(int intArray[]) { this.intArray = intArray; } private int intIndexed[] = { 0, 10, 20, 30, 40 }; public int getIntIndexed(int index) { return (intIndexed[index]); } public void setIntIndexed(int index, int value) { intIndexed[index] = value; } private int intMultibox[] = new int[0]; public int[] getIntMultibox() { return (this.intMultibox); } public void setIntMultibox(int intMultibox[]) { this.intMultibox = intMultibox; } /** * An integer property. */ private int intProperty = 123; public int getIntProperty() { return (this.intProperty); } public void setIntProperty(int intProperty) { this.intProperty = intProperty; } /** * A long property. */ private long longProperty = 321; public long getLongProperty() { return (this.longProperty); } public void setLongProperty(long longProperty) { this.longProperty = longProperty; } /** * A multiple-String SELECT element. */ private String[] multipleSelect = { "Multiple 3", "Multiple 5", "Multiple 7" }; public String[] getMultipleSelect() { return (this.multipleSelect); } public void setMultipleSelect(String multipleSelect[]) { this.multipleSelect = multipleSelect; } /** * A nested reference to another test bean (populated as needed). */ private TestBean nested = null; public TestBean getNested() { if (nested == null) nested = new TestBean(); return (nested); } /** * A String property with an initial value of null. */ private String nullProperty = null; public String getNullProperty() { return (this.nullProperty); } public void setNullProperty(String nullProperty) { this.nullProperty = nullProperty; } /** * A short property. */ private short shortProperty = (short) 987; public short getShortProperty() { return (this.shortProperty); } public void setShortProperty(short shortProperty) { this.shortProperty = shortProperty; } /** * A single-String value for a SELECT element. */ private String singleSelect = "Single 5"; public String getSingleSelect() { return (this.singleSelect); } public void setSingleSelect(String singleSelect) { this.singleSelect = singleSelect; } /** * String arrays that are accessed as an array as well as indexed. */ private String stringArray[] = { "String 0", "String 1", "String 2", "String 3", "String 4" }; public String[] getStringArray() { return (this.stringArray); } public void setStringArray(String stringArray[]) { this.stringArray = stringArray; } private String stringIndexed[] = { "String 0", "String 1", "String 2", "String 3", "String 4" }; public String getStringIndexed(int index) { return (stringIndexed[index]); } public void setStringIndexed(int index, String value) { stringIndexed[index] = value; } private String stringMultibox[] = new String[0]; public String[] getStringMultibox() { return (this.stringMultibox); } public void setStringMultibox(String stringMultibox[]) { this.stringMultibox = stringMultibox; } /** * A String property. */ private String stringProperty = "This is a string"; public String getStringProperty() { return (this.stringProperty); } public void setStringProperty(String stringProperty) { this.stringProperty = stringProperty; } /** * An empty String property. */ private String emptyStringProperty = ""; public String getEmptyStringProperty() { return (this.emptyStringProperty); } public void setEmptyStringProperty(String emptyStringProperty) { this.emptyStringProperty = emptyStringProperty; } /** * A single-String value for a SELECT element based on resource strings. */ private String resourcesSelect = "Resources 2"; public String getResourcesSelect() { return (this.resourcesSelect); } public void setResourcesSelect(String resourcesSelect) { this.resourcesSelect = resourcesSelect; } /** * A property that allows a null value but is still used in a SELECT. */ private String withNulls = null; public String getWithNulls() { return (this.withNulls); } public void setWithNulls(String withNulls) { this.withNulls = withNulls; } /** * A List property. */ private List listProperty = null; public List getListProperty() { if (listProperty == null) { listProperty = new ArrayList(); listProperty.add("dummy"); } return listProperty; } public void setListProperty(List listProperty) { this.listProperty = listProperty; } /** * An empty List property. */ private List emptyListProperty = null; public List getEmptyListProperty() { if (emptyListProperty == null) { emptyListProperty = new ArrayList(); } return emptyListProperty; } public void setEmptyListProperty(List emptyListProperty) { this.emptyListProperty = emptyListProperty; } /** * A Map property. */ private Map mapProperty = null; public Map getMapProperty() { if (mapProperty == null) { mapProperty = new HashMap(); mapProperty.put("dummy", "dummy"); } return mapProperty; } public void setMapProperty(Map mapProperty) { this.mapProperty = mapProperty; } /** * An empty Map property. */ private Map emptyMapProperty = null; public Map getEmptyMapProperty() { if (emptyMapProperty == null) { emptyMapProperty = new HashMap(); } return emptyMapProperty; } public void setEmptyMapProperty(Map emptyMapProperty) { this.emptyMapProperty = emptyMapProperty; } // --------------------------------------------------------- Public Methods /** * Reset the properties that will be received as input. */ public void reset(ActionMapping mapping, HttpServletRequest request) { booleanProperty = false; collectionSelect = new String[0]; intMultibox = new int[0]; multipleSelect = new String[0]; stringMultibox = new String[0]; if (nested != null) nested.reset(mapping, request); } } libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/upload/0000755000175000017500000000000010423130301026172 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/upload/UploadAction.java0000644000175000017500000001324010404045240031425 0ustar arnaudarnaud00000000000000/* * $Id: UploadAction.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.upload; import java.io.ByteArrayOutputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.upload.FormFile; /** * This class takes the UploadForm and retrieves the text value * and file attributes and puts them in the request for the display.jsp * page to display them * * @author Mike Schachter * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class UploadAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { if (form instanceof UploadForm) { //this line is here for when the input page is upload-utf8.jsp, //it sets the correct character encoding for the response String encoding = request.getCharacterEncoding(); if ((encoding != null) && (encoding.equalsIgnoreCase("utf-8"))) { response.setContentType("text/html; charset=utf-8"); } UploadForm theForm = (UploadForm) form; //retrieve the text data String text = theForm.getTheText(); //retrieve the query string value String queryValue = theForm.getQueryParam(); //retrieve the file representation FormFile file = theForm.getTheFile(); //retrieve the file name String fileName= file.getFileName(); //retrieve the content type String contentType = file.getContentType(); boolean writeFile = theForm.getWriteFile(); //retrieve the file size String size = (file.getFileSize() + " bytes"); String data = null; try { //retrieve the file data ByteArrayOutputStream baos = new ByteArrayOutputStream(); InputStream stream = file.getInputStream(); if (!writeFile) { //only write files out that are less than 1MB if (file.getFileSize() < (4*1024000)) { byte[] buffer = new byte[8192]; int bytesRead = 0; while ((bytesRead = stream.read(buffer, 0, 8192)) != -1) { baos.write(buffer, 0, bytesRead); } data = new String(baos.toByteArray()); } else { data = new String("The file is greater than 4MB, " + " and has not been written to stream." + " File Size: " + file.getFileSize() + " bytes. This is a" + " limitation of this particular web application, hard-coded" + " in org.apache.struts.webapp.upload.UploadAction"); } } else { //write the file to the file specified OutputStream bos = new FileOutputStream(theForm.getFilePath()); int bytesRead = 0; byte[] buffer = new byte[8192]; while ((bytesRead = stream.read(buffer, 0, 8192)) != -1) { bos.write(buffer, 0, bytesRead); } bos.close(); data = "The file has been written to \"" + theForm.getFilePath() + "\""; } //close the stream stream.close(); } catch (FileNotFoundException fnfe) { return null; } catch (IOException ioe) { return null; } //place the data into the request for retrieval from display.jsp request.setAttribute("text", text); request.setAttribute("queryValue", queryValue); request.setAttribute("fileName", fileName); request.setAttribute("contentType", contentType); request.setAttribute("size", size); request.setAttribute("data", data); //destroy the temporary file created file.destroy(); //return a forward to display.jsp return mapping.findForward("display"); } //this shouldn't happen in this example return null; } }libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/upload/UploadForm.java0000644000175000017500000001100710404045214031113 0ustar arnaudarnaud00000000000000/* * $Id: UploadForm.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.upload; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.*; import org.apache.struts.upload.FormFile; import org.apache.struts.upload.MultipartRequestHandler; /** * This class is a placeholder for form values. In a multipart request, files are represented by * set and get methods that use the class org.apache.struts.upload.FormFile, an interface with * basic methods to retrieve file information. The actual structure of the FormFile is dependant * on the underlying impelementation of multipart request handling. The default implementation * that struts uses is org.apache.struts.upload.CommonsMultipartRequestHandler. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class UploadForm extends ActionForm { /** * The value of the text the user has sent as form data */ protected String theText; /** * The value of the embedded query string parameter */ protected String queryParam; /** * Whether or not to write to a file */ protected boolean writeFile; /** * The file that the user has uploaded */ protected FormFile theFile; /** * The file path to write to */ protected String filePath; /** * Retrieve the value of the text the user has sent as form data */ public String getTheText() { return theText; } /** * Set the value of the form data text */ public void setTheText(String theText) { this.theText = theText; } /** * Retrieve the value of the query string parameter */ public String getQueryParam() { return queryParam; } /** * Set the value of the query string parameter */ public void setQueryParam(String queryParam) { this.queryParam = queryParam; } /** * Retrieve a representation of the file the user has uploaded */ public FormFile getTheFile() { return theFile; } /** * Set a representation of the file the user has uploaded */ public void setTheFile(FormFile theFile) { this.theFile = theFile; } /** * Set whether or not to write to a file */ public void setWriteFile(boolean writeFile) { this.writeFile = writeFile; } /** * Get whether or not to write to a file */ public boolean getWriteFile() { return writeFile; } /** * Set the path to write a file to */ public void setFilePath(String filePath) { this.filePath = filePath; } /** * Get the path to write a file to */ public String getFilePath() { return filePath; } public void reset() { writeFile = false; } /** * Check to make sure the client hasn't exceeded the maximum allowed upload size inside of this * validate method. */ public ActionErrors validate( ActionMapping mapping, HttpServletRequest request) { ActionErrors errors = null; //has the maximum length been exceeded? Boolean maxLengthExceeded = (Boolean) request.getAttribute( MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED); if ((maxLengthExceeded != null) && (maxLengthExceeded.booleanValue())) { errors = new ActionErrors(); errors.add( ActionMessages.GLOBAL_MESSAGE , new ActionMessage("maxLengthExceeded")); errors.add( ActionMessages.GLOBAL_MESSAGE , new ActionMessage("maxLengthExplanation")); } return errors; } } libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/upload/UploadResources.properties0000644000175000017500000000042610404045204033437 0ustar arnaudarnaud00000000000000maxLengthExceeded=The maximum upload length has been exceeded by the client. maxLengthExplanation=Note that the maximum allowed size of an uploaded file for this application is two megabytes. See the "/WEB-INF/upload/struts-config.xml" file for this application to change it. libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/upload/UploadResources_ja.properties0000644000175000017500000000072710404045222034115 0ustar arnaudarnaud00000000000000maxLengthExceeded=\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3067\u304d\u308b\u6700\u5927\u5024\u3092\u8d85\u3048\u307e\u3057\u305f maxLengthExplanation=\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3067\u304d\u308b\u30d5\u30a1\u30a4\u30eb\u306e\u6700\u5927\u30b5\u30a4\u30ba\u306f2MB\u3067\u3059\u3002\u6700\u5927\u30b5\u30a4\u30ba\u3092\u5909\u66f4\u3059\u308b\u5834\u5408\u306f\u3001"/WEB-INF/upload/struts-config.xml"\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002 libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/validator/0000755000175000017500000000000010423130301026673 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/validator/CityStateZip.java0000644000175000017500000000301210404045246032142 0ustar arnaudarnaud00000000000000/* * $Id: CityStateZip.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 2000-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.validator; /** * Just used to provide an indexed properties example. * */ public class CityStateZip implements java.io.Serializable { private String sCity = null; private String sStateProv = null; private String[] sZipPostal = new String[3]; public String getCity() { return sCity; } public void setCity(String sCity) { this.sCity = sCity; } public String getStateProv() { return sStateProv; } public void setStateProv(String sStateProv) { this.sStateProv = sStateProv; } public String getZipPostal(int index) { return sZipPostal[index]; } public void setZipPostal(int index, String value) { this.sZipPostal[index] = value; } } ././@LongLink0000644000175000017500000000015510423140533011320 Lustar 00000000000000libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/validator/DifferentMessageResources.propertieslibstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/validator/DifferentMessageResources.pr0000644000175000017500000000053610404045172034362 0ustar arnaudarnaud00000000000000empty= bundlesForm.error.address=Address(Different Bundle) bundlesForm.error.phone=Phone Number(Different Bundle) bundlesForm.error.dob=Date of Birth(Different Bundle) bundlesForm.error.age=Age(Different Bundle) bundlesForm.errors.required=[Different Bundle]Missing Field: {0} bundlesForm.errors.integer=[Different Bundle]Invalid Integer: {0} libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/validator/EditTypeAction.java0000644000175000017500000001012310404045222032426 0ustar arnaudarnaud00000000000000/* * $Id: EditTypeAction.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 2000-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.validator; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.util.LabelValueBean; /** * Initializes ActionForm. * */ public final class EditTypeAction extends Action { /** * Commons Logging instance. */ private Log log = LogFactory.getFactory().getInstance(this.getClass().getName()); /** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it). * Return an ActionForward instance describing where and how * control should be forwarded, or null if the response has * already been completed. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @return Action to forward to * @exception Exception if an input/output error or servlet exception occurs */ public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // Was this transaction cancelled? initFormBeans(mapping, form, request); return mapping.findForward("success"); } /** * Convenience method for initializing form bean. * @param mapping The ActionMapping used to select this instance * @param request The HTTP request we are processing */ protected void initFormBeans( ActionMapping mapping, ActionForm form, HttpServletRequest request) { // Initialize ArrayList satisfactionList = new ArrayList(); satisfactionList.add(new LabelValueBean("Very Satisfied", "4")); satisfactionList.add(new LabelValueBean("Satisfied", "3")); satisfactionList.add(new LabelValueBean("Not Very Satisfied", "2")); satisfactionList.add(new LabelValueBean("Not Satisfied", "1")); request.setAttribute("satisfactionList", satisfactionList); ArrayList osTypes = new ArrayList(); osTypes.add(new LabelValueBean("Mac OsX", "OsX")); osTypes.add(new LabelValueBean("Windows 95/98/Me", "Win32")); osTypes.add(new LabelValueBean("Windows NT/2000/XP/2003", "WinNT")); osTypes.add(new LabelValueBean("Linux", "Linux")); osTypes.add(new LabelValueBean("BSD NetBSD/FreeBSD/OpenBSD", "BSD")); request.setAttribute("osTypes", osTypes); ArrayList languageTypes = new ArrayList(); languageTypes.add(new LabelValueBean("C++", "C++")); languageTypes.add(new LabelValueBean("C#", "C#")); languageTypes.add(new LabelValueBean("Java", "java")); languageTypes.add(new LabelValueBean("Smalltalk", "Smalltalk")); request.setAttribute("languageTypes", languageTypes); } } libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/validator/LocaleAction.java0000644000175000017500000001002610404045212032077 0ustar arnaudarnaud00000000000000/* * $Id: LocaleAction.java 157397 2005-03-14 06:20:47Z martinc $ * * Copyright 2000-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.validator; import java.util.Locale; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.Globals; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; /** * Implementation of Action that changes the user's * {@link java.util.Locale} and forwards to a page, based on request level * parameters that are set (language, country, & page). * */ public final class LocaleAction extends Action { /** * Commons Logging instance. */ private Log log = LogFactory.getFactory().getInstance(this.getClass().getName()); /** *

      * Change the user's {@link java.util.Locale} based on {@link ActionForm} * properties. *

      *

      * This Action looks for language and * country properties on the given form, constructs an * appropriate Locale object, and sets it as the Struts Locale for this * user's session. * Any ActionForm, including a {@link DynaActionForm}, may be used. *

      *

      * If a page property is also provided, then after * setting the Locale, control is forwarded to that URI path. * Otherwise, control is forwarded to "success". *

      * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @return Action to forward to * @exception java.lang.Exception if an input/output error or servlet exception occurs */ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // Extract attributes we will need HttpSession session = request.getSession(); Locale locale = getLocale(request); String language = null; String country = null; String page = null; try { language = (String) PropertyUtils.getSimpleProperty(form, "language"); country = (String) PropertyUtils.getSimpleProperty(form, "country"); page = (String) PropertyUtils.getSimpleProperty(form, "page"); } catch (Exception e) { log.error(e.getMessage(), e); } if ((language != null && language.length() > 0) && (country != null && country.length() > 0)) { locale = new java.util.Locale(language, country); } else if (language != null && language.length() > 0) { locale = new java.util.Locale(language, ""); } session.setAttribute(Globals.LOCALE_KEY, locale); if (null==page) return mapping.findForward("success"); else return new ActionForward(page); } } libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/validator/MessageResources.properties0000644000175000017500000002337010404045244034307 0ustar arnaudarnaud00000000000000button.cancel=Cancel button.confirm=Confirm button.reset=Reset button.save=Save # Errors errors.footer= errors.header=

      Validation Error

      You must correct the following error(s) before proceeding: errors.ioException=I/O exception rendering error messages: {0} error.database.missing=
    • User database is missing, cannot validate logon credentials
    • errors.required={0} is required. errors.minlength={0} can not be less than {1} characters. errors.maxlength={0} can not be greater than {1} characters. errors.invalid={0} is invalid. html.li.open=
    • html.li.close=
    • file.location=The {0} file for this page can be found in the {1} directory. errors.byte={0} must be an byte. errors.short={0} must be an short. errors.integer={0} must be an integer. errors.long={0} must be an long. errors.float={0} must be an float. errors.double={0} must be an double. errors.date={0} is not a date. errors.range={0} is not in the range {1} through {2}. errors.creditcard={0} is not a valid credit card number. errors.email={0} is an invalid e-mail address. errors.url={0} is an invalid url. # Index Page index.title=Struts Validator index.power=Powered by Struts # Registration Form registrationForm.title=Registration registrationForm.title.create=Register registrationForm.title.edit=Edit User Information registrationForm.firstname.displayname=First Name registrationForm.lastname.displayname=Last Name registrationForm.addr.displayname=Address registrationForm.city.displayname=City registrationForm.stateprov.displayname=State registrationForm.zippostal.displayname=Zip registrationForm.phone.displayname=Phone registrationForm.email.displayname=E-mail registrationForm.lastname.maskmsg=Last Name can only be letters, no spaces. # JavaScript Registration Form jsRegistrationForm.title=JavaScript Registration Form jsRegistrationForm.description=with client side JavaScript validation and server side validation # Muli-page Registration Form multiRegistrationForm.title=Multi-page Registration Form multiRegistrationForm.description=multi-page example with client side JavaScript validation and server side validation # Type form typeForm.name.displayname=String Field typeForm.byte.displayname=Byte Field typeForm.checkbox.wouldrecommend=I would recommend typeForm.checkbox.used.languages=Programming Languages used typeForm.creditCard.displayname=Credit Card typeForm.date.displayname=Date Field typeForm.description=Example validating some primitive numbers, a range on the integer field, a date, and a credit card number. typeForm.double.displayname=Double Field typeForm.float.displayname=Float Field typeForm.floatRange.displayname=Float Range Field typeForm.integer.displayname=Integer Field typeForm.mask.displayname=Mask Field typeForm.email.displayname=Email Field typeForm.url.displayname=URL Field typeForm.long.displayname=Long Field typeForm.nested.name.displayname=Name typeForm.nested=Nested Text typeForm.option.os.list=Operating Systems in use typeForm.option.satisfaction=Satisfaction typeForm.option.select.many=<Select one or more> typeForm.option.select.one=<Select One> typeForm.radio.overall.satisfaction=Overall Satisfaction typeForm.short.displayname=Short Field typeForm.title.create=Type Form typeForm.title=Type Form typeForm.mask.error={0} Must only contain upper case alpahabetic letters (i.e. A-Z) # JavaScript Type Form jsTypeForm.title=JavaScript Type Form jsTypeForm.description=with JavaScript Validation and Server Validation # Bundles Example form bundles.title=Resource Bundles bundlesExamples.title=Bundles Example Form bundlesExamples.description=Examples of configuring Validator to use alternative/non-default resource bundles. javascript.bundlesExamples.title=Javascript Bundles Example Form javascript.bundlesExamples.description=Javascript examples of configuring Validator to use alternative/non-default resource bundles. bundlesForm.label.name=Name bundlesForm.label.address=Address bundlesForm.label.phone=Phone Number bundlesForm.label.dob=Date of Birth bundlesForm.label.age=Age bundlesExamples.notes.heading=Notes on Using Validator and Resources/Bundles: bundlesExamples.notes1=Non-Resource Messages: - you can specify error messages directly in the validation.xml file using by setting resource="false" in <msg> element. Validation for the name field is an example of this. bundlesExamples.notes2=Alternative Bundles for Messages - specifying an alternative bundle for an error message in the validation.xml file (using <msg bundle="altBundle"/>) takes precedence over any bundle specified in the <html:errors/>, <html:messages/> or <html:javascript/> tags. bundlesExamples.notes3=Alternative Bundles for Arguments - specifying an alternative bundle for an error message argument in the validation.xml file (using <arg bundle="altBundle"/>) takes precedence over any bundle specified in the <html:errors/>, <html:messages/> or <html:javascript/> tags. bundlesExamples.notes4=If you specify an alternative bundle for a message (using <msg bundle="altBundle"/>) , any <arg> elements which don't have a bundle specified also inherit the same bundle. Validation for the address field is an example of this. bundlesExamples.notes5=You can specify different bundles for both the <msg> and <arg> elements in the validation.xml. Validation for the phone field is an example of this. bundlesExamples.notes5=Validation for the Date of Birth field uses the default bundle for the message, but specifies and alternative bundle for the argument. bundlesExamples.notes6=The <html:javascript/> tag now has a bundle attribute, so that the JavaScript messages can be generated in the same way as the <html:errors/> and <html:messages/> tags. empty= bundlesForm.error.address=Address(default Bundle) bundlesForm.error.phone=Phone Number(default Bundle) bundlesForm.error.dob=Date of Birth(default Bundle) bundlesForm.error.age=Age(default Bundle) bundlesForm.errors.required=[Default Bundle]Missing Field: {0} bundlesForm.errors.integer=[Default Bundle]Invalid Integer: {0} # validwhen Example form validWhen.title=validwhen Validation validWhenExamples.title=validwhen Example Form validWhenExamples.description=Examples of the validwhen validator. validWhenForm.example.simple=Simple validwhen example validWhenForm.example.simple.desc=The Last Name must be entered IF a First Name is present. validWhenForm.firstName=First Name validWhenForm.lastName=Last Name validWhenForm.example.both=Both Fields Example validWhenForm.example.both.desc=Either both the fields must be present OR both must be absent. validWhenForm.error.both=Either enter both or neither validWhenForm.example.numeric=Numeric Compare Example validWhenForm.example.numeric.desc=Maximum value must be numeric and greater than the minimum. validWhenForm.error.numeric=Maximum must be greater than the Minimum validWhenForm.min=Minimum validWhenForm.max=Maximum validWhenForm.example.address=Address Validation example validWhenForm.example.address.desc=If any one of the address fields is present then Address Line 1, City and State must be present. Address Line 2 is optional. validWhenForm.address1=Address Line 1 validWhenForm.address2=Address Line 2 validWhenForm.city=City validWhenForm.zip=Zip Code validWhenExamples.notes.heading=Tips on Using the validwhen Validator validWhenExamples.notes1=Check Out the User Guide. validWhenExamples.notes2=Greater Than and Less Than (i.e. > and <) can't be used directly in the validation.xml - you need to use &gt; and &lt; instead. validWhenExamples.notes3=All comparisons must be enclosed in parens validWhenExamples.notes4=Only two items may be joined with and or or - so that means if you want to test three separate things, you need to use parenthesis (brackets) appropriately - see the address validation above. validWhenExamples.problems.heading=Issues When (trying) to Use the validwhen Validator validWhenExamples.problems1=java.lang.NoClassDefFoundError antlr.TokenStream - validwhen requires antlr.jar - its distributed in the Struts binary distribution in the lib folder along with all the other jars. validWhenExamples.problems2=JavaScript Validation Not Working - There is no JavaScript validator for validwhen - its server side only validWhenExamples.problems3=unexpected token: OR Error - tokens and and or should be lower case validWhenExamples.problems4=Other unexpected token Errors - somethings wrong with the test's value - the expression can't be parsed. You need to check it carefully to make sure its correctly specified. validWhenExamples.problems5=Its Not Working! - check the logs / console for any exceptions. # Locale Form localeForm.fr=There are some differences on the Registration Form, JavaScript Registration Form, and Multi-page Registration form (see /WEB-INF/validation.xml). On the Type Form and JavaScript Type Form the integer field should fall in a range of 50-60 and the date field should have a format of 'dd.MM.yyyy'. localeForm.frCA=On the JavaScript Type Form the integer field should fall in a range of 100-200 and the date field should have a format of 'dd-MM-yyyy'. localeForm.ja=On the JavaScript Type Form the integer field should fall in a range of 400-700 and the date field should have a format of 'yyyy/MM/dd'.././@LongLink0000644000175000017500000000014710423140533011321 Lustar 00000000000000libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/validator/MessageResources_fr.propertieslibstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/validator/MessageResources_fr.properti0000644000175000017500000001013310404045216034436 0ustar arnaudarnaud00000000000000# Correct translations compliments of Regis Brochu # Some fields have been added after Regis Brochu # translated the file and may have incorrect translation. button.cancel=Annuler button.confirm=Soumettre button.reset=Effacer button.save=Sauvegarder # Errors errors.footer= errors.header=

      Erreur de Validation

      Vous devez corriger l'erreur(s) suivante avant de continuer : errors.ioException=Exception d'E/S durant le rendu des messages d'erreur: {0} error.database.missing=
    • La base de données des utilisateurs est manquante. Impossible de valider les privilèges de connexion errors.required={0} est obligatoire. errors.minlength=Le {0} ne peut pas être moins de {1} caractères. errors.maxlength=Le {0} ne peut pas être plus de {1} caractères. errors.invalid={0} est invalide. errors.byte=Le {0} doit être un nombre de type byte. errors.short=Le {0} doit être un nombre de type short. errors.integer=Le {0} doit être un nombre de type integer. errors.long=Le {0} doit être un nombre de type long. errors.float=Le {0} doit être un nombre de type float. errors.double=Le {0} doit être un nombre de type double. errors.date=Le {0} n'est pas une date. errors.range=Le {0} n'est pas dans l'intervalle {1} à {2}. errors.creditcard=Le {0} n'est pas un numéro de carte de crédit valide. errors.email=Le {0} est une adresse incorrecte de e-mail. # Index Page index.title=Struts Validator index.power=Actionné par Struts # Registration Form registrationForm.title=Enregistrement registrationForm.title.create=Registre registrationForm.title.edit=Éditez l'information utilisateur registrationForm.firstname.displayname=Prénom registrationForm.lastname.displayname=Nom registrationForm.addr.displayname=Adresse registrationForm.city.displayname=Ville registrationForm.stateprov.displayname=État/Province registrationForm.zippostal.displayname=Code postal registrationForm.phone.displayname=Téléphone registrationForm.email.displayname=E-mail registrationForm.lastname.maskmsg=Le nom peut seulement être composé de lettres et de nombres, aucun espace. # Javascript Registration Form jsRegistrationForm.title=Enregistrement de JavaScript jsRegistrationForm.description=avec la validation de JavaScript de côté de client et la validation latérale de serveur # Muli-page Registration Form multiRegistrationForm.title=De plusieurs pages Fiche multiRegistrationForm.description=exemple de plusieurs pages avec la validation du côté JavaScript de client et la validation latérale de serveur # Type form typeForm.title=Formulaire de type typeForm.description=Exemple validant quelques nombres primitifs, un intervalle sur la zone de nombre entier, une date, et un nombre de carte de crédit. typeForm.title.create=Créer le formulaire typeForm.byte.displayname=Champ Octet typeForm.short.displayname=Champ Short typeForm.integer.displayname=Champ Entier typeForm.long.displayname=Champ Long typeForm.float.displayname=Champ Float typeForm.floatRange.displayname=Champ Float l'intervalle typeForm.double.displayname=Champ Double typeForm.date.displayname=Champ Date typeForm.creditCard.displayname=Champ Carte de crédit typeForm.nested=Emboîté Texte typeForm.nested.name.displayname=Nom # JavaScript Type Form jsTypeForm.title=Formulaire de type de JavaScript jsTypeForm.description=avec la validation de JavaScript de côté de client et la validation latérale de serveur # Locale Form localeForm.fr=Il y a quelques différences sur la fiche, la fiche de JavaScript, et la fiche de plusieurs pages (voient / WEB-INF/validation.xml). Sur la forme de forme de type et de type de JavaScript la zone de nombre entier devrait tomber dans un intervalle de 50-60 et la zone de date devrait avoir un format de ' dd.MM.yyyy '. localeForm.frCA=Sur la forme de type de JavaScript la zone de nombre entier devrait tomber dans un intervalle de 100-200 et la zone de date devrait avoir un format de ' dd-MM-yyyy '. localeForm.ja=Sur la forme de type de JavaScript la zone de nombre entier devrait tomber dans un intervalle de 400-700 et la zone de date devrait avoir un format de ' yyyy/MM/dd '. ././@LongLink0000644000175000017500000000014710423140533011321 Lustar 00000000000000libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/validator/MessageResources_ja.propertieslibstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/validator/MessageResources_ja.properti0000644000175000017500000001705310404045222034426 0ustar arnaudarnaud00000000000000button.cancel=\u30ad\u30e3\u30f3\u30bb\u30eb button.confirm=\u78ba\u8a8d button.reset=\u30ea\u30bb\u30c3\u30c8 button.save=\u4fdd\u5b58 # Errors errors.footer= errors.header=

      \u5165\u529b\u30c1\u30a7\u30c3\u30af\u30a8\u30e9\u30fc

      \u4ee5\u4e0b\u306e\u30a8\u30e9\u30fc\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044: errors.ioException=\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8 {0} \u306e\u51fa\u529b\u3067I/O\u4f8b\u5916\u304c\u767a\u751f\u3057\u307e\u3057\u305f error.database.missing=
    • \u30e6\u30fc\u30b6\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002\u30ed\u30b0\u30aa\u30f3\u306e\u8a8d\u8a3c\u304c\u51fa\u6765\u307e\u305b\u3093\u3002
    • errors.required={0} \u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002 errors.minlength={0} \u306f {1} \u6587\u5b57\u4ee5\u4e0a\u3067\u306a\u3051\u308c\u3070\u3044\u3051\u307e\u305b\u3093 errors.maxlength={0} \u306F {1} \u6587\u5B57\u4EE5\u4E0B\u3067\u306A\u3051\u308C\u3070\u306A\u308A\u307E\u305B\u3093\u3002 errors.invalid={0} \u306f\u6b63\u3057\u304f\u3042\u308a\u307e\u305b\u3093\u3002 errors.byte={0} \u306fbyte\u578b\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 errors.short={0} \u306fshort\u578b\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 errors.integer={0} \u306finteger\u578b\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 errors.long={0} \u306flong\u578b\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 errors.float={0} \u306ffloat\u578b\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 errors.double={0} \u306fdouble\u578b\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 errors.date={0} \u306f\u65e5\u4ed8\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 errors.range={0} \u306f {1} \u304b\u3089 {2} \u306e\u9593\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 errors.creditcard={0} \u306F\u6B63\u3057\u3044\u30AF\u30EC\u30B8\u30C3\u30C8\u30FC\u30AB\u30FC\u30C9\u756A\u53F7\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002 errors.email={0} \u306F\u6B63\u3057\u3044\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002 # Index Page index.title=Struts Validator index.power=Powered by Struts # Registration Form registrationForm.title=\u767b\u9332\u30d5\u30a9\u30fc\u30e0 registrationForm.title.create=\u767b\u9332\u8005 registrationForm.title.edit=\u30e6\u30fc\u30b6\u60c5\u5831\u3092\u7de8\u96c6 registrationForm.firstname.displayname=\u540d registrationForm.lastname.displayname=\u59d3 registrationForm.addr.displayname=\u4f4f\u6240 registrationForm.city.displayname=\u90fd\u5e02 registrationForm.stateprov.displayname=\u5dde registrationForm.zippostal.displayname=\u90f5\u4fbf\u756a\u53f7 registrationForm.phone.displayname=\u96fb\u8a71\u756a\u53f7 registrationForm.email.displayname=\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9 registrationForm.lastname.maskmsg=\u59d3\u306b\u306f\u7a7a\u767d\u3092\u542b\u3081\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093 # JavaScript Registration Form jsRegistrationForm.title=JavaScript\u3092\u4f7f\u3063\u305f\u767b\u9332\u30d5\u30a9\u30fc\u30e0 jsRegistrationForm.description=JavaScript\u3092\u4f7f\u3063\u305f\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u5074\u5165\u529b\u30c1\u30a7\u30c3\u30af\u304a\u3088\u3073\u30b5\u30fc\u30d0\u5074\u5165\u529b\u30c1\u30a7\u30c3\u30af # Muli-page Registration Form multiRegistrationForm.title=\u8907\u6570\u30da\u30fc\u30b8\u306b\u308f\u305f\u308b\u767b\u9332\u30d5\u30a9\u30fc\u30e0 multiRegistrationForm.description=JavaScript\u306b\u3088\u308b\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u5074\u5165\u529b\u30c1\u30a7\u30c3\u30af\u304a\u3088\u3073\u30b5\u30fc\u30d0\u5074\u5165\u529b\u30c1\u30a7\u30c3\u30af\u3092\u4f34\u3046\u8907\u6570\u30da\u30fc\u30b8\u306b\u308f\u305f\u308b\u767b\u9332\u30d5\u30a9\u30fc\u30e0\u306e\u30b5\u30f3\u30d7\u30eb # Type form typeForm.name.displayname=String\u578B\u30D5\u30A3\u30FC\u30EB\u30C9 typeForm.byte.displayname=Byte\u578b\u30d5\u30a3\u30fc\u30eb\u30c9 typeForm.checkbox.wouldrecommend=\u304A\u3059\u3059\u3081 typeForm.checkbox.used.languages=\u5229\u7528\u30D7\u30ED\u30B0\u30E9\u30E0\u8A00\u8A9E typeForm.creditCard.displayname=\u30af\u30ec\u30b8\u30c3\u30c8\u30fc\u30ab\u30fc\u30c9\u756a\u53f7\u30d5\u30a3\u30fc\u30eb\u30c9 typeForm.date.displayname=\u65e5\u4ed8\u578b\u30d5\u30a3\u30fc\u30eb\u30c9 typeForm.description=\u30d7\u30ea\u30df\u30c6\u30a3\u30d6\u578b\u306e\u6570\u5b57\u3001integer\u306e\u7bc4\u56f2\u3001\u65e5\u4ed8\u3001\u304a\u3088\u3073\u30af\u30ec\u30b8\u30c3\u30c8\u30ab\u30fc\u30c9\u756a\u53f7\u306e\u5165\u529b\u30c1\u30a7\u30c3\u30af\u306e\u30b5\u30f3\u30d7\u30eb typeForm.double.displayname=Double\u578b\u30d5\u30a3\u30fc\u30eb\u30c9 typeForm.float.displayname=Float\u578b\u30d5\u30a3\u30fc\u30eb\u30c9 typeForm.floatRange.displayname=Float\u578b\u306e\u7bc4\u56f2\u30c1\u30a7\u30c3\u30af\u30d5\u30a3\u30fc\u30eb\u30c9 typeForm.integer.displayname=Integer\u578b\u30d5\u30a3\u30fc\u30eb\u30c9 typeForm.long.displayname=Long\u578b\u30d5\u30a3\u30fc\u30eb\u30c9 typeForm.nested.name.displayname=\u540d\u524d typeForm.nested=\u30cd\u30b9\u30c8\u3057\u305f\u6587\u5b57\u5217\u306e\u30d5\u30a3\u30fc\u30eb\u30c9 typeForm.option.os.list=\u5229\u7528OS typeForm.option.satisfaction=\u6E80\u8DB3\u5EA6 typeForm.option.select.many=<\u4E00\u3064\u307E\u305F\u306F\u8907\u6570\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044> typeForm.option.select.one=<\u4E00\u3064\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044> typeForm.radio.overall.satisfaction=\u5168\u4F53\u306E\u6E80\u8DB3\u5EA6 typeForm.short.displayname=Short\u578b\u30d5\u30a3\u30fc\u30eb\u30c9 typeForm.title.create=\u30c7\u30fc\u30bf\u578b\u30c1\u30a7\u30c3\u30af\u30d5\u30a9\u30fc\u30e0 typeForm.title=\u30c7\u30fc\u30bf\u578b\u30c1\u30a7\u30c3\u30af\u30d5\u30a9\u30fc\u30e0 # JavaScript Type Form jsTypeForm.title=JavaScript\u3092\u4f7f\u3063\u305f\u30c7\u30fc\u30bf\u578b\u30c1\u30a7\u30c3\u30af\u30d5\u30a9\u30fc\u30e0 jsTypeForm.description=JavaScript\u3092\u4f7f\u3063\u305f\u5165\u529b\u30c1\u30a7\u30c3\u30af\u304a\u3088\u3073\u30b5\u30fc\u30d0\u5074\u5165\u529b\u30c1\u30a7\u30c3\u30af # Locale Form localeForm.fr=\u767b\u9332\u30d5\u30a9\u30fc\u30e0\u3001JavaScript\u3092\u4f7f\u3063\u305f\u767b\u9332\u30d5\u30a9\u30fc\u30e0\u3001\u304a\u3088\u3073\u8907\u6570\u30da\u30fc\u30b8\u306b\u308f\u305f\u308b\u767b\u9332\u30d5\u30a9\u30fc\u30e0\u306b\u3044\u304f\u3064\u304b\u306e\u9055\u3044\u304c\u3042\u308a\u307e\u3059(/WEB-INF/validation.xml \u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044)\u3002\u30c7\u30fc\u30bf\u578b\u30c1\u30a7\u30c3\u30af\u30d5\u30a9\u30fc\u30e0\u3068JavaScript\u3092\u4f7f\u3063\u305f\u30c7\u30fc\u30bf\u578b\u30c1\u30a7\u30c3\u30af\u30d5\u30a9\u30fc\u30e0\u3067\u306finteger\u306e\u30c1\u30a7\u30c3\u30af\u306e\u7bc4\u56f2\u306f50-60\u306b\u306a\u308a\u3001\u65e5\u4ed8\u306e\u66f8\u5f0f\u306f'dd.MM.yyyy'\u306b\u306a\u308a\u307e\u3059\u3002 localeForm.frCA=JavaScript\u3092\u4f7f\u3063\u305f\u30c7\u30fc\u30bf\u578b\u30c1\u30a7\u30c3\u30af\u30d5\u30a9\u30fc\u30e0\u306einteger\u306e\u30c1\u30a7\u30c3\u30af\u306e\u7bc4\u56f2\u306f100-200\u306b\u306a\u308a\u3001\u65e5\u4ed8\u306e\u66f8\u5f0f\u306f'dd-MM-yyyy'\u306b\u306a\u308a\u307e\u3059\u3002 localeForm.ja=JavaScript\u3092\u4f7f\u3063\u305f\u30c7\u30fc\u30bf\u578b\u30c1\u30a7\u30c3\u30af\u30d5\u30a9\u30fc\u30e0\u306einteger\u306e\u30c1\u30a7\u30c3\u30af\u306e\u7bc4\u56f2\u306f400-700\u306b\u306a\u308a\u3001\u65e5\u4ed8\u306e\u66f8\u5f0f\u306f'yyyy/MM/dd'\u306b\u306a\u308a\u307e\u3059\u3002././@LongLink0000644000175000017500000000014510423140533011317 Lustar 00000000000000libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/validator/MultiRegistrationAction.javalibstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/validator/MultiRegistrationAction.java0000644000175000017500000001060710404045172034377 0ustar arnaudarnaud00000000000000/* * $Id: MultiRegistrationAction.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 2000-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.validator; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessages; /** * Implementation of Action that validates a multi-page * registration form. * */ public final class MultiRegistrationAction extends Action { /** * Commons Logging instance. */ private Log log = LogFactory.getFactory().getInstance(this.getClass().getName()); /** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it). * Return an ActionForward instance describing where and how * control should be forwarded, or null if the response has * already been completed. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception Exception if an input/output error or servlet exception occurs */ public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // Extract attributes we will need RegistrationForm info = (RegistrationForm) form; // Was this transaction cancelled? if (isCancelled(request)) { if (log.isInfoEnabled()) { log.info( " " + mapping.getAttribute() + " - Registration transaction was cancelled"); } removeFormBean(mapping, request); return mapping.findForward("success"); } ActionMessages errors = info.validate(mapping, request); if (errors != null && errors.isEmpty()) { if (info.getPage() == 1) return mapping.findForward("input2"); if (info.getPage() == 2) return mapping.findForward("success"); } else { this.saveErrors(request, errors); if (info.getPage() == 1){ return mapping.findForward("input" + info.getPage()); } if (info.getPage() == 2){ return mapping.findForward("input" + info.getPage()); } } return mapping.findForward("input1"); } /** * Convenience method for removing the obsolete form bean. * * @param mapping The ActionMapping used to select this instance * @param request The HTTP request we are processing */ protected void removeFormBean( ActionMapping mapping, HttpServletRequest request) { // Remove the obsolete form bean if (mapping.getAttribute() != null) { if ("request".equals(mapping.getScope())) { request.removeAttribute(mapping.getAttribute()); } else { HttpSession session = request.getSession(); session.removeAttribute(mapping.getAttribute()); } } } } ././@LongLink0000644000175000017500000000015110423140533011314 Lustar 00000000000000libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/validator/OtherMessageResources.propertieslibstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/validator/OtherMessageResources.proper0000644000175000017500000000050610404045242034416 0ustar arnaudarnaud00000000000000empty= bundlesForm.error.address=Address(Other Bundle) bundlesForm.error.phone=Phone Number(Other Bundle) bundlesForm.error.dob=Date of Birth(Other Bundle) bundlesForm.error.age=Age(Other Bundle) bundlesForm.errors.required=[Other Bundle]Missing Field: {0} bundlesForm.errors.integer=[Other Bundle]Invalid Integer: {0} libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/validator/RegistrationAction.java0000644000175000017500000000707510404045210033362 0ustar arnaudarnaud00000000000000/* * $Id: RegistrationAction.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 2000-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.validator; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; /** * Implementation of Action that validates a registration form. * */ public final class RegistrationAction extends Action { /** * Commons Logging instance. */ private Log log = LogFactory.getFactory().getInstance(this.getClass().getName()); /** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it). * Return an ActionForward instance describing where and how * control should be forwarded, or null if the response has * already been completed. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @return Action to forward to * @exception Exception if an input/output error or servlet exception occurs */ public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // Was this transaction cancelled? if (isCancelled(request)) { if (log.isInfoEnabled()) { log.info( " " + mapping.getAttribute() + " - Registration transaction was cancelled"); } removeFormBean(mapping, request); return (mapping.findForward("success")); } return mapping.findForward("success"); } /** * Convenience method for removing the obsolete form bean. * * @param mapping The ActionMapping used to select this instance * @param request The HTTP request we are processing */ protected void removeFormBean( ActionMapping mapping, HttpServletRequest request) { // Remove the obsolete form bean if (mapping.getAttribute() != null) { if ("request".equals(mapping.getScope())) { request.removeAttribute(mapping.getAttribute()); } else { HttpSession session = request.getSession(); session.removeAttribute(mapping.getAttribute()); } } } } libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/validator/RegistrationForm.java0000644000175000017500000000561510404045210033046 0ustar arnaudarnaud00000000000000/* * $Id: RegistrationForm.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 2000-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.validator; import java.io.Serializable; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionMapping; import org.apache.struts.validator.ValidatorForm; /** * Form bean for the user registration page. * */ public final class RegistrationForm extends ValidatorForm implements Serializable { private String action = null; private String sFirstName = null; private String sLastName = null; private String sAddr = null; private CityStateZip csz = new CityStateZip(); private String sPhone = null; private String sEmail = null; public String getAction() { return action; } public void setAction(String action) { this.action = action; } public String getFirstName() { return sFirstName; } public void setFirstName(String sFirstName) { this.sFirstName = sFirstName; } public String getLastName() { return sLastName; } public void setLastName(String sLastName) { this.sLastName = sLastName; } public String getAddr() { return sAddr; } public void setAddr(String sAddr) { this.sAddr = sAddr; } public CityStateZip getCityStateZip() { return csz; } public void setCityStateZip(CityStateZip csz) { this.csz = csz; } public String getPhone() { return sPhone; } public void setPhone(String sPhone) { this.sPhone = sPhone; } public String getEmail() { return sEmail; } public void setEmail(String sEmail) { this.sEmail = sEmail; } /** * Reset all properties to their default values. * * @param mapping The mapping used to select this instance * @param request The servlet request we are processing */ public void reset(ActionMapping mapping, HttpServletRequest request) { action = null; sFirstName = null; sLastName = null; sAddr = null; csz = new CityStateZip(); sPhone = null; sEmail = null; } } libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/validator/TypeAction.java0000644000175000017500000000702710404045242031633 0ustar arnaudarnaud00000000000000/* * $Id: TypeAction.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 2000-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.validator; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; /** * Implementation of Action that validates a different 'types'. * */ public final class TypeAction extends Action { /** * Commons Logging instance. */ private Log log = LogFactory.getFactory().getInstance(this.getClass().getName()); /** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it). * Return an ActionForward instance describing where and how * control should be forwarded, or null if the response has * already been completed. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @return Action to forward to * @exception Exception if an input/output error or servlet exception occurs */ public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // Was this transaction cancelled? if (isCancelled(request)) { if (log.isInfoEnabled()) { log.info( " " + mapping.getAttribute() + " - Type transaction was cancelled"); } removeFormBean(mapping, request); return mapping.findForward("success"); } return mapping.findForward("success"); } /** * Convenience method for removing the obsolete form bean. * * @param mapping The ActionMapping used to select this instance * @param request The HTTP request we are processing */ protected void removeFormBean( ActionMapping mapping, HttpServletRequest request) { // Remove the obsolete form bean if (mapping.getAttribute() != null) { if ("request".equals(mapping.getScope())) { request.removeAttribute(mapping.getAttribute()); } else { HttpSession session = request.getSession(); session.removeAttribute(mapping.getAttribute()); } } } } libstruts1.2-java-1.2.9/src/examples/org/apache/struts/webapp/validator/TypeForm.java0000644000175000017500000001457110404045250031322 0ustar arnaudarnaud00000000000000/* * $Id: TypeForm.java 382882 2006-03-03 16:31:45Z niallp $ * * Copyright 2000-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.webapp.validator; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionMapping; import org.apache.struts.util.LabelValueBean; import org.apache.struts.validator.ValidatorForm; /** * Form bean for the user type page. * */ public final class TypeForm extends ValidatorForm implements Serializable { private String action = null; private String name = null; //Used to test Multiform per page validation when property name is 'name' private String sByte = null; private String sShort = null; private String sInteger = null; private String sLong = null; private String sFloat = null; private String sFloatRange = null; private String sDouble = null; private String sDate = null; private String sCreditCard = null; private String sSatisfaction = null; private String[] sOsList = null; private String sOverallSatisfaction = null; private String sWouldRecommend = null; private String[] sUsedLanguages = null; private String mask = null; private String email = null; private String url = null; private List lNames = initNames(); public String getAction() { return action; } public void setAction(String action) { this.action = action; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getByte() { return sByte; } public void setByte(String sByte) { this.sByte = sByte; } public String getShort() { return sShort; } public void setShort(String sShort) { this.sShort = sShort; } public String getInteger() { return sInteger; } public void setInteger(String sInteger) { this.sInteger = sInteger; } public String getLong() { return sLong; } public void setLong(String sLong) { this.sLong = sLong; } public String getFloat() { return sFloat; } public void setFloat(String sFloat) { this.sFloat = sFloat; } /** * Float field with range checking * @return */ public String getFloatRange() { return sFloatRange; } /** * Float field with range checking * @param sFloatRange */ public void setFloatRange(String sFloatRange) { this.sFloatRange = sFloatRange; } public String getDouble() { return sDouble; } public void setDouble(String sDouble) { this.sDouble = sDouble; } public String getDate() { return sDate; } public void setDate(String sDate) { this.sDate = sDate; } public String getCreditCard() { return sCreditCard; } public void setCreditCard(String sCreditCard) { this.sCreditCard = sCreditCard; } public String getMask() { return mask; } public void setMask(String mask) { this.mask = mask; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getSatisfaction() { return sSatisfaction; } public void setSatisfaction(String sSatisfaction) { this.sSatisfaction = sSatisfaction; } public String[] getOsList() { return sOsList; } public void setOsList(String[] anOsList) { this.sOsList = anOsList; } public String getOverallSatisfaction() { return sOverallSatisfaction; } public void setOverallSatisfaction(String anOverallSatisfaction) { this.sOverallSatisfaction = anOverallSatisfaction; } public String getWouldRecommend() { return sWouldRecommend; } public void setWouldRecommend(String anWouldRecommend) { this.sWouldRecommend = anWouldRecommend; } public String[] getUsedLanguages() { return sUsedLanguages; } public void setUsedLanguages(String[] anUsedLanguages) { this.sUsedLanguages = anUsedLanguages; } public List getNameList() { return lNames; } public void setNameList(List lNames) { this.lNames = lNames; } /** * Reset all properties to their default values. * * @param mapping The mapping used to select this instance * @param request The servlet request we are processing */ public void reset(ActionMapping mapping, HttpServletRequest request) { String reset = (String)request.getAttribute("typeForm.reset"); if ((null != reset)|| ("true".equals(reset))) { action = null; sByte = null; sShort = null; sInteger = null; sLong = null; sFloat = null; sFloatRange = null; sDouble = null; sDate = null; sCreditCard = null; sSatisfaction = null; sOsList = null; sOverallSatisfaction = null; sUsedLanguages = null; } //lNames = initNames(); } /** * Initialize list. * @return empty list of LabelValueBeans */ private static List initNames() { List lResults = new ArrayList(); for (int i = 0; i < 3; i++) { lResults.add(new LabelValueBean(null, null)); } return lResults; } } libstruts1.2-java-1.2.9/src/share/0000755000175000017500000000000010404045172017352 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/src/share/org/0000755000175000017500000000000010404045172020141 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/src/share/org/apache/0000755000175000017500000000000010404045172021362 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/src/share/org/apache/struts/0000755000175000017500000000000010423130301022714 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/src/share/org/apache/struts/action/0000755000175000017500000000000010423130301024171 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/src/share/org/apache/struts/action/doc-files/0000755000175000017500000000000010423130301026036 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/src/share/org/apache/struts/action/doc-files/actionUML.gif0000644000175000017500000003652310404045210030374 0ustar arnaudarnaud00000000000000GIF87aÚ÷€€€€€€€€€ÀÀÀÀÜÀ¦Êð@ ` €   À à @ @@@`@€@ @À@à@` `@```€` `À`à`€ €@€`€€€ €À€à€   @ ` €   À à À À@À`À€À ÀÀÀàÀà à@à`à€à àÀààà@ @@@`@€@ @À@à@ @ @@ @` @€ @  @À @à @@@ @@@@@`@@€@@ @@À@@à@@`@ `@@`@``@€`@ `@À`@à`@€@ €@@€@`€@€€@ €@À€@à€@ @  @@ @` @€ @  @À @à @À@ À@@À@`À@€À@ À@ÀÀ@àÀ@à@ à@@à@`à@€à@ à@Àà@àà@€ €@€`€€€ €À€à€ € €@ €` €€ €  €À €à €@€ @€@@€`@€€@€ @€À@€à@€`€ `€@`€``€€`€ `€À`€à`€€€ €€@€€`€€€€€ €€À€€à€€ €  €@ €` €€ €  €À €à €À€ À€@À€`À€€À€ À€ÀÀ€àÀ€à€ à€@à€`à€€à€ à€Àà€àà€À À@À`À€À ÀÀÀàÀ À À@ À` À€ À  ÀÀ Àà À@À @À@@À`@À€@À @ÀÀ@Àà@À`À `À@`À``À€`À `ÀÀ`Àà`À€À €À@€À`€À€€À €ÀÀ€Àà€À À  À@ À` À€ À  ÀÀ Àà ÀÀÀ ÀÀ@ÀÀ`ÀÀ€ÀÀ ÀÀÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ!ù,Úÿ7 H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤ÉÿRª\ɲ¥Ë—0cÊœI³¦Í›8sêÜɳ§ÏŸ@ƒ J´¨Ñ£H“*]Ê´©Ó§P£JJµªÕ«X³jÝʵ«×¯`ÊK¶,QhÓª]˶­Û·pãÊK·®Ý»xóêÝË·¯_f L¸°á—+^̸±ãÇ#Ë=L¹²å˘‹JÞ̹³çÏ C§ÍLº´éÓ•Ù¢^ÍÚ«êÖ°cËž}V-íÛ¸•®ÍÍ»·ïÖ¶ Ž38ñãÈ“s­¼¹ræÎ£KŸ>ÔøL{ÔÎŽ:÷ïàç‚„Ž&öâÇnO?-û÷ð‘{—‚Þ%úVêÇ׺ž½÷ýœ{,q@+婔ߤ`÷ETðÀ$( SýùGà…vhÙö؃Z ¦dO~[€@+ùaÄù4pÁœp‹=¿h·Mò¸“q"6S†=þSdMGVSº%ÿéá“PŠõß?!žˆ–„HÊ–\rÈ1FRŒùä@>šqÇ/†µ¡“=ÁSÛ1Ù’+ù&žUáÉçQSF)è ü9Y¥i©(–ÍpL?ÇDæ˜fÎèÁ3æ'åzîçiÐÙ&êŸy–:`¨ª„*IêÉ)¨¬2÷i{± ªMNÊ ¨®„öê+†pVy@ja¹Ì ƒ3H?©!dc˜šñŠ~˽j«ª·vÚí·íáªg¸Fª:Þ¹å²ä*·Ûn»g¸ÞÂ/¯ç2™*Tþªï¾»þ"’–‚Ì0ÃS@?Å0kÈ!‡„ñF”IífÜÿ’-»ïº»ª¼ê’º$覛î­.Ùûq»ñÒšçÊ-Ó{ç’Qåk•h8笳[ü¦ÆëŠ ®0üðCÂÅ, )³…ñcQ1¼QJŽW½Öñ¼»)3Í&sj.‘ãÞ s×tÊz6Ë"Ï,$¾_?ÕvÏg ¶ó\²Ù¬’=­²('´ÄZ°²Æ<ÚO!‹G qù0PæüÒŠo´ÙÔ‘[ì5Ù9‘|²¹èÖIz©f³²ÙžƒÛîM~J¥7UsÓ-TíXáŽoÞºòÝÊ¿“‚€1Å ÃÏàjPôò‚oLâý,&‡q&äCùtPæšʶ«ÿ^k­>’nzéë‹­nwä·lþÚçÏ{Íq;¥»í>íß§›¼ûSà—œãQ1ø! ­p † fŒ…‚YÓ{\™ZD1Ly _ RÆ÷2ô)T+ã Mæ.rÊNÞ™·L¨6! u%“[þ6»¯ÔÎ%œaq:õ£âØ €±™]ˆð³"á +†1ˆa a4-C#šÑø1Œ)Vpi«ž!ŽA@ZÈž0¢¬1+o$Îì¦ÇÜÁ0uïËáœòè¾·½vwLÙˆ«8P&!R*ô @íŒkX1ˆ1Éâ‹P^0¸˜0J*íƈÿžÓšI ¢é€Ü·”v¥ŽÂ™£ìò8H·Ñòtm#RÉø$ºÐùñ–dÑ©`ÉBÖȲJUzEŒ vˆ1"Šý ^ñ†qI,›<š¹H fIòQ¥“8 ¦R´1<Äô,kL>ÆjUðtÙ”Ph:´ÝËVñ|ß;ñY/{éÓ[õìcÈz*"ʳUµÔãÌþDÌtª‡^Jäb”á‚ÌZ(¥H aT‹Á €Á„1 apQÅâÂÇÒÅIËbWˆÐ®ðê8”7ëÜSç>±õôtêÛe¨‚¶bºp—.3j[Êϰé’V}lߨ~Ìvês I}•Oÿ®ä_·øÀ²9ˆ=Qqݨ!ˆ |”-™iÑ´IR¤}’”GhZõJà°É97ÍWõÕò¨Eõg ÊTX1‡ë+ªBŸUÄîéTef˜§ú±²'‹l>ÙUWRID;A*pÁµäŒØ1ÆØ°AH’aý ¤ ˆáÖ¸ÄÚ,©m ©ÜÀûèë>þМÀâf°<ܩۀäÔùI Å¼gd*YÐ*õ°L5ê褫]=’¶,Ž5lxqÙXĺ5Ðý*jðŠ7Ltƒ/“~gÛg‚QqÃeØ1&9ˆ $á­j ala%Ø„!| ßH>û‰ÿo+­:U¤Š¶Ãoól½ˆúÞŸ†·l$­èD\.¿W¼H|qaÝëâs¶´uDæ"¡m°LÒ2+3 !&2>ªa ;ò‘™U€¤±u’(ˆµp Â.ÁX)Ø ›V7±‡Û;ÙÒXÌãmqvƒš*˜ÙÒÌmf¹Ò|O4¸ÎÜqž×ü]3ûÆÎõá—å[%€Ýâ'0C!¹3A΢;BÁ8ÿޱqÑÃ-)ȰD¹}µ28pù6¦†Á\H|¾i±£Ò®uJKµ¡ Vü4áëp}У¾:†´†ì>ÿ(c†™²l¦óz¥»šU·;:Ø"ÿð†|À >–Y³g¦|¸Ìv€C{ O(Â¥¤Åèì©b’^”ˆ„K<¢æŠ”öÈç]r× ÉäÙ‚¥½ƒõº¥êp4MÂsƒÏüë4»Ø³´t’ÇgêâãŸÜX¾¬Û1mw‹»ÜçN÷º“ÍíøV;†ØÎ—ëÝ,x¼Öûe÷Â/|ßwÿí÷µ'í†qã]mx¿O^JÏa|äyðèí5Oïr‡ôìÞðe« ]Õ¹:DÎ?§Ø§ÛçɧBÑëDduŒãºæìtªÒõgvìù7{v¹z†·v,Ç”Ol™ µ[¬ÜQßÏ â³å­aô¿Ù¦¶xàÆgÛ;™?~î0W@„ü{X<|âËé]ÚªŸœAVP¦/´ì«õQ»›e£®}6&U™5^ˆ}F}å“€ó3?­cDþ”~šç7Ö~îÇK´7*uwôƒ2­æg½4]4v€u:)FTº‚g£³b!ÈSÉ·k³¶€Í—woÖzÿ¶s^Ø3³wB 8cô÷-ÖqH^¢òC¨ ‡zÞ…gŸÓ}cV‚V3h³Xæ·6'6·âÁz7È/Å—zò3…`øe$ã]dfge†f¶t/*¶^.Ö„†bHȼ×kòƒ§7ª|ÃÁK[({ï·{Pƒ\³whc|f€ø†ËæSU€½$€Ž¸ly¶B (uø…w8ƒ4È…¤×‡ûÒ…H~ÉWCåg‡)ójÈ'T¬òG:xb¨ØTePæU(kdøbÀ†>PåBÚ‡‰@øyˆƒè‰¿¢~·~i{zˆ^™·Œ½aÄXŒXx…ÓxмâŒêÑŒ‡Ñ8oŽÕØÇøxߘÜŽ85ŽæØÇaŒðQŽéˆj³vxò8ôXoUzçŽïXoè¸YØžçÒ¨ùŒùYÍv 9ì¸~ 9(9x‚V÷oÈx~ñh}‘Á˜%]'Xøˆ©gŠV˜ˆŠø‘©v ©’˜Šå÷)ºX{ìbþÆB$É)é’âÿÒ’¶Ç““²¦:;è|€f*bƈ{6‚8©‰@92>ù\Oy!B™Š44zÀ¤†ßez¦f@Å}ø8•R•å3~¦‡IZ›EZcÈlQ9ÛH–eù‡Ë††ô„j–ˆçUcxH—ÛÇ’€Ùt#Ëxé‹{$|ñçŠxè—’5˜ð3—¹~˜‹44“ÃHyH‹%vBÓ'D“™šä–YCšúcš‰šÿ—Tçš)–äȚ褚´iL¶°y›m—›¼i²™…¿™–iÆyœÈy7ø(˜Ãé¾Ùœ/ùœ¯º)ÔIÁ‰N× XÖ¹…‘éâhì(’s(ž7éÓ눞òa—&Y» à‰ì¹Žî)~œ¹‹ÇÇ5û)ŠDYŸš¡žr {xŸx‰)DkêƒEI @1ŸÜŸšUY?iS’ †r8¡·# {È¡iË'“ ®“¡ï ¢+I|**XšBXõ9w™€(ꡬ ¡ÄÙ¢ÏåžW‰ .˜k„H£0ª£Ô(™Djy¬ùy|?*?PØ£ú‘8jSGÊÎh£::¥«Y¥‹w¥QêZ*_Ê¥'‡¥d*;fúŒg: cº¦Ú¦§§nÚ“sªjiª¦u§wš§ýÒxrʧý¶§€ú¦~Z…:¨Öˆ¨ð%¨?©¨>èŽJ‡J“©{v¸«)W³<[“ØåYžâ”<Ë~K  J»g¼c²¹³|Ö†“µ{a–µÊjvL—†Rë•l›’~ ~ek¶Û¹µ[ ñT¥U<˜‹X)·ZëK ;$%ƒÖê·†«N€›˜‰ëJ¹b…‡û¸8·(·Žë? ³™A·ÛœX‹”Ö'+ ù}¸¸ŠöT]ÞG¹”º¹ªÛ¹'f‚w¶Šs¸¤&¦”iLª»¹é…P’è˜SK‹LéEkµðõ´·{¬«™gè\¹]k&¶ZÄ[¼Îê±a«¶:™fØÛ¼$¶”ªVÔE§)½œ{là•‚Ê«>+o{UŠ8¹ Xcˆ;Î¥¹â‹a*¤·Þl¶–k§+pµ6‹—;I˵µ[zó¡;½ˆK¥¿Ps¶#[EÀ<œt+¿F™Àn+µ°[…ü›,¦žŠ¼çÛºœÁÆŠ¶bê¸N˜„˜+Âè¹ÁÑK¸Š‰³X·*ÌžMë´ùV±N €ì[“3ÜÃ$ü K/{« ëÃF|o%›Â8|ÄL x§©Ä‰ÛÄRœn<ŰWŒÅ\´]üÅ‚F¯üZ«¸¯ž:ÆõJ‚`¼ÆlÜÆnüÆ3pÇr<Çt\Çv|ÇxœÇz¼Ç|ÜÇ~üǀȂ<È„\Ȇ|ȈœÈŠ¼ÈŒÜÈŽüÈÉ.’<É”\É–|ɘœÉš¼ÉœÜÉžüɠʢ<ʤ\ʦ|ʨœÊª¼Ê¬ÜÊ®üʰ,˲<Ë´\˶|˸œËº¼Ë¼Ü˾üËÀÌÂ<ÌÄ\ÌÆ|ÌÈœÌʼÌÌÜÌÿÎüÌÐÍÒ<ÍÔ\ÍÝú)á$N†m¨»&¾†Üáþ½àCãú}ÙÔ«Þ?^†ÙkáÛÛ”ß ÂÖ~’r­ã‰õä÷ÍY7­åj)ß0œÃOÞâL~á`þµæYÂI>æœS‚b»åþâ^äIèãÑ æf~ดæO­…|ùÁ¨lN¾¾àMµè«ÛnÈ×–eåM9´r6å*þÙ¿‹}Ù‹çù͇En˜eÙR~é,MÔ5Þ•îkɽ“’Þè”NÒäTõçžÙ*þæBK7¹BþÌ¿,[×ýp8Ø]#ÙiÚå<ÙôtÁ¿¾ÝY…¿Æn¢:Š_iÖ¸NÄYýBÃ&Ü<Ã1m ‹Ò^׫æú|¿!®™‚í¿£µìñ÷‚ÎÒоí»ôØåŽkïþ¹ìPÝþÔ9:ãC­ï4ÍPôûÑ©±â&MuE}Å8M/ÑJÞø¾ïN Õÿ^Ó™*ð€¥rlðEÍŒB»ÔÎ9ØKlÂý3;aúPE Ä÷^ñ„ê|%¿9#?Bù¢ð˜ÒÁšÐûM¦0/°ŸÞ«4ðs:LálÚüóB«?ôFO<¹„¬ôÇÌô‚ìôÄÌ•O_óº|ðlõÃÔ{¬õ½ ·Q€ìõYïðyü¿¿ü¼}löÀŒé_ßð¾|ócŸóU÷uìö» g_ɼóíÍzOÏÐÜ÷3Ï÷ øMLø:/øŒløG¬ø´Êø>ìøŸ ù3,ùF˜Jù"lù‘Šù¬ùŠÊùóëùéŒø‹ úÒKú|jú·‹úð,úЬú¸;ø¬ŸÈ®¹³¿°±Èµ¸¹oó·Ȼ﷿﫽BoÈÁo¶Å°ûÉŸøÃ_ÈÇ¿´ÏߢѳӢ՟±×?¡Ù¯°Û?ÂË?úÍ¿ôá?Èݰå_ŸçO°é¿Âã?õߺßúíõñ¿öï/ûóÿÇëÿ¯ù¦÷ïÇàß@‚ D˜PáB† >„QâDŠ-^ĘQãFŽ ôRäH’%MžD™2"H•-]¾„SæLš"YÖÄ™SçNž3oöTèP¢E%þ4šTéR¦#‘6…UêTªŸVÅšU«Î«[½~öbW±eÍžuHíZ¶m—ªuW.U¸síÞÅ[²n^¾}kîõXðà‚€ F¬ÑpbÆÍ.vƒY²AÈ“-_VZóæÁš9í3ôhÉžIŸFÒtjÖ`W·†;­lÚr_ׯMûvnÞCw÷>úwpâ‹'>ùr•Ê™?ï ]:QçÓ­Û­~]{ÅìÛ½?þfwñå³’7Ÿþzõíߺ‡Ï‘}|ú@ç×·~ÿ~šúù3÷ï?›ÿ°@„40AÕTAÄÈA½ B /Ä0C 7ä°C?1Ä '¬MDOD1EG$1) 3kQ¶]ŒÑ¨m¬¶‹Ú1G†zôÍGÖ€ŠH!‚Ì0À,D²B‹L3òȪ’\ " [º*J)¢òGîr2&-·ŒªË…4»I¿0‘$“§ŸÔNîÖ+ŒN1Û íM/å¤èÅ,ñ䊲=) “I;×[3N–â¬$CéLQ«¸”Ô*”3=Ï<”ËB µtÑJí|3R U4ÕI?í´ÎLs5!Q)¥ÕQGW•ÔUURP4ôVZÙ|³MetXasõuÙGyE¥5YhE}ÔVd‹ ÕKc•[e¿Õ5Üdg%Ün1Åv2[O%Zt…wYo;ívÓ4¥E7Ý—Ž=ðR0ǸVI 6àpË6_}ã·ÉjÛ…7â„¥…—RF-˜âkv©áXžáxuYâ‘=íjLŽíSøcq5vW佨ÜyÛ]9%ñ=¹æ˜ 6u\g–yãœÛyb“}.yb› ³öéZ×tñùh½>JôSŒ£åšÉ …NØQEÙk`·­ÚêÀöªVkK»vûk‡Q~j¹=m•gµšê_+ÓVyoX‘ܤÀgk™S½ó.<¯Ãqz<ÇÈzöÙ†Ð^¼ñ»&ÏVóãÜs”B¿StHÏt¾PßWõŽV„=vÙSt¯ÙoÇ=wËk·Qì£BÅœw÷¼žcv…Ç®òâÏÜùí¶5³_ª/«yƽĞúç§Ï\q﵋ûÄ/ÿ|éÄO›|ÊͯüÖgÿ:>7:~×ÜGgûÏÇ_}ý÷ÿ ú*óÖ-ìÓ x¿-o| ÐÿÞ÷¥@j%iþ³XåGÁò1Jƒ÷»WaöÁçP M7#áyÀ% ¦07&c!]H£·yƃ2œakÒtÃå0‡R!  SöCÞñIC$â{êW¥þ%ñ4H!üœHÒMQ‡©³b‘:—EÒø‰‹,Ûâ5Õ1jpe¼L A"­a„ãuæ&9F&JnŒß˜ðXÇ9Ò‘' ÜÿH• Òy‡3ä _~$E~Ž‘´ )NÒ6•´äœ`”I·„.‘šcÝ'9‰A’‰L¥)Ø”TZÍ­T¥Ó6Ë%¢’–[Ù#,õeH]f’—·LTz9ÉDO©4æ E™Ì-µ’™rt&-uùÌ2NS•ä&±9ÊdfÓŠÆô&ƒžN"2“œtÊæ9]HMuþÇ›íÔà;INx.žTg=÷—Ï:ÂSŸyÜÜõùOðÕ“ ß!èA‘÷O…jç  uÝCµ`¶N0-áa0 JÂlô8õèÞ6Rà”¤9 éIq£R•îÒ1-•Qi*JH™’¦×›éX,suSÔð§9bMí9F fħ?¥ÞQ»WÔüË€J]*S¥HT€ Gª§ TíØÓ«NЪRW³×Eíiuªb ægÌJQ¡‡›YëÚtãVYrµvqëUñÚD‘¾Ð­{=kã›×¢6°}-©^+ØâÖ;Ž%’ìÑ KÊ[N6²³,ec™Y¾‹³šåfQÊ?iBç³@ÌÏf§sZV:Ô”¬õªgŸÇIØþM¶õ%n3U[6’·Xm¦y~KVñ ׌ÂUfzLª;æ6×¹ºSÌs¥;]êŠ(|ÕÅnvµ‹"»m×»ß/ú¢šÅÌö~îL+|æGÚ™7€ !|/‹œÛ·³¨EïxÛÿ³ÞËù®·ÀïÜeCkÁ$€)Ç=ë5õ¿¸ð¾>Ó{Ü*i[üì‰ïxµ‘z±ëo ?ØðÞå$;jröí#O2è»YÑØÿ>õ¿\&ÖGœàK??æ‹rG—ŸqEc•í匳Ý+žP×§<ð3>æ³™éÃ=Ä»>᫘ýóµ&{´P Kc56ƒ@d‹›ã¿±5^;• ä¹Î믪@D¾Û¼¤ÀZ³À $; ´@û̸ÕK‹=3Á\Û¡6Û5»´¬„4K¹ šëÙ² "|6"¬!Œ–4”ÀŸ»î‚žkºâºû;(›²÷b»#T2aš’ôª4Ä$~º¯‹êBþ‹Á r$ yCÝ‹Ãq;C «±2”$=C0»¨´ëé3›À1aÄÛ>ö› c 5tGl@ ŽBL­=Ä2¬3[K\­,˯åSž ¯R4E‰®STÅU1\bÅW„EÁÂX¤ÅZlEºÂÅ\ÔÅ]äÅ^ôÅ_Æ`Æa$Æb4ÆcDÆdTÆedÆftÆg„Æh”Æi¤Æj´ÆkÄÆl3ÔÆmäÆnôÆoÇpÇq$Çr4ÇsDÇtTÇudÇvtÇw„Çx”Çy¤Çz´Ç{ÄÇ|ÔÇ}0äÇ~ôÇÈ€È$È‚4ȃDÈ„TÈ…dȆtȇ„Ȉ”ȉ¤ÈŠ´È‹ÄÈŒÔȵäÈŽôÈÉÉ‘$É’4É“| c9M6•tÉV\ÉkI˜|I´‰IŒ3›¬I˹ɞÜÉ™ÔÉ[DÉ¡$Ê¢4Ê‚ôIšTÊ dJžüÉœtÊ¥ŒÊ¦Ê©´ÊªÄJ¨ÌJ—»Jû®C<°ñÊ£ °%ÅP$Ë8: kó<¬vzœ±tªcŠ ã;!,˜¼³½´ÿ»¤Gê °œA¼’Ë3b #L ¾‚#½¯CÌN¢"¡ÄÊ£ÿ*2a§;l7ãéµ¼½[üµˆË€‚½EtËZò'@I§Ç¼™µ#ÀÁãÌ ƒº¶(L¿,BÁËfk¼ÊID»ÄÔ¬KÕ¤¹ÜkÍ¢áLà”Mù1Î÷;™ÆË<©@±;Nºü˲û룿òû̺¼ÄñÉLMkÍñóÎÄ §ÙDN]k8\!ÜK1âMêdM°£5•Kδ«öt?á¼ÎÎŒMèD'[|.u„K¶,Àii9õcüÐh„Ñ´¸l¸ôô+L@ÒÔD‚0‹1¶PÅÿÆ*½Éû´;×Ó¿‘CP…!‹RÛ¸û4¾l´Pã48:{N9õ4š¹A=Í?ŒŸTR;Ï%ÄËQQÒ­’Á«ÉQ¡üCP\* 使ô¿¢#ÓC8Ù“7Óë™É#>¸ Õ.å·ìóËB5¸£Û¶ÙKÌVµ>3¿S•R¸ú$&í:F…Ò(=Gõ»]SÊCÀ {SéÁœß Vü„U´óŒ[δó:°aLÚƒ¹–‘VðLÏR>3Ô¢G=:t:R=j?ê3Àâ @7õÃ&RÖÙ#6×”¹iÝTÒ³?^5¾½ÓTVýŸM‹™øŒ¾xõÖKuµ ¬S ­ÓõÄS?-Ø<µ5…}ÿX.•·\7¬óÜ@á›°ÝÔÕ0 Á?¥´) ›*Ù'¬B3ݘ€W­<â”;ç„¡l}Yø3лk kó¾äs<á´QœúÔ׳ÕY%R½¼A5Õ‘QÌâü·,½¸ç»Xzûí‹¿«»Up]ËòJÙÖS{P*Ä0+|Ü;<.¾]@´Í:æ\YÕƒV»MÝ/TÙ½]Úô×Ì-×…ƒNñªR¶¨Q¬]á¾ ]¿ûÖe½5Žs>©uÙfÖû„VãÝšÍ×/µ3– Þtk˜üÃÁíQ•Q×ZR]­ ® [¯•YÕmÎÓ­¾¦­§´ØŒÝƒºÙ½]ëÑI…“Žm,û¥©%EŒPïÌØÅ%Tf±StBÉýA“uLÆ­\V1µÏuVÖuÜD`TØve%ÿt.­&ÜM/ÞmK)¢ VË,ºÌ-T®ž`­T#®ÜÊYÔÊfaváfÉ®¤áÆá¾aÎa™”a¶à¾qDI,!üÅQ¿’žðp8úl“úÍ|c•âàúàA •IJªüaÞa-îaœÜb/U,þâ+¶á.&ãâÞh¾"îÝkÔÂyÝÆjck|ãäêÔ•šbjìÖ=V5¦^oÔÄ~ªMÝêci× 8%¾chÌN=d9dmüchjdÓRºnT=AöÒnÂpŒÓÒúÄýÄä…cKÞd*%åRîÄu”EPþ¨yôà˜’cXWîªßŠåݪeò¢Ç[–eNÞe´:-^~aîåbþ忚+|$fc+eÆEÈZæaÎEÊfižæÔ¨fk¾fâÚÇlNæ¬òGofæ¹äGqguùGs>ç—HuW^gÐ Hw~çŽHyŽ ˜²g\F–"È|¾gvHþgxîgb)ƒèyž‹„Öçal(†nh‡–+„„è^„¬h‹MŠNÆÓTÈŒÖhí\HifH’Q.éGlH”Né4\éf,á—fÆq‚H–Vè<|H›¾iüªiFÜœFe:œH.¡–H¢þæêi,&‹Dꢦ‹‹|j¨fD§¦ãª¶êj\£©N®R¦êž­H¯þê>ÌH±ëß-kI&k4km mt¬Õ–lsTØŽmÙ&í¢¤íÕžÒÒfG KËÜFb Æív$0úîà¶0pÄàåÎàÜJnåÞÿNK2K eÓaîåæèö­:nÝ_"öÐTæâT¬=áf,µÊîØúÃ^”•#nTÌçú<תU ìÍc›ÝùE¬oMÒ4Õ]År;ƒ+[‹M·,T><9EÒ¿]Ø(Œcµ™îÀý²ÜµoñV­'º¼,:Ô{7gaL};Zø ¸k blé? GüNRÖ–ªm5Ô¾eV5-Õ7ºàüÀè›ãÌ®o};ð?=?Ÿ³ƒUšD{𠦧7’c3 _©]×D»ÚÍäÂar¤Z5q¨ñ»œB§o¿²&opåòL͹“óZ1·îñ~Ùä Î×d^šµónín«íx>öÚáÔ3ûcÝs¡¥Úøöq‡^Ù O:tå;7'pÿ>ÙÈå\ ÙýóÀ$$rFϘ“p%—¬ú.óDG5ó5Ð7Ö—îÛ®Ìí>WÕl_?¯?×­×9_äUpôV Ó\JYõAþõ$>`N/dç øvBÃ]guùtS~ó\7é\®nÑ¡0eï`¾îmŸˆšï(ž!î÷âv[÷sG÷tW÷ug÷vw÷w‡÷x—÷y§÷z·)÷{Ç÷|×÷}ç÷~÷÷ø€ø'ø‚7øƒGø„Wø…gø†wø‡‡øˆ$—ø‰§øŠ·ø‹ÇøŒ×øçøŽ÷øùù‘'ù’7ù“Gù”åWù•gù–¿ßr÷O—OÐ'’ùø ÌšW/šÇùýŠ0l_ IÝÞW Ïp‹d2ú.pôøº·Vn˜÷. u‡½˜¨ét€Ø¦z‹õÓ[÷i‚Q¨/± ·i+´Ò ¿ÜÛµ}UÕq­f _öórÛ#_â¥A\n9<âì@8•rUÿzÉ|{Ç!ûöûàœÉ<ÕúNoÜ+eÝÒÃeðÕ»O—Ø9aþ Òò:Æ"LmgŸl+]sT%ñÂã6Ùgû7tº[\!ß@‘ãzK5þ­bñ_Qò‡n0ˆXà@ƒ ÿdˆðáÁˆP,ØðaBˆ +R̈ÑãG‡ 16,9‘$ÃŽ"%"dé¥D“"W*t™ñâÈœ:wòìé§ÏŸ*ƒ-jô(УJ—2mêô)Ô¨R§R­2©AŽ ÊìºQ#Í›‡ji$Ö‡rÝ Ô+ذ0 jʼnÕeĺ;ÓZí‹Ö/àÀFù .lø0âÄŠÛÍÙx¦[”fÿQÎýÛVfJÌ# ?Þ\²d¸rÁ¾[²bhlo.L¸5쥯cÓ®mû6n§U³žü2,p¼¢-’öývk[»{eŽ7u˸̣“$»ùzî¨k·sïîý;øðâÇ“'Ÿý<úôêsÏΜ5ïi÷òQoW Ÿîéü×¾Çîx:€Ïý&àpÃö›t”…„Üz :ø „J8!`íQhÙ‚ú·Y*¡F×|îÇßD÷Éw"$†˜–…ºø"Œ1Ê8£v4ö4Ö{ÙÈŽƒíø#A 9äƒ-Êø™ŽÊ9‘.ù$”QJ9eŽTÅÙ”H^i%—]zùåŒMf™$˜A‰Y&ši*ª¹æSå¹ù&œqÂI&›Öy'žyê !q|Êù' º'¡…zhb}"z–Ù¢:ú(¤j¶¨¢‘Zz)¦™Ö#¥ jú)¨¡ŠJ'h†r:*ª©ªiRgz¹Üª±Ê:ëšwÚ*­¹êº«”,Þj'¯Á ;ì„|¹:&°Ä*»,³´½vl”Æ6;-µÕºÆãžÏZ»-·Ý"e^žÚz;.¹åþ‡hy檻®·Ð¢é.»ñÊ«*¼`Ö;/¾ù^zï«úúûo®üv)q0À¬&ÁV&|0à #˪ÃKlê¾[|1› ?Œ1ÇS©q¯‹<ò’ GK2Ê)Óh2”,«ü2ÌT¹\rÌ5ÛœÞÌDæ|3Ï=Ÿ ±ÏA ]ØÎB=4Ò1 äÒI;MrÓ;Fý4ÕO½rÕYk­¥Wüoý5À^ 6Ù_‹ãÙeë&(Ûm» ®Ú?U7Œi»h÷ÅxKJwÝ]ó]%ÐS¨w±‚“ê(á†sÍc}VYøá‰f:y¸âž6šxå?/^jSgÂÊxJHe®á£˜Î[r¤Oå9€rs¾ù鯣»ƒŸÇEŸˆ¦Ådb~5MjâK¦çaè¨Ó.û¯Ç«g{fœø^eÄ·$=w“}SeÍk»é|*¿<~ZG]©)6t >Oš^ÛŸÞ}‘ßãܺå—úúèƒ_þÙO޼áàW;ù¡‡y¶šÔþÎ׿«G ’–òØ ¾~ 4õæÒ' 6†ƒøAGAðÍ0;í©î€7Ÿâ…îz¹k^‡,‚Bï>3íF8¿²‡16Ò¡¿€x!ЇX‹àÜxx›£Ý°oHô›—E&1ŠÎšb«hEؼ­‹^üâ÷ˆØÃ-’q_<ã ~XÆ5Îîd«C#ÙÆÆ9ÐRc›è¨Ç¶LfýÚ# qÓ¤=®qwôãÀ©ÈÚ v’«SÖÈGÞÈ}Áã"¹gÁšPpŽCä–:¹9–a2“£cù>¸BUï|­”!+a‰C¨ AîsaÿJiÊÊ¡3p‘^ KÔ;ùÎW«Ûd*WT“X2°”%ä ¹Hˆ¬žñèÁâ Çyÿ“$2}Ù`Ê{1Œe1]™:k²ó“ëTÍgî§?ѬӛÈ' §é›ò9°Î¬§+±Ô΂rr‘ç9w*zÎ2ïK4³™¾³ØW1&A3êPHô+ìgš d*Å€½AèD3´Pu:I—%Û Ï‰¢rª2…3T¡ 1Z£‡ª/5½ÝE:>Šþï¥F%Ó ª™F“¦ÊüŽ2û3Sµªž¤Ù1iÕ­:rHøä’K¹ú´°^u£ +ZUçU¥n,­i#\ÝÄÖ¹µ®]‹+^ßd×½òµ¯~ÿý+`+ØÁ¶°†=,b[¨¼2¶±Ž},d-©Ø¬‘Õb•¬®.+1ÍbvVœuØg;»ª†U|ðT‘lL;˜ý¬VŸÉíÐ(èZ\võìæF¡ŸP¶U«elŽõ¸ å«Â%iCËê[¡õÒ:¹[MDeŠN¶4ñƒ×Ó^ ¥Ëê:W?fÑÒY¢KJ¦¦ÝåèyÃ÷ÝêÞv¹53éôÄiÑër0{]I3ç)Ñ H@Û¥n:C$L_2“zþqjWü‹\÷*-|Õ¥'ûÉÒ7±3öŒð‚0èO~þS:òíjóçœòjxÁ ~|‡ê©²P˜¢ Kdb,¼†j¸Ä* ¨ Œ“c—ëŽ4¥>Nî‰ÿo–âðNÓ@/~1ê4sdK˜À¸Ú¯=UÜaýê¸Én™mhƒ¬©!WôÀ ²eB§‘JÙA(Ýð‡•e‹z¸:V&1œ{lb-CíJ/tð2YÃ;§°¦RÍ®ðò‚Î??uD4%‘ ¥šS÷xç¿î3+Í{hCÃðµt†Ù½N¥Ö?Ug<Íò¥±Ø9ž’Z«^«å@jHñKµ„.“«£ÅÞö®Úcª.Ø­kÝ)SæšR‘ý5°ƒ-l½ rØÆ>6²…ͳ^ç‹Ù`¥µ®©¹FgŸ•Ú<´v¼°mGm‡1B¥õc=êⲖܳrKmt›ð¸´­ Q5$0Wíö‘½e˜<×­>´ÆæhÛ¹R–þØÆü^—¸Ž ŸùÌÌœ0ÝeÞåñeí]gïW,w *]ë‡Ç2®±©îu]Ól&ÞÎ<2[×̆3á÷žùâÅÄñjw»œ'DÉëýÔŠÞ³pèÃBD¿pÑëÍJäÊÝqÝ5¼Ï¾gñ£'SÌÇÇö¶ø¢_N×ÜŽ­7¹¤Ý|¡ Ü6–‡6¾¦ŸEZN^ûƒ¯@>#?mÙçß2µç¶¸½À½6Ó©Öû'ÿ×Ëè~Tßè×ý!šìýó¿ÿ]Äþ¡J¥Ùü `Ò  rŸëa)–.à¸5`b= –TüMV`ô©j`¦Ø z Ùß`e † ¾× ²ZmaV ®ài¡–Ö Â ã$]gÕ  îé࢜oùà^`aàô ²`¨ aÎNà6!â¬6á¢^Ž^á®]Za¦Ìþ`Ö™&–¡"!.V®!¡ŒáÈÀ! Ê¡­¹á¶¡† æáÐaÇø¡M¢Õð¡.!!≠æÍ!öá.bš$":â#6¢$Ú %V"§©!&ÂÚ%nâY¢'Z"(†b&j$Bà)n)~I*FL+à+6L,Öß,KL-’ß-âÚ*–bîâ³¢/¶U/#]#1>I.êâ1:Ÿ&.#V£3M­%ãÑQã¿X£Øub4þ6žÜ6>c3~ctcö‰ãûÜ…£9–”ÿí_ ‘#¯m¡¹c&ù <êI=*=¶c:êÆ*—gÈ mY Ý£>W Òɼ1àä@’Ô!DŠŽYÑC.¤CîÏÇMW w펟idùÉß>Fà7ÞIð—0]žñ˜ ¡äëTdÆŒ¤¿åÓ“-ýkäœì1žÝ9a·É¤@R“ŠøÝÜmH¾¡Ù‘àe?N]•-ÞÖ1Já©$OÖLÖ SJ$Ü=%MüTT*ʘWjÞÝ)ÑUÎQL SSE•MÕ¤éñážñQZDÐY²giÔÌ]nÊ:òŽã%aZ&¡f©ßLª îåÂ#Ê$æ_¶b6eØ…›aVRe$aö%² &fò`(ùä~)dV¾T-=¤RW@ަF•&FòÈÍÞE-œ4©]Tµªæ;ªÛád™“7Íå€]Y€ nfÿ mÞä8QeÕé’%hç´…S<}^ã­]š©ðµ”tç&mœÔ‰˜Ôí“M”çÛq`wZd©m\é…Ð „¹ãÕezN§e¾^ññ™¡!ž~ Ÿ%åTŠè“bÖ'"&4V“c(‚¨‚Î#ƒ6(>>(„¤f&Û„^(†f¨†n(‡v¨‡~(ˆ†¨ˆŽ(‰–¨‰ž(Ц)¨Š®(‹¶¨‹¾(ŒÆ¨ŒÎ(Ö¨Þ(Žæ¨Žî(ö¨þ(©)‘±©‘)’&©’.)“6)Ød`ÌÆ€:é» çNM&•n‘…aÜqWïu\ ei„reK–érúÓ/M©˜–¢{®àõä*Ç ßœÖ©œÞ)¥á)ê©æ©ŸîéŸö) ª *Ÿ*]Ôv…[p¢$¢j¤j Nª¥V*¦Jj¦Rª¦v*§~*Ÿú(x&eËùÏЭ)Z²~Ígô੢괗FÛéÞð¬.’š*æê´ì*¯þ*°«°+±«±+²&«².+³6«³>+´F«´N+ÓTè:ÿR+Ø ‡Xk°m+·þZzŽ!ÁAæmbewŠkg²¡gfK¸Jæº:š®’¤?転tNÒ½ŽRnùŸ¦ëAêße^) ºkHžÂåDª&k ”Á&Èüëg,æÌ¼¾R,¼Â“ëEî˜k‚ä×líÙf¤YiË]‡Ã즼Û,aIËn ޤ¯fN/™äªº$ÿÌ—~>êw §œIlQ  ñ½f3l1mªÃ…iÊJßÇJÜ*“sIåÈ¡¬GBO¢•¥9§€&'R¢)s’g—…˜›ÖeÎ6'é -vùÜnö¦Ð…^ц“Κi|qÓ€-}ØBŸL*\~ê…çÙ*]vŽ¬Ù±ÑymMZ]Uâ-á&§y¦ÞÜÒä{N¥é{BÇΕk:¦XÍ¥ÜÆ'vÂç©ç»KuB¥xºéx­Wä-.ã^n«ž]ãÖU1ìw ^WÒnåFYäÖÛú˜îÀm‹.Q1T늘˜ù­ç†ÞèYù´©“ÙÍò’P¨e‡°å~ hÎé>W]Ð¥ßÆ¬ñú”ï¢ÎîÓÉ-Æî.™FG›Âf‚ñfãr¥R.#ºNìRio~òN÷¶ ˜.]wlWûÆnöâ§\~¯!Ù^¤—[vïÓr­8îoÀ±ë¾Ö‘Ê^}LF£ì=b)Q0çï1~p½2b¯\ÒÀ^¯â pÀÆä Óp¾~«_ò/k¬¹bkkà0°y+;–±1'±/1i@;libstruts1.2-java-1.2.9/src/share/org/apache/struts/action/Action.java0000644000175000017500000005331410404045230026264 0ustar arnaudarnaud00000000000000/* * $Id: Action.java 164530 2005-04-25 03:11:07Z niallp $ * * Copyright 2000-2005 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.action; import java.util.Locale; import javax.servlet.ServletContext; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import javax.sql.DataSource; import org.apache.struts.Globals; import org.apache.struts.config.ModuleConfig; import org.apache.struts.util.MessageResources; import org.apache.struts.util.ModuleUtils; import org.apache.struts.util.RequestUtils; import org.apache.struts.util.TokenProcessor; /** *

      An Action is an adapter between the contents of an incoming * HTTP request and the corresponding business logic that should be executed to * process this request. The controller (RequestProcessor) will select an * appropriate Action for each request, create an instance (if necessary), * and call the execute method.

      * *

      Actions must be programmed in a thread-safe manner, because the * controller will share the same instance for multiple simultaneous * requests. This means you should design with the following items in mind: *

      *
        *
      • Instance and static variables MUST NOT be used to store information * related to the state of a particular request. They MAY be used to * share global resources across requests for the same action.
      • *
      • Access to other resources (JavaBeans, session variables, etc.) MUST * be synchronized if those resources require protection. (Generally, * however, resource classes should be designed to provide their own * protection where necessary.
      • *
      * *

      When an Action instance is first created, the controller * will call setServlet with a non-null argument to * identify the servlet instance to which this Action is attached. * When the servlet is to be shut down (or restarted), the * setServlet method will be called with a null * argument, which can be used to clean up any allocated resources in use * by this Action.

      * * @version $Rev: 164530 $ $Date: 2005-04-25 04:11:07 +0100 (Mon, 25 Apr 2005) $ */ public class Action { /** *

      An instance of TokenProcessor to use for token functionality.

      */ private static TokenProcessor token = TokenProcessor.getInstance(); // :TODO: We can make this variable protected and remove Action's token methods // or leave it private and allow the token methods to delegate their calls. // ----------------------------------------------------- Instance Variables /** *

      The system default Locale.

      * * @deprecated Use Locale.getDefault directly. This will be removed after * Struts 1.2. */ protected static Locale defaultLocale = Locale.getDefault(); // :TODO: Remove after Struts 1.2 /** *

      The servlet to which we are attached.

      */ protected ActionServlet servlet = null; // ------------------------------------------------------------- Properties /** *

      Return the servlet instance to which we are attached.

      */ public ActionServlet getServlet() { return (this.servlet); } /** *

      Set the servlet instance to which we are attached (if * servlet is non-null), or release any allocated resources * (if servlet is null).

      * * @param servlet The new controller servlet, if any */ public void setServlet(ActionServlet servlet) { this.servlet = servlet; // :FIXME: Is this suppose to release resources? } // --------------------------------------------------------- Public Methods /** *

      Process the specified non-HTTP request, and create the * corresponding non-HTTP response (or forward to another web * component that will create it), with provision for handling * exceptions thrown by the business logic. * Return an {@link ActionForward} instance describing where and how * control should be forwarded, or null if the response has * already been completed.

      * *

      The default implementation attempts to forward to the HTTP * version of this method.

      * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The non-HTTP request we are processing * @param response The non-HTTP response we are creating * * @exception Exception if the application business logic throws * an exception. * @since Struts 1.1 */ public ActionForward execute( ActionMapping mapping, ActionForm form, ServletRequest request, ServletResponse response) throws Exception { try { return execute( mapping, form, (HttpServletRequest) request, (HttpServletResponse) response); } catch (ClassCastException e) { return null; } } /** *

      Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it), * with provision for handling exceptions thrown by the business logic. * Return an {@link ActionForward} instance describing where and how * control should be forwarded, or null if the response * has already been completed.

      * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception Exception if the application business logic throws * an exception * @since Struts 1.1 */ public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { return null; } // ---------------------------------------------------- Protected Methods /** * Adds the specified messages keys into the appropriate request * attribute for use by the <html:messages> tag (if * messages="true" is set), if any messages are required. * Initialize the attribute if it has not already been. * Otherwise, ensure that the request attribute is not set. * * @param request The servlet request we are processing * @param messages Messages object * @since Struts 1.2.1 */ protected void addMessages( HttpServletRequest request, ActionMessages messages) { if (messages == null){ // bad programmer! *slap* return; } // get any existing messages from the request, or make a new one ActionMessages requestMessages = (ActionMessages) request.getAttribute(Globals.MESSAGE_KEY); if (requestMessages == null){ requestMessages = new ActionMessages(); } // add incoming messages requestMessages.add(messages); // if still empty, just wipe it out from the request if (requestMessages.isEmpty()) { request.removeAttribute(Globals.MESSAGE_KEY); return; } // Save the messages request.setAttribute(Globals.MESSAGE_KEY, requestMessages); } /** * Adds the specified errors keys into the appropriate request attribute * for use by the <html:errors> tag, if any messages are required. * Initialize the attribute if it has not already been. Otherwise, ensure * that the request attribute is not set. * * @param request The servlet request we are processing * @param errors Errors object * @since Struts 1.2.1 */ protected void addErrors( HttpServletRequest request, ActionMessages errors) { if (errors == null){ // bad programmer! *slap* return; } // get any existing errors from the request, or make a new one ActionMessages requestErrors = (ActionMessages)request.getAttribute(Globals.ERROR_KEY); if (requestErrors == null){ requestErrors = new ActionMessages(); } // add incoming errors requestErrors.add(errors); // if still empty, just wipe it out from the request if (requestErrors.isEmpty()) { request.removeAttribute(Globals.ERROR_KEY); return; } // Save the errors request.setAttribute(Globals.ERROR_KEY, requestErrors); } /** *

      Generate a new transaction token, to be used for enforcing a single * request for a particular transaction.

      * * @param request The request we are processing */ protected String generateToken(HttpServletRequest request) { return token.generateToken(request); } /** *

      Return the default data source for the current module.

      * * @param request The servlet request we are processing * * @since Struts 1.1 */ protected DataSource getDataSource(HttpServletRequest request) { return (getDataSource(request, Globals.DATA_SOURCE_KEY)); } /** *

      Return the specified data source for the current module.

      * * @param request The servlet request we are processing * @param key The key specified in the <data-sources> * element. * * @since Struts 1.1 */ protected DataSource getDataSource(HttpServletRequest request, String key) { // Identify the current module ServletContext context = getServlet().getServletContext(); ModuleConfig moduleConfig = ModuleUtils.getInstance().getModuleConfig(request, context); return (DataSource) context.getAttribute(key + moduleConfig.getPrefix()); } /** * Retrieves any existing errors placed in the request by previous actions. This method could be called instead * of creating a new ActionMessages() at the beginning of an Action * This will prevent saveErrors() from wiping out any existing Errors * * @return the Errors that already exist in the request, or a new ActionMessages object if empty. * @param request The servlet request we are processing * @since Struts 1.2.1 */ protected ActionMessages getErrors(HttpServletRequest request) { ActionMessages errors = (ActionMessages) request.getAttribute(Globals.ERROR_KEY); if (errors == null) { errors = new ActionMessages(); } return errors; } /** *

      Return the user's currently selected Locale.

      * * @param request The request we are processing */ protected Locale getLocale(HttpServletRequest request) { return RequestUtils.getUserLocale(request, null); } /** * Retrieves any existing messages placed in the request by previous actions. This method could be called instead * of creating a new ActionMessages() at the beginning of an Action * This will prevent saveMessages() from wiping out any existing Messages * * @return the Messages that already exist in the request, or a new ActionMessages object if empty. * @param request The servlet request we are processing * @since Struts 1.2.1 */ protected ActionMessages getMessages(HttpServletRequest request) { ActionMessages messages = (ActionMessages) request.getAttribute(Globals.MESSAGE_KEY); if (messages == null) { messages = new ActionMessages(); } return messages; } /** *

      Return the default message resources for the current module.

      * * @param request The servlet request we are processing * @since Struts 1.1 */ protected MessageResources getResources(HttpServletRequest request) { return ((MessageResources) request.getAttribute(Globals.MESSAGES_KEY)); } /** *

      Return the specified message resources for the current module.

      * * @param request The servlet request we are processing * @param key The key specified in the * <message-resources> element for the * requested bundle * * @since Struts 1.1 */ protected MessageResources getResources( HttpServletRequest request, String key) { // Identify the current module ServletContext context = getServlet().getServletContext(); ModuleConfig moduleConfig = ModuleUtils.getInstance().getModuleConfig(request, context); // Return the requested message resources instance return (MessageResources) context.getAttribute( key + moduleConfig.getPrefix()); } /** *

      Returns true if the current form's cancel button was * pressed. This method will check if the Globals.CANCEL_KEY * request attribute has been set, which normally occurs if the cancel * button generated by CancelTag was pressed by the user * in the current request. If true, validation performed * by an ActionForm's validate() method * will have been skipped by the controller servlet.

      * * @param request The servlet request we are processing * @see org.apache.struts.taglib.html.CancelTag */ protected boolean isCancelled(HttpServletRequest request) { return (request.getAttribute(Globals.CANCEL_KEY) != null); } /** *

      Return true if there is a transaction token stored in * the user's current session, and the value submitted as a request * parameter with this action matches it. Returns false * under any of the following circumstances:

      *
        *
      • No session associated with this request
      • *
      • No transaction token saved in the session
      • *
      • No transaction token included as a request parameter
      • *
      • The included transaction token value does not match the * transaction token in the user's session
      • *
      * * @param request The servlet request we are processing */ protected boolean isTokenValid(HttpServletRequest request) { return token.isTokenValid(request, false); } /** *

      Return true if there is a transaction token stored in * the user's current session, and the value submitted as a request * parameter with this action matches it. Returns false under * any of the following circumstances:

      *
        *
      • No session associated with this request
      • *
      • No transaction token saved in the session
      • *
      • No transaction token included as a request parameter
      • *
      • The included transaction token value does not match the * transaction token in the user's session
      • *
      * * @param request The servlet request we are processing * @param reset Should we reset the token after checking it? */ protected boolean isTokenValid(HttpServletRequest request, boolean reset) { return token.isTokenValid(request, reset); } /** *

      Reset the saved transaction token in the user's session. This * indicates that transactional token checking will not be needed * on the next request that is submitted.

      * * @param request The servlet request we are processing */ protected void resetToken(HttpServletRequest request) { token.resetToken(request); } /** *

      Save the specified error messages keys into the appropriate request * attribute for use by the <html:errors> tag, if any messages * are required. Otherwise, ensure that the request attribute is not * created.

      * * @param request The servlet request we are processing * @param errors Error messages object * @deprecated Use saveErrors(HttpServletRequest, ActionMessages) instead. * This will be removed after Struts 1.2. */ protected void saveErrors(HttpServletRequest request, ActionErrors errors) { this.saveErrors(request,(ActionMessages)errors); // :TODO: Remove after Struts 1.2. } /** *

      Save the specified error messages keys into the appropriate request * attribute for use by the <html:errors> tag, if any messages * are required. Otherwise, ensure that the request attribute is not * created.

      * * @param request The servlet request we are processing * @param errors Error messages object * @since Struts 1.2 */ protected void saveErrors(HttpServletRequest request, ActionMessages errors) { // Remove any error messages attribute if none are required if ((errors == null) || errors.isEmpty()) { request.removeAttribute(Globals.ERROR_KEY); return; } // Save the error messages we need request.setAttribute(Globals.ERROR_KEY, errors); } /** *

      Save the specified messages keys into the appropriate request * attribute for use by the <html:messages> tag (if * messages="true" is set), if any messages are required. Otherwise, * ensure that the request attribute is not created.

      * * @param request The servlet request we are processing. * @param messages The messages to save. null or empty * messages removes any existing ActionMessages in the request. * * @since Struts 1.1 */ protected void saveMessages( HttpServletRequest request, ActionMessages messages) { // Remove any messages attribute if none are required if ((messages == null) || messages.isEmpty()) { request.removeAttribute(Globals.MESSAGE_KEY); return; } // Save the messages we need request.setAttribute(Globals.MESSAGE_KEY, messages); } /** *

      Save the specified messages keys into the appropriate session * attribute for use by the <html:messages> tag (if * messages="true" is set), if any messages are required. Otherwise, * ensure that the session attribute is not created.

      * * @param session The session to save the messages in. * @param messages The messages to save. null or empty * messages removes any existing ActionMessages in the session. * * @since Struts 1.2 */ protected void saveMessages( HttpSession session, ActionMessages messages) { // Remove any messages attribute if none are required if ((messages == null) || messages.isEmpty()) { session.removeAttribute(Globals.MESSAGE_KEY); return; } // Save the messages we need session.setAttribute(Globals.MESSAGE_KEY, messages); } /** *

      Save the specified error messages keys into the appropriate session * attribute for use by the <html:messages> tag (if messages="false") * or <html:errors>, if any error messages are required. Otherwise, * ensure that the session attribute is empty.

      * * @param session The session to save the error messages in. * @param errors The error messages to save. null or empty * messages removes any existing error ActionMessages in the session. * * @since Struts 1.2.7 */ protected void saveErrors( HttpSession session, ActionMessages errors) { // Remove the error attribute if none are required if ((errors == null) || errors.isEmpty()) { session.removeAttribute(Globals.ERROR_KEY); return; } // Save the errors we need session.setAttribute(Globals.ERROR_KEY, errors); } /** *

      Save a new transaction token in the user's current session, creating * a new session if necessary.

      * * @param request The servlet request we are processing */ protected void saveToken(HttpServletRequest request) { token.saveToken(request); } /** *

      Set the user's currently selected Locale into their * HttpSession.

      * * @param request The request we are processing * @param locale The user's selected Locale to be set, or null * to select the server's default Locale */ protected void setLocale(HttpServletRequest request, Locale locale) { HttpSession session = request.getSession(); if (locale == null) { locale = Locale.getDefault(); } session.setAttribute(Globals.LOCALE_KEY, locale); } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/action/ActionError.java0000644000175000017500000000764210404045230027301 0ustar arnaudarnaud00000000000000/* * $Id: ActionError.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 2000-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.action; import java.io.Serializable; /** *

      An encapsulation of an individual error message returned by the * validate method of an ActionForm, consisting * of a message key (to be used to look up message text in an appropriate * message resources database) plus up to four placeholder objects that can * be used for parametric replacement in the message text.

      * *

      The placeholder objects are referenced in the message text using the same * syntax used by the JDK MessageFormat class. Thus, the first * placeholder is '{0}', the second is '{1}', etc.

      * *

      Since Struts 1.1 ActionError extends ActionMessage. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ * @deprecated Please use ActionMessage instead, deprecated since 1.2.0. */ public class ActionError extends ActionMessage implements Serializable { // ----------------------------------------------------------- Constructors /** *

      Construct an action error with no replacement values.

      * * @param key Message key for this error message */ public ActionError(String key) { super(key); } /** *

      Construct an action error with the specified replacement values.

      * * @param key Message key for this error message * @param value0 First replacement value */ public ActionError(String key, Object value0) { super(key, value0); } /** *

      Construct an action error with the specified replacement values.

      * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value */ public ActionError(String key, Object value0, Object value1) { super(key, value0, value1); } /** *

      Construct an action error with the specified replacement values.

      * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value * @param value2 Third replacement value */ public ActionError(String key, Object value0, Object value1, Object value2) { super(key, value0, value1, value2); } /** *

      Construct an action error with the specified replacement values.

      * * @param key Message key for this error message * @param value0 First replacement value * @param value1 Second replacement value * @param value2 Third replacement value * @param value3 Fourth replacement value */ public ActionError(String key, Object value0, Object value1, Object value2, Object value3) { super(key, value0, value1, value2, value3); } /** *

      Construct an action error with the specified replacement values.

      * * @param key Message key for this message * @param values Array of replacement values */ public ActionError(String key, Object[] values) { super(key, values); } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/action/ActionErrors.java0000644000175000017500000000637210404045222027464 0ustar arnaudarnaud00000000000000/* * $Id: ActionErrors.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 2000-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.action; import java.io.Serializable; /** *

      A class that encapsulates the error messages being reported by * the validate() method of an ActionForm. * Validation errors are either global to the entire ActionForm * bean they are associated with, or they are specific to a particular * bean property (and, therefore, a particular input field on the corresponding * form).

      * *

      Each individual error is described by an ActionMessage * object, which contains a message key (to be looked up in an appropriate * message resources database), and up to four placeholder arguments used for * parametric substitution in the resulting message.

      * *

      IMPLEMENTATION NOTE - It is assumed that these objects * are created and manipulated only within the context of a single thread. * Therefore, no synchronization is required for access to internal * collections.

      * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class ActionErrors extends ActionMessages implements Serializable { // ----------------------------------------------------- Manifest Constants /** * The "property name" marker to use for global errors, as opposed to * those related to a specific property. * @deprecated Use ActionMessages.GLOBAL_MESSAGE instead. This will be * removed after Struts 1.2. */ public static final String GLOBAL_ERROR = "org.apache.struts.action.GLOBAL_ERROR"; // --------------------------------------------------------- Public Methods /** * Create an empty ActionErrors object. */ public ActionErrors() { super(); } /** * Create an ActionErrors object initialized with the given * messages. * * @param messages The messages to be initially added to this object. * This parameter can be null. * @since Struts 1.1 */ public ActionErrors(ActionErrors messages) { super(messages); } /** * Add an error message to the set of errors for the specified property. * * @param property Property name (or ActionErrors.GLOBAL_ERROR) * @param error The error message to be added * @deprecated Use add(String, ActionMessage) instead. This will be * removed after Struts 1.2. */ public void add(String property, ActionError error) { super.add(property, error); } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/action/ActionForm.java0000644000175000017500000002226710404045210027111 0ustar arnaudarnaud00000000000000/* * $Id: ActionForm.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 2000-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.action; import java.io.Serializable; import javax.servlet.ServletRequest; import javax.servlet.http.HttpServletRequest; import org.apache.struts.upload.MultipartRequestHandler; /** *

      An ActionForm is a JavaBean optionally associated with * one or more ActionMappings. Such a bean will have had its * properties initialized from the corresponding request parameters before * the corresponding Action.execute method is called.

      * *

      When the properties of this bean have been populated, but before the * execute method of the Action is called, this bean's * validate method will be called, which gives the bean a chance * to verify that the properties submitted by the user are correct and valid. * If this method finds problems, it returns an error messages object that * encapsulates those problems, and the controller servlet will return control * to the corresponding input form. Otherwise, the validate * method returns null, indicating that everything is acceptable * and the corresponding Action.execute method should be * called.

      * *

      This class must be subclassed in order to be instantiated. Subclasses * should provide property getter and setter methods for all of the bean * properties they wish to expose, plus override any of the public or * protected methods for which they wish to provide modified functionality. *

      * *

      Because ActionForms are JavaBeans, subclasses should also implement * Serializable, as required by the JavaBean specification. * Some containers require that an object meet all JavaBean requirements * in order to use the introspection API upon which ActionForms rely.

      * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public abstract class ActionForm implements Serializable { // ----------------------------------------------------- Instance Variables /** *

      The servlet instance to which we are attached.

      */ protected transient ActionServlet servlet = null; /** *

      The MultipartRequestHandler for this form, can be * null.

      */ protected transient MultipartRequestHandler multipartRequestHandler; // ------------------------------------------------------------- Properties /** *

      Return the servlet instance to which we are attached.

      */ protected ActionServlet getServlet() { return (this.servlet); } /** *

      Return the controller servlet instance to which we are attached. * as an ActionServletWrapper.

      * * @see org.apache.struts.action.ActionServletWrapper * @since Struts 1.0.1 */ public ActionServletWrapper getServletWrapper() { return new ActionServletWrapper(getServlet()); } /** *

      Return the MultipartRequestHandler for this form * The reasoning behind this is to give form bean developers * control over the lifecycle of their multipart requests * through the use of the finish and/or rollback * methods of MultipartRequestHandler. This method will return * null if this form's enctype is not * "multipart/request-data".

      * * @see org.apache.struts.upload.MultipartRequestHandler */ public MultipartRequestHandler getMultipartRequestHandler() { return multipartRequestHandler; } /** *

      Set the servlet instance to which we are attached (if * servlet is non-null), or release any allocated resources * (if servlet is null).

      * * @param servlet The new controller servlet, if any */ public void setServlet(ActionServlet servlet) { this.servlet = servlet; // :FIXME: Should this be releasing resources? } /** *

      Set the Handler provides to use in dealing with file uploads.

      * * @param multipartRequestHandler The Handler to use for fileuploads. */ public void setMultipartRequestHandler(MultipartRequestHandler multipartRequestHandler) { this.multipartRequestHandler = multipartRequestHandler; } // --------------------------------------------------------- Public Methods /** *

      Reset all bean properties to their default state. This method is * called before the properties are repopulated by the controller.

      * *

      The default implementation attempts to forward to the HTTP * version of this method.

      * * @param mapping The mapping used to select this instance * @param request The servlet request we are processing */ public void reset(ActionMapping mapping, ServletRequest request) { try { reset(mapping, (HttpServletRequest) request); } catch (ClassCastException e) { ;//FFIXME: Why would this every happen except a null } } /** *

      Reset bean properties to their default state, as needed. This method is * called before the properties are repopulated by the controller.

      * *

      The default implementation does nothing. In practice, the only properties * that need to be reset are those which represent checkboxes on a session-scoped * form. Otherwise, properties can be given initial values where the field is * declared.

      * *

      If the form is stored in session-scope so that values can be collected * over multiple requests (a "wizard"), you must be very careful of which * properties, if any, are reset. As mentioned, session-scope checkboxes * must be reset to false for any page where this property is set. This is * because the client does not submit a checkbox value when it is clear (false). * If a session-scoped checkbox is not proactively reset, it can never be set * to false.

      * *

      This method is not the appropriate place to initialize * form value for an "update" type page (this should be done in a setup Action). * You mainly need to worry about setting checkbox values to false; most of the * time you can leave this method unimplemented. *

      * * @param mapping The mapping used to select this instance * @param request The servlet request we are processing */ public void reset(ActionMapping mapping, HttpServletRequest request) { ; // Default implementation does nothing } /** *

      Validate the properties that have been set for this non-HTTP request, * and return an ActionErrors object that encapsulates any * validation errors that have been found. If no errors are found, return * null or an ActionErrors object with no * recorded error messages.

      * *

      The default implementation attempts to forward to the HTTP version of * this method.

      * * @param mapping The mapping used to select this instance * @param request The servlet request we are processing */ public ActionErrors validate(ActionMapping mapping, ServletRequest request) { try { return (validate(mapping, (HttpServletRequest) request)); } catch (ClassCastException e) { return (null); } } /** *

      Validate the properties that have been set for this HTTP request, * and return an ActionErrors object that encapsulates any * validation errors that have been found. If no errors are found, * return null or an ActionErrors object with * no recorded error messages.

      * *

      The default implementation performs no validation and returns * null. Subclasses must override this method to provide * any validation they wish to perform.

      * * @see DynaActionForm * * @param mapping The mapping used to select this instance * @param request The servlet request we are processing */ public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { return (null); } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/action/ActionFormBean.java0000644000175000017500000000373110404045222027675 0ustar arnaudarnaud00000000000000/* * $Id: ActionFormBean.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 2000-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.action; import org.apache.struts.config.FormBeanConfig; /** *

      An ActionFormBean is the definition of a form bean that * is loaded from a <form-bean> element in the Struts * configuration file. It can be subclassed as necessary to add additional * properties.

      * *

      Since Struts 1.1 ActionFormBean extends FormBeanConfig.

      * *

      NOTE - This class would have been deprecated and * replaced by org.apache.struts.config.FormBeanConfig except * for the fact that it is part of the public API that existing applications * are using.

      * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class ActionFormBean extends FormBeanConfig { /** *

      Construct an instance with default vaslues.

      */ public ActionFormBean() { super(); } /** *

      Construct an instance with the specified values.

      * * @param name Form bean name * @param type Fully qualified class name */ public ActionFormBean(String name, String type) { super(); setName(name); setType(type); } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/action/ActionForward.java0000644000175000017500000001321310404045212027603 0ustar arnaudarnaud00000000000000/* * $Id: ActionForward.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 2000-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.action; import org.apache.struts.config.ForwardConfig; /** *

      An ActionForward represents a destination to which the * controller, RequestProcessor, might be directed to * perform a RequestDispatcher.forward or * HttpServletResponse.sendRedirect to, as a result of * processing activities of an Action class. Instances of this * class may be created dynamically as necessary, or configured in association * with an ActionMapping instance for named lookup of potentially * multiple destinations for a particular mapping instance.

      * *

      An ActionForward has the following minimal set of properties. * Additional properties can be provided as needed by subclassses.

      *
        *
      • contextRelative - Should the path * value be interpreted as context-relative (instead of * module-relative, if it starts with a '/' character? [false]
      • *
      • name - Logical name by which this instance may be * looked up in relationship to a particular ActionMapping. *
      • *
      • path - Module-relative or context-relative URI to * which control should be forwarded, or an absolute or relative URI to * which control should be redirected.
      • *
      • redirect - Set to true if the controller * servlet should call HttpServletResponse.sendRedirect() * on the associated path; otherwise false. [false]
      • *
      * *

      Since Struts 1.1 this class extends ForwardConfig * and inherits the contextRelative property. * *

      NOTE - This class would have been deprecated and * replaced by org.apache.struts.config.ForwardConfig except * for the fact that it is part of the public API that existing applications * are using.

      * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class ActionForward extends ForwardConfig { /** *

      Construct a new instance with default values.

      */ public ActionForward() { this(null, false); } /** *

      Construct a new instance with the specified path.

      * * @param path Path for this instance */ public ActionForward(String path) { this(path, false); } /** *

      Construct a new instance with the specified * path and redirect flag.

      * * @param path Path for this instance * @param redirect Redirect flag for this instance */ public ActionForward(String path, boolean redirect) { super(); setName(null); setPath(path); setRedirect(redirect); } /** *

      Construct a new instance with the specified name, * path and redirect flag.

      * * @param name Name of this instance * @param path Path for this instance * @param redirect Redirect flag for this instance */ public ActionForward(String name, String path, boolean redirect) { super(); setName(name); setPath(path); setRedirect(redirect); } /** *

      Construct a new instance with the specified values.

      * * @param name Name of this instance * @param path Path for this instance * @param redirect Redirect flag for this instance * @param contextRelative Context relative flag for this instance * @deprecated Use module rather than contextRelative */ public ActionForward(String name, String path, boolean redirect, boolean contextRelative) { super(); setName(name); setPath(path); setRedirect(redirect); setContextRelative(contextRelative); } /** * Construct a new instance with the specified values. * * @param name Name of this forward * @param path Path to which control should be forwarded or redirected * @param redirect Should we do a redirect? * @param module Module prefix, if any */ public ActionForward(String name, String path, boolean redirect, String module) { super(); setName(name); setPath(path); setRedirect(redirect); setModule(module); } /** *

      Construct a new instance based on the values of another ActionForward.

      * * @param copyMe An ActionForward instance to copy * @since Struts 1.2.1 */ public ActionForward(ActionForward copyMe) { this(copyMe.getName(),copyMe.getPath(),copyMe.getRedirect(),copyMe.getModule()); setContextRelative(copyMe.getContextRelative()); } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/action/ActionMapping.java0000644000175000017500000000764010404045210027577 0ustar arnaudarnaud00000000000000/* * $Id: ActionMapping.java 180001 2005-06-04 16:36:19Z hrabago $ * * Copyright 2000-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.action; import java.util.ArrayList; import org.apache.struts.config.ActionConfig; import org.apache.struts.config.ForwardConfig; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** *

      An ActionMapping represents the information that the * controller, RequestProcessor, knows about the mapping * of a particular request to an instance of a particular Action class. * The ActionMapping instance used to select a particular * Action is passed on to that Action, thereby providing * access to any custom configuration information included with the * ActionMapping object.

      * *

      Since Struts 1.1 this class extends ActionConfig. * *

      NOTE - This class would have been deprecated and * replaced by org.apache.struts.config.ActionConfig except * for the fact that it is part of the public API that existing applications * are using.

      * * @version $Rev: 180001 $ $Date: 2005-06-04 17:36:19 +0100 (Sat, 04 Jun 2005) $ */ public class ActionMapping extends ActionConfig { /** *

      Commons Logging instance.

      * * @since Struts 1.2.8 */ private static Log log = LogFactory.getLog(ActionMapping.class); /** *

      Find and return the ForwardConfig instance defining * how forwarding to the specified logical name should be handled. This is * performed by checking local and then global configurations for the * specified forwarding configuration. If no forwarding configuration * can be found, return null.

      * * @param name Logical name of the forwarding instance to be returned */ public ActionForward findForward(String name) { ForwardConfig config = findForwardConfig(name); if (config == null) { config = getModuleConfig().findForwardConfig(name); } if (config == null) { if (log.isWarnEnabled()) { log.warn("Unable to find '" + name + "' forward."); } } return ((ActionForward) config); } /** *

      Return the logical names of all locally defined forwards for this * mapping. If there are no such forwards, a zero-length array * is returned.

      */ public String[] findForwards() { ArrayList results = new ArrayList(); ForwardConfig fcs[] = findForwardConfigs(); for (int i = 0; i < fcs.length; i++) { results.add(fcs[i].getName()); } return ((String[]) results.toArray(new String[results.size()])); } /** *

      Create (if necessary) and return an {@link ActionForward} that * corresponds to the input property of this Action.

      * * @since Struts 1.1 */ public ActionForward getInputForward() { if (getModuleConfig().getControllerConfig().getInputForward()) { return (findForward(getInput())); } else { return (new ActionForward(getInput())); } } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/action/ActionMessage.java0000644000175000017500000001317010404045204027566 0ustar arnaudarnaud00000000000000/* * $Id: ActionMessage.java 164530 2005-04-25 03:11:07Z niallp $ * * Copyright 2001-2005 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.action; import java.io.Serializable; /** *

      An encapsulation of an individual message returned by the * validate method of an ActionForm, consisting * of a message key (to be used to look up message text in an appropriate * message resources database) plus up to four placeholder objects that can * be used for parametric replacement in the message text.

      * * @version $Rev: 164530 $ $Date: 2005-04-25 04:11:07 +0100 (Mon, 25 Apr 2005) $ * @since Struts 1.1 */ public class ActionMessage implements Serializable { // ----------------------------------------------------------- Constructors /** *

      Construct an action message with no replacement values.

      * * @param key Message key for this message */ public ActionMessage(String key) { this(key, null); } /** *

      Construct an action message with the specified replacement values.

      * * @param key Message key for this message * @param value0 First replacement value */ public ActionMessage(String key, Object value0) { this(key, new Object[] { value0 }); } /** *

      Construct an action message with the specified replacement values.

      * * @param key Message key for this message * @param value0 First replacement value * @param value1 Second replacement value */ public ActionMessage(String key, Object value0, Object value1) { this(key, new Object[] { value0, value1 }); } /** *

      Construct an action message with the specified replacement values.

      * * @param key Message key for this message * @param value0 First replacement value * @param value1 Second replacement value * @param value2 Third replacement value */ public ActionMessage(String key, Object value0, Object value1, Object value2) { this(key, new Object[] { value0, value1, value2 }); } /** *

      Construct an action message with the specified replacement values.

      * * @param key Message key for this message * @param value0 First replacement value * @param value1 Second replacement value * @param value2 Third replacement value * @param value3 Fourth replacement value */ public ActionMessage(String key, Object value0, Object value1, Object value2, Object value3) { this(key, new Object[] { value0, value1, value2, value3 }); } /** *

      Construct an action message with the specified replacement values.

      * * @param key Message key for this message * @param values Array of replacement values */ public ActionMessage(String key, Object[] values) { this.key = key; this.values = values; this.resource = true; } /** *

      Construct an action message with the specified replacement values.

      * * @param key Message key for this message * @param resource Indicates whether the key is a bundle key or literal value */ public ActionMessage(String key, boolean resource) { this.key = key; this.resource = resource; } // ----------------------------------------------------- Instance Variables /** *

      The message key for this message.

      */ protected String key = null; /** *

      The replacement values for this mesasge.

      */ protected Object values[] = null; /** *

      Indicates whether the key is taken to be as a bundle key [true] or literal value [false].

      */ protected boolean resource = true; // --------------------------------------------------------- Public Methods /** *

      Get the message key for this message.

      */ public String getKey() { return (this.key); } /** *

      Get the replacement values for this message.

      */ public Object[] getValues() { return (this.values); } /** *

      Indicate whether the key is taken to be as a bundle key [true] or literal value [false].

      */ public boolean isResource() { return (this.resource); } /** *

      Returns a String in the format: key[value1, value2, etc].

      * * @see java.lang.Object#toString() */ public String toString() { StringBuffer buff = new StringBuffer(); buff.append(this.key); buff.append("["); if (this.values != null) { for (int i = 0; i < this.values.length; i++) { buff.append(this.values[i]); // don't append comma to last entry if (i < this.values.length - 1) { buff.append(", "); } } } buff.append("]"); return buff.toString(); } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/action/ActionMessages.java0000644000175000017500000002774310404045236027771 0ustar arnaudarnaud00000000000000/* * $Id: ActionMessages.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 2001-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.action; import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.HashMap; import java.util.List; /** *

      A class that encapsulates messages. Messages can be either global * or they are specific to a particular bean property.

      * *

      Each individual message is described by an ActionMessage * object, which contains a message key (to be looked up in an appropriate * message resources database), and up to four placeholder arguments used for * parametric substitution in the resulting message.

      * *

      IMPLEMENTATION NOTE - It is assumed that these objects * are created and manipulated only within the context of a single thread. * Therefore, no synchronization is required for access to internal * collections.

      * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ * @since Struts 1.1 */ public class ActionMessages implements Serializable { /** *

      Compares ActionMessageItem objects.

      */ private static final Comparator actionItemComparator = new Comparator() { public int compare(Object o1, Object o2) { return ((ActionMessageItem) o1).getOrder() - ((ActionMessageItem) o2).getOrder(); } }; // ----------------------------------------------------- Manifest Constants /** *

      The "property name" marker to use for global messages, as opposed to * those related to a specific property.

      */ public static final String GLOBAL_MESSAGE = "org.apache.struts.action.GLOBAL_MESSAGE"; // ----------------------------------------------------- Instance Variables /** *

      Have the messages been retrieved from this object?

      * *

      The controller uses this property to determine if session-scoped * messages can be removed.

      * * @since Struts 1.2 */ protected boolean accessed = false; /** *

      The accumulated set of ActionMessage objects (represented * as an ArrayList) for each property, keyed by property name.

      */ protected HashMap messages = new HashMap(); /** *

      The current number of the property/key being added. This is used * to maintain the order messages are added.

      */ protected int iCount = 0; // --------------------------------------------------------- Public Methods /** *

      Create an empty ActionMessages object.

      */ public ActionMessages() { super(); } /** *

      Create an ActionMessages object initialized with the given * messages.

      * * @param messages The messages to be initially added to this object. * This parameter can be null. * @since Struts 1.1 */ public ActionMessages(ActionMessages messages) { super(); this.add(messages); } /** *

      Add a message to the set of messages for the specified property. An * order of the property/key is maintained based on the initial addition * of the property/key.

      * * @param property Property name (or ActionMessages.GLOBAL_MESSAGE) * @param message The message to be added */ public void add(String property, ActionMessage message) { ActionMessageItem item = (ActionMessageItem) messages.get(property); List list = null; if (item == null) { list = new ArrayList(); item = new ActionMessageItem(list, iCount++, property); messages.put(property, item); } else { list = item.getList(); } list.add(message); } /** *

      Adds the messages from the given ActionMessages object to * this set of messages. The messages are added in the order they are returned from * the properties method. If a message's property is already in the current * ActionMessages object, it is added to the end of the list for that * property. If a message's property is not in the current list it is added to the end * of the properties.

      * * @param messages The ActionMessages object to be added. * This parameter can be null. * @since Struts 1.1 */ public void add(ActionMessages messages) { if (messages == null) { return; } // loop over properties Iterator props = messages.properties(); while (props.hasNext()) { String property = (String) props.next(); // loop over messages for each property Iterator msgs = messages.get(property); while (msgs.hasNext()) { ActionMessage msg = (ActionMessage) msgs.next(); this.add(property, msg); } } } /** *

      Clear all messages recorded by this object.

      */ public void clear() { messages.clear(); } /** *

      Return true if there are no messages recorded * in this collection, or false otherwise.

      * * @since Struts 1.1 */ public boolean isEmpty(){ return (messages.isEmpty()); } /** *

      Return the set of all recorded messages, without distinction * by which property the messages are associated with. If there are * no messages recorded, an empty enumeration is returned.

      */ public Iterator get() { this.accessed = true; if (messages.isEmpty()) { return Collections.EMPTY_LIST.iterator(); } ArrayList results = new ArrayList(); ArrayList actionItems = new ArrayList(); for (Iterator i = messages.values().iterator(); i.hasNext();) { actionItems.add(i.next()); } // Sort ActionMessageItems based on the initial order the // property/key was added to ActionMessages. Collections.sort(actionItems, actionItemComparator); for (Iterator i = actionItems.iterator(); i.hasNext();) { ActionMessageItem ami = (ActionMessageItem) i.next(); for (Iterator messages = ami.getList().iterator(); messages.hasNext();) { results.add(messages.next()); } } return results.iterator(); } /** *

      Return the set of messages related to a specific property. * If there are no such messages, an empty enumeration is returned.

      * * @param property Property name (or ActionMessages.GLOBAL_MESSAGE) */ public Iterator get(String property) { this.accessed = true; ActionMessageItem item = (ActionMessageItem) messages.get(property); if (item == null) { return (Collections.EMPTY_LIST.iterator()); } else { return (item.getList().iterator()); } } /** *

      Returns true if the get() or * get(String) methods are called.

      * * @return true if the messages have been accessed one or more * times. * @since Struts 1.2 */ public boolean isAccessed() { return this.accessed; } /** *

      Return the set of property names for which at least one message has * been recorded. If there are no messages, an empty Iterator is returned. * If you have recorded global messages, the String value of * ActionMessages.GLOBAL_MESSAGE will be one of the returned * property names.

      */ public Iterator properties() { if (messages.isEmpty()) { return Collections.EMPTY_LIST.iterator(); } ArrayList results = new ArrayList(); ArrayList actionItems = new ArrayList(); for (Iterator i = messages.values().iterator(); i.hasNext();) { actionItems.add(i.next()); } // Sort ActionMessageItems based on the initial order the // property/key was added to ActionMessages. Collections.sort(actionItems, actionItemComparator); for (Iterator i = actionItems.iterator(); i.hasNext();) { ActionMessageItem ami = (ActionMessageItem) i.next(); results.add(ami.getProperty()); } return results.iterator(); } /** *

      Return the number of messages recorded for all properties (including * global messages). NOTE - it is more efficient to call * isEmpty if all you care about is whether or not there are * any messages at all.

      */ public int size() { int total = 0; for (Iterator i = messages.values().iterator(); i.hasNext();) { ActionMessageItem ami = (ActionMessageItem) i.next(); total += ami.getList().size(); } return (total); } /** *

      Return the number of messages associated with the specified property.

      * * @param property Property name (or ActionMessages.GLOBAL_MESSAGE) */ public int size(String property) { ActionMessageItem item = (ActionMessageItem) messages.get(property); return (item == null) ? 0 : item.getList().size(); } /** *

      Returns a String representation of this ActionMessages' * property name=message list mapping.

      * @see java.lang.Object#toString() */ public String toString() { return this.messages.toString(); } /** *

      This class is used to store a set of messages associated with a * property/key and the position it was initially added to list.

      */ protected class ActionMessageItem implements Serializable { /** *

      The list of ActionMessages.

      */ protected List list = null; /** *

      The position in the list of messages.

      */ protected int iOrder = 0; /** *

      The property associated with ActionMessage.

      */ protected String property = null; public ActionMessageItem(List list, int iOrder, String property) { this.list = list; this.iOrder = iOrder; this.property = property; } public List getList() { return list; } public void setList(List list) { this.list = list; } public int getOrder() { return iOrder; } public void setOrder(int iOrder) { this.iOrder = iOrder; } public String getProperty() { return property; } public void setProperty(String property) { this.property = property; } public String toString() { return this.list.toString(); } } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/action/ActionRedirect.java0000644000175000017500000002423510404045236027754 0ustar arnaudarnaud00000000000000/* * $Id: ActionRedirect.java 164747 2005-04-26 05:47:48Z hrabago $ * * Copyright 2000-2005 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.action; import org.apache.struts.config.ForwardConfig; import org.apache.struts.util.ResponseUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import java.util.Map; import java.util.HashMap; import java.util.Arrays; import java.util.ArrayList; import java.util.List; import java.util.Iterator; /** * A subclass of {@link ActionForward} which is designed for use * in redirecting requests, with support for adding parameters * at runtime. *
      * An {@link ForwardConfig} (or subclass) can be passed to the constructor * to copy its configuration: *
      * * public ActionForward execute(ActionMapping mapping, * ActionForm form, * HttpServletRequest request, * HttpServletResponse response) * throws Exception { * ActionRedirect redirect = * new ActionRedirect(mapping.findForward("doRedirect")); * redirect.addParameter("param1","value1"); * redirect.addParameter("param2","2"); * redirect.addParameter("param3","3.0"); * return redirect; * } * *

      * * @since Struts 1.2.7 * @version $Rev: 164747 $ $Date: 2005-04-26 06:47:48 +0100 (Tue, 26 Apr 2005) $ */ public class ActionRedirect extends ActionForward { // ----------------------------------------------------- Static variables /** *

      Commons logging instance.

      */ protected static final Log log = LogFactory.getLog(ActionRedirect.class); // ----------------------------------------------------- Instance variables /** *

      Holds the redirect parameters. * Each entry is either a String or a String[] depending on whether * it has one or more entries.

      */ protected Map parameterValues = null; // ----------------------------------------------------- Constructors /** *

      Construct a new instance with redirect set to true * and initialize parameter lists.

      */ public ActionRedirect() { setRedirect(true); initializeParameters(); } /** *

      Construct a new instance with the specified path * and initialize parameter lists.

      * * @param path Path for this instance */ public ActionRedirect(String path) { super(path); setRedirect(true); initializeParameters(); } /** *

      Construct a new instance with the specified values * and initialize parameter lists.

      * * @param name Name of this instance * @param path Path for this instance * @param module Module prefix, if any */ public ActionRedirect(String name, String path, String module) { super(name, path, true); setModule(module); initializeParameters(); } /** *

      Construct a new instance with a {@link ForwardConfig} object * to copy name, path, and contextRelative values from.

      * * @param baseConfig the {@link ForwardConfig} * to copy configuration values from */ public ActionRedirect(ForwardConfig baseConfig) { setName(baseConfig.getName()); setPath(baseConfig.getPath()); setContextRelative(baseConfig.getContextRelative()); setModule(baseConfig.getModule()); setRedirect(true); initializeParameters(); } // ----------------------------------------------------- Private methods /** *

      Initializes the internal objects * used to hold parameter values.

      */ private void initializeParameters() { parameterValues = new HashMap(); } // ----------------------------------------------------- Public methods /** *

      Adds the object's toString() to the list of parameters if it's * not null, or an empty string with the given fieldName if it is.

      * * @param fieldName the name to use for the parameter * @param valueObj the value for this parameter */ public void addParameter(String fieldName, Object valueObj) { String value = (valueObj != null) ? valueObj.toString() : ""; if (parameterValues == null) { initializeParameters(); } //try { value = ResponseUtils.encodeURL(value); //} catch (UnsupportedEncodingException uce) { // this shouldn't happen since UTF-8 is the W3C Recommendation // String errorMsg = "UTF-8 Character Encoding not supported"; // log.error(errorMsg, uce); // throw new RuntimeException(errorMsg, uce); // } Object currentValue = parameterValues.get(fieldName); if (currentValue == null) { // there's no value for this param yet; add it to the map parameterValues.put(fieldName, value); } else if (currentValue instanceof String) { // there's already a value; let's use an array for these parameters String[] newValue = new String[2]; newValue[0] = (String) currentValue; newValue[1] = value; parameterValues.put(fieldName, newValue); } else if (currentValue instanceof String[]) { // add the value to the list of existing values List newValues = new ArrayList(Arrays.asList((Object[]) currentValue)); newValues.add(value); parameterValues.put(fieldName, (String[]) newValues.toArray(new String[newValues.size()])); } } /** *

      Get the original path without the parameters added at runtime.

      * * @return the original path as configured. */ public String getOriginalPath() { return super.getPath(); } /** *

      Get the path for this object, including any parameters * that may have been added at runtime.

      */ public String getPath() { // get the original path and the parameter string that was formed String originalPath = getOriginalPath(); String parameterString = getParameterString(); StringBuffer result = new StringBuffer(originalPath); if ((parameterString != null) && (parameterString.length() > 0)) { // the parameter separator we're going to use String paramSeparator = "?"; // true if we need to use a parameter separator after originalPath boolean needsParamSeparator = true; // does the original path already have a "?"? int paramStartIndex = originalPath.indexOf("?"); if (paramStartIndex > 0) { // did the path end with "?"? needsParamSeparator = (paramStartIndex != originalPath.length() - 1); if (needsParamSeparator) { paramSeparator = "&"; } } if (needsParamSeparator) { result.append(paramSeparator); } result.append(parameterString); } return result.toString(); } /** *

      Forms the string containing the parameters * passed onto this object thru calls to addParameter().

      * * @return a string which can be appended to the URLs. The * return string does not include a leading question * mark (?). */ public String getParameterString() { StringBuffer strParam = new StringBuffer(256); // loop through all parameters Iterator iterator = parameterValues.keySet().iterator(); while (iterator.hasNext()) { // get the parameter name String name = (String) iterator.next(); // get the value for this parameter Object value = parameterValues.get(name); if (value instanceof String) { // just one value for this param strParam.append(name) .append("=") .append(value); } else if (value instanceof String[]) { // loop through all values for this param String[] values = (String[]) value; for (int i = 0; i < values.length; i++) { strParam.append(name) .append("=") .append(values[i]); if (i < values.length - 1) strParam.append("&"); } } if (iterator.hasNext()) { strParam.append("&"); } } return strParam.toString(); } // ----------------------------------------------------- toString() /** *

      Return a string description of this object.

      * * @return a string containing the original path for this object * and the parameters it currently holds */ public String toString() { StringBuffer result = new StringBuffer(256); result.append("ActionRedirect ["); result.append("originalPath=").append(getOriginalPath()).append(";"); result.append("parameterString=") .append(getParameterString()).append("]"); return result.toString(); } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/action/ActionResources.properties0000644000175000017500000000440610404045204031431 0ustar arnaudarnaud00000000000000actionCreate=No action instance for path {0} could be created applicationLoading=Loading application resources from resource {0} applicationResources=Cannot load application resources bundle {0} configCompleted=Verification of ModuleConfig has been completed configFatal=Fatal module configuration error, see previous messages configInit=Initializing configuration from resource path {0} configIO=Input/output error reading configuration from resource path {0} configMapping=Configuring mapping for path {0} configMissing=Missing configuration resource for path {0} configParse=Parsing error processing resource path {0} configVerifying=Verifying ModuleConfig for this module configWebXml=The /WEB-INF/web.xml was not found. dataSource.destroy=Finalizing application data source {0} dataSource.init=Initializing application data source {0} destroyDataSource=Exception destroying application data source {0} finalizing=Finalizing this controller servlet formBean=Error creating form bean of class {0} initDataSource=Exception initializing application data source {0} initProcessor=Exception initializing RequestProcessor mappingType=Must specify one of "forward", "include" or "type" for path {0} notAuthorized=User is not authorized to access action {0} noInput=No input attribute for mapping path {0} processInvalid=Invalid path was requested processPath=No process path found in request URI reloading=Reloading from configuration files requestDispatcher=Cannot get request dispatcher for path {0} sessionCreate=No user session could be created unhandledException=Unhandled Exception thrown: {0} verifyActionMappingClass.invalid=Invalid ActionMapping class {0} specified verifyActionMappingClass.missing=No ActionMapping implementation class specified verifyForwardConfig.invalid=Invalid path {0} for ForwardConfig {1} verifyForwardConfig.missing=Missing path for ForwardConfig {0} verifyMessageResourcesConfigs.invalid=Invalid factory class {0} for MessageResourcesConfig verifyMessageResourcesConfigs.key=No key attribute for MessageResourcesConfig verifyMessageResourcesConfigs.missing=No factory attribute for MessageResourcesConfig verifyPlugInConfigs.invalid=Invalid className {0} for PlugInConfig verifyPlugInConfigs.missing=No className attribute for PlugInConfig libstruts1.2-java-1.2.9/src/share/org/apache/struts/action/ActionResources_ja.properties0000644000175000017500000001107310404045216032104 0ustar arnaudarnaud00000000000000actionCreate=\u30D1\u30B9 {0} \u306B\u5BFE\u3059\u308B\u30A2\u30AF\u30B7\u30E7\u30F3\u306E\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\u304C\u3042\u308A\u307E\u305B\u3093 applicationLoading={0} \u304b\u3089\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30ea\u30bd\u30fc\u30b9\u3092\u30ed\u30fc\u30c9\u3057\u307e\u3059 applicationResources=\u30ea\u30bd\u30fc\u30b9\u30d0\u30f3\u30c9\u30eb {0} \u3092\u30ed\u30fc\u30c9\u3067\u304d\u307e\u305b\u3093 configCompleted=ModuleConfig\u306E\u691C\u8A3C\u304C\u5B8C\u4E86\u3057\u307E\u3057\u305F configFatal=ModuleConfig\u304C\u9593\u9055\u3063\u3066\u3044\u307E\u3059\u3001\u4E0A\u8A18\u306E\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044 configInit={0} \u3092\u4f7f\u3063\u3066\u8a2d\u5b9a\u306e\u521d\u671f\u5316\u3092\u884c\u3044\u307e\u3059 configIO=\u8a2d\u5b9a\u60c5\u5831 {0} \u306e\u5165\u51fa\u529b\u30a8\u30e9\u30fc\u3067\u3059 configMapping=\u30d1\u30b9 {0} \u306b\u5bfe\u3059\u308b\u30de\u30c3\u30d4\u30f3\u30b0\u306e\u8a2d\u5b9a configMissing=\u30d1\u30b9 {0} \u306b\u5bfe\u3059\u308b\u30de\u30c3\u30d4\u30f3\u30b0\u8a2d\u5b9a\u304c\u3042\u308a\u307e\u305b\u3093 configParse=\u30d1\u30b9 {0} \u306b\u5bfe\u3059\u308b\u30ea\u30bd\u30fc\u30b9\u8aad\u307f\u8fbc\u307f\u30a8\u30e9\u30fc configVerifying=\u3053\u306E\u30E2\u30B8\u30E5\u30FC\u30EB\u306B\u5BFE\u3059\u308BModuleConfig\u306E\u691C\u8A3C dataSource.destroy=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9 {0} \u306e\u7d42\u4e86\u51e6\u7406 dataSource.init=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9 {0} \u306e\u521d\u671f\u5316 destroyDataSource=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9 {0} \u7834\u68c4\u306e\u4f8b\u5916 finalizing=\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30b5\u30fc\u30d6\u30ec\u30c3\u30c8\u306e\u7d42\u4e86\u51e6\u7406 formBean=\u30d5\u30a9\u30fc\u30e0Bean {0} \u306e\u751f\u6210\u30a8\u30e9\u30fc initDataSource=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9 {0} \u306e\u521d\u671f\u5316\u4f8b\u5916 initProcessor=RequestProcessor\u521D\u671F\u5316\u4F8B\u5916 mappingType=\u30d1\u30b9 {0} \u306e\u5c5e\u6027\u306b "forward", "include","type" \u306e\u3046\u3061\u306e\u4e00\u3064\u3092\u6307\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 notAuthorized=\u3053\u306e\u30e6\u30fc\u30b6\u306f\u30a2\u30af\u30b7\u30e7\u30f3 {0} \u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306e\u8a8d\u8a3c\u304c\u884c\u308f\u308c\u3066\u3044\u307e\u305b\u3093 noInput=\u30DE\u30C3\u30D4\u30F3\u30B0 {0} \u306B\u5BFE\u3059\u308Binput\u5C5E\u6027\u304C\u6307\u5B9A\u3055\u308C\u3066\u307E\u305B\u3093 processInvalid=\u30d1\u30b9 {0} \u306b\u5bfe\u3059\u308b\u30ea\u30af\u30a8\u30b9\u30c8\u306f\u7121\u52b9\u3067\u3059 processPath=\u30ea\u30af\u30a8\u30b9\u30c8\u3055\u308c\u305fURI {0} \u306b\u306f\u51e6\u7406\u306e\u305f\u3081\u306e\u30d1\u30b9\u304c\u542b\u307e\u308c\u3066\u5c45\u307e\u305b\u3093 reloading=\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u518d\u8aad\u307f\u8fbc\u307f requestDispatcher=\u30D1\u30B9 {0} \u306B\u5BFE\u3059\u308B\u30EA\u30AF\u30A8\u30B9\u30C8\u30C7\u30A3\u30B9\u30D1\u30C3\u30C1\u30E3\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093 sessionCreate=\u30e6\u30fc\u30b6\u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u751f\u6210\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093 unhandledException=\u51e6\u7406\u3067\u304d\u306a\u3044\u4f8b\u5916\u304c\u30b9\u30ed\u30fc\u3055\u308c\u307e\u3057\u305f: {0} verifyActionMappingClass.invalid=\u7121\u52B9\u306AActionMapping {0} \u304C\u6307\u5B9A\u3055\u308C\u307E\u3057\u305F verifyActionMappingClass.missing=ActionMapping\u306E\u5B9F\u88C5\u30AF\u30E9\u30B9\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093 verifyForwardConfig.invalid=ForwardConfig {1} \u306B\u5BFE\u3059\u308B\u30D1\u30B9 {0} \u306F\u7121\u52B9\u3067\u3059 verifyForwardConfig.missing=ForwardConfig {0} \u306B\u5BFE\u3059\u308B\u30D1\u30B9\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093 verifyMessageResourcesConfigs.invalid=MessageResourcesConfig\u306E\u30D5\u30A1\u30AF\u30C8\u30EA\u30AF\u30E9\u30B9 {0} \u306F\u7121\u52B9\u3067\u3059 verifyMessageResourcesConfigs.key=MessageResourcesConfig\u306B\u5BFE\u3059\u308Bkey\u5C5E\u6027\u304C\u3042\u308A\u307E\u305B\u3093 verifyMessageResourcesConfigs.missing=MessageResourcesConfig\u306B\u5BFE\u3059\u308Bfactory\u5C5E\u6027\u304C\u3042\u308A\u307E\u305B\u3093 verifyPlugInConfigs.invalid=PlugInConfig\u306B\u5BFE\u3059\u308B\u30AF\u30E9\u30B9\u540D {0} \u306F\u7121\u52B9\u3067\u3059 verifyPlugInConfigs.missing=PlugInConfig\u306B\u5BFE\u3059\u308BclassName\u5C5E\u6027\u304C\u3042\u308A\u307E\u305B\u3093 configWebXml=/WEB-INF/web.xml\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093 libstruts1.2-java-1.2.9/src/share/org/apache/struts/action/ActionServlet.java0000644000175000017500000012644510404045246027646 0ustar arnaudarnaud00000000000000/* * $Id: ActionServlet.java 264684 2005-08-30 03:08:01Z niallp $ * * Copyright 2000-2005 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.action; import java.io.IOException; import java.io.InputStream; import java.math.BigDecimal; import java.math.BigInteger; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.Enumeration; import java.util.Iterator; import java.util.MissingResourceException; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.UnavailableException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.sql.DataSource; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.ConvertUtils; import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.beanutils.converters.BigDecimalConverter; import org.apache.commons.beanutils.converters.BigIntegerConverter; import org.apache.commons.beanutils.converters.BooleanConverter; import org.apache.commons.beanutils.converters.ByteConverter; import org.apache.commons.beanutils.converters.CharacterConverter; import org.apache.commons.beanutils.converters.DoubleConverter; import org.apache.commons.beanutils.converters.FloatConverter; import org.apache.commons.beanutils.converters.IntegerConverter; import org.apache.commons.beanutils.converters.LongConverter; import org.apache.commons.beanutils.converters.ShortConverter; import org.apache.commons.collections.FastHashMap; import org.apache.commons.digester.Digester; import org.apache.commons.digester.RuleSet; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.Globals; import org.apache.struts.config.ConfigRuleSet; import org.apache.struts.config.DataSourceConfig; import org.apache.struts.config.FormBeanConfig; import org.apache.struts.config.MessageResourcesConfig; import org.apache.struts.config.ModuleConfig; import org.apache.struts.config.ModuleConfigFactory; import org.apache.struts.config.PlugInConfig; import org.apache.struts.util.MessageResources; import org.apache.struts.util.MessageResourcesFactory; import org.apache.struts.util.ModuleUtils; import org.apache.struts.util.RequestUtils; import org.apache.struts.util.ServletContextWriter; import org.xml.sax.InputSource; import org.xml.sax.SAXException; /** *

      ActionServlet provides the "controller" in the * Model-View-Controller (MVC) design pattern for web applications that is * commonly known as "Model 2". This nomenclature originated with a * description in the JavaServerPages Specification, version 0.92, and has * persisted ever since (in the absence of a better name).

      * *

      Generally, a "Model 2" application is architected as follows:

      *
        *
      • The user interface will generally be created with server pages, which * will not themselves contain any business logic. These pages represent * the "view" component of an MVC architecture.
      • *
      • Forms and hyperlinks in the user interface that require business logic * to be executed will be submitted to a request URI that is mapped to this * servlet.
      • *
      • There can be one instance of this servlet class, * which receives and processes all requests that change the state of * a user's interaction with the application. The servlet delegates the * handling of a request to a {@link RequestProcessor} object. This component * represents the "controller" component of an MVC architecture.
      • *
      • The RequestProcessor selects and invokes an {@link Action} class to perform * the requested business logic, or delegates the response to another resource.
      • *
      • The Action classes can manipulate the state of the application's * interaction with the user, typically by creating or modifying JavaBeans * that are stored as request or session attributes (depending on how long * they need to be available). Such JavaBeans represent the "model" * component of an MVC architecture.
      • *
      • Instead of producing the next page of the user interface directly, * Action classes generally return an {@link ActionForward} to indicate * which resource should handle the response. If the Action * does not return null, the RequestProcessor forwards or * redirects to the specified resource (by utilizing * RequestDispatcher.forward or Response.sendRedirect) * so as to produce the next page of the user interface.
      • *
      * *

      The standard version of RequestsProcessor implements the * following logic for each incoming HTTP request. You can override * some or all of this functionality by subclassing this object and * implementing your own version of the processing.

      *
        *
      • Identify, from the incoming request URI, the substring that will be * used to select an action procedure.
      • *
      • Use this substring to map to the Java class name of the corresponding * action class (an implementation of the Action interface). *
      • *
      • If this is the first request for a particular Action class, * instantiate an instance of that class and cache it for future use.
      • *
      • Optionally populate the properties of an ActionForm bean * associated with this mapping.
      • *
      • Call the execute method of this Action class, passing * on a reference to the mapping that was used, the relevant form-bean * (if any), and the request and the response that were passed to the * controller by the servlet container (thereby providing access to any * specialized properties of the mapping itself as well as to the * ServletContext). *
      • *
      * *

      The standard version of ActionServlet is configured based * on the following servlet initialization parameters, which you will specify * in the web application deployment descriptor (/WEB-INF/web.xml) * for your application. Subclasses that specialize this servlet are free to * define additional initialization parameters.

      *
        *
      • config - Comma-separated list of context-relative * path(s) to the XML resource(s) containing the configuration information * for the default module. (Multiple files support since Struts 1.1) * [/WEB-INF/struts-config.xml].
      • *
      • config/${module} - Comma-separated list of * Context-relative path(s) to the XML resource(s) * containing the configuration information for the module that * will use the specified prefix (/${module}). This can be repeated as many * times as required for multiple modules. (Since Struts 1.1)
      • *
      • configFactory - The Java class name of the * ModuleConfigFactory used to create the implementation of the * ModuleConfig interface. * [org.apache.struts.config.impl.DefaultModuleConfigFactory] *
      • *
      • convertNull - Force simulation of the Struts 1.0 behavior * when populating forms. If set to true, the numeric Java wrapper class types * (like java.lang.Integer) will default to null (rather than 0). * (Since Struts 1.1) [false]
      • *
      • rulesets - Comma-delimited list of fully qualified * classnames of additional org.apache.commons.digester.RuleSet * instances that should be added to the Digester that will * be processing struts-config.xml files. By default, only * the RuleSet for the standard configuration elements is * loaded. (Since Struts 1.1)
      • *
      • validating - Should we use a validating XML parser to * process the configuration file (strongly recommended)? [true]
      • *
      * * @version $Rev: 264684 $ $Date: 2005-08-30 04:08:01 +0100 (Tue, 30 Aug 2005) $ */ public class ActionServlet extends HttpServlet { // ----------------------------------------------------- Instance Variables /** *

      Comma-separated list of context-relative path(s) to our configuration * resource(s) for the default module.

      */ protected String config = "/WEB-INF/struts-config.xml"; /** *

      The Digester used to produce ModuleConfig objects from a * Struts configuration file.

      * * @since Struts 1.1 */ protected Digester configDigester = null; /** *

      The flag to request backwards-compatible conversions for form bean * properties of the Java wrapper class types.

      * * @since Struts 1.1 */ protected boolean convertNull = false; /** *

      The JDBC data sources that has been configured for this module, * if any, keyed by the servlet context attribute under which they are * stored.

      */ protected FastHashMap dataSources = new FastHashMap(); /** *

      The resources object for our internal resources.

      */ protected MessageResources internal = null; /** *

      The Java base name of our internal resources.

      * @since Struts 1.1 */ protected String internalName = "org.apache.struts.action.ActionResources"; /** *

      Commons Logging instance.

      * * @since Struts 1.1 */ protected static Log log = LogFactory.getLog(ActionServlet.class); /** *

      The RequestProcessor instance we will use to process * all incoming requests.

      * * @since Struts 1.1 */ protected RequestProcessor processor = null; /** *

      The set of public identifiers, and corresponding resource names, for * the versions of the configuration file DTDs that we know about. There * MUST be an even number of Strings in this list!

      */ protected String registrations[] = { "-//Apache Software Foundation//DTD Struts Configuration 1.0//EN", "/org/apache/struts/resources/struts-config_1_0.dtd", "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN", "/org/apache/struts/resources/struts-config_1_1.dtd", "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN", "/org/apache/struts/resources/struts-config_1_2.dtd", "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN", "/org/apache/struts/resources/web-app_2_2.dtd", "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN", "/org/apache/struts/resources/web-app_2_3.dtd" }; /** *

      The URL pattern to which we are mapped in our web application * deployment descriptor.

      */ protected String servletMapping = null; // :FIXME: - multiples? /** *

      The servlet name under which we are registered in our web application * deployment descriptor.

      */ protected String servletName = null; // ---------------------------------------------------- HttpServlet Methods /** *

      Gracefully shut down this controller servlet, releasing any resources * that were allocated at initialization.

      */ public void destroy() { if (log.isDebugEnabled()) { log.debug(internal.getMessage("finalizing")); } destroyModules(); destroyInternal(); getServletContext().removeAttribute(Globals.ACTION_SERVLET_KEY); // Release our LogFactory and Log instances (if any) ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); if (classLoader == null) { classLoader = ActionServlet.class.getClassLoader(); } try { LogFactory.release(classLoader); } catch (Throwable t) { ; // Servlet container doesn't have the latest version ; // of commons-logging-api.jar installed // :FIXME: Why is this dependent on the container's version of commons-logging? // Shouldn't this depend on the version packaged with Struts? /* Reason: LogFactory.release(classLoader); was added as an attempt to investigate the OutOfMemory error reported on Bugzilla #14042. It was committed for version 1.136 by craigmcc */ } PropertyUtils.clearDescriptors(); } /** *

      Initialize this servlet. Most of the processing has been factored into * support methods so that you can override particular functionality at a * fairly granular level.

      * * @exception ServletException if we cannot configure ourselves correctly */ public void init() throws ServletException { // Wraps the entire initialization in a try/catch to better handle // unexpected exceptions and errors to provide better feedback // to the developer try { initInternal(); initOther(); initServlet(); getServletContext().setAttribute(Globals.ACTION_SERVLET_KEY, this); initModuleConfigFactory(); // Initialize modules as needed ModuleConfig moduleConfig = initModuleConfig("", config); initModuleMessageResources(moduleConfig); initModuleDataSources(moduleConfig); initModulePlugIns(moduleConfig); moduleConfig.freeze(); Enumeration names = getServletConfig().getInitParameterNames(); while (names.hasMoreElements()) { String name = (String) names.nextElement(); if (!name.startsWith("config/")) { continue; } String prefix = name.substring(6); moduleConfig = initModuleConfig (prefix, getServletConfig().getInitParameter(name)); initModuleMessageResources(moduleConfig); initModuleDataSources(moduleConfig); initModulePlugIns(moduleConfig); moduleConfig.freeze(); } this.initModulePrefixes(this.getServletContext()); this.destroyConfigDigester(); } catch (UnavailableException ex) { throw ex; } catch (Throwable t) { // The follow error message is not retrieved from internal message // resources as they may not have been able to have been // initialized log.error("Unable to initialize Struts ActionServlet due to an " + "unexpected exception or error thrown, so marking the " + "servlet as unavailable. Most likely, this is due to an " + "incorrect or missing library dependency.", t); throw new UnavailableException(t.getMessage()); } } /** *

      Saves a String[] of module prefixes in the ServletContext under * Globals.MODULE_PREFIXES_KEY. NOTE - * the "" prefix for the default module is not included in this list.

      * * @param context The servlet context. * @since Struts 1.2 */ protected void initModulePrefixes(ServletContext context) { ArrayList prefixList = new ArrayList(); Enumeration names = context.getAttributeNames(); while (names.hasMoreElements()) { String name = (String) names.nextElement(); if (!name.startsWith(Globals.MODULE_KEY)) { continue; } String prefix = name.substring(Globals.MODULE_KEY.length()); if (prefix.length() > 0) { prefixList.add(prefix); } } String[] prefixes = (String[]) prefixList.toArray(new String[prefixList.size()]); context.setAttribute(Globals.MODULE_PREFIXES_KEY, prefixes); } /** *

      Process an HTTP "GET" request.

      * * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { process(request, response); } /** *

      Process an HTTP "POST" request.

      * * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { process(request, response); } // --------------------------------------------------------- Public Methods /** *

      Remember a servlet mapping from our web application deployment * descriptor, if it is for this servlet.

      * * @param servletName The name of the servlet being mapped * @param urlPattern The URL pattern to which this servlet is mapped */ public void addServletMapping(String servletName, String urlPattern) { if (log.isDebugEnabled()) { log.debug("Process servletName=" + servletName + ", urlPattern=" + urlPattern); } if (servletName == null) { return; } if (servletName.equals(this.servletName)) { this.servletMapping = urlPattern; } } /** *

      Return the MessageResources instance containing our * internal message strings.

      * * @since Struts 1.1 */ public MessageResources getInternal() { return (this.internal); } // ------------------------------------------------------ Protected Methods /** *

      Gracefully terminate use of any modules associated with this * application (if any).

      * * @since Struts 1.1 */ protected void destroyModules() { ArrayList values = new ArrayList(); Enumeration names = getServletContext().getAttributeNames(); while (names.hasMoreElements()) { values.add(names.nextElement()); } Iterator keys = values.iterator(); while (keys.hasNext()) { String name = (String) keys.next(); Object value = getServletContext().getAttribute(name); if (!(value instanceof ModuleConfig)) { continue; } ModuleConfig config = (ModuleConfig) value; if (this.getProcessorForModule(config) != null) { this.getProcessorForModule(config).destroy(); } getServletContext().removeAttribute(name); PlugIn plugIns[] = (PlugIn[]) getServletContext().getAttribute( Globals.PLUG_INS_KEY + config.getPrefix()); if (plugIns != null) { for (int i = 0; i < plugIns.length; i++) { int j = plugIns.length - (i + 1); plugIns[j].destroy(); } getServletContext().removeAttribute( Globals.PLUG_INS_KEY + config.getPrefix()); } } } /** *

      Gracefully release any configDigester instance that we have created.

      * * @since Struts 1.1 */ protected void destroyConfigDigester() { configDigester = null; } /** *

      Gracefully terminate use of the internal MessageResources.

      */ protected void destroyInternal() { internal = null; } /** *

      Return the module configuration object for the currently selected * module.

      * * @param request The servlet request we are processing * @since Struts 1.1 */ protected ModuleConfig getModuleConfig (HttpServletRequest request) { ModuleConfig config = (ModuleConfig) request.getAttribute(Globals.MODULE_KEY); if (config == null) { config = (ModuleConfig) getServletContext().getAttribute(Globals.MODULE_KEY); } return (config); } /** *

      Look up and return the {@link RequestProcessor} responsible for the * specified module, creating a new one if necessary.

      * * @param config The module configuration for which to * acquire and return a RequestProcessor. * * @exception ServletException if we cannot instantiate a RequestProcessor * instance * @since Struts 1.1 */ protected synchronized RequestProcessor getRequestProcessor(ModuleConfig config) throws ServletException { // :FIXME: Document UnavailableException? RequestProcessor processor = this.getProcessorForModule(config); if (processor == null) { try { processor = (RequestProcessor) RequestUtils.applicationInstance( config.getControllerConfig().getProcessorClass()); } catch (Exception e) { throw new UnavailableException( "Cannot initialize RequestProcessor of class " + config.getControllerConfig().getProcessorClass() + ": " + e); } processor.init(this, config); String key = Globals.REQUEST_PROCESSOR_KEY + config.getPrefix(); getServletContext().setAttribute(key, processor); } return (processor); } /** *

      Returns the RequestProcessor for the given module or null if one does not * exist. This method will not create a RequestProcessor.

      * * @param config The ModuleConfig. */ private RequestProcessor getProcessorForModule(ModuleConfig config) { String key = Globals.REQUEST_PROCESSOR_KEY + config.getPrefix(); return (RequestProcessor) getServletContext().getAttribute(key); } /** *

      Initialize the factory used to create the module configuration.

      * @since Struts 1.2 */ protected void initModuleConfigFactory(){ String configFactory = getServletConfig().getInitParameter("configFactory"); if (configFactory != null) { ModuleConfigFactory.setFactoryClass(configFactory); } } /** *

      Initialize the module configuration information for the * specified module.

      * * @param prefix Module prefix for this module * @param paths Comma-separated list of context-relative resource path(s) * for this modules's configuration resource(s) * * @exception ServletException if initialization cannot be performed * @since Struts 1.1 */ protected ModuleConfig initModuleConfig(String prefix, String paths) throws ServletException { // :FIXME: Document UnavailableException? (Doesn't actually throw anything) if (log.isDebugEnabled()) { log.debug( "Initializing module path '" + prefix + "' configuration from '" + paths + "'"); } // Parse the configuration for this module ModuleConfigFactory factoryObject = ModuleConfigFactory.createFactory(); ModuleConfig config = factoryObject.createModuleConfig(prefix); // Configure the Digester instance we will use Digester digester = initConfigDigester(); // Process each specified resource path while (paths.length() > 0) { digester.push(config); String path = null; int comma = paths.indexOf(','); if (comma >= 0) { path = paths.substring(0, comma).trim(); paths = paths.substring(comma + 1); } else { path = paths.trim(); paths = ""; } if (path.length() < 1) { break; } this.parseModuleConfigFile(digester, path); } getServletContext().setAttribute( Globals.MODULE_KEY + config.getPrefix(), config); // Force creation and registration of DynaActionFormClass instances // for all dynamic form beans we wil be using FormBeanConfig fbs[] = config.findFormBeanConfigs(); for (int i = 0; i < fbs.length; i++) { if (fbs[i].getDynamic()) { fbs[i].getDynaActionFormClass(); } } return config; } /** *

      Parses one module config file.

      * * @param digester Digester instance that does the parsing * @param path The path to the config file to parse. * * @throws UnavailableException if file cannot be read or parsed * @since Struts 1.2 */ protected void parseModuleConfigFile(Digester digester, String path) throws UnavailableException { InputStream input = null; try { URL url = getServletContext().getResource(path); // If the config isn't in the servlet context, try the class loader // which allows the config files to be stored in a jar if (url == null) { url = getClass().getResource(path); } if (url == null) { String msg = internal.getMessage("configMissing", path); log.error(msg); throw new UnavailableException(msg); } InputSource is = new InputSource(url.toExternalForm()); input = url.openStream(); is.setByteStream(input); digester.parse(is); } catch (MalformedURLException e) { handleConfigException(path, e); } catch (IOException e) { handleConfigException(path, e); } catch (SAXException e) { handleConfigException(path, e); } finally { if (input != null) { try { input.close(); } catch (IOException e) { throw new UnavailableException(e.getMessage()); } } } } /** *

      Simplifies exception handling in the parseModuleConfigFile method.

      * @param path * @param e * @throws UnavailableException as a wrapper around Exception */ private void handleConfigException(String path, Exception e) throws UnavailableException { String msg = internal.getMessage("configParse", path); log.error(msg, e); throw new UnavailableException(msg); } /** *

      Initialize the data sources for the specified module.

      * * @param config ModuleConfig information for this module * * @exception ServletException if initialization cannot be performed * @since Struts 1.1 */ protected void initModuleDataSources(ModuleConfig config) throws ServletException { // :FIXME: Document UnavailableException? if (log.isDebugEnabled()) { log.debug("Initializing module path '" + config.getPrefix() + "' data sources"); } ServletContextWriter scw = new ServletContextWriter(getServletContext()); DataSourceConfig dscs[] = config.findDataSourceConfigs(); if (dscs == null) { dscs = new DataSourceConfig[0]; } dataSources.setFast(false); for (int i = 0; i < dscs.length; i++) { if (log.isDebugEnabled()) { log.debug("Initializing module path '" + config.getPrefix() + "' data source '" + dscs[i].getKey() + "'"); } DataSource ds = null; try { ds = (DataSource) RequestUtils.applicationInstance(dscs[i].getType()); BeanUtils.populate(ds, dscs[i].getProperties()); ds.setLogWriter(scw); } catch (Exception e) { log.error(internal.getMessage("dataSource.init", dscs[i].getKey()), e); throw new UnavailableException (internal.getMessage("dataSource.init", dscs[i].getKey())); } getServletContext().setAttribute (dscs[i].getKey() + config.getPrefix(), ds); dataSources.put(dscs[i].getKey(), ds); } dataSources.setFast(true); } /** *

      Initialize the plug ins for the specified module.

      * * @param config ModuleConfig information for this module * * @exception ServletException if initialization cannot be performed * @since Struts 1.1 */ protected void initModulePlugIns (ModuleConfig config) throws ServletException { if (log.isDebugEnabled()) { log.debug("Initializing module path '" + config.getPrefix() + "' plug ins"); } PlugInConfig plugInConfigs[] = config.findPlugInConfigs(); PlugIn plugIns[] = new PlugIn[plugInConfigs.length]; getServletContext().setAttribute(Globals.PLUG_INS_KEY + config.getPrefix(), plugIns); for (int i = 0; i < plugIns.length; i++) { try { plugIns[i] = (PlugIn)RequestUtils.applicationInstance(plugInConfigs[i].getClassName()); BeanUtils.populate(plugIns[i], plugInConfigs[i].getProperties()); // Pass the current plugIn config object to the PlugIn. // The property is set only if the plugin declares it. // This plugin config object is needed by Tiles try { PropertyUtils.setProperty( plugIns[i], "currentPlugInConfigObject", plugInConfigs[i]); } catch (Exception e) { // FIXME Whenever we fail silently, we must document a valid reason // for doing so. Why should we fail silently if a property can't be set on // the plugin? /** * Between version 1.138-1.140 cedric made these changes. * The exceptions are caught to deal with containers applying strict security. * This was in response to bug #15736 * * Recommend that we make the currentPlugInConfigObject part of the PlugIn Interface if we can, Rob */ } plugIns[i].init(this, config); } catch (ServletException e) { throw e; } catch (Exception e) { String errMsg = internal.getMessage( "plugIn.init", plugInConfigs[i].getClassName()); log(errMsg, e); throw new UnavailableException(errMsg); } } } /** *

      Initialize the application MessageResources for the specified * module.

      * * @param config ModuleConfig information for this module * * @exception ServletException if initialization cannot be performed * @since Struts 1.1 */ protected void initModuleMessageResources(ModuleConfig config) throws ServletException { MessageResourcesConfig mrcs[] = config.findMessageResourcesConfigs(); for (int i = 0; i < mrcs.length; i++) { if ((mrcs[i].getFactory() == null) || (mrcs[i].getParameter() == null)) { continue; } if (log.isDebugEnabled()) { log.debug( "Initializing module path '" + config.getPrefix() + "' message resources from '" + mrcs[i].getParameter() + "'"); } String factory = mrcs[i].getFactory(); MessageResourcesFactory.setFactoryClass(factory); MessageResourcesFactory factoryObject = MessageResourcesFactory.createFactory(); factoryObject.setConfig(mrcs[i]); MessageResources resources = factoryObject.createResources(mrcs[i].getParameter()); resources.setReturnNull(mrcs[i].getNull()); resources.setEscape(mrcs[i].isEscape()); getServletContext().setAttribute( mrcs[i].getKey() + config.getPrefix(), resources); } } /** *

      Create (if needed) and return a new Digester * instance that has been initialized to process Struts module * configuration files and configure a corresponding ModuleConfig * object (which must be pushed on to the evaluation stack before parsing * begins).

      * * @exception ServletException if a Digester cannot be configured * @since Struts 1.1 */ protected Digester initConfigDigester() throws ServletException { // :FIXME: Where can ServletException be thrown? // Do we have an existing instance? if (configDigester != null) { return (configDigester); } // Create a new Digester instance with standard capabilities configDigester = new Digester(); configDigester.setNamespaceAware(true); configDigester.setValidating(this.isValidating()); configDigester.setUseContextClassLoader(true); configDigester.addRuleSet(new ConfigRuleSet()); for (int i = 0; i < registrations.length; i += 2) { URL url = this.getClass().getResource(registrations[i+1]); if (url != null) { configDigester.register(registrations[i], url.toString()); } } this.addRuleSets(); // Return the completely configured Digester instance return (configDigester); } /** *

      Add any custom RuleSet instances to configDigester that have * been specified in the rulesets init parameter.

      * * @throws ServletException */ private void addRuleSets() throws ServletException { String rulesets = getServletConfig().getInitParameter("rulesets"); if (rulesets == null) { rulesets = ""; } rulesets = rulesets.trim(); String ruleset = null; while (rulesets.length() > 0) { int comma = rulesets.indexOf(","); if (comma < 0) { ruleset = rulesets.trim(); rulesets = ""; } else { ruleset = rulesets.substring(0, comma).trim(); rulesets = rulesets.substring(comma + 1).trim(); } if (log.isDebugEnabled()) { log.debug("Configuring custom Digester Ruleset of type " + ruleset); } try { RuleSet instance = (RuleSet) RequestUtils.applicationInstance(ruleset); this.configDigester.addRuleSet(instance); } catch (Exception e) { log.error("Exception configuring custom Digester RuleSet", e); throw new ServletException(e); } } } /** *

      Check the status of the validating initialization parameter.

      * * @return true if the module Digester should validate. */ private boolean isValidating() { boolean validating = true; String value = getServletConfig().getInitParameter("validating"); if ("false".equalsIgnoreCase(value) || "no".equalsIgnoreCase(value) || "n".equalsIgnoreCase(value) || "0".equalsIgnoreCase(value)) { validating = false; } return validating; } /** *

      Initialize our internal MessageResources bundle.

      * * @exception ServletException if we cannot initialize these resources */ protected void initInternal() throws ServletException { // :FIXME: Document UnavailableException try { internal = MessageResources.getMessageResources(internalName); } catch (MissingResourceException e) { log.error("Cannot load internal resources from '" + internalName + "'", e); throw new UnavailableException ("Cannot load internal resources from '" + internalName + "'"); } } /** *

      Initialize other global characteristics of the controller servlet.

      * * @exception ServletException if we cannot initialize these resources */ protected void initOther() throws ServletException { String value = null; value = getServletConfig().getInitParameter("config"); if (value != null) { config = value; } // Backwards compatibility for form beans of Java wrapper classes // Set to true for strict Struts 1.0 compatibility value = getServletConfig().getInitParameter("convertNull"); if ("true".equalsIgnoreCase(value) || "yes".equalsIgnoreCase(value) || "on".equalsIgnoreCase(value) || "y".equalsIgnoreCase(value) || "1".equalsIgnoreCase(value)) { convertNull = true; } if (convertNull) { ConvertUtils.deregister(); ConvertUtils.register(new BigDecimalConverter(null), BigDecimal.class); ConvertUtils.register(new BigIntegerConverter(null), BigInteger.class); ConvertUtils.register(new BooleanConverter(null), Boolean.class); ConvertUtils.register(new ByteConverter(null), Byte.class); ConvertUtils.register(new CharacterConverter(null), Character.class); ConvertUtils.register(new DoubleConverter(null), Double.class); ConvertUtils.register(new FloatConverter(null), Float.class); ConvertUtils.register(new IntegerConverter(null), Integer.class); ConvertUtils.register(new LongConverter(null), Long.class); ConvertUtils.register(new ShortConverter(null), Short.class); } } /** *

      Initialize the servlet mapping under which our controller servlet * is being accessed. This will be used in the &html:form> * tag to generate correct destination URLs for form submissions.

      * * @throws ServletException if error happens while scanning web.xml */ protected void initServlet() throws ServletException { // Remember our servlet name this.servletName = getServletConfig().getServletName(); // Prepare a Digester to scan the web application deployment descriptor Digester digester = new Digester(); digester.push(this); digester.setNamespaceAware(true); digester.setValidating(false); // Register our local copy of the DTDs that we can find for (int i = 0; i < registrations.length; i += 2) { URL url = this.getClass().getResource(registrations[i+1]); if (url != null) { digester.register(registrations[i], url.toString()); } } // Configure the processing rules that we need digester.addCallMethod("web-app/servlet-mapping", "addServletMapping", 2); digester.addCallParam("web-app/servlet-mapping/servlet-name", 0); digester.addCallParam("web-app/servlet-mapping/url-pattern", 1); // Process the web application deployment descriptor if (log.isDebugEnabled()) { log.debug("Scanning web.xml for controller servlet mapping"); } InputStream input = getServletContext().getResourceAsStream("/WEB-INF/web.xml"); if (input == null) { log.error(internal.getMessage("configWebXml")); throw new ServletException(internal.getMessage("configWebXml")); } try { digester.parse(input); } catch (IOException e) { log.error(internal.getMessage("configWebXml"), e); throw new ServletException(e); } catch (SAXException e) { log.error(internal.getMessage("configWebXml"), e); throw new ServletException(e); } finally { try { input.close(); } catch (IOException e) { log.error(internal.getMessage("configWebXml"), e); throw new ServletException(e); } } // Record a servlet context attribute (if appropriate) if (log.isDebugEnabled()) { log.debug("Mapping for servlet '" + servletName + "' = '" + servletMapping + "'"); } if (servletMapping != null) { getServletContext().setAttribute(Globals.SERVLET_KEY, servletMapping); } } /** *

      Perform the standard request processing for this request, and create * the corresponding response.

      * * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception is thrown */ protected void process(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { ModuleUtils.getInstance().selectModule(request, getServletContext()); ModuleConfig config = getModuleConfig(request); RequestProcessor processor = getProcessorForModule(config); if (processor == null) { processor = getRequestProcessor(config); } processor.process(request, response); } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/action/ActionServletWrapper.java0000644000175000017500000000427710404045242031201 0ustar arnaudarnaud00000000000000/* * $Id: ActionServletWrapper.java 55459 2004-10-24 19:23:54Z martinc $ * * Copyright 2000-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.action; import java.io.Serializable; import org.apache.struts.upload.MultipartRequestHandler; /** *

      Provide a wrapper around an {@link ActionServlet} to expose only * those methods needed by other objects. When used with an * {@link ActionForm}, subclasses must be careful that they do * not return an object with public getters and setters that * could be exploited by automatic population of properties.

      * * @version $Rev: 55459 $ $Date: 2004-10-24 20:23:54 +0100 (Sun, 24 Oct 2004) $ * @since Struts 1.0.1 */ public class ActionServletWrapper implements Serializable { /** *

      The servlet instance to which we are attached.

      */ protected transient ActionServlet servlet = null; /** *

      Set servlet to a MultipartRequestHandler.

      * * @param object The MultipartRequestHandler */ public void setServletFor(MultipartRequestHandler object) { object.setServlet(this.servlet); // :FIXME: Should this be based on an "setServlet" // interface or introspection for a setServlet method? // Or, is it safer to just add the types we want as we want them? } /** *

      Create object and set servlet property.

      * * @param servlet ActionServlet to wrap */ public ActionServletWrapper(ActionServlet servlet) { super(); this.servlet = servlet; } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/action/DynaActionForm.java0000644000175000017500000005275610404045250027737 0ustar arnaudarnaud00000000000000/* * $Id: DynaActionForm.java 168012 2005-05-03 22:39:10Z hrabago $ * * Copyright 2000-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.action; import java.lang.reflect.Array; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import javax.servlet.ServletRequest; import javax.servlet.http.HttpServletRequest; import org.apache.commons.beanutils.ConversionException; import org.apache.commons.beanutils.DynaBean; import org.apache.commons.beanutils.DynaClass; import org.apache.commons.beanutils.DynaProperty; import org.apache.struts.config.FormBeanConfig; import org.apache.struts.config.FormPropertyConfig; /** *

      Specialized subclass of ActionForm that allows the creation * of form beans with dynamic sets of properties, without requiring the * developer to create a Java class for each type of form bean.

      * *

      USAGE NOTE - Since Struts 1.1, the * reset method no longer initializes property values to those * specified in <form-property> elements in the Struts * module configuration file. If you wish to utilize that behavior, the * simplest solution is to subclass DynaActionForm and call * the initialize method inside it.

      * * @version $Rev: 168012 $ $Date: 2005-05-03 23:39:10 +0100 (Tue, 03 May 2005) $ * @since Struts 1.1 */ public class DynaActionForm extends ActionForm implements DynaBean { // ----------------------------------------------------- Instance Variables /** *

      The DynaActionFormClass with which we are associated. *

      */ protected DynaActionFormClass dynaClass = null; /** *

      The set of property values for this DynaActionForm, * keyed by property name.

      */ protected HashMap dynaValues = new HashMap(); // ----------------------------------------------------- ActionForm Methods /** *

      Initialize all bean properties to their initial values, as specified * in the {@link FormPropertyConfig} elements associated with the * definition of this DynaActionForm.

      * * @param mapping The mapping used to select this instance */ public void initialize(ActionMapping mapping) { String name = mapping.getName(); if (name == null) { return; } FormBeanConfig config = mapping.getModuleConfig().findFormBeanConfig(name); if (config == null) { return; } initialize(config); } public void initialize(FormBeanConfig config) { FormPropertyConfig props[] = config.findFormPropertyConfigs(); for (int i = 0; i < props.length; i++) { set(props[i].getName(), props[i].initial()); } } // :FIXME: Is there any point in retaining these reset methods // since they now simply replicate the superclass behavior? /** *

      Reset bean properties to their default state, as needed. * This method is called before the properties are repopulated by * the controller.

      * *

      The default implementation attempts to forward to the HTTP * version of this method.

      * * @param mapping The mapping used to select this instance * @param request The servlet request we are processing */ public void reset(ActionMapping mapping, ServletRequest request) { super.reset(mapping,request); } /** *

      Reset bean properties to their default state, as needed. This method is * called before the properties are repopulated by the controller.

      * *

      The default implementation (since Struts 1.1) does nothing. * Subclasses may override this method to reset bean properties to * default values, or the initialize method may be used to * initialize property values to those provided in the form property * configuration information (which was the behavior of * this method in some release candidates).

      * * @param mapping The mapping used to select this instance * @param request The servlet request we are processing */ public void reset(ActionMapping mapping, HttpServletRequest request) { super.reset(mapping,request); } // ------------------------------------------------------- DynaBean Methods /** *

      Indicates if the specified mapped property contain a value for the * specified key value.

      * * @param name Name of the property to check * @param key Name of the key to check * * @exception IllegalArgumentException if there is no property * of the specified name */ public boolean contains(String name, String key) { Object value = dynaValues.get(name); if (value == null) { throw new NullPointerException ("No mapped value for '" + name + "(" + key + ")'"); } else if (value instanceof Map) { return (((Map) value).containsKey(key)); } else { throw new IllegalArgumentException ("Non-mapped property for '" + name + "(" + key + ")'"); } } /** *

      Return the value of a simple property with the specified name.

      * * @param name Name of the property whose value is to be retrieved * * @exception IllegalArgumentException if there is no property * of the specified name * @exception NullPointerException if the type specified for the * property is invalid */ public Object get(String name) { // Return any non-null value for the specified property Object value = dynaValues.get(name); if (value != null) { return (value); } // Return a null value for a non-primitive property Class type = getDynaProperty(name).getType(); if (type == null) { throw new NullPointerException ("The type for property " + name + " is invalid"); } if (!type.isPrimitive()) { return (value); } // Manufacture default values for primitive properties if (type == Boolean.TYPE) { return (Boolean.FALSE); } else if (type == Byte.TYPE) { return (new Byte((byte) 0)); } else if (type == Character.TYPE) { return (new Character((char) 0)); } else if (type == Double.TYPE) { return (new Double(0.0)); } else if (type == Float.TYPE) { return (new Float((float) 0.0)); } else if (type == Integer.TYPE) { return (new Integer(0)); } else if (type == Long.TYPE) { return (new Long(0)); } else if (type == Short.TYPE) { return (new Short((short) 0)); } else { return (null); } } /** *

      Return the value of an indexed property with the specified name. *

      * * @param name Name of the property whose value is to be retrieved * @param index Index of the value to be retrieved * * @exception IllegalArgumentException if there is no property * of the specified name * @exception IllegalArgumentException if the specified property * exists, but is not indexed * @exception IndexOutOfBoundsException if the specified index * is outside the range of the underlying property * @exception NullPointerException if no array or List has been * initialized for this property */ public Object get(String name, int index) { Object value = dynaValues.get(name); if (value == null) { throw new NullPointerException ("No indexed value for '" + name + "[" + index + "]'"); } else if (value.getClass().isArray()) { return (Array.get(value, index)); } else if (value instanceof List) { return ((List) value).get(index); } else { throw new IllegalArgumentException ("Non-indexed property for '" + name + "[" + index + "]'"); } } /** *

      Return the value of a mapped property with the specified name, * or null if there is no value for the specified key. *

      * * @param name Name of the property whose value is to be retrieved * @param key Key of the value to be retrieved * * @exception IllegalArgumentException if there is no property * of the specified name * @exception IllegalArgumentException if the specified property * exists, but is not mapped */ public Object get(String name, String key) { Object value = dynaValues.get(name); if (value == null) { throw new NullPointerException ("No mapped value for '" + name + "(" + key + ")'"); } else if (value instanceof Map) { return (((Map) value).get(key)); } else { throw new IllegalArgumentException ("Non-mapped property for '" + name + "(" + key + ")'"); } } /** *

      Return the value of a String property with the specified * name. This is equivalent to calling * (String) dynaForm.get(name).

      * * @param name Name of the property whose value is to be retrieved * * @throws IllegalArgumentException if there is no property * of the specified name * @throws NullPointerException if the type specified for the * property is invalid * @throws ClassCastException if the property is not a String. * @since Struts 1.2 */ public String getString(String name) { return (String) this.get(name); } /** *

      Return the value of a String[] property with the * specified name. This is equivalent to calling * (String[]) dynaForm.get(name).

      * * @param name Name of the property whose value is to be retrieved * * @throws IllegalArgumentException if there is no property * of the specified name * @throws NullPointerException if the type specified for the * property is invalid * @throws ClassCastException if the property is not a String[]. * @since Struts 1.2 */ public String[] getStrings(String name) { return (String[]) this.get(name); } /** *

      Return the DynaClass instance that describes the set * of properties available for this DynaBean.

      */ public DynaClass getDynaClass() { return (this.dynaClass); } /** *

      Returns the Map containing the property values. This is * done mostly to facilitate accessing the DynaActionForm * through JavaBeans accessors, in order to use the JavaServer Pages * Standard Tag Library (JSTL).

      * *

      For instance, the normal JSTL EL syntax for accessing an * ActionForm would be something like this: *

           *  ${formbean.prop}
      * The JSTL EL syntax for accessing a DynaActionForm looks * something like this (because of the presence of this * getMap() method): *
           *  ${dynabean.map.prop}
      *

      */ public Map getMap() { return (dynaValues); } /** *

      Remove any existing value for the specified key on the * specified mapped property.

      * * @param name Name of the property for which a value is to * be removed * @param key Key of the value to be removed * * @exception IllegalArgumentException if there is no property * of the specified name */ public void remove(String name, String key) { Object value = dynaValues.get(name); if (value == null) { throw new NullPointerException ("No mapped value for '" + name + "(" + key + ")'"); } else if (value instanceof Map) { ((Map) value).remove(key); } else { throw new IllegalArgumentException ("Non-mapped property for '" + name + "(" + key + ")'"); } } /** *

      Set the value of a simple property with the specified name.

      * * @param name Name of the property whose value is to be set * @param value Value to which this property is to be set * * @exception ConversionException if the specified value cannot be * converted to the type required for this property * @exception IllegalArgumentException if there is no property * of the specified name * @exception NullPointerException if the type specified for the * property is invalid * @exception NullPointerException if an attempt is made to set a * primitive property to null */ public void set(String name, Object value) { DynaProperty descriptor = getDynaProperty(name); if (descriptor.getType() == null) { throw new NullPointerException ("The type for property " + name + " is invalid"); } if (value == null) { if (descriptor.getType().isPrimitive()) { throw new NullPointerException ("Primitive value for '" + name + "'"); } } else if (!isDynaAssignable(descriptor.getType(), value.getClass())) { throw new ConversionException ("Cannot assign value of type '" + value.getClass().getName() + "' to property '" + name + "' of type '" + descriptor.getType().getName() + "'"); } dynaValues.put(name, value); } /** *

      Set the value of an indexed property with the specified name.

      * * @param name Name of the property whose value is to be set * @param index Index of the property to be set * @param value Value to which this property is to be set * * @exception ConversionException if the specified value cannot be * converted to the type required for this property * @exception IllegalArgumentException if there is no property * of the specified name * @exception IllegalArgumentException if the specified property * exists, but is not indexed * @exception IndexOutOfBoundsException if the specified index * is outside the range of the underlying property */ public void set(String name, int index, Object value) { Object prop = dynaValues.get(name); if (prop == null) { throw new NullPointerException ("No indexed value for '" + name + "[" + index + "]'"); } else if (prop.getClass().isArray()) { Array.set(prop, index, value); } else if (prop instanceof List) { try { ((List) prop).set(index, value); } catch (ClassCastException e) { throw new ConversionException(e.getMessage()); } } else { throw new IllegalArgumentException ("Non-indexed property for '" + name + "[" + index + "]'"); } } /** *

      Set the value of a mapped property with the specified name.

      * * @param name Name of the property whose value is to be set * @param key Key of the property to be set * @param value Value to which this property is to be set * * @exception ConversionException if the specified value cannot be * converted to the type required for this property * @exception IllegalArgumentException if there is no property * of the specified name * @exception IllegalArgumentException if the specified property * exists, but is not mapped */ public void set(String name, String key, Object value) { Object prop = dynaValues.get(name); if (prop == null) { throw new NullPointerException ("No mapped value for '" + name + "(" + key + ")'"); } else if (prop instanceof Map) { ((Map) prop).put(key, value); } else { throw new IllegalArgumentException ("Non-mapped property for '" + name + "(" + key + ")'"); } } // --------------------------------------------------------- Public Methods /** *

      Render a String representation of this object.

      */ public String toString() { StringBuffer sb = new StringBuffer("DynaActionForm[dynaClass="); DynaClass dynaClass = getDynaClass(); if (dynaClass == null) { return sb.append("null]").toString(); } sb.append(dynaClass.getName()); DynaProperty props[] = dynaClass.getDynaProperties(); if (props == null) { props = new DynaProperty[0]; } for (int i = 0; i < props.length; i++) { sb.append(','); sb.append(props[i].getName()); sb.append('='); Object value = get(props[i].getName()); if (value == null) { sb.append(""); } else if (value.getClass().isArray()) { int n = Array.getLength(value); sb.append("{"); for (int j = 0; j < n; j++) { if (j > 0) { sb.append(','); } sb.append(Array.get(value, j)); } sb.append("}"); } else if (value instanceof List) { int n = ((List) value).size(); sb.append("{"); for (int j = 0; j < n; j++) { if (j > 0) { sb.append(','); } sb.append(((List) value).get(j)); } sb.append("}"); } else if (value instanceof Map) { int n = 0; Iterator keys = ((Map) value).keySet().iterator(); sb.append("{"); while (keys.hasNext()) { if (n > 0) { sb.append(','); } n++; Object key = keys.next(); sb.append(key); sb.append('='); sb.append(((Map) value).get(key)); } sb.append("}"); } else { sb.append(value); } } sb.append("]"); return (sb.toString()); } // -------------------------------------------------------- Package Methods /** *

      Set the DynaActionFormClass instance with which we are * associated.

      * * @param dynaClass The DynaActionFormClass instance for this bean */ void setDynaActionFormClass(DynaActionFormClass dynaClass) { this.dynaClass = dynaClass; } // ------------------------------------------------------ Protected Methods /** *

      Return the property descriptor for the specified property name.

      * * @param name Name of the property for which to retrieve the descriptor * * @exception IllegalArgumentException if this is not a valid property * name for our DynaClass */ protected DynaProperty getDynaProperty(String name) { DynaProperty descriptor = getDynaClass().getDynaProperty(name); if (descriptor == null) { throw new IllegalArgumentException ("Invalid property name '" + name + "'"); } return (descriptor); } /** *

      Indicates if an object of the source class is assignable to the * destination class.

      * * @param dest Destination class * @param source Source class */ protected boolean isDynaAssignable(Class dest, Class source) { if (dest.isAssignableFrom(source) || ((dest == Boolean.TYPE) && (source == Boolean.class)) || ((dest == Byte.TYPE) && (source == Byte.class)) || ((dest == Character.TYPE) && (source == Character.class)) || ((dest == Double.TYPE) && (source == Double.class)) || ((dest == Float.TYPE) && (source == Float.class)) || ((dest == Integer.TYPE) && (source == Integer.class)) || ((dest == Long.TYPE) && (source == Long.class)) || ((dest == Short.TYPE) && (source == Short.class))) { return (true); } else { return (false); } } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/action/DynaActionFormClass.java0000644000175000017500000002351610404045226030720 0ustar arnaudarnaud00000000000000/* * $Id: DynaActionFormClass.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 2000-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.action; import java.io.Serializable; import java.util.HashMap; import org.apache.commons.beanutils.DynaBean; import org.apache.commons.beanutils.DynaClass; import org.apache.commons.beanutils.DynaProperty; import org.apache.struts.config.FormBeanConfig; import org.apache.struts.config.FormPropertyConfig; import org.apache.struts.config.ModuleConfig; import org.apache.struts.util.RequestUtils; /** *

      Implementation of DynaClass for * DynaActionForm classes that allow developers to define * ActionForms without having to individually code all of the classes. * NOTE - This class is only used in the internal * implementation of dynamic action form beans. Application developers * never need to consult this documentation.

      * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ * @since Struts 1.1 */ public class DynaActionFormClass implements DynaClass, Serializable { // ----------------------------------------------------------- Constructors /** *

      Construct a new DynaActionFormClass for the specified * form bean configuration. This constructor is private; * DynaActionFormClass instances will be created as needed via * calls to the static createDynaActionFormClass() method.

      * * @param config The FormBeanConfig instance describing the properties * of the bean to be created * * @exception IllegalArgumentException if the bean implementation class * specified in the configuration is not DynaActionForm (or a subclass * of DynaActionForm) */ public DynaActionFormClass(FormBeanConfig config) { introspect(config); } // ----------------------------------------------------- Instance Variables /** *

      The DynaActionForm implementation Class * which we will use to create new bean instances.

      */ protected transient Class beanClass = null; /** *

      The form bean configuration information for this class.

      */ protected FormBeanConfig config = null; /** *

      The "dynamic class name" for this DynaClass.

      */ protected String name = null; /** *

      The set of dynamic properties that are part of this DynaClass.

      */ protected DynaProperty properties[] = null; /** *

      The set of dynamic properties that are part of this * DynaClass, keyed by the property name. Individual * descriptor instances will be the same instances as those in the * properties list. */ protected HashMap propertiesMap = new HashMap(); // ------------------------------------------------------ DynaClass Methods /** *

      Return the name of this DynaClass (analogous to the * getName() method of java.lang.ClassDynaClass implementation class to support * different dynamic classes, with different sets of properties. */ public String getName() { return (this.name); } /** *

      Return a property descriptor for the specified property, if it exists; * otherwise, return null.

      * * @param name Name of the dynamic property for which a descriptor * is requested * * @exception IllegalArgumentException if no property name is specified */ public DynaProperty getDynaProperty(String name) { if (name == null) { throw new IllegalArgumentException ("No property name specified"); } return ((DynaProperty) propertiesMap.get(name)); } /** *

      Return an array of DynaPropertys for the properties * currently defined in this DynaClass. If no properties are * defined, a zero-length array will be returned.

      */ public DynaProperty[] getDynaProperties() { return (properties); // :FIXME: Should we really be implementing // getBeanInfo instead, which returns property descriptors // and a bunch of other stuff? } /** *

      Instantiate and return a new {@link DynaActionForm} instance, * associated with this DynaActionFormClass. The * properties of the returned {@link DynaActionForm} will have been * initialized to the default values specified in the form bean * configuration information.

      * * @exception IllegalAccessException if the Class or the appropriate * constructor is not accessible * @exception InstantiationException if this Class represents an abstract * class, an array class, a primitive type, or void; or if instantiation * fails for some other reason */ public DynaBean newInstance() throws IllegalAccessException, InstantiationException { DynaActionForm dynaBean = (DynaActionForm) getBeanClass().newInstance(); dynaBean.setDynaActionFormClass(this); FormPropertyConfig props[] = config.findFormPropertyConfigs(); for (int i = 0; i < props.length; i++) { dynaBean.set(props[i].getName(), props[i].initial()); } return (dynaBean); } // --------------------------------------------------------- Public Methods /** *

      Render a String representation of this object.

      */ public String toString() { StringBuffer sb = new StringBuffer("DynaActionFormBean[name="); sb.append(name); DynaProperty props[] = getDynaProperties(); if (props == null) { props = new DynaProperty[0]; } for (int i = 0; i < props.length; i++) { sb.append(','); sb.append(props[i].getName()); sb.append('/'); sb.append(props[i].getType()); } sb.append("]"); return (sb.toString()); } // --------------------------------------------------------- Static Methods /** * @deprecated No longer need to Clear our cache of DynaActionFormClass instances. */ public static void clear() { } /** * Return the DynaActionFormClass instance for the specified form bean * configuration instance. */ public static DynaActionFormClass createDynaActionFormClass(FormBeanConfig config) { return config.getDynaActionFormClass(); } // ------------------------------------------------------ Protected Methods /** *

      Return the implementation class we are using to construct new * instances, re-introspecting our {@link FormBeanConfig} if necessary * (that is, after being deserialized, since beanClass is * marked transient).

      */ protected Class getBeanClass() { if (beanClass == null) { introspect(config); } return (beanClass); } /** *

      Introspect our form bean configuration to identify the supported * properties.

      * * @param config The FormBeanConfig instance describing the properties * of the bean to be created * * @exception IllegalArgumentException if the bean implementation class * specified in the configuration is not DynaActionForm (or a subclass * of DynaActionForm) */ protected void introspect(FormBeanConfig config) { this.config = config; // Validate the ActionFormBean implementation class try { beanClass = RequestUtils.applicationClass(config.getType()); } catch (Throwable t) { throw new IllegalArgumentException ("Cannot instantiate ActionFormBean class '" + config.getType() + "': " + t); } if (!DynaActionForm.class.isAssignableFrom(beanClass)) { throw new IllegalArgumentException ("Class '" + config.getType() + "' is not a subclass of " + "'org.apache.struts.action.DynaActionForm'"); } // Set the name we will know ourselves by from the form bean name this.name = config.getName(); // Look up the property descriptors for this bean class FormPropertyConfig descriptors[] = config.findFormPropertyConfigs(); if (descriptors == null) { descriptors = new FormPropertyConfig[0]; } // Create corresponding dynamic property definitions properties = new DynaProperty[descriptors.length]; for (int i = 0; i < descriptors.length; i++) { properties[i] = new DynaProperty(descriptors[i].getName(), descriptors[i].getTypeClass()); propertiesMap.put(properties[i].getName(), properties[i]); } } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/action/ExceptionHandler.java0000644000175000017500000001514410404045224030305 0ustar arnaudarnaud00000000000000/* * $Id: ExceptionHandler.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 2001-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.action; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.Globals; import org.apache.struts.config.ExceptionConfig; import org.apache.struts.util.MessageResources; import org.apache.struts.util.ModuleException; /** *

      An ExceptionHandler is configured in the Struts * configuration file to handle a specific type of exception thrown * by an Action.execute method.

      * * @since Struts 1.1 */ public class ExceptionHandler { /** *

      Commons logging instance.

      */ private static final Log log = LogFactory.getLog(ExceptionHandler.class); /** *

      The message resources for this package.

      */ private static MessageResources messages = MessageResources.getMessageResources( "org.apache.struts.action.LocalStrings"); /** *

      Handle the Exception. * Return the ActionForward instance (if any) returned by * the called ExceptionHandler. * * @param ex The exception to handle * @param ae The ExceptionConfig corresponding to the exception * @param mapping The ActionMapping we are processing * @param formInstance The ActionForm we are processing * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception ServletException if a servlet exception occurs * * @since Struts 1.1 */ public ActionForward execute( Exception ex, ExceptionConfig ae, ActionMapping mapping, ActionForm formInstance, HttpServletRequest request, HttpServletResponse response) throws ServletException { ActionForward forward = null; ActionMessage error = null; String property = null; // Build the forward from the exception mapping if it exists // or from the form input if (ae.getPath() != null) { forward = new ActionForward(ae.getPath()); } else { forward = mapping.getInputForward(); } // Figure out the error if (ex instanceof ModuleException) { error = ((ModuleException) ex).getActionMessage(); property = ((ModuleException) ex).getProperty(); } else { error = new ActionMessage(ae.getKey(), ex.getMessage()); property = error.getKey(); } this.logException(ex); // Store the exception request.setAttribute(Globals.EXCEPTION_KEY, ex); this.storeException(request, property, error, forward, ae.getScope()); return forward; } /** *

      Logs the Exception using commons-logging.

      * @param e The Exception to log. * @since Struts 1.2 */ protected void logException(Exception e){ log.debug(messages.getMessage("exception.log"), e); } /** *

      Default implementation for handling an ActionError generated * from an Exception during Action delegation. The default * implementation is to set an attribute of the request or session, as * defined by the scope provided (the scope from the exception mapping). An * ActionErrors instance is created, the error is added to the collection * and the collection is set under the Globals.ERROR_KEY.

      * * @param request The request we are handling * @param property The property name to use for this error * @param error The error generated from the exception mapping * @param forward The forward generated from the input path (from the form or exception mapping) * @param scope The scope of the exception mapping. * @deprecated Use storeException(HttpServletRequest, String, ActionMessage, ActionForward, String) * instead. This will be removed after Struts 1.2. */ protected void storeException( HttpServletRequest request, String property, ActionError error, ActionForward forward, String scope) { this.storeException(request, property, (ActionMessage) error, forward, scope); // :TODO: Remove after Struts 1.2 } /** *

      Default implementation for handling an ActionMessage generated * from an Exception during Action delegation. The default * implementation is to set an attribute of the request or session, as * defined by the scope provided (the scope from the exception mapping). An * ActionMessages instance is created, the error is added to the * collection and the collection is set under the Globals.ERROR_KEY.

      * * @param request The request we are handling * @param property The property name to use for this error * @param error The error generated from the exception mapping * @param forward The forward generated from the input path (from the form or exception mapping) * @param scope The scope of the exception mapping. * @since Struts 1.2 */ protected void storeException( HttpServletRequest request, String property, ActionMessage error, ActionForward forward, String scope) { ActionMessages errors = new ActionMessages(); errors.add(property, error); if ("request".equals(scope)) { request.setAttribute(Globals.ERROR_KEY, errors); } else { request.getSession().setAttribute(Globals.ERROR_KEY, errors); } } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/action/ForwardingActionForward.java0000644000175000017500000000307110404045212031627 0ustar arnaudarnaud00000000000000/* * $Id: ForwardingActionForward.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 2000-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.action; /** *

      A subclass of ActionForward that defaults the * redirect attribute to false.

      * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class ForwardingActionForward extends ActionForward { // ----------------------------------------------------------- Constructors /** *

      Construct a new instance with default values.

      */ public ForwardingActionForward() { this(null); } /** *

      Construct a new instance with the specified path.

      * * @param path Path for this instance */ public ForwardingActionForward(String path) { super(); setName(null); setPath(path); setRedirect(false); } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/action/InvalidCancelException.java0000644000175000017500000000244210404045222031417 0ustar arnaudarnaud00000000000000/* * $Id: InvalidCancelException.java 377805 2006-02-14 19:26:15Z niallp $ * * Copyright 2000-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.action; /** *

      Thrown when a token generated by the Cancel tag is found in the * request, but the cancellable property for the Action Mapping is not set. *

      */ public class InvalidCancelException extends Exception { /** *

      Default constructor.

      */ public InvalidCancelException() { super(); } /** *

      Construct the exception with the specified message.

      * * @param message the message */ public InvalidCancelException(String message) { super(message); } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/action/LocalStrings.properties0000644000175000017500000000063410404045214030725 0ustar arnaudarnaud00000000000000dispatch.error=Dispatch[{0}] to method {1} returned an exception dispatch.handler=DispatchMapping[{0}] does not define a handler property dispatch.method=Action[{0}] does not contain method named {1} dispatch.parameter=Request[{0}] does not contain handler parameter named {1} dispatch.return=Action[{0}] invalid return type for method {1} exception.log=ExceptionHandler caught this exception: libstruts1.2-java-1.2.9/src/share/org/apache/struts/action/LocalStrings_ja.properties0000644000175000017500000000163710404045172031406 0ustar arnaudarnaud00000000000000dispatch.error=\u30E1\u30BD\u30C3\u30C9 {1} \u3078\u306E\u632F\u308A\u5206\u3051[{0}]\u3067\u4F8B\u5916\u304C\u6295\u3052\u3089\u308C\u307E\u3057\u305F dispatch.handler=DispatchMapping[{0}]\u3067\u30CF\u30F3\u30C9\u30E9\u30D7\u30ED\u30D1\u30C6\u30A3\u304C\u5B9A\u7FA9\u3055\u308C\u3066\u3044\u307E\u305B\u3093 dispatch.method=Action[{0}]\u306B {1} \u3068\u3044\u3046\u540D\u524D\u306E\u30E1\u30BD\u30C3\u30C9\u306F\u5B9A\u7FA9\u3055\u308C\u3066\u3044\u307E\u305B\u3093 dispatch.parameter=\u30ea\u30af\u30a8\u30b9\u30c8[{0}]\u306b {1} \u3068\u3044\u3046\u540d\u524d\u306e\u30cf\u30f3\u30c9\u30e9\u30d1\u30e9\u30e1\u30fc\u30bf\u306f\u3042\u308a\u307e\u305b\u3093 dispatch.return=Action[{0}]\u306F\u30E1\u30BD\u30C3\u30C9 {1} \u306E\u8FD4\u5024\u306E\u578B\u3068\u3057\u3066\u306F\u4E0D\u9069\u5F53\u3067\u3059 exception.log=\u4F8B\u5916\u30CF\u30F3\u30C9\u30E9\u304C\u4F8B\u5916\u3092\u691C\u77E5\u3057\u307E\u3057\u305F libstruts1.2-java-1.2.9/src/share/org/apache/struts/action/PlugIn.java0000644000175000017500000000504510404045240026244 0ustar arnaudarnaud00000000000000/* * $Id: PlugIn.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 2000-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.action; import javax.servlet.ServletException; import org.apache.struts.config.ModuleConfig; /** *

      A PlugIn is a configuration wrapper for a * module-specific resource or service that needs to be notified about * application startup and application shutdown events (corresponding to when * the container calls init and destroy on the * corresponding {@link ActionServlet} instance). PlugIn objects can be * configured in the struts-config.xml file, without the need * to subclass {@link ActionServlet} simply to perform application lifecycle * activities.

      * *

      Implementations of this interface must supply a zero-argument constructor * for use by {@link ActionServlet}. Configuration can be accomplished by * providing standard JavaBeans property setter methods, which will all have * been called before the init() method is invoked.

      * *

      This interface can be applied to any class, including an Action subclass

      * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ * @since Struts 1.1 */ public interface PlugIn { /** *

      Receive notification that our owning module is being * shut down.

      */ void destroy(); /** *

      Receive notification that the specified module is being * started up.

      * * @param servlet ActionServlet that is managing all the * modules in this web application * @param config ModuleConfig for the module with which * this plug-in is associated * * @exception ServletException if this PlugIn cannot * be successfully initialized */ void init(ActionServlet servlet, ModuleConfig config) throws ServletException; } libstruts1.2-java-1.2.9/src/share/org/apache/struts/action/RedirectingActionForward.java0000644000175000017500000000307610404045226031776 0ustar arnaudarnaud00000000000000/* * $Id: RedirectingActionForward.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 2000-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.action; /** *

      A subclass of ActionForward that defaults the * redirect attribute to true.

      * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class RedirectingActionForward extends ActionForward { // ----------------------------------------------------------- Constructors /** *

      Construct a new instance with default values.

      */ public RedirectingActionForward() { this(null); } /** *

      Construct a new instance with the specified path.

      * * @param path Path for this instance */ public RedirectingActionForward(String path) { super(); setName(null); setPath(path); setRedirect(true); } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/action/RequestActionMapping.java0000644000175000017500000000235010404045224031146 0ustar arnaudarnaud00000000000000/* * $Id: RequestActionMapping.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 2000-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.action; /** *

      Subclass of ActionMapping that defaults the form bean * scope to request.

      * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class RequestActionMapping extends ActionMapping { /** *

      Construct a new instance of this class with the desired default * form bean scope.

      */ public RequestActionMapping() { super(); setScope("request"); } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/action/RequestProcessor.java0000644000175000017500000012341310404045246030404 0ustar arnaudarnaud00000000000000/* * $Id: RequestProcessor.java 379703 2006-02-22 06:17:05Z niallp $ * * Copyright 2000-2005 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.action; import java.io.IOException; import java.util.HashMap; import java.util.Iterator; import java.util.Locale; import javax.servlet.RequestDispatcher; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.Globals; import org.apache.struts.config.ActionConfig; import org.apache.struts.config.ExceptionConfig; import org.apache.struts.config.ForwardConfig; import org.apache.struts.config.ModuleConfig; import org.apache.struts.taglib.html.Constants; import org.apache.struts.upload.MultipartRequestWrapper; import org.apache.struts.util.MessageResources; import org.apache.struts.util.RequestUtils; /** *

      RequestProcessor contains the processing logic that * the {@link ActionServlet} performs as it receives each servlet request * from the container. You can customize the request processing behavior by * subclassing this class and overriding the method(s) whose behavior you are * interested in changing.

      * * @version $Rev: 379703 $ $Date: 2006-02-22 06:17:05 +0000 (Wed, 22 Feb 2006) $ * @since Struts 1.1 */ public class RequestProcessor { // ----------------------------------------------------- Manifest Constants /** *

      The request attribute under which the path information is stored for * processing during a RequestDispatcher.include call.

      */ public static final String INCLUDE_PATH_INFO = "javax.servlet.include.path_info"; /** *

      The request attribute under which the servlet path information is stored * for processing during a RequestDispatcher.include call.

      */ public static final String INCLUDE_SERVLET_PATH = "javax.servlet.include.servlet_path"; // ----------------------------------------------------- Instance Variables /** *

      The set of Action instances that have been created and * initialized, keyed by the fully qualified Java class name of the * Action class.

      */ protected HashMap actions = new HashMap(); /** *

      The ModuleConfiguration with which we are associated.

      */ protected ModuleConfig moduleConfig = null; /** *

      Commons Logging instance.

      */ protected static Log log = LogFactory.getLog(RequestProcessor.class); /** *

      The servlet with which we are associated.

      */ protected ActionServlet servlet = null; // --------------------------------------------------------- Public Methods /** *

      Clean up in preparation for a shutdown of this application.

      */ public void destroy() { synchronized (this.actions) { Iterator actions = this.actions.values().iterator(); while (actions.hasNext()) { Action action = (Action) actions.next(); action.setServlet(null); } this.actions.clear(); } this.servlet = null; } /** *

      Initialize this request processor instance.

      * * @param servlet The ActionServlet we are associated with * @param moduleConfig The ModuleConfig we are associated with. * @throws ServletException If an error occor during initialization */ public void init(ActionServlet servlet, ModuleConfig moduleConfig) throws ServletException { synchronized (actions) { actions.clear(); } this.servlet = servlet; this.moduleConfig = moduleConfig; } /** *

      Process an HttpServletRequest and create the * corresponding HttpServletResponse or dispatch * to another resource.

      * * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception IOException if an input/output error occurs * @exception ServletException if a processing exception occurs */ public void process(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // Wrap multipart requests with a special wrapper request = processMultipart(request); // Identify the path component we will use to select a mapping String path = processPath(request, response); if (path == null) { return; } if (log.isDebugEnabled()) { log.debug("Processing a '" + request.getMethod() + "' for path '" + path + "'"); } // Select a Locale for the current user if requested processLocale(request, response); // Set the content type and no-caching headers if requested processContent(request, response); processNoCache(request, response); // General purpose preprocessing hook if (!processPreprocess(request, response)) { return; } this.processCachedMessages(request, response); // Identify the mapping for this request ActionMapping mapping = processMapping(request, response, path); if (mapping == null) { return; } // Check for any role required to perform this action if (!processRoles(request, response, mapping)) { return; } // Process any ActionForm bean related to this request ActionForm form = processActionForm(request, response, mapping); processPopulate(request, response, form, mapping); // Validate any fields of the ActionForm bean, if applicable try { if (!processValidate(request, response, form, mapping)) { return; } } catch (InvalidCancelException e) { ActionForward forward = processException(request, response, e, form, mapping); processForwardConfig(request, response, forward); return; } catch (IOException e) { throw e; } catch (ServletException e) { throw e; } // Process a forward or include specified by this mapping if (!processForward(request, response, mapping)) { return; } if (!processInclude(request, response, mapping)) { return; } // Create or acquire the Action instance to process this request Action action = processActionCreate(request, response, mapping); if (action == null) { return; } // Call the Action instance itself ActionForward forward = processActionPerform(request, response, action, form, mapping); // Process the returned ActionForward instance processForwardConfig(request, response, forward); } // ----------------------------------------------------- Processing Methods /** *

      Return an Action instance that will be used to process * the current request, creating a new one if necessary.

      * * @param request The servlet request we are processing * @param response The servlet response we are creating * @param mapping The mapping we are using * * @exception IOException if an input/output error occurs */ protected Action processActionCreate(HttpServletRequest request, HttpServletResponse response, ActionMapping mapping) throws IOException { // Acquire the Action instance we will be using (if there is one) String className = mapping.getType(); if (log.isDebugEnabled()) { log.debug(" Looking for Action instance for class " + className); } // :TODO: If there were a mapping property indicating whether // an Action were a singleton or not ([true]), // could we just instantiate and return a new instance here? Action instance = null; synchronized (actions) { // Return any existing Action instance of this class instance = (Action) actions.get(className); if (instance != null) { if (log.isTraceEnabled()) { log.trace(" Returning existing Action instance"); } return (instance); } // Create and return a new Action instance if (log.isTraceEnabled()) { log.trace(" Creating new Action instance"); } try { instance = (Action) RequestUtils.applicationInstance(className); // :TODO: Maybe we should propagate this exception // instead of returning null. } catch (Exception e) { log.error( getInternal().getMessage("actionCreate", mapping.getPath()), e); response.sendError( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, getInternal().getMessage("actionCreate", mapping.getPath())); return (null); } instance.setServlet(this.servlet); actions.put(className, instance); } return (instance); } /** *

      Retrieve and return the ActionForm associated with * this mapping, creating and retaining one if necessary. If there is no * ActionForm associated with this mapping, return * null.

      * * @param request The servlet request we are processing * @param response The servlet response we are creating * @param mapping The mapping we are using */ protected ActionForm processActionForm(HttpServletRequest request, HttpServletResponse response, ActionMapping mapping) { // Create (if necessary) a form bean to use ActionForm instance = RequestUtils.createActionForm (request, mapping, moduleConfig, servlet); if (instance == null) { return (null); } // Store the new instance in the appropriate scope if (log.isDebugEnabled()) { log.debug(" Storing ActionForm bean instance in scope '" + mapping.getScope() + "' under attribute key '" + mapping.getAttribute() + "'"); } if ("request".equals(mapping.getScope())) { request.setAttribute(mapping.getAttribute(), instance); } else { HttpSession session = request.getSession(); session.setAttribute(mapping.getAttribute(), instance); } return (instance); } /** *

      Forward or redirect to the specified destination, by the specified * mechanism. This method uses a ForwardConfig object instead * an ActionForward.

      * * @param request The servlet request we are processing * @param response The servlet response we are creating * @param forward The ForwardConfig controlling where we go next * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs */ protected void processForwardConfig(HttpServletRequest request, HttpServletResponse response, ForwardConfig forward) throws IOException, ServletException { if (forward == null) { return; } if (log.isDebugEnabled()) { log.debug("processForwardConfig(" + forward + ")"); } String forwardPath = forward.getPath(); String uri = null; // paths not starting with / should be passed through without any processing // (ie. they're absolute) if (forwardPath.startsWith("/")) { uri = RequestUtils.forwardURL(request, forward, null); // get module relative uri } else { uri = forwardPath; } if (forward.getRedirect()) { // only prepend context path for relative uri if (uri.startsWith("/")) { uri = request.getContextPath() + uri; } response.sendRedirect(response.encodeRedirectURL(uri)); } else { doForward(uri, request, response); } } // :FIXME: if Action.execute throws Exception, and Action.process has been removed, // should the process* methods still throw IOException, ServletException? /** *

      Ask the specified Action instance to handle this * request. Return the ActionForward instance (if any) * returned by the called Action for further processing. *

      * * @param request The servlet request we are processing * @param response The servlet response we are creating * @param action The Action instance to be used * @param form The ActionForm instance to pass to this Action * @param mapping The ActionMapping instance to pass to this Action * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs */ protected ActionForward processActionPerform(HttpServletRequest request, HttpServletResponse response, Action action, ActionForm form, ActionMapping mapping) throws IOException, ServletException { try { return (action.execute(mapping, form, request, response)); } catch (Exception e) { return (processException(request, response, e, form, mapping)); } } /** *

      Removes any ActionMessages object stored in the session * under Globals.MESSAGE_KEY and Globals.ERROR_KEY * if the messages' isAccessed method returns true. This * allows messages to be stored in the session, display one time, and be * released here.

      * * @param request The servlet request we are processing. * @param response The servlet response we are creating. * * @since Struts 1.2 */ protected void processCachedMessages( HttpServletRequest request, HttpServletResponse response) { HttpSession session = request.getSession(false); if (session == null) { return; } // Remove messages as needed ActionMessages messages = (ActionMessages) session.getAttribute(Globals.MESSAGE_KEY); if (messages != null) { if (messages.isAccessed()) { session.removeAttribute(Globals.MESSAGE_KEY); } } // Remove error messages as needed messages = (ActionMessages) session.getAttribute(Globals.ERROR_KEY); if (messages != null) { if (messages.isAccessed()) { session.removeAttribute(Globals.ERROR_KEY); } } } /** *

      Set the default content type (with optional character encoding) for * all responses if requested. NOTE - This header will * be overridden automatically if a * RequestDispatcher.forward call is * ultimately invoked.

      * * @param request The servlet request we are processing * @param response The servlet response we are creating */ protected void processContent(HttpServletRequest request, HttpServletResponse response) { String contentType = moduleConfig.getControllerConfig().getContentType(); if (contentType != null) { response.setContentType(contentType); } } /** *

      Ask our exception handler to handle the exception. Return the * ActionForward instance (if any) returned by the * called ExceptionHandler.

      * * @param request The servlet request we are processing * @param response The servlet response we are processing * @param exception The exception being handled * @param form The ActionForm we are processing * @param mapping The ActionMapping we are using * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs */ protected ActionForward processException(HttpServletRequest request, HttpServletResponse response, Exception exception, ActionForm form, ActionMapping mapping) throws IOException, ServletException { // Is there a defined handler for this exception? ExceptionConfig config = mapping.findException(exception.getClass()); if (config == null) { log.warn(getInternal().getMessage("unhandledException", exception.getClass())); if (exception instanceof IOException) { throw (IOException) exception; } else if (exception instanceof ServletException) { throw (ServletException) exception; } else { throw new ServletException(exception); } } // Use the configured exception handling try { ExceptionHandler handler = (ExceptionHandler) RequestUtils.applicationInstance(config.getHandler()); return (handler.execute(exception, config, mapping, form, request, response)); } catch (Exception e) { throw new ServletException(e); } } /** *

      Process a forward requested by this mapping (if any). Return * true if standard processing should continue, or * false if we have already handled this request.

      * * @param request The servlet request we are processing * @param response The servlet response we are creating * @param mapping The ActionMapping we are using */ protected boolean processForward(HttpServletRequest request, HttpServletResponse response, ActionMapping mapping) throws IOException, ServletException { // Are we going to processing this request? String forward = mapping.getForward(); if (forward == null) { return (true); } internalModuleRelativeForward(forward, request, response); return (false); } /** *

      Process an include requested by this mapping (if any). Return * true if standard processing should continue, or * false if we have already handled this request.

      * * @param request The servlet request we are processing * @param response The servlet response we are creating * @param mapping The ActionMapping we are using */ protected boolean processInclude(HttpServletRequest request, HttpServletResponse response, ActionMapping mapping) throws IOException, ServletException { // Are we going to processing this request? String include = mapping.getInclude(); if (include == null) { return (true); } internalModuleRelativeInclude(include, request, response); return (false); } /** *

      Automatically select a Locale for the current user, if requested. * NOTE - configuring Locale selection will trigger * the creation of a new HttpSession if necessary.

      * * @param request The servlet request we are processing * @param response The servlet response we are creating */ protected void processLocale(HttpServletRequest request, HttpServletResponse response) { // Are we configured to select the Locale automatically? if (!moduleConfig.getControllerConfig().getLocale()) { return; } // Has a Locale already been selected? HttpSession session = request.getSession(); if (session.getAttribute(Globals.LOCALE_KEY) != null) { return; } // Use the Locale returned by the servlet container (if any) Locale locale = request.getLocale(); if (locale != null) { if (log.isDebugEnabled()) { log.debug(" Setting user locale '" + locale + "'"); } session.setAttribute(Globals.LOCALE_KEY, locale); } } /** *

      Select the mapping used to process the selection path for this request. * If no mapping can be identified, create an error response and return * null.

      * * @param request The servlet request we are processing * @param response The servlet response we are creating * @param path The portion of the request URI for selecting a mapping * * @exception IOException if an input/output error occurs */ protected ActionMapping processMapping(HttpServletRequest request, HttpServletResponse response, String path) throws IOException { // Is there a mapping for this path? ActionMapping mapping = (ActionMapping) moduleConfig.findActionConfig(path); // If a mapping is found, put it in the request and return it if (mapping != null) { request.setAttribute(Globals.MAPPING_KEY, mapping); return (mapping); } // Locate the mapping for unknown paths (if any) ActionConfig configs[] = moduleConfig.findActionConfigs(); for (int i = 0; i < configs.length; i++) { if (configs[i].getUnknown()) { mapping = (ActionMapping) configs[i]; request.setAttribute(Globals.MAPPING_KEY, mapping); return (mapping); } } // No mapping can be found to process this request String msg = getInternal().getMessage("processInvalid"); log.error(msg + " " + path); response.sendError(HttpServletResponse.SC_NOT_FOUND, msg); return null; } /** *

      If this is a multipart request, wrap it with a special wrapper. * Otherwise, return the request unchanged.

      * * @param request The HttpServletRequest we are processing */ protected HttpServletRequest processMultipart(HttpServletRequest request) { if (!"POST".equalsIgnoreCase(request.getMethod())) { return (request); } String contentType = request.getContentType(); if ((contentType != null) && contentType.startsWith("multipart/form-data")) { return (new MultipartRequestWrapper(request)); } else { return (request); } } /** *

      Set the no-cache headers for all responses, if requested. * NOTE - This header will be overridden * automatically if a RequestDispatcher.forward call is * ultimately invoked.

      * * @param request The servlet request we are processing * @param response The servlet response we are creating */ protected void processNoCache(HttpServletRequest request, HttpServletResponse response) { if (moduleConfig.getControllerConfig().getNocache()) { response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache,no-store,max-age=0"); response.setDateHeader("Expires", 1); } } /** *

      Identify and return the path component (from the request URI) that * we will use to select an ActionMapping with which to dispatch. * If no such path can be identified, create an error response and return * null.

      * * @param request The servlet request we are processing * @param response The servlet response we are creating * * @exception IOException if an input/output error occurs */ protected String processPath(HttpServletRequest request, HttpServletResponse response) throws IOException { String path = null; // For prefix matching, match on the path info (if any) path = (String) request.getAttribute(INCLUDE_PATH_INFO); if (path == null) { path = request.getPathInfo(); } if ((path != null) && (path.length() > 0)) { return (path); } // For extension matching, strip the module prefix and extension path = (String) request.getAttribute(INCLUDE_SERVLET_PATH); if (path == null) { path = request.getServletPath(); } String prefix = moduleConfig.getPrefix(); if (!path.startsWith(prefix)) { String msg = getInternal().getMessage("processPath"); log.error(msg + " " + request.getRequestURI()); response.sendError(HttpServletResponse.SC_BAD_REQUEST, msg); return null; } path = path.substring(prefix.length()); int slash = path.lastIndexOf("/"); int period = path.lastIndexOf("."); if ((period >= 0) && (period > slash)) { path = path.substring(0, period); } return (path); } /** *

      Populate the properties of the specified ActionForm instance from * the request parameters included with this request. In addition, * request attribute Globals.CANCEL_KEY will be set if * the request was submitted with a button created by * CancelTag.

      * * @param request The servlet request we are processing * @param response The servlet response we are creating * @param form The ActionForm instance we are populating * @param mapping The ActionMapping we are using * * @exception ServletException if thrown by RequestUtils.populate() */ protected void processPopulate(HttpServletRequest request, HttpServletResponse response, ActionForm form, ActionMapping mapping) throws ServletException { if (form == null) { return; } // Populate the bean properties of this ActionForm instance if (log.isDebugEnabled()) { log.debug(" Populating bean properties from this request"); } form.setServlet(this.servlet); form.reset(mapping, request); if (mapping.getMultipartClass() != null) { request.setAttribute(Globals.MULTIPART_KEY, mapping.getMultipartClass()); } RequestUtils.populate(form, mapping.getPrefix(), mapping.getSuffix(), request); // Set the cancellation request attribute if appropriate if ((request.getParameter(Constants.CANCEL_PROPERTY) != null) || (request.getParameter(Constants.CANCEL_PROPERTY_X) != null)) { request.setAttribute(Globals.CANCEL_KEY, Boolean.TRUE); } } /** *

      General-purpose preprocessing hook that can be overridden as required * by subclasses. Return true if you want standard processing * to continue, or false if the response has already been * completed. The default implementation does nothing.

      * * @param request The servlet request we are processing * @param response The servlet response we are creating */ protected boolean processPreprocess(HttpServletRequest request, HttpServletResponse response) { return (true); } /** *

      If this action is protected by security roles, make sure that the * current user possesses at least one of them. Return true * to continue normal processing, or false if an appropriate * response has been created and processing should terminate.

      * * @param request The servlet request we are processing * @param response The servlet response we are creating * @param mapping The mapping we are using * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs */ protected boolean processRoles(HttpServletRequest request, HttpServletResponse response, ActionMapping mapping) throws IOException, ServletException { // Is this action protected by role requirements? String roles[] = mapping.getRoleNames(); if ((roles == null) || (roles.length < 1)) { return (true); } // Check the current user against the list of required roles for (int i = 0; i < roles.length; i++) { if (request.isUserInRole(roles[i])) { if (log.isDebugEnabled()) { log.debug(" User '" + request.getRemoteUser() + "' has role '" + roles[i] + "', granting access"); } return (true); } } // The current user is not authorized for this action if (log.isDebugEnabled()) { log.debug(" User '" + request.getRemoteUser() + "' does not have any required role, denying access"); } response.sendError( HttpServletResponse.SC_FORBIDDEN, getInternal().getMessage("notAuthorized", mapping.getPath())); return (false); } /** *

      If this request was not cancelled, and the request's * {@link ActionMapping} has not disabled validation, call the * validate method of the specified {@link ActionForm}, * and forward to the input path if there were any errors. * Return true if we should continue processing, * or false if we have already forwarded control back * to the input form.

      * * @param request The servlet request we are processing * @param response The servlet response we are creating * @param form The ActionForm instance we are populating * @param mapping The ActionMapping we are using * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet exception occurs * @exception InvalidCancelException if a cancellation is attempted * without the proper action configuration */ protected boolean processValidate(HttpServletRequest request, HttpServletResponse response, ActionForm form, ActionMapping mapping) throws IOException, ServletException, InvalidCancelException { if (form == null) { return (true); } // Has validation been turned off for this mapping? if (!mapping.getValidate()) { return (true); } // Was this request cancelled? If it has been, the mapping also // needs to state whether the cancellation is permissable; otherwise // the cancellation is considered to be a symptom of a programmer // error or a spoof. if (request.getAttribute(Globals.CANCEL_KEY) != null) { if (mapping.getCancellable()) { if (log.isDebugEnabled()) { log.debug(" Cancelled transaction, skipping validation"); } return (true); } else { request.removeAttribute(Globals.CANCEL_KEY); throw new InvalidCancelException(); } } // Call the form bean's validation method if (log.isDebugEnabled()) { log.debug(" Validating input form properties"); } ActionMessages errors = form.validate(mapping, request); if ((errors == null) || errors.isEmpty()) { if (log.isTraceEnabled()) { log.trace(" No errors detected, accepting input"); } return (true); } // Special handling for multipart request if (form.getMultipartRequestHandler() != null) { if (log.isTraceEnabled()) { log.trace(" Rolling back multipart request"); } form.getMultipartRequestHandler().rollback(); } // Was an input path (or forward) specified for this mapping? String input = mapping.getInput(); if (input == null) { if (log.isTraceEnabled()) { log.trace(" Validation failed but no input form available"); } response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, getInternal().getMessage("noInput", mapping.getPath())); return (false); } // Save our error messages and return to the input form if possible if (log.isDebugEnabled()) { log.debug(" Validation failed, returning to '" + input + "'"); } request.setAttribute(Globals.ERROR_KEY, errors); if (moduleConfig.getControllerConfig().getInputForward()) { ForwardConfig forward = mapping.findForward(input); processForwardConfig( request, response, forward); } else { internalModuleRelativeForward(input, request, response); } return (false); } /** *

      Do a module relative forward to specified URI using request dispatcher. * URI is relative to the current module. The real URI is compute by prefixing * the module name.

      *

      This method is used internally and is not part of the public API. It is * advised to not use it in subclasses.

      * * @param uri Module-relative URI to forward to * @param request Current page request * @param response Current page response * * @since Struts 1.1 */ protected void internalModuleRelativeForward( String uri, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // Construct a request dispatcher for the specified path uri = moduleConfig.getPrefix() + uri; // Delegate the processing of this request // :FIXME: - exception handling? if (log.isDebugEnabled()) { log.debug(" Delegating via forward to '" + uri + "'"); } doForward(uri, request, response); } /** *

      Do a module relative include to specified URI using request dispatcher. * URI is relative to the current module. The real URI is compute by prefixing * the module name.

      *

      This method is used internally and is not part of the public API. It is * advised to not use it in subclasses.

      * * @param uri Module-relative URI to include * @param request Current page request * @param response Current page response * * @since Struts 1.1 */ protected void internalModuleRelativeInclude( String uri, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // Construct a request dispatcher for the specified path uri = moduleConfig.getPrefix() + uri; // Delegate the processing of this request // FIXME - exception handling? if (log.isDebugEnabled()) { log.debug(" Delegating via include to '" + uri + "'"); } doInclude(uri, request, response); } /** *

      Do a forward to specified URI using a RequestDispatcher. * This method is used by all internal method needing to do a forward.

      * * @param uri Context-relative URI to forward to * @param request Current page request * @param response Current page response * @since Struts 1.1 */ protected void doForward( String uri, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // Unwrap the multipart request, if there is one. if (request instanceof MultipartRequestWrapper) { request = ((MultipartRequestWrapper) request).getRequest(); } RequestDispatcher rd = getServletContext().getRequestDispatcher(uri); if (rd == null) { response.sendError( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, getInternal().getMessage("requestDispatcher", uri)); return; } rd.forward(request, response); } /** *

      Do an include of specified URI using a RequestDispatcher. * This method is used by all internal method needing to do an include.

      * * @param uri Context-relative URI to include * @param request Current page request * @param response Current page response * @since Struts 1.1 */ protected void doInclude( String uri, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // Unwrap the multipart request, if there is one. if (request instanceof MultipartRequestWrapper) { request = ((MultipartRequestWrapper) request).getRequest(); } RequestDispatcher rd = getServletContext().getRequestDispatcher(uri); if (rd == null) { response.sendError( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, getInternal().getMessage("requestDispatcher", uri)); return; } rd.include(request, response); } // -------------------------------------------------------- Support Methods /** *

      Return the MessageResources instance containing our * internal message strings.

      */ protected MessageResources getInternal() { return (servlet.getInternal()); } /** *

      Return the ServletContext for the web application in which * we are running. */ protected ServletContext getServletContext() { return (servlet.getServletContext()); } /** *

      Log the specified message to the servlet context log for this * web application.

      * * @param message The message to be logged * @deprecated Use commons-logging instead. This will be removed in a release * after Struts 1.2. */ protected void log(String message) { // :TODO: Remove after Struts 1.2 servlet.log(message); } /** *

      Log the specified message and exception to the servlet context log * for this web application.

      * * @param message The message to be logged * @param exception The exception to be logged * @deprecated Use commons-logging instead. This will be removed in a release * after Struts 1.2. */ protected void log(String message, Throwable exception) { // :TODO: Remove after Sruts 1.2 servlet.log(message, exception); } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/action/SessionActionMapping.java0000644000175000017500000000235010404045224031141 0ustar arnaudarnaud00000000000000/* * $Id: SessionActionMapping.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 2000-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.action; /** *

      Subclass of ActionMapping that defaults the form bean * scope to session.

      * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class SessionActionMapping extends ActionMapping { /** *

      Construct a new instance of this class with the desired default * form bean scope.

      */ public SessionActionMapping() { super(); setScope("session"); } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/action/package.html0000644000175000017500000000147010404045210026457 0ustar arnaudarnaud00000000000000

      The action package is the core of the struts framework, providing the "Controller" aspect of a MVC model.



      Action Package UML

      Package Specification

      ##### FILL IN ANY SPECS NEEDED BY JAVA COMPATIBILITY KIT #####

      Related Documentation

      For overviews, tutorials, examples, guides, and tool documentation, please see: libstruts1.2-java-1.2.9/src/share/org/apache/struts/actions/0000755000175000017500000000000010423130301024354 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/src/share/org/apache/struts/actions/doc-files/0000755000175000017500000000000010423130301026221 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/src/share/org/apache/struts/actions/doc-files/actionsUML.gif0000644000175000017500000001404410404045250030740 0ustar arnaudarnaud00000000000000GIF87a¿4÷€€€€€€€€€ÀÀÀÀÜÀ¦Êð@ ` €   À à @ @@@`@€@ @À@à@` `@```€` `À`à`€ €@€`€€€ €À€à€   @ ` €   À à À À@À`À€À ÀÀÀàÀà à@à`à€à àÀààà@ @@@`@€@ @À@à@ @ @@ @` @€ @  @À @à @@@ @@@@@`@@€@@ @@À@@à@@`@ `@@`@``@€`@ `@À`@à`@€@ €@@€@`€@€€@ €@À€@à€@ @  @@ @` @€ @  @À @à @À@ À@@À@`À@€À@ À@ÀÀ@àÀ@à@ à@@à@`à@€à@ à@Àà@àà@€ €@€`€€€ €À€à€ € €@ €` €€ €  €À €à €@€ @€@@€`@€€@€ @€À@€à@€`€ `€@`€``€€`€ `€À`€à`€€€ €€@€€`€€€€€ €€À€€à€€ €  €@ €` €€ €  €À €à €À€ À€@À€`À€€À€ À€ÀÀ€àÀ€à€ à€@à€`à€€à€ à€Àà€àà€À À@À`À€À ÀÀÀàÀ À À@ À` À€ À  ÀÀ Àà À@À @À@@À`@À€@À @ÀÀ@Àà@À`À `À@`À``À€`À `ÀÀ`Àà`À€À €À@€À`€À€€À €ÀÀ€Àà€À À  À@ À` À€ À  ÀÀ Àà ÀÀÀ ÀÀ@ÀÀ`ÀÀ€ÀÀ ÀÀÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ!ù,¿4ÿÿ H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\ɲ¥Ë—0cÊœI³¦Í›8sê܉€ÏŸ@ƒ J´¨Ñ£H“*]Ê´©Ó§P£J:•§Õ«X³jÕHµ«×¯`ÊK¶,Ô­hÓª]‹Ó¬Û·pãÊK·(Û»xóêå(t¯ß¿iûL¸p` †+žt±ãÇO"ŽL¹rÈÉ–3kÞŒð'çÏ zMº´a̦HÍ5ë×°³Žvx v`Û}âÞÍ»æìRj¬}ïÀ»ÞVW#øvÝçУ{ÍÛüß÷ ¾ÛÞFà ,<ÿø‚ÀÞr™ÊÏWOþ<àök×Ûó¹…àSØ»—¯Èƒ#ù8pÁ€÷ Z‚µßB :„YƒAH|ºM(¡B‚$á…|eèœ{„qˆÕz½ã“æY·Eö\sÌ1FS€ùäÀáyqò¥ç!W"ÔžrAЏ`†?¢—P@2¹™“ j¥N$”ÄOïØ#ŠÍ sL?ý¼£0à8^ðZÜk B"|óÁ/ËlD ›¤ñg/‰$Á®ÍyôoR÷ûgž~&šë¬GZ}èÎU3L¡¡þjé£ÔÚ›ó=÷l¹÷TÈ S̨ëžÜʨ¶@¼Xð‡¯¦Xm×µ‹pâJt'°¿BγÀûB]ù¾6+ûóÂÿ7œ¶cM yöÓ;ƒmöž=ON°élpäe—ÍzêºöL¨è¬Kžµ¯·ã~—ÆlOqðö“.?r²0Ì3Ÿ®1y“ã©Þ8oà|`A¼4<ðÏùjžðæ:ÿ;ø¹GŽ9ãF[nôû‹_ÛJKsv¨kª?î3Ъ›Oùý¡KíÔ7¿ýåÏ¥ƒèº.ð0:À=¶°,}ãK¡ó€ñ1sñƒy Õ¨ú‘·é½È€›Ëd/|¡^I’×j7§MA÷j Ĩ’/N£á ËWºÏ-,göãŸïd—: íX½k]s£À*,hO´" ¨5ÒIQÿr`dT¦‚TœýØãÓ#!Þ6(yué¾Ô"¼è§B™Vu½Â¡Çˆ.deê÷$%þ/Õ ﶨÅò5‘_œÝ!!É+)V2Œé‹d|r–%{çÿ±c1H¸7»™2m0øG’¥«Tëò’Œ^dÇc G,CáZ‚Ĉ¹‡š  ™Ø9(.rŠçë_õô¸<¡‘[ –³iÀ¦ pšÑ,àïzI7<ÀG¨¥©H5Jã¥k¨l#ÈV9²PÕ­d£e˜j9¦TÁè†CŽ )ÌÌXŠlµŠbcטÓaík<»—ÕŒyº„J¡=(¹ö:ÅE4Y<ÿ#EÞñÅKet,˜Œ7*a¤3•n¬…QŒ»Áso'[Up…ð à »´Í>#ÓOËRÚŒR 5JO~€eßÌG»B &žÓBÂIQ²v¾Ó”¥ªe8ï踀G¯Ù)dz:Hmi’rBõˆXYBÖoK{à'8ЮSÅ2ž0µ›Ð9Õ¡A•¬Ì KG%O xõ‡ýkÖ :nú³CÖjkZ‰˜1Ç\öxÃ:Z£Îè³/ “©LÖT5’³”èT@_„¿Âq ?pÁ~àØÞ`¶l‚ˆ$;ÖÉî…±‡Û§'ßžðÀ«³«rWŒìhGê‘rŽ0®ô)¡zÎ! SA™Àn[[Ùæ3‰¿´lY}K¢r\àèŠ{#þí–eDÂÑžjo_)ù†Á½ö¶.pv0Ü`Z»/?¥Ãà;Ø.ÝRpC0ëI{Üá°‚qůVÕèo[]kIbT‘ Fôí‡d{ƒÿzõ0¯z$L^¥ ­ÏZ¿äWãhÑØ!¦0y¶ó…7løó"“Î|ÄdñLWµ\´ØÊ_ÝŽnà Üg„C`ÞE¹xV/7ëÇE ²š+ø<ÁhZ =ü7xaIH‚† €k“Ý´¸íßFÛÙÝþ¢§AM>2.Ü Å"0¥½~5«bŒÖåÎ}Ä’pÚiàF·5­k1;0ߦ‘Ö±Î<^yóxÓÆþÞqÍï_£»ÔüKu¢Óld[àÄêb@…¨qűÜÍ>›±=:nŸ;~ë(3G§°€.Û™EÝu]3²Ý|µÒzxfÿ€O›çê>J&Ñæs¦i*‡ßÃ'´ø±v妿 ueê}Ë„fÖ¯°©ÿ[áð›šæ¶6>Îe´Hì~¸Ó&~ð˜û›²ÅÆøÉ±†¹±…QœC P#¾@g‰;ÛóÆä2Ã\I¿ ¾Q´9M$5u+¨5±cC#—°s5¹çD D´'>Æ·w€=ÁXSÂ/¨iç{¶gV–Wƒìñm*oòxCjÄFm1¨nm/()ÿAn…)iS„Áv„98LÈKNøs$¡„+hh?ø„ÐæOSø{öfp‡æe¯FkdX†fx†MakZH€UX€_…z‘…kxjr¸m]øBƒ¾U‡s¨i|è…[†W8Y؇bx‡¡–oÔBy„H~ÞÂ{&·l3ˆ!^‰gˆ1„ˆX¸‹hlpA”8‰i§?cCoy8”„‰“§‰bÈVa(€¦¶v8‡Q7·p¡˜zÇ7f@uï×kª¸‚Ÿ¨SE·„Hh·ˆ,‰ƒw‡h˜4n"Ë÷‹jÅŠ{():Ø!Æ(‹bv¶¨~š„M¼`¤z3GÕŒaFÄ‚Ë|…û'{—R}âDØÔ|ÒXM蘎ªX„íxêH%h}Š×ƒx¸röGf¤¸j¾¸>ƒ†_6yŽ6ÊXËÈv\Ôy¹‚ôÇ‹ Y}hCˆp‰™7C;äxlWP½ø èvc’ž‘LÃp …Âh“°H“É“Á„j=yDH’l”>ÿYˆ„xŒX…H)…O铉¡”Bø…ìa”R™•QÙXæV6p*‰†dY–f)kj¨v<)VÎÖ•6æ–[ùZ¹Ž;±Vm —«ˆ—qù[syƒm²ƒø$}¹—F§—ñ”©6Œöy“4‹I˜P™ö•Àp†©-Ùj”)™N™™Ý"%Dɉ8È6·q¨©qᣚµèžÙ&éSíF‘œšÙ˜É(>é—0Ùçyý÷š?i‡¢“®¸`¸IŒWŠÈI|:œÉ›p‚‹/ɳëµ(‹©æÙ‘ä›?ÉÔ?Sw>Q¾ø wÉ IÙDÁöØwLŽ…k£«¿Ø†ÀΗz8I žÙ¹¬‘œ|ý}û6L,»ŠÊÁë:ÀÒ§|VÇÀ0é©Ã' y)œÁ]7MÈ|ý{!\¦¯*ÃJn ¹råÛHŒôÂÜÃ2ø€eP¸’Œ.¿ù×'åÅ<¬¾»ÄØ[#¸H ÙÂcÄ ÁTlÂÕÛ¸»Ê­×ÒfLP*ç’Ø™›_|‰4üÆí˺r<Æt컀¬½²ù·?z« {Èvˆ<ȬÄzjÈŽÆŠ½“q |¾:ÜEQ½Â é­V °; jìwm܋ѷÃS¼Ìcý¯e }[—5×ÄÖL½Æ‡gyLXÕo­»‚W<½ì&_“ 4Í›¨Ÿ'݆} ×׬´šÜØûØÓ:Ã’±i¸×{ٓͯbÍÙÚ:ÐÇ ÚÎêÏÿ캤íÈ& ¯©MÊ«-°­MÅäˆ`±­ÚF ʵÁq=®¹-Ûï¬È½_m»Íˆ°ÁMºÄ ŸÅ¹³É·ÛâÙÍýµÏ ÝÑ}´L¡SÕ¹|½ØÙ²ÛÍÝÝÔ2ÞeûÝàMÞkÞçÞ [•ìíÐúÞÖ}ÕòíÝô]ß«Þé‹ßôªßûÍß`íêß¿ àà*àNà[cŽà =¦ NÖ­øàùºà.á¹Jánᮊá®á§Êáëíᢠâ!.âšJânl➈*žà,ÞâÇjʦí·0.y¬ÌÜ5®oÐÌÛ9®–;ž¡Ö=þp7ŽC_ê¶݉A®ã§±¯ÂVm½ºIˆÄ|Ü\úÚ6h¼QŽ·À ™jèÅï«Ø‚=ÄDŒÅ(¿7åt¸åøÖÄ^d;,ç¿"¬wD­mWŽæ~(µÌHÉ'Ô»Õ ÖÃmçZ¾äLŒó›‹YtÇ^Åi]ç‚áS»*Œj=éÓ8¾aýèq§æ 7é³ç¯sÖhüÂ%®é~Mè8äpv §‡\Ó>½Ç)gê÷ã7Iës‹êÈëw®ë¬Íë½Ï´ ìÁn´8Nì=&ã3NÈ^ìÍDÞØ(þì'.í—íÔ¬×íÙÞ×Ö¾í`ÚíÞÞ¤àî;:î䞢æ~îϪî*îìîœîþî¯ïò.™ô^ï`‹ï}ïú.•üÞïî ðøüï϶/Ïð¿˜ð ‰ ßðw ñéüð¿¤Ë®¦„9HñÏñ¥žñî­‚ßð­`“щ9àHò˜·Ñ‹â†ŽŽÒ¢hºUÌò›^è0_ó}æbf$móµŽó$'½„>‹ŽLt­‹„ͼùHæ`ó4÷ ôÁ7Õ$¬w Ô;ãèuXÁ åçƒg:|ÛR^½Ô:\׌¾|Ú†|«æõúèÿ=ö÷Måi¼c`M@ý¿—¾q_×S-÷ƒNõÒ8¾yÅl_ÃO¬Öük×øi.ô~ï÷tWŽÓuuÆw-M‘èŽéͦyËk69'MJžPÏ5ù™Ç ßÅN/úÙùÎÙ:Ù°¯àì;ÎŽ[ûnú¢K˜´µ«ûd€#¯ðÃóÀ¥ñÇ¿üÌßüÎÿüÐýÒ?ýÔ_ý­;libstruts1.2-java-1.2.9/src/share/org/apache/struts/actions/ActionDispatcher.java0000644000175000017500000004136510404045214030463 0ustar arnaudarnaud00000000000000/* * $Id: ActionDispatcher.java 383720 2006-03-07 00:07:59Z niallp $ * * Copyright 2005-2006 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.actions; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.HashMap; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.util.MessageResources; import org.apache.struts.Globals; /** *

      Action helper class that dispatches to a public method in an Action.

      *

      *

      This class is provided as an alternative mechanism to using DispatchAction * and its various flavours and means Dispatch behaviour can be * easily implemented into any Action without having to * inherit from a particular super Action.

      *

      *

      *

      *

       *   public class MyCustomAction extends Action {
       * 
       *       protected ActionDispatcher dispatcher
       *                = new ActionDispatcher(this, ActionDispatcher.MAPPING_FLAVOR);
       * 
       *       public ActionForward execute(ActionMapping mapping,
       *                                    ActionForm form,
       *                                    HttpServletRequest request,
       *                                    HttpServletResponse response)
       *                           throws Exception {
       *           return dispatcher.execute(mapping, form, request, response);
       *       }
       *   }
       * 
      *

      *

      It provides three flavours of determing the name of the method:

      *

      *

        *
      • {@link #DEFAULT_FLAVOR} - uses the parameter specified in * the struts-config.xml to get the method name from the Request * (equivalent to DispatchAction except uses "method" * as a default if the parameter is not specified * in the struts-config.xml).
      • *

        *

      • {@link #DISPATCH_FLAVOR} - uses the parameter specified in * the struts-config.xml to get the method name from the Request * (equivalent to DispatchAction).
      • *

        *

      • {@link #MAPPING_FLAVOR} - uses the parameter specified in * the struts-config.xml as the method name * (equivalent to MappingDispatchAction).
      • *

        *

      * * @since Struts 1.2.7 * @version $Revision: 383720 $ $Date: 2006-03-07 00:07:59 +0000 (Tue, 07 Mar 2006) $ */ public class ActionDispatcher { // ----------------------------------------------------- Instance Variables /** * Indicates "default" dispatch flavor */ public static final int DEFAULT_FLAVOR = 0; /** * Indicates "mapping" dispatch flavor */ public static final int MAPPING_FLAVOR = 1; /** * Indicates flavor compatible with DispatchAction */ public static final int DISPATCH_FLAVOR = 2; /** * The associated Action to dispatch to. */ protected Action actionInstance; /** * Indicates dispatch flavor */ protected int flavor; /** * The Class instance of this DispatchAction class. */ protected Class clazz; /** * Commons Logging instance. */ protected static Log log = LogFactory.getLog(ActionDispatcher.class); /** * The message resources for this package. */ protected static MessageResources messages = MessageResources.getMessageResources ("org.apache.struts.actions.LocalStrings"); /** * The set of Method objects we have introspected for this class, * keyed by method name. This collection is populated as different * methods are called, so that introspection needs to occur only * once per method name. */ protected HashMap methods = new HashMap(); /** * The set of argument type classes for the reflected method call. These * are the same for all calls, so calculate them only once. */ protected Class[] types = { ActionMapping.class, ActionForm.class, HttpServletRequest.class, HttpServletResponse.class}; // ----------------------------------------------------- Constructors public ActionDispatcher(Action actionInstance) { this(actionInstance, DEFAULT_FLAVOR); } public ActionDispatcher(Action actionInstance, int flavor) { this.actionInstance = actionInstance; this.flavor = flavor; clazz = actionInstance.getClass(); } // --------------------------------------------------------- Public Methods /** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it). * Return an ActionForward instance describing where and how * control should be forwarded, or null if the response has * already been completed. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * @throws Exception if an exception occurs */ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // Process "cancelled" if (isCancelled(request)) { ActionForward af = cancelled(mapping, form, request, response); if (af != null) { return af; } } // Identify the request parameter containing the method name String parameter = getParameter(mapping, form, request, response); // Get the method's name. This could be overridden in subclasses. String name = getMethodName(mapping, form, request, response, parameter); // Prevent recursive calls if ("execute".equals(name) || "perform".equals(name)) { String message = messages.getMessage("dispatch.recursive", mapping.getPath()); log.error(message); throw new ServletException(message); } // Invoke the named method, and return the result return dispatchMethod(mapping, form, request, response, name); } /** *

      Dispatches to the target class' unspecified method, * if present, otherwise throws a ServletException. Classes utilizing * ActionDispatcher should provide an unspecified * method if they wish to provide behavior different than * throwing a ServletException..

      */ protected ActionForward unspecified(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // Identify if there is an "unspecified" method to be dispatched to String name = "unspecified"; Method method = null; try { method = getMethod(name); } catch (NoSuchMethodException e) { String message = messages.getMessage("dispatch.parameter", mapping.getPath(), mapping.getParameter()); log.error(message); throw new ServletException(message); } return dispatchMethod(mapping, form, request, response, name, method); } /** *

      Dispatches to the target class' cancelled method, if present, * otherwise returns null. Classes utilizing ActionDispatcher * should provide a cancelled method if they wish to provide * behavior different than returning null.

      */ protected ActionForward cancelled(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // Identify if there is an "cancelled" method to be dispatched to String name = "cancelled"; Method method = null; try { method = getMethod(name); } catch (NoSuchMethodException e) { return null; } return dispatchMethod(mapping, form, request, response, name, method); } // ----------------------------------------------------- Protected Methods /** * Dispatch to the specified method. */ protected ActionForward dispatchMethod(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response, String name) throws Exception { // Make sure we have a valid method name to call. // This may be null if the user hacks the query string. if (name == null) { return this.unspecified(mapping, form, request, response); } // Identify the method object to be dispatched to Method method = null; try { method = getMethod(name); } catch (NoSuchMethodException e) { String message = messages.getMessage("dispatch.method", mapping.getPath(), name); log.error(message, e); String userMsg = messages.getMessage("dispatch.method.user", mapping.getPath()); throw new NoSuchMethodException(userMsg); } return dispatchMethod(mapping, form, request, response, name, method); } /** * Dispatch to the specified method. */ protected ActionForward dispatchMethod(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response, String name, Method method) throws Exception { ActionForward forward = null; try { Object args[] = {mapping, form, request, response}; forward = (ActionForward) method.invoke(actionInstance, args); } catch (ClassCastException e) { String message = messages.getMessage("dispatch.return", mapping.getPath(), name); log.error(message, e); throw e; } catch (IllegalAccessException e) { String message = messages.getMessage("dispatch.error", mapping.getPath(), name); log.error(message, e); throw e; } catch (InvocationTargetException e) { // Rethrow the target exception if possible so that the // exception handling machinery can deal with it Throwable t = e.getTargetException(); if (t instanceof Exception) { throw ((Exception) t); } else { String message = messages.getMessage("dispatch.error", mapping.getPath(), name); log.error(message, e); throw new ServletException(t); } } // Return the returned ActionForward instance return (forward); } /** * Introspect the current class to identify a method of the specified * name that accepts the same parameter types as the execute * method does. * * @param name Name of the method to be introspected * @throws NoSuchMethodException if no such method can be found */ protected Method getMethod(String name) throws NoSuchMethodException { synchronized (methods) { Method method = (Method) methods.get(name); if (method == null) { method = clazz.getMethod(name, types); methods.put(name, method); } return (method); } } /** *

      Returns the parameter value as influenced by the selected * {@link #flavor} specified for this ActionDispatcher.

      * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * @return The ActionMapping parameter's value */ protected String getParameter(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { String parameter = mapping.getParameter(); if ("".equals(parameter)) { parameter = null; } if ((parameter == null) && (flavor == DEFAULT_FLAVOR)) { // use "method" for DEFAULT_FLAVOR if no parameter was provided return "method"; } if ((parameter == null) && ((flavor == MAPPING_FLAVOR || flavor == DISPATCH_FLAVOR))) { String message = messages.getMessage("dispatch.handler", mapping.getPath()); log.error(message); throw new ServletException(message); } return parameter; } /** * Returns the method name, given a parameter's value. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * @param parameter The ActionMapping parameter's name * @return The method's name. */ protected String getMethodName(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response, String parameter) throws Exception { // "Mapping" flavor, defaults to "method" if (flavor == MAPPING_FLAVOR) { return parameter; } // default behaviour return request.getParameter(parameter); } /** *

      Returns true if the current form's cancel button was * pressed. This method will check if the Globals.CANCEL_KEY * request attribute has been set, which normally occurs if the cancel * button generated by CancelTag was pressed by the user * in the current request. If true, validation performed * by an ActionForm's validate() method * will have been skipped by the controller servlet.

      * * @param request The servlet request we are processing * @see org.apache.struts.taglib.html.CancelTag */ protected boolean isCancelled(HttpServletRequest request) { return (request.getAttribute(Globals.CANCEL_KEY) != null); } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/actions/DispatchAction.java0000644000175000017500000003326610404045222030134 0ustar arnaudarnaud00000000000000/* * $Id: DispatchAction.java 384089 2006-03-08 01:50:52Z niallp $ * * Copyright 2001-2006 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.actions; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.HashMap; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.util.MessageResources; /** *

      An abstract Action that dispatches to a public * method that is named by the request parameter whose name is specified * by the parameter property of the corresponding * ActionMapping. This Action is useful for developers who prefer to * combine many similar actions into a single Action class, in order to * simplify their application design.

      * *

      To configure the use of this action in your * struts-config.xml file, create an entry like this:

      * * * <action path="/saveSubscription" * type="org.apache.struts.actions.DispatchAction" * name="subscriptionForm" * scope="request" * input="/subscription.jsp" * parameter="method"/> * * *

      which will use the value of the request parameter named "method" * to pick the appropriate "execute" method, which must have the same * signature (other than method name) of the standard Action.execute * method. For example, you might have the following three methods in the * same action:

      *
        *
      • public ActionForward delete(ActionMapping mapping, ActionForm form, * HttpServletRequest request, HttpServletResponse response) * throws Exception
      • *
      • public ActionForward insert(ActionMapping mapping, ActionForm form, * HttpServletRequest request, HttpServletResponse response) * throws Exception
      • *
      • public ActionForward update(ActionMapping mapping, ActionForm form, * HttpServletRequest request, HttpServletResponse response) * throws Exception
      • *
      *

      and call one of the methods with a URL like this:

      * * http://localhost:8080/myapp/saveSubscription.do?method=update * * *

      NOTE - All of the other mapping characteristics of * this action must be shared by the various handlers. This places some * constraints over what types of handlers may reasonably be packaged into * the same DispatchAction subclass.

      * *

      NOTE - If the value of the request parameter is empty, * a method named unspecified is called. The default action is * to throw an exception. If the request was cancelled (a html:cancel * button was pressed), the custom handler cancelled will be used instead. * You can also override the getMethodName method to override the action's * default handler selection.

      * * @version $Rev: 384089 $ $Date: 2006-03-08 01:50:52 +0000 (Wed, 08 Mar 2006) $ */ public abstract class DispatchAction extends Action { // ----------------------------------------------------- Instance Variables /** * The Class instance of this DispatchAction class. */ protected Class clazz = this.getClass(); /** * Commons Logging instance. */ protected static Log log = LogFactory.getLog(DispatchAction.class); /** * The message resources for this package. */ protected static MessageResources messages = MessageResources.getMessageResources ("org.apache.struts.actions.LocalStrings"); /** * The set of Method objects we have introspected for this class, * keyed by method name. This collection is populated as different * methods are called, so that introspection needs to occur only * once per method name. */ protected HashMap methods = new HashMap(); /** * The set of argument type classes for the reflected method call. These * are the same for all calls, so calculate them only once. */ protected Class[] types = { ActionMapping.class, ActionForm.class, HttpServletRequest.class, HttpServletResponse.class}; // --------------------------------------------------------- Public Methods /** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it). * Return an ActionForward instance describing where and how * control should be forwarded, or null if the response has * already been completed. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception Exception if an exception occurs */ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { if (isCancelled(request)) { ActionForward af = cancelled(mapping, form, request, response); if (af != null) { return af; } } // Get the parameter. This could be overridden in subclasses. String parameter = getParameter(mapping, form, request, response); // Get the method's name. This could be overridden in subclasses. String name = getMethodName(mapping, form, request, response, parameter); // Prevent recursive calls if ("execute".equals(name) || "perform".equals(name)){ String message = messages.getMessage("dispatch.recursive", mapping.getPath()); log.error(message); throw new ServletException(message); } // Invoke the named method, and return the result return dispatchMethod(mapping, form, request, response, name); } /** * Method which is dispatched to when there is no value for specified * request parameter included in the request. Subclasses of * DispatchAction should override this method if they wish * to provide default behavior different than throwing a ServletException. */ protected ActionForward unspecified( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { String message = messages.getMessage( "dispatch.parameter", mapping.getPath(), mapping.getParameter()); log.error(message); throw new ServletException(message); } /** * Method which is dispatched to when the request is a cancel button submit. * Subclasses of DispatchAction should override this method if * they wish to provide default behavior different than returning null. * @since Struts 1.2.0 */ protected ActionForward cancelled(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { return null; } // ----------------------------------------------------- Protected Methods /** * Dispatch to the specified method. * @since Struts 1.1 */ protected ActionForward dispatchMethod(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response, String name) throws Exception { // Make sure we have a valid method name to call. // This may be null if the user hacks the query string. if (name == null) { return this.unspecified(mapping, form, request, response); } // Identify the method object to be dispatched to Method method = null; try { method = getMethod(name); } catch(NoSuchMethodException e) { String message = messages.getMessage("dispatch.method", mapping.getPath(), name); log.error(message, e); String userMsg = messages.getMessage("dispatch.method.user", mapping.getPath()); throw new NoSuchMethodException(userMsg); } ActionForward forward = null; try { Object args[] = {mapping, form, request, response}; forward = (ActionForward) method.invoke(this, args); } catch(ClassCastException e) { String message = messages.getMessage("dispatch.return", mapping.getPath(), name); log.error(message, e); throw e; } catch(IllegalAccessException e) { String message = messages.getMessage("dispatch.error", mapping.getPath(), name); log.error(message, e); throw e; } catch(InvocationTargetException e) { // Rethrow the target exception if possible so that the // exception handling machinery can deal with it Throwable t = e.getTargetException(); if (t instanceof Exception) { throw ((Exception) t); } else { String message = messages.getMessage("dispatch.error", mapping.getPath(), name); log.error(message, e); throw new ServletException(t); } } // Return the returned ActionForward instance return (forward); } /** *

      Returns the parameter value.

      * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * @return The ActionMapping parameter's value * @throws Exception if the parameter is missing. */ protected String getParameter(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // Identify the request parameter containing the method name String parameter = mapping.getParameter(); if (parameter == null) { String message = messages.getMessage("dispatch.handler", mapping.getPath()); log.error(message); throw new ServletException(message); } return parameter; } /** * Introspect the current class to identify a method of the specified * name that accepts the same parameter types as the execute * method does. * * @param name Name of the method to be introspected * * @exception NoSuchMethodException if no such method can be found */ protected Method getMethod(String name) throws NoSuchMethodException { synchronized(methods) { Method method = (Method) methods.get(name); if (method == null) { method = clazz.getMethod(name, types); methods.put(name, method); } return (method); } } /** * Returns the method name, given a parameter's value. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * @param parameter The ActionMapping parameter's name * * @return The method's name. * @since Struts 1.2.0 */ protected String getMethodName(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response, String parameter) throws Exception { // Identify the method name to be dispatched to. // dispatchMethod() will call unspecified() if name is null return request.getParameter(parameter); } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/actions/DownloadAction.java0000644000175000017500000002241310404045236030141 0ustar arnaudarnaud00000000000000/* * $Id: DownloadAction.java 164530 2005-04-25 03:11:07Z niallp $ * * Copyright 2004-2005 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.actions; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; /** * This is an abstract base class that minimizes the amount of special coding * that needs to be written to download a file. All that is required to use * this class is to extend it and implement the getStreamInfo() * method so that it returns the relevant information for the file (or other * stream) to be downloaded. Optionally, the getBufferSize() * method may be overridden to customize the size of the buffer used to * transfer the file. * * @since Struts 1.2.6 */ public abstract class DownloadAction extends Action { /** * If the getBufferSize() method is not overridden, this is * the buffer size that will be used to transfer the data to the servlet * output stream. */ protected static final int DEFAULT_BUFFER_SIZE = 1024 * 4; /** * Returns the information on the file, or other stream, to be downloaded * by this action. This method must be implemented by an extending class. * * @param mapping The ActionMapping used to select this instance. * @param form The optional ActionForm bean for this request (if any). * @param request The HTTP request we are processing. * @param response The HTTP response we are creating. * * @return The information for the file to be downloaded. * * @throws Exception if an exception occurs. */ protected abstract StreamInfo getStreamInfo(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception; /** * Returns the size of the buffer to be used in transferring the data to * the servlet output stream. This method may be overridden by an extending * class in order to customize the buffer size. * * @return The size of the transfer buffer, in bytes. */ protected int getBufferSize() { return DEFAULT_BUFFER_SIZE; } /** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it). * Return an ActionForward instance describing where and how * control should be forwarded, or null if the response has * already been completed. * * @param mapping The ActionMapping used to select this instance. * @param form The optional ActionForm bean for this request (if any). * @param request The HTTP request we are processing. * @param response The HTTP response we are creating. * * @throws Exception if an exception occurs. */ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { StreamInfo info = getStreamInfo(mapping, form, request, response); String contentType = info.getContentType(); InputStream stream = info.getInputStream(); try { response.setContentType(contentType); copy(stream, response.getOutputStream()); } finally { if (stream != null) { stream.close(); } } // Tell Struts that we are done with the response. return null; } /** * Copy bytes from an InputStream to an * OutputStream. * * @param input The InputStream to read from. * @param output The OutputStream to write to. * * @return the number of bytes copied * * @throws IOException In case of an I/O problem */ public int copy(InputStream input, OutputStream output) throws IOException { byte[] buffer = new byte[getBufferSize()]; int count = 0; int n = 0; while (-1 != (n = input.read(buffer))) { output.write(buffer, 0, n); count += n; } return count; } /** * The information on a file, or other stream, to be downloaded by the * DownloadAction. */ public static interface StreamInfo { /** * Returns the content type of the stream to be downloaded. * * @return The content type of the stream. */ public abstract String getContentType(); /** * Returns an input stream on the content to be downloaded. This stream * will be closed by the DownloadAction. * * @return The input stream for the content to be downloaded. */ public abstract InputStream getInputStream() throws IOException; } /** * A concrete implementation of the StreamInfo interface which * simplifies the downloading of a file from the disk. */ public static class FileStreamInfo implements StreamInfo { /** * The content type for this stream. */ private String contentType; /** * The file to be downloaded. */ private File file; /** * Constructs an instance of this class, based on the supplied * parameters. * * @param contentType The content type of the file. * @param file The file to be downloaded. */ public FileStreamInfo(String contentType, File file) { this.contentType = contentType; this.file = file; } /** * Returns the content type of the stream to be downloaded. * * @return The content type of the stream. */ public String getContentType() { return this.contentType; } /** * Returns an input stream on the file to be downloaded. This stream * will be closed by the DownloadAction. * * @return The input stream for the file to be downloaded. */ public InputStream getInputStream() throws IOException { FileInputStream fis = new FileInputStream(file); BufferedInputStream bis = new BufferedInputStream(fis); return bis; } } /** * A concrete implementation of the StreamInfo interface which * simplifies the downloading of a web application resource. */ public static class ResourceStreamInfo implements StreamInfo { /** * The content type for this stream. */ private String contentType; /** * The servlet context for the resource to be downloaded. */ private ServletContext context; /** * The path to the resource to be downloaded. */ private String path; /** * Constructs an instance of this class, based on the supplied * parameters. * * @param contentType The content type of the file. * @param context The servlet context for the resource. * @param path The path to the resource to be downloaded. */ public ResourceStreamInfo(String contentType, ServletContext context, String path) { this.contentType = contentType; this.context = context; this.path = path; } /** * Returns the content type of the stream to be downloaded. * * @return The content type of the stream. */ public String getContentType() { return this.contentType; } /** * Returns an input stream on the resource to be downloaded. This stream * will be closed by the DownloadAction. * * @return The input stream for the resource to be downloaded. */ public InputStream getInputStream() throws IOException { return context.getResourceAsStream(path); } } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/actions/EventActionDispatcher.java0000644000175000017500000002042510404045222031456 0ustar arnaudarnaud00000000000000/* * $Id: EventActionDispatcher.java 384134 2006-03-08 06:43:55Z niallp $ * * Copyright 2006 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.actions; import java.util.StringTokenizer; import java.lang.reflect.Method; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionForward; /** *

      An Action helper class that dispatches to to one of the public methods * that are named in the parameter attribute of the corresponding * ActionMapping and matches a submission parameter. This is useful for * developers who prefer to use many submit buttons, images, or submit links * on a single form and whose related actions exist in a single Action class.

      * *

      The method(s) in the associated Action must have the same * signature (other than method name) of the standard Action.execute method.

      * *

      To configure the use of this action in your * struts-config.xml file, create an entry like this:

      * *
      
       *   <action path="/saveSubscription"
       *           type="org.example.SubscriptionAction"
       *           name="subscriptionForm"
       *          scope="request"
       *          input="/subscription.jsp"
       *      parameter="save,back,recalc=recalculate,default=save"/>
       * 
      * *

      where parameter contains three possible methods and one * default method if nothing matches (such as the user pressing the enter key).

      * *

      For utility purposes, you can use the key=value notation to * alias methods so that they are exposed as different form element names, in the * event of a naming conflict or otherwise. In this example, the recalc * button (via a request parameter) will invoke the recalculate * method. The security-minded person may find this feature valuable to * obfuscate and not expose the methods.

      * *

      The default key is purely optional. If this is not specified * and no parameters match the list of method keys, null is * returned which means the unspecified method will be invoked.

      * *

      The order of the parameters are guaranteed to be iterated in the order * specified. If multiple buttons were accidently submitted, the first match in * the list will be dispatched.

      * *

      To implement this dispatch behaviour in an Action, * class create your custom Action as follows, along with the methods you require * (and optionally "cancelled" and "unspecified" methods):

      *

       *   public class MyCustomAction extends Action {
       *
       *       protected ActionDispatcher dispatcher = new EventActionDispatcher(this);
       *
       *       public ActionForward execute(ActionMapping mapping,
       *                                    ActionForm form,
       *                                    HttpServletRequest request,
       *                                    HttpServletResponse response)
       *                           throws Exception {
       *           return dispatcher.execute(mapping, form, request, response);
       *       }
       *   }
       * 
      *

      * * @since Struts 1.2.9 */ public class EventActionDispatcher extends ActionDispatcher { /** * Commons Logging instance. */ private static final Log LOG = LogFactory.getLog(EventActionDispatcher.class); /** * The method key, if present, to use if other specified method keys * do not match a request parameter. */ private static final String DEFAULT_METHOD_KEY = "default"; /** * Constructs a new object for the specified action. * @param action the action */ public EventActionDispatcher(Action action) { // N.B. MAPPING_FLAVOR causes the getParameter() method // in ActionDispatcher to throw an exception if the // parameter is missing super(action, ActionDispatcher.MAPPING_FLAVOR); } /** *

      Dispatches to the target class' unspecified method, if * present, otherwise throws a ServletException. Classes utilizing * EventActionDispatcher should provide an unspecified * method if they wish to provide behavior different than throwing a * ServletException.

      * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The non-HTTP request we are processing * @param response The non-HTTP response we are creating * @return The forward to which control should be transferred, or * null if the response has been completed. * @throws Exception if the application business logic throws an * exception. */ protected ActionForward unspecified(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // Identify if there is an "unspecified" method to be dispatched to String name = "unspecified"; Method method = null; try { method = getMethod(name); } catch (NoSuchMethodException e) { String message = messages.getMessage("event.parameter", mapping.getPath()); LOG.error(message + " " + mapping.getParameter()); throw new ServletException(message); } return dispatchMethod(mapping, form, request, response, name, method); } /** * Returns the method name, given a parameter's value. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if * any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * @param parameter The ActionMapping parameter's name * @return The method's name. * @throws Exception if an error occurs. */ protected String getMethodName(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response, String parameter) throws Exception { StringTokenizer st = new StringTokenizer(parameter, ","); String defaultMethodName = null; while (st.hasMoreTokens()) { String methodKey = st.nextToken().trim(); String methodName = methodKey; // The key can either be a direct method name or an alias // to a method as indicated by a "key=value" signature int equals = methodKey.indexOf('='); if (equals > -1) { methodName = methodKey.substring(equals + 1).trim(); methodKey = methodKey.substring(0, equals).trim(); } // Set the default if it passes by if (methodKey.equals(DEFAULT_METHOD_KEY)) { defaultMethodName = methodName; } // If the method key exists as a standalone parameter or with // the image suffixes (.x/.y), the method name has been found. if ((request.getParameter(methodKey) != null) || (request.getParameter(methodKey + ".x") != null)) { return methodName; } } return defaultMethodName; } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/actions/EventDispatchAction.java0000644000175000017500000001533710404045204031135 0ustar arnaudarnaud00000000000000/* * $Id: EventDispatchAction.java 384134 2006-03-08 06:43:55Z niallp $ * * Copyright 2006 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.actions; import java.util.StringTokenizer; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionForward; /** *

      An Action that dispatches to to one of the public methods * that are named in the parameter attribute of the corresponding * ActionMapping and matches a submission parameter. This is useful for * developers who prefer to use many submit buttons, images, or submit links * on a single form and whose related actions exist in a single Action class.

      * *

      The method(s) must have the same signature (other than method name) of the * standard Action.execute method.

      * *

      To configure the use of this action in your * struts-config.xml file, create an entry like this:

      * *
      
       *   <action path="/saveSubscription"
       *           type="org.example.SubscriptionAction"
       *           name="subscriptionForm"
       *          scope="request"
       *          input="/subscription.jsp"
       *      parameter="save,back,recalc=recalculate,default=save"/>
       * 
      * *

      where parameter contains three possible methods and one * default method if nothing matches (such as the user pressing the enter key).

      * *

      For utility purposes, you can use the key=value notation to * alias methods so that they are exposed as different form element names, in the * event of a naming conflict or otherwise. In this example, the recalc * button (via a request parameter) will invoke the recalculate * method. The security-minded person may find this feature valuable to * obfuscate and not expose the methods.

      * *

      The default key is purely optional. If this is not specified * and no parameters match the list of method keys, null is * returned which means the unspecified method will be invoked.

      * *

      The order of the parameters are guaranteed to be iterated in the order * specified. If multiple buttons were accidently submitted, the first match in * the list will be dispatched.

      * * @since Struts 1.2.9 */ public class EventDispatchAction extends DispatchAction { /** * Commons Logging instance. */ private static final Log LOG = LogFactory.getLog(EventDispatchAction.class); /** * The method key, if present, to use if other specified method keys * do not match a request parameter. */ private static final String DEFAULT_METHOD_KEY = "default"; // --------------------------------------------------------- Protected Methods /** * Method which is dispatched to when there is no value for specified * request parameter included in the request. Subclasses of * DispatchAction should override this method if they wish to * provide default behavior different than throwing a ServletException. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The non-HTTP request we are processing * @param response The non-HTTP response we are creating * @return The forward to which control should be transferred, or * null if the response has been completed. * @throws Exception if the application business logic throws an * exception. */ protected ActionForward unspecified(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { String message = messages.getMessage("event.parameter", mapping.getPath(), mapping.getParameter()); LOG.error(message + " " + mapping.getParameter()); throw new ServletException(message); } /** * Returns the method name, given a parameter's value. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if * any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * @param parameter The ActionMapping parameter's name * @return The method's name. * @throws Exception if an error occurs. */ protected String getMethodName(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response, String parameter) throws Exception { StringTokenizer st = new StringTokenizer(parameter, ","); String defaultMethodName = null; while (st.hasMoreTokens()) { String methodKey = st.nextToken().trim(); String methodName = methodKey; // The key can either be a direct method name or an alias // to a method as indicated by a "key=value" signature int equals = methodKey.indexOf('='); if (equals > -1) { methodName = methodKey.substring(equals + 1).trim(); methodKey = methodKey.substring(0, equals).trim(); } // Set the default if it passes by if (methodKey.equals(DEFAULT_METHOD_KEY)) { defaultMethodName = methodName; } // If the method key exists as a standalone parameter or with // the image suffixes (.x/.y), the method name has been found. if ((request.getParameter(methodKey) != null) || (request.getParameter(methodKey + ".x") != null)) { return methodName; } } return defaultMethodName; } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/actions/ForwardAction.java0000644000175000017500000000753410404045220027776 0ustar arnaudarnaud00000000000000/* * $Id: ForwardAction.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 2001-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.actions; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.util.MessageResources; /** *

      An Action that forwards to the context-relative * URI specified by the parameter property of our associated * ActionMapping. This can be used to integrate Struts with * other business logic components that are implemented as servlets (or JSP * pages), but still take advantage of the Struts controller servlet's * functionality (such as processing of form beans).

      * *

      To configure the use of this Action in your * struts-config.xml file, create an entry like this:

      * * * <action path="/saveSubscription" * type="org.apache.struts.actions.ForwardAction" * name="subscriptionForm" * scope="request" * input="/subscription.jsp" * parameter="/path/to/processing/servlet"/> * * *

      which will forward control to the context-relative URI specified by the * parameter attribute.

      * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class ForwardAction extends Action { // ----------------------------------------------------- Instance Variables /** * The message resources for this package. */ protected static MessageResources messages = MessageResources.getMessageResources ("org.apache.struts.actions.LocalStrings"); // --------------------------------------------------------- Public Methods /** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it). * Return an ActionForward instance describing where and how * control should be forwarded, or null if the response has * already been completed. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception Exception if an error occurs */ public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // Create a RequestDispatcher the corresponding resource String path = mapping.getParameter(); if (path == null) { throw new ServletException(messages.getMessage("forward.path")); } // Let the controller handle the request ActionForward retVal = new ActionForward(path); retVal.setContextRelative(true); return retVal; } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/actions/IncludeAction.java0000644000175000017500000001056210404045206027754 0ustar arnaudarnaud00000000000000/* * $Id: IncludeAction.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 2001-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.actions; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.upload.MultipartRequestWrapper; import org.apache.struts.util.MessageResources; /** *

      An Action that includes the context-relative * URI specified by the parameter property of our associated * ActionMapping. This can be used to integrate Struts with * other business logic components that are implemented as servlets (or JSP * pages), but still take advantage of the Struts controller servlet's * functionality (such as processing of form beans).

      * *

      To configure the use of this Action in your * struts-config.xml file, create an entry like this:

      * * * <action path="/saveSubscription" * type="org.apache.struts.actions.IncludeAction" * name="subscriptionForm" * scope="request" * input="/subscription.jsp" * parameter="/path/to/processing/servlet"> * * *

      which will include the context-relative URI specified by the * parameter attribute.

      * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class IncludeAction extends Action { // ----------------------------------------------------- Instance Variables /** * The message resources for this package. */ protected static MessageResources messages = MessageResources.getMessageResources ("org.apache.struts.actions.LocalStrings"); // --------------------------------------------------------- Public Methods /** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it). * Return an ActionForward instance describing where and how * control should be forwarded, or null if the response has * already been completed. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @exception Exception if an error occurs */ public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // Create a RequestDispatcher the corresponding resource String path = mapping.getParameter(); if (path == null) { throw new ServletException(messages.getMessage("include.path")); } RequestDispatcher rd = servlet.getServletContext().getRequestDispatcher(path); if (rd == null) { throw new ServletException(messages.getMessage("include.rd", path)); } // Unwrap the multipart request, if there is one. if (request instanceof MultipartRequestWrapper) { request = ((MultipartRequestWrapper) request).getRequest(); } // Forward control to the specified resource rd.include(request, response); // Tell the controller servlet that the response has been created return (null); } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/actions/LocalStrings.properties0000644000175000017500000000261310404045210031103 0ustar arnaudarnaud00000000000000dispatch.error=Dispatch[{0}] to method '{1}' returned an exception dispatch.handler=DispatchMapping[{0}] does not define a handler property dispatch.recursive=Do not use 'execute' or 'perform' with DispatchAction. dispatch.lookup=Action[{0}] does not contain handler for resource '{1}' dispatch.mapping=ActionMapping[{0}] is not of type DispatchMapping dispatch.method=Action[{0}] does not contain method named '{1}' dispatch.method.user=Action[{0}] does not contain specified method (check logs) dispatch.parameter=Request[{0}] does not contain handler parameter named '{1}'. This may be caused by whitespace in the label text. event.parameter=Request[{0}] does not contain handler parameter. dispatch.return=Action[{0}] invalid return type for method '{1}' dispatch.resource=Action[{0}] missing resource in key method map forward.path=No context-relative URI specified via the 'parameter' attribute forward.rd=Cannot create request dispatcher for path '{0}' include.path=No context-relative URI specified via the 'parameter' attribute include.rd=Cannot create request dispatcher for path '{0}' switch.prefix=Invalid module prefix '{0}' was specified switch.required=Switch requires both 'prefix' and 'page' request parameters success.required=SuccessAction could not find an ActionForward named 'success' for path '{0}' mapping.parameter=ActionMapping[{0}] does not define a 'parameter' attribute libstruts1.2-java-1.2.9/src/share/org/apache/struts/actions/LocalStrings_ja.properties0000644000175000017500000000520110404045246031562 0ustar arnaudarnaud00000000000000dispatch.error=\u30E1\u30BD\u30C3\u30C9 {1} \u3078\u306E\u30C7\u30A3\u30B9\u30D1\u30C3\u30C1[{0}]\u3067\u4F8B\u5916\u304C\u767A\u751F\u3057\u307E\u3057\u305F dispatch.handler=DispatchMapping[{0}]\u3067\u30CF\u30F3\u30C9\u30E9\u30D7\u30ED\u30D1\u30C6\u30A3\u304C\u5B9A\u7FA9\u3055\u308C\u3066\u3044\u307E\u305B\u3093 dispatch.mapping=ActionMapping[{0}]\u304CDispatchMapping\u578B\u306B\u306A\u3063\u3066\u3044\u307E\u305B\u3093 dispatch.method=Action[{0}]\u306B {1} \u3068\u3044\u3046\u540D\u524D\u306E\u30E1\u30BD\u30C3\u30C9\u306F\u3042\u308A\u307E\u305B\u3093 dispatch.parameter=\u30ea\u30af\u30a8\u30b9\u30c8[{0}]\u306b {1} \u3068\u3044\u3046\u540d\u524d\u306e\u30cf\u30f3\u30c9\u30e9\u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u3042\u308a\u307e\u305b\u3093 dispatch.return=Action[{0}]\u3067\u30E1\u30BD\u30C3\u30C9 {1} \u306E\u8FD4\u5024\u306E\u578B\u3068\u3057\u3066\u306F\u6B63\u3057\u304F\u3042\u308A\u307E\u305B\u3093 forward.path='parameter'\u5c5e\u6027\u3067\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u76f8\u5bfeURI\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093 forward.rd=\u30d1\u30b9 {0} \u306e\u30ea\u30af\u30a8\u30b9\u30c8\u30c7\u30a3\u30b9\u30d1\u30c3\u30c1\u30e3\u304c\u751f\u6210\u3067\u304d\u307e\u305b\u3093 include.path='parameter'\u5c5e\u6027\u3067\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u76f8\u5bfeURI\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093 include.rd=\u30d1\u30b9 {0} \u306e\u30ea\u30af\u30a8\u30b9\u30c8\u30c7\u30a3\u30b9\u30d1\u30c3\u30c1\u30e3\u304c\u751f\u6210\u3067\u304d\u307e\u305b\u3093 switch.prefix=\u6307\u5b9a\u3057\u305f\u30e2\u30b8\u30e5\u30fc\u30eb\u30d7\u30ec\u30d5\u30a3\u30af\u30b9 {0} \u306f\u6b63\u3057\u304f\u3042\u308a\u307e\u305b\u3093 switch.required=\u30b9\u30a4\u30c3\u30c1\u3067\u306f\u30ea\u30af\u30a8\u30b9\u30c8\u30d1\u30e9\u30e1\u30fc\u30bf\u3068\u3057\u3066'prefix'\u3068 'page'\u306e\u4e21\u65b9\u304c\u5fc5\u8981\u3067\u3059 dispatch.recursive=DispatchAction\u3067execute\u3084perform\u30E1\u30BD\u30C3\u30C9\u3092\u4F7F\u3063\u3066\u306F\u3044\u3051\u307E\u305B\u3093 dispatch.lookup=Action[{0}]\u306B {1} \u3068\u3044\u3046\u540D\u524D\u306E\u30E1\u30BD\u30C3\u30C9\u306F\u3042\u308A\u307E\u305B\u3093 dispatch.resource=Action[{0}]\u3067\u30AD\u30FC\u30E1\u30BD\u30C3\u30C9\u30DE\u30C3\u30D7\u306E\u4E2D\u306B\u30EA\u30BD\u30FC\u30B9 {1} \u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093 success.required=\u30D1\u30B9{0}\u306ESuccessAction\u3067sucess\u3068\u3044\u3046\u540D\u524D\u306EActionForward\u304C\u5B9A\u7FA9\u3055\u308C\u3066\u3044\u307E\u305B\u3093 mapping.parameter=ActionMapping[{0}]\u3067parameter\u5C5E\u6027\u304C\u5B9A\u7FA9\u3055\u308C\u3066\u3044\u307E\u305B\u3093 libstruts1.2-java-1.2.9/src/share/org/apache/struts/actions/LocaleAction.java0000644000175000017500000001014110404045236027564 0ustar arnaudarnaud00000000000000/* * $Id: LocaleAction.java 168243 2005-05-05 02:35:30Z niallp $ * * Copyright 2000-2005 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.actions; import java.util.Locale; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.Globals; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; /** * Implementation of Action that changes the user's * {@link java.util.Locale} and forwards to a page, based on request level * parameters that are set (language, country, & page). * */ public final class LocaleAction extends Action { /** * Commons Logging instance. */ private Log log = LogFactory.getFactory().getInstance(this.getClass().getName()); /** *

      * Change the user's {@link java.util.Locale} based on {@link ActionForm} * properties. *

      *

      * This Action looks for language and * country properties on the given form, constructs an * appropriate Locale object, and sets it as the Struts Locale for this * user's session. * Any ActionForm, including a * {@link org.apache.struts.action.DynaActionForm}, may be used. *

      *

      * If a page property is also provided, then after * setting the Locale, control is forwarded to that URI path. * Otherwise, control is forwarded to "success". *

      * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @return Action to forward to * @exception java.lang.Exception if an input/output error or servlet exception occurs */ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // Extract attributes we will need HttpSession session = request.getSession(); Locale locale = getLocale(request); String language = null; String country = null; String page = null; try { language = (String) PropertyUtils.getSimpleProperty(form, "language"); country = (String) PropertyUtils.getSimpleProperty(form, "country"); page = (String) PropertyUtils.getSimpleProperty(form, "page"); } catch (Exception e) { log.error(e.getMessage(), e); } boolean isLanguage = (language != null && language.length() > 0); boolean isCountry = (country != null && country.length() > 0); if ((isLanguage) && (isCountry)) { locale = new java.util.Locale(language, country); } else if (isLanguage) { locale = new java.util.Locale(language, ""); } session.setAttribute(Globals.LOCALE_KEY, locale); if (null==page) return mapping.findForward("success"); else return new ActionForward(page); } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/actions/LookupDispatchAction.java0000644000175000017500000002364510404045210031323 0ustar arnaudarnaud00000000000000/* * $Id: LookupDispatchAction.java 384089 2006-03-08 01:50:52Z niallp $ * * Copyright 2001-2006 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.actions; import java.util.HashMap; import java.util.Iterator; import java.util.Locale; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.Globals; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.config.MessageResourcesConfig; import org.apache.struts.config.ModuleConfig; import org.apache.struts.util.MessageResources; /** *

      * An abstract Action that dispatches to the subclass mapped * execute method. This is useful in * cases where an HTML form has multiple submit buttons with the same name. The * button name is specified by the parameter property of the * corresponding ActionMapping. To configure the use of this action in your * struts-config.xml file, create an entry like this:

       *   <action path="/test"
       *           type="org.example.MyAction"
       *           name="MyForm"
       *          scope="request"
       *          input="/test.jsp"
       *      parameter="method"/>
       * 

      * * which will use the value of the request parameter named "method" to locate * the corresponding key in ApplicationResources. For example, you might have * the following ApplicationResources.properties:

       *    button.add=Add Record
       *    button.delete=Delete Record
       *  

      * * And your JSP would have the following format for submit buttons:

       *   <html:form action="/test">
       *    <html:submit property="method">
       *      <bean:message key="button.add"/>
       *    </html:submit>
       *    <html:submit property="method">
       *      <bean:message key="button.delete"/>
       *    </html:submit>
       *  </html:form>
       *  

      * * Your subclass must implement both getKeyMethodMap and the * methods defined in the map. An example of such implementations are:

      *
       *  protected Map getKeyMethodMap() {
       *      Map map = new HashMap();
       *      map.put("button.add", "add");
       *      map.put("button.delete", "delete");
       *      return map;
       *  }
       *
       *  public ActionForward add(ActionMapping mapping,
       *          ActionForm form,
       *          HttpServletRequest request,
       *          HttpServletResponse response)
       *          throws IOException, ServletException {
       *      // do add
       *      return mapping.findForward("success");
       *  }
       *
       *  public ActionForward delete(ActionMapping mapping,
       *          ActionForm form,
       *          HttpServletRequest request,
       *          HttpServletResponse response)
       *          throws IOException, ServletException {
       *      // do delete
       *      return mapping.findForward("success");
       *  }
       *  

      * * Notes - If duplicate values exist for the keys returned by * getKeys, only the first one found will be returned. If no corresponding key * is found then an exception will be thrown. You can override the * method unspecified to provide a custom handler. If the submit * was cancelled (a html:cancel button was pressed), the custom * handler cancelled will be used instead. * */ public abstract class LookupDispatchAction extends DispatchAction { /** * Commons Logging instance. */ private static final Log LOG = LogFactory.getLog(LookupDispatchAction.class); /** * Reverse lookup map from resource value to resource key. */ protected Map localeMap = new HashMap(); /** * Resource key to method name lookup. */ protected Map keyMethodMap = null; // ---------------------------------------------------------- Public Methods /** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it). * Return an ActionForward instance describing where and how * control should be forwarded, or null if the response has * already been completed. * * @param mapping The ActionMapping used to select this instance * @param request The HTTP request we are processing * @param response The HTTP response we are creating * @param form The optional ActionForm bean for this request (if any) * @return Describes where and how control should be forwarded. * @exception Exception if an error occurs */ public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { return super.execute(mapping, form, request, response); } /** * This is the first time this Locale is used so build the reverse lookup Map. * Search for message keys in all configured MessageResources for * the current module. */ private Map initLookupMap(HttpServletRequest request, Locale userLocale) { Map lookupMap = new HashMap(); this.keyMethodMap = this.getKeyMethodMap(); ModuleConfig moduleConfig = (ModuleConfig) request.getAttribute(Globals.MODULE_KEY); MessageResourcesConfig[] mrc = moduleConfig.findMessageResourcesConfigs(); // Look through all module's MessageResources for (int i = 0; i < mrc.length; i++) { MessageResources resources = this.getResources(request, mrc[i].getKey()); // Look for key in MessageResources Iterator iter = this.keyMethodMap.keySet().iterator(); while (iter.hasNext()) { String key = (String) iter.next(); String text = resources.getMessage(userLocale, key); // Found key and haven't added to Map yet, so add the text if ((text != null) && !lookupMap.containsKey(text)) { lookupMap.put(text, key); } } } return lookupMap; } /** * Provides the mapping from resource key to method name. * * @return Resource key / method name map. */ protected abstract Map getKeyMethodMap(); /** * Lookup the method name corresponding to the client request's locale. * * @param request The HTTP request we are processing * @param keyName The parameter name to use as the properties key * @param mapping The ActionMapping used to select this instance * * @return The method's localized name. * @throws ServletException if keyName cannot be resolved * @since Struts 1.2.0 */ protected String getLookupMapName( HttpServletRequest request, String keyName, ActionMapping mapping) throws ServletException { // Based on this request's Locale get the lookupMap Map lookupMap = null; synchronized(localeMap) { Locale userLocale = this.getLocale(request); lookupMap = (Map) this.localeMap.get(userLocale); if (lookupMap == null) { lookupMap = this.initLookupMap(request, userLocale); this.localeMap.put(userLocale, lookupMap); } } // Find the key for the resource String key = (String) lookupMap.get(keyName); if (key == null) { String message = messages.getMessage("dispatch.resource", mapping.getPath()); LOG.error(message + " '" + keyName + "'"); throw new ServletException(message); } // Find the method name String methodName = (String) keyMethodMap.get(key); if (methodName == null) { String message = messages.getMessage( "dispatch.lookup", mapping.getPath(), key); throw new ServletException(message); } return methodName; } /** * Returns the method name, given a parameter's value. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * @param parameter The ActionMapping parameter's name * * @return The method's name. * @since Struts 1.2.0 */ protected String getMethodName( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response, String parameter) throws Exception { // Identify the method name to be dispatched to. // dispatchMethod() will call unspecified() if name is null String keyName = request.getParameter(parameter); if (keyName == null || keyName.length() == 0) { return null; } String methodName = getLookupMapName(request, keyName, mapping); return methodName; } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/actions/MappingDispatchAction.java0000644000175000017500000002104210404045204031435 0ustar arnaudarnaud00000000000000/* * $Id: MappingDispatchAction.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 2003,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.actions; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; /** *

      An abstract Action that dispatches to a public * method that is named by the parameter attribute of * the corresponding ActionMapping. This is useful for developers who prefer * to combine many related actions into a single Action class.

      * *

      To configure the use of this action in your * struts-config.xml file, create an entry like this:

      * *
      
       *   <action path="/saveSubscription"
       *           type="org.example.SubscriptionAction"
       *           name="subscriptionForm"
       *          scope="request"
       *          input="/subscription.jsp"
       *      parameter="method"/>
       * 
      * *

      where 'method' is the name of a method in your subclass of * MappingDispatchAction that has the same signature (other than method * name) of the standard Action.execute method. For example, you might combine * the methods for managing a subscription into a single * MappingDispatchAction class using the following methods:

      *
        *
      • public ActionForward create(ActionMapping mapping, ActionForm form, * HttpServletRequest request, HttpServletResponse response) * throws Exception
      • *
      • public ActionForward edit(ActionMapping mapping, ActionForm form, * HttpServletRequest request, HttpServletResponse response) * throws Exception
      • *
      • public ActionForward save(ActionMapping mapping, ActionForm form, * HttpServletRequest request, HttpServletResponse response) * throws Exception
      • *
      • public ActionForward delete(ActionMapping mapping, ActionForm form, * HttpServletRequest request, HttpServletResponse response) * throws Exception
      • *
      • public ActionForward list(ActionMapping mapping, ActionForm form, * HttpServletRequest request, HttpServletResponse response) * throws Exception
      • *
      *

      for which you would create corresponding <action> configurations * that reference this class:

      * *
      
       *  <action path="/createSubscription" 
       *          type="org.example.SubscriptionAction"
       *          parameter="create">
       *      <forward name="success" path="/editSubscription.jsp"/>
       *  </action>
       * 
       *  <action path="/editSubscription" 
       *          type="org.example.SubscriptionAction"
       *          parameter="edit">
       *      <forward name="success" path="/editSubscription.jsp"/>
       *  </action>
       *
       *  <action path="/saveSubscription" 
       *          type="org.example.SubscriptionAction" 
       *          parameter="save"
       *          name="subscriptionForm" 
       *          validate="true" 
       *          input="/editSubscription.jsp" 
       *          scope="request">
       *      <forward name="success" path="/savedSubscription.jsp"/>
       *  </action>
       *
       *  <action path="/deleteSubscription" 
       *          type="org.example.SubscriptionAction"
       *          name="subscriptionForm"
       *          scope="request"
       *          input="/subscription.jsp"
       *          parameter="delete">
       *      <forward name="success" path="/deletedSubscription.jsp"/>
       *  </action>
       *
       *  <action path="/listSubscriptions" 
       *          type="org.example.SubscriptionAction"
       *          parameter="list">
       *      <forward name="success" path="/subscriptionList.jsp"/>
       *  </action>
       * 
      * *

      NOTE - Unlike DispatchAction, mapping characteristics * may differ between the various handlers, so you can combine actions in the * same class that, for example, differ in their use of forms or validation. * Also, a request parameter, which would be visible to the application user, * is not required to enable selection of the handler method. *

      * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ * @since Struts 1.2 */ public class MappingDispatchAction extends DispatchAction { // -------------------------------------------------------- Class Variables /** * Commons Logging instance. */ private static Log log = LogFactory.getLog(MappingDispatchAction.class); // --------------------------------------------------------- Public Methods /** * Process the specified HTTP request, and create the corresponding HTTP * response (or forward to another web component that will create it). * Return an ActionForward instance describing where and how * control should be forwarded, or null if the response has * already been completed. * * This method dispatches the request to other methods of * MappingDispatchAction using the 'parameter' attribute of * ActionMapping and Java Introspection. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @return Return an ActionForward instance describing where * and how control should be forwarded, or null if * the response has already been completed. * * @exception Exception if an exception occurs */ public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // Use the overridden getMethodName. return super.execute(mapping, form, request, response); } /** * Method which is dispatched to when there is no value for the * parameter in the ActionMapping. Subclasses of * MappingDispatchAction should override this method * if they wish to provide default behavior different than throwing a * ServletException. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * * @return Return an ActionForward instance describing where * and how control should be forwarded, or null if * the response has already been completed. * * @exception Exception if an exception occurs */ protected ActionForward unspecified( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { String message = messages.getMessage("mapping.parameter", mapping.getPath()); log.error(message); throw new ServletException(message); } /** * Returns the method name, given a parameter's value. * * @param mapping The ActionMapping used to select this instance * @param form The optional ActionForm bean for this request (if any) * @param request The HTTP request we are processing * @param response The HTTP response we are creating * @param parameter The ActionMapping parameter's name * * @return The method's name. * @since Struts 1.2.0 */ protected String getMethodName( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response, String parameter) throws Exception { // Return the unresolved mapping parameter. return parameter; } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/actions/RedeployableActionServlet.java0000644000175000017500000000477610404045240032355 0ustar arnaudarnaud00000000000000package org.apache.struts.actions; import javax.servlet.ServletException; import org.apache.struts.Globals; import org.apache.struts.action.ActionServlet; import org.apache.struts.action.RequestProcessor; import org.apache.struts.config.ModuleConfig; import org.apache.struts.tiles.DefinitionsFactory; import org.apache.struts.tiles.DefinitionsFactoryException; import org.apache.struts.tiles.TilesRequestProcessor; /** *

      * WebLogic (at least v6 and v7) attempts to serialize the TilesRequestProcessor * when re-deploying the Webapp in development mode. The TilesRequestProcessor * is not serializable, and loses the Tiles definitions. This results in * NullPointerException and/or NotSerializableException when using the app after * automatic redeploy. *

      *

      * This bug report proposes a workaround for this problem, in the hope it will * help others and maybe motivate an actual fix. *

      *

      * The attached class extends the Struts Action servlet and fixes the problem by * reloading the Tiles definitions when they have disappeared. *

      *

      * For background discussion see * http://issues.apache.org/bugzilla/show_bug.cgi?id=26322 *

      * @version $Rev: 54954 $ $Date: 2004-10-17 07:40:12 +0100 (Sun, 17 Oct 2004) $ * @since 1.2.1 */ public class RedeployableActionServlet extends ActionServlet { private TilesRequestProcessor tileProcessor; protected synchronized RequestProcessor getRequestProcessor(ModuleConfig config) throws ServletException { if (tileProcessor != null) { TilesRequestProcessor processor = (TilesRequestProcessor) super.getRequestProcessor(config); return processor; } // reset the request processor String requestProcessorKey = Globals.REQUEST_PROCESSOR_KEY + config.getPrefix(); getServletContext().removeAttribute(requestProcessorKey); // create a new request processor instance TilesRequestProcessor processor = (TilesRequestProcessor) super.getRequestProcessor(config); tileProcessor = processor; try { // reload Tiles defs DefinitionsFactory factory = processor.getDefinitionsFactory(); factory.init(factory.getConfig(), getServletContext()); // System.out.println("reloaded tiles-definitions"); } catch (DefinitionsFactoryException e) { e.printStackTrace(); } return processor; } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/actions/SwitchAction.java0000644000175000017500000000754110404045234027636 0ustar arnaudarnaud00000000000000/* * $Id: SwitchAction.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 2002-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.actions; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.Globals; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.util.MessageResources; import org.apache.struts.util.ModuleUtils; /** *

      A standard Action that switches to a new module * and then forwards control to a URI (specified in a number of possible ways) * within the new module.

      * *

      Valid request parameters for this Action are:

      *
        *
      • page - Module-relative URI (beginning with "/") * to which control should be forwarded after switching.
      • *
      • prefix - The module prefix (beginning with "/") * of the module to which control should be switched. Use a * zero-length string for the default module. The * appropriate ModuleConfig object will be stored as a * request attribute, so any subsequent logic will assume the new * module.
      • *
      * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ * @since Struts 1.1 */ public class SwitchAction extends Action { // ----------------------------------------------------- Instance Variables /** * Commons Logging instance. */ protected static Log log = LogFactory.getLog(SwitchAction.class); /** * The message resources for this package. */ protected static MessageResources messages = MessageResources.getMessageResources ("org.apache.struts.actions.LocalStrings"); // --------------------------------------------------------- Public Methods // See superclass for JavaDoc public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // Identify the request parameters controlling our actions String page = request.getParameter("page"); String prefix = request.getParameter("prefix"); if ((page == null) || (prefix == null)) { String message = messages.getMessage("switch.required"); log.error(message); throw new ServletException(message); } // Switch to the requested module ModuleUtils.getInstance().selectModule(prefix, request, getServlet().getServletContext()); if (request.getAttribute(Globals.MODULE_KEY) == null) { String message = messages.getMessage("switch.prefix", prefix); log.error(message); throw new ServletException(message); } // Forward control to the specified module-relative URI return (new ActionForward(page)); } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/actions/package.html0000644000175000017500000000150310404045236026647 0ustar arnaudarnaud00000000000000

      The actions package provides special adapters between the incoming HTTP request and the corresponding business logic.



      Action Package UML

      Package Specification

      ##### FILL IN ANY SPECS NEEDED BY JAVA COMPATIBILITY KIT #####

      Related Documentation

      For overviews, tutorials, examples, guides, and tool documentation, please see: libstruts1.2-java-1.2.9/src/share/org/apache/struts/config/0000755000175000017500000000000010423130301024161 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/src/share/org/apache/struts/config/doc-files/0000755000175000017500000000000010423130301026026 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/src/share/org/apache/struts/config/doc-files/configUML.gif0000644000175000017500000003270110404045224030353 0ustar arnaudarnaud00000000000000GIF87ak€÷€€€€€€€€€ÀÀÀÀÜÀ¦Êð@ ` €   À à @ @@@`@€@ @À@à@` `@```€` `À`à`€ €@€`€€€ €À€à€   @ ` €   À à À À@À`À€À ÀÀÀàÀà à@à`à€à àÀààà@ @@@`@€@ @À@à@ @ @@ @` @€ @  @À @à @@@ @@@@@`@@€@@ @@À@@à@@`@ `@@`@``@€`@ `@À`@à`@€@ €@@€@`€@€€@ €@À€@à€@ @  @@ @` @€ @  @À @à @À@ À@@À@`À@€À@ À@ÀÀ@àÀ@à@ à@@à@`à@€à@ à@Àà@àà@€ €@€`€€€ €À€à€ € €@ €` €€ €  €À €à €@€ @€@@€`@€€@€ @€À@€à@€`€ `€@`€``€€`€ `€À`€à`€€€ €€@€€`€€€€€ €€À€€à€€ €  €@ €` €€ €  €À €à €À€ À€@À€`À€€À€ À€ÀÀ€àÀ€à€ à€@à€`à€€à€ à€Àà€àà€À À@À`À€À ÀÀÀàÀ À À@ À` À€ À  ÀÀ Àà À@À @À@@À`@À€@À @ÀÀ@Àà@À`À `À@`À``À€`À `ÀÀ`Àà`À€À €À@€À`€À€€À €ÀÀ€Àà€À À  À@ À` À€ À  ÀÀ Àà ÀÀÀ ÀÀ@ÀÀ`ÀÀ€ÀÀ ÀÀÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ!ù,k€ÿÛmÚ@à¦*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠü ¤É“(Sª\ɲ¥Ë—0cÊœI³¦Í›8sê¤9²§ÏŸ@',80¨Ñ£Hƒª\¸TaÓ„OF%™’iU§W¡f•º•*J«_±–LJVëγhÓª]˶­Û·/ËÊ;w¨Aºxóâ ·¯_¦GÂL¸°áÈ› ̸1D»EKž<‘/åË?-c¾Øu³çÏ õvMz$䃥SïUÍ:¢æÖbÇžM»6ݶs?Hµîß_ï•íq1ðÐ'+_þ99óß§ŸK(|5õŠ–«Ogl|»÷ïe»ƒÿgãÔó]ÑãæºÞ«s³ïÙÇT»fíP±›oˆÙi”úeI뫇Ò8(ŽZÖe¡+ZuÔ¬’%‰Ð;%Iáæ?[lц=×sŒÇ¡i>ùð@š^Üði"Û*ƒV¢êZŸ&{]f¬îŠ”­¥ª[刈š«ëŸ¦o®÷ò›‹7ª 쯿>Y_mÊ&”„IïØ#…³Í sL?ýX‹­šÐéß^ðž•;ãÉJ¸˜…ù>¸2Á¦Ì»¢<áÍòm(s‡øÅkžÏòÿE/ÀÔõ*0U/&MáÒ6ˆá}F§ê¯_+7½t‰*gG¨Ó@˰Ïï(p’³Ë 3Œ1Ã`|Œ1Ö³íš:ðíwI™É&#Ý´ÎZ#í7ŸFøçÀûŽwßyï-sÕ¯ûä¿­BôFC÷[4ÍV ŽðÉ€ ;8¿×|ÛÔ“û$9Õ@ÛcÏ—%%! ?ü˜]LÚÆ¨­±ÆG<ÏÞ®iwc‡·«8⪚ëôÁž‡ºƒ;ï4ßÐ+o/‹@5\ºÐ¼Ýµ®ÔÏ|0Ô/ûú9X:zÿ.Õ×où5—•¾)J@À. 0²§1ÆÅ´}ÇèÀw¸G¨þr•Ä]­*«úá6ÿG¥b‰yZcYl¢ç¼®ë"±^új•½Èç\Æ Xç æ+Busí7˜" "ä÷˜Øp  D~ÂF1ÐV;üõ#m“[v÷ üÁ t{Ö\t5è%0„õT”’7ÅåQ°x}: ñDG´ fЂ,ôH妥¨1y‚Zà­ÈDË¡/Œ!r! §p:Úó㇠O?aøÑ³3FÓ†­!¸Í[½+â>`Ý]€,m¬Ùð®è·®åh„’D£ J$É«uRo[e1øÅÓÁ1"c”‘7,˜Áˆ„­Ä¤ÂÜØSžÒHñ:À=¶0¦ˆ}ãbf†?ÿØñÃÂ4ÚúÑÃBZËDÔVÿ:e/|áw¦3ãÖrÆMQò o+ê›WÌ– 6n›6‹Þô.Y=0Þ2#©¬ÕÆY.¦q2,O{§>ý4!UÊß($3y8Ì”ÄϘÀÈ!Óv±~ÁZG`Û:·D&‘ŸF’— ÷©‘xrô£ ÝhÄìA¤;dê¡Å`æuÈÒ ÀàGBë7;µÕÎbÙ²ÖCÍoõš_È‹;'cKél¤ñ(RùÙÀ)+kätê鎺.ÚPU!ox€ްӵ¥-¥xœÝ0\jÐøÅ”~fË¡ýRšÒŒítcn»Ö=”8¹¢>çªKEe}“×E¥ÿÐrøòâP­HJîIήtÁkBÞñMín UÆðˆ6aõ¥Í!2…QŒ®õ‡øƒ·p…4!à AÝb—£Ø¾6D©®­Þù6YÕÚÒ¶p£,lT;²Z¹´!$ý@ÿ´šÛEcÌ«1„„ËbV~hU+KÕ¶S®BÔ7pÁ¸šÔÛãü6¶ ínÔÝ(Þ·ÏóäŒÀW¡{iN½ã$˜+YÏW2Ížœ|žSóݨΌDÓV·z„Û±í¦l­…0Vçª0•i09‹¶¶Z »?Àð”TÞßô¼â=!‡:LKô¢·`šÖ|Ý3!ÅWR+cŒ°Xâ–Ä…ÇìBþû†;4–[Õ–­•±µÝ¹ýêJǪ›Nè~à‚üÀT¾•IÖBê¼ ñ~„cUNåÄã;cg¡ïµ¹„iþ ÓE¾YÂæÃ;SšÒ¤; à wØzèC ©R†‚öÐ,]®X‡±¡dÐ2–«Lוy}`ÿ¦Ü^yûÍ,ªr¼Xã•/­BÂÞÖÆS\1,—æ4ms®æ&±¸‡K»ªŒýž½Í!ö4wÀžh¶˜id¶ýðbCP)ùC kÙ.€4& € ÉˤNŸ˜u‹B.–ñÛ´vç?]Ë1¯“3®bòâëW¯{Îèž5k¿,‘ÿ’Ôw8À¬Àg5éNnÜ¢uµUà¼m»Ö°ûa…*ßÀÙÙ½6-íLwtÓÛ3µ+_¹JSûã䦷SÍîï‰øÝ*–¥=×ԦƻäÞ¥7Eìmo6é oè÷zÇ1#lŠ«ù8‚À9VðÑÂ-Ð.xxÒµ;¦.ï Ï®Ýöÿò`¥«–sM¾™”qQ ŸAÈľåL#HÏyʹ¾e§×ð›ö²c íø\;s ŽšÛ¤cú@ž`Á š¢îŽ0„$$A CPÀ5ž1²‘þ×é´¢{^¥NëîÌä•ßå͇ßa­¸HìäŒÅ‹–mˆÜýôÿmêOÏáŠþ"”‡Gû’ÇRÎáf%ÌyÄíÙ¾>¿¿_áÓeÛØŸœÎµ¹÷‹êW«»…­•¼Èk-{ÅXÿúØÏ¾öÑRÎàSÄøæv1Ê×¼üªÚÝàó>r0­þÒ”xÄ:ÆCBuÑŸž/º¿šIÞ¹ö7‡ýþ×%ä}{xr*/vuMðÔyr'ùgvV3'ï—Eó¡˜Ø 8v¨Ò'T€ C !Rø¡×{Ovàe=£nãa< W.Wy¡3X#XjÇçi$è)è+¨qAsƒ¯ƒMÄ3Bƒ!Š5;¨>8¸u?„ó—(àñu.yD[H(zs|4†$†8³3N%ƒ‘S…¯u…èâ$p4„÷…:ANc äIÎc/bèmž§|“kT”u™¸/É—r›(‡l´€¡D_ÞÒ3:“'ÿ4AGaôq‰È*y³^Åã¤è‡´Ô‰&öyâgCx<ûçmœHg™ˆˆö‰£ˆ!·Нâ{T(ˆ ÑŠòÁøÖH ˜ÈBv‹ø‚“${Œ¸8Xb[ºX‹hh#oæ‹å˜Ž$‡ESGŒ-Wu=XAggNöHŠ4…†²Šò~Ð(*üè…²h4‘HI¥_¢×‹êfc7n s> ļoóµy7F*¸¨<ŒCŽÂ˜[畆ù9’ë7®¥ˆÅ’)JŒãMŸöysv‰·‡yÃÈq5Ö‰ì¤É÷|'f@ã‘-y%Æ‚ú%i’ÿçŒùý¨‡ŸÄbW´‘È(&$km8‹©Æ†Jãrhø†^瀘Ç^ ö4 ˆNh©ëd”t8’I©”~e[/… yŠNØ{þXn„•—µD—õ–py7M˜’~)U¦…l9o8€|¹'€˜Ž1Þ™ÜÁ˜pù˜”yii…™™u¹„©O˜é™îÒ~f¹}¨™šª¹š×'’HIˆ¤©›© '›®g’£i›¤£~µ©›ªšï”›¾©—¼ œÃÉ#ÆyJÂyœ·â}H¨AE•#‘ô‘®Ñ€úÕ›#‰ÿ¢ ›ÌiUþ§ˆz²ƒ¡v)‘6É‹ÝY•¸ÉéÙ³i™—ÓI(kO8ž.“B-:ÍG~[ØžÚœìÙžišÉ<Œ¸ŒúÑ3÷éJIu—dŒZï©$Ë¡%XœNi/I•E9Œã'>¹nWuÚWÿyKj¡FQ¢ ™¡ª‡:&o ªbᣠVIcf¡'ªœª¢H .Ê’ÌØŒ‚‡&g£ç j*º£p”¢>šßY ú˜0IF³ô•Óû¢>ʤaä¤O*…9k×<8C4ëjXgkha*–ëIÚó¦î¥,*¦tªÉÙ¤=š§De§Fu§¤é¥7,¦~Z€z¨¯¸§_Ú§ŠZ™@ú¨ÜȨ…ꨒúFc:%¬¹©œÚ©žZ® †z©Dš©¤ZW”ÿºA£zª 9™¬Z„©ªm–úªK”¨´y±z=«z«<|Ï…áI¼ºD¹Z:»:¬Jšià‰cÅŠ¬Ï§½á¬Âgª¤"ŸdIŸ“4ŸP™Ò*ÍÊŠ³Ú­²©ñÉ­C©^¦x®n÷­yJ¨ª®âj:¶Z­æzu$¤”Ä¡ñú3‚J"ǯýª‚Rúˆ7³‘dˆ¯Üº¯ôÇ®»ò¯â°B8°DùvP„° ±Ý鮲*§¤°á1¯4c¦ “éJë±ÁÁ°´â°ÝбÓñ«ÒYO×<{¦‹²Ru™ðгˆJ®"ȳ¨ã²²Ò*´wÅ®*‹³««; ´ûè³N;ƒI­ë˜Mµ¥J­V±FK Dë¬[;wK›µ"8µtÒµÈúµ`‹¶bË d[¶U»¶58zˆ ·¶1·?h¶Ãª¶ŠÙ¶tûåøšËW}ë·Uƒƒ‹ ¸Ñz¸wY¸Ÿú¸¹’Ë·T¸ŒÛ¸‚8¹š»¹œ›±‰·¼ª·ZÛ¹¤[º¦+™º º·*º—Ûº¢º´Êº®;»»¯*»´›»ßa»¬Š»ºû»ÏÁ»§ê»À[¼¢À!¼¤J¼Æ»¼µ¼—ª¼Ì½äñ¶¹ ½Ò{½¡á¼’j½ØÛ½˜¡½Ê½Þ;¾Ž¾Š*¾Vå¹ä«¢æ{¨è›Q´¾ìK½´û¾wö±ò¡íë§öëžø›¿í9F§;Àv+›Ðxiý Àã!À¼é < IñÀ ì ìœ|Àÿ;ÁÇYÁ¾zÁ™›Áì›,¡>Ø«#—޲Ò3†«‰EÀ:ÑzñÂÿܧùbF€è@'$n!‰ˆLù´ <ƒ0Á2<Ö۫º rYX°˜ÄÉjÂ÷ÃYÄ:Ķ9»Hég ÍsO¤3]Ç^ § ˜ÅòU5Ý(Ä&(Å^CÅ©KÃá‘ä—b:‰fö¥jvÌ•ã÷ŽxŒ¤Pˆ±¢…PÕƒ…È{1ÌÆŸëÆ,V>Ÿh{š·Ž"ÄyL[I‘pÖÄP 0: vKL€ü™klȤiÅõדŒ\~s[ú”›DÉH,È+úÆ]èÊæ‡’žlˆ… Ê™)Êæ9Çü©‹7¹Ÿ „ÇΗí6¢9:®+l(³^g‡8ò^Yi_–Lf}ŒËÐ:§8XA9–Ó_‰¥èÖËÃ|A©<†£Í lÎìhÇn†O.–Ÿ×:ÍKXÍÖ¬¸Ø ÏX°á¤Å`y”ølÆi7OlJ‡p·*N¼Æg†¤2Yʃófžç̲L^ò<Ï‚hÅw•˜„Ûï¬[­{ÊWÌú·ÃæÂ+!ÑZÄí]ÍiÑÉÌjß¼• k©Éj¬LÒ=AÑG»§Ð™X9 É Ý2}†sX ÇZ8ý®&MË^èÓ9+–þÕ,“ÅQÍ sÓ­êIÍ´K ÏKUz«ÈÃi^×–AX([ÂÍÕ‹Kz"]ºNÝœ³¢@5ÝÂxšÖ K¿]Ú—:HoXÝ¡oMv=9ûû‚}Ôf]‡\’gØwÝÕ«[Ø„ì„ XÇB}ÑŒ½²x½¤m}s½=¬,¢˜{ÙnëØ¢­OÑÉÑ3mÙ¥Ý$ƒ½Ú' ØÁXÙ=ëÚšÙ´ÙK‘¾¬Ú·m"­ÝÛq)ÙSûÚÀ"¿}ÜZ«Ÿ¬Ü¯kÛÎM›ÌÑ­ É]Ý» IÆÙרÐÝÝŒÒà͵ß=Þ»Ù(lÞ~àqÝê=Ý6ÝÞþÁÞðÑ÷;ß»[ÞöÔœßÛ!ßüÍÒ"òßÓáß~Éâ]àËAàŽÖû½àÇ¡ànÜïáÇ‹ß^ß~á¶áîÃÖá¹Áá ~µ>â´!â&žÕð›â­â,>Ö óâ-ná2'ú]ã¥áâ8îÕüµã^9Nã>^šä'äD©C~䔡ãJ.¾ÜmÞL~äè¸JÎQ^åXžiWžå\^€FÞå`þ¤[æd ¤]æh>¬cžæln¬_Þæpî™kçtÎÚo^çxNÏ›ç|Œ¦sÞç€^»wè„þz^èˆ.‡žèŒþàƒÞèþ—锎¢“^阮Ôkéœ~·—Þé ^¹k=å¤^ꦮšÂ}ꪾê.ᬠòä·=U8 ëµmÒ´îÚ²NÒ·®"¯ê+]Ë ¼ë)Òë¯]â`}ÌÞ Œ)í€rýMlà*ý£ÞŸ©/Êl„-áÿ¯JìÍa½ÄÇ„Â˳µ“ú2žq½ØÔžîqKÖ‹âíóÇЭØì¾íó·ÄH^âO\*b½ìîVÌu‰ïL¼î'Mâ.¨ÜûîWkÔ"6ïê>ð§Êí;¼Ì{X‹^|/ÆmšØÍÒ |ÚÌûìÏ2æ†X³/öˆPbŸ³Ç ‘Ï)Ÿ^ÛL¢(/ÐOòÈ^bßÈñxñmy*nºñßñÖ _IâÍR‰ól×b½Ðš˜Ÿž&õdÌôL-©Å”­Iqˆ“yÌËá\Æ™d³ÀâΫLAìö€œ¥åGvàŒ‰ž‰ ©I4oêXöﵦ<3¼óVºË{0No{ÿ`Ÿ¤dOö ͆ƒö*7~œ#Žá\‰¾8%cI÷O§Ä~Эƥè9É ÍÄÛoŸÚ‘ÿùé ÆZ/ú–ïùgÇŽlù6Œ©lÊĈ~7zj¹ÝÉù\ßú4úô•üÙ³ÚÁ¿Î§Où6:“ꨌÓkçFùõ÷Ëkô|Wùû¾óÙÚa/“WÚÑø[øvo•Rÿï–(ΧS“Ï6GKPA#•ÓPJǬÓR–4ݴϬ.tRPCµTS3[4MHiâq2O­4FXå{uV1eõSÏÍZÕS[5ãõ×7}¶ØDS}ÔXe—e¶Ù—ˆÍÓYi§–Zk E¶Ñk·å¶Û;¡= \oÇõV\rÏñe)[.‘d·]wß…7^y祷^{ïÅ7_}÷å·_ÿÉÌ&¸`ƒF8a…çE·aøÔu8âÉV•¸b‹mïb7>bŽ%Îøc‘G–”b’OF¹2Sî5–_†YWmc¦æ•k–VTœwæùSs{šÜ›ƒ6:¢ŽÙh¤—Öxh¦K5éç§§v6jª¯>×i¬½mk¯Éíúk±›Õzìo¥3;íªÑV»mXËv»Ì礎»n2ç¶;ïcÏÄOï9÷¤ÛoÁ1|pÃß„ûp`;U¼q¹w<ò‡ùfTrZéµ<ó]1×¼s3qêÛsú½ôpMG‘]¦ÄS_“u×ç"ýõÃW—òÚo·wÙi×ýôÞÏøÔy~æâQýxµ‰/>yåwþy±™>zéí¶þz¬©>{íÛöþû§¹ÿ=|ñÇ6ÿü£Éï=}õ·vÿýžÙ×=~ù§¶ÿþšéÇ=ý‘ößÿ^Æ¿ÛP€@3àOFÀÚ%P8sà?Æ@ÙEP‚0³à–/FÁ×ePƒ(óà#ÆA×…P„"3á ³F9Ué/…*ÔØ aØ-²N†3—ÇÂÞP‡ óá¥UÃÔQˆã2â—EDä)1oItb±˜h:(F‘ZU´â¬¦X:,f±Y]ôb©¶(:0†ÑXe4#¥Æè94¦cn\Ú;×F8žŠŽu”5wG<‚Š}œ“3÷G@r­ˆóã¡ yHB-’‘b¤åùȳQ’f‘”Ü$-Y©MÆ “‘Ód''J–}Òq¡$å­R™2S6•«,˜Èÿ½R–ñ±å-cÒJÅåR—ûåiéÂ`&­˜ãåá|yLØ1sƒÃ¼ß2 §iV,™†“f5Ÿ¥ÍBS~ÙäfîÂé­kœãd:vÉéÍ÷SÁ{çµÊ ½x^ÌÕœ§ßîYO“ñSYùÔÛ>ë)Pfô‰þÌ!B­ePì)Ôa=&CëQuR4˜›EÇ©Q]bÔmå&HeéQð9ˆ&IÕ&Òj²t•*M›K)SRÂÔl4=&N;iSô¡ô\:›Ý$OÅÔ_•’BýšQo©TF"ÕkL…%T éTøùlV%;Õ'ÕTrµTÅšWE)Ö:‚õjdÝ$ZÝhVª©•’n5#[¿µ0ºÖÕ®µ²*\Ã(W;é>~í%V™Å׿ R°ž:ìÛ´ŠAÃ&¶ŸŽUãb_6 `}Jœ½* ^éô,Ö±€µ"a9IœtF‹³™¥ñbZ{ÞÕµû‚ÿ¬}$Ë2—.S¬’JÈê®ÕÖÑ¥¬h«åÛJK= OxØc")5÷JDPn¿”¢äN ž^ümlÓ5Û”ýÇ9_9‹ÒÙÈF¼+ z÷r¢ë„…IîA¬³«]•×MÌ1aÚ›òî·=­Q‹Xü$šÚ>Vˆ¾ŠnŽp5"Ͳ)ÁÛ¤oJì›ZÀñŠ/© owÔ `ìLºàanJFNgMxspØ4ûÝ£dÂw{”Ñ.ÌòԘÒùM‰ò{áÛøºYTZð¨øBJgn±‹¹ ÂãF87v†Œ2òâwÆO¶2‹ÝdËB7=ýiŠ^c¥0ÇfI¦Mò?Â^Œ©÷?&b’’:‹ MèËëJ’—„Òª.ÑèB7nŸŒØêV§:1úï–Ì£å4dͪ\–[ˆœ¬]M ޔŕŠÝë_³0&XP‚͈Óüè0ÝQÒ¶‹ßm/Ýåü ÃÃá ŠMiÈ’z·‘ž.|9Uo™ÕæMdÞþú ØhN²­c)IßþzÓQ1ijó¶W·v¬²çh™ùZÁ$"Д`ô^ …ZIW:¢Übmóúµï†·¾š]I㕺Ñ^ i÷½Ïú§#÷Uߎ^ò¿ÁÊò[àjøÁÙ݃ç[ád¸Àþp¢ÅÛâòjxÂ)¾qŠOœã­ÆA>òQ‹œä'×®ÇQ¾rªœå/ Ëa>sýÉœæ7?ŸÍq¾¥sééœç?žÏ>tÜ èGwÑ‘¾ôÒñïâOß5Ó¥Ž4§ŒÛSzÕ9vu¬ÿ\ëãz×wþuo:Ôþ¶¦Â.ö›“Ýì–ž‰‰Ub¶×hn¿m¯[WolùãP|àŸ¯ š\È…"ËqË|çU±ÔeÆëÚHÉ7Íð–E±°§õjzÊ.på;Hùƒ®rÍijՈìûÀ¯FöÈEÿÿÓÒ£é2³–Qr8M܃ÖÎy_iæm³ñ“>êåßÃèÃÃÐÖðIÅ-©«ß´î¾ÄÜŽYíÈ@Çí¸Ï,î‚ó]à¸g.,yǶL·pɵi.#ñ2Ý8@Ôr >ƒêr@c+· ›Gš¿ké·øk¢ø*´Õ ÁñÀŽþR½Ð=ίæÛ’l ³ÌB4; t˜ ´–œ9L«C2ø±i“•+c½Ýk¾À˜²ƒ¼kë1O[0lÜÁ]“B2r6 $ŒÏýâ½>q5Xk½0»s=LŽßø5ÈèŽãK>Ók!ÜÚºÌBû³#´2:Ãý2¿#ÌÃ(Ó1';¶ë=“¹ÂrÃÛ³:9AÓ²¤±ßs>4Œ>îðjã ñ(/×[¯ñBšïc°Á»+EÔµ(1¾&|.«¿8ƒÁ?“³:˳9’?4·:ó³>;3"$+aÅ l*P´»m!÷£5{ò;C²$¥ ÆcÔ>½‹8ÿ£7 Æe¼¢ÍÁ¾¨C!l¤Oe¤Æ¾;ÿ°Ú o;ÒKÆiÅtl—{SÇvtÇÀÇÓC="Ǿš³ÛP±9;ò*nô-lÄÇØã’®ãÇŠ«Çûº¬Ú*‚DdzsBDÄ6& mdƃ\œéãÁéCº‚,;ìS?‘6ôH@Ì>‹„4M¿9d;Ž ÂbŒHm@ÔH“¤ÓR=B³;–´ç²¹ÀÂ8¯‡$@0󮛤I6ƒ'_4Ê}lÈE,CÑÅXC®Ð/Cƒ/—½l “±¼\'ŠƒKºðÉ,M”äËTK­—£Ì“ES¬MÐË’Ù0d<1SÅ %Gû±Ò™;R›,¶É Ô1¤K.,7¼œÍü1S˜ãȰì²Ç\>ËdD4ÑAœD2ÒÑBH–ËR!¥¬©ôÓ=œ$?½¬Hõ¬áB¹<=¼- °1ôDEBI¬ÃA­;¢Ô•CT ü‹ÑT3ѱ¬ËóÛËIFC9 ý°ôU\Í*YÕl³Ö„[Òzt Z=9Se²öLZ€¥Q}ä=„S¯Ä“u¾± U£-𳥝–%ÌSóTP ô,Zž+£¹M[¥E6°ÝÊÂDB½}¶HÅJ¹=£À-µ¶±lÁõ[HEËÎ,[ÀÜb¹YO²Ø¯Å(Jû;7ëªCX…Íæ;:ÝZ›Üsõ#Þd;S»¾lÝe+Ý`Å:>‚ÝÄrØ1Ù¿±Â®û£Ü=¬Ù%Î×Í™ßÅ*ÞÝM©[¤â ^ÕWÀ#Þjœ–ÈyW*­Ùô)èÞ¿ýXêê5)ë½ÞPòÞíEÞäU^ C¥òu(áíÝŸ¾–Q(ô^«-—øõ'÷MDø•_öå§jUSóäXu?­Úó¥ÎßÕõQètÐ.²¾sÞŒ¢½«Š'ÂM`‘4ÏÆ•Ù›“¦ Ž`»íÓÔ¬@üÒ×ìÉÚ.,ÊŽ¥¾“B—F þ´ª¼?"üR©õ<\Á¨%Å^auJS®]Ô7 6:«Áç“S7Åá—;§$F'~JÌÔBpÃ.í[HÄÞFs§+'&D'b¦ b(+¿¨cᤴ2æ&-–b.&®äÌ9}¶¿La3¦\ñ¥ã‹ÿ›n³UTÍý½?É?†ÍX½] ªãBŽ7”­âÉ3úE"Ó%dñq˸- ;ÖÚ’$™âT 1¾,:=ŸBdd$äƒdD–a1FR<ã_ÕŒ½/VFáÆW<ž¬ òÁ¨‰SRžIn@uÈ$ÜW¦ÒH¯¹D@ã’¶Ø“; à™$FõdY¦-ZF‹óÅ~â­=»Óôâ-ä>\.0ЍæÇÐÈ‘NëqKaÆÍmÕÑU6d;~d5y¿èÎN‰"0^4KT_±]4±!ÌÜ?á§ýÉ×0ÅKÅžÕ3³1ÍãeŸue:·]RWL<Ÿ4@Òì硬ÀÞH·[ÿŽJ8kÔ ”¾WÎGÆ$©=ŠDÉ"ökcvÚ.|ã^þxæJ¾Vš.æEË/þòÒ* ¨E¯cp¶Áð²éÌìDoÛ0þâ»d[#þa7“U5^ÂNUÂ4.KéžQãób/c¡–êÝóÓ¼mË@¤²(têFÁصb T=?e[M\k¿,?EMç´ëUúæöQ ÛbJÔ0¶Ë£~ ûki÷ø/Ô4”eÔcciÀÄkG=`¾fVC¦þkr•è¥lÌNcÀ"LÀÔ\ñ³§u’‡žàím¤³Ü«@4üã hï^ÂuIh&뫦Àÿ¶úæÅ>–ìІ í¤ÿ×Á9nRRâ²%glkGÖ5îø>º—ÔOWŒ<«Ú]o ÷úigC>pªïàFšðN¦äu&Ù:ñQöðvzñqÄ牚ñïAçÔ+ñO˜—G˜uàæò#?\ÎJÑ_Zÿ+.”×dªòÞaòì£Ïñ2\à½Þ€5Î,'Ìë|o6DÉ~Ð0ßä%E|ŒöïÎöïVè@æI;—Rþöj6¿rÝ!óbt«¿5~iôÃf\©…nª=ssýó¢{óPô9DÃÞŽðÞL#kc*†h ]Ï@'f®žî¦Îô»$-ª T¸MdvôÛõ}>ªÞ lÆæë×NÜÅ”u6Ï›e“ŒuQÓB">æV.Ï.ë\g\Iž×W¯Q§?@Æ?XÔå—þ\ÜB×ÄsWvWõIGÛ ÏXSçuäsoÇZp÷¥÷^·Hg—X(÷[\ åuWò£t÷•¢÷6·ws×ñ|¯wš$q$×Wÿw_Çp‚7§n×i„/"…‡q†¯‡Çñnx‚ùÆŠr«b¢böSb¶êý>Ž¿øÿG©§Î‘Ï$ù&‡÷ —È_6ÙŽw%J·jžò¹‘rÑ´Ýþ50™oá•×r¹É±s»ûìiñʤíGgfnÖçùú2¿S …e¦§¹ÒŽÌ5¯õÓ¶z“Æî§/à…?´qMt«\jAA×ó殇9Šu;E=¯è'Ím޾ó³ÌŽwŸ7ćÐ<÷böâ<nô.ÁÕkuœó®<1CË´á„ìC'ôµ üMTï›wðû>õá‘®j!ö#ÞCò«zõÛ¹þÔa–’=WýS'ëRçÄŽ<•ï|Íf5æXÆÇjº„jG÷{lj2­x[ÅÂâÞë†T¿~å ÿ¾}Ìv:Üý ÖýÕoí>:¬'ìÅÛô¬ÿéZbÌ´±Ï®îæ'“wJRßEçªj1Ev~^| ~@|yȇéknàMö·nOÿ,hð „ 2lèð!Ĉ'R¬hñ¢Âv›6иé¢@‡F"Ò¤ÁÿT®4é² I–(a’l)%Θ/Kbìéó'РB‡-jôáÉš%•œ³éΜ7ŸÎ„šÔfJ¦U§ÒœªR+Áª-¡®Äjö Ë£jײmëÖ­ÇŽA¾­‹&O»z÷òíë÷/Z£27ŘvèaŠ3&×#ÝÆo–lù2æÌkÿ¤ ˜ó]µ" 5“.máã¹GŸ)oëØ²gKfmøu_Ü"™µMû7óð·©?®¾Ù8òäÊ{ú^®¹¹óèÒ<Ý'ôëÚ·cÎÎýó÷ðâÿU_íò<úôê׳oïþ=|öãçÓ_ÿ>þüú÷ó￳>€É• x ‚ *øÝ€ :ø „J8!…5X!†j¸!‡w¡‡!Š8"‰%šˆˆù·"‹-ºøâ}'Ê8#5ö•bDÞÙXÜŽ=úø#ᑎA†f$’I*yâG.ÉÜ“QJ9e„MŠ„og…že8Mô_CER9&™ege˜D–¥`°Ù–w'åh&uÚ‰š ¥ÚMx‰I‘g„í©" wz(¢ÿ˜å¹Ð  õVYVÁùUMb'i¤…Mº)¦•Êé©LJ9¥ÐVcYõ¨Mlþ™(«­ºjáFrÇ#¤ŽjZ–œ…åúi­_ÝêXºjêk¦^Õ©¯»Úªk¥½æšiJ¯J;-µ?-J꩸)‹ìKVFì¥Ïf m±¿ÞJnª¨žëæ³Ä"{l´ÕÊ;/½Å ™uë¶횡NÚîºî¢+j¯ë/Áy½kî°;\/Ä»zí²›»meº[*»nÆ ®Á/Û(È ˦¾«¼r+œò¯%ãÚðÌ4wìY²6ïúÔ±lòÏ墛1ËEM¥ËD3š°S rš.Ô’ZšÕe]Ñ„«VYWm5×Ra%Ê«=6Ù&/x¨Úe»ý6‰g{ìÛõÕ=4Üy뽡ÜmÛ&€û½7á…+Ø7Ì­Šm8ãK‡8ÞŠ;>9åB#æ™k¾9|•{þ9wƒ>:é¥Çë%ºé©«¾ºµ÷ªÆ:ì±Ë^ê³Û~;ë—s¾û‹¸ûþû‚—¸8ðÅO›ð¿<óÛ% ñÍK?½c®ÏZQs\&¾k^ª¨[ÅÔ‹?¾iϧ©qœzÂIhä/“ÿ>üŒ™9eéc;÷ùìÇ¿?ÿ7ZoÚˆö©«Œ«\ ãúþu2ÝD¯| CæÇ§}1lc‚Y²š5¬ ‚ü`ë8‚/¥-ÿù™+X± ÉŒ3 ! (Áû},d)\XÆXhÃðۇ>¤ÎÿòE¿¼l,XB#Ù†²öý°‰=œ!iæ=´Ý0…UܨEÎT¼i·šf¬­|Ñi^› ·¨Æv(wcËÝ^¸Æ9â®Á_[âHÇ=BÐŽ_Á'G>Ru~ Ï ©ÈÑò;‰\$$)§;ÞQÒ?‘¼$ój‡ÉMrÒ/šì$(CÉ–O┦ )O©ÊUJ$•¬|%,OQÄXÒ²–!”•-s©KЏr—¾äd/)LHs˜Æäc1©L5&s™Îdã,Ÿ)MU6sšÖ”a4¯©ÍMVs›Þ_7¿)Îæ…sœæ,^9Ï©üÎÛ¥sî„];ß)OÓÅsžöü\=ï™­GBIŸ4ʧ?ߨ&=ñÓŸ–˦AÝâ-8^)¡LB¨CCÅfÌi˜2 )ÅĈf ú\SÌ(z@T‘hÜâh‰®mû«dJ1q(LbuÖ³&ãñÉPŽo‹Gs)*/ «©"ó•¦C-OØË_®o?Õ†D6c Ívîê…¦%'»yµ@v]ea5ìQ-Ürž]Å>ÇvÃ^¼,Ž3«½ŒêÄ­ÍJÕΨA2Z·Žö0Ÿe£ÇNÛöÓ*^ñiFMjÙšZM¡b09½jVƒY}ž5­á À[ãÚµùå/°÷Ûk_×zØÆVNz­Aìž${ÙÎæe±Ÿ-íòE{ÚÖVTµ¯­mùe{ÛÞþK³¿ííp‹[Ûä.·µÏni«{ÝÎn·»• ïx{Þôîµ½ï:=ë|ë›Ôüî7£ÿ p7 |àO.¸Á]Œð„gxá G°Ãî߈Kܾ¯¸|/Žq÷j|ãêí¸ÇÍ ò-‡wä$ï®ÉOžÝ”«¼º,oyt_óæÊ|æ$î¶Í^óœkç<øÎÞÛ€;libstruts1.2-java-1.2.9/src/share/org/apache/struts/config/impl/0000755000175000017500000000000010423130301025122 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/src/share/org/apache/struts/config/impl/DefaultModuleConfigFactory.java0000644000175000017500000000313410404045234033207 0ustar arnaudarnaud00000000000000/* * $Id: DefaultModuleConfigFactory.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.config.impl; import java.io.Serializable; import org.apache.struts.config.ModuleConfig; import org.apache.struts.config.ModuleConfigFactory; /** * A factory for creating {@link ModuleConfig} instances. * * @see ModuleConfig * @see ModuleConfigFactory * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class DefaultModuleConfigFactory extends ModuleConfigFactory implements Serializable{ // --------------------------------------------------------- Public Methods /** * Create and return a newly instansiated {@link ModuleConfig}. * This method must be implemented by concrete subclasses. * * @param prefix Module prefix for Configuration */ public ModuleConfig createModuleConfig(String prefix) { return new ModuleConfigImpl(prefix); } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/config/impl/ModuleConfigImpl.java0000644000175000017500000005545710404045232031211 0ustar arnaudarnaud00000000000000/* * $Id: ModuleConfigImpl.java 170858 2005-05-19 02:58:27Z jmitchell $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.config.impl; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.HashMap; import org.apache.struts.config.ActionConfig; import org.apache.struts.config.ActionConfigMatcher; import org.apache.struts.config.ControllerConfig; import org.apache.struts.config.DataSourceConfig; import org.apache.struts.config.ExceptionConfig; import org.apache.struts.config.FormBeanConfig; import org.apache.struts.config.ForwardConfig; import org.apache.struts.config.MessageResourcesConfig; import org.apache.struts.config.ModuleConfig; import org.apache.struts.config.PlugInConfig; /** *

      The collection of static configuration information that describes a * Struts-based module. Multiple modules are identified by * a prefix at the beginning of the context * relative portion of the request URI. If no module prefix can be * matched, the default configuration (with a prefix equal to a zero-length * string) is selected, which is elegantly backwards compatible with the * previous Struts behavior that only supported one module.

      * * @version $Rev: 170858 $ $Date: 2005-05-19 03:58:27 +0100 (Thu, 19 May 2005) $ * @since Struts 1.1 */ public class ModuleConfigImpl implements Serializable, ModuleConfig { /** * Constructor for ModuleConfigImpl. Assumes default configuration. * * @since Struts 1.2.8 */ public ModuleConfigImpl() { this("/"); } /** * Construct an ModuleConfigImpl object according to the specified * parameter values. * * @param prefix Context-relative URI prefix for this module */ public ModuleConfigImpl(String prefix) { super(); this.prefix = prefix; this.actionConfigs = new HashMap(); this.actionConfigList = new ArrayList(); this.actionFormBeanClass = "org.apache.struts.action.ActionFormBean"; this.actionMappingClass = "org.apache.struts.action.ActionMapping"; this.actionForwardClass = "org.apache.struts.action.ActionForward"; this.configured = false; this.controllerConfig = null; this.dataSources = new HashMap(); this.exceptions = new HashMap(); this.formBeans = new HashMap(); this.forwards = new HashMap(); this.messageResources = new HashMap(); this.plugIns = new ArrayList(); } // --------------------------------------------------------- Public Methods /** * Has this module been completely configured yet. Once this flag * has been set, any attempt to modify the configuration will return an * IllegalStateException. */ public boolean getConfigured() { return (this.configured); } /** * The controller configuration object for this module. */ public ControllerConfig getControllerConfig() { if (this.controllerConfig == null) { this.controllerConfig = new ControllerConfig(); } return (this.controllerConfig); } /** * The controller configuration object for this module. * @param cc The controller configuration object for this module. */ public void setControllerConfig(ControllerConfig cc) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.controllerConfig = cc; } /** * The prefix of the context-relative portion of the request URI, used to * select this configuration versus others supported by the controller * servlet. A configuration with a prefix of a zero-length String is the * default configuration for this web module. */ public String getPrefix() { return (this.prefix); } /** * The prefix of the context-relative portion of the request URI, used to * select this configuration versus others supported by the controller * servlet. A configuration with a prefix of a zero-length String is the * default configuration for this web module. */ public void setPrefix(String prefix) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.prefix = prefix; } /** * The default class name to be used when creating action form bean * instances. */ public String getActionFormBeanClass() { return this.actionFormBeanClass; } /** * The default class name to be used when creating action form bean * instances. * * @param actionFormBeanClass default class name to be used when creating * action form bean instances. */ public void setActionFormBeanClass(String actionFormBeanClass) { this.actionFormBeanClass = actionFormBeanClass; } /** * The default class name to be used when creating action mapping instances. */ public String getActionMappingClass() { return this.actionMappingClass; } /** * The default class name to be used when creating action mapping instances. * * @param actionMappingClass default class name to be used when creating * action mapping instances. */ public void setActionMappingClass(String actionMappingClass) { this.actionMappingClass = actionMappingClass; } /** * Add a new ActionConfig instance to the set associated * with this module. * * @param config The new configuration instance to be added * * @exception java.lang.IllegalStateException if this module configuration * has been frozen */ public void addActionConfig(ActionConfig config) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } config.setModuleConfig(this); actionConfigs.put(config.getPath(), config); actionConfigList.add(config); } /** * Add a new DataSourceConfig instance to the set associated * with this module. * * @param config The new configuration instance to be added * * @exception java.lang.IllegalStateException if this module configuration * has been frozen */ public void addDataSourceConfig(DataSourceConfig config) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } dataSources.put(config.getKey(), config); } /** * Add a new ExceptionConfig instance to the set associated * with this module. * * @param config The new configuration instance to be added * * @exception java.lang.IllegalStateException if this module configuration * has been frozen */ public void addExceptionConfig(ExceptionConfig config) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } exceptions.put(config.getType(), config); } /** * Add a new FormBeanConfig instance to the set associated * with this module. * * @param config The new configuration instance to be added * * @exception java.lang.IllegalStateException if this module configuration * has been frozen */ public void addFormBeanConfig(FormBeanConfig config) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } formBeans.put(config.getName(), config); } /** * The default class name to be used when creating action forward instances. */ public String getActionForwardClass() { return this.actionForwardClass; } /** * The default class name to be used when creating action forward instances. * * @param actionForwardClass default class name to be used when creating * action forward instances. */ public void setActionForwardClass(String actionForwardClass) { this.actionForwardClass= actionForwardClass; } /** * Add a new ForwardConfig instance to the set of global * forwards associated with this module. * * @param config The new configuration instance to be added * * @exception java.lang.IllegalStateException if this module configuration * has been frozen */ public void addForwardConfig(ForwardConfig config) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } forwards.put(config.getName(), config); } /** * Add a new MessageResourcesConfig instance to the set * associated with this module. * * @param config The new configuration instance to be added * * @exception java.lang.IllegalStateException if this module configuration * has been frozen */ public void addMessageResourcesConfig(MessageResourcesConfig config) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } messageResources.put(config.getKey(), config); } /** * Add a newly configured {@link org.apache.struts.config.PlugInConfig} instance to the set of * plug-in Actions for this module. * * @param plugInConfig The new configuration instance to be added */ public void addPlugInConfig(PlugInConfig plugInConfig) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } plugIns.add(plugInConfig); } /** * Return the action configuration for the specified path, first looking * a direct match, then if none found, a wildcard pattern match; * otherwise return null. * * @param path Path of the action configuration to return */ public ActionConfig findActionConfig(String path) { ActionConfig config = (ActionConfig) actionConfigs.get(path); // If a direct match cannot be found, try to match action configs // containing wildcard patterns if (config == null) { config = matcher.match(path); } return config; } /** * Return the action configurations for this module. If there are * none, a zero-length array is returned. */ public ActionConfig[] findActionConfigs() { ActionConfig results[] = new ActionConfig[actionConfigList.size()]; return ((ActionConfig[]) actionConfigList.toArray(results)); } /** * Return the data source configuration for the specified key, if any; * otherwise return null. * * @param key Key of the data source configuration to return */ public DataSourceConfig findDataSourceConfig(String key) { return ((DataSourceConfig) dataSources.get(key)); } /** * Return the data source configurations for this module. If there * are none, a zero-length array is returned. */ public DataSourceConfig[] findDataSourceConfigs() { DataSourceConfig results[] = new DataSourceConfig[dataSources.size()]; return ((DataSourceConfig[]) dataSources.values().toArray(results)); } /** * Return the exception configuration for the specified type, if any; * otherwise return null. * * @param type Exception class name to find a configuration for */ public ExceptionConfig findExceptionConfig(String type) { return ((ExceptionConfig) exceptions.get(type)); } /** * Return the exception configurations for this module. If there * are none, a zero-length array is returned. */ public ExceptionConfig[] findExceptionConfigs() { ExceptionConfig results[] = new ExceptionConfig[exceptions.size()]; return ((ExceptionConfig[]) exceptions.values().toArray(results)); } /** * Return the form bean configuration for the specified key, if any; * otherwise return null. * * @param name Name of the form bean configuration to return */ public FormBeanConfig findFormBeanConfig(String name) { return ((FormBeanConfig) formBeans.get(name)); } /** * Return the form bean configurations for this module. If there * are none, a zero-length array is returned. */ public FormBeanConfig[] findFormBeanConfigs() { FormBeanConfig results[] = new FormBeanConfig[formBeans.size()]; return ((FormBeanConfig[]) formBeans.values().toArray(results)); } /** * Return the forward configuration for the specified key, if any; * otherwise return null. * * @param name Name of the forward configuration to return */ public ForwardConfig findForwardConfig(String name) { return ((ForwardConfig) forwards.get(name)); } /** * Return the form bean configurations for this module. If there * are none, a zero-length array is returned. */ public ForwardConfig[] findForwardConfigs() { ForwardConfig results[] = new ForwardConfig[forwards.size()]; return ((ForwardConfig[]) forwards.values().toArray(results)); } /** * Return the message resources configuration for the specified key, * if any; otherwise return null. * * @param key Key of the data source configuration to return */ public MessageResourcesConfig findMessageResourcesConfig(String key) { return ((MessageResourcesConfig) messageResources.get(key)); } /** * Return the message resources configurations for this module. * If there are none, a zero-length array is returned. */ public MessageResourcesConfig[] findMessageResourcesConfigs() { MessageResourcesConfig results[] = new MessageResourcesConfig[messageResources.size()]; return ((MessageResourcesConfig[]) messageResources.values().toArray(results)); } /** * Return the configured plug-in actions for this module. If there * are none, a zero-length array is returned. */ public PlugInConfig[] findPlugInConfigs() { PlugInConfig results[] = new PlugInConfig[plugIns.size()]; return ((PlugInConfig[]) plugIns.toArray(results)); } /** * Freeze the configuration of this module. After this method * returns, any attempt to modify the configuration will return * an IllegalStateException. */ public void freeze() { this.configured = true; ActionConfig[] aconfigs = findActionConfigs(); for (int i = 0; i < aconfigs.length; i++) { aconfigs[i].freeze(); } matcher = new ActionConfigMatcher(aconfigs); getControllerConfig().freeze(); DataSourceConfig[] dsconfigs = findDataSourceConfigs(); for (int i = 0; i < dsconfigs.length; i++) { dsconfigs[i].freeze(); } ExceptionConfig[] econfigs = findExceptionConfigs(); for (int i = 0; i < econfigs.length; i++) { econfigs[i].freeze(); } FormBeanConfig[] fbconfigs = findFormBeanConfigs(); for (int i = 0; i < fbconfigs.length; i++) { fbconfigs[i].freeze(); } ForwardConfig[] fconfigs = findForwardConfigs(); for (int i = 0; i < fconfigs.length; i++) { fconfigs[i].freeze(); } MessageResourcesConfig[] mrconfigs = findMessageResourcesConfigs(); for (int i = 0; i < mrconfigs.length; i++) { mrconfigs[i].freeze(); } PlugInConfig[] piconfigs = findPlugInConfigs(); for (int i = 0; i < piconfigs.length; i++) { piconfigs[i].freeze(); } } /** * Remove the specified action configuration instance. * * @param config ActionConfig instance to be removed * * @exception IllegalStateException if this module configuration * has been frozen */ public void removeActionConfig(ActionConfig config) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } config.setModuleConfig(null); actionConfigs.remove(config.getPath()); actionConfigList.remove(config); } /** * Remove the specified exception configuration instance. * * @param config ActionConfig instance to be removed * * @exception IllegalStateException if this module configuration * has been frozen */ public void removeExceptionConfig(ExceptionConfig config) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } exceptions.remove(config.getType()); } /** * Remove the specified data source configuration instance. * * @param config DataSourceConfig instance to be removed * * @exception IllegalStateException if this module configuration * has been frozen */ public void removeDataSourceConfig(DataSourceConfig config) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } dataSources.remove(config.getKey()); } /** * Remove the specified form bean configuration instance. * * @param config FormBeanConfig instance to be removed * * @exception IllegalStateException if this module configuration * has been frozen */ public void removeFormBeanConfig(FormBeanConfig config) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } formBeans.remove(config.getName()); } /** * Remove the specified forward configuration instance. * * @param config ForwardConfig instance to be removed * * @exception IllegalStateException if this module configuration * has been frozen */ public void removeForwardConfig(ForwardConfig config) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } forwards.remove(config.getName()); } /** * Remove the specified message resources configuration instance. * * @param config MessageResourcesConfig instance to be removed * * @exception IllegalStateException if this module configuration * has been frozen */ public void removeMessageResourcesConfig(MessageResourcesConfig config) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } messageResources.remove(config.getKey()); } // ----------------------------------------------------- Instance Variables // Instance Variables at end to make comparing Interface and implementation easier. /** * The set of action configurations for this module, if any, * keyed by the path property. */ protected HashMap actionConfigs = null; /** * The set of action configurations for this module, if any, * listed in the order in which they are added. */ protected List actionConfigList = null; /** * The set of JDBC data source configurations for this * module, if any, keyed by the key property. */ protected HashMap dataSources = null; /** * The set of exception handling configurations for this * module, if any, keyed by the type property. */ protected HashMap exceptions = null; /** * The set of form bean configurations for this module, if any, * keyed by the name property. */ protected HashMap formBeans = null; /** * The set of global forward configurations for this module, if any, * keyed by the name property. */ protected HashMap forwards = null; /** * The set of message resources configurations for this * module, if any, keyed by the key property. */ protected HashMap messageResources = null; /** * The set of configured plug-in Actions for this module, * if any, in the order they were declared and configured. */ protected ArrayList plugIns = null; /** * Has this module been completely configured yet. Once this flag * has been set, any attempt to modify the configuration will return an * IllegalStateException. */ protected boolean configured = false; /** * The controller configuration object for this module. */ protected ControllerConfig controllerConfig = null; /** * The prefix of the context-relative portion of the request URI, used to * select this configuration versus others supported by the controller * servlet. A configuration with a prefix of a zero-length String is the * default configuration for this web module. */ protected String prefix = null; /** * The default class name to be used when creating action form bean * instances. */ protected String actionFormBeanClass = "org.apache.struts.action.ActionFormBean"; /** * The default class name to be used when creating action mapping instances. */ protected String actionMappingClass = "org.apache.struts.action.ActionMapping"; /** * The default class name to be used when creating action forward instances. */ protected String actionForwardClass = "org.apache.struts.action.ActionForward"; /** * Matches action config paths against compiled wildcard patterns */ protected ActionConfigMatcher matcher = null; } libstruts1.2-java-1.2.9/src/share/org/apache/struts/config/ActionConfig.java0000644000175000017500000006021210404045210027373 0ustar arnaudarnaud00000000000000/* * $Id: ActionConfig.java 377805 2006-02-14 19:26:15Z niallp $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.config; import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; /** *

      A JavaBean representing the configuration information of an * <action> element from a Struts * module configuration file.

      * * @version $Rev: 377805 $ $Date: 2006-02-14 19:26:15 +0000 (Tue, 14 Feb 2006) $ * @since Struts 1.1 */ public class ActionConfig implements Serializable { // ----------------------------------------------------- Instance Variables /** * Indicates if configuration of this component been completed. */ protected boolean configured = false; /** * The set of exception handling configurations for this * action, if any, keyed by the type property. */ protected HashMap exceptions = new HashMap(); /** * The set of local forward configurations for this action, if any, * keyed by the name property. */ protected HashMap forwards = new HashMap(); // ------------------------------------------------------------- Properties /** * The module configuration with which we are associated. */ protected ModuleConfig moduleConfig = null; /** * The module configuration with which we are associated. */ public ModuleConfig getModuleConfig() { return (this.moduleConfig); } /** * The module configuration with which we are associated. */ public void setModuleConfig(ModuleConfig moduleConfig) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.moduleConfig = moduleConfig; } /** * The request-scope or session-scope attribute name under which our * form bean is accessed, if it is different from the form bean's * specified name. */ protected String attribute = null; /** * Returns the request-scope or session-scope attribute name under which our * form bean is accessed, if it is different from the form bean's * specified name. * @return attribute name under which our form bean is accessed. */ public String getAttribute() { if (this.attribute == null) { return (this.name); } else { return (this.attribute); } } /** * Set the request-scope or session-scope attribute name under which our * form bean is accessed, if it is different from the form bean's * specified name. * @param attribute the request-scope or session-scope attribute name under which our * form bean is access. */ public void setAttribute(String attribute) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.attribute = attribute; } /** * Context-relative path of the web application resource that will process * this request via RequestDispatcher.forward(), instead of instantiating * and calling the Action class specified by "type". * Exactly one of forward, include, or * type must be specified. */ protected String forward = null; /** * Returns context-relative path of the web application resource that will process * this request. * @return context-relative path of the web application resource that will process * this request. */ public String getForward() { return (this.forward); } /** * Set the context-relative path of the web application resource that will process * this request. * Exactly one of forward, include, or * type must be specified. * @param forward context-relative path of the web application resource that will process * this request. */ public void setForward(String forward) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.forward = forward; } /** * Context-relative path of the web application resource that will process * this request via RequestDispatcher.include(), instead of instantiating * and calling the Action class specified by "type". * Exactly one of forward, include, or * type must be specified. */ protected String include = null; /** * Context-relative path of the web application resource that will process * this request. * @return Context-relative path of the web application resource that will process * this request. */ public String getInclude() { return (this.include); } /** * Set context-relative path of the web application resource that will process * this request. * Exactly one of forward, include, or * type must be specified. * @param include context-relative path of the web application resource that will process * this request. */ public void setInclude(String include) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.include = include; } /** * Context-relative path of the input form to which control should be * returned if a validation error is encountered. Required if "name" * is specified and the input bean returns validation errors. */ protected String input = null; /** * Get the context-relative path of the input form to which control should be * returned if a validation error is encountered. * @return context-relative path of the input form to which control should be * returned if a validation error is encountered. */ public String getInput() { return (this.input); } /** * Set the context-relative path of the input form to which control should be * returned if a validation error is encountered. Required if "name" * is specified and the input bean returns validation errors. * @param input context-relative path of the input form to which control should be * returned if a validation error is encountered. */ public void setInput(String input) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.input = input; } /** * Fully qualified Java class name of the * MultipartRequestHandler implementation class used to * process multi-part request data for this Action. */ protected String multipartClass = null; /** * Return the fully qualified Java class name of the * MultipartRequestHandler implementation class used to * process multi-part request data for this Action. */ public String getMultipartClass() { return (this.multipartClass); } /** * Set the fully qualified Java class name of the * MultipartRequestHandler implementation class used to * process multi-part request data for this Action. * @param multipartClass fully qualified class name of the * MultipartRequestHandler implementation class. */ public void setMultipartClass(String multipartClass) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.multipartClass = multipartClass; } /** * Name of the form bean, if any, associated with this Action. */ protected String name = null; /** * Return name of the form bean, if any, associated with this Action. */ public String getName() { return (this.name); } /** * @param name name of the form bean associated with this Action. */ public void setName(String name) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.name = name; } /** * General purpose configuration parameter that can be used to pass * extra information to the Action instance selected by this Action. * Struts does not itself use this value in any way. */ protected String parameter = null; /** * Return general purpose configuration parameter that can be used to pass * extra information to the Action instance selected by this Action. * Struts does not itself use this value in any way. */ public String getParameter() { return (this.parameter); } /** * General purpose configuration parameter that can be used to pass * extra information to the Action instance selected by this Action. * Struts does not itself use this value in any way. * @param parameter General purpose configuration parameter. */ public void setParameter(String parameter) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.parameter = parameter; } /** * Context-relative path of the submitted request, starting with a * slash ("/") character, and omitting any filename extension if * extension mapping is being used. */ protected String path = null; /** * Return context-relative path of the submitted request, starting with a * slash ("/") character, and omitting any filename extension if * extension mapping is being used. */ public String getPath() { return (this.path); } /** * Set context-relative path of the submitted request, starting with a * slash ("/") character, and omitting any filename extension if * extension mapping is being used. * @param path context-relative path of the submitted request. */ public void setPath(String path) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.path = path; } /** * Prefix used to match request parameter names to form bean property * names, if any. */ protected String prefix = null; /** * Retruns prefix used to match request parameter names to form bean property * names, if any. */ public String getPrefix() { return (this.prefix); } /** * @param prefix Prefix used to match request parameter names to * form bean property names, if any. */ public void setPrefix(String prefix) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.prefix = prefix; } /** * Comma-delimited list of security role names allowed to request * this Action. */ protected String roles = null; public String getRoles() { return (this.roles); } public void setRoles(String roles) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.roles = roles; if (roles == null) { roleNames = new String[0]; return; } ArrayList list = new ArrayList(); while (true) { int comma = roles.indexOf(','); if (comma < 0) break; list.add(roles.substring(0, comma).trim()); roles = roles.substring(comma + 1); } roles = roles.trim(); if (roles.length() > 0) list.add(roles); roleNames = (String[]) list.toArray(new String[list.size()]); } /** * The set of security role names used to authorize access to this * Action, as an array for faster access. */ protected String[] roleNames = new String[0]; /** * Get array of security role names used to authorize access to this * Action. */ public String[] getRoleNames() { return (this.roleNames); } /** * Identifier of the scope ("request" or "session") within which * our form bean is accessed, if any. */ protected String scope = "session"; /** * Get the scope ("request" or "session") within which * our form bean is accessed, if any. */ public String getScope() { return (this.scope); } /** * @param scope scope ("request" or "session") within which * our form bean is accessed, if any. */ public void setScope(String scope) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.scope = scope; } /** * Suffix used to match request parameter names to form bean property * names, if any. */ protected String suffix = null; /** * Return suffix used to match request parameter names to form bean property * names, if any. */ public String getSuffix() { return (this.suffix); } /** * @param suffix Suffix used to match request parameter names to form bean property * names, if any. */ public void setSuffix(String suffix) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.suffix = suffix; } /** * Fully qualified Java class name of the Action class * to be used to process requests for this mapping if the * forward and include properties are not set. * Exactly one of forward, include, or * type must be specified. */ protected String type = null; public String getType() { return (this.type); } public void setType(String type) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.type = type; } /** * Indicates Action be configured as the default one for this * module, when true. */ protected boolean unknown = false; /** * Determine whether Action is configured as the default one for this * module. */ public boolean getUnknown() { return (this.unknown); } /** * @param unknown Indicates Action is configured as the default one for this * module, when true. */ public void setUnknown(boolean unknown) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.unknown = unknown; } /** * Should the validate() method of the form bean associated * with this action be called? */ protected boolean validate = true; public boolean getValidate() { return (this.validate); } public void setValidate(boolean validate) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.validate = validate; } /** *

      Can this Action be cancelled? [false]

      By default, when an * Action is cancelled, validation is bypassed and the Action should not * execute the business operation. If a request tries to cancel an Action * when cancellable is not set, a "InvalidCancelException" is thrown.

      * @since Struts 1.2.9 */ protected boolean cancellable = false; /** *

      Accessor for cancellable property

      * * @return True if Action can be cancelled * @since Struts 1.2.9 */ public boolean getCancellable() { return (this.cancellable); } /** *

      Mutator for for cancellable property

      * * @param cancellable * @since Struts 1.2.9 */ public void setCancellable(boolean cancellable) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.cancellable = cancellable; } // --------------------------------------------------------- Public Methods /** * Add a new ExceptionConfig instance to the set associated * with this action. * * @param config The new configuration instance to be added * * @exception IllegalStateException if this module configuration * has been frozen */ public void addExceptionConfig(ExceptionConfig config) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } exceptions.put(config.getType(), config); } /** * Add a new ForwardConfig instance to the set of global * forwards associated with this action. * * @param config The new configuration instance to be added * * @exception IllegalStateException if this module configuration * has been frozen */ public void addForwardConfig(ForwardConfig config) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } forwards.put(config.getName(), config); } /** * Return the exception configuration for the specified type, if any; * otherwise return null. * * @param type Exception class name to find a configuration for */ public ExceptionConfig findExceptionConfig(String type) { return ((ExceptionConfig) exceptions.get(type)); } /** * Return the exception configurations for this action. If there * are none, a zero-length array is returned. */ public ExceptionConfig[] findExceptionConfigs() { ExceptionConfig results[] = new ExceptionConfig[exceptions.size()]; return ((ExceptionConfig[]) exceptions.values().toArray(results)); } /** *

      Find and return the ExceptionConfig instance defining * how Exceptions of the specified type should be handled. * This is performed by checking local and then global configurations for * the specified exception's class, and then looking up the superclass chain * (again checking local and then global configurations). If no handler * configuration can be found, return null.

      * *

      Introduced in ActionMapping in Struts 1.1, but pushed * up to ActionConfig in Struts 1.2.0.

      * * @param type Exception class for which to find a handler * @since Struts 1.2.0 */ public ExceptionConfig findException(Class type) { // Check through the entire superclass hierarchy as needed ExceptionConfig config = null; while (true) { // Check for a locally defined handler String name = type.getName(); config = findExceptionConfig(name); if (config != null) { return (config); } // Check for a globally defined handler config = getModuleConfig().findExceptionConfig(name); if (config != null) { return (config); } // Loop again for our superclass (if any) type = type.getSuperclass(); if (type == null) { break; } } return (null); // No handler has been configured } /** * Return the forward configuration for the specified key, if any; * otherwise return null. * * @param name Name of the forward configuration to return */ public ForwardConfig findForwardConfig(String name) { return ((ForwardConfig) forwards.get(name)); } /** * Return all forward configurations for this module. If there * are none, a zero-length array is returned. */ public ForwardConfig[] findForwardConfigs() { ForwardConfig results[] = new ForwardConfig[forwards.size()]; return ((ForwardConfig[]) forwards.values().toArray(results)); } /** * Freeze the configuration of this action. */ public void freeze() { configured = true; ExceptionConfig[] econfigs = findExceptionConfigs(); for (int i = 0; i < econfigs.length; i++) { econfigs[i].freeze(); } ForwardConfig[] fconfigs = findForwardConfigs(); for (int i = 0; i < fconfigs.length; i++) { fconfigs[i].freeze(); } } /** * Remove the specified exception configuration instance. * * @param config ExceptionConfig instance to be removed * * @exception IllegalStateException if this module configuration * has been frozen */ public void removeExceptionConfig(ExceptionConfig config) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } exceptions.remove(config.getType()); } /** * Remove the specified forward configuration instance. * * @param config ForwardConfig instance to be removed * * @exception IllegalStateException if this module configuration * has been frozen */ public void removeForwardConfig(ForwardConfig config) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } forwards.remove(config.getName()); } /** * Return a String representation of this object. */ public String toString() { StringBuffer sb = new StringBuffer("ActionConfig["); sb.append("path="); sb.append(path); if (attribute != null) { sb.append(",attribute="); sb.append(attribute); } if (forward != null) { sb.append(",forward="); sb.append(forward); } if (include != null) { sb.append(",include="); sb.append(include); } if (input != null) { sb.append(",input="); sb.append(input); } if (multipartClass != null) { sb.append(",multipartClass="); sb.append(multipartClass); } if (name != null) { sb.append(",name="); sb.append(name); } if (parameter != null) { sb.append(",parameter="); sb.append(parameter); } if (prefix != null) { sb.append(",prefix="); sb.append(prefix); } if (roles != null) { sb.append(",roles="); sb.append(roles); } if (scope != null) { sb.append(",scope="); sb.append(scope); } if (suffix != null) { sb.append(",suffix="); sb.append(suffix); } if (type != null) { sb.append(",type="); sb.append(type); } sb.append(",validate="); sb.append(validate); sb.append(",cancellable="); sb.append(cancellable); return (sb.toString()); } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/config/ActionConfigMatcher.java0000644000175000017500000002074010404045210030701 0ustar arnaudarnaud00000000000000/* * $Id: ActionConfigMatcher.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 2003,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.config; import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.commons.beanutils.BeanUtils; import org.apache.struts.action.ActionForward; import org.apache.struts.util.WildcardHelper; /** * Matches paths against pre-compiled wildcard expressions pulled from * action configs. It uses the wildcard matcher from the Apache * Cocoon project. * * @since Struts 1.2 */ public class ActionConfigMatcher implements Serializable { /** * The logging instance */ private static final Log log = LogFactory.getLog(ActionConfigMatcher.class); /** * Handles all wildcard pattern matching. */ private static final WildcardHelper wildcard = new WildcardHelper(); /** * The compiled paths and their associated ActionConfig's */ private List compiledPaths; /** * Finds and precompiles the wildcard patterns from the ActionConfig * "path" attributes. * ActionConfig's will be evaluated in the order they exist in the * Struts config file. Only paths that actually contain a wildcard * will be compiled. * * @param configs An array of ActionConfig's to process */ public ActionConfigMatcher(ActionConfig[] configs) { compiledPaths = new ArrayList(); int[] pattern; String path; for (int x = 0; x < configs.length; x++) { path = configs[x].getPath(); if (path != null && path.indexOf('*') > -1) { if (path.length() > 0 && path.charAt(0) == '/') { path = path.substring(1); } if (log.isDebugEnabled()) { log.debug("Compiling action config path '" + path + "'"); } pattern = wildcard.compilePattern(path); compiledPaths.add(new Mapping(pattern, configs[x])); } } } /** * Matches the path against the compiled wildcard patterns. * * @param path The portion of the request URI for selecting a config. * @return The action config if matched, else null */ public ActionConfig match(String path) { ActionConfig config = null; if (compiledPaths.size() > 0) { if (log.isDebugEnabled()) { log.debug("Attempting to match '" + path + "' to a wildcard pattern"); } if (path.length() > 0 && path.charAt(0) == '/') { path = path.substring(1); } Mapping m; HashMap vars = new HashMap(); for (Iterator i = compiledPaths.iterator(); i.hasNext();) { m = (Mapping) i.next(); if (wildcard.match(vars, path, m.getPattern())) { config = convertActionConfig( path, (ActionConfig) m.getActionConfig(), vars); } } } return config; } /** * Clones the ActionConfig and its children, replacing various properties * with the values of the wildcard-matched strings. * * @param path The requested path * @param orig The original ActionConfig * @param vars A Map of wildcard-matched strings * @return A cloned ActionConfig with appropriate properties replaced * with wildcard-matched values */ protected ActionConfig convertActionConfig(String path, ActionConfig orig, Map vars) { ActionConfig config = null; try { config = (ActionConfig) BeanUtils.cloneBean(orig); } catch (Exception ex) { log.warn("Unable to clone action config, recommend not using " + "wildcards", ex); return null; } config.setName(convertParam(orig.getName(), vars)); if (path.length() == 0 || path.charAt(0) != '/') { path = "/" + path; } config.setPath(path); config.setType(convertParam(orig.getType(), vars)); config.setRoles(convertParam(orig.getRoles(), vars)); config.setParameter(convertParam(orig.getParameter(), vars)); config.setAttribute(convertParam(orig.getAttribute(), vars)); config.setForward(convertParam(orig.getForward(), vars)); config.setInclude(convertParam(orig.getInclude(), vars)); config.setInput(convertParam(orig.getInput(), vars)); ForwardConfig[] fConfigs = orig.findForwardConfigs(); ForwardConfig cfg; for (int x = 0; x < fConfigs.length; x++) { cfg = new ActionForward(); cfg.setContextRelative(fConfigs[x].getContextRelative()); cfg.setName(fConfigs[x].getName()); cfg.setPath(convertParam(fConfigs[x].getPath(), vars)); cfg.setRedirect(fConfigs[x].getRedirect()); config.removeForwardConfig(fConfigs[x]); config.addForwardConfig(cfg); } ExceptionConfig[] exConfigs = orig.findExceptionConfigs(); for (int x = 0; x < exConfigs.length; x++) { config.addExceptionConfig(exConfigs[x]); } config.freeze(); return config; } /** * Inserts into a value wildcard-matched strings where specified. * * @param val The value to convert * @param vars A Map of wildcard-matched strings * @return The new value */ protected String convertParam(String val, Map vars) { if (val == null) { return null; } else if (val.indexOf("{") == -1) { return val; } Map.Entry entry; StringBuffer key = new StringBuffer("{0}"); StringBuffer ret = new StringBuffer(val); String keyTmp; int x; for (Iterator i = vars.entrySet().iterator(); i.hasNext();) { entry = (Map.Entry) i.next(); key.setCharAt(1, ((String) entry.getKey()).charAt(0)); keyTmp = key.toString(); // Replace all instances of the placeholder while ((x = ret.toString().indexOf(keyTmp)) > -1) { ret.replace(x, x + 3, (String) entry.getValue()); } } return ret.toString(); } /** * Stores a compiled wildcard pattern and the ActionConfig it came from. */ private class Mapping implements Serializable { /** The compiled pattern. */ private int[] pattern; /** The original ActionConfig. */ private ActionConfig config; /** * Contructs a read-only Mapping instance. * * @param pattern The compiled pattern * @param config The original ActionConfig */ public Mapping(int[] pattern, ActionConfig config) { this.pattern = pattern; this.config = config; } /** * Gets the compiled wildcard pattern. * * @return The compiled pattern */ public int[] getPattern() { return this.pattern; } /** * Gets the ActionConfig that contains the pattern. * * @return The associated ActionConfig */ public ActionConfig getActionConfig() { return this.config; } } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/config/ConfigHelper.java0000644000175000017500000004276610404045210027413 0ustar arnaudarnaud00000000000000/* * $Id: ConfigHelper.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.config; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import javax.sql.DataSource; import org.apache.struts.Globals; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionFormBean; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessages; import org.apache.struts.upload.MultipartRequestWrapper; import org.apache.struts.util.MessageResources; import org.apache.struts.util.RequestUtils; /** * NOTE: THIS CLASS IS UNDER ACTIVE DEVELOPMENT. * THE CURRENT CODE IS WRITTEN FOR CLARITY NOT EFFICIENCY. * NOT EVERY API FUNCTION HAS BEEN IMPLEMENTED YET. * * A helper object to expose the Struts shared resources, * which are be stored in the application, session, or * request contexts, as appropriate. * * An instance should be created for each request * processed. The methods which return resources from * the request or session contexts are not thread-safe. * * Provided for use by other servlets in the application * so they can easily access the Struts shared resources. * * The resources are stored under attributes in the * application, session, or request contexts. * * The ActionConfig methods simply return the resources * from under the context and key used by the Struts * ActionServlet when the resources are created. * * @since Struts 1.1 * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class ConfigHelper implements ConfigHelperInterface { // -------------------------------------------------------- Properites /** * The application associated with this instance. */ private ServletContext application = null; /** * Set the application associated with this instance. * [servlet.getServletContext()] */ public void setApplication(ServletContext application) { this.application = application; } /** * The session associated with this instance. */ private HttpSession session = null; /** * Set the session associated with this instance. */ public void setSession(HttpSession session) { this.session = session; } /** * The request associated with this instance. */ private HttpServletRequest request = null; /** * Set the request associated with this object. * Session object is also set or cleared. */ public void setRequest(HttpServletRequest request) { this.request = request; if (this.request == null) setSession(null); else setSession(this.request.getSession()); } /** * The response associated with this instance. */ private HttpServletResponse response = null; /** * Set the response associated with this isntance. * Session object is also set or cleared. */ public void setResponse(HttpServletResponse response) { this.response = response; } /** * The forward associated with this instance. */ private ActionForward forward = null; /** * Set the forward associated with this instance. */ public void setForward(ActionForward forward) { this.forward = forward; } /** * Set the application and request for this object instance. * The ServletContext can be set by any servlet in the application. * The request should be the instant request. * Most of the other methods retrieve their own objects * by reference to the application, request, or session * attributes. * Do not call other methods without setting these first! * This is also called by the convenience constructor. * * @param application - The associated ServletContext. * @param request - The associated HTTP request. * @param response - The associated HTTP response. */ public void setResources( ServletContext application, HttpServletRequest request, HttpServletResponse response) { setApplication(application); setRequest(request); setResponse(response); } public ConfigHelper() { super(); } public ConfigHelper( ServletContext application, HttpServletRequest request, HttpServletResponse response) { super(); this.setResources(application, request, response); } // ------------------------------------------------ Application Context /** * The default * configured data source (which must implement * javax.sql.DataSource), * if one is configured for this application. */ public DataSource getDataSource() { if (this.application == null) return null; return (DataSource) this.application.getAttribute(Globals.DATA_SOURCE_KEY); } public ActionMessages getActionMessages() { if (this.application == null) return null; return (ActionMessages) this.application.getAttribute(Globals.MESSAGE_KEY); } /** * The application resources for this application. */ public MessageResources getMessageResources() { if (this.application == null) { return null; } return (MessageResources) this.application.getAttribute(Globals.MESSAGES_KEY); } /** * The path-mapped pattern (/action/*) or * extension mapped pattern ((*.do) * used to determine our Action URIs in this application. */ public String getServletMapping() { if (this.application == null) { return null; } return (String) this.application.getAttribute(Globals.SERVLET_KEY); } // ---------------------------------------------------- Session Context /** * The transaction token stored in this session, if it is used. */ public String getToken() { if (this.session == null) { return null; } return (String) session.getAttribute(Globals.TRANSACTION_TOKEN_KEY); } // ---------------------------------------------------- Request Context /** * The runtime JspException that may be been thrown by a Struts tag * extension, or compatible presentation extension, and placed * in the request. */ public Throwable getException() { if (this.request == null) { return null; } return (Throwable) this.request.getAttribute(Globals.EXCEPTION_KEY); } /** * The multipart object for this request. */ public MultipartRequestWrapper getMultipartRequestWrapper() { if (this.request == null) { return null; } return (MultipartRequestWrapper) this.request.getAttribute(Globals.MULTIPART_KEY); } /** * The org.apache.struts.ActionMapping * instance for this request. */ public ActionMapping getMapping() { if (this.request == null) { return null; } return (ActionMapping) this.request.getAttribute(Globals.MAPPING_KEY); } // ---------------------------------------------------- Utility Methods /** * Return true if a message string for the specified message key * is present for the user's Locale. * * @param key Message key */ public boolean isMessage(String key) { // Look up the requested MessageResources MessageResources resources = getMessageResources(); if (resources == null) { return false; } // Return the requested message presence indicator return resources.isPresent(RequestUtils.getUserLocale(request, null), key); } /* * Retrieve and return the ActionForm bean associated with * this mapping, creating and stashing one if necessary. If there is no * form bean associated with this mapping, return null. * */ public ActionForm getActionForm() { // Is there a mapping associated with this request? ActionMapping mapping = getMapping(); if (mapping == null) return (null); // Is there a form bean associated with this mapping? String attribute = mapping.getAttribute(); if (attribute == null) return (null); // Look up the existing form bean, if any ActionForm instance = null; if ("request".equals(mapping.getScope())) { instance = (ActionForm) this.request.getAttribute(attribute); } else { instance = (ActionForm) this.session.getAttribute(attribute); } return instance; } /** * Return the form bean definition associated with the specified * logical name, if any; otherwise return null. * * @param name Logical name of the requested form bean definition */ public ActionFormBean getFormBean(String name) { return null; } /** * Return the forwarding associated with the specified logical name, * if any; otherwise return null. * * @param name Logical name of the requested forwarding */ public ActionForward getActionForward(String name) { return null; } /** * Return the mapping associated with the specified request path, if any; * otherwise return null. * * @param path Request path for which a mapping is requested */ public ActionMapping getActionMapping(String path) { return null; } /** * Return the form action converted into an action mapping path. The * value of the action property is manipulated as follows in * computing the name of the requested mapping: *
        *
      • Any filename extension is removed (on the theory that extension * mapping is being used to select the controller servlet).
      • *
      • If the resulting value does not start with a slash, then a * slash is prepended.
      • *
      */ public String getActionMappingName(String action) { String value = action; int question = action.indexOf("?"); if (question >= 0) value = value.substring(0, question); int slash = value.lastIndexOf("/"); int period = value.lastIndexOf("."); if ((period >= 0) && (period > slash)) value = value.substring(0, period); if (value.startsWith("/")) return (value); else return ("/" + value); } /** * Return the form action converted into a server-relative URL. */ public String getActionMappingURL(String action) { StringBuffer value = new StringBuffer(this.request.getContextPath()); // Use our servlet mapping, if one is specified String servletMapping = getServletMapping(); if (servletMapping != null) { String queryString = null; int question = action.indexOf("?"); if (question >= 0) queryString = action.substring(question); String actionMapping = getActionMappingName(action); if (servletMapping.startsWith("*.")) { value.append(actionMapping); value.append(servletMapping.substring(1)); } else if (servletMapping.endsWith("/*")) { value.append(servletMapping.substring(0, servletMapping.length() - 2)); value.append(actionMapping); } if (queryString != null) value.append(queryString); } // Otherwise, assume extension mapping is in use and extension is // already included in the action property else { if (!action.startsWith("/")) value.append("/"); value.append(action); } // Return the completed value return (value.toString()); } /** * Return the url encoded to maintain the user session, if any. */ public String getEncodeURL(String url) { if ((session != null) && (response != null)) { boolean redirect = false; if (forward != null) redirect = forward.getRedirect(); if (redirect) return response.encodeRedirectURL(url); else return response.encodeURL(url); } else return (url); } // ------------------------------------------------ Presentation API /** * Renders the reference for a HTML element */ public String getOrigRef() { // HttpServletRequest request = (HttpServletRequest)pageContext.getRequest(); if (request == null) return null; StringBuffer result = RequestUtils.requestToServerUriStringBuffer(request); return result.toString(); } /** * Renders the reference for a HTML element. */ public String getBaseRef() { if (request == null) return null; StringBuffer result = RequestUtils.requestToServerStringBuffer(request); String path = null; if (forward == null) path = request.getRequestURI(); else path = request.getContextPath() + forward.getPath(); result.append(path); return result.toString(); } /** * Return the path for the specified forward, * otherwise return null. * * @param name Name given to local or global forward. */ public String getLink(String name) { ActionForward forward = getActionForward(name); if (forward == null) return null; StringBuffer path = new StringBuffer(this.request.getContextPath()); path.append(forward.getPath()); // :TODO: What about runtime parameters? return getEncodeURL(path.toString()); } /** * Return the localized message for the specified key, * otherwise return null. * * @param key Message key */ public String getMessage(String key) { MessageResources resources = getMessageResources(); if (resources == null) return null; return resources.getMessage(RequestUtils.getUserLocale(request, null), key); } /** * Look up and return a message string, based on the specified parameters. * * @param key Message key to be looked up and returned * @param args Replacement parameters for this message */ public String getMessage(String key, Object args[]) { MessageResources resources = getMessageResources(); if (resources == null) return null; // Return the requested message if (args == null) return resources.getMessage( RequestUtils.getUserLocale(request, null), key); else return resources.getMessage( RequestUtils.getUserLocale(request, null), key, args); } /** * Return the URL for the specified ActionMapping, * otherwise return null. * * @param path Name given to local or global forward. */ public String getAction(String path) { return getEncodeURL(getActionMappingURL(path)); } // --------------------------------------------- Presentation Wrappers /** * Wrapper for getLink(String) * * @param name Name given to local or global forward. */ public String link(String name) { return getLink(name); } /** * Wrapper for getMessage(String) * * @param key Message key */ public String message(String key) { return getMessage(key); } /** * Wrapper for getMessage(String,Object[]) * * @param key Message key to be looked up and returned * @param args Replacement parameters for this message */ public String message(String key, Object args[]) { return getMessage(key, args); } /** * Wrapper for getAction(String) * * @param path Name given to local or global forward. */ public String action(String path) { return getAction(path); } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/config/ConfigHelperInterface.java0000644000175000017500000001606710404045210031227 0ustar arnaudarnaud00000000000000/* * $Id: ConfigHelperInterface.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.config; import javax.sql.DataSource; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionFormBean; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessages; import org.apache.struts.upload.MultipartRequestWrapper; import org.apache.struts.util.MessageResources; /** * NOTE: THIS CLASS IS UNDER ACTIVE DEVELOPMENT. * THE CURRENT CODE IS WRITTEN FOR CLARITY NOT EFFICIENCY. * NOT EVERY API FUNCTION HAS BEEN IMPLEMENTED YET. * * A helper object to expose the Struts shared resources, * which are be stored in the application, session, or * request contexts, as appropriate. * * An instance should be created for each request * processed. The methods which return resources from * the request or session contexts are not thread-safe. * * Provided for use by other servlets in the application * so they can easily access the Struts shared resources. * * The resources are stored under attributes in the * application, session, or request contexts. * * The ActionConfig methods simply return the resources * from under the context and key used by the Struts * ActionServlet when the resources are created. * * @since Struts 1.1 * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public interface ConfigHelperInterface { // ------------------------------------------------ Application Context public DataSource getDataSource(); /** * The org.apache.struts.action.ActionFormBeans collection * for this application. */ public ActionMessages getActionMessages(); /** * The application resources for this application. */ public MessageResources getMessageResources(); /** * The path-mapped pattern (/action/*) or * extension mapped pattern ((*.do) * used to determine our Action URIs in this application. */ public String getServletMapping(); // ---------------------------------------------------- Session Context /** * The transaction token stored in this session, if it is used. */ public String getToken(); // ---------------------------------------------------- Request Context /** * The runtime JspException that may be been thrown by a Struts tag * extension, or compatible presentation extension, and placed * in the request. */ public Throwable getException(); /** * The multipart object for this request. */ public MultipartRequestWrapper getMultipartRequestWrapper(); /** * The org.apache.struts.ActionMapping * instance for this request. */ public ActionMapping getMapping(); // ---------------------------------------------------- Utility Methods /** * Return true if a message string for the specified message key * is present for the user's Locale. * * @param key Message key */ public boolean isMessage(String key); /* * Retrieve and return the ActionForm bean associated with * this mapping, creating and stashing one if necessary. If there is no * form bean associated with this mapping, return null. * */ public ActionForm getActionForm(); /** * Return the form bean definition associated with the specified * logical name, if any; otherwise return null. * * @param name Logical name of the requested form bean definition */ public ActionFormBean getFormBean(String name); /** * Return the forwarding associated with the specified logical name, * if any; otherwise return null. * * @param name Logical name of the requested forwarding */ public ActionForward getActionForward(String name); /** * Return the mapping associated with the specified request path, if any; * otherwise return null. * * @param path Request path for which a mapping is requested */ public ActionMapping getActionMapping(String path); /** * Return the form action converted into an action mapping path. The * value of the action property is manipulated as follows in * computing the name of the requested mapping: *
        *
      • Any filename extension is removed (on the theory that extension * mapping is being used to select the controller servlet).
      • *
      • If the resulting value does not start with a slash, then a * slash is prepended.
      • *
      * :FIXME: Bad assumption =:o) */ public String getActionMappingName(String action); /** * Return the form action converted into a server-relative URL. */ public String getActionMappingURL(String action); /** * Return the url encoded to maintain the user session, if any. */ public String getEncodeURL(String url); // ------------------------------------------------ Presentation API /** * Renders the reference for a HTML element */ public String getOrigRef(); /** * Renders the reference for a HTML element */ public String getBaseRef(); /** * Return the path for the specified forward, * otherwise return null. * * @param name Name given to local or global forward. */ public String getLink(String name); /** * Return the localized message for the specified key, * otherwise return null. * * @param key Message key */ public String getMessage(String key); /** * Look up and return a message string, based on the specified parameters. * * @param key Message key to be looked up and returned * @param args Replacement parameters for this message */ public String getMessage(String key, Object args[]); /** * Return the URL for the specified ActionMapping, * otherwise return null. * * @param path Name given to local or global forward. */ public String getAction(String path); } libstruts1.2-java-1.2.9/src/share/org/apache/struts/config/ConfigRuleSet.java0000644000175000017500000004012310404045246027551 0ustar arnaudarnaud00000000000000/* * $Id: ConfigRuleSet.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 2000-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.config; import org.apache.commons.digester.AbstractObjectCreationFactory; import org.apache.commons.digester.Digester; import org.apache.commons.digester.Rule; import org.apache.commons.digester.RuleSetBase; import org.apache.struts.util.RequestUtils; import org.xml.sax.Attributes; /** *

      The set of Digester rules required to parse a Struts * configuration file (struts-config.xml).

      * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ * @since Struts 1.1 */ public class ConfigRuleSet extends RuleSetBase { // --------------------------------------------------------- Public Methods /** *

      Add the set of Rule instances defined in this RuleSet to the * specified Digester instance, associating them with * our namespace URI (if any). This method should only be called * by a Digester instance. These rules assume that an instance of * org.apache.struts.config.ModuleConfig is pushed * onto the evaluation stack before parsing begins.

      * * @param digester Digester instance to which the new Rule instances * should be added. */ public void addRuleInstances(Digester digester) { digester.addObjectCreate ("struts-config/data-sources/data-source", "org.apache.struts.config.DataSourceConfig", "className"); digester.addSetProperties ("struts-config/data-sources/data-source"); digester.addSetNext ("struts-config/data-sources/data-source", "addDataSourceConfig", "org.apache.struts.config.DataSourceConfig"); digester.addRule ("struts-config/data-sources/data-source/set-property", new AddDataSourcePropertyRule()); digester.addRule ("struts-config/action-mappings", new SetActionMappingClassRule()); digester.addFactoryCreate ("struts-config/action-mappings/action", new ActionMappingFactory()); digester.addSetProperties ("struts-config/action-mappings/action"); digester.addSetNext ("struts-config/action-mappings/action", "addActionConfig", "org.apache.struts.config.ActionConfig"); digester.addSetProperty ("struts-config/action-mappings/action/set-property", "property", "value"); digester.addObjectCreate ("struts-config/action-mappings/action/exception", "org.apache.struts.config.ExceptionConfig", "className"); digester.addSetProperties ("struts-config/action-mappings/action/exception"); digester.addSetNext ("struts-config/action-mappings/action/exception", "addExceptionConfig", "org.apache.struts.config.ExceptionConfig"); digester.addSetProperty ("struts-config/action-mappings/action/exception/set-property", "property", "value"); digester.addFactoryCreate ("struts-config/action-mappings/action/forward", new ActionForwardFactory()); digester.addSetProperties ("struts-config/action-mappings/action/forward"); digester.addSetNext ("struts-config/action-mappings/action/forward", "addForwardConfig", "org.apache.struts.config.ForwardConfig"); digester.addSetProperty ("struts-config/action-mappings/action/forward/set-property", "property", "value"); digester.addObjectCreate ("struts-config/controller", "org.apache.struts.config.ControllerConfig", "className"); digester.addSetProperties ("struts-config/controller"); digester.addSetNext ("struts-config/controller", "setControllerConfig", "org.apache.struts.config.ControllerConfig"); digester.addSetProperty ("struts-config/controller/set-property", "property", "value"); digester.addRule ("struts-config/form-beans", new SetActionFormBeanClassRule()); digester.addFactoryCreate ("struts-config/form-beans/form-bean", new ActionFormBeanFactory()); digester.addSetProperties ("struts-config/form-beans/form-bean"); digester.addSetNext ("struts-config/form-beans/form-bean", "addFormBeanConfig", "org.apache.struts.config.FormBeanConfig"); digester.addObjectCreate ("struts-config/form-beans/form-bean/form-property", "org.apache.struts.config.FormPropertyConfig", "className"); digester.addSetProperties ("struts-config/form-beans/form-bean/form-property"); digester.addSetNext ("struts-config/form-beans/form-bean/form-property", "addFormPropertyConfig", "org.apache.struts.config.FormPropertyConfig"); digester.addSetProperty ("struts-config/form-beans/form-bean/form-property/set-property", "property", "value"); digester.addSetProperty ("struts-config/form-beans/form-bean/set-property", "property", "value"); digester.addObjectCreate ("struts-config/global-exceptions/exception", "org.apache.struts.config.ExceptionConfig", "className"); digester.addSetProperties ("struts-config/global-exceptions/exception"); digester.addSetNext ("struts-config/global-exceptions/exception", "addExceptionConfig", "org.apache.struts.config.ExceptionConfig"); digester.addSetProperty ("struts-config/global-exceptions/exception/set-property", "property", "value"); digester.addRule ("struts-config/global-forwards", new SetActionForwardClassRule()); digester.addFactoryCreate ("struts-config/global-forwards/forward", new GlobalForwardFactory()); digester.addSetProperties ("struts-config/global-forwards/forward"); digester.addSetNext ("struts-config/global-forwards/forward", "addForwardConfig", "org.apache.struts.config.ForwardConfig"); digester.addSetProperty ("struts-config/global-forwards/forward/set-property", "property", "value"); digester.addObjectCreate ("struts-config/message-resources", "org.apache.struts.config.MessageResourcesConfig", "className"); digester.addSetProperties ("struts-config/message-resources"); digester.addSetNext ("struts-config/message-resources", "addMessageResourcesConfig", "org.apache.struts.config.MessageResourcesConfig"); digester.addSetProperty ("struts-config/message-resources/set-property", "property", "value"); digester.addObjectCreate ("struts-config/plug-in", "org.apache.struts.config.PlugInConfig"); digester.addSetProperties ("struts-config/plug-in"); digester.addSetNext ("struts-config/plug-in", "addPlugInConfig", "org.apache.struts.config.PlugInConfig"); digester.addRule ("struts-config/plug-in/set-property", new PlugInSetPropertyRule()); } } /** * Class that calls addProperty() for the top object * on the stack, which must be a * org.apache.struts.config.DataSourceConfig. */ final class AddDataSourcePropertyRule extends Rule { public AddDataSourcePropertyRule() { super(); } public void begin(String namespace, String name, Attributes attributes) throws Exception { DataSourceConfig dsc = (DataSourceConfig) digester.peek(); dsc.addProperty(attributes.getValue("property"), attributes.getValue("value")); } } /** * Class that records the name and value of a configuration property to be * used in configuring a PlugIn instance when instantiated. */ final class PlugInSetPropertyRule extends Rule { public PlugInSetPropertyRule() { super(); } public void begin(String namespace, String names, Attributes attributes) throws Exception { PlugInConfig plugInConfig = (PlugInConfig) digester.peek(); plugInConfig.addProperty(attributes.getValue("property"), attributes.getValue("value")); } } /** * Class that sets the name of the class to use when creating action form bean * instances. The value is set on the object on the top of the stack, which * must be a org.apache.struts.config.ModuleConfig. */ final class SetActionFormBeanClassRule extends Rule { public SetActionFormBeanClassRule() { super(); } public void begin(String namespace, String name, Attributes attributes) throws Exception { String className = attributes.getValue("type"); if (className != null) { ModuleConfig mc = (ModuleConfig) digester.peek(); mc.setActionFormBeanClass(className); } } } /** * An object creation factory which creates action form bean instances, taking * into account the default class name, which may have been specified on the * parent element and which is made available through the object on the top * of the stack, which must be a * org.apache.struts.config.ModuleConfig. */ final class ActionFormBeanFactory extends AbstractObjectCreationFactory { public Object createObject(Attributes attributes) { // Identify the name of the class to instantiate String className = attributes.getValue("className"); if (className == null) { ModuleConfig mc = (ModuleConfig) digester.peek(); className = mc.getActionFormBeanClass(); } // Instantiate the new object and return it Object actionFormBean = null; try { actionFormBean = RequestUtils.applicationInstance(className); } catch (Exception e) { digester.getLogger().error( "ActionFormBeanFactory.createObject: ", e); } return actionFormBean; } } /** * Class that sets the name of the class to use when creating action mapping * instances. The value is set on the object on the top of the stack, which * must be a org.apache.struts.config.ModuleConfig. */ final class SetActionMappingClassRule extends Rule { public SetActionMappingClassRule() { super(); } public void begin(String namespace, String name, Attributes attributes) throws Exception { String className = attributes.getValue("type"); if (className != null) { ModuleConfig mc = (ModuleConfig) digester.peek(); mc.setActionMappingClass(className); } } } /** * An object creation factory which creates action mapping instances, taking * into account the default class name, which may have been specified on the * parent element and which is made available through the object on the top * of the stack, which must be a * org.apache.struts.config.ModuleConfig. */ final class ActionMappingFactory extends AbstractObjectCreationFactory { public Object createObject(Attributes attributes) { // Identify the name of the class to instantiate String className = attributes.getValue("className"); if (className == null) { ModuleConfig mc = (ModuleConfig) digester.peek(); className = mc.getActionMappingClass(); } // Instantiate the new object and return it Object actionMapping = null; try { actionMapping = RequestUtils.applicationInstance(className); } catch (Exception e) { digester.getLogger().error( "ActionMappingFactory.createObject: ", e); } return actionMapping; } } /** * Class that sets the name of the class to use when creating global forward * instances. The value is set on the object on the top of the stack, which * must be a org.apache.struts.config.ModuleConfig. */ final class SetActionForwardClassRule extends Rule { public SetActionForwardClassRule() { super(); } public void begin(String namespace, String name, Attributes attributes) throws Exception { String className = attributes.getValue("type"); if (className != null) { ModuleConfig mc = (ModuleConfig) digester.peek(); mc.setActionForwardClass(className); } } } /** * An object creation factory which creates global forward instances, taking * into account the default class name, which may have been specified on the * parent element and which is made available through the object on the top * of the stack, which must be a * org.apache.struts.config.ModuleConfig. */ final class GlobalForwardFactory extends AbstractObjectCreationFactory { public Object createObject(Attributes attributes) { // Identify the name of the class to instantiate String className = attributes.getValue("className"); if (className == null) { ModuleConfig mc = (ModuleConfig) digester.peek(); className = mc.getActionForwardClass(); } // Instantiate the new object and return it Object globalForward = null; try { globalForward = RequestUtils.applicationInstance(className); } catch (Exception e) { digester.getLogger().error( "GlobalForwardFactory.createObject: ", e); } return globalForward; } } /** * An object creation factory which creates action forward instances, taking * into account the default class name, which may have been specified on the * parent element and which is made available through the object on the top * of the stack, which must be a * org.apache.struts.config.ModuleConfig. */ final class ActionForwardFactory extends AbstractObjectCreationFactory { public Object createObject(Attributes attributes) { // Identify the name of the class to instantiate String className = attributes.getValue("className"); if (className == null) { ModuleConfig mc = (ModuleConfig) digester.peek(1); className = mc.getActionForwardClass(); } // Instantiate the new object and return it Object actionForward = null; try { actionForward = RequestUtils.applicationInstance(className); } catch (Exception e) { digester.getLogger().error( "ActionForwardFactory.createObject: ", e); } return actionForward; } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/config/ControllerConfig.java0000644000175000017500000002443210404045230030307 0ustar arnaudarnaud00000000000000/* * $Id: ControllerConfig.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.config; import java.io.Serializable; /** *

      A JavaBean representing the configuration information of a * <controller> element in a Struts * configuration file.

      * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ * @since Struts 1.1 */ public class ControllerConfig implements Serializable { // ----------------------------------------------------- Instance Variables /** * Has this component been completely configured? */ protected boolean configured = false; // ------------------------------------------------------------- Properties /** * The input buffer size for file uploads. */ protected int bufferSize = 4096; public int getBufferSize() { return (this.bufferSize); } public void setBufferSize(int bufferSize) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.bufferSize = bufferSize; } /** * The content type and character encoding to be set on each response. */ protected String contentType = "text/html"; public String getContentType() { return (this.contentType); } public void setContentType(String contentType) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.contentType = contentType; } /** *

      The replacement pattern used to determine a context-relative URL * from a {@link ForwardConfig} element. The pattern may consist of any * combination of the following markers and characters:

      *
        *
      • $M - Replaced by the module * prefix for the current module.
      • *
      • $P - Replaced by the path * property of a {@link ForwardConfig} instance.
      • *
      • $$ - Renders a literal dollar sign * ("$") character in the resulting URL.
      • *
      • A dollar sign followed by any other character is reserved for * future use, and both characters are silently swallowed.
      • *
      • All other characters in the pattern are passed through unchanged. *
      • *
      * *

      If this property is set to null, a default pattern of * $M$P is utilized, which is backwards compatible with * the hard coded functionality in prior versions.

      */ protected String forwardPattern = null; public String getForwardPattern() { return (this.forwardPattern); } public void setForwardPattern(String forwardPattern) { this.forwardPattern = forwardPattern; } /** *

      Should the input property of {@link ActionConfig} * instances associated with this module be treated as the * name of a corresponding {@link ForwardConfig}. A false * value treats them as a module-relative path (consistent * with the hard coded behavior of earlier versions of Struts.

      * * @since Struts 1.1 */ protected boolean inputForward = false; public boolean getInputForward() { return (this.inputForward); } public void setInputForward(boolean inputForward) { this.inputForward = inputForward; } /** * Should we store a Locale object in the user's session if needed? */ protected boolean locale = true; public boolean getLocale() { return (this.locale); } public void setLocale(boolean locale) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.locale = locale; } /** * The maximum file size to process for file uploads. */ protected String maxFileSize = "250M"; public String getMaxFileSize() { return (this.maxFileSize); } public void setMaxFileSize(String maxFileSize) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.maxFileSize = maxFileSize; } /** * The maximum file size to retain in memory. */ protected String memFileSize = "256K"; public String getMemFileSize() { return (this.memFileSize); } public void setMemFileSize(String memFileSize) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.memFileSize = memFileSize; } /** * The fully qualified Java class name of the MultipartRequestHandler * class to be used. */ protected String multipartClass = "org.apache.struts.upload.CommonsMultipartRequestHandler"; public String getMultipartClass() { return (this.multipartClass); } public void setMultipartClass(String multipartClass) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.multipartClass = multipartClass; } /** * Should we set no-cache HTTP headers on each response? */ protected boolean nocache = false; public boolean getNocache() { return (this.nocache); } public void setNocache(boolean nocache) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.nocache = nocache; } /** *

      The replacement pattern used to determine a context-relative URL * from the page attribute of Struts tags and configuration * properties. The pattern may consist of any combination of the * following markers and characters:

      *
        *
      • $M - Replaced by the module * prefix for the current module.
      • *
      • $P - Replaced by the page * attribute value being evaluated.
      • *
      • $$ - Renders a literal dollar sign * ("$") character in the resulting URL.
      • *
      • A dollar sign followed by any other character is reserved for * future use, and both characters are silently swallowed.
      • *
      • All other characters in the pattern are passed through unchanged. *
      • *
      * *

      If this property is set to null, a default pattern of * $M$P is utilized, which is backwards compatible with * the hard coded functionality in prior versions.

      */ protected String pagePattern = null; public String getPagePattern() { return (this.pagePattern); } public void setPagePattern(String pagePattern) { this.pagePattern = pagePattern; } /** * The fully qualified class name of the RequestProcessor implementation * class to be used for this module. */ protected String processorClass = "org.apache.struts.action.RequestProcessor"; public String getProcessorClass() { return (this.processorClass); } public void setProcessorClass(String processorClass) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.processorClass = processorClass; } /** * The temporary working directory to use for file uploads. */ protected String tempDir = null; public String getTempDir() { return (this.tempDir); } public void setTempDir(String tempDir) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.tempDir = tempDir; } // --------------------------------------------------------- Public Methods /** * Freeze the configuration of this component. */ public void freeze() { configured = true; } /** * Return a String representation of this object. */ public String toString() { StringBuffer sb = new StringBuffer("ControllerConfig["); sb.append("bufferSize="); sb.append(this.bufferSize); if (this.contentType != null) { sb.append(",contentType="); sb.append(this.contentType); } if (this.forwardPattern != null) { sb.append(",forwardPattern="); sb.append(this.forwardPattern); } sb.append(",inputForward="); sb.append(this.inputForward); sb.append(",locale="); sb.append(this.locale); if (this.maxFileSize != null) { sb.append(",maxFileSize="); sb.append(this.maxFileSize); } if (this.memFileSize != null) { sb.append(",memFileSize="); sb.append(this.memFileSize); } sb.append(",multipartClass="); sb.append(this.multipartClass); sb.append(",nocache="); sb.append(this.nocache); if (this.pagePattern != null) { sb.append(",pagePattern="); sb.append(this.pagePattern); } sb.append(",processorClass="); sb.append(this.processorClass); if (this.tempDir != null) { sb.append(",tempDir="); sb.append(this.tempDir); } sb.append("]"); return (sb.toString()); } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/config/DataSourceConfig.java0000644000175000017500000001004710404045232030215 0ustar arnaudarnaud00000000000000/* * $Id: DataSourceConfig.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.config; import java.io.Serializable; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import org.apache.struts.Globals; /** *

      A JavaBean representing the configuration information of a * <data-source> element from a Struts * configuration file.

      * *

      WARNING - The properties of this configuration bean * are recognized by the default data source implementation, but some or all * of them may be ignored by custom data source implementations.

      * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ * @since Struts 1.1 */ public class DataSourceConfig implements Serializable { // ----------------------------------------------------- Instance Variables /** * Has this component been completely configured? */ protected boolean configured = false; // ------------------------------------------------------------- Properties /** * The servlet context attribute key under which this data source * is stored and made available. */ protected String key = Globals.DATA_SOURCE_KEY; public String getKey() { return (this.key); } public void setKey(String key) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.key = key; } /** * The custom configuration properties for this data source implementation. */ protected HashMap properties = new HashMap(); public Map getProperties() { return (this.properties); } /** * The fully qualified class name of the javax.sql.DataSource * implementation class. */ protected String type; public String getType() { return (this.type); } public void setType(String type) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.type = type; } // --------------------------------------------------------- Public Methods /** * Add a new custom configuration property. * * @param name Custom property name * @param value Custom property value */ public void addProperty(String name, String value) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } properties.put(name, value); } /** * Freeze the configuration of this data source. */ public void freeze() { configured = true; } /** * Return a String representation of this object. */ public String toString() { StringBuffer sb = new StringBuffer("DataSourceConfig["); sb.append("key="); sb.append(key); sb.append(",type="); sb.append(type); Iterator names = properties.keySet().iterator(); while (names.hasNext()) { String name = (String) names.next(); String value = (String) properties.get(name); sb.append(','); sb.append(name); sb.append('='); sb.append(value); } sb.append("]"); return (sb.toString()); } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/config/ExceptionConfig.java0000644000175000017500000001157510404045242030131 0ustar arnaudarnaud00000000000000/* * $Id: ExceptionConfig.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.config; import java.io.Serializable; /** *

      A JavaBean representing the configuration information of an * <exception> element from a Struts * configuration file.

      * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ * @since Struts 1.1 */ public class ExceptionConfig implements Serializable { // ----------------------------------------------------- Instance Variables /** * Has this component been completely configured? */ protected boolean configured = false; // ------------------------------------------------------------- Properties /** * The servlet context attribute under which the message resources bundle * to be used for this exception is located. If not set, the default * message resources for the current module is assumed. */ protected String bundle = null; public String getBundle() { return (this.bundle); } public void setBundle(String bundle) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.bundle = bundle; } /** * The fully qualified Java class name of the exception handler class * which should be instantiated to handle this exception. */ protected String handler = "org.apache.struts.action.ExceptionHandler"; public String getHandler() { return (this.handler); } public void setHandler(String handler) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.handler = handler; } /** * The message resources key specifying the error message * associated with this exception. */ protected String key = null; public String getKey() { return (this.key); } public void setKey(String key) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.key = key; } /** * The module-relative path of the resource to forward to if this * exception occurs during an Action. */ protected String path = null; public String getPath() { return (this.path); } public void setPath(String path) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.path = path; } /** * The scope in which we should expose the ActionError for this exception * handler. */ protected String scope = "request"; public String getScope() { return (this.scope); } public void setScope(String scope) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.scope = scope; } /** * The fully qualified Java class name of the exception that is to be * handled by this handler. */ protected String type = null; public String getType() { return (this.type); } public void setType(String type) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.type = type; } // --------------------------------------------------------- Public Methods /** * Freeze the configuration of this component. */ public void freeze() { configured = true; } /** * Return a String representation of this object. */ public String toString() { StringBuffer sb = new StringBuffer("ExceptionConfig["); sb.append("type="); sb.append(this.type); if (this.bundle != null) { sb.append(",bundle="); sb.append(this.bundle); } sb.append(",key="); sb.append(this.key); sb.append(",path="); sb.append(this.path); sb.append(",scope="); sb.append(this.scope); sb.append("]"); return (sb.toString()); } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/config/FormBeanConfig.java0000644000175000017500000002556010404045230027660 0ustar arnaudarnaud00000000000000/* * $Id: FormBeanConfig.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.config; import java.io.Serializable; import java.util.HashMap; import org.apache.commons.beanutils.DynaBean; import org.apache.commons.beanutils.MutableDynaClass; import org.apache.struts.action.DynaActionForm; import org.apache.struts.action.DynaActionFormClass; import org.apache.struts.action.ActionServlet; import org.apache.struts.action.ActionForm; import org.apache.struts.validator.BeanValidatorForm; /** *

      A JavaBean representing the configuration information of a * <form-bean> element in a Struts * configuration file.

      * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ * @since Struts 1.1 */ public class FormBeanConfig implements Serializable { // ----------------------------------------------------- Instance Variables /** * Has this component been completely configured? */ protected boolean configured = false; /** * The set of FormProperty elements defining dynamic form properties for * this form bean, keyed by property name. */ protected HashMap formProperties = new HashMap(); /** *

      The lockable object we can synchronize on when creating DynaActionFormClass.

      */ protected String lock = ""; // ------------------------------------------------------------- Properties /** * The DynaActionFormClass associated with a DynaActionForm. */ protected transient DynaActionFormClass dynaActionFormClass; /** *

      Return the DynaActionFormClass associated with a DynaActionForm.

      * * @exception IllegalArgumentException if the ActionForm is not dynamic */ public DynaActionFormClass getDynaActionFormClass() { if (dynamic == false) { throw new IllegalArgumentException("ActionForm is not dynamic"); } synchronized (lock) { if (dynaActionFormClass == null) { dynaActionFormClass = new DynaActionFormClass(this); } } return dynaActionFormClass; } /** * Is the form bean class an instance of DynaActionForm with dynamic * properties? */ protected boolean dynamic = false; public boolean getDynamic() { return (this.dynamic); } /** * @deprecated The value to be returned by getDynamic() * is now computed automatically in setType() */ public void setDynamic(boolean dynamic) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } ; // No action required } /** * The unique identifier of this form bean, which is used to reference this * bean in ActionMapping instances as well as for the name of * the request or session attribute under which the corresponding form bean * instance is created or accessed. */ protected String name = null; public String getName() { return (this.name); } public void setName(String name) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.name = name; } /** * The fully qualified Java class name of the implementation class * to be used or generated. */ protected String type = null; public String getType() { return (this.type); } public void setType(String type) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.type = type; Class dynaBeanClass = DynaActionForm.class; Class formBeanClass = formBeanClass(); if (formBeanClass != null) { if (dynaBeanClass.isAssignableFrom(formBeanClass)) { this.dynamic = true; } else { this.dynamic = false; } } else { this.dynamic = false; } } /** * Is this DynaClass currently restricted (for DynaBeans with a MutableDynaClass). */ protected boolean restricted = false; /** *

      Indicates whether a MutableDynaClass is currently restricted.

      *

      If so, no changes to the existing registration of property names, * data types, readability, or writeability are allowed.

      */ public boolean isRestricted() { return restricted; } /** *

      Set whether a MutableDynaClass is currently restricted.

      *

      If so, no changes to the existing registration of property names, * data types, readability, or writeability are allowed.

      */ public void setRestricted(boolean restricted) { this.restricted = restricted; } // --------------------------------------------------------- Public Methods /** *

      Create and return an ActionForm instance appropriate * to the information in this FormBeanConfig.

      * * @param servlet The action servlet * @return ActionForm instance * @exception IllegalAccessException if the Class or the appropriate * constructor is not accessible * @exception InstantiationException if this Class represents an abstract * class, an array class, a primitive type, or void; or if instantiation * fails for some other reason */ public ActionForm createActionForm(ActionServlet servlet) throws IllegalAccessException, InstantiationException { Object obj = null; // Create a new form bean instance if (getDynamic()) { obj = getDynaActionFormClass().newInstance(); } else { obj = formBeanClass().newInstance(); } ActionForm form = null; if (obj instanceof ActionForm) { form = (ActionForm)obj; } else { form = new BeanValidatorForm(obj); } form.setServlet(servlet); if (form instanceof DynaBean && ((DynaBean)form).getDynaClass() instanceof MutableDynaClass) { DynaBean dynaBean = (DynaBean)form; MutableDynaClass dynaClass = (MutableDynaClass)dynaBean.getDynaClass(); // Add properties dynaClass.setRestricted(false); FormPropertyConfig props[] = findFormPropertyConfigs(); for (int i = 0; i < props.length; i++) { dynaClass.add(props[i].getName(), props[i].getTypeClass()); dynaBean.set(props[i].getName(), props[i].initial()); } dynaClass.setRestricted(isRestricted()); } return form; } /** * Add a new FormPropertyConfig instance to the set associated * with this module. * * @param config The new configuration instance to be added * * @exception IllegalArgumentException if this property name has already * been defined */ public void addFormPropertyConfig(FormPropertyConfig config) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } if (formProperties.containsKey(config.getName())) { throw new IllegalArgumentException("Property " + config.getName() + " already defined"); } formProperties.put(config.getName(), config); } /** * Return the form property configuration for the specified property * name, if any; otherwise return null. * * @param name Form property name to find a configuration for */ public FormPropertyConfig findFormPropertyConfig(String name) { return ((FormPropertyConfig) formProperties.get(name)); } /** * Return the form property configurations for this module. If there * are none, a zero-length array is returned. */ public FormPropertyConfig[] findFormPropertyConfigs() { FormPropertyConfig results[] = new FormPropertyConfig[formProperties.size()]; return ((FormPropertyConfig[]) formProperties.values().toArray(results)); } /** * Freeze the configuration of this component. */ public void freeze() { configured = true; FormPropertyConfig[] fpconfigs = findFormPropertyConfigs(); for (int i = 0; i < fpconfigs.length; i++) { fpconfigs[i].freeze(); } } /** * Remove the specified form property configuration instance. * * @param config FormPropertyConfig instance to be removed */ public void removeFormPropertyConfig(FormPropertyConfig config) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } formProperties.remove(config.getName()); } /** * Return a String representation of this object. */ public String toString() { StringBuffer sb = new StringBuffer("FormBeanConfig["); sb.append("name="); sb.append(this.name); sb.append(",type="); sb.append(this.type); sb.append("]"); return (sb.toString()); } // ------------------------------------------------------ Protected Methods /** * Return the Class instance for the form bean implementation * configured by this FormBeanConfig instance. This method * uses the same algorithm as RequestUtils.applicationClass() * but is reproduced to avoid a runtime dependence. */ protected Class formBeanClass() { ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); if (classLoader == null) { classLoader = this.getClass().getClassLoader(); } try { return (classLoader.loadClass(getType())); } catch (Exception e) { return (null); } } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/config/FormPropertyConfig.java0000644000175000017500000002555010404045224030641 0ustar arnaudarnaud00000000000000/* * $Id: FormPropertyConfig.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.config; import java.io.Serializable; import java.lang.reflect.Array; import org.apache.commons.beanutils.ConvertUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** *

      A JavaBean representing the configuration information of a * <form-property> element in a Struts * configuration file.

      * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ * @since Struts 1.1 */ public class FormPropertyConfig implements Serializable { /** * The logging instance */ private static final Log log = LogFactory.getLog(FormPropertyConfig.class); // ----------------------------------------------------------- Constructors /** * Standard no-arguments constructor for dynamic instantiation. */ public FormPropertyConfig() { super(); } /** * Constructor that preconfigures the relevant properties. * * @param name Name of this property * @param type Fully qualified class name of this property * @param initial Initial value of this property (if any) */ public FormPropertyConfig(String name, String type, String initial) { this(name, type, initial, 0); } /** * Constructor that preconfigures the relevant properties. * * @param name Name of this property * @param type Fully qualified class name of this property * @param initial Initial value of this property (if any) * @param size Size of the array to be created if this property is an * array with no defined initial value */ public FormPropertyConfig(String name, String type, String initial, int size) { super(); setName(name); setType(type); setInitial(initial); setSize(size); } // ----------------------------------------------------- Instance Variables /** * Has this component been completely configured? */ protected boolean configured = false; // ------------------------------------------------------------- Properties /** * String representation of the initial value for this property. */ protected String initial = null; public String getInitial() { return (this.initial); } public void setInitial(String initial) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.initial = initial; } /** * The JavaBean property name of the property described by this element. */ protected String name = null; public String getName() { return (this.name); } public void setName(String name) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.name = name; } /** *

      The size of the array to be created if this property is an array * type and there is no specified initial value. This * value must be non-negative.

      * * @since Struts 1.1 */ protected int size = 0; public int getSize() { return (this.size); } public void setSize(int size) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } if (size < 0) { throw new IllegalArgumentException("size < 0"); } this.size = size; } /** * The fully qualified Java class name of the implementation class * of this bean property, optionally followed by [] to * indicate that the property is indexed. */ protected String type = null; public String getType() { return (this.type); } public void setType(String type) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.type = type; } /** * Return a Class corresponds to the value specified for the * type property, taking into account the trailing "[]" * for arrays (as well as the ability to specify primitive Java types). */ public Class getTypeClass() { // Identify the base class (in case an array was specified) String baseType = getType(); boolean indexed = false; if (baseType.endsWith("[]")) { baseType = baseType.substring(0, baseType.length() - 2); indexed = true; } // Construct an appropriate Class instance for the base class Class baseClass = null; if ("boolean".equals(baseType)) { baseClass = Boolean.TYPE; } else if ("byte".equals(baseType)) { baseClass = Byte.TYPE; } else if ("char".equals(baseType)) { baseClass = Character.TYPE; } else if ("double".equals(baseType)) { baseClass = Double.TYPE; } else if ("float".equals(baseType)) { baseClass = Float.TYPE; } else if ("int".equals(baseType)) { baseClass = Integer.TYPE; } else if ("long".equals(baseType)) { baseClass = Long.TYPE; } else if ("short".equals(baseType)) { baseClass = Short.TYPE; } else { ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); if (classLoader == null) { classLoader = this.getClass().getClassLoader(); } try { baseClass = classLoader.loadClass(baseType); } catch (Throwable t) { baseClass = null; } } // Return the base class or an array appropriately if (indexed) { return (Array.newInstance(baseClass, 0).getClass()); } else { return (baseClass); } } // --------------------------------------------------------- Public Methods /** *

      Return an object representing the initial value of this property. * This is calculated according to the following algorithm:

      *
        *
      • If the value you have specified for the type * property represents an array (i.e. it ends with "[]"): *
          *
        • If you have specified a value for the initial * property, ConvertUtils.convert will be * called to convert it into an instance of the specified * array type.
        • *
        • If you have not specified a value for the initial * property, an array of the length specified by the * size property will be created. Each element * of the array will be instantiated via the zero-args constructor * on the specified class (if any). Otherwise, null * will be returned.
        • *
      • *
      • If the value you have specified for the type * property does not represent an array: *
          *
        • If you have specified a value for the initial * property, ConvertUtils.convert * will be called to convert it into an object instance.
        • *
        • If you have not specified a value for the initial * attribute, Struts will instantiate an instance via the * zero-args constructor on the specified class (if any). * Otherwise, null will be returned.
        • *
      • *
      */ public Object initial() { Object initialValue = null; try { Class clazz = getTypeClass(); if (clazz.isArray()) { if (initial != null) { initialValue = ConvertUtils.convert(initial, clazz); } else { initialValue = Array.newInstance(clazz.getComponentType(), size); if (!(clazz.getComponentType().isPrimitive())) { for (int i = 0; i < size; i++) { try { Array.set(initialValue, i, clazz.getComponentType().newInstance()); } catch (Throwable t) { log.error("Unable to create instance of " + clazz.getName() + " for property=" + name+ ", type=" + type + ", initial=" + initial + ", size=" + size + "."); //FIXME: Should we just dump the entire application/module ? } } } } } else { if (initial != null) { initialValue = ConvertUtils.convert(initial, clazz); } else { initialValue = clazz.newInstance(); } } } catch (Throwable t) { initialValue = null; } return (initialValue); } /** * Freeze the configuration of this component. */ public void freeze() { configured = true; } /** * Return a String representation of this object. */ public String toString() { StringBuffer sb = new StringBuffer("FormPropertyConfig["); sb.append("name="); sb.append(this.name); sb.append(",type="); sb.append(this.type); sb.append(",initial="); sb.append(this.initial); sb.append("]"); return (sb.toString()); } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/config/ForwardConfig.java0000644000175000017500000001756210404045210027574 0ustar arnaudarnaud00000000000000/* * $Id: ForwardConfig.java 55980 2004-10-29 15:34:55Z husted $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.config; import java.io.Serializable; /** *

      A JavaBean representing the configuration information of a * <forward> element from a Struts * configuration file.

      * * @version $Rev: 55980 $ $Date: 2004-10-29 16:34:55 +0100 (Fri, 29 Oct 2004) $ * @since Struts 1.1 */ public class ForwardConfig implements Serializable { // ----------------------------------------------------------- Constructors /** * Construct a new instance with default values. */ public ForwardConfig() { super(); } /** * Construct a new instance with the specified values. * * @param name Name of this forward * @param path Path to which control should be forwarded or redirected * @param redirect Should we do a redirect? */ public ForwardConfig(String name, String path, boolean redirect) { super(); setName(name); setPath(path); setRedirect(redirect); } /** * Construct a new instance with the specified values. * * @param name Name of this forward * @param path Path to which control should be forwarded or redirected * @param redirect Should we do a redirect? * @param contextRelative Is this path context relative? * @deprecated Use module rather than contextRelative */ public ForwardConfig(String name, String path, boolean redirect, boolean contextRelative) { super(); setName(name); setPath(path); setRedirect(redirect); setContextRelative(contextRelative); } /** *

      Construct a new instance with the specified values.

      * @param name Name of this forward * @param path Path to which control should be forwarded or redirected * @param redirect Should we do a redirect? * @param module Module prefix, if any */ public ForwardConfig(String name, String path, boolean redirect, String module) { super(); setName(name); setPath(path); setRedirect(redirect); setModule(module); } // ----------------------------------------------------- Instance Variables /** * Has this component been completely configured? */ protected boolean configured = false; // ------------------------------------------------------------- Properties /** * Should the value of the path property be considered * context-relative if it starts with a slash (and therefore not * prefixed with the module prefix? * @deprecated Use module property instead; will be removed in a release following 1.2.0. */ protected boolean contextRelative = false; /** * @deprecated Use module property instead; will be removed in a release following 1.2.0. */ public boolean getContextRelative() { return (this.contextRelative); } /** * @deprecated Use module property instead; will be removed in a release following 1.2.0. */ public void setContextRelative(boolean contextRelative) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.contextRelative = contextRelative; } /** * The unique identifier of this forward, which is used to reference it * in Action classes. */ protected String name = null; public String getName() { return (this.name); } public void setName(String name) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.name = name; } /** *

      The URL to which this ForwardConfig entry points, * which must start with a slash ("/") character. It is * interpreted according to the following rules:

      *
        *
      • If contextRelative property is true, the * path is considered to be context-relative within the current web * application (even if we are in a named module). It will be * prefixed by the context path to create a server-relative URL.
      • *
      • If the contextRelative property is false, the path is * considered to be the module-relative portion of the URL. * It will be used as the replacement for the $P * marker in the forwardPattern property defined on the * {@link ControllerConfig} element for our current module. * For the default forwardPattern value of * $C$M$P, the resulting server-relative URL will be * the concatenation of the context path, the module prefix, * and the path from this ForwardConfig.
      • *
      */ protected String path = null; public String getPath() { return (this.path); } public void setPath(String path) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.path = path; } /** *

      The prefix of the module to which this ForwardConfig entry points, * which must start with a slash ("/") character.

      *

      Usage note: If a forward config is used in a hyperlink, * and a module is specified, the path must lead to another * action and not directly to a page. This is in keeping with * rule that in a modular application all links must be to * an action rather than a page. *

      */ protected String module = null; public String getModule() { return (this.module); } public void setModule(String module) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.module = module; } /** * Should a redirect be used to transfer control to the specified path? */ protected boolean redirect = false; public boolean getRedirect() { return (this.redirect); } public void setRedirect(boolean redirect) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.redirect = redirect; } // --------------------------------------------------------- Public Methods /** * Freeze the configuration of this component. */ public void freeze() { configured = true; } /** * Return a String representation of this object. */ public String toString() { StringBuffer sb = new StringBuffer("ForwardConfig["); sb.append("name="); sb.append(this.name); sb.append(",path="); sb.append(this.path); sb.append(",redirect="); sb.append(this.redirect); sb.append(",contextRelative="); sb.append(this.contextRelative); sb.append(",module="); sb.append(this.module); sb.append("]"); return (sb.toString()); } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/config/MessageResourcesConfig.java0000644000175000017500000001104010404045214031434 0ustar arnaudarnaud00000000000000/* * $Id: MessageResourcesConfig.java 264684 2005-08-30 03:08:01Z niallp $ * * Copyright 1999-2005 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.config; import java.io.Serializable; import org.apache.struts.Globals; /** *

      A JavaBean representing the configuration information of a * <message-resources> element in a Struts * configuration file.

      * * @version $Rev: 264684 $ $Date: 2005-08-30 04:08:01 +0100 (Tue, 30 Aug 2005) $ * @since Struts 1.1 */ public class MessageResourcesConfig implements Serializable { // ----------------------------------------------------- Instance Variables /** * Has this component been completely configured? */ protected boolean configured = false; // ------------------------------------------------------------- Properties /** * Fully qualified Java class name of the MessageResourcesFactory class * we should use. */ protected String factory = "org.apache.struts.util.PropertyMessageResourcesFactory"; public String getFactory() { return (this.factory); } public void setFactory(String factory) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.factory = factory; } /** * The servlet context attributes key under which this MessageResources * instance is stored. */ protected String key = Globals.MESSAGES_KEY; public String getKey() { return (this.key); } public void setKey(String key) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.key = key; } /** * Should we return null for unknown message keys? */ protected boolean nullValue = true; public boolean getNull() { return (this.nullValue); } public void setNull(boolean nullValue) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.nullValue = nullValue; } /** * Indicates whether 'escape processing' should be performed on * the error message string. */ private boolean escape = true; /** * Indicates whether 'escape processing' should be performed on * the error message string. * * @since Struts 1.2.8 */ public boolean isEscape() { return escape; } /** * Set whether 'escape processing' should be performed on * the error message string. * * @since Struts 1.2.8 */ public void setEscape(boolean escape) { this.escape = escape; } /** * Parameter that is passed to the createResources() method * of our MessageResourcesFactory implementation. */ protected String parameter = null; public String getParameter() { return (this.parameter); } public void setParameter(String parameter) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } this.parameter = parameter; } // --------------------------------------------------------- Public Methods /** * Freeze the configuration of this component. */ public void freeze() { configured = true; } /** * Return a String representation of this object. */ public String toString() { StringBuffer sb = new StringBuffer("MessageResourcesConfig["); sb.append("factory="); sb.append(this.factory); sb.append(",null="); sb.append(this.nullValue); sb.append(",escape="); sb.append(this.escape); sb.append(",parameter="); sb.append(this.parameter); sb.append("]"); return (sb.toString()); } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/config/ModuleConfig.java0000644000175000017500000002657610404045234027430 0ustar arnaudarnaud00000000000000/* * $Id: ModuleConfig.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.config; /** *

      The collection of static configuration information that describes a * Struts-based module. Multiple modules are identified by * a prefix at the beginning of the context * relative portion of the request URI. If no module prefix can be * matched, the default configuration (with a prefix equal to a zero-length * string) is selected, which is elegantly backwards compatible with the * previous Struts behavior that only supported one module.

      * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ * @since Struts 1.1 */ public interface ModuleConfig { /** * Has this module been completely configured yet. Once this flag * has been set, any attempt to modify the configuration will return an * IllegalStateException. */ boolean getConfigured(); /** * The controller configuration object for this module. */ ControllerConfig getControllerConfig(); /** * The controller configuration object for this module. * @param cc The controller configuration object for this module. */ void setControllerConfig(ControllerConfig cc); /** * The prefix of the context-relative portion of the request URI, used to * select this configuration versus others supported by the controller * servlet. A configuration with a prefix of a zero-length String is the * default configuration for this web module. */ String getPrefix(); /** * The prefix of the context-relative portion of the request URI, used to * select this configuration versus others supported by the controller * servlet. A configuration with a prefix of a zero-length String is the * default configuration for this web module. * @param prefix The prefix of the context-relative portion of the request URI. */ public void setPrefix(String prefix); /** * The default class name to be used when creating action form bean * instances. */ String getActionFormBeanClass(); /** * The default class name to be used when creating action form bean * instances. * * @param actionFormBeanClass default class name to be used when creating * action form bean instances. */ void setActionFormBeanClass(String actionFormBeanClass); /** * The default class name to be used when creating action mapping instances. */ String getActionMappingClass(); /** * The default class name to be used when creating action mapping instances. * * @param actionMappingClass default class name to be used when creating * action mapping instances. */ void setActionMappingClass(String actionMappingClass); /** * Add a new ActionConfig instance to the set associated * with this module. * * @param config The new configuration instance to be added * * @exception java.lang.IllegalStateException if this module configuration * has been frozen */ void addActionConfig(ActionConfig config); /** * Add a new DataSourceConfig instance to the set associated * with this module. * * @param config The new configuration instance to be added * * @exception java.lang.IllegalStateException if this module configuration * has been frozen */ void addDataSourceConfig(DataSourceConfig config); /** * Add a new ExceptionConfig instance to the set associated * with this module. * * @param config The new configuration instance to be added * * @exception java.lang.IllegalStateException if this module configuration * has been frozen */ void addExceptionConfig(ExceptionConfig config); /** * Add a new FormBeanConfig instance to the set associated * with this module. * * @param config The new configuration instance to be added * * @exception java.lang.IllegalStateException if this module configuration * has been frozen */ void addFormBeanConfig(FormBeanConfig config); /** * The default class name to be used when creating action forward instances. */ String getActionForwardClass(); /** * The default class name to be used when creating action forward instances. * * @param actionForwardClass default class name to be used when creating * action forward instances. */ void setActionForwardClass(String actionForwardClass); /** * Add a new ForwardConfig instance to the set of global * forwards associated with this module. * * @param config The new configuration instance to be added * * @exception java.lang.IllegalStateException if this module configuration * has been frozen */ void addForwardConfig(ForwardConfig config); /** * Add a new MessageResourcesConfig instance to the set * associated with this module. * * @param config The new configuration instance to be added * * @exception IllegalStateException if this module configuration * has been frozen */ void addMessageResourcesConfig(MessageResourcesConfig config); /** * Add a newly configured {@link org.apache.struts.config.PlugInConfig} instance to the set of * plug-in Actions for this module. * * @param plugInConfig The new configuration instance to be added */ void addPlugInConfig(PlugInConfig plugInConfig); /** * Return the action configuration for the specified path, if any; * otherwise return null. * * @param path Path of the action configuration to return */ ActionConfig findActionConfig(String path); /** * Return the action configurations for this module. If there are * none, a zero-length array is returned. */ ActionConfig[] findActionConfigs(); /** * Return the data source configuration for the specified key, if any; * otherwise return null. * * @param key Key of the data source configuration to return */ DataSourceConfig findDataSourceConfig(String key); /** * Return the data source configurations for this module. If there * are none, a zero-length array is returned. */ DataSourceConfig[] findDataSourceConfigs(); /** * Return the exception configuration for the specified type, if any; * otherwise return null. * * @param type Exception class name to find a configuration for */ ExceptionConfig findExceptionConfig(String type); /** * Return the exception configurations for this module. If there * are none, a zero-length array is returned. */ ExceptionConfig[] findExceptionConfigs(); /** * Return the form bean configuration for the specified key, if any; * otherwise return null. * * @param name Name of the form bean configuration to return */ FormBeanConfig findFormBeanConfig(String name); /** * Return the form bean configurations for this module. If there * are none, a zero-length array is returned. */ FormBeanConfig[] findFormBeanConfigs(); /** * Return the forward configuration for the specified key, if any; * otherwise return null. * * @param name Name of the forward configuration to return */ ForwardConfig findForwardConfig(String name); /** * Return the form bean configurations for this module. If there * are none, a zero-length array is returned. */ ForwardConfig[] findForwardConfigs(); /** * Return the message resources configuration for the specified key, * if any; otherwise return null. * * @param key Key of the data source configuration to return */ MessageResourcesConfig findMessageResourcesConfig(String key); /** * Return the message resources configurations for this module. * If there are none, a zero-length array is returned. */ MessageResourcesConfig[] findMessageResourcesConfigs(); /** * Return the configured plug-in actions for this module. If there * are none, a zero-length array is returned. */ PlugInConfig[] findPlugInConfigs(); /** * Freeze the configuration of this module. After this method * returns, any attempt to modify the configuration will return * an IllegalStateException. */ void freeze(); /** * Remove the specified action configuration instance. * * @param config ActionConfig instance to be removed * * @exception java.lang.IllegalStateException if this module configuration * has been frozen */ void removeActionConfig(ActionConfig config); /** * Remove the specified exception configuration instance. * * @param config ActionConfig instance to be removed * * @exception java.lang.IllegalStateException if this module configuration * has been frozen */ void removeExceptionConfig(ExceptionConfig config); /** * Remove the specified data source configuration instance. * * @param config DataSourceConfig instance to be removed * * @exception java.lang.IllegalStateException if this module configuration * has been frozen */ void removeDataSourceConfig(DataSourceConfig config); /** * Remove the specified form bean configuration instance. * * @param config FormBeanConfig instance to be removed * * @exception java.lang.IllegalStateException if this module configuration * has been frozen */ void removeFormBeanConfig(FormBeanConfig config); /** * Remove the specified forward configuration instance. * * @param config ForwardConfig instance to be removed * * @exception java.lang.IllegalStateException if this module configuration * has been frozen */ void removeForwardConfig(ForwardConfig config); /** * Remove the specified message resources configuration instance. * * @param config MessageResourcesConfig instance to be removed * * @exception java.lang.IllegalStateException if this module configuration * has been frozen */ void removeMessageResourcesConfig(MessageResourcesConfig config); } libstruts1.2-java-1.2.9/src/share/org/apache/struts/config/ModuleConfigFactory.java0000644000175000017500000000735510404045224030751 0ustar arnaudarnaud00000000000000/* * $Id: ModuleConfigFactory.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 2001-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.config; import org.apache.struts.util.RequestUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * A factory interface for creating {@link ModuleConfig}s. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ * * @see ModuleConfig */ public abstract class ModuleConfigFactory { /** * Create and return a newly instansiated {@link ModuleConfig}. * This method must be implemented by concrete subclasses. * * @param prefix Module prefix for Configuration */ public abstract ModuleConfig createModuleConfig(String prefix); // ------------------------------------------------------ Static Properties /** * The fully qualified class name that is used for * ModuleConfigFactory instances. * @return class name that is used for * ModuleConfigFactory instances */ public static String getFactoryClass() { return (ModuleConfigFactory.factoryClass); } /** * Set the fully qualified class name that is used for * ModuleConfigFactory instances. * @param factoryClass name that is used for * ModuleConfigFactory instances */ public static void setFactoryClass(String factoryClass) { ModuleConfigFactory.factoryClass = factoryClass; ModuleConfigFactory.clazz = null; } // --------------------------------------------------------- Static Methods /** * Create and return a ModuleConfigFactory instance of the * appropriate class, which can be used to create customized * ModuleConfig instances. If no such factory can be * created, return null instead. */ public static ModuleConfigFactory createFactory() { ModuleConfigFactory factory = null; try { if (clazz == null) { clazz = RequestUtils.applicationClass(factoryClass); } factory = (ModuleConfigFactory) clazz.newInstance(); } catch (ClassNotFoundException e) { LOG.error("ModuleConfigFactory.createFactory()", e); } catch (InstantiationException e) { LOG.error("ModuleConfigFactory.createFactory()", e); } catch (IllegalAccessException e) { LOG.error("ModuleConfigFactory.createFactory()", e); } return factory; } /** * The Java class to be used for * ModuleConfigFactory instances. */ protected static Class clazz = null; /** * Commons Logging instance. */ private static final Log LOG = LogFactory.getLog(ModuleConfigFactory.class); /** * The fully qualified class name to be used for * ModuleConfigFactory instances. */ protected static String factoryClass = "org.apache.struts.config.impl.DefaultModuleConfigFactory"; } libstruts1.2-java-1.2.9/src/share/org/apache/struts/config/PlugInConfig.java0000644000175000017500000000551110404045226027364 0ustar arnaudarnaud00000000000000/* * $Id: PlugInConfig.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.config; import java.io.Serializable; import java.util.HashMap; import java.util.Map; /** *

      A JavaBean representing the configuration information of a * <plug-in> element in a Struts * configuration file.

      * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ * @since Struts 1.1 */ public class PlugInConfig implements Serializable { // ----------------------------------------------------- Instance Variables /** * Has this component been completely configured? */ protected boolean configured = false; /** * A Map of the name-value pairs that will be used to * configure the property values of a PlugIn instance. */ protected Map properties = new HashMap(); // ------------------------------------------------------------- Properties /** * The fully qualified Java class name of the PlugIn * implementation class being configured. */ protected String className = null; public String getClassName() { return (this.className); } public void setClassName(String className) { this.className = className; } // --------------------------------------------------------- Public Methods /** * Add a new property name and value to the set that will be used to * configure the PlugIn instance. * * @param name Property name * @param value Property value */ public void addProperty(String name, String value) { if (configured) { throw new IllegalStateException("Configuration is frozen"); } properties.put(name, value); } /** * Freeze the configuration of this component. */ public void freeze() { configured = true; } /** * Return the properties that will be used to configure a * PlugIn instance. */ public Map getProperties() { return (properties); } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/config/package.html0000644000175000017500000000037610404045174026464 0ustar arnaudarnaud00000000000000

      The "config" package contains configuration objects that correspond to elements that may be specified in the struts-config.xml module configuration file.

      Config UML
      libstruts1.2-java-1.2.9/src/share/org/apache/struts/doc-files/0000755000175000017500000000000010423130301024561 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/src/share/org/apache/struts/doc-files/Stamp.gif0000644000175000017500000001151210404045226026346 0ustar arnaudarnaud00000000000000GIF87aÂ}÷Uªÿ$$U$ª$ÿIIUIªIÿmmUmªmÿ’’U’ª’ÿ¶¶U¶ª¶ÿÛÛUÛªÛÿÿÿUÿªÿÿ$$U$ª$ÿ$$$$U$$ª$$ÿ$I$IU$Iª$Iÿ$m$mU$mª$mÿ$’$’U$’ª$’ÿ$¶$¶U$¶ª$¶ÿ$Û$ÛU$Ûª$Ûÿ$ÿ$ÿU$ÿª$ÿÿIIUIªIÿI$I$UI$ªI$ÿIIIIUIIªIIÿImImUImªImÿI’I’UI’ªI’ÿI¶I¶UI¶ªI¶ÿIÛIÛUIÛªIÛÿIÿIÿUIÿªIÿÿmmUmªmÿm$m$Um$ªm$ÿmImIUmIªmIÿmmmmUmmªmmÿm’m’Um’ªm’ÿm¶m¶Um¶ªm¶ÿmÛmÛUmÛªmÛÿmÿmÿUmÿªmÿÿ’’U’ª’ÿ’$’$U’$ª’$ÿ’I’IU’Iª’Iÿ’m’mU’mª’mÿ’’’’U’’ª’’ÿ’¶’¶U’¶ª’¶ÿ’Û’ÛU’Ûª’Ûÿ’ÿ’ÿU’ÿª’ÿÿ¶¶U¶ª¶ÿ¶$¶$U¶$ª¶$ÿ¶I¶IU¶Iª¶Iÿ¶m¶mU¶mª¶mÿ¶’¶’U¶’ª¶’ÿ¶¶¶¶U¶¶ª¶¶ÿ¶Û¶ÛU¶Ûª¶Ûÿ¶ÿ¶ÿU¶ÿª¶ÿÿÛÛUÛªÛÿÛ$Û$UÛ$ªÛ$ÿÛIÛIUÛIªÛIÿÛmÛmUÛmªÛmÿÛ’Û’UÛ’ªÛ’ÿÛ¶Û¶UÛ¶ªÛ¶ÿÛÛÛÛUÛÛªÛÛÿÛÿÛÿUÛÿªÛÿÿÿÿUÿªÿÿÿ$ÿ$Uÿ$ªÿ$ÿÿIÿIUÿIªÿIÿÿmÿmUÿmªÿmÿÿ’ÿ’Uÿ’ªÿ’ÿÿ¶ÿ¶Uÿ¶ªÿ¶ÿÿÛÿÛUÿÛªÿÛÿÿÿÿÿUÿÿªÿÿÿ!ù,Â}@ÿÿ H€Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç ;ùï É“(Sª\ɲ¥Ë—0cÊœI³¦Í›8sêÜɳçM…)·}Û¦í`›6ß µÅ4 Óm‘$ T¸pà@B‡ *vì¬ Õæ³¬Ù’gÓª]KÛ·pá&œ© ª5kLm- @Àˆ#Cx!ÃÄ6lØ8Aĉ 'ìj¨« €«xÕi#w§ÛÒ¨SÇ<­ºµk˜si~›”ö·häÈY ™²äPbÄ $hبQ‚3&ÀC¾‹!"á1b†ŒÀ.¼qñáÇIÿî-T p¡MW>P¤}uy².ØV ëÓ÷Îok°>Jüú¡e_€& h`þà‚óí—àIꇠ„¾ÖS… ª›ZB5ÔhxÙ‚"ˆŒˆ8À¤¨âUÁ#Ž0¡\–ž8TÑY`(öØ8ãˆ1Î0ÂŒ2Ì £™=*'ÆqAœDÂB €Æ•ÔPƒ+ŒàI—Ûè3†–ù™ö!4愘&~¶i’š%±i'š*¹¹Ÿ›gmhæ?Û¬´M‡C:”7D%:Ú¢ŒU×£ŽŽ©Xƒ:šè Ö¥è¦BíóÍ>þ)jixŽjjZ~¶ÔÐOžêjM­šÿV*®Í뫸ÊGçK|® ç¯Îyç›ÄÛ«N­Ê)áš´.›&…uç÷MË’Ï:­³ØfËl³ÆV«mœ{Κë¹ü‹îºì¶ë¦ ï¼ôÖkャª›g¬rVû«ƒzB+°žäú[lÀŒï 7|á®õêëðÄWüš¼g¬ñÆã„qÇ ‡,rÈwÞ:òÉ(§Ìnª«ìòË0·›ºB½è?¶ÄL“¹:ûÄsÏlµLR¥Ûà5eBI¡f!F£Db‹'™8—a•b0Wi1ÈÓJ=ÑXCñÏ@#›öŸB£¤KTmà%·6Î8# Ìa7Ä"ÿàœB| 0€_#PG˜„-9ŠX‹7NŒá€ÆUâ’"8äs^0™‘‚*¨ Ò 3Í0¥Z„ ÊGŸÂßJ +™ù1¸zìú·¶…mÏT©6w¡ 1Ä€ŽåÀT†õÕH:Σ(Ç ÂÝ(ƒ@Cxƒ>Ä`‡#ŽøÊ ñãb4 ób‹˜ßb0ŒÐ ,ÙdsóJ¨¯~ €nÑžÀûÛ{œþ3Píô¿Ùeh€L—À6°d«_ 4˜iè4ˆµ†h™Ê`¢ZÑ º•Ì:ÐAb€¢Dèø1ȹPlVD €Ž`€Axè E‹hH`Ï*-Š‘8…  jЂ_B"#²‘—DÙïvAƒ"î,(Å*ZñŠû’µâ­~å¯` ìbÁ¾ƃiq_LX]Ç­2:PŒ ôÖ¶šE. ‰+[oœ#·5,8걌kÄbNr·2“±íg†¤¬©+u…䑌¤$'IÉJZò’˜Ì$E¶˜HNÅUgd¤(Gÿé«NBhUftãÃÈ'/"L®¤Á$HÊZŠŒ¶Ì¥.†Ë]úò—îêO(IÌb‚²“šL¦2—ÉÌf:ó™ÐôˆK¢IÍjZóšØÌ¦6#¢@czó›Ç$ãNæ7J´óœ3ÚQ‰H“ ¶[q3fhD%dG3¬¡ 1õÌœÄ(:_I¦Aí#PÖ8 Šð¨o´!ug2”a>¬±ç2ˆb&§æÒ¯Æ„ê?f³I0E’pgÝz*Ž0ðHÇQœD0S¯@0~L´3†ÈFV1wãQ&ŒPˆ¢±ç®9¹¢!†¤¢h»>6µÈ«Þîö·ºUÐ)QgJ™ “¶ý[‹`â ’|ÃÛ` 3RˆZ&æKÞ‹$èE–²ÕsH_78Fœ”C¤à8f-’!ˆ…CE€HF2>Jkè—é Up£ NsÀþ)pƒòg`þø¶©.oo+­rùÿkW@áâbÇ W¸ÉÕy( n#Õ¨2Tt9òæs)oõÉY&ÜÝ{Ä㵕qYœ ?¥ëP9Ü=æqŽü®ÉøíG˜O\Žä¾x"1þê3óœÃ§÷ÎîƒÐÔTzí{?cÓ_]Bšœ©íg=º“`º•˜?y)'úC¯Î—¶³Ë8“§;rW"‚ìÀ üäO´7 '4Dƒ3 ¥4ÒrÐn QÊà"ÅW"ÕQÅ "• Õ n“~ZG©ç ðñÚPA ð(Ið‚Û`† 96Br5ÿŒ•5œ#ô9ÀÓƒñd6àg€’×Kº†3)¨I@KsÁ!£ˆ±cVc>:¸5]¿Ó­P es6DyËU†"z±™5}qË1 ?ÂŽa5’Á5è0´ƒ¬ Ñ  Ø."È{$Ø}B’)m0’À Ya5ÁqVapVÆ1DñWSQ ÕµBÄ ˆP Ù ±5¹ò‡X„ж$XÚ0UiБ€U’ UJ¢Y  º8deÞ%$‹ãX1" ‘ÆZ7W—CÄlÈ`"><ñQ&E×}ÆÇq-wÆUàBr³–[‚Wkûÿ¶€X‘@7ÎÀXŽõž5 B0YàU}‘=…³YCÐY‹Ã<>²ŽS#ìQZ§…#XÁÆèZ&TŠÑ¨!f[åv` Yq‰[!& 6‘ ©Šª–z#á!¶€)Lñ õPƒöhñ5D‰&)Jv‹×38PØ¡$áÓ@Ò]ÃWC_/" ç1w˜+F]ÕÅ {Uõ3`Ø0 Y‘»UoK\©"s3÷|„g‘Ú¸EDÿ°ˆ’5(±À‰W‘>Ç# ¢à^ÄaÈ¡$Ø‘’ðˆ=‚1|qbP8Ü!“5h5/ €5½Á1 úpƒ””@‘§*•BG¦?•‹©fب0ˆp×yÄBuVéIw CAÖP ì Àƒ9™ˆ]’‘<ÉÖ†Lº)}á7‚£=Ö1C0Y‰cV‚àX E#Wƒ>êÓ"ŒðiðóŽ™[´S`^¦˜S9.ÁÒ`¶S”Od R*°#kQ×™¬´JJ×x'…&ÿY{á)õ(ÚÀ$B#WŸ5´>¡€]“&“¨{ùb Nƒ’!P%¾)Ây^BpV:Æ1 ˆ%°ÀiïƒÙ€ ˜tvÇpfTJ†×ab+úvoŸsb¶á§‹woç¢Léwê©:y²•¡ˆB4D! ^ø“*›—øc2„5Áð8§eZ–†$Ž!A¶8S³–N"…GVp—¾9YOeP ¬à% %P¶e]†•RÄž+šy'šqá"AŸç1!Ú'¥‰uq(cñkÖwöQzV]ºo5<À Q˜±¨á`h/Öc‘qc=vZ?òhãÿi±S8¥=B Y øÀ†ï ¡Æ£Vjî‚l E«FE€·oJwwž'kôâž,áOŸò ú —ò(㸠ÕÀÈ ©0"¨¡ ¤@]0t9e¨¼1\c_;ùb79‡’¡Ÿ¥ÕS5"©ð%ø%Ø  š%Ôð>ÔÀO£)vØ£e1Û𣿪A!åAÖ0:Ò0BxE (dT¬)C„V]Zøb4dC8#ëC#–óZ,òŸ6B K Œp¦æÊDOQ(2jn­ÊH¸zÍ¥…âf„Ra©)½v)&&Ÿ‰ÂO¿¦²¢²›³¡níºn«u#Æ|<Û³>û³Äÿ'pVd³ßçz[´Hë‡yŠuLÅ•¢¯Ó™µ’rrWwa'zjG”测ô®ˆ$t"ztš¶"Šw`›Nˆ·¢¬öwy§wI÷¶û£¢gs“‡ržd¶%§pSw´®º´,'§&¶lÇx„ë1y¤qÝHG'§¸ØH¢Ü¸@SÇt7§Ew¸Ý2,,г~ûp┸aÇy8Z¶NEstrRWG Ç}_D-mtµŠ÷G‹‹º¯Û:¦+»Ýp´›s›;•ªô¦ç™0±¤quz•sZ«C§—‹¼V׺[ºä©¼5çrÀ{»ŽW¸š;z” ºÔg¼çq4jwC÷rÐ"»ÔWGW2Òk¢Ühž1w€ »•ûrÔ;¢93|+b´$W§*õk¿û˱K;*1:E¥ÇµMÀÀt¿I»À¤‡À üÀ·êÀ<ÁJë´|Áñ"Á¼Á§bµŒ§âi«l{u÷¾u+¸v4£«½&«*|¶#¬vØÛ¾¡û»Ý»JsJF9Z¾G)Â1¬R»ûº,·™'*¼W¸ÃûǺ;ÃN‡fé┚yÄ5\ž>¬Ä2š‘·f ·QÌwI‡£æYÃV ÄÜW<Ƨ§À[‰ÆI«ÆlüÆh[Æp<ÇtÆt|ǃ¤Áx¼Ç6áÆ|üÇ È‚Œ¿v<Ȇ,´‡œÈyœ¸ŠÜȼ¢¶Žɰ}’\Éœty–\ÉÌ´@ÛÉžüÉ ŒI$;libstruts1.2-java-1.2.9/src/share/org/apache/struts/doc-files/jakarta-feather-small.gif0000644000175000017500000000352010404045244031421 0ustar arnaudarnaud00000000000000GIF87aZ÷ÿÿÿ!!!111999BBBcccsss{{{ŒŒŒÞÞÞïï籠„Þ„„Îï÷JB„”Öÿï!çÎÆµZ9÷RÿB÷k1ÞBÎ{Rç„RÞk1ÎRÖœ{ï{9çµ”ÿsÿc÷­{¥B½{JÎkÞcœ”Œ÷çÖskc÷¥RÎÆ½¥Zν¥ÖÆ­­”kcZJïÖ¥­{Ö­Bïµ)ç΄¥„sZ÷Ö)έέµœÞ½çÖcÿç½½µ{{s„„{„„sBcÖŒµÿ9ÿ9­c)ÎB!Z9ŒkÿkÞœÿ”)Æs­”ÞcŒJkcŒµÿ”½ÎŒÞ{”ÖÿÖ掠”Œÿï{kÖ1½”{ÞµµŒÿµœc΄ï{½ç„ÿŒµZçJ”ï!„{9”9ÞRÿR¥Rk­1Î!{÷1ïÿ­Ö  €4òPó €4ò0Ùíw €<ðòøw$€ `Úð<ñÔ,ùw`ØùwÿÿÿÿñTGöwD:\Projects\Apache\jakarta-struts-current\src\share\org\apache\struts\doc-files\jakarta-logo.gifeady&íwÐgïwTó žàjYoUøAñ ë `ñLñª(ðwffÔ(jYì;çw €!ðñ°ÿD¹ówÈÍówÔ·DÔ!ù,Z@ÿHpà‚‚*\Ȱ¡Ã‡,P àÀŸ‹¢ A"e /_ÂŒ³Æ›7&ßÔÁ³‡‚„ 8ˆ€H³fÃÀHñ ÑC°;y\u±Ø‚$\ž Ö‡{ð‘Çb÷a÷ž£s˜t_ià_jŒtAAüðºêúðC š1t‡—Ö  ¨`©@0¸yðBZh`™öÖ  €DP„p€‹v|T›ipû&^\.<¨â‹Nh1å þ…QãeíAalÀA ðŠLi.€VÜqÉÝ*,õU¢mÔ#ŠE€B ĦóCDª0ƒÕ (°S,Áä¬É=ÉD\oAå¡cHçFGà˜° /@²½…HÚn£’ÿ±ßR[41œžÇ!±ÄIdx½¡F¢t”*GŽu°ý¶d®p7‰rIžv»© ©º\OëÏFø‰8®Á÷Å\Æäš4ß|u¸qš_:—$Àú¢ÖHÔHHqm‚P¬®'­TkGCk1¹5Ò±¨tÔ0,ÈâÍE6ð´ÞOp¶ßP£C×øíÊtj…ÒCe„IPBf€¡ XC 6W“ÎQÄ2#àz$:k&1+ÉàäèóRuðhcð›H®t†Þô‡ ëV|àƒ IH<` leŠpÀ ˆ@0eà%ÀÑ-R§ö\+(±ÏˆH‡Q™Á=X׺€Ð¯Ìœis£a ·H pñ‹³b@;libstruts1.2-java-1.2.9/src/share/org/apache/struts/plugins/0000755000175000017500000000000010423130301024375 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/src/share/org/apache/struts/plugins/DigestingPlugIn.java0000644000175000017500000003631010404045232030306 0ustar arnaudarnaud00000000000000/* * $Id: DigestingPlugIn.java 164530 2005-04-25 03:11:07Z niallp $ * * Copyright 2003-2005 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.plugins; import java.io.File; import java.io.IOException; import java.net.URL; import javax.servlet.ServletException; import org.apache.commons.digester.Digester; import org.apache.commons.digester.RuleSet; import org.apache.commons.digester.xmlrules.DigesterLoader; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.action.ActionServlet; import org.apache.struts.action.PlugIn; import org.apache.struts.config.ModuleConfig; import org.apache.struts.util.RequestUtils; import org.xml.sax.SAXException; /** *

      An implementation of PlugIn which * can be configured to instantiate a graph of objects * using the Commons Digester and place the root object * of that graph into the Application context.

      * * @version $Rev: 164530 $ * @see org.apache.struts.action.PlugIn * @since Struts 1.2 */ public class DigestingPlugIn implements PlugIn { /** * Commons Logging instance. */ private static Log log = LogFactory.getLog(DigestingPlugIn.class); protected static final String SOURCE_CLASSPATH = "classpath"; protected static final String SOURCE_FILE = "file"; protected static final String SOURCE_SERVLET = "servlet"; protected String configPath = null; protected String configSource = SOURCE_SERVLET; protected String digesterPath = null; protected String digesterSource = SOURCE_SERVLET; protected String key = null; protected ModuleConfig moduleConfig = null; protected String rulesets = null; protected ActionServlet servlet = null; protected boolean push = false; /** * Constructor for DigestingPlugIn. */ public DigestingPlugIn() { super(); } /** * Receive notification that our owning module is being shut down. */ public void destroy() { this.servlet = null; this.moduleConfig = null; } /** *

      Initialize a Digester and use it to parse a * configuration file, resulting in a root object which will be placed into * the ServletContext.

      * * @param servlet ActionServlet that is managing all the * modules in this web application * @param config ModuleConfig for the module with which * this plug-in is associated * * @throws ServletException if this PlugIn cannot * be successfully initialized */ public void init(ActionServlet servlet, ModuleConfig config) throws ServletException { this.servlet = servlet; this.moduleConfig = config; Object obj = null; Digester digester = this.initializeDigester(); if (this.push) { log.debug("push == true; pushing plugin onto digester stack"); digester.push(this); } try { log.debug("XML data file: [path: " + this.configPath + ", source: " + this.configSource + "]"); URL configURL = this.getConfigURL(this.configPath, this.configSource); if (configURL == null) throw new ServletException("Unable to locate XML data file at [path: " + this.configPath + ", source: " + this.configSource + "]"); obj = digester.parse(configURL.openStream()); } catch (IOException e) { // TODO Internationalize msg log.error("Exception processing config", e); throw new ServletException(e); } catch (SAXException e) { // TODO Internationalize msg log.error("Exception processing config", e); throw new ServletException(e); } this.storeGeneratedObject(obj); } /** * Initialize the Digester which will be used to process the * main configuration. * @return a Digester, ready to use. * @throws ServletException */ protected Digester initializeDigester() throws ServletException { Digester digester = null; if (this.digesterPath != null && this.digesterSource != null) { try { log.debug("Initialize digester from XML [path: " + this.digesterPath + "; source: " + this.digesterSource + "]"); digester = this.digesterFromXml(this.digesterPath, this.digesterSource); } catch (IOException e) { // TODO Internationalize msg log.error("Exception instantiating digester from XML ", e); throw new ServletException(e); } } else { log.debug("No XML rules for digester; call newDigesterInstance()"); digester = this.newDigesterInstance(); } this.applyRuleSets(digester); return digester; } /** *

      Instantiate a Digester.

      *

      Subclasses may wish to override this to provide a subclass of Digester, * or to configure the Digester using object methods.

      * @return a basic instance of org.apache.commons.digester.Digester */ protected Digester newDigesterInstance() { return new Digester(); } /** *

      Instantiate a Digester from an XML input stream using the Commons * DigesterLoader.

      * @param path the path to the digester rules XML to be found using source * @param source a string indicating the lookup method to be used with path * @return a configured Digester * @throws FileNotFoundException * @throws MalformedURLException * @see #getConfigURL(String, String) */ protected Digester digesterFromXml(String path, String source) throws IOException { URL configURL = this.getConfigURL(path, source); if (configURL == null) { throw new NullPointerException("No resource '" + path + "' found in '" + source + "'"); } return DigesterLoader.createDigester(configURL); } /** * Instantiate any RuleSet classes defined in the * rulesets property and use them to add rules to our * Digester. * @param digester the Digester instance to add RuleSet objects to. * @throws ServletException */ protected void applyRuleSets(Digester digester) throws ServletException { if (this.rulesets == null || this.rulesets.trim().length() == 0) { return; } rulesets = rulesets.trim(); String ruleSet = null; while (rulesets.length() > 0) { int comma = rulesets.indexOf(","); if (comma < 0) { ruleSet = rulesets.trim(); rulesets = ""; } else { ruleSet = rulesets.substring(0, comma).trim(); rulesets = rulesets.substring(comma + 1).trim(); } if (log.isDebugEnabled()) { // TODO Internationalize msg log.debug("Configuring custom Digester Ruleset of type " + ruleSet); } try { RuleSet instance = (RuleSet) RequestUtils.applicationInstance(ruleSet); digester.addRuleSet(instance); } catch (Exception e) { // TODO Internationalize msg log.error("Exception configuring custom Digester RuleSet", e); throw new ServletException(e); } } } /** *

      Look up a resource path using one of a set of known path resolution mechanisms * and return a URL to the resource.

      * @param path a String which is meaningful to one of the known resolution mechanisms. * @param source one of the known path resolution mechanisms: *
        *
      • file - the path is a fully-qualified filesystem path.
      • *
      • servlet - the path is a servlet-context relative path.
      • *
      • classpath - the path is a classpath-relative path.
      • *
      * @return a URL pointing to the given path in the given mechanism. * @throws FileNotFoundException * @throws MalformedURLException */ protected URL getConfigURL(String path, String source) throws IOException { if (SOURCE_CLASSPATH.equals(source)) { return this.getClassPathURL(path); } if (SOURCE_FILE.equals(source)) { return this.getFileURL(path); } if (SOURCE_SERVLET.equals(source)) { return this.getServletContextURL(path); } // TODO Internationalize msg throw new IllegalArgumentException( "ConfigSource " + source + " is not recognized"); } /** * Given a string, return a URL to a classpath resource of that name. * @param path a Classpath-relative string identifying a resource. * @return a URL identifying the resource on the classpath. * TODO Do we need to be smarter about ClassLoaders? */ protected URL getClassPathURL(String path) { return getClass().getClassLoader().getResource(path); } /** * Given a string, return a URL to a Servlet Context resource of that name. * @param path a Classpath-relative string identifying a resource. * @return a URL identifying the resource in the Servlet Context * @throws MalformedURLException */ protected URL getServletContextURL(String path) throws IOException { return this.servlet.getServletContext().getResource(path); } /** * Given a string, return a URL to a Filesystem resource of that name. * @param path a path to a file. * @return a URL identifying the resource in the in the file system. * @throws MalformedURLException * @throws FileNotFoundException */ protected URL getFileURL(String path) throws IOException { File file = new File(path); return file.toURL(); } /** * @param configPath the path to configuration information for this PlugIn. * @see #configSource */ public void setConfigPath(String configPath) { this.configPath = configPath; } /** * @return the configPath property * @see #configSource */ public String getConfigPath() { return configPath; } /** * Set the source of the config file. Should be one of the following: *
        *
      • * "classpath" - indicates that the configPath will be resolved by the * ClassLoader. *
      • *
      • * "file" - indicates that the configPath is a fully-qualified * filesystem path. *
      • *
      • * "servlet" - indicates that the configPath will be found by the * ServletContext. *
      • *
      * @param configSource the source (lookup method) for the config file. * @see #configPath */ public void setConfigSource(String configSource) { this.configSource = configSource; } /** * @return the string describing which access method should be used to * resolve configPath. * @see #configPath */ public String getConfigSource() { return configSource; } /** * This method is called after the Digester runs to store the generated * object somewhere. This implementation places the given object into the * ServletContext under the attribute name as defined in key. * @param obj The object to save. */ protected void storeGeneratedObject(Object obj) { log.debug("Put [" + obj + "] into application context [key:" + this.key + "]"); this.servlet.getServletContext().setAttribute(this.getKey(), obj); } /** * @param key The ServletContext attribute name to store the generated * object under. */ public void setKey(String key) { this.key = key; } /** * @return The ServletContext attribute name the generated object is stored * under. */ public String getKey() { return key; } /** *

      A comma-delimited list of one or more classes which implement * org.apache.commons.digester.RuleSet. (Optional)

      */ public void setRulesets(String ruleSets) { this.rulesets = ruleSets; } /** * @return The configured list of RuleSet classes. */ public String getRulesets() { return this.rulesets; } /** *

      The path to a Digester XML configuration file, relative to the * digesterSource property. (Optional)

      * @see #digesterSource * @see #getConfigURL(String, String) */ public void setDigesterPath(String digesterPath) { this.digesterPath = digesterPath; } /** * @return the configured path to a Digester XML config file, or null. * @see #digesterSource * @see #getConfigURL(String, String) */ public String getDigesterPath() { return digesterPath; } /** *

      The lookup mechanism to be used to resolve digesterPath * (optional). *

      * @param digesterSource * @see #getConfigURL(String, String) */ public void setDigesterSource(String digesterSource) { this.digesterSource = digesterSource; } /** * @return the configured lookup mechanism for resolving * digesterPath. * @see #getConfigURL(String, String) */ public String getDigesterSource() { return this.digesterSource; } /** *

      If set to true, this PlugIn will be pushed onto * the Digester stack before the digester parse method is * called.

      *

      Defaults to false

      * @param push */ public void setPush(boolean push) { this.push = push; } /** * @return Whether or not this PlugIn instance will be pushed * onto the Digester stack before digester.parse() * is called. */ public boolean getPush() { return this.push; } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/plugins/ModuleConfigVerifier.java0000644000175000017500000002203610404045242031322 0ustar arnaudarnaud00000000000000/* * $Id: ModuleConfigVerifier.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.plugins; import javax.servlet.ServletException; import org.apache.struts.action.ActionServlet; import org.apache.struts.action.PlugIn; import org.apache.struts.config.ForwardConfig; import org.apache.struts.config.MessageResourcesConfig; import org.apache.struts.config.ModuleConfig; import org.apache.struts.config.PlugInConfig; import org.apache.struts.util.RequestUtils; /** *

      Convenient implementation of {@link PlugIn} that performs as many * verification tests on the information stored in the {@link ModuleConfig} * for this module as is practical. Based on the setting of the * fatal property (which defaults to true), the * detection of any such errors will cause a ServletException * to be thrown from the init method, which will ultimately * cause the initialization of your Struts controller servlet to fail.

      * *

      Under all circumstances, errors that are detected will be logged via * calls to ServletContext.log.

      * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ * @since Struts 1.1 */ public class ModuleConfigVerifier implements PlugIn { // ----------------------------------------------------- Instance Variables /** *

      The {@link ModuleConfig} instance for our module.

      */ protected ModuleConfig config = null; /** *

      The {@link ActionServlet} instance we are associated with.

      */ protected ActionServlet servlet = null; // ------------------------------------------------------------- Properties /** *

      Should the existence of configuration errors be fatal.

      */ private boolean fatal = true; /** *

      Return the "configuation errors are fatal" flag.

      */ public boolean isFatal() { return (this.fatal); } /** *

      Set the "configuration errors are fatal" flag.

      * * @param fatal The new flag value */ public void setFatal(boolean fatal) { this.fatal = fatal; } // --------------------------------------------------------- Public Methods /** *

      Receive notification that our owning module is being * shut down.

      */ public void destroy() { ; // No action required } // See interface for Javadoc. public void init(ActionServlet servlet, ModuleConfig config) throws ServletException { this.servlet = servlet; this.config = config; boolean ok = true; log(servlet.getInternal().getMessage("configVerifying")); // Perform detailed validations of each portion of ModuleConfig // :TODO: Complete methods to verify Action, Controller, et al, configurations. /* if (!verifyActionConfigs()) { ok = false; } */ if (!verifyActionMappingClass()) { ok = false; } /* if (!verifyControllerConfig()) { ok = false; } if (!verifyDataSourceConfigs()) { ok = false; } if (!verifyExceptionConfigs()) { ok = false; } if (!verifyFormBeanConfigs()) { ok = false; } */ if (!verifyForwardConfigs()) { ok = false; } if (!verifyMessageResourcesConfigs()) { ok = false; } if (!verifyPlugInConfigs()) { ok = false; } // Throw an exception on a fatal error log(servlet.getInternal().getMessage("configCompleted")); if (!ok && isFatal()) { throw new ServletException (servlet.getInternal().getMessage("configFatal")); } } // ------------------------------------------------------ Protected Methods /** *

      Log the specified message to our servlet context log, after a * header including the module prefix.

      * * @param message The message to be logged */ protected void log(String message) { String output = "[" + config.getPrefix() + "]: " + message; servlet.log(output); } /** *

      Return true if information returned by * config.getActionMappingClass is all valid; * otherwise, log error messages and return false.

      */ protected boolean verifyActionMappingClass() { String amcName = config.getActionMappingClass(); if (amcName == null) { log(servlet.getInternal().getMessage ("verifyActionMappingClass.missing")); return (false); } try { Class amcClass = RequestUtils.applicationClass(amcName); } catch (ClassNotFoundException e) { log(servlet.getInternal().getMessage ("verifyActionMappingClass.invalid", amcName)); return (false); } return (true); } /** *

      Return true if information returned by * config.findForwardConfigs is all valid; * otherwise, log error messages and return false.

      */ protected boolean verifyForwardConfigs() { boolean ok = true; ForwardConfig fcs[] = config.findForwardConfigs(); for (int i = 0; i < fcs.length; i++) { String path = fcs[i].getPath(); if (path == null) { log(servlet.getInternal().getMessage ("verifyForwardConfigs.missing", fcs[i].getName())); ok = false; } else if (!path.startsWith("/")) { log(servlet.getInternal().getMessage ("verifyForwardConfigs.invalid", path, fcs[i].getName())); } } return (ok); } /** *

      Return true if information returned by * config.findMessageResourcesConfigs is all valid; * otherwise, log error messages and return false.

      */ protected boolean verifyMessageResourcesConfigs() { boolean ok = true; MessageResourcesConfig mrcs[] = config.findMessageResourcesConfigs(); for (int i = 0; i < mrcs.length; i++) { String factory = mrcs[i].getFactory(); if (factory == null) { log(servlet.getInternal().getMessage ("verifyMessageResourcesConfigs.missing")); ok = false; } else { try { Class clazz = RequestUtils.applicationClass(factory); } catch (ClassNotFoundException e) { log(servlet.getInternal().getMessage ("verifyMessageResourcesConfigs.invalid", factory)); ok = false; } } String key = mrcs[i].getKey(); if (key == null) { log(servlet.getInternal().getMessage ("verifyMessageResourcesConfigs.key")); } } return (ok); } /** *

      Return true if information returned by * config.findPluginConfigs is all valid; * otherwise, log error messages and return false.

      */ protected boolean verifyPlugInConfigs() { boolean ok = true; PlugInConfig pics[] = config.findPlugInConfigs(); for (int i = 0; i < pics.length; i++) { String className = pics[i].getClassName(); if (className == null) { log(servlet.getInternal().getMessage ("verifyPlugInConfigs.missing")); ok = false; } else { try { Class clazz = RequestUtils.applicationClass(className); } catch (ClassNotFoundException e) { log(servlet.getInternal().getMessage ("verifyPlugInConfigs.invalid", className)); ok = false; } } } return (ok); } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/0000755000175000017500000000000010423130301024156 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/bean/0000755000175000017500000000000010423130301025063 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/bean/doc-files/0000755000175000017500000000000010423130301026730 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/bean/doc-files/beanUML.gif0000644000175000017500000003221210404045226030714 0ustar arnaudarnaud00000000000000GIF87ay÷€€€€€€€€€ÀÀÀÀÜÀ¦Êð@ ` €   À à @ @@@`@€@ @À@à@` `@```€` `À`à`€ €@€`€€€ €À€à€   @ ` €   À à À À@À`À€À ÀÀÀàÀà à@à`à€à àÀààà@ @@@`@€@ @À@à@ @ @@ @` @€ @  @À @à @@@ @@@@@`@@€@@ @@À@@à@@`@ `@@`@``@€`@ `@À`@à`@€@ €@@€@`€@€€@ €@À€@à€@ @  @@ @` @€ @  @À @à @À@ À@@À@`À@€À@ À@ÀÀ@àÀ@à@ à@@à@`à@€à@ à@Àà@àà@€ €@€`€€€ €À€à€ € €@ €` €€ €  €À €à €@€ @€@@€`@€€@€ @€À@€à@€`€ `€@`€``€€`€ `€À`€à`€€€ €€@€€`€€€€€ €€À€€à€€ €  €@ €` €€ €  €À €à €À€ À€@À€`À€€À€ À€ÀÀ€àÀ€à€ à€@à€`à€€à€ à€Àà€àà€À À@À`À€À ÀÀÀàÀ À À@ À` À€ À  ÀÀ Àà À@À @À@@À`@À€@À @ÀÀ@Àà@À`À `À@`À``À€`À `ÀÀ`Àà`À€À €À@€À`€À€€À €ÀÀ€Àà€À À  À@ À` À€ À  ÀÀ Àà ÀÀÀ ÀÀ@ÀÀ`ÀÀ€ÀÀ ÀÀÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ!ù,yÿÿ H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\ɲ¥Ë—0cÊœI³¦Í› èÜɳ§ÏŸ@ƒ J´¨Ñ£H“*]Ê´©Ó§PŸâœJµªÕˆQ³jÝʵ«×¯`ƽJ¶¬YšbÓª]˶­Û·QÏÊK7¤ÏºxóêMyw¯ß¿~{L¸0Vž†+F»s±ãÇ…CžLdãʘ3“½¬¹³g†’? šeèÒ¨=snx õ`Ò®Q®ŽMûñj)­¶¾wà]í¼°œ-¼ø_â[Ü3ø®y_,\°ðà {Æ©Ïþ‘8÷ïg½ÛÿÓ¹…àSØ»—¯Èƒ#ù\˜ÿÁ÷¯¹}AoM1ô~„ÿ´ŸN(‘–%àMÞç U þóŽNR`÷Ï[´aÏ5ÇcÄ1EÀ—O><07üa‚nÔâCÛÁ¶`üÜ‹2Í8£M>è#8”ÄNïØ#E…Í sL?ýtø¡ð0ß&^ðÞHšd\ÊÈb`îHã@[¸å?7¢i`ÿ±èåš—u)œp¸`8õøãž1é)¡Ü&€§jü7¹ŒoŒnÇ­õä.~|À=[4Wä7K: ÚÀÈ ,?hN¨¡ýÄüv‡àâ¿óYðÅÏv×fŒq¾©å©XcÊ;Ô ²‰8î€Ë©æÓåædêò‘Sîüp½ó¶ž=ß¼:Ì û4ïèÀ´ ó¡KöSD‡G(:D”ŽÎÝÿsŽ’k÷|N½¿/Õ½iow¼7~1©ÏìòÿAÐ0€ÁîÝkXˆ*–’@Ô¡ñ£u&úWë¾Ð’ø¹o~ ² 78¼‰¼á8‚u(þ‰mXàöæE@{ªeøâÿšäÀ'1ÊC÷ð™Úç¸õ|XLçÿèˆÂ!P=™À éÌeê°4ÔY6¯IF :DW âºY¢ÖÝ ‚ÉJèù@”:^*jfKBÿhÖ¹™™š.p<0Ü 6ùd×>ùÉJB¤‘÷³Çð+x“:ʂԈnöÇMÒ8]”<ÄÐ~Xa™7¸¨ oP;|òs¤$Õ§I%‚R”Z§9_xÃK/Ð,(!>"ÌÇh ¥›nÑQãtAPÅ:ÈæLó¨ñƒ‹Z×ÊÖ¶f%#HHSçºM"à F ’£Z'Ó›)ëCHB¤0\ãW²_#ÏzMu…4©‹ylÂ$˺Z¶‘×¹¬eU‰ÖöQ²‘ëRAÛ‘Ïîɱ¤eìEVãÖÖºöµ°m\0ƱÚÖDˆ¦-íi—ÁƒyÊL¦mnSžÑÿ¤U/x2ípcÕ4…Ðji¹Ú7eN³ÚÔó-ñò \“#˜çñ½9´7-ë¦wyÒú-—î4}à=g:ð6ÎôàLøúþ|ÏéÑÞ˜Nòµ'ï@׺ÖANoS7Þ›ÇqÏCð°—]ôgöãÿ[yˆ·é&fyÄëRìÈO\o¶‡¼–uŸûê*üÊ‚x¹¿öñþúãUý°Eïù5\ù:×—ŸcÈß)qÉ›VÆ.âÛÛ·ûR^/Â_?bð³·°‡2…ýv‹Ïï$w}¬ƒ|äZkzá]Ï¿¦ /`o{ºÖ‹Wg—fwlvoó—vhŸVrät¿w[†\×GMP×.ÖU±gwAYqÕ{éu¼õÞ\ªÁeê%øV~ ‚¯ÑÁ‚³'Ø)(ƒ5È#Ùõ€²Õƒ>øƒoµ~98˜%ExVGè ‡„LØ„Nø„³5i@Ä`ƒCXƒVhùFRYx…×Õ…œÅ{g¤‚^x…ÿ`X<—T’‡bØ{Ž7}l§t´%…X†@’„F•~‰´†‡ÞEf!‡ZsÔg‡ B†ßQ{\Øg †nºÓ‡ì§y5ç&ĈÕ÷|†x[ˆ˜*·ˆ¿—u–Ç€°Ò] ·k[èr[s™x‡ônž‰â|({õ–ЍX{œtx¸Šô³‹68{cø‰‹sv­”zìoV§ˆ¹¨Š¼8g˜Eã‹ÓĈ¡.˜~gz5FŠ"7rÍXA›¨JGÑY‘ˆ·ªyÇ_”ˆ_aòj“‰fF†h¬š³Žø\(éw4VtŒ×h®Ú«4»¤¼WwË÷Žs1ý¨mTXtŒ6ª„hŠç-TË0‘ƳXû†3û´øÑt‡‰a†tcFzo«fÒ¶]á–x6 9ù6p]Û¨gÿ‹¶PÛrCgh¸W‹y¶nøÇŒZ²¹ê¨õG²"w©·G±OK©™×|çanz‰Ö'·ªÈŽ–ÚfŸjµ­¶·œ[‰Në·Oº§ý¶uTks¶8‰:‡oÕsxk­›µ`Ç¥XVfD×mö–µ”K³[*w †³txw@{³u[dC†´‚Öl‚w´w0¸Œæ¼Røg©«º¾š±´×²éx„ë°Êå½5K¦³Ú½þ&2+kx"‹¾iëdÀ1|¦•Û™¼H5¼)Ë¿\(¿B¹°Œ[À@8À)¹{o7t¡YwQz¬þ‹À䊧€È؇lhŒl ×G¬¢ dÉ%¶»Áý ¹bT¶ŽZÁìKÂ÷É_„šÂtÖ•Ìø¾,Ì…›§•ŠÂ#Gv¨H¶5\Â"L”º¹;<RK?lŸF›§pí˜vwÃW™Äf©'>vC<¹ûwq\§#ÌÿIÅ?dA< »3Ìod§s`”hT²©è`¹êªc|ÄÚ{akŒ‘(Œ< •€fd |fxÇ,™rvœÆ]Ö´‹ˆ°H¿‚|ž…5šjx·ÂÁ*¨a0ûÄtú[‡aÉ—LÀ¢¥¾-ÇÉwûz£ÊŠˆ4¨‡3KÁŒL?ª¬H›h‚É€›Ë+¬È³ÜOZ¥/|Ëé˽ØË铨Lª¸¬Ëó³©ļ5b[:Ìœº†”r  Ͷ#ÍÓìÌ„«À»ÌšÅ¬Íâ À<‚°¼²†^äìš,èO­|¤Ë<¤V]íl\ÃQ¦À(Ïà,¾û,bÙ|Ïß'³×œÌ{ÚÌ#MÃf7ʽ˜äë²Ô|ÐéìÍç,Ë ¹TÝìÏfÐmlÿ½^x¸Îm¨MÑ}!øKÒ­É(}ÐÄÌÎ+í«¾RêÑ»Ñê7²_\ÓÍ׈ÿ,Ó<Íg¶ÔI¬Ïý|±9ý²I­Ô²ÉÔMíÔþÌÌ MÏ3ƒ±Ò)Y«ÏÖŒÕX~ØÙË̙ɲªÓÝ[Ð#KÐTíÕ5ÉmíÖ#<Öº%×sÔ·b×wÓºªÕ\]ÒtÝ׌¦R ÑO;øaEøÓò+Ù‚¾DÒ„ýØÝqšˆmÈ·¿ŒÝØŽØ•sš_M®”=Å–}Ù¤œÕ„Ϋ½55Ö…]Ô˜ýÚ¯íÒ-ÔÚ‰¼Ø¤-Ø4ŒÓ2+¾]¯´ Û*¶ÝÚá|Ô†MÓ¼}ÉÇýÛÀÜÂ=ØØ-Ú ÝTœÜ®mÖ¬ýÜ»|ÕÅ]Õÿ?<ÝâL «Þâ­Ðß}Ö+ÞßêÝÚÝÓCÛx­Üîm߯=ÙŠÖ1Þù]Ûú-bgyÚgJß‹×Õ}Ûû-Ösz–+߾ܸ}ÝÞàvq‘î ïi0æ¼Þ¡má^án»J±E)ƒ¹¥×Öá0nÏ.¡àެâ"~ânâÙàK]ª*ޱå Ú¾ã%þÞ^ â’ ¥Ì«Áþxñ}²¿<â$~äHîãKà3š¥§ ÈºÝ.$Á^_^äõÝÞ»Í>|j¹»‹ÐѨޜæSNåU.Ód.Ûhžàžªy c¶A<´k›Ïîçì­ãenæ›]›_ªæÛ¸wzWºîÌÐæ‚>è”ÎÜ„¾ái¥ƒ7ahÜq"Y¾zºß—Žå þâNçuŽã?Þ¤Š~Œ8\¨ßvÆW®Ò’>é•nèV^èvÎZn†¬»xŸzŠLœ¼¨.綮ᩮë<žëȾê@Úê8\zÙ耤ã]­êÍŽë³ÞãÚ~æ@òìá­hÄ7´ öwË^ì¤~ìÝ^áҬ؇Øëÿ޹º[Ú²íÉníÜ~ê»~ˆ6úß´Jäž 9~ߦÎßBžðþ¿OÚ )ø3CNðë?ãÚá+ä_ëŸñÆ>çß±6ðß¹8ÍÔ€îæ?êâYb¢^ðöð+oéFóýÝòøºšò)¯ò3¯ñÚañi~ðßó6_óGÏÝ6¯kðŸôø¾î'¿ðîZ×Nÿô?¯ìYÏò3˜®_œ„ç+ó>¿õ@OõåºâeñFÿñÙNñí%òúÓ#-öj?ödŸöFè­t9÷tõQï²)”pßÂ{_ï}÷çŽôvRÀ×þ¬v¹‹ßUê<¿ñ‡‹/­”}Ó.ê^÷vï÷¿¾­¬–©ù’_ùRø‰Ï²‘7ør™ÚÒù›ßù¨OÏQÉö‡<æ¡ÿ«™ùúVÖûé^ôkï¶´®¥¸îÈ©¾mò±ïùŠüàÉp­ïÌžÞq' øÒÿùÚïüî¦Àý¥xßaÔûÀÅ_ÈC¿ýŸý4?ûÆ?ùìíÅÖ»hÑFºNÜí_jÕOÖ”ýÍúñOà@D˜Pá‚ 6ü@âDƒ+¬HñbDˆ#RôhQaFŒ#ž\(åJ–-]¾„SæLš5Yn|ˆÓæN“+uÖüi3hÌ¡­z7¤Ý¨OÅ*ûñm`Â…ÿ Þ9¸oNŒŠ™*æ{2ÊÉ”µVžY™nϨÿ>.[òçFÏzþ‹XõjÖ­¦†»X®fšm13f»õ¶[Þ’?‹¥*¸AÏea/R#gÔ»]?‡Ý2ÒÈR£M¾¹1i§r_wuþÝhø¹/É#&}=léíÝ¿?›Ù»Eîxíß-}¾úË_ÏW' ²ÿ KÏºÖØƒ/A¡ /#ìFʯªîöâ+Âý ÔÍ¿ Ñki@‘»ð0$±D°F,Àº,´Š>àdƒà ÁËõL4O:qä±Gù ±@™‹pGeìÏ+M ðF§kÅ'§¤2¹ñ‚Ì*â+Уv¬®ZòHžÂ¤5ÊÐB3M5×d³M7ÑLPÊ*ç,qÉ·ˆNÁšJm¹åø4I%kTL:£3òPEÝ““:D,ÊÐ2gÔÆEë|3SM7å4ÑK4TÒ™ŒTÃi\MÔOZUÌV£”TÕ=JTUCeMÖWsÜÿU×]y5•ÇZO%–ÐBeôW_‘=3°eY ”RT=–YgÝÒÉ…óT2k °SqÇÕIj§•ÖÒoS­ÑÆn4«Ãu|VÑ[›D—Ýy«Ý–ÂÁ¬m_~†6ØbÏU—ิ3w;>³ -;ï@ü3D…/«wQYuõÚ‹’3-!r0/.;Û6ãoUÖØY|}Žef¬8e”IÞ‹æ>{²ÐÕ’ùPŽ_Î7ןaî·EœIÞyRƒë¹ß£e Ú^¢F8á©tu³,oþš¿"Q¬úRw·Æ kµ+=í+}.òf/Á>¹¯x£u[Þ¼©¾zm¶Þ;`²¦âŽfn wwx;ãh ܼ²[vÙL¿n|T»ô¹ò†5÷¶oƒ‘Ž™sË{Ä\jÑ?:}ôÏ'ÜÔÓ~rÂÌ9üÓeŸÝ8Ê×a_µva}7[r#×qwñ^¾Nãõöœõ1ßKþrr§§þMãÏ^Þô¿A&Þõì¿G6úà‡±ù¶ÁîG¿wñǾ}ç)O?þ)×gß}ó·]~ýI§¿þîÉÿŸ÷ö7@øôϼþòG@¯u`ùì'ÀV°9ÄÛûж:bЃô`ÆXv;ðƒÃÞU6Â&ë„/ -:­iP_2Ä!YrÈ$N„Üag‡Áž¯….bQ'DîˆHTbM>'ÞЇŒbøª·E.ÆOfA«—§˜EGY-}M4âuGÆ^ÙîŒi´¢±ÈÆÎiŒÐƒ#üzE:BîLÙÂJ͘—=0.P‚$ºcyw¼AÉ@wÓÖò iH9ÎQ‘ÿUbØlx˜Aí-òuU+[M”ÈKjX.jˆS—8ÙPLv›Ý$)YIK–’t;ŽÄL¶ºÍ‡¤œe õ˜À5Ú2vÙyå»L¶K›&j°Ô(HÌbSX3”[—ÌÂÂŒ“• å4©YKk–0dÙŒÌÝ6¶S^Ïcï¦9Ë9J,¡ ^ M¶Ö)7~RœñÜcçIOË g•ï*Ùžö°Å˜U„¨k¾x¹"òš1zè0ºQî]´¢ÅQé ¹·ÇùN–ýh51åÐÝÕΤÁ´hJUJ§Œ¦µ)Je*Q7úóŸ'w3.uz>…çO ª¡6•¦äÌ+#GåéTªê”§|Œ£U«ºU*Uª=&WÅ*T¨Fõ«]kZ¯ZVœž­j»…ëÍzÓœR4®w j^åêÖ·âÕ¯­ck[Jп–k3õª^ûjXÆ2°‚åëb;Ù°H6©sÕ*e5»¹µZv°„Ýlh±ùYÌFÖ³¢e¬øè÷R3¢6´ªe*bççÚÍ®¯¬m-mS;Õ8a“ºÝmocúØÌ7­¶UžokÜ»®6¹²¥RM™K»ØV÷,FÅnvSx¼éŠõ¶ íç¼Î#ÝîæÍ*ÚEozÝ•ò«`åuj;§ÆÞÎ l@íÿ…ïÇä{4úzR)ÜÜ.QäÞæw§¥B[+Û,úà ’Ž<¬+Šàœ’^Ž$sÂ;¬ôàNp ”°"Á¤-[MçÁõ]0wÆ‘³Ò yb(âZÙ§d’ ¿!¦¢Šå[âØ”QŦ\‘hòò˜T¢S?Ú\æh{ƒc[~éœL+ÍAYœP‰½˜$Mc%·¾©=‰Èø¤J&\3¥=sÅïerÜ5»D¹‘SNèÈØ©$ëgˆgÖË)¿Lçú “™¦„Z37˜f%ö·\Š£3©–Ùe¿„oÞä,6Ål7_*MÈ2sºå:‹ Þäh­¸E繕€~³¥S¼a~fÈK¤¶:{iŸ5ÿÐÓ2´Í“)}HÇ«g£Ig–•ŒgÛ¸Z¡PûMqÂÜW®¡ª¦á­¥áýÒz×qÃË–¢,6~jøÇÃ>ØmDŠççI{‡wú£TÊ•¦=!›ÊË&\ŒµÌih–ôÎD¢wÍë ·£ý¾÷ºåÆÑrßûû׺Æîo[‹„?aÂ^pç»§‡ø®0‰CH½—i3ŽTÿ¬ãQ¼ñȉ‹h·œ\=F¹Ê ˜rë~ƒZæ‡!Í…vs/ò[Äkÿ=yxYŽÏ{÷ç™ßø+̳‘Š~ó>¶9ê¥æ˜ŠÏ½ö¯{ì)7Ñ®÷V²’²'FãD•~«ÆŸ¼þ&Ý™F†ÍùΙ‘mûUÓùå>ô®}Y¡1O¨Ì‚¦~î¿ûÙ_û‘cÖ°*ÁÏäÄ·?S©»¾¾a‰íD[{i2b§ë%\úø7|Ë/5û3œœ5^Ò?ã?ø“½ ÓÔ%dó‹F[(D›·é›®¬ºœ­ó´bK¦Á°’kœþë´ T´$±ó91ÿB!òÃ$ŠK37‘ 8·Ã¹™¹5¬+KœáH%Û´<#>!Á$$Í:#4ô¾Kó&7£¿”>p³Aås?÷ËAdò2!t´`³?Ó 3Öû%’ ?µÒAüP7ó»¿26õ C“ÃÈ{²lB~ª?ü³²i©7„«2,µ/«´ˆù³èCCÿkA=<®tS&w›Àà Âf[D- Á"4BC<°;A7¤D®zº…ËÃLÔÄ™ÁXòÄOœBLŦÂ@1Y¤E«Å[„E\ÔESÜÅ^,D_Fó ÆaL0b4ÆR<ÆddW¬etF˜»®¥g”Æê‹Æi´F 4¼kLF8üÀÛÓFid¸ÖCÒ ÇsäCrcÁÔ;ÇcLG ü“‰7 ÄÆvôÅwìB諳L³Çkì2ËBZ[BgZ¿~TÆt$µ.¾Tó6ƒtG][4c³CL›D‡¼GˆTÈ$ÛÇu´È‹ô >ƒ·d{D?ù@IìȪº¯Ô¤z™N¸È>S³³ù\H@@å H.T‘&T?3kCç lËÎÕ>õDÍçÔ™KŽ®ùµ í6•È:dÃíÛÏ ³ÏÓ´ @^ÎåPýOË$÷ô ³³í>/ÜÑ•À0´Ð!ÅÐKÿPjûޏ™CåÑmO; ÐðQc3QkS54µ¯ÁQ}Q=Rpäf‹±éìQïÌN["ˆq³;Of[¥eÓBy#É9m7ó´NÄÎ ÔÐÐlͰjNA4˜ïúR¬Èç’ÂYCATŽT¦ô8·°ÉĈÔÎZÔB=¸ÛÌIL ºJõÆÏôÔOU7áÔ‹©MÙÔ§-t4½CÕy¢°F=6}>=EMmÕâòR@½§ð|Ð[ÝÆܧ"ƒ”õÕ_m˜:|Ï_òµb%Cn íÀÉ7ƒIfuÕeEVUÖól3[¥Öe¼Py¬U,YSüàÖn•(Í¿^Mš±ñÂr5W)•\B‘Z§Ši1yW¬cŒúKW-4Ž4=Ã×pò×|e ö:¯úh¨Ã‘Öâ³M‚-´\û6y<g=Î%rX\[Î ¢X1©5½ØˆëSŒœœ´ÀûØOú—Ž=VeTX=Y/¢=ŽÌÕPó v|ÙªFYšÓ€½Ùë™ ˆÕ?’…É”ýYø Z¡ZæLNÇØn5ÙäTG¢=³Œ­Ù£%;s$T‘­7‚›‹§­Ô¨}Í©=@•¥ÆžÅZ-¢šå¬WΤM[ñÚ˜]G·}[H[µý›-¿B¥Û¯Í[õáÍ–¿³=T±ÛÀÕ‘ÉÙ­%6´eZÃU\LÙMÇ»ƒÜå“ÉýãÛÌÁ\ÂýS—ÿå\oõÜÏ5³ÜÕÒ…•1¡ h´=«e°µuÝËÚ[ÕÑYÑ7 ¹ÝTyIä¬HP“ÜÌ5Þß•ÔË+ÞÕ%ÞåuÞÚE^ððÄ ÚÌe[ËÕ¡èÅÆ“]ëÅÞ=ÕÚ[µLÜŠÝÑRÚãµTèÕ^Àý<ÔUÎïeÕù]ßö%ÝäÍ]ÇZß¿MÛµßÕ4ýí^llÜ­ƒÝÿÅ×h[2Ýe]©ßûÍŒñµÊòU_óÝ_øÖóõZû¥`.A¶¸ê­ÜæÜÖ` ®ßëEáf_Å5a®ßàçÅàì ܆áNa®àÖÕ ÆMŽùçàßÞþYÎaŽá"®á%¾ÿZ‡Ub(Ö\–,`6à¾Õ)¦âÑ•Â+Æâþ=`jåb>Ý–_ðµ[bg,cã8ÖÜÞåÞšUz_9nιÍcü=Ò7†c=Ncõäã>>ãËd­cáeâ ®â0ÍLäaF®b"–Þp±ÌI¦dAd mÎäÈääNžaK¾äÁåe4~fS~ähÞ^¿læå.fc–fbã¼¼æF†fUþdd~àmŽàL UNÑâUvgoöbs.çw6Hò “Ü1dg¦å@ößõ8I{®fâeq>ç‚FçtÿvH€¦çvÎâ&è‡vè€nÇ”½'ñDˆŽgx¦f}Þg~Î_žh'‘VÉõÃyÆhÞè“>b°^tÔµ”´qvߥÒf”–gƒÞàÒ2F„<6•2pE%§Áä½"á”æèi–éñG\òš Dl Å]VÞš6ê“Î舾eqÄB²±Ð|L?f;:“¾é²®êQ>Èø=2:¼ÖåÓZŒk褶énŽë\YæñKšûÔU&%΂Œb¸ã³Fê£vœ•sÉz™]­2(ÍÑ`£ZÂÆj©†äÁ¶j¹†×^‹kÄSåÎήӥëº^dÁ¦ìÒŽl´öH¶#kª–eË&í.víËfNíåò``ÎgØææƒmzéE…öè…í×¾êÊÆ[Ó½E߆ìØ>äÓ6íæfîlöDävnÉ.jêžìÕ®n»®Åufgl&­å~îá&îÀæí·<)–ÞmòfmšÖn¶q—oë\¥4RñôÖq~Ý£|r*_òðàV®N¾ò#Çñ7î–4ò1OñWóçò2OèlëóGíâq¿ƒsè–òõ~p¯òÎs=ï=ïs¤Ôi¤jëQ°Æ“GTÑvdÎDºòTöOçq—OóÔÇ3}lú6ÄHÁôôBv6ï÷ùþÇk3†HŠqUMwc‡¸ÐÝ»?öFïbž–5ü vlMrŸ}½†%˜æ•õX¿mVK?yR¡ž˜‡W½ÍK_ÀûöPwxjolnÄ%ÔWƒø“×;Ú½IU’^çXÜö÷–/pnÜÎÏÆNG\¨â+”g'©VöÈéÙ…o†èšÏïo¦ºíÂG\gZ|V¬ŽWò.ïú$$°[DLÓòìl žÀ{çzö¶tª{ßL4®•dl™·Ó‘‡jÝtt“‡{ý¾±’Rú†ïõ5°Žy3<øÒñ“­w{xw÷‹7t$Î8êÃ}Â4x‹'ù¾÷û¿7å}Ït"ÿ7·¡ÎkÅ??ŠŸùŠy\ŠûE{üV e6ÃP?ôϽ^kÇfΡó¨G¹Ù÷£jO{Ä1zF<þÍŽ7¤ÿ|œÖrâ‡YÑ߯»kþ„÷Çÿ¿ÞQ³GWÏ¿þ5—s¦»8ÝÓuîýÜ&çßßþò;¯ªôÇãnWÅëràÍWØß~Xþø:ˆþ,hð „ \èð!D‚ #R¬¨p¢ÅŒ7rìX#ĉ@:ùQ"J‹$=²léò寕0GÒ¬ió&Μ:wòì鳿E˜e ]H´èI¤J—2ÈÐèÓ¤*9mjõjѪX·r}¨é×¥a¹ŽíjVlÔ„óDid›’­H“mº•Yö,Þ³wóòUº·åß—›îk8"ȵAßlèXâã”’%»¥{ør^¹˜7[-Lµ¯g¿œGwt|Ó²ÚÆ”Qb4]Ùi[ vIÓ]û¶ËÐ1A“Öob¨©¿Õ {öÜä¨3×è»ùèçSùJŸ ýzðŪaß¹ûðíâÓ^/¯Ý<úð]«;§Í>½uåáEz¯Oœþxî‘ÃGo¼?|ï!f˜€,`i½&qu™tƒ­ýד!ÈÜb•¡pÔÕÆ¡†C…(߈î•`f‡¸Û‰)ž¸b‹ ÆhŒËyhâŒfÕ¸ÿÕŽ9Õ£ ºÈÛ‡AòØ"Ôý´$“M&éã“O’È™”!Vi›‘Þv%’7¸e–99&™erItgŽ(%—jª&œqzäfIr^ÅæetÚh'Ÿ}vˆØƒZ^ážùùß_‚y(£Ž—ŒàIÕhnŠªø›ž”jz'yäö馕y)¦¡šdvo²fd©6&§²è%©¸e*+®B¯øága\±æ*¢¥µ.:,²(FÔ ãÛ C²—¬WÆ{,µÙbØ©p¿rש«Sj[¨^T6wë¸é†+ßw­M»® é¹ÛÊ{ïfðBf}Þ¦ºß´ø~K«µØ |>0½":ˆS«±%ö`… Üfti"|ñzcLq½öbü1a#|&è’ 2Ê€‰|0ɽa—2Ì‚­<1fzšÌmÌÿ9Oç1Í5»ü²ÎA«d&ÑN^¬¦Í4 ½4Ó@ç‰ãÌMK=õÓ>ÿì4ÕYkq¾Pc½5ØagÕqÅåÝ,6ÚÙºyëÙ'§ý6ÜU4ÝFëêWÝy×7ßj¦ôœLµiß…ã *àwý¢á›:Øàâî V—Ž[î¨â?2K¡8KÜ–^i¶`H€²ªj¼—«ž%ä“¶.)±‡^­ä?ûí«ëçëó~â²S^»¾uN:ùîÉÏXXñîFè0¬Ò«Ü /îû¿ÑK¨õÐFûçÊ‹!óá»ë«}¿§EzêÈËL<„Þ×.éÙ ;>þ–¿lý›§ïš÷^—êFN(¬_TNGœãHkO¬º_þ"˜¸¿aO-uI¸<§›÷4/ßk°Þ¤¯ÈI°„µ‹]êHò«Êk„ï3 ù<(l%á‚Ú  sX$á¥p9à[M~úEÀ¾°‡É‘xȪ‡:|¢ÕxX’ =ps¯Y…lXÄ-jN€ ãß¾‚õ<‡}oŒáƒ" 6«"rQ\$_ãÅÌè„t¤àõ'Ç=ªq‚aŸ¨™G‘«Û `èF+²‘hRÙ!9ÈþÒ‘ŽÛ Þ2¹EþQ“žl’%C‰–UR”¦¤$ÈJyÊUš-•¬|%ÌT¹CXÒòh)“e-sY°‘é²—ãÂå,})Ì\3˜Ã<榊é5d2“QʼZ3£É§g.SšvÖ45¡yÍmæ(›eã&8+§3o†œäüf9ÓIH¡SÑl':Ý)Ïs1 žó¦=»vÏ}Úªžüü§6ƒ–O€²r ú$(Bû˜3ƒ&Ô’ =hC#Ê©©=T¢r¬hÕ,ªÑáQ £Í¡G3úÑ‘J±i!%iþNºK”ÿ²ÔxZSiKuSÍ}²¦KŠ©5g:D=â´™:Ýé:{ÊÌŸ¢Ž‘B-œM“šÉ~έ,_±Kç$GÔ£ÆsšLEaH´±$‘ªiÓ©ÉŠ÷9—’µ¨¥ójÜÀzÕöõKBmÝW½8¥ š­/m* 3Õy…õŒ®Y`dÐÇ †ð‹n³kÖeGAï‡gÝ!Ã|ˆAÀQ5làaKÑún‘í*ÙÆJXÇÒP°Ô f¿ÊÙ⼕…ƒ}mÃXØ=ç‘q¬}=á µTÚɵ©[›ØDê­Ê4”]!•ÈÛv6·ú™Àžç¯õÙö·Àm•ÿ°«BAÑJ£¡ÝÌ^k]ŠûØ_Ǩ¸ÖŒ±ØT­ œÕBo2Ìrî¿pvC ŽJœòM,}+;ÃѶ†L”êZ÷ß»O²Ï¥ìq"ÄÓ.±®+ÕP|üȬª0²üË¢z£çE,N½.ïšN4 `g&¸DVñDV¥ÒX'0Þ,‹o¬ããYuÇ>¦Œ,äAÕ¸Èc2’“¬ä%3¹ÉN~2”£,å)S¹ÊV¾2–³¬å-s¹Ë^¾N@;libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/bean/CookieTag.java0000644000175000017500000001053610404045220027604 0ustar arnaudarnaud00000000000000/* * $Id: CookieTag.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.taglib.bean; import java.util.ArrayList; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.TagSupport; import org.apache.struts.util.MessageResources; import org.apache.struts.taglib.TagUtils; /** * Define a scripting variable based on the value(s) of the specified * cookie received with this request. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class CookieTag extends TagSupport { // ------------------------------------------------------------- Properties /** * The name of the scripting variable that will be exposed as a page * scope attribute. */ protected String id = null; public String getId() { return (this.id); } public void setId(String id) { this.id = id; } /** * The message resources for this package. */ protected static MessageResources messages = MessageResources.getMessageResources ("org.apache.struts.taglib.bean.LocalStrings"); /** * Return an array of Cookies if multiple is non-null. */ protected String multiple = null; public String getMultiple() { return (this.multiple); } public void setMultiple(String multiple) { this.multiple = multiple; } /** * The name of the cookie whose value is to be exposed. */ protected String name = null; public String getName() { return (this.name); } public void setName(String name) { this.name = name; } /** * The default value to return if no cookie of the specified name is found. */ protected String value = null; public String getValue() { return (this.value); } public void setValue(String value) { this.value = value; } // --------------------------------------------------------- Public Methods /** * Retrieve the required property and expose it as a scripting variable. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { // Retrieve the required cookie value(s) ArrayList values = new ArrayList(); Cookie cookies[] = ((HttpServletRequest) pageContext.getRequest()).getCookies(); if (cookies == null) cookies = new Cookie[0]; for (int i = 0; i < cookies.length; i++) { if (name.equals(cookies[i].getName())) values.add(cookies[i]); } if ((values.size() < 1) && (value != null)) values.add(new Cookie(name, value)); if (values.size() < 1) { JspException e = new JspException (messages.getMessage("cookie.get", name)); TagUtils.getInstance().saveException(pageContext, e); throw e; } // Expose an appropriate variable containing these results if (multiple == null) { Cookie cookie = (Cookie) values.get(0); pageContext.setAttribute(id, cookie); } else { cookies = new Cookie[values.size()]; pageContext.setAttribute(id, values.toArray(cookies)); } return (SKIP_BODY); } /** * Release all allocated resources. */ public void release() { super.release(); id = null; multiple = null; name = null; value = null; } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/bean/CookieTei.java0000644000175000017500000000332010404045174027613 0ustar arnaudarnaud00000000000000/* * $Id: CookieTei.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.taglib.bean; import javax.servlet.jsp.tagext.TagData; import javax.servlet.jsp.tagext.TagExtraInfo; import javax.servlet.jsp.tagext.VariableInfo; /** * Implementation of TagExtraInfo for the cookie * tag, identifying the scripting object(s) to be made visible. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class CookieTei extends TagExtraInfo { /** * Return information about the scripting variables to be created. */ public VariableInfo[] getVariableInfo(TagData data) { String className = null; if (data.getAttribute("multiple") == null) className = "javax.servlet.http.Cookie"; else className = "javax.servlet.http.Cookie[]"; return new VariableInfo[] { new VariableInfo(data.getAttributeString("id"), className, true, VariableInfo.AT_BEGIN) }; } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/bean/DefineTag.java0000644000175000017500000001531610404045204027570 0ustar arnaudarnaud00000000000000/* * $Id: DefineTag.java 190780 2005-06-15 17:09:02Z jholmes $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.taglib.bean; import javax.servlet.jsp.JspException; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.tagext.BodyTagSupport; import org.apache.struts.taglib.TagUtils; import org.apache.struts.util.MessageResources; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * Define a scripting variable based on the value(s) of the specified * bean property. * * @version $Rev: 190780 $ $Date: 2005-06-15 18:09:02 +0100 (Wed, 15 Jun 2005) $ */ public class DefineTag extends BodyTagSupport { /** * Commons logging instance. */ private static final Log log = LogFactory.getLog(DefineTag.class); // ---------------------------------------------------- Protected variables /** * The message resources for this package. */ protected static MessageResources messages = MessageResources.getMessageResources ("org.apache.struts.taglib.bean.LocalStrings"); /** * The body content of this tag (if any). */ protected String body = null; // ------------------------------------------------------------- Properties /** * The name of the scripting variable that will be exposed as a page * scope attribute. */ protected String id = null; public String getId() { return (this.id); } public void setId(String id) { this.id = id; } /** * The name of the bean owning the property to be exposed. */ protected String name = null; public String getName() { return (this.name); } public void setName(String name) { this.name = name; } /** * The name of the property to be retrieved. */ protected String property = null; public String getProperty() { return (this.property); } public void setProperty(String property) { this.property = property; } /** * The scope within which to search for the specified bean. */ protected String scope = null; public String getScope() { return (this.scope); } public void setScope(String scope) { this.scope = scope; } /** * The scope within which the newly defined bean will be creatd. */ protected String toScope = null; public String getToScope() { return (this.toScope); } public void setToScope(String toScope) { this.toScope = toScope; } /** * The fully qualified Java class name of the value to be exposed. */ protected String type = null; public String getType() { return (this.type); } public void setType(String type) { this.type = type; } /** * The (String) value to which the defined bean will be set. */ protected String value = null; public String getValue() { return (this.value); } public void setValue(String value) { this.value = value; } // --------------------------------------------------------- Public Methods /** * Check if we need to evaluate the body of the tag * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { return (EVAL_BODY_TAG); } /** * Save the body content of this tag (if any), or throw a JspException * if the value was already defined. * * @exception JspException if value was defined by an attribute */ public int doAfterBody() throws JspException { if (bodyContent != null) { body = bodyContent.getString(); if (body != null) { body = body.trim(); } if (body.length() < 1) { body = null; } } return (SKIP_BODY); } /** * Retrieve the required property and expose it as a scripting variable. * * @exception JspException if a JSP exception has occurred */ public int doEndTag() throws JspException { // Enforce restriction on ways to declare the new value int n = 0; if (this.body != null) { n++; } if (this.name != null) { n++; } if (this.value != null) { n++; } if (n > 1) { JspException e = new JspException(messages.getMessage("define.value", id)); TagUtils.getInstance().saveException(pageContext, e); throw e; } // Retrieve the required property value Object value = this.value; if ((value == null) && (name != null)) { value = TagUtils.getInstance().lookup(pageContext, name, property, scope); } if ((value == null) && (body != null)) { value = body; } if (value == null) { JspException e = new JspException(messages.getMessage("define.null", id)); TagUtils.getInstance().saveException(pageContext, e); throw e; } // Expose this value as a scripting variable int inScope = PageContext.PAGE_SCOPE; try { if (toScope != null) { inScope = TagUtils.getInstance().getScope(toScope); } } catch (JspException e) { log.warn("toScope was invalid name so we default to PAGE_SCOPE", e); } pageContext.setAttribute(id, value, inScope); // Continue processing this page return (EVAL_PAGE); } /** * Release all allocated resources. */ public void release() { super.release(); body = null; id = null; name = null; property = null; scope = null; toScope = "page"; type = null; value = null; } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/bean/DefineTei.java0000644000175000017500000000361210404045222027572 0ustar arnaudarnaud00000000000000/* * $Id: DefineTei.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.taglib.bean; import javax.servlet.jsp.tagext.TagData; import javax.servlet.jsp.tagext.TagExtraInfo; import javax.servlet.jsp.tagext.VariableInfo; /** * Implementation of TagExtraInfo for the define * tag, identifying the scripting object(s) to be made visible. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class DefineTei extends TagExtraInfo { /** * Return information about the scripting variables to be created. */ public VariableInfo[] getVariableInfo(TagData data) { String type = (String)data.getAttribute("type"); Object name = data.getAttribute("name"); Object value = data.getAttribute("value"); if (type == null) { if ( (value!=null) || (name==null) ) type = "java.lang.String"; else type = "java.lang.Object"; } return new VariableInfo[] { new VariableInfo(data.getAttributeString("id"), type, true, VariableInfo.AT_END ) }; } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/bean/HeaderTag.java0000644000175000017500000001174610404045224027573 0ustar arnaudarnaud00000000000000/* * $Id: HeaderTag.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.taglib.bean; import java.util.ArrayList; import java.util.Enumeration; import javax.servlet.http.HttpServletRequest; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.TagSupport; import org.apache.struts.util.MessageResources; import org.apache.struts.taglib.TagUtils; /** * Define a scripting variable based on the value(s) of the specified * header received with this request. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class HeaderTag extends TagSupport { // ------------------------------------------------------------- Properties /** * The name of the scripting variable that will be exposed as a page * scope attribute. */ protected String id = null; public String getId() { return (this.id); } public void setId(String id) { this.id = id; } /** * The message resources for this package. */ protected static MessageResources messages = MessageResources.getMessageResources( "org.apache.struts.taglib.bean.LocalStrings"); /** * Return an array of header values if multiple is non-null. */ protected String multiple = null; public String getMultiple() { return (this.multiple); } public void setMultiple(String multiple) { this.multiple = multiple; } /** * The name of the header whose value is to be exposed. */ protected String name = null; public String getName() { return (this.name); } public void setName(String name) { this.name = name; } /** * The default value to return if no header of the specified name is found. */ protected String value = null; public String getValue() { return (this.value); } public void setValue(String value) { this.value = value; } // --------------------------------------------------------- Public Methods /** * Retrieve the required property and expose it as a scripting variable. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { if (this.multiple == null) { this.handleSingleHeader(); } else { this.handleMultipleHeaders(); } return SKIP_BODY; } /** * Expose an array of header values. * @throws JspException * @since Struts 1.2 */ protected void handleMultipleHeaders() throws JspException { ArrayList values = new ArrayList(); Enumeration items = ((HttpServletRequest) pageContext.getRequest()).getHeaders(name); while (items.hasMoreElements()){ values.add(items.nextElement()); } if (values.isEmpty() && (this.value != null)){ values.add(this.value); } String headers[] = new String[values.size()]; if (headers.length == 0) { JspException e = new JspException(messages.getMessage("header.get", name)); TagUtils.getInstance().saveException(pageContext, e); throw e; } pageContext.setAttribute(id, values.toArray(headers)); } /** * Expose a single header value. * @throws JspException * @since Struts 1.2 */ protected void handleSingleHeader() throws JspException { String value = ((HttpServletRequest) pageContext.getRequest()).getHeader(name); if ((value == null) && (this.value != null)) { value = this.value; } if (value == null) { JspException e = new JspException(messages.getMessage("header.get", name)); TagUtils.getInstance().saveException(pageContext, e); throw e; } pageContext.setAttribute(id, value); } /** * Release all allocated resources. */ public void release() { super.release(); id = null; multiple = null; name = null; value = null; } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/bean/HeaderTei.java0000644000175000017500000000330510404045246027575 0ustar arnaudarnaud00000000000000/* * $Id: HeaderTei.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.taglib.bean; import javax.servlet.jsp.tagext.TagData; import javax.servlet.jsp.tagext.TagExtraInfo; import javax.servlet.jsp.tagext.VariableInfo; /** * Implementation of TagExtraInfo for the header * tag, identifying the scripting object(s) to be made visible. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class HeaderTei extends TagExtraInfo { /** * Return information about the scripting variables to be created. */ public VariableInfo[] getVariableInfo(TagData data) { String className = null; if (data.getAttribute("multiple") == null) className = "java.lang.String"; else className = "java.lang.String[]"; return new VariableInfo[] { new VariableInfo(data.getAttributeString("id"), className, true, VariableInfo.AT_BEGIN) }; } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/bean/IncludeTag.java0000644000175000017500000002103110404045222027750 0ustar arnaudarnaud00000000000000/* * $Id: IncludeTag.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.taglib.bean; import java.io.BufferedInputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.TagSupport; import org.apache.struts.util.MessageResources; import org.apache.struts.util.RequestUtils; import org.apache.struts.taglib.TagUtils; /** * Define the contents of a specified intra-application request as a * page scope attribute of type java.lang.String. If the * current request is part of a session, the session identifier will be * included in the generated request, so it will be part of the same * session. *

      * FIXME: In a servlet 2.3 environment, we can use a * wrapped response passed to RequestDispatcher.include(). * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class IncludeTag extends TagSupport { // ------------------------------------------------------------- Properties /** * Buffer size to use when reading the input stream. */ protected static final int BUFFER_SIZE = 256; /** * The anchor to be added to the end of the generated hyperlink. */ protected String anchor = null; public String getAnchor() { return (this.anchor); } public void setAnchor(String anchor) { this.anchor = anchor; } /** * The name of the global ActionForward that contains a * path to our requested resource. */ protected String forward = null; public String getForward() { return (this.forward); } public void setForward(String forward) { this.forward = forward; } /** * The absolute URL to the resource to be included. */ protected String href = null; public String getHref() { return (this.href); } public void setHref(String href) { this.href = href; } /** * The name of the scripting variable that will be exposed as a page * scope attribute. */ protected String id = null; public String getId() { return (this.id); } public void setId(String id) { this.id = id; } /** * The message resources for this package. */ protected static MessageResources messages = MessageResources.getMessageResources("org.apache.struts.taglib.bean.LocalStrings"); /** * Deprecated method to set the "name" attribute, which has been * replaced by the "page" attribute. * * @deprecated use setPage(String) instead */ public void setName(String name) { this.page = name; } /** * The context-relative URI of the page or servlet to be included. */ protected String page = null; public String getPage() { return (this.page); } public void setPage(String page) { this.page = page; } /** * Include transaction token (if any) in the hyperlink? */ protected boolean transaction = false; public boolean getTransaction() { return (this.transaction); } public void setTransaction(boolean transaction) { this.transaction = transaction; } protected boolean useLocalEncoding = false; public boolean isUseLocalEncoding() { return useLocalEncoding; } public void setUseLocalEncoding(boolean b) { useLocalEncoding = b; } // --------------------------------------------------------- Public Methods /** * Define the contents returned for the specified resource as a * page scope attribute. * * @exception JspException if a JSP error occurs */ public int doStartTag() throws JspException { // Set up a URLConnection to read the requested resource Map params = TagUtils.getInstance().computeParameters( pageContext, null, null, null, null, null, null, null, transaction); // FIXME - attributes String urlString = null; URL url = null; try { urlString = TagUtils.getInstance().computeURLWithCharEncoding(pageContext, forward, href, page, null,null, params, anchor, false, useLocalEncoding); if (urlString.indexOf(':') < 0) { HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); url = new URL(RequestUtils.requestURL(request), urlString); } else { url = new URL(urlString); } } catch (MalformedURLException e) { TagUtils.getInstance().saveException(pageContext, e); throw new JspException(messages.getMessage("include.url", e.toString())); } URLConnection conn = null; try { // Set up the basic connection conn = url.openConnection(); conn.setAllowUserInteraction(false); conn.setDoInput(true); conn.setDoOutput(false); // Add a session id cookie if appropriate HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); addCookie(conn, urlString, request); // Connect to the requested resource conn.connect(); } catch (Exception e) { TagUtils.getInstance().saveException(pageContext, e); throw new JspException( messages.getMessage("include.open", url.toString(), e.toString())); } // Copy the contents of this URL StringBuffer sb = new StringBuffer(); try { BufferedInputStream is = new BufferedInputStream(conn.getInputStream()); InputStreamReader in = new InputStreamReader(is); // FIXME - encoding char buffer[] = new char[BUFFER_SIZE]; int n = 0; while (true) { n = in.read(buffer); if (n < 1) break; sb.append(buffer, 0, n); } in.close(); } catch (Exception e) { TagUtils.getInstance().saveException(pageContext, e); throw new JspException( messages.getMessage("include.read", url.toString(), e.toString())); } // Define the retrieved content as a page scope attribute pageContext.setAttribute(id, sb.toString()); // Skip any body of this tag return (SKIP_BODY); } /** * Add a session id cookie if appropriate. Can be overloaded to * support a cluster. * @param conn * @param urlString * @param request * @since Struts 1.2.0 */ protected void addCookie(URLConnection conn, String urlString, HttpServletRequest request) { if ((conn instanceof HttpURLConnection) && urlString.startsWith(request.getContextPath()) && (request.getRequestedSessionId() != null) && request.isRequestedSessionIdFromCookie()) { StringBuffer sb = new StringBuffer("JSESSIONID="); sb.append(request.getRequestedSessionId()); conn.setRequestProperty("Cookie", sb.toString()); } } /** * Release all allocated resources. */ public void release() { super.release(); anchor = null; forward = null; href = null; id = null; page = null; transaction = false; } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/bean/IncludeTei.java0000644000175000017500000000301210404045204027755 0ustar arnaudarnaud00000000000000/* * $Id: IncludeTei.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.taglib.bean; import javax.servlet.jsp.tagext.TagData; import javax.servlet.jsp.tagext.TagExtraInfo; import javax.servlet.jsp.tagext.VariableInfo; /** * Implementation of TagExtraInfo for the include * tag, identifying the scripting object(s) to be made visible. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class IncludeTei extends TagExtraInfo { /** * Return information about the scripting variables to be created. */ public VariableInfo[] getVariableInfo(TagData data) { return new VariableInfo[] { new VariableInfo(data.getAttributeString("id"), "java.lang.String", true, VariableInfo.AT_BEGIN) }; } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/bean/LocalStrings.properties0000644000175000017500000000247210404045232031621 0ustar arnaudarnaud00000000000000cookie.get=No cookie {0} was included in this request define.null=Define tag cannot set a null value for bean with id: {0} define.value=Define tag can contain only one of name attribute, value attribute, or body content for bean with id: {0} header.get=No header {0} was included in this request include.destination=You must specify exactly one of forward, href, or page include.forward=Missing ActionForward entry {0} include.forwards=Missing ActionForwards application scope bean include.malformed=Cannot create URL for {0} include.open=Exception opening resource {0}: {1} include.read=Exception reading resource {0}: {1} include.url=Cannot create include URL: {0} message.message=Missing message for key {0} message.property=Property for message key must be a String message.resources=Missing resources attribute {0} page.selector=Invalid page context selector {0} parameter.get=No parameter {0} was included in this request resource.get=No resource {0} available in this application size.collection=No valid collection specified for size tag size.noCollectionOrName=Must specify either a collection or name attribute for size tag struts.missing=No Struts internal object named {0} is available struts.selector=You must specify exactly one of formBean, forward, or mapping write.format=Wrong format string: '{0}' libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/bean/LocalStrings_ja.properties0000644000175000017500000000640210404045220032265 0ustar arnaudarnaud00000000000000cookie.get=\u30af\u30c3\u30ad\u30fc {0} \u306f\u3053\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u5185\u306b\u542b\u307e\u308c\u3066\u3044\u307e\u305b\u3093 define.null=define\u30bf\u30b0\u306b\u306fnull\u306e\u5024\u3092\u8a2d\u5b9a\u3067\u304d\u307e\u305b\u3093 define.value=define\u30bf\u30b0\u306b\u306fname\u5c5e\u6027\u3001value\u5c5e\u6027\u3001body\u30b3\u30f3\u30c6\u30f3\u30c8\u306e\u3044\u305a\u308c\u304b\u4e00\u3064\u3060\u3051\u3092\u542b\u3080\u3053\u3068\u304c\u51fa\u6765\u307e\u3059 header.get=\u30d8\u30c3\u30c0 {0} \u306f\u3053\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u5185\u306b\u542b\u307e\u308c\u3066\u3044\u307e\u305b\u3093 include.destination=forward\u3001href\u3001page\u306E\u3044\u305A\u308C\u304B\u4E00\u3064\u3092\u6307\u5B9A\u3057\u306A\u3051\u308C\u3070\u306A\u308A\u307E\u305B\u3093 include.forward=\u30a2\u30af\u30b7\u30e7\u30f3\u30d5\u30a9\u30ef\u30fc\u30c9 {0} \u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093 include.forwards=ActionForwards\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30b9\u30b3\u30fc\u30d7bean\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093 include.malformed={0} \u306b\u5bfe\u5fdc\u3059\u308bURL\u3092\u751f\u6210\u3059\u308b\u3053\u3068\u304c\u51fa\u6765\u307e\u305b\u3093 include.open=\u30ea\u30bd\u30fc\u30b9 {0} \u3092\u958b\u304f\u969b\u306e\u4f8b\u5916: {1} include.read=\u30ea\u30bd\u30fc\u30b9 {0} \u3092\u8aad\u307f\u8fbc\u3080\u969b\u306e\u4f8b\u5916: {1} include.url=\u30a4\u30f3\u30af\u30eb\u30fc\u30c9URL\u3092\u751f\u6210\u3059\u308b\u3053\u3068\u304c\u51fa\u6765\u307e\u305b\u3093: {0} message.message=\u30ad\u30fc {0} \u306b\u5bfe\u5fdc\u3059\u308b\u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093 message.property=\u30e1\u30c3\u30bb\u30fc\u30b8\u30ad\u30fc\u306b\u5bfe\u5fdc\u3059\u308b\u30d7\u30ed\u30d1\u30c6\u30a3\u306fString\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093 message.resources=\u30ea\u30bd\u30fc\u30b9\u306e\u5c5e\u6027 {0} \u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093 page.selector=\u4e0d\u6b63\u306a\u30da\u30fc\u30b8\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u30bb\u30ec\u30af\u30bf {0} parameter.get=\u30d1\u30e9\u30e1\u30fc\u30bf {0} \u306f\u3053\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u5185\u306b\u542b\u307e\u308c\u3066\u3044\u307e\u305b\u3093 resource.get=\u30ea\u30bd\u30fc\u30b9 {0} \u306f\u3053\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\u5229\u7528\u3067\u304d\u307e\u305b\u3093 size.collection=size\u30bf\u30b0\u306b\u5bfe\u3057\u3066\u6709\u52b9\u306a\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093 size.noCollectionOrName=size\u30bf\u30b0\u306b\u306f\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u304bname\u5c5e\u6027\u306e\u3046\u3061\u3069\u3061\u3089\u304b\u3092\u6b63\u78ba\u306b\u6307\u5b9a\u3057\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093 struts.missing= {0} \u3068\u3044\u3046\u540d\u79f0\u306eStruts\u306e\u5185\u90e8\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306f\u5229\u7528\u3067\u304d\u307e\u305b\u3093 struts.selector=formBean\u3001forward\u3001mapping\u306e\u3044\u305a\u308c\u304b\u4e00\u3064\u3092\u6b63\u78ba\u306b\u6307\u5b9a\u3057\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093 write.format=\u4e0d\u6b63\u306a\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u6587\u5b57\u5217: '{0}' libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/bean/MessageTag.java0000644000175000017500000001515610404045220027762 0ustar arnaudarnaud00000000000000/* * $Id: MessageTag.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.taglib.bean; import java.util.Locale; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.TagSupport; import org.apache.struts.Globals; import org.apache.struts.taglib.TagUtils; import org.apache.struts.util.MessageResources; /** * Custom tag that retrieves an internationalized messages string (with * optional parametric replacement) from the ActionResources * object stored as a context attribute by our associated * ActionServlet implementation. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class MessageTag extends TagSupport { // ------------------------------------------------------------- Properties /** * The first optional argument. */ protected String arg0 = null; public String getArg0() { return (this.arg0); } public void setArg0(String arg0) { this.arg0 = arg0; } /** * The second optional argument. */ protected String arg1 = null; public String getArg1() { return (this.arg1); } public void setArg1(String arg1) { this.arg1 = arg1; } /** * The third optional argument. */ protected String arg2 = null; public String getArg2() { return (this.arg2); } public void setArg2(String arg2) { this.arg2 = arg2; } /** * The fourth optional argument. */ protected String arg3 = null; public String getArg3() { return (this.arg3); } public void setArg3(String arg3) { this.arg3 = arg3; } /** * The fifth optional argument. */ protected String arg4 = null; public String getArg4() { return (this.arg4); } public void setArg4(String arg4) { this.arg4 = arg4; } /** * The servlet context attribute key for our resources. */ protected String bundle = null; public String getBundle() { return (this.bundle); } public void setBundle(String bundle) { this.bundle = bundle; } /** * The default Locale for our server. * @deprecated This will be removed after Struts 1.2. */ protected static final Locale defaultLocale = Locale.getDefault(); /** * The message key of the message to be retrieved. */ protected String key = null; public String getKey() { return (this.key); } public void setKey(String key) { this.key = key; } /** * Name of the bean that contains the message key. */ protected String name = null; public String getName() { return (this.name); } public void setName(String name) { this.name = name; } /** * Name of the property to be accessed on the specified bean. */ protected String property = null; public String getProperty() { return (this.property); } public void setProperty(String property) { this.property = property; } /** * The scope to be searched to retrieve the specified bean. */ protected String scope = null; public String getScope() { return (this.scope); } public void setScope(String scope) { this.scope = scope; } /** * The session scope key under which our Locale is stored. */ protected String localeKey = Globals.LOCALE_KEY; public String getLocale() { return (this.localeKey); } public void setLocale(String localeKey) { this.localeKey = localeKey; } /** * The message resources for this package. */ protected static MessageResources messages = MessageResources.getMessageResources( "org.apache.struts.taglib.bean.LocalStrings"); // --------------------------------------------------------- Public Methods /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { String key = this.key; if (key == null) { // Look up the requested property value Object value = TagUtils.getInstance().lookup(pageContext, name, property, scope); if (value != null && !(value instanceof String)) { JspException e = new JspException(messages.getMessage("message.property", key)); TagUtils.getInstance().saveException(pageContext, e); throw e; } key = (String) value; } // Construct the optional arguments array we will be using Object args[] = new Object[] { arg0, arg1, arg2, arg3, arg4 }; // Retrieve the message string we are looking for String message = TagUtils.getInstance().message( pageContext, this.bundle, this.localeKey, key, args); if (message == null) { JspException e = new JspException( messages.getMessage("message.message", "\"" + key + "\"")); TagUtils.getInstance().saveException(pageContext, e); throw e; } TagUtils.getInstance().write(pageContext, message); return (SKIP_BODY); } /** * Release any acquired resources. */ public void release() { super.release(); arg0 = null; arg1 = null; arg2 = null; arg3 = null; arg4 = null; bundle = Globals.MESSAGES_KEY; key = null; name = null; property = null; scope = null; localeKey = Globals.LOCALE_KEY; } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/bean/PageTag.java0000644000175000017500000000701010404045236027247 0ustar arnaudarnaud00000000000000/* * $Id: PageTag.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.taglib.bean; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.TagSupport; import org.apache.struts.util.MessageResources; import org.apache.struts.taglib.TagUtils; /** * Define a scripting variable that exposes the requested page context * item as a scripting variable and a page scope bean. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class PageTag extends TagSupport { // ------------------------------------------------------------- Properties /** * The name of the scripting variable that will be exposed as a page * scope attribute. */ protected String id = null; public String getId() { return (this.id); } public void setId(String id) { this.id = id; } /** * The message resources for this package. */ protected static MessageResources messages = MessageResources.getMessageResources ("org.apache.struts.taglib.bean.LocalStrings"); /** * The name of the page context property to be retrieved. */ protected String property = null; public String getProperty() { return (this.property); } public void setProperty(String property) { this.property = property; } // --------------------------------------------------------- Public Methods /** * Retrieve the required configuration object and expose it as a * scripting variable. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { // Retrieve the requested object to be exposed Object object = null; if ("application".equalsIgnoreCase(property)) object = pageContext.getServletContext(); else if ("config".equalsIgnoreCase(property)) object = pageContext.getServletConfig(); else if ("request".equalsIgnoreCase(property)) object = pageContext.getRequest(); else if ("response".equalsIgnoreCase(property)) object = pageContext.getResponse(); else if ("session".equalsIgnoreCase(property)) object = pageContext.getSession(); else { JspException e = new JspException (messages.getMessage("page.selector", property)); TagUtils.getInstance().saveException(pageContext, e); throw e; } // Expose this value as a scripting variable pageContext.setAttribute(id, object); return (SKIP_BODY); } /** * Release all allocated resources. */ public void release() { super.release(); id = null; property = null; } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/bean/PageTei.java0000644000175000017500000000424510404045216027262 0ustar arnaudarnaud00000000000000/* * $Id: PageTei.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.taglib.bean; import javax.servlet.jsp.tagext.TagData; import javax.servlet.jsp.tagext.TagExtraInfo; import javax.servlet.jsp.tagext.VariableInfo; /** * Implementation of TagExtraInfo for the page * tag, identifying the scripting object(s) to be made visible. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class PageTei extends TagExtraInfo { /** * Return information about the scripting variables to be created. */ public VariableInfo[] getVariableInfo(TagData data) { String type = null; String property = data.getAttributeString("property"); if ("application".equalsIgnoreCase(property)) type = "javax.servlet.ServletContext"; else if ("config".equalsIgnoreCase(property)) type = "javax.servlet.ServletConfig"; else if ("request".equalsIgnoreCase(property)) type = "javax.servlet.ServletRequest"; else if ("response".equalsIgnoreCase(property)) type = "javax.servlet.ServletResponse"; else if ("session".equalsIgnoreCase(property)) type = "javax.servlet.http.HttpSession"; else type = "java.lang.Object"; return new VariableInfo[] { new VariableInfo(data.getAttributeString("id"), type, true, VariableInfo.AT_BEGIN) }; } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/bean/ParameterTag.java0000644000175000017500000001060710404045242030316 0ustar arnaudarnaud00000000000000/* * $Id: ParameterTag.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.taglib.bean; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.TagSupport; import org.apache.struts.util.MessageResources; import org.apache.struts.taglib.TagUtils; /** * Define a scripting variable based on the value(s) of the specified * parameter received with this request. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class ParameterTag extends TagSupport { // ------------------------------------------------------------- Properties /** * The name of the scripting variable that will be exposed as a page * scope attribute. */ protected String id = null; public String getId() { return (this.id); } public void setId(String id) { this.id = id; } /** * The message resources for this package. */ protected static MessageResources messages = MessageResources.getMessageResources( "org.apache.struts.taglib.bean.LocalStrings"); /** * Return an array of parameter values if multiple is * non-null. */ protected String multiple = null; public String getMultiple() { return (this.multiple); } public void setMultiple(String multiple) { this.multiple = multiple; } /** * The name of the parameter whose value is to be exposed. */ protected String name = null; public String getName() { return (this.name); } public void setName(String name) { this.name = name; } /** * The default value to return if no parameter of the specified name is * found. */ protected String value = null; public String getValue() { return (this.value); } public void setValue(String value) { this.value = value; } // --------------------------------------------------------- Public Methods /** * Retrieve the required property and expose it as a scripting variable. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { // Deal with a single parameter value if (multiple == null) { String value = pageContext.getRequest().getParameter(name); if ((value == null) && (this.value != null)) { value = this.value; } if (value == null) { JspException e = new JspException(messages.getMessage("parameter.get", name)); TagUtils.getInstance().saveException(pageContext, e); throw e; } pageContext.setAttribute(id, value); return (SKIP_BODY); } // Deal with multiple parameter values String values[] = pageContext.getRequest().getParameterValues(name); if ((values == null) || (values.length == 0)) { if (this.value != null) { values = new String[] { this.value }; } } if ((values == null) || (values.length == 0)) { JspException e = new JspException(messages.getMessage("parameter.get", name)); TagUtils.getInstance().saveException(pageContext, e); throw e; } pageContext.setAttribute(id, values); return (SKIP_BODY); } /** * Release all allocated resources. */ public void release() { super.release(); id = null; multiple = null; name = null; value = null; } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/bean/ParameterTei.java0000644000175000017500000000331610404045222030321 0ustar arnaudarnaud00000000000000/* * $Id: ParameterTei.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.taglib.bean; import javax.servlet.jsp.tagext.TagData; import javax.servlet.jsp.tagext.TagExtraInfo; import javax.servlet.jsp.tagext.VariableInfo; /** * Implementation of TagExtraInfo for the parameter * tag, identifying the scripting object(s) to be made visible. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class ParameterTei extends TagExtraInfo { /** * Return information about the scripting variables to be created. */ public VariableInfo[] getVariableInfo(TagData data) { String className = null; if (data.getAttribute("multiple") == null) className = "java.lang.String"; else className = "java.lang.String[]"; return new VariableInfo[] { new VariableInfo(data.getAttributeString("id"), className, true, VariableInfo.AT_BEGIN) }; } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/bean/ResourceTag.java0000644000175000017500000001064110404045210030156 0ustar arnaudarnaud00000000000000/* * $Id: ResourceTag.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.taglib.bean; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.TagSupport; import org.apache.struts.util.MessageResources; import org.apache.struts.taglib.TagUtils; /** * Define a scripting variable based on the contents of the specified * web application resource. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class ResourceTag extends TagSupport { // ------------------------------------------------------------- Properties /** * Buffer size to use when reading the input stream. */ protected static final int BUFFER_SIZE = 256; /** * The name of the scripting variable that will be exposed as a page * scope attribute. */ protected String id = null; public String getId() { return (this.id); } public void setId(String id) { this.id = id; } /** * Return an InputStream to the specified resource if this is non-null. */ protected String input = null; public String getInput() { return (this.input); } public void setInput(String input) { this.input = input; } /** * The message resources for this package. */ protected static MessageResources messages = MessageResources.getMessageResources( "org.apache.struts.taglib.bean.LocalStrings"); /** * The module-relative URI of the resource whose contents are to * be exposed. */ protected String name = null; public String getName() { return (this.name); } public void setName(String name) { this.name = name; } // --------------------------------------------------------- Public Methods /** * Retrieve the required property and expose it as a scripting variable. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { // Acquire an input stream to the specified resource InputStream stream = pageContext.getServletContext().getResourceAsStream(name); if (stream == null) { JspException e = new JspException(messages.getMessage("resource.get", name)); TagUtils.getInstance().saveException(pageContext, e); throw e; } // If we are returning an InputStream, do so and return if (input != null) { pageContext.setAttribute(id, stream); return (SKIP_BODY); } // Accumulate the contents of this resource into a StringBuffer try { StringBuffer sb = new StringBuffer(); InputStreamReader reader = new InputStreamReader(stream); char buffer[] = new char[BUFFER_SIZE]; int n = 0; while (true) { n = reader.read(buffer); if (n < 1) { break; } sb.append(buffer, 0, n); } reader.close(); pageContext.setAttribute(id, sb.toString()); } catch (IOException e) { TagUtils.getInstance().saveException(pageContext, e); throw new JspException(messages.getMessage("resource.get", name)); } return (SKIP_BODY); } /** * Release all allocated resources. */ public void release() { super.release(); id = null; input = null; name = null; } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/bean/ResourceTei.java0000644000175000017500000000325610404045224030175 0ustar arnaudarnaud00000000000000/* * $Id: ResourceTei.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.taglib.bean; import javax.servlet.jsp.tagext.TagData; import javax.servlet.jsp.tagext.TagExtraInfo; import javax.servlet.jsp.tagext.VariableInfo; /** * Implementation of TagExtraInfo for the resource * tag, identifying the scripting object(s) to be made visible. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class ResourceTei extends TagExtraInfo { /** * Return information about the scripting variables to be created. */ public VariableInfo[] getVariableInfo(TagData data) { String type = null; if (data.getAttribute("input") == null) type = "java.lang.String"; else type = "java.io.InputStream"; return new VariableInfo[] { new VariableInfo(data.getAttributeString("id"), type, true, VariableInfo.AT_BEGIN) }; } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/bean/SizeTag.java0000644000175000017500000001215210404045250027304 0ustar arnaudarnaud00000000000000/* * $Id: SizeTag.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.taglib.bean; import java.lang.reflect.Array; import java.util.Collection; import java.util.Map; import javax.servlet.jsp.JspException; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.tagext.TagSupport; import org.apache.struts.util.MessageResources; import org.apache.struts.taglib.TagUtils; /** * Define a scripting variable that will contain the number of elements * found in a specified array, Collection, or Map. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class SizeTag extends TagSupport { // ------------------------------------------------------------- Properties /** * The actual collection to be counted. */ protected Object collection = null; public Object getCollection() { return (this.collection); } public void setCollection(Object collection) { this.collection = collection; } /** * The name of the scripting variable that will be exposed as a page * scope attribute. */ protected String id = null; public String getId() { return (this.id); } public void setId(String id) { this.id = id; } /** * The message resources for this package. */ protected static MessageResources messages = MessageResources.getMessageResources ("org.apache.struts.taglib.bean.LocalStrings"); /** * The name of the bean owning the property to be counted. */ protected String name = null; public String getName() { return (this.name); } public void setName(String name) { this.name = name; } /** * The name of the property to be retrieved. */ protected String property = null; public String getProperty() { return (this.property); } public void setProperty(String property) { this.property = property; } /** * The scope within which to search for the specified bean. */ protected String scope = null; public String getScope() { return (this.scope); } public void setScope(String scope) { this.scope = scope; } // --------------------------------------------------------- Public Methods /** * Retrieve the required property and expose it as a scripting variable. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { // Retrieve the required property value Object value = this.collection; if (value == null) { if (name == null) { // Must specify either a collection attribute or a name // attribute. JspException e = new JspException (messages.getMessage("size.noCollectionOrName")); TagUtils.getInstance().saveException(pageContext, e); throw e; } value = TagUtils.getInstance().lookup(pageContext, name, property, scope); } // Identify the number of elements, based on the collection type int size = 0; if (value == null) { JspException e = new JspException (messages.getMessage("size.collection")); TagUtils.getInstance().saveException(pageContext, e); throw e; } else if (value.getClass().isArray()) { size = Array.getLength(value); } else if (value instanceof Collection) { size = ((Collection) value).size(); } else if (value instanceof Map) { size = ((Map) value).size(); } else { JspException e = new JspException (messages.getMessage("size.collection")); TagUtils.getInstance().saveException(pageContext, e); throw e; } // Expose this size as a scripting variable pageContext.setAttribute(this.id, new Integer(size), PageContext.PAGE_SCOPE); return (SKIP_BODY); } /** * Release all allocated resources. */ public void release() { super.release(); collection = null; id = null; name = null; property = null; scope = null; } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/bean/SizeTei.java0000644000175000017500000000300210404045216027306 0ustar arnaudarnaud00000000000000/* * $Id: SizeTei.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.taglib.bean; import javax.servlet.jsp.tagext.TagData; import javax.servlet.jsp.tagext.TagExtraInfo; import javax.servlet.jsp.tagext.VariableInfo; /** * Implementation of TagExtraInfo for the size * tag, identifying the scripting object(s) to be made visible. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class SizeTei extends TagExtraInfo { /** * Return information about the scripting variables to be created. */ public VariableInfo[] getVariableInfo(TagData data) { return new VariableInfo[] { new VariableInfo(data.getAttributeString("id"), "java.lang.Integer", true, VariableInfo.AT_BEGIN) }; } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/bean/StrutsTag.java0000644000175000017500000001123410404045224027677 0ustar arnaudarnaud00000000000000/* * $Id: StrutsTag.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.taglib.bean; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.TagSupport; import org.apache.struts.config.ModuleConfig; import org.apache.struts.taglib.TagUtils; import org.apache.struts.util.MessageResources; /** * Define a scripting variable that exposes the requested Struts * internal configuraton object. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class StrutsTag extends TagSupport { // ------------------------------------------------------------- Properties /** * The name of the scripting variable that will be exposed as a page * scope attribute. */ protected String id = null; public String getId() { return (this.id); } public void setId(String id) { this.id = id; } /** * The message resources for this package. */ protected static MessageResources messages = MessageResources.getMessageResources ("org.apache.struts.taglib.bean.LocalStrings"); /** * The name of the ActionFormBean object to be exposed. */ protected String formBean = null; public String getFormBean() { return (this.formBean); } public void setFormBean(String formBean) { this.formBean = formBean; } /** * The name of the ActionForward object to be exposed. */ protected String forward = null; public String getForward() { return (this.forward); } public void setForward(String forward) { this.forward = forward; } /** * The name of the ActionMapping object to be exposed. */ protected String mapping = null; public String getMapping() { return (this.mapping); } public void setMapping(String mapping) { this.mapping = mapping; } // --------------------------------------------------------- Public Methods /** * Retrieve the required configuration object and expose it as a * scripting variable. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { // Validate the selector arguments int n = 0; if (formBean != null) n++; if (forward != null) n++; if (mapping != null) n++; if (n != 1) { JspException e = new JspException (messages.getMessage("struts.selector")); TagUtils.getInstance().saveException(pageContext, e); throw e; } // Retrieve our module configuration information ModuleConfig config = TagUtils.getInstance().getModuleConfig(pageContext); // Retrieve the requested object to be exposed Object object = null; String selector = null; if (formBean != null) { selector = formBean; object = config.findFormBeanConfig(formBean); } else if (forward != null) { selector = forward; object = config.findForwardConfig(forward); } else if (mapping != null) { selector = mapping; object = config.findActionConfig(mapping); } if (object == null) { JspException e = new JspException (messages.getMessage("struts.missing", selector)); TagUtils.getInstance().saveException(pageContext, e); throw e; } // Expose this value as a scripting variable pageContext.setAttribute(id, object); return (SKIP_BODY); } /** * Release all allocated resources. */ public void release() { super.release(); id = null; formBean = null; forward = null; mapping = null; } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/bean/StrutsTei.java0000644000175000017500000000365510404045246027721 0ustar arnaudarnaud00000000000000/* * $Id: StrutsTei.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.taglib.bean; import javax.servlet.jsp.tagext.TagData; import javax.servlet.jsp.tagext.TagExtraInfo; import javax.servlet.jsp.tagext.VariableInfo; /** * Implementation of TagExtraInfo for the struts * tag, identifying the scripting object(s) to be made visible. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class StrutsTei extends TagExtraInfo { /** * Return information about the scripting variables to be created. */ public VariableInfo[] getVariableInfo(TagData data) { String type = null; if (data.getAttribute("formBean") != null) type = "org.apache.struts.action.ActionFormBean"; else if (data.getAttribute("forward") != null) type = "org.apache.struts.action.ActionForward"; else if (data.getAttribute("mapping") != null) type = "org.apache.struts.action.ActionMapping"; else type = "java.lang.Object"; return new VariableInfo[] { new VariableInfo(data.getAttributeString("id"), type, true, VariableInfo.AT_BEGIN) }; } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/bean/WriteTag.java0000644000175000017500000003046010404045210027462 0ustar arnaudarnaud00000000000000/* * $Id: WriteTag.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.taglib.bean; import java.math.BigDecimal; import java.math.BigInteger; import java.text.DecimalFormat; import java.text.Format; import java.text.NumberFormat; import java.text.SimpleDateFormat; import java.util.Locale; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.TagSupport; import org.apache.struts.taglib.TagUtils; import org.apache.struts.util.MessageResources; /** * Tag that retrieves the specified property of the specified bean, converts * it to a String representation (if necessary), and writes it to the current * output stream, optionally filtering characters that are sensitive in HTML. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class WriteTag extends TagSupport { /** * The key to search default format string for java.sql.Timestamp in resources. */ public static final String SQL_TIMESTAMP_FORMAT_KEY = "org.apache.struts.taglib.bean.format.sql.timestamp"; /** * The key to search default format string for java.sql.Date in resources. */ public static final String SQL_DATE_FORMAT_KEY = "org.apache.struts.taglib.bean.format.sql.date"; /** * The key to search default format string for java.sql.Time in resources. */ public static final String SQL_TIME_FORMAT_KEY = "org.apache.struts.taglib.bean.format.sql.time"; /** * The key to search default format string for java.util.Date in resources. */ public static final String DATE_FORMAT_KEY = "org.apache.struts.taglib.bean.format.date"; /** * The key to search default format string for int (byte, short, etc.) in resources. */ public static final String INT_FORMAT_KEY = "org.apache.struts.taglib.bean.format.int"; /** * The key to search default format string for float (double, BigDecimal) in * resources. */ public static final String FLOAT_FORMAT_KEY = "org.apache.struts.taglib.bean.format.float"; /** * The message resources for this package. */ protected static MessageResources messages = MessageResources.getMessageResources( "org.apache.struts.taglib.bean.LocalStrings"); // ------------------------------------------------------------- Properties /** * Filter the rendered output for characters that are sensitive in HTML? */ protected boolean filter = true; public boolean getFilter() { return (this.filter); } public void setFilter(boolean filter) { this.filter = filter; } /** * Should we ignore missing beans and simply output nothing? */ protected boolean ignore = false; public boolean getIgnore() { return (this.ignore); } public void setIgnore(boolean ignore) { this.ignore = ignore; } /** * Name of the bean that contains the data we will be rendering. */ protected String name = null; public String getName() { return (this.name); } public void setName(String name) { this.name = name; } /** * Name of the property to be accessed on the specified bean. */ protected String property = null; public String getProperty() { return (this.property); } public void setProperty(String property) { this.property = property; } /** * The scope to be searched to retrieve the specified bean. */ protected String scope = null; public String getScope() { return (this.scope); } public void setScope(String scope) { this.scope = scope; } /** * The format string to be used as format to convert * value to String. */ protected String formatStr = null; public String getFormat() { return (this.formatStr); } public void setFormat(String formatStr) { this.formatStr = formatStr; } /** * The key to search format string in applciation resources */ protected String formatKey = null; public String getFormatKey() { return (this.formatKey); } public void setFormatKey(String formatKey) { this.formatKey = formatKey; } /** * The session scope key under which our Locale is stored. */ protected String localeKey = null; public String getLocale() { return (this.localeKey); } public void setLocale(String localeKey) { this.localeKey = localeKey; } /** * The servlet context attribute key for our resources. */ protected String bundle = null; public String getBundle() { return (this.bundle); } public void setBundle(String bundle) { this.bundle = bundle; } // --------------------------------------------------------- Public Methods /** * Process the start tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { // Look up the requested bean (if necessary) if (ignore) { if (TagUtils.getInstance().lookup(pageContext, name, scope) == null) { return (SKIP_BODY); // Nothing to output } } // Look up the requested property value Object value = TagUtils.getInstance().lookup(pageContext, name, property, scope); if (value == null) { return (SKIP_BODY); // Nothing to output } // Convert value to the String with some formatting String output = formatValue(value); // Print this property value to our output writer, suitably filtered if (filter) { TagUtils.getInstance().write(pageContext, TagUtils.getInstance().filter(output)); } else { TagUtils.getInstance().write(pageContext, output); } // Continue processing this page return (SKIP_BODY); } /** * Retrieve format string from message bundle and return null if * message not found or message string. * * @param formatKey value to use as key to search message in bundle * @exception JspException if a JSP exception has occurred */ protected String retrieveFormatString(String formatKey) throws JspException { String result = TagUtils.getInstance().message( pageContext, this.bundle, this.localeKey, formatKey); if ((result != null) && !(result.startsWith("???") && result.endsWith("???"))) { return result; } else { return null; } } /** * Format value according to specified format string (as tag attribute or * as string from message resources) or to current user locale. * * When a format string is retrieved from the message resources, * applyLocalizedPattern is used. For more about localized * patterns, see * . * (To obtain the correct value for some characters, you may need to view * the file in a hex editor and then use the Unicode escape form in the * property resources file.) * * @param valueToFormat value to process and convert to String * @exception JspException if a JSP exception has occurred */ protected String formatValue(Object valueToFormat) throws JspException { Format format = null; Object value = valueToFormat; Locale locale = TagUtils.getInstance().getUserLocale(pageContext, this.localeKey); boolean formatStrFromResources = false; String formatString = formatStr; // Return String object as is. if (value instanceof java.lang.String) { return (String) value; } else { // Try to retrieve format string from resources by the key from formatKey. if ((formatString == null) && (formatKey != null)) { formatString = retrieveFormatString(this.formatKey); if (formatString != null) { formatStrFromResources = true; } } // Prepare format object for numeric values. if (value instanceof Number) { if (formatString == null) { if ((value instanceof Byte) || (value instanceof Short) || (value instanceof Integer) || (value instanceof Long) || (value instanceof BigInteger)) { formatString = retrieveFormatString(INT_FORMAT_KEY); } else if ( (value instanceof Float) || (value instanceof Double) || (value instanceof BigDecimal)) { formatString = retrieveFormatString(FLOAT_FORMAT_KEY); } if (formatString != null) { formatStrFromResources = true; } } if (formatString != null) { try { format = NumberFormat.getNumberInstance(locale); if (formatStrFromResources) { ((DecimalFormat) format).applyLocalizedPattern( formatString); } else { ((DecimalFormat) format).applyPattern(formatString); } } catch (IllegalArgumentException e) { JspException ex = new JspException( messages.getMessage("write.format", formatString)); TagUtils.getInstance().saveException(pageContext, ex); throw ex; } } } else if (value instanceof java.util.Date) { if (formatString == null) { if (value instanceof java.sql.Timestamp) { formatString = retrieveFormatString(SQL_TIMESTAMP_FORMAT_KEY); } else if (value instanceof java.sql.Date) { formatString = retrieveFormatString(SQL_DATE_FORMAT_KEY); } else if (value instanceof java.sql.Time) { formatString = retrieveFormatString(SQL_TIME_FORMAT_KEY); } else if (value instanceof java.util.Date) { formatString = retrieveFormatString(DATE_FORMAT_KEY); } } if (formatString != null) { format = new SimpleDateFormat(formatString, locale); } } } if (format != null) { return format.format(value); } else { return value.toString(); } } /** * Release all allocated resources. */ public void release() { super.release(); filter = true; ignore = false; name = null; property = null; scope = null; formatStr = null; formatKey = null; localeKey = null; bundle = null; } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/bean/package.html0000644000175000017500000005447710404045226027377 0ustar arnaudarnaud00000000000000 Package Documentation for org.apache.struts.taglib.bean Package The "struts-bean" tag library contains JSP custom tags useful in defining new beans (in any desired scope) from a variety of possible sources, as well as a tag to render a particular bean (or bean property) to the output response.


      Introduction

      Much of the power of JavaServer Pages (JSP) technology comes from the simple and powerful mechanisms by which the servlet that is generated automatically from your JSP source page can interact with JavaBeans that represent the computational state of your application. In standard JSP pages, the <jsp:useBean> tag is used create a bean (if necessary), as well as a "scripting variable" that can be used within scriptlets to refer to these beans.

      The "struts-bean" tag library provides substantial enhancements to the basic capability provided by <jsp:useBean>, as discussed in the following sections:

      • Bean Properties - Extended syntax to refer to JavaBean properties with simple names (same as the standard JSP tags <jsp:getProperty> and <jsp:setProperty>), nested names (a property named address.city returns the value retrieved by the Java expression getAddress().getCity()), and indexed names (a property named address[3] retrieves the fourth address from the indexed "address" property of a bean).
      • Bean Creation - New JSP beans, in any scope, can be created from a variety of objects and APIs associated with the current request, or with the servlet container in which this page is running.
      • Bean Output - Supports the rendering of textual output from a bean (or bean property), which will be included in the response being created by your JSP page.

      See the Bean Tags Reference for detailed information about the available tags in this tag library, and the valid attributes for each tag.
      Bean Tag UML

      Bean Properties

      Common Tag Attributes

      The tags in the "struts-bean" tag library (and, generally, in all tag libraries included with the Struts framework) share a common set of tag attributes that have the same meaning, no matter what tag they are used on. These common attributes include:

      • id - Names the scripting variable that will be created by this custom tag, as well as the key value used to locate this bean in the scope defined by the scope attribute.
      • name - Defines the key value by which an existing bean will be looked up in the scope defined by the scope attribute (if any), or by searching through the various scopes in the standard order (page, request, session, application).
      • property - Defines the name of a JavaBeans property, of the JSP bean identified by the name and (optional) scope attributes, whose value is to be used by this custom tag. If not specified, the bean identified by name is itself used as the value of interest. See below for more discussion about how a property can be referenced.
      • scope - Identifies the JSP scope ("page", "request", "session", or "application" within which a particular bean will be searched for (under the key specified by the name attribute) or created (under the key specified by the id attribute). If not specified, beans will generally be searched for in the order listed above, or created in page scope.
      Property References

      Struts tags that support the property tag generally also recognize a rich syntax for getting and setting properties. There are three types of references supported: simple, nested, and indexed.

      Simple References - These are equivalent to the syntax you use with the standard <jsp:getProperty> and <jsp:setProperty> tags. A reference to a property named "foo" is converted into a method call to getFoo() or setFoo(value) (as appropriate), using the standard JavaBeans Specification naming conventions for bean properties. Struts uses the standard Java introspection APIs to identify the names of the actual property getter and setter methods, so your beans can provided customized method names through the use of a BeanInfo class. See the JavaBeans Specification, available at http://java.sun.com/products/javabeans/ , for more information.

      Nested References - Nested references are used to access a property through a hierarchy of property names separated by periods ("."), similar to the way that nested properties are accessed in JavaScript. For example, the following property reference in a getter (such as the <bean:define> tag discussed below):

          property="foo.bar.baz"

      is translated into the equivalent the Java expression:

          getFoo().getBar().getBaz()

      If a nested reference is used in a setter (such as when an input form is processed), the property setter is called on the last property in the chain. For the above property reference, the equivalent Java expression would be:

          getFoo().getBar().setBaz(value)

      Indexed References - Subscripts can be used to access individual elements of properties whose value is actually an array, or whose underlying JavaBean offers indexed getter and setter methods. For example, the following property reference in a getter (such as the <bean:define> tag discussed below):

          property="foo[2]"

      is translated into the equivalent of the Java expression:

          getFoo(2);

      while the same property reference in a setter would call the equivalent of:

          setFoo(2, value)

      As you can see from the above translations, the subscripts used in indexed references are zero relative (that is, the first element in an array is foo[0]), just as is true in the Java language.

      Combined References - Nesting and indexing can be combined in arbitrary ways, so that expressions like foo.bar[0].baz[2] are legal. You must be careful, of course, to ensure that the actual beans being accessed by these references have properties of the appropriate names and types. Otherwise, JSP runtime exceptions will be thrown.

      See the JavaDocs for PropertyUtils for more detailed information about the mechanisms that Struts uses to access properties in a general way, through Java reflection APIs.


      Bean Creation

      Introduction

      New beans can be created, and introduced into one of the four standard JSP scopes (page, request, session, and application) through a variety of techniques. The following subsections describe the use of the following approaches:

      • Java Code in Action Classes
      • Java Code in Scriptlets
      • The Standard <jsp:useBean> Tag
      • The Struts <bean:define> Tag
      • Other Struts Copying Tags
      Java Code in Action Classes

      Because the JSP pages are compiled into Servlets, your Action classes that are invoked by the Struts controller servlet have convenient access to three of the four standard JSP scopes (request, session, and application). It is very common practice for the business logic contained in your Action class to create results that are stored in request or session scope, which will be used by a JSP page you forward control to in rendering the next page of the user interface.

      Request Scope - To store a bean in request scope under name "cust", your Action class would execute code similar to this:

          Customer customer = ... create or acquire a customer reference ...;
      request.setAttribute("cust", customer);

      Session Scope - To store a bean in session scope under name "user" (perhaps in a logon action), your Action class would execute code similar to this:

          User user = ... look up valid user in the database ...;
      HttpSession session = request.getSession();
      session.setAttribute("user", user);

      Application Scope - Generally, application scope beans are initialized in the init() method of a startup servlet. However, it is legal for an Action class to create such beans, if this is appropriate, like this:

          Foo foo = ... create a Foo ...;
      servlet.getServletContext().setAttribute("foo", foo);
      Java Code in Scriptlets

      While it is not a recommended practice in Struts-based applications (because developers will be tempted to mix business logic and presentation logic in their JSP pages), it is legal for scriptlet code in a JSP page to create new JavaBeans dynamically, and add them to any of the four possible scopes, as demonstrated in the code examples below:

      Page Scope - To store a bean in page scope under name "foo", your scriptlet must execute code like this:

      <%
      Foo foo = ... create a foo ...;
      pageContext.setAttribute("foo", foo, PageContext.PAGE_SCOPE);
      %>

      Request Scope - To store a bean in request scope under name "cust", your scriplet must execute code like this:

      <%
      Customer customer = ... create or acquire a customer reference ...;
      pageContext.setAttribute("cust", customer, PageContext.REQUEST_SCOPE);
      %>

      Session Scope - To store a bean in session scope under name "user", (perhaps as a result of a validated login), your scriplet must execute code like this:

      <%
      User user = ... look up valid user in the database ...;
      pageContext.setAttribute("user", user, PageContext.SESSION_SCOPE);
      %>

      Application Scope - Generally, application scope beans are initialized in the init() method of a startup servlet. However, a scriptlet can create such beans, if appropriate, like this:

      <%
      Foo foo = ... create a Foo ...;
      pageContext.setAttribute("foo", foo, PageContext.APPLICATION_SCOPE);
      %>

      NOTE - As mentioned above, using scriptlets in your JSP pages is strongly discouraged in a Struts based application, unless you are executing code that is only related to presentation of existing data. In general, your application's processing logic should be encapsulated in Action classes (or in beans or EJBs called by those classes), rather than being intermixed in your JSP pages.

      The Standard <jsp:useBean> Tag

      JavaServer Pages (JSP) offers a standard tag, <jsp:useBean> that can be used to create a new bean, or introduce a reference to an existing bean, into a JSP page. Beans (or bean references) introduced through this mechanism are completely interoperable with beans created by any of the Struts creation techniques described in this section.

      You must use <jsp:useBean> to introduce a reference to an existing bean, if you wish to reference that bean with other standard JSP tags (such as <jsp:getProperty> or <jsp:setProperty>). If you only wish to reference such beans with other Struts tags, use of <jsp:useBean> is not required.

      For more information about the <jsp:useBean> tag, see the JavaServer Pages Specification, available at http://java.sun.com/products/jsp/download.html .

      The Struts <bean:define> Tag

      Struts provides a powerful, general purpose, tag (<bean:define> ) that can be used to create a new bean, in any scope, by copying another bean (or the value of the property of another bean). This tag supports the "property" attribute, and therefore all the power of property references, as discused above . It can be used in a variety of different ways, described further below. Unless you specify the "toScope" attribute, all defined beans will be created in page scope.

      Introduce A String Constant - You can create a new bean that has a constant String value (or the result of calculating a runtime expression):

          <bean:define id="foo" value="This is a new String"/>
      <bean:define id="bar" value='<%= "Hello, " + user.getName() %>'/>
      <bean:define id="last" scope="session"
      value='<%= request.getRequestURI() %>'/>

      Copy An Existing Bean - You can create a new reference to an existing bean object. You can specify the Java class or interface the new bean is expected to conform to with the "type" attribute, or accept the default type of java.lang.Object (this only affects the scripting variable that is exposed to scriptlets, so it is not generally meaningful in Struts-based applications).

          <bean:define id="foo" name="bar"/>
      <bean:define id="baz" name="bop" type="com.mycompany.MyBopClass"/>

      Copy An Existing Bean Property - You can create a new bean that is initialized to the value returned by a property getter. The value of the "property" attribute can be any simple, nested, or indexed property reference that follows the rules described earlier. In the first example below, we also illustrate accessing the property of a request scope bean, and creating the new bean in session scope (rather than the default page scope).

          <bean:define id="foo" name="bar" property="baz" scope="request"
      toScope="session"/>
      <bean:define id="bop" name="user" property="role[3].name"/>
      Other Struts Copying Tags

      Struts offers a variety of bean creation tags that copy existing beans (or bean properties) from the environment within which this page is running, and the request that is currently being processed. Not all of the attributes for each tag are illustrated in the examples below - see the Bean Tags Reference for more information. Any bean created by these tags exists only in page scope, for the remainder of the current page.

      Copy A Cookie - You can create a new bean containing a javax.servlet.http.Cookie that was included in the current request. If no cookie of the specified name was included, a request time expression will be thrown - therefore, it is common to nest the use of this tag inside a <logic:present cookie="xxx"> tag to ensure that the cookie was really included. If there is the possibility that more than one cookie of the same name was included, specify the "multiple" attribute (and the resulting bean will be an array of Cookies, instead of a single Cookie).

          <bean:cookie id="foo" name="cookiename"/>
      <bean:cookie id="all" name="JSESSIONID" multiple="true"/>

      Copy A Request Header - You can create a new bean containing the value of an HTTP header included in this request. If no header of the specified name was included, a request time exception will be thrown - therefore, it is common to nest the use of this tag inside a <logic:present header="xxx"> tag to ensure that the header was really included. If there is the possibility that more than one header of the same name was included, specify the "multiple" attribute (and the resulting value bean will be an array of String values, instead of a single String).

          <bean:header id="agent" name="User-Agent"/>
      <bean:header id="languages" name="Accept-Language" multiple="true"/>

      Copy A Dynamically Created Response - You can generate an internal request to the application you are running, and turn the response data that is returned from that request into a bean (of type String). One possible use for this technique is to acquire dynamically created XML formatted data that will be stored in a bean and later manipulated (such as by applying an XSLT stylesheet). If the current request is part of a session, the generated request for the include will also include the session identifier (and thus be considered part of the same session).

          <bean:include id="text" name="/generateXml?param1=a&param2=b"/>

      Copy A JSP Implicitly Defined Object - You can create a bean that is one of the JSP implicitly defined objects (see the JSP spec for more details). This is useful if you wish to perform property getter actions against the implicit object with a custom tag instead of a scriptlet.

          <bean:page id="app" property="application"/>
      <bean:page id="sess" property="session"/>

      Copy A Request Parameter - You can create a new bean containing the value of a parameter included in this request. If no parameter of the specified name was included, a request time exception will be thrown - therefore, it is common to nest the use of this tag inside a <logic:present parameter="xxx"> tag to ensure that the parameter was really included. If there is the possibility that more than one parameter of the same name was included, specify the "multiple" attribute (and the resulting value bean will be an array of String values, instead of a single String).

          <bean:parameter id="name" name="name"/>
      <bean:header id="options" name="option" multiple="true"/>

      Copy a Web Application Resource - You can create a new bean containing either the value of a web application resource as a String, or a java.io.InputStream for reading the content of that resource. The resource is accessed with a context-relative path (beginning with "/"), using the ServletContext.getResource() or ServletContext.getResourceAsStream() methods on the underlying application object.

          <bean:resource id="deployment" name="/WEB-INF/web.xml"/>
      <bean:resource id="stream" name="/WEB-INF/web.xml"
      input="true"/>

      Copy A Struts Configuration Object - You can create a new bean containing one of the standard Struts framework configuration objects. Doing this gives you access to the properties of the configuration object, if needed.

          <bean:struts id="form" formBean="CustomerForm"/>
      <bean:struts id="fwd" forward="success"/>
      <bean:struts id="map" mapping="/saveCustomer"/>

      Bean Output

      None of the Struts Bean tags discussed so far render any output to the response page that is being generated from this JSP page. They are executed in order to make relevant Java objects visible as beans for further manipulation. The following tags cause output to be written to the response, and therefore made visible to the ultimate requester.

      Render An Internationalized Message - You can specify a message key (with optional parameter replacement objects) that are passed to a MessageResources object that returns the corresponding message text. The message text will be copied to the response currently being created. By default, messages are looked up in the application resources bundle that is initialized for you (as an application scope bean) by the Struts controller servlet, using the Locale must recently stored in the user's session. These defaults can be overridden by setting values for the "bundle" and "locale" attributes, as described in the Bean Tags Reference .

          <bean:message key="label.Cancel"/>
      <bean:message key="message.hello" arg0='<%= user.getFullName() %>'/>

      Render A Bean or Bean Property - The contents of a bean, or bean property, are converted to a String and then copied to the response currently being created. This tag understands the syntax for simple, nested, and indexed property references described above . Beans from any scope can be requested - by default, the scopes are searched in expanding visibility order (page, request, session, and application) to locate the requested bean.

          <bean:write name="username"/>
      <bean:write name="user" property="fullName"/>
      <bean:write name="customer" property="orders[2].partNumber"
      scope="session"/>
      libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/html/0000755000175000017500000000000010423130301025122 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/html/doc-files/0000755000175000017500000000000010423130301026767 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/html/doc-files/htmlUML.gif0000644000175000017500000004034310404045250031013 0ustar arnaudarnaud00000000000000GIF87aL÷€€€€€€€€€ÀÀÀÀÜÀ¦Êð@ ` €   À à @ @@@`@€@ @À@à@` `@```€` `À`à`€ €@€`€€€ €À€à€   @ ` €   À à À À@À`À€À ÀÀÀàÀà à@à`à€à àÀààà@ @@@`@€@ @À@à@ @ @@ @` @€ @  @À @à @@@ @@@@@`@@€@@ @@À@@à@@`@ `@@`@``@€`@ `@À`@à`@€@ €@@€@`€@€€@ €@À€@à€@ @  @@ @` @€ @  @À @à @À@ À@@À@`À@€À@ À@ÀÀ@àÀ@à@ à@@à@`à@€à@ à@Àà@àà@€ €@€`€€€ €À€à€ € €@ €` €€ €  €À €à €@€ @€@@€`@€€@€ @€À@€à@€`€ `€@`€``€€`€ `€À`€à`€€€ €€@€€`€€€€€ €€À€€à€€ €  €@ €` €€ €  €À €à €À€ À€@À€`À€€À€ À€ÀÀ€àÀ€à€ à€@à€`à€€à€ à€Àà€àà€À À@À`À€À ÀÀÀàÀ À À@ À` À€ À  ÀÀ Àà À@À @À@@À`@À€@À @ÀÀ@Àà@À`À `À@`À``À€`À `ÀÀ`Àà`À€À €À@€À`€À€€À €ÀÀ€Àà€À À  À@ À` À€ À  ÀÀ Àà ÀÀÀ ÀÀ@ÀÀ`ÀÀ€ÀÀ ÀÀÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ!ù,Lÿÿ H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\ɲ¥Ë—0cÊœI³¦Í›8sêÜɳ§Ï“‚ J´¨Ñ£H“*]Ê´©Ó§P£JJµªÕ«QjÝʵ«×žXÊK¶¬Ù³hÓ’ýʶ­Û·p)ªK·®Ý»xóNË·¯ß¿`‰L8nш+^£Vߘ1‚|ñ…ºm¨]‡ÊÉî­°®m« z÷ÀÎŒÿ¾¾Éª};JÛ]»igsÚóÍãÌ;=|Q 30–æ´P©E˜ÑH5„4¡jr[“‰ì^U©øÍNnÑÁ djc$ø8ˆ:ÌÍÏôÔ%{<çJ`1˜5¦¹00ø1ÀˆyKTà“f”Àc@GƒÞZ2A ⬈#ªßLð¥%æë‰h“VÍF×>ÐaÉB#œÈà€#ôpT¡Z¡à¼5 °a3„˜§–&±®°L=<“©ht®áƉwD"}2Ô ,6±#åS›´Bz…Ä|YœÈ;>` s]쀢"“à@% 3Æ0€KCž0ŠÑ´6Fb¨Ê‘®`ÿ\aˆ­Áãm,X">ž,fÁŠe÷Èפ~©,O!<Ëh (í¹ f°¤åÍæ/õ’X†œeúfåµAYÊ<&•T Š˜ðãb>ÄI21ŒÆB,yI‡©‘.U½¨@ÜÀ@R 5gÃJ¹2_¹D[>M'ºÒ‘Ï^eCY¡J'Ë´”ŠþÜgù(”²ñÔ} %æ= JQ}òÒ ‚ìïS-Ë•§‹]<‚¸H•C7~’iB(#9Ò0x›Õ-ðÎÔô§™'lê™Äîq0Š=Ê ¸ÌšnQÌô•AšÑ„ú´WL…èQ# TDò3nÍ*U©ˆQ jÕ²ÇîÀÈ9òFhQ™F51oö/Œ-,£V* ´t€Sø ~ðèõ|…“htšÊÊçžPdh¿’)¶ªžN«¢ê3›ºL‹v•±Qt*?ZUDe4¨S=¨?»JÚìö &|‡yÌS.³¢j\5J`!ÇB~ò¶. '‡Me¬_÷jÇÍ–5ÿ<Ý£dŸøPf5·´\]jh?ëʨ‚ö¢¸²nÚ4ûÜ]nVHýÜ*w·JÚãzð¸ÕBÀ"¿°ÚA¯j?$—|h#汕TQÓX(5àE­¦€u € € (à¡1¯`^TŸ¿d[CÁ Þ¯áÒ{ÂÔW”‹)¾ÈV¹¨ÿ„êöœ;Ù5/juJ- ‹!âb§<_xC/€.4Á@^ÌÿÇtŒ¦‹U±uÁ‘ Oð ¶É î ”ßbÕ±}(»´ÍL¤D¦¤Î Ní"ð#° UÐÃqÕÊu„!$! R‚®ñŒ7•0¬>b¤ï¨AÌlºœ†Ÿ\‚=Èåvº3NæH¨—Võ0{Ù9…ôü »¶¶@j£?Evý²}^+ÓÆÓÓfÉ®K3ç÷Œ;Ü\9÷™ŸÚ³v»ûÝðŽ·SÜ6mu£û'ö¾ò½ “ïØõ{5ò¸À¾mï;1ÿÞ`ÂN’$ÑÎOž›Q Vn†ƒå2·¸d`'ÅíEü×µ\¸f05̉\R—ª"È 9Ú8{ä+kl!Õ=ÅŽkœ/•î6QÜ-»óž_‰ä©ãPÞRNHŽýå‚”—ƒŸyr•u7§´ˆ–©¯œØv{’ȼçP¤®Îeã«æPeUK “ÎÇôvc!žÏ˜ÑûÊIðÔ9÷§™at pN”×éþ9$^ûAÉŽ:£ª'ªs:çO×µ¿þu¸i˜_av]·O8 ”¿j†OŒydžVÃay†3¯b¦sÎô¯UçäÈÂ^ððÓPâ}Ù@ºë?×zÐÿiEÞSfaU1+Þ×~»2¿.AmŸâðru¢¢%ïËÅü9¸¿ò–¦}Ùÿa˜šC¹Òˆ÷jÓ9t ­ͬs·awùÎB|Ëï?~ÉÕá±£½^xrþh¡ÿ܃R÷_/SY7€§Us6Ç}t#%-'|Çwu¥g)@×LÐä:­3€™f„G^ gœ%<×~ôbaÅXö²ÒwYSmVF}§7lW‡O㇀0ø(ÔVlõ·r¢w0º'§W`Âu#‚I·eÑ·yEØaÜ‚ÎZË7„‡b··n؃×g4ø‚Û'ƒ’¢G؆|5hu5hO;r{§>ÜvØw€ÛåY>uK¿‡vÍÕe¼”TôGw¤Ó†x(w]–Uû]Hw>n'€hH…Ùç…&ƒóXnïÓ (YÄ—{M·{Ùƒ{Hçkš†i–‘qZh?PRfOñXQ‰S¢‰F2-ˆèë'l™øz›xˆ(·9³—|”˜D¬ØŠ+qŠƒ‡‹èFŠa€³X‰ahnµh‹íqÃHŒ¼øm…ˆ;ÒVT÷ŒÐÒ˜jGŒ½xŒÇ¶Œ¡‹ˆ‘ŒÖ¨x߈;Üø‹Xx­„áH‹ã˜uëHŽåhŽê˜Ž‰ˆŽçWDtÑŽ}Q~UHÕXy~çfÕhò¨†™…q’ùxŽ|²¨„'‰ b×u_e‘ÿ˜ ¹ñèAy§Keø} ˆ¶dˆÓE‘úhqÿY;+Ùp½xH9/ŒGÕ:9ÇfN¥]öwa”…‘)-)gÊx‡5†LÇ‚½w…Ɔ“ÆgU|’Lôè“úÖŠAÙÔ!ó^F€“lOÇ”iæ‡<Ç“â'•‡• ótn)ùZÉ•-ˆÔuaãu“ÅŠfIh™•{‰‰W¹bÂØ[ —Vxt—5“qØsB¨yy¹U˜¡SöÖ–é¦{€ˆèÀaY‹õw"ëÖ˜€Ô—Ðñ˜DäVy¦"¢‰o¤ «yš¨™šÓ›ƒ×š®I™”a›²9›´Y¼‰›÷š…¥›Ž9‰íaœ6£œÂÙÄ™SÏùЍ(nKÀéfÓxØ™ÒøvÑœ“Ô9ÞÙœääÇœÓ žá)iæIž Öž•1žK˜Èžèéž‘ Ÿ!ŸõAŸõ¹J–Y‹Eâøéÿü©ÚŸþùŸô4†}©Ÿ n ¡ç’¬io9ˆ¾ç{/óƒÔçƒ÷‰Ÿ ZŠÚÙC'”ßÙ ‚I“„hÈ—ªW˜º#jƒ ù¦‹!*nF „k&s>Ê¢v7£¹I£±£~™¢ÈÕ£±Kù=0Úw;Z 5jt†±Ÿª¸.Źx’Gom¥BJ DJ£j£€';ßו^‰ ÅX¡ ¶¢fØ¢ìó¢A ¦c'ej¥ìg¦W¸€JÙ"”AoÚqÖ)€š:s €]—”wªpFŠ{ŒNG¨‚J?ú™§Úpšª˜F§fÊT’i·”ÖÉ|…±p)9¥œ:~º©gÙ–rKGYl˜yÒäyPX^·žFTžªêª¾ÑªJ5q_y«(9{š…—8×›të¾*†”«ey’ÄJª~ûÈ 3XUÚ¬û¸­0÷©Ó*­f‡¾x­Øš­ïÙ«ÜêoG‰†z<¹˜R%–±HiS$骮ëº.ÁÞúŽ!—bˆšeºš‚¡¦—hmÒéùª¯û %©¨¥/Ù¦ÓˆxŸ ë˜Û°Kú°»‘(:±7z¡[q±MT¢&{²(Ûnøº7 Çm${°Iº²¹‘²4[³6[p2²Éª¤é†©7û³@´ó‡o•z¥óé–›´ù)´$˽ú²Jµ7Žê µR{µ»è¦–ˆµ\ÛµÈz®^aµ^;¶òs©n!¶d›¶‡Õ,;«¶në«©Ú­o;·w·:K·xÛœ°J±y{Û·­ù¬Eë·‚{º‰¶Á8¸ˆuÆi¸‡›¸Ž»o‹ ¨;¹°§œŒ+©”›¹—³ü¦¹žnèy¹0û¹¤ÛS#k;¥›ºÔ³¨«º®kº§‹¥¯;»O¶'J»¸+žH{»¹Û»ô´»¼ë»ÂK?[˯L Û¼–j»Z›‰Êÿû¼ ¼‹qÐ[½DY¼G;rÖ»½‰°Í«s©m«§Ü[¾н<[Š°Ø¦~ª™æû¾î‹¾"[‰FÕËë‚ð›¿d´ ªiõ‹¢Lè÷™v™„¢¿쯱ۿôkQ9Ùy‹Y‚¶*®_›Àïû²ë8f,syk¬–̘˜kÁÛ µ‹,~Æ”‡'¨=ns¬õJÂ%™f[ZL¯&Q: †L¾2l½b{ ‡ Á-LaÃí뎪ȂÜÅ&êÇ“ÌÀ˜lÆÊ“l2†ÉZÆq¼‰ÐÅaFQ/ÊžU°t8°ŽèL¾ôfL§ë~¿Çf³ä oó®G©Ë<£h¼ÊZØÊµ\ÄG8|†:‚H¼v·´€Å*P'8®wY#X­ð÷nܬq¬Ì2¨Ážªy7L­tøyù¬Ž…I8Ë—è”ÐÜ|cyƒý'Âäü»Æ1¼­Ì+wÀ8Y‡7] KÐw'ˆÙ<ÐKņôjˆXŒÏ}Ì"*»¾ûÏ}ÌØüJKiЇ¹„¬Ã²¼:Ï#ÐÌ5Ñ›…Ò¦šÊH*¼Ò׬Ó<Ó\]w˜Ð{ÈökJœÃe“Ñ*}ƒ¤<³œŒ‘ìÒ4XŒK=\eöQ’˜ùÍnˆeT¬Ô¼lbùeM:°Çb\}Õ¡9ÔŸ±Ï芿½;igûÈ.Gsb-±¼–µr™»hí½½sl=º÷ ›÷¦Dd]¹BçÈ3h?9Ú¯KŒ\Bš 8ÅB©‡ÝË“Úkr¸}=Ê|ºž±úw…½ØŸ\×jí¹“]¶ÿ’fÉJ ­åºÙ¦Ùˆ,×E½Ú§»³Õ`-…\†“ÆL®âå\Y†]V´2KÚ•ÍÄlúÙ?'ÚÒ*ͣϷÍZFvGXPÚüÌm}ÚÀ­–;¶æìs0]"v«Œ™ÂžÇˆÚ—ÝxÝÙÓMÝÒµÿ,Ð4ý™=Y„>ÍÂLèÐJÜÐÞìÛ•\Þw+Ü­D܆ÎÑêÞ …ÜÜý]¥}¾øÝ¹Ñµ¤Mà F‘ýÓÏm„{w6¸ÖÙéà|ËÙ]«t¥ê>L}fÁM²÷ËÂŒÛ]-żýËU¬á¿Íám ã^[¸üûÑf-ãwKãÞ®öΔªã7îáWû¬ÀZä*BžÖî¶ú=½Ú¸äLãdûäÙ«äR¶ó†·¬íÅqåæ æÄaåLæZbåg>åiþÖk>äm¾SoîæqpsþãužJwN×y.O{.½}NnÞGN¼ƒÎ¹…N~‡N´‰ž‹îãîÉNÇ‘ÞÒ“.é•ÞÏ—þ½™Žé›~åÎ韞°Ó¡ž«£.ꥮ৮¬©®—]n“næ‘ÍÏë¸Këäç¶>»¹N举êÝK¢†EÀ–æzŽ-Ê…¾ë®kÊã}{7]Ý ~æÈ®ºÌ¼ì=ìå>í©[íXvvs¸Ø³]fM=-Ž~<^çÜ^ºÌL'õ\‚$cv ‚sÇ™—¶îpëëÇ™f.센½ÎÁUÞ÷lí½®ïCÙÀð·{ ßL8ÁI'ß·þæøþ¹ÞŽš]Ðÿ„@nÛßæïÙ(lÏ>ÓÏÎm¿Äü…ÜêÅÿNñ DÀ±Ì`6enËÎMaÙË!×»9èON|=º}üçAOÆ\ô}nåwl¾ >P"'¬x9ôz‹¡Iÿ×÷Ǿ¦Mõ‰ï\Ï’#ÿ”¦ŽÊ¸îòUqõþ‹|<Å\Û'îmÖZêK]ïY„QâDŠ-^ĘQãFŽ=l¨p`È Gš$ɰ É,KŽDdË” ~Ä™SçNž=}V¬ùS(СEEšT©Ñ›º,µéSƒ2ÒT)5!Õ˜3%r]VìX²ƒ–-zíZ¶mÝ–mê4îJ«Q_RÅûÔ¤TšAÁ>œ 8ð[Â… sÔ›XñbÆ?†ùñaÊ•-_–Qí˘sWju¯È‰ƒånÆœZõjÖ­]¿†ÍõJˆ~kÞnI¤MЦOÇ\øpâÅ/õ½µ6é®Ê›Wµ9´»Å¿Ç­_Çž]ûvÊÒu;åý|·sèáK'îûzöíÝ¿gÞëròãë//R=Ý‹Õáÿ0@4L>û3ï@ñcP¼ó0ò@ '¤°B {ÛÏ.ú˜s0¿5ä¨ AñBOD1Eà ü0Äô0F§ë¯DºlT1Gwä1)çÓ <_̪EÔ(—d²I';ú‘È!¥Ü¬Ê)¤ÇŸä²K/¿œq2Lµ¤Ó2ÊßÀd³ÿM7'TóH2Ëñ>*ƒL2NýÞä³O?¯Ó3L:‹´SJB åo£@;ÓòOG…ô¨E9#jÎB µOEÝ2RO?UÒ4ûóR9ÍDrÓ” µUW_­­ÑÑD°VKO5UDœX…µW_?åtVM$ÖÈ:mEŒÓ™”ýµYgSœTÐ[s=tÐcqílUfI|¶[oŸŒö*ÇDvZL+5k[n¿e·Ý í¶4rË-ÖØkÍÍ^ýÔu·_SÓ÷Þyé¥VÚx±Ív×€ý·a‡‹[xÔëµVàƒñͳ'^æ¸ã·¶¸TŒ68d“Î d†=f¹åµÔ W=ïdž¸`›küi'c—wæYÛ]ë­æ‘ –'•·â·g¥wV9Ø …¦ØÞ‹33:é•—Æÿ:ëXuRv?šå…Ѩ¡´új­ÏÎúè“E&¸b’§.iŸÔFºl´ïöTm}3ô]¶oBºÍÆ»ð~ËÞ–ï§Á[ì±}NkpÃ'ñU©[œña‡Žn(É §}ø·qÏ]w»»žyíƒÛ=ièk¿úÛ;—-,å·G»ì©÷;ú¿ßÜqñ¹^Íôï¯~ïÇÞýùåç\Êvg?üÐ8ÔÿÚ翪Ž|­«Õ 8ÁØ Ðx „_ü48¾ n~c9Eø²vPzÄs §Ç¾­%¯„éÿa cA.ƒ DáK‡œÂP†?$Ë '±þÙps¼aÎzèC 6yL™[’ò%ERgæ["¸E…µ.ŠT¬âÃ>1b‘-!äbQÅ/–±ˆVD"[ˆÅ,jQw| ¤r¦(0*ðqL¢çêhG<⑆4ÒÐÜèG8zð„Jt  ‰¿C®p‘cüc ™Â9‚pœ¤ ©?(õ‘‘ÜäÍø±J†’c­ä$&O‰JU’š|"+?éJoÁ2–²&.q˜C 挻Ä/™çKqyÎ,|,å%miÊ "Ó˜Ê3kMERs–ÂTaªÐ¢MÍ›2§ŸÉMv~³–Ý$¡5AyΞYSëô¦;§ù¿`V³;æ¤ÿgìì©G|泟ûäg–ÐXÉ3 =h%wØNƒ‚3œ-_e$ùÐP1t‰Á£hE:L ÍС åh/úÑŸE³ ÒÄèHWi™¦ÔMq‘LNuºÓœÆtu }'-IêÓ\Ò”¡6uO`NÒŸ•¨Ä”cTKZ ¥–³ªHT#ùH§>UªZÝf&㩚šbUE¾¹ª>-yK¶vU¦©ë1WSV³V=3û žÎ¤˜^´­Cj`¿:Õ²†®u ¾†;ÅfG³ÙßåR&Y‘¾”ª­9*b/󣔜‰d‹íkXÝúVÒþu°„-¬a3«Ù…öíTP¹ËtF[ý%¯ˆ²Hg[jÙ¸RV£iýÊjY;Îþí,¹±ËM¦Â ØÎö,™šìn¥ ÏÐN7µ˜îp]XÅÅ4ç¹E rgäÜ2Yκ¼­.WóÜ=½æ°ÚUí"=K(½€×±Ì]yMe^ßž·²£uéfÙ{žÿÃ7]휯†»`ûzH¼¬ú®î¸f´èRwnÝ\³k`ÖQ7ÁÉÕ Jd"^ú†˜m¤›0…ýÛÛfÃYÂ0‡;ÉT³)·¾œ9‰ˆ—E"+É/‰¬pŠ[ìU"ó{/–±Ñ»UÝÈA†r€il=ì ç½IN‹„5z¤Î¶qÈSVk‘KÛ$×(ÆÚ¥Û™oì ëåÖËýýo«<œ+cùÀO† lµ,ä=YÌc&ó™1$è‡v{¿4€Ã|PG™¬„&°E9žVÚÒXë|8ŒsGã{·Á^ík[úÅ ^ˆ¤ßÓ’Íâ(â›rEëd3O\¨+âxÂ;>nrW-ææqƒ‰Žß¨+¸©“u“\‹ã)ÕFéÞvžñ­t™¼éKŸ6ÔE#u6èÁÉÉ"¼å~iuÙEŸ¬ Nœ{Òœéo´ß=L&œ£Ä w»ááºw€Õ}á]yx§’+ôÈÇÖ¶;¾‘i~¾ìß›ì€<Ö?Ïð«ð•+yéyœc´&é9²û¥–ku+쇯ÿSsÜsš‚\ð~žyèGŸÞ…rÙõtü]Œ~¯××ɺ·:âw¾û}c¦‡óNúðî}á¿Ìøæ¶jmÞýÿľEµoÐåK®gæž~¼Ø¹~Ìó²OøºŒp¾‡õX”óö_¿ˆó®ï๺(1ð‚»¬ò½ß»¿³ã4âK´-¿[·©ƒÀ1?‘#@ûB¿Â À“+¹Åë=ý£¿ìã¾Î$Ð#«ã£@9.œê±Úz8ÍK>v³¼Ðè Õ;½ÊË‹Ì<ÖË?ˆ™À4Áúc<\¯¹SÂPcÁ‹¹-Ú @ ìÀ«+?õù>!DBl@|À t[>¼ûŒÎr¾ó£>Š{Í“ÃÂ,<Á-ôBòsº^ÉÀü`?JÉ=6s¿”ÿ«ÁìX¾us±&$Â"4Â#tC`y¼; Ác>Ú«øh9:ÄA”¿7DÁ¢•:Ä;¼Ü¨ 胬>5D.ŒC³û;C
      ’ÈL¶,¾Ê!ZÙ¬+Ì´TDJŠdGÒDŸ™±>Ô,E«ÌI´ M×¼Ðú-mLMÚ¬MÂ6Ü|ÍM4´MÕDNÎv GóÌßÈä¼ÉåÌ&áÇë|ÎÁ\MÖÌ(ꤜ<ÅèÜNîœLïÔð Os,ÌñÌJó¸äôLOõ IµÃJñR„2MAiÕ]=À¨¤BU™ÕR¥USJ0èú:ULL«ºÁ‘{B;íÌaµÕbE­CVó˜S®ÃÌãÂÃö‹Ç¢Ì 7s E”LkõÑ%!"'\³)äÀÙ“JO}›½ä³­{Æd«Ut­T ¤¢®„ w¾AK>lÄ‘¤?¬JÕW+t’u•É·œÊNZتÃUã:gÔÑ…DTËÖd»Ýã¹`õÁÀ¹Øî5åW,e¤ /ÊÓ €YÆ2"77?EYyë‡M‰›¼fŠÅT½œVÊWQ½Yœ%Õ¤¼MbÌÑ)òZt}Ú¥Ö¥½×¦½Ô£eØœ}RQáÍ Ũ=T°UXJEУSW¬UÀqÌT25[ˆ[}Û±Kš•Ç­ÅO´µ2}“¸Q¼Á½ýæ¡[7¥ÎÁ5\¾ÊÚ/áÛ„5ÙåLT]ÜjõôÅÍÇu9l„ÊuMËM\À•¯º¦Ê9„U´‡Ä«œûLu£Ò}UQ½ý\ÆA«e%9ÿN™Áö"CþÖÒ•H=}]}kÁèé·Ú½—˜¯š¬RÆM>Û¶¼]J9 Ú éU*ÌËG”4çuA¾h¦ÔÛ ÚO ×;…¿vÜX‹©^ÇúÞéå^±”ØBÿ­Ü…óÄÝVAXĽP…5?[G…;HØ”$ØŠ\–ñ_¢»ÚsWN¬É]Ô5ßÄ’ÌßþÓCxÕß¼ÔÞN¤ßû%1ò•Kø-_þ þÀ^ÄíEÀ’=L±>á |Õ¶ÒÖà*TÌþ Ý ž]þXOë6VàÐ… v`B¬„ìQø žõÁìÌ蕼iMUåµ³Ó ±é…VïßnAÏÄÞÓ\S&Vâ&+Ü^3ãνá¤*c¦u\4vcí(྅cÕêZÒÜI„…ÜH©Uôœã MÃËåã@¶Ž?~%B–cD”·ÃåÇÂedFäA.Òº!]¿íC¦ã5cK^âf|•3ådwÁäLöÝseIÎÄIÞäSþ“QRlíSVf^Wqez«eYREî¨Ý¸e\ÎØ]nÒNõåoée(UYWæUåT®Údn–b&å½eagæeÖå©¥fÏíI•ÊæO~fvæn–[Ì%fqfæ_ ç 5çRþfpNçunÛNVufxÖd_ygu¦ç¤u–{nÍ|Öç}ö~ö粬çrhµgQ>h­çÓ…fTƒvhˆæXíPŠ6V‰hŒFÔm˜‡¦èGéJ>ßæè@,á³:ä“ÖR N×hâMi@éJÓf–¶Ù}‰–•[]ÞµáåUÿ\œ>#ØeM^Ûê j¸HÄ¢æ=øüµ˜Æ’¥Ädâd`O¬_Ì_:e¶%¤‹íiÎ{iªFBãÂàžÝåÚÃÇŒÙèûê¡~¤Á`¯ui³Î7­SñMëNá#àÞ÷^vÆëìcÙYÒ©[`Åãë3$ÛˆvBçâÉc?iëÏ•ê‘4a“ËC÷ X·›æC^Ù²_Ðm‚måÃ~ºY;ŽÔúUß"ÆßÝl-Õk·1ò½ß̦Í6ÈÓÅêðýÙ-.bdÞÖ ½Þ*†jô`qUl¸&hDîm\*þjæý=mé3êÄ£al>[×6féÌßÓî¾>½#ÎU“¹nŸ&ï$Æ:ƒ½ãôn(çÃüY*ÖãjŽïÕÜ6”ë8ÿðBìßîs6pÁ©éGNðcªoOÿnp|¦I+¾ÚŸöï §Æ¾yïNQT{ðš=iP&¼vqRkXûæèÒígÙȧ!ir6m–Îà¶£CõÞ~tZ/ññAoHñ1±âñ»uVë©bø¦fº&£¿&¸2q×e]®¬@‡8Ýññ†rSViVÕÐKìæØÃò,Ïh¿ºñ›F_êõYÌ®2ßUÆ[&¿pù~¶3Ÿ'Çñlcߨ†Y$f¾æ1¯nX¦8äÅ\*ýÕñh>Wt¦ç»²]É å}‹SOsn·WÎm”e-Ò™\C ïr_æØJ o8_Ø—kçŠÕ«Nïq/ÇtMÿàönVs¦!<žÆœJWjg…â¤Åý–VçŽ^g‰Bçã¹¢A:p[× ÷e´gjuq†.Áhgõ°=Æm–U4Ÿï`ò%§Ú`ÞO„®ñi_Ioþep;ugêIŸP}Lqw›öœFåvçðW:)^§sóÞ÷g®*çr© øe/Û|/Óƒeà"xà>j†—r¤ã„—x{.°‡'óh¾xæ1ŸÍìøŠo\y–‡ì‘çcBÓx•Gy Oê‚.ù–GqÃ2yŒ•ùßQ6‚6?xó÷ãù é‚Ïð6¾ù†Ý<?·óÔï02f}´Ö½¬¦íÝÇuG×óS½rʖ؉lä÷}ƒGp§ßm7ßáÇt.çØ?ßœ’ WLçþ̃ìþ5Âa¨·êô{Ùx lŠ…þ<ÿ~ßú íÀ/ÿ¡ÿrÎo}–^ÏÿþX A‚&l ¡Â#Fœ8‘!Ńjìh°!FŽ/R$™ñ$Ê”*W²léò%̘2gÒ¬ió&Μ:×wÂ4Éó'ЊA‡®´ˆ"È?" )ð©ÈŽ•¦ô)”åC‹fíºôéÖ¯ ÃJôÚÕ¤U¢jײmëö-ܸr‹¦k7ä]žuË"eÚ”jV¾K¹ö-¼õìɽRóºü{•1äÈ’'S®œW±e¶˜3—äÜ/語‡¦:ú4êÔªW%ËÚífÔ±9;.Múµ×Œ³_óîí»òÙà‡/nü8rä¿u/ïÜœ/Ú–»OOný:ö›Õ—o·ÜxvÑXÃ/&oþ<úÆéfÿNÙ}jÅÉçÓ¯oþúüÿúeïld÷ 8 Âõw ‚ ’‡™p5(€E¨ …Zx!†ÌI§ƒ9}dÚgØM˜!‰%šxâsF©4[„ßx׋(Ê8#5Âèßmcµc`bmV=†&äW®E•¢I*¹$“ïᨡHPq˜%URW>É]“]zù%˜;ù•”Ð}¨å”„¹¦¢shÙ\ŒaÊ9' ²ÉžmŽåV[‘8îù&ˆpÖ9(¡…&ygŽJ9Gµ¡©'ax^§¡•Zzéhˆ–9U–ƒ¥ Ø£x}¸¢^šz꩘ªº*«bödd`±6&™>"&˜š9åÂJ[9æ™ù8cœkþ9èž)<:éÃ…~:êøEW];Jšhê±Í˾¹xGh¶Vy>;ï½ÇW{™­'F–O»û~<òNîLtÃÍnòÑK_!Ùñ.ôÕ’O¿=÷“\Rñ«ï§§Ý›>œ·ƒíüÞÕƒŠ>üñü˜Ñº“ê”/?ÿðkí0ø`‡¿²Ô-ûë£÷?“Ñe€ÁÜVtÀR0v Ä·Ô–2öìå‚ü mµû•L4g^C¨Âbo[:’àõÆ5AÒðit¡sÈ>Ͱ†>t٠ŰRõð‡F¼W…ø“8%ñˆŸN¤\•¸DµDñ‰Vä[qØšµdñŠ^dZµd…ñ‹fäXÇÅEØñŒn´QÅ8”iÅñvVÕ˜8µñŽ~LPåH”|ò†S!õ›¹$òŽ„£„â²²F>²’$¢¤¿ˆu™>Z²“™ÚÝÀ‡IO’ò<£T¤&;wÊR²ò7«De*%ÄÉVÒrŽå{fYË]j§‡œ;à+yÿ)LF”½,2“9Ìe0Yú’âå˜ÉË`êÄxÝÑå¥IKjV<°¤ž6[‰MÚ¥:o‹\*$°p’’›¼ò&½Ü•6ȥɜ촤;‡¨¼uòKpoYß啕dt>Œtfˆ¢®ÂDjn¶"ž§*6¤‹¡“œ]Ü8ú,„4| ¬'HC’5kHàE¡ˆ®XŠŽŸêÙU’%‘¢M[:ÓaJ—Qo±´¥<í§nHÖ äJG›šš²§½œöím Í!ƒbÏ®æ_AûžÕУÚ,«W«è<™J¸ÙT+ìºÝO©ZÕŽ¾Ž¦"sHIûõ¹ÕTxb­ÜúòŠS1N5p¸ ¨íôçP\Íô…x»›ÜÌ¢·ÞUNzu ¼à:±a5R¹Šáÿ:žüޱÝEäUÅUÂÑR,b Ù ô²É›ê§³Ÿ­´63·ŽÄ,GÚ•›ÂªÏµŠ³`õìk-TÈʵQô³X Û·HWö6šÁ5Üc[ÜO)R„Ýë¹ÄW ÷¹KŠnHk&–‘Þ¶®ÍäªRÐõ"̻Еñn%Ñç5tV“½ì­°ûNíº·¿žu­j‘Ô_÷þWqTlÏ€½ ÜÅxR nwï‡ÞðDyì½p>1ºÒ /H ^ªô0,b°vÓ”÷üðÌa‡źUñбÅÎØˆwŸ0Þèz\œ:«Æ•Ÿò<ÿïýÚZm‚×¢Ûm둃<ÇþèøtE6lQj·‘úŲúUònÓÓdÐ=™J¦•——G+Ý+chÚò@Í$ÛéLSmvš;g OóªlþªQM+²ƒøµ#.äþŒªùÍY5ôžß5gùérX!@¹zÒ·–ïÍRJ-Œ½ÇÕúUt¯}‰f:Y]·…V£}³èjéxÕþƒ¯|U&UÇX½ùõÖ¬5JÁV—™¬Ãí‹QšÝÍ¢UR`Î$¤Œå.ÃY;›Ö-‹ÈLç]+[É«•‹FÑÿ¥Zr‚uîâe÷Q[D½m|'ÝÕ=czŒ¦fÓ¢ÐjÝÜù|‚&蹋„Σš®¢w·_:ш¹ ØK+š3‡„dJoJiÊm°]U,šÝÔÔ Op—=À<{ôÀÞ~R¼7žµŽ_<ß mSöæ dw\«ÆuÔ˜^òLÃZÜS†²¾sŽÙ7V¡&u¶óöÛ™#Üsö8<3æj¢£Ïè®õ3µt¦›”CoðdLõ kë¨Þ:׿îõß=Ó÷¾O ÏN ²³½ín;Üã.÷¹Ó½îv¿/;Þó®÷½ó½ï~ÿ;à/øÁ¾ð†?<â¯øÅ3¾ñŽ<ä#/ùÉS¾ò–¿<æ3,¯ùÍs¾óžÿ<èC/úÑ“¾ô¦?=êS¯úÕ³¾õ®=ìc/ûÙÓ¾ö¶¿=îsþ¯ûÝó¾÷¾ÿ½ßÔ.üá?aÀb§~|þòOùËWuòŸß1'}åʵï¦Vék, ÄϺP^o+!Ýâܧ@=¶ó´šYØÀ£T»Ï®HãÊ¡7ßw|ϤØx‡š~%“-l[•Í ‰}ÚÍPDUZù@ŒÎ™Ÿü)K^…\Ù¨›tMŒ¤ ꟼÑR—È©¬˜Ìÿ‰eܺš‘[ÅM rÍ×tÅÍ¿ȉԟÐÛÁ=ÊŽ¢=Ü Ú ýõIAG?!U&šÒ1OÁ%ÕtÉ 9Ù ®›ö`«ÐWÝ”öÅùlÔi¡¢àYÚ ÐŒœIAáòÛúóQ!aUz!yÕIiß±%—Æœ—½îà¡ÖX˜Í¤I´©¡ãüT~›ý]ÿ‘áCÑ •eÍÍÀÍÏÍŠ¶›Î¹NdQÖZ–P¥!!"`qš'~`ùQ_ŠmÖ'Z‹)Bß(2a€­âøY_*®!VxŸM‡ÞŒ‰Cá„óÍbõÅÏ/cÖE16Kñ%£2.£qã«›TÝ—Ö_®xÐ0:ãñèÎ.þ! VY`¥6úi¤bÑÖîÌ5†£ïÜøŸ Ne©ã€í[žTYTÉã<Ú¡WãX`VºY>BX<>! 䥅Ë@ÊÕÕÁã;*Z;Jó,d‹Ù•ýc Ýã4a°Q¤'5QR=âÉ 1Jñ¤£GzÍ.â#)2ÅÖØÕ<äD¦¤œá":¾UlÈV‰_ Ѥ#­$­ad/ú!Å_’ùä’ýTO±Y#!åkeÄáT^P~Óú‘£,äUúP0ÉGW™9¡äWV¡¯ˆåX’¥ eóq“¯e°mG†¹åX9K\Êå\‹YÚ%"åS©å´éeOúeòÔ%…â(ºG]¾æ×¤K´ýažâ`:&—5f,ž¢`J¦ Yfè`fGöY^®eÏy&^fhЦbN&|™&FáR_¡¢lr&4¹&Û fŸMa,îF‹ô¥mzÓ!ûÍ&mòåo6 nb+¦¦M.‘ogUí]Æ&qg/A'%çr*'e¦fn'vÎß ]“p‚çj^gx–KVTmž§ÌY§/>gzJR¹ˆV’&kú‹|Î'õcÞ'~¾g5í'8€V¦®eÂVŠvº'„æ§nn'„hƒò6Áy–g‚Љ…^ha’/¶§yå }(ˆ"`tò\‡*¨‰žhŠ¢ÈzÚØˆ’h‰¾(ÔŨ<‹¶¨‹â¨-é(õ,ذµå‚úh©)“=¨‘6é‘>)‡ŠZ&“Ú¨•Bi„Þhù))p¦W‘^i–†i’riŠ¸Ø‹€_î‘©ªñ˵˜Rç?M©>ΨؽišÆ©œÎ)›~’Œ1(œê).WŸf]•~i–9)–**=ߪ*iYŽ2ª–Jj:*1娖æ)‚"j9ÑéóÙ)+.§Rê Ò§¥Âèeª¦nꨖө:'“=[²j«^ê«ò¥óu[­F©šÊR2cªЬÎ*­îª­zd“yŸá)±öjÔ-d²º^Šj¢:«¯B+……ê°Zk±k§dTM–=é[1¹0 R«wxjÛ­"7j Ž+kœ«ªjº»‚]úIdŠc€ª‹$ÕëªÞk0¦"8–cê_I%Rèà˜ºzëÀæÒ1úë=žŒK¡Êœˆn_ÄV«Änÿ0ædê`aÍ vçÃBìÇr+³ÒF¾&ÜÁŽ!â!Å)•ʲgÀŽ]³lfjæíka±Ûɺ¢•œúí,ÏÚ«Àö'°*æý ÉºažrgOyl¤ö¬Ï.-GUÞ9U#¨¹*"å³²ìÖ2mÓ¶lÇ‚í¼>]Áª×²íÚ¾ìZÞ8ÝÜ.붆¬Ëâ-/Æ‘À‰iâe”Öõ­ßÖ­ÝÞmàÖT<|>^´*îߺ-à>nvœ} êâUn1^†ÚbnÛn®±™m¶QMÃbíá=- …îÊÒmé’®éžÕ¡I½!ëÞê/)-ãÒn Ÿ¨O­°#ÚÞê8ºîèH3œòÒÇwêÉ ÍÂÂŽºòÆ`ª¡€å,[íáÔ@Ç èõ"á~äևţ>Eï ¦œyýÿèøÆdö’›¶r/~Fãþá\b­õŽ/ú²ÎhâÚ­%”üÚn.p+舌§Ü¾¯Ä±Ÿý¯w-ˆùSˆHnuF°ûºj3pÎØ™s­<© ø’ª€†ßº~×ÉAV‚Ê#¦®6 ä*Ümàrãšá/Æp%ûT ?ð ‹`ŽM¼mÊâ,ü®VµpZ-¶ÜÄ(ó°ðò$¢í M!1ÁL'òëÙà¿ÚZóšÎŸÒíâ™Uoþ4ÜÂ}±«nr/ý¦°—N[_±îöcøÞYÇq̱u=ŒƬ’n&é ˜%d úñÕÊ ù ”WWûæT'"Çèÿ’qQFÛŸÏYb#±S7‚²4æÜ(gf&_(,î©Ç2¥ÃBìg0çñäæò+¾ñîÒ2…¶rzFæ¶hgâÖ2¾¢p©Þ2ó.suáö.zª2÷FsrÖ +,G³(VhšÔm3Ôò*6k“Ð)0S©—xj9Û%Ðæ­Œ¤óWºsf^K8¿­pAÒ<í9×='m˜d2<ƒk´ò?«ã@ßñÁx³óîsA4utØ=/4Cãó3G3DG´›[8W´Eó3ƒj-®ò»3°FoôώЄh\2óî¥,³eî,'2¦°´KÍVyc”•Z òHë­ªÈôæaQÒ¬÷²Žîô„Æ-¹bÌ-Db/Š4(²XçîòÙÍn1IsBª ;±9–×Ðàwõ†Uu9:µn¬„5-RuöÝïaÙtää¯}!óõ"õ/³k/ïêõ^73o93î!´a'´ƒutâõívHK³WW[c«¢d;teמcqC£Ëa'ÿ‡îÑØŒºˆ z!4ëÈ·µDïs_7oê÷½«f‡Ô5g³jvÚô¯E_3'5ostm¯ök¢­Xlë™)ë PwPûcNïðeÿö×÷—5“P‡ kœflu'ñ¿´w@7oU1ióñUóàטZ¯ ñî¯8ƒ÷fWµ›až=5ùÙÔ!Šñœv¶G»7õ"y›¡Íº•úàyçn*÷6’–´ÓjkÕIÆwŽõ„wcøºYðV?ö{7ø‚ á&>Ï'Ob ?Ôž$·ˆŸò"Úµ®°·KsiÒÿ®PñXáêrŒ¶-Óx5ËnÉ’%îÊøŽÇ¶¸µ)sCÊ.Òj8 “p‘?/¡@æ— pCÔÀ™¶1?9jG¹ïÂc̨øZ_²jk¹)󷙃´¨Š÷Ô–÷z{7™kØWõPgµ~¿yïÚW øX_PfÛ¹`ß¶¶a«5û9^Õ\ݸÎÙ¦²Ð1¶¡[?gù£§ƒö¤ï˜è$ù¥;ÙŸoúgvº§Ι¯s¨—º©Ÿ:ª§ ºª¯:«·º«¿zz;libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/html/BaseFieldTag.java0000644000175000017500000001155110404045234030253 0ustar arnaudarnaud00000000000000/* * $Id: BaseFieldTag.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 2001-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.taglib.html; import javax.servlet.jsp.JspException; import org.apache.struts.taglib.TagUtils; /** * Convenience base class for the various input tags for text fields. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public abstract class BaseFieldTag extends BaseInputTag { // ----------------------------------------------------- Instance Variables /** * Comma-delimited list of content types that a server processing this form * will handle correctly. This property is defined only for the * file tag, but is implemented here because it affects the * rendered HTML of the corresponding <input> tag. */ protected String accept = null; public String getAccept() { return (this.accept); } public void setAccept(String accept) { this.accept = accept; } /** * The "redisplay contents" flag (used only on password). */ protected boolean redisplay = true; public boolean getRedisplay() { return (this.redisplay); } public void setRedisplay(boolean redisplay) { this.redisplay = redisplay; } /** * The type of input field represented by this tag (text, password, or * hidden). */ protected String type = null; // --------------------------------------------------------- Public Methods /** * Generate the required input tag. *

      * Support for indexed property since Struts 1.1 * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { TagUtils.getInstance().write(this.pageContext, this.renderInputElement()); return (EVAL_BODY_TAG); } /** * Renders a fully formed <input> element. * @throws JspException * @since Struts 1.2 */ protected String renderInputElement() throws JspException { StringBuffer results = new StringBuffer("String. This * implementation escapes potentially harmful HTML characters. * * @param value The value to be formatted. null values will * be returned as the empty String "". * * @throws JspException if a JSP exception has occurred * * @since Struts 1.2 */ protected String formatValue(Object value) throws JspException { if (value == null) { return ""; } return TagUtils.getInstance().filter(value.toString()); } /** * Release any acquired resources. */ public void release() { super.release(); accept = null; name = Constants.BEAN_KEY; redisplay = true; } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/html/BaseHandlerTag.java0000644000175000017500000007157010404045234030614 0ustar arnaudarnaud00000000000000/* * $Id: BaseHandlerTag.java 168243 2005-05-05 02:35:30Z niallp $ * * Copyright 1999-2005 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.taglib.html; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Locale; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.BodyTagSupport; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.Globals; import org.apache.struts.action.ActionMessages; import org.apache.struts.taglib.TagUtils; import org.apache.struts.taglib.logic.IterateTag; import org.apache.struts.util.MessageResources; import org.apache.struts.util.RequestUtils; /** * Base class for tags that render form elements capable of including JavaScript * event handlers and/or CSS Style attributes. This class does not implement * the doStartTag() or doEndTag() methods. Subclasses should provide * appropriate implementations of these. * * @version $Rev: 168243 $ $Date: 2005-05-05 03:35:30 +0100 (Thu, 05 May 2005) $ */ public abstract class BaseHandlerTag extends BodyTagSupport { /** * Commons Logging instance. */ private static Log log = LogFactory.getLog(BaseHandlerTag.class); // ----------------------------------------------------- Instance Variables /** * The default Locale for our server. * @deprecated Use Locale.getDefault() directly. */ protected static final Locale defaultLocale = Locale.getDefault(); /** * The message resources for this package. */ protected static MessageResources messages = MessageResources.getMessageResources(Constants.Package + ".LocalStrings"); // Navigation Management /** Access key character. */ protected String accesskey = null; /** Tab index value. */ protected String tabindex = null; // Indexing ability for Iterate /** Whether to created indexed names for fields * @since Struts 1.1 */ protected boolean indexed = false; // Mouse Events /** Mouse click event. */ private String onclick = null; /** Mouse double click event. */ private String ondblclick = null; /** Mouse over component event. */ private String onmouseover = null; /** Mouse exit component event. */ private String onmouseout = null; /** Mouse moved over component event. */ private String onmousemove = null; /** Mouse pressed on component event. */ private String onmousedown = null; /** Mouse released on component event. */ private String onmouseup = null; // Keyboard Events /** Key down in component event. */ private String onkeydown = null; /** Key released in component event. */ private String onkeyup = null; /** Key down and up together in component event. */ private String onkeypress = null; // Text Events /** Text selected in component event. */ private String onselect = null; /** Content changed after component lost focus event. */ private String onchange = null; // Focus Events and States /** Component lost focus event. */ private String onblur = null; /** Component has received focus event. */ private String onfocus = null; /** Component is disabled. */ private boolean disabled = false; /** Indicates whether 'disabled' is a valid attribute */ protected boolean doDisabled = true; /** Component is readonly. */ private boolean readonly = false; /** *

      Indicates whether 'readonly' is a valid attribute.

      * *

      According to the HTML 4.0 Specification <readonly> * is valid for <input type="text">, <input type="password"> * and <textarea"> elements. Therefore, except for those tags this * value is set to false.

      */ protected boolean doReadonly = false; // CSS Style Support /** Style attribute associated with component. */ private String style = null; /** Named Style class associated with component. */ private String styleClass = null; /** Identifier associated with component. */ private String styleId = null; /** The request attribute key for our error messages (if any). */ private String errorKey = Globals.ERROR_KEY; /** Style attribute associated with component when errors exist. */ private String errorStyle = null; /** Named Style class associated with component when errors exist. */ private String errorStyleClass = null; /** Identifier associated with component when errors exist. */ private String errorStyleId = null; // Other Common Attributes /** The alternate text of this element. */ private String alt = null; /** The message resources key of the alternate text. */ private String altKey = null; /** The name of the message resources bundle for message lookups. */ private String bundle = null; /** The name of the session attribute key for our locale. */ private String locale = Globals.LOCALE_KEY; /** The advisory title of this element. */ private String title = null; /** The message resources key of the advisory title. */ private String titleKey = null; // ------------------------------------------------------------- Properties // Navigation Management /** Sets the accessKey character. */ public void setAccesskey(String accessKey) { this.accesskey = accessKey; } /** Returns the accessKey character. */ public String getAccesskey() { return (this.accesskey); } /** Sets the tabIndex value. */ public void setTabindex(String tabIndex) { this.tabindex = tabIndex; } /** Returns the tabIndex value. */ public String getTabindex() { return (this.tabindex); } // Indexing ability for Iterate [since Struts 1.1] /** Sets the indexed value. * @since Struts 1.1 */ public void setIndexed(boolean indexed) { this.indexed = indexed; } /** Returns the indexed value. * @since Struts 1.1 */ public boolean getIndexed() { return (this.indexed); } // Mouse Events /** Sets the onClick event handler. */ public void setOnclick(String onClick) { this.onclick = onClick; } /** Returns the onClick event handler. */ public String getOnclick() { return onclick; } /** Sets the onDblClick event handler. */ public void setOndblclick(String onDblClick) { this.ondblclick = onDblClick; } /** Returns the onDblClick event handler. */ public String getOndblclick() { return ondblclick; } /** Sets the onMouseDown event handler. */ public void setOnmousedown(String onMouseDown) { this.onmousedown = onMouseDown; } /** Returns the onMouseDown event handler. */ public String getOnmousedown() { return onmousedown; } /** Sets the onMouseUp event handler. */ public void setOnmouseup(String onMouseUp) { this.onmouseup = onMouseUp; } /** Returns the onMouseUp event handler. */ public String getOnmouseup() { return onmouseup; } /** Sets the onMouseMove event handler. */ public void setOnmousemove(String onMouseMove) { this.onmousemove = onMouseMove; } /** Returns the onMouseMove event handler. */ public String getOnmousemove() { return onmousemove; } /** Sets the onMouseOver event handler. */ public void setOnmouseover(String onMouseOver) { this.onmouseover = onMouseOver; } /** Returns the onMouseOver event handler. */ public String getOnmouseover() { return onmouseover; } /** Sets the onMouseOut event handler. */ public void setOnmouseout(String onMouseOut) { this.onmouseout = onMouseOut; } /** Returns the onMouseOut event handler. */ public String getOnmouseout() { return onmouseout; } // Keyboard Events /** Sets the onKeyDown event handler. */ public void setOnkeydown(String onKeyDown) { this.onkeydown = onKeyDown; } /** Returns the onKeyDown event handler. */ public String getOnkeydown() { return onkeydown; } /** Sets the onKeyUp event handler. */ public void setOnkeyup(String onKeyUp) { this.onkeyup = onKeyUp; } /** Returns the onKeyUp event handler. */ public String getOnkeyup() { return onkeyup; } /** Sets the onKeyPress event handler. */ public void setOnkeypress(String onKeyPress) { this.onkeypress = onKeyPress; } /** Returns the onKeyPress event handler. */ public String getOnkeypress() { return onkeypress; } // Text Events /** Sets the onChange event handler. */ public void setOnchange(String onChange) { this.onchange = onChange; } /** Returns the onChange event handler. */ public String getOnchange() { return onchange; } /** Sets the onSelect event handler. */ public void setOnselect(String onSelect) { this.onselect = onSelect; } /** Returns the onSelect event handler. */ public String getOnselect() { return onselect; } // Focus Events and States /** Sets the onBlur event handler. */ public void setOnblur(String onBlur) { this.onblur = onBlur; } /** Returns the onBlur event handler. */ public String getOnblur() { return onblur; } /** Sets the onFocus event handler. */ public void setOnfocus(String onFocus) { this.onfocus = onFocus; } /** Returns the onFocus event handler. */ public String getOnfocus() { return onfocus; } /** Sets the disabled event handler. */ public void setDisabled(boolean disabled) { this.disabled = disabled; } /** Returns the disabled event handler. */ public boolean getDisabled() { return disabled; } /** Sets the readonly event handler. */ public void setReadonly(boolean readonly) { this.readonly = readonly; } /** Returns the readonly event handler. */ public boolean getReadonly() { return readonly; } // CSS Style Support /** Sets the style attribute. */ public void setStyle(String style) { this.style = style; } /** Returns the style attribute. */ public String getStyle() { return style; } /** Sets the style class attribute. */ public void setStyleClass(String styleClass) { this.styleClass = styleClass; } /** Returns the style class attribute. */ public String getStyleClass() { return styleClass; } /** Sets the style id attribute. */ public void setStyleId(String styleId) { this.styleId = styleId; } /** Returns the style id attribute. */ public String getStyleId() { return styleId; } /** Returns the error key attribute. */ public String getErrorKey() { return errorKey; } /** Sets the error key attribute. */ public void setErrorKey(String errorKey) { this.errorKey = errorKey; } /** Returns the error style attribute. */ public String getErrorStyle() { return errorStyle; } /** Sets the error style attribute. */ public void setErrorStyle(String errorStyle) { this.errorStyle = errorStyle; } /** Returns the error style class attribute. */ public String getErrorStyleClass() { return errorStyleClass; } /** Sets the error style class attribute. */ public void setErrorStyleClass(String errorStyleClass) { this.errorStyleClass = errorStyleClass; } /** Returns the error style id attribute. */ public String getErrorStyleId() { return errorStyleId; } /** Sets the error style id attribute. */ public void setErrorStyleId(String errorStyleId) { this.errorStyleId = errorStyleId; } // Other Common Elements /** Returns the alternate text attribute. */ public String getAlt() { return alt; } /** Sets the alternate text attribute. */ public void setAlt(String alt) { this.alt = alt; } /** Returns the message resources key of the alternate text. */ public String getAltKey() { return altKey; } /** Sets the message resources key of the alternate text. */ public void setAltKey(String altKey) { this.altKey = altKey; } /** Returns the name of the message resources bundle to use. */ public String getBundle() { return bundle; } /** Sets the name of the message resources bundle to use. */ public void setBundle(String bundle) { this.bundle = bundle; } /** Returns the name of the session attribute for our locale. */ public String getLocale() { return locale; } /** Sets the name of the session attribute for our locale. */ public void setLocale(String locale) { this.locale = locale; } /** Returns the advisory title attribute. */ public String getTitle() { return title; } /** Sets the advisory title attribute. */ public void setTitle(String title) { this.title = title; } /** Returns the message resources key of the advisory title. */ public String getTitleKey() { return titleKey; } /** Sets the message resources key of the advisory title. */ public void setTitleKey(String titleKey) { this.titleKey = titleKey; } // --------------------------------------------------------- Public Methods /** * Release any acquired resources. */ public void release() { super.release(); accesskey = null; alt = null; altKey = null; bundle = null; errorKey = Globals.ERROR_KEY; errorStyle = null; errorStyleClass = null; errorStyleId = null; indexed = false; locale = Globals.LOCALE_KEY; onclick = null; ondblclick = null; onmouseover = null; onmouseout = null; onmousemove = null; onmousedown = null; onmouseup = null; onkeydown = null; onkeyup = null; onkeypress = null; onselect = null; onchange = null; onblur = null; onfocus = null; disabled = false; readonly = false; style = null; styleClass = null; styleId = null; tabindex = null; title = null; titleKey = null; } // ------------------------------------------------------ Protected Methods /** * Return the text specified by the literal value or the message resources * key, if any; otherwise return null. * * @param literal Literal text value or null * @param key Message resources key or null * * @exception JspException if both arguments are non-null */ protected String message(String literal, String key) throws JspException { if (literal != null) { if (key != null) { JspException e = new JspException(messages.getMessage("common.both")); TagUtils.getInstance().saveException(pageContext, e); throw e; } else { return (literal); } } else { if (key != null) { return TagUtils.getInstance().message( pageContext, getBundle(), getLocale(), key); } else { return null; } } } private Class loopTagSupportClass = null; private Method loopTagSupportGetStatus = null; private Class loopTagStatusClass = null; private Method loopTagStatusGetIndex = null; private boolean triedJstlInit = false; private boolean triedJstlSuccess = false; private Integer getJstlLoopIndex() { if (!triedJstlInit) { triedJstlInit = true; try { loopTagSupportClass = RequestUtils.applicationClass( "javax.servlet.jsp.jstl.core.LoopTagSupport"); loopTagSupportGetStatus = loopTagSupportClass.getDeclaredMethod("getLoopStatus", null); loopTagStatusClass = RequestUtils.applicationClass( "javax.servlet.jsp.jstl.core.LoopTagStatus"); loopTagStatusGetIndex = loopTagStatusClass.getDeclaredMethod("getIndex", null); triedJstlSuccess = true; } catch (ClassNotFoundException ex) { // These just mean that JSTL isn't loaded, so ignore } catch (NoSuchMethodException ex) { } } if (triedJstlSuccess) { try { Object loopTag = findAncestorWithClass(this, loopTagSupportClass); if (loopTag == null) { return null; } Object status = loopTagSupportGetStatus.invoke(loopTag, null); return (Integer) loopTagStatusGetIndex.invoke(status, null); } catch (IllegalAccessException ex) { log.error(ex.getMessage(), ex); } catch (IllegalArgumentException ex) { log.error(ex.getMessage(), ex); } catch (InvocationTargetException ex) { log.error(ex.getMessage(), ex); } catch (NullPointerException ex) { log.error(ex.getMessage(), ex); } catch (ExceptionInInitializerError ex) { log.error(ex.getMessage(), ex); } } return null; } /** * Appends bean name with index in brackets for tags with * 'true' value in 'indexed' attribute. * @param handlers The StringBuffer that output will be appended to. * @exception JspException if 'indexed' tag used outside of iterate tag. */ protected void prepareIndex(StringBuffer handlers, String name) throws JspException { if (name != null) { handlers.append(name); } handlers.append("["); handlers.append(getIndexValue()); handlers.append("]"); if (name != null) { handlers.append("."); } } /** * Returns the index value for tags with 'true' value in 'indexed' attribute. * @return the index value. * @exception JspException if 'indexed' tag used outside of iterate tag. */ protected int getIndexValue() throws JspException { // look for outer iterate tag IterateTag iterateTag = (IterateTag) findAncestorWithClass(this, IterateTag.class); if (iterateTag != null) { return iterateTag.getIndex(); } // Look for JSTL loops Integer i = getJstlLoopIndex(); if (i != null) { return i.intValue(); } // this tag should be nested in an IterateTag or JSTL loop tag, if it's not, throw exception JspException e = new JspException(messages.getMessage("indexed.noEnclosingIterate")); TagUtils.getInstance().saveException(pageContext, e); throw e; } /** * Prepares the style attributes for inclusion in the component's HTML tag. * @return The prepared String for inclusion in the HTML tag. * @exception JspException if invalid attributes are specified */ protected String prepareStyles() throws JspException { StringBuffer styles = new StringBuffer(); boolean errorsExist = doErrorsExist(); if (errorsExist && getErrorStyleId() != null) { prepareAttribute(styles , "id", getErrorStyleId()); } else { prepareAttribute(styles , "id", getStyleId()); } if (errorsExist && getErrorStyle() != null) { prepareAttribute(styles , "style", getErrorStyle()); } else { prepareAttribute(styles , "style", getStyle()); } if (errorsExist && getErrorStyleClass() != null) { prepareAttribute(styles , "class", getErrorStyleClass()); } else { prepareAttribute(styles , "class", getStyleClass()); } prepareAttribute(styles , "title", message(getTitle(), getTitleKey())); prepareAttribute(styles , "alt", message(getAlt(), getAltKey())); return styles.toString(); } /** * Determine if there are errors for the component. * @return Whether errors exist. */ protected boolean doErrorsExist() throws JspException { boolean errorsExist = false; if (getErrorStyleId() != null || getErrorStyle() != null || getErrorStyleClass() != null) { String actualName = prepareName(); if (actualName != null) { ActionMessages errors = TagUtils.getInstance() .getActionMessages(pageContext, errorKey); errorsExist = (errors != null && errors.size(actualName) > 0); } } return errorsExist; } /** * Prepares the actual name of the component. * @return The actual component name. */ protected String prepareName() throws JspException { return null; } /** * Prepares the event handlers for inclusion in the component's HTML tag. * @return The prepared String for inclusion in the HTML tag. */ protected String prepareEventHandlers() { StringBuffer handlers = new StringBuffer(); prepareMouseEvents(handlers); prepareKeyEvents(handlers); prepareTextEvents(handlers); prepareFocusEvents(handlers); return handlers.toString(); } /** * Prepares the mouse event handlers, appending them to the the given * StringBuffer. * @param handlers The StringBuffer that output will be appended to. */ protected void prepareMouseEvents(StringBuffer handlers) { prepareAttribute(handlers, "onclick", getOnclick()); prepareAttribute(handlers, "ondblclick", getOndblclick()); prepareAttribute(handlers, "onmouseover", getOnmouseover()); prepareAttribute(handlers, "onmouseout", getOnmouseout()); prepareAttribute(handlers, "onmousemove", getOnmousemove()); prepareAttribute(handlers, "onmousedown", getOnmousedown()); prepareAttribute(handlers, "onmouseup", getOnmouseup()); } /** * Prepares the keyboard event handlers, appending them to the the given * StringBuffer. * @param handlers The StringBuffer that output will be appended to. */ protected void prepareKeyEvents(StringBuffer handlers) { prepareAttribute(handlers, "onkeydown", getOnkeydown()); prepareAttribute(handlers, "onkeyup", getOnkeyup()); prepareAttribute(handlers, "onkeypress", getOnkeypress()); } /** * Prepares the text event handlers, appending them to the the given * StringBuffer. * @param handlers The StringBuffer that output will be appended to. */ protected void prepareTextEvents(StringBuffer handlers) { prepareAttribute(handlers, "onselect", getOnselect()); prepareAttribute(handlers, "onchange", getOnchange()); } /** * Prepares the focus event handlers, appending them to the the given * StringBuffer. * @param handlers The StringBuffer that output will be appended to. */ protected void prepareFocusEvents(StringBuffer handlers) { prepareAttribute(handlers, "onblur", getOnblur()); prepareAttribute(handlers, "onfocus", getOnfocus()); // Get the parent FormTag (if necessary) FormTag formTag = null; if ((doDisabled && !getDisabled()) || (doReadonly && !getReadonly())) { formTag = (FormTag)pageContext.getAttribute(Constants.FORM_KEY, PageContext.REQUEST_SCOPE); } // Format Disabled if (doDisabled) { boolean formDisabled = formTag == null ? false : formTag.isDisabled(); if (formDisabled || getDisabled()) { handlers.append(" disabled=\"disabled\""); } } // Format Read Only if (doReadonly) { boolean formReadOnly = formTag == null ? false : formTag.isReadonly(); if (formReadOnly || getReadonly()) { handlers.append(" readonly=\"readonly\""); } } } /** * 'Hook' to enable tags to be extended and * additional attributes added. * @param handlers The StringBuffer that output will be appended to. */ protected void prepareOtherAttributes(StringBuffer handlers) { } /** * Prepares an attribute if the value is not null, appending it to the the given * StringBuffer. * @param handlers The StringBuffer that output will be appended to. */ protected void prepareAttribute(StringBuffer handlers, String name, Object value) { if (value != null) { handlers.append(" "); handlers.append(name); handlers.append("=\""); handlers.append(value); handlers.append("\""); } } /** * Allows HTML tags to find out if they're nested within an %lt;html:html> tag that * has xhtml set to true. * @return true if the tag is nested within an html tag with xhtml set to true, false * otherwise. * @since Struts 1.1 */ protected boolean isXhtml() { return TagUtils.getInstance().isXhtml(this.pageContext); } /** * Returns the closing brace for an input element depending on xhtml status. The tag * must be nested within an %lt;html:html> tag that has xhtml set to true. * @return String - > if xhtml is false, /> if xhtml is true * @since Struts 1.1 */ protected String getElementClose() { return this.isXhtml() ? " />" : ">"; } /** * Searches all scopes for the bean and calls BeanUtils.getProperty() with the * given arguments and converts any exceptions into JspException. * * @param beanName The name of the object to get the property from. * @param property The name of the property to get. * @return The value of the property. * @throws JspException * @since Struts 1.1 */ protected String lookupProperty(String beanName, String property) throws JspException { Object bean = TagUtils.getInstance().lookup(this.pageContext, beanName, null); if (bean == null) { throw new JspException(messages.getMessage("getter.bean", beanName)); } try { return BeanUtils.getProperty(bean, property); } catch (IllegalAccessException e) { throw new JspException( messages.getMessage("getter.access", property, beanName)); } catch (InvocationTargetException e) { Throwable t = e.getTargetException(); throw new JspException( messages.getMessage("getter.result", property, t.toString())); } catch (NoSuchMethodException e) { throw new JspException( messages.getMessage("getter.method", property, beanName)); } } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/html/BaseInputTag.java0000644000175000017500000001352510404045210030324 0ustar arnaudarnaud00000000000000/* * $Id: BaseInputTag.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.taglib.html; import javax.servlet.jsp.JspException; import org.apache.struts.util.MessageResources; /** * Abstract base class for the various input tags. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public abstract class BaseInputTag extends BaseHandlerTag { // ----------------------------------------------------- Instance Variables /** * The number of character columns for this field, or negative * for no limit. */ protected String cols = null; /** * The maximum number of characters allowed, or negative for no limit. */ protected String maxlength = null; /** * The message resources for this package. */ protected static MessageResources messages = MessageResources.getMessageResources(Constants.Package + ".LocalStrings"); /** * The name of the field (and associated property) being processed. */ protected String property = null; /** * The number of rows for this field, or negative for no limit. */ protected String rows = null; /** * The value for this field, or null to retrieve the * corresponding property from our associated bean. */ protected String value = null; /** * The name of the bean containing our underlying property. */ protected String name = Constants.BEAN_KEY; // ------------------------------------------------------------- Properties public String getName() { return (this.name); } public void setName(String name) { this.name = name; } /** * Return the number of columns for this field. */ public String getCols() { return (this.cols); } /** * Set the number of columns for this field. * * @param cols The new number of columns */ public void setCols(String cols) { this.cols = cols; } /** * Return the maximum length allowed. */ public String getMaxlength() { return (this.maxlength); } /** * Set the maximum length allowed. * * @param maxlength The new maximum length */ public void setMaxlength(String maxlength) { this.maxlength = maxlength; } /** * Return the property name. */ public String getProperty() { return (this.property); } /** * Set the property name. * * @param property The new property name */ public void setProperty(String property) { this.property = property; } /** * Return the number of rows for this field. */ public String getRows() { return (this.rows); } /** * Set the number of rows for this field. * * @param rows The new number of rows */ public void setRows(String rows) { this.rows = rows; } /** * Return the size of this field (synonym for getCols()). */ public String getSize() { return (getCols()); } /** * Set the size of this field (synonym for setCols()). * * @param size The new size */ public void setSize(String size) { setCols(size); } /** * Return the field value (if any). */ public String getValue() { return (this.value); } /** * Set the field value (if any). * * @param value The new field value, or null to retrieve the * corresponding property from the bean */ public void setValue(String value) { this.value = value; } // --------------------------------------------------------- Public Methods /** * Process the start of this tag. The default implementation does nothing. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { return (EVAL_BODY_TAG); } /** * Process the end of this tag. The default implementation does nothing. * * @exception JspException if a JSP exception has occurred */ public int doEndTag() throws JspException { return (EVAL_PAGE); } /** * Prepare the name element * @return The element name. */ protected String prepareName() throws JspException { if (property == null) { return null; } // * @since Struts 1.1 if(indexed) { StringBuffer results = new StringBuffer(); prepareIndex(results, name); results.append(property); return results.toString(); } return property; } /** * Release any acquired resources. */ public void release() { super.release(); name = Constants.BEAN_KEY; cols = null; maxlength = null; property = null; rows = null; value = null; } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/html/BaseTag.java0000644000175000017500000001107310404045222027303 0ustar arnaudarnaud00000000000000/* * $Id: BaseTag.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.taglib.html; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.tagext.TagSupport; import org.apache.struts.Globals; import org.apache.struts.taglib.TagUtils; import org.apache.struts.util.MessageResources; import org.apache.struts.util.RequestUtils; /** * Renders an HTML element with an href * attribute pointing to the absolute location of the enclosing JSP page. This * tag is only valid when nested inside a head tag body. The presence * of this tag allows the browser to resolve relative URL's to images, * CSS stylesheets and other resources in a manner independent of the URL * used to call the ActionServlet. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class BaseTag extends TagSupport { /** * The message resources for this package. */ protected static MessageResources messages = MessageResources.getMessageResources(Constants.Package + ".LocalStrings"); /** * The server name to use instead of request.getServerName(). */ protected String server = null; /** * The target window for this base reference. */ protected String target = null; public String getTarget() { return (this.target); } public void setTarget(String target) { this.target = target; } /** * Process the start of this tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); String serverName = (this.server == null) ? request.getServerName() : this.server; String baseTag = renderBaseElement( request.getScheme(), serverName, request.getServerPort(), request.getRequestURI()); JspWriter out = pageContext.getOut(); try { out.write(baseTag); } catch (IOException e) { pageContext.setAttribute(Globals.EXCEPTION_KEY, e, PageContext.REQUEST_SCOPE); throw new JspException(messages.getMessage("common.io", e.toString())); } return EVAL_BODY_INCLUDE; } /** * Render a fully formed HTML <base> element and return it as a String. * @param scheme The scheme used in the url (ie. http or https). * @param serverName * @param port * @param uri The portion of the url from the protocol name up to the query * string. * @return String An HTML <base> element. * @since Struts 1.1 */ protected String renderBaseElement( String scheme, String serverName, int port, String uri) { StringBuffer tag = new StringBuffer(""); } else { tag.append(">"); } return tag.toString(); } /** * Returns the server. * @return String */ public String getServer() { return this.server; } /** * Sets the server. * @param server The server to set */ public void setServer(String server) { this.server = server; } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/html/ButtonTag.java0000644000175000017500000000250210404045250027702 0ustar arnaudarnaud00000000000000/* * $Id: ButtonTag.java 54954 2004-10-17 06:40:12Z martinc $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.taglib.html; /** * Renders an HTML BUTTON tag within the Struts framework. * * @version $Rev: 54954 $ $Date: 2004-10-17 07:40:12 +0100 (Sun, 17 Oct 2004) $ */ public class ButtonTag extends SubmitTag { /** * Render the opening element. * * @return The opening part of the element. */ protected String getElementOpen() { return " * Support for indexed property since Struts 1.1 * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { // Create an appropriate "input" element based on our parameters StringBuffer results = new StringBuffer(" 0) { text = value; } } return (SKIP_BODY); } /** * Process the remainder of this page normally. * * @exception JspException if a JSP exception has occurred */ public int doEndTag() throws JspException { // Render any description for this checkbox if (text != null) { TagUtils.getInstance().write(pageContext, text); } // Evaluate the remainder of this page return (EVAL_PAGE); } /** * Prepare the name element * @return The element name. */ protected String prepareName() throws JspException { if (property == null) { return null; } // * @since Struts 1.1 if(indexed) { StringBuffer results = new StringBuffer(); prepareIndex(results, name); results.append(property); return results.toString(); } return property; } /** * Release any acquired resources. */ public void release() { super.release(); name = Constants.BEAN_KEY; property = null; text = null; value = null; } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/html/Constants.java0000644000175000017500000000360610404045232027755 0ustar arnaudarnaud00000000000000/* * $Id: Constants.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.taglib.html; /** * Manifest constants for this package. */ public class Constants { /** * The name of this package. */ public static final String Package = "org.apache.struts.taglib.html"; /** * The attribute key for the bean our form is related to. */ public static final String BEAN_KEY = Package + ".BEAN"; /** * The property under which a Cancel button press is reported. */ public static final String CANCEL_PROPERTY = Package + ".CANCEL"; /** * The property under which a Cancel button press is reported, if the * Cancel button is rendered as an image. */ public static final String CANCEL_PROPERTY_X = Package + ".CANCEL.x"; /** * The attribute key for the form tag itself. */ public static final String FORM_KEY = Package + ".FORM"; /** * The attribute key for the select tag itself. */ public static final String SELECT_KEY = Package + ".SELECT"; /** * The property under which a transaction token is reported. */ public static final String TOKEN_KEY = Package + ".TOKEN"; } libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/html/ErrorsTag.java0000644000175000017500000002207610404045222027712 0ustar arnaudarnaud00000000000000/* * $Id: ErrorsTag.java 164530 2005-04-25 03:11:07Z niallp $ * * Copyright 1999-2005 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.taglib.html; import java.util.Iterator; import java.util.Locale; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.TagSupport; import org.apache.struts.Globals; import org.apache.struts.action.ActionMessage; import org.apache.struts.action.ActionMessages; import org.apache.struts.taglib.TagUtils; import org.apache.struts.util.MessageResources; /** * Custom tag that renders error messages if an appropriate request attribute * has been created. The tag looks for a request attribute with a reserved * key, and assumes that it is either a String, a String array, containing * message keys to be looked up in the module's MessageResources, or * an object of type org.apache.struts.action.ActionErrors. *

      * The following optional message keys will be utilized if corresponding * messages exist for them in the application resources: *

        *
      • errors.header - If present, the corresponding message will be * rendered prior to the individual list of error messages.
      • *
      • errors.footer - If present, the corresponding message will be * rendered following the individual list of error messages.
      • *
      • errors.prefix - If present, the corresponding message will be * rendered before each individual error message.
      • *
      • errors.suffix - If present, the corresponding message will be * rendered after each individual error message.
      • *
      * * @version $Rev: 164530 $ $Date: 2005-04-25 04:11:07 +0100 (Mon, 25 Apr 2005) $ */ public class ErrorsTag extends TagSupport { // ----------------------------------------------------------- Properties /** * The servlet context attribute key for our resources. */ protected String bundle = null; public String getBundle() { return (this.bundle); } public void setBundle(String bundle) { this.bundle = bundle; } /** * The default locale on our server. * @deprecated Use Locale.getDefault() directly. */ protected static Locale defaultLocale = Locale.getDefault(); /** * The line ending string. * @deprecated No longer used. */ protected static String lineEnd = System.getProperty("line.separator"); /** * The session attribute key for our locale. */ protected String locale = Globals.LOCALE_KEY; public String getLocale() { return (this.locale); } public void setLocale(String locale) { this.locale = locale; } /** * The message resources for this package. */ protected static MessageResources messages = MessageResources.getMessageResources(Constants.Package + ".LocalStrings"); /** * The request attribute key for our error messages (if any). */ protected String name = Globals.ERROR_KEY; public String getName() { return (this.name); } public void setName(String name) { this.name = name; } /** * The name of the property for which error messages should be returned, * or null to return all errors. */ protected String property = null; public String getProperty() { return (this.property); } public void setProperty(String property) { this.property = property; } /** * The message resource key for errors header. */ protected String header = null; public String getHeader() { return header == null ? "errors.header" : header; } public void setHeader(String header) { this.header = header; } /** * The message resource key for errors footer. */ protected String footer = null; public String getFooter() { return footer == null ? "errors.footer" : footer; } public void setFooter(String footer) { this.footer = footer; } /** * The message resource key for errors prefix. */ protected String prefix= null; public String getPrefix() { return prefix == null ? "errors.prefix" : prefix; } public void setPrefix(String prefix) { this.prefix= prefix; } /** * The message resource key for errors suffix. */ protected String suffix= null; public String getSuffix() { return suffix == null ? "errors.suffix" : suffix; } public void setSuffix(String suffix) { this.suffix= suffix; } // ------------------------------------------------------- Public Methods /** * Render the specified error messages if there are any. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { // Were any error messages specified? ActionMessages errors = null; try { errors = TagUtils.getInstance().getActionMessages(pageContext, name); } catch (JspException e) { TagUtils.getInstance().saveException(pageContext, e); throw e; } if ((errors == null) || errors.isEmpty()) { return (EVAL_BODY_INCLUDE); } boolean headerPresent = TagUtils.getInstance().present(pageContext, bundle, locale, getHeader()); boolean footerPresent = TagUtils.getInstance().present(pageContext, bundle, locale, getFooter()); boolean prefixPresent = TagUtils.getInstance().present(pageContext, bundle, locale, getPrefix()); boolean suffixPresent = TagUtils.getInstance().present(pageContext, bundle, locale, getSuffix()); // Render the error messages appropriately StringBuffer results = new StringBuffer(); boolean headerDone = false; String message = null; Iterator reports = (property == null) ? errors.get() : errors.get(property); while (reports.hasNext()) { ActionMessage report = (ActionMessage) reports.next(); if (!headerDone) { if (headerPresent) { message = TagUtils.getInstance().message( pageContext, bundle, locale, getHeader()); results.append(message); } headerDone = true; } if (prefixPresent) { message = TagUtils.getInstance().message( pageContext, bundle, locale, getPrefix()); results.append(message); } if (report.isResource()) { message = TagUtils.getInstance().message( pageContext, bundle, locale, report.getKey(), report.getValues()); } else { message = report.getKey(); } if (message != null) { results.append(message); } if (suffixPresent) { message = TagUtils.getInstance().message( pageContext, bundle, locale, getSuffix()); results.append(message); } } if (headerDone && footerPresent) { message = TagUtils.getInstance().message(pageContext, bundle, locale, getFooter()); results.append(message); } TagUtils.getInstance().write(pageContext, results.toString()); return (EVAL_BODY_INCLUDE); } /** * Release any acquired resources. */ public void release() { super.release(); bundle = Globals.MESSAGES_KEY; locale = Globals.LOCALE_KEY; name = Globals.ERROR_KEY; property = null; header = null; footer = null; prefix = null; suffix = null; } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/html/FileTag.java0000644000175000017500000000207610404045232027314 0ustar arnaudarnaud00000000000000/* * $Id: FileTag.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.taglib.html; /** * Custom tag for input fields of type "file". * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class FileTag extends BaseFieldTag { /** * Construct a new instance of this tag. */ public FileTag() { super(); this.type = "file"; } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/html/FormTag.java0000644000175000017500000005573610404045214027353 0ustar arnaudarnaud00000000000000/* * $Id: FormTag.java 331056 2005-11-06 01:29:01Z niallp $ * * Copyright 1999-2005 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.taglib.html; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.tagext.TagSupport; import org.apache.struts.Globals; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionServlet; import org.apache.struts.config.FormBeanConfig; import org.apache.struts.config.ModuleConfig; import org.apache.struts.taglib.TagUtils; import org.apache.struts.util.MessageResources; import org.apache.struts.util.RequestUtils; /** * Custom tag that represents an input form, associated with a bean whose * properties correspond to the various fields of the form. * * @version $Rev: 331056 $ $Date: 2005-11-06 01:29:01 +0000 (Sun, 06 Nov 2005) $ */ public class FormTag extends TagSupport { // ----------------------------------------------------- Instance Variables /** * The action URL to which this form should be submitted, if any. */ protected String action = null; /** * The module configuration for our module. */ protected ModuleConfig moduleConfig = null; /** * The content encoding to be used on a POST submit. */ protected String enctype = null; /** * The name of the field to receive focus, if any. */ protected String focus = null; /** * The index in the focus field array to receive focus. This only applies if the field * given in the focus attribute is actually an array of fields. This allows a specific * field in a radio button array to receive focus while still allowing indexed field * names like "myRadioButtonField[1]" to be passed in the focus attribute. * @since Struts 1.1 */ protected String focusIndex = null; /** * The line ending string. */ protected static String lineEnd = System.getProperty("line.separator"); /** * The ActionMapping defining where we will be submitting this form */ protected ActionMapping mapping = null; /** * The message resources for this package. */ protected static MessageResources messages = MessageResources.getMessageResources(Constants.Package + ".LocalStrings"); /** * The request method used when submitting this form. */ protected String method = null; /** * The onReset event script. */ protected String onreset = null; /** * The onSubmit event script. */ protected String onsubmit = null; /** * Include language attribute in the focus script's <script> element. This * property is ignored in XHTML mode. * @since Struts 1.2 */ protected boolean scriptLanguage = true; /** * The ActionServlet instance we are associated with (so that we can * initialize the servlet property on any form bean that * we create). */ protected ActionServlet servlet = null; /** * The style attribute associated with this tag. */ protected String style = null; /** * The style class associated with this tag. */ protected String styleClass = null; /** * The identifier associated with this tag. */ protected String styleId = null; /** * The window target. */ protected String target = null; /** * The name of the form bean to (create and) use. This is either the same * as the 'name' attribute, if that was specified, or is obtained from the * associated ActionMapping otherwise. */ protected String beanName = null; /** * The scope of the form bean to (create and) use. This is either the same * as the 'scope' attribute, if that was specified, or is obtained from the * associated ActionMapping otherwise. */ protected String beanScope = null; /** * The type of the form bean to (create and) use. This is either the same * as the 'type' attribute, if that was specified, or is obtained from the * associated ActionMapping otherwise. */ protected String beanType = null; /** * The list of character encodings for input data that the server should * accept. */ protected String acceptCharset = null; /** Controls whether child controls should be 'disabled'. */ private boolean disabled = false; /** Controls whether child controls should be 'readonly'. */ protected boolean readonly = false; // ------------------------------------------------------------- Properties /** * Return the name of the form bean corresponding to this tag. There is * no corresponding setter method; this method exists so that the nested * tag classes can obtain the actual bean name derived from other * attributes of the tag. */ public String getBeanName() { return beanName; } /** * Return the action URL to which this form should be submitted. */ public String getAction() { return (this.action); } /** * Set the action URL to which this form should be submitted. * * @param action The new action URL */ public void setAction(String action) { this.action = action; } /** * Return the content encoding used when submitting this form. */ public String getEnctype() { return (this.enctype); } /** * Set the content encoding used when submitting this form. * * @param enctype The new content encoding */ public void setEnctype(String enctype) { this.enctype = enctype; } /** * Return the focus field name for this form. */ public String getFocus() { return (this.focus); } /** * Set the focus field name for this form. * * @param focus The new focus field name */ public void setFocus(String focus) { this.focus = focus; } /** * Return the request method used when submitting this form. */ public String getMethod() { return (this.method); } /** * Set the request method used when submitting this form. * * @param method The new request method */ public void setMethod(String method) { this.method = method; } /** * Return the onReset event script. */ public String getOnreset() { return (this.onreset); } /** * Set the onReset event script. * * @param onReset The new event script */ public void setOnreset(String onReset) { this.onreset = onReset; } /** * Return the onSubmit event script. */ public String getOnsubmit() { return (this.onsubmit); } /** * Set the onSubmit event script. * * @param onSubmit The new event script */ public void setOnsubmit(String onSubmit) { this.onsubmit = onSubmit; } /** * Return the style attribute for this tag. */ public String getStyle() { return (this.style); } /** * Set the style attribute for this tag. * * @param style The new style attribute */ public void setStyle(String style) { this.style = style; } /** * Return the style class for this tag. */ public String getStyleClass() { return (this.styleClass); } /** * Set the style class for this tag. * * @param styleClass The new style class */ public void setStyleClass(String styleClass) { this.styleClass = styleClass; } /** * Return the style identifier for this tag. */ public String getStyleId() { return (this.styleId); } /** * Set the style identifier for this tag. * * @param styleId The new style identifier */ public void setStyleId(String styleId) { this.styleId = styleId; } /** * Return the window target. */ public String getTarget() { return (this.target); } /** * Set the window target. * * @param target The new window target */ public void setTarget(String target) { this.target = target; } /** * Return the list of character encodings accepted. */ public String getAcceptCharset() { return acceptCharset; } /** * Set the list of character encodings accepted. * * @param acceptCharset The list of character encodings */ public void setAcceptCharset(String acceptCharset) { this.acceptCharset= acceptCharset; } /** Sets the disabled event handler. */ public void setDisabled(boolean disabled) { this.disabled = disabled; } /** Returns the disabled event handler. */ public boolean isDisabled() { return disabled; } /** Sets the readonly event handler. */ public void setReadonly(boolean readonly) { this.readonly = readonly; } /** Returns the readonly event handler. */ public boolean isReadonly() { return readonly; } // --------------------------------------------------------- Public Methods /** * Render the beginning of this form. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { // Look up the form bean name, scope, and type if necessary this.lookup(); // Create an appropriate "form" element based on our parameters StringBuffer results = new StringBuffer(); results.append(this.renderFormStartElement()); results.append(this.renderToken()); TagUtils.getInstance().write(pageContext, results.toString()); // Store this tag itself as a page attribute pageContext.setAttribute(Constants.FORM_KEY, this, PageContext.REQUEST_SCOPE); this.initFormBean(); return (EVAL_BODY_INCLUDE); } /** * Locate or create the bean associated with our form. * @throws JspException * @since Struts 1.1 */ protected void initFormBean() throws JspException { int scope = PageContext.SESSION_SCOPE; if ("request".equalsIgnoreCase(beanScope)) { scope = PageContext.REQUEST_SCOPE; } Object bean = pageContext.getAttribute(beanName, scope); if (bean == null) { // New and improved - use the values from the action mapping bean = RequestUtils.createActionForm( (HttpServletRequest) pageContext.getRequest(), mapping, moduleConfig, servlet); if (bean instanceof ActionForm) { ((ActionForm) bean).reset(mapping, (HttpServletRequest) pageContext.getRequest()); } if (bean == null) { throw new JspException(messages.getMessage("formTag.create", beanType)); } pageContext.setAttribute(beanName, bean, scope); } pageContext.setAttribute(Constants.BEAN_KEY, bean, PageContext.REQUEST_SCOPE); } /** * Generates the opening <form> element with appropriate * attributes. * @since Struts 1.1 */ protected String renderFormStartElement() { StringBuffer results = new StringBuffer(""); return results.toString(); } /** * Renders the name of the form. If XHTML is set to true, the name will * be rendered as an 'id' attribute, otherwise as a 'name' attribute. */ protected void renderName(StringBuffer results) { if (this.isXhtml()) { if (getStyleId() == null) { renderAttribute(results, "id", beanName); } else { renderAttribute(results, "id", getStyleId()); } } else { renderAttribute(results, "name", beanName); renderAttribute(results, "id", getStyleId()); } } /** * Renders the action attribute */ protected void renderAction(StringBuffer results) { HttpServletResponse response = (HttpServletResponse) this.pageContext.getResponse(); results.append(" action=\""); results.append( response.encodeURL( TagUtils.getInstance().getActionMappingURL( this.action, this.pageContext))); results.append("\""); } /** * 'Hook' to enable this tag to be extended and * additional attributes added. */ protected void renderOtherAttributes(StringBuffer results) { } /** * Generates a hidden input field with token information, if any. The * field is added within a div element for HTML 4.01 Strict compliance. * @return A hidden input field containing the token. * @since Struts 1.1 */ protected String renderToken() { StringBuffer results = new StringBuffer(); HttpSession session = pageContext.getSession(); if (session != null) { String token = (String) session.getAttribute(Globals.TRANSACTION_TOKEN_KEY); if (token != null) { results.append("
      "); } else { results.append("\">"); } results.append("
      "); } } return results.toString(); } /** * Renders attribute="value" if not null */ protected void renderAttribute(StringBuffer results, String attribute, String value) { if (value != null) { results.append(" "); results.append(attribute); results.append("=\""); results.append(value); results.append("\""); } } /** * Render the end of this form. * * @exception JspException if a JSP exception has occurred */ public int doEndTag() throws JspException { // Remove the page scope attributes we created pageContext.removeAttribute(Constants.BEAN_KEY, PageContext.REQUEST_SCOPE); pageContext.removeAttribute(Constants.FORM_KEY, PageContext.REQUEST_SCOPE); // Render a tag representing the end of our current form StringBuffer results = new StringBuffer(""); // Render JavaScript to set the input focus if required if (this.focus != null) { results.append(this.renderFocusJavascript()); } // Print this value to our output writer JspWriter writer = pageContext.getOut(); try { writer.print(results.toString()); } catch (IOException e) { throw new JspException(messages.getMessage("common.io", e.toString())); } // Continue processing this page return (EVAL_PAGE); } /** * Generates javascript to set the initial focus to the form element given in the * tag's "focus" attribute. * @since Struts 1.1 */ protected String renderFocusJavascript() { StringBuffer results = new StringBuffer(); results.append(lineEnd); results.append(""); results.append(lineEnd); return results.toString(); } /** * Release any acquired resources. */ public void release() { super.release(); action = null; moduleConfig = null; enctype = null; disabled = false; focus = null; focusIndex = null; mapping = null; method = null; onreset = null; onsubmit = null; readonly = false; servlet = null; style = null; styleClass = null; styleId = null; target = null; acceptCharset = null; } // ------------------------------------------------------ Protected Methods /** * Look up values for the name, scope, and * type properties if necessary. * * @exception JspException if a required value cannot be looked up */ protected void lookup() throws JspException { // Look up the module configuration information we need moduleConfig = TagUtils.getInstance().getModuleConfig(pageContext); if (moduleConfig == null) { JspException e = new JspException(messages.getMessage("formTag.collections")); pageContext.setAttribute(Globals.EXCEPTION_KEY, e, PageContext.REQUEST_SCOPE); throw e; } servlet = (ActionServlet) pageContext.getServletContext().getAttribute( Globals.ACTION_SERVLET_KEY); // Look up the action mapping we will be submitting to String mappingName = TagUtils.getInstance().getActionMappingName(action); mapping = (ActionMapping) moduleConfig.findActionConfig(mappingName); if (mapping == null) { JspException e = new JspException(messages.getMessage("formTag.mapping", mappingName)); pageContext.setAttribute(Globals.EXCEPTION_KEY, e, PageContext.REQUEST_SCOPE); throw e; } // Look up the form bean definition FormBeanConfig formBeanConfig = moduleConfig.findFormBeanConfig(mapping.getName()); if (formBeanConfig == null) { JspException e = new JspException(messages.getMessage("formTag.formBean", mapping.getName(), action)); pageContext.setAttribute(Globals.EXCEPTION_KEY, e, PageContext.REQUEST_SCOPE); throw e; } // Calculate the required values beanName = mapping.getAttribute(); beanScope = mapping.getScope(); beanType = formBeanConfig.getType(); } /** * Returns true if this tag should render as xhtml. */ private boolean isXhtml() { return TagUtils.getInstance().isXhtml(this.pageContext); } /** * Returns the focusIndex. * @return String */ public String getFocusIndex() { return focusIndex; } /** * Sets the focusIndex. * @param focusIndex The focusIndex to set */ public void setFocusIndex(String focusIndex) { this.focusIndex = focusIndex; } /** * Gets whether or not the focus script's <script> element will include the * language attribute. * @return true if language attribute will be included. * @since Struts 1.2 */ public boolean getScriptLanguage() { return this.scriptLanguage; } /** * Sets whether or not the focus script's <script> element will include the * language attribute. * @since Struts 1.2 */ public void setScriptLanguage(boolean scriptLanguage) { this.scriptLanguage = scriptLanguage; } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/html/FrameTag.java0000644000175000017500000001326410404045210027464 0ustar arnaudarnaud00000000000000/* * $Id: FrameTag.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.taglib.html; import javax.servlet.jsp.JspException; import org.apache.struts.taglib.TagUtils; /** * Generate an HTML <frame> tag with similar capabilities * as those the <html:link> tag provides for hyperlink * elements. The src element is rendered using the same technique * that {@link LinkTag} uses to render the href attribute of a * hyperlink. Additionall, the HTML 4.0 * frame tag attributes noresize, scrolling, * marginheight, marginwidth, * frameborder, and longdesc are supported. * The frame * name attribute is rendered based on the frameName * property. * * Note that the value of longdesc is intended to be a URI, but * currently no rewriting is supported. The attribute is set directly from * the property value. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ * @since Struts 1.1 */ public class FrameTag extends LinkTag { // ------------------------------------------------------------- Properties /** * The frameborder attribute that should be rendered (1, 0). */ protected String frameborder = null; public String getFrameborder() { return (this.frameborder); } public void setFrameborder(String frameborder) { this.frameborder = frameborder; } /** * The name attribute that should be rendered for this frame. */ protected String frameName = null; public String getFrameName() { return (this.frameName); } public void setFrameName(String frameName) { this.frameName = frameName; } /** * URI of a long description of this frame (complements title). */ protected String longdesc = null; public String getLongdesc() { return (this.longdesc); } public void setLongdesc(String longdesc) { this.longdesc = longdesc; } /** * The margin height in pixels, or zero for no setting. */ protected Integer marginheight = null; public Integer getMarginheight() { return (this.marginheight); } public void setMarginheight(Integer marginheight) { this.marginheight = marginheight; } /** * The margin width in pixels, or null for no setting. */ protected Integer marginwidth = null; public Integer getMarginwidth() { return (this.marginwidth); } public void setMarginwidth(Integer marginwidth) { this.marginwidth = marginwidth; } /** * Should users be disallowed to resize the frame? */ protected boolean noresize = false; public boolean getNoresize() { return (this.noresize); } public void setNoresize(boolean noresize) { this.noresize = noresize; } /** * What type of scrolling should be supported (yes, no, auto)? */ protected String scrolling = null; public String getScrolling() { return (this.scrolling); } public void setScrolling(String scrolling) { this.scrolling = scrolling; } // --------------------------------------------------------- Public Methods /** * Render the appropriately encoded URI. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { // Print this element to our output writer StringBuffer results = new StringBuffer("write property since Struts 1.1. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { // Render the tag as before super.doStartTag(); // Is rendering the value separately requested? if (!write) { return (EVAL_BODY_TAG); } // Calculate the value to be rendered separately // * @since Struts 1.1 String results = null; if (value != null) { results = TagUtils.getInstance().filter(value); } else { Object value = TagUtils.getInstance().lookup(pageContext, name, property, null); if (value == null) { results = ""; } else { results = TagUtils.getInstance().filter(value.toString()); } } TagUtils.getInstance().write(pageContext, results); return (EVAL_BODY_TAG); } /** * Release any acquired resources. */ public void release() { super.release(); write = false; } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/html/HtmlTag.java0000644000175000017500000001460710404045216027346 0ustar arnaudarnaud00000000000000/* * $Id: HtmlTag.java 54929 2004-10-16 16:38:42Z germuska $ * * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.taglib.html; import java.util.Locale; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import javax.servlet.jsp.JspException; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.tagext.TagSupport; import org.apache.struts.Globals; import org.apache.struts.taglib.TagUtils; import org.apache.struts.util.MessageResources; /** * Renders an HTML element with appropriate language attributes if * there is a current Locale available in the user's session. * * @version $Rev: 54929 $ $Date: 2004-10-16 17:38:42 +0100 (Sat, 16 Oct 2004) $ */ public class HtmlTag extends TagSupport { // ------------------------------------------------------------- Properties /** * The message resources for this package. */ protected static MessageResources messages = MessageResources.getMessageResources(Constants.Package + ".LocalStrings"); /** * Should we set the current Locale for this user if needed? * @deprecated This will be removed after Struts 1.2. */ protected boolean locale = false; /** * @deprecated This will be removed after Struts 1.2. */ public boolean getLocale() { return (locale); } /** * @deprecated This will be removed after Struts 1.2. */ public void setLocale(boolean locale) { this.locale = locale; } /** * Are we rendering an xhtml page? */ protected boolean xhtml = false; /** * Are we rendering a lang attribute? * @since Struts 1.2 */ protected boolean lang = false; public boolean getXhtml() { return this.xhtml; } public void setXhtml(boolean xhtml) { this.xhtml = xhtml; } /** * Returns true if the tag should render a lang attribute. * @since Struts 1.2 */ public boolean getLang() { return this.lang; } /** * Sets whether the tag should render a lang attribute. * @since Struts 1.2 */ public void setLang(boolean lang) { this.lang = lang; } /** * Process the start of this tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { TagUtils.getInstance().write(this.pageContext, this.renderHtmlStartElement()); return EVAL_BODY_INCLUDE; } /** * Renders an <html> element with appropriate language attributes. * @since Struts 1.2 */ protected String renderHtmlStartElement() { StringBuffer sb = new StringBuffer(" 0)); boolean validCountry = country.length() > 0; if (this.xhtml) { this.pageContext.setAttribute( Globals.XHTML_KEY, "true", PageContext.PAGE_SCOPE); sb.append(" xmlns=\"http://www.w3.org/1999/xhtml\""); } if ((this.lang || this.locale || this.xhtml) && validLanguage) { sb.append(" lang=\""); sb.append(language); if (validCountry) { sb.append("-"); sb.append(country); } sb.append("\""); } if (this.xhtml && validLanguage) { sb.append(" xml:lang=\""); sb.append(language); if (validCountry) { sb.append("-"); sb.append(country); } sb.append("\""); } sb.append(">"); return sb.toString(); } /** * Process the end of this tag. * * @exception JspException if a JSP exception has occurred */ public int doEndTag() throws JspException { TagUtils.getInstance().write(pageContext, ""); // Evaluate the remainder of this page return (EVAL_PAGE); } /** * Release any acquired resources. */ public void release() { this.locale = false; this.xhtml = false; this.lang=false; } // ------------------------------------------------------ Protected Methods /** * Return the current Locale for this request. If there is no locale in the session and * the locale attribute is set to "true", this method will create a Locale based on the * client's Accept-Language header or the server's default locale and store it in the * session. This will always return a Locale and never null. * @since Struts 1.1 * @deprecated This will be removed after Struts 1.2. */ protected Locale getCurrentLocale() { Locale userLocale = TagUtils.getInstance().getUserLocale(pageContext, Globals.LOCALE_KEY); // Store a new current Locale, if requested if (this.locale) { HttpSession session = ((HttpServletRequest) this.pageContext.getRequest()).getSession(); session.setAttribute(Globals.LOCALE_KEY, userLocale); } return userLocale; } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/html/ImageTag.java0000644000175000017500000001773710404045226027474 0ustar arnaudarnaud00000000000000/* * $Id: ImageTag.java 164927 2005-04-27 00:41:05Z niallp $ * * Copyright 1999-2005 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.taglib.html; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.JspException; import org.apache.struts.Globals; import org.apache.struts.config.ModuleConfig; import org.apache.struts.taglib.TagUtils; /** * Tag for input fields of type "image". * * @version $Rev: 164927 $ $Date: 2005-04-27 01:41:05 +0100 (Wed, 27 Apr 2005) $ */ public class ImageTag extends SubmitTag { // ------------------------------------------------------------- Properties /** * The alignment for this image. */ protected String align = null; /** * @deprecated Align attribute is deprecated in HTML 4.x. */ public String getAlign() { return (this.align); } /** * @deprecated Align attribute is deprecated in HTML 4.x. */ public void setAlign(String align) { this.align = align; } /** * The border size around the image. */ protected String border = null; public String getBorder() { return (this.border); } public void setBorder(String border) { this.border = border; } /** * The module-relative URI of the image. */ protected String page = null; public String getPage() { return (this.page); } public void setPage(String page) { this.page = page; } /** * The message resources key of the module-relative URI of the image. */ protected String pageKey = null; public String getPageKey() { return (this.pageKey); } public void setPageKey(String pageKey) { this.pageKey = pageKey; } /** * The URL of this image. */ protected String src = null; public String getSrc() { return (this.src); } public void setSrc(String src) { this.src = src; } /** * The message resources key for the URL of this image. */ protected String srcKey = null; public String getSrcKey() { return (this.srcKey); } public void setSrcKey(String srcKey) { this.srcKey = srcKey; } // --------------------------------------------------------- Constructor public ImageTag() { super(); property = ""; } // --------------------------------------------------------- Protected Methods /** * Render the opening element. * * @return The opening part of the element. */ protected String getElementOpen() { return "src * property for this generated element, or null if there is * no such URL. * * @exception JspException if an error occurs */ protected String src() throws JspException { // Deal with a direct context-relative page that has been specified if (this.page != null) { if ((this.src != null) || (this.srcKey != null) || (this.pageKey != null)) { JspException e = new JspException (messages.getMessage("imgTag.src")); TagUtils.getInstance().saveException(pageContext, e); throw e; } ModuleConfig config = (ModuleConfig) pageContext.getRequest().getAttribute(Globals.MODULE_KEY); HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); String pageValue = this.page; if (config != null) { pageValue = TagUtils.getInstance().pageURL(request, this.page, config); } return (request.getContextPath() + pageValue); } // Deal with an indirect context-relative page that has been specified if (this.pageKey != null) { if ((this.src != null) || (this.srcKey != null)) { JspException e = new JspException (messages.getMessage("imgTag.src")); TagUtils.getInstance().saveException(pageContext, e); throw e; } ModuleConfig config = (ModuleConfig) pageContext.getRequest().getAttribute(Globals.MODULE_KEY); HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); String pageValue = TagUtils.getInstance().message( pageContext, getBundle(), getLocale(), this.pageKey); if (config != null) { pageValue = TagUtils.getInstance().pageURL(request, pageValue, config); } return (request.getContextPath() + pageValue); } // Deal with an absolute source that has been specified if (this.src != null) { if (this.srcKey != null) { JspException e = new JspException (messages.getMessage("imgTag.src")); TagUtils.getInstance().saveException(pageContext, e); throw e; } return (this.src); } // Deal with an indirect source that has been specified if (this.srcKey == null) { JspException e = new JspException (messages.getMessage("imgTag.src")); TagUtils.getInstance().saveException(pageContext, e); throw e; } return TagUtils.getInstance().message( pageContext, getBundle(), getLocale(), this.srcKey); } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/html/ImgTag.java0000644000175000017500000005035010404045210027143 0ustar arnaudarnaud00000000000000/* * $Id: ImgTag.java 164927 2005-04-27 00:41:05Z niallp $ * * Copyright 1999-2005 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.taglib.html; import java.util.Iterator; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.JspException; import org.apache.struts.Globals; import org.apache.struts.config.ModuleConfig; import org.apache.struts.taglib.TagUtils; import org.apache.struts.util.MessageResources; import org.apache.struts.util.ModuleUtils; /** * Generate an IMG tag to the specified image URI. *

      * TODO: *

        *
      • Make the alt, src, and * lowsrc settable from properties (for i18n)
      • *
      * * @version $Rev: 164927 $ */ public class ImgTag extends BaseHandlerTag { // ----------------------------------------------------- Constructor public ImgTag() { super(); doDisabled = false; } // ------------------------------------------------------------- Properties /** * The property to specify where to align the image. */ protected String align = null; public String getAlign() { return (this.align); } public void setAlign(String align) { this.align = align; } /** * The border size around the image. */ protected String border = null; public String getBorder() { return (this.border); } public void setBorder(String border) { this.border = border; } /** * The property to specify how to root the image. * If 'true' or if there is no current module the image is * rooted to the application context path * If 'false' or absent the image is rooted to the current * module's context path. * @deprecated Use module property instead; will be removed in a release after 1.2.0. */ protected String contextRelative = null; /** @deprecated Use module property instead; will be removed in a release after 1.2.0. */ public String getContextRelative() { return (this.contextRelative); } /** @deprecated Use module property instead; will be removed in a release after 1.2.0. */ public void setContextRelative(String contextRelative) { this.contextRelative = contextRelative; } /** * Convenience method to return true if contextRelative set to "true". * @return True if contextRelative set to "true" * @deprecated Use module property instead; will be removed in a release after 1.2.0. */ public boolean isContextRelativeSet() { return Boolean.valueOf(this.contextRelative).booleanValue(); } /** * The image height. */ protected String height = null; public String getHeight() { return (this.height); } public void setHeight(String height) { this.height = height; } /** * The horizontal spacing around the image. */ protected String hspace = null; public String getHspace() { return (this.hspace); } public void setHspace(String hspace) { this.hspace = hspace; } /** * The image name for named images. */ protected String imageName = null; public String getImageName() { return (this.imageName); } public void setImageName(String imageName) { this.imageName = imageName; } /** * Server-side image map declaration. */ protected String ismap = null; public String getIsmap() { return (this.ismap); } public void setIsmap(String ismap) { this.ismap = ismap; } /** * The low resolution image source URI. * @deprecated This is not defined in the HTML 4.01 spec and will be removed in a * future version of Struts. */ protected String lowsrc = null; /** * @deprecated This is not defined in the HTML 4.01 spec and will be removed in a * future version of Struts. */ public String getLowsrc() { return (this.lowsrc); } public void setLowsrc(String lowsrc) { this.lowsrc = lowsrc; } /** * The message resources for this package. */ protected static MessageResources messages = MessageResources.getMessageResources(Constants.Package + ".LocalStrings"); /** * The JSP bean name for query parameters. */ protected String name = null; public String getName() { return (this.name); } public void setName(String name) { this.name = name; } /** * The module-relative path, starting with a slash character, of the * image to be displayed by this rendered tag. */ protected String page = null; public String getPage() { return (this.page); } public void setPage(String page) { this.page = page; } /** * The message resources key under which we should look up the * page attribute for this generated tag, if any. */ protected String pageKey = null; public String getPageKey() { return (this.pageKey); } public void setPageKey(String pageKey) { this.pageKey = pageKey; } /** * The module-relative action (beginning with a slash) which will be * used as the source for this image. */ protected String action = null; public String getAction() { return (this.action); } public void setAction(String action) { this.action = action; } /** * The module prefix (beginning with a slash) which will be * used to find the action for this link. */ protected String module = null; public String getModule() { return (this.module); } public void setModule(String module) { this.module = module; } /** * In situations where an image is dynamically generated (such as to create * a chart graph), this specifies the single-parameter request parameter * name to generate. */ protected String paramId = null; public String getParamId() { return (this.paramId); } public void setParamId(String paramId) { this.paramId = paramId; } /** * The single-parameter JSP bean name. */ protected String paramName = null; public String getParamName() { return (this.paramName); } public void setParamName(String paramName) { this.paramName = paramName; } /** * The single-parameter JSP bean property. */ protected String paramProperty = null; public String getParamProperty() { return (this.paramProperty); } public void setParamProperty(String paramProperty) { this.paramProperty = paramProperty; } /** * The single-parameter JSP bean scope. */ protected String paramScope = null; public String getParamScope() { return (this.paramScope); } public void setParamScope(String paramScope) { this.paramScope = paramScope; } /** * The JSP bean property name for query parameters. */ protected String property = null; public String getProperty() { return (this.property); } public void setProperty(String property) { this.property = property; } /** * The scope of the bean specified by the name property, if any. */ protected String scope = null; public String getScope() { return (this.scope); } public void setScope(String scope) { this.scope = scope; } /** * The image source URI. */ protected String src = null; public String getSrc() { return (this.src); } public void setSrc(String src) { this.src = src; } /** * The message resources key under which we should look up the * src attribute for this generated tag, if any. */ protected String srcKey = null; public String getSrcKey() { return (this.srcKey); } public void setSrcKey(String srcKey) { this.srcKey = srcKey; } /** * Client-side image map declaration. */ protected String usemap = null; public String getUsemap() { return (this.usemap); } public void setUsemap(String usemap) { this.usemap = usemap; } /** * The vertical spacing around the image. */ protected String vspace = null; public String getVspace() { return (this.vspace); } public void setVspace(String vspace) { this.vspace = vspace; } /** * The image width. */ protected String width = null; public String getWidth() { return (this.width); } public void setWidth(String width) { this.width = width; } protected boolean useLocalEncoding = false; public boolean isUseLocalEncoding() { return useLocalEncoding; } public void setUseLocalEncoding(boolean b) { useLocalEncoding = b; } // --------------------------------------------------------- Public Methods /** * Render the beginning of the IMG tag. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { // Evaluate the body of this tag return (EVAL_BODY_TAG); } /** * Render the end of the IMG tag. * * @exception JspException if a JSP exception has occurred */ public int doEndTag() throws JspException { // Generate the name definition or image element HttpServletResponse response = (HttpServletResponse) pageContext.getResponse(); StringBuffer results = new StringBuffer("src * property for this generated element, or null if there is * no such URL. * * @exception JspException if an error occurs */ protected String src() throws JspException { // Deal with a direct context-relative page that has been specified if (this.page != null) { if ((this.src != null) || (this.srcKey != null) || (this.pageKey != null)) { throwImgTagSrcException(); } ModuleConfig config = ModuleUtils.getInstance().getModuleConfig( this.module, (HttpServletRequest) pageContext.getRequest(), pageContext.getServletContext()); HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); String pageValue = this.page; if (!srcDefaultReference(config)) { pageValue = TagUtils.getInstance().pageURL(request, this.page, config); } return (request.getContextPath() + pageValue); } // Deal with an indirect context-relative page that has been specified if (this.pageKey != null) { if ((this.src != null) || (this.srcKey != null)) { throwImgTagSrcException(); } ModuleConfig config = ModuleUtils.getInstance().getModuleConfig( this.module, (HttpServletRequest) pageContext.getRequest(), pageContext.getServletContext()); HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); String pageValue = TagUtils.getInstance().message( pageContext, getBundle(), getLocale(), this.pageKey); if (!srcDefaultReference(config)) { pageValue = TagUtils.getInstance().pageURL(request, pageValue, config); } return (request.getContextPath() + pageValue); } if (this.action != null) { if ((this.src != null) || (this.srcKey != null)) { throwImgTagSrcException(); } return TagUtils.getInstance().getActionMappingURL(action, module, pageContext, isContextRelativeSet()); } // Deal with an absolute source that has been specified if (this.src != null) { if (this.srcKey != null) { throwImgTagSrcException(); } return (this.src); } // Deal with an indirect source that has been specified if (this.srcKey == null) { throwImgTagSrcException(); } return TagUtils.getInstance().message( pageContext, getBundle(), getLocale(), this.srcKey); } /** * Return the specified src URL, modified as necessary with optional * request parameters. * * @param url The URL to be modified (or null if this url will not be used) * * @exception JspException if an error occurs preparing the URL */ protected String url(String url) throws JspException { if (url == null) { return (url); } String charEncoding = "UTF-8"; if(useLocalEncoding){ charEncoding = pageContext.getResponse().getCharacterEncoding(); } // Start with an unadorned URL as specified StringBuffer src = new StringBuffer(url); // Append a single-parameter name and value, if requested if ((paramId != null) && (paramName != null)) { if (src.toString().indexOf('?') < 0) { src.append('?'); } else { src.append("&"); } src.append(paramId); src.append('='); Object value = TagUtils.getInstance().lookup(pageContext, paramName, paramProperty, paramScope); if (value != null) src.append(TagUtils.getInstance().encodeURL(value.toString(), charEncoding)); } // Just return the URL if there is no bean to look up if ((property != null) && (name == null)) { JspException e = new JspException(messages.getMessage("getter.name")); TagUtils.getInstance().saveException(pageContext, e); throw e; } if (name == null) { return (src.toString()); } // Look up the map we will be using Object mapObject = TagUtils.getInstance().lookup(pageContext, name, property, scope); Map map = null; try { map = (Map) mapObject; } catch (ClassCastException e) { TagUtils.getInstance().saveException(pageContext, e); throw new JspException(messages.getMessage("imgTag.type")); } // Append the required query parameters boolean question = (src.toString().indexOf("?") >= 0); Iterator keys = map.keySet().iterator(); while (keys.hasNext()) { String key = (String) keys.next(); Object value = map.get(key); if (value == null) { if (question) { src.append("&"); } else { src.append('?'); question = true; } src.append(key); src.append('='); // Interpret null as "no value specified" } else if (value instanceof String[]) { String values[] = (String[]) value; for (int i = 0; i < values.length; i++) { if (question) { src.append("&"); } else { src.append('?'); question = true; } src.append(key); src.append('='); src.append(TagUtils.getInstance().encodeURL(values[i], charEncoding)); } } else { if (question) { src.append("&"); } else { src.append('?'); question = true; } src.append(key); src.append('='); src.append(TagUtils.getInstance().encodeURL(value.toString(), charEncoding)); } } // Return the final result return (src.toString()); } } libstruts1.2-java-1.2.9/src/share/org/apache/struts/taglib/html/JavascriptValidatorTag.java0000644000175000017500000007344710404045204032422 0ustar arnaudarnaud00000000000000/* * $Id: JavascriptValidatorTag.java 383908 2006-03-07 15:33:42Z niallp $ * * Copyright 2001-2005 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.struts.taglib.html; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.StringTokenizer; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.tagext.BodyTagSupport; import org.apache.commons.validator.Field; import org.apache.commons.validator.Form; import org.apache.commons.validator.ValidatorAction; import org.apache.commons.validator.ValidatorResources; import org.apache.commons.validator.Var; import org.apache.commons.validator.util.ValidatorUtils; import org.apache.struts.Globals; import org.apache.struts.action.ActionMapping; import org.apache.struts.config.ModuleConfig; import org.apache.struts.taglib.TagUtils; import org.apache.struts.util.MessageResources; import org.apache.struts.validator.Resources; import org.apache.struts.validator.ValidatorPlugIn; /** * Custom tag that generates JavaScript for client side validation based * on the validation rules loaded by the ValidatorPlugIn * defined in the struts-config.xml file. * * @version $Rev: 383908 $ $Date: 2006-03-07 15:33:42 +0000 (Tue, 07 Mar 2006) $ * @since Struts 1.1 */ public class JavascriptValidatorTag extends BodyTagSupport { /** * A Comparator to use when sorting ValidatorAction objects. */ private static final Comparator actionComparator = new Comparator() { public int compare(Object o1, Object o2) { ValidatorAction va1 = (ValidatorAction) o1; ValidatorAction va2 = (ValidatorAction) o2; if ((va1.getDepends() == null || va1.getDepends().length() == 0) && (va2.getDepends() == null || va2.getDepends().length() == 0)) { return 0; } else if ( (va1.getDepends() != null && va1.getDepends().length() > 0) && (va2.getDepends() == null || va2.getDepends().length() == 0)) { return 1; } else if ( (va1.getDepends() == null || va1.getDepends().length() == 0) && (va2.getDepends() != null && va2.getDepends().length() > 0)) { return -1; } else { return va1.getDependencyList().size() - va2.getDependencyList().size(); } } }; /** * The start of the HTML comment hiding JavaScript from old browsers. * @since Struts 1.2 */ protected static final String HTML_BEGIN_COMMENT = "\n \n"; // ----------------------------------------------------------- Properties /** * The servlet context attribute key for our resources. */ protected String bundle = Globals.MESSAGES_KEY; /** * The default locale on our server. * @deprecated This variable is no longer used. */ protected static Locale defaultLocale = Locale.getDefault(); /** * The name of the form that corresponds with the action name * in struts-config.xml. Specifying a form name places a * <script> </script> around the javascript. */ protected String formName = null; /** * formName is used for both Javascript and non-javascript validations. * For the javascript validations, there is the possibility that we will * be rewriting the formName (if it is a ValidatorActionForm instead of just * a ValidatorForm) so we need another variable to hold the formName just for * javascript usage. */ protected String jsFormName = null; /** * The line ending string. */ protected static String lineEnd = System.getProperty("line.separator"); /** * The current page number of a multi-part form. * Only valid when the formName attribute is set. */ protected int page = 0; /** * This will be used as is for the JavaScript validation method name if it has a value. This is * the method name of the main JavaScript method that the form calls to perform validations. */ protected String methodName = null; /** * Include language attribute in the <script> element. This property is * ignored in XHTML mode. * @since Struts 1.2 */ protected boolean scriptLanguage = true; /** * The static JavaScript methods will only be printed if this is set to "true". */ protected String staticJavascript = "true"; /** * The dynamic JavaScript objects will only be generated if this is set to "true". */ protected String dynamicJavascript = "true"; /** * The src attribute for html script element (used to include an external script * resource). The src attribute is only recognized * when the formName attribute is specified. */ protected String src = null; /** * The JavaScript methods will enclosed with html comments if this is set to "true". */ protected String htmlComment = "true"; /** * Hide JavaScript methods in a CDATA section for XHTML when "true". */ protected String cdata = "true"; /** * Gets the key (form name) that will be used * to retrieve a set of validation rules to be * performed on the bean passed in for validation. */ public String getFormName() { return formName; } /** * Sets the key (form name) that will be used * to retrieve a set of validation rules to be * performed on the bean passed in for validation. * Specifying a form name places a * <script> </script> tag around the javascript. */ public void setFormName(String formName) { this.formName = formName; } /** * @return Returns the jsFormName. */ public String getJsFormName() { return jsFormName; } /** * @param jsFormName The jsFormName to set. */ public void setJsFormName(String jsFormName) { this.jsFormName = jsFormName; } /** * Gets the current page number of a multi-part form. * Only field validations with a matching page numer * will be generated that match the current page number. * Only valid when the formName attribute is set. */ public int getPage() { return page; } /** * Sets the current page number of a multi-part form. * Only field validations with a matching page numer * will be generated that match the current page number. * Only valid when the formName attribute is set. */ public void setPage(int page) { this.page = page; } /** * Gets the method name that will be used for the Javascript * validation method name if it has a value. This overrides * the auto-generated method name based on the key (form name) * passed in. */ public String getMethod() { return methodName; } /** * Sets the method name that will be used for the Javascript * validation method name if it has a value. This overrides * the auto-generated method name based on the key (form name) * passed in. */ public void setMethod(String methodName) { this.methodName = methodName; } /** * Gets whether or not to generate the static * JavaScript. If this is set to 'true', which * is the default, the static JavaScript will be generated. */ public String getStaticJavascript() { return staticJavascript; } /** * Sets whether or not to generate the static * JavaScript. If this is set to 'true', which * is the default, the static JavaScript will be generated. */ public void setStaticJavascript(String staticJavascript) { this.staticJavascript = staticJavascript; } /** * Gets whether or not to generate the dynamic * JavaScript. If this is set to 'true', which * is the default, the dynamic JavaScript will be generated. */ public String getDynamicJavascript() { return dynamicJavascript; } /** * Sets whether or not to generate the dynamic * JavaScript. If this is set to 'true', which * is the default, the dynamic JavaScript will be generated. */ public void setDynamicJavascript(String dynamicJavascript) { this.dynamicJavascript = dynamicJavascript; } /** * Gets whether or not to delimit the * JavaScript with html comments. If this is set to 'true', which * is the default, the htmlComment will be surround the JavaScript. */ public String getHtmlComment() { return htmlComment; } /** * Sets whether or not to delimit the * JavaScript with html comments. If this is set to 'true', which * is the default, the htmlComment will be surround the JavaScript. */ public void setHtmlComment(String htmlComment) { this.htmlComment = htmlComment; } /** * Gets the src attribute's value when defining * the html script element. */ public String getSrc() { return src; } /** * Sets the src attribute's value when defining * the html script element. The src attribute is only recognized * when the formName attribute is specified. */ public void setSrc(String src) { this.src = src; } /** * Sets the servlet context attribute key for our resources. */ public String getBundle() { return bundle; } /** * Gets the servlet context attribute key for our resources. */ public void setBundle(String bundle) { this.bundle = bundle; } /** * Render the JavaScript for to perform validations based on the form name. * * @exception JspException if a JSP exception has occurred */ public int doStartTag() throws JspException { JspWriter writer = pageContext.getOut(); try { writer.print(this.renderJavascript()); } catch (IOException e) { throw new JspException(e.getMessage()); } return EVAL_BODY_TAG; } /** * Returns fully rendered JavaScript. * @since Struts 1.2 */ protected String renderJavascript() throws JspException { StringBuffer results = new StringBuffer(); ModuleConfig config = TagUtils.getInstance().getModuleConfig(pageContext); ValidatorResources resources = (ValidatorResources) pageContext.getAttribute( ValidatorPlugIn.VALIDATOR_KEY + config.getPrefix(), PageContext.APPLICATION_SCOPE); if (resources == null) { throw new JspException( "ValidatorResources not found in application scope under key \"" + ValidatorPlugIn.VALIDATOR_KEY + config.getPrefix() + "\""); } Locale locale = TagUtils.getInstance().getUserLocale(this.pageContext, null); Form form = resources.getForm(locale, formName); if ("true".equalsIgnoreCase(dynamicJavascript) && form == null) { throw new JspException("No form found under '" + formName + "' in locale '" + locale + "'"); } if (form != null) { if ("true".equalsIgnoreCase(dynamicJavascript)) { results.append( this.createDynamicJavascript(config, resources, locale, form)); } else if ("true".equalsIgnoreCase(staticJavascript)) { results.append(this.renderStartElement()); if ("true".equalsIgnoreCase(htmlComment)) { results.append(HTML_BEGIN_COMMENT); } } } if ("true".equalsIgnoreCase(staticJavascript)) { results.append(getJavascriptStaticMethods(resources)); } if (form != null && ("true".equalsIgnoreCase(dynamicJavascript) || "true".equalsIgnoreCase(staticJavascript))) { results.append(getJavascriptEnd()); } return results.toString(); } /** * Generates the dynamic JavaScript for the form. * @param config * @param resources * @param locale * @param form */ private String createDynamicJavascript( ModuleConfig config, ValidatorResources resources, Locale locale, Form form) throws JspException { StringBuffer results = new StringBuffer(); MessageResources messages = TagUtils.getInstance().retrieveMessageResources(pageContext, bundle, true); HttpServletRequest request = (HttpServletRequest)pageContext.getRequest(); ServletContext application = pageContext.getServletContext(); List actions = this.createActionList(resources, form); final String methods = this.createMethods(actions, this.stopOnError(config)); String formName = form.getName(); jsFormName = formName; if(jsFormName.charAt(0) == '/') { String mappingName = TagUtils.getInstance().getActionMappingName(jsFormName); ActionMapping mapping = (ActionMapping) config.findActionConfig(mappingName); if (mapping == null) { JspException e = new JspException(messages.getMessage("formTag.mapping", mappingName)); pageContext.setAttribute(Globals.EXCEPTION_KEY, e, PageContext.REQUEST_SCOPE); throw e; } jsFormName = mapping.getAttribute(); } results.append(this.getJavascriptBegin(methods)); for (Iterator i = actions.iterator(); i.hasNext();) { ValidatorAction va = (ValidatorAction) i.next(); int jscriptVar = 0; String functionName = null; if (va.getJsFunctionName() != null && va.getJsFunctionName().length() > 0) { functionName = va.getJsFunctionName(); } else { functionName = va.getName(); } results.append(" function " + jsFormName + "_" + functionName + " () { \n"); for (Iterator x = form.getFields().iterator(); x.hasNext();) { Field field = (Field) x.next(); // Skip indexed fields for now until there is a good way to handle // error messages (and the length of the list (could retrieve from scope?)) if (field.isIndexed() || field.getPage() != page || !field.isDependency(va.getName())) { continue; } String message = Resources.getMessage(application, request, messages, locale, va, field); message = (message != null) ? message : ""; // prefix variable with 'a' to make it a legal identifier results.append( " this.a" + jscriptVar++ + " = new Array(\"" + field.getKey() + "\", \"" + escapeQuotes(message) + "\", "); results.append("new Function (\"varName\", \""); Map vars = field.getVars(); // Loop through the field's variables. Iterator varsIterator = vars.keySet().iterator(); while (varsIterator.hasNext()) { String varName = (String) varsIterator.next(); Var var = (Var) vars.get(varName); String varValue = var.getValue(); String jsType = var.getJsType(); // skip requiredif variables field, fieldIndexed, fieldTest, fieldValue if (varName.startsWith("field")) { continue; } String varValueEscaped = escapeJavascript(varValue); if (Var.JSTYPE_INT.equalsIgnoreCase(jsType)) { results.append( "this." + varName + "=" + varValueEscaped + "; "); } else if (Var.JSTYPE_REGEXP.equalsIgnoreCase(jsType)) { results.append( "this." + varName + "=/" + varValueEscaped + "/; "); } else if (Var.JSTYPE_STRING.equalsIgnoreCase(jsType)) { results.append( "this." + varName + "='" + varValueEscaped + "'; "); // So everyone using the latest format doesn't need to change their xml files immediately. } else if ("mask".equalsIgnoreCase(varName)) { results.append( "this." + varName + "=/" + varValueEscaped + "/; "); } else { results.append( "this." + varName + "='" + varValueEscaped + "'; "); } } results.append(" return this[varName];\"));\n"); } results.append(" } \n\n"); } return results.toString(); } private String escapeQuotes(String in) { if (in == null || in.indexOf("\"") == -1) { return in; } StringBuffer buffer = new StringBuffer(); StringTokenizer tokenizer = new StringTokenizer(in, "\"", true); while (tokenizer.hasMoreTokens()) { String token = tokenizer.nextToken(); if (token.equals("\"")) { buffer.append("\\"); } buffer.append(token); } return buffer.toString(); } /** *

      Backslash-escapes the following characters from the input string: * ", ', \, \r, \n.

      * *

      This method escapes characters that will result in an invalid * Javascript statement within the validator Javascript.

      * * @param str The string to escape. * @return The string s with each instance of a double quote, * single quote, backslash, carriage-return, or line feed escaped * with a leading backslash. * * @since Struts 1.2.8 */ private String escapeJavascript(String str) { if (str == null) { return null; } int length = str.length(); if (length == 0) { return str; } // guess at how many chars we'll be adding... StringBuffer out = new StringBuffer(length + 4); // run through the string escaping sensitive chars for (int i=0; i < length; i++) { char c = str.charAt(i); if (c == '"' || c == '\'' || c == '\\' || c == '\n' || c == '\r') { out.append('\\'); } out.append(c); } return out.toString(); } /** * Determines if validations should stop on an error. * @param config The ModuleConfig used to lookup the * stopOnError setting. * @return true if validations should stop on errors. */ private boolean stopOnError(ModuleConfig config) { Object stopOnErrorObj = pageContext.getAttribute( ValidatorPlugIn.STOP_ON_ERROR_KEY + '.' + config.getPrefix(), PageContext.APPLICATION_SCOPE); boolean stopOnError = true; if (stopOnErrorObj instanceof Boolean) { stopOnError = ((Boolean) stopOnErrorObj).booleanValue(); } return stopOnError; } /** * Creates the JavaScript methods list from the given actions. * @param actions A List of ValidatorAction objects. * @param stopOnError If true, behaves like released version of struts 1.1 * and stops after first error. If false, evaluates all validations. * @return JavaScript methods. */ private String createMethods(List actions, boolean stopOnError) { StringBuffer methods = new StringBuffer(); final String methodOperator = stopOnError ? " && " : " & "; Iterator iter = actions.iterator(); while (iter.hasNext()) { ValidatorAction va = (ValidatorAction) iter.next(); if (methods.length() > 0) { methods.append(methodOperator); } methods.append(va.getMethod()) .append("(form)"); } return methods.toString(); } /** * Get List of actions for the given Form. * @param resources * @param form * @return A sorted List of ValidatorAction objects. */ private List createActionList(ValidatorResources resources, Form form) { List actionMethods = new ArrayList(); Iterator iterator = form.getFields().iterator(); while (iterator.hasNext()) { Field field = (Field) iterator.next(); for (Iterator x = field.getDependencyList().iterator(); x.hasNext();) { Object o = x.next(); if (o != null && !actionMethods.contains(o)) { actionMethods.add(o); } } } List actions = new ArrayList(); // Create list of ValidatorActions based on actionMethods iterator = actionMethods.iterator(); while (iterator.hasNext()) { String depends = (String) iterator.next(); ValidatorAction va = resources.getValidatorAction(depends); // throw nicer NPE for easier debugging if (va == null) { throw new NullPointerException( "Depends string \"" + depends + "\" was not found in validator-rules.xml."); } if (va.getJavascript() != null && va.getJavascript().length() > 0) { actions.add(va); } else { iterator.remove(); } } Collections.sort(actions, actionComparator); return actions; } /** * Release any acquired resources. */ public void release() { super.release(); bundle = Globals.MESSAGES_KEY; formName = null; jsFormName = null; page = 0; methodName = null; staticJavascript = "true"; dynamicJavascript = "true"; htmlComment = "true"; cdata = "true"; src = null; } /** * Returns the opening script element and some initial javascript. */ protected String getJavascriptBegin(String methods) { StringBuffer sb = new StringBuffer(); String name = jsFormName.replace('/', '_'); // remove any '/' characters name = jsFormName.substring(0, 1).toUpperCase() + jsFormName.substring(1, jsFormName.length()); sb.append(this.renderStartElement()); if (this.isXhtml() && "true".equalsIgnoreCase(this.cdata)) { sb.append("//= 0) { sb.append(" return (formValidationResult); \n"); } else { //Making Sure that Bitwise operator works: sb.append(" return (formValidationResult == 1); \n"); } } sb.append(" } \n"); sb.append(" } \n\n"); return sb.toString(); } protected String getJavascriptStaticMethods(ValidatorResources resources) { StringBuffer sb = new StringBuffer(); sb.append("\n\n"); Iterator actions = resources.getValidatorActions().values().iterator(); while (actions.hasNext()) { ValidatorAction va = (ValidatorAction) actions.next(); if (va != null) { String javascript = va.getJavascript(); if (javascript != null && javascript.length() > 0) { sb.append(javascript + "\n"); } } } return sb.toString(); } /** * Returns the closing script element. */ protected String getJavascriptEnd() { StringBuffer sb = new StringBuffer(); sb.append("\n"); if (!this.isXhtml() && "true".equals(htmlComment)){ sb.append(HTML_END_COMMENT); } if (this.isXhtml() && "true".equalsIgnoreCase(this.cdata)) { sb.append("//]]>\r\n"); } sb.append("\n\n"); return sb.toString(); } /** * Constructs the beginning <script> element depending on XHTML * status. * @since Struts 1.2 */ protected String renderStartElement() { StringBuffer start = new StringBuffer(" libstruts1.2-java-1.2.9/web/example/base.css0000644000175000017500000000127010404045172021315 0ustar arnaudarnaud00000000000000/** * Base stylesheet * @version $Revision: 1.2 $ $Date: 2004-03-07 20:22:52 +0000 (Sun, 07 Mar 2004) $ */ body { background-color:#FFFFFF; color:#000000; link:000066; visited:#660066; active:#33CCCC; } A:hover { color: #FF0000; } h1 { font-family: Arial,Helvetica,sans-serif; } h2 { font-family: Arial,Helvetica,sans-serif; } h3 { font-family: Arial,Helvetica,sans-serif; } h4 { font-family: Arial,Helvetica,sans-serif; } h5 { font-family: Arial,Helvetica,sans-serif; } h6 { font-family: Arial,Helvetica,sans-serif; } font.hint { font-style:italic; font-size:80%; font-family:Arial,Helvetica,sans-serif; font-weight:bold; text-align:left; }libstruts1.2-java-1.2.9/web/example/changePassword.jsp0000644000175000017500000000070410404045226023360 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib uri="/tags/struts-bean" prefix="bean" %> <%@ taglib uri="/tags/struts-html" prefix="html" %> <bean:message key="change.title"/> libstruts1.2-java-1.2.9/web/example/footer.jsp0000644000175000017500000000030510404045216021702 0ustar arnaudarnaud00000000000000<%@ taglib uri="/tags/struts-bean" prefix="bean" %> <%@ taglib uri="/tags/struts-html" prefix="html" %>

      libstruts1.2-java-1.2.9/web/example/index.jsp0000644000175000017500000000205010404045222021507 0ustar arnaudarnaud00000000000000<%@ taglib uri="/tags/struts-logic" prefix="logic" %> <%-- Redirect default requests to Welcome action. By using a redirect, the user-agent will change address to match the path of our Welcome action. /* * $Header: /home/cvs/jakarta-struts/web/example/index.jsp,v 1.22 2004/03/12 05:19:45 husted Exp $ * $Revision: 1.22 $ * $Date: 2004-03-12 05:19:46 +0000 (Fri, 12 Mar 2004) $ * * Copyright 2000-2004 Apache Software Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ --%> libstruts1.2-java-1.2.9/web/example/logon.jsp0000644000175000017500000000244110404045212021521 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib uri="/tags/struts-bean" prefix="bean" %> <%@ taglib uri="/tags/struts-html" prefix="html" %> <bean:message key="logon.title"/>
      :
      :
      libstruts1.2-java-1.2.9/web/example/mainMenu.jsp0000644000175000017500000000130010404045222022146 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib uri="/tags/app" prefix="app" %> <%@ taglib uri="/tags/struts-bean" prefix="bean" %> <%@ taglib uri="/tags/struts-html" prefix="html" %> <bean:message key="mainMenu.title"/>

      libstruts1.2-java-1.2.9/web/example/staticJavascript.jsp0000644000175000017500000000046410404045212023724 0ustar arnaudarnaud00000000000000<%@ page language="java" %> <%-- set document type to Javascript (addresses a bug in Netscape according to a web resource --%> <%@ page contentType="application/x-javascript" %> <%@ taglib uri="/tags/struts-html" prefix="html" %> libstruts1.2-java-1.2.9/web/example/subscription.jsp0000644000175000017500000000733210404045224023136 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib uri="/tags/app" prefix="app" %> <%@ taglib uri="/tags/struts-bean" prefix="bean" %> <%@ taglib uri="/tags/struts-html" prefix="html" %> <%@ taglib uri="/tags/struts-logic" prefix="logic" %> <bean:message key="subscription.title.create"/> <bean:message key="subscription.title.delete"/> <bean:message key="subscription.title.edit"/>
      :
      :
      :
      :
      :
      :
       
      libstruts1.2-java-1.2.9/web/example/tour.html0000644000175000017500000016400610404045204021553 0ustar arnaudarnaud00000000000000 A Walking Tour of the Struts MailReader Demonstration Application

      A Walking Tour of the Struts MailReader Demonstration Application

      This article is meant to introduce a new user to Struts by "walking through" an application. See the Struts Users Guide and Strut's API for more documentation.

      The MailReader application is based on the 1.2.0 build of Struts. To follow along, you should install the MailReader application on your own development workstation (e.g. localhost).

      The article assumes the reader has a basic understanding of the Java language, JavaBeans, web applications, and JavaServer Pages. For background on these technologies, see the Preface to the Struts User Guide.



      The Struts distribution bundles four applications: struts-documentation, tiles-documentation, struts-example, and struts-examples. This document walks through the struts-example, also known as the "MailReader Demonstration Application".

      The premise of the MailReader is that it is the first iteration of a portal application. This version allows users to register themselves and maintain a set of accounts with various mail servers. When completed, the application would let users read mail from their accounts.

      The MailReader application demonstrates registering with an application, logging into an application, maintaining a master record, and maintaining child records. This document walks through the JSP pages, Struts Java classes, and Struts configuration elements needed to do these things.

      Note that for compatability and ease of deployment, the MailReader uses "application-based" authorization. However, use of the standard Java Authentication and Authorization Service (JAAS) is recommended for most applications. (See the Preface to the Struts User Guide for more about authentification technologies.)

      The walkthrough starts with how the initial welcome page is displayed, and then steps through logging in, adding and editing subscriptions, and creating a new registration.

      index.jsp

      A web application, like any other web site, can specify a list of welcome pages. When you open a web application without specifying a particular page, a welcome page is used by default.

      Struts allows developers to manage an application through "virtual pages" called actions. An accepted practice in Struts is to never link directly to server pages, but only to these actions. The actions are listed in a configuration file. By linking to actions, developers can "rewire" an application without editing the server pages.

      "Link actions not pages."

      Unfortunately, actions cannot be specified as a welcome page. Since there can be a list of pages, the web server looks for each page on the list before selecting one. The web server doesn't see actions as pages and will never select one as a welcome page. So, in the case of a welcome page, how do we follow the Struts best practice of navigating through actions rather than pages?

      One solution is to use a server page to "bootstrap" a Struts action. A Java web application recognizes the idea of "forwarding" from one page to another page (or action). We can register the usual "index.jsp" as the welcome page and have it forward to a "Welcome" action. Here's the MailReader's index.jsp:


      <%@ taglib uri="/tags/struts-logic" prefix="logic" %>
      <logic:redirect action="/Welcome"/>
      

      At the top of the page, we import the "struts-logic" JSP tag library. (Again, see the Preface to the Struts User Guide for more about the technologies underlying Struts.) The page itself consists of a single tag that redirects to the "Welcome" action. The tag inserts the actual web address for the redirect when the page is rendered. But, where does the tag find the actual address to insert?

      The list of actions, along with other Struts components, are registered through one or more Struts configuration files. The configuration files are written as XML documents and processed when the application starts. If we just wanted to forward to the welcome page, we could use a configuration element like this:


      <!-- Display welcome page -->
      <action path="/Welcome" forward="/welcome.jsp" />
      

      If someone asked for the Welcome action ("/Welcome.do"), the welcome.jsp page would be displayed in return.

      WelcomeAction.java

      But if we peek at the configuration file for the MailReader, we find a slightly more complicated XML element for the Welcome action:


      <!-- Display welcome page -->
      <action path="/Welcome"
        type="org.apache.struts.webapp.example.WelcomeAction">
        <forward name="failure" path="/Error.jsp" />
        <forward name="success" path="/welcome.jsp" />
      </action>
      

      Here, the "WelcomeAction" Java class executes whenever someone asks for the Welcome action. As it completes, the Action class can select which page is displayed. Two pages the class can select here are "Error.jsp" and "welcome.jsp". But the Action class doesn't need to know the path to the pages. The class can select them just using the names "success" or "failure".

      OK ... but why would a WelcomeAction want to choose between success and failure?

      The MailReader application retains a list of users along with their email accounts. The application stores this information in a database. If the application can't connect to the database, the application can't do its job. So before displaying the welcome page, the class checks to see if the database is available. The MailReader is also an internationalized application. So, the WelcomeAction checks to see if the message resources are available too. If both resources are available, the class forwards to the "success" path. Otherwise, it forwards to the "failure" path so that the appropriate error messages can be displayed.

      MemoryDatabasePlugIn.java

      The database is exposed to the application as an object stored in application scope. The database object is based on an interface. Different implementations of the database could be loaded without changing the rest of the application. But how is the database object loaded in the first place?

      One section of the Struts configuration is devoted to "PlugIns". When a Struts application loads, it also loads whatever PlugIns are specified in its configuration. The PlugIn interface is quite simple, and you can use PlugIns to do anything that might need to be done when your application loads. The PlugIn is also notified when the application shuts down, so you can release any allocated resources.


      <plug-in className="org.apache.struts.webapp.example.memory.MemoryDatabasePlugIn">
        <set-property property="pathname" value="/WEB-INF/database.xml"/>
      </plug-in>
      

      By default, the MailReader application loads a "MemoryDatabase" implementation of the UserDatabase. MemoryDatabase stores the database contents as a XML document, which is parsed by the Digester and loaded as a set of nested hashtables. The outer table is the list of user objects, each of which has its own inner hashtable of subscriptions. When you register, a user object is stored in this hashtable ... and when you login, the user object is stored within the session context.

      The database comes seeded with a sample user. If you check the database.xml file under WEB-INF, you'll see the sample user described as:


      <user username="user" fromAddress="John.User@somewhere.com" fullName="John Q. User" password="pass">
        <subscription host="mail.hotmail.com" autoConnect="false" password="bar" type="pop3" username="user1234">
        </subscription>
        <subscription host="mail.yahoo.com" autoConnect="false" password="foo" type="imap" username="jquser">
        </subscription>
      </user>
      

      This creates a registration record for "John Q. User", with the detail for his hotmail account (or "subscription").

      MessageResources.properties

      Another section of the Struts configuration loads the message resources for the application. If you change a message in the resource, and then reload the application, the change will appear throughout the application. If you provide message resources for additional locales, you can internationalize your application.


      <message-resources parameter="org.apache.struts.webapp.example.MessageResources" />
      

      This is a standard properties text file. Here are the entries used by the welcome page:


      index.heading=MailReader Demonstration Application Options
      index.logon=Log on to the MailReader Demonstration Application
      index.registration=Register with the MailReader Demonstration Application
      index.title=MailReader Demonstration Application (Struts 1.2.1-dev)
      index.tour=A Walking Tour of the MailReader Demonstration Application
      

      The MailReader application uses a second set of message resources for non-text elements. The "key" element can be used to access this resource bundle rather than the default bundle.


      <message-resources parameter="org.apache.struts.webapp.example.AlternateMessageResources" key="alternate" />
      

      welcome.jsp

      After confirming that the necessary resources exist, the WelcomeAction forwards to the welcome.jsp page.


      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <%@ taglib uri="/tags/struts-bean" prefix="bean" %>
      <%@ taglib uri="/tags/struts-html" prefix="html" %>
      
      <html>
      <head>
      <title><bean:message key="index.title"/></title>
      <link rel="stylesheet" type="text/css" href="base.css" />
      </head>
      
      <h3><bean:message key="index.heading"/></h3>
      <ul>
      <li><html:link action="/EditRegistration?action=Create">
      <bean:message key="index.registration"/></html:link></li> <li><html:link action="/Logon"><bean:message key="index.logon"/></html:link></li> </ul> <h3>Change Language</h3> <ul> <li><html:link action="/Locale?language=en">English</html:link></li> <li><html:link action="/Locale?language=ja" useLocalEncoding="true">Japanese</html:link></li> <li><html:link action="/Locale?language=ru" useLocalEncoding="true">Russian</html:link></li> </ul> <hr /> <p><html:img bundle="alternate" pageKey="struts.logo.path" altKey="struts.logo.alt"/></p> <p><html:link action="/Tour"><bean:message key="index.tour"/></html:link></p> </body> </html>

      At the top of the welcome.jsp page, there are several directives that load the Struts tag libraries. These are just the usual red tape that goes with any JSP file. The rest of the page demonstrates three Struts JSP tags: "bean:message", "html:link", and "html:img".

      The bean:message tag inserts a message from the MessageResources file. The MailReader comes with support for three locales: English (the default), Russian, and Japanese. If the Struts locale setting is changed for a user, the bean:message tag will render messages from that locale's property bundle instead.

      The html:link tag does double duty. First, you can refer to an action or forward stored in the Struts configuration, and the tag will insert the corresponding path when the page is rendered. This makes it easy to "rewire" an application without touching all the pages. Second, the link tag will "URL encode" the hyperlink to maintain the client session. Your application can maintain client state without requiring cookies.

      If you turn cookies off in your browser, and then reload your browser and this page, you will see the links with the Java session id information attached. (If you are using Internet Explorer and try this, be sure you reset cookies for the appropriate security zone, and that you disallow "per-session" cookies.)

      The html:img tag renders an img tag. When necessary, the src URI is encoded as it is with the link tag. In this case, the tag inserts the src path from the "alternate" MessageResource bundle, along with the text for the alt element.

      In the span of a single request, Struts has done quite a bit already:

      • Confirmed that required objects were created during initialization.
      • Written all the page headings and labels from internationalized message resources.
      • Automatically URL-encoded paths as needed.

      When rendered, the welcome page lists two menu options: one to register with the application and one to login in (if you have already registered). Let's follow the login link first.

      logon.jsp

      If you choose the logon link, the Logon action forwards control to the logon.jsp page. The logon page displays a form that accepts a username and password. You can use the default username and password to logon (user and pass). Note that both the username and password are case sensitive. Better yet, try omitting or misspelling the username and password in various combinations and see how the application reacts.

      Here's how the login.jsp is coded:


      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <%@ taglib uri="/tags/struts-bean" prefix="bean" %>
      <%@ taglib uri="/tags/struts-html" prefix="html" %>
      
      <html:xhtml/>
      <html>
      <head>
      <title><bean:message key="logon.title"/></title>
      </head>
      
      <html:errors/>
      
      <html:form action="/SubmitLogon" focus="username"
               onsubmit="return validateLogonForm(this);">
      <table border="0" width="100%">
      
        <tr>
          <th align="right">
            <bean:message key="prompt.username"/>:
          </th>
          <td align="left">
            <html:text property="username" size="16" maxlength="18"/>
          </td>
        </tr>
      
        <tr>
          <th align="right">
            <bean:message key="prompt.password" bundle="alternate"/>:
          </th>
          <td align="left">
            <html:password property="password" size="16" maxlength="18"
                          redisplay="false"/>
          </td>
        </tr>
      
        <tr>
          <td align="right">
            <html:submit property="Submit" value="Submit"/>
          </td>
          <td align="left">
            <html:reset/>
          </td>
        </tr>
      
      </table>
      
      </html:form>
      
      <html:javascript formName="LogonForm"
              dynamicJavascript="true"
               staticJavascript="false"/>
      <script language="Javascript1.1" src="staticJavascript.jsp"></script>
      
      <jsp:include page="footer.jsp" />
      </body>
      </html>
      

      We saw some of these tags on the welcome page. Let's focus on the new tags.

      The first new tag on the logon page is "html:errors". The credentials you entered are processed by a "LogonAction" class. If the credentials are incorrect, the LogonAction posts an appropriate error message and forwards back to the input page. If the html:errors tag sees that one or more messages were posted, the tag ouputs the messages to the page. The text of the messages can be specified in the MessageResource bundle, making them easy to internationalize.

      The second new tag is "html:form". This tag renders a html form tag. The "action" element tells the tag to use "SubmitLogon.do" for the form's action. The "focus" attribute tells the tag to generate a little Javascript after the form that sets its focus to the "username" field. The "onsubmit" attribute tells the form to run a Javascript when the form is submitted. (Just like the corresponding attribute on the standard form tag.)

      Within the html:form tag, we see four other new tags: "html:text", "html:password", "html:submit", and "html:reset".

      The html:text tag renders a "input type=text" tag. The "property" attribute becomes the input tag's "name" attribute.

      The html:password tag renders a "input type=password" tag. The "redisplay" attribute tell the tag not to render the password back into the file, if the submit fails. The html:submit and html:reset tags render buttons of the corresponding types.

      Following the form is a "html:javascript" tag. This tag works with the Struts Validator component to generate a JavaScript that can validate input before it is submitted to the LogonAction.

      Most of these tags have many more options than the ones we use in this application. For the complete documentation for each tag, see the Tag Developers Guides in the Struts documentation bundle.

      But, how do these tags know so much? How does the Javascript tag know what scripts to write? How do the text and password tags know what values to redisplay?

      For the answers, we need to turn to the Struts configuration files, "struts-config.xml" and "validation.xml".

      struts-config.xml

      In the struts-config.xml file, we find an element for the "/SubmitLogon" action


      <!-- Process a user logon -->
      <action    path="/SubmitLogon"
                        type="org.apache.struts.webapp.example.LogonAction"
                        name="LogonForm"
                       scope="request"
                       input="logon">
       <exception
                         key="expired.password"
                        type="org.apache.struts.webapp.example.ExpiredPasswordException"
                        path="/ExpiredPassword.do"/>
             </action>
      

      We saw the path and type attributes in the Welcome action. Let's look at the new attributes.

      The "name" attribute specifies something Struts calls an "ActionForm". The ActionForm buffers input from a form and delivers it to an Action class as an object. The ActionForm can also validate the input. If validation fails, the tags can rewrite the input values from the ActionForm.

      The ActionForms are defined in the "formbeans" section of the configuration file. Here's the formbean element for the "LogonForm".


      <form-bean       name="LogonForm"
                       type="org.apache.struts.validator.DynaValidatorForm">
                       <form-property name="username" type="java.lang.String"/>
                       <form-property name="password" type="java.lang.String"/>
      </form-bean>
      

      ActionForms can be "conventional" or "dynamic". Here, we are using a dynamic ActionForm. Rather than cobble up an actual JavaBean class, we specify the properties the ActionForm can accept in the configuration file. If the property is not specified here, it is not captured, validated, or passed up to the Action class.

      Struts creates the ActionForms automatically. The "scope" attribute in the action element tells the controller wether to store the ActionForm in the request or in the user's session.

      The Struts best practice is to use request scope for single-page forms that contain all the properties needed by the Action. There is usually no need to maintain form data across requests.

      Struts can also validate the ActionForm automatically. If validation fails, Struts looks for the forward specified by the "input" attribute. In this case, the "logon" forward sends control back to the input.jsp page.


      <forward name="logon" path="/Logon.do"/>
      

      Within the logon action element is another new element, "exception". When a user logons on, it's possible that an "ExpiredPasswordException" will be thrown. Should this happen, Struts will capture the exception and send control to the "ExpiredPassword" action.

      validations.xml

      In the logon.jsp, we mentioned that the html:javascript tag confers with the Struts Validator components. The Validator is configured through another XML document, the "validation.xml". Here's the element for our LogonForm:


      <form name="LogonForm">
      
              <field property="username"
                              depends="required">
                      <arg0   key="prompt.username"/>
              </field>
      
              <field property="password"
                              depends="required, minlength,maxlength">
                      <arg0   key="prompt.password"/>
                      <arg1   key="${var:minlength}" name="minlength"
                         resource="false"/>
                      <arg2   key="${var:maxlength}" name="maxlength"
                         resource="false"/>
                      <var>
                              <var-name>maxlength</var-name>
                              <var-value>16</var-value>
                      </var>
                      <var>
                              <var-name>minlength</var-name>
                              <var-value>3</var-value>
                      </var>
              </field>
      
      </form>
      

      The field elements correspond to the ActionForm properties. The "username" field element says it depends on the "required" validator. If the username is blank or absent, validation will fail and an error message is automatically generated.

      The "password" field (or property) is also required. In addition, it must also pass the "maxlength" and "minlength" validations. Here, the minimum length is three characters and the maximum length is sixteen. If the length of the password doesn't meet these criteria, a corresponding error message is generated. Of course, the messages are generated from the MessageResource bundles and are easy to localize.

      LogonAction.java

      If validation passes, the LogonForm object is forwarded to the LogonAction. The LogonAction interacts with the database to see if the credentials are valid. If so, the user is logged on, and control passes to the "success" forward. Otherwise, control is forwarded to the input page and the list of error messages displayed.

      Here's the LogonAction (sans comments):


      package org.apache.struts.webapp.example;
      import ...
      
      public final class LogonAction extends BaseAction {
      
          private static String USERNAME = "username";
          private static String PASSWORD = "password";
      
          User getUser(UserDatabase database, String username,
                       String password, ActionMessages errors)
                       throws ExpiredPasswordException {
      
              User user = null;
              if (database == null){
                  errors.add(
                      ActionMessages.GLOBAL_MESSAGE,
                      new ActionMessage("error.database.missing"));
              }
              else {
                  user = database.findUser(username);
                  if ((user != null) && !user.getPassword().equals(password)) {
                      user = null;
                  }
                  if (user == null) {
                      errors.add(
                          ActionMessages.GLOBAL_MESSAGE,
                          new ActionMessage("error.password.mismatch"));
                  }
              }
      
              return user;
      
          }
      
          void SaveUser(HttpServletRequest request, User user) {
      
              HttpSession session = request.getSession();
      
              session.setAttribute(Constants.USER_KEY, user);
              if (log.isDebugEnabled()) {
                  log.debug(
                      "LogonAction: User '"
                          + user.getUsername()
                          + "' logged on in session "
                          + session.getId());
              }
      
          }
      
          public ActionForward execute(
              ActionMapping mapping,
              ActionForm form,
              HttpServletRequest request,
              HttpServletResponse response)
              throws Exception {
      
              UserDatabase database = getUserDatabase(request);
              String username = (String) PropertyUtils.getSimpleProperty(form,
                      USERNAME);
              String password = (String) PropertyUtils.getSimpleProperty(form,
                      PASSWORD);
              ActionMessages errors = new ActionMessages();
      
              User user = getUser(database,username,password,errors);
      
              SaveUser(request,user);
      
              if (!errors.isEmpty()) {
                  this.saveErrors(request, errors);
                  return (mapping.getInputForward());
              }
      
              return (findSuccess(mapping));
      
          }
      

      MainMenu.do and mainMenu.jsp

      On a successful logon, the Main Menu page displays. If you logged in using the default account, the page title should be "Main Menu Options for John Q. User". Below this legend should be two links:

      • Edit your user registration profile
      • Log off MailReader Demonstration Application

      If you check the address shown by your browser, you will see that it shows "/SubmitLogon.do" not "/MainMenu.do". The Java servlet platform supports the idea of server-side forwards. When control passed from the SubmitLogon action to the MainMenu action, everything occured server-side. All the browser knows is that we are looking at the result of submitting a form to "/LogonSubmit.do", so that's the address that shows. It doesn't know control passed from one action to another. The difference between server-side forwards and client-side redirects is subtle and often confuses new developers.

      If you change the address to "/MainMenu.do" and press enter, the same page will display again.

      Here's the JSP source for the "MainMenu" action and the "mainMenu.jsp".


      <action path="/MainMenu" forward="/mainMenu.jsp"/>

      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <%@ taglib uri="/tags/app" prefix="app" %>
      <%@ taglib uri="/tags/struts-bean" prefix="bean" %>
      <%@ taglib uri="/tags/struts-html" prefix="html" %>
      <app:checkLogon/>
      <html>
      <head>
      <title><bean:message key="mainMenu.title"/></title>
      <link rel="stylesheet" type="text/css" href="base.css" />
      </head>
      <h3><bean:message key="mainMenu.heading"/> <bean:write name="user" property="fullName" /></h3>
      <ul>
      <li><html:link action="/EditRegistration?action=Edit"><bean:message key="mainMenu.registration"/></html:link></li>
      <li><html:link forward="logoff"><bean:message key="mainMenu.logoff"/></html:link></li>
      </ul>
      </body>
      </html>

      To implement dispatch behaviour in an Action class, * create your custom Action as follows, along with the methods you * require (and optionally "cancelled" and "unspecified" methods):


    If you check the source for mainMenu.jsp, you will find two new tags: "app:checkLogon" and "bean:write". Let's look at the bean tag first.

    When control passed through the LogonAction, it retrieved a "User" object from the database and stored a reference in "session" scope. This object is a JavaBean with several properties. One property is "fullName". The bean:write tag can find the User bean and print the fullName property for us.

    But how can the page be sure that we are logged in and that the User object exists?

    At the top of the page, above the "html" tag, is the other new tag, checkLogon. This tag, true to its name, checks to see of the user is logged on. If not, the tag forwards to the LogonAction. Let's have a look:


    package org.apache.struts.webapp.example;
    import ...
    
    public final class CheckLogonTag extends TagSupport {
    
        private String name = Constants.USER_KEY;
        private static String LOGIN_PATH = "/Logon.do";
        private String page = LOGIN_PATH;
    
        public int doStartTag() throws JspException {
    	   return (SKIP_BODY);
        }
    
        public int doEndTag() throws JspException {
        	boolean valid = false;
        	HttpSession session = pageContext.getSession();
        	if ((session != null) && (session.getAttribute(name) != null)) {
        	    valid = true;
            }
            if (valid) {
                return (EVAL_PAGE);
            } else {
                ModuleConfig config =
                    (ModuleConfig) pageContext.getServletContext().getAttribute(
                        org.apache.struts.Globals.MODULE_KEY);
    
                    try {
                        pageContext.forward(config.getPrefix() + page);
                    } catch (ServletException e) {
                        throw new JspException(e.toString());
                    } catch (IOException e) {
                        throw new JspException(e.toString());
                    }
    
                return (SKIP_PAGE);
            }
        }
    
        public void release() {
            super.release();
            this.name = Constants.USER_KEY;
            this.page = LOGIN_PATH;
        }
    }

    As tags go, CheckLogon is quite simple. It takes no attributes. It's just hardwired to check for a User object in session scope and forward to the LogonAction if the object is missing.

    Simple but effective. Try following the logout link and then putting in the "/MainMenu.do" address by hand. If you do, the tag will automatically forward you to the logon page. For any page that requires a login, we simply need to add a checkLogon tag at the top (before any of the page is written).

    Many Struts developers would frown on the CheckLogon tag solution. They might argue that a page should not need to know about logons. We shouldn't rely on people remembering to put a CheckLogon tag on every protected page. And "they" would be right! We do recommend that most applications use standard JAAS. Perhaps in the next iteration, the MailReader developers will do just that. But for now, the CheckLogon tag is a simple solution to a simple problem.

    The other links we've seen have either gone directly to a JSP file, or to a Struts action path, like Login.do. The "Edit your user registration profile" link is a little different, since it also uses a parameter, as in EditRegistration.do?action=Edit. When the Struts ActionServlet processes this link, it will ignore the parameter for the purpose of matching the request, but still pass the parameter along to action's object.

    This means that in Struts, an action object must be able to handle every valid parameter for it's base path. (In the Example, EditRegistration must handle both Edit and Create.)

    You may want to check for invalid parameters too. (And be careful of differences in case if your comparisons are not case insensitive!)

    If you check the struts-config.xml, you'll see that the EditRegistration action is mapped to the (surprise again!), the EditRegistrationAction; it uses a RegistrationForm bean, and registration.jsp for input.

    <!-- Registration form bean -->
    <form-bean name="RegistrationForm"
    type="org.apache.struts.webapp.example.RegistrationForm"/>

    <!-- Edit user registration -->
    <action path="/EditRegistration"
    type="org.apache.struts.webapp.example.EditRegistrationAction"
    name="RegistrationForm"
    scope="request"
    validate="false"
    input="/registration.jsp">
    <forward name="success" path="/registration.jsp"/>
    </action>

    Hint: Consistent naming conventions, like the ones used throughout the Example, make applications much easier to write and understand. Save your creativity for the things that matter, and follow an established standard for source code formatting, like the Elements of Java Style.

    EditRegistrationAction.java

    Many objects in an application may do double-duty. For example, EditRegistrationAction not only lets you update a registration, but is also used to create a new one. Which task the object performs is determined by the action passed to it. In the case of EditRegistrationAction, it can either edit or create a registration, the default being create if a task is not specified. To select between tasks, simply add ?create or ?edit to the hyperlink or form action.

    Like most classes in the example application, editRegistration makes good use of the log to track it's progress. Note that ActionServlet has had a new log method added since the Example was written. You can now specify both the message and a minimum logging (or debug) level. For more, see the Javadoc in your struts-documentation application.

    registration.jsp and RegistrationForm.java

    If you follow the "Edit your user registration profile" link from the mainMenu, we will finally reach the heart of the Example application, the registration page. This page displays everything the Example application knows about you (or at least your login), while demonstrating several interesting techniques.

    You'll remember that mainMenu.jsp wanted to be sure that everyone was logged in, and used the CheckLogin tag to enforce that. The registration.jsp is a little different. First it uses a Struts logic tag to see if the task at hand is to register a new User. If not (e.g. action != "Create"), the logic tag exposes a CheckLoginTag to be sure we have a user (and therefore a registration) to edit.

    <logic:equal
    name="RegistrationForm"
    property="action"
    scope="request"
    value="Edit"
    >
    <app:checkLogon/>
    </logic:equal>

    Note that the Struts html:form tag will refer to properties set by struts-config.xml and automatically create a RegistrationForm bean if one is not present. However, that does not happen until the form tag is processed within the page. Since this block appears before the html:form tag, a runtime error is exposed if you try to access registration.jsp directly (rather then going through the EditRegistration.do action).

    registation.jsp continues to use logic tags throughout the page so that a single JSP can be used to perform more than one task. For example, if you are editing the form (action == "Edit"), the page inserts your username from the RegistrationForm bean. If you are new user (action == "Create"), the page creates an empty field, so you can pick your username.

    The Struts logic tags are a very convenient way to express application logic within your pages. This prevents user error and reduces the number of JSPs your application needs to maintain, among other benefits.

    The page also uses logic tags to display a list of subscriptions for the given user. If the user enters this page with an edit action in the request context, the lower part of the page listing the subscriptions is exposed by this logic tag:

    <logic:equal
    name="RegistrationForm"
    property="action"
    scope="request"
    value="Edit"
    >

    Otherwise, the page just contains the top portion -- a blank data-entry form for creating the user's registration.

    logic:iterate

    Beside making the usual conditional tests, you can also use logic tags to forward control to other actions, to redirect control to another path, and to iterate over collections. The registration page includes a good example of using the logic:iterate tag to display the user's subscriptions.

    The subscriptions are stored in a hashtable object, which is in turn stored in the user object. So to display each subscription, we have to reach into the user object, and loop through the members of the subscription collection. Using the iterate tag, this couldn't be easier.

    <logic:iterate name="user" property="subscriptions" id="subscription">
    <!-- block to repeat -->
    </logic:iterate>

    The three parameters to the iterate tag ( name, property, and id) tell it to

    1. Check this context for an attribute (e.g. object) named "user",
    2. Snag the property of user named "subscriptions",
    3. In the block to iterate, use "subscription" (singular) as the name for each member of the collection.

    So, to list the host for each subscription in a HTML unordered list, we could write:

    <ul>
    <logic:iterate name="user" property="subscriptions" id="subscription">
    <li>
    <bean:write name="subscription" property="host" filter="true" />
    </li>
    </logic:iterate>
    </ul>

    This is another good example of how Struts works with the standard JSP tags, like bean. The filter option says to use convert HTML commands to their character entity. So a < would be output in the HTML as &lt;.

    In registration.jsp, iterate is used to create a menu of subscriptions, each linked with an edit and delete action.

    <logic:iterate id="subscription" name="user" property="subscriptions">
    <tr>
    <td align="left">
    <bean:write name="subscription" property="host" filter="true"/>
    </td>
    <td align="left">
    <bean:write name="subscription" property="username" filter="true"/>
    </td>
    <td align="center">
    <bean:write name="subscription" property="type" filter="true"/>
    </td>
    <td align="center">
    <bean:write name="subscription" property="autoConnect"/>
    </td>
    <td align="center">
    <app:linkSubscription page="/EditSubscription.do?action=Delete">
    <bean:message key="registration.deleteSubscription"/>
    </app:linkSubscription>
    <app:linkSubscription page="/EditSubscription.do?action=Edit">
    <bean:message key="registration.EditSubscription"/>
    </app:linkSubscription>
    </td>
    </tr>
    </logic:iterate>

    The collection in an iterate tag can be any of the following: an array of objects, an Iterator, a Collection (which includes Lists, Sets and Vectors), or a Map (which includes Hashtables) whose elements will be iterated over.

    You'll note that the hyperlinks to the edit and delete action for each subscription are written with another custom tag, app:linkSubscription. Writing a hyperlink to an action is not difficult, but it can be ugly, and makes an excellent case for encapsulation. If you trace through the app.tld, you will find that the source code for the linkSubscription tag lives in (come on, take a guess) LinkSubscriptionTag.java.

    LinkSubscriptionTag.java

    The Example application uses a subscription's host name (e.g. yahoo.com) as a primary key, which means you can only have one subscription for each host. It also means that to edit a subscription, all you need to know is the user and host. In fact, the EditSubscription action is designed to create, edit, or delete a subscription if provided a user and host names in the request. The goal of LinkSubscriptionTag is then to output a block like:

    <A HREF=[path]EditSubscription.do?action=[action]&username=[user]&host=[host]">[action]
    </A>

    based on input block like:

    <app:linkSubscription
    page="/EditSubscription.do?action=Delete">Delete
    </app:linkSubscription>

    To reduce overhead, LinkSubscriptionTag uses "subscription" as the default name (which the iterator refers to as "ID"), so that can be omitted from the tag properties. The "action" portion of the will differ, and so that is given as the page property to the tag

    Here are a few annotated highlights from LinkSubscriptionTag.java:

    1. Create a string buffer, and ask the request for the relative path to the application
      StringBuffer url = new StringBuffer(request.getContextPath());
    2. Snag a reference to the subscription bean (for this iteration)
      subscription = (Subscription) pageContext.findAttribute(name);
    3. Append the username and host from the bean to the path request.
      url.append("&username="); url.append(BeanUtils.filter(subscription.getUser().getUsername()));
      url.append("&host=");
      url.append(BeanUtils.filter(subscription.getHost()));

    These are the essentials, but be sure to see the full source in LinkSubscriptionTag.java for the rest of the error and logic checking that a working application needs to succeed.

    Meanwhile, back on registration.jsp, there is one more link on the page. This uses yet another custom tag, the app:linkUser tag.

    <app:linkUser page="/EditSubscription.do?action=Create">
    <bean:message key="registration.addSubscription"/>
    </app:linkUser>

    By this time, you must be ready to flip directly to LinkUserTag.java with nary a glance at the configuration file ...

    LinkUserTag.java

    Since they solve the same general problem, LinkUserTag and LinkSubscriptionTag are quite a bit a like, except that LinkUserTag grabs the user bean from the session context, instead of a subscription bean from the iteration. Like the LinkSubscriptionTag, the name for the user bean (e.g. "user") is defaulted, and can be omitted from the tag; all that's needed is the page property -- the rest is automatic!

    <app:linkUser page="/EditSubscription.do?action=Create">
    <bean:message key="registration.addSubscription"/>
    </app:linkUser>

    When rendered, this displays a HTML hypertext link like:

    <a href="/struts-example/EditSubscription.do?action=Create&amp;username=user">
    Add
    </a>

    Note that anchor links with ampersands should use the character entity &amp; as the LinkUserTag has done here (http://www.w3.org/TR/html401/appendix/notes.html#h-B.2.2).

    Let's follow that "Add" link now and see what's up with the EditSubcription action anyway.

    EditSubscriptionAction.java

    Predictably, we find a some now-familiar mappings in struts-config.xml

    <!-- Subscription form bean -->
    <form-bean
    name="SubscriptionForm"
    type="org.apache.struts.webapp.example.SubscriptionForm"
    />

    <!-- Edit mail subscription -->
    <action path="/EditSubscription"
    type="org.apache.struts.webapp.example.EditSubscriptionAction"
    name="SubscriptionForm"
    scope="request"
    validate="false"
    >
    <forward name="failure" path="/mainMenu.jsp"/>
    <forward name="success" path="/subscription.jsp"/>
    </action>

    When we've introduced these type of mappings before, and mentioned that the struts-config.xml was parsed when the ActionServlet was initialized. But we should make it clear that when the Struts digester parsed this file, it actually created standard Java objects, linked as properties to the controller. This means you don't have to edit Java source files just to add a bunch of "new" statements. (How cool is that?)

    Following what was specified by struts-config.xml, the controller makes sure that a SubscriptionForm bean exists, along with the SubscriptionAction object, and then calls the action object's perform method. The perform method first checks to see that the user is logged-in. If not, control is forwarded to the Login action. EditSubscriptionAction.perform then either creates a new subscription object (if the task is Create), or searches the user's subscription hashtable for a matching hostname (if the task is Edit).

    Finally, EditSubscriptionAction conforms the ActionForm bean with the database bean. There may be several subscriptions in the database, but in EditSubscriptionAction we expose the one selected (or just created) for this request to use. Once the Action form (called "subform" in the code) is created and populated from the database, the bean's action is set to either Create or Edit, and control is forwarded to our "success" form, subscription.jsp .

    Note that the servlet only creates one object for each action. Each request is handled as a separate thread, and passed to the single action object instance. This means your action objects must be multi-thread safe.

    But before turning to our final JSP, a word about our database model ...

    User.java and Subscription.java

    If you're used to working with relational databases, the links between the user and subscription objects may be confusing. A conventional relational database would create two distinct tables, one for the users and another for the subscriptions, and link them together with a user ID. The Example application implements a different model, a hierarchical database. Here a "table" of subscriptions is stored within each user object, something like the way a filing system stores documents within folders.

    In addition to the usual getters and setters, the user object also has two methods for working with subscription objects. findSubscription takes a hostname and returns the subscription object for that host. getSubscriptions returns an array of all the subscriptions for the user (ready-made for the iterate tag!). Besides the fields needed to manage the SubscriptionForm data, the object also maintains a runtime link to its user object.

    To create a new subscription, EditSubscriptionAction.java simply creates a new subscription object, and sets its user to the object found in the request, and then forwards control to its input form, subscription.jsp.

    subscription.jsp

    Saving the best for last, subscription.jsp demonstrates use of some interesting Struts custom form tags, html:options and html:checkbox.

    In registration.jsp, the Struts iteration tag was used to write a list of subscriptions. Another place where iterations and collections are handy is the option list for a HTML select tag. Since this is such a common situation, Struts offers a html:options (plural) tag can take an array of objects as a parameter. The tag then iterates over the members of the array (beans) to place each one inside an standard option tag. So given a block like

    <html:select property="type">
    <html:options
    collection="serverTypes"
    property="value"
    labelProperty="label"
    />
    </html:select>

    Struts outputs a block like

    <select name="type">
    <option value="imap" selected>IMAP Protocol</option>
    <option value="pop3">POP3 Protocol</option>
    </select>

    Here, one collection contained both the labels and the values, from properties of the same name. Options can also use a second array for the labels, if they do not match the values. Options can use a Collection, Iterator, or Map for the source of the list.

    For demonstrations purposes, the serverTypes array is created at the top of this page. Usually, the html:options tag would be used to list valid items from a database maintained elsewhere. For example, if the application needed you to select a default subscription, a form might list the subscriptions in an options tag.

    The LabelValueBean used to create the demonstration array is also a good example of simple but useful bean object.

    A particularly tricky HTML control is the checkbox. A problem with a checkbox is that it is only sent in the request if it is checked. If it is not checked, it is not sent (i.e. null). This can be problematic when trying to validate the form's data after it has been translated to a bean. The autoconnect property for a subscription demonstrates how to handle validation of a checkbox.

    SubscriptionForm.java

    Struts validation is handled by the reset and validate methods of the ActionForm bean. When creating your own form beans, you should subclass ActionForm, add your own fields and their getters/setters, and implement the reset and validate methods.

    Struts calls reset before populating the form, and calls validate after populating it but before the perform method of the action. Reset should assign default values to each of your form fields, usually null. But in the case of checkboxes, the default value should usually be false instead of null.

    For more examples of validating forms, take another look at LoginForm.java and RegistrationForm.java.

    Back in subscription.jsp, we have one more block to cover. Although the same basic form can be used to created, edit, or delete a subscription, people might expect the buttons to be labeled differently in each case. subscription.jsp accommodates by using a logic tag to output a different set of buttons for each case. This doesn't really change the way subscription.jsp works, but it does make things less confusing for the user.

    <logic:equal
    name="SubscriptionForm"
    property="action"
    scope="request"
    value="Create">
    <html:submit>
    <bean:message key="button.save"/>
    </html:submit>
    </logic:equal>

    In the case of a request to delete a subscription, the submit button is labeled "Confirm", since this view is meant to give the user a last chance to cancel, before sending that task along to SaveSubscriptionAction.java.

    The actual action property is placed into the form as a hidden field, and SaveSubscriptionAction checks that property to execute the appropriate task.

    SaveSubscriptionAction.java

    Our final stop has the job of finishing what EditSubscriptionAction.java and subscription.jsp started. After the usual logic and error checking, SaveSubscriptionAction either deletes or updates the subscription object being handled by this request, and cleans up the bean, just to be tidy. By now, you should be very comfortable reading through the source on your own, to pickup the finer points.

    This concludes our tour. To review, you may wish to trace the path a new user takes when they register with the application for the first time. You should also read over each of the .java and JSP files carefully, since we only covered the high points here.

    Summary

    • Struts uses a single controller servlet to route HTTP requests.
    • The requests are routed to action objects according to path (or URI).
    • Each request is handled as a separate thread
    • There is only one object for each action (URI), so your action objects must be multi-thread safe.
    • The configuration of action objects are loaded from a XML resource file, rather than hardcoded.
    • Action objects can respond to the request, or ask the controller to forward the request to another object or to another page, such as an input form.
    • A library of custom tags works with the rest of the framework to enhance use of JavaServer Pages.
    • The Struts form tag can work closely with an action objects via a Struts ActionFormBean to retain the state of a data-entry form, and validate the data entered.
    • ActionForm beans can be automatically created by the JSP form or controller servlet.
    • Struts supports a message resource for loading constants strings. Alternate message resources can be provided to internationalize an application.

    libstruts1.2-java-1.2.9/web/example/welcome.jsp0000644000175000017500000000206110404045226022041 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib uri="/tags/struts-bean" prefix="bean" %> <%@ taglib uri="/tags/struts-html" prefix="html" %> <bean:message key="index.title"/>

    Language Options

    • English
    • Japanese
    • Russian

    libstruts1.2-java-1.2.9/web/examples/0000755000175000017500000000000010423130301020042 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/examples/WEB-INF/0000755000175000017500000000000010423130301021071 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/examples/WEB-INF/dispatch/0000755000175000017500000000000010423130301022670 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/examples/WEB-INF/dispatch/struts-config.xml0000644000175000017500000003266710404045214026246 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/web/examples/WEB-INF/exercise/0000755000175000017500000000000010423130301022700 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/examples/WEB-INF/exercise/struts-config.xml0000644000175000017500000001314310404045204026241 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/web/examples/WEB-INF/upload/0000755000175000017500000000000010423130301022355 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/examples/WEB-INF/upload/struts-config.xml0000644000175000017500000000205510404045224025720 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/web/examples/WEB-INF/validator/0000755000175000017500000000000010423130301023056 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/examples/WEB-INF/validator/struts-config.xml0000644000175000017500000001635210404045214026425 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/web/examples/WEB-INF/validator/validation.xml0000644000175000017500000012325410404045216025752 0ustar arnaudarnaud00000000000000 phone ^\(?(\d{3})\)?[-| ]?(\d{3})[-| ]?(\d{4})$ zip ^\d{5}\d*$ zip ^\d{5}(-\d{4})?$
    mask ^\w+$ minlength 5 mask ^[a-zA-Z]*$ maxlength 10 mask ^[a-zA-Z]*$ mask ^[a-zA-Z]*$ mask ${zip} mask ${phone}
    mask ^\w+$ mask ^[a-zA-Z]*$ mask ^[a-zA-Z]*$ mask ^[a-zA-Z]*$ mask ${zip} mask ${phone}
    min 10 max 20 min -2.17 max 3.14 datePatternStrict MM/dd/yyyy mask ^[A-Z]*$
    min 10 max 20 min -2.17 max 3.14 datePatternStrict MM/dd/yyyy
    min 18 max 65
    test ((firstName == null) or (*this* != null)) test ( ((fieldB == null) and (*this* == null)) or ((fieldB != null) and (*this* != null)) ) test (*this* > min) test ( (*this* != null) or ( (address2 == null) and ( (city == null) and (zip == null) ))) test ( (*this* != null) or ( (address1 == null) and ( (address2 == null) and (zip == null) ))) test ( (*this* != null) or ( (address1 == null) and ( (address2 == null) and (city == null) )))
    mask ^\w+$
    mask ^\w+$ mask ^\w+$ mask ^[a-zA-Z]*$ mask ${zip}
    min 50 max 60 datePatternStrict dd.MM.yyyy
    min 100 max 200 datePatternStrict dd.MM.yyyy
    min 18 max 65
    test ((firstName == null) or (*this* != null)) test ( ((fieldB == null) and (*this* == null)) or ((fieldB != null) and (*this* != null)) ) test (*this* > min) test ( (*this* != null) or ( (address2 == null) and ( (city == null) and (zip == null) ))) test ( (*this* != null) or ( (address1 == null) and ( (address2 == null) and (zip == null) ))) test ( (*this* != null) or ( (address1 == null) and ( (address2 == null) and (city == null) )))
    zip ^\d{3}-\d{4}$ phone ^[0][1-9]((\d{2,3}-?)|(-\d{2,3})|(\d-\d{1,2})|(\d{2}-\d))\d-\d{4}$
    mask ^\w+$ minlength 5 mask ^[a-zA-Z]*$ maxlength 10 mask ^[a-zA-Z]*$ mask ^[a-zA-Z]*$ mask ${zip} mask ${phone}
    mask ^\w+$ mask ^[a-zA-Z]*$ mask ^[a-zA-Z]*$ mask ^[a-zA-Z]*$ mask ${zip} mask ${phone}
    min 400 max 700 min -2.17 max 3.14 datePatternStrict yyyy/MM/dd
    min 400 max 700 min -2.17 max 3.14 datePatternStrict yyyy/MM/dd
    min 18 max 65
    test ((firstName == null) or (*this* != null)) test ( ((fieldB == null) and (*this* == null)) or ((fieldB != null) and (*this* != null)) ) test (*this* > min) test ( (*this* != null) or ( (address2 == null) and ( (city == null) and (zip == null) ))) test ( (*this* != null) or ( (address1 == null) and ( (address2 == null) and (zip == null) ))) test ( (*this* != null) or ( (address1 == null) and ( (address2 == null) and (city == null) )))
    mask ^\w+$
    mask ^\w+$ mask ^\w+$ mask ^[a-zA-Z]*$ mask ${zip}
    min 50 max 60 datePatternStrict dd.MM.yyyy
    min 100 max 200 datePatternStrict MM-dd-yyyy
    min 18 max 65
    test ((firstName == null) or (*this* != null)) test ( ((fieldB == null) and (*this* == null)) or ((fieldB != null) and (*this* != null)) ) test (*this* > min) test ( (*this* != null) or ( (address2 == null) and ( (city == null) and (zip == null) ))) test ( (*this* != null) or ( (address1 == null) and ( (address2 == null) and (zip == null) ))) test ( (*this* != null) or ( (address1 == null) and ( (address2 == null) and (city == null) )))
    libstruts1.2-java-1.2.9/web/examples/WEB-INF/struts-config.xml0000644000175000017500000000252710404045174024444 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/web/examples/WEB-INF/web.xml0000644000175000017500000000522410404045204022401 0ustar arnaudarnaud00000000000000 Struts Examples Application action org.apache.struts.action.ActionServlet config /WEB-INF/struts-config.xml config/exercise /WEB-INF/exercise/struts-config.xml config/upload /WEB-INF/upload/struts-config.xml config/validator /WEB-INF/validator/struts-config.xml config/dispatch /WEB-INF/dispatch/struts-config.xml debug 2 detail 2 2 action *.do index.jsp index.html upload.jsp /tags/struts-bean /WEB-INF/struts-bean.tld /tags/struts-html /WEB-INF/struts-html.tld /tags/struts-logic /WEB-INF/struts-logic.tld /tags/struts-nested /WEB-INF/struts-nested.tld libstruts1.2-java-1.2.9/web/examples/dispatch/0000755000175000017500000000000010423130301021641 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/examples/dispatch/actionDispatcher.jsp0000644000175000017500000000603310404045242025655 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %><%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %><%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %><%@ taglib uri="http://struts.apache.org/tags-nested" prefix="nested" %> <bean:message key="actionDispatcher.title" />

     


    Change Language | Changez Le Langage:   English | Anglais   French | Francais


     

           

    libstruts1.2-java-1.2.9/web/examples/dispatch/dispatch.jsp0000644000175000017500000000566310404045244024202 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %><%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %><%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %><%@ taglib uri="http://struts.apache.org/tags-nested" prefix="nested" %> <bean:message key="dispatch.title" />

     


    Change Language | Changez Le Langage:   English | Anglais   French | Francais


     

           

    libstruts1.2-java-1.2.9/web/examples/dispatch/eventAction.jsp0000644000175000017500000000633010404045216024651 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %><%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %><%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %><%@ taglib uri="http://struts.apache.org/tags-nested" prefix="nested" %> <bean:message key="eventAction.title" />

     


    Change Language | Changez Le Langage:   English | Anglais   French | Francais


     

               

    libstruts1.2-java-1.2.9/web/examples/dispatch/eventDispatcher.jsp0000644000175000017500000000640410404045206025523 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %><%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %><%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %><%@ taglib uri="http://struts.apache.org/tags-nested" prefix="nested" %> <bean:message key="eventDispatcher.title" />

     


    Change Language | Changez Le Langage:   English | Anglais   French | Francais


     

               

    libstruts1.2-java-1.2.9/web/examples/dispatch/index.jsp0000644000175000017500000000261210404045230023474 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" %> <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %> <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %> <bean:message key="index.title"/>


    Change Language | Changez Le Langage:   English | Anglais   French | Francais


    libstruts1.2-java-1.2.9/web/examples/dispatch/lookup.jsp0000644000175000017500000000472310404045216023707 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %><%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %><%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %><%@ taglib uri="http://struts.apache.org/tags-nested" prefix="nested" %> <bean:message key="lookup.title" />

     


    Change Language | Changez Le Langage:   English | Anglais   French | Francais


     

           

    libstruts1.2-java-1.2.9/web/examples/dispatch/mapping.jsp0000644000175000017500000000516610404045214024031 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %><%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %><%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %><%@ taglib uri="http://struts.apache.org/tags-nested" prefix="nested" %> <bean:message key="mapping.title" />

     


    Change Language | Changez Le Langage:   English | Anglais   French | Francais


     

           

    libstruts1.2-java-1.2.9/web/examples/exercise/0000755000175000017500000000000010423130301021651 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/examples/exercise/bean-cookie.jsp0000644000175000017500000001035010404045230024547 0ustar arnaudarnaud00000000000000<%@ taglib uri="/tags/struts-bean" prefix="bean" %> Test struts-bean:cookie Tag

    Test struts-bean:cookie Tag

    Display the properties of our current session ID cookie (if there is one):

    Property Name Correct Value Test Result
    comment
    domain
    maxAge
    path
    secure
    value
    version


    Display the properties of an undefined cookie that was given the default value UNKNOWN_VALUE:

    Property Name Correct Value Test Result
    comment
    domain
    maxAge
    name
    path
    secure
    value
    version
    libstruts1.2-java-1.2.9/web/examples/exercise/bean-define.jsp0000644000175000017500000001174310404045214024541 0ustar arnaudarnaud00000000000000<%@ taglib uri="/tags/struts-bean" prefix="bean" %> Test struts-bean:define Tag

    Test struts-bean:define Tag

    Test 1 -- Direct Scalar Variable Defines

    Data Type Correct Value Test Result
    boolean <%= test1_boolean %>
    double <%= test1_double %>
    float <%= test1_float %>
    int <%= test1_int %>
    long <%= test1_long %>
    short <%= test1_short %>
    string <%= test1_string %>
    value <%= test1_value %>

    Test 2 -- Nested Scalar Variable Defines

    Data Type Correct Value Test Result
    boolean <%= test2_boolean %>
    double <%= test2_double %>
    float <%= test2_float %>
    int <%= test2_int %>
    long <%= test2_long %>
    short <%= test2_short %>
    string <%= test2_string %>
    libstruts1.2-java-1.2.9/web/examples/exercise/bean-header.jsp0000644000175000017500000000175010404045216024536 0ustar arnaudarnaud00000000000000<%@ taglib uri="/tags/struts-bean" prefix="bean" %> Test struts-bean:header Tag

    Test struts-bean:header Tag

    Display the values of the headers included in this request.

    <% java.util.Enumeration names = ((HttpServletRequest) request).getHeaderNames(); %> <% while (names.hasMoreElements()) { String name = (String) names.nextElement(); %> <% } %>
    Header Name Header Value
    <%= name %> <%= head %>
    UNKNOWN HEADER
    libstruts1.2-java-1.2.9/web/examples/exercise/bean-include.jsp0000644000175000017500000000124010404045234024723 0ustar arnaudarnaud00000000000000<%@ taglib uri="/tags/struts-bean" prefix="bean" %> Test struts-bean:include Tag

    Test struts-bean:include Tag

    Display the contents returned by invoking /welcome.htmldirectly, with no filtering.


    <%= welcome %>
    

    Display the contents returned by invoking /welcome.htmldirectly, with filtering.


    
    

    libstruts1.2-java-1.2.9/web/examples/exercise/bean-parameter.jsp0000644000175000017500000000232210404045236025264 0ustar arnaudarnaud00000000000000<%@ taglib uri="/tags/struts-bean" prefix="bean" %> Test struts-bean:parameter Tag

    Test struts-bean:parameter Tag

    If called from the index.htmlpage, two request parameters will be included and their values displayed below. If you call this page without including the appropriate request parameters, you will receive a JSP runtime error instead.

    Parameter Name Correct Value Test Result
    param1 value1 <%= param1 %>
    param2 value2 <%= param2 %>
    param3 UNKNOWN VALUE <%= param3 %>
    libstruts1.2-java-1.2.9/web/examples/exercise/bean-resource.jsp0000644000175000017500000000127710404045212025135 0ustar arnaudarnaud00000000000000<%@ taglib uri="/tags/struts-bean" prefix="bean" %> Test struts-bean:resource Tag

    Test struts-bean:resource Tag

    Display the contents of the WEB-INF/web.xmlresource for this web application, with no filtering.


    <%= webxml %>
    

    Display the contents of the WEB-INF/web.xmlresource for this web application, with filtering.


    
    

    libstruts1.2-java-1.2.9/web/examples/exercise/bean-size.jsp0000644000175000017500000000566310404045226024270 0ustar arnaudarnaud00000000000000<%@ taglib uri="/tags/struts-bean" prefix="bean" %> Test struts-bean Size Tag <% java.util.ArrayList data = new java.util.ArrayList(); data.add("First"); data.add("Second"); data.add("Third"); data.add("Fourth"); data.add("Fifth"); pageContext.setAttribute("list", data, PageContext.PAGE_SCOPE); java.util.HashMap temp = new java.util.HashMap(); temp.put("First", "0"); temp.put("Second", "1"); temp.put("Third", "2"); temp.put("Fourth", "3"); temp.put("Fifth", "4"); pageContext.setAttribute("map", temp, PageContext.PAGE_SCOPE); %>

    Test struts-bean Size Tag

    Collection Type Correct Value Test Result
    Bean (List) <%= list.size() %>
    Bean (Map) <%= map.size() %>
    Collection (List) <%= data.size() %>
    Collection (Map) <%= temp.size() %>
    Property (int[]) <% int intValues[] = bean.getIntArray(); out.print(intValues.length); %>
    Property (String[]) <% String stringValues[] = bean.getStringArray(); out.print(stringValues.length); %>
    libstruts1.2-java-1.2.9/web/examples/exercise/bean-write-2.jsp0000644000175000017500000000737610404045236024613 0ustar arnaudarnaud00000000000000<%@ taglib uri="/tags/struts-bean" prefix="bean" %> <%@ taglib uri="/tags/struts-html" prefix="html" %> Test struts-bean:write Tag

    Test struts-bean:write Tag

    Test 7 - Localized format patterns

    <% pageContext.setAttribute("test7.double", new Double(1234567.89)); pageContext.setAttribute("test7.date", new java.util.Date(123456789)); %>

    Doubles

    Language Double format
    de 1.234.567,89
    en 1,234,567.89
    fr 1 234 567,89
    Default format Using Format Attribute Using Format Key
    <%= pageContext.getAttribute("test7.double") %> [#,000.00] [ ]

    Dates

    Language Date format
    de Fr, Jan 2, '70
    en Fri, Jan 2, '70
    fr ven., janv. 2, '70
    Default format Using Format Attribute Using Format Key
    <%= pageContext.getAttribute("test7.date") %> [EEE, MMM d, ''yy] [ ]

    Sprache | Language | Langage

    • German | Deutsch
    • English | Anglais
    • French | Francais
    libstruts1.2-java-1.2.9/web/examples/exercise/bean-write.jsp0000644000175000017500000002052110404045250024433 0ustar arnaudarnaud00000000000000<%@ taglib uri="/tags/struts-bean" prefix="bean" %> <%@ taglib uri="/tags/struts-html" prefix="html" %> Test struts-bean:write Tag

    Test struts-bean:write Tag

    Test 1 -- Scalar Variable Lookups

    <% pageContext.setAttribute("test1.boolean", new Boolean(true)); pageContext.setAttribute("test1.double", new Double(321.0)); pageContext.setAttribute("test1.float", new Float((float) 123.0)); pageContext.setAttribute("test1.int", new Integer(123)); pageContext.setAttribute("test1.long", new Long(321)); pageContext.setAttribute("test1.short", new Short((short) 987)); pageContext.setAttribute("test1.string", "This is a string"); %>
    Data Type Correct Value Test Result
    boolean <%= pageContext.getAttribute("test1.boolean") %>
    double <%= pageContext.getAttribute("test1.double") %>
    float <%= pageContext.getAttribute("test1.float") %>
    int <%= pageContext.getAttribute("test1.int") %>
    long <%= pageContext.getAttribute("test1.long") %>
    short <%= pageContext.getAttribute("test1.short") %>
    String <%= pageContext.getAttribute("test1.string") %>

    Test 2 -- Scalar Property Lookups

    Data Type Correct Value Test Result
    boolean
    double
    float
    int
    long
    short
    String

    Test 3 - Integer Array And Indexed Lookups

    <% for (int index = 0; index < 5; index++) { %> <% } %>
    Correct Value Array Result Indexed Result
    <%= index * 10 %>

    Test 4 - String Array And Indexed Lookups

    <% for (int index = 0; index < 5; index++) { %> <% } %>
    Correct Value Array Result Indexed Result
    <%= "String " + index %>

    Test 5 -- Nested Scalar Property Lookups

    Data Type Correct Value Test Result
    boolean
    double
    float
    int
    long
    short
    String

    Test 6 - Nested Integer Array And Indexed Lookups

    <% for (int index = 0; index < 5; index++) { %> <% } %>
    Correct Value Array Result Indexed Result
    <%= index * 10 %>
    libstruts1.2-java-1.2.9/web/examples/exercise/html-cancel.jsp0000644000175000017500000000515610404045246024601 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %> <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %> <%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %> <title>Test struts-html:cancel Tag

    Cancel Not Allowed - Error Message

    Pressing the Cancel button should display an error message, since Cancellable is not set for this Action but an Exception handler has been configured to handle the throw exception.

     


    Cancel Not Allowed - Exception

    Pressing this Cancel button should throw an org.apache.struts.action.InvalidCancelException since Cancellable is not set for this Action and no exception handler was configured.

     


    Cancel Allowed (Validate true)

    Pressing this Cancel button should return to the Welcome page, as Cancellable is set to true for this Action.

     


    Cancel Ignored (Validate false)

    Pressing this Cancel button should return to the Welcome page, as validate is set to false for this Action.

     

    libstruts1.2-java-1.2.9/web/examples/exercise/html-img.jsp0000644000175000017500000000207510404045240024117 0ustar arnaudarnaud00000000000000<%@ taglib uri="/tags/struts-html" prefix="html" %> Test struts-html:img Tag

    Test struts-html:img Tag

    libstruts1.2-java-1.2.9/web/examples/exercise/html-link.jsp0000644000175000017500000001651610404045246024313 0ustar arnaudarnaud00000000000000<%@ taglib uri="/tags/struts-bean" prefix="bean" %> <%@ taglib uri="/tags/struts-html" prefix="html" %> <%@ taglib uri="/tags/struts-logic" prefix="logic" %> Test html:link Tag<% String newValue = "New string value"; pageContext.setAttribute("newValue", newValue); java.util.HashMap newValues = new java.util.HashMap(); newValues.put("floatProperty", new Float(444.0)); newValues.put("intProperty", new Integer(555)); newValues.put("stringArray", new String[] { "Value 1", "Value 2", "Value 3" }); pageContext.setAttribute("newValues", newValues); %>

    Test struts-html Link Tag

    The following links should hyperlink back to this page, with various combinations of request parameters used to modify the previous values of the associated form bean. Press the "Cancel" button to return to the main menu.

    Standard img tag
    Struts img tag via page attribute
    Struts img tag via action attribute
    Struts img tag via page attribute, context relative
    Struts img tag via page attribute, default module
    Current Values
    booleanProperty intProperty
    doubleProperty longProperty
    floatProperty stringProperty
    stringArray
    Hyperlinks To Be Tested via page attribute
    No modifications at all
    Double and long via hard coded changes
    String via paramId and paramName
    Boolean via paramId, paramName, and paramValue
    Float, int, and stringArray via name (Map)
    Hyperlinks To Be Tested via action and module attributes
    No modifications at all, but link to the default module.
    Double and long via hard coded changes (module)
    String via paramId and paramName
    Boolean via paramId, paramName, and paramValue (module)
    Float, int, and stringArray via name (Map)
    Reset and Cancel Buttons
    Reset Cancel

    The following list tests relative, context-relative, and absolute links. Press (back) to return.

    Forwards

    • module welcome page
    • application welcome page (context relative attribute)
    • application welcome page (module attribute)
    • validator welcome page
    • Struts website
    • Redirect to the default page ("/")

    Actions

    • application welcome page
    • Exercise module welcome page
    • Upload welcome page
    • Validator welcome page

    Pages

    • application welcome page <%-- FIXME: "/" slash throws NPE: application welcome page --%>
    • Exercise module welcome page
    • Upload welcome page
    • Validator welcome page
    libstruts1.2-java-1.2.9/web/examples/exercise/html-messages.jsp0000644000175000017500000001302410404045214025147 0ustar arnaudarnaud00000000000000<%@ page import="org.apache.struts.action.*, org.apache.struts.Globals" %> <%@ taglib uri="/tags/struts-html" prefix="html" %> Test Error and Message Tags<% ActionErrors errors = new ActionErrors(); errors.add("property1", new ActionError("property1error1")); errors.add("property2", new ActionError("property2error1")); errors.add("property2", new ActionError("property2error2")); errors.add("property2", new ActionError("property2error3")); errors.add("property3", new ActionError("property3error1")); errors.add("property3", new ActionError("property3error2")); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("globalError")); request.setAttribute(Globals.ERROR_KEY, errors); ActionMessages messages = new ActionMessages(); messages.add("property1", new ActionMessage("property1message1")); messages.add("property2", new ActionMessage("property2message1")); messages.add("property2", new ActionMessage("property2message2")); messages.add("property2", new ActionMessage("property2message3")); messages.add("property3", new ActionMessage("property3message1")); messages.add("property3", new ActionMessage("property3message2")); messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("globalMessage")); request.setAttribute(Globals.MESSAGE_KEY, messages); %>

    Test Error and Message Tags

    ERRORS Tag

    Test Type Correct Value Test Result
    Errors for Property 1
    Property 1, Error 1
    Errors for Property 2
    Property 2, Error 1
    Property 2, Error 2
    Property 2, Error 3
    All Errors
    Property 1, Error 1
    Property 2, Error 1
    Property 2, Error 2
    Property 2, Error 3
    Property 3, Error 1
    Property 3, Error 2
    Global Error

    MESSAGES Tag

    Test Type Correct Value Test Result
    Messages for Property 1
    Property 1, Message 1
    <%= pageContext.getAttribute("msg") %>
    Messages for Property 2
    Property 2, Message 1
    Property 2, Message 2
    Property 2, Message 3
    <%= pageContext.getAttribute("msg") %>
    All Messages
    Property 1, Message 1
    Property 2, Message 1
    Property 2, Message 2
    Property 2, Message 3
    Property 3, Message 1
    Property 3, Message 2
    Global Message
    <%= pageContext.getAttribute("msg") %>
    libstruts1.2-java-1.2.9/web/examples/exercise/html-multibox.jsp0000644000175000017500000001135010404045250025203 0ustar arnaudarnaud00000000000000<%@ taglib uri="/tags/struts-bean" prefix="bean" %> <%@ taglib uri="/tags/struts-html" prefix="html" %> <%@ taglib uri="/tags/struts-logic" prefix="logic" %> Test html:multibox Tag

    Test struts-html Property Setters

    Whatever changes you make to properties should be reflected when the page is redisplayed. When first started, all of the listed checkboxes should be clear (not selected). Press "Save" to update, or "Cancel" to return to the main menu.

    String Array Values
    String 0 String 0 (nested) String 0
    String 1 String 1 (nested) String 1
    String 2 String 2 (nested) String 2
    String 3 String 3 (nested) String 3
    String 4 String 4 (nested) String 4
    Integer Array Values
    0 (nested) 0 0
    10 (nested) 10 10
    20 (nested) 20 20
    30 (nested) 30 30
    40 (nested) 40 40
      Save Reset Cancel  
    libstruts1.2-java-1.2.9/web/examples/exercise/html-select.jsp0000644000175000017500000001304010404045210024611 0ustar arnaudarnaud00000000000000<%@ page import="java.util.*, org.apache.struts.util.*"%> <%@ taglib uri="/tags/struts-bean" prefix="bean" %> <%@ taglib uri="/tags/struts-html" prefix="html" %> <%@ taglib uri="/tags/struts-logic" prefix="logic" %> Test html:select Tag<% String multipleValues[] = { "Multiple 0", "Multiple 1", "Multiple 2", "Multiple 3", "Multiple 4", "Multiple 5", "Multiple 6", "Multiple 7", "Multiple 8", "Multiple 9" }; pageContext.setAttribute("multipleValues", multipleValues); Vector options = new Vector(); options.add(new LabelValueBean("Label 0", "Value 0")); options.add(new LabelValueBean("Label 1", "Value 1")); options.add(new LabelValueBean("Label 2", "Value 2")); options.add(new LabelValueBean("Label 3", "Value 3")); options.add(new LabelValueBean("Label 4", "Value 4")); options.add(new LabelValueBean("Label 5", "Value 5")); options.add(new LabelValueBean("Label 6", "Value 6")); options.add(new LabelValueBean("Label 7", "Value 7")); options.add(new LabelValueBean("Label 8", "Value 8")); options.add(new LabelValueBean("Label 9", "Value 9")); pageContext.setAttribute("options", options); String withNulls[] = { "String 0", null, "String 2" }; pageContext.setAttribute("withNulls", withNulls); %>

    Test struts-html Select Tag

    Whatever changes you make to properties should be reflected when the page is redisplayed. Press "Save" to update, or "Cancel" to return to the main menu.

    <%-- Ensure that the form bean exists before the form tag is processed. This is a simple (if not entirely clean) way of ensuring that the initial values assigned during bean instantiation will be available within the form, since reset() will not be called when the form bean already exists. The right way to fix this is to modify this webapp so that it does not refer directly to JSP pages, but goes through Action classes, and to either modify the TestBean class, adding an initialize() method, or to have an Action class set the initial values. --%>
    Single Select Allowed: Single 0 Single 1 Single 2 Single 3 Single 4 Single 5 Single 6 Single 7 Single 8 Single 9
    Multiple Select Allowed:
    Multiple Select From A Collection (Using <html:options>):
    Multiple Select From A Collection (Using <html:optionsCollection>):
    Select With Labels From Resources:
    Collection with null labels and values:
    Save Reset Cancel
    libstruts1.2-java-1.2.9/web/examples/exercise/html-setters.jsp0000644000175000017500000001116510404045246025042 0ustar arnaudarnaud00000000000000<%@ taglib uri="/tags/struts-bean" prefix="bean" %> <%@ taglib uri="/tags/struts-html" prefix="html" %> <%@ taglib uri="/tags/struts-logic" prefix="logic" %> Test struts-html Property Setters

    Test struts-html Property Setters

    Whatever changes you make to properties should be reflected when the page is redisplayed. Press "Save" to update, or "Cancel" to return to the main menu.

    Scalar Properties
    booleanProperty nested.booleanProperty
    doubleProperty nested.doubleProperty
    floatProperty nested.floatProperty
    intProperty nested.intProperty
    longProperty nested.longProperty
    stringProperty nested.stringProperty
    Indexed Properties
    intIndexed[0] nested.intIndexed[0]
    intIndexed[1] nested.intIndexed[1]
    stringIndexed[0] nested.stringIndexed[0]
    stringIndexed[1] nested.stringIndexed[1]
      Save Reset Cancel  
    libstruts1.2-java-1.2.9/web/examples/exercise/index.html0000644000175000017500000000544310404045226023666 0ustar arnaudarnaud00000000000000 Struts Test Application

    Struts Taglib Exercises (test pages)

    BEAN Tags

    HTML Tags

    LOGIC Tags

    NESTED Tags

    [:TODO:]

    Other tests

    libstruts1.2-java-1.2.9/web/examples/exercise/logic-compare-numeric.jsp0000644000175000017500000003564710404045230026574 0ustar arnaudarnaud00000000000000<%@ taglib uri="/tags/struts-bean" prefix="bean" %> <%@ taglib uri="/tags/struts-logic" prefix="logic" %> Test struts-logic Comparison Tags (Numeric)

    Test struts-logic Comparison Tags (Numeric)

    <% String doub1 = "321.0"; String doub2 = "111.0"; String doub3 = "333.0"; String long1 = "321"; String long2 = "111"; String long3 = "333"; String short1 = "987"; String short2 = "654"; String short3 = "999"; %>
    Test Type Variable Content Value Content Correct Value Test Result
    double / EQ <%= doub1 %> equal greaterEqual lessEqual equal greaterEqual greaterThan lessEqual lessThan notEqual
    double / GT <%= doub2 %> greaterEqual greaterThan notEqual equal greaterEqual greaterThan lessEqual lessThan notEqual
    double / LT <%= doub3 %> lessEqual lessThan notEqual equal greaterEqual greaterThan lessEqual lessThan notEqual
    float / EQ <%= doub1 %> lessEqual lessThan notEqual equal greaterEqual greaterThan lessEqual lessThan notEqual
    float / GT <%= doub2 %> greaterEqual greaterThan notEqual equal greaterEqual greaterThan lessEqual lessThan notEqual
    float / LT <%= doub3 %> lessEqual lessThan notEqual equal greaterEqual greaterThan lessEqual lessThan notEqual
    int / EQ <%= long1 %> lessEqual lessThan notEqual equal greaterEqual greaterThan lessEqual lessThan notEqual
    int / GT <%= long2 %> greaterEqual greaterThan notEqual equal greaterEqual greaterThan lessEqual lessThan notEqual
    int / LT <%= long3 %> lessEqual lessThan notEqual equal greaterEqual greaterThan lessEqual lessThan notEqual
    long / EQ <%= long1 %> equal greaterEqual lessEqual equal greaterEqual greaterThan lessEqual lessThan notEqual
    long / GT <%= long2 %> greaterEqual greaterThan notEqual equal greaterEqual greaterThan lessEqual lessThan notEqual
    long / LT <%= long3 %> lessEqual lessThan notEqual equal greaterEqual greaterThan lessEqual lessThan notEqual
    short / EQ <%= short1 %> equal greaterEqual lessEqual equal greaterEqual greaterThan lessEqual lessThan notEqual
    short / GT <%= short2 %> greaterEqual greaterThan notEqual equal greaterEqual greaterThan lessEqual lessThan notEqual
    short / LT <%= short3 %> lessEqual lessThan notEqual equal greaterEqual greaterThan lessEqual lessThan notEqual
    libstruts1.2-java-1.2.9/web/examples/exercise/logic-compare.jsp0000644000175000017500000001450210404045230025117 0ustar arnaudarnaud00000000000000<%@ taglib uri="/tags/struts-bean" prefix="bean" %> <%@ taglib uri="/tags/struts-logic" prefix="logic" %> Test struts-logic Comparison Tags

    Test struts-logic Comparison Tags

    <% String bool1 = "true"; String bool2 = "false"; String str1 = "This is a string"; String str2 = "Less than"; String str3 = "XYZ greater than"; %>
    Test Type Variable Content Value Content Correct Value Test Result
    boolean / EQ <%= bool1 %> equal equal notEqual
    boolean / EQ <%= bool2 %> equal equal notEqual
    boolean / NE <%= bool2 %> notEqual equal notEqual
    boolean / NE <%= bool1 %> notEqual equal notEqual
    string / EQ <%= str1 %> equal greaterEqual lessEqual equal greaterEqual greaterThan lessEqual lessThan notEqual
    string / GT <%= str2 %> greaterEqual greaterThan notEqual equal greaterEqual greaterThan lessEqual lessThan notEqual
    string / LT <%= str3 %> lessEqual lessThan notEqual equal greaterEqual greaterThan lessEqual lessThan notEqual
    string / NULL     equal greaterEqual lessEqual equal greaterEqual greaterThan lessEqual lessThan notEqual
    libstruts1.2-java-1.2.9/web/examples/exercise/logic-empty.jsp0000644000175000017500000000637510404045210024636 0ustar arnaudarnaud00000000000000<%@ taglib uri="/tags/struts-logic" prefix="logic" %> Test struts-logic Emptiness Tags

    Test struts-logic Emptiness Tags

    Test Type Correct Value Test Result
    missing bean, no property attribute empty empty notEmpty
    not-missing bean, no property attribute notEmpty empty notEmpty
    null empty empty notEmpty
    empty string empty empty notEmpty
    non-empty string notEmpty empty notEmpty
    empty collection empty empty notEmpty
    non-empty collection notEmpty empty notEmpty
    empty map empty empty notEmpty
    non-empty map notEmpty empty notEmpty
    unsupported object notEmpty empty notEmpty
    libstruts1.2-java-1.2.9/web/examples/exercise/logic-forward-test-forward.jsp0000644000175000017500000000013710404045220027552 0ustar arnaudarnaud00000000000000<%@ taglib uri="/tags/struts-logic" prefix="logic" %> libstruts1.2-java-1.2.9/web/examples/exercise/logic-forward.jsp0000644000175000017500000000212010404045244025133 0ustar arnaudarnaud00000000000000<%@ taglib uri="/tags/struts-html" prefix="html" %> Test struts-logic:forward and struts-logic:redirect Tags

    Test struts-logic:forward and struts-logic:redirect Tags

    The following links should return to this page.

    • Standard hyperlink back to this page
    • Forward to this page
    • Redirect to this page, via action attribute
    • Redirect to this page, via forward attribute
    • Redirect to this page, via page attribute

    • Taglibs Exercise welcome page
    libstruts1.2-java-1.2.9/web/examples/exercise/logic-iterate.jsp0000644000175000017500000001003510404045220025122 0ustar arnaudarnaud00000000000000<%@ taglib uri="/tags/struts-bean" prefix="bean" %> <%@ taglib uri="/tags/struts-logic" prefix="logic" %> Test struts-logic Iterate Tag <% { java.util.ArrayList list = new java.util.ArrayList(); list.add("First"); list.add("Second"); list.add("Third"); list.add("Fourth"); list.add("Fifth"); pageContext.setAttribute("list", list, PageContext.PAGE_SCOPE); int intArray[] = new int[] { 0, 10, 20, 30, 40 }; pageContext.setAttribute("intArray", intArray, PageContext.PAGE_SCOPE); } %>

    Test struts-logic Iterate Tag

    Test 1 - Iterate Over A String Array [0..4]

    1.  [ ]

    Test 2 - Iterate Over A String Array [0..2]

    1.  [ ]

    Test 3 - Iterate Over A String Array [3..4]

    1.  [ ]

    Test 4 - Iterate Over A String Array [1..3]

    1.  [ ]

    Test 5 - Iterate Over an Array List

    1.  [ ]

    Test 6 - Iterate Over an Array List [0..2]

    1.  [ ]

    Test 7 - Iterate Over an Array List [2..4]

    1.  [ ]

    Test 8 - Iterate Over an int array

    1.  [ ]

    Test 9 - Iterate Over an int array [0..2]

    1.  [ ]

    Test 10 - Iterate Over an int array [2..4]

    1.  [ ]
    libstruts1.2-java-1.2.9/web/examples/exercise/logic-match.jsp0000644000175000017500000002033410404045246024574 0ustar arnaudarnaud00000000000000<%@ taglib uri="/tags/struts-bean" prefix="bean" %> <%@ taglib uri="/tags/struts-logic" prefix="logic" %> Test struts-logic Match Tags

    Test struts-logic Match Tags

    <% pageContext.setAttribute("string", "String test value"); %>
    Test Type Variable Content Value Content Correct Value Test Test Result
    Cookie / Any 0 contains match notMatch missing
    Cookie / End 0 ends with match notMatch missing
    Cookie / Start 0 starts with match notMatch missing
    Header / Any Mozilla contains match notMatch missing
    Header / End Mozilla ends with match notMatch missing
    Header / Start Mozilla starts with match notMatch missing
    Name / Any value contains match notMatch
    Name / End value ends with match notMatch
    Name / Start value starts with match notMatch
    Parameter / Any value1 contains match notMatch missing
    Parameter / End value1 ends with match notMatch missing
    Parameter / Start value1 starts with match notMatch missing
    Property / Any FOO contains match notMatch
    Property / End FOO ends with match notMatch
    Property / Start FOO starts with match notMatch
    libstruts1.2-java-1.2.9/web/examples/exercise/logic-present.jsp0000644000175000017500000000625610404045212025160 0ustar arnaudarnaud00000000000000<%@ taglib uri="/tags/struts-logic" prefix="logic" %> Test struts-logic Presence Tags

    Test struts-logic Presence Tags

    <% if (request.isRequestedSessionIdFromCookie()) { %> <% } else { %> <% } %>
    Test Type Correct Value Test Result
    Bean present present notPresent
    Bean notPresent present notPresent
    CookiepresentnotPresent present notPresent
    Cookie notPresent present notPresent
    Header present present notPresent
    Header notPresent present notPresent
    Parameter present present notPresent
    Parameter notPresent present notPresent
    Property present present notPresent
    Property notPresent present notPresent

    present/notPresent - role, scope, user - {:TODO:]

    libstruts1.2-java-1.2.9/web/examples/exercise/logic-redirect-test-action.jsp0000644000175000017500000000014210404045250027517 0ustar arnaudarnaud00000000000000<%@ taglib uri="/tags/struts-logic" prefix="logic" %> libstruts1.2-java-1.2.9/web/examples/exercise/logic-redirect-test-forward.jsp0000644000175000017500000000014210404045214027706 0ustar arnaudarnaud00000000000000<%@ taglib uri="/tags/struts-logic" prefix="logic" %> libstruts1.2-java-1.2.9/web/examples/exercise/logic-redirect-test-page.jsp0000644000175000017500000000014310404045212027155 0ustar arnaudarnaud00000000000000<%@ taglib uri="/tags/struts-logic" prefix="logic" %> libstruts1.2-java-1.2.9/web/examples/upload/0000755000175000017500000000000010423130301021326 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/examples/upload/display.jsp0000644000175000017500000000076710404045212023530 0ustar arnaudarnaud00000000000000

    The Text: <%= request.getAttribute("text") %>

    The Query Parameter: <%= request.getAttribute("queryValue") %>

    The File name: <%= request.getAttribute("fileName") %>

    The File content type: <%= request.getAttribute("contentType") %>

    The File size: <%= request.getAttribute("size") %>

    The File data:


    <%= request.getAttribute("data") %>
    

    libstruts1.2-java-1.2.9/web/examples/upload/upload-utf8.jsp0000644000175000017500000000224510404045244024231 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html; charset=utf-8" %><%@ taglib uri="/tags/struts-html" prefix="html" %> utf-8 upload page Please enter some text, just to demonstrate the handling of text elements as opposed to file elements:


    Please select the file that you would like to upload:


    If you would rather write this file to another file, please check here:

    If you checked the box to write to a file, please specify the file path here:


    libstruts1.2-java-1.2.9/web/examples/upload/upload.jsp0000644000175000017500000000516510404045216023350 0ustar arnaudarnaud00000000000000<%@ page import="org.apache.struts.action.*, java.util.Iterator, org.apache.struts.webapp.upload.UploadForm, org.apache.struts.Globals" %><%@ taglib uri="/tags/struts-bean" prefix="bean" %><%@ taglib uri="/tags/struts-html" prefix="html" %><%@ taglib uri="/tags/struts-logic" prefix="logic" %> File Upload Example

    Please enter some text, just to demonstrate the handling of text elements as opposed to file elements:

    Please select the file that you would like to upload:

    If you would rather write this file to another file, please check here:

    If you checked the box to write to a file, please specify the file path here:


    This form is to test Bug 38534. If this bug is fixed then perversly a NestedNullException will be thrown by BeanUtils's populate method, but the application should continue to function after that. If its not fixed then the result page will be shown BUT after that the application will no longer function.



    Submit For Bug 38534

    libstruts1.2-java-1.2.9/web/examples/validator/0000755000175000017500000000000010423130301022027 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/examples/validator/bundleExamples.jsp0000644000175000017500000000666010404045216025536 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %><%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %><%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %><%@ taglib uri="http://struts.apache.org/tags-nested" prefix="nested" %> <bean:message key="bundlesExamples.title" />

     
     
     
     
     
         



    libstruts1.2-java-1.2.9/web/examples/validator/bundleExamplesJS.jsp0000644000175000017500000000611310404045240025761 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %><%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %><%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %><%@ taglib uri="http://struts.apache.org/tags-nested" prefix="nested" %> <bean:message key="javascript.bundlesExamples.title" />

       



    libstruts1.2-java-1.2.9/web/examples/validator/index.jsp0000644000175000017500000000650010404045226023667 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" %> <%@ page import="org.apache.struts.validator.ValidatorPlugIn" session="true" %> <%@ page import="org.apache.struts.Globals" %> <%@ taglib uri="/tags/struts-bean" prefix="bean" %> <%@ taglib uri="/tags/struts-html" prefix="html" %> <%@ taglib uri="/tags/struts-logic" prefix="logic" %> <bean:message key="index.title"/> ERROR: Application resources not loaded -- check servlet container logs for error messages. <%-- :TODO: Need code to do this with moudles ERROR: Validator resources not loaded -- check Commons Logging logs for error messages. --%>

    • -
    • -

    • -
    • -

    • -
    • -

    • -

    Change Language | Changez Le Langage

    • English | Anglais
    • French | Francais -
    • French Canadian | Francais Canadien -
    • Japanese | Japonais -

     

    libstruts1.2-java-1.2.9/web/examples/validator/jsRegistration.jsp0000644000175000017500000000607510404045242025574 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" %> <%@ taglib uri="/tags/struts-bean" prefix="bean" %> <%@ taglib uri="/tags/struts-html" prefix="html" %> <%@ taglib uri="/tags/struts-logic" prefix="logic" %> <bean:message key="registrationForm.title"/>

       
    <%-- Referencing the registrationForm since they are identical so I don't need a separate validation.xml listing just for this form. --%>
    libstruts1.2-java-1.2.9/web/examples/validator/jsType.jsp0000644000175000017500000001401110404045224024030 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" %><%@ taglib uri="/tags/struts-bean" prefix="bean" %><%@ taglib uri="/tags/struts-html" prefix="html" %><%@ taglib uri="/tags/struts-logic" prefix="logic" %> <bean:message key="typeForm.title" />

    <%-- --%> <%-- --%>
    (e.g. 4111111111111111, 5500000000000004)
    :
    :
    : <%=satBean.getLabel()%>
    :
    : <%=langBean.getLabel()%>
       
    libstruts1.2-java-1.2.9/web/examples/validator/multiRegistration1.jsp0000644000175000017500000000415410404045206026367 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" %> <%@ taglib uri="/tags/struts-bean" prefix="bean" %> <%@ taglib uri="/tags/struts-html" prefix="html" %> <%@ taglib uri="/tags/struts-logic" prefix="logic" %> <bean:message key="registrationForm.title"/>

       
    libstruts1.2-java-1.2.9/web/examples/validator/multiRegistration2.jsp0000644000175000017500000000445210404045240026367 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" %> <%@ taglib uri="/tags/struts-bean" prefix="bean" %> <%@ taglib uri="/tags/struts-html" prefix="html" %> <%@ taglib uri="/tags/struts-logic" prefix="logic" %> <bean:message key="registrationForm.title"/>

       
    libstruts1.2-java-1.2.9/web/examples/validator/registration.jsp0000644000175000017500000000541410404045216025274 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" %> <%@ taglib uri="/tags/struts-bean" prefix="bean" %> <%@ taglib uri="/tags/struts-html" prefix="html" %> <%@ taglib uri="/tags/struts-logic" prefix="logic" %> <bean:message key="registrationForm.title"/>

       
    libstruts1.2-java-1.2.9/web/examples/validator/type.jsp0000644000175000017500000001523710404045246023552 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="/tags/struts-bean" prefix="bean" %><%@ taglib uri="/tags/struts-html" prefix="html" %><%@ taglib uri="/tags/struts-logic" prefix="logic" %><%@ taglib uri="/tags/struts-nested" prefix="nested" %> <bean:message key="typeForm.title" />

    (e.g. 4111111111111111, 5500000000000004)
     
     
       
    libstruts1.2-java-1.2.9/web/examples/validator/validWhenExamples.jsp0000644000175000017500000001311610404045212026174 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %><%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %><%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %><%@ taglib uri="http://struts.apache.org/tags-nested" prefix="nested" %> <bean:message key="validWhenExamples.title" />

     

     

     

     
     
     
     



    libstruts1.2-java-1.2.9/web/examples/index.html0000644000175000017500000000060510404045246022054 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/web/examples/welcome.jsp0000644000175000017500000000611610404045246022233 0ustar arnaudarnaud00000000000000<%@ taglib uri="/tags/struts-html" prefix="html" %> Struts Examples

    Struts Examples

    Each of these links lead to a separate "module" within this application.

    • Taglib Test Pages
    • Upload examples
    • Validator and Localization examples
    • Dispatch Action examples

    These modules follow the "learn by example" school. Be sure to "look under the hood" to see how it's done.

    Taglib Test Pages

    These pages are designed to test the operation of the various taglibs that come bundled with Struts. If you examine the JSP templates, you'll see that these pages use a lot of scriptlets. We use scriptlets here in order to test the tags. Most production pages will not need to use scriplets. In fact many Struts developers never use scriplets in a production page.

    Upload example

    Struts uses the Commons Upload package to provide support for uploading files. This example shows you how to upload a page for processing or how to just display it.

    Validator examples

    The Struts Validator uses the same resource bundles as the rest of your Struts application, making localization easy to do. These examples show you how to use the validator with and without JavaScript, as well as how to localize your validations.

    But, wait, there's more ...

    In addion to this application, there are four other applications bundled with Struts, ready for you to install:

    • Struts Blank
    • Struts Documentation
    • Struts MailReader
    • Struts Tiles Documentation

    Struts Blank is an application template. Explode this WAR under your own application's name, and you can start coding! Struts Documentation is a copy of everything you'll find on the website: User Guide, Developer's Guide, FAQs, and How-Tos. Struts Mailreader is a starter business application, much like the one most of you need to developer. Struts Tiles Documentation explores the more advanced features of Tiles.


    libstruts1.2-java-1.2.9/web/test/0000755000175000017500000000000010423130301017203 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/test/test/0000755000175000017500000000000010404045172020174 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/test/test/org/0000755000175000017500000000000010404045172020763 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/test/test/org/apache/0000755000175000017500000000000010404045172022204 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/0000755000175000017500000000000010404045172023550 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/0000755000175000017500000000000010404045172025012 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/bean/0000755000175000017500000000000010423130301025705 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/bean/resources/0000755000175000017500000000000010423130301027717 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/bean/resources/IncludeTagTest.jsp0000644000175000017500000000011510404045204033317 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> Test Value././@LongLink0000644000175000017500000000014510423140534011320 Lustar 00000000000000libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/bean/resources/TextFileForTesting.txtlibstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/bean/resources/TextFileForTesting.txt0000644000175000017500000000001210404045220034206 0ustar arnaudarnaud00000000000000Test Valuelibstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/bean/TestCookieTag.jsp0000644000175000017500000000175710404045232031151 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/bean/TestDefineTag.jsp0000644000175000017500000000543010404045242031123 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> Test Value Test Value Test Value Test Value libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/bean/TestHeaderTag.jsp0000644000175000017500000000150310404045174031122 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/bean/TestIncludeTag.jsp0000644000175000017500000000361310404045210031310 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> Test Value "/> Test Value Test Value <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/bean/TestMessageTag.jsp0000644000175000017500000001234210404045224031315 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <% /* * =========================================================== * Testing MessageTag (these comments serve as a divider of * functionality being tested) * * Section: No Arg * Locale: (default) * =========================================================== */ %> default.bundle.message default.bundle.message default.bundle.message default.bundle.message alternate.bundle.message alternate.bundle.message alternate.bundle.message alternate.bundle.message libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/bean/TestMessageTag1.jsp0000644000175000017500000001265010404045210031373 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <% /* * =========================================================== * Testing MessageTag (these comments serve as a divider of * functionality being tested) * * Section: 1 Arg * Locale: (default) * =========================================================== */ %> default.bundle.message.1 default.bundle.message.1 default.bundle.message.1 default.bundle.message.1 alternate.bundle.message.1 alternate.bundle.message.1 alternate.bundle.message.1 alternate.bundle.message.1 libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/bean/TestMessageTag2.jsp0000644000175000017500000001320010404045242031371 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <% /* * =========================================================== * Testing MessageTag (these comments serve as a divider of * functionality being tested) * * Section: 2 Arg * Locale: (default) * =========================================================== */ %> default.bundle.message.2 default.bundle.message.2 default.bundle.message.2 default.bundle.message.2 alternate.bundle.message.2 alternate.bundle.message.2 alternate.bundle.message.2 alternate.bundle.message.2 libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/bean/TestMessageTag3.jsp0000644000175000017500000001353010404045224031400 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <% /* * =========================================================== * Testing MessageTag (these comments serve as a divider of * functionality being tested) * * Section: 3 Arg * Locale: (default) * =========================================================== */ %> default.bundle.message.3 default.bundle.message.3 default.bundle.message.3 default.bundle.message.3 alternate.bundle.message.3 alternate.bundle.message.3 alternate.bundle.message.3 alternate.bundle.message.3 libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/bean/TestMessageTag4.jsp0000644000175000017500000001406010404045210031373 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <% /* * =========================================================== * Testing MessageTag (these comments serve as a divider of * functionality being tested) * * Section: 4 Arg * Locale: (default) * =========================================================== */ %> default.bundle.message.4 default.bundle.message.4 default.bundle.message.4 default.bundle.message.4 alternate.bundle.message.4 alternate.bundle.message.4 alternate.bundle.message.4 alternate.bundle.message.4 libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/bean/TestPageTag.jsp0000644000175000017500000000176110404045204030606 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%=app.getAttribute("PAGETAG_KEY")%> <%=s.getAttribute("PAGETAG_KEY")%> <%=req.getAttribute("PAGETAG_KEY")%> <%resp.getWriter().println("PAGETAG_VAL");%> <%=cfg.getServletContext().getAttribute("PAGETAG_KEY")%> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/bean/TestParameterTag.jsp0000644000175000017500000000076610404045210031653 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/bean/TestResourceTag.jsp0000644000175000017500000000257010404045204031520 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <% /* * I borrowed this snippet from the ResourceTag. * This test may seem trivial and redundent, but later, when others * come along and change/add functionality, you'll come to appreciate * tests like this. */ try { StringBuffer sb = new StringBuffer(); java.io.InputStreamReader reader = new java.io.InputStreamReader(stream); char buffer[] = new char[256]; int n = 0; while (true) { n = reader.read(buffer); if (n < 1) break; sb.append(buffer, 0, n); } reader.close(); pageContext.setAttribute("PAGE_KEY", sb.toString()); } catch (java.io.IOException e) { e.printStackTrace(); } %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/bean/TestSizeTag.jsp0000644000175000017500000001637410404045222030652 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <% /* * Testing the SizeTag using an Array. * NoScope App Session Requ * Name x x x x * * NameProperty x x x x * * NameProperty x x x x * (nested) * * */ %> <% /* * Testing the SizeTag using a Collection. * App Session Requ * Name x x x * * NameProperty x x x * * NameProperty x x x * (nested) * * */ %> <% /* * Testing the SizeTag using a Map. * App Session Requ * Name x x x * * NameProperty x x x * * NameProperty x x x * (nested) * * */ %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/bean/TestStrutsTag.jsp0000644000175000017500000000166410404045240031240 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/bean/TestWriteTag.jsp0000644000175000017500000000322510404045234031024 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/0000755000175000017500000000000010423130301025744 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestBaseTag.jsp0000644000175000017500000000500010404045212030630 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <% String server = request.getServerName(); int port = request.getServerPort(); String portString = (port == 80 ? "" : ":" + port); %> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestButtonTag1.jsp0000644000175000017500000002330610404045234031327 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestButtonTag2.jsp0000644000175000017500000001701510404045216031330 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> Button Value Here <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestCancelTag1.jsp0000644000175000017500000002400210404045252031233 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestCancelTag2.jsp0000644000175000017500000001206010404045232031233 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> Cancel Value Here <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestCheckboxTag1.jsp0000644000175000017500000002432710404045234031606 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestCheckboxTag2.jsp0000644000175000017500000002047310404045216031605 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> Checkbox Value Here Checkbox Value Here Testing Message Message D'Essai <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestCheckboxTag3.jsp0000644000175000017500000002265710404045172031615 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestCheckboxTag4.jsp0000644000175000017500000002142010404045232031576 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@page import="org.apache.struts.Globals"%> <%@page import="org.apache.struts.action.ActionMessage"%> <%@page import="org.apache.struts.action.ActionMessages"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <% ActionMessages errors = new ActionMessages(); errors.add("checked", new ActionMessage("default.testing.errors.tag")); request.setAttribute("ALT_ERROR_KEY", errors); %> <% ActionMessages errors = new ActionMessages(); errors.add("checked", new ActionMessage("default.testing.errors.tag")); request.setAttribute(Globals.ERROR_KEY, errors); %> <% ActionMessages errors = new ActionMessages(); errors.add("checked", new ActionMessage("default.testing.errors.tag")); request.setAttribute(Globals.ERROR_KEY, errors); %> Checkbox Value Here Checkbox Value Here Testing Message Message D'Essai <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestErrorsTag1.jsp0000644000175000017500000002472310404045210031326 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@page import="org.apache.struts.Globals"%> <%@page import="org.apache.struts.action.ActionError"%> <%@page import="org.apache.struts.action.ActionErrors"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> My Errors go here: My Errors go here: <% //This should be done in your action. I do it here to keep the tests simple. ActionErrors errors = new ActionErrors(); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("default.testing.errors.tag")); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("default.testing.errors.tag2")); request.setAttribute(Globals.ERROR_KEY, errors); %> My Errors go here: My Errors go here:My Errors TextMy Errors Text 2 My Errors go here: My Errors go here: <% //This should be done in your action. I do it here to keep the tests simple. ActionErrors errors = new ActionErrors(); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("alternate.testing.errors.tag")); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("alternate.testing.errors.tag2")); request.setAttribute(Globals.ERROR_KEY, errors); %> My Errors go here: My Errors go here:My Alternate Errors TextMy Alternate Errors Text 2 My Errors go here: My Errors go here: <% //This should be done in your action. I do it here to keep the tests simple. ActionErrors errors = new ActionErrors(); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("default.testing.errors.tag")); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("default.testing.errors.tag2")); request.setAttribute(Globals.ERROR_KEY, errors); %> My Errors go here: My Errors go here:My Errors Text (fr)My Errors Text 2 (fr) My Errors go here: My Errors go here: <% //This should be done in your action. I do it here to keep the tests simple. ActionErrors errors = new ActionErrors(); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("alternate.testing.errors.tag")); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("alternate.testing.errors.tag2")); request.setAttribute(Globals.ERROR_KEY, errors); %> My Errors go here: My Errors go here:My Alternate Errors Text (fr)My Alternate Errors Text 2 (fr) My Errors go here: My Errors go here: <% //This should be done in your action. I do it here to keep the tests simple. ActionErrors errors = new ActionErrors(); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("default.testing.errors.tag")); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("default.testing.errors.tag2")); request.setAttribute(Globals.ERROR_KEY, errors); %> My Errors go here: My Errors go here:My Errors Text (fr)My Errors Text 2 (fr) My Errors go here: My Errors go here: <% //This should be done in your action. I do it here to keep the tests simple. ActionErrors errors = new ActionErrors(); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("alternate.testing.errors.tag")); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("alternate.testing.errors.tag2")); request.setAttribute(Globals.ERROR_KEY, errors); %> My Errors go here: My Errors go here:My Alternate Errors Text (fr)My Alternate Errors Text 2 (fr) My Errors go here: My Errors go here: <% //This should be done in your action. I do it here to keep the tests simple. ActionErrors errors = new ActionErrors(); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("default.testing.errors.tag")); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("default.testing.errors.tag2")); request.setAttribute(Globals.ERROR_KEY, errors); %> My Errors go here: My Errors go here:My Errors Text (fr)My Errors Text 2 (fr) My Errors go here: My Errors go here: <% //This should be done in your action. I do it here to keep the tests simple. ActionErrors errors = new ActionErrors(); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("alternate.testing.errors.tag")); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("alternate.testing.errors.tag2")); request.setAttribute(Globals.ERROR_KEY, errors); %> My Errors go here: My Errors go here:My Alternate Errors Text (fr)My Alternate Errors Text 2 (fr) <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestErrorsTag2.jsp0000644000175000017500000002546610404045244031343 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@page import="org.apache.struts.Globals"%> <%@page import="org.apache.struts.action.ActionError"%> <%@page import="org.apache.struts.action.ActionErrors"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> My Errors go here: My Errors go here: <% //This should be done in your action. I do it here to keep the tests simple. ActionErrors errors = new ActionErrors(); errors.add("someProperty", new ActionError("default.testing.errors.tag")); errors.add("someProperty", new ActionError("default.testing.errors.tag2")); request.setAttribute(Globals.ERROR_KEY, errors); %> My Errors go here: My Errors go here:My Errors TextMy Errors Text 2 My Errors go here: My Errors go here: <% //This should be done in your action. I do it here to keep the tests simple. ActionErrors errors = new ActionErrors(); errors.add("someProperty", new ActionError("alternate.testing.errors.tag")); errors.add("someProperty", new ActionError("alternate.testing.errors.tag2")); request.setAttribute(Globals.ERROR_KEY, errors); %> My Errors go here: My Errors go here:My Alternate Errors TextMy Alternate Errors Text 2 My Errors go here: My Errors go here: <% //This should be done in your action. I do it here to keep the tests simple. ActionErrors errors = new ActionErrors(); errors.add("someProperty", new ActionError("default.testing.errors.tag")); errors.add("someProperty", new ActionError("default.testing.errors.tag2")); request.setAttribute(Globals.ERROR_KEY, errors); %> My Errors go here: My Errors go here:My Errors Text (fr)My Errors Text 2 (fr) My Errors go here: My Errors go here: <% //This should be done in your action. I do it here to keep the tests simple. ActionErrors errors = new ActionErrors(); errors.add("someProperty", new ActionError("alternate.testing.errors.tag")); errors.add("someProperty", new ActionError("alternate.testing.errors.tag2")); request.setAttribute(Globals.ERROR_KEY, errors); %> My Errors go here: My Errors go here:My Alternate Errors Text (fr)My Alternate Errors Text 2 (fr) My Errors go here: My Errors go here: <% //This should be done in your action. I do it here to keep the tests simple. ActionErrors errors = new ActionErrors(); errors.add("someProperty", new ActionError("default.testing.errors.tag")); errors.add("someProperty", new ActionError("default.testing.errors.tag2")); request.setAttribute(Globals.ERROR_KEY, errors); %> My Errors go here: My Errors go here:My Errors Text (fr)My Errors Text 2 (fr) My Errors go here: My Errors go here: <% //This should be done in your action. I do it here to keep the tests simple. ActionErrors errors = new ActionErrors(); errors.add("someProperty", new ActionError("alternate.testing.errors.tag")); errors.add("someProperty", new ActionError("alternate.testing.errors.tag2")); request.setAttribute(Globals.ERROR_KEY, errors); %> My Errors go here: My Errors go here:My Alternate Errors Text (fr)My Alternate Errors Text 2 (fr) My Errors go here: My Errors go here: <% //This should be done in your action. I do it here to keep the tests simple. ActionErrors errors = new ActionErrors(); errors.add("someProperty", new ActionError("default.testing.errors.tag")); errors.add("someProperty", new ActionError("default.testing.errors.tag2")); request.setAttribute(Globals.ERROR_KEY, errors); %> My Errors go here: My Errors go here:My Errors Text (fr)My Errors Text 2 (fr) My Errors go here: My Errors go here: <% //This should be done in your action. I do it here to keep the tests simple. ActionErrors errors = new ActionErrors(); errors.add("someProperty", new ActionError("alternate.testing.errors.tag")); errors.add("someProperty", new ActionError("alternate.testing.errors.tag2")); request.setAttribute(Globals.ERROR_KEY, errors); %> My Errors go here: My Errors go here:My Alternate Errors Text (fr)My Alternate Errors Text 2 (fr) <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestErrorsTag3.jsp0000644000175000017500000002536310404045224031336 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@page import="org.apache.struts.Globals"%> <%@page import="org.apache.struts.action.ActionError"%> <%@page import="org.apache.struts.action.ActionErrors"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> My Errors go here: My Errors go here: <% //This should be done in your action. I do it here to keep the tests simple. ActionErrors errors = new ActionErrors(); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("default.testing.errors.tag")); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("default.testing.errors.tag2")); request.setAttribute("MY_ERRORS_KEY", errors); %> My Errors go here: My Errors go here:My Errors TextMy Errors Text 2 My Errors go here: My Errors go here: <% //This should be done in your action. I do it here to keep the tests simple. ActionErrors errors = new ActionErrors(); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("alternate.testing.errors.tag")); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("alternate.testing.errors.tag2")); request.setAttribute("MY_ERRORS_KEY", errors); %> My Errors go here: My Errors go here:My Alternate Errors TextMy Alternate Errors Text 2 My Errors go here: My Errors go here: <% //This should be done in your action. I do it here to keep the tests simple. ActionErrors errors = new ActionErrors(); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("default.testing.errors.tag")); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("default.testing.errors.tag2")); request.setAttribute("MY_ERRORS_KEY", errors); %> My Errors go here: My Errors go here:My Errors Text (fr)My Errors Text 2 (fr) My Errors go here: My Errors go here: <% //This should be done in your action. I do it here to keep the tests simple. ActionErrors errors = new ActionErrors(); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("alternate.testing.errors.tag")); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("alternate.testing.errors.tag2")); request.setAttribute("MY_ERRORS_KEY", errors); %> My Errors go here: My Errors go here:My Alternate Errors Text (fr)My Alternate Errors Text 2 (fr) My Errors go here: My Errors go here: <% //This should be done in your action. I do it here to keep the tests simple. ActionErrors errors = new ActionErrors(); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("default.testing.errors.tag")); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("default.testing.errors.tag2")); request.setAttribute("MY_ERRORS_KEY", errors); %> My Errors go here: My Errors go here:My Errors Text (fr)My Errors Text 2 (fr) My Errors go here: My Errors go here: <% //This should be done in your action. I do it here to keep the tests simple. ActionErrors errors = new ActionErrors(); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("alternate.testing.errors.tag")); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("alternate.testing.errors.tag2")); request.setAttribute("MY_ERRORS_KEY", errors); %> My Errors go here: My Errors go here:My Alternate Errors Text (fr)My Alternate Errors Text 2 (fr) My Errors go here: My Errors go here: <% //This should be done in your action. I do it here to keep the tests simple. ActionErrors errors = new ActionErrors(); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("default.testing.errors.tag")); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("default.testing.errors.tag2")); request.setAttribute("MY_ERRORS_KEY", errors); %> My Errors go here: My Errors go here:My Errors Text (fr)My Errors Text 2 (fr) My Errors go here: My Errors go here: <% //This should be done in your action. I do it here to keep the tests simple. ActionErrors errors = new ActionErrors(); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("alternate.testing.errors.tag")); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("alternate.testing.errors.tag2")); request.setAttribute("MY_ERRORS_KEY", errors); %> My Errors go here: My Errors go here:My Alternate Errors Text (fr)My Alternate Errors Text 2 (fr) <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestErrorsTag4.jsp0000644000175000017500000003207110404045210031324 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@page import="org.apache.struts.Globals"%> <%@page import="org.apache.struts.action.ActionError"%> <%@page import="org.apache.struts.action.ActionErrors"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> My Errors go here: My Errors go here: <% //This should be done in your action. I do it here to keep the tests simple. ActionErrors errors = new ActionErrors(); errors.add("someProperty", new ActionError("default.testing.errors.tag")); errors.add("someProperty", new ActionError("default.testing.errors.tag2")); request.setAttribute("MY_ERRORS_KEY", errors); %> My Errors go here: My Errors go here:My Errors TextMy Errors Text 2 My Errors go here: My Errors go here: <% //This should be done in your action. I do it here to keep the tests simple. ActionErrors errors = new ActionErrors(); errors.add("someProperty", new ActionError("alternate.testing.errors.tag")); errors.add("someProperty", new ActionError("alternate.testing.errors.tag2")); request.setAttribute("MY_ERRORS_KEY", errors); %> My Errors go here: My Errors go here:My Alternate Errors TextMy Alternate Errors Text 2 My Errors go here: My Errors go here: <% //This should be done in your action. I do it here to keep the tests simple. ActionErrors errors = new ActionErrors(); errors.add("someProperty", new ActionError("default.testing.errors.tag")); errors.add("someProperty", new ActionError("default.testing.errors.tag2")); request.setAttribute("MY_ERRORS_KEY", errors); %> My Errors go here: My Errors go here:My Errors Text (fr)My Errors Text 2 (fr) My Errors go here: My Errors go here: <% //This should be done in your action. I do it here to keep the tests simple. ActionErrors errors = new ActionErrors(); errors.add("someProperty", new ActionError("alternate.testing.errors.tag")); errors.add("someProperty", new ActionError("alternate.testing.errors.tag2")); request.setAttribute("MY_ERRORS_KEY", errors); %> My Errors go here: My Errors go here:My Alternate Errors Text (fr)My Alternate Errors Text 2 (fr) My Errors go here: My Errors go here: <% //This should be done in your action. I do it here to keep the tests simple. ActionErrors errors = new ActionErrors(); errors.add("someProperty", new ActionError("default.testing.errors.tag")); errors.add("someProperty", new ActionError("default.testing.errors.tag2")); request.setAttribute("MY_ERRORS_KEY", errors); %> My Errors go here: My Errors go here:My Errors Text (fr)My Errors Text 2 (fr) My Errors go here: My Errors go here: <% //This should be done in your action. I do it here to keep the tests simple. ActionErrors errors = new ActionErrors(); errors.add("someProperty", new ActionError("alternate.testing.errors.tag")); errors.add("someProperty", new ActionError("alternate.testing.errors.tag2")); request.setAttribute("MY_ERRORS_KEY", errors); %> My Errors go here: My Errors go here:My Alternate Errors Text (fr)My Alternate Errors Text 2 (fr) My Errors go here: My Errors go here: <% //This should be done in your action. I do it here to keep the tests simple. ActionErrors errors = new ActionErrors(); errors.add("someProperty", new ActionError("default.testing.errors.tag")); errors.add("someProperty", new ActionError("default.testing.errors.tag2")); request.setAttribute("MY_ERRORS_KEY", errors); %> My Errors go here: My Errors go here:My Errors Text (fr)My Errors Text 2 (fr) My Errors go here: My Errors go here: <% //This should be done in your action. I do it here to keep the tests simple. ActionErrors errors = new ActionErrors(); errors.add("someProperty", new ActionError("alternate.testing.errors.tag")); errors.add("someProperty", new ActionError("alternate.testing.errors.tag2")); request.setAttribute("MY_ERRORS_KEY", errors); %> My Errors go here: My Errors go here:My Alternate Errors Text (fr)My Alternate Errors Text 2 (fr) <% //This should be done in your action. I do it here to keep the tests simple. ActionErrors errors = new ActionErrors(); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("default.testing.errors.tag")); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("default.testing.errors.tag2")); request.setAttribute(Globals.ERROR_KEY, errors); %> My Errors go here: My Errors go here:custom_error_headerMy Errors TextMy Errors Text 2custom_error_footer <% //This should be done in your action. I do it here to keep the tests simple. ActionErrors errors = new ActionErrors(); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("alternate.testing.errors.tag")); errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("alternate.testing.errors.tag2")); request.setAttribute(Globals.ERROR_KEY, errors); %> My Errors go here: My Errors go here:custom_alternate_error_headerMy Alternate Errors TextMy Alternate Errors Text 2custom_alternate_error_footer <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestFileTag1.jsp0000644000175000017500000002337610404045242030741 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestFileTag2.jsp0000644000175000017500000002306210404045222030730 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@page import="org.apache.struts.Globals"%> <%@page import="org.apache.struts.action.ActionMessage"%> <%@page import="org.apache.struts.action.ActionMessages"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <% ActionMessages errors = new ActionMessages(); errors.add("string", new ActionMessage("default.testing.errors.tag")); request.setAttribute(Globals.ERROR_KEY, errors); %> <% ActionMessages errors = new ActionMessages(); errors.add("string", new ActionMessage("default.testing.errors.tag")); request.setAttribute(Globals.ERROR_KEY, errors); %> <% ActionMessages errors = new ActionMessages(); errors.add("string", new ActionMessage("default.testing.errors.tag")); request.setAttribute(Globals.ERROR_KEY, errors); %> File Value Here <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestFormTag1.jsp0000644000175000017500000002107410404045210030751 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="org.apache.struts.taglib.TaglibTestBase"%> <%@page import="org.apache.oro.text.perl.Perl5Util"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
    ">
    " enctype="multipart/form-data">
    " accept-charset="UTF-8">
    ">
    ">
    ">
    ">
    ">
    ">
    ">
    ">
    " onreset="script goes here">
    " onsubmit="script goes here">
    " style="style.goes.here">
    " class="style.goes.here">
    ">
    " target="_new">
    <% String expected = (String) pageContext.getAttribute("EXPECTED_RESULTS"); String compareTo = (String) pageContext.getAttribute("TEST_RESULTS"); if ((expected == null) || (expected == null)){ TaglibTestBase.fail("An invalid (or mispelled) test on this page was called. Please verify that you've setup the tests (and spellings) correctly."); } TaglibTestBase.assertResults(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestFrameTag1.jsp0000644000175000017500000002464710404045234031117 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@page import="java.util.HashMap"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> "> "> " frameborder="XXX"> " name="XXX"> " longdesc="XXX"> " marginheight="15"> " marginwidth="10"> "> "> "> "> "> "> "> "> " noresize="noresize"> " noresize="noresize"> "> "> "> "> <% String expected = (String) pageContext.getAttribute("EXPECTED_RESULTS"); String compareTo = (String) pageContext.getAttribute("TEST_RESULTS"); if ((expected == null) || (expected == null)){ Assert.fail("An invalid (or mispelled) test on this page was called. Please verify that you've setup the tests (and spellings) correctly."); } Assert.assertEquals(expected, compareTo); %>libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestFrameTag2.jsp0000644000175000017500000002535410404045216031114 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@page import="java.util.HashMap"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> ?myParam=paramValue"> ?myParam=paramPropertyValue"> ?myParam=paramValue"> ?myParam=paramPropertyValue"> ?myParam=paramValue"> ?myParam=paramPropertyValue"> ?myParam=paramValue"> ?myParam=paramPropertyValue"> " scrolling="yes"> " scrolling="Yes"> " scrolling="YES"> " scrolling="no"> " scrolling="No"> " scrolling="NO"> " scrolling="auto"> " scrolling="Auto"> " scrolling="AUTO"> " scrolling="XXX"> " style="XXX"> " title="XXX"> " title="Testing Message"> " title="Testing Message"> ?org.apache.struts.taglib.html.TOKEN=Some_Token_Here"> <% String expected = (String) pageContext.getAttribute("EXPECTED_RESULTS"); String compareTo = (String) pageContext.getAttribute("TEST_RESULTS"); if ((expected == null) || (expected == null)){ Assert.fail("An invalid (or mispelled) test on this page was called. Please verify that you've setup the tests (and spellings) correctly."); } Assert.assertEquals(expected, compareTo); %>libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestFrameTag3.jsp0000644000175000017500000002426510404045204031112 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@page import="java.util.HashMap"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> "> "> " frameborder="XXX"> " name="XXX"> " longdesc="XXX"> " marginheight="15"> " marginwidth="10"> "> "> "> "> "> "> "> "> " noresize="noresize"> " noresize="noresize"> "> "> "> "> <% String expected = (String) pageContext.getAttribute("EXPECTED_RESULTS"); String compareTo = (String) pageContext.getAttribute("TEST_RESULTS"); if ((expected == null) || (expected == null)){ Assert.fail("An invalid (or mispelled) test on this page was called. Please verify that you've setup the tests (and spellings) correctly."); } Assert.assertEquals(expected, compareTo); %>libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestFrameTag4.jsp0000644000175000017500000002367210404045234031117 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@page import="java.util.HashMap"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> ?myParam=paramValue"> ?myParam=paramPropertyValue"> ?myParam=paramValue"> ?myParam=paramPropertyValue"> ?myParam=paramValue"> ?myParam=paramPropertyValue"> ?myParam=paramValue"> ?myParam=paramPropertyValue"> " scrolling="yes"> " scrolling="Yes"> " scrolling="YES"> " scrolling="no"> " scrolling="No"> " scrolling="NO"> " scrolling="auto"> " scrolling="Auto"> " scrolling="AUTO"> " scrolling="XXX"> " style="XXX"> " title="XXX"> " title="Testing Message"> ?org.apache.struts.taglib.html.TOKEN=Some_Token_Here"> <% String expected = (String) pageContext.getAttribute("EXPECTED_RESULTS"); String compareTo = (String) pageContext.getAttribute("TEST_RESULTS"); if ((expected == null) || (expected == null)){ Assert.fail("An invalid (or mispelled) test on this page was called. Please verify that you've setup the tests (and spellings) correctly."); } Assert.assertEquals(expected, compareTo); %>libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestFrameTag5.jsp0000644000175000017500000002461110404045216031112 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@page import="java.util.HashMap"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> "> "> " frameborder="XXX"> " name="XXX"> " longdesc="XXX"> " marginheight="15"> " marginwidth="10"> "> "> "> "> "> "> "> "> " noresize="noresize"> " noresize="noresize"> "> "> "> "> <% String expected = (String) pageContext.getAttribute("EXPECTED_RESULTS"); String compareTo = (String) pageContext.getAttribute("TEST_RESULTS"); if ((expected == null) || (expected == null)){ Assert.fail("An invalid (or mispelled) test on this page was called. Please verify that you've setup the tests (and spellings) correctly."); } Assert.assertEquals(expected, compareTo); %>libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestFrameTag6.jsp0000644000175000017500000002361610404045174031122 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@page import="java.util.HashMap"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> ?myParam=paramValue"> ?myParam=paramPropertyValue"> ?myParam=paramValue"> ?myParam=paramPropertyValue"> ?myParam=paramValue"> ?myParam=paramPropertyValue"> ?myParam=paramValue"> ?myParam=paramPropertyValue"> " scrolling="yes"> " scrolling="Yes"> " scrolling="YES"> " scrolling="no"> " scrolling="No"> " scrolling="NO"> " scrolling="auto"> " scrolling="Auto"> " scrolling="AUTO"> " scrolling="XXX"> " style="XXX"> " title="XXX"> " title="Testing Message"> ?org.apache.struts.taglib.html.TOKEN=Some_Token_Here"> <% String expected = (String) pageContext.getAttribute("EXPECTED_RESULTS"); String compareTo = (String) pageContext.getAttribute("TEST_RESULTS"); if ((expected == null) || (expected == null)){ Assert.fail("An invalid (or mispelled) test on this page was called. Please verify that you've setup the tests (and spellings) correctly."); } Assert.assertEquals(expected, compareTo); %>libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestFrameTag7.jsp0000644000175000017500000002536510404045234031123 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@page import="java.util.HashMap"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> "> "> " frameborder="XXX"> " name="XXX"> " longdesc="XXX"> " marginheight="15"> " marginwidth="10"> "> "> "> "> "> "> "> "> " noresize="noresize"> " noresize="noresize"> "> "> "> "> <% String expected = (String) pageContext.getAttribute("EXPECTED_RESULTS"); String compareTo = (String) pageContext.getAttribute("TEST_RESULTS"); if ((expected == null) || (expected == null)){ Assert.fail("An invalid (or mispelled) test on this page was called. Please verify that you've setup the tests (and spellings) correctly."); } Assert.assertEquals(expected, compareTo); %>libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestFrameTag8.jsp0000644000175000017500000002476610404045216031130 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@page import="java.util.HashMap"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> ?myParam=paramValue"> ?myParam=paramPropertyValue"> ?myParam=paramValue"> ?myParam=paramPropertyValue"> ?myParam=paramValue"> ?myParam=paramPropertyValue"> ?myParam=paramValue"> ?myParam=paramPropertyValue"> " scrolling="yes"> " scrolling="Yes"> " scrolling="YES"> " scrolling="no"> " scrolling="No"> " scrolling="NO"> " scrolling="auto"> " scrolling="Auto"> " scrolling="AUTO"> " scrolling="XXX"> " style="XXX"> " title="XXX"> " title="Testing Message"> ?org.apache.struts.taglib.html.TOKEN=Some_Token_Here"> <% String expected = (String) pageContext.getAttribute("EXPECTED_RESULTS"); String compareTo = (String) pageContext.getAttribute("TEST_RESULTS"); if ((expected == null) || (expected == null)){ Assert.fail("An invalid (or mispelled) test on this page was called. Please verify that you've setup the tests (and spellings) correctly."); } Assert.assertEquals(expected, compareTo); %>libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestHiddenTag1.jsp0000644000175000017500000002036410404045220031243 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestHiddenTag2.jsp0000644000175000017500000001423510404045204031246 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestHtmlTag.jsp0000644000175000017500000002060310404045214030672 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@page import="org.apache.struts.Globals"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> true true true true true <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestImageTag1.jsp0000644000175000017500000002470110404045210031070 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> " accesskey="XXX"> " align="XXX"> " alt="XXX"> " alt="Testing Message"> " alt="Testing Message"> " alt="Message D'Essai"> " alt="Message D'Essai"> " border="XXX"> " disabled="disabled"> " disabled="disabled"> " disabled="disabled"> "> "> "> " alt="Message D'Essai"> " onblur="XXX"> " onchange="XXX"> " onclick="XXX"> " ondblclick="XXX"> " onfocus="XXX"> " onkeydown="XXX"> " onkeypress="XXX"> " onkeyup="XXX"> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestImageTag2.jsp0000644000175000017500000002512710404045242031101 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> " onmousedown="XXX"> " onmousemove="XXX"> " onmouseout="XXX"> " onmouseover="XXX"> " onmouseup="XXX"> "> " style="XXX"> " class="XXX"> " id="XXX"> " tabindex="XXX"> " title="XXX"> " title="Testing Message"> " title="Testing Message"> " title="Message D'Essai"> " title="Message D'Essai"> " value="XXX"> "> "> "> "> "> "> "> "> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestImageTag3.jsp0000644000175000017500000003131510404045222031074 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> " accesskey="XXX"> " align="XXX"> " alt="XXX"> " alt="Testing Message"> " alt="Testing Message"> " alt="Message D'Essai"> " alt="Message D'Essai"> " border="XXX"> " disabled="disabled"> " disabled="disabled"> " disabled="disabled"> "> "> "> " alt="Testing Message"> " alt="Testing Message"> " alt="Message D'Essai"> " alt="Message D'Essai"> " onblur="XXX"> " onchange="XXX"> " onclick="XXX"> " ondblclick="XXX"> " onfocus="XXX"> " onkeydown="XXX"> " onkeypress="XXX"> " onkeyup="XXX"> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestImageTag4.jsp0000644000175000017500000002646510404045210031104 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> " onmousedown="XXX"> " onmousemove="XXX"> " onmouseout="XXX"> " onmouseover="XXX"> " onmouseup="XXX"> "> " style="XXX"> " class="XXX"> " id="XXX"> " tabindex="XXX"> " title="XXX"> " title="Testing Message"> " title="Testing Message"> " title="Message D'Essai"> " title="Message D'Essai"> " value="XXX"> "> "> "> "> "> "> "> "> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestImageTag5.jsp0000644000175000017500000002376410404045240031107 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> " accesskey="XXX"> " align="XXX"> " alt="XXX"> " alt="Testing Message"> " alt="Testing Message"> " alt="Message D'Essai"> " alt="Message D'Essai"> " border="XXX"> " disabled="disabled"> " disabled="disabled"> " disabled="disabled"> "> "> "> " alt="Message D'Essai"> " onblur="XXX"> " onchange="XXX"> " onclick="XXX"> " ondblclick="XXX"> " onfocus="XXX"> " onkeydown="XXX"> " onkeypress="XXX"> " onkeyup="XXX"> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException ("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestImageTag6.jsp0000644000175000017500000002415010404045222031076 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> " onmousedown="XXX"> " onmousemove="XXX"> " onmouseout="XXX"> " onmouseover="XXX"> " onmouseup="XXX"> "> " style="XXX"> " class="XXX"> " id="XXX"> " tabindex="XXX"> " title="XXX"> " title="Testing Message"> " title="Testing Message"> " title="Message D'Essai"> " title="Message D'Essai"> " value="XXX"> "> "> "> "> "> "> "> "> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException ("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestImageTag7.jsp0000644000175000017500000002770610404045210031106 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> " accesskey="XXX"> " align="XXX"> " alt="XXX"> " alt="Testing Message"> " alt="Testing Message"> " alt="Message D'Essai"> " alt="Message D'Essai"> " border="XXX"> " disabled="disabled"> " disabled="disabled"> " disabled="disabled"> "> "> "> " alt="Testing Message"> " alt="Testing Message"> " alt="Message D'Essai"> " alt="Message D'Essai"> " onblur="XXX"> " onchange="XXX"> " onclick="XXX"> " ondblclick="XXX"> " onfocus="XXX"> " onkeydown="XXX"> " onkeypress="XXX"> " onkeyup="XXX"> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException ("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestImageTag8.jsp0000644000175000017500000002515010404045240031101 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> " onmousedown="XXX"> " onmousemove="XXX"> " onmouseout="XXX"> " onmouseover="XXX"> " onmouseup="XXX"> "> " style="XXX"> " class="XXX"> " id="XXX"> " tabindex="XXX"> " title="XXX"> " title="Testing Message"> " title="Testing Message"> " title="Message D'Essai"> " title="Message D'Essai"> " value="XXX"> "> "> "> "> "> "> "> "> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException ("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestImgTag1.jsp0000644000175000017500000002265710404045242030577 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> " align="left"> " align="right"> " align="top"> " align="middle"> " align="bottom"> " align="texttop"> " align="absmiddle"> " align="absbottom"> " align="any value"> " align="XXX"> " alt="XXX"> " alt="Testing Message"> " alt="Testing Message"> " alt="Message D'Essai"> " alt="Message D'Essai"> " border="XXX"> " height="15"> " height="155px"> " hspace="15"> " name="nameOfImage"> " ismap="nameOfMap"> " alt="Message D'Essai"> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException ("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestImgTag1a.jsp0000644000175000017500000001234210404045246030732 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> "> "> "> "> "> "> "> "> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException ("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestImgTag2.jsp0000644000175000017500000002220510404045222030563 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> " onclick="onclick"> " ondblclick="ondblclick"> " onkeydown="onkeydown"> " onkeypress="onkeypress"> " onkeyup="onkeyup"> " onmousedown="XXX"> " onmousemove="XXX"> " onmouseout="XXX"> " onmouseover="XXX"> " onmouseup="XXX"> " style="XXX"> " class="XXX"> " id="XXX"> " title="XXX"> " title="Testing Message"> " title="Testing Message"> " title="Message D'Essai"> " title="Message D'Essai"> " usemap="XXX"> " vspace="15"> " width="15"> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException ("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestImgTag3.jsp0000644000175000017500000002414610404045210030567 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> " align="left"> " align="right"> " align="top"> " align="middle"> " align="bottom"> " align="texttop"> " align="absmiddle"> " align="absbottom"> " align="any value"> " align="XXX"> " alt="XXX"> " alt="Testing Message"> " alt="Testing Message"> " alt="Message D'Essai"> " alt="Message D'Essai"> " border="XXX"> " height="15"> " height="155px"> " hspace="15"> " name="nameOfImage"> " ismap="nameOfMap"> " alt="Message D'Essai"> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException ("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestImgTag3a.jsp0000644000175000017500000001303010404045174030727 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> "> "> "> "> "> "> "> "> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException ("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestImgTag4.jsp0000644000175000017500000002344310404045240030572 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> " onclick="onclick"> " ondblclick="ondblclick"> " onkeydown="onkeydown"> " onkeypress="onkeypress"> " onkeyup="onkeyup"> " onmousedown="XXX"> " onmousemove="XXX"> " onmouseout="XXX"> " onmouseover="XXX"> " onmouseup="XXX"> " style="XXX"> " class="XXX"> " id="XXX"> " title="XXX"> " title="Testing Message"> " title="Testing Message"> " title="Message D'Essai"> " title="Message D'Essai"> " usemap="XXX"> " vspace="15"> " width="15"> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException ("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestImgTag5.jsp0000644000175000017500000002030710404045222030567 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> XXX Testing Message Testing Message Message D'Essai Message D'Essai Message D'Essai <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException ("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestImgTag5a.jsp0000644000175000017500000001241010404045210030721 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> "> "> "> "> "> "> "> "> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException ("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestImgTag6.jsp0000644000175000017500000001773010404045210030573 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException ("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestImgTag7.jsp0000644000175000017500000002160310404045240030571 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> XXX Testing Message Testing Message Message D'Essai Message D'Essai Message D'Essai <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException ("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestImgTag7a.jsp0000644000175000017500000001301310404045222030726 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> "> "> "> "> "> "> "> "> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException ("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestImgTag8.jsp0000644000175000017500000002117110404045222030572 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException ("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestLinkTag1.jsp0000644000175000017500000003315710404045204030753 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@page import="java.util.HashMap"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> Test Link ">Test Link Test Link " accesskey="XXX">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link ">Test Link Test Link ">Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link ">Test Link Test Link ">Test Link ">Test Link Test Link Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link <% String expected = (String) pageContext.getAttribute("EXPECTED_RESULTS"); String compareTo = (String) pageContext.getAttribute("TEST_RESULTS"); if ((expected == null) || (compareTo == null)){ Assert.fail("An invalid (or mispelled) test on this page was called. Please verify that you've setup the tests (and spellings) correctly."); } Assert.assertEquals(expected, compareTo); %>libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestLinkTag2.jsp0000644000175000017500000003410110404045234030745 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@page import="java.util.HashMap"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> Test Link " onblur="onblur">Test Link Test Link " onclick="onclick">Test Link Test Link " ondblclick="ondblclick">Test Link Test Link " onfocus="onfocus">Test Link Test Link " onkeydown="onkeydown">Test Link Test Link " onkeypress="onkeypress">Test Link Test Link " onkeyup="onkeyup">Test Link Test Link " onmousedown="onmousedown">Test Link Test Link " onmousemove="onmousemove">Test Link Test Link " onmouseout="onmouseout">Test Link Test Link " onmouseover="onmouseover">Test Link Test Link " onmouseup="onmouseup">Test Link Test Link ?myParam=paramValue">Test Link Test Link ?myParam=paramPropertyValue">Test Link Test Link ?myParam=paramValue">Test Link Test Link ?myParam=paramPropertyValue">Test Link Test Link ?myParam=paramValue">Test Link Test Link ?myParam=paramPropertyValue">Test Link Test Link ?myParam=paramValue">Test Link Test Link ?myParam=paramPropertyValue">Test Link Test Link " style="XXX">Test Link Test Link " class="XXX">Test Link Test Link " id="XXX">Test Link Test Link " tabindex="4">Test Link Test Link " target="_new">Test Link Test Link " title="XXX">Test Link Test Link " title="Testing Message">Test Link Test Link " title="Testing Message">Test Link Test Link ?org.apache.struts.taglib.html.TOKEN=Some_Token_Here">Test Link <% String expected = (String) pageContext.getAttribute("EXPECTED_RESULTS"); String compareTo = (String) pageContext.getAttribute("TEST_RESULTS"); if ((expected == null) || (compareTo == null)){ Assert.fail("An invalid (or mispelled) test on this page was called. Please verify that you've setup the tests (and spellings) correctly."); } Assert.assertEquals(expected, compareTo); %>libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestLinkTag3.jsp0000644000175000017500000003274410404045216030761 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@page import="org.apache.struts.util.RequestUtils"%> <%@page import="java.util.HashMap"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> Test Link ">Test Link Test Link " accesskey="XXX">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link ">Test Link Test Link ">Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link ">Test Link Test Link ">Test Link ">Test Link Test Link Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link <% String expected = (String) pageContext.getAttribute("EXPECTED_RESULTS"); String compareTo = (String) pageContext.getAttribute("TEST_RESULTS"); if ((expected == null) || (compareTo == null)){ Assert.fail("An invalid (or mispelled) test on this page was called. Please verify that you've setup the tests (and spellings) correctly."); } Assert.assertEquals(expected, compareTo); %>libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestLinkTag4.jsp0000644000175000017500000003571310404045174030764 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@page import="org.apache.struts.util.RequestUtils"%> <%@page import="java.util.HashMap"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> Test Link " onblur="onblur">Test Link Test Link " onclick="onclick">Test Link Test Link " ondblclick="ondblclick">Test Link Test Link " onfocus="onfocus">Test Link Test Link " onkeydown="onkeydown">Test Link Test Link " onkeypress="onkeypress">Test Link Test Link " onkeyup="onkeyup">Test Link Test Link " onmousedown="onmousedown">Test Link Test Link " onmousemove="onmousemove">Test Link Test Link " onmouseout="onmouseout">Test Link Test Link " onmouseover="onmouseover">Test Link Test Link " onmouseup="onmouseup">Test Link Test Link ?myParam=paramValue">Test Link Test Link ?myParam=paramPropertyValue">Test Link Test Link ?myParam=paramValue">Test Link Test Link ?myParam=paramPropertyValue">Test Link Test Link ?myParam=paramValue">Test Link Test Link ?myParam=paramPropertyValue">Test Link Test Link ?myParam=paramValue">Test Link Test Link ?myParam=paramPropertyValue">Test Link Test Link " style="XXX">Test Link Test Link " class="XXX">Test Link Test Link " id="XXX">Test Link Test Link " tabindex="4">Test Link Test Link " target="_new">Test Link Test Link " title="XXX">Test Link Test Link " title="Testing Message">Test Link Test Link ?org.apache.struts.taglib.html.TOKEN=Some_Token_Here">Test Link <% String expected = (String) pageContext.getAttribute("EXPECTED_RESULTS"); String compareTo = (String) pageContext.getAttribute("TEST_RESULTS"); if ((expected == null) || (compareTo == null)){ Assert.fail("An invalid (or mispelled) test on this page was called. Please verify that you've setup the tests (and spellings) correctly."); } Assert.assertEquals(expected, compareTo); %>libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestLinkTag5.jsp0000644000175000017500000003476310404045234030766 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@page import="org.apache.struts.util.RequestUtils"%> <%@page import="java.util.HashMap"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> Test Link ">Test Link Test Link " accesskey="XXX">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link ">Test Link Test Link ">Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link ">Test Link Test Link ">Test Link ">Test Link Test Link Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link <% String expected = (String) pageContext.getAttribute("EXPECTED_RESULTS"); String compareTo = (String) pageContext.getAttribute("TEST_RESULTS"); if ((expected == null) || (compareTo == null)){ Assert.fail("An invalid (or mispelled) test on this page was called. Please verify that you've setup the tests (and spellings) correctly."); } Assert.assertEquals(expected, compareTo); %>libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestLinkTag6.jsp0000644000175000017500000003562310404045216030763 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@page import="org.apache.struts.util.RequestUtils"%> <%@page import="java.util.HashMap"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> Test Link " onblur="onblur">Test Link Test Link " onclick="onclick">Test Link Test Link " ondblclick="ondblclick">Test Link Test Link " onfocus="onfocus">Test Link Test Link " onkeydown="onkeydown">Test Link Test Link " onkeypress="onkeypress">Test Link Test Link " onkeyup="onkeyup">Test Link Test Link " onmousedown="onmousedown">Test Link Test Link " onmousemove="onmousemove">Test Link Test Link " onmouseout="onmouseout">Test Link Test Link " onmouseover="onmouseover">Test Link Test Link " onmouseup="onmouseup">Test Link Test Link ?myParam=paramValue">Test Link Test Link ?myParam=paramPropertyValue">Test Link Test Link ?myParam=paramValue">Test Link Test Link ?myParam=paramPropertyValue">Test Link Test Link ?myParam=paramValue">Test Link Test Link ?myParam=paramPropertyValue">Test Link Test Link ?myParam=paramValue">Test Link Test Link ?myParam=paramPropertyValue">Test Link Test Link " style="XXX">Test Link Test Link " class="XXX">Test Link Test Link " id="XXX">Test Link Test Link " tabindex="4">Test Link Test Link " target="_new">Test Link Test Link " title="XXX">Test Link Test Link " title="Testing Message">Test Link Test Link ?org.apache.struts.taglib.html.TOKEN=Some_Token_Here">Test Link <% String expected = (String) pageContext.getAttribute("EXPECTED_RESULTS"); String compareTo = (String) pageContext.getAttribute("TEST_RESULTS"); if ((expected == null) || (compareTo == null)){ Assert.fail("An invalid (or mispelled) test on this page was called. Please verify that you've setup the tests (and spellings) correctly."); } Assert.assertEquals(expected, compareTo); %>libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestLinkTag7.jsp0000644000175000017500000003476310404045174030773 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@page import="org.apache.struts.util.RequestUtils"%> <%@page import="java.util.HashMap"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> Test Link ">Test Link Test Link " accesskey="XXX">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link ">Test Link Test Link ">Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link ">Test Link Test Link ">Test Link ">Test Link Test Link Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link Test Link ">Test Link <% String expected = (String) pageContext.getAttribute("EXPECTED_RESULTS"); String compareTo = (String) pageContext.getAttribute("TEST_RESULTS"); if ((expected == null) || (compareTo == null)){ Assert.fail("An invalid (or mispelled) test on this page was called. Please verify that you've setup the tests (and spellings) correctly."); } Assert.assertEquals(expected, compareTo); %>libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestLinkTag8.jsp0000644000175000017500000003562310404045234030765 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@page import="org.apache.struts.util.RequestUtils"%> <%@page import="java.util.HashMap"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> Test Link " onblur="onblur">Test Link Test Link " onclick="onclick">Test Link Test Link " ondblclick="ondblclick">Test Link Test Link " onfocus="onfocus">Test Link Test Link " onkeydown="onkeydown">Test Link Test Link " onkeypress="onkeypress">Test Link Test Link " onkeyup="onkeyup">Test Link Test Link " onmousedown="onmousedown">Test Link Test Link " onmousemove="onmousemove">Test Link Test Link " onmouseout="onmouseout">Test Link Test Link " onmouseover="onmouseover">Test Link Test Link " onmouseup="onmouseup">Test Link Test Link ?myParam=paramValue">Test Link Test Link ?myParam=paramPropertyValue">Test Link Test Link ?myParam=paramValue">Test Link Test Link ?myParam=paramPropertyValue">Test Link Test Link ?myParam=paramValue">Test Link Test Link ?myParam=paramPropertyValue">Test Link Test Link ?myParam=paramValue">Test Link Test Link ?myParam=paramPropertyValue">Test Link Test Link " style="XXX">Test Link Test Link " class="XXX">Test Link Test Link " id="XXX">Test Link Test Link " tabindex="4">Test Link Test Link " target="_new">Test Link Test Link " title="XXX">Test Link Test Link " title="Testing Message">Test Link Test Link ?org.apache.struts.taglib.html.TOKEN=Some_Token_Here">Test Link <% String expected = (String) pageContext.getAttribute("EXPECTED_RESULTS"); String compareTo = (String) pageContext.getAttribute("TEST_RESULTS"); if ((expected == null) || (compareTo == null)){ Assert.fail("An invalid (or mispelled) test on this page was called. Please verify that you've setup the tests (and spellings) correctly."); } Assert.assertEquals(expected, compareTo); %>libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestMessagesTag1.jsp0000644000175000017500000005077410404045214031632 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@page import="java.util.HashMap"%> <%@page import="org.apache.struts.util.MessageResources"%> <%@page import="org.apache.struts.Globals"%> <%@page import="org.apache.struts.action.ActionError"%> <%@page import="org.apache.struts.action.ActionMessage"%> <%@page import="org.apache.struts.action.ActionMessages"%> <%@page import="org.apache.struts.Globals"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <% /** * From the Docs: * * * Displays a set of messages prepared by a business logic component and * stored as an ActionMessages object, ActionErrors object, a String, * or a String array in request scope. If such a bean is not found, nothing * will be rendered. * * The tests are setup to test all possible scenarios with each ojbect listed. * Using Globals.ERROR_KEY in the request * TestMessagesTag1.jsp - uses ActionMessages to store any keys for testing * TestMessagesTag2.jsp - uses a String to store any keys for testing * TestMessagesTag3.jsp - uses a String Array to store any keys for testing * TestMessagesTag4.jsp - uses ActionErrors to store any keys for testing * * Using Globals.MESSAGE_KEY in the request * TestMessagesTag5.jsp - uses ActionMessages to store any keys for testing * TestMessagesTag6.jsp - uses a String to store any keys for testing * TestMessagesTag7.jsp - uses a String Array to store any keys for testing * TestMessagesTag8.jsp - uses ActionErrors to store any keys for testing * **/ %> Messages: Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); request.setAttribute(Globals.ERROR_KEY, messages); %> Messages: Message: Messages: Message:Testing Message Message:Testing Message <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("default.bundle.message")); messages.add("myproperty2", new ActionMessage("default.bundle.message")); request.setAttribute(Globals.ERROR_KEY, messages); %> Messages: Message: Messages: custom_error_header Message:Testing Message Message:Testing Message <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("default.bundle.message")); messages.add("myproperty2", new ActionMessage("default.bundle.message")); request.setAttribute(Globals.ERROR_KEY, messages); %> Messages: Message: Messages: custom_error_header Message:Testing Message Message:Testing Message custom_error_footer <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("default.bundle.message")); messages.add("myproperty2", new ActionMessage("default.bundle.message")); request.setAttribute(Globals.ERROR_KEY, messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); request.setAttribute("my-key", messages); %> Messages: Message: Messages: Message:Testing Message Message:Testing Message <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("default.bundle.message")); messages.add("myproperty2", new ActionMessage("default.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: Message:Testing Message <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("default.bundle.message")); messages.add("myproperty2", new ActionMessage("default.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: custom_error_header Message:Testing Message Message:Testing Message <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("default.bundle.message")); messages.add("myproperty2", new ActionMessage("default.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: custom_error_header Message:Testing Message <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("default.bundle.message")); messages.add("myproperty2", new ActionMessage("default.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: custom_error_header Message:Testing Message Message:Testing Message custom_error_footer <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("default.bundle.message")); messages.add("myproperty2", new ActionMessage("default.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: custom_error_header Message:Testing Message custom_error_footer <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("default.bundle.message")); messages.add("myproperty2", new ActionMessage("default.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); request.setAttribute(Globals.ERROR_KEY, messages); %> Messages: Message: Messages: Message:Testing Message Message:Testing Message <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("alternate.bundle.message")); messages.add("myproperty2", new ActionMessage("alternate.bundle.message")); request.setAttribute(Globals.ERROR_KEY, messages); %> Messages: Message: Messages: custom_alternate_error_header Message:Testing Message Message:Testing Message <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("alternate.bundle.message")); messages.add("myproperty2", new ActionMessage("alternate.bundle.message")); request.setAttribute(Globals.ERROR_KEY, messages); %> Messages: Message: Messages: custom_alternate_error_header Message:Testing Message Message:Testing Message custom_alternate_error_footer <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("alternate.bundle.message")); messages.add("myproperty2", new ActionMessage("alternate.bundle.message")); request.setAttribute(Globals.ERROR_KEY, messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); request.setAttribute("my-key", messages); %> Messages: Message: Messages: Message:Testing Message Message:Testing Message <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("alternate.bundle.message")); messages.add("myproperty2", new ActionMessage("alternate.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: Message:Testing Message <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("alternate.bundle.message")); messages.add("myproperty2", new ActionMessage("alternate.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: custom_alternate_error_header Message:Testing Message Message:Testing Message <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("alternate.bundle.message")); messages.add("myproperty2", new ActionMessage("alternate.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: custom_alternate_error_header Message:Testing Message <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("alternate.bundle.message")); messages.add("myproperty2", new ActionMessage("alternate.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: custom_alternate_error_header Message:Testing Message Message:Testing Message custom_alternate_error_footer <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("alternate.bundle.message")); messages.add("myproperty2", new ActionMessage("alternate.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: custom_alternate_error_header Message:Testing Message custom_alternate_error_footer <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("alternate.bundle.message")); messages.add("myproperty2", new ActionMessage("alternate.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: <% MessageResources messageResources = MessageResources.getMessageResources("org.apache.struts.taglib.LocalStrings"); String expected = (String) pageContext.getAttribute("EXPECTED_RESULTS"); String compareTo = (String) pageContext.getAttribute("TEST_RESULTS"); if ((expected == null) || (compareTo == null)){ Assert.fail(messageResources.getMessage("tests.failure")); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestMessagesTag2.jsp0000644000175000017500000003666410404045246031642 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@page import="java.util.HashMap"%> <%@page import="org.apache.struts.util.MessageResources"%> <%@page import="org.apache.struts.Globals"%> <%@page import="org.apache.struts.action.ActionError"%> <%@page import="org.apache.struts.action.ActionMessage"%> <%@page import="org.apache.struts.action.ActionMessages"%> <%@page import="org.apache.struts.Globals"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <% /** * From the Docs: * * * Displays a set of messages prepared by a business logic component and * stored as an ActionMessages object, ActionErrors object, a String, * or a String array in request scope. If such a bean is not found, nothing * will be rendered. * * The tests are setup to test all possible scenarios with each ojbect listed. * Using Globals.ERROR_KEY in the request * TestMessagesTag1.jsp - uses ActionMessages to store any keys for testing * TestMessagesTag2.jsp - uses a String to store any keys for testing * TestMessagesTag3.jsp - uses a String Array to store any keys for testing * TestMessagesTag4.jsp - uses ActionErrors to store any keys for testing * * Using Globals.MESSAGE_KEY in the request * TestMessagesTag5.jsp - uses ActionMessages to store any keys for testing * TestMessagesTag6.jsp - uses a String to store any keys for testing * TestMessagesTag7.jsp - uses a String Array to store any keys for testing * TestMessagesTag8.jsp - uses ActionErrors to store any keys for testing * **/ %> Messages: Messages: Message: Messages: Messages: Message: Messages: Message:Testing Message <% request.setAttribute(Globals.ERROR_KEY, "default.bundle.message"); %> Messages: Message: Messages: custom_error_header Message:Testing Message <% request.setAttribute(Globals.ERROR_KEY, "default.bundle.message"); %> Messages: Message: Messages: custom_error_header Message:Testing Message custom_error_footer <% request.setAttribute(Globals.ERROR_KEY, "default.bundle.message"); %> Messages: Message: Messages: Messages: Message: Messages: Messages: Message: cool Messages: Message:Testing Message <% request.setAttribute("my-key", "default.bundle.message"); %> Messages: Message: Messages: <% request.setAttribute("my-key", "default.bundle.message"); %> Messages: Message: Messages: custom_error_header Message:Testing Message <% request.setAttribute("my-key", "default.bundle.message"); %> Messages: Message: Messages: <% request.setAttribute("my-key", "default.bundle.message"); %> Messages: Message: Messages: custom_error_header Message:Testing Message custom_error_footer <% request.setAttribute("my-key", "default.bundle.message"); %> Messages: Message: Messages: <% request.setAttribute("my-key", "default.bundle.message"); %> Messages: Message: Messages: Messages: Message: Messages: Message:Testing Message <% request.setAttribute(Globals.ERROR_KEY, "alternate.bundle.message"); %> Messages: Message: Messages: custom_alternate_error_header Message:Testing Message <% request.setAttribute(Globals.ERROR_KEY, "alternate.bundle.message"); %> Messages: Message: Messages: custom_alternate_error_header Message:Testing Message custom_alternate_error_footer <% request.setAttribute(Globals.ERROR_KEY, "alternate.bundle.message"); %> Messages: Message: Messages: Messages: Message: Messages: Messages: Message: Messages: Message:Testing Message <% request.setAttribute("my-key", "alternate.bundle.message"); %> Messages: Message: Messages: <% request.setAttribute("my-key", "alternate.bundle.message"); %> Messages: Message: Messages: custom_alternate_error_header Message:Testing Message <% request.setAttribute("my-key", "alternate.bundle.message"); %> Messages: Message: Messages: <% request.setAttribute("my-key", "alternate.bundle.message"); %> Messages: Message: Messages: custom_alternate_error_header Message:Testing Message custom_alternate_error_footer <% request.setAttribute("my-key", "alternate.bundle.message"); %> Messages: Message: Messages: <% request.setAttribute("my-key", "alternate.bundle.message"); %> Messages: Message: <% MessageResources messageResources = MessageResources.getMessageResources("org.apache.struts.taglib.LocalStrings"); String expected = (String) pageContext.getAttribute("EXPECTED_RESULTS"); String compareTo = (String) pageContext.getAttribute("TEST_RESULTS"); if ((expected == null) || (compareTo == null)){ Assert.fail(messageResources.getMessage("tests.failure")); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestMessagesTag3.jsp0000644000175000017500000004374610404045226031640 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@page import="java.util.HashMap"%> <%@page import="org.apache.struts.util.MessageResources"%> <%@page import="org.apache.struts.Globals"%> <%@page import="org.apache.struts.action.ActionError"%> <%@page import="org.apache.struts.action.ActionMessage"%> <%@page import="org.apache.struts.action.ActionMessages"%> <%@page import="org.apache.struts.Globals"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <% /** * From the Docs: * * * Displays a set of messages prepared by a business logic component and * stored as an ActionMessages object, ActionErrors object, a String, * or a String array in request scope. If such a bean is not found, nothing * will be rendered. * * The tests are setup to test all possible scenarios with each ojbect listed. * Using Globals.ERROR_KEY in the request * TestMessagesTag1.jsp - uses ActionMessages to store any keys for testing * TestMessagesTag2.jsp - uses a String to store any keys for testing * TestMessagesTag3.jsp - uses a String Array to store any keys for testing * TestMessagesTag4.jsp - uses ActionErrors to store any keys for testing * * Using Globals.MESSAGE_KEY in the request * TestMessagesTag5.jsp - uses ActionMessages to store any keys for testing * TestMessagesTag6.jsp - uses a String to store any keys for testing * TestMessagesTag7.jsp - uses a String Array to store any keys for testing * TestMessagesTag8.jsp - uses ActionErrors to store any keys for testing * **/ %> Messages: Messages: Message: Messages: Messages: Message: Messages: Message:Testing Message Message:Testing Message <% String[] messages = new String[2]; messages[0] = "default.bundle.message"; messages[1] = "default.bundle.message"; request.setAttribute(Globals.ERROR_KEY, messages); %> Messages: Message: Messages: custom_error_header Message:Testing Message Message:Testing Message <% String[] messages = new String[2]; messages[0] = "default.bundle.message"; messages[1] = "default.bundle.message"; request.setAttribute(Globals.ERROR_KEY, messages); %> Messages: Message: Messages: custom_error_header Message:Testing Message Message:Testing Message custom_error_footer <% String[] messages = new String[2]; messages[0] = "default.bundle.message"; messages[1] = "default.bundle.message"; request.setAttribute(Globals.ERROR_KEY, messages); %> Messages: Message: Messages: Messages: Message: Messages: Messages: Message: Messages: Message:Testing Message Message:Testing Message <% String[] messages = new String[2]; messages[0] = "default.bundle.message"; messages[1] = "default.bundle.message"; request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% String[] messages = new String[2]; messages[0] = "default.bundle.message"; messages[1] = "default.bundle.message"; request.setAttribute("my-key", messages); %> Messages: Message: Messages: custom_error_header Message:Testing Message Message:Testing Message <% String[] messages = new String[2]; messages[0] = "default.bundle.message"; messages[1] = "default.bundle.message"; request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% String[] messages = new String[2]; messages[0] = "default.bundle.message"; messages[1] = "default.bundle.message"; request.setAttribute("my-key", messages); %> Messages: Message: Messages: custom_error_header Message:Testing Message Message:Testing Message custom_error_footer <% String[] messages = new String[2]; messages[0] = "default.bundle.message"; messages[1] = "default.bundle.message"; request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% String[] messages = new String[2]; messages[0] = "default.bundle.message"; messages[1] = "default.bundle.message"; request.setAttribute("my-key", messages); %> Messages: Message: Messages: Messages: Message: Messages: Message:Testing Message Message:Testing Message <% String[] messages = new String[2]; messages[0] = "alternate.bundle.message"; messages[1] = "alternate.bundle.message"; request.setAttribute(Globals.ERROR_KEY, messages); %> Messages: Message: Messages: custom_alternate_error_header Message:Testing Message Message:Testing Message <% String[] messages = new String[2]; messages[0] = "alternate.bundle.message"; messages[1] = "alternate.bundle.message"; request.setAttribute(Globals.ERROR_KEY, messages); %> Messages: Message: Messages: custom_alternate_error_header Message:Testing Message Message:Testing Message custom_alternate_error_footer <% String[] messages = new String[2]; messages[0] = "alternate.bundle.message"; messages[1] = "alternate.bundle.message"; request.setAttribute(Globals.ERROR_KEY, messages); %> Messages: Message: Messages: Messages: Message: Messages: Messages: Message: Messages: Message:Testing Message Message:Testing Message <% String[] messages = new String[2]; messages[0] = "alternate.bundle.message"; messages[1] = "alternate.bundle.message"; request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% String[] messages = new String[2]; messages[0] = "alternate.bundle.message"; messages[1] = "alternate.bundle.message"; request.setAttribute("my-key", messages); %> Messages: Message: Messages: custom_alternate_error_header Message:Testing Message Message:Testing Message <% String[] messages = new String[2]; messages[0] = "alternate.bundle.message"; messages[1] = "alternate.bundle.message"; request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% String[] messages = new String[2]; messages[0] = "alternate.bundle.message"; messages[1] = "alternate.bundle.message"; request.setAttribute("my-key", messages); %> Messages: Message: Messages: custom_alternate_error_header Message:Testing Message Message:Testing Message custom_alternate_error_footer <% String[] messages = new String[2]; messages[0] = "alternate.bundle.message"; messages[1] = "alternate.bundle.message"; request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% String[] messages = new String[2]; messages[0] = "alternate.bundle.message"; messages[1] = "alternate.bundle.message"; request.setAttribute("my-key", messages); %> Messages: Message: <% MessageResources messageResources = MessageResources.getMessageResources("org.apache.struts.taglib.LocalStrings"); String expected = (String) pageContext.getAttribute("EXPECTED_RESULTS"); String compareTo = (String) pageContext.getAttribute("TEST_RESULTS"); if ((expected == null) || (compareTo == null)){ Assert.fail(messageResources.getMessage("tests.failure")); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestMessagesTag4.jsp0000644000175000017500000005077410404045212031633 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@page import="java.util.HashMap"%> <%@page import="org.apache.struts.util.MessageResources"%> <%@page import="org.apache.struts.Globals"%> <%@page import="org.apache.struts.action.ActionError"%> <%@page import="org.apache.struts.action.ActionMessage"%> <%@page import="org.apache.struts.action.ActionMessages"%> <%@page import="org.apache.struts.Globals"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <% /** * From the Docs: * * * Displays a set of messages prepared by a business logic component and * stored as an ActionMessages object, ActionErrors object, a String, * or a String array in request scope. If such a bean is not found, nothing * will be rendered. * * The tests are setup to test all possible scenarios with each ojbect listed. * Using Globals.ERROR_KEY in the request * TestMessagesTag1.jsp - uses ActionMessages to store any keys for testing * TestMessagesTag2.jsp - uses a String to store any keys for testing * TestMessagesTag3.jsp - uses a String Array to store any keys for testing * TestMessagesTag4.jsp - uses ActionErrors to store any keys for testing * * Using Globals.MESSAGE_KEY in the request * TestMessagesTag5.jsp - uses ActionMessages to store any keys for testing * TestMessagesTag6.jsp - uses a String to store any keys for testing * TestMessagesTag7.jsp - uses a String Array to store any keys for testing * TestMessagesTag8.jsp - uses ActionErrors to store any keys for testing * **/ %> Messages: Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); request.setAttribute(Globals.ERROR_KEY, messages); %> Messages: Message: Messages: Message:Testing Message Message:Testing Message <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("default.bundle.message")); messages.add("myproperty2", new ActionMessage("default.bundle.message")); request.setAttribute(Globals.ERROR_KEY, messages); %> Messages: Message: Messages: custom_error_header Message:Testing Message Message:Testing Message <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("default.bundle.message")); messages.add("myproperty2", new ActionMessage("default.bundle.message")); request.setAttribute(Globals.ERROR_KEY, messages); %> Messages: Message: Messages: custom_error_header Message:Testing Message Message:Testing Message custom_error_footer <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("default.bundle.message")); messages.add("myproperty2", new ActionMessage("default.bundle.message")); request.setAttribute(Globals.ERROR_KEY, messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); request.setAttribute("my-key", messages); %> Messages: Message: Messages: Message:Testing Message Message:Testing Message <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("default.bundle.message")); messages.add("myproperty2", new ActionMessage("default.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: Message:Testing Message <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("default.bundle.message")); messages.add("myproperty2", new ActionMessage("default.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: custom_error_header Message:Testing Message Message:Testing Message <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("default.bundle.message")); messages.add("myproperty2", new ActionMessage("default.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: custom_error_header Message:Testing Message <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("default.bundle.message")); messages.add("myproperty2", new ActionMessage("default.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: custom_error_header Message:Testing Message Message:Testing Message custom_error_footer <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("default.bundle.message")); messages.add("myproperty2", new ActionMessage("default.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: custom_error_header Message:Testing Message custom_error_footer <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("default.bundle.message")); messages.add("myproperty2", new ActionMessage("default.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); request.setAttribute(Globals.ERROR_KEY, messages); %> Messages: Message: Messages: Message:Testing Message Message:Testing Message <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("alternate.bundle.message")); messages.add("myproperty2", new ActionMessage("alternate.bundle.message")); request.setAttribute(Globals.ERROR_KEY, messages); %> Messages: Message: Messages: custom_alternate_error_header Message:Testing Message Message:Testing Message <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("alternate.bundle.message")); messages.add("myproperty2", new ActionMessage("alternate.bundle.message")); request.setAttribute(Globals.ERROR_KEY, messages); %> Messages: Message: Messages: custom_alternate_error_header Message:Testing Message Message:Testing Message custom_alternate_error_footer <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("alternate.bundle.message")); messages.add("myproperty2", new ActionMessage("alternate.bundle.message")); request.setAttribute(Globals.ERROR_KEY, messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); request.setAttribute("my-key", messages); %> Messages: Message: Messages: Message:Testing Message Message:Testing Message <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("alternate.bundle.message")); messages.add("myproperty2", new ActionMessage("alternate.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: Message:Testing Message <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("alternate.bundle.message")); messages.add("myproperty2", new ActionMessage("alternate.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: custom_alternate_error_header Message:Testing Message Message:Testing Message <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("alternate.bundle.message")); messages.add("myproperty2", new ActionMessage("alternate.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: custom_alternate_error_header Message:Testing Message <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("alternate.bundle.message")); messages.add("myproperty2", new ActionMessage("alternate.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: custom_alternate_error_header Message:Testing Message Message:Testing Message custom_alternate_error_footer <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("alternate.bundle.message")); messages.add("myproperty2", new ActionMessage("alternate.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: custom_alternate_error_header Message:Testing Message custom_alternate_error_footer <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("alternate.bundle.message")); messages.add("myproperty2", new ActionMessage("alternate.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: <% MessageResources messageResources = MessageResources.getMessageResources("org.apache.struts.taglib.LocalStrings"); String expected = (String) pageContext.getAttribute("EXPECTED_RESULTS"); String compareTo = (String) pageContext.getAttribute("TEST_RESULTS"); if ((expected == null) || (compareTo == null)){ Assert.fail(messageResources.getMessage("tests.failure")); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestMessagesTag5.jsp0000644000175000017500000004753110404045246031640 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@page import="java.util.HashMap"%> <%@page import="org.apache.struts.util.MessageResources"%> <%@page import="org.apache.struts.Globals"%> <%@page import="org.apache.struts.action.ActionError"%> <%@page import="org.apache.struts.action.ActionMessage"%> <%@page import="org.apache.struts.action.ActionMessages"%> <%@page import="org.apache.struts.Globals"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <% /** * From the Docs: * * * Displays a set of messages prepared by a business logic component and * stored as an ActionMessages object, ActionErrors object, a String, * or a String array in request scope. If such a bean is not found, nothing * will be rendered. * * The tests are setup to test all possible scenarios with each ojbect listed. * Using Globals.ERROR_KEY in the request * TestMessagesTag1.jsp - uses ActionMessages to store any keys for testing * TestMessagesTag2.jsp - uses a String to store any keys for testing * TestMessagesTag3.jsp - uses a String Array to store any keys for testing * TestMessagesTag4.jsp - uses ActionErrors to store any keys for testing * * Using Globals.MESSAGE_KEY in the request * TestMessagesTag5.jsp - uses ActionMessages to store any keys for testing * TestMessagesTag6.jsp - uses a String to store any keys for testing * TestMessagesTag7.jsp - uses a String Array to store any keys for testing * TestMessagesTag8.jsp - uses ActionErrors to store any keys for testing * **/ %> Messages: Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); request.setAttribute(Globals.MESSAGE_KEY, messages); %> Messages: Message: Messages: Message:Testing Message Message:Testing Message <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("default.bundle.message")); messages.add("myproperty2", new ActionMessage("default.bundle.message")); request.setAttribute(Globals.MESSAGE_KEY, messages); %> Messages: Message: Messages: custom_error_header Message:Testing Message Message:Testing Message <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("default.bundle.message")); messages.add("myproperty2", new ActionMessage("default.bundle.message")); request.setAttribute(Globals.MESSAGE_KEY, messages); %> Messages: Message: Messages: custom_error_header Message:Testing Message Message:Testing Message custom_error_footer <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("default.bundle.message")); messages.add("myproperty2", new ActionMessage("default.bundle.message")); request.setAttribute(Globals.MESSAGE_KEY, messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("default.bundle.message")); messages.add("myproperty2", new ActionMessage("default.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("default.bundle.message")); messages.add("myproperty2", new ActionMessage("default.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("default.bundle.message")); messages.add("myproperty2", new ActionMessage("default.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("default.bundle.message")); messages.add("myproperty2", new ActionMessage("default.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("default.bundle.message")); messages.add("myproperty2", new ActionMessage("default.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("default.bundle.message")); messages.add("myproperty2", new ActionMessage("default.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); request.setAttribute(Globals.MESSAGE_KEY, messages); %> Messages: Message: Messages: Message:Testing Message Message:Testing Message <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("alternate.bundle.message")); messages.add("myproperty2", new ActionMessage("alternate.bundle.message")); request.setAttribute(Globals.MESSAGE_KEY, messages); %> Messages: Message: Messages: custom_alternate_error_header Message:Testing Message Message:Testing Message <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("alternate.bundle.message")); messages.add("myproperty2", new ActionMessage("alternate.bundle.message")); request.setAttribute(Globals.MESSAGE_KEY, messages); %> Messages: Message: Messages: custom_alternate_error_header Message:Testing Message Message:Testing Message custom_alternate_error_footer <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("alternate.bundle.message")); messages.add("myproperty2", new ActionMessage("alternate.bundle.message")); request.setAttribute(Globals.MESSAGE_KEY, messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("alternate.bundle.message")); messages.add("myproperty2", new ActionMessage("alternate.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("alternate.bundle.message")); messages.add("myproperty2", new ActionMessage("alternate.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("alternate.bundle.message")); messages.add("myproperty2", new ActionMessage("alternate.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("alternate.bundle.message")); messages.add("myproperty2", new ActionMessage("alternate.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("alternate.bundle.message")); messages.add("myproperty2", new ActionMessage("alternate.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("alternate.bundle.message")); messages.add("myproperty2", new ActionMessage("alternate.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: <% MessageResources messageResources = MessageResources.getMessageResources("org.apache.struts.taglib.LocalStrings"); String expected = (String) pageContext.getAttribute("EXPECTED_RESULTS"); String compareTo = (String) pageContext.getAttribute("TEST_RESULTS"); if ((expected == null) || (compareTo == null)){ Assert.fail(messageResources.getMessage("tests.failure")); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestMessagesTag6.jsp0000644000175000017500000003661010404045226031633 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@page import="java.util.HashMap"%> <%@page import="org.apache.struts.util.MessageResources"%> <%@page import="org.apache.struts.Globals"%> <%@page import="org.apache.struts.action.ActionError"%> <%@page import="org.apache.struts.action.ActionMessage"%> <%@page import="org.apache.struts.action.ActionMessages"%> <%@page import="org.apache.struts.Globals"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <% /** * From the Docs: * * * Displays a set of messages prepared by a business logic component and * stored as an ActionMessages object, ActionErrors object, a String, * or a String array in request scope. If such a bean is not found, nothing * will be rendered. * * The tests are setup to test all possible scenarios with each ojbect listed. * Using Globals.ERROR_KEY in the request * TestMessagesTag1.jsp - uses ActionMessages to store any keys for testing * TestMessagesTag2.jsp - uses a String to store any keys for testing * TestMessagesTag3.jsp - uses a String Array to store any keys for testing * TestMessagesTag4.jsp - uses ActionErrors to store any keys for testing * * Using Globals.MESSAGE_KEY in the request * TestMessagesTag5.jsp - uses ActionMessages to store any keys for testing * TestMessagesTag6.jsp - uses a String to store any keys for testing * TestMessagesTag7.jsp - uses a String Array to store any keys for testing * TestMessagesTag8.jsp - uses ActionErrors to store any keys for testing * **/ %> Messages: Messages: Message: Messages: Messages: Message: Messages: Message:Testing Message <% request.setAttribute(Globals.MESSAGE_KEY, "default.bundle.message"); %> Messages: Message: Messages: custom_error_header Message:Testing Message <% request.setAttribute(Globals.MESSAGE_KEY, "default.bundle.message"); %> Messages: Message: Messages: custom_error_header Message:Testing Message custom_error_footer <% request.setAttribute(Globals.MESSAGE_KEY, "default.bundle.message"); %> Messages: Message: Messages: Messages: Message: Messages: Messages: Message: cool Messages: <% request.setAttribute("my-key", "default.bundle.message"); %> Messages: Message: Messages: <% request.setAttribute("my-key", "default.bundle.message"); %> Messages: Message: Messages: <% request.setAttribute("my-key", "default.bundle.message"); %> Messages: Message: Messages: <% request.setAttribute("my-key", "default.bundle.message"); %> Messages: Message: Messages: <% request.setAttribute("my-key", "default.bundle.message"); %> Messages: Message: Messages: <% request.setAttribute("my-key", "default.bundle.message"); %> Messages: Message: Messages: Messages: Message: Messages: Message:Testing Message <% request.setAttribute(Globals.MESSAGE_KEY, "alternate.bundle.message"); %> Messages: Message: Messages: custom_alternate_error_header Message:Testing Message <% request.setAttribute(Globals.MESSAGE_KEY, "alternate.bundle.message"); %> Messages: Message: Messages: custom_alternate_error_header Message:Testing Message custom_alternate_error_footer <% request.setAttribute(Globals.MESSAGE_KEY, "alternate.bundle.message"); %> Messages: Message: Messages: Messages: Message: Messages: Messages: Message: Messages: <% request.setAttribute("my-key", "alternate.bundle.message"); %> Messages: Message: Messages: <% request.setAttribute("my-key", "alternate.bundle.message"); %> Messages: Message: Messages: <% request.setAttribute("my-key", "alternate.bundle.message"); %> Messages: Message: Messages: <% request.setAttribute("my-key", "alternate.bundle.message"); %> Messages: Message: Messages: <% request.setAttribute("my-key", "alternate.bundle.message"); %> Messages: Message: Messages: <% request.setAttribute("my-key", "alternate.bundle.message"); %> Messages: Message: <% MessageResources messageResources = MessageResources.getMessageResources("org.apache.struts.taglib.LocalStrings"); String expected = (String) pageContext.getAttribute("EXPECTED_RESULTS"); String compareTo = (String) pageContext.getAttribute("TEST_RESULTS"); if ((expected == null) || (compareTo == null)){ Assert.fail(messageResources.getMessage("tests.failure")); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestMessagesTag7.jsp0000644000175000017500000004332010404045212031623 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@page import="java.util.HashMap"%> <%@page import="org.apache.struts.util.MessageResources"%> <%@page import="org.apache.struts.Globals"%> <%@page import="org.apache.struts.action.ActionError"%> <%@page import="org.apache.struts.action.ActionMessage"%> <%@page import="org.apache.struts.action.ActionMessages"%> <%@page import="org.apache.struts.Globals"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <% /** * From the Docs: * * * Displays a set of messages prepared by a business logic component and * stored as an ActionMessages object, ActionErrors object, a String, * or a String array in request scope. If such a bean is not found, nothing * will be rendered. * * The tests are setup to test all possible scenarios with each ojbect listed. * Using Globals.ERROR_KEY in the request * TestMessagesTag1.jsp - uses ActionMessages to store any keys for testing * TestMessagesTag2.jsp - uses a String to store any keys for testing * TestMessagesTag3.jsp - uses a String Array to store any keys for testing * TestMessagesTag4.jsp - uses ActionErrors to store any keys for testing * * Using Globals.MESSAGE_KEY in the request * TestMessagesTag5.jsp - uses ActionMessages to store any keys for testing * TestMessagesTag6.jsp - uses a String to store any keys for testing * TestMessagesTag7.jsp - uses a String Array to store any keys for testing * TestMessagesTag8.jsp - uses ActionErrors to store any keys for testing * **/ %> Messages: Messages: Message: Messages: Messages: Message: Messages: Message:Testing Message Message:Testing Message <% String[] messages = new String[2]; messages[0] = "default.bundle.message"; messages[1] = "default.bundle.message"; request.setAttribute(Globals.MESSAGE_KEY, messages); %> Messages: Message: Messages: custom_error_header Message:Testing Message Message:Testing Message <% String[] messages = new String[2]; messages[0] = "default.bundle.message"; messages[1] = "default.bundle.message"; request.setAttribute(Globals.MESSAGE_KEY, messages); %> Messages: Message: Messages: custom_error_header Message:Testing Message Message:Testing Message custom_error_footer <% String[] messages = new String[2]; messages[0] = "default.bundle.message"; messages[1] = "default.bundle.message"; request.setAttribute(Globals.MESSAGE_KEY, messages); %> Messages: Message: Messages: Messages: Message: Messages: Messages: Message: Messages: <% String[] messages = new String[2]; messages[0] = "default.bundle.message"; messages[1] = "default.bundle.message"; request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% String[] messages = new String[2]; messages[0] = "default.bundle.message"; messages[1] = "default.bundle.message"; request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% String[] messages = new String[2]; messages[0] = "default.bundle.message"; messages[1] = "default.bundle.message"; request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% String[] messages = new String[2]; messages[0] = "default.bundle.message"; messages[1] = "default.bundle.message"; request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% String[] messages = new String[2]; messages[0] = "default.bundle.message"; messages[1] = "default.bundle.message"; request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% String[] messages = new String[2]; messages[0] = "default.bundle.message"; messages[1] = "default.bundle.message"; request.setAttribute("my-key", messages); %> Messages: Message: Messages: Messages: Message: Messages: Message:Testing Message Message:Testing Message <% String[] messages = new String[2]; messages[0] = "alternate.bundle.message"; messages[1] = "alternate.bundle.message"; request.setAttribute(Globals.MESSAGE_KEY, messages); %> Messages: Message: Messages: custom_alternate_error_header Message:Testing Message Message:Testing Message <% String[] messages = new String[2]; messages[0] = "alternate.bundle.message"; messages[1] = "alternate.bundle.message"; request.setAttribute(Globals.MESSAGE_KEY, messages); %> Messages: Message: Messages: custom_alternate_error_header Message:Testing Message Message:Testing Message custom_alternate_error_footer <% String[] messages = new String[2]; messages[0] = "alternate.bundle.message"; messages[1] = "alternate.bundle.message"; request.setAttribute(Globals.MESSAGE_KEY, messages); %> Messages: Message: Messages: Messages: Message: Messages: Messages: Message: Messages: <% String[] messages = new String[2]; messages[0] = "alternate.bundle.message"; messages[1] = "alternate.bundle.message"; request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% String[] messages = new String[2]; messages[0] = "alternate.bundle.message"; messages[1] = "alternate.bundle.message"; request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% String[] messages = new String[2]; messages[0] = "alternate.bundle.message"; messages[1] = "alternate.bundle.message"; request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% String[] messages = new String[2]; messages[0] = "alternate.bundle.message"; messages[1] = "alternate.bundle.message"; request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% String[] messages = new String[2]; messages[0] = "alternate.bundle.message"; messages[1] = "alternate.bundle.message"; request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% String[] messages = new String[2]; messages[0] = "alternate.bundle.message"; messages[1] = "alternate.bundle.message"; request.setAttribute("my-key", messages); %> Messages: Message: <% MessageResources messageResources = MessageResources.getMessageResources("org.apache.struts.taglib.LocalStrings"); String expected = (String) pageContext.getAttribute("EXPECTED_RESULTS"); String compareTo = (String) pageContext.getAttribute("TEST_RESULTS"); if ((expected == null) || (compareTo == null)){ Assert.fail(messageResources.getMessage("tests.failure")); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestMessagesTag8.jsp0000644000175000017500000004753610404045246031650 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@page import="java.util.HashMap"%> <%@page import="org.apache.struts.util.MessageResources"%> <%@page import="org.apache.struts.Globals"%> <%@page import="org.apache.struts.action.ActionError"%> <%@page import="org.apache.struts.action.ActionMessage"%> <%@page import="org.apache.struts.action.ActionMessages"%> <%@page import="org.apache.struts.Globals"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <% /** * From the Docs: * * * Displays a set of messages prepared by a business logic component and * stored as an ActionMessages object, ActionErrors object, a String, * or a String array in request scope. If such a bean is not found, nothing * will be rendered. * * The tests are setup to test all possible scenarios with each ojbect listed. * Using Globals.ERROR_KEY in the request * TestMessagesTag1.jsp - uses ActionMessages to store any keys for testing * TestMessagesTag2.jsp - uses a String to store any keys for testing * TestMessagesTag3.jsp - uses a String Array to store any keys for testing * TestMessagesTag4.jsp - uses ActionErrors to store any keys for testing * * Using Globals.MESSAGE_KEY in the request * TestMessagesTag5.jsp - uses ActionMessages to store any keys for testing * TestMessagesTag6.jsp - uses a String to store any keys for testing * TestMessagesTag7.jsp - uses a String Array to store any keys for testing * TestMessagesTag8.jsp - uses ActionErrors to store any keys for testing * **/ %> Messages: Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); request.setAttribute(Globals.MESSAGE_KEY, messages); %> Messages: Message: Messages: Message:Testing Message Message:Testing Message <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("default.bundle.message")); messages.add("myproperty2", new ActionMessage("default.bundle.message")); request.setAttribute(Globals.MESSAGE_KEY, messages); %> Messages: Message: Messages: custom_error_header Message:Testing Message Message:Testing Message <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("default.bundle.message")); messages.add("myproperty2", new ActionMessage("default.bundle.message")); request.setAttribute(Globals.MESSAGE_KEY, messages); %> Messages: Message: Messages: custom_error_header Message:Testing Message Message:Testing Message custom_error_footer <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("default.bundle.message")); messages.add("myproperty2", new ActionMessage("default.bundle.message")); request.setAttribute(Globals.MESSAGE_KEY, messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("default.bundle.message")); messages.add("myproperty2", new ActionMessage("default.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("default.bundle.message")); messages.add("myproperty2", new ActionMessage("default.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("default.bundle.message")); messages.add("myproperty2", new ActionMessage("default.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("default.bundle.message")); messages.add("myproperty2", new ActionMessage("default.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("default.bundle.message")); messages.add("myproperty2", new ActionMessage("default.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("default.bundle.message")); messages.add("myproperty2", new ActionMessage("default.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); request.setAttribute(Globals.MESSAGE_KEY, messages); %> Messages: Message: Messages: Message:Testing Message Message:Testing Message <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("alternate.bundle.message")); messages.add("myproperty2", new ActionMessage("alternate.bundle.message")); request.setAttribute(Globals.MESSAGE_KEY, messages); %> Messages: Message: Messages: custom_alternate_error_header Message:Testing Message Message:Testing Message <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("alternate.bundle.message")); messages.add("myproperty2", new ActionMessage("alternate.bundle.message")); request.setAttribute(Globals.MESSAGE_KEY, messages); %> Messages: Message: Messages: custom_alternate_error_header Message:Testing Message Message:Testing Message custom_alternate_error_footer <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("alternate.bundle.message")); messages.add("myproperty2", new ActionMessage("alternate.bundle.message")); request.setAttribute(Globals.MESSAGE_KEY, messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("alternate.bundle.message")); messages.add("myproperty2", new ActionMessage("alternate.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("alternate.bundle.message")); messages.add("myproperty2", new ActionMessage("alternate.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("alternate.bundle.message")); messages.add("myproperty2", new ActionMessage("alternate.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("alternate.bundle.message")); messages.add("myproperty2", new ActionMessage("alternate.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("alternate.bundle.message")); messages.add("myproperty2", new ActionMessage("alternate.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: Messages: <% ActionMessages messages = new ActionMessages(); messages.add("myproperty1", new ActionMessage("alternate.bundle.message")); messages.add("myproperty2", new ActionMessage("alternate.bundle.message")); request.setAttribute("my-key", messages); %> Messages: Message: <% MessageResources messageResources = MessageResources.getMessageResources("org.apache.struts.taglib.LocalStrings"); String expected = (String) pageContext.getAttribute("EXPECTED_RESULTS"); String compareTo = (String) pageContext.getAttribute("TEST_RESULTS"); if ((expected == null) || (compareTo == null)){ Assert.fail(messageResources.getMessage("tests.failure")); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestMultiboxTag1.jsp0000644000175000017500000002526710404045246031672 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestMultiboxTag2.jsp0000644000175000017500000002523710404045230031661 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> value1 value1 value1 value1 value1 value1 value1 value1 value1 value1 value1 value1 value1 value1 value1 value1 value1 value1 value1 value1 value1 value1 value1 <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestMultiboxTag3.jsp0000644000175000017500000002373010404045214031660 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestMultiboxTag4.jsp0000644000175000017500000002456410404045246031674 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> value100 value100 value100 value100 value100 value100 value100 value100 value100 value100 value100 value100 value100 value100 value100 value100 value100 value100 value100 value100 value100 value100 value100 <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestMultiboxTag5.jsp0000644000175000017500000001031210404045230031650 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@page import="org.apache.struts.Globals"%> <%@page import="org.apache.struts.action.ActionMessage"%> <%@page import="org.apache.struts.action.ActionMessages"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <% ActionMessages errors = new ActionMessages(); errors.add("stringArray", new ActionMessage("default.testing.errors.tag")); request.setAttribute(Globals.ERROR_KEY, errors); %> <% ActionMessages errors = new ActionMessages(); errors.add("stringArray", new ActionMessage("default.testing.errors.tag")); request.setAttribute(Globals.ERROR_KEY, errors); %> <% ActionMessages errors = new ActionMessages(); errors.add("stringArray", new ActionMessage("default.testing.errors.tag")); request.setAttribute(Globals.ERROR_KEY, errors); %> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("TEST_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestOptionTag1.jsp0000644000175000017500000001777010404045234031334 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> My value My value My value My value My value My value My value My value <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestOptionsTag1.jsp0000644000175000017500000001765610404045210031514 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> * Neither labelName nor labelProperty is specified - The labels will be the same as the option values themselves. * Only labelName is specified - The value of this attribute is the name of a JSP bean in some scope that is the collection. * Only labelProperty is specified - The value of this attribute is the name of a property of the ActionForm bean associated with our form, which will return the collection. * Both labelName and labelProperty are specified - The value of the labelName attribute identifies a JSP bean in some scope. The value of the labelProperty attribute is the name of some property of that bean which will return the collection. <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("TEST_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } // Swallow tabs, carriage returns, and newlines before comparing if (expected == null) { expected = ""; } if (compareTo == null) { compareTo = ""; } StringBuffer sb = new StringBuffer(); for (int i = 0; i < expected.length(); i++) { char ch = expected.charAt(i); if ((ch == '\t') || (ch == '\r') || (ch == '\n')) { ; } else { sb.append(ch); } } expected = sb.toString(); sb = new StringBuffer(); for (int i = 0; i < compareTo.length(); i++) { char ch = compareTo.charAt(i); if ((ch == '\t') || (ch == '\r') || (ch == '\n')) { ; } else { sb.append(ch); } } compareTo = sb.toString(); Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestPasswordTag1.jsp0000644000175000017500000002205710404045212031654 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("TEST_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestPasswordTag2.jsp0000644000175000017500000002177510404045244031670 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@page import="org.apache.struts.Globals"%> <%@page import="org.apache.struts.action.ActionMessage"%> <%@page import="org.apache.struts.action.ActionMessages"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <% ActionMessages errors = new ActionMessages(); errors.add("string", new ActionMessage("default.testing.errors.tag")); request.setAttribute("ALT_ERROR_KEY", errors); %> <% ActionMessages errors = new ActionMessages(); errors.add("string", new ActionMessage("default.testing.errors.tag")); request.setAttribute(Globals.ERROR_KEY, errors); %> <% ActionMessages errors = new ActionMessages(); errors.add("string", new ActionMessage("default.testing.errors.tag")); request.setAttribute(Globals.ERROR_KEY, errors); %> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("TEST_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestRadioTag1.jsp0000644000175000017500000002247110404045242031113 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("TEST_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestRadioTag2.jsp0000644000175000017500000002214510404045224031112 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@page import="org.apache.struts.Globals"%> <%@page import="org.apache.struts.action.ActionMessage"%> <%@page import="org.apache.struts.action.ActionMessages"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <% ActionMessages errors = new ActionMessages(); errors.add("string", new ActionMessage("default.testing.errors.tag")); request.setAttribute("ALT_ERROR_KEY", errors); %> <% ActionMessages errors = new ActionMessages(); errors.add("string", new ActionMessage("default.testing.errors.tag")); request.setAttribute(Globals.ERROR_KEY, errors); %> <% ActionMessages errors = new ActionMessages(); errors.add("string", new ActionMessage("default.testing.errors.tag")); request.setAttribute(Globals.ERROR_KEY, errors); %> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("TEST_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestResetTag1.jsp0000644000175000017500000002317610404045172031144 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("TEST_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestResetTag2.jsp0000644000175000017500000001152310404045232031133 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> Reset Value Here <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("TEST_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestSelectTag1.jsp0000644000175000017500000002123510404045250031270 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> Some Body Here Some Body Here Some Body Here Some Body Here Some Body Here Some Body Here Some Body Here Some Body Here Some Body Here Some Body Here Some Body Here Some Body Here Some Body Here Some Body Here Some Body Here Some Body Here Some Body Here Some Body Here Some Body Here Some Body Here Some Body Here <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("TEST_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestSelectTag2.jsp0000644000175000017500000002222310404045230031265 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@page import="org.apache.struts.Globals"%> <%@page import="org.apache.struts.action.ActionMessage"%> <%@page import="org.apache.struts.action.ActionMessages"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> Some Body Here <% ActionMessages errors = new ActionMessages(); errors.add("string", new ActionMessage("default.testing.errors.tag")); request.setAttribute("ALT_ERROR_KEY", errors); %> Some Body Here Some Body Here <% ActionMessages errors = new ActionMessages(); errors.add("string", new ActionMessage("default.testing.errors.tag")); request.setAttribute(Globals.ERROR_KEY, errors); %> Some Body Here Some Body Here <% ActionMessages errors = new ActionMessages(); errors.add("string", new ActionMessage("default.testing.errors.tag")); request.setAttribute(Globals.ERROR_KEY, errors); %> Some Body Here Some Body Here Some Body Here Some Body Here Some Body Here Some Body Here Some Body Here Some Body Here Some Body Here Some Body Here Some Body Here Some Body Here Some Body Here <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("TEST_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestSubmitTag1.jsp0000644000175000017500000002333710404045220031316 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("TEST_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestSubmitTag2.jsp0000644000175000017500000001703410404045204031316 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> Submit Value Here <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("TEST_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestTextTag1.jsp0000644000175000017500000002143410404045204030775 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("TEST_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestTextTag2.jsp0000644000175000017500000002143310404045236031002 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@page import="org.apache.struts.Globals"%> <%@page import="org.apache.struts.action.ActionMessage"%> <%@page import="org.apache.struts.action.ActionMessages"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <% ActionMessages errors = new ActionMessages(); errors.add("string", new ActionMessage("default.testing.errors.tag")); request.setAttribute("ALT_ERROR_KEY", errors); %> <% ActionMessages errors = new ActionMessages(); errors.add("string", new ActionMessage("default.testing.errors.tag")); request.setAttribute(Globals.ERROR_KEY, errors); %> <% ActionMessages errors = new ActionMessages(); errors.add("string", new ActionMessage("default.testing.errors.tag")); request.setAttribute(Globals.ERROR_KEY, errors); %> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("TEST_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestTextareaTag1.jsp0000644000175000017500000002144310404045240031626 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("TEST_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/html/TestTextareaTag2.jsp0000644000175000017500000002146110404045222031627 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="junit.framework.Assert"%> <%@page import="org.apache.struts.Globals"%> <%@page import="org.apache.struts.action.ActionMessage"%> <%@page import="org.apache.struts.action.ActionMessages"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <% ActionMessages errors = new ActionMessages(); errors.add("string", new ActionMessage("default.testing.errors.tag")); request.setAttribute("ALT_ERROR_KEY", errors); %> <% ActionMessages errors = new ActionMessages(); errors.add("string", new ActionMessage("default.testing.errors.tag")); request.setAttribute(Globals.ERROR_KEY, errors); %> <% ActionMessages errors = new ActionMessages(); errors.add("string", new ActionMessage("default.testing.errors.tag")); request.setAttribute(Globals.ERROR_KEY, errors); %> <% String expected = ""; String compareTo = ""; if (pageContext.getAttribute("EXPECTED_RESULTS") == null){ throw new javax.servlet.jsp.JspException("No tests on this page were called. Please verify that you've setup the tests correctly."); }else{ expected=pageContext.getAttribute("EXPECTED_RESULTS").toString(); } if (pageContext.getAttribute("TEST_RESULTS") != null){ compareTo=pageContext.getAttribute("TEST_RESULTS").toString(); } Assert.assertEquals(expected, compareTo); %> libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/logic/0000755000175000017500000000000010423130301026075 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/test/test/org/apache/struts/taglib/logic/TestIterateTag.jsp0000644000175000017500000000072710404045210031515 0ustar arnaudarnaud00000000000000<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page import="junit.framework.Assert"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> libstruts1.2-java-1.2.9/web/test/jspRedirector.jsp0000644000175000017500000000214610404045210022546 0ustar arnaudarnaud00000000000000<%@page import="org.apache.cactus.server.*" session="true" %><% /** * Note: * It is very important not to put any character between the end * of the page tag and the beginning of the java code expression, otherwise, * the generated servlet containss a 'out.println("\r\n");' and this breaks * our mechanism ! */ /** * This JSP is used as a proxy to call your server-side unit tests. We use * a JSP rather than a servlet because for testing custom JSP tags for * example we need access to JSP implicit objects (PageContext and * JspWriter). */ JspImplicitObjects objects = new JspImplicitObjects(); objects.setHttpServletRequest(request); objects.setHttpServletResponse(response); objects.setServletConfig(config); objects.setServletContext(application); objects.setJspWriter(out); objects.setPageContext(pageContext); JspTestRedirector redirector = new JspTestRedirector(); redirector.doGet(objects); %> libstruts1.2-java-1.2.9/web/tiles-documentation/0000755000175000017500000000000010423130301022213 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/tiles-documentation/WEB-INF/0000755000175000017500000000000010423130301023242 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/tiles-documentation/WEB-INF/struts-config.xml0000644000175000017500000000454010404045240026604 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/web/tiles-documentation/WEB-INF/struts-doc-config.xml0000644000175000017500000000335710404045172027360 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/web/tiles-documentation/WEB-INF/struts-examples-config.xml0000644000175000017500000001306110404045210030413 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/web/tiles-documentation/WEB-INF/struts-tests-config.xml0000644000175000017500000000743110404045232027747 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/web/tiles-documentation/WEB-INF/struts-tutorial-config.xml0000644000175000017500000001427310404045216030454 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/web/tiles-documentation/WEB-INF/tiles-defs.xml0000644000175000017500000001072110404045204026032 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/web/tiles-documentation/WEB-INF/tiles-doc-defs.xml0000644000175000017500000001111210404045220026566 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/web/tiles-documentation/WEB-INF/tiles-examples-defs.xml0000644000175000017500000004160010404045214027647 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/web/tiles-documentation/WEB-INF/tiles-tests-defs.xml0000644000175000017500000000737310404045236027210 0ustar arnaudarnaud00000000000000 first body : title second body : body libstruts1.2-java-1.2.9/web/tiles-documentation/WEB-INF/tiles-tutorial-defs.xml0000644000175000017500000002401510404045212027673 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/web/tiles-documentation/WEB-INF/tiles-tutorial-defs_de.xml0000644000175000017500000000216110404045246030350 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/web/tiles-documentation/WEB-INF/tiles-tutorial-defs_fr.xml0000644000175000017500000000215510404045230030363 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/web/tiles-documentation/WEB-INF/web.xml0000644000175000017500000000703110404045220024546 0ustar arnaudarnaud00000000000000 Struts Tiles Documentation action org.apache.struts.action.ActionServlet config /WEB-INF/struts-config.xml config/examples /WEB-INF/struts-examples-config.xml config/test /WEB-INF/struts-tests-config.xml config/tutorial /WEB-INF/struts-tutorial-config.xml validate true 2 action *.do index.jsp /WEB-INF/struts-tiles.tld /WEB-INF/struts-tiles.tld Protected Area /test/testRole.jsp DELETE GET POST PUT tomcat role1 BASIC Example Basic Authentication Area role1 tomcat libstruts1.2-java-1.2.9/web/tiles-documentation/common/0000755000175000017500000000000010423130301023503 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/tiles-documentation/common/footer.jsp0000644000175000017500000000060510404045212025525 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
    Copyright © 2000-2004, The Apache Software Foundation
    and Cedric Dumoulin
    libstruts1.2-java-1.2.9/web/tiles-documentation/common/header.jsp0000644000175000017500000000033110404045250025455 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/web/tiles-documentation/common/submenu.jsp0000644000175000017500000000463210404045234025715 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%@ page import="java.util.Iterator" %> <%-- Push component attributes in page context --%> <%-- Check if selected exist. --%> <% pageContext.setAttribute( "selected", "" ); %> <%-- Prepare the links list to be iterated --%> <% Iterator i = links.iterator(); %> <%-- iterate on items list --%> <%-- Normally, we should write something like this : But, Struts doesn't declare the TEI class for iterate, and some web container deal badly with the declared variable. So, we use what follow instead. --%>
    <%-- check if selected --%> <% // Compute link value String link = (String)i.next(); if(link.startsWith("/") ) link = request.getContextPath() + link; %> <%=item%> <%=item%>
    <%-- Following are some code example using this submenu --%> libstruts1.2-java-1.2.9/web/tiles-documentation/common/viewSrcBody.jsp0000644000175000017500000000207310404045220026467 0ustar arnaudarnaud00000000000000<%@ page language="java" %> <%@ page errorPage="/common/viewSrcBodyError.jsp" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%-- Include requested resource file. If file is not found, Exception is thrown, and catched by the errorPage directive (see above). Error page show a message. --%> <%-- Import component attributes, if any. --%> file '<%=srcPathVar%>'
    
    

    No source specified ! libstruts1.2-java-1.2.9/web/tiles-documentation/doc/0000755000175000017500000000000010423130301022760 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/tiles-documentation/doc/portal/0000755000175000017500000000000010423130301024261 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/tiles-documentation/doc/portal/images/0000755000175000017500000000000010423130301025526 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/tiles-documentation/doc/portal/images/portalOverview.gif0000644000175000017500000001606210404045172031264 0ustar arnaudarnaud00000000000000GIF89aÆ]w1!þSoftware: Microsoft Office!ù,  U„ÿ3ÌÌÌÿÌÌÿÿÿÿ™ÿºÜþ0ÊI«½8ëÍcèз|âTV'¨®lë¾p,Ïtmßx®ï—Ž¥ŸGÈ+ȤrÉl:ŸP‘2 b¦Ñ¬vËíz¿à0KD:Î#é9hUÝjší.Ëo´xÏïûÿ€Kdzopkp‰†„j‹uЇrŽˆR‚–—˜™š›am•ŸŸž¤¡i¢Šf§œ­®¯°±²T¬†¦‰·¶º¸¶¬¾…¾³ÂÃÄÅÆOfŽ¥$¹ ·¹s)ÊÀÇÖרÙÚ«zu„ŒßkÞãs…ÌqÑ¡äqÛïðñòÇXYDõóùúûü^øP÷ú H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱÿ£Ç  I²¤É“(Sª\ɲ¥Ë“!cÊœa@›8sêÜɳ§ÏŸ@ƒ Í9€¦Ñ£!m]Ê´©Ó¡E‘JzQéÓ«X³Jµ«×†VµŠ{•ë׳h†%˶íO³iãÊ…·Ö­Ý»pçêÝ[¬îÝ¿dóòL¸•_p&¾»ðÛÂ#k:¬¸rÖÆˆ1;æ)X²çÏ_(ßl¬ÙiiË›{vͺµÑH#ŽyMåqŠeóL|&gïܶiCuM¼xѺ^¾<¸îŧ3‡n™zÐÕÆ³kŸ5jë±™‡W>~gréÓƒoÝξ=÷ŸÉ¿‹ÿ\üìéó—ŠÝ½ÿÿÿP_nøofV xÕñàƒZ  w·Õö›s¤•pÀñ†Ûh§qáˆ$6|©…èÛŠMõWâ‹Ú蓊lÑhŸ"¨ã2î¦c?öôa‹;Ù^©%©6ÿØ€Ž4i¤qH*i%N.¾"% vø°å”#Vy¥•Yºò¥ ½hp&˜Š9f’e¶ÂÆœi¬S‰£²ÊÉHâ'‘ÔŒ7l¶ææ››Å¹I» £èXA‰.ÔN„VSFš…zÖ#ŽA j[Šj’ £–¦º /§Œƒ«¨àÒêžÎtê©PAº5*^֜ڪªÊ<³K)ª>#«¬ÕÔjkdÿŸ:¶«]¥b²ç°•6³*­Õ.²§Ôpºla°õ–¡oúI‡àÐ]Hº¤ÒÓ@¦çØQŽ:à|«½“&s(ñZÚ¡ß2‹"‡ÖÜœ¸Lp… jmdÌZwé]XÛ}ãÕg }l= YÄFqÆ>ÚWÇ'ϧr`!·œŶ),suŸ«ñ~»¬³WážË!m‚˜0» -ôÑêå¼óÒHªÕ³©yÌôÔ9}¢>IMõÖ Y}UÒXc‰d—möÙh§­öÚl·íöÛpÇ-×I…m7Qc ÷Þ|÷í÷߀.øà„n¸ásÓý‘×w³|‡G.ùä”Wޏâÿ‹7~·Ö–@nùç ‡.úÞ‰cÎãš+m磷îúë—nºF¨§Žç‚°û.ûìÕnûS¸¢{ïÈ'_øïÀ[$üðD>®üôÔÎ|ó=ýRÅr|õà'=öi¿½ƒÒ‡¯¾øäþ•Ýÿñýúô>~û™ÿþcé×ï¿ýøsÞKHÀ‘ €tIÞþÇ@ß°8kŠÈüHÁå=8„È+ÈAë]Ð5|È;HBÒ}°5!tÈKHÂûp0)lÈ YÈA¾p/1dÈ iHAÞp.9\ÈyÈ@þ0.ATȉè?#-ILÈ™H?'>ñ+QDÈÿ-·*NΊWìJ²ÅÊi(^´` 3FƒÈíg;ãàHÇ:ÊmldÛˆÇoñq*rìã ÿ8“yiHƒͼÞå*D¾YäæÈBr"’D%+ÀK6$“Ø$'Û󤡔8¥(Ѥ¥FŽrg]r­þ$K.Å”¯\š·@0Ë;$ñžäÁ!s‰9Já«_î0‡'&Å'IЉ_ÉòÓ(òu©M½ëU͈+‰9;T VÞä—4²¥§býJœè g:0µËà’›À[¦¦jNzú2OðºC­T¬pr+°æ6áÙÉsJÊžþœÕ Í4ý Q=§>×ÿ . ” œ«–© fdJg´9ë´ÑˆNÓÝ:Ö Þ‰Ñ>Ó•ÓÈ'#bŠŠCRŸûªéœN%SвCRYdiK‰ÙÆ@â ‡ [P‡ O>†ô¨-Hªš.ÊÔª:‰ª³XªU·jJ¬ÊÉ«\ ëUƒ™­Šõ¬5¸i&ÌŠÖ¶:IZ`ukUíH׺Úõ®fc«\­*øõ¯€ ¬`KØÂö°ˆM¬b [€q¯s]¬d'KÙÊZö¯ ìc!;Ô¾^ö³  ía5tØÍr£ž­jW;ÙÌ.Ö´§…gjYKÛÚúÕµ•…ml‰9[ÛúÖ²¸­nwûÊÞþö¸† îj‡K\Nÿ¹ÐU®m™Û\G>º´•.r©[]A^»ŸÕ.xÛ]´~w¼Š/zÿÊÝò®ñ¼ëeìâûZ÷оôÍïeÛkß'âW¿–,ûûÃÿøÀ¥%ðV Œà vÀ >!ƒLaòF˜©®pƒ!|áfXÃæp‡Ô‰Æ ˜1€E,²ö'^å‰%Á{¤Â)Vq~Y|‡ •Eµ%Fjübeõ!Ç:Ž/âãH)ȦŒd9±É'rp´™}šrN…© 9Éè]2Mž™',ש”7%4ÉÜ¥A=IÍÌt@¿¨¹NkN”™2–G½¾g‘³qÅ<û ¼úÿЈn›q¼ TyM3RgîçªølŽ*KΓNè>'M~\YÓöú&4’5¬YÝ™_v,˜¡+f™øêÒ~Ît0mÐL÷2Ô¥¦¦ÝÐ~|Z¢´N'±„}¬,ßx©NõªÛ꘼:ÖÕõ³%k”þSœ¿¶µ{½c×3“ÐçHG-nU¨ÙÂ]öq› {¤ uw°U¬hß©¤ß¦·¼}êk_ê ×;…i¥s ©™ú ¨^N·º}ËîЛª)½¾©‡SüÖT¦2q*ðv8“–Éìè™Òd¥þøÉ^8Ã/ŒÔ“+¤ä*ê R®òÚ6œ“A”9×h^sÖÞ|Ä;ÿWxÏ— tÔ }è¢ýyѧÆs¤‡VéK_ZÓþY¨G=$wUÂÔ©nY«s$Ñ`»Ù:•l­ë]׎²¹îu¹”= [GûdÛ®‘µSîiy;â.÷úfÇîNÇ;Zô~¾÷=±‚¿à‘žø¯Þ†?|‚ÿ.ùÜ’]¸f¯zå)ÛøŠ,~èïÊã‹ùÍ6ôù|ÏQÍ•š˜N˜Z;sŒž¥7½f•Pb’^ö_P}ÍY_ÑT†àØ^bdç0÷³ëÞ°m'rìG¥ÚË@ø*'þ¹aìò_b{ùUÏü~Ÿ¯ØèC©ûÛ/2øÉ?y-t™Êgh=ñäñX¾yÛZÿ—§<ƒÛï ÷ìg~ÙjU(Â/}’q…k¼¶Ø·pÚ·gBjÀ2pã„OroãDm>eg”uͧyì×~E EÖrïVj*èM_wUZbW6$&%j øn—oÂÒg,ȧւã7‚ЇÙ†ƒˆNÒVk­·€Fy¥å;Sˆ<0¸I˜kõkº¦ÓÆmÞ–~37„{ç|FX^—…mšÆQÕPÅ'…ÐG…sh…5èao€VnÐVk]Èh ¨-b¨eÔ7t€äguyl^˜ÄFnȇ—ò‚Uh90(>wØÝðo8…’qñRôgÉÿ´qêppÔ'„Ÿsˆfx†~¥ˆþöqR³§V¶ˆf’ø/Ö×—¸Š•È;Wè× s1Pˆ|Ê"èŠÆ»(§ärNЋ–ø‹»Œ]ÐŒe4`Œ&D„]§Œ§ÇŒî§qè§G‡…ň“‰;¢Ž€ŒEŽh¨vÔøEõø:Ö&îß(óHyu8 Œì¨#û(~ýè¯HI9ÒHGX(iŽœ§ìÅ鈎„厄“S2‘e˜Œ ©}"t‘óÕX—‚«ó7å08ü˜[¹I@6y“89@6€’öØ“ƒF‚ã‘›’ưG'‰29“t§?û³$5ÿÀ“’•‘”#”š@”fHXIz­èŠKÙ”p²“&y8Ry8Ti=*Ù9dh [‰{]y†_ –‰"–>•ci–A™–¹³–`Tð–ÿ—F8—t ñe¹Žw)9gé7V™ ‚ÉŒmée~É•"é†y˜¼ò”y¹<ŸY8iˆ|i<—Y‚€¹“§9˜™)›É™n‘˜°˜ Ù˜S¹—é ‚™gSõT{·š:€ˆÏ÷š°Ù1v™‘¾h›zY•¥é=—W“4LQ0™9 œºGœæá c¹¢$²é´Ù‘¡I8£yŒÍ)?k)Çç›`@8`¦‡,²Ý9Ÿ5Æÿé™ÊY›È :å©7‘‰ ùT•iš«ˆ”©”J.b#¢²9ǹ‘yŽ¡óŸïxž8æ@{Ä›j‰:w3iaHÀ &CSRŸa©ŸýY9á)šÌ™›­àŽŠ7À’…—\PZ6;¶ ƒ3D£0ó¹cR<J›  2hWÀ6zdC˜šºÉ|!)XóÅl&G¬¤3B!$ó3Bz3Xƒ¤{¤¤0‰];šv¯@”êY¥ágŽkðZ`Æ¥DW“AŠ¢7²dŠ(fR‹¹¤L]û [ ëǦ!9§ ÚsvÊy^º`¦5S¤&ó&ÝóT*žjª¨3ºšš;VÿZxYš”r÷¨é©Ùy©b4E“邟ís¾¹©iÚ©–צÀ9 þwT¥šº‡ªòYœªJÔD(¶Š›„š«º¹«²Ð«%ðÙwTªLYœ¥2{h{c)¨ƒº¬ª«ú8£z3­•W:ÕJ{Bp­°Y&Ú*M P–Þz¡¸®Í:®«S®]%è*y6´®T@IîÊ™ý¯»Æ‹ÝÊŸà*`†ê¬±­J%cÿzx¦%°žx{˜°@¯ ‹\k:w«¯Ç ±ìZÛwü˜Ò¹±tiˆjRY¯öz¯+®J®q*K¡ ++wbV£³`Y[h&i³ÿˆ¥Ì:£v56Q;?»A‹vì¶GF+¤©Sµƒjó¤pÓ¤w%¶h¥âžšÔWËv9ðTÚ"* ¡,ÚZªÅ‘{Sž #j;I„H˜#˜µÛ·_z>ß©°”5²Oç:£¹·/Ò·ŒDm{woK°(ò#ê‘0ãr©©s¸óZYŠ+\Œ ™hûoic00¹÷¶ ê’2èA©ïã¹V ºË5º¤)£ùœ1ÕFªËxªºªa:¼b¤šC»Üš¸·Û:[ºþ•®’´3¸¼ƒ2ç‘ Ãƒ¼@«¼Ë;:Í«»Fâ¦zõ·­ ŽÃº0)»²k¸š^>‡»æ)¾E2 åÿk¾ñ8’Ö»"˜k1éÒ!`Ó¹ï›X¡+ºòû­IvSÊžÛH½‰¸¿“J¬×1ÀˆUÀU÷:é¸%rÚÀ竌é+«ÄʽfÁ|À7›Àé;DKÁ¢ÃÀ¼uKÀ´…·|“ÁÎë#tƒS£—ô» Á3\.Ì^qGãy›ó›ª+ì7]Ô‘úÂ Š§Eì8Ü¢`³¤³ÄLŒÀáøÄzÅ—C‘j‘é{ÅLA¿ÈÅ]¼Ÿ”s–L"CÆGiÆTŒÆD¬Æk|į˜Ã=©Å¢#Ç;¬G>¼³W ¬š¹Ç|<5ü`€Œ—pü“M¬ÂE‚›ÅŠìšŒ|>"씚ÿL¡cÈŠÁ•Æ0¢V™Ü<œ¼=Ÿœ#¡ É£Lʢ̼§¼Œ%¯«|}­|Œœ¹å"²Ñ¿Å4s4ÊL<~ìXyë^üÅsœ®7k´Ú»c°RIÛËÅøËñ¹ÇD:4â⪃ÔaÎ bĬYÏlË´lÊ`¬ËãÈ Ç7k1${6º­ÀÍ©ëÍ›Â×» +s3±Š½’lnüÆ‚<È mÉöp~NVQ÷ü}ƒàµüŒrþœ®àÐíKÐíÑš1·4<Ëì¼Å.Í˙¨ÑXfñPòM#lj‘ˆfWŠ­‡›$½n ±Í¬¥U<¢÷Ò”ÎFmÐ6ÿs;Íì9 ýзŒËñ¼{óh‘ƃéÄiŽv€¾g V,ZÍ ^ žS›È¹5ƒhmhÁ\¼Hã!D£Ì1c1míÖ®ªÎ&†dc¶J }ag¶…üVߦ„_ÕóÔ„(= µf’˯pùÁ^ùÊOËðÔ·Us&,ÏQ †LȆk{È„‰½Ó!çÓ騬™¿‹lÅvAÙdbÙ™­c±ý› ‡èQÒ nÛÚᦃ¨è‡6½=›£-—’Ý2¼= =ZŽZ~óÌ'Ó l'sÖfÈDŠÕmp£ö(c„²– }0|Ü Ê¬\ÁÍx_ϼWfQˆj¨œ °â=Þ;ÿ±ÜÉuÞÌ–ÞÚ¯øÞÕß;ßô7ëX³-Ûè EcpÃ-‡ªÍɬ=àÑs×€uà*fá$É$ ®Ñ Ž™޾.á`ߌ…tN¦ýžþ­âÅ]˜!.á$>Xb'ÞcNáÎÇt:ÔG°µûãît5îj7þÝNlÖ ªÇ.⎌ã0ã4žàºYÖ1¦Þ³Iå¾ÉÙfK™“^þå^¾“m£×ihd®6%‹ÈQ•âÔ¾ã¿å?:"VJÙÑrVä…çæN.ÔqÎåtuNz|¾žèi²Ynª¾%çô•áC&èw^è²èœˆîáZÎZŒ®dƒŽ{§ÿ)JlîxÎàŽé€!þ{ýã¢yŽÍW)éÝÜâ¡•éëåè‘êªÞ’ˆÞH¡¾£îÞ²Z´f¨Î– ¤æ Ì ¿.Ü¥¾ZÃ>^¶^¸%ÇÎê´8í–YéÝìªõìàííܧë;‹±’ ëýìáuê"îã~²ÚÁÊŽîÎí¢åíØî4&-«Ç-ܦcî6ZWætuæGâîï^ Ð{¿8VX¿ Ñó ðÿAñ&Ðï_462>ãúnOJk…ñQ©ñ.ç_‚ˆôñÎ(òw¼¯˜…¯ù òÛ!óä8 Ën<·Eë'/L)o*äní«ñ9«4¿h‹òóÿ9Œø¾óî$HE_ó¼Jï‚€Þ=ŒNôð®í·T»OAXo 7/ȺâÙðõ($'Y¯æ°@IUß+}„ö-öXþUŠY÷^÷j&rï}ÿÿz©ø|@øc&—lø…GŠßÞíÞø‹¿Fù¡ç˜ÄøZB"”ï÷’ßö¨¾ùœF”úzFú¡_ìÕ|nÄÈKÈPñ¦ÿ¯¯g­|ª2k2í±Ï$r‘ûð }s…ÏXŽ+† D›gºheöÄkÈï‚ú÷hŠÍ€–oçÙ1ýÁûÛ`‚؆‚Ô6‰§øS\Hûì4ˆ0€ý²`ýaþgƒ,8ØK„Ëÿþ*ÿõüÈe`ŸGÂÙÙö‡ ¥‚¾MÑ êoÉI«­ðêÍ»ÿ`(ŽbCžhª®ì”µp,Ï´õšL¤gN¿ç ˆðÑ(}¼ÐTâ^5 4J­ZU¸«v˵u¿à°çƸ=ÏÁc–xV«Ë¼"1íÌö¦U¼xÏ?­û€ z‚…†,„Tn‰%^`Œ‡‘a’•‚–™š@]n1z˜4¡›¤-£¥¨2§©¬­~G®ƒ¨«drR”#‰º±¾¦¿Á»FôbÈœ.I!½¦ÊÆÓRÔÖ×lؤʄͲIÒµâÚÃäåè}Ð×çZCk¸9Ås:œ¸L÷öËveôÏiïÚ¥›5°`*¥*ÿʶ¤I>'õi®‰¼'s±¹3Ñ :…C’@²¤É“(MRYã[Ç—¹&Æ©Vïǡ k^´µL¤5–>ƒr` ¨Ñ£H“°r“ËŒú öĨóT‹9§ÎŒ*´iׯTˆ*«”©×Jf”dEb“&Ìœø,¾bG¦?°Ó€âÅ+–¬ß¥?3‘׆Xöƒ³£n¶{ø"‡Ó»÷QåË,úþ%k6/ÁŸß\`6Fy´HÍ›ËN¸ (ÓÂJÃ6ˆ:5ÒΤgç‘­»ïÞåjÛ6ŠÛpQÇ þNnMøpÅUõltkª;Ÿë˜çÖ®Ýùðè0–»ÕxlØìܧOîÝÿ6x`\:êÜF=(úõ±ñoŸú="›tq¤X[56YLŒÉccñD„Ñ}¤$á„þu ž~{\ˆa+ümVa t%8—CvÁ%×]&Š(•kvá¤B‡}x„ú¢a¨Àè—Œ~œ˜ÑSYmä UKðd†|Ó…ˆB:rVÂ8~e”š49$4óHºÐ<û¼•"VdÉäsªÝ2%•ñ±‰™•iJçã>4¥Øâ"ñ”ÈÖŠØ"’(À™TtxÐèf,kzˆ ·!·‘ y2à‚.’à¥Ö…Š“ö©£G×àtŠ®VêW ×Ú×ÑCª€}IÇ©å$J+ °BÿbW¼&C®Yzk­Ã ,;`6‡æ _Zl+¶>Ʊ»:›ã²–¬´žqëµÕjs,žÞšZn:à‚¶¡âií¹hÁ;Pºæ6Gá½%É›N´úVAo*øŒo¿£ÀoÁ4ü{-»î!ì°,O£p)¹zñÅŒñ “RqŒ‡\§È®t¼ÉÇ;’,²Æ*`r• 7Ü2Æ,Ï ÂË™ ì¤Í×Ìs8[¢ó•?k'$~R´AW2tœKëÆ#%Öõ«1ëËÓÌ^-u呚±×-4- ×Ù’m‰yª¤ºMbamçYÑ’•Fmv$h‡ªöÚ>NvÇNýü©"ÿWZÎ)y‹‹M²À÷úÒ·ªcZTz®8âU›6Ÿ’WU>oÖ‹^Ùå‰Ûù¨'k- ê¤Å•éèL+í_ùù:Ÿ;±Îç»Ç•dóá®,é)ß‹qË‘©ó‘ ¦ÝGκØCI®üºÈï¼½¢ÂJéÈ÷Üw5ùT²n™«è_c»Öí³ÉküϾ%ýÉÍÿ­öïŸþ»þ[OÿX£QPQ< †|¦@j$°îƒœ'HÁ F‚%³ 1ˆ÷™ïƒiã ÑçAšð~#L¡ÞLÈÂÞN…04] ]ˆ<Æð†£¡»gCúðb3Ü!ÃzøÃ",ˆBÄ‘ÈDx!1‰hZb§(­'Bñ;TÌ"ƬxÅþhñ‹ãbAÆ2êKŒcôž×È-4¦ñ|lŒ#­ÜøÆÊñެ£ý†Ç>ŠŽ{„ŸY#@îQŠ„Lä^ ©GD*ò‘Æ ä!!IIæ0²ŽŽ¬¤&Ñ%ÉFnò“¦¹ä3 ÊRC”i$¥)W)9 ºò•°D +E’;libstruts1.2-java-1.2.9/web/tiles-documentation/doc/portal/comments.jsp0000644000175000017500000000102210404045212026624 0ustar arnaudarnaud00000000000000
    Give Your Feedback !

    This library is a alive. Feel free to give your feedback on it !
    If you have any idea to improve it, let me know !
    Contact me at :
    cedric@apache.org
    or cedric.dumoulin@lifl.fr

    libstruts1.2-java-1.2.9/web/tiles-documentation/doc/portal/documentation.jsp0000644000175000017500000000235310404045214027662 0ustar arnaudarnaud00000000000000
    Documentation

    tilesAdvancedFeatures.pdf (draft)

    Struts in Action (book)

    Struts and Tiles aid component-based development (article)

    UI design with Tiles and Struts (article)

    Programming Jakarta Struts by Chuck Cavaness (book)

    libstruts1.2-java-1.2.9/web/tiles-documentation/doc/portal/download.jsp0000644000175000017500000001077510404045204026626 0ustar arnaudarnaud00000000000000
    Download

    Choose between binaries or sources distribution

    Latest build : @compilation-date@

    Tiles is also distributed with Struts 1.1 .
    You can download it by downloading Struts.
    libstruts1.2-java-1.2.9/web/tiles-documentation/doc/portal/features.jsp0000644000175000017500000001543710404045244026641 0ustar arnaudarnaud00000000000000
    Tiles Library
    Features Overview

    Following is an overview of what can be done with Tiles :

    • Screen definitions
      • Create a screen by assembling Tiles : header, footer, menu, body
      • Definitions can take place :
        • in a centralized xml file
        • directly in jsp page
        • in struts action
      • Definitions provide an inheritance mechanism : a definition can extends another one, and override parameters.
    • Templating
      • Tiles framework is entirely compatible with Templates defined by David Geary and implemented in Struts
      • You can replace Templates library by Tiles one
    • Layouts
      • Define common page layouts and reuse them across your web site
      • Define menu layouts, and use them by passing lists of items and links
      • Define portal layout, use it by passing list of Tiles (pages) to show
      • Reuse existing layouts, or define your owns
    • Dynamic page building
      • Tiles are gather dynamically during page reload. It is possible to change any attributes : layout, list of Tiles in portal, list of menu items, ...
    • Reuse of Tiles / Components
      • If well defined, a Tile can be reused in different location
      • Dynamic attributes are used to parameterized Tiles
      • It is possible to define library of reusable Tiles.
      • Build a page by assembling predefined components, give them appropriate parameters
    • Internationalization (i18n)
      • It is possible to load different tiles according to Locale
      • A mechanism similar to Java properties files is used for definitions files : you can have one definition file per Locale. The appropriate definition is loaded according to current Locale
    • Multi-channels
      • It is possible to load different Tiles according to a key stored in jsp session, or anywhere.
      • For example, key could be user provilege, browser type, ...
      • A mechanism similar to Java properties files is used for definitions files : you can have one definition file per key. The appropriate definition is loaded according to the key.
    libstruts1.2-java-1.2.9/web/tiles-documentation/doc/portal/news.jsp0000644000175000017500000000733010404045232025765 0ustar arnaudarnaud00000000000000
    News

    03 Nov. 2002

    TilesPlugin module aware
    The TilesPlugin for struts now create one separate definition factory for each struts module.

    19 Jul. 2002

    Tiles is now in the main branch of Struts1.1 distribution
    A Tiles plug-in is available for Struts1.1.

    22 May 2002

    Tiles Advanced Features Documentation (draft version)
    tilesAdvancedFeatures.pdf

    Tiles-blank Applications
    Different tiles-blanc.war files are now provided to help starting new project using Tiles.

    • tiles-blank.war - Tiles without Struts
    • tiles-blank-struts1.1.war - Tiles with Struts1.1
    • tiles-blank-struts1.0.war - Tiles with latest stable Struts1.0.x

    Article on Tiles and Struts
    An article on using Tiles and Struts is available at :
    http://www.javaworld.com/javaworld/jw-01-2002/jw-0104-tilestrut.html

    Dynamic Layout
    Dynamic layouts allow a user to customize a site L&F. Check the example to see how to proceed with Tiles.

    New Layout : Tabs
    The new tabs layout allows to build easily tabs like page : specify which body you want in which tabs, and that all !

    Commented Examples
    A lot of interesting examples have been revisited and commented in a "portal" fashion. Check "Live Examples" menu entry.

    Each Tile can have its own controller !
    It is now possible to associate a controller to each Tile. This controller (Java code or struts action) is called immediately before the Tile jsp page. It is useful to prepare data to be shown by jsp page.

    Reload Action
    There is now a reload action, and a reloadable factory wrapper allowing to reload Tiles configuration files without restarting web server.

    Use and Set Bean in configuration file
    It is now possible to use and set beans in the configuration file. Such bean can then be set as a <put> or <putList> tag value.
    This increase and facilitate menu creation.

    Check "History" for latest modifications (further in this page)

    libstruts1.2-java-1.2.9/web/tiles-documentation/doc/portal/nextFeatures.jsp0000644000175000017500000000055410404045210027463 0ustar arnaudarnaud00000000000000
    Future Features
    Dynamic Portal Example
    Portal page is build according to a user profile, or whatever you want.
    libstruts1.2-java-1.2.9/web/tiles-documentation/doc/portal/revisions.jsp0000644000175000017500000001115710404045230027032 0ustar arnaudarnaud00000000000000
    History
    03 Nov. 2002
    • Tiles now use the commons-logging package.
    • : Corrected a bug where the tag fail when reused by server.
    • The struts TilesPlugin now create one factory for each struts module
    19 Jul. 2002
    • TilesPlugin available for Struts1.1
    • Blank war files have been updated
    • Definition factory interface has change. A new life cycle is introduce
    • Struts multi-modules feature works with the Tiles
    20 Jun. 2002
    • Update DefinitionDispatcherAction. It now works again
    13 Jun. 2002
    • Tiles configuration file now accept nested list as attribute
    • Add tag to DTD (submitted by Loren Halvorson)
    • configuration file
    23 May 2002
    • tiles.XmlDefinition.XmlParser : enable default value for classtype attribute (org.apache.struts.tiles.beans.SimpleMenuItem). As a consequence, all classtype attribute can be removed in examples
    • tiles.XmlDefinition.I18nFactorySet : Enable serialization (bug reported by Dan Sykes)
    14 Apr. 2002
    • tiles.XmlDefinition.XmlParser : Correct bug with new Digester release preventing config file lists to be correctly parsed
    • tabsLayout.jsp : Correct some syntax errors(bug reported by David Marshall)
    • taglib.tiles.UseAttribute : Add release of variable 'id' in release method (bug reported by Heath Chiavettone)
    • tiles.XmlDefinition.XmlDefinition : Add inheritance for controllerClass and controllerUrl attributes (bug reported by Jim Crossley)
    • tiles.XmlDefinition.I18nFactorySet : Add another loading method for config files in order to let Websphere 3.5.x run (patch from Stephen Houston)
    • tiles.ComponentActionServlet : Add overload of processForward and processInclude in order to catch properly forward in struts1.0.x struts-config (bug reported from struts user list)
    22 Feb. 2002
    • Correct build process preventing examples compilation in war files
    20 Feb. 2002
    • New tiles-blank-struts1.x applications
    • Change distribution (again) : back to the old fashion
    18 Feb. 2002
    • New tiles-blank application
    • Added a TilesController to run with latest Struts 1.1 dev
    • Change distribution : a stable release build shipped with Struts1.0.x and a development release build with Struts1.1 dev
    11 Jan. 2002
    • Corrected bug preventing empty <put> body tags in Tomcat4
    • Corrected customized factory loading. It now works again
       more ...
    libstruts1.2-java-1.2.9/web/tiles-documentation/doc/portal/revisionsCont.html0000644000175000017500000001627710404045242030041 0ustar arnaudarnaud00000000000000 Untitled Document

    History (con't)

    27 Dec. 2001
    • Add commented examples portal
    • Allow controller to be associated to a Tile
    • Allow beans set in <put> and <putList> tags
    • Add a reload action, and a reloadable factory wrapper
    • Move NoOpAction to actions subdirectory
    02 nov. 2001
    • Correct another bug with Orion : "importAttribute not working when reused"
    29 oct. 2001
    • Allow body content in tag <put> and <add> in xml files
    • Correct bug with Orion : "insert tag attribute not reset when ignore=true".
    08 oct. 2001
    • Correct bug "path overloaded when inheriting definition".
    • Add example "dynamic portal"
    • Add Tile Rss Channel (Thanks Ted Husted)
    27 sept. 2001
    • Correct bug preventing definitions file to be loaded when using latest commons-digester.jar.
    • Remove component-config.tld (replaced by tiles-config.tld).
    • Add a tilesForStruts1.0.jar file, intended for Struts1.0
    13 sept. 2001
    • Correct bug in getAsString. Nothing is written when ignore=true and no attribute is found.
    09 sept. 2001
    • Modify ComponentActionServlet. It now allows to :
      • use a Struts action as the page attribute of an <insert> or <definition>
      • modify tile attributes inside action
      • associate an action with a tile, and this for each tile.
    • Update and modify the "invoice" example.
    30 jul. 2001
    • Merge Documentation and tutorial in one war file.
    25 jul. 2001
    • Now use commons.Digester, according to new Struts policy.
    19 jul. 2001
    • Components become Tiles.
    • Start integration in Struts
    • Change code package names accordingly
    04 jul. 2001
    • Add flush attribute to get
    • Update tutorial
    • Add a DTD for configuration file. However, DTD is not used (yet) for validation.
    02 jul. 2001
    • Tested successfully on Tomcat-3.2.1, Tomcat-4.0b5, Orion-1.4.5, Resin-2.0.0
    • Correct the release() bug preventing framework to run on Resin-2.0.0
      • Remove calls to release() in doEndTag(), call to releaseInternal() instead.
    17 jun. 2001
    • Remove backward compatibility with deprecated tags. Update webapps accordingly
    • Release multi-channels example.
    20 may. 2001
    • Change definition factory implementation.  This simplify design and usage of others implementations. A 'multi-channel' implementation is in study.
    • Allow to insert an 'action URL' as well as a 'definition' or a 'jsp'. This implies a check in ActionServlet just before doing effective forward or include.
    29 apr. 2001Stable version
    • Role attribute is taken into account.
    • PutList accept nested putList.
    • Clearly separate definition factory.
      • Possibility to implement others definition factory
      • Can provide definition factory class name as servlet attribute
    • Change nested tags implementation (PutTag, PutListTag, AddTag, InsertTag, DefinitionTag).
    19 apr. 2001
    • Correct a bug preventing Components to run on Orion 1.4.5. Call release() at the end of insert tag.
    08 apr. 2001
    • Add attribute 'ignore' to tags <get> <insert>.
    • Add tag <getAsString> to replace <getAttribute>
    • Change tests suite in comps-doc
    02 apr. 2001
    • Use word "definition" instead of "instance". Concretely, a lot of class names and tag names change. Have replaced a lot of word "instance" by "definition. Old tags still exist for backward compatibility.
    • Can define a "definition" in XML file, in an Action, or by using tag <definition>
    14 feb. 2001
    • Added role attribute in tags. Components are again fully compatible with JSP Templates.
     
    07 feb. 2001
    • Modification of 'ActionComponentServlet.java' to be compliant with latest Struts servlet implementation. Import the right html.Constant class.
    11 jan. 2001
    • Modification of 'ActionComponentServlet.java' to be compliant with new Struts servlet implementation. New classes are not compatible with Struts prior to 010108
    08 apr. 2001
    • Add attribute 'ignore' to tags <get> <insert>.
    • Add tag <getAsString> to replace <getAttribute>
    • Change tests suite in comps-doc
    02 apr. 2001
    • Use word "definition" instead of "instance". Concretely, a lot of class names and tag names change. Have replaced a lot of word "instance" by "definition. Old tags still exist for backward compatibility.
    • Can define a "definition" in XML file, in an Action, or by using tag <definition>
    libstruts1.2-java-1.2.9/web/tiles-documentation/doc/portal/strutsIntegration.jsp0000644000175000017500000000311210404045212030551 0ustar arnaudarnaud00000000000000
    Tiles and Struts

    Tiles are actually shipped with Struts

    Tiles and Struts code are clearly separated. In fact, Tiles can run without Struts. But using both give you interresting features, like forwarding an action to a tile's definition. Following is a list of actual modifications :

    Tile Action Servlet
    • Add a "processForward" method.
    • Purpose : be able to subclass servlet, and override the forward mechanism.
    • Needed if you want to forward to a definition in struts-config.xml.
    • A ready to run servlet is provided.
    text tag
    • Not mandatory, can be omitted if not used
    • Add a "prefix" attribute.
    • Purpose : be able to add a prefix to the name of generated input tag. This modification is not mandatory. It is only useful in some examples.
    libstruts1.2-java-1.2.9/web/tiles-documentation/doc/portal/tilesCompsTemplates.jsp0000644000175000017500000000131010404045212031000 0ustar arnaudarnaud00000000000000
    Tiles, Components
    and JSP Templates

    Tiles was formely known as "Components". But as components means all and everything, we have choose to rename them to Tiles. 

    Tiles provide a superset of Template tags as defined in Struts by David Geary : you can find all tags and behavior defined by Templates. But, Tiles  go one step beyond and extend the concept of "templates" to the concept of "parameterized components" or "Tiles".

    libstruts1.2-java-1.2.9/web/tiles-documentation/doc/portal/todo.jsp0000644000175000017500000000142310404045214025753 0ustar arnaudarnaud00000000000000
    To Do
    Components Configuration File
    • Add the ability to have attribute value in tag body. This is already the case in JSP pages, but not in Configuration file.
    Reload
    • Be able to reload definitions descriptions without restarting web container. This can easily be done with an administration page.
    libstruts1.2-java-1.2.9/web/tiles-documentation/doc/portal/welcome.jsp0000644000175000017500000000164710404045232026451 0ustar arnaudarnaud00000000000000
    Welcome

    Welcome to the Tiles website. This "portal" page is an example of what can be done with Tiles. It is made by assembling Tiles.
    You can :

    • Take a glance at some Tiles features and capabilities by browsing the commented live examples (avalaible if you install Tiles)
    • Check the "Quick Overview" for code examples and results
    • Start learning Tiles with the tutorial
    • Learn Tiles Advanced Features (pdf)
    • Read article from javaworld

    libstruts1.2-java-1.2.9/web/tiles-documentation/doc/compatibilityChanges.html0000644000175000017500000000525710404045240030027 0ustar arnaudarnaud00000000000000 Components : Backward Compatibility Changes

    Backward Compatibility Changes

    Deprecated

    New usage

    <include > <insert >
    <putAttribute > <getAsString >
    <getAttribute > <getAsString >
    < instance= >
    (in tag <insert > or <include >)
    < definition= >
    (in tag <insert >)<

    Default definitions file name :

    • componentInstances.xml
    • templateDefinitions.xml
    Several possibilities :
    • Keep same name and set it in xml-config.xml:

    <init-param>
        <param-name>
            definitions-config
          </param-name>
          <param-value>
            /WEB- INF/templateDefinitions.xml
          </param-value>
     </init-param>

    • Change name to new default (componentDefinitions.xml)
    Components parameter names in web.xml:
    • instances-config
    • instances-debug
      Use new names :
    • definitions-config
    • definitions-debug
    To update your web site, replace all deprecated tags with new tags.
    You can use replacement tools to search for :include to be replaced by :insert libstruts1.2-java-1.2.9/web/tiles-documentation/doc/comps2Tiles.html0000644000175000017500000000712710404045226026073 0ustar arnaudarnaud00000000000000 Components : Backward Compatibility Changes

    Components to Tiles
    Migration Path

    In Webapps

    • Put "tiles.tld" and "tiles.jar" in WEB-INF/
    • Replace all reference to 'components.tld' by 'tiles.tld' in *.jsp and *.xml files.
    • Replace old package name by new one wherever you use package name (don't forget web.xml and struts-config.xml)
      • s1.struts.components --> org.apache.struts.tiles
      • s1.struts.example.component--> org.apache.struts.example.tiles
      • s1.struts.taglib.components --> org.apache.struts.taglib.tiles

    In Java code

    • If some of your java code use or extends old Components classes, you need to rename imported classes :
      • s1.struts.components --> org.apache.struts.tiles
      • s1.struts.example.component--> org.apache.struts.example.tiles
      • s1.struts.taglib.components --> org.apache.struts.taglib.tiles

    Tips

    • Jbuilder 5 have a tool called "package migration". You can define your own set of migration name using previously defined rules.
    • Lot of tools (like HomeSite) have extended replace command.

    Very old component versions

    If you use a very old component version, you also have to change some tags and names :

    Deprecated

    New usage

    <include > <insert >
    <putAttribute > <getAsString >
    <getAttribute > <getAsString >
    < instance= >
    (in tag <insert > or <include >)
    < definition= >
    (in tag <insert >)<

    Default definitions file name :

    • componentInstances.xml
    • templateDefinitions.xml
    Several possibilities :
    • Keep same name and set it in xml-config.xml:
        <init-param>
            <param-name>
              definitions-config
            </param-name>
            <param-value>
              /WEB-INF/templateDefinitions.xml
            </param-value>
        </init-param>
    
    • Change name to new default (componentDefinitions.xml)
    Components parameter names in web.xml:
    • instances-config
    • instances-debug
    Use new names :
    • definitions-config
    • definitions-debug

    To update your web site, replace all deprecated tags with new tags.

    You can use replacement tools to search for :include to be replaced by :insert

    libstruts1.2-java-1.2.9/web/tiles-documentation/doc/download.jsp0000644000175000017500000000034710404045212025316 0ustar arnaudarnaud00000000000000<%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/doc/extensionsTags.jsp0000644000175000017500000000034710404045210026523 0ustar arnaudarnaud00000000000000<%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/doc/index.jsp0000644000175000017500000000023010404045246024614 0ustar arnaudarnaud00000000000000<%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/doc/installation.jsp0000644000175000017500000000034510404045246026215 0ustar arnaudarnaud00000000000000<%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/doc/overview.jsp0000644000175000017500000000034510404045226025360 0ustar arnaudarnaud00000000000000<%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/doc/tilesTags.jsp0000644000175000017500000000035110404045246025450 0ustar arnaudarnaud00000000000000<%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/doc/tutorial.jsp0000644000175000017500000000022410404045214025346 0ustar arnaudarnaud00000000000000<%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/doc/tutorialStaticIndex.jsp0000644000175000017500000000076710404045202027517 0ustar arnaudarnaud00000000000000 Tiles : tutorial Examples not Available on this site

     

     

    The tutorial live examples are not available on this site.

     

    You can try them by downloading Tiles application, and running the provided war file in a jsp container.

    libstruts1.2-java-1.2.9/web/tiles-documentation/doc/userGuide.jsp0000644000175000017500000000034610404045216025446 0ustar arnaudarnaud00000000000000<%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/examples/0000755000175000017500000000000010423130301024031 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/tiles-documentation/examples/rssFeed/0000755000175000017500000000000010423130301025424 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/tiles-documentation/examples/rssFeed/apacheweek-headlines.xml0000644000175000017500000000335710404045232032214 0ustar arnaudarnaud00000000000000 Apache Week 262 The essential resource for anyone running an Apache server, or anyone responsible for running Apache-based services. en-gb http://www.apacheweek.com/ Copyright 2001, Red Hat Europe editors@apacheweek.com (Mark Cox) webadmin@apacheweek.com (Mark Cox) 20010907 20010907 Apache Week http://www.apacheweek.com/img/apacheweek_channel.gif http://www.apacheweek.com/ 88 31 Apache Week Under development http://www.apacheweek.com/issues/01-09-07#dev Controversy over a gzip content compression module for 2.0 In the news http://www.apacheweek.com/issues/01-09-07#news New web server surveys this month agree that Apache is still in use on around 60% of all sites Featured articles http://www.apacheweek.com/issues/01-09-07#featured Analysing Apache logs with Webalizer; improving your Apache server performance libstruts1.2-java-1.2.9/web/tiles-documentation/examples/rssFeed/rss-example.xml0000644000175000017500000000410210404045234030414 0ustar arnaudarnaud00000000000000 MozillaZine http://www.mozillazine.org Your source for Mozilla news, advocacy, interviews, builds, and more! en-US (PICS-1.1 "http://www.rsac.org/ratingsv01.html" 2 gen true comment "RSACi North America Server" for "http://www.rsac.org" on "1996.04.16T08:15-0500" r (n 0 s 0 v 0 l 0)) MozillaZine http://www.mozillazine.org/image/mynetscape88.gif http://www.mozillazine.org 88 31 Articles, discussions, builds, and more... Java2 in Navigator 5? http://www.mozillazine.org/talkback.html?article=607 Will Java2 be an integrated part of Navigator 5? Read more about it in this discussion... Communicator 4.61 Out http://www.mozillazine.org/talkback.html?article=606 The latest version of Communicator is now available. It includes security enhancements and various bug fixes. Mozilla Dispenses with Old, Proprietary DOM http://www.mozillazine.org/talkback.html?article=604 The Animation Contest is Now Closed http://www.mozillazine.org/talkback.html?article=603 Send Comments about MozillaZine? responseText http://www.mozillazine.org/cgi-bin/sampleonly.cgi libstruts1.2-java-1.2.9/web/tiles-documentation/examples/tiles/0000755000175000017500000000000010423130301025151 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/tiles-documentation/examples/tiles/portal/0000755000175000017500000000000010423130301026452 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/tiles-documentation/examples/tiles/portal/advert1.jsp0000644000175000017500000000011710404045206030545 0ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/tiles-documentation/examples/tiles/portal/advert2.jsp0000644000175000017500000000025710404045240030551 0ustar arnaudarnaud00000000000000
    libstruts1.2-java-1.2.9/web/tiles-documentation/examples/tiles/portal/advert3.jsp0000644000175000017500000000011710404045222030545 0ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/tiles-documentation/examples/tiles/portal/login.jsp0000644000175000017500000000060010404045242030304 0ustar arnaudarnaud00000000000000
    Login

    If you have World Financial accounts, you can Login to view your account information.
     

    libstruts1.2-java-1.2.9/web/tiles-documentation/examples/tiles/portal/messages.jsp0000644000175000017500000000162510404045234031014 0ustar arnaudarnaud00000000000000
    Messages
  • Your CD matures in one month!
  • Now Providing a Technology Mutual Fund
  • Children's Savings Account Program Update
  • Small Business Program Offer
  • Financial Tip of the Day
  • Mortgage Rate Chart - See how we compare!
  • Check out our 1-year and 6-month CD rates
  • Auto Insurance Rates Lowered
     
  • libstruts1.2-java-1.2.9/web/tiles-documentation/examples/tiles/portal/newsFeed.jsp0000644000175000017500000000274310404045250030745 0ustar arnaudarnaud00000000000000
    News Feed
    Business News
  • Top Fund Managers Make Their Calls On Funds
  • World News
  • China Democracy Crackdown
  • Pope Visits The U.S. In May
  • General News
  • Clinton Polls in Question As To Accuracy
  • School Violence Erupts And Safety Questions Are Raised
  • Sports
  • Winners And Losers - NFL Season Wrap-Up
  • Ski Finals On The Wire For The Alpine Championships
  • Health
  • Tea - A Cup of Comfort
  • Relieve Stress The Natural Way: 10 Health Tips
  • libstruts1.2-java-1.2.9/web/tiles-documentation/examples/tiles/portal/portalBody.jsp0000644000175000017500000000142710404045230031320 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/examples/tiles/portal/stocks.jsp0000644000175000017500000000513410404045210030504 0ustar arnaudarnaud00000000000000
    Stewart's Hot Stocks  
    Symbol Price Change
    AOL 104.25 5.00
    CSCO 73.75 1.75
    HD 68.62 1.69
    SONE 38.88 1.62
    DJIA 10,302.13 47.80
    Quote:  Get Quote
     
    Symbol Search ] Edit Portfolio ]

    libstruts1.2-java-1.2.9/web/tiles-documentation/examples/tiles/portal/whatsNew.jsp0000644000175000017500000000134310404045240030777 0ustar arnaudarnaud00000000000000
    What's New
    New Financial Calculators
    Saving For A College Education?
    More ]
     
    Special Offer
    Get free real-time quotes for three months with a World Financial brokerage account. [ More ]
     

    libstruts1.2-java-1.2.9/web/tiles-documentation/examples/tiles/adminSummary.jsp0000644000175000017500000000165010404045212030344 0ustar arnaudarnaud00000000000000
    Administration
    • Some administration facilities are provided.
    • It is possible to reload definitions configuration files without restarting the web server.
    • Also, it is possible to view definitions loaded and resolved by the factory.
    • This facilities are used during development. They should be removed or protected with a password if used in a production environment.
    libstruts1.2-java-1.2.9/web/tiles-documentation/examples/tiles/body.jsp0000644000175000017500000000056710404045224026644 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
    This is the body !
    done
    libstruts1.2-java-1.2.9/web/tiles-documentation/examples/tiles/componentsSummary.jsp0000644000175000017500000000113210404045204031435 0ustar arnaudarnaud00000000000000
    Reuse Tiles
    • A tile can be used several time in a same page
    • For example, you can have a Tile rendering an address, and use it to render as well shipping and billing addresses
    • new examples not yet available, see tutorial in meantime
    libstruts1.2-java-1.2.9/web/tiles-documentation/examples/tiles/footer.jsp0000644000175000017500000000054310404045206027177 0ustar arnaudarnaud00000000000000
    Copyright © 2001-2004, The Apache Software Foundation
    and Cedric Dumoulin
    libstruts1.2-java-1.2.9/web/tiles-documentation/examples/tiles/header.jsp0000644000175000017500000000041210404045242027124 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/web/tiles-documentation/examples/tiles/i18nSummary.jsp0000644000175000017500000000154710404045240030041 0ustar arnaudarnaud00000000000000
    Internationalization (i18n)
    • Tiles provide some facilities for i18n
    • It is possible to load a different Tile according to the user Locale setting
    • Tiles have the same definition name, but different definition attributes.
    • Definitions are defined in separate configuration files, one for each locale. Appropriate file is loaded using the same rules as for Java properties : configuration file name is extended with locale abreviations
    • new examples not yet available, see tutorial in meantime
    libstruts1.2-java-1.2.9/web/tiles-documentation/examples/tiles/menuSummary.jsp0000644000175000017500000000152210404045230030216 0ustar arnaudarnaud00000000000000
    Menu
    • Build easily menus by specifying entries (or items) to be rendered, and layout used to render them.
    • A menu entry can contains text, link, icon, tooltip, ...
    • Menu layout renders each entry according to properties set.
    • menu is inserted anywhere with the tag <tiles:insert name="menuName">
    • It is possible to change all menus look and feel simply by changing menu layout. No need to change already defined entries.
    • All menus in this site are build using entries and menu layout.
    libstruts1.2-java-1.2.9/web/tiles-documentation/examples/tiles/multiChannelsSummary.jsp0000644000175000017500000000141410404045226032065 0ustar arnaudarnaud00000000000000
    Multi Channels
    • Tiles provide some facilities for "multi channels"
    • It is possible to define different Tiles for different channels.
    • Appropriate Tile is loaded according to channel key store somewhere (usually associated to current user)
    • Examples of channels : [html, wml, ...] or [gold, silver, bronze, ...]
    • new examples not yet available, see tutorial in meantime
    libstruts1.2-java-1.2.9/web/tiles-documentation/examples/tiles/myLayoutSummary.jsp0000644000175000017500000000113610404045204031077 0ustar arnaudarnaud00000000000000
    User Customized Layout (Skins)
    • It is possible to change the main layout used by one site
    • Each layout shows the site in a differnent L&F
    libstruts1.2-java-1.2.9/web/tiles-documentation/examples/tiles/myMenuSettings.jsp0000644000175000017500000000641110404045212030671 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <%-- Render a page allowing user to customize its menu. @param choiceItems Available menu entries proposed as choice @param userItems Actual user menu entries --%>
    • Choose an item from "Items Choice" colomn, and add it to "my Items" using the '>' button.
    • You can also rearange your Menu by using appropriate buttons : '^', 'V' and 'delete'
    • Validate your menu by clicking on 'validate' button. Load any page and check your menu !
    Items Choice
    My Items


    libstruts1.2-java-1.2.9/web/tiles-documentation/examples/tiles/myMenuSummary.jsp0000644000175000017500000000212310404045240030523 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
    User Customized Menu
    (my Menu)
    • It is possible to allow user to customize its own menu.
    • User menu settings are stored in user session as a list of menu entries.
    • The same layout as other menus is used, but the list is provided by an associated "controller".
    • You also need to provide a page allowing user to choose and arrange its own menu entries.
    • You can use provided example, or improve it to meet your need.
    • Edit user menu entries :
      my Menu
    • Actual user menu :
    libstruts1.2-java-1.2.9/web/tiles-documentation/examples/tiles/myPortalPrefs.jsp0000644000175000017500000000020710404045224030505 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/examples/tiles/myPortalSettings.jsp0000644000175000017500000000625610404045246031244 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
    libstruts1.2-java-1.2.9/web/tiles-documentation/examples/tiles/myPortalSummary.jsp0000644000175000017500000000167210404045220031066 0ustar arnaudarnaud00000000000000
    User Customized Portal
    (my Portal)
    • A portal can be customized by user.
    • To do so, build a portal, and add it a "controller" checking and setting user choosen Tiles.
    • You also need to provide a page allowing user to choose and arrange its own Tiles.
    • You can use provided example, or improve it to meet your need.
    libstruts1.2-java-1.2.9/web/tiles-documentation/examples/tiles/mySkinSettings.jsp0000644000175000017500000000205610404045204030673 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
    • Current skin is highlighted.
    • Select and validate to change skin
    • Reload page to see result
    Available Skins
    • In the examples, only this page is affected by skin change.
    • It is possible to affect all pages by changing root layout definition in configuration file.
    libstruts1.2-java-1.2.9/web/tiles-documentation/examples/tiles/portalSummary.jsp0000644000175000017500000000130110404045226030553 0ustar arnaudarnaud00000000000000
    Portal
    • A portal is built by assembling Tiles in columns.
    • A special layout exists to do such think.
    • This page is an example of a portal.
    • To realize your portal, you specify which Tiles you want to be render in which columns. This is done in centralized definition file or in <insert> tag.
    • Other portal example
    libstruts1.2-java-1.2.9/web/tiles-documentation/examples/tiles/rssChannelErrors.jsp0000644000175000017500000000131610404045250031174 0ustar arnaudarnaud00000000000000<%-- /** * Summarize channels errors as unadorned HTML. * * @parameters errors * @version $Revision: 1.2 $ $Date: 2004-01-19 04:41:57 +0000 (Mon, 19 Jan 2004) $ */ --%> <%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
    Error while reading channels.

    Are you connected ?
    libstruts1.2-java-1.2.9/web/tiles-documentation/examples/tiles/rssChannels.jsp0000644000175000017500000000273510404045206030171 0ustar arnaudarnaud00000000000000<%-- /** * Summarize channels as unadorned HTML. * * @param CHANNELS List of channels * @version $Revision: 1.2 $ $Date: 2004-01-19 04:41:57 +0000 (Mon, 19 Jan 2004) $ */ --%> <%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/examples/tiles/rssChannelsSummary.jsp0000644000175000017500000000144410404045232031542 0ustar arnaudarnaud00000000000000
    Rss Channels
    • This example shows how to do a Rss Channels Tile.
    • The Tile is made of a controller loading the requested rss channels, and a view (jsp page) rendering the loaded channels.
    • It is possible to change the rendering page to adapt it to your need.
    • Channels URLs are set in config files, or as http request parameters.
    libstruts1.2-java-1.2.9/web/tiles-documentation/examples/tiles/tabsSummary.jsp0000644000175000017500000000165010404045246030214 0ustar arnaudarnaud00000000000000
    Tabs Layout
    • You can easily build tabs by using predefined "tabs layout".
    • All you need to do is to specify which bodies you want to render in tabs.
    • You can also associate name, icon and tooltip to tab index.
    • Using provided example, you can easily customize the tabs layout rendering.
    libstruts1.2-java-1.2.9/web/tiles-documentation/examples/index.jsp0000644000175000017500000000023310404045214025663 0ustar arnaudarnaud00000000000000<%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/examples/myMenuSettings.jsp0000644000175000017500000000025110404045204027546 0ustar arnaudarnaud00000000000000<%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/examples/myPortal.jsp0000644000175000017500000000023610404045216026370 0ustar arnaudarnaud00000000000000<%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/examples/myPortalSettings.jsp0000644000175000017500000000024710404045236030115 0ustar arnaudarnaud00000000000000<%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/examples/portal.jsp0000644000175000017500000000023610404045234026062 0ustar arnaudarnaud00000000000000<%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/examples/rssChannels.jsp0000644000175000017500000000024310404045220027035 0ustar arnaudarnaud00000000000000<%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/examples/skinSettings.jsp0000644000175000017500000000024510404045172027247 0ustar arnaudarnaud00000000000000<%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/examples/summariesTabs.jsp0000644000175000017500000000024610404045210027373 0ustar arnaudarnaud00000000000000<%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/examples/tabs.jsp0000644000175000017500000000023410404045220025503 0ustar arnaudarnaud00000000000000<%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/images/0000755000175000017500000000000010423130301023460 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/tiles-documentation/images/jakarta-logo.gif0000644000175000017500000001750610404045222026541 0ustar arnaudarnaud00000000000000GIF89a^dæÿÿÿÿ!!!111999BBBcccsss{{{ŒŒŒÞÞÞïï籠„Þ„„Îï÷JB„”Öÿï!çÎÆµZ9÷RÿB÷k1ÞBÎ{Rç„RÞk1ÎRÖœ{ï{9çµ”ÿsÿc÷­{¥B½{JÎkÞcœ”Œ÷çÖskc÷¥RÎÆ½¥Zν¥ÖÆ­­”kcZJïÖ¥­{Ö­Bïµ)ç΄¥„sZ÷Ö)έέµœÞ½çÖcÿç½½µ{{s„„{„„sBcÖŒµÿ9ÿ9­c)ÎB!Z9ŒkÿkÞœÿ”)Æs­”ÞcŒJkcŒµÿ”½ÎŒÞ{”ÖÿÖ掠”Œÿï{kÖ1½”{ÞµµŒÿµœc΄ï{½ç„ÿŒµZçJ”ï!„{9”9ÞRÿR¥Rk­1Î!{÷1ïÿ­Ö,^d@ÿ€‚ƒ„…†… ‡‹ŒŽ‘’“”•–—˜™š›œ— ‰C¤CBŸ„‰BDB33*BE *||s|xwu·x}&##-"¡84©ÐÑÒÓÔÕÖ×Пڡ‰´ B¤â¤DQIHJHLRQSRTT^V_Wa`cùakinþmoÎøs3çMƒÀö< ð@‚„ *˜à B„l3jÜȱ££o.T$`Á† C`$P €Í˜3bòyy'ÅŠvMÎÇÓˆ‘#H– I²d $MØM‰"Þ-[¶xÁ7MÌ|hÞø«#G«?:}îìÙC¡ì„9tæ™°!‰ÿL@Ð@× xóêÝ«é"n `HáŸ>xøÔáµXë4ùÆ\ÍwÆË—/` n¹â%ª•&9ŸðÝó§%GÔ!š´iN&준Žo³å/‘Å\É'ÆJdÉhÞâó O=„e0ÑÀs/òN½zµmÜuS nMLÈ@A|Ùâ†äÙs°OZ7wÚ¸yó>¾?5tüÍq“&~iŒ‘Æ=c€áÅ”‰Ûbàs™=‘}áÅTHÅ[L‘EWpaE^xA‡|õÁÿCH°PD˜`@!ƒ €ÐÂŽ¼×o&ÛŠdå´,PÀÃAæp†4X%2a@P¸°+H¯&\ DÓ©?áè ŠQ”œH V°B<® …ìQ¦3`øB¼`:7¨Á JÃÔ †­À§~86 ?P}h4°¿Üïˆ~ËÎ’D0‚˜`9ã©€øÚÞƒØg>oèÏcú#†0Œ õðB>®@Í„á2V®iá p,WDZ“Ÿ$! FH‚:–€Ž›À£&M€‡g´ ½Ë`Æ /èÁ|àƒÉ( Bv@$ZÒT©(’7åË)@ÿÊBÞr d@&( *)0@¤!ÁðC Ó‡<øá‹ù^Ú0=„kàî0:Ì¡¹Ãúc†60³Èä¥Vú¡Èèã7ò$Pƒå F6ÊÁzàEú Ú¸¤:y—IU Ü€g‘4©oÔ³õ´ç X¢yúóŸ˜2â:Z©}©JhùYAI©Ž 2„B÷PÆE4e -D¿–ö³Ná åæ$×0Œò$hiHº+“6g]„ FJš°MŽU8€ в‡É ’û¨£„ÖÑI¥êa£ ZLíwÑ»!”a-—I“RŠ-ÊeèÿZ\Jˆc5,«¤ÙªS—ªQF½lŽkÙ ªÔ?¼T,å Û`êVULu4ÚRÀ]IñÑ"kwxDR 1ØM(à§8,!t ‰ÀV¢°‡r,^0¶R:#K›­01X€³ÅVŒ8¹@d]Em±¡‚ÀT8X+wÁvµýlg ‚Ú&ඃ(-mm[ѱ·ÄUE«°Û¹ámÇr×Ú¢Ý?¸öj…pÁ‰ ÙËB"žPáªêÝòš×# `_U@‹F, O. fÐ ðZÀ$xAÂ#ÙiÀv+ðyLàIdR‰0 )Ø› @ÿ*Âÿ,‡]ª! kÈ¢~V׺6ñay†rÔw‚Ü@Gà-°ŠÏ;$n¸`ð:éN 0–8á)RШ—BÞ(P -\4o±‡îAäó¦;¬‰ÁE\PЂÜ€p†”÷¬7©àÏC˜Añ]„•(  ¬Ð”°%\pRvô2lŽÀ&,T˜Bg¾°…2_Æ@¼ñ œ‚iÅ4±2s¸eY*àõmà$øÁ ÌWb€ Å|ÎuFóçÂ!½,aCÞ 2àÃQi †>ÿ#0¡‚>Êj]”¡@O!LöTN™5¨Á™Å|C÷d(úÂy8¦ZpXNÄó[A{uMoOü“ ¸@YÜó¦ýøc üx èRX3r \ÀB<–²”'ìµ4GÈcQöÈ„$²)€ŒM¬°CzÚv>Ò †¤w&|¼‚ÌÔ…‰"à‘@ëMsG(‘%"  ÌS 0D|{ÀøÞ0MþÀ0@ÒÇè:³¾#›ÉB&HA´Z—G8‚µI'!6®¹ø¥áAB/FÃj( ši~„›F= gv4óšï™HKl0Z«g!|º›æPÅÿï!S—† dk¢!éW"5] \à´‡ÀÐ!,„P Y˜ âhu á >Ñ£:@3p~S’AðA7Ã)NØ8È”ÝuÝâP$É8 @0p€Ã0A[N  àðyÀCÐ}Åà!1u@Ì/åð7´!íXq¦_ºI@/1öÂpÆõébHú Ä…xÓ‘=x| ¸H:@@:P[9Àñ´{ (Oô´OJbÐ àPâ'@|Ä` éc³CÑ|àfÃv·t½@„§w°¸ÔaLïñsІ± AôÿKÁi`5à5"k9@{ìc‚b9…²€JèN‡ð ½wo¾ç€RèIRø{RxSR3“èV¨øW@–xPy8ÒøŠ“2Wcõÿâ+ã@5ÄøT¥ÂŒäàŒ*ÃŽ¤ ZtÅVŸ˜‡eRŘ+ÒxÔ1¥ +†àªÈUÜXWˆŠeáÆ0$°¹£¤hºkòä?3šI–y°À+±v`EinãS‘a ¦È g9š¦ˆjsã¢D˜(5æb,0Ep5¦eP¢¤Öfjgªd) sƒaÀ!Pgš¨¬ ½ç`8ù-BÐ[°9S[ pVp—q ÝV:‘qCãcÐ&íÖ°@# º×ªÒ‡F–™",`9NLpqM `ÿ«2/ñmnp('¬Vg¸ð¯cª àd«:­Ò:OIN:?Q|4±‘Ò³«QWa:hZdr.çK‡·0%p>pkÑJ¯hª Èó À*ÖEî¢ù:©1ë÷{ dH]”Ý£*ÇK«s°|Å |€-Ð P±+¢„,¶9,ð À¦TÐ7¦<¦¯yÔu_‡q5Áðm·«ú0ÛrMx½ð qѬ&àJ˧sP2@ð'D¯­?Koïee!1UŠ9DÐ ,QâïðeGq¢GB¡AײñÿAZÀqçgï—dð²iðЄnǤ‡a¶n‘(qö­&ª&V¦‡:·S…'ae PežÄó±2!dí =MpGMK>a]·G|Má5‘y˜=&:ý¡1¡EÁ!kbr¼dƒ«V¶baà€!-ºª«;Ø û£´Ð»m ‚b¤²)ä!I¸9U·(ѶGèÐh'' r™Á«*$F#·Kê·~dç:ÿ±s@x¬³&Ê笃ñ&Ð-6¯ãK¾ó„„¾×à·Ðòám‹ gpFâ Ôt=økÿu\׿EÑA²¡qÖÓqaÐBŒ\@yd výaLÂqÂ^z0z L¾‹zo 0âÓ:æFùAl”t-!\`[À:&S@èWz>Á¿’ÖŒQдÁ´F›–=’{Àn ©=ˆ°Ð‹C²SCä·1`¤S¬8ét`¾'6ÀÅ"æ° ½@YÔhÀƒÚ3:WyGFWÇJðTçÆ¦‡«qGüºrL¼Mc;a0ájšÑ«ãVLw@èŠ `› t¸CEÔÈ{ƒwŸdk+¦ÊwJ ïÁÉçê}Ó”i š:ÿpšÇqV€¼a B 4ÎY ÊWztdGO0²FÑ¿°A•æɆ+dBg`ºñ3ÔM‹I㔲ÌÌl47‡$4à>€& s&@|pØ—®Atÿ0Mm`M’1®ægM•§»ñVàEõ@HS0O G«ÌÎâ`G§P °ai v5q5µG{ÛI>`Ê,¾íäÌ¿g±‡ÃÀ½çÁ®×Ç‚æÌÿpagàÖß§EÖÔÇÄ«W€& ôF—$œGBuŒ¿êìpW ;1,Bß#90„áN´ç;°¹gÔG½-¶$. ÿ!àD(@ÅðÐ|ÆA8h}›ÜK¹¤ƒÈDƒÿö=þÐf€ _r°Ü^ÀÑ #Ö%Tp”gvë7›ýÇ,¢¾‰"*-Â"ŠDN6@Ø…ÍœÐHâ‚P|¨:Ë ¨ý@6¸&@èv‚Æxba}F†®ÆT@YÍÀ`\ÁÔ3>¬òç2$â· 4:fP#¯÷H’ä×7²Hýç":0ÜÄ]ÜÖáO›T…h.ÐÜpXlªP m! Ñ|è¶Å»€Þ'z xàoÐÃjLUûÑÍÔ¼kE)85„ts@N|}ÿ#öI±—6ã4Ð?>+ན)mˆOZø{'" ŽJ9˜}²@$øµ'Xd×}Â"ævCTò²bcqVíkpäÉýg À€¤wØ@ 0| ÐÀ À Àv  `d.vÀ¶s¤Hr;,àTH…KÂ…=Nçö3sCrçP˜çz¾ê«î{ýäOpHê=€Ÿ@â„¿%Dä¾þë\লiw_HĉpìúNÏð(rè8 ð Ð Õ0GÙi 岡Ø@ÿíÖÞ8ÌΊ ìœ°ÀrP©äŽ07űSðÎðȉ2Ðð­‰9HU’„ `5æ/ Yœ@ñŸ)TY¢!/^ @òÀH’éñ!9Ðòºñu§ó¾’,st˜Šð9)ŽÈŠ'E^Œ ˆÜÕ)Ô‰P¤ØYM?)»Õ‰¥5±º*ƒ0õ‹¢òùQ)©.VORIE¤5»˜Œ‚R¦HõD•ŠsŒÐ®,¡Âí*¨•’B¿ô?É^…p’ )·ˆËˆ6€_ÿ¢' /šð•iøíÂbˆOGŠ/^E9G‰PxÏZ¬ 2æ9 À9DrÒØ‰®÷|_“hùñ"9Ñ ÚxïäNB™"Žˆ26ƒ7Ð2ú‚€ú†°ú³èúYïCŸïÀO“7Ó¥·‰ß8ø9Ž¿?¸X“…4Ò?)ÏúË?I-¿üs½8éýÉTD¿0-*Ø‚e~¸85žVÕüPE L ûCRª ƒBB„ˆˆ‹ ‘’‚„†ˆŠ„••‹’”’„•„ ‘£˜B±²³.©ƒ§¡­º½¾¿ÀÁ½Ÿ¼–‹„ Âÿ¥ƒˆ¯ƒ«“„‡›ƒ¬„.Ôƒ*»Ø‘ÛŒäÑ¡Æ×ƒÙšÈ¾ÄòÞ•—ƒµ.ƭʃ̾îýy·®ž³ƒÒ«VÌ`#‘ -+@q™®s‹5C4c‘!!2æk÷GÚ±eÍ:Â)2]ÉP[ªô1䢑.|YÉß  XtÀ“C1ÿ (1À³E$0ðjÜÓŒøjÝlž¨£'¹EZ4cºÜ2‹6’@B3îÍpiÑZ¼.ÝPj±þÁvQ_¾;­éb‡ˆ¬à?gª[öS[ ™»va® C‹Mº´éÓ¨µ2Nͺµë×°cËžýu2ÿíÛ¯àæH°ÑŒwŠþÒ½{6ñâ´õ9¹óÒèŠImÀª¤ê £oÕþ|]÷ëv¯°äp¢¦‹7UÒ€\’‚v’Ÿ^Ÿ!ð0`@’‹fø‰Ò+•ü—H~ +ì hßñõ·€u“$pžSZâà|3,°@\Jr@  £€Ð,%y,wÜéçÉ.À€Ô‰3꣒((Ö˜CÁ˜ãX@Š•V‘BÊØÈHÖ7dŒP Cà”TÆØâ•ÛÑ 3n©Üe“Ò^$ïI¢‚ˆœé]#Ü'df8 P‹ IzÙ%"r@§{ùå¹'+bn€ŸÜPÔ}UÚHc€‡½•‰H~(^Œ þ‰å¥ÎY Øqcqê$¦ò€ê¢¨¤Òæi/mv’j|@a©•œ «6©ä9ë­¸æªë®¼öêë¯À’;klˆ›b#cú,{ÕE„¦Ø¦mB-¯ˆ@æ®'@@*ìª,¢Ù‚k$—‘| @¸ß@Ëh9æfb$dÞŠdpˆšˆî!†"ªh°“1Âî±l0©¥,#¬ ¿ú!±B|ðÄãØp(Úz’q- ¤‡kXæêVlòÉ(§¬òÊ,·ìòË0Ç,ó!;E•W† a©Õv[n1jàpÃw\C7[оWÜ‚b!$–¡y'r€X`³u×- Þ7Ð@6ºUxáÐÔíw]Ì ÝÏHàâ‹`w£s ìX³ y]8;àcÏPfxe–ù ·€†T6°€5’ù³›Aæ„w…snyh¢3Ú9æ‰pàšÿÀ€—n:€ÿ8¢¦Á]h†F÷é—b„ €º×®³›¡¥ˆØbxXÜÐöÚižèh…²&Xéܶ,¸ëN¨4Æ[ïÃû%!©Á¥Új‡"Ç»d‰çþÇð¢;÷"¾Ò\f4€sвþG¡“5g!•K7áÖçf\ö;\Åçæ€Ú~Ý¡ÐP@ÜÀ]wq(i÷‡FÈaÒMG÷~©ï÷÷Ï»÷>ó¸Oh\ʘA`ÉBÿÌ:>\Ô%R}!"fwÑ“~@õö·?¡Ú9rã €õ?¡Õo!”ÈèÀe€Ì€ x[ñTG,•­¯ïWݰÿ¾\Ɔøø÷=v®xãKšBP3Ü%o!YÖjöêå\€^†ç²plÄkáD‚º¹aK‡ÿxœ!n»p•Ë]EŒ!Ch¨¼'Љ)äâçVÅ!º°fës Eæ×3Õõk‰â’âBö7º)†‘!9{£æø²;Ê1!ë«¡ß–ˆ.2±w5œc»xH–}Ñ„ ya¸ö®¼5@’“œdü"2‘qîŒhäõvD0þƒ‡âê_'ÿ‘·éÝPh73%*J"‚‹´b¸¤§è‰eë‹$%)Y7èÝò!BCd1©¥H™™€á @ SWD> ñ¯ƒeÇÎGÊPÿRS•†Œã—¨MGFD‘´d$Ý2™¡¬vÍŒˆ)†D=SžÇÄc!ã©ÌK“øâèþçDH6€ØÛ\7ÑeÊÓÔ“ç„–Fø@¡§(A-¹ÄY´!Á@ÆgOo"$T»› º YëD;8O˜â ™ÜÄ'5÷¯‡<z;#–)£ØÉ6.—á:€Åúe Jó„–Ù)QâSp!5Šâ¬' ^ #ÄÄÆÃ»b+ÄÉ3’,“ /ÅÎ….Ù ÝXÈo-pNk™#ûWWE+Þ“‡üäy&¹!‚c•]x-ÇæJÊ¥ší?: e0‡YÌc&s™Í|f4#2 ;libstruts1.2-java-1.2.9/web/tiles-documentation/images/struts-power.gif0000644000175000017500000000340610404045232026657 0ustar arnaudarnaud00000000000000GIF89a_%çÿÿÿÿÿÌÿÿ™ÿÿfÿÿ3ÿÿÿÌÿÿÌÌÿÌ™ÿÌfÿÌ3ÿÌÿ™ÿÿ™Ìÿ™™ÿ™fÿ™3ÿ™ÿfÿÿfÌÿf™ÿffÿf3ÿfÿ3ÿÿ3Ìÿ3™ÿ3fÿ33ÿ3ÿÿÿÌÿ™ÿfÿ3ÿÌÿÿÌÿÌÌÿ™ÌÿfÌÿ3ÌÿÌÌÿÌÌÌÌÌ™ÌÌfÌÌ3ÌÌÌ™ÿÌ™ÌÌ™™Ì™fÌ™3Ì™ÌfÿÌfÌÌf™ÌffÌf3ÌfÌ3ÿÌ3ÌÌ3™Ì3fÌ33Ì3ÌÿÌÌÌ™ÌfÌ3Ì™ÿÿ™ÿÌ™ÿ™™ÿf™ÿ3™ÿ™Ìÿ™Ì̙̙™Ìf™Ì3™Ì™™ÿ™™Ì™™™™™f™™3™™™fÿ™fÌ™f™™ff™f3™f™3ÿ™3Ì™3™™3f™33™3™ÿ™Ì™™™f™3™fÿÿfÿÌfÿ™fÿffÿ3fÿfÌÿfÌÌfÌ™fÌffÌ3fÌf™ÿf™Ìf™™f™ff™3f™ffÿffÌff™fffff3fff3ÿf3Ìf3™f3ff33f3fÿfÌf™fff3f3ÿÿ3ÿÌ3ÿ™3ÿf3ÿ33ÿ3Ìÿ3ÌÌ3Ì™3Ìf3Ì33Ì3™ÿ3™Ì3™™3™f3™33™3fÿ3fÌ3f™3ff3f33f33ÿ33Ì33™33f333333ÿ3Ì3™3f333ÿÿÿÌÿ™ÿfÿ3ÿÌÿÌÌÌ™ÌfÌ3Ì™ÿ™Ì™™™f™3™fÿfÌf™fff3f3ÿ3Ì3™3f333ÿÌ™f3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!þMade with GIMP,_%þH° Áƒ*\Ȱ¡Ã‡#"|hÅÁzªH\ñ¤ GCn|Fò‰ÁU$I¬BŠ$©–«LŠœÉðIɃ)CÚ|fIš@V!ç3=!cÜÜiÒ€ž–Ï*¨¢ U!ÍzÀ ŸQI¤øì‰žõ $%3-J’eÊ“lÕVOVUV•:p'V’sî´xö™Àd$ÅâõšØæ*+ ¾ ü¬J ”ä× ÉU`+°’X h‚JË^~FŠñ³[ª\Ø\q}ªÔ,zgŸv ôÙz'l¦F[óVNrk2ƒ;?ëQì@뼫X±•¶i¸pUþr6i24øê?¤.ê9êðôgW •õM‚…Æ_ŠíΪ•â^A´@~%rí)ç“|ØVÙ3@G€}‡Tpp}×YaV´Â_h‰˜l* µ“x÷”S Í $àQ}ÕœX=HÖc儞a‘ð\HXßpA8ämÉ=Òn&–HWVYDàoz´%UV~udpVô•V] „‘Vm‘PÕ cêaeŽy¹iÐKAÕiçCô ù¦B=ñ„w ÑN -TÅ’p‘2 Œ&$à†•I¥X5£”fvÔhCÕ9$„=’ô¥ nª ¥ÒÄY†9¶ø^zþ¦"ZP—ÙjgQÂ+†©Î¦>ÃBžéo!PBUy¤f™•Õ‘ÅöJ`VŠ¢i{àíii¿‚·K‰ Â&Uq)”SMªÜháŠ+¤ñº:_¸¤xj½Ý…[Et€…»[òzX¯J¤&ù¯Z¢n¼ÉÄѯ#úÉ& µš “øUÆÅ0Oÿ>aQ­°…ªå«ñÆÄ­®}Wé¥Ê i°1ôëËÏ:JúÂË/»¼Y+Pj.å#Ò¬I Þ»Ûº/IÉÔ÷[Ð^i ž–;[ž~€$ 0»«8µÔiÅ+'Cn):Ë«5œ«ÙQôðܯ¥àÈPÙºv]PÙDD8Ac»(7'éw°+»Ö«àN}Pâ†Û÷àVª°wÒ™ã=5¨Eü¥æ•Sšºè”O…·#:A€wó¯)Ë^îA€·0Ô¥c*œâ½"=§ãq‡çsÌD"ÀÛ–¢þ+»ÆEk»îQùIÕ¥ÎPP­òÚ˜dG¹ËXï’1½ ~xH_Õѧ"ú«o)&ñ;ì@€ŸïÈfc\ðÀëä~ÊËU¾ô-«diyÿÑG8R?q$^áG,æ0þIbfQàwEBA;libstruts1.2-java-1.2.9/web/tiles-documentation/images/struts.gif0000644000175000017500000001533710404045246025540 0ustar arnaudarnaud00000000000000GIF89aôVçj†¡Ft&DºÆÌFf†–¦µ&&$BFL 6dŠŠŒffd,1V|àæì¦¶Ä&5BVl2F\ÐÖÜ&6FŠš¬6T.\Vv”–¬7hv„¶¶´VVT¦¦¤664~†”ÊÊÌ^jtššœ.Nnvvt(Nt>d.LB^xÚÞä.&FfÂÎÙ>l:Z|$&B\&DFN\Š’˜±¶¼.>j~”º¾Ä¦®¸zޤ Nn$ööôŠ¢´ÂÆÌž®¼*.46\:FT .TZ^drޤ&L6^„RV\"6Lb~œ 4:>DZrŒš¢¤6NlBm’’”®®¬v†”"Fl6Vyîîì"&,ÖÖÔ2:<^vŒÍÒÔZj|ââäNNL¾¾¼ ÂÊÑNf„nnlªºÌDZp':P–š¡:Y2d†ž´qv††„~~|2TN^lÜâç"4)Jn2>L±ºÁn~Œ†Žœ..,:d;JYbbdþþüææäJJL"2Džª´†š´"Bd *LBBDrrt‚‚„BJT06Jd"Aºº¼ZZ\::<0RxŠ–¤2LZbh""$²²´RRTÂÂÄ„ŠBb„ 2^6Z„ nФJt¾ÊÔJjŒšª¼**,ŽŽŒjjl*<Œž°ªª¬zŠœÎÎÌžžœzz|<^€"**Dh‚œ¹Â̪²¸~’¤Rr”úúü¢²Ä(28*SNZd––”rŠœòòôÚÚÜ_z”^n€jrtnz„Rbtr‚”224êêì:d2Z|ÒÚÜ‚š¬*RtBl8RlRj„’¢´¢¢¤":T ":"*02BTÒÒÔ"Jl¦¶Ì.Tn†¤Fs &AFFD $ª¶¿FVh6FT6P.ZZvbjp>^.GÞÞÜ,*FdÆÎÜ*BX&FP^^\>><ž¢¨BlÆÊÏ!þMade with GIMP,ôVþ H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\ɲ¥Ë—0cÊœI³¦Í›8sêÜɳ§ÏŸ@ƒ uˆ«¨Q£C“*ÕXôǨ\P…¡µeË/«¿~]ʵ«Â:ªn¹K¶¬RN B†ÌªV\^ã*Å¥j‰Ù»xì0#F[¸r÷Ì& ¯aÔîƒ,+`Ákf8LÙð‰<×Ò5~ÌðèÑÈ=o]ê@@åÓxY‰&(«Â¦r½éÑCHÛZASÄõcÔ[=fµýõ‹3Ð:…Q+'«â™k­r$ƒØ»¤€¥ó›[·Ã4·nþ%7Ûeñæ¡°–«w³@Á{šœ|V¤M×Äl‘ïašÊ÷µŸt;±Þrh¢È)™@÷‹A×!ÖË‘´] =PYÒd"B:[˜S.WÍ>ú,²ŠbG.â%ƒ qH³ 0Ȉˆa ¸äRrÉ5ÈðçS(ÊAI#,°`"ˆPF & H"Ç*>8o=P†ŠTÑAEîˆP•±€Š,jÙ.¨5RÆŽ`r€)}sL7hƒ˜@¡OVXØ@?ÌCÙ‰ Z¨ ‡š¹¥”M¢É+ÒØÓ¢Ž4á’Me»ð O}LâÍšxà&cxÅ8þžE¦ ‚F/‘i$¢]†\Éâ®’"*De¦xƒ ›¤ã"O0V&*­“Œ¯È±È"r¼‚Æ’ŒÑÆXÕô‘ˆ•™nú⽆H—~%§ºñv,e$²ì&úÑ+ÓÜP¶Á¨}x#‰"qô"Í«XñÁ$œ²ˆ 0QD"+‚«®œáòK»x!bÊ&H#¤ÅôC)•°*½á¬¿1ÁIYŽ˜Ò¨½X‰=­\ÓJ+öl‰®œ"‡"¨ aBV|bA¼‘B™}ŒñÊ'?›2÷†I"07ëuN¸ŒR™„7?M)>ˆE| ]€ë]ðÔAg€P€‡kmìCÅlÊ*Co/Wk +Y ÐîÇ@mƒ>ºš+¬vf TÏj! AB˜šuþC*&áLÝ()eA¾pЍ€2)–° e¿_T&ûHlƒ2«YYÃV¸"èMßùÜö,· /ú…$ºžyÔ"3®eÈ‚‰P.÷›(OJ#pËâ Œ-Ë»âu²]y¬2˜„> dÄÖÏU„W‘a îâú,±ò Al#’óȧfĶ 2¨m(à¼XŽá },@&0âp i I?®1ÁÚ®9(€o§PÀ"^aT,`h°(f‘­Ô¥#l¸Ã;µ·ó¼h bè‚=:° i´ñ0pÄ1ÆPÑ^¸ba +]]÷³…Vœ†£:! T]~ï™éÞzµ‘aÊß[Ú±§«¤Øv6"8Ú8P™$«ê}[ج ÏÌiì=—ÕWþ1ºHD¢™X…+zqŠSŒÓ˜lÈq@ ïÄ?ÒÛ¯Ž5øs"°‡šñÒ Æõµ›d "4m¦ëWÐg.SUrP®À0V ¥ÃUai[ç{&Ó"—‡_wUä#wc;P¢§ D• d`x ½äZ‡Õ£ EeU ]ÐBc¢3:øKQ Ö 7 ç s13OÝñBÈ ÀÐ Ö^0Ó«!}±V¡;þEÀ^û&U° ÷!€A£‚ô1W“5]G\ÁvÅ8¸±KXFH _“fr³? Ô„S+êÓ,!CHÁ#p†€kg‚PCWÛ±?kŠfx>®“›v_”È1ºsKgH\§àMüãHÛó³P–Àl2aîÃ9C@¸³‹x ‘ œ€40‘´$@N>H5Ó‡ðŠfÆ‘:•Ád6i2õ³ƒã+Y³5À§clè[„ eÄ3ÙŠºs‡ñ ðpwn¡=o¡=ÑObp 9Wr°Œ€%"E…~ËÓŠ†1h¨ié·†”ÁYÓ‰e?âØgH2°øu<Ö×ÐV±2‹³ þ3È#m?Êá w€Ç³Š¸Š‘‰È{@1ƒ°mê±,˜åE$é+èu 1Š<ÖÁ²"ˆóf첉ý¦†³Ói†ñi?fZ1^‹C6úxLˆ‚ °”€døñ†™·y®0”   Ó+ʱr`#e2ï¨i¯!|]y U(‰H5yüV2N))) üÅ’a©qe16¨À,3s&ÈP %BQ¬^ÑOcw ö Òp ÷FyG@(ó².ÞøŠÃ¢#²8|’ pºòWy>9f¤üç:8¢íi^Ù›OùžÊ§‡ƒ¡ÑZM*¨ëâw‘2 ³gbjº¨ðm€—¨+—p9u ¸ ÀðÇE6‡ê5ÖJ8ú˜oFªwA‹'Úû9¨žúöɪÃi¢Wz°Zº¢™9®þ²ˆ­§`€  x` Ë1#E­$Áh†_0y ÇCOÌz Ûþ§Ðú¡ñy&QºuÁé§+­Š¢±ú’1i«¾™šçˆœ@10Mð®)‚cäZšÚ…_“½H­"ʘ °£ ³°Úx©:¥^ó§¥úªK¨[–4Ã÷·™ÀU°а±kpŒp+ž%¬ñ¶F1ð´ Ð393ë-Ë¡/™Þ*³{Z³%šŸ…;;*Š0é8ˆÊO©Ã„­° ycv¯°®•QŽb('!¶ºø´Q‹U+‹žMɰy§ r°Ùµµ ‹ÛJïù°Y*«n€™d«ˆ“‹dÐr”q&˜.¢Ê Š>ÙWf»€ ¢›²£ñ›†Ñ UÛ¡©þ›Ÿ ºýJµò:Uéµî™³"[™/Y6‘KHìh¶ ú  ”‘ Ê¢™Îi¼Ü †° ̈],h°>ˆ:µwÁ‰®pR?`¡°ëh¶ª;¾ÉÀ² ¯Íâœ? ląĤ&Ì·±ª ë(éñ T%¤£ÀP” ¼HůµcA  AÐG$CͳD•ð¯¬ê1¶P) ,1Ó¥ðIþ= ‡ŽÑ<œµ ñ·c±P»\2” ˢÇB§j·sœ³­@‚àÆYA"d±Kr#HŽÔ<­À]ºXÆ}ÙPÎD`¥P ÐÙtÐ6»‰˜‡ò…pžp% yeá øJûAŽŠ«³Õ ®f+ ï0 ÓE8†¹8Ž7{(pZp…Ð möxÑ  ¿HPÍf¡|Âóû”H[dW°[Æc°£<Ëä ™ÐƒÄ±ÍdA° ¼ÌôŒžÇ0•`0É_à3"L”Pª ²üI”ñ¸K±üÄÎa…3Çcš2¿(Kaþ‚ØY8|û¥ÌÉ&]ä`=Tù>pæ©•Q§ÐM­€¯šµ Î÷ÀL3f0Ón ÷œÊÕ ¡2h)K…ŽUÖÐn0»ü¸ÕHíÎj(C5[Dz´oC‹¦YP‚‚ºg2ÏôÜt˜0Ò÷À—7‚‘ä `ÒÇl1FŒ:È]í7¬,§˜ì°L0k:`Ê)eÏ»5ºúË#yT0*ÏU<0BÅë1@ILÍ_}QȬ{yéÐ Ë” îŠÚ¿K, ––‘Tµ% 'VàÕC28¼´Á—ŸTpHP0€Ø"‚ó ²DÛl2Ú³þh‡0l:£Ë±àÝP, Ï‚³~: KÚ`+W‡Æ‘„eà|ÞÐâÛ:–öÀ Ï€P»ð ~Æv}Å—§šœì‡ÞÊAZ“)Ûá´‹l°y*Šh&£ëÑ ~† Õ@IÌ[|Ï´À@Ö‚dSR™°µ¼¹3µ—fEAøáh ãP"»à~tÿÇNÄE ©³dðÍêv0z%Ó,‚ÒdQ ,вO*^Úel¼¨Ñ ôP'C0 ‰°Úc1P=–•ϧê1¢F ^ í} ÜWvà ½ªÔ@'¦@[¤¥H²“:À@ h ƒà„€yv>þOðäH {…FVÎá Jê1‚ЈÄPX•¡ÀHÀ%þ¬Am ’°}pš¾æÅ&“¥ Õ]°¨æÐ†ÀÞ `0 c1©€Ö]ØYµ<0 {Pß ¢|(£÷Td «pm’ã€TŽeOà¤r.D¥þ”†Þ9× l E›“p C ©ðevà²n'xb*L°¯€tu…DÉgAðqp ` s`P‚ÔÀ1ÀevBë¤Ç ˜ƒ ŒhU áâ ‰ qU…Ü%í/@xè «€€pá˜ðgwnƒ @¢§ÅþƒÐí n’€b~âyè™pm°G%»Ð v`\ö窮rv74›`½ ¨ &7 ŸF ˆpóü^'OW-U·Võ§ˆÇ÷Äî °4  Ð*‰°¿æ“Pö§ ×€Ò …8âfò)Ö. q€ðƒ° °'x“nB‡0Ò0P~a¯›° ©hÐ4D§v“(Ú%„$°u>a_ö{ï ï`nа’ 6`l ®^Ou‰÷…€3HýDv½ ±cÀí{Ò° zŸcP{AÂöø Psßõš@ùPp÷y2h¦‚ö$õóûX·Ã»œ7~‚þ÷ L³!§Ô¿¶—{ ¨è–Ñ`]ôØ®à²*RÇ’àvØ’0ëdÌWQpÜ©7$@½@ÒÑÛèÏxíq`ß"rÖßwqŠÄªHöZ]³×AÚ©E¯ä(èõ¡ƒ=`‚~ý”Q£F\?­ø—ÉU¨ôyð I“Iú R´è”´­Ò!Ã)¦‹ˆH«¤U‰#G*@'U®”Õ«8$¬¹&fË\­^½Úñ2A麴ÚD&Óª®zõ:¥@Á©SUz¹ú‰Œˆk7§VÅš×V`è#c¿Ý4üźȮiÅAþü› @õ:-8îj#kÁHJ|ðDªªÒŠ«t$“Œ¬°BA3ÁÍþ‰1=gìè±-@ëjH`ºà² `VØ  ”rÊ@‚¬° [aóšk¼LÇ¿7êÉí;SÄó12Í´jBA²ÛÒK`℺ ƒüSÎeœr/ ·d3R7éÊ1¥¬Ò½?)U3Òƒ¼Ìð">G•ðί¼Õ1÷5« ¯ã*¶BÅŒRB}³µÌVë|Ì:Tó´³O^ëH×Ku/ÖØh]”QWµ:UÙeQ´ÓØV•°T[¯åpX;ÉÌ–[q…-õÛÞ: ×Z3³ý¶ÝjÏå³Ê*ÝÅh\{ï½H ÏT_ÿÍ7Ü{á=`ƒF8a…f¸a‡†8b‰ý ;libstruts1.2-java-1.2.9/web/tiles-documentation/layout/0000755000175000017500000000000010423130301023530 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/tiles-documentation/layout/classicLayout.jsp0000644000175000017500000000141510404045214027075 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%-- Layout component parameters : title, header, menu, body, footer --%> <tiles:getAsString name="title"/>

    libstruts1.2-java-1.2.9/web/tiles-documentation/layout/columnsLayout.jsp0000644000175000017500000000165310404045230027136 0ustar arnaudarnaud00000000000000<%@ page import="org.apache.struts.tiles.ComponentContext"%> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%-- Layout component Render a list on severals columns parameters : numCols, list0, list1, list2, list3, ... --%> <% int numCols = Integer.parseInt(numColsStr); ComponentContext context = ComponentContext.getContext( request ); for( int i=0; i <% } // end loop %>
    libstruts1.2-java-1.2.9/web/tiles-documentation/layout/vboxLayout.jsp0000644000175000017500000000106510404045236026437 0ustar arnaudarnaud00000000000000<%@ page import="java.util.Iterator"%> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%-- Layout component Render a list on severals columns parameters : componentsList --%> <%-- Next will be a tag, as soon as tags allow include in iteration Wait until jsp1.3 --%> <% Iterator i=list.iterator(); while( i.hasNext() ) { String comp=(String)i.next(); %>
    <% } // end loop %> libstruts1.2-java-1.2.9/web/tiles-documentation/layouts/0000755000175000017500000000000010423130301023713 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/tiles-documentation/layouts/skin1/0000755000175000017500000000000010423130301024740 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/tiles-documentation/layouts/skin1/menuLeftLayout.jsp0000644000175000017500000000204710404045210030441 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%-- Layout Tiles This layout create a html page with
    and tags. It render a header, left menu, body and footer tile. @param title String use in page title @param header Header tile (jsp url or definition name) @param menu Menu @param body Body @param footer Footer --%> <tiles:getAsString name="title"/>
    libstruts1.2-java-1.2.9/web/tiles-documentation/layouts/centerLayout.jsp0000644000175000017500000000164110404045204027117 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%-- Centered Layout Tiles This layout render a header, left tile, right tile, body and footer. It doesn't create and tag. @param header Header tile (jsp url or definition name) @param right Right center tile (optional) @param body Body or center tile @param left Left center tile (optional) @param footer Footer tile --%>
    libstruts1.2-java-1.2.9/web/tiles-documentation/layouts/classicLayout.jsp0000644000175000017500000000204710404045210027256 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%-- Layout Tiles This layout create a html page with
    and tags. It render a header, left menu, body and footer tile. @param title String use in page title @param header Header tile (jsp url or definition name) @param menu Menu @param body Body @param footer Footer --%> <tiles:getAsString name="title"/>
    libstruts1.2-java-1.2.9/web/tiles-documentation/layouts/columnsLayout.jsp0000644000175000017500000000300410404045220027310 0ustar arnaudarnaud00000000000000<%@ page import="org.apache.struts.tiles.ComponentContext"%> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%-- Multi-columns Layout This layout render lists of tiles in multi-columns. Each column renders its tiles vertically stacked. The number of columns passed in parameter must correspond to the number of list passed. Each list contains tiles. List are named list0, list1, list2, ... parameters : numCols, list0, list1, list2, list3, ... @param numCols Number of columns to render and passed as parameter @param list1 First list of tiles (url or definition name) @param list2 Second list of tiles (url or definition name) [optional] @param list3 Third list of tiles (url or definition name) [optional] @param listn Niene list of tiles (url or definition name), where n is replaced by column index. --%> <% int numCols = Integer.parseInt(numColsStr); ComponentContext context = ComponentContext.getContext( request ); for( int i=0; i <% } // end loop %>
    libstruts1.2-java-1.2.9/web/tiles-documentation/layouts/menu.jsp0000644000175000017500000000327310404045246025416 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%@ page import="java.util.Iterator" %> <%-- Menu Layout This layout render a menu with links. It takes as parameter the title, and a list of items. Each item is a bean with following properties : value, href, icon, tooltip. @param title Menu title @param items list of items. Items are beans whith following properties : --%> <%-- Push tiles attributes in page context --%> <%-- iterate on items list --%> <% // Add site url if link start with "/" String link = item.getLink(); if(link.startsWith("/") ) link = request.getContextPath() + link; %>
    <%=item.getValue()%> <% // Add site url if link start with "/" String icon = item.getIcon(); if(icon.startsWith("/") ) icon = request.getContextPath() + icon; %> <bean:write name="item" property="tooltip" scope="page" ignore="true"/>
    libstruts1.2-java-1.2.9/web/tiles-documentation/layouts/nestedTabsLayout.jsp0000644000175000017500000000703210404045220027731 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%-- Tabs Layout . This layout allows to render several tiles in a tabs fashion. Such tabs can be nested: a tab level can contain nested tabs. Each tabs must be declared with a different parameter name. Implementation store each tabs selection index in the session context. The unique id for the session attribut is compute from the url and the tabs selection parameter. [todo] Improve the computation of unique id. @param tabList A list of available tabs. We use MenuItem to carry data (name, body, icon, ...) @param selectedIndex Index of default selected tab @param parameterName Name of parameter carrying selected info in http request. --%> <%-- Use tiles attributes, and declare them as page java variable. These attribute must be passed to the tile. --%> <% String selectedColor="#98ABC7"; String notSelectedColor="#C0C0C0"; int index = 0; // Loop index int selectedIndex = 0; // Check if selected come from request parameter try { selectedIndex = Integer.parseInt(selectedIndexStr); // Try to retrieve from http parameter, or previous storage // Need to use a more unique id for storage name String paramValue = request.getParameter( parameterName ); if( paramValue == null ) { selectedIndex = ((Integer)(session.getAttribute( request.getRequestURI() + parameterName ))).intValue(); } else selectedIndex = Integer.parseInt(paramValue); } catch( java.lang.NumberFormatException ex ) { // do nothing } catch( java.lang.NullPointerException ex ) { // do nothing } // Check selectedIndex bounds if( selectedIndex < 0 || selectedIndex >= tabList.size() ) selectedIndex = 0; String selectedBody = ((org.apache.struts.tiles.beans.MenuItem)tabList.get(selectedIndex)).getLink(); // Selected body // Store selected index for future references session.setAttribute( request.getRequestURI() + parameterName , new Integer(selectedIndex) ); %> <%-- Draw tabs --%> <%-- Draw body --%>
      <% // compute href String href = request.getRequestURI() + "?"+parameterName + "=" + index; String color = notSelectedColor; if( index == selectedIndex ) { selectedBody = tab.getLink(); color = selectedColor; } // enf if index++; %>
    <%=tab.getValue()%>
     
     
       
     
    libstruts1.2-java-1.2.9/web/tiles-documentation/layouts/stylesheet.css0000644000175000017500000002477310404045242026643 0ustar arnaudarnaud00000000000000/* CSS */ /* base element inheritance formatting */ body { margin-left: 0px; margin-right: 0px; margin-top: 0px; margin-bottom: 0px; font-family: arial, geneva, helvetica, "sans serif"; } a { font-weight: bold; } /* all links are bold */ a:link { color: #3300cc } /* unvisited link */ a:visited { color: #330099 } /* visited links */ a:active { color: #000033 } /* active links */ a:hover { color: #000033 } /* MSIE rollover links */ table { margin-left: 0px; margin-right: 0px; margin-top: 0px; margin-bottom: 0px; } td { font-family: arial, geneva, helvetica, "sans serif"; } th { font-family: arial, geneva, helvetica, "sans serif"; font-weight: bold; } /* begin defined classes */ /* headline classes */ .headline { font-family: verdana, arial, geneva, "sans serif"; font-size: 110%; color: #000000; vertical-align: middle; text-align: left; } /* on-screen hint class */ .hint { font-size: x-small; color: #000000; background: #ffffff; } .hintvbm { font-size: x-small; } /* Message classes */ .note { font-size: smaller; font-weight: bold; color: #000000; background: #ffffff; vertical-align: middle; text-align: left; padding: 2px; } .noteimg { font-size: smaller; font-weight: bold; color: #000000; background: #ffffcc; vertical-align: top; text-align: center; } .success { font-size: smaller; font-weight: bold; color: #000000; background: #ffffff; vertical-align: middle; text-align: left; padding: 2px; } .successimg { font-size: smaller; font-weight: bold; color: #000000; background: #ffffcc; vertical-align: top; text-align: center; } .alert { font-size: smaller; font-weight: bold; color: #000000; background: #ffffcc; vertical-align: middle; text-align: left; padding: 2px; } .alertimg { font-size: smaller; font-weight: bold; color: #000000; background: #ffffcc; vertical-align: top; text-align: center; } .error { font-size: smaller; font-weight: bold; color: #000000; background: #ffffcc; vertical-align: middle; text-align: left; padding: 2px; } .errorimg { font-size: smaller; font-weight: bold; color: #000000; background: #ffffcc; vertical-align: top; text-align: center; } /* column header classes */ .hdleft { font-size: smaller; font-weight: bold; color: #333333; background: #cccccc; text-align: left; } .hdright { font-size: smaller; font-weight: bold; color: #333333; background: #cccccc; text-align: right; } .hdmiddle { font-size: smaller; color: #333333; background: #cccccc; text-align: center; } .datahd { font-size: smaller; font-weight: bold; color: #000000; background: #cccccc; } .spanhd { font-size: smaller; font-weight: bold; color: #eeeeee; background: #003366; text-align: left; } .spanhdright { font-size: smaller; font-weight: bold; color: #eeeeee; background: #003366; text-align: right; } .spanhdcenter { font-size: smaller; font-weight: bold; color: #eeeeee; background: #003366; text-align: center; } .subhdleft { font-size: x-small; color: #333333; background: #cccccc; text-align: left; } /* label classes */ .right { font-size: smaller; font-weight: bold; color: #333333; background: #cccccc; text-align: right; } .topright { font-size: smaller; font-weight: bold; color: #333333; background: #cccccc; vertical-align: top; text-align: right; } .left { font-size: smaller; font-weight: bold; color: #333333; background: #ffffff; text-align: left; } .topleft { font-size: smaller; font-weight: bold; color: #333333; background: #ffffff; vertical-align: top; text-align: left; } .center { font-size: smaller; font-weight: bold; color: #333333; background: #ffffff; text-align: center; } .greyright { font-size: smaller; font-weight: bold; color: #333333; background: #cccccc; text-align: right; } .greyleft { font-size: smaller; font-weight: bold; color: #333333; background: #ffffff; text-align: left; } .greycenter { font-size: smaller; font-weight: bold; color: #333333; background: #eeeeee; text-align: center; } .greytopright { font-size: smaller; font-weight: bold; color: #333333; background: #cccccc; vertical-align: top; text-align: right; } .greytopleft { font-size: smaller; font-weight: bold; color: #333333; background: #ffffff; vertical-align: top; text-align: left; } /* remove after changing subright use to fine */ .greysubright { font-size: x-small; color: #333333; background: #cccccc; text-align: right; font-weight: normal; } /* data classes and alternating row color classes */ .data { font-size: smaller; color: #000000; background: #ffffff; } .datamiddle { font-size: smaller; color: #000000; background: #ffffff; vertical-align: middle } .datagrey { font-size: smaller; color: #000000; background: #eeeeee; } .datalightblue { font-size: smaller; color: #000000; background: #E1F8F9; } .bdata { font-size: smaller; font-weight: bold; color: #000000; background: #ffffff; } .bdatagrey { font-size: smaller; font-weight: bold; color: #000000; background: #eeeeee; } .datart { font-size: smaller; color: #000000; background: #ffffff; text-align: right; } .datartgrey { font-size: smaller; color: #000000; background: #eeeeee; text-align: right; } .bdatart { font-size: smaller; font-weight: bold; color: #000000; background: #ffffff; text-align: right; } .bdatartgrey { font-size: smaller; font-weight: bold; color: #000000; background: #eeeeee; text-align: right; } .curr { font-size: smaller; font-weight: bold; color: #000000; background: #ffffff; text-align: right; } .currgrey { font-size: smaller; font-weight: bold; color: #000000; background: #eeeeee; text-align: right; } .currleft { font-size: smaller; font-weight: bold; color: #000000; background: #ffffff; text-align: left; } .color { color: #800000; } /*change to 000000 if FI doesn't want negative numbers to be red*/ .subdata { font-size: x-small; color: #000000; background: #ffffff } .subdatagrey { font-size: x-small; color: #000000; background: #eeeeee } .dataright { font-size: smaller; color: #000000; background: #ffffff; text-align: right;} .datagreyright { font-size: smaller; color: #000000; background: #eeeeee; text-align: right;} .yellow { font-size: smaller; color: #000000; background: #ffffcc; vertical-align: middle; text-align: left; } /* vrm classes and account balance classes */ .subcurr { font-size: smaller; font-weight: bold; color: #333333; background: #cccccc; text-align: right; } .editorial { font-size: smaller; color: #000000; background: #ffffff; } .editgrey { font-size: smaller; color: #000000; background: #eeeeee; } /* fine print for inputs and tables */ .fine { font-size: x-small; font-weight: normal; color: #333333; } .fineright { font-size: x-small; font-weight: normal; color: #333333; text-align: right; } .finewhite { font-size: x-small; font-weight: normal; color: #000000; background: #ffffff; } .subright { font-size: x-small; font-weight: normal; color: #333333; background: #cccccc; text-align: right; } /* form element cell classes */ .input { font-size: smaller; background: #ffffff; vertical-align: baseline; } .topinput { font-size: smaller; background: #ffffff; vertical-align: top; } .btminput { font-size: smaller; background: #ffffff; vertical-align: bottom; } .inputgrey { font-size: smaller; background: #eeeeee; vertical-align: baseline; } .submit { font-size: smaller; font-weight: bold; color: #333333; background: #ffffff; vertical-align: middle; text-align: right; } .submitgrey { font-size: smaller; font-weight: bold; color: #333333; background: #cccccc; vertical-align: middle; text-align: right; } .inputtop { font-size: smaller; vertical-align: top; background: #ffffff; } /* help classes */ .help { font-family: arial, helvetica, "sans serif"; font-size: smaller; color: #666666; background: #ffffcc; } /* navigation bar classes */ .navtext { font-size: x-small; color: #000066; text-align: right; } .info { font-size: x-small; color: #000066; background: #eeeeee; } .infotext { padding-left: 2pt; } /* footer classes */ .footlt { font-size: x-small; color: #333333; background: #cccccc; } .footdk { font-size: x-small; color: #cccccc; background: #333333; } /* background packing classes */ .bkgnd { font-size: 1pt; } .wtspace { font-size: 1pt; background: #ffffff; } .greyspace { font-size: 1pt; background: #eeeeee; } .yellowspace { font-size: 1pt; background: #ffffcc; } .bottom { vertical-align: bottom; } /* additional VIM classes */ .yellowbar { font-size: smaller; background: #ffffcc; text-align: left; } .yellowbarrt { font-size: smaller; background: #ffffcc; text-align: right; } .yellowspace { font-size: 4pt; background: #ffffcc; } .datacntr { font-size: smaller; color: #000000; background: #ffffff; text-align: center; } .datacntrgrey { font-size: smaller; color: #000000; background: #eeeeee; text-align: center; } .hdctr { font-size: smaller; font-weight: bold; color: #333333; background: #cccccc; text-align: center;} libstruts1.2-java-1.2.9/web/tiles-documentation/layouts/tabsLayout.jsp0000644000175000017500000000563510404045204026577 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%-- Tabs Layout . This layout allows to render several tiles in a tabs fashion. @param tabList A list of available tabs. We use MenuItem to carry data (name, body, icon, ...) @param selectedIndex Index of default selected tab @param parameterName Name of parameter carrying selected info in http request. --%> <%-- Use tiles attributes, and declare them as page java variable. These attribute must be passed to the tile. --%> <% String selectedColor="#98ABC7"; String notSelectedColor="#C0C0C0"; int index = 0; // Loop index int selectedIndex = 0; // Check if selected come from request parameter try { selectedIndex = Integer.parseInt(selectedIndexStr); selectedIndex = Integer.parseInt(request.getParameter( parameterName )); } catch( java.lang.NumberFormatException ex ) { // do nothing } // Check selectedIndex bounds if( selectedIndex < 0 || selectedIndex >= tabList.size() ) selectedIndex = 0; String selectedBody = ((org.apache.struts.tiles.beans.MenuItem)tabList.get(selectedIndex)).getLink(); // Selected body %> <%-- Draw tabs --%> <%-- Draw body --%>
      <% // compute href String href = request.getRequestURI() + "?"+parameterName + "=" + index; // Don't add request URI prefix , but let the client compute the original URL // This allows to use a Struts action as page URL, and perform a forward. // Bug reported by Don Peterkofsky //String href = "" + "?"+parameterName + "=" + index; String color = notSelectedColor; if( index == selectedIndex ) { selectedBody = tab.getLink(); color = selectedColor; } // enf if index++; %>
    <%=tab.getValue()%>
     
     
       
     
    libstruts1.2-java-1.2.9/web/tiles-documentation/layouts/vboxLayout.jsp0000644000175000017500000000246510404045204026622 0ustar arnaudarnaud00000000000000<%@ page import="java.util.Iterator"%> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%-- Layout component Render a list of tiles in a vertical column @param : list List of names to insert This file contains 3 possible implementations. Use only one and comment the others. Don't forget to move the appropriate taglib declaration in the header. --%> <%-- Iterate over names. We don't use tag because it doesn't allow insert (in JSP1.1) --%> <% Iterator i=list.iterator(); while( i.hasNext() ) { String name= (String)i.next(); %>
    <% } // end loop %> <%-- Iterate over names. Use jstl tag. Require the jstl taglib. --%> <%-- <%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>
    --%> <%-- Iterate over names. Use struts tag. Work on jsp1.2 and greater web container. --%> <%-- <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
    --%> libstruts1.2-java-1.2.9/web/tiles-documentation/test/0000755000175000017500000000000010423130301023172 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/tiles-documentation/test/body.jsp0000644000175000017500000000007010404045226024654 0ustar arnaudarnaud00000000000000
    This is a body
    libstruts1.2-java-1.2.9/web/tiles-documentation/test/failpage.jsp0000644000175000017500000000011210404045214025461 0ustar arnaudarnaud00000000000000Error
    <%=request.getAttribute( "actionError" )%> libstruts1.2-java-1.2.9/web/tiles-documentation/test/header.jsp0000644000175000017500000000017510404045246025157 0ustar arnaudarnaud00000000000000This is the headerlibstruts1.2-java-1.2.9/web/tiles-documentation/test/index.jsp0000644000175000017500000000217710404045220025032 0ustar arnaudarnaud00000000000000

    Tiles Simple Tests

    These tests allow quick checking of Tiles behaviors and Tiles instalation.

    It is possible to run each test separately, or all in one. In this later case, test results and test codes are displayed in the same page. You can compare the resulting page with the quick overview page from main site to check if all is ok.

    To run tests, follow the "all in one" link. If there is a problem, try each separate test in turn to localize which one fail.

    libstruts1.2-java-1.2.9/web/tiles-documentation/test/layout.jsp0000644000175000017500000000076610404045210025241 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%-- A simple layout. First, we get component/template attribute (title) as a String. Next, we insert component/template attribute (header and body). --%>
    libstruts1.2-java-1.2.9/web/tiles-documentation/test/layoutTestIgnore.jsp0000644000175000017500000000066010404045250027242 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%-- Layout to test 'ignore' attribute. --%>
    libstruts1.2-java-1.2.9/web/tiles-documentation/test/menu.jsp0000644000175000017500000000165310404045226024673 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%@ page import="java.util.Iterator" %> <%-- --%> <%-- Push component attributes in page context --%> <%-- Prepare the links list to be iterated --%> <% Iterator i = links.iterator(); %> <%-- Iterate on list of items --%>
    <% // Compute link value String link = i.next().toString(); if(link.startsWith("/") ) link = request.getContextPath() + link; %>
    libstruts1.2-java-1.2.9/web/tiles-documentation/test/quickOverview.jsp0000644000175000017500000000023010404045220026552 0ustar arnaudarnaud00000000000000<%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/test/showRequestUri.jsp0000644000175000017500000000022210404045172026727 0ustar arnaudarnaud00000000000000
    RequestUri: <%=request.getRequestURI()%> ContextPath: <%=request.getContextPath()%>
    libstruts1.2-java-1.2.9/web/tiles-documentation/test/testAll.jsp0000644000175000017500000000206410404045230025327 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> In the right column you can find some basic examples, while in the left column you find the corresponding output result.
    Output Result Sources
    libstruts1.2-java-1.2.9/web/tiles-documentation/test/testBackward.jsp0000644000175000017500000000072410404045214026340 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%-- Test backward compatibility --%>
    Check synonyms for include and put.
    This is a header libstruts1.2-java-1.2.9/web/tiles-documentation/test/testBasic.jsp0000644000175000017500000000364310404045216025650 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%-- Test tags basic behaviors --%>
    Basic template usage

    Specify attribute types

    Set attribute value with tag body
    This header is inserted as body of tag
    Use of definition

    Use of definition, overload of parameters Title parameter from previous definition is overloaded

    Test ignore : body isn't defined (We use another layout)
    libstruts1.2-java-1.2.9/web/tiles-documentation/test/testController.jsp0000644000175000017500000000172010404045204026741 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%-- Test tiles Controller call --%>
    Test controller set in definition from config file

    Test controller set in insert

    Test controller set in insert, and attribute from definition
    libstruts1.2-java-1.2.9/web/tiles-documentation/test/testDefinitions.jsp0000644000175000017500000000210110404045244027067 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%-- Test template definitions (from factory) --%>
    Insert definition defined directly in jsp page

    Insert definition defined in factory

    Insert definition defined in factory

    Insert definition defined in factory

    Insert definition defined in factory : Overload title attribute
    libstruts1.2-java-1.2.9/web/tiles-documentation/test/testIgnore.jsp0000644000175000017500000000321610404045212026042 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%-- Test 'ignore' attribute : Insert components/templates with undefined attributes, or bad urls. Undefined must be spkipped, while false urls must output exception. --%>
    Test ignore : body isn't defined

    Test ignore : bad body definition name (exception must be shown)

    Test ignore : Definition not found (no errors, no insertion)

    Test ignore : bad body urls (exception must be shown)
    libstruts1.2-java-1.2.9/web/tiles-documentation/test/testInclude.jsp0000644000175000017500000000247310404045242026211 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%-- Test jsp include in a BodyTag (). --%> <% java.util.List list = new java.util.ArrayList(); list.add( "header.jsp" ); list.add( "body.jsp" ); int position=0; %>
    1 request.getRequestDispatcher(uri).include(request, response)
    include number <%= position++ %>
    <% // insert the id response.flushBuffer(); response.getWriter().flush(); //out.flush(); request.getRequestDispatcher(uri).include(request, response); response.getWriter().flush(); response.flushBuffer(); %>

    pageContext.include(page)
    include number <%= position++ %>
    <% // insert the id pageContext.include(uri); %>


    tiles:insert
    include number <%= position++ %>
    Done libstruts1.2-java-1.2.9/web/tiles-documentation/test/testList.jsp0000644000175000017500000000137610404045250025541 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> Example of list usage <%-- Insert a menu component. Menu component require two lists : one of items, and one of links. --%> libstruts1.2-java-1.2.9/web/tiles-documentation/test/testRole.jsp0000644000175000017500000000124610404045230025521 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%-- Test tags basic behaviors --%>
    Show Component if 'tomcat' role is set

    Show Component if 'role1' role is set
    libstruts1.2-java-1.2.9/web/tiles-documentation/test/testStrutsAction.jsp0000644000175000017500000000313210404045234027262 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%-- Test tiles and struts action integration (require factory) --%>
    Test definition set in action, and action forward to another definition
    <%-- header and body values come from definition used in action's forward --%> <%-- name of definition to use in action --%>
    Test overload parameter in action
    <%-- name and value of attribute to set in action --%>
    Test definition set in action, and action forward directly to jsp
    libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/0000755000175000017500000000000010423130301024056 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/basic/0000755000175000017500000000000010423130301025137 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/basic/helloBody.jsp0000644000175000017500000000010710404045220027600 0ustar arnaudarnaud00000000000000
    Hello the World
    libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/basic/menu.jsp0000644000175000017500000000063510404045220026631 0ustar arnaudarnaud00000000000000
    Menu
    Home
    Item 2
    Item 3
    libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/basic/myFramesetLayout.jsp0000644000175000017500000000104310404045224031175 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%-- Frameset Layout component parameters : title, header, menu, body, footer --%> <tiles:get name="title"/> " name="header" > " name="body" > " name="footer" > libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/basic/myLayout.jsp0000644000175000017500000000106710404045212027511 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%-- Layout component parameters : title, header, menu, body, footer --%> <tiles:getAsString name="title"/>
    libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/common/0000755000175000017500000000000010423130301025346 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/common/menu/0000755000175000017500000000000010423130301026312 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/common/menu/menuLinks.jsp0000644000175000017500000000104710404045234031010 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/common/menu/menuLogo.jsp0000644000175000017500000000015210404045244030625 0ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/common/menu/menuSrc.jsp0000644000175000017500000000116710404045222030457 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/common/footer.jsp0000644000175000017500000000042710404045172027377 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
    Copyright © 2000-2003, MyCompany
    libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/common/header.jsp0000644000175000017500000000066610404045240027332 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>

    <%--

    --%> libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/common/menu.jsp0000644000175000017500000000060510404045250027040 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/common/menuViewSrc.jsp0000644000175000017500000000251210404045210030336 0ustar arnaudarnaud00000000000000<%@ page import="java.util.Iterator"%> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%-- Menu of sources component This component is a menu of sources. When a source is clicked, its code is shown using a viewer. A list of absolute source path must be provided. Viewer path can be provided. @param list List of source paths to display @param viewerPath Path of viewer page. Optional. --%> <%-- Set default viewer if not specified --%> <% pageContext.setAttribute( "viewerPath", request.getContextPath()+"/tutorial/common/viewSrc.jsp" ); %> <%-- Iterate on sources list --%>
    JSP Sources
    <%=srcPath%>
    libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/common/submenu.jsp0000644000175000017500000000463210404045230027554 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%@ page import="java.util.Iterator" %> <%-- Push component attributes in page context --%> <%-- Check if selected exist. --%> <% pageContext.setAttribute( "selected", "" ); %> <%-- Prepare the links list to be iterated --%> <% Iterator i = links.iterator(); %> <%-- iterate on items list --%> <%-- Normally, we should write something like this : But, Struts doesn't declare the TEI class for iterate, and some web container deal badly with the declared variable. So, we use what follow instead. --%>
    <%-- check if selected --%> <% // Compute link value String link = (String)i.next(); if(link.startsWith("/") ) link = request.getContextPath() + link; %> <%=item%> <%=item%>
    <%-- Following are some code example using this submenu --%> libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/common/viewSrc.jsp0000644000175000017500000000044210404045206027516 0ustar arnaudarnaud00000000000000<%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/common/viewSrcBody.jsp0000644000175000017500000000207310404045242030336 0ustar arnaudarnaud00000000000000<%@ page language="java" %> <%@ page errorPage="/common/viewSrcBodyError.jsp" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%-- Include requested resource file. If file is not found, Exception is thrown, and catched by the errorPage directive (see above). Error page show a message. --%> <%-- Import component attributes, if any. --%> file '<%=srcPathVar%>'
    
    

    No source specified ! libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/common/viewSrcBodyError.jsp0000644000175000017500000000073610404045204031352 0ustar arnaudarnaud00000000000000<%@ page language="java" %> <%@ page isErrorPage="true" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> file '<%=srcPath%>' not found ! No source specified ! libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/de/0000755000175000017500000000000010404045242024456 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/de/common/0000755000175000017500000000000010423130301025736 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/de/common/footer.jsp0000644000175000017500000000046010404045242027762 0ustar arnaudarnaud00000000000000
    Copyright © 2000-2001, MyCompany
    German Version
    libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/de/common/header.jsp0000644000175000017500000000030310404045242027710 0ustar arnaudarnaud00000000000000

    libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/definitions/0000755000175000017500000000000010423130301026371 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/definitions/definitionsConfig.jsp0000644000175000017500000000320710404045222032560 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%-- This file contains definition declarations. These definitions can be used in any jsp page by including this file with : <%@ include file="filename.jsp" %> Each definition declaration create a bean stored in specified jsp context. Default jsp context is 'page', so we need to specify a more useful context. --%> <%-- Master layout definition --%> <%-- portal definition --%> <%-- Add as many definition as you need ... --%> libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/definitions/firstDefinitionPage.jsp0000644000175000017500000000031610404045174033060 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/definitions/simpleBody.jsp0000644000175000017500000000131710404045216031231 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/definitions/useDefinitionConfig.jsp0000644000175000017500000000057610404045214033061 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%-- This example insert a definition defined in another jsp file. First, it include jsp file containing definition. Second, it do an insert where it want the definition to be rendered. --%> <%@ include file="definitionsConfig.jsp" %> libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/dynPortal/0000755000175000017500000000000010423130301026032 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/dynPortal/Channels.jsp0000644000175000017500000000247410404045220030316 0ustar arnaudarnaud00000000000000<%-- /** * Summarize channels as unadorned HTML. * * @parameters ListArray CHANNELS * @version $Revision: 1.2 $ $Date: 2004-01-19 04:41:57 +0000 (Mon, 19 Jan 2004) $ */ --%> <%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
    "> ">



      [ ">more ]

    libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/dynPortal/Errors.jsp0000644000175000017500000000131610404045214030034 0ustar arnaudarnaud00000000000000<%-- /** * Summarize channels errors as unadorned HTML. * * @parameters errors * @version $Revision: 1.2 $ $Date: 2004-01-19 04:41:57 +0000 (Mon, 19 Jan 2004) $ */ --%> <%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
    Error while reading channels.

    Are you connected ?
    libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/dynPortal/index.jsp0000644000175000017500000000017410404045246027675 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/dynPortal/myPortalPrefTile.jsp0000644000175000017500000000555610404045210032030 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
    libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/dynPortal/myPortalPrefs.jsp0000644000175000017500000000020710404045210031361 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/dynPortal/testChannels.jsp0000644000175000017500000000020110404045234031205 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/forward/0000755000175000017500000000000010423130301025522 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/forward/failureBody.jsp0000644000175000017500000000025710404045210030514 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> Struts forward to 'failure'.
    libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/forward/forwardBody.jsp0000644000175000017500000000027210404045216030534 0ustar arnaudarnaud00000000000000 Select an action :

    libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/forward/successBody.jsp0000644000175000017500000000026110404045172030537 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> Struts forward to 'success'.
    libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/fr/0000755000175000017500000000000010404045222024473 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/fr/common/0000755000175000017500000000000010423130301025755 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/fr/common/footer.jsp0000644000175000017500000000050210404045236030001 0ustar arnaudarnaud00000000000000
    Copyright © 2000-2001, MaPetiteEntreprise
    Version Française
    libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/fr/common/header.jsp0000644000175000017500000000030310404045222027725 0ustar arnaudarnaud00000000000000

    libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/images/0000755000175000017500000000000010423130301025323 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/images/banner1b.gif0000644000175000017500000002320410404045240027511 0ustar arnaudarnaud00000000000000GIF89aµ^÷ÿÿÿÿ!!!)))111999BBBJJJRRRZZZccckkksss{{{„„„ŒŒŒ”””œœœ¥¥¥­­­µµµ½½½ÆÆÆÎÎÎÖÖÖÞÞÞçççïïïÖÎÎÞÖÖÆ½½½­­ÆµµÎ½½½¥¥Æ­­Æ¥¥½œœµ””µŒŒµ„„½„„µ{{µssµkk­cc­ZZ­RR­JJ­BB¥99¥11¥))¥!!œœœœ)!­¥Zÿ÷”÷ïŒïç„çÞ{ÎÆkÞÖsœœ”ŒŒ„ccZ­­œœœŒ¥¥”JJB””„œœ„11)ccR½½œZZJµµ”­­Œ))!¥¥„ççµ””sµµŒJJ9­­„ÎΜccJZZB{{Z!!µµ„””kÎΔ­­{ÆÆŒÞÞœ¥¥s½½„kkJï掠µ{ÎÎŒ11!””cÆÆ„ÖÖŒï¥kÎ΄ZZ9µµsBB)„„RÆÆ{­­kkkBÖÖ„ÿÿœ””Z½½sççŒ{{J¥¥cRR1ÎÎ{ÞÞ„µµk))ŒŒRïïŒ99!ÆÆscc9œœZÖÖ{ssB­­c÷÷Œ„„JÎÎsJJ)””RÞÞ{ïµcZZ1¥¥ZÆÆk{{BÖÖskk9çç{ŒŒJœœR½½cÎÎkÞÞsBB!ÖÖkµµZ11!!ÎÎc99))÷ÿ”ï÷Œçï„ÖÞsÎÖkçïŒÎÖ{µ½kÞç{”œRµ½„µ½”)1!)!ÎÖÖ„Œ”ŒŒ”ŒŒœ„„”{{ŒkkŒssœkk”cc”ZZŒccœRR”JJŒRRœJJ”BBœ99”11œ))”!!œ”œ”œB9”„{Œïçï÷ï÷ÎÆÎÞÖÞçÞç½µ½­¥­µ­µÆ½Æœ”œ¥œ¥Œ„Œ{s{sks„{„kckZRZcZcRJRJBJB9B1)1)!)!!Ƶ½Æ­µÆ¥­½”œ½Œ”µ{„µs{µks­JR­9B¥19¥)1¥!)œ,µ^@ÿÿ H° Áƒ*\Ȱ¡Ã‡#J\˜ªb¨T3bܨ1£G©b• %2ÔÈR›L¢\¹©Ô!¢6Á‚ÉH”MJ8E¡¤ÏNzéô*È Nƒ€(}Åô>¨ Xà-ƒ7 dë¦ëÝ€ ðn*Ry%Ôªm+páî‘ëcîž»uïÚÅk·®ß¾€ÿ Ö[W`EŽˆ;&ÞX2”c“¡Z–šŒrSË™°d%ŠçΔ:O¥`·ÿ|Ó°-ƒ¶ ¾ x Ü€6}*éö³…<ÐöíBñ Èëá ac¹ ..|¹ñâñ¾¹Öm‚ƒ ÿ0 `uá¹¼9¤w¯ûÁƒùòýkØbbÇ=6>©²¥–1m“(0…Zh”dÂÉ(ÿ`:dÍqÖw6ÙX€Aß`MÿÀ‚Ý`@€9êpC$„€Â+´°C7ä‚<õTG¡uÅ}  ýà€Ã "Wœ°Ž†Ì×^^½˜|~Õg~‰ÅâØd&‰”KþÅôÒL7ÙI#müÃ\“8€$´P"Ih£@ädpAå(` íB "Q ÔFªä  à€ÞP 9LáN¤ãLС6øéã7÷à` ;¸€‚3ÄÝ 6|ÿ ÍìÙH+{A å”QêÊkaÿä‡ß–Äž4Ù–Y†Ù&C(JMâd )’`BIP@UQ´"8\`À? `€@èvÈ!•¬[ɇÀûˆ+üÐÊõÞÛÖ>¼Õï¿r¢-|(rJ ½c @èÜêk^¦±“ñE)а"T,eÈZ¶Y€Ÿ!x`-BÅòQ,5È+ƒ`²Æ8¡^Í6ÙðÏ)‚¸Ën¼‡|\’±‘°TY)1av2%âä¶N,wrmܵÐL”¶Ñ”S´ ÿBJ$ë²Û.»? =¯¾M»µt[ÿ;WÆ_CÞuÇY÷j9Ç\S¾‡@'!{öÉ: mg¤SAÍ8zLÓ PnLM0ÆP S²ëýJ0ÔTòJ%²TÄ!RPSM/ÅPÃŒÑÔL£ 2cøñ 4À 33O?íÃ!ÔáÃ1ÏìE3Òü² 5GÌõ}øãK±5Ò £Ì{1 4¿ïË\ÇHcWÔH‡3ô†4œ12H¾`†4¨‹'aN>û˜\’™µí&*ãɵ(Á²Z(CyR²`Ý9Å)R(¡à†ö.WüÀWÃ#fHÃÅ-í>ˆ.ñ¯¨Å¥/¡†/ÿà€ 2@IˆD4"Ýsˆ'„A.“›ËpÁÑ_˜‹œ”ú"fq&3Ÿ…Êš1 i4ƒ ®ƒìê–¼e$à Lɲ@f£xÕÐÝ Û5 Hâ)Zø¡¨øÇ(Z1CB £||Т‡8…@1C$‘ÿ˜E•Ò‡>8‚AÿèƒÆB%;äƒ8„"^iOþ”³˜ A1—:ü£ºüå¯6÷ "(ƒJÜA3ÜM„wÓÛR€P‰AHa ìrÅà\A´z¹â„ #öõ´pòЇð¡Ò^QÊA´ç»ÚâÖâéÀ=°³î„ ×àùÿNy¦>Š èbªc‰l$›ðÒÙB7f è˜oÛ‰Ü8èÁWPâ("¤ä(M¥ô®]‘ ¡–ATÂ….<¾ôu¯ZÏrZL§LaÁÃt ùÁÈc cPÉë?Í™ÄH:·± Q!:$P xch€4‰B ÙØ€6*Ð pãX pÖ`àÇA H`¡l`à5Ù¨À"&°ã 8 p›Bâx˜{è«,Ò´°£´)N;2¬Çp©K(éÏç2ÍÕ@ ©Å'FÑ à…00ŽTPÀΚ4¡ Vh@€ ÿhÃ85 ‘>èñz„ B pA=²qè /PÑTæÈ7 ?r#]9Ú8(p€@ VžËÜ0­„26$ülÉÂä,ËØdt6ùD!` „j€@ðšYÈHÊÖ? ¡ Gj+à§l¼@F`|Ô`0°A `ƒÐÃHÁ>lƒzÄ`Ä­<~›  Rˆ`Ä< ^†¼1o*DÆS•”-YþÙLeÔLü°T% ,šÈÖ+2ˆwDà U E`‚‘h×à*1¯£á«iõç$8QP„ÿìH@" 8"²kÊA·fàÏÈé@8Æš/$bk¼:,¢Áö± —§¥Leü“,¡¾„t ÉôD;Œ¡(„(„ì›süã ðÙ?a 1¯ë-¤× 1©4–ê `O›’䬿 A‚ˆðÂ@¼ ˆC:Ps6æíò±R`$½<¥4¥—õÞ¢¾-™œÆ(Q>í¢Á,P€ðKBPÂ]c†—+PzC}-Î^P‹ËÔüŸÊ]ÍÞÊž)²£ˆ9ÎAZ2@ö¢1sYQŒC€¿0Ž/tzÛÚbÊQlǔ߽b¯n—Ñê5kx'®_ÖkE~aD¿àªÞÉÿž©“Ô©o»á~ÐgxL³% %jhQ­½Ák ƒì„ìˆBÙUÂè»Ãï„vdLWðƒ5¨<`ÌðÔÆ —ke нøE/„h¾_àå Ôx‚¨aöºà‚d· ۃ苺|¸cOÖãŸïí ,ì0µØEË”¢‚œY[hQŒf$cƒ=¹V'ñ´A"tÏG'¤7‘°H°00"Ò¤ %U„o‘C?4€L¨h3PQx²S##i …' 0Ás¡Ñ¢ÿ@ “œ  š0 ‘qA@ š€£À^° è€."çægÀ  ð†âaé°WáÁm àzà v1oü6s~¨lÄ…7¥XÑXÆ2DzPî:ÑbmBp £ÚQàdÐ`ïЯÑúÕX0ðâäðP!Åq:°) 5Ð[.Å‘ ®‘Ò ì pê  °WïÐ…Py1LJøz©ˆÅ8…qP…¸Œ2s2! 5QD C à ÿ€¯a–_ B !Û 0¿cÿ0xu[ Ðgîx/¢&\ñxÉ%ùp÷ 4)bÆÑ[  ¯aà ’p ¼‚)xéD‘‚x^Ä=¦‘ˆxxŠ ‡YnS ¦ÐÐ ·µ#ÚÁ ãrdà'Ú » ` Ã3Ðô˜#`0 þõ_`&à 30ß0ø°:ppúà#ÿ•À°d€°z°{‚g%ui,g6’6'ƒA1Tj¢€ pí`R$<Â#Ù ålpP pßq#`Èñû€F70'à;ÿ`10ø ¿Uê ò`œÖ¥   /6<”oÁ{®¹:öüÑŸÿ±PB 0!F¡a —€0 p ZúE,Âÿ…Рj§öŒ@ðà€Þ@,P Þp¡Ò&`&051jµø`8#0Ì1$p©¢ç° 0€5¨9bYS±©Ÿ¯É%¥ðc6×b:º ž j²É)å sK D‘ uÀ¨"ÿ'ÑŠ@ zE3C†`J!` Ý  &:¨€ÿð`Äå /@Ë‘;ÐÐ pPƒ€r»Œ*ç†áh S,‘aˆ×P·ˆ6± |`}ù…à —Ø ‘p-Ü ˆ¡0`äâ °;AØB…S4…suˆ£4Rãw ‰òfã¡ àð °$#rä@)°1,0 õ–ƒ·háÕhû :•^&ÊÒ,Í’2ebT$uói”À7ˆ °@n  Xö°;ƒC8Ígö²4?`„Œcz‚ñ5‡àr°œ°eÚ§)œúzø¶l-÷1:6›’E2—‘,jS€™Öˆ”LrcQÚB sààÿà'Æñ>S™€qDS4ë–/gkrzØ5ªO­ „ €ÓzÉš\C²Ž¥%¦‘É2YAx{§€H¡¯;xB—ð  äpÿpnCkÜ”¬Dذ¤rQó8%X®•C5LEP»o)h^ýY6WŠä,CQ ¯¶Ð¤-3C3¯` k€ŸUŒ°BCCÜ´qËêqÖ#±‚’ÇûvŸQ–Ä”–’ex•:¸ˆöÊq#yG983A°Q{3MºÁ|'µ°+Õno '5XÔP”´~+^ÁªÀAÍGi–6{ŸqÉ0 wp¯?÷ÿ”»c›Qˆ°'f/(U8ö"zMãRÿòv½ ¼ˆr¤û¼‰æ„ux'(Œ)غðªsÎX{oƒŒ CÑ` 9(µS;L1u»ã?¨MërÕ@ EC V‡/Ð` QÂQð È ±Ð0 qá ÇàÔp x!Ô`D-lDÃd—ÐàÂuAq' : ʰ9üDüÎÄÐP /Ì@âõ¤7öµÙZ »¢CÀFÅ2sƒ;1Ó  |rð Ѱ;`,•0u¹óƒE Ï0~ Ô@uÀÁ ›-ì‡àÆk¾@ UôÁ£volv¸ Á`>l·ƒ kÿw?yQÃ÷C´Ű@0ww ‡{,>pwf÷ xª µ]ôS9{Ñ’.«€’÷A–7¾'Å:4Fƒ/K„ùÂRKs¼Œó8§§¼zqÃî!ÌM*²£,‚¥‹®[SxlÉY 6Ñ Í@:Œ7öÊdX¾º±yböy@ˆpq­ ƒ)’ð Œ$ý"¨´ ó÷Ëu1¾4¨ Jvqè7JöÌQX ´ø¬¯Ä‹wA ÂDL¤`9œs¸µ· ÏØ ÒÜ ìpC—ÀŸ¶Q3£»#üƒ®–¬ó\ã$HJãJÑw’äË{ñÏUÿ³ƒ@K ‚ ïgŠà+4íÏð—ó¬J7ý3{ÓÀÒ‰t àKuP¾Ô$­YL°KÀ!iÑÍE0tnÆ"$|Ýf;• Æƒ0¸£ÁB³qÖwK^úƒd~=ýÏua~O­5‡àfÙ7¶¥Ô 44ý á´wqÀ”סJ}ý×­uÑ v ,þAn¹6ØA¤ƒ¯Ltå;MÄêjΗ¾Í§4 »R»‡{^"h®Nì¿Oû‹¬M‚êD^‡qÛ¸Û·}Œ;56†H2“æ^Ù[{õzƒ’Gy”QÏ䃿û»›«¾ø2/5ÔnIˆN|§šý”ÝÚ½ÝÙM²ºÿýݹ ›Iˆ¨Šµ&ã,ÃmÕ_¶8(Bí‘Kq¥.zƒRÝÔ¹ ›8亽Î;ÛþäÝà=àÆHÞ;5ʸ^ˆè–W¯‹Û… T ¸ƒ¼ÛƒL¡ƒ@€M`0 …p ` ™›Rú‡F›kN8‚þ¤Ã›Þ qàiiÞ*ë^¹©2+ó>3ï†y£y Öœ(éPg¥I`ÁW,À§ âx 5¹6o&h‚-þßW3ª1þÝâÍÆÂS!cxÁ F••½5èåµ2“-D—˜0 ŸN™P óV€,° ð—Ú €º0í@aÿ±o˜Q Mk/¦·zžºå,^þåÄX²;ƺUz6•±,Ê™0 3 uuè^@ †°¯„p ¨@Ö:ÞÐ D@+Ù( ` rVÒ:Ú`àÐè‡!°pȈ “€OZ^ÌËå«wé1NPÑŸhù%”6iØ+»;§ £@ `0†° Ðäà€À@ÀR‘éðà ÔÈ!;¢8€°(@!ÆV‰)…x•@»ÐÏδЩõäߕ޴ØNàãýl*៞p²²ªŒ› £À`Ÿ5ÿPĹ pjü¬\jðnЀ˜R.ErÊÑ2°ûÍ1<‚îú¸ðà ÀW_WæqÀ¬ Ž€+}ØñZþâÙ>Ph9æ\"m•1ƒ'O{-Û¦PM Ùpá `üïŽÝp[Ýp]à»ó èPÚ$rÇ‘8°2ÍQÞF+ð òPÒ-@šûè Úz@ðåðg cÉ\íÓ~Ø*XöâíÕŸdxóÚ–Ä]À‘p ZÿP[`!úYê€ä@o¥]ÀÆ`€áP´W'€íù_!ÿ€Ññ;À`9 ¦²8ð5 (p$(p. šúèú ˆ¾ € °{öøXàAˆpÏ¿©B¥¢XÑ"ʼnC…Š•ªÔÆRKm IÒäÈM›†ÀÚ$jˆ(J¢`R¢ 3È"/¸½3 ÷ €bÈ @"d¸ ! ˆºº%(pÃþjØ‹@Å *OFŽ0úáñ ÇŒ:j¬Àa£-Y²ß4<À`@£VFX8¡a%^¼˜Q¢ÆX¡DJ޲$Ê”-UŠÚëeLÐ57MBD B‚˜{AÛdcš!ÿ<ˆ¶™#p!Ã7:hÐHA"íöFÈk-”l¼ Rܨ‡B‡‹{9\8g-4ƒ…u Hòð!áÃÏ;$¨x"ãŠOü(Ù~ÈHOfNÉÙ%¬˜`’‰&Jz ¢ˆØFV ¨ |Ê&› ,ІÖXz£€€ ´¹A /xa‡dð§r0!…ô¹ç›âá/²êiAç ¼`Ât H`DÒcO0$B/!ˆ‹Ï¢4ŠR2‘*£Ò$þúóO¦™hÊ„“QþqÇ ®Ñ†þ‘@ƒ¹ó¨ß øŒCÊ€èŸ,Xàß~´À{êÑ„fPë…thÿ!nÀŸ â!!žobpáƒ6}Ì À% ™$bÍ>Š‚ ºq`@È(ðMƒ—³ù`{f¨'sgðÇ…òá…—³˜¢ô–DØà¶ “»a)_¥,¤ÊJ¢83ÿZâŒVþàl&@ € "U¡¤“ ^ñÄc &€j ÊÁ|TNQ„Wü ‡¨Ä\a@¾â¯˜*2G³Ž¹ãˆÀº ï @:Æ!ÿÕd -ÁZPƒy\à`À ¡$$- z¥ØCþá¤ÇÌçU"±LÞNÂ’¾½ÄV›ÀD°p "„'4! MdâAB' hÀÐþqŠHPŒà!~ðˆC¸?hÅ#ZÁÆVB´0Ä%N3òŠ p@!À €,(: à ×t+ç€Ý\!¶ÅnˆqÛ©nذÖm2¥°ÒId5„‘ˆÂoÞPM.V\‚xßû:ñŠAÀ»±ຠ"@¨ñKW¤ÑŒ8`ßxÌV$3™>h3eчI(Bmx Í@ÿ0€@04 Ú@Àî༷Œ†1T &é¶ÉRäç2ûé߆`«R†&¡B-ú„÷ùsŠ”ÐD€mpcÀ5ðH‘ŒÁ¤èÆG°Éü37ÚLú€™‘ã"Q‡ðå±c(À9¬U´¤Z[:Ÿ7ÉæµS>‰ '9y=Of¦+ÂJDé’…†þdå?á'ÐNtB£@@66Ð  ‘ hÇ?!F°0|DFáGfz4­imæADuˆAŠ8E5!‚ EHb•,X )iÓÚ0“õ!ì«èI¢¶„oÊ'žÚÏXF5ÿ~UlDЭo(€\Ì¥'ÂXÆŠõ]ãÝÈÆŽ*S­"më@"YɆ "†˜Ã) !šFO€ÕíAÜS½ÜLJBMɼGÔŒ5¶4ü^áܨ¾ÂJp€¾¥—Zþ”è¥]Q‰`®1£Ìh2OûFµ†t CØkÓ IøRò¦2l¯`Aò˜àâ'ž3 KŽ+ |2V©ËeeT_YÅç>wŸXÃ9&À 8*¨HDwËxQ —õ¢£ý¨2ARöŠ´¾~}oMã»ÎÞòÕT6„ØÝ.Ã_Ävæ%-yÉKTJ´•Uteü¢:ˆW9§@8,°>THb”ÿøehÇjÀŒbµÇô(ˆÙ*RõXTσ¯Áhº[0³Ø>V²ÌÄôÆ¢bìV7&ÐRúÔXNñ¹@re!Œbý¥eÒžñ˜ld&ZCºV·ÕPÅ'lóføW03"> A(†h õ³¾G `Ð9¬A¬†CKìcfXh 8jð…‚H:\°?"ˆ' †¤û…Âà†ÕcÀòÓj=¬Áeð),B T§ù’´Ú³4þð{º14l¥Nè@Vš¢ÿg8¹)Bj`‚4A 0†æ[ _¢†aÀ¨b€AÜ(÷Ó>è…0h+xƒ!, ex?ûs††ò{ÄH”ûs†pg(Øû<‚îS†ö«¿„øô«Hˆþ[:úòµ§Ã’â%ÿH* Rܬçb>|3 37lß­_:„%ÆßjH‚<8"¿ìk&h@„E.DeE!äFôÆ.<þsAgЂ9t…ÇSF)|<”t¼Rù²úš´í).ª#*d#eSÃXŠ3 µ ë£3l3¸&¦3*+6ò>AK-‡c­‘B7!œÂÿÂG¢‹!G«¸kž¦“!Â’y3®L;66Ó7§„*²Wú7ƒ|¹³«„ó¥_Z£`jH³â(žL/ЬH+B2è«=À…¡IF£@‹KJœ‚!|T ¨D.¿ d axVZ¶Š%]d9Q‹¶³›I…¬K°FØ0bú< FèIÕBÄÖ²ƒp…> …WP1Џ{º´Ë„ð5ˆ+:K¥âr R r€†h†;`°K†%P¹`¸cX3A”a¨†f†79c<C¸«B€ˆ9x„I¸+T€ˆFH ˆˆ£]ù‡Q˜… cWÀ£;µÙƒA(TøK•ÿvŒˆp›GˆMš¡…„èÍ;ùÍö€E(ˆ:ø‡:xÎ:øK‡€}4ÌMØ=Qh†fèâc„¨b>7jx𔳠{…`ˆl+Æ™&3Z„ù@ø0©7jˆˆ„;™NÙ[¯‚XÍÀ­=<ØÍ=@™XÖ¤½ …>XœÁ-ó¸·ÐYHœ¹Ë… ý‡F°$ˆ˜Í=˜NI”9Q€äÒŒ~𮣢¨"A2Xz¹A0†¤†i(ÀUë3±š„F“Qxˆ …f‚ˆ „<Ê…=¨µ„)NM¯êUÐ<2šâÐì,Né„åäREðRÿˆøPˆ0A€ˆ@˜ÎëÜÔÙ+Œû‡4°4´Ñf¨…7D¹N¹%(ÁWË—³JlûÃ# G„Bhƒ’ˆHÔù‡¶\ÍQpÍõý‡AP´=PÓGm?P©ß´¡SéySC˜Õ½âÒS ;[åMUµ!1ÝEPW­Õ5Ê@Ðè’˜èðì„ZàÅô¼ÌdO€«PÆj°j@1Ò¶GðÏ}…6â< ﻓ¶¢…;]ó½+Ü*Íp„‚ðÖåPðÖ:-ˆ<ªS?¸Ô»RÎ×yeÍ7MAØOKªS§ü³·‘¹}cVs6° µiƒ¤¶¶38„³¹Ñ:-7"Ć»²…p¯¼µùš8u['0ì²[+Ö4l³}Ë7£„çŠ pI ›6У&¯ðÒ¹ˆ Ùp£8Hûµr+Ú•õH–º£ÍR•zZ¨Z©Zª­Z«½Z¬ÍZ¬ ;libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/images/banner_bottom.gif0000644000175000017500000002242110404045240030652 0ustar arnaudarnaud00000000000000GIF89a,x÷ÿÿÿÿ!!!111BBBRRRcccsssŒŒŒœœœ­­­½½½ÎÎÎÞÞÞïïï÷÷÷÷ïïÿ÷÷½µµ”ŒŒ÷ççÿïïRJJÿç甄„÷ÖÖB11!÷ÿÿ!)1ÖÞÿ÷÷ÿïïÿZZcJJRççÿÆÆÞ{{ŒµµÎ¥¥½ÞÞÿ99BccsÎÎï½½Þ„„œ))1­­ÎÖÖÿRRcÆÆïœœ½ssŒµµÞŒŒ­BBRÎÎÿ¥¥Î½½ï{{œZZs””½kkŒ11B!!!1ÞÖÿƽބ{œÖ½÷ŒBÞ÷ïÿέlï­sç¥cç{!ÖcÎïÞÿÆœï„1ÖsΜRÞçÎ÷÷ï÷ÿ÷ÿcZc1)1!!÷Þï÷çïÿï÷½­µµ¥­ÿÞï÷Öç9)÷ÆÞ÷½ÖïµÎÿÖçç„­÷ÎÞ÷µÎï­Æïœ½ç”µç{¥ÞsœÞZŒÖ)kÎ!c÷ÞçsZc祽猭çsœÞk”ÖcŒÎZ„çZŒÞR„ÎJ{{!BÖ9sÞ9sÖ1kÎ)cÎZÎJÿçïï½Î÷­ÆçœµïŒ­ç„¥Þ{œçk”ÞcŒ¥BcÖJ{ÞJ{ÖBsÞ1kÖ)cÎ!Zs1ÖZR!½Jk)ÎRÆJÎJ”1ÆBïÖÞÆ­µÿÎÞ÷ÆÖ諒J19ï„¥ç{œÞs”Îc„ŒBZçcŒµJkÞZ„ÖR{ÞBsÖ9kÞ)cÖ!ZÎRÆJÎJ½BÆB1Jk!ÎB÷½ÎïµÆ÷¥½ïœµç”­­Zsï{œçs”ÞkŒÞR{ÖJsÞ9kÖ1cÎ)ZÖ)ZÎ!RÎBRs!Œ)¥1­1Æ9ÿÞç猥Þc„ÞJsÖBkÖ9cÖ!RÎJÆBÎB„)½9Æ9”)µ1½1Î9÷ÖÞ÷µÆï­½ïŒ¥ç„œÞZ{)!BÆ1÷­½ï¥µçœ­œRcÖBcÎBJ½)ÿÖÞ÷ÎÖÆ)÷ÆÎ÷½Æ1,,x@ÿû H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹ûØÈ±£Ç CŠI²¤É“(Sª\ɲ¥Ë—0_ ŒI³¦Í›8sêÜÉÓ¤À*J´(Ñ£F"]ThÒ£L£B}J5jÓ«K‡ZÝŠµ«ÖªO¿:å:¬U°E«’5«TíT l£ ÔA—®7„ÐÍ«CH~?êöû˜.`‡uYQqáÆ‡¯°Aw‡~+rôsLw2gÈ-cÖŒ¸Fc»xõêàë7±èÌ›?/ÖAc‘~3h4žQ°‡á¿¦OÛeløñàÁtƒPþ\—7AßÌ‹Cιϒ)ÿˆ]ûvnᥠÿÞ^x6b+VYc»ôë”û¡W¿bGbÃýDÝÏ¿¿ÿÿ(à€hàüé‡à‚ 6èàƒFQ‚‚ûI!Š0SOvèᇠ†øá†"–hâ‰(¦È!‰*À-Ž´@)ðÑŒ5Št€@<ðÒ@ôÒŽý €-`À@4°S4Ð@H P"‹½>v¤%!xTP0d"á™0º4™K€4&MÄä@Ž%Ð-àý ’0”€GKöSÀG p(G8ö’ =PhA À€Iz9hŸ ª ‘¡†"*Т*aéQIPÿÁ„LT‘D³†Ô›Q¤Ä¦Ks&d [‘‹Ò8%G‰&ÛϦ"  )™Zª@|TÀž'Y ÀY)¨×jTn´Óâä*G/rI’iÆ(oGèS#È܉4ÒÜ2 ,’´’Ç)Õ“H½à“ÆÂ唓†Â«qÎ9¤ürG:yì! 6ÈTBË-ŸHóIÈ"l²ÉüŠ\K2’¨s )‡ÌáEòbˆ1 /úà3‡!tYÓºó]F³A£Üá 2ŸŒã¿'WmõÕ%,r¿ÔÒÉ-µÔ²I%°8r0w,ÒÆ‡ô²"£4¼påÌñ³! mÑI÷ÿíwŠK—SÆð óFÖ¸" ,ƒT’ 2#H1Ž sG"Ôœ0\ÍWšû÷褗n:|Ÿ®ú꬯(zë°Ç.;M‰`ûí¸ç®ûî¼÷îûïÀ/üðÄoüñÈ'¯üòÊ $Ãó2°ôBÌ0ôDàýöÛƽ +t_÷ä—oþùèCïýöÒS?ÂõÏgŸþüäÓøâ¯¿= ,<. úh@ü ð€çûËõ‡@î)P  @T@Á ZE° 7ÈÁj ¡GH f°„ýHAAX ž°…0Œ!YXAÊЂE°áY B°`7Da?ÿB@Ä"ñˆHL¢—ÈÄ&:ñ‰PŒ¢§HÅ*ZñŠXÌ"S7».zñ‹á"ÇHÆÓ‰‘#Q@‚?‚„^ KJÖ›Èt5"Á 7QÀ@(å‘NõƒÑã÷vFªN’¶Jäi½nDô¼ 0…,Mx䛘º“üª&QXœ„'°ÉX1qd¶6²¤Uò©«À¶bùG €À¥.s)*qqÄ[¡"SÒ€l‹ Ôê¸<5.øé\Љ-wIÍ^¶*’AœØÄM(àÊQÂ6½+29¡“‘›¨PJ2e²$!˜#ž„9NI S ÿʘ’[ñc>‚… b¤XDü°ŽhÂÒp‡;ž‹~Ôƒj);úÁŽglMºH3¶1‹A@‚¦ðEİ=MËFŠ´T%) ©˜TrÚGy¤Y–G™H4ÀÏ.K>. §Eíˆ0aÉ(l² M”t¶Ú„|šSheT‰q‡>ËèÅ>£‚–C‰@…$–q‹”eíj$ûÄ-˜¶J ÆÐÃ)Ð@_ô‚i˜æp/  ^@Z AÙ9¤ag½8Ç/Ú°ˆSœnFÖ`†Cèô£À>ÊA°•am‹&›Rÿ ʨ3>!QŒâÕj·Øk'Æ W´yÀC:A:ð"µb(Ç(ôQŽ x:)¤lW÷€î‚u»óÒ.xÇKÞžˆ·¼èMoLΫÞöº·[V}¯|ç _úÚ÷¾>¢÷Ëß*b¡¿°€LàýÖîBN°‚Ìà;øÁ~†ú1C¤ lA ,舰-x¡ :lÁ¤ÀÄ5±…1|Á “І ¼pelA«@Ã!‰I(bjXƒ –q3˜X°4f! e@ÂñÉ#ÎÀÉgƒ€GOÜ0ú÷—„SœåÛ{¹¼³M„âø¶5Òßü¼Ë ç??ø_h ó멼å[_¶‘0ƒœûÛÛgn ƒEÓ`êQBôÆ^v"¼|æìÇZÄR–ºke?q©{[²³ŒïRÙ;àr4@{÷{\¿ø¹»+[™»Þ”œàž|ßùsøÄ— vÌ ½èG?<%x¦'^p—úÓ+¯õ®gýòXä¿ÕDzëIîu/’ÝȾ'hG‚Ï‘Ûß&Ç¿~—Ïüް·ùÐíó£O}0Nß½Ⱦö³ÿÌlûIÝÈÿ÷¹ï’ À‘ñM PQ@Sñ¾PqâGŸÆèú8±I'LZJ5U!±$¬B;Óç4’LÑH{t"Ò:$¡s”K€L€U^'^•R€R°q´[¥%e2‚LN'±hòL FR0IP 4qLQÅÇ4LÁ'ö €~Ó²ƒ¿´!=H`€ä À$á÷(AH¾Ä=òó<$Ð?è3 °=¤qó‘1w t>§qpÿ" =,P²E(;³èc/?2Kk-=w>*@?B ´Në-‡>é±ò¡ò†@+ûÐe†µÑµ¶gá!¶_t=plK¶A·¾Á·~«iëºÁ€{Áfu¶s6vfý,·Ý!¸ÉÑ·á•ý@¼Ö2ÐÓC€VŽ[”û”pc¶¶º¡·Ä†umû¶ž[=@—º‡‹†«¶À i²›íæƒÛ·Ÿ¦…Ro;º¢Kx+½È!¶Â˶4 Bà¹K¼Ë«Íÿ Ab7¼Þ˶n ·øq|Û; 3 l@Ðqý`h&ÙC3ñ²Ð÷»ktÁ7À?ð¶ˆÀ¼–¿«ÁœAÀŒÀ²¶¹ìë¾ðÛ÷ ÁýÒ#l0Ð<оñ@yæÀŽ1Á|$,¿{Q¿’1º|5@jsF*ÌÀ¬½Fq_˵ի½fq2°ÆÞl¼Xç=|ìÇ?€·cü0ÿ`h,jünÕ[È"‡Ábk= Gu5`Åc,tcnb{‡|Ç_‹?{ÜÆôÛºbëvÜkB7Ê9ÇÆb{XG/Ðk²lh± sÊ—Ç §@«ÉšüµÔʸìÆR,¶,>ü-ÀB`tâoãcpÝü—±sý°Í×Í;Û$ÎãÃÎt{¹ð\>جÍÜüsøìÎÔ#@´ü<1P(DÀKÛt#k²×#sæÓ²$KÏG‹ÏËìs $-$p=E0Ï9p´ÞlÑ%]ÏE ÝËñ,-P(.СËÐYÿ7s"}´ãL·æü<ó<(àÒ0­Î2ó 1  D±»ÔLýd)ÔÔPÕ{ ½³ö±r'±Z½Õ\ÝÕ^ݰ‹°b=Öd]Öf}ÖƯj½Öl­¯mýÖ6­J®Í*­îú¬Áj®Ñ*«¯Z®¼ª­ÑÚ¬ézªx-­}­µ:®s½Ø·J«Àz­„Ý©¹Z®ñØ”}Ùˆ}×ÆÚ®ÇjؘíÙ‚ªÄš{ÙÔzا Ø™ª®sí®žº­¨Ê®ïê¨ZÛëEÛ¶Û,1¨ºÝÛ–èÛÀ [Á=Ü2ÛÄ}ÜadÜÈMܼÜGuŒ¬ƒ Œ*Òܮؘ‰j«´LÚ]ˆÝÿÝO…°;BÝ4ˆè}"Ö½oB:~4!T„9H¨ÜâÇ# Áè׌7á À‰‡ˆßÅ#ØŠ~Cˆ qLøŽ=EHø]‘#a€Îd"šè€%ÁlÈ&Np.‚UqÒR Od2)ÉÞMñ¢JÀ$®Oßøw2‘y‚'±# .#@"àOè@â“!qHäƒÈLß$HNä €äHÎãFU… €~)Ñä.ŽŠdR'VðNWž’ 3IUàðI-A,”äátI+þ‚‘1ã硉òÝ`Œ °;.†)y. —D.…_xç°ÿ:@’ÂtŒK®S¸„>øHÚŒÛ'ßy.{ÞçEâäÍ4l(Žlrâ dâá!ænØ&åH&‰É.ÅBŽ$6Kµ>TTÇDÝ´„Õø L ¹p‰EX‰IòŒÍT—ÒM ¾HîìaXe&Q†1Gô¤†Þ~+­þ9)tHø,¡‹FEß¡'þÍD½4ïƒ>çÞ_ç¾ÞÂjÞ“îç7ÂìY’—È7ñNï½ôJtž_#qlã°­Ží(aæ.!U€UÅb+³ND’Lʲ¿3^èɽë(AŒ`Œ,á0U ðå"ðÿIÒ.Ü#A‚ôÄ&Uë`O*Añ*¡åá(“Ù´ñ4ñJÙÒJñJ‡²$¶^.OŸ_é§òYØ0Eÿäã0?‰2Ï‘Íõ·-Q€&K€]fº¨Žå!ñD@ÏŠe²öFïOáîñOàò‹Éî•M3^à—å gpå€Ñ0aÀ™xc…6>àýö ˜.Ê´õ÷ÞõÐ~ã|O€"æë”Zµ5IæòÄÛˆqøs$êWà/0(ñQPáH&Tpq‰î4è"1YÓ@ yÐ× ÈÐ8ÍИ0 µ\0ì a3 •0Èð!w°+¥›ÿ ç&/ì4"þà>.-¿îõå‚è ±$ÉØ)ðç¶’âÜ´Š¡MÝ”"Kž@!HÅÉ .d@‰* V‘¢0B‰Pª4äØqa?8:ÙÏÀÂgzQËÓGÐ2Z´lµ+Ù. ëIs7nœ´Oã@zr–“.v5s¹“&í§MÉEVªß @ (€ PèøFÍš °UÁ ½jÝê•a‚’Ðe Ð ( i „5Ù‘p? AzT2Š^˜HŒâÑòeÌ#dæÜù²— ‡NõQöéSSpà¸-Kg,Hp±zôhÿ1GÖR©sKïd•Õbv‹´pÏššfnº)PŸNgÁjUÍ\(0_úz^°`ûBÝÅÇõœ0üv,†ÒàÃWnŽ¡ÍÂÃÅÜ`AÇÅ#&Á<Š•òp@òBŒs¥’N˜™…Ia˜5IcŽ.¼ðâBX‹†"QÄ æ#Q!˜7Z1FY>ùƦžk޹çn©e–JŒÉãŽ_ʘËø 0Cðe½4ÖÃG C ¸Â #Ê#ÿ¦¨¬!%¤ˆ «sLÓ;X^K¥š5Ò€€LÏD좜^îH›AfáĹån<í¹¦8™IZÉÃ_ÔHÿý ˆq@, C %{Yc 6ÚæœQ–toŽ÷à{tÌ+;R‚‰*“ˆŠ$š!8c•Õ2Cic‘jÎI£‚YÇô¢ ^Ú@Eݱ§O?ÿü³Ï[h©De(%’>Zq$TÞxã”Eº=å”tN&8"1Ƙj[Q·8†¹£Ž^:=¤S|˜ÄÐ øÈ,µW~û-IP#ÕßXC¸ÀŒt ©„“o€*Yˆþ„)ç~ª'‡1¾…éŒi$jШ&RJîEŸE×sïÄrÄè‚W}û!xfš;‘Èš ö¢œs†]æiÆqç4ˆ‹6ºB‘eAdt~¡¦ÛDz9ÿÄÒ^Z¦4 1@½ H8÷Íyì~Á&{æ.ê´Fp~ZÖè¢o1n–×$q¥GPad‘;à1c”zA)gð9Ü{Yà^Å>{qƯ2‚.F!ekd›Zþ¤ØF¢ýÔqA qdtTÂ=åÝs¬žð!æWqÇc—}v΀ }ØÀÃIIf™mvùä>ßž®˜bZ±&oQÄoÖ+x`lØi·þz좂i eDÚPä`€±ã—6Yc”÷º†à\'»úìëŸþ˜Þ~þ¤¿P€ûß x@ƪ€ d`ˆ™>P‚l`)xA ö-ä`=øA†P„#$a MxB¦P…+da A;¨J!Xõ¨G è€"7Ø„öP‰<à ݈B©! H ÷9ˆ"Ø¿Ú]0„&,` ¬ø¿+ZQVÌbéW¿*~±‚\ôb˸Å0òŒ_ÜþÀÈF7¶±Šktc¹ˆF r1€`Ô£ x¿¦±ŽoÌ"íHFŽàEhB$ð0Œ6À¢ ÔUj8½AåBHoèÃ’•³¤e-myK\æR—»äe/}ùK`ú’~?p@Ì‘.ìáp°. F"P5ìŽ,d¡‰aÿ˜!”x¸]ÆÄ ˜ã4ÁZ`‚s¶Àœ&(:ËyN Óœê¤çÜIÏxŸ;ÝYxæSíT';ÝiÏ‚ªÓží´g?ñIÐr泡ælg? ZÑxF”  ýgF+ Ðx6´ Å'EÛ Òœ“¡ò<çDÓiÎ…–“¡#}(?ï Óz’±ƒGhQ#¬€;hádhE+ÆÀ -Ø M`ÂÙ˜à€ˆ“Œ5hL Ñ’¾tŸ!uè:ÙЀf”£ÍhXá9V²–5­d «?ó¹V¸®5¦pmk\íŠQ»æU­iE+“yÏ“V3˜ -hOsÙÊS.³š¥|dXÇZÖ³¦u­m}k\çZ×»æu¯}ýk`[ØÃ&v±}ld'[ÙËfv³ýlZ§*A¬©=í#WûÈ*@´§-n£ÜÕ¾vµÇ½mrwÝÜw¸amîk{ÛØN¸Åmq×[Û* 6¿Ùko_[ݰ–7¾¯íîv»Ûý6w¾gmoys["¶·¥Ýð{w›ââ·¶9®nv“ÛÞÙ>÷‘+~o—Öí^ù½µ=î†äÕ¾x˽}nxÛá§x |þs ]èC'zÑ~t¤']éKgzÓþt¨G]êS§zÕ­~u¬g]ë[çz×½ô€;ðD‘>¬C×À%$á HÜÙrÄöqŠšbïVN¼-|¡×;="j¾5æôLoºè¸«ª}<øÀ ½5½»MQײ]D! ƒÐÆ"j!xJì_§+r¹ X ¬X%‚16øy ç ½>Ú(XA1ø{oyÿH[ž§˜Ò?‡KÐ[ÂoÅsÚ·B9RÓ¥þZ³ÌÛò«ñÈvã †6PB‰`Ä-nß»—¯‡}‘‰K¤ŸõÓŽC Æ H ¢Ü_ 3Ð/x{G^ÞÂ÷y¾‡jbC±ûC‹Ãx¼ž ÀÜš<ü±,êó¢,[#9€;ȃKØF`g¸^0…ºÚµ¾¬dH´2„i£„I€=ù£‚pヺûSï¾ë? û?LºäÀl¾ó-ò >†›¾…£Á®8€P€˜6¢‚1ƒ:„;˜„A†``¸I0³+3!è.4Z+9¾èS¾z%àÛ¿lŸÿâÃÁÏy-DCóa>[ùAŒà=| °­3d@©;Õ<Ô95C£3Û1gÑŒç£Ã|ÁÜÁt©-»´8D>GtŒ¼Cý[5OB3DüÃ?Þa>Âó FºLL1Hô¸·Â³?¢2C\EÄ ä¿HB!”¾PìE6”·R¬ŽŸBE»ÆEÄü>ÿ»­@[|D;ü½5üDdLCÄE#|al:aÜJF_äf„<|Ch¼ÄÄ›Æ:Ì­WÄC´Á\DtÅüóÇ»HEwl’9ǤDÛExÜÇ\>xT ç›ÇO,ÇÉÆÓÇæÀÃE<ÆÀ„œÈ€TÆÍpÆ\Ç|ÁDr¤Æ… ±NÅl¬¼_,Â`ôÆÓàÇ‹´´‘ÌG¿cH«4Y@9$:[ÜDkÜÅ…KÉò BL¾ ÜÇ ÇçÁ¹ŒTÉš4Ét´­‹F„œÉ",Éf¼F”dI@$Ê?4Êèp¬¤ìGzlʯ´JXÄÉâ;¼F¬J³t<8 ÉvôËèÃJtʰ¤K§´Ë¢ÄËcÔËSŒÊ{Ë ;B¿„J¶\Ê•äL½DH¨ÄË„DJ¾¤K’G|BÂô œHD4ÇÆtÌ’ǺÔÌÏÆ”?j$I\ÄÍâ¼ÌàMÐ|ËòNÎDÊôLNölϽtÉÓ´L¼DÍ’ ÉŸ ÉÁtƬ¼ ×4Œí4Ë7TÍ4ȹŒJôN^n~Žž®åÝ ¾/?O_oŸ?êί0 À <ˆE¿…Xþ%|1¢Ä‰+ZÅ0#‡ö;zü2¤È‘$uh< cÉ•,[º| 3¦<”4yɼ‰3§Î<{b¬ ô€JŸD‹=Š4©Ò A›] 5ªÔ©T«ælô©Õ­\»zý VV ZÚ=‹6­ÚµûÆÒ,Ë6®Ü¹tëÚãöíݽ|ûúý 8G^”p>Œ8±b°ƒO^ 9²äÉ”K6Öø¸²æÍœ;{Žw9cæÏ¤K›>úVh†£S»~ ;¶lC«¶ž;·îݼ¥Ôîw»·ðáÄ‹oñ›_ðãÌ›;Î;¹»åЫ[¿Ž]²ôvÔ³{ÿ>|ÚíÞº‹?>½zŸä»™_?¾üù ;÷ðãˇÊ~œûùøóëß2;libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/images/id_nav_bkgnd.gif0000644000175000017500000000121510404045242030426 0ustar arnaudarnaud00000000000000GIF89a E‘ÿÿÿÿ3f, E@ÿŒ©Ëí£œ´Ú‹³Þ¼û†âH–扦êʶî ÇòL×öçúÎ÷þ ‡Ä¢ñˆL*—̦ó J§ÔªõŠÍj·Ü®÷ ‹Çd àŒN«×ì¶û ËçôºýŽÏë÷ü¾ÿ(8HXhxˆ˜¨¸ÈØèø)9IYiy‰™©¹ÉÙéù *:JZjzŠ Z¶ÊÚêú +;K[k{‹›«»ËÛëû ,N^n~Žž®¾ÎÞîþ//ŸZoŸ¯¿Ïßïÿ0 À <ˆ0¡Â… :|ȉ™Ä‰+Z¼ˆ1£Æø;zü2¤È‘$Kš<‰2¥Ê•,[º| 3¦Ì™4kÚ¼‰3§Î<{úü 4¨Ð¡D‹%1©Ò¥L›:} 5ªÔ©T«Z½Š5«Ö­\»zý 6¬Ø±dËš=‹6­ÚµlÛº}»é¨Ü¹tëÚ½‹7¯Þ½|ûúý 8°àÁ„ >Œ8±âÅŒ;~ 9²äÉ”+[¾Œ9³æÍœ;{þ :´èѤK›>:µêÕ¬[»~ ;¶ìÙ´kÛ¾;·îݼ9Ãý <¸ðáÄ‹?Ž<¹òåÌ›;=ºôéÔ«[¿Ž=»öíÜ»{ÿ>¼øñäË›?>½úõìÛ»?¾üùôëÛ/;ýüüû;J8ûX€H`ˆ`‚ .È`ƒ>a„NHa…^ˆa†nÈa‡~bˆ"ŽHb‰&žˆbŠ*®Èb‹.¾cŒ2ÎHc6Þhc;Œ4Öhã8æ¨ãŽ<öèã@)äD9a;libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/images/id_nav_outside.gif0000644000175000017500000004636510404045222031032 0ustar arnaudarnaud00000000000000GIF89a™E÷ÿÿÿÿ!!!111JJJccckkk{{{ŒŒŒ¥¥¥ÆÆÆÎÎÎÖÖÖïïïÖÎÎΜœÆ””œssµ„„ŒccsBB9!ŒZRZ)!Z1)Þ½µçƽµ„ssB1Þµ¥c9)R)1­sR„J)J!µ{R¥kB”Z1„J!Z)9¥c1c9”R!­sBsBÆŒRµ{B½{9¥c!ŒJΜc½„B­k!¥cœZ÷Μ֜RÎŒ9ΔBÖ”9ç­Rç­JçµZÞ¥B÷Æcï½RçµJε1ÿÞ9¥”1çÎ9sk1νBµ¥1sk)çÖBµ­B!!cc9””Jss1RR!„„1s{RRZ9BJ)BJ9)1)BRBBcZRZZ)BJ!µ÷”÷„ç„÷„”¥ZsŒJ„½)R{9csÞ!B1cBs­Z¥ÿ)ZcÞJc„1Z”)cµZÎ9RÎ)RÖ)kÞJÎZ„ÖBÆ)!JÎ9½Bcµ1sB½s”ïc„Þ)J­)RÆ!J½9œ9­1µBZ¥!1cBkç)RÎ!B­!JÆ)­ZsÎ)9s!1k9ZÎ1RÆ)J½)œ9J”!J9R½)”„!¥ZkÆZsïRkÞJcÖ1B”BZÎBŒ9B{ZkÖJZ½BR­!)Z!Z!1”{„”ÿRcÖ„¥­ÿ)1{kcksÞksçckÞRZÆBJ­ŒckÆÆÎÎÎÖµµ½119ZZk””ï99c„„çRR”{{Þ11Z{{çRRœcc½ssÞZZµ)ZŒ9R”ŒÞ¥œ÷¥œÿœ”÷”ŒïskƵ­ïkc¥)!k91kRB”½­÷Œ{Æ„sµJ9{scœkZ”νç„k¥Ö½ïµ”ÖR9k1!BJ1ccJ{½¥Î¥ŒµÎ­ÞcBs„cŒÖÎÖÞ½Þµ”µ­Œ­sZscBcÖ­Î¥{”Œc{sRcÆ¥µc9JçÆÎÖ­µ,™E@ÿÏ„ ó¥`0gÚ´©SgŽÃ;ïä‰1ÏD‰-öA„ˆ'R»vE ­$´gtXÍÉÃÑF—}Ũ£›„1šÄS¨Ÿ®\™2eë.ht>³÷¯©Ó§O™Ú›ú¬jÕ=ÏöhÕJ§«:rŠEC¶,4lÒªe“¦­Û·pãÊK·®Ý»xóêÝË·¯ß¿€ L¸°áÈ+æ›±ãy´ô‘Ã3gìàÌI‰Ò$Ï“D‰µJ×.R ŸAu MÖ¶P0[Τi³&¦r2 ÚóoÔ)OA! U¦ìñaG“*W½úß#Ð,ùg¯êó&Ñ›<áJ:v#ZÖÿ5‹v-[¶v£q"ýÜ*F°7¹â^nöûÞ×·¯"%‰:õ-& þ%`_ê± € 6X—nA˜„N]„ZXá_v˜á„m©'؆–(at¦è KˆÐ4MŽØä†ŒÂuÏH’Ih¢r (A eJ(#éBsOÑÍ6êdSÈ‹µ9Â!±ŒÂ›S{HrÉ)D™B -Ä)S̘ÅXƒË(IA R7Bõ\tS\‘ÝPä÷ŒñÅÇò‘ÅâI‘§Q 5¡|K„'ê-Ñžê]AGyðE‡ªÞwM´—žÞyz(tK€E–êAahhtEN€ÿ:(l Zª§¦Š)¤òIJVZdáúivžžå*¬²~GkˆÑ9º ŠÐF+m`$Nkíµ€A³ M0Þt“M9M2ÈV¶ù3‰éŠpÙRŒ)±@£‹‘Ñèr’Sö¨©Í;ø|#JMÞB # õx $ëõ%˜b’9æ0ÖÜ2Ê?Ï”´f4ÍQGÁ M4AÝVoö™XaÑqDž}~—Ä3¸¦•Ÿ³p5Ú¨æ—'¤–bJÊFˆ*W²¢Ú*êœ&V6G‡3v—Ž*ÝМJa(Qà§žÔÆÊÒšB·´Wè,󳨖möÙh§vÅÑhâ­#œuÖÓO—Ä’Š=˜¸òÉP|ÿu à sŠ‘³È"Ë,¦ECGSÐÌòNÐ ÐóŽ˜KPB *t.Ãç&„.Âè'>º.¤®zêP€äjRQUÝUYmµGW`‘,®ã¡U^yi©-üðÄoüñÈ'ßÅÑŒÒ .“ì>TßÃÑbK-Ř#Ï/ð >/ÔC "TPÆÈ’K.¯`üL,ûä Äý@èàƒ<ô þ<ØAv d,*«©ÊSžp0`t`S"¸€ B0‚tà!¸Ajðƒ €<ÈÁ JðŒ AˆAf°ƒ.ü` ( š+œá ]C¾0…7ä!ÿM˜C š°‡,Ä  ;ˆCî„?¤` yxÃ2‘‰M„â·øDÖЈNd¡¯¨D!æPˆbüaƒ(Æ)zðˆiD#u¨C"1†ƒ”·˜A£ç@ZP‚Й@*@¤ bÀÈìà‘AàA‚ðƒCÈ$~0@°À#¨€Sªr’Š-evKeÔ€‡@ÂÖ8™†Q ZŽ)L´Àž)ná PŒæ3¹hÀó˜ÈL¦2—ÉÌf  ™ÐŒ¦4§ÉÌgRS™M¹¦6·ÉÍnz3šÖü¦8—™Me†sœèL§3ÕÉNj2(f;çIOdBªy:,Ðÿ°€2¸A@m@Фà€öØ&ŒŒkXƒ Ć! Xf‚–8",‡:ôÿÐEG¸Ñ Üö|ØÃˆs e”âFx»D"b‰ñä3”ÈIŒVDcóúG=‡JÔ¢õ¨HMªR—ÊÔ¦:õ©CmÅ1×âåèF5‚ŒiL£«\ý*Wƒa±N£h­,­1 вµ­l Å+XÁŠM¼Â®¯Øì¼^bû-qY‹e#‘ÀDS˜ EŒâu˜0DŒ >pk#‰.„ ÕÎzö³  ­hGKÚÒšV™ÉÃJV«ZÖ:Ä!q ""ÉÈÿbˆ …âÌ•±gìB”Á¬e8Â-šð¡†¬Àĵ¸=„Â@b—)”A‹a,)Jy]ÆbG«`¥vÜÁ]ÉÆÒ»³O-m!›[¶ÀÞ-”á.[¨‚|«°Ç´—½|¬Ë}·ð—û¾7¿°€,˜G|Á `ˆ Zrnâ¸oˉN@Ã#?üÄz«‰†S •gD£àà†Lˆ;ÅȱC›ž1 E\â¶à[˜ˆS&\(Î$tЮSV &PLNßÉÏžúÄ•_ A=ó£Oýê[ÿúØÏþõ§¯ýîSŸûÞ¿ÿø“þñ›?ù½Ã ¿——8 Ç)xt‹S Câ ‡ CPG>²ãÃ:0I”ä?à>0¥§€§g®3 § ö@öB1p°+à3À7p#°] µJ p ÇP ¹Ä7®ÀK¢ º@äA'DƒTE(DDNtƒPAƒÅ4B>ˆƒ'äYÔDD(„7d„Dh„>øƒA؃C¨ƒ:XƒY´EX„I¸„o”ƒ\Ø„B…]H…Z(…GFLHƒ_dƒaD†aX…Y؆<¸…M˜†Tx…d†;ø…Sè†Oa‡y¸…fè„j(‡b¸‡nˆqXƒo؇>¸ÿp@‰’8‰”X‰ƒOÌ“@-:Ÿó9µHþge‰8ô ³` åÓà0ÂVKd‚K¦ ‰p —€ ?âK7ÕS›P/³ é`”TçtZÇ´ŒÌøŒÝ䌦%ÐÈMÔ8Z”ðdÈXFå TÅÏ@.p3pŽ0j P  ^µUc5VÖ dK1ùÈV—@ ›ð¤  ¨ñ ÐÀW¨ñWþ°ÒRÅ0cÇÐ Ì@˜p ¥ V‚$±ÀS²SÜ’€ õÂYÞ8’$Y’&y’(™’JU °@ ™0 L1 Ù°þý€ [ÿõUbK\e gU M¡Ä0c¥0Qm•”S «° ¬0W¯WyµºW± óÀŰ‚|s 2% § £´-VSM±–`Y-1\–ñF"’*—r9—tY—vZ Qw0[¬¥Z­õZ¯˜²E[ ’%QQç{¬Ð,Á"µÅEqp³\™@SŠp ;Ç7*¨ ]¡”uKá]S·â¥uâw^xìך®ù𰛆‘+±—±±Å´U[Áq ‘<á:ç¹…‰¾×aÑ  Q¸µ–Ååšp%˜P v0 ª@Š Ÿp0¨ö%(( iRJÿTê1Ýõ K T`št@êI^¿ò+gÁuêåA¶dvqmСõYfþ gšRŸÊ ~qŸ*›#‚"y1iˆVh†H¶3ކ ‚a ¤P[Зzq@Y5Q&0rCj=â ™’FR°£ŠÚƒð-ò"1¢ÀÌ “ ˜ ¥ð $§ ^rÅž8¦cNAžÑñ³“žAfëypƒÂ·#] ±òdUÐçåeþå’°’`!Ø3nQÈe Ÿ`£3Fd¶ÃíÑZP§Z°*_šh+ôf_ȧyº§NЧra¨Uÿ0¨nA§vj(j¨‚jyÂmš"2¡jhB„Öfr"ê ꩤš©‚Ñ•á %|ð6 ƒPÃ#>Ÿð’f/:–/ÍÀ$¨ð˜Ür\6Á«Ð r ‘g©°=×lÁ6 Ç`¤8Æ[¾§¤Ð1é LÐ1бž@®·ƒ“Ö1(H`Á³gM°NPRdβ<X±Iæö¦Ï¶©YƒéveKWâ P€U ¯¶£Jd]À,ˆ‚° d ›ødI°¯üjX£gò°q*±kŸNhªÚ²‡æ²¦ 11£“YÇÿ¥XÏ  t€ ’°z “àK¢°‹×C§ ò¢a,Š/& êðË%0RR ’ ¡@ ŠÀ˜c}C]ÁF&ÖP¤á¹&Hjß*NjL0;®ùÁ(!j(e¡BS+ —h—ÚHÖeã)n*X62¸ãl!+Fnö:4Wƒf€e{ZÖ¸úö¸i€e€û3ê ‘Û5’knÛÆ²0[º¦ËGР é`±ºSŒ`/·£  ± y}&6¶rôò:ù ‘øp –EY5J¢9‘¶aK&Ç` ËðX&¡&Ûµ¶ßѶWñ¶SŠ` 6#5˜ÿP5J(lÑ'fª²Ð¡ •òQÀ^âÿjA–nœ›'Û·—F“¹¹_Ó4£›¿Ð!5l`e÷Y±ëMPm¡g¸2oþë¯:sŸ¤{º|Áj h–¶Öº•‰¼¢`™ ˜ —À]»7º&µp E2/+ºbÉ™0×ÀS›q¢ñ#E›=a‚‚ÖZ ÙPð®s–j‚1ÍuP‡#àeŠÉX—cYÀLS ®áÁdt°¯,Ë]¼Åmz`IÀbu¦9¸`Æ·SŸr`šèÆ^ìhàÆSSÆþ‘Æ]±Æ^ÖÅYá3w¼«rt  ëSÿ(¡3qÌlAÆfœ|ìÆ€KÇbŒÁš¼Éf“³p;uk„ ;¡µX‚%—À7¶0­´0­?| .üaºÐ 0Ì¢ùsàûà Œ:!==a@R‹Ù ú`&À¥s:¥S:åèØ:ª1ÛEPťɞ^šªy^çÁÉàÎâ<ÎmQ1)!ʾ˜sŽ' ¥€ º¤0”'&Öp Ú /³°y†#£9 á@¨©—z00p>¯Ç9c*`H†$'Ñ­:+ð)Àt¨O0ÆÈ Ð ðÑ Ð PÒ%Ý ½°  Ò!­-Ò €Ò(­Ò,ÿ­"´Ò&=Ò)-Ó#­Ó;=Ó;ÝÓ?íÓB ÔF=Ô2ýÓ"Ô:íÓG-ÔMýÓLÍÓRíÔA}ÕH]ÔDMÕGÔX-ÕUÕQ=ÕdýÔ)Í|HMÕc ÖkíÕEÍÖj]ÕKMÖPÍÕSýÖ[½ÖNÝÖ\ÝÖ[Õð y}×v}Õc=؆íÕ„Ò¾ n°~Ì<£ ƒ=:<Dy_û%bÒVæÀ"àLWè  Êéyª Ä 9Pz¥'>üÃ?ãS;ÐH6pð¼gоgħFc¤FÄ=|jäF4F<¤ÜÂ]Ü4Üc„ÜÅÜÎ ÝÐ]Ý×ÝÙ=ÝܽÜ/ÿäÝ<$ÝÆ½ÝÌMÞßýÜÇ=Bæ½ÞÕÝÞì=Þé ÞôÞó]ßëMÝcÔ P_0Kjbó×¢`aÊ‹0¦¤­ü ø°€²M€>?§W°tÌ ¬ÿ ¬÷#@€€>@I=p!8‰$ ÈÐ ŸP ž ‹ð ”  ç Mx…‡¨ˆ¸ãIè„3è‡ÄãC·DNˆ‰ˆOˆäGžä8…KhˆDô„?>ˆuåR¾ƒ…xäXˆ†LÞäuÈãZŽ…\XæcžŒaNˆgåfþåoþæ[Þã{h†K.æm†p؆r8å|nˆÄ ÀPº8òGÄ9Éÿì‰Ó9¯×H@þ3I•t€D€ ˜I.:à€ße'Q³ƒP>› o@­ôJmU ²D^2­C0·;» Ä„LÅ”MÅÔDPNºŽëå”M¼—ÆôLòdL¸¾ëBõëɾìÆÎì·îìÍnL8´ëÑžLËÈëÒ®ìðìÙÎYÚ~ìÐîëBuëÛ^NÑn„ÒžîÁ>îß>îÈNíïïàþîä®ëÈäŒàÎìïžïûŽBý¾íÿŽìÂ>ìÉÄïÜÎíåÎYÓîí ŸððÔÎïôÎîÂ~Nö®ëÜÞðÊ®ïíðÀ.’öNíÅþNp—Ú„l,HœØÐ‡„H2@P1 ŠÿôH1,0º šPLøBÌp °À)EK I_âꦀ0½$´¤=° ³ ôà žT×XZYoò£µõ¡åõs ö¤å Æxõ\Mœ€l{¯çO Š0š{€Û µt ƒÀ l0 Ø•cH yPÞÐÐD‹ y × :¶¨ ´8%aŽpO,· öš¿ùœßùž?’v@ jϲ§Ì,€7p8€¼—P˜ n° Ê QÁPQduûk1ó¬ ›€u¡¤ð Yá ¤à ì þ€R*eK,E @IÆð Ô¯£– ž‘S„à-”ÿÅ–P$³ùŸ?þä_þæþéÔ ¢à {õóÿ` Ò@ í¨“f5=™ûkµVµoÖ®åbµÉ )„¯¢Ù{¶Ë+rþö™+V±˜2eÇ–aÚcïßG{˜aújP%B„Z È¥Ë>–¢EÓõÀMœ9uîäÙÓçO A…%ZÔèQ¤I•.eÚÔéS¨Q¥N¥ZU*5j¶rAó —¹{ÆM 6Íl0´iÓZ£&&Ï„³VmØ]¼w­-Û´‹Õ+ƒ¯H)üÍá.rä±+F #-Z¦"yùñÉX†*1*$S#>/ûꃨOR3mZeÝÚõkرeϦ]ÛöÿmÜ8¿€¦Íï:ÁçÜ!~gNžãÈ•Ïa~œyžÒˆ8qzõJ—®hдÓyÖÝž=hò 2M>úè—€øbIˆ¥I¢ä‹åÊ$SùAÂôLû3Ê*ð#¾û®»göHp¤ãÁå C å@ãB Ù@CC6:ì0 6ÒqDK4ñDSTqE[tñEc”qFk´ñFsÔqG{ôñG“K.âœCÎH#ó€®´Gšäd°]vÉï¬ MN+ï<ÓÒs„FIi’J0ùÇEê³/¿ü”©%©´r@ <Át0Â+¤à 7äÐÃ4ôPDUÿtQFuôQH#•QIJRÉäNcòNšDD=1í°c’Af‘“NÊåÒÊ#oŽ.ÕÓDŽgô0dF&‰å™Få“5Ù¼†–cnÁäAh¸Cõ£®höŠ3ìî‰+ª½"€=é Z,º­Ð ;”Ð0×'X¬â\#¶Xq xã•7Þ2Dd×Iu¼—FvÓÍ÷_IÍ_€ 6XÅJ•[’<'§{Ä´8"f„‘÷Þ›äâù!…þˆ+–E*ÑãŸ=Bù¤>6ós¬–aJÑng^Q¥¢ #€f‚!†ž9h$²uÂ\ ­ø\Çõ°Ü XÿbC×= 4T¬šé£Ïu"İåñàË>F°¯^m¸S$8¹W¬[_ï.Qïù–;nÀE$áG,é”ä9xûâ ;YÉñ”àƒcù@e™¢Ü¥çÚœVaýôÓ—©£‘=>úã^%E”Sj62Œ†1Ùç¬ l$ |†‰°˜b¯`·ˆg&´0Ãp¥.Ôn ­6;kv¯èZnv¡Hb{Âl6äÐsúÀY ü·]üz òËwn‚¶wÄøé×wßùó¯?~ÏÝ›ný¹n¤Äw†3D ‡8„KØÃȹg“£}\!ŠXЄ&T¢Ó3¢¡ÿ p\¯"ÝK hF˜éL•ÙÃ%<Ñ&S`DÅ8Æ0À‘,žéî#LЦp vEy Š»†G¡Q,ík犡È&¶4@ æªÝÄF¾2Lñ^Ñ3׼Ʈ=,jiP¢¹ÖÖ¯-h±jM0‰Êx¯ U‘~bKcØØh¢*ôp‹ÑÏöÆ-ÊqŽæb_ú7½Õ-‘{óÛ‹i¿ÿ3j$ü&yÈõ!€ðTzÒS@<ŽîyO®à3úÜ®ÀÅL®“ÝùgîàF%J3BO:‚†HÝ™â‰[ â—˜] c8Ê ãÍ ÃÎ8H'{´í;À …·=ÿ/ArPbô–P„ VajK ›Ðp´B’ñ^JpîåEìK U g=ùFò‘sìꈖք#@A Qpç¹”p6}êñ\ýì#Ø‚æ„%È3DøœhÐ:Ђšë ƒlB:1 ¸EæM~’´b#™7‘Z²¤&¥šÿø‡/ø±ô£‰ÒRiÐãI@°'Lf°3þ` ÎÇrjúÄ-28“™ÐaNö C4¶¡Tð!V¥s\%1ˆLÄ¢— aF)lñU"³†9sæ|¦Ç,-z+ Â¹–ðŒ$‘xE<ô #dïzìBÂt×sVÍ f£«¹¨°M9HákÖû¢z='p‘ÿÛ‚èÐÖªIálê[½'šË –Å,Ð4›†ÂሕPÙsMDhèìgÏuÊÍ£3=}ûÛßÖ¸Ãõmÿˆ \ÞFÊ5%MzÖã8C¼Ì— ù*-w ûàÇ­DêL$ jÃâ Ä-KÇFTB¡C/Sá O|µ˜2´È0Ša[0S;3yæ€ÀÆj¡ÿxBõ2:D9Ü+ybƒÐ)(v-Î[ŸÙöÆ­«‡ŒgЬõá+ÈöŸæ’mI;j!mákæ‘èjM°1(NƒŠ£gN6Ü Ã$šÚˆ [;4ˆFàp… ™\$L¦Iÿf2ŠXqšæ:½†à•**1ŠQ\5¯«œå²k³[ü¡»Ùáœe¢! w¼cŽ(¡ã WJQ,BÁÄ)>Á&e8#õ-Æ]t¶_hdU<ô-ì±ÌϯrhÃå`·¢8Âí³W¤s ¶§AÃ]¼Šî5ap]¨¡U+1Ø{6W- ]K­ à׸VMÆ‚%_ª¶ê•AG5Ð&ÛêWï!Ö@+²¥›|ld'ûºxL>J]òf`CÌèó:PÜBM®¨YdBTì¹2þ‰F:òŽ[ ‚bªX|*÷‰;×,Ï{æs —1Šf:ÐÐŒæ—À=Ø¡Elÿ[o¼<6tSx’6vJŎÔRam›6<= 6Ÿè¥öf­Á†ãïB—qÇQýñ ¥Ö =GMâKRäh ù^™¶[eç\ç;w4H‘œ²'‚…è /ßGv´¨Å)LE“psåJÌ>®áˆÑ<.rLºÍ®1odöYìÃh8º³3Õ È#>WþŒDß–xŠ;}¸¬õ‹ÒVÔ-ø”cÇrøâ±å5%KYBzüÆ)¿—´ÈÅY'þäÑ[u‡´x ‰Óð„O-º¿5›÷½ð<'}éM?£@躘ܓ«ø„⣈…t#ñe›ÅPÏGÕÿªTZùˆÀŒ8§ƒ]˜ìÀÎñ fx‡˜o`„œŠ‹ªlÃÙÇ8%¼†oP~ð€¸ ¸€ (fŠì+-<¿Ò<™;?¡öêBa°é ù“ôᬠÁšÿÙŸ2¼ ™ÑcC:L ™Còá,5‘ð‰Nó,=iCÏŠ3¤­>‘?lC+Ä1ì“CÔóÄ8tÄ=¤­6=ÜDN̹fÚ…Pz.×C ø3yIP„=H…ÔaTX:Ú‰Ák`…h°Áf¸´ h…w耇kX!¤„ùÐ6û€7[0…kÈqÐphô€¸€¸k´Fê‹ ,ÌBßA/Ôâá“0#¨”©ÑDóI2tÌ‘u,‘vìDxŒGÓóh8Çi<%Jøƒ­º \0…´Èг=;†VBƒœY¸Yxp€ lŠÿ[8…eq  øHI0‘“íS ÝS? TATB-Ô?õNCMÔCUTFmTîDTGTöƒHøI†€†Qh†A0¥ º¶úP%yƒJZè3i0‡yØ€ØØT € ÀRmˆ…?è ¡nÈ€!‚ÖÔ Ðàa݈bµ ÎeYÖÊ€X`h]€˜V¨ViVkUÎl•ÖnÕÖoe€õÖÙVo¥Ö8WuåVs×meWwWï<×Y×s×vmW{ÝÖ×v­ x…Özu×w½×oå×~Í×}µÖøT×5Xx¥×teׄ%Øÿ}UW •V€e׋Xmý×À×lÕW…E׃ÅXXlåX’µX|uY’]Xà7ðÉ3ÁTtQHRTº6ûà6›±…Zp oÀ‡xVa}` Ö€pU †‚Ø]èŽYȆ\ÕÕÕ ‚ø Û°å`VãÔƒT¸?€M`fx†_HÎhVM׺í×k­Œh½ÅÛ¿ܺíκÍÛ‰Ý[ÃÅ[½EWÅMWHÜÆÕÛ¿-Üh%ÜÂMXÄÕX½Ý\ÇåÛÇíÛÏí×Çe\ÎÜÌ•\h%WÀåÛÉEÜÏm]Öå[Ò]ÓµÜË=ÜÒmÜÉ5Y“ÝÎ]]ÿ¿¥\Û]Õ…]Ý \ÕÜßõ]àå\ã-]áMYoÍ\וÜÐ^äÝß…\ÚÅ[ke_†žd¯L=q¸…%õÔ5I†d ‡€€ ¨ V¥å`ýUÈ_(S@Ú¨­f…Áðà (8Ó²$VÞfõÌHHH„Z¸àÈX%û¨RÊ…\ÏÅ^ç­^â-Üáí^É5\ê%^ëíÜÛeaÓ\éUá¦aí-aß…aÆÞ6Þnáva~áÓâ–á fÝb%Îá!>by¥\ b'vâÆa!¶âNa$&bêµâ/6bfbÁáÂ]>’GÿË(_}h ЇzЇ øH¶TͲ¬c­_±Ë ‚ýåÕ!‚]åÕð¬’î´ï€àÊ`=0ƒ2 <„@†c¸ˆ<“û*C˜`HáE\W'€VeÝÕÛSŽ^q}áS®bvÞ~e~eW®Ü®Ü.áWfeâeå[Þb!ÖåtÅeTÆÛ`NábÞåXvågÖaeFf,æåÌmfÁ=aS&aVf¾çdöfa†eYîægžæX^gçærNåa.âu.g_6aiç[ba6ft6ârf^NÈÛˆ hh†s€XK·ÜM(h0Ëÿî±õZ@ÞßA&d!dˆ¸€'ðîh**©’ï =è‚ N†c„V°û²ˆŠ!Ç0ù2mË6ùÈV˜ÐSƉȉ¢&æ£NêÕPê£ê›œW¤nja囨jª^j¸ê­æêÕpêî¼ ©nj£® ¢þj¥æj¯Öê³>k­þê±Þê®nkµ^k›Èj¯¦k¤®ë¼k¨k»Fk³Æë´.j¼&f«ì§vj³NlÇ&ëÆFì¶NëÄnìî죖ê°vk¶®ë¹–ë»lЦkËžk±fð‚¶ž¡„–h†æMÝ´ã‰6VcݱýÚèÿ(V8 €äâ¼Tï ùˆ=Hjh¼H&š–n›VcÊO¦½˜Uˆc(R¶¿^í ï£ kòNo 0oÛ¨jž`oõ† øŽožßÔ¦ïØºÙKèØV`ÚÖ͸mb7MGfVì#Q;L†rèéži±›îÇ€ NFWж[‹F˜…Z†@ÍŽùÆïÍVqoŠïoq£ˆqú^0—ñÖØœ®H ¨ØMÝ”(òÛp0n'lÚªem>¨†Ѐv°/+—nê~ d08EÐ6ÿpJH Mp%]…ÿ¸ñ 6os7s8s9oó5Ÿs;¿s<Ïs6/€Ђ5¯s=tAtB/tC't@?tEôD_tGt9otHŸtøsow ™ð:@ hˆf!7ò‰žPðC €m‡kj¨´¨†V°ƒ;P½ñ NÐ…ïØ…ñH†~è‡{†±ÃrN>SP„qû.{@ºí~”pœF¨ûêL¯vk¿vlÏvmßvØp·OghÀ¸(òPrˉH@†k¬xukéy—†yüÊ…M M0œ‡A„]„0„uÐ0‡+·ðŒXéz†HpJxÿYÍ\s•`‰õ(óiçvŽïxÿxùø^Kà g(˜÷ n=P7X†b†jˆw²@ k†y¿÷ž× {?†U0M@£*ÙRp†lȉHx‹ˆÁ[èæ>O(ªL…XÀE„ zvöx K¸Ášy³?{´O{µ_ûœhBØ…ÒŒ–â ‡@XƒVÀŠj˜†½O‹œ×yžŸ÷`°wzÇw½°†S ˆª=z,„gp†\‡ ˜MŽúÇ€pè¥C›“Ù[°wOB„M ‰Y v¶?}ÔO}Õ_}Ùh…O0„þútðX¨†G ²ø{µØyÿÁßy|—|/ü»¨†kXV¨ÚM R¸Ú†xdy†M–¡c¸„ž¡Œ=ˆ„P0 ­Ç=ˆ…#uOÒ”\¯EÓg}ôOõ_ölj縉Q¸†vè‡q°y¿/ µàyžˆiÕ¼eC–­X5käYS8ì¡B\¬^±Ú´éÆ]ÐþAs¶ËÙ¼}ó¤S¦Ì”)Z¶n!‹¥ç̘0÷ìeèÏ@ŽñDÔÇçÏMÑfý`ô(Ò¤J—2mêô)Ô¨R§R­jõ*Ö¬Z·ríêõ+ذbÇ’ KÚ±UÑìý›um¿ ð«lÚݺւY£æÍ˜Ì™ÄZ“öð°µk¹(HNĈQ׳gw!“']1Z'MÙ²U*²žQlÿ=û“i’FäüCsˆÏ>€ÑîÓÇ’®hEËòîíû7ðà‡/nü8ò£;.øðòY“#÷útéÌKçnöû-ðàËŽ_>ýûçí›'O¾ûw~UÝtrׂÖ)8`d 6È`‚HÇ4ÐH2H"ƒXt‘FAò$‘@" ”È?¢”âŠH"™ÊI­PÂJA«D£4 Í4*µL 7$‚‘F™èQ)!µJ',Ó K×h£Ž„€ü˜°P464Í?]êÿ¦PBrf3–üŒR»8õTwÌqÇµì‚ ž§gÑrG.µtEK`· P‹ ƒÞQ‡-¶ ª¢µØ矌JꨤuÄ9Y€Úi'`¥‚ê&™€’ú_³Tš _Û}UG-¬ª)YŸ’: ¬µðµj«Á½*h«„~EY-nà‰ç.“¶zËv5­Ð}z¬¬RÆ(¦J ¬Y¤ÞêW`à².¹Ô¹êi¡.®vݲVj€å-Çß¼ýñwžñâ«o¾ûúÛo¿êÕkoÀâÌ/€Ý©»°´ §ëé­ÝN+1ÅØYìíÄgñ4x¬a ü Ar$ •Ih[ÛѦ^ÄUsCWÞ"¶0†aLsÛ€¾•¼‡åÎp>œ\pØe1U1î‡fAËU…æ[³Cb¡ˆ(Üm±‹Žû"o+ú*]¡3#Äž#® J§\ßBc¸xØÄä1p£;¢‡8¯=Æ‹~ì# ÿ(H@‚gŽ ‹}%ÄÏ]QŽvÄ£Ã4V1ŒMrc–¬d¡º4TX¤CÙˆ‘JñW@‚eMSŒXd¿“¤$¯P4daþ©¢ÿgÓȉ,ÊÔ`C ‚كܠÄ\2[Ð0ÓÎtA=‚P3Ö¼f.”™Ðh›c Š ÕÖŒ_C†»€«r1'º•;™S#ŸçªyNw‰QÜ<•÷:ë”NØãã@G–ñ@¯‹Ýôàé*?14‡5ƒ :!…Šo :hêªF„b4oÓÓ¡=w×CÙ”£û¼'J9ZOomçt±Óè_ÇÑÇ}.£Š\]uBºîÙn{ßóiO'¤IV b‚(Mô$„¯XÒ2`´Œù±r%Õ¸Æ<¤± UˆB©P…)d¡BVèÒ½,p Vµ³˜ÊÿlÁ àºLfÒõ™„ ^P#ˆ`Ld Ó4,ñZ,`X€ «ØÅ¶°‰Mlc›ØÅ*6²e3ëXÍRv²ˆí¬d9›ÙÈ*ö²žÍìdO+ÚÕ²–±…%íh[ûYÙ²Vµ¬…­h/K[Úâv·«Õ­o5ÛÛ;6¸Áî€k\Ñ"7¶ÁM@ÆèÑÀ¡Ë\Ÿ ^$))Éíj·»—”ÌL X$ÐC…(Åy•Ê4T‚BfUYÉpÐ[23°áUG¤Âÿë7"à"­k]kp0Ìa ó-ÈRð‚ŒÀ@ó+†Ö†:,€þ°‡C â‹¸Ä fÀÿ=LÌ€wø²(Vñˆa,ãËøÃ…U±‹c¬ãóxÇ;ñŠ{,d9ÈDŽq‘s\ä#³xÉBv±“™|â“XÊQî±’­¬å+3ÙÈ´@@d¦H(1v®s~ª"™¿Å ”ŠiF›¥Xf:ÄùÍfv3œïÌæðB$Cª‘>„¤$…ä©"éUÄkœcþPð VÀèCøÅ(R‘ LÈLÒØ†€‘@¡Ô¥ª<̼ ¯Îð ýú9È ©õ­k­ë]óº×PƵ_{Í€\ »ØÆæõ¯WŒác3»ÙÀfö˜x½lg[GÔÖu²•lj[Ûׯ¶€ÿÝío {ÜäÖµ¹Á-ÝäV@«WÆ)º1Ši,ÔóI]ëNKß>léoXhCJ ´(×[h¹¢Ëð:6`T£ÚÔ§& .`‚y`CÓœ`PTÁ  ¡äEø%ÊM- a%xuÙ¾Ù Ghb{„!,!Т `€Ï}Π7`èE“Б®£ #è ¸ìωnô£3ÝèS_:Õ±~t«k]ëA‡ºÔÿQõª‹êYWúÕ±>tµ7ÝëfŸºÓÓÎõ²¯]îIŸ;ÝÙ^ö¯ Àéf;Û·žôÁ×]ðwwûÓûö±ðvߺØýjxÈïww:ØÇ^ùÿ½7þìuçúäÛîu 3 µ]îsQÈeõ‚£žè éúØ7'LÒ x8Æ!Ê¥=¢÷  9à‘ à ä¸Å0„“/­i͸š¡ N`LÓ44ÀØ@­ª‚zÀœ!€°ÄÁ¤V´Â®x…SI‘>Iàè~õß øý=ódG¼þ1çEÞÞíÜõŸâiÞß åñŸþ è1àýEàâI ^`‚^Úù]âM`Ó-Þ~  ò]Ü > f`ÞUž 2 "à *`æß ‚ Â] úÌ¿)QÅØ vé‘5Nj׽ܡ CÜÿž(„C?¬ÄC<È€P3倃S‚õ€ñU\©ù’X%ŽZà€4pš4èÄ-Řˆ€ ˜€«éÈ™C/ìA'!C2ÃI¼W‹À)$Ü&È.$ÀÓ5"PÝ#@á=â$$®à#6âÓA]$>%ž j ØQ" F¢Ñeb&~b$ö]'ž¢Ï]âà]¢%Îâ(ê_*Ž"$º¢'â",Ê¢#6â'Ò¢ ’¢& £ÙÝ¢&£#²¢#ã N¢çá"4N#..#*B"6Ò¢1^ãþõ¢0ê¢3Æâ+ª"'£4žc1–"(Ââ:¶ã1þâ#&À=Ö£=Þÿ#>æ£>î#?ö£?þ#6„  h]±À[ýÀ÷­ÜÊmbÁÉ™!E&AŸ |€>¼¡BL+ÜҚ͘œ‰(ü2„'ø!K¨DJ¬’‹ˆü!Iï…‚)Ã0>2„=ê¤,ò¤Oþ=þ$OÞ£ä¤_ÕãQ ¥N¥R¥Ž åPÚcQî$PåS:%Tbå%:åOf%W~å=މ,†eUn%W.eY ¥Wö¤V‚¥TZåUö$P2å\V%Zš¥Y>eTÖãTže[Ò%UÒeYneWæåU¦VÆ%_¦]¦ec:f]âeR:¦_²å=2@-$@n&gv¦gúcŽÌÿÄV€A²€ äjæ@ üÀÜÀ‚Ÿò‰á€_üÀè ìÕú•P„ä É¡ËPÂ0üa ¶ÒJgq â2 ‹ÀdLîž‘ +ŒÂ 0âg^'Qb§v^g_zæ^n'x†§xþcwŽgge>–§y®§vª'{²gÈ#-¼'}²çÿ„W8T@¤™fì€îk2¤ªÁ€ Œ€–¬• p~3Ã7 ƒq&g NhKž„+”DI€ÂsB' ]‚ϨÂ'àd}ê£{–h{¢¨Š®è{ž(‹n¦‹¾¨ŠÆ¨Œ$ À À&Ö(î£)¨Ð4ƒ~Jjú§m²æ 0ä¨ÿù!(o¦Mh"h4˜‚XÃ=´Ã:TrFèq b+¸‚2  Œ%GxR!Ä5ðÌþ@Ì€Ì)Ö©Þ)žæ)Ê©žö©Ÿþ) Îé ði *¢&ª¢.*£2ª¡6*¤ê£F*¥VjžNª¥fªÈ©ÔXg†ê>JÂ}JC0p@\± ü§‘²& ÄÀnš>XB8 Ã5ƒ5äª5 g$äøA $‚°fÈEƒ*«1<À¬8¬dqR¨ &(ŒÂ7mS4hˆ¤©F\Ä&ø—›¦¨†«¸Ž+¹–«¹ž+º¦«ºÖ£ üh˜¤ƒHš]«ÿ(†E 0ƒ3œ$®Ã0XC1,ÀC6l)P'Ä‚$d‚°&‚,D4œÂ)Ä‚;<>ˆƒq²dKz24Ð8C{¹BïU‚3„‚ˆt#hH êAȸ®+ÌÆ¬ÌÎ,ÍÖ¬ÍÞ¬?º©rÉ<€iÞÕ¨¬Î*Ã1ƒ¿&­®l®âjÀ>mÁì1 &T­$pÖr‚)Ü’,H,2D¬C6¬$KÆÈ+ LpŠì#„*T‚(øReÄEhH†H‚ÏðÌËâ¬Þî-ßö­ßþ-àÖ£',‚X• Ž@ ăBÒþ«®>.ÀF®5ìÓlÔVC6TÃ3ôWÕbBÖâÿÌ?LƒÄÆ‚<@€;4kÙâ+lŠˆä7Y‚&`ÄÜÒí T„·ºlàæ®îî.ïö®ï†g1¸"Ü’_1ƒ/ü+®B®ò6-ó¬óRn5`n5Ã1Ä‚)˜Bçb‚Ä>l4t­)(>ìÃ9dC….ƒ'°î…¹Œ3h‚& ‚&T‚!@Ã!Bù| †$B B&ø îþ®ÿþ/°Ól1B).C‚6˜Ã˜Ãò*oòæê12-ÀRîØìôjîõb¯öjïÖ†.&˜B*°Ã>È8Ø|}))´­ÇfØ™X"Â!ØoÃæAÃâ +äí÷°ÿ0ñgú«' ÄB¨Â5¬WD€?ðãâj6ýŽÔjiæNï5hmypÕ‚œ4t­,(à Ÿƒ 2IÈþPX‚%È 8B!D#‚ÇZÂ&Ð-ã/þê/ð°÷±ÿ1 ûn@;ñ2"'²"/o@;‹±#1óð"c± ñ¿ñ#²çq"ÿp ±$C² §1W²rÓp#± o,÷Š,Ï2-€Dà².ç2/ï²/÷20ÿ²031såÎËU‚"B)e<¸BV&@  0•àõK&äË<¸‚ 8ç`a|ŒôhÃVƒS 6lño©©ÿ–Y+ØC€T@p€¥d€`@ ´@t´AôA/tB7´B34D#tDO´O´D[4FK´FOôBtF´C ôG{tH“tG‹´Io4J/tE'´B«tJÇôIƒ4D“tK›tGÓ4Lï4FÇ´K{ôKs´@ßtPó´QûôHÏtI‹44l@-Gu¯p€ô²13V_µVgu/Óï¼(ó#1hž rVs¬5À?PwÏ2X€¤¸Š¯8õªx‹§xõÂø?¸ø‹·xŒËx߸èøŠswô¸ŒÓ8ÏøŽ¹[ÿo‘y’ùŒßøõâxç89Ž39“'ùW¹–/9”ypG¹’縔;ù•9–Wù‹¯ø—ƒ¹“9•#y—#ù“ë8œ¹•[ù”+q°yÇøž»yŸWï;Ôy“§9¡§ù”§¸PÀzÓ2T€0Ë·¤Ï÷¤ërQÆ ä7# ZÑ4[Qÿ¡¬µƒ÷Ë_Å%LWVA¢ÀÄÅaÀ‘¥]…/˜ÑW¨œ=¬a-C=é$mF"ñÃ?\€T3,;²Ã2ö&ûPo³ÿC²;»³+;´O;µ_»µ3;T€¶[{¶?;µO»¸C;¸;¸_û¹§{´›ûºû·—;¹Ãÿ{»Ÿ»´Çû»»3û²·»·W{õº»¿|º¿{¾ë»½<½¼¼#;»›»Ã#|Âk{,sû¼¼Â£ûÂ3üÅ×»Æc¼Äo4º,_€.»wÉS:ÊW:¥·¨\‚~3‚!,‘Œ¦ÕHsQÅ :o3[<Àpf°‚ðkί'â…<ä x®3ž®WC4¤åÈ,ÆÅÔÃ?XÀz3Àp×w½×So׃=Øs€ØÿÙ›ýÙ§=×—ý×£½×¯½Û{½¿=ÜÓýØß}õÖ½Ú³}Û‡=Ú}ßû=Üǽàë=Þ«=âïýß>à¾Ü€Ý»=ßó}Ú[¯à>å7>×Ïÿ}ä;>Þ>Ý+¾á/~â#>è;~×s~à›~Üg¾Ùƒ¾ë'¾æ‡~×_@È‹¼¥|0›¼Ê÷~Ê3[-E#¼<#T‚Á®Y‘^8ŸÝuvz˜`BUàCx€s½©GÑ ìO +l>`hA†3LQdÃma“?,€?¯78TÓ2ö®ÊõõZÊýç¿þÄ?þHÐà@„6,ÐPaAˆ J¤ÈÐbƃ/FĨ‘¡G‰ ZD(räÇ‹*Wn IrâCˆMÒ<ÙQãÉš.JäQfI’;= ÝyðgÊŽ79Þt râÀ -—2=ªS`RŽDþÓj2ÿ*€ |(„ªBØ®u˶­Z¹oéε[ï]½y×z ïï%HŒ3’±Ä{ÇcìxÉPF… fÍT¨Ü“|@‡*œ¡°ŠgzB‚É’3s&ÍyB¼“£hþ¢ì—3gÕtçÎí,wµe¬XåcuÉxrV*˜ ;¡ÁçÓ©W·uêu¡Ú¹w÷þ<öðãQ†tH}úêÙÕ·¯~¡Á„êÒÆ•7ï^ý|÷÷çï7Å )Œ°x&øëÀÇk,6*û |”€b3̨a2 4ƒ"¶Ó&`E‚%“ÂB×0[£Ë¢hM…g|Ó7àvëÍ™fž!î’â¬)Žÿ2ðN à'÷Œ<ïÈ$•\’:ö˜üÎÉ'¥ +Ê)É。 øÑ¬ *Ð ®·ð³Ë¿2ù;³¿¿S„@F;0@Ä:|ì±Ù,«l†Ö6£B‡!-³/‰gÐ ˜ $Jl -ð©lÅÌZ Žg|QÆ_ª†Çyô1<.0”L=ÕTU]•ÕV]]uWeeµ€Ym½×\uÕ5Ö]}ýµ×_…Ö×`‰=W  €Ë†8È`T¸Às­1«E[3µ]KÍx¡¤Í?â—1;œÂÊ^ГÑpƒ4(4ÐÓø¬×^£B |d˜Âµ1ˆc%šàh4XÿÆj°é”G~šãnh)`.,¾ãŒ5Þ˜ãŽ=æX­EÞ8ä‘M>å”UF¹ä•]^¹å—ežYå˜i¾Ùdýìó¾žÅäùçm…Î6/ Ôœ¤MFì\9[бC+›š] ¯@ÁB3Í´A¹V@ÝKœ€98ÇKÚ™ñRK_<†Çä\A€:0¨@‚j­šo¢Ë컿½ýp ÿ»ðÄý\ñÆGÓñÈšq½-sï%ÜhÀk󿃚tã¹÷Î+*413y;d%¶ãê%Ô2Fet ÓŒ»$ƒÃÔ`­ÉñŸf!òRsÊß|ræ1_z磟^ÿúê©¿>pìµ×Ögi!ïþy2+·¾L5)X$éE0ºCö{S5ËòÜSO­Ý:ö dEžÊ®`uPÈ]Úx£ÏR3?P¤lÀš_÷¶WÁûXðr$Ÿ•·AÀƒ_·‡¹ÌñÇ>ÔÒ µÕ9 $0†@Ðû ä´Å FZ»âõØ5¦kõ‚+€€dM_™¡Žâ±;kÀŠ £Q3ŽÃŠ…y[áÃÇÂå‰Ðƒ^Ü\ Ÿ8 †àCãëBÆ îŒÙ[cšCBÀpž¨!b(0=üå7dŒƒjÇC Å&5üág·‰ ÑDKœüP>NSœt¸ ŠÜÍ4È ¯làS(´~îSŸv ;iJ ¡Ò©^*\)K(‘Rj¥^I´Á­¼ “ÔPc¢€W¤ –PÒ¼ 0DØâš-¼`˜Ã¬fÛà‡Ím£™hXM$àÍWü¤ŠÍRxO£®³GE­çÿRZI)µ©L•jT©:UšÉ.vE¨®fgN›ô“¸ûçîhGPÚ!4xq9&€ÄRˆv–š"ºÂxÝêe0?šcb Rôk¹TP!<¯N‡àÁ ®÷‚ La ± E ¬?¨cWT†Ã}~VW–´jU )Úr޵÷4mëH›Z×¶¶’ †ŠÉ\ÑH¬_½$!a¨Û€öè†x´aUÊ³à‰¢£p‚ðÄ@ZR’«+Kƒ´€Ð(hBÚÝ ¤ÆôëÔ`J%< ¢‰×I_Ts 0‡¿è;rÈíPé©g ,ÖÚv+úìêYb¶[àžÁ¯U0"ÿÛÏ?ØÀv­oMxÚÐö·«2£°( úɰš²Ã¸òP¡Ðà".€‚P(¸àЍ@d-à( oµö ˜Ðx´»Þ ox…y¯¨€,mM `°¤À ²RÁìAY+φ—í Aê¨ÃÛBE·ÌÕYìx# 5HNð™!œT ©ù¿l–s›ç,P€Æ.™|Ý8s•[sÖ°X8’p \;‚V% ;ò ãÌèBú͈ޞ| çNÓ>S‰ Z«‡•ÔöIuMÀ¿œðÊ·–,q©†ÜÚb °dˆ…‚ÏÅ£–øxèaÉ ÿZ¸µ×Rriç:WöˆÙ^n´¢lg¹ÈÐv𢱠íg_ÛÚ^Æ6”Áœmà¹ÒpæözíLgl•;ÐÌ~4£=m<;9½áF÷¼Ï]os›{ÚË&·½ÓMmëàŽ¦7¾y©Þ!WyÑèIm¦¹’>´¶˜‰~–£ ?¢ôZnK\ÛᎠŧڄ>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}}}~~~€€€‚‚‚ƒƒƒ„„„………†††‡‡‡ˆˆˆ‰‰‰ŠŠŠ‹‹‹ŒŒŒŽŽŽ‘‘‘’’’“““”””•••–––———˜˜˜™™™ššš›››œœœžžžŸŸŸ   ¡¡¡¢¢¢£££¤¤¤¥¥¥¦¦¦§§§¨¨¨©©©ªªª«««¬¬¬­­­®®®¯¯¯°°°±±±²²²³³³´´´µµµ¶¶¶···¸¸¸¹¹¹ººº»»»¼¼¼½½½¾¾¾¿¿¿ÀÀÀÁÁÁÂÂÂÃÃÃÄÄÄÅÅÅÆÆÆÇÇÇÈÈÈÉÉÉÊÊÊËËËÌÌÌÍÍÍÎÎÎÏÏÏÐÐÐÑÑÑÒÒÒÓÓÓÔÔÔÕÕÕÖÖÖ×××ØØØÙÙÙÚÚÚÛÛÛÜÜÜÝÝÝÞÞÞßßßàààáááâââãããäääåååæææçççèèèéééêêêëëëìììíííîîîïïïðððñññòòòóóóôôôõõõööö÷÷÷øøøùùùúúúûûûüüüýýýþþþÿÿÿ,Hþÿ H° Áƒ*\Ȱ ¾sÎrµBe*“Å‹3jÜÈѪV¹œÓ×ð`¾k°›à±!(Òe’:ŸÐ¨41¹˜$H¢ íz¿³B‚‘”8X—ùs‚w§×ÙÎ!° '  Š‹ŒŽ‘’ +ƒ…‡‰“ ¡¢“•—™(KMk«¬NTV#hj]@4@µ7sxlp¸”H7 E‹'ôñó°nD‚*dQî\ºyˆ+žWïÞ¸Ç#³;libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/images/input_vrm_gen_get.gif0000644000175000017500000000105310404045222031532 0ustar arnaudarnaud00000000000000GIF89a;ÕÿÿÿÿýýþÑÑÑÐÐÐÎÎÎÍÍÍøÌÌÌËËËÊÊÊÉÉúÉÉÉÈÈùÆÆÆÄÄÄÃÃò¹¹â···®®®«««ªªª§§Ç¥¥Â¥¥¥   ™™™˜˜˜‘‘‘ŽŽ£ŒŒŒ……”}}Œ{{{zzzuuusssnnwfffeeeaacaaa[[]ZZ_YY[YYYTTTRRRLLQFFJEEI@@@444333!ù,;@ÿ@ƒp(T<:¥,&k:ŸÐ¨´ [•:q;¤i‡°x|°ÙÂæ³}.·Éµ`n#44.׈T2§€TVXZzD *$dcikb’p5cŽ$* ‡‰‹“l‘£on5ub™›‡(' ¹º»¼½¾¹ '(¯,#Ž¢§¤n•bq—«#,‡ÌÎÐѧÕl“q˜Ûݯ±³µ·¿òóºÁÃÅÇÉÊB -)"8` @° ÁƒÄÀADŠ ì3`áEˆ x®c¸,˜â……W\\h®š)2äÂÄÉ&¦ÁÍðà cLHI@_Ê @”æfèäéóÍšHAÍÉA7©R=)W¶tªÆi9TÒ±‰óUÅ‹7z\+ ¤H’&'öûp Â»x6|QO;libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/images/struts-power.gif0000644000175000017500000000340610404045214030522 0ustar arnaudarnaud00000000000000GIF89a_%çÿÿÿÿÿÌÿÿ™ÿÿfÿÿ3ÿÿÿÌÿÿÌÌÿÌ™ÿÌfÿÌ3ÿÌÿ™ÿÿ™Ìÿ™™ÿ™fÿ™3ÿ™ÿfÿÿfÌÿf™ÿffÿf3ÿfÿ3ÿÿ3Ìÿ3™ÿ3fÿ33ÿ3ÿÿÿÌÿ™ÿfÿ3ÿÌÿÿÌÿÌÌÿ™ÌÿfÌÿ3ÌÿÌÌÿÌÌÌÌÌ™ÌÌfÌÌ3ÌÌÌ™ÿÌ™ÌÌ™™Ì™fÌ™3Ì™ÌfÿÌfÌÌf™ÌffÌf3ÌfÌ3ÿÌ3ÌÌ3™Ì3fÌ33Ì3ÌÿÌÌÌ™ÌfÌ3Ì™ÿÿ™ÿÌ™ÿ™™ÿf™ÿ3™ÿ™Ìÿ™Ì̙̙™Ìf™Ì3™Ì™™ÿ™™Ì™™™™™f™™3™™™fÿ™fÌ™f™™ff™f3™f™3ÿ™3Ì™3™™3f™33™3™ÿ™Ì™™™f™3™fÿÿfÿÌfÿ™fÿffÿ3fÿfÌÿfÌÌfÌ™fÌffÌ3fÌf™ÿf™Ìf™™f™ff™3f™ffÿffÌff™fffff3fff3ÿf3Ìf3™f3ff33f3fÿfÌf™fff3f3ÿÿ3ÿÌ3ÿ™3ÿf3ÿ33ÿ3Ìÿ3ÌÌ3Ì™3Ìf3Ì33Ì3™ÿ3™Ì3™™3™f3™33™3fÿ3fÌ3f™3ff3f33f33ÿ33Ì33™33f333333ÿ3Ì3™3f333ÿÿÿÌÿ™ÿfÿ3ÿÌÿÌÌÌ™ÌfÌ3Ì™ÿ™Ì™™™f™3™fÿfÌf™fff3f3ÿ3Ì3™3f333ÿÌ™f3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!þMade with GIMP,_%þH° Áƒ*\Ȱ¡Ã‡#"|hÅÁzªH\ñ¤ GCn|Fò‰ÁU$I¬BŠ$©–«LŠœÉðIɃ)CÚ|fIš@V!ç3=!cÜÜiÒ€ž–Ï*¨¢ U!ÍzÀ ŸQI¤øì‰žõ $%3-J’eÊ“lÕVOVUV•:p'V’sî´xö™Àd$ÅâõšØæ*+ ¾ ü¬J ”ä× ÉU`+°’X h‚JË^~FŠñ³[ª\Ø\q}ªÔ,zgŸv ôÙz'l¦F[óVNrk2ƒ;?ëQì@뼫X±•¶i¸pUþr6i24øê?¤.ê9êðôgW •õM‚…Æ_ŠíΪ•â^A´@~%rí)ç“|ØVÙ3@G€}‡Tpp}×YaV´Â_h‰˜l* µ“x÷”S Í $àQ}ÕœX=HÖc儞a‘ð\HXßpA8ämÉ=Òn&–HWVYDàoz´%UV~udpVô•V] „‘Vm‘PÕ cêaeŽy¹iÐKAÕiçCô ù¦B=ñ„w ÑN -TÅ’p‘2 Œ&$à†•I¥X5£”fvÔhCÕ9$„=’ô¥ nª ¥ÒÄY†9¶ø^zþ¦"ZP—ÙjgQÂ+†©Î¦>ÃBžéo!PBUy¤f™•Õ‘ÅöJ`VŠ¢i{àíii¿‚·K‰ Â&Uq)”SMªÜháŠ+¤ñº:_¸¤xj½Ý…[Et€…»[òzX¯J¤&ù¯Z¢n¼ÉÄѯ#úÉ& µš “øUÆÅ0Oÿ>aQ­°…ªå«ñÆÄ­®}Wé¥Ê i°1ôëËÏ:JúÂË/»¼Y+Pj.å#Ò¬I Þ»Ûº/IÉÔ÷[Ð^i ž–;[ž~€$ 0»«8µÔiÅ+'Cn):Ë«5œ«ÙQôðܯ¥àÈPÙºv]PÙDD8Ac»(7'éw°+»Ö«àN}Pâ†Û÷àVª°wÒ™ã=5¨Eü¥æ•Sšºè”O…·#:A€wó¯)Ë^îA€·0Ô¥c*œâ½"=§ãq‡çsÌD"ÀÛ–¢þ+»ÆEk»îQùIÕ¥ÎPP­òÚ˜dG¹ËXï’1½ ~xH_Õѧ"ú«o)&ñ;ì@€ŸïÈfc\ðÀëä~ÊËU¾ô-«diyÿÑG8R?q$^áG,æ0þIbfQàwEBA;libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/invoice/0000755000175000017500000000000010423130301025512 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/invoice/editAddress.jsp0000644000175000017500000000355110404045226030501 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%-- Edit an Address object @param bean An address object to edit. @param beanName The path to add between the bean and the properties to edit. --%> <%-- Retrieve parameters from component context, and declare them as page variable --%> <%-- Add a '.' separator to the path (beanName), in order to access the property from the given bean --%> <% if( beanName == null ) beanName = ""; else if (beanName !="" ) beanName = beanName + "."; %>
    Street <%-- Declare an html input field. --%> <%-- We use the bean passed as parameter. --%> <%-- Property name is prefixed by the sub-bean name if any. --%>
    Street (con't)
    City
    Country
    Zip code
    libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/invoice/editAddress2.jsp0000644000175000017500000000357710404045212030566 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%@ taglib uri="/WEB-INF/extensions.tld" prefix="ext" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%-- Edit an Address object @param address An address object to edit. @param compName UI Component name. Use as prefix for html fields and sub-components --%> <%-- Retrieve parameters from component context, and declare them as page variable --%> <%-- Add a separator tothe component name, in order to have html fields prefix name : 'compName.'--%> <% prefix = prefix + "."; %>
    Street helo <%-- Declare an html input field. --%> <%-- We use a tag that extends Struts 'text' tag. This extension add --%> <%-- attribute 'prefix', allowing to give a prefix to the normal name --%>
    Street (con't)
    City
    Country
    Zip code
    libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/invoice/editInvoice.jsp0000644000175000017500000000374110404045234030510 0ustar arnaudarnaud00000000000000<%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> Edit Customer Informations
    First Name
    Last Name
    Shipping Address  
    <%-- Include an "address editor" component. --%> <%-- Pass the component name and component value as parameter --%> <%-- Value comes from the form bean --%>
    Billing Address  
    save confirm reset   cancel
    libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/invoice/editInvoice2.jsp0000644000175000017500000000403610404045174030573 0ustar arnaudarnaud00000000000000<%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> Edit Customer Informations
    First Name
    Last Name
    Shipping Address  
    <%-- Include an "address editor" component. --%> <%-- Pass the component name and component value as parameter --%> <%-- Value comes from the form bean --%>
    Billing Address  
    save confirm reset   cancel
    libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/invoice/index.jsp0000644000175000017500000000047710404045220027353 0ustar arnaudarnaud00000000000000<%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%-- --%> libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/lang/0000755000175000017500000000000010423130301024777 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/lang/lang.jsp0000644000175000017500000000025710404045240026450 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> Francais
    English libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/layout/0000755000175000017500000000000010423130301025373 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/layout/classicLayout.jsp0000644000175000017500000000205510404045232030741 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%-- Layout Tiles This layout render a header, left menu, body and footer. @param title String use in page title @param header Header tile (jsp url or definition name) @param menu Menu @param body Body @param footer Footer --%> <tiles:getAsString name="title"/>

    libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/layout/columnsLayout.jsp0000644000175000017500000000165310404045236031007 0ustar arnaudarnaud00000000000000<%@ page import="org.apache.struts.tiles.ComponentContext"%> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%-- Layout component Render a list in severals columns parameters : numCols, list0, list1, list2, list3, ... --%> <% int numCols = Integer.parseInt(numColsStr); ComponentContext context = ComponentContext.getContext( request ); for( int i=0; i <% } // end loop %>
    libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/layout/stylesheet.css0000644000175000017500000002571510404045240030316 0ustar arnaudarnaud00000000000000/* CSS World Financial Personality - Revised jun99 */ /* base element inheritance formatting */ body { margin-left: 0px; margin-right: 0px; margin-top: 0px; margin-bottom: 0px; font-family: arial, geneva, helvetica, "sans serif"; } a { font-weight: bold; } /* all links are bold */ a:link { color: #3300cc } /* unvisited link */ a:visited { color: #330099 } /* visited links */ a:active { color: #000033 } /* active links */ a:hover { color: #000033 } /* MSIE rollover links */ table { margin-left: 0px; margin-right: 0px; margin-top: 0px; margin-bottom: 0px; } td { font-family: arial, geneva, helvetica, "sans serif"; } th { font-family: arial, geneva, helvetica, "sans serif"; font-weight: bold; } /* begin defined classes */ /* headline classes */ .headline { font-family: verdana, arial, geneva, "sans serif"; font-size: 110%; color: #000000; vertical-align: middle; text-align: left; } /* on-screen hint class */ .hint { font-size: x-small; color: #000000; background: #ffffff; } .hintvbm { font-size: x-small; } /* Message classes */ .note { font-size: smaller; font-weight: bold; color: #000000; background: #ffffff; vertical-align: middle; text-align: left; padding: 2px; } .noteimg { font-size: smaller; font-weight: bold; color: #000000; background: #ffffcc; vertical-align: top; text-align: center; } .success { font-size: smaller; font-weight: bold; color: #000000; background: #ffffff; vertical-align: middle; text-align: left; padding: 2px; } .successimg { font-size: smaller; font-weight: bold; color: #000000; background: #ffffcc; vertical-align: top; text-align: center; } .alert { font-size: smaller; font-weight: bold; color: #000000; background: #ffffcc; vertical-align: middle; text-align: left; padding: 2px; } .alertimg { font-size: smaller; font-weight: bold; color: #000000; background: #ffffcc; vertical-align: top; text-align: center; } .error { font-size: smaller; font-weight: bold; color: #000000; background: #ffffcc; vertical-align: middle; text-align: left; padding: 2px; } .errorimg { font-size: smaller; font-weight: bold; color: #000000; background: #ffffcc; vertical-align: top; text-align: center; } /* column header classes */ .hdleft { font-size: smaller; font-weight: bold; color: #333333; background: #cccccc; text-align: left; } .hdright { font-size: smaller; font-weight: bold; color: #333333; background: #cccccc; text-align: right; } .hdmiddle { font-size: smaller; color: #333333; background: #cccccc; text-align: center; } .datahd { font-size: smaller; font-weight: bold; color: #000000; background: #cccccc; } .spanhd { font-size: smaller; font-weight: bold; color: #eeeeee; background: #003366; text-align: left; } .spanhdright { font-size: smaller; font-weight: bold; color: #eeeeee; background: #003366; text-align: right; } .spanhdcenter { font-size: smaller; font-weight: bold; color: #eeeeee; background: #003366; text-align: center; } .subhdleft { font-size: x-small; color: #333333; background: #cccccc; text-align: left; } /* label classes */ .right { font-size: smaller; font-weight: bold; color: #333333; background: #cccccc; text-align: right; } .topright { font-size: smaller; font-weight: bold; color: #333333; background: #cccccc; vertical-align: top; text-align: right; } .left { font-size: smaller; font-weight: bold; color: #333333; background: #ffffff; text-align: left; } .topleft { font-size: smaller; font-weight: bold; color: #333333; background: #ffffff; vertical-align: top; text-align: left; } .center { font-size: smaller; font-weight: bold; color: #333333; background: #ffffff; text-align: center; } .greyright { font-size: smaller; font-weight: bold; color: #333333; background: #cccccc; text-align: right; } .greyleft { font-size: smaller; font-weight: bold; color: #333333; background: #ffffff; text-align: left; } .greycenter { font-size: smaller; font-weight: bold; color: #333333; background: #eeeeee; text-align: center; } .greytopright { font-size: smaller; font-weight: bold; color: #333333; background: #cccccc; vertical-align: top; text-align: right; } .greytopleft { font-size: smaller; font-weight: bold; color: #333333; background: #ffffff; vertical-align: top; text-align: left; } /* remove after changing subright use to fine */ .greysubright { font-size: x-small; color: #333333; background: #cccccc; text-align: right; font-weight: normal; } /* data classes and alternating row color classes */ .data { font-size: smaller; color: #000000; background: #ffffff; } .datamiddle { font-size: smaller; color: #000000; background: #ffffff; vertical-align: middle } .datagrey { font-size: smaller; color: #000000; background: #eeeeee; } .bdata { font-size: smaller; font-weight: bold; color: #000000; background: #ffffff; } .bdatagrey { font-size: smaller; font-weight: bold; color: #000000; background: #eeeeee; } .datart { font-size: smaller; color: #000000; background: #ffffff; text-align: right; } .datartgrey { font-size: smaller; color: #000000; background: #eeeeee; text-align: right; } .bdatart { font-size: smaller; font-weight: bold; color: #000000; background: #ffffff; text-align: right; } .bdatartgrey { font-size: smaller; font-weight: bold; color: #000000; background: #eeeeee; text-align: right; } .curr { font-size: smaller; font-weight: bold; color: #000000; background: #ffffff; text-align: right; } .currgrey { font-size: smaller; font-weight: bold; color: #000000; background: #eeeeee; text-align: right; } .currleft { font-size: smaller; font-weight: bold; color: #000000; background: #ffffff; text-align: left; } .color { color: #800000; } /*change to 000000 if FI doesn't want negative numbers to be red*/ .subdata { font-size: x-small; color: #000000; background: #ffffff } .subdatagrey { font-size: x-small; color: #000000; background: #eeeeee } .dataright { font-size: smaller; color: #000000; background: #ffffff; text-align: right;} .datagreyright { font-size: smaller; color: #000000; background: #eeeeee; text-align: right;} .yellow { font-size: smaller; color: #000000; background: #ffffcc; vertical-align: middle; text-align: left; } /* vrm classes and account balance classes */ .subcurr { font-size: smaller; font-weight: bold; color: #333333; background: #cccccc; text-align: right; } .editorial { font-size: smaller; color: #000000; background: #ffffff; } .editgrey { font-size: smaller; color: #000000; background: #eeeeee; } /* fine print for inputs and tables */ .fine { font-size: x-small; font-weight: normal; color: #333333; } .fineright { font-size: x-small; font-weight: normal; color: #333333; text-align: right; } .finewhite { font-size: x-small; font-weight: normal; color: #000000; background: #ffffff; } .subright { font-size: x-small; font-weight: normal; color: #333333; background: #cccccc; text-align: right; } /* form element cell classes */ .input { font-size: smaller; background: #ffffff; vertical-align: baseline; } .topinput { font-size: smaller; background: #ffffff; vertical-align: top; } .btminput { font-size: smaller; background: #ffffff; vertical-align: bottom; } .inputgrey { font-size: smaller; background: #eeeeee; vertical-align: baseline; } .submit { font-size: smaller; font-weight: bold; color: #333333; background: #ffffff; vertical-align: middle; text-align: right; } .submitgrey { font-size: smaller; font-weight: bold; color: #333333; background: #cccccc; vertical-align: middle; text-align: right; } .inputtop { font-size: smaller; vertical-align: top; background: #ffffff; } /* help classes */ .help { font-family: arial, helvetica, "sans serif"; font-size: smaller; color: #666666; background: #ffffcc; } /* navigation bar classes */ .navtext { font-size: x-small; color: #000066; text-align: right; } .info { font-size: x-small; color: #000066; background: #eeeeee; } .infotext { padding-left: 2pt; } /* footer classes */ .footlt { font-size: x-small; color: #333333; background: #cccccc; } .footdk { font-size: x-small; color: #cccccc; background: #333333; } /* background packing classes */ .bkgnd { font-size: 1pt; } .wtspace { font-size: 1pt; background: #ffffff; } .greyspace { font-size: 1pt; background: #eeeeee; } .yellowspace { font-size: 1pt; background: #ffffcc; } .bottom { vertical-align: bottom; } /* additional VIM classes */ .yellowbar { font-size: smaller; background: #ffffcc; text-align: left; } .yellowbarrt { font-size: smaller; background: #ffffcc; text-align: right; } .yellowspace { font-size: 4pt; background: #ffffcc; } .datacntr { font-size: smaller; color: #000000; background: #ffffff; text-align: center; } .datacntrgrey { font-size: smaller; color: #000000; background: #eeeeee; text-align: center; } .hdctr { font-size: smaller; font-weight: bold; color: #333333; background: #cccccc; text-align: center;} /* deprecated - duplicate functionality - use .fine */ /* deprecated - duplicate functionality - use .fineright */ /* deprecated - duplicate functionality - use .data and .datagrey */ /*.normal { font-family: arial, geneva, helvetica, "sans serif"; }*/ /*.normalgrey { font-family: arial, geneva, helvetica, "sans serif"; background: #cccccc; }*/ /* deprecated - duplicate functionality - not sure what this is used for */ /*.bottom { vertical-align: bottom; }*/ libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/layout/vboxLayout.jsp0000644000175000017500000000174510404045172030306 0ustar arnaudarnaud00000000000000<%@ page import="java.util.Iterator"%> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%-- Layout component Render a list on severals columns parameters : componentsList --%> <%-- Normally, we should use the iterate tag to iterate over the list. Unfortunatelly, this doesn't work with jsp1.1, because actual iterate tag use a BodyContent and include do a flush(), which is illegal inside a BodyContent. Jsp1.3 propose a new tag mechanism for iteration, which not use BodyContent. Wait until jsp1.3
    --%> <%-- For now, do iteration manually : --%> <% Iterator i=list.iterator(); while( i.hasNext() ) { String comp=(String)i.next(); %>
    <% } // end loop %> libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/portal/0000755000175000017500000000000010423130301025357 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/portal/advert1.jsp0000644000175000017500000000011710404045212027447 0ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/portal/advert2.jsp0000644000175000017500000000025710404045244027462 0ustar arnaudarnaud00000000000000
    libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/portal/advert3.jsp0000644000175000017500000000011710404045224027454 0ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/portal/login.jsp0000644000175000017500000000060010404045204027207 0ustar arnaudarnaud00000000000000
    Login

    If you have World Financial accounts, you can Login to view your account information.
     

    libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/portal/messages.jsp0000644000175000017500000000162510404045234027721 0ustar arnaudarnaud00000000000000
    Messages
  • Your CD matures in one month!
  • Now Providing a Technology Mutual Fund
  • Children's Savings Account Program Update
  • Small Business Program Offer
  • Financial Tip of the Day
  • Mortgage Rate Chart - See how we compare!
  • Check out our 1-year and 6-month CD rates
  • Auto Insurance Rates Lowered
     
  • libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/portal/newsFeed.jsp0000644000175000017500000000274310404045236027656 0ustar arnaudarnaud00000000000000
    News Feed
    Business News
  • Top Fund Managers Make Their Calls On Funds
  • World News
  • China Democracy Crackdown
  • Pope Visits The U.S. In May
  • General News
  • Clinton Polls in Question As To Accuracy
  • School Violence Erupts And Safety Questions Are Raised
  • Sports
  • Winners And Losers - NFL Season Wrap-Up
  • Ski Finals On The Wire For The Alpine Championships
  • Health
  • Tea - A Cup of Comfort
  • Relieve Stress The Natural Way: 10 Health Tips
  • libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/portal/personalLinks.jsp0000644000175000017500000000116110404045210030723 0ustar arnaudarnaud00000000000000
    My Personal Links
  • Free Edgar
  • Raging Bull
  • The Motley Fool
  • The Street.com
     
  • libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/portal/portalBody.jsp0000644000175000017500000000144010404045236030226 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/portal/search.jsp0000644000175000017500000000162510404045214027355 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
    Internet Search
    Query found :

    <%=query%>
    Enter a term or topic:

     
    libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/portal/stocks.jsp0000644000175000017500000000513410404045242027416 0ustar arnaudarnaud00000000000000
    Stewart's Hot Stocks  
    Symbol Price Change
    AOL 104.25 5.00
    CSCO 73.75 1.75
    HD 68.62 1.69
    SONE 38.88 1.62
    DJIA 10,302.13 47.80
    Quote:  Get Quote
     
    Symbol Search ] Edit Portfolio ]

    libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/portal/whatsNew.jsp0000644000175000017500000000127610404045226027715 0ustar arnaudarnaud00000000000000

    What's New
    New Financial Calculators
    Saving For A College Education?
    More ]
     
    Special Offer
    Get free real-time quotes for three months with a World Financial brokerage account. [ More ]
     
    libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/test/0000755000175000017500000000000010423130301025035 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/test/header.jsp0000644000175000017500000000055710404045230027017 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>

    value="" libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/test/myLayout.jsp0000644000175000017500000000153210404045226027411 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%-- Layout component parameters : title, header, menu, body, footer --%> <tiles:getAsString name="title"/>
    libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/test/templateLayout.jsp0000644000175000017500000000114610404045220030572 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%-- Layout component parameters : title, header, menu, body, footer --%> <tiles:get name="title"/>
    ****
    libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/basicFramesetPage.jsp0000644000175000017500000000104710404045240030151 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/basicPage.jsp0000644000175000017500000000071110404045222026457 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/contentForm.jsp0000644000175000017500000000032310404045242027100 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> label : property : libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/definitionTag.jsp0000644000175000017500000000104110404045210027357 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/dynFramesetPage.jsp0000644000175000017500000000125510404045226027667 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%-- Uncomment lines to overload parameters --%> <%-- --%> <%-- --%> <%-- --%> <%-- --%> <%-- --%> libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/extendedDefinition.jsp0000644000175000017500000000021010404045174030412 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/extendedDefinitionTag.jsp0000644000175000017500000000044210404045206031051 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/firstDefinition.jsp0000644000175000017500000000017610404045206027750 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/frameset.jsp0000644000175000017500000000105010404045242026406 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%-- Layout component parameters : title, header, menu, body, footer --%> <tiles:getAsString name="title"/> " name="header" id="header" scrolling="Auto"> " name="body" id="header" scrolling="Auto"> " name="footer" id="header" scrolling="Auto"> libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/index.jsp0000644000175000017500000000016710404045174025723 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/overloadDefinitionParameters.jsp0000644000175000017500000000034310404045222032452 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/portalPage.jsp0000644000175000017500000000105410404045212026677 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%-- --%> libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/strutsForward.jsp0000644000175000017500000000021010404045242027466 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/test.jsp0000644000175000017500000000111610404045230025557 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> Content Form libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/test2.jsp0000644000175000017500000000064610404045222025651 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/web/tiles-documentation/tutorial/test3.jsp0000644000175000017500000000140510404045204025644 0ustar arnaudarnaud00000000000000<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <%-- --%> libstruts1.2-java-1.2.9/web/tiles-documentation/index.jsp0000644000175000017500000000023010404045214024042 0ustar arnaudarnaud00000000000000<%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %> libstruts1.2-java-1.2.9/xdocs/0000755000175000017500000000000010423130301016567 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/xdocs/faqs/0000755000175000017500000000000010423130301017521 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/xdocs/faqs/actionForm.xml0000644000175000017500000002152410404045214022357 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Building an ActionForm

    This is a simple example of a login form to illustrate how Struts makes dealing with forms much less painful than using straight HTML and standard JSP facilities. Consider the following page (based on the example MailReader application included with Struts) named logon.jsp:


    
    <%@ taglib  uri="/WEB-INF/struts-html.tld" prefix="html" %>
    <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
    
    
    
    
        <bean:message key="logon.title"/>
    
    
    
    
    
    
    
    
    
    ]]>

    The following items illustrate the key features of form handling in Struts, based on this example:

    • The taglib directive tells the JSP page compiler where to find the tag library descriptor for the Struts tag library. In this case, we are using bean as the prefix that identifies tags from the struts-bean library, and "html" as the prefix that identifies tags from the struts-html library. Any desired prefix can be used.
    • This page uses several occurrences of the message tag to look up internationalized message strings from a MessageResources object containing all the resources for this application. For this page to work, the following message keys must be defined in these resources:
      • logon.title - Title of the logon page
      • prompt.username - A "Username:" prompt string
      • prompt.password - A "Password:" prompt string
      • button.submit - "Submit" for the button label
      • button.reset - "Reset" for the button label
      When the user logs on, the application can store a Locale object in the user's session. This Locale will be used to select messages in the appropriate language. This makes it easy to implement giving the user an option to switch languages -- simply change the stored Locale object, and all messages are switched automatically.
    • The errors tag displays any error messages that have been stored by a business logic component, or nothing if no errors have been stored. This tag will be described further below.
    • The form tag renders an HTML <form> element, based on the specified attributes. It also associates all of the fields within this form with a ActionForm bean [org.apache.struts.action.ActionForm]. The tag looks up the /logon action mapping in the Struts configuration. The logon mapping tells the tag that the form bean is stored in the session context under the key logonForm. The Struts developer provides the Java implementation of the ActionForm bean, subclassing the Struts class ActionForm (see Building Controller components). This bean is used to provide initial values for all of the input fields that have names matching the property names of the bean. If an appropriate bean is not found, a new one will be created automatically, using the Java class name specified through the action mapping.
    • The form bean can also be specified in the tag by providing name and type attributes. But most often, everything is specified in the Struts Configuration File.
    • The text tag renders an HTML <input> element of type "text". In this case, the number of character positions to occupy on the browser's screen has been specified as well. When this page is executed, the current value of the username property of the corresponding bean (that is, the value returned by getUsername).
    • The password tag is used similarly. The difference is that the browser will echo asterisk characters, instead of the input value, as the user types their password.
    • The submit andreset tags generate the corresponding buttons at the bottom of the form. The text labels for each button are created using message tags, as with the prompts, so that these values are internationalized.

    Handling multipart forms is also easy. Obviously when you create a multipart form you're creating a form that has at least one input of type "file". The first step to creating a multipart form is to utilize the struts-html taglib to create the presentation page:


    
    <%@taglib 
        uri="/WEB-INF/struts-html.tld"
       prefix="html">
    
    
    
        Please Input Text: 
        Please Input The File You Wish to Upload: 
       
       
    
    
    ]]>

    The next step is to create your ActionForm bean:



    Look at the Javadocs for FormFile to see the methods it exposes to manipulate files in file uploading. Also look at the Javadocs for ActionServlet and ActionMapping for the various parameters you can specify to change how files are uploaded. Basically in your execute method in your action class you would call ((UploadForm) form).getMyFile() to retrieve the FormFile and do what you want with it.

    libstruts1.2-java-1.2.9/xdocs/faqs/apps.xml0000644000175000017500000001350210404045204021215 0ustar arnaudarnaud00000000000000 Dan Walker Ted Husted Building Applications

    This document outlines one possible sequence of development steps that can be followed to create a Struts application. It is not intended as a complete description of each referenced development activity. More detailed documentation is available elsewhere and is referenced by "(more...)" links where possible.

    1. Requirements development and design are outside of the scope of this document.
    2. For help installing Struts, see the Getting Started chapter.
    3. There are many other ways to approach Struts development and there are many other features available besides the ones discussed below. This document outlines only one way to get started.
    4. This document focuses on form/data centric applications, but may also work with other types of applications.
    5. This material was written for Struts 1.1 (beta 2).
    1. Implement data entry forms as JSP files.
    2. Implement one or more ActionForm descendents to buffer data between JSPs and Actions.
    3. Create an XML document that defines the validation rules for your application.
    4. Implement one or more Action descendents to respond form submissions.
    5. Create struts-config.xml to associate forms with actions.
    6. Create or update web.xml to reference ActionServlet, taglibs used by Struts.
    7. Parallel Tasks
      1. Building
      2. Unit Testing
      3. Deployment
    1. Implement data entry forms as JSP files.
      1. Use elements from the html taglib to define the form elements. (more...)
      2. Use message and other elements from the bean taglib to define the labels and other static text of the form. (more...)
        1. Create and maintain a properties file of the text elements to be displayed. (more...)
      3. Use property attributes to link form fields to ActionForm instance variables.
    2. Implement one or more ActionForm descendents to buffer data between JSPs and Actions.
      1. Create get/set pairs that correspond to the property names in your related JSP form. Example:
        <html:text property="city" />
        needs:
        getCity() and setCity(String c)
      2. When needed, create a reset method that sets the fields of the ActionForm to their default values. Most ActionForms do not need to do this.
    3. Create an XML document that defines the validation rules for your application.
    4. Implement one or more Action descendents to respond to form submissions.
      1. Descend from DispatchAction or LookupDispatchAction if you want one class to handle more than one kind of event (example: one Action to handle 'insert', 'update' and 'delete' events, using a different "surrogate" execute method for each). (more...)
      2. Use the execute method (or its surrogates) of your Action class to interface with objects in your application responsible for database interaction, such as EJBs, etc.
      3. Use the return value of the execute method (or its surrogates) direct the user interface to the appropriate next page.
    5. Create struts-config.xml to associate forms with actions. The file minimally needs:
    6. Create or update web.xml to reference ActionServlet, taglibs used by Struts. (more...)
    7. Parallel Tasks
      1. Building
        1. Use Ant. It can compile, create WAR file, perform XSLT transformations, run unit tests, interact with version control systems, clean up, etc. (more...)
        2. Create and use build script incrementally, as you create files that need to be copied, compiled, etc.
      2. Unit Testing
        1. Unit test normal java beans with JUnit. (more...)
        2. Unit test JSP, taglibs and conventional servlet components with Cactus. (more...)
        3. Unit test Action servlets with StrutsTestCase. (more...)
        4. Add all unit tests to the build script as a separate target. This target should use the junit tag to launch each TestCase descendent. (more...)
      3. Deployment
        1. Build script should create a war file containing the files developed above, along with files that make up the Struts framework.
    libstruts1.2-java-1.2.9/xdocs/faqs/database.xml0000644000175000017500000003152010404045242022020 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Mike Schachter Ted Husted Martin Cooper Ed Burns Anthony Kay Accessing a Database

    The best thing is use the Action as a thin adaptor between the web/presentation-tier and your business classes (including those that access a database).

    So you first design a business API that uses plain Java classes. The best thing is to use objects that take ordinary Java types and return a JavaBean or collection of JavaBeans. The Action then calls these objects and passes the result back to the web/presentation tier.

    A common approach is to create an Action class for each of the business API methods/classes that you need to call. Ideally, all the database access code should be encapsulated in the business API classes, so Struts doesn't know what persistent layer you are using (or even if there is a persistence layer). It just passes a key or search String and gets back a bean or collection of beans. This lets you use the same business API classes in other environments, and also to run unit tests against your business API outside of Struts or a HTTP environment.

    To get started, it's simplest to setup a 1:1 correspondence between the Actions and the entry-points to your business API. As you gain experience, you will find ways to combine your Actions, say by using the DispatchAction. It's even possible to use a single "framework" Action to call all of your business classes, as is done with Scaffold ProcessAction in the contrib folder. Using fewer Actions does require a deeper understanding of how Struts and MVC frameworks operate. Don't hesitate to err on the side of creating more Actions at first. The Struts configuration makes it easy to refactor your Actions later, since you can change the Action type without changing anything else in the application.

    Ideally, the business logic layer should encapsulate the data access details, including acquiring a database connection. However, some application designs expect that the caller be able to provide a database connection or DataSource instance. When this is the case, the Struts DataSource manager can make it easy for your Action to produce these resources on demand.

    The Struts DataSource manager is configured as an element in the Struts configuration file (struts-config.xml). The manager can be used to deploy any connection pool that implements the javax.sql.DataSource interface and is configurable totally from JavaBean properties. If your DBMS or container provides a connection pool that meets these requirements, then that component might be your first choice.

    The Jakarta Commons dbcp's BasicDataSource [org.apache.commons.dbcp.BasicDataSource] also works well with the DataSource manager, if a native component is not available.

    Note: The Generic DataSource which was included with previous versions of Struts has been removed as of release 1.2.0 in favor of plugging in the BasicDataSource, or another DataSource implementation.

    This is how you would specify a DBCP BasicDataSource for your application:

    
    
    
        
        
        
        
        
        
        
        
        
    
    
    ]]>

    Note that you can define as many datasource objects as your application requires and refer to each using a logical name. This can be useful in providing better security or scalability, or even to test datasource implementations against each other.

    After a DataSource is defined, here is an example of using the manager to establish a connection from within an Action's execute method.

    
    public ActionForward
           execute(ActionMapping mapping,
                   ActionForm form,
                   HttpServletRequest request,
                   HttpServletResponse response) throws Exception
    {
     javax.sql.DataSource dataSource;
     java.sql.Connection myConnection;
     try {
      dataSource = getDataSource(request);
      myConnection = dataSource.getConnection();
      // do what you wish with myConnection
     } catch (SQLException sqle) {
        getServlet().log("Connection.process", sqle);
     } finally {
        //enclose this in a finally block to make
        //sure the connection is closed
        try {
           myConnection.close();
        } catch (SQLException e) {
           getServlet().log("Connection.close", e);
        }
       }
    }
    

    Note: If you use the Commons BasicDataSource with Struts, the query you provide for the pingQuery attribute (if you choose to include it) must return at least one row.

    Example: SELECT COUNT(*) FROM VALIDTABLE

    Just be sure you to replace "VALIDTABLE" with the name of a valid table in your database.

    If you need more than one data source in a module, you can include a key attribute in the data-source element:

    
       
          ... properties as before ...
       
       
          ... properties as before ...
       
       ...
    
    ]]>

    Which can then be accessed by including the key ("A" in this case) as an additional parameter to the Action.getDataSource() method.

    
       ...
       try {
          dataSourceA = getDataSource(request, "A");
          dataSourceB = getDataSource(request, "B");
       ...
    

    Each module can have as many data sources as it needs. The keys only need to be unique within a module since the struts module system maintains a name space for the items in each module to protect you from name clashes.

    http://www.mail-archive.com/struts-user@jakarta.apache.org/msg24621.html
    http://www.mail-archive.com/struts-user@jakarta.apache.org/msg24709.html
    http://www.mail-archive.com/struts-user@jakarta.apache.org/msg24626.html
    http://www.mail-archive.com/struts-user@jakarta.apache.org/msg24331.html
    http://www.mail-archive.com/struts-user@jakarta.apache.org/msg24102.html
    http://www.mail-archive.com/struts-user@jakarta.apache.org/msg23501.html
    http://www.mail-archive.com/struts-user@jakarta.apache.org/msg23455.html
    http://www.mail-archive.com/struts-user@jakarta.apache.org/msg23375.html
    http://www.mail-archive.com/struts-user@jakarta.apache.org/msg23321.html
    http://www.mail-archive.com/struts-user@jakarta.apache.org/msg23098.html
    http://www.mail-archive.com/struts-user@jakarta.apache.org/msg22713.html
    http://www.mail-archive.com/struts-user@jakarta.apache.org/msg21974.html
    http://www.mail-archive.com/struts-user@jakarta.apache.org/msg21026.html
    http://www.mail-archive.com/struts-user@jakarta.apache.org/msg19338.html
    http://www.mail-archive.com/struts-user@jakarta.apache.org/msg18323.html
    http://www.mail-archive.com/struts-user@jakarta.apache.org/msg14975.html
    http://www.mail-archive.com/struts-user@jakarta.apache.org/msg14914.html
    http://www.mail-archive.com/struts-user@jakarta.apache.org/msg14435.html
    http://www.mail-archive.com/struts-user@jakarta.apache.org/msg01562.html

    Transformation/Data Transfer
    http://www.mail-archive.com/struts-user@jakarta.apache.org/msg24480.html
    http://www.mail-archive.com/struts-user@jakarta.apache.org/msg23623.html
    http://www.mail-archive.com/struts-user@jakarta.apache.org/msg10195.html
    http://www.mail-archive.com/struts-user@jakarta.apache.org/msg10205.html

    The result of most queries will map to the ActionForms you are already using, and so you can render the ResultSet as a collection of ActionForms. But sometimes there are columns in a ResultSet that are not properties of an ActionForm, or even known in advance.

    Happily, the Struts tags don't care what type of bean you use with them. You could even output a ResultSet directly. But a ResultSet retains a connection to the database, and passing "all that" directly to a JSP gets messy. So what's a developer to do?

    Since Struts 1.1, the simplest option is to use a ResultSetDynaClass to transfer the ResultSet into an ArrayList of DynaBeans. The Struts custom tags can use DynaBean properties as easily as they use conventional JavaBean properties. (See DynaActionForm classes in the Struts User Guide for details.)

    Since this is in the BeanUtils jar, you already have it on board, and just need to implement the transfer routine (see the ResultSetDynaClass link).

    libstruts1.2-java-1.2.9/xdocs/faqs/eclipse.xml0000644000175000017500000002451410404045174021711 0ustar arnaudarnaud00000000000000 James Mitchell How to setup a basic Struts project using Eclipse IDE - Apache Struts

    * DISCLAIMER - This simple How-To shows you one of many ways to setup a working project using
    the Struts framework. This is mainly geared toward struts users who are new to Eclipse, and
    don't want to spend a lot of time figuring out the differences between their old IDE (if any)
    and this one.

    I will also apologize ahead of time for the formatting of this page.


    In this How-To, I will demonstrate (using Eclipse 2.0.1) how to setup, compile, run,
    and debug the struts-example web application that is bundled with the distribution.
    Next, I will modify the code to pull some data from a MySql database using the popular
    relational mapping tool OJB. (This is actually quite simple)
    Before we begin, you will need to create a directory somewhere to store your project.
    I typically use C:\personal\development\Projects\(some project)
    Once that's done, extract the struts-example.war to that directory
    (using your favorite zip utility)

    Delete the META-INF folder because this will be created during the build/jar/war process.
    Add a build.xml file to the project root. I use something like this:
      
      <project name="Struts Example" default="main" basedir=".">
      
        <!--  This is a basic build script, only the minimums here -->
        
        <!-- Tell ant to use my environment variables -->
        <property environment="env"/>
      
        <property file="./build.properties"/>
      
          <property name="build.compiler"     value="modern"/>
          <property name="build.dir"          value="./WEB-INF/classes" />
          <property name="src.dir"            value="./WEB-INF/src"/>
        <property name="servlet.jar"        value="/Apache_Home/jakarta-servletapi-4/lib/servlet.jar"/>
          <property name="war.file"              value="struts-example"/>
          <property name="war.file.name"      value="${war.file}.war"/>
          <property name="tomcat.home"       value="${env.CATALINA_HOME}"/>
          <property name="deploy.dir"         value="${tomcat.home}/webapps"/>
      
        <path id="project.class.path">
            <fileset dir="./WEB-INF/lib/">
                <include name="**/*.jar"/>
            </fileset>
            <pathelement path="${src.dir}"/>
            <pathelement path="${servlet.jar}"/>
        </path>
      
          <target name="clean">
              <delete dir="${build.dir}" includeEmptyDirs="true" />
          </target>
      
      
          <target name="prep">
              <mkdir dir="${build.dir}"/>
          </target>
      
          <target name="compile">
            <javac   srcdir="${src.dir}"
                        destdir="${build.dir}"
                        debug="on"
                    deprecation="on">
              <include name="**/*.java"/>
              <classpath refid="project.class.path"/>
            </javac>
          </target>
      
          <target name="cleanWebApp">
            <delete file="${deploy.dir}/${war.file.name}" />
              <delete  dir="${deploy.dir}/${war.file}" includeEmptyDirs="true" />
          </target>
      
          <target name="war">
              <war warfile="${war.file.name}" webxml="./WEB-INF/web.xml">
                     <fileset dir="./" includes="**/*.*" excludes="*.war, **/*.nbattrs, web.xml, **/WEB-INF/**/*.*, **/project-files/**/*.*"/>
                     <webinf  dir="./WEB-INF"    includes="**/*" excludes="web.xml, **/*.jar, **/*.class"/>
                     <lib     dir="./WEB-INF/lib"/>
                     <classes dir="${build.dir}" includes="**/*.properties" />
              </war>
          </target>
      
          <target name="deploy">
              <copy todir="${deploy.dir}">
                <fileset dir="./" includes="${war.file.name}"/>
              </copy>
          </target>
     
        <target name="main" depends="clean, prep, cleanWebApp, compile, war"/>
      
      </project>
      
      
    1. Create a new project.



    2. New Java Project



    3. Browse for the folder you created for your project.






    4. Eclipse will detect your source folders from any subdirectories under your project.



    5. In our case, this is where the src folder was placed.



    6. Default standard libs are automatically added depending on the type of project.



    7. Add the existing web app jars.



    8. Now we need to add a few jars from the file system.



    9. We always need this one (servlet.jar)



    10. Ahhhh...everything looks ok for now. You can always go back and modify these settings
      later.






    11. When everything settles down, you should see something like this (of course, it might look different depending on your installation/customization):



    12. Compilation warnings and errors are detected immediately. In this screenshot, I drill down
      into the source folder, package, file, class, and double click on the method....which
      brings up the source editor. I hover the mouse over the offending warning to see
      a description of what's wrong.



    13. I changed ApplicationConfig to ModuleConfig, then saved and now I see new errors.
      You can right click and import ModuleConfig right from the error.



    14. A quick look at the import section.



    15. Right click, Source, Organize Imports



    16. Ahhhh...better



    17. From the Package Explorer, right click your build.xml and run Ant:



    18. Is this cool or what?



    19. Oh crap!



    20. Quick look at what jars are being used to process my build.






    21. I simply removed all the existing jars from the IDE's Ant configuration and
      added all from my own installation.



    22. Can't forget that last one



    23. Everything went ok (for me)









    24. Time to test-drive



    libstruts1.2-java-1.2.9/xdocs/faqs/helping.xml0000644000175000017500000003607110404045232021707 0ustar arnaudarnaud00000000000000 Ted Husted Craig R. McClanahan How to Help FAQ - Apache Struts

    "You can't always get what you want / but if you try real hard / you might just find / that you get what you need".
    [Rolling Stones]

    Struts is an all volunteer product. Our customers are the volunteers who donate their time and energy to supporting the product. If you want to support Struts, and become one of our customers, then you need to get involved and become a volunteer.

    Our challenge to any team using Struts is to donate the time of one team member one afternoon a week (or more if you can spare the resources). Have your team member browse Bugzilla for any issues without a patch or unit test, and add the patch or test. If the patch is written on company time, and you want to give your company an author's credit, that's fine with us.

    If Struts doesn't do what you want, it's up to you to step up and propose the patch. If Struts doesn't ship as often as you would like, it's up to you to step up with the tests and fixes that get a release out the door.

    If Struts does do what you want, help others become involved by turning your war stories into FAQs and how-tos that we can make part of the documentation. The mailing list is very active and trundling through the archives is no picnic. We can always use people who can reduce the best threads to coherent articles that we can put in the User Guide.

    Some Apache products like you to submit your patch to the mailing list. We would prefer that you create a Bugzilla Bugzilla report and then attach the patch to the report. To do this, you must first create the report, and then modify the report to add your patch. We realize this is a bit clumsy, but it keeps us from losing things, and helps to ensure that your patch will be attended.

    We don't sell Struts for money, but anyone who wants to be our customer can pay us back by donating the time and energy that money represents.

    You can research and report outstanding fixes and feature requests using Jakarta Bugzilla. If you are unsure if this is an actual problem, feel free to bring it up the list first. But to be sure that an issue is resolved, read How to Report Bugs Effectively and report it to Bugzilla.

    Feature requests are also maintained in the Bugzilla database.

    Patches are always welcome. If you can't write a patch to fix your bug, a unit test that demonstrates the problem is also welcome. (And, of course, unit tests that prove your patch works are equally welcome.)

    If your bug or feature is already in Bugzilla, you can vote for the issue and call more attention to it. Each user can cast up to six votes at a time.

    If there is a patch attached to the issue, you can also try applying to your local copy of Struts, and report whether it worked for you. Feedback from developers regarding a proposed patch is really quite helpful. Don't hesitate to "me too" if you've tried the patch yourself.

    Struts is distributed by The Apache Software Foundation. These are the same people who distribute the Apache Web server. Like all ASF projects, Struts is managed as a "meritocracy", where everyone's contribution is welcome. Users can help other users the mailing lists, report bugs, and request new features. Developers can contribute patches, new code, and documentation. The most active Developers may become Committers, who make the actual decisions about Strut's codebase.

    If you are new to open source development, see the How to get involved page the main Jakarta site.

    A very good place to start is by reviewing the list of open issues and pending feature requests (Bugzilla). If you see an issue that needs a patch you can write, feel free to annex your patch. If you seen an issue that needs a unit test to prove its fixed, feel free to annex your test case. If someone has posted a patch to an issue you'd like to see resolved, apply the patch to your local development copy of Struts. Then let us know if it works for you, and if it does, cast your vote for the issue and its patch.

    If none of the pending issues scratch your itch, another good place to start is by contributing unit tests for existing features (even those that still work).

    Our current approach to unit testing works fairly well for exercising most method-level stuff, but does not really address situations of dynamic behavior -- most particularly the execution of custom tags for Struts. You can try to fake what a JSP container does, but a much more reliable testing regime would actually execute the tag in a real container. For that purpose, we use the Cactus testing framework, which re-executes the JUnit-based tests as well to make sure that nothing bad happens when you switch environments. Right now, there are very few dynamic tests; ideally, we will have tests for every tag, that cover every reasonable combination of tag attribute values (yes, that's a tall order -- the totally lines of test source code will undoubtedly exceed the totally lines of code in the framework itself if we achieve this).

    The only difference is that the documentation is kept in XML rather than Java source code. Otherwise, all the same precepts and procedures pertain.

    The trick to getting started is to download the nightly build and try building the documentation WAR. Then try adding your own XML page under doc/ to see if the build succeeds. If it doesn't, it will report where the bad element is, much like it reports where a bad programming expression is. If it does, then your page should be available under target/documentation/.

    The website portion of the package is the root directory of doc/. The User Guide portion is under the userGuide/ folder. If the material you'd to add doesn't fit right in with what's there, the best thing may to start a new section after the existing material. The navigation column can be found in the project.xml document.

    To display markup, substitute &lt; for <. The unmatched trailing > will be ignored. Since it is XML, all elements also need to closed. So elements like <br> and <hr> need to set out as <br/> and <hr/>.

    Also watch for the length of code samples - these do not wrap. If a line is too long, it will force the right margin out past the edge of the screen or printed page.

    The stylesheets we use are adequate, but could certainly be improved by an XML guru, if you happen to one of those.

    Here is the truth regarding releases:

    Jakarta products are released on the basis of merit, and ~not~ according to a strict timetable. The volunteers devote whatever time they can to work on the product. But all volunteers have real jobs and real lives, that do take precedence. Since Struts does not have paid personnel working on the project, we simply cannot make date-oriented commitments.

    All Jakarta products must circulate a public beta before release. If a beta is not in circulation, then it's a good bet that a release is not forthcoming any time soon. Products sometimes go through several betas before final release. So if this is beta 1, then it still may not be released any time soon.

    The bottom line is that Jakarta takes releases very seriously. We do not compromise the quality of our software by watching the calendar (and then ship something ready or not). A release is ready when it is ready.

    That may sound flip, but it ~is~ the truth. The delivery of production-quality, leading-edge software is not something anyone can prognosticate. If anyone tries, they are lying to you. That, we won't do ;-)

    What we ~will~ do is release all of our development software as soon as it is developed. This way you can judge for yourself how quickly the development is proceeding, and whether what is being developed will meet your needs. If you need a feature right now, you can use the nightly build, or roll your own patch. There are no private Subversion repositories or private development lists. What you see is what we got. If you are following the DEV list, then you know everything the developers know. Really, you do.

    So, what do you tell your team? If you can ship your application based on the nightly build of your choice, then consider that an option. You can still ship yours, even if we don't ship ours, and you will have access to all the latest patches or enhancements. (Just like we were working down the hall.) If you can only ship your application based on a release build of Struts, then you should base your development on the release build of Struts, and keep an eye on what is coming down the pipeline. This way you are at least forewarned and forearmed.

    • Most importantly, download the latest beta or release-candidate and test it against your own applications. Report any and all issues or suspected issues to Bugzilla. The sooner we resolve any problems, the fewer betas or release candidates we will have to distribute before we are done. (How do we know when we're done? -- When we run out of issues =:o) The sooner we find them, the sooner we are done.)
    • Contribute unit tests. The closer we get to a release, the more we worry about breaking something. The more tests we have, the more confident we can be when applying patches. Tests that prove that a pending issue is actually a bug are the most welcome ones. But we are eager for any and all tests for any and all features, even those that still work =:0).
    • Review the list of issues at Bugzilla. If there are any to which you can respond, please do. If there any patches posted, feel free to test them your system, report the results, and cast your vote if they work.
    • Confirm an issue's category and status. Newbies often post feature requests or help-desk questions as "bugs". This bloats the list of fixes we (apparently) need to apply before the next beta, making it hard to see the forest for the trees. If an issue doesn't seem to be categorized correctly, exercise your best judgment and change it. If one ticket seems like a duplicate of another, go ahead and enter the change. Every modification to the ticket is echoed to the DEV list and automatically subjected to peer review. Err on the side of doing.
    • Use Bugzilla to vote for issues you feel should be handled first. If an issue on your ballot doesn't include a patch, feel free to try coding one yourself. (At Jakarta, patches are the only votes that truly count.) Well over thirty developers have contributed code or documentation to the product. You can too =:0)
    • Answer questions on the user list. The Committers only have a limited amount of time to volunteer. If Developers are supporting each other on the lists, the Committers have more time to spend on the next release.

    The management of the Jakarta site, and the Struts product, is based on principles and practices used by creators of the Apache HTTPD server. Struts follows the Project Guidelines on the main Jakarta site.

    If you are new to this style of development, the Apache HTTPD Dev list is available in a digest form. Even if you are not working on the HTTPD server yourself, it is interesting to watch how the HTTPD team works on the server.

    The Struts project has its own Dev list, where all of the decisions regarding Struts are made. Most development takes place via Lazy Consensus. Committers post most changes to the product unilaterally, using their own best judgment, and only discuss or vote upon controversial matters. Another Committer can veto any change in an unreleased product with cause.

    libstruts1.2-java-1.2.9/xdocs/faqs/index.xml0000644000175000017500000000411110404045216021360 0ustar arnaudarnaud00000000000000 Ted Husted FAQs and Howtos - Apache Struts
    libstruts1.2-java-1.2.9/xdocs/faqs/indexedprops.xml0000644000175000017500000004200710404045236022765 0ustar arnaudarnaud00000000000000 David M. Karr David Graham Indexed Properties, Mapped Properties, and Indexed Tags

    The JSP specification discusses using "indexed properties" in reference to the <jsp:setProperty> tag. However, none of the support provided in the base JSP specification actually deals with the "indexing" part. In truth, it allows for setting "array properties", but it doesn't do much for setting or even getting the actual values in each entry of the array, except with explicit JSP expressions (<%= %>).

    The Struts framework provides much more powerful features related to indexed properties, but in truth most of the heavy lifting is not even in the Struts framework, but in the Jakarta Commons Beanutils package. This package is used by Struts to provide this functionality. You can see the javadoc documentation for the Beanutils package at http://jakarta.apache.org/commons/beanutils/api/index.html. The information particularly related to indexed properties is in the package description for the org.apache.commons.beanutils package. This article mirrors that information, but focuses on how this functionality is mapped to JSP tags using the Struts tag library.

    The support for indexed properties also includes "mapped properties", "nested properties" and "indexed tags", which are all related but slightly different. The latter is exclusive to Struts, but the first two are also provided by the Beanutils package. This article will cover all three of these topics.

    The simplest demonstration of using indexed properties in Struts can be shown with the following simple bean and JSP page:

    package org.apache.struts.webapp.exercise;
    import org.apache.struts.action.ActionForm;
    public class StringBean extends ActionForm {
        private String strAry[] = { "String 0", "String 1", "String 2", "String 3", "String 4" };
    
        public String getStringIndexed(int index) { 
            return strAry[index]; 
        }
        
        public void setStringIndexed(int index, String value) { 
            strAry[index] = value; 
        }
    }

    First note the two methods in the StringBean class, "getStringIndexed()" and "setStringIndexed()". Note that the "get" method takes an "int" and the "set" method takes an "int" and "String". The Beanutils package and Struts recognizes this arrangement of signatures as an "indexed property", in this case with the property name "stringIndexed".

    <!-- indexedtest.jsp -->
    <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
    <jsp:useBean id="bean" class="org.apache.struts.webapp.exercise.StringBean"/>
    <bean:write name="bean" property="stringIndexed[1]"/>

    Note the property value of "stringIndexed[1]". This is intended to reference the indexed property "stringIndexed", and the 1st (zero-based) entry of whatever array or collection which the indexed property represents.

    As you might be able to guess, when this page is executed, it will print just the string "String 1", which is the corresponding array entry at that index value.

    This is a simple demonstration of what indexed properties can provide.

    A variation on indexed properties are properties whose type is java.util.List or a subclass.

    For instance, the first example using "StringBean.java" and "indexedtest.jsp" could use a modified "StringBean.java" class, like this:

    package org.apache.struts.webapp.exercise;
    import org.apache.struts.action.ActionForm;
    public class StringBean2 extends ActionForm {
        private String strAry[] = { "String 0", "String 1", "String 2", "String 3", "String 4" };
    
        public java.util.List getStringIndexed(int index) { 
            return java.util.Arrays.asList(strAry);
        }
    }

    Note the different implementation of the "getStringIndexed()" method, returning a List instead of a String. If this bean class is substituted with the original "indexedtest.jsp", the result will be identical.

    The idea of "mapped properties" as opposed to "indexed properties" is that the property represents a "map" type, as opposed to an array or collection type. The signature of the "get" and "set" methods for a mapped property are different from the same methods for an indexed property. In particular, instead of an "int" for the index, there is a "String" for the key.

    The previous example for indexed properties can be changed to the following to demonstrate mapped properties:

    package org.apache.struts.webapp.exercise;
    import java.util.HashMap;
    import org.apache.struts.action.ActionForm;
    public class StringBean3 extends ActionForm {
        private String strAry[] = { "String 0", "String 1", "String 2", "String 3", "String 4" };
        
        private HashMap map = new HashMap();
    
        public StringBean() {
            map.put("zero", strAry[0]);
            map.put("one", strAry[1]);
            map.put("two", strAry[2]);
            map.put("three", strAry[3]);
            map.put("four", strAry[4]);
        }
    
        public Object getStringMapped(String key) { 
            return map.get(key);
        }
        
        public void setStringMapped(String key, Object value) { 
            map.put(key, value); 
        }
    }

    Note the "get" and "set" methods to represent the mapped property.

    <!-- indexedtest3.jsp -->
    <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
    <jsp:useBean id="bean" class="org.apache.struts.webapp.exercise.StringBean"/>
    <bean:write name="bean" property="stringMapped(two)"/>

    Note the property value of "stringMapped(two)". This will reference the mapped property "stringMapped", using the key value of "two".

    When this page is executed, it will print just the string "String 2", which is the string stored in the HashMap with the key "two".

    Nested properties allows you to combine normal properties, indexed properties, and mapped properties in a hierarchical fashion. A property value of a bean does not have to be a primitive like "int" or "String. The property value can be a bean with its own properties. The following example demonstrates this.

    package org.apache.struts.webapp.exercise;
    import org.apache.struts.util.LabelValueBean;
    import org.apache.struts.action.ActionForm;
    public class StringBean4 extends ActionForm {
        private LabelValueBean[] lvbeans;
        
        public StringBean() {
            lvbeans   = new LabelValueBean[5];
            lvbeans[0]   = new LabelValueBean("Zero", 0+"");
            lvbeans[1]   = new LabelValueBean("One", 1+"");
            lvbeans[2]   = new LabelValueBean("Two", 2+"");
            lvbeans[3]   = new LabelValueBean("Three", 3+"");
            lvbeans[4]   = new LabelValueBean("Four", 4+"");
        }
    
        public  LabelValueBean getLabelValue(int index) { 
            return lvbeans[index];
        }
    }

    First note the use of the class "LabelValueBean". This is a simple class provided in the Struts library which represents a pair of two Strings, a "label" and a "value". It itself is a bean, providing these two properties with standard getters and setter methods.

    Then, see the "getLabelValue()" method, representing the indexed property "labelValue". This class doesn't show a "setter" method. If you only ever provide read-only access a property, then it is not necessary to provide a setter method.

    <!-- indexedtest4.jsp -->
    <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
    <jsp:useBean id="bean" class="org.apache.struts.webapp.exercise.StringBean"/>
    <bean:write name="bean" property="labelValue[1].label"/>

    Note here the "nested" property reference. It is first using the indexed property "labelValue" and then the "normal" property of the LabelValueBean to get the final result. When this page is executed, it will print the string "One", representing the "label" property of the 1st entry of the array represented by the "labelValue" indexed property.

    When people started using indexed properties in Struts tags, I'm reasonably certain they started out with a high level of enthusiasm, but were somewhat frustrated when they discovered reality. The reality is that the "index" for indexed properties often needs to be a dynamic value, usually from the "indexId" counter in the "<logic:iterate>" tag.

    For instance, the following example JSP page using the same "StringBean" bean class uses a dynamic value for the index:

    <!-- indexedtest5.jsp -->
    <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
    <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
    <html>
     <body>
      <html:form action="indexedtest5.do">
       <logic:iterate name="stringbean" property="stringArray" id="foo"
                      indexId="ctr">
        <html:text name="stringbean"
                   property='<%= "labelValue[" + ctr + "].label" %>' />
       </logic:iterate>
       <html:submit property="submitValue">Submit Changes</html:submit>
      </html:form>
     </body>
    </html>

    The JSP expression syntax for the property attribute is somewhat messy and easy to get wrong so it's something we want to avoid. One way to make this a little cleaner is to use "indexed tags", but there's a wrinkle to this approach. We'll first cover the details of indexed tags, then we'll talk about the wrinkle, and then finally an alternative to indexed tags.

    The "indexed tags" feature is provided by several tags that have an optional boolean "indexed" attribute. This is only legal when inside a "<logic:iterate>" tag. When the "indexed" attribute is true, then the tag will incorporate the loop index into the resulting HTML component.

    The several tags that support the "indexed" attribute can be broken into three groups, split by what they do to incorporate the loop index into the resulting HTML component.

    Group 1Group 2Group 3
    checkboxbuttonlink
    fileimage 
    hiddensubmit 
    password  
    radio  
    select  
    text  
    textarea  

    In Group 1, all of these tags will generate an HTML "name" attribute of "name[nn].property". The value of each tag will also be initialized by the getter method corresponding to that property specification.

    In Group 2, these tags will generate an HTML "name" attribute of "property[nn]". These three tags don't have "name" attributes, so since it wouldn't make sense to use "[nn].property" (no name value), the array indexes are attached to the property instead.

    The "link" tag in Group 3 isn't anything like any of the others. The base description of the "link" tag doesn't even mention how this works, but the description of the "indexed" tag describes how it works somewhat (although it doesn't specifically say that it uses the name "index" if "indexId" isn't set). In short, the "indexed" behavior of this tag is to add a URL query parameter, where the parameter name is "index" or the value of the "indexId" attribute, and the parameter value is the current index value. Outside of this, the "indexed" behavior of the "link" tag needs no more explanation, in contrast to the tags in the first two groups.

    The problem with using the "indexed" attribute to automatically attach the loop index is that it gives you less control over how the loop index is used. For instance, in our earlier examples using the "<html:text>" tag, we attached the loop index to the end of the "property" attribute value, which was "labelValue" in our example. This results in a "name" attribute value in the HTML component of "labelValue[nn]". This maps to a "labelValue" indexed property on the "stringbean" bean instance.

    However, if we instead add the "indexed" attribute, and remove the manual attachment of the loop index, then the resulting "name" attribute in the HTML component ends up as "stringbean[nn].labelValue". This will not work as is. It can be changed to work, however. From the previous example (indexedtest5.jsp), the "<html:text>" component would change the "name" attribute from "stringbean" to "labelValue", and the "property" attribute to "label". With the "indexed" attribute, that ends up with a "name" attribute value of "labelValue[nn].label".

    So, it's very likely you could use indexed tags to support your needs for indexed properties, but you have to understand the resulting structure of your "name" attribute in order to understand what other attribute values you need.

    The "indexed tags" feature was created partially because of the awkward process for encoding the loop index into the property attribute, using a JSP expression. The creation of the JSTL eventually resulted in a solution that makes that process less painful.

    The JSTL uses a string-based expression language to evaluate attribute values, instead of using a run-time JSP expression. The engine that performs these evaluations is often called just "EL" (expression language) for short. After the JSTL was created, a derivative of the Struts tag library called Struts-EL was created. In short, this does everything that the Struts tag library does, but it uses the JSTL EL engine to evaluate attribute values.

    If you use Struts-EL, you can get back some of the flexibility of encoding your loop indices manually, but the resulting expressions will be a little more readable, and thus maybe a little easier to maintain.

    For instance, following this is a version of "indexedtest5.jsp" using Struts-EL:

    <!-- indexedtest6.jsp -->
    <%@ taglib uri="/WEB-INF/struts-html-el.tld" prefix="html-el" %>
    <%@ taglib uri="/WEB-INF/struts-logic-el.tld" prefix="logic-el" %>
    <html>
     <body>
      <html-el:form action="indexedtest6.do">
       <logic-el:iterate name="stringbean" property="stringArray" id="foo"
                         indexId="ctr">
        <html-el:text name="stringbean"
                      property="labelValue[${ctr}].label" />
       </logic-el:iterate>
       <html-el:submit property="submitValue">Submit Changes</html:submit>
      </html-el:form>
     </body>
    </html>

    The Struts-EL library is part of the Struts distribution, in the "contrib" directory. The one drawback to using Struts-EL is that it requires a web container supporting the Servlet 2.3 specification.

    libstruts1.2-java-1.2.9/xdocs/faqs/kickstart.xml0000644000175000017500000005472710404045220022265 0ustar arnaudarnaud00000000000000 Ted Husted Craig R. McClanahan James DeVries James Holmes Kickstart FAQ - Apache Struts

    Here are answers to the usual getting-started questions. For an in-depth, searchable FAQ, visit our friends at JGuru.

    Java technologies give developers a serious boost when creating and maintaining applications to meet the demands of today's public Web sites and enterprise intranets. Struts combines Java Servlets, Java ServerPages, custom tags, and message resources into a unified framework. The end result is a cooperative, synergistic platform, suitable for development teams, independent developers, and everyone in between.

    Java Servlets are designed to handle requests made by Web browsers. Java ServerPages are designed to create dynamic Web pages that can turn billboard sites into live applications. Struts uses a special Servlet as a switchboard to route requests from Web browsers to the appropriate ServerPage. This makes Web applications much easier to design, create, and maintain.

    Yes. Struts is committed to supporting industry standards. Our lead developer is a member of JSR052, Sun's Expert group for developing a standard library of custom JSP tags. A primary design criteria is that Struts must be compatible with Sun's J2EE platform for corporate enterprises. In fact, Struts really acts as an integrator of Java technologies, so that they can be used in the "real world".

    Struts was created by Craig R. McClanahan, and donated to The Apache Software Foundation in May 2000. Craig is the primary developer of both Struts and Tomcat 4, the basis for the official reference implementation for a servlet 2.3 and JSP 1.2 container. With stable releases of Struts and Tomcat 4 in circulation, Craig is now the Specification Lead for JavaServer Faces (JSR-127), and is the Web Layer Architect for the Java2 Enterprise Edition (J2EE) platform as a whole.

    There are now many active committers to the Struts project, working cooperatively from around the globe. Other Java developers are invited to contribute to the project. Struts is an Apache Jakarta project, with the common mission to "provide commercial-quality server solutions based on the Java Platform that are developed in an open and cooperative fashion". All told, 17 individual developers and committers contributed to the Struts 1.0 codebase.

    It's a reference to struts in the architectural sense, a reminder of the nearly invisible pieces that hold up buildings, houses, and bridges.

    Struts is copyrighted software available under a "free-to-use-license" by The Apache Software Foundation. The license appears at the head of every source code file. A reference copy of the license is available here.

    Yes. The only requirements you must meet are those listed in the Apache Software Foundation license, which is included at the top of each source file and in the file LICENSE in the top-level directory of the distribution.

    In addition, contributions of patches, improved code, new features, or even just requests for features are also welcome.

    You need to credit Struts if you redistribute your own framework based on Struts for other people to use. (See the Apache License for details.) But you do not need to credit Struts just because your web application utilizes the framework. It's the same situation as using the Apache HTTPD server or Tomcat. Not required if its just running your web site. Required if you've used the source code to create your own server that you are redistributing to other people.

    The best place to download Struts is at jakarta.apache.org/struts. The nightly builds are very stable, and recommended as the best place to start today.

    To develop applications with Struts, you can usually just add the Struts JAR file to your Java development environment. You can then start using the Struts classes as part of your own application. A blank Struts application (in the webapps directory, open struts-blank.war) is provided, which you can just copy to get a quick-start on your own brainchild.

    Since the full source code for Struts is available, we also provide complete instructions for compiling your own Struts JAR from scratch. (This is actually easier than it looks!)

    Your Struts application can usually be deployed using a standard WAR file. In most cases, you simply deposit the WAR file on your application server, and it is installed automatically. If not, step-by-step installation instructions for various servlet containers are available.

    When you are compiling an application that uses the Struts classes, you must have the "struts.jar" on the classpath your compiler sees -- it does not have to be on your CLASSPATH environment variable.

    Why is that an important distinction? Because if you are using a servlet container on your development machine to test your application, the "struts.jar" must not be on your CLASSPATH environment variable when running the container. (This is because each Web application must also have their own copy of the Struts classes, and the container will become confused if it is on the environment path as well.)

    There are several general approaches to this issue:

    • Use ANT for building your projects -- it can easily assemble classpaths for the compiler. (This is how Struts itself is built, along with Tomcat and most other Java-based projects).
    • Use an IDE where you can configure the "class path" used for compilation independent of the CLASSPATH environment variable.
    • Use a shell script that temporarily adds struts.jar to the classpath just for compilation, for example
      javac -classpath /path/to/struts.jar:$CLASSPATH $@

    Struts currently has two testing environments, to reflect the fact that some things can be tested statically, and some really need to be done in the environment of a running servlet container.

    For static unit tests, we use the JUnit framework. The sources for these tests are in the "src/test" hierarchy in the Subversion repository, and are executed via the "test.junit" target in the top-level build.xml file. Such tests are focused on the low-level functionality of individual methods, are particularly suitable for the static methods in the org.apache.struts.util utility classes. In the test hierarchy, there are also some "mock object" classes (in the org.apache.struts.mock package) so that you can package up things that look like servlet API and Struts API objects to pass in as arguments to such tests.

    Another valuable tool is Struts TestCase which provides a useful harness for Action classes that can be used with JUnit or Cactus.

    First, it's important to remember that Struts is an all-volunteer project. We don't charge anyone anything to use Struts. Committers and other developers work on Struts because they need to use it with their own applications. If others can use it too, that's "icing on the cake". If you submit a patch for a feature that a Committer finds useful, then that Committer may choose to volunteer his or her time to apply the patch. If you just submit an idea without a patch, it is much less likely to be added (since first someone else has to volunteer their time to write the patch).

    We are grateful for any patches, and we welcome new ideas, but the best way to see that something gets added to the framework is to do as much of the work as you can, rather than rely on the "kindness of strangers". Worst case, you can apply the patch to your copy of Struts and still use the feature in your own application. (Which is what open source is ~really~ all about.)

    The Struts package comes complete with a Users Guide to introduce people to the framework and its underlying technologies. Various components also have their own in-depth Developers Guide, to cover more advanced topics. Comprehensive Javadocs are included along with the full source code. For your convenience, these are bundled together as a self-installing application. The struts-documentation.war is the same bundle that is deployed as the Struts Web site.

    The Strut's mailing list is also very active, and welcomes posts from new users. Before posting a new question, be sure to consult the MAILING LIST ARCHIVE and the very excellent How To Ask Questions The Smart Way by Eric Raymond. Please do be sure to turn off HTML in your email client before posting.

    There is no official, commercial support for Struts, though third parties may offer different degrees of support.

    For a listing of some Java and Struts ISPs, visit the Struts Community Resources area on SourceForge.

    If you are starting from scratch, packages like Turbine and Expresso can be very helpful since they try to provide all of the basic services that your team is likely to need. Such services include things like data persistence and logging.

    If you are not starting from scratch, and need to hook up your web application to an existing infrastructure, then "plain vanilla" Struts can be a better choice. The core Struts framework does not presuppose that you are using a given set of data persistence, presentation, or logging tools. Anything goes =:0)

    Compared to other offerings, Struts endeavors to be a minimalist framework. We try leverage existing technologies whenever we can and provide only the missing pieces you need to combine disparate technologies into a coherent application. This is great when you want to select your own tools to use with Struts. But, if you prefer a more integrated infrastructure, then packages like Turbine or Expresso (which uses Struts) are perfectly good ways to go.

    See also

    Development of both products began about the same time. Leading up to the release of 1.0, it was thought better to continue to develop the taglibs alongside the controller. Now that 1.0 is out, the JavaServer Pages Standard Taglib is in active development. Once work on JSTL stabilizes, the Struts taglibs will be revisited. Tags which are not linked directly to the framework may be hosted at Jakarta Taglibs instead.

    If you use an <html:html xhtml="true> or <html:xhtml/> element on your page, the tags will render as XHTML (since Struts 1.1).

    Struts itself is markup neutral. The original Struts taglibs are only one example of how presentation layer components can access the framework. The framework objects are exposed through the standard application, session, and request contexts, where any Java component in the application can make use of them.

    Markup extensions that use Struts are available for Velocity and XLST, among others. A new Struts tag library for Java Server Faces is also in development.

    For more about using WAP/WML with Struts see the article WAP up your EAserver.

    JSTL, the JavaServer Standard Tag Library, is a set of JSP tags that are designed to make it easier to develop Web applications. JavaServer Faces (JSF) is a specification for a new technology that promises to make it easier to write MVC applications, both for the Web and for the desktop.

    The inventor of Struts, Craig McClanahan, was a member of the expert group for the JavaServer Standard Tag Library (JSR 052) and is now the specification co-lead for JavaServer Faces (JSR 127). Both technologies are complementary to Struts.

    The mainstay of the Struts framework is the controller components, which can be used with any Java presentation technology. As new technologies become available, it is certain that new "glue" components will also appear to help these technologies work as well with Struts.

    Struts originally came bundled with a set of custom JSP tags. Today, several extensions are available to help you use Struts with other popular presentation technologies, like XSLT and Velocity. Likewise, extensions for JSTL and JSF are now available as well.

    The JSTL reference implementation is available through the Jakarta Taglibs site. A JSTL taglibs for Struts, Struts-El, is available and distributed with Struts beginning with the 1.1 release.

    Meanwhile, the JSF specification is still under development, although an early-release reference implementation is available through the Java Web Services Developer Pack. An early-release JavaServer Faces taglib for Struts, Struts-Faces, is also in early release and available through the nightly build.

    For more about what JavaServer Faces means to the Struts community, see the StrutsMoreAboutJSF wiki page.

    Struts should work well with any development environment that you would like to use, as well as with any programmers editor. The members of the Struts development team each use their own tools such as Emacs, IDEA, Eclipse, and NetBeans.

    At this writing, in the free zone, NetBeans had the edge with JSP editing, but Eclipse has more advanced refactoring features. Eclipse is also a general-purpose IDE and can be used with non-Java projects. In the non-free zone, IDEA is highly regarded but costs money. (Of course, if *you* cost money, good tools are often a good investment.)

    See the Howto Guides for more about configuring IDEs to work with Struts.

    Yes. send a blank message to < struts-user-digest-subscribe@jakarta.apache.org>.

    If you are subscribed to the digest, you can also post to the list. Just be sure to send your post to the user list rather than trying to reply to the digest.

    Not a usenet group, but the Struts User list can be accessed with your favorite newsgroup reader from the GMane News Site. Subscribe to groups gmane.comp.jakarta.struts.devel for the developer list, or gmane.comp.jakarta.struts.user for the user list.

    You must be subscribed to the user list or user digest before posting (or use the GMane Newsgroups instead).

    From the email account used to subscribe to the list, send a blank message to < struts-user-unsubscribe@jakarta.apache.org>.

    If you are receiving the digest, you must send a blank email to <struts-user-unsubscribe@jakarta.apache.org> instead.

    libstruts1.2-java-1.2.9/xdocs/faqs/netbeans.xml0000644000175000017500000002453010404045240022054 0ustar arnaudarnaud00000000000000 James Mitchell How to setup a basic Struts project using Netbeans IDE - Apache Struts
    Please read this first.

    * DISCLAIMER - This simple How-To shows you one of many ways to setup a working project using
    the Struts framework. This is mainly geared toward struts users who are new to Netbeans, and
    don't want to spend a lot of time figuring out the differences between their old IDE (if any)
    and this one.

    I will also apologize ahead of time for the formatting of this page.


    In this How-To, I will demonstrate (using Netbeans 3.4) how to setup, compile, and build a customized version of the struts-example.
    1. Create a new project.















    2. Now let's create (or reuse) a directory to hold the project. What I did was copy the struts-example.war from the Struts distribution and extracted it (using Winzip) like this:



    3. Next we need to create a build.xml to build our project. This file will sit in the root
      directory of your project. (Actually, it doesn't matter where sits so long as you make
      the appropriate changes to directories and such.)

      *Note - I will not spend any time here trying to convince you why you should be
      using Ant to build your projects. I guess I consider this to be obvious.
      Here is the build.xml file I use for this demonstration (you MUST modify this
      to use your environment):
        
        <project name="Struts Example" default="main" basedir=".">
        
          <!--  This is a basic build script, only the minimums here -->
          
          <!-- Tell ant to use my environment variables -->
          <property environment="env"/>
        
          <property file="./build.properties"/>
        
            <property name="build.compiler"     value="modern"/>
            <property name="build.dir"          value="./WEB-INF/classes" />
            <property name="src.dir"            value="./WEB-INF/src"/>
          <property name="servlet.jar"        value="/Apache_Home/jakarta-servletapi-4/lib/servlet.jar"/>
            <property name="war.file"              value="struts-example"/>
            <property name="war.file.name"      value="${war.file}.war"/>
            <property name="tomcat.home"       value="${env.CATALINA_HOME}"/>
            <property name="deploy.dir"         value="${tomcat.home}/webapps"/>
        
          <path id="project.class.path">
              <fileset dir="./WEB-INF/lib/">
                  <include name="**/*.jar"/>
              </fileset>
              <pathelement path="${src.dir}"/>
              <pathelement path="${servlet.jar}"/>
          </path>
        
            <target name="clean">
                <delete dir="${build.dir}" includeEmptyDirs="true" />
            </target>
        
        
            <target name="prep">
                <mkdir dir="${build.dir}"/>
            </target>
        
            <target name="compile">
              <javac   srcdir="${src.dir}"
                          destdir="${build.dir}"
                          debug="on"
                      deprecation="on">
                <include name="**/*.java"/>
                <classpath refid="project.class.path"/>
              </javac>
            </target>
        
            <target name="cleanWebApp">
              <delete file="${deploy.dir}/${war.file.name}" />
                <delete  dir="${deploy.dir}/${war.file}" includeEmptyDirs="true" />
            </target>
        
            <target name="war">
                <war warfile="${war.file.name}" webxml="./WEB-INF/web.xml">
                       <fileset dir="./" includes="**/*.*" excludes="*.war, **/*.nbattrs, web.xml, **/WEB-INF/**/*.*, **/project-files/**/*.*"/>
                       <webinf  dir="./WEB-INF"    includes="**/*" excludes="web.xml, **/*.jar, **/*.class"/>
                       <lib     dir="./WEB-INF/lib"/>
                       <classes dir="${build.dir}" includes="**/*.properties" />
                </war>
            </target>
        
            <target name="deploy">
                <copy todir="${deploy.dir}">
                  <fileset dir="./" includes="${war.file.name}"/>
                </copy>
            </target>
       
          <target name="main" depends="clean, prep, cleanWebApp, compile, war"/>
        
        </project>
        
        
    4. Build the project using Ant from the command line.
      Here's what I get:
        
        C:\personal\development\Projects\struts-examples\struts-example>ant
        Buildfile: build.xml
        
        clean:
           [delete] Deleting directory C:\personal\development\Projects\struts-examples\struts-example\WEB-INF\classes
        
        prep:
            [mkdir] Created dir: C:\personal\development\Projects\struts-examples\struts-example\WEB-INF\classes
        
        cleanWebApp:
           [delete] Deleting: C:\Apache_Home\jakarta-tomcat-4.0.6\webapps\struts-example.war
           [delete] Deleting directory C:\Apache_Home\jakarta-tomcat-4.0.6\webapps\struts-example
        
        compile:
            [javac] Compiling 22 source files to C:\personal\development\Projects\struts-examples\struts-example\WEB-INF\classes
            [javac] C:\personal\development\Projects\struts-examples\struts-example\WEB-INF\src\org\apache\struts\webapp\example\memory\MemoryDatabasePlugIn.java:78: warning: org.apache.struts.config.ApplicationConfig in org.apache.struts.config has been deprecated
            [javac] import org.apache.struts.config.ApplicationConfig;
            [javac]                                 ^
            [javac] C:\personal\development\Projects\struts-examples\struts-example\WEB-INF\src\org\apache\struts\webapp\example\memory\MemoryDatabasePlugIn.java:185: warning: org.apache.struts.config.ApplicationConfig in org.apache.struts.config has been deprecated
            [javac]     public void init(ActionServlet servlet, ApplicationConfig config)
            [javac]                                             ^
            [javac] C:\personal\development\Projects\struts-examples\struts-example\WEB-INF\src\org\apache\struts\webapp\example\memory\MemoryDatabasePlugIn.java:185: warning: init(org.apache.struts.action.ActionServlet,org.apache.struts.config.ApplicationConfig) in org.apache.struts.action.PlugIn has been deprecated
            [javac]     public void init(ActionServlet servlet, ApplicationConfig config)
            [javac]                 ^
            [javac] C:\personal\development\Projects\struts-examples\struts-example\WEB-INF\src\org\apache\struts\webapp\example\memory\MemoryDatabasePlugIn.java:185: warning: org.apache.struts.config.ApplicationConfig in org.apache.struts.config has been deprecated
            [javac]     public void init(ActionServlet servlet, ApplicationConfig config)
            [javac]                                             ^
            [javac] 4 warnings
        
        war:
              [war] Building war: C:\personal\development\Projects\struts-examples\struts-example\struts-example.war
        
        main:
        
        BUILD SUCCESSFUL
      Total time: 11 seconds
        

    5. If it did not build for you, verify that the external jars (external to this project) are specified correctly.
    6. Now we can finish setting up our Netbeans project

      Mount the directory where we extracted the example and where we ran the build:






    7. If specified correctly, Netbeans will parse the build.xml automatically and will use
      (mount jars) the resources that you've declared for building.



    8. I usually get rid of the additional mounted directory under /WEB-INF/classes.
      Since everything there gets overwritten with each build, I don't usually need to
      see this (or possibly make changes in the wrong place)



    9. In order for Netbeans to understand the package structure for our source code, we need
      to mount all source directories directly.

      *Note - Some IDEs will do this automatically
      (Eclipse) or can be configured from the project config file (JBuilder)






    10. Use your source mount point to add/edit/delete your .java files



    11. Using the initial mount point, expand until you can right-click on the build.xml file (or one
      of the targets) and build the project



    12. If you receive errors from Netbeans (choking on the XML parse), don't worry, I did too.
      I always call ant on the command line anyway, so I don't worry too much about the IDE's
      internal XML jars.




    13. Feel free to change the code as you like, and then build and deploy your new app.
    libstruts1.2-java-1.2.9/xdocs/faqs/newbie.xml0000644000175000017500000015250210404045244021533 0ustar arnaudarnaud00000000000000 Ted Husted James Holmes Craig R. McClanahan Edgar Dollin James Turner Phil Steitz Newbie FAQ - Apache Struts

    Here are answers to the most common questions people ask when using Struts on their first project. For an in-depth, searchable FAQ, visit our friends at JGuru.

    If you like to contribute, there is a list of undocumented questions at the end of this page.

    The problem with ReloadAction was that Struts was trying to act like a container, but it couldn't do a proper job of it. For example, you can't reload classes that have been modified, or (portably) add new classes to a running web application (even if the container supported it).

    Meanwhile, as 1.1 was being developed, work progressed on things like Tomcat's reload command via the Manager webapp. This feature allows you to quickly reload-on-demand, complete with saving and restoring your session). It started to make even less sense for Struts to half-implement a feature that containers are implementing fully.

    A more minor point is that freezing the configuration information at application startup time allows Struts to safely access the mapping information without bothering with synchronization. The "startup-only" strategy creates a modest but real improvement in performance for all users.

    So, ReloadAction is not supported in 1.1 for two reasons:

    • It never did let you reload everything that you would really want to -- particularly changed classes -- so many people ended up having to reload the webapp anyway.
    • Containers are starting to offer reload-on-demand features which does the same thing as the Struts ReloadAction, only better.
    • Not supporting ReloadAction lets Struts avoid doing synchronization locks around all the lookups (like figuring out which action to use, or the destination of an ActionForward) so applications can run a little faster.

    Of course, if someone came up with an implementation that solved these problems without creating any others, we would not be opposed to including a new ReloadAction.

    Since Struts 1.1, the framework supports multiple application modules. All applications have at least one root, or default, module. Like the root directory in a file system, the default application has no name. (Or is named with an empty string, depending your viewpoint.) Developing an application with only a default module is no different from how applications were developed under Struts 1.0. Since Struts 1.1, you can add additional modules to your application, each of which can have their own configuration files, messages resources, and so forth. Each module is developed in the same way as the default module. Applications that were developed as a single module can added to a multiple module application, and modules can promoted to a standalone application without change. For more about configuring your application to support multiple modules, see Configuring Applications in the User Guide.

    But to answer the question =:0), a modular application is a Struts application that uses more than one module. Module-relative means that the URI starts at the application-module level, rather than at the application-context level, or the absolute-URL level.

    • Absolute URL: http://localhost/myApplication/myModule/myAction.do
    • context-relative: /myModule/myAction.do
    • module-relative: /myAction.do

    The framework grew in the telling and as it evolved some of the names drifted.

    The good thing about a nightly build, is that everything becomes available to the community as soon as it is written. The bad thing about a nightly build is that things like class names get locked down early and then become difficult to change.

    http://www.mail-archive.com/struts-user@jakarta.apache.org/msg19281.html
    http://www.mail-archive.com/struts-user@jakarta.apache.org/msg19338.html
    http://www.mail-archive.com/struts-user@jakarta.apache.org/msg20833.html

    The MVC design pattern is very simple to understand but much more difficult to live with. You just need this little bit of Business Logic in the View logic or you need just that little bit of View logic in the Business tier and pretty soon you have a real mess.

    Making ActionForm a class takes advantage of the single inheritance restriction of Java to it makes it more difficult for people to do things that they should not do.

    ActionForms implemented as interfaces encourage making the property types match the underlying business tier instead of Strings, which violates one of the primary purposes for ActionForms in the first place (the ability to reproduce invalid input, which is a fundamental user expectation). ActionForms as an interface would also encourage using existing DAO objects as ActionForms by adding ‘implements ActionForm’ to the class. This violates the MVC design pattern goal of separation of the view and business logic.

    Since the goal of struts is to enforce this separation, it just makes more sense for Struts to own the ActionForm.

    The utilities that Struts uses (Commons-BeanUtils since 1.1) require that ActionForm properties follow the JavaBean patterns for mutators and accessors (get*,set*,is*). Since Struts uses the Introspection API with the ActionForms, some containers may require that all the JavaBean patterns be followed, including declaring "implements Serializable" for each subclass. The safest thing is to review the JavaBean specification and follow all the prescribed patterns.

    Yes. Define the element as an array and Struts will autopopulate it like any other.

    
    private String[] id= {};
    public String[] getId() { return this.id; }
    public void setItem(String id[]) {this.id = id;}
    
    

    And so forth

    Yes. The issue is that only one action class can be associated with a single form. So the real issue is how do I decode multiple submit types to a single Action class. There is more than one way to achieve this functionality.

    The way that is suggested by struts is right out of the javadoc for LookupDispatchAction. Basically, LookupDispatchAction is using the keys from ApplicationProperties.resources as keys to a map of actions available to your Action class. It uses reflection to decode the request and invoke the proper action. It also takes advantage of the struts <html:submit> tags and is straight forward to implement.

    You can roll your own with JavaScript events and javascript:void (document.forms["myform"].submit) on any html element. This gives you control of how you want your page to look. Again you will have to decode the expected action in the execute method of your action form if you choose this route.

    Unfortunately, there is some disagreement between the various browsers, and different versions of the same browser, as to how the focus can be set. The <html:form> tag provides a quick and easy JavaScript that will set the focus on a form for most versions of most browsers. If this feature doesn't work for you, then you should set the focus using your own JavaScript. The focus feature is a convenient "value-add" -- not a core requirement of the tag. If you do come up with a JavaScript that provides the final solution to this project, please post your patch to this Bugzilla ticket.

    A problem with a checkbox is that the browser will only include it in the request when it is checked. If it is not checked, the HTML specification suggests that it not be sent (i.e. omitted from the request). If the value of the checkbox is being persisted, either in a session bean or in the model, a checked box can never unchecked by a HTML form -- because the form can never send a signal to uncheck the box. The application must somehow ascertain that since the element was not sent that the corresponding value is unchecked.

    The recommended approach for Struts applications is to use the reset method in the ActionForm to set all properties represented by checkboxes to null or false. The checked boxes submitted by the form will then set those properties to true. The omitted properties will remain false. Another solution is to use radio buttons instead, which always submit a value.

    It is important to note that the HTML specification recommends this same behavior whenever a control is not "successful". Any blank element in a HTML form is not guaranteed to submitted. It is therefor very important to set the default values for an ActionForm correctly, and to implement the reset method when the ActionForm might kept in session scope.

    You can submit a form with a link as below. BTW, the examples below assume you are in an <html:form> block and 'myForm' is picked up from the struts-config.xml name field of the action.

    
        <a href='javascript:void(document.forms["myForm"].submit()>My Link</a>
    

    Now the trick in the action is to decode what action you intend to perform. Since you are using JavaScript, you could set a field value and look for it in the request or in the form.

    ... html/javascript part ...

    
            <input type='hidden' value='myAction' />
            <input type='button' value='Save Meeeee'
                onclick='document.forms["myForm"].myAction.value="save";
                         document.forms["myForm"].submit();' />
            <input type='button' value='Delete Meeeee'
                onclick='document.forms["myForm"].myAction.value="delete";
                         document.forms["myForm"].submit();' />
    

    ... the java part ...

    
            class MyAction extends ActionForm implements Serializable {
    
                public ActionForward execute (ActionMapping map, ActionForm form,
                    HttpServletRequest req, HttpServletResponse) {
    
                        String myAction = req.getParameter("myAction");
    
                        if (myAction.equals("save") {
                               // ...  save action  ...
                        } else if (myAction.equals("delete") {
                               // ...  delete action  ...
                        }
                    }
                }
            }
    

    This is just one of many ways to achieve submitting a form and decoding the intended action. Once you get used to the framework you will find other ways that make more sense for your coding style and requirements. Just remember this example is completely non-functional without JavaScript.

    Here is a link which utilizes the LookupDispatch action to submit forms with multiple actions without javascript: http://husted.com/struts/tips/003.html

    Struts is mainly a server-side technology. We bundled in some JSP tags to expose the framework components to your presentation page, but past that, the usual development process applies.

    Interactive pages require the use of JavaScript. (That's why it was invented.) If you want things popping up or doing this when they click that, you are outside the scope of Struts and back into the web development mainstream.

    You use JavaScript with Struts the same way you use with any presentation page. Since JavaScript is a client-side technology, you can use simple relative references to your scripts. If you need to fire a JavaScript from a HTML control, the Struts HTML tags have properties for the JavaScript events.

    A very good JavaScript resource is Matt Kruse's site at http://www.mattkruse.com/javascript/

    No. You need to set checkbox properties to false if the ActionForm is being retained in session scope. This is because an unchecked box does not submit an attribute. Only checked boxes submit attributes. If the form is in session scope, and the checkbox was checked, there is no way to turn it back off without the reset method. Resetting the properties for other controls, or for a request scope form, is pointless. If the form is in request scope, everything already just started at the initial value.

    Struts is designed to encourage a Model 2/MVC architecture. But there is nothing that prevents you from using Model 1 techniques in your JavaServer Pages, so the answer to the question is "Yes, you can".

    Though, using Model 1 techniques in a Struts application does go against the grain. The approach recommended by most Struts developers is to create and populate whatever objects the view may need in the Action, and then forward these through the request. Some objects may also be created and stored in the session or application context, depending on how they are used.

    Likewise, there is nothing to prevent you from using scriptlets along with JSP tags in your pages. Though, many Struts developers report writing very complex scriplet-free applications and recommend the JSP tag approach to others.

    For help with Model 1 techniques and scriptlets, you might consider joining the Javasoft JSP-interest mailing list, where there are more people still using these approaches.

    Yes. There are several ways that you can use other beans or hashmaps with ActionForms.

    • ActionForms can have other beansor hashmaps as properties
    • "Value Beans" or "Data Transfer Objects" (DTOs) can be used independently of ActionForms to transfer data to the view
    • ActionForms can use Maps to support "dynamic" properties (since Struts 1.1)

    ActionForms (a.k.a. "form beans") are really just Java beans (with a few special methods) that Struts creates and puts into session or request scope for you. There is nothing preventing you from using other beans, or including them in your form beans. Here are some examples:

    Collections as properties Suppose that you need to display a pulldown list of available colors on an input form in your application. You can include a string-valued colorSelected property in your ActionForm to represent the user's selection and a colorOptions property implemented as a Collection (of strings) to store the available color choices. Assuming that you have defined the getters and setters for the colorSelected and colorOptions properties in your orderEntryForm form bean, you can render the pulldown list using:

    
        <html:select property="colorSelected">
          <html:options property="colorOptions" name="orderEntryForm"/>
        </html:select>
        

    The list will be populated using the strings in the colorOptions collection of the orderEntryForm and the value that the user selects will go into the colorSelected property that gets posted to the subsequent Action. Note that we are assuming here that the colorOptions property of the orderEntryForm has already been set.

    See How can I prepopulate a form? for instructions on how to set form bean properties before rendering edit forms that expect properties to be pre-set.

    Independent DTO An Action that retrieves a list of open orders (as an ArrayList of Order objects) can use a DTO independently of any form bean to transfer search results to the view. First, the Action's execute method performs the search and puts the DTO into the request:

    
        ArrayList results = businessObject.executeSearch(searchParameters);
        request.setAttribute("searchResults",results);
        

    Then the view can iterate through the results using the "searchResults" request key to reference the DTO: `

    
        <logic:iterate id="order" name="searchResults" type="com.foo.bar.Order">
            <tr><td><bean:write name="order" property="orderNumber"/><td>
                <td>..other properties...</td></tr>
        </logic:iterate>
        

    See also: Map-Backed ActionForms (since Struts 1.1)

    The Struts tags seem to provide only the most rudimentary functionality. Why is there not better support for date formatting and advanced string handling?

    Three reasons:

    First, work started on the JSTL and we didn't want to duplicate the effort.

    Second, work started on Java Server Faces, and we didn't want to duplicate that effort either.

    Third, in a Model 2 application, most of the formatting can be handled in the ActionForms (or in the business tier), so all the tag has to do is spit out a string. This leads to better reuse since the same "how to format" code does not need to be repeated in every instance. You can "say it once" in a JavaBean and be done with it.

    Since the Struts tags are open source, you can extend them to provide whatever additional formatting you may need. If you are interested in a pre-written taglib that offers more layout options, see the struts-layout taglib.

    In the same arena, there is a well regarded contributor taglib that can help you create Menus for your Struts applications.

    The <html:link> tag is not intended for use with client-side references like those used to launch Javascripts or email clients. The purpose of link tag is to interject the context (or module) path into the URI so that your server-side links are not dependent on your context (or module) name. It also encodes the link, as needed, to maintain the client's session on the server. Neither feature applies to client-side links, so there is no reason to use the <html:link> tag. Simply markup the client-side links using the standard tag.

    http://www.mail-archive.com/struts-user@jakarta.apache.org/msg24504.html
    http://www.mail-archive.com/struts-user@jakarta.apache.org/msg22949.html

    Many Struts developers use the Pager from the JSPTags site.

    http://jsptags.com/tags/navigation/pager/

    Attribute minimization (that is, specifying an attribute with no value) is a place where HTML violates standard XML syntax rules. This matters a lot for people writing to browsers that support XHTML, where doing so makes the page invalid.It's much better for Struts to use the expanded syntax, which works the same on existing browsers interpreting HTML, and newer browsers that expect XHTML-compliant syntax. Struts is following the behavior recommended by the XHTML specification

    The short answer to this question is: No, you are not limited to JavaServer Pages.

    The longer answer is that you can use any type of presentation technology which can be returned by a web server or Java container. The list includes but is not limited to:

    • JavaServer Pages,
    • HTML pages,
    • WML files,
    • Java servlets,
    • Velocity templates, and
    • XML/XLST

    Some people even mix and match apparently unrelated technologies, like PHP, into the same web application.

    ActionForms are added to a servlet scope (session or request) as beans. What this means is that, for certain functionality to be available, your ActionForms will have to follow a few simple rules.

    First, your ActionForm bean must have a zero-arguments constructor. This is required because Struts must be able to dynamically create new instances of your form bean class, while knowing only the class name. This is not an onerous restriction, however, because Struts will also populate your form bean's properties (from the request parameters) for you.

    Second, the fields of your form bean are made available to the framework by supplying public getter and setter methods that follow the naming design patterns described in the JavaBeans Specification. For most users, that means using the following idiom for each of your form bean's properties:

            private {type} fieldName;
    
            public {type} getFieldName() {
                return (this.fieldName);
            }
    
            public void setFieldName({type} fieldName) {
                this.fieldName = fieldName;
            }
        

    NOTE - you MUST obey the capitalization conventions shown above for your ActionForm properties to be recognized. The property name in this example is "fieldName", and that must also be the name of the input field that corresponds to this property. A bean property may have a "getter" method and a "setter" method (in a form bean, it is typical to have both) whose name starts with "get" or "set", followed by the property name with the first character capitalized. (For boolean properties, it is also legal to use "is" instead of "get" as the prefix for the getter method.)

    Advanced JavaBeans users will know that you can tell the system you want to use different names for the getter and setter methods, by using a java.beans.BeanInfo class associated with your form bean. Normally, however, it is much more convenient to follow the standard conventions.

    WARNING - developers might be tempted to use one of the following techniques, but any of them will cause your property not to be recognized by the JavaBeans introspection facilities, and therefore cause your applications to misbehave:

    • Using getter and setter method names that do not match - if you have a getFoo() method for your getter, but a setBar() method for your setter, Java will not recognize these methods as referring to the same property. Instead, the language will think you have a read-only property named "foo" and a write-only property named "bar".
    • Using more than one setter method with the same name - The Java language lets you "overload" methods, as long as the argument types are different. For example, you could have a setStartDate(java.util.Date date) method and a setStartDate(String date) method in the same class, and the compiled code would know which method to call based on the parameter type being passed. However, doing this for form bean properties will prevent Java from recognizing that you have a "startDate" property at all.

    There are other rules to follow if you want other features of your form beans to be exposed. These include indexed attributes and mapped attributes. They are covered in detail in other areas of the Struts documentation, in particular:

    indexedprops.html

    For a complete explanation of what a JavaBean is, and everything it can do, see the JavaBeans Specification (version 1.01) at:

    http://java.sun.com/products/javabeans/docs/beans.101.pdf

    This is an interesting question. As a newbie, it is a good practice to create a new ActionForm for each action sequence. You can use DynaActionForms to help reduce the effort required, or use the code generation facilities of your IDE.

    Some issues to keep in mind regarding reuse of form beans are as follows:

    • Validation - You might need to use different validation rules depending upon the action that is currently being executed.
    • Persistence - Be careful that a form populated in one action is not unexpectedly reused in a different action. Multiple <form-bean> entries in struts-config.xml for the same ActionForm subclass can help (especially if you store your form beans in session scope). Alternatively, storing form beans in request scope can avoid unexpected interactions (as well as reduce the memory footprint of your application, because no server-side objects will need to be saved in between requests.
    • Checkboxes - If you do as recommended and reset your boolean properties (for fields presented as checkboxes), and the page you are currently displaying does not have a checkbox for every boolean property on the form bean, the undisplayed boolean properties will always appear to have a false value.
    • Workflow - The most common need for form bean reuse is workflow. Out of the box, Struts has limited support for workflow, but a common pattern is to use a single form bean with all of the properties for all of the pages of a workflow. You will need a good understanding of the environment (ActionForms, Actions, etc.) prior to being able to put together a smooth workflow environment using a single form bean.

    As you get more comfortable, there are a few shortcuts you can take in order to reuse your ActionForm beans. Most of these shortcuts depend on how you have chosen to implement your Action / ActionForm combinations.

    The simplest way to prepopulate a form is to have an Action whose sole purpose is to populate an ActionForm and forward to the servlet or JSP to render that form back to the client. A separate Action would then be use to process the submitted form fields, by declaring an instance of the same form bean name.

    The struts-example example application that is shipped with Struts illustrates this design pattern nicely. Note the following definitions from the struts-config.xml file:

            ...
            <form-beans>
                ...
                <-- Registration form bean -->
                <form-bean name="registrationForm"
                           type="org.apache.struts.webapp.example.RegistrationForm"/>
                ...
            </form-beans>
            ...
            <action-mappings>
                ...
                <-- Edit user registration -->
                <action path="/editRegistration"
                        type="org.apache.struts.webapp.example.EditRegistrationAction"
                        name="registrationForm"
                       scope="request"
                    validate="false"/>
                ...
                <-- Save user registration -->
                <action path="/saveRegistration"
                        type="org.apache.struts.webapp.example.SaveRegistrationAction"
                        name="registrationForm"
                       input="registration"
                       scope="request"/>
                ...
            </action-mappings>
        

    Note the following features of this approach:

    • Both the /editRegistration and /saveRegistration actions use the same form bean.
    • When the /editRegistration action is entered, Struts will have pre-created an empty form bean instance, and passed it to the execute() method. The setup action is free to preconfigure the values that will be displayed when the form is rendered, simply by setting the corresponding form bean properties.
    • When the setup action completes configuring the properties of the form bean, it should return an ActionForm that points at the page which will display this form. If you are using the Struts JSP tag library, the action attribute on your <html:form> tag will be set to /saveRegistration in order for the form to be submitted to the processing action.
    • Note that the setup action (/editRegistration) turns off validation on the form that is being set up. You will normally want to include this attribute in the configuration of your setup actions, because you are not planning to actually process the results -- you simply want to take advantage of the fact that Struts will precreate a form bean instance of the correct class for you.
    • The processing action (/saveRegistration), on the other hand, leaves out the validate attribute, which defaults to true. This tells Struts to perform the validations associated with this form bean before invoking the processing action at all. If any validation errors have occurred, Struts will forward back to your input page (technically, it forwards back to an ActionForward named "registration" in this case, because the example webapp uses the inputForward attribute in the <controller> element -- see the documentation describing struts-config.xml for more information) instead of calling your processing action.

    Yes. If your Action does not need any data and it does not need to make any data available to the view or controller component that it forwards to, it doesn't need a form. A good example of an Action with no ActionForm is the LogoffAction in the struts example application:

        <action path="/logoff"
            type="org.apache.struts.webapp.example.LogoffAction">
          <forward name="success" path="/index.jsp"/>
        </action>
    

    This action needs no data other than the user's session, which it can get from the Request, and it doesn't need to prepare any view elements for display, so it does not need a form.

    However, you cannot use the <html:form> tag without an ActionForm. Even if you want to use the <html:form> tag with a simple Action that does not require input, the tag will expect you to use some type of ActionForm, even if it is an empty subclass without any properties.

    First off, there's an even newer Validator rule called validwhen, which is almost certainly what you want to use, since it is much easier and more powerful. It will be available in the first release after 1.1 ships. The example shown below could be coded with validwhen as:

    <form name="medicalStatusForm">
    
    <field
        property="pregnancyTest" depends="validwhen">
      <arg0 key="medicalStatusForm.pregnancyTest.label"/>
      <var>
        <var-name>test</var-name>
        <var-value>((((sex == 'm') OR (sex == 'M')) AND (*this* == null)) OR (*this* != null))</test>
      </var>
    </field>
    

    Let's assume you have a medical information form with three fields, sex, pregnancyTest, and testResult. If sex is 'f' or 'F', pregnancyTest is required. If pregnancyTest is not blank, testResult is required. The entry in your validation.xml file would look like this:

    <form name="medicalStatusForm">
    
    <field
        property="pregnancyTest" depends="requiredif">
      <arg0 key="medicalStatusForm.pregnancyTest.label"/>
      <var>
        <var-name>field[0]</var-name>
        <var-value>sex</var-value>
      </var>
      <var>
        <var-name>fieldTest[0]</var-name>
        <var-value>EQUAL</var-value>
      </var>
      <var>
        <var-name>fieldValue[0]</var-name>
        <var-value>F</var-value>
      </var>
      <var>
        <var-name>field[1]</var-name>
        <var-value>sex</var-value>
      </var>
      <var>
        <var-name>fieldTest[1]</var-name>
        <var-value>EQUAL</var-value>
      </var>
      <var>
        <var-name>fieldValue[1]</var-name>
        <var-value>f</var-value>
      </var>
      <var>
        <var-name>fieldJoin</var-name>
        <var-value>OR</var-value>
      </var>
    </field>
    
    <field
        property="testResult" depends="requiredif">
      <arg0 key="medicalStatusForm.testResult.label"/>
      <var>
        <var-name>field[0]</var-name>
        <var-value>pregnancyTest</var-value>
      </var>
      <var>
        <var-name>fieldTest[0]</var-name>
        <var-value>NOTNULL</var-value>
      </var>
    </field>
    </form>
    

    This is an excellent question. Let's step back a second and think about a typical mid to large size application. If we start from the back end and work toward the view we have:

    1) Database: Most modern databases are going to validate for required fields, duplicate records, security constraints, etc.

    2) Business Logic: Here you are going to check for valid data relationships and things that make sense for the particular problem you are triing to solve.

    ... This is where struts comes into the picture, by now the system should be pretty well bulletproof. What we are going to do is make validation friendlier and informative. Rember it is OK to have duplicate validations...

    3) ActionErrors validate(ActionMapping map, HttpServletRequest req) is where you can do your validation and feed back to the view, information required to correct any errors. validate is run after the form has been reset and after the ActionForm properties have been set from corresponding view based input. Also remember you can turn validation off with validate="false" in the action mapping in the struts-config.xml. This is done by returning an ActionErrors collection with messages from your ApplicationResources.properties file.

    Here you have access to the request so you can see what kinds of action is being requested to fine tune your validations. The <html:error> tag allows you to dump all errors on your page or a particular error associated with a particular property. The input attribute of the struts-config.xml action allows you to send validation errors to a particular jsp / html / tile page.

    4) You can have the system perform low level validations and client side feedback using a ValidatorForm or its derivatives. This will generate javascript and give instant feedback to the user for simple data entry errors. You code your validations in the validator-rules.xml file. A working knowledge of regular expressions is necessary to use this feature effectively. For more information, see User Guide

    The simplest way is to have two actions. The first one has the job of setting the form data, i.e. a blank registration screen. The second action in our writes the registration data to the database. Struts would take care of invoking the validation and returning the user to the correct screen if validation was not complete.

    The EditRegistration action in the struts example application illustrates this:

    
        <action path="/editRegistration"
             type="org.apache.struts.webapp.example.EditRegistrationAction"
             attribute="registrationForm"
             scope="request"
             validate="false">
          <forward name="success  path="/registration.jsp"/>
        </action>
            

    When the /editRegistration action is invoked, a registrationForm is created and added to the request, but its validate method is not called. The default value of the validate attribute is true, so if you do not want an action to trigger form validation, you need to remember to add this attribute and set it to false.

    The basic idea is a series of actions with next, back, cancel and finish actions with a common bean. Using a LookupDispatchAction is reccomended as it fits the design pattern well and can be internationalized easily. Since the bean is shared, each choice made will add data to the wizards base of information. A sample of struts-config.xml follows:

    
                <form-beans>
                    <form-bean  name="MyWizard"
                                type="forms.MyWizard" />
                </form-beans>
    
            <!-- the first screen of the wizard (next action only available) -->
            <!-- no validation, since the finish action is not available -->
                <actions>
                    <action path="/mywizard1"
                            type="actions.MyWizard"
                            name="MyWizard"
                            validate="false"
                            input="/WEB-INF/jsp/mywizard1.jsp">
                        <forward name="next"
                            path="/WEB-INF/jsp/mywizard2.jsp" />
                        <forward name="cancel"
                            path="/WEB-INF/jsp/mywizardcancel.jsp" />
                    </action>
    
                    <!-- the second screen of the wizard (back, next and finish) -->
                    <!-- since finish action is available, bean should validated, note
            validation should not necessarily validate if back action requested, you
            might delay validation or do conditional validation -->
                    <action path="/mywizard2"
                            type="actions.MyWizard"
                            name="MyWizard"
                            validate="true"
                            input="/WEB-INF/jsp/mywizard2.jsp">
                        <forward name="back"
                            path="/WEB-INF/jsp/mywizard1.jsp" />
                        <forward name="next"
                            path="/WEB-INF/jsp/mywizard3.jsp" />
                        <forward name="finish"
                            path="/WEB-INF/jsp/mywizarddone.jsp" />
                        <forward name="cancel"
                            path="/WEB-INF/jsp/mywizardcancel.jsp" />
                    </action>
    
                    <!-- the last screen of the wizard (back, finish and cancel only) -->
                    <action path="/mywizard3"
                            type="actions.MyWizard"
                            name="MyWizard"
                            validate="true"
                            input="/WEB-INF/jsp/mywizard3.jsp">
                        <forward name="back"
                            path="/WEB-INF/jsp/mywizard2.jsp" />
                        <forward name="finish"
                            path="/WEB-INF/jsp/mywizarddone.jsp" />
                        <forward name="cancel"
                            path="/WEB-INF/jsp/mywizardcancel.jsp" />
                    </action>
        

    The pieces of the wizard are as follows:

    forms.MyWizard.java - the form bean holding the information required

    actions.MyWizard.java - the actions of the wizard, note the use of LookupDispatchAction allows for one action class with several methods. All the real work will be done in the 'finish' method.

    mywizard[x].jsp - the data collection jsp's

    mywizarddone.jsp - the 'success' page

    mywizardcancel.jsp - the 'cancel' page

    Chaining actions can be done by simply using the proper mapping in your forward entries in the struts-config.xml file. Assume you had the following two classes:

    Then you can chain together these two actions with the Struts configuration as shown in the following excerpt:

    
           
              
           
           
              
           
        
        ...
        ]]>

    Here we are assuming you are using a suffix-based (.do) servlet mapping, which is recommended since module support requires it. When you send your browser to the web application and name the action A.do (i.e. http://localhost:8080/app/A.do) it will execute AAction.execute(), which will then forward to the "success" mapping.

    This causes the execution of BAction.execute() since the <forward> entry for "success" in the configuration file uses the .do suffix.

    Of course it is also possible to chain actions programmatically, but the power and ease of being able to "reroute" your web application's structure using the XML configuration file is much easier to maintain.

    As a rule, chaining Actions is not recommended. If your business classes are properly factored, you should be able to call whatever methods you need from any Action, without splicing them together into a cybernetic Rube Goldberg device.

    If you must chain Actions, be aware of the following: calling the second Action from the first Action has the same effect as calling the second Action from scratch. If both of your Actions change the properties of a formbean, the changes made by the first Action will be lost because Struts calls the reset() method on the formbean when the second Action is called.

    • How can I capture binary or formatted values, like dates or telephone numbers?
    • Why do my option lists disappear when validation fails?
    • Why can't I disable URL-encoding in the Struts taglibs?
    • Can I create dynamic ActionForwards?
    • How can I use my own (ActionForm, ActionForward, ActionMapping, ActionServlet) class?
    libstruts1.2-java-1.2.9/xdocs/faqs/project.xml0000644000175000017500000000311110404045216021716 0ustar arnaudarnaud00000000000000 Apache Struts Web Application Framework libstruts1.2-java-1.2.9/xdocs/faqs/ssl.xml0000644000175000017500000001416710404045244021067 0ustar arnaudarnaud00000000000000 Steve Ditlinger Secure Socket Layer and Web Applications - Apache Struts

    Many web applications, especially those deployed for e-commerce, necessitate the transmission of sensitive data between the web server and the client browser. This data may include passwords, credit card numbers, bank account numbers or any other information that users would not want to divulge to the general public. To protect sensitive data during transmission, application developers typically use the Secure Sockets Layer (SSL) and its companion protocol, HTTP over Secure Sockets Layer (HTTPS). HTTPS employs SSL to protect data by encrypting it at the source, be it the server or the client, and decrypting it at the destination. This prevents anyone monitoring Internet data transmissions from easily capturing this data. The client and server exchange public keys to enable encryption and decryption to occur.

    The encryption/decryption process comes at a performance price, however. The throughput of data for a web server transmitting via HTTPS is often as little as one-tenth that of data transmission via HTTP. For this reason, it is undesirable to deploy an entire web application under SSL. For fastest performance, it is best to deploy a web application under HTTP and employ HTTPS only for those pages and processes that transmit sensitive data.

    Switching back and forth between the two protocols can require hard-coding the protocol and full URL in every link to each resource in the web application. This creates an ongoing maintenance headache for developers each time a server name changes or secure protocol requirements change for resources in the web app.

    Another significant hazard is that there is nothing to prevent a user from specifying the wrong protocol by manually entering a URL into the browser. The penalty for manually specifying HTTPS for a page or servlet that does not require HTTPS is reduced performance. Far worse is the penalty for manually specifying HTTP for non-secure access of a page that does require HTTPS: public exposure of sensitive data.

    To help overcome the problem of non-secure access of sensitive data, the Java Servlet Specification (versions 2.2 and 2.3) defines the transport-guarantee element of the web.xml deployment descriptor file. The transport-guarantee element must specify one of three types of protection for communication between client and server: NONE, INTEGRAL, or CONFIDENTIAL. For most containers a specification of INTEGRAL or CONFIDENTIAL is treated as a requirement for SSL usage. Web application containers will prevent users from accessing web resources over HTTP if they have been so specified.

    The implementation for blocking HTTP access to web resources specified as INTEGRAL or CONFIDENTIAL varies from container to container. If a user attempts to access such a resource over HTTP, some containers will present that user with an error message instructing them to use the HTTPS protocol for accessing the requested resource. Other containers will actually redirect the request using the HTTPS protocol, but then continue using the HTTPS protocol for all subsequent requests, even those for resources with a transport-guarantee specification of NONE.

    An extension to Struts 1.1, named sslext, helps solve many of these issues for Struts developers. It extends the ActionConfig class, RequestProcessor, and Plugin classes to define a framework where developers may specify the transmission protocol behavior for Struts applications. Within the Struts configuration file, developers specify which action requests require HTTPS transmission and which should use HTTP. Developers can also specify whether to redirect "improperly-protocoled" requests to the correct protocol.

    In addition to these extensions, the <html:link> and the <html:form> tags have been extended. In these extensions, the Struts actions specified in either of these tags are analyzed to determine the protocol that should be used in requesting that action. The HTML generated by these tags will specify the proper protocol. An additional custom tag is defined for allowing users to specify the transmission protocol for an individual JSP. This is most often used for form-based authentication pages.

    The sslext library may be obtained from http://sslext.sourceforge.net

    One additional complication faced by developers of web applications is that some browsers (e.g. pre-6.0 versions of Netscape Navigator) will treat requests to different protocols and ports on the same server as requests to different domains. This causes these browsers to initiate a new session each time a different protocol or port is specified in a request. This problem can only be solved at the container level. Some containers have a "session domain" or "cookie domain" configuration parameter to allow the session to be shared across different servers in the same domain. As an example, the Weblogic Server has a "CookieDomain" property configured in its weblogic.xml deployment descriptor. Thankfully, the effects of this problem are diminishing as people upgrade their browsers to the current versions.

    The procedure for configuring SSL for a container will be specific to that container. The procedure for enabling SSL for Tomcat can be found here.
    libstruts1.2-java-1.2.9/xdocs/faqs/struts-el.xml0000644000175000017500000001212710404045224022220 0ustar arnaudarnaud00000000000000 David Karr Struts EL Extension - Apache Struts

    This subproject is an extension of the Struts tag library. Each JSP custom tag in this library is a subclass of an associated tag in the Struts tag library. One difference is that this tag library does not use "rtexprvalues", it uses the expression evaluation engine in the Jakarta Taglibs implementation of the JSP Standard Tag Library (version 1.0) to evaluate attribute values.

    In addition, some of the Struts tags were not ported to this library, as it was determined that their functionality was entirely supplied by the JSTL. These particular Struts tags, and the reason for their non-porting will be described in the documentation for this library.

    In order to fully understand the correct utilization of this library, you must understand the use and operation of the Struts tag library, and the use and operation of the JavaServer Pages Standard Tag Library (hereafter called the "JSTL"), along with the expression language (sometimes called the "EL") used for evaluating attribute values.

    In implementing the Struts-EL library, every Struts tag that provides a feature that is not covered by the JSTL (1.0) library is mapped into the Struts-EL library. This section reviews which Struts tags are NOT implemented in the Struts-EL library, and which JSTL tags provide that feature.

    Many of the non-porting decisions were based on the fact that the JSTL expression language itself provides the same functionality. In those cases, in addition to a possible JSTL tag name, the symbol "EL" will be listed.

    Bean Tag Library Tags NOT Implemented in Struts-EL

    Struts TagJSTL Tag
    cookiec:set, EL
    definec:set, EL
    headerc:set, EL
    includec:import
    parameterc:set, EL
    write c:out

    Bean Tag Library Tags NOT Implemented in Struts-EL

    Struts TagJSTL Tag
    emptyc:if, c:when, EL
    equalc:if, c:when, EL
    greaterEqualc:if, c:when, EL
    greaterThanc:if, c:when, EL
    lessEqualc:if, c:when, EL
    lessThanc:if, c:when, EL
    notEmptyc:if, c:when, EL
    notEqualc:if, c:when, EL

    (Note that the "iterate" tag was originally ported, even with the presence of the "c:forEach" tag, as the "indexed tag" functionality was not supported when using "c:forEach" instead of "logic:iterate". This has since been rectified, such that the "indexed tag" functionality checks for being contained in a "c:forEach" tag, in addition to the "logic:iterate" tag. However, the ported "iterate" tag has not been removed from Struts-EL, for backward compatibility.)

    Html Tag Library Tags NOT Implemented in Struts-EL

    None (all of them were ported).

    At this point of the implementation, there is only one change (to two similar tags) to the set of attributes between the Struts tags, and the Struts-EL tags. The "logic:match" and "logic:notMatch" tags have an additional attribute named "expr", which can take any value, and will be used as the value to compare against, in addition to the choices of "cookie", "header", "name"/"property", and "parameter".

    The Struts-EL tag library requires the use of the Struts tag library, and the Java Server Pages Standard Tag Library. It is not necessary for JSP pages using the Struts-EL tag library to also use the Struts tags or the JSTL tags, but the Struts and JSTL tag libraries need to be part of the application utilizing the Struts-EL tag library.

    This is because the Struts-EL tag classes are all subclasses of Struts tag classes, and their implementation uses classes provided by the JSTL.

    libstruts1.2-java-1.2.9/xdocs/faqs/works.xml0000644000175000017500000002077410404045234021433 0ustar arnaudarnaud00000000000000 Anthony Kay How Does Struts Work? - Apache Struts

    Java Servlets are designed to handle requests made by Web browsers. Java ServerPages are designed to create dynamic Web pages that can turn billboard sites into live applications. Struts uses a special Servlet as a switchboard to route requests from Web browsers to the appropriate ServerPage. This makes Web applications much easier to design, create, and maintain.

    Here is some more detail on the mechanisms and dependencies of Struts:

    • The web application that you develop has a deployment descriptor (WEB-INF/web.xml) which you must write. This file describes the configuration of your web application, including welcome pages (the file that is shown in a directory when none is specified by the request), mappings to servlets (path or extension name), and parameters to those servlets.
      In this file, you configure the Struts ActionServlet as the servlet that will handle all requests for a given mapping (usually the extension .do). This is the "switchboard" mentioned above.
      In this same file, you configure the ActionServlet to use one or more configuration files for Struts itself.
      For this text, assume we are installing the web application on the server at /myapp, and are using the simplest possible configuration from there.
      If you need more details on deployment descriptors, read the Servlet Specification available from Sun Microsystem's Java site.
    • In the Struts configuration file(s), you associate paths with the controller components of your application, known as Action classes (i.e. "login" ==> LoginAction class). This tells the Struts ActionServlet that when the incoming request is http://myhost/myapp/login.do it should invoke your controller component LoginAction.
      Note the extension .do in this URL. The extension causes your container (i.e. Tomcat) to call the ActionServlet, which sees the word "login" as the thing you want to do. The configuration is referenced, and your LoginAction is executed.
    • For each Action, you also configure Struts with the names of the resulting page(s) that can be shown as a result of that action. There can be more than one view as the result of an action (often, there are at least two: one for success, and one for failure).
      Your Action (the controller component you write) is based on these logical result mapping names. It reports back to the ActionServlet using words like "success", "failure", "ready", "ok", "UserIsIncompetent", etc. The Struts system (through the configuration that you wrote) knows how to forward to the proper specific page. This has the added advantage of reconfiguration of the view layer by simply editing the Struts XML configuration file.
      At this point Struts knows how to delegate to your controller components, and what to show as a result of your controller processing. The "model" part of the application is completely up to you, and is called from within your controller components.
    • You may also associate a Java Bean with an action (or set of actions) in the Struts configuration file. The Java Bean is used as a repository for form or display data that can be communicated between the view and controller layer.
      These Beans are automatically made visible to your controller components (like LoginAction) and any view page that is associated with that controller.
      These Beans can also be validated with the help of the Struts system to help insure that the user is putting good data in the form. They can be carried along with a session, allowing forms to span multiple pages of the view, and Actions in the controller.
      Note: You must be using some sort of server-side technology (JSP, Velocity, XSLT) for the view layer (going to the client) to see this data (plain HTML won't work). Struts works on the server side, so the client's view has to be composed there.
      The client feeds the data back through normal form submission (POST/GET) methods, and the Struts system updates that data in the Bean before calling your controller components.
    • Within your web application will be pages that represent the view your users will see. These can be JSP pages, Velocity Templates, XSLT pages, and so forth. A set of JSP tags is bunded with the Struts distribution so that you can get started right away, but any standard presentation technology can be used with Struts.
      Even plain HTML files can be used within your Struts application, although they will not take full advantage of all of the dynamic features.
      Following the example of the Struts JSP taglibs, several other packages are available to make the framework easy to use with your favorite presentation technology. For Velocity templates, there are the Velocity ViewTools for Struts. If you want to use XSLT in you application, you can choose between stxx and StrutsCX.
      These packages make the standard Struts framework elements look and feel like a seamless part of the original presentation technology. Struts also makes it easy to mix and match. If need be, you can use JSP, Velocity templates, and XSLT all in the same application!
      Since Struts relies on standard Servlet technologies, you should be able to use any Java presentation technology with Struts.
    • While the focus of the Struts framework is on the controller, the presentation layer is a significant part of any application. The Struts JSP taglibs include a number of generic and Struts-specific tags to help you use dynamic data in your view.
      The custom JSP tags account for a good deal of the Struts code base. It is educational to note that as of version 1.1b3 the Java code for the core of Struts was about 28,000 lines, and the Java code for the tag libraries (including tiles) was about 41,000 lines.
      These tags help you glue your view layer to the controller layer without having to embed a lot of Java in the JSP. This gives the page an XML look, and can be easier for web designers to deal with than a plain JSP. It also helps minimize dependencies between the controller and view.
      The custom tags are used to create forms (and invisibly interact with the Bean mentioned previously), logically forward to other pages, and invoke other actions of the web application.
      There are also tags that help you with internationalization, error messages, etc.
      All of these abilities depend in some way on the configuration files you supplied to Struts.

    It is important for you to remember that the mechanism described here is only in effect when the ActionServlet is handling the request.

    Since this only happens when a request is submitted that causes your container (i.e. Tomcat, WebSphere, etc.) to call ActionServlet, you must be sure that any page that relies on Struts is done through a request that will map to the ActionServlet (i.e. has a .do extension).

    libstruts1.2-java-1.2.9/xdocs/images/0000755000175000017500000000000010423130301020034 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/xdocs/images/logos/0000755000175000017500000000000010423130301021157 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/xdocs/images/logos/struts-power.gif0000644000175000017500000000340610404045214024356 0ustar arnaudarnaud00000000000000GIF89a_%çÿÿÿÿÿÌÿÿ™ÿÿfÿÿ3ÿÿÿÌÿÿÌÌÿÌ™ÿÌfÿÌ3ÿÌÿ™ÿÿ™Ìÿ™™ÿ™fÿ™3ÿ™ÿfÿÿfÌÿf™ÿffÿf3ÿfÿ3ÿÿ3Ìÿ3™ÿ3fÿ33ÿ3ÿÿÿÌÿ™ÿfÿ3ÿÌÿÿÌÿÌÌÿ™ÌÿfÌÿ3ÌÿÌÌÿÌÌÌÌÌ™ÌÌfÌÌ3ÌÌÌ™ÿÌ™ÌÌ™™Ì™fÌ™3Ì™ÌfÿÌfÌÌf™ÌffÌf3ÌfÌ3ÿÌ3ÌÌ3™Ì3fÌ33Ì3ÌÿÌÌÌ™ÌfÌ3Ì™ÿÿ™ÿÌ™ÿ™™ÿf™ÿ3™ÿ™Ìÿ™Ì̙̙™Ìf™Ì3™Ì™™ÿ™™Ì™™™™™f™™3™™™fÿ™fÌ™f™™ff™f3™f™3ÿ™3Ì™3™™3f™33™3™ÿ™Ì™™™f™3™fÿÿfÿÌfÿ™fÿffÿ3fÿfÌÿfÌÌfÌ™fÌffÌ3fÌf™ÿf™Ìf™™f™ff™3f™ffÿffÌff™fffff3fff3ÿf3Ìf3™f3ff33f3fÿfÌf™fff3f3ÿÿ3ÿÌ3ÿ™3ÿf3ÿ33ÿ3Ìÿ3ÌÌ3Ì™3Ìf3Ì33Ì3™ÿ3™Ì3™™3™f3™33™3fÿ3fÌ3f™3ff3f33f33ÿ33Ì33™33f333333ÿ3Ì3™3f333ÿÿÿÌÿ™ÿfÿ3ÿÌÿÌÌÌ™ÌfÌ3Ì™ÿ™Ì™™™f™3™fÿfÌf™fff3f3ÿ3Ì3™3f333ÿÌ™f3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!þMade with GIMP,_%þH° Áƒ*\Ȱ¡Ã‡#"|hÅÁzªH\ñ¤ GCn|Fò‰ÁU$I¬BŠ$©–«LŠœÉðIɃ)CÚ|fIš@V!ç3=!cÜÜiÒ€ž–Ï*¨¢ U!ÍzÀ ŸQI¤øì‰žõ $%3-J’eÊ“lÕVOVUV•:p'V’sî´xö™Àd$ÅâõšØæ*+ ¾ ü¬J ”ä× ÉU`+°’X h‚JË^~FŠñ³[ª\Ø\q}ªÔ,zgŸv ôÙz'l¦F[óVNrk2ƒ;?ëQì@뼫X±•¶i¸pUþr6i24øê?¤.ê9êðôgW •õM‚…Æ_ŠíΪ•â^A´@~%rí)ç“|ØVÙ3@G€}‡Tpp}×YaV´Â_h‰˜l* µ“x÷”S Í $àQ}ÕœX=HÖc儞a‘ð\HXßpA8ämÉ=Òn&–HWVYDàoz´%UV~udpVô•V] „‘Vm‘PÕ cêaeŽy¹iÐKAÕiçCô ù¦B=ñ„w ÑN -TÅ’p‘2 Œ&$à†•I¥X5£”fvÔhCÕ9$„=’ô¥ nª ¥ÒÄY†9¶ø^zþ¦"ZP—ÙjgQÂ+†©Î¦>ÃBžéo!PBUy¤f™•Õ‘ÅöJ`VŠ¢i{àíii¿‚·K‰ Â&Uq)”SMªÜháŠ+¤ñº:_¸¤xj½Ý…[Et€…»[òzX¯J¤&ù¯Z¢n¼ÉÄѯ#úÉ& µš “øUÆÅ0Oÿ>aQ­°…ªå«ñÆÄ­®}Wé¥Ê i°1ôëËÏ:JúÂË/»¼Y+Pj.å#Ò¬I Þ»Ûº/IÉÔ÷[Ð^i ž–;[ž~€$ 0»«8µÔiÅ+'Cn):Ë«5œ«ÙQôðܯ¥àÈPÙºv]PÙDD8Ac»(7'éw°+»Ö«àN}Pâ†Û÷àVª°wÒ™ã=5¨Eü¥æ•Sšºè”O…·#:A€wó¯)Ë^îA€·0Ô¥c*œâ½"=§ãq‡çsÌD"ÀÛ–¢þ+»ÆEk»îQùIÕ¥ÎPP­òÚ˜dG¹ËXï’1½ ~xH_Õѧ"ú«o)&ñ;ì@€ŸïÈfc\ðÀëä~ÊËU¾ô-«diyÿÑG8R?q$^áG,æ0þIbfQàwEBA;libstruts1.2-java-1.2.9/xdocs/images/struts-blue-1.gif0000644000175000017500000001051010404045204023155 0ustar arnaudarnaud00000000000000GIF89aôV‡!!)!!1))11)9992bB1)BBBRRRkZBccckkk{{{„kR­ŒkþÅýìÿÿÎÁTüñpÿΜ÷Öµ!ùÿ,ôVÿH° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\ɲ¥Ë—0cÊœI³¦Í›8sêÜɳ§ÏŸ@ƒ J´(M $P  ѧP'h!ƒÕ«X3P€Ð @Ô¯`6 µ¬Y ð¶íÏÌÊ•KAA¶nóÞ¬:·ïÙðêì²@\¿ˆ³VH{×a¤¶Öøx¬d¨†kÆ a`Á@€p8+ƒÆ“!Š&mö4è d7˰`‚× øeàvj‡ºûòö=4¸lÍ]8PØ ‚Ý ÿ­ð¹ðèÓ8^¡´_"<ÿþÚ¸\< ¾Ð|ëô€…òõKÁz@ÀÚ새GžAî•Å@؆{b토‚A!FÁ8 Áf(Ár±ažêG ƒéeÇ Aš&„?¥Èd84F`cÌ€(ŸA ìÖ#‹'¤pC&° Nž@Чܔ„g#d}¸¢‰ "gK²çâU €HdO~Uˆ!ˆÊ%µ-à€V.0›i­wИV•©—Eò™Ÿ( T_°¦xËõ†€" imtVYår€æ&ä—™2(h™œ†Y“}u†áŠú¡v×]’"@i‚M-ÿyä\ Lࣨ¿Ízž­…â:Ÿ<0£r&T¤H5Õ©¦HþéëdŸöÈX‹¥ ;ä²Ýe@`¨!ôi€Ëq ‘q-Ù€w‹u{ÐcXVÁDŒ×Cß"Èܳ±KAwVu·UÍiÔ€lpÂÚpC¸æðh,±ÄÝUÙÅ {nÁ¸†×À\¸%@Uw»¶P¢U0±Çx=ìpÄ!O\ñÅ‘eÌP4×|0vá‹Ð>ܸÌaTôÒ>Sàñ@ü…œ@ªô2|ƹ.×<Ü’Í@Ö 3m¶ÄN¯z]ŸÍ±$K”ÀÒo)ôAn»oe×ÿ\Wop-ÍrtY2Ø-¸ôÖMéÉ@Þgï­uA C~ð½R1m1|wd9Ó´©ÇVÑ$ضÏà%˜á/«®¸ØsûùÒ¡O.PسÜ@±î3±Z”;êÄW´˜MAÒJÇzÊ #´x•` 4|Í©ó^ùð&.Ñó!»kÛÂ]os¨zU@Ѥ™€…ö"~ÁbŠÛâŒjm>Åès.û³€gàã8Ç( oîâDX0 $@Zñ1Àþ€#çá¯D÷›ÂåÌd‹ïr'€ðp0"†\É×Z A×bÕ!·¼aªj‹ë‘ˆ<§A…uЃ0,Q`ÿ¶7¼ ÜéAØÊ—>·ÂÎDsݲî @~×{ß°Æ7?‚ùéLÁŸEw­7T´Ûºè®ÜgÛR¬€è„9.ÀÇ>úñl"Ã\5'EÀ¦¶å²‚·¹ IÉ 8ð>˜ä“î(ªU’_Ô'/p 1àrr€!G©HF:òFœ¼>  @XkšQ€Ò£€=–.„RË(?é®G‰êX¥³Ò?  ѨFÊQ €aò²ÐšàÆ&0`™• %nFYÊ"“N6'%›¹¦gâI=¹©$žÔNCÚ3CBxÿ¬¨ÓšdL˜ö':I€•1‘”Ú” ck °fØ9#)´xwù' ¿ÈBÓFøŒú"§”™ 饿4>¯L’’ˆÑŒ¤ÄÒ9UÊÑ4&Eö³€—ÛáºöCRŸ®~ÑŒSl·Ÿa€y‹²CôMrÆð ž@XUT„¾S©c‹QÕå0%kK}¬’h¬üô´ˆ«\çJ׺b€¢3Q`×¹ÂhH“Ô¶Ô%¾ÊÕšé¥jÃe5曆«8Y ”3iá*_#ûW^F°q£€a °¦âqk[êMcEj‘ý¼ï¤©ldc»uÿ`³†…Qˆ”´ª%U–ž4"–£«.ÑF–£¸©ìe ˜­ÛþV•…â­Ú b\»F\yͬ¶ëÄ|‘T9­aÑ¢À==wŒ ùí…š'Ò餺}¬A”ËIæ¢è¼xDHxÇ»ËòŽ™%Í‘x­ë½„4๷rˆzc‰+øÚU¾¡¯VÍËY:õª=²µXKQr¬¥ sNЀˆGL⣠Y€‰K ž/ª!+&ñ&1Ø ÄxÄ&ÈE ªüiÇhqõb “a¼EIjK* yÄË.€ #g9„ÊlòïAl¼ã¥§£ r1»'*[[ß|2‰Ñr˜ÿ™ `²rœüd:q  2õ~Ä*oP:áòs<1××Àz& C æ“°!AfA­ä5#Ì~eÞq‹§cMƒ”Ï tŒ -COxÊš6aÓÜèc ÒÑIY%<¹>²/â=ä>kúÐ564 bêp¥˜×/VÈ~èÜjW€<ÝE!œKúQÇñ+žÄÖ0ÿúÔ ±¶‰‘{bc.Ó7Þômܼ«ÙG¾a´QHH5…Nâvt#/L¹DçéÊß6v°»|UbÜ(ò÷£éOx“Ó'é0œÀì#áyöt¨žîúú*ß$&µ· ltÇøIÿoˆ[àpgC<âö¶õŽ `·k¼× Á2Âr¼ æÖµ@T|ód¯,?  SÅÕ —G¼t@6@’@“ñt3ªÛ:8CzÎã!9è ªúɝޝc´6\±œ´<HùâÃÆ³Ÿ…Èñ“# ÌI»ÈÅ|wD{šîŽqm€›’v#o|+aÛŽ/"ªû¹ñu_±¢v¾eaßyä£î»·Ïï‡HZÎÑYº‰Ñ÷ˆGýÏÌ%zÇK¯*k~ë–ß)¿ë_³žaOe zÃû/%EÞñ—ãø€½õš¾;®X}cæ}7³÷qÂß]®Â‰Úàzÿ„j±K¾äaôÿßÿÝét¿>Ôoÿ¹Ž»|þ‚ˆßêzà‘5é}5¿æ(´HÚ)ù鯞Ӿf~´G]éw{˜·bµB{Þgbde!kpB÷g€Ê¦Ð@62ÀDªwrw„uÉ7€ïd  ~…Æ~´÷ßÇmË·7 )¼wcpGÇÇU—@îe,½wb 0u‘Yg[µ ázè…~;Ö@Øo;ÆÛAÐÝû7ƒàij—܃ïË“‹ÿ_þÝùíé X!0€½•Þ8λöû…¹C@`›6óØâµF^y¶E§[zíµŸ| Ðg~òEY Ûüñç€ÊÖœy¸ì±7À‰'²×d¨=á‹sM#N]à…ס‡Í=g në­×V(‹-¨d\«•Hd|ºA×߆8 ޶M7b|‰â—ôF™¸¸ä™d5ùdzPØh8ú·£€Ì}W tl¹ž‰(ªÁ˜e€æ a¡F!‘]ö9bHgŽÿéØá‡>N·‘Vx‰b‘éÊ`‹‚n„šg ôV„Ö4jd¥šºÚp†VÿØ^]’Ež`ØŸ¤ãÑÙãsXJb|ÄzI¬§ŽÊѪúš*M̶êli±^ª©‰{êö&œ‘V™\lu:]n»A‘à—Š®v" f*DÙj«Qèë•ÏI'²ÏŠô.¼òNúÚ½I.ë°'fZðé1úfœÌÍ nyvÖK.—|¦Ÿº°ªCûƸtÂf^°·›ïF[Ð•¼qbÝå6¢¦_>9À­jHl{H–Ò +$º'n°Á—ɾ¬d,ûZÞ@!eIŸÜ‘dLÉkÈßN@Õ0Cð\ž)&JtÂÁ™£·V†[`°rÙ'ŠF#­€É1Ý6È?ÿ¬×`[­‘dH™#ÏlÿKÕw+=˜dÍE'¢—EVÞe|·2j¸œM (²ßÐåz)ÑÀp ‘‰÷@õìڀΠЉ.¸E) é†MÏ>@íùw¡Ls‚Äj«6çÇF›ÐÝ*w¢¥Ÿžz  µÞ4€äÍ&;´_`ûíåÞ¨wàñ¬œx¾¿º^¨É=Öv©)§B‘Û£kS¸òŽäÁ„…¨¢m@[–rŸãòÆ€Î)'rÑͺ@&ò]D2ÂΖ¸–ÑA‚£ ¿ÿd)O$ÚFÔ&)1ÌØ½B„BD ºQ C §¾æ™'‚˜`ÿ-X Ž(gqbÞ·€D!Žp0«A\äèW¬ã‹M½!“ÑŒF&Æ¡Æ1{`m€%"(5Ð Vż…èÍ®ù™@àf¢ñÑ!F¼Õµ²ÍÑr³#_¢øqÑD*´ ³(€-n ‹_kUÃyÍ7™;cÒ˜@6¾<ìàë^#G:ÐñD‚¼£°mîÎI_¯þÈ6f”uÊÒ–ˆ–)Þ@À@|4bs\ˆdz#?ó ³7ÌUÐâãÅäp™þÂTª2!Ä܈ŠÉG?šÒR¨´å_×LIV_zÏ/ƒ9Ìœó˜¸Qæ˜ÙÿLq5@:Ñ  PÍ60›¾âfàÍoD2³@žô¨3*)N m¨]ÞÈ¡åàèGˆÜÔjŒŸ{"7 V°P:M¬†R X £31‚ŠÐ!'Z¢(ù&ÜtS]ˆÅØC"iÐ6³áÕzJ® ~’.uš¸Ê˜ÂŒt%5)KSªR–Ò‘=’é&iz:@átUSúÔ ‚y³j%9צ£µ.”2m• ?¿Õ#…TžFK>ƒ¦›Ó¶°T©VÓç”°*8P%QšS Nµ¦[¯É€]Î\»ÙÃ"ÅÔ`¥3¯qÙ+_¡w:"õ&°Û2¦@kF3ÿ"V±Áb,fóXŒžV³œ e­TZdv³•Ûžnu«óñq9Åýí-—øºÚDÏ\ñfV‘‰Ñ+~)4gKžÂL;`ÎöRŽ")ÛQÆÆ®ñÑ(rÃY0'YWºàkSÔÂÅsžãÞµD"+h—²…¬wQ^t]1±Æ-/Î_¨·!û;×÷@þÊw³’!X¢h·é`(–Ìá/^k?ðg x(d´wu¢‰dz°cÇøX5³b‡¬Ï$Ã}tot*YäröŠAzÒ}mtbïàhÉF– €{ØÎ±€Æ°±¥ôɸ[˜Ç?rŸ„<ä¹ÿÉ“¥Òp“ƒe8;Y FäR/£|_iºp›tÀ,“ýÛ2qY§cÔ ÆŒéÛ& _.UšÕÑh…Û9„îR+¾sBNDàL™šXÃRÞlãiúÓ,ž‹¡·¬>·¥qÑÅlt5!MPI:ÍA–Û¥3=ˆí,qlkuYa-j„œÈÕñ Òž2ÅÂé8WÙ¯&4[°9Êo9s±ˆY/¥Ã‰ †L?MA'"™G%±aݦs kše‡¶OÅ’òšHt!xØÎuá6¢“z›ÕˆÛ§äöd¬rn4wÆ2ë–ˆdæZžBÂ[q¯°¶‰Øî4–‹ÏPΤ¿ç}ºz»Eà‡ÿ–_ ^¸qK7# "“ê|M¬‰ö9üóœ=ÈI}Î|ãÙ»…NDhÉP(qžâ5DV¥[ ½ª$ŽÑ…þé‘vKŒQ4Ö´1‡«VÓñz@7w ÓtÿéfD0<•dfn”S—98bù3#v‚Ä\æ¾^øC€X$ª-‰‡c"zŽãŸë]"úŠÎ€ÿ½&é“Ó-Ч£ ê z Su8s€Ò+p±Ô#N¯쇇ùØ/Pv ‰H=i÷ÖŽ½š¸}3ײh8—8í£pq'µ`–9—q7U Ù’”Ò†»q.ssE:é$< C¹8¦kÔ(rŒµ;HÙŽKÙBš ‚z+™²$á“2 #116PžånY‡%Z±HqÍ:¬(” @”µGÀb+ˆbj)%NÉ82’V¯1•¿ó†¨Ñ‹’_å!ò>õæLä²–d0–—va¡šn“% W{â–8‰ ¸RXs‰KÃPp#½èE‡ÄR7(✃Wj›ò%G'Ž!7QI]´æÑ$7€›Ú9›;" ÊlKŸ¶‰Ä½IWTnÁ)œiéq£ãžèŸ˜#ŸüéD&³}&›‘B<4Q÷# ú“|ö™dÉ!¨bÇW÷i'çyWÊ@À…D1p•H¦Ÿ±) SÑs¢!´ôSF–³f-„Tú‚•$s² &Ò °.J~Þ"¡eZ¤ ñyÉ–F#lúfâ^½‚¤gGŽKúž¤‰jP`¥þIêÂ(¥f6Šÿ´0ÆÈ¯¡£\YSw˜Ô=óSÞ‘KîD``é§N2$%™'Æääeé±€dº£§³¥&r|S’;°aª ½‡cޝô‘,CK…7 ÑWSªkDè馷ê4‰Ê(_ÙŠL*$ƒØ­:©‘G'Ùãf£Y6é¨k`¯ÑÀd›Œ‰•ªDíeIªøššcH]öLɤö3’(ÂB™“|G w™r­¶óªí˜0#´º= š¹» <º9?ZƒKuN>G¬ 9À’ˆ»9b ¬Dz§®s©\HV÷úžùº¥'¨”pv„AÊ£_¾¸«#ÿÉ)8ó\sb®€®óºÝ>;#Cc$9–—NE9÷9FÀ5TНMš(&B$"ù&{J!¨¡kŠt¨”lòg±FÍú”QO¼×«Ð~ü©”¶éJ©*9›¹›O¢Pè{e»´æÑ´ÒS‡%º²R«µÀµâ¶BQÛik2c< ;Njƒ£2AË œ´×mÞ"`v‚!GËdI+/=Œ …Dx3Õr€§Š×5c°µèBØ(…AáF±@@¶ GgKõf°¹0W±•%¬;ªí„!Z§%²xkSz»·t²ž¥k0§[0ÇC¸†û2ˆÿ›9o²jr£ä²¨’I#»»A)§”K¤–›q>–ê0s[/yB†3I¯R1x2¢$z9p•€â\àá•y"& °«fEd"z+›'i£5äj½@`4^å†j˺tÕ;çÄVzç©"3“Y,$ØaÁj"cö±ïéY ÌÀnª{8Çzé¿ÉÁM*Áâ:´’ë ”±?k«¢RHUkíÛ=R 7ú·Q]°ó©3è¼DªvkFùõ+çÃ5ÕÀdR1§v!Ë£D’XÁ„Á(·½a¼©ÐõÁtÂ÷m€DÈyÂnX½ÙÄ6áhHs¨V¸JêÅËö 4Ì(äÿ{8\ØžPØJ¹RÆn A<ÄÃZÄ+[Ìi—@¿ªdº!E<ò(¥+­ì`â$"È"†p¿õE 0t ¨‚5ZìTYªù°s—·Ð'&'?2‹pȼ¾8. :™zLÄ¡²·àÍuÑêÂj"° ºÂ†Œ•ˆ:6_[Ëbx’Âl«rTù®RC ÿ¸€d Ž=ƒŒé|JƒÆ©+ÌÉí+ ùì¼úIϰ„Ù­•Ê*ÔÁwiŽáH84Çô¡¶èÒ\:;g¸·>ä¼s‡´¿¼H5´C]'vµÎ ¡E z=½ÔŠI.P /R­T­0 LuLï6C·by¨áHÀ$sLG®,Ž1¼ -¨9Æ»s 1/½ÌõŒÉ!92Èñt}(r×Jý”z½EUý[W­½¡(ÁØ–V|SH`írÚ<ÑÚÐ’Ö=íRŒÙÊ\Íp}N(Ì©ä9ÅõBÚ×{½˜¨á×ZHN°m]1úeIm…½E‡-sŠýûÿâØ Ùr}0¦Üc¿L‹¿Â=›íÓ™\ÐjvE¸•5µR[¥Lðx"§sßl§¾†1Y7‚:Ô,£ÀŽD&«ñ°EÞl„ÞåÔ’¶Û$7Ǿ-F}ëÞú×ß 0€•vßgIp `4þíˆ~)¾ÆÜ8dKî¶iÚ:Wåâ–`ÈÄI ´Là _*Ü=ßè—ÍÕô’Ùáß!Ë%Ž[™M6×LTü½â”Ñâ@[Ϋ*ê‚°þ<¢àû' Ðàðàá-<þ<[SYIå¼mdmã˜ÊL‡ î{¨1âQ®X4ˆ{¥âðß«ÿ»åŠÕå 4ãil÷ù¬9®;þ‹9CLä­1ä_즒2âÆ“¼Z¸yvƒ-–·ca×p_ a56ámÖŒ?ÑtO[µU7æDÛ L)V°G ®ä­±Á$LÂkO4dr^™õšZ8››û0vrçqk²¥þ•}^{¬®f¤XŒ˜²QëƒuëÖ¦C$[x¼ÉüZ X'4÷ï{B²ËÓû+v2r#œ†ŸÔö(ʱíÝ®RرkÙÏPFâž`ä®`æžØ@&¼~4‚B«T#ýÄNOÇž`Ê.ÌN»-B€±=ÒžJímeí†äïÙ^»çfÿ,Œ=gÌÑð–þð¹~¥O„î:WçÜúOa°åðð.ï\ÞT‹W¸*UKEÎp1"¸mÖüα!XXI­°«q‘² ƒ‘}eÓÃZ$$…`4¥Xm6™b}wÀb¿8 ¼iþ²¶ã\e= çì'¿7EËÛo–Ïø<ïzõÊö 10ÿpa/M úiÏ]*ÕöÈ©ÍØñàÝÂi ia¬ö”O[é–·…[ެêò=}d"õûae{ÙŽY/IªgðŒM_ÓÌøÆ'˜"Œ“¿ö•Od—ú ÷ÐyñÞ6ÉA8ÿî+uô|OÐKØ®¾Ïõ"øöÿ̼ÏS«ÇºÁø¡’û»e;ü{oü †ú± ð¯Ùï< £Ÿ/f¢Ÿ¤/‹¦?¢î €X°Ð Á†@>„C(l€À( @!r€•‘"D€!A‚鼄S&L ¼pÁ B‡|*<`ŠAƒ$ %¹aCÈA ( ’èÔœ9W àR¦M PXq"Äd>@`Ó¯_›x U.Ôu älà¥À” Ëž•è÷§Æ—M¡Ì;S1‰)ZĨÁK¸pCæÄ:³æÀ›9wZhÚñ¥LÒ=:•hÕ W³ê…‰°ÿO¿d-^<ÀQi[oã^f}àJÖ+§Ú•ŠWÖÅÍ?ßËùó׊eжís°Û?ÖIàdÊ•‰¡o­yS烠'jop Ý¡GIZ!€¿4ߨU¯®Ê5æh⬀ ÀZÈìò -µ`«­þæ’ ¹»„[6¾ h;Áp+ °î @,Ãó["øÚ¢¬2à2C+œtjoACÛoB©þ+.¬”Í¢¿¬SQ¡°b7 O‹êBÖ†K Çã3H¹OIJ9°2®½“ª³q4È.ÊH#¨¾Km °Â€” ¶,7S/$+Ь¡@:*Í‘r±ÊÖ|@=¬ÿ~¬ ºÜ0¢M´I Þ&ôÀóÒjÃÚ<¼-£§Dk%q€[›½‰Ù]Ÿ;r¶êþr”¡H0®¹v´7¸ò2Ì4€¾¶mL°`…µÞQŸ ³ÛoU5àEœSWXeˆ^A]Ë5Z^!ðà±Üíí©b—DM¹h™ÅwáàU™ZŸ«…2$¨:‰[Ss7£ ÎL­.8)$tÿ}(ƒ F¶nŧøì“¨ýV]i¥ÍÆ–öD}uù,Á,R .î kòVõrÝweˆ#fhâ*6Ñm$i8öøÄª¯&€d‰¾î˜€° »îæR Lë€ ó«­Y"HóÆá$ôÊkÂù5ÑF®Vº¢#Hð3ïMXíú裨½l,ùèSã{ÊŠûÂc\ê°#OtÚ–ïVû¶‹h{£Þš:öÂ…çV ç•e¿MsøÀïóHnÐ'ÂYýø<àW¢äy›yßW6@»±Þ V£@R@0ÏIej®[é$—:ªŽ3ìA Oâ—¾È4¥#\ãR‚,ÿ¡Ž ÌÈ4ŸÿE?jšf^ÓÀ—!zŒÞ8¤g‰A>´Q¥b”§G½´³¦ºÂG*Ý[HëÏáv×#òu?3`£ /y³qíL^í3×RŽÅîÿº”$h­\ Y&¦Á+5$Ñ{óøNÐÍà‹=r§.C¸¶†êÉ;Aõ©Åcˆw¨Õ@øÊLJ»vŒ‰Ñ‘<áQ§²áƒku¿VúÄ~™AœÞ9*Wq˜X?V5ùR.Ý¡+É(»Ê?J®8‰^ŠH ®°è2óë%6±ÿ8‰0"¿åÒ)”õ è› é[73ã¹À>åq¿™0ˆÔ+¬Ëi€,*@â£AÂÿ6õ[¿5K©œ ½.>RãÐ"¶À’·T› ë ùÒ3‡Ø¿! ãc+(x((܈C ?hã7,7Î ­=± ܬ* ªA‚«@ÅS> „¥æÛ@ÿN³-¨€?`[«2×±^#B˜ø Þ A¯‰˜Û34Ü#);+Ï’À:¾§Ó&£7¼§ì‘ ‡Âz¹³Åиe‹á³Cû q `R.ÿ{ ìA@Ì LC/x²ø,UÊ,Ø,Ëé 2‰¤59¹®)‰‘Ø-CÃRC(a²¹xÃÝ2?§@;Ô«*¼Ë.€ù S¼C¸Š³a¡Õ¸öS§F=Rˆâ¨>!1¼ªDŀ¶˜žÂÚ3Šk?{ŽN O´_ꈹ€ÆÃi ¬XEê² »I’iŠjœŠã1 VäqìÅš «q¾AiaëŸ~‚>ÿåIF˜GëY¶ÇrŒ²B1;AŸq— èBÐê‚ÄFFd!ø»°†‹Äú›Ä!7p®KÂ%¼¸)‰Gx“¨yÜ7 ¹”ŽØ w4Â<#Dâ)IðX@¤( Ðj³„ôÅ…Ì€†dÛ‚ÈzA€“¨H޹ȧéÍRA—¡ž´±„«’;€5ÑÇÿ8ž”Ô$m¼¼íÀº,¼ª<:ð•û®ÃÉcû°xÌâ#´dª1â ƒx·¬'‘ªË|kK̓Ë\ÈŸ“J§R­(¡¨P78{  è ‚¨¸ TŒ‚¡€‹ÙÃ_aƒ“Ihš+q‘—q±AEÌÁÄÄÉQ8ÿó3„G˜ÔËh„ `R¯±´t\Ĺ|±ÁÄK}4I“ü-¨«ŒÙ$£k©È´§³µ€LÄ®ÉMkܨÜLYŠª©‚¾ÐÔJÎÊÓ\GÁ }ªªÔs¢¨ÃÎ1²54y´,Šx‘KîêÍÅð&o@¼&#Îæ:-ž¬§#DG%TÇl|Î9+Ì M ÙÌ«mí€3!¥cãÆ¢—xqÊðÏ‚ÔÌód¾¨š„ÃØj¬0± Í­¢@Ä;›ì2 5@">GsºZ—UËiy˜‘|7?Ï5±¿æE( B!ƒžÀ|¹[Rx¤Ï}¯ÄÄÏñãPº–œh“¸Ž¿°5ÿ‰J³ÿÀE5žöXQí;å@mO†r‹üTŒ!%ŠQ„Å‹pÅÂ1£"È&$RÝ<Í„kI»hB£ÈK7ƒ‰ s‹×¼+½QÉ“C “´ÍλN0MÃôôÌ2…n3³C¥®D]Ô5- 8 « ”S¨ZøÉª c¬À«¥7°F"å§Ýó‰ý©ÔØKck´O5Q‚ë#EÍçâ2¼ã³útÒ˜,v\ \[“m´“ÐæÐÖ«Í‹;Õè/Õ£eý¨º9?)P 8+„—%R?¹+(&3Ï[Ê\m¢ñÕ´V™ø ã±A\“RП²HÖÿ&×­  ̵̵ÂÁF =˜)žüà<ãûD( „”‰.õ?¿ì¸rÝÍs}ιZ×&Ä5.ØÛK-yý;z­ÖSºXHƒKHeWr‰4€5C%(|ÑÊŒyø™rG6%Zà“ë˜Ø9Ò,)=qÑ×, ö±U»ñY Ù T¥ˆzÒo}¯•m Mmˆ—øZçœ'6:Ì7Ú µÎ!ÌZ[s³­J€”ðF‘èZ6Å °¢œÐÛiEZRZ›bÕ¦U€¥°…ÅLE]“§0dž¸Z€ÚÛ'x‘ÀË}J5‹[˜ý0–ñœï€U¢´´íÓHͤbÙ¹):8ÝÏÅCÈ›ÿ|˧ìšúp×ÅÍÙ¾ ÆÄ[ 9‚´ôÖ†í?¡ºÅE5Ým\,Á ö´ø›BUXa%R¼Öq03Ò°Îí [Å€€|R%†­¥£:ª PÕFC‘=ÛÏ"Z¨€Ý™8IÜ™G*LKÂÝV¢ÐyâÊZÓ.tWô S÷¡Óy,[ù¯(ÝþÌÅ QŸ£§}àê‰ë}-µý) ímœ„‰¨m×ÁìRà >ƒ³È– ¨È¶ÃM×ßyÙ€ÜeÜŸ¡œ»lÊ)IªÉàÖ½<K W8¤é©¸5`•ºN‰™Ã8žáD¡óMaî=Õ†<ÞÍÇ‘ÐáÌ_ TÿÚè`TK_F$Ä=¥ßØ­ú¸àÍ\ÄA†¥,µãr=ü ßùÏÐãˆ9SPHeÀÜèß”ÕX·ä'뙲Á)à8fÂ@Ó`7[_²µE6½c#öåJÆÑãð%ö(¦äó0ˆnØÜ€)Ü4ICÒcüRCõìÒ N7 ¾Í¦áˆÍ¿²XeSmå{5‚ˆ´0W¨…N¡eæˆj …HIF}ßä°‚ Wc[ÞCÜ#H…ÇH‹ÿµH+”],v½ÅÚ’ŒÊik^GNd'4µßÞP.}äáEhÎLÎè@þš¬”(è&L9v~”±[Ofc¬¸‘y@{~Y|nBa%Hª¢ªýÍæbÔYÀRÕ* ÞÄôaOÞÏ:É™Ýjk‰¶3oÝ!µ ³¢žäŽÆ=& ³âæ&ÑÖ3é¤Fiá@"– ¸x“¢> €X{âÁš–:ÎÁi椲ò$‰íXZV Ï êYeÒ»ž»›MËö™ÍV.R¥ã-ÅŽb¹E榄Õ>¹T’#ˆgÆæYÙ& .#äèc†Žœ˜2))ÚzÕá¥Ø€BÃ_TéãM ¯lÿ™fµ†àëpŽçŸ ìŠ"9 iuŽç«ã ý½pìÅ$£WýˆzÊMF¨Œ@hͦV.õÄ\üÄ ó—ЦThöS§ù¶Hm)>Ö=éâ°Cì(ÊÚÖ@õà‰ÒíˆÊˆhâȇøm5þåçøkjé•™f5¼Aj .]øÈÊ'çÎãÙp:˜îù ã©-§!¹ìö£„›ÕËÎ"omèÀÍå>ä5iŠôÖîvd'¥ã±È°’ΞŠ}*Ûf׉(’›±Xþo>Ei4,p>„ž´Ið•êDpìnÕ¸€û É‹pœ%£O-å-}Gðö §Þç0—êÞ×ï&¹Šoà¾RÿÒv:Üa+ïðuZy0ïè( DÅqy,—ÌÆøq½ñpˆ“ø  _ ‚W"Г8Xxš)Ù-m.íHIwé|Sp¬-´Š&-‡lÿ'»ÅM\ .!3ˆ¿R³=säàß±Ví2O‘pRàÄ\DIG^›S|q-L—Åâ‚X€¶tôøóôwŽÎA•Hv°T†D9?i:øðÔ°ð$þÏ5‰tãÌðà<¢èć½Ñtgئ W¶xžQïóhÅmObÏÞUWoÁÉÐeë”õ˜àŠ.Þ@×ÊëWÆ^÷ubOÍŸ˜³€œ ›©< ¿dÿ³Kå²ð¯_uk:X êÆLb~4Èå{¢à –»îî£ð^(”Lt§¨ðÇôÄ“KäEÑë¢ø‹äO}κèÓ<´•йV=P(¿gi ù 9‘ ²‚“X Ƭ‰×)%È Ð__áv„Pø±aøÀà‹ 'Î3†˜x„­ø‹ÇE£h]yñøƒùùiiÓ£òl¡È‹ Mÿë7á¼ð¦šÔk  y±·y8oS&»E‡—¥h™ðùŒñ–3‰z¢g{£?Á…¥O¦ˆ×Aº×3ëx|Ô*šNbˆñ€„ø ûj½“0c¹Ä¶×ÚÝê™J¯ën˜GÑÿÌÃÌÆœ@ˆ«üXø2§ãêöW(¨&±ø‹p½’×d¡¢Ò²hxÄgÇœh»rV µñ¶iÐËž ƒ¥Ù};ô} P¿“~}' þ#Ù‚H‰ä7.³8š“ðék†¥ÐÒ 0H Ât2lèÁ (`ÑÆ0ÐAƒ!8pð¡Å, @‡ _ `s€•t¶ì¹ó§( Àhó $@ŠÄ„ e:ü¹³¥U( M>âÕë† D@ú’*Ú´t @ÀÙ3§NŠ@†äúU¢J²fa*tˆ”íXŒPÿ;@Ñ)a§6m*ÍkÀ¢Á³j¾Òõ+æÌ$EZÔÀѤK/äI ªÔ¾ >V<ø€D›©§Nf¨”­ÝÌ^»>àý@"ŽCK®mœ!Â’¹¿önî dH‰l $hݺM¶ƒ l‡ÂÝâÅ‹9‚¤Û@bØáeE?@ØÊUŸ6áÃï‰Ó&Ñó#X~Ò€{PX!ÑKJ½Z¦Ýt€”tfaFœÇÕ¶ NVädsmõ oÌýK(¥AI´tc©dQwÜ6P …‘^g!Íõ¦›ˆÊ¹øÞiûé4õ @ òÕA 8XPV|Ø[Í–ÖÿKlId»õ×[JMH€AòX[r\ýÈœeqöV’tP7ÐuØÀVxà`€wàeä'FÑ…Þê!¥”qÍç\÷ñ”¥†à‘~+QÒG®1餚2¹eÕblå[„b}FášiÝi}Ѐr`†)Q‰'*¢šÎùÜG/Âø˜Fˆ€Ÿ7âÈj«>†)â¦Ï­TS’K)éN”~ªÀªAÄ@§O™J+˜dÉÀ–hu ¯Šéãœe*pfšÞ¶Š–@tÙ $¼Ï9€À¿uÔ`G¦Ú €fàcÓ~'hF„”z‘UX²ÔÆg†©SÕõ¦WÏÊ!ÿ(…”A ÚK‡[Xݧ­!Â)áªëíx/” øtXE˜‚Èïœ"Õül¿´L”c*üYG*Ù„#±‹*pïs$ýè®fså(†{Ü1¥+_вRI$åaѵu!ÁAuyò*Ñ©qÂé›s%d“°-Õ˳ZA÷à³ý™ÄiHDåçøG;>ÖäNõ¢ÃKœÅÛdq{WÚ’†õQªábiõ!sÏ}íQf£ÝíC1“2H͉sŽ;þ­}ð5 °›$÷ l]û½8ò“G^žäDM£EVßKnñzwíïFž¡éà36ÚjGùwD9Пœ½EG7žv«Aÿî$cæcµ6ð70øï¨ò¼ú¹‹kc" ò8æ‡3s Óde,ð%=NËUÚ^F‰ h>1ͨ’´‘!€$râÔg0â¥,ˆe  Cl—$+Œ‹VÚûŠx=)€t@é¼ã¹KwpÚÍfœgD1uíW 4Ú#>idZåÓ ZÖ¶8géÆG%)Jbâó“IÉ ,¼ŠÕ”‚ÀPÍ_|cQQ)Ÿh¨†ë3`ñ¾ø úO)¡ò!C‚Ežš¡ª‹ŠãT­YZE±EF“È;ðqZ-ñ#‚7ï()fc$VR2²éñ"9cK\Ã…Ì1(ÿÊšÍ2£C ý‘g@\L‡ò³ÅË@È‹®ÛÈFÉ>CþÊ_‰TÎ"EEa]qMxû]zÉKÆ!€“ñË'DT ˆÖ×þL­áð90’c¥(5DXÞPDI\  *‰ÁZÐ Ló0‘È5g1ï˜<&2E3cKKÅžãØ$XÜ Š7ö\šê„슜æ¶Ø¤DhË@‚ºœXD}Ñ,yȆH¤Cs±hŒ(ÍCF®#º4žý¸©&’§Ê‰Mÿ,i¢ ® ?åH^I†©j®D@”(é8Z‘\R‰Ö¿4ú‘¤ò $JéF:€’ì¤úüåÿɬ˜ê‰†ž¿3HÁþtS7µÓðrÎ]k…@­“‘T B PF1” 舸“¤›ŒÑ><ÈŠX²’XT#³’ªG ŠuÛ9•YI’Ò½¬”!--©dµ'M“ÈXøÜe,›x×9åÕ@í#QyÔQ¬ˆtmkKødÓ±˜¥êP¯ªœÊ®d$ëkG¼WŸÂç³ùì¢ë2Ƶ~†­˜,íBØB,AR§aš-zÓK[€2!fê.rh¥4.cƒ1Œcߢ¡¸ˆ“x¾<¬¡l–€-•:ºØB<+XH¶€üÂh\Z„@£, ]]7(ò “‹DS/zÿ#ÔïòH)r%"öèz@÷¡OFøÍo†$B`j!å¿*Q_LÛG«¹@áó kaÀ`Ä9¸$_’{’$‘, PžS)xà šÒ<º3«fätÃm Äú{Ž{ç_Á$“2QJv‹B-žØÇgö!‡æœçégÆ-”0CNg€¨—cúH„}G8 3@}Ù[ Á¨cAçʉۛ–!ÝÏÓÌT1±U²Õ>;8‰cY³DÝl-;¯§Ëž¾ÒÖêk¤3C{.¢ñþüY‹ÉNî‚Á‹”ØÔH##¹ë£õiHbÎ6N‹Ã¤Ó¦EKKËdEÿùêa"õ–™uh\œöEaC.ÿe•È&Ý"~¡pÔë¶®yÉ™H»R„¼äK*¾ßœ7^Äl¦ÅþŠE® or ®B•/pu]¾;H,ÎHb¤M:œp¹+jÎa{¾>oê°‚Z¤:&îò.ÕÜZ¬^bOeÖ­ÜuT7Ä8S<Øu}tl;ì ÒøÀ&G‹»ï©˜I›RNéHƒmÑ5+øvê›ß¶Ï?AwÎÔ Hv àᑆ75©G) šKôJ¾-e—û»äÌÞà€ÇZ¬dæ†ËÔùa‚¼¢[Ë2Bo°×Šb©jN#`:ß"g”p‡\#÷À£Œ”æµu9–]Î/©$ÿ›,U½yZP®ás~¯'wÊŸðžæ_ dP¡Á$B‚b¸‚Íqy‰BWéC„ÄÃM§$ S9^ÅJ ‹¾l¨‡ÄkByE.EV ß„(Ì}ç[…Ò+45}L_MPõx|žG‘·Ì¼bšÍm”²ø ðZaCGœäãÏÄóòÝáåÏ.”+Íã4Ħܹ…\±ÎœùéíYõ­ê€w Ý×G´†K@ìõÐÔ€A@ÚY¡P\Þ”ˆK¡`„üÞŸüñ=™ññÊÝèÙÑoñ"„FüŸÌLõÍúfßn˜Œ{¬™Ì4 øÁIVIÿ }”ß“5Sú-í%At”Mé ü%NäÉ`m€ˆ©™ažZ „M¬ ÕD'MVtH0åÄIWUŽÔ Bä’é F=GxG‘ DºáY”½DK¸]ß8”ŒÅ¢)Vâ“D EXˆQŒ]â°EXLϲ­ Iu ËÁËŠ‹š-V~å„îÐúñÏMùˆ¼áac…‡™˜˜ÄÖ„}DpT±ä_®B!” FäÇßON`°eá>YêUTâ—–v !}¸àTÁÔs¹°(LjHâzÀaÌ,ñF¡ÏM Æ šùáèS1±QЈ8 †bt$ÿâ,¢Ü#$n6î…>„2¦ÜÖ9jÍ•9Q÷ ×c=c(ZßÙ$@C‰àœÁµÀ…\ô–L}ãׄÍÿ$À,Þ_¥Ý"r€Ù,HJ¤aÂÍ[ì(@pÎý-ˆË šH*@v0Ø\ÀÇ@•ÏÁ¬a”¿UXDŽð#ÎÊÑ´Ï~ìÇtX€ˆ‘è¤B`„@¬QÀTÓS FJÜ;Ê =ö¢ã¨„¯‰DHµä¥$àSRâLÖ¤ôe7’ÝdN¶Pn€PîÐÄ,Þ›‰Ý1£òÝvŒÌ»lÆWaBXJU‘c”…RäVêKÍcJ›ª Kÿ€KráPÉ[ž[¨NÊ3ÂGeAþTÊ^&ÀPÚ\ Z+ŽHR.eSêå åÚ„€TR¥¬QHœ“kÔ„¡D`êx¥*X2ÍÜ`YYZÀYrfZ‚ÍZòH˜Õ$. ¤¾—QS'nÈ]æåçp_ʇDDK°$é¸m›HÉÉÄGbÀbÖâgò&HþP.[á‡y€0 #`D}&T²)ÛUXL?Ö†È9äbÌßÍQÉUÂBe”¤uÄùQ]X„è‡T(…A˜KvhƒÞK(€ý»´&q ˆRÚ‰d耂VÎÀ`[èNt¾=h²™ÿá+væ+ºV뺲«@¸«·n€¼&,©âŸ½žÈ^î–xT•²ð$¹ÜÀ¢ÒD-¬³¢´†¤´^,x¨+ÿ¨ÄƒÜ]È*·^@Ç‚kP9†¿’«¢éH¦ëÑe¬Ær,¼zìLÎkÈ.Úֹñ«ÌÂd­hÅšhZKtKpìØª=:§Ì‚Ín=,MÛ ÁR¬…d-Ó>¨ÆnlÈbÔ~lÄãÈŠ­¾B Ê^ÀÂPá˜p¢À¼¬”d×* ÍÖlH ¬yZiÝrÿËK‰Àæn.ÿ@n³,¬Åj-õhLêL•“),Ý‚‡lH.­ŸˆGíN¬æ‚í½œ«•n­¡¬­ÀТ¿Þ™‡¦-¡PMê–iâÙÒé²nê®n©¸ß¨Jl‰XT´¨RêŠÅt‹ˆ>j¸RMæ–+åâ«å"æâîçvîçZ«è¶í~hž†íhloBï¾Nïè"—õÒ¾ÒnínXÎþkîÎohŽFïÌïê¯ðÞ/5$ŠòŽ•ZªÒÖ¯óïêæ¯ë pì~­ç6ɉhoK÷òÅ÷&ÄÞŸ¿6fÒ–¯LPáž'þðßðí¦ÎúÅdÍò®š*Ì­!Œ‹ÿoíÞ™ÝF랢/Œ… ±é>( ï S0ÁV•®²6­.$/ÞóÅl<èú…sCºŒ(³ÉL6r63Ó¦Ž2ïÿ¦q<*8³+oðíª.ñÊo9SîõŠð.;V/ÿ²6÷D0ϱ>Ÿó5ëñòÉñ;73??3Dws>›kBüæAª/o³7!Ý>ï¥8´T˜n?#4Ø(ô3´9‡Y<«1=çp@GrHOóî¦ÆçFó ‹óÕžÒÉô‡Y?¯ŸFó&ïtÅΆQû/Oã¢3ß4ŸŸD#uOÛñSO4[úô+1P ôâå49Ïï7?´GŸ'V‡óTpRW®C/5Éâq8suSõº©ðZµ·s4õݵ^Ÿõ*Kõ\oµ‡Þµ7›Ù> vL´U£sVÛõPvU;´®„õXgêF;6_Çɵ^‡pûöa_v.§õC·èçµgóõQö^·JºxöW;³ho.iC¥Q×´N‹0jwvi£ifo6GCun£5Õ¹¶möQÿ6OŸ6qÇöcÃuoî³p;Io3w·vhwo7vg÷¦¶vw·wãrfwx7y—75¯¶y§·zS´r—öx¯7|Ç·|Ï7}×·}ß7~ç·~ï7÷·ÿ7€¸€8¸8‚'¸‚/8ƒ7¸ƒ?8„G¸„O8…W¸…_8†g¸†/x@;libstruts1.2-java-1.2.9/xdocs/images/struts-blue-3.gif0000644000175000017500000002226010404045216023167 0ustar arnaudarnaud00000000000000GIF89a謇999BBBRRRccckkk{{{1)))!!B1)µ¥”ÞÆ­÷Öµ„kR­ŒkÿΜ÷Æ”÷Μ޵„kZB11)!!!!)XàOØkìXìXôZ ÿÿ`Yø™dí0XðˆY¤ù‘ø™ ÿÿÿY´üÈ‚í8ÿØí8Ô,‚J\hˆh¤‚J4;FIGôa9ÄVBB9RRRüÅüÅ´ k„µýàýàYØY$ÿàYìù‘ø–PÿÿÿYüí8ÿØÿPÔ,židh˜½j"Pÿÿÿ h˜½j" þÆÞ( øm»ÄZ8 ($ý쎌øÂwüñpù8ùºˆ‚J  `$FOçXÿÿÿ4:}êL`$PD[ÎŒŒŽŒýìD[ÐŒ¼ÐȺ€ýàýà]¨ù‘ùXÿÿÿ]¸]¸øÂwüñpù\OØkì[\[dc@þcÀ :dP\orejtc\sc@þÅìü:ìü:nc@¸o–c@c@þcÀ Ïб¡agÎÁTS…ù¡!ù,è¬ÿéH° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\ɲ¥Ë—0cÊœI³¦Í›8sêÜɳ§ÏŸ@ƒ J´¨Ñ£H“*]Ê´©Ó§P£JJµªÕ«X³jÝʵ«×¯`ÊK¶¬Ù³hÓª]˶­Û·pãÊK·®Ý»xóêÝË·¯ß¿€ L¸°áÈ+^LU‚ 0H2dÊŒ3kžé²dÊ–/`ÞLºôÇ$[°¤µë×°caµdÔ¦së^ˆZ5kÙÀcÓ¶Í÷îãº%Óμ¹p8ÎÁ8òë…•Cpν9íèÓ«ÿÀNþ/庫_?dÔÖË˧{>=ûûÌi¿‡?¿ÜÕø¨m” @|þ%X€6˜8ž‚‚…zfØzà)ß„¡æ´ gA…5‰‰%®¦Û…öi(#lJç!©¨‰(Ò¤#‹<–ãŒDʶÚDˆàB”­¶†Ü ôa#5é$”ÎI‰£bCéekG&™€K*då“16§e™Tnt¦XªIÇ”‹-÷ål€$’ޱid DYŸ ¶©  š¡ŠÙy§—yî9£ ! ¢”z(Ò1èˆYú(‘·P@ÑAFf¡AÖ)’eÿª©E®&J¬È*˜¨£ÊXê©©^°*Cµ^z뱂:ëEÅâ'®ºþ…Ú¨èÅ™až§`À©Éú9¯ì t*’.{¸ë‰[¹c @Ø´V›æµd»mݲzºê©Ë®æZÄowþŠ ð` fH›yæi২9†æz§¢†Úr›«² %ÚFÇ'ÇCäq–  ò¤$û•°ƒ Ðð/z£ÄpÎÛ\Å\œ1¾{+ÐÉr†LÀÈB—¼/§¶´¾|) TÝ\¬õÖZc¬£Áa[ÖFC uAD3'ÐÏO+QÚÁ­}oÛI]µÕ`ÍõÞxÿMd`'6Ù*`6Cp'÷¸,'í6A‰Ë¶øºŸWä±­–gt|÷õçÚ†nÀçý2˜Xì9°†·ë’bÍx´'»­²SN™ãsa›æpÎ7é„‹Nºé¿½¶šê¹GWnC·›;ݵ3½³tL/&ïr> yj»7á§²n~ùöоšƒ—>wåùþš@„³Ëýãò»F¿ûÔ÷å}w´ ŸÆç>ôEç|è¶Ö· ´mð«ӤǿíY®z› öêA¿4ˆj»ùP£í)4’BR > ‰j#ìÐÁâ§Áûìu´Ã Új®ì€u»» ]ÿ>ˆ·­Å°„’Ba WØÂàˆŽ™¡c÷CæP‡ßâaº|ÄÜ.BOžŒX@^ÆfQ@ÃFHê€è‹c°®¸4*j«Xü“ûåÃ;v°/aŒÀ»VÆ`}j 0PóFÆÑ€ šwhGþ1”Ä]éH(L[ƒ Ùè´¦`‘nÜÓ qD‰\φt¸X¿¨´WöP–$le_<‰PjM”63e¡„±E6reg¤¥-·ˆKçyq’\&›Ù:Z²%«9•«8Ç–=5Šdch7‘üµæ†Vô&&‡¶G‚q1Ö\ 6- ÍÕ™Q’§ÅiÿrJÄœ@@g‡âi.€ ÔFMË<ë©=N~>Z)ßÖÎù¬pª’PB(ÑR2ÖrM& 1=.*‰c´%4–è°$„“Z€6òz¼L$™aÕd¡ØæìÔ9‘ET£[¢h§.,‰Bs"µÏGÒÖŒ4©% dN”’d¥,jiG^ÊÔHúÔ$6ÅiµtZ-ž2à¬3Ézêi´Œnô ¼s’^÷Ê@"É =% l‰$#‘ÞPUgè)å’|‡§"„2¾ÉiÜæ„Õˆ ÆJU…b+Ë×ÎÞ´2úk+XÂf„2ÿJ-°Ÿ» ¬¢Ì™kPcÚTšÿv$¯žÝkj¹SÒ–…MÍac“XÊ’”Œ€cY )³ç4îSrÙLLNÄÔWnu Z ‰Ö·¿Õj»›¡Õ¶vº‘fw$S֌¤W¢Íf ‚³îPf”0Ðn›³Ç(iBQ…îdýùÓñÑ¿íZ|¥6߆HÀ~@t–kõr‡½´5«»^²`˜A Á©/wîLˆ `¿Ìé¯þ+ë evˆÝ‰`¸ ¤Ã ’¯ty÷à©F. eX@С"Á±€£(Óá>úÍêÓ êâjU(–´ˆŠNÓuQr€˜ì©O å€]Ñk‘!«vÿ´F~’C"fü™ÅafO”?EeYY3EM–Õv¬|AÄËý3Aê|Ÿ;›q°íz֌֤™6ŒÓ%KÍžHí Ï7¶³VaîˆmeôdQýÌCÛj…†§×ãéÙÖ 3f´db-xΙnuKf­žZìÖO5©}Lëz‘ÐÖªVX}¿NÁŸ²&¶©õôéG$×uÞ5¶IRêîÈ6™lÞˆ¶·Í:^'û>9•ŒhƒšæEÒ1Ñ–\Êjëjc¡Ï~…Z·sN}oo¢yF´¡Ú–]»rsçÜRf¸DÞ‚»;@ñ.À¼!Pon<ß±‘¿Ò©[pÑÿ›³»¹ØHw8áXxº%ò uÕ#sr’SNÜ ˜Æñ5{®›!Ê\Í}ݬùüö]pÞuêgÎô)Ï{þó÷išŽá9»‚-E(=8«Í9²I2uù<@ŸÐ×Ct=oHÿ8y{X×q/äé÷ŠºmËÎÖª;>YOùÖu§èÓhõw2¯ÝwÎ÷öPÆÞÏãåºót<™â{î[<2—ól,ÑÕÖ8o ya ÄáÖ€ìõù™7DE‰¿¹»Ï÷Ñ—þ`’×6åAgy|=ºšwzÓB×úP7Þö¿:ê¬zÖkXâx Àòï£x«;ô+kèŠ9ý"Ñ»göÔûÿïúÎ'ïu—:öM¨ýU<Â0Œ;o+}f{Wöv½CB„ìWñiÜgðõ}B•Kí2~èd~]6|é·wë‡$í'!ï7#èNsIôV}c—i&/zuFŽ13ö2T¨A—GloW€b‡€ï4 ØyÄ÷|éöÕ‚R6‚ S‚”C(Tóu«…3C5GE5q©¥-ŽA8Ũ¡ ÆÐ7q"Z8ø)$XÁ(è{˜‡c+hO-ø…î¤}Â'ƒ HK6¸Z«!‚ …[øƒdhsËCEG˜„°„qGiN˜_'6‡^"…úWŤB%¤@Ð yÿB5$†$¬Ãˆ•Çr¦nF3c "@LXpúEˆrb†O…~2åS¨ ˆÑÁˆŽ¸x_’HB”È{–˜{lgyâõDFÛtQŒ8 äG7K‡èú4~Ô‡Ö\Œ4+äŠòˆ‰0‰ T‰Mw‰Éã}’›(¸Úò‰ÉŠTd‚¥È€§h[©¸ŠÐ¸ˆ ôбH³ØŠÙh‹Ûˆ‹ê<¼8[¾è9ÀH9ÂØÄwÆXi}¦d«•F ¥OÙBã'6D<¼Ç:¶F„@5Í’!«q7GGF&#p‚&Š„FŠûÇŽM‘£æH¢3‘ÎV‘YH&ô<¾ÿ@ä8@„T<Œø“ÚSu8gQ]Ý—f*ÖŒ¯'ˆ©…¡#“½Ø“5 u7Ù.É‘ˆ7#Y5!IH#Y’t’éØƒ›‡rhØŽAÇ”/)‘(©rQ¹M5i“¶ÆNP>;IF>ù“ùÈ8BY80hx‚$ÊøfUYÈxJqŠx*XóŠÂã“´B+ã&F5¨‰3É5•™÷D(b©IŒ£”f‰=¢s*ÿ•–G¸˜csŽIÛTšr$™bg˜Bžó3¬³2’éH-D•³yŒ˜0˜T˜ñTL¡š9Áãš¹:‘)›,ãTb™.7bà˜™xé>œi‰ŸIA¡ÿÙ1HšÒY§©vˆ¹œñȘ¬éœé>ºY>½œQ›²q›Ðùš÷²›&Ô› ¤@YäˆÏˆŸ±7zD9ÒF쉠*wtÀ™B¸rFNVLB5GFó I×F)á¹Aÿ‡å Kž§aÑ ü„$*8ÏyDZ¡RW-êƒÄŸí‰vLHh "ˆÉ¢ÝÈp¦€¼ª˜P£±±9p7¡úeŠ˜ JHJŸ’k! K*Ù¦8r¡¢©Ù¤EÚi/*—1J¥È椴šw‘öe>ŠL‹Wúdhz”ñ¶FKfú’­©=ºOid%ÿÊÑ¡:8Ê¥I¤£ø¥%.¦ 1¦(š… …¥ˆ:£ŠšHu\5g d”£”©OG…`Gè¦ÇE}šD ¨R3¨éÖ©p¨#š¨mtT±Êyøñ¨à©*£nH'_ÚC˜zw,¹©Ô¥¤l䩸ª½*ª¿Zª•uªªIªFuTûô):*ªÁ*«ˆùv§Òv(a­#šœÊ…@­÷¥es_Ù¥†Î)>žconˆJŒ:—:¢ðj|æÙ€‡Iôª¦øèLA”] QsUV¸ªÂ$®HŤ®À®Qè® fYòº°ÍÖ°­ó°ÄD…Ÿz—ýêqÿºH+;žgx°íÿ˜°óº«ðI÷в±mù›a¯á ¬†¹Êɤ¬§Rc‰¯Õši(œ[¯ 7áIéù³ 1³dY³`ú‡3õOÙé¢& ˆá´í1³—K{ ¶9Ûµ;;µñŠXë¯æš¯@;–i•D¦PöŠ–®§¶´Á¶{ª.©šÑ!·øA2G†ûœ y}+«mKsA«oͪƒ ­…[¶²¥™k¹¦ EfŸMñ¸íIB’[—•[N« ¨k€Ð§·úعáµ+¬a‹°Jµ³©k»—&¨:…31«GF¶ªªZ–aaçl~tuñŠå8¢AÿšÀK¢1ºh =ðŠöpÁifšÏļ.á¼½…#½¨!Õ«Léëœë{rš[­;º1¾sf¾ùØ[qÚkIÜî[…¿çzáä§ö«1Ó[Lx›E­‰CÖÛo(m*m½,]8¶,ÏÅvµìÌÈ€;7mÑM8Ë;ÝÒ'˜ÅÔðÑë1ÔÞæ¸òNgGã‡pËÑdÉ2ÔÎÝ ÓS½ýÒXMºZ}Î",ÓYõŒ¹|P;ÒÔÖR¦Ö4mUÐÖ¦—ÅÜ×r}}Ñî\ՌӔ½×Í¥i$¤€Ø2ØNA¿³8½Ž!ÑcœÌ–ôÔåK×9w©˜M¸šmµ¢#Æ,~*oBí®'\¤}`Ú €Ú™´²· É*[ÂìÌp±í¬yí^Ñ,ÀÉÍÚQ3³ØÏ¾­ÄfmØ’ÿk [¨ í¢ÉíÖ1Ù´=Ñ N¸]µ±œÙè뽡þ9"ˆ< GbÍ_ Ú¯«–[•¦ëÞr¶yã}º;¹½=×ëlÜñܪÝõŒÑòàÐG¿ø¿2²ü ÅD²êa ÚcÞ—K•ÖÉÍÓ‘mã{ÕÏœÕQŒÜtZâ)*ˆ¡lB‚ ÚÝ¡ˆ¿ÝˈéáÝâ#*â„Ü$»ëÚð­âëmÓBlâ|„â÷3â1îÒ‡ ÖŠ():ÎÝKN rÚî-R>T~¯Ø^ \Ù ùµÎ Kh^æ© ãdžâ¡¢G}Oãå%'vTáåKVÜa~AcN–pNrÎùæMÿ~~¶‚èd+ßsîvÎÇŽdH å­±çj=6f€~¯b>äqz¢æ½ÜVëèv½äñÜÚÆ‚ê.<á…Sêuîß¿ÜÅÁÖît«Ž}.€ æ .è¢.@ÁÎgžaÒíʪ¾m¼TÈá: ãň†­šÔsÈ2¾kÇÎàÇ»¼ŽÈQíêj.žl^ÑØcÑHÌì]¦&Æ£¬hë~œëÀ¡é²Îã òíI>þ¤R=îê,Àì®Þ–Ýìþì…N»Ÿî#®ô}Œ¿ ¢ï þÜ(S¡ŽÞÕäÉn|ê ŸèK9~§Âêîæ'åÃ.ÕÓÿ^iÅÔͱk/_çwèYbRÑñÜññÁòHîLG¾²ˆ~WUÜ+O9,îò¯ýâÌ=ó|*­6G8OÓ:¤Jq¹(ÎQšLÝSÞðxmð'OվꂻðàÞ*_oÛaOçèê’gŠØÝ§óí]\_×léé$ö²môeŸê_®hïäîtðÄÒöhüö,!ÐsïHjuv¯Üï] Ú»'õqÎÜFNòǾö¿ Ú~HðнîÿêtÝùŸLÒý§øî“¿íÕÌ2ù‰B.îSlì‡~úç.j…?šNÿïóö&û³î˵úú­ûT.²Š]*_¥¿äÇ»ÐŸhüŸ/ü3ÿÝ ïm~K¼ßî"_âÅÄ.‰ñì± `ûþ–èý#xDýº{AÃ2ïÔÍÿàDà@‚ nØ€\¸ @Š-^Ęƒ=0àÀB*P @ÆŒ]¤¨¡CˆYÞ¤òåK„#g@©çЊ*QEZ4€D”#DØipÁŸ $H 4éV‹ |jÁD•eWrͨòiÔ%!Ž,«V–XÙzìyà'Ù³UÒ¼€–ÎÝŽeZ­)€®à‹ ô ×䀹}oz}\PeUÀµ›y`Þ½ÿ}©c O±2N[VìÿÚǤ›¶ 'æ‚aÇâ6«[)mÑ@Ü^,7kî‹¡‹Û|:`ÁÅ^xÛ3sج‹G&9¹2QÞÅ7ëÕ®˜ûM碡§–N}5ÇÖ^ Wªr6ÔÚ8Ã_¿Šˆëè©Äòª²Ï†òŠ@ó()¹¶ÃI"ë€ðê0ÀP‚H,‚ž2kAŒ.Ä®4›¬È;Ñžú/±!R±8”ª* «¹²Ðº ³ÛP-ø0‚™SÉ£§RÄ›PŠ1ª§ Åˆ&B‘%{‹à@ \NI–äïB•" /$ oÊñ;4Là <ĉ"1!S»Å& c½ÎÔÃFú.œ½ÿÈ3©4EÛ±47áHÎà.*²ÀL’+&½ëÉ(ýÄ“Ê*-ª43! A¯VõÊ¡=­{ê=ˆŽBêB°ž ÓR¦8“¥:ÙLlT:²5Îâ%”¼Ú¯X‚ bÈDQÑrÖØ+ƒÜµW:Ê{i#¯†¬P€®í”ØOX¥Š;5Õ-Y]ÕUN‹Õ?PgU ©j#ÅÕ¥§²ô¦_ï vTb} Ye`Ör‹ƒ6Ú?aÛ·¾‡ëx1n]ò–pÑ‚‹=ÚèÜ;ÓU—H+fÙ#¬ÞÕÆiqj™-7±BI[Š–VØkZ ‡¢5à8Z« Ú¥›ª¬‘?ò ÞUÿ›µ+‡$DYÝ•“nùeäbFtf¹öh霶ˆçô|þŠì ‡ŽÖè|s»#³Sr:W>#PUjª‹³š¬—KyçºYV(/ ›Nêé–›" $ˆd^Lí?½D«ÔÃ+ÞˆÌCGËq–!—ü‚…7ÎÞÅñ.|0Ô«M\õ2“e)Ñ+&}€ÉîܺÓÜ+Í_/¶ó$ùv®nß7w|Q"¾¿‘Vž±ö¢O=$)FêàÍ7rÙä3È mßíìY]æ±·ôêÙAçÊûÃÁ'@a¶f¿#|“»zÁ®Ïa¢½{™nnI‘_Ýè'>¦)€|æK°¦”²õÐXÿ.’@ÿ·-p2(ÁŸ²¿ìô/@ºy•=bðO<„Û ôP÷””Ä!¥Ë“åB%,•üL…Q)TOÈnކ°aj~x«©0DJ‰U —HºP9¤HwÄ$âpZ:,X•zض)ÚLÔbF´X7.0e4V ðD±U "Œ^Ó¦žË¥#x´UÄåí ï1‘ …£‰²X% aT°28,^Ä‘Öäd.™4‰`E!”ô#cî¨78AÓK¢‹Bi‘MŠ&“!!¤z IDl‚£b¤ZYHI4“œ]Ö–GJ²½r»¬Y'ðÉ`°u%ͲǟœÿDyh‰æáÄÂTÐ,’+I•l(AH$w"–ÿÀ›@&[¶Y47¦"?<å’7ÎwfsŠÓœ^5iÇOŠøÓmóìfÓfy—pPgø)g^‡Î ¨ó%ì•;¹bP²!´žÐ¼>ñFM«ìs•Œ‰h« ‘ ¤Pÿ¹âI1‚šx¾äH(‚À.! ‘uD‘Dt´§@Ä¥g<€B2³„À­‚¡)1kvÓÒ쎃›Ã ”H*ÄÖ‘*XQ)KpT’Þ2ÎDétPS] §·Ñ)OUòÓÖ uI+êÈšT,M}ëS3§V¶BÍ­U½@àØ—ÕOÑèƒÿ×l !bÖ’¼N!(’û`J»‡ /“â…nЬ v;;Á®´T¨ŸÈ,²À°bQ”LGeˆB˜y1ß/³oM¢kÓ Úyík´(mIÒÀr­Rm™J ”Û>V‘…“ì([Ë"³Ð,¨¬ÙÙ­°P^@;nr£JÔ¦6K¨²k•{]©$¶³õeñÌuÛ  „º»…n}Äâ[ð·žÂ…êgpÞ©º•´ hír¡ÙÜ8%À“.¨ËMëõµXqîq¢Ôš1$ÃÜcÏJ^Á(Ó!ùÛc|£’{îÀXi`.²ã @É,(±î´+8>^­)ÛÿUéu¥Ôj‰Æ u‹€ª0DE¾‘ÈQGLeT¾ qñ‹c¼7±<+6LòB|cÚŠ¦$ÞêG½)Sˆ~5kž,HÜ2J(î²Y)Gg–„Æ»°aË€¯È8ÎñRÀc„ø¸,@¾³1xã/+J(QòÆEÊ&Ã÷ÉQ _™I´+óÍYîï‚õÌeP ÇÐs§\mæ 95j®pýØœß}½¹ ˆs:Ö]å¹$I óHØò†@J‰mx‰–P^¡ EÙ _=•é.wêÚ`!™Vmå,Ì/ vvœ¸Gzsج %4RXdoJ»â·£ÿ§ç$†;à 3{oÈÖMáŽ%~Éms!é8—šr9Ì%NîŠ_\ÁêÖ8»Ïên:€[Øó¦w@y¹–嵘®a=ͤžZO¸n ^Oƒûçk²©®Q‡â÷Ä)^Æ%Hß,Ç¿.ápÜ!¿CF~€’ à䆒3ÛWîÕ}KxÍ*>›D,-ÊÇ<áŽ:‡UlÒ•;Ýïö~qèýv…#YøšÔ».ì—kþÙ ÷¹á}5C=íª¦µÔAoÿÖÝüóD£g7…©ÏË;ndýÓçˆû±—ß»u°Ã½mº‡m;<þ±¬I úñz{ñ±i×K³##¾Ù›¾ã“¿ <Àæ²çóºè=ãã0™¹¾Ë>m³Àµë¶Ä%Ië¸ “¾ùã¿”AöS@À|K07!ÀyãÁå{@ÿã½9c‰\ò £0³*÷û¾wS&çê;”A ¤:kZe ²'¬AhÂ7š½ôÁ/Ü9×S1Ô#T–#„A$šÿªCö ½Ý‰½%ô*€“0ñ{A,„ÂCä³ÁÄÁ¶³Ã ìA6Dê{¹ T¼¦“´"4B碰ÝIÄ×jÂTÃ(ä?$¤*´¼+d½×{±>L½oëÂ`û=BìACôDü[\Z4ÄÃ4Eà;ÄOL,ÞùÃÎ+ èÛ;;DC'¼ÀÐ{ÄZ¼A9œ)cDù“B B8ô0JÉÅÜ;L[˜a$Fƃ-Ùr¼`óE`l®>¼Á!Q&GaôCBcÌFd¼Da“¿PC°¡È¾p¤½æúEÿSÆ$ÇP¬F|Æ…aÄ^¼Ã_œB!Kž8¼º]œGuœÅ{tǰáGVT–äÑ;jÜGÿE´/l DªûÅ`|žr yGHôȃ<ÆäKFä[ÆZ¤/gd!ytE“´Çv$ÈH3GbGʛƈ¬CqœÈ‘¬HðS° 5Ž$GMÔG}K’¤¬IÙÓÅdÀœ,¤2‹¦ôI9Ì>¡2^ÌÊ¢T–¨L°©„F¯a.! µŽôÊŸ¬¯ÄÉœDÈqìɳDKkôÇlˆ„JY¢3¥TʸŒ ªËZ|K¼Ä °¼Ë£ÄEÂʺÜÊÀ4LxT˹ÇÒ)KúÆ[äK LJô£¼¤¼L¤K]˜¨lÌάÈÌÜ̽L«ÑüÉ›M¯«<ÎÄ®$©¸˜Ì:¤ÀH+6`ßÞ %@0ÙŽôÁbAL‘Æp\SI60*F"e ™ Ä*QN½¸vFA¼d9à’¶°µnhÒ‰ ÓÍ*åLäK$wVAŸWtÝL‘[!&¨PÔ¡ªØmª¯ D4‚H/(jÚ)­Ö(Q /½â@À†©ÆÿFtX ØÝÉÙo7´¶Îm7Wf˜!BÈä¹VÓ]׬ØD¡aì¾Ð—‰3Dôš +Øœ¥}NŽ“ÇßkóqLT$jÎ@LïåW™ ´j¡\û‡‘N£C=÷^RjŒ'4üÖøµëüI“Ýí5 ®%€b½0Z­ªÊ&ÁVˆÑu±Mç]û‡TÞôZlêåþË;ÒÙH9rv“*ù¨g=ÝIUÍØgö¤'ñ;ßü”ó,ª´o).y ºxä ²‡7ü˜GHšð„(L¡ WÈÂ&ä5KŠJ\HÃv„nL£`lÈÃ2 j7k”ÿÄæ9ÆÐOw>\ˆëtDF µ)ŽqnA‘ @k å°ÆD/‰éâ‚üƒÄo½I%,AÊ‡ŽÆ,<í O!àc"ÆÕµ¥Œ`4H4;²p)¹Ré*r½“P(A±JÀFÅ„åB;œXóv·=ƒàÐ_ñ™R!MrÈ´Q©y”r€¯*B´ç±<Ù$]pGÆ›<”­ê Ÿô$Ì©î@ìÙ¡*‘ÄÊE1€C×k‰¶È(Gšjf! ›²Ú €‘[3‡“K~j8éâ Ž€gLÇ¥.FkÍnr 6Ó0Ï4 ¤ ¼Ñ<Q `Rä•Å &hs”Èhäãÿ.VQ@3ÅÚÕôúÒÁ»œ-Y£´YX/ótç)QI†–ãÅo*´9â„£´WÛ“˜œÞŒoCëŠhu2²O´¯)°|—-é!¬äst û¢˜*ª¯xQnä¬âË„œq/ NĤåÚa-7ÖÊEjð=Ìu_‹ëaººØrá^(0£ÄOŠPS\bKDZ”Æõ[Y¨-PE 8èã²þÖ“2 P{Û‘s‚'k¥èõ„”“3fe½1ŽúKàoøÓwGºÝXÙ7 If0„!¶ÉÏ’¡Àù=FÕèŒí. I–T“‰æ 3ÉøLh$Sàãh@°,ö|“…SÅ“‹ 1x(A5¡–n±ˆbÇ(޲ØdDS/Ò‰¸EyøÈÅue8V¡-¬Ôk€bÆw9†Æh„üˆŽq:¶%†61ŽéˆY);í¨$ÑK—xr¦ôs cjD1/þUA—÷xR‚}aq›ÿ¨ ð’‰Ù“é'9Ñ( p‹Q3ôj@’æV&Hôk*‘$J^`s½Õ5„ØzGrZÂÇ‘rå‘Â)D2N‰=‹e“¦Õ•Ê’örž¤ÍC0#QéEPx¨y¬2Uæ±uŠ®”—$adáñi%˜“QZ›Ä—òXƒ†éô…™)u`ÉZbÙd[×\9™)5ã|½SAÉØ:¤XH81M¹øš§1‰K&•ãጠ¦]€\àZÞB›a›¨RHëUmeÄ>¼È*€Î¦(_Ùdƒ‡Hâæ'4£a.v!Ë(h„@—ˆÿòmIÑ•@F‘KèW)5Ö™ÝqĘöm9r2|ƒ?¢D^­ 0p4@“A˜ö3Xû©qÔ ®!æá»r ÿ#@”jŒÒ#ˆñ̇¡n±a÷$?à0 ” · Ð e“/cæ=øpò¥p.`>쥆RòùgæÇºÑf fþÓ@ÇÁš>šg•´YSÁfŠ (»X „@ÅÉMøó£ÊAgØqEJE[†w³ãgãÆ¥Fz?¤Ü3>oôd*¥‚Xj®‘eòéenº"³Bƒ1;lÊHu fzº‚ܳ+i6§ çfÅ2;p&ŠÚf&åh$èjŒ‚§y*©Z©–z©˜J;libstruts1.2-java-1.2.9/xdocs/proposals/0000755000175000017500000000000010423130301020611 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/xdocs/proposals/project.xml0000644000175000017500000000055610404045210023012 0ustar arnaudarnaud00000000000000 Proposals - Apache Struts Framework libstruts1.2-java-1.2.9/xdocs/proposals/release-plan-1.0.1.xml0000644000175000017500000000534410404045220024350 0ustar arnaudarnaud00000000000000 Martin F N Cooper Struts Release Plan (Version 1.0.1)

    $Id: release-plan-1.0.1.xml 51200 2003-11-29 07:27:33Z sraeburn $

    The objective of the Struts 1.0.1 release is to provide an official release of all the bug fixes and documentation updates that have been made to the STRUTS_1_0_BRANCH branch since the release of Struts 1.0.

    Since the release of Struts 1.0, a number of important bugs have been fixed, and some notable improvements have been made to the documentation. Currently, these updates are available only to those people who are willing to obtain the source code from CVS and build their own version of Struts. This release will make these updates available in an official distribution, thus making them available to a wider audience.

    Therefore, the following release plan is proposed for Struts 1.0.1:

    • Code Freeze / Tag Date - Wednesday, November 21, 2001
    • Release Manager - Martin Cooper
    • Release Announcement - To the following mailing lists and web sites:
      • announcements@jakarta.apache.org
      • struts-dev@jakarta.apache.org
      • struts-user@jakarta.apache.org
      • jsp-interest@java.sun.com
      • servlet-interest@java.sun.com
      • http://www.freshmeat.net

    Prior to the release of Struts 1.0.1, the following action items must be completed:

    • The Struts 1.0.1 Release Notes document shall be updated to describe substantial changes and improvements since the Struts 1.0 release, along with associated updates to the main Struts Documentation Application pages describing the new release.
    • All of the Struts example applications that are included with the release shall operate successfully in the following servlet containers:
    • A release vote shall take place on the struts-dev mailing list to approve this plan. The release vote MUST pass by "Majority Approval" of Struts committers.
    libstruts1.2-java-1.2.9/xdocs/proposals/release-plan-1.0b1.xml0000644000175000017500000000667410404045212024444 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Struts Release Plan (Version 1.0-beta-1)

    $Id: release-plan-1.0b1.xml 51339 2004-01-08 17:13:01Z rleland $

    The objective of the Struts 1.0-beta-1 release is to create a milestone release against which a final series of bug fixes and documentation updates can occur before a Struts 1.0 Final release is created.

    The code base for Struts has been in an informal "feature freeze" for several weeks, while development focus has been on bug fixes and the completion of required documentation. Both of these goals have been substantially achieved, so it is time for a formal beta release - with the goal of moving quickly to a final Struts 1.0 release shortly thereafter, if no disabling defects are found.

    Therefore, the following release plan is proposed for Struts 1.0-beta-1:

    • Code Freeze / Tag Date - Wednesday, February 21, 2001
    • Release Manager - Craig McClanahan
    • Release Announcement - To the following mailing lists and web sites:
      • ANNOUNCEMENTS@JAKARTA.APACHE.ORG
      • GENERAL@JAKARTA.APACHE.ORG
      • STRUTS-DEV@JAKARTA.APACHE.ORG
      • STRUTS-USER@JAKARTA.APACHE.ORG
      • JSP-INTEREST@JAVA.SUN.COM
      • SERVLET-INTEREST@JAVA.SUN.COM
      • http://www.freshmeat.net

    Prior to the release of Struts 1.0-beta-1, the following action items must be completed:

    • All Bugzilla bug reports against Struts 1.0 nightly builds MUST be marked as "Resolved", with any of the legal Bugzilla resolutions (FIXED, INVALID, WONTFIX, LATER, REMIND, WORKSFORME).
    • Bug reports that are resolved as LATER or REMIND will include comments as to whether those specific issues will be dealt with in a subsequent 1.0 beta or final release, or whether they will be scheduled for consideration in a subsequent release time frame.
    • Any remaining items on the Struts 1.0 TODO list shall be completed.
    • The Struts 1.0 Release Notes document shall be updated to describe substantial changes and improvements since the Struts 0.5 release, along with associated updates to the main Struts Documentation Application pages describing the new release.
    • All of the Struts example applications that are included with the release shall operate successfully in the following servlet containers:
    • A release vote shall take place on the STRUTS-DEV mailing list to approve this plan. The release vote MUST pass by "Majority Approval" of Struts committers.
    libstruts1.2-java-1.2.9/xdocs/proposals/release-plan-1.1.xml0000644000175000017500000001305710404045204024214 0ustar arnaudarnaud00000000000000 Martin F N Cooper Ted Husted Struts Release Plan (Version 1.1)

    $Id: release-plan-1.1.xml 51200 2003-11-29 07:27:33Z sraeburn $

    The objective of the Struts 1.1 Final release is to provide an official release of all the bug fixes and documentation updates that have been made to the main trunk of the jakarta-struts CVS since the release of Struts 1.0.2.

    Only minor changes have been made to the codebase since the Struts 1.1 RC2 release. Issues reported on the few oustanding tickets are either unconfirmed or may be categorized as enhancements and can be resolved in short order. Therefore it is time to make the latest code base available as the Struts 1.1 Final Release.

    The final release of Commons FileUpload has been approved and will be available for distribution with Struts 1.1 Final, as required by the Struts 1.1 RC2 release plan.

    Therefore, the following release plan is proposed for Struts 1.1 Final:

    • Code Freeze / Tag Date - Saturday, June 28, 2003, 23:59:59
    • Release Manager - Martin Cooper
    • Release Announcement - To the following mailing lists:
      • announcements@jakarta.apache.org
      • struts-dev@jakarta.apache.org
      • struts-user@jakarta.apache.org

    The release process shall follow the same general procedures established the Jakarta Commons products.

    Prior to the release of Struts 1.1 Final Release, the following action items must be completed:

    • A release vote shall take place on the struts-dev mailing list to approve this plan. The release vote MUST pass by "Majority Approval" of Struts committers.
    • The Struts 1.1 Release Notes document shall be updated to describe any substantial changes and improvements since the Struts 1.1 RC2 release, along with associated updates to the main Struts Documentation Application pages describing the new release.
    • All of the Struts example applications that are included with the release shall operate successfully in the following servlet containers:

    Prior to the release of a subsequent Struts 1.1 Final release, the following action items must be completed:

    • All Bugzilla bug reports against Struts 1.1 RC2 MUST be marked as "Enhancement" or "Resolved", with any of the legal Bugzilla resolutions (FIXED, INVALID, WONTFIX, LATER, REMIND, WORKSFORME).
    • Bug reports that are resolved as LATER or REMIND will include comments as to whether those specific issues will be dealt with in a subsequent beta, release candidate, or final release, or whether they will be scheduled for consideration in a subsequent release time frame.
    • The final release of Commons-FileUpload 1.0 must be available and made part of the Struts 1.1 Final distribution.
    libstruts1.2-java-1.2.9/xdocs/proposals/release-plan-1.1b1.xml0000644000175000017500000000647310404045212024442 0ustar arnaudarnaud00000000000000 Martin F N Cooper Struts Release Plan (Version 1.1b1)

    $Id: release-plan-1.1b1.xml 51317 2004-01-06 05:49:41Z rleland $

    The objective of the Struts 1.1 Beta 1 release is to create a milestone release against which a final series of bug fixes and documentation updates can occur before a Struts 1.1 Final release is created.

    Many new features have been added to the nightly builds since the release of Struts 1.0, and many bugs have been fixed. Several of the new features are in high demand by current Struts users, and so it is time to start the process of making this new code base available as a formal release. The first step in this process is an initial beta release, with the goal of moving towards a release candidate and then a final Struts 1.1 release as soon as is practicable.

    Therefore, the following release plan is proposed for Struts 1.1 Beta 1:

    • Code Freeze / Tag Date - Monday, March 18, 2002
    • Release Manager - Martin Cooper
    • Release Announcement - To the following mailing lists:
      • announcements@jakarta.apache.org
      • struts-dev@jakarta.apache.org
      • struts-user@jakarta.apache.org

    Prior to the release of Struts 1.1 Beta 1, the following action items must be completed:

    • The Struts 1.1 Release Notes document shall be updated to describe substantial changes and improvements since the Struts 1.0.2 release, along with associated updates to the main Struts Documentation Application pages describing the new release.
    • All of the Struts example applications that are included with the release shall operate successfully in the following servlet containers:
    • A release vote shall take place on the STRUTS-DEV mailing list to approve this plan. The release vote MUST pass by "Majority Approval" of Struts committers.

    Prior to the release of a subsequent Struts 1.1 release candidate, the following action items must be completed:

    • All Bugzilla bug reports against Struts 1.1 nightly builds MUST be marked as "Resolved", with any of the legal Bugzilla resolutions (FIXED, INVALID, WONTFIX, LATER, REMIND, WORKSFORME).
    • Bug reports that are resolved as LATER or REMIND will include comments as to whether those specific issues will be dealt with in a subsequent release candidate, or final release, or whether they will be scheduled for consideration in a subsequent release time frame.
    libstruts1.2-java-1.2.9/xdocs/proposals/release-plan-1.1b2.xml0000644000175000017500000001126610404045244024444 0ustar arnaudarnaud00000000000000 Martin F N Cooper Struts Release Plan (Version 1.1-b2)

    $Id: release-plan-1.1b2.xml 51317 2004-01-06 05:49:41Z rleland $

    The objective of the Struts 1.1 Beta 2 release is to create a milestone release against which a final series of bug fixes and documentation updates can occur before a Struts 1.1 Final release is created.

    A number of new features have been added to the nightly builds since the first Beta release of Struts 1.1, and many bugs have been fixed. It is time, therefore, to take the next step in the release process, and make the latest code base available as a second Beta release. The goal is to move towards a release candidate and then a final Struts 1.1 release as soon as is practicable.

    Therefore, the following release plan is proposed for Struts 1.1 Beta 2:

    • Code Freeze / Tag Date - Saturday, August 10, 2002
    • Release Manager - Martin Cooper
    • Release Announcement - To the following mailing lists:
      • announcements@jakarta.apache.org
      • struts-dev@jakarta.apache.org
      • struts-user@jakarta.apache.org

    Prior to the release of Struts 1.1 Beta 2, the following action items must be completed:

    • The Struts 1.1 Release Notes document shall be updated to describe substantial changes and improvements since the Struts 1.0.2 release, along with associated updates to the main Struts Documentation Application pages describing the new release.
    • All of the Struts example applications that are included with the release shall operate successfully in the following servlet containers:
    • A release vote shall take place on the STRUTS-DEV mailing list to approve this plan. The release vote MUST pass by "Majority Approval" of Struts committers.

    Prior to the release of a subsequent Struts 1.1 release candidate, the following action items must be completed:

    • All Bugzilla bug reports against Struts 1.1 nightly builds MUST be marked as "Resolved", with any of the legal Bugzilla resolutions (FIXED, INVALID, WONTFIX, LATER, REMIND, WORKSFORME).
    • Bug reports that are resolved as LATER or REMIND will include comments as to whether those specific issues will be dealt with in a subsequent beta, release candidate, or final release, or whether they will be scheduled for consideration in a subsequent release time frame.

    The following bugs must be addressed before Final Release of Struts 1.1.

    Custom Tags
    1586 The <html:form> tag generates incorrect focus javascript for radio buttons.
    Documentation
    10537 [:TODO:] sections (18)
    Example Webapps
    10955 Error running struts-blank applicaiton under JRun 3.1
    Validator Framework
    7353 Validator JavaScript Select Error
    10191 Validator range checking bug
    10348 Validator is not available under module
    10349 Validator: date validation does not allow blank input?
    10432 DynaValidatorActionForm does not validate data
    10584 Not all validation files are read in Validation PlugIn
    libstruts1.2-java-1.2.9/xdocs/proposals/release-plan-1.1b3.xml0000644000175000017500000002315410404045226024444 0ustar arnaudarnaud00000000000000 Martin F N Cooper Struts Release Plan (Version 1.1-b3)

    $Id: release-plan-1.1b3.xml 51200 2003-11-29 07:27:33Z sraeburn $

    The objective of the Struts 1.1 Beta 3 release is to create a milestone release against which a final series of bug fixes and documentation updates can occur before a Struts 1.1 Final release is created.

    A number of new features have been added to the nightly builds since the second Beta release of Struts 1.1, and many bugs have been fixed. It is time, therefore, to take the next step in the release process, and make the latest code base available as a third Beta release. The goal is to move towards a release candidate and then a final Struts 1.1 release as soon as is practicable.

    Therefore, the following release plan is proposed for Struts 1.1 Beta 3:

    • Code Freeze / Tag Date - Sunday, December 29, 2002, 23:59:59
    • Release Manager - Martin Cooper
    • Release Announcement - To the following mailing lists:
      • announcements@jakarta.apache.org
      • struts-dev@jakarta.apache.org
      • struts-user@jakarta.apache.org

    Prior to the release of Struts 1.1 Beta 3, the following action items must be completed:

    • The Struts 1.1 Release Notes document shall be updated to describe substantial changes and improvements since the Struts 1.0.2 release, along with associated updates to the main Struts Documentation Application pages describing the new release.
    • All of the Struts example applications that are included with the release shall operate successfully in the following servlet containers:
    • A release vote shall take place on the STRUTS-DEV mailing list to approve this plan. The release vote MUST pass by "Majority Approval" of Struts committers.

    Prior to the release of a subsequent Struts 1.1 release candidate, the following action items must be completed:

    • All Bugzilla bug reports against Struts 1.1 nightly builds MUST be marked as "Resolved", with any of the legal Bugzilla resolutions (FIXED, INVALID, WONTFIX, LATER, REMIND, WORKSFORME).
    • Bug reports that are resolved as LATER or REMIND will include comments as to whether those specific issues will be dealt with in a subsequent beta, release candidate, or final release, or whether they will be scheduled for consideration in a subsequent release time frame.

    The following bugs must be addressed before Final Release of Struts 1.1. Checked items have been resolved.

    Custom Tags
    [x] 11021 ActionForward or <html:link> tag does not support absolute URIs
    [x] 12302 Sporadic error in html:form action attribute
    [x] 13645 Add action attribute to <html:link>
    [x] 15044 Taglib - Index Attribute in html:Checkbox doesn't set correctly
    [x] 15196 Bug on the RequestUtils.computeParameters using a DynaValidatorForm as map of the parameter
    [x] 15451 Multiple mapped properties not possible / Direct maps and indexes not possible
    [x] 15601 tile examples to move to standard webapp location
    Controller
    [x] 12871 ExceptionHandler does not obey controller inputForward rule
    [x] 14054 Rename "Application" components to "Module"
    [x] 14749 Action "input" not starting with '/' and not a valid forward will cause an internal server error
    Documentation
    [x] 10537 [:TODO:] sections
    [x] 15167 Updated Action documentation
    Utilities
    [x] 11932 (Message Resource is not multi-app aware) Multi-Resource not work in Multi-Appliction config environment
    Unknown
    [x] 14042 Unknown Memory leaks with JBoss 3.x +(Tomcat/Jetty)
    Post Mortem -- These tickets were added after the release of Struts 1.1 B3 and need to be resolved before the next iteration
    [x] 15736 Struts doesn't initialize under strict security manager
    [x] 15799 Nested tags picks up wrong bean for values
    [x] 15883 wrong resource file used in multi-application context
    [x] 16019 LookupDispatchAction multiple MessageResources
    [x] 16514 NestedtTiles fail in this release
    [x] 16603 internalModuleRelativeForward() doesn't treat module-relative paths as defined by forwardPattern
    [x] 16609 MessageResource not in request scope for Module
    libstruts1.2-java-1.2.9/xdocs/proposals/release-plan-1.1rc1.xml0000644000175000017500000001013010404045226024613 0ustar arnaudarnaud00000000000000 Martin F N Cooper Struts Release Plan (Version 1.1-rc1)

    $Id: release-plan-1.1rc1.xml 51200 2003-11-29 07:27:33Z sraeburn $

    The objective of the Struts 1.1 Release Candidate 1 release is to create a milestone release in preparation for an imminent Struts 1.1 Final release. As a release candidate, this milestone release currently contains no known showstoppers.

    A number of bugs have been fixed since the third Beta release of Struts 1.1, and all remaining bugs have been categorized either as enhancements, or as problems which can be fixed in a release subsequent to Struts 1.1 Final. Therefore it is time to make the latest code base available as a first Release Candidate. The goal is to move towards a final Struts 1.1 release as soon as is practicable.

    Therefore, the following release plan is proposed for Struts 1.1 Release Candidate 1:

    • Code Freeze / Tag Date - Tuesday, February 18, 2003, 23:59:59
    • Release Manager - Martin Cooper
    • Release Announcement - To the following mailing lists:
      • announcements@jakarta.apache.org
      • struts-dev@jakarta.apache.org
      • struts-user@jakarta.apache.org

    Prior to the release of Struts 1.1 Release Candidate 1, the following action items must be completed:

    • The Struts 1.1 Release Notes document shall be updated to describe substantial changes and improvements since the Struts 1.0.2 release, along with associated updates to the main Struts Documentation Application pages describing the new release.
    • All of the Struts example applications that are included with the release shall operate successfully in the following servlet containers:
    • A release vote shall take place on the STRUTS-DEV mailing list to approve this plan. The release vote MUST pass by "Majority Approval" of Struts committers.

    Prior to the release of a subsequent Struts 1.1 Final release, the following action items must be completed:

    • All Bugzilla bug reports against Struts 1.1 nightly builds MUST be marked as "Resolved", with any of the legal Bugzilla resolutions (FIXED, INVALID, WONTFIX, LATER, REMIND, WORKSFORME).
    • Bug reports that are resolved as LATER or REMIND will include comments as to whether those specific issues will be dealt with in a subsequent beta, release candidate, or final release, or whether they will be scheduled for consideration in a subsequent release time frame.
    libstruts1.2-java-1.2.9/xdocs/proposals/release-plan-1.1rc2.xml0000644000175000017500000001357410404045212024626 0ustar arnaudarnaud00000000000000 Martin F N Cooper TedHusted Struts Release Plan (Version 1.1-rc2)

    $Id: release-plan-1.1rc2.xml 51200 2003-11-29 07:27:33Z sraeburn $

    The objective of the Struts 1.1 Release Candidate 2 release is to create a milestone release in preparation for an imminent Struts 1.1 Final release. As a release candidate, this milestone release currently contains no known showstoppers.

    A number of bugs have been fixed since and other internal changes made since the first release candidate of Struts 1.1. All remaining tickets have been categorized either as enhancements, or as problems which can be fixed in a release subsequent to Struts 1.1 Final. Therefore it is time to make the latest code base available as a first Release Candidate. The goal is to move towards a final Struts 1.1 release as soon as is practicable.

    This release candidate includes the Commons FileUpload RC1 JAR, which is required to compile and use Struts 1.1. A final release of Struts must depend only on final releases of other required products. Consequently, the Struts 1.1 Final release cannot be made unitl the Commons FileUpload 1.0 Final Release is available.

    However, Pending the final release of Commons FileUpload 1.0, and should there be no showstoppers found in this release candidate, Sunday June 29, 2003, is set as the anticipated release date of Struts 1.1 Final. Anyone wishing to test the product before the final release is encourged to do so before that date.

    Therefore, the following release plan is proposed for Struts 1.1 Release Candidate 2:

    • Code Freeze / Tag Date - Friday, June 6, 2003, 23:59:59
    • Release Manager - Ted Husted
    • Release Announcement - To the following mailing lists:
      • announcements@jakarta.apache.org
      • struts-dev@jakarta.apache.org
      • struts-user@jakarta.apache.org

    This plan is being prepared and executed in accordance with a positive vote held on the STRUT-DEV list, beginning on May 29, the results of which were posted on June 3, 2003.

    The release process shall follow the same general procedures established the Jakarta Commons products.

    Prior to the release of Struts 1.1 Release Candidate 2, the following action items must be completed:

    • The Struts 1.1 Release Notes document shall be updated to describe substantial changes and improvements since the Struts 1.1 RC1 release, along with associated updates to the main Struts Documentation Application pages describing the new release.
    • All of the Struts example applications that are included with the release shall operate successfully in the following servlet containers:

    Prior to the release of a subsequent Struts 1.1 Final release, the following action items must be completed:

    • All Bugzilla bug reports against Struts 1.1 nightly builds MUST be marked as "Enhancement" or "Resolved", with any of the legal Bugzilla resolutions (FIXED, INVALID, WONTFIX, LATER, REMIND, WORKSFORME).
    • Bug reports that are resolved as LATER or REMIND will include comments as to whether those specific issues will be dealt with in a subsequent beta, release candidate, or final release, or whether they will be scheduled for consideration in a subsequent release time frame.
    • The final release of Commons-FileUpload 1.0 must be available and made part of the Struts 1.1 Final distribution.
    libstruts1.2-java-1.2.9/xdocs/proposals/release-plan_1_2_0.xml0000644000175000017500000002667310404045234024612 0ustar arnaudarnaud00000000000000 Ted Husted Martin F N Cooper Struts Release Plan (Version 1.2.0)

    $Id: release-plan_1_2_0.xml 51200 2003-11-29 07:27:33Z sraeburn $

    THIS IS AN UNRATIFIED DRAFT DOCUMENT PROVIDED FOR DISCUSSION PURPOSES ONLY!

    The objective of the Struts 1.2.0 release is to provide an official version of all the changes that have been made to the main trunk of the jakarta-struts CVS since the release of Struts 1.1 Final.

    Since the release of version Struts 1.1 Final, we have removed many of the elements deprecated between Struts 1.0 and Struts 1.1 and made several bug fixes and minor enhancements.

    The following release plan is proposed for Struts 1.2.0:

    • Tag Date - Saturday, September 7, 2003, 23:59:59
    • Release Manager - Ted Husted
    • Alpha Release Announcement - To the following mailing list:
      • struts-dev@jakarta.apache.org
    • Beta/General Release Announcement - To the following mailing lists:
      • struts-dev@jakarta.apache.org
      • struts-user@jakarta.apache.org
      • announcements@jakarta.apache.org

    The release process shall follow the same general procedures established for the Apache HTTPD project and Jakarta Commons products, and utilize the HTTPD numbering scheme.

    The release will initially be given an Alpha status and made available through the Release Manager's home directory. Pursuant to a Majority Vote on the struts-dev Mailing List, the release may be moved to the public release directory. The vote may also serve to reclassify the release to be of Beta or General Availability (GA) quality, as defined by the Apache HTTPD project. Subsequent votes may reclassify the release, either to promote it or to demote it, as need be.

    Prior to the Struts 1.2.0 release, these specific action items must be completed:

    • The Roadmap page must be updated with an explanation of the new release numbering scheme.

    Prior to any release by the Struts Committers, including this one, the following action items must be completed:

    • Resolve showstoppers. Relevant Bugzilla tickets verified by a Struts Committer to have the Severity BLOCKER, CRITICAL, or MAJOR must be "Resolved" with one of these Bugzilla resolutions: FIXED, INVALID, WONTFIX, WORKSFORME.
    • Apply patches. Relevant Bugzilla reports which include a working patch must be "Resolved" with any of the legal Bugzilla resolutions (FIXED, INVALID, WONTFIX, LATER, REMIND, WORKSFORME).
      • Bug reports with patches that are resolved as LATER or REMIND shall include an explanation as to why the patch should be applied in a later release.
    • Test example applications. All example applications included with the release shall operate successfully under the Reference Implementation containers for the Servlet/JSP specifications supported by the release. In the case of a Struts 1.x.x release, these containers are:
      • Tomcat 3.3 (Servlet/JSP 2.2/1.1 Reference Implementation)
      • Tomcat 4.1 (Servlet/JSP 2.3/1.2 Reference Implementation)
      The best available version of each container shall be used, as documented by the Tomcat website at the time the test is conducted.
    • Update Release Notes. The Release Notes for the distribution shall be updated to summarize any substantial changes and improvements since the prior release, including updates to bundled documentation and example applications.

    Prior to an initial Struts minor release (#.#.0), the following action items must be completed:

    • Review pending issues. All relevant Bugzilla reports marked "Resolved" with the Resolutions LATER or REMIND shall be reviewed to ensure that pending issues have been addressed prior to the release.
    • Review pending enhancements. All relevant Bugzilla reports marked "Enhancement" shall be reviewed by the Release Manager to ensure that all suitable enhancements have been made prior to the release.
    • Resolve new issues. All relevant Bugzilla tickets MUST be marked as "Enhancement" or "Resolved" with any of the legal Bugzilla resolutions (FIXED, INVALID, WONTFIX, LATER, REMIND, WORKSFORME).
      • Bug reports that are resolved as LATER or REMIND will include comments as to whether those specific issues will be dealt with in a forthcoming minor release or whether they will be considered in a future major release.
    • A Majority Vote shall take place on the struts-dev mailing list to approve a release plan for the initial minor release.
    libstruts1.2-java-1.2.9/xdocs/proposals/struts-faces.xml0000644000175000017500000002577110404045212023777 0ustar arnaudarnaud00000000000000 Craig R. McClanahan About Struts and JavaServer Faces [forward-looking]

    [18-Sep-2002] JavaServer Faces (JSF) is being developed as JSR 127 under the Java Community Process, with the goal of creating a standard framework for user interface components to be used in web applications. Included will be the following basic features:

    • User interface component model
    • Event handling model
    • Validation framework
    • Flexible rendering model (plugin support for rendering different kinds of HTML, or different markup languages and technologies)
    • A standard RenderKit (and associated Renderers) for generating basic HTML/4.01 markup. This library is primarily for making JSF useful out of the box, and allow apps to be portable across JSF implementations. However, we expect a lot of innovation in this area among competing JSF implementations.

    All of the above functionality is available via standard Java APIs, and is thus not tied to JavaServer Pages (JSP). However, because a large majority of JSF users will also be using JSP, an additional set of requirements is included in the JSF specification, including:

    • A standard tag library for generic things that are independent of the specific RenderKit in use (such as adding a validator to a component).
    • A standard tag library for the basic HTML RenderKit, with a tag for each combination of a component type and a method of rendering that component type. An example will make this clearer -- consider the UISelectOne component, which represents a list of options, and allows only a single option from the list to be selected. Such a component can be rendered in three different ways (in the basic HTML RenderKit), each with a different Renderer and a corresponding custom tag:
      <h:selectone_listbox> - Display a list of all the possible options (expanding the box to include all of them so that no scrollbar is required).
      <h:selectone_menu> - Display as a combo box (the traditional HTML <select> element with size="1").
      <h:selectone_radio> - Display as a set of radio buttons and corresponding labels.

    Note that the application developer doesn't know or care which mechanism was used to display this component -- that's up to the page author, who will pick the desired representation by virtue of which tag he or she selects (at the Java API level, you make this choice by setting the "rendererType" property on the component instance). This is one of the many advances that JSF provides over Struts tags, where there is one and only one way to render each individual element.

    There are also provisions for creating more complex components like grids, tree controls, and the like -- a common theme you will see is "compose complex things out of little things" -- that is accomplished in JSP by nesting component tags inside each other, just like you nest HTML <input> elements inside a <form> element.

    For more information about JavaServer Faces, and an early access draft of the specification (and an early access version of the RI that corresponds to an even earlier draft of the spec), you'll want to bookmark:

    http://java.sun.com/j2ee/javaserverfaces/

    In addition, there is a forum on the Java Developer Connection (free registration required) focused on JavaServer Faces, so please ask your general Faces-related questions there instead of here. Here's a direct link to the forum page:

    http://forums.java.sun.com/forum.jsp?forum=427

    Note that JavaServer Faces depends on Servlet 2.3 and JSP 1.2 (i.e. J2EE 1.3 containers).

    At first glance, the low level components sound a lot like the struts-html tag library that Struts users know and love. Indeed, there is a very substantial amount of overlap. So, what's going to happen?

    In my JavaOne BOF on Struts (March, 2002), I made the statement that Struts would have a very clean integration with JSF, so that you can use JSF components in your user interface, but continue to use the controller, Actions, and associated business logic. Indeed, I stated that it will be possible to transition your application from using Struts HTML tags to using Faces component tags, one page at a time -- in most cases, with zero changes to the business logic or Action classes and minimal changes to the <forward> elements in your struts-config.xml configuration file.

    Along with developing JavaServer Faces itself (I am the specification lead for JSR-127), I have been working on just such an integration library for Struts (1.1 only; sorry in advance to 1.0 users). While not completed yet, it is clear that the goals stated in the previous paragraph are achievable with the current evolving design of JSF. While things can always change in the future, many JSR-127 expert group members consider high quality integration with Struts to be an important success factor for JavaServer Faces to be accepted. Therefore, I do not expect that JSF will evolve in ways that make this kind of integration difficult or impossible.

    From the developer's perspective, you will need to do only the following to start using JSF components in your pages:

    • Add a new struts-faces.jar file, and the JAR files for an appropriate JSF implementation, to your /WEB-INF/lib directory.
    • Note that JSF and the JSP Standard Tag Library (JSTL) interoperate very nicely, so you will also be able to use JSTL tags in your new pages if you wish to.
    • Add a couple of elements to your web.xml deployment descriptor, corresponding to the requirements outlined in Chapter 9 of the JSF specification.
    • Transition one page at a time to use the new tag libraries, making an appropriate modification to the <forward> elements for your pages (the URL needs to change to meet Faces requirements).

    The integration library will be available as a separately packaged download that runs with Struts 1.1, and will include a converted copy of the canonical struts-example web application so that you can see exactly what had to change in order to use Struts with JSF.

    Besides the integration classes themselves (primarily an implementation of the JSF ApplicationHandler API), the library will include some Struts-flavored components and renderers that provide functionality similar to that provided by the existing struts-html tags, when this is not provided by the standard JSF components. For example, there will be a Struts version of the UIForm component that accepts an "action" attribute that looks up the corresponding action mapping, and creates the form bean as needed, just like the <html:form> tag does today.

    The good news -- development of this integration library is well under way.

    The bad news -- you can't see it quite yet. This is primarily because it relies on changes to JSF that have occurred since the early access release of the RI was published, so you wouldn't be able to use it anyway. However, as soon as it is feasible, this library will be added to the "contrib" folder of Struts, with the sources (and downloadable distributions) available under the usual Apache license terms. (The source code will also give you a head start at creating your own JSF components, too).

    Everyone's functionality and schedule requirements are different. However, the following points summarize my basic recommendations and thoughts about the future:

    • If you have existing Struts-based applications that use the existing HTML tag library, feel free to continue to use them if you wish. Struts 1.1 offers full support for this existing functionality.
    • Once the integration library becomes available, you should do some experimenting and prototyping to determine the effort required to migrate your apps to the new JSF component architecture (I'm betting that the extra functionality you gain by doing this will be well worth the effort in many cases). As described above, the actual migration can be done piecemeal -- it doesn't need to happen all at once.
    • For applications now (or about to be) under development that have relatively short term schedules (i.e. the next few months), you should probably stick with the existing HTML library.
    • For applications with a longer lead time, seriously consider waiting for the ability to use JSF components instead of the Struts HTML tag library. Doing this will let you leverage not only the standard HTML components that come with JSF out of the box, but also the rich libraries of JSF components likely to be created by third parties in the future (including Struts developers).

    For Struts after 1.1 is released, the developers haven't yet had formal conversations (which will happen on STRUTS-DEV) about what a future Struts will look like. However, I'm going to continue to advocate a long term migration to using standards like JSF and JSTL when they are available, and de-emphasize the further development of the Struts proprietary tag libraries.

    The Struts tag libraries have had a tremendous positive impact on the development of the standard Java APIs for user interfaces. I joked with the JSTL spec lead that Struts users would *never* accept JSTL without an expression language at least as powerful as the Struts one; and there is more than a little truth to that statement :-). The same thing is happening now for the HTML tags -- and it's time for us to start migrating to the standards, which gives us the time to focus on extending Struts in other directions in the future.

    Comments? Questions? If it's about Struts, or Struts/JSF integration, feel free to ask about these issues on STRUTS-DEV or STRUTS-USER (although I'm going to be relatively incommunicado over the next week; I'll be in Yokohama at JavaOne Japan and only intermittently connected to email). Questions about JSF itself should be addressed to the JSF forum at the URL listed above.

    And thanks to all of you for your continued support and use of Struts -- the community that has developed around this framework continues to amaze and humble me.

    Craig McClanahan

    libstruts1.2-java-1.2.9/xdocs/proposals/todo-1.0.xml0000644000175000017500000000675210404045246022622 0ustar arnaudarnaud00000000000000 Craig R. McClanahan The Struts Project TODO List for Version 1.0

    Application frameworks, like the applications we build with them, never seem to be completed. The following are the remaining work items before Version 1.0 of Struts can be released.

    The TODO list tasks are divided into functional areas that correspond to the major components of the Struts Framework. References in square brackets are the Java package containing the corresponding source code.

    Omnibus task list for items related to the Struts Documentation, which do not have direct relationships with code bases.

    An example web application utilizing the Struts framework and custom tag library.

    This is the core controller servlet, with support for the developer's action and form bean classes, plus the supporting data structures.

    Review framework-wide use of features that have now been deprecated.

    The Digester package supports scripted firing of "rules" based on matching a particular pattern of nested XML tags. Among the predefined rules that can be utilized are rules to create new objects, set bean properties from the contents of attributes, or call arbitrary methods with arguments based on the XML content being parsed. A common use for this technology (illustrated in the Struts ActionServlet), is parsing configuration files and building corresponding object trees.

    This tag library contains basic tags useful in manipulating JavaBeans and their properties. It includes support for getting and setting bean properties using simple, nested, and subscripted accessor expressions.

    This tag library contains tags useful in preparing web applications that use HTML forms as their primary mechanism for user data entry, as well as support for internationalized and localized applications.

    This package contains a variety of utility classes useful within Struts as well as in stand-alone applications.

    Update the filtering supported by BeanUtils.filter().

    [STRUTS-DEV, Matthias Kerkhoff, 11/13/2000]
    libstruts1.2-java-1.2.9/xdocs/proposals/todo-1.1.xml0000644000175000017500000004722710404045226022623 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Features We'd Like To See - The Struts Project Wish List

    Application frameworks, like the applications we build with them, never seem to be completed. The following major areas of improvement are being considered for implementation in a future version of Struts.

    Which features are implemented first depends greatly on individual developers becoming involved in the process. Many key features in Struts grew out of code first distributed on the mailing list. If there is a feature here that you need, or already have, please start a thread and show us the code!

    So, when is the next release coming out?

    An external development that is likely to affect the development of Struts 1.1 will be the emerging Standard Tag Library, being produced under the Java Community Process. A very early release is now available at Jakarta Taglibs.

    The existing Struts tags were used as input to the standardization process, but in the case where standard tags with similar functionality are adopted, we should migrate Struts tags to maintain maximum compatibility with the new standard library.

    See also the Service Manager packages in the contrib folder.

    The wish list tasks are divided into functional areas that correspond to the major components of the Struts Framework. References in square brackets are the Java package containing the corresponding source code. Listing a task here is not a guarantee that it will be present in the next release. Again, whether a wish becomes a feature depends on whether there are volunteers who choose to work on the task.

    Omnibus task list for items related to the Struts Documentation, which do not have direct relationships with code bases.

    Incorporate the Taglib documentation and Developer Guides into the User Guide, by including the source of these from their present locations. Revise TODO stylesheet to add Status and Source elements, and to support mailto links for volunteers in Assigned element. All elements should support hypertext links. Add support for "since" element for tracking changes to tags between versions. Area to post articles about contributions from Struts developers. Area to post a "choice" FAQ of truly common questions.

    An example web application utilizing the Struts framework and custom tag library.

    Use a "real" database of some sort (while still making Struts easy to install.

    Ted Husted

    Add support for switching Locales on the fly to the Struts example application.

    Ted Husted

    This is the core controller servlet, with support for the developer's action and form bean classes, plus the supporting data structures.

    Create a mechanism by which business logic (now encoded in Action classes) can be subdivided into individual work Tasks that are combined according to configuration information (including flow control and iteration support) in the struts-config.xml file. Support for workflow processing would be provided by a set of standard Actions, and will offer an alternative mechanism (not a replacement of Actions) to organizing your business logic.

    A Workflow Proposal is pending.

    Craig Tataryn, Nic Hobbs

    Add support for JavaBeans that include a PropertyEditor class for conversion to and from the string representation used in an HTML input field. This support should operate in a manner consistent with the way that standard JSP tags do in JSP 1.2.

    Retrofit the Struts controller framework with supports for event generation (and the corresponding registration of listeners) for all interesting events created by the framework. The list of interesting events will undoubtedly be influenced by changes related to other work items on this list (such as workflow processing and standard validations), so work on this should be coordinated with those changes.

    [STRUTS-DEV, Robert Leland, 10/10/2000] [STRUTS-DEV, David Geary, 12/20/2000] [STRUTS-USER, Ted Husted, 12/23/2000]

    Begin adding design patterns and support for easy integration with Enterprise JavaBeans (EJBs) for encapsulation of business logic and application data.

    Mike Schachter

    Improve the current Struts support for generating no-cache headers to provide finer-grained, configurable control on a per-page basis.

    [STRUTS-DEV, Hou Yunfeng, 10/07/2000] [STRUTS-DEV, Matthias Kerkhoff, 11/18/2000]

    This tag library contains basic tags useful in manipulating JavaBeans and their properties. It includes support for getting and setting bean properties using simple, nested, and subscripted accessor expressions.

    Update all of the relevant tags to include property accessor support using the syntax specified by the XPath standard (www.w3c.org).

    Dave Bettin

    Update all of the relevant tags to get and set attributes from a Java object that implements the XML Document Object Model, as well as from the current tree of JavaBean objects. How the underlying data object is stored should be transparent to page writers using these tags.

    Dave Bettin

    Update all of the relevant tags to get and set attributes from a JDBC RowSet (or ResultSet) object, as well as from XML DOM objects and the current tree of JavaBean objects. How the underlying data object is stored should be transparent to page writers using these tags.

    Dave Bettin

    Add the ability to use formatting patterns (suitably localized) for presenting numbers, dates, times, timestamps, and so on via formatted patterns.

    [STRUTS-DEV, Oleg Alexeev, 10/27/2000] [STRUTS-USER, Ned Seagoon, 12/11/2000] [STRUTS-DEV, Ned Seagoon, 12/13/2000] [STRUTS-USER, Ned Seagoon, 01/04/2001]

    Dave Bettin

    This tag library contains tags useful in preparing web applications that use HTML forms as their primary mechanism for user data entry, as well as support for internationalized and localized applications.

    Add a new tag that supports generation of groups of radio buttons.

    [STRUTS-DEV, Wellington Silva, 08/28/2000]

    Improve the mechanism by which you define values and corresponding labels for <html:options>.

    [STRUTS-DEV, David Winterfeldt, 07/27/2000] [STRUTS-DEV, David Winterfeldt, 08/02/2000] [STRUTS-DEV, Andy Boyko, 11/15/2000] [STRUTS-DEV, Andy Boyko, 12/07/2000]

    Support additional HTML 4.0.1 attributes (such as "disabled", "readonly", "wrap" on textarea) where appropriate.

    [STRUTS-USER, , 08/23/2000]

    Improve the ability to use the <logic:iterate> tag over a collection, and generate a set of input fields for each member of the collection (perhaps auto-generating a subscript?). A significant use case is master-detail relationships (say, a customer and their current orders) where you allow editing of any and all fields.

    [STRUTS-USER, Lars, 12/06/2000] [STRUTS-USER, Chandan Kulkarni, 12/26/2000]

    Create design patterns and improved internal support for forms that span multiple pages.

    Nic Hobbs

    This tag library provides mechanisms to conditionally process nested body content based on a variety of logical conditions.

    Add "else" and "else if" constructs to the existing conditional tags, in some reasonable format.

    Add conditional tags that emulate the "case" or "switch" capability of many programming languages.

    NOTE: Pending the outcome of the JSPTL, this functionality will not be added to the Struts-Logic tags. However, a contributor taglib is available.

    Niall Pemberton

    Enhance <logic:iterate>, or provide a new tag, to iterate over multiple collections in parallel.

    [STRUTS-DEV, Jeff R., 08/03/2000]

    This tag library will contain tags useful in preparing web applications similar to those supported by the HTML tag library, but render output that is well-formed XML in accordance with WML specifications.

    This potential new tag library provides access to facilities in the emerging XForms standards.

    Consider how to support more generalized definitions of forms and their fields, perhaps based on emerging XForms standards.

    This tag library will contain tags useful in preparing web applications similar to those supported by the HTML tag library, but render output that is well-formed XML in accordance with the XHTML 1.0 specification.

    This package contains code generators and other tools that facilitate the creation of Struts-based applications. Further subdivision into specialized packages should be performed as appropriate.

    Create a tool that takes an XML-based description of the properties of the form bean, and automatically generates the corresponding Java class.

    A contributor extension is now available.

    [STRUTS-DEV, Mark Wutka, 06/01/2000 and 06/16/2000]

    Ravindran Ramaiah

    This package contains a variety of utility classes useful within Struts as well as in stand-alone applications.

    Implementation of MessageResources and MessageResourcesFactory that loads message keys and strings from one or more XML resources or files.

    [STRUTS-DEV, Scott Sayles, 01/07/2000]

    Improve support in BeanUtils, ConvertUtils, and PropertyUtils for property values that implement Collection, List, or Set, treating them in a manner similar to the way that indexed or array-valued properties are handled.

    [Bugzilla #640]

    Unit test components compatible with the JUnit and Cactus testing frameworks, to test and validate internal APIs of the Struts framework. Volunteers will typically agree to develop tests for an entire package within the Java source code of Struts.

    Unit tests for the org.apache.struts.action package.

    Rob Leland

    Unit tests for the org.apache.struts.actions package.

    Unit tests for the org.apache.struts.taglib.bean package.

    Unit tests for the org.apache.struts.taglib.html package.

    Unit tests for the org.apache.struts.taglib.logic package.

    Unit tests for the org.apache.struts.taglib.template package.

    Unit tests for the org.apache.struts.taglib.upload package.

    Unit tests for the org.apache.struts.util package.

    This section is a catch-all for additional areas of functionality to be investigated for inclusion into Struts.

    [STRUTS-DEV, Cedric Dumoulin, 10/03/2000] [STRUTS-DEV, Eric, 11/07/2000] [STRUTS-DEV, Phil Grimm, 11/22/2000] Ted Husted [STRUTS-DEV, David D'Orto, 12/11/2000]

    A portion of the Struts web site, and file system, where individually contributed add-ons for Struts can be hosted and downloaded.

    Detailed proposal with implementation plan.

    [STRUTS-USER, Ned Seagoon, 12/22/2000]

    Ted Husted
    libstruts1.2-java-1.2.9/xdocs/proposals/workflow.xml0000644000175000017500000004364510404045204023227 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Proposal - Workflow Management System

    Work on this initiative has stalled. It is recommended that interested parties look to the Commons Jelly product. A way to persist the workflow state between sessions is needed, but Jelly otherwise fills the needs identified by this proposal.

    Struts 1.0 has become an increasingly popular platform for constructing web applications based on a Model-View-Controller type design pattern (also known as the Front Controller pattern. It has achieved this popularity for many reasons, but key among them have been:

    • The simplicity of the basic organizational principles (once you understand them)
    • The principle of logical naming to assist in isolating the view layer and the model layer, so that changes in one do not have to impact the other
    • A rich set of tools to assist in creating pages with dynamic content exposed by the model layer through JavaBeans

    One consequence of the original Struts design, however, is that the framework does not provide much assistance in organizing business transactions that require more than one interaction with the user (i.e. they span more than one JSP page and/or Action). Applications are left to manage navigation issues, as well as deal with ActionForms whose logical contents crosses page boundaries.

    The original Struts design materially assists page designers in creating dynamic pages, while protecting them from having to be very concerned with the business logic -- other than the names of the JavaBeans used to communicate model layer data to the presentation layer. However, Struts 1.0 still requires a Java developer to be involved on the business logic side (even if all of the functional logic is already available in Java classes) in order to create the Action classes.

    The purpose of this Workflow Management System proposal is to address some of these consequences. In particular, it intends to address the following set of goals:

    • Create a means where multiple-user-interaction business processes can be configured (scripted), including support for conditional processing and branching.
    • Support scripting elements that lets business application experts, who are not necessarily Java developers, can integrate pre-existing business functionality that is available as public methods on arbitrary Java classes.
    • Assist page designers in creating the user interface elements that correspond to navigation links within, or between, work flows.

    To give a flavor of what scripted workflow activities might look like, it is useful to consider some possible use case scenarios. The syntax that is shown for the examples should be considered as illustrative of what should be possible, rather than normative. No rigorous attempt has been made to guarantee consistency between (or even within) these examples.

    The example application included with Struts (like many other web applications) uses application-managed security, including a logon form. Consider that a business logic bean might be available (in some scope under key authenticator) that knows how to authenticate users given a username and password. It could be utilized to script application logon like this:

    <activity id="Application Logon">
    
      <-- Display the logon form (web framework independent) -->
      <web:forward id="display" page="/logon.jsp"/>
    
      <-- Authenticate the username and password, returning a Principal
          if accepted, or null if not -->
      <web:set  name="username" value="$parameter:username"/>
      <web:set  name="password" value="$parameter:password"/>
      <core:invoke bean="authenticator" method="authenticate">
        <core:param type="java.lang.String" value="$username"/>
        <core:param type="java.lang.String" value="$password"/>
        <core:return name="principal"/>
      </core:invoke>
    
      <-- If no Principal was returned, branch back to the logon form -->
      <core:if expr="$principal == null">
        <web:set name="error" value="$messages.lookup('invalid.logon')"/>
        <core:branch idref="display"/>
      </core:if>
    
      <-- Exit to the "Main Menu" workflow -->
      <core:goto name="Main Menu"/>
    
    </activity>
    

    Many complex data entry operations can be simplified (from the user's point of view) by dividing them up into a series of simple dialog pages that ask a few (often one) question that leads ultimately to a completed set of information required to process a request. In many cases, each page of the interaction will have navigation controls so that the user can short cut to immediate execution, or cancel the entire interaction. Such an interaction might be modelled like this:

    <activity id="Simple Wizard Application">
    
      <!-- Display the first page of the iteration -->
      <!-- (Using Struts-specific logical-to-physical mapping) -->
      <struts:forward id="page1" name="Simple Wizard Page 1">
    
      <!-- Process navigation input from the first page -->
      <!-- (Can do something much like this framework-independently too) -->
      <struts:navigate>
        <struts:branch control="CANCEL" idref="cancel"/>
        <struts:branch control="FINISH" idref="finish"/>
        <struts:branch control="NEXT"   idref="page2"/>
      </struts:navigate>
    
      <!-- Display the second page of the iteration -->
      <struts:forward id="page2" name="Simple Wizard Page 2">
    
      <!-- Process navigation input from the second page -->
      <struts:navigate>
        <struts:branch control="CANCEL" idref="cancel"/>
        <struts:branch control="FINISH" idref="finish"/>
        <struts:branch control="NEXT"   idref="page3"/>
        <struts:branch control="PREV"   idref="page1"/>
      </struts:navigate>
    
      <!-- Display the third page of the iteration -->
      <struts:forward id="page3" name="Simple Wizard Page 3">
    
      <!-- Process navigation input from the third page -->
      <struts:navigate>
        <struts:branch control="CANCEL" idref="cancel"/>
        <struts:branch control="FINISH" idref="finish"/>
        <struts:branch control="PREV"   idref="page2"/>
      </struts:navigate>
    
      <!-- Process the FINISH navigation control as appropriate -->
      <xxx:yyy id="finish" .../>
      <core:goto name="Main Menu"/>
    
      <!-- Process the CANCEL navigation control as appropriate -->
      <xxx:yyy id="cancel" .../>
      <core:goto name="Main Menu"/>
    
    </activity>
    

    Not illustrated above, but also interesting to explore, would be the situation where choices on one page affect whether some pages in the overall flow might be skipped.

    Workflow system capabilities will be exposed to applications through Java APIs that represent both the static description of particular activities and the dynamic current state of a computation. Object factory and pluggable implementation patterns shall be used where appropriate to maximize the generality and flexibility of the system.

    The following classes represent the primary components of the workflow management system:

    Registry - Collection into which multiple Process and Activity static descriptions can be stored and retrieved by String-valued keys.

    Process - The static description of a tree of business activities that are executed in a nested fashion, often by separate individuals (or application systems).

    Activity - The static description of a sequence of Steps that are generally executed by a single individual (or application system), within a reasonably short period of time.

    Step - The static description of an individual task to be performed as a discrete, indivisible, unit. Steps can also be nested inside other steps, to provide for looping and conditional processing. A rich set of built-in Step implementations shall be provided (including powerful capabilities such as the execution of an arbitrary method on an arbitrary Java object), and mechanisms to extend the set of supported Step implementations allows arbitrary extensibility.

    Context - The dynamic state of a computation through an Activity (or a set of nested Activities), including provision of storage space for JavaBeans produced and consumed by other Steps. Contexts keep track of the current Step being executed, so that activity processing can be suspended and resumed later.

    Scope - A Map into which arbitrary Java objects can stored and retrieved by String-valued keys. Context support a number of individual Scopes, each of which can be plugged in from application logic, to provide integration into existing application functionality. For example, in a web application implementation, Scopes will generally be mapped directly to request attributes, session attributes, and servlet context attributes as provided by the Servlet API.

    A rich variety of built-in Step implementations (and corresponding XML elements in specified namespaces) will be provided as part of the basic workflow engine, and as part of the associated Struts integration of this engine.

    Bean Interaction - The ability to get and set JavaBeans in arbitrary Scopes (mapped via the Context to real collections of objects).

    Control Flow - Conditionals and looping, where control flow Steps can contain nested sets of Steps to an arbitrary degree.

    Method Execution - Execute arbitrary public methods of beans stored in some Scope, passing specified arguments (expressions or bean references) and returning the method's result (if any) to a named bean in some Scope. To maximize usefulness of the workflow system in composing applications, no restrictions should be placed on the object types these Steps can interact with.

    Activity Management - GOTO a named Activity (exiting the current one), CALL a named Activity (resuming the current one when the called Activity returns, RETURN from a called Activity, EXIT the Activity system.

    User Interaction - Suspend workflow execution to interact with the user in some application specific way. For example, a web application would display a page and wait for input to be submitted before resuming the workflow.

    Specialized Processing - Prebuilt Steps for common processing functions such as XSLT transformations, performing arbitrary SQL queries, sending mail, and so on.

    The implementation of this proposal will be divided into three major development layers:

    • Core workflow management system capabilities and built in Step implementations that are independent of application environment. [Code in jakarta-commons]
    • Specialized implementation of workflow management system components that integrate with the Servlet API in a manner that is independent of any specific application framework. [Code in jakarta-commons]
    • Specialized implementation of workflow management system components that is tightly integrated with Struts's internal architecture and custom tag libraries. [Code in jakarta-struts]

    The workflow management system will support the general concept of Scopes in which beans can be stashed, with pluggable implementations for integration into different working environments. None of the APIs in the workflow engine itself will have any reference to the web layer (i.e. no imports of javax.servlet.*).

    Suitable object factory and pluggability APIs will be included to guarantee extensibility of the basic framework.

    Scripting of business transactions will be codified in XML documents that conform to an appropriate DTD and/or schema. The XML technology that is used will facilitate extensible definitions of Steps and other components, in both the XML description of these components and in the set of Java objects that implements them.

    When designing the detailed syntax of the XML representation of Steps, consider whether it is feasible for advanced development tools to "compile" activities into individual classes to optimize overall performance.

    When designing the detailed syntax of the XML representation of Steps, consideration should be given to emulating the syntax of other XML applications that are similar in spirit or detail to the concepts of scripting a business transaction. Useful models to consider include:

    • XSL Transformations (XSLT) - Includes control flow mechanisms that are becoming widely known and understood, which could be mimicked.
    • JSP Standard Tag Library (Early Access) - The design goals for many of the JSP custom tags in this library (produced by the JSR-052 expert group under the Java Community Process) are similar enough to provide a useful model for conditionals, looping, and interaction with objects in arbitrary scopes.

    To maximize the usefulness of built-in actions, an expression language that knows how to manipulate objects in the Scopes associated with the current Context will need to be supported. Useful models to consider include:

    • XML Path Language (XPath) - Will be familiar to XML-oriented application developers because it is used throughout the suite of XML specifications.
    • JavaScript like expression languages - Will be familiar to page developers (as well as Struts developers familiar with the nested and indexed property accessor syntax of many Struts tags).

    From the workflow script developer's point of view, XML namespaces will be used to introduce extended sets of Step implementations. There will need to be mechanisms to map a particular namespace to a set of legal XML elements (within that namespace) and corresponding Java classes that provide the functionality for those Steps.

    The web layer integration will include a mechanism to map scopes (from the workflow perspective) into the standard request, session, and application scopes of the web layer. Thus, workflow scripts will be able to place beans in appropriate scopes such that JSP pages can directly pull that data into the presentation, much as Struts Actions (and the business logic classes that are called by those Actions) can place beans there in a Struts 1.0 based application. Utilizing these capabilities, application developers will be able to "script" the business logic requirements of many applications, by combining functional logic already available as methods on business logic beans, without having to involve Java programmers to create new Actions (or otherwise synthesize business logic out of the constituent pieces).

    Components in the web layer integration may import APIs from the Servlet and JSP specifications, but not from any application specific framework. Framework-specific integration will occur on top of the generic web layer integration.

    In addition, the Struts integration will include a small custom tag library will be included, so that page developers can easily create navigational links and controls. Examples of such controls include links to the "next", "previous", and "finish" pages of a wizard dialog, a "cancel" button to exit a workflow early, or an "invoke" button to invoke a new workflow as a subroutine, and then return to the current step of the original workflow. Utilizing these capabilities, page developers can create the individual visible pieces of a work flow dialog, without having to be involved in navigational complexities.

    libstruts1.2-java-1.2.9/xdocs/stylesheets/0000755000175000017500000000000010423130301021143 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/xdocs/stylesheets/struts.css0000644000175000017500000003040310404045242023231 0ustar arnaudarnaud00000000000000/* $Id: struts.css 51221 2003-12-11 20:18:59Z sraeburn $ */ body { background: #fff; color: #000; } .app h3, .app h4, .tabs td, .tabs th, .functnbar { background-image: url(../images/nw_maj.gif); background-repeat: no-repeat; } .functnbar, .functnbar2 { background-color: #aaa; } .functnbar2, .functnbar3 { background-color: #aaa; /* background-image: url(../images/sw_maj_rond.gif); */ background-repeat: no-repeat; background-position: bottom left; } .functnbar3 { background-color: #ddd; /* background-image: url(../images/sw_med_rond.gif); */ } .functnbar, .functnbar2, .functnbar3 { color: #000; } .functnbar a, .functnbar2 a, .functnbar3 a { color: #000; text-decoration: underline; } #navcolumn .body div, body.docs #toc li li { background-image: url(../images/strich.gif); background-repeat: no-repeat; background-position: .5em .5em; } #searchbox .body div, #navcolumn .body .heading { background-image: none; } a:link, #navcolumn a:visited, .app a:visited, .tasknav a:visited { color: blue; } a:link.selfref, a:visited.selfref { color: #555 !important; text-decoration: none; } a:active, a:hover, #leftcol a:active, #leftcol a:hover { color: #f30 !important; } #leftcol a, #breadcrumbs a { text-decoration: none; } .app h3, .app h4 { color: #fff; } .app h3 { background-color: #333; } .app h3 a:link, .app h3 a:visited, .app h4 a:link, .app h4 a:visited { color: #fff !important; text-decoration: underline; } .app h4 { background-color: #888; } .a td { background: #ddd; } .b td { background: #efefef; } table, th, td { border: none; } div.colbar { background: #eee; border-color: #999 #EEE #EEE #999; border-width: 1px; border-style: solid; } .toolgroup { background: #efefef; } .toolgroup .label { border-bottom: 1px solid #666; border-right: 1px solid #666; background: #ddd; color: #555; } .toolgroup .body { border-right: 1px solid #aaa; border-bottom: 1px solid #aaa; } #breadcrumbs { border-top: 1px solid #fff; background-color: #ccc; } #main { border-top: 1px solid #999; } #rightcol div.www, #rightcol div.help { border: 1px solid #ddd; } body.docs div.docs { background-color: #fff; border-left: 1px solid #ddd; border-top: 1px solid #ddd; } #helptext .label { background-image: url(../images/icon_help_sml.gif); background-repeat: no-repeat; background-position: 97%; } body.docs { background: #eee url(../images/help_logo.gif) top right no-repeat !important; } .docs h3, .docs h4 { border-top: solid 1px #000; } #apphead h2 em { color: #777; } .app th { background-color: #bbb; } .tabs th { border-right: 1px solid #333; background-color: #ddd; color: #fff; border-left: 1px solid #fff; } .tabs td { background-color: #999; border-bottom: 1px solid #fff; border-right: 1px solid #fff; border-left: 1px solid #fff; } .tabs { border-bottom: 6px #ddd solid; } .tabs th, .tabs th a:link, .tabs th a:visited { color: #555; } .tabs td, .tabs td a:link, .tabs td a:visited { color: #fff; } .tabs a { text-decoration: none; } .axial th { background-color: #ddd; color: black; } .alert { background-color: #ff9; } .expandedwaste { background: url(../images/icon_arrowwaste2_sml.gif) no-repeat; } .collapsedwaste { background: url(../images/icon_arrowwaste1_sml.gif) no-repeat; } .filebrowse .expanded, .filebrowse-alt .expanded { background-image: url(../images/icon_arrowfolderopen2_sml.gif); background-repeat: no-repeat; } .filebrowse .collapsed, .filebrowse-alt .collapsed { background-image: url(../images/icon_arrowfolderclosed1_sml.gif); background-repeat: no-repeat; } .filebrowse .leafnode, .filebrowse-alt .leafnode { background-image: url(../images/icon_folder_sml.gif); background-repeat: no-repeat; } .filebrowse .leaf, .filebrowse-alt .leaf { background-image: url(../images/icon_doc_sml.gif); background-repeat: no-repeat; } .sortup { background: url(../images/icon_sortup.gif) no-repeat; } .sortdown { background: url(../images/icon_sortdown.gif) no-repeat; } .collapsedwaste { background: url(../images/icon_arrowwaste1_sml.gif) no-repeat; } body .grid td { border-top: 1px solid #ccc; border-left: 1px solid #ccc; background-color: transparent; } .confirm { color: #090; } .info { color: #069; } .errormessage, .warningmessage, .donemessage, .infomessage { border-top: 5px solid #900; border-left: 1px solid #900; background-image: url(../images/icon_error_lrg.gif); background-repeat: no-repeat; background-position: 5px 1.33em; } .warningmessage { background-image: url(../images/icon_warning_lrg.gif); border-color: #c60; } .donemessage { background-image: url(../images/icon_success_lrg.gif); border-color: #090; } .infomessage { background-image: url(../images/icon_info_lrg.gif); border-color: #069; } .docinfo { background: url(../images/icon_doc_lrg.gif) no-repeat; } .dirinfo { background: url(../images/icon_folder_lrg.gif) no-repeat; } .memberinfo { background: url(../images/icon_members_lrg.gif) no-repeat; } .usergroupinfo { background: url(../images/icon_usergroups_lrg.gif) no-repeat; } .errormark, .warningmark, .donemark, .infomark { background: url(../images/icon_error_sml.gif) no-repeat; } .warningmark { background-image: url(../images/icon_warning_sml.gif); } .donemark { background-image: url(../images/icon_success_sml.gif); } .infomark { background-image: url(../images/icon_info_sml.gif); } .cvsdiff, .cvsblame { background-color: #ccc; } .cvsdiffadd { background-color: #afa; } .cvsdiffremove { background-color: #faa; } .cvsdiffchanges1 { background-color: #ff7; } .cvsdiffchanges2 { background-color: #ff7; } li.selection ul a { background: #fff; } .band1 { color: #fff; background-color: #663; } .band2 { color: #fff; background-color: #66C; } .band3 { background-color: #C99; } .band4 { background-color: #CFF; } .band5 { color: #fff; background-color: #336; } .band6 { color: #fff; background-color: #966; } .band7 { background-color: #9CC; } .band8 { background-color: #FFC; } .band9 { color: #fff; background-color: #633; } .band10 { color: #fff; background-color: #699; } .band11 { background-color: #CC9; } .band12 { background-color: #CCF; } .band13 { color: #fff; background-color: #366; } .band14 { color: #fff; background-color: #996; } .band15 { background-color: #99C; } .band16 { background-color: #FCC; } .app .helplink, #helptext .helplink { cursor: help; } .legend th, .bars th { background-color: #fff; } /* font and text properties, exclusive of link indication, alignment, text-indent */ body, th, td, input, select { font-family: Verdana, Helvetica, Arial, sans-serif; } code, pre { font-family: 'Andale Mono', Courier, monospace; } body, .app h3, .app h4, #rightcol h3, pre, code, #apphead h2 small, h4, th, td { font-size: x-small; voice-family: "\"}\""; voice-family: inherit; font-size: small; } small, div#footer, div#login, div.tabs th, div.tabs td, input, select, .paginate, .functnbar, .functnbar2, .functnbar3, #breadcrumbs, .courtesylinks, #rightcol div.help, .colbar, .tasknav, body.docs div#toc, #leftcol, .legend, .bars { font-size: xx-small; voice-family: "\"}\""; voice-family: inherit; font-size: x-small; } .tabs td, .tabs th, dt, .tasknav .selfref, #login .username, .selection { font-weight: bold; } li.selection ul { font-weight: normal; } #apphead h2 em { font-style: normal; } #banner h1 { font-size: 1.25em; } /* box properties (exclusive of borders), positioning, alignments, list types, text-indent */ #bodycol h2 { margin-top: .3em; margin-bottom: .5em; } p, ul, ol, dl, .bars table { margin-top: .67em; margin-bottom: .67em; } h3, h4 { margin-bottom: 0; } form { margin: 0; } #bodycol { padding-left: 12px; padding-right: 12px; width: 100%; voice-family: "\"}\""; voice-family: inherit; width: auto; } html>body #bodycol { width: auto; } .docs { line-height: 1.4; } ol ol { list-style-type: lower-alpha; } ol ol ol { list-style-type: lower-roman; } .app h3, .app h4 { padding: 5px; margin-right: 2px; margin-left: 2px; } .app td, .app th { padding: 2px 3px; } .h3 p, .h4 p, .h3 dt, .h4 dt { margin-right: 7px; margin-left: 7px; } .tasknav { margin-bottom: 1.33em; } div.colbar { padding: 3px; margin: 2px 2px 0; } .tabs { margin-top: .67em; margin-right: 2px; margin-left: 2px; padding-left: 8px; } .tabs td, .tabs th { padding: 3px 9px; } #rightcol div.www, #rightcol div.help { padding: 0 .5em; } body.docs #toc { position: absolute; top: 15px; left: 0px; width: 120px; padding: 0 20px 0 0; } body.docs #toc ul, #toc ol { margin-left: 0; padding-left: 0; } body.docs #toc li { margin-top: 7px; padding-left: 10px; list-style-type: none; } body.docs div.docs { margin: 61px 0 0 150px; padding: 1em 2em 1em 1em !important; } .docs p+p { text-indent: 5%; margin-top: -.67em; } .docs h3, .docs h4 { margin-bottom: .1em; padding-top: .3em; } .functnbar, .functnbar2, .functnbar3 { padding: 5px; margin: .67em 2px; } .functnbar3 { margin-top: 0; } body { padding: 1em; } body.composite, body.docs { margin: 0; padding: 0; } th, td { text-align: left; vertical-align: top; } .right { text-align: right !important; } .center { text-align: center !important; } .axial th, .axial th .strut { text-align: right; } .app .axial td th { text-align: left; } body .stb { margin-top: 1em; text-indent: 0; } body .mtb { margin-top: 2em; text-indent: 0; } .courtesylinks { margin-top: 1em; padding-top: 1em; } dd { margin-bottom: .67em; } .toolgroup { margin-bottom: 6px; } .toolgroup .body { padding: 4px 4px 4px 0; } .toolgroup .label { padding: 4px; } .toolgroup .body div { padding-bottom: .3em; padding-left: 1em; } .toolgroup .body div div { margin-top: .3em; padding-bottom: 0; } .tier1 { margin-left: 0; } .tier2 { margin-left: 1.5em; } .tier3 { margin-left: 3em; } .tier4 { margin-left: 4.5em; } .tier5 { margin-left: 6em; } .tier6 { margin-left: 7.5em; } .tier7 { margin-left: 9em; } .tier8 { margin-left: 10.5em; } .tier9 { margin-left: 12em; } .tier10 { margin-left: 13.5em; } .filebrowse .expanded, .filebrowse .collapsed { padding-left: 34px; } .filebrowse .leafnode, .filebrowse .leaf { padding-left: 20px; } .messagechild { padding-left: 34px; } .filebrowse-alt .expanded, .filebrowse-alt .collapsed, .filebrowse-alt .leaf, .filebrowse-alt .leafnode, .expandedwaste, .collapsedwaste, .sortup, .sortdown { /* hide from macie5\*/ float: left; /* resume */ display: inline-block; height: 15px; width: 34px; padding-left: 0 !important; } .filebrowse-alt .leaf, .filebrowse-alt .leafnode, .sortup, .sortdown { width: 20px; } .filebrowse ul, .filebrowse-alt ul { list-style-type: none; padding-left: 0; margin-left: 0; } .filebrowse ul ul, .filebrowse-alt ul ul { margin-left: 1.5em; margin-top: 0; padding-top: .67em; } .filebrowse li, .filebrowse-alt li { margin-bottom: .67em; } td.filebrowse h3 { margin-top: 0; } .errormessage, .warningmessage, .donemessage, .infomessage, .docinfo, .dirinfo, .memberinfo, .usergroupinfo { margin: .67em 0; padding: .33em 0 .67em 42px; min-height: 32px; } .errormark, .warningmark, .donemark, .infomark { padding-left: 20px; min-height: 15px; } .alt { display: none; } #banner h1 { margin: 0; } #leftcol { width: 14em; } .axial th, .axial th .strut, #leftcol .strut { width: 12em; } #breadcrumbs { padding: 2px 8px; } .app h3, .app h4, .bars { clear: both; } .legend { float: right; } .legend th, .bars th { text-align: right; padding-left: 1em; } .bars table { table-layout: fixed; } .bars th { width: 12em; } #projectdocumentlist td.filebrowse-alt { padding-right: .75em; } libstruts1.2-java-1.2.9/xdocs/tiles/0000755000175000017500000000000010423130301017707 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/xdocs/tiles/installation.xml0000644000175000017500000004340310404045220023142 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Martin Cooper Ted Husted Cedric Dumoulin The Tiles 1.1 Framework Project - Installation (1.1)
    • Download Tiles binary distribution
    • Unzip distribution
    • Copy web/tiles-doc.war or web/struts-tiles.war in your web server webapps directory (webapps with Tomcat). Please refer to your webserver manual to know exactly where, or check detailed install.
    • Restart your web server if necessary
    • Point your browser to the root of newly installed web application ( http://localhost:8080/tiles-doc or http://localhost:8080/struts-tiles with tomcat

    Quick start and setting of a new application using Tiles

    • Take appropriate tiles-blank.war and copy it in your web server webapps directory
      • tiles-blank.war - Tiles without Struts
      • tiles-blank-struts1.1.war - Tiles with Struts1.1
      • tiles-blank-struts1.0.war - Tiles with latest stable Struts1.0.x
    • These war files are not distributed with Struts binaries.

    Copyright : This page is largely inspired from the original Struts installation page. For those familiar with Struts, there is nothing really new.

    The Tiles binary distribution needs other software packages installed to operate. You may already have these installed on your system. To build Tiles from source you may need to acquire and install several others. The complete list is as follows:

    • Java Development Kit - You must download and install a Java2 (version 1.2 or later) Java Development Kit implementation for your operating system platform. A good starting point for locating Java Development Kit distributions is http://java.sun.com/j2se.
    • Servlet Container - You must download and install a servlet container that is compatible with the Servlet API Specification, version 2.2 or later, and the JavaServer Pages (JSP) Specification, version 1.1 or later. One popular choice is to download Apache's Tomcat (version 3.1 or later required, version 3.2 or later recommended).
    • XML Parser - Tiles requires the presence of an XML parser that is compatible with the Java API for XML Parsing (JAXP) specification, 1.1 or later. You can download and install the JAXP reference implementation, which is required for building the Tiles source distribution. In Tiles-based web applications, you may replace the reference implementation classes with any other JAXP compliant parser, such as Xerces. See detailed instructions related to the parser in the instructions for building and installing Tiles, below.
    • Ant Build System - If you are building Tiles from the source distribution, you must download and install version 1.3 or later of the Ant build system. This package is also strongly recommended for use in developing your own web applications based on Tiles.
      • If you are using the release version of Ant version 1.3, you will also need to download the "optional.jar" file that contains the implementation of Ant's <style> command.
      • Make sure that the "ant" and "ant.bat" scripts are executable, by adding the $ANT_HOME/bin directory to your PATH environment variable.
    • Servlet API Classes - In order to compile Tiles itself, or applications that use Tiles, you will need a servlet.jar file containing the Servlet and JSP API classes. Most servlet containers include this JAR file. Otherwise, you can get the Servlet API classes distribution from here.
    • Jakarta Commons Packages - Tiles utilizes several packages from the Jakarta Commons Project.If you are utilizing a binary distribution of Tiles, the corresponding JAR files are included in the lib directory. However, if you wish to build Tiles from source, you will need to download and install the following packages:
      • Beanutils (Version 1.0 or later)
      • Collections (Version 1.0 or later)
      • Digester (Version 1.0 or later)
      • Logging (Version 1.0 or later)
    • Xalan XSLT Processor - If you are building Tiles from the source distribution, you will need a version of Xalan to perform XSLT transformations. If you are using the JAXP/1.1 XML parser, you should use the version of xalan.jar shipped with it. Otherwise, download and install version 1.2 of Xalan from here.
    • Struts Framework - If you are planning to use Tiles with Struts, you should download and install Struts from Jakarta Struts Project. If you have acquired Tiles with the Struts distribution, you don't need to install it again. Tiles can run without Struts. In this case you loose some features.

    First, download a binary distribution of Tiles by following the instructions here. Then, make sure you have downloaded and installed the prerequisite software packages described above.

    Unpack the Tiles binary distribution into a convenient directory. (If you build Tiles from the source distribution, the result of the build will already be an unpacked binary distribution for you). The distribution consists of the following contents:

    • lib/tiles.jar - This JAR file contains all of the Java classes included in Tiles. It should be copied into the WEB-INF/libdirectory of your web application. WARNING - If you are going to be hosting multiple tiles based applications on the same servlet container, you will be tempted to place the struts.jar file into the shared repository supported by your container. Be advised that this will likely cause you to encounter ClassNotFoundException problems unless all of your application classes are stored in the shared repository.
    • lib/struts1.0/tilesForStruts1.0.jar - Same as before, but for use with Struts1.0.x.
    • lib/tiles.tld - These is the "tag library descriptor" file that describe the custom tags in the Tiles tag libraries. It should be copied into the WEB-INF directory of your web application.
    • webapps/tiles-doc.war or webapps/struts-tiles.war - This is a "web application archive" file containing all of the Tiles documentation found on the Tiles web site (including these pages). You can install this web application on any servlet container compatible with Servlet API 2.2 or later.
    • webapps/tiles-channel.war - Examples using a custom definition factory.
    • webapps/tiles-blank.war - A blank application that can be used as a starting point when you want to develop your own application with Tiles. This blank application doesn't contains neither use Struts. If you also want to use Struts, add struts.jar and related tld files, or choose one of the following applications.
    • webapps/tiles-blank-struts1.1.war - A blank application to use with Struts1.1
    • webapps/tiles-blank-struts1.0.war - A blank application to use with Struts1.0.x

    To use Tiles in your own application, you will need to follow these steps:

    • Copy the fileslib/commons-*.jar into the WEB-INF/lib directory of your web application.
    • Copy the file lib/tiles.jar from the Tiles distribution into the WEB-INF/lib directory of your web application.
    • Copy all of the files that match lib/*.tld from the Tiles distribution into the WEB-INF directory of your web application.
    • If you want to use definitions configuration file, you need to initialize the definitions factory. This can be done as follows:
      • Modify the WEB-INF/web.xml file for your web application to use a <servlet> that initializes the factory and catch Struts action forwards to check for definition name. Use the WEB-INF/web.xml file from the Tiles example application for a detailed example of the required syntax.
          <servlet>
             ...
             <servlet-name>action</servlet-name>
             <servlet-class>org.apache.struts.tiles.ActionComponentsServlet</servlet-class
             <init-param>
               <param-name>definitions-config</param-name>
               <param-value>/WEB-INF/tiles-config.xml</param-value>
             </init-param>
             ...
        
      • If you don't want to use Struts, use org.apache.struts.tiles.TilesServlet as servlet.
      • Create a configuration file for definitions. Its name must match the one provided before in WEB-INF/web.xml. Several comma separated names can be provided.
    • Modify the WEB-INF/web.xml file of your web application to include the following tag library declarations:
    <taglib>
      <taglib-uri>/WEB-INF/tiles.tld</taglib-uri>
      <taglib-location>/WEB-INF/tiles.tld</taglib-location>
    </taglib>
    
    • At the top of each JSP page that will use the Tiles custom tags, add line(s) declaring the Tiles custom tag libraries used on this particular page, like this:
    <%@ taglib uri="/WEB-INF/tiles.tld" prefix="tiles" %>
    
    • When compiling the Java classes that comprise your application, be sure to include the tiles.jar and commons-*.jar files (copied earlier) on the CLASSPATH that is submitted to the compiler.

    Note to Struts 1.0 users :

    • You should use a tiles.jar build with Struts1.0.x.
    • If you have downloaded a Tiles version build with Struts1.0.x, you already have it.
    • Consider to use tilesForStruts1.0.jar located in lib/struts1.0

    Note to Struts1.1 users :

    • You should also initialize a TilesRequestProcessor.
    • To do so, add following lines in your struts-config.xml file :
         <controller processorClass="org.apache.struts.tiles.TilesRequestProcessor">
         </controller>
      

    WARNING - Do NOT add tiles.jar to the classpath of your servlet container in an attempt to avoid placing it in the /WEB-INF/lib directory of each individual web app! Doing so will cause problems with ClassNotFoundException exceptions.

    For most containers, you need only to:

    • Copy the WAR files in your Tiles /webapp directory to your containers webapps directory.
    • In some cases, you may need to restart your container if it is running.

    Status of various containers

    For status of additional containers, please refer to the Struts installation page).

    First, download a source distribution of Tiles from here or from Struts contrib directory. Then, make sure you have downloaded and installed all of the prerequisite software packages described above. You also need the appropriate struts version (1.0.x or 1.1)

    To build Tiles, you will need to customize the build process to the details of your development environment as follows:

    • The Tiles source distribution uses a file named build.properties (in the top-level directory of the distribution) to identify the location of external components that Tiles depends on.
    • There is no build.properties file included with the source distribution. However, there is an example file named build.properties.example that you can copy to build.propertiesand then customize.
    • The properties you must configure in build.properties are documented in build.properties.example
    • Tiles build require a Struts library. You can use either a Struts1.0.x or 1.1 struts.jar. The resulting tiles.jar will run with the used struts.jar. You specify the Struts home with struts.home property.

    To build a "distribution" version of Tiles, first change your current directory to the directory in which you have unpacked the Tiles source distribution, and (if necessary) create or customize the build.propertiesfile as described above. Then, type:

            ant dist
    

    This command will create a binary distribution of Tiles, in a directory named dist (relative to where you are compiling from). This directory contains an exact replica of the files included in a binary distribution of Tiles, as described in the preceding section.

    IMPORTANT NOTE: The tiles.jar, as well as the JAR files from the Jakarta Commons project, must be in your classpath when compiling Tiles. The build.xml provided does this automatically. If you use your development machine to test Tiles application locally, be sure that the tiles.jaris NOT on your classpath when your container is running.

    libstruts1.2-java-1.2.9/xdocs/tiles/project.xml0000644000175000017500000000147410404045226022117 0ustar arnaudarnaud00000000000000 The Tiles 1.1 Framework Project - Installation (1.1) libstruts1.2-java-1.2.9/xdocs/userGuide/0000755000175000017500000000000010423130301020523 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/xdocs/userGuide/building_controller.xml0000644000175000017500000015100410404045220025312 0ustar arnaudarnaud00000000000000 The Struts User Guide - Building Controller Components Craig R. McClanahan Mike Schachter Ted Husted Martin Cooper Ed Burns Donald Ball Eddie Bush Yann Cebron David Graham Tim O'Brien Phil Steitz

    Now that we understand how to construct the Model and View components of your application, it is time to focus on the Controller components. Struts includes a servlet that implements the primary function of mapping a request URI to an Action class. Therefore, your primary responsibilities related to the Controller are:

    • Write an ActionForm class to mediate between the Model and the View, as described in Building Model Components.
    • Write an Action class for each logical request that may be received (extend org.apache.struts.action.Action).
    • Configure a ActionMapping (in XML) for each logical request that may be submitted. The XML configuration file is usually named struts-config.xml.

    To deploy your application, you will also need to:

    • Update the web application deployment descriptor file (in XML) for your application to include the necessary Struts components.
    • Add the appropriate Struts components to your application.

    The latter two items are covered in the "Configuring Applications" chapter.

    For those of you familiar with MVC architecture, the ActionServlet represents the C - the controller. The job of the controller is to:

    • process user requests,
    • determine what the user is trying to achieve according to the request,
    • pull data from the model (if necessary) to be given to the appropriate view, and
    • select the proper view to respond to the user.

    The Struts controller delegates most of this grunt work to Action classes.

    In addition to being the controller for your application, the ActionServlet instance also is responsible for initialization and clean-up of resources. When the controller initializes, it first loads the application config corresponding to the "config" init-param. It then goes through an enumeration of all init-param elements, looking for those elements who's name starts with config/. For each of these elements, Struts loads the configuration file specified by the value of that init-param, and assigns a "prefix" value to that module's ModuleConfig instance consisting of the piece of the init-param name following "config/". For example, the module prefix specified by the init-param config/foo would be "foo". This is important to know, since this is how the controller determines which module will be given control of processing the request. To access the module foo, you would use a URL like:

    http://localhost:8080/myApp/foo/someAction.do

    For each request made of the controller, the method process(HttpServletRequest, HttpServletResponse) will be called. This method simply determines which module should service the request and then invokes that module's RequestProcessor's process method, passing the same request and response.

    The RequestProcessor is where the majority of the core processing occurs for each request. Let's take a look at the helper functions the process method invokes in-turn:

    processPath Determine the path that invoked us. This will be used later to retrieve an ActionMapping.
    processLocale Select a locale for this request, if one hasn't already been selected, and place it in the request.
    processContent Set the default content type (with optional character encoding) for all responses if requested.
    processNoCache If appropriate, set the following response headers: "Pragma", "Cache-Control", and "Expires".
    processPreprocess This is one of the "hooks" the RequestProcessor makes available for subclasses to override. The default implementation simply returns true. If you subclass RequestProcessor and override processPreprocess you should either return true (indicating process should continue processing the request) or false (indicating you have handled the request and the process should return)
    processMapping Determine the ActionMapping associated with this path.
    processRoles If the mapping has a role associated with it, ensure the requesting user is has the specified role. If they do not, raise an error and stop processing of the request.
    processActionForm Instantiate (if necessary) the ActionForm associated with this mapping (if any) and place it into the appropriate scope.
    processPopulate Populate the ActionForm associated with this request, if any.
    processValidate Perform validation (if requested) on the ActionForm associated with this request (if any).
    processForward If this mapping represents a forward, forward to the path specified by the mapping.
    processInclude If this mapping represents an include, include the result of invoking the path in this request.
    processActionCreate Instantiate an instance of the class specified by the current ActionMapping (if necessary).
    processActionPerform This is the point at which your action's perform or execute method will be called.
    processForwardConfig Finally, the process method of the RequestProcessor takes the ActionForward returned by your Action class, and uses to select the next resource (if any). Most often the ActionForward leads to the presentation page that renders the response.

    An ActionForm represents an HTML form that the user interacts with over one or more pages. You will provide properties to hold the state of the form with getters and setters to access them. ActionForms can be stored in either the session (default) or request scopes. If they're in the session it's important to implement the form's reset method to initialize the form before each use. Struts sets the ActionForm's properties from the request parameters and sends the validated form to the appropriate Action's execute method.

    When you code your ActionForm beans, keep the following principles in mind:

    • The ActionForm class itself requires no specific methods to be implemented. It is used to identify the role these particular beans play in the overall architecture. Typically, an ActionForm bean will have only property getter and property setter methods, with no business logic.
    • The ActionForm object also offers a standard validation mechanism. If you override a "stub" method, and provide error messages in the standard application resource, Struts will automatically validate the input from the form (using your method). See " Action Form Validation" for details. Of course, you can also ignore the ActionForm validation and provide your own in the Action object.
    • Define a property (with associated getXxx and setXxx methods) for each field that is present in the form. The field name and property name must match according to the usual JavaBeans conventions (see the Javadoc for the java.beans.Introspector class for a start on information about this). For example, an input field named username will cause the setUsername method to be called.
    • Buttons and other controls on your form can also be defined as properties. This can help determine which button or control was selected when the form was submitted. Remember, the ActionForm is meant to represent your data-entry form, not just the data beans.
    • Think of your ActionForm beans as a firewall between HTTP and the Action. Use the validate method to ensure all required properties are present, and that they contain reasonable values. An ActionForm that fails validation will not even be presented to the Action for handling.
    • You may also place a bean instance on your form, and use nested property references. For example, you might have a "customer" bean on your ActionForm, and then refer to the property "customer.name" in your presentation page. This would correspond to the methods customer.getName() and customer.setName(string Name) on your customer bean. See the Tag Library Developer Guides for more about using nested syntax with the Struts JSP tags.
    • Caution: If you nest an existing bean instance on your form, think about the properties it exposes. Any public property on an ActionForm that accepts a single String value can be set with a query string. It may be useful to place beans that can affect the business state inside a thin "wrapper" that exposes only the properties required. This wrapper can also provide a filter to be sure runtime properties are not set to inappropriate values.

    Maintaining a separate concrete ActionForm class for each form in your Struts application is time-consuming. It is particularly frustrating when all the ActionForm does is gather and validate simple properties that are passed along to a business JavaBean.

    This bottleneck can be alleviated through the use of DynaActionForm classes. Instead of creating a new ActionForm subclass and new get/set methods for each of your bean's properties, you can list its properties, type, and defaults in the Struts configuration file.

    For example, add the following to struts-config.xml for a UserForm bean that stores a user's given and family names:

    
        
        
    
    ]]>

    The types supported by DynaActionForm include:

    • java.lang.BigDecimal
    • java.lang.BigInteger
    • boolean and java.lang.Boolean
    • byte and java.lang.Byte
    • char and java.lang.Character
    • java.lang.Class
    • double and java.lang.Double
    • float and java.lang.Float
    • int and java.lang.Integer
    • long and java.lang.Long
    • short and java.lang.Short
    • java.lang.String
    • java.sql.Date
    • java.sql.Time
    • java.sql.Timestamp

    You may also specify Arrays of these types (e.g. String[]). You may also specify a concrete implementation of the Map Interface, such as java.util.HashMap, or a List implementation, such as java.util.ArrayList.

    If you do not supply an initial attribute, numbers will be initialized to 0 and objects to null.

    In JSP pages using the original Struts custom tags, attributes of DynaActionForm objects can be referenced just like ordinary ActionForm objects. Wherever a Struts tag refers to a "property", the tags will automatically use the DynaActionForm properties just like those of a conventional JavaBean. You can even expose DynaActionForm properties using bean:define. (Although, tou can't use bean:define to instantiate a DynaActionForm, since it needs to be setup with the appropriate dyna-properties).

    If you are using the Struts JSTL EL taglib, the references are different, however. Only properties of ordinary ActionForm objects can be directly accessed through the JSTL expression language syntax. The DynaActionForm properties must be accessed through a slightly different syntax. The JSTL EL syntax for referencing a property of an ActionForm goes like this:

    ${formbean.prop}

    The syntax for referencing a property of a DynaActionForm would be:

    ${dynabean.map.prop}

    The map property is a property of DynaActionForm which represents the HashMap containing the DynaActionForm properties.

    DynaActionForms are meant as an easy solution to a common problem: Your ActionForms use simple properties and standard validations, and you just pass these properties over to another JavaBean (say using BeanUtils.copyProperties(myBusinessBean,form)).

    DynaActionForms are not a drop-in replacement for ActionForms. If you need to access ActionForm properties in your Action, you will need to use the map-style accessor, like myForm.get("name"). If you actively use the ActionForm object in your Action, then you may want to use conventional ActionForms instead.

    DynaActionForms cannot be instantiated using a no-argument constructor. In order to simulate the extra properties, there is a lot of machinery involved in their construction. You must rely on Struts to instantiate a DynaActionForm for you, via the ActionMapping.

    If need be, you can extend the DynaActionForm to add custom validate and reset methods you might need. Simply specify your subclass in the struts-config instead. However, you cannot mix conventional properties and DynaProperties. A conventional getter or setter on a DynaActionForm won't be found by the reflection utilities.

    To use DynaActionForms with the Struts Validator, specify org.apache.struts.validator.ValidatorActionForm (or your subclass) as the form-bean class.

    The DynaActionForm classes offer the ability to create ActionForm beans at initialization time, based on a list of properties enumerated in the Struts configuration file. However, many HTML forms are generated dynamically at request time. Since the properties of these forms' ActionForm beans are not all known ahead of time, we need a new approach.

    Struts allows you to make one or more of your ActionForm's properties' values a Map instead of a traditional atomic object. You can then store the data from your form's dynamic fields in that Map. Here is an example of a map-backed ActionForm class:

    In its corresponding JSP page, you can access objects stored in the values map using a special notation: mapname(keyname). The parentheses in the bean property name indicate that:

    • The bean property named mapname is indexed using Strings (probably backed by a Map), and that
    • Struts should look for get/set methods that take a String key parameter to find the correct sub-property value. Struts will, of course, use the keyname value from the parentheses when it calls the get/set methods.

    Here is a simple example:

    ]]>

    This will call the getValue method on FooForm with a key value of "foo" to find the property value. To create a form with dynamic field names, you could do the following:

    
            
            
    <% } %> ]]>

    Note that there is nothing special about the name value. Your map-backed property could instead be named property, thingy, or any other bean property name you prefer. You can even have multiple map-backed properties on the same bean.

    In addition to map-backed properties, you can also create list-backed properties. You do so by creating indexed get/set methods on your bean:

    In your presentation pages, you access individual entries in a list-backed property by using a different special notation: listname[index]. The braces in the bean property name indicate that the bean property named listname is indexed (probably backed by a List), and that Struts should look for get/set methods that take an index parameter in order to find the correct sub-property value.

    While map-backed ActionForms provide you with more flexibility, they do not support the same range of syntax available to conventional or DynaActionForms. You might have difficulty referencing indexed or mapped properties using a map-backed ActionForm.

    The Action class defines two methods that could be executed depending on your servlet environment:

    public ActionForward execute(ActionMapping mapping,
                         ActionForm form,
                         ServletRequest request,
                         ServletResponse response)
    throws Exception;
    
    public ActionForward execute(ActionMapping mapping,
                         ActionForm form,
                         HttpServletRequest request,
                         HttpServletResponse response)
    throws Exception;
    

    Since the majority of Struts projects are focused on building web applications, most projects will only use the "HttpServletRequest" version. A non-HTTP execute() method has been provided for applications that are not specifically geared towards the HTTP protocol.

    The goal of an Action class is to process a request, via its execute method, and return an ActionForward object that identifies where control should be forwarded (e.g. a JSP, Tile definition, Velocity template, or another Action) to provide the appropriate response. In the MVC/Model 2 design pattern, a typical Action class will often implement logic like the following in its execute method:

    • Validate the current state of the user's session (for example, checking that the user has successfully logged on). If the Action class finds that no logon exists, the request can be forwarded to the presentation page that displays the username and password prompts for logging on. This could occur because a user tried to enter an application "in the middle" (say, from a bookmark), or because the session has timed out, and the servlet container created a new one.
    • If validation is not complete, validate the form bean properties as needed. If a problem is found, store the appropriate error message keys as a request attribute, and forward control back to the input form so that the errors can be corrected.
    • Perform the processing required to deal with this request (such as saving a row into a database). This can be done by logic code embedded within the Action class itself, but should generally be performed by calling an appropriate method of a business logic bean.
    • Update the server-side objects that will be used to create the next page of the user interface (typically request scope or session scope beans, depending on how long you need to keep these items available).
    • Return an appropriate ActionForward object that identifies the presentation page to be used to generate this response, based on the newly updated beans. Typically, you will acquire a reference to such an object by calling findForward on either the ActionMapping object you received (if you are using a logical name local to this mapping), or on the controller servlet itself (if you are using a logical name global to the application).

    In Struts 1.0, Actions called a perform method instead of the now-preferred execute method. These methods use the same parameters and differ only in which exceptions they throw. The elder perform method throws SerlvetException and IOException. The new execute method simply throws Exception. The change was to facilitate the Declarative Exception handling feature introduced in Struts 1.1.

    The perform method may still be used in Struts 1.1 but is deprecated. The Struts 1.1 method simply calls the new execute method and wraps any Exception thrown as a ServletException.

    Remember the following design guidelines when coding Action classes:

    • Write code for a multi-threaded environment - The controller servlet creates only one instance of your Action class, and uses this one instance to service all requests. Thus, you need to write thread-safe Action classes. Follow the same guidelines you would use to write thread-safe Servlets. Here are two general guidelines that will help you write scalable, thread-safe Action classes:
      • Only Use Local Variables - The most important principle that aids in thread-safe coding is to use only local variables, not instance variables, in your Action class. Local variables are created on a stack that is assigned (by your JVM) to each request thread, so there is no need to worry about sharing them. An Action can be factored into several local methods, so long as all variables needed are passed as method parameters. This assures thread safety, as the JVM handles such variables internally using the call stack which is associated with a single Thread.
      • Conserve Resources - As a general rule, allocating scarce resources and keeping them across requests from the same user (in the user's session) can cause scalability problems. For example, if your application uses JDBC and you allocate a separate JDBC connection for every user, you are probably going to run in some scalability issues when your site suddenly shows up on Slashdot. You should strive to use pools and release resources (such as database connections) prior to forwarding control to the appropriate View component -- even if a bean method you have called throws an exception.
    • Don't throw it, catch it! - Ever used a commercial website only to have a stack trace or exception thrown in your face after you've already typed in your credit card number and clicked the purchase button? Let's just say it doesn't inspire confidence. Now is your chance to deal with these application errors - in the Action class. If your application specific code throws expections you should catch these exceptions in your Action class, log them in your application's log (servlet.log("Error message", exception)) and return the appropriate ActionForward.

    It is wise to avoid creating lengthy and complex Action classes. If you start to embed too much logic in the Action class itself, you will begin to find the Action class hard to understand, maintain, and impossible to reuse. Rather than creating overly complex Action classes, it is generally a good practice to move most of the persistence, and "business logic" to a separate application layer. When an Action class becomes lengthy and procedural, it may be a good time to refactor your application architecture and move some of this logic to another conceptual layer; otherwise, you may be left with an inflexible application which can only be accessed in a web-application environment. Struts should be viewed as simply the foundation for implementing MVC in your applications. Struts provides you with a useful control layer, but it is not a fully featured platform for building MVC applications, soup to nuts.

    The MailReader example application included with Struts stretches this design principle somewhat, because the business logic itself is embedded in the Action classes. This should be considered something of a bug in the design of the example, rather than an intrinsic feature of the Struts architecture, or an approach to be emulated. In order to demonstrate, in simple terms, the different ways Struts can be used, the MailReader application does not always follow best practices.

    You can define an ExceptionHandler to execute when an Action's execute method throws an Exception. First, you need to subclass org.apache.struts.action.ExceptionHandler and override the execute method. Your execute method should process the Exception and return an ActionForward object to tell Struts where to forward to next. Then you configure your handler in struts-config.xml like this:

    
        
    
    ]]>

    This configuration element says that com.yourcorp.ExceptionHandler.execute will be called when any IOException is thrown by an Action. The key is a key into your message resources properties file that can be used to retrieve an error message.

    You can override global exception handlers by defining a handler inside an action definition.

    A common use of ExceptionHandlers is to configure one for java.lang.Exception so it's called for any exception and log the exception to some data store.

    The PlugIn interface extends Action and so that applications can easily hook into the ActionServlet lifecycle. This interface defines two methods, init() and destroy(), which are called at application startup and shutdown, respectively. A common use of a Plugin Action is to configure or load application-specific data as the web application is starting up.

    At runtime, any resource setup by init would be accessed by Actions or business tier classes. The PlugIn interface allows you to setup resources, but does not provide any special way to access them. Most often, the resource would be stored in application context, under a known key, where other components can find it.

    PlugIns are configured using <plug-in> elements within the Struts configuration file. See PlugIn Configuration for details.

    In order to operate successfully, the Struts controller servlet needs to know several things about how each request URI should be mapped to an appropriate Action class. The required knowledge has been encapsulated in a Java class named ActionMapping, the most important properties are as follows:

    • type - Fully qualified Java class name of the Action implementation class used by this mapping.
    • name - The name of the form bean defined in the config file that this action will use.
    • path - The request URI path that is matched to select this mapping. See below for examples of how matching works and how to use wildcards to match multiple request URIs.
    • unknown - Set to true if this action should be configured as the default for this application, to handle all requests not handled by another action. Only one action can be defined as a default within a single application.
    • validate - Set to true if the validate method of the action associated with this mapping should be called.
    • forward - The request URI path to which control is passed when this mapping is invoked. This is an alternative to declaring a type property.

    How does the controller servlet learn about the mappings you want? It would be possible (but tedious) to write a small Java class that simply instantiated new ActionMapping instances, and called all of the appropriate setter methods. To make this process easier, Struts uses the Jakarta-Digester component to parse an XML-based description of the desired mappings and create the appropriate objects initialized to the appropriate default values. See the Jakarta Commons website for more information about the Digester.

    The developer's responsibility is to create an XML file named struts-config.xml and place it in the WEB-INF directory of your application. This format of this document is described by the Document Type Definition (DTD) maintained at http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd. This chapter covers the configuration elements that you will typically write as part of developing your application. There are several other elements that can be placed in the struts-config file to customize your application. See "Configuring Applications" for more about the other elements in the Struts configuration file.

    The controller uses an internal copy of this document to parse the configuration; an Internet connection is not required for operation.

    The outermost XML element must be <struts-config>. Inside of the <struts-config> element, there are three important elements that are used to describe your actions:

    • <form-beans>
    • <global-forwards>
    • <action-mappings>

    <form-beans>
    This section contains your form bean definitions. Form beans are descriptors that are used to create ActionForm instances at runtime. You use a <form-bean> element for each form bean, which has the following important attributes:

    • name: A unique identifier for this bean, which will be used to reference it in corresponding action mappings. Usually, this is also the name of the request or session attribute under which this form bean will be stored.
    • type: The fully-qualified Java classname of the ActionForm subclass to use with this form bean.

    <global-forwards>
    This section contains your global forward definitions. Forwards are instances of the ActionForward class returned from an Action's execute method. These map logical names to specific resources (typically JSPs), allowing you to change the resource without changing references to it throughout your application. You use a <forward> element for each forward definition, which has the following important attributes:

    • name: The logical name for this forward. This is used in your Action's execute method to forward to the next appropriate resource. Example: homepage
    • path: The context relative path to the resource. Example: /index.jsp or /index.do
    • redirect: True or false (default). Should the ActionServlet redirect to the resource instead of forward?

    <action-mappings>
    This section contains your action definitions. You use an <action> element for each of the mappings you would like to define. Most action elements will define at least the following attributes:

    • path: The application context-relative path to the action.
    • type: The fully qualified java classname of your Action class.
    • name: The name of your <form-bean> element to use with this action

    Other often-used attributes include:

    • parameter: A general-purpose attribute often used by "standard" Actions to pass a required property.
    • roles: A comma-delimited list of the user security roles that can access this mapping.

    For a complete description of the elements that can be used with the action element, see the Struts Configuration DTD and the ActionMapping documentation.

    Here's a mapping entry based on the MailReader example application. The MailReader application now uses DynaActionForms. But in this example, we'll show a conventinal ActionForm instead, to illustrate the usual workflow. Note that the entries for all the other actions are left out:

    
        
            
         
        
            
        
        
            
        
    
    ]]>

    First the form bean is defined. A basic bean of class "org.apache.struts.webapp.example.LogonForm" is mapped to the logical name "logonForm". This name is used as a request attribute name for the form bean.

    The "global-forwards" section is used to create logical name mappings for commonly used presentation pages. Each of these forwards is available through a call to your action mapping instance, i.e. mapping.findForward("logicalName").

    As you can see, this mapping matches the path /logon (actually, because the MailReader example application uses extension mapping, the request URI you specify in a JSP page would end in /logon.do). When a request that matches this path is received, an instance of the LogonAction class will be created (the first time only) and used. The controller servlet will look for a bean in request scope under key logonForm, creating and saving a bean of the specified class if needed.

    Optional but very useful are the local "forward" elements. In the MailReader example application, many actions include a local "success" and/or "failure" forward as part of an action mapping.

    
    
        
        
    
    ]]>

    Using just these two extra properties, the Action classes are almost totally independent of the actual names of the presentation pages. The pages can be renamed (for example) during a redesign, with negligible impact on the Action classes themselves. If the names of the "next" pages were hard coded into the Action classes, all of these classes would also need to be modified. Of course, you can define whatever local forward properties makes sense for your own application.

    The Struts configuration file includes several other elements that you can use to customize your application. See "Configuring Applications" for details.

    Fronting your pages with ActionMappings is essential when using application modules, since doing so is the only way you involve the controller in the request -- and you want to! The controller puts the application configuration in the request, which makes available all of your module-specific configuration data (including which message resources you are using, request-processor, datasources, and so forth).

    The simplest way to do this is to use the forward property of the ActionMapping:

    <action path="/view" forward="/view.jsp"/>

    As a Struts application grows in size, so will the number of action mappings. Wildcards can be used to combine similiar mappings into one more generic mapping.

    The best way to explain wildcards is to show an example and walk through how it works. This example modifies the previous mapping in the ActionMapping Example section to use wildcards to match all pages that start with /edit:

    
    
        
        
    
    ]]>

    The "*" in the path attribute allows the mapping to match the request URIs /editSubscription, editRegistration, or any other URI that starts with /edit, however /editSubscription/add would not be matched. The part of the URI matched by the wildcard will then be substituted into various attributes of the action mapping and its action forwards replacing {1}. For the rest of the request, Struts will see the action mapping and its action forwards containing the new values.

    Wildcard patterns can contain one or more of the following special tokens:

    * Matches zero or more characters excluding the slash ('/') character.
    ** Matches zero or more characters including the slash ('/') character.
    \character The backslash character is used as an escape sequence. Thus \* matches the character asterisk ('*'), and \\ matches the character backslash ('\').

    In the action mapping and action forwards, the wildcard-matched values can be accessed with the token {N} where N is a number from 1 to 9 indicating which wildcard-matched value to substitute. The whole request URI can be accessed with the {0} token.

    The action mapping attributes that will accept wildcard-matched strings are:

    • type
    • name
    • roles
    • parameter
    • attribute
    • forward
    • include
    • input

    The action forward attributes that will accept wildcard-matched strings are:

    • path

    Struts doesn't configure logging itself -- it's all done by commons-logging under the covers. The default algorithm is a search:

    • If Log4J is there, use it.
    • If JDK 1.4 is there, use it.
    • Otherwise, use SimpleLog.

    The commons-logging interface is an ultra-thin bridge to many different logging implementations. The intent is to remove compile- and run-time dependencies on any single logging implementation. For more information about the currently-supported implementations, please refer to the the description for the org.apache.commons.logging package.

    Because Struts uses commons-logging and, therefore, includes the necessary JAR files for you to use commons-logging, you've probably had the occasional fleeting thought, "Should I use commons-logging?" The answer (surprise!) depends on the requirements for your particular project. If one of your requirements is the ability to easily change logging implementations with zero impact on your application, then commons-logging is a very good option.

    "Great! What do I do to get started using commons-logging in my own code?"

    Using commons-logging in your own code is very simple - all you need are two imports and a declaration for a logger. Let's take a look:

    package com.foo;
    // ...
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    ...
    public class Foo {
        // ...
        private static Log log = LogFactory.getLog(Foo.class);
        // ...
        public void setBar(Bar bar) {
            if (log.isTraceEnabled()) { 
                log.trace("Setting bar to " + bar);
            }
            this.bar = bar;
        }
    // ...
    }
    

    The general idea is to instantiate a single logger per class and to use a name for the logger which reflects where it's being used. The example is constructed with the class itself. This gives the logger the name of com.foo.Foo. Doing things this way lets you easily see where the output is coming from, so you can quickly pin-point problem areas. In addition, you are able to enable/disable logging in a very fine-grained way.

    For examples of using logging in Struts classes, see the Action classes in the Struts MailReader example application.

    Next: Configuring Applications

    libstruts1.2-java-1.2.9/xdocs/userGuide/building_model.xml0000644000175000017500000002547610404045234024251 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Mike Schachter Ted Husted Martin Cooper Phil Steitz The Struts User's Guide - Building Model Components

    Many requirements documents used for building web applications focus on the View. However, you should ensure that the processing required for each submitted request is also clearly defined from the Model's perspective. In general, the developer of the Model components will be focusing on the creation of JavaBeans classes that support all of the functional requirements. The precise nature of the beans required by a particular application will vary widely depending on those requirements, but they can generally be classified into several categories discussed below. However, a brief review of the concept of "scope" as it relates to beans and JSP is useful first.

    Within a web-based application, JavaBeans can be stored in (and accessed from) a number of different collections of "attributes". Each collection has different rules for the lifetime of that collection, and the visibility of the beans stored there. Together, the rules defining lifetime and visibility are called the scope of those beans. The JavaServer Pages (JSP) Specification defines scope choices using the following terms (with the equivalent servlet API concept defined in parentheses):

    • page - Beans that are visible within a single JSP page, for the lifetime of the current request. (Local variables of the service method)
    • request - Beans that are visible within a single JSP page, as well as to any page or servlet that is included in this page, or forwarded to by this page. (Request attributes)
    • session - Beans that are visible to all JSP pages and servlets that participate in a particular user session, across one or more requests. (Session attributes)
    • application - Beans that are visible to all JSP pages and servlets that are part of a web application. (Servlet context attributes)

    It is important to remember that JSP pages and servlets in the same web application share the same sets of bean collections. For example, a bean stored as a request attribute in a servlet like this:

    MyCart mycart = new MyCart(...);
    request.setAttribute("cart", mycart);

    is immediately visible to a JSP page which this servlet forwards to, using a standard action tag like this:

    <jsp:useBean id="cart" scope="request"
    class="com.mycompany.MyApp.MyCart"/>

    Note: While ActionForm beans often have properties that correspond to properties in your Model beans, the form beans themselves should be considered a Controller component. As such, they are able to transfer data between the Model and View layers.

    The Struts framework generally assumes that you have defined an ActionForm bean (that is, a Java class extending the ActionForm class) for the input forms in your application. ActionForm beans are sometimes just called "form beans". These may be finely-grained objects, so that there is one bean for each form, or coarsely-grained so that one bean serves several forms, or even an entire application.

    If you declare such beans in your Struts configuration file (see " Building the Controller Components"), the Struts controller servlet will automatically perform the following services for you, before invoking the appropriate Action method:

    • Check for an instance of a bean of the appropriate class, under the appropriate key, in the appropriate scope (request or session).
    • If there is no such bean instance available, a new one is automatically created and added to the appropriate scope (request or session).
    • For every request parameter whose name corresponds to the name of a property in the bean, the corresponding setter method will be called. This operates in a manner similar to the standard JSP action <jsp:setProperty> when you use the asterisk wildcard to select all properties.
    • The updated ActionForm bean will be passed to the execute method of an Action class [org.apache.struts.Action], so that the values can be made available to your system state and business logic beans.

    For more about coding Actions and ActionForm beans, see the "Building Controller Components" chapter.

    You should note that a "form", in the sense discussed here, does not necessarily correspond to a single JSP page in the user interface. It is common in many applications to have a "form" (from the user's perspective) that extends over multiple pages. Think, for example, of the wizard style user interface that is commonly used when installing new applications. Struts encourages you to define a single ActionForm bean that contains properties for all of the fields, no matter which page the field is actually displayed on. Likewise, the various pages of the same form should all be submitted to the same Action Class. If you follow these suggestions, the page designers can rearrange the fields among the various pages, often without requiring changes to the processing logic.

    Smaller applications may only need a single ActionForm to service all of its input forms. Others applications might use a single ActionForm for each major subsystem of the application. Some teams might prefer to have a separate ActionForm class for each distinct input form or workflow. How many or how few ActionForms to use is entirely up to you. The framework doesn't care.

    The actual state of a system is normally represented as a set of one or more JavaBeans classes, whose properties define the current state. A shopping cart system, for example, will include a bean that represents the cart being maintained for each individual shopper, and will (among other things) include the set of items that the shopper has currently selected for purchase. Separately, the system will also include different beans for the user's profile information (including their credit card and ship-to addresses), as well as the catalog of available items and their current inventory levels.

    For small scale systems, or for state information that need not be kept for a long period of time, a set of system state beans may contain all the knowledge that the system ever has of these particular details. Or, as is often the case, the system state beans will represent information that is stored permanently in some external database (such as a CustomerBean object that corresponds to a particular row in the CUSTOMERS table), and are created or removed from the server's memory as needed. Entity Enterprise JavaBeans are also used for this purpose in large scale applications.

    You should encapsulate the functional logic of your application as method calls on JavaBeans designed for this purpose. These methods may be part of the same classes used for the system state beans, or they may be in separate classes dedicated to performing the logic. In the latter case, you will usually need to pass the system state beans to be manipulated to these methods as arguments.

    For maximum code re-use, business logic beans should be designed and implemented so that they do not know they are being executed in a web application environment. If you find yourself having to import a javax.servlet.* class in your bean, you are tying this business logic to the web application environment. Consider rearranging things so that your Action classes (part of the Controller role, as described below) translate all required information from the HTTP request being processed into property setter calls on your business logic beans, after which a call to an execute method can be made. Such a business logic class can be reused in environments other than the web application for which they were initially constructed.

    Depending on the complexity and scope of your application, business logic beans might be ordinary JavaBeans that interact with system state beans passed as arguments, or ordinary JavaBeans that access a database using JDBC calls. For larger applications, these beans will often be stateful or stateless Enterprise JavaBeans (EJBs) instead.

    For more about using a database with your application, see the Accessing a Database HowTo.

    Next: Building View Components

    libstruts1.2-java-1.2.9/xdocs/userGuide/building_view.xml0000644000175000017500000007634310404045224024121 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Mike Schachter Ted Husted Martin Cooper Ed Burns James DeVries David Graham The Struts User's Guide - Building View Components

    This chapter focuses on the task of building the View components for use with the Struts framework. Many applications rely on JavaServer Pages (JSP) technology to create the presentation layer. The Struts distribution includes a comprehensive JSP tag library that provides support for building internationalized applications, as well as for interacting with input forms. Several other topics related to the View components are briefly discussed.

    A few years ago, application developers could count on having to support only residents of their own country, who are used to only one (or sometimes two) languages, and one way to represent numeric quantities like dates, numbers, and monetary values. However, the explosion of application development based on web technologies, as well as the deployment of such applications on the Internet and other broadly accessible networks, have rendered national boundaries invisible in many cases. This has translated (if you will pardon the pun) into a need for applications to support internationalization (often called "i18n" because 18 is the number of letters in between the "i" and the "n") and localization.

    Struts builds upon the standard classes available on the Java platform to build internationalized and localized applications. The key concepts to become familiar with are:

    • Locale - The fundamental Java class that supports internationalization is Locale. Each Locale represents a particular choice of country and language (plus an optional language variant), and also a set of formatting assumptions for things like numbers and dates.
    • ResourceBundle - The java.util.ResourceBundle class provides the fundamental tools for supporting messages in multiple languages. See the Javadocs for the ResourceBundle class, and the information on Internationalization in the documentation bundle for your JDK release, for more information.
    • PropertyResourceBundle - One of the standard implementations of ResourceBundle allows you to define resources using the same "name=value" syntax used to initialize properties files. This is very convenient for preparing resource bundles with messages that are used in a web application, because these messages are generally text oriented.
    • MessageFormat - The java.text.MessageFormat class allows you to replace portions of a message string (in this case, one retrieved from a resource bundle) with arguments specified at run time. This is useful in cases where you are creating a sentence, but the words would appear in a different order in different languages. The placeholder string {0} in the message is replaced by the first runtime argument, {1} is replaced by the second argument, and so on.
    • MessageResources - The Struts class org.apache.struts.util.MessageResources lets you treat a set of resource bundles like a database, and allows you to request a particular message string for a particular Locale (normally one associated with the current user) instead of for the default Locale the server itself is running in.

    Please note that the i18n support in a framework like Struts is limited to the presentation of internationalized text and images to the user. Support for Locale specific input methods (used with languages such as Japanese, Chinese, and Korean) is left up to the client device, whichis usually a web browser.

    For an internationalized application, follow the steps described in the Internationalization document in the JDK documentation bundle for your platform to create a properties file containing the messages for each language. An example will illustrate this further:

    Assume that your source code is created in package com.mycompany.mypackage, so it is stored in a directory (relative to your source directory) named com/mycompany/mypackage. To create a resource bundle called com.mycompany.mypackage.MyApplication, you would create the following files in the com/mycompany/mypackage directory:

    • MyApplication.properties - Contains the messages in the default language for your server. If your default language is English, you might have an entry like this: prompt.hello=Hello
    • MyApplication_xx.properties - Contains the same messages in the language whose ISO language code is "xx" (See the ResourceBundle Javadoc page for a link to the current list). For a French version of the message shown above, you would have this entry: prompt.hello=Bonjour You can have resource bundle files for as many languages as you need.

    When you configure the controller servlet in the web application deployment descriptor, one of the things you will need to define in an initialization parameter is the base name of the resource bundle for the application. In the case described above, it would be com.mycompany.mypackage.MyApplication.

    
    action
    
    org.apache.struts.action.ActionServlet
    
    
    application
    
        com.mycompany.mypackage.MyResources
    
    
    
    
    ]]>

    The important thing is for the resource bundle to be found on the class path for your application. Another approach is to store the MyResources.properties file in your application's classes folder. You can then simply specify "myResources" as the application value. Just be careful it is not deleted if your build script deletes classes as part of a "clean" target.

    If it does, here is an Ant task to run when compiling your application that copies the contents of a src/conf directory to the classes directory:

    
    
    
    
    ]]>

    Note: While the examples given here use JSP and custom tags, the ActionForm beans and the other Struts controller components are View neutral. Struts can be used with Velocity Templates, XSL, and any other presentation technology that can be rendered via a Java servlet.

    At one time or another, most web developers have built forms using the standard capabilities of HTML, such as the <input> tag. Users have come to expect interactive applications to have certain behaviors, and one of these expectations relates to error handling -- if the user makes an error, the application should allow them to fix just what needs to be changed -- without having to re-enter any of the rest of the information on the current page or form.

    Fulfilling this expectation is tedious and cumbersome when coding with standard HTML and JSP pages. For example, an input element for a username field might look like this (in JSP):

    "/>
    ]]>

    which is difficult to type correctly, confuses HTML developers who are not knowledgeable about programming concepts, and can cause problems with HTML editors. Instead, Struts provides a comprehensive facility for building forms, based on the Custom Tag Library facility of JSP 1.1. The case above would be rendered like this using Struts:

    ;
    ]]>

    with no need to explicitly refer to the JavaBean from which the initial value is retrieved. That is handled automatically by the JSP tag, using facilities provided by the framework.

    HTML forms are sometimes used to upload other files. Most browsers support this through a <input type="file"> element, that generates a file browse button, but it's up to the developer to handle the incoming files. Struts handles these "multipart" forms in a way identical to building normal forms.

    For an example of using Struts to create a simple login form, see the " Buiding an ActionForm Howto".

    Property references in JSP pages using the Struts framework can reference Java Bean properties as described in the JavaBeans specification. Most of these references refer to "scalar" bean properties, referring to primitive or single Object properties. However, Struts, along with the Jakarta Commons Beanutils library, allow you to use property references which refer to individual items in an array, collection, or map, which are represented by bean methods using well-defined naming and signature schemes.

    Documentation on the Beanutils package can be found at http://jakarta.apache.org/commons/beanutils/api/index.html. More information about using indexed and mapped properties in Struts can be found in the FAQ describing Indexed Properties, Mapped Properties, and Indexed Tags.

    Struts defines HTML tags for all of the following types of input fields, with hyperlinks to the corresponding reference information.

    In every case, a field tag must be nested within a form tag, so that the field knows what bean to use for initializing displayed values.

    There are several tags useful for creating presentations, consult the documentation on each specific tag library, along with the Tag Developers Guides, for more information:

    • [logic] iterate repeats its tag body once for each element of a specified collection (which can be an Enumeration, a Hashtable, a Vector, or an array of objects).
    • [logic] present 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 is present. Only one of the attributes may be used in one occurrence of this tag, unless you use the property attribute, in which case the name attribute is also required. The attributes include cookie, header, name, parameter, property, role, scope, and user.
    • [logic] notPresent the companion tag to present, notPresent provides the same functionality when the specified attribute is not present.
    • [html] link generates a HTML <a> element as an anchor definition or a hyperlink to the specified URL, and automatically applies URL encoding to maintain session state in the absence of cookie support.
    • [html] img generates a HTML <img> element with the ability to dynamically modify the URLs specified by the "src" and "lowsrc" attributes in the same manner that <html:link> can.
    • [bean] parameter retrieves the value of the specified request parameter, and defines the result as a page scope attribute of type String or String[].

    In addition to the form and bean interactions described above, Struts offers an additional facility to validate the input fields it has received. To utilize this feature, override the following method in your ActionForm class:

    The validate method is called by the controller servlet after the bean properties have been populated, but before the corresponding action class's execute method is invoked. The validate method has the following options:

    • Perform the appropriate validations and find no problems -- Return either null or a zero-length ActionErrors instance, and the controller servlet will proceed to call the perform method of the appropriate Action class.
    • Perform the appropriate validations and find problems -- Return an ActionErrors instance containing ActionError's, which are classes that contain the error message keys (into the application's MessageResources bundle) that should be displayed. The controller servlet will store this array as a request attribute suitable for use by the <html:errors> tag, and will forward control back to the input form (identified by the input property for this ActionMapping).

    As mentioned earlier, this feature is entirely optional. The default implementation of the validate method returns null, and the controller servlet will assume that any required validation is done by the action class.

    One common approach is to perform simple, prima facia validations using the ActionForm validate method, and then handle the "business logic" validation from the Action.

    The Struts Validator, covered in the next section, may be used to easily validate ActionForms.

    Configuring the Validator to perform form validation is easy.

    1. The ActionForm bean must extend ValidatorForm
    2. The form's JSP must include the <html:javascript> tag for client side validation.
    3. You must define the validation rules in an xml file like this:
      
                   
      
        
          
            
              
         
      
      ]]>
      The msg element points to the message resource key to use when generating the error message.
    4. Lastly, you must enable the ValidatorPlugin in the struts-config.xml file like this:
      
      
      
      ]]>

    Note: If your required form property is one of the Java object representations of primitive types (ie. java.lang.Integer), you must set the ActionServlet's convertNull init. parameter to true. Failing to do this will result in the required validation not being performed on that field because it will default to 0.

    For more about the Struts Validator, see the Developers Guide.

    Although the look and feel of your application can be completely constructed based on the standard capabilities of JSP and the Struts custom tag library, you should consider employing other techniques that will improve component reuse, reduce maintenance efforts, and/or reduce errors. Several options are discussed in the following sections.

    Beyond using the custom tags provided by the Struts library, it is easy to create tags that are specific to the application you are building, to assist in creating the user interface. The MailReader example application included with Struts illustrates this principle by creating the following tags unique to the implementation of this application:

    • checkLogon - Checks for the existence of a particular session object, and forwards control to the logon page if it is missing. This is used to catch cases where a user has bookmarked a page in the middle of your application and tries to bypass logging on, or if the user's session has been timed out. (Note that there are better ways to authenticate users; the checkLogon tag is simply meant to demonstrate writing your own custom tags.)
    • linkSubscription - Generates a hyperlink to a details page for a Subscription, which passes the required primary key values as request attributes. This is used when listing the subscriptions associated with a user, and providing links to edit or delete them.
    • linkUser - Generates a hyperlink to a details page for a User, which passes the required primary key values as request attributes.

    The source code for these tags is in the src/example directory, in package org.apache.struts.example, along with the other Java classes that are used in this application.

    Creating the entire presentation of a page in one JSP file (with custom tags and beans to access the required dynamic data) is a very common design approach, and was employed in the example application included with Struts. However, many applications require the display of multiple logically distinct portions of your application together on a single page.

    For example, a portal application might have some or all of the following functional capabilities available on the portal's "home" page:

    • Access to a search engine for this portal.
    • One or more "news feed" displays, with the topics of interest customizedfrom the user's registration profile.
    • Access to discussion topics related to this portal.
    • A "mail waiting" indicator if your portal provides free email accounts.

    The development of the various segments of this site is easier if you can divide up the work, and assign different developers to the different segments. Then, you can use the include capability of JavaServer Pages technology to combine the results into a single result page, or use the include tag provided with Struts. There are three types of include available, depending on when you w ant the combination of output to occur:

    • An <%@ include file="xxxxx" %> directive can include a file that contains Java code or JSP tags. The code in the included file can even reference variables declared earlier in the outer jsp page. The code is inlined into the other JavaServer Page before it is compiled so it can definitely contain more than just HTML.
    • The include action (<jsp:include page="xxxxx" flush="true" />) is processed at request time, and is handled transparently by the server. Among other things, that means you can conditionally perform the include by nesting it within a tag like equal by using it's parameter attribute.
    • The bean:include tag takes either a an argument "forward" representing a logical name mapped to the jsp to include, or the "id" argument, which represents a page context String variable to print out to the jsp page.

    Tiles is a powerful templating library that allows you to construct views by combining various "tiles". Here's a quick setup guide:

    1. Create a /layout/layout.jsp file that contains your app's common look and feel:
      
      
      
      
      
      ]]>
    2. Create your /index.jsp homepage file:
      This is my homepage
      ]]>
    3. Create a /WEB-INF/tiles-defs.xml file that looks like this:
      
      
          
      
      
          
      
      
      ]]>
    4. Setup the TilesPlugin in the struts-config.xml file:
      
          
      
      ]]>
    5. Setup an action mapping in struts-config.xml to point to your homepage tile:
      
      ]]>

    The TilesPlugin configures a special RequestProcessor that determines if the requested view is a tile and processes it accordingly. Note that we made the homepage tile extend our root layout tile and changed the body attribute. Tiles inserts the file named in the body attribute into the main layout.

    See the tiles-documentation webapp for in-depth examples.

    Some applications require dynamically generated images, like the price charts on a stock reporting site. Two different approaches are commonly used to meet these requirements:

    • Render a hyperlink with a URL that executes a servlet request. The servlet will use a graphics library to render the graphical image, set the content type appropriately (such as to image/gif), and send back the bytes of that image to the browser, which will display them just as if it had received a static file.
    • Render the HTML code necessary to download a Java applet that creates the required graph. You can configure the graph by setting appropriate initialization parameters for the applet in the rendered code, or you can have the applet make its own connection to the server to receive these parameters.

    Some applications require dynamically generated text or markup, such as XML. If a complete page is being rendered, and can be output using a PrintWriter, this is very easy to do from an Action:

    The Struts-EL tag library is a contributed library in the Struts distribution. It represents an integration of the Struts tag library with the JavaServer Pages Standard Tag Library, or at least the "expression evaluation" engine that is used by the JSTL.

    The base Struts tag library contains tags which rely on the evaluation of "rtexprvalue"s (runtime scriptlet expressions) to evaluate dynamic attribute values. For instance, to print a message from a properties file based on a resource key, you would use the bean:write tag, perhaps like this:

    
        '/>]]>
        

    This assumes that stringvar exists as a JSP scripting variable. If you're using the Struts-EL library, the reference looks very similar, but slightly different, like this:

    
        ]]>
        

    If you want to know how to properly use the Struts-EL tag library, there are two important things you need to know:

    • The Struts tag library
    • The JavaServer Pages Standard tag library

    Once you understand how to use these two, consider Struts tag attribute values being evaluated the same way the JSTL tag attribute values are. Past that, there is very little else you need to know to effectively use the Struts-EL tag library.

    Although the Struts-EL tag library is a direct "port" of the tags from the Struts tag library, not all of the tags in the Struts tag library were implemented in the Struts-EL tag library. This was the case if it was clear that the functionality of a particular Struts tag could be entirely fulfilled by a tag in the JSTL. It is assumed that developers will want to use the Struts-EL tag library along with the JSTL, so it is reasonable to assume that they will use tags from the JSTL if they fill their needs.

    For more see, Struts-El Extension in the FAQ/HOWTO section.

    Next: Building Controller Components

    libstruts1.2-java-1.2.9/xdocs/userGuide/configuration.xml0000644000175000017500000013027010404045210024122 0ustar arnaudarnaud00000000000000 The Struts User's Guide - Configuring Applications Craig R. McClanahan Mike Schachter Ted Husted Martin Cooper Ed Burns Donald Ball Eddie Bush Yann Cebron David Graham Tim O'Brien

    Before you can build an application, you need to lay a solid foundation. There are several setup tasks you need to perform before deploying your Struts application. These include components in the Struts configuration file and in the Web Application Deployment Descriptor.

    The Building Controller Components chapter covered writing the form-bean and action-mapping portions of the Struts configuration file. These elements usually play an important role in the development of a Struts application. The other elements in Struts configuration file tend to be static: you set them once and leave them alone.

    These "static" configuration elements are:

    • controller
    • message-resources
    • plug-in
    • data-sources

    The <controller> element allows you to configure the ActionServlet. Many of the controller parameters were previously defined by servlet initialization parameters in your web.xml file but have been moved to this section of struts-config.xml in order to allow different modules in the same web application to be configured differently. For full details on available parameters see the struts-config_1_1.dtd or the list below.

    • bufferSize - The size (in bytes) of the input buffer used when processing file uploads. [4096] (optional)
    • className - Classname of configuration bean. [org.apache.struts.config.ControllerConfig] (optional)
    • contentType - Default content type (and optional character encoding) to be set on each response. May be overridden by the Action, JSP, or other resource to which the request is forwarded. [text/html] (optional)
    • forwardPattern - Replacement pattern defining how the "path" attribute of a <forward> element is mapped to a context-relative URL when it starts with a slash (and when the contextRelative property is false). This value may consist of any combination of the following:
      • $M - Replaced by the module prefix of this module.
      • $P - Replaced by the "path" attribute of the selected <forward> element.
      • $$ - Causes a literal dollar sign to be rendered.
      • $x - (Where "x" is any character not defined above) Silently swallowed, reserved for future use.
      If not specified, the default forwardPattern is consistent with the previous behavior of forwards. [$M$P] (optional)
    • inputForward - Set to true if you want the input attribute of <action> elements to be the name of a local or global ActionForward, which will then be used to calculate the ultimate URL. Set to false to treat the input parameter of <action> elements as a module-relative path to the resource to be used as the input form. [false] (optional)
    • locale - Set to true if you want a Locale object stored in the user's session if not already present. [true] (optional)
    • maxFileSize - The maximum size (in bytes) of a file to be accepted as a file upload. Can be expressed as a number followed by a "K", "M", or "G", which are interpreted to mean kilobytes, megabytes, or gigabytes, respectively. [250M] (optional)
    • memFileSize - The maximum size (in bytes) of a file whose contents will be retained in memory after uploading. Files larger than this threshold will be written to some alternative storage medium, typically a hard disk. Can be expressed as a number followed by a "K", "M", or "G", which are interpreted to mean kilobytes, megabytes, or gigabytes, respectively. [256K] (optional)
    • multipartClass - The fully qualified Java class name of the multipart request handler class to be used with this module. [org.apache.struts.upload.CommonsMultipartRequestHandler] (optional)
    • nocache - Set to true if you want the controller to add HTTP headers for defeating caching to every response from this module. [false] (optional)
    • pagePattern - Replacement pattern defining how the page attribute of custom tags using it is mapped to a context-relative URL of the corresponding resource. This value may consist of any combination of the following:
      • $M - Replaced by the module prefix of this module.
      • $P - Replaced by the "path" attribute of the selected <forward> element.
      • $$ - Causes a literal dollar sign to be rendered.
      • $x - (Where "x" is any character not defined above) Silently swallowed, reserved for future use.
      If not specified, the default pagePattern is consistent with the previous behavior of URL calculation. [$M$P] (optional)
    • processorClass - The fully qualified Java class name of the RequestProcessor subclass to be used with this module. [org.apache.struts.action.RequestProcessor] (optional)
    • tempDir - Temporary working directory to use when processing file uploads. [{the directory provided by the servlet container}]

    This example uses the default values for several controller parameters. If you only want default behavior you can omit the controller section altogether.

    ;
    ]]>

    Struts has built in support for internationalization (I18N). You can define one or more <message-resources> elements for your webapp; modules can define their own resource bundles. Different bundles can be used simultaneously in your application, the 'key' attribute is used to specify the desired bundle.

    • className - Classname of configuration bean. [org.apache.struts.config.MessageResourcesConfig] (optional)
    • factory - Classname of MessageResourcesFactory. [org.apache.struts.util.PropertyMessageResourcesFactory] (optional)
    • key - ServletContext attribute key to store this bundle. [org.apache.struts.action.MESSAGE] (optional)
    • null - Set to false to display missing resource keys in your application like '???keyname???' instead of null. [true] (optional)
    • parameter - Name of the resource bundle. (required)

    Example configuration:

    
    ]]>

    This would set up a message resource bundle provided in the file MyWebAppResources.properties under the default key. Missing resource keys would be displayed as '???keyname???'.

    Struts PlugIns are configured using the <plug-in> element within the Struts configuration file. This element has only one valid attribute, 'className', which is the fully qualified name of the Java class which implements the org.apache.struts.action.PlugIn interface.

    For PlugIns that require configuration themselves, the nested <set-property> element is available.

    This is an example using the Tiles plugin:

    
    
    
    ]]>

    Besides the objects related to defining ActionMappings, the Struts configuration may contain elements that create other useful objects.

    The <data-sources> section can be used to specify a collection of DataSources [javax.sql.DataSource] for the use of your application. Typically, a DataSource represents a connection pool to a database or other persistent store. As a convenience, the Struts DataSource manager can be used to instantiate whatever standard pool your application may need. Of course, if your persistence layer provides for its own connections, then you do not need to specify a data-sources element.

    Since DataSource implementations vary in what properties need to be set, unlike other Struts configuration elements, the data-source element does not pre-define a slate of properties. Instead, the generic set-property feature is used to set whatever properties your implementation may require. Typically, these settings would include:

    • A driver class name
    • A url to access the driver
    • A description

    And other sundry properties.

    
    
    
    ]]>

    In Struts 1.2.0, the GenericDataSource has been removed, and it is recommended that you use the Commons BasicDataSource or other DataSource implementation instead. In practice, if you need to use the DataSource manager, you should use whatever DataSource implementation works best with your container or database.

    For examples of specifying a data-sources element and using the DataSource with an Action, see the Accessing a Database HowTo.

    Very little is required in order to start taking advantage of the Struts application module feature. Just go through the following steps:

    1. Prepare a config file for each module.
    2. Inform the controller of your module.
    3. Use actions to refer to your pages.

    Back in Struts 1.0, a few "boot-strap" options were placed in the web.xml file, and the bulk of the configuration was done in a single struts-config.xml file. Obviously, this wasn't ideal for a team environment, since multiple users had to share the same configuration file.

    In Struts 1.1, you have two options: you can list multiple struts-config files as a comma-delimited list, or you can subdivide a larger application into modules.

    With the advent of modules, a given module has its own configuration file. This means each team (each module would presumably be developed by a single team) has their own configuration file, and there should be a lot less contention when trying to modify it.

    In struts 1.0, you listed your configuration file as an initialization parameter to the action servlet in web.xml. This is still done in 1.1, but it's augmented a little. In order to tell the Struts machinery about your different modules, you specify multiple config initialization parameters, with a slight twist. You'll still use "config" to tell the action servlet about your "default" module, however, for each additional module, you will list an initialization parameter named "config/module", where module is the name of your module (this gets used when determining which URIs fall under a given module, so choose something meaningful!). For example:

    
          config
          /WEB-INF/conf/struts-default.xml
        
        
          config/module1
          /WEB-INF/conf/struts-module1.xml
        
        ...
    ]]>

    This says I have two modules. One happens to be the "default" module, which has no "/module" in it's name, and one named "module1" (config/module1). I've told the controller it can find their respective configurations under /WEB-INF/conf (which is where I put all my configuration files). Pretty simple!

    (My struts-default.xml would be equivalent to what most folks call struts-config.xml. I just like the symmetry of having all my Struts module files being named struts-<module>.xml)

    If you'd like to vary where the pages for each module is stored, see the forwardPattern setting for the Controller.

    There are two basic methods to switching from one module to another. You can either use a forward (global or local) and specify the contextRelative attribute with a value of true, or you can use the built-in org.apache.struts.actions.SwitchAction.

    Here's an example of a global forward:

    
        ...
        
        
        ...
        
        ...
        
    ]]>

    You could do the same thing with a local forward declared in an ActionMapping:

    
        ...
        
        ...
        
        
        
        ...
        
        ...
        
    ]]>

    Finally, you could use org.apache.struts.actions.SwitchAction, like so:

    
        
        ...
        
        ...
    ]]>

    Now, to change to ModuleB, we would use a URI like this:

    
        http://localhost:8080/toModule.do?prefix=/moduleB&page=/index.do
        

    If you are using the "default" module as well as "named" modules (like "/moduleB"), you can switch back to the "default" module with a URI like this:

    
        http://localhost:8080/toModule.do?prefix=&page=/index.do
        

    That's all there is to it! Happy module-switching!

    The final step in setting up the application is to configure the application deployment descriptor (stored in file WEB-INF/web.xml) to include all the Struts components that are required. Using the deployment descriptor for the example application as a guide, we see that the following entries need to be created or modified.

    Add an entry defining the action servlet itself, along with the appropriate initialization parameters. Such an entry might look like this:

    
      action
      
        org.apache.struts.action.ActionServlet
      
      
        config
        
          /WEB-INF/struts-config.xml
        
      
      1
    
    ]]>

    The initialization parameters supported by the controller servlet are described below. (You can also find these details in the Javadocs for the ActionServlet class.) Square brackets describe the default values that are assumed if you do not provide a value for that initialization parameter.

    • config - Context-relative path to the XML resource containing the configuration information for the default module. This may also be a comma-delimited list of configuration files. Each file is loaded in turn, and its objects are appended to the internal data structure. [/WEB-INF/struts-config.xml].
      WARNING - If you define an object of the same name in more than one configuration file, the last one loaded quietly wins.
    • config/${module} - Context-relative path to the XML resource containing the configuration information for the application module that will use the specified prefix (/${module}). This can be repeated as many times as required for multiple application modules. (Since Struts 1.1)
    • convertNull - Force simulation of the Struts 1.0 behavior when populating forms. If set to true, the numeric Java wrapper class types (like java.lang.Integer) will default to null (rather than 0). (Since Struts 1.1) [false]
    • rulesets - Comma-delimited list of fully qualified classnames of additional org.apache.commons.digester.RuleSet instances that should be added to the Digester that will be processing struts-config.xml files. By default, only the RuleSet for the standard configuration elements is loaded. (Since Struts 1.1)
    • validating - Should we use a validating XML parser to process the configuration file (strongly recommended)? [true]

    The following parameters may still be used with the Struts 1.1 release but are deprecated.

    • application - Java class name of the application resources bundle base class. [NONE] DEPRECATED - Configure this using the "parameter" attribute of the <message-resources> element.
    • bufferSize - The size of the input buffer used when processing file uploads. [4096] DEPRECATED - Configure this using the "bufferSize" attribute of the <controller> element.
    • content - Default content type and character encoding to be set on each response; may be overridden by a forwarded-to servlet or JSP page. [text/html] DEPRECATED - Configure this using the "contentType" attribute of the <controller> element.
    • debug - The debugging detail level that controls how much information is logged for this servlet. Accepts values 0 (off) and from 1 (least serious) through 6 (most serious). [0] DEPRECATED - Configure the logging detail level in your underlying logging implementation.
    • factory - The Java class name of the MessageResourcesFactory used to create the application MessageResources object. [org.apache.struts.util.PropertyMessageResourcesFactory] DEPRECATED - Configure this using the "factory" attribute of the <message-resources> element.
    • formBean - The Java class name of the ActionFormBean implementation to use [org.apache.struts.action.ActionFormBean]. DEPRECATED - Configure this using the "className" attribute of each <form-bean> element.
    • forward - The Java class name of the ActionForward implementation to use [org.apache.struts.action.ActionForward]. Two convenient classes you may wish to use are:
      • org.apache.struts.action.ForwardingActionForward - Subclass of org.apache.struts.action.ActionForward that defaults the redirect property to false (same as the ActionForward default value).
      • org.apache.struts.action.RedirectingActionForward - Subclass of org.apache.struts.action.ActionForward that defaults the redirect property to true.
      DEPRECATED - Configure this using the "className" attribute of each <forward> element.
    • locale - If set to true, and there is a user session, identify and store an appropriate java.util.Locale object (under the standard key identified by Globals.LOCALE_KEY) in the user's session if there is not a Locale object there already. [true] DEPRECATED - Configure this using the "locale" attribute of the <controller> element.
    • mapping - The Java class name of the ActionMapping implementation to use [org.apache.struts.action.ActionMapping]. Two convenient classes you may wish to use are:
      • org.apache.struts.action.RequestActionMapping - Subclass of org.apache.struts.action.ActionMapping that defaults the scope property to "request".
      • org.apache.struts.action.SessionActionMapping - Subclass of org.apache.struts.action.ActionMapping that defaults the scope property to "session". (Same as the ActionMapping default value).
      DEPRECATED - Configure this using the "className" attribute of each <action> element, or globally for a module by using the "type" attribute of the <action-mappings> element.
    • maxFileSize - The maximum size (in bytes) of a file to be accepted as a file upload. Can be expressed as a number followed by a "K" "M", or "G", which are interpreted to mean kilobytes, megabytes, or gigabytes, respectively. [250M] DEPRECATED - Configure this using the "maxFileSize" attribute of the <controller> element.
    • multipartClass - The fully qualified name of the MultipartRequestHandler implementation class to be used for processing file uploads. If set to none, disables Struts multipart request handling. [org.apache.struts.upload.CommonsMultipartRequestHandler] DEPRECATED - Configure this using the "multipartClass" attribute of the <controller> element.
    • nocache - If set to true, add HTTP headers to every response intended to defeat browser caching of any response we generate or forward to. [false] DEPRECATED - Configure this using the "nocache" attribute of the <controller> element.
    • null - If set to true, set our application resources to return null if an unknown message key is used. Otherwise, an error message including the offending message key will be returned. [true] DEPRECATED - Configure this using the "null" attribute of the <message-resources> element.
    • tempDir - The temporary working directory to use when processing file uploads. [The working directory provided to this web application as a servlet context attribute] DEPRECATED - Configure this using the "tempDir" attribute of the <controller> element.

    WARNING - Struts will not operate correctly if you define more than one <servlet> element for a controller servlet, or a subclass of the standard controller servlet class. The controller servlet MUST be a web application wide singleton.

    Note: The material in this section is not specific to Struts. The configuration of servlet mappings is defined in the Java Servlet Specification. This section describes the most common means of configuring a Struts application.

    There are two common approaches to defining the URLs that will be processed by the controller servlet -- prefix matching and extension matching. An appropriate mapping entry for each approach will be described below.

    Prefix matching means that you want all URLs that start (after the context path part) with a particular value to be passed to this servlet. Such an entry might look like this:

    
         action
         /do/*
       
    ]]>

    which means that a request URI to match the /logon path described earlier might look like this:

    http://www.mycompany.com/myapplication/do/logon

    where /myapplication is the context path under which your application is deployed.

    Extension mapping, on the other hand, matches request URIs to the action servlet based on the fact that the URI ends with a period followed by a defined set of characters. For example, the JSP processing servlet is mapped to the *.jsp pattern so that it is called to process every JSP page that is requested. To use the *.do extension (which implies "do something"), the mapping entry would look like this:

    
         action
         *.do
       
    ]]>

    and a request URI to match the /logon path described earlier might look like this:

    http://www.mycompany.com/myapplication/logon.do

    WARNING - Struts will not operate correctly if you define more than one <servlet-mapping> element for the controller servlet.

    WARNING - If you are using the new module support in Struts 1.1, you should be aware that only extension mapping is supported.

    Next, you must add an entry defining the Struts tag library.

    The struts-bean taglib 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.

    The struts-html taglib contains tags used to create struts input forms, as well as other tags generally useful in the creation of HTML-based user interfaces.

    The struts-logic taglib 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.

    The struts-tiles taglib contains tags used for combining various view components, called "tiles", into a final composite view.

    The struts-nested taglib is an extension of other struts taglibs that allows the use of nested beans.

    Below is how you would define all taglibs for use within your application. In practice, you would only specify the taglibs that your application uses:

    
      
        /tags/struts-bean
      
      
        /WEB-INF/struts-bean.tld
      
    
    
      
        /tags/struts-html
      
      
        /WEB-INF/struts-html.tld
      
    
    
      
        /tags/struts-logic
      
      
        /WEB-INF/struts-logic.tld
      
    
    
      
        /tags/struts-tiles
      
      
        /WEB-INF/struts-tiles.tld
      
    
    ]]>

    This tells the JSP system where to find the tag library descriptor for this library (in your application's WEB-INF directory, instead of out on the Internet somewhere).

    Servlet 2.3/2.4 Users only: The Servlet 2.3 and 2.4 specifications simplify the deployment and configuration of tag libraries. The instructions above will work on older containers as well as 2.3 and 2.4 containers (Struts only requires a servlet 2.2 container); however, if you're using a 2.3/2.4 container such as Tomcat 4.x/5.x, you can take advantage of a simplified deployment.

    All that's required to install the struts tag libraries is to copy struts.jar into your /WEB-INF/lib directory and reference the tags in your code like this:

    
        <%@ taglib
            uri="http://jakarta.apache.org/struts/tags-html"
            prefix="html" %>
        

    Note that you must use the full uri defined in the various struts tlds so that the container knows where to find the tag's class files. You don't have to alter your web.xml file or copy tlds into any application directories.

    To use Struts, you must copy the .tld files that you require into your WEB-INF directory, and copy struts.jar (and all of the commons-*.jar files) into your WEB-INF/lib directory.

    Servlet 2.3/2.4 Users: See section 5.4.3.1 for how to avoid copying the tlds into your application.

    Sidebar: Sharing JAR Files Across Web Applications

    Many servlet containers and application servers provide facilities for sharing JAR files across multiple web applications that depend on them. For example, Tomcat 4.1 allows you to put JAR files into the $CATALINA_HOME/shared/lib or $CATALINA_HOME/common/lib directories, and the classes in those JAR files will be available in all applications, without the need to place them in every web application's /WEB-INF/lib directory. Usually, the sharing is accomplished by creating a separate class loader that is the parent of the class loader (created by your container) for each individual web application.

    If you have multiple Struts-based web applications, it is tempting to consider taking advantage of this container feature, and placing struts.jar and the various commons-*.jar files in the shared directory, rather than in each web application. However, there are several potential, and actual, problems with this approach:

    • Classes loaded from the shared class loader cannot see classes in the web application's class loader, unless they are specifically programmed to use the Thread context class loader. For example, Struts dynamically loads your action and form bean classes, and normally would not be able to find those classes. Struts has been programmed to deal with this in most scenarios, but it has not been thoroughly audited to ensure that it works in all scenarios. The Commons libraries that Struts uses have NOT been audited to catch all possible scenarios where this might become a problem.
    • When a class is loaded from a shared class loader, static variables used within that class become global as well. This can cause inter-webapp conflicts when the underlying code assumes that the statics are global only within a particular web applicaiton (which would be true if the class was loaded from the webapp class loader). There are many cases where Struts, and the Commons libraries it relies on, use static variables to maintain information that is presumed to be visible only within a single web applicaiton. Sharing these JAR files can cause unwanted interactions, and probably cause incorrect behavior.
    • When JAR files are shared like this, it is not possible to update the JAR file versions employed by a single web application without updating all of them. In addition, because updating a Struts version normally requires recompilation of the applications that use it, you will have to recompile all of your applications as well, instead of being able to manage them independently.

    In spite of these difficulties, it is possible that sharing the Struts and Commons JAR files might appear to work for you. However, this is NOT a supported configuration.

    If you file a bug report for ClassNotFoundException or NoClassDefFoundError exceptions, or similar situations where it appears that the wrong version of a class is being loaded, the bug report will NOT be processed unless the problem exists with the JAR files in their recommended location, in the /WEB-INF/lib subdirectory of your webapp.

    In Struts 1.0, the logging functionality was fairly limited. You could set a debugging detail level with a servlet initialization parameter, and all log messages were written to wherever ServletContext.log() output is sent by your servlet container. WIth Struts 1.1, however, all logging messages written by Struts itself, as well as the commons librarires that it utilizes, flow through an abstract wrapper called Commons Logging, which can be used as a wrapper around any logging implementation. The most common implementations used are simple logging to System.err, the Apache Log4J package, or the built-in logging capabilities of JDK 1.4 or later in the java.util.logging package.

    This section does not attempt to fully explain how Commons Logging is configured and used. Instead, it focuses on pertinent details of using Commons Logging in a Struts based environment. For complete documentation on using Commons Logging, consult the documentation for the logging system you are using, plus the Commons Logging Javadocs.

    Commons Logging provides fine-grained control over the logging messages created by a Log instance. By convention, the Log instances for Struts (and the Commons packages in general) are named the fully qualified class name of the class whose messages are being logged. Therefore, log messages created by the RequestProcessor class are, naturally enough, directed to a logger named org.apache.struts.action.RequestProcessor.

    The advantage of this approach is that you can configure the level of detail in the output you want from each class, individually. However, it would be a burden to be required to maintain such settings for every possible class, so the logging environment supports the notion of logging hierarchies as well. If a detail level configuration for a particular class has not been set, the logging system looks up the hierarchy until it finds a configuration setting to use, or else uses the default detail level if no configuration for any level of the hierarchy has been explicitly set. In the case of our messages from RequestProcessor, the logging system will look for explicit settings of the following loggers, in this order, until it finds one.

    • org.apache.struts.action.RequestProcessor
    • org.apache.struts.action
    • org.apache.struts
    • org.apache
    • org
    • The default logging detail level for your log implementation.

    In a similar manner, the detail level for messages from PropertyUtils (from the Commons BeanUtils library) is set by a search for configuration settings for:

    • org.apache.commons.beanutils.PropertyUtils
    • org.apache.commons.beanutils
    • org.apache.commons
    • org.apache
    • org
    • The default logging detail level for your log implementation.

    You can seamlessly integrate logging from your own components into the same logging implementation that Struts and the Commons libraries use, by following the instructions in Section 4.10. If you do this, you are strongly encouraged to follow the same naming convention for loggers (based on the class name of the messages being logged) for maximum configuration flexibility.

    For more about putting it all together, see the Building Applications HowTo.

    Next: Release Notes

    libstruts1.2-java-1.2.9/xdocs/userGuide/dev_bean.xml0000644000175000017500000000344210404045216023024 0ustar arnaudarnaud00000000000000 Craig R. McClanahan The Struts User's Guide - Bean Taglib Guide

    Note: - Some of the features in this taglib are also available in the JavaServer Pages Standard Tag Library (JSTL). The Struts team encourages the use of the standard tags over the Struts specific tags when possible.

    The "struts-bean" tag library contains JSP custom tags useful in defining new beans (in any desired scope) from a variety of possible sources, as well as a tag to render a particular bean (or bean property) to the output response.

    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.

    libstruts1.2-java-1.2.9/xdocs/userGuide/dev_html.xml0000644000175000017500000000240110404045210023047 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Ted Husted Martin Cooper Mike Schachter The Struts User's Guide - HTML Taglib Guide

    The tags in the Struts HTML library form a bridge between a JSP view and the other components of a Web application. Since a dynamic Web application often depends on gathering data from a user, input forms play an important role in the Struts framework. Consequently, the majority of the HTML tags involve HTML forms.

    The HTML taglib contains tags used to create Struts input forms, as well as other tags generally useful in the creation of HTML-based user interfaces. The output is HTML 4.01 compliant or XHTML 1.0 when in XHTML mode.

    libstruts1.2-java-1.2.9/xdocs/userGuide/dev_logic.xml0000644000175000017500000000227610404045226023221 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Mike Schachter The Struts User's Guide - Logic Taglib Guide

    Note: - Many of the features in this taglib are also available in the JavaServer Pages Standard Tag Library (JSTL). The Struts team encourages the use of the standard tags over the Struts specific tags when possible.

    The "struts-logic" 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

    libstruts1.2-java-1.2.9/xdocs/userGuide/dev_nested.xml0000644000175000017500000000164110404045234023400 0ustar arnaudarnaud00000000000000 Arron Bates The Struts User's Guide - Nested Taglib Guide

    Nested tags & supporting classes extend the base struts tags to allow them to relate to each other in a nested nature. The fundamental logic of the original tags don't change, except in that all references to beans and bean properties will be managed in a nested context.

    libstruts1.2-java-1.2.9/xdocs/userGuide/dev_tiles.xml0000644000175000017500000001747010404045222023242 0ustar arnaudarnaud00000000000000 Cedric Dumoulin The Struts User's Guide - Tiles Guide

    Tiles builds on the "include" feature provided by the JavaServer Pages specification to provide a full-featured, robust framework for assembling presentation pages from component parts. Each part ("Tile") can be reused as often as needed throughout your application. This reduces the amount of markup that needs to be maintained and makes it easier to change the look and feel of a website.

    • Screen definitions
      • Create a screen by assembling Tiles, e.g. header, footer, menu, body
      • Definitions can take place:
        • in a centralized XML file
        • directly in JSP pages
        • in Struts Actions
      • Definitions provide an inheritance mechanism: a definition can extend another one and override some (or all) of its parameters
    • Layouts
      • Define common page layouts and reuse them across your web site
      • Define menu layouts and pass lists of items and links
      • Define a portal layout, use it by passing list of Tiles (pages) to show
      • Reuse existing layouts, or define your own ones
    • Dynamic page building
      • Tiles are gathered dynamically during page reload. It is possible to change any attributes: layout, list of Tiles in portal, list of menu items, ...
    • Reuse of Tiles/Components
      • If well defined, a Tile can be reused in different locations
      • Dynamic attributes are used to parameterize Tiles
      • It is possible to define libraries of reusable Tiles .
      • Build a page by assembling predefined components, give them appropriate parameters
    • Internationalization (I18N)
      • It is possible to load different Tiles according to the user's Locale
      • A mechanism similar to Java properties files is used for definition files: you can have one definition file per Locale, the appropriate definition is loaded according to the current Locale
    • Multi-channels
      • It is possible to load different Tiles according to a key stored e.g. in session context
      • The key could hold e.g. user privileges, browser type, ...
      • A mechanism similar to Java properties files is used for definition files: you can have one definition file per key, the appropriate definition is loaded according to the key

    The Tiles framework is bundled with Struts but not enabled by default. To enable Tiles you need to:

    • Setup the struts-tiles taglib in your WEB-INF/web.xml file to include the following tag library declaration:
    <taglib>
    <taglib-uri>/WEB-INF/struts-tiles.tld</taglib-uri>
    <taglib-location>/WEB-INF/struts-tiles.tld</taglib-location>
    </taglib>
    • At the top of each JSP page that will use the Tiles custom tags, add the following line declaring the Tiles custom tag library for use on the page:
    <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
    Servlet 2.3: You can omit the declaration in WEB-INF/web.xml and replace above line with the full URI:
    <%@ taglib uri="http://jakarta.apache.org/struts/tags-tiles" prefix="tiles" %>
    • If you plan to use Tiles definitions defined in a centralized file, you need to create this file and instruct Struts to load the Tiles plugin which will create the factory corresponding to the file. You can have more than one definitions file.
      • Create a file containing your definitions (e.g. WEB-INF/tiles-defs.xml). You can use the tiles-defs.xml file from the Tiles application for a detailed example of the required syntax.
      • Setup the Tiles plugin in each struts-config.xml file corresponding to a module:
      <plug-in className="org.apache.struts.tiles.TilesPlugin" >
        <set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml,
      /WEB-INF/tiles-tests-defs.xml" />
        <set-property property="definitions-parser-validate" value="true" />
        <set-property property="moduleAware" value="true" />
      </plug-in>
      • Note: This plugin creates one factory for each Struts modules. The plugin first reads the factory parameters from web.xml and then overloads them with the ones defined in the first struts-config.xml file.
    • Note: The Tiles framework now uses the commons-logging package to output different information or debug statements. Please refer to this package documentation to enable it. The simplest way to enable logging is to create two files in WEB-INF/classes:
      commons-logging.properties
      org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog
      simplelog.properties
      # Logging detail level,
      # Must be one of ("trace", "debug", "info", "warn", "error", or "fatal").
      org.apache.commons.logging.simplelog.defaultlog=trace

    Reuse Tiles and Simplify UI by James Holmes. Howto article in Oracle Magazine.

    Developing applications with Tiles by Cedric Dumoulin and Ted Husted. Sample chapter from Struts in Action; available as a free download (PDF).

    Using Tiles Sample beta chapter from Programming Jakarta Struts; available as a free download (PDF).

    Struts and Tiles aid component-based development by Wellie Chao.

    UI design with Tiles and Struts by Prakash Malani.

    Tiles 101/201 by Patrick Peak.

    Tiles Advanced Features by Cedric Dumoulin.

    libstruts1.2-java-1.2.9/xdocs/userGuide/dev_util.xml0000644000175000017500000000131110404045212023061 0ustar arnaudarnaud00000000000000 Craig R. McClanahan The Struts User's Guide - Utilities Guide

    The Utilities package provides a variety of families of classes, to solve problems that are commonly encountered in building web applications.

    libstruts1.2-java-1.2.9/xdocs/userGuide/dev_validator.xml0000644000175000017500000007170210404045216024110 0ustar arnaudarnaud00000000000000 David Winterfeldt James Turner Rob Leland The Struts User's Guide - Validator Guide

    The Struts Validator, in some form, has been available since the days of Struts 0.5. It was orignally packaged as a developer contribution. Later, the core code was moved to the Jakarta Commons and a Struts specific extension became part of Struts 1.1.

    For the convenience of the many developers who have been using the Struts Validator all along, this document first overviews the core functionality and then covers the changes and new functionality added in the Struts 1.1.

    Once you have configured the Validator Plug-In, so that it can load your Validator Resources you just have to extend org.apache.struts.validator.action.ValidatorForm instead of org.apache.struts.action.ActionForm. Then when the validate method is called, the action's name attribute from the struts-config.xml is used to load the validations for the current form. So the form element's name attribute in the validator-rules.xml should match action element's name attribute.

    Another alternative is to use the action mapping you are currently on by extending the ValidatorActionForm instead of the ValidatorForm. The ValidatorActionForm uses the action element's path attribute from the struts-config.xml which should match the form element's name attribute in the validator-rules.xml.

    Then a separate action can be defined for each page in a multi-page form and the validation rules can be associated with the action and not a page number as in the example of a multi-page form in the validator example.

    Validation rules for forms can be grouped under a FormSet element in the validator-rules.xml file. The FormSet has language, country, and variant attributes that correspond with the java.util.Locale class. If they are not used, the FormSet will be set to the default locale. A FormSet can also have constants associated with it. On the same level as a FormSet there can be a global element which can also have constants and have validator actions that perform validations.

    Note: You must declare a default FormSet without internationalization before your internationalized FormSets. This allows the Validator to fall back to the default version if no locale is found.

    The default error message for a pluggable validator can be overriden with the msg element. So instead of using the msg attribute for the mask validator to generate the error message the msg attribute from the field will be used if the name of the field's name attribute matches the validator's name attribute.

    The arguments for error messages can be set with the arg0-arg3 elements. If the arg0-arg3 elements' name attribute isn't set, it will become the default arg value for the different error messages constructed. If the name attribute is set, you can specify the argument for a specific pluggable validator and then this will be used for constructing the error message.

    
        
        
        
            mask
            ^[a-zA-Z]*$
        
    
    ]]>

    By default the arg0-arg3 elements will try to look up the key attribute in the message resources. If the resource attribute is set to false, it will pass in the value directly without retrieving the value from the message resources.

    Note that as of the Struts 1.1 release, you must explicitly define your message resource in any module that is going to use the Validator, due to a problem accessing the top-level resource. This only effects applications which are using modules.

    
        
        
        
        
            min
            10
        
        
            max
            20
        
        
    ]]>

    Global constants can be inside the global tags and FormSet/Locale constants can be created in the formset tags. Constants are currently only replaced in the Field's property attribute, the Field's var element value attribute, the Field's msg element key attribute, and Field's arg0-arg3 element's key attribute. A Field's variables can also be substituted in the arg0-arg3 elements (ex: ${var:min}). The order of replacement is FormSet/Locale constants are replaced first, Global constants second, and for the arg elements variables are replaced last.

    
        
            zip
            ^\d{5}(-\d{4})?$
        
    
    
    
    
    
     mask
     ${zip}
    
    
    ]]>

    The var element under a field can be used to store variables for use by a pluggable validator. These variables are available through the Field's getVar(String key) method.

    
        
        
        
        
            min
            10
        
        
            max
            20
        
        
    ]]>

    A frequent requirement in validation design is to validate one field against another (for example, if you have asked the user to type in a password twice for confirmation, to make sure that the values match.) In addition, there are fields in a form that may only be required if other fields have certain values. The new validwhen validation rule, which will be included into the Struts release immediately after the 1.1 release, is designed to handle these cases.

    The validwhen rule takes a single var field, called test. The value of this var is a boolean expression which must be true in order for the validation to success. The values which are allowed in the expression are:

    • Single or double-quoted string literals.
    • Integer literals in decimal, hex or octal format
    • The value null which will match against either null or an empty string
    • Other fields in the form referenced by field name, such as customerAge
    • Indexed fields in the form referenced by an explicit integer, such as childLastName[2]
    • Indexed fields in the form referenced by an implicit integer, such as childLastName[], which will use the same index into the array as the index of the field being tested.
    • Properties of an indexed fields in the form referenced by an explicit or implicit integer, such as child[].lastName, which will use the same index into the array as the index of the field being tested.
    • The literal *this, which contains the value of the field currently being tested

    As an example of how this would work, consider a form with fields sendNewsletter and emailAddress. The emailAddress field is only required if the sendNewsletter field is not null. You could code this using the validwhen rule as:

    
          
            
              test
              ((sendNewsletter == null) or (*this* != null))
            
          
    ]]>

    Which reads as: this field is valid if sendNewsletter is null or the field value is not null.

    Here's a slightly more complicated example using indexed fields. Assume a form with a number of lines to allow the user to enter part numbers and quantities they wish to order. An array of beans of class orderLine is used to hold the entries in a property called orderLines. If you wished to verify that every line with part number also had a quantity entered, you could do it with:

    
          
            
              test
              ((orderLines[].partNumber == null) or (*this* != null))
            
          
    ]]>

    Which reads as: This field is value if the corresponding partNumber field is null, or this field is not null.

    As a final example, imagine a form where the user must enter their height in inches, and if they are under 60 inches in height, it is an error to have checked off nbaPointGuard as a career.

    
          
            
              test
              ((heightInInches >= 60) or (*this* == null))
            
          
    ]]>

    A few quick notes on the grammer.

    • All comparisons must be enclosed in parens.
    • Only two items may be joined with and or or
    • If both items to be compared are convertable to ints, a numeric comparison is done, otherwise a string comparison is done.

    Validation actions are read from the validation.xml file. The default actions are setup in the validation.xml file. The ones currently configured are required, mask ,byte, short, int, long, float, double, date (without locale support), and a numeric range.

    The 'mask' action depends on required in the default setup. That means that 'required' has to successfully completed before 'mask' will run. The 'required' and 'mask' action are partially built into the framework. Any field that isn't 'required' will skip other actions if the field is null or has a length of zero.

    If the Javascript Tag is used, the client side Javascript generation looks for a value in the validator's javascript attribute and generates an object that the supplied method can use to validate the form. For a more detailed explanation of how the Javascript Validator Tag works, see the html taglib API reference.

    The 'mask' action lets you validate a regular expression mask to the field. It uses the Regular Expression Package from the jakarta site. All validation rules can be stored in the validator-rules.xml file. The main class used is org.apache.regexp.RE.

    Example Validator Configuration from validation.xml.

    
    
    
    ]]>

    Creating Pluggable Validators

    The methodParams attribute takes a comma separated list of class names. The method attribute needs to have a signature complying with the above list. The list can be comprised of any combination of the following:

    • java.lang.Object - Bean validation is being performed on.
    • org.apache.commons.validator.ValidatorAction - The current ValidatorAction being performed.
    • org.apache.commons.validator.Field - Field object being validated.
    • org.apache.struts.action.ActionErrors - The errors objects to add an ActionError to if the validation fails.
    • javax.servlet.http.HttpServletRequest - Current request object.
    • javax.servlet.ServletContext - The application's ServletContext.
    • org.apache.commons.validator.Validator - The current org.apache.commons.validator.Validator instance.
    • java.util.Locale - The Locale of the current user.

    Multi Page Forms

    The field element has an optional page attribute. It can be set to an integer. All validation for any field on a page less than or equal to the current page is performed server side. All validation for any field on a page equal to the current page is generated for the client side Javascript. A mutli-part form expects the page attribute to be set.

    
    ]]>

    Comparing Two Fields

    This is an example of how you could compare two fields to see if they have the same value. A good example of this is when you are validating a user changing their password and there is the main password field and a confirmation field.

    
    
    
              
              
                 secondProperty
                 password2
              
    
    ]]>

    Since the Struts Validator relies on the Commons Validator, problem reports and enhancement requests may be listed against either product.

    New tag attributes.

    The <html:javascript> tag has new attributes defined.

    Validating against the DTD in the commons-validator.jar.

    The validator xml files now validates against the DTD stored in the commons-validator.jar ! Struts no longer maintains a separate dtd for validator-rules.xml and validator.xml. Additionally, commons-validator now maintains a unified validator.dtd. Change all validator.xml DTD references to:

    
    ]]>

    Blank fields.

    The default validator-rules.xml now ignores blank fields for all the basic validation types. If you require a field to be present then to your applications validator.xml field definition add "required" to the depends attribute.

    New range methods.

    intRange & floatRange methods in both JavaScript and Java

    Conditionally required fields.

    The most fundamental change is the ability to conditionally require validator fields based on the value of other fields. It allows you to define logic like "only validate this field if field X is non-null and field Y equals 'male'". The recommended way to do this will be with the validwhen rule, described above, and available in the first release after 1.1. The requiredif validation rule, which was added in Struts 1.1, will be deprecated in favor of this rule, and will be removed in a future release. However, if you are using requiredif, here is a brief tutorial.

    Let's assume you have a medical information form with three fields, sex, pregnancyTest, and testResult. If sex is 'f' or 'F', pregnancyTest is required. If pregnancyTest is not blank, testResult is required. The entry in your validation.xml file would look like this:

    <form name="medicalStatusForm">
    
    <field
        property="pregnancyTest" depends="requiredif">
      <arg0 key="medicalStatusForm.pregnancyTest.label"/>
      <var>
        <var-name>field[0]</var-name>
        <var-value>sex</var-value>
      </var>
      <var>
        <var-name>fieldTest[0]</var-name>
        <var-value>EQUAL</var-value>
      </var>
      <var>
        <var-name>fieldValue[0]</var-name>
        <var-value>F</var-value>
      </var>
      <var>
        <var-name>field[1]</var-name>
        <var-value>sex</var-value>
      </var>
      <var>
        <var-name>fieldTest[1]</var-name>
        <var-value>EQUAL</var-value>
      </var>
      <var>
        <var-name>fieldValue[1]</var-name>
        <var-value>f</var-value>
      </var>
      <var>
        <var-name>fieldJoin</var-name>
        <var-value>OR</var-value>
      </var>
    </field>
    
    <field
        property="testResult" depends="requiredif">
      <arg0 key="medicalStatusForm.testResult.label"/>
      <var>
        <var-name>field[0]</var-name>
        <var-value>pregnancyTest</var-value>
      </var>
      <var>
        <var-name>fieldTest[0]</var-name>
        <var-value>NOTNULL</var-value>
      </var>
    </field>
    </form>
    

    Here's a more complex example using indexed properties.

    If you have this in your struts-config.xml

    
        
        
    
    ]]>

    Where dependent is a bean that has properties lastName, firstName, dob, coverageType

    You can define a validation:

    
    
    
      
      
        field[0]
        lastName
      
      
        fieldIndexed[0]
        true
      
      
        fieldTest[0]
        NOTNULL
      
    
    
    
      
      
        field[0]
        lastName
      
      
        fieldIndexed[0]
        true
      
      
        fieldTest[0]
        NOTNULL
      
    
    
    
      
      
        field[0]
        lastName
      
      
        fieldIndexed[0]
        true
      
      
        fieldTest[0]
        NOTNULL
      
      
        field[1]
        insureDependents
      
      
        fieldTest[1]
        EQUAL
      
      
        fieldValue[1]
        true
      
      
        fieldJoin
        AND
      
    
    
    
    
    ]]>

    Which is read as follows: The firstName field is only required if the lastName field is non-null. Since fieldIndexed is true, it means that lastName must be a property of the same indexed field as firstName. Same thing for dob, except that we validate for date if not blank.

    The coverageType is only required if the lastName for the same indexed bean is not null, and also if the non-indexed field insureDependents is true.

    You can have an arbitrary number of fields by using the [n] syntax, the only restriction is that they must all be AND or OR, you can't mix.

    Deprecations.

    • Deprecation of range methods in both JavaScript and Java.
    • Deprecation of StrutsValidator & StrutsValidatorUtil.

    A concise Struts Validator API Guide is available to help you get started.

    Check Your Form with Validator by James Holmes. Howto article in Oracle Magazine.

    Struts Validator: Validating Two Fields Match by Matt Raible. Howto article.

    DynaForms and the Validator by James Turner and Kevin Bedell. Sample chapter from Struts Kickstart; available as a free download (PDF).

    Validating user input by David Winterfeldt and Ted Husted. Sample chapter from Struts in Action; available as a free download (PDF).

    libstruts1.2-java-1.2.9/xdocs/userGuide/index.xml0000644000175000017500000002775110404045240022376 0ustar arnaudarnaud00000000000000 Craig R. McClanahan David Geary Mike Schachter Ted Husted Martin Cooper Arron Bates Cedric Dumoulin David Winterfeldt Chris Assenza dIon Gillard Dominique Plante Ed Burns Eric Wu James DeVries John Rousseau John Ueltzhoeffer Larry McCay Mark Budai Matthias Kerkhoff Paul Runyan Robert Hayden Robert Leland Stanley Santiago Wong Kok Kai Donald Ball Dan Walker Eddie Bush Yann Cebron David Graham The Struts User's Guide - Table of Contents

    Next: Preface

    libstruts1.2-java-1.2.9/xdocs/userGuide/installation-1.0.xml0000644000175000017500000003665310404045220024263 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Martin Cooper Ted Husted The Struts Framework Project - Installation (1.0)

    The Struts binary distribution needs three other software packages installed to operate. You may already have these installed on your system. To build Struts from source you may need to acquire and install several others. The complete list is as follows:

    • Java Development Kit - You must download and install a Java2 (version 1.2 or later) Java Development Kit implementation for your operating system platform. A good starting point for locating Java Development Kit distributions is http://java.sun.com/j2se.
    • Servlet Container - You must download and install a servlet container that is compatible with the Servlet API Specification, version 2.2 or later, and the JavaServer Pages (JSP) Specification, version 1.1 or later. One popular choice is to download Apache's Tomcat (version 3.1 or later required, version 3.2 or later recommended).
    • XML Parser - Struts requires the presence of an XML parser that is compatible with the Java API for XML Parsing (JAXP) specification, 1.0 or later. You can download and install the JAXP reference implementation, which is required for building the Struts source distribution. In Struts-based web applications, you may replace the reference implementation classes with any other JAXP compliant parser, such as Xerces. See detailed instructions related to the parser in the instructions for building and installing Struts, below.
    • Ant Build System - If you are building Struts from the source distribution, you must download and install version 1.3 or later of the Ant build system. This package is also strongly recommended for use in developing your own web applications based on Struts.
      • If you are using the release version of Ant version 1.3, you will also need to download the "optional.jar" file that contains the implementation of Ant's <style> command.
      • Make sure that the "ant" and "ant.bat" scripts are executable, by adding the $ANT_HOME/bin directory to your PATH environment variable.
    • JDBC 2.0 Optional Package Classes - Struts supports an optional implementation of javax.sql.DataSource, so it requires the API classes to be compiled. They can be downloaded from http://java.sun.com/products/jdbc/download.html.
    • Xalan XSLT Processor - If you are building Struts from the source distribution, you must download and install version 1.2 (problems have been reported with current versions of Xalan 2.0) of the Xalan XSLT processor (which also includes the Xerces XML parser), or use the version of Xalan included in the JAXP 1.1 release. This processor is used to convert the Struts documentation from its internal XML-based format into the HTML that is presented in the Struts documentation application.

    First, download a binary distribution of Struts by following the instructions here. Then, make sure you have downloaded and installed the prerequisite software packages described above.

    Unpack the Struts binary distribution into a convenient directory. (If you build Struts from the source distribution, the result of the build will already be an unpacked binary distribution for you). The distribution consists of the following contents:

    • lib/struts.jar - This JAR file contains all of the Java classes included in Struts. It should be copied into the WEB-INF/lib directory of your web application. WARNING - If you are going to be hosting multiple Struts based applications on the same servlet container, you will be tempted to place the struts.jar file into the shared repository supported by your container. Be advised that this will like cause you to encounter ClassNotFoundException problems unless all of your application classes are stored in the shared repository.
    • lib/struts*.tld - These are the "tag library descriptor" files that describe the custom tags in the various Struts tag libraries. They should be copied into the WEB-INF directory of your web application.
    • webapps/struts-blank.war - This is a simple "web application archive" file containing a basic starting point for building your own Struts-based applications.
    • webapps/struts-documentation.war - This is a "web application archive" file containing all of the Struts documentation found on the Struts web site (including these pages). You can install this web application on any servlet container compatible with Servlet API 2.2 or later.
    • webapps/struts-example.war - This is an example web application that uses a large percentage of Struts features. You can install this web application on any servlet container compatible with the Servlet 2.2 (or later) and JSP 1.1 (or later) specifications. If an XML parser is not made available to web applications by your container, you will need to add one to the WEB-INF/lib directory of this web application.
    • webapps/struts-exercise-taglib.war - This web application contains test pages for the various custom tags supported by Struts. It is primarily of use to developers who are enhancing the Struts custom tag libraries, but may also be useful as simple examples of the usage of various Struts tags.
    • webapps/struts-template.war - This web application both introduces and demonstrates the Struts template tags.
    • webapps/struts-upload.war - This web application is a quick example of uploading files using the Struts framework.

    To use Struts in your own application, you will need to follow these steps:

    • Copy the file lib/struts.jar from the Struts distribution into the WEB-INF/lib directory of your web application.
    • Copy the all of the files that match lib/struts*.tld from the Struts distribution into the WEB-INF directory of your web application.
    • Modify the WEB-INF/web.xml file for your web application to include a <servlet> element to define the controller servlet, and a <servlet-mapping> element to establish which request URIs are mapped to this servlet. Use the WEB-INF/web.xml file from the Struts example application for a detailed example of the required syntax.
    • Modify the WEB-INF/web.xml file of your web application to include the following tag library declarations:
    <taglib>
      <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
      <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
    </taglib>
    
    <taglib>
      <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
      <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
    </taglib>
    
    <taglib>
      <taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
      <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
    </taglib>
    
    <taglib>
      <taglib-uri>/WEB-INF/struts-template.tld</taglib-uri>
      <taglib-location>/WEB-INF/struts-template.tld</taglib-location>
    </taglib>
    
    • Create a file WEB-INF/struts-config.xml that defines the action mappings and other characteristics of your specific application. You can use the struts-config.xml file from the Struts example application for a detailed example of the required syntax.
    • At the top of each JSP page that will use the Struts custom tags, add line(s) declaring the Struts custom tag libraries used on this particular page, like this:
    <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
    <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
    <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
    <%@ taglib uri="/WEB-INF/struts-template.tld" prefix="template" %>
    
    • When compiling the Java classes that comprise your application, be sure to include the struts.jar file (copied earlier) on the CLASSPATH that is submitted to the compiler.

    WARNING - Do NOT add struts.jar to the classpath of your servlet container in an attempt to avoid placing it in the /WEB-INF/lib directory of each individual web app! Doing so will cause problems with ClassNotFoundException exceptions.

    For most containers, you need only to:

    • Copy the WAR files in your Struts /webapp directory to your containers webapps directory.
    • In some cases, you may need to restart your container if it is running.

    Status of various containers

    First, download a source distribution of Struts by following the instructions here. Then, make sure you have downloaded and installed all of the prerequisite software packages described above.

    To build Struts, you will need to customize the build process to the details of your development environment as follows:

    • The Struts source distribution uses a file named build.properties (in the top-level directory of the distribution) to identify the location of external components that Struts depends on.
    • There is no build.properties file included with the source distribution. However, there is an example file named build.properties.example that you can copy to build.properties and then customize.
    • The properties you must configure in build.properties are:
      • catalina.home - Pathname to the directory of your binary distribution of Tomcat 4.0 (required only if you wish to use the deploy.catalina target).
      • servletapi.home - Pathname to the directory of your binary distribution of the Servlet API classes.
      • tomcat.home - Pathname to the directory of your binary distribution of Tomcat 3.2 (required only if you wish to use the deploy.tomcat target).
      • xerces.home - Pathname to the directory of your binary distribution of the Xerces parser, version 1.2 or 1.3 (required only if you wish to use the deploy.catalina target).
    • If you are a Struts developer with write access to the Subversion repository, be sure that you do NOT check in a copy of the build.properties file, since it will be different for each individual developer.

    To build a "distribution" version of Struts, first change your current directory to the directory in which you have unpacked the Struts source distribution, and (if necessary) create or customize the build.properties file as described above. Then, type:

            ant dist
    

    This command will create a binary distribution of Struts, in a directory named dist (relative to where you are compiling from). This directory contains an exact replica of the files included in a binary distribution of Struts, as described in the preceding section.

    libstruts1.2-java-1.2.9/xdocs/userGuide/installation-ip.xml0000644000175000017500000000350710404045204024367 0ustar arnaudarnaud00000000000000 Stanley Santiago The Struts Framework Project - Installation - iPlanet

    iPlanet Application Server 6.0

    Service Pack 2 is recommended.

    NOTE: At present, the Struts example application still uses a non-Serializable servlet context attribute, and will not run in an environment that requires them, like iPlanet Application Server.

    iPlanet Web Server 4.2

    Here are the issues I ran into while moving my struts based application from Tomcat (supports WebApps and WAR) to iWS 4.1 (does NOT support Webapps and WAR).

    Webapps and WAR will be supported in iWS 5.0, as mentioned in iWS5.0 roadmap.

    Classpath issues.

    This s pretty straightforward. Since there is no notion of WEB-INF/lib and WEB-INF/classes the classpath has to be explicitly set in $SERVER_ROOT/config/jvm12.conf.

    Context relative paths

    All URLs should be visible from the document root. In my case I just created a symbolic link from $DOCROOT/myapp to webapps/myapp.

    Extension mapping

    The config file $SERVER_ROOT/config/rules.properties has a similar mechanism as in web.xml.

    I have this in my rules.properties which forwards all urls ending with "do" to the servlet whose logical name is action.

    ####
        @.*[.]do$=action
    ####

    Back to Installation

    libstruts1.2-java-1.2.9/xdocs/userGuide/installation-ipas.xml0000644000175000017500000001720710404045210024712 0ustar arnaudarnaud00000000000000 John Ueltzhoeffer The Struts Framework Project - Installation - iPortal Application Server

    iPortal Application Server 1.3

    Tested with: Windows 2000

    Important Note:

    At the moment, iPAS 1.3 is not fully compliant with the JSP 1.1/1.2 specification.

    Specifically, the automatic type conversions for custom tag parameters specified in "Issue 7" of the JSP 1.1 Errata and in the JSP 1.2 Proposed Final Draft have not yet been implemented.

    As it stands, JSP pages that make use of Struts taglibs whose parameters require conversion (such as booleans) will not compile under JRun. This includes the Struts Example Application. Attempting to run the example application will result in an exception similar to the following being thrown:

    /struts-example/index.jsp:
    
    Compilation failed [IT_Builder:1000]
     at com.iona.j2ee.builder.JavaBuilder.build(JavaBuilder.java:84)
     at com.iona.j2ee.builder.JspBuilder.build(JspBuilder.java:51)
     at com.iona.j2ee.builder.WarBuilder.build(WarBuilder.java:111)
     at com.iona.j2ee.builder.EarBuilder.build(EarBuilder.java:99)
     at com.iona.j2ee.builder.EarBuilder.main(EarBuilder.java:223)
     at iportal.build.main(build.java:14)
     ocale(boolean) in org.apache.struts.taglib.html.HtmlTag
       cannot be applied to (java.lang.String)
           _x0.setLocale("true");
                ^
     1 error
    

    (For more details see refer to:
    http://www.mail-archive.com/struts-user@jakarta.apache.org/msg01860.html )

    The following instructions describe how to install the Struts Example Application under iPAS 1.3. A subsequent section describes how the Struts Example Application can be patched to work with Struts.

    The following instructions assume the following:

    • iPortal Application Server 1.3 has been installed.
    • Both the Strut and XML Parser libraries are in your classpath.

    Installing the struts example application

    • Start iPAS Services by clicking on the [Start iPAS Services] menu item.
    • Start the iPortal Application Server by clicking on the [iPortal Application Server] menu item.
    • Start a command shell. Change to the $INSTALLDIR\IONA and run the setenvs.bat file.
    • Create a directory called jars.

    Now run the EARSCO tool. Type java iportal.earsco and at the prompts do:

    • Next
    • Type in the application name of struts-example then click next.
    • In step three click the check box and enter the name of the WAR struts-example.Then click next.
    • Click on Finish.

    Now you must copy the contents of the struts-example war into the EARSCO directory structure as follows:

    Under $INSTALLDIR\IONA\jars\struts-examples\src\struts-example.war you copy contents into the following directories: etc, lib, src and web.

    • Copy all files in the root directory
      $INSTALLDIR\jakarta-tomcat-3.2.1\webapps\struts-example\WEB-INF
      into the earsco directory
      $INSTALLDIR\IONA\jars\struts-examples\src\struts-example.war\etc
      Do not copy in the classes or lib directories.
    • Copy the directory
      $INSTALLDIR\jakarta-tomcat-3.2.1\webapps\struts-example\WEB-INF\lib
      into the earsco directory
      $INSTALLDIR\IONA\jars\struts-examples\src\struts-example.war\lib
    • Copy the directory
      $INSTALLDIR\jakarta-tomcat-3.2.1\webapps\struts-example\WEB-INF\classes
      into the earsco directory
      $INSTALLDIR\IONA\jars\struts-examples\src\struts-example.war\src
    • Copy the directory
      $INSTALLDIR\jakarta-tomcat-3.2.1\webapps\struts-example
      into the earsco directory
      $INSTALLDIR\IONA\jars\struts-examples\src\struts-example.war\web
    • Next modify the application.xml in the
      $INSTALLDIR\IONA\jars\struts-examples\etc directory to this:
         <application>
    
         <!-- Add display name -->
               <display-name>Struts Example</display-name>
                     .......
    
    • Last update the cc.xml in the
      $INSTALLDIR\IONA\jars\struts-examples directory as follows:
         <configuration>
           <web-app>
             <context-root>struts-example</context-root>
           </web-app>
         </configuration>
    

    Now you are ready to compile and deploy the struts-example.

    To compile the source from the $INSTALLDIR\IONA\jars\struts-examples type

    java iportal.build

    Next, type

    java iportal.deploy

    The first time you deploy you will be prompted by a Deploy wizard and asked to supply both locations of the struts-example.ear file and of the cc.xml file. Once both elements have been satisfied continue until the finish button and click it. The EAR file should deploy successfully.

    Test the sample application by using the following URL in the browser:

    http://hostname:9000/struts-example/index.jsp

    The struts-documentation.war can be installed using the same procedure.

    Patching the struts example application

    As mentioned at the beginning of these notes, the Struts Example Application will not run under iPAS 1.3 without modification. The following changes will need to be made:

    • index.jsp, logon.jsp: Change <html:html locale="true"> to
      <html:html locale=<%= true %>>
    • registration.jsp, subscription.jsp: Change all instances of filter="true" to
      filter=<%= true %>

    Back to Installation

    libstruts1.2-java-1.2.9/xdocs/userGuide/installation-jetty.xml0000644000175000017500000001011710404045220025107 0ustar arnaudarnaud00000000000000 Paul Runyan The Struts Framework Project - Installation - Jetty

    Jetty Java HTTP Servlet Server

    Jetty is a small, pure-Java, open source HTTP server that supports the 2.3 Servlet spec and JSP 1.2. Jetty can be downloaded from http://www.mortbay.com/jetty.

    Struts WAR files run nearly straight out of the box when placed underneath Jetty's webapps directory. The one additional step needed is to add an entry for each WAR file to the Jetty server configuration file in order to map the appropriate request paths to the added Struts web applications (using "<Call name="addWebApplication">...").

    So for example, if you have copied the WAR files that come with the Struts binary distribution into a subdirectory of the "%JETTY_HOME%/webapps" called "%JETTY_HOME%/webapps/struts" so that you have:

    - %JETTY_HOME%/webapps/struts/struts-documentation.war
    - %JETTY_HOME%/webapps/struts/struts-example.war
    - %JETTY_HOME%/webapps/struts/struts-exercise-taglib.war
    - %JETTY_HOME%/webapps/struts/struts-upload.war
    - %JETTY_HOME%/webapps/struts/struts-blank.war
    

    And you want to run Jetty using the demo.xml configuration file that comes with Jetty, just add the following block to demo.xml, anywhere after the Listeners are declared.

    <!-- Jetty config for Struts BEGIN -->
    
      <Call name="addWebApplication">
        <Arg>/struts/struts-documentation/*</Arg>
        <Arg><SystemProperty name="jetty.home"
            default="."/>/webapps/struts/struts-documentation.war</Arg>
        <Arg><SystemProperty name="jetty.home"
            default="."/>/etc/webdefault.xml</Arg>
        <Arg type="boolean">false</Arg> <!-- if true,
            expand war in temp dir -->
      </Call>
    
      <Call name="addWebApplication">
        <Arg>/struts/struts-example/*</Arg>
        <Arg><SystemProperty name="jetty.home"
            default="."/>/webapps/struts/struts-example.war</Arg>
        <Arg><SystemProperty name="jetty.home"
            default="."/>/etc/webdefault.xml</Arg>
        <Arg type="boolean">true</Arg> <!-- if true,
            expand war in temp dir -->
      </Call>
    
      <Call name="addWebApplication">
        <Arg>/struts/struts-exercise-taglib/*</Arg>
        <Arg><SystemProperty name="jetty.home"
            default="."/>/webapps/struts/struts-exercise-taglib.war</Arg>
        <Arg><SystemProperty name="jetty.home"
            default="."/>/etc/webdefault.xml</Arg>
        <Arg type="boolean">false</Arg> <!-- if true,
            expand war in temp dir -->
      </Call>
    
      <Call name="addWebApplication">
        <Arg>/struts/struts-upload/*</Arg>
        <Arg><SystemProperty name="jetty.home"
            default="."/>/webapps/struts/struts-upload.war</Arg>
        <Arg><SystemProperty name="jetty.home"
            default="."/>/etc/webdefault.xml</Arg>
        <Arg type="boolean">true</Arg> <!-- if true,
            expand war in temp dir -->
      </Call>
    
      <Call name="addWebApplication">
        <Arg>/struts/struts-blank/*</Arg>
        <Arg><SystemProperty name="jetty.home"
            default="."/>/webapps/struts/struts-blank.war</Arg>
        <Arg><SystemProperty name="jetty.home"
            default="."/>/etc/webdefault.xml</Arg>
        <Arg type="boolean">true</Arg> <!-- if true,
            expand war in temp dir -->
      </Call>
    
    <!-- Jetty config for Struts END -->
    

    Back to Installation

    libstruts1.2-java-1.2.9/xdocs/userGuide/installation-jr30.xml0000644000175000017500000001573310404045204024541 0ustar arnaudarnaud00000000000000 Eric Wu Mark Budai The Struts Framework Project - Installation - JRun 3.0

    JRUN 3.0 SP2A, VERSION 3.02A.11614

    Tested with: Microsoft IIS 5.0, Windows 2000

    Important Note:

    At the moment, JRun is not fully compliant with the JSP 1.1/1.2 specification.

    Specifically, the automatic type conversions for custom tag parameters specified in "Issue 7" of the JSP 1.1 Errata and in the JSP 1.2 Proposed Final Draft have not yet been implemented.

    As it stands, JSP pages that make use of Struts taglibs whose parameters require conversion (such as booleans) will not compile under JRun. This includes the Struts Example Application. Attempting to run the example application will result in an exception similar to the following being thrown:

    /struts-example/index.jsp:
    
    javax.servlet.ServletException: Compilation error occurred:
    
    allaire.jrun.scripting.DefaultCFE:
    
    Errors reported by compiler:
    c:/JRun/servers/default/Struts
      Example/WEB-INF/jsp/jrun__index2ejspa.java:41:1:41:27:
    
    Error: No match was found for method "setLocale(java.lang.String)".
    

    (For more details see refer to:
    http://www.mail-archive.com/struts-user@jakarta.apache.org/msg01860.html)

    The following instructions describe how to install the Struts Example Application under JRun. A subsequent section describes how the Struts Example Application can be patched to work with Struts

    The following instructions assume the following:

    • JRun has been installed and integrated with the web server of choice.
    • $APP_SERVER_NAME is the name of the application server used to host the application. (When JRun is first installed, it creates an application server called JRun Default Server).
    • $APP_SERVER_DIR is the directory used to hold applications hosted by $APP_SERVER_NAME. For the JRun Default Server, the directory is $JRUN_HOME/servers/default where $JRUN_HOME is the directory where JRun is installed.

    Installing the struts example application

    • Login to the JRun Management Console.
    • On the left pane, select $APP_SERVER_NAME. A page showing the current server status will be shown on the right pane.
    • On the right pane, click on the WAR Deployment link. A page containing a list of the currently deployed web applications will be shown.
    • On the right pane, click on Deploy an Application. Complete the Web Application Information form as follows:
      • Servlet War File or Directory: Enter the full path where struts-example.war is found or click on Browse to select the path.
      • JRun Server Name: $APP_SERVER_NAME
      • Application Name: Struts Example
      • Application Hosts: All Hosts
      • Application URL: /struts-example
      • Application Deploy Directory: will default to $APP_SERVER_NAME/Struts Example (or the name as specified for Application Name).
    • Once the form is complete, click on the Deploy button.
    • If deployment is successful, restart the application server by clicking on $APP_SERVER_NAME on the left pane. A page showing the current server status will be shown on the right pane. Click the Restart Server button to restart the application server.
    • Test the sample application by using the following URL in the browser:
      http://hostname/struts-example/index.jsp
      The struts-documentation.war can be installed using the same procedure.

    Installing unpacked web applications

    The above steps should be followed for applications deployed as *.war files.

    For unpacked web applications, configuration involves the following steps:

    • From the JRun Management Console, select $APP_SERVER_NAME (on the left pane) and click on WAR Deployment (on the right pane).
    • On the right pane, click on Create an Application and complete the Web Application Information form as follows:
    • JRun Server Name: $APP_SERVER_NAME
      • Application Name: myApplication
      • Application Hosts: All Hosts
      • Application URL: /myApplication
      • Application Deploy Directory: will default to
        $APP_SERVER_NAME/myApplication
    • Click on Create to submit the form.
    • Once the web application is created, install and configure the struts components (struts.jar, struts*.tld, etc) for the web application under $APP_SERVER_NAME/myApplication/WEB-INF
    • Install the remaining components of the application: .class files, JSP pages,.properties files etc as required.
    • To configure the extension mapping of the request URI (ie *.do) to the action servlet, expand $APP_SERVER_NAME on the left pane, expand the Web Applications branch and click on myApplication. The right pane will display the configuration options for myApplication. Click on Servlet URL Mappings. A list of existing mappings will be shown. Click the Edit button and create the following entry:
      • Virtual Path/Extension: *.do
      • Servlet Invoked: action
    • Click on the Update button to save the changes.
    • Restart the application server.
    • The application should now be accessible from the browser.

    The JRun application server will need to be restarted each time one of the following changes are made to the web application:

    • .class or .jar files are modified
    • .properties files are modified
    • .xml files are modified

    Patching the struts example application

    As mentioned at the beginning of these notes, the Struts Example Application will not run under JRun without modification. The following changes will need to be made:

    • index.jsp, logon.jsp: Change <html:html locale="true"> to
      <html:html locale=<%= true %>>
    • logon.jsp: Change <html:html redisplay="true"> to
      <html:html redisplay=<%= true %>>
    • registration.jsp, subscription.jsp: Change all instances of filter="true" to
      filter=<%= true %>

    • Author: Eric Wu, Mark Budai

    Back to Installation

    libstruts1.2-java-1.2.9/xdocs/userGuide/installation-novell.xml0000644000175000017500000000743510404045174025270 0ustar arnaudarnaud00000000000000 John Berry The Struts Framework Project - Installation - Novell ExteNd Application Server

    Novell ExteNd Application Server 4.0

    Using the ExteNd Workbench to deploy a WAR to the Novell ExteNd application server:
    • Start the Novell ExteNd application server.
    • Using the ExteNd Workbench, create a new project:
      1. File > New Project
      2. Select Deploy-Only and click OK
      3. Under Archive File select the appropriate Struts WAR file
      4. Indicate the type of file (i.e. WAR 1.2)
      5. Give the Deploy-Only project a name (i.e. struts-example)
      6. Give the Deploy-Only project a location (i.e. D:\Struts)
      7. Click Next
      8. Review the material to be sure everything is correct
      9. Click Finish
    • Setting up a deployment plan and server profile:
      1. Right click on the project icon you just created and select Deployment Plan
      2. Select OK when asked to create a new deployment plan
      3. Save the deployment plan
      4. Create a server profile: Projects > Deployment Settings
      5. Click on the Server Profiles tab
      6. Select a server profile and click OK
    • Deploy the project:
      1. Project > Deploy Archive
    Deploying a WAR from a command line using SilverCmd:
    • Start the SilverStream application server.
    • Create an XML deployment plan for the struts-example.war application.
    • Call the file struts-example-depl-plan.xml. You can use the following contents for the file:
      
      
      
        
          struts-example.war
          true
          
            struts-example
          
        
      
      ]]>
    • Create an XML deployment plan for the struts-documentation.war application.
    • Call the file struts-documentation-depl-plan.xml. You can use the following contents for the file:
      
      
      
        
          struts-documentation.war
          true
          
            struts-documentation
          
        
      
      ]]>
    • Run the following "SilverCmd DeployWAR" commands to deploy the applications. You can change 'localhost' to whatever server you are deploying to. You can change 'Silvermaster' to whatever database you are deploying to.

    Back to Installation

    libstruts1.2-java-1.2.9/xdocs/userGuide/installation-oas.xml0000644000175000017500000000732110404045242024541 0ustar arnaudarnaud00000000000000 The Struts Framework Project - Installation - Orion Application Server

    Orion Application Server

    In the steps below, $ORION_HOME refers to the directory in which you have installed Orion, and $STRUTS_HOME is the directory in which you unpacked the Struts binary distribution.

    • Modify the file $ORION_HOME/config/application.xml to define the two new applications, by adding the following declarations, immediately following the web-module directive for the default web application:
    <web-module id="strutsDoc"
    path="$STRUTS_HOME/webapps/struts-documentation.war"/>
    <web-module id="strutsExample"
    path="$STRUTS_HOME/webapps/struts-example.war"/>
    
    • Modify the file $ORION_HOME/config/default-web-site.xml (or the configuration file for any other Orion web site) to include the following declarations, after the declaration for the <default-web-app> if any:
    <web-app application="default" name="strutsDoc"
      root="/struts-documentation"/>
    <web-app application="default" name="strutsExample"
      root="/struts-example"/>
    
    • After you start Orion, you should now be able to access these applications (assuming you haven't changed the port number from the default of 80) at:
    http://localhost/struts-documentation
    http://localhost/struts-example
    
    • Versions of Orion up to at least 1.0.3 have a bug related to ServletContext.getResource() calls that prevent the Struts example application from working out of the box. This manifests itself as a JSP error when you try to access the example application, with the following message:
      javax.servlet.jsp.JspException: Missing resources attributeorg.apache.struts.action.MESSAGE
      followed by an error traceback. There will also be an initialization error message in the ORION_HOME/log/global-application.log log file. To work around this problem, you can take the following steps:
      • Go to the $STRUTS_HOME/webapps directory, where you will note that Orion has automatically expanded each web application into an unpacked directory structure.
      • Go to the $STRUTS_HOME/webapps/struts-example/WEB-INF directory, and copy the file struts-config.xml one directory up (that is, into $STRUTS_HOME/webapps/struts-example.
      • Modify the $STRUTS_HOME/webapps/struts-example/WEB-INF/web.xm file, changing the value of the "config" initialization parameter (for the action servlet) from /WEB-INF/struts-config.xml to /action.xml.
      • Restart Orion, and you should be able to access the example application.
      • Note that this workaround has a negative security-related side effect: your struts-conifig.xml file can now be retrieved by remote clients at the following URL:
        http://localhost/struts-example/struts-config.xml
        Therefore, you should be sure you do not store sensitive information (such as database passwords) in this file.

    Back to Installation

    libstruts1.2-java-1.2.9/xdocs/userGuide/installation-sas.xml0000644000175000017500000000534110404045216024546 0ustar arnaudarnaud00000000000000 John Rousseau The Struts Framework Project - Installation - Silverstream Application Server

    SilverStream Application Server 3.7.1 and later

    • Start the SilverStream application server.
    • Create an XML deployment plan for the "struts-example.war" application. Call the file "struts-example-depl-plan.xml". You can use the following contents for the file

    ----- cut here -----

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE warJarOptions PUBLIC
      "-//SilverStream Software, Inc.//DTD J2EE WAR Deployment Plan//EN"
      "deploy_war.dtd">
    <warJarOptions>
    <warJar>
    <warJarName>struts-example.war</warJarName>
    <isEnabled>true</isEnabled>
    <urls><el>struts-example</el></urls>
    </warJar>
    </warJarOptions>
    

    ----- cut here -----


    Create an XML deployment plan for the "struts-documentation.war" application. Call the file "struts-documentation-depl-plan.xml". You can use the following contents for the file:


    ----- cut here -----

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE warJarOptions PUBLIC
      "-//SilverStream Software, Inc.//DTD J2EE WAR Deployment Plan//EN"
      "deploy_war.dtd">
    <warJarOptions>
    <warJar>
    <warJarName>struts-documentation.war</warJarName>
    <isEnabled>true</isEnabled>
    <urls><el>struts-documentation</el></urls>
    </warJar>
    </warJarOptions>
    

    ----- cut here -----


    Run the following "SilverCmd DeployWAR" commands to deploy the applications. You can change 'localhost' to whatever server you are deploying to. You can change 'Silvermaster' to whatever database you are deploying to.

    • SilverCmd DeployWar localhost Silvermaster struts-example.war -f struts-example-depl-plan.xml
    • SilverCmd DeployWar localhost Silvermaster struts-documentation.war -f struts-documentation-depl-plan.xml

    • Author: John Rousseau

    Back to Installation

    libstruts1.2-java-1.2.9/xdocs/userGuide/installation-tc.xml0000644000175000017500000000736710404045222024375 0ustar arnaudarnaud00000000000000 Craig R. McClanahan The Struts Framework Project - Installation - Tomcat with Apache

    Tomcat 3.2.1 With Apache

    Note that the instructions for Tomcat 4 will be different than those for Tomcat 3, but the Tomcat 4.0 web connector is still under development. Versions of Tomcat prior to 3.2.1 are not recommend for use with Struts.

    • These instructions assume you have successfully integrated Tomcat with Apache according to the Tomcat documentation.
    • Copy "struts-documentation.war" and "struts-example.war" to your $TOMCAT_HOME/webapps directory
    • Restart Tomcat if it is already running
    • Tomcat will generate a file "$TOMCAT_HOME/conf/tomcat-apache.conf" that will be used by Apache. This file is regenerated every time you start Tomcat, so copy this file to a safe place (such as your Apache configuration directory; on Unix systems this is usually /usr/local/apache/conf.
    • If you are running Tomcat 3.1, Tomcat will not have generated the entries for your new applications. Add the following lines to the tomcat-apache.conf file that you have saved, replacing $TOMCAT_HOME with the path to your Tomcat home directory:
    Alias /struts-documentation "$TOMCAT_HOME/webapps/struts-documentation
      <Directory "$TOMCAT_HOME/webapps/struts-documentation>
        Options Indexes FollowSymLinks
      </Directory>
        ApJServMount /struts-documentation/servlet /struts-documentation
      <Location "/struts-documentation/WEB-INF/">
        AllowOverride None
        deny from all
      </Location>
    Alias /struts-example "$TOMCAT_HOME/webapps/struts-example"
      <Directory "$TOMCAT_HOME/webapps/struts-example>
        Options Indexes FollowSymLinks
      </Directory>
        ApJServMount /struts-example/servlet /struts-example
      <Location "/struts-example/WEB-INF/">
        AllowOverride None
        deny from all
      </Location>
    
    • The generated file above does not know anything about extension mappings defined in a web.xml file, so the "*.do" URIs that go to the controller servlet will not be recognized. To fix this, add the following line to the saved version of "tomcat-apache.conf", after the corresponding line for the .jsp extension:
      AddHandler jserv-servlet .do
    • Ensure that the saved version of "tomcat-apache.conf" is referenced in your Apache "httpd.conf" configuration file. A typical use would have the following line at the bottom of "httpd.conf":
      Include /usr/local/apache/conf/tomcat-apache.conf
    • In order to recognize "index.jsp" as a default page for web applications, search in your "httpd.conf" for a "DirectoryIndex" directive. If you have one, add "index.jsp" to the end of the list, so that it might look like this:
      DirectoryIndex index.html index.jsp
      If you do not have such an entry, add one like this:
      DirectoryIndex index.jsp
    • Restart Apache to make it aware of the new applications. You should now be able to access the applications from a browser like this:
      http://localhost/struts-documentation
      http://localhost/struts-example

    • Author: Craig R. McClanahan

    Back to Installation

    libstruts1.2-java-1.2.9/xdocs/userGuide/installation-ubs72.xml0000644000175000017500000000460710404045212024722 0ustar arnaudarnaud00000000000000 Mike Schachter The Struts Framework Project - Installation - Bluestone UBS 7.2

    Bluestone Universal Business Server 7.2

    • You need UBS version 7.2 to run war file applications. The UBS 7.2.2 evaluation is located here. If you're using version 7.2.1, you need to download the WAR file patch, located in the product enhancement section of Bluestone's website here
    • After installation of the correct version and/or patch of UBS 7.2, you need to modify your apserver.txt file to point to the correct directory for your war file applications. Look for the section that says something similar to the following:
        [SaServletEngine.class]
        session_affinity=1
        type=1
        program=/SaServletEngine.class
        file_path=f:\webapps
        host=localhost:20000
      
    • Use the directory specified by the "file_path" variable, or modify it to point to your own custom webapp directory. Copy the "struts-documention.war" and "struts-example.war" files into that webapp directory, and start the UBS (read documentation distributed with UBS for information on how to start it if necessary). Your webapps are now accessible from the following URL:

      http://localhost/<PLUGIN>/SaServletEngine.class/struts-example/
      http://localhost/<PLUGIN>/SaServletEngine.class/struts-documentation/

    • Note: "<PLUGIN>" represents the plugin you are using for your specific webserver. For Apache on Windows, it might be "cgi-bin/SaCGI.exe", for IIS on Windows, it might be "scripts/SaCGI.exe" or "scripts/ISAPI.dll". Consult the UBS documentation for more information.

    • Author: Mike Schachter

    Back to Installation

    libstruts1.2-java-1.2.9/xdocs/userGuide/installation-was352-x.xml0000644000175000017500000001015210404045216025245 0ustar arnaudarnaud00000000000000 Chris Assenza The Struts Framework Project - Installation - WebSphere 3.5.2

    WebSphere Application Server 3.5 and the Example Application

    Server: Windows 2000 Server with WebSphere 3.5.3 Advanced

    1. Start up the adminserver.
    2. Start up Admin Console.
    3. Use the Convert War file task to convert the struts-example.war from the struts-b1 distrib as-is.
    4. Convert to the default_server, default servlet engine and standard install directory (c:\websphere\appserver\hosts\default_host).
    5. Create a WEB-INF directory in the servlets dir and copy struts-config.xml, database.xml AND web.xml into it (Keep WEB-INF with all the TLD's under web - both WEB-INF directories must be present).
    6. Copy jaxp 1.0.1's (NOT 1.1.1's) jaxp.jar and parser.jar to the servlets directory of the strut-example webapp.
    7. In the servlets directory, open struts.jar with WinZip. Extract the three DTD's (struts-config_1_0.dtd, web-app_2_2.dtd and web-app_2_3.dtd) into the servlets directory making sure you use folder names (so the files extract to servlets/org/apache/struts/resources).
    8. Click on struts-example in the Admin Console under Default Server/Default Servlet Engine and click the advanced tab on the right hand side of the screen.
    9. Down where it says Default Error Page, enter /ErrorReporter and then click Apply.
    10. Start the Default Server via the Admin Console. You should see a whole bunch of ActionServlet messages in the default_host_stdout.log file with no exceptions.
    11. Via a browser accessed the app using http://localhost/struts-example/index.jsp.
    12. If it returns "Application not Available" then go back to the Admin Console, right-click on struts-example and select Restart WebApp.
    13. Once it reports success, go back to the URL above and try again - it should work flawlessly.

    For whatever reason, some installations do not like XML files that reference PUBLIC DTD's - if in looking at the default_host_stdout.log file you see errors about invalid public URL references during DTD registrations, or if your pages say "cannot find //logon or //saveRegistration (ie. action mappings) then do the following:

    1. Stop Default Server
    2. Go to servlets\WEB-INF\ and edit web.xml and struts_config.xml.
    3. In the DOCTYPE declaration, change the word PUBLIC to SYSTEM and completely remove the line that reads "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" from web.xml and remove "-//Apache Software Foundation//DTD Struts Configuration 1.0//EN" from struts-config.xml.
    4. Save these changes and go back to step 10 above.

    Just as a troubleshooting guide -

    If you are getting errors like "Cannot find ActionMappings, etc..." or "Cannot find key org.apache.struts.MESSAGE" then your application is most likely still bombing on the struts-config issue that Richard discovered. The above steps SHOULD correct that leaving nothing out. If you are getting 404 errors about //logon or something not found, then you are still having XML config troubles and it is not initializing the Action servlet properly. Follow the steps above in regards to DTD's and it should work.

    As a final thought, I obviously haven't gotten to test too much but I don't believe that there are ANY coding changes that need to be made to the actual struts source. Everything about getting it to work in WebSphere has been a WebSphere configuration issue thus far (and I don't think I'll be having any more).

    If changing the DTD's to SYSTEM, do so ONLY AFTER using the Convert a War util. Ant doesn't seem to like it the other way! :)


    Back to Installation

    libstruts1.2-java-1.2.9/xdocs/userGuide/installation-was352.xml0000644000175000017500000001253410404045204025003 0ustar arnaudarnaud00000000000000 dIon Gillard The Struts Framework Project - Installation - WebSphere 3.5.2

    WebSphere Application Server 3.5 FixPack 2

    • In the steps below, $WAS_HOME refers to the directory in which you have installed WebSphere Application Server, and $STRUTS_HOME is the directory in which you unpacked the Struts binary distribution.
    • WebSphere before 3.5.2 did not support JSP 1.1 and Servlet 2.2, which made it difficult to get Struts functioning without massive code changes. Please upgrade to 3.5.2 (3.5 with FixPack 2) before attempting to use Struts. See http://www.ibm.com/software/webservers/appserv/efix.html for download and install instructions on FixPack 2 for WebSphere 3.5
    • Warning: Struts will not work with WebSphere 3.5.2 out of the box. Fixes expected to be in WebSphere 3.5.3 (not released at time of writing) should correct this. However, you can successfully get WebSphere 3.5.2 working with Struts.
    • Make sure the WebSphere Application Server is started. Under Windows NT/2000, it's the "IBM WS AdminServer" service.
    • Start the WebSphere Administrative Console.
    • Once it's started, select "Convert a War File" from the tasks toolbar option, or from the Console->Tasks menu. This will cause a "Convert War File" Wizard dialog to appear.
    • Select a Servlet Engine to host the web application that will result from converting the War file, e.g. "Default Servlet Engine", by expanding the tree control under Nodes. Press the Next button.
    • Select a Virtual Host to associate the resulting web application with, e.g. "default host". Press the Next button.
    • Press the Browse button and choose the $STRUTS_HOME/webapps/struts-example.war. Press the Next button
    • Select a destination directory for the resulting web application, e.g. $WAS_HOME/hosts/default_host. Press the Next button
    • Enter a "Web Application Web Path", e.g. struts-example, and a "Web Application Name", e.g. struts-example. Press the Finish button.
    • You should, after a lengthy pause, get a message box with the text Command "convert war file" completed successfully. Press Ok.
    • You now need to add jaxp.jar and a jaxp compatible parser, e.g. parser.jar from JAXP 1.0.1 to the struts-example web application's servlets directory, e.g. $WAS_HOME/AppServer/hosts/default_host/struts-example/servlets
    • At this point, if WAS 3.5.2 correctly implemented Servlet 2.2, all would be fine. However, WAS 3.5.2 returns null for calls to ServletContext.getResource(String) or ServletContext.getResourceAsStream(String). This manifests itself as an exception in the application server stdout log, e.g. default_server_stdout.log.
    • Warning: Don't be fooled by the fact that the web application starts successfully from the Admin Console. It actually doesn't. The Admin Console is lying. If you try to access the webapp e.g. http://localhost/struts-example/ it will fail.
    • At this point, you need to patch the Struts source. There are three places getResourceAsStream is called:
        ResourceTag.doStartTag()
        ActionServlet.initMapping()
        PropertyMessageResources.loadLocale(String)
    

    of these, ActionServlet is the most important.

    • Change the source from
        // Acquire an input stream to our configuration resource
        InputStream input = getServletContext().getResourceAsStream(config);
    

    to

        // Acquire an input stream to our configuration resource
        InputStream input = new
          java.io.FileInputStream(getServletContext().getRealPath(config));
     
    • Make similar changes to the other classes if necessary.
    • Recompile ActionServlet and copy the .class file to
      $WAS_HOME/AppServer/hosts/default_host/struts-example/servlets/
      org/apache/struts/action/ActionServlet.class
    • Another bug with WAS 3.5.2's classloaders is that Class.getResource() wont load a resource from a jar, so you must copy
      $STRUTS_HOME/lib/struts-config_1_0.dtd
      to
      $WAS_HOME/AppServer/hosts/default_host/struts-example/servlets/org/apache/struts/resources/struts-config_1_0.dtd
      or be connected to the Internet to fetch the dtd from the Jakarta web site.
    • Start your webapp in the Admin Console
    • Test the example application by loading the following URL in your browser of choice: http://localhost/struts-example/" >http://localhost/struts-example/

    • Author: dIon Gillard

    Back to Installation

    libstruts1.2-java-1.2.9/xdocs/userGuide/installation-wls5.xml0000644000175000017500000001450410404045212024647 0ustar arnaudarnaud00000000000000 Robert Hayden Wong Kok Kai The Struts Framework Project - Installation - Weblogic 5.1 sp8

    Weblogic 5.1 (service pack 8)

    • Obtain and install the Xerces XML parser (problems have been reported with the Sun reference implementation). Put xerces.jar in your WebLogic system path.
    • Obtain and unpack the Struts binary distribution (this procedure assumes it was extracted to c:\jakarta-struts).
    • Add an entry to weblogic.properties for each of the Struts web applications that you would like to configure. For example, to make the struts-example application available, add the following line to weblogic.properties:
      weblogic.httpd.webApp.strutsexample=
      c:/jakarta-struts/webapps/struts-example.war
    • You do not need to include struts.jar or any of the application specific classes in the WebLogic classpath, since this will be done automatically (unless deploying an unpacked web archive- see below).
    • Start WebLogic server and point your web browser to the struts application. For example, to connect to the example application added in step 3:
      http://localhost:7001/strutsexample
    • This example application depends on the Struts specific resource file ApplicationResources.properties to be present on the classpath. However, WebLogic only extracts *.class files from the archive so this file will not be found, resulting in an error the first time it is needed- something similar to: javax.servlet.ServletException: runtime failure in custom tag 'message'. Steps 6 & 7 will need to be performed for this application, and any other that relies on ApplicationResources.properties.
    • Extract ApplicationResources.properties from the *.war file, and manually copy it to the respective package in the _tmp_war_ directory WebLogic created for this application. Again referring to the struts-example application, this would be:
      c:\jakarta-struts\webapps\WEB-INF\_tmp_war_strutsexample
    • Restart WebLogic. You will now be able to run the application:
      http://localhost:7001/strutsexample

    The above steps should be followed for applications deployed as *.war files. For unpacked web applications, configuration involves adding both struts.jar and /WEB-INF/classes to the WebLogic classpath. For this reason, I would suggest deploying applications as war files to WebLogic. However, the same example application can be successfully deployed in extracted format by modifying weblogic.properties (assuming the war was extracted to directory webapps/struts-example):

    weblogic.httpd.webApp.strutsexample=
    c:/jakarta-struts/webapps/struts-example/

    And starting WebLogic with the updated WebLogic classpath. For example:

    c:\jdk1.3\bin\java -ms16m -mx64m
    -classpath c:\weblogic\lib\weblogic510sp8boot.jar;


    Additional Recommendations

    • Servlet and JSP-Reloading should be turned off. First, you pay a performance penalty. Depending on the number of JSPs, the number of requests and the configured checking interval, the server will slow down. Second, with JSP- and Servlet reloading, one opens the door for various Weblogic classloader problems, that are difficult to diagnose, difficult to handle and often lead to lost HTTP-sessions.
    • Set the name of the sessionid to JSESSIONID, if cookies are used for session tracking and to jsessionid, if sessions are URL-based. (There are additional problems related to URL-based sessions, caused from BEA's way to encode the session id (J2EE-incompatible) as query-param. Especially <bean:include> will not work with URL-based sessions yet. However, using the correct session name solves at least some problems.)
    • Configure the JSP-Servlet registration in weblogic.properties for maximum J2EE-compliance and/or for maximum performance.

    The JSP-Servlet supports some initialization parameters that can be customized to get best performance, maximum compliance or (as shown below) easier debugging:

      weblogic.httpd.initArgs.*.jsp=\
           pageCheckSeconds=-1,\
            setEmptyStrings=false,\
             compileCommand=./_jspCompiler_.cmd,\
                 workingDir=/weblogic/myserver/tmp_classfiles,\
              keepgenerated=true,\
                      debug=true,\
                    verbose=true
    

    In the above example, the batch file (_jspCompiler_.cmd) invokes jikes which results dramatically reduced startup times (jikes is about three times faster than javac.) The batchfile contains only a single line:

    @jikes -g -nowarn %*

    The next configuration could be used when all tests have been done and speed is the major concern ...

      weblogic.httpd.initArgs.*.jsp=\
           pageCheckSeconds=-1,\
            setEmptyStrings=false,\
             compileCommand=./_jspCompiler_.cmd,\
                 workingDir=/weblogic/myserver/tmp_classfiles,\
              keepgenerated=false,\
                      debug=false,\
                    verbose=false
    

    ... together with ...

    @jikes -O -nowarn %*

    Weblogic supports similar settings through <context-params> in web.xml (Please read the latest documentation at the BEA website for details.)

    For additional issues, see also More fixes for WLS 5.1 SP8 from the Struts Developer mailing list


    • Author: Robert Hayden
    • Author: Wong Kok Kai
    • Author: Matthias Kerkhoff

    Back to Installation

    libstruts1.2-java-1.2.9/xdocs/userGuide/installation.xml0000644000175000017500000005171210404045234023765 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Mike Schachter Ted Husted Martin Cooper Chris Assenza dIon Gillard Eric Wu John Rousseau John Ueltzhoeffer Mark Budai Paul Runyan Robert Hayden Stanley Santiago Wong Kok Kai Rob Leland John Berry The Struts Framework Project - Installation (1.1)

    The Struts binary distribution needs three other software packages installed to operate. You may already have these installed on your system. To build Struts from source you may need to acquire and install several others. The complete list is as follows:

    • Java Development Kit - You must download and install a Java2 (version 1.2 or later) Java Development Kit implementation for your operating system platform. A good starting point for locating Java Development Kit distributions is http://java.sun.com/j2se. To build Struts, Java 1.4.2 or later is suggested.
    • Servlet Container - You must download and install a servlet container that is compatible with the Servlet API Specification, version 2.2 or later, and the JavaServer Pages (JSP) Specification, version 1.1 or later. One popular choice is to download Apache's Tomcat (version 3.1 or later required, version 3.3 or later recommended).
    • XML Parser - Struts requires the presence of an XML parser that is compatible with the Java API for XML Parsing (JAXP) specification, 1.1 or later. This is bundled with J2SE 1.4 and later. (For earlier versions of Java, the easiest way to obtain JAXP is probably by downloading the Web Services Developers Kit (1.1 or later!). See the Sun JAXP FAQ for more information.) In Struts-based web applications, you may replace the reference implementation classes with any other JAXP compliant parser, such as Xerces. See detailed instructions related to the parser in the instructions for building and installing Struts, below.
    • Ant Build System - If you are building Struts from the source distribution, you must download and install version 1.5.4 (or later) of the Ant build system. This package is also strongly recommended for use in developing your own web applications based on Struts.
      • Make sure that the "ant" and "ant.bat" scripts are executable, by adding the $ANT_HOME/bin directory to your PATH environment variable.
    • Servlet API Classes - In order to compile Struts itself, or applications that use Struts, you will need a servlet.jar file containing the Servlet and JSP API classes. Most servlet containers include this JAR file. Otherwise, you can get the Servlet API classes distribution from here.
    • JDBC 2.0 Optional Package Classes - Struts supports an optional implementation of javax.sql.DataSource, so it requires the API classes to be compiled. They can be downloaded from http://java.sun.com/products/jdbc/download.html.
    • Jakarta Commons Packages - Struts utilizes several packages from the Jakarta Commons Project. These are the packages which must be available if you wish to build Struts from source:
      • Beanutils (Version 1.6.1 or later)
      • Collections (Version 2.1 or later)
      • Digester (Version 1.5 or later)
      • FileUpload (Version 1.0 or later)
      • Lang (Version 1.0.1 or later)
      • Logging (Version 1.0.3 or later when it is available)
      • Struts-Legacy (Version 1.0 or later)
      • Validator (Version 1.0.2 or later)
      For your convenience, the requisite JARs are provided as a single download under the lib sub-directory with each release and beta distribution. Please note that the minimum requirements may change between releases and betas, and some JARs may need to be updated to use the latest Nightly Build.
    • Jakarta ORO - Apache Jakarta ORO version 2.0.6 (or later) is required to build Struts from source.
    • Xalan XSLT Processor - If you are building Struts from the source distribution, you will need a version of Xalan to perform XSLT transformations. If you are using the JAXP/1.1 XML parser, you should use the version of xalan.jar shipped with it. Otherwise, download and install version 1.2 of Xalan from here.
    • Cactus Testing - If you plan on testing the Struts applications in this distribution, you must download and install version 1.3 of the Cactus test framework. This package is also recommended for use in developing your own unit tests for your web applications based on Struts.

    First, download a binary distribution of Struts by following the instructions here. Then, make sure you have downloaded and installed the prerequisite software packages described above.

    Unpack the Struts binary distribution into a convenient directory. (If you build Struts from the source distribution, the result of the build will already be an unpacked binary distribution for you). The distribution consists of the following contents:

    • lib/commons-*.jar - These JAR files contain packages from the Jakarta Commons project that are utilized within Struts itself. When you assemble a Struts-based application, you will need to copy these files to the WEB-INF/lib directory.
    • lib/jdbc2_0-stdext.jar - The JDBC 2.0 Optional Package API classes. You will need to copy this file to your WEB-INF/lib directory if you are utilizing the data sources support provided by Struts.
    • lib/struts.jar - This JAR file contains all of the Java classes included in Struts. It should be copied into the WEB-INF/lib directory of your web application. WARNING - If you are going to be hosting multiple Struts based applications on the same servlet container, you will be tempted to place the struts.jar file into the shared repository supported by your container. Be advised that this will like cause you to encounter ClassNotFoundException problems unless all of your application classes are stored in the shared repository.
    • lib/struts-*.tld - These are the "tag library descriptor" files that describe the custom tags in the various Struts tag libraries. They should be copied into the WEB-INF directory of your web application. (Servlet 2.3 can omit this step if the standard uri is referenced.)
    • webapps/struts-blank.war - This is a simple "web application archive" file containing a basic starting point for building your own Struts-based applications.
    • webapps/struts-documentation.war - This is a "web application archive" file containing all of the Struts documentation found on the Struts web site (including these pages). You can install this web application on any servlet container compatible with Servlet API 2.2 or later.
    • webapps/struts-example.war - This is an example web application that uses a large percentage of Struts features. You can install this web application on any servlet container compatible with the Servlet 2.2 (or later) and JSP 1.1 (or later) specifications. If an XML parser is not made available to web applications by your container, you will need to add one to the WEB-INF/lib directory of this web application.
    • webapps/struts-exercise-taglib.war - This web application contains test pages for the various custom tags supported by Struts. It is primarily of use to developers who are enhancing the Struts custom tag libraries, but may also be useful as simple examples of the usage of various Struts tags.
    • webapps/struts-upload.war - This web application is a quick example of uploading files using the Struts framework.
    • webapps/struts-validator.war - This web application is an example of using the validator framework, using both the server-side and optional client-side validation.
    • webapps/tiles-documentation.war - This web application documents how to use tiles, and was developed using tiles.

    To use Struts in your own application, you will need to follow these steps:

    • Copy the files lib/commons-*.jar from the Struts distribution into the WEB-INF/lib directory of your web application.
    • Copy the file lib/struts.jar from the Struts distribution into the WEB-INF/lib directory of your web application.
    • Copy the all of the files that match lib/struts-*.tld from the Struts distribution into the WEB-INF directory of your web application.
    • Modify the WEB-INF/web.xml file for your web application to include a <servlet> element to define the controller servlet, and a <servlet-mapping> element to establish which request URIs are mapped to this servlet. Use the WEB-INF/web.xml file from the Struts example application for a detailed example of the required syntax.
    • Modify the WEB-INF/web.xml file of your web application to include the following tag library declarations (Servlet 2.3 can omit this step if the standard uri is referenced):
    <taglib>
      <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
      <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
    </taglib>
    
    <taglib>
      <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
      <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
    </taglib>
    
    <taglib>
      <taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
      <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
    </taglib>
    
    • Create a file WEB-INF/struts-config.xml that defines the action mappings and other characteristics of your specific application. You can use the struts-config.xml file from the Struts example application for a detailed example of the required syntax.
    • At the top of each JSP page that will use the Struts custom tags, add line(s) declaring the Struts custom tag libraries used on this particular page, like this:
    <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
    <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
    <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
    
    • When compiling the Java classes that comprise your application, be sure to include the struts.jar and commons-*.jar files (copied earlier) on the CLASSPATH that is submitted to the compiler.

    For most containers, you need only to:

    • Copy the WAR files in your Struts /webapp directory to your containers webapps directory.
    • In some cases, you may need to restart your container if it is running.

    Running Struts Applications Under A Security Manager

    Many application servers execute web applications under the control of a Java security manager, with restricted permissions on what classes in the web application can do. If you utilize form beans with mapped properties, you may encounter security exceptions unless you add the following permission to the set of permissions granted to your Struts application's codebase:

      permission java.lang.RuntimePermission "accessDeclaredMembers";
    

    Consult the documentation on your application server for more information about how to configure additional security manager permissions.

    Installing Struts on Various Containers

    First, download a source distribution of Struts by following the instructions here. Then, make sure you have downloaded and installed all of the prerequisite software packages described above.

    To build Struts, you will need to customize the build process to the details of your development environment as follows:

    • The Struts source distribution uses a file named build.properties (in the top-level directory of the distribution) to identify the location of external components that Struts depends on.
    • There is no build.properties file included with the source distribution. However, there is an example file named build.properties.example that you can copy to build.properties and then customize.
    • The properties you must configure in build.properties are:
      • catalina.home - Pathname to the directory of your binary distribution of Tomcat 4.0 (required only if you wish to use the deploy.catalina target).
      • commons-beanutils.jar - Pathname of the BeanUtils package JAR file from the Jakarta Commons project.
      • commons-collections.jar - Pathname of the Collections package JAR file from the Jakarta Commons project.
      • commons-digester.jar - Pathname of the Digester package JAR file from the Jakarta Commons project.
      • commons-fileupload.jar - Pathname of the Fileupload package JAR file from the Jakarta Commons project.
      • commons-lang.jar - Pathname of the Lang package JAR file from the Jakarta Commons project.
      • commons-logging.jar - Pathname of the Logging package JAR file from the Jakarta Commons project.
      • commons-validator.jar - Pathname of the Validator package JAR file from the Jakarta Commons project.
      • servletapi.home - Pathname to the directory of your binary distribution of the Servlet API classes.
      • tomcat.home - Pathname to the directory of your binary distribution of Tomcat 3.2 (required only if you wish to use the deploy.tomcat target).
      • xerces.home - Pathname to the directory of your binary distribution of the Xerces parser, version 1.2 or 1.3 (required only if you wish to use the deploy.catalina target).
    • If you are a Struts developer with write access to the Subversion repository, be sure that you do NOT check in a copy of the build.properties file, since it will be different for each individual developer.

    To build a "distribution" version of Struts, first change your current directory to the directory in which you have unpacked the Struts source distribution, and (if necessary) create or customize the build.properties file as described above. Then, type:

            ant dist
    

    This command will create a binary distribution of Struts, in a directory named dist (relative to where you are compiling from). This directory contains an exact replica of the files included in a binary distribution of Struts, as described in the preceding section.

    IMPORTANT NOTE: The struts.jar, as well as the JAR files from the Jakarta Commons project, must be in your classpath when compiling Struts. The build.xml provided does this automatically. If you use your development machine to test Struts application locally, be sure that the struts.jar is NOT on your classpath when your container is running.

    Next: FAQs and HowTos

    libstruts1.2-java-1.2.9/xdocs/userGuide/introduction.xml0000644000175000017500000005340510404045210024000 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Mike Schachter Larry McCay Ted Husted Martin Cooper Ed Burns Dominique Plante The Struts User's Guide - Introduction

    When Java servlets were first invented, many programmers quickly realized that they were a Good Thing. They were faster and more powerful that standard CGI, portable, and infinitely extensible.

    But writing HTML to send to the browser in endless println() statements was tiresome and problematic. The answer to that was JavaServer Pages, which turned Servlet writing inside-out. Now developers could easily mix HTML with Java code, and have all the advantages of servlets. The sky was the limit!

    Java web applications quickly became "JSP-centric". This in-and-of itself was not a Bad Thing, but it did little to resolve flow control issues and other problems endemic to web applications.

    Another model was clearly needed ...

    Many clever developers realized that JavaServer Pages AND servlets could be used together to deploy web applications. The servlets could help with the control-flow, and the JSPs could focus on the nasty business of writing HTML. In due course, using JSPs and servlets together became known as Model 2 (meaning, presumably, that using JSPs alone was Model 1).

    Of course, there is nothing new under the Sun ... and many have been quick to point out that JSP's Model 2 follows the classic Model-View-Controller design pattern abstracted from the venerable Smalltalk MVC framework. Java Web developers now tend to use the terms Model 2 and MVC interchangeably. In this guide, we use the MVC paradigm to describe the Struts architecture, which might be best termed a Model 2/MVC design.

    The Struts project was launched in May 2000 by Craig R. McClanahan to provide a standard MVC framework to the Java community. In July 2001, Struts 1.0 was released, and IOHO, Java Model 2 development will never be quite the same.

    In the MVC design pattern, application flow is mediated by a central Controller. The Controller delegates requests - in our case, HTTP requests - to an appropriate handler. The handlers are tied to a Model, and each handler acts as an adapter between the request and the Model. The Model represents, or encapsulates, an application's business logic or state. Control is usually then forwarded back through the Controller to the appropriate View. The forwarding can be determined by consulting a set of mappings, usually loaded from a database or configuration file. This provides a loose coupling between the View and Model, which can make applications significantly easier to create and maintain.

    The Model portion of an MVC-based system can be often be divided into two major subsystems -- the internal state of the system and the actions that can be taken to change that state.

    In grammatical terms, we might think about state information as nouns (things) and actions as verbs (changes to the state of those things).

    Many applications represent the internal state of the system as a set of one or more JavaBeans. The bean properties represent the details of the system' state. Depending on your application's complexity, these beans may be self contained (and know how to persist their own state), or they may be facades that know how to retrieve the system's state from another component. This component may be a database, a search engine, an Entity Enterprise JavaBean, a LDAP server, or something else entirely.

    Large-scale applications will often represent the set of possible business operations as methods that can be called on the bean or beans maintaining the state information. For example, you might have a shopping cart bean, stored in session scope for each current user, with properties that represent the current set of items that the user has decided to purchase. This bean might also have a checkOut() method that authorizes the user's credit card and sends the order to the warehouse to be picked and shipped. Other systems will represent the available operations separately, perhaps as Session Enterprise JavaBeans (Session EJBs).

    In a smaller scale application, on the other hand, the available operations might be embedded within the Action classes that are part of the Struts control layer. This can be useful when the logic is very simple or where reuse of the business logic in other environments is not contemplated.

    The Struts framework architecture is flexible enough to support most any approach to accessing the Model, but we strongly recommend that you separate the business logic ("how it's done") from the role that Action classes play ("what to do"). 'nuff said.

    For more about adapting your application's Model to Struts, see the Building Model Components chapter.

    The View portion of a Struts-based application is most often constructed using JavaServer Pages (JSP) technology. JSP pages can contain static HTML (or XML) text called "template text", plus the ability to insert dynamic content based on the interpretation (at page request time) of special action tags. The JSP environment includes a set of standard action tags, such as <jsp:useBean> whose purpose is described in the JavaServer Pages Specification. In addition to the built-in actions, there is a standard facility to define your own tags, which are organized into "custom tag libraries."

    Struts includes a set of custom tag libraries that facilitate creating user interfaces that are fully internationalized, and that interact gracefully with ActionForm beans that are part of the Model portion of the system.

    For more about the Struts taglibs and using presentation pages with the framework, see the "Building View Components" chapter. Additional documentation regarding the taglibs is also available in the Developer Guides (see menu).

    The Controller portion of the application is focused on receiving requests from the client (typically a user running a web browser), deciding what business logic function is to be performed, and then delegating responsibility for producing the next phase of the user interface to an appropriate View component. In Struts, the primary component of the Controller is a servlet of class ActionServlet. This servlet is configured by defining a set of ActionMappings. An ActionMapping defines a path that is matched against the request URI of the incoming request, and usually specifies the fully qualified class name of an Action class. All Actions are subclassed from org.apache.struts.action.Action. Actions encapsulate the business logic, interpret the outcome, and ultimately dispatch control to the appropriate View component to create the response.

    Struts also supports the ability to use ActionMapping classes that have additional properties beyond the standard ones required to operate the framework. This allows you to store additional information specific to your application, but still utilize the remaining features of the framework. In addition, Struts lets you define logical "names" to which control should be forwarded so that an action method can ask for the "Main Menu" page (for example), without knowing what the actual name of the corresponding JSP page is. These features greatly assist you in separating the control logic (what to do) with the view logic (how it's rendered).

    For more about the Struts control layer, see the Building Controller Components chapter.

    The Struts framework provides several components that make up the Control layer of a MVC-style application. These include a controller servlet, developer-defined request handlers, and several supporting objects.

    The Struts custom tag libraries provide direct support for the View layer of a MVC application. Some of these access the control-layer objects. Others are generic tags found convenient when writing applications. Other taglibs, including JSTL, can also be used with Struts. Other presentation technologies, like Velocity Templates and XSLT can also be used with Struts.

    The Model layer in a MVC application is often project-specific. Struts is designed to make it easy to access the business-end of your application, but leaves that part of the programming to other products, like JDBC, Enterprise Java Beans, Object Relational Bridge, or Simper, to name a few.

    Let's step through how this all fits together.

    When initialized, the controller parses a configuration file (struts-config.xml) and uses it to deploy other control layer objects. Together, these objects form the Struts Configuration. The Struts Configuration defines (among other things) the ActionMappings [org.apache.struts.action.ActionMappings] for an application.

    The Struts controller servlet consults the ActionMappings as it routes HTTP requests to other components in the framework. Requests may be forwarded to JavaServer Pages or Action [org.apache.struts.action.Action] subclasses provided by the Struts developer. Often, a request is first forwarded to an Action and then to a JSP (or other presentation page). The mappings help the controller turn HTTP requests into application actions.

    An individual ActionMapping [org.apache.struts.action.ActionMapping] will usually contain a number of properties including:

    • a request path (or "URI"),
    • the object type (Action subclass) to act upon the request, and
    • other properties as needed.

    The Action object can handle the request and respond to the client (usually a Web browser) or indicate that control should be forwarded elsewhere. For example, if a login succeeds, a login action may wish to forward the request onto the mainMenu page.

    Action objects have access to the application's controller servlet, and so have access to that servlet's methods. When forwarding control, an Action object can indirectly forward one or more shared objects, including JavaBeans, by placing them in one of the standard contexts shared by Java Servlets.

    For example, an Action object can create a shopping cart bean, add an item to the cart, place the bean in the session context, and then forward control to another mapping. That mapping may use a JavaServer Page to display the contents of the user's cart. Since each client has their own session, they will each also have their own shopping cart.

    In a Struts application, most of the business logic can be represented using JavaBeans. An Action can call the properties of a JavaBean without knowing how it actually works. This encapsulates the business logic, so that the Action can focus on error handling and where to forward control.

    JavaBeans can also be used to manage input forms. A key problem in designing Web applications is retaining and validating what a user has entered between requests. With Struts, you can define your own set of input bean classes, by subclassing ActionForm [org.apache.struts.action.ActionForm]. The ActionForm class makes it easy to store and validate the data for your application's input forms. The ActionForm bean is automatically saved in one of the standard, shared context collections, so that it can be used by other objects, like an Action object or another JSP.

    The form bean can be used by a JSP to collect data from the user ... by an Action object to validate the user-entered data ... and then by the JSP again to re-populate the form fields. In the case of validation errors, Struts has a shared mechanism for raising and displaying error messages.

    Another element of the Struts Configuration are the ActionFormBeans [org.apache.struts.action.ActionFormBeans]. This is a collection of descriptor objects that are used to create instances of the ActionForm objects at runtime. When a mapping needs an ActionForm, the servlet looks up the form-bean descriptor by name and uses it to create an ActionForm instance of the specified type.

    Here is the sequence of events that occur when a request calls for an mapping that uses an ActionForm:

    • The controller servlet either retrieves or creates the ActionForm bean instance.
    • The controller servlet passes the bean to the Action object.
    • If the request is being used to submit an input page, the Action object can examine the data. If necessary, the data can be sent back to the input form along with a list of messages to display on the page. Otherwise the data can be passed along to the business tier.
    • If the request is being used to create an input page, the Action object can populate the bean with any data that the input page might need.

    The Struts framework includes custom tags that can automatically populate fields from a JavaBean. All most JavaServer Pages really need to know about the rest of the framework is the field names to use and where to submit the form.

    Other Struts tags can automatically output messages queued by an Action or ActionForm and simply need to be integrated into the page's markup. The messages are designed for localization and will render the best available message for a user's locale.

    The Struts framework and its custom tag libraries were designed from the ground-up to support the internationalization features built into the Java platform. All the field labels and messages can be retrieved from a message resource. To provide messages for another language, simply add another file to the resource bundle.

    Internationalism aside, other benefits to the message resources approach are consistent labeling between forms, and the ability to review all labels and messages from a central location.

    For the simplest applications, an Action object may sometimes handle the business logic associated with a request. However, in most cases, an Action object should invoke another object, usually a JavaBean, to perform the actual business logic. This lets the Action focus on error handling and control flow, rather than business logic. To allow reuse on other platforms, business-logic JavaBeans should not refer to any Web application objects. The Action object should translate needed details from the HTTP request and pass those along to the business-logic beans as regular Java variables.

    In a database application, for example:

    • A business-logic bean will connect to and query the database,
    • The business-logic bean returns the result to the Action,
    • The Action stores the result in a form bean in the request,
    • The JavaServer Page displays the result in a HTML form.

    Neither the Action nor the JSP need to know (or care) from where the result comes. They just need to know how to package and display it.

    Other chapters in this document cover the various Struts components in greater detail. The Struts release also includes several Developer Guides covering various aspects of the frameworks, along with sample applications, the standard Javadoc API, and, of course, the complete source code!

    Struts is distributed under the Apache Software Foundation license. The code is copyrighted, but is free to use in any application. See the ASF license for specifics.

    Next: Building Model Components

    libstruts1.2-java-1.2.9/xdocs/userGuide/preface.xml0000644000175000017500000012004010404045250022656 0ustar arnaudarnaud00000000000000 Ted Husted Ed Burns Craig R. McClanahan The Struts User's Guide - Preface: Core Technologies

    This User Guide is written for active web developers and assumes a working knowledge about how Java web applications are built. Before getting started, you should understand the basics of several core technologies:

    This chapter briefly defines each of these technologies but does not describe them in detail. For your convenience, links to further information are provided if you would like to learn more about a technology.

    If you are familiar with Java, but not these technologies, the best overall starting point is The Java Web Services Tutorial. This document is also available for download in PDF format.

    If you've created web applications for other platforms, you may be able to follow along and visit the other references as needed. The core technologies used by Struts are also used by most other Java web development products, so the background information will be useful in any Java project.

    If you are not familiar with the Java language generally, then the best starting point is The Java Tutorial. This overlaps with the Java Web Services Tutorial in some places, but the two work well together.

    For more about building Java application in general, see the New to Java tutorial.

    The World Wide Web was built over the Hypertext Transfer Protocol (HTTP) and the Hypertext Markup Language (HTML). A User Agent, like a web browser, uses HTTP to request a HTML document. The browser then formats and displays the document to its user. HTTP is used to transport more than HTML, but HTML is the lingua franca of the Web and web applications.

    While building web applications, some Java developers will write their own HTML. Others leave that responsibility to the page designers.

    For more about HTTP, HTML, and User Agents, see:

    A very important part of HTTP for the web developer is the request/response cycle. To use HTTP you have to make a request. A HTTP server, like a web server, is then obliged to respond. When you build your web application, you design it to react to a HTTP request by returning a HTTP response. Frameworks like Struts abstract much of these nuts and bolts, but it is important to understand what is happening behind the scenes.

    If you are not familiar with the HTTP request/response cycle, we strongly recommend the HTTP Overview in the Java Web Services Tutorial.

    Struts is written in the popular and versatile Java programming language. Java is an object-orientated language, and Struts makes good use of many object-orientated techniques. In addition, Java natively supports the concept of threads, which allows more than one task to be performed at the same time. A good understanding of Java, and especially object-orientated programming (OOP) and threading, will help you get the most out of Struts and this User Guide.

    For more about Java and threads, see

    Even if you have worked with Java and OOP before, it can also help to be aware of the programming challenges specific to creating and using application frameworks. For more about application frameworks, see the classic white papers

    These papers can be especially helpful if you are fact-finding or reviewing server-side frameworks.

    Like many Java applications, most of the Struts objects are designed as JavaBeans. Following the JavaBean design patterns makes the Struts classes easier to use -- both by Java developers and by Java development tools.

    Although JavaBeans were first created for visual elements, these object design patterns have been found to be useful as the basis for any reusable component, like those used by the Struts framework.

    For more about JavaBeans, see:

    Reflection is the process of determining which member fields and methods are available on an object. Introspection is a specialized form of reflection used by the JavaBean API. Using Introspection, we can determine which methods of a JavaBean are intended to be accessed by other objects. (The getters and the setters, for example.)

    The Struts framework uses Introspection to convert HTTP parameters into JavaBean properties and to populate HTML fields from JavaBean properties. This technique makes it easy to "roundtrip" properties between HTML forms and JavaBeans.

    For more about Reflection and Introspection, see

    JavaBeans store data as properties and may act on that data through other methods. JavaBeans are flexible and powerful objects but are not the only object that programmers use to store data. Another popular object is the Map [java.util.Map]. A Map is a simple collection of name and value pairs. Maps are often used "behind the scenes" as a flexible way to store dynamic data.

    DynaBeans combine the extensibility of JavaBeans with the flexibility of a Map. Defining even the simplest JavaBean requires defining a new class and coding a field and two methods for each property. The properties of a DynaBean can be configured via an XML descriptor. The virtual properties of a DynaBean can't be called by standard Java methods, but work well with components that rely on reflection and introspection.

    In a Struts application, you can use DynaBeans to describe your HTML forms. This strategy can avoid creating a formal JavaBean subclass to store a few simple properties.

    For more about DynaBeans, see

    Java applications, including web applications, are often configured using Properties files. Properties files are the basis for the ResourceBundles that Struts uses to provide message resources to an application.

    For more about Properties files, see:

    Java ResourceBundles use one or more Properties files to provide internationalized messages to users based their Locale. Support for localizing an application was built into Struts from the ground-up.

    For more about localization and ResourceBundles, see

    Since Java is an object-orientated language, the Java Servlet platform strives to cast HTTP into an object-orientated form. This strategy makes it easier for Java developers to concentrate on what they need their application to do -- rather than the mechanics of HTTP.

    HTTP provides a standard mechanism for extending servers called the Common Gateway Interface, or CGI. The server can pass a request to a CGI-aware program, and the program will pass back a response. Likewise, a Java-aware server can pass a request to a servlet container. The container can fulfill the request or it can pass the request back to the HTTP server. The container decides whether it can handle the request by checking its list of servlets. If there is a servlet registered for the request, the container passes the request to the servlet.

    When a request comes in, the container checks to see if there is a servlet registered for that request. If there is a match, the request is given to the servlet. If not, the request is returned to the HTTP server.

    It's the container's job to manages the servlet lifecycle. The container creates the servlets, invokes the servlets, and ultimately disposes the servlets.

    A servlet is generally a subclass of javax.servlet.http.HttpServlet. A servlet must implement four methods, which are invoked by the container as needed:

    • public void init(ServletConfig config) - Called by the servlet container when the servlet instance is first created, and before any request is processed.
    • public void doGet(HttpServletRequest request, HttpServletResponse response) - Called to process a specific request received using the HTTP GET protocol, which generates a corresponding dynamic response.
    • public void doPost(HttpServletRequest request, HttpServletResponse response) - Called to process a specific request received using the HTTP POST protocol, which generates a corresponding dynamic response.
    • public void destroy() - Called by the servlet container when it takes this servlet instance out of service, such as when a web application is being undeployed or when the entire container is being shut down.

    Struts provides a ready-to-use servlet for your application [org.apache.struts.action.ActionServlet]. As a Struts developer, you can then just write objects that the Struts ActionServlet calls when needed. But it is still helpful to understand the basics of what servlets are, and the role they play in a Java web application.

    For more about Java Servlets, see:

    To boost performance, the container can multi-thread servlets. Only one instance of a particular servlet is created, and each request for that servlet passes through the same object. This strategy helps the container make the best use of available resources. The tradeoff is that the servlet's doGet() and doPost() methods must be programmed in a thread-safe manner.

    For more about servlets and thread-safety, see:

    The ServletContext interface [javax.servlet.ServletContext] defines a servlet's view of the web application within which the servlet is running. It is accessible in a servlet via the getServletConfig() method, and in a JSP page as the application implicit variable. Servlet contexts provide several APIs that are very useful in building Struts based web applications:

    • Access To Web Application Resources - A servlet can access static resource files within the web application using the getResource() and getResourceAsStream() methods.
    • Servlet Context Attributes - The context makes available a storage place for Java objects, identified by string-valued keys. These attributes are global to the entire web application, and may be accessed by a servlet using the getAttribute(), getAttributeNames(), removeAttribute(), and setAttribute() methods. From a JSP page, servlet context attributes are also known as "application scope beans".

    For more about the servlet context, see:

    Each request processed by a servlet is represented by a Java interface, normally a HttpServletRequest [javax.servlet.http.HttpServletRequest]. The request interface provides an object-oriented mechanism to access all of the information that was included in the underlying HTTP request, including:

    • Cookies - The set of cookies included with this request are available via the getCookies() method.
    • Headers - HTTP headers that were included with the request are accessible by name. You can enumerate the names of all included headers.
    • Parameters - Request parameters, including those from the query string portion of the URL and from the embedded content of the request (POST only) are available by name.
    • Request Characteristics - Many other characteristics of the incoming HTTP request, such as the method used (normally GET or POST) the protocol scheme used ("http" or "https"), and similar values.
    • Request URI Information - The original request URI being processed is available via getRequestURI(). In addition, the constituent parts into which the servlet container parses the request URI (contextPath, servletPath, and pathInfo) are available separately.
    • User Information - If you are using Container Managed Security, you can ask for the username of the authenticated user, retrieve a Principal object representing the current user, and whether the current user is authorized for a specified role.

    In addition, servlet requests support request attributes (from JSP, these are "request scope beans"), analogous to the servlet context attributes described above. Request attributes are often used to communicate state information from a business logic class that generates it to a view component (such as a JSP page) that will use the information to produce the corresponding response.

    The servlet container guarantees that a particular request will be processed by a servlet on a single thread. Therefore, you do not generally have to worry about the thread safety of your access to request properties and attributes.

    For more about the servlet request, see:

    The primary purpose of a servlet is to process an incoming Servlet Request [javax.servlet.http.HttpServletRequest] and convert it into a corresponding response. This is performed by calling appropriate methods on the servlet response [javax.servlet.http.HttpServletResponse] interface. Available methods let you:

    • Set Headers - You can set HTTP headers that will be included in the response. The most important header is the Content-Type header, which tells your client what kind of information is included in the body of this response. This is typically set to text/html for an HTML page, or text/xml for an XML document.
    • Set Cookies - You can add cookies to the current response.
    • Send Error Responses - You can send an HTTP error status (instead of a usual page of content) using sendError().
    • Redirect To Another Resource - You can use the sendRedirect() method to redirect the client to some other URL that you specify.

    An important principle in using the servlet response APIs is that any methods you call to manipulate headers or cookies MUST be performed before the first buffer-full of content has been flushed to the client. The reason for this restriction is that such information is transmitted at the beginning of the HTTP response, so trying things like adding a header after the headers have already been sent will not be effective.

    When you are using presentation pages in a Model 2 application, you will not generally use the servlet response APIs directly. In the case of JavaServerPages, the JSP page compiler in your servlet container will convert your page into a servlet. The JSP servlet renders the response, interspersing dynamic information where you have interposed JSP custom tags.

    Other presentation systems, like Velocity Tools for Struts, may delegate rendering the response to a specialized servlet, but the same pattern holds true. You create a template, and the dynamic response is generated automatically from the template.

    For more about the servlet response, see:

    If you are using a servlet container based on version 2.3 or later of the Servlet Specification (such as Tomcat 4.x), you can take advantage of the new Filter APIs [javax.servlet.Filter] that let you compose a set of components that will process a request or response. Filters are aggregated into a chain in which each filter has a chance to process the request and response before and after it is processed by subsequent filters (and the servlet that is ultimately called).

    The Struts 1.x series (versions 1.0, 1.1, and so forth) require only version 2.2 or later of the Servlet Specification to be implemented by your servlet container, so Struts does not itself utilize Filters at this time. The next generation of Struts (the 2.x series) will be based on Servlet 2.3 or later. It is likely that the Struts 2.x release series will utilize filters.

    For more about filters, see:

    One of the key characteristics of HTTP is that it is stateless. In other words, there is nothing built in to HTTP that identifies a subsequent request from the same user as being related to a previous request from that user. This makes building an application that wants to engage in a conversation with the user over several requests to be somewhat difficult.

    To alleviate this difficulty, the servlet API provides a programmatic concept called a session, represented as an object that implements the javax.servlet.http.HttpSession interface. The servlet container will use one of two techniques (cookies or URL rewriting) to ensure that the next request from the same user will include the session id for this session, so that state information saved in the session can be associated with multiple requests. This state information is stored in session attributes (in JSP, they are known as "session scope beans").

    To avoid occupying resources forever when a user fails to complete an interaction, sessions have a configurable timeout interval. If the time gap between two requests exceeds this interval, the session will be timed out, and all session attributes removed. You define a default session timeout in your web application deployment descriptor, and you can dynamically change it for a particular session by calling the setMaxInactiveInterval() method.

    Unlike requests, you need to be concerned about thread safety on your session attributes (the methods these beans provide, not the getAttribute() and setAttribute() methods of the session itself). It is surprisingly easy for there to be multiple simultaneous requests from the same user, which will therefore access the same session.

    Another important consideration is that session attributes occupy memory in your server in between requests. This can have an impact on the number of simultaneous users that your application can support. If your application requirements include very large numbers of simultaneous users, you will likely want to minimize your use of session attributes, in an effort to control the overall amount of memory required to support your application.

    For more about sessions, see:

    The Java Servlet specification extends the HTTP request/response cycle by allowing the request to be dispatched, or forwarded, between resources. Struts uses this feature to pass a request through specialized components, each handling one aspect of the response. In the normal course, a request may pass through a controller object, a model object, and finally to a view object as part of a single request/response cycle.

    Just as a HTTP server can be used to host several distinct web sites, a servlet container can be used to host more than one web application. The Java servlet platform provides a well-defined mechanism for organizing and deploying web applications. Each application runs in its own namespace so that they can be developed and deployed separately. A web application can be assembled into a Web Application Archive, or WAR file. The single WAR can be uploaded to the server and automatically deployed.

    For more about web applications, see:

    Most aspects of an application's lifecycle are configured through an XML document called the Web application deployment descriptor. The schema of the descriptor, or web.xml, is given by the Java servlet specification.

    For more about the web.xml and application lifecycle events, see:

    One detail that can be configured in the Web application deployment descriptor is container-managed security. Declarative security can be used to protect requests for URIs that match given patterns. Pragmatic security can be used to fine-tune security make authorization decisions based on the time of day, the parameters of a call, or the internal state of a Web component. It can also be used to restrict authentication based on information in a database.

    For more information about container-managed security, see:

    JavaServer Pages (JSPs) are "inside-out servlets" that make it easier to create and maintain dynamic web pages. Instead of putting what you want to write to the HTTP response inside of a Java print statement, everything in a JavaServer Page is written to the response, except what is placed within special Java statements.

    With JavaServer Pages you can start by writing the page in standard HTML and then add the dynamic features using statements in the Java language or by using JSP tags. The Struts distribution includes several JSP tags that make it easy to access the framework's features from a JavaServer Page.

    For more about JavaServerPages and Custom JSP Tag Libraries see

    Many times, JSP tags work hand-in-hand with JavaBeans. The application sends a JavaBean to the JSP, and the JSP tag uses the bean to customize the page for the instant user. For more, see JavaBeans Components in JSP Pages in the Java Web Services Tutorial.

    Struts also works well with the new JavaServer Pages Standard Tag Library (JSTL) and taglibs from other sources, like JSP Tags and Jakarta Taglibs.

    One of the contributed libraries available for Struts is Struts-EL. This taglib is specifically designed to work well with JSTL. In particular, it uses the same "expression language" engine for evaluating tag attribute values as JSTL. This is in contrast to the original Struts tag library, which can only use "rtexprvalue"s (runtime scriptlet expressions) for dynamic attribute values.

    There are also toolkits available that make Struts easy to use with XSLT and Velocity Templates.

    The newest star on the Java horizon is Java Server Faces. JavaServer Faces technology simplifies building user interfaces for JavaServer applications, both for the web and for the desktop. The JSF specification is still under development, although an early-release reference implementation is available through the Java Web Services Developer Pack. Likewise, an early-release JavaServer Faces taglib for Struts, Struts-Faces, is also in early release and available through the nightly build.

    Java Server Faces is very compatible with Struts. Additional Struts/JSF integration tools are sure to appear as the specification is finalized and comes into widespread use.

    For more about JSTL and JavaServer Faces see

    The features provided by the Struts framework relies on a number of objects that are usually deployed using a configuration file written in Extensible Markup Language. XML is also used to configure Java web applications; so, this is yet another familiar approach.

    For more about XML configuration files and Java web applications, see

    For more about how XML is used with Java applications generally, see Java API for XML Processing in the Java Web Services Tutorial. While the framework makes good use of this API internally, it is not something most Struts developers would use when writing their own applications.

    When Java applications use XML configuration files, the elements are most often used as descriptors. The application does not use the XML elements directly. The elements are used to create and configure (or deploy) Java objects.

    The Java Servlet platform uses an XML configuration file to deploy servlets (among other things). Likewise, Struts uses an XML configuration file to deploy objects used by the framework.

    Struts provides the control layer for a web application. Developers can use this layer with other standard technologies to provide the data access and presentation layers. Some popular Data access technologies include:

    Presentation layer technologies include:

    While Struts can work with any approach to user authentication and authorization, Struts 1.1 and later offers direct support for the standard Java Authentication and Authorization Service (JAAS). You can now specify security roles on an action-by-action basis.

    For more about JAAS, see the Javasoft product page and the Web Application Security chapter of the Java Web Services Tutorial.

    Next: Introduction

    libstruts1.2-java-1.2.9/xdocs/userGuide/project.xml0000644000175000017500000000404510404045236022731 0ustar arnaudarnaud00000000000000 Getting Started libstruts1.2-java-1.2.9/xdocs/userGuide/release-notes-1.0-b1.xml0000644000175000017500000005755510404045232024637 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Martin Cooper Struts Release Notes (Version 1.0-beta-1)

    This document contains the release notes for Version 1.0-beta-1 of the Struts Framework. The following sections cover New Features and Changes since the Version 0.5 of Struts was made available.

    One global new feature to take note of is that Struts 1.0 requires a Java2 (JDK 1.2 or later) platform on which to run.

    The following major new features have been added to the controller servlet and associated classes (package org.apache.struts.action):

    • A new configuration file format, including the Document Type Definition (DTD) it is based on, is available for configuring the Struts controller servlet. Support for the previous format is still present, but will be phased out by the 1.0 release.
    • If enabled by setting the locale servlet initialization parameter to true, the controller servlet will now calculate a Locale for this user (based on the Locale returned by the servlet container, or by the HTTP headers included with the request) and store it in the user's session, unless the application has stored one there already.
    • Application Action instances now have lifecycle support. The controller servlet will call setServlet() with a non-null argument when the instance is first created, and call it with a null argument when the instance is being shut down.
    • The collection of "standard" Struts actions (in package org.apache.struts.actions) is kicked off with a set of simple actions that allow on-the-fly changes in the form bean, forward, and mapping definitions registered with the controller servlet. These actions would normally be configured behind security constraints to prevent interference with the operation of your application but can be very useful during development.
    • A new representation of error messages (ActionError and ActionErrors) has been created that allows errors to be associated with individual fields, and stores parameter replacement values along with the messages keys.
    • The ActionForm interface has been converted to a base class, with default implementations of some useful functionality. In addition, the new class provides two validate() methods that take the current mapping and current request as arguments, in order to provide access to more context information than just the properties of this particular form bean.
    • The new ActionForm class also provides two reset() methods that take the current mapping and current request as arguments, in order to provide access to more context information (particularly important on multi-page forms so that the form bean knows which properties to reset). Among other things, use of the reset() methods can prevent problems with checkbox fields -- simply reset boolean fields to false and they will be set to true (during auto-population of the form bean properties) only if the checkbox was actually checked.
    • All servlet context attributes created by the Struts controller servlet itself (but not the Struts Example application) now implement java.io.Serializable.
    • The Action class now includes support for "transactional tokens", so that you can detect cases where the user submitted a form, then went back and resubmitted the form again.

    The following major new features have been added to the struts-bean custom tag library (package org.apache.struts.taglib.bean):

    • A new custom tag, <bean:page>, is available to expose key items from the page context associated with the current page as scripting variables, and as page-scope beans. For example, you can use the following sequence to render the server information string returned by our servlet context:
            <bean:page id="app" property="application"/>
            <bean:write name="app" property="serverInfo"/>
            
    • A new custom tag, <bean:struts>, is available to expose internal Struts configuration objects (form bean, forward, and mapping definitions) as scripting variables and page-scope beans. For example, you can use the following sequence to render the actual context-relative path of an ActionForward object:
            <bean:struts id="link" forward="success"/>
            <bean:write name="link" property="path"/>
            
    • All of the tags in this library that accept a name attribute referring to a JSP bean now also accept an optional scope attribute to define the scope in which to search for that bean. If not specified, all scopes are searched.
    • The <bean:size> tag will create a bean that stores the number of elements of an array, Collection, or Map.

    The struts-html custom tag library has been created (package org.apache.struts.taglib.html), based on the old tags that were related to HTML form presentation. The following differences from the old tags are notable:

    • You must now reference the "struts-html.tld" TLD to access these tags.
    • All attribute names matching JavaScript event handlers are now all lower case (onClick --> onclick) to conform to XHTML.
    • The options1 tag has been eliminated since Struts is now based on Java2.
    • All tag implementation classes have had their final modifiers removed, and private instance variables changed to protected. This makes it possible to easily subclass these tags to provide specialized functionality.
    • The <html:link> tag has been enhanced to support a new page attribute that allows you to use context-relative URIs in a portable manner.
    • A new <html:html> tag has been created that renders an HTML <html> element with appropriate lang and xml:lang attributes, based on the locale stored for the user's session (if there is one).
    • A new <rewrite> tag has been created that renders a request URI, possibly encoded with a session identifier, based on exactly the same rules used by the <link> tag that generates hyperlinks. These constants can be useful when you are creating JavaScript code that needs to be aware of Struts addressing concepts.
    • The options tag now supports a new collection attribute, which can be used to specify a collection whose beans have properties that return the value (to be returned to the server) and the label (to be displayed to the user) from a single collection. The previous support for processing parallel collections is still available.
    • The form tag has been enhanced to look up the name of the form bean, it's Java class, and the scope in which the bean should be created or accessed, from the corresponding action mapping entry in the "struts-config.xml" file, if the name, scope, and type attributes are not specified. This removes the need to make changes in two places when these values are changed.
    • A new <image> tag has been added, to create HTML input tags of type "image".
    • The form tag has been enhanced to read its configuration from a corresponding action mapping entry in the "struts-config.xml" file, if the name, scope, and type attributes are not specified. It can look up the name of the form bean, its Java class, the scope in which the bean should be created or accessed, plus the path to which the form should be submitted. This removes the need to make changes in two places when these values are changed. It works for cases where the controller servlet is extension mapped or path mapped.
    • The <html:img> tag has been added, to render an HTML <img> tag.

    A new package of Actions and associated classes for handling file uploads has been created (package org.apache.struts.upload):

    • The basic package of file upload handling actions has been created.
    • An example application illustrating the use of the new features has been added (webapps/struts-upload.war).

    The following major new features have been added to the utility classes library (package org.apache.struts.util):

    • Initial implementation of a JDBC data source that implements the javax.sql.DataSource interface from the JDBC 2.0 Standard Extensions API. This implementation may be configured based on new extensions to the Struts configuration file DTD, and the configured data sources / connection pools are made available to application components as a servlet context attribute (i.e. an application scope bean).
    • The previous implementation of MessageResources, which was ultimately based on java.util.ResourceBundle, has been completely replaced and re-implemented. The primary features of the new implementation are:
      • All components stored as servlet context attributes now implement the java.io.Serializable interface, to better integrate with application servers that prefer this.
      • The MessageResources and MessageResourcesFactory classes have been abstracted so that you can easily create your own implementations that derive their message strings from resources other than property files.
    • Property gets and sets made through PropertyUtils can now use a new syntax for indexed and nested properties.
    • Conversion to and from numeric types now support a configurable default value to use when conversion fails.

    The following major new features have been added to the Struts Example Application:

    • The form beans used in the example application now use request scope rather than session scope. This is the preferred approach for single page forms that contain all of your relevant properties, because there is no need to maintain such form beans across requests. Note that the action classes have been coded so that they work with either request scope or session scope beans.
    • The Struts Example Application has been updated to utilize the new (separated) custom tag libraries, rather than the old combined one, as well as the latest features of the tags being used.
    • A "Walking Tour of the Struts Example Application" has been added, to highlight features for newcomers to Struts.

    The following major new documentation updates have been added to Struts:

    • All documentation is generated from XML input files, using a standard stylesheet to create a common look and feel.
    • Developer Guides for the Java classes in the org.apache.struts.digester and org.apache.struts.util packages.
    • Developer Guides for the following Struts custom tag libraries have been added: struts-bean, struts-html, struts-logic, and struts-template.
    • The Struts Users Guide has been brought up to date with respect to all of the changes since Struts 0.5, and separated into multiple HTML pages for easy reading.
    • Installation information has been updated to include platform-specific notes, issues, and workarounds.
    • A new resources page now points at external information and resources related to Struts.
    • A new example application, struts-blank, is included as a quick starting point for new application development.

    The following changes and bug fixes to the controller servlet and associated classes (package org.apache.struts.action) have occurred:

    • The ActionMapping interface has been converted to a base class instead, to reduce the impact of future enhancements. Anyone who has extended the ActionMappingBase convenience base class (which has been deprecated) should extend ActionMapping instead.
    • In conjunction with the new configuration file format mentioned above, the properties of ActionMapping have been substantially updated. See the API Documentation for more information
    • The Action interface has been converted to a base class instead, to reduce the impact of future enhancements. Anyone who has extended the ActionBase convenience base class (which has been deprecated) should extend Action instead.
    • In conjunction with the above change, the servlet argument has been removed from the parameter list for the perform() method, because it is now redundant -- the associated servlet is set via the setServlet() method when the Action instance is first created.
    • Responsibility for creating Action instances has been moved from ActionMapping to the controller servlet, so that instance lifecycle management can be performed. As a side effect of this change, if you had two actions that used the same Action class name, there will now be only one (shared) instance of the Action class, rather than two.
    • New log(String, int) method that logs the associated message only if you have configured the debugging detail level for the servlet to an equal or higher value.
    • In ActionServlet, the functionality to populate form bean parameters from a request, and the functionality to validate the form bean's contents, has been separated into two methods that can be overridden individually if required.
    • The ActionServlet functionality to call the validate() method of a form bean is skipped if the user pressed the Cancel key (i.e. the submit button created by the <html:cancel> custom tag), or if the selected mapping does not define an input form to return control to.
    • The controller servlet may now be used as the target of a RequestDispatcher.include() or <jsp:include/> call. Previously, it would mistakenly use the original request URI, rather than the included path, to calculate which action class to execute.
    • The ActionMappings.getUnknown() method now takes the current request as an parameter, so that context-sensitive decisions can be made.
    • When the controller servlet processes an ActionForward that has the redirect property set, it now performs URL rewriting to maintain session state even if cookies are not being used.
    • The ActionErrors class now includes a method that will return an Iterator over the error messages related to a particular input field.

    The following changes and bug fixes to the Digester module (package org.apache.struts.digester) have occurred:

    • The Digester.resolveEntity() method has been enhanced to correctly handle local URIs so that it works with resources loaded via Class.getResource().
    • The input source handed to the Digester is now closed, even if a parsing exception is throw.

    The following changes and bug fixes to the struts-bean custom tag library (package org.apache.struts.taglib.bean) have occurred:

    • By default, the <bean:write> tag will filter output for characters sensitive to HTML. You can turn this off by adding a filter="false" attribute.
    • When performing a <bean:include> in a page that is part of a session, pass the session identifier along on the generated request so that it will be part of the same session.
    • The <bean:define> tag can now create beans directly from the value attribute, if desired.
    • The <bean:define> tag now accepts an optional toScope attribute, to declare which scope the new bean should be created in. The default remains page scope.
    • Default values can now be specified on <bean:cookie>, <bean:header>, and <bean:parameter> tags, which are used when the corresponding value is not present in the current request.

    The following changes and bug fixes to the struts-html custom tag library (package org.apache.struts.taglib.html) have occurred:

    • WARNING - When the Struts 0.5 tag library was originally split into separate libraries, this library was named struts-form, to reflect the fact that the majority of tags related to creating input forms. It has been renamed to struts-html to reflect the fact that all of the tags in this library are relevant only when building HTML-based user interfaces.
    • The <html:html> tag now supports a locale="true" attribute that requests the same Locale negotiation (based on the presence of an Accept-Language header) that is performed by the controller servlet.
    • The <html:link> tag now supports the ability to add a single request parameter (based on a bean property) in addition to the ability to add request parameters from a Map.
    • The <html:errors> tag lets you select only the error messages related to a particular input field, or all errors.
    • The <html:password> tag now optionally redisplays the previous value of the input field.
    • The value returned by a <html:multibox> tag can now be specified in the body of the tag, as well as via the value attribute.

    The following changes and bug fixes to the struts-logic custom tag library (package org.apache.struts.taglib.logic) have occurred:

    • The <logic:present> and <logic:notPresent> tags now accept a role attribute that allows you to detect whether the currently authenticated user does, or does not, possess a particular security role.

    The following changes and bug fixes to the struts-template custom tag library (package org.apache.struts.taglib.template) have occurred:

    • The <template:put> tag now accepts a direct attribute that causes the content being put to be rendered directly, rather than being included.

    The following changes and bug fixes to the Utilities package (package org.apache.struts.util) have occurred:

    • Fixed PropertyUtils.getPropertyType() to correctly return the underlying element type even if there was a non-indexed property getter method.
    • Added a missing "return" statement to PropertyUtils.setIndexedProperty().
    • Functionality in BeanUtils that previously duplicated functionality that was earlier moved to PropertyUtils has been removed.
    • Fixed PropertyUtils.copyProperties() to skip cases where the origin bean has a getter method but the destination bean does not have a setter method.
    • Added BeanUtils.cloneBean() to create a new instance of an existing bean, and copy all known properties, even if the bean class does not implement Cloneable.
    • The BeanUtils class has been refactored so that it, and the associated ConvertUtils and PropertyUtils classes, can easily be used without having to have the servlet API classes available on the classpath.
    • Property introspection is now smarter, so that you can access public methods declared in an implemented interface, even if the class itself is not public.

    The following changes and bug fixes to the Struts Example Application (package org.apache.struts.example and the corresponding web components) have occurred:

    • Used the reset() methods defined by the ActionForm interface to reset form bean properties to default values. This is particularly important to make boolean properties (represented visually by checkboxes) work correctly.
    • Eliminate the special-case handling of null String values in the form beans. Such handling is not necessary because the custom tags correctly deal with null String values.
    • Use the PropertyUtils.copyProperties() method to initially populate form beans from underlying data objects, and to update date objects when a transaction is successfully completed. Note that using this approach dramatically lessens an action class's dependence on the specific properties of the form bean and corresponding data object in many use cases.
    • Added an autoConnect boolean property to the Subscription data object, primarily to illustrate that representing a boolean property with a checkbox now works correctly if you set the property to false in the reset() method of your form beans.
    libstruts1.2-java-1.2.9/xdocs/userGuide/release-notes-1.0-b2.xml0000644000175000017500000004201510404045214024621 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Struts Release Notes (Version 1.0-beta-2)

    This document contains the release notes for Version 1.0-beta-2 of the Struts Framework, and covers changes that have taken place since Version 1.0-beta-1 was released. The following sections cover New Features and Changes to Struts.

    The binary distribution of this release includes the following files relevant to Struts 1.0:

    • INSTALL - Brief installation instructions. See the Struts Documentation Application, or online at http://jakarta.apache.org/struts/ for more information.
    • LICENSE - The Apache Software Foundation license that defines the terms under which you can use Struts (and other software licensed by Apache).
    • README - A brief introduction to Struts.
    • lib/ - Directory containing files you will need in your own applications. The individual files of interest are:
      • struts.jar - JAR file that contains the compiled Java classes for both version 0.5 and 1.0 of Struts. You must place this file in the /WEB-INF/lib directory of your web application.
      • struts-xxxxx.tld - The tag library descriptor files for the Struts 1.0 tag libraries (bean, html, logic, and template). You must place these files in the /WEB-INF directory of your web application, and reference them with appropriate <taglib> directives in your web.xml file. NOTE - The struts-form.tld file is deprecated; you should use the struts-html.tld file instead.
      • jdbc2_0-stdext.jar - The JDBC 2.0 Optional Package API classes (package javax.sql). You will need to include this file in the /WEB-INF/lib directory of your application, if it is not already made visible to web applications by your servlet container.
      • struts-config_1_0.dtd - The document type descriptor (DTD) for the Struts configuration file (which is typically named /WEB-INF/struts-config.xml. Your configuration file will be validated against an internal copy of this DTD -- this copy is available for reference purposes only.
      • web-app_2_2.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.2 specification. This copy is for reference purposes only.
      • web-app_2_3.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.3 specification. This copy is for reference purposes only.
    • webapps/ - Web Application Archive (WAR) files for the web applications that are included with Struts.

    For backwards compatibility only, the binary distribution also includes the following files that conform to the Struts 0.5 milestone release APIs. Usage of these files and APIs is deprecated, and they will be removed from releases after Struts 1.0:

    • lib/ - Directory containing files you will need in your own applications. The individual files of interest are:
      • struts.jar - JAR file that contains the compiled Java classes for both version 0.5 and 1.0 of Struts. You must place this file in the /WEB-INF/lib directory of your web application.
      • struts.tld - The tag library descriptor file for the 0.5 version of the Struts tags. You must place this file in the /WEB-INF directory of your web application, and reference it with appropriate <taglib> directives in your web.xml file.

    DEPRECATIONS - The entire custom tag library that is documented in struts.tld has been deprecated. These tags correspond to the Struts 0.5 functionality that is also deprecated, and have been replaced (and considerably enhanced) in the various individual tag libraries.

    The build procedure for compiling the Struts source distribution has been revised, and now depends on having Ant 1.2 (or later) installed, with the $ANT_HOME/bin directory on your path. Further information can be found in the Installation documentation.

    The following new features have been added to the basic controller framework (package org.apache.struts.action):

    • You can now specify that an <action> element should invoke an existing servlet or JSP page resource, rather than calling an Action class, by using the include attribute rather than the type attribute. The standard form bean processing provided by the controller is still performed first, if you have configured it, so the included resource can benefit from this processing if it wishes to.
    • The initDataSources() method can now throw a ServletException to report that an initialization error has occurred. Previously, such errors were logged but otherwise ignored.
    • It is now possible to integrate business logic that is already encapsulated as a servlet or JSP page, via use of two new standard actions: org.apache.struts.actions.ForwardAction and org.apache.struts.actions.IncludeAction. These actions let you take advantage of the standard processing performed by the controller servlet (including form bean population and calling the validate() method), but not have to write Java code to perform (or wrap) the required business logic.
    • A wrapper class has been added around the standard HttpServletRequest for handling multipart requests as identically as possible to standard requests, including processing request parameters, populating form beans, transaction tokens, and checking for cancellations.

    The following new features have been added to the utility classes (package org.apache.struts.util):

    • PropertyUtils can now correctly locate public methods defined in a nested interface that is implemented by a bean.
    • PropertyUtils methods now throw IllegalArgumentException when you pass a null bean reference or property name.
    • DEPRECATIONS - The following classes have been deprecated in their entirety, because they will be replaced by corresponding classes (with identical functionality) from the Jakarta Commons Project at some point after Struts 1.0 final release. The only change that will ultimately be required in user code is to change the package names on the import clauses:
      • org.apache.struts.util.FastArrayList
      • org.apache.struts.util.FastHashMap
      • org.apache.struts.util.FastTreeMap
      • org.apache.struts.util.BeanUtils
      • org.apache.struts.util.ConvertUtils
      • org.apache.struts.util.PropertyUtils

    The following new features have been added to the struts-html custom tag library (package org.apache.struts.taglib.html):

    • The <html:link> tag now accepts an optional anchor attribute, to allow the inclusion of a (possibly calculated) anchor ("#xxx") in the generated hyperlink.
    • The <html:base> tag now accepts an optional target attribute.
    • The <html:image> tag now accepts an optional border attribute, to define the border with around this image.
    • You can now request that the <html:link> tag include any current transaction control token in the generated hyperlink, by specifying the transaction attribute with a value of true.
    • The <html:options> tag now supports Enumeration for the collection property.
    • The <html:form> tag now creates attributes for the tag itself, and the form bean, in request scope instead of page scope. Among other benefits, this allows you to nest the fields of a form inside a separate page that is accessed via a template or a <jsp:include> tag.
    • The styleId attribute has been added to all of the tags where the corresponding id tag is relevant, to identify a specific tag for the purposes of stylesheet references.
    • The <html:file> tag now supports the size attribute to set the size of the file list field.

    The following new features have been added to the struts-logic custom tag library (package org.apache.struts.taglib.logic):

    • The <logic:iterate> tag now supports Enumeration for the collection property.
    • The <logic:iterate> tag now exposes the current iteration index to nested tags, through a call to the getIndex() method.

    The following new features have been added to the struts-template custom tag library (package org.apache.struts.taglib.template):

    • Attribute getter methods have been added to all of the custom tag implementation classes to facilitate reuse.
    • The <template:get> tag now has an optional "flush" attribute that causes the response to be committed prior to performing the include, if set to "true". This allows working around problems on broken servlet containers.

    The following new features have been added to the Struts Documentation application (and corresponding contents on the Struts web site):

    • Platform specific installation notes for a wide variety of application server and servlet container environments have been accumulated and published.

    The following changes and bug fixes have occurred in the basic controller framework (package org.apache.struts.action):

    • DiskMultipartRequestHandler now tries to retrieve the temporary directory provided by the servlet container before all other possible temporary directories.

    The following changes and bug fixes have occurred in the utilities (package org.apache.struts.util):

    • The computeURL() method now returns a MalformedURLException if a URL cannot be created. Previously, this case returned null with no error message, making some problems difficult to track down.

    The following changes and bug fixes have occurred in the struts-html custom tag library (package org.apache.struts.taglib.html):

    • The <html:image> tag now correctly generates a closing double quote on the name attribute.
    • The <html:form> tag now generates a hyperlink that includes any query parameters that were included in the original hyperlink value.
    • The <html:link> tag now correctly places any specified anchor ("#xxx") in the generated hyperlink.
    • The JavaScript code generated to implement the focus attribute of the <html:form> tag now works even when you use nested or indexed property expressions. Previously, this would generate an invalid JavaScript reference to the field.
    • The <html:checkbox> tag now conforms to its documentation, and sends the specified value to the server if this checkbox is checked at submit time. In addition, a default value of on is sent if no value attribute is specified.
    • The hyperlinks created by the <html:link> and <html:redirect> tags now properly omit the port number if it is the default port for the current request scheme (80 for http, or 443 for https). Among other things, this corrects session management behavior on the standard port numbers.
    • The focus attribute of the <html:form> tag now works when the corresponding input field is a radio button, or is otherwise indexed.
    • The disabled and readonly attributes have been added to all HTML-rendering tags where they are relevant.

    The following changes and bug fixes have occurred in the struts-logic custom tag library (package org.apache.struts.taglib.logic):

    • Hyperlink processing in the <logic:forward> tag is now identical to that performed by the Struts Controller Servlet when it processes an ActionForward that is returned by an Action.

    The following changes and bug fixes to the Struts Documentation application (and corresponding contents on the Struts web site) have occurred:

    • The Java types of collections (and arrays) over which the <logic:iterate> tag can run are now documented.
    • The <bean:define> documentation now mentions the JSP 1.1 Specification restriction on using more than one id attribute with the same value in the same page.

    The following changes and bug fixes to the Struts Example Application have occurred:

    • The Java source code of these applications is now included in the corresponding WAR files, in subdirectory WEB-INF/src.
    • Excessive filter() calls in LinkSubscriptionTag have been eliminated.
    • Calls to the deprecated BeanUtils.filter() have been replaced by calls to ResponseUtils.filter().
    • Removed any attempt to save the pseudo-database at application shutdown, because there is no portable mechanism to accomplish this task.

    The following changes and bug fixes to the Struts Template Example Application have occurred:

    • Refactored the example pages to eliminate the creation of redundant <html>, <head>, and <body> tags.
    • If <template:get> or <template:insert> throws an exception, do not overwrite any "real" exception that has already been saved.
    • The text of the various pages in the example has been updated so that they are not identical.
    libstruts1.2-java-1.2.9/xdocs/userGuide/release-notes-1.0-b3.xml0000644000175000017500000002771210404045250024631 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Struts Release Notes (Version 1.0-beta-3)

    This document contains the release notes for Version 1.0-beta-3 of the Struts Framework, and covers changes that have taken place since Version 1.0-beta-2 was released. The following sections cover New Features and Changes to Struts.

    The binary distribution of this release includes the following files relevant to Struts 1.0:

    • INSTALL - Brief installation instructions. See the Struts Documentation Application, or online at http://jakarta.apache.org/struts/ for more information.
    • LICENSE - The Apache Software Foundation license that defines the terms under which you can use Struts (and other software licensed by Apache).
    • README - A brief introduction to Struts.
    • lib/ - Directory containing files you will need in your own applications. The individual files of interest are:
      • struts.jar - JAR file that contains the compiled Java classes for both version 0.5 and 1.0 of Struts. You must place this file in the /WEB-INF/lib directory of your web application.
      • struts-xxxxx.tld - The tag library descriptor files for the Struts 1.0 tag libraries (bean, html, logic, and template). You must place these files in the /WEB-INF directory of your web application, and reference them with appropriate <taglib> directives in your web.xml file. NOTE - The struts-form.tld file is deprecated; you should use the struts-html.tld file instead.
      • jdbc2_0-stdext.jar - The JDBC 2.0 Optional Package API classes (package javax.sql). You will need to include this file in the /WEB-INF/lib directory of your application, if it is not already made visible to web applications by your servlet container.
      • struts-config_1_0.dtd - The document type descriptor (DTD) for the Struts configuration file (which is typically named /WEB-INF/struts-config.xml. Your configuration file will be validated against an internal copy of this DTD -- this copy is available for reference purposes only.
      • web-app_2_2.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.2 specification. This copy is for reference purposes only.
      • web-app_2_3.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.3 specification. This copy is for reference purposes only.
    • webapps/ - Web Application Archive (WAR) files for the web applications that are included with Struts.

    For backwards compatibility only, the binary distribution also includes the following files that conform to the Struts 0.5 milestone release APIs. Usage of these files and APIs is deprecated, and they will be removed from releases after Struts 1.0:

    • lib/ - Directory containing files you will need in your own applications. The individual files of interest are:
      • struts.jar - JAR file that contains the compiled Java classes for both version 0.5 and 1.0 of Struts. You must place this file in the /WEB-INF/lib directory of your web application.
      • struts.tld - The tag library descriptor file for the 0.5 version of the Struts tags. You must place this file in the /WEB-INF directory of your web application, and reference it with appropriate <taglib> directives in your web.xml file.

    DEPRECATIONS - The entire custom tag library that is documented in struts.tld has been deprecated. These tags correspond to the Struts 0.5 functionality that is also deprecated, and have been replaced (and considerably enhanced) in the various individual tag libraries.

    DEPRECATIONS - The entire custom tag library that is documented in struts-form.tld has been deprecated because this library has been renamed struts-html.tld instead.

    DEPRECATIONS - Several classes in the org.apache.struts.util package have been marked as deprecated in their entirety, because they will be replaced by versions from the Jakarta Commons project once those packages are released. These deprecated classes will not be removed until a release after Struts 1.1. In general, the only change required inside user code using these classes will be to update the import statement. The following classes are involved:

    • ArrayStack
    • BeanUtils
    • ConvertUtils
    • FastArrayList
    • FastHashMap
    • FastTreeMap
    • GenericConnection
    • GenericDataSource
    • PropertyUtils

    The following new features have been added to the basic controller framework (package org.apache.struts.action):

    The following new features have been added to the utility classes (package org.apache.struts.util):

    • GenericDataSource can now be configured with a "ping" type command (via the pingCommand and pingQuery properties) that will be executed before returning a connection from getConnection(). This can be used to detect stale connections due to timeouts or a database server restart. If the ping command fails, the corresponding connection will be thrown away, and a new one allocated.

    The following new features have been added to the struts-html custom tag library (package org.apache.struts.taglib.html):

    • It is now possible to use any object in the values and labels collections for the <html:options> tag.
    • Added the missing tabindex attribute to the <html:radio> tag.
    • On the <html:img>, <html:link>, and <html:rewrite> tags, you can now specify arbitrary object values in the Map used to include dynamic request attributes, as long as the toString() method renders the values appropriately.
    • In all cases where "minimized" attributes were being generated (checked, disabled, multiple, readonly, and selected), the generated attribute has a value (such as selected="true") for XML syntax compatibility.

    The following new features have been added to the struts-logic custom tag library (package org.apache.struts.taglib.logic):

    The following new features have been added to the struts-template custom tag library (package org.apache.struts.taglib.template):

    The following new features have been added to the Struts Documentation application (and corresponding contents on the Struts web site):

    The following changes and bug fixes have occurred in the configuration files related to Struts:

    • The DTD for struts-config.xml files had an incorrect ENTITY declaration for the Location element.
    • The DTD for version 2.3 web application deployment descriptors has been updated to the most recent (Proposed Final Draft 2) version.

    The following changes and bug fixes have occurred in the basic controller framework (package org.apache.struts.action):

    The following changes and bug fixes have occurred in the utilities (package org.apache.struts.util):

    • The FastArrayMap(), FastHashMap(), and FastTreeMap() classes not correctly implement the clone(), equals(), and hashCode() methods consistent with the requirements of the Java standard Collections APIs.
    • PropertyUtils can now access public methods defined in nested interfaces.
    • A misleading error message returned by BeanUtils has been corrected.
    • Work around a problem compiling the FastXxxxx classes with the VAJ compiler, because the superclass already includes a private class named Iterator.
    • Remove a JDK 1.3 dependency that prevented compiling BeanUtils under JDK 1.2.
    • Generate "&amp;" instead of "&" in query strings that contain more than one name/value pair.

    The following changes and bug fixes have occurred in the struts-html custom tag library (package org.apache.struts.taglib.html):

    • Restore the ability of the <html:button> tag to retrieve the button text from the nested body content (so that it can be easily internationalized).
    • If the property name used in the labelProperty attribute of an <html:options> tag is invalid, report the correct property name in the error message.

    The following changes and bug fixes have occurred in the struts-logic custom tag library (package org.apache.struts.taglib.logic):

    The following changes and bug fixes to the Struts Documentation application (and corresponding contents on the Struts web site) have occurred:

    • Fix a reference to an old Struts 0.5 tag in one of the User's Guide examples.
    • Fix the stylesheet used to transform XML into HTML documentation so that nested <body> tags are not created.
    • The DTD for Struts configuration files has been refined to highlight the fact that you should use <set-property> elements to configure your data source implementation.

    The following changes and bug fixes to the Struts Example Application have occurred:

    The following changes and bug fixes to the Struts Template Example Application have occurred:

    libstruts1.2-java-1.2.9/xdocs/userGuide/release-notes-1.0.1.xml0000644000175000017500000002425510404045204024464 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Robert Leland Ted Husted Martin Cooper Struts Release Notes (Version 1.0.1)

    This document contains the release notes for Version 1.0.1 of the Struts Framework, and covers changes that have taken place since Version 1.0 was released. The following sections cover New Features and Changes to Struts.

    This version covers bug-fixes only; no new functionality.

    The binary distribution of this release includes the following files relevant to Struts 1.0.1:

    • INSTALL - Brief installation instructions. See the Struts Documentation Application, or online at http://jakarta.apache.org/struts/ for more information.
    • LICENSE - The Apache Software Foundation license that defines the terms under which you can use Struts (and other software licensed by Apache).
    • README - A brief introduction to Struts.
    • lib/ - Directory containing files you will need in your own applications. The individual files of interest are:
      • struts.jar - JAR file that contains the compiled Java classes for version 1.0 of Struts. You must place this file in the /WEB-INF/lib directory of your web application.
      • struts-xxxxx.tld - The tag library descriptor files for the Struts 1.0.1 tag libraries (bean, html, logic, and template). You must place these files in the /WEB-INF directory of your web application, and reference them with appropriate <taglib> directives in your web.xml file.
      • jdbc2_0-stdext.jar - The JDBC 2.0 Optional Package API classes (package javax.sql). You will need to include this file in the /WEB-INF/lib directory of your application, if it is not already made visible to web applications by your servlet container.
      • struts-config_1_0.dtd - The document type descriptor (DTD) for the Struts configuration file (which is typically named /WEB-INF/struts-config.xml. Your configuration file will be validated against an internal copy of this DTD -- this copy is available for reference purposes only.
      • web-app_2_2.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.2 specification. This copy is for reference purposes only.
      • web-app_2_3.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.3 specification. This copy is for reference purposes only.
    • webapps/ - Web Application Archive (WAR) files for the web applications that are included with Struts.

    The struts 0.5 milestone API release is no longer supported, and has been removed as of Struts 1.1.

    The following new features have been added to the basic controller framework (package org.apache.struts.action):

    The following new features have been added to the utility classes (package org.apache.struts.util):

    • LocalStrings: Correct message regarding replaceable parameter so that it does not append an extraneous character.
    • MessageResources: Escape any single quote characters that are included in the specified message string.
    • Allow a transaction token to be the only parameter in computeParameters().
    • Change RequestUtils to encode ampersands when building a query string.

    The following new features have been added to the struts-html custom tag library (package org.apache.struts.taglib.html):

    The following new features have been added to the struts-logic custom tag library (package org.apache.struts.taglib.logic):

    The following new features have been added to the struts-template custom tag library (package org.apache.struts.taglib.template):

    The following new features have been added to the Struts Documentation application (and corresponding contents on the Struts web site):

    The following changes and bug fixes have occurred in the configuration files related to Struts:

    The following changes and bug fixes have occurred in the basic controller framework (package org.apache.struts.action):

    • Modify ActionForm class to use ActionServletWrapper rather than expose ActionServlet.
    • Add ActionServletWrapper class. Used by ActionForm to prevent the Public String properties of ActionServlet from being changed via a query string.
    • Unconditionally pass the selected mapping as a request attribute under key Action.MAPPING_KEY, even if no form bean is specified.
    • Avoid a NullPointerException in corner cases caused by failed initialization of ActionServlet.

    The following changes and bug fixes have occurred in the file upload package (package org.apache.struts.upload):

    • Fixed lost byte problem in BufferedMultipartInputStream
    • Fixed ArrayIndexOutOfBoundsException situations
    • Better reporting for premature closing of input streams while reading multipart requests.
    • Additional fix for file corruption problem with uploads and new line characters.

    The following changes and bug fixes have occurred in the utilities (package org.apache.struts.util):

    • Modify RequestUtils class to use ActionServletWrapper rather than expose ActionServlet.
    • ConvertUtils.convertCharacter() will now detect empty strings and return the default value.

    The following changes and bug fixes have occurred in the struts-bean custom tag library (package org.apache.struts.taglib.bean):

    • Correct the generated scripting variable type when the <bean:cookie>, <bean:header>, or <bean:parameter> tag is used with the "multiple" attribute.

    The following changes and bug fixes have occurred in the struts-html custom tag library (package org.apache.struts.taglib.html):

    • Fixed FormTag to exclude query string when identifying action mapping name.
    • Correct MultiboxTagdoAfterBody() to return SKIP_BODY instead of SKIP_PAGE.
    • Added the 'align' attribute to the <html:image> tag.
    • On the Options tag, if the property specified by the "property" attribute returns null, it now throws an error message that indicates what the real problem is, rather than causing an NPE.
    • Added 'style' and 'styleClass' attributes for <html:option> and <html:options> tags.
    • Correctly URLEncode the query string parameter value on ImgTag, even if there is only a single parameter.

    The following changes and bug fixes have occurred in the struts-logic custom tag library (package org.apache.struts.taglib.logic):

    • The <html:errors> when the property tag is specified, errors are no longer printed if the specified property has no errors. Previously errors were always printed! Future enhancements would include additional attributes to always turn off the header or footer.

    The following changes and bug fixes to the Struts Documentation application (and corresponding contents on the Struts web site) have occurred:

    • Add installation notes for Jetty.
    • In the Tag Developers Guide, add more detail regarding file upload requirements.
    • In the Introduction, added references to basic background material.
    • In Building View Components, clarify that additional i18n support may be provided by the browser, and is outside the scope of the framework.
    • In Building Controller Components, document 'validating' init-param, add defaults for various parameters, clarify that some web.xml settings are not Struts-specific.
    • Correct the example page in the User's Guide (Building View Components) to reflect current practice.
    • Revised installation instructions for SilverStream and Resin.

    The following changes and bug fixes to the Struts Example Application have occurred:

    • Remove references to saving database data from "tour" document, since this functionality was removed.

    The following changes and bug fixes to the Struts Template Example Application have occurred:

    The following changes and bug fixes to the Struts Exercise Taglib Example Application have occurred:

    • Added test case for <html:select> using <html:options> based on a collection saved in the page context.
    libstruts1.2-java-1.2.9/xdocs/userGuide/release-notes-1.0.2.xml0000644000175000017500000001052710404045236024467 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Robert Leland Ted Husted Martin Cooper Struts Release Notes (Version 1.0.2)

    This document contains the release notes for Version 1.0.2 of the Struts Framework, and covers changes that have taken place since Version 1.0.1 was released. The following sections cover New Features and Changes to Struts.

    This version covers bug-fixes only; no new functionality.

    The binary distribution of this release includes the following files relevant to Struts 1.0.2:

    • INSTALL - Brief installation instructions. See the Struts Documentation Application, or online at http://jakarta.apache.org/struts/ for more information.
    • LICENSE - The Apache Software Foundation license that defines the terms under which you can use Struts (and other software licensed by Apache).
    • README - A brief introduction to Struts.
    • lib/ - Directory containing files you will need in your own applications. The individual files of interest are:
      • struts.jar - JAR file that contains the compiled Java classes for version 1.0.2 of Struts. You must place this file in the /WEB-INF/lib directory of your web application.
      • struts-xxxxx.tld - The tag library descriptor files for the Struts 1.0.2 tag libraries (bean, html, logic, and template). You must place these files in the /WEB-INF directory of your web application, and reference them with appropriate <taglib> directives in your web.xml file.
      • jdbc2_0-stdext.jar - The JDBC 2.0 Optional Package API classes (package javax.sql). You will need to include this file in the /WEB-INF/lib directory of your application, if it is not already made visible to web applications by your servlet container.
      • struts-config_1_0.dtd - The document type descriptor (DTD) for the Struts configuration file (which is typically named /WEB-INF/struts-config.xml. Your configuration file will be validated against an internal copy of this DTD -- this copy is available for reference purposes only.
      • web-app_2_2.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.2 specification. This copy is for reference purposes only.
      • web-app_2_3.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.3 specification. This copy is for reference purposes only.
    • webapps/ - Web Application Archive (WAR) files for the web applications that are included with Struts.

    The struts 0.5 milestone API release is no longer supported, and will be removed as of Struts 1.1.

    No new features have been added in this release.

    The following changes and bug fixes have occurred in the basic controller framework (package org.apache.struts.action):

    • The ActionForm.getMultipartRequestHandler() method is now public rather than protected, to restore compatibility with the Tiles extension.
    libstruts1.2-java-1.2.9/xdocs/userGuide/release-notes-1.0.xml0000644000175000017500000003221510404045210024315 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Struts Release Notes (Version 1.0)

    This document contains the release notes for Version 1.0 of the Struts Framework, and covers changes that have taken place since Version 1.0-beta-3 was released. The following sections cover New Features and Changes to Struts.

    The binary distribution of this release includes the following files relevant to Struts 1.0:

    • INSTALL - Brief installation instructions. See the Struts Documentation Application, or online at http://jakarta.apache.org/struts/ for more information.
    • LICENSE - The Apache Software Foundation license that defines the terms under which you can use Struts (and other software licensed by Apache).
    • README - A brief introduction to Struts.
    • lib/ - Directory containing files you will need in your own applications. The individual files of interest are:
      • struts.jar - JAR file that contains the compiled Java classes for both version 0.5 and 1.0 of Struts. You must place this file in the /WEB-INF/lib directory of your web application.
      • struts-xxxxx.tld - The tag library descriptor files for the Struts 1.0 tag libraries (bean, html, logic, and template). You must place these files in the /WEB-INF directory of your web application, and reference them with appropriate <taglib> directives in your web.xml file. NOTE - The struts-form.tld file is deprecated; you should use the struts-html.tld file instead.
      • jdbc2_0-stdext.jar - The JDBC 2.0 Optional Package API classes (package javax.sql). You will need to include this file in the /WEB-INF/lib directory of your application, if it is not already made visible to web applications by your servlet container.
      • struts-config_1_0.dtd - The document type descriptor (DTD) for the Struts configuration file (which is typically named /WEB-INF/struts-config.xml. Your configuration file will be validated against an internal copy of this DTD -- this copy is available for reference purposes only.
      • web-app_2_2.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.2 specification. This copy is for reference purposes only.
      • web-app_2_3.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.3 specification. This copy is for reference purposes only.
    • webapps/ - Web Application Archive (WAR) files for the web applications that are included with Struts.

    For backwards compatibility only, the binary distribution also includes the following files that conform to the Struts 0.5 milestone release APIs. Usage of these files and APIs is deprecated, and they will be removed from releases after Struts 1.0:

    • lib/ - Directory containing files you will need in your own applications. The individual files of interest are:
      • struts.jar - JAR file that contains the compiled Java classes for both version 0.5 and 1.0 of Struts. You must place this file in the /WEB-INF/lib directory of your web application.
      • struts.tld - The tag library descriptor file for the 0.5 version of the Struts tags. You must place this file in the /WEB-INF directory of your web application, and reference it with appropriate <taglib> directives in your web.xml file.

    DEPRECATIONS - The entire custom tag library that is documented in struts.tld has been deprecated. These tags correspond to the Struts 0.5 functionality that is also deprecated, and have been replaced (and considerably enhanced) in the various individual tag libraries.

    DEPRECATIONS - The entire custom tag library that is documented in struts-form.tld has been deprecated because this library has been renamed struts-html.tld instead.

    DEPRECATIONS - Several classes in the org.apache.struts.util package have been marked as deprecated in their entirety, because they will be replaced by versions from the Jakarta Commons project once those packages are released. These deprecated classes will not be removed until a release after Struts 1.1. In general, the only change required inside user code using these classes will be to update the import statement. The following classes are involved:

    • ArrayStack
    • BeanUtils
    • ConvertUtils
    • FastArrayList
    • FastHashMap
    • FastTreeMap
    • GenericConnection
    • GenericDataSource
    • PropertyUtils

    The following new features have been added to the basic controller framework (package org.apache.struts.action):

    The following new features have been added to the utility classes (package org.apache.struts.util):

    The following new features have been added to the struts-html custom tag library (package org.apache.struts.taglib.html):

    • The <html:link> tag now supports the optional title attribute, that causes some browsers to display alternate text when the mouse is hovered over a hyperlink.

    The following new features have been added to the struts-logic custom tag library (package org.apache.struts.taglib.logic):

    • The <logic:iterate> tag now supports a new attribute, indexId. This attribute names a page scope attribute (and corresponding scripting variable) that will be exposed in the nested body of the iteration, which will contain the current loop index as a java.lang.Integer.

    The following new features have been added to the struts-template custom tag library (package org.apache.struts.taglib.template):

    The following new features have been added to the Struts Documentation application (and corresponding contents on the Struts web site):

    The following changes and bug fixes have occurred in the configuration files related to Struts:

    • The documentation about configuring a data source element in the struts-config.xml file has been updated to emphasize the use of <set-property> elements nested inside the <data-source> element. No further additional attributes will be added to the <data-source> element in the DTD to support custom properties of particular data source implementations.

    The following changes and bug fixes have occurred in the basic controller framework (package org.apache.struts.action):

    • Several issues introduced with the internal wrapping of multipart requests have been fixed.
    • The instance variables in the ActionForm base class are now transient, so that ActionForm instances can actually be serialized. WARNING - If you deserialize such an ActionForm instance and attempt to use it within the Struts framework, be sure to call setServlet() (and setMultipartRequestHander() if appropriate) first.

    The following changes and bug fixes have occurred in the file upload package (package org.apache.struts.upload):

    • Fixed a bug that could cause corruption in the uploaded file, by converting sequences of \r\n\n into \r\n\r\n.

    The following changes and bug fixes have occurred in the utilities (package org.apache.struts.util):

    • Corrected a cut-and-paste typo that caused NullPointerException on attempts to use the new pingQuery property that was added in Struts 1.0-b3.
    • Fix operation ordering so that RequestUtils.lookup() will throw a JspException when the specified bean is missing, in accordance with its JavaDoc documentation.
    • Digester calls to Rule.body() methods will now trim leading and trailing whitespace first, consistent with the behavior of other body processing performed within the rules.
    • Correct the calculation of an absolute URL from a context-relative path in RequestUtils.absoluteURL().

    The following changes and bug fixes have occurred in the struts-bean custom tag library (package org.apache.struts.taglib.bean):

    • The <bean:include> tag will now pass a session identifier on to the included request (assuming that it is part of the same web application), even if the current request is maintaining session identity with cookies. Previously, this only worked if you were using URL rewriting.

    The following changes and bug fixes have occurred in the struts-html custom tag library (package org.apache.struts.taglib.html):

    • For all tags where Struts generates attributes that are allowed to be minimized in the HTML specification (i.e. checked, disabled, multiple, readonly, and selected), generate attribute values equal to the attribute name, as required by HTML 4.01, section 3.3.4. For example, generate checked="checked" instead of checked="true" for the "checked" attribute.
    • Correctly generate a <a name="my name"><> element when the linkName attribute is used on the <html:link> tag.

    The following changes and bug fixes have occurred in the struts-logic custom tag library (package org.apache.struts.taglib.logic):

    • Update the processing performed by the <logic:present> and <logic:notPresent> tags to reflect the changed behavior of RequestUtils.lookup().

    The following changes and bug fixes to the Struts Documentation application (and corresponding contents on the Struts web site) have occurred:

    • Links to subscribe and unsubscribe from the STRUTS-DEV and STRUTS-USER mailing lists have been added to the home page.
    • Miscellaneous corrections to typos and hyperlinks.
    • Cleaned up problems in the stylesheets used to create documentation pages that formerly emitted <project> tags in the generated HTML, and generated incorrect references to link colors in the navigation bar.
    • Added a "Who We Are" page to the documentation.

    The following changes and bug fixes to the Struts Example Application have occurred:

    • The name and page attributes of the <app:checkLogon> tag now accept runtime expressions.

    The following changes and bug fixes to the Struts Template Example Application have occurred:

    libstruts1.2-java-1.2.9/xdocs/userGuide/release-notes-1.1-b1.xml0000644000175000017500000004340010404045210024614 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Robert Leland Ted Husted Struts Release Notes (current nightly build)

    This document contains the release notes for Version 1.1 Beta 1 of the Struts Framework, and covers changes that have taken place since Version 1.0.1 was released. The following sections cover New Features and Changes to Struts.

    The binary distribution of this release includes the following files relevant to Struts:

    • INSTALL - Brief installation instructions. See the Struts Documentation Application, or online at http://jakarta.apache.org/struts/ for more information.
    • LICENSE - The Apache Software Foundation license that defines the terms under which you can use Struts (and other software licensed by Apache).
    • README - A brief introduction to Struts.
    • lib/ - Directory containing files you will need in your own applications. The individual files of interest are:
      • commons-*.jar - Release packages from the Jakarta Commons Project that Struts relies on. You are welcome to use these classes in your own applications. These JAR files should be copied into the /WEB-INF/lib directory of your web application.
      • struts.jar - JAR file that contains the compiled Java classes of Struts. You must place this file in the /WEB-INF/lib directory of your web application.
      • struts-xxxxx.tld - The tag library descriptor files for the Struts 1.0 tag libraries (bean, html, logic, and template). You must place these files in the /WEB-INF directory of your web application, and reference them with appropriate <taglib> directives in your web.xml file. NOTE - The struts-form.tld file is deprecated; you should use the struts-html.tld file instead.
      • jdbc2_0-stdext.jar - The JDBC 2.0 Optional Package API classes (package javax.sql). You will need to include this file in the /WEB-INF/lib directory of your application, if it is not already made visible to web applications by your servlet container.
      • struts-config_1_1.dtd - The document type descriptor (DTD) for the Struts configuration file (which is typically named /WEB-INF/struts-config.xml. Your configuration file will be validated against an internal copy of this DTD -- this copy is available for reference purposes only.
      • web-app_2_2.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.2 specification. This copy is for reference purposes only.
      • web-app_2_3.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.3 specification. This copy is for reference purposes only.
    • webapps/ - Web Application Archive (WAR) files for the web applications that are included with Struts.

    DEPRECATIONS:

    • struts-config.dtd in favor of struts-config_1_1.dtd.

    COMMONS PACKAGES: Several components of Struts 1.0 have been found to be useful in general Java development (and not just useful for building Struts-based web applications), and have been migrated into the Jakarta Commons Project. As a result, the current development version of Struts has been modified to rely on the Commons packages containing these classes, rather than the Struts internal versions. In nearly every case, this involved changing only the import statements at the top of your classes. Any applications that utilize these classes will need to be modified in the same way. The following Commons packages contain the replacements for the corresponding Struts 1.0 classes:

    • BeanUtils Package (org.apache.commons.beanutils) - org.apache.struts.utils.BeanUtils, org.apache.struts.utils.ConvertUtils, and org.apache.struts.utils.PropertyUtils.
    • Collections Package (org.apache.commons.collections) - org.apache.struts.util.ArrayStack, org.apache.struts.util.FastArrayList, org.apache.struts.util.FastHashMap, org.apache.struts.util.FastTreeMap.
    • Digester Package - (org.apache.commons.digester) - org.apache.struts.digester.*.

    XML PARSER PREREQUISITE UPDATED: Struts now depends on an XML parser that conforms to the JAXP/1.1 (rather than JAXP/1.0) APIs. Parser known to work include the JAXP/1.1 reference implementation, and Xerces 1.3.1.

    CONTRIB Directory: A new directory (contrib) in the CVS source repository has been added to accumulate Struts add-on extensions that are generally useful but have not yet been integrated into the standard code base.

    • ValidatorForm - Client and Server-side validation library.
    • Tiles - Advanced templating library (see Struts-Tiles.war).
    • Service Manager - Add custom services without subclassing controller.

    UNIT TESTING SUPPORT: Support for running unit tests on Struts components and custom tags is being added, utilizing the Jakarta Cactus product.

    The following new features have been added to the basic controller framework (package org.apache.struts.action):

    • The new ActionMessages class will support a superset of the capabilities of ActionErrors, and will be useful as a collection of general purpose messages, not just errors.

    The following new features have been added to the utility classes (package org.apache.struts.util):

    • LocalStrings: Correct message regarding replaceable parameter so that it does not append an extraneous character.
    • Add LabelValueBean class. This defines a collection of name/value pairs that can be used with the <html:options> tag, and elsewhere.
    • MessageResources: Escape any single quote characters that are included in the specified message string.
    • Allow a transaction token to be the only parameter in computeParameters().
    • Change RequestUtils to encode ampersands when building a query string.

    The following new features have been added to the struts-bean custom tag library (package org.apache.struts.taglib.bean):

    • Add format, locale and bundle attributes to bean:write to support values formatting according to current user locale, format string from attribute or format string from string resources.
    • Correct the generated scripting variable type when the <bean:cookie>, <bean:header>, or <bean:parameter> tag is used with the "multiple" attribute.
    • Added name, property, and scope attributes to the <bean:message> tag, so that the message source key can be obtained dynamically from a bean or bean property.

    The following new features have been added to the struts-html custom tag library (package org.apache.struts.taglib.html):

    • On the Options tag, if the property specified by the "property" attribute returns null, it now throws an error message that indicates what the real problem is, rather than causing an NPE.
    • Added 'style' and 'styleClass' attributes for <html:option> and <html:options> tags.
    • Added 'name', 'property' and 'scope' attributes to <bean:message> so that the message resource key can be obtained dynamically from a bean.
    • Added a new <html:messages> tag to iterate through a message collection in the new ActionMessages class.
    • ActionForm will now call reset() if it instantiates the ActionForm bean.
    • Added indexed property to the SubmitTag, SelectTag, LinkTag.java, CheckboxTag, ButtonTag, ImageTag, RadioTag, and TextArea.Tag.

    The following new features have been added to the struts-logic custom tag library (package org.apache.struts.taglib.logic):

    • Added <logic:empty> and <logic:notEmpty> tags, which are similar to <logic:present> and <logic:notPresent> except for the treatment of empty strings.

    The following new features have been added to the struts-template custom tag library (package org.apache.struts.taglib.template):

    • None.

    The following new features have been added to the Struts Documentation application (and corresponding contents on the Struts web site):

    • Move Tag Library documentation into User's Guide.
    • Added Kickstart FAQ.
    • Added Reference copy of 1.0 JavaDoc.
    • Revised the example page in the User's Guide (Building View Components) to reflect current practice.
    • Revised installation instructions for SilverStream and Resin.

    The following changes and bug fixes have occurred in the configuration files related to Struts:

    • Remove deprecated support for the old (Struts 0.5) configuration file format.

    The following changes and bug fixes have occurred in the basic controller framework (package org.apache.struts.action):

    • Add InvokeAction and CreateActionForm methods to allow direct chaining of Actions.
    • Add ContextHelper to expose framework elements to alternate presentation layers.
    • ActionForms and related classes now use a StringBuffer when responding a toString request in order to conserve resources.
    • Add standard LookupDispatchAction to help select between internationalized buttons.
    • Modify ActionForm class to use ActionServletWrapper rather than expose ActionServlet.
    • Add ActionServletWrapper class. Used by ActionForm to prevent the Public String properties of ActionServlet from being changed via a query string.
    • Unconditionally pass the selected mapping as a request attribute under key Action.MAPPING_KEY, even if no form bean is specified.
    • Avoid a NullPointerException in corner cases caused by failed initialization of ActionServlet.
    • The ActionForm class is now truly serializable, because the two non-serializable instance variables (servlet and multipartRequestHandler) have been made transient. However, if you actually do serialize and deserialize such instances, it is your responsibility to reset these two properties.
    • Removed deprecated Struts 0.5 methods, and support for the Struts 0.5 configuration file format.
    • The initial order a property/key is added in is now maintained by ActionMessages class.

    The following changes and bug fixes have occurred in the file upload package (package org.apache.struts.upload):

    • Correct MultiboxTagdoAfterBody() to return SKIP_BODY instead of SKIP_PAGE.
    • Fixed lost byte problem in BufferedMultipartInputStream
    • Fixed ArrayIndexOutOfBoundsException situations
    • Better reporting for premature closing of input streams while reading multipart requests.
    • Additional fix for file corruption problem with uploads and new line characters.

    The following changes and bug fixes have occurred in the utilities (package org.apache.struts.util):

    • Modify RequestUtils class to use ActionServletWrapper rather than expose ActionServlet.
    • Added error message for the getActionErrors and getActionMessages method.
    • Added a getActionErrors and getActionMessages methods to generate the correct corresponding object based on the object retrieved from request scope based on the key passed in.
    • The logic for creating an ActionErrors or ActionMessages object has been moved to a utility method in RequestUtils. The JspException message is also generated in RequestUtils.
    • ConvertUtils.convertCharacter() will now detect empty strings and return the default value.

    The following changes and bug fixes have occurred in the struts-bean custom tag library (package org.apache.struts.taglib.bean):

    • The <html:errors> when the property tag is specified, errors are no longer printed if the specified property has no errors. Previously errors were always printed ! Future enhancements would include additional attributes to always turn off the header or footer.
    • Made the remaining helper methods "protected" rather than "private".

    The following changes and bug fixes have occurred in the struts-html custom tag library (package org.apache.struts.taglib.html):

    • Fixed FormTag to exclude query string when identifying action mapping name.
    • Added the 'align' attribute to the <html:image> tag.
    • Added indexed attribute to ImageTag, RadioTag, and TextAreaTag.
    • Added MessagesTag.
    • Correctly URLEncode the query string parameter value on ImgTag, even if there is only a single parameter.

    The following changes and bug fixes have occurred in the struts-logic custom tag library (package org.apache.struts.taglib.logic):

    • None.

    The following changes and bug fixes to the Struts Documentation application (and corresponding contents on the Struts web site) have occurred:

    • In the HTML tag documentation, expand to cover using indexed properties with iterate.
    • Add installation notes for Jetty.
    • In the Tag Developers Guide, add more detail regarding file upload requirements.
    • In the Introduction, added references to basic background material.
    • In Building View Components, clarify that additional i18n support may be provided by the browser, and is outside the scope of the framework.
    • In Building Controller Components, document 'validating' init-param, add defaults for various parameters, clarify that some web.xml settings are not Struts-specific.
    • Reorganized to separate 1.0 material from nightly build material.
    • Expanded Resources section.
    • Various updates regarding other release notes.

    The following changes and bug fixes to the Struts Example Application have occurred:

    • Add Russian and Japanese translations of the application resources and set the character set for the example JSP pages to "UTF-8" so that it can display either English or Japanese.
    • Exchange "name" for "attribute" properties for Edit mappings in Struts configuration file.
    • Remove references to saving database data from "tour" document, since this functionality was removed.

    The following changes and bug fixes to the Struts Template Example Application have occurred:

    • None.

    The following changes and bug fixes to the Struts Exercise Taglib Example Application have occurred:

    • Added test case for <html:select> using <html:options> based on a collection saved in the page context.

    Next: Installation

    libstruts1.2-java-1.2.9/xdocs/userGuide/release-notes-1.1-b2.xml0000644000175000017500000010565710404045242024637 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Robert Leland Ted Husted Martin Cooper Struts Release Notes (Version 1.1 Beta 2)

    This document contains the release notes for Version 1.1 Beta 2 of the Struts Framework, and covers changes that have taken place since Version 1.0.2 was released. The following sections cover New Features and Changes to Struts.

    The binary distribution of this release includes the following files relevant to Struts:

    • INSTALL - Brief installation instructions. See the Struts Documentation Application, or online at http://jakarta.apache.org/struts/ for more information.
    • LICENSE - The Apache Software Foundation license that defines the terms under which you can use Struts (and other software licensed by Apache).
    • README - A brief introduction to Struts.
    • lib/ - Directory containing files you will need in your own applications. The individual files of interest are:
      • commons-*.jar - Release packages from the Jakarta Commons Project that Struts relies on. You are welcome to use these classes in your own applications. These JAR files should be copied into the /WEB-INF/lib directory of your web application.
      • struts.jar - JAR file that contains the compiled Java classes of Struts. You must place this file in the /WEB-INF/lib directory of your web application.
      • struts-xxxxx.tld - The tag library descriptor files for the Struts 1.1 tag libraries (bean, html, logic, and template). You must place these files in the /WEB-INF directory of your web application, and reference them with appropriate <taglib> directives in your web.xml file.
      • jdbc2_0-stdext.jar - The JDBC 2.0 Optional Package API classes (package javax.sql). You will need to include this file in the /WEB-INF/lib directory of your application, if it is not already made visible to web applications by your servlet container.
      • struts-config_1_1.dtd - The document type descriptor (DTD) for the Struts 1.1 configuration file (which is typically named /WEB-INF/struts-config.xml. Your configuration file will be validated against an internal copy of this DTD -- this copy is available for reference purposes only.
      • struts-config_1_0.dtd - The document type descriptor (DTD) for the Struts 1.0 configuration file (which is typically named /WEB-INF/struts-config.xml. Your configuration file will be validated against an internal copy of this DTD -- this copy is available for reference purposes only.
      • web-app_2_2.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.2 specification. This copy is for reference purposes only.
      • web-app_2_3.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.3 specification. This copy is for reference purposes only.
    • webapps/ - Web Application Archive (WAR) files for the web applications that are included with Struts.

    Following are highlights of the new features. In the next section, we provide links to the JavaDocs for the affected classes.

    New Configuration DTD

    The Struts Configuration 1.0 DTD has been deprecated in favor of the struts-config_1_1.dtd. In the Struts 1.1 release, existing Struts configuration files can be loaded using either DTD version.

    New Dependencies on Commons packages

    Several components of Struts 1.0 have been found to be useful in general Java development (and not just useful for building Struts-based web applications), and have been migrated into the Jakarta Commons Project. As a result, the current development version of Struts has been modified to rely on the Commons packages containing these classes, rather than the Struts internal versions. In nearly every case, this involved changing only the import statements at the top of your classes. Any applications that utilize these classes will need to be modified in the same way.

    The following Commons packages contain the replacements for the corresponding Struts 1.0 classes:

    • BeanUtils Package [org.apache.commons.beanutils] - org.apache.struts.utils.BeanUtils, org.apache.struts.utils.ConvertUtils, and org.apache.struts.utils.PropertyUtils.
    • Collections Package [org.apache.commons.collections] - org.apache.struts.util.ArrayStack, org.apache.struts.util.FastArrayList, org.apache.struts.util.FastHashMap, org.apache.struts.util.FastTreeMap.
    • Digester Package - [org.apache.commons.digester] - org.apache.struts.digester.*.

    The following Commons packages are also now used by various components of the Struts framework:

    NOTE! XML Parser Prerequisite Updated

    Struts now depends on an XML parser that conforms to the JAXP/1.1 (rather than JAXP/1.0) APIs. Parsers known to work include the JAXP/1.1 reference implementation, and Xerces 1.3.1.

    SOURCE DEVELOPERS NOTE! Ant Prerequisite Updated

    To build Struts from source Ant 1.4 or later is now required. This does not affect developers that use Struts from the binary distribution.

    Struts Validator Integration

    The new Commons-Validator is now integrated with Struts and exposed through the new Validator package.

    Tiles - An advanced templating taglib

    The Tiles JSP assembly framework has been integrated with Struts.

    Nested - An very cool taglib extension

    The Nested taglib is bundled with Struts and enhances the functionality of the existing Struts tags.

    New Example Applications

    New example applications for the Validator and Tiles are now part of the Struts distribution.

    New Contrib directory for optional components

    A new directory (contrib) in the CVS source repository has been added to accumulate Struts add-on extensions that are generally useful but have not yet been integrated into the standard code base.

    • Scaffold - Library of reusable classes for building web applications.
    • Service Manager - Add custom services without subclassing controller.

    The source for these components is available in the Struts source distribution. Binary distributions may also be made available with the Struts download area. As optional components, these products have their own release cycles.

    Action Package Additions

    The following new features have been added to the basic controller framework [org.apache.struts.action]:

    • The ActionServlet now provides support for modular Struts applications and sports several new extension points.
    • The new ActionMessages class will support a superset of the capabilities of ActionErrors, and will be useful as a collection of general purpose messages, not just errors.

    Upload Package Additions

    The following new features have been added to the file upload classes [org.apache.struts.upload]:

    • CommonsMultipartRequestHandler: New class that implements file upload using the Jakarta Commons FileUpload package.

    Util Package Additions

    The following new features have been added to the utility classes [org.apache.struts.util]:

    • LocalStrings: Correct message regarding replaceable parameter so that it does not append an extraneous character.
    • LabelValueBean: New class that defines a collection of name/value pairs that can be used with the <html:options> tag, and elsewhere.
    • MessageResources: Escape any single quote characters that are included in the specified message string.
    • computeParameters: Allow a transaction token to be the only parameter in .
    • RequestUtils: Change to encode ampersands when building a query string.

    Bean Taglib Package Additions

    The following new features have been added to the struts-bean custom tag library [org.apache.struts.taglib.bean]:

    • <bean:write>: Add format, locale and bundle attributes to support formatting values according to current user locale, format string from attribute or format string from string resources.
    • <bean:cookie>, <bean:header>, or <bean:parameter>: Correct the generated scripting variable type when tag is used with the "multiple" attribute.
    • <bean:message>: Added name, property, and scope attributes to the tag, so that the message source key can be obtained dynamically from a bean or bean property.

    HTML Taglib Package Additions

    The following new features have been added to the struts-html custom tag library [org.apache.struts.taglib.html]:

    • <options>: If the property specified by the 'property' attribute returns null, tag now throws an error message that indicates what the real problem is, rather than causing an NPE.
    • <html:option> and <html:options>: Added 'style' and 'styleClass' attributes.
    • <html:optionsCollection>: New tag providing a cleaner way of populating HTML options from a collection.
    • <bean:message>: Added 'name', 'property' and 'scope' attributes so that the message resource key can be obtained dynamically from a bean.
    • <html:messages>: New tag to iterate through a message collection in the new ActionMessages class.
    • ActionForm: Tag will now call reset() if it instantiates the ActionForm bean. This also requires that the bean instantiated by the tag to be an ActionForm subclass.
    • <html:image>: Added the 'align' attribute.
    • <html:img>: Added the mouse event attributes ('onclick', 'ondblclick', 'onmousedown', 'onmouseup', 'onmouseover', 'onmousemove', 'onmouseout').
    • SubmitTag, SelectTag, LinkTag.java, CheckboxTag, ButtonTag, ImageTag, RadioTag, and TextArea tags: Added indexed property.

    Logic Taglib Package Additions

    The following new features have been added to the struts-logic custom tag library [org.apache.struts.taglib.logic]:

    • <logic:empty> and <logic:notEmpty>: New tags that are similar to <logic:present> and <logic:notPresent> except for the treatment of empty strings.

    Template Taglib Package Additions

    The following new features have been added to the struts-template custom tag library [org.apache.struts.taglib.template]:

    • None.

    Documentation Additions

    The following new features have been added to the Struts Documentation application (and corresponding contents on the Struts web site):

    • Version Differences: New section in Release Notes to link to the JavaDocs for all Struts classes and members added or changed between versions.
    • User Guide Preface: New section to overview the enabling technologies behind Struts.
    • Developer Guides: Added "cover page" to guides. These then link to the Package Descriptions and the API guides.
    • HTML tag documentation: expanded to cover using indexed properties with iterate.
    • Site Menu: Removed separate links to taglib documentation, since these are now in the Developer Guide.
    • Newbie FAQ: The questions most likely to be asked by new developers using Struts. Still under development.
    • Kickstart FAQ: The questions most likely to be asked when selecting Struts.
    • 1.0 JavaDoc: Added archival copy to web site for future reference.
    • The UserGuide "Building" pages: General revisions to reflect new features and current practices.
    • Installation: Updated instructions for SilverStream and Resin. Add installation notes for Jetty. Added RexIP to list of nominal containers.
    • JavaDocs: New @since Struts 1.1 tag to indicate new packages, classes, and members added after the Struts 1.0.x version

    Struts Configuration Changes

    The following changes and bug fixes have occurred in the configuration files related to Struts:

    • Deprecated (Struts 0.5) configuration file format: Remove support.
    • Deprecated (Struts 0.5) methods: Remove from codebase.

    Added Config Package

    • ControllerConfig: Added inputForward property to indicate that ActionMapping.input is a forward rather than a URI.
    • ControllerConfig: Added forwardPattern and inputPattern to help manage page directories in application modules.
    • Added package to provide more flexibility in configuring the controller and to provide support for modular applications

    Action Package Changes

    The following changes and bug fixes have occurred in the basic controller framework (package org.apache.struts.action):

    • ActionMapping: input property may now refer to an ActionForward rather than a module-relative path if inputForward is set to true on the module's ControllerConfig bean [org.apache.struts.config.ControllerConfig.
    • ActionServlet: Added convertNull parameter to simulate the Struts 1.0 behavior when populating forms. If set to true, the numeric Java wrapper class types (like java.lang.Integer) will default to null (rather than 0).
    • ActionServlet: Added "config/$foo" parameter and deprecated several others in favor of components in the new config package.
    • ActionForms and related classes: now use a StringBuffer when responding a toString request in order to conserve resources.
    • LookupDispatchAction: Added standard Action to help select between internationalized buttons.
    • ActionForm class: Modified to use ActionServletWrapper rather than expose ActionServlet.
    • ActionServletWrapper class: Added for use by ActionForm to prevent the Public String properties of ActionServlet from being changed via a query string.
    • Action.MAPPING_KEY request attribute: Unconditionally pass the selected mapping as a request attribute ("org.apache.struts.action.mapping.instance") even if no form bean is specified.
    • ActionServlet: Avoid a NullPointerException in corner cases caused by failed initialization of servlet.
    • ActionForm class: Now truly serializable, because the two non-serializable instance variables (servlet and multipartRequestHandler) have been made transient. However, if you actually do serialize and deserialize such instances, it is your responsibility to reset these two properties.
    • ActionMessages and ActionErrors: The initial order a property/key is added in is now retained.

    Upload Package Changes

    The following changes and bug fixes have occurred in the file upload package (package org.apache.struts.upload):

    • CommonsMultipartRequestHandler: New implementation of file upload based on the Jakarta Commons FileUpload package. This new implementation is now the default.
    • BufferedMultipartInputStream: Fixed lost byte problem.
    • ArrayIndexOutOfBoundsException: Fixed situations where this was known to occur.
    • Multipart requests: Better reporting for premature closing of input streams while reading multipart requests.
    • New line characters: Additional fix for file corruption problem with uploads and new line characters.

    Utility Package Changes

    The following changes and bug fixes have occurred in the utilities (package org.apache.struts.util):

    • RequestUtils: Added support for forwardPattern, pagePattern, and inputForward properties on ControllerConfig.
    • GenericDataSource: Deprecated and modified to act as a thin wrapper around [org.apache.commons.dbpc.BasicDataSource]. Replaced by direct use of BasicDataSource or other compatible component.
    • RequestUtils class: Modify to use ActionServletWrapper rather than expose ActionServlet.
    • Added error message for the getActionErrors and getActionMessages method.
    • getActionErrors and getActionMessages: Added methods to generate the correct corresponding object based on the object retrieved from request scope based on the key passed in.
    • ActionErrors or ActionMessages: The logic for creating one of these objects has been moved to a utility method in RequestUtils.
    • JspException message: Now generated in RequestUtils.
    • ConvertUtils.convertCharacter(): Will now detect empty strings and return the default value.

    Bean Taglib Package Changes

    The following changes and bug fixes have occurred in the struts-bean custom tag library [org.apache.struts.taglib.bean]:

    • <html:errors>: When the property tag is specified, errors are no longer printed if the specified property has no errors. Previously errors were always printed ! Future enhancements would include additional attributes to always turn off the header or footer.
    • Made the remaining helper methods "protected" rather than "private".

    HTML Taglib Package Changes

    The following changes and bug fixes have occurred in the struts-html custom tag library (package org.apache.struts.taglib.html):

    • FormTag: Fixed to exclude query string when identifying action mapping name.
    • ImgTag: Correctly URLEncode the query string parameter value even if there is only a single parameter.
    • MultiboxTag.doAfterBody(): Corrected to return SKIP_BODY instead of SKIP_PAGE.

    Logic Taglib Package Changes

    The following changes and bug fixes have occurred in the struts-logic custom tag library (package org.apache.struts.taglib.logic):

    • None.

    Documentation Application Changes

    The following changes and bug fixes to the Struts Documentation application (and corresponding contents on the Struts web site) have occurred:

    • Reorganized Resources into separate pages..
    • In the Tag Developers Guide, add more detail regarding file upload requirements.
    • In Building View Components, clarify that additional i18n support may be provided by the browser, and is outside the scope of the framework.
    • In Building Controller Components, document 'validating' init-param, add defaults for various parameters, clarify that some web.xml settings are not Struts-specific.
    • Tag library documentation: Moved under User's Guide.
    • Reorganized to separate 1.0 material from nightly build material.

    MailReader Example Application Changes

    The following changes and bug fixes to the Struts MailReader Example Application have occurred:

    • Add Russian and Japanese translations of the application resources and set the character set for the example JSP pages to "UTF-8" so that it can display either English or Japanese.
    • Exchange "name" for "attribute" properties for Edit mappings in Struts configuration file.
    • Remove references to saving database data from "tour" document, since this functionality was removed.

    Template Example Application Changes

    The following changes and bug fixes to the Struts Template Example Application have occurred:

    • None.

    Exercise Taglib Example Application Changes

    The following changes and bug fixes to the Struts Exercise Taglib Example Application have occurred:

    • Added test case for <html:select> using <html:options> based on a collection saved in the page context.

    This section provides links to the Struts JavaDoc for any classes that have been added or deprecated since the Struts 1.0 release.

    Previously deprecated classes and packages removed in Struts 1.1

    • Removed: org.apache.struts.utils.BeanUtils, org.apache.struts.utils.ConvertUtils, and org.apache.struts.utils.PropertyUtils - replaced by org.apache.commons.beanutils
    • Removed: org.apache.struts.util.ArrayStack, org.apache.struts.util.FastArrayList, org.apache.struts.util.FastHashMap, org.apache.struts.util.FastTreeMap - replaced by org.apache.commons.collections
    • Removed: org.apache.struts.digester.* - replaced by org.apache.commons.digester
    • Removed: The struts-config.dtd - Replaced by struts-config_1_1.dtd.
    • Removed: The omnibus "struts" taglib and its associated TLD - replaced by separate bean, logic, and html taglibs.
    • Removed: The "form" taglib and its associated TLD - replaced by (renamed as) the html taglib.

    Packages added in Struts 1.1

    Classes added in Struts 1.1

    action

    actions

    taglib.html

    taglib.logic

    upload

    util

    Classes with members added in Struts 1.1

    action.Action

    • ACTION_SERVLET_KEY
    • APPLICATION_KEY
    • MESSAGE_KEY
    • PLUG_INS_KEY
    • REQUEST_PROCESSOR_KEY
    • execute
    • getResources(javax.servlet.http.HttpServletRequest)
    • saveMessages

    action.ActionServlet

    • configDigester
    • convertHack
    • log
    • processor
    • getInternal
    • destroyApplications
    • destroyConfigDigester
    • getApplicationConfig
    • getRequestProcessor
    • initApplicationConfig
    • initApplicationDataSources
    • initApplicationPlugIns
    • initApplicationMessageResources
    • initConfigDigester
    • methods created for backward-compatiblity only
      • defaultControllerConfig
      • defaultFormBeansConfig
      • defaultForwardsConfig
      • defaultMappingsConfig
      • defaultMessageResourcesConfig

    taglib.html.BaseHandlerTag

    • indexed
    • setIndexed
    • getIndexed

    Classes deprecated between Struts 1.0 and Struts 1.1

    action

    • ActionException
    • ActionFormBeans
    • ActionForwards
    • ActionMappings

    Classes with members deprecated between Struts 1.0 and Struts 1.1

    action.Action

    • FORM_BEANS_KEY
    • FORWARDS_KEY
    • MAPPINGS_KEY
    • getResources()
    • perform

    ActionServlet

    • findDataSource
    • findFormBean
    • findForward
    • findMapping
    • initDataSources
    • methods created for backward-compatiblity only
      • defaultControllerConfig
      • defaultFormBeansConfig
      • defaultForwardsConfig
      • defaultMappingsConfig
      • defaultMessageResourcesConfig

    Next: Installation

    The following known issues will be addressed before Final Release of Struts 1.1. The numbers in parentheses are for the corresponding entries in the Bugzilla bug tracking system.

    Custom Tags
    • The <html:form> tag generates incorrect JavaScript when the focus is to be set on a radio button. (#1586)
    Documentation
    • Some parts of the documentation are incomplete, especially for new features in this release. These sections are marked TODO. (#10537)
    Example Webapps
    • The struts-blank sample webapp fails to run due to problems accessing message resources. (#10955)
    Validator Framework
    • Validator generates incorrect JavaScript for the <select> element. (#7353)
    • Validator range checking supports only integer values, and not other numeric values such as floats and doubles. (#10191)
    • Validator does not work with Struts application modules other than the default module. (#10348)
    • Validator does not successfully validate empty date fields. (#10349)
    • Validator does not validate data when using DynaValidatorActionForm. (#10432)
    • Validator plugin does not correctly configure multiple validation files. (#10584)

    Next: Installation

    libstruts1.2-java-1.2.9/xdocs/userGuide/release-notes-1.1-b3.xml0000644000175000017500000010346210404045222024626 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Robert Leland Ted Husted Martin Cooper Struts Release Notes (Version 1.1 Beta 3)

    This section contains the release notes for nightly build of the Struts Framework, for changes that have taken place since Version 1.1 beta 2 was released. For a complete list of changes since the last production release, see the Introduction

    ApplicationConfig: In Struts 1.1. beta 3, the ApplicationConfig class is renamed to ModuleConfig, to conform with the venacular.

    Dyna*Form: In Struts 1.1. beta 3, the reset method was changed so that it conforms to the original ActionForm implementation.

    Blank application: Fixed configuration problem with Struts Blank application.

    The remainder of this document contains the release notes for nightly build of the Struts Framework, and covers changes that have taken place since Version 1.0.2 was released. The following sections cover New Features and Changes to Struts.

    The binary distribution of this release includes the following files relevant to Struts:

    • INSTALL - Brief installation instructions. See the Struts Documentation Application, or online at http://jakarta.apache.org/struts/ for more information.
    • LICENSE - The Apache Software Foundation license that defines the terms under which you can use Struts (and other software licensed by Apache).
    • README - A brief introduction to Struts.
    • lib/ - Directory containing files you will need in your own applications. The individual files of interest are:
      • commons-*.jar - Release packages from the Jakarta Commons Project that Struts relies on. You are welcome to use these classes in your own applications. These JAR files should be copied into the /WEB-INF/lib directory of your web application.
      • struts.jar - JAR file that contains the compiled Java classes of Struts. You must place this file in the /WEB-INF/lib directory of your web application.
      • struts-xxxxx.tld - The tag library descriptor files for the Struts 1.1 tag libraries (bean, html, logic, and template). You must place these files in the /WEB-INF directory of your web application, and reference them with appropriate <taglib> directives in your web.xml file.
      • jdbc2_0-stdext.jar - The JDBC 2.0 Optional Package API classes (package javax.sql). You will need to include this file in the /WEB-INF/lib directory of your application, if it is not already made visible to web applications by your servlet container.
      • struts-config_1_1.dtd - The document type descriptor (DTD) for the Struts 1.1 configuration file (which is typically named /WEB-INF/struts-config.xml. Your configuration file will be validated against an internal copy of this DTD -- this copy is available for reference purposes only.
      • struts-config_1_0.dtd - The document type descriptor (DTD) for the Struts 1.0 configuration file (which is typically named /WEB-INF/struts-config.xml. Your configuration file will be validated against an internal copy of this DTD -- this copy is available for reference purposes only.
      • web-app_2_2.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.2 specification. This copy is for reference purposes only.
      • web-app_2_3.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.3 specification. This copy is for reference purposes only.
    • webapps/ - Web Application Archive (WAR) files for the web applications that are included with Struts.

    Following are highlights of the new features. In the next section, we provide links to the JavaDocs for the affected classes.

    New Configuration DTD

    The Struts Configuration 1.0 DTD has been deprecated in favor of the struts-config_1_1.dtd. In the Struts 1.1 release, existing Struts configuration files can be loaded using either DTD version.

    New Dependencies on Commons packages

    Several components of Struts 1.0 have been found to be useful in general Java development (and not just useful for building Struts-based web applications), and have been migrated into the Jakarta Commons Project. As a result, the current development version of Struts has been modified to rely on the Commons packages containing these classes, rather than the Struts internal versions. In nearly every case, this involved changing only the import statements at the top of your classes. Any applications that utilize these classes will need to be modified in the same way.

    The following Commons packages contain the replacements for the corresponding Struts 1.0 classes:

    • BeanUtils Package [org.apache.commons.beanutils] - org.apache.struts.utils.BeanUtils, org.apache.struts.utils.ConvertUtils, and org.apache.struts.utils.PropertyUtils.
    • Collections Package [org.apache.commons.collections] - org.apache.struts.util.ArrayStack, org.apache.struts.util.FastArrayList, org.apache.struts.util.FastHashMap, org.apache.struts.util.FastTreeMap.
    • Digester Package - [org.apache.commons.digester] - org.apache.struts.digester.*.

    The following Commons packages are also now used by various components of the Struts framework:

    NOTE! XML Parser Prerequisite Updated

    Struts now depends on an XML parser that conforms to the JAXP/1.1 (rather than JAXP/1.0) APIs. Parsers known to work include the JAXP/1.1 reference implementation, and Xerces 1.3.1.

    SOURCE DEVELOPERS NOTE! Ant Prerequisite Updated

    To build Struts from source Ant 1.4 or later is now required. This does not affect developers that use Struts from the binary distribution.

    Struts Validator Integration

    The new Commons-Validator is now integrated with Struts and exposed through the new Validator package.

    Tiles - An advanced templating taglib

    The Tiles JSP assembly framework has been integrated with Struts.

    Nested - An very cool taglib extension

    The Nested taglib is bundled with Struts and enhances the functionality of the existing Struts tags.

    New Example Applications

    New example applications for the Validator and Tiles are now part of the Struts distribution.

    New Contrib directory for optional components

    A new directory (contrib) in the CVS source repository has been added to accumulate Struts add-on extensions that are generally useful but have not yet been integrated into the standard code base.

    • Scaffold - An extension of the Commons Scaffold toolkit of reusable classes for building web applications.
    • Struts-el - The optional Struts-el taglib makes it easy to use Struts with JSTL (container with servlet 2.3 support required).

    The source for these components is available in the Struts source distribution. Binary distributions may also be made available with the Struts download area. As optional components, these products have their own release cycles.

    Action Package Additions

    The following new features have been added to the basic controller framework [org.apache.struts.action]:

    • The ActionServlet now provides support for modular Struts applications and sports several new extension points.
    • The new ActionMessages class will support a superset of the capabilities of ActionErrors, and will be useful as a collection of general purpose messages, not just errors.

    Upload Package Additions

    The following new features have been added to the file upload classes [org.apache.struts.upload]:

    • CommonsMultipartRequestHandler: New class that implements file upload using the Jakarta Commons FileUpload package.

    Util Package Additions

    The following new features have been added to the utility classes [org.apache.struts.util]:

    • LocalStrings: Correct message regarding replaceable parameter so that it does not append an extraneous character.
    • LabelValueBean: New class that defines a collection of name/value pairs that can be used with the <html:options> tag, and elsewhere.
    • MessageResources: Escape any single quote characters that are included in the specified message string.
    • computeParameters: Allow a transaction token to be the only parameter in .
    • RequestUtils: Change to encode ampersands when building a query string.

    Bean Taglib Package Additions

    The following new features have been added to the struts-bean custom tag library [org.apache.struts.taglib.bean]:

    • <bean:write>: Add format, locale and bundle attributes to support formatting values according to current user locale, format string from attribute or format string from string resources.
    • <bean:cookie>, <bean:header>, or <bean:parameter>: Correct the generated scripting variable type when tag is used with the "multiple" attribute.
    • <bean:message>: Added name, property, and scope attributes to the tag, so that the message source key can be obtained dynamically from a bean or bean property.

    HTML Taglib Package Additions

    The following new features have been added to the struts-html custom tag library [org.apache.struts.taglib.html]:

    • <html:link>: Added 'action' attribute.
    • <html:options>: If the property specified by the 'property' attribute returns null, tag now throws an error message that indicates what the real problem is, rather than causing an NPE.
    • <html:option> and <html:options>: Added 'style' and 'styleClass' attributes.
    • <html:optionsCollection>: New tag providing a cleaner way of populating HTML options from a collection.
    • <bean:message>: Added 'name', 'property' and 'scope' attributes so that the message resource key can be obtained dynamically from a bean.
    • <html:messages>: New tag to iterate through a message collection in the new ActionMessages class.
    • ActionForm: Tag will now call reset() if it instantiates the ActionForm bean. This also requires that the bean instantiated by the tag to be an ActionForm subclass.
    • <html:image>: Added the 'align' attribute.
    • <html:img>: Added the mouse event attributes ('onclick', 'ondblclick', 'onmousedown', 'onmouseup', 'onmouseover', 'onmousemove', 'onmouseout').
    • SubmitTag, SelectTag, LinkTag.java, CheckboxTag, ButtonTag, ImageTag, RadioTag, and TextArea tags: Added indexed property.

    Logic Taglib Package Additions

    The following new features have been added to the struts-logic custom tag library [org.apache.struts.taglib.logic]:

    • <logic:empty> and <logic:notEmpty>: New tags that are similar to <logic:present> and <logic:notPresent> except for the treatment of empty strings.

    Template Taglib Package Additions

    The following new features have been added to the struts-template custom tag library [org.apache.struts.taglib.template]:

    • None.

    Documentation Additions

    The following new features have been added to the Struts Documentation application (and corresponding contents on the Struts web site):

    • Version Differences: New section in Release Notes to link to the JavaDocs for all Struts classes and members added or changed between versions.
    • FAQ/HowTos: New documentation category organizes our FAQs and example-driven howTos. New HowTos include "Building Applications", "Using SSL", and using Struts with Eclipse or NetBeans.
    • User Guide Preface: New section to overview the enabling technologies behind Struts.
    • Developer Guides: Added "cover page" to guides. These then link to the Package Descriptions and the API guides.
    • HTML tag documentation: expanded to cover using indexed properties with iterate.
    • Site Menu: Removed separate links to taglib documentation, since these are now in the Developer Guide.
    • Newbie FAQ: The questions most likely to be asked by new developers using Struts. Still under development.
    • Kickstart FAQ: The questions most likely to be asked when selecting Struts.
    • 1.0 JavaDoc: Added archival copy to web site for future reference.
    • The UserGuide "Building" pages: General revisions to reflect new features and current practices.
    • Installation: Updated instructions for SilverStream and Resin. Add installation notes for Jetty. Added RexIP to list of nominal containers.
    • JavaDocs: New @since Struts 1.1 tag to indicate new packages, classes, and members added after the Struts 1.0.x version

    Struts Configuration Changes

    The following changes and bug fixes have occurred in the configuration files related to Struts:

    • Deprecated (Struts 0.5) configuration file format: Remove support.
    • Deprecated (Struts 0.5) methods: Remove from codebase.

    Added Config Package

    • ControllerConfig: Added inputForward property to indicate that ActionMapping.input is a forward rather than a URI.
    • ControllerConfig: Added forwardPattern and inputPattern to help manage page directories in application modules.
    • Added package to provide more flexibility in configuring the controller and to provide support for modular applications

    Action Package Changes

    The following changes and bug fixes have occurred in the basic controller framework (package org.apache.struts.action):

    • ActionMapping: input property may now refer to an ActionForward rather than a module-relative path if inputForward is set to true on the module's ControllerConfig bean [org.apache.struts.config.ControllerConfig.
    • ActionServlet: Added convertNull parameter to simulate the Struts 1.0 behavior when populating forms. If set to true, the numeric Java wrapper class types (like java.lang.Integer) will default to null (rather than 0).
    • ActionServlet: Added "config/$foo" parameter and deprecated several others in favor of components in the new config package.
    • ActionForms and related classes: now use a StringBuffer when responding a toString request in order to conserve resources.
    • LookupDispatchAction: Added standard Action to help select between internationalized buttons.
    • ActionForm class: Modified to use ActionServletWrapper rather than expose ActionServlet.
    • ActionServletWrapper class: Added for use by ActionForm to prevent the Public String properties of ActionServlet from being changed via a query string.
    • Action.MAPPING_KEY request attribute: Unconditionally pass the selected mapping as a request attribute ("org.apache.struts.action.mapping.instance") even if no form bean is specified.
    • ActionServlet: Avoid a NullPointerException in corner cases caused by failed initialization of servlet.
    • ActionForm class: Now truly serializable, because the two non-serializable instance variables (servlet and multipartRequestHandler) have been made transient. However, if you actually do serialize and deserialize such instances, it is your responsibility to reset these two properties.
    • ActionMessages and ActionErrors: The initial order a property/key is added in is now retained.

    Upload Package Changes

    The following changes and bug fixes have occurred in the file upload package (package org.apache.struts.upload):

    • CommonsMultipartRequestHandler: New implementation of file upload based on the Jakarta Commons FileUpload package. This new implementation is now the default.
    • BufferedMultipartInputStream: Fixed lost byte problem.
    • ArrayIndexOutOfBoundsException: Fixed situations where this was known to occur.
    • Multipart requests: Better reporting for premature closing of input streams while reading multipart requests.
    • New line characters: Additional fix for file corruption problem with uploads and new line characters.

    Utility Package Changes

    The following changes and bug fixes have occurred in the utilities (package org.apache.struts.util):

    • RequestUtils: Added support for forwardPattern, pagePattern, and inputForward properties on ControllerConfig.
    • GenericDataSource: Deprecated and modified to act as a thin wrapper around [org.apache.commons.dbpc.BasicDataSource]. Replaced by direct use of BasicDataSource or other compatible component.
    • RequestUtils class: Modify to use ActionServletWrapper rather than expose ActionServlet.
    • Added error message for the getActionErrors and getActionMessages method.
    • getActionErrors and getActionMessages: Added methods to generate the correct corresponding object based on the object retrieved from request scope based on the key passed in.
    • ActionErrors or ActionMessages: The logic for creating one of these objects has been moved to a utility method in RequestUtils.
    • JspException message: Now generated in RequestUtils.
    • ConvertUtils.convertCharacter(): Will now detect empty strings and return the default value.

    Bean Taglib Package Changes

    The following changes and bug fixes have occurred in the struts-bean custom tag library [org.apache.struts.taglib.bean]:

    • <html:errors>: When the property tag is specified, errors are no longer printed if the specified property has no errors. Previously errors were always printed ! Future enhancements would include additional attributes to always turn off the header or footer.
    • Made the remaining helper methods "protected" rather than "private".

    HTML Taglib Package Changes

    The following changes and bug fixes have occurred in the struts-html custom tag library (package org.apache.struts.taglib.html):

    • FormTag: Fixed to exclude query string when identifying action mapping name.
    • ImgTag: Correctly URLEncode the query string parameter value even if there is only a single parameter.
    • MultiboxTag.doAfterBody(): Corrected to return SKIP_BODY instead of SKIP_PAGE.

    Logic Taglib Package Changes

    The following changes and bug fixes have occurred in the struts-logic custom tag library (package org.apache.struts.taglib.logic):

    • None.

    Documentation Application Changes

    The following changes and bug fixes to the Struts Documentation application (and corresponding contents on the Struts web site) have occurred:

    • Reorganized Resources into separate pages..
    • In the Tag Developers Guide, add more detail regarding file upload requirements.
    • In Building View Components, clarify that additional i18n support may be provided by the browser, and is outside the scope of the framework.
    • In Building Controller Components, document 'validating' init-param, add defaults for various parameters, clarify that some web.xml settings are not Struts-specific.
    • Tag library documentation: Moved under User's Guide.
    • Reorganized to separate 1.0 material from nightly build material.

    MailReader Example Application Changes

    The following changes and bug fixes to the Struts MailReader Example Application have occurred:

    • Add Russian and Japanese translations of the application resources and set the character set for the example JSP pages to "UTF-8" so that it can display either English or Japanese.
    • Exchange "name" for "attribute" properties for Edit mappings in Struts configuration file.
    • Remove references to saving database data from "tour" document, since this functionality was removed.

    Template Example Application Changes

    The following changes and bug fixes to the Struts Template Example Application have occurred:

    • None.

    Exercise Taglib Example Application Changes

    The following changes and bug fixes to the Struts Exercise Taglib Example Application have occurred:

    • Added test case for <html:link> using "action" attribute.
    • Added test case for <html:select> using <html:options> based on a collection saved in the page context.

    This section provides links to the Struts JavaDoc for any classes that have been added or deprecated since the Struts 1.0 release.

    Previously deprecated classes and packages removed in Struts 1.1

    • Removed: org.apache.struts.utils.BeanUtils, org.apache.struts.utils.ConvertUtils, and org.apache.struts.utils.PropertyUtils - replaced by org.apache.commons.beanutils
    • Removed: org.apache.struts.util.ArrayStack, org.apache.struts.util.FastArrayList, org.apache.struts.util.FastHashMap, org.apache.struts.util.FastTreeMap - replaced by org.apache.commons.collections
    • Removed: org.apache.struts.digester.* - replaced by org.apache.commons.digester
    • Removed: The struts-config.dtd - Replaced by struts-config_1_1.dtd.
    • Removed: The omnibus "struts" taglib and its associated TLD - replaced by separate bean, logic, and html taglibs.
    • Removed: The "form" taglib and its associated TLD - replaced by (renamed as) the html taglib.

    Packages added in Struts 1.1

    Classes added in Struts 1.1

    action

    actions

    taglib.html

    taglib.logic

    upload

    util

    Classes with members added in Struts 1.1

    action.Action

    • ACTION_SERVLET_KEY
    • APPLICATION_KEY
    • MESSAGE_KEY
    • PLUG_INS_KEY
    • REQUEST_PROCESSOR_KEY
    • execute
    • getResources(javax.servlet.http.HttpServletRequest)
    • saveMessages

    action.ActionServlet

    • configDigester
    • convertHack
    • log
    • processor
    • getInternal
    • destroyApplications
    • destroyConfigDigester
    • getApplicationConfig
    • getRequestProcessor
    • initApplicationConfig
    • initApplicationDataSources
    • initApplicationPlugIns
    • initApplicationMessageResources
    • initConfigDigester
    • methods created for backward-compatiblity only
      • defaultControllerConfig
      • defaultFormBeansConfig
      • defaultForwardsConfig
      • defaultMappingsConfig
      • defaultMessageResourcesConfig

    taglib.html.BaseHandlerTag

    • indexed
    • setIndexed
    • getIndexed

    Classes deprecated between Struts 1.0 and Struts 1.1

    action

    • ActionException
    • ActionFormBeans
    • ActionForwards
    • ActionMappings

    Classes with members deprecated between Struts 1.0 and Struts 1.1

    action.Action

    • FORM_BEANS_KEY
    • FORWARDS_KEY
    • MAPPINGS_KEY
    • getResources()
    • perform

    ActionServlet

    • findDataSource
    • findFormBean
    • findForward
    • findMapping
    • initDataSources
    • methods created for backward-compatiblity only
      • defaultControllerConfig
      • defaultFormBeansConfig
      • defaultForwardsConfig
      • defaultMappingsConfig
      • defaultMessageResourcesConfig

    Next: Installation

    libstruts1.2-java-1.2.9/xdocs/userGuide/release-notes-1.1-rc1.xml0000644000175000017500000010350010404045174025006 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Robert Leland Ted Husted Martin Cooper Struts Release Notes (Version 1.1 Release Candidate 1)

    This section contains the release notes for nightly build of the Struts Framework, for changes that have taken place since Version 1.1 beta 2 was released. For a complete list of changes since the last production release, see the Introduction

    ApplicationConfig: In Struts 1.1. beta 3, the ApplicationConfig class is renamed to ModuleConfig, to conform with the venacular.

    Dyna*Form: In Struts 1.1. beta 3, the reset method was changed so that it conforms to the original ActionForm implementation.

    Blank application: Fixed configuration problem with Struts Blank application.

    The remainder of this document contains the release notes for nightly build of the Struts Framework, and covers changes that have taken place since Version 1.0.2 was released. The following sections cover New Features and Changes to Struts.

    The binary distribution of this release includes the following files relevant to Struts:

    • INSTALL - Brief installation instructions. See the Struts Documentation Application, or online at http://jakarta.apache.org/struts/ for more information.
    • LICENSE - The Apache Software Foundation license that defines the terms under which you can use Struts (and other software licensed by Apache).
    • README - A brief introduction to Struts.
    • lib/ - Directory containing files you will need in your own applications. The individual files of interest are:
      • commons-*.jar - Release packages from the Jakarta Commons Project that Struts relies on. You are welcome to use these classes in your own applications. These JAR files should be copied into the /WEB-INF/lib directory of your web application.
      • struts.jar - JAR file that contains the compiled Java classes of Struts. You must place this file in the /WEB-INF/lib directory of your web application.
      • struts-xxxxx.tld - The tag library descriptor files for the Struts 1.1 tag libraries (bean, html, logic, and template). You must place these files in the /WEB-INF directory of your web application, and reference them with appropriate <taglib> directives in your web.xml file.
      • jdbc2_0-stdext.jar - The JDBC 2.0 Optional Package API classes (package javax.sql). You will need to include this file in the /WEB-INF/lib directory of your application, if it is not already made visible to web applications by your servlet container.
      • struts-config_1_1.dtd - The document type descriptor (DTD) for the Struts 1.1 configuration file (which is typically named /WEB-INF/struts-config.xml. Your configuration file will be validated against an internal copy of this DTD -- this copy is available for reference purposes only.
      • struts-config_1_0.dtd - The document type descriptor (DTD) for the Struts 1.0 configuration file (which is typically named /WEB-INF/struts-config.xml. Your configuration file will be validated against an internal copy of this DTD -- this copy is available for reference purposes only.
      • web-app_2_2.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.2 specification. This copy is for reference purposes only.
      • web-app_2_3.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.3 specification. This copy is for reference purposes only.
    • webapps/ - Web Application Archive (WAR) files for the web applications that are included with Struts.

    Following are highlights of the new features. In the next section, we provide links to the JavaDocs for the affected classes.

    New Configuration DTD

    The Struts Configuration 1.0 DTD has been deprecated in favor of the struts-config_1_1.dtd. In the Struts 1.1 release, existing Struts configuration files can be loaded using either DTD version.

    New Dependencies on Commons packages

    Several components of Struts 1.0 have been found to be useful in general Java development (and not just useful for building Struts-based web applications), and have been migrated into the Jakarta Commons Project. As a result, the current development version of Struts has been modified to rely on the Commons packages containing these classes, rather than the Struts internal versions. In nearly every case, this involved changing only the import statements at the top of your classes. Any applications that utilize these classes will need to be modified in the same way.

    The following Commons packages contain the replacements for the corresponding Struts 1.0 classes:

    • BeanUtils Package [org.apache.commons.beanutils] - org.apache.struts.utils.BeanUtils, org.apache.struts.utils.ConvertUtils, and org.apache.struts.utils.PropertyUtils.
    • Collections Package [org.apache.commons.collections] - org.apache.struts.util.ArrayStack, org.apache.struts.util.FastArrayList, org.apache.struts.util.FastHashMap, org.apache.struts.util.FastTreeMap.
    • Digester Package - [org.apache.commons.digester] - org.apache.struts.digester.*.

    The following Commons packages are also now used by various components of the Struts framework:

    NOTE! XML Parser Prerequisite Updated

    Struts now depends on an XML parser that conforms to the JAXP/1.1 (rather than JAXP/1.0) APIs. Parsers known to work include the JAXP/1.1 reference implementation, and Xerces 1.3.1.

    SOURCE DEVELOPERS NOTE! Ant Prerequisite Updated

    To build Struts from source Ant 1.4 or later is now required. This does not affect developers that use Struts from the binary distribution.

    Struts Validator Integration

    The new Commons-Validator is now integrated with Struts and exposed through the new Validator package.

    Tiles - An advanced templating taglib

    The Tiles JSP assembly framework has been integrated with Struts.

    Nested - An very cool taglib extension

    The Nested taglib is bundled with Struts and enhances the functionality of the existing Struts tags.

    New Example Applications

    New example applications for the Validator and Tiles are now part of the Struts distribution.

    New Contrib directory for optional components

    A new directory (contrib) in the CVS source repository has been added to accumulate Struts add-on extensions that are generally useful but have not yet been integrated into the standard code base.

    • Scaffold - An extension of the Commons Scaffold toolkit of reusable classes for building web applications.
    • Struts-el - The optional Struts-el taglib makes it easy to use Struts with JSTL (container with servlet 2.3 support required).

    The source for these components is available in the Struts source distribution. Binary distributions may also be made available with the Struts download area. As optional components, these products have their own release cycles.

    Action Package Additions

    The following new features have been added to the basic controller framework [org.apache.struts.action]:

    • The ActionServlet now provides support for modular Struts applications and sports several new extension points.
    • The new ActionMessages class will support a superset of the capabilities of ActionErrors, and will be useful as a collection of general purpose messages, not just errors.

    Upload Package Additions

    The following new features have been added to the file upload classes [org.apache.struts.upload]:

    • CommonsMultipartRequestHandler: New class that implements file upload using the Jakarta Commons FileUpload package.

    Util Package Additions

    The following new features have been added to the utility classes [org.apache.struts.util]:

    • LocalStrings: Correct message regarding replaceable parameter so that it does not append an extraneous character.
    • LabelValueBean: New class that defines a collection of name/value pairs that can be used with the <html:options> tag, and elsewhere.
    • MessageResources: Escape any single quote characters that are included in the specified message string.
    • computeParameters: Allow a transaction token to be the only parameter in .
    • RequestUtils: Change to encode ampersands when building a query string.

    Bean Taglib Package Additions

    The following new features have been added to the struts-bean custom tag library [org.apache.struts.taglib.bean]:

    • <bean:write>: Add format, locale and bundle attributes to support formatting values according to current user locale, format string from attribute or format string from string resources.
    • <bean:cookie>, <bean:header>, or <bean:parameter>: Correct the generated scripting variable type when tag is used with the "multiple" attribute.
    • <bean:message>: Added name, property, and scope attributes to the tag, so that the message source key can be obtained dynamically from a bean or bean property.

    HTML Taglib Package Additions

    The following new features have been added to the struts-html custom tag library [org.apache.struts.taglib.html]:

    • <html:link>: Added 'action' attribute.
    • <html:options>: If the property specified by the 'property' attribute returns null, tag now throws an error message that indicates what the real problem is, rather than causing an NPE.
    • <html:option> and <html:options>: Added 'style' and 'styleClass' attributes.
    • <html:optionsCollection>: New tag providing a cleaner way of populating HTML options from a collection.
    • <bean:message>: Added 'name', 'property' and 'scope' attributes so that the message resource key can be obtained dynamically from a bean.
    • <html:messages>: New tag to iterate through a message collection in the new ActionMessages class.
    • ActionForm: Tag will now call reset() if it instantiates the ActionForm bean. This also requires that the bean instantiated by the tag to be an ActionForm subclass.
    • <html:image>: Added the 'align' attribute.
    • <html:img>: Added the mouse event attributes ('onclick', 'ondblclick', 'onmousedown', 'onmouseup', 'onmouseover', 'onmousemove', 'onmouseout').
    • SubmitTag, SelectTag, LinkTag.java, CheckboxTag, ButtonTag, ImageTag, RadioTag, and TextArea tags: Added indexed property.

    Logic Taglib Package Additions

    The following new features have been added to the struts-logic custom tag library [org.apache.struts.taglib.logic]:

    • <logic:empty> and <logic:notEmpty>: New tags that are similar to <logic:present> and <logic:notPresent> except for the treatment of empty strings.

    Template Taglib Package Additions

    The following new features have been added to the struts-template custom tag library [org.apache.struts.taglib.template]:

    • None.

    Documentation Additions

    The following new features have been added to the Struts Documentation application (and corresponding contents on the Struts web site):

    • Version Differences: New section in Release Notes to link to the JavaDocs for all Struts classes and members added or changed between versions.
    • FAQ/HowTos: New documentation category organizes our FAQs and example-driven howTos. New HowTos include "Building Applications", "Using SSL", and using Struts with Eclipse or NetBeans.
    • User Guide Preface: New section to overview the enabling technologies behind Struts.
    • Developer Guides: Added "cover page" to guides. These then link to the Package Descriptions and the API guides.
    • HTML tag documentation: expanded to cover using indexed properties with iterate.
    • Site Menu: Removed separate links to taglib documentation, since these are now in the Developer Guide.
    • Newbie FAQ: The questions most likely to be asked by new developers using Struts. Still under development.
    • Kickstart FAQ: The questions most likely to be asked when selecting Struts.
    • 1.0 JavaDoc: Added archival copy to web site for future reference.
    • The UserGuide "Building" pages: General revisions to reflect new features and current practices.
    • Installation: Updated instructions for SilverStream and Resin. Add installation notes for Jetty. Added RexIP to list of nominal containers.
    • JavaDocs: New @since Struts 1.1 tag to indicate new packages, classes, and members added after the Struts 1.0.x version

    Struts Configuration Changes

    The following changes and bug fixes have occurred in the configuration files related to Struts:

    • Deprecated (Struts 0.5) configuration file format: Remove support.
    • Deprecated (Struts 0.5) methods: Remove from codebase.

    Added Config Package

    • ControllerConfig: Added inputForward property to indicate that ActionMapping.input is a forward rather than a URI.
    • ControllerConfig: Added forwardPattern and inputPattern to help manage page directories in application modules.
    • Added package to provide more flexibility in configuring the controller and to provide support for modular applications

    Action Package Changes

    The following changes and bug fixes have occurred in the basic controller framework (package org.apache.struts.action):

    • ActionMapping: input property may now refer to an ActionForward rather than a module-relative path if inputForward is set to true on the module's ControllerConfig bean [org.apache.struts.config.ControllerConfig.
    • ActionServlet: Added convertNull parameter to simulate the Struts 1.0 behavior when populating forms. If set to true, the numeric Java wrapper class types (like java.lang.Integer) will default to null (rather than 0).
    • ActionServlet: Added "config/$foo" parameter and deprecated several others in favor of components in the new config package.
    • ActionForms and related classes: now use a StringBuffer when responding a toString request in order to conserve resources.
    • LookupDispatchAction: Added standard Action to help select between internationalized buttons.
    • ActionForm class: Modified to use ActionServletWrapper rather than expose ActionServlet.
    • ActionServletWrapper class: Added for use by ActionForm to prevent the Public String properties of ActionServlet from being changed via a query string.
    • Action.MAPPING_KEY request attribute: Unconditionally pass the selected mapping as a request attribute ("org.apache.struts.action.mapping.instance") even if no form bean is specified.
    • ActionServlet: Avoid a NullPointerException in corner cases caused by failed initialization of servlet.
    • ActionForm class: Now truly serializable, because the two non-serializable instance variables (servlet and multipartRequestHandler) have been made transient. However, if you actually do serialize and deserialize such instances, it is your responsibility to reset these two properties.
    • ActionMessages and ActionErrors: The initial order a property/key is added in is now retained.

    Upload Package Changes

    The following changes and bug fixes have occurred in the file upload package (package org.apache.struts.upload):

    • CommonsMultipartRequestHandler: New implementation of file upload based on the Jakarta Commons FileUpload package. This new implementation is now the default.
    • BufferedMultipartInputStream: Fixed lost byte problem.
    • ArrayIndexOutOfBoundsException: Fixed situations where this was known to occur.
    • Multipart requests: Better reporting for premature closing of input streams while reading multipart requests.
    • New line characters: Additional fix for file corruption problem with uploads and new line characters.

    Utility Package Changes

    The following changes and bug fixes have occurred in the utilities (package org.apache.struts.util):

    • RequestUtils: Added support for forwardPattern, pagePattern, and inputForward properties on ControllerConfig.
    • GenericDataSource: Deprecated and modified to act as a thin wrapper around [org.apache.commons.dbpc.BasicDataSource]. Replaced by direct use of BasicDataSource or other compatible component.
    • RequestUtils class: Modify to use ActionServletWrapper rather than expose ActionServlet.
    • Added error message for the getActionErrors and getActionMessages method.
    • getActionErrors and getActionMessages: Added methods to generate the correct corresponding object based on the object retrieved from request scope based on the key passed in.
    • ActionErrors or ActionMessages: The logic for creating one of these objects has been moved to a utility method in RequestUtils.
    • JspException message: Now generated in RequestUtils.
    • ConvertUtils.convertCharacter(): Will now detect empty strings and return the default value.

    Bean Taglib Package Changes

    The following changes and bug fixes have occurred in the struts-bean custom tag library [org.apache.struts.taglib.bean]:

    • <html:errors>: When the property tag is specified, errors are no longer printed if the specified property has no errors. Previously errors were always printed ! Future enhancements would include additional attributes to always turn off the header or footer.
    • Made the remaining helper methods "protected" rather than "private".

    HTML Taglib Package Changes

    The following changes and bug fixes have occurred in the struts-html custom tag library (package org.apache.struts.taglib.html):

    • FormTag: Fixed to exclude query string when identifying action mapping name.
    • ImgTag: Correctly URLEncode the query string parameter value even if there is only a single parameter.
    • MultiboxTag.doAfterBody(): Corrected to return SKIP_BODY instead of SKIP_PAGE.

    Logic Taglib Package Changes

    The following changes and bug fixes have occurred in the struts-logic custom tag library (package org.apache.struts.taglib.logic):

    • None.

    Documentation Application Changes

    The following changes and bug fixes to the Struts Documentation application (and corresponding contents on the Struts web site) have occurred:

    • Reorganized Resources into separate pages..
    • In the Tag Developers Guide, add more detail regarding file upload requirements.
    • In Building View Components, clarify that additional i18n support may be provided by the browser, and is outside the scope of the framework.
    • In Building Controller Components, document 'validating' init-param, add defaults for various parameters, clarify that some web.xml settings are not Struts-specific.
    • Tag library documentation: Moved under User's Guide.
    • Reorganized to separate 1.0 material from nightly build material.

    MailReader Example Application Changes

    The following changes and bug fixes to the Struts MailReader Example Application have occurred:

    • Add Russian and Japanese translations of the application resources and set the character set for the example JSP pages to "UTF-8" so that it can display either English or Japanese.
    • Exchange "name" for "attribute" properties for Edit mappings in Struts configuration file.
    • Remove references to saving database data from "tour" document, since this functionality was removed.

    Template Example Application Changes

    The following changes and bug fixes to the Struts Template Example Application have occurred:

    • None.

    Exercise Taglib Example Application Changes

    The following changes and bug fixes to the Struts Exercise Taglib Example Application have occurred:

    • Added test case for <html:link> using "action" attribute.
    • Added test case for <html:select> using <html:options> based on a collection saved in the page context.

    This section provides links to the Struts JavaDoc for any classes that have been added or deprecated since the Struts 1.0 release.

    Previously deprecated classes and packages removed in Struts 1.1

    • Removed: org.apache.struts.utils.BeanUtils, org.apache.struts.utils.ConvertUtils, and org.apache.struts.utils.PropertyUtils - replaced by org.apache.commons.beanutils
    • Removed: org.apache.struts.util.ArrayStack, org.apache.struts.util.FastArrayList, org.apache.struts.util.FastHashMap, org.apache.struts.util.FastTreeMap - replaced by org.apache.commons.collections
    • Removed: org.apache.struts.digester.* - replaced by org.apache.commons.digester
    • Removed: The struts-config.dtd - Replaced by struts-config_1_1.dtd.
    • Removed: The omnibus "struts" taglib and its associated TLD - replaced by separate bean, logic, and html taglibs.
    • Removed: The "form" taglib and its associated TLD - replaced by (renamed as) the html taglib.

    Packages added in Struts 1.1

    Classes added in Struts 1.1

    action

    actions

    taglib.html

    taglib.logic

    upload

    util

    Classes with members added in Struts 1.1

    action.Action

    • ACTION_SERVLET_KEY
    • APPLICATION_KEY
    • MESSAGE_KEY
    • PLUG_INS_KEY
    • REQUEST_PROCESSOR_KEY
    • execute
    • getResources(javax.servlet.http.HttpServletRequest)
    • saveMessages

    action.ActionServlet

    • configDigester
    • convertHack
    • log
    • processor
    • getInternal
    • destroyApplications
    • destroyConfigDigester
    • getApplicationConfig
    • getRequestProcessor
    • initApplicationConfig
    • initApplicationDataSources
    • initApplicationPlugIns
    • initApplicationMessageResources
    • initConfigDigester
    • methods created for backward-compatiblity only
      • defaultControllerConfig
      • defaultFormBeansConfig
      • defaultForwardsConfig
      • defaultMappingsConfig
      • defaultMessageResourcesConfig

    taglib.html.BaseHandlerTag

    • indexed
    • setIndexed
    • getIndexed

    Classes deprecated between Struts 1.0 and Struts 1.1

    action

    • ActionException
    • ActionFormBeans
    • ActionForwards
    • ActionMappings

    Classes with members deprecated between Struts 1.0 and Struts 1.1

    action.Action

    • FORM_BEANS_KEY
    • FORWARDS_KEY
    • MAPPINGS_KEY
    • getResources()
    • perform

    ActionServlet

    • findDataSource
    • findFormBean
    • findForward
    • findMapping
    • initDataSources
    • methods created for backward-compatiblity only
      • defaultControllerConfig
      • defaultFormBeansConfig
      • defaultForwardsConfig
      • defaultMappingsConfig
      • defaultMessageResourcesConfig

    Next: Installation

    libstruts1.2-java-1.2.9/xdocs/userGuide/release-notes-1.1-rc2.xml0000644000175000017500000013367510404045234025024 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Robert Leland Ted Husted Martin Cooper Struts Release Notes (Version 1.1 Release Candidate 1)

    This section contains the release notes for the Version 1.1 Release Candidate 2 build of the Struts Framework, for changes that have taken place since Version 1.1 Release Candidate 1 was issued. For a complete list of changes since the last production release, see the Introduction

    In RC2, the Commons-DBCP and Commons-Pool dependencies have been removed. These are replaced with a dependency on the Struts-Legacy package, containing the GenericDataSource and GenericConnection classes from Struts 1.0.2. These are distributed for J2SE 1.3 but may be recompiled for J2SE 1.4. Other DataSource implementations may be plugged in (recommended).

    RC2 is dependent upon Commons FileUpload RC1. The final release of Struts 1.1 cannot happen until this dependency is updated to a final release of FileUpload. All other dependencies are in their final release.

    Other changes since RC1 have been routine fixes and refactorings.

    OTHER CHANGES:

    Action package: Deprecated processActionForward() because ActionForward is a subclass of ForwardConfig so there's no reason we can't use processForwardConfig() instead. Updated to use processForwardConfig instead of deprecated processActionForward. Deprecated the rest of the Action constants in favor of Globals. Refactored some of initModuleConfig into a separate method and cleaned up. Improved exception handling in ActionServlet and RequestProcessor; generally, we limited the scope of try/catch blocks and caught specific exceptions rather than Throwable.

    Documentation: Document the <html:html> tag's locale attribute behaviour of creating a session if needed. Added note to validator section regarding the converNull servlet parameter and required validations of java.lang.Integer fields. Moved sites and consultants page to Struts Wiki. Other minor tweaks.

    EL package: Fixed mapping of "onkeypress" attribute. Separated "expr" attribute into "expr" and "exprValue", being the original attribute value and the evaluated value. Fixed probably long-standing bug in notMatch tag that made it behave identically to the "match" tag (instead of the reverse).

    Example applicattions: Added Multi-config files for the example app.

    Legacy package: Added package under contrib to host old GenericDataSource and GenericConnection classes.

    Taglibs packages: Fixed several import statements. Refactored converting a scope name into its integer constant into a new method RequestUtils.getScope(String), and changed the DefineTag, EmptyTag, and TagUtils classes to use the new method.

    faces taglib. Added early release to contrib area.

    html taglib. Reset the 'processed' flag at the beginning of each usage of the tag. Use a local copy of the 'name' attribute to avoid modifying the attribute value itself. Fixed references to static members. For FrameTag and HiddenTag, conform TLD with implementations. In ErrorsTag, render a platform-independent line ending instead of hard coded "\r\n". In JavaScriptValidatorTag, make the line-end generation platform independent so that Cactus tests work properly. In FormTag, refactored code into smaller reusable methods. In RewriteTag, encode the ampersand character in XHTML mode only, otherwise write the ampersand as is so the URL will work in JavaScript scripts. Refactored form bean initialization out of doStartTag() into its own method. Refactored doStartTag() 'if' statement to avoid having long nested 'if' logic. In ErrorTag, fixed formatting and deprecated unused defaultLocale variable. Refactored doStartTag() and doEndTag() into smaller methods. Moved xhtml check to RequestUtils instead of duplicating the logic in many different classes. Added lookupProperty() method to BaseHandlerTag because both RadioTag and TextareaTag used the same code. Refactored TextareaTag into smaller methods. In JavaScriptValidatorTag, replaced duplicated code with call to RequestUtils.retrieveUserLocale() and simplified an 'if' statement.

    logic taglib. Set 'iterator' to null in doEndTag() so that we release the iterator reference as early as possible. We cannot do the same for 'collection' since it is a tag attribute, and needs to remain unchanged to comply with the JSP spec. Don't create empty cookies array if null, just don't run the loop at all. In ForwardTag, remove unnecessary test for null.

    nested tablibs. Improved support for Tomcat 4.1.18. Replace EVAL_BODY_AGAIN with EVAL_BODY_TAG so that the code compiles against the JSP 1.1 API. Changed the <nested:define> tag's tei class to reference a new custom tei class for the nested tags.

    tiles taglib. Fixed references to static members. Deprecated outdated Tiles TextTag. For InsertTag, only include page if it's non-null. For InserTag, remove page check before including for more investigation.

    Test packages: Added several new tests for the bean, html, and logic taglibs to the suite setup at the tail-end of RC1. Note: We cannot resolve request.getServerPort() in the Cactus 1.4.x environment, so for now, our tests will only run on Cactus 1.3

    Tiles package: Deprecated TilesUtil.applicationClass() in favor of RequestUtils.applicationClass()

    Util package: retrieveUserLocale now uses the request.getLocale() method for finding the user's preferred locale. If user has not specified this with Accept-Language header, the server default locale is used. Change encodeURL() to not use reflection on every call. In RequestUtils, simplified separator logic in computeURL().

    Validator package: Deprecate logging methods and indicate that commons-logging should be used. Logic simplification and minor formatting fixes to Resources class.

    build files:

    • (build.properties.sample) Add an entry for http-unit.
    • Remove dependency on Commons Resources for Struts 1.1 release. (This migration will happen later).
    • Make it possible to build Struts against the Servlet 2.4 and JSP 2.0 APIs, where the JSP classes have been pulled out into their own JAR file (jsp.jar). On an earlier platform, you can leave the "jsp.jar" property unset and thing will continue to operate as they have before.

    Bugzilla Problem Report fixes:

    • Fixed #17312 - retrieveUserLocale throws exception without sessions.
    • Fixed #17254 - If body text is empty and there's no resource key to lookup, display nothing in the option.
    • Fixed #17371- The tag now uses RequestUtils.retrieveUserLocale for looking up the appropriate locale. Using that method protects us from needlessly creating a session.
    • Fixed #17375 - Problem in ELErrorsTag because the "name" attribute of ErrorsTag has a non-null default value.
    • Fixed #17622 - validator-rules.xml issues.
    • Fixed #17299 - Set page variable from dyna map before validating.
    • Fixed #17838 - Help debug specific user errors by showing quotes around the key that is in error (missing or mispelled).
    • Fixed #17833 - validateShort and isAllDigits for negative numbers.
    • Fixed #17328 - Synchronized loadLocale.
    • Fixed #18018 - Changed field-* variables to camel case and no "-".
    • Fixed #16548 - validateMinLength and validateMaxLength are now independent of the required check.
    • Fixed #17389 - Splice in the I18nFactorySet.calculatePostixes from the attachment, rebuild, and ran the unit tests successfully.
    • Fixed #17273 - Removed extra return statement (RequestUtils).
    • Fixed #17592 - Tag should support a "naked" collection that is not a property of a bean.
    • Fixed #17592 - Made "property" attribute of "optionsCollection" tag be not required, to match same change made for #17592 in base tag.
    • Fixed #17562 - Change the InsertTag to let it use PageContext.include() instead of RequestDispatcher.include(). We are no back to the same mechanism used in the 1.1b3 release.
    • Fixed #18186 - Use temp variable instead of overwriting tag attribute variable.
    • Fixed #18394 - Changed error to info log if DefinitionsFactory is not supplied.
    • Fixed #18538 - Changed shortname to "tiles".
    • Fixed #18591 - Braces placement in message().
    • Fixed #18018 - Don't output requiredif field* javascript variables because they're not used and break other validations.
    • Fixed #18794 -Check ServletContext for ModuleConfig instead of request.
    • Fixed #18864 - Changed Class-Path to conform to jar spec. The previous patch fixing a bug in WebLogic caused warnings in Resin.
    • Fixed #18991 - Allow messages object passed to add(ActionMessages) to be null.
    • Fixed #19040 - Added null checks back to ActionServlet.
    • Fixed #19157 - Implement Serializable in NestedReference.
    • Fixed #18869 - Added display-name to web.xml files.
    • Fixed #19223 - Synchronized token methods for PR. Post 1.1 these methods should be moved to some kind of TokenProcessor class for reusability by other components such as the RequestProcessor (#16743).
    • Fixed #19236 - Added "action" attribute to "html-el:frame" tag.
    • Fixed #11932 - Factored common code out of message() and present() into a new private method retrieveMessageResources.
    • Fixed #11922 - Moved Action's token methods to this new class to fix synchronization issues and allow Action to be more focused.
    • Fixed #19594 - Fixed minlength javascript for PR. Also, removed password field checking from validateMask.
    • Fixed #19773 - EmptyTag and added test to exercise-taglib webapp.
    • Fixed #19835 - Add check against -1 to maxSize.
    • Fixed #20034 - Call releaseInternal() in release() so if error occurs between begin/end of tag next user/request will not be working with old parameters.
    • Fixed #20455 - validateRequiredIf() fails on Strings of whitespace.

    The remainder of this document contains the release notes for 1.1 Release Candidate 2 build of the Struts Framework, and covers changes that have taken place since Version 1.0.2 was released. The following sections cover New Features and Changes to Struts.

    The binary distribution of this release includes the following files relevant to Struts:

    • INSTALL - Brief installation instructions. See the Struts Documentation Application, or online at http://jakarta.apache.org/struts/, for more information.
    • LICENSE - The Apache Software Foundation license that defines the terms under which you can use Struts (and other software licensed by Apache).
    • README - A brief introduction to Struts.
    • lib/ - Directory containing files you will need in your own applications. The individual files of interest are:
      • commons-*.jar - Release packages from the Jakarta Commons Project that Struts relies on. You are welcome to use these classes in your own applications. These JAR files should be copied into the /WEB-INF/lib directory of your web application. See below for the version of each Commons library that is included.
      • struts.jar - JAR file that contains the compiled Java classes of Struts. You must place this file in the /WEB-INF/lib directory of your web application.
      • struts-xxxxx.tld - The tag library descriptor files for the Struts 1.1 tag libraries (bean, html, logic, and template). You must place these files in the /WEB-INF directory of your web application, and reference them with appropriate <taglib> directives in your web.xml file.
      • jdbc2_0-stdext.jar - The JDBC 2.0 Optional Package API classes (package javax.sql). You will need to include this file in the /WEB-INF/lib directory of your application, if it is not already made visible to web applications by your servlet container.
      • struts-config_1_1.dtd - The document type descriptor (DTD) for the Struts 1.1 configuration file (which is typically named /WEB-INF/struts-config.xml). Your configuration file will be validated against an internal copy of this DTD -- this copy is available for reference purposes only.
      • struts-config_1_0.dtd - The document type descriptor (DTD) for the Struts 1.0 configuration file (which is typically named /WEB-INF/struts-config.xml). Your configuration file will be validated against an internal copy of this DTD -- this copy is available for reference purposes only.
      • web-app_2_2.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.2 specification. This copy is for reference purposes only.
      • web-app_2_3.dtd - The document type descriptor (DTD) for web.xml files conforming to the Servlet 2.3 specification. This copy is for reference purposes only.
    • webapps/ - Web Application Archive (WAR) files for the web applications that are included with Struts.

    The following Jakarta Commons libraries are included with this release of Struts:

    • Commons BeanUtils 1.6.1
    • Commons Collections 2.1
    • Commons Digester 1.5
    • Commons FileUpload 1.0 RC1
    • Commons Lang 1.0.1
    • Commons Logging 1.0.3
    • Commons Validator 1.0.2

    Following are highlights of the new features. In the next section, we provide links to the JavaDocs for the affected classes.

    New Configuration DTD

    The Struts Configuration 1.0 DTD has been deprecated in favor of the struts-config_1_1.dtd. In the Struts 1.1 release, existing Struts configuration files can be loaded using either DTD version.

    New Dependencies on Commons packages

    Several components of Struts 1.0 have been found to be useful in general Java development (and not just useful for building Struts-based web applications), and have been migrated into the Jakarta Commons Project. As a result, this release of Struts has been modified to rely on the Commons packages containing these classes, rather than the Struts internal versions. In nearly every case, this involved changing only the import statements at the top of the classes. Any of your applications that utilize these classes will need to be modified in the same way.

    The following Commons packages contain the replacements for the corresponding Struts 1.0 classes:

    • BeanUtils Package [org.apache.commons.beanutils] - org.apache.struts.utils.BeanUtils, org.apache.struts.utils.ConvertUtils, and org.apache.struts.utils.PropertyUtils.
    • Collections Package [org.apache.commons.collections] - org.apache.struts.util.ArrayStack, org.apache.struts.util.FastArrayList, org.apache.struts.util.FastHashMap, org.apache.struts.util.FastTreeMap.
    • Digester Package - [org.apache.commons.digester] - org.apache.struts.digester.*.

    The following Commons packages are also now used by various components of the Struts framework:

    NOTE! XML Parser Prerequisite Updated

    Struts now depends on an XML parser that conforms to the JAXP/1.1 (rather than JAXP/1.0) APIs. Parsers known to work include the JAXP/1.1 reference implementation, and Xerces 1.3.1.

    SOURCE DEVELOPERS NOTE! Ant Prerequisite Updated

    To build Struts from source Ant 1.4 or later is now required. This does not affect developers that use Struts from the binary distribution.

    Struts Validator Integration

    The new Commons Validator is now integrated with Struts and exposed through the new Validator package.

    Tiles - An advanced templating taglib

    The Tiles JSP assembly framework has been integrated with Struts.

    Nested - An very cool taglib extension

    The Nested taglib is bundled with Struts and enhances the functionality of the existing Struts tags.

    New Example Applications

    New example applications for the Validator and Tiles are now part of the Struts distribution.

    New Contrib directory for optional components

    A new directory (contrib) in the CVS source repository has been added to accumulate Struts add-on extensions that are generally useful but have not yet been integrated into the standard code base.

    • Scaffold - An extension of the Commons Scaffold toolkit of reusable classes for building web applications.
    • Struts-EL - The optional Struts-EL taglib makes it easy to use Struts with JSTL. (Container with Servlet 2.3 support required.)

    The source for these components is available in the Struts source distribution. Binary distributions may also be made available in the Struts download area. As optional components, these products have their own release cycles.

    Action Package Additions

    The following new features have been added to the basic controller framework [org.apache.struts.action]:

    • The ActionServlet now provides support for modular Struts applications and sports several new extension points.
    • The new ActionMessages class will support a superset of the capabilities of ActionErrors, and will be useful as a collection of general purpose messages, not just errors.

    Upload Package Additions

    The following new features have been added to the file upload classes [org.apache.struts.upload]:

    • CommonsMultipartRequestHandler: New class that implements file upload using the Jakarta Commons FileUpload package. This is now the default file upload implementation for Struts.

    Util Package Additions

    The following new features have been added to the utility classes [org.apache.struts.util]:

    • LocalStrings: Correct message regarding replaceable parameter so that it does not append an extraneous character.
    • LabelValueBean: New class that defines a collection of name/value pairs that can be used with the <html:options> and <html:optionsCollection> tags, and elsewhere.
    • MessageResources: Escape any single quote characters that are included in the specified message string.
    • computeParameters: Allow a transaction token to be the only parameter.
    • RequestUtils: Change to encode ampersands when building a query string.

    Bean Taglib Package Additions

    The following new features have been added to the struts-bean custom tag library [org.apache.struts.taglib.bean]:

    • <bean:write>: Add format, locale and bundle attributes to support formatting values according to current user locale, format string from attribute or format string from string resources.
    • <bean:cookie>, <bean:header>, or <bean:parameter>: Correct the generated scripting variable type when tag is used with the "multiple" attribute.
    • <bean:message>: Added name, property, and scope attributes to the tag, so that the message source key can be obtained dynamically from a bean or bean property.

    HTML Taglib Package Additions

    The following new features have been added to the struts-html custom tag library [org.apache.struts.taglib.html]:

    • <html:link>: Added 'action' attribute.
    • <html:options>: If the property specified by the 'property' attribute returns null, tag now throws an error message that indicates what the real problem is, rather than causing an NPE.
    • <html:option> and <html:options>: Added 'style' and 'styleClass' attributes.
    • <html:optionsCollection>: New tag providing a cleaner way of populating HTML options from a collection.
    • <bean:message>: Added 'name', 'property' and 'scope' attributes so that the message resource key can be obtained dynamically from a bean.
    • <html:messages>: New tag to iterate through a message collection in the new ActionMessages class.
    • ActionForm: Tag will now call reset() if it instantiates the ActionForm bean. This also requires that the bean instantiated by the tag to be an ActionForm subclass.
    • <html:image>: Added the 'align' attribute.
    • <html:img>: Added the mouse event attributes ('onclick', 'ondblclick', 'onmousedown', 'onmouseup', 'onmouseover', 'onmousemove', 'onmouseout').
    • SubmitTag, SelectTag, LinkTag.java, CheckboxTag, ButtonTag, ImageTag, RadioTag, and TextArea tags: Added indexed property.

    Logic Taglib Package Additions

    The following new features have been added to the struts-logic custom tag library [org.apache.struts.taglib.logic]:

    • <logic:empty> and <logic:notEmpty>: New tags that are similar to <logic:present> and <logic:notPresent> except for the treatment of empty strings.

    Template Taglib Package Additions

    The following new features have been added to the struts-template custom tag library [org.apache.struts.taglib.template]:

    • None.

    Documentation Additions

    The following new features have been added to the Struts Documentation application (and corresponding contents on the Struts web site):

    • Version Differences: New section in Release Notes to link to the JavaDocs for all Struts classes and members added or changed between versions.
    • FAQ/HowTos: New documentation category organizes our FAQs and example-driven howTos. New HowTos include "Building Applications", "Using SSL", and using Struts with Eclipse or NetBeans.
    • User Guide Preface: New section to overview the enabling technologies behind Struts.
    • Developer Guides: Added "cover page" to guides. These then link to the Package Descriptions and the API guides.
    • HTML tag documentation: expanded to cover using indexed properties with iterate.
    • Site Menu: Removed separate links to taglib documentation, since these are now in the Developer Guide.
    • Newbie FAQ: The questions most likely to be asked by new developers using Struts. Still under development.
    • Kickstart FAQ: The questions most likely to be asked when selecting Struts.
    • 1.0.2 JavaDoc: Added archival copy to web site for future reference.
    • The UserGuide "Building" pages: General revisions to reflect new features and current practices.
    • Installation: Updated instructions for SilverStream and Resin. Add installation notes for Jetty. Added RexIP to list of nominal containers.
    • JavaDocs: New @since Struts 1.1 tag to indicate new packages, classes, and members added after the Struts 1.0.x version

    Struts Configuration Changes

    The following changes and bug fixes have occurred in the configuration files related to Struts:

    • Deprecated (Struts 0.5) configuration file format: Remove support.
    • Deprecated (Struts 0.5) methods: Remove from codebase.

    Added Config Package

    • ControllerConfig: Added inputForward property to indicate that ActionMapping.input is a forward rather than a URI.
    • ControllerConfig: Added forwardPattern and inputPattern to help manage page directories in application modules.
    • Added package to provide more flexibility in configuring the controller and to provide support for modular applications

    Action Package Changes

    The following changes and bug fixes have occurred in the basic controller framework (package org.apache.struts.action):

    • All constants in the Action class: Deprecated in favor of equivalents in new Globals class.
    • ActionMapping: input property may now refer to an ActionForward rather than a module-relative path if inputForward is set to true on the module's ControllerConfig bean [org.apache.struts.config.ControllerConfig.
    • ActionServlet: Added convertNull parameter to simulate the Struts 1.0 behavior when populating forms. If set to true, the numeric Java wrapper class types (like java.lang.Integer) will default to null (rather than 0).
    • ActionServlet: Added "config/$foo" parameter and deprecated several others in favor of components in the new config package.
    • ActionForms and related classes: Now use a StringBuffer when responding to a toString request in order to conserve resources.
    • LookupDispatchAction: Added standard Action to help select between internationalized buttons.
    • ActionForm class: Modified to use ActionServletWrapper rather than expose ActionServlet.
    • ActionServletWrapper class: Added for use by ActionForm to prevent the Public String properties of ActionServlet from being changed via a query string.
    • Action.MAPPING_KEY request attribute: Unconditionally pass the selected mapping as a request attribute ("org.apache.struts.action.mapping.instance") even if no form bean is specified.
    • ActionServlet: Avoid a NullPointerException in corner cases caused by failed initialization of servlet.
    • ActionForm class: Now truly serializable, because the two non-serializable instance variables (servlet and multipartRequestHandler) have been made transient. However, if you actually do serialize and deserialize such instances, it is your responsibility to reset these two properties.
    • ActionMessages and ActionErrors: The initial order a property/key is added in is now retained.
    • processActionForward(): Deprecated in favor of processForwardConfig

    Upload Package Changes

    The following changes and bug fixes have occurred in the file upload package (package org.apache.struts.upload) [part of the Upload webapp]:

    • CommonsMultipartRequestHandler: New implementation of file upload based on the Jakarta Commons FileUpload package. This new implementation is now the default.
    • BufferedMultipartInputStream: Fixed lost byte problem.
    • ArrayIndexOutOfBoundsException: Fixed situations where this was known to occur.
    • Multipart requests: Better reporting for premature closing of input streams while reading multipart requests.
    • New line characters: Additional fix for file corruption problem with uploads and new line characters.

    Utility Package Changes

    The following changes and bug fixes have occurred in the utilities (package org.apache.struts.util):

    • RequestUtils: Added support for forwardPattern, pagePattern, and inputForward properties on ControllerConfig.
    • GenericDataSource: Deprecated and modified to act as a thin wrapper around [org.apache.commons.dbpc.BasicDataSource]. Replaced by direct use of BasicDataSource or other compatible component.
    • RequestUtils class: Modify to use ActionServletWrapper rather than expose ActionServlet.
    • Added error message for the getActionErrors and getActionMessages method.
    • getActionErrors and getActionMessages: Added methods to generate the correct corresponding object based on the object retrieved from request scope based on the key passed in.
    • ActionErrors or ActionMessages: The logic for creating one of these objects has been moved to a utility method in RequestUtils.
    • JspException message: Now generated in RequestUtils.
    • ConvertUtils.convertCharacter(): Will now detect empty strings and return the default value.

    Bean Taglib Package Changes

    The following changes and bug fixes have occurred in the struts-bean custom tag library [org.apache.struts.taglib.bean]:

    • <html:errors>: When the property tag is specified, errors are no longer printed if the specified property has no errors. Previously errors were always printed ! Future enhancements would include additional attributes to always turn off the header or footer.
    • Made the remaining helper methods "protected" rather than "private".

    HTML Taglib Package Changes

    The following changes and bug fixes have occurred in the struts-html custom tag library (package org.apache.struts.taglib.html):

    • FormTag: Fixed to exclude query string when identifying action mapping name.
    • ImgTag: Correctly URLEncode the query string parameter value even if there is only a single parameter.
    • MultiboxTag.doAfterBody(): Corrected to return SKIP_BODY instead of SKIP_PAGE.
    • Errortag: defaultLocale method is deprecated as it is unused.

    Logic Taglib Package Changes

    The following changes and bug fixes have occurred in the struts-logic custom tag library (package org.apache.struts.taglib.logic):

    • None.

    Documentation Application Changes

    The following changes and bug fixes to the Struts Documentation application (and corresponding contents on the Struts web site) have occurred:

    • Reorganized Resources into separate pages..
    • In the Tag Developers Guide, add more detail regarding file upload requirements.
    • In Building View Components, clarify that additional i18n support may be provided by the browser, and is outside the scope of the framework.
    • In Building Controller Components, document 'validating' init-param, add defaults for various parameters, clarify that some web.xml settings are not Struts-specific.
    • Tag library documentation: Moved under User's Guide.
    • Reorganized to separate 1.0 material from nightly build material.

    MailReader Example Application Changes

    The following changes and bug fixes to the Struts MailReader Example Application have occurred:

    • Add Russian and Japanese translations of the application resources and set the character set for the example JSP pages to "UTF-8" so that it can display either English or Japanese.
    • Exchange "name" for "attribute" properties for Edit mappings in Struts configuration file.
    • Remove references to saving database data from "tour" document, since this functionality was removed.

    Template Example Application Changes

    The following changes and bug fixes to the Struts Template Example Application have occurred:

    • None.

    Exercise Taglib Example Application Changes

    The following changes and bug fixes to the Struts Exercise Taglib Example Application have occurred:

    • Added test case for <html:link> using "action" attribute.
    • Added test cases for <html:select> using <html:options> and <html:optionsCollection> based on a collection saved in the page context.

    This section provides links to the Struts JavaDoc for any classes that have been added or deprecated since the Struts 1.0 release.

    Previously deprecated classes and packages removed in Struts 1.1

    • Removed: org.apache.struts.utils.BeanUtils, org.apache.struts.utils.ConvertUtils, and org.apache.struts.utils.PropertyUtils - replaced by org.apache.commons.beanutils
    • Removed: org.apache.struts.util.ArrayStack, org.apache.struts.util.FastArrayList, org.apache.struts.util.FastHashMap, org.apache.struts.util.FastTreeMap - replaced by org.apache.commons.collections
    • Removed: org.apache.struts.digester.* - replaced by org.apache.commons.digester
    • Removed: The struts-config.dtd - Replaced by struts-config_1_1.dtd.
    • Removed: The omnibus "struts" taglib and its associated TLD - replaced by separate bean, logic, and html taglibs.
    • Removed: The "form" taglib and its associated TLD - replaced by (renamed as) the html taglib.

    Packages added in Struts 1.1

    Classes added in Struts 1.1

    action

    actions

    taglib.html

    taglib.logic

    upload

    util

    Classes with members added in Struts 1.1

    action.Action

    • ACTION_SERVLET_KEY
    • APPLICATION_KEY
    • MESSAGE_KEY
    • PLUG_INS_KEY
    • REQUEST_PROCESSOR_KEY
    • execute
    • getResources(javax.servlet.http.HttpServletRequest)
    • saveMessages

    action.ActionServlet

    • configDigester
    • convertHack
    • log
    • processor
    • getInternal
    • destroyApplications
    • destroyConfigDigester
    • getApplicationConfig
    • getRequestProcessor
    • initApplicationConfig
    • initApplicationDataSources
    • initApplicationPlugIns
    • initApplicationMessageResources
    • initConfigDigester
    • methods created for backward-compatiblity only
      • defaultControllerConfig
      • defaultFormBeansConfig
      • defaultForwardsConfig
      • defaultMappingsConfig
      • defaultMessageResourcesConfig

    taglib.html.BaseHandlerTag

    • indexed
    • setIndexed
    • getIndexed

    Classes deprecated between Struts 1.0 and Struts 1.1

    action

    • ActionException
    • ActionFormBeans
    • ActionForwards
    • ActionMappings

    Classes with members deprecated between Struts 1.0 and Struts 1.1

    action.Action

    • FORM_BEANS_KEY
    • FORWARDS_KEY
    • MAPPINGS_KEY
    • getResources()
    • perform

    ActionServlet

    • findDataSource
    • findFormBean
    • findForward
    • findMapping
    • initDataSources
    • methods created for backward-compatiblity only
      • defaultControllerConfig
      • defaultFormBeansConfig
      • defaultForwardsConfig
      • defaultMappingsConfig
      • defaultMessageResourcesConfig

    Next: Installation

    libstruts1.2-java-1.2.9/xdocs/userGuide/release-notes-1.1.xml0000644000175000017500000013464110404045242024331 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Robert Leland Ted Husted Martin Cooper Struts Release Notes (Version 1.1)

    This section contains the release notes for the Version 1.1 build of the Struts Framework, for changes that have taken place since Version 1.1 Release Candidate 2 was issued. For a complete list of changes since the last production release, see the Introduction

    In RC2, the Commons-DBCP and Commons-Pool dependencies have been removed. These are replaced with a dependency on the Struts-Legacy package, containing the GenericDataSource and GenericConnection classes from Struts 1.0.2. These are distributed for J2SE 1.3 but may be recompiled for J2SE 1.4. Other DataSource implementations may be plugged in (recommended).

    Other changes since RC1 have been routine fixes and refactorings.

    OTHER CHANGES:

    Action package: Deprecated processActionForward() because ActionForward is a subclass of ForwardConfig so there's no reason we can't use processForwardConfig() instead. Updated to use processForwardConfig instead of deprecated processActionForward. Deprecated the rest of the Action constants in favor of Globals. Refactored some of initModuleConfig into a separate method and cleaned up. Improved exception handling in ActionServlet and RequestProcessor; generally, we limited the scope of try/catch blocks and caught specific exceptions rather than Throwable.

    Documentation: Document the <html:html> tag's locale attribute behaviour of creating a session if needed. Added note to validator section regarding the converNull servlet parameter and required validations of java.lang.Integer fields. Moved sites and consultants page to Struts Wiki. Other minor tweaks.

    EL package: Fixed mapping of "onkeypress" attribute. Separated "expr" attribute into "expr" and "exprValue", being the original attribute value and the evaluated value. Fixed probably long-standing bug in notMatch tag that made it behave identically to the "match" tag (instead of the reverse).

    Example applicattions: Added Multi-config files for the example app.

    Legacy package: Added package under contrib to host old GenericDataSource and GenericConnection classes.

    Taglibs packages: Fixed several import statements. Refactored converting a scope name into its integer constant into a new method RequestUtils.getScope(String), and changed the DefineTag, EmptyTag, and TagUtils classes to use the new method.

    faces taglib. Added early release to contrib area.

    html taglib. Reset the 'processed' flag at the beginning of each usage of the tag. Use a local copy of the 'name' attribute to avoid modifying the attribute value itself. Fixed references to static members. For FrameTag and HiddenTag, conform TLD with implementations. In ErrorsTag, render a platform-independent line ending instead of hard coded "\r\n". In JavaScriptValidatorTag, make the line-end generation platform independent so that Cactus tests work properly. In FormTag, refactored code into smaller reusable methods. In RewriteTag, encode the ampersand character in XHTML mode only, otherwise write the ampersand as is so the URL will work in JavaScript scripts. Refactored form bean initialization out of doStartTag() into its own method. Refactored doStartTag() 'if' statement to avoid having long nested 'if' logic. In ErrorTag, fixed formatting and deprecated unused defaultLocale variable. Refactored doStartTag() and doEndTag() into smaller methods. Moved xhtml check to RequestUtils instead of duplicating the logic in many different classes. Added lookupProperty() method to BaseHandlerTag because both RadioTag and TextareaTag used the same code. Refactored TextareaTag into smaller methods. In JavaScriptValidatorTag, replaced duplicated code with call to RequestUtils.retrieveUserLocale() and simplified an 'if' statement.

    logic taglib. Set 'iterator' to null in doEndTag() so that we release the iterator reference as early as possible. We cannot do the same for 'collection' since it is a tag attribute, and needs to remain unchanged to comply with the JSP spec. Don't create empty cookies array if null, just don't run the loop at all. In ForwardTag, remove unnecessary test for null.

    nested tablibs. Improved support for Tomcat 4.1.18. Replace EVAL_BODY_AGAIN with EVAL_BODY_TAG so that the code compiles against the JSP 1.1 API. Changed the <nested:define> tag's tei class to reference a new custom tei class for the nested tags.

    tiles taglib. Fixed references to static members. Deprecated outdated Tiles TextTag. For InsertTag, only include page if it's non-null. For InserTag, remove page check before including for more investigation.

    Test packages: Added several new tests for the bean, html, and logic taglibs to the suite setup at the tail-end of RC1. Note: We cannot resolve request.getServerPort() in the Cactus 1.4.x environment, so for now, our tests will only run on Cactus 1.3

    Tiles package: Deprecated TilesUtil.applicationClass() in favor of RequestUtils.applicationClass()

    Util package: retrieveUserLocale now uses the request.getLocale() method for finding the user's preferred locale. If user has not specified this with Accept-Language header, the server default locale is used. Change encodeURL() to not use reflection on every call. In RequestUtils, simplified separator logic in computeURL().

    Validator package: Deprecate logging methods and indicate that commons-logging should be used. Logic simplification and minor formatting fixes to Resources class.

    build files:

    • (build.properties.sample) Add an entry for http-unit.
    • Remove dependency on Commons Resources for Struts 1.1 release. (This migration will happen later).
    • Make it possible to build Struts against the Servlet 2.4 and JSP 2.0 APIs, where the JSP classes have been pulled out into their own JAR file (jsp.jar). On an earlier platform, you can leave the "jsp.jar" property unset and thing will continue to operate as they have before.

    Bugzilla Problem Report fixes:

    • Fixed #17312 - retrieveUserLocale throws exception without sessions.
    • Fixed #17254 - If body text is empty and there's no resource key to lookup, display nothing in the option.
    • Fixed #17371- The tag now uses RequestUtils.retrieveUserLocale for looking up the appropriate locale. Using that method protects us from needlessly creating a session.
    • Fixed #17375 - Problem in ELErrorsTag because the "name" attribute of ErrorsTag has a non-null default value.
    • Fixed #17622 - validator-rules.xml issues.
    • Fixed #17299 - Set page variable from dyna map before validating.
    • Fixed #17838 - Help debug specific user errors by showing quotes around the key that is in error (missing or mispelled).
    • Fixed #17833 - validateShort and isAllDigits for negative numbers.
    • Fixed #17328 - Synchronized loadLocale.
    • Fixed #18018 - Changed field-* variables to camel case and no "-".
    • Fixed #16548 - validateMinLength and validateMaxLength are now independent of the required check.
    • Fixed #17389 - Splice in the I18nFactorySet.calculatePostixes from the attachment, rebuild, and ran the unit tests successfully.
    • Fixed #17273 - Removed extra return statement (RequestUtils).
    • Fixed #17592 - Tag should support a "naked" collection that is not a property of a bean.
    • Fixed #17592 - Made "property" attribute of "optionsCollection" tag be not required, to match same change made for #17592 in base tag.
    • Fixed #17562 - Change the InsertTag to let it use PageContext.include() instead of RequestDispatcher.include(). We are no back to the same mechanism used in the 1.1b3 release.
    • Fixed #18186 - Use temp variable instead of overwriting tag attribute variable.
    • Fixed #18394 - Changed error to info log if DefinitionsFactory is not supplied.
    • Fixed #18538 - Changed shortname to "tiles".
    • Fixed #18591 - Braces placement in message().
    • Fixed #18018 - Don't output requiredif field* javascript variables because they're not used and break other validations.
    • Fixed #18794 -Check ServletContext for ModuleConfig instead of request.
    • Fixed #18864 - Changed Class-Path to conform to jar spec. The previous patch fixing a bug in WebLogic caused warnings in Resin.
    • Fixed #18991 - Allow messages object passed to add(ActionMessages) to be null.
    • Fixed #19040 - Added null checks back to ActionServlet.
    • Fixed #19157 - Implement Serializable in NestedReference.
    • Fixed #18869 - Added display-name to web.xml files.
    • Fixed #19223 - Synchronized token methods for PR. Post 1.1 these methods should be moved to some kind of TokenProcessor class for reusability by other components such as the RequestProcessor (#16743).
    • Fixed #19236 - Added "action" attribute to "html-el:frame" tag.
    • Fixed #11932 - Factored common code out of message() and present() into a new private method retrieveMessageResources.
    • Fixed #11922 - Moved Action's token methods to this new class to fix synchronization issues and allow Action to be more focused.
    • Fixed #19594 - Fixed minlength javascript for PR. Also, removed password field checking from validateMask.
    • Fixed #19773 - EmptyTag and added test to exercise-taglib webapp.
    • Fixed #19835 - Add check against -1 to maxSize.
    • Fixed #20034 - Call releaseInternal() in release() so if error occurs between begin/end of tag next user/request will not be working with old parameters.
    • Fixed #20455 - validateRequiredIf() fails on Strings of whitespace.
    • Fixed #20678 - Struts data-souce pingQuery parameter
    • Fixed #20750 - RequestUtils.retrieveMessageResources (really an RC2 bug)
    • Fixed #20835 - <html:rewrite> tag using page attribute bug
    • Fixed #20877 - MessagesTag has incorrect assignment in release()
    • Fixed #20949 - Tag <html:select> doesn't work well on RC2
    • Fixed #21051 - javascript required validator accepts fields containing only whitespace
    • Fixed #21119 - typo in struts-doc-config.xml

    The remainder of this document contains the release notes for 1.1 Release Candidate 2 build of the Struts Framework, and covers changes that have taken place since Version 1.0.2 was released. The following sections cover New Features and Changes to Struts.

    The binary distribution of this release includes the following files relevant to Struts:

    • INSTALL - Brief installation instructions. See the Struts Documentation Application, or online at http://jakarta.apache.org/struts/, for more information.
    • LICENSE - The Apache Software Foundation license that defines the terms under which you can use Struts (and other software licensed by Apache).
    • README - A brief introduction to Struts.
    • lib/ - Directory containing files you will need in your own applications. The individual files of interest are:
      • commons-*.jar - Release packages from the Jakarta Commons Project that Struts relies on. You are welcome to use these classes in your own applications. These JAR files should be copied into the /WEB-INF/lib directory of your web application. See below for the version of each Commons library that is included.
      • struts.jar - JAR file that contains the compiled Java classes of Struts. You must place this file in the /WEB-INF/lib directory of your web application.
      • struts-xxxxx.tld - The tag library descriptor files for the Struts 1.1 tag libraries (bean, html, logic, and template). You must place these files in the /WEB-INF directory of your web application, and reference them with appropriate <taglib> directives in your web.xml file.
      • jdbc2_0-stdext.jar - The JDBC 2.0 Optional Package API classes (package javax.sql). You will need to include this file in the /WEB-INF/lib directory of your application, if it is not already made visible to web applications by your servlet container.
      • struts-config_1_1.dtd - The Document Type Definition (DTD) for the Struts 1.1 configuration file (which is typically named /WEB-INF/struts-config.xml). Your configuration file will be validated against an internal copy of this DTD -- this copy is available for reference purposes only.
      • struts-config_1_0.dtd - The Document Type Definition (DTD) for the Struts 1.0 configuration file (which is typically named /WEB-INF/struts-config.xml). Your configuration file will be validated against an internal copy of this DTD -- this copy is available for reference purposes only.
      • web-app_2_2.dtd - The Document Type Definition (DTD) for web.xml files conforming to the Servlet 2.2 specification. This copy is for reference purposes only.
      • web-app_2_3.dtd - The Document Type Definition (DTD) for web.xml files conforming to the Servlet 2.3 specification. This copy is for reference purposes only.
    • webapps/ - Web Application Archive (WAR) files for the web applications that are included with Struts.

    The following Jakarta Commons libraries are included with this release of Struts:

    • Commons BeanUtils 1.6.1
    • Commons Collections 2.1
    • Commons Digester 1.5
    • Commons FileUpload 1.0
    • Commons Lang 1.0.1
    • Commons Logging 1.0.3
    • Commons Validator 1.0.2

    Following are highlights of the new features. In the next section, we provide links to the JavaDocs for the affected classes.

    New Configuration DTD

    The Struts Configuration 1.0 DTD has been deprecated in favor of the struts-config_1_1.dtd. In the Struts 1.1 release, existing Struts configuration files can be loaded using either DTD version.

    New Dependencies on Commons packages

    Several components of Struts 1.0 have been found to be useful in general Java development (and not just useful for building Struts-based web applications), and have been migrated into the Jakarta Commons Project. As a result, this release of Struts has been modified to rely on the Commons packages containing these classes, rather than the Struts internal versions. In nearly every case, this involved changing only the import statements at the top of the classes. Any of your applications that utilize these classes will need to be modified in the same way.

    The following Commons packages contain the replacements for the corresponding Struts 1.0 classes:

    • BeanUtils Package [org.apache.commons.beanutils] - org.apache.struts.utils.BeanUtils, org.apache.struts.utils.ConvertUtils, and org.apache.struts.utils.PropertyUtils.
    • Collections Package [org.apache.commons.collections] - org.apache.struts.util.ArrayStack, org.apache.struts.util.FastArrayList, org.apache.struts.util.FastHashMap, org.apache.struts.util.FastTreeMap.
    • Digester Package - [org.apache.commons.digester] - org.apache.struts.digester.*.

    The following Commons packages are also now used by various components of the Struts framework:

    NOTE! XML Parser Prerequisite Updated

    Struts now depends on an XML parser that conforms to the JAXP/1.1 (rather than JAXP/1.0) APIs. Parsers known to work include the JAXP/1.1 reference implementation, and Xerces 1.3.1.

    SOURCE DEVELOPERS NOTE! Ant Prerequisite Updated

    To build Struts from source Ant 1.4 or later is now required. This does not affect developers that use Struts from the binary distribution.

    Struts Validator Integration

    The new Commons Validator is now integrated with Struts and exposed through the new Validator package.

    Tiles - An advanced templating taglib

    The Tiles JSP assembly framework has been integrated with Struts.

    Nested - An very cool taglib extension

    The Nested taglib is bundled with Struts and enhances the functionality of the existing Struts tags.

    New Example Applications

    New example applications for the Validator and Tiles are now part of the Struts distribution.

    New Contrib directory for optional components

    A new directory (contrib) in the CVS source repository has been added to accumulate Struts add-on extensions that are generally useful but have not yet been integrated into the standard code base.

    • Scaffold - An extension of the Commons Scaffold toolkit of reusable classes for building web applications.
    • Struts-EL - The optional Struts-EL taglib makes it easy to use Struts with JSTL. (Container with Servlet 2.3 support required.)

    The source for these components is available in the Struts source distribution. Binary distributions may also be made available in the Struts download area. As optional components, these products have their own release cycles.

    Action Package Additions

    The following new features have been added to the basic controller framework [org.apache.struts.action]:

    • The ActionServlet now provides support for modular Struts applications and sports several new extension points.
    • The new ActionMessages class will support a superset of the capabilities of ActionErrors, and will be useful as a collection of general purpose messages, not just errors.

    Upload Package Additions

    The following new features have been added to the file upload classes [org.apache.struts.upload]:

    • CommonsMultipartRequestHandler: New class that implements file upload using the Jakarta Commons FileUpload package. This is now the default file upload implementation for Struts.

    Util Package Additions

    The following new features have been added to the utility classes [org.apache.struts.util]:

    • LocalStrings: Correct message regarding replaceable parameter so that it does not append an extraneous character.
    • LabelValueBean: New class that defines a collection of name/value pairs that can be used with the <html:options> and <html:optionsCollection> tags, and elsewhere.
    • MessageResources: Escape any single quote characters that are included in the specified message string.
    • computeParameters: Allow a transaction token to be the only parameter.
    • RequestUtils: Change to encode ampersands when building a query string.

    Bean Taglib Package Additions

    The following new features have been added to the struts-bean custom tag library [org.apache.struts.taglib.bean]:

    • <bean:write>: Add format, locale and bundle attributes to support formatting values according to current user locale, format string from attribute or format string from string resources.
    • <bean:cookie>, <bean:header>, or <bean:parameter>: Correct the generated scripting variable type when tag is used with the "multiple" attribute.
    • <bean:message>: Added name, property, and scope attributes to the tag, so that the message source key can be obtained dynamically from a bean or bean property.

    HTML Taglib Package Additions

    The following new features have been added to the struts-html custom tag library [org.apache.struts.taglib.html]:

    • <html:link>: Added 'action' attribute.
    • <html:options>: If the property specified by the 'property' attribute returns null, tag now throws an error message that indicates what the real problem is, rather than causing an NPE.
    • <html:option> and <html:options>: Added 'style' and 'styleClass' attributes.
    • <html:optionsCollection>: New tag providing a cleaner way of populating HTML options from a collection.
    • <bean:message>: Added 'name', 'property' and 'scope' attributes so that the message resource key can be obtained dynamically from a bean.
    • <html:messages>: New tag to iterate through a message collection in the new ActionMessages class.
    • ActionForm: Tag will now call reset() if it instantiates the ActionForm bean. This also requires that the bean instantiated by the tag to be an ActionForm subclass.
    • <html:image>: Added the 'align' attribute.
    • <html:img>: Added the mouse event attributes ('onclick', 'ondblclick', 'onmousedown', 'onmouseup', 'onmouseover', 'onmousemove', 'onmouseout').
    • SubmitTag, SelectTag, LinkTag.java, CheckboxTag, ButtonTag, ImageTag, RadioTag, and TextArea tags: Added indexed property.

    Logic Taglib Package Additions

    The following new features have been added to the struts-logic custom tag library [org.apache.struts.taglib.logic]:

    • <logic:empty> and <logic:notEmpty>: New tags that are similar to <logic:present> and <logic:notPresent> except for the treatment of empty strings.

    Template Taglib Package Additions

    The following new features have been added to the struts-template custom tag library [org.apache.struts.taglib.template]:

    • None.

    Documentation Additions

    The following new features have been added to the Struts Documentation application (and corresponding contents on the Struts web site):

    • Version Differences: New section in Release Notes to link to the JavaDocs for all Struts classes and members added or changed between versions.
    • FAQ/HowTos: New documentation category organizes our FAQs and example-driven howTos. New HowTos include "Building Applications", "Using SSL", and using Struts with Eclipse or NetBeans.
    • User Guide Preface: New section to overview the enabling technologies behind Struts.
    • Developer Guides: Added "cover page" to guides. These then link to the Package Descriptions and the API guides.
    • HTML tag documentation: expanded to cover using indexed properties with iterate.
    • Site Menu: Removed separate links to taglib documentation, since these are now in the Developer Guide.
    • Newbie FAQ: The questions most likely to be asked by new developers using Struts. Still under development.
    • Kickstart FAQ: The questions most likely to be asked when selecting Struts.
    • 1.0.2 JavaDoc: Added archival copy to web site for future reference.
    • The UserGuide "Building" pages: General revisions to reflect new features and current practices.
    • Installation: Updated instructions for SilverStream and Resin. Add installation notes for Jetty. Added RexIP to list of nominal containers.
    • JavaDocs: New @since Struts 1.1 tag to indicate new packages, classes, and members added after the Struts 1.0.x version

    Struts Configuration Changes

    The following changes and bug fixes have occurred in the configuration files related to Struts:

    • Deprecated (Struts 0.5) configuration file format: Remove support.
    • Deprecated (Struts 0.5) methods: Remove from codebase.

    Added Config Package

    • ControllerConfig: Added inputForward property to indicate that ActionMapping.input is a forward rather than a URI.
    • ControllerConfig: Added forwardPattern and inputPattern to help manage page directories in application modules.
    • Added package to provide more flexibility in configuring the controller and to provide support for modular applications

    Action Package Changes

    The following changes and bug fixes have occurred in the basic controller framework (package org.apache.struts.action):

    • All constants in the Action class: Deprecated in favor of equivalents in new Globals class.
    • ActionMapping: input property may now refer to an ActionForward rather than a module-relative path if inputForward is set to true on the module's ControllerConfig bean [org.apache.struts.config.ControllerConfig.
    • ActionServlet: Added convertNull parameter to simulate the Struts 1.0 behavior when populating forms. If set to true, the numeric Java wrapper class types (like java.lang.Integer) will default to null (rather than 0).
    • ActionServlet: Added "config/$foo" parameter and deprecated several others in favor of components in the new config package.
    • ActionForms and related classes: Now use a StringBuffer when responding to a toString request in order to conserve resources.
    • LookupDispatchAction: Added standard Action to help select between internationalized buttons.
    • ActionForm class: Modified to use ActionServletWrapper rather than expose ActionServlet.
    • ActionServletWrapper class: Added for use by ActionForm to prevent the Public String properties of ActionServlet from being changed via a query string.
    • Action.MAPPING_KEY request attribute: Unconditionally pass the selected mapping as a request attribute ("org.apache.struts.action.mapping.instance") even if no form bean is specified.
    • ActionServlet: Avoid a NullPointerException in corner cases caused by failed initialization of servlet.
    • ActionForm class: Now truly serializable, because the two non-serializable instance variables (servlet and multipartRequestHandler) have been made transient. However, if you actually do serialize and deserialize such instances, it is your responsibility to reset these two properties.
    • ActionMessages and ActionErrors: The initial order a property/key is added in is now retained.
    • processActionForward(): Deprecated in favor of processForwardConfig

    Upload Package Changes

    The following changes and bug fixes have occurred in the file upload package (package org.apache.struts.upload) [part of the Upload webapp]:

    • CommonsMultipartRequestHandler: New implementation of file upload based on the Jakarta Commons FileUpload package. This new implementation is now the default.
    • BufferedMultipartInputStream: Fixed lost byte problem.
    • ArrayIndexOutOfBoundsException: Fixed situations where this was known to occur.
    • Multipart requests: Better reporting for premature closing of input streams while reading multipart requests.
    • New line characters: Additional fix for file corruption problem with uploads and new line characters.

    Utility Package Changes

    The following changes and bug fixes have occurred in the utilities (package org.apache.struts.util):

    • RequestUtils: Added support for forwardPattern, pagePattern, and inputForward properties on ControllerConfig.
    • GenericDataSource: Deprecated and modified to act as a thin wrapper around [org.apache.commons.dbpc.BasicDataSource]. Replaced by direct use of BasicDataSource or other compatible component.
    • RequestUtils class: Modify to use ActionServletWrapper rather than expose ActionServlet.
    • Added error message for the getActionErrors and getActionMessages method.
    • getActionErrors and getActionMessages: Added methods to generate the correct corresponding object based on the object retrieved from request scope based on the key passed in.
    • ActionErrors or ActionMessages: The logic for creating one of these objects has been moved to a utility method in RequestUtils.
    • JspException message: Now generated in RequestUtils.
    • ConvertUtils.convertCharacter(): Will now detect empty strings and return the default value.

    Bean Taglib Package Changes

    The following changes and bug fixes have occurred in the struts-bean custom tag library [org.apache.struts.taglib.bean]:

    • <html:errors>: When the property tag is specified, errors are no longer printed if the specified property has no errors. Previously errors were always printed ! Future enhancements would include additional attributes to always turn off the header or footer.
    • Made the remaining helper methods "protected" rather than "private".

    HTML Taglib Package Changes

    The following changes and bug fixes have occurred in the struts-html custom tag library (package org.apache.struts.taglib.html):

    • FormTag: Fixed to exclude query string when identifying action mapping name.
    • ImgTag: Correctly URLEncode the query string parameter value even if there is only a single parameter.
    • MultiboxTag.doAfterBody(): Corrected to return SKIP_BODY instead of SKIP_PAGE.
    • Errortag: defaultLocale method is deprecated as it is unused.

    Logic Taglib Package Changes

    The following changes and bug fixes have occurred in the struts-logic custom tag library (package org.apache.struts.taglib.logic):

    • None.

    Documentation Application Changes

    The following changes and bug fixes to the Struts Documentation application (and corresponding contents on the Struts web site) have occurred:

    • Reorganized Resources into separate pages..
    • In the Tag Developers Guide, add more detail regarding file upload requirements.
    • In Building View Components, clarify that additional i18n support may be provided by the browser, and is outside the scope of the framework.
    • In Building Controller Components, document 'validating' init-param, add defaults for various parameters, clarify that some web.xml settings are not Struts-specific.
    • Tag library documentation: Moved under User's Guide.
    • Reorganized to separate 1.0 material from nightly build material.

    MailReader Example Application Changes

    The following changes and bug fixes to the Struts MailReader Example Application have occurred:

    • Add Russian and Japanese translations of the application resources and set the character set for the example JSP pages to "UTF-8" so that it can display either English or Japanese.
    • Exchange "name" for "attribute" properties for Edit mappings in Struts configuration file.
    • Remove references to saving database data from "tour" document, since this functionality was removed.

    Template Example Application Changes

    The following changes and bug fixes to the Struts Template Example Application have occurred:

    • None.

    Exercise Taglib Example Application Changes

    The following changes and bug fixes to the Struts Exercise Taglib Example Application have occurred:

    • Added test case for <html:link> using "action" attribute.
    • Added test cases for <html:select> using <html:options> and <html:optionsCollection> based on a collection saved in the page context.

    This section provides links to the Struts JavaDoc for any classes that have been added or deprecated since the Struts 1.0 release.

    Previously deprecated classes and packages removed in Struts 1.1

    • Removed: org.apache.struts.utils.BeanUtils, org.apache.struts.utils.ConvertUtils, and org.apache.struts.utils.PropertyUtils - replaced by org.apache.commons.beanutils
    • Removed: org.apache.struts.util.ArrayStack, org.apache.struts.util.FastArrayList, org.apache.struts.util.FastHashMap, org.apache.struts.util.FastTreeMap - replaced by org.apache.commons.collections
    • Removed: org.apache.struts.digester.* - replaced by org.apache.commons.digester
    • Removed: The struts-config.dtd - Replaced by struts-config_1_1.dtd.
    • Removed: The omnibus "struts" taglib and its associated TLD - replaced by separate bean, logic, and html taglibs.
    • Removed: The "form" taglib and its associated TLD - replaced by (renamed as) the html taglib.

    Packages added in Struts 1.1

    Classes added in Struts 1.1

    action

    actions

    taglib.html

    taglib.logic

    upload

    util

    Classes with members added in Struts 1.1

    action.Action

    • ACTION_SERVLET_KEY
    • APPLICATION_KEY
    • MESSAGE_KEY
    • PLUG_INS_KEY
    • REQUEST_PROCESSOR_KEY
    • execute
    • getResources(javax.servlet.http.HttpServletRequest)
    • saveMessages

    action.ActionServlet

    • configDigester
    • convertHack
    • log
    • processor
    • getInternal
    • destroyApplications
    • destroyConfigDigester
    • getApplicationConfig
    • getRequestProcessor
    • initApplicationConfig
    • initApplicationDataSources
    • initApplicationPlugIns
    • initApplicationMessageResources
    • initConfigDigester
    • methods created for backward-compatiblity only
      • defaultControllerConfig
      • defaultFormBeansConfig
      • defaultForwardsConfig
      • defaultMappingsConfig
      • defaultMessageResourcesConfig

    taglib.html.BaseHandlerTag

    • indexed
    • setIndexed
    • getIndexed

    Classes deprecated between Struts 1.0 and Struts 1.1

    action

    • ActionException
    • ActionFormBeans
    • ActionForwards
    • ActionMappings

    Classes with members deprecated between Struts 1.0 and Struts 1.1

    action.Action

    • FORM_BEANS_KEY
    • FORWARDS_KEY
    • MAPPINGS_KEY
    • getResources()
    • perform

    ActionServlet

    • findDataSource
    • findFormBean
    • findForward
    • findMapping
    • initDataSources
    • methods created for backward-compatiblity only
      • defaultControllerConfig
      • defaultFormBeansConfig
      • defaultForwardsConfig
      • defaultMappingsConfig
      • defaultMessageResourcesConfig

    Next: Installation

    libstruts1.2-java-1.2.9/xdocs/userGuide/release-notes.xml0000644000175000017500000003715510404045232024035 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Robert Leland Ted Husted Martin Cooper Struts Release Notes (Nightly Build)

    This section contains the release notes for nightly build of the Struts Framework, for changes that have taken place since Version 1.1 was released. For a complete list of changes since the last production release, see the Introduction

    ApplicationConfig: In Struts 1.2 was removed.

    The remainder of this document contains the release notes for nightly build of the Struts Framework, and covers changes that have taken place since Version 1.1 was released. The following sections cover New Features and Changes to Struts.

    The binary distribution of this release includes the following files relevant to Struts:

    • INSTALL - Brief installation instructions. See the Struts Documentation Application, or online at http://jakarta.apache.org/struts/ for more information.
    • LICENSE - The Apache Software Foundation license that defines the terms under which you can use Struts (and other software licensed by Apache).
    • README - A brief introduction to Struts.
    • lib/ - Directory containing files you will need in your own applications. The individual files of interest are:
      • commons-*.jar - Release packages from the Jakarta Commons Project that Struts relies on. You are welcome to use these classes in your own applications. These JAR files should be copied into the /WEB-INF/lib directory of your web application.
      • struts.jar - JAR file that contains the compiled Java classes of Struts. You must place this file in the /WEB-INF/lib directory of your web application.
      • struts-xxxxx.tld - The tag library descriptor files for the Struts 1.1 tag libraries (bean, html, and logic). You must place these files in the /WEB-INF directory of your web application, and reference them with appropriate <taglib> directives in your web.xml file.
      • jdbc2_0-stdext.jar - The JDBC 2.0 Optional Package API classes (package javax.sql). You will need to include this file in the /WEB-INF/lib directory of your application, if it is not already made visible to web applications by your servlet container.
      • struts-config_1_2.dtd - The Document Type Definition (DTD) for the Struts 1.2 configuration file (which is typically named /WEB-INF/struts-config.xml. Your configuration file will be validated against an internal copy of this DTD -- this copy is available for reference purposes only.
      • struts-config_1_1.dtd - The Document Type Definition (DTD) for the Struts 1.1 configuration file (which is typically named /WEB-INF/struts-config.xml. Your configuration file will be validated against an internal copy of this DTD -- this copy is available for reference purposes only.
      • struts-config_1_0.dtd - The Document Type Definition (DTD) for the Struts 1.0 configuration file (which is typically named /WEB-INF/struts-config.xml. Your configuration file will be validated against an internal copy of this DTD -- this copy is available for reference purposes only.
      • web-app_2_2.dtd - The Document Type Definition (DTD) for web.xml files conforming to the Servlet 2.2 specification. This copy is for reference purposes only.
      • web-app_2_3.dtd - The Document Type Definition (DTD) for web.xml files conforming to the Servlet 2.3 specification. This copy is for reference purposes only.
    • webapps/ - Web Application Archive (WAR) files for the web applications that are included with Struts.

    The following Jakarta Commons libraries are included with this release of Struts:

    • Commons BeanUtils 1.6.1
    • Commons Collections 2.1
    • Commons Digester 1.5
    • Commons FileUpload 1.0
    • Commons Lang 2.0
    • Commons Logging 1.0.3
    • Commons Validator 1.1.0

    Following are highlights of the new features. In the next section, we provide links to the JavaDocs for the affected classes.

    New Configuration DTD

    The Struts Configuration 1.1 DTD has been deprecated in favor of the struts-config_1_2.dtd. In the Struts 1.2 release, existing Struts configuration files can be loaded using either DTD version. The new DTD adds two new elements <display-name> and <description> to the struts-config element. There are for use by struts config file tools and document generation.

    New Dependencies on Commons packages

    The resource component of Struts 1.1 has been found to be useful in general Java development (and not just useful for building Struts-based web applications), and have been migrated into the Jakarta Commons Project. As a result, the current development version of Struts has been modified to rely on this Commons package, rather than the Struts internal version. In nearly every case, this involved changing only the import statements at the top of your classes. Any applications that utilize these classes will need to be modified in the same way.

    The following Commons packages contain the replacements for the corresponding Struts 1.1 classes:

    NOTE! XML Parser Prerequisite Updated

    Struts now depends on an XML parser that conforms to the JAXP/1.1 (rather than JAXP/1.0) APIs. Parsers known to work include the JAXP/1.1 reference implementation, and Xerces 1.3.1.

    SOURCE DEVELOPERS NOTE! Ant Prerequisite Updated

    To build Struts from source Ant 1.5.2 or later is now required. This does not affect developers that use Struts from the binary distribution.

    The source for these components is available in the Struts source distribution. Binary distributions may also be made available with the Struts download area. As optional components, these products have their own release cycles.

    Action Package Additions

    The following new features have been added to the basic controller framework [org.apache.struts.action]:

    Actions Package Additions

    The following new features have been added to the adapters between the incoming HTTP request and the corresponding business logic framework [org.apache.struts.actions]:

    • The DispatchAction now provides default cancel handler that can be overridden. It also also possible to specify the default handler name.
    • The LookupDispatchAction now provides default cancel handler that can be overridden. It also also possible to specify the default handler name.

    Util Package Additions

    The following new features have been added to the utility classes [org.apache.struts.util]:

    Validator Package Additions

    The following new features have been added to the validator classes [org.apache.struts.validator]:

    • The ValidatorPlugin: It is now possible to force the client side Javascript validation to check all constraints, instead of stopping at the first error. By setting a new property, stopOnFirstError, on the validator plug in tag to false. This is in the struts-config.xml as follow:
             <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
               <set-property property="pathnames"
                       value="/WEB-INF/validation.xml,/WEB-INF/validator-rules.xml"/>
               <set-property property="stopOnFirstError" value="true"/>
            </plug-in>
             
    • validator-rules.xml[intRange]: IntRange now checks select-one and radio fields. Example: This allows populating combo boxes with valid choices plus one additional choice with a caption something like "Choose one" and a value 0f "-1". Then when the user attempts to submit the form, you can look for the value of "-1" and yell at them if they failed to pick something.

    HTML Taglib Package Additions

    The following new features have been added to the struts-html custom tag library [org.apache.struts.taglib.html]:

    Logic Taglib Package Additions

    The following new features have been added to the struts-logic custom tag library [org.apache.struts.taglib.logic]:

    Documentation Additions

    The following new features have been added to the Struts Documentation application (and corresponding contents on the Struts web site):

    Struts Configuration Changes

    The following changes and bug fixes have occurred in the configuration files related to Struts:

    • Japanese resources updates for Struts, its example, upload, tiles-documentation.

    Config Package

    Action Package Changes

    The following changes and bug fixes have occurred in the basic controller framework (package org.apache.struts.action):

    Upload Package Changes

    The following changes and bug fixes have occurred in the file upload package (package org.apache.struts.upload):

    • None.

    Utility Package Changes

    The following changes and bug fixes have occurred in the utilities (package org.apache.struts.util):

    • RequestUtils:

    Bean Taglib Package Changes

    The following changes and bug fixes have occurred in the struts-bean custom tag library [org.apache.struts.taglib.bean]:

    HTML Taglib Package Changes

    The following changes and bug fixes have occurred in the struts-html custom tag library (package org.apache.struts.taglib.html):

    Logic Taglib Package Changes

    The following changes and bug fixes have occurred in the struts-logic custom tag library (package org.apache.struts.taglib.logic):

    • None.

    Documentation Application Changes

    The following changes and bug fixes to the Struts Documentation application (and corresponding contents on the Struts web site) have occurred:

    MailReader Example Application Changes

    The following changes and bug fixes to the Struts MailReader Example Application have occurred:

    Template Example Application Changes

    The following changes and bug fixes to the Struts Template Example Application have occurred:

    • Removed.

    Exercise Taglib Example Application Changes

    The following changes and bug fixes to the Struts Exercise Taglib Example Application have occurred:

    This section provides links to the Struts JavaDoc for any classes that have been added or deprecated since the Struts 1.0 release.

    Previously deprecated classes and packages removed in Struts 1.2

    • Removed: org.apache.struts.xxxx

    Packages added in Struts 1.2

    Classes added in Struts 1.2

    action

    actions

    taglib.html

    taglib.logic

    upload

    util

    Classes with members added in Struts 1.2

    action.AActionServlet

    • initModuleConfigFactory()
    • methods created for backward-compatiblity only

    validator.html

    • isStopOnFirstError
    • setStopOnFirstError

    Classes deprecated between Struts 1.1 and Struts 1.2

    action

    Classes with members deprecated between Struts 1.1 and Struts 1.2

    class.method

    Classes with members removed between Struts 1.1 and Struts 1.2

    validator-rules.xml, range() - use intRange() instead.

    Next: Installation

    libstruts1.2-java-1.2.9/xdocs/userGuide/struts-bean.xml0000644000175000017500000011640010404045242023526 0ustar arnaudarnaud00000000000000 Craig R. McClanahan The Struts Framework Project - Bean Tags 1.0 1.1 bean Struts Bean Tags http://jakarta.apache.org/struts/tags-bean

    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.

    Many of the tags in this tag library will throw a JspException 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 <%@ page %> 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 org.apache.struts.action.EXCEPTION.

    If you are viewing this page from within the Struts Documentation Application (or online at http://jakarta.apache.org/struts), you can learn more about using these tags in the Bean Tags Developer's Guide.

    cookie Define a scripting variable based on the value(s) of the specified request cookie. org.apache.struts.taglib.bean.CookieTag org.apache.struts.taglib.bean.CookieTei empty

    Retrieve the value of the specified request cookie (as a single value or multiple values, depending on the multiple attribute), and define the result as a page scope attribute of type Cookie (if multiple is not specified) or Cookie[] (if multiple is specified).

    If no cookie with the specified name can be located, and no default value is specified, a request time exception will be thrown.

    id true false

    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.

    multiple false true

    If any arbitrary value for this attribute is specified, causes all matching cookies to be accumulated and stored into a bean of type Cookie[]. If not specified, the first value for the specified cookie will be retrieved as a value of type Cookie.

    name true true

    Specifies the name of the request cookie whose value, or values, is to be retrieved.

    value false true

    The default cookie value to return if no cookie with the specified name was included in this request.

    define Define a scripting variable based on the value(s) of the specified bean property. org.apache.struts.taglib.bean.DefineTag org.apache.struts.taglib.bean.DefineTei JSP

    Create a new attribute (in the scope specified by the toScope property, if any), and a corresponding scripting variable, both of which are named by the value of the id 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):

    • Specify a name attribute (plus optional property and scope 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).
    • Specify a value attribute - The created attribute and scripting variable will be of type java.lang.String, set to the value of this attribute.
    • Specify nested body content - The created attribute and scripting variable will be of type java.lang.String, set to the value of the nested body content.

    If a problem occurs while retrieving the specified bean property, a request time exception will be thrown.

    The <bean:define> tag differs from <jsp:useBean> in several ways, including:

    • Unconditionally creates (or replaces) a bean under the specified identifier.
    • 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).
    • Can create a bean whose contents is a literal string (or the result of a runtime expression) specified by the value attribute.
    • Does not support nested content (such as <jsp:setProperty> tags) that are only executed if a bean was actually created.

    USAGE NOTE - There is a restriction in the JSP 1.1 Specification that disallows using the same value for an id attribute more than once in a single JSP page. Therefore, you will not be able to use <bean:define> for the same bean name more than once in a single page.

    USAGE NOTE - 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.

    USAGE NOTE - You cannot use bean:define to instantiate 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.

    See the Bean Developer's Guide section on bean creation for more information about these differences, as well as alternative approaches to introducing beans into a JSP page.

    id true false

    Specifies the name of the scripting variable (and associated page scope attribute) that will be made available with the value of the specified property.

    name false true

    Specifies the attribute name of the bean whose property is accessed to define a new page scope attribute (if property is also specified) or the attribute name of the bean that is duplicated with the new reference created by this tag (if property is not also specified). This attribute is required unless you specify a value attribute or nested body content.

    property false true

    Specifies the name of the property to be accessed on the bean specified by name. This value may be a simple, indexed, or nested property reference expression. If not specified, the bean identified by name is given a new reference identified by id.

    scope false true

    Specifies the variable scope searched to retrieve the bean specified by name. If not specified, the default rules applied by PageContext.findAttribute() are applied.

    toScope false true

    Specifies the variable scope into which the newly defined bean will be created. If not specified, the bean will be created in page scope.

    type false true

    Specifies the fully qualified class name of the value to be exposed as the id attribute.

    java.lang.String (if you specify a value attribute) or java.lang.Object otherwise.
    value false true

    The java.lang.String value to which the exposed bean should be set. This attribute is required unless you specify the name attribute or nested body content.

    header Define a scripting variable based on the value(s) of the specified request header. org.apache.struts.taglib.bean.HeaderTag org.apache.struts.taglib.bean.HeaderTei empty

    Retrieve the value of the specified request header (as a single value or multiple values, depending on the multiple attribute), and define the result as a page scope attribute of type String (if multiple is not specified) or String[] (if multiple is specified).

    If no header with the specified name can be located, and no default value is specified, a request time exception will be thrown.

    id true false

    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.

    multiple false true

    If any arbitrary value for this attribute is specified, causes a call to HttpServletRequest.getHeaders() and a definition of the result as a bean of type String[]. Otherwise, HttpServletRequest.getHeader() will be called, and a definition of the result as a bean of type String will be performed.

    name true true

    Specifies the name of the request header whose value, or values, is to be retrieved.

    value false true

    The default header value to return if no header with the specified name was included in this request.

    include Load the response from a dynamic application request and make it available as a bean. org.apache.struts.taglib.bean.IncludeTag org.apache.struts.taglib.bean.IncludeTei empty

    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 String. This tag has a function similar to that of the standard <jsp:include> 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).

    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):

    • forward - Use the value of this attribute as the name of a global ActionForward to be looked up, and use the application-relative or context-relative URI found there.
    • href - Use the value of this attribute unchanged (since this might link to a resource external to the application, the session identifier is not included.
    • page - Use the value of this attribute as an application-relative URI to the desired resource.

    WARNING - Accessing resources protected by security constraints, or resources under the /WEB-INF subdirectory, with this tag is not supported. Consider using the <jsp:include ... flush="false"> tag on a JSP 1.2 or later container, or the <c:import> tag from the JSP Standard Tag Library to accomplish this.

    anchor false true

    Optional anchor tag ("#xxx") to be added to the generated hyperlink. Specify this value without any "#" character.

    forward false true

    Logical name of a global ActionForward that contains the actual content-relative URI of the resource to be included.

    href false true

    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 not be included in the request.

    id true false

    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.

    name false true

    Application-relative name (starting with a '/') of the web application resource to be dispatched, and whose response data is to be made available as a bean.

    Use the "page" attribute instead.
    page false true

    Application-relative URI (starting with a '/') of the web application resource to be included.

    transaction false true

    Set to true if you want the current transaction control token included in the generated URL for this include.

    message Render an internationalized message string to the response. org.apache.struts.taglib.bean.MessageTag empty

    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.

    The message key may be specified directly, using the key attribute, or indirectly, using the name and property attributes to obtain it from a bean.

    JSTL: The equivalent JSTL tag is <fmt:message>. For example,
    <fmt:message key="my.msg.key"> <fmt:param value="replacement text"/> </fmt:message>

    arg0 false true

    First parametric replacement value, if any.

    arg1 false true

    Second parametric replacement value, if any.

    arg2 false true

    Third parametric replacement value, if any.

    arg3 false true

    Fourth parametric replacement value, if any.

    arg4 false true

    Fifth parametric replacement value, if any.

    bundle false true

    The name of the application scope bean under which the MessageResources object containing our messages is stored.

    Globals.MESSAGES_KEY
    key false true

    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 name and property attributes.

    locale false true

    The name of the session scope bean under which our currently selected Locale object is stored.

    Globals.LOCALE_KEY
    name false true

    Specifies the attribute name of the bean whose property is accessed to retrieve the value specified by property (if specified). If property is not specified, the value of this bean itself will be used as the message resource key.

    property false true

    Specifies the name of the property to be accessed on the bean specified by name. This value may be a simple, indexed, or nested property reference expression. If not specified, the value of the bean identified by name will itself be used as the message resource key.

    scope false true

    Specifies the variable scope searched to retrieve the bean specified by name. If not specified, the default rules applied by PageContext.findAttribute() are applied.

    page Expose a specified item from the page context as a bean. org.apache.struts.taglib.bean.PageTag org.apache.struts.taglib.bean.PageTei empty

    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.

    If a problem occurs while retrieving the specified configuration object, a request time exception will be thrown.

    id true false

    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.

    property true true

    Name of the property from our page context to be retrieved and exposed. Must be one of application, config, request, response, or session.

    parameter Define a scripting variable based on the value(s) of the specified request parameter. org.apache.struts.taglib.bean.ParameterTag org.apache.struts.taglib.bean.ParameterTei empty

    Retrieve the value of the specified request parameter (as a single value or multiple values, depending on the multiple attribute), and define the result as a page scope attribute of type String (if multiple is not specified) or String[] (if multiple is specified).

    If no request parameter with the specified name can be located, and no default value is specified, a request time exception will be thrown.

    id true false

    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.

    multiple false true

    If any arbitrary value for this attribute is specified, causes a call to ServletRequest.getParameterValues() and a definition of the result as a bean of type String[]. Otherwise, ServletRequest.getParameter() will be called, and a definition of the result as a bean of type String will be performed.

    name true true

    Specifies the name of the request parameter whose value, or values, is to be retrieved.

    value false true

    The default parameter value to return if no parameter with the specified name was included in this request.

    resource Load a web application resource and make it available as a bean. org.apache.struts.taglib.bean.ResourceTag org.apache.struts.taglib.bean.ResourceTei empty

    Retrieve the value of the specified web application resource, and make it available as either a InputStream or a String, depending on the value of the input attribute.

    If a problem occurs while retrieving the specified resource, a request time exception will be thrown.

    id true false

    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.

    input false true

    If any arbitrary value for this attribute is specified, the resource will be made available as an InputStream. If this attribute is not specified, the resource will be made available as a String.

    name true true

    Application-relative name (starting with a '/') of the web application resource to be loaded and made available.

    size Define a bean containing the number of elements in a Collection or Map. org.apache.struts.taglib.bean.SizeTag org.apache.struts.taglib.bean.SizeTei empty

    Given a reference to an array, Collection or Map, creates a new bean, of type java.lang.Integer, 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:

    • As a runtime expression specified as the value of the collection attribute.
    • As a JSP bean specified by the name attribute.
    • As the property, specified by the property attribute, of the JSP bean specified by the name attribute.
    collection false true

    A runtime expression that evaluates to an array, a Collection, or a Map.

    id true false

    The name of a page scope JSP bean, of type java.lang.Integer, that will be created to contain the size of the underlying collection being counted.

    name false true

    The name of the JSP bean (optionally constrained to the scope specified by the scope attribute) that contains the collection to be counted (if property is not specified), or whose property getter is called to return the collection to be counted (if property is specified.

    property false true

    The name of the property, of the bean specified by the name attribute, whose getter method will return the collection to be counted.

    scope false true

    The bean scope within which to search for the JSP bean specified by the name attribute. If not specified, the available scopes are searched in ascending sequence.

    struts Expose a named Struts internal configuration object as a bean. org.apache.struts.taglib.bean.StrutsTag org.apache.struts.taglib.bean.StrutsTei empty

    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 formBean, forward, and mapping attributes to select the configuration object to be exposed.

    If a problem occurs while retrieving the specified configuration object, a request time exception will be thrown.

    id true false

    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.

    formBean false true

    Specifies the name of the Struts ActionFormBean definition object to be exposed.

    forward false true

    Specifies the name of the global Struts ActionForward definition object to be exposed.

    mapping false true

    Specifies the matching path of the Struts ActionMapping definition object to be exposed.

    write Render the value of the specified bean property to the current JspWriter. org.apache.struts.taglib.bean.WriteTag empty

    Retrieve the value of the specified bean property, and render it to the current JspWriter as a String by the ways:

    • If format attribute exists then value will be formatted on base of format string from format attribute and default system locale.
    • If in resources exists format string for value data type (view format attribute description) then value will be formatted on base of format string from resources. Resources bundle and target locale can be specified with bundle and locale attributes. If nothing specified then default resource bundle and current user locale will be used.
    • If there is a PropertyEditor configured for the property value's class, the getAsText() method will be called.
    • Otherwise, the usual toString() conversions will be applied.

    If a problem occurs while retrieving the specified bean property, a request time exception will be thrown.

    bundle false true

    The name of the application scope bean under which the MessageResources object containing our messages is stored.

    Globals.MESSAGES_KEY
    filter false true

    If this attribute is set to true, 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.

    true
    format false true

    Specifies the format string to use to convert bean or property value to the String. If nothing specified, then default format string for value data type will be searched in message resources by according key.

    formatKey false true

    Specifies the key to search format string in application resources.

    ignore false true

    If this attribute is set to true, and the bean specified by the name and scope attributes does not exist, simply return without writing anything. If this attribute is set to false, a runtime exception to be thrown, consistent with the other tags in this tag library.

    false
    locale false true

    The name of the session scope bean under which our currently selected Locale object is stored.

    Globals.LOCALE_KEY
    name true true

    Specifies the attribute name of the bean whose property is accessed to retrieve the value specified by property (if specified). If property is not specified, the value of this bean itself will be rendered.

    property false true

    Specifies the name of the property to be accessed on the bean specified by name. This value may be a simple, indexed, or nested property reference expression. If not specified, the bean identified by name will itself be rendered. If the specified property returns null, no output will be rendered.

    scope false true

    Specifies the variable scope searched to retrieve the bean specified by name. If not specified, the default rules applied by PageContext.findAttribute() are applied.

    libstruts1.2-java-1.2.9/xdocs/userGuide/struts-html.xml0000644000175000017500000100543610404045230023571 0ustar arnaudarnaud00000000000000 Craig R. McClanahan Martin Cooper Mike Schachter James Turner David Graham The Struts Framework Project - HTML Tags 1.0 1.1 html Page Construction Tags http://jakarta.apache.org/struts/tags-html

    This taglib contains tags used to create struts input forms, as well as other tags generally useful in the creation of HTML-based user interfaces.

    Many of the tags in this tag library will throw a JspException 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 <%@ page %> 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 org.apache.struts.action.EXCEPTION.

    base Render an HTML <base> Element org.apache.struts.taglib.html.BaseTag empty

    Renders an HTML <base> element with an href attribute pointing to the absolute location of the enclosing JSP page. This tag is valid only when nested inside an HTML <head> element.

    This tag is useful because it allows you to use relative URL references in the page that are calculated based on the URL of the page itself, rather than the URL to which the most recent submit took place (which is where the browser would normally resolve relative references against).

    target false true

    The window target for this base reference.

    server false true

    The server name to use instead of request.getServerName().

    button Render A Button Input Field org.apache.struts.taglib.html.ButtonTag

    Renders an HTML <input> element of type button, populated from the specified value or the content of this tag body. This tag is only valid when nested inside a form tag body.

    If a graphical button is needed (a button with an image), then the image tag is more appropriate.

    accesskey false true The keyboard character used to move focus immediately to this element. alt false true

    The alternate text for this element.

    altKey false true

    The message resources key of the alternate text for this element.

    disabled false true Set to true if this input field should be disabled. indexed false true Valid only inside of logic:iterate tag. If true then name of the html tag will be rendered as "propertyName[34]". Number in brackets will be generated for every iteration and taken from ancestor logic:iterate tag. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. property true true Name of the request parameter that will be included with this submission, set to the specified value. style false true CSS styles to be applied to this HTML element. styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). tabindex false true The tab order (ascending positive integers) for this element. title false true

    The advisory title for this element.

    titleKey false true

    The message resources key for the advisory title for this element.

    value false true Value of the label to be placed on this button. This value will also be submitted as the value of the specified request parameter. [Body of this tag (if any), or "Click"]
    cancel Render a Cancel Button org.apache.struts.taglib.html.CancelTag

    Renders an HTML <input> element of type submit. This tag is only valid when nested inside a form tag body. Pressing of this submit button causes the action servlet to bypass calling the associated form bean validate() method. The action is called normally.

    accesskey false true The keyboard character used to move focus immediately to this element. alt false true

    The alternate text for this element.

    altKey false true

    The message resources key of the alternate text for this element.

    disabled false true Set to true if this input field should be disabled. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. property false true Name of the request parameter that will be included with this submission, set to the specified value. WARNING - If you set this attribute to a value other than the default, this will NOT be recognized as the cancel key by the Struts controller servlet or the Action.isCancelled() method. You will need to do your own cancel detection. style false true CSS styles to be applied to this HTML element. styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). tabindex false true The tab order (ascending positive integers) for this element. title false true

    The advisory title for this element.

    titleKey false true

    The message resources key for the advisory title for this element.

    value false true Value of the label to be placed on this button. This value will also be submitted as the value of the specified request parameter. [Body of this tag (if any), or "Cancel"]
    checkbox Render A Checkbox Input Field org.apache.struts.taglib.html.CheckboxTag

    Renders an HTML <input> element of type checkbox, populated from the specified value or the specified property of the bean associated with our current form. This tag is only valid when nested inside a form tag body.

    NOTE: The underlying property value associated with this field should be of type boolean, and any value you specify should correspond to one of the Strings that indicate a true value ("true", "yes", or "on"). If you wish to utilize a set of related String values, consider using the multibox tag.

    WARNING: In order to correctly recognize unchecked checkboxes, the ActionForm bean associated with this form must include a statement setting the corresponding boolean property to false in the reset() method.

    accesskey false true The keyboard character used to move focus immediately to this element. alt false true

    The alternate text for this element.

    altKey false true

    The message resources key of the alternate text for this element.

    disabled false true Set to true if this input field should be disabled. indexed false true Valid only inside of logic:iterate tag. If true then name of the html tag will be rendered as "id[34].propertyName". Number in brackets will be generated for every iteration and taken from ancestor logic:iterate tag. name false true The attribute name of the bean whose properties are consulted when rendering the current value of this input field. If not specified, the bean associated with the form tag we are nested within is utilized. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. property true true Name of the request parameter that will be included with this submission, set to the specified value. style false true CSS styles to be applied to this HTML element. styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). tabindex false true The tab order (ascending positive integers) for this element. title false true

    The advisory title for this element.

    titleKey false true

    The message resources key for the advisory title for this element.

    value false true The value to be transmitted if this checkbox is checked when the form is submitted. If not specified, the value "on" will be returned.
    errors Conditionally display a set of accumulated error messages. org.apache.struts.taglib.html.ErrorsTag empty

    Displays a set of error messages prepared by a business logic component and stored as an ActionMessages object, an ActionErrors object, a String, or a String array in request scope. If such a bean is not found, nothing will be rendered.

    In order to use this tag successfully, you must have defined an application scope MessageResources bean under the default attribute name, with optional definitions of the following message keys:

    • errors.header - Text that will be rendered before the error messages list. Typically, this message text will end with <ul> to start the error messages list.
    • errors.footer - Text that will be rendered after the error messages list. Typically, this message text will begin with </ul> to end the error messages list.
    • errors.prefix - Text that will be rendered before each individual error in the list.
    • errors.suffix - Text that will be rendered after each individual error in the list.

    See the messages tag for an alternative to this tag that does not rely on HTML in your MessageResources.

    bundle false true The servlet context attribute key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. locale false true The session attribute key for the Locale used to select messages to be displayed. If not specified, defaults to the Struts standard value. name false true Name of the request scope bean under which our error messages have been stored. If not present, the name specified by the Globals.ERROR_KEY constant string will be used. property false true Name of the property for which error messages should be displayed. If not specified, all error messages (regardless of property) are displayed.
    file Render A File Select Input Field org.apache.struts.taglib.html.FileTag

    Renders an HTML <input> element of type file, defaulting to the specified value or the specified property of the bean associated with our current form. This tag is only valid when nested inside a form tag body.

    As with the corresponding HTML <input> element, the enclosing form element must specify "POST" for the method attribute, and "multipart/form-data" for the enctype attribute. For example:

        <html:form method="POST" enctype="multipart/form-data">
            <html:file property="theFile" />
        </html:form>
    accesskey false true The keyboard character used to move focus immediately to this element. accept false true Comma-delimited set of content types that the server you submit to knows how to process. This list can be used by the client browser to limit the set of file options that is made available for selection. If not specified, no content type list will be sent. alt false true

    The alternate text for this element.

    altKey false true

    The message resources key of the alternate text for this element.

    disabled false true Set to true if this input field should be disabled. indexed false true Valid only inside of logic:iterate tag. If true then name of the html tag will be rendered as "id[34].propertyName". Number in brackets will be generated for every iteration and taken from ancestor logic:iterate tag. maxlength false true Maximum number of input characters to accept. This is ignored by most browsers. [No limit] name false true The attribute name of the bean whose properties are consulted when rendering the current value of this input field. If not specified, the bean associated with the form tag we are nested within is utilized. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. property true true Name of the request parameter that will be included with this submission, set to the specified value. size false true Size of the file selection box to be displayed. style false true CSS styles to be applied to this HTML element. styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). tabindex false true The tab order (ascending positive integers) for this element. title false true

    The advisory title for this element.

    titleKey false true

    The message resources key for the advisory title for this element.

    value false true

    NOTE: When setting this to some value, whether intentional or as the result (for example) of validation errors forcing the user back to the original jsp, this value is ignored by most browsers (for security reasons). This means that your users will have to re-select any previously selected files when submitting the form. Opera web browser will prompt the user so they have a chance to abort the submit.

    Value to which this field should be initialized. [Use the corresponding bean property value or body content (if any) if property is not specified]
    form Define An Input Form org.apache.struts.taglib.html.FormTag JSP

    Renders an HTML <form> element whose contents are described by the body content of this tag. The form implicitly interacts with the specified request scope or session scope bean to populate the input fields with the current property values from the bean.

    The form bean is located, and created if necessary, based on the form bean specification for the associated ActionMapping.

    action true true

    The URL to which this form will be submitted. This value is also used to select the ActionMapping we are assumed to be processing, from which we can identify the appropriate form bean and scope.

    If you are using extension mapping for selecting the controller servlet, this value should be equal to the path attribute of the corresponding <action> element, optionally followed by the correct extension suffix.

    If you are using path mapping to select the controller servlet, this value should be exactly equal to the path attribute of the corresponding <action> element.

    enctype false true The content encoding to be used to submit this form, if the method is POST. This must be set to "multipart/form-data" if you are using the file tag to enable file upload. If not specified, the browser default (normally "application/x-www-form-urlencoded") is used. focus false true The field name (among the fields on this form) to which initial focus will be assigned with a JavaScript function. If not specified, no special JavaScript for this purpose will be rendered. focusIndex false true If the focus field is a field array, such as a radio button group, you can specify the index in the array to receive focus. Struts 1.1 method false true The HTTP method that will be used to submit this request (GET, POST). [POST] onreset false true JavaScript event handler executed if the form is reset. onsubmit false true JavaScript event handler executed if the form is submitted. scriptLanguage false true The form's focus <script> element will not contain a language attribute when this is set to false. The default is true but this property is ignored in XHMTL mode. Struts 1.2 style false true CSS styles to be applied to this HTML element. styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). target false true Window target to which this form is submitted, such as for use in framed presentations.
    frame Render an HTML frame element org.apache.struts.taglib.html.FrameTag

    Renders an HTML <frame> element with processing for the src attribute that is identical to that performed by the <html:link> tag for the href attribute. URL rewriting will be applied automatically, to maintain session state in the absence of cookies.

    The base URL for this frame is calculated based on which of the following attributes you specify (you must specify exactly one of them):

    • forward - Use the value of this attribute as the name of a global ActionForward to be looked up, and use the application-relative or context-relative URI found there.
    • href - Use the value of this attribute unchanged.
    • page - Use the value of this attribute as a application-relative URI, and generate a server-relative URI by including the context path and application prefix.
    • action - Use the value of this attribute as the logical name of a global Action that contains the actual content-relative URI of the destination of this transfer.

    Normally, the hyperlink 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 paramId attribute (and its associated attributes to select the value), or specify the name (and optional property) attributes to select a java.util.Map bean that contains one or more parameter ids and corresponding values.

    To specify a single parameter, use the paramId attribute to define the name of the request parameter to be submitted. To specify the corresponding value, use one of the following approaches:

    • Specify only the paramName attribute - The named JSP bean (optionally scoped by the value of the paramScope attribute) must identify a value that can be converted to a String.
    • Specify both the paramName and paramProperty attributes - The specified property getter method will be called on the JSP bean identified by the paramName (and optional paramScope) attributes, in order to select a value that can be converted to a String.

    If you prefer to specify a java.util.Map that contains all of the request parameters to be added to the hyperlink, use one of the following techniques:

    • Specify only the name attribute - The named JSP bean (optionally scoped by the value of the scope attribute) must identify a java.util.Map containing the parameters.
    • Specify both name and property attributes - The specified property getter method will be called on the bean identified by the name (and optional scope) attributes, in order to return the java.util.Map containing the parameters.

    As the Map 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), or an object whose toString() method will be called. If a String array is specified, more than one value for the same query parameter name will be created.

    Additionally, you can request that the current transaction control token, if any, be included in the generated hyperlink by setting the transaction attribute to true. You can also request that an anchor ("#xxx") be added to the end of the URL that is created by any of the above mechanisms, by using the anchor attribute.

    action false true

    Logical name of a global Action 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 must specify exactly one of the action attribute, the forward attribute, the href attribute, or the page attribute.

    anchor false true

    Optional anchor tag ("#xxx") to be added to the generated hyperlink. Specify this value without any "#" character.

    forward false true

    Logical name of a global ActionForward 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 must specify exactly one of the action attribute, the forward attribute, the href attribute, or the page attribute.

    frameborder false true

    Should a frame border be generated around this frame (1) or not (0)?

    frameName false true

    Value for the name attribute of the rendered <frame> element.

    href false true

    The URL 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 must specify exactly one of the action attribute, the forward attribute, the href attribute, or the page attribute.

    longdesc false true

    URI of a long description of the frame. This description should supplement the short description provided by the title attribute, and may be particularly useful for non-visual user agents.

    marginheight false true

    The amount of space (in pixels) to be left between the frame's contents and its top and bottom margins.

    marginwidth false true

    The amount of space (in pixels) to be left between the frame's contents and its left and right margins.

    name false true

    The name of a JSP bean that contains a Map representing the query parameters (if property is not specified), or a JSP bean whose property getter is called to return a Map (if property is specified).

    noresize false true

    Should users be disallowed from resizing the frame? (true, false).

    page false true

    The module-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 must specify exactly one of the action attribute, the forward attribute, the href attribute, or the page attribute.

    paramId false true

    The name of the request parameter that will be dynamically added to the generated hyperlink. The corresponding value is defined by the paramName and (optional) paramProperty attributes, optionally scoped by the paramScope attribute

    paramName false true

    The name of a JSP bean that is a String containing the value for the request parameter named by paramId (if paramProperty is not specified), or a JSP bean whose property getter is called to return a String (if paramProperty is specified). The JSP bean is constrained to the bean scope specified by the paramScope property, if it is specified.

    paramProperty false true

    The name of a property of the bean specified by the paramName attribute, whose return value must be a String containing the value of the request parameter (named by the paramId attribute) that will be dynamically added to this hyperlink.

    paramScope false true

    The scope within which to search for the bean specified by the paramName attribute. If not specified, all scopes are searched.

    property false true

    The name of a property of the bean specified by the name attribute, whose return value must be a java.util.Map containing the query parameters to be added to the hyperlink. You must specify the name attribute if you specify this attribute.

    scope false true

    The scope within which to search for the bean specified by the name attribute. If not specified, all scopes are searched.

    scrolling false true

    Should scroll bars be created unconditionally (yes), never (no), or only when needed (auto)?

    style false true

    CSS styles to be applied to this element.

    styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). title false true

    The advisory title for this element.

    titleKey false true

    The message resources key for the advisory title for this element.

    transaction false true

    If set to true, any current transaction control token will be included in the generated hyperlink, so that it will pass an isTokenValid() test in the receiving Action.

    hidden Render A Hidden Field org.apache.struts.taglib.html.HiddenTag empty

    Renders an HTML <input> element of type hidden, populated from the specified value or the specified property of the bean associated with our current form. This tag is only valid when nested inside a form tag body.

    accesskey false true The keyboard character used to move focus immediately to this element. alt false true

    The alternate text for this element.

    altKey false true

    The message resources key of the alternate text for this element.

    indexed false true Valid only inside of logic:iterate tag. If true then name of the html tag will be rendered as "id[34].propertyName". Number in brackets will be generated for every iteration and taken from ancestor logic:iterate tag. name false true The attribute name of the bean whose properties are consulted when rendering the current value of this input field. If not specified, the bean associated with the form tag we are nested within is utilized. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. property true true Name of this input field, and the name of the corresponding bean property if value is not specified. The corresponding bean property (if any) must be of type String. style false true CSS styles to be applied to this HTML element. styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). title false true

    The advisory title for this element.

    titleKey false true

    The message resources key for the advisory title for this element.

    value false true Value to which this field should be initialized. [Use the corresponding bean property value] write false true Should the value of this field also be rendered to the response page to make it visible, in addition to creating an HTML type="hidden" element? By default, only the hidden element is created.
    html Render an HTML <html> Element org.apache.struts.taglib.html.HtmlTag JSP

    Renders an HTML <html> element with language attributes extracted from the user's current Locale object, if there is one.

    lang false true Renders a lang attribute with the locale stored in the user's session. If not found in the session, the language from the Accept-Language HTTP header is used. If still not found, the default language for the server is used. Struts 1.2 locale false true

    Set to true in order to store a Locale in the session based on the current request's Accept-Language header (if any) if none has currently been set. This attribute will create a session if one does not already exist. The lang attribute is rendered with the appropriate language code.

    Creating a session is undesirable for apps that don't support them. Use the lang attribute to achieve the same functionality without creating a session.
    xhtml false true

    Set to true in order to render xml:lang and xmlns attributes on the generated html element. This also causes all other html tags to render as XHTML (the <html:xhtml/> tag has a similar purpose).

    Struts 1.1
    image Render an input tag of type "image" org.apache.struts.taglib.html.ImageTag

    Renders an HTML <input> tag of type "image". The base URL for this image is calculated directly based on the value specified in the src or page attributes, or indirectly by looking up a message resource string based on the srcKey or pageKey attributes. You must specify exactly one of these attributes.

    If you would like to obtain the coordinates of the mouse click that submitted this request, see the information below on the property attribute.

    This tag is only valid when nested inside a form tag body.

    accesskey false true

    The keyboard character used to move focus immediately to this element.

    align false true

    The alignment option for this image.

    The align attribute is deprecated in HTML 4.x. The suggested alternative is to use CSS. Please see http://www.w3.org/TR/REC-html40/struct/objects.html#h-13.7.4 for more details.
    alt false true

    The alternate text for this image.

    altKey false true

    The message resources key of the alternate text for this image.

    border false true

    The width (in pixels) of the border around this image.

    bundle false true

    The servlet context attribute key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet.

    disabled false true Set to true if this input field should be disabled. indexed false true Valid only inside of logic:iterate tag. If true then name of the html tag will be rendered as "propertyName[34]". Number in brackets will be generated for every iteration and taken from ancestor logic:iterate tag. locale false true

    The session attribute key for the Locale used to select internationalized messages. If not specified, defaults to the Struts standard value.

    onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. page false true

    The module-relative path of the image for this input tag.

    pageKey false true

    The key of the message resources string specifying the module-relative path of the image for this input tag.

    property false true

    The property name of this image tag. The parameter names for the request will appear as "property.x" and "property.y", the x and y representing the coordinates of the mouse click for the image. A way of retrieving these values through a form bean is to define getX(), getY(), setX(), and setY() methods, and specify your property as a blank string (property="").

    src false true

    The source URL of the image for this input tag.

    srcKey false true

    The key of the message resources string specifying the source URL of the image for this input tag.

    style false true CSS styles to be applied to this HTML element. styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). tabindex false true The tab order (ascending positive integers) for this element. title false true

    The advisory title for this element.

    titleKey false true

    The message resources key for the advisory title for this element.

    value false true

    The value that will be submitted if this image button is pressed.

    img Render an HTML img tag org.apache.struts.taglib.html.ImgTag empty

    Renders an HTML <img> element with the image at the specified URL. Like the link tag, URL rewriting will be applied automatically to the value specified in src or page, to maintain session state in the absence of cookies. This will allow dynamic generation of an image where the content displayed for this image will be taken from the attributes of this tag.

    The base URL for this image is calculated directly based on the value specified in src or page, or indirectly by looking up a message resource string based on the srcKey or pageKey attributes. You must specify exactly one of these attributes.

    Normally, the src or page that you specify 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 src URL -- specify a single parameter with the paramId attribute (at its associated attributes to select the value), or specify the name (and optional property) attributes to select a java.util.Map bean that contains one or more parameter ids and corresponding values.

    To specify a single parameter, use the paramId attribute to define the name of the request parameter to be submitted. To specify the corresponding value, use one of the following approaches:

    • Specify only the paramName attribute - The named JSP bean (optionally scoped by the value of the paramScope attribute) must identify a value that can be converted to a String.
    • Specify both the paramName and paramProperty attributes - The specified property getter will be called on the JSP bean identified by the paramName (and optional paramScope) attributes, in order to select a value that can be converted to a String.

    If you prefer to specify a java.util.Map that contains all of the request parameters to be added to the hyperlink, use one of the following techniques:

    • Specify only the name attribute - The named JSP bean (optionally scoped by the value of the scope attribute) must identify a java.util.Map containing the parameters.
    • Specify both name and property attributes - The specified property getter method will be called on the bean identified by the name (and optional scope) attributes, in order to return the java.util.Map containing the parameters.

    As the Map is processed, the keys are assumed to be the names of query parameters to be appended to the src URL. The value associated with each key must be either a String or a String array representing the parameter value(s), or an object whose toString() method will be called. If a String array is specified, more than one value for the same query parameter name will be created.

    You can specify the alternate text for this image (which most browsers display as pop-up text block when the user hovers the mouse over this image) either directly, through the alt attribute, or indirectly from a message resources bundle, using the bundle and altKey attributes.

    align false true

    Where the image is aligned to. Can be one of the following attributes:

    • left - left justify, wrapping text on right
    • right -right justify, wrapping test on left
    • top - aligns the image with the top of the text on the same row
    • middle - aligns the image's vertical center with the text base line
    • bottom - aligns the image with the bottom of the text's base line
    • texttop - aligns the image's top with that of the text font on the same line
    • absmiddle - aligns the image's vertical center with the absolute center of the text
    • absbottom - aligns the image with the absolute bottom of the text font on the same row
    alt false true

    And alternative text to be displayed in browsers that don't support graphics. Also used often as type of context help over images.

    altKey false true

    The message resources key of the alternate text for this element.

    border false true

    The width of the border surrounding the image.

    bundle false true

    The servlet context attribute key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet.

    height false true

    The height of the image being displayed. This parameter is very nice to specify (along with width) to help the browser render the page faster.

    hspace false true

    The amount of horizontal spacing between the icon and the text. The text may be in the same paragraph, or be wrapped around the image.

    imageName false true

    The scriptable name to be defined within this page, so that you can reference it with intra-page scripts. In other words, the value specified here will render a "name" element in the generated image tag.

    ismap false true

    The name of the server-side map that this image belongs to.

    locale false true

    The name of the request or session Locale attribute used to look up internationalized messages.

    lowsrc false true

    An image for people with low resolution graphics cards.

    This attribute is not defined in the HTML 4.01 spec and will be removed in a future version of Struts.
    name false true

    The name of a JSP bean that contains a Map representing the query parameters (if property is not specified), or a JSP bean whose property getter is called to return a Map (if property is specified).

    onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onkeydown false true

    JavaScript event handler that is executed when this element receives a key down event.

    onkeypress false true

    JavaScript event handler that is executed when this element receives a key press event.

    onkeyup false true

    JavaScript event handler that is executed when this element receives a key up event.

    onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. paramId false true

    The name of the request parameter that will be dynamically added to the generated src URL. The corresponding value is defined by the paramName and (optional) paramProperty attributes, optionally scoped by the paramScope attribute

    page false true

    The module-relative path, starting with a slash, of the image to be displayed by this tag. The rendered URL for this image will automatically prepend the context path of this web application (in the same manner as the page attribute on the link tag works), in addition to any necessary URL rewriting. You must specify either the page attribute or the src attribute.

    pageKey false true

    The message key, in the message resources bundle named by the bundle attribute, of the String to be used as the module-relative path for this image.

    paramName false true

    The name of a JSP bean that is a String containing the value for the request parameter named by paramId (if paramProperty is not specified), or a JSP bean whose property getter is called to return a String (if paramProperty is specified). The JSP bean is constrained to the bean scope specified by the paramScope property, if it is specified.

    paramProperty false true

    The name of a property of the bean specified by the paramName attribute, whose return value must be a String containing the value of the request parameter (named by the paramId attribute) that will be dynamically added to this src URL.

    paramScope false true

    The scope within which to search for the bean specified by the paramName attribute. If not specified, all scopes are searched.

    property false true

    The name of a property of the bean specified by the name attribute, whose return value must be a java.util.Map containing the query parameters to be added to the src URL. You must specify the name attribute if you specify this attribute.

    scope false true

    The scope within which to search for the bean specified by the name attribute. If not specified, all scopes are searched.

    src false true

    The URL to which this image will be transferred from This image may be dynamically modified by the inclusion of query parameters, as described in the tag description. This value will be used unmodified (other than potential URL rewriting) as the value of the "src" attribute in the rendered tag. You must specify either the page attribute or the src attribute.

    srcKey false true

    The message key, in the message resources bundle named by the bundle attribute, of the String to be used as the URL of this image.

    style false true

    CSS styles to be applied to this element.

    styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). title false true

    The advisory title for this element.

    titleKey false true

    The message resources key for the advisory title for this element.

    usemap false true

    The name of the map as defined within this page for mapping hot-spot areas of this image.

    vspace false true

    The amount of vertical spacing between the icon and the text, above and below.

    width false true

    The width of the image being displayed. This parameter is very nice to specify (along with height) to help the browser render the page faster.

    javascript Render JavaScript validation based on the validation rules loaded by the ValidatorPlugIn. org.apache.struts.taglib.html.JavascriptValidatorTag empty

    Render JavaScript validation based on the validation rules loaded by the ValidatorPlugIn. The set of validation rules that should be generated is based on the formName attribute passed in, which should match the name attribute of the form element in the xml file.

    The dynamicJavascript and staticJavascript attributes default to true, but if dynamicJavascript is set to true and staticJavascript is set to false then only the dynamic JavaScript will be rendered. If dynamicJavascript is set to false and staticJavascript is set to true then only the static JavaScript will be rendered which can then be put in separate JSP page so the browser can cache the static JavaScript.

    cdata false true

    If set to "true" and XHTML has been enabled, the JavaScript will be wrapped in a CDATA section to prevent XML parsing. The default is "true" to comply with the W3C's recommendation.

    Struts 1.1
    dynamicJavascript false false

    Whether or not to render the dynamic JavaScript. Defaults to true.

    formName false true

    The key (form name) to retrieve a specific set of validation rules.

    method false true

    The alternate JavaScript method name to be used instead of the of the default. The default is 'validate' concatenated in front of the key (form name) passed in (ex: validateRegistrationForm).

    page false true

    The current page of a set of validation rules if the page attribute for the field element in the xml file is in use.

    scriptLanguage false true The <script> element will not contain a language attribute when this is set to false. The default is true but this property is ignored in XHTML mode. Struts 1.2 src false true

    The src attribute's value when defining the html script element.

    staticJavascript false false

    Whether or not to render the static JavaScript. Defaults to true.

    htmlComment false true

    Whether or not to enclose the javascript with HTML comments. This attribute is ignored in XHTML mode because the script would be deleted by the XML parser. See the cdata attribute for details on hiding scripts from XML parsers. Defaults to true.

    link Render an HTML anchor or hyperlink org.apache.struts.taglib.html.LinkTag

    Renders an HTML <a> element as an anchor definition (if "linkName" is specified) or as a hyperlink to the specified URL. URL rewriting will be applied automatically, to maintain session state in the absence of cookies. The content displayed for this hyperlink will be taken from the body of this tag.

    The base URL for this hyperlink is calculated based on which of the following attributes you specify (you must specify exactly one of them):

    • forward - Use the value of this attribute as the name of a global ActionForward to be looked up, and use the application-relative or context-relative URI found there.
    • action - Use the value of this attribute as the name of a Action to be looked up, and use the application-relative or context-relative URI found there.
    • href - Use the value of this attribute unchanged.
    • page - Use the value of this attribute as a application-relative URI, and generate a server-relative URI by including the context path and application prefix.

    Normally, the hyperlink 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 paramId attribute (and its associated attributes to select the value), or specify the name (and optional property) attributes to select a java.util.Map bean that contains one or more parameter ids and corresponding values.

    To specify a single parameter, use the paramId attribute to define the name of the request parameter to be submitted. To specify the corresponding value, use one of the following approaches:

    • Specify only the paramName attribute - The named JSP bean (optionally scoped by the value of the paramScope attribute) must identify a value that can be converted to a String.
    • Specify both the paramName and paramProperty attributes - The specified property getter method will be called on the JSP bean identified by the paramName (and optional paramScope) attributes, in order to select a value that can be converted to a String.

    If you prefer to specify a java.util.Map that contains all of the request parameters to be added to the hyperlink, use one of the following techniques:

    • Specify only the name attribute - The named JSP bean (optionally scoped by the value of the scope attribute) must identify a java.util.Map containing the parameters.
    • Specify both name and property attributes - The specified property getter method will be called on the bean identified by the name (and optional scope) attributes, in order to return the java.util.Map containing the parameters.

    As the Map 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), or an object whose toString() method will be called. If a String array is specified, more than one value for the same query parameter name will be created.

    Additionally, you can request that the current transaction control token, if any, be included in the generated hyperlink by setting the transaction attribute to true. You can also request that an anchor ("#xxx") be added to the end of the URL that is created by any of the above mechanisms, by using the anchor attribute.

    accesskey false true

    The keyboard character used to move focus immediately to this element.

    action false true

    Logical name of a Action 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 must specify exactly one of the action attribute, the forward attribute, the href attribute, the linkName attribute, or the page attribute.

    anchor false true

    Optional anchor tag ("#xxx") to be added to the generated hyperlink. Specify this value without any "#" character.

    forward false true

    Logical name of a global ActionForward 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 must specify exactly one of the action attribute, the forward attribute, the href attribute, the linkName attribute, or the page attribute.

    href false true

    The URL 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 must specify exactly one of the action attribute, the forward attribute, the href attribute, the linkName attribute, or the page attribute.

    indexed false true Valid only inside of logic:iterate tag. If true then indexed parameter with name from indexId attribute will be added to the query string. Indexed parameter looks like "index[32]". Number in brackets will be generated for every iteration and taken from ancestor logic:iterate tag. indexId false true By this attribute different name for the indexed parameter can be specified. Take a look to the "indexed" attribute for details. linkName false true

    The anchor name to be defined within this page, so that you can reference it with intra-page hyperlinks. In other words, the value specified here will render a "name" element in the generated anchor tag.

    name false true

    The name of a JSP bean that contains a Map representing the query parameters (if property is not specified), or a JSP bean whose property getter is called to return a Map (if property is specified).

    onblur false true

    JavaScript event handler that is executed when this element loses input focus.

    onclick false true

    JavaScript event handler that is executed when this element receives a mouse click.

    ondblclick false true

    JavaScript event handler that is executed when this element receives a mouse double click.

    onfocus false true

    JavaScript event handler that is executed when this element receives input focus.

    onkeydown false true

    JavaScript event handler that is executed when this element receives a key down event.

    onkeypress false true

    JavaScript event handler that is executed when this element receives a key press event.

    onkeyup false true

    JavaScript event handler that is executed when this element receives a key up event.

    onmousedown false true

    JavaScript event handler that is executed when this element receives a mouse down event.

    onmousemove false true

    JavaScript event handler that is executed when this element receives a mouse move event.

    onmouseout false true

    JavaScript event handler that is executed when this element receives a mouse out event.

    onmouseover false true

    JavaScript event handler that is executed when this element receives a mouse over event.

    onmouseup false true

    JavaScript event handler that is executed when this element receives a mouse up event.

    page false true

    The module-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 must specify exactly one of the action attribute, forward attribute, the href attribute, the linkName attribute, or the page attribute.

    paramId false true

    The name of the request parameter that will be dynamically added to the generated hyperlink. The corresponding value is defined by the paramName and (optional) paramProperty attributes, optionally scoped by the paramScope attribute

    paramName false true

    The name of a JSP bean that is a String containing the value for the request parameter named by paramId (if paramProperty is not specified), or a JSP bean whose property getter is called to return a String (if paramProperty is specified). The JSP bean is constrained to the bean scope specified by the paramScope property, if it is specified.

    paramProperty false true

    The name of a property of the bean specified by the paramName attribute, whose return value must be a String containing the value of the request parameter (named by the paramId attribute) that will be dynamically added to this hyperlink.

    paramScope false true

    The scope within which to search for the bean specified by the paramName attribute. If not specified, all scopes are searched.

    property false true

    The name of a property of the bean specified by the name attribute, whose return value must be a java.util.Map containing the query parameters to be added to the hyperlink. You must specify the name attribute if you specify this attribute.

    scope false true

    The scope within which to search for the bean specified by the name attribute. If not specified, all scopes are searched.

    style false true

    CSS styles to be applied to this element.

    styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). tabindex false true

    The tab order (ascending positive integers) for this element.

    target false true

    The window target in which the resource requested by this hyperlink will be displayed, for example in a framed presentation.

    title false true

    The advisory title for this hyperlink.

    titleKey false true

    The message resources key for the advisory title for this element.

    transaction false true

    If set to true, any current transaction control token will be included in the generated hyperlink, so that it will pass an isTokenValid() test in the receiving Action.

    messages Conditionally display a set of accumulated messages. org.apache.struts.taglib.html.MessagesTag org.apache.struts.taglib.html.MessagesTei JSP

    Displays a set of messages prepared by a business logic component and stored as an ActionMessages object, ActionErrors object, a String, or a String array in any scope. If such a bean is not found, nothing will be rendered. The messages are placed into the page scope in the body of this tag where they can be displayed by standard JSP methods. (For example: <bean:write>,<c:out>)

    In order to use this tag successfully, you must have defined an application scope MessageResources bean under the default attribute name.

    id true false The name of a page scope JSP bean that will contain the current element of the collection of messages on each iteration, if it is not null. bundle false true The servlet context attribute key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. locale false true The session attribute key for the Locale used to select messages to be displayed. If not specified, defaults to the Struts standard value. name false true Name of the bean in any scope under which our messages have been stored. If not present, the name specified by the Globals.ERROR_KEY constant string will be used. property false true Name of the property for which messages should be displayed. If not specified, all messages (regardless of property) are displayed. header false true This value is an optional message resource key that will be printed before the iteration of messages begins. footer false true This value is an optional message resource key that will be printed after the iteration of messages has finished. message false true By default the tag will retrieve the bean it will iterate over from the Globals.ERROR_KEY constant string, but if this attribute is set to 'true' the bean will be retrieved from the Globals.MESSAGE_KEY constant string. Also if this is set to 'true', any value assigned to the name attribute will be ignored.
    multibox Render A Checkbox Input Field org.apache.struts.taglib.html.MultiboxTag

    Renders an HTML <input> element of type checkbox, whose "checked" status is initialized based on whether the specified value matches one of the elements of the underlying property's array of current values. This element is useful when you have large numbers of checkboxes, and prefer to combine the values into a single array-valued property instead of multiple boolean properties. This tag is only valid when nested inside a form tag body.

    WARNING: In order to correctly recognize cases where none of the associated checkboxes are selected, the ActionForm bean associated with this form must include a statement setting the corresponding array to zero length in the reset() method.

    The value to be returned to the server, if this checkbox is selected, must be defined by one of the following methods:

    • Specify a value attribute, whose contents will be used literally as the value to be returned.
    • Specify no value attribute, and the nested body content of this tag will be used as the value to be returned.
    accesskey false true The keyboard character used to move focus immediately to this element. alt false true

    The alternate text for this element.

    altKey false true

    The message resources key of the alternate text for this element.

    disabled false true Set to true if this input field should be disabled. name false true The attribute name of the bean whose properties are consulted when rendering the current value of this input field. If not specified, the bean associated with the form tag we are nested within is utilized. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. property true true Name of the request parameter that will be included with this submission, set to the specified value. style false true CSS styles to be applied to this HTML element. styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). tabindex false true The tab order (ascending positive integers) for this element. title false true

    The advisory title for this element.

    titleKey false true

    The message resources key for the advisory title for this element.

    value false true The value to be transmitted if this checkbox is checked when the form is submitted.
    option Render A Select Option org.apache.struts.taglib.html.OptionTag

    Render an HTML <option> element, representing one of the choices for an enclosing <select> element. The text displayed to the user comes from either the body of this tag, or from a message string looked up based on the bundle, locale, and key attributes.

    If the value of the corresponding bean property matches the specified value, this option will be marked selected. This tag is only valid when nested inside a <html:select> tag body.

    bundle false true The servlet context attributes key for the MessageResources instance to use. If not specified, defaults to the application resources configured for our action servlet. disabled false true Set to true if this option should be disabled. key false true If specified, defines the message key to be looked up in the resource bundle specified by bundle for the text displayed to the user for this option. If not specified, the text to be displayed is taken from the body content of this tag. locale false true The session attributes key for the Locale instance to use for looking up the message specified by the key attribute. If not specified, uses the standard Struts session attribute name. style false true CSS styles to be applied to this HTML element. styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). value true true Value to be submitted for this field if this option is selected by the user.
    options Render a Collection of Select Options org.apache.struts.taglib.html.OptionsTag empty

    Renders a set of HTML <option> elements, representing possible choices for a <select> element. This tag can be used multiple times within a single <html:select> element, either in conjunction with or instead of one or more <html:option> or <html:optionsCollection> elements.

    This tag operates in one of two major modes, depending on whether or not the collection attribute is specified. If the collection attribute is included, the following rules apply:

    • The collection attribute is interpreted as the name of a JSP bean, in some scope, that itself represents a collection of individual beans, one per option value to be rendered.
    • The property attribute is interpreted as the name of a property of the individual beans included in the collection, and is used to retrieve the value that will be returned to the server if this option is selected.
    • The labelProperty attribute is interpreted as the name of a property of the individual beans included in the collection, and is used to retrieve the label that will be displayed to the user for this option. If the labelProperty attribute is not specified, the property named by the property attribute will be used to select both the value returned to the server and the label displayed to the user for this option.

    If the collection attribute is not specified, the rules described in the remainder of this section apply.

    The collection of values actually selected depends on the presence or absence of the name and property attributes. The following combinations are allowed:

    • Only name is specified - The value of this attribute is the name of a JSP bean in some scope that is the collection.
    • Only property is specified - The value of this attribute is the name of a property of the ActionForm bean associated with our form, which will return the collection.
    • Both name and property are specified - The value of the name attribute identifies a JSP bean in some scope. The value of the property attribute is the name of some property of that bean which will return the collection.

    The collection of labels displayed to the user can be the same as the option values themselves, or can be different, depending on the presence or absence of the labelName and labelProperty attributes. If this feature is used, the collection of labels must contain the same number of elements as the corresponding collection of values. The following combinations are allowed:

    • Neither labelName nor labelProperty is specified - The labels will be the same as the option values themselves.
    • Only labelName is specified - The value of this attribute is the name of a JSP bean in some scope that is the collection.
    • Only labelProperty is specified - The value of this attribute is the name of a property of the ActionForm bean associated with our form, which will return the collection.
    • Both labelName and labelProperty are specified - The value of the labelName attribute identifies a JSP bean in some scope. The value of the labelProperty attribute is the name of some property of that bean which will return the collection.

    Note that this tag does not support a styleId attribute, as it would have to apply the value to all the option elements created by this element, which would mean that more than one id element might have the same value, which the HTML specification says is illegal.

    collection false true Name of the JSP bean (in some scope) which is itself a Collection of other beans, each of which has properties named by the "property" and "labelProperty" attributes that are used to retrieve the value and label for each option, respectively. filter false true Set to false if you do NOT want the option labels filtered for sensitive characters in HTML. By default, such values are filtered. labelName false true Name of the JSP bean (in some scope) containing the collection of labels to be displayed to the user for these options. labelProperty false true Property of the form bean, or the bean specified by the labelName attribute, that will return the collection of labels to be displayed to the user for these options. name false true Name of the JSP bean (in some scope) containing the collection of values to be returned to the server for these options. If not specified, the form bean associated with our form is assumed. property false true Property of the form bean, or the bean specified by the name attribute, that will return the collection of values to returned to the server for these options. style false true CSS styles to be applied to this HTML element. styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute).
    optionsCollection Render a Collection of Select Options org.apache.struts.taglib.html.OptionsCollectionTag empty

    Renders a set of HTML <option> elements, representing possible choices for a <select> element. This tag can be used multiple times within a single <html:select> element, either in conjunction with or instead of one or more <html:option> or <html:options> elements.

    This tag operates on a collection of beans, where each bean has a label property and a value property. The actual names of these properties can be configured using the label and value attributes of this tag.

    This tag differs from the <html:options> tag in that it makes more consistent use of the name and property attributes, and allows the collection to be more easily obtained from the enclosing form bean.

    Note that this tag does not support a styleId attribute, as it would have to apply the value to all the option elements created by this element, which would mean that more than one id element might have the same value, which the HTML specification says is illegal.

    filter false true Set to false if you do NOT want the option labels filtered for sensitive characters in HTML. By default, such values are filtered. label false true The property of the bean within the collection which represents the label to be rendered for each option. Defaults to "label". name false true The attribute name of the bean whose properties are consulted when rendering the current value of this input field. If not specified, the bean associated with the form tag we are nested within is utilized. property false true The property of the form bean, or the bean specified by the name attribute, that will return the collection of objects to be rendered for these options. style false true CSS styles to be applied to this HTML element. styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). value false true The property of the bean within the collection which represents the value to be rendered for each option. Defaults to "value".
    password Render A Password Input Field org.apache.struts.taglib.html.PasswordTag Renders an HTML <input> element of type password, populated from the specified value or the specified property of the bean associated with our current form. This tag is only valid when nested inside a form tag body. accesskey false true The keyboard character used to move focus immediately to this element. alt false true

    The alternate text for this element.

    altKey false true

    The message resources key of the alternate text for this element.

    disabled false true Set to true if this input field should be disabled. indexed false true Valid only inside of logic:iterate tag. If true then name of the html tag will be rendered as "id[34].propertyName". Number in brackets will be generated for every iteration and taken from ancestor logic:iterate tag. maxlength false true Maximum number of input characters to accept. [No limit] name false true The attribute name of the bean whose properties are consulted when rendering the current value of this input field. If not specified, the bean associated with the form tag we are nested within is utilized. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. property true true Name of the request parameter that will be included with this submission, set to the specified value. readonly false true Set to true if this input field should be read only. redisplay false true Boolean flag indicating whether or not existing values will be redisplayed if they exist. Even though the redisplayed value will be shown as asterisks on the visible HTML page, the cleartext of the actual password value will be visible though the "Show Page Source" menu option of the client browser. You may wish to set this value to false on login pages. Defaults to true for consistency with all other form tags that redisplay their contents. style false true CSS styles to be applied to this HTML element. styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). size false true Number of character positions to allocate. [Browser default] tabindex false true The tab order (ascending positive integers) for this element. title false true

    The advisory title for this element.

    titleKey false true

    The message resources key for the advisory title for this element.

    value false true Value of the label to be placed on this button. This value will also be submitted as the value of the specified request parameter. [Body of this tag (if any)]
    radio Render A Radio Button Input Field org.apache.struts.taglib.html.RadioTag

    Renders an HTML <input> element of type radio, populated from the specified property of the bean associated with our current form. This tag is only valid when nested inside a form tag body.

    If an iterator is used to render a series of radio tags, the idName attribute may be used to specify the name of the bean exposed by the iterator. In this case, the value attribute is used as the name of a property on the idName bean that returns the value of the radio tag in this iteration.

    accesskey false true The keyboard character used to move focus immediately to this element. alt false true

    The alternate text for this element.

    altKey false true

    The message resources key of the alternate text for this element.

    disabled false true Set to true if this input field should be disabled. indexed false true Valid only inside of logic:iterate tag. If true then name of the html tag will be rendered as "id[34].propertyName". Number in brackets will be generated for every iteration and taken from ancestor logic:iterate tag. name false true The attribute name of the bean whose properties are consulted when rendering the current value of this input field. If not specified, the bean associated with the form tag we are nested within is utilized. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. property true true The corresponding bean property for this radio tag. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. style false true CSS styles to be applied to this HTML element. styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). tabindex false true The tab order (ascending positive integers) for this element. title false true

    The advisory title for this element.

    titleKey false true

    The message resources key for the advisory title for this element.

    value true true The value of the radio tag. idName false true

    Name of the bean (in some scope) that will return the value of the radio tag. Usually exposed by an iterator. When the idName attribute is present, the value attribute is used as the name of the property on the idName bean that will return the value of the radio tag for this iteration.

    Struts 1.1
    reset Render A Reset Button Input Field org.apache.struts.taglib.html.ResetTag Renders an HTML <input> element of type reset. accesskey false true The keyboard character used to move focus immediately to this element. alt false true

    The alternate text for this element.

    altKey false true

    The message resources key of the alternate text for this element.

    disabled false true Set to true if this input field should be disabled. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. property false true Name of the input field that will be generated. style false true CSS styles to be applied to this HTML element. styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). tabindex false true The tab order (ascending positive integers) for this element. title false true

    The advisory title for this element.

    titleKey false true

    The message resources key for the advisory title for this element.

    value false true Value of the label to be placed on this button. [Body of this tag (if any), or "Reset"]
    rewrite Render an URI org.apache.struts.taglib.html.RewriteTag empty

    Renders a request URI based on exactly the same rules as the link tag does, but without creating the <a> hyperlink. This value is useful when you want to generate a string constant for use by a JavaScript procedure.

    action false true

    Logical name of a Action 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 must specify exactly one of the action attribute, the forward attribute, the href attribute, or the page attribute.

    anchor false true

    Optional anchor tag ("#xxx") to be added to the generated hyperlink. Specify this value without any "#" character.

    forward false true

    Logical name of a global ActionForward 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 must specify exactly one of the action attribute, the forward attribute, the href attribute, or the page attribute.

    href false true

    The URL 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 must specify exactly one of the action attribute, the forward attribute, the href attribute, or the page attribute.

    name false true

    The name of a JSP bean that contains a Map representing the query parameters (if property is not specified), or a JSP bean whose property getter is called to return a Map (if property is specified).

    page false true

    The module-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 must specify exactly one of the action attribute, the forward attribute, the href attribute, or the page attribute.

    paramId false true

    The name of the request parameter that will be dynamically added to the generated hyperlink. The corresponding value is defined by the paramName and (optional) paramProperty attributes, optionally scoped by the paramScope attribute

    paramName false true

    The name of a JSP bean that is a String containing the value for the request parameter named by paramId (if paramProperty is not specified), or a JSP bean whose property getter is called to return a String (if paramProperty is specified). The JSP bean is constrained to the bean scope specified by the paramScope property, if it is specified.

    paramProperty false true

    The name of a property of the bean specified by the paramName attribute, whose return value must be a String containing the value of the request parameter (named by the paramId attribute) that will be dynamically added to this hyperlink.

    paramScope false true

    The scope within which to search for the bean specified by the paramName attribute. If not specified, all scopes are searched.

    property false true

    The name of a property of the bean specified by the name attribute, whose return value must be a java.util.Map containing the query parameters to be added to the hyperlink. You must specify the name attribute if you specify this attribute.

    scope false true

    The scope within which to search for the bean specified by the name attribute. If not specified, all scopes are searched.

    transaction false true

    If set to true, any current transaction control token will be included in the generated hyperlink, so that it will pass an isTokenValid() test in the receiving Action.

    select Render A Select Element org.apache.struts.taglib.html.SelectTag JSP

    Renders an HTML <select> element, associated with a bean property specified by our attributes. This tag is only valid when nested inside a form tag body.

    This tag operates in two modes, depending upon the state of the multiple attribute, which affects the data type of the associated property you should use:

    • multiple="true" IS NOT selected - The corresponding property should be a scalar value of any supported data type.
    • multiple="true" IS selected - The corresponding property should be an array of any supported data type.

    WARNING: In order to correctly recognize cases where no selection at all is made, the ActionForm bean associated with this form must include a statement resetting the scalar property to a default value (if multiple is not set), or the array property to zero length (if multiple is set) in the reset() method.

    alt false true

    The alternate text for this element.

    altKey false true

    The message resources key of the alternate text for this element.

    disabled false true Set to true if this input field should be disabled. indexed false true Valid only inside of logic:iterate tag. If true then name of the html tag will be rendered as "id[34].propertyName". Number in brackets will be generated for every iteration and taken from ancestor logic:iterate tag. multiple false true If set to any arbitrary value, the rendered select element will support multiple selections. name false true The attribute name of the bean whose properties are consulted to determine which option should be pre-selected when rendering this input field. If not specified, the bean associated with the enclosing <html:form> tag is utilized. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. property true true Name of the request parameter that will be included with this submission, set to the specified value. style false true CSS styles to be applied to this HTML element. styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). tabindex false true The tab order (ascending positive integers) for this element. size false true The number of available options displayed at one time. title false true

    The advisory title for this element.

    titleKey false true

    The message resources key for the advisory title for this element.

    value false true The value to compare with for marking an option selected.
    submit Render A Submit Button org.apache.struts.taglib.html.SubmitTag Renders an HTML <input> element of type submit.

    If a graphical button is needed (a button with an image), then the image tag is more appropriate.

    accesskey false true The keyboard character used to move focus immediately to this element. alt false true

    The alternate text for this element.

    altKey false true

    The message resources key of the alternate text for this element.

    disabled false true Set to true if this input field should be disabled. indexed false true Valid only inside of logic:iterate tag. If true then name of the html tag will be rendered as "propertyName[34]". Number in brackets will be generated for every iteration and taken from ancestor logic:iterate tag. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. property false true Name of the request parameter that will be included with this submission, set to the specified value. style false true CSS styles to be applied to this HTML element. styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). tabindex false true The tab order (ascending positive integers) for this element. title false true

    The advisory title for this element.

    titleKey false true

    The message resources key for the advisory title for this element.

    value false true The value of the button label.
    text Render An Input Field of Type text org.apache.struts.taglib.html.TextTag Render an input button of type text. This tag is only valid when nested inside a form tag body. accesskey false true The keyboard character used to move focus immediately to this element. alt false true

    The alternate text for this element.

    altKey false true

    The message resources key of the alternate text for this element.

    disabled false true Set to true if this input field should be disabled. indexed false true Valid only inside of logic:iterate tag. If true then name of the html tag will be rendered as "id[34].propertyName". Number in brackets will be generated for every iteration and taken from ancestor logic:iterate tag. maxlength false true Maximum number of input characters to accept. [No limit] name false true The attribute name of the bean whose properties are consulted when rendering the current value of this input field. If not specified, the bean associated with the form tag we are nested within is utilized. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. property true true Name of this input field, and the name of the corresponding bean property if value is not specified. The corresponding bean property (if any) must be of type String. readonly false true Set to true if this input field should be read only. size false true Number of character positions to allocate. [Browser default] style false true CSS styles to be applied to this HTML element. styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). tabindex false true The tab order (ascending positive integers) for this element. title false true

    The advisory title for this element.

    titleKey false true

    The message resources key for the advisory title for this element.

    value false true Value to which this field should be initialized. [Use the corresponding bean property value]
    textarea Render A Textarea org.apache.struts.taglib.html.TextareaTag Render a textarea element. This tag is only valid when nested inside a form tag body. accesskey false true The keyboard character used to move focus immediately to this element. alt false true

    The alternate text for this element.

    altKey false true

    The message resources key of the alternate text for this element.

    cols false true The number of columns to display. disabled false true Set to true if this input field should be disabled. indexed false true Valid only inside of logic:iterate tag. If true then name of the html tag will be rendered as "id[34].propertyName". Number in brackets will be generated for every iteration and taken from ancestor logic:iterate tag. name false true The attribute name of the bean whose properties are consulted when rendering the current value of this input field. If not specified, the bean associated with the form tag we are nested within is utilized. onblur false true JavaScript event handler executed when this element loses input focus. onchange false true JavaScript event handler executed when this element loses input focus and its value has changed. onclick false true JavaScript event handler executed when this element receives a mouse click. ondblclick false true JavaScript event handler executed when this element receives a mouse double click. onfocus false true JavaScript event handler executed when this element receives input focus. onkeydown false true JavaScript event handler executed when this element has focus and a key is depressed. onkeypress false true JavaScript event handler executed when this element has focus and a key is depressed and released. onkeyup false true JavaScript event handler executed when this element has focus and a key is released. onmousedown false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is depressed. onmousemove false true JavaScript event handler executed when this element is under the mouse pointer and the pointer is moved. onmouseout false true JavaScript event handler executed when this element was under the mouse pointer but the pointer was moved outside the element. onmouseover false true JavaScript event handler executed when this element was not under the mouse pointer but the pointer is moved inside the element. onmouseup false true JavaScript event handler executed when this element is under the mouse pointer and a mouse button is released. property true true Name of this input field, and the name of the corresponding bean property if value is not specified. The corresponding bean property (if any) must be of type String. readonly false true Set to true if this input field should be read only. rows false true The number of rows to display. style false true CSS styles to be applied to this HTML element. styleClass false true CSS stylesheet class to be applied to this HTML element (renders a "class" attribute). styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). tabindex false true The tab order (ascending positive integers) for this element. title false true

    The advisory title for this element.

    titleKey false true

    The message resources key for the advisory title for this element.

    value false true Value to which this field should be initialized. [Use the corresponding bean property value]
    xhtml Render HTML tags as XHTML org.apache.struts.taglib.html.XhtmlTag empty

    Using this tag in a page tells all other html taglib tags to render themselves as XHTML. This is useful when composing pages with JSP includes or Tiles. <html:html xhtml="true"> has a similar effect.

    Note: Included pages do not inherit the rendering style of the including page. Each JSP fragment or Tile must use this tag to render as XHTML.

    libstruts1.2-java-1.2.9/xdocs/userGuide/struts-logic.xml0000644000175000017500000017206210404045214023723 0ustar arnaudarnaud00000000000000 Craig R. McClanahan The Struts Framework Project - Logic Tags 1.0 1.1 logic Struts Logic Tags http://jakarta.apache.org/struts/tags-logic

    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.

    For tags that do value comparisons (equal, greaterEqual, greaterThan, lessEqual, lessThan, notEqual), the following rules apply:

    • The specified value is examined. If it can be converted successfully to a double or a long, it is assumed that the ultimate comparison will be numeric (either floating point or integer). Otherwise, a String comparison will be performed.
    • The variable to be compared to is retrieved, based on the selector attribute(s) (cookie, header, name, parameter, property) present on this tag. It will be converted to the appropriate type for the comparison, as determined above.
    • If the specified variable or property returns null, it will be coerced to a zero-length string before the comparison occurs.
    • 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 true result.

    For tags that do substring matching (match, notMatch), the following rules apply:

    • The specified variable is retrieved, based on the selector attribute(s) (cookie, header, name, parameter, property) present on this tag. The variable is converted to a String, if necessary.
    • A request time exception will be thrown if the specified variable cannot be retrieved, or has a null value.
    • The specified value is checked for existence as a substring of the variable, in the position specified by the location attribute, as follows: at the beginning (if location is set to start), at the end (if location is set to end), or anywhere (if location is not specified).

    Many of the tags in this tag library will throw a JspException 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 <%@ page %> 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 org.apache.struts.action.EXCEPTION.

    empty Evaluate the nested body content of this tag if the requested variable is either null or an empty string. org.apache.struts.taglib.logic.EmptyTag JSP Struts 1.1

    This tag evaluates its nested body content only if the specified value is either absent (i.e. null), an empty string (i.e. a java.lang.String with a length of zero), or an empty java.util.Collection or java.util.Map (tested by the .isEmpty() method on the respective interface).

    JSTL: The equivalent JSTL tag is <c:if> using the empty operator. For example,
    <c:if test="${empty sessionScope.myBean.myProperty}"> do something </c:if>

    name false true

    The variable to be compared is the JSP bean specified by this attribute, if property is not specified, or the value of the specified property of this bean, if property is specified.

    property false true

    The variable to be compared is the property (of the bean specified by the name attribute) specified by this attribute. The property reference can be simple, nested, and/or indexed.

    scope false true

    The bean scope within which to search for the bean named by the name property, or "any scope" if not specified.

    equal Evaluate the nested body content of this tag if the requested variable is equal to the specified value. org.apache.struts.taglib.logic.EqualTag JSP

    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 equal.

    cookie false true

    The variable to be compared is the value of the cookie whose name is specified by this attribute.

    header false true

    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.

    name false true

    The variable to be compared is the JSP bean specified by this attribute, if property is not specified, or the value of the specified property of this bean, if property is specified.

    parameter false true

    The variable to be compared is the first, or only, value of the request parameter specified by this attribute.

    property false true

    The variable to be compared is the property (of the bean specified by the name attribute) specified by this attribute. The property reference can be simple, nested, and/or indexed.

    scope false true

    The bean scope within which to search for the bean named by the name property, or "any scope" if not specified.

    value true true

    The constant value to which the variable, specified by other attribute(s) of this tag, will be compared.

    forward Forward control to the page specified by the specified ActionForward entry. org.apache.struts.taglib.logic.ForwardTag empty

    Performs a PageContext.forward() or HttpServletResponse.sendRedirect() call for the global ActionForward entry for the specified name. URL rewriting will occur automatically if a redirect is performed.

    name true true

    The logical name of the global ActionForward entry that identifies the destination, and forwarding approach, to be used. Note: forwarding to Tiles definitions is not supported from this tag. You should forward to them from an Action subclass.

    greaterEqual Evaluate the nested body content of this tag if the requested variable is greater than or equal to the specified value. org.apache.struts.taglib.logic.GreaterEqualTag JSP

    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 greater than or equal to the value.

    cookie false true

    The variable to be compared is the value of the cookie whose name is specified by this attribute.

    header false true

    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.

    name false true

    The variable to be compared is the JSP bean specified by this attribute, if property is not specified, or the value of the specified property of this bean, if property is specified.

    parameter false true

    The variable to be compared is the first, or only, value of the request parameter specified by this attribute.

    property false true

    The variable to be compared is the property (of the bean specified by the name attribute) specified by this attribute. The property reference can be simple, nested, and/or indexed.

    scope false true

    The bean scope within which to search for the bean named by the name property, or "any scope" if not specified.

    value true true

    The constant value to which the variable, specified by other attribute(s) of this tag, will be compared.

    greaterThan Evaluate the nested body content of this tag if the requested variable is greater than the specified value. org.apache.struts.taglib.logic.GreaterThanTag JSP

    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 greater than the value.

    cookie false true

    The variable to be compared is the value of the cookie whose name is specified by this attribute.

    header false true

    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.

    name false true

    The variable to be compared is the JSP bean specified by this attribute, if property is not specified, or the value of the specified property of this bean, if property is specified.

    parameter false true

    The variable to be compared is the first, or only, value of the request parameter specified by this attribute.

    property false true

    The variable to be compared is the property (of the bean specified by the name attribute) specified by this attribute. The property reference can be simple, nested, or indexed.

    scope false true

    The bean scope within which to search for the bean named by the name property, or "any scope" if not specified.

    value true true

    The constant value to which the variable, specified by other attribute(s) of this tag, will be compared.

    iterate Repeat the nested body content of this tag over a specified collection. org.apache.struts.taglib.logic.IterateTag org.apache.struts.taglib.logic.IterateTei JSP

    Repeats the nested body content of this tag once for every element of the specified collection, which must be an Iterator, a Collection, a Map (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:

    • As a runtime expression specified as the value of the collection attribute.
    • As a JSP bean specified by the name attribute.
    • As the property, specified by the property, of the JSP bean specified by the name attribute.

    The collection to be iterated over MUST conform to one of the following requirements in order for iteration to be successful:

    • An array of Java objects or primitives.
    • An implementation of java.util.Collection, including ArrayList and Vector.
    • An implementation of java.util.Enumeration.
    • An implementation of java.util.Iterator.
    • An implementation of java.util.Map, including HashMap, Hashtable, and TreeMap. NOTE - See below for additional information about accessing Maps.

    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 Map, the exposed object is of type Map.Entry that has two properties:

    • key - The key under which this item is stored in the underlying Map.
    • value - The value that corresponds to this key.

    So, if you wish to iterate over the values of a Hashtable, you would implement code like the following:

    <logic:iterate id="element" name="myhashtable">
    Next element is <bean:write name="element" property="value"/>
    </logic:iterate>

    If the collection you are iterating over can contain null values, the loop will still be performed but no page scope attribute (named by the id attribute) will be created for that loop iteration. You can use the <logic:present> and <logic:notPresent> tags to test for this case.

    collection false true

    A runtime expression that evaluates to a collection (conforming to the requirements listed above) to be iterated over.

    id true false

    The name of a page scope JSP bean that will contain the current element of the collection on each iteration, if it is not null.

    indexId false false

    The name of a page scope JSP bean that will contain the current index of the collection on each iteration.

    length false true

    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 java.lang.Integer that defines the desired value. If not present, there will be no limit on the number of iterations performed.

    name false true

    The name of the JSP bean containing the collection to be iterated (if property is not specified), or the JSP bean whose property getter returns the collection to be iterated (if property is specified).

    offset false true

    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 java.lang.Integer that defines the desired value. If not present, zero is assumed (meaning that the collection will be iterated from the beginning.

    property false true

    Name of the property, of the JSP bean specified by name, whose getter returns the collection to be iterated.

    scope false true

    The bean scope within which to search for the bean named by the name property, or "any scope" if not specified.

    type false true

    Fully qualified Java class name of the element to be exposed through the JSP bean named from the id 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.

    lessEqual Evaluate the nested body content of this tag if the requested variable is greater than or equal to the specified value. org.apache.struts.taglib.logic.LessEqualTag JSP

    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 less than or equal to the value.

    cookie false true

    The variable to be compared is the value of the cookie whose name is specified by this attribute.

    header false true

    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.

    name false true

    The variable to be compared is the JSP bean specified by this attribute, if property is not specified, or the value of the specified property of this bean, if property is specified.

    parameter false true

    The variable to be compared is the first, or only, value of the request parameter specified by this attribute.

    property false true

    The variable to be compared is the property (of the bean specified by the name attribute) specified by this attribute. The property reference can be simple, nested, or indexed.

    scope false true

    The bean scope within which to search for the bean named by the name property, or "any scope" if not specified.

    value true true

    The constant value to which the variable, specified by other attribute(s) of this tag, will be compared.

    lessThan Evaluate the nested body content of this tag if the requested variable is less than the specified value. org.apache.struts.taglib.logic.LessThanTag JSP

    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 less than the value.

    cookie false true

    The variable to be compared is the value of the cookie whose name is specified by this attribute.

    header false true

    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.

    name false true

    The variable to be compared is the JSP bean specified by this attribute, if property is not specified, or the value of the specified property of this bean, if property is specified.

    parameter false true

    The variable to be compared is the first, or only, value of the request parameter specified by this attribute.

    property false true

    The variable to be compared is the property (of the bean specified by the name attribute) specified by this attribute. The property reference can be simple, nested, and/or indexed.

    scope false true

    The bean scope within which to search for the bean named by the name property, or "any scope" if not specified.

    value true true

    The constant value to which the variable, specified by other attribute(s) of this tag, will be compared.

    match Evaluate the nested body content of this tag if the specified value is an appropriate substring of the requested variable. org.apache.struts.taglib.logic.MatchTag JSP

    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 location attribute), the nested body content of this tag is evaluated.

    cookie false true

    The variable to be matched is the value of the cookie whose name is specified by this attribute.

    header false true

    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.

    location false true

    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 start or end) of the variable string.

    name false true

    The variable to be matched is the JSP bean specified by this attribute, if property is not specified, or the value of the specified property of this bean, if property is specified.

    parameter false true

    The variable to be matched is the first, or only, value of the request parameter specified by this attribute.

    property false true

    The variable to be matched is the property (of the bean specified by the name attribute) specified by this attribute. The property reference can be simple, nested, and/or indexed.

    scope false true

    The bean scope within which to search for the bean named by the name property, or "any scope" if not specified.

    value true true

    The constant value which is checked for existence as a substring of the specified variable.

    messagesNotPresent Generate the nested body content of this tag if the specified message is not present in this request. org.apache.struts.taglib.logic.MessagesNotPresentTag JSP Struts 1.1

    Evaluates the nested body content of this tag if an ActionMessages object, ActionErrors object, a String, or a String array is not in request scope. If such a bean is not found, nothing will be rendered.

    name false true

    The parameter key to retrieve the message from request scope.

    property false true

    Name of the property for which messages should be retrieved. If not specified, all messages (regardless of property) are retrieved.

    message false true

    By default the tag will retrieve the request scope bean it will iterate over from the Globals.ERROR_KEY constant string, but if this attribute is set to 'true' the request scope bean will be retrieved from the Globals.MESSAGE_KEY constant string. Also if this is set to 'true', any value assigned to the name attribute will be ignored.

    messagesPresent Generate the nested body content of this tag if the specified message is present in this request. org.apache.struts.taglib.logic.MessagesPresentTag JSP Struts 1.1

    Evaluates the nested body content of this tag if an ActionMessages object, ActionErrors object, a String, or a String array is in request scope. If such a bean is not found, nothing will be rendered.

    name false true

    The parameter key to retrieve the message from request scope.

    property false true

    Name of the property for which messages should be retrieved. If not specified, all messages (regardless of property) are retrieved.

    message false true

    By default the tag will retrieve the request scope bean it will iterate over from the Globals.ERROR_KEY constant string, but if this attribute is set to 'true' the request scope bean will be retrieved from the Globals.MESSAGE_KEY constant string. Also if this is set to 'true', any value assigned to the name attribute will be ignored.

    notEmpty 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). org.apache.struts.taglib.logic.NotEmptyTag JSP

    This tag evaluates its nested body content only if the specified value is present (i.e. not null) and is not an empty string (i.e. a java.lang.String with a length of zero).

    JSTL: The equivalent JSTL tag is <c:if> using the ! empty operator. For example,
    <c:if test="${ ! empty sessionScope.myBean.myProperty}"> do something </c:if>

    name false true

    The variable to be compared is the JSP bean specified by this attribute, if property is not specified, or the value of the specified property of this bean, if property is specified.

    property false true

    The variable to be compared is the property (of the bean specified by the name attribute) specified by this attribute. The property reference can be simple, nested, and/or indexed.

    scope false true

    The bean scope within which to search for the bean named by the name property, or "any scope" if not specified.

    notEqual Evaluate the nested body content of this tag if the requested variable is not equal to the specified value. org.apache.struts.taglib.logic.NotEqualTag JSP

    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 not equal.

    cookie false true

    The variable to be compared is the value of the cookie whose name is specified by this attribute.

    header false true

    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.

    name false true

    The variable to be compared is the JSP bean specified by this attribute, if property is not specified, or the value of the specified property of this bean, if property is specified.

    parameter false true

    The variable to be compared is the first, or only, value of the request parameter specified by this attribute.

    property false true

    The variable to be compared is the property (of the bean specified by the name attribute) specified by this attribute. The property reference can be simple, nested, and/or indexed.

    scope false true

    The bean scope within which to search for the bean named by the name property, or "any scope" if not specified.

    value true true

    The constant value to which the variable, specified by other attribute(s) of this tag, will be compared.

    notMatch Evaluate the nested body content of this tag if the specified value is not an appropriate substring of the requested variable. org.apache.struts.taglib.logic.NotMatchTag JSP

    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 location attribute), the nested body content of this tag is evaluated.

    cookie false true

    The variable to be matched is the value of the cookie whose name is specified by this attribute.

    header false true

    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.

    location false true

    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 start or end) of the variable string.

    name false true

    The variable to be matched is the JSP bean specified by this attribute, if property is not specified, or the value of the specified property of this bean, if property is specified.

    parameter false true

    The variable to be matched is the first, or only, value of the request parameter specified by this attribute.

    property false true

    The variable to be matched is the property (of the bean specified by the name attribute) specified by this attribute. The property reference can be simple, nested, and/or indexed.

    scope false true

    The bean scope within which to search for the bean named by the name property, or "any scope" if not specified.

    value true true

    The constant value which is checked for existence as a substring of the specified variable.

    notPresent Generate the nested body content of this tag if the specified value is not present in this request. org.apache.struts.taglib.logic.NotPresentTag JSP

    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 is not present. Only one of the attributes may be used in one occurrence of this tag, unless you use the property attribute, in which case the name attribute is also required.

    cookie false true

    Checks for the existence of a cookie with the specified name.

    header false true

    Checks for the existence of an HTTP header with the specified name. The name match is performed in a case insensitive manner.

    name false true

    Checks for the existence of a JSP bean, in any scope, with the specified name. If property is also specified, checks for a non-null property value for the specified property.

    parameter false true

    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.

    property false true

    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 name attribute. Property references can be simple, nested, and/or indexed.

    role false true

    Checks whether the currently authenticated user (if any) has been associated with the specified security role.

    scope false true

    The bean scope within which to search for the bean named by the name property, or "any scope" if not specified.

    user false true

    Checks whether the currently authenticated user principal has the specified name.

    present Generate the nested body content of this tag if the specified value is present in this request. org.apache.struts.taglib.logic.PresentTag JSP

    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 is present. Only one of the attributes may be used in one occurrence of this tag, unless you use the property attribute, in which case the name attribute is also required.

    cookie false true

    Checks for the existence of a cookie with the specified name.

    header false true

    Checks for the existence of an HTTP header with the specified name. The name match is performed in a case insensitive manner.

    name false true

    Checks for the existence of a JSP bean, in any scope, with the specified name. If property is also specified, checks for a non-null property value for the specified property.

    parameter false true

    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.

    property false true

    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 name attribute. Property references can be simple, nested, and/or indexed.

    role false true

    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: <logic:present role="role1,role2,role3"> code..... </logic:present>

    scope false true

    The bean scope within which to search for the bean named by the name property, or "any scope" if not specified.

    user false true

    Checks whether the currently authenticated user principal has the specified name.

    redirect Render an HTTP Redirect org.apache.struts.taglib.logic.RedirectTag empty

    Performs an HttpServletResponse.sendRedirect() 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.

    The base URL for this redirect is calculated based on which of the following attributes you specify (you must specify exactly one of them):

    • forward - Use the value of this attribute as the name of a global ActionForward to be looked up, and use the application-relative or context-relative URI found there.
    • href - Use the value of this attribute unchanged.
    • page - Use the value of this attribute as an application-relative URI, and generate a server-relative URI by including the context path.

    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 paramId attribute (and its associated attributes to select the value), or specify the name (and optional property) attributes to select a java.util.Map bean that contains one or more parameter ids and corresponding values.

    To specify a single parameter, use the paramId attribute to define the name of the request parameter to be submitted. To specify the corresponding value, use one of the following approaches:

    • Specify only the paramName attribute - The named JSP bean (optionally scoped by the value of the paramScope attribute) must identify a value that can be converted to a String.
    • Specify both the paramName and paramProperty attributes - The specified property getter method will be called on the JSP bean identified by the paramName (and optional paramScope) attributes, in order to select a value that can be converted to a String.

    If you prefer to specify a java.util.Map that contains all of the request parameters to be added to the hyperlink, use one of the following techniques:

    • Specify only the name attribute - The named JSP bean (optionally scoped by the value of the scope attribute) must identify a java.util.Map containing the parameters.
    • Specify both name and property attributes - The specified property getter method will be called on the bean identified by the name (and optional scope) attributes, in order to return the java.util.Map containing the parameters.

    As the Map 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.

    anchor false true

    Optional anchor tag ("#xxx") to be added to the generated hyperlink. Specify this value without any "#" character.

    forward false true

    Logical name of a global ActionForward 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 must specify exactly one of the forward attribute, the href attribute, the linkName attribute, or the page attribute.

    href false true

    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 must specify exactly one of the forward attribute, the href attribute, the linkName attribute, or the page attribute.

    name false true

    The name of a JSP bean that contains a Map representing the query parameters (if property is not specified), or a JSP bean whose property getter is called to return a Map (if property is specified).

    page false true

    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 must specify exactly one of the forward attribute, the href attribute, the linkName attribute, or the page attribute.

    paramId false true

    The name of the request parameter that will be dynamically added to the generated hyperlink. The corresponding value is defined by the paramName and (optional) paramProperty attributes, optionally scoped by the paramScope attribute

    paramName false true

    The name of a JSP bean that is a String containing the value for the request parameter named by paramId (if paramProperty is not specified), or a JSP bean whose property getter is called to return a String (if paramProperty is specified). The JSP bean is constrained to the bean scope specified by the paramScope property, if it is specified.

    paramProperty false true

    The name of a property of the bean specified by the paramName attribute, whose return value must be a String containing the value of the request parameter (named by the paramId attribute) that will be dynamically added to this hyperlink.

    paramScope false true

    The scope within which to search for the bean specified by the paramName attribute. If not specified, all scopes are searched.

    property false true

    The name of a property of the bean specified by the name attribute, whose return value must be a java.util.Map containing the query parameters to be added to the hyperlink. You must specify the name attribute if you specify this attribute.

    scope false true

    The scope within which to search for the bean specified by the name attribute. If not specified, all scopes are searched.

    transaction false true

    Set to true if you want the current transaction control token included in the generated URL for this redirect.

    libstruts1.2-java-1.2.9/xdocs/userGuide/struts-nested.xml0000644000175000017500000031424310404045216024111 0ustar arnaudarnaud00000000000000 Arron Bates The Struts Framework Project - Nested Tags 1.0 1.1 nested Struts Nested Tags http://jakarta.apache.org/struts/tags-nested

    [Since Struts 1.1]

    This tag library brings a nested context to the functionality of the Struts custom tag library.

    It's written in a layer that extends the current Struts tags, building on their logic and functionality. The layer enables the tags to be aware of the tags which surround them so they can correctly provide the nesting property reference to the Struts system.

    It's all about nesting beans...
    A bean holds a reference to another bean internally, and all access to that bean is handled through the current bean. This act of having one bean's access go through another bean is known as "nesting beans". The first bean is known as the parent bean. The bean which it references, is known as a child bean. The terms "parent" and "child" are commonly used to describe the model's hierarchy.

    A simple example...
    Take an object which represents a monkey. The monkey's job is to pick bunches of bananas. On each bunch picked hangs many bananas. If this case was translated to bean objects, the monkey object would have a reference to the bunch objects he picked, and each bunch object would hold a reference to the bananas hanging in the bunch.

    To describe this...
    The monkey object is the parent to the bunch object, and the bunch object is a child of the monkey object. The bunch object is parent to its child banana objects, and the child banana objects children of the bunch object. The monkey is higher in the hierarchy than the bananas, and the bananas lower in the hierarchy to the bunches.

    One special term to remember is for the most parent class, which is known as the "root" object which starts the hierarchy.

    Nested tags are all about efficiently managing this style of hierarchy structure within your JSP markup.

    Important Note: Nearly all these tags extend tags from other libraries to bring their functionality into the nested context. Nesting relies on the tags working against the one bean model, and managing the properties so that they become relative to the properties they are nested within. In doing so, the tags will set the "name" attribute internally (where applicable), and in many cases will rely on the "property" attribute being set so it can be updated internally to become nested. The original tags on occasion provide options that don't use the "name" and "property" attributes. These uses will then fall outside the nested context, and will most likely cause error. To take advantage of these options, markup using the original tag for these cases. For an example see the <nested:options> tag.

    nest Defines a new level of nesting for child tags to reference to org.apache.struts.taglib.nested.NestedPropertyTag JSP

    This tag provides a simple method of defining a logical nesting level in the nested hierarchy. It run no explicit logic, is simply a place holder. It also means you can remove the need for explicit setting of level properties in child tags.

    Just as the iterate tag provide a parent to other tags, this does the same but there is no logic for iterating or otherwise.

    Example...

    <nested:write property="myNestedLevel.propertyOne" />
    <nested:write property="myNestedLevel.propertyTwo" />
    <nested:write property="myNestedLevel.propertyThree" />
          

    Can instead become...

    <nested:nest property="myNestedLevel" >
      <nested:write property="propertyOne" />
      <nested:write property="propertyTwo" />
      <nested:write property="propertyThree" />
    </nested:nest >
          
    property false true This specifies the property by which this tag and all child tags will be relative to.
    writeNesting Writes or makes a scripting variable of the current nesting level. org.apache.struts.taglib.nested.NestedWriteNestingTag org.apache.struts.taglib.nested.NestedWriteNestingTei JSP This tag provides a way of accessing the nested property reference used by the nested tags. Can expose a scripting variable, or simply write out the value. property false true If not supplied, will simply write out as if "./" or "this/" was supplied. id false true If id is supplied, then what would have been written out into the response stream, will instead be made available as a String object defined by the variable name provided. filter false true true/false value, describing to the tag if the result if to be URLEncoded. Helps JavaScript along if the result is required for URL hacking. root To start off a nested hierarchy without the need for a form org.apache.struts.taglib.nested.NestedRootTag JSP

    This tag is provided to allow the nested tags to find a common bean reference without the need for a form and its relative overhead. As long as the name attribute of this tag matches the name of a bean in scope of the JSP (ie: Struts tags can find it via usual means). For example you can load a bean for use with the jsp:useBean tag.

    The tag can also be used without specifying the name attribute, but this is only in the case that the current JSP is a dynamic include specified in another file. You will not be able to run the tag without a name unless this inclusion is in place. Otherwise the nested tags will not have the bean and property references that they need to provide their logic.

    Note: The access to a bean via the name attribute takes priority over looking for the reference from other parent tags. So if a name is specified, a bean will have to be there waiting for it. It was made this way so that you could use separate beans within a JSP that itself is an inclusion into another.

    name false true The name of the bean by which all child nested tags will derive their bean reference from.
    define Nested Extension - Define a scripting variable based on the value(s) of the specified bean property. org.apache.struts.taglib.nested.bean.NestedDefineTag org.apache.struts.taglib.nested.bean.NestedDefineTei empty

    This tag is an extension of the <bean:define> tag. Please consult its documentation for information on tag attributes and usage details.

    id true true name false true property false true scope false true toScope false true type false true value false true
    message Nested Extension - Render an internationalized message string to the response. org.apache.struts.taglib.nested.bean.NestedMessageTag empty

    This tag is an extension of the <bean:message> tag. Please consult its documentation for information on tag attributes and usage details.

    arg0 false true arg1 false true arg2 false true arg3 false true arg4 false true bundle false true key false true locale false true name false true property false true scope false true
    size Nested Extension - Define a bean containing the number of elements in a Collection or Map. org.apache.struts.taglib.nested.bean.NestedSizeTag org.apache.struts.taglib.bean.SizeTei empty

    This tag is an extension of the <bean:size> tag. Please consult its documentation for information on tag attributes and usage details.

    collection false true id true true name false true property false true scope false true
    write Nested Extension - Render the value of the specified bean property to the current JspWriter. org.apache.struts.taglib.nested.bean.NestedWriteTag empty

    This tag is an extension of the <bean:write> tag. Please consult its documentation for information on tag attributes and usage details.

    bundle false true filter false true format false true formatKey false true ignore false true locale false true name false true property false true scope false true
    checkbox Nested Extension - Render A Checkbox Input Field org.apache.struts.taglib.nested.html.NestedCheckboxTag

    This tag is an extension of the <html:checkbox> tag. Please consult its documentation for information on tag attributes and usage details.

    accesskey false true alt false true altKey false true disabled false true indexed false true name false true onblur false true onchange false true onclick false true ondblclick false true onfocus false true onkeydown false true onkeypress false true onkeyup false true onmousedown false true onmousemove false true onmouseout false true onmouseover false true onmouseup false true property true true style false true styleClass false true styleId false true tabindex false true title false true titleKey false true value false true
    errors Nested Extension - Conditionally display a set of accumulated error messages. org.apache.struts.taglib.nested.html.NestedErrorsTag empty

    This tag is an extension of the <html:errors> tag. Please consult its documentation for information on tag attributes and usage details.

    bundle false true locale false true name false true property false true
    file Nested Extension - Render A File Select Input Field org.apache.struts.taglib.nested.html.NestedFileTag

    This tag is an extension of the <html:file> tag. Please consult its documentation for information on tag attributes and usage details.

    accesskey false true accept false true alt false true altKey false true disabled false true indexed false true maxlength false true name false true onblur false true onchange false true onclick false true ondblclick false true onfocus false true onkeydown false true onkeypress false true onkeyup false true onmousedown false true onmousemove false true onmouseout false true onmouseover false true onmouseup false true property true true size false true style false true styleClass false true styleId false true tabindex false true title false true titleKey false true value false true
    form Nested Extension - Define An Input Form org.apache.struts.taglib.nested.html.NestedFormTag JSP

    This tag is an extension of the <html:form> tag. Please consult its documentation for information on tag attributes and usage details.

    action true true enctype false true focus false true method false true onreset false true onsubmit false true style false true styleClass false true styleId false true target false true
    hidden Nested Extension - Render A Hidden Field org.apache.struts.taglib.nested.html.NestedHiddenTag

    This tag is an extension of the <html:hidden> tag. Please consult its documentation for information on tag attributes and usage details.

    alt false true altKey false true indexed false true name false true property true true title false true titleKey false true styleId false true Identifier to be assigned to this HTML element (renders an "id" attribute). value false true
    image Nested Extension - Render an input tag of type "image" org.apache.struts.taglib.nested.html.NestedImageTag

    This tag is an extension of the <html:image> tag. Please consult its documentation for information on tag attributes and usage details.

    accesskey false true align false true alt false true altKey false true border false true bundle false true disabled false true indexed false true locale false true onblur false true onchange false true onclick false true ondblclick false true onfocus false true onkeydown false true onkeypress false true onkeyup false true onmousedown false true onmousemove false true onmouseout false true onmouseover false true onmouseup false true page false true pageKey false true property false true src false true srcKey false true style false true styleClass false true tabindex false true title false true titleKey false true value false true
    img Nested Extension - Render an HTML "img" tag org.apache.struts.taglib.nested.html.NestedImgTag empty

    This tag is an extension of the <html:img> tag. Please consult its documentation for information on tag attributes and usage details.

    accesskey false true align false true alt false true altKey false true border false true bundle false true height false true hspace false true imageName false true ismap false true locale false true lowsrc false true name false true onkeydown false true onkeypress false true onkeyup false true paramId false true page false true pageKey false true paramName false true paramProperty false true paramScope false true property false true scope false true src false true srcKey false true style false true styleClass false true styleId false true title false true titleKey false true usemap false true vspace false true width false true
    link Nested Extension - Render an HTML anchor or hyperlink org.apache.struts.taglib.nested.html.NestedLinkTag

    This tag is an extension of the <html:link> tag. Please consult its documentation for information on tag attributes and usage details.

    accesskey false true action false true anchor false true forward false true href false true indexed false true indexId false true linkName false true name false true onblur false true onclick false true ondblclick false true onfocus false true onkeydown false true onkeypress false true onkeyup false true onmousedown false true onmousemove false true onmouseout false true onmouseover false true onmouseup false true page false true paramId false true paramName false true paramProperty false true paramScope false true property false true scope false true style false true styleClass false true styleId false true tabindex false true target false true title false true titleKey false true transaction false true
    messages Nested Extension - Conditionally display a set of accumulated messages. org.apache.struts.taglib.nested.html.NestedMessagesTag org.apache.struts.taglib.html.MessagesTei JSP

    This tag is an extension of the <html:messages> tag. Please consult its documentation for information on tag attributes and usage details.

    id true true bundle false true locale false true name false true property false true header false true footer false true message false true
    multibox Nested Extension - Render A Checkbox Input Field org.apache.struts.taglib.nested.html.NestedMultiboxTag

    This tag is an extension of the <html:multibox> tag. Please consult its documentation for information on tag attributes and usage details.

    accesskey false true alt false true altKey false true disabled false true name false true onblur false true onchange false true onclick false true ondblclick false true onfocus false true onkeydown false true onkeypress false true onkeyup false true onmousedown false true onmousemove false true onmouseout false true onmouseover false true onmouseup false true property true true style false true styleClass false true styleId false true tabindex false true title false true titleKey false true value false true
    options Nested Extension - Render a Collection of Select Options org.apache.struts.taglib.nested.html.NestedOptionsTag empty

    This tag is an extension of the <html:options> tag. Please consult its documentation for information on tag attributes and usage details.

    Note: The nested context of this tag relies on the use of the "property" property, and the internal use of the "name" property. The nested tags rely on these properties and will attempt to set them itself. The <html:options> tag this tag extended allows other options for the tag which don't use these properties. To take advantage of these options, markup using the <html:options> tag instead of the nested tag.

    For example, the "collections" option allows you to specify a separate bean reference which itself is a list of objects with properties to access the title and value parts of the html option tag. You can use this in a nested context (the list is a property of a nested bean) by using the nested define tag and the original options tag.

    <nested:nest property="myNestedLevel" />
      <nested:define property="collectionList" />
      <html:options collection="collectionList"
                      property="labelProperty"
                 valueProperty="valueProperty" />
    </nested:nest >
    
    collection false true labelName false true labelProperty false true name false true property false true style false true styleClass false true
    optionsCollection Nested Extension - Render a Collection of Select Options org.apache.struts.taglib.nested.html.NestedOptionsCollectionTag empty

    This tag is an extension of the <html:optionsCollection> tag. Please consult its documentation for information on tag attributes and usage details.

    label false true name false true property true true style false true styleClass false true value false true
    password Nested Extension - Render A Password Input Field org.apache.struts.taglib.nested.html.NestedPasswordTag

    This tag is an extension of the <html:password> tag. Please consult its documentation for information on tag attributes and usage details.

    accesskey false true alt false true altKey false true disabled false true indexed false true maxlength false true name false true onblur false true onchange false true onclick false true ondblclick false true onfocus false true onkeydown false true onkeypress false true onkeyup false true onmousedown false true onmousemove false true onmouseout false true onmouseover false true onmouseup false true property true true readonly false true redisplay false true style false true styleClass false true styleId false true size false true tabindex false true title false true titleKey false true value false true
    radio Nested Extension - Render A Radio Button Input Field org.apache.struts.taglib.nested.html.NestedRadioTag

    This tag is an extension of the <html:radio> tag. Please consult its documentation for information on tag attributes and usage details.

    accesskey false true alt false true altKey false true disabled false true indexed false true name false true onblur false true onchange false true onclick false true ondblclick false true onfocus false true onkeydown false true onkeypress false true onkeyup false true property true true onmousedown false true style false true styleClass false true styleId false true tabindex false true title false true titleKey false true value true true
    select Nested Extension - Render A Select Element org.apache.struts.taglib.nested.html.NestedSelectTag JSP

    This tag is an extension of the <html:select> tag. Please consult its documentation for information on tag attributes and usage details.

    accesskey false true alt false true altKey false true disabled false true indexed false true multiple false true name false true onblur false true onchange false true onclick false true ondblclick false true onfocus false true onkeydown false true onkeypress false true onkeyup false true onmousedown false true onmousemove false true onmouseout false true onmouseover false true onmouseup false true property true true style false true styleClass false true styleId false true tabindex false true size false true title false true titleKey false true value false true
    submit Nested Extension - Render A Submit Button org.apache.struts.taglib.nested.html.NestedSubmitTag

    This tag is an extension of the <html:submit> tag. Please consult its documentation for information on tag attributes and usage details.

    accesskey false true alt false true altKey false true disabled false true indexed false true onblur false true onchange false true onclick false true ondblclick false true onfocus false true onkeydown false true onkeypress false true onkeyup false true onmousedown false true onmousemove false true onmouseout false true onmouseover false true onmouseup false true property false true style false true styleClass false true styleId false true tabindex false true title false true titleKey false true value false true
    text Nested Extension - Render An Input Field of Type text org.apache.struts.taglib.nested.html.NestedTextTag

    This tag is an extension of the <html:text> tag. Please consult its documentation for information on tag attributes and usage details.

    accesskey false true alt false true altKey false true disabled false true indexed false true maxlength false true name false true onblur false true onchange false true onclick false true ondblclick false true onfocus false true onkeydown false true onkeypress false true onkeyup false true onmousedown false true onmousemove false true onmouseout false true onmouseover false true onmouseup false true property true true readonly false true size false true style false true styleClass false true styleId false true tabindex false true title false true titleKey false true value false true
    textarea Nested Extension - Render A Textarea org.apache.struts.taglib.nested.html.NestedTextareaTag

    This tag is an extension of the <html:textarea> tag. Please consult its documentation for information on tag attributes and usage details.

    accesskey false true alt false true altKey false true cols false true disabled false true indexed false true name false true onblur false true onchange false true onclick false true ondblclick false true onfocus false true onkeydown false true onkeypress false true onkeyup false true onmousedown false true onmousemove false true onmouseout false true onmouseover false true onmouseup false true property true true readonly false true rows false true style false true styleClass false true styleId false true tabindex false true title false true titleKey false true value false true
    empty Nested Extension - Evaluate the nested body content of this tag if the requested variable is either null or an empty string. org.apache.struts.taglib.nested.logic.NestedEmptyTag JSP

    This tag is an extension of the <logic:empty> tag. Please consult its documentation for information on tag attributes and usage details.

    name false true property false true scope false true
    equal Nested Extension - Evaluate the nested body content of this tag if the requested variable is equal to the specified value. org.apache.struts.taglib.nested.logic.NestedEqualTag JSP

    This tag is an extension of the <logic:equal> tag. Please consult its documentation for information on tag attributes and usage details.

    cookie false true header false true name false true parameter false true property false true scope false true value true true
    greaterEqual Nested Extension - Evaluate the nested body content of this tag if the requested variable is greater than or equal to the specified value. org.apache.struts.taglib.nested.logic.NestedGreaterEqualTag JSP

    This tag is an extension of the <logic:greaterEqual> tag. Please consult its documentation for information on tag attributes and usage details.

    cookie false true header false true name false true parameter false true property false true scope false true value true true
    greaterThan Nested Extension - Evaluate the nested body content of this tag if the requested variable is greater than the specified value. org.apache.struts.taglib.nested.logic.NestedGreaterThanTag JSP

    This tag is an extension of the <logic:greaterThan> tag. Please consult its documentation for information on tag attributes and usage details.

    cookie false true header false true name false true parameter false true property false true scope false true value true true
    iterate Nested Extension - Repeat the nested body content of this tag over a specified collection. org.apache.struts.taglib.nested.logic.NestedIterateTag org.apache.struts.taglib.nested.logic.NestedIterateTei JSP

    This tag is an extension of the <logic:iterate> tag. Please consult its documentation for information on tag attributes and usage details.

    collection false true id false true indexId false true length false true name false true offset false true property false true scope false true type false true
    lessEqual Nested Extension - Evaluate the nested body content of this tag if the requested variable is greater than or equal to the specified value. org.apache.struts.taglib.nested.logic.NestedLessEqualTag JSP

    This tag is an extension of the <logic:lessEqual> tag. Please consult its documentation for information on tag attributes and usage details.

    cookie false true header false true name false true parameter false true property false true scope false true value true true
    lessThan Nested Extension - Evaluate the nested body content of this tag if the requested variable is less than the specified value. org.apache.struts.taglib.nested.logic.NestedLessThanTag JSP

    This tag is an extension of the <logic:lessThan> tag. Please consult its documentation for information on tag attributes and usage details.

    cookie false true header false true name false true parameter false true property false true scope false true value true true
    match Nested Extension - Evaluate the nested body content of this tag if the specified value is an appropriate substring of the requested variable. org.apache.struts.taglib.nested.logic.NestedMatchTag JSP

    This tag is an extension of the <logic:match> tag. Please consult its documentation for information on tag attributes and usage details.

    cookie false true header false true location false true name false true parameter false true property false true scope false true value true true
    messagesNotPresent Nested Extension - Generate the nested body content of this tag if the specified message is not present in this request. org.apache.struts.taglib.nested.logic.NestedMessagesNotPresentTag JSP

    This tag is an extension of the <logic:messagesNotPresent> tag. Please consult its documentation for information on tag attributes and usage details.

    name false true property false true message false true
    messagesPresent Nested Extension - Generate the nested body content of this tag if the specified message is present in this request. org.apache.struts.taglib.nested.logic.NestedMessagesPresentTag JSP

    This tag is an extension of the <logic:messagesPresent> tag. Please consult its documentation for information on tag attributes and usage details.

    name false true property false true message false true
    notEmpty Nested Extension - Evaluate the nested body content of this tag if the requested variable is neither null nor an empty string. org.apache.struts.taglib.nested.logic.NestedNotEmptyTag JSP

    This tag is an extension of the <logic:notEmpty> tag. Please consult its documentation for information on tag attributes and usage details.

    name false true property false true scope false true
    notEqual Nested Extension - Evaluate the nested body content of this tag if the requested variable is not equal to the specified value. org.apache.struts.taglib.nested.logic.NestedNotEqualTag JSP

    This tag is an extension of the <logic:notEqual> tag. Please consult its documentation for information on tag attributes and usage details.

    cookie false true header false true name false true parameter false true property false true scope false true value true true
    notMatch Nested Extension - Evaluate the nested body content of this tag if the specified value is not an appropriate substring of the requested variable. org.apache.struts.taglib.nested.logic.NestedNotMatchTag JSP

    This tag is an extension of the <logic:notMatch> tag. Please consult its documentation for information on tag attributes and usage details.

    cookie false true header false true location false true name false true parameter false true property false true scope false true value true true
    notPresent Nested Extension - Generate the nested body content of this tag if the specified value is not present in this request. org.apache.struts.taglib.nested.logic.NestedNotPresentTag JSP

    This tag is an extension of the <logic:notPresent> tag. Please consult its documentation for information on tag attributes and usage details.

    cookie false true header false true name false true parameter false true property false true role false true scope false true user false true
    present Nested Extension - Generate the nested body content of this tag if the specified value is present in this request. org.apache.struts.taglib.nested.logic.NestedPresentTag JSP

    This tag is an extension of the <logic:present> tag. Please consult its documentation for information on tag attributes and usage details.

    cookie false true header false true name false true parameter false true property false true role false true scope false true user false true
    libstruts1.2-java-1.2.9/xdocs/userGuide/struts-tiles.xml0000644000175000017500000006716110404045210023745 0ustar arnaudarnaud00000000000000 Cedric Dumoulin Tiles Tag Library 1.0 1.1 tiles Tiles Tag Library http://jakarta.apache.org/struts/tags-tiles

    This tag library provides tiles tags.

    Tiles were previously called Components. For historical reasons, names, pages, components and templates are used indifferently to design a tile. Also, a lot of tags and attribute names are left for backward compatibility.

    To know more about tags defined in this library, check the associated documentation: tiles-doc.

    insert Insert a tiles/component/template.

    Insert a tiles/component/template with the possibility to pass parameters (called attribute). A tile can be seen as a procedure that can take parameters or attributes. <template:insert> allows to define these attributes and pass them to the inserted jsp page, called template. Attributes are defined using nested tag <template:put> or <template:putList>.

    You must specify one of this tag attribute :

    • template, for inserting a tiles/component/template page,
    • component, for inserting a tiles/component/template page, (same as template)
    • page for inserting a JSP page, (same as template)
    • definition, for inserting a definition from definitions factory
    • attribute, surrounding tiles's attribute name whose value is used.
      If attribute is associated to 'direct' flag (see put), and flag is true, write attribute value (no insertion).
    • name, to let 'insert' determine the type of entities to insert. In this later case, search is done in this order : definitions, tiles/components/templates, pages.

    In fact, Page, component and template, are equivalent as a tile, component or template are jsp page.

    Example :

    
              <template:insert page="/basic/myLayout.jsp" flush="true">
                <template:put name="title"  value="My first page" />
                <template:put name="header" value="/common/header.jsp" />
                <template:put name="footer" value="/common/footer.jsp" />
                <template:put name="menu"   value="/basic/menu.jsp" />
                <template:put name="body"   value="/basic/helloBody.jsp" />
              </template:insert>
    org.apache.struts.taglib.tiles.InsertTag JSP template false true

    A string representing the URI of a tile or template (a JSP page).

    'page', 'component' and 'template' are synonyms : they have exactly the same behavior.

    component false true

    Path (relative or absolute to webapps) of the component to insert.

    'page', 'component' and 'template' are synonyms : they have exactly the same behavior.

    page false true

    Path (relative or absolute to webapps) of the page to insert.

    'page', 'component' and 'template' are synonyms : they have exactly the same behavior.

    definition false true Name of the definition to insert. Definition are defined in a centralized file. For now, only definition from factory can be inserted with this attribute. To insert a definition defined with tag <template:definition>, use beanName="". attribute false false Name of an attribute in current tile/component context. Value of this attribute is passed to 'name' (see attribute 'name'). name false true Name of an entity to insert. Search is done in this order : definition, attribute, [tile/component/template/page]. beanName false true

    Name of the bean used as value. Bean is retrieved from specified context, if any. Otherwise, method pageContext.findAttribute is used. If beanProperty is also specified, retrieve value from the corresponding bean property.

    If found bean (or property value) is instance of one of Attribute class (Direct, Instance, ...), insertion is done according to the class type. Otherwise, the toString method is called on the bean, and returned String is used as name to insert (see 'name' attribute).

    beanProperty false true Bean property name. If specified, value is retrieve from this property. Support nested/indexed properties. beanScope false false Scope into which bean is searched. If not specified, method pageContext.findAttribute is used. Scope can be any JSP scope, 'component', or 'template'. In these two later cases, bean is search in tile/component/template context. flush false false True or false. If true, current page out stream is flushed before insertion. ignore false true If this attribute is set to true, and the attribute specified by the name does not exist, simply return without writing anything. The default value is false, which will cause a runtime exception to be thrown. role false true If the user is in the specified role, the tag is taken into account; otherwise, the tag is ignored (skipped). controllerUrl false true

    Url of a controller called immediately before page is inserted.

    Url usually denote a Struts action. Controller (action) is used to prepare data to be render by inserted Tile.

    See also controlerClass. Only one of controllerUrl or controllerClass should be used.

    controllerClass false true

    Class type of a controller called immediately before page is inserted.

    Controller is used to prepare data to be render by inserted Tile.

    See also controlerUrl

    Class must implements or extends one of the following :

    • org.apache.struts.tiles.Controller
    • org.apache.struts.tiles.ControllerSupport
    • org.apache.struts.action.Action (wrapper org.apache.struts.action.ActionController is used)

    See also controllerUrl. Only one of controllerUrl or controllerClass should be used.

    definition Create a tile /component / template definition bean. Create a tile/component/template definition as a bean. Newly created bean will be saved under specified "id", in the requested "scope". Definition tag has same syntax as insert tag. The new definition can extends a definition described in factory (XML file), and overload any previously defined parameters. org.apache.struts.taglib.tiles.DefinitionTag JSP id true false Specifies the name under which the newly created definition bean will be saved. scope false false Specifies the variable scope into which the newly defined bean will be created. If not specified, the bean will be created in page scope. template false true A string representing the URI of a tile/component/template (a JSP page). page false true URL of the template / component to insert. Same as "template". role false true Role to check before inserting this definition. If role is not defined for current user, definition is not inserted. Checking is done at insert time, not during definition process. extends false true Name of a parent definition that is used to initialize this new definition. Parent definition is searched in definitions factory. put Put an attribute into tile/component/template context. Define an attribute to pass to tile/component/template. This tag can only be used inside 'insert' or 'definition' tag. Value (or content) is specified using attribute 'value' (or 'content'), or using the tag body. It is also possible to specify the type of the value :
    • string : Content is written directly.
    • page | template : Content is included from specified URL. Name is used as an URL.
    • definition : Content come from specified definition (from factory). Name is used as definition name.
    If type is specified, it is taken into account by 'get' or 'insert' inside the inserted tile.

    If 'type' attribute is not specified, content is 'untyped', unless it comes from a typed bean.

    Note that using 'direct="true"' is equivalent to 'type="string"'.

    org.apache.struts.taglib.tiles.PutTag JSP name false false Name of the attribute. value false true Attribute value. Could be a String or an Object. Value can come from a direct assignment (value="aValue") or from a bean. One of 'value' 'content' or 'beanName' must be present. content false true Content that's put into tile scope. Synonym to value. Attribute added for compatibility with JSP Template. direct false false Determines how content is handled: true means content is printed directly; false, the default, means content is included. This is another way to specify content type. If 'direct=true' content is 'string', if 'direct=false', content is 'page'. Attribute added for compatibility with JSP Template. type false false Specify content type: string, page, template or definition.
    • String : Content is printed directly.
    • page | template : Content is included from specified URL. Name is used as an URL.
    • definition : Value is the name of a definition defined in factory (xml file). Definition will be searched in the inserted tile, in a <template:insert attribute="attributeName"> tag, where 'attributeName' is the name used for this tag.
    If 'type' attribute is not specified, content is 'untyped', unless it comes from a typed bean.
    beanName false true Name of the bean used as value. Bean is retrieved from specified context, if any. Otherwise, method pageContext.findAttribute is used. If beanProperty is specified, retrieve value from the corresponding bean property. beanProperty false true Bean property name. If specified, value is retrieve from this property. Support nested/indexed properties. beanScope false false Scope into which bean is searched. If not specified, method pageContext.findAttribute is used. Scope can be any JSP scope, 'tile', 'component', or 'template'. In these three later cases, bean is search in tile/component/template context. role false true If the user is in the specified role, the tag is taken into account; otherwise, the tag is ignored (skipped).
    putList Declare a list that will be pass as attribute to tile. Declare a list that will be pass as attribute to tile. List elements are added using the tag 'add'. This tag can only be used inside 'insert' or 'definition' tag. org.apache.struts.taglib.tiles.PutListTag JSP name true false Name of the list. add Add an element to the surrounding list. Equivalent to 'put', but for list element. Add an element to the surrounding list. This tag can only be used inside putList tag. Value can come from a direct assignment (value="aValue") or from a bean. One of 'value' or 'beanName' must be present. org.apache.struts.taglib.tiles.AddTag JSP value false false Element value. Can be a String or Object. content false true Element value. Can be a String or Object. Synonym to value. Attribute added for compatibility with JSP Template. direct false false Determines how content is handled: true means content is printed directly; false, the default, means content is included. This is another way to specify content type. If 'direct=true' content is 'string', if 'direct=false', content is 'page'. Attribute added for compatibility with JSP Template. type false false Specify content type: string, page, template or instance.
    • String : Content is printed directly.
    • page | template : Content is included from specified URL. Name is used as an URL.
    • definition : Value denote a definition defined in factory (xml file). Definition will be searched in the inserted tile, in a <insert attribute="attributeName"> tag, where 'attributeName' is the name used for this tag.
    If 'type' attribute is not specified, content is 'untyped', unless it comes from a typed bean.
    beanName false true Name of the bean used as value. Bean is retrieved from specified context, if any. Otherwise, method pageContext.findAttribute is used. If beanProperty is specified, retrieve value from the corresponding bean property. beanProperty false true Bean property name. If specified, value is retrieve from this property. Support nested/indexed properties. beanScope false false Scope into which bean is searched. If not specified, method pageContext.findAttribute is used. Scope can be any JSP scope, 'component', or 'template'. In these two later cases, bean is search in tile/component/template context. role false true

    If the user is in the specified role, the tag is taken into account; otherwise, the tag is ignored (skipped).

    The role isn't taken into account if <add> tag is used in a definition.

    get Gets the content from request scope that was put there by a put tag. org.apache.struts.taglib.tiles.GetTag empty

    Retrieve content from tile context and include it.

    Take into account the 'type' attribute.

    name true true The name of the content to get from tile/component scope. ignore false true If this attribute is set to true, and the attribute specified by the name does not exist, simply return without writing anything. The default value is false, which will cause a runtime exception to be thrown. flush false false True or false. If true, current page out stream is flushed before insertion. role false true If the user is in the specified role, the tag is taken into account; otherwise, the tag is ignored (skipped).
    getAsString Render the value of the specified tile/component/template attribute to the current JspWriter Retrieve the value of the specified tile/component/template attribute property, and render it to the current JspWriter as a String. The usual toString() conversions is applied on found value.

    Throw a JSPException if named value is not found.

    org.apache.struts.taglib.tiles.GetAttributeTag empty name true true Attribute name. ignore false true If this attribute is set to true, and the attribute specified by the name does not exist, simply return without writing anything. The default value is false, which will cause a runtime exception to be thrown. role false true If the user is in the specified role, the tag is taken into account; otherwise, the tag is ignored (skipped).
    useAttribute Use attribute value inside page.

    Declare a Java variable, and an attribute in the specified scope, using tile attribute value.

    Java variable and attribute will have the name specified by 'id', or the original name if not specified.

    org.apache.struts.taglib.tiles.UseAttributeTag org.apache.struts.taglib.tiles.UseAttributeTei empty id false false Declared attribute and variable name. classname false false Class of the declared variable. scope false false Scope of the declared attribute. Default to 'page'. name true true Tile's attribute name. ignore false true If this attribute is set to true, and the attribute specified by the name does not exist, simply return without error. The default value is false, which will cause a runtime exception to be thrown.
    importAttribute Import Tile's attribute in specified context. Import attribute from tile to requested scope. Attribute name and scope are optional. If not specified, all tile attributes are imported in page scope. Once imported, an attribute can be used as any other beans from jsp contexts. org.apache.struts.taglib.tiles.ImportAttributeTag empty name false true Tile's attribute name. If not specified, all attributes are imported. scope false false Scope into which attribute is imported. Default to page. ignore false true If this attribute is set to true, and the attribute specified by the name does not exist, simply return without error. The default value is false, which will cause a runtime exception to be thrown. initComponentDefinitions Initialize Tile/Component definitions factory.

    Initialize Tile/Components definitions factory.

    In order to use Tile/Component definitions factory, you need to initialize the factory. This is generally done in a initializing servlet. In particular, it is done in "ComponentActionServlet" if you use it. If you don't initialize factory in a servlet, you can initialize it using this tag. You need to provide the description file name, and optionally the factory classname. Initialization is done only once, at the first call of this tag. Subsequent calls are ignored (tag checks existence of the factory.

    org.apache.struts.taglib.tiles.InitDefinitionsTag empty file true false Definition file name. classname false false If specified, classname of the factory to create and initialized.
    libstruts1.2-java-1.2.9/xdocs/acquiring.xml0000644000175000017500000001003410404045250021300 0ustar arnaudarnaud00000000000000 Acquiring - The Apache Struts Web Application Framework Craig R. McClanahan Ted Husted Martin Cooper James Holmes

    The latest production release of Struts is available in a convenient binary distribution and also with complete source code.

    Apache downloads are now mirrored. When you follow either the Binary or Source link, please select your preferred mirror and then click on the link to the Struts download.

    In addition to a Struts distribution, you will need to ensure that you have downloaded and installed all of the prerequisite software applications. Then, follow the appropriate instructions to install and use a Struts binary distribution in your web application or for building Struts from the source distribution.

    For developers who are helping to develop Struts, or who just want "the latest bits", the latest development version is made available each morning. Use at your own risk!

    If you are building Struts from source, be sure to refer to the Installation page in the User Guide for prerequesites. There are several JARs from the Jakarta Commons project that are required to build Struts.

    If you are interested in the Tag Library Descriptor (TLD) files, they are maintained in the /conf/share folder of the main repository.

    Also be sure to check the Release Notes for the nightly builds so you know what you are getting!

    Access to the Subversion repository for Struts is available through both web browser and Subversion client interfaces.

    Next: Using Struts

    libstruts1.2-java-1.2.9/xdocs/announce.xml0000644000175000017500000002631010404045246021135 0ustar arnaudarnaud00000000000000 Ted Husted Martin Cooper Announcements

    30 Jun 2003 - Struts 1.1 Final released

    The Struts team is proud, and extremely pleased, to announce the Final release of Struts 1.1. This release includes significant new functionality, as well as numerous fixes for bugs which were reported against the previous release, and supersedes the earlier 1.0.2 version as the latest official release of Struts from the Apache Software Foundation.

    The binary distribution is available at: http://www.apache.org/dist/jakarta/struts/binaries/

    and the source distribution is available at: http://www.apache.org/dist/jakarta/struts/source/

    In addition, the library distribution, which contains updated binaries without the sample applications, is available at:

    http://www.apache.org/dist/jakarta/struts/library/

    Details of the changes in this release are available in the Release Notes,which can be found here:

    http://jakarta.apache.org/struts/userGuide/release-notes-1.1.html


    23 Feb 2003 - Struts 1.1 Release Candidate 1 Released

    The Struts team is proud to announce the release of Struts 1.1 Release Candidate 1. This release includes some new functionality, as well as fixes for a number of bugs which were reported against earlier versions. The Struts Team believes that this release is ready for prime time, hence its designation as a release candidate.

    The binary distribution is available at:

    http://www.apache.org/dist/jakarta/struts/binaries/

    and the source distribution is available at:

    http://www.apache.org/dist/jakarta/struts/source/

    In addition, the library distribution, which contains updated binaries without the sample applications, is available at:

    http://www.apache.org/dist/jakarta/struts/library/

    Details of the changes in this release are available in the Release Notes, which can be found here:

    http://jakarta.apache.org/struts/userGuide/release-notes-1.1-rc1.html


    31 Dec 2002 - Struts 1.1 Beta 3 Released

    The Struts team is proud to announce the release of Struts 1.1 Beta 3. This release includes significant new functionality, while retaining full backwards compatibility with earlier versions of Struts. It also incorporates fixes for a number of bugs which were reported against earlier versions.

    The binary distribution is available at:

    http://www.apache.org/dist/jakarta/struts/binaries/

    and the source distribution is available at:

    http://www.apache.org/dist/jakarta/struts/source/

    In addition, the library distribution, which contains updated binaries without the sample applications, is available at:

    http://www.apache.org/dist/jakarta/struts/library/

    Details of the changes in this release are available in the Release Notes, which can be found here:

    http://jakarta.apache.org/struts/userGuide/release-notes-1.1-b3.html


    12 Aug 2002 - Struts 1.1 Beta 2 Released

    The Struts team is proud to announce the release of Struts 1.1 Beta 2. This release includes significant new functionality, while retaining full backwards compatibility with earlier versions of Struts. It also incorporates fixes for a number of bugs which were reported against earlier versions.

    The binary distribution is available at:

    http://jakarta.apache.org/builds/jakarta-struts/release/v1.1-b2/

    and the source distribution is available at:

    http://jakarta.apache.org/builds/jakarta-struts/release/v1.1-b2/src/

    In addition, the library distribution, which contains updated binaries without the sample applications, is available at:

    http://jakarta.apache.org/builds/jakarta-struts/release/v1.1-b2/lib/

    Details of the changes in this release are available in the Release Notes, which can be found here:

    http://jakarta.apache.org/struts/userGuide/release-notes-1.1-b2.html


    19 Mar 2002 - Struts 1.1 Beta 1 Released

    The Struts team announces the release of Struts 1.1 Beta 1. This release includes substantial new functionality, while retaining full backwards compatibility with earlier versions of Struts. It also incorporates fixes for a number of bugs which were reported against earlier versions.

    The binary distribution for this release is available here and the source distribution is available here. In addition, a library distribution, which consists of a minimal binary distribution, without sample web applications or additional code, is available here.


    11 Feb 2002 - Struts 1.0.2 Released

    The Struts team announces the release of Struts 1.0.2. This release is a bug fix only release, which fixes a compatibility problem inadvertently introduced with the previous 1.0.1 release.

    The binary distribution for this release is available here and the source distribution is available here. In addition, a library distribution, which consists of a minimal binary distribution, without sample web applications or additional code, is available here.


    12 Jan 2002 - Struts 1.0.1 Released

    The Struts team is proud to announce the release of Struts 1.0.1. This release is primarily a bug fix release, which fixes a number of known problems with the previous 1.0 release.

    The binary distribution for this release is available here and the source distribution is available here. In addition, a library distribution, which consists of a minimal binary distribution, without sample web applications or additional code, is available here.


    15 Jun 2001 - Struts 1.0 Released

    The production release of Struts 1.0, an open source framework for building Web applications, is now available for download at jakarta.apache.org. Struts encourages application architectures based on the Model-View-Controller (MVC) pattern and provides services common to most Web applications. Struts helps developers deploy products that are reliable, scaleable, and easier to maintain.

    The Struts framework offers services in three primary areas:

    * A controller servlet to dispatch requests to specific Action classes (provided by the application developer).
    * JSP custom tags to help developers create interactive form-based applications.
    * Utility classes for XML parsing, automatic JavaBean population, and internationalization of prompts and messages.

    Struts' support for internationalization builds on top of the Java Locale API, and have made it a popular choice for applications worldwide. Struts contributors include developers from Australia, France, Russia, and other parts of the globe.

    In addition to the Struts official distribution, several third-party libraries are already available, which offer enhanced support for JSP templates, HTML form validation, and automatic JavaBean creation. Struts has also been integrated with the Expresso Framework distributed by JCorporate Ltd. (jcorporate.com).

    Struts can be used with a J2EE Application server to deploy distributed applications, but will run under any compliant Servlet container (Servlet API 2.2+, JSP 1.1+), including Tomcat 3.2 or later. In fact, Struts is already used as an informal compliance test for Java Servlet containers and J2EE Application servers

    The Struts project was founded in May 2000 by Craig McClanahan. McClanahan is also the lead developer of Tomcat 4.0, Sun's reference implementation for Java Servlet and ServerPage containers. Both Tomcat and Struts are open source available under the Apache Software License, and may be downloaded at jakarta.apache.org.

    Twenty-six independent developers contributed to the creation of Struts 1.0, with the help of over 1300 subscribers to the Struts mailing lists.


    Next: User and Developer Guides

    libstruts1.2-java-1.2.9/xdocs/example.xml0000644000175000017500000000523310404045232020756 0ustar arnaudarnaud00000000000000 Steve Raeburn Mr. Smith

    This is section 1.

    This is a tableThis is a table
    This is a tableThis is a table
    • This is an unordered list.

    This is section 2.

    1. This is an ordered list.

    This is section 3.

    Anything within this tag is rendered as a "box" with blue lines and
     tags around it.
    
    
        
        

    This is the subsection 3.

    ]]>
    libstruts1.2-java-1.2.9/xdocs/faq.fml0000644000175000017500000001641710404045242020057 0ustar arnaudarnaud00000000000000 General Why do we need Struts? Java technologies give developers a serious boost when creating and maintaining applications to meet the demands of today's public Web sites and enterprise intranets. Struts combines Java Servlets, Java ServerPages, custom tags, and message resources into a unified framework. The end result is a cooperative, synergistic platform, suitable for development teams, independent developers, and everyone in between. How does Struts work? Java Servlets are designed to handle requests made by Web browsers. Java ServerPages are designed to create dynamic Web pages that can turn billboard sites into live applications. Struts uses a special Servlet as a switchboard to route requests from Web browsers to the appropriate ServerPage. This makes Web applications much easier to design, create, and maintain. Is Struts compatible with other Java technologies? Yes. Struts is committed to supporting industry standards. Our lead developer is a member of JSR052, Sun's Expert group for developing a standard library of custom JSP tags. A primary design criteria is that Struts must be compatible with Sun's J2EE platform for corporate enterprises. In fact, Struts really acts as an integrator of Java technologies, so that they can be used in the "real world". Who wrote Struts?

    Struts was created by Craig R. McClanahan, and donated to the Apache Software Foundation in May 2000. Craig is the primary developer of both Struts and Tomcat 4, the basis for the official reference implementation for a servlet 2.3 and JSP 1.2 container. With stable releases of Struts and Tomcat 4 in circulation, Craig is now the Specification Lead for JavaServer Faces (JSR-127), and is the Web Layer Architect for the Java2 Enterprise Edition (J2EE) platform as a whole.

    There are now many active committers to the Struts project, working cooperatively from around the globe. Other Java developers are invited to contribute to the project. Struts is an Apache Jakarta project, with the common mission to "provide commercial-quality server solutions based on the Java Platform that are developed in an open and cooperative fashion". All told, 17 individual developers and committers contributed to the Struts 1.0 codebase.

    Why is it called Struts? It's a reference to struts in the architectural sense, a reminder of the nearly invisible pieces that hold up buildings, houses, and bridges. How is Struts licensed? Struts is copyrighted software available under a "free-to-use-license" by The Apache Software Foundation. The license appears at the head of every source code file. A reference copy of the license is available here. Can Struts be used in a commercial product?

    Yes. The only requirements you must meet are those listed in the Apache Software Foundation license, which is included at the top of each source file and in the file LICENSE in the top-level directory of the distribution.

    In addition, contributions of patches, improved code, new features, or even just requests for features are also welcome.

    Do I have to credit Struts on my own website? You need to credit Struts if you redistribute your own framework based on Struts for other people to use. (See the Apache License for details.) But you do not need to credit Struts just because your web application utilizes the framework. It's the same situation as using the Apache HTTPD server or Tomcat. Not required if its just running your web site. Required if you've used the source code to create your own server that you are redistributing to other people. Where can I get a copy of Struts? The best place to download Struts is at jakarta.apache.org/struts. The nightly builds are very stable, and recommended as the best place to start today. How do I install Struts?

    To develop applications with Struts, you can usually just add the Struts JAR file to your Java development environment. You can then start using the Struts classes as part of your own application. A blank Struts application (in the webapps directory, open struts-blank.war) is provided, which you can just copy to get a quick-start on your own brainchild.

    Since the full source code for Struts is available, we also provide complete instructions for compiling your own Struts JAR from scratch. (This is actually easier than it looks!)

    Your Struts application can usually be deployed using a standard WAR file. In most cases, you simply deposit the WAR file on your application server, and it is installed automatically. If not, step-by-step installation instructions for various servlet containers are available.

    libstruts1.2-java-1.2.9/xdocs/index.xml0000644000175000017500000002015510404045242020433 0ustar arnaudarnaud00000000000000 The Apache Struts Web Application Framework Craig R. McClanahan Ted Husted Martin Cooper James Holmes David Graham

    Welcome to Struts! The goal of this project is to provide an open source framework for building Java web applications.

    The core of the Struts framework is a flexible control layer based on standard technologies like Java Servlets, JavaBeans, ResourceBundles, and XML, as well as various Jakarta Commons packages. Struts encourages application architectures based on the Model 2 approach, a variation of the classic Model-View-Controller (MVC) design paradigm.

    Struts provides its own Controller component and integrates with other technologies to provide the Model and the View. For the Model, Struts can interact with standard data access technologies, like JDBC and EJB, as well as most any third-party packages, like Hibernate, iBATIS, or Object Relational Bridge. For the View, Struts works well with JavaServer Pages, including JSTL and JSF, as well as Velocity Templates, XSLT, and other presentation systems.

    The Struts framework provides the invisible underpinnings every professional web application needs to survive. Struts helps you create an extensible development environment for your application, based on published standards and proven design patterns.

    Struts is part of the Apache Jakarta Project, sponsored by the Apache Software Foundation. The official Struts home page is at http://jakarta.apache.org/struts.

    Struts is a volunteer project and all support for the framework is provided by unpaid volunteers. This documentation bundle and the mailing lists are the primary ways to learn how to use Struts. The next few pages are devoted to helping you understand what resources are available to you. Since Struts is a volunteer project, and our resources are limited, it is important that we first help you help yourself.

    A web application uses a deployment descriptor to initialize resources like servlets and taglibs. The deployment descriptor is formatted as a XML document and named "web.xml". Likewise, Struts uses a configuration file to initialize its own resources. These resources include ActionForms to collect input from users, ActionMappings to direct input to server-side Actions, and ActionForwards to select output pages.

    Here's a simple Struts configuration (struts-config.xml) for a login workflow:

    ]]>

    There are several other resources you can specify in Struts configuration files. You can specify validations for the ActionForms in an XML descriptor, using the Struts Validator. Another extension, Tiles, helps you build pages from smaller fragments.

    Struts is an extensible framework. Every class deployed by Struts can be replaced by your own default class. The properties of your default class can be set using the Digester's set-property feature. This is one reason why there are so many contributor extensions for Struts. Struts provides a base framework, but you can still write your application your way.

    For more about Struts and its underlying technologies, see the User Guide and the Developer Guides.

    No. If you need to write a very simple application, with a handful of pages, then you might consider a "Model 1" solution that uses only server pages.

    But, if you are writing a more complicated application, with dozens of pages, that need to be maintained over time, then Struts can help. For more about whether Model 1 or or MVC/Model 2 is right for you, see Understanding JavaServer Pages Model 2 architecture and Issues in Struts Adoption.

    Next: Learning About Struts

    What about JSTL and JavaServer Faces?

    libstruts1.2-java-1.2.9/xdocs/learning.xml0000644000175000017500000002672710404045240021134 0ustar arnaudarnaud00000000000000 Learning - The Apache Struts Web Application Framework Craig R. McClanahan Ted Husted Martin Cooper James Holmes

    The official documentation for the framework is provided both online and as a self-installing WAR in the distribution. The struts-documentation.war includes our

    You are invited to preview the documentation online and then install the application locally for closer study.

    NOTE: If you are previewing the documentation on the website, most of the links in this section will refer to the Nightly Build. When learning about Struts, be sure to refer to the documentation for the version you are actually using. The documentation is bundled with each distribution as an application that you can install and use locally.

    The concise Struts User Guide introduces the Model-View-Controller architecture, and how it relates to the major components of Struts. If you want to find out "How Struts works", this is the place to start. Along with an architectural overview, the User Guide also includes detailed installation instructions and release notes for each version of the framework.

    Our Developer Guides are detailed technical references to the extensions and components provided in the Struts distribution. Included are package overviews and API reference for each of the Struts taglibs, along with guides to the Struts Utilities and the Struts Validator. The Developer Guides are designed as a day-to-day reference to help you get the most out of the standard packages. Links to the various Developer Guides are provided as part of User Guide menu.

    For more detail about a specific class or package, the Struts Javadocs are surprisingly comprehensive and carefully maintained. It is strongly recommended that you refer to the Javadoc for each class as you begin to use it. This will help ensure that important features and options are not overlooked. What you don't know, can't help you.

    The Struts FAQs are designed to fill in any small gaps left by the Javadocs or the User and Developer Guides.

    • The Kickstart FAQ answers the most common non-technical questions people first ask about Struts.
    • The Struts Newbie FAQ answers the most common technical questions asked by first-timer Struts developers.
    • The How to Help FAQ answers the most common questions about contributing to the Jakarta-Struts project.

    The Howto Guides are designed to help you get started with some of the optional extensions and components available for Struts. These include topics like using the Secure Socket Layer (SSL) protocol with Struts and how to unit test your Struts applications.

    The Struts Wiki is a relatively new addition to the Struts documentation. All members of the Struts Community are invited to post comments to the Wiki, as well as the User List. The Wiki is best suited for threads that you think are of lasting importance, while the mailing lists are best suited for incidental questions.

    If you have any comments on the pages you see here, they can be posted to the Wiki by following the link on the bottom of any page.

    For more help, you might try the JGuru Struts knowledgebase at the JGuru FAQ and Forum.

    Of course, the only true documentation is the code itself. If you have any questions about how Struts actually works, do not hesitate to use the source. For the complete, buildable source code to the entire Struts framework, see the "src" folder in your source distribution.

    To help you see how it all fits together, several example applications are bundled with the Struts distribution:

    • Blank - A simple template for starting new Struts applications.
    • Exercise-Taglib - A set of test pages that also demonstrate use of the custom tags.
    • Documentation - The Struts documentation bundle, as seen on the website.
    • MailReader - The original Struts example application. Try me first!
    • Tiles-Doc - Extensive demonstration of Tiles extension.
    • Upload - Demonstrates using the file upload facilities. (Based on Commons Upload.)
    • Validator - Demonstrates using the Validator extension.

    These applications are provided as standalone WARs in the binary distribution. The source code for each application is available under WEB-INF/src in the binaries and under the web package in the source distribution.

    There are also many third-party example applications available for study, including these:

    • AppFuse - Demonstrates using XDoclet with Struts, along with different security packages and Hibernate for database persistence.
    • JPetStore - A streamlined version of the Java Petstore application implemented with Struts and iBATIS database layer.
    • LogWeb - A Struts webapp for configuring Log4J at runtime within a servlet container.

    The Struts Mailing Lists are a treasure trove of useful, interactive information. The user list tends to carry a high volume, so always check the published documentation and the MAILING LIST ARCHIVE before posting a new question. Like as not, it's already been asked and answered.

    If you really can't find the answer to your question in the FAQs or list archive, you can post your query to the Struts User list -- BUT YOU MUST SUBSCRIBE TO THE USER LIST OR THE USER LIST DIGEST BEFORE POSTING.

    Please note that the Struts User list enjoys a "casual friday" policy. More off-topic messages are tolerated on Fridays so long as the message is prefixed with the token [FRIDAY]. If you'd rather not be troubled by these postings, please set your mail filter accordingly. Posting [FRIDAY] articles on any other weekday is strongly discouraged. We thank you for your cooperation.

    The Struts Wiki is a relatively new addition to our documentation. Any member of the community (that means you!) is invited to post new material to the Wiki. However, the Wiki is not the place to ask incidental questions. All support questions should be directed to the Struts User list or other support forum.

    There is also a set of Wiki pages devoted to comments on the documentation. To comment on the documentation, follow the "Comments?" link at the bottom of any page.

    The Roadmap page outlines our tentative plans for future development.

    Struts has attracted a large and robust community of developers. Some of these developers have a created an independant SourceForge site to promote new extensions to the Struts framework. As a service to our community, the Struts SourceForge site maintains an extensive directory of Struts resources. including.

    The Apache Software Foundation does not provide printed manuals, but several third-party books about Struts are available. A current list of books about Struts is maintained by the Struts Community Resources area.

    Next: Acquiring Struts

    libstruts1.2-java-1.2.9/xdocs/navigation.xml0000644000175000017500000001060610404045220021457 0ustar arnaudarnaud00000000000000 Struts Jakarta libstruts1.2-java-1.2.9/xdocs/project.xml0000644000175000017500000000600210404045212020762 0ustar arnaudarnaud00000000000000 Apache Struts Web Application Framework libstruts1.2-java-1.2.9/xdocs/releases.xml0000644000175000017500000002534710404045214021136 0ustar arnaudarnaud00000000000000 Release Guidelines - The Apache Struts Web Application Framework Ted Husted

    This document describes the Struts release process and our coding conventions. Both stable and development releases are available for download.

    A point release should be made before and after any product change that is not a "fully-compatible change" (see link). This includes moving a dependency from an internal package to an external product, including products distributed through the Jakarta Commons. We should place any fully-compatible changes in the hands of the community before starting on a change that is only "interface" or "external-interface" compatible.

    A fully-compatible point release does not always need a "preview" beta or milestone release. If appropriate, a Release Candidate can be cut, uploaded to the Release Manager's home directory on svn.apache.org (~/public_html), and voted to be released to the general public from there.

    Any release should follow the same general process used by the Jakarta Commons and the Apache HTTP Server project.

    Additional remarks:

    • The release process can seem daunting when you review it for the first time. But, essentially, it breaks down into three phases of just a few steps each:
      • Building - Bugzilla, dependencies, release notes, JAR manifest, licenses, copyrights, and build (using the release target).
      • Testing - JUnit, Cactus, web apps (for all "supported" containers).
      • Distributing - Checksum, sign, mirror, release, update Struts site, update Jakarta site, announce.
    • Our dependencies on external JARs (including Commons JARs) should be in line with our own release status. Our nightly build can be dependant on another nightly build. Our beta can be dependant on another beta, but should avoid a dependance on a nightly build. Our release candidate can have a dependance on another RC, but should not have a dependance on a beta (and certainly not a nightly build). Our final release can only have dependencies on other final releases.
    • Use your own discretion as to detail needed by the Release Notes. A high-level description of the changes is more important than providing uninterpreted detail. At a minimum, new features and deprecations should be summarized, since these are commonly asked questions. Ideally, the release notes should be maintained continuously for the nightly build so that we do not need to quickly assembled them on the eve of a Release.
    • Test building the distribution under prior version of J2SE, if possible, to ensure that we are still backwardly-compatible. But, our Release distribution should be built using the latest release of J2SE, to take advantage of all available compiler enhancements.
    • Before building the release, run the JUnit and Cactus tests using the same configuration used that will be used to build the Release distribution.
    • There is a "release" target in the buildfile that will zip and tar the releases. Before uploading the release, extract the sample web applications and deploy the WARs under each of the "supported" containers. Play test each application under each container to be sure they operate nominally.
    • Be sure to copy the pmc@jakarta.apache.org list on any release announcement.
    • Remember to update the Status section of the Roadmap page once a release is available.
    • By the way, the nightly builds are being created on a machine of Craig McClanahan's. If there are problems with a nightly build that seem infrastructure related, Craig is the one to contact.

    Source code and documentation contributed to the Struts repositories should observe the:

    as core references regarding the formatting of code and documentation.

    Clarifications

    • First, "Observe the style of the original". Resist the temptation to make stylistic changes for their own sake. But, if you must reformat code, commit style changes separately from code changes. Either change the style, commit, and then change the code, or vice- versa.
    • Set editors to replace tabs with spaces, and do not trim trailing spaces.
    • Specify imported classes (do not use .*).
    • Write all if/else statements as full blocks with each clause within braces, unless the entire statement fits on the same line.
    • Use :FIXME: and :TODO: tokens to mark follow up notes in code. You may also include your Apache username and the date. :FIXME: we need to do this sometime (husted 2002-11-14)
    • Use @since to document changes between Struts versions, as in @since Struts 1.1.
    • Wrap lines of code and JavaDoc at column 78. You can include a "comment rule" in the source to help with this.
      // ------------------------------------------------------------------------ 78
    • Please do your best to provide high-quality JavaDocs for all source code elements. Package overviews (aka "Developer Guides") are also encouraged.
    • When working on a bugfix, please first write a JUnit test that proves the bug exists, and then use the test to prove the bug is fixed. =:0)
    • When working on an enhancement, please feel free to use test-driven design and write the test first <head-slap/>. For more about TDD, see the MockObjects project .
    • As files are updated from year to year, the copyright on each file should be extended to include the current year. You do not need to change the copyright year unless you change the file. Every source file should include the current Apache License and copyright.
    • Provide high-level API compatibility for any changes made within the same major release series (#.x). Changes which adversely affect compatibility should be slotted for the next major release series (++#.x).
    • Our favorite books about programming are Design Patterns and Refactoring.
    • Our favorite book about open source development is the The Cathedral and the Bazaar.
    • Our favorite science fiction author is Robert Heinlein. TANSTAAFL.
      (Except on Friday, when we favor Douglas Adams. SLATFATF.)

    Next: News and Status

    libstruts1.2-java-1.2.9/xdocs/status.xml0000644000175000017500000005426110404045206020654 0ustar arnaudarnaud00000000000000 Status - The Apache Struts Web Application Framework Craig R. McClanahan Ted Husted Steve Byrne

    The stable production release is Struts 1.1.0 (29 June 2003).


    $Id: status.xml 51200 2003-11-29 07:27:33Z sraeburn $

    This document outlines some of changes we expect to see in future releases of Struts.

    This document is provided for discussion purposes only. All releases and changes to the codebase are subject to a vote of the Struts Committers.

    The Struts development teams uses the Apache Bug Database (Bugzilla) to manage problem reports and enhancement requests. For your convenience, here are some common Bugzilla queries:

    The platform requirements throughout the Struts 1.x series will remain the same (Servlet 2.2 / JSP 1.1). Though, later platforms may be supported as an option.

    Releases in the 1.x series will focus on refactoring of existing functionality, with a continued emphasis on backward compatibility, as were seen in Struts 1.1. However, we expect there to releases to be incremental throughout the rest of the 1.x series, so that improvements and fixes become available to production teams every few weeks.

    Any feature that can be implemented under Servlet 2.2/JSP 1.1 may be considered for the Struts 1.x series. This may include, but is not limited to, better support for alternate view technologies (like XLST), integrated unit testing, integrated support for HTTP/HTTPS mode switching, better workflow handling, support for alternative action types (e.g. BSF actions), a chainable request processor, support for an Action context, and so forth.

    Features most likely to be considered are those that have already been implemented as third-party extensions and are in active use by the Struts Community, such as those distributed through the Struts SourceForge site.

    Throughout the 1.x series, there will be a continued emphasis on expanding unit test coverage for the framework. Bug reports should include a failing test case when possible. Proposals for new features should include a working test suite. (Creating features through Test Driven Development is strongly encouraged.)

    Enhancement requests are logged in Bugzilla they are suggested. The listing of an enhancement in Bugzilla does not imply that is being "planned", merely that some member of the community has suggested it, and the idea hasn't been ruled out (yet).

    Future release milestones are provided for enhancements which are being actively planned or developed but may not be ready for the very next release. If a report has not been tagged for a specific milestone by a working developer, then it may never be resolved. When developers (including non-Committers) are actually working on an enhancement, they should re-tag it for a specific release milestone, such as "1.2.1" or "1.2.2".

    If an enhancement has not been tagged for a specific target, feel free to start working on it yourself. Many of our best features have been contributed by developers, just like you. If you would like to announce your active interest in an enhancement, please post a note on the ticket, and tag it to an appropriate release milestone.

    These are some general ideas we have about what may happen in the Struts 1.x series. This is a whiteboard and everything here is subject to change.

    • Struts 1.0.0 (complete) - Major refactoring of Struts internals to provide support for modules and a new "config" object series. Bundles Struts Tiles and Struts Validator into main distribution. The initial release of Struts EL is provided as an optional package.
    • Struts 1.2.x - Continued refactorings of the Struts 1.x product series.
      • Remove deprecations created in the 1.0 to 1.1 timeframe, and prior
      • Other minor enhancements and refactorings
    • Struts 1.3.x - More substantial enhancements to product base
      • Move to Commons Resources
      • Move taglibs into separate JARs
      • Enhance all configs to extend one configuration element from another, as is done with Tiles Definitions
    • Struts 1.4.x - More substantial enhancements to product base
      • Consider new Request Processor, if available (which might be based on the Commons Chain of Responsiblity package)
      • Consider migration to an Action context (which also might be based no the Commons Chain of Responsiblity package)
      • Consider enhanced support for other platforms (2.3/1.2) if this can be accomplished by specifying an alternate Request Processor
    • Other potential enhancements for the 1.x.x series

    Struts 2.x (aka Struts "Next Generation") will include broader enhancements. We anticipate that the implementation will utilize the Servlet 2.4 / JSP 2.0 platform, but may optionally support earlier platforms.

    We anticipate that Struts 2.x will rely on JSTL and the JavaServer Faces API as supporting technologies. However, the focus of the Struts framework will remain on the Controller aspect of a Model 2/MVC architecture. The core framework will continue to be both Model and View independent.

    Development of Struts 2.x will include taking a completely fresh look at the architecture. The goal for 2.x will be to incorporate everything we've learned in the past years of Struts usage, and create something even better. Development will follow current best practices, like Test Driven Development, and rely on technologies like Maven for project management.

    Of course, it is anticipated that the Struts team will continue to support the 1.x codebase for a long time with bugfixes and incremental enhancements. (Mainly because many of us will still be using it on our production sites!) Accordingly, it is anticipated that the development of the 2.x and 1.x series will occur in tandem. At some point, 2.x milestones may appear alongside new 1.x releases.

    Target features include:

    • Comprehensive unit test coverage for all core features
    • Enhanced support for using Struts in large team environments.
    • Transparent support for a portlet environment (JSR 168), with minimal-to-no changes in your business logic and pages.
    • Direct support for JSTL/JSF taglibs and the JSF API
    • Enhanced support for other presentation layers, such as XLST
    • Enhanced support for scriptable Actions, using technologies like BSF or Jelly
    • Refactoring for new technologies available on the Servlet 2.4/ JSP 2.0 platform

    There are three major issues with supporting JSR-168 (and I'm sure a bunch of smaller ones as well):

    • Struts APIs assume servlet API objects (ServletContext, ServletRequest, ServletResponse), whereas JSR-168 talks aboutPortletContext, PortletRequest, and PortletResponse. We'd either need to change the calling sequence for Action.execute() -- problematic for backwards compatibility -- or fake it somehow in a portlet environment.
    • The lifecycle of a portlet request is actually divided into two chunks -- processing and then rendering. From a Struts perspective, that means making sure that the first part of the request processor pipeline need to happen in the "process" part, and the forwarding to the resulting page needs to happen in the "render" part.
    • Today, Struts owns the process of calculating URLs for pages and actions. Because it's in a webapp, it knows exactly what to do for the developer. However, in a portlet container it's actually the portal server that manages URLs, so a Struts-based portlet would need to interact with the portlet APIs for this purpose.

    A strong goal should be that a Struts application should be usable either as a webapp or as a portlet, with little (ideally no) changes. Therefore, we should build whatever it takes to support this into the standard Struts distribution, which would then be used in both environments.

    The JavaServer Faces specification has not been finalized. However, Struts is already providing support for JSF through the Struts Faces taglib. Once JSF is finalized and comes into broad use, it is expected that Struts developers will continue to offer enhancements to make it even easier to use Struts with JSF.

    Right now, there is only one open source project working on a JavaServer Faces implementation, MyFaces. This work is being done under the LGPL, which some developers find unacceptable. (If you are interested in this project, we suggest you lobby the developers to adopt a more liberal license, like the ASL.)

    Thanks in large part to Apache's advocacy and influence, the Java Community Process, which is responsible for the JavaServer Faces specification, process has been modified so that Apache Software Foundation projects, like Jakarta, can qualify for the certification scholarship (for nonprofits) and access to the TCKs and certify that our application is compliant.

    An certificated-complaint Apache implementation of JavaServer Faces would most definately be a Good Thing. It would not be the reference implementation, but we could treat it like one, and strictly follow the book, in the Apache Way. A strict, high-quality, open-source implementation would most likely become a popular option among containers.

    Work on such an implementation could be undertaken by Struts, either here at Jakarta or after our applying for status as a top-level Apache project. Or, "Apache Faces" could also be undertaken as a separate project, with Struts simply using the technology as we now use technologies from the Commons today.

    However, at this point, there is no "code on the table". Apache products leave decisions such as these to the people who create and maintain the codebase. So, lacking a codebase, no binding decision can be made. But, anyone wishing to pursue an "Apache Faces" implementation should be aware that the option certainly exists.

    Aside from offering a strict implementation of JavaServer Faces, there are many, many other JSF related tools and technologies Apache Faces could provide. These include composite view and validation frameworks (like Tiles and the Validator), frameworks for multi-request transactions, non-HTML markup languages (building on top of Faces for things like XUL or XForms or SVG is easy), non-JSP rendering technologies (pretty much anything that has a way to mark where dynamically created output goes can be adapted), libraries of prebuilt components above and beyond the built-in standard ones (such components work equally well in JSP and non-JSP environments), and all the non-human-UI things based on XML technologies.

    As always, the standard implementation is only the beginning.

    For more about Struts and JavaServer faces, see our FAQ. For more about JavaServer Faces generally, see also Java Server Faces Resources at JamesHomes.com.

    Next: Release Guidelines

    Website updated from CVS: 2003 NOV 26 by husted.

    Javadocs updated from CVS: 2003 NOV 26 by husted.

    libstruts1.2-java-1.2.9/xdocs/using.xml0000644000175000017500000001555110404045214020454 0ustar arnaudarnaud00000000000000 Using - The Apache Struts Web Application Framework Craig R. McClanahan Ted Husted Martin Cooper James Holmes

    In the normal course of using an application framework like Struts, you may wish to

    Tracking of bug reports and enhancement requests for Struts is handled through the Apache Bug Database. Please select Struts from the product list, along with the details of which component of Struts you feel this report relates to, and details of your operating environment. You will automatically be notified by email as the status of your bug or enhancement report changes. Please be sure to read How to Report Bugs Effectively before posting.

    You can upload a proposed patch to either the code or documentation by creating a feature request in Bugzilla. After creating the ticket, you can go back and upload a file containing your patch.

    The documentation is maintained in the doc folder of the Subversion repository in a XML format. In the Nightly Build, there is a "compile.website" target in the build.xml file, which renders the XML into the HTML we post to the Website. If you would like to help with the documentation, it is important to provide patches and new pages in the XML source. Otherwise, some other volunteer will have to do this for you, and it may never get done. (Sad but true.) If you are submitting new material, it is important to decide exactly where you would put this in relation to the rest of the documentation. Someone has to figure that out before it can be added, and that someone might as well be you.

    If you have comments on existing material, you can make comments via the Struts Wiki. Just follow the "Comments?" link on any page. If you are making a substantial contribution, such as a new HOW-TO, please consider submitting a document in the XML format we use. This will make it easier to add your contribution to the official documentation so that it becomes part of the WAR distributed with Struts.

    For more, see the How to Help FAQ.

    Before joining any mailing list at Jakarta, please be sure to read the Mailing Lists - Guidelines. If you have read and understood these guidelines, you are welcome to join the Jakarta Struts mailing lists:

    • STRUTS-USER Mailing List - Subscribe to this list to communicate with other developers that are using Struts for their own applications, including questions about the installation of Struts, and the usage of particular Struts features.
      [Subscribe]
      [Unsubscribe]
    • STRUTS-DEV Mailing List - Subscribe to this mailing list to communicate with other developers interested in expanding and improving the functionality supported by Struts itself.
      [Subscribe]
      [Unsubscribe]
    • STRUTS-USER Digest - Subscribe to this list to receive a daily digest of the Struts USER list.
      [Subscribe]
      [Unsubscribe]
      If you subscribe to the Digest, you can also post to the User list. (Just don't quote the entire Digest mailing in a reply!)
    • STRUTS-USER Newsgroup - The User list is also mirrored online, so that you can participate without subscribing to the regular mailing list.
      [Struts Newsgroup]
      This is another way to post to the User list without subscribing to the regular list.

    Before posting a new question, be sure to consult the MAILING LIST ARCHIVE and the very excellent How To Ask Questions The Smart Way by Eric Raymond.

    Please do be sure to turn off HTML in your email client before posting.

    All work on Struts and the other Jakarta subprojects is provided on a volunteer basis. For more about what you can do, see the Jakarta Getting Involved Overview and the Struts How to Help FAQ.

    Next: Who We Are

    libstruts1.2-java-1.2.9/xdocs/volunteers.xml0000644000175000017500000005556610404045236021553 0ustar arnaudarnaud00000000000000 Who We Are - The Apache Struts Web Application Framework Ted Husted

    In August 2003, there were 2700 subscribers to STRUTS-USER (including the digest version). It's the largest user mailing list at Jakarta, exceeding the TOMCAT-USER list of about 2400 subscribers. In addition to the regular subscribers, an unknown number of developers read the lists through newsfeed mirrors and through several list archives.

    According to recently released statistics, Struts downloads range between 10,000 and 30,000 a week, roughly the same as Jakarta Tomcat.

    More than fifty developers have contributed code or documentation to Struts. We've tried to list all of our volunteers on this page (and apologize to anyone we missed!).

    • Arron Bates
    • Arun M. Thomas
    • Cedric Dumoulin
    • Chris Audley
    • Craig R. McClanahan
    • David Geary
    • David Graham
    • David Winterfeldt
    • Dominique Plante
    • Don Brown
    • Don Clasen
    • Florent Carpentier
    • Greg Ludington
    • James Holmes
    • James Turner
    • Jeff Hutchison
    • Jimmy Larsson
    • Kurt Post
    • Leonardo Quijano
    • Luis Arias
    • Marcus Brito
    • Marius Barduta
    • Martin Cooper
    • Mike Schachter
    • Niall Pemberton
    • Ralph Schaer
    • Rob Leland
    • Saul Q Yuan
    • Sean M. Kelley
    • Steve Raeburn
    • Steve Stair
    • Ted Husted
    • Craig R. McClanahan
    • David Geary
    • Mike Schachter
    • Ted Husted
    • Martin Cooper
    • Arron Bates
    • Cedric Dumoulin
    • David Winterfeldt
    • Chris Assenza
    • dIon Gillard
    • Dominique Plante
    • Ed Burns
    • Eric Wu
    • James DeVries
    • John Rousseau
    • John Ueltzhoeffer
    • Larry McCay
    • Mark Budai
    • Matthias Kerkhoff
    • Paul Runyan
    • Robert Hayden
    • Rob Leland
    • Stanley Santiago
    • Wong Kok Kai
    • Donald Ball
    • Dan Walker
    • Eddie Bush
    • Yann Cebron
    • David Graham
    • Steve Ditlinger
    • David M. Karr
    • Tim O'Brien
    • Edgar Dollin
    • Phil Steitz
    • Steve Raeburn
    • Tetsuo Ajima
    • Tatsuo Takahashi
    • Satoshi Hioki
    • Yoshinori Ashizawa
    • Craig R. McClanahan (craigmcc at apache.org)
    • Ted Husted (husted at apache.org)
    • Rob Leland (rleland at apache.org)
    • Cedric Dumoulin (cedric.dumoulin at lifl.fr)
    • Martin Cooper (martinc at apache.org)
    • Arron Bates (arron at apache.org)
    • James Holmes (jholmes at apache.org)
    • David M. Karr (dmkarr at apache.org)
    • David Graham (dgraham at apache.org)
    • James Mitchell (jmitchell at apache.org)
    • James Turner (turner at blackbear.com)
    • Steve Raeburn (sraeburn at apache.org)
    • Don Brown (mrdon at apache.org)
    • Joe Germuska (germuska at apache.org)
    • Niall Pemberton (niallp at apache.org)
    • David Geary
    • Luis Arias
    • Pierre Delilse
    • Michael Schachter
    • Vincent Massol
    • David Winterfeldt
    • Oleg Alexeev
    • Eddie Bush

    Craig R. McClanahan -- Committer

    I've been involved with servlet and JSP technology since around 1998. It started out that I needed a way to build some web applications for several projects, and liked Java a lot better than the alternatives. I also liked the price tag of open source software, and started using Apache JServ -- later, getting involved in the project (like many people, I was whining about the twelve months it took to get from version 0.9 to version 1.0, and my son said "Dad, you know Java -- go help them finish it!" -- so I did :-).

    For quite a while, I was participating a lot the JSP-INTEREST and SERVLET-INTEREST mailing lists , especially the topic of good architectures for web applications. I was disgusted with the hash that many beginners created when they used (or abused) scriptlets in JSP pages, and built (for my former employer) a pretty comprehensive framework that could considered ("Struts 0.01 without the custom tags"). It was proprietary code, but I was able to describe the concepts, and there started to a feeling the lists that this "Model 2" thing was pretty cool -- but there were no good examples to look at, so it was mostly hand waving types of discussions.

    Over the same time period, I got involved as an individual contributor in the Java Community Process , and joined the expert group that defined the servlet 2.2 and JSP 1.1 specs. Sun was impressed enough to offer me a job as the technical lead the team within Sun (currently five other individuals) that works Tomcat -- the architecture for Catalina, which is the servlet container part of Tomcat 4.0, is also mine -- so I am in the really nice position of getting paid to work open source software :-). And, participate the expert groups for Servlet 2.3 and JSP 1.2. And, speak at various conferences, including ApacheCon and JavaOne. And, talk to groups within Sun about using Struts and JSP/servlet technology. And ... (there's some really interesting things being considered for the future).

    The original design of what came to Struts has been in my head for a long time, since those interesting mailing list discussions, but the first version of the actual code was written my laptop a Memorial Day weekend vacation trip (end of May, 2000) to the Oregon coast -- in between watching the surf and having the house shaken by a windstorm at night. Since then, it has gathered attention and popularity as we approach our first official release, and it delights me to see my "baby" grow up so well :-). Of course, it is no longer just me -- there have been incredible numbers of good ideas from all over, and a peek at the TODO list for 1.1 says that even more good stuff is coming in the future.

    One motivation factor was Jason Hunter's article about the Problems with JSP. Jason and I get along fine, even though we have different preferences about presentation technologies. Besides being the author of a very popular book about servlets, with a second edition coming soon, Jason is also the representative for the Apache Software Foundation the Executive Committee of the Java Community Process.

    Personally, I live in Portland, Oregon (even though my team at Sun is mostly in Cupertino, CA -- staying here was part of the job deal :-). I like to support Oregon sports teams (Oregon State Beavers, Oregon Ducks, Portland Trailblazers) and work cool software.

    I figured out I was getting pretty old when I realized that 2000 was the 25th year I had been paid to work in some aspect of software development :-). I've got a son who is a full-time software developer (primarily in PHP so far, but I'm going to corrupt him with Java eventually :-), and a daughter in college. I'll happily let the other committers speak for themselves.

    Mike Schachter -- Committer

    I'm currently a student of computer science at Drexel University in Philadelphia, PA. I've been working at HP Middleware, formerly Bluestone Software for 3 years programming in Java and recently J2EE technologies. I'm a full time worker from September until April and a student and part time worker from April until August. In my spare time I've been known to run monkey-knife fights in a shady south philly warehouse. Err... I mean... nothing.

    Ted Husted -- Committer

    My primary interest in Struts is to put it to work writing lots of real-life Web applications:-) To do that effectively means having good documentation and code samples at my fingertips, so that's been my focus with the Struts product so far.

    I've been writing software for hire since 1984, but only recently jumped the Java bandwagon. My initial interest was with electronic publishing, and started by converting my various print projects to electronic media. The "Information Superhighway" was still the private stomping ground of Universities and government agencies then. The rest of us had to make do with diskettes and bulletin boards.

    Between 1985 and 1994, I created and marketed several software products for publishing disk, the most popular being "Dart" and "Iris". In 1992, Dart was awarded the Digital Quill for software excellence, featured in PC Magazine (February 1992), and bundled with McGraw Hill's bookset,"Paperless Publishing" by Colin Hayes (McGraw Hill 1994). Dart won a second Digital Quill in 1993. Several titles that used Iris for a publishing system have also won awards and been widely distributed, including "Hermitville USA." I was also fortunate to find kindred souls CompuServe and America Online, who helped me pioneer resources areas there in 1993 and 1994 for the nascent electronic publishing industry.

    I finally cut loose the Internet in 1995, launching Epub News, an electronic newspage about electronic publishing. After taking several private contracts, I opened the Husted dot Com Website (www.husted.com) in 1996. I've drifted away from electronic books, but have noticed that several products are now making their way into the consumer mainstream -- as usual, I was twenty minutes into the future:-)

    My favorite all-time project is the Hitchhikers Guide to Science Fiction. This was one of my earliest hypertext projects (it started as a print-book idea), and I had a lot of fun bringing it forward onto the Web. (Now, if I only had time to bring it current and dress it up!)

    Currently, I'm working with the Department of Environmental Quality for a midwestern state. We are revamping the permit application system as a web application and centralizing the database system between the various DEQ divisions.

    Cedric Dumoulin -- Committer

    As a dreamer / researcher I have thought a lot about a framework like Struts. But, as a lazy developer I have first checked what already exists, and I have found Struts. Struts goals fulfilled nearly all I needed for my (now old) portal project, except the capability to reuse and assemble easily pieces of pages or components. So, I have proposed the Components framework. This framework can seen as a superset of the Templates tag library contributed by David Geary, and contains lot of interesting features.

    From a professional point of view, I have a Ph.D. in computer science. I have worked for 3 years in the R&D department of a worldwide company developing Internet banking solutions. I am now a researcher at a university, and work European research projects. My main research interest is WWW, Distributed Systems and Object Oriented Design. When developing code, I always try to first propose reusable pieces of code.

    Martin Cooper -- Committer

    Early in the year 2000, I was asked, by my employer at that time, to investigate the best way to develop a new web-based application for the administration and management of an existing product. After exploring a number of technologies, I settled on Java, along with servlets and JSP, as the way to go. Then I started looking for methodologies and "best practices", since others must surely have been down that path before me.

    In addition to rummaging around on the web, I subscribed to the SERVLET-INTEREST and JSP-INTEREST mailing lists, along with several others, and monitored the discussions for a while. It was clear that others were seeking the same answers as I was, and it was also clear that many people were building their applications in truly horrible ways.

    At some point -- I don't recall when, exactly -- the concept of "Model 1" versus "Model 2" applications came up, and there was a great deal of discussion around that. Model 2 seemed very much like A Good Thing to me, and I paid it close attention.

    Then, in May of 2000, I saw a message from Craig McClanahan about a new framework called Struts that was designed to ease the process of building Model 2 applications, and provide solutions for some of the important issues at the same time. I hopped on over to the web site and took a look around. This was exactly what I had been looking for.

    My first postings to the Struts mailing list were, of course, questions to help me understand how to do things and why Struts is the way it is. Over time, I became more involved in both the user and developer communities, started submitting bug reports, patches and change requests, and eventually became a committer. Not long after that, I volunteered to take on the release process, and became the release manager for Struts 1.0.1 and beyond. Little did I know what I was letting myself in for!

    A large majority of the people who contribute to Apache projects are volunteers who are not paid for their contributions. Like most of those volunteers, I also have a "day job" to put bread on the table. Currently, I am a UI Architect at Informatica, where I work on the architecture, design and implementation of web applications. Working with, and on, Struts has provided me with an excellent perspective with which to do that!

    David Winterfeldt -- Committer

    As I worked web based projects I started looking for something that would really help save time during development. I ran across Struts in the Summer of 2000 and decided it was a good solution for web development. As I used Struts it really helped to remove a lot of the repetitive work, but validation still seemed very repetitive. I had an idea to create validation rules in an xml file and have them easily integrated with Struts. It started out simple and continued to develop over time. The validation project was eventually incorporated into Struts and the core was moved to Jakarta Commons. I'm happy to see Struts continue to grow and develop.

    I currently am employed at Forbes.com. I occasionally get to do some internal projects using Struts. The last interesting project was a publishing system using Message Driven EJBs in JBoss and Struts was used to display the status of each publishing process.

    Rob Leland -- Committer

    I have gone from Unix -to- Windows -to- Unix based development about ever 6 years now. When moving to Windows I was amazed at how primitive the OS was compared to Unix. While developing for Win32 I had the pleasure of discovering Delphi and developed many GUI/databases, telephony, Internet enabled applications. I remain impressed with its design. Delphi, always enabled development of a simple elegant solution, much like the language itself. I was convinced after 10 years of development with C/C++ that it was a kinder gentler language.

    Then in July 2000 I decided to move into Java, and Web development. This is after using the Internet since 1985 and occasionally teaching classes about it. I was hired as a consultant to take over a JSP based application. I realized it had been written with the equivalent of "goto's"(Model 1) and had to be redesigned. I searched for a better way to design the code and by late August I had found Struts. It is also a simple elegant solution.

    To date I have mainly served to pitch in where needed. I continue to amazed at the Struts committers' generous contributions of time, insight, and good will. I feel fortunate to part of the struts team.

    David Graham -- Committer

    I, like many others, discovered Struts when contemplating writing my own MVC Java framework for the web. Struts had everything I needed and more so I scrapped plans for my own and joined the mailing lists. After playing with it for several months I started submitting documentation and a few source patches. I'm excited about helping Struts evolve and am continually amazed by the framework and the community surrounding it.

    James Mitchell -- Committer

    James has been so busy answering users questions and adding test cases that he hasn't taken the time to brag about himself. I thought that I would add a place marker for him until and if he does decide to --blow his own horn-- ! -Rob :-D !

    James Turner -- Committer

    I discovered Struts somewhat by accident. In 2001 I began writing a book for SAMS on JSP web development (MySQL and JSP Web Development), and as part of it, I decided to write a chapter on Struts in the advanced section. In the process of learning enough about Struts to write about it, I realized that it could simplify some of the projects that I was working on for clients.

    After a half a year of working with Struts, I was asked by SAMS to write another book, this time concentrating on Struts specifically. That book, co-authored with a former co-worker named Kevin Bedell, became Struts Kick Start.

    In the process of writing that book, I began to realize that there were things I could do to contribute to Struts beyond writing about it. One thing in particular was to clean up and add some functionality to the Commons Validator project, which eventually led to me release-managing (with a lot of help!) the Commons Validator 1.0 release.

    More generally, I've been a software developer for over 22 years, starting with work as a Research Specialist at the MIT AI Lab. I spent nearly a decade working in LISP, before moving on to C/Unix, a stint managing the Web Site for the Christian Science Monitor, and finally Java based e-Commerce development, which has kept me busy for the last five years.

    In addition to the two books mentioned above, I also write for a number of publications, including WIRED and the aforementioned Christian Science Monitor. You can get a look at my portfolio here

    Next: Announcements

    libstruts1.2-java-1.2.9/INSTALL0000644000175000017500000000063310404045244016514 0ustar arnaudarnaud00000000000000$Id: INSTALL 51211 2003-12-10 01:04:10Z husted $ STRUTS ====== For most containers, you need only to: * Copy the WAR files in your Struts < /webapp > directory to your containers < webapps > directory. * In some cases, you may need to restart your container if it is running. For more details, and container-specific instructions, see the Installation chapter of the Struts User Guide. libstruts1.2-java-1.2.9/KEYS0000644000175000017500000001357410404045224016167 0ustar arnaudarnaud00000000000000This file contains the PGP keys of various Apache developers. Please don't use them for email unless you have to. Their main purpose is code signing. Apache users: pgp < KEYS Apache developers: (pgpk -ll && pgpk -xa ) >> this file. or (gpg --fingerprint --list-sigs && gpg --armor --export ) >> this file. Apache developers: please ensure that your key is also available via the PGP keyservers (such as pgpkeys.mit.edu). Type bits keyID Date User ID DSS 2048/1024 0x357AE38C 2002/12/30 *** DEFAULT SIGNING KEY *** Martin F. N. Cooper -----BEGIN PGP PUBLIC KEY BLOCK----- Version: PGP 6.5.8 mQGiBD4QG2ARBADidho8fyIoGRxNu1rXBtVov8IpHcHCOzqY6C1Phgj+sCkeoLvX 7fBPwLhk+YhrkbhX2Fy0Hg8RzOy7J6XM1GYclPpYc+F7gW7tYqzGoiEeVAx3tIYa X83Z3d4f3pcwz3MePsFFIMkJzm766DbxEJwUlrNziD7KHOMkSPtt9E1O2QCg/21P 4LIkL6MAiqSoHPi7iXSCcv8D/1Vj4Nw7VpTFYupzDotjTf43G9WpbRjYPwPIpBbK G72JC8a3BQZmKUXEVHTHfOe4vWFrkrs1WTsBT8q5qo3d+wSxrUVj1wlNqQolQ8RP 7j+dx5zRYDKYD+DGdkF2Qokd3qx2uxcJnRNBeUsAB3aPj9IEqMMMGjEqybCbzTjv EfiuA/4x7hqPNGirRiNLkGFn9GJg+z/yYkiC2eaQC6VMU+S8JccHE2l4DgUSfKnc vm+QJGjDbylpZ1P4shtCkkHnoC21oeJrcKYB8jn/TAEGPv955xZDLj5fvvYQreg7 iaQ6Hx5TAnu+7tnET9UmoZe/fMN1jpwT4G3lXsl4AsizTXXZDbQoTWFydGluIEYu IE4uIENvb3BlciA8bWFydGluY0BhcGFjaGUub3JnPokATgQQEQIADgUCPhAbYAQL AwIBAhkBAAoJEJhjoec1euOM5g4An1/g/v4GZcqxsMWRpGsZRGJYASDSAKCKAIlZ RMiKyomfYl43R8HtgNNp0rkCDQQ+EBtgEAgA9kJXtwh/CBdyorrWqULzBej5UxE5 T7bxbrlLOCDaAadWoxTpj0BV89AHxstDqZSt90xkhkn4DIO9ZekX1KHTUPj1WV/c dlJPPT2N286Z4VeSWc39uK50T8X8dryDxUcwYc58yWb/Ffm7/ZFexwGq01uejaCl cjrUGvC/RgBYK+X0iP1YTknbzSC0neSRBzZrM2w4DUUdD3yIsxx8Wy2O9vPJI8BD 8KVbGI2Ou1WMuF040zT9fBdXQ6MdGGzeMyEstSr/POGxKUAYEY18hKcKctaGxAMZ yAcpesqVDNmWn6vQClCbAkbTCD1mpF1Bn5x8vYlLIhkmuquiXsNV6TILOwACAgf8 D0YiROjHXpHdBHkBaSoL9DmHT+JoUA5XLaLekQ2j4aNpGVHrPpRIEUUVLZFlfiTm IYVt4sMhh8prmqo7Yr4o1vG4cKJbqkiD+wCMntc4WTAifR9Py2I2G8D8aBQt2oRY fJdjEM41NX6B6k5swiCYjqEIHR1fh10cc/jeCwjcb2S65JK+UlTPBjjUNbbwVgmo VB2VOfjpas8yXTPZB0MOaxQqLP6+LPwUBLeNPvl+19Pfnaf6vSoObz4/OlO4FXET Q3wj/kipicoWaUj4Wq0bNETIeaKOnNkKn0Vvk8/yTn1RSzYb2xLFSm2wJBJAazfD g6pbPTWu532wXg1ErKCgm4kARgQYEQIABgUCPhAbYAAKCRCYY6HnNXrjjOvSAKC5 2FwUjvHy9zKbEV458B6p/BxtXwCg1xYG1Ad4mNDb5udKpQtMMzM28Ik= =noY8 -----END PGP PUBLIC KEY BLOCK----- pub 1024D/F2A46D40 2003-08-27 Rob Leland (For Uploading Builds/Releases) Key fingerprint = A20A A262 E293 2AB1 889A 7CFB 7F77 23FE F2A4 6D40 sig 3 F2A46D40 2003-08-27 Rob Leland (For Uploading Builds/Releases) sub 1056g/EF8E1258 2003-08-27 [expires: 2005-08-26] sig F2A46D40 2003-08-27 Rob Leland (For Uploading Builds/Releases) -----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.2.2 (Cygwin) mQGiBD9MWnURBADIx7Q8AIe+NTbRiCxM2pkgeMFZN/3mO4vd1mW5R9TD5PcpisUv htxykhVyQb5ifHBRK732nE+2nGGAqDP2I0lKKt9EhYXIUUU1UYrveK2gFXA31m0d L+Ghoa8Ugm11uPJz5IYjTLU9LOIu3sBLo25BCOi5dZ1E0oEP+iU52NLuNwCgkK59 ZdbDVqWyrO5a86EwbHiyhk8D/0Wyn9isVS7vw5CQh9/u3WCvbh4MovZYZ6/3sy// 4X4Uy8wBKAjZQhJQuFsQY2tcIj/MEE8g9nqpF3QGJIinbt7DNW80w439+MczoSmJ Ck33GqMffniaSWOBW+Xlsm379vdCZR+DFZeOoaXzKeBCu/SRnpRYMR3UoQHw9hyO ReA3A/9f0DcwumJ2ofpRIAbTRMnDvXUSfc95qtiCm4JHaRMbFdD10L2swE76N+/A I1fhQdcBv5I1hm0DGBo9++6TItGYpP+IJxoIpETAOahM/jg64ZPRmtoCTYbnWqig lTuAs1xIwR1L43mH70dxaE8Coge/V5HBi5rz/gwTRyP3/9pUk7Q/Um9iIExlbGFu ZCAoRm9yIFVwbG9hZGluZyBCdWlsZHMvUmVsZWFzZXMpIDxybGVsYW5kQGFwYWNo ZS5vcmc+iGEEExECACEFAj9MWnUFCQPCZwAGCwkIBwMCAxUCAwMWAgECHgECF4AA CgkQf3cj/vKkbUDCLACffF7f0Rel07bxCSGLrg9fzMsHIL8AoI9rVGqq8ID+4VgA 0AiyP1k99BPNuQEVBD9MWncQBCDlujLhU6jr+pkF/EA7n+9yVennnev9GMLts91k 7vla47VV2Uxdywd+sEE7nW5Ld+oHhFTPIWOF9aezKyGseob0sjmp95dp5q5rLk8X f0V+IsVCWyevRIXxNoKiCpWUuWwBcHzsbgOoNnnuxxC/QSkP4sHr8bax3inBoCfd 3YFLb1i5TuMAAwUEHRjnW05hHCVl+SyCzVAV+/UvJDKE9UXM0Is6yIOd1jwqUnNQ xMjuMLjnRHIXt79UHYV8GXkgxWjdx+w1eW9KDpUSy2TcTAD6l6tXBIBI24dzGxHl tDbTAX1kNl1Qmw8qUiu1qc8nSDTD0B26tGveTyp15Zb80uN3zNjC9qDsuVdfiu6D 7YhMBBgRAgAMBQI/TFp3BQkDwmcAAAoJEH93I/7ypG1AaSMAn1tMyP0k00bYBKzX +s7PneFo65zWAJ9g2bgkGaAwByLTuah16xaRLNKC0g== =xkP8 -----END PGP PUBLIC KEY BLOCK----- Ted Husted -----BEGIN PGP PUBLIC KEY BLOCK----- Version: PGP 8.1 - not licensed for commercial use: www.pgp.com mQGiBEEtgaERBADmREmBFmKXpHBletSdRKOo4WWooZv5NX5gXAM7O+tIhDJPosff 43wlcPvwEXrUPx+m/mbf8lcAUSG7C9MXpD12e0heoYQDN3J4WLn/awDYTQ5k+w9V 5tU2IXtspSkb1nb6Rd4EXIvIeWeAydory5HDXXvn/jVGwxcUNEqJhZklzwCg/9O3 Y45VUEWiee9Tgsrgwxq6H40EAMl4IXe0N9efc0p6NrLIkudECNlHhHRiOmkrjcWf EwQanYXUaPbtrJSiWY+CNEuxXLfOoLnoRJExphFHWRgEMYC8C3c0EoWNnxi8p7iL QqNXBFOUFiSReDJS45Km/1sYQw7sLlzKl+m7atAPLLDCU0x0wU/1rv5oI2k0sGVP qLIUA/9ywDgrQBAunNYlxIBZ7ITLZ/StpwDn4jX9+5TMzHHtDauI+mNc5rJU78mt ED5U1msQHyGl8bz2BsCG4GEL/orCvQREqGjGc+CIMx0USvz2gWfB8N6I2T5w/A0I r1fU72n+Mn0kQltcpk2XBEM4KH9oa9f9TwUcHWMqPe0gCio2CbQeVGVkIEh1c3Rl ZCA8aHVzdGVkQGFwYWNoZS5vcmc+iQBdBBARAgAdBQJBLYGhBwsJCAcDAgoCGQEF GwMAAAAFHgEAAAAACgkQC8zfYdHTI7r9dQCfYq421zKjj1UTCYnvKBVlPT4q0kkA oJp/z2hubf+EyphjqMV+/sWUT04cuQINBEEtgaEQCAD2Qle3CH8IF3KiutapQvMF 6PlTETlPtvFuuUs4INoBp1ajFOmPQFXz0AfGy0OplK33TGSGSfgMg71l6RfUodNQ +PVZX9x2Uk89PY3bzpnhV5JZzf24rnRPxfx2vIPFRzBhznzJZv8V+bv9kV7HAarT W56NoKVyOtQa8L9GAFgr5fSI/VhOSdvNILSd5JEHNmszbDgNRR0PfIizHHxbLY72 88kjwEPwpVsYjY67VYy4XTjTNP18F1dDox0YbN4zISy1Kv884bEpQBgRjXyEpwpy 1obEAxnIByl6ypUM2Zafq9AKUJsCRtMIPWakXUGfnHy9iUsiGSa6q6Jew1XpMgs7 AAICCACP+qYxeUz9tWfnLB2tMWG6+/g2FMrwjk0mAZmWg/AT1LlJlHBJ1p8o9aNo BV9SBtIiLi7PO5IuLAnwiOxHvCg6m1oBqXHzBhtqp+PPyaibQDPq0JqdMYA3ncOO meNzQgiomjHJ1a3ySmdb+UEjMNNnNQzuFnzvKopAM9jnGm15uYI+9Nj/s2wxZUbj seMg1mgIwMaMlqM9zVJqSthSaaFA7Bq+SYp3ZbT0FJrmtyx3ZCwEwgbGF9GCnvH5 Wb2JO91ig+WoD0OwZ1wOVy+DaBwC7OMf6I0M3rwmNDyxwhyB0CYovJlYUCD9LNLQ t/xvWjkjYPN718BlZO7/pliqb3ExiQBMBBgRAgAMBQJBLYGhBRsMAAAAAAoJEAvM 32HR0yO6vzoAni+lhSvzwbAgFRw5+xHutXmKXaGjAKD2IlFhw09mrCSAF0FrEePH XlF0aQ== =8WZU -----END PGP PUBLIC KEY BLOCK----- libstruts1.2-java-1.2.9/LICENSE.CheckStyle0000644000175000017500000000140410404045210020513 0ustar arnaudarnaud00000000000000/\*\s* \*\s*\$Header.*\$ \*\s*\$Revision.*\$ \*\s*\$Date.*\$ \*\s* \*\s*Copyright \d{4}(-\d{4}|,\d{4})* The Apache Software Foundation\. \*\s* \*\s*Licensed under the Apache License, Version 2\.0 \(the "License"\); \*\s*you may not use this file except in compliance with the License\. \*\s*You may obtain a copy of the License at \*\s* \*\s*http://www\.apache\.org/licenses/LICENSE\-2\.0 \*\s* \*\s*Unless required by applicable law or agreed to in writing, software \*\s*distributed under the License is distributed on an "AS IS" BASIS, \*\s*WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied\. \*\s*See the License for the specific language governing permissions and \*\s*limitations under the License\. \*/\s* libstruts1.2-java-1.2.9/LICENSE.txt0000644000175000017500000002411310404045210017276 0ustar arnaudarnaud00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. libstruts1.2-java-1.2.9/NOTICE.txt0000644000175000017500000000034710404045240017203 0ustar arnaudarnaud00000000000000This product includes software developed by The Apache Software Foundation (http://www.apache.org/). This product includes the ANTLR parsing library, developed by JGuru.com (http://www.antlr.org and http://www.jguru.com). libstruts1.2-java-1.2.9/README0000644000175000017500000000131310404045210016330 0ustar arnaudarnaud00000000000000$Id: README 51211 2003-12-10 01:04:10Z husted $ STRUTS ====== Introduction ------------ This subproject contains the source code for the "Struts" application support package, consisting of the following major components: - Controller servlet with action mapping technology, implementing the Model- View-Controller (MVC) design pattern for web applications commonly called "Model 2", with a servlet as the "front component". - Comprehensive custom tag library for building internationalized JSP pages that have HTML forms which interact with JavaBeans that are managed automatically by the controller servlet. For help with installing and using Struts, see the Struts User Guide. libstruts1.2-java-1.2.9/STATUS.txt0000644000175000017500000001025310404045250017243 0ustar arnaudarnaud00000000000000-[BOARD REPORT] 20-Oct-2004 Apache Struts- The Struts community has recently released Struts 1.2.4 as the latest stable version, focused on cleaning up deprecations from previous versions, refactoring utility classes to improve separability of the core framework from view tier dependencies, and incorporating the latest Commons libraries on which we are dependent. We recently completed a migration of our source code repository from CVS to Subversion, and are leveraging its capabilities to refactor the source code into separately releaseable components.  The first such separate release is likely to be the Struts-Faces integration library (an adapter between Struts and JavaServer Faces). The community is busy planning an evolutionary path that focuses on fundamentally backwards compatible improvements, and a revolutionary ("Struts 2") path that will leverage the industry wide lessons in how web application frameworks should architected in the four years since Struts was created.  The discussions are proceeding harmoniously and productively. ---- -[STATUS LOG] 20-Jul-2004 Apache Struts- * PMC Members * Other Committers * PMC Actions * Significant Threads * Releases * Roadmap * Mailing List Subscriptions * Wiki Posts * CVS Activity * Issue Reports * Showstoppers * Recent Changes ---- -PMC Actions- * Started reorganization of repository. The goals of the refactoring are to better support * Subprojects * Maven builds The reorganization is being done under Subversion on an offsite server. We will be moving this to an Apache server soon, now that we have a consensus in favor of Subversion and Maven. * Completed draft of Apache Struts bylaws: http://struts.apache.org/bylaws.html -Significant threads- * We discussed the "bar" for Committership. The consensus is to keep the bar fairly high and wait until a Committer has submitted a number of useful patches to Struts directly, rather than to related projects elsewhere. -Releases- * Stable release: 1.1 (29 June 2003). * Beta release: 1.2.1 (11 July 2004) * We anticipate 1.2.1 or 1.2.2 being promoted to GA in the next 30 days. -Roadmap- * We are discussing renumbering coding initatives, so that the current reorganization under SVN becomes 2.0, but that is undecided. Heretofore, the plans has been: * Struts 1.x will remain based on Servlet 1.2/JSP 1.1 (evolution). * Struts 1.3.x will introduce the "Struts Chain" request processor. Some packages, like the taglibs, will be released as separate subprojects. * Struts 2.x will be based on Servlet 2.4/JSP 2.0 (revolution). * For more see . -Showstoppers- -Recent Changes- * Many changes to Struts Faces in anticipate of a 1.0 release. * Added a simplified build.properties file for use by developers who are not actively involved in Jakata Commons development. * Extended "EmptyTag" to support arrays. * See also: http://jakarta.apache.org/struts/userGuide/release-notes.html -Mailing list Subscriptions- * User 1838 * Dev: 719 * PMC: 14 -Wiki Posts- * 148 new posts; 323 total (since Apr 8) -CVS Activity- * Timeframe: 56 days, Total Commits: 84 Total Number of Files Changed: 196 -Issue Reports- * Open "problem" reports:      10 [#27332 .. #30204] * Open "enhancement" reports: 261 [#  866 .. #30210] (28 with patch) * Open "LATER" reports:        19 [#17977 .. #26403] -PMC Members-     * Craig R. McClanahan (craigmcc at apache.org)     * Ted Husted (husted at apache.org)     * Rob Leland (rleland at apache.org)     * Cedric Dumoulin (cedric.dumoulin at lifl.fr)     * Martin Cooper (martinc at apache.org)     * Arron Bates (arron at apache.org)     * James Holmes (jholmes at apache.org)     * David M. Karr (dmkarr at apache.org)     * David Graham (dgraham at apache.org)     * James Mitchell (jmitchell at apache.org)     * Steve Raeburn (sraeburn at apache.org)     * Don Brown (mrdon at apache.org)     * Joe Germuska (germuska at apache.org) -Other Committers-     * Niall Pemberton (niallp at apache.org) $Id: STATUS.txt 55055 2004-10-19 08:25:05Z husted $ ### libstruts1.2-java-1.2.9/build-all-clean.bat.sample0000644000175000017500000000336210404045232022357 0ustar arnaudarnaud00000000000000@echo off rem This is an example "build-all-clean.bat" file, used to build struts from rem a clean commons. rem What is needed is a good top level commons build.xml for ant/maven. rem I know I could submit a patch. rem rem This bat file uses Cygwin to remove build directories since rem commons doesn't have an ant clean target. (HINT for COMMONS COMITTERS!) rem Make any changes you need, and rename this file rem to "build-all-clean.bat" and place it in the same directory that rem contains the Struts "build.xml" file. rem rem assumes jakarta-commons, rem jakarta-commons-sandbox, rem struts rem in the same directory. rem Also assumes uses of rem maven beta 10 or above, rem ant 1.5.2 rem cactus v 1.4.1 & v1.2 rem v 1.2 Because the commons (resources) use an old version rem of cactus for units test, that maven doesn't precompile rem anymore. You'll need to copy the cactus.jar into the rem maven repository directory. I filed a bug report for this. rem rem rem $Id: build-all-clean.bat.sample 51783 2004-10-02 02:18:45Z jmitchell $ cd .. rem goto manualbuild rm -rf */*/dist rm -rf */*/target rm -rf */*/build rm -rf struts/dist rm -rf struts/target :manualbuild SET CLEAN=clean cd jakarta-commons cd logging call ant %CLEAN% dist cd ..\collections call ant %CLEAN% dist cd ..\beanutils call ant %CLEAN% dist cd ..\lang call ant %CLEAN% dist cd ..\digester call ant %CLEAN% dist cd ..\discovery call ant %CLEAN% dist cd ..\validator call ant %CLEAN% dist cd ..\fileupload call ant %CLEAN% dist cd ..\..\jakarta-struts call ant %CLEAN% dist pauselibstruts1.2-java-1.2.9/build-tests.xml0000644000175000017500000007174710404045242020460 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/build-webapp.xml0000644000175000017500000003274010404045212020557 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/build-webapps.xml0000644000175000017500000003621410404045220020741 0ustar arnaudarnaud00000000000000 libstruts1.2-java-1.2.9/build.properties.sample0000644000175000017500000001767010404045240022165 0ustar arnaudarnaud00000000000000# ----------------------------------------------------------------------------- # build.properties.sample # # This is an example "build.properties" file, used to customize building Struts # for your local environment. Make any changes you need, and rename this file # to "build.properties" in the same directory that contains the Struts # "build.xml" file. # # The JARS required for each release or beta distribution are available # as a single archive from the Struts downloads directory. # Requirements for the Nightly Build may change between releases and betas. # # $Id: build.properties.sample 178799 2005-05-27 17:00:16Z niallp $ # ----------------------------------------------------------------------------- compile.deprecation=true # WARNING: The relative paths below assume that the build.xml file is in the # top-level directory of the jakarta-struts source distribution. # commons-lib.home Where the CVS toplevel commons live commons-lib.home=D:/Projects/Apache/jakarta-commons # commons-sandbox.home Where the CVS toplevel commons-sandbox live. commons-sandbox-lib.home=D:/Projects/Apache/jakarta-commons-sandbox # apache.home - Where precompiled jar files from Apache live. apache.home=D:/Java/Programs/Apache # The directory containing your binary distribution of Tomcat 4.0 ("Catalina" # is the servlet container part of this distribution), from CVS module # "jakarta-tomcat-4.0" at jakarta.apache.org). This is only required # if you are going to execute the "deploy.catalina" target. catalina.home=${apache.home}/jakarta-tomcat-4.0.6 # The JAR file containing the Beanutils package (see Installation page) # from the Jakarta Commons project. commons-beanutils.jar=${commons-lib.home}/beanutils/dist/commons-beanutils.jar # The JAR file containing the Digester package (see Installation page) # from the Jakarta Commons project. commons-digester.jar=${commons-lib.home}/digester/dist/commons-digester.jar # The JAR file containing the FileUpload package (see Installation page) # from the Jakarta Commons project. commons-fileupload.jar=${commons-lib.home}/fileupload/dist/commons-fileupload-1.0.jar # The JAR file containing the Logging package (see Installation page) # from the Jakarta Commons project. commons-logging.jar=${commons-lib.home}/logging/dist/commons-logging.jar # The JAR file containing the Validator package (see Installation page) # from the Jakarta Commons project. commons-validator.jar=${commons-lib.home}/validator/dist/commons-validator.jar # The JAR file containing the Jakarta ORO package (Version 2.0.6 or later) jakarta-oro.jar=${apache.home}/jakarta-oro-2.0.6/jakarta-oro-2.0.6.jar # The JAR file containing the JDBC 2.0 Optional Package extensions API # (javax.sql). This file will automatically be added to your class path # when you compile Struts # # This file is necessary when compiling Struts under the JDK 1.3. It # is not necessary when compiling with the JDK 1.4 and higher, as # "javax.sql.*" is included with the JDK since 1.4. # # This file can be obtained from: # http://java.sun.com/products/jdbc/download.html jdbc20ext.jar=../../../Java/Programs/sun/jdbc2_0-stdext.jar # The JAR file containing the JSP API classes to compile against if you are # using JSP 2.0 or later (where these classes are separated from servlet.jar). # If you are using JSP 1.1 or 1.2, leave this property unset #jsp.jar=${apache.home}/jakarta-servletapi/lib/jsp.jar # The JAR file containing the Servlet API classes to compile against (either # version 2.2 or 2.3) servlet.jar=${apache.home}/jakarta-servletapi/lib/servlet.jar # The directory containing your binary distribution of Tomcat 3.3, from CVS # module "jakarta-tomcat" (and branch "TOMCAT_32") at jakarta.apache.org. # This is only required if you are going to execute the "deploy.tomcat" target. tomcat.home=${apache.home}/jakarta-tomcat-3.3.1 # The JAR file containing the Xerces parser. This is only required if you are # going to execute the "deploy.catalina" target. xerces.jar=${apache.home}/xerces-1_4_4/xerces.jar # The JAR file containing the ANTLR runtime support classes, needed for the # validwhen validator rule to work. You can get this file from: # http://www.antlr.org/ antlr.jar = ../../../antlr-2.7.2/antlr.jar # Properties related to optional tasks # ------------------------------------ # The JAR file containing the Checkstyle package version 2.4, if available. If # you do not have Checkstyle installed, do not set this property. checkstyle.jar = /Java/checkstyle-2.4/checkstyle-all-2.4.jar # The Directory containing the PMD package distribution, 1.2.1, if available. If # you do not have PMD installed, do not set this property. pmd.home = /Java/Programs/SourceForge/pmd-1.2.1 # Properties related to Struts Contrib # ----------------------------------------- # These links to the JSTL jar files are only required for building the # Struts-EL contrib library. If they are not present, it will not build that # contrib library (although it doesn't prevent you from building it directly in # "contrib/struts-el". jstl.home =${apache.home}/jakarta-taglibs/standard-1.0 jstl.jar =${jstl.home}/lib/jstl.jar jstl-standard.jar =${jstl.home}/lib/standard.jar struts.home =../../ # Properties related to Struts unit testing # # In order for the Cactus tests to work, you must have a copy of # junit.jar in ANT_HOME/lib (See Ant docs on JUnit task) # ========================================== # Choose your Cactus! # (un-comment only one set of cacuts properties) # ========================================== # ----------------------------------------- # junit - 3.8.1 or later # ----------------------------------------- junit.jar = ${apache.home}/junit3.8.1/junit.jar # ----------------------------------------- # J2EE 1.2 (Servlet 2.2) # ----------------------------------------- # --- Cactus 12-1.3 --- # cactus.home=${apache.home}/jakarta-cactus-12-1.3 # cactus.jspRedirector=web/test/jspRedirector.jsp # cactus.servertest.class=org.apache.cactus.ant.RunServerTestsTask # --- Cactus 12-1.4 --- # cactus.home=${apache.home}/jakarta-cactus-12-1.4 # cactus.servertest.class=org.apache.cactus.ant.RunServerTestsTask # --- Cactus 12-1.4.1 --- # cactus.home=${apache.home}/jakarta-cactus-12-1.4.1 # cactus.servertest.class=org.apache.cactus.ant.RunServerTestsTask # --- Cactus 12-1.6.1 --- # cactus.home=${apache.home}/jakarta-cactus-12-1.6.1 # --- Cactus 12-1.7 --- # cactus.home=${apache.home}/jakarta-cactus-12-1.7 # ----------------------------------------- # J2EE 1.3 (Servlet 2.3) # ----------------------------------------- # --- Cactus 13-1.3 --- # cactus.home=${apache.home}/jakarta-cactus-13-1.3 # cactus.jspRedirector=web/test/jspRedirector.jsp # cactus.servertest.class=org.apache.cactus.ant.RunServerTestsTask # --- Cactus 13-1.4 --- # cactus.home=${apache.home}/jakarta-cactus-13-1.4 # cactus.servertest.class=org.apache.cactus.ant.RunServerTestsTask # --- Cactus 13-1.4.1 --- # cactus.home=${apache.home}/jakarta-cactus-13-1.4.1 # cactus.servertest.class=org.apache.cactus.ant.RunServerTestsTask # --- Cactus 13-1.6.1 --- # cactus.home=${apache.home}/jakarta-cactus-13-1.6.1 # --- Cactus 13-1.7 --- # cactus.home=${apache.home}/jakarta-cactus-13-1.7 # ----------------------------------------- # Ant Jar for optional taglib documentation task ant.jar=${apache.home}/apache-ant-1.5.3-1/lib/ant.jar # Servlet engine locations for the tests # Note: If you don't want to run the test on a given servlet engine, just # comment it's home property. For example, if you don't want to run the # tests on Tomcat 4.0, comment the "tomcat.home.40" property. tomcat.home.33 = ${apache.home}/jakarta-tomcat-3.3.1 tomcat.home.40 = ${apache.home}/jakarta-tomcat-4.0.6 tomcat.home.41 = ${apache.home}/jakarta-tomcat-4.1.27 # use value of tomcat.home.41 to set equivalent property for Maven-Cactus plug-in cactus.home.tomcat4x=${tomcat.home.41} libstruts1.2-java-1.2.9/build.properties.sample.download0000644000175000017500000001023610404045230023761 0ustar arnaudarnaud00000000000000# ----------------------------------------------------------------------------- # build.properties.sample.download # # This is an example "build.properties" file, used to customize building Struts # for your local environment. Make any changes you need, and rename this file # to "build.properties" in the same directory that contains the Struts # "build.xml" file. # # This version automatically downloads all the required jars - EXCEPT for cactus # and the JDBC jar. # Chose your cactus by un-commenting ONE set of cactus properties. # # # Using this version of the sample build.properties file, you need to run the # "download-dependencies" target as well as the actual target. # # For example to test: $ant download-dependencies test.junit # $ant download-dependencies test.tomcat.41 # $ant download-dependencies test.tomcat.50 # For example to build: $ant download-dependencies dist # # $Id: build.properties.sample.download 178799 2005-05-27 17:00:16Z niallp $ # ----------------------------------------------------------------------------- # apache.home - Where precompiled jar files from Apache live. apache.home=D:/Java/Programs/Apache # ----------------------------------------- # JDBC 2.0 jar # ----------------------------------------- # The JAR file containing the JDBC 2.0 Optional Package extensions API # (javax.sql). This file will automatically be added to your class path # when you compile Struts # # This file is necessary when compiling Struts under the JDK 1.3. It # is not necessary when compiling with the JDK 1.4 and higher, as # "javax.sql.*" is included with the JDK since 1.4. # # This file can be obtained from: # http://java.sun.com/products/jdbc/download.html jdbc20ext.jar=../../../Java/Programs/sun/jdbc2_0-stdext.jar # ========================================== # Choose your Cactus! # (un-comment only one set of cacuts properties) # ========================================== # ----------------------------------------- # J2EE 1.2 (Servlet 2.2) # ----------------------------------------- # --- Cactus 12-1.3 --- # cactus.home=${apache.home}/jakarta-cactus-12-1.3 # cactus.jspRedirector=web/test/jspRedirector.jsp # cactus.servertest.class=org.apache.cactus.ant.RunServerTestsTask # --- Cactus 12-1.4 --- # cactus.home=${apache.home}/jakarta-cactus-12-1.4 # cactus.servertest.class=org.apache.cactus.ant.RunServerTestsTask # --- Cactus 12-1.4.1 --- # cactus.home=${apache.home}/jakarta-cactus-12-1.4.1 # cactus.servertest.class=org.apache.cactus.ant.RunServerTestsTask # --- Cactus 12-1.6.1 --- # cactus.home=${apache.home}/jakarta-cactus-12-1.6.1 # --- Cactus 12-1.7 --- # cactus.home=${apache.home}/jakarta-cactus-12-1.7 # ----------------------------------------- # J2EE 1.3 (Servlet 2.3) # ----------------------------------------- # --- Cactus 13-1.3 --- # cactus.home=${apache.home}/jakarta-cactus-13-1.3 # cactus.jspRedirector=web/test/jspRedirector.jsp # cactus.servertest.class=org.apache.cactus.ant.RunServerTestsTask # --- Cactus 13-1.4 --- # cactus.home=${apache.home}/jakarta-cactus-13-1.4 # cactus.servertest.class=org.apache.cactus.ant.RunServerTestsTask # --- Cactus 13-1.4.1 --- # cactus.home=${apache.home}/jakarta-cactus-13-1.4.1 # cactus.servertest.class=org.apache.cactus.ant.RunServerTestsTask # --- Cactus 13-1.6.1 --- # cactus.home=${apache.home}/jakarta-cactus-13-1.6.1 # --- Cactus 13-1.7 --- # cactus.home=${apache.home}/jakarta-cactus-13-1.7 # ----------------------------------------- # Servlet engine locations for the tests # ----------------------------------------- # Note: If you don't want to run the test on a given servlet engine, just # comment it's home property. For example, if you don't want to run the # tests on Tomcat 4.0, comment the "tomcat.home.40" property. #tomcat.home.33 = ${apache.home}/jakarta-tomcat-3.3.1 #tomcat.home.40 = ${apache.home}/jakarta-tomcat-4.0.6 tomcat.home.41 = ${apache.home}/jakarta-tomcat-4.1.29 tomcat.home.50 = ${apache.home}/Tomcat 5.0 # use value of tomcat.home.41 to set equivalent property for Maven-Cactus plug-in cactus.home.tomcat4x=${tomcat.home.41} libstruts1.2-java-1.2.9/build.properties.sample.lib0000644000175000017500000002631010404045250022722 0ustar arnaudarnaud00000000000000# ----------------------------------------------------------------------------- # build.properties.sample.lib # # This is a simplified build.properties file that assumes you are using the # "lib" directory distributed with Struts, rather than building against # the development versions of each of the Jakarta Commons projects. # # If you are not active in Jakarta Commons development, this is the # preferred template for your build.properties file. # # First, you will need to install Ant 1.5.4 per the instructions on the # Ant website . # # Then, to build Struts using this file, # * copy it as "build.properties", and # * extract the Stuts Library distribution to a folder named "lib" under # your Struts distribution # * place a copy of the servlet.jar for your container in the same folder. # # If you prefer to keep the JARs at another location, the properties # at the very top of the file may changed. If you require more versatility # in specifiying JAR locations, see the original "build.properties.sample" file. # # Only the "shared" properties are required for a typical build. # # Running the Catcus unit tests is tricky. See the DEV list if you need help # with those. # # Although experimental, new developers may want to try the Maven build. # After installing Maven (maven.apache.org), you can change to your # jakarta-struts directory and execute: # # > maven # # All the dependencies will be automatically downloaded and installed for # you. # # $Id: build.properties.sample.lib 56520 2004-11-03 20:00:43Z niallp $ # ----------------------------------------------------------------------------- compile.deprecation=true # Properties related to local files # ----------------------------------------- # TODO: List of packages needed to be installed to run all these tasks # -- required for "shared" ------------------ # struts-lib.home - Where the Struts library is kept struts-lib.home=./lib # servlet.home - Where JAR file containing the Servlet API classes is kept # You may copy it to the struts-lib home or change this reference # Struts 1.2.x should compile against either version 2.2 or 2.3 servlet.jar=${struts-lib.home}/servlet.jar # -- required for "contrib" ----------------- # jstl.home - Where the JSTL distribution is kept jstl.home = /opt/Taglibs/jakarta-taglibs-standard-1.0.5 # struts.home struts.home = ../../ # -- required for testing ----------------- junit.home = /opt/JUnit # JUnit jar file, version 3.81 required junit.jar = ${junit.home}/junit3.8.1/junit.jar # apache.home - Where other precompiled jar files from Apache are kept # This may (optionally) include Ant, Cactus,Tomcat, and Xerces apache.home=/opt/Apache # -- used by other optional tasks----------- # The JAR file containing the Checkstyle package version 2.4, if available. If # you do not have Checkstyle installed, do not set this property. # checkstyle.jar = /opt/CheckStyle/checkstyle-2.4/checkstyle-all-2.4.jar # The Directory containing the PMD package distribution, 1.2.1, if available. If # you do not have PMD installed, do not set this property. # pmd.home = /opt/pmd/pmd-1.2.1 # Properties related to Struts "shared" # ----------------------------------------- # For more about these dependencies, see the installation page in the UserGuide antlr.jar=${struts-lib.home}/antlr.jar commons-beanutils.jar=${struts-lib.home}/commons-beanutils.jar commons-digester.jar=${struts-lib.home}/commons-digester.jar commons-fileupload.jar=${struts-lib.home}/commons-fileupload.jar commons-logging.jar=${struts-lib.home}/commons-logging.jar commons-validator.jar=${struts-lib.home}/commons-validator.jar jakarta-oro.jar=${struts-lib.home}/jakarta-oro.jar # Properties related to Struts "contrib" # ----------------------------------------- # These links to the JSTL jar files are only required for building the # Struts-EL contrib library. If they are not present, it will not build that # contrib library (although it doesn't prevent you from building it directly in # "contrib/struts-el". jstl.jar =${jstl.home}/lib/jstl.jar jstl-standard.jar=${jstl.home}/lib/standard.jar jstl.tld.dir =${jstl.home}/tld # Properties related to Struts unit testing # ----------------------------------------- # Choose your Cactus! # (Uncomment only one set of properties) # # In order for the Cactus tests to work, you must have a copy of # junit.jar in ANT_HOME/lib (See Ant docs on JUnit task) # # -- Cactus 12-1.3 home ------------------ #cactus.home=${apache.home}/jakarta-cactus-12-1.3 #cactus.lib=${cactus.home}/lib # Cactus jar for the Servlet API corresponding to the servlet.jar file # selected above (either 2.2 or 2.3) #cactus.jar = ${cactus.lib}/cactus.jar # Cactus Ant custom tasks jar #cactus.ant.jar = ${cactus.lib}/cactus-ant.jar # AspectJ from Cactus distribution #aspectjrt.jar = ${cactus.lib}/aspectjrt.jar # The httpunit runtime jar #httpunit.jar = ${cactus.lib}/httpunit.jar # Log4J from Jakarta-Commons #log4j.jar = ${cactus.lib}/log4j-1.2rc1.jar # Httpclient from Jakarta-Commons #commons-httpclient.jar = ${cactus.lib}/commons-httpclient-20020421.jar # -- Cactus 12-1.4 home -------------------- #cactus.home=${apache.home}/jakarta-cactus-12-1.4 #cactus.lib=${cactus.home}/lib # Cactus jar for the Servlet API corresponding to the servlet.jar file # selected above (either 2.2 or 2.3) #cactus.jar = ${cactus.lib}/cactus-1.4.jar # Cactus Ant custom tasks jar #cactus.ant.jar = ${cactus.lib}/cactus-ant-1.4.jar # AspectJ from Cactus distribution #aspectjrt.jar = ${cactus.lib}/aspectjrt-1.0.5.jar # The httpunit runtime jar #httpunit.jar = ${cactus.lib}/httpunit-1.4.1.jar # Log4J from Jakarta-Commons #log4j.jar = ${cactus.lib}/log4j-1.2.5.jar # Httpclient from Jakarta-Commons #commons-httpclient.jar = ${cactus.lib}/commons-httpclient-2.0alpha1-20020606.jar # -- Cactus 12-1.4.1 home ---------------- #cactus.home=${apache.home}/jakarta-cactus-12-1.4.1 #cactus.lib=${cactus.home}/lib # Cactus jar for the Servlet API corresponding to the servlet.jar file # selected above (either 2.2 or 2.3) #cactus.jar = ${cactus.lib}/cactus-1.4.1.jar # Cactus Ant custom tasks jar #cactus.ant.jar = ${cactus.lib}/cactus-ant-1.4.1.jar # AspectJ from Cactus distribution #aspectjrt.jar = ${cactus.lib}/aspectjrt-1.0.5.jar # The httpunit runtime jar #httpunit.jar = ${cactus.lib}/httpunit-1.4.1.jar # Log4J from Jakarta-Commons #log4j.jar = ${cactus.lib}/log4j-1.2.5.jar # Httpclient from Jakarta-Commons #commons-httpclient.jar = ${cactus.lib}/commons-httpclient-2.0alpha1-20020606.jar # -- Cactus 13-1.3 home ------------------- #cactus.home=${apache.home}/jakarta-cactus-13-1.3 #cactus.lib=${cactus.home}/lib # Cactus jar for the Servlet API corresponding to the servlet.jar file # selected above (either 2.2 or 2.3) #cactus.jar = ${cactus.lib}/cactus.jar # Cactus Ant custom tasks jar #cactus.ant.jar = ${cactus.lib}/cactus-ant.jar # AspectJ from Cactus distribution #aspectjrt.jar = ${cactus.lib}/aspectjrt.jar # The httpunit runtime jar #httpunit.jar = ${cactus.lib}/httpunit.jar # Log4J from Jakarta-Commons #log4j.jar = ${cactus.lib}/log4j-1.2rc1.jar # JUnit jar file, version 3.81 or newer required. # if you uncomment this, comment the one above #junit.jar = ${cactus.lib}/junit.jar # Httpclient from Jakarta-Commons #commons-httpclient.jar = ${cactus.lib}/commons-httpclient.jar # -- Cactus 13-1.4 home ------------------- #cactus.home=${apache.home}/jakarta-cactus-13-1.4 #cactus.lib=${cactus.home}/lib # Cactus jar for the Servlet API corresponding to the servlet.jar file # selected above (either 2.2 or 2.3) #cactus.jar = ${cactus.lib}/cactus-1.4.jar # Cactus Ant custom tasks jar #cactus.ant.jar = ${cactus.lib}/cactus-ant-1.4.jar # AspectJ from Cactus distribution #aspectjrt.jar = ${cactus.lib}/aspectjrt-1.0.5.jar # The httpunit runtime jar #httpunit.jar = ${cactus.lib}/httpunit-1.4.1.jar # Log4J from Jakarta-Commons #log4j.jar = ${cactus.lib}/log4j-1.2.5.jar # Httpclient from Jakarta-Commons #commons-httpclient.jar = ${cactus.lib}/commons-httpclient-2.0alpha1-20020606.jar # -- Cactus 13-1.4.1 home ---------------- cactus.home=${apache.home}/jakarta-cactus-13-1.4.1 cactus.lib=${cactus.home}/lib # Cactus jar for the Servlet API corresponding to the servlet.jar file # selected above (either 2.2 or 2.3) cactus.jar = ${cactus.lib}/cactus-1.4.1.jar # Cactus Ant custom tasks jar cactus.ant.jar = ${cactus.lib}/cactus-ant-1.4.1.jar # AspectJ from Cactus distribution aspectjrt.jar = ${cactus.lib}/aspectjrt-1.0.5.jar # The httpunit runtime jar httpunit.jar = ${cactus.lib}/httpunit-1.4.1.jar # Log4J from Jakarta-Commons log4j.jar = ${cactus.lib}/log4j-1.2.5.jar # Httpclient from Jakarta-Commons commons-httpclient.jar = ${cactus.lib}/commons-httpclient-2.0alpha1-20020606.jar # -- Shared catus settings ---------------- # Scheme used to run tests for cactus, http, https. cactus.contextScheme = http # Host used to run tests for cactus, localhost. cactus.contextHost = localhost # Port used to run tests for cactus, change to non standard port # if container is already running on that port. cactus.contextPort = 8080 # Application(context) used to run tests for cactus. cactus.contextApp = test # Ant Optional Jars for Junit task ant.optional.jar = ${apache.home}/apache-ant-1.5.3-1/lib/optional.jar # Ant Jar for optional taglib documentation task ant.jar=${apache.home}/apache-ant-1.5.3-1/lib/ant.jar # Servlet engine locations for the tests # Note: If you don't want to run the test on a given servlet engine, just # comment it's home property. For example, if you don't want to run the # tests on Tomcat 4.0, comment the "tomcat.home.40" property. tomcat.home.33 = ${apache.home}/jakarta-tomcat-3.3.1 tomcat.home.40 = ${apache.home}/jakarta-tomcat-4.0.6 tomcat.home.41 = ${apache.home}/jakarta-tomcat-4.1.30 # use value of tomcat.home.41 to set equivalent property for Maven-Cactus plug-in cactus.home.tomcat4x=${tomcat.home.41} # Properties related to optional Tomcat tasks # ------------------------------------ # The directory containing your binary distribution of Tomcat 4.0 ("Catalina" # is the servlet container part of this distribution), from CVS module # "jakarta-tomcat-4.0" at jakarta.apache.org). This is only required # if you are going to execute the "deploy.catalina" target. catalina.home=${apache.home}/jakarta-tomcat-4.0.6 # The JAR file containing the JSP API classes to compile against if you are # using JSP 2.0 or later (where these classes are separated from servlet.jar). # If you are using JSP 1.1 or 1.2, leave this property unset #jsp.jar=${apache.home}/jakarta-servletapi/lib/jsp.jar # The directory containing your binary distribution of Tomcat 3.3, from CVS # module "jakarta-tomcat" (and branch "TOMCAT_32") at jakarta.apache.org. # This is only required if you are going to execute the "deploy.tomcat" target. tomcat.home=${apache.home}/jakarta-tomcat-3.3.1 # The JAR file containing the Xerces parser. This is only required if you are # going to execute the "deploy.catalina" target. xerces.jar=${apache.home}/xerces-1_4_4/xerces.jar ### end libstruts1.2-java-1.2.9/build.xml0000644000175000017500000012510610423137322017307 0ustar arnaudarnaud00000000000000 composite ${attr.value}
    |
    Search ${pom.name}
    Google

    ${rowMode} ${attr.value}

    Goals

    GoalDescription
    ${rowMode} ${_goalName}
    DateAuthorFiles/Message
    ${rowMode}
    ${pom.repository.url} ${url}?&content-type=text/vnd.viewcvs-markup - v
    libstruts1.2-java-1.2.9/debian/0000755000175000017500000000000010423130530016675 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/debian/patches/0000755000175000017500000000000010423130530020324 5ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/debian/patches/01_build_javac_target.patch0000644000175000017500000000101310423127602025457 0ustar arnaudarnaud00000000000000--- build.xml.old 2006-03-09 15:32:38.000000000 +0000 +++ build.xml 2006-04-24 10:26:48.000000000 +0000 @@ -398,7 +398,8 @@ destdir="${build.home}/library/classes" debug="${compile.debug}" optimize="${compile.optimize}" - deprecation="${compile.deprecation}"> + deprecation="${compile.deprecation}" + target="${compile.target}"> libstruts1.2-java-1.2.9/debian/patches/01_build_javac_target.patch.level-0.log0000644000175000017500000000015610423130530027503 0ustar arnaudarnaud00000000000000patching file build.xml Hunk #1 FAILED at 398. 1 out of 1 hunk FAILED -- saving rejects to file build.xml.rej libstruts1.2-java-1.2.9/debian/patches/01_build_javac_target.patch.level-1.log0000644000175000017500000000063410423130530027505 0ustar arnaudarnaud00000000000000missing header for unified diff at line 3 of patch can't find file to patch at input line 3 Perhaps you used the wrong -p or --strip option? The text leading up to this was: -------------------------- |--- build.xml.old 2006-03-09 15:32:38.000000000 +0000 |+++ build.xml 2006-04-24 10:26:48.000000000 +0000 -------------------------- File to patch: Skip this patch? [y] Skipping patch. 1 out of 1 hunk ignored libstruts1.2-java-1.2.9/debian/patches/01_build_javac_target.patch.level-2.log0000644000175000017500000000063410423130530027506 0ustar arnaudarnaud00000000000000missing header for unified diff at line 3 of patch can't find file to patch at input line 3 Perhaps you used the wrong -p or --strip option? The text leading up to this was: -------------------------- |--- build.xml.old 2006-03-09 15:32:38.000000000 +0000 |+++ build.xml 2006-04-24 10:26:48.000000000 +0000 -------------------------- File to patch: Skip this patch? [y] Skipping patch. 1 out of 1 hunk ignored libstruts1.2-java-1.2.9/debian/control0000644000175000017500000000354110321220165020304 0ustar arnaudarnaud00000000000000Source: libstruts1.2-java Section: devel Priority: optional Maintainer: Debian Java Maintainers Uploaders: Arnaud Vandyck , Stefan Gybas , Wolfgang Baer Build-Depends-Indep: debhelper (>= 4.2.30), cdbs (>= 0.4.8), kaffe (>= 2:1.1.5-3), ant, ant-optional, libxerces2-java, libxalan2-java, libcommons-beanutils-java (>= 1.7.0-1), libcommons-digester-java (>= 1.7-1), libcommons-fileupload-java (>= 1.0-1), libcommons-logging-java, libcommons-validator-java (>= 1.1.4-1), liboro-java, libservlet2.3-java, antlr, Standards-Version: 3.6.2 Package: libstruts1.2-java Architecture: all Section: devel Priority: optional Depends: kaffe | java1-runtime | java2-runtime, libcommons-beanutils-java (>= 1.7.0-1), libcommons-digester-java (>= 1.7-1), libcommons-fileupload-java (>= 1.0-1), libcommons-logging-java, libcommons-validator-java (>= 1.1.4-1), liboro-java, libservlet2.3-java Description: Java Framework for MVC web applications The core of the Struts framework is a flexible control layer based on standard technologies like Servlets, JavaBeans, ResourceBundles, and Extensible Markup Language (XML), as well as various Jakarta Commons packages. Struts encourages application architectures based on the Model 2 approach, a variation of the classic Model-View-Controller (MVC) design paradigm. . Struts provides its own Controller component and integrates with other technologies to provide the Model and the View. For the Model, Struts can interact with any standard data access technology, including Enterprise Java Beans (EJB), JDBC, and Object Relational Bridge. For the View, Struts works well with JavaServer Pages (JSP), including JSTL and JSF, as well as Velocity Templates, XSLT, and other presentation systems. . For more information see http://struts.apache.org/. libstruts1.2-java-1.2.9/debian/compat0000644000175000017500000000000210147404065020105 0ustar arnaudarnaud000000000000004 libstruts1.2-java-1.2.9/debian/ant.properties0000644000175000017500000000100510321220165021572 0ustar arnaudarnaud00000000000000compile.target=1.3 commons-beanutils.jar=/usr/share/java/commons-beanutils.jar commons-digester.jar=/usr/share/java/commons-digester.jar commons-fileupload.jar=/usr/share/java/commons-fileupload.jar commons-logging.jar=/usr/share/java/commons-logging.jar commons-validator.jar=/usr/share/java/commons-validator.jar jakarta-oro.jar=/usr/share/java/oro.jar jdbc20ext.jar=/usr/share/java/jdbc2_0-stdext.jar servlet.jar=/usr/share/java/servlet-2.3.jar antlr.jar=/usr/share/java/antlr.jar struts.el.home=contrib/struts-el libstruts1.2-java-1.2.9/debian/libstruts1.2-java.install0000644000175000017500000000026410147404065023474 0ustar arnaudarnaud00000000000000target/library/struts.jar /usr/share/struts1.2/ target/library/*.dtd /usr/share/struts1.2/ target/library/*.tld /usr/share/struts1.2/ target/library/*.xml /usr/share/struts1.2/ libstruts1.2-java-1.2.9/debian/changelog0000644000175000017500000000370610423122377020567 0ustar arnaudarnaud00000000000000libstruts1.2-java (1.2.9-1) unstable; urgency=low * New upstream release Fixes three security problems: CVE-2006-1546, CVE-2006-1547, CVE-2006-1548 (closes: #360551), thanks to Moritz Muehlenhoff. -- Arnaud Vandyck Mon, 24 Apr 2006 12:14:23 +0200 libstruts1.2-java (1.2.8-1) unstable; urgency=low * New upstream release Fixes a Cross-Site-Scriping vulnerability in the request handler for generating error messages, CVE-2005-3745 (closes: #340583) * Removed setting of DEB_ANT_COMPILER variable as already preset in kaffe -- Wolfgang Baer Tue, 29 Nov 2005 13:53:06 +0100 libstruts1.2-java (1.2.7-1) unstable; urgency=low * Move to main second try - this time a new upstream with orig.tar.gz * New upstream release + Updated copyright to Apache 2.0 License + Updated build-dep and depends on commons-beanutils to >= 1.7.0-1 + No longer dependencies on commons-collections or commons-lang - removed from build-deps and depends * Tightened dependencies on commons-digester and commons-beanutils * Added ant-optional to build-dep required by ant reorganization -- Wolfgang Baer Sun, 18 Sep 2005 19:37:04 +0200 libstruts1.2-java (1.2.4-2) unstable; urgency=low * Move to main - as ant moved to main * Added java1-runtime dependency as alternative * Changed Build-Depends to Build-Depends-Indep to fix lintian warning * Deleted extra license file in examples to fix lintian warning * Changed Standards-Version to 3.6.2 - no changes * Added myself to uploaders * Upload sponsored by Petter Reinholdtsen -- Wolfgang Baer Sat, 10 Sep 2005 14:04:11 +0200 libstruts1.2-java (1.2.4-1) unstable; urgency=low * New upstream release based on libstruts1.1. * depends on ant (not libant1.6-java) because regexp is needed in the build; antlr; commons-validator >= 1.3 -- Arnaud Vandyck Fri, 19 Nov 2004 15:35:25 +0100 libstruts1.2-java-1.2.9/debian/copyright0000644000175000017500000002450410321220165020636 0ustar arnaudarnaud00000000000000This package was debianized by Stefan Gybas on 01-Jul-2003. The source code was downloaded from . Copyright (BSD-style license): Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. Modifications for Debian are copyright (C) 2003 Stefan Gybas and released under the terms of the GPL version 2, or any later version. On Debian systems the text of the GPL can be found in /usr/share/common-licenses/GPL. libstruts1.2-java-1.2.9/debian/rules0000755000175000017500000000125310357205451017771 0ustar arnaudarnaud00000000000000#!/usr/bin/make -f # debian/rules file for libstruts1.2-java (uses cdbs) include /usr/share/cdbs/1/rules/debhelper.mk include /usr/share/cdbs/1/rules/simple-patchsys.mk include /usr/share/cdbs/1/class/ant.mk JAVA_HOME := /usr/lib/kaffe ANT_HOME := /usr/share/ant DEB_JARS := xercesImpl xml-apis xalan2 $(ANT_HOME)/lib/ant-launcher.jar $(ANT_HOME)/lib/ant-trax.jar $(ANT_HOME)/lib/ant-apache-regexp.jar DEB_INSTALL_DIRS_libstruts1.2-java := /usr/share/java /usr/share/struts1.2 DEB_INSTALL_DOCS_libstruts1.2-java := NOTICE.txt STATUS.txt src/tiles-documentation src/examples src/example install/libstruts1.2-java:: rm -f src/example/org/apache/struts/webapp/example/LICENSE.txt libstruts1.2-java-1.2.9/debian/libstruts1.2-java.links0000644000175000017500000000010010147404065023133 0ustar arnaudarnaud00000000000000/usr/share/struts1.2/struts.jar /usr/share/java/struts-1.2.jar libstruts1.2-java-1.2.9/debian/stamp-patched0000644000175000017500000000000010423130530021340 0ustar arnaudarnaud00000000000000libstruts1.2-java-1.2.9/lib/0000755000175000017500000000000010423140514016224 5ustar arnaudarnaud00000000000000